diff --git a/MCUME_pico/.DS_Store b/MCUME_pico/.DS_Store new file mode 100644 index 0000000..c78abc1 Binary files /dev/null and b/MCUME_pico/.DS_Store differ diff --git a/MCUME_pico/CMakeLists.txt b/MCUME_pico/CMakeLists.txt new file mode 100644 index 0000000..a5c852c --- /dev/null +++ b/MCUME_pico/CMakeLists.txt @@ -0,0 +1,244 @@ +cmake_minimum_required(VERSION 3.12) + +# Pull in PICO SDK (must be before project) +include(pico_sdk_import.cmake) + +# We also need PICO EXTRAS +#include(pico_extras_import.cmake) + +project(mcume C CXX) + +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) + +# Initialize the Pico SDK +pico_sdk_init() + +add_subdirectory(FatFs_SPI build) + +include_directories(vga_t4) + +set(PICO81_SOURCES + pico81/Z80.c + pico81/AY8910.c + pico81/zx81.c + pico81/emuapi.cpp + pico81/pico81.cpp + pico81/AudioPlaySystem.cpp + ) + +set(PICOSPECCY_SOURCES + picospeccy/Z80.c + picospeccy/AY8910.c + picospeccy/spec.c + picospeccy/zx_filetyp_z80.c + picospeccy/emuapi.cpp + picospeccy/picospeccy.cpp + picospeccy/AudioPlaySystem.cpp + ) + +set(PICO800_SOURCES + pico800/antic.c + pico800/atari800.c + pico800/cpu.c + pico800/crc32.c + pico800/gtia.c + pico800/pia.c + pico800/pokey.c + pico800/pokeysnd.c + pico800/sio.c + pico800/emuapi.cpp + pico800/AudioPlaySystem.cpp + pico800/pico800.cpp + ) + +set(PICO5200_SOURCES + pico5200/antic.c + pico5200/atari5200.c + pico5200/cpu.c + pico5200/crc32.c + pico5200/gtia.c + pico5200/pokey.c + pico5200/pokeysnd.c + pico5200/emuapi.cpp + pico5200/AudioPlaySystem.cpp + pico5200/pico5200.cpp + ) + +set(PICO64_SOURCES + pico64/c64.cpp + pico64/cia1.cpp + pico64/cia2.cpp + pico64/cpu.cpp + pico64/patches.cpp + pico64/pla.cpp + pico64/roms.cpp + pico64/sid.cpp + pico64/util.cpp + pico64/vic.cpp + pico64/reSID.cpp + pico64/emuapi.cpp + pico64/AudioPlaySystem.cpp + pico64/pico64.cpp + ) + +set(PICOCOLEM_SOURCES + picocolem/Z80.c + picocolem/SN76489.c + picocolem/Colem.c + picocolem/emuapi.cpp + picocolem/picocolem.cpp + picocolem/AudioPlaySystem.cpp + ) + +set(PICOO2EM_SOURCES + picoo2em/audio.c + picoo2em/cpu.c + picoo2em/crc32.c + picoo2em/cset.c + picoo2em/Oddemu.c + picoo2em/table.c + picoo2em/vdc.c + picoo2em/vmachine.c + picoo2em/vpp_cset.c + picoo2em/vpp.c + picoo2em/emuapi.cpp + picoo2em/picoo2em.cpp + picoo2em/AudioPlaySystem.cpp + ) + +set(PICOVCS_SOURCES + picovcs/At2600.c + picovcs/Collision.c + picovcs/Cpu.c + picovcs/Display.c + picovcs/Exmacro.c + picovcs/Keyboard.c + picovcs/Memory.c + picovcs/Options.c + picovcs/Raster.c + picovcs/Table.c + picovcs/Tiasound.c + picovcs/Vcsemu.c + picovcs/Vmachine.c + picovcs/emuapi.cpp + picovcs/picovcs.cpp + picovcs/AudioPlaySystem.cpp + ) + +set(PICONOFRENDO_SOURCES + piconofrendo/bitmap.c + piconofrendo/config.c + piconofrendo/event.c + piconofrendo/log.c + piconofrendo/map000.c + piconofrendo/map001.c + piconofrendo/map002.c + piconofrendo/map003.c + piconofrendo/map004.c + piconofrendo/map005.c + piconofrendo/map007.c + piconofrendo/map008.c + piconofrendo/map009.c + piconofrendo/map011.c + piconofrendo/map015.c + piconofrendo/map016.c + piconofrendo/map018.c + piconofrendo/map019.c + piconofrendo/map024.c + piconofrendo/map032.c + piconofrendo/map033.c + piconofrendo/map034.c + piconofrendo/map040.c + piconofrendo/map041.c + piconofrendo/map042.c + piconofrendo/map046.c + piconofrendo/map050.c + piconofrendo/map064.c + piconofrendo/map065.c + piconofrendo/map066.c + piconofrendo/map070.c + piconofrendo/map073.c + piconofrendo/map075.c + piconofrendo/map078.c + piconofrendo/map079.c + piconofrendo/map085.c + piconofrendo/map087.c + piconofrendo/map093.c + piconofrendo/map094.c + piconofrendo/map099.c + piconofrendo/map160.c + piconofrendo/map229.c + piconofrendo/map231.c + piconofrendo/mapvrc.c + piconofrendo/mmc5_snd.c + piconofrendo/mmclist.c + piconofrendo/nes_apu.c + piconofrendo/nes_emu.c + piconofrendo/nes_mmc.c + piconofrendo/nes_pal.c + piconofrendo/nes_ppu.c + piconofrendo/nes_rom_light.c + piconofrendo/nes.c + piconofrendo/nes6502.c + piconofrendo/nesinput.c + piconofrendo/nofrendo.c + piconofrendo/vid_drv.c + piconofrendo/vrcvisnd.c + piconofrendo/emuapi.cpp + piconofrendo/piconofrendo.cpp + piconofrendo/AudioPlaySystem.cpp + ) + +set(VGA_T4_SOURCES + vga_t4/VGA_t4.cpp + vga_t4/scanvideo.c + vga_t4/vga_modes.c + ) + +set(GFXENGINE_SOURCES + gfxengine/gfxengine.cpp + ) + +set(TESTIO_SOURCES + testio/testio.cpp + testio/emuapi.cpp + ) + +add_executable(mcume + ${GFXENGINE_SOURCES} +# ${PICO81_SOURCES} +# ${PICO800_SOURCES} +# ${PICO5200_SOURCES} +# ${PICOSPECCY_SOURCES} +# ${PICO64_SOURCES} +# ${PICOCOLEM_SOURCES} +# ${PICOO2EM_SOURCES} +# ${PICOVCS_SOURCES} +# ${PICONOFRENDO_SOURCES} +# ${TESTIO_SOURCES} + ${VGA_T4_SOURCES} + ) + +target_link_libraries(mcume pico_multicore + pico_stdlib + FatFs_SPI +# pico_scanvideo_dpi + hardware_adc + hardware_pio + hardware_pwm + ) + + +#target_compile_options(mcume PUBLIC -O3) +#target_compile_options(mcume PUBLIC -Wall -Wextra -Wno-unused-function -Wno-unused-parameter) +IF (NOT DEFINED N_SD_CARDS) + SET(N_SD_CARDS 1) +ENDIF() +target_compile_definitions(mcume PUBLIC DEBUG N_SD_CARDS=${N_SD_CARDS}) + + +#pico_enable_stdio_uart(mcume 0) +#pico_enable_stdio_usb(mcume 1) + +pico_add_extra_outputs(mcume) diff --git a/MCUME_pico/FatFs_SPI/.DS_Store b/MCUME_pico/FatFs_SPI/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/MCUME_pico/FatFs_SPI/.DS_Store differ diff --git a/MCUME_pico/FatFs_SPI/CMakeLists.txt b/MCUME_pico/FatFs_SPI/CMakeLists.txt new file mode 100755 index 0000000..ef35648 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/CMakeLists.txt @@ -0,0 +1,29 @@ +add_library(FatFs_SPI INTERFACE) +target_sources(FatFs_SPI INTERFACE + ${CMAKE_CURRENT_LIST_DIR}/ff14a/source/ffsystem.c + ${CMAKE_CURRENT_LIST_DIR}/ff14a/source/ffunicode.c + ${CMAKE_CURRENT_LIST_DIR}/ff14a/source/ff.c + ${CMAKE_CURRENT_LIST_DIR}/sd_driver/sd_spi.c + ${CMAKE_CURRENT_LIST_DIR}/sd_driver/demo_logging.c + ${CMAKE_CURRENT_LIST_DIR}/sd_driver/hw_config.c + ${CMAKE_CURRENT_LIST_DIR}/sd_driver/spi.c + ${CMAKE_CURRENT_LIST_DIR}/sd_driver/sd_card.c + ${CMAKE_CURRENT_LIST_DIR}/sd_driver/crc.c + ${CMAKE_CURRENT_LIST_DIR}/sd_driver/my_debug.c + ${CMAKE_CURRENT_LIST_DIR}/src/glue.c + ${CMAKE_CURRENT_LIST_DIR}/src/f_util.c + ${CMAKE_CURRENT_LIST_DIR}/src/ff_stdio.c + ${CMAKE_CURRENT_LIST_DIR}/src/my_debug.c + ${CMAKE_CURRENT_LIST_DIR}/src/rtc.c +) +target_include_directories(FatFs_SPI INTERFACE + ff14a/source + sd_driver + include +) +target_link_libraries(FatFs_SPI INTERFACE + hardware_spi + hardware_dma + hardware_rtc + pico_stdlib +) diff --git a/MCUME_pico/FatFs_SPI/ff14a/LICENSE.txt b/MCUME_pico/FatFs_SPI/ff14a/LICENSE.txt new file mode 100755 index 0000000..25379e4 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/ff14a/LICENSE.txt @@ -0,0 +1,24 @@ +FatFs License + +FatFs has being developped as a personal project of the author, ChaN. It is free from the code anyone else wrote at current release. Following code block shows a copy of the FatFs license document that heading the source files. + +/*----------------------------------------------------------------------------/ +/ FatFs - Generic FAT Filesystem Module Rx.xx / +/-----------------------------------------------------------------------------/ +/ +/ Copyright (C) 20xx, ChaN, all right reserved. +/ +/ FatFs module is an open source software. Redistribution and use of FatFs in +/ source and binary forms, with or without modification, are permitted provided +/ that the following condition is met: +/ +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +/----------------------------------------------------------------------------*/ + +Therefore FatFs license is one of the BSD-style licenses, but there is a significant feature. FatFs is mainly intended for embedded systems. In order to extend the usability for commercial products, the redistributions of FatFs in binary form, such as embedded code, binary library and any forms without source code, do not need to include about FatFs in the documentations. This is equivalent to the 1-clause BSD license. Of course FatFs is compatible with the most of open source software licenses include GNU GPL. When you redistribute the FatFs source code with changes or create a fork, the license can also be changed to GNU GPL, BSD-style license or any open source software license that not conflict with FatFs license. diff --git a/MCUME_pico/FatFs_SPI/ff14a/source/00history.txt b/MCUME_pico/FatFs_SPI/ff14a/source/00history.txt new file mode 100755 index 0000000..d0ae4cd --- /dev/null +++ b/MCUME_pico/FatFs_SPI/ff14a/source/00history.txt @@ -0,0 +1,346 @@ +---------------------------------------------------------------------------- + Revision history of FatFs module +---------------------------------------------------------------------------- + +R0.00 (February 26, 2006) + + Prototype. + + + +R0.01 (April 29, 2006) + + The first release. + + + +R0.02 (June 01, 2006) + + Added FAT12 support. + Removed unbuffered mode. + Fixed a problem on small (<32M) partition. + + + +R0.02a (June 10, 2006) + + Added a configuration option (_FS_MINIMUM). + + + +R0.03 (September 22, 2006) + + Added f_rename(). + Changed option _FS_MINIMUM to _FS_MINIMIZE. + + + +R0.03a (December 11, 2006) + + Improved cluster scan algorithm to write files fast. + Fixed f_mkdir() creates incorrect directory on FAT32. + + + +R0.04 (February 04, 2007) + + Added f_mkfs(). + Supported multiple drive system. + Changed some interfaces for multiple drive system. + Changed f_mountdrv() to f_mount(). + + + +R0.04a (April 01, 2007) + + Supported multiple partitions on a physical drive. + Added a capability of extending file size to f_lseek(). + Added minimization level 3. + Fixed an endian sensitive code in f_mkfs(). + + + +R0.04b (May 05, 2007) + + Added a configuration option _USE_NTFLAG. + Added FSINFO support. + Fixed DBCS name can result FR_INVALID_NAME. + Fixed short seek (<= csize) collapses the file object. + + + +R0.05 (August 25, 2007) + + Changed arguments of f_read(), f_write() and f_mkfs(). + Fixed f_mkfs() on FAT32 creates incorrect FSINFO. + Fixed f_mkdir() on FAT32 creates incorrect directory. + + + +R0.05a (February 03, 2008) + + Added f_truncate() and f_utime(). + Fixed off by one error at FAT sub-type determination. + Fixed btr in f_read() can be mistruncated. + Fixed cached sector is not flushed when create and close without write. + + + +R0.06 (April 01, 2008) + + Added fputc(), fputs(), fprintf() and fgets(). + Improved performance of f_lseek() on moving to the same or following cluster. + + + +R0.07 (April 01, 2009) + + Merged Tiny-FatFs as a configuration option. (_FS_TINY) + Added long file name feature. (_USE_LFN) + Added multiple code page feature. (_CODE_PAGE) + Added re-entrancy for multitask operation. (_FS_REENTRANT) + Added auto cluster size selection to f_mkfs(). + Added rewind option to f_readdir(). + Changed result code of critical errors. + Renamed string functions to avoid name collision. + + + +R0.07a (April 14, 2009) + + Septemberarated out OS dependent code on reentrant cfg. + Added multiple sector size feature. + + + +R0.07c (June 21, 2009) + + Fixed f_unlink() can return FR_OK on error. + Fixed wrong cache control in f_lseek(). + Added relative path feature. + Added f_chdir() and f_chdrive(). + Added proper case conversion to extended character. + + + +R0.07e (November 03, 2009) + + Septemberarated out configuration options from ff.h to ffconf.h. + Fixed f_unlink() fails to remove a sub-directory on _FS_RPATH. + Fixed name matching error on the 13 character boundary. + Added a configuration option, _LFN_UNICODE. + Changed f_readdir() to return the SFN with always upper case on non-LFN cfg. + + + +R0.08 (May 15, 2010) + + Added a memory configuration option. (_USE_LFN = 3) + Added file lock feature. (_FS_SHARE) + Added fast seek feature. (_USE_FASTSEEK) + Changed some types on the API, XCHAR->TCHAR. + Changed .fname in the FILINFO structure on Unicode cfg. + String functions support UTF-8 encoding files on Unicode cfg. + + + +R0.08a (August 16, 2010) + + Added f_getcwd(). (_FS_RPATH = 2) + Added sector erase feature. (_USE_ERASE) + Moved file lock semaphore table from fs object to the bss. + Fixed f_mkfs() creates wrong FAT32 volume. + + + +R0.08b (January 15, 2011) + + Fast seek feature is also applied to f_read() and f_write(). + f_lseek() reports required table size on creating CLMP. + Extended format syntax of f_printf(). + Ignores duplicated directory separators in given path name. + + + +R0.09 (September 06, 2011) + + f_mkfs() supports multiple partition to complete the multiple partition feature. + Added f_fdisk(). + + + +R0.09a (August 27, 2012) + + Changed f_open() and f_opendir() reject null object pointer to avoid crash. + Changed option name _FS_SHARE to _FS_LOCK. + Fixed assertion failure due to OS/2 EA on FAT12/16 volume. + + + +R0.09b (January 24, 2013) + + Added f_setlabel() and f_getlabel(). + + + +R0.10 (October 02, 2013) + + Added selection of character encoding on the file. (_STRF_ENCODE) + Added f_closedir(). + Added forced full FAT scan for f_getfree(). (_FS_NOFSINFO) + Added forced mount feature with changes of f_mount(). + Improved behavior of volume auto detection. + Improved write throughput of f_puts() and f_printf(). + Changed argument of f_chdrive(), f_mkfs(), disk_read() and disk_write(). + Fixed f_write() can be truncated when the file size is close to 4GB. + Fixed f_open(), f_mkdir() and f_setlabel() can return incorrect value on error. + + + +R0.10a (January 15, 2014) + + Added arbitrary strings as drive number in the path name. (_STR_VOLUME_ID) + Added a configuration option of minimum sector size. (_MIN_SS) + 2nd argument of f_rename() can have a drive number and it will be ignored. + Fixed f_mount() with forced mount fails when drive number is >= 1. (appeared at R0.10) + Fixed f_close() invalidates the file object without volume lock. + Fixed f_closedir() returns but the volume lock is left acquired. (appeared at R0.10) + Fixed creation of an entry with LFN fails on too many SFN collisions. (appeared at R0.07) + + + +R0.10b (May 19, 2014) + + Fixed a hard error in the disk I/O layer can collapse the directory entry. + Fixed LFN entry is not deleted when delete/rename an object with lossy converted SFN. (appeared at R0.07) + + + +R0.10c (November 09, 2014) + + Added a configuration option for the platforms without RTC. (_FS_NORTC) + Changed option name _USE_ERASE to _USE_TRIM. + Fixed volume label created by Mac OS X cannot be retrieved with f_getlabel(). (appeared at R0.09b) + Fixed a potential problem of FAT access that can appear on disk error. + Fixed null pointer dereference on attempting to delete the root direcotry. (appeared at R0.08) + + + +R0.11 (February 09, 2015) + + Added f_findfirst(), f_findnext() and f_findclose(). (_USE_FIND) + Fixed f_unlink() does not remove cluster chain of the file. (appeared at R0.10c) + Fixed _FS_NORTC option does not work properly. (appeared at R0.10c) + + + +R0.11a (September 05, 2015) + + Fixed wrong media change can lead a deadlock at thread-safe configuration. + Added code page 771, 860, 861, 863, 864, 865 and 869. (_CODE_PAGE) + Removed some code pages actually not exist on the standard systems. (_CODE_PAGE) + Fixed errors in the case conversion teble of code page 437 and 850 (ff.c). + Fixed errors in the case conversion teble of Unicode (cc*.c). + + + +R0.12 (April 12, 2016) + + Added support for exFAT file system. (_FS_EXFAT) + Added f_expand(). (_USE_EXPAND) + Changed some members in FINFO structure and behavior of f_readdir(). + Added an option _USE_CHMOD. + Removed an option _WORD_ACCESS. + Fixed errors in the case conversion table of Unicode (cc*.c). + + + +R0.12a (July 10, 2016) + + Added support for creating exFAT volume with some changes of f_mkfs(). + Added a file open method FA_OPEN_APPEND. An f_lseek() following f_open() is no longer needed. + f_forward() is available regardless of _FS_TINY. + Fixed f_mkfs() creates wrong volume. (appeared at R0.12) + Fixed wrong memory read in create_name(). (appeared at R0.12) + Fixed compilation fails at some configurations, _USE_FASTSEEK and _USE_FORWARD. + + + +R0.12b (September 04, 2016) + + Made f_rename() be able to rename objects with the same name but case. + Fixed an error in the case conversion teble of code page 866. (ff.c) + Fixed writing data is truncated at the file offset 4GiB on the exFAT volume. (appeared at R0.12) + Fixed creating a file in the root directory of exFAT volume can fail. (appeared at R0.12) + Fixed f_mkfs() creating exFAT volume with too small cluster size can collapse unallocated memory. (appeared at R0.12) + Fixed wrong object name can be returned when read directory at Unicode cfg. (appeared at R0.12) + Fixed large file allocation/removing on the exFAT volume collapses allocation bitmap. (appeared at R0.12) + Fixed some internal errors in f_expand() and f_lseek(). (appeared at R0.12) + + + +R0.12c (March 04, 2017) + + Improved write throughput at the fragmented file on the exFAT volume. + Made memory usage for exFAT be able to be reduced as decreasing _MAX_LFN. + Fixed successive f_getfree() can return wrong count on the FAT12/16 volume. (appeared at R0.12) + Fixed configuration option _VOLUMES cannot be set 10. (appeared at R0.10c) + + + +R0.13 (May 21, 2017) + + Changed heading character of configuration keywords "_" to "FF_". + Removed ASCII-only configuration, FF_CODE_PAGE = 1. Use FF_CODE_PAGE = 437 instead. + Added f_setcp(), run-time code page configuration. (FF_CODE_PAGE = 0) + Improved cluster allocation time on stretch a deep buried cluster chain. + Improved processing time of f_mkdir() with large cluster size by using FF_USE_LFN = 3. + Improved NoFatChain flag of the fragmented file to be set after it is truncated and got contiguous. + Fixed archive attribute is left not set when a file on the exFAT volume is renamed. (appeared at R0.12) + Fixed exFAT FAT entry can be collapsed when write or lseek operation to the existing file is done. (appeared at R0.12c) + Fixed creating a file can fail when a new cluster allocation to the exFAT directory occures. (appeared at R0.12c) + + + +R0.13a (October 14, 2017) + + Added support for UTF-8 encoding on the API. (FF_LFN_UNICODE = 2) + Added options for file name output buffer. (FF_LFN_BUF, FF_SFN_BUF). + Added dynamic memory allocation option for working buffer of f_mkfs() and f_fdisk(). + Fixed f_fdisk() and f_mkfs() create the partition table with wrong CHS parameters. (appeared at R0.09) + Fixed f_unlink() can cause lost clusters at fragmented file on the exFAT volume. (appeared at R0.12c) + Fixed f_setlabel() rejects some valid characters for exFAT volume. (appeared at R0.12) + + + +R0.13b (April 07, 2018) + + Added support for UTF-32 encoding on the API. (FF_LFN_UNICODE = 3) + Added support for Unix style volume ID. (FF_STR_VOLUME_ID = 2) + Fixed accesing any object on the exFAT root directory beyond the cluster boundary can fail. (appeared at R0.12c) + Fixed f_setlabel() does not reject some invalid characters. (appeared at R0.09b) + + + +R0.13c (October 14, 2018) + Supported stdint.h for C99 and later. (integer.h was included in ff.h) + Fixed reading a directory gets infinite loop when the last directory entry is not empty. (appeared at R0.12) + Fixed creating a sub-directory in the fragmented sub-directory on the exFAT volume collapses FAT chain of the parent directory. (appeared at R0.12) + Fixed f_getcwd() cause output buffer overrun when the buffer has a valid drive number. (appeared at R0.13b) + + + +R0.14 (October 14, 2019) + Added support for 64-bit LBA and GUID partition table (FF_LBA64 = 1) + Changed some API functions, f_mkfs() and f_fdisk(). + Fixed f_open() function cannot find the file with file name in length of FF_MAX_LFN characters. + Fixed f_readdir() function cannot retrieve long file names in length of FF_MAX_LFN - 1 characters. + Fixed f_readdir() function returns file names with wrong case conversion. (appeared at R0.12) + Fixed f_mkfs() function can fail to create exFAT volume in the second partition. (appeared at R0.12) + + +R0.14a (December 5, 2020) + Limited number of recursive calls in f_findnext(). + Fixed old floppy disks formatted with MS-DOS 2.x and 3.x cannot be mounted. + Fixed some compiler warnings. + diff --git a/MCUME_pico/FatFs_SPI/ff14a/source/00readme.txt b/MCUME_pico/FatFs_SPI/ff14a/source/00readme.txt new file mode 100755 index 0000000..809be15 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/ff14a/source/00readme.txt @@ -0,0 +1,21 @@ +FatFs Module Source Files R0.14a + + +FILES + + 00readme.txt This file. + 00history.txt Revision history. + ff.c FatFs module. + ffconf.h Configuration file of FatFs module. + ff.h Common include file for FatFs and application module. + diskio.h Common include file for FatFs and disk I/O module. + diskio.c An example of glue function to attach existing disk I/O module to FatFs. + ffunicode.c Optional Unicode utility functions. + ffsystem.c An example of optional O/S related functions. + + + Low level disk I/O module is not included in this archive because the FatFs + module is only a generic file system layer and it does not depend on any specific + storage device. You need to provide a low level disk I/O module written to + control the storage device that attached to the target system. + diff --git a/MCUME_pico/FatFs_SPI/ff14a/source/diskio.c b/MCUME_pico/FatFs_SPI/ff14a/source/diskio.c new file mode 100755 index 0000000..81aaf59 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/ff14a/source/diskio.c @@ -0,0 +1,229 @@ +/*-----------------------------------------------------------------------*/ +/* Low level disk I/O module SKELETON for FatFs (C)ChaN, 2019 */ +/*-----------------------------------------------------------------------*/ +/* If a working storage control module is available, it should be */ +/* attached to the FatFs via a glue function rather than modifying it. */ +/* This is an example of glue functions to attach various exsisting */ +/* storage control modules to the FatFs module with a defined API. */ +/*-----------------------------------------------------------------------*/ + +#include "ff.h" /* Obtains integer types */ +#include "diskio.h" /* Declarations of disk functions */ + +/* Definitions of physical drive number for each drive */ +#define DEV_RAM 0 /* Example: Map Ramdisk to physical drive 0 */ +#define DEV_MMC 1 /* Example: Map MMC/SD card to physical drive 1 */ +#define DEV_USB 2 /* Example: Map USB MSD to physical drive 2 */ + + +/*-----------------------------------------------------------------------*/ +/* Get Drive Status */ +/*-----------------------------------------------------------------------*/ + +DSTATUS disk_status ( + BYTE pdrv /* Physical drive nmuber to identify the drive */ +) +{ + DSTATUS stat; + int result; + + switch (pdrv) { + case DEV_RAM : + result = RAM_disk_status(); + + // translate the reslut code here + + return stat; + + case DEV_MMC : + result = MMC_disk_status(); + + // translate the reslut code here + + return stat; + + case DEV_USB : + result = USB_disk_status(); + + // translate the reslut code here + + return stat; + } + return STA_NOINIT; +} + + + +/*-----------------------------------------------------------------------*/ +/* Inidialize a Drive */ +/*-----------------------------------------------------------------------*/ + +DSTATUS disk_initialize ( + BYTE pdrv /* Physical drive nmuber to identify the drive */ +) +{ + DSTATUS stat; + int result; + + switch (pdrv) { + case DEV_RAM : + result = RAM_disk_initialize(); + + // translate the reslut code here + + return stat; + + case DEV_MMC : + result = MMC_disk_initialize(); + + // translate the reslut code here + + return stat; + + case DEV_USB : + result = USB_disk_initialize(); + + // translate the reslut code here + + return stat; + } + return STA_NOINIT; +} + + + +/*-----------------------------------------------------------------------*/ +/* Read Sector(s) */ +/*-----------------------------------------------------------------------*/ + +DRESULT disk_read ( + BYTE pdrv, /* Physical drive nmuber to identify the drive */ + BYTE *buff, /* Data buffer to store read data */ + LBA_t sector, /* Start sector in LBA */ + UINT count /* Number of sectors to read */ +) +{ + DRESULT res; + int result; + + switch (pdrv) { + case DEV_RAM : + // translate the arguments here + + result = RAM_disk_read(buff, sector, count); + + // translate the reslut code here + + return res; + + case DEV_MMC : + // translate the arguments here + + result = MMC_disk_read(buff, sector, count); + + // translate the reslut code here + + return res; + + case DEV_USB : + // translate the arguments here + + result = USB_disk_read(buff, sector, count); + + // translate the reslut code here + + return res; + } + + return RES_PARERR; +} + + + +/*-----------------------------------------------------------------------*/ +/* Write Sector(s) */ +/*-----------------------------------------------------------------------*/ + +#if FF_FS_READONLY == 0 + +DRESULT disk_write ( + BYTE pdrv, /* Physical drive nmuber to identify the drive */ + const BYTE *buff, /* Data to be written */ + LBA_t sector, /* Start sector in LBA */ + UINT count /* Number of sectors to write */ +) +{ + DRESULT res; + int result; + + switch (pdrv) { + case DEV_RAM : + // translate the arguments here + + result = RAM_disk_write(buff, sector, count); + + // translate the reslut code here + + return res; + + case DEV_MMC : + // translate the arguments here + + result = MMC_disk_write(buff, sector, count); + + // translate the reslut code here + + return res; + + case DEV_USB : + // translate the arguments here + + result = USB_disk_write(buff, sector, count); + + // translate the reslut code here + + return res; + } + + return RES_PARERR; +} + +#endif + + +/*-----------------------------------------------------------------------*/ +/* Miscellaneous Functions */ +/*-----------------------------------------------------------------------*/ + +DRESULT disk_ioctl ( + BYTE pdrv, /* Physical drive nmuber (0..) */ + BYTE cmd, /* Control code */ + void *buff /* Buffer to send/receive control data */ +) +{ + DRESULT res; + int result; + + switch (pdrv) { + case DEV_RAM : + + // Process of the command for the RAM drive + + return res; + + case DEV_MMC : + + // Process of the command for the MMC/SD card + + return res; + + case DEV_USB : + + // Process of the command the USB drive + + return res; + } + + return RES_PARERR; +} + diff --git a/MCUME_pico/FatFs_SPI/ff14a/source/diskio.h b/MCUME_pico/FatFs_SPI/ff14a/source/diskio.h new file mode 100755 index 0000000..c22afaa --- /dev/null +++ b/MCUME_pico/FatFs_SPI/ff14a/source/diskio.h @@ -0,0 +1,77 @@ +/*-----------------------------------------------------------------------/ +/ Low level disk interface modlue include file (C)ChaN, 2019 / +/-----------------------------------------------------------------------*/ + +#ifndef _DISKIO_DEFINED +#define _DISKIO_DEFINED + +#ifdef __cplusplus +extern "C" { +#endif + +/* Status of Disk Functions */ +typedef BYTE DSTATUS; + +/* Results of Disk Functions */ +typedef enum { + RES_OK = 0, /* 0: Successful */ + RES_ERROR, /* 1: R/W Error */ + RES_WRPRT, /* 2: Write Protected */ + RES_NOTRDY, /* 3: Not Ready */ + RES_PARERR /* 4: Invalid Parameter */ +} DRESULT; + + +/*---------------------------------------*/ +/* Prototypes for disk control functions */ + + +DSTATUS disk_initialize (BYTE pdrv); +DSTATUS disk_status (BYTE pdrv); +DRESULT disk_read (BYTE pdrv, BYTE* buff, LBA_t sector, UINT count); +DRESULT disk_write (BYTE pdrv, const BYTE* buff, LBA_t sector, UINT count); +DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff); + + +/* Disk Status Bits (DSTATUS) */ + +#define STA_NOINIT 0x01 /* Drive not initialized */ +#define STA_NODISK 0x02 /* No medium in the drive */ +#define STA_PROTECT 0x04 /* Write protected */ + + +/* Command code for disk_ioctrl fucntion */ + +/* Generic command (Used by FatFs) */ +#define CTRL_SYNC 0 /* Complete pending write process (needed at FF_FS_READONLY == 0) */ +#define GET_SECTOR_COUNT 1 /* Get media size (needed at FF_USE_MKFS == 1) */ +#define GET_SECTOR_SIZE 2 /* Get sector size (needed at FF_MAX_SS != FF_MIN_SS) */ +#define GET_BLOCK_SIZE 3 /* Get erase block size (needed at FF_USE_MKFS == 1) */ +#define CTRL_TRIM 4 /* Inform device that the data on the block of sectors is no longer used (needed at FF_USE_TRIM == 1) */ + +/* Generic command (Not used by FatFs) */ +#define CTRL_POWER 5 /* Get/Set power status */ +#define CTRL_LOCK 6 /* Lock/Unlock media removal */ +#define CTRL_EJECT 7 /* Eject media */ +#define CTRL_FORMAT 8 /* Create physical format on the media */ + +/* MMC/SDC specific ioctl command */ +#define MMC_GET_TYPE 10 /* Get card type */ +#define MMC_GET_CSD 11 /* Get CSD */ +#define MMC_GET_CID 12 /* Get CID */ +#define MMC_GET_OCR 13 /* Get OCR */ +#define MMC_GET_SDSTAT 14 /* Get SD status */ +#define ISDIO_READ 55 /* Read data form SD iSDIO register */ +#define ISDIO_WRITE 56 /* Write data to SD iSDIO register */ +#define ISDIO_MRITE 57 /* Masked write data to SD iSDIO register */ + +/* ATA/CF specific ioctl command */ +#define ATA_GET_REV 20 /* Get F/W revision */ +#define ATA_GET_MODEL 21 /* Get model name */ +#define ATA_GET_SN 22 /* Get serial number */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/MCUME_pico/FatFs_SPI/ff14a/source/ff.c b/MCUME_pico/FatFs_SPI/ff14a/source/ff.c new file mode 100755 index 0000000..a378cf1 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/ff14a/source/ff.c @@ -0,0 +1,6874 @@ +/*----------------------------------------------------------------------------/ +/ FatFs - Generic FAT Filesystem Module R0.14a / +/-----------------------------------------------------------------------------/ +/ +/ Copyright (C) 2020, ChaN, all right reserved. +/ +/ FatFs module is an open source software. Redistribution and use of FatFs in +/ source and binary forms, with or without modification, are permitted provided +/ that the following condition is met: +/ +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +/ +/----------------------------------------------------------------------------*/ + + +#include "ff.h" /* Declarations of FatFs API */ +#include "diskio.h" /* Declarations of device I/O functions */ + + +/*-------------------------------------------------------------------------- + + Module Private Definitions + +---------------------------------------------------------------------------*/ + +#if FF_DEFINED != 80196 /* Revision ID */ +#error Wrong include file (ff.h). +#endif + + +/* Limits and boundaries */ +#define MAX_DIR 0x200000 /* Max size of FAT directory */ +#define MAX_DIR_EX 0x10000000 /* Max size of exFAT directory */ +#define MAX_FAT12 0xFF5 /* Max FAT12 clusters (differs from specs, but right for real DOS/Windows behavior) */ +#define MAX_FAT16 0xFFF5 /* Max FAT16 clusters (differs from specs, but right for real DOS/Windows behavior) */ +#define MAX_FAT32 0x0FFFFFF5 /* Max FAT32 clusters (not specified, practical limit) */ +#define MAX_EXFAT 0x7FFFFFFD /* Max exFAT clusters (differs from specs, implementation limit) */ + + +/* Character code support macros */ +#define IsUpper(c) ((c) >= 'A' && (c) <= 'Z') +#define IsLower(c) ((c) >= 'a' && (c) <= 'z') +#define IsDigit(c) ((c) >= '0' && (c) <= '9') +#define IsSurrogate(c) ((c) >= 0xD800 && (c) <= 0xDFFF) +#define IsSurrogateH(c) ((c) >= 0xD800 && (c) <= 0xDBFF) +#define IsSurrogateL(c) ((c) >= 0xDC00 && (c) <= 0xDFFF) + + +/* Additional file access control and file status flags for internal use */ +#define FA_SEEKEND 0x20 /* Seek to end of the file on file open */ +#define FA_MODIFIED 0x40 /* File has been modified */ +#define FA_DIRTY 0x80 /* FIL.buf[] needs to be written-back */ + + +/* Additional file attribute bits for internal use */ +#define AM_VOL 0x08 /* Volume label */ +#define AM_LFN 0x0F /* LFN entry */ +#define AM_MASK 0x3F /* Mask of defined bits */ + + +/* Name status flags in fn[11] */ +#define NSFLAG 11 /* Index of the name status byte */ +#define NS_LOSS 0x01 /* Out of 8.3 format */ +#define NS_LFN 0x02 /* Force to create LFN entry */ +#define NS_LAST 0x04 /* Last segment */ +#define NS_BODY 0x08 /* Lower case flag (body) */ +#define NS_EXT 0x10 /* Lower case flag (ext) */ +#define NS_DOT 0x20 /* Dot entry */ +#define NS_NOLFN 0x40 /* Do not find LFN */ +#define NS_NONAME 0x80 /* Not followed */ + + +/* exFAT directory entry types */ +#define ET_BITMAP 0x81 /* Allocation bitmap */ +#define ET_UPCASE 0x82 /* Up-case table */ +#define ET_VLABEL 0x83 /* Volume label */ +#define ET_FILEDIR 0x85 /* File and directory */ +#define ET_STREAM 0xC0 /* Stream extension */ +#define ET_FILENAME 0xC1 /* Name extension */ + + +/* FatFs refers the FAT structure as simple byte array instead of structure member +/ because the C structure is not binary compatible between different platforms */ + +#define BS_JmpBoot 0 /* x86 jump instruction (3-byte) */ +#define BS_OEMName 3 /* OEM name (8-byte) */ +#define BPB_BytsPerSec 11 /* Sector size [byte] (WORD) */ +#define BPB_SecPerClus 13 /* Cluster size [sector] (BYTE) */ +#define BPB_RsvdSecCnt 14 /* Size of reserved area [sector] (WORD) */ +#define BPB_NumFATs 16 /* Number of FATs (BYTE) */ +#define BPB_RootEntCnt 17 /* Size of root directory area for FAT [entry] (WORD) */ +#define BPB_TotSec16 19 /* Volume size (16-bit) [sector] (WORD) */ +#define BPB_Media 21 /* Media descriptor byte (BYTE) */ +#define BPB_FATSz16 22 /* FAT size (16-bit) [sector] (WORD) */ +#define BPB_SecPerTrk 24 /* Number of sectors per track for int13h [sector] (WORD) */ +#define BPB_NumHeads 26 /* Number of heads for int13h (WORD) */ +#define BPB_HiddSec 28 /* Volume offset from top of the drive (DWORD) */ +#define BPB_TotSec32 32 /* Volume size (32-bit) [sector] (DWORD) */ +#define BS_DrvNum 36 /* Physical drive number for int13h (BYTE) */ +#define BS_NTres 37 /* WindowsNT error flag (BYTE) */ +#define BS_BootSig 38 /* Extended boot signature (BYTE) */ +#define BS_VolID 39 /* Volume serial number (DWORD) */ +#define BS_VolLab 43 /* Volume label string (8-byte) */ +#define BS_FilSysType 54 /* Filesystem type string (8-byte) */ +#define BS_BootCode 62 /* Boot code (448-byte) */ +#define BS_55AA 510 /* Signature word (WORD) */ + +#define BPB_FATSz32 36 /* FAT32: FAT size [sector] (DWORD) */ +#define BPB_ExtFlags32 40 /* FAT32: Extended flags (WORD) */ +#define BPB_FSVer32 42 /* FAT32: Filesystem version (WORD) */ +#define BPB_RootClus32 44 /* FAT32: Root directory cluster (DWORD) */ +#define BPB_FSInfo32 48 /* FAT32: Offset of FSINFO sector (WORD) */ +#define BPB_BkBootSec32 50 /* FAT32: Offset of backup boot sector (WORD) */ +#define BS_DrvNum32 64 /* FAT32: Physical drive number for int13h (BYTE) */ +#define BS_NTres32 65 /* FAT32: Error flag (BYTE) */ +#define BS_BootSig32 66 /* FAT32: Extended boot signature (BYTE) */ +#define BS_VolID32 67 /* FAT32: Volume serial number (DWORD) */ +#define BS_VolLab32 71 /* FAT32: Volume label string (8-byte) */ +#define BS_FilSysType32 82 /* FAT32: Filesystem type string (8-byte) */ +#define BS_BootCode32 90 /* FAT32: Boot code (420-byte) */ + +#define BPB_ZeroedEx 11 /* exFAT: MBZ field (53-byte) */ +#define BPB_VolOfsEx 64 /* exFAT: Volume offset from top of the drive [sector] (QWORD) */ +#define BPB_TotSecEx 72 /* exFAT: Volume size [sector] (QWORD) */ +#define BPB_FatOfsEx 80 /* exFAT: FAT offset from top of the volume [sector] (DWORD) */ +#define BPB_FatSzEx 84 /* exFAT: FAT size [sector] (DWORD) */ +#define BPB_DataOfsEx 88 /* exFAT: Data offset from top of the volume [sector] (DWORD) */ +#define BPB_NumClusEx 92 /* exFAT: Number of clusters (DWORD) */ +#define BPB_RootClusEx 96 /* exFAT: Root directory start cluster (DWORD) */ +#define BPB_VolIDEx 100 /* exFAT: Volume serial number (DWORD) */ +#define BPB_FSVerEx 104 /* exFAT: Filesystem version (WORD) */ +#define BPB_VolFlagEx 106 /* exFAT: Volume flags (WORD) */ +#define BPB_BytsPerSecEx 108 /* exFAT: Log2 of sector size in unit of byte (BYTE) */ +#define BPB_SecPerClusEx 109 /* exFAT: Log2 of cluster size in unit of sector (BYTE) */ +#define BPB_NumFATsEx 110 /* exFAT: Number of FATs (BYTE) */ +#define BPB_DrvNumEx 111 /* exFAT: Physical drive number for int13h (BYTE) */ +#define BPB_PercInUseEx 112 /* exFAT: Percent in use (BYTE) */ +#define BPB_RsvdEx 113 /* exFAT: Reserved (7-byte) */ +#define BS_BootCodeEx 120 /* exFAT: Boot code (390-byte) */ + +#define DIR_Name 0 /* Short file name (11-byte) */ +#define DIR_Attr 11 /* Attribute (BYTE) */ +#define DIR_NTres 12 /* Lower case flag (BYTE) */ +#define DIR_CrtTime10 13 /* Created time sub-second (BYTE) */ +#define DIR_CrtTime 14 /* Created time (DWORD) */ +#define DIR_LstAccDate 18 /* Last accessed date (WORD) */ +#define DIR_FstClusHI 20 /* Higher 16-bit of first cluster (WORD) */ +#define DIR_ModTime 22 /* Modified time (DWORD) */ +#define DIR_FstClusLO 26 /* Lower 16-bit of first cluster (WORD) */ +#define DIR_FileSize 28 /* File size (DWORD) */ +#define LDIR_Ord 0 /* LFN: LFN order and LLE flag (BYTE) */ +#define LDIR_Attr 11 /* LFN: LFN attribute (BYTE) */ +#define LDIR_Type 12 /* LFN: Entry type (BYTE) */ +#define LDIR_Chksum 13 /* LFN: Checksum of the SFN (BYTE) */ +#define LDIR_FstClusLO 26 /* LFN: MBZ field (WORD) */ +#define XDIR_Type 0 /* exFAT: Type of exFAT directory entry (BYTE) */ +#define XDIR_NumLabel 1 /* exFAT: Number of volume label characters (BYTE) */ +#define XDIR_Label 2 /* exFAT: Volume label (11-WORD) */ +#define XDIR_CaseSum 4 /* exFAT: Sum of case conversion table (DWORD) */ +#define XDIR_NumSec 1 /* exFAT: Number of secondary entries (BYTE) */ +#define XDIR_SetSum 2 /* exFAT: Sum of the set of directory entries (WORD) */ +#define XDIR_Attr 4 /* exFAT: File attribute (WORD) */ +#define XDIR_CrtTime 8 /* exFAT: Created time (DWORD) */ +#define XDIR_ModTime 12 /* exFAT: Modified time (DWORD) */ +#define XDIR_AccTime 16 /* exFAT: Last accessed time (DWORD) */ +#define XDIR_CrtTime10 20 /* exFAT: Created time subsecond (BYTE) */ +#define XDIR_ModTime10 21 /* exFAT: Modified time subsecond (BYTE) */ +#define XDIR_CrtTZ 22 /* exFAT: Created timezone (BYTE) */ +#define XDIR_ModTZ 23 /* exFAT: Modified timezone (BYTE) */ +#define XDIR_AccTZ 24 /* exFAT: Last accessed timezone (BYTE) */ +#define XDIR_GenFlags 33 /* exFAT: General secondary flags (BYTE) */ +#define XDIR_NumName 35 /* exFAT: Number of file name characters (BYTE) */ +#define XDIR_NameHash 36 /* exFAT: Hash of file name (WORD) */ +#define XDIR_ValidFileSize 40 /* exFAT: Valid file size (QWORD) */ +#define XDIR_FstClus 52 /* exFAT: First cluster of the file data (DWORD) */ +#define XDIR_FileSize 56 /* exFAT: File/Directory size (QWORD) */ + +#define SZDIRE 32 /* Size of a directory entry */ +#define DDEM 0xE5 /* Deleted directory entry mark set to DIR_Name[0] */ +#define RDDEM 0x05 /* Replacement of the character collides with DDEM */ +#define LLEF 0x40 /* Last long entry flag in LDIR_Ord */ + +#define FSI_LeadSig 0 /* FAT32 FSI: Leading signature (DWORD) */ +#define FSI_StrucSig 484 /* FAT32 FSI: Structure signature (DWORD) */ +#define FSI_Free_Count 488 /* FAT32 FSI: Number of free clusters (DWORD) */ +#define FSI_Nxt_Free 492 /* FAT32 FSI: Last allocated cluster (DWORD) */ + +#define MBR_Table 446 /* MBR: Offset of partition table in the MBR */ +#define SZ_PTE 16 /* MBR: Size of a partition table entry */ +#define PTE_Boot 0 /* MBR PTE: Boot indicator */ +#define PTE_StHead 1 /* MBR PTE: Start head */ +#define PTE_StSec 2 /* MBR PTE: Start sector */ +#define PTE_StCyl 3 /* MBR PTE: Start cylinder */ +#define PTE_System 4 /* MBR PTE: System ID */ +#define PTE_EdHead 5 /* MBR PTE: End head */ +#define PTE_EdSec 6 /* MBR PTE: End sector */ +#define PTE_EdCyl 7 /* MBR PTE: End cylinder */ +#define PTE_StLba 8 /* MBR PTE: Start in LBA */ +#define PTE_SizLba 12 /* MBR PTE: Size in LBA */ + +#define GPTH_Sign 0 /* GPT: Header signature (8-byte) */ +#define GPTH_Rev 8 /* GPT: Revision (DWORD) */ +#define GPTH_Size 12 /* GPT: Header size (DWORD) */ +#define GPTH_Bcc 16 /* GPT: Header BCC (DWORD) */ +#define GPTH_CurLba 24 /* GPT: Main header LBA (QWORD) */ +#define GPTH_BakLba 32 /* GPT: Backup header LBA (QWORD) */ +#define GPTH_FstLba 40 /* GPT: First LBA for partitions (QWORD) */ +#define GPTH_LstLba 48 /* GPT: Last LBA for partitions (QWORD) */ +#define GPTH_DskGuid 56 /* GPT: Disk GUID (16-byte) */ +#define GPTH_PtOfs 72 /* GPT: Partation table LBA (QWORD) */ +#define GPTH_PtNum 80 /* GPT: Number of table entries (DWORD) */ +#define GPTH_PteSize 84 /* GPT: Size of table entry (DWORD) */ +#define GPTH_PtBcc 88 /* GPT: Partation table BCC (DWORD) */ +#define SZ_GPTE 128 /* GPT: Size of partition table entry */ +#define GPTE_PtGuid 0 /* GPT PTE: Partition type GUID (16-byte) */ +#define GPTE_UpGuid 16 /* GPT PTE: Partition unique GUID (16-byte) */ +#define GPTE_FstLba 32 /* GPT PTE: First LBA (QWORD) */ +#define GPTE_LstLba 40 /* GPT PTE: Last LBA inclusive (QWORD) */ +#define GPTE_Flags 48 /* GPT PTE: Flags (QWORD) */ +#define GPTE_Name 56 /* GPT PTE: Name */ + + +/* Post process on fatal error in the file operations */ +#define ABORT(fs, res) { fp->err = (BYTE)(res); LEAVE_FF(fs, res); } + + +/* Re-entrancy related */ +#if FF_FS_REENTRANT +#if FF_USE_LFN == 1 +#error Static LFN work area cannot be used at thread-safe configuration +#endif +#define LEAVE_FF(fs, res) { unlock_fs(fs, res); return res; } +#else +#define LEAVE_FF(fs, res) return res +#endif + + +/* Definitions of logical drive - physical location conversion */ +#if FF_MULTI_PARTITION +#define LD2PD(vol) VolToPart[vol].pd /* Get physical drive number */ +#define LD2PT(vol) VolToPart[vol].pt /* Get partition index */ +#else +#define LD2PD(vol) (BYTE)(vol) /* Each logical drive is associated with the same physical drive number */ +#define LD2PT(vol) 0 /* Find first valid partition or in SFD */ +#endif + + +/* Definitions of sector size */ +#if (FF_MAX_SS < FF_MIN_SS) || (FF_MAX_SS != 512 && FF_MAX_SS != 1024 && FF_MAX_SS != 2048 && FF_MAX_SS != 4096) || (FF_MIN_SS != 512 && FF_MIN_SS != 1024 && FF_MIN_SS != 2048 && FF_MIN_SS != 4096) +#error Wrong sector size configuration +#endif +#if FF_MAX_SS == FF_MIN_SS +#define SS(fs) ((UINT)FF_MAX_SS) /* Fixed sector size */ +#else +#define SS(fs) ((fs)->ssize) /* Variable sector size */ +#endif + + +/* Timestamp */ +#if FF_FS_NORTC == 1 +#if FF_NORTC_YEAR < 1980 || FF_NORTC_YEAR > 2107 || FF_NORTC_MON < 1 || FF_NORTC_MON > 12 || FF_NORTC_MDAY < 1 || FF_NORTC_MDAY > 31 +#error Invalid FF_FS_NORTC settings +#endif +#define GET_FATTIME() ((DWORD)(FF_NORTC_YEAR - 1980) << 25 | (DWORD)FF_NORTC_MON << 21 | (DWORD)FF_NORTC_MDAY << 16) +#else +#define GET_FATTIME() get_fattime() +#endif + + +/* File lock controls */ +#if FF_FS_LOCK != 0 +#if FF_FS_READONLY +#error FF_FS_LOCK must be 0 at read-only configuration +#endif +typedef struct { + FATFS *fs; /* Object ID 1, volume (NULL:blank entry) */ + DWORD clu; /* Object ID 2, containing directory (0:root) */ + DWORD ofs; /* Object ID 3, offset in the directory */ + WORD ctr; /* Object open counter, 0:none, 0x01..0xFF:read mode open count, 0x100:write mode */ +} FILESEM; +#endif + + +/* SBCS up-case tables (\x80-\xFF) */ +#define TBL_CT437 {0x80,0x9A,0x45,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \ + 0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT720 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT737 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0x90,0x92,0x92,0x93,0x94,0x95,0x96,0x97,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, \ + 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0xAA,0x92,0x93,0x94,0x95,0x96, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0x97,0xEA,0xEB,0xEC,0xE4,0xED,0xEE,0xEF,0xF5,0xF0,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT771 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDC,0xDE,0xDE, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFE,0xFF} +#define TBL_CT775 {0x80,0x9A,0x91,0xA0,0x8E,0x95,0x8F,0x80,0xAD,0xED,0x8A,0x8A,0xA1,0x8D,0x8E,0x8F, \ + 0x90,0x92,0x92,0xE2,0x99,0x95,0x96,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xE0,0xA3,0xA3,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xA5,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE3,0xE8,0xE8,0xEA,0xEA,0xEE,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT850 {0x43,0x55,0x45,0x41,0x41,0x41,0x41,0x43,0x45,0x45,0x45,0x49,0x49,0x49,0x41,0x41, \ + 0x45,0x92,0x92,0x4F,0x4F,0x4F,0x55,0x55,0x59,0x4F,0x55,0x4F,0x9C,0x4F,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0x41,0x41,0x41,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0x41,0x41,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD1,0xD1,0x45,0x45,0x45,0x49,0x49,0x49,0x49,0xD9,0xDA,0xDB,0xDC,0xDD,0x49,0xDF, \ + 0x4F,0xE1,0x4F,0x4F,0x4F,0x4F,0xE6,0xE8,0xE8,0x55,0x55,0x55,0x59,0x59,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT852 {0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F, \ + 0x90,0x91,0x91,0xE2,0x99,0x95,0x95,0x97,0x97,0x99,0x9A,0x9B,0x9B,0x9D,0x9E,0xAC, \ + 0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xB8,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBD,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC6,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD1,0xD1,0xD2,0xD3,0xD2,0xD5,0xD6,0xD7,0xB7,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE3,0xD5,0xE6,0xE6,0xE8,0xE9,0xE8,0xEB,0xED,0xED,0xDD,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xEB,0xFC,0xFC,0xFE,0xFF} +#define TBL_CT855 {0x81,0x81,0x83,0x83,0x85,0x85,0x87,0x87,0x89,0x89,0x8B,0x8B,0x8D,0x8D,0x8F,0x8F, \ + 0x91,0x91,0x93,0x93,0x95,0x95,0x97,0x97,0x99,0x99,0x9B,0x9B,0x9D,0x9D,0x9F,0x9F, \ + 0xA1,0xA1,0xA3,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAB,0xAB,0xAD,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB6,0xB6,0xB8,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD1,0xD1,0xD3,0xD3,0xD5,0xD5,0xD7,0xD7,0xDD,0xD9,0xDA,0xDB,0xDC,0xDD,0xE0,0xDF, \ + 0xE0,0xE2,0xE2,0xE4,0xE4,0xE6,0xE6,0xE8,0xE8,0xEA,0xEA,0xEC,0xEC,0xEE,0xEE,0xEF, \ + 0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT857 {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0x49,0x8E,0x8F, \ + 0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x98,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9E, \ + 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA6,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0x49,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xDE,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT860 {0x80,0x9A,0x90,0x8F,0x8E,0x91,0x86,0x80,0x89,0x89,0x92,0x8B,0x8C,0x98,0x8E,0x8F, \ + 0x90,0x91,0x92,0x8C,0x99,0xA9,0x96,0x9D,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x86,0x8B,0x9F,0x96,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT861 {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x8B,0x8B,0x8D,0x8E,0x8F, \ + 0x90,0x92,0x92,0x4F,0x99,0x8D,0x55,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ + 0xA4,0xA5,0xA6,0xA7,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT862 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT863 {0x43,0x55,0x45,0x41,0x41,0x41,0x86,0x43,0x45,0x45,0x45,0x49,0x49,0x8D,0x41,0x8F, \ + 0x45,0x45,0x45,0x4F,0x45,0x49,0x55,0x55,0x98,0x4F,0x55,0x9B,0x9C,0x55,0x55,0x9F, \ + 0xA0,0xA1,0x4F,0x55,0xA4,0xA5,0xA6,0xA7,0x49,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT864 {0x80,0x9A,0x45,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \ + 0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT865 {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \ + 0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT866 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT869 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x86,0x9C,0x8D,0x8F,0x90, \ + 0x91,0x90,0x92,0x95,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xA4,0xA5,0xA6,0xD9,0xDA,0xDB,0xDC,0xA7,0xA8,0xDF, \ + 0xA9,0xAA,0xAC,0xAD,0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xCF,0xCF,0xD0,0xEF, \ + 0xF0,0xF1,0xD1,0xD2,0xD3,0xF5,0xD4,0xF7,0xF8,0xF9,0xD5,0x96,0x95,0x98,0xFE,0xFF} + + +/* DBCS code range |----- 1st byte -----| |----------- 2nd byte -----------| */ +/* <------> <------> <------> <------> <------> */ +#define TBL_DC932 {0x81, 0x9F, 0xE0, 0xFC, 0x40, 0x7E, 0x80, 0xFC, 0x00, 0x00} +#define TBL_DC936 {0x81, 0xFE, 0x00, 0x00, 0x40, 0x7E, 0x80, 0xFE, 0x00, 0x00} +#define TBL_DC949 {0x81, 0xFE, 0x00, 0x00, 0x41, 0x5A, 0x61, 0x7A, 0x81, 0xFE} +#define TBL_DC950 {0x81, 0xFE, 0x00, 0x00, 0x40, 0x7E, 0xA1, 0xFE, 0x00, 0x00} + + +/* Macros for table definitions */ +#define MERGE_2STR(a, b) a ## b +#define MKCVTBL(hd, cp) MERGE_2STR(hd, cp) + + + + +/*-------------------------------------------------------------------------- + + Module Private Work Area + +---------------------------------------------------------------------------*/ +/* Remark: Variables defined here without initial value shall be guaranteed +/ zero/null at start-up. If not, the linker option or start-up routine is +/ not compliance with C standard. */ + +/*--------------------------------*/ +/* File/Volume controls */ +/*--------------------------------*/ + +#if FF_VOLUMES < 1 || FF_VOLUMES > 10 +#error Wrong FF_VOLUMES setting +#endif +static FATFS* FatFs[FF_VOLUMES]; /* Pointer to the filesystem objects (logical drives) */ +static WORD Fsid; /* Filesystem mount ID */ + +#if FF_FS_RPATH != 0 +static BYTE CurrVol; /* Current drive */ +#endif + +#if FF_FS_LOCK != 0 +static FILESEM Files[FF_FS_LOCK]; /* Open object lock semaphores */ +#endif + +#if FF_STR_VOLUME_ID +#ifdef FF_VOLUME_STRS +static const char* const VolumeStr[FF_VOLUMES] = {FF_VOLUME_STRS}; /* Pre-defined volume ID */ +#endif +#endif + +#if FF_LBA64 +#if FF_MIN_GPT > 0x100000000 +#error Wrong FF_MIN_GPT setting +#endif +static const BYTE GUID_MS_Basic[16] = {0xA2,0xA0,0xD0,0xEB,0xE5,0xB9,0x33,0x44,0x87,0xC0,0x68,0xB6,0xB7,0x26,0x99,0xC7}; +#endif + + + +/*--------------------------------*/ +/* LFN/Directory working buffer */ +/*--------------------------------*/ + +#if FF_USE_LFN == 0 /* Non-LFN configuration */ +#if FF_FS_EXFAT +#error LFN must be enabled when enable exFAT +#endif +#define DEF_NAMBUF +#define INIT_NAMBUF(fs) +#define FREE_NAMBUF() +#define LEAVE_MKFS(res) return res + +#else /* LFN configurations */ +#if FF_MAX_LFN < 12 || FF_MAX_LFN > 255 +#error Wrong setting of FF_MAX_LFN +#endif +#if FF_LFN_BUF < FF_SFN_BUF || FF_SFN_BUF < 12 +#error Wrong setting of FF_LFN_BUF or FF_SFN_BUF +#endif +#if FF_LFN_UNICODE < 0 || FF_LFN_UNICODE > 3 +#error Wrong setting of FF_LFN_UNICODE +#endif +static const BYTE LfnOfs[] = {1,3,5,7,9,14,16,18,20,22,24,28,30}; /* FAT: Offset of LFN characters in the directory entry */ +#define MAXDIRB(nc) ((nc + 44U) / 15 * SZDIRE) /* exFAT: Size of directory entry block scratchpad buffer needed for the name length */ + +#if FF_USE_LFN == 1 /* LFN enabled with static working buffer */ +#if FF_FS_EXFAT +static BYTE DirBuf[MAXDIRB(FF_MAX_LFN)]; /* Directory entry block scratchpad buffer */ +#endif +static WCHAR LfnBuf[FF_MAX_LFN + 1]; /* LFN working buffer */ +#define DEF_NAMBUF +#define INIT_NAMBUF(fs) +#define FREE_NAMBUF() +#define LEAVE_MKFS(res) return res + +#elif FF_USE_LFN == 2 /* LFN enabled with dynamic working buffer on the stack */ +#if FF_FS_EXFAT +#define DEF_NAMBUF WCHAR lbuf[FF_MAX_LFN+1]; BYTE dbuf[MAXDIRB(FF_MAX_LFN)]; /* LFN working buffer and directory entry block scratchpad buffer */ +#define INIT_NAMBUF(fs) { (fs)->lfnbuf = lbuf; (fs)->dirbuf = dbuf; } +#define FREE_NAMBUF() +#else +#define DEF_NAMBUF WCHAR lbuf[FF_MAX_LFN+1]; /* LFN working buffer */ +#define INIT_NAMBUF(fs) { (fs)->lfnbuf = lbuf; } +#define FREE_NAMBUF() +#endif +#define LEAVE_MKFS(res) return res + +#elif FF_USE_LFN == 3 /* LFN enabled with dynamic working buffer on the heap */ +#if FF_FS_EXFAT +#define DEF_NAMBUF WCHAR *lfn; /* Pointer to LFN working buffer and directory entry block scratchpad buffer */ +#define INIT_NAMBUF(fs) { lfn = ff_memalloc((FF_MAX_LFN+1)*2 + MAXDIRB(FF_MAX_LFN)); if (!lfn) LEAVE_FF(fs, FR_NOT_ENOUGH_CORE); (fs)->lfnbuf = lfn; (fs)->dirbuf = (BYTE*)(lfn+FF_MAX_LFN+1); } +#define FREE_NAMBUF() ff_memfree(lfn) +#else +#define DEF_NAMBUF WCHAR *lfn; /* Pointer to LFN working buffer */ +#define INIT_NAMBUF(fs) { lfn = ff_memalloc((FF_MAX_LFN+1)*2); if (!lfn) LEAVE_FF(fs, FR_NOT_ENOUGH_CORE); (fs)->lfnbuf = lfn; } +#define FREE_NAMBUF() ff_memfree(lfn) +#endif +#define LEAVE_MKFS(res) { if (!work) ff_memfree(buf); return res; } +#define MAX_MALLOC 0x8000 /* Must be >=FF_MAX_SS */ + +#else +#error Wrong setting of FF_USE_LFN + +#endif /* FF_USE_LFN == 1 */ +#endif /* FF_USE_LFN == 0 */ + + + +/*--------------------------------*/ +/* Code conversion tables */ +/*--------------------------------*/ + +#if FF_CODE_PAGE == 0 /* Run-time code page configuration */ +#define CODEPAGE CodePage +static WORD CodePage; /* Current code page */ +static const BYTE *ExCvt, *DbcTbl; /* Pointer to current SBCS up-case table and DBCS code range table below */ + +static const BYTE Ct437[] = TBL_CT437; +static const BYTE Ct720[] = TBL_CT720; +static const BYTE Ct737[] = TBL_CT737; +static const BYTE Ct771[] = TBL_CT771; +static const BYTE Ct775[] = TBL_CT775; +static const BYTE Ct850[] = TBL_CT850; +static const BYTE Ct852[] = TBL_CT852; +static const BYTE Ct855[] = TBL_CT855; +static const BYTE Ct857[] = TBL_CT857; +static const BYTE Ct860[] = TBL_CT860; +static const BYTE Ct861[] = TBL_CT861; +static const BYTE Ct862[] = TBL_CT862; +static const BYTE Ct863[] = TBL_CT863; +static const BYTE Ct864[] = TBL_CT864; +static const BYTE Ct865[] = TBL_CT865; +static const BYTE Ct866[] = TBL_CT866; +static const BYTE Ct869[] = TBL_CT869; +static const BYTE Dc932[] = TBL_DC932; +static const BYTE Dc936[] = TBL_DC936; +static const BYTE Dc949[] = TBL_DC949; +static const BYTE Dc950[] = TBL_DC950; + +#elif FF_CODE_PAGE < 900 /* Static code page configuration (SBCS) */ +#define CODEPAGE FF_CODE_PAGE +static const BYTE ExCvt[] = MKCVTBL(TBL_CT, FF_CODE_PAGE); + +#else /* Static code page configuration (DBCS) */ +#define CODEPAGE FF_CODE_PAGE +static const BYTE DbcTbl[] = MKCVTBL(TBL_DC, FF_CODE_PAGE); + +#endif + + + + +/*-------------------------------------------------------------------------- + + Module Private Functions + +---------------------------------------------------------------------------*/ + + +/*-----------------------------------------------------------------------*/ +/* Load/Store multi-byte word in the FAT structure */ +/*-----------------------------------------------------------------------*/ + +static WORD ld_word (const BYTE* ptr) /* Load a 2-byte little-endian word */ +{ + WORD rv; + + rv = ptr[1]; + rv = rv << 8 | ptr[0]; + return rv; +} + +static DWORD ld_dword (const BYTE* ptr) /* Load a 4-byte little-endian word */ +{ + DWORD rv; + + rv = ptr[3]; + rv = rv << 8 | ptr[2]; + rv = rv << 8 | ptr[1]; + rv = rv << 8 | ptr[0]; + return rv; +} + +#if FF_FS_EXFAT +static QWORD ld_qword (const BYTE* ptr) /* Load an 8-byte little-endian word */ +{ + QWORD rv; + + rv = ptr[7]; + rv = rv << 8 | ptr[6]; + rv = rv << 8 | ptr[5]; + rv = rv << 8 | ptr[4]; + rv = rv << 8 | ptr[3]; + rv = rv << 8 | ptr[2]; + rv = rv << 8 | ptr[1]; + rv = rv << 8 | ptr[0]; + return rv; +} +#endif + +#if !FF_FS_READONLY +static void st_word (BYTE* ptr, WORD val) /* Store a 2-byte word in little-endian */ +{ + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; +} + +static void st_dword (BYTE* ptr, DWORD val) /* Store a 4-byte word in little-endian */ +{ + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; +} + +#if FF_FS_EXFAT +static void st_qword (BYTE* ptr, QWORD val) /* Store an 8-byte word in little-endian */ +{ + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; +} +#endif +#endif /* !FF_FS_READONLY */ + + + +/*-----------------------------------------------------------------------*/ +/* String functions */ +/*-----------------------------------------------------------------------*/ + +/* Copy memory to memory */ +static void mem_cpy (void* dst, const void* src, UINT cnt) +{ + BYTE *d = (BYTE*)dst; + const BYTE *s = (const BYTE*)src; + + if (cnt != 0) { + do { + *d++ = *s++; + } while (--cnt); + } +} + + +/* Fill memory block */ +static void mem_set (void* dst, int val, UINT cnt) +{ + BYTE *d = (BYTE*)dst; + + do { + *d++ = (BYTE)val; + } while (--cnt); +} + + +/* Compare memory block */ +static int mem_cmp (const void* dst, const void* src, UINT cnt) /* ZR:same, NZ:different */ +{ + const BYTE *d = (const BYTE *)dst, *s = (const BYTE *)src; + int r = 0; + + do { + r = *d++ - *s++; + } while (--cnt && r == 0); + + return r; +} + + +/* Check if chr is contained in the string */ +static int chk_chr (const char* str, int chr) /* NZ:contained, ZR:not contained */ +{ + while (*str && *str != chr) str++; + return *str; +} + + +/* Test if the byte is DBC 1st byte */ +static int dbc_1st (BYTE c) +{ +#if FF_CODE_PAGE == 0 /* Variable code page */ + if (DbcTbl && c >= DbcTbl[0]) { + if (c <= DbcTbl[1]) return 1; /* 1st byte range 1 */ + if (c >= DbcTbl[2] && c <= DbcTbl[3]) return 1; /* 1st byte range 2 */ + } +#elif FF_CODE_PAGE >= 900 /* DBCS fixed code page */ + if (c >= DbcTbl[0]) { + if (c <= DbcTbl[1]) return 1; + if (c >= DbcTbl[2] && c <= DbcTbl[3]) return 1; + } +#else /* SBCS fixed code page */ + if (c != 0) return 0; /* Always false */ +#endif + return 0; +} + + +/* Test if the byte is DBC 2nd byte */ +static int dbc_2nd (BYTE c) +{ +#if FF_CODE_PAGE == 0 /* Variable code page */ + if (DbcTbl && c >= DbcTbl[4]) { + if (c <= DbcTbl[5]) return 1; /* 2nd byte range 1 */ + if (c >= DbcTbl[6] && c <= DbcTbl[7]) return 1; /* 2nd byte range 2 */ + if (c >= DbcTbl[8] && c <= DbcTbl[9]) return 1; /* 2nd byte range 3 */ + } +#elif FF_CODE_PAGE >= 900 /* DBCS fixed code page */ + if (c >= DbcTbl[4]) { + if (c <= DbcTbl[5]) return 1; + if (c >= DbcTbl[6] && c <= DbcTbl[7]) return 1; + if (c >= DbcTbl[8] && c <= DbcTbl[9]) return 1; + } +#else /* SBCS fixed code page */ + if (c != 0) return 0; /* Always false */ +#endif + return 0; +} + + +#if FF_USE_LFN + +/* Get a Unicode code point from the TCHAR string in defined API encodeing */ +static DWORD tchar2uni ( /* Returns a character in UTF-16 encoding (>=0x10000 on surrogate pair, 0xFFFFFFFF on decode error) */ + const TCHAR** str /* Pointer to pointer to TCHAR string in configured encoding */ +) +{ + DWORD uc; + const TCHAR *p = *str; + +#if FF_LFN_UNICODE == 1 /* UTF-16 input */ + WCHAR wc; + + uc = *p++; /* Get a unit */ + if (IsSurrogate(uc)) { /* Surrogate? */ + wc = *p++; /* Get low surrogate */ + if (!IsSurrogateH(uc) || !IsSurrogateL(wc)) return 0xFFFFFFFF; /* Wrong surrogate? */ + uc = uc << 16 | wc; + } + +#elif FF_LFN_UNICODE == 2 /* UTF-8 input */ + BYTE b; + int nf; + + uc = (BYTE)*p++; /* Get an encoding unit */ + if (uc & 0x80) { /* Multiple byte code? */ + if ((uc & 0xE0) == 0xC0) { /* 2-byte sequence? */ + uc &= 0x1F; nf = 1; + } else { + if ((uc & 0xF0) == 0xE0) { /* 3-byte sequence? */ + uc &= 0x0F; nf = 2; + } else { + if ((uc & 0xF8) == 0xF0) { /* 4-byte sequence? */ + uc &= 0x07; nf = 3; + } else { /* Wrong sequence */ + return 0xFFFFFFFF; + } + } + } + do { /* Get trailing bytes */ + b = (BYTE)*p++; + if ((b & 0xC0) != 0x80) return 0xFFFFFFFF; /* Wrong sequence? */ + uc = uc << 6 | (b & 0x3F); + } while (--nf != 0); + if (uc < 0x80 || IsSurrogate(uc) || uc >= 0x110000) return 0xFFFFFFFF; /* Wrong code? */ + if (uc >= 0x010000) uc = 0xD800DC00 | ((uc - 0x10000) << 6 & 0x3FF0000) | (uc & 0x3FF); /* Make a surrogate pair if needed */ + } + +#elif FF_LFN_UNICODE == 3 /* UTF-32 input */ + uc = (TCHAR)*p++; /* Get a unit */ + if (uc >= 0x110000 || IsSurrogate(uc)) return 0xFFFFFFFF; /* Wrong code? */ + if (uc >= 0x010000) uc = 0xD800DC00 | ((uc - 0x10000) << 6 & 0x3FF0000) | (uc & 0x3FF); /* Make a surrogate pair if needed */ + +#else /* ANSI/OEM input */ + BYTE b; + WCHAR wc; + + wc = (BYTE)*p++; /* Get a byte */ + if (dbc_1st((BYTE)wc)) { /* Is it a DBC 1st byte? */ + b = (BYTE)*p++; /* Get 2nd byte */ + if (!dbc_2nd(b)) return 0xFFFFFFFF; /* Invalid code? */ + wc = (wc << 8) + b; /* Make a DBC */ + } + if (wc != 0) { + wc = ff_oem2uni(wc, CODEPAGE); /* ANSI/OEM ==> Unicode */ + if (wc == 0) return 0xFFFFFFFF; /* Invalid code? */ + } + uc = wc; + +#endif + *str = p; /* Next read pointer */ + return uc; +} + + +/* Output a TCHAR string in defined API encoding */ +static BYTE put_utf ( /* Returns number of encoding units written (0:buffer overflow or wrong encoding) */ + DWORD chr, /* UTF-16 encoded character (Surrogate pair if >=0x10000) */ + TCHAR* buf, /* Output buffer */ + UINT szb /* Size of the buffer */ +) +{ +#if FF_LFN_UNICODE == 1 /* UTF-16 output */ + WCHAR hs, wc; + + hs = (WCHAR)(chr >> 16); + wc = (WCHAR)chr; + if (hs == 0) { /* Single encoding unit? */ + if (szb < 1 || IsSurrogate(wc)) return 0; /* Buffer overflow or wrong code? */ + *buf = wc; + return 1; + } + if (szb < 2 || !IsSurrogateH(hs) || !IsSurrogateL(wc)) return 0; /* Buffer overflow or wrong surrogate? */ + *buf++ = hs; + *buf++ = wc; + return 2; + +#elif FF_LFN_UNICODE == 2 /* UTF-8 output */ + DWORD hc; + + if (chr < 0x80) { /* Single byte code? */ + if (szb < 1) return 0; /* Buffer overflow? */ + *buf = (TCHAR)chr; + return 1; + } + if (chr < 0x800) { /* 2-byte sequence? */ + if (szb < 2) return 0; /* Buffer overflow? */ + *buf++ = (TCHAR)(0xC0 | (chr >> 6 & 0x1F)); + *buf++ = (TCHAR)(0x80 | (chr >> 0 & 0x3F)); + return 2; + } + if (chr < 0x10000) { /* 3-byte sequence? */ + if (szb < 3 || IsSurrogate(chr)) return 0; /* Buffer overflow or wrong code? */ + *buf++ = (TCHAR)(0xE0 | (chr >> 12 & 0x0F)); + *buf++ = (TCHAR)(0x80 | (chr >> 6 & 0x3F)); + *buf++ = (TCHAR)(0x80 | (chr >> 0 & 0x3F)); + return 3; + } + /* 4-byte sequence */ + if (szb < 4) return 0; /* Buffer overflow? */ + hc = ((chr & 0xFFFF0000) - 0xD8000000) >> 6; /* Get high 10 bits */ + chr = (chr & 0xFFFF) - 0xDC00; /* Get low 10 bits */ + if (hc >= 0x100000 || chr >= 0x400) return 0; /* Wrong surrogate? */ + chr = (hc | chr) + 0x10000; + *buf++ = (TCHAR)(0xF0 | (chr >> 18 & 0x07)); + *buf++ = (TCHAR)(0x80 | (chr >> 12 & 0x3F)); + *buf++ = (TCHAR)(0x80 | (chr >> 6 & 0x3F)); + *buf++ = (TCHAR)(0x80 | (chr >> 0 & 0x3F)); + return 4; + +#elif FF_LFN_UNICODE == 3 /* UTF-32 output */ + DWORD hc; + + if (szb < 1) return 0; /* Buffer overflow? */ + if (chr >= 0x10000) { /* Out of BMP? */ + hc = ((chr & 0xFFFF0000) - 0xD8000000) >> 6; /* Get high 10 bits */ + chr = (chr & 0xFFFF) - 0xDC00; /* Get low 10 bits */ + if (hc >= 0x100000 || chr >= 0x400) return 0; /* Wrong surrogate? */ + chr = (hc | chr) + 0x10000; + } + *buf++ = (TCHAR)chr; + return 1; + +#else /* ANSI/OEM output */ + WCHAR wc; + + wc = ff_uni2oem(chr, CODEPAGE); + if (wc >= 0x100) { /* Is this a DBC? */ + if (szb < 2) return 0; + *buf++ = (char)(wc >> 8); /* Store DBC 1st byte */ + *buf++ = (TCHAR)wc; /* Store DBC 2nd byte */ + return 2; + } + if (wc == 0 || szb < 1) return 0; /* Invalid char or buffer overflow? */ + *buf++ = (TCHAR)wc; /* Store the character */ + return 1; +#endif +} +#endif /* FF_USE_LFN */ + + +#if FF_FS_REENTRANT +/*-----------------------------------------------------------------------*/ +/* Request/Release grant to access the volume */ +/*-----------------------------------------------------------------------*/ +static int lock_fs ( /* 1:Ok, 0:timeout */ + FATFS* fs /* Filesystem object */ +) +{ + return ff_req_grant(fs->sobj); +} + + +static void unlock_fs ( + FATFS* fs, /* Filesystem object */ + FRESULT res /* Result code to be returned */ +) +{ + if (fs && res != FR_NOT_ENABLED && res != FR_INVALID_DRIVE && res != FR_TIMEOUT) { + ff_rel_grant(fs->sobj); + } +} + +#endif + + + +#if FF_FS_LOCK != 0 +/*-----------------------------------------------------------------------*/ +/* File lock control functions */ +/*-----------------------------------------------------------------------*/ + +static FRESULT chk_lock ( /* Check if the file can be accessed */ + DIR* dp, /* Directory object pointing the file to be checked */ + int acc /* Desired access type (0:Read mode open, 1:Write mode open, 2:Delete or rename) */ +) +{ + UINT i, be; + + /* Search open object table for the object */ + be = 0; + for (i = 0; i < FF_FS_LOCK; i++) { + if (Files[i].fs) { /* Existing entry */ + if (Files[i].fs == dp->obj.fs && /* Check if the object matches with an open object */ + Files[i].clu == dp->obj.sclust && + Files[i].ofs == dp->dptr) break; + } else { /* Blank entry */ + be = 1; + } + } + if (i == FF_FS_LOCK) { /* The object has not been opened */ + return (!be && acc != 2) ? FR_TOO_MANY_OPEN_FILES : FR_OK; /* Is there a blank entry for new object? */ + } + + /* The object was opened. Reject any open against writing file and all write mode open */ + return (acc != 0 || Files[i].ctr == 0x100) ? FR_LOCKED : FR_OK; +} + + +static int enq_lock (void) /* Check if an entry is available for a new object */ +{ + UINT i; + + for (i = 0; i < FF_FS_LOCK && Files[i].fs; i++) ; + return (i == FF_FS_LOCK) ? 0 : 1; +} + + +static UINT inc_lock ( /* Increment object open counter and returns its index (0:Internal error) */ + DIR* dp, /* Directory object pointing the file to register or increment */ + int acc /* Desired access (0:Read, 1:Write, 2:Delete/Rename) */ +) +{ + UINT i; + + + for (i = 0; i < FF_FS_LOCK; i++) { /* Find the object */ + if (Files[i].fs == dp->obj.fs + && Files[i].clu == dp->obj.sclust + && Files[i].ofs == dp->dptr) break; + } + + if (i == FF_FS_LOCK) { /* Not opened. Register it as new. */ + for (i = 0; i < FF_FS_LOCK && Files[i].fs; i++) ; + if (i == FF_FS_LOCK) return 0; /* No free entry to register (int err) */ + Files[i].fs = dp->obj.fs; + Files[i].clu = dp->obj.sclust; + Files[i].ofs = dp->dptr; + Files[i].ctr = 0; + } + + if (acc >= 1 && Files[i].ctr) return 0; /* Access violation (int err) */ + + Files[i].ctr = acc ? 0x100 : Files[i].ctr + 1; /* Set semaphore value */ + + return i + 1; /* Index number origin from 1 */ +} + + +static FRESULT dec_lock ( /* Decrement object open counter */ + UINT i /* Semaphore index (1..) */ +) +{ + WORD n; + FRESULT res; + + + if (--i < FF_FS_LOCK) { /* Index number origin from 0 */ + n = Files[i].ctr; + if (n == 0x100) n = 0; /* If write mode open, delete the entry */ + if (n > 0) n--; /* Decrement read mode open count */ + Files[i].ctr = n; + if (n == 0) Files[i].fs = 0; /* Delete the entry if open count gets zero */ + res = FR_OK; + } else { + res = FR_INT_ERR; /* Invalid index nunber */ + } + return res; +} + + +static void clear_lock ( /* Clear lock entries of the volume */ + FATFS *fs +) +{ + UINT i; + + for (i = 0; i < FF_FS_LOCK; i++) { + if (Files[i].fs == fs) Files[i].fs = 0; + } +} + +#endif /* FF_FS_LOCK != 0 */ + + + +/*-----------------------------------------------------------------------*/ +/* Move/Flush disk access window in the filesystem object */ +/*-----------------------------------------------------------------------*/ +#if !FF_FS_READONLY +static FRESULT sync_window ( /* Returns FR_OK or FR_DISK_ERR */ + FATFS* fs /* Filesystem object */ +) +{ + FRESULT res = FR_OK; + + + if (fs->wflag) { /* Is the disk access window dirty? */ + if (disk_write(fs->pdrv, fs->win, fs->winsect, 1) == RES_OK) { /* Write it back into the volume */ + fs->wflag = 0; /* Clear window dirty flag */ + if (fs->winsect - fs->fatbase < fs->fsize) { /* Is it in the 1st FAT? */ + if (fs->n_fats == 2) disk_write(fs->pdrv, fs->win, fs->winsect + fs->fsize, 1); /* Reflect it to 2nd FAT if needed */ + } + } else { + res = FR_DISK_ERR; + } + } + return res; +} +#endif + + +static FRESULT move_window ( /* Returns FR_OK or FR_DISK_ERR */ + FATFS* fs, /* Filesystem object */ + LBA_t sect /* Sector LBA to make appearance in the fs->win[] */ +) +{ + FRESULT res = FR_OK; + + + if (sect != fs->winsect) { /* Window offset changed? */ +#if !FF_FS_READONLY + res = sync_window(fs); /* Flush the window */ +#endif + if (res == FR_OK) { /* Fill sector window with new data */ + if (disk_read(fs->pdrv, fs->win, sect, 1) != RES_OK) { + sect = (LBA_t)0 - 1; /* Invalidate window if read data is not valid */ + res = FR_DISK_ERR; + } + fs->winsect = sect; + } + } + return res; +} + + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Synchronize filesystem and data on the storage */ +/*-----------------------------------------------------------------------*/ + +static FRESULT sync_fs ( /* Returns FR_OK or FR_DISK_ERR */ + FATFS* fs /* Filesystem object */ +) +{ + FRESULT res; + + + res = sync_window(fs); + if (res == FR_OK) { + if (fs->fs_type == FS_FAT32 && fs->fsi_flag == 1) { /* FAT32: Update FSInfo sector if needed */ + /* Create FSInfo structure */ + mem_set(fs->win, 0, sizeof fs->win); + st_word(fs->win + BS_55AA, 0xAA55); /* Boot signature */ + st_dword(fs->win + FSI_LeadSig, 0x41615252); /* Leading signature */ + st_dword(fs->win + FSI_StrucSig, 0x61417272); /* Structure signature */ + st_dword(fs->win + FSI_Free_Count, fs->free_clst); /* Number of free clusters */ + st_dword(fs->win + FSI_Nxt_Free, fs->last_clst); /* Last allocated culuster */ + fs->winsect = fs->volbase + 1; /* Write it into the FSInfo sector (Next to VBR) */ + disk_write(fs->pdrv, fs->win, fs->winsect, 1); + fs->fsi_flag = 0; + } + /* Make sure that no pending write process in the lower layer */ + if (disk_ioctl(fs->pdrv, CTRL_SYNC, 0) != RES_OK) res = FR_DISK_ERR; + } + + return res; +} + +#endif + + + +/*-----------------------------------------------------------------------*/ +/* Get physical sector number from cluster number */ +/*-----------------------------------------------------------------------*/ + +static LBA_t clst2sect ( /* !=0:Sector number, 0:Failed (invalid cluster#) */ + FATFS* fs, /* Filesystem object */ + DWORD clst /* Cluster# to be converted */ +) +{ + clst -= 2; /* Cluster number is origin from 2 */ + if (clst >= fs->n_fatent - 2) return 0; /* Is it invalid cluster number? */ + return fs->database + (LBA_t)fs->csize * clst; /* Start sector number of the cluster */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* FAT access - Read value of a FAT entry */ +/*-----------------------------------------------------------------------*/ + +static DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x7FFFFFFF:Cluster status */ + FFOBJID* obj, /* Corresponding object */ + DWORD clst /* Cluster number to get the value */ +) +{ + UINT wc, bc; + DWORD val; + FATFS *fs = obj->fs; + + + if (clst < 2 || clst >= fs->n_fatent) { /* Check if in valid range */ + val = 1; /* Internal error */ + + } else { + val = 0xFFFFFFFF; /* Default value falls on disk error */ + + switch (fs->fs_type) { + case FS_FAT12 : + bc = (UINT)clst; bc += bc / 2; + if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break; + wc = fs->win[bc++ % SS(fs)]; /* Get 1st byte of the entry */ + if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break; + wc |= fs->win[bc % SS(fs)] << 8; /* Merge 2nd byte of the entry */ + val = (clst & 1) ? (wc >> 4) : (wc & 0xFFF); /* Adjust bit position */ + break; + + case FS_FAT16 : + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))) != FR_OK) break; + val = ld_word(fs->win + clst * 2 % SS(fs)); /* Simple WORD array */ + break; + + case FS_FAT32 : + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))) != FR_OK) break; + val = ld_dword(fs->win + clst * 4 % SS(fs)) & 0x0FFFFFFF; /* Simple DWORD array but mask out upper 4 bits */ + break; +#if FF_FS_EXFAT + case FS_EXFAT : + if ((obj->objsize != 0 && obj->sclust != 0) || obj->stat == 0) { /* Object except root dir must have valid data length */ + DWORD cofs = clst - obj->sclust; /* Offset from start cluster */ + DWORD clen = (DWORD)((LBA_t)((obj->objsize - 1) / SS(fs)) / fs->csize); /* Number of clusters - 1 */ + + if (obj->stat == 2 && cofs <= clen) { /* Is it a contiguous chain? */ + val = (cofs == clen) ? 0x7FFFFFFF : clst + 1; /* No data on the FAT, generate the value */ + break; + } + if (obj->stat == 3 && cofs < obj->n_cont) { /* Is it in the 1st fragment? */ + val = clst + 1; /* Generate the value */ + break; + } + if (obj->stat != 2) { /* Get value from FAT if FAT chain is valid */ + if (obj->n_frag != 0) { /* Is it on the growing edge? */ + val = 0x7FFFFFFF; /* Generate EOC */ + } else { + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))) != FR_OK) break; + val = ld_dword(fs->win + clst * 4 % SS(fs)) & 0x7FFFFFFF; + } + break; + } + } + val = 1; /* Internal error */ + break; +#endif + default: + val = 1; /* Internal error */ + } + } + + return val; +} + + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* FAT access - Change value of a FAT entry */ +/*-----------------------------------------------------------------------*/ + +static FRESULT put_fat ( /* FR_OK(0):succeeded, !=0:error */ + FATFS* fs, /* Corresponding filesystem object */ + DWORD clst, /* FAT index number (cluster number) to be changed */ + DWORD val /* New value to be set to the entry */ +) +{ + UINT bc; + BYTE *p; + FRESULT res = FR_INT_ERR; + + + if (clst >= 2 && clst < fs->n_fatent) { /* Check if in valid range */ + switch (fs->fs_type) { + case FS_FAT12: + bc = (UINT)clst; bc += bc / 2; /* bc: byte offset of the entry */ + res = move_window(fs, fs->fatbase + (bc / SS(fs))); + if (res != FR_OK) break; + p = fs->win + bc++ % SS(fs); + *p = (clst & 1) ? ((*p & 0x0F) | ((BYTE)val << 4)) : (BYTE)val; /* Update 1st byte */ + fs->wflag = 1; + res = move_window(fs, fs->fatbase + (bc / SS(fs))); + if (res != FR_OK) break; + p = fs->win + bc % SS(fs); + *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); /* Update 2nd byte */ + fs->wflag = 1; + break; + + case FS_FAT16: + res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))); + if (res != FR_OK) break; + st_word(fs->win + clst * 2 % SS(fs), (WORD)val); /* Simple WORD array */ + fs->wflag = 1; + break; + + case FS_FAT32: +#if FF_FS_EXFAT + case FS_EXFAT: +#endif + res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))); + if (res != FR_OK) break; + if (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) { + val = (val & 0x0FFFFFFF) | (ld_dword(fs->win + clst * 4 % SS(fs)) & 0xF0000000); + } + st_dword(fs->win + clst * 4 % SS(fs), val); + fs->wflag = 1; + break; + } + } + return res; +} + +#endif /* !FF_FS_READONLY */ + + + + +#if FF_FS_EXFAT && !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* exFAT: Accessing FAT and Allocation Bitmap */ +/*-----------------------------------------------------------------------*/ + +/*--------------------------------------*/ +/* Find a contiguous free cluster block */ +/*--------------------------------------*/ + +static DWORD find_bitmap ( /* 0:Not found, 2..:Cluster block found, 0xFFFFFFFF:Disk error */ + FATFS* fs, /* Filesystem object */ + DWORD clst, /* Cluster number to scan from */ + DWORD ncl /* Number of contiguous clusters to find (1..) */ +) +{ + BYTE bm, bv; + UINT i; + DWORD val, scl, ctr; + + + clst -= 2; /* The first bit in the bitmap corresponds to cluster #2 */ + if (clst >= fs->n_fatent - 2) clst = 0; + scl = val = clst; ctr = 0; + for (;;) { + if (move_window(fs, fs->bitbase + val / 8 / SS(fs)) != FR_OK) return 0xFFFFFFFF; + i = val / 8 % SS(fs); bm = 1 << (val % 8); + do { + do { + bv = fs->win[i] & bm; bm <<= 1; /* Get bit value */ + if (++val >= fs->n_fatent - 2) { /* Next cluster (with wrap-around) */ + val = 0; bm = 0; i = SS(fs); + } + if (bv == 0) { /* Is it a free cluster? */ + if (++ctr == ncl) return scl + 2; /* Check if run length is sufficient for required */ + } else { + scl = val; ctr = 0; /* Encountered a cluster in-use, restart to scan */ + } + if (val == clst) return 0; /* All cluster scanned? */ + } while (bm != 0); + bm = 1; + } while (++i < SS(fs)); + } +} + + +/*----------------------------------------*/ +/* Set/Clear a block of allocation bitmap */ +/*----------------------------------------*/ + +static FRESULT change_bitmap ( + FATFS* fs, /* Filesystem object */ + DWORD clst, /* Cluster number to change from */ + DWORD ncl, /* Number of clusters to be changed */ + int bv /* bit value to be set (0 or 1) */ +) +{ + BYTE bm; + UINT i; + LBA_t sect; + + + clst -= 2; /* The first bit corresponds to cluster #2 */ + sect = fs->bitbase + clst / 8 / SS(fs); /* Sector address */ + i = clst / 8 % SS(fs); /* Byte offset in the sector */ + bm = 1 << (clst % 8); /* Bit mask in the byte */ + for (;;) { + if (move_window(fs, sect++) != FR_OK) return FR_DISK_ERR; + do { + do { + if (bv == (int)((fs->win[i] & bm) != 0)) return FR_INT_ERR; /* Is the bit expected value? */ + fs->win[i] ^= bm; /* Flip the bit */ + fs->wflag = 1; + if (--ncl == 0) return FR_OK; /* All bits processed? */ + } while (bm <<= 1); /* Next bit */ + bm = 1; + } while (++i < SS(fs)); /* Next byte */ + i = 0; + } +} + + +/*---------------------------------------------*/ +/* Fill the first fragment of the FAT chain */ +/*---------------------------------------------*/ + +static FRESULT fill_first_frag ( + FFOBJID* obj /* Pointer to the corresponding object */ +) +{ + FRESULT res; + DWORD cl, n; + + + if (obj->stat == 3) { /* Has the object been changed 'fragmented' in this session? */ + for (cl = obj->sclust, n = obj->n_cont; n; cl++, n--) { /* Create cluster chain on the FAT */ + res = put_fat(obj->fs, cl, cl + 1); + if (res != FR_OK) return res; + } + obj->stat = 0; /* Change status 'FAT chain is valid' */ + } + return FR_OK; +} + + +/*---------------------------------------------*/ +/* Fill the last fragment of the FAT chain */ +/*---------------------------------------------*/ + +static FRESULT fill_last_frag ( + FFOBJID* obj, /* Pointer to the corresponding object */ + DWORD lcl, /* Last cluster of the fragment */ + DWORD term /* Value to set the last FAT entry */ +) +{ + FRESULT res; + + + while (obj->n_frag > 0) { /* Create the chain of last fragment */ + res = put_fat(obj->fs, lcl - obj->n_frag + 1, (obj->n_frag > 1) ? lcl - obj->n_frag + 2 : term); + if (res != FR_OK) return res; + obj->n_frag--; + } + return FR_OK; +} + +#endif /* FF_FS_EXFAT && !FF_FS_READONLY */ + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* FAT handling - Remove a cluster chain */ +/*-----------------------------------------------------------------------*/ + +static FRESULT remove_chain ( /* FR_OK(0):succeeded, !=0:error */ + FFOBJID* obj, /* Corresponding object */ + DWORD clst, /* Cluster to remove a chain from */ + DWORD pclst /* Previous cluster of clst (0 if entire chain) */ +) +{ + FRESULT res = FR_OK; + DWORD nxt; + FATFS *fs = obj->fs; +#if FF_FS_EXFAT || FF_USE_TRIM + DWORD scl = clst, ecl = clst; +#endif +#if FF_USE_TRIM + LBA_t rt[2]; +#endif + + if (clst < 2 || clst >= fs->n_fatent) return FR_INT_ERR; /* Check if in valid range */ + + /* Mark the previous cluster 'EOC' on the FAT if it exists */ + if (pclst != 0 && (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT || obj->stat != 2)) { + res = put_fat(fs, pclst, 0xFFFFFFFF); + if (res != FR_OK) return res; + } + + /* Remove the chain */ + do { + nxt = get_fat(obj, clst); /* Get cluster status */ + if (nxt == 0) break; /* Empty cluster? */ + if (nxt == 1) return FR_INT_ERR; /* Internal error? */ + if (nxt == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error? */ + if (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) { + res = put_fat(fs, clst, 0); /* Mark the cluster 'free' on the FAT */ + if (res != FR_OK) return res; + } + if (fs->free_clst < fs->n_fatent - 2) { /* Update FSINFO */ + fs->free_clst++; + fs->fsi_flag |= 1; + } +#if FF_FS_EXFAT || FF_USE_TRIM + if (ecl + 1 == nxt) { /* Is next cluster contiguous? */ + ecl = nxt; + } else { /* End of contiguous cluster block */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + res = change_bitmap(fs, scl, ecl - scl + 1, 0); /* Mark the cluster block 'free' on the bitmap */ + if (res != FR_OK) return res; + } +#endif +#if FF_USE_TRIM + rt[0] = clst2sect(fs, scl); /* Start of data area to be freed */ + rt[1] = clst2sect(fs, ecl) + fs->csize - 1; /* End of data area to be freed */ + disk_ioctl(fs->pdrv, CTRL_TRIM, rt); /* Inform storage device that the data in the block may be erased */ +#endif + scl = ecl = nxt; + } +#endif + clst = nxt; /* Next cluster */ + } while (clst < fs->n_fatent); /* Repeat while not the last link */ + +#if FF_FS_EXFAT + /* Some post processes for chain status */ + if (fs->fs_type == FS_EXFAT) { + if (pclst == 0) { /* Has the entire chain been removed? */ + obj->stat = 0; /* Change the chain status 'initial' */ + } else { + if (obj->stat == 0) { /* Is it a fragmented chain from the beginning of this session? */ + clst = obj->sclust; /* Follow the chain to check if it gets contiguous */ + while (clst != pclst) { + nxt = get_fat(obj, clst); + if (nxt < 2) return FR_INT_ERR; + if (nxt == 0xFFFFFFFF) return FR_DISK_ERR; + if (nxt != clst + 1) break; /* Not contiguous? */ + clst++; + } + if (clst == pclst) { /* Has the chain got contiguous again? */ + obj->stat = 2; /* Change the chain status 'contiguous' */ + } + } else { + if (obj->stat == 3 && pclst >= obj->sclust && pclst <= obj->sclust + obj->n_cont) { /* Was the chain fragmented in this session and got contiguous again? */ + obj->stat = 2; /* Change the chain status 'contiguous' */ + } + } + } + } +#endif + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* FAT handling - Stretch a chain or Create a new chain */ +/*-----------------------------------------------------------------------*/ + +static DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */ + FFOBJID* obj, /* Corresponding object */ + DWORD clst /* Cluster# to stretch, 0:Create a new chain */ +) +{ + DWORD cs, ncl, scl; + FRESULT res; + FATFS *fs = obj->fs; + + + if (clst == 0) { /* Create a new chain */ + scl = fs->last_clst; /* Suggested cluster to start to find */ + if (scl == 0 || scl >= fs->n_fatent) scl = 1; + } + else { /* Stretch a chain */ + cs = get_fat(obj, clst); /* Check the cluster status */ + if (cs < 2) return 1; /* Test for insanity */ + if (cs == 0xFFFFFFFF) return cs; /* Test for disk error */ + if (cs < fs->n_fatent) return cs; /* It is already followed by next cluster */ + scl = clst; /* Cluster to start to find */ + } + if (fs->free_clst == 0) return 0; /* No free cluster */ + +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ + ncl = find_bitmap(fs, scl, 1); /* Find a free cluster */ + if (ncl == 0 || ncl == 0xFFFFFFFF) return ncl; /* No free cluster or hard error? */ + res = change_bitmap(fs, ncl, 1, 1); /* Mark the cluster 'in use' */ + if (res == FR_INT_ERR) return 1; + if (res == FR_DISK_ERR) return 0xFFFFFFFF; + if (clst == 0) { /* Is it a new chain? */ + obj->stat = 2; /* Set status 'contiguous' */ + } else { /* It is a stretched chain */ + if (obj->stat == 2 && ncl != scl + 1) { /* Is the chain got fragmented? */ + obj->n_cont = scl - obj->sclust; /* Set size of the contiguous part */ + obj->stat = 3; /* Change status 'just fragmented' */ + } + } + if (obj->stat != 2) { /* Is the file non-contiguous? */ + if (ncl == clst + 1) { /* Is the cluster next to previous one? */ + obj->n_frag = obj->n_frag ? obj->n_frag + 1 : 2; /* Increment size of last framgent */ + } else { /* New fragment */ + if (obj->n_frag == 0) obj->n_frag = 1; + res = fill_last_frag(obj, clst, ncl); /* Fill last fragment on the FAT and link it to new one */ + if (res == FR_OK) obj->n_frag = 1; + } + } + } else +#endif + { /* On the FAT/FAT32 volume */ + ncl = 0; + if (scl == clst) { /* Stretching an existing chain? */ + ncl = scl + 1; /* Test if next cluster is free */ + if (ncl >= fs->n_fatent) ncl = 2; + cs = get_fat(obj, ncl); /* Get next cluster status */ + if (cs == 1 || cs == 0xFFFFFFFF) return cs; /* Test for error */ + if (cs != 0) { /* Not free? */ + cs = fs->last_clst; /* Start at suggested cluster if it is valid */ + if (cs >= 2 && cs < fs->n_fatent) scl = cs; + ncl = 0; + } + } + if (ncl == 0) { /* The new cluster cannot be contiguous and find another fragment */ + ncl = scl; /* Start cluster */ + for (;;) { + ncl++; /* Next cluster */ + if (ncl >= fs->n_fatent) { /* Check wrap-around */ + ncl = 2; + if (ncl > scl) return 0; /* No free cluster found? */ + } + cs = get_fat(obj, ncl); /* Get the cluster status */ + if (cs == 0) break; /* Found a free cluster? */ + if (cs == 1 || cs == 0xFFFFFFFF) return cs; /* Test for error */ + if (ncl == scl) return 0; /* No free cluster found? */ + } + } + res = put_fat(fs, ncl, 0xFFFFFFFF); /* Mark the new cluster 'EOC' */ + if (res == FR_OK && clst != 0) { + res = put_fat(fs, clst, ncl); /* Link it from the previous one if needed */ + } + } + + if (res == FR_OK) { /* Update FSINFO if function succeeded. */ + fs->last_clst = ncl; + if (fs->free_clst <= fs->n_fatent - 2) fs->free_clst--; + fs->fsi_flag |= 1; + } else { + ncl = (res == FR_DISK_ERR) ? 0xFFFFFFFF : 1; /* Failed. Generate error status */ + } + + return ncl; /* Return new cluster number or error status */ +} + +#endif /* !FF_FS_READONLY */ + + + + +#if FF_USE_FASTSEEK +/*-----------------------------------------------------------------------*/ +/* FAT handling - Convert offset into cluster with link map table */ +/*-----------------------------------------------------------------------*/ + +static DWORD clmt_clust ( /* <2:Error, >=2:Cluster number */ + FIL* fp, /* Pointer to the file object */ + FSIZE_t ofs /* File offset to be converted to cluster# */ +) +{ + DWORD cl, ncl, *tbl; + FATFS *fs = fp->obj.fs; + + + tbl = fp->cltbl + 1; /* Top of CLMT */ + cl = (DWORD)(ofs / SS(fs) / fs->csize); /* Cluster order from top of the file */ + for (;;) { + ncl = *tbl++; /* Number of cluters in the fragment */ + if (ncl == 0) return 0; /* End of table? (error) */ + if (cl < ncl) break; /* In this fragment? */ + cl -= ncl; tbl++; /* Next fragment */ + } + return cl + *tbl; /* Return the cluster number */ +} + +#endif /* FF_USE_FASTSEEK */ + + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Fill a cluster with zeros */ +/*-----------------------------------------------------------------------*/ + +#if !FF_FS_READONLY +static FRESULT dir_clear ( /* Returns FR_OK or FR_DISK_ERR */ + FATFS *fs, /* Filesystem object */ + DWORD clst /* Directory table to clear */ +) +{ + LBA_t sect; + UINT n, szb; + BYTE *ibuf; + + + if (sync_window(fs) != FR_OK) return FR_DISK_ERR; /* Flush disk access window */ + sect = clst2sect(fs, clst); /* Top of the cluster */ + fs->winsect = sect; /* Set window to top of the cluster */ + mem_set(fs->win, 0, sizeof fs->win); /* Clear window buffer */ +#if FF_USE_LFN == 3 /* Quick table clear by using multi-secter write */ + /* Allocate a temporary buffer */ + for (szb = ((DWORD)fs->csize * SS(fs) >= MAX_MALLOC) ? MAX_MALLOC : fs->csize * SS(fs), ibuf = 0; szb > SS(fs) && (ibuf = ff_memalloc(szb)) == 0; szb /= 2) ; + if (szb > SS(fs)) { /* Buffer allocated? */ + mem_set(ibuf, 0, szb); + szb /= SS(fs); /* Bytes -> Sectors */ + for (n = 0; n < fs->csize && disk_write(fs->pdrv, ibuf, sect + n, szb) == RES_OK; n += szb) ; /* Fill the cluster with 0 */ + ff_memfree(ibuf); + } else +#endif + { + ibuf = fs->win; szb = 1; /* Use window buffer (many single-sector writes may take a time) */ + for (n = 0; n < fs->csize && disk_write(fs->pdrv, ibuf, sect + n, szb) == RES_OK; n += szb) ; /* Fill the cluster with 0 */ + } + return (n == fs->csize) ? FR_OK : FR_DISK_ERR; +} +#endif /* !FF_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Set directory index */ +/*-----------------------------------------------------------------------*/ + +static FRESULT dir_sdi ( /* FR_OK(0):succeeded, !=0:error */ + DIR* dp, /* Pointer to directory object */ + DWORD ofs /* Offset of directory table */ +) +{ + DWORD csz, clst; + FATFS *fs = dp->obj.fs; + + + if (ofs >= (DWORD)((FF_FS_EXFAT && fs->fs_type == FS_EXFAT) ? MAX_DIR_EX : MAX_DIR) || ofs % SZDIRE) { /* Check range of offset and alignment */ + return FR_INT_ERR; + } + dp->dptr = ofs; /* Set current offset */ + clst = dp->obj.sclust; /* Table start cluster (0:root) */ + if (clst == 0 && fs->fs_type >= FS_FAT32) { /* Replace cluster# 0 with root cluster# */ + clst = (DWORD)fs->dirbase; + if (FF_FS_EXFAT) dp->obj.stat = 0; /* exFAT: Root dir has an FAT chain */ + } + + if (clst == 0) { /* Static table (root-directory on the FAT volume) */ + if (ofs / SZDIRE >= fs->n_rootdir) return FR_INT_ERR; /* Is index out of range? */ + dp->sect = fs->dirbase; + + } else { /* Dynamic table (sub-directory or root-directory on the FAT32/exFAT volume) */ + csz = (DWORD)fs->csize * SS(fs); /* Bytes per cluster */ + while (ofs >= csz) { /* Follow cluster chain */ + clst = get_fat(&dp->obj, clst); /* Get next cluster */ + if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ + if (clst < 2 || clst >= fs->n_fatent) return FR_INT_ERR; /* Reached to end of table or internal error */ + ofs -= csz; + } + dp->sect = clst2sect(fs, clst); + } + dp->clust = clst; /* Current cluster# */ + if (dp->sect == 0) return FR_INT_ERR; + dp->sect += ofs / SS(fs); /* Sector# of the directory entry */ + dp->dir = fs->win + (ofs % SS(fs)); /* Pointer to the entry in the win[] */ + + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Move directory table index next */ +/*-----------------------------------------------------------------------*/ + +static FRESULT dir_next ( /* FR_OK(0):succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not stretch */ + DIR* dp, /* Pointer to the directory object */ + int stretch /* 0: Do not stretch table, 1: Stretch table if needed */ +) +{ + DWORD ofs, clst; + FATFS *fs = dp->obj.fs; + + + ofs = dp->dptr + SZDIRE; /* Next entry */ + if (ofs >= (DWORD)((FF_FS_EXFAT && fs->fs_type == FS_EXFAT) ? MAX_DIR_EX : MAX_DIR)) dp->sect = 0; /* Disable it if the offset reached the max value */ + if (dp->sect == 0) return FR_NO_FILE; /* Report EOT if it has been disabled */ + + if (ofs % SS(fs) == 0) { /* Sector changed? */ + dp->sect++; /* Next sector */ + + if (dp->clust == 0) { /* Static table */ + if (ofs / SZDIRE >= fs->n_rootdir) { /* Report EOT if it reached end of static table */ + dp->sect = 0; return FR_NO_FILE; + } + } + else { /* Dynamic table */ + if ((ofs / SS(fs) & (fs->csize - 1)) == 0) { /* Cluster changed? */ + clst = get_fat(&dp->obj, dp->clust); /* Get next cluster */ + if (clst <= 1) return FR_INT_ERR; /* Internal error */ + if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ + if (clst >= fs->n_fatent) { /* It reached end of dynamic table */ +#if !FF_FS_READONLY + if (!stretch) { /* If no stretch, report EOT */ + dp->sect = 0; return FR_NO_FILE; + } + clst = create_chain(&dp->obj, dp->clust); /* Allocate a cluster */ + if (clst == 0) return FR_DENIED; /* No free cluster */ + if (clst == 1) return FR_INT_ERR; /* Internal error */ + if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ + if (dir_clear(fs, clst) != FR_OK) return FR_DISK_ERR; /* Clean up the stretched table */ + if (FF_FS_EXFAT) dp->obj.stat |= 4; /* exFAT: The directory has been stretched */ +#else + if (!stretch) dp->sect = 0; /* (this line is to suppress compiler warning) */ + dp->sect = 0; return FR_NO_FILE; /* Report EOT */ +#endif + } + dp->clust = clst; /* Initialize data for new cluster */ + dp->sect = clst2sect(fs, clst); + } + } + } + dp->dptr = ofs; /* Current entry */ + dp->dir = fs->win + ofs % SS(fs); /* Pointer to the entry in the win[] */ + + return FR_OK; +} + + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Directory handling - Reserve a block of directory entries */ +/*-----------------------------------------------------------------------*/ + +static FRESULT dir_alloc ( /* FR_OK(0):succeeded, !=0:error */ + DIR* dp, /* Pointer to the directory object */ + UINT n_ent /* Number of contiguous entries to allocate */ +) +{ + FRESULT res; + UINT n; + FATFS *fs = dp->obj.fs; + + + res = dir_sdi(dp, 0); + if (res == FR_OK) { + n = 0; + do { + res = move_window(fs, dp->sect); + if (res != FR_OK) break; +#if FF_FS_EXFAT + if ((fs->fs_type == FS_EXFAT) ? (int)((dp->dir[XDIR_Type] & 0x80) == 0) : (int)(dp->dir[DIR_Name] == DDEM || dp->dir[DIR_Name] == 0)) { /* Is the entry free? */ +#else + if (dp->dir[DIR_Name] == DDEM || dp->dir[DIR_Name] == 0) { /* Is the entry free? */ +#endif + if (++n == n_ent) break; /* Is a block of contiguous free entries found? */ + } else { + n = 0; /* Not a free entry, restart to search */ + } + res = dir_next(dp, 1); /* Next entry with table stretch enabled */ + } while (res == FR_OK); + } + + if (res == FR_NO_FILE) res = FR_DENIED; /* No directory entry to allocate */ + return res; +} + +#endif /* !FF_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* FAT: Directory handling - Load/Store start cluster number */ +/*-----------------------------------------------------------------------*/ + +static DWORD ld_clust ( /* Returns the top cluster value of the SFN entry */ + FATFS* fs, /* Pointer to the fs object */ + const BYTE* dir /* Pointer to the key entry */ +) +{ + DWORD cl; + + cl = ld_word(dir + DIR_FstClusLO); + if (fs->fs_type == FS_FAT32) { + cl |= (DWORD)ld_word(dir + DIR_FstClusHI) << 16; + } + + return cl; +} + + +#if !FF_FS_READONLY +static void st_clust ( + FATFS* fs, /* Pointer to the fs object */ + BYTE* dir, /* Pointer to the key entry */ + DWORD cl /* Value to be set */ +) +{ + st_word(dir + DIR_FstClusLO, (WORD)cl); + if (fs->fs_type == FS_FAT32) { + st_word(dir + DIR_FstClusHI, (WORD)(cl >> 16)); + } +} +#endif + + + +#if FF_USE_LFN +/*--------------------------------------------------------*/ +/* FAT-LFN: Compare a part of file name with an LFN entry */ +/*--------------------------------------------------------*/ + +static int cmp_lfn ( /* 1:matched, 0:not matched */ + const WCHAR* lfnbuf, /* Pointer to the LFN working buffer to be compared */ + BYTE* dir /* Pointer to the directory entry containing the part of LFN */ +) +{ + UINT i, s; + WCHAR wc, uc; + + + if (ld_word(dir + LDIR_FstClusLO) != 0) return 0; /* Check LDIR_FstClusLO */ + + i = ((dir[LDIR_Ord] & 0x3F) - 1) * 13; /* Offset in the LFN buffer */ + + for (wc = 1, s = 0; s < 13; s++) { /* Process all characters in the entry */ + uc = ld_word(dir + LfnOfs[s]); /* Pick an LFN character */ + if (wc != 0) { + if (i >= FF_MAX_LFN + 1 || ff_wtoupper(uc) != ff_wtoupper(lfnbuf[i++])) { /* Compare it */ + return 0; /* Not matched */ + } + wc = uc; + } else { + if (uc != 0xFFFF) return 0; /* Check filler */ + } + } + + if ((dir[LDIR_Ord] & LLEF) && wc && lfnbuf[i]) return 0; /* Last segment matched but different length */ + + return 1; /* The part of LFN matched */ +} + + +#if FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 || FF_USE_LABEL || FF_FS_EXFAT +/*-----------------------------------------------------*/ +/* FAT-LFN: Pick a part of file name from an LFN entry */ +/*-----------------------------------------------------*/ + +static int pick_lfn ( /* 1:succeeded, 0:buffer overflow or invalid LFN entry */ + WCHAR* lfnbuf, /* Pointer to the LFN working buffer */ + BYTE* dir /* Pointer to the LFN entry */ +) +{ + UINT i, s; + WCHAR wc, uc; + + + if (ld_word(dir + LDIR_FstClusLO) != 0) return 0; /* Check LDIR_FstClusLO is 0 */ + + i = ((dir[LDIR_Ord] & ~LLEF) - 1) * 13; /* Offset in the LFN buffer */ + + for (wc = 1, s = 0; s < 13; s++) { /* Process all characters in the entry */ + uc = ld_word(dir + LfnOfs[s]); /* Pick an LFN character */ + if (wc != 0) { + if (i >= FF_MAX_LFN + 1) return 0; /* Buffer overflow? */ + lfnbuf[i++] = wc = uc; /* Store it */ + } else { + if (uc != 0xFFFF) return 0; /* Check filler */ + } + } + + if (dir[LDIR_Ord] & LLEF && wc != 0) { /* Put terminator if it is the last LFN part and not terminated */ + if (i >= FF_MAX_LFN + 1) return 0; /* Buffer overflow? */ + lfnbuf[i] = 0; + } + + return 1; /* The part of LFN is valid */ +} +#endif + + +#if !FF_FS_READONLY +/*-----------------------------------------*/ +/* FAT-LFN: Create an entry of LFN entries */ +/*-----------------------------------------*/ + +static void put_lfn ( + const WCHAR* lfn, /* Pointer to the LFN */ + BYTE* dir, /* Pointer to the LFN entry to be created */ + BYTE ord, /* LFN order (1-20) */ + BYTE sum /* Checksum of the corresponding SFN */ +) +{ + UINT i, s; + WCHAR wc; + + + dir[LDIR_Chksum] = sum; /* Set checksum */ + dir[LDIR_Attr] = AM_LFN; /* Set attribute. LFN entry */ + dir[LDIR_Type] = 0; + st_word(dir + LDIR_FstClusLO, 0); + + i = (ord - 1) * 13; /* Get offset in the LFN working buffer */ + s = wc = 0; + do { + if (wc != 0xFFFF) wc = lfn[i++]; /* Get an effective character */ + st_word(dir + LfnOfs[s], wc); /* Put it */ + if (wc == 0) wc = 0xFFFF; /* Padding characters for following items */ + } while (++s < 13); + if (wc == 0xFFFF || !lfn[i]) ord |= LLEF; /* Last LFN part is the start of LFN sequence */ + dir[LDIR_Ord] = ord; /* Set the LFN order */ +} + +#endif /* !FF_FS_READONLY */ +#endif /* FF_USE_LFN */ + + + +#if FF_USE_LFN && !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* FAT-LFN: Create a Numbered SFN */ +/*-----------------------------------------------------------------------*/ + +static void gen_numname ( + BYTE* dst, /* Pointer to the buffer to store numbered SFN */ + const BYTE* src, /* Pointer to SFN */ + const WCHAR* lfn, /* Pointer to LFN */ + UINT seq /* Sequence number */ +) +{ + BYTE ns[8], c; + UINT i, j; + WCHAR wc; + DWORD sreg; + + + mem_cpy(dst, src, 11); + + if (seq > 5) { /* In case of many collisions, generate a hash number instead of sequential number */ + sreg = seq; + while (*lfn) { /* Create a CRC as hash value */ + wc = *lfn++; + for (i = 0; i < 16; i++) { + sreg = (sreg << 1) + (wc & 1); + wc >>= 1; + if (sreg & 0x10000) sreg ^= 0x11021; + } + } + seq = (UINT)sreg; + } + + /* itoa (hexdecimal) */ + i = 7; + do { + c = (BYTE)((seq % 16) + '0'); + if (c > '9') c += 7; + ns[i--] = c; + seq /= 16; + } while (seq); + ns[i] = '~'; + + /* Append the number to the SFN body */ + for (j = 0; j < i && dst[j] != ' '; j++) { + if (dbc_1st(dst[j])) { + if (j == i - 1) break; + j++; + } + } + do { + dst[j++] = (i < 8) ? ns[i++] : ' '; + } while (j < 8); +} +#endif /* FF_USE_LFN && !FF_FS_READONLY */ + + + +#if FF_USE_LFN +/*-----------------------------------------------------------------------*/ +/* FAT-LFN: Calculate checksum of an SFN entry */ +/*-----------------------------------------------------------------------*/ + +static BYTE sum_sfn ( + const BYTE* dir /* Pointer to the SFN entry */ +) +{ + BYTE sum = 0; + UINT n = 11; + + do { + sum = (sum >> 1) + (sum << 7) + *dir++; + } while (--n); + return sum; +} + +#endif /* FF_USE_LFN */ + + + +#if FF_FS_EXFAT +/*-----------------------------------------------------------------------*/ +/* exFAT: Checksum */ +/*-----------------------------------------------------------------------*/ + +static WORD xdir_sum ( /* Get checksum of the directoly entry block */ + const BYTE* dir /* Directory entry block to be calculated */ +) +{ + UINT i, szblk; + WORD sum; + + + szblk = (dir[XDIR_NumSec] + 1) * SZDIRE; /* Number of bytes of the entry block */ + for (i = sum = 0; i < szblk; i++) { + if (i == XDIR_SetSum) { /* Skip 2-byte sum field */ + i++; + } else { + sum = ((sum & 1) ? 0x8000 : 0) + (sum >> 1) + dir[i]; + } + } + return sum; +} + + + +static WORD xname_sum ( /* Get check sum (to be used as hash) of the file name */ + const WCHAR* name /* File name to be calculated */ +) +{ + WCHAR chr; + WORD sum = 0; + + + while ((chr = *name++) != 0) { + chr = (WCHAR)ff_wtoupper(chr); /* File name needs to be up-case converted */ + sum = ((sum & 1) ? 0x8000 : 0) + (sum >> 1) + (chr & 0xFF); + sum = ((sum & 1) ? 0x8000 : 0) + (sum >> 1) + (chr >> 8); + } + return sum; +} + + +#if !FF_FS_READONLY && FF_USE_MKFS +static DWORD xsum32 ( /* Returns 32-bit checksum */ + BYTE dat, /* Byte to be calculated (byte-by-byte processing) */ + DWORD sum /* Previous sum value */ +) +{ + sum = ((sum & 1) ? 0x80000000 : 0) + (sum >> 1) + dat; + return sum; +} +#endif + + +#if FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 +/*------------------------------------------------------*/ +/* exFAT: Get object information from a directory block */ +/*------------------------------------------------------*/ + +static void get_xfileinfo ( + BYTE* dirb, /* Pointer to the direcotry entry block 85+C0+C1s */ + FILINFO* fno /* Buffer to store the extracted file information */ +) +{ + WCHAR wc, hs; + UINT di, si, nc; + + /* Get file name from the entry block */ + si = SZDIRE * 2; /* 1st C1 entry */ + nc = 0; hs = 0; di = 0; + while (nc < dirb[XDIR_NumName]) { + if (si >= MAXDIRB(FF_MAX_LFN)) { di = 0; break; } /* Truncated directory block? */ + if ((si % SZDIRE) == 0) si += 2; /* Skip entry type field */ + wc = ld_word(dirb + si); si += 2; nc++; /* Get a character */ + if (hs == 0 && IsSurrogate(wc)) { /* Is it a surrogate? */ + hs = wc; continue; /* Get low surrogate */ + } + wc = put_utf((DWORD)hs << 16 | wc, &fno->fname[di], FF_LFN_BUF - di); /* Store it in API encoding */ + if (wc == 0) { di = 0; break; } /* Buffer overflow or wrong encoding? */ + di += wc; + hs = 0; + } + if (hs != 0) di = 0; /* Broken surrogate pair? */ + if (di == 0) fno->fname[di++] = '?'; /* Inaccessible object name? */ + fno->fname[di] = 0; /* Terminate the name */ + fno->altname[0] = 0; /* exFAT does not support SFN */ + + fno->fattrib = dirb[XDIR_Attr]; /* Attribute */ + fno->fsize = (fno->fattrib & AM_DIR) ? 0 : ld_qword(dirb + XDIR_FileSize); /* Size */ + fno->ftime = ld_word(dirb + XDIR_ModTime + 0); /* Time */ + fno->fdate = ld_word(dirb + XDIR_ModTime + 2); /* Date */ +} + +#endif /* FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 */ + + +/*-----------------------------------*/ +/* exFAT: Get a directry entry block */ +/*-----------------------------------*/ + +static FRESULT load_xdir ( /* FR_INT_ERR: invalid entry block */ + DIR* dp /* Reading direcotry object pointing top of the entry block to load */ +) +{ + FRESULT res; + UINT i, sz_ent; + BYTE* dirb = dp->obj.fs->dirbuf; /* Pointer to the on-memory direcotry entry block 85+C0+C1s */ + + + /* Load file-directory entry */ + res = move_window(dp->obj.fs, dp->sect); + if (res != FR_OK) return res; + if (dp->dir[XDIR_Type] != ET_FILEDIR) return FR_INT_ERR; /* Invalid order */ + mem_cpy(dirb + 0 * SZDIRE, dp->dir, SZDIRE); + sz_ent = (dirb[XDIR_NumSec] + 1) * SZDIRE; + if (sz_ent < 3 * SZDIRE || sz_ent > 19 * SZDIRE) return FR_INT_ERR; + + /* Load stream-extension entry */ + res = dir_next(dp, 0); + if (res == FR_NO_FILE) res = FR_INT_ERR; /* It cannot be */ + if (res != FR_OK) return res; + res = move_window(dp->obj.fs, dp->sect); + if (res != FR_OK) return res; + if (dp->dir[XDIR_Type] != ET_STREAM) return FR_INT_ERR; /* Invalid order */ + mem_cpy(dirb + 1 * SZDIRE, dp->dir, SZDIRE); + if (MAXDIRB(dirb[XDIR_NumName]) > sz_ent) return FR_INT_ERR; + + /* Load file-name entries */ + i = 2 * SZDIRE; /* Name offset to load */ + do { + res = dir_next(dp, 0); + if (res == FR_NO_FILE) res = FR_INT_ERR; /* It cannot be */ + if (res != FR_OK) return res; + res = move_window(dp->obj.fs, dp->sect); + if (res != FR_OK) return res; + if (dp->dir[XDIR_Type] != ET_FILENAME) return FR_INT_ERR; /* Invalid order */ + if (i < MAXDIRB(FF_MAX_LFN)) mem_cpy(dirb + i, dp->dir, SZDIRE); + } while ((i += SZDIRE) < sz_ent); + + /* Sanity check (do it for only accessible object) */ + if (i <= MAXDIRB(FF_MAX_LFN)) { + if (xdir_sum(dirb) != ld_word(dirb + XDIR_SetSum)) return FR_INT_ERR; + } + return FR_OK; +} + + +/*------------------------------------------------------------------*/ +/* exFAT: Initialize object allocation info with loaded entry block */ +/*------------------------------------------------------------------*/ + +static void init_alloc_info ( + FATFS* fs, /* Filesystem object */ + FFOBJID* obj /* Object allocation information to be initialized */ +) +{ + obj->sclust = ld_dword(fs->dirbuf + XDIR_FstClus); /* Start cluster */ + obj->objsize = ld_qword(fs->dirbuf + XDIR_FileSize); /* Size */ + obj->stat = fs->dirbuf[XDIR_GenFlags] & 2; /* Allocation status */ + obj->n_frag = 0; /* No last fragment info */ +} + + + +#if !FF_FS_READONLY || FF_FS_RPATH != 0 +/*------------------------------------------------*/ +/* exFAT: Load the object's directory entry block */ +/*------------------------------------------------*/ + +static FRESULT load_obj_xdir ( + DIR* dp, /* Blank directory object to be used to access containing direcotry */ + const FFOBJID* obj /* Object with its containing directory information */ +) +{ + FRESULT res; + + /* Open object containing directory */ + dp->obj.fs = obj->fs; + dp->obj.sclust = obj->c_scl; + dp->obj.stat = (BYTE)obj->c_size; + dp->obj.objsize = obj->c_size & 0xFFFFFF00; + dp->obj.n_frag = 0; + dp->blk_ofs = obj->c_ofs; + + res = dir_sdi(dp, dp->blk_ofs); /* Goto object's entry block */ + if (res == FR_OK) { + res = load_xdir(dp); /* Load the object's entry block */ + } + return res; +} +#endif + + +#if !FF_FS_READONLY +/*----------------------------------------*/ +/* exFAT: Store the directory entry block */ +/*----------------------------------------*/ + +static FRESULT store_xdir ( + DIR* dp /* Pointer to the direcotry object */ +) +{ + FRESULT res; + UINT nent; + BYTE* dirb = dp->obj.fs->dirbuf; /* Pointer to the direcotry entry block 85+C0+C1s */ + + /* Create set sum */ + st_word(dirb + XDIR_SetSum, xdir_sum(dirb)); + nent = dirb[XDIR_NumSec] + 1; + + /* Store the direcotry entry block to the directory */ + res = dir_sdi(dp, dp->blk_ofs); + while (res == FR_OK) { + res = move_window(dp->obj.fs, dp->sect); + if (res != FR_OK) break; + mem_cpy(dp->dir, dirb, SZDIRE); + dp->obj.fs->wflag = 1; + if (--nent == 0) break; + dirb += SZDIRE; + res = dir_next(dp, 0); + } + return (res == FR_OK || res == FR_DISK_ERR) ? res : FR_INT_ERR; +} + + + +/*-------------------------------------------*/ +/* exFAT: Create a new directory enrty block */ +/*-------------------------------------------*/ + +static void create_xdir ( + BYTE* dirb, /* Pointer to the direcotry entry block buffer */ + const WCHAR* lfn /* Pointer to the object name */ +) +{ + UINT i; + BYTE nc1, nlen; + WCHAR wc; + + + /* Create file-directory and stream-extension entry */ + mem_set(dirb, 0, 2 * SZDIRE); + dirb[0 * SZDIRE + XDIR_Type] = ET_FILEDIR; + dirb[1 * SZDIRE + XDIR_Type] = ET_STREAM; + + /* Create file-name entries */ + i = SZDIRE * 2; /* Top of file_name entries */ + nlen = nc1 = 0; wc = 1; + do { + dirb[i++] = ET_FILENAME; dirb[i++] = 0; + do { /* Fill name field */ + if (wc != 0 && (wc = lfn[nlen]) != 0) nlen++; /* Get a character if exist */ + st_word(dirb + i, wc); /* Store it */ + i += 2; + } while (i % SZDIRE != 0); + nc1++; + } while (lfn[nlen]); /* Fill next entry if any char follows */ + + dirb[XDIR_NumName] = nlen; /* Set name length */ + dirb[XDIR_NumSec] = 1 + nc1; /* Set secondary count (C0 + C1s) */ + st_word(dirb + XDIR_NameHash, xname_sum(lfn)); /* Set name hash */ +} + +#endif /* !FF_FS_READONLY */ +#endif /* FF_FS_EXFAT */ + + + +#if FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 || FF_USE_LABEL || FF_FS_EXFAT +/*-----------------------------------------------------------------------*/ +/* Read an object from the directory */ +/*-----------------------------------------------------------------------*/ + +#define DIR_READ_FILE(dp) dir_read(dp, 0) +#define DIR_READ_LABEL(dp) dir_read(dp, 1) + +static FRESULT dir_read ( + DIR* dp, /* Pointer to the directory object */ + int vol /* Filtered by 0:file/directory or 1:volume label */ +) +{ + FRESULT res = FR_NO_FILE; + FATFS *fs = dp->obj.fs; + BYTE attr, b; +#if FF_USE_LFN + BYTE ord = 0xFF, sum = 0xFF; +#endif + + while (dp->sect) { + res = move_window(fs, dp->sect); + if (res != FR_OK) break; + b = dp->dir[DIR_Name]; /* Test for the entry type */ + if (b == 0) { + res = FR_NO_FILE; break; /* Reached to end of the directory */ + } +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ + if (FF_USE_LABEL && vol) { + if (b == ET_VLABEL) break; /* Volume label entry? */ + } else { + if (b == ET_FILEDIR) { /* Start of the file entry block? */ + dp->blk_ofs = dp->dptr; /* Get location of the block */ + res = load_xdir(dp); /* Load the entry block */ + if (res == FR_OK) { + dp->obj.attr = fs->dirbuf[XDIR_Attr] & AM_MASK; /* Get attribute */ + } + break; + } + } + } else +#endif + { /* On the FAT/FAT32 volume */ + dp->obj.attr = attr = dp->dir[DIR_Attr] & AM_MASK; /* Get attribute */ +#if FF_USE_LFN /* LFN configuration */ + if (b == DDEM || b == '.' || (int)((attr & ~AM_ARC) == AM_VOL) != vol) { /* An entry without valid data */ + ord = 0xFF; + } else { + if (attr == AM_LFN) { /* An LFN entry is found */ + if (b & LLEF) { /* Is it start of an LFN sequence? */ + sum = dp->dir[LDIR_Chksum]; + b &= (BYTE)~LLEF; ord = b; + dp->blk_ofs = dp->dptr; + } + /* Check LFN validity and capture it */ + ord = (b == ord && sum == dp->dir[LDIR_Chksum] && pick_lfn(fs->lfnbuf, dp->dir)) ? ord - 1 : 0xFF; + } else { /* An SFN entry is found */ + if (ord != 0 || sum != sum_sfn(dp->dir)) { /* Is there a valid LFN? */ + dp->blk_ofs = 0xFFFFFFFF; /* It has no LFN. */ + } + break; + } + } +#else /* Non LFN configuration */ + if (b != DDEM && b != '.' && attr != AM_LFN && (int)((attr & ~AM_ARC) == AM_VOL) == vol) { /* Is it a valid entry? */ + break; + } +#endif + } + res = dir_next(dp, 0); /* Next entry */ + if (res != FR_OK) break; + } + + if (res != FR_OK) dp->sect = 0; /* Terminate the read operation on error or EOT */ + return res; +} + +#endif /* FF_FS_MINIMIZE <= 1 || FF_USE_LABEL || FF_FS_RPATH >= 2 */ + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Find an object in the directory */ +/*-----------------------------------------------------------------------*/ + +static FRESULT dir_find ( /* FR_OK(0):succeeded, !=0:error */ + DIR* dp /* Pointer to the directory object with the file name */ +) +{ + FRESULT res; + FATFS *fs = dp->obj.fs; + BYTE c; +#if FF_USE_LFN + BYTE a, ord, sum; +#endif + + res = dir_sdi(dp, 0); /* Rewind directory object */ + if (res != FR_OK) return res; +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ + BYTE nc; + UINT di, ni; + WORD hash = xname_sum(fs->lfnbuf); /* Hash value of the name to find */ + + while ((res = DIR_READ_FILE(dp)) == FR_OK) { /* Read an item */ +#if FF_MAX_LFN < 255 + if (fs->dirbuf[XDIR_NumName] > FF_MAX_LFN) continue; /* Skip comparison if inaccessible object name */ +#endif + if (ld_word(fs->dirbuf + XDIR_NameHash) != hash) continue; /* Skip comparison if hash mismatched */ + for (nc = fs->dirbuf[XDIR_NumName], di = SZDIRE * 2, ni = 0; nc; nc--, di += 2, ni++) { /* Compare the name */ + if ((di % SZDIRE) == 0) di += 2; + if (ff_wtoupper(ld_word(fs->dirbuf + di)) != ff_wtoupper(fs->lfnbuf[ni])) break; + } + if (nc == 0 && !fs->lfnbuf[ni]) break; /* Name matched? */ + } + return res; + } +#endif + /* On the FAT/FAT32 volume */ +#if FF_USE_LFN + ord = sum = 0xFF; dp->blk_ofs = 0xFFFFFFFF; /* Reset LFN sequence */ +#endif + do { + res = move_window(fs, dp->sect); + if (res != FR_OK) break; + c = dp->dir[DIR_Name]; + if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ +#if FF_USE_LFN /* LFN configuration */ + dp->obj.attr = a = dp->dir[DIR_Attr] & AM_MASK; + if (c == DDEM || ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */ + ord = 0xFF; dp->blk_ofs = 0xFFFFFFFF; /* Reset LFN sequence */ + } else { + if (a == AM_LFN) { /* An LFN entry is found */ + if (!(dp->fn[NSFLAG] & NS_NOLFN)) { + if (c & LLEF) { /* Is it start of LFN sequence? */ + sum = dp->dir[LDIR_Chksum]; + c &= (BYTE)~LLEF; ord = c; /* LFN start order */ + dp->blk_ofs = dp->dptr; /* Start offset of LFN */ + } + /* Check validity of the LFN entry and compare it with given name */ + ord = (c == ord && sum == dp->dir[LDIR_Chksum] && cmp_lfn(fs->lfnbuf, dp->dir)) ? ord - 1 : 0xFF; + } + } else { /* An SFN entry is found */ + if (ord == 0 && sum == sum_sfn(dp->dir)) break; /* LFN matched? */ + if (!(dp->fn[NSFLAG] & NS_LOSS) && !mem_cmp(dp->dir, dp->fn, 11)) break; /* SFN matched? */ + ord = 0xFF; dp->blk_ofs = 0xFFFFFFFF; /* Reset LFN sequence */ + } + } +#else /* Non LFN configuration */ + dp->obj.attr = dp->dir[DIR_Attr] & AM_MASK; + if (!(dp->dir[DIR_Attr] & AM_VOL) && !mem_cmp(dp->dir, dp->fn, 11)) break; /* Is it a valid entry? */ +#endif + res = dir_next(dp, 0); /* Next entry */ + } while (res == FR_OK); + + return res; +} + + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Register an object to the directory */ +/*-----------------------------------------------------------------------*/ + +static FRESULT dir_register ( /* FR_OK:succeeded, FR_DENIED:no free entry or too many SFN collision, FR_DISK_ERR:disk error */ + DIR* dp /* Target directory with object name to be created */ +) +{ + FRESULT res; + FATFS *fs = dp->obj.fs; +#if FF_USE_LFN /* LFN configuration */ + UINT n, len, n_ent; + BYTE sn[12], sum; + + + if (dp->fn[NSFLAG] & (NS_DOT | NS_NONAME)) return FR_INVALID_NAME; /* Check name validity */ + for (len = 0; fs->lfnbuf[len]; len++) ; /* Get lfn length */ + +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ + n_ent = (len + 14) / 15 + 2; /* Number of entries to allocate (85+C0+C1s) */ + res = dir_alloc(dp, n_ent); /* Allocate directory entries */ + if (res != FR_OK) return res; + dp->blk_ofs = dp->dptr - SZDIRE * (n_ent - 1); /* Set the allocated entry block offset */ + + if (dp->obj.stat & 4) { /* Has the directory been stretched by new allocation? */ + dp->obj.stat &= ~4; + res = fill_first_frag(&dp->obj); /* Fill the first fragment on the FAT if needed */ + if (res != FR_OK) return res; + res = fill_last_frag(&dp->obj, dp->clust, 0xFFFFFFFF); /* Fill the last fragment on the FAT if needed */ + if (res != FR_OK) return res; + if (dp->obj.sclust != 0) { /* Is it a sub-directory? */ + DIR dj; + + res = load_obj_xdir(&dj, &dp->obj); /* Load the object status */ + if (res != FR_OK) return res; + dp->obj.objsize += (DWORD)fs->csize * SS(fs); /* Increase the directory size by cluster size */ + st_qword(fs->dirbuf + XDIR_FileSize, dp->obj.objsize); + st_qword(fs->dirbuf + XDIR_ValidFileSize, dp->obj.objsize); + fs->dirbuf[XDIR_GenFlags] = dp->obj.stat | 1; /* Update the allocation status */ + res = store_xdir(&dj); /* Store the object status */ + if (res != FR_OK) return res; + } + } + + create_xdir(fs->dirbuf, fs->lfnbuf); /* Create on-memory directory block to be written later */ + return FR_OK; + } +#endif + /* On the FAT/FAT32 volume */ + mem_cpy(sn, dp->fn, 12); + if (sn[NSFLAG] & NS_LOSS) { /* When LFN is out of 8.3 format, generate a numbered name */ + dp->fn[NSFLAG] = NS_NOLFN; /* Find only SFN */ + for (n = 1; n < 100; n++) { + gen_numname(dp->fn, sn, fs->lfnbuf, n); /* Generate a numbered name */ + res = dir_find(dp); /* Check if the name collides with existing SFN */ + if (res != FR_OK) break; + } + if (n == 100) return FR_DENIED; /* Abort if too many collisions */ + if (res != FR_NO_FILE) return res; /* Abort if the result is other than 'not collided' */ + dp->fn[NSFLAG] = sn[NSFLAG]; + } + + /* Create an SFN with/without LFNs. */ + n_ent = (sn[NSFLAG] & NS_LFN) ? (len + 12) / 13 + 1 : 1; /* Number of entries to allocate */ + res = dir_alloc(dp, n_ent); /* Allocate entries */ + if (res == FR_OK && --n_ent) { /* Set LFN entry if needed */ + res = dir_sdi(dp, dp->dptr - n_ent * SZDIRE); + if (res == FR_OK) { + sum = sum_sfn(dp->fn); /* Checksum value of the SFN tied to the LFN */ + do { /* Store LFN entries in bottom first */ + res = move_window(fs, dp->sect); + if (res != FR_OK) break; + put_lfn(fs->lfnbuf, dp->dir, (BYTE)n_ent, sum); + fs->wflag = 1; + res = dir_next(dp, 0); /* Next entry */ + } while (res == FR_OK && --n_ent); + } + } + +#else /* Non LFN configuration */ + res = dir_alloc(dp, 1); /* Allocate an entry for SFN */ + +#endif + + /* Set SFN entry */ + if (res == FR_OK) { + res = move_window(fs, dp->sect); + if (res == FR_OK) { + mem_set(dp->dir, 0, SZDIRE); /* Clean the entry */ + mem_cpy(dp->dir + DIR_Name, dp->fn, 11); /* Put SFN */ +#if FF_USE_LFN + dp->dir[DIR_NTres] = dp->fn[NSFLAG] & (NS_BODY | NS_EXT); /* Put NT flag */ +#endif + fs->wflag = 1; + } + } + + return res; +} + +#endif /* !FF_FS_READONLY */ + + + +#if !FF_FS_READONLY && FF_FS_MINIMIZE == 0 +/*-----------------------------------------------------------------------*/ +/* Remove an object from the directory */ +/*-----------------------------------------------------------------------*/ + +static FRESULT dir_remove ( /* FR_OK:Succeeded, FR_DISK_ERR:A disk error */ + DIR* dp /* Directory object pointing the entry to be removed */ +) +{ + FRESULT res; + FATFS *fs = dp->obj.fs; +#if FF_USE_LFN /* LFN configuration */ + DWORD last = dp->dptr; + + res = (dp->blk_ofs == 0xFFFFFFFF) ? FR_OK : dir_sdi(dp, dp->blk_ofs); /* Goto top of the entry block if LFN is exist */ + if (res == FR_OK) { + do { + res = move_window(fs, dp->sect); + if (res != FR_OK) break; + if (FF_FS_EXFAT && fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ + dp->dir[XDIR_Type] &= 0x7F; /* Clear the entry InUse flag. */ + } else { /* On the FAT/FAT32 volume */ + dp->dir[DIR_Name] = DDEM; /* Mark the entry 'deleted'. */ + } + fs->wflag = 1; + if (dp->dptr >= last) break; /* If reached last entry then all entries of the object has been deleted. */ + res = dir_next(dp, 0); /* Next entry */ + } while (res == FR_OK); + if (res == FR_NO_FILE) res = FR_INT_ERR; + } +#else /* Non LFN configuration */ + + res = move_window(fs, dp->sect); + if (res == FR_OK) { + dp->dir[DIR_Name] = DDEM; /* Mark the entry 'deleted'.*/ + fs->wflag = 1; + } +#endif + + return res; +} + +#endif /* !FF_FS_READONLY && FF_FS_MINIMIZE == 0 */ + + + +#if FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 +/*-----------------------------------------------------------------------*/ +/* Get file information from directory entry */ +/*-----------------------------------------------------------------------*/ + +static void get_fileinfo ( + DIR* dp, /* Pointer to the directory object */ + FILINFO* fno /* Pointer to the file information to be filled */ +) +{ + UINT si, di; +#if FF_USE_LFN + BYTE lcf; + WCHAR wc, hs; + FATFS *fs = dp->obj.fs; +#else + TCHAR c; +#endif + + + fno->fname[0] = 0; /* Invaidate file info */ + if (dp->sect == 0) return; /* Exit if read pointer has reached end of directory */ + +#if FF_USE_LFN /* LFN configuration */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ + get_xfileinfo(fs->dirbuf, fno); + return; + } else +#endif + { /* On the FAT/FAT32 volume */ + if (dp->blk_ofs != 0xFFFFFFFF) { /* Get LFN if available */ + si = di = hs = 0; + while (fs->lfnbuf[si] != 0) { + wc = fs->lfnbuf[si++]; /* Get an LFN character (UTF-16) */ + if (hs == 0 && IsSurrogate(wc)) { /* Is it a surrogate? */ + hs = wc; continue; /* Get low surrogate */ + } + wc = put_utf((DWORD)hs << 16 | wc, &fno->fname[di], FF_LFN_BUF - di); /* Store it in UTF-16 or UTF-8 encoding */ + if (wc == 0) { di = 0; break; } /* Invalid char or buffer overflow? */ + di += wc; + hs = 0; + } + if (hs != 0) di = 0; /* Broken surrogate pair? */ + fno->fname[di] = 0; /* Terminate the LFN (null string means LFN is invalid) */ + } + } + + si = di = 0; + while (si < 11) { /* Get SFN from SFN entry */ + wc = dp->dir[si++]; /* Get a char */ + if (wc == ' ') continue; /* Skip padding spaces */ + if (wc == RDDEM) wc = DDEM; /* Restore replaced DDEM character */ + if (si == 9 && di < FF_SFN_BUF) fno->altname[di++] = '.'; /* Insert a . if extension is exist */ +#if FF_LFN_UNICODE >= 1 /* Unicode output */ + if (dbc_1st((BYTE)wc) && si != 8 && si != 11 && dbc_2nd(dp->dir[si])) { /* Make a DBC if needed */ + wc = wc << 8 | dp->dir[si++]; + } + wc = ff_oem2uni(wc, CODEPAGE); /* ANSI/OEM -> Unicode */ + if (wc == 0) { di = 0; break; } /* Wrong char in the current code page? */ + wc = put_utf(wc, &fno->altname[di], FF_SFN_BUF - di); /* Store it in Unicode */ + if (wc == 0) { di = 0; break; } /* Buffer overflow? */ + di += wc; +#else /* ANSI/OEM output */ + fno->altname[di++] = (TCHAR)wc; /* Store it without any conversion */ +#endif + } + fno->altname[di] = 0; /* Terminate the SFN (null string means SFN is invalid) */ + + if (fno->fname[0] == 0) { /* If LFN is invalid, altname[] needs to be copied to fname[] */ + if (di == 0) { /* If LFN and SFN both are invalid, this object is inaccesible */ + fno->fname[di++] = '?'; + } else { + for (si = di = 0, lcf = NS_BODY; fno->altname[si]; si++, di++) { /* Copy altname[] to fname[] with case information */ + wc = (WCHAR)fno->altname[si]; + if (wc == '.') lcf = NS_EXT; + if (IsUpper(wc) && (dp->dir[DIR_NTres] & lcf)) wc += 0x20; + fno->fname[di] = (TCHAR)wc; + } + } + fno->fname[di] = 0; /* Terminate the LFN */ + if (!dp->dir[DIR_NTres]) fno->altname[0] = 0; /* Altname is not needed if neither LFN nor case info is exist. */ + } + +#else /* Non-LFN configuration */ + si = di = 0; + while (si < 11) { /* Copy name body and extension */ + c = (TCHAR)dp->dir[si++]; + if (c == ' ') continue; /* Skip padding spaces */ + if (c == RDDEM) c = DDEM; /* Restore replaced DDEM character */ + if (si == 9) fno->fname[di++] = '.';/* Insert a . if extension is exist */ + fno->fname[di++] = c; + } + fno->fname[di] = 0; +#endif + + fno->fattrib = dp->dir[DIR_Attr]; /* Attribute */ + fno->fsize = ld_dword(dp->dir + DIR_FileSize); /* Size */ + fno->ftime = ld_word(dp->dir + DIR_ModTime + 0); /* Time */ + fno->fdate = ld_word(dp->dir + DIR_ModTime + 2); /* Date */ +} + +#endif /* FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 */ + + + +#if FF_USE_FIND && FF_FS_MINIMIZE <= 1 +/*-----------------------------------------------------------------------*/ +/* Pattern matching */ +/*-----------------------------------------------------------------------*/ + +#define FIND_RECURS 4 /* Maximum number of wildcard terms in the pattern to limit recursion */ + + +static DWORD get_achar ( /* Get a character and advance ptr */ + const TCHAR** ptr /* Pointer to pointer to the ANSI/OEM or Unicode string */ +) +{ + DWORD chr; + + +#if FF_USE_LFN && FF_LFN_UNICODE >= 1 /* Unicode input */ + chr = tchar2uni(ptr); + if (chr == 0xFFFFFFFF) chr = 0; /* Wrong UTF encoding is recognized as end of the string */ + chr = ff_wtoupper(chr); + +#else /* ANSI/OEM input */ + chr = (BYTE)*(*ptr)++; /* Get a byte */ + if (IsLower(chr)) chr -= 0x20; /* To upper ASCII char */ +#if FF_CODE_PAGE == 0 + if (ExCvt && chr >= 0x80) chr = ExCvt[chr - 0x80]; /* To upper SBCS extended char */ +#elif FF_CODE_PAGE < 900 + if (chr >= 0x80) chr = ExCvt[chr - 0x80]; /* To upper SBCS extended char */ +#endif +#if FF_CODE_PAGE == 0 || FF_CODE_PAGE >= 900 + if (dbc_1st((BYTE)chr)) { /* Get DBC 2nd byte if needed */ + chr = dbc_2nd((BYTE)**ptr) ? chr << 8 | (BYTE)*(*ptr)++ : 0; + } +#endif + +#endif + return chr; +} + + +static int pattern_match ( /* 0:mismatched, 1:matched */ + const TCHAR* pat, /* Matching pattern */ + const TCHAR* nam, /* String to be tested */ + UINT skip, /* Number of pre-skip chars (number of ?s, b8:infinite (* specified)) */ + UINT recur /* Recursion count */ +) +{ + const TCHAR *pptr, *nptr; + DWORD pchr, nchr; + UINT sk; + + + while ((skip & 0xFF) != 0) { /* Pre-skip name chars */ + if (!get_achar(&nam)) return 0; /* Branch mismatched if less name chars */ + skip--; + } + if (*pat == 0 && skip) return 1; /* Matched? (short circuit) */ + + do { + pptr = pat; nptr = nam; /* Top of pattern and name to match */ + for (;;) { + if (*pptr == '?' || *pptr == '*') { /* Wildcard term? */ + if (recur == 0) return 0; /* Too many wildcard terms? */ + sk = 0; + do { /* Analyze the wildcard term */ + if (*pptr++ == '?') sk++; else sk |= 0x100; + } while (*pptr == '?' || *pptr == '*'); + if (pattern_match(pptr, nptr, sk, recur - 1)) return 1; /* Test new branch (recursive call) */ + nchr = *nptr; break; /* Branch mismatched */ + } + pchr = get_achar(&pptr); /* Get a pattern char */ + nchr = get_achar(&nptr); /* Get a name char */ + if (pchr != nchr) break; /* Branch mismatched? */ + if (pchr == 0) return 1; /* Branch matched? (matched at end of both strings) */ + } + get_achar(&nam); /* nam++ */ + } while (skip && nchr); /* Retry until end of name if infinite search is specified */ + + return 0; +} + +#endif /* FF_USE_FIND && FF_FS_MINIMIZE <= 1 */ + + + +/*-----------------------------------------------------------------------*/ +/* Pick a top segment and create the object name in directory form */ +/*-----------------------------------------------------------------------*/ + +static FRESULT create_name ( /* FR_OK: successful, FR_INVALID_NAME: could not create */ + DIR* dp, /* Pointer to the directory object */ + const TCHAR** path /* Pointer to pointer to the segment in the path string */ +) +{ +#if FF_USE_LFN /* LFN configuration */ + BYTE b, cf; + WCHAR wc, *lfn; + DWORD uc; + UINT i, ni, si, di; + const TCHAR *p; + + + /* Create LFN into LFN working buffer */ + p = *path; lfn = dp->obj.fs->lfnbuf; di = 0; + for (;;) { + uc = tchar2uni(&p); /* Get a character */ + if (uc == 0xFFFFFFFF) return FR_INVALID_NAME; /* Invalid code or UTF decode error */ + if (uc >= 0x10000) lfn[di++] = (WCHAR)(uc >> 16); /* Store high surrogate if needed */ + wc = (WCHAR)uc; + if (wc < ' ' || wc == '/' || wc == '\\') break; /* Break if end of the path or a separator is found */ + if (wc < 0x80 && chk_chr("\"*:<>\?|\x7F", wc)) return FR_INVALID_NAME; /* Reject illegal characters for LFN */ + if (di >= FF_MAX_LFN) return FR_INVALID_NAME; /* Reject too long name */ + lfn[di++] = wc; /* Store the Unicode character */ + } + if (wc < ' ') { /* End of path? */ + cf = NS_LAST; /* Set last segment flag */ + } else { + cf = 0; /* Next segment follows */ + while (*p == '/' || *p == '\\') p++; /* Skip duplicated separators if exist */ + } + *path = p; /* Return pointer to the next segment */ + +#if FF_FS_RPATH != 0 + if ((di == 1 && lfn[di - 1] == '.') || + (di == 2 && lfn[di - 1] == '.' && lfn[di - 2] == '.')) { /* Is this segment a dot name? */ + lfn[di] = 0; + for (i = 0; i < 11; i++) { /* Create dot name for SFN entry */ + dp->fn[i] = (i < di) ? '.' : ' '; + } + dp->fn[i] = cf | NS_DOT; /* This is a dot entry */ + return FR_OK; + } +#endif + while (di) { /* Snip off trailing spaces and dots if exist */ + wc = lfn[di - 1]; + if (wc != ' ' && wc != '.') break; + di--; + } + lfn[di] = 0; /* LFN is created into the working buffer */ + if (di == 0) return FR_INVALID_NAME; /* Reject null name */ + + /* Create SFN in directory form */ + for (si = 0; lfn[si] == ' '; si++) ; /* Remove leading spaces */ + if (si > 0 || lfn[si] == '.') cf |= NS_LOSS | NS_LFN; /* Is there any leading space or dot? */ + while (di > 0 && lfn[di - 1] != '.') di--; /* Find last dot (di<=si: no extension) */ + + mem_set(dp->fn, ' ', 11); + i = b = 0; ni = 8; + for (;;) { + wc = lfn[si++]; /* Get an LFN character */ + if (wc == 0) break; /* Break on end of the LFN */ + if (wc == ' ' || (wc == '.' && si != di)) { /* Remove embedded spaces and dots */ + cf |= NS_LOSS | NS_LFN; + continue; + } + + if (i >= ni || si == di) { /* End of field? */ + if (ni == 11) { /* Name extension overflow? */ + cf |= NS_LOSS | NS_LFN; + break; + } + if (si != di) cf |= NS_LOSS | NS_LFN; /* Name body overflow? */ + if (si > di) break; /* No name extension? */ + si = di; i = 8; ni = 11; b <<= 2; /* Enter name extension */ + continue; + } + + if (wc >= 0x80) { /* Is this a non-ASCII character? */ + cf |= NS_LFN; /* LFN entry needs to be created */ +#if FF_CODE_PAGE == 0 + if (ExCvt) { /* At SBCS */ + wc = ff_uni2oem(wc, CODEPAGE); /* Unicode ==> ANSI/OEM code */ + if (wc & 0x80) wc = ExCvt[wc & 0x7F]; /* Convert extended character to upper (SBCS) */ + } else { /* At DBCS */ + wc = ff_uni2oem(ff_wtoupper(wc), CODEPAGE); /* Unicode ==> Upper convert ==> ANSI/OEM code */ + } +#elif FF_CODE_PAGE < 900 /* SBCS cfg */ + wc = ff_uni2oem(wc, CODEPAGE); /* Unicode ==> ANSI/OEM code */ + if (wc & 0x80) wc = ExCvt[wc & 0x7F]; /* Convert extended character to upper (SBCS) */ +#else /* DBCS cfg */ + wc = ff_uni2oem(ff_wtoupper(wc), CODEPAGE); /* Unicode ==> Upper convert ==> ANSI/OEM code */ +#endif + } + + if (wc >= 0x100) { /* Is this a DBC? */ + if (i >= ni - 1) { /* Field overflow? */ + cf |= NS_LOSS | NS_LFN; + i = ni; continue; /* Next field */ + } + dp->fn[i++] = (BYTE)(wc >> 8); /* Put 1st byte */ + } else { /* SBC */ + if (wc == 0 || chk_chr("+,;=[]", wc)) { /* Replace illegal characters for SFN if needed */ + wc = '_'; cf |= NS_LOSS | NS_LFN;/* Lossy conversion */ + } else { + if (IsUpper(wc)) { /* ASCII upper case? */ + b |= 2; + } + if (IsLower(wc)) { /* ASCII lower case? */ + b |= 1; wc -= 0x20; + } + } + } + dp->fn[i++] = (BYTE)wc; + } + + if (dp->fn[0] == DDEM) dp->fn[0] = RDDEM; /* If the first character collides with DDEM, replace it with RDDEM */ + + if (ni == 8) b <<= 2; /* Shift capital flags if no extension */ + if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) cf |= NS_LFN; /* LFN entry needs to be created if composite capitals */ + if (!(cf & NS_LFN)) { /* When LFN is in 8.3 format without extended character, NT flags are created */ + if (b & 0x01) cf |= NS_EXT; /* NT flag (Extension has small capital letters only) */ + if (b & 0x04) cf |= NS_BODY; /* NT flag (Body has small capital letters only) */ + } + + dp->fn[NSFLAG] = cf; /* SFN is created into dp->fn[] */ + + return FR_OK; + + +#else /* FF_USE_LFN : Non-LFN configuration */ + BYTE c, d, *sfn; + UINT ni, si, i; + const char *p; + + /* Create file name in directory form */ + p = *path; sfn = dp->fn; + mem_set(sfn, ' ', 11); + si = i = 0; ni = 8; +#if FF_FS_RPATH != 0 + if (p[si] == '.') { /* Is this a dot entry? */ + for (;;) { + c = (BYTE)p[si++]; + if (c != '.' || si >= 3) break; + sfn[i++] = c; + } + if (c != '/' && c != '\\' && c > ' ') return FR_INVALID_NAME; + *path = p + si; /* Return pointer to the next segment */ + sfn[NSFLAG] = (c <= ' ') ? NS_LAST | NS_DOT : NS_DOT; /* Set last segment flag if end of the path */ + return FR_OK; + } +#endif + for (;;) { + c = (BYTE)p[si++]; /* Get a byte */ + if (c <= ' ') break; /* Break if end of the path name */ + if (c == '/' || c == '\\') { /* Break if a separator is found */ + while (p[si] == '/' || p[si] == '\\') si++; /* Skip duplicated separator if exist */ + break; + } + if (c == '.' || i >= ni) { /* End of body or field overflow? */ + if (ni == 11 || c != '.') return FR_INVALID_NAME; /* Field overflow or invalid dot? */ + i = 8; ni = 11; /* Enter file extension field */ + continue; + } +#if FF_CODE_PAGE == 0 + if (ExCvt && c >= 0x80) { /* Is SBC extended character? */ + c = ExCvt[c & 0x7F]; /* To upper SBC extended character */ + } +#elif FF_CODE_PAGE < 900 + if (c >= 0x80) { /* Is SBC extended character? */ + c = ExCvt[c & 0x7F]; /* To upper SBC extended character */ + } +#endif + if (dbc_1st(c)) { /* Check if it is a DBC 1st byte */ + d = (BYTE)p[si++]; /* Get 2nd byte */ + if (!dbc_2nd(d) || i >= ni - 1) return FR_INVALID_NAME; /* Reject invalid DBC */ + sfn[i++] = c; + sfn[i++] = d; + } else { /* SBC */ + if (chk_chr("\"*+,:;<=>\?[]|\x7F", c)) return FR_INVALID_NAME; /* Reject illegal chrs for SFN */ + if (IsLower(c)) c -= 0x20; /* To upper */ + sfn[i++] = c; + } + } + *path = p + si; /* Return pointer to the next segment */ + if (i == 0) return FR_INVALID_NAME; /* Reject nul string */ + + if (sfn[0] == DDEM) sfn[0] = RDDEM; /* If the first character collides with DDEM, replace it with RDDEM */ + sfn[NSFLAG] = (c <= ' ') ? NS_LAST : 0; /* Set last segment flag if end of the path */ + + return FR_OK; +#endif /* FF_USE_LFN */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* Follow a file path */ +/*-----------------------------------------------------------------------*/ + +static FRESULT follow_path ( /* FR_OK(0): successful, !=0: error code */ + DIR* dp, /* Directory object to return last directory and found object */ + const TCHAR* path /* Full-path string to find a file or directory */ +) +{ + FRESULT res; + BYTE ns; + FATFS *fs = dp->obj.fs; + + +#if FF_FS_RPATH != 0 + if (*path != '/' && *path != '\\') { /* Without heading separator */ + dp->obj.sclust = fs->cdir; /* Start from current directory */ + } else +#endif + { /* With heading separator */ + while (*path == '/' || *path == '\\') path++; /* Strip heading separator */ + dp->obj.sclust = 0; /* Start from root directory */ + } +#if FF_FS_EXFAT + dp->obj.n_frag = 0; /* Invalidate last fragment counter of the object */ +#if FF_FS_RPATH != 0 + if (fs->fs_type == FS_EXFAT && dp->obj.sclust) { /* exFAT: Retrieve the sub-directory's status */ + DIR dj; + + dp->obj.c_scl = fs->cdc_scl; + dp->obj.c_size = fs->cdc_size; + dp->obj.c_ofs = fs->cdc_ofs; + res = load_obj_xdir(&dj, &dp->obj); + if (res != FR_OK) return res; + dp->obj.objsize = ld_dword(fs->dirbuf + XDIR_FileSize); + dp->obj.stat = fs->dirbuf[XDIR_GenFlags] & 2; + } +#endif +#endif + + if ((UINT)*path < ' ') { /* Null path name is the origin directory itself */ + dp->fn[NSFLAG] = NS_NONAME; + res = dir_sdi(dp, 0); + + } else { /* Follow path */ + for (;;) { + res = create_name(dp, &path); /* Get a segment name of the path */ + if (res != FR_OK) break; + res = dir_find(dp); /* Find an object with the segment name */ + ns = dp->fn[NSFLAG]; + if (res != FR_OK) { /* Failed to find the object */ + if (res == FR_NO_FILE) { /* Object is not found */ + if (FF_FS_RPATH && (ns & NS_DOT)) { /* If dot entry is not exist, stay there */ + if (!(ns & NS_LAST)) continue; /* Continue to follow if not last segment */ + dp->fn[NSFLAG] = NS_NONAME; + res = FR_OK; + } else { /* Could not find the object */ + if (!(ns & NS_LAST)) res = FR_NO_PATH; /* Adjust error code if not last segment */ + } + } + break; + } + if (ns & NS_LAST) break; /* Last segment matched. Function completed. */ + /* Get into the sub-directory */ + if (!(dp->obj.attr & AM_DIR)) { /* It is not a sub-directory and cannot follow */ + res = FR_NO_PATH; break; + } +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* Save containing directory information for next dir */ + dp->obj.c_scl = dp->obj.sclust; + dp->obj.c_size = ((DWORD)dp->obj.objsize & 0xFFFFFF00) | dp->obj.stat; + dp->obj.c_ofs = dp->blk_ofs; + init_alloc_info(fs, &dp->obj); /* Open next directory */ + } else +#endif + { + dp->obj.sclust = ld_clust(fs, fs->win + dp->dptr % SS(fs)); /* Open next directory */ + } + } + } + + return res; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Get logical drive number from path name */ +/*-----------------------------------------------------------------------*/ + +static int get_ldnumber ( /* Returns logical drive number (-1:invalid drive number or null pointer) */ + const TCHAR** path /* Pointer to pointer to the path name */ +) +{ + const TCHAR *tp, *tt; + TCHAR tc; + int i, vol = -1; +#if FF_STR_VOLUME_ID /* Find string volume ID */ + const char *sp; + char c; +#endif + + tt = tp = *path; + if (!tp) return vol; /* Invalid path name? */ + do tc = *tt++; while ((UINT)tc >= (FF_USE_LFN ? ' ' : '!') && tc != ':'); /* Find a colon in the path */ + + if (tc == ':') { /* DOS/Windows style volume ID? */ + i = FF_VOLUMES; + if (IsDigit(*tp) && tp + 2 == tt) { /* Is there a numeric volume ID + colon? */ + i = (int)*tp - '0'; /* Get the LD number */ + } +#if FF_STR_VOLUME_ID == 1 /* Arbitrary string is enabled */ + else { + i = 0; + do { + sp = VolumeStr[i]; tp = *path; /* This string volume ID and path name */ + do { /* Compare the volume ID with path name */ + c = *sp++; tc = *tp++; + if (IsLower(c)) c -= 0x20; + if (IsLower(tc)) tc -= 0x20; + } while (c && (TCHAR)c == tc); + } while ((c || tp != tt) && ++i < FF_VOLUMES); /* Repeat for each id until pattern match */ + } +#endif + if (i < FF_VOLUMES) { /* If a volume ID is found, get the drive number and strip it */ + vol = i; /* Drive number */ + *path = tt; /* Snip the drive prefix off */ + } + return vol; + } +#if FF_STR_VOLUME_ID == 2 /* Unix style volume ID is enabled */ + if (*tp == '/') { + i = 0; + do { + sp = VolumeStr[i]; tp = *path; /* This string volume ID and path name */ + do { /* Compare the volume ID with path name */ + c = *sp++; tc = *(++tp); + if (IsLower(c)) c -= 0x20; + if (IsLower(tc)) tc -= 0x20; + } while (c && (TCHAR)c == tc); + } while ((c || (tc != '/' && (UINT)tc >= (FF_USE_LFN ? ' ' : '!'))) && ++i < FF_VOLUMES); /* Repeat for each ID until pattern match */ + if (i < FF_VOLUMES) { /* If a volume ID is found, get the drive number and strip it */ + vol = i; /* Drive number */ + *path = tp; /* Snip the drive prefix off */ + return vol; + } + } +#endif + /* No drive prefix is found */ +#if FF_FS_RPATH != 0 + vol = CurrVol; /* Default drive is current drive */ +#else + vol = 0; /* Default drive is 0 */ +#endif + return vol; /* Return the default drive */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* GPT support functions */ +/*-----------------------------------------------------------------------*/ + +#if FF_LBA64 + +/* Calculate CRC32 in byte-by-byte */ + +static DWORD crc32 ( /* Returns next CRC value */ + DWORD crc, /* Current CRC value */ + BYTE d /* A byte to be processed */ +) +{ + BYTE b; + + + for (b = 1; b; b <<= 1) { + crc ^= (d & b) ? 1 : 0; + crc = (crc & 1) ? crc >> 1 ^ 0xEDB88320 : crc >> 1; + } + return crc; +} + + +/* Check validity of GPT header */ + +static int test_gpt_header ( /* 0:Invalid, 1:Valid */ + const BYTE* gpth /* Pointer to the GPT header */ +) +{ + UINT i; + DWORD bcc; + + + if (mem_cmp(gpth + GPTH_Sign, "EFI PART" "\0\0\1\0" "\x5C\0\0", 16)) return 0; /* Check sign, version (1.0) and length (92) */ + for (i = 0, bcc = 0xFFFFFFFF; i < 92; i++) { /* Check header BCC */ + bcc = crc32(bcc, i - GPTH_Bcc < 4 ? 0 : gpth[i]); + } + if (~bcc != ld_dword(gpth + GPTH_Bcc)) return 0; + if (ld_dword(gpth + GPTH_PteSize) != SZ_GPTE) return 0; /* Table entry size (must be SZ_GPTE bytes) */ + if (ld_dword(gpth + GPTH_PtNum) > 128) return 0; /* Table size (must be 128 entries or less) */ + + return 1; +} + +#if !FF_FS_READONLY && FF_USE_MKFS + +/* Generate random value */ +static DWORD make_rand ( + DWORD seed, /* Seed value */ + BYTE* buff, /* Output buffer */ + UINT n /* Data length */ +) +{ + UINT r; + + + if (seed == 0) seed = 1; + do { + for (r = 0; r < 8; r++) seed = seed & 1 ? seed >> 1 ^ 0xA3000000 : seed >> 1; /* Shift 8 bits the 32-bit LFSR */ + *buff++ = (BYTE)seed; + } while (--n); + return seed; +} + +#endif +#endif + + + +/*-----------------------------------------------------------------------*/ +/* Load a sector and check if it is an FAT VBR */ +/*-----------------------------------------------------------------------*/ + +/* Check what the sector is */ + +static UINT check_fs ( /* 0:FAT VBR, 1:exFAT VBR, 2:Not FAT and valid BS, 3:Not FAT and invalid BS, 4:Disk error */ + FATFS* fs, /* Filesystem object */ + LBA_t sect /* Sector to load and check if it is an FAT-VBR or not */ +) +{ + WORD w, sign; + BYTE b; + + + fs->wflag = 0; fs->winsect = (LBA_t)0 - 1; /* Invaidate window */ + if (move_window(fs, sect) != FR_OK) return 4; /* Load the boot sector */ + sign = ld_word(fs->win + BS_55AA); +#if FF_FS_EXFAT + if (sign == 0xAA55 && !mem_cmp(fs->win + BS_JmpBoot, "\xEB\x76\x90" "EXFAT ", 11)) return 1; /* It is an exFAT VBR */ +#endif + b = fs->win[BS_JmpBoot]; + if (b == 0xEB || b == 0xE9 || b == 0xE8) { /* Valid JumpBoot code? (short jump, near jump or near call) */ + if (sign == 0xAA55 && !mem_cmp(fs->win + BS_FilSysType32, "FAT32 ", 8)) return 0; /* It is an FAT32 VBR */ + /* FAT volumes formatted with early MS-DOS lack boot signature and FAT string, so that we need to identify the FAT VBR without them. */ + w = ld_word(fs->win + BPB_BytsPerSec); + if ((w & (w - 1)) == 0 && w >= FF_MIN_SS && w <= FF_MAX_SS) { /* Properness of sector size */ + b = fs->win[BPB_SecPerClus]; + if (b != 0 && (b & (b - 1)) == 0 /* Properness of cluster size */ + && (fs->win[BPB_NumFATs] == 1 || fs->win[BPB_NumFATs] == 2) /* Properness of number of FATs */ + && ld_word(fs->win + BPB_RootEntCnt) != 0 /* Properness of root entry count */ + && ld_word(fs->win + BPB_FATSz16) != 0) { /* Properness of FAT size */ + return 0; /* Sector can be presumed an FAT VBR */ + } + } + } + return sign == 0xAA55 ? 2 : 3; /* Not an FAT VBR (valid or invalid BS) */ +} + + +/* Find an FAT volume */ +/* (It supports only generic partitioning rules, MBR, GPT and SFD) */ + +static UINT find_volume ( /* Returns BS status found in the hosting drive */ + FATFS* fs, /* Filesystem object */ + UINT part /* Partition to fined = 0:auto, 1..:forced */ +) +{ + UINT fmt, i; + DWORD mbr_pt[4]; + + + fmt = check_fs(fs, 0); /* Load sector 0 and check if it is an FAT VBR as SFD */ + if (fmt != 2 && (fmt >= 3 || part == 0)) return fmt; /* Returns if it is a FAT VBR as auto scan, not a BS or disk error */ + + /* Sector 0 is not an FAT VBR or forced partition number wants a partition */ + +#if FF_LBA64 + if (fs->win[MBR_Table + PTE_System] == 0xEE) { /* GPT protective MBR? */ + DWORD n_ent, v_ent, ofs; + QWORD pt_lba; + + if (move_window(fs, 1) != FR_OK) return 4; /* Load GPT header sector (next to MBR) */ + if (!test_gpt_header(fs->win)) return 3; /* Check if GPT header is valid */ + n_ent = ld_dword(fs->win + GPTH_PtNum); /* Number of entries */ + pt_lba = ld_qword(fs->win + GPTH_PtOfs); /* Table location */ + for (v_ent = i = 0; i < n_ent; i++) { /* Find FAT partition */ + if (move_window(fs, pt_lba + i * SZ_GPTE / SS(fs)) != FR_OK) return 4; /* PT sector */ + ofs = i * SZ_GPTE % SS(fs); /* Offset in the sector */ + if (!mem_cmp(fs->win + ofs + GPTE_PtGuid, GUID_MS_Basic, 16)) { /* MS basic data partition? */ + v_ent++; + fmt = check_fs(fs, ld_qword(fs->win + ofs + GPTE_FstLba)); /* Load VBR and check status */ + if (part == 0 && fmt <= 1) return fmt; /* Auto search (valid FAT volume found first) */ + if (part != 0 && v_ent == part) return fmt; /* Forced partition order (regardless of it is valid or not) */ + } + } + return 3; /* Not found */ + } +#endif + if (FF_MULTI_PARTITION && part > 4) return 3; /* MBR has 4 partitions max */ + for (i = 0; i < 4; i++) { /* Load partition offset in the MBR */ + mbr_pt[i] = ld_dword(fs->win + MBR_Table + i * SZ_PTE + PTE_StLba); + } + i = part ? part - 1 : 0; /* Table index to find first */ + do { /* Find an FAT volume */ + fmt = mbr_pt[i] ? check_fs(fs, mbr_pt[i]) : 3; /* Check if the partition is FAT */ + } while (part == 0 && fmt >= 2 && ++i < 4); + return fmt; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Determine logical drive number and mount the volume if needed */ +/*-----------------------------------------------------------------------*/ + +static FRESULT mount_volume ( /* FR_OK(0): successful, !=0: an error occurred */ + const TCHAR** path, /* Pointer to pointer to the path name (drive number) */ + FATFS** rfs, /* Pointer to pointer to the found filesystem object */ + BYTE mode /* !=0: Check write protection for write access */ +) +{ + int vol; + DSTATUS stat; + LBA_t bsect; + DWORD tsect, sysect, fasize, nclst, szbfat; + WORD nrsv; + FATFS *fs; + UINT fmt; + + + /* Get logical drive number */ + *rfs = 0; + vol = get_ldnumber(path); + if (vol < 0) return FR_INVALID_DRIVE; + + /* Check if the filesystem object is valid or not */ + fs = FatFs[vol]; /* Get pointer to the filesystem object */ + if (!fs) return FR_NOT_ENABLED; /* Is the filesystem object available? */ +#if FF_FS_REENTRANT + if (!lock_fs(fs)) return FR_TIMEOUT; /* Lock the volume */ +#endif + *rfs = fs; /* Return pointer to the filesystem object */ + + mode &= (BYTE)~FA_READ; /* Desired access mode, write access or not */ + if (fs->fs_type != 0) { /* If the volume has been mounted */ + stat = disk_status(fs->pdrv); + if (!(stat & STA_NOINIT)) { /* and the physical drive is kept initialized */ + if (!FF_FS_READONLY && mode && (stat & STA_PROTECT)) { /* Check write protection if needed */ + return FR_WRITE_PROTECTED; + } + return FR_OK; /* The filesystem object is already valid */ + } + } + + /* The filesystem object is not valid. */ + /* Following code attempts to mount the volume. (find a FAT volume, analyze the BPB and initialize the filesystem object) */ + + fs->fs_type = 0; /* Clear the filesystem object */ + fs->pdrv = LD2PD(vol); /* Volume hosting physical drive */ + stat = disk_initialize(fs->pdrv); /* Initialize the physical drive */ + if (stat & STA_NOINIT) { /* Check if the initialization succeeded */ + return FR_NOT_READY; /* Failed to initialize due to no medium or hard error */ + } + if (!FF_FS_READONLY && mode && (stat & STA_PROTECT)) { /* Check disk write protection if needed */ + return FR_WRITE_PROTECTED; + } +#if FF_MAX_SS != FF_MIN_SS /* Get sector size (multiple sector size cfg only) */ + if (disk_ioctl(fs->pdrv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK) return FR_DISK_ERR; + if (SS(fs) > FF_MAX_SS || SS(fs) < FF_MIN_SS || (SS(fs) & (SS(fs) - 1))) return FR_DISK_ERR; +#endif + + /* Find an FAT volume on the drive */ + fmt = find_volume(fs, LD2PT(vol)); + if (fmt == 4) return FR_DISK_ERR; /* An error occured in the disk I/O layer */ + if (fmt >= 2) return FR_NO_FILESYSTEM; /* No FAT volume is found */ + bsect = fs->winsect; /* Volume location */ + + /* An FAT volume is found (bsect). Following code initializes the filesystem object */ + +#if FF_FS_EXFAT + if (fmt == 1) { + QWORD maxlba; + DWORD so, cv, bcl, i; + + for (i = BPB_ZeroedEx; i < BPB_ZeroedEx + 53 && fs->win[i] == 0; i++) ; /* Check zero filler */ + if (i < BPB_ZeroedEx + 53) return FR_NO_FILESYSTEM; + + if (ld_word(fs->win + BPB_FSVerEx) != 0x100) return FR_NO_FILESYSTEM; /* Check exFAT version (must be version 1.0) */ + + if (1 << fs->win[BPB_BytsPerSecEx] != SS(fs)) { /* (BPB_BytsPerSecEx must be equal to the physical sector size) */ + return FR_NO_FILESYSTEM; + } + + maxlba = ld_qword(fs->win + BPB_TotSecEx) + bsect; /* Last LBA + 1 of the volume */ + if (!FF_LBA64 && maxlba >= 0x100000000) return FR_NO_FILESYSTEM; /* (It cannot be handled in 32-bit LBA) */ + + fs->fsize = ld_dword(fs->win + BPB_FatSzEx); /* Number of sectors per FAT */ + + fs->n_fats = fs->win[BPB_NumFATsEx]; /* Number of FATs */ + if (fs->n_fats != 1) return FR_NO_FILESYSTEM; /* (Supports only 1 FAT) */ + + fs->csize = 1 << fs->win[BPB_SecPerClusEx]; /* Cluster size */ + if (fs->csize == 0) return FR_NO_FILESYSTEM; /* (Must be 1..32768) */ + + nclst = ld_dword(fs->win + BPB_NumClusEx); /* Number of clusters */ + if (nclst > MAX_EXFAT) return FR_NO_FILESYSTEM; /* (Too many clusters) */ + fs->n_fatent = nclst + 2; + + /* Boundaries and Limits */ + fs->volbase = bsect; + fs->database = bsect + ld_dword(fs->win + BPB_DataOfsEx); + fs->fatbase = bsect + ld_dword(fs->win + BPB_FatOfsEx); + if (maxlba < (QWORD)fs->database + nclst * fs->csize) return FR_NO_FILESYSTEM; /* (Volume size must not be smaller than the size requiered) */ + fs->dirbase = ld_dword(fs->win + BPB_RootClusEx); + + /* Get bitmap location and check if it is contiguous (implementation assumption) */ + so = i = 0; + for (;;) { /* Find the bitmap entry in the root directory (in only first cluster) */ + if (i == 0) { + if (so >= fs->csize) return FR_NO_FILESYSTEM; /* Not found? */ + if (move_window(fs, clst2sect(fs, (DWORD)fs->dirbase) + so) != FR_OK) return FR_DISK_ERR; + so++; + } + if (fs->win[i] == ET_BITMAP) break; /* Is it a bitmap entry? */ + i = (i + SZDIRE) % SS(fs); /* Next entry */ + } + bcl = ld_dword(fs->win + i + 20); /* Bitmap cluster */ + if (bcl < 2 || bcl >= fs->n_fatent) return FR_NO_FILESYSTEM; + fs->bitbase = fs->database + fs->csize * (bcl - 2); /* Bitmap sector */ + for (;;) { /* Check if bitmap is contiguous */ + if (move_window(fs, fs->fatbase + bcl / (SS(fs) / 4)) != FR_OK) return FR_DISK_ERR; + cv = ld_dword(fs->win + bcl % (SS(fs) / 4) * 4); + if (cv == 0xFFFFFFFF) break; /* Last link? */ + if (cv != ++bcl) return FR_NO_FILESYSTEM; /* Fragmented? */ + } + +#if !FF_FS_READONLY + fs->last_clst = fs->free_clst = 0xFFFFFFFF; /* Initialize cluster allocation information */ +#endif + fmt = FS_EXFAT; /* FAT sub-type */ + } else +#endif /* FF_FS_EXFAT */ + { + if (ld_word(fs->win + BPB_BytsPerSec) != SS(fs)) return FR_NO_FILESYSTEM; /* (BPB_BytsPerSec must be equal to the physical sector size) */ + + fasize = ld_word(fs->win + BPB_FATSz16); /* Number of sectors per FAT */ + if (fasize == 0) fasize = ld_dword(fs->win + BPB_FATSz32); + fs->fsize = fasize; + + fs->n_fats = fs->win[BPB_NumFATs]; /* Number of FATs */ + if (fs->n_fats != 1 && fs->n_fats != 2) return FR_NO_FILESYSTEM; /* (Must be 1 or 2) */ + fasize *= fs->n_fats; /* Number of sectors for FAT area */ + + fs->csize = fs->win[BPB_SecPerClus]; /* Cluster size */ + if (fs->csize == 0 || (fs->csize & (fs->csize - 1))) return FR_NO_FILESYSTEM; /* (Must be power of 2) */ + + fs->n_rootdir = ld_word(fs->win + BPB_RootEntCnt); /* Number of root directory entries */ + if (fs->n_rootdir % (SS(fs) / SZDIRE)) return FR_NO_FILESYSTEM; /* (Must be sector aligned) */ + + tsect = ld_word(fs->win + BPB_TotSec16); /* Number of sectors on the volume */ + if (tsect == 0) tsect = ld_dword(fs->win + BPB_TotSec32); + + nrsv = ld_word(fs->win + BPB_RsvdSecCnt); /* Number of reserved sectors */ + if (nrsv == 0) return FR_NO_FILESYSTEM; /* (Must not be 0) */ + + /* Determine the FAT sub type */ + sysect = nrsv + fasize + fs->n_rootdir / (SS(fs) / SZDIRE); /* RSV + FAT + DIR */ + if (tsect < sysect) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ + nclst = (tsect - sysect) / fs->csize; /* Number of clusters */ + if (nclst == 0) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ + fmt = 0; + if (nclst <= MAX_FAT32) fmt = FS_FAT32; + if (nclst <= MAX_FAT16) fmt = FS_FAT16; + if (nclst <= MAX_FAT12) fmt = FS_FAT12; + if (fmt == 0) return FR_NO_FILESYSTEM; + + /* Boundaries and Limits */ + fs->n_fatent = nclst + 2; /* Number of FAT entries */ + fs->volbase = bsect; /* Volume start sector */ + fs->fatbase = bsect + nrsv; /* FAT start sector */ + fs->database = bsect + sysect; /* Data start sector */ + if (fmt == FS_FAT32) { + if (ld_word(fs->win + BPB_FSVer32) != 0) return FR_NO_FILESYSTEM; /* (Must be FAT32 revision 0.0) */ + if (fs->n_rootdir != 0) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */ + fs->dirbase = ld_dword(fs->win + BPB_RootClus32); /* Root directory start cluster */ + szbfat = fs->n_fatent * 4; /* (Needed FAT size) */ + } else { + if (fs->n_rootdir == 0) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must not be 0) */ + fs->dirbase = fs->fatbase + fasize; /* Root directory start sector */ + szbfat = (fmt == FS_FAT16) ? /* (Needed FAT size) */ + fs->n_fatent * 2 : fs->n_fatent * 3 / 2 + (fs->n_fatent & 1); + } + if (fs->fsize < (szbfat + (SS(fs) - 1)) / SS(fs)) return FR_NO_FILESYSTEM; /* (BPB_FATSz must not be less than the size needed) */ + +#if !FF_FS_READONLY + /* Get FSInfo if available */ + fs->last_clst = fs->free_clst = 0xFFFFFFFF; /* Initialize cluster allocation information */ + fs->fsi_flag = 0x80; +#if (FF_FS_NOFSINFO & 3) != 3 + if (fmt == FS_FAT32 /* Allow to update FSInfo only if BPB_FSInfo32 == 1 */ + && ld_word(fs->win + BPB_FSInfo32) == 1 + && move_window(fs, bsect + 1) == FR_OK) + { + fs->fsi_flag = 0; + if (ld_word(fs->win + BS_55AA) == 0xAA55 /* Load FSInfo data if available */ + && ld_dword(fs->win + FSI_LeadSig) == 0x41615252 + && ld_dword(fs->win + FSI_StrucSig) == 0x61417272) + { +#if (FF_FS_NOFSINFO & 1) == 0 + fs->free_clst = ld_dword(fs->win + FSI_Free_Count); +#endif +#if (FF_FS_NOFSINFO & 2) == 0 + fs->last_clst = ld_dword(fs->win + FSI_Nxt_Free); +#endif + } + } +#endif /* (FF_FS_NOFSINFO & 3) != 3 */ +#endif /* !FF_FS_READONLY */ + } + + fs->fs_type = (BYTE)fmt;/* FAT sub-type */ + fs->id = ++Fsid; /* Volume mount ID */ +#if FF_USE_LFN == 1 + fs->lfnbuf = LfnBuf; /* Static LFN working buffer */ +#if FF_FS_EXFAT + fs->dirbuf = DirBuf; /* Static directory block scratchpad buuffer */ +#endif +#endif +#if FF_FS_RPATH != 0 + fs->cdir = 0; /* Initialize current directory */ +#endif +#if FF_FS_LOCK != 0 /* Clear file lock semaphores */ + clear_lock(fs); +#endif + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Check if the file/directory object is valid or not */ +/*-----------------------------------------------------------------------*/ + +static FRESULT validate ( /* Returns FR_OK or FR_INVALID_OBJECT */ + FFOBJID* obj, /* Pointer to the FFOBJID, the 1st member in the FIL/DIR object, to check validity */ + FATFS** rfs /* Pointer to pointer to the owner filesystem object to return */ +) +{ + FRESULT res = FR_INVALID_OBJECT; + + + if (obj && obj->fs && obj->fs->fs_type && obj->id == obj->fs->id) { /* Test if the object is valid */ +#if FF_FS_REENTRANT + if (lock_fs(obj->fs)) { /* Obtain the filesystem object */ + if (!(disk_status(obj->fs->pdrv) & STA_NOINIT)) { /* Test if the phsical drive is kept initialized */ + res = FR_OK; + } else { + unlock_fs(obj->fs, FR_OK); + } + } else { + res = FR_TIMEOUT; + } +#else + if (!(disk_status(obj->fs->pdrv) & STA_NOINIT)) { /* Test if the phsical drive is kept initialized */ + res = FR_OK; + } +#endif + } + *rfs = (res == FR_OK) ? obj->fs : 0; /* Corresponding filesystem object */ + return res; +} + + + + +/*--------------------------------------------------------------------------- + + Public Functions (FatFs API) + +----------------------------------------------------------------------------*/ + + + +/*-----------------------------------------------------------------------*/ +/* Mount/Unmount a Logical Drive */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_mount ( + FATFS* fs, /* Pointer to the filesystem object (NULL:unmount)*/ + const TCHAR* path, /* Logical drive number to be mounted/unmounted */ + BYTE opt /* Mode option 0:Do not mount (delayed mount), 1:Mount immediately */ +) +{ + FATFS *cfs; + int vol; + FRESULT res; + const TCHAR *rp = path; + + + /* Get logical drive number */ + vol = get_ldnumber(&rp); + if (vol < 0) return FR_INVALID_DRIVE; + cfs = FatFs[vol]; /* Pointer to fs object */ + + if (cfs) { +#if FF_FS_LOCK != 0 + clear_lock(cfs); +#endif +#if FF_FS_REENTRANT /* Discard sync object of the current volume */ + if (!ff_del_syncobj(cfs->sobj)) return FR_INT_ERR; +#endif + cfs->fs_type = 0; /* Clear old fs object */ + } + + if (fs) { + fs->fs_type = 0; /* Clear new fs object */ +#if FF_FS_REENTRANT /* Create sync object for the new volume */ + if (!ff_cre_syncobj((BYTE)vol, &fs->sobj)) return FR_INT_ERR; +#endif + } + FatFs[vol] = fs; /* Register new fs object */ + + if (opt == 0) return FR_OK; /* Do not mount now, it will be mounted later */ + + res = mount_volume(&path, &fs, 0); /* Force mounted the volume */ + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Open or Create a File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_open ( + FIL* fp, /* Pointer to the blank file object */ + const TCHAR* path, /* Pointer to the file name */ + BYTE mode /* Access mode and file open mode flags */ +) +{ + FRESULT res; + DIR dj; + FATFS *fs; +#if !FF_FS_READONLY + DWORD cl, bcs, clst, tm; + LBA_t sc; + FSIZE_t ofs; +#endif + DEF_NAMBUF + + + if (!fp) return FR_INVALID_OBJECT; + + /* Get logical drive number */ + mode &= FF_FS_READONLY ? FA_READ : FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_CREATE_NEW | FA_OPEN_ALWAYS | FA_OPEN_APPEND; + res = mount_volume(&path, &fs, mode); + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&dj, path); /* Follow the file path */ +#if !FF_FS_READONLY /* Read/Write configuration */ + if (res == FR_OK) { + if (dj.fn[NSFLAG] & NS_NONAME) { /* Origin directory itself? */ + res = FR_INVALID_NAME; + } +#if FF_FS_LOCK != 0 + else { + res = chk_lock(&dj, (mode & ~FA_READ) ? 1 : 0); /* Check if the file can be used */ + } +#endif + } + /* Create or Open a file */ + if (mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) { + if (res != FR_OK) { /* No file, create new */ + if (res == FR_NO_FILE) { /* There is no file to open, create a new entry */ +#if FF_FS_LOCK != 0 + res = enq_lock() ? dir_register(&dj) : FR_TOO_MANY_OPEN_FILES; +#else + res = dir_register(&dj); +#endif + } + mode |= FA_CREATE_ALWAYS; /* File is created */ + } + else { /* Any object with the same name is already existing */ + if (dj.obj.attr & (AM_RDO | AM_DIR)) { /* Cannot overwrite it (R/O or DIR) */ + res = FR_DENIED; + } else { + if (mode & FA_CREATE_NEW) res = FR_EXIST; /* Cannot create as new file */ + } + } + if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate the file if overwrite mode */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + /* Get current allocation info */ + fp->obj.fs = fs; + init_alloc_info(fs, &fp->obj); + /* Set directory entry block initial state */ + mem_set(fs->dirbuf + 2, 0, 30); /* Clear 85 entry except for NumSec */ + mem_set(fs->dirbuf + 38, 0, 26); /* Clear C0 entry except for NumName and NameHash */ + fs->dirbuf[XDIR_Attr] = AM_ARC; + st_dword(fs->dirbuf + XDIR_CrtTime, GET_FATTIME()); + fs->dirbuf[XDIR_GenFlags] = 1; + res = store_xdir(&dj); + if (res == FR_OK && fp->obj.sclust != 0) { /* Remove the cluster chain if exist */ + res = remove_chain(&fp->obj, fp->obj.sclust, 0); + fs->last_clst = fp->obj.sclust - 1; /* Reuse the cluster hole */ + } + } else +#endif + { + /* Set directory entry initial state */ + tm = GET_FATTIME(); /* Set created time */ + st_dword(dj.dir + DIR_CrtTime, tm); + st_dword(dj.dir + DIR_ModTime, tm); + cl = ld_clust(fs, dj.dir); /* Get current cluster chain */ + dj.dir[DIR_Attr] = AM_ARC; /* Reset attribute */ + st_clust(fs, dj.dir, 0); /* Reset file allocation info */ + st_dword(dj.dir + DIR_FileSize, 0); + fs->wflag = 1; + if (cl != 0) { /* Remove the cluster chain if exist */ + sc = fs->winsect; + res = remove_chain(&dj.obj, cl, 0); + if (res == FR_OK) { + res = move_window(fs, sc); + fs->last_clst = cl - 1; /* Reuse the cluster hole */ + } + } + } + } + } + else { /* Open an existing file */ + if (res == FR_OK) { /* Is the object exsiting? */ + if (dj.obj.attr & AM_DIR) { /* File open against a directory */ + res = FR_NO_FILE; + } else { + if ((mode & FA_WRITE) && (dj.obj.attr & AM_RDO)) { /* Write mode open against R/O file */ + res = FR_DENIED; + } + } + } + } + if (res == FR_OK) { + if (mode & FA_CREATE_ALWAYS) mode |= FA_MODIFIED; /* Set file change flag if created or overwritten */ + fp->dir_sect = fs->winsect; /* Pointer to the directory entry */ + fp->dir_ptr = dj.dir; +#if FF_FS_LOCK != 0 + fp->obj.lockid = inc_lock(&dj, (mode & ~FA_READ) ? 1 : 0); /* Lock the file for this session */ + if (fp->obj.lockid == 0) res = FR_INT_ERR; +#endif + } +#else /* R/O configuration */ + if (res == FR_OK) { + if (dj.fn[NSFLAG] & NS_NONAME) { /* Is it origin directory itself? */ + res = FR_INVALID_NAME; + } else { + if (dj.obj.attr & AM_DIR) { /* Is it a directory? */ + res = FR_NO_FILE; + } + } + } +#endif + + if (res == FR_OK) { +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + fp->obj.c_scl = dj.obj.sclust; /* Get containing directory info */ + fp->obj.c_size = ((DWORD)dj.obj.objsize & 0xFFFFFF00) | dj.obj.stat; + fp->obj.c_ofs = dj.blk_ofs; + init_alloc_info(fs, &fp->obj); + } else +#endif + { + fp->obj.sclust = ld_clust(fs, dj.dir); /* Get object allocation info */ + fp->obj.objsize = ld_dword(dj.dir + DIR_FileSize); + } +#if FF_USE_FASTSEEK + fp->cltbl = 0; /* Disable fast seek mode */ +#endif + fp->obj.fs = fs; /* Validate the file object */ + fp->obj.id = fs->id; + fp->flag = mode; /* Set file access mode */ + fp->err = 0; /* Clear error flag */ + fp->sect = 0; /* Invalidate current data sector */ + fp->fptr = 0; /* Set file pointer top of the file */ +#if !FF_FS_READONLY +#if !FF_FS_TINY + mem_set(fp->buf, 0, sizeof fp->buf); /* Clear sector buffer */ +#endif + if ((mode & FA_SEEKEND) && fp->obj.objsize > 0) { /* Seek to end of file if FA_OPEN_APPEND is specified */ + fp->fptr = fp->obj.objsize; /* Offset to seek */ + bcs = (DWORD)fs->csize * SS(fs); /* Cluster size in byte */ + clst = fp->obj.sclust; /* Follow the cluster chain */ + for (ofs = fp->obj.objsize; res == FR_OK && ofs > bcs; ofs -= bcs) { + clst = get_fat(&fp->obj, clst); + if (clst <= 1) res = FR_INT_ERR; + if (clst == 0xFFFFFFFF) res = FR_DISK_ERR; + } + fp->clust = clst; + if (res == FR_OK && ofs % SS(fs)) { /* Fill sector buffer if not on the sector boundary */ + sc = clst2sect(fs, clst); + if (sc == 0) { + res = FR_INT_ERR; + } else { + fp->sect = sc + (DWORD)(ofs / SS(fs)); +#if !FF_FS_TINY + if (disk_read(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) res = FR_DISK_ERR; +#endif + } + } + } +#endif + } + + FREE_NAMBUF(); + } + + if (res != FR_OK) fp->obj.fs = 0; /* Invalidate file object on error */ + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Read File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_read ( + FIL* fp, /* Pointer to the file object */ + void* buff, /* Pointer to data buffer */ + UINT btr, /* Number of bytes to read */ + UINT* br /* Pointer to number of bytes read */ +) +{ + FRESULT res; + FATFS *fs; + DWORD clst; + LBA_t sect; + FSIZE_t remain; + UINT rcnt, cc, csect; + BYTE *rbuff = (BYTE*)buff; + + + *br = 0; /* Clear read byte counter */ + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res); /* Check validity */ + if (!(fp->flag & FA_READ)) LEAVE_FF(fs, FR_DENIED); /* Check access mode */ + remain = fp->obj.objsize - fp->fptr; + if (btr > remain) btr = (UINT)remain; /* Truncate btr by remaining bytes */ + + for ( ; btr; /* Repeat until btr bytes read */ + btr -= rcnt, *br += rcnt, rbuff += rcnt, fp->fptr += rcnt) { + if (fp->fptr % SS(fs) == 0) { /* On the sector boundary? */ + csect = (UINT)(fp->fptr / SS(fs) & (fs->csize - 1)); /* Sector offset in the cluster */ + if (csect == 0) { /* On the cluster boundary? */ + if (fp->fptr == 0) { /* On the top of the file? */ + clst = fp->obj.sclust; /* Follow cluster chain from the origin */ + } else { /* Middle or end of the file */ +#if FF_USE_FASTSEEK + if (fp->cltbl) { + clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */ + } else +#endif + { + clst = get_fat(&fp->obj, fp->clust); /* Follow cluster chain on the FAT */ + } + } + if (clst < 2) ABORT(fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR); + fp->clust = clst; /* Update current cluster */ + } + sect = clst2sect(fs, fp->clust); /* Get current sector */ + if (sect == 0) ABORT(fs, FR_INT_ERR); + sect += csect; + cc = btr / SS(fs); /* When remaining bytes >= sector size, */ + if (cc > 0) { /* Read maximum contiguous sectors directly */ + if (csect + cc > fs->csize) { /* Clip at cluster boundary */ + cc = fs->csize - csect; + } + if (disk_read(fs->pdrv, rbuff, sect, cc) != RES_OK) ABORT(fs, FR_DISK_ERR); +#if !FF_FS_READONLY && FF_FS_MINIMIZE <= 2 /* Replace one of the read sectors with cached data if it contains a dirty sector */ +#if FF_FS_TINY + if (fs->wflag && fs->winsect - sect < cc) { + mem_cpy(rbuff + ((fs->winsect - sect) * SS(fs)), fs->win, SS(fs)); + } +#else + if ((fp->flag & FA_DIRTY) && fp->sect - sect < cc) { + mem_cpy(rbuff + ((fp->sect - sect) * SS(fs)), fp->buf, SS(fs)); + } +#endif +#endif + rcnt = SS(fs) * cc; /* Number of bytes transferred */ + continue; + } +#if !FF_FS_TINY + if (fp->sect != sect) { /* Load data sector if not in cache */ +#if !FF_FS_READONLY + if (fp->flag & FA_DIRTY) { /* Write-back dirty sector cache */ + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif + if (disk_read(fs->pdrv, fp->buf, sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); /* Fill sector cache */ + } +#endif + fp->sect = sect; + } + rcnt = SS(fs) - (UINT)fp->fptr % SS(fs); /* Number of bytes remains in the sector */ + if (rcnt > btr) rcnt = btr; /* Clip it by btr if needed */ +#if FF_FS_TINY + if (move_window(fs, fp->sect) != FR_OK) ABORT(fs, FR_DISK_ERR); /* Move sector window */ + mem_cpy(rbuff, fs->win + fp->fptr % SS(fs), rcnt); /* Extract partial sector */ +#else + mem_cpy(rbuff, fp->buf + fp->fptr % SS(fs), rcnt); /* Extract partial sector */ +#endif + } + + LEAVE_FF(fs, FR_OK); +} + + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Write File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_write ( + FIL* fp, /* Pointer to the file object */ + const void* buff, /* Pointer to the data to be written */ + UINT btw, /* Number of bytes to write */ + UINT* bw /* Pointer to number of bytes written */ +) +{ + FRESULT res; + FATFS *fs; + DWORD clst; + LBA_t sect; + UINT wcnt, cc, csect; + const BYTE *wbuff = (const BYTE*)buff; + + + *bw = 0; /* Clear write byte counter */ + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res); /* Check validity */ + if (!(fp->flag & FA_WRITE)) LEAVE_FF(fs, FR_DENIED); /* Check access mode */ + + /* Check fptr wrap-around (file size cannot reach 4 GiB at FAT volume) */ + if ((!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) && (DWORD)(fp->fptr + btw) < (DWORD)fp->fptr) { + btw = (UINT)(0xFFFFFFFF - (DWORD)fp->fptr); + } + + for ( ; btw; /* Repeat until all data written */ + btw -= wcnt, *bw += wcnt, wbuff += wcnt, fp->fptr += wcnt, fp->obj.objsize = (fp->fptr > fp->obj.objsize) ? fp->fptr : fp->obj.objsize) { + if (fp->fptr % SS(fs) == 0) { /* On the sector boundary? */ + csect = (UINT)(fp->fptr / SS(fs)) & (fs->csize - 1); /* Sector offset in the cluster */ + if (csect == 0) { /* On the cluster boundary? */ + if (fp->fptr == 0) { /* On the top of the file? */ + clst = fp->obj.sclust; /* Follow from the origin */ + if (clst == 0) { /* If no cluster is allocated, */ + clst = create_chain(&fp->obj, 0); /* create a new cluster chain */ + } + } else { /* On the middle or end of the file */ +#if FF_USE_FASTSEEK + if (fp->cltbl) { + clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */ + } else +#endif + { + clst = create_chain(&fp->obj, fp->clust); /* Follow or stretch cluster chain on the FAT */ + } + } + if (clst == 0) break; /* Could not allocate a new cluster (disk full) */ + if (clst == 1) ABORT(fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR); + fp->clust = clst; /* Update current cluster */ + if (fp->obj.sclust == 0) fp->obj.sclust = clst; /* Set start cluster if the first write */ + } +#if FF_FS_TINY + if (fs->winsect == fp->sect && sync_window(fs) != FR_OK) ABORT(fs, FR_DISK_ERR); /* Write-back sector cache */ +#else + if (fp->flag & FA_DIRTY) { /* Write-back sector cache */ + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif + sect = clst2sect(fs, fp->clust); /* Get current sector */ + if (sect == 0) ABORT(fs, FR_INT_ERR); + sect += csect; + cc = btw / SS(fs); /* When remaining bytes >= sector size, */ + if (cc > 0) { /* Write maximum contiguous sectors directly */ + if (csect + cc > fs->csize) { /* Clip at cluster boundary */ + cc = fs->csize - csect; + } + if (disk_write(fs->pdrv, wbuff, sect, cc) != RES_OK) ABORT(fs, FR_DISK_ERR); +#if FF_FS_MINIMIZE <= 2 +#if FF_FS_TINY + if (fs->winsect - sect < cc) { /* Refill sector cache if it gets invalidated by the direct write */ + mem_cpy(fs->win, wbuff + ((fs->winsect - sect) * SS(fs)), SS(fs)); + fs->wflag = 0; + } +#else + if (fp->sect - sect < cc) { /* Refill sector cache if it gets invalidated by the direct write */ + mem_cpy(fp->buf, wbuff + ((fp->sect - sect) * SS(fs)), SS(fs)); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif +#endif + wcnt = SS(fs) * cc; /* Number of bytes transferred */ + continue; + } +#if FF_FS_TINY + if (fp->fptr >= fp->obj.objsize) { /* Avoid silly cache filling on the growing edge */ + if (sync_window(fs) != FR_OK) ABORT(fs, FR_DISK_ERR); + fs->winsect = sect; + } +#else + if (fp->sect != sect && /* Fill sector cache with file data */ + fp->fptr < fp->obj.objsize && + disk_read(fs->pdrv, fp->buf, sect, 1) != RES_OK) { + ABORT(fs, FR_DISK_ERR); + } +#endif + fp->sect = sect; + } + wcnt = SS(fs) - (UINT)fp->fptr % SS(fs); /* Number of bytes remains in the sector */ + if (wcnt > btw) wcnt = btw; /* Clip it by btw if needed */ +#if FF_FS_TINY + if (move_window(fs, fp->sect) != FR_OK) ABORT(fs, FR_DISK_ERR); /* Move sector window */ + mem_cpy(fs->win + fp->fptr % SS(fs), wbuff, wcnt); /* Fit data to the sector */ + fs->wflag = 1; +#else + mem_cpy(fp->buf + fp->fptr % SS(fs), wbuff, wcnt); /* Fit data to the sector */ + fp->flag |= FA_DIRTY; +#endif + } + + fp->flag |= FA_MODIFIED; /* Set file change flag */ + + LEAVE_FF(fs, FR_OK); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Synchronize the File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_sync ( + FIL* fp /* Pointer to the file object */ +) +{ + FRESULT res; + FATFS *fs; + DWORD tm; + BYTE *dir; + + + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res == FR_OK) { + if (fp->flag & FA_MODIFIED) { /* Is there any change to the file? */ +#if !FF_FS_TINY + if (fp->flag & FA_DIRTY) { /* Write-back cached data if needed */ + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) LEAVE_FF(fs, FR_DISK_ERR); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif + /* Update the directory entry */ + tm = GET_FATTIME(); /* Modified time */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + res = fill_first_frag(&fp->obj); /* Fill first fragment on the FAT if needed */ + if (res == FR_OK) { + res = fill_last_frag(&fp->obj, fp->clust, 0xFFFFFFFF); /* Fill last fragment on the FAT if needed */ + } + if (res == FR_OK) { + DIR dj; + DEF_NAMBUF + + INIT_NAMBUF(fs); + res = load_obj_xdir(&dj, &fp->obj); /* Load directory entry block */ + if (res == FR_OK) { + fs->dirbuf[XDIR_Attr] |= AM_ARC; /* Set archive attribute to indicate that the file has been changed */ + fs->dirbuf[XDIR_GenFlags] = fp->obj.stat | 1; /* Update file allocation information */ + st_dword(fs->dirbuf + XDIR_FstClus, fp->obj.sclust); /* Update start cluster */ + st_qword(fs->dirbuf + XDIR_FileSize, fp->obj.objsize); /* Update file size */ + st_qword(fs->dirbuf + XDIR_ValidFileSize, fp->obj.objsize); /* (FatFs does not support Valid File Size feature) */ + st_dword(fs->dirbuf + XDIR_ModTime, tm); /* Update modified time */ + fs->dirbuf[XDIR_ModTime10] = 0; + st_dword(fs->dirbuf + XDIR_AccTime, 0); + res = store_xdir(&dj); /* Restore it to the directory */ + if (res == FR_OK) { + res = sync_fs(fs); + fp->flag &= (BYTE)~FA_MODIFIED; + } + } + FREE_NAMBUF(); + } + } else +#endif + { + res = move_window(fs, fp->dir_sect); + if (res == FR_OK) { + dir = fp->dir_ptr; + dir[DIR_Attr] |= AM_ARC; /* Set archive attribute to indicate that the file has been changed */ + st_clust(fp->obj.fs, dir, fp->obj.sclust); /* Update file allocation information */ + st_dword(dir + DIR_FileSize, (DWORD)fp->obj.objsize); /* Update file size */ + st_dword(dir + DIR_ModTime, tm); /* Update modified time */ + st_word(dir + DIR_LstAccDate, 0); + fs->wflag = 1; + res = sync_fs(fs); /* Restore it to the directory */ + fp->flag &= (BYTE)~FA_MODIFIED; + } + } + } + } + + LEAVE_FF(fs, res); +} + +#endif /* !FF_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* Close File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_close ( + FIL* fp /* Pointer to the file object to be closed */ +) +{ + FRESULT res; + FATFS *fs; + +#if !FF_FS_READONLY + res = f_sync(fp); /* Flush cached data */ + if (res == FR_OK) +#endif + { + res = validate(&fp->obj, &fs); /* Lock volume */ + if (res == FR_OK) { +#if FF_FS_LOCK != 0 + res = dec_lock(fp->obj.lockid); /* Decrement file open counter */ + if (res == FR_OK) fp->obj.fs = 0; /* Invalidate file object */ +#else + fp->obj.fs = 0; /* Invalidate file object */ +#endif +#if FF_FS_REENTRANT + unlock_fs(fs, FR_OK); /* Unlock volume */ +#endif + } + } + return res; +} + + + + +#if FF_FS_RPATH >= 1 +/*-----------------------------------------------------------------------*/ +/* Change Current Directory or Current Drive, Get Current Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_chdrive ( + const TCHAR* path /* Drive number to set */ +) +{ + int vol; + + + /* Get logical drive number */ + vol = get_ldnumber(&path); + if (vol < 0) return FR_INVALID_DRIVE; + CurrVol = (BYTE)vol; /* Set it as current volume */ + + return FR_OK; +} + + + +FRESULT f_chdir ( + const TCHAR* path /* Pointer to the directory path */ +) +{ +#if FF_STR_VOLUME_ID == 2 + UINT i; +#endif + FRESULT res; + DIR dj; + FATFS *fs; + DEF_NAMBUF + + + /* Get logical drive */ + res = mount_volume(&path, &fs, 0); + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&dj, path); /* Follow the path */ + if (res == FR_OK) { /* Follow completed */ + if (dj.fn[NSFLAG] & NS_NONAME) { /* Is it the start directory itself? */ + fs->cdir = dj.obj.sclust; +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + fs->cdc_scl = dj.obj.c_scl; + fs->cdc_size = dj.obj.c_size; + fs->cdc_ofs = dj.obj.c_ofs; + } +#endif + } else { + if (dj.obj.attr & AM_DIR) { /* It is a sub-directory */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + fs->cdir = ld_dword(fs->dirbuf + XDIR_FstClus); /* Sub-directory cluster */ + fs->cdc_scl = dj.obj.sclust; /* Save containing directory information */ + fs->cdc_size = ((DWORD)dj.obj.objsize & 0xFFFFFF00) | dj.obj.stat; + fs->cdc_ofs = dj.blk_ofs; + } else +#endif + { + fs->cdir = ld_clust(fs, dj.dir); /* Sub-directory cluster */ + } + } else { + res = FR_NO_PATH; /* Reached but a file */ + } + } + } + FREE_NAMBUF(); + if (res == FR_NO_FILE) res = FR_NO_PATH; +#if FF_STR_VOLUME_ID == 2 /* Also current drive is changed at Unix style volume ID */ + if (res == FR_OK) { + for (i = FF_VOLUMES - 1; i && fs != FatFs[i]; i--) ; /* Set current drive */ + CurrVol = (BYTE)i; + } +#endif + } + + LEAVE_FF(fs, res); +} + + +#if FF_FS_RPATH >= 2 +FRESULT f_getcwd ( + TCHAR* buff, /* Pointer to the directory path */ + UINT len /* Size of buff in unit of TCHAR */ +) +{ + FRESULT res; + DIR dj; + FATFS *fs; + UINT i, n; + DWORD ccl; + TCHAR *tp = buff; +#if FF_VOLUMES >= 2 + UINT vl; +#if FF_STR_VOLUME_ID + const char *vp; +#endif +#endif + FILINFO fno; + DEF_NAMBUF + + + /* Get logical drive */ + buff[0] = 0; /* Set null string to get current volume */ + res = mount_volume((const TCHAR**)&buff, &fs, 0); /* Get current volume */ + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + + /* Follow parent directories and create the path */ + i = len; /* Bottom of buffer (directory stack base) */ + if (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) { /* (Cannot do getcwd on exFAT and returns root path) */ + dj.obj.sclust = fs->cdir; /* Start to follow upper directory from current directory */ + while ((ccl = dj.obj.sclust) != 0) { /* Repeat while current directory is a sub-directory */ + res = dir_sdi(&dj, 1 * SZDIRE); /* Get parent directory */ + if (res != FR_OK) break; + res = move_window(fs, dj.sect); + if (res != FR_OK) break; + dj.obj.sclust = ld_clust(fs, dj.dir); /* Goto parent directory */ + res = dir_sdi(&dj, 0); + if (res != FR_OK) break; + do { /* Find the entry links to the child directory */ + res = DIR_READ_FILE(&dj); + if (res != FR_OK) break; + if (ccl == ld_clust(fs, dj.dir)) break; /* Found the entry */ + res = dir_next(&dj, 0); + } while (res == FR_OK); + if (res == FR_NO_FILE) res = FR_INT_ERR;/* It cannot be 'not found'. */ + if (res != FR_OK) break; + get_fileinfo(&dj, &fno); /* Get the directory name and push it to the buffer */ + for (n = 0; fno.fname[n]; n++) ; /* Name length */ + if (i < n + 1) { /* Insufficient space to store the path name? */ + res = FR_NOT_ENOUGH_CORE; break; + } + while (n) buff[--i] = fno.fname[--n]; /* Stack the name */ + buff[--i] = '/'; + } + } + if (res == FR_OK) { + if (i == len) buff[--i] = '/'; /* Is it the root-directory? */ +#if FF_VOLUMES >= 2 /* Put drive prefix */ + vl = 0; +#if FF_STR_VOLUME_ID >= 1 /* String volume ID */ + for (n = 0, vp = (const char*)VolumeStr[CurrVol]; vp[n]; n++) ; + if (i >= n + 2) { + if (FF_STR_VOLUME_ID == 2) *tp++ = (TCHAR)'/'; + for (vl = 0; vl < n; *tp++ = (TCHAR)vp[vl], vl++) ; + if (FF_STR_VOLUME_ID == 1) *tp++ = (TCHAR)':'; + vl++; + } +#else /* Numeric volume ID */ + if (i >= 3) { + *tp++ = (TCHAR)'0' + CurrVol; + *tp++ = (TCHAR)':'; + vl = 2; + } +#endif + if (vl == 0) res = FR_NOT_ENOUGH_CORE; +#endif + /* Add current directory path */ + if (res == FR_OK) { + do *tp++ = buff[i++]; while (i < len); /* Copy stacked path string */ + } + } + FREE_NAMBUF(); + } + + *tp = 0; + LEAVE_FF(fs, res); +} + +#endif /* FF_FS_RPATH >= 2 */ +#endif /* FF_FS_RPATH >= 1 */ + + + +#if FF_FS_MINIMIZE <= 2 +/*-----------------------------------------------------------------------*/ +/* Seek File Read/Write Pointer */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_lseek ( + FIL* fp, /* Pointer to the file object */ + FSIZE_t ofs /* File pointer from top of file */ +) +{ + FRESULT res; + FATFS *fs; + DWORD clst, bcs; + LBA_t nsect; + FSIZE_t ifptr; +#if FF_USE_FASTSEEK + DWORD cl, pcl, ncl, tcl, tlen, ulen, *tbl; + LBA_t dsc; +#endif + + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res == FR_OK) res = (FRESULT)fp->err; +#if FF_FS_EXFAT && !FF_FS_READONLY + if (res == FR_OK && fs->fs_type == FS_EXFAT) { + res = fill_last_frag(&fp->obj, fp->clust, 0xFFFFFFFF); /* Fill last fragment on the FAT if needed */ + } +#endif + if (res != FR_OK) LEAVE_FF(fs, res); + +#if FF_USE_FASTSEEK + if (fp->cltbl) { /* Fast seek */ + if (ofs == CREATE_LINKMAP) { /* Create CLMT */ + tbl = fp->cltbl; + tlen = *tbl++; ulen = 2; /* Given table size and required table size */ + cl = fp->obj.sclust; /* Origin of the chain */ + if (cl != 0) { + do { + /* Get a fragment */ + tcl = cl; ncl = 0; ulen += 2; /* Top, length and used items */ + do { + pcl = cl; ncl++; + cl = get_fat(&fp->obj, cl); + if (cl <= 1) ABORT(fs, FR_INT_ERR); + if (cl == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR); + } while (cl == pcl + 1); + if (ulen <= tlen) { /* Store the length and top of the fragment */ + *tbl++ = ncl; *tbl++ = tcl; + } + } while (cl < fs->n_fatent); /* Repeat until end of chain */ + } + *fp->cltbl = ulen; /* Number of items used */ + if (ulen <= tlen) { + *tbl = 0; /* Terminate table */ + } else { + res = FR_NOT_ENOUGH_CORE; /* Given table size is smaller than required */ + } + } else { /* Fast seek */ + if (ofs > fp->obj.objsize) ofs = fp->obj.objsize; /* Clip offset at the file size */ + fp->fptr = ofs; /* Set file pointer */ + if (ofs > 0) { + fp->clust = clmt_clust(fp, ofs - 1); + dsc = clst2sect(fs, fp->clust); + if (dsc == 0) ABORT(fs, FR_INT_ERR); + dsc += (DWORD)((ofs - 1) / SS(fs)) & (fs->csize - 1); + if (fp->fptr % SS(fs) && dsc != fp->sect) { /* Refill sector cache if needed */ +#if !FF_FS_TINY +#if !FF_FS_READONLY + if (fp->flag & FA_DIRTY) { /* Write-back dirty sector cache */ + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif + if (disk_read(fs->pdrv, fp->buf, dsc, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); /* Load current sector */ +#endif + fp->sect = dsc; + } + } + } + } else +#endif + + /* Normal Seek */ + { +#if FF_FS_EXFAT + if (fs->fs_type != FS_EXFAT && ofs >= 0x100000000) ofs = 0xFFFFFFFF; /* Clip at 4 GiB - 1 if at FATxx */ +#endif + if (ofs > fp->obj.objsize && (FF_FS_READONLY || !(fp->flag & FA_WRITE))) { /* In read-only mode, clip offset with the file size */ + ofs = fp->obj.objsize; + } + ifptr = fp->fptr; + fp->fptr = nsect = 0; + if (ofs > 0) { + bcs = (DWORD)fs->csize * SS(fs); /* Cluster size (byte) */ + if (ifptr > 0 && + (ofs - 1) / bcs >= (ifptr - 1) / bcs) { /* When seek to same or following cluster, */ + fp->fptr = (ifptr - 1) & ~(FSIZE_t)(bcs - 1); /* start from the current cluster */ + ofs -= fp->fptr; + clst = fp->clust; + } else { /* When seek to back cluster, */ + clst = fp->obj.sclust; /* start from the first cluster */ +#if !FF_FS_READONLY + if (clst == 0) { /* If no cluster chain, create a new chain */ + clst = create_chain(&fp->obj, 0); + if (clst == 1) ABORT(fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR); + fp->obj.sclust = clst; + } +#endif + fp->clust = clst; + } + if (clst != 0) { + while (ofs > bcs) { /* Cluster following loop */ + ofs -= bcs; fp->fptr += bcs; +#if !FF_FS_READONLY + if (fp->flag & FA_WRITE) { /* Check if in write mode or not */ + if (FF_FS_EXFAT && fp->fptr > fp->obj.objsize) { /* No FAT chain object needs correct objsize to generate FAT value */ + fp->obj.objsize = fp->fptr; + fp->flag |= FA_MODIFIED; + } + clst = create_chain(&fp->obj, clst); /* Follow chain with forceed stretch */ + if (clst == 0) { /* Clip file size in case of disk full */ + ofs = 0; break; + } + } else +#endif + { + clst = get_fat(&fp->obj, clst); /* Follow cluster chain if not in write mode */ + } + if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR); + if (clst <= 1 || clst >= fs->n_fatent) ABORT(fs, FR_INT_ERR); + fp->clust = clst; + } + fp->fptr += ofs; + if (ofs % SS(fs)) { + nsect = clst2sect(fs, clst); /* Current sector */ + if (nsect == 0) ABORT(fs, FR_INT_ERR); + nsect += (DWORD)(ofs / SS(fs)); + } + } + } + if (!FF_FS_READONLY && fp->fptr > fp->obj.objsize) { /* Set file change flag if the file size is extended */ + fp->obj.objsize = fp->fptr; + fp->flag |= FA_MODIFIED; + } + if (fp->fptr % SS(fs) && nsect != fp->sect) { /* Fill sector cache if needed */ +#if !FF_FS_TINY +#if !FF_FS_READONLY + if (fp->flag & FA_DIRTY) { /* Write-back dirty sector cache */ + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif + if (disk_read(fs->pdrv, fp->buf, nsect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); /* Fill sector cache */ +#endif + fp->sect = nsect; + } + } + + LEAVE_FF(fs, res); +} + + + +#if FF_FS_MINIMIZE <= 1 +/*-----------------------------------------------------------------------*/ +/* Create a Directory Object */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_opendir ( + DIR* dp, /* Pointer to directory object to create */ + const TCHAR* path /* Pointer to the directory path */ +) +{ + FRESULT res; + FATFS *fs; + DEF_NAMBUF + + + if (!dp) return FR_INVALID_OBJECT; + + /* Get logical drive */ + res = mount_volume(&path, &fs, 0); + if (res == FR_OK) { + dp->obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(dp, path); /* Follow the path to the directory */ + if (res == FR_OK) { /* Follow completed */ + if (!(dp->fn[NSFLAG] & NS_NONAME)) { /* It is not the origin directory itself */ + if (dp->obj.attr & AM_DIR) { /* This object is a sub-directory */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + dp->obj.c_scl = dp->obj.sclust; /* Get containing directory inforamation */ + dp->obj.c_size = ((DWORD)dp->obj.objsize & 0xFFFFFF00) | dp->obj.stat; + dp->obj.c_ofs = dp->blk_ofs; + init_alloc_info(fs, &dp->obj); /* Get object allocation info */ + } else +#endif + { + dp->obj.sclust = ld_clust(fs, dp->dir); /* Get object allocation info */ + } + } else { /* This object is a file */ + res = FR_NO_PATH; + } + } + if (res == FR_OK) { + dp->obj.id = fs->id; + res = dir_sdi(dp, 0); /* Rewind directory */ +#if FF_FS_LOCK != 0 + if (res == FR_OK) { + if (dp->obj.sclust != 0) { + dp->obj.lockid = inc_lock(dp, 0); /* Lock the sub directory */ + if (!dp->obj.lockid) res = FR_TOO_MANY_OPEN_FILES; + } else { + dp->obj.lockid = 0; /* Root directory need not to be locked */ + } + } +#endif + } + } + FREE_NAMBUF(); + if (res == FR_NO_FILE) res = FR_NO_PATH; + } + if (res != FR_OK) dp->obj.fs = 0; /* Invalidate the directory object if function faild */ + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Close Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_closedir ( + DIR *dp /* Pointer to the directory object to be closed */ +) +{ + FRESULT res; + FATFS *fs; + + + res = validate(&dp->obj, &fs); /* Check validity of the file object */ + if (res == FR_OK) { +#if FF_FS_LOCK != 0 + if (dp->obj.lockid) res = dec_lock(dp->obj.lockid); /* Decrement sub-directory open counter */ + if (res == FR_OK) dp->obj.fs = 0; /* Invalidate directory object */ +#else + dp->obj.fs = 0; /* Invalidate directory object */ +#endif +#if FF_FS_REENTRANT + unlock_fs(fs, FR_OK); /* Unlock volume */ +#endif + } + return res; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Read Directory Entries in Sequence */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_readdir ( + DIR* dp, /* Pointer to the open directory object */ + FILINFO* fno /* Pointer to file information to return */ +) +{ + FRESULT res; + FATFS *fs; + DEF_NAMBUF + + + res = validate(&dp->obj, &fs); /* Check validity of the directory object */ + if (res == FR_OK) { + if (!fno) { + res = dir_sdi(dp, 0); /* Rewind the directory object */ + } else { + INIT_NAMBUF(fs); + res = DIR_READ_FILE(dp); /* Read an item */ + if (res == FR_NO_FILE) res = FR_OK; /* Ignore end of directory */ + if (res == FR_OK) { /* A valid entry is found */ + get_fileinfo(dp, fno); /* Get the object information */ + res = dir_next(dp, 0); /* Increment index for next */ + if (res == FR_NO_FILE) res = FR_OK; /* Ignore end of directory now */ + } + FREE_NAMBUF(); + } + } + LEAVE_FF(fs, res); +} + + + +#if FF_USE_FIND +/*-----------------------------------------------------------------------*/ +/* Find Next File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_findnext ( + DIR* dp, /* Pointer to the open directory object */ + FILINFO* fno /* Pointer to the file information structure */ +) +{ + FRESULT res; + + + for (;;) { + res = f_readdir(dp, fno); /* Get a directory item */ + if (res != FR_OK || !fno || !fno->fname[0]) break; /* Terminate if any error or end of directory */ + if (pattern_match(dp->pat, fno->fname, 0, FIND_RECURS)) break; /* Test for the file name */ +#if FF_USE_LFN && FF_USE_FIND == 2 + if (pattern_match(dp->pat, fno->altname, 0, FIND_RECURS)) break; /* Test for alternative name if exist */ +#endif + } + return res; +} + + + +/*-----------------------------------------------------------------------*/ +/* Find First File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_findfirst ( + DIR* dp, /* Pointer to the blank directory object */ + FILINFO* fno, /* Pointer to the file information structure */ + const TCHAR* path, /* Pointer to the directory to open */ + const TCHAR* pattern /* Pointer to the matching pattern */ +) +{ + FRESULT res; + + + dp->pat = pattern; /* Save pointer to pattern string */ + res = f_opendir(dp, path); /* Open the target directory */ + if (res == FR_OK) { + res = f_findnext(dp, fno); /* Find the first item */ + } + return res; +} + +#endif /* FF_USE_FIND */ + + + +#if FF_FS_MINIMIZE == 0 +/*-----------------------------------------------------------------------*/ +/* Get File Status */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_stat ( + const TCHAR* path, /* Pointer to the file path */ + FILINFO* fno /* Pointer to file information to return */ +) +{ + FRESULT res; + DIR dj; + DEF_NAMBUF + + + /* Get logical drive */ + res = mount_volume(&path, &dj.obj.fs, 0); + if (res == FR_OK) { + INIT_NAMBUF(dj.obj.fs); + res = follow_path(&dj, path); /* Follow the file path */ + if (res == FR_OK) { /* Follow completed */ + if (dj.fn[NSFLAG] & NS_NONAME) { /* It is origin directory */ + res = FR_INVALID_NAME; + } else { /* Found an object */ + if (fno) get_fileinfo(&dj, fno); + } + } + FREE_NAMBUF(); + } + + LEAVE_FF(dj.obj.fs, res); +} + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Get Number of Free Clusters */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_getfree ( + const TCHAR* path, /* Logical drive number */ + DWORD* nclst, /* Pointer to a variable to return number of free clusters */ + FATFS** fatfs /* Pointer to return pointer to corresponding filesystem object */ +) +{ + FRESULT res; + FATFS *fs; + DWORD nfree, clst, stat; + LBA_t sect; + UINT i; + FFOBJID obj; + + + /* Get logical drive */ + res = mount_volume(&path, &fs, 0); + if (res == FR_OK) { + *fatfs = fs; /* Return ptr to the fs object */ + /* If free_clst is valid, return it without full FAT scan */ + if (fs->free_clst <= fs->n_fatent - 2) { + *nclst = fs->free_clst; + } else { + /* Scan FAT to obtain number of free clusters */ + nfree = 0; + if (fs->fs_type == FS_FAT12) { /* FAT12: Scan bit field FAT entries */ + clst = 2; obj.fs = fs; + do { + stat = get_fat(&obj, clst); + if (stat == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } + if (stat == 1) { res = FR_INT_ERR; break; } + if (stat == 0) nfree++; + } while (++clst < fs->n_fatent); + } else { +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* exFAT: Scan allocation bitmap */ + BYTE bm; + UINT b; + + clst = fs->n_fatent - 2; /* Number of clusters */ + sect = fs->bitbase; /* Bitmap sector */ + i = 0; /* Offset in the sector */ + do { /* Counts numbuer of bits with zero in the bitmap */ + if (i == 0) { + res = move_window(fs, sect++); + if (res != FR_OK) break; + } + for (b = 8, bm = fs->win[i]; b && clst; b--, clst--) { + if (!(bm & 1)) nfree++; + bm >>= 1; + } + i = (i + 1) % SS(fs); + } while (clst); + } else +#endif + { /* FAT16/32: Scan WORD/DWORD FAT entries */ + clst = fs->n_fatent; /* Number of entries */ + sect = fs->fatbase; /* Top of the FAT */ + i = 0; /* Offset in the sector */ + do { /* Counts numbuer of entries with zero in the FAT */ + if (i == 0) { + res = move_window(fs, sect++); + if (res != FR_OK) break; + } + if (fs->fs_type == FS_FAT16) { + if (ld_word(fs->win + i) == 0) nfree++; + i += 2; + } else { + if ((ld_dword(fs->win + i) & 0x0FFFFFFF) == 0) nfree++; + i += 4; + } + i %= SS(fs); + } while (--clst); + } + } + *nclst = nfree; /* Return the free clusters */ + fs->free_clst = nfree; /* Now free_clst is valid */ + fs->fsi_flag |= 1; /* FAT32: FSInfo is to be updated */ + } + } + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Truncate File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_truncate ( + FIL* fp /* Pointer to the file object */ +) +{ + FRESULT res; + FATFS *fs; + DWORD ncl; + + + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res); + if (!(fp->flag & FA_WRITE)) LEAVE_FF(fs, FR_DENIED); /* Check access mode */ + + if (fp->fptr < fp->obj.objsize) { /* Process when fptr is not on the eof */ + if (fp->fptr == 0) { /* When set file size to zero, remove entire cluster chain */ + res = remove_chain(&fp->obj, fp->obj.sclust, 0); + fp->obj.sclust = 0; + } else { /* When truncate a part of the file, remove remaining clusters */ + ncl = get_fat(&fp->obj, fp->clust); + res = FR_OK; + if (ncl == 0xFFFFFFFF) res = FR_DISK_ERR; + if (ncl == 1) res = FR_INT_ERR; + if (res == FR_OK && ncl < fs->n_fatent) { + res = remove_chain(&fp->obj, ncl, fp->clust); + } + } + fp->obj.objsize = fp->fptr; /* Set file size to current read/write point */ + fp->flag |= FA_MODIFIED; +#if !FF_FS_TINY + if (res == FR_OK && (fp->flag & FA_DIRTY)) { + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) { + res = FR_DISK_ERR; + } else { + fp->flag &= (BYTE)~FA_DIRTY; + } + } +#endif + if (res != FR_OK) ABORT(fs, res); + } + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Delete a File/Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_unlink ( + const TCHAR* path /* Pointer to the file or directory path */ +) +{ + FRESULT res; + DIR dj, sdj; + DWORD dclst = 0; + FATFS *fs; +#if FF_FS_EXFAT + FFOBJID obj; +#endif + DEF_NAMBUF + + + /* Get logical drive */ + res = mount_volume(&path, &fs, FA_WRITE); + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&dj, path); /* Follow the file path */ + if (FF_FS_RPATH && res == FR_OK && (dj.fn[NSFLAG] & NS_DOT)) { + res = FR_INVALID_NAME; /* Cannot remove dot entry */ + } +#if FF_FS_LOCK != 0 + if (res == FR_OK) res = chk_lock(&dj, 2); /* Check if it is an open object */ +#endif + if (res == FR_OK) { /* The object is accessible */ + if (dj.fn[NSFLAG] & NS_NONAME) { + res = FR_INVALID_NAME; /* Cannot remove the origin directory */ + } else { + if (dj.obj.attr & AM_RDO) { + res = FR_DENIED; /* Cannot remove R/O object */ + } + } + if (res == FR_OK) { +#if FF_FS_EXFAT + obj.fs = fs; + if (fs->fs_type == FS_EXFAT) { + init_alloc_info(fs, &obj); + dclst = obj.sclust; + } else +#endif + { + dclst = ld_clust(fs, dj.dir); + } + if (dj.obj.attr & AM_DIR) { /* Is it a sub-directory? */ +#if FF_FS_RPATH != 0 + if (dclst == fs->cdir) { /* Is it the current directory? */ + res = FR_DENIED; + } else +#endif + { + sdj.obj.fs = fs; /* Open the sub-directory */ + sdj.obj.sclust = dclst; +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + sdj.obj.objsize = obj.objsize; + sdj.obj.stat = obj.stat; + } +#endif + res = dir_sdi(&sdj, 0); + if (res == FR_OK) { + res = DIR_READ_FILE(&sdj); /* Test if the directory is empty */ + if (res == FR_OK) res = FR_DENIED; /* Not empty? */ + if (res == FR_NO_FILE) res = FR_OK; /* Empty? */ + } + } + } + } + if (res == FR_OK) { + res = dir_remove(&dj); /* Remove the directory entry */ + if (res == FR_OK && dclst != 0) { /* Remove the cluster chain if exist */ +#if FF_FS_EXFAT + res = remove_chain(&obj, dclst, 0); +#else + res = remove_chain(&dj.obj, dclst, 0); +#endif + } + if (res == FR_OK) res = sync_fs(fs); + } + } + FREE_NAMBUF(); + } + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Create a Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_mkdir ( + const TCHAR* path /* Pointer to the directory path */ +) +{ + FRESULT res; + DIR dj; + FFOBJID sobj; + FATFS *fs; + DWORD dcl, pcl, tm; + DEF_NAMBUF + + + res = mount_volume(&path, &fs, FA_WRITE); /* Get logical drive */ + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&dj, path); /* Follow the file path */ + if (res == FR_OK) res = FR_EXIST; /* Name collision? */ + if (FF_FS_RPATH && res == FR_NO_FILE && (dj.fn[NSFLAG] & NS_DOT)) { /* Invalid name? */ + res = FR_INVALID_NAME; + } + if (res == FR_NO_FILE) { /* It is clear to create a new directory */ + sobj.fs = fs; /* New object id to create a new chain */ + dcl = create_chain(&sobj, 0); /* Allocate a cluster for the new directory */ + res = FR_OK; + if (dcl == 0) res = FR_DENIED; /* No space to allocate a new cluster? */ + if (dcl == 1) res = FR_INT_ERR; /* Any insanity? */ + if (dcl == 0xFFFFFFFF) res = FR_DISK_ERR; /* Disk error? */ + tm = GET_FATTIME(); + if (res == FR_OK) { + res = dir_clear(fs, dcl); /* Clean up the new table */ + if (res == FR_OK) { + if (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) { /* Create dot entries (FAT only) */ + mem_set(fs->win + DIR_Name, ' ', 11); /* Create "." entry */ + fs->win[DIR_Name] = '.'; + fs->win[DIR_Attr] = AM_DIR; + st_dword(fs->win + DIR_ModTime, tm); + st_clust(fs, fs->win, dcl); + mem_cpy(fs->win + SZDIRE, fs->win, SZDIRE); /* Create ".." entry */ + fs->win[SZDIRE + 1] = '.'; pcl = dj.obj.sclust; + st_clust(fs, fs->win + SZDIRE, pcl); + fs->wflag = 1; + } + res = dir_register(&dj); /* Register the object to the parent directoy */ + } + } + if (res == FR_OK) { +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* Initialize directory entry block */ + st_dword(fs->dirbuf + XDIR_ModTime, tm); /* Created time */ + st_dword(fs->dirbuf + XDIR_FstClus, dcl); /* Table start cluster */ + st_dword(fs->dirbuf + XDIR_FileSize, (DWORD)fs->csize * SS(fs)); /* Directory size needs to be valid */ + st_dword(fs->dirbuf + XDIR_ValidFileSize, (DWORD)fs->csize * SS(fs)); + fs->dirbuf[XDIR_GenFlags] = 3; /* Initialize the object flag */ + fs->dirbuf[XDIR_Attr] = AM_DIR; /* Attribute */ + res = store_xdir(&dj); + } else +#endif + { + st_dword(dj.dir + DIR_ModTime, tm); /* Created time */ + st_clust(fs, dj.dir, dcl); /* Table start cluster */ + dj.dir[DIR_Attr] = AM_DIR; /* Attribute */ + fs->wflag = 1; + } + if (res == FR_OK) { + res = sync_fs(fs); + } + } else { + remove_chain(&sobj, dcl, 0); /* Could not register, remove the allocated cluster */ + } + } + FREE_NAMBUF(); + } + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Rename a File/Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_rename ( + const TCHAR* path_old, /* Pointer to the object name to be renamed */ + const TCHAR* path_new /* Pointer to the new name */ +) +{ + FRESULT res; + DIR djo, djn; + FATFS *fs; + BYTE buf[FF_FS_EXFAT ? SZDIRE * 2 : SZDIRE], *dir; + LBA_t sect; + DEF_NAMBUF + + + get_ldnumber(&path_new); /* Snip the drive number of new name off */ + res = mount_volume(&path_old, &fs, FA_WRITE); /* Get logical drive of the old object */ + if (res == FR_OK) { + djo.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&djo, path_old); /* Check old object */ + if (res == FR_OK && (djo.fn[NSFLAG] & (NS_DOT | NS_NONAME))) res = FR_INVALID_NAME; /* Check validity of name */ +#if FF_FS_LOCK != 0 + if (res == FR_OK) { + res = chk_lock(&djo, 2); + } +#endif + if (res == FR_OK) { /* Object to be renamed is found */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* At exFAT volume */ + BYTE nf, nn; + WORD nh; + + mem_cpy(buf, fs->dirbuf, SZDIRE * 2); /* Save 85+C0 entry of old object */ + mem_cpy(&djn, &djo, sizeof djo); + res = follow_path(&djn, path_new); /* Make sure if new object name is not in use */ + if (res == FR_OK) { /* Is new name already in use by any other object? */ + res = (djn.obj.sclust == djo.obj.sclust && djn.dptr == djo.dptr) ? FR_NO_FILE : FR_EXIST; + } + if (res == FR_NO_FILE) { /* It is a valid path and no name collision */ + res = dir_register(&djn); /* Register the new entry */ + if (res == FR_OK) { + nf = fs->dirbuf[XDIR_NumSec]; nn = fs->dirbuf[XDIR_NumName]; + nh = ld_word(fs->dirbuf + XDIR_NameHash); + mem_cpy(fs->dirbuf, buf, SZDIRE * 2); /* Restore 85+C0 entry */ + fs->dirbuf[XDIR_NumSec] = nf; fs->dirbuf[XDIR_NumName] = nn; + st_word(fs->dirbuf + XDIR_NameHash, nh); + if (!(fs->dirbuf[XDIR_Attr] & AM_DIR)) fs->dirbuf[XDIR_Attr] |= AM_ARC; /* Set archive attribute if it is a file */ +/* Start of critical section where an interruption can cause a cross-link */ + res = store_xdir(&djn); + } + } + } else +#endif + { /* At FAT/FAT32 volume */ + mem_cpy(buf, djo.dir, SZDIRE); /* Save directory entry of the object */ + mem_cpy(&djn, &djo, sizeof (DIR)); /* Duplicate the directory object */ + res = follow_path(&djn, path_new); /* Make sure if new object name is not in use */ + if (res == FR_OK) { /* Is new name already in use by any other object? */ + res = (djn.obj.sclust == djo.obj.sclust && djn.dptr == djo.dptr) ? FR_NO_FILE : FR_EXIST; + } + if (res == FR_NO_FILE) { /* It is a valid path and no name collision */ + res = dir_register(&djn); /* Register the new entry */ + if (res == FR_OK) { + dir = djn.dir; /* Copy directory entry of the object except name */ + mem_cpy(dir + 13, buf + 13, SZDIRE - 13); + dir[DIR_Attr] = buf[DIR_Attr]; + if (!(dir[DIR_Attr] & AM_DIR)) dir[DIR_Attr] |= AM_ARC; /* Set archive attribute if it is a file */ + fs->wflag = 1; + if ((dir[DIR_Attr] & AM_DIR) && djo.obj.sclust != djn.obj.sclust) { /* Update .. entry in the sub-directory if needed */ + sect = clst2sect(fs, ld_clust(fs, dir)); + if (sect == 0) { + res = FR_INT_ERR; + } else { +/* Start of critical section where an interruption can cause a cross-link */ + res = move_window(fs, sect); + dir = fs->win + SZDIRE * 1; /* Ptr to .. entry */ + if (res == FR_OK && dir[1] == '.') { + st_clust(fs, dir, djn.obj.sclust); + fs->wflag = 1; + } + } + } + } + } + } + if (res == FR_OK) { + res = dir_remove(&djo); /* Remove old entry */ + if (res == FR_OK) { + res = sync_fs(fs); + } + } +/* End of the critical section */ + } + FREE_NAMBUF(); + } + + LEAVE_FF(fs, res); +} + +#endif /* !FF_FS_READONLY */ +#endif /* FF_FS_MINIMIZE == 0 */ +#endif /* FF_FS_MINIMIZE <= 1 */ +#endif /* FF_FS_MINIMIZE <= 2 */ + + + +#if FF_USE_CHMOD && !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Change Attribute */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_chmod ( + const TCHAR* path, /* Pointer to the file path */ + BYTE attr, /* Attribute bits */ + BYTE mask /* Attribute mask to change */ +) +{ + FRESULT res; + DIR dj; + FATFS *fs; + DEF_NAMBUF + + + res = mount_volume(&path, &fs, FA_WRITE); /* Get logical drive */ + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&dj, path); /* Follow the file path */ + if (res == FR_OK && (dj.fn[NSFLAG] & (NS_DOT | NS_NONAME))) res = FR_INVALID_NAME; /* Check object validity */ + if (res == FR_OK) { + mask &= AM_RDO|AM_HID|AM_SYS|AM_ARC; /* Valid attribute mask */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + fs->dirbuf[XDIR_Attr] = (attr & mask) | (fs->dirbuf[XDIR_Attr] & (BYTE)~mask); /* Apply attribute change */ + res = store_xdir(&dj); + } else +#endif + { + dj.dir[DIR_Attr] = (attr & mask) | (dj.dir[DIR_Attr] & (BYTE)~mask); /* Apply attribute change */ + fs->wflag = 1; + } + if (res == FR_OK) { + res = sync_fs(fs); + } + } + FREE_NAMBUF(); + } + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Change Timestamp */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_utime ( + const TCHAR* path, /* Pointer to the file/directory name */ + const FILINFO* fno /* Pointer to the timestamp to be set */ +) +{ + FRESULT res; + DIR dj; + FATFS *fs; + DEF_NAMBUF + + + res = mount_volume(&path, &fs, FA_WRITE); /* Get logical drive */ + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&dj, path); /* Follow the file path */ + if (res == FR_OK && (dj.fn[NSFLAG] & (NS_DOT | NS_NONAME))) res = FR_INVALID_NAME; /* Check object validity */ + if (res == FR_OK) { +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + st_dword(fs->dirbuf + XDIR_ModTime, (DWORD)fno->fdate << 16 | fno->ftime); + res = store_xdir(&dj); + } else +#endif + { + st_dword(dj.dir + DIR_ModTime, (DWORD)fno->fdate << 16 | fno->ftime); + fs->wflag = 1; + } + if (res == FR_OK) { + res = sync_fs(fs); + } + } + FREE_NAMBUF(); + } + + LEAVE_FF(fs, res); +} + +#endif /* FF_USE_CHMOD && !FF_FS_READONLY */ + + + +#if FF_USE_LABEL +/*-----------------------------------------------------------------------*/ +/* Get Volume Label */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_getlabel ( + const TCHAR* path, /* Logical drive number */ + TCHAR* label, /* Buffer to store the volume label */ + DWORD* vsn /* Variable to store the volume serial number */ +) +{ + FRESULT res; + DIR dj; + FATFS *fs; + UINT si, di; + WCHAR wc; + + /* Get logical drive */ + res = mount_volume(&path, &fs, 0); + + /* Get volume label */ + if (res == FR_OK && label) { + dj.obj.fs = fs; dj.obj.sclust = 0; /* Open root directory */ + res = dir_sdi(&dj, 0); + if (res == FR_OK) { + res = DIR_READ_LABEL(&dj); /* Find a volume label entry */ + if (res == FR_OK) { +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + WCHAR hs; + + for (si = di = hs = 0; si < dj.dir[XDIR_NumLabel]; si++) { /* Extract volume label from 83 entry */ + wc = ld_word(dj.dir + XDIR_Label + si * 2); + if (hs == 0 && IsSurrogate(wc)) { /* Is the code a surrogate? */ + hs = wc; continue; + } + wc = put_utf((DWORD)hs << 16 | wc, &label[di], 4); + if (wc == 0) { di = 0; break; } + di += wc; + hs = 0; + } + if (hs != 0) di = 0; /* Broken surrogate pair? */ + label[di] = 0; + } else +#endif + { + si = di = 0; /* Extract volume label from AM_VOL entry */ + while (si < 11) { + wc = dj.dir[si++]; +#if FF_USE_LFN && FF_LFN_UNICODE >= 1 /* Unicode output */ + if (dbc_1st((BYTE)wc) && si < 11) wc = wc << 8 | dj.dir[si++]; /* Is it a DBC? */ + wc = ff_oem2uni(wc, CODEPAGE); /* Convert it into Unicode */ + if (wc != 0) wc = put_utf(wc, &label[di], 4); /* Put it in Unicode */ + if (wc == 0) { di = 0; break; } + di += wc; +#else /* ANSI/OEM output */ + label[di++] = (TCHAR)wc; +#endif + } + do { /* Truncate trailing spaces */ + label[di] = 0; + if (di == 0) break; + } while (label[--di] == ' '); + } + } + } + if (res == FR_NO_FILE) { /* No label entry and return nul string */ + label[0] = 0; + res = FR_OK; + } + } + + /* Get volume serial number */ + if (res == FR_OK && vsn) { + res = move_window(fs, fs->volbase); + if (res == FR_OK) { + switch (fs->fs_type) { + case FS_EXFAT: + di = BPB_VolIDEx; + break; + + case FS_FAT32: + di = BS_VolID32; + break; + + default: + di = BS_VolID; + } + *vsn = ld_dword(fs->win + di); + } + } + + LEAVE_FF(fs, res); +} + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Set Volume Label */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_setlabel ( + const TCHAR* label /* Volume label to set with heading logical drive number */ +) +{ + FRESULT res; + DIR dj; + FATFS *fs; + BYTE dirvn[22]; + UINT di; + WCHAR wc; + static const char badchr[] = "+.,;=[]/\\\"*:<>\?|\x7F"; /* [0..] for FAT, [7..] for exFAT */ +#if FF_USE_LFN + DWORD dc; +#endif + + /* Get logical drive */ + res = mount_volume(&label, &fs, FA_WRITE); + if (res != FR_OK) LEAVE_FF(fs, res); + +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ + mem_set(dirvn, 0, 22); + di = 0; + while ((UINT)*label >= ' ') { /* Create volume label */ + dc = tchar2uni(&label); /* Get a Unicode character */ + if (dc >= 0x10000) { + if (dc == 0xFFFFFFFF || di >= 10) { /* Wrong surrogate or buffer overflow */ + dc = 0; + } else { + st_word(dirvn + di * 2, (WCHAR)(dc >> 16)); di++; + } + } + if (dc == 0 || chk_chr(badchr + 7, (int)dc) || di >= 11) { /* Check validity of the volume label */ + LEAVE_FF(fs, FR_INVALID_NAME); + } + st_word(dirvn + di * 2, (WCHAR)dc); di++; + } + } else +#endif + { /* On the FAT/FAT32 volume */ + mem_set(dirvn, ' ', 11); + di = 0; + while ((UINT)*label >= ' ') { /* Create volume label */ +#if FF_USE_LFN + dc = tchar2uni(&label); + wc = (dc < 0x10000) ? ff_uni2oem(ff_wtoupper(dc), CODEPAGE) : 0; +#else /* ANSI/OEM input */ + wc = (BYTE)*label++; + if (dbc_1st((BYTE)wc)) wc = dbc_2nd((BYTE)*label) ? wc << 8 | (BYTE)*label++ : 0; + if (IsLower(wc)) wc -= 0x20; /* To upper ASCII characters */ +#if FF_CODE_PAGE == 0 + if (ExCvt && wc >= 0x80) wc = ExCvt[wc - 0x80]; /* To upper extended characters (SBCS cfg) */ +#elif FF_CODE_PAGE < 900 + if (wc >= 0x80) wc = ExCvt[wc - 0x80]; /* To upper extended characters (SBCS cfg) */ +#endif +#endif + if (wc == 0 || chk_chr(badchr + 0, (int)wc) || di >= (UINT)((wc >= 0x100) ? 10 : 11)) { /* Reject invalid characters for volume label */ + LEAVE_FF(fs, FR_INVALID_NAME); + } + if (wc >= 0x100) dirvn[di++] = (BYTE)(wc >> 8); + dirvn[di++] = (BYTE)wc; + } + if (dirvn[0] == DDEM) LEAVE_FF(fs, FR_INVALID_NAME); /* Reject illegal name (heading DDEM) */ + while (di && dirvn[di - 1] == ' ') di--; /* Snip trailing spaces */ + } + + /* Set volume label */ + dj.obj.fs = fs; dj.obj.sclust = 0; /* Open root directory */ + res = dir_sdi(&dj, 0); + if (res == FR_OK) { + res = DIR_READ_LABEL(&dj); /* Get volume label entry */ + if (res == FR_OK) { + if (FF_FS_EXFAT && fs->fs_type == FS_EXFAT) { + dj.dir[XDIR_NumLabel] = (BYTE)di; /* Change the volume label */ + mem_cpy(dj.dir + XDIR_Label, dirvn, 22); + } else { + if (di != 0) { + mem_cpy(dj.dir, dirvn, 11); /* Change the volume label */ + } else { + dj.dir[DIR_Name] = DDEM; /* Remove the volume label */ + } + } + fs->wflag = 1; + res = sync_fs(fs); + } else { /* No volume label entry or an error */ + if (res == FR_NO_FILE) { + res = FR_OK; + if (di != 0) { /* Create a volume label entry */ + res = dir_alloc(&dj, 1); /* Allocate an entry */ + if (res == FR_OK) { + mem_set(dj.dir, 0, SZDIRE); /* Clean the entry */ + if (FF_FS_EXFAT && fs->fs_type == FS_EXFAT) { + dj.dir[XDIR_Type] = ET_VLABEL; /* Create volume label entry */ + dj.dir[XDIR_NumLabel] = (BYTE)di; + mem_cpy(dj.dir + XDIR_Label, dirvn, 22); + } else { + dj.dir[DIR_Attr] = AM_VOL; /* Create volume label entry */ + mem_cpy(dj.dir, dirvn, 11); + } + fs->wflag = 1; + res = sync_fs(fs); + } + } + } + } + } + + LEAVE_FF(fs, res); +} + +#endif /* !FF_FS_READONLY */ +#endif /* FF_USE_LABEL */ + + + +#if FF_USE_EXPAND && !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Allocate a Contiguous Blocks to the File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_expand ( + FIL* fp, /* Pointer to the file object */ + FSIZE_t fsz, /* File size to be expanded to */ + BYTE opt /* Operation mode 0:Find and prepare or 1:Find and allocate */ +) +{ + FRESULT res; + FATFS *fs; + DWORD n, clst, stcl, scl, ncl, tcl, lclst; + + + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res); + if (fsz == 0 || fp->obj.objsize != 0 || !(fp->flag & FA_WRITE)) LEAVE_FF(fs, FR_DENIED); +#if FF_FS_EXFAT + if (fs->fs_type != FS_EXFAT && fsz >= 0x100000000) LEAVE_FF(fs, FR_DENIED); /* Check if in size limit */ +#endif + n = (DWORD)fs->csize * SS(fs); /* Cluster size */ + tcl = (DWORD)(fsz / n) + ((fsz & (n - 1)) ? 1 : 0); /* Number of clusters required */ + stcl = fs->last_clst; lclst = 0; + if (stcl < 2 || stcl >= fs->n_fatent) stcl = 2; + +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + scl = find_bitmap(fs, stcl, tcl); /* Find a contiguous cluster block */ + if (scl == 0) res = FR_DENIED; /* No contiguous cluster block was found */ + if (scl == 0xFFFFFFFF) res = FR_DISK_ERR; + if (res == FR_OK) { /* A contiguous free area is found */ + if (opt) { /* Allocate it now */ + res = change_bitmap(fs, scl, tcl, 1); /* Mark the cluster block 'in use' */ + lclst = scl + tcl - 1; + } else { /* Set it as suggested point for next allocation */ + lclst = scl - 1; + } + } + } else +#endif + { + scl = clst = stcl; ncl = 0; + for (;;) { /* Find a contiguous cluster block */ + n = get_fat(&fp->obj, clst); + if (++clst >= fs->n_fatent) clst = 2; + if (n == 1) { res = FR_INT_ERR; break; } + if (n == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } + if (n == 0) { /* Is it a free cluster? */ + if (++ncl == tcl) break; /* Break if a contiguous cluster block is found */ + } else { + scl = clst; ncl = 0; /* Not a free cluster */ + } + if (clst == stcl) { res = FR_DENIED; break; } /* No contiguous cluster? */ + } + if (res == FR_OK) { /* A contiguous free area is found */ + if (opt) { /* Allocate it now */ + for (clst = scl, n = tcl; n; clst++, n--) { /* Create a cluster chain on the FAT */ + res = put_fat(fs, clst, (n == 1) ? 0xFFFFFFFF : clst + 1); + if (res != FR_OK) break; + lclst = clst; + } + } else { /* Set it as suggested point for next allocation */ + lclst = scl - 1; + } + } + } + + if (res == FR_OK) { + fs->last_clst = lclst; /* Set suggested start cluster to start next */ + if (opt) { /* Is it allocated now? */ + fp->obj.sclust = scl; /* Update object allocation information */ + fp->obj.objsize = fsz; + if (FF_FS_EXFAT) fp->obj.stat = 2; /* Set status 'contiguous chain' */ + fp->flag |= FA_MODIFIED; + if (fs->free_clst <= fs->n_fatent - 2) { /* Update FSINFO */ + fs->free_clst -= tcl; + fs->fsi_flag |= 1; + } + } + } + + LEAVE_FF(fs, res); +} + +#endif /* FF_USE_EXPAND && !FF_FS_READONLY */ + + + +#if FF_USE_FORWARD +/*-----------------------------------------------------------------------*/ +/* Forward Data to the Stream Directly */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_forward ( + FIL* fp, /* Pointer to the file object */ + UINT (*func)(const BYTE*,UINT), /* Pointer to the streaming function */ + UINT btf, /* Number of bytes to forward */ + UINT* bf /* Pointer to number of bytes forwarded */ +) +{ + FRESULT res; + FATFS *fs; + DWORD clst; + LBA_t sect; + FSIZE_t remain; + UINT rcnt, csect; + BYTE *dbuf; + + + *bf = 0; /* Clear transfer byte counter */ + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res); + if (!(fp->flag & FA_READ)) LEAVE_FF(fs, FR_DENIED); /* Check access mode */ + + remain = fp->obj.objsize - fp->fptr; + if (btf > remain) btf = (UINT)remain; /* Truncate btf by remaining bytes */ + + for ( ; btf && (*func)(0, 0); /* Repeat until all data transferred or stream goes busy */ + fp->fptr += rcnt, *bf += rcnt, btf -= rcnt) { + csect = (UINT)(fp->fptr / SS(fs) & (fs->csize - 1)); /* Sector offset in the cluster */ + if (fp->fptr % SS(fs) == 0) { /* On the sector boundary? */ + if (csect == 0) { /* On the cluster boundary? */ + clst = (fp->fptr == 0) ? /* On the top of the file? */ + fp->obj.sclust : get_fat(&fp->obj, fp->clust); + if (clst <= 1) ABORT(fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR); + fp->clust = clst; /* Update current cluster */ + } + } + sect = clst2sect(fs, fp->clust); /* Get current data sector */ + if (sect == 0) ABORT(fs, FR_INT_ERR); + sect += csect; +#if FF_FS_TINY + if (move_window(fs, sect) != FR_OK) ABORT(fs, FR_DISK_ERR); /* Move sector window to the file data */ + dbuf = fs->win; +#else + if (fp->sect != sect) { /* Fill sector cache with file data */ +#if !FF_FS_READONLY + if (fp->flag & FA_DIRTY) { /* Write-back dirty sector cache */ + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif + if (disk_read(fs->pdrv, fp->buf, sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); + } + dbuf = fp->buf; +#endif + fp->sect = sect; + rcnt = SS(fs) - (UINT)fp->fptr % SS(fs); /* Number of bytes remains in the sector */ + if (rcnt > btf) rcnt = btf; /* Clip it by btr if needed */ + rcnt = (*func)(dbuf + ((UINT)fp->fptr % SS(fs)), rcnt); /* Forward the file data */ + if (rcnt == 0) ABORT(fs, FR_INT_ERR); + } + + LEAVE_FF(fs, FR_OK); +} +#endif /* FF_USE_FORWARD */ + + + +#if !FF_FS_READONLY && FF_USE_MKFS +/*-----------------------------------------------------------------------*/ +/* Create FAT/exFAT volume */ +/*-----------------------------------------------------------------------*/ + +#define N_SEC_TRACK 63 /* Sectors per track for determination of drive CHS */ +#define GPT_ALIGN 0x100000 /* Alignment of partitions in GPT [byte] (>=128KB) */ +#define GPT_ITEMS 128 /* Number of GPT table size (>=128, sector aligned) */ + + +/* Create partitions on the physical drive in format of MBR or GPT */ + +static FRESULT create_partition ( + BYTE drv, /* Physical drive number */ + const LBA_t plst[], /* Partition list */ + BYTE sys, /* System ID (for only MBR, temp setting) */ + BYTE* buf /* Working buffer for a sector */ +) +{ + UINT i, cy; + LBA_t sz_drv; + DWORD sz_drv32, s_lba32, n_lba32; + BYTE *pte, hd, n_hd, sc, n_sc; + + /* Get drive size */ + if (disk_ioctl(drv, GET_SECTOR_COUNT, &sz_drv) != RES_OK) return FR_DISK_ERR; + +#if FF_LBA64 + if (sz_drv >= FF_MIN_GPT) { /* Create partitions in GPT */ + WORD ss; + UINT sz_pt, pi, si, ofs; + DWORD bcc, rnd, align; + QWORD s_lba64, n_lba64, sz_pool, s_bpt; + static const BYTE gpt_mbr[16] = {0x00, 0x00, 0x02, 0x00, 0xEE, 0xFE, 0xFF, 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}; + +#if FF_MAX_SS != FF_MIN_SS + if (disk_ioctl(drv, GET_SECTOR_SIZE, &ss) != RES_OK) return FR_DISK_ERR; /* Get sector size */ + if (ss > FF_MAX_SS || ss < FF_MIN_SS || (ss & (ss - 1))) return FR_DISK_ERR; +#else + ss = FF_MAX_SS; +#endif + rnd = GET_FATTIME(); /* Random seed */ + align = GPT_ALIGN / ss; /* Partition alignment [sector] */ + sz_pt = GPT_ITEMS * SZ_GPTE / ss; /* Size of PT [sector] */ + s_bpt = sz_drv - sz_pt - 1; /* Backup PT start sector */ + s_lba64 = 2 + sz_pt; /* First allocatable sector */ + sz_pool = s_bpt - s_lba64; /* Size of allocatable area */ + bcc = 0xFFFFFFFF; n_lba64 = 1; + pi = si = 0; /* partition table index, size table index */ + do { + if (pi * SZ_GPTE % ss == 0) mem_set(buf, 0, ss); /* Clean the buffer if needed */ + if (n_lba64 != 0) { /* Is the size table not termintated? */ + s_lba64 = (s_lba64 + align - 1) & ((QWORD)0 - align); /* Align partition start */ + n_lba64 = plst[si++]; /* Get a partition size */ + if (n_lba64 <= 100) { /* Is the size in percentage? */ + n_lba64 = sz_pool * n_lba64 / 100; + n_lba64 = (n_lba64 + align - 1) & ((QWORD)0 - align); /* Align partition end (only if in percentage) */ + } + if (s_lba64 + n_lba64 > s_bpt) { /* Clip at end of the pool */ + n_lba64 = (s_lba64 < s_bpt) ? s_bpt - s_lba64 : 0; + } + } + if (n_lba64 != 0) { /* Add a partition? */ + ofs = pi * SZ_GPTE % ss; + mem_cpy(buf + ofs + GPTE_PtGuid, GUID_MS_Basic, 16); /* Partition GUID (Microsoft Basic Data) */ + rnd = make_rand(rnd, buf + ofs + GPTE_UpGuid, 16); /* Unique partition GUID */ + st_qword(buf + ofs + GPTE_FstLba, s_lba64); /* Partition start LBA */ + st_qword(buf + ofs + GPTE_LstLba, s_lba64 + n_lba64 - 1); /* Partition end LBA */ + s_lba64 += n_lba64; /* Next partition LBA */ + } + if ((pi + 1) * SZ_GPTE % ss == 0) { /* Write the buffer if it is filled up */ + for (i = 0; i < ss; bcc = crc32(bcc, buf[i++])) ; /* Calculate table check sum */ + if (disk_write(drv, buf, 2 + pi * SZ_GPTE / ss, 1) != RES_OK) return FR_DISK_ERR; /* Primary table */ + if (disk_write(drv, buf, s_bpt + pi * SZ_GPTE / ss, 1) != RES_OK) return FR_DISK_ERR; /* Secondary table */ + } + } while (++pi < GPT_ITEMS); + + /* Create primary GPT header */ + mem_set(buf, 0, ss); + mem_cpy(buf + GPTH_Sign, "EFI PART" "\0\0\1\0" "\x5C\0\0", 16); /* Signature, version (1.0) and size (92) */ + st_dword(buf + GPTH_PtBcc, ~bcc); /* Table check sum */ + st_qword(buf + GPTH_CurLba, 1); /* LBA of this header */ + st_qword(buf + GPTH_BakLba, sz_drv - 1); /* LBA of another header */ + st_qword(buf + GPTH_FstLba, 2 + sz_pt); /* LBA of first allocatable sector */ + st_qword(buf + GPTH_LstLba, s_bpt - 1); /* LBA of last allocatable sector */ + st_dword(buf + GPTH_PteSize, SZ_GPTE); /* Size of a table entry */ + st_dword(buf + GPTH_PtNum, GPT_ITEMS); /* Number of table entries */ + st_dword(buf + GPTH_PtOfs, 2); /* LBA of this table */ + rnd = make_rand(rnd, buf + GPTH_DskGuid, 16); /* Disk GUID */ + for (i = 0, bcc= 0xFFFFFFFF; i < 92; bcc = crc32(bcc, buf[i++])) ; /* Calculate header check sum */ + st_dword(buf + GPTH_Bcc, ~bcc); /* Header check sum */ + if (disk_write(drv, buf, 1, 1) != RES_OK) return FR_DISK_ERR; + + /* Create secondary GPT header */ + st_qword(buf + GPTH_CurLba, sz_drv - 1); /* LBA of this header */ + st_qword(buf + GPTH_BakLba, 1); /* LBA of another header */ + st_qword(buf + GPTH_PtOfs, s_bpt); /* LBA of this table */ + st_dword(buf + GPTH_Bcc, 0); + for (i = 0, bcc= 0xFFFFFFFF; i < 92; bcc = crc32(bcc, buf[i++])) ; /* Calculate header check sum */ + st_dword(buf + GPTH_Bcc, ~bcc); /* Header check sum */ + if (disk_write(drv, buf, sz_drv - 1, 1) != RES_OK) return FR_DISK_ERR; + + /* Create protective MBR */ + mem_set(buf, 0, ss); + mem_cpy(buf + MBR_Table, gpt_mbr, 16); /* Create a GPT partition */ + st_word(buf + BS_55AA, 0xAA55); + if (disk_write(drv, buf, 0, 1) != RES_OK) return FR_DISK_ERR; + + } else +#endif + { /* Create partitions in MBR */ + sz_drv32 = (DWORD)sz_drv; + n_sc = N_SEC_TRACK; /* Determine drive CHS without any consideration of the drive geometry */ + for (n_hd = 8; n_hd != 0 && sz_drv32 / n_hd / n_sc > 1024; n_hd *= 2) ; + if (n_hd == 0) n_hd = 255; /* Number of heads needs to be <256 */ + + mem_set(buf, 0, FF_MAX_SS); /* Clear MBR */ + pte = buf + MBR_Table; /* Partition table in the MBR */ + for (i = 0, s_lba32 = n_sc; i < 4 && s_lba32 != 0 && s_lba32 < sz_drv32; i++, s_lba32 += n_lba32) { + n_lba32 = (DWORD)plst[i]; /* Get partition size */ + if (n_lba32 <= 100) n_lba32 = (n_lba32 == 100) ? sz_drv32 : sz_drv32 / 100 * n_lba32; /* Size in percentage? */ + if (s_lba32 + n_lba32 > sz_drv32 || s_lba32 + n_lba32 < s_lba32) n_lba32 = sz_drv32 - s_lba32; /* Clip at drive size */ + if (n_lba32 == 0) break; /* End of table or no sector to allocate? */ + + st_dword(pte + PTE_StLba, s_lba32); /* Start LBA */ + st_dword(pte + PTE_SizLba, n_lba32); /* Number of sectors */ + pte[PTE_System] = sys; /* System type */ + + cy = (UINT)(s_lba32 / n_sc / n_hd); /* Start cylinder */ + hd = (BYTE)(s_lba32 / n_sc % n_hd); /* Start head */ + sc = (BYTE)(s_lba32 % n_sc + 1); /* Start sector */ + pte[PTE_StHead] = hd; + pte[PTE_StSec] = (BYTE)((cy >> 2 & 0xC0) | sc); + pte[PTE_StCyl] = (BYTE)cy; + + cy = (UINT)((s_lba32 + n_lba32 - 1) / n_sc / n_hd); /* End cylinder */ + hd = (BYTE)((s_lba32 + n_lba32 - 1) / n_sc % n_hd); /* End head */ + sc = (BYTE)((s_lba32 + n_lba32 - 1) % n_sc + 1); /* End sector */ + pte[PTE_EdHead] = hd; + pte[PTE_EdSec] = (BYTE)((cy >> 2 & 0xC0) | sc); + pte[PTE_EdCyl] = (BYTE)cy; + + pte += SZ_PTE; /* Next entry */ + } + + st_word(buf + BS_55AA, 0xAA55); /* MBR signature */ + if (disk_write(drv, buf, 0, 1) != RES_OK) return FR_DISK_ERR; /* Write it to the MBR */ + } + + return FR_OK; +} + + + +FRESULT f_mkfs ( + const TCHAR* path, /* Logical drive number */ + const MKFS_PARM* opt, /* Format options */ + void* work, /* Pointer to working buffer (null: use heap memory) */ + UINT len /* Size of working buffer [byte] */ +) +{ + static const WORD cst[] = {1, 4, 16, 64, 256, 512, 0}; /* Cluster size boundary for FAT volume (4Ks unit) */ + static const WORD cst32[] = {1, 2, 4, 8, 16, 32, 0}; /* Cluster size boundary for FAT32 volume (128Ks unit) */ + static const MKFS_PARM defopt = {FM_ANY, 0, 0, 0, 0}; /* Default parameter */ + BYTE fsopt, fsty, sys, *buf, *pte, pdrv, ipart; + WORD ss; /* Sector size */ + DWORD sz_buf, sz_blk, n_clst, pau, nsect, n; + LBA_t sz_vol, b_vol, b_fat, b_data; /* Size of volume, Base LBA of volume, fat, data */ + LBA_t sect, lba[2]; + DWORD sz_rsv, sz_fat, sz_dir, sz_au; /* Size of reserved, fat, dir, data, cluster */ + UINT n_fat, n_root, i; /* Index, Number of FATs and Number of roor dir entries */ + int vol; + DSTATUS ds; + FRESULT fr; + + + /* Check mounted drive and clear work area */ + vol = get_ldnumber(&path); /* Get target logical drive */ + if (vol < 0) return FR_INVALID_DRIVE; + if (FatFs[vol]) FatFs[vol]->fs_type = 0; /* Clear the fs object if mounted */ + pdrv = LD2PD(vol); /* Physical drive */ + ipart = LD2PT(vol); /* Partition (0:create as new, 1..:get from partition table) */ + if (!opt) opt = &defopt; /* Use default parameter if it is not given */ + + /* Get physical drive status (sz_drv, sz_blk, ss) */ + ds = disk_initialize(pdrv); + if (ds & STA_NOINIT) return FR_NOT_READY; + if (ds & STA_PROTECT) return FR_WRITE_PROTECTED; + sz_blk = opt->align; + if (sz_blk == 0 && disk_ioctl(pdrv, GET_BLOCK_SIZE, &sz_blk) != RES_OK) sz_blk = 1; + if (sz_blk == 0 || sz_blk > 0x8000 || (sz_blk & (sz_blk - 1))) sz_blk = 1; +#if FF_MAX_SS != FF_MIN_SS + if (disk_ioctl(pdrv, GET_SECTOR_SIZE, &ss) != RES_OK) return FR_DISK_ERR; + if (ss > FF_MAX_SS || ss < FF_MIN_SS || (ss & (ss - 1))) return FR_DISK_ERR; +#else + ss = FF_MAX_SS; +#endif + /* Options for FAT sub-type and FAT parameters */ + fsopt = opt->fmt & (FM_ANY | FM_SFD); + n_fat = (opt->n_fat >= 1 && opt->n_fat <= 2) ? opt->n_fat : 1; + n_root = (opt->n_root >= 1 && opt->n_root <= 32768 && (opt->n_root % (ss / SZDIRE)) == 0) ? opt->n_root : 512; + sz_au = (opt->au_size <= 0x1000000 && (opt->au_size & (opt->au_size - 1)) == 0) ? opt->au_size : 0; + sz_au /= ss; /* Byte --> Sector */ + + /* Get working buffer */ + sz_buf = len / ss; /* Size of working buffer [sector] */ + if (sz_buf == 0) return FR_NOT_ENOUGH_CORE; + buf = (BYTE*)work; /* Working buffer */ +#if FF_USE_LFN == 3 + if (!buf) buf = ff_memalloc(sz_buf * ss); /* Use heap memory for working buffer */ +#endif + if (!buf) return FR_NOT_ENOUGH_CORE; + + /* Determine where the volume to be located (b_vol, sz_vol) */ + b_vol = sz_vol = 0; + if (FF_MULTI_PARTITION && ipart != 0) { /* Is the volume associated with any specific partition? */ + /* Get partition location from the existing partition table */ + if (disk_read(pdrv, buf, 0, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Load MBR */ + if (ld_word(buf + BS_55AA) != 0xAA55) LEAVE_MKFS(FR_MKFS_ABORTED); /* Check if MBR is valid */ +#if FF_LBA64 + if (buf[MBR_Table + PTE_System] == 0xEE) { /* GPT protective MBR? */ + DWORD n_ent, ofs; + QWORD pt_lba; + + /* Get the partition location from GPT */ + if (disk_read(pdrv, buf, 1, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Load GPT header sector (next to MBR) */ + if (!test_gpt_header(buf)) LEAVE_MKFS(FR_MKFS_ABORTED); /* Check if GPT header is valid */ + n_ent = ld_dword(buf + GPTH_PtNum); /* Number of entries */ + pt_lba = ld_qword(buf + GPTH_PtOfs); /* Table start sector */ + ofs = i = 0; + while (n_ent) { /* Find MS Basic partition with order of ipart */ + if (ofs == 0 && disk_read(pdrv, buf, pt_lba++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Get PT sector */ + if (!mem_cmp(buf + ofs + GPTE_PtGuid, GUID_MS_Basic, 16) && ++i == ipart) { /* MS basic data partition? */ + b_vol = ld_qword(buf + ofs + GPTE_FstLba); + sz_vol = ld_qword(buf + ofs + GPTE_LstLba) - b_vol + 1; + break; + } + n_ent--; ofs = (ofs + SZ_GPTE) % ss; /* Next entry */ + } + if (n_ent == 0) LEAVE_MKFS(FR_MKFS_ABORTED); /* Partition not found */ + fsopt |= 0x80; /* Partitioning is in GPT */ + } else +#endif + { /* Get the partition location from MBR partition table */ + pte = buf + (MBR_Table + (ipart - 1) * SZ_PTE); + if (ipart > 4 || pte[PTE_System] == 0) LEAVE_MKFS(FR_MKFS_ABORTED); /* No partition? */ + b_vol = ld_dword(pte + PTE_StLba); /* Get volume start sector */ + sz_vol = ld_dword(pte + PTE_SizLba); /* Get volume size */ + } + } else { /* The volume is associated with a physical drive */ + if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_vol) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + if (!(fsopt & FM_SFD)) { /* To be partitioned? */ + /* Create a single-partition on the drive in this function */ +#if FF_LBA64 + if (sz_vol >= FF_MIN_GPT) { /* Which partition type to create, MBR or GPT? */ + fsopt |= 0x80; /* Partitioning is in GPT */ + b_vol = GPT_ALIGN / ss; sz_vol -= b_vol + GPT_ITEMS * SZ_GPTE / ss + 1; /* Estimated partition offset and size */ + } else +#endif + { /* Partitioning is in MBR */ + if (sz_vol > N_SEC_TRACK) { + b_vol = N_SEC_TRACK; sz_vol -= b_vol; /* Estimated partition offset and size */ + } + } + } + } + if (sz_vol < 128) LEAVE_MKFS(FR_MKFS_ABORTED); /* Check if volume size is >=128s */ + + /* Now start to create a FAT volume at b_vol and sz_vol */ + + do { /* Pre-determine the FAT type */ + if (FF_FS_EXFAT && (fsopt & FM_EXFAT)) { /* exFAT possible? */ + if ((fsopt & FM_ANY) == FM_EXFAT || sz_vol >= 0x4000000 || sz_au > 128) { /* exFAT only, vol >= 64MS or sz_au > 128S ? */ + fsty = FS_EXFAT; break; + } + } +#if FF_LBA64 + if (sz_vol >= 0x100000000) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too large volume for FAT/FAT32 */ +#endif + if (sz_au > 128) sz_au = 128; /* Invalid AU for FAT/FAT32? */ + if (fsopt & FM_FAT32) { /* FAT32 possible? */ + if (!(fsopt & FM_FAT)) { /* no-FAT? */ + fsty = FS_FAT32; break; + } + } + if (!(fsopt & FM_FAT)) LEAVE_MKFS(FR_INVALID_PARAMETER); /* no-FAT? */ + fsty = FS_FAT16; + } while (0); + +#if FF_FS_EXFAT + if (fsty == FS_EXFAT) { /* Create an exFAT volume */ + DWORD szb_bit, szb_case, sum, nbit, clu, clen[3]; + WCHAR ch, si; + UINT j, st; + + if (sz_vol < 0x1000) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too small volume for exFAT? */ +#if FF_USE_TRIM + lba[0] = b_vol; lba[1] = b_vol + sz_vol - 1; /* Inform storage device that the volume area may be erased */ + disk_ioctl(pdrv, CTRL_TRIM, lba); +#endif + /* Determine FAT location, data location and number of clusters */ + if (sz_au == 0) { /* AU auto-selection */ + sz_au = 8; + if (sz_vol >= 0x80000) sz_au = 64; /* >= 512Ks */ + if (sz_vol >= 0x4000000) sz_au = 256; /* >= 64Ms */ + } + b_fat = b_vol + 32; /* FAT start at offset 32 */ + sz_fat = (DWORD)((sz_vol / sz_au + 2) * 4 + ss - 1) / ss; /* Number of FAT sectors */ + b_data = (b_fat + sz_fat + sz_blk - 1) & ~((LBA_t)sz_blk - 1); /* Align data area to the erase block boundary */ + if (b_data - b_vol >= sz_vol / 2) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too small volume? */ + n_clst = (DWORD)(sz_vol - (b_data - b_vol)) / sz_au; /* Number of clusters */ + if (n_clst <16) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too few clusters? */ + if (n_clst > MAX_EXFAT) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too many clusters? */ + + szb_bit = (n_clst + 7) / 8; /* Size of allocation bitmap */ + clen[0] = (szb_bit + sz_au * ss - 1) / (sz_au * ss); /* Number of allocation bitmap clusters */ + + /* Create a compressed up-case table */ + sect = b_data + sz_au * clen[0]; /* Table start sector */ + sum = 0; /* Table checksum to be stored in the 82 entry */ + st = 0; si = 0; i = 0; j = 0; szb_case = 0; + do { + switch (st) { + case 0: + ch = (WCHAR)ff_wtoupper(si); /* Get an up-case char */ + if (ch != si) { + si++; break; /* Store the up-case char if exist */ + } + for (j = 1; (WCHAR)(si + j) && (WCHAR)(si + j) == ff_wtoupper((WCHAR)(si + j)); j++) ; /* Get run length of no-case block */ + if (j >= 128) { + ch = 0xFFFF; st = 2; break; /* Compress the no-case block if run is >= 128 chars */ + } + st = 1; /* Do not compress short run */ + /* FALLTHROUGH */ + case 1: + ch = si++; /* Fill the short run */ + if (--j == 0) st = 0; + break; + + default: + ch = (WCHAR)j; si += (WCHAR)j; /* Number of chars to skip */ + st = 0; + } + sum = xsum32(buf[i + 0] = (BYTE)ch, sum); /* Put it into the write buffer */ + sum = xsum32(buf[i + 1] = (BYTE)(ch >> 8), sum); + i += 2; szb_case += 2; + if (si == 0 || i == sz_buf * ss) { /* Write buffered data when buffer full or end of process */ + n = (i + ss - 1) / ss; + if (disk_write(pdrv, buf, sect, n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + sect += n; i = 0; + } + } while (si); + clen[1] = (szb_case + sz_au * ss - 1) / (sz_au * ss); /* Number of up-case table clusters */ + clen[2] = 1; /* Number of root dir clusters */ + + /* Initialize the allocation bitmap */ + sect = b_data; nsect = (szb_bit + ss - 1) / ss; /* Start of bitmap and number of bitmap sectors */ + nbit = clen[0] + clen[1] + clen[2]; /* Number of clusters in-use by system (bitmap, up-case and root-dir) */ + do { + mem_set(buf, 0, sz_buf * ss); /* Initialize bitmap buffer */ + for (i = 0; nbit != 0 && i / 8 < sz_buf * ss; buf[i / 8] |= 1 << (i % 8), i++, nbit--) ; /* Mark used clusters */ + n = (nsect > sz_buf) ? sz_buf : nsect; /* Write the buffered data */ + if (disk_write(pdrv, buf, sect, n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + sect += n; nsect -= n; + } while (nsect); + + /* Initialize the FAT */ + sect = b_fat; nsect = sz_fat; /* Start of FAT and number of FAT sectors */ + j = nbit = clu = 0; + do { + mem_set(buf, 0, sz_buf * ss); i = 0; /* Clear work area and reset write offset */ + if (clu == 0) { /* Initialize FAT [0] and FAT[1] */ + st_dword(buf + i, 0xFFFFFFF8); i += 4; clu++; + st_dword(buf + i, 0xFFFFFFFF); i += 4; clu++; + } + do { /* Create chains of bitmap, up-case and root dir */ + while (nbit != 0 && i < sz_buf * ss) { /* Create a chain */ + st_dword(buf + i, (nbit > 1) ? clu + 1 : 0xFFFFFFFF); + i += 4; clu++; nbit--; + } + if (nbit == 0 && j < 3) nbit = clen[j++]; /* Get next chain length */ + } while (nbit != 0 && i < sz_buf * ss); + n = (nsect > sz_buf) ? sz_buf : nsect; /* Write the buffered data */ + if (disk_write(pdrv, buf, sect, n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + sect += n; nsect -= n; + } while (nsect); + + /* Initialize the root directory */ + mem_set(buf, 0, sz_buf * ss); + buf[SZDIRE * 0 + 0] = ET_VLABEL; /* Volume label entry (no label) */ + buf[SZDIRE * 1 + 0] = ET_BITMAP; /* Bitmap entry */ + st_dword(buf + SZDIRE * 1 + 20, 2); /* cluster */ + st_dword(buf + SZDIRE * 1 + 24, szb_bit); /* size */ + buf[SZDIRE * 2 + 0] = ET_UPCASE; /* Up-case table entry */ + st_dword(buf + SZDIRE * 2 + 4, sum); /* sum */ + st_dword(buf + SZDIRE * 2 + 20, 2 + clen[0]); /* cluster */ + st_dword(buf + SZDIRE * 2 + 24, szb_case); /* size */ + sect = b_data + sz_au * (clen[0] + clen[1]); nsect = sz_au; /* Start of the root directory and number of sectors */ + do { /* Fill root directory sectors */ + n = (nsect > sz_buf) ? sz_buf : nsect; + if (disk_write(pdrv, buf, sect, n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + mem_set(buf, 0, ss); /* Rest of entries are filled with zero */ + sect += n; nsect -= n; + } while (nsect); + + /* Create two set of the exFAT VBR blocks */ + sect = b_vol; + for (n = 0; n < 2; n++) { + /* Main record (+0) */ + mem_set(buf, 0, ss); + mem_cpy(buf + BS_JmpBoot, "\xEB\x76\x90" "EXFAT ", 11); /* Boot jump code (x86), OEM name */ + st_qword(buf + BPB_VolOfsEx, b_vol); /* Volume offset in the physical drive [sector] */ + st_qword(buf + BPB_TotSecEx, sz_vol); /* Volume size [sector] */ + st_dword(buf + BPB_FatOfsEx, (DWORD)(b_fat - b_vol)); /* FAT offset [sector] */ + st_dword(buf + BPB_FatSzEx, sz_fat); /* FAT size [sector] */ + st_dword(buf + BPB_DataOfsEx, (DWORD)(b_data - b_vol)); /* Data offset [sector] */ + st_dword(buf + BPB_NumClusEx, n_clst); /* Number of clusters */ + st_dword(buf + BPB_RootClusEx, 2 + clen[0] + clen[1]); /* Root dir cluster # */ + st_dword(buf + BPB_VolIDEx, GET_FATTIME()); /* VSN */ + st_word(buf + BPB_FSVerEx, 0x100); /* Filesystem version (1.00) */ + for (buf[BPB_BytsPerSecEx] = 0, i = ss; i >>= 1; buf[BPB_BytsPerSecEx]++) ; /* Log2 of sector size [byte] */ + for (buf[BPB_SecPerClusEx] = 0, i = sz_au; i >>= 1; buf[BPB_SecPerClusEx]++) ; /* Log2 of cluster size [sector] */ + buf[BPB_NumFATsEx] = 1; /* Number of FATs */ + buf[BPB_DrvNumEx] = 0x80; /* Drive number (for int13) */ + st_word(buf + BS_BootCodeEx, 0xFEEB); /* Boot code (x86) */ + st_word(buf + BS_55AA, 0xAA55); /* Signature (placed here regardless of sector size) */ + for (i = sum = 0; i < ss; i++) { /* VBR checksum */ + if (i != BPB_VolFlagEx && i != BPB_VolFlagEx + 1 && i != BPB_PercInUseEx) sum = xsum32(buf[i], sum); + } + if (disk_write(pdrv, buf, sect++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + /* Extended bootstrap record (+1..+8) */ + mem_set(buf, 0, ss); + st_word(buf + ss - 2, 0xAA55); /* Signature (placed at end of sector) */ + for (j = 1; j < 9; j++) { + for (i = 0; i < ss; sum = xsum32(buf[i++], sum)) ; /* VBR checksum */ + if (disk_write(pdrv, buf, sect++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + } + /* OEM/Reserved record (+9..+10) */ + mem_set(buf, 0, ss); + for ( ; j < 11; j++) { + for (i = 0; i < ss; sum = xsum32(buf[i++], sum)) ; /* VBR checksum */ + if (disk_write(pdrv, buf, sect++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + } + /* Sum record (+11) */ + for (i = 0; i < ss; i += 4) st_dword(buf + i, sum); /* Fill with checksum value */ + if (disk_write(pdrv, buf, sect++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + } + + } else +#endif /* FF_FS_EXFAT */ + { /* Create an FAT/FAT32 volume */ + do { + pau = sz_au; + /* Pre-determine number of clusters and FAT sub-type */ + if (fsty == FS_FAT32) { /* FAT32 volume */ + if (pau == 0) { /* AU auto-selection */ + n = (DWORD)sz_vol / 0x20000; /* Volume size in unit of 128KS */ + for (i = 0, pau = 1; cst32[i] && cst32[i] <= n; i++, pau <<= 1) ; /* Get from table */ + } + n_clst = (DWORD)sz_vol / pau; /* Number of clusters */ + sz_fat = (n_clst * 4 + 8 + ss - 1) / ss; /* FAT size [sector] */ + sz_rsv = 32; /* Number of reserved sectors */ + sz_dir = 0; /* No static directory */ + if (n_clst <= MAX_FAT16 || n_clst > MAX_FAT32) LEAVE_MKFS(FR_MKFS_ABORTED); + } else { /* FAT volume */ + if (pau == 0) { /* au auto-selection */ + n = (DWORD)sz_vol / 0x1000; /* Volume size in unit of 4KS */ + for (i = 0, pau = 1; cst[i] && cst[i] <= n; i++, pau <<= 1) ; /* Get from table */ + } + n_clst = (DWORD)sz_vol / pau; + if (n_clst > MAX_FAT12) { + n = n_clst * 2 + 4; /* FAT size [byte] */ + } else { + fsty = FS_FAT12; + n = (n_clst * 3 + 1) / 2 + 3; /* FAT size [byte] */ + } + sz_fat = (n + ss - 1) / ss; /* FAT size [sector] */ + sz_rsv = 1; /* Number of reserved sectors */ + sz_dir = (DWORD)n_root * SZDIRE / ss; /* Root dir size [sector] */ + } + b_fat = b_vol + sz_rsv; /* FAT base */ + b_data = b_fat + sz_fat * n_fat + sz_dir; /* Data base */ + + /* Align data area to erase block boundary (for flash memory media) */ + n = (DWORD)(((b_data + sz_blk - 1) & ~(sz_blk - 1)) - b_data); /* Sectors to next nearest from current data base */ + if (fsty == FS_FAT32) { /* FAT32: Move FAT */ + sz_rsv += n; b_fat += n; + } else { /* FAT: Expand FAT */ + if (n % n_fat) { /* Adjust fractional error if needed */ + n--; sz_rsv++; b_fat++; + } + sz_fat += n / n_fat; + } + + /* Determine number of clusters and final check of validity of the FAT sub-type */ + if (sz_vol < b_data + pau * 16 - b_vol) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too small volume? */ + n_clst = ((DWORD)sz_vol - sz_rsv - sz_fat * n_fat - sz_dir) / pau; + if (fsty == FS_FAT32) { + if (n_clst <= MAX_FAT16) { /* Too few clusters for FAT32? */ + if (sz_au == 0 && (sz_au = pau / 2) != 0) continue; /* Adjust cluster size and retry */ + LEAVE_MKFS(FR_MKFS_ABORTED); + } + } + if (fsty == FS_FAT16) { + if (n_clst > MAX_FAT16) { /* Too many clusters for FAT16 */ + if (sz_au == 0 && (pau * 2) <= 64) { + sz_au = pau * 2; continue; /* Adjust cluster size and retry */ + } + if ((fsopt & FM_FAT32)) { + fsty = FS_FAT32; continue; /* Switch type to FAT32 and retry */ + } + if (sz_au == 0 && (sz_au = pau * 2) <= 128) continue; /* Adjust cluster size and retry */ + LEAVE_MKFS(FR_MKFS_ABORTED); + } + if (n_clst <= MAX_FAT12) { /* Too few clusters for FAT16 */ + if (sz_au == 0 && (sz_au = pau * 2) <= 128) continue; /* Adjust cluster size and retry */ + LEAVE_MKFS(FR_MKFS_ABORTED); + } + } + if (fsty == FS_FAT12 && n_clst > MAX_FAT12) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too many clusters for FAT12 */ + + /* Ok, it is the valid cluster configuration */ + break; + } while (1); + +#if FF_USE_TRIM + lba[0] = b_vol; lba[1] = b_vol + sz_vol - 1; /* Inform storage device that the volume area may be erased */ + disk_ioctl(pdrv, CTRL_TRIM, lba); +#endif + /* Create FAT VBR */ + mem_set(buf, 0, ss); + mem_cpy(buf + BS_JmpBoot, "\xEB\xFE\x90" "MSDOS5.0", 11);/* Boot jump code (x86), OEM name */ + st_word(buf + BPB_BytsPerSec, ss); /* Sector size [byte] */ + buf[BPB_SecPerClus] = (BYTE)pau; /* Cluster size [sector] */ + st_word(buf + BPB_RsvdSecCnt, (WORD)sz_rsv); /* Size of reserved area */ + buf[BPB_NumFATs] = (BYTE)n_fat; /* Number of FATs */ + st_word(buf + BPB_RootEntCnt, (WORD)((fsty == FS_FAT32) ? 0 : n_root)); /* Number of root directory entries */ + if (sz_vol < 0x10000) { + st_word(buf + BPB_TotSec16, (WORD)sz_vol); /* Volume size in 16-bit LBA */ + } else { + st_dword(buf + BPB_TotSec32, (DWORD)sz_vol); /* Volume size in 32-bit LBA */ + } + buf[BPB_Media] = 0xF8; /* Media descriptor byte */ + st_word(buf + BPB_SecPerTrk, 63); /* Number of sectors per track (for int13) */ + st_word(buf + BPB_NumHeads, 255); /* Number of heads (for int13) */ + st_dword(buf + BPB_HiddSec, (DWORD)b_vol); /* Volume offset in the physical drive [sector] */ + if (fsty == FS_FAT32) { + st_dword(buf + BS_VolID32, GET_FATTIME()); /* VSN */ + st_dword(buf + BPB_FATSz32, sz_fat); /* FAT size [sector] */ + st_dword(buf + BPB_RootClus32, 2); /* Root directory cluster # (2) */ + st_word(buf + BPB_FSInfo32, 1); /* Offset of FSINFO sector (VBR + 1) */ + st_word(buf + BPB_BkBootSec32, 6); /* Offset of backup VBR (VBR + 6) */ + buf[BS_DrvNum32] = 0x80; /* Drive number (for int13) */ + buf[BS_BootSig32] = 0x29; /* Extended boot signature */ + mem_cpy(buf + BS_VolLab32, "NO NAME " "FAT32 ", 19); /* Volume label, FAT signature */ + } else { + st_dword(buf + BS_VolID, GET_FATTIME()); /* VSN */ + st_word(buf + BPB_FATSz16, (WORD)sz_fat); /* FAT size [sector] */ + buf[BS_DrvNum] = 0x80; /* Drive number (for int13) */ + buf[BS_BootSig] = 0x29; /* Extended boot signature */ + mem_cpy(buf + BS_VolLab, "NO NAME " "FAT ", 19); /* Volume label, FAT signature */ + } + st_word(buf + BS_55AA, 0xAA55); /* Signature (offset is fixed here regardless of sector size) */ + if (disk_write(pdrv, buf, b_vol, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Write it to the VBR sector */ + + /* Create FSINFO record if needed */ + if (fsty == FS_FAT32) { + disk_write(pdrv, buf, b_vol + 6, 1); /* Write backup VBR (VBR + 6) */ + mem_set(buf, 0, ss); + st_dword(buf + FSI_LeadSig, 0x41615252); + st_dword(buf + FSI_StrucSig, 0x61417272); + st_dword(buf + FSI_Free_Count, n_clst - 1); /* Number of free clusters */ + st_dword(buf + FSI_Nxt_Free, 2); /* Last allocated cluster# */ + st_word(buf + BS_55AA, 0xAA55); + disk_write(pdrv, buf, b_vol + 7, 1); /* Write backup FSINFO (VBR + 7) */ + disk_write(pdrv, buf, b_vol + 1, 1); /* Write original FSINFO (VBR + 1) */ + } + + /* Initialize FAT area */ + mem_set(buf, 0, sz_buf * ss); + sect = b_fat; /* FAT start sector */ + for (i = 0; i < n_fat; i++) { /* Initialize FATs each */ + if (fsty == FS_FAT32) { + st_dword(buf + 0, 0xFFFFFFF8); /* FAT[0] */ + st_dword(buf + 4, 0xFFFFFFFF); /* FAT[1] */ + st_dword(buf + 8, 0x0FFFFFFF); /* FAT[2] (root directory) */ + } else { + st_dword(buf + 0, (fsty == FS_FAT12) ? 0xFFFFF8 : 0xFFFFFFF8); /* FAT[0] and FAT[1] */ + } + nsect = sz_fat; /* Number of FAT sectors */ + do { /* Fill FAT sectors */ + n = (nsect > sz_buf) ? sz_buf : nsect; + if (disk_write(pdrv, buf, sect, (UINT)n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + mem_set(buf, 0, ss); /* Rest of FAT all are cleared */ + sect += n; nsect -= n; + } while (nsect); + } + + /* Initialize root directory (fill with zero) */ + nsect = (fsty == FS_FAT32) ? pau : sz_dir; /* Number of root directory sectors */ + do { + n = (nsect > sz_buf) ? sz_buf : nsect; + if (disk_write(pdrv, buf, sect, (UINT)n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + sect += n; nsect -= n; + } while (nsect); + } + + /* A FAT volume has been created here */ + + /* Determine system ID in the MBR partition table */ + if (FF_FS_EXFAT && fsty == FS_EXFAT) { + sys = 0x07; /* exFAT */ + } else { + if (fsty == FS_FAT32) { + sys = 0x0C; /* FAT32X */ + } else { + if (sz_vol >= 0x10000) { + sys = 0x06; /* FAT12/16 (large) */ + } else { + sys = (fsty == FS_FAT16) ? 0x04 : 0x01; /* FAT16 : FAT12 */ + } + } + } + + /* Update partition information */ + if (FF_MULTI_PARTITION && ipart != 0) { /* Volume is in the existing partition */ + if (!FF_LBA64 || !(fsopt & 0x80)) { + /* Update system ID in the partition table */ + if (disk_read(pdrv, buf, 0, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Read the MBR */ + buf[MBR_Table + (ipart - 1) * SZ_PTE + PTE_System] = sys; /* Set system ID */ + if (disk_write(pdrv, buf, 0, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Write it back to the MBR */ + } + } else { /* Volume as a new single partition */ + if (!(fsopt & FM_SFD)) { /* Create partition table if not in SFD */ + lba[0] = sz_vol, lba[1] = 0; + fr = create_partition(pdrv, lba, sys, buf); + if (fr != FR_OK) LEAVE_MKFS(fr); + } + } + + if (disk_ioctl(pdrv, CTRL_SYNC, 0) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + + LEAVE_MKFS(FR_OK); +} + + + + +#if FF_MULTI_PARTITION +/*-----------------------------------------------------------------------*/ +/* Create Partition Table on the Physical Drive */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_fdisk ( + BYTE pdrv, /* Physical drive number */ + const LBA_t ptbl[], /* Pointer to the size table for each partitions */ + void* work /* Pointer to the working buffer (null: use heap memory) */ +) +{ + BYTE *buf = (BYTE*)work; + DSTATUS stat; + + + stat = disk_initialize(pdrv); + if (stat & STA_NOINIT) return FR_NOT_READY; + if (stat & STA_PROTECT) return FR_WRITE_PROTECTED; +#if FF_USE_LFN == 3 + if (!buf) buf = ff_memalloc(FF_MAX_SS); /* Use heap memory for working buffer */ +#endif + if (!buf) return FR_NOT_ENOUGH_CORE; + + LEAVE_MKFS(create_partition(pdrv, ptbl, 0x07, buf)); +} + +#endif /* FF_MULTI_PARTITION */ +#endif /* !FF_FS_READONLY && FF_USE_MKFS */ + + + + +#if FF_USE_STRFUNC +#if FF_USE_LFN && FF_LFN_UNICODE && (FF_STRF_ENCODE < 0 || FF_STRF_ENCODE > 3) +#error Wrong FF_STRF_ENCODE setting +#endif +/*-----------------------------------------------------------------------*/ +/* Get a String from the File */ +/*-----------------------------------------------------------------------*/ + +TCHAR* f_gets ( + TCHAR* buff, /* Pointer to the buffer to store read string */ + int len, /* Size of string buffer (items) */ + FIL* fp /* Pointer to the file object */ +) +{ + int nc = 0; + TCHAR *p = buff; + BYTE s[4]; + UINT rc; + DWORD dc; +#if FF_USE_LFN && FF_LFN_UNICODE && FF_STRF_ENCODE <= 2 + WCHAR wc; +#endif +#if FF_USE_LFN && FF_LFN_UNICODE && FF_STRF_ENCODE == 3 + UINT ct; +#endif + +#if FF_USE_LFN && FF_LFN_UNICODE /* With code conversion (Unicode API) */ + /* Make a room for the character and terminator */ + if (FF_LFN_UNICODE == 1) len -= (FF_STRF_ENCODE == 0) ? 1 : 2; + if (FF_LFN_UNICODE == 2) len -= (FF_STRF_ENCODE == 0) ? 3 : 4; + if (FF_LFN_UNICODE == 3) len -= 1; + while (nc < len) { +#if FF_STRF_ENCODE == 0 /* Read a character in ANSI/OEM */ + f_read(fp, s, 1, &rc); /* Get a code unit */ + if (rc != 1) break; /* EOF? */ + wc = s[0]; + if (dbc_1st((BYTE)wc)) { /* DBC 1st byte? */ + f_read(fp, s, 1, &rc); /* Get DBC 2nd byte */ + if (rc != 1 || !dbc_2nd(s[0])) continue; /* Wrong code? */ + wc = wc << 8 | s[0]; + } + dc = ff_oem2uni(wc, CODEPAGE); /* OEM --> */ + if (dc == 0) continue; +#elif FF_STRF_ENCODE == 1 || FF_STRF_ENCODE == 2 /* Read a character in UTF-16LE/BE */ + f_read(fp, s, 2, &rc); /* Get a code unit */ + if (rc != 2) break; /* EOF? */ + dc = (FF_STRF_ENCODE == 1) ? ld_word(s) : s[0] << 8 | s[1]; + if (IsSurrogateL(dc)) continue; /* Broken surrogate pair? */ + if (IsSurrogateH(dc)) { /* High surrogate? */ + f_read(fp, s, 2, &rc); /* Get low surrogate */ + if (rc != 2) break; /* EOF? */ + wc = (FF_STRF_ENCODE == 1) ? ld_word(s) : s[0] << 8 | s[1]; + if (!IsSurrogateL(wc)) continue; /* Broken surrogate pair? */ + dc = ((dc & 0x3FF) + 0x40) << 10 | (wc & 0x3FF); /* Merge surrogate pair */ + } +#else /* Read a character in UTF-8 */ + f_read(fp, s, 1, &rc); /* Get a code unit */ + if (rc != 1) break; /* EOF? */ + dc = s[0]; + if (dc >= 0x80) { /* Multi-byte sequence? */ + ct = 0; + if ((dc & 0xE0) == 0xC0) { dc &= 0x1F; ct = 1; } /* 2-byte sequence? */ + if ((dc & 0xF0) == 0xE0) { dc &= 0x0F; ct = 2; } /* 3-byte sequence? */ + if ((dc & 0xF8) == 0xF0) { dc &= 0x07; ct = 3; } /* 4-byte sequence? */ + if (ct == 0) continue; + f_read(fp, s, ct, &rc); /* Get trailing bytes */ + if (rc != ct) break; + rc = 0; + do { /* Merge the byte sequence */ + if ((s[rc] & 0xC0) != 0x80) break; + dc = dc << 6 | (s[rc] & 0x3F); + } while (++rc < ct); + if (rc != ct || dc < 0x80 || IsSurrogate(dc) || dc >= 0x110000) continue; /* Wrong encoding? */ + } +#endif + /* A code point is avaialble in dc to be output */ + + if (FF_USE_STRFUNC == 2 && dc == '\r') continue; /* Strip \r off if needed */ +#if FF_LFN_UNICODE == 1 || FF_LFN_UNICODE == 3 /* Output it in UTF-16/32 encoding */ + if (FF_LFN_UNICODE == 1 && dc >= 0x10000) { /* Out of BMP at UTF-16? */ + *p++ = (TCHAR)(0xD800 | ((dc >> 10) - 0x40)); nc++; /* Make and output high surrogate */ + dc = 0xDC00 | (dc & 0x3FF); /* Make low surrogate */ + } + *p++ = (TCHAR)dc; nc++; + if (dc == '\n') break; /* End of line? */ +#elif FF_LFN_UNICODE == 2 /* Output it in UTF-8 encoding */ + if (dc < 0x80) { /* Single byte? */ + *p++ = (TCHAR)dc; + nc++; + if (dc == '\n') break; /* End of line? */ + } else { + if (dc < 0x800) { /* 2-byte sequence? */ + *p++ = (TCHAR)(0xC0 | (dc >> 6 & 0x1F)); + *p++ = (TCHAR)(0x80 | (dc >> 0 & 0x3F)); + nc += 2; + } else { + if (dc < 0x10000) { /* 3-byte sequence? */ + *p++ = (TCHAR)(0xE0 | (dc >> 12 & 0x0F)); + *p++ = (TCHAR)(0x80 | (dc >> 6 & 0x3F)); + *p++ = (TCHAR)(0x80 | (dc >> 0 & 0x3F)); + nc += 3; + } else { /* 4-byte sequence? */ + *p++ = (TCHAR)(0xF0 | (dc >> 18 & 0x07)); + *p++ = (TCHAR)(0x80 | (dc >> 12 & 0x3F)); + *p++ = (TCHAR)(0x80 | (dc >> 6 & 0x3F)); + *p++ = (TCHAR)(0x80 | (dc >> 0 & 0x3F)); + nc += 4; + } + } + } +#endif + } + +#else /* Byte-by-byte read without any conversion (ANSI/OEM API) */ + len -= 1; /* Make a room for the terminator */ + while (nc < len) { + f_read(fp, s, 1, &rc); /* Get a byte */ + if (rc != 1) break; /* EOF? */ + dc = s[0]; + if (FF_USE_STRFUNC == 2 && dc == '\r') continue; + *p++ = (TCHAR)dc; nc++; + if (dc == '\n') break; + } +#endif + + *p = 0; /* Terminate the string */ + return nc ? buff : 0; /* When no data read due to EOF or error, return with error. */ +} + + + + +#if !FF_FS_READONLY +#include +/*-----------------------------------------------------------------------*/ +/* Put a Character to the File (sub-functions) */ +/*-----------------------------------------------------------------------*/ + +/* Putchar output buffer and work area */ + +typedef struct { + FIL *fp; /* Ptr to the writing file */ + int idx, nchr; /* Write index of buf[] (-1:error), number of encoding units written */ +#if FF_USE_LFN && FF_LFN_UNICODE == 1 + WCHAR hs; +#elif FF_USE_LFN && FF_LFN_UNICODE == 2 + BYTE bs[4]; + UINT wi, ct; +#endif + BYTE buf[64]; /* Write buffer */ +} putbuff; + + +/* Buffered write with code conversion */ + +static void putc_bfd (putbuff* pb, TCHAR c) +{ + UINT n; + int i, nc; +#if FF_USE_LFN && FF_LFN_UNICODE + WCHAR hs, wc; +#if FF_LFN_UNICODE == 2 + DWORD dc; + const TCHAR *tp; +#endif +#endif + + if (FF_USE_STRFUNC == 2 && c == '\n') { /* LF -> CRLF conversion */ + putc_bfd(pb, '\r'); + } + + i = pb->idx; /* Write index of pb->buf[] */ + if (i < 0) return; + nc = pb->nchr; /* Write unit counter */ + +#if FF_USE_LFN && FF_LFN_UNICODE +#if FF_LFN_UNICODE == 1 /* UTF-16 input */ + if (IsSurrogateH(c)) { /* High surrogate? */ + pb->hs = c; return; /* Save it for next */ + } + hs = pb->hs; pb->hs = 0; + if (hs != 0) { /* There is a leading high surrogate */ + if (!IsSurrogateL(c)) hs = 0; /* Discard high surrogate if not a surrogate pair */ + } else { + if (IsSurrogateL(c)) return; /* Discard stray low surrogate */ + } + wc = c; +#elif FF_LFN_UNICODE == 2 /* UTF-8 input */ + for (;;) { + if (pb->ct == 0) { /* Out of multi-byte sequence? */ + pb->bs[pb->wi = 0] = (BYTE)c; /* Save 1st byte */ + if ((BYTE)c < 0x80) break; /* Single byte? */ + if (((BYTE)c & 0xE0) == 0xC0) pb->ct = 1; /* 2-byte sequence? */ + if (((BYTE)c & 0xF0) == 0xE0) pb->ct = 2; /* 3-byte sequence? */ + if (((BYTE)c & 0xF1) == 0xF0) pb->ct = 3; /* 4-byte sequence? */ + return; + } else { /* In the multi-byte sequence */ + if (((BYTE)c & 0xC0) != 0x80) { /* Broken sequence? */ + pb->ct = 0; continue; + } + pb->bs[++pb->wi] = (BYTE)c; /* Save the trailing byte */ + if (--pb->ct == 0) break; /* End of multi-byte sequence? */ + return; + } + } + tp = (const TCHAR*)pb->bs; + dc = tchar2uni(&tp); /* UTF-8 ==> UTF-16 */ + if (dc == 0xFFFFFFFF) return; /* Wrong code? */ + wc = (WCHAR)dc; + hs = (WCHAR)(dc >> 16); +#elif FF_LFN_UNICODE == 3 /* UTF-32 input */ + if (IsSurrogate(c) || c >= 0x110000) return; /* Discard invalid code */ + if (c >= 0x10000) { /* Out of BMP? */ + hs = (WCHAR)(0xD800 | ((c >> 10) - 0x40)); /* Make high surrogate */ + wc = 0xDC00 | (c & 0x3FF); /* Make low surrogate */ + } else { + hs = 0; + wc = (WCHAR)c; + } +#endif + /* A code point in UTF-16 is available in hs and wc */ + +#if FF_STRF_ENCODE == 1 /* Write a code point in UTF-16LE */ + if (hs != 0) { /* Surrogate pair? */ + st_word(&pb->buf[i], hs); + i += 2; + nc++; + } + st_word(&pb->buf[i], wc); + i += 2; +#elif FF_STRF_ENCODE == 2 /* Write a code point in UTF-16BE */ + if (hs != 0) { /* Surrogate pair? */ + pb->buf[i++] = (BYTE)(hs >> 8); + pb->buf[i++] = (BYTE)hs; + nc++; + } + pb->buf[i++] = (BYTE)(wc >> 8); + pb->buf[i++] = (BYTE)wc; +#elif FF_STRF_ENCODE == 3 /* Write a code point in UTF-8 */ + if (hs != 0) { /* 4-byte sequence? */ + nc += 3; + hs = (hs & 0x3FF) + 0x40; + pb->buf[i++] = (BYTE)(0xF0 | hs >> 8); + pb->buf[i++] = (BYTE)(0x80 | (hs >> 2 & 0x3F)); + pb->buf[i++] = (BYTE)(0x80 | (hs & 3) << 4 | (wc >> 6 & 0x0F)); + pb->buf[i++] = (BYTE)(0x80 | (wc & 0x3F)); + } else { + if (wc < 0x80) { /* Single byte? */ + pb->buf[i++] = (BYTE)wc; + } else { + if (wc < 0x800) { /* 2-byte sequence? */ + nc += 1; + pb->buf[i++] = (BYTE)(0xC0 | wc >> 6); + } else { /* 3-byte sequence */ + nc += 2; + pb->buf[i++] = (BYTE)(0xE0 | wc >> 12); + pb->buf[i++] = (BYTE)(0x80 | (wc >> 6 & 0x3F)); + } + pb->buf[i++] = (BYTE)(0x80 | (wc & 0x3F)); + } + } +#else /* Write a code point in ANSI/OEM */ + if (hs != 0) return; + wc = ff_uni2oem(wc, CODEPAGE); /* UTF-16 ==> ANSI/OEM */ + if (wc == 0) return; + if (wc >= 0x100) { + pb->buf[i++] = (BYTE)(wc >> 8); nc++; + } + pb->buf[i++] = (BYTE)wc; +#endif + +#else /* ANSI/OEM input (without re-encoding) */ + pb->buf[i++] = (BYTE)c; +#endif + + if (i >= (int)(sizeof pb->buf) - 4) { /* Write buffered characters to the file */ + f_write(pb->fp, pb->buf, (UINT)i, &n); + i = (n == (UINT)i) ? 0 : -1; + } + pb->idx = i; + pb->nchr = nc + 1; +} + + +/* Flush remaining characters in the buffer */ + +static int putc_flush (putbuff* pb) +{ + UINT nw; + + if ( pb->idx >= 0 /* Flush buffered characters to the file */ + && f_write(pb->fp, pb->buf, (UINT)pb->idx, &nw) == FR_OK + && (UINT)pb->idx == nw) return pb->nchr; + return -1; +} + + +/* Initialize write buffer */ + +static void putc_init (putbuff* pb, FIL* fp) +{ + mem_set(pb, 0, sizeof (putbuff)); + pb->fp = fp; +} + + + +int f_putc ( + TCHAR c, /* A character to be output */ + FIL* fp /* Pointer to the file object */ +) +{ + putbuff pb; + + + putc_init(&pb, fp); + putc_bfd(&pb, c); /* Put the character */ + return putc_flush(&pb); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Put a String to the File */ +/*-----------------------------------------------------------------------*/ + +int f_puts ( + const TCHAR* str, /* Pointer to the string to be output */ + FIL* fp /* Pointer to the file object */ +) +{ + putbuff pb; + + + putc_init(&pb, fp); + while (*str) putc_bfd(&pb, *str++); /* Put the string */ + return putc_flush(&pb); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Put a Formatted String to the File */ +/*-----------------------------------------------------------------------*/ + +int f_printf ( + FIL* fp, /* Pointer to the file object */ + const TCHAR* fmt, /* Pointer to the format string */ + ... /* Optional arguments... */ +) +{ + va_list arp; + putbuff pb; + BYTE f, r; + UINT i, j, w; + DWORD v; + TCHAR c, d, str[32], *p; + + + putc_init(&pb, fp); + + va_start(arp, fmt); + + for (;;) { + c = *fmt++; + if (c == 0) break; /* End of string */ + if (c != '%') { /* Non escape character */ + putc_bfd(&pb, c); + continue; + } + w = f = 0; + c = *fmt++; + if (c == '0') { /* Flag: '0' padding */ + f = 1; c = *fmt++; + } else { + if (c == '-') { /* Flag: left justified */ + f = 2; c = *fmt++; + } + } + if (c == '*') { /* Minimum width by argument */ + w = va_arg(arp, int); + c = *fmt++; + } else { + while (IsDigit(c)) { /* Minimum width */ + w = w * 10 + c - '0'; + c = *fmt++; + } + } + if (c == 'l' || c == 'L') { /* Type prefix: Size is long int */ + f |= 4; c = *fmt++; + } + if (c == 0) break; + d = c; + if (IsLower(d)) d -= 0x20; + switch (d) { /* Atgument type is... */ + case 'S': /* String */ + p = va_arg(arp, TCHAR*); + for (j = 0; p[j]; j++) ; + if (!(f & 2)) { /* Right padded */ + while (j++ < w) putc_bfd(&pb, ' ') ; + } + while (*p) putc_bfd(&pb, *p++) ; /* String body */ + while (j++ < w) putc_bfd(&pb, ' ') ; /* Left padded */ + continue; + + case 'C': /* Character */ + putc_bfd(&pb, (TCHAR)va_arg(arp, int)); + continue; + + case 'B': /* Unsigned binary */ + r = 2; + break; + + case 'O': /* Unsigned octal */ + r = 8; + break; + + case 'D': /* Signed decimal */ + case 'U': /* Unsigned decimal */ + r = 10; + break; + + case 'X': /* Unsigned hexdecimal */ + r = 16; + break; + + default: /* Unknown type (pass-through) */ + putc_bfd(&pb, c); continue; + } + + /* Get an argument and put it in numeral */ + v = (f & 4) ? (DWORD)va_arg(arp, long) : ((d == 'D') ? (DWORD)(long)va_arg(arp, int) : (DWORD)va_arg(arp, unsigned int)); + if (d == 'D' && (v & 0x80000000)) { + v = 0 - v; + f |= 8; + } + i = 0; + do { + d = (TCHAR)(v % r); v /= r; + if (d > 9) d += (c == 'x') ? 0x27 : 0x07; + str[i++] = d + '0'; + } while (v && i < sizeof str / sizeof *str); + if (f & 8) str[i++] = '-'; + j = i; d = (f & 1) ? '0' : ' '; + if (!(f & 2)) { + while (j++ < w) putc_bfd(&pb, d); /* Right pad */ + } + do { + putc_bfd(&pb, str[--i]); /* Number body */ + } while (i); + while (j++ < w) putc_bfd(&pb, d); /* Left pad */ + } + + va_end(arp); + + return putc_flush(&pb); +} + +#endif /* !FF_FS_READONLY */ +#endif /* FF_USE_STRFUNC */ + + + +#if FF_CODE_PAGE == 0 +/*-----------------------------------------------------------------------*/ +/* Set Active Codepage for the Path Name */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_setcp ( + WORD cp /* Value to be set as active code page */ +) +{ + static const WORD validcp[] = { 437, 720, 737, 771, 775, 850, 852, 857, 860, 861, 862, 863, 864, 865, 866, 869, 932, 936, 949, 950, 0}; + static const BYTE* const tables[] = {Ct437, Ct720, Ct737, Ct771, Ct775, Ct850, Ct852, Ct857, Ct860, Ct861, Ct862, Ct863, Ct864, Ct865, Ct866, Ct869, Dc932, Dc936, Dc949, Dc950, 0}; + UINT i; + + + for (i = 0; validcp[i] != 0 && validcp[i] != cp; i++) ; /* Find the code page */ + if (validcp[i] != cp) return FR_INVALID_PARAMETER; /* Not found? */ + + CodePage = cp; + if (cp >= 900) { /* DBCS */ + ExCvt = 0; + DbcTbl = tables[i]; + } else { /* SBCS */ + ExCvt = tables[i]; + DbcTbl = 0; + } + return FR_OK; +} +#endif /* FF_CODE_PAGE == 0 */ + diff --git a/MCUME_pico/FatFs_SPI/ff14a/source/ff.h b/MCUME_pico/FatFs_SPI/ff14a/source/ff.h new file mode 100755 index 0000000..b1dffc2 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/ff14a/source/ff.h @@ -0,0 +1,422 @@ +/*----------------------------------------------------------------------------/ +/ FatFs - Generic FAT Filesystem module R0.14a / +/-----------------------------------------------------------------------------/ +/ +/ Copyright (C) 2020, ChaN, all right reserved. +/ +/ FatFs module is an open source software. Redistribution and use of FatFs in +/ source and binary forms, with or without modification, are permitted provided +/ that the following condition is met: + +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +/ +/----------------------------------------------------------------------------*/ + + +#ifndef FF_DEFINED +#define FF_DEFINED 80196 /* Revision ID */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "ffconf.h" /* FatFs configuration options */ + +#if FF_DEFINED != FFCONF_DEF +#error Wrong configuration file (ffconf.h). +#endif + + +/* Integer types used for FatFs API */ + +#if defined(_WIN32) /* Main development platform */ +#define FF_INTDEF 2 +#include +typedef unsigned __int64 QWORD; +#elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__cplusplus) /* C99 or later */ +#define FF_INTDEF 2 +#include +typedef unsigned int UINT; /* int must be 16-bit or 32-bit */ +typedef unsigned char BYTE; /* char must be 8-bit */ +typedef uint16_t WORD; /* 16-bit unsigned integer */ +typedef uint32_t DWORD; /* 32-bit unsigned integer */ +typedef uint64_t QWORD; /* 64-bit unsigned integer */ +typedef WORD WCHAR; /* UTF-16 character type */ +#else /* Earlier than C99 */ +#define FF_INTDEF 1 +typedef unsigned int UINT; /* int must be 16-bit or 32-bit */ +typedef unsigned char BYTE; /* char must be 8-bit */ +typedef unsigned short WORD; /* 16-bit unsigned integer */ +typedef unsigned long DWORD; /* 32-bit unsigned integer */ +typedef WORD WCHAR; /* UTF-16 character type */ +#endif + + +/* Definitions of volume management */ + +#if FF_MULTI_PARTITION /* Multiple partition configuration */ +typedef struct { + BYTE pd; /* Physical drive number */ + BYTE pt; /* Partition: 0:Auto detect, 1-4:Forced partition) */ +} PARTITION; +extern PARTITION VolToPart[]; /* Volume - Partition mapping table */ +#endif + +#if FF_STR_VOLUME_ID +#ifndef FF_VOLUME_STRS +extern const char* VolumeStr[FF_VOLUMES]; /* User defied volume ID */ +#endif +#endif + + + +/* Type of path name strings on FatFs API */ + +#ifndef _INC_TCHAR +#define _INC_TCHAR + +#if FF_USE_LFN && FF_LFN_UNICODE == 1 /* Unicode in UTF-16 encoding */ +typedef WCHAR TCHAR; +#define _T(x) L ## x +#define _TEXT(x) L ## x +#elif FF_USE_LFN && FF_LFN_UNICODE == 2 /* Unicode in UTF-8 encoding */ +typedef char TCHAR; +#define _T(x) u8 ## x +#define _TEXT(x) u8 ## x +#elif FF_USE_LFN && FF_LFN_UNICODE == 3 /* Unicode in UTF-32 encoding */ +typedef DWORD TCHAR; +#define _T(x) U ## x +#define _TEXT(x) U ## x +#elif FF_USE_LFN && (FF_LFN_UNICODE < 0 || FF_LFN_UNICODE > 3) +#error Wrong FF_LFN_UNICODE setting +#else /* ANSI/OEM code in SBCS/DBCS */ +typedef char TCHAR; +#define _T(x) x +#define _TEXT(x) x +#endif + +#endif + + + +/* Type of file size and LBA variables */ + +#if FF_FS_EXFAT +#if FF_INTDEF != 2 +#error exFAT feature wants C99 or later +#endif +typedef QWORD FSIZE_t; +#if FF_LBA64 +typedef QWORD LBA_t; +#else +typedef DWORD LBA_t; +#endif +#else +#if FF_LBA64 +#error exFAT needs to be enabled when enable 64-bit LBA +#endif +typedef DWORD FSIZE_t; +typedef DWORD LBA_t; +#endif + + + +/* Filesystem object structure (FATFS) */ + +typedef struct { + BYTE fs_type; /* Filesystem type (0:not mounted) */ + BYTE pdrv; /* Associated physical drive */ + BYTE n_fats; /* Number of FATs (1 or 2) */ + BYTE wflag; /* win[] flag (b0:dirty) */ + BYTE fsi_flag; /* FSINFO flags (b7:disabled, b0:dirty) */ + WORD id; /* Volume mount ID */ + WORD n_rootdir; /* Number of root directory entries (FAT12/16) */ + WORD csize; /* Cluster size [sectors] */ +#if FF_MAX_SS != FF_MIN_SS + WORD ssize; /* Sector size (512, 1024, 2048 or 4096) */ +#endif +#if FF_USE_LFN + WCHAR* lfnbuf; /* LFN working buffer */ +#endif +#if FF_FS_EXFAT + BYTE* dirbuf; /* Directory entry block scratchpad buffer for exFAT */ +#endif +#if FF_FS_REENTRANT + FF_SYNC_t sobj; /* Identifier of sync object */ +#endif +#if !FF_FS_READONLY + DWORD last_clst; /* Last allocated cluster */ + DWORD free_clst; /* Number of free clusters */ +#endif +#if FF_FS_RPATH + DWORD cdir; /* Current directory start cluster (0:root) */ +#if FF_FS_EXFAT + DWORD cdc_scl; /* Containing directory start cluster (invalid when cdir is 0) */ + DWORD cdc_size; /* b31-b8:Size of containing directory, b7-b0: Chain status */ + DWORD cdc_ofs; /* Offset in the containing directory (invalid when cdir is 0) */ +#endif +#endif + DWORD n_fatent; /* Number of FAT entries (number of clusters + 2) */ + DWORD fsize; /* Size of an FAT [sectors] */ + LBA_t volbase; /* Volume base sector */ + LBA_t fatbase; /* FAT base sector */ + LBA_t dirbase; /* Root directory base sector/cluster */ + LBA_t database; /* Data base sector */ +#if FF_FS_EXFAT + LBA_t bitbase; /* Allocation bitmap base sector */ +#endif + LBA_t winsect; /* Current sector appearing in the win[] */ + BYTE win[FF_MAX_SS]; /* Disk access window for Directory, FAT (and file data at tiny cfg) */ +} FATFS; + + + +/* Object ID and allocation information (FFOBJID) */ + +typedef struct { + FATFS* fs; /* Pointer to the hosting volume of this object */ + WORD id; /* Hosting volume mount ID */ + BYTE attr; /* Object attribute */ + BYTE stat; /* Object chain status (b1-0: =0:not contiguous, =2:contiguous, =3:fragmented in this session, b2:sub-directory stretched) */ + DWORD sclust; /* Object data start cluster (0:no cluster or root directory) */ + FSIZE_t objsize; /* Object size (valid when sclust != 0) */ +#if FF_FS_EXFAT + DWORD n_cont; /* Size of first fragment - 1 (valid when stat == 3) */ + DWORD n_frag; /* Size of last fragment needs to be written to FAT (valid when not zero) */ + DWORD c_scl; /* Containing directory start cluster (valid when sclust != 0) */ + DWORD c_size; /* b31-b8:Size of containing directory, b7-b0: Chain status (valid when c_scl != 0) */ + DWORD c_ofs; /* Offset in the containing directory (valid when file object and sclust != 0) */ +#endif +#if FF_FS_LOCK + UINT lockid; /* File lock ID origin from 1 (index of file semaphore table Files[]) */ +#endif +} FFOBJID; + + + +/* File object structure (FIL) */ + +typedef struct { + FFOBJID obj; /* Object identifier (must be the 1st member to detect invalid object pointer) */ + BYTE flag; /* File status flags */ + BYTE err; /* Abort flag (error code) */ + FSIZE_t fptr; /* File read/write pointer (Zeroed on file open) */ + DWORD clust; /* Current cluster of fpter (invalid when fptr is 0) */ + LBA_t sect; /* Sector number appearing in buf[] (0:invalid) */ +#if !FF_FS_READONLY + LBA_t dir_sect; /* Sector number containing the directory entry (not used at exFAT) */ + BYTE* dir_ptr; /* Pointer to the directory entry in the win[] (not used at exFAT) */ +#endif +#if FF_USE_FASTSEEK + DWORD* cltbl; /* Pointer to the cluster link map table (nulled on open, set by application) */ +#endif +#if !FF_FS_TINY + BYTE buf[FF_MAX_SS]; /* File private data read/write window */ +#endif +} FIL; + + + +/* Directory object structure (DIR) */ + +typedef struct { + FFOBJID obj; /* Object identifier */ + DWORD dptr; /* Current read/write offset */ + DWORD clust; /* Current cluster */ + LBA_t sect; /* Current sector (0:Read operation has terminated) */ + BYTE* dir; /* Pointer to the directory item in the win[] */ + BYTE fn[12]; /* SFN (in/out) {body[8],ext[3],status[1]} */ +#if FF_USE_LFN + DWORD blk_ofs; /* Offset of current entry block being processed (0xFFFFFFFF:Invalid) */ +#endif +#if FF_USE_FIND + const TCHAR* pat; /* Pointer to the name matching pattern */ +#endif +} DIR; + + + +/* File information structure (FILINFO) */ + +typedef struct { + FSIZE_t fsize; /* File size */ + WORD fdate; /* Modified date */ + WORD ftime; /* Modified time */ + BYTE fattrib; /* File attribute */ +#if FF_USE_LFN + TCHAR altname[FF_SFN_BUF + 1];/* Altenative file name */ + TCHAR fname[FF_LFN_BUF + 1]; /* Primary file name */ +#else + TCHAR fname[12 + 1]; /* File name */ +#endif +} FILINFO; + + + +/* Format parameter structure (MKFS_PARM) */ + +typedef struct { + BYTE fmt; /* Format option (FM_FAT, FM_FAT32, FM_EXFAT and FM_SFD) */ + BYTE n_fat; /* Number of FATs */ + UINT align; /* Data area alignment (sector) */ + UINT n_root; /* Number of root directory entries */ + DWORD au_size; /* Cluster size (byte) */ +} MKFS_PARM; + + + +/* File function return code (FRESULT) */ + +typedef enum { + FR_OK = 0, /* (0) Succeeded */ + FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */ + FR_INT_ERR, /* (2) Assertion failed */ + FR_NOT_READY, /* (3) The physical drive cannot work */ + FR_NO_FILE, /* (4) Could not find the file */ + FR_NO_PATH, /* (5) Could not find the path */ + FR_INVALID_NAME, /* (6) The path name format is invalid */ + FR_DENIED, /* (7) Access denied due to prohibited access or directory full */ + FR_EXIST, /* (8) Access denied due to prohibited access */ + FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */ + FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */ + FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */ + FR_NOT_ENABLED, /* (12) The volume has no work area */ + FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */ + FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any problem */ + FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */ + FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */ + FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */ + FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > FF_FS_LOCK */ + FR_INVALID_PARAMETER /* (19) Given parameter is invalid */ +} FRESULT; + + + +/*--------------------------------------------------------------*/ +/* FatFs module application interface */ + +FRESULT f_open (FIL* fp, const TCHAR* path, BYTE mode); /* Open or create a file */ +FRESULT f_close (FIL* fp); /* Close an open file object */ +FRESULT f_read (FIL* fp, void* buff, UINT btr, UINT* br); /* Read data from the file */ +FRESULT f_write (FIL* fp, const void* buff, UINT btw, UINT* bw); /* Write data to the file */ +FRESULT f_lseek (FIL* fp, FSIZE_t ofs); /* Move file pointer of the file object */ +FRESULT f_truncate (FIL* fp); /* Truncate the file */ +FRESULT f_sync (FIL* fp); /* Flush cached data of the writing file */ +FRESULT f_opendir (DIR* dp, const TCHAR* path); /* Open a directory */ +FRESULT f_closedir (DIR* dp); /* Close an open directory */ +FRESULT f_readdir (DIR* dp, FILINFO* fno); /* Read a directory item */ +FRESULT f_findfirst (DIR* dp, FILINFO* fno, const TCHAR* path, const TCHAR* pattern); /* Find first file */ +FRESULT f_findnext (DIR* dp, FILINFO* fno); /* Find next file */ +FRESULT f_mkdir (const TCHAR* path); /* Create a sub directory */ +FRESULT f_unlink (const TCHAR* path); /* Delete an existing file or directory */ +FRESULT f_rename (const TCHAR* path_old, const TCHAR* path_new); /* Rename/Move a file or directory */ +FRESULT f_stat (const TCHAR* path, FILINFO* fno); /* Get file status */ +FRESULT f_chmod (const TCHAR* path, BYTE attr, BYTE mask); /* Change attribute of a file/dir */ +FRESULT f_utime (const TCHAR* path, const FILINFO* fno); /* Change timestamp of a file/dir */ +FRESULT f_chdir (const TCHAR* path); /* Change current directory */ +FRESULT f_chdrive (const TCHAR* path); /* Change current drive */ +FRESULT f_getcwd (TCHAR* buff, UINT len); /* Get current directory */ +FRESULT f_getfree (const TCHAR* path, DWORD* nclst, FATFS** fatfs); /* Get number of free clusters on the drive */ +FRESULT f_getlabel (const TCHAR* path, TCHAR* label, DWORD* vsn); /* Get volume label */ +FRESULT f_setlabel (const TCHAR* label); /* Set volume label */ +FRESULT f_forward (FIL* fp, UINT(*func)(const BYTE*,UINT), UINT btf, UINT* bf); /* Forward data to the stream */ +FRESULT f_expand (FIL* fp, FSIZE_t fsz, BYTE opt); /* Allocate a contiguous block to the file */ +FRESULT f_mount (FATFS* fs, const TCHAR* path, BYTE opt); /* Mount/Unmount a logical drive */ +FRESULT f_mkfs (const TCHAR* path, const MKFS_PARM* opt, void* work, UINT len); /* Create a FAT volume */ +FRESULT f_fdisk (BYTE pdrv, const LBA_t ptbl[], void* work); /* Divide a physical drive into some partitions */ +FRESULT f_setcp (WORD cp); /* Set current code page */ +int f_putc (TCHAR c, FIL* fp); /* Put a character to the file */ +int f_puts (const TCHAR* str, FIL* cp); /* Put a string to the file */ +int f_printf (FIL* fp, const TCHAR* str, ...); /* Put a formatted string to the file */ +TCHAR* f_gets (TCHAR* buff, int len, FIL* fp); /* Get a string from the file */ + +#define f_eof(fp) ((int)((fp)->fptr == (fp)->obj.objsize)) +#define f_error(fp) ((fp)->err) +#define f_tell(fp) ((fp)->fptr) +#define f_size(fp) ((fp)->obj.objsize) +#define f_rewind(fp) f_lseek((fp), 0) +#define f_rewinddir(dp) f_readdir((dp), 0) +#define f_rmdir(path) f_unlink(path) +#define f_unmount(path) f_mount(0, path, 0) + + + + +/*--------------------------------------------------------------*/ +/* Additional user defined functions */ + +/* RTC function */ +#if !FF_FS_READONLY && !FF_FS_NORTC +DWORD get_fattime (void); +#endif + +/* LFN support functions */ +#if FF_USE_LFN >= 1 /* Code conversion (defined in unicode.c) */ +WCHAR ff_oem2uni (WCHAR oem, WORD cp); /* OEM code to Unicode conversion */ +WCHAR ff_uni2oem (DWORD uni, WORD cp); /* Unicode to OEM code conversion */ +DWORD ff_wtoupper (DWORD uni); /* Unicode upper-case conversion */ +#endif +#if FF_USE_LFN == 3 /* Dynamic memory allocation */ +void* ff_memalloc (UINT msize); /* Allocate memory block */ +void ff_memfree (void* mblock); /* Free memory block */ +#endif + +/* Sync functions */ +#if FF_FS_REENTRANT +int ff_cre_syncobj (BYTE vol, FF_SYNC_t* sobj); /* Create a sync object */ +int ff_req_grant (FF_SYNC_t sobj); /* Lock sync object */ +void ff_rel_grant (FF_SYNC_t sobj); /* Unlock sync object */ +int ff_del_syncobj (FF_SYNC_t sobj); /* Delete a sync object */ +#endif + + + + +/*--------------------------------------------------------------*/ +/* Flags and offset address */ + + +/* File access mode and open method flags (3rd argument of f_open) */ +#define FA_READ 0x01 +#define FA_WRITE 0x02 +#define FA_OPEN_EXISTING 0x00 +#define FA_CREATE_NEW 0x04 +#define FA_CREATE_ALWAYS 0x08 +#define FA_OPEN_ALWAYS 0x10 +#define FA_OPEN_APPEND 0x30 + +/* Fast seek controls (2nd argument of f_lseek) */ +#define CREATE_LINKMAP ((FSIZE_t)0 - 1) + +/* Format options (2nd argument of f_mkfs) */ +#define FM_FAT 0x01 +#define FM_FAT32 0x02 +#define FM_EXFAT 0x04 +#define FM_ANY 0x07 +#define FM_SFD 0x08 + +/* Filesystem type (FATFS.fs_type) */ +#define FS_FAT12 1 +#define FS_FAT16 2 +#define FS_FAT32 3 +#define FS_EXFAT 4 + +/* File attribute bits for directory entry (FILINFO.fattrib) */ +#define AM_RDO 0x01 /* Read only */ +#define AM_HID 0x02 /* Hidden */ +#define AM_SYS 0x04 /* System */ +#define AM_DIR 0x10 /* Directory */ +#define AM_ARC 0x20 /* Archive */ + + +#ifdef __cplusplus +} +#endif + +#endif /* FF_DEFINED */ diff --git a/MCUME_pico/FatFs_SPI/ff14a/source/ffconf.h b/MCUME_pico/FatFs_SPI/ff14a/source/ffconf.h new file mode 100755 index 0000000..f868164 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/ff14a/source/ffconf.h @@ -0,0 +1,302 @@ +/*---------------------------------------------------------------------------/ +/ FatFs Functional Configurations +/---------------------------------------------------------------------------*/ + +#define FFCONF_DEF 80196 /* Revision ID */ + +/*---------------------------------------------------------------------------/ +/ Function Configurations +/---------------------------------------------------------------------------*/ + +#define FF_FS_READONLY 0 +/* This option switches read-only configuration. (0:Read/Write or 1:Read-only) +/ Read-only configuration removes writing API functions, f_write(), f_sync(), +/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree() +/ and optional writing functions as well. */ + + +#define FF_FS_MINIMIZE 0 +/* This option defines minimization level to remove some basic API functions. +/ +/ 0: Basic functions are fully enabled. +/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename() +/ are removed. +/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1. +/ 3: f_lseek() function is removed in addition to 2. */ + + +#define FF_USE_STRFUNC 1 +/* This option switches string functions, f_gets(), f_putc(), f_puts() and f_printf(). +/ +/ 0: Disable string functions. +/ 1: Enable without LF-CRLF conversion. +/ 2: Enable with LF-CRLF conversion. */ + + +#define FF_USE_FIND 1 +/* This option switches filtered directory read functions, f_findfirst() and +/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */ + + +#define FF_USE_MKFS 1 +/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */ + + +#define FF_USE_FASTSEEK 1 +/* This option switches fast seek function. (0:Disable or 1:Enable) */ + + +#define FF_USE_EXPAND 0 +/* This option switches f_expand function. (0:Disable or 1:Enable) */ + + +#define FF_USE_CHMOD 0 +/* This option switches attribute manipulation functions, f_chmod() and f_utime(). +/ (0:Disable or 1:Enable) Also FF_FS_READONLY needs to be 0 to enable this option. */ + + +#define FF_USE_LABEL 0 +/* This option switches volume label functions, f_getlabel() and f_setlabel(). +/ (0:Disable or 1:Enable) */ + + +#define FF_USE_FORWARD 0 +/* This option switches f_forward() function. (0:Disable or 1:Enable) */ + + +/*---------------------------------------------------------------------------/ +/ Locale and Namespace Configurations +/---------------------------------------------------------------------------*/ + +#define FF_CODE_PAGE 437 +/* This option specifies the OEM code page to be used on the target system. +/ Incorrect code page setting can cause a file open failure. +/ +/ 437 - U.S. +/ 720 - Arabic +/ 737 - Greek +/ 771 - KBL +/ 775 - Baltic +/ 850 - Latin 1 +/ 852 - Latin 2 +/ 855 - Cyrillic +/ 857 - Turkish +/ 860 - Portuguese +/ 861 - Icelandic +/ 862 - Hebrew +/ 863 - Canadian French +/ 864 - Arabic +/ 865 - Nordic +/ 866 - Russian +/ 869 - Greek 2 +/ 932 - Japanese (DBCS) +/ 936 - Simplified Chinese (DBCS) +/ 949 - Korean (DBCS) +/ 950 - Traditional Chinese (DBCS) +/ 0 - Include all code pages above and configured by f_setcp() +*/ + + +#define FF_USE_LFN 3 +#define FF_MAX_LFN 255 +/* The FF_USE_LFN switches the support for LFN (long file name). +/ +/ 0: Disable LFN. FF_MAX_LFN has no effect. +/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe. +/ 2: Enable LFN with dynamic working buffer on the STACK. +/ 3: Enable LFN with dynamic working buffer on the HEAP. +/ +/ To enable the LFN, ffunicode.c needs to be added to the project. The LFN function +/ requiers certain internal working buffer occupies (FF_MAX_LFN + 1) * 2 bytes and +/ additional (FF_MAX_LFN + 44) / 15 * 32 bytes when exFAT is enabled. +/ The FF_MAX_LFN defines size of the working buffer in UTF-16 code unit and it can +/ be in range of 12 to 255. It is recommended to be set it 255 to fully support LFN +/ specification. +/ When use stack for the working buffer, take care on stack overflow. When use heap +/ memory for the working buffer, memory management functions, ff_memalloc() and +/ ff_memfree() exemplified in ffsystem.c, need to be added to the project. */ + + +#define FF_LFN_UNICODE 2 +/* This option switches the character encoding on the API when LFN is enabled. +/ +/ 0: ANSI/OEM in current CP (TCHAR = char) +/ 1: Unicode in UTF-16 (TCHAR = WCHAR) +/ 2: Unicode in UTF-8 (TCHAR = char) +/ 3: Unicode in UTF-32 (TCHAR = DWORD) +/ +/ Also behavior of string I/O functions will be affected by this option. +/ When LFN is not enabled, this option has no effect. */ + + +#define FF_LFN_BUF 255 +#define FF_SFN_BUF 12 +/* This set of options defines size of file name members in the FILINFO structure +/ which is used to read out directory items. These values should be suffcient for +/ the file names to read. The maximum possible length of the read file name depends +/ on character encoding. When LFN is not enabled, these options have no effect. */ + + +#define FF_STRF_ENCODE 3 +/* When FF_LFN_UNICODE >= 1 with LFN enabled, string I/O functions, f_gets(), +/ f_putc(), f_puts and f_printf() convert the character encoding in it. +/ This option selects assumption of character encoding ON THE FILE to be +/ read/written via those functions. +/ +/ 0: ANSI/OEM in current CP +/ 1: Unicode in UTF-16LE +/ 2: Unicode in UTF-16BE +/ 3: Unicode in UTF-8 +*/ + + +#define FF_FS_RPATH 2 +/* This option configures support for relative path. +/ +/ 0: Disable relative path and remove related functions. +/ 1: Enable relative path. f_chdir() and f_chdrive() are available. +/ 2: f_getcwd() function is available in addition to 1. +*/ + + +/*---------------------------------------------------------------------------/ +/ Drive/Volume Configurations +/---------------------------------------------------------------------------*/ + +#if defined N_SD_CARDS +# define FF_VOLUMES N_SD_CARDS +#else +# define FF_VOLUMES 1 +#endif +/* Number of volumes (logical drives) to be used. (1-10) */ + + +#define FF_STR_VOLUME_ID 0 +#define FF_VOLUME_STRS "RAM","NAND","CF","SD","SD2","USB","USB2","USB3" +/* FF_STR_VOLUME_ID switches support for volume ID in arbitrary strings. +/ When FF_STR_VOLUME_ID is set to 1 or 2, arbitrary strings can be used as drive +/ number in the path name. FF_VOLUME_STRS defines the volume ID strings for each +/ logical drives. Number of items must not be less than FF_VOLUMES. Valid +/ characters for the volume ID strings are A-Z, a-z and 0-9, however, they are +/ compared in case-insensitive. If FF_STR_VOLUME_ID >= 1 and FF_VOLUME_STRS is +/ not defined, a user defined volume string table needs to be defined as: +/ +/ const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb",... +*/ + + +#define FF_MULTI_PARTITION 0 +/* This option switches support for multiple volumes on the physical drive. +/ By default (0), each logical drive number is bound to the same physical drive +/ number and only an FAT volume found on the physical drive will be mounted. +/ When this function is enabled (1), each logical drive number can be bound to +/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk() +/ funciton will be available. */ + + +#define FF_MIN_SS 512 +#define FF_MAX_SS 512 +/* This set of options configures the range of sector size to be supported. (512, +/ 1024, 2048 or 4096) Always set both 512 for most systems, generic memory card and +/ harddisk. But a larger value may be required for on-board flash memory and some +/ type of optical media. When FF_MAX_SS is larger than FF_MIN_SS, FatFs is configured +/ for variable sector size mode and disk_ioctl() function needs to implement +/ GET_SECTOR_SIZE command. */ + + +#define FF_LBA64 1 +/* This option switches support for 64-bit LBA. (0:Disable or 1:Enable) +/ To enable the 64-bit LBA, also exFAT needs to be enabled. (FF_FS_EXFAT == 1) */ + + +#define FF_MIN_GPT 0x10000000 +/* Minimum number of sectors to switch GPT as partitioning format in f_mkfs and +/ f_fdisk function. 0x100000000 max. This option has no effect when FF_LBA64 == 0. */ + + +#define FF_USE_TRIM 0 +/* This option switches support for ATA-TRIM. (0:Disable or 1:Enable) +/ To enable Trim function, also CTRL_TRIM command should be implemented to the +/ disk_ioctl() function. */ + + + +/*---------------------------------------------------------------------------/ +/ System Configurations +/---------------------------------------------------------------------------*/ + +#define FF_FS_TINY 0 +/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny) +/ At the tiny configuration, size of file object (FIL) is shrinked FF_MAX_SS bytes. +/ Instead of private sector buffer eliminated from the file object, common sector +/ buffer in the filesystem object (FATFS) is used for the file data transfer. */ + + +#define FF_FS_EXFAT 1 +/* This option switches support for exFAT filesystem. (0:Disable or 1:Enable) +/ To enable exFAT, also LFN needs to be enabled. (FF_USE_LFN >= 1) +/ Note that enabling exFAT discards ANSI C (C89) compatibility. */ + + +#define FF_FS_NORTC 0 +#define FF_NORTC_MON 1 +#define FF_NORTC_MDAY 1 +#define FF_NORTC_YEAR 2020 +/* The option FF_FS_NORTC switches timestamp functiton. If the system does not have +/ any RTC function or valid timestamp is not needed, set FF_FS_NORTC = 1 to disable +/ the timestamp function. Every object modified by FatFs will have a fixed timestamp +/ defined by FF_NORTC_MON, FF_NORTC_MDAY and FF_NORTC_YEAR in local time. +/ To enable timestamp function (FF_FS_NORTC = 0), get_fattime() function need to be +/ added to the project to read current time form real-time clock. FF_NORTC_MON, +/ FF_NORTC_MDAY and FF_NORTC_YEAR have no effect. +/ These options have no effect in read-only configuration (FF_FS_READONLY = 1). */ + + +#define FF_FS_NOFSINFO 0 +/* If you need to know correct free space on the FAT32 volume, set bit 0 of this +/ option, and f_getfree() function at first time after volume mount will force +/ a full FAT scan. Bit 1 controls the use of last allocated cluster number. +/ +/ bit0=0: Use free cluster count in the FSINFO if available. +/ bit0=1: Do not trust free cluster count in the FSINFO. +/ bit1=0: Use last allocated cluster number in the FSINFO if available. +/ bit1=1: Do not trust last allocated cluster number in the FSINFO. +*/ + + +#define FF_FS_LOCK 0 // Note: 0 since we're not bothering with f_closedir +/* The option FF_FS_LOCK switches file lock function to control duplicated file open +/ and illegal operation to open objects. This option must be 0 when FF_FS_READONLY +/ is 1. +/ +/ 0: Disable file lock function. To avoid volume corruption, application program +/ should avoid illegal open, remove and rename to the open objects. +/ >0: Enable file lock function. The value defines how many files/sub-directories +/ can be opened simultaneously under file lock control. Note that the file +/ lock control is independent of re-entrancy. */ + + +/* #include // O/S definitions */ +#define FF_FS_REENTRANT 0 +#define FF_FS_TIMEOUT 1000 +#define FF_SYNC_t HANDLE +/* The option FF_FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs +/ module itself. Note that regardless of this option, file access to different +/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs() +/ and f_fdisk() function, are always not re-entrant. Only file/directory access +/ to the same volume is under control of this function. +/ +/ 0: Disable re-entrancy. FF_FS_TIMEOUT and FF_SYNC_t have no effect. +/ 1: Enable re-entrancy. Also user provided synchronization handlers, +/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj() +/ function, must be added to the project. Samples are available in +/ option/syscall.c. +/ +/ The FF_FS_TIMEOUT defines timeout period in unit of time tick. +/ The FF_SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*, +/ SemaphoreHandle_t and etc. A header file for O/S definitions needs to be +/ included somewhere in the scope of ff.h. */ + + + +/*--- End of configuration options ---*/ diff --git a/MCUME_pico/FatFs_SPI/ff14a/source/ffsystem.c b/MCUME_pico/FatFs_SPI/ff14a/source/ffsystem.c new file mode 100755 index 0000000..e45ea2f --- /dev/null +++ b/MCUME_pico/FatFs_SPI/ff14a/source/ffsystem.c @@ -0,0 +1,171 @@ +/*------------------------------------------------------------------------*/ +/* Sample Code of OS Dependent Functions for FatFs */ +/* (C)ChaN, 2018 */ +/*------------------------------------------------------------------------*/ + +#include +// +#include "ff.h" + + +#if FF_USE_LFN == 3 /* Dynamic memory allocation */ + +/*------------------------------------------------------------------------*/ +/* Allocate a memory block */ +/*------------------------------------------------------------------------*/ + +void* ff_memalloc ( /* Returns pointer to the allocated memory block (null if not enough core) */ + UINT msize /* Number of bytes to allocate */ +) +{ + return malloc(msize); /* Allocate a new memory block with POSIX API */ +} + + +/*------------------------------------------------------------------------*/ +/* Free a memory block */ +/*------------------------------------------------------------------------*/ + +void ff_memfree ( + void* mblock /* Pointer to the memory block to free (nothing to do if null) */ +) +{ + free(mblock); /* Free the memory block with POSIX API */ +} + +#endif + + + +#if FF_FS_REENTRANT /* Mutal exclusion */ + +/*------------------------------------------------------------------------*/ +/* Create a Synchronization Object */ +/*------------------------------------------------------------------------*/ +/* This function is called in f_mount() function to create a new +/ synchronization object for the volume, such as semaphore and mutex. +/ When a 0 is returned, the f_mount() function fails with FR_INT_ERR. +*/ + +//const osMutexDef_t Mutex[FF_VOLUMES]; /* Table of CMSIS-RTOS mutex */ + + +int ff_cre_syncobj ( /* 1:Function succeeded, 0:Could not create the sync object */ + BYTE vol, /* Corresponding volume (logical drive number) */ + FF_SYNC_t* sobj /* Pointer to return the created sync object */ +) +{ + /* Win32 */ + *sobj = CreateMutex(NULL, FALSE, NULL); + return (int)(*sobj != INVALID_HANDLE_VALUE); + + /* uITRON */ +// T_CSEM csem = {TA_TPRI,1,1}; +// *sobj = acre_sem(&csem); +// return (int)(*sobj > 0); + + /* uC/OS-II */ +// OS_ERR err; +// *sobj = OSMutexCreate(0, &err); +// return (int)(err == OS_NO_ERR); + + /* FreeRTOS */ +// *sobj = xSemaphoreCreateMutex(); +// return (int)(*sobj != NULL); + + /* CMSIS-RTOS */ +// *sobj = osMutexCreate(&Mutex[vol]); +// return (int)(*sobj != NULL); +} + + +/*------------------------------------------------------------------------*/ +/* Delete a Synchronization Object */ +/*------------------------------------------------------------------------*/ +/* This function is called in f_mount() function to delete a synchronization +/ object that created with ff_cre_syncobj() function. When a 0 is returned, +/ the f_mount() function fails with FR_INT_ERR. +*/ + +int ff_del_syncobj ( /* 1:Function succeeded, 0:Could not delete due to an error */ + FF_SYNC_t sobj /* Sync object tied to the logical drive to be deleted */ +) +{ + /* Win32 */ + return (int)CloseHandle(sobj); + + /* uITRON */ +// return (int)(del_sem(sobj) == E_OK); + + /* uC/OS-II */ +// OS_ERR err; +// OSMutexDel(sobj, OS_DEL_ALWAYS, &err); +// return (int)(err == OS_NO_ERR); + + /* FreeRTOS */ +// vSemaphoreDelete(sobj); +// return 1; + + /* CMSIS-RTOS */ +// return (int)(osMutexDelete(sobj) == osOK); +} + + +/*------------------------------------------------------------------------*/ +/* Request Grant to Access the Volume */ +/*------------------------------------------------------------------------*/ +/* This function is called on entering file functions to lock the volume. +/ When a 0 is returned, the file function fails with FR_TIMEOUT. +*/ + +int ff_req_grant ( /* 1:Got a grant to access the volume, 0:Could not get a grant */ + FF_SYNC_t sobj /* Sync object to wait */ +) +{ + /* Win32 */ + return (int)(WaitForSingleObject(sobj, FF_FS_TIMEOUT) == WAIT_OBJECT_0); + + /* uITRON */ +// return (int)(wai_sem(sobj) == E_OK); + + /* uC/OS-II */ +// OS_ERR err; +// OSMutexPend(sobj, FF_FS_TIMEOUT, &err)); +// return (int)(err == OS_NO_ERR); + + /* FreeRTOS */ +// return (int)(xSemaphoreTake(sobj, FF_FS_TIMEOUT) == pdTRUE); + + /* CMSIS-RTOS */ +// return (int)(osMutexWait(sobj, FF_FS_TIMEOUT) == osOK); +} + + +/*------------------------------------------------------------------------*/ +/* Release Grant to Access the Volume */ +/*------------------------------------------------------------------------*/ +/* This function is called on leaving file functions to unlock the volume. +*/ + +void ff_rel_grant ( + FF_SYNC_t sobj /* Sync object to be signaled */ +) +{ + /* Win32 */ + ReleaseMutex(sobj); + + /* uITRON */ +// sig_sem(sobj); + + /* uC/OS-II */ +// OSMutexPost(sobj); + + /* FreeRTOS */ +// xSemaphoreGive(sobj); + + /* CMSIS-RTOS */ +// osMutexRelease(sobj); +} + +#endif + diff --git a/MCUME_pico/FatFs_SPI/ff14a/source/ffunicode.c b/MCUME_pico/FatFs_SPI/ff14a/source/ffunicode.c new file mode 100755 index 0000000..784a10e --- /dev/null +++ b/MCUME_pico/FatFs_SPI/ff14a/source/ffunicode.c @@ -0,0 +1,15593 @@ +/*------------------------------------------------------------------------*/ +/* Unicode handling functions for FatFs R0.13+ */ +/*------------------------------------------------------------------------*/ +/* This module will occupy a huge memory in the .const section when the / +/ FatFs is configured for LFN with DBCS. If the system has any Unicode / +/ utilitiy for the code conversion, this module should be modified to use / +/ that function to avoid silly memory consumption. / +/-------------------------------------------------------------------------*/ +/* +/ Copyright (C) 2014, ChaN, all right reserved. +/ +/ FatFs module is an open source software. Redistribution and use of FatFs in +/ source and binary forms, with or without modification, are permitted provided +/ that the following condition is met: +/ +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +*/ + + +#include "ff.h" + +#if FF_USE_LFN /* This module will be blanked if non-LFN configuration */ + +#define MERGE2(a, b) a ## b +#define CVTBL(tbl, cp) MERGE2(tbl, cp) + + +/*------------------------------------------------------------------------*/ +/* Code Conversion Tables */ +/*------------------------------------------------------------------------*/ + +#if FF_CODE_PAGE == 932 || FF_CODE_PAGE == 0 /* Japanese */ +static const WCHAR uni2oem932[] = { /* Unicode --> Shift_JIS pairs */ + 0x00A7, 0x8198, 0x00A8, 0x814E, 0x00B0, 0x818B, 0x00B1, 0x817D, 0x00B4, 0x814C, 0x00B6, 0x81F7, 0x00D7, 0x817E, 0x00F7, 0x8180, + 0x0391, 0x839F, 0x0392, 0x83A0, 0x0393, 0x83A1, 0x0394, 0x83A2, 0x0395, 0x83A3, 0x0396, 0x83A4, 0x0397, 0x83A5, 0x0398, 0x83A6, + 0x0399, 0x83A7, 0x039A, 0x83A8, 0x039B, 0x83A9, 0x039C, 0x83AA, 0x039D, 0x83AB, 0x039E, 0x83AC, 0x039F, 0x83AD, 0x03A0, 0x83AE, + 0x03A1, 0x83AF, 0x03A3, 0x83B0, 0x03A4, 0x83B1, 0x03A5, 0x83B2, 0x03A6, 0x83B3, 0x03A7, 0x83B4, 0x03A8, 0x83B5, 0x03A9, 0x83B6, + 0x03B1, 0x83BF, 0x03B2, 0x83C0, 0x03B3, 0x83C1, 0x03B4, 0x83C2, 0x03B5, 0x83C3, 0x03B6, 0x83C4, 0x03B7, 0x83C5, 0x03B8, 0x83C6, + 0x03B9, 0x83C7, 0x03BA, 0x83C8, 0x03BB, 0x83C9, 0x03BC, 0x83CA, 0x03BD, 0x83CB, 0x03BE, 0x83CC, 0x03BF, 0x83CD, 0x03C0, 0x83CE, + 0x03C1, 0x83CF, 0x03C3, 0x83D0, 0x03C4, 0x83D1, 0x03C5, 0x83D2, 0x03C6, 0x83D3, 0x03C7, 0x83D4, 0x03C8, 0x83D5, 0x03C9, 0x83D6, + 0x0401, 0x8446, 0x0410, 0x8440, 0x0411, 0x8441, 0x0412, 0x8442, 0x0413, 0x8443, 0x0414, 0x8444, 0x0415, 0x8445, 0x0416, 0x8447, + 0x0417, 0x8448, 0x0418, 0x8449, 0x0419, 0x844A, 0x041A, 0x844B, 0x041B, 0x844C, 0x041C, 0x844D, 0x041D, 0x844E, 0x041E, 0x844F, + 0x041F, 0x8450, 0x0420, 0x8451, 0x0421, 0x8452, 0x0422, 0x8453, 0x0423, 0x8454, 0x0424, 0x8455, 0x0425, 0x8456, 0x0426, 0x8457, + 0x0427, 0x8458, 0x0428, 0x8459, 0x0429, 0x845A, 0x042A, 0x845B, 0x042B, 0x845C, 0x042C, 0x845D, 0x042D, 0x845E, 0x042E, 0x845F, + 0x042F, 0x8460, 0x0430, 0x8470, 0x0431, 0x8471, 0x0432, 0x8472, 0x0433, 0x8473, 0x0434, 0x8474, 0x0435, 0x8475, 0x0436, 0x8477, + 0x0437, 0x8478, 0x0438, 0x8479, 0x0439, 0x847A, 0x043A, 0x847B, 0x043B, 0x847C, 0x043C, 0x847D, 0x043D, 0x847E, 0x043E, 0x8480, + 0x043F, 0x8481, 0x0440, 0x8482, 0x0441, 0x8483, 0x0442, 0x8484, 0x0443, 0x8485, 0x0444, 0x8486, 0x0445, 0x8487, 0x0446, 0x8488, + 0x0447, 0x8489, 0x0448, 0x848A, 0x0449, 0x848B, 0x044A, 0x848C, 0x044B, 0x848D, 0x044C, 0x848E, 0x044D, 0x848F, 0x044E, 0x8490, + 0x044F, 0x8491, 0x0451, 0x8476, 0x2010, 0x815D, 0x2015, 0x815C, 0x2018, 0x8165, 0x2019, 0x8166, 0x201C, 0x8167, 0x201D, 0x8168, + 0x2020, 0x81F5, 0x2021, 0x81F6, 0x2025, 0x8164, 0x2026, 0x8163, 0x2030, 0x81F1, 0x2032, 0x818C, 0x2033, 0x818D, 0x203B, 0x81A6, + 0x2103, 0x818E, 0x2116, 0x8782, 0x2121, 0x8784, 0x212B, 0x81F0, 0x2160, 0x8754, 0x2161, 0x8755, 0x2162, 0x8756, 0x2163, 0x8757, + 0x2164, 0x8758, 0x2165, 0x8759, 0x2166, 0x875A, 0x2167, 0x875B, 0x2168, 0x875C, 0x2169, 0x875D, 0x2170, 0xFA40, 0x2171, 0xFA41, + 0x2172, 0xFA42, 0x2173, 0xFA43, 0x2174, 0xFA44, 0x2175, 0xFA45, 0x2176, 0xFA46, 0x2177, 0xFA47, 0x2178, 0xFA48, 0x2179, 0xFA49, + 0x2190, 0x81A9, 0x2191, 0x81AA, 0x2192, 0x81A8, 0x2193, 0x81AB, 0x21D2, 0x81CB, 0x21D4, 0x81CC, 0x2200, 0x81CD, 0x2202, 0x81DD, + 0x2203, 0x81CE, 0x2207, 0x81DE, 0x2208, 0x81B8, 0x220B, 0x81B9, 0x2211, 0x8794, 0x221A, 0x81E3, 0x221D, 0x81E5, 0x221E, 0x8187, + 0x221F, 0x8798, 0x2220, 0x81DA, 0x2225, 0x8161, 0x2227, 0x81C8, 0x2228, 0x81C9, 0x2229, 0x81BF, 0x222A, 0x81BE, 0x222B, 0x81E7, + 0x222C, 0x81E8, 0x222E, 0x8793, 0x2234, 0x8188, 0x2235, 0x81E6, 0x223D, 0x81E4, 0x2252, 0x81E0, 0x2260, 0x8182, 0x2261, 0x81DF, + 0x2266, 0x8185, 0x2267, 0x8186, 0x226A, 0x81E1, 0x226B, 0x81E2, 0x2282, 0x81BC, 0x2283, 0x81BD, 0x2286, 0x81BA, 0x2287, 0x81BB, + 0x22A5, 0x81DB, 0x22BF, 0x8799, 0x2312, 0x81DC, 0x2460, 0x8740, 0x2461, 0x8741, 0x2462, 0x8742, 0x2463, 0x8743, 0x2464, 0x8744, + 0x2465, 0x8745, 0x2466, 0x8746, 0x2467, 0x8747, 0x2468, 0x8748, 0x2469, 0x8749, 0x246A, 0x874A, 0x246B, 0x874B, 0x246C, 0x874C, + 0x246D, 0x874D, 0x246E, 0x874E, 0x246F, 0x874F, 0x2470, 0x8750, 0x2471, 0x8751, 0x2472, 0x8752, 0x2473, 0x8753, 0x2500, 0x849F, + 0x2501, 0x84AA, 0x2502, 0x84A0, 0x2503, 0x84AB, 0x250C, 0x84A1, 0x250F, 0x84AC, 0x2510, 0x84A2, 0x2513, 0x84AD, 0x2514, 0x84A4, + 0x2517, 0x84AF, 0x2518, 0x84A3, 0x251B, 0x84AE, 0x251C, 0x84A5, 0x251D, 0x84BA, 0x2520, 0x84B5, 0x2523, 0x84B0, 0x2524, 0x84A7, + 0x2525, 0x84BC, 0x2528, 0x84B7, 0x252B, 0x84B2, 0x252C, 0x84A6, 0x252F, 0x84B6, 0x2530, 0x84BB, 0x2533, 0x84B1, 0x2534, 0x84A8, + 0x2537, 0x84B8, 0x2538, 0x84BD, 0x253B, 0x84B3, 0x253C, 0x84A9, 0x253F, 0x84B9, 0x2542, 0x84BE, 0x254B, 0x84B4, 0x25A0, 0x81A1, + 0x25A1, 0x81A0, 0x25B2, 0x81A3, 0x25B3, 0x81A2, 0x25BC, 0x81A5, 0x25BD, 0x81A4, 0x25C6, 0x819F, 0x25C7, 0x819E, 0x25CB, 0x819B, + 0x25CE, 0x819D, 0x25CF, 0x819C, 0x25EF, 0x81FC, 0x2605, 0x819A, 0x2606, 0x8199, 0x2640, 0x818A, 0x2642, 0x8189, 0x266A, 0x81F4, + 0x266D, 0x81F3, 0x266F, 0x81F2, 0x3000, 0x8140, 0x3001, 0x8141, 0x3002, 0x8142, 0x3003, 0x8156, 0x3005, 0x8158, 0x3006, 0x8159, + 0x3007, 0x815A, 0x3008, 0x8171, 0x3009, 0x8172, 0x300A, 0x8173, 0x300B, 0x8174, 0x300C, 0x8175, 0x300D, 0x8176, 0x300E, 0x8177, + 0x300F, 0x8178, 0x3010, 0x8179, 0x3011, 0x817A, 0x3012, 0x81A7, 0x3013, 0x81AC, 0x3014, 0x816B, 0x3015, 0x816C, 0x301D, 0x8780, + 0x301F, 0x8781, 0x3041, 0x829F, 0x3042, 0x82A0, 0x3043, 0x82A1, 0x3044, 0x82A2, 0x3045, 0x82A3, 0x3046, 0x82A4, 0x3047, 0x82A5, + 0x3048, 0x82A6, 0x3049, 0x82A7, 0x304A, 0x82A8, 0x304B, 0x82A9, 0x304C, 0x82AA, 0x304D, 0x82AB, 0x304E, 0x82AC, 0x304F, 0x82AD, + 0x3050, 0x82AE, 0x3051, 0x82AF, 0x3052, 0x82B0, 0x3053, 0x82B1, 0x3054, 0x82B2, 0x3055, 0x82B3, 0x3056, 0x82B4, 0x3057, 0x82B5, + 0x3058, 0x82B6, 0x3059, 0x82B7, 0x305A, 0x82B8, 0x305B, 0x82B9, 0x305C, 0x82BA, 0x305D, 0x82BB, 0x305E, 0x82BC, 0x305F, 0x82BD, + 0x3060, 0x82BE, 0x3061, 0x82BF, 0x3062, 0x82C0, 0x3063, 0x82C1, 0x3064, 0x82C2, 0x3065, 0x82C3, 0x3066, 0x82C4, 0x3067, 0x82C5, + 0x3068, 0x82C6, 0x3069, 0x82C7, 0x306A, 0x82C8, 0x306B, 0x82C9, 0x306C, 0x82CA, 0x306D, 0x82CB, 0x306E, 0x82CC, 0x306F, 0x82CD, + 0x3070, 0x82CE, 0x3071, 0x82CF, 0x3072, 0x82D0, 0x3073, 0x82D1, 0x3074, 0x82D2, 0x3075, 0x82D3, 0x3076, 0x82D4, 0x3077, 0x82D5, + 0x3078, 0x82D6, 0x3079, 0x82D7, 0x307A, 0x82D8, 0x307B, 0x82D9, 0x307C, 0x82DA, 0x307D, 0x82DB, 0x307E, 0x82DC, 0x307F, 0x82DD, + 0x3080, 0x82DE, 0x3081, 0x82DF, 0x3082, 0x82E0, 0x3083, 0x82E1, 0x3084, 0x82E2, 0x3085, 0x82E3, 0x3086, 0x82E4, 0x3087, 0x82E5, + 0x3088, 0x82E6, 0x3089, 0x82E7, 0x308A, 0x82E8, 0x308B, 0x82E9, 0x308C, 0x82EA, 0x308D, 0x82EB, 0x308E, 0x82EC, 0x308F, 0x82ED, + 0x3090, 0x82EE, 0x3091, 0x82EF, 0x3092, 0x82F0, 0x3093, 0x82F1, 0x309B, 0x814A, 0x309C, 0x814B, 0x309D, 0x8154, 0x309E, 0x8155, + 0x30A1, 0x8340, 0x30A2, 0x8341, 0x30A3, 0x8342, 0x30A4, 0x8343, 0x30A5, 0x8344, 0x30A6, 0x8345, 0x30A7, 0x8346, 0x30A8, 0x8347, + 0x30A9, 0x8348, 0x30AA, 0x8349, 0x30AB, 0x834A, 0x30AC, 0x834B, 0x30AD, 0x834C, 0x30AE, 0x834D, 0x30AF, 0x834E, 0x30B0, 0x834F, + 0x30B1, 0x8350, 0x30B2, 0x8351, 0x30B3, 0x8352, 0x30B4, 0x8353, 0x30B5, 0x8354, 0x30B6, 0x8355, 0x30B7, 0x8356, 0x30B8, 0x8357, + 0x30B9, 0x8358, 0x30BA, 0x8359, 0x30BB, 0x835A, 0x30BC, 0x835B, 0x30BD, 0x835C, 0x30BE, 0x835D, 0x30BF, 0x835E, 0x30C0, 0x835F, + 0x30C1, 0x8360, 0x30C2, 0x8361, 0x30C3, 0x8362, 0x30C4, 0x8363, 0x30C5, 0x8364, 0x30C6, 0x8365, 0x30C7, 0x8366, 0x30C8, 0x8367, + 0x30C9, 0x8368, 0x30CA, 0x8369, 0x30CB, 0x836A, 0x30CC, 0x836B, 0x30CD, 0x836C, 0x30CE, 0x836D, 0x30CF, 0x836E, 0x30D0, 0x836F, + 0x30D1, 0x8370, 0x30D2, 0x8371, 0x30D3, 0x8372, 0x30D4, 0x8373, 0x30D5, 0x8374, 0x30D6, 0x8375, 0x30D7, 0x8376, 0x30D8, 0x8377, + 0x30D9, 0x8378, 0x30DA, 0x8379, 0x30DB, 0x837A, 0x30DC, 0x837B, 0x30DD, 0x837C, 0x30DE, 0x837D, 0x30DF, 0x837E, 0x30E0, 0x8380, + 0x30E1, 0x8381, 0x30E2, 0x8382, 0x30E3, 0x8383, 0x30E4, 0x8384, 0x30E5, 0x8385, 0x30E6, 0x8386, 0x30E7, 0x8387, 0x30E8, 0x8388, + 0x30E9, 0x8389, 0x30EA, 0x838A, 0x30EB, 0x838B, 0x30EC, 0x838C, 0x30ED, 0x838D, 0x30EE, 0x838E, 0x30EF, 0x838F, 0x30F0, 0x8390, + 0x30F1, 0x8391, 0x30F2, 0x8392, 0x30F3, 0x8393, 0x30F4, 0x8394, 0x30F5, 0x8395, 0x30F6, 0x8396, 0x30FB, 0x8145, 0x30FC, 0x815B, + 0x30FD, 0x8152, 0x30FE, 0x8153, 0x3231, 0x878A, 0x3232, 0x878B, 0x3239, 0x878C, 0x32A4, 0x8785, 0x32A5, 0x8786, 0x32A6, 0x8787, + 0x32A7, 0x8788, 0x32A8, 0x8789, 0x3303, 0x8765, 0x330D, 0x8769, 0x3314, 0x8760, 0x3318, 0x8763, 0x3322, 0x8761, 0x3323, 0x876B, + 0x3326, 0x876A, 0x3327, 0x8764, 0x332B, 0x876C, 0x3336, 0x8766, 0x333B, 0x876E, 0x3349, 0x875F, 0x334A, 0x876D, 0x334D, 0x8762, + 0x3351, 0x8767, 0x3357, 0x8768, 0x337B, 0x877E, 0x337C, 0x878F, 0x337D, 0x878E, 0x337E, 0x878D, 0x338E, 0x8772, 0x338F, 0x8773, + 0x339C, 0x876F, 0x339D, 0x8770, 0x339E, 0x8771, 0x33A1, 0x8775, 0x33C4, 0x8774, 0x33CD, 0x8783, 0x4E00, 0x88EA, 0x4E01, 0x929A, + 0x4E03, 0x8EB5, 0x4E07, 0x969C, 0x4E08, 0x8FE4, 0x4E09, 0x8E4F, 0x4E0A, 0x8FE3, 0x4E0B, 0x89BA, 0x4E0D, 0x9573, 0x4E0E, 0x975E, + 0x4E10, 0x98A0, 0x4E11, 0x894E, 0x4E14, 0x8A8E, 0x4E15, 0x98A1, 0x4E16, 0x90A2, 0x4E17, 0x99C0, 0x4E18, 0x8B75, 0x4E19, 0x95B8, + 0x4E1E, 0x8FE5, 0x4E21, 0x97BC, 0x4E26, 0x95C0, 0x4E28, 0xFA68, 0x4E2A, 0x98A2, 0x4E2D, 0x9286, 0x4E31, 0x98A3, 0x4E32, 0x8BF8, + 0x4E36, 0x98A4, 0x4E38, 0x8ADB, 0x4E39, 0x924F, 0x4E3B, 0x8EE5, 0x4E3C, 0x98A5, 0x4E3F, 0x98A6, 0x4E42, 0x98A7, 0x4E43, 0x9454, + 0x4E45, 0x8B76, 0x4E4B, 0x9456, 0x4E4D, 0x93E1, 0x4E4E, 0x8CC1, 0x4E4F, 0x9652, 0x4E55, 0xE568, 0x4E56, 0x98A8, 0x4E57, 0x8FE6, + 0x4E58, 0x98A9, 0x4E59, 0x89B3, 0x4E5D, 0x8BE3, 0x4E5E, 0x8CEE, 0x4E5F, 0x96E7, 0x4E62, 0x9BA4, 0x4E71, 0x9790, 0x4E73, 0x93FB, + 0x4E7E, 0x8AA3, 0x4E80, 0x8B54, 0x4E82, 0x98AA, 0x4E85, 0x98AB, 0x4E86, 0x97B9, 0x4E88, 0x975C, 0x4E89, 0x9188, 0x4E8A, 0x98AD, + 0x4E8B, 0x8E96, 0x4E8C, 0x93F1, 0x4E8E, 0x98B0, 0x4E91, 0x895D, 0x4E92, 0x8CDD, 0x4E94, 0x8CDC, 0x4E95, 0x88E4, 0x4E98, 0x986A, + 0x4E99, 0x9869, 0x4E9B, 0x8DB1, 0x4E9C, 0x889F, 0x4E9E, 0x98B1, 0x4E9F, 0x98B2, 0x4EA0, 0x98B3, 0x4EA1, 0x9653, 0x4EA2, 0x98B4, + 0x4EA4, 0x8CF0, 0x4EA5, 0x88E5, 0x4EA6, 0x9692, 0x4EA8, 0x8B9C, 0x4EAB, 0x8B9D, 0x4EAC, 0x8B9E, 0x4EAD, 0x92E0, 0x4EAE, 0x97BA, + 0x4EB0, 0x98B5, 0x4EB3, 0x98B6, 0x4EB6, 0x98B7, 0x4EBA, 0x906C, 0x4EC0, 0x8F59, 0x4EC1, 0x906D, 0x4EC2, 0x98BC, 0x4EC4, 0x98BA, + 0x4EC6, 0x98BB, 0x4EC7, 0x8B77, 0x4ECA, 0x8DA1, 0x4ECB, 0x89EE, 0x4ECD, 0x98B9, 0x4ECE, 0x98B8, 0x4ECF, 0x95A7, 0x4ED4, 0x8E65, + 0x4ED5, 0x8E64, 0x4ED6, 0x91BC, 0x4ED7, 0x98BD, 0x4ED8, 0x9574, 0x4ED9, 0x90E5, 0x4EDD, 0x8157, 0x4EDE, 0x98BE, 0x4EDF, 0x98C0, + 0x4EE1, 0xFA69, 0x4EE3, 0x91E3, 0x4EE4, 0x97DF, 0x4EE5, 0x88C8, 0x4EED, 0x98BF, 0x4EEE, 0x89BC, 0x4EF0, 0x8BC2, 0x4EF2, 0x9287, + 0x4EF6, 0x8C8F, 0x4EF7, 0x98C1, 0x4EFB, 0x9443, 0x4EFC, 0xFA6A, 0x4F00, 0xFA6B, 0x4F01, 0x8AE9, 0x4F03, 0xFA6C, 0x4F09, 0x98C2, + 0x4F0A, 0x88C9, 0x4F0D, 0x8CDE, 0x4F0E, 0x8AEA, 0x4F0F, 0x959A, 0x4F10, 0x94B0, 0x4F11, 0x8B78, 0x4F1A, 0x89EF, 0x4F1C, 0x98E5, + 0x4F1D, 0x9360, 0x4F2F, 0x948C, 0x4F30, 0x98C4, 0x4F34, 0x94BA, 0x4F36, 0x97E0, 0x4F38, 0x904C, 0x4F39, 0xFA6D, 0x4F3A, 0x8E66, + 0x4F3C, 0x8E97, 0x4F3D, 0x89BE, 0x4F43, 0x92CF, 0x4F46, 0x9241, 0x4F47, 0x98C8, 0x4F4D, 0x88CA, 0x4F4E, 0x92E1, 0x4F4F, 0x8F5A, + 0x4F50, 0x8DB2, 0x4F51, 0x9743, 0x4F53, 0x91CC, 0x4F55, 0x89BD, 0x4F56, 0xFA6E, 0x4F57, 0x98C7, 0x4F59, 0x975D, 0x4F5A, 0x98C3, + 0x4F5B, 0x98C5, 0x4F5C, 0x8DEC, 0x4F5D, 0x98C6, 0x4F5E, 0x9B43, 0x4F69, 0x98CE, 0x4F6F, 0x98D1, 0x4F70, 0x98CF, 0x4F73, 0x89C0, + 0x4F75, 0x95B9, 0x4F76, 0x98C9, 0x4F7B, 0x98CD, 0x4F7C, 0x8CF1, 0x4F7F, 0x8E67, 0x4F83, 0x8AA4, 0x4F86, 0x98D2, 0x4F88, 0x98CA, + 0x4F8A, 0xFA70, 0x4F8B, 0x97E1, 0x4F8D, 0x8E98, 0x4F8F, 0x98CB, 0x4F91, 0x98D0, 0x4F92, 0xFA6F, 0x4F94, 0xFA72, 0x4F96, 0x98D3, + 0x4F98, 0x98CC, 0x4F9A, 0xFA71, 0x4F9B, 0x8B9F, 0x4F9D, 0x88CB, 0x4FA0, 0x8BA0, 0x4FA1, 0x89BF, 0x4FAB, 0x9B44, 0x4FAD, 0x9699, + 0x4FAE, 0x958E, 0x4FAF, 0x8CF2, 0x4FB5, 0x904E, 0x4FB6, 0x97B5, 0x4FBF, 0x95D6, 0x4FC2, 0x8C57, 0x4FC3, 0x91A3, 0x4FC4, 0x89E2, + 0x4FC9, 0xFA61, 0x4FCA, 0x8F72, 0x4FCD, 0xFA73, 0x4FCE, 0x98D7, 0x4FD0, 0x98DC, 0x4FD1, 0x98DA, 0x4FD4, 0x98D5, 0x4FD7, 0x91AD, + 0x4FD8, 0x98D8, 0x4FDA, 0x98DB, 0x4FDB, 0x98D9, 0x4FDD, 0x95DB, 0x4FDF, 0x98D6, 0x4FE1, 0x904D, 0x4FE3, 0x9693, 0x4FE4, 0x98DD, + 0x4FE5, 0x98DE, 0x4FEE, 0x8F43, 0x4FEF, 0x98EB, 0x4FF3, 0x946F, 0x4FF5, 0x9555, 0x4FF6, 0x98E6, 0x4FF8, 0x95EE, 0x4FFA, 0x89B4, + 0x4FFE, 0x98EA, 0x4FFF, 0xFA76, 0x5005, 0x98E4, 0x5006, 0x98ED, 0x5009, 0x9171, 0x500B, 0x8CC2, 0x500D, 0x947B, 0x500F, 0xE0C5, + 0x5011, 0x98EC, 0x5012, 0x937C, 0x5014, 0x98E1, 0x5016, 0x8CF4, 0x5019, 0x8CF3, 0x501A, 0x98DF, 0x501E, 0xFA77, 0x501F, 0x8ED8, + 0x5021, 0x98E7, 0x5022, 0xFA75, 0x5023, 0x95ED, 0x5024, 0x926C, 0x5025, 0x98E3, 0x5026, 0x8C91, 0x5028, 0x98E0, 0x5029, 0x98E8, + 0x502A, 0x98E2, 0x502B, 0x97CF, 0x502C, 0x98E9, 0x502D, 0x9860, 0x5036, 0x8BE4, 0x5039, 0x8C90, 0x5040, 0xFA74, 0x5042, 0xFA7A, + 0x5043, 0x98EE, 0x5046, 0xFA78, 0x5047, 0x98EF, 0x5048, 0x98F3, 0x5049, 0x88CC, 0x504F, 0x95CE, 0x5050, 0x98F2, 0x5055, 0x98F1, + 0x5056, 0x98F5, 0x505A, 0x98F4, 0x505C, 0x92E2, 0x5065, 0x8C92, 0x506C, 0x98F6, 0x5070, 0xFA79, 0x5072, 0x8EC3, 0x5074, 0x91A4, + 0x5075, 0x92E3, 0x5076, 0x8BF4, 0x5078, 0x98F7, 0x507D, 0x8B55, 0x5080, 0x98F8, 0x5085, 0x98FA, 0x508D, 0x9654, 0x5091, 0x8C86, + 0x5094, 0xFA7B, 0x5098, 0x8E50, 0x5099, 0x94F5, 0x509A, 0x98F9, 0x50AC, 0x8DC3, 0x50AD, 0x9762, 0x50B2, 0x98FC, 0x50B3, 0x9942, + 0x50B4, 0x98FB, 0x50B5, 0x8DC2, 0x50B7, 0x8F9D, 0x50BE, 0x8C58, 0x50C2, 0x9943, 0x50C5, 0x8BCD, 0x50C9, 0x9940, 0x50CA, 0x9941, + 0x50CD, 0x93AD, 0x50CF, 0x919C, 0x50D1, 0x8BA1, 0x50D5, 0x966C, 0x50D6, 0x9944, 0x50D8, 0xFA7D, 0x50DA, 0x97BB, 0x50DE, 0x9945, + 0x50E3, 0x9948, 0x50E5, 0x9946, 0x50E7, 0x916D, 0x50ED, 0x9947, 0x50EE, 0x9949, 0x50F4, 0xFA7C, 0x50F5, 0x994B, 0x50F9, 0x994A, + 0x50FB, 0x95C6, 0x5100, 0x8B56, 0x5101, 0x994D, 0x5102, 0x994E, 0x5104, 0x89AD, 0x5109, 0x994C, 0x5112, 0x8EF2, 0x5114, 0x9951, + 0x5115, 0x9950, 0x5116, 0x994F, 0x5118, 0x98D4, 0x511A, 0x9952, 0x511F, 0x8F9E, 0x5121, 0x9953, 0x512A, 0x9744, 0x5132, 0x96D7, + 0x5137, 0x9955, 0x513A, 0x9954, 0x513B, 0x9957, 0x513C, 0x9956, 0x513F, 0x9958, 0x5140, 0x9959, 0x5141, 0x88F2, 0x5143, 0x8CB3, + 0x5144, 0x8C5A, 0x5145, 0x8F5B, 0x5146, 0x929B, 0x5147, 0x8BA2, 0x5148, 0x90E6, 0x5149, 0x8CF5, 0x514A, 0xFA7E, 0x514B, 0x8D8E, + 0x514C, 0x995B, 0x514D, 0x96C6, 0x514E, 0x9365, 0x5150, 0x8E99, 0x5152, 0x995A, 0x5154, 0x995C, 0x515A, 0x937D, 0x515C, 0x8A95, + 0x5162, 0x995D, 0x5164, 0xFA80, 0x5165, 0x93FC, 0x5168, 0x9153, 0x5169, 0x995F, 0x516A, 0x9960, 0x516B, 0x94AA, 0x516C, 0x8CF6, + 0x516D, 0x985A, 0x516E, 0x9961, 0x5171, 0x8BA4, 0x5175, 0x95BA, 0x5176, 0x91B4, 0x5177, 0x8BEF, 0x5178, 0x9354, 0x517C, 0x8C93, + 0x5180, 0x9962, 0x5182, 0x9963, 0x5185, 0x93E0, 0x5186, 0x897E, 0x5189, 0x9966, 0x518A, 0x8DFB, 0x518C, 0x9965, 0x518D, 0x8DC4, + 0x518F, 0x9967, 0x5190, 0xE3EC, 0x5191, 0x9968, 0x5192, 0x9660, 0x5193, 0x9969, 0x5195, 0x996A, 0x5196, 0x996B, 0x5197, 0x8FE7, + 0x5199, 0x8ECA, 0x519D, 0xFA81, 0x51A0, 0x8AA5, 0x51A2, 0x996E, 0x51A4, 0x996C, 0x51A5, 0x96BB, 0x51A6, 0x996D, 0x51A8, 0x9579, + 0x51A9, 0x996F, 0x51AA, 0x9970, 0x51AB, 0x9971, 0x51AC, 0x937E, 0x51B0, 0x9975, 0x51B1, 0x9973, 0x51B2, 0x9974, 0x51B3, 0x9972, + 0x51B4, 0x8DE1, 0x51B5, 0x9976, 0x51B6, 0x96E8, 0x51B7, 0x97E2, 0x51BD, 0x9977, 0x51BE, 0xFA82, 0x51C4, 0x90A6, 0x51C5, 0x9978, + 0x51C6, 0x8F79, 0x51C9, 0x9979, 0x51CB, 0x929C, 0x51CC, 0x97BD, 0x51CD, 0x9380, 0x51D6, 0x99C3, 0x51DB, 0x997A, 0x51DC, 0xEAA3, + 0x51DD, 0x8BC3, 0x51E0, 0x997B, 0x51E1, 0x967D, 0x51E6, 0x8F88, 0x51E7, 0x91FA, 0x51E9, 0x997D, 0x51EA, 0x93E2, 0x51EC, 0xFA83, + 0x51ED, 0x997E, 0x51F0, 0x9980, 0x51F1, 0x8A4D, 0x51F5, 0x9981, 0x51F6, 0x8BA5, 0x51F8, 0x93CA, 0x51F9, 0x899A, 0x51FA, 0x8F6F, + 0x51FD, 0x949F, 0x51FE, 0x9982, 0x5200, 0x9381, 0x5203, 0x906E, 0x5204, 0x9983, 0x5206, 0x95AA, 0x5207, 0x90D8, 0x5208, 0x8AA0, + 0x520A, 0x8AA7, 0x520B, 0x9984, 0x520E, 0x9986, 0x5211, 0x8C59, 0x5214, 0x9985, 0x5215, 0xFA84, 0x5217, 0x97F1, 0x521D, 0x8F89, + 0x5224, 0x94BB, 0x5225, 0x95CA, 0x5227, 0x9987, 0x5229, 0x9798, 0x522A, 0x9988, 0x522E, 0x9989, 0x5230, 0x939E, 0x5233, 0x998A, + 0x5236, 0x90A7, 0x5237, 0x8DFC, 0x5238, 0x8C94, 0x5239, 0x998B, 0x523A, 0x8E68, 0x523B, 0x8D8F, 0x5243, 0x92E4, 0x5244, 0x998D, + 0x5247, 0x91A5, 0x524A, 0x8DED, 0x524B, 0x998E, 0x524C, 0x998F, 0x524D, 0x914F, 0x524F, 0x998C, 0x5254, 0x9991, 0x5256, 0x9655, + 0x525B, 0x8D84, 0x525E, 0x9990, 0x5263, 0x8C95, 0x5264, 0x8DDC, 0x5265, 0x948D, 0x5269, 0x9994, 0x526A, 0x9992, 0x526F, 0x959B, + 0x5270, 0x8FE8, 0x5271, 0x999B, 0x5272, 0x8A84, 0x5273, 0x9995, 0x5274, 0x9993, 0x5275, 0x916E, 0x527D, 0x9997, 0x527F, 0x9996, + 0x5283, 0x8A63, 0x5287, 0x8C80, 0x5288, 0x999C, 0x5289, 0x97AB, 0x528D, 0x9998, 0x5291, 0x999D, 0x5292, 0x999A, 0x5294, 0x9999, + 0x529B, 0x97CD, 0x529C, 0xFA85, 0x529F, 0x8CF7, 0x52A0, 0x89C1, 0x52A3, 0x97F2, 0x52A6, 0xFA86, 0x52A9, 0x8F95, 0x52AA, 0x9377, + 0x52AB, 0x8D85, 0x52AC, 0x99A0, 0x52AD, 0x99A1, 0x52AF, 0xFB77, 0x52B1, 0x97E3, 0x52B4, 0x984A, 0x52B5, 0x99A3, 0x52B9, 0x8CF8, + 0x52BC, 0x99A2, 0x52BE, 0x8A4E, 0x52C0, 0xFA87, 0x52C1, 0x99A4, 0x52C3, 0x9675, 0x52C5, 0x92BA, 0x52C7, 0x9745, 0x52C9, 0x95D7, + 0x52CD, 0x99A5, 0x52D2, 0xE8D3, 0x52D5, 0x93AE, 0x52D7, 0x99A6, 0x52D8, 0x8AA8, 0x52D9, 0x96B1, 0x52DB, 0xFA88, 0x52DD, 0x8F9F, + 0x52DE, 0x99A7, 0x52DF, 0x95E5, 0x52E0, 0x99AB, 0x52E2, 0x90A8, 0x52E3, 0x99A8, 0x52E4, 0x8BCE, 0x52E6, 0x99A9, 0x52E7, 0x8AA9, + 0x52F2, 0x8C4D, 0x52F3, 0x99AC, 0x52F5, 0x99AD, 0x52F8, 0x99AE, 0x52F9, 0x99AF, 0x52FA, 0x8ED9, 0x52FE, 0x8CF9, 0x52FF, 0x96DC, + 0x5300, 0xFA89, 0x5301, 0x96E6, 0x5302, 0x93F5, 0x5305, 0x95EF, 0x5306, 0x99B0, 0x5307, 0xFA8A, 0x5308, 0x99B1, 0x530D, 0x99B3, + 0x530F, 0x99B5, 0x5310, 0x99B4, 0x5315, 0x99B6, 0x5316, 0x89BB, 0x5317, 0x966B, 0x5319, 0x8DFA, 0x531A, 0x99B7, 0x531D, 0x9178, + 0x5320, 0x8FA0, 0x5321, 0x8BA7, 0x5323, 0x99B8, 0x5324, 0xFA8B, 0x532A, 0x94D9, 0x532F, 0x99B9, 0x5331, 0x99BA, 0x5333, 0x99BB, + 0x5338, 0x99BC, 0x5339, 0x9543, 0x533A, 0x8BE6, 0x533B, 0x88E3, 0x533F, 0x93BD, 0x5340, 0x99BD, 0x5341, 0x8F5C, 0x5343, 0x90E7, + 0x5345, 0x99BF, 0x5346, 0x99BE, 0x5347, 0x8FA1, 0x5348, 0x8CDF, 0x5349, 0x99C1, 0x534A, 0x94BC, 0x534D, 0x99C2, 0x5351, 0x94DA, + 0x5352, 0x91B2, 0x5353, 0x91EC, 0x5354, 0x8BA6, 0x5357, 0x93EC, 0x5358, 0x9250, 0x535A, 0x948E, 0x535C, 0x966D, 0x535E, 0x99C4, + 0x5360, 0x90E8, 0x5366, 0x8C54, 0x5369, 0x99C5, 0x536E, 0x99C6, 0x536F, 0x894B, 0x5370, 0x88F3, 0x5371, 0x8AEB, 0x5372, 0xFA8C, + 0x5373, 0x91A6, 0x5374, 0x8B70, 0x5375, 0x9791, 0x5377, 0x99C9, 0x5378, 0x89B5, 0x537B, 0x99C8, 0x537F, 0x8BA8, 0x5382, 0x99CA, + 0x5384, 0x96EF, 0x5393, 0xFA8D, 0x5396, 0x99CB, 0x5398, 0x97D0, 0x539A, 0x8CFA, 0x539F, 0x8CB4, 0x53A0, 0x99CC, 0x53A5, 0x99CE, + 0x53A6, 0x99CD, 0x53A8, 0x907E, 0x53A9, 0x8958, 0x53AD, 0x897D, 0x53AE, 0x99CF, 0x53B0, 0x99D0, 0x53B2, 0xFA8E, 0x53B3, 0x8CB5, + 0x53B6, 0x99D1, 0x53BB, 0x8B8E, 0x53C2, 0x8E51, 0x53C3, 0x99D2, 0x53C8, 0x9694, 0x53C9, 0x8DB3, 0x53CA, 0x8B79, 0x53CB, 0x9746, + 0x53CC, 0x916F, 0x53CD, 0x94BD, 0x53CE, 0x8EFB, 0x53D4, 0x8F66, 0x53D6, 0x8EE6, 0x53D7, 0x8EF3, 0x53D9, 0x8F96, 0x53DB, 0x94BE, + 0x53DD, 0xFA8F, 0x53DF, 0x99D5, 0x53E1, 0x8962, 0x53E2, 0x9170, 0x53E3, 0x8CFB, 0x53E4, 0x8CC3, 0x53E5, 0x8BE5, 0x53E8, 0x99D9, + 0x53E9, 0x9240, 0x53EA, 0x91FC, 0x53EB, 0x8BA9, 0x53EC, 0x8FA2, 0x53ED, 0x99DA, 0x53EE, 0x99D8, 0x53EF, 0x89C2, 0x53F0, 0x91E4, + 0x53F1, 0x8EB6, 0x53F2, 0x8E6A, 0x53F3, 0x8945, 0x53F6, 0x8A90, 0x53F7, 0x8D86, 0x53F8, 0x8E69, 0x53FA, 0x99DB, 0x5401, 0x99DC, + 0x5403, 0x8B68, 0x5404, 0x8A65, 0x5408, 0x8D87, 0x5409, 0x8B67, 0x540A, 0x92DD, 0x540B, 0x8944, 0x540C, 0x93AF, 0x540D, 0x96BC, + 0x540E, 0x8D40, 0x540F, 0x9799, 0x5410, 0x9366, 0x5411, 0x8CFC, 0x541B, 0x8C4E, 0x541D, 0x99E5, 0x541F, 0x8BE1, 0x5420, 0x9669, + 0x5426, 0x94DB, 0x5429, 0x99E4, 0x542B, 0x8ADC, 0x542C, 0x99DF, 0x542D, 0x99E0, 0x542E, 0x99E2, 0x5436, 0x99E3, 0x5438, 0x8B7A, + 0x5439, 0x9081, 0x543B, 0x95AB, 0x543C, 0x99E1, 0x543D, 0x99DD, 0x543E, 0x8CE1, 0x5440, 0x99DE, 0x5442, 0x9843, 0x5446, 0x95F0, + 0x5448, 0x92E6, 0x5449, 0x8CE0, 0x544A, 0x8D90, 0x544E, 0x99E6, 0x5451, 0x93DB, 0x545F, 0x99EA, 0x5468, 0x8EFC, 0x546A, 0x8EF4, + 0x5470, 0x99ED, 0x5471, 0x99EB, 0x5473, 0x96A1, 0x5475, 0x99E8, 0x5476, 0x99F1, 0x5477, 0x99EC, 0x547B, 0x99EF, 0x547C, 0x8CC4, + 0x547D, 0x96BD, 0x5480, 0x99F0, 0x5484, 0x99F2, 0x5486, 0x99F4, 0x548A, 0xFA92, 0x548B, 0x8DEE, 0x548C, 0x9861, 0x548E, 0x99E9, + 0x548F, 0x99E7, 0x5490, 0x99F3, 0x5492, 0x99EE, 0x549C, 0xFA91, 0x54A2, 0x99F6, 0x54A4, 0x9A42, 0x54A5, 0x99F8, 0x54A8, 0x99FC, + 0x54A9, 0xFA93, 0x54AB, 0x9A40, 0x54AC, 0x99F9, 0x54AF, 0x9A5D, 0x54B2, 0x8DE7, 0x54B3, 0x8A50, 0x54B8, 0x99F7, 0x54BC, 0x9A44, + 0x54BD, 0x88F4, 0x54BE, 0x9A43, 0x54C0, 0x88A3, 0x54C1, 0x9569, 0x54C2, 0x9A41, 0x54C4, 0x99FA, 0x54C7, 0x99F5, 0x54C8, 0x99FB, + 0x54C9, 0x8DC6, 0x54D8, 0x9A45, 0x54E1, 0x88F5, 0x54E2, 0x9A4E, 0x54E5, 0x9A46, 0x54E6, 0x9A47, 0x54E8, 0x8FA3, 0x54E9, 0x9689, + 0x54ED, 0x9A4C, 0x54EE, 0x9A4B, 0x54F2, 0x934E, 0x54FA, 0x9A4D, 0x54FD, 0x9A4A, 0x54FF, 0xFA94, 0x5504, 0x8953, 0x5506, 0x8DB4, + 0x5507, 0x904F, 0x550F, 0x9A48, 0x5510, 0x9382, 0x5514, 0x9A49, 0x5516, 0x88A0, 0x552E, 0x9A53, 0x552F, 0x9742, 0x5531, 0x8FA5, + 0x5533, 0x9A59, 0x5538, 0x9A58, 0x5539, 0x9A4F, 0x553E, 0x91C1, 0x5540, 0x9A50, 0x5544, 0x91ED, 0x5545, 0x9A55, 0x5546, 0x8FA4, + 0x554C, 0x9A52, 0x554F, 0x96E2, 0x5553, 0x8C5B, 0x5556, 0x9A56, 0x5557, 0x9A57, 0x555C, 0x9A54, 0x555D, 0x9A5A, 0x5563, 0x9A51, + 0x557B, 0x9A60, 0x557C, 0x9A65, 0x557E, 0x9A61, 0x5580, 0x9A5C, 0x5583, 0x9A66, 0x5584, 0x9150, 0x5586, 0xFA95, 0x5587, 0x9A68, + 0x5589, 0x8D41, 0x558A, 0x9A5E, 0x558B, 0x929D, 0x5598, 0x9A62, 0x5599, 0x9A5B, 0x559A, 0x8AAB, 0x559C, 0x8AEC, 0x559D, 0x8A85, + 0x559E, 0x9A63, 0x559F, 0x9A5F, 0x55A7, 0x8C96, 0x55A8, 0x9A69, 0x55A9, 0x9A67, 0x55AA, 0x9172, 0x55AB, 0x8B69, 0x55AC, 0x8BAA, + 0x55AE, 0x9A64, 0x55B0, 0x8BF2, 0x55B6, 0x8963, 0x55C4, 0x9A6D, 0x55C5, 0x9A6B, 0x55C7, 0x9AA5, 0x55D4, 0x9A70, 0x55DA, 0x9A6A, + 0x55DC, 0x9A6E, 0x55DF, 0x9A6C, 0x55E3, 0x8E6B, 0x55E4, 0x9A6F, 0x55F7, 0x9A72, 0x55F9, 0x9A77, 0x55FD, 0x9A75, 0x55FE, 0x9A74, + 0x5606, 0x9251, 0x5609, 0x89C3, 0x5614, 0x9A71, 0x5616, 0x9A73, 0x5617, 0x8FA6, 0x5618, 0x8952, 0x561B, 0x9A76, 0x5629, 0x89DC, + 0x562F, 0x9A82, 0x5631, 0x8FFA, 0x5632, 0x9A7D, 0x5634, 0x9A7B, 0x5636, 0x9A7C, 0x5638, 0x9A7E, 0x5642, 0x895C, 0x564C, 0x9158, + 0x564E, 0x9A78, 0x5650, 0x9A79, 0x565B, 0x8A9A, 0x5664, 0x9A81, 0x5668, 0x8AED, 0x566A, 0x9A84, 0x566B, 0x9A80, 0x566C, 0x9A83, + 0x5674, 0x95AC, 0x5678, 0x93D3, 0x567A, 0x94B6, 0x5680, 0x9A86, 0x5686, 0x9A85, 0x5687, 0x8A64, 0x568A, 0x9A87, 0x568F, 0x9A8A, + 0x5694, 0x9A89, 0x56A0, 0x9A88, 0x56A2, 0x9458, 0x56A5, 0x9A8B, 0x56AE, 0x9A8C, 0x56B4, 0x9A8E, 0x56B6, 0x9A8D, 0x56BC, 0x9A90, + 0x56C0, 0x9A93, 0x56C1, 0x9A91, 0x56C2, 0x9A8F, 0x56C3, 0x9A92, 0x56C8, 0x9A94, 0x56CE, 0x9A95, 0x56D1, 0x9A96, 0x56D3, 0x9A97, + 0x56D7, 0x9A98, 0x56D8, 0x9964, 0x56DA, 0x8EFA, 0x56DB, 0x8E6C, 0x56DE, 0x89F1, 0x56E0, 0x88F6, 0x56E3, 0x9263, 0x56EE, 0x9A99, + 0x56F0, 0x8DA2, 0x56F2, 0x88CD, 0x56F3, 0x907D, 0x56F9, 0x9A9A, 0x56FA, 0x8CC5, 0x56FD, 0x8D91, 0x56FF, 0x9A9C, 0x5700, 0x9A9B, + 0x5703, 0x95DE, 0x5704, 0x9A9D, 0x5708, 0x9A9F, 0x5709, 0x9A9E, 0x570B, 0x9AA0, 0x570D, 0x9AA1, 0x570F, 0x8C97, 0x5712, 0x8980, + 0x5713, 0x9AA2, 0x5716, 0x9AA4, 0x5718, 0x9AA3, 0x571C, 0x9AA6, 0x571F, 0x9379, 0x5726, 0x9AA7, 0x5727, 0x88B3, 0x5728, 0x8DDD, + 0x572D, 0x8C5C, 0x5730, 0x926E, 0x5737, 0x9AA8, 0x5738, 0x9AA9, 0x573B, 0x9AAB, 0x5740, 0x9AAC, 0x5742, 0x8DE2, 0x5747, 0x8BCF, + 0x574A, 0x9656, 0x574E, 0x9AAA, 0x574F, 0x9AAD, 0x5750, 0x8DBF, 0x5751, 0x8D42, 0x5759, 0xFA96, 0x5761, 0x9AB1, 0x5764, 0x8DA3, + 0x5765, 0xFA97, 0x5766, 0x9252, 0x5769, 0x9AAE, 0x576A, 0x92D8, 0x577F, 0x9AB2, 0x5782, 0x9082, 0x5788, 0x9AB0, 0x5789, 0x9AB3, + 0x578B, 0x8C5E, 0x5793, 0x9AB4, 0x57A0, 0x9AB5, 0x57A2, 0x8D43, 0x57A3, 0x8A5F, 0x57A4, 0x9AB7, 0x57AA, 0x9AB8, 0x57AC, 0xFA98, + 0x57B0, 0x9AB9, 0x57B3, 0x9AB6, 0x57C0, 0x9AAF, 0x57C3, 0x9ABA, 0x57C6, 0x9ABB, 0x57C7, 0xFA9A, 0x57C8, 0xFA99, 0x57CB, 0x9684, + 0x57CE, 0x8FE9, 0x57D2, 0x9ABD, 0x57D3, 0x9ABE, 0x57D4, 0x9ABC, 0x57D6, 0x9AC0, 0x57DC, 0x9457, 0x57DF, 0x88E6, 0x57E0, 0x9575, + 0x57E3, 0x9AC1, 0x57F4, 0x8FFB, 0x57F7, 0x8EB7, 0x57F9, 0x947C, 0x57FA, 0x8AEE, 0x57FC, 0x8DE9, 0x5800, 0x9678, 0x5802, 0x93B0, + 0x5805, 0x8C98, 0x5806, 0x91CD, 0x580A, 0x9ABF, 0x580B, 0x9AC2, 0x5815, 0x91C2, 0x5819, 0x9AC3, 0x581D, 0x9AC4, 0x5821, 0x9AC6, + 0x5824, 0x92E7, 0x582A, 0x8AAC, 0x582F, 0xEA9F, 0x5830, 0x8981, 0x5831, 0x95F1, 0x5834, 0x8FEA, 0x5835, 0x9367, 0x583A, 0x8DE4, + 0x583D, 0x9ACC, 0x5840, 0x95BB, 0x5841, 0x97DB, 0x584A, 0x89F2, 0x584B, 0x9AC8, 0x5851, 0x9159, 0x5852, 0x9ACB, 0x5854, 0x9383, + 0x5857, 0x9368, 0x5858, 0x9384, 0x5859, 0x94B7, 0x585A, 0x92CB, 0x585E, 0x8DC7, 0x5862, 0x9AC7, 0x5869, 0x8996, 0x586B, 0x9355, + 0x5870, 0x9AC9, 0x5872, 0x9AC5, 0x5875, 0x906F, 0x5879, 0x9ACD, 0x587E, 0x8F6D, 0x5883, 0x8BAB, 0x5885, 0x9ACE, 0x5893, 0x95E6, + 0x5897, 0x919D, 0x589C, 0x92C4, 0x589E, 0xFA9D, 0x589F, 0x9AD0, 0x58A8, 0x966E, 0x58AB, 0x9AD1, 0x58AE, 0x9AD6, 0x58B2, 0xFA9E, + 0x58B3, 0x95AD, 0x58B8, 0x9AD5, 0x58B9, 0x9ACF, 0x58BA, 0x9AD2, 0x58BB, 0x9AD4, 0x58BE, 0x8DA4, 0x58C1, 0x95C7, 0x58C5, 0x9AD7, + 0x58C7, 0x9264, 0x58CA, 0x89F3, 0x58CC, 0x8FEB, 0x58D1, 0x9AD9, 0x58D3, 0x9AD8, 0x58D5, 0x8D88, 0x58D7, 0x9ADA, 0x58D8, 0x9ADC, + 0x58D9, 0x9ADB, 0x58DC, 0x9ADE, 0x58DE, 0x9AD3, 0x58DF, 0x9AE0, 0x58E4, 0x9ADF, 0x58E5, 0x9ADD, 0x58EB, 0x8E6D, 0x58EC, 0x9070, + 0x58EE, 0x9173, 0x58EF, 0x9AE1, 0x58F0, 0x90BA, 0x58F1, 0x88EB, 0x58F2, 0x9484, 0x58F7, 0x92D9, 0x58F9, 0x9AE3, 0x58FA, 0x9AE2, + 0x58FB, 0x9AE4, 0x58FC, 0x9AE5, 0x58FD, 0x9AE6, 0x5902, 0x9AE7, 0x5909, 0x95CF, 0x590A, 0x9AE8, 0x590B, 0xFA9F, 0x590F, 0x89C4, + 0x5910, 0x9AE9, 0x5915, 0x975B, 0x5916, 0x8A4F, 0x5918, 0x99C7, 0x5919, 0x8F67, 0x591A, 0x91BD, 0x591B, 0x9AEA, 0x591C, 0x96E9, + 0x5922, 0x96B2, 0x5925, 0x9AEC, 0x5927, 0x91E5, 0x5929, 0x9356, 0x592A, 0x91BE, 0x592B, 0x9576, 0x592C, 0x9AED, 0x592D, 0x9AEE, + 0x592E, 0x899B, 0x5931, 0x8EB8, 0x5932, 0x9AEF, 0x5937, 0x88CE, 0x5938, 0x9AF0, 0x593E, 0x9AF1, 0x5944, 0x8982, 0x5947, 0x8AEF, + 0x5948, 0x93DE, 0x5949, 0x95F2, 0x594E, 0x9AF5, 0x594F, 0x9174, 0x5950, 0x9AF4, 0x5951, 0x8C5F, 0x5953, 0xFAA0, 0x5954, 0x967A, + 0x5955, 0x9AF3, 0x5957, 0x9385, 0x5958, 0x9AF7, 0x595A, 0x9AF6, 0x595B, 0xFAA1, 0x595D, 0xFAA2, 0x5960, 0x9AF9, 0x5962, 0x9AF8, + 0x5963, 0xFAA3, 0x5965, 0x899C, 0x5967, 0x9AFA, 0x5968, 0x8FA7, 0x5969, 0x9AFC, 0x596A, 0x9244, 0x596C, 0x9AFB, 0x596E, 0x95B1, + 0x5973, 0x8F97, 0x5974, 0x937A, 0x5978, 0x9B40, 0x597D, 0x8D44, 0x5981, 0x9B41, 0x5982, 0x9440, 0x5983, 0x94DC, 0x5984, 0x96CF, + 0x598A, 0x9444, 0x598D, 0x9B4A, 0x5993, 0x8B57, 0x5996, 0x9764, 0x5999, 0x96AD, 0x599B, 0x9BAA, 0x599D, 0x9B42, 0x59A3, 0x9B45, + 0x59A4, 0xFAA4, 0x59A5, 0x91C3, 0x59A8, 0x9657, 0x59AC, 0x9369, 0x59B2, 0x9B46, 0x59B9, 0x9685, 0x59BA, 0xFAA5, 0x59BB, 0x8DC8, + 0x59BE, 0x8FA8, 0x59C6, 0x9B47, 0x59C9, 0x8E6F, 0x59CB, 0x8E6E, 0x59D0, 0x88B7, 0x59D1, 0x8CC6, 0x59D3, 0x90A9, 0x59D4, 0x88CF, + 0x59D9, 0x9B4B, 0x59DA, 0x9B4C, 0x59DC, 0x9B49, 0x59E5, 0x8957, 0x59E6, 0x8AAD, 0x59E8, 0x9B48, 0x59EA, 0x96C3, 0x59EB, 0x9550, + 0x59F6, 0x88A6, 0x59FB, 0x88F7, 0x59FF, 0x8E70, 0x5A01, 0x88D0, 0x5A03, 0x88A1, 0x5A09, 0x9B51, 0x5A11, 0x9B4F, 0x5A18, 0x96BA, + 0x5A1A, 0x9B52, 0x5A1C, 0x9B50, 0x5A1F, 0x9B4E, 0x5A20, 0x9050, 0x5A25, 0x9B4D, 0x5A29, 0x95D8, 0x5A2F, 0x8CE2, 0x5A35, 0x9B56, + 0x5A36, 0x9B57, 0x5A3C, 0x8FA9, 0x5A40, 0x9B53, 0x5A41, 0x984B, 0x5A46, 0x946B, 0x5A49, 0x9B55, 0x5A5A, 0x8DA5, 0x5A62, 0x9B58, + 0x5A66, 0x9577, 0x5A6A, 0x9B59, 0x5A6C, 0x9B54, 0x5A7F, 0x96B9, 0x5A92, 0x947D, 0x5A9A, 0x9B5A, 0x5A9B, 0x9551, 0x5ABC, 0x9B5B, + 0x5ABD, 0x9B5F, 0x5ABE, 0x9B5C, 0x5AC1, 0x89C5, 0x5AC2, 0x9B5E, 0x5AC9, 0x8EB9, 0x5ACB, 0x9B5D, 0x5ACC, 0x8C99, 0x5AD0, 0x9B6B, + 0x5AD6, 0x9B64, 0x5AD7, 0x9B61, 0x5AE1, 0x9284, 0x5AE3, 0x9B60, 0x5AE6, 0x9B62, 0x5AE9, 0x9B63, 0x5AFA, 0x9B65, 0x5AFB, 0x9B66, + 0x5B09, 0x8AF0, 0x5B0B, 0x9B68, 0x5B0C, 0x9B67, 0x5B16, 0x9B69, 0x5B22, 0x8FEC, 0x5B2A, 0x9B6C, 0x5B2C, 0x92DA, 0x5B30, 0x8964, + 0x5B32, 0x9B6A, 0x5B36, 0x9B6D, 0x5B3E, 0x9B6E, 0x5B40, 0x9B71, 0x5B43, 0x9B6F, 0x5B45, 0x9B70, 0x5B50, 0x8E71, 0x5B51, 0x9B72, + 0x5B54, 0x8D45, 0x5B55, 0x9B73, 0x5B56, 0xFAA6, 0x5B57, 0x8E9A, 0x5B58, 0x91B6, 0x5B5A, 0x9B74, 0x5B5B, 0x9B75, 0x5B5C, 0x8E79, + 0x5B5D, 0x8D46, 0x5B5F, 0x96D0, 0x5B63, 0x8B47, 0x5B64, 0x8CC7, 0x5B65, 0x9B76, 0x5B66, 0x8A77, 0x5B69, 0x9B77, 0x5B6B, 0x91B7, + 0x5B70, 0x9B78, 0x5B71, 0x9BA1, 0x5B73, 0x9B79, 0x5B75, 0x9B7A, 0x5B78, 0x9B7B, 0x5B7A, 0x9B7D, 0x5B80, 0x9B7E, 0x5B83, 0x9B80, + 0x5B85, 0x91EE, 0x5B87, 0x8946, 0x5B88, 0x8EE7, 0x5B89, 0x88C0, 0x5B8B, 0x9176, 0x5B8C, 0x8AAE, 0x5B8D, 0x8EB3, 0x5B8F, 0x8D47, + 0x5B95, 0x9386, 0x5B97, 0x8F40, 0x5B98, 0x8AAF, 0x5B99, 0x9288, 0x5B9A, 0x92E8, 0x5B9B, 0x88B6, 0x5B9C, 0x8B58, 0x5B9D, 0x95F3, + 0x5B9F, 0x8EC0, 0x5BA2, 0x8B71, 0x5BA3, 0x90E9, 0x5BA4, 0x8EBA, 0x5BA5, 0x9747, 0x5BA6, 0x9B81, 0x5BAE, 0x8B7B, 0x5BB0, 0x8DC9, + 0x5BB3, 0x8A51, 0x5BB4, 0x8983, 0x5BB5, 0x8FAA, 0x5BB6, 0x89C6, 0x5BB8, 0x9B82, 0x5BB9, 0x9765, 0x5BBF, 0x8F68, 0x5BC0, 0xFAA7, + 0x5BC2, 0x8EE2, 0x5BC3, 0x9B83, 0x5BC4, 0x8AF1, 0x5BC5, 0x93D0, 0x5BC6, 0x96A7, 0x5BC7, 0x9B84, 0x5BC9, 0x9B85, 0x5BCC, 0x9578, + 0x5BD0, 0x9B87, 0x5BD2, 0x8AA6, 0x5BD3, 0x8BF5, 0x5BD4, 0x9B86, 0x5BD8, 0xFAA9, 0x5BDB, 0x8AB0, 0x5BDD, 0x9051, 0x5BDE, 0x9B8B, + 0x5BDF, 0x8E40, 0x5BE1, 0x89C7, 0x5BE2, 0x9B8A, 0x5BE4, 0x9B88, 0x5BE5, 0x9B8C, 0x5BE6, 0x9B89, 0x5BE7, 0x944A, 0x5BE8, 0x9ECB, + 0x5BE9, 0x9052, 0x5BEB, 0x9B8D, 0x5BEC, 0xFAAA, 0x5BEE, 0x97BE, 0x5BF0, 0x9B8E, 0x5BF3, 0x9B90, 0x5BF5, 0x929E, 0x5BF6, 0x9B8F, + 0x5BF8, 0x90A1, 0x5BFA, 0x8E9B, 0x5BFE, 0x91CE, 0x5BFF, 0x8EF5, 0x5C01, 0x9595, 0x5C02, 0x90EA, 0x5C04, 0x8ECB, 0x5C05, 0x9B91, + 0x5C06, 0x8FAB, 0x5C07, 0x9B92, 0x5C08, 0x9B93, 0x5C09, 0x88D1, 0x5C0A, 0x91B8, 0x5C0B, 0x9071, 0x5C0D, 0x9B94, 0x5C0E, 0x93B1, + 0x5C0F, 0x8FAC, 0x5C11, 0x8FAD, 0x5C13, 0x9B95, 0x5C16, 0x90EB, 0x5C1A, 0x8FAE, 0x5C1E, 0xFAAB, 0x5C20, 0x9B96, 0x5C22, 0x9B97, + 0x5C24, 0x96DE, 0x5C28, 0x9B98, 0x5C2D, 0x8BC4, 0x5C31, 0x8F41, 0x5C38, 0x9B99, 0x5C39, 0x9B9A, 0x5C3A, 0x8EDA, 0x5C3B, 0x904B, + 0x5C3C, 0x93F2, 0x5C3D, 0x9073, 0x5C3E, 0x94F6, 0x5C3F, 0x9441, 0x5C40, 0x8BC7, 0x5C41, 0x9B9B, 0x5C45, 0x8B8F, 0x5C46, 0x9B9C, + 0x5C48, 0x8BFC, 0x5C4A, 0x93CD, 0x5C4B, 0x89AE, 0x5C4D, 0x8E72, 0x5C4E, 0x9B9D, 0x5C4F, 0x9BA0, 0x5C50, 0x9B9F, 0x5C51, 0x8BFB, + 0x5C53, 0x9B9E, 0x5C55, 0x9357, 0x5C5E, 0x91AE, 0x5C60, 0x936A, 0x5C61, 0x8EC6, 0x5C64, 0x9177, 0x5C65, 0x979A, 0x5C6C, 0x9BA2, + 0x5C6E, 0x9BA3, 0x5C6F, 0x93D4, 0x5C71, 0x8E52, 0x5C76, 0x9BA5, 0x5C79, 0x9BA6, 0x5C8C, 0x9BA7, 0x5C90, 0x8AF2, 0x5C91, 0x9BA8, + 0x5C94, 0x9BA9, 0x5CA1, 0x89AA, 0x5CA6, 0xFAAC, 0x5CA8, 0x915A, 0x5CA9, 0x8AE2, 0x5CAB, 0x9BAB, 0x5CAC, 0x96A6, 0x5CB1, 0x91D0, + 0x5CB3, 0x8A78, 0x5CB6, 0x9BAD, 0x5CB7, 0x9BAF, 0x5CB8, 0x8ADD, 0x5CBA, 0xFAAD, 0x5CBB, 0x9BAC, 0x5CBC, 0x9BAE, 0x5CBE, 0x9BB1, + 0x5CC5, 0x9BB0, 0x5CC7, 0x9BB2, 0x5CD9, 0x9BB3, 0x5CE0, 0x93BB, 0x5CE1, 0x8BAC, 0x5CE8, 0x89E3, 0x5CE9, 0x9BB4, 0x5CEA, 0x9BB9, + 0x5CED, 0x9BB7, 0x5CEF, 0x95F5, 0x5CF0, 0x95F4, 0x5CF5, 0xFAAE, 0x5CF6, 0x9387, 0x5CFA, 0x9BB6, 0x5CFB, 0x8F73, 0x5CFD, 0x9BB5, + 0x5D07, 0x9092, 0x5D0B, 0x9BBA, 0x5D0E, 0x8DE8, 0x5D11, 0x9BC0, 0x5D14, 0x9BC1, 0x5D15, 0x9BBB, 0x5D16, 0x8A52, 0x5D17, 0x9BBC, + 0x5D18, 0x9BC5, 0x5D19, 0x9BC4, 0x5D1A, 0x9BC3, 0x5D1B, 0x9BBF, 0x5D1F, 0x9BBE, 0x5D22, 0x9BC2, 0x5D27, 0xFAAF, 0x5D29, 0x95F6, + 0x5D42, 0xFAB2, 0x5D4B, 0x9BC9, 0x5D4C, 0x9BC6, 0x5D4E, 0x9BC8, 0x5D50, 0x9792, 0x5D52, 0x9BC7, 0x5D53, 0xFAB0, 0x5D5C, 0x9BBD, + 0x5D69, 0x9093, 0x5D6C, 0x9BCA, 0x5D6D, 0xFAB3, 0x5D6F, 0x8DB5, 0x5D73, 0x9BCB, 0x5D76, 0x9BCC, 0x5D82, 0x9BCF, 0x5D84, 0x9BCE, + 0x5D87, 0x9BCD, 0x5D8B, 0x9388, 0x5D8C, 0x9BB8, 0x5D90, 0x9BD5, 0x5D9D, 0x9BD1, 0x5DA2, 0x9BD0, 0x5DAC, 0x9BD2, 0x5DAE, 0x9BD3, + 0x5DB7, 0x9BD6, 0x5DB8, 0xFAB4, 0x5DB9, 0xFAB5, 0x5DBA, 0x97E4, 0x5DBC, 0x9BD7, 0x5DBD, 0x9BD4, 0x5DC9, 0x9BD8, 0x5DCC, 0x8ADE, + 0x5DCD, 0x9BD9, 0x5DD0, 0xFAB6, 0x5DD2, 0x9BDB, 0x5DD3, 0x9BDA, 0x5DD6, 0x9BDC, 0x5DDB, 0x9BDD, 0x5DDD, 0x90EC, 0x5DDE, 0x8F42, + 0x5DE1, 0x8F84, 0x5DE3, 0x9183, 0x5DE5, 0x8D48, 0x5DE6, 0x8DB6, 0x5DE7, 0x8D49, 0x5DE8, 0x8B90, 0x5DEB, 0x9BDE, 0x5DEE, 0x8DB7, + 0x5DF1, 0x8CC8, 0x5DF2, 0x9BDF, 0x5DF3, 0x96A4, 0x5DF4, 0x9462, 0x5DF5, 0x9BE0, 0x5DF7, 0x8D4A, 0x5DFB, 0x8AAA, 0x5DFD, 0x9246, + 0x5DFE, 0x8BD0, 0x5E02, 0x8E73, 0x5E03, 0x957A, 0x5E06, 0x94BF, 0x5E0B, 0x9BE1, 0x5E0C, 0x8AF3, 0x5E11, 0x9BE4, 0x5E16, 0x929F, + 0x5E19, 0x9BE3, 0x5E1A, 0x9BE2, 0x5E1B, 0x9BE5, 0x5E1D, 0x92E9, 0x5E25, 0x9083, 0x5E2B, 0x8E74, 0x5E2D, 0x90C8, 0x5E2F, 0x91D1, + 0x5E30, 0x8B41, 0x5E33, 0x92A0, 0x5E36, 0x9BE6, 0x5E37, 0x9BE7, 0x5E38, 0x8FED, 0x5E3D, 0x9658, 0x5E40, 0x9BEA, 0x5E43, 0x9BE9, + 0x5E44, 0x9BE8, 0x5E45, 0x959D, 0x5E47, 0x9BF1, 0x5E4C, 0x9679, 0x5E4E, 0x9BEB, 0x5E54, 0x9BED, 0x5E55, 0x968B, 0x5E57, 0x9BEC, + 0x5E5F, 0x9BEE, 0x5E61, 0x94A6, 0x5E62, 0x9BEF, 0x5E63, 0x95BC, 0x5E64, 0x9BF0, 0x5E72, 0x8AB1, 0x5E73, 0x95BD, 0x5E74, 0x944E, + 0x5E75, 0x9BF2, 0x5E76, 0x9BF3, 0x5E78, 0x8D4B, 0x5E79, 0x8AB2, 0x5E7A, 0x9BF4, 0x5E7B, 0x8CB6, 0x5E7C, 0x9763, 0x5E7D, 0x9748, + 0x5E7E, 0x8AF4, 0x5E7F, 0x9BF6, 0x5E81, 0x92A1, 0x5E83, 0x8D4C, 0x5E84, 0x8FAF, 0x5E87, 0x94DD, 0x5E8A, 0x8FB0, 0x5E8F, 0x8F98, + 0x5E95, 0x92EA, 0x5E96, 0x95F7, 0x5E97, 0x9358, 0x5E9A, 0x8D4D, 0x5E9C, 0x957B, 0x5EA0, 0x9BF7, 0x5EA6, 0x9378, 0x5EA7, 0x8DC0, + 0x5EAB, 0x8CC9, 0x5EAD, 0x92EB, 0x5EB5, 0x88C1, 0x5EB6, 0x8F8E, 0x5EB7, 0x8D4E, 0x5EB8, 0x9766, 0x5EC1, 0x9BF8, 0x5EC2, 0x9BF9, + 0x5EC3, 0x9470, 0x5EC8, 0x9BFA, 0x5EC9, 0x97F5, 0x5ECA, 0x984C, 0x5ECF, 0x9BFC, 0x5ED0, 0x9BFB, 0x5ED3, 0x8A66, 0x5ED6, 0x9C40, + 0x5EDA, 0x9C43, 0x5EDB, 0x9C44, 0x5EDD, 0x9C42, 0x5EDF, 0x955F, 0x5EE0, 0x8FB1, 0x5EE1, 0x9C46, 0x5EE2, 0x9C45, 0x5EE3, 0x9C41, + 0x5EE8, 0x9C47, 0x5EE9, 0x9C48, 0x5EEC, 0x9C49, 0x5EF0, 0x9C4C, 0x5EF1, 0x9C4A, 0x5EF3, 0x9C4B, 0x5EF4, 0x9C4D, 0x5EF6, 0x8984, + 0x5EF7, 0x92EC, 0x5EF8, 0x9C4E, 0x5EFA, 0x8C9A, 0x5EFB, 0x89F4, 0x5EFC, 0x9455, 0x5EFE, 0x9C4F, 0x5EFF, 0x93F9, 0x5F01, 0x95D9, + 0x5F03, 0x9C50, 0x5F04, 0x984D, 0x5F09, 0x9C51, 0x5F0A, 0x95BE, 0x5F0B, 0x9C54, 0x5F0C, 0x989F, 0x5F0D, 0x98AF, 0x5F0F, 0x8EAE, + 0x5F10, 0x93F3, 0x5F11, 0x9C55, 0x5F13, 0x8B7C, 0x5F14, 0x92A2, 0x5F15, 0x88F8, 0x5F16, 0x9C56, 0x5F17, 0x95A4, 0x5F18, 0x8D4F, + 0x5F1B, 0x926F, 0x5F1F, 0x92ED, 0x5F21, 0xFAB7, 0x5F25, 0x96ED, 0x5F26, 0x8CB7, 0x5F27, 0x8CCA, 0x5F29, 0x9C57, 0x5F2D, 0x9C58, + 0x5F2F, 0x9C5E, 0x5F31, 0x8EE3, 0x5F34, 0xFAB8, 0x5F35, 0x92A3, 0x5F37, 0x8BAD, 0x5F38, 0x9C59, 0x5F3C, 0x954A, 0x5F3E, 0x9265, + 0x5F41, 0x9C5A, 0x5F45, 0xFA67, 0x5F48, 0x9C5B, 0x5F4A, 0x8BAE, 0x5F4C, 0x9C5C, 0x5F4E, 0x9C5D, 0x5F51, 0x9C5F, 0x5F53, 0x9396, + 0x5F56, 0x9C60, 0x5F57, 0x9C61, 0x5F59, 0x9C62, 0x5F5C, 0x9C53, 0x5F5D, 0x9C52, 0x5F61, 0x9C63, 0x5F62, 0x8C60, 0x5F66, 0x9546, + 0x5F67, 0xFAB9, 0x5F69, 0x8DCA, 0x5F6A, 0x9556, 0x5F6B, 0x92A4, 0x5F6C, 0x956A, 0x5F6D, 0x9C64, 0x5F70, 0x8FB2, 0x5F71, 0x8965, + 0x5F73, 0x9C65, 0x5F77, 0x9C66, 0x5F79, 0x96F0, 0x5F7C, 0x94DE, 0x5F7F, 0x9C69, 0x5F80, 0x899D, 0x5F81, 0x90AA, 0x5F82, 0x9C68, + 0x5F83, 0x9C67, 0x5F84, 0x8C61, 0x5F85, 0x91D2, 0x5F87, 0x9C6D, 0x5F88, 0x9C6B, 0x5F8A, 0x9C6A, 0x5F8B, 0x97A5, 0x5F8C, 0x8CE3, + 0x5F90, 0x8F99, 0x5F91, 0x9C6C, 0x5F92, 0x936B, 0x5F93, 0x8F5D, 0x5F97, 0x93BE, 0x5F98, 0x9C70, 0x5F99, 0x9C6F, 0x5F9E, 0x9C6E, + 0x5FA0, 0x9C71, 0x5FA1, 0x8CE4, 0x5FA8, 0x9C72, 0x5FA9, 0x959C, 0x5FAA, 0x8F7A, 0x5FAD, 0x9C73, 0x5FAE, 0x94F7, 0x5FB3, 0x93BF, + 0x5FB4, 0x92A5, 0x5FB7, 0xFABA, 0x5FB9, 0x934F, 0x5FBC, 0x9C74, 0x5FBD, 0x8B4A, 0x5FC3, 0x9053, 0x5FC5, 0x954B, 0x5FCC, 0x8AF5, + 0x5FCD, 0x9445, 0x5FD6, 0x9C75, 0x5FD7, 0x8E75, 0x5FD8, 0x9659, 0x5FD9, 0x965A, 0x5FDC, 0x899E, 0x5FDD, 0x9C7A, 0x5FDE, 0xFABB, + 0x5FE0, 0x9289, 0x5FE4, 0x9C77, 0x5FEB, 0x89F5, 0x5FF0, 0x9CAB, 0x5FF1, 0x9C79, 0x5FF5, 0x944F, 0x5FF8, 0x9C78, 0x5FFB, 0x9C76, + 0x5FFD, 0x8D9A, 0x5FFF, 0x9C7C, 0x600E, 0x9C83, 0x600F, 0x9C89, 0x6010, 0x9C81, 0x6012, 0x937B, 0x6015, 0x9C86, 0x6016, 0x957C, + 0x6019, 0x9C80, 0x601B, 0x9C85, 0x601C, 0x97E5, 0x601D, 0x8E76, 0x6020, 0x91D3, 0x6021, 0x9C7D, 0x6025, 0x8B7D, 0x6026, 0x9C88, + 0x6027, 0x90AB, 0x6028, 0x8985, 0x6029, 0x9C82, 0x602A, 0x89F6, 0x602B, 0x9C87, 0x602F, 0x8BAF, 0x6031, 0x9C84, 0x603A, 0x9C8A, + 0x6041, 0x9C8C, 0x6042, 0x9C96, 0x6043, 0x9C94, 0x6046, 0x9C91, 0x604A, 0x9C90, 0x604B, 0x97F6, 0x604D, 0x9C92, 0x6050, 0x8BB0, + 0x6052, 0x8D50, 0x6055, 0x8F9A, 0x6059, 0x9C99, 0x605A, 0x9C8B, 0x605D, 0xFABC, 0x605F, 0x9C8F, 0x6060, 0x9C7E, 0x6062, 0x89F8, + 0x6063, 0x9C93, 0x6064, 0x9C95, 0x6065, 0x9270, 0x6068, 0x8DA6, 0x6069, 0x89B6, 0x606A, 0x9C8D, 0x606B, 0x9C98, 0x606C, 0x9C97, + 0x606D, 0x8BB1, 0x606F, 0x91A7, 0x6070, 0x8A86, 0x6075, 0x8C62, 0x6077, 0x9C8E, 0x6081, 0x9C9A, 0x6083, 0x9C9D, 0x6084, 0x9C9F, + 0x6085, 0xFABD, 0x6089, 0x8EBB, 0x608A, 0xFABE, 0x608B, 0x9CA5, 0x608C, 0x92EE, 0x608D, 0x9C9B, 0x6092, 0x9CA3, 0x6094, 0x89F7, + 0x6096, 0x9CA1, 0x6097, 0x9CA2, 0x609A, 0x9C9E, 0x609B, 0x9CA0, 0x609F, 0x8CE5, 0x60A0, 0x9749, 0x60A3, 0x8AB3, 0x60A6, 0x8978, + 0x60A7, 0x9CA4, 0x60A9, 0x9459, 0x60AA, 0x88AB, 0x60B2, 0x94DF, 0x60B3, 0x9C7B, 0x60B4, 0x9CAA, 0x60B5, 0x9CAE, 0x60B6, 0x96E3, + 0x60B8, 0x9CA7, 0x60BC, 0x9389, 0x60BD, 0x9CAC, 0x60C5, 0x8FEE, 0x60C6, 0x9CAD, 0x60C7, 0x93D5, 0x60D1, 0x9866, 0x60D3, 0x9CA9, + 0x60D5, 0xFAC0, 0x60D8, 0x9CAF, 0x60DA, 0x8D9B, 0x60DC, 0x90C9, 0x60DE, 0xFABF, 0x60DF, 0x88D2, 0x60E0, 0x9CA8, 0x60E1, 0x9CA6, + 0x60E3, 0x9179, 0x60E7, 0x9C9C, 0x60E8, 0x8E53, 0x60F0, 0x91C4, 0x60F1, 0x9CBB, 0x60F2, 0xFAC2, 0x60F3, 0x917A, 0x60F4, 0x9CB6, + 0x60F6, 0x9CB3, 0x60F7, 0x9CB4, 0x60F9, 0x8EE4, 0x60FA, 0x9CB7, 0x60FB, 0x9CBA, 0x6100, 0x9CB5, 0x6101, 0x8F44, 0x6103, 0x9CB8, + 0x6106, 0x9CB2, 0x6108, 0x96FA, 0x6109, 0x96F9, 0x610D, 0x9CBC, 0x610E, 0x9CBD, 0x610F, 0x88D3, 0x6111, 0xFAC3, 0x6115, 0x9CB1, + 0x611A, 0x8BF0, 0x611B, 0x88A4, 0x611F, 0x8AB4, 0x6120, 0xFAC1, 0x6121, 0x9CB9, 0x6127, 0x9CC1, 0x6128, 0x9CC0, 0x612C, 0x9CC5, + 0x6130, 0xFAC5, 0x6134, 0x9CC6, 0x6137, 0xFAC4, 0x613C, 0x9CC4, 0x613D, 0x9CC7, 0x613E, 0x9CBF, 0x613F, 0x9CC3, 0x6142, 0x9CC8, + 0x6144, 0x9CC9, 0x6147, 0x9CBE, 0x6148, 0x8E9C, 0x614A, 0x9CC2, 0x614B, 0x91D4, 0x614C, 0x8D51, 0x614D, 0x9CB0, 0x614E, 0x9054, + 0x6153, 0x9CD6, 0x6155, 0x95E7, 0x6158, 0x9CCC, 0x6159, 0x9CCD, 0x615A, 0x9CCE, 0x615D, 0x9CD5, 0x615F, 0x9CD4, 0x6162, 0x969D, + 0x6163, 0x8AB5, 0x6165, 0x9CD2, 0x6167, 0x8C64, 0x6168, 0x8A53, 0x616B, 0x9CCF, 0x616E, 0x97B6, 0x616F, 0x9CD1, 0x6170, 0x88D4, + 0x6171, 0x9CD3, 0x6173, 0x9CCA, 0x6174, 0x9CD0, 0x6175, 0x9CD7, 0x6176, 0x8C63, 0x6177, 0x9CCB, 0x617E, 0x977C, 0x6182, 0x974A, + 0x6187, 0x9CDA, 0x618A, 0x9CDE, 0x618E, 0x919E, 0x6190, 0x97F7, 0x6191, 0x9CDF, 0x6194, 0x9CDC, 0x6196, 0x9CD9, 0x6198, 0xFAC6, + 0x6199, 0x9CD8, 0x619A, 0x9CDD, 0x61A4, 0x95AE, 0x61A7, 0x93B2, 0x61A9, 0x8C65, 0x61AB, 0x9CE0, 0x61AC, 0x9CDB, 0x61AE, 0x9CE1, + 0x61B2, 0x8C9B, 0x61B6, 0x89AF, 0x61BA, 0x9CE9, 0x61BE, 0x8AB6, 0x61C3, 0x9CE7, 0x61C6, 0x9CE8, 0x61C7, 0x8DA7, 0x61C8, 0x9CE6, + 0x61C9, 0x9CE4, 0x61CA, 0x9CE3, 0x61CB, 0x9CEA, 0x61CC, 0x9CE2, 0x61CD, 0x9CEC, 0x61D0, 0x89F9, 0x61E3, 0x9CEE, 0x61E6, 0x9CED, + 0x61F2, 0x92A6, 0x61F4, 0x9CF1, 0x61F6, 0x9CEF, 0x61F7, 0x9CE5, 0x61F8, 0x8C9C, 0x61FA, 0x9CF0, 0x61FC, 0x9CF4, 0x61FD, 0x9CF3, + 0x61FE, 0x9CF5, 0x61FF, 0x9CF2, 0x6200, 0x9CF6, 0x6208, 0x9CF7, 0x6209, 0x9CF8, 0x620A, 0x95E8, 0x620C, 0x9CFA, 0x620D, 0x9CF9, + 0x620E, 0x8F5E, 0x6210, 0x90AC, 0x6211, 0x89E4, 0x6212, 0x89FA, 0x6213, 0xFAC7, 0x6214, 0x9CFB, 0x6216, 0x88BD, 0x621A, 0x90CA, + 0x621B, 0x9CFC, 0x621D, 0xE6C1, 0x621E, 0x9D40, 0x621F, 0x8C81, 0x6221, 0x9D41, 0x6226, 0x90ED, 0x622A, 0x9D42, 0x622E, 0x9D43, + 0x622F, 0x8B59, 0x6230, 0x9D44, 0x6232, 0x9D45, 0x6233, 0x9D46, 0x6234, 0x91D5, 0x6238, 0x8CCB, 0x623B, 0x96DF, 0x623F, 0x965B, + 0x6240, 0x8F8A, 0x6241, 0x9D47, 0x6247, 0x90EE, 0x6248, 0xE7BB, 0x6249, 0x94E0, 0x624B, 0x8EE8, 0x624D, 0x8DCB, 0x624E, 0x9D48, + 0x6253, 0x91C5, 0x6255, 0x95A5, 0x6258, 0x91EF, 0x625B, 0x9D4B, 0x625E, 0x9D49, 0x6260, 0x9D4C, 0x6263, 0x9D4A, 0x6268, 0x9D4D, + 0x626E, 0x95AF, 0x6271, 0x88B5, 0x6276, 0x957D, 0x6279, 0x94E1, 0x627C, 0x9D4E, 0x627E, 0x9D51, 0x627F, 0x8FB3, 0x6280, 0x8B5A, + 0x6282, 0x9D4F, 0x6283, 0x9D56, 0x6284, 0x8FB4, 0x6289, 0x9D50, 0x628A, 0x9463, 0x6291, 0x977D, 0x6292, 0x9D52, 0x6293, 0x9D53, + 0x6294, 0x9D57, 0x6295, 0x938A, 0x6296, 0x9D54, 0x6297, 0x8D52, 0x6298, 0x90DC, 0x629B, 0x9D65, 0x629C, 0x94B2, 0x629E, 0x91F0, + 0x62A6, 0xFAC8, 0x62AB, 0x94E2, 0x62AC, 0x9DAB, 0x62B1, 0x95F8, 0x62B5, 0x92EF, 0x62B9, 0x9695, 0x62BB, 0x9D5A, 0x62BC, 0x899F, + 0x62BD, 0x928A, 0x62C2, 0x9D63, 0x62C5, 0x9253, 0x62C6, 0x9D5D, 0x62C7, 0x9D64, 0x62C8, 0x9D5F, 0x62C9, 0x9D66, 0x62CA, 0x9D62, + 0x62CC, 0x9D61, 0x62CD, 0x948F, 0x62CF, 0x9D5B, 0x62D0, 0x89FB, 0x62D1, 0x9D59, 0x62D2, 0x8B91, 0x62D3, 0x91F1, 0x62D4, 0x9D55, + 0x62D7, 0x9D58, 0x62D8, 0x8D53, 0x62D9, 0x90D9, 0x62DB, 0x8FB5, 0x62DC, 0x9D60, 0x62DD, 0x9471, 0x62E0, 0x8B92, 0x62E1, 0x8A67, + 0x62EC, 0x8A87, 0x62ED, 0x9040, 0x62EE, 0x9D68, 0x62EF, 0x9D6D, 0x62F1, 0x9D69, 0x62F3, 0x8C9D, 0x62F5, 0x9D6E, 0x62F6, 0x8E41, + 0x62F7, 0x8D89, 0x62FE, 0x8F45, 0x62FF, 0x9D5C, 0x6301, 0x8E9D, 0x6302, 0x9D6B, 0x6307, 0x8E77, 0x6308, 0x9D6C, 0x6309, 0x88C2, + 0x630C, 0x9D67, 0x6311, 0x92A7, 0x6319, 0x8B93, 0x631F, 0x8BB2, 0x6327, 0x9D6A, 0x6328, 0x88A5, 0x632B, 0x8DC1, 0x632F, 0x9055, + 0x633A, 0x92F0, 0x633D, 0x94D2, 0x633E, 0x9D70, 0x633F, 0x917D, 0x6349, 0x91A8, 0x634C, 0x8E4A, 0x634D, 0x9D71, 0x634F, 0x9D73, + 0x6350, 0x9D6F, 0x6355, 0x95DF, 0x6357, 0x92BB, 0x635C, 0x917B, 0x6367, 0x95F9, 0x6368, 0x8ECC, 0x6369, 0x9D80, 0x636B, 0x9D7E, + 0x636E, 0x9098, 0x6372, 0x8C9E, 0x6376, 0x9D78, 0x6377, 0x8FB7, 0x637A, 0x93E6, 0x637B, 0x9450, 0x6380, 0x9D76, 0x6383, 0x917C, + 0x6388, 0x8EF6, 0x6389, 0x9D7B, 0x638C, 0x8FB6, 0x638E, 0x9D75, 0x638F, 0x9D7A, 0x6392, 0x9472, 0x6396, 0x9D74, 0x6398, 0x8C40, + 0x639B, 0x8A7C, 0x639F, 0x9D7C, 0x63A0, 0x97A9, 0x63A1, 0x8DCC, 0x63A2, 0x9254, 0x63A3, 0x9D79, 0x63A5, 0x90DA, 0x63A7, 0x8D54, + 0x63A8, 0x9084, 0x63A9, 0x8986, 0x63AA, 0x915B, 0x63AB, 0x9D77, 0x63AC, 0x8B64, 0x63B2, 0x8C66, 0x63B4, 0x92CD, 0x63B5, 0x9D7D, + 0x63BB, 0x917E, 0x63BE, 0x9D81, 0x63C0, 0x9D83, 0x63C3, 0x91B5, 0x63C4, 0x9D89, 0x63C6, 0x9D84, 0x63C9, 0x9D86, 0x63CF, 0x9560, + 0x63D0, 0x92F1, 0x63D2, 0x9D87, 0x63D6, 0x974B, 0x63DA, 0x9767, 0x63DB, 0x8AB7, 0x63E1, 0x88AC, 0x63E3, 0x9D85, 0x63E9, 0x9D82, + 0x63EE, 0x8AF6, 0x63F4, 0x8987, 0x63F5, 0xFAC9, 0x63F6, 0x9D88, 0x63FA, 0x9768, 0x6406, 0x9D8C, 0x640D, 0x91B9, 0x640F, 0x9D93, + 0x6413, 0x9D8D, 0x6416, 0x9D8A, 0x6417, 0x9D91, 0x641C, 0x9D72, 0x6426, 0x9D8E, 0x6428, 0x9D92, 0x642C, 0x94C0, 0x642D, 0x938B, + 0x6434, 0x9D8B, 0x6436, 0x9D8F, 0x643A, 0x8C67, 0x643E, 0x8DEF, 0x6442, 0x90DB, 0x644E, 0x9D97, 0x6458, 0x9345, 0x6460, 0xFACA, + 0x6467, 0x9D94, 0x6469, 0x9680, 0x646F, 0x9D95, 0x6476, 0x9D96, 0x6478, 0x96CC, 0x647A, 0x90A0, 0x6483, 0x8C82, 0x6488, 0x9D9D, + 0x6492, 0x8E54, 0x6493, 0x9D9A, 0x6495, 0x9D99, 0x649A, 0x9451, 0x649D, 0xFACB, 0x649E, 0x93B3, 0x64A4, 0x9350, 0x64A5, 0x9D9B, + 0x64A9, 0x9D9C, 0x64AB, 0x958F, 0x64AD, 0x9464, 0x64AE, 0x8E42, 0x64B0, 0x90EF, 0x64B2, 0x966F, 0x64B9, 0x8A68, 0x64BB, 0x9DA3, + 0x64BC, 0x9D9E, 0x64C1, 0x9769, 0x64C2, 0x9DA5, 0x64C5, 0x9DA1, 0x64C7, 0x9DA2, 0x64CD, 0x9180, 0x64CE, 0xFACC, 0x64D2, 0x9DA0, + 0x64D4, 0x9D5E, 0x64D8, 0x9DA4, 0x64DA, 0x9D9F, 0x64E0, 0x9DA9, 0x64E1, 0x9DAA, 0x64E2, 0x9346, 0x64E3, 0x9DAC, 0x64E6, 0x8E43, + 0x64E7, 0x9DA7, 0x64EC, 0x8B5B, 0x64EF, 0x9DAD, 0x64F1, 0x9DA6, 0x64F2, 0x9DB1, 0x64F4, 0x9DB0, 0x64F6, 0x9DAF, 0x64FA, 0x9DB2, + 0x64FD, 0x9DB4, 0x64FE, 0x8FEF, 0x6500, 0x9DB3, 0x6505, 0x9DB7, 0x6518, 0x9DB5, 0x651C, 0x9DB6, 0x651D, 0x9D90, 0x6523, 0x9DB9, + 0x6524, 0x9DB8, 0x652A, 0x9D98, 0x652B, 0x9DBA, 0x652C, 0x9DAE, 0x652F, 0x8E78, 0x6534, 0x9DBB, 0x6535, 0x9DBC, 0x6536, 0x9DBE, + 0x6537, 0x9DBD, 0x6538, 0x9DBF, 0x6539, 0x89FC, 0x653B, 0x8D55, 0x653E, 0x95FA, 0x653F, 0x90AD, 0x6545, 0x8CCC, 0x6548, 0x9DC1, + 0x654D, 0x9DC4, 0x654E, 0xFACD, 0x654F, 0x9571, 0x6551, 0x8B7E, 0x6555, 0x9DC3, 0x6556, 0x9DC2, 0x6557, 0x9473, 0x6558, 0x9DC5, + 0x6559, 0x8BB3, 0x655D, 0x9DC7, 0x655E, 0x9DC6, 0x6562, 0x8AB8, 0x6563, 0x8E55, 0x6566, 0x93D6, 0x656C, 0x8C68, 0x6570, 0x9094, + 0x6572, 0x9DC8, 0x6574, 0x90AE, 0x6575, 0x9347, 0x6577, 0x957E, 0x6578, 0x9DC9, 0x6582, 0x9DCA, 0x6583, 0x9DCB, 0x6587, 0x95B6, + 0x6588, 0x9B7C, 0x6589, 0x90C4, 0x658C, 0x956B, 0x658E, 0x8DD6, 0x6590, 0x94E3, 0x6591, 0x94C1, 0x6597, 0x936C, 0x6599, 0x97BF, + 0x659B, 0x9DCD, 0x659C, 0x8ECE, 0x659F, 0x9DCE, 0x65A1, 0x88B4, 0x65A4, 0x8BD2, 0x65A5, 0x90CB, 0x65A7, 0x9580, 0x65AB, 0x9DCF, + 0x65AC, 0x8E61, 0x65AD, 0x9266, 0x65AF, 0x8E7A, 0x65B0, 0x9056, 0x65B7, 0x9DD0, 0x65B9, 0x95FB, 0x65BC, 0x8997, 0x65BD, 0x8E7B, + 0x65C1, 0x9DD3, 0x65C3, 0x9DD1, 0x65C4, 0x9DD4, 0x65C5, 0x97B7, 0x65C6, 0x9DD2, 0x65CB, 0x90F9, 0x65CC, 0x9DD5, 0x65CF, 0x91B0, + 0x65D2, 0x9DD6, 0x65D7, 0x8AF8, 0x65D9, 0x9DD8, 0x65DB, 0x9DD7, 0x65E0, 0x9DD9, 0x65E1, 0x9DDA, 0x65E2, 0x8AF9, 0x65E5, 0x93FA, + 0x65E6, 0x9255, 0x65E7, 0x8B8C, 0x65E8, 0x8E7C, 0x65E9, 0x9181, 0x65EC, 0x8F7B, 0x65ED, 0x88AE, 0x65F1, 0x9DDB, 0x65FA, 0x89A0, + 0x65FB, 0x9DDF, 0x6600, 0xFACE, 0x6602, 0x8D56, 0x6603, 0x9DDE, 0x6606, 0x8DA9, 0x6607, 0x8FB8, 0x6609, 0xFAD1, 0x660A, 0x9DDD, + 0x660C, 0x8FB9, 0x660E, 0x96BE, 0x660F, 0x8DA8, 0x6613, 0x88D5, 0x6614, 0x90CC, 0x6615, 0xFACF, 0x661C, 0x9DE4, 0x661E, 0xFAD3, + 0x661F, 0x90AF, 0x6620, 0x8966, 0x6624, 0xFAD4, 0x6625, 0x8F74, 0x6627, 0x9686, 0x6628, 0x8DF0, 0x662D, 0x8FBA, 0x662E, 0xFAD2, + 0x662F, 0x90A5, 0x6631, 0xFA63, 0x6634, 0x9DE3, 0x6635, 0x9DE1, 0x6636, 0x9DE2, 0x663B, 0xFAD0, 0x663C, 0x928B, 0x663F, 0x9E45, + 0x6641, 0x9DE8, 0x6642, 0x8E9E, 0x6643, 0x8D57, 0x6644, 0x9DE6, 0x6649, 0x9DE7, 0x664B, 0x9057, 0x664F, 0x9DE5, 0x6652, 0x8E4E, + 0x6657, 0xFAD6, 0x6659, 0xFAD7, 0x665D, 0x9DEA, 0x665E, 0x9DE9, 0x665F, 0x9DEE, 0x6662, 0x9DEF, 0x6664, 0x9DEB, 0x6665, 0xFAD5, + 0x6666, 0x8A41, 0x6667, 0x9DEC, 0x6668, 0x9DED, 0x6669, 0x94D3, 0x666E, 0x9581, 0x666F, 0x8C69, 0x6670, 0x9DF0, 0x6673, 0xFAD9, + 0x6674, 0x90B0, 0x6676, 0x8FBB, 0x667A, 0x9271, 0x6681, 0x8BC5, 0x6683, 0x9DF1, 0x6684, 0x9DF5, 0x6687, 0x89C9, 0x6688, 0x9DF2, + 0x6689, 0x9DF4, 0x668E, 0x9DF3, 0x6691, 0x8F8B, 0x6696, 0x9267, 0x6697, 0x88C3, 0x6698, 0x9DF6, 0x6699, 0xFADA, 0x669D, 0x9DF7, + 0x66A0, 0xFADB, 0x66A2, 0x92A8, 0x66A6, 0x97EF, 0x66AB, 0x8E62, 0x66AE, 0x95E9, 0x66B2, 0xFADC, 0x66B4, 0x965C, 0x66B8, 0x9E41, + 0x66B9, 0x9DF9, 0x66BC, 0x9DFC, 0x66BE, 0x9DFB, 0x66BF, 0xFADD, 0x66C1, 0x9DF8, 0x66C4, 0x9E40, 0x66C7, 0x93DC, 0x66C9, 0x9DFA, + 0x66D6, 0x9E42, 0x66D9, 0x8F8C, 0x66DA, 0x9E43, 0x66DC, 0x976A, 0x66DD, 0x9498, 0x66E0, 0x9E44, 0x66E6, 0x9E46, 0x66E9, 0x9E47, + 0x66F0, 0x9E48, 0x66F2, 0x8BC8, 0x66F3, 0x8967, 0x66F4, 0x8D58, 0x66F5, 0x9E49, 0x66F7, 0x9E4A, 0x66F8, 0x8F91, 0x66F9, 0x9182, + 0x66FA, 0xFADE, 0x66FB, 0xFA66, 0x66FC, 0x99D6, 0x66FD, 0x915D, 0x66FE, 0x915C, 0x66FF, 0x91D6, 0x6700, 0x8DC5, 0x6703, 0x98F0, + 0x6708, 0x8C8E, 0x6709, 0x974C, 0x670B, 0x95FC, 0x670D, 0x959E, 0x670E, 0xFADF, 0x670F, 0x9E4B, 0x6714, 0x8DF1, 0x6715, 0x92BD, + 0x6716, 0x9E4C, 0x6717, 0x984E, 0x671B, 0x965D, 0x671D, 0x92A9, 0x671E, 0x9E4D, 0x671F, 0x8AFA, 0x6726, 0x9E4E, 0x6727, 0x9E4F, + 0x6728, 0x96D8, 0x672A, 0x96A2, 0x672B, 0x9696, 0x672C, 0x967B, 0x672D, 0x8E44, 0x672E, 0x9E51, 0x6731, 0x8EE9, 0x6734, 0x9670, + 0x6736, 0x9E53, 0x6737, 0x9E56, 0x6738, 0x9E55, 0x673A, 0x8AF7, 0x673D, 0x8B80, 0x673F, 0x9E52, 0x6741, 0x9E54, 0x6746, 0x9E57, + 0x6749, 0x9099, 0x674E, 0x979B, 0x674F, 0x88C7, 0x6750, 0x8DDE, 0x6751, 0x91BA, 0x6753, 0x8EDB, 0x6756, 0x8FF1, 0x6759, 0x9E5A, + 0x675C, 0x936D, 0x675E, 0x9E58, 0x675F, 0x91A9, 0x6760, 0x9E59, 0x6761, 0x8FF0, 0x6762, 0x96DB, 0x6763, 0x9E5B, 0x6764, 0x9E5C, + 0x6765, 0x9788, 0x6766, 0xFAE1, 0x676A, 0x9E61, 0x676D, 0x8D59, 0x676F, 0x9474, 0x6770, 0x9E5E, 0x6771, 0x938C, 0x6772, 0x9DDC, + 0x6773, 0x9DE0, 0x6775, 0x8B6E, 0x6777, 0x9466, 0x677C, 0x9E60, 0x677E, 0x8FBC, 0x677F, 0x94C2, 0x6785, 0x9E66, 0x6787, 0x94F8, + 0x6789, 0x9E5D, 0x678B, 0x9E63, 0x678C, 0x9E62, 0x6790, 0x90CD, 0x6795, 0x968D, 0x6797, 0x97D1, 0x679A, 0x9687, 0x679C, 0x89CA, + 0x679D, 0x8E7D, 0x67A0, 0x9867, 0x67A1, 0x9E65, 0x67A2, 0x9095, 0x67A6, 0x9E64, 0x67A9, 0x9E5F, 0x67AF, 0x8CCD, 0x67B3, 0x9E6B, + 0x67B4, 0x9E69, 0x67B6, 0x89CB, 0x67B7, 0x9E67, 0x67B8, 0x9E6D, 0x67B9, 0x9E73, 0x67BB, 0xFAE2, 0x67C0, 0xFAE4, 0x67C1, 0x91C6, + 0x67C4, 0x95BF, 0x67C6, 0x9E75, 0x67CA, 0x9541, 0x67CE, 0x9E74, 0x67CF, 0x9490, 0x67D0, 0x965E, 0x67D1, 0x8AB9, 0x67D3, 0x90F5, + 0x67D4, 0x8F5F, 0x67D8, 0x92D1, 0x67DA, 0x974D, 0x67DD, 0x9E70, 0x67DE, 0x9E6F, 0x67E2, 0x9E71, 0x67E4, 0x9E6E, 0x67E7, 0x9E76, + 0x67E9, 0x9E6C, 0x67EC, 0x9E6A, 0x67EE, 0x9E72, 0x67EF, 0x9E68, 0x67F1, 0x928C, 0x67F3, 0x96F6, 0x67F4, 0x8EC4, 0x67F5, 0x8DF2, + 0x67FB, 0x8DB8, 0x67FE, 0x968F, 0x67FF, 0x8A60, 0x6801, 0xFAE5, 0x6802, 0x92CC, 0x6803, 0x93C8, 0x6804, 0x8968, 0x6813, 0x90F0, + 0x6816, 0x90B2, 0x6817, 0x8C49, 0x681E, 0x9E78, 0x6821, 0x8D5A, 0x6822, 0x8A9C, 0x6829, 0x9E7A, 0x682A, 0x8A94, 0x682B, 0x9E81, + 0x6832, 0x9E7D, 0x6834, 0x90F1, 0x6838, 0x8A6A, 0x6839, 0x8DAA, 0x683C, 0x8A69, 0x683D, 0x8DCD, 0x6840, 0x9E7B, 0x6841, 0x8C85, + 0x6842, 0x8C6A, 0x6843, 0x938D, 0x6844, 0xFAE6, 0x6846, 0x9E79, 0x6848, 0x88C4, 0x684D, 0x9E7C, 0x684E, 0x9E7E, 0x6850, 0x8BCB, + 0x6851, 0x8C4B, 0x6852, 0xFAE3, 0x6853, 0x8ABA, 0x6854, 0x8B6A, 0x6859, 0x9E82, 0x685C, 0x8DF7, 0x685D, 0x9691, 0x685F, 0x8E56, + 0x6863, 0x9E83, 0x6867, 0x954F, 0x6874, 0x9E8F, 0x6876, 0x89B1, 0x6877, 0x9E84, 0x687E, 0x9E95, 0x687F, 0x9E85, 0x6881, 0x97C0, + 0x6883, 0x9E8C, 0x6885, 0x947E, 0x688D, 0x9E94, 0x688F, 0x9E87, 0x6893, 0x88B2, 0x6894, 0x9E89, 0x6897, 0x8D5B, 0x689B, 0x9E8B, + 0x689D, 0x9E8A, 0x689F, 0x9E86, 0x68A0, 0x9E91, 0x68A2, 0x8FBD, 0x68A6, 0x9AEB, 0x68A7, 0x8CE6, 0x68A8, 0x979C, 0x68AD, 0x9E88, + 0x68AF, 0x92F2, 0x68B0, 0x8A42, 0x68B1, 0x8DAB, 0x68B3, 0x9E80, 0x68B5, 0x9E90, 0x68B6, 0x8A81, 0x68B9, 0x9E8E, 0x68BA, 0x9E92, + 0x68BC, 0x938E, 0x68C4, 0x8AFC, 0x68C6, 0x9EB0, 0x68C8, 0xFA64, 0x68C9, 0x96C7, 0x68CA, 0x9E97, 0x68CB, 0x8AFB, 0x68CD, 0x9E9E, + 0x68CF, 0xFAE7, 0x68D2, 0x965F, 0x68D4, 0x9E9F, 0x68D5, 0x9EA1, 0x68D7, 0x9EA5, 0x68D8, 0x9E99, 0x68DA, 0x9249, 0x68DF, 0x938F, + 0x68E0, 0x9EA9, 0x68E1, 0x9E9C, 0x68E3, 0x9EA6, 0x68E7, 0x9EA0, 0x68EE, 0x9058, 0x68EF, 0x9EAA, 0x68F2, 0x90B1, 0x68F9, 0x9EA8, + 0x68FA, 0x8ABB, 0x6900, 0x986F, 0x6901, 0x9E96, 0x6904, 0x9EA4, 0x6905, 0x88D6, 0x6908, 0x9E98, 0x690B, 0x96B8, 0x690C, 0x9E9D, + 0x690D, 0x9041, 0x690E, 0x92C5, 0x690F, 0x9E93, 0x6912, 0x9EA3, 0x6919, 0x909A, 0x691A, 0x9EAD, 0x691B, 0x8A91, 0x691C, 0x8C9F, + 0x6921, 0x9EAF, 0x6922, 0x9E9A, 0x6923, 0x9EAE, 0x6925, 0x9EA7, 0x6926, 0x9E9B, 0x6928, 0x9EAB, 0x692A, 0x9EAC, 0x6930, 0x9EBD, + 0x6934, 0x93CC, 0x6936, 0x9EA2, 0x6939, 0x9EB9, 0x693D, 0x9EBB, 0x693F, 0x92D6, 0x694A, 0x976B, 0x6953, 0x9596, 0x6954, 0x9EB6, + 0x6955, 0x91C8, 0x6959, 0x9EBC, 0x695A, 0x915E, 0x695C, 0x9EB3, 0x695D, 0x9EC0, 0x695E, 0x9EBF, 0x6960, 0x93ED, 0x6961, 0x9EBE, + 0x6962, 0x93E8, 0x6968, 0xFAE9, 0x696A, 0x9EC2, 0x696B, 0x9EB5, 0x696D, 0x8BC6, 0x696E, 0x9EB8, 0x696F, 0x8F7C, 0x6973, 0x9480, + 0x6974, 0x9EBA, 0x6975, 0x8BC9, 0x6977, 0x9EB2, 0x6978, 0x9EB4, 0x6979, 0x9EB1, 0x697C, 0x984F, 0x697D, 0x8A79, 0x697E, 0x9EB7, + 0x6981, 0x9EC1, 0x6982, 0x8A54, 0x698A, 0x8DE5, 0x698E, 0x897C, 0x6991, 0x9ED2, 0x6994, 0x9850, 0x6995, 0x9ED5, 0x6998, 0xFAEB, + 0x699B, 0x9059, 0x699C, 0x9ED4, 0x69A0, 0x9ED3, 0x69A7, 0x9ED0, 0x69AE, 0x9EC4, 0x69B1, 0x9EE1, 0x69B2, 0x9EC3, 0x69B4, 0x9ED6, + 0x69BB, 0x9ECE, 0x69BE, 0x9EC9, 0x69BF, 0x9EC6, 0x69C1, 0x9EC7, 0x69C3, 0x9ECF, 0x69C7, 0xEAA0, 0x69CA, 0x9ECC, 0x69CB, 0x8D5C, + 0x69CC, 0x92C6, 0x69CD, 0x9184, 0x69CE, 0x9ECA, 0x69D0, 0x9EC5, 0x69D3, 0x9EC8, 0x69D8, 0x976C, 0x69D9, 0x968A, 0x69DD, 0x9ECD, + 0x69DE, 0x9ED7, 0x69E2, 0xFAEC, 0x69E7, 0x9EDF, 0x69E8, 0x9ED8, 0x69EB, 0x9EE5, 0x69ED, 0x9EE3, 0x69F2, 0x9EDE, 0x69F9, 0x9EDD, + 0x69FB, 0x92CE, 0x69FD, 0x9185, 0x69FF, 0x9EDB, 0x6A02, 0x9ED9, 0x6A05, 0x9EE0, 0x6A0A, 0x9EE6, 0x6A0B, 0x94F3, 0x6A0C, 0x9EEC, + 0x6A12, 0x9EE7, 0x6A13, 0x9EEA, 0x6A14, 0x9EE4, 0x6A17, 0x9294, 0x6A19, 0x9557, 0x6A1B, 0x9EDA, 0x6A1E, 0x9EE2, 0x6A1F, 0x8FBE, + 0x6A21, 0x96CD, 0x6A22, 0x9EF6, 0x6A23, 0x9EE9, 0x6A29, 0x8CA0, 0x6A2A, 0x89A1, 0x6A2B, 0x8A7E, 0x6A2E, 0x9ED1, 0x6A30, 0xFAED, + 0x6A35, 0x8FBF, 0x6A36, 0x9EEE, 0x6A38, 0x9EF5, 0x6A39, 0x8EF7, 0x6A3A, 0x8A92, 0x6A3D, 0x924D, 0x6A44, 0x9EEB, 0x6A46, 0xFAEF, + 0x6A47, 0x9EF0, 0x6A48, 0x9EF4, 0x6A4B, 0x8BB4, 0x6A58, 0x8B6B, 0x6A59, 0x9EF2, 0x6A5F, 0x8B40, 0x6A61, 0x93C9, 0x6A62, 0x9EF1, + 0x6A66, 0x9EF3, 0x6A6B, 0xFAEE, 0x6A72, 0x9EED, 0x6A73, 0xFAF0, 0x6A78, 0x9EEF, 0x6A7E, 0xFAF1, 0x6A7F, 0x8A80, 0x6A80, 0x9268, + 0x6A84, 0x9EFA, 0x6A8D, 0x9EF8, 0x6A8E, 0x8CE7, 0x6A90, 0x9EF7, 0x6A97, 0x9F40, 0x6A9C, 0x9E77, 0x6AA0, 0x9EF9, 0x6AA2, 0x9EFB, + 0x6AA3, 0x9EFC, 0x6AAA, 0x9F4B, 0x6AAC, 0x9F47, 0x6AAE, 0x9E8D, 0x6AB3, 0x9F46, 0x6AB8, 0x9F45, 0x6ABB, 0x9F42, 0x6AC1, 0x9EE8, + 0x6AC2, 0x9F44, 0x6AC3, 0x9F43, 0x6AD1, 0x9F49, 0x6AD3, 0x9845, 0x6ADA, 0x9F4C, 0x6ADB, 0x8BF9, 0x6ADE, 0x9F48, 0x6ADF, 0x9F4A, + 0x6AE2, 0xFAF2, 0x6AE4, 0xFAF3, 0x6AE8, 0x94A5, 0x6AEA, 0x9F4D, 0x6AFA, 0x9F51, 0x6AFB, 0x9F4E, 0x6B04, 0x9793, 0x6B05, 0x9F4F, + 0x6B0A, 0x9EDC, 0x6B12, 0x9F52, 0x6B16, 0x9F53, 0x6B1D, 0x8954, 0x6B1F, 0x9F55, 0x6B20, 0x8C87, 0x6B21, 0x8E9F, 0x6B23, 0x8BD3, + 0x6B27, 0x89A2, 0x6B32, 0x977E, 0x6B37, 0x9F57, 0x6B38, 0x9F56, 0x6B39, 0x9F59, 0x6B3A, 0x8B5C, 0x6B3D, 0x8BD4, 0x6B3E, 0x8ABC, + 0x6B43, 0x9F5C, 0x6B47, 0x9F5B, 0x6B49, 0x9F5D, 0x6B4C, 0x89CC, 0x6B4E, 0x9256, 0x6B50, 0x9F5E, 0x6B53, 0x8ABD, 0x6B54, 0x9F60, + 0x6B59, 0x9F5F, 0x6B5B, 0x9F61, 0x6B5F, 0x9F62, 0x6B61, 0x9F63, 0x6B62, 0x8E7E, 0x6B63, 0x90B3, 0x6B64, 0x8D9F, 0x6B66, 0x9590, + 0x6B69, 0x95E0, 0x6B6A, 0x9863, 0x6B6F, 0x8E95, 0x6B73, 0x8DCE, 0x6B74, 0x97F0, 0x6B78, 0x9F64, 0x6B79, 0x9F65, 0x6B7B, 0x8E80, + 0x6B7F, 0x9F66, 0x6B80, 0x9F67, 0x6B83, 0x9F69, 0x6B84, 0x9F68, 0x6B86, 0x9677, 0x6B89, 0x8F7D, 0x6B8A, 0x8EEA, 0x6B8B, 0x8E63, + 0x6B8D, 0x9F6A, 0x6B95, 0x9F6C, 0x6B96, 0x9042, 0x6B98, 0x9F6B, 0x6B9E, 0x9F6D, 0x6BA4, 0x9F6E, 0x6BAA, 0x9F6F, 0x6BAB, 0x9F70, + 0x6BAF, 0x9F71, 0x6BB1, 0x9F73, 0x6BB2, 0x9F72, 0x6BB3, 0x9F74, 0x6BB4, 0x89A3, 0x6BB5, 0x9269, 0x6BB7, 0x9F75, 0x6BBA, 0x8E45, + 0x6BBB, 0x8A6B, 0x6BBC, 0x9F76, 0x6BBF, 0x9361, 0x6BC0, 0x9ACA, 0x6BC5, 0x8B42, 0x6BC6, 0x9F77, 0x6BCB, 0x9F78, 0x6BCD, 0x95EA, + 0x6BCE, 0x9688, 0x6BD2, 0x93C5, 0x6BD3, 0x9F79, 0x6BD4, 0x94E4, 0x6BD6, 0xFAF4, 0x6BD8, 0x94F9, 0x6BDB, 0x96D1, 0x6BDF, 0x9F7A, + 0x6BEB, 0x9F7C, 0x6BEC, 0x9F7B, 0x6BEF, 0x9F7E, 0x6BF3, 0x9F7D, 0x6C08, 0x9F81, 0x6C0F, 0x8E81, 0x6C11, 0x96AF, 0x6C13, 0x9F82, + 0x6C14, 0x9F83, 0x6C17, 0x8B43, 0x6C1B, 0x9F84, 0x6C23, 0x9F86, 0x6C24, 0x9F85, 0x6C34, 0x9085, 0x6C37, 0x9558, 0x6C38, 0x8969, + 0x6C3E, 0x94C3, 0x6C3F, 0xFAF5, 0x6C40, 0x92F3, 0x6C41, 0x8F60, 0x6C42, 0x8B81, 0x6C4E, 0x94C4, 0x6C50, 0x8EAC, 0x6C55, 0x9F88, + 0x6C57, 0x8ABE, 0x6C5A, 0x8998, 0x6C5C, 0xFAF6, 0x6C5D, 0x93F0, 0x6C5E, 0x9F87, 0x6C5F, 0x8D5D, 0x6C60, 0x9272, 0x6C62, 0x9F89, + 0x6C68, 0x9F91, 0x6C6A, 0x9F8A, 0x6C6F, 0xFAF8, 0x6C70, 0x91BF, 0x6C72, 0x8B82, 0x6C73, 0x9F92, 0x6C7A, 0x8C88, 0x6C7D, 0x8B44, + 0x6C7E, 0x9F90, 0x6C81, 0x9F8E, 0x6C82, 0x9F8B, 0x6C83, 0x9780, 0x6C86, 0xFAF7, 0x6C88, 0x92BE, 0x6C8C, 0x93D7, 0x6C8D, 0x9F8C, + 0x6C90, 0x9F94, 0x6C92, 0x9F93, 0x6C93, 0x8C42, 0x6C96, 0x89AB, 0x6C99, 0x8DB9, 0x6C9A, 0x9F8D, 0x6C9B, 0x9F8F, 0x6CA1, 0x9676, + 0x6CA2, 0x91F2, 0x6CAB, 0x9697, 0x6CAE, 0x9F9C, 0x6CB1, 0x9F9D, 0x6CB3, 0x89CD, 0x6CB8, 0x95A6, 0x6CB9, 0x96FB, 0x6CBA, 0x9F9F, + 0x6CBB, 0x8EA1, 0x6CBC, 0x8FC0, 0x6CBD, 0x9F98, 0x6CBE, 0x9F9E, 0x6CBF, 0x8988, 0x6CC1, 0x8BB5, 0x6CC4, 0x9F95, 0x6CC5, 0x9F9A, + 0x6CC9, 0x90F2, 0x6CCA, 0x9491, 0x6CCC, 0x94E5, 0x6CD3, 0x9F97, 0x6CD5, 0x9640, 0x6CD7, 0x9F99, 0x6CD9, 0x9FA2, 0x6CDA, 0xFAF9, + 0x6CDB, 0x9FA0, 0x6CDD, 0x9F9B, 0x6CE1, 0x9641, 0x6CE2, 0x9467, 0x6CE3, 0x8B83, 0x6CE5, 0x9344, 0x6CE8, 0x928D, 0x6CEA, 0x9FA3, + 0x6CEF, 0x9FA1, 0x6CF0, 0x91D7, 0x6CF1, 0x9F96, 0x6CF3, 0x896A, 0x6D04, 0xFAFA, 0x6D0B, 0x976D, 0x6D0C, 0x9FAE, 0x6D12, 0x9FAD, + 0x6D17, 0x90F4, 0x6D19, 0x9FAA, 0x6D1B, 0x978C, 0x6D1E, 0x93B4, 0x6D1F, 0x9FA4, 0x6D25, 0x92C3, 0x6D29, 0x896B, 0x6D2A, 0x8D5E, + 0x6D2B, 0x9FA7, 0x6D32, 0x8F46, 0x6D33, 0x9FAC, 0x6D35, 0x9FAB, 0x6D36, 0x9FA6, 0x6D38, 0x9FA9, 0x6D3B, 0x8A88, 0x6D3D, 0x9FA8, + 0x6D3E, 0x9468, 0x6D41, 0x97AC, 0x6D44, 0x8FF2, 0x6D45, 0x90F3, 0x6D59, 0x9FB4, 0x6D5A, 0x9FB2, 0x6D5C, 0x956C, 0x6D63, 0x9FAF, + 0x6D64, 0x9FB1, 0x6D66, 0x8959, 0x6D69, 0x8D5F, 0x6D6A, 0x9851, 0x6D6C, 0x8A5C, 0x6D6E, 0x9582, 0x6D6F, 0xFAFC, 0x6D74, 0x9781, + 0x6D77, 0x8A43, 0x6D78, 0x905A, 0x6D79, 0x9FB3, 0x6D85, 0x9FB8, 0x6D87, 0xFAFB, 0x6D88, 0x8FC1, 0x6D8C, 0x974F, 0x6D8E, 0x9FB5, + 0x6D93, 0x9FB0, 0x6D95, 0x9FB6, 0x6D96, 0xFB40, 0x6D99, 0x97DC, 0x6D9B, 0x9393, 0x6D9C, 0x93C0, 0x6DAC, 0xFB41, 0x6DAF, 0x8A55, + 0x6DB2, 0x8974, 0x6DB5, 0x9FBC, 0x6DB8, 0x9FBF, 0x6DBC, 0x97C1, 0x6DC0, 0x9784, 0x6DC5, 0x9FC6, 0x6DC6, 0x9FC0, 0x6DC7, 0x9FBD, + 0x6DCB, 0x97D2, 0x6DCC, 0x9FC3, 0x6DCF, 0xFB42, 0x6DD1, 0x8F69, 0x6DD2, 0x9FC5, 0x6DD5, 0x9FCA, 0x6DD8, 0x9391, 0x6DD9, 0x9FC8, + 0x6DDE, 0x9FC2, 0x6DE1, 0x9257, 0x6DE4, 0x9FC9, 0x6DE6, 0x9FBE, 0x6DE8, 0x9FC4, 0x6DEA, 0x9FCB, 0x6DEB, 0x88FA, 0x6DEC, 0x9FC1, + 0x6DEE, 0x9FCC, 0x6DF1, 0x905B, 0x6DF2, 0xFB44, 0x6DF3, 0x8F7E, 0x6DF5, 0x95A3, 0x6DF7, 0x8DAC, 0x6DF8, 0xFB43, 0x6DF9, 0x9FB9, + 0x6DFA, 0x9FC7, 0x6DFB, 0x9359, 0x6DFC, 0xFB45, 0x6E05, 0x90B4, 0x6E07, 0x8A89, 0x6E08, 0x8DCF, 0x6E09, 0x8FC2, 0x6E0A, 0x9FBB, + 0x6E0B, 0x8F61, 0x6E13, 0x8C6B, 0x6E15, 0x9FBA, 0x6E19, 0x9FD0, 0x6E1A, 0x8F8D, 0x6E1B, 0x8CB8, 0x6E1D, 0x9FDF, 0x6E1F, 0x9FD9, + 0x6E20, 0x8B94, 0x6E21, 0x936E, 0x6E23, 0x9FD4, 0x6E24, 0x9FDD, 0x6E25, 0x88AD, 0x6E26, 0x8951, 0x6E27, 0xFB48, 0x6E29, 0x89B7, + 0x6E2B, 0x9FD6, 0x6E2C, 0x91AA, 0x6E2D, 0x9FCD, 0x6E2E, 0x9FCF, 0x6E2F, 0x8D60, 0x6E38, 0x9FE0, 0x6E39, 0xFB46, 0x6E3A, 0x9FDB, + 0x6E3C, 0xFB49, 0x6E3E, 0x9FD3, 0x6E43, 0x9FDA, 0x6E4A, 0x96A9, 0x6E4D, 0x9FD8, 0x6E4E, 0x9FDC, 0x6E56, 0x8CCE, 0x6E58, 0x8FC3, + 0x6E5B, 0x9258, 0x6E5C, 0xFB47, 0x6E5F, 0x9FD2, 0x6E67, 0x974E, 0x6E6B, 0x9FD5, 0x6E6E, 0x9FCE, 0x6E6F, 0x9392, 0x6E72, 0x9FD1, + 0x6E76, 0x9FD7, 0x6E7E, 0x9870, 0x6E7F, 0x8EBC, 0x6E80, 0x969E, 0x6E82, 0x9FE1, 0x6E8C, 0x94AC, 0x6E8F, 0x9FED, 0x6E90, 0x8CB9, + 0x6E96, 0x8F80, 0x6E98, 0x9FE3, 0x6E9C, 0x97AD, 0x6E9D, 0x8D61, 0x6E9F, 0x9FF0, 0x6EA2, 0x88EC, 0x6EA5, 0x9FEE, 0x6EAA, 0x9FE2, + 0x6EAF, 0x9FE8, 0x6EB2, 0x9FEA, 0x6EB6, 0x976E, 0x6EB7, 0x9FE5, 0x6EBA, 0x934D, 0x6EBD, 0x9FE7, 0x6EBF, 0xFB4A, 0x6EC2, 0x9FEF, + 0x6EC4, 0x9FE9, 0x6EC5, 0x96C5, 0x6EC9, 0x9FE4, 0x6ECB, 0x8EA0, 0x6ECC, 0x9FFC, 0x6ED1, 0x8A8A, 0x6ED3, 0x9FE6, 0x6ED4, 0x9FEB, + 0x6ED5, 0x9FEC, 0x6EDD, 0x91EA, 0x6EDE, 0x91D8, 0x6EEC, 0x9FF4, 0x6EEF, 0x9FFA, 0x6EF2, 0x9FF8, 0x6EF4, 0x9348, 0x6EF7, 0xE042, + 0x6EF8, 0x9FF5, 0x6EFE, 0x9FF6, 0x6EFF, 0x9FDE, 0x6F01, 0x8B99, 0x6F02, 0x9559, 0x6F06, 0x8EBD, 0x6F09, 0x8D97, 0x6F0F, 0x9852, + 0x6F11, 0x9FF2, 0x6F13, 0xE041, 0x6F14, 0x8989, 0x6F15, 0x9186, 0x6F20, 0x9499, 0x6F22, 0x8ABF, 0x6F23, 0x97F8, 0x6F2B, 0x969F, + 0x6F2C, 0x92D0, 0x6F31, 0x9FF9, 0x6F32, 0x9FFB, 0x6F38, 0x9151, 0x6F3E, 0xE040, 0x6F3F, 0x9FF7, 0x6F41, 0x9FF1, 0x6F45, 0x8AC1, + 0x6F54, 0x8C89, 0x6F58, 0xE04E, 0x6F5B, 0xE049, 0x6F5C, 0x90F6, 0x6F5F, 0x8A83, 0x6F64, 0x8F81, 0x6F66, 0xE052, 0x6F6D, 0xE04B, + 0x6F6E, 0x92AA, 0x6F6F, 0xE048, 0x6F70, 0x92D7, 0x6F74, 0xE06B, 0x6F78, 0xE045, 0x6F7A, 0xE044, 0x6F7C, 0xE04D, 0x6F80, 0xE047, + 0x6F81, 0xE046, 0x6F82, 0xE04C, 0x6F84, 0x909F, 0x6F86, 0xE043, 0x6F88, 0xFB4B, 0x6F8E, 0xE04F, 0x6F91, 0xE050, 0x6F97, 0x8AC0, + 0x6FA1, 0xE055, 0x6FA3, 0xE054, 0x6FA4, 0xE056, 0x6FAA, 0xE059, 0x6FB1, 0x9362, 0x6FB3, 0xE053, 0x6FB5, 0xFB4C, 0x6FB9, 0xE057, + 0x6FC0, 0x8C83, 0x6FC1, 0x91F7, 0x6FC2, 0xE051, 0x6FC3, 0x945A, 0x6FC6, 0xE058, 0x6FD4, 0xE05D, 0x6FD5, 0xE05B, 0x6FD8, 0xE05E, + 0x6FDB, 0xE061, 0x6FDF, 0xE05A, 0x6FE0, 0x8D8A, 0x6FE1, 0x9447, 0x6FE4, 0x9FB7, 0x6FEB, 0x9794, 0x6FEC, 0xE05C, 0x6FEE, 0xE060, + 0x6FEF, 0x91F3, 0x6FF1, 0xE05F, 0x6FF3, 0xE04A, 0x6FF5, 0xFB4D, 0x6FF6, 0xE889, 0x6FFA, 0xE064, 0x6FFE, 0xE068, 0x7001, 0xE066, + 0x7005, 0xFB4E, 0x7007, 0xFB4F, 0x7009, 0xE062, 0x700B, 0xE063, 0x700F, 0xE067, 0x7011, 0xE065, 0x7015, 0x956D, 0x7018, 0xE06D, + 0x701A, 0xE06A, 0x701B, 0xE069, 0x701D, 0xE06C, 0x701E, 0x93D2, 0x701F, 0xE06E, 0x7026, 0x9295, 0x7027, 0x91EB, 0x7028, 0xFB50, + 0x702C, 0x90A3, 0x7030, 0xE06F, 0x7032, 0xE071, 0x703E, 0xE070, 0x704C, 0x9FF3, 0x7051, 0xE072, 0x7058, 0x93E5, 0x7063, 0xE073, + 0x706B, 0x89CE, 0x706F, 0x9394, 0x7070, 0x8A44, 0x7078, 0x8B84, 0x707C, 0x8EDC, 0x707D, 0x8DD0, 0x7085, 0xFB51, 0x7089, 0x9846, + 0x708A, 0x9086, 0x708E, 0x898A, 0x7092, 0xE075, 0x7099, 0xE074, 0x70AB, 0xFB52, 0x70AC, 0xE078, 0x70AD, 0x9259, 0x70AE, 0xE07B, + 0x70AF, 0xE076, 0x70B3, 0xE07A, 0x70B8, 0xE079, 0x70B9, 0x935F, 0x70BA, 0x88D7, 0x70BB, 0xFA62, 0x70C8, 0x97F3, 0x70CB, 0xE07D, + 0x70CF, 0x8947, 0x70D9, 0xE080, 0x70DD, 0xE07E, 0x70DF, 0xE07C, 0x70F1, 0xE077, 0x70F9, 0x9642, 0x70FD, 0xE082, 0x7104, 0xFB54, + 0x7109, 0xE081, 0x710F, 0xFB53, 0x7114, 0x898B, 0x7119, 0xE084, 0x711A, 0x95B0, 0x711C, 0xE083, 0x7121, 0x96B3, 0x7126, 0x8FC5, + 0x7136, 0x9152, 0x713C, 0x8FC4, 0x7146, 0xFB56, 0x7147, 0xFB57, 0x7149, 0x97F9, 0x714C, 0xE08A, 0x714E, 0x90F7, 0x7155, 0xE086, + 0x7156, 0xE08B, 0x7159, 0x898C, 0x715C, 0xFB55, 0x7162, 0xE089, 0x7164, 0x9481, 0x7165, 0xE085, 0x7166, 0xE088, 0x7167, 0x8FC6, + 0x7169, 0x94CF, 0x716C, 0xE08C, 0x716E, 0x8ECF, 0x717D, 0x90F8, 0x7184, 0xE08F, 0x7188, 0xE087, 0x718A, 0x8C46, 0x718F, 0xE08D, + 0x7194, 0x976F, 0x7195, 0xE090, 0x7199, 0xEAA4, 0x719F, 0x8F6E, 0x71A8, 0xE091, 0x71AC, 0xE092, 0x71B1, 0x944D, 0x71B9, 0xE094, + 0x71BE, 0xE095, 0x71C1, 0xFB59, 0x71C3, 0x9452, 0x71C8, 0x9395, 0x71C9, 0xE097, 0x71CE, 0xE099, 0x71D0, 0x97D3, 0x71D2, 0xE096, + 0x71D4, 0xE098, 0x71D5, 0x898D, 0x71D7, 0xE093, 0x71DF, 0x9A7A, 0x71E0, 0xE09A, 0x71E5, 0x9187, 0x71E6, 0x8E57, 0x71E7, 0xE09C, + 0x71EC, 0xE09B, 0x71ED, 0x9043, 0x71EE, 0x99D7, 0x71F5, 0xE09D, 0x71F9, 0xE09F, 0x71FB, 0xE08E, 0x71FC, 0xE09E, 0x71FE, 0xFB5A, + 0x71FF, 0xE0A0, 0x7206, 0x949A, 0x720D, 0xE0A1, 0x7210, 0xE0A2, 0x721B, 0xE0A3, 0x7228, 0xE0A4, 0x722A, 0x92DC, 0x722C, 0xE0A6, + 0x722D, 0xE0A5, 0x7230, 0xE0A7, 0x7232, 0xE0A8, 0x7235, 0x8EDD, 0x7236, 0x9583, 0x723A, 0x96EA, 0x723B, 0xE0A9, 0x723C, 0xE0AA, + 0x723D, 0x9175, 0x723E, 0x8EA2, 0x723F, 0xE0AB, 0x7240, 0xE0AC, 0x7246, 0xE0AD, 0x7247, 0x95D0, 0x7248, 0x94C5, 0x724B, 0xE0AE, + 0x724C, 0x9476, 0x7252, 0x92AB, 0x7258, 0xE0AF, 0x7259, 0x89E5, 0x725B, 0x8B8D, 0x725D, 0x96C4, 0x725F, 0x96B4, 0x7261, 0x89B2, + 0x7262, 0x9853, 0x7267, 0x9671, 0x7269, 0x95A8, 0x7272, 0x90B5, 0x7274, 0xE0B0, 0x7279, 0x93C1, 0x727D, 0x8CA1, 0x727E, 0xE0B1, + 0x7280, 0x8DD2, 0x7281, 0xE0B3, 0x7282, 0xE0B2, 0x7287, 0xE0B4, 0x7292, 0xE0B5, 0x7296, 0xE0B6, 0x72A0, 0x8B5D, 0x72A2, 0xE0B7, + 0x72A7, 0xE0B8, 0x72AC, 0x8CA2, 0x72AF, 0x94C6, 0x72B1, 0xFB5B, 0x72B2, 0xE0BA, 0x72B6, 0x8FF3, 0x72B9, 0xE0B9, 0x72BE, 0xFB5C, + 0x72C2, 0x8BB6, 0x72C3, 0xE0BB, 0x72C4, 0xE0BD, 0x72C6, 0xE0BC, 0x72CE, 0xE0BE, 0x72D0, 0x8CCF, 0x72D2, 0xE0BF, 0x72D7, 0x8BE7, + 0x72D9, 0x915F, 0x72DB, 0x8D9D, 0x72E0, 0xE0C1, 0x72E1, 0xE0C2, 0x72E2, 0xE0C0, 0x72E9, 0x8EEB, 0x72EC, 0x93C6, 0x72ED, 0x8BB7, + 0x72F7, 0xE0C4, 0x72F8, 0x924B, 0x72F9, 0xE0C3, 0x72FC, 0x9854, 0x72FD, 0x9482, 0x730A, 0xE0C7, 0x7316, 0xE0C9, 0x7317, 0xE0C6, + 0x731B, 0x96D2, 0x731C, 0xE0C8, 0x731D, 0xE0CA, 0x731F, 0x97C2, 0x7324, 0xFB5D, 0x7325, 0xE0CE, 0x7329, 0xE0CD, 0x732A, 0x9296, + 0x732B, 0x944C, 0x732E, 0x8CA3, 0x732F, 0xE0CC, 0x7334, 0xE0CB, 0x7336, 0x9750, 0x7337, 0x9751, 0x733E, 0xE0CF, 0x733F, 0x898E, + 0x7344, 0x8D96, 0x7345, 0x8E82, 0x734E, 0xE0D0, 0x734F, 0xE0D1, 0x7357, 0xE0D3, 0x7363, 0x8F62, 0x7368, 0xE0D5, 0x736A, 0xE0D4, + 0x7370, 0xE0D6, 0x7372, 0x8A6C, 0x7375, 0xE0D8, 0x7377, 0xFB5F, 0x7378, 0xE0D7, 0x737A, 0xE0DA, 0x737B, 0xE0D9, 0x7384, 0x8CBA, + 0x7387, 0x97A6, 0x7389, 0x8BCA, 0x738B, 0x89A4, 0x7396, 0x8BE8, 0x73A9, 0x8ADF, 0x73B2, 0x97E6, 0x73B3, 0xE0DC, 0x73BB, 0xE0DE, + 0x73BD, 0xFB60, 0x73C0, 0xE0DF, 0x73C2, 0x89CF, 0x73C8, 0xE0DB, 0x73C9, 0xFB61, 0x73CA, 0x8E58, 0x73CD, 0x92BF, 0x73CE, 0xE0DD, + 0x73D2, 0xFB64, 0x73D6, 0xFB62, 0x73DE, 0xE0E2, 0x73E0, 0x8EEC, 0x73E3, 0xFB63, 0x73E5, 0xE0E0, 0x73EA, 0x8C5D, 0x73ED, 0x94C7, + 0x73EE, 0xE0E1, 0x73F1, 0xE0FC, 0x73F5, 0xFB66, 0x73F8, 0xE0E7, 0x73FE, 0x8CBB, 0x7403, 0x8B85, 0x7405, 0xE0E4, 0x7406, 0x979D, + 0x7407, 0xFB65, 0x7409, 0x97AE, 0x7422, 0x91F4, 0x7425, 0xE0E6, 0x7426, 0xFB67, 0x7429, 0xFB69, 0x742A, 0xFB68, 0x742E, 0xFB6A, + 0x7432, 0xE0E8, 0x7433, 0x97D4, 0x7434, 0x8BD5, 0x7435, 0x94FA, 0x7436, 0x9469, 0x743A, 0xE0E9, 0x743F, 0xE0EB, 0x7441, 0xE0EE, + 0x7455, 0xE0EA, 0x7459, 0xE0ED, 0x745A, 0x8CE8, 0x745B, 0x896C, 0x745C, 0xE0EF, 0x745E, 0x9090, 0x745F, 0xE0EC, 0x7460, 0x97DA, + 0x7462, 0xFB6B, 0x7463, 0xE0F2, 0x7464, 0xEAA2, 0x7469, 0xE0F0, 0x746A, 0xE0F3, 0x746F, 0xE0E5, 0x7470, 0xE0F1, 0x7473, 0x8DBA, + 0x7476, 0xE0F4, 0x747E, 0xE0F5, 0x7483, 0x979E, 0x7489, 0xFB6C, 0x748B, 0xE0F6, 0x749E, 0xE0F7, 0x749F, 0xFB6D, 0x74A2, 0xE0E3, + 0x74A7, 0xE0F8, 0x74B0, 0x8AC2, 0x74BD, 0x8EA3, 0x74CA, 0xE0F9, 0x74CF, 0xE0FA, 0x74D4, 0xE0FB, 0x74DC, 0x895A, 0x74E0, 0xE140, + 0x74E2, 0x955A, 0x74E3, 0xE141, 0x74E6, 0x8AA2, 0x74E7, 0xE142, 0x74E9, 0xE143, 0x74EE, 0xE144, 0x74F0, 0xE146, 0x74F1, 0xE147, + 0x74F2, 0xE145, 0x74F6, 0x9572, 0x74F7, 0xE149, 0x74F8, 0xE148, 0x7501, 0xFB6E, 0x7503, 0xE14B, 0x7504, 0xE14A, 0x7505, 0xE14C, + 0x750C, 0xE14D, 0x750D, 0xE14F, 0x750E, 0xE14E, 0x7511, 0x8D99, 0x7513, 0xE151, 0x7515, 0xE150, 0x7518, 0x8AC3, 0x751A, 0x9072, + 0x751C, 0x935B, 0x751E, 0xE152, 0x751F, 0x90B6, 0x7523, 0x8E59, 0x7525, 0x8999, 0x7526, 0xE153, 0x7528, 0x9770, 0x752B, 0x95E1, + 0x752C, 0xE154, 0x752F, 0xFAA8, 0x7530, 0x9363, 0x7531, 0x9752, 0x7532, 0x8D62, 0x7533, 0x905C, 0x7537, 0x926A, 0x7538, 0x99B2, + 0x753A, 0x92AC, 0x753B, 0x89E6, 0x753C, 0xE155, 0x7544, 0xE156, 0x7546, 0xE15B, 0x7549, 0xE159, 0x754A, 0xE158, 0x754B, 0x9DC0, + 0x754C, 0x8A45, 0x754D, 0xE157, 0x754F, 0x88D8, 0x7551, 0x94A8, 0x7554, 0x94C8, 0x7559, 0x97AF, 0x755A, 0xE15C, 0x755B, 0xE15A, + 0x755C, 0x927B, 0x755D, 0x90A4, 0x7560, 0x94A9, 0x7562, 0x954C, 0x7564, 0xE15E, 0x7565, 0x97AA, 0x7566, 0x8C6C, 0x7567, 0xE15F, + 0x7569, 0xE15D, 0x756A, 0x94D4, 0x756B, 0xE160, 0x756D, 0xE161, 0x756F, 0xFB6F, 0x7570, 0x88D9, 0x7573, 0x8FF4, 0x7574, 0xE166, + 0x7576, 0xE163, 0x7577, 0x93EB, 0x7578, 0xE162, 0x757F, 0x8B45, 0x7582, 0xE169, 0x7586, 0xE164, 0x7587, 0xE165, 0x7589, 0xE168, + 0x758A, 0xE167, 0x758B, 0x9544, 0x758E, 0x9161, 0x758F, 0x9160, 0x7591, 0x8B5E, 0x7594, 0xE16A, 0x759A, 0xE16B, 0x759D, 0xE16C, + 0x75A3, 0xE16E, 0x75A5, 0xE16D, 0x75AB, 0x8975, 0x75B1, 0xE176, 0x75B2, 0x94E6, 0x75B3, 0xE170, 0x75B5, 0xE172, 0x75B8, 0xE174, + 0x75B9, 0x905D, 0x75BC, 0xE175, 0x75BD, 0xE173, 0x75BE, 0x8EBE, 0x75C2, 0xE16F, 0x75C3, 0xE171, 0x75C5, 0x9561, 0x75C7, 0x8FC7, + 0x75CA, 0xE178, 0x75CD, 0xE177, 0x75D2, 0xE179, 0x75D4, 0x8EA4, 0x75D5, 0x8DAD, 0x75D8, 0x9397, 0x75D9, 0xE17A, 0x75DB, 0x92C9, + 0x75DE, 0xE17C, 0x75E2, 0x979F, 0x75E3, 0xE17B, 0x75E9, 0x9189, 0x75F0, 0xE182, 0x75F2, 0xE184, 0x75F3, 0xE185, 0x75F4, 0x9273, + 0x75FA, 0xE183, 0x75FC, 0xE180, 0x75FE, 0xE17D, 0x75FF, 0xE17E, 0x7601, 0xE181, 0x7609, 0xE188, 0x760B, 0xE186, 0x760D, 0xE187, + 0x761F, 0xE189, 0x7620, 0xE18B, 0x7621, 0xE18C, 0x7622, 0xE18D, 0x7624, 0xE18E, 0x7627, 0xE18A, 0x7630, 0xE190, 0x7634, 0xE18F, + 0x763B, 0xE191, 0x7642, 0x97C3, 0x7646, 0xE194, 0x7647, 0xE192, 0x7648, 0xE193, 0x764C, 0x8AE0, 0x7652, 0x96FC, 0x7656, 0x95C8, + 0x7658, 0xE196, 0x765C, 0xE195, 0x7661, 0xE197, 0x7662, 0xE198, 0x7667, 0xE19C, 0x7668, 0xE199, 0x7669, 0xE19A, 0x766A, 0xE19B, + 0x766C, 0xE19D, 0x7670, 0xE19E, 0x7672, 0xE19F, 0x7676, 0xE1A0, 0x7678, 0xE1A1, 0x767A, 0x94AD, 0x767B, 0x936F, 0x767C, 0xE1A2, + 0x767D, 0x9492, 0x767E, 0x9553, 0x7680, 0xE1A3, 0x7682, 0xFB70, 0x7683, 0xE1A4, 0x7684, 0x9349, 0x7686, 0x8A46, 0x7687, 0x8D63, + 0x7688, 0xE1A5, 0x768B, 0xE1A6, 0x768E, 0xE1A7, 0x7690, 0x8E48, 0x7693, 0xE1A9, 0x7696, 0xE1A8, 0x7699, 0xE1AA, 0x769A, 0xE1AB, + 0x769B, 0xFB73, 0x769C, 0xFB71, 0x769E, 0xFB72, 0x76A6, 0xFB74, 0x76AE, 0x94E7, 0x76B0, 0xE1AC, 0x76B4, 0xE1AD, 0x76B7, 0xEA89, + 0x76B8, 0xE1AE, 0x76B9, 0xE1AF, 0x76BA, 0xE1B0, 0x76BF, 0x8E4D, 0x76C2, 0xE1B1, 0x76C3, 0x9475, 0x76C6, 0x967E, 0x76C8, 0x896D, + 0x76CA, 0x8976, 0x76CD, 0xE1B2, 0x76D2, 0xE1B4, 0x76D6, 0xE1B3, 0x76D7, 0x9390, 0x76DB, 0x90B7, 0x76DC, 0x9F58, 0x76DE, 0xE1B5, + 0x76DF, 0x96BF, 0x76E1, 0xE1B6, 0x76E3, 0x8AC4, 0x76E4, 0x94D5, 0x76E5, 0xE1B7, 0x76E7, 0xE1B8, 0x76EA, 0xE1B9, 0x76EE, 0x96DA, + 0x76F2, 0x96D3, 0x76F4, 0x92BC, 0x76F8, 0x918A, 0x76FB, 0xE1BB, 0x76FE, 0x8F82, 0x7701, 0x8FC8, 0x7704, 0xE1BE, 0x7707, 0xE1BD, + 0x7708, 0xE1BC, 0x7709, 0x94FB, 0x770B, 0x8AC5, 0x770C, 0x8CA7, 0x771B, 0xE1C4, 0x771E, 0xE1C1, 0x771F, 0x905E, 0x7720, 0x96B0, + 0x7724, 0xE1C0, 0x7725, 0xE1C2, 0x7726, 0xE1C3, 0x7729, 0xE1BF, 0x7737, 0xE1C5, 0x7738, 0xE1C6, 0x773A, 0x92AD, 0x773C, 0x8AE1, + 0x7740, 0x9285, 0x7746, 0xFB76, 0x7747, 0xE1C7, 0x775A, 0xE1C8, 0x775B, 0xE1CB, 0x7761, 0x9087, 0x7763, 0x93C2, 0x7765, 0xE1CC, + 0x7766, 0x9672, 0x7768, 0xE1C9, 0x776B, 0xE1CA, 0x7779, 0xE1CF, 0x777E, 0xE1CE, 0x777F, 0xE1CD, 0x778B, 0xE1D1, 0x778E, 0xE1D0, + 0x7791, 0xE1D2, 0x779E, 0xE1D4, 0x77A0, 0xE1D3, 0x77A5, 0x95CB, 0x77AC, 0x8F75, 0x77AD, 0x97C4, 0x77B0, 0xE1D5, 0x77B3, 0x93B5, + 0x77B6, 0xE1D6, 0x77B9, 0xE1D7, 0x77BB, 0xE1DB, 0x77BC, 0xE1D9, 0x77BD, 0xE1DA, 0x77BF, 0xE1D8, 0x77C7, 0xE1DC, 0x77CD, 0xE1DD, + 0x77D7, 0xE1DE, 0x77DA, 0xE1DF, 0x77DB, 0x96B5, 0x77DC, 0xE1E0, 0x77E2, 0x96EE, 0x77E3, 0xE1E1, 0x77E5, 0x926D, 0x77E7, 0x948A, + 0x77E9, 0x8BE9, 0x77ED, 0x925A, 0x77EE, 0xE1E2, 0x77EF, 0x8BB8, 0x77F3, 0x90CE, 0x77FC, 0xE1E3, 0x7802, 0x8DBB, 0x780C, 0xE1E4, + 0x7812, 0xE1E5, 0x7814, 0x8CA4, 0x7815, 0x8DD3, 0x7820, 0xE1E7, 0x7821, 0xFB78, 0x7825, 0x9375, 0x7826, 0x8DD4, 0x7827, 0x8B6D, + 0x7832, 0x9643, 0x7834, 0x946A, 0x783A, 0x9376, 0x783F, 0x8D7B, 0x7845, 0xE1E9, 0x784E, 0xFB79, 0x785D, 0x8FC9, 0x7864, 0xFB7A, + 0x786B, 0x97B0, 0x786C, 0x8D64, 0x786F, 0x8CA5, 0x7872, 0x94A1, 0x7874, 0xE1EB, 0x787A, 0xFB7B, 0x787C, 0xE1ED, 0x7881, 0x8CE9, + 0x7886, 0xE1EC, 0x7887, 0x92F4, 0x788C, 0xE1EF, 0x788D, 0x8A56, 0x788E, 0xE1EA, 0x7891, 0x94E8, 0x7893, 0x894F, 0x7895, 0x8DEA, + 0x7897, 0x9871, 0x789A, 0xE1EE, 0x78A3, 0xE1F0, 0x78A7, 0x95C9, 0x78A9, 0x90D7, 0x78AA, 0xE1F2, 0x78AF, 0xE1F3, 0x78B5, 0xE1F1, + 0x78BA, 0x8A6D, 0x78BC, 0xE1F9, 0x78BE, 0xE1F8, 0x78C1, 0x8EA5, 0x78C5, 0xE1FA, 0x78C6, 0xE1F5, 0x78CA, 0xE1FB, 0x78CB, 0xE1F6, + 0x78D0, 0x94D6, 0x78D1, 0xE1F4, 0x78D4, 0xE1F7, 0x78DA, 0xE241, 0x78E7, 0xE240, 0x78E8, 0x9681, 0x78EC, 0xE1FC, 0x78EF, 0x88E9, + 0x78F4, 0xE243, 0x78FD, 0xE242, 0x7901, 0x8FCA, 0x7907, 0xE244, 0x790E, 0x9162, 0x7911, 0xE246, 0x7912, 0xE245, 0x7919, 0xE247, + 0x7926, 0xE1E6, 0x792A, 0xE1E8, 0x792B, 0xE249, 0x792C, 0xE248, 0x7930, 0xFB7C, 0x793A, 0x8EA6, 0x793C, 0x97E7, 0x793E, 0x8ED0, + 0x7940, 0xE24A, 0x7941, 0x8C56, 0x7947, 0x8B5F, 0x7948, 0x8B46, 0x7949, 0x8E83, 0x7950, 0x9753, 0x7953, 0xE250, 0x7955, 0xE24F, + 0x7956, 0x9163, 0x7957, 0xE24C, 0x795A, 0xE24E, 0x795D, 0x8F6A, 0x795E, 0x905F, 0x795F, 0xE24D, 0x7960, 0xE24B, 0x7962, 0x9449, + 0x7965, 0x8FCB, 0x7968, 0x955B, 0x796D, 0x8DD5, 0x7977, 0x9398, 0x797A, 0xE251, 0x797F, 0xE252, 0x7980, 0xE268, 0x7981, 0x8BD6, + 0x7984, 0x985C, 0x7985, 0x9154, 0x798A, 0xE253, 0x798D, 0x89D0, 0x798E, 0x92F5, 0x798F, 0x959F, 0x7994, 0xFB81, 0x799B, 0xFB83, + 0x799D, 0xE254, 0x79A6, 0x8B9A, 0x79A7, 0xE255, 0x79AA, 0xE257, 0x79AE, 0xE258, 0x79B0, 0x9448, 0x79B3, 0xE259, 0x79B9, 0xE25A, + 0x79BA, 0xE25B, 0x79BD, 0x8BD7, 0x79BE, 0x89D1, 0x79BF, 0x93C3, 0x79C0, 0x8F47, 0x79C1, 0x8E84, 0x79C9, 0xE25C, 0x79CB, 0x8F48, + 0x79D1, 0x89C8, 0x79D2, 0x9562, 0x79D5, 0xE25D, 0x79D8, 0x94E9, 0x79DF, 0x9164, 0x79E1, 0xE260, 0x79E3, 0xE261, 0x79E4, 0x9489, + 0x79E6, 0x9060, 0x79E7, 0xE25E, 0x79E9, 0x9281, 0x79EC, 0xE25F, 0x79F0, 0x8FCC, 0x79FB, 0x88DA, 0x7A00, 0x8B48, 0x7A08, 0xE262, + 0x7A0B, 0x92F6, 0x7A0D, 0xE263, 0x7A0E, 0x90C5, 0x7A14, 0x96AB, 0x7A17, 0x9542, 0x7A18, 0xE264, 0x7A19, 0xE265, 0x7A1A, 0x9274, + 0x7A1C, 0x97C5, 0x7A1F, 0xE267, 0x7A20, 0xE266, 0x7A2E, 0x8EED, 0x7A31, 0xE269, 0x7A32, 0x88EE, 0x7A37, 0xE26C, 0x7A3B, 0xE26A, + 0x7A3C, 0x89D2, 0x7A3D, 0x8C6D, 0x7A3E, 0xE26B, 0x7A3F, 0x8D65, 0x7A40, 0x8D92, 0x7A42, 0x95E4, 0x7A43, 0xE26D, 0x7A46, 0x9673, + 0x7A49, 0xE26F, 0x7A4D, 0x90CF, 0x7A4E, 0x896E, 0x7A4F, 0x89B8, 0x7A50, 0x88AA, 0x7A57, 0xE26E, 0x7A61, 0xE270, 0x7A62, 0xE271, + 0x7A63, 0x8FF5, 0x7A69, 0xE272, 0x7A6B, 0x8A6E, 0x7A70, 0xE274, 0x7A74, 0x8C8A, 0x7A76, 0x8B86, 0x7A79, 0xE275, 0x7A7A, 0x8BF3, + 0x7A7D, 0xE276, 0x7A7F, 0x90FA, 0x7A81, 0x93CB, 0x7A83, 0x90DE, 0x7A84, 0x8DF3, 0x7A88, 0xE277, 0x7A92, 0x9282, 0x7A93, 0x918B, + 0x7A95, 0xE279, 0x7A96, 0xE27B, 0x7A97, 0xE278, 0x7A98, 0xE27A, 0x7A9F, 0x8C41, 0x7AA9, 0xE27C, 0x7AAA, 0x8C45, 0x7AAE, 0x8B87, + 0x7AAF, 0x9771, 0x7AB0, 0xE27E, 0x7AB6, 0xE280, 0x7ABA, 0x894D, 0x7ABF, 0xE283, 0x7AC3, 0x8A96, 0x7AC4, 0xE282, 0x7AC5, 0xE281, + 0x7AC7, 0xE285, 0x7AC8, 0xE27D, 0x7ACA, 0xE286, 0x7ACB, 0x97A7, 0x7ACD, 0xE287, 0x7ACF, 0xE288, 0x7AD1, 0xFB84, 0x7AD2, 0x9AF2, + 0x7AD3, 0xE28A, 0x7AD5, 0xE289, 0x7AD9, 0xE28B, 0x7ADA, 0xE28C, 0x7ADC, 0x97B3, 0x7ADD, 0xE28D, 0x7ADF, 0xE8ED, 0x7AE0, 0x8FCD, + 0x7AE1, 0xE28E, 0x7AE2, 0xE28F, 0x7AE3, 0x8F76, 0x7AE5, 0x93B6, 0x7AE6, 0xE290, 0x7AE7, 0xFB85, 0x7AEA, 0x9247, 0x7AEB, 0xFB87, + 0x7AED, 0xE291, 0x7AEF, 0x925B, 0x7AF0, 0xE292, 0x7AF6, 0x8BA3, 0x7AF8, 0x995E, 0x7AF9, 0x927C, 0x7AFA, 0x8EB1, 0x7AFF, 0x8AC6, + 0x7B02, 0xE293, 0x7B04, 0xE2A0, 0x7B06, 0xE296, 0x7B08, 0x8B88, 0x7B0A, 0xE295, 0x7B0B, 0xE2A2, 0x7B0F, 0xE294, 0x7B11, 0x8FCE, + 0x7B18, 0xE298, 0x7B19, 0xE299, 0x7B1B, 0x934A, 0x7B1E, 0xE29A, 0x7B20, 0x8A7D, 0x7B25, 0x9079, 0x7B26, 0x9584, 0x7B28, 0xE29C, + 0x7B2C, 0x91E6, 0x7B33, 0xE297, 0x7B35, 0xE29B, 0x7B36, 0xE29D, 0x7B39, 0x8DF9, 0x7B45, 0xE2A4, 0x7B46, 0x954D, 0x7B48, 0x94A4, + 0x7B49, 0x9399, 0x7B4B, 0x8BD8, 0x7B4C, 0xE2A3, 0x7B4D, 0xE2A1, 0x7B4F, 0x94B3, 0x7B50, 0xE29E, 0x7B51, 0x927D, 0x7B52, 0x939B, + 0x7B54, 0x939A, 0x7B56, 0x8DF4, 0x7B5D, 0xE2B6, 0x7B65, 0xE2A6, 0x7B67, 0xE2A8, 0x7B6C, 0xE2AB, 0x7B6E, 0xE2AC, 0x7B70, 0xE2A9, + 0x7B71, 0xE2AA, 0x7B74, 0xE2A7, 0x7B75, 0xE2A5, 0x7B7A, 0xE29F, 0x7B86, 0x95CD, 0x7B87, 0x89D3, 0x7B8B, 0xE2B3, 0x7B8D, 0xE2B0, + 0x7B8F, 0xE2B5, 0x7B92, 0xE2B4, 0x7B94, 0x9493, 0x7B95, 0x96A5, 0x7B97, 0x8E5A, 0x7B98, 0xE2AE, 0x7B99, 0xE2B7, 0x7B9A, 0xE2B2, + 0x7B9C, 0xE2B1, 0x7B9D, 0xE2AD, 0x7B9E, 0xFB88, 0x7B9F, 0xE2AF, 0x7BA1, 0x8AC7, 0x7BAA, 0x925C, 0x7BAD, 0x90FB, 0x7BB1, 0x94A0, + 0x7BB4, 0xE2BC, 0x7BB8, 0x94A2, 0x7BC0, 0x90DF, 0x7BC1, 0xE2B9, 0x7BC4, 0x94CD, 0x7BC6, 0xE2BD, 0x7BC7, 0x95D1, 0x7BC9, 0x927A, + 0x7BCB, 0xE2B8, 0x7BCC, 0xE2BA, 0x7BCF, 0xE2BB, 0x7BDD, 0xE2BE, 0x7BE0, 0x8EC2, 0x7BE4, 0x93C4, 0x7BE5, 0xE2C3, 0x7BE6, 0xE2C2, + 0x7BE9, 0xE2BF, 0x7BED, 0x9855, 0x7BF3, 0xE2C8, 0x7BF6, 0xE2CC, 0x7BF7, 0xE2C9, 0x7C00, 0xE2C5, 0x7C07, 0xE2C6, 0x7C0D, 0xE2CB, + 0x7C11, 0xE2C0, 0x7C12, 0x99D3, 0x7C13, 0xE2C7, 0x7C14, 0xE2C1, 0x7C17, 0xE2CA, 0x7C1F, 0xE2D0, 0x7C21, 0x8AC8, 0x7C23, 0xE2CD, + 0x7C27, 0xE2CE, 0x7C2A, 0xE2CF, 0x7C2B, 0xE2D2, 0x7C37, 0xE2D1, 0x7C38, 0x94F4, 0x7C3D, 0xE2D3, 0x7C3E, 0x97FA, 0x7C3F, 0x95EB, + 0x7C40, 0xE2D8, 0x7C43, 0xE2D5, 0x7C4C, 0xE2D4, 0x7C4D, 0x90D0, 0x7C4F, 0xE2D7, 0x7C50, 0xE2D9, 0x7C54, 0xE2D6, 0x7C56, 0xE2DD, + 0x7C58, 0xE2DA, 0x7C5F, 0xE2DB, 0x7C60, 0xE2C4, 0x7C64, 0xE2DC, 0x7C65, 0xE2DE, 0x7C6C, 0xE2DF, 0x7C73, 0x95C4, 0x7C75, 0xE2E0, + 0x7C7E, 0x96E0, 0x7C81, 0x8BCC, 0x7C82, 0x8C48, 0x7C83, 0xE2E1, 0x7C89, 0x95B2, 0x7C8B, 0x9088, 0x7C8D, 0x96AE, 0x7C90, 0xE2E2, + 0x7C92, 0x97B1, 0x7C95, 0x9494, 0x7C97, 0x9165, 0x7C98, 0x9453, 0x7C9B, 0x8F6C, 0x7C9F, 0x88BE, 0x7CA1, 0xE2E7, 0x7CA2, 0xE2E5, + 0x7CA4, 0xE2E3, 0x7CA5, 0x8A9F, 0x7CA7, 0x8FCF, 0x7CA8, 0xE2E8, 0x7CAB, 0xE2E6, 0x7CAD, 0xE2E4, 0x7CAE, 0xE2EC, 0x7CB1, 0xE2EB, + 0x7CB2, 0xE2EA, 0x7CB3, 0xE2E9, 0x7CB9, 0xE2ED, 0x7CBD, 0xE2EE, 0x7CBE, 0x90B8, 0x7CC0, 0xE2EF, 0x7CC2, 0xE2F1, 0x7CC5, 0xE2F0, + 0x7CCA, 0x8CD0, 0x7CCE, 0x9157, 0x7CD2, 0xE2F3, 0x7CD6, 0x939C, 0x7CD8, 0xE2F2, 0x7CDC, 0xE2F4, 0x7CDE, 0x95B3, 0x7CDF, 0x918C, + 0x7CE0, 0x8D66, 0x7CE2, 0xE2F5, 0x7CE7, 0x97C6, 0x7CEF, 0xE2F7, 0x7CF2, 0xE2F8, 0x7CF4, 0xE2F9, 0x7CF6, 0xE2FA, 0x7CF8, 0x8E85, + 0x7CFA, 0xE2FB, 0x7CFB, 0x8C6E, 0x7CFE, 0x8B8A, 0x7D00, 0x8B49, 0x7D02, 0xE340, 0x7D04, 0x96F1, 0x7D05, 0x8D67, 0x7D06, 0xE2FC, + 0x7D0A, 0xE343, 0x7D0B, 0x96E4, 0x7D0D, 0x945B, 0x7D10, 0x9552, 0x7D14, 0x8F83, 0x7D15, 0xE342, 0x7D17, 0x8ED1, 0x7D18, 0x8D68, + 0x7D19, 0x8E86, 0x7D1A, 0x8B89, 0x7D1B, 0x95B4, 0x7D1C, 0xE341, 0x7D20, 0x9166, 0x7D21, 0x9661, 0x7D22, 0x8DF5, 0x7D2B, 0x8E87, + 0x7D2C, 0x92DB, 0x7D2E, 0xE346, 0x7D2F, 0x97DD, 0x7D30, 0x8DD7, 0x7D32, 0xE347, 0x7D33, 0x9061, 0x7D35, 0xE349, 0x7D39, 0x8FD0, + 0x7D3A, 0x8DAE, 0x7D3F, 0xE348, 0x7D42, 0x8F49, 0x7D43, 0x8CBC, 0x7D44, 0x9167, 0x7D45, 0xE344, 0x7D46, 0xE34A, 0x7D48, 0xFB8A, + 0x7D4B, 0xE345, 0x7D4C, 0x8C6F, 0x7D4E, 0xE34D, 0x7D4F, 0xE351, 0x7D50, 0x8C8B, 0x7D56, 0xE34C, 0x7D5B, 0xE355, 0x7D5C, 0xFB8B, + 0x7D5E, 0x8D69, 0x7D61, 0x978D, 0x7D62, 0x88BA, 0x7D63, 0xE352, 0x7D66, 0x8B8B, 0x7D68, 0xE34F, 0x7D6E, 0xE350, 0x7D71, 0x939D, + 0x7D72, 0xE34E, 0x7D73, 0xE34B, 0x7D75, 0x8A47, 0x7D76, 0x90E2, 0x7D79, 0x8CA6, 0x7D7D, 0xE357, 0x7D89, 0xE354, 0x7D8F, 0xE356, + 0x7D93, 0xE353, 0x7D99, 0x8C70, 0x7D9A, 0x91B1, 0x7D9B, 0xE358, 0x7D9C, 0x918E, 0x7D9F, 0xE365, 0x7DA0, 0xFB8D, 0x7DA2, 0xE361, + 0x7DA3, 0xE35B, 0x7DAB, 0xE35F, 0x7DAC, 0x8EF8, 0x7DAD, 0x88DB, 0x7DAE, 0xE35A, 0x7DAF, 0xE362, 0x7DB0, 0xE366, 0x7DB1, 0x8D6A, + 0x7DB2, 0x96D4, 0x7DB4, 0x92D4, 0x7DB5, 0xE35C, 0x7DB7, 0xFB8C, 0x7DB8, 0xE364, 0x7DBA, 0xE359, 0x7DBB, 0x925D, 0x7DBD, 0xE35E, + 0x7DBE, 0x88BB, 0x7DBF, 0x96C8, 0x7DC7, 0xE35D, 0x7DCA, 0x8BD9, 0x7DCB, 0x94EA, 0x7DCF, 0x918D, 0x7DD1, 0x97CE, 0x7DD2, 0x8F8F, + 0x7DD5, 0xE38E, 0x7DD6, 0xFB8E, 0x7DD8, 0xE367, 0x7DDA, 0x90FC, 0x7DDC, 0xE363, 0x7DDD, 0xE368, 0x7DDE, 0xE36A, 0x7DE0, 0x92F7, + 0x7DE1, 0xE36D, 0x7DE4, 0xE369, 0x7DE8, 0x95D2, 0x7DE9, 0x8AC9, 0x7DEC, 0x96C9, 0x7DEF, 0x88DC, 0x7DF2, 0xE36C, 0x7DF4, 0x97FB, + 0x7DFB, 0xE36B, 0x7E01, 0x898F, 0x7E04, 0x93EA, 0x7E05, 0xE36E, 0x7E09, 0xE375, 0x7E0A, 0xE36F, 0x7E0B, 0xE376, 0x7E12, 0xE372, + 0x7E1B, 0x949B, 0x7E1E, 0x8EC8, 0x7E1F, 0xE374, 0x7E21, 0xE371, 0x7E22, 0xE377, 0x7E23, 0xE370, 0x7E26, 0x8F63, 0x7E2B, 0x9644, + 0x7E2E, 0x8F6B, 0x7E31, 0xE373, 0x7E32, 0xE380, 0x7E35, 0xE37B, 0x7E37, 0xE37E, 0x7E39, 0xE37C, 0x7E3A, 0xE381, 0x7E3B, 0xE37A, + 0x7E3D, 0xE360, 0x7E3E, 0x90D1, 0x7E41, 0x94C9, 0x7E43, 0xE37D, 0x7E46, 0xE378, 0x7E4A, 0x9140, 0x7E4B, 0x8C71, 0x7E4D, 0x8F4A, + 0x7E52, 0xFB8F, 0x7E54, 0x9044, 0x7E55, 0x9155, 0x7E56, 0xE384, 0x7E59, 0xE386, 0x7E5A, 0xE387, 0x7E5D, 0xE383, 0x7E5E, 0xE385, + 0x7E66, 0xE379, 0x7E67, 0xE382, 0x7E69, 0xE38A, 0x7E6A, 0xE389, 0x7E6D, 0x969A, 0x7E70, 0x8C4A, 0x7E79, 0xE388, 0x7E7B, 0xE38C, + 0x7E7C, 0xE38B, 0x7E7D, 0xE38F, 0x7E7F, 0xE391, 0x7E82, 0x8E5B, 0x7E83, 0xE38D, 0x7E88, 0xE392, 0x7E89, 0xE393, 0x7E8A, 0xFA5C, + 0x7E8C, 0xE394, 0x7E8E, 0xE39A, 0x7E8F, 0x935A, 0x7E90, 0xE396, 0x7E92, 0xE395, 0x7E93, 0xE397, 0x7E94, 0xE398, 0x7E96, 0xE399, + 0x7E9B, 0xE39B, 0x7E9C, 0xE39C, 0x7F36, 0x8ACA, 0x7F38, 0xE39D, 0x7F3A, 0xE39E, 0x7F45, 0xE39F, 0x7F47, 0xFB90, 0x7F4C, 0xE3A0, + 0x7F4D, 0xE3A1, 0x7F4E, 0xE3A2, 0x7F50, 0xE3A3, 0x7F51, 0xE3A4, 0x7F54, 0xE3A6, 0x7F55, 0xE3A5, 0x7F58, 0xE3A7, 0x7F5F, 0xE3A8, + 0x7F60, 0xE3A9, 0x7F67, 0xE3AC, 0x7F68, 0xE3AA, 0x7F69, 0xE3AB, 0x7F6A, 0x8DDF, 0x7F6B, 0x8C72, 0x7F6E, 0x9275, 0x7F70, 0x94B1, + 0x7F72, 0x8F90, 0x7F75, 0x946C, 0x7F77, 0x94EB, 0x7F78, 0xE3AD, 0x7F79, 0x9CEB, 0x7F82, 0xE3AE, 0x7F83, 0xE3B0, 0x7F85, 0x9785, + 0x7F86, 0xE3AF, 0x7F87, 0xE3B2, 0x7F88, 0xE3B1, 0x7F8A, 0x9772, 0x7F8C, 0xE3B3, 0x7F8E, 0x94FC, 0x7F94, 0xE3B4, 0x7F9A, 0xE3B7, + 0x7F9D, 0xE3B6, 0x7F9E, 0xE3B5, 0x7FA1, 0xFB91, 0x7FA3, 0xE3B8, 0x7FA4, 0x8C51, 0x7FA8, 0x9141, 0x7FA9, 0x8B60, 0x7FAE, 0xE3BC, + 0x7FAF, 0xE3B9, 0x7FB2, 0xE3BA, 0x7FB6, 0xE3BD, 0x7FB8, 0xE3BE, 0x7FB9, 0xE3BB, 0x7FBD, 0x8948, 0x7FC1, 0x89A5, 0x7FC5, 0xE3C0, + 0x7FC6, 0xE3C1, 0x7FCA, 0xE3C2, 0x7FCC, 0x9782, 0x7FD2, 0x8F4B, 0x7FD4, 0xE3C4, 0x7FD5, 0xE3C3, 0x7FE0, 0x9089, 0x7FE1, 0xE3C5, + 0x7FE6, 0xE3C6, 0x7FE9, 0xE3C7, 0x7FEB, 0x8AE3, 0x7FF0, 0x8ACB, 0x7FF3, 0xE3C8, 0x7FF9, 0xE3C9, 0x7FFB, 0x967C, 0x7FFC, 0x9783, + 0x8000, 0x9773, 0x8001, 0x9856, 0x8003, 0x8D6C, 0x8004, 0xE3CC, 0x8005, 0x8ED2, 0x8006, 0xE3CB, 0x800B, 0xE3CD, 0x800C, 0x8EA7, + 0x8010, 0x91CF, 0x8012, 0xE3CE, 0x8015, 0x8D6B, 0x8017, 0x96D5, 0x8018, 0xE3CF, 0x8019, 0xE3D0, 0x801C, 0xE3D1, 0x8021, 0xE3D2, + 0x8028, 0xE3D3, 0x8033, 0x8EA8, 0x8036, 0x96EB, 0x803B, 0xE3D5, 0x803D, 0x925E, 0x803F, 0xE3D4, 0x8046, 0xE3D7, 0x804A, 0xE3D6, + 0x8052, 0xE3D8, 0x8056, 0x90B9, 0x8058, 0xE3D9, 0x805A, 0xE3DA, 0x805E, 0x95B7, 0x805F, 0xE3DB, 0x8061, 0x918F, 0x8062, 0xE3DC, + 0x8068, 0xE3DD, 0x806F, 0x97FC, 0x8070, 0xE3E0, 0x8072, 0xE3DF, 0x8073, 0xE3DE, 0x8074, 0x92AE, 0x8076, 0xE3E1, 0x8077, 0x9045, + 0x8079, 0xE3E2, 0x807D, 0xE3E3, 0x807E, 0x9857, 0x807F, 0xE3E4, 0x8084, 0xE3E5, 0x8085, 0xE3E7, 0x8086, 0xE3E6, 0x8087, 0x94A3, + 0x8089, 0x93F7, 0x808B, 0x985D, 0x808C, 0x94A7, 0x8093, 0xE3E9, 0x8096, 0x8FD1, 0x8098, 0x9549, 0x809A, 0xE3EA, 0x809B, 0xE3E8, + 0x809D, 0x8ACC, 0x80A1, 0x8CD2, 0x80A2, 0x8E88, 0x80A5, 0x94EC, 0x80A9, 0x8CA8, 0x80AA, 0x9662, 0x80AC, 0xE3ED, 0x80AD, 0xE3EB, + 0x80AF, 0x8D6D, 0x80B1, 0x8D6E, 0x80B2, 0x88E7, 0x80B4, 0x8DE6, 0x80BA, 0x9478, 0x80C3, 0x88DD, 0x80C4, 0xE3F2, 0x80C6, 0x925F, + 0x80CC, 0x9477, 0x80CE, 0x91D9, 0x80D6, 0xE3F4, 0x80D9, 0xE3F0, 0x80DA, 0xE3F3, 0x80DB, 0xE3EE, 0x80DD, 0xE3F1, 0x80DE, 0x9645, + 0x80E1, 0x8CD3, 0x80E4, 0x88FB, 0x80E5, 0xE3EF, 0x80EF, 0xE3F6, 0x80F1, 0xE3F7, 0x80F4, 0x93B7, 0x80F8, 0x8BB9, 0x80FC, 0xE445, + 0x80FD, 0x945C, 0x8102, 0x8E89, 0x8105, 0x8BBA, 0x8106, 0x90C6, 0x8107, 0x9865, 0x8108, 0x96AC, 0x8109, 0xE3F5, 0x810A, 0x90D2, + 0x811A, 0x8B72, 0x811B, 0xE3F8, 0x8123, 0xE3FA, 0x8129, 0xE3F9, 0x812F, 0xE3FB, 0x8131, 0x9245, 0x8133, 0x945D, 0x8139, 0x92AF, + 0x813E, 0xE442, 0x8146, 0xE441, 0x814B, 0xE3FC, 0x814E, 0x9074, 0x8150, 0x9585, 0x8151, 0xE444, 0x8153, 0xE443, 0x8154, 0x8D6F, + 0x8155, 0x9872, 0x815F, 0xE454, 0x8165, 0xE448, 0x8166, 0xE449, 0x816B, 0x8EEE, 0x816E, 0xE447, 0x8170, 0x8D98, 0x8171, 0xE446, + 0x8174, 0xE44A, 0x8178, 0x92B0, 0x8179, 0x95A0, 0x817A, 0x9142, 0x817F, 0x91DA, 0x8180, 0xE44E, 0x8182, 0xE44F, 0x8183, 0xE44B, + 0x8188, 0xE44C, 0x818A, 0xE44D, 0x818F, 0x8D70, 0x8193, 0xE455, 0x8195, 0xE451, 0x819A, 0x9586, 0x819C, 0x968C, 0x819D, 0x9547, + 0x81A0, 0xE450, 0x81A3, 0xE453, 0x81A4, 0xE452, 0x81A8, 0x9663, 0x81A9, 0xE456, 0x81B0, 0xE457, 0x81B3, 0x9156, 0x81B5, 0xE458, + 0x81B8, 0xE45A, 0x81BA, 0xE45E, 0x81BD, 0xE45B, 0x81BE, 0xE459, 0x81BF, 0x945E, 0x81C0, 0xE45C, 0x81C2, 0xE45D, 0x81C6, 0x89B0, + 0x81C8, 0xE464, 0x81C9, 0xE45F, 0x81CD, 0xE460, 0x81D1, 0xE461, 0x81D3, 0x919F, 0x81D8, 0xE463, 0x81D9, 0xE462, 0x81DA, 0xE465, + 0x81DF, 0xE466, 0x81E0, 0xE467, 0x81E3, 0x9062, 0x81E5, 0x89E7, 0x81E7, 0xE468, 0x81E8, 0x97D5, 0x81EA, 0x8EA9, 0x81ED, 0x8F4C, + 0x81F3, 0x8E8A, 0x81F4, 0x9276, 0x81FA, 0xE469, 0x81FB, 0xE46A, 0x81FC, 0x8950, 0x81FE, 0xE46B, 0x8201, 0xE46C, 0x8202, 0xE46D, + 0x8205, 0xE46E, 0x8207, 0xE46F, 0x8208, 0x8BBB, 0x8209, 0x9DA8, 0x820A, 0xE470, 0x820C, 0x90E3, 0x820D, 0xE471, 0x820E, 0x8EC9, + 0x8210, 0xE472, 0x8212, 0x98AE, 0x8216, 0xE473, 0x8217, 0x95DC, 0x8218, 0x8ADA, 0x821B, 0x9143, 0x821C, 0x8F77, 0x821E, 0x9591, + 0x821F, 0x8F4D, 0x8229, 0xE474, 0x822A, 0x8D71, 0x822B, 0xE475, 0x822C, 0x94CA, 0x822E, 0xE484, 0x8233, 0xE477, 0x8235, 0x91C7, + 0x8236, 0x9495, 0x8237, 0x8CBD, 0x8238, 0xE476, 0x8239, 0x9144, 0x8240, 0xE478, 0x8247, 0x92F8, 0x8258, 0xE47A, 0x8259, 0xE479, + 0x825A, 0xE47C, 0x825D, 0xE47B, 0x825F, 0xE47D, 0x8262, 0xE480, 0x8264, 0xE47E, 0x8266, 0x8ACD, 0x8268, 0xE481, 0x826A, 0xE482, + 0x826B, 0xE483, 0x826E, 0x8DAF, 0x826F, 0x97C7, 0x8271, 0xE485, 0x8272, 0x9046, 0x8276, 0x8990, 0x8277, 0xE486, 0x8278, 0xE487, + 0x827E, 0xE488, 0x828B, 0x88F0, 0x828D, 0xE489, 0x8292, 0xE48A, 0x8299, 0x9587, 0x829D, 0x8EC5, 0x829F, 0xE48C, 0x82A5, 0x8A48, + 0x82A6, 0x88B0, 0x82AB, 0xE48B, 0x82AC, 0xE48E, 0x82AD, 0x946D, 0x82AF, 0x9063, 0x82B1, 0x89D4, 0x82B3, 0x9646, 0x82B8, 0x8C7C, + 0x82B9, 0x8BDA, 0x82BB, 0xE48D, 0x82BD, 0x89E8, 0x82C5, 0x8AA1, 0x82D1, 0x8991, 0x82D2, 0xE492, 0x82D3, 0x97E8, 0x82D4, 0x91DB, + 0x82D7, 0x9563, 0x82D9, 0xE49E, 0x82DB, 0x89D5, 0x82DC, 0xE49C, 0x82DE, 0xE49A, 0x82DF, 0xE491, 0x82E1, 0xE48F, 0x82E3, 0xE490, + 0x82E5, 0x8EE1, 0x82E6, 0x8BEA, 0x82E7, 0x9297, 0x82EB, 0x93CF, 0x82F1, 0x8970, 0x82F3, 0xE494, 0x82F4, 0xE493, 0x82F9, 0xE499, + 0x82FA, 0xE495, 0x82FB, 0xE498, 0x8301, 0xFB93, 0x8302, 0x96CE, 0x8303, 0xE497, 0x8304, 0x89D6, 0x8305, 0x8A9D, 0x8306, 0xE49B, + 0x8309, 0xE49D, 0x830E, 0x8C73, 0x8316, 0xE4A1, 0x8317, 0xE4AA, 0x8318, 0xE4AB, 0x831C, 0x88A9, 0x8323, 0xE4B2, 0x8328, 0x88EF, + 0x832B, 0xE4A9, 0x832F, 0xE4A8, 0x8331, 0xE4A3, 0x8332, 0xE4A2, 0x8334, 0xE4A0, 0x8335, 0xE49F, 0x8336, 0x9283, 0x8338, 0x91F9, + 0x8339, 0xE4A5, 0x8340, 0xE4A4, 0x8345, 0xE4A7, 0x8349, 0x9190, 0x834A, 0x8C74, 0x834F, 0x8960, 0x8350, 0xE4A6, 0x8352, 0x8D72, + 0x8358, 0x9191, 0x8362, 0xFB94, 0x8373, 0xE4B8, 0x8375, 0xE4B9, 0x8377, 0x89D7, 0x837B, 0x89AC, 0x837C, 0xE4B6, 0x837F, 0xFB95, + 0x8385, 0xE4AC, 0x8387, 0xE4B4, 0x8389, 0xE4BB, 0x838A, 0xE4B5, 0x838E, 0xE4B3, 0x8393, 0xE496, 0x8396, 0xE4B1, 0x839A, 0xE4AD, + 0x839E, 0x8ACE, 0x839F, 0xE4AF, 0x83A0, 0xE4BA, 0x83A2, 0xE4B0, 0x83A8, 0xE4BC, 0x83AA, 0xE4AE, 0x83AB, 0x949C, 0x83B1, 0x9789, + 0x83B5, 0xE4B7, 0x83BD, 0xE4CD, 0x83C1, 0xE4C5, 0x83C5, 0x909B, 0x83C7, 0xFB96, 0x83CA, 0x8B65, 0x83CC, 0x8BDB, 0x83CE, 0xE4C0, + 0x83D3, 0x89D9, 0x83D6, 0x8FD2, 0x83D8, 0xE4C3, 0x83DC, 0x8DD8, 0x83DF, 0x9370, 0x83E0, 0xE4C8, 0x83E9, 0x95EC, 0x83EB, 0xE4BF, + 0x83EF, 0x89D8, 0x83F0, 0x8CD4, 0x83F1, 0x9548, 0x83F2, 0xE4C9, 0x83F4, 0xE4BD, 0x83F6, 0xFB97, 0x83F7, 0xE4C6, 0x83FB, 0xE4D0, + 0x83FD, 0xE4C1, 0x8403, 0xE4C2, 0x8404, 0x93B8, 0x8407, 0xE4C7, 0x840B, 0xE4C4, 0x840C, 0x9647, 0x840D, 0xE4CA, 0x840E, 0x88DE, + 0x8413, 0xE4BE, 0x8420, 0xE4CC, 0x8422, 0xE4CB, 0x8429, 0x948B, 0x842A, 0xE4D2, 0x842C, 0xE4DD, 0x8431, 0x8A9E, 0x8435, 0xE4E0, + 0x8438, 0xE4CE, 0x843C, 0xE4D3, 0x843D, 0x978E, 0x8446, 0xE4DC, 0x8448, 0xFB98, 0x8449, 0x9774, 0x844E, 0x97A8, 0x8457, 0x9298, + 0x845B, 0x8A8B, 0x8461, 0x9592, 0x8462, 0xE4E2, 0x8463, 0x939F, 0x8466, 0x88AF, 0x8469, 0xE4DB, 0x846B, 0xE4D7, 0x846C, 0x9192, + 0x846D, 0xE4D1, 0x846E, 0xE4D9, 0x846F, 0xE4DE, 0x8471, 0x944B, 0x8475, 0x88A8, 0x8477, 0xE4D6, 0x8479, 0xE4DF, 0x847A, 0x9598, + 0x8482, 0xE4DA, 0x8484, 0xE4D5, 0x848B, 0x8FD3, 0x8490, 0x8F4E, 0x8494, 0x8EAA, 0x8499, 0x96D6, 0x849C, 0x9566, 0x849F, 0xE4E5, + 0x84A1, 0xE4EE, 0x84AD, 0xE4D8, 0x84B2, 0x8A97, 0x84B4, 0xFB99, 0x84B8, 0x8FF6, 0x84B9, 0xE4E3, 0x84BB, 0xE4E8, 0x84BC, 0x9193, + 0x84BF, 0xE4E4, 0x84C1, 0xE4EB, 0x84C4, 0x927E, 0x84C6, 0xE4EC, 0x84C9, 0x9775, 0x84CA, 0xE4E1, 0x84CB, 0x8A57, 0x84CD, 0xE4E7, + 0x84D0, 0xE4EA, 0x84D1, 0x96AA, 0x84D6, 0xE4ED, 0x84D9, 0xE4E6, 0x84DA, 0xE4E9, 0x84DC, 0xFA60, 0x84EC, 0x9648, 0x84EE, 0x9840, + 0x84F4, 0xE4F1, 0x84FC, 0xE4F8, 0x84FF, 0xE4F0, 0x8500, 0x8EC1, 0x8506, 0xE4CF, 0x8511, 0x95CC, 0x8513, 0x96A0, 0x8514, 0xE4F7, + 0x8515, 0xE4F6, 0x8517, 0xE4F2, 0x8518, 0xE4F3, 0x851A, 0x8955, 0x851F, 0xE4F5, 0x8521, 0xE4EF, 0x8526, 0x92D3, 0x852C, 0xE4F4, + 0x852D, 0x88FC, 0x8535, 0x91A0, 0x853D, 0x95C1, 0x8540, 0xE4F9, 0x8541, 0xE540, 0x8543, 0x94D7, 0x8548, 0xE4FC, 0x8549, 0x8FD4, + 0x854A, 0x8EC7, 0x854B, 0xE542, 0x854E, 0x8BBC, 0x8553, 0xFB9A, 0x8555, 0xE543, 0x8557, 0x9599, 0x8558, 0xE4FB, 0x8559, 0xFB9B, + 0x855A, 0xE4D4, 0x8563, 0xE4FA, 0x8568, 0x986E, 0x8569, 0x93A0, 0x856A, 0x9593, 0x856B, 0xFB9C, 0x856D, 0xE54A, 0x8577, 0xE550, + 0x857E, 0xE551, 0x8580, 0xE544, 0x8584, 0x9496, 0x8587, 0xE54E, 0x8588, 0xE546, 0x858A, 0xE548, 0x8590, 0xE552, 0x8591, 0xE547, + 0x8594, 0xE54B, 0x8597, 0x8992, 0x8599, 0x93E3, 0x859B, 0xE54C, 0x859C, 0xE54F, 0x85A4, 0xE545, 0x85A6, 0x9145, 0x85A8, 0xE549, + 0x85A9, 0x8E46, 0x85AA, 0x9064, 0x85AB, 0x8C4F, 0x85AC, 0x96F2, 0x85AE, 0x96F7, 0x85AF, 0x8F92, 0x85B0, 0xFB9E, 0x85B9, 0xE556, + 0x85BA, 0xE554, 0x85C1, 0x986D, 0x85C9, 0xE553, 0x85CD, 0x9795, 0x85CF, 0xE555, 0x85D0, 0xE557, 0x85D5, 0xE558, 0x85DC, 0xE55B, + 0x85DD, 0xE559, 0x85E4, 0x93A1, 0x85E5, 0xE55A, 0x85E9, 0x94CB, 0x85EA, 0xE54D, 0x85F7, 0x8F93, 0x85F9, 0xE55C, 0x85FA, 0xE561, + 0x85FB, 0x9194, 0x85FE, 0xE560, 0x8602, 0xE541, 0x8606, 0xE562, 0x8607, 0x9168, 0x860A, 0xE55D, 0x860B, 0xE55F, 0x8613, 0xE55E, + 0x8616, 0x9F50, 0x8617, 0x9F41, 0x861A, 0xE564, 0x8622, 0xE563, 0x862D, 0x9796, 0x862F, 0xE1BA, 0x8630, 0xE565, 0x863F, 0xE566, + 0x864D, 0xE567, 0x864E, 0x8CD5, 0x8650, 0x8B73, 0x8654, 0xE569, 0x8655, 0x997C, 0x865A, 0x8B95, 0x865C, 0x97B8, 0x865E, 0x8BF1, + 0x865F, 0xE56A, 0x8667, 0xE56B, 0x866B, 0x928E, 0x8671, 0xE56C, 0x8679, 0x93F8, 0x867B, 0x88B8, 0x868A, 0x89E1, 0x868B, 0xE571, + 0x868C, 0xE572, 0x8693, 0xE56D, 0x8695, 0x8E5C, 0x86A3, 0xE56E, 0x86A4, 0x9461, 0x86A9, 0xE56F, 0x86AA, 0xE570, 0x86AB, 0xE57A, + 0x86AF, 0xE574, 0x86B0, 0xE577, 0x86B6, 0xE573, 0x86C4, 0xE575, 0x86C6, 0xE576, 0x86C7, 0x8ED6, 0x86C9, 0xE578, 0x86CB, 0x9260, + 0x86CD, 0x8C75, 0x86CE, 0x8A61, 0x86D4, 0xE57B, 0x86D9, 0x8A5E, 0x86DB, 0xE581, 0x86DE, 0xE57C, 0x86DF, 0xE580, 0x86E4, 0x94B8, + 0x86E9, 0xE57D, 0x86EC, 0xE57E, 0x86ED, 0x9567, 0x86EE, 0x94D8, 0x86EF, 0xE582, 0x86F8, 0x91FB, 0x86F9, 0xE58C, 0x86FB, 0xE588, + 0x86FE, 0x89E9, 0x8700, 0xE586, 0x8702, 0x9649, 0x8703, 0xE587, 0x8706, 0xE584, 0x8708, 0xE585, 0x8709, 0xE58A, 0x870A, 0xE58D, + 0x870D, 0xE58B, 0x8711, 0xE589, 0x8712, 0xE583, 0x8718, 0x9277, 0x871A, 0xE594, 0x871C, 0x96A8, 0x8725, 0xE592, 0x8729, 0xE593, + 0x8734, 0xE58E, 0x8737, 0xE590, 0x873B, 0xE591, 0x873F, 0xE58F, 0x8749, 0x90E4, 0x874B, 0x9858, 0x874C, 0xE598, 0x874E, 0xE599, + 0x8753, 0xE59F, 0x8755, 0x9049, 0x8757, 0xE59B, 0x8759, 0xE59E, 0x875F, 0xE596, 0x8760, 0xE595, 0x8763, 0xE5A0, 0x8766, 0x89DA, + 0x8768, 0xE59C, 0x876A, 0xE5A1, 0x876E, 0xE59D, 0x8774, 0xE59A, 0x8776, 0x92B1, 0x8778, 0xE597, 0x877F, 0x9488, 0x8782, 0xE5A5, + 0x878D, 0x975A, 0x879F, 0xE5A4, 0x87A2, 0xE5A3, 0x87AB, 0xE5AC, 0x87AF, 0xE5A6, 0x87B3, 0xE5AE, 0x87BA, 0x9786, 0x87BB, 0xE5B1, + 0x87BD, 0xE5A8, 0x87C0, 0xE5A9, 0x87C4, 0xE5AD, 0x87C6, 0xE5B0, 0x87C7, 0xE5AF, 0x87CB, 0xE5A7, 0x87D0, 0xE5AA, 0x87D2, 0xE5BB, + 0x87E0, 0xE5B4, 0x87EF, 0xE5B2, 0x87F2, 0xE5B3, 0x87F6, 0xE5B8, 0x87F7, 0xE5B9, 0x87F9, 0x8A49, 0x87FB, 0x8B61, 0x87FE, 0xE5B7, + 0x8805, 0xE5A2, 0x8807, 0xFBA1, 0x880D, 0xE5B6, 0x880E, 0xE5BA, 0x880F, 0xE5B5, 0x8811, 0xE5BC, 0x8815, 0xE5BE, 0x8816, 0xE5BD, + 0x8821, 0xE5C0, 0x8822, 0xE5BF, 0x8823, 0xE579, 0x8827, 0xE5C4, 0x8831, 0xE5C1, 0x8836, 0xE5C2, 0x8839, 0xE5C3, 0x883B, 0xE5C5, + 0x8840, 0x8C8C, 0x8842, 0xE5C7, 0x8844, 0xE5C6, 0x8846, 0x8F4F, 0x884C, 0x8D73, 0x884D, 0x9FA5, 0x8852, 0xE5C8, 0x8853, 0x8F70, + 0x8857, 0x8A58, 0x8859, 0xE5C9, 0x885B, 0x8971, 0x885D, 0x8FD5, 0x885E, 0xE5CA, 0x8861, 0x8D74, 0x8862, 0xE5CB, 0x8863, 0x88DF, + 0x8868, 0x955C, 0x886B, 0xE5CC, 0x8870, 0x908A, 0x8872, 0xE5D3, 0x8875, 0xE5D0, 0x8877, 0x928F, 0x887D, 0xE5D1, 0x887E, 0xE5CE, + 0x887F, 0x8BDC, 0x8881, 0xE5CD, 0x8882, 0xE5D4, 0x8888, 0x8C55, 0x888B, 0x91DC, 0x888D, 0xE5DA, 0x8892, 0xE5D6, 0x8896, 0x91B3, + 0x8897, 0xE5D5, 0x8899, 0xE5D8, 0x889E, 0xE5CF, 0x88A2, 0xE5D9, 0x88A4, 0xE5DB, 0x88AB, 0x94ED, 0x88AE, 0xE5D7, 0x88B0, 0xE5DC, + 0x88B1, 0xE5DE, 0x88B4, 0x8CD1, 0x88B5, 0xE5D2, 0x88B7, 0x88BF, 0x88BF, 0xE5DD, 0x88C1, 0x8DD9, 0x88C2, 0x97F4, 0x88C3, 0xE5DF, + 0x88C4, 0xE5E0, 0x88C5, 0x9195, 0x88CF, 0x97A0, 0x88D4, 0xE5E1, 0x88D5, 0x9754, 0x88D8, 0xE5E2, 0x88D9, 0xE5E3, 0x88DC, 0x95E2, + 0x88DD, 0xE5E4, 0x88DF, 0x8DBE, 0x88E1, 0x97A1, 0x88E8, 0xE5E9, 0x88F2, 0xE5EA, 0x88F3, 0x8FD6, 0x88F4, 0xE5E8, 0x88F5, 0xFBA2, + 0x88F8, 0x9787, 0x88F9, 0xE5E5, 0x88FC, 0xE5E7, 0x88FD, 0x90BB, 0x88FE, 0x909E, 0x8902, 0xE5E6, 0x8904, 0xE5EB, 0x8907, 0x95A1, + 0x890A, 0xE5ED, 0x890C, 0xE5EC, 0x8910, 0x8A8C, 0x8912, 0x964A, 0x8913, 0xE5EE, 0x891C, 0xFA5D, 0x891D, 0xE5FA, 0x891E, 0xE5F0, + 0x8925, 0xE5F1, 0x892A, 0xE5F2, 0x892B, 0xE5F3, 0x8936, 0xE5F7, 0x8938, 0xE5F8, 0x893B, 0xE5F6, 0x8941, 0xE5F4, 0x8943, 0xE5EF, + 0x8944, 0xE5F5, 0x894C, 0xE5F9, 0x894D, 0xE8B5, 0x8956, 0x89A6, 0x895E, 0xE5FC, 0x895F, 0x8BDD, 0x8960, 0xE5FB, 0x8964, 0xE641, + 0x8966, 0xE640, 0x896A, 0xE643, 0x896D, 0xE642, 0x896F, 0xE644, 0x8972, 0x8F50, 0x8974, 0xE645, 0x8977, 0xE646, 0x897E, 0xE647, + 0x897F, 0x90BC, 0x8981, 0x9776, 0x8983, 0xE648, 0x8986, 0x95A2, 0x8987, 0x9465, 0x8988, 0xE649, 0x898A, 0xE64A, 0x898B, 0x8CA9, + 0x898F, 0x8B4B, 0x8993, 0xE64B, 0x8996, 0x8E8B, 0x8997, 0x9460, 0x8998, 0xE64C, 0x899A, 0x8A6F, 0x89A1, 0xE64D, 0x89A6, 0xE64F, + 0x89A7, 0x9797, 0x89A9, 0xE64E, 0x89AA, 0x9065, 0x89AC, 0xE650, 0x89AF, 0xE651, 0x89B2, 0xE652, 0x89B3, 0x8ACF, 0x89BA, 0xE653, + 0x89BD, 0xE654, 0x89BF, 0xE655, 0x89C0, 0xE656, 0x89D2, 0x8A70, 0x89DA, 0xE657, 0x89DC, 0xE658, 0x89DD, 0xE659, 0x89E3, 0x89F0, + 0x89E6, 0x9047, 0x89E7, 0xE65A, 0x89F4, 0xE65B, 0x89F8, 0xE65C, 0x8A00, 0x8CBE, 0x8A02, 0x92F9, 0x8A03, 0xE65D, 0x8A08, 0x8C76, + 0x8A0A, 0x9075, 0x8A0C, 0xE660, 0x8A0E, 0x93A2, 0x8A10, 0xE65F, 0x8A12, 0xFBA3, 0x8A13, 0x8C50, 0x8A16, 0xE65E, 0x8A17, 0x91F5, + 0x8A18, 0x8B4C, 0x8A1B, 0xE661, 0x8A1D, 0xE662, 0x8A1F, 0x8FD7, 0x8A23, 0x8C8D, 0x8A25, 0xE663, 0x8A2A, 0x964B, 0x8A2D, 0x90DD, + 0x8A31, 0x8B96, 0x8A33, 0x96F3, 0x8A34, 0x9169, 0x8A36, 0xE664, 0x8A37, 0xFBA4, 0x8A3A, 0x9066, 0x8A3B, 0x9290, 0x8A3C, 0x8FD8, + 0x8A41, 0xE665, 0x8A46, 0xE668, 0x8A48, 0xE669, 0x8A50, 0x8DBC, 0x8A51, 0x91C0, 0x8A52, 0xE667, 0x8A54, 0x8FD9, 0x8A55, 0x955D, + 0x8A5B, 0xE666, 0x8A5E, 0x8E8C, 0x8A60, 0x8972, 0x8A62, 0xE66D, 0x8A63, 0x8C77, 0x8A66, 0x8E8E, 0x8A69, 0x8E8D, 0x8A6B, 0x986C, + 0x8A6C, 0xE66C, 0x8A6D, 0xE66B, 0x8A6E, 0x9146, 0x8A70, 0x8B6C, 0x8A71, 0x9862, 0x8A72, 0x8A59, 0x8A73, 0x8FDA, 0x8A79, 0xFBA5, + 0x8A7C, 0xE66A, 0x8A82, 0xE66F, 0x8A84, 0xE670, 0x8A85, 0xE66E, 0x8A87, 0x8CD6, 0x8A89, 0x975F, 0x8A8C, 0x8E8F, 0x8A8D, 0x9446, + 0x8A91, 0xE673, 0x8A93, 0x90BE, 0x8A95, 0x9261, 0x8A98, 0x9755, 0x8A9A, 0xE676, 0x8A9E, 0x8CEA, 0x8AA0, 0x90BD, 0x8AA1, 0xE672, + 0x8AA3, 0xE677, 0x8AA4, 0x8CEB, 0x8AA5, 0xE674, 0x8AA6, 0xE675, 0x8AA7, 0xFBA6, 0x8AA8, 0xE671, 0x8AAC, 0x90E0, 0x8AAD, 0x93C7, + 0x8AB0, 0x924E, 0x8AB2, 0x89DB, 0x8AB9, 0x94EE, 0x8ABC, 0x8B62, 0x8ABE, 0xFBA7, 0x8ABF, 0x92B2, 0x8AC2, 0xE67A, 0x8AC4, 0xE678, + 0x8AC7, 0x926B, 0x8ACB, 0x90BF, 0x8ACC, 0x8AD0, 0x8ACD, 0xE679, 0x8ACF, 0x907A, 0x8AD2, 0x97C8, 0x8AD6, 0x985F, 0x8ADA, 0xE67B, + 0x8ADB, 0xE687, 0x8ADC, 0x92B3, 0x8ADE, 0xE686, 0x8ADF, 0xFBA8, 0x8AE0, 0xE683, 0x8AE1, 0xE68B, 0x8AE2, 0xE684, 0x8AE4, 0xE680, + 0x8AE6, 0x92FA, 0x8AE7, 0xE67E, 0x8AEB, 0xE67C, 0x8AED, 0x9740, 0x8AEE, 0x8E90, 0x8AF1, 0xE681, 0x8AF3, 0xE67D, 0x8AF6, 0xFBAA, + 0x8AF7, 0xE685, 0x8AF8, 0x8F94, 0x8AFA, 0x8CBF, 0x8AFE, 0x91F8, 0x8B00, 0x9664, 0x8B01, 0x8979, 0x8B02, 0x88E0, 0x8B04, 0x93A3, + 0x8B07, 0xE689, 0x8B0C, 0xE688, 0x8B0E, 0x93E4, 0x8B10, 0xE68D, 0x8B14, 0xE682, 0x8B16, 0xE68C, 0x8B17, 0xE68E, 0x8B19, 0x8CAA, + 0x8B1A, 0xE68A, 0x8B1B, 0x8D75, 0x8B1D, 0x8ED3, 0x8B20, 0xE68F, 0x8B21, 0x9777, 0x8B26, 0xE692, 0x8B28, 0xE695, 0x8B2B, 0xE693, + 0x8B2C, 0x9554, 0x8B33, 0xE690, 0x8B39, 0x8BDE, 0x8B3E, 0xE694, 0x8B41, 0xE696, 0x8B49, 0xE69A, 0x8B4C, 0xE697, 0x8B4E, 0xE699, + 0x8B4F, 0xE698, 0x8B53, 0xFBAB, 0x8B56, 0xE69B, 0x8B58, 0x8EAF, 0x8B5A, 0xE69D, 0x8B5B, 0xE69C, 0x8B5C, 0x9588, 0x8B5F, 0xE69F, + 0x8B66, 0x8C78, 0x8B6B, 0xE69E, 0x8B6C, 0xE6A0, 0x8B6F, 0xE6A1, 0x8B70, 0x8B63, 0x8B71, 0xE3BF, 0x8B72, 0x8FF7, 0x8B74, 0xE6A2, + 0x8B77, 0x8CEC, 0x8B7D, 0xE6A3, 0x8B7F, 0xFBAC, 0x8B80, 0xE6A4, 0x8B83, 0x8E5D, 0x8B8A, 0x9DCC, 0x8B8C, 0xE6A5, 0x8B8E, 0xE6A6, + 0x8B90, 0x8F51, 0x8B92, 0xE6A7, 0x8B93, 0xE6A8, 0x8B96, 0xE6A9, 0x8B99, 0xE6AA, 0x8B9A, 0xE6AB, 0x8C37, 0x924A, 0x8C3A, 0xE6AC, + 0x8C3F, 0xE6AE, 0x8C41, 0xE6AD, 0x8C46, 0x93A4, 0x8C48, 0xE6AF, 0x8C4A, 0x964C, 0x8C4C, 0xE6B0, 0x8C4E, 0xE6B1, 0x8C50, 0xE6B2, + 0x8C55, 0xE6B3, 0x8C5A, 0x93D8, 0x8C61, 0x8FDB, 0x8C62, 0xE6B4, 0x8C6A, 0x8D8B, 0x8C6B, 0x98AC, 0x8C6C, 0xE6B5, 0x8C78, 0xE6B6, + 0x8C79, 0x955E, 0x8C7A, 0xE6B7, 0x8C7C, 0xE6BF, 0x8C82, 0xE6B8, 0x8C85, 0xE6BA, 0x8C89, 0xE6B9, 0x8C8A, 0xE6BB, 0x8C8C, 0x9665, + 0x8C8D, 0xE6BC, 0x8C8E, 0xE6BD, 0x8C94, 0xE6BE, 0x8C98, 0xE6C0, 0x8C9D, 0x8A4C, 0x8C9E, 0x92E5, 0x8CA0, 0x9589, 0x8CA1, 0x8DE0, + 0x8CA2, 0x8D76, 0x8CA7, 0x956E, 0x8CA8, 0x89DD, 0x8CA9, 0x94CC, 0x8CAA, 0xE6C3, 0x8CAB, 0x8AD1, 0x8CAC, 0x90D3, 0x8CAD, 0xE6C2, + 0x8CAE, 0xE6C7, 0x8CAF, 0x9299, 0x8CB0, 0x96E1, 0x8CB2, 0xE6C5, 0x8CB3, 0xE6C6, 0x8CB4, 0x8B4D, 0x8CB6, 0xE6C8, 0x8CB7, 0x9483, + 0x8CB8, 0x91DD, 0x8CBB, 0x94EF, 0x8CBC, 0x935C, 0x8CBD, 0xE6C4, 0x8CBF, 0x9666, 0x8CC0, 0x89EA, 0x8CC1, 0xE6CA, 0x8CC2, 0x9847, + 0x8CC3, 0x92C0, 0x8CC4, 0x9864, 0x8CC7, 0x8E91, 0x8CC8, 0xE6C9, 0x8CCA, 0x91AF, 0x8CCD, 0xE6DA, 0x8CCE, 0x9147, 0x8CD1, 0x93F6, + 0x8CD3, 0x956F, 0x8CDA, 0xE6CD, 0x8CDB, 0x8E5E, 0x8CDC, 0x8E92, 0x8CDE, 0x8FDC, 0x8CE0, 0x9485, 0x8CE2, 0x8CAB, 0x8CE3, 0xE6CC, + 0x8CE4, 0xE6CB, 0x8CE6, 0x958A, 0x8CEA, 0x8EBF, 0x8CED, 0x9371, 0x8CF0, 0xFBAD, 0x8CF4, 0xFBAE, 0x8CFA, 0xE6CF, 0x8CFB, 0xE6D0, + 0x8CFC, 0x8D77, 0x8CFD, 0xE6CE, 0x8D04, 0xE6D1, 0x8D05, 0xE6D2, 0x8D07, 0xE6D4, 0x8D08, 0x91A1, 0x8D0A, 0xE6D3, 0x8D0B, 0x8AE4, + 0x8D0D, 0xE6D6, 0x8D0F, 0xE6D5, 0x8D10, 0xE6D7, 0x8D12, 0xFBAF, 0x8D13, 0xE6D9, 0x8D14, 0xE6DB, 0x8D16, 0xE6DC, 0x8D64, 0x90D4, + 0x8D66, 0x8ECD, 0x8D67, 0xE6DD, 0x8D6B, 0x8A71, 0x8D6D, 0xE6DE, 0x8D70, 0x9196, 0x8D71, 0xE6DF, 0x8D73, 0xE6E0, 0x8D74, 0x958B, + 0x8D76, 0xFBB0, 0x8D77, 0x8B4E, 0x8D81, 0xE6E1, 0x8D85, 0x92B4, 0x8D8A, 0x897A, 0x8D99, 0xE6E2, 0x8DA3, 0x8EEF, 0x8DA8, 0x9096, + 0x8DB3, 0x91AB, 0x8DBA, 0xE6E5, 0x8DBE, 0xE6E4, 0x8DC2, 0xE6E3, 0x8DCB, 0xE6EB, 0x8DCC, 0xE6E9, 0x8DCF, 0xE6E6, 0x8DD6, 0xE6E8, + 0x8DDA, 0xE6E7, 0x8DDB, 0xE6EA, 0x8DDD, 0x8B97, 0x8DDF, 0xE6EE, 0x8DE1, 0x90D5, 0x8DE3, 0xE6EF, 0x8DE8, 0x8CD7, 0x8DEA, 0xE6EC, + 0x8DEB, 0xE6ED, 0x8DEF, 0x9848, 0x8DF3, 0x92B5, 0x8DF5, 0x9148, 0x8DFC, 0xE6F0, 0x8DFF, 0xE6F3, 0x8E08, 0xE6F1, 0x8E09, 0xE6F2, + 0x8E0A, 0x9778, 0x8E0F, 0x93A5, 0x8E10, 0xE6F6, 0x8E1D, 0xE6F4, 0x8E1E, 0xE6F5, 0x8E1F, 0xE6F7, 0x8E2A, 0xE748, 0x8E30, 0xE6FA, + 0x8E34, 0xE6FB, 0x8E35, 0xE6F9, 0x8E42, 0xE6F8, 0x8E44, 0x92FB, 0x8E47, 0xE740, 0x8E48, 0xE744, 0x8E49, 0xE741, 0x8E4A, 0xE6FC, + 0x8E4C, 0xE742, 0x8E50, 0xE743, 0x8E55, 0xE74A, 0x8E59, 0xE745, 0x8E5F, 0x90D6, 0x8E60, 0xE747, 0x8E63, 0xE749, 0x8E64, 0xE746, + 0x8E72, 0xE74C, 0x8E74, 0x8F52, 0x8E76, 0xE74B, 0x8E7C, 0xE74D, 0x8E81, 0xE74E, 0x8E84, 0xE751, 0x8E85, 0xE750, 0x8E87, 0xE74F, + 0x8E8A, 0xE753, 0x8E8B, 0xE752, 0x8E8D, 0x96F4, 0x8E91, 0xE755, 0x8E93, 0xE754, 0x8E94, 0xE756, 0x8E99, 0xE757, 0x8EA1, 0xE759, + 0x8EAA, 0xE758, 0x8EAB, 0x9067, 0x8EAC, 0xE75A, 0x8EAF, 0x8BEB, 0x8EB0, 0xE75B, 0x8EB1, 0xE75D, 0x8EBE, 0xE75E, 0x8EC5, 0xE75F, + 0x8EC6, 0xE75C, 0x8EC8, 0xE760, 0x8ECA, 0x8ED4, 0x8ECB, 0xE761, 0x8ECC, 0x8B4F, 0x8ECD, 0x8C52, 0x8ECF, 0xFBB2, 0x8ED2, 0x8CAC, + 0x8EDB, 0xE762, 0x8EDF, 0x93EE, 0x8EE2, 0x935D, 0x8EE3, 0xE763, 0x8EEB, 0xE766, 0x8EF8, 0x8EB2, 0x8EFB, 0xE765, 0x8EFC, 0xE764, + 0x8EFD, 0x8C79, 0x8EFE, 0xE767, 0x8F03, 0x8A72, 0x8F05, 0xE769, 0x8F09, 0x8DDA, 0x8F0A, 0xE768, 0x8F0C, 0xE771, 0x8F12, 0xE76B, + 0x8F13, 0xE76D, 0x8F14, 0x95E3, 0x8F15, 0xE76A, 0x8F19, 0xE76C, 0x8F1B, 0xE770, 0x8F1C, 0xE76E, 0x8F1D, 0x8B50, 0x8F1F, 0xE76F, + 0x8F26, 0xE772, 0x8F29, 0x9479, 0x8F2A, 0x97D6, 0x8F2F, 0x8F53, 0x8F33, 0xE773, 0x8F38, 0x9741, 0x8F39, 0xE775, 0x8F3B, 0xE774, + 0x8F3E, 0xE778, 0x8F3F, 0x9760, 0x8F42, 0xE777, 0x8F44, 0x8A8D, 0x8F45, 0xE776, 0x8F46, 0xE77B, 0x8F49, 0xE77A, 0x8F4C, 0xE779, + 0x8F4D, 0x9351, 0x8F4E, 0xE77C, 0x8F57, 0xE77D, 0x8F5C, 0xE77E, 0x8F5F, 0x8D8C, 0x8F61, 0x8C44, 0x8F62, 0xE780, 0x8F63, 0xE781, + 0x8F64, 0xE782, 0x8F9B, 0x9068, 0x8F9C, 0xE783, 0x8F9E, 0x8EAB, 0x8F9F, 0xE784, 0x8FA3, 0xE785, 0x8FA7, 0x999F, 0x8FA8, 0x999E, + 0x8FAD, 0xE786, 0x8FAE, 0xE390, 0x8FAF, 0xE787, 0x8FB0, 0x9243, 0x8FB1, 0x904A, 0x8FB2, 0x945F, 0x8FB7, 0xE788, 0x8FBA, 0x95D3, + 0x8FBB, 0x92D2, 0x8FBC, 0x8D9E, 0x8FBF, 0x9248, 0x8FC2, 0x8949, 0x8FC4, 0x9698, 0x8FC5, 0x9076, 0x8FCE, 0x8C7D, 0x8FD1, 0x8BDF, + 0x8FD4, 0x95D4, 0x8FDA, 0xE789, 0x8FE2, 0xE78B, 0x8FE5, 0xE78A, 0x8FE6, 0x89DE, 0x8FE9, 0x93F4, 0x8FEA, 0xE78C, 0x8FEB, 0x9497, + 0x8FED, 0x9352, 0x8FEF, 0xE78D, 0x8FF0, 0x8F71, 0x8FF4, 0xE78F, 0x8FF7, 0x96C0, 0x8FF8, 0xE79E, 0x8FF9, 0xE791, 0x8FFA, 0xE792, + 0x8FFD, 0x92C7, 0x9000, 0x91DE, 0x9001, 0x9197, 0x9003, 0x93A6, 0x9005, 0xE790, 0x9006, 0x8B74, 0x900B, 0xE799, 0x900D, 0xE796, + 0x900E, 0xE7A3, 0x900F, 0x93A7, 0x9010, 0x9280, 0x9011, 0xE793, 0x9013, 0x92FC, 0x9014, 0x9372, 0x9015, 0xE794, 0x9016, 0xE798, + 0x9017, 0x9080, 0x9019, 0x9487, 0x901A, 0x92CA, 0x901D, 0x90C0, 0x901E, 0xE797, 0x901F, 0x91AC, 0x9020, 0x91A2, 0x9021, 0xE795, + 0x9022, 0x88A7, 0x9023, 0x9841, 0x9027, 0xE79A, 0x902E, 0x91DF, 0x9031, 0x8F54, 0x9032, 0x9069, 0x9035, 0xE79C, 0x9036, 0xE79B, + 0x9038, 0x88ED, 0x9039, 0xE79D, 0x903C, 0x954E, 0x903E, 0xE7A5, 0x9041, 0x93D9, 0x9042, 0x908B, 0x9045, 0x9278, 0x9047, 0x8BF6, + 0x9049, 0xE7A4, 0x904A, 0x9756, 0x904B, 0x895E, 0x904D, 0x95D5, 0x904E, 0x89DF, 0x904F, 0xE79F, 0x9050, 0xE7A0, 0x9051, 0xE7A1, + 0x9052, 0xE7A2, 0x9053, 0x93B9, 0x9054, 0x9242, 0x9055, 0x88E1, 0x9056, 0xE7A6, 0x9058, 0xE7A7, 0x9059, 0xEAA1, 0x905C, 0x91BB, + 0x905E, 0xE7A8, 0x9060, 0x8993, 0x9061, 0x916B, 0x9063, 0x8CAD, 0x9065, 0x9779, 0x9067, 0xFBB5, 0x9068, 0xE7A9, 0x9069, 0x934B, + 0x906D, 0x9198, 0x906E, 0x8ED5, 0x906F, 0xE7AA, 0x9072, 0xE7AD, 0x9075, 0x8F85, 0x9076, 0xE7AB, 0x9077, 0x914A, 0x9078, 0x9149, + 0x907A, 0x88E2, 0x907C, 0x97C9, 0x907D, 0xE7AF, 0x907F, 0x94F0, 0x9080, 0xE7B1, 0x9081, 0xE7B0, 0x9082, 0xE7AE, 0x9083, 0xE284, + 0x9084, 0x8AD2, 0x9087, 0xE78E, 0x9089, 0xE7B3, 0x908A, 0xE7B2, 0x908F, 0xE7B4, 0x9091, 0x9757, 0x90A3, 0x93DF, 0x90A6, 0x964D, + 0x90A8, 0xE7B5, 0x90AA, 0x8ED7, 0x90AF, 0xE7B6, 0x90B1, 0xE7B7, 0x90B5, 0xE7B8, 0x90B8, 0x9340, 0x90C1, 0x88E8, 0x90CA, 0x8D78, + 0x90CE, 0x9859, 0x90DB, 0xE7BC, 0x90DE, 0xFBB6, 0x90E1, 0x8C53, 0x90E2, 0xE7B9, 0x90E4, 0xE7BA, 0x90E8, 0x9594, 0x90ED, 0x8A73, + 0x90F5, 0x9758, 0x90F7, 0x8BBD, 0x90FD, 0x9373, 0x9102, 0xE7BD, 0x9112, 0xE7BE, 0x9115, 0xFBB8, 0x9119, 0xE7BF, 0x9127, 0xFBB9, + 0x912D, 0x9341, 0x9130, 0xE7C1, 0x9132, 0xE7C0, 0x9149, 0x93D1, 0x914A, 0xE7C2, 0x914B, 0x8F55, 0x914C, 0x8EDE, 0x914D, 0x947A, + 0x914E, 0x9291, 0x9152, 0x8EF0, 0x9154, 0x908C, 0x9156, 0xE7C3, 0x9158, 0xE7C4, 0x9162, 0x907C, 0x9163, 0xE7C5, 0x9165, 0xE7C6, + 0x9169, 0xE7C7, 0x916A, 0x978F, 0x916C, 0x8F56, 0x9172, 0xE7C9, 0x9173, 0xE7C8, 0x9175, 0x8D79, 0x9177, 0x8D93, 0x9178, 0x8E5F, + 0x9182, 0xE7CC, 0x9187, 0x8F86, 0x9189, 0xE7CB, 0x918B, 0xE7CA, 0x918D, 0x91E7, 0x9190, 0x8CED, 0x9192, 0x90C1, 0x9197, 0x94AE, + 0x919C, 0x8F58, 0x91A2, 0xE7CD, 0x91A4, 0x8FDD, 0x91AA, 0xE7D0, 0x91AB, 0xE7CE, 0x91AF, 0xE7CF, 0x91B4, 0xE7D2, 0x91B5, 0xE7D1, + 0x91B8, 0x8FF8, 0x91BA, 0xE7D3, 0x91C0, 0xE7D4, 0x91C1, 0xE7D5, 0x91C6, 0x94CE, 0x91C7, 0x8DD1, 0x91C8, 0x8EDF, 0x91C9, 0xE7D6, + 0x91CB, 0xE7D7, 0x91CC, 0x97A2, 0x91CD, 0x8F64, 0x91CE, 0x96EC, 0x91CF, 0x97CA, 0x91D0, 0xE7D8, 0x91D1, 0x8BE0, 0x91D6, 0xE7D9, + 0x91D7, 0xFBBB, 0x91D8, 0x9342, 0x91DA, 0xFBBA, 0x91DB, 0xE7DC, 0x91DC, 0x8A98, 0x91DD, 0x906A, 0x91DE, 0xFBBC, 0x91DF, 0xE7DA, + 0x91E1, 0xE7DB, 0x91E3, 0x92DE, 0x91E4, 0xFBBF, 0x91E5, 0xFBC0, 0x91E6, 0x9674, 0x91E7, 0x8BFA, 0x91ED, 0xFBBD, 0x91EE, 0xFBBE, + 0x91F5, 0xE7DE, 0x91F6, 0xE7DF, 0x91FC, 0xE7DD, 0x91FF, 0xE7E1, 0x9206, 0xFBC1, 0x920A, 0xFBC3, 0x920D, 0x93DD, 0x920E, 0x8A62, + 0x9210, 0xFBC2, 0x9211, 0xE7E5, 0x9214, 0xE7E2, 0x9215, 0xE7E4, 0x921E, 0xE7E0, 0x9229, 0xE86E, 0x922C, 0xE7E3, 0x9234, 0x97E9, + 0x9237, 0x8CD8, 0x9239, 0xFBCA, 0x923A, 0xFBC4, 0x923C, 0xFBC6, 0x923F, 0xE7ED, 0x9240, 0xFBC5, 0x9244, 0x9353, 0x9245, 0xE7E8, + 0x9248, 0xE7EB, 0x9249, 0xE7E9, 0x924B, 0xE7EE, 0x924E, 0xFBC7, 0x9250, 0xE7EF, 0x9251, 0xFBC9, 0x9257, 0xE7E7, 0x9259, 0xFBC8, + 0x925A, 0xE7F4, 0x925B, 0x8994, 0x925E, 0xE7E6, 0x9262, 0x94AB, 0x9264, 0xE7EA, 0x9266, 0x8FDE, 0x9267, 0xFBCB, 0x9271, 0x8D7A, + 0x9277, 0xFBCD, 0x9278, 0xFBCE, 0x927E, 0x9667, 0x9280, 0x8BE2, 0x9283, 0x8F65, 0x9285, 0x93BA, 0x9288, 0xFA5F, 0x9291, 0x914C, + 0x9293, 0xE7F2, 0x9295, 0xE7EC, 0x9296, 0xE7F1, 0x9298, 0x96C1, 0x929A, 0x92B6, 0x929B, 0xE7F3, 0x929C, 0xE7F0, 0x92A7, 0xFBCC, + 0x92AD, 0x914B, 0x92B7, 0xE7F7, 0x92B9, 0xE7F6, 0x92CF, 0xE7F5, 0x92D0, 0xFBD2, 0x92D2, 0x964E, 0x92D3, 0xFBD6, 0x92D5, 0xFBD4, + 0x92D7, 0xFBD0, 0x92D9, 0xFBD1, 0x92E0, 0xFBD5, 0x92E4, 0x8F9B, 0x92E7, 0xFBCF, 0x92E9, 0xE7F8, 0x92EA, 0x95DD, 0x92ED, 0x8973, + 0x92F2, 0x9565, 0x92F3, 0x9292, 0x92F8, 0x8B98, 0x92F9, 0xFA65, 0x92FA, 0xE7FA, 0x92FB, 0xFBD9, 0x92FC, 0x8D7C, 0x92FF, 0xFBDC, + 0x9302, 0xFBDE, 0x9306, 0x8E4B, 0x930F, 0xE7F9, 0x9310, 0x908D, 0x9318, 0x908E, 0x9319, 0xE840, 0x931A, 0xE842, 0x931D, 0xFBDD, + 0x931E, 0xFBDB, 0x9320, 0x8FF9, 0x9321, 0xFBD8, 0x9322, 0xE841, 0x9323, 0xE843, 0x9325, 0xFBD7, 0x9326, 0x8BD1, 0x9328, 0x9564, + 0x932B, 0x8EE0, 0x932C, 0x9842, 0x932E, 0xE7FC, 0x932F, 0x8DF6, 0x9332, 0x985E, 0x9335, 0xE845, 0x933A, 0xE844, 0x933B, 0xE846, + 0x9344, 0xE7FB, 0x9348, 0xFA5E, 0x934B, 0x93E7, 0x934D, 0x9374, 0x9354, 0x92D5, 0x9356, 0xE84B, 0x9357, 0xFBE0, 0x935B, 0x9262, + 0x935C, 0xE847, 0x9360, 0xE848, 0x936C, 0x8C4C, 0x936E, 0xE84A, 0x9370, 0xFBDF, 0x9375, 0x8CAE, 0x937C, 0xE849, 0x937E, 0x8FDF, + 0x938C, 0x8A99, 0x9394, 0xE84F, 0x9396, 0x8DBD, 0x9397, 0x9199, 0x939A, 0x92C8, 0x93A4, 0xFBE1, 0x93A7, 0x8A5A, 0x93AC, 0xE84D, + 0x93AD, 0xE84E, 0x93AE, 0x92C1, 0x93B0, 0xE84C, 0x93B9, 0xE850, 0x93C3, 0xE856, 0x93C6, 0xFBE2, 0x93C8, 0xE859, 0x93D0, 0xE858, + 0x93D1, 0x934C, 0x93D6, 0xE851, 0x93D7, 0xE852, 0x93D8, 0xE855, 0x93DD, 0xE857, 0x93DE, 0xFBE3, 0x93E1, 0x8BBE, 0x93E4, 0xE85A, + 0x93E5, 0xE854, 0x93E8, 0xE853, 0x93F8, 0xFBE4, 0x9403, 0xE85E, 0x9407, 0xE85F, 0x9410, 0xE860, 0x9413, 0xE85D, 0x9414, 0xE85C, + 0x9418, 0x8FE0, 0x9419, 0x93A8, 0x941A, 0xE85B, 0x9421, 0xE864, 0x942B, 0xE862, 0x9431, 0xFBE5, 0x9435, 0xE863, 0x9436, 0xE861, + 0x9438, 0x91F6, 0x943A, 0xE865, 0x9441, 0xE866, 0x9444, 0xE868, 0x9445, 0xFBE6, 0x9448, 0xFBE7, 0x9451, 0x8AD3, 0x9452, 0xE867, + 0x9453, 0x96F8, 0x945A, 0xE873, 0x945B, 0xE869, 0x945E, 0xE86C, 0x9460, 0xE86A, 0x9462, 0xE86B, 0x946A, 0xE86D, 0x9470, 0xE86F, + 0x9475, 0xE870, 0x9477, 0xE871, 0x947C, 0xE874, 0x947D, 0xE872, 0x947E, 0xE875, 0x947F, 0xE877, 0x9481, 0xE876, 0x9577, 0x92B7, + 0x9580, 0x96E5, 0x9582, 0xE878, 0x9583, 0x914D, 0x9587, 0xE879, 0x9589, 0x95C2, 0x958A, 0xE87A, 0x958B, 0x8A4A, 0x958F, 0x895B, + 0x9591, 0x8AD5, 0x9592, 0xFBE8, 0x9593, 0x8AD4, 0x9594, 0xE87B, 0x9596, 0xE87C, 0x9598, 0xE87D, 0x9599, 0xE87E, 0x95A0, 0xE880, + 0x95A2, 0x8AD6, 0x95A3, 0x8A74, 0x95A4, 0x8D7D, 0x95A5, 0x94B4, 0x95A7, 0xE882, 0x95A8, 0xE881, 0x95AD, 0xE883, 0x95B2, 0x897B, + 0x95B9, 0xE886, 0x95BB, 0xE885, 0x95BC, 0xE884, 0x95BE, 0xE887, 0x95C3, 0xE88A, 0x95C7, 0x88C5, 0x95CA, 0xE888, 0x95CC, 0xE88C, + 0x95CD, 0xE88B, 0x95D4, 0xE88E, 0x95D5, 0xE88D, 0x95D6, 0xE88F, 0x95D8, 0x93AC, 0x95DC, 0xE890, 0x95E1, 0xE891, 0x95E2, 0xE893, + 0x95E5, 0xE892, 0x961C, 0x958C, 0x9621, 0xE894, 0x9628, 0xE895, 0x962A, 0x8DE3, 0x962E, 0xE896, 0x962F, 0xE897, 0x9632, 0x9668, + 0x963B, 0x916A, 0x963F, 0x88A2, 0x9640, 0x91C9, 0x9642, 0xE898, 0x9644, 0x958D, 0x964B, 0xE89B, 0x964C, 0xE899, 0x964D, 0x8D7E, + 0x964F, 0xE89A, 0x9650, 0x8CC0, 0x965B, 0x95C3, 0x965C, 0xE89D, 0x965D, 0xE89F, 0x965E, 0xE89E, 0x965F, 0xE8A0, 0x9662, 0x8940, + 0x9663, 0x9077, 0x9664, 0x8F9C, 0x9665, 0x8AD7, 0x9666, 0xE8A1, 0x966A, 0x9486, 0x966C, 0xE8A3, 0x9670, 0x8941, 0x9672, 0xE8A2, + 0x9673, 0x92C2, 0x9675, 0x97CB, 0x9676, 0x93A9, 0x9677, 0xE89C, 0x9678, 0x97A4, 0x967A, 0x8CAF, 0x967D, 0x977A, 0x9685, 0x8BF7, + 0x9686, 0x97B2, 0x9688, 0x8C47, 0x968A, 0x91E0, 0x968B, 0xE440, 0x968D, 0xE8A4, 0x968E, 0x8A4B, 0x968F, 0x908F, 0x9694, 0x8A75, + 0x9695, 0xE8A6, 0x9697, 0xE8A7, 0x9698, 0xE8A5, 0x9699, 0x8C84, 0x969B, 0x8DDB, 0x969C, 0x8FE1, 0x969D, 0xFBEB, 0x96A0, 0x8942, + 0x96A3, 0x97D7, 0x96A7, 0xE8A9, 0x96A8, 0xE7AC, 0x96AA, 0xE8A8, 0x96AF, 0xFBEC, 0x96B0, 0xE8AC, 0x96B1, 0xE8AA, 0x96B2, 0xE8AB, + 0x96B4, 0xE8AD, 0x96B6, 0xE8AE, 0x96B7, 0x97EA, 0x96B8, 0xE8AF, 0x96B9, 0xE8B0, 0x96BB, 0x90C7, 0x96BC, 0x94B9, 0x96C0, 0x909D, + 0x96C1, 0x8AE5, 0x96C4, 0x9759, 0x96C5, 0x89EB, 0x96C6, 0x8F57, 0x96C7, 0x8CD9, 0x96C9, 0xE8B3, 0x96CB, 0xE8B2, 0x96CC, 0x8E93, + 0x96CD, 0xE8B4, 0x96CE, 0xE8B1, 0x96D1, 0x8E47, 0x96D5, 0xE8B8, 0x96D6, 0xE5AB, 0x96D9, 0x99D4, 0x96DB, 0x9097, 0x96DC, 0xE8B6, + 0x96E2, 0x97A3, 0x96E3, 0x93EF, 0x96E8, 0x894A, 0x96EA, 0x90E1, 0x96EB, 0x8EB4, 0x96F0, 0x95B5, 0x96F2, 0x895F, 0x96F6, 0x97EB, + 0x96F7, 0x978B, 0x96F9, 0xE8B9, 0x96FB, 0x9364, 0x9700, 0x8EF9, 0x9704, 0xE8BA, 0x9706, 0xE8BB, 0x9707, 0x906B, 0x9708, 0xE8BC, + 0x970A, 0x97EC, 0x970D, 0xE8B7, 0x970E, 0xE8BE, 0x970F, 0xE8C0, 0x9711, 0xE8BF, 0x9713, 0xE8BD, 0x9716, 0xE8C1, 0x9719, 0xE8C2, + 0x971C, 0x919A, 0x971E, 0x89E0, 0x9724, 0xE8C3, 0x9727, 0x96B6, 0x972A, 0xE8C4, 0x9730, 0xE8C5, 0x9732, 0x9849, 0x9733, 0xFBED, + 0x9738, 0x9E50, 0x9739, 0xE8C6, 0x973B, 0xFBEE, 0x973D, 0xE8C7, 0x973E, 0xE8C8, 0x9742, 0xE8CC, 0x9743, 0xFBEF, 0x9744, 0xE8C9, + 0x9746, 0xE8CA, 0x9748, 0xE8CB, 0x9749, 0xE8CD, 0x974D, 0xFBF0, 0x974F, 0xFBF1, 0x9751, 0xFBF2, 0x9752, 0x90C2, 0x9755, 0xFBF3, + 0x9756, 0x96F5, 0x9759, 0x90C3, 0x975C, 0xE8CE, 0x975E, 0x94F1, 0x9760, 0xE8CF, 0x9761, 0xEA72, 0x9762, 0x96CA, 0x9764, 0xE8D0, + 0x9766, 0xE8D1, 0x9768, 0xE8D2, 0x9769, 0x8A76, 0x976B, 0xE8D4, 0x976D, 0x9078, 0x9771, 0xE8D5, 0x9774, 0x8C43, 0x9779, 0xE8D6, + 0x977A, 0xE8DA, 0x977C, 0xE8D8, 0x9781, 0xE8D9, 0x9784, 0x8A93, 0x9785, 0xE8D7, 0x9786, 0xE8DB, 0x978B, 0xE8DC, 0x978D, 0x88C6, + 0x978F, 0xE8DD, 0x9790, 0xE8DE, 0x9798, 0x8FE2, 0x979C, 0xE8DF, 0x97A0, 0x8B66, 0x97A3, 0xE8E2, 0x97A6, 0xE8E1, 0x97A8, 0xE8E0, + 0x97AB, 0xE691, 0x97AD, 0x95DA, 0x97B3, 0xE8E3, 0x97B4, 0xE8E4, 0x97C3, 0xE8E5, 0x97C6, 0xE8E6, 0x97C8, 0xE8E7, 0x97CB, 0xE8E8, + 0x97D3, 0x8AD8, 0x97DC, 0xE8E9, 0x97ED, 0xE8EA, 0x97EE, 0x9442, 0x97F2, 0xE8EC, 0x97F3, 0x89B9, 0x97F5, 0xE8EF, 0x97F6, 0xE8EE, + 0x97FB, 0x8943, 0x97FF, 0x8BBF, 0x9801, 0x95C5, 0x9802, 0x92B8, 0x9803, 0x8DA0, 0x9805, 0x8D80, 0x9806, 0x8F87, 0x9808, 0x907B, + 0x980C, 0xE8F1, 0x980F, 0xE8F0, 0x9810, 0x9761, 0x9811, 0x8AE6, 0x9812, 0x94D0, 0x9813, 0x93DA, 0x9817, 0x909C, 0x9818, 0x97CC, + 0x981A, 0x8C7A, 0x9821, 0xE8F4, 0x9824, 0xE8F3, 0x982C, 0x966A, 0x982D, 0x93AA, 0x9834, 0x896F, 0x9837, 0xE8F5, 0x9838, 0xE8F2, + 0x983B, 0x9570, 0x983C, 0x978A, 0x983D, 0xE8F6, 0x9846, 0xE8F7, 0x984B, 0xE8F9, 0x984C, 0x91E8, 0x984D, 0x8A7A, 0x984E, 0x8A7B, + 0x984F, 0xE8F8, 0x9854, 0x8AE7, 0x9855, 0x8CB0, 0x9857, 0xFBF4, 0x9858, 0x8AE8, 0x985B, 0x935E, 0x985E, 0x97DE, 0x9865, 0xFBF5, + 0x9867, 0x8CDA, 0x986B, 0xE8FA, 0x986F, 0xE8FB, 0x9870, 0xE8FC, 0x9871, 0xE940, 0x9873, 0xE942, 0x9874, 0xE941, 0x98A8, 0x9597, + 0x98AA, 0xE943, 0x98AF, 0xE944, 0x98B1, 0xE945, 0x98B6, 0xE946, 0x98C3, 0xE948, 0x98C4, 0xE947, 0x98C6, 0xE949, 0x98DB, 0x94F2, + 0x98DC, 0xE3CA, 0x98DF, 0x9048, 0x98E2, 0x8B51, 0x98E9, 0xE94A, 0x98EB, 0xE94B, 0x98ED, 0x99AA, 0x98EE, 0x9F5A, 0x98EF, 0x94D1, + 0x98F2, 0x88F9, 0x98F4, 0x88B9, 0x98FC, 0x8E94, 0x98FD, 0x964F, 0x98FE, 0x8FFC, 0x9903, 0xE94C, 0x9905, 0x96DD, 0x9909, 0xE94D, + 0x990A, 0x977B, 0x990C, 0x8961, 0x9910, 0x8E60, 0x9912, 0xE94E, 0x9913, 0x89EC, 0x9914, 0xE94F, 0x9918, 0xE950, 0x991D, 0xE952, + 0x991E, 0xE953, 0x9920, 0xE955, 0x9921, 0xE951, 0x9924, 0xE954, 0x9927, 0xFBF8, 0x9928, 0x8AD9, 0x992C, 0xE956, 0x992E, 0xE957, + 0x993D, 0xE958, 0x993E, 0xE959, 0x9942, 0xE95A, 0x9945, 0xE95C, 0x9949, 0xE95B, 0x994B, 0xE95E, 0x994C, 0xE961, 0x9950, 0xE95D, + 0x9951, 0xE95F, 0x9952, 0xE960, 0x9955, 0xE962, 0x9957, 0x8BC0, 0x9996, 0x8EF1, 0x9997, 0xE963, 0x9998, 0xE964, 0x9999, 0x8D81, + 0x999E, 0xFBFA, 0x99A5, 0xE965, 0x99A8, 0x8A5D, 0x99AC, 0x946E, 0x99AD, 0xE966, 0x99AE, 0xE967, 0x99B3, 0x9279, 0x99B4, 0x93E9, + 0x99BC, 0xE968, 0x99C1, 0x949D, 0x99C4, 0x91CA, 0x99C5, 0x8977, 0x99C6, 0x8BEC, 0x99C8, 0x8BED, 0x99D0, 0x9293, 0x99D1, 0xE96D, + 0x99D2, 0x8BEE, 0x99D5, 0x89ED, 0x99D8, 0xE96C, 0x99DB, 0xE96A, 0x99DD, 0xE96B, 0x99DF, 0xE969, 0x99E2, 0xE977, 0x99ED, 0xE96E, + 0x99EE, 0xE96F, 0x99F1, 0xE970, 0x99F2, 0xE971, 0x99F8, 0xE973, 0x99FB, 0xE972, 0x99FF, 0x8F78, 0x9A01, 0xE974, 0x9A05, 0xE976, + 0x9A0E, 0x8B52, 0x9A0F, 0xE975, 0x9A12, 0x919B, 0x9A13, 0x8CB1, 0x9A19, 0xE978, 0x9A28, 0x91CB, 0x9A2B, 0xE979, 0x9A30, 0x93AB, + 0x9A37, 0xE97A, 0x9A3E, 0xE980, 0x9A40, 0xE97D, 0x9A42, 0xE97C, 0x9A43, 0xE97E, 0x9A45, 0xE97B, 0x9A4D, 0xE982, 0x9A4E, 0xFBFB, + 0x9A55, 0xE981, 0x9A57, 0xE984, 0x9A5A, 0x8BC1, 0x9A5B, 0xE983, 0x9A5F, 0xE985, 0x9A62, 0xE986, 0x9A64, 0xE988, 0x9A65, 0xE987, + 0x9A69, 0xE989, 0x9A6A, 0xE98B, 0x9A6B, 0xE98A, 0x9AA8, 0x8D9C, 0x9AAD, 0xE98C, 0x9AB0, 0xE98D, 0x9AB8, 0x8A5B, 0x9ABC, 0xE98E, + 0x9AC0, 0xE98F, 0x9AC4, 0x9091, 0x9ACF, 0xE990, 0x9AD1, 0xE991, 0x9AD3, 0xE992, 0x9AD4, 0xE993, 0x9AD8, 0x8D82, 0x9AD9, 0xFBFC, + 0x9ADC, 0xFC40, 0x9ADE, 0xE994, 0x9ADF, 0xE995, 0x9AE2, 0xE996, 0x9AE3, 0xE997, 0x9AE6, 0xE998, 0x9AEA, 0x94AF, 0x9AEB, 0xE99A, + 0x9AED, 0x9545, 0x9AEE, 0xE99B, 0x9AEF, 0xE999, 0x9AF1, 0xE99D, 0x9AF4, 0xE99C, 0x9AF7, 0xE99E, 0x9AFB, 0xE99F, 0x9B06, 0xE9A0, + 0x9B18, 0xE9A1, 0x9B1A, 0xE9A2, 0x9B1F, 0xE9A3, 0x9B22, 0xE9A4, 0x9B23, 0xE9A5, 0x9B25, 0xE9A6, 0x9B27, 0xE9A7, 0x9B28, 0xE9A8, + 0x9B29, 0xE9A9, 0x9B2A, 0xE9AA, 0x9B2E, 0xE9AB, 0x9B2F, 0xE9AC, 0x9B31, 0x9F54, 0x9B32, 0xE9AD, 0x9B3B, 0xE2F6, 0x9B3C, 0x8B53, + 0x9B41, 0x8A40, 0x9B42, 0x8DB0, 0x9B43, 0xE9AF, 0x9B44, 0xE9AE, 0x9B45, 0x96A3, 0x9B4D, 0xE9B1, 0x9B4E, 0xE9B2, 0x9B4F, 0xE9B0, + 0x9B51, 0xE9B3, 0x9B54, 0x9682, 0x9B58, 0xE9B4, 0x9B5A, 0x8B9B, 0x9B6F, 0x9844, 0x9B72, 0xFC42, 0x9B74, 0xE9B5, 0x9B75, 0xFC41, + 0x9B83, 0xE9B7, 0x9B8E, 0x88BC, 0x9B8F, 0xFC43, 0x9B91, 0xE9B8, 0x9B92, 0x95A9, 0x9B93, 0xE9B6, 0x9B96, 0xE9B9, 0x9B97, 0xE9BA, + 0x9B9F, 0xE9BB, 0x9BA0, 0xE9BC, 0x9BA8, 0xE9BD, 0x9BAA, 0x968E, 0x9BAB, 0x8E4C, 0x9BAD, 0x8DF8, 0x9BAE, 0x914E, 0x9BB1, 0xFC44, + 0x9BB4, 0xE9BE, 0x9BB9, 0xE9C1, 0x9BBB, 0xFC45, 0x9BC0, 0xE9BF, 0x9BC6, 0xE9C2, 0x9BC9, 0x8CEF, 0x9BCA, 0xE9C0, 0x9BCF, 0xE9C3, + 0x9BD1, 0xE9C4, 0x9BD2, 0xE9C5, 0x9BD4, 0xE9C9, 0x9BD6, 0x8E49, 0x9BDB, 0x91E2, 0x9BE1, 0xE9CA, 0x9BE2, 0xE9C7, 0x9BE3, 0xE9C6, + 0x9BE4, 0xE9C8, 0x9BE8, 0x8C7E, 0x9BF0, 0xE9CE, 0x9BF1, 0xE9CD, 0x9BF2, 0xE9CC, 0x9BF5, 0x88B1, 0x9C00, 0xFC46, 0x9C04, 0xE9D8, + 0x9C06, 0xE9D4, 0x9C08, 0xE9D5, 0x9C09, 0xE9D1, 0x9C0A, 0xE9D7, 0x9C0C, 0xE9D3, 0x9C0D, 0x8A82, 0x9C10, 0x986B, 0x9C12, 0xE9D6, + 0x9C13, 0xE9D2, 0x9C14, 0xE9D0, 0x9C15, 0xE9CF, 0x9C1B, 0xE9DA, 0x9C21, 0xE9DD, 0x9C24, 0xE9DC, 0x9C25, 0xE9DB, 0x9C2D, 0x9568, + 0x9C2E, 0xE9D9, 0x9C2F, 0x88F1, 0x9C30, 0xE9DE, 0x9C32, 0xE9E0, 0x9C39, 0x8A8F, 0x9C3A, 0xE9CB, 0x9C3B, 0x8956, 0x9C3E, 0xE9E2, + 0x9C46, 0xE9E1, 0x9C47, 0xE9DF, 0x9C48, 0x924C, 0x9C52, 0x9690, 0x9C57, 0x97D8, 0x9C5A, 0xE9E3, 0x9C60, 0xE9E4, 0x9C67, 0xE9E5, + 0x9C76, 0xE9E6, 0x9C78, 0xE9E7, 0x9CE5, 0x92B9, 0x9CE7, 0xE9E8, 0x9CE9, 0x94B5, 0x9CEB, 0xE9ED, 0x9CEC, 0xE9E9, 0x9CF0, 0xE9EA, + 0x9CF3, 0x9650, 0x9CF4, 0x96C2, 0x9CF6, 0x93CE, 0x9D03, 0xE9EE, 0x9D06, 0xE9EF, 0x9D07, 0x93BC, 0x9D08, 0xE9EC, 0x9D09, 0xE9EB, + 0x9D0E, 0x89A8, 0x9D12, 0xE9F7, 0x9D15, 0xE9F6, 0x9D1B, 0x8995, 0x9D1F, 0xE9F4, 0x9D23, 0xE9F3, 0x9D26, 0xE9F1, 0x9D28, 0x8A9B, + 0x9D2A, 0xE9F0, 0x9D2B, 0x8EB0, 0x9D2C, 0x89A7, 0x9D3B, 0x8D83, 0x9D3E, 0xE9FA, 0x9D3F, 0xE9F9, 0x9D41, 0xE9F8, 0x9D44, 0xE9F5, + 0x9D46, 0xE9FB, 0x9D48, 0xE9FC, 0x9D50, 0xEA44, 0x9D51, 0xEA43, 0x9D59, 0xEA45, 0x9D5C, 0x894C, 0x9D5D, 0xEA40, 0x9D5E, 0xEA41, + 0x9D60, 0x8D94, 0x9D61, 0x96B7, 0x9D64, 0xEA42, 0x9D6B, 0xFC48, 0x9D6C, 0x9651, 0x9D6F, 0xEA4A, 0x9D70, 0xFC47, 0x9D72, 0xEA46, + 0x9D7A, 0xEA4B, 0x9D87, 0xEA48, 0x9D89, 0xEA47, 0x9D8F, 0x8C7B, 0x9D9A, 0xEA4C, 0x9DA4, 0xEA4D, 0x9DA9, 0xEA4E, 0x9DAB, 0xEA49, + 0x9DAF, 0xE9F2, 0x9DB2, 0xEA4F, 0x9DB4, 0x92DF, 0x9DB8, 0xEA53, 0x9DBA, 0xEA54, 0x9DBB, 0xEA52, 0x9DC1, 0xEA51, 0x9DC2, 0xEA57, + 0x9DC4, 0xEA50, 0x9DC6, 0xEA55, 0x9DCF, 0xEA56, 0x9DD3, 0xEA59, 0x9DD9, 0xEA58, 0x9DE6, 0xEA5B, 0x9DED, 0xEA5C, 0x9DEF, 0xEA5D, + 0x9DF2, 0x9868, 0x9DF8, 0xEA5A, 0x9DF9, 0x91E9, 0x9DFA, 0x8DEB, 0x9DFD, 0xEA5E, 0x9E19, 0xFC4A, 0x9E1A, 0xEA5F, 0x9E1B, 0xEA60, + 0x9E1E, 0xEA61, 0x9E75, 0xEA62, 0x9E78, 0x8CB2, 0x9E79, 0xEA63, 0x9E7D, 0xEA64, 0x9E7F, 0x8EAD, 0x9E81, 0xEA65, 0x9E88, 0xEA66, + 0x9E8B, 0xEA67, 0x9E8C, 0xEA68, 0x9E91, 0xEA6B, 0x9E92, 0xEA69, 0x9E93, 0x985B, 0x9E95, 0xEA6A, 0x9E97, 0x97ED, 0x9E9D, 0xEA6C, + 0x9E9F, 0x97D9, 0x9EA5, 0xEA6D, 0x9EA6, 0x949E, 0x9EA9, 0xEA6E, 0x9EAA, 0xEA70, 0x9EAD, 0xEA71, 0x9EB8, 0xEA6F, 0x9EB9, 0x8D8D, + 0x9EBA, 0x96CB, 0x9EBB, 0x9683, 0x9EBC, 0x9BF5, 0x9EBE, 0x9F80, 0x9EBF, 0x969B, 0x9EC4, 0x89A9, 0x9ECC, 0xEA73, 0x9ECD, 0x8B6F, + 0x9ECE, 0xEA74, 0x9ECF, 0xEA75, 0x9ED0, 0xEA76, 0x9ED1, 0xFC4B, 0x9ED2, 0x8D95, 0x9ED4, 0xEA77, 0x9ED8, 0xE0D2, 0x9ED9, 0x96D9, + 0x9EDB, 0x91E1, 0x9EDC, 0xEA78, 0x9EDD, 0xEA7A, 0x9EDE, 0xEA79, 0x9EE0, 0xEA7B, 0x9EE5, 0xEA7C, 0x9EE8, 0xEA7D, 0x9EEF, 0xEA7E, + 0x9EF4, 0xEA80, 0x9EF6, 0xEA81, 0x9EF7, 0xEA82, 0x9EF9, 0xEA83, 0x9EFB, 0xEA84, 0x9EFC, 0xEA85, 0x9EFD, 0xEA86, 0x9F07, 0xEA87, + 0x9F08, 0xEA88, 0x9F0E, 0x9343, 0x9F13, 0x8CDB, 0x9F15, 0xEA8A, 0x9F20, 0x916C, 0x9F21, 0xEA8B, 0x9F2C, 0xEA8C, 0x9F3B, 0x9540, + 0x9F3E, 0xEA8D, 0x9F4A, 0xEA8E, 0x9F4B, 0xE256, 0x9F4E, 0xE6D8, 0x9F4F, 0xE8EB, 0x9F52, 0xEA8F, 0x9F54, 0xEA90, 0x9F5F, 0xEA92, + 0x9F60, 0xEA93, 0x9F61, 0xEA94, 0x9F62, 0x97EE, 0x9F63, 0xEA91, 0x9F66, 0xEA95, 0x9F67, 0xEA96, 0x9F6A, 0xEA98, 0x9F6C, 0xEA97, + 0x9F72, 0xEA9A, 0x9F76, 0xEA9B, 0x9F77, 0xEA99, 0x9F8D, 0x97B4, 0x9F95, 0xEA9C, 0x9F9C, 0xEA9D, 0x9F9D, 0xE273, 0x9FA0, 0xEA9E, + 0xF929, 0xFAE0, 0xF9DC, 0xFBE9, 0xFA0E, 0xFA90, 0xFA0F, 0xFA9B, 0xFA10, 0xFA9C, 0xFA11, 0xFAB1, 0xFA12, 0xFAD8, 0xFA13, 0xFAE8, + 0xFA14, 0xFAEA, 0xFA15, 0xFB58, 0xFA16, 0xFB5E, 0xFA17, 0xFB75, 0xFA18, 0xFB7D, 0xFA19, 0xFB7E, 0xFA1A, 0xFB80, 0xFA1B, 0xFB82, + 0xFA1C, 0xFB86, 0xFA1D, 0xFB89, 0xFA1E, 0xFB92, 0xFA1F, 0xFB9D, 0xFA20, 0xFB9F, 0xFA21, 0xFBA0, 0xFA22, 0xFBA9, 0xFA23, 0xFBB1, + 0xFA24, 0xFBB3, 0xFA25, 0xFBB4, 0xFA26, 0xFBB7, 0xFA27, 0xFBD3, 0xFA28, 0xFBDA, 0xFA29, 0xFBEA, 0xFA2A, 0xFBF6, 0xFA2B, 0xFBF7, + 0xFA2C, 0xFBF9, 0xFA2D, 0xFC49, 0xFF01, 0x8149, 0xFF02, 0xFA57, 0xFF03, 0x8194, 0xFF04, 0x8190, 0xFF05, 0x8193, 0xFF06, 0x8195, + 0xFF07, 0xFA56, 0xFF08, 0x8169, 0xFF09, 0x816A, 0xFF0A, 0x8196, 0xFF0B, 0x817B, 0xFF0C, 0x8143, 0xFF0D, 0x817C, 0xFF0E, 0x8144, + 0xFF0F, 0x815E, 0xFF10, 0x824F, 0xFF11, 0x8250, 0xFF12, 0x8251, 0xFF13, 0x8252, 0xFF14, 0x8253, 0xFF15, 0x8254, 0xFF16, 0x8255, + 0xFF17, 0x8256, 0xFF18, 0x8257, 0xFF19, 0x8258, 0xFF1A, 0x8146, 0xFF1B, 0x8147, 0xFF1C, 0x8183, 0xFF1D, 0x8181, 0xFF1E, 0x8184, + 0xFF1F, 0x8148, 0xFF20, 0x8197, 0xFF21, 0x8260, 0xFF22, 0x8261, 0xFF23, 0x8262, 0xFF24, 0x8263, 0xFF25, 0x8264, 0xFF26, 0x8265, + 0xFF27, 0x8266, 0xFF28, 0x8267, 0xFF29, 0x8268, 0xFF2A, 0x8269, 0xFF2B, 0x826A, 0xFF2C, 0x826B, 0xFF2D, 0x826C, 0xFF2E, 0x826D, + 0xFF2F, 0x826E, 0xFF30, 0x826F, 0xFF31, 0x8270, 0xFF32, 0x8271, 0xFF33, 0x8272, 0xFF34, 0x8273, 0xFF35, 0x8274, 0xFF36, 0x8275, + 0xFF37, 0x8276, 0xFF38, 0x8277, 0xFF39, 0x8278, 0xFF3A, 0x8279, 0xFF3B, 0x816D, 0xFF3C, 0x815F, 0xFF3D, 0x816E, 0xFF3E, 0x814F, + 0xFF3F, 0x8151, 0xFF40, 0x814D, 0xFF41, 0x8281, 0xFF42, 0x8282, 0xFF43, 0x8283, 0xFF44, 0x8284, 0xFF45, 0x8285, 0xFF46, 0x8286, + 0xFF47, 0x8287, 0xFF48, 0x8288, 0xFF49, 0x8289, 0xFF4A, 0x828A, 0xFF4B, 0x828B, 0xFF4C, 0x828C, 0xFF4D, 0x828D, 0xFF4E, 0x828E, + 0xFF4F, 0x828F, 0xFF50, 0x8290, 0xFF51, 0x8291, 0xFF52, 0x8292, 0xFF53, 0x8293, 0xFF54, 0x8294, 0xFF55, 0x8295, 0xFF56, 0x8296, + 0xFF57, 0x8297, 0xFF58, 0x8298, 0xFF59, 0x8299, 0xFF5A, 0x829A, 0xFF5B, 0x816F, 0xFF5C, 0x8162, 0xFF5D, 0x8170, 0xFF5E, 0x8160, + 0xFF61, 0x00A1, 0xFF62, 0x00A2, 0xFF63, 0x00A3, 0xFF64, 0x00A4, 0xFF65, 0x00A5, 0xFF66, 0x00A6, 0xFF67, 0x00A7, 0xFF68, 0x00A8, + 0xFF69, 0x00A9, 0xFF6A, 0x00AA, 0xFF6B, 0x00AB, 0xFF6C, 0x00AC, 0xFF6D, 0x00AD, 0xFF6E, 0x00AE, 0xFF6F, 0x00AF, 0xFF70, 0x00B0, + 0xFF71, 0x00B1, 0xFF72, 0x00B2, 0xFF73, 0x00B3, 0xFF74, 0x00B4, 0xFF75, 0x00B5, 0xFF76, 0x00B6, 0xFF77, 0x00B7, 0xFF78, 0x00B8, + 0xFF79, 0x00B9, 0xFF7A, 0x00BA, 0xFF7B, 0x00BB, 0xFF7C, 0x00BC, 0xFF7D, 0x00BD, 0xFF7E, 0x00BE, 0xFF7F, 0x00BF, 0xFF80, 0x00C0, + 0xFF81, 0x00C1, 0xFF82, 0x00C2, 0xFF83, 0x00C3, 0xFF84, 0x00C4, 0xFF85, 0x00C5, 0xFF86, 0x00C6, 0xFF87, 0x00C7, 0xFF88, 0x00C8, + 0xFF89, 0x00C9, 0xFF8A, 0x00CA, 0xFF8B, 0x00CB, 0xFF8C, 0x00CC, 0xFF8D, 0x00CD, 0xFF8E, 0x00CE, 0xFF8F, 0x00CF, 0xFF90, 0x00D0, + 0xFF91, 0x00D1, 0xFF92, 0x00D2, 0xFF93, 0x00D3, 0xFF94, 0x00D4, 0xFF95, 0x00D5, 0xFF96, 0x00D6, 0xFF97, 0x00D7, 0xFF98, 0x00D8, + 0xFF99, 0x00D9, 0xFF9A, 0x00DA, 0xFF9B, 0x00DB, 0xFF9C, 0x00DC, 0xFF9D, 0x00DD, 0xFF9E, 0x00DE, 0xFF9F, 0x00DF, 0xFFE0, 0x8191, + 0xFFE1, 0x8192, 0xFFE2, 0x81CA, 0xFFE3, 0x8150, 0xFFE4, 0xFA55, 0xFFE5, 0x818F, 0, 0 +}; + +static const WCHAR oem2uni932[] = { /* Shift_JIS --> Unicode pairs */ + 0x00A1, 0xFF61, 0x00A2, 0xFF62, 0x00A3, 0xFF63, 0x00A4, 0xFF64, 0x00A5, 0xFF65, 0x00A6, 0xFF66, 0x00A7, 0xFF67, 0x00A8, 0xFF68, + 0x00A9, 0xFF69, 0x00AA, 0xFF6A, 0x00AB, 0xFF6B, 0x00AC, 0xFF6C, 0x00AD, 0xFF6D, 0x00AE, 0xFF6E, 0x00AF, 0xFF6F, 0x00B0, 0xFF70, + 0x00B1, 0xFF71, 0x00B2, 0xFF72, 0x00B3, 0xFF73, 0x00B4, 0xFF74, 0x00B5, 0xFF75, 0x00B6, 0xFF76, 0x00B7, 0xFF77, 0x00B8, 0xFF78, + 0x00B9, 0xFF79, 0x00BA, 0xFF7A, 0x00BB, 0xFF7B, 0x00BC, 0xFF7C, 0x00BD, 0xFF7D, 0x00BE, 0xFF7E, 0x00BF, 0xFF7F, 0x00C0, 0xFF80, + 0x00C1, 0xFF81, 0x00C2, 0xFF82, 0x00C3, 0xFF83, 0x00C4, 0xFF84, 0x00C5, 0xFF85, 0x00C6, 0xFF86, 0x00C7, 0xFF87, 0x00C8, 0xFF88, + 0x00C9, 0xFF89, 0x00CA, 0xFF8A, 0x00CB, 0xFF8B, 0x00CC, 0xFF8C, 0x00CD, 0xFF8D, 0x00CE, 0xFF8E, 0x00CF, 0xFF8F, 0x00D0, 0xFF90, + 0x00D1, 0xFF91, 0x00D2, 0xFF92, 0x00D3, 0xFF93, 0x00D4, 0xFF94, 0x00D5, 0xFF95, 0x00D6, 0xFF96, 0x00D7, 0xFF97, 0x00D8, 0xFF98, + 0x00D9, 0xFF99, 0x00DA, 0xFF9A, 0x00DB, 0xFF9B, 0x00DC, 0xFF9C, 0x00DD, 0xFF9D, 0x00DE, 0xFF9E, 0x00DF, 0xFF9F, 0x8140, 0x3000, + 0x8141, 0x3001, 0x8142, 0x3002, 0x8143, 0xFF0C, 0x8144, 0xFF0E, 0x8145, 0x30FB, 0x8146, 0xFF1A, 0x8147, 0xFF1B, 0x8148, 0xFF1F, + 0x8149, 0xFF01, 0x814A, 0x309B, 0x814B, 0x309C, 0x814C, 0x00B4, 0x814D, 0xFF40, 0x814E, 0x00A8, 0x814F, 0xFF3E, 0x8150, 0xFFE3, + 0x8151, 0xFF3F, 0x8152, 0x30FD, 0x8153, 0x30FE, 0x8154, 0x309D, 0x8155, 0x309E, 0x8156, 0x3003, 0x8157, 0x4EDD, 0x8158, 0x3005, + 0x8159, 0x3006, 0x815A, 0x3007, 0x815B, 0x30FC, 0x815C, 0x2015, 0x815D, 0x2010, 0x815E, 0xFF0F, 0x815F, 0xFF3C, 0x8160, 0xFF5E, + 0x8161, 0x2225, 0x8162, 0xFF5C, 0x8163, 0x2026, 0x8164, 0x2025, 0x8165, 0x2018, 0x8166, 0x2019, 0x8167, 0x201C, 0x8168, 0x201D, + 0x8169, 0xFF08, 0x816A, 0xFF09, 0x816B, 0x3014, 0x816C, 0x3015, 0x816D, 0xFF3B, 0x816E, 0xFF3D, 0x816F, 0xFF5B, 0x8170, 0xFF5D, + 0x8171, 0x3008, 0x8172, 0x3009, 0x8173, 0x300A, 0x8174, 0x300B, 0x8175, 0x300C, 0x8176, 0x300D, 0x8177, 0x300E, 0x8178, 0x300F, + 0x8179, 0x3010, 0x817A, 0x3011, 0x817B, 0xFF0B, 0x817C, 0xFF0D, 0x817D, 0x00B1, 0x817E, 0x00D7, 0x8180, 0x00F7, 0x8181, 0xFF1D, + 0x8182, 0x2260, 0x8183, 0xFF1C, 0x8184, 0xFF1E, 0x8185, 0x2266, 0x8186, 0x2267, 0x8187, 0x221E, 0x8188, 0x2234, 0x8189, 0x2642, + 0x818A, 0x2640, 0x818B, 0x00B0, 0x818C, 0x2032, 0x818D, 0x2033, 0x818E, 0x2103, 0x818F, 0xFFE5, 0x8190, 0xFF04, 0x8191, 0xFFE0, + 0x8192, 0xFFE1, 0x8193, 0xFF05, 0x8194, 0xFF03, 0x8195, 0xFF06, 0x8196, 0xFF0A, 0x8197, 0xFF20, 0x8198, 0x00A7, 0x8199, 0x2606, + 0x819A, 0x2605, 0x819B, 0x25CB, 0x819C, 0x25CF, 0x819D, 0x25CE, 0x819E, 0x25C7, 0x819F, 0x25C6, 0x81A0, 0x25A1, 0x81A1, 0x25A0, + 0x81A2, 0x25B3, 0x81A3, 0x25B2, 0x81A4, 0x25BD, 0x81A5, 0x25BC, 0x81A6, 0x203B, 0x81A7, 0x3012, 0x81A8, 0x2192, 0x81A9, 0x2190, + 0x81AA, 0x2191, 0x81AB, 0x2193, 0x81AC, 0x3013, 0x81B8, 0x2208, 0x81B9, 0x220B, 0x81BA, 0x2286, 0x81BB, 0x2287, 0x81BC, 0x2282, + 0x81BD, 0x2283, 0x81BE, 0x222A, 0x81BF, 0x2229, 0x81C8, 0x2227, 0x81C9, 0x2228, 0x81CA, 0xFFE2, 0x81CB, 0x21D2, 0x81CC, 0x21D4, + 0x81CD, 0x2200, 0x81CE, 0x2203, 0x81DA, 0x2220, 0x81DB, 0x22A5, 0x81DC, 0x2312, 0x81DD, 0x2202, 0x81DE, 0x2207, 0x81DF, 0x2261, + 0x81E0, 0x2252, 0x81E1, 0x226A, 0x81E2, 0x226B, 0x81E3, 0x221A, 0x81E4, 0x223D, 0x81E5, 0x221D, 0x81E6, 0x2235, 0x81E7, 0x222B, + 0x81E8, 0x222C, 0x81F0, 0x212B, 0x81F1, 0x2030, 0x81F2, 0x266F, 0x81F3, 0x266D, 0x81F4, 0x266A, 0x81F5, 0x2020, 0x81F6, 0x2021, + 0x81F7, 0x00B6, 0x81FC, 0x25EF, 0x824F, 0xFF10, 0x8250, 0xFF11, 0x8251, 0xFF12, 0x8252, 0xFF13, 0x8253, 0xFF14, 0x8254, 0xFF15, + 0x8255, 0xFF16, 0x8256, 0xFF17, 0x8257, 0xFF18, 0x8258, 0xFF19, 0x8260, 0xFF21, 0x8261, 0xFF22, 0x8262, 0xFF23, 0x8263, 0xFF24, + 0x8264, 0xFF25, 0x8265, 0xFF26, 0x8266, 0xFF27, 0x8267, 0xFF28, 0x8268, 0xFF29, 0x8269, 0xFF2A, 0x826A, 0xFF2B, 0x826B, 0xFF2C, + 0x826C, 0xFF2D, 0x826D, 0xFF2E, 0x826E, 0xFF2F, 0x826F, 0xFF30, 0x8270, 0xFF31, 0x8271, 0xFF32, 0x8272, 0xFF33, 0x8273, 0xFF34, + 0x8274, 0xFF35, 0x8275, 0xFF36, 0x8276, 0xFF37, 0x8277, 0xFF38, 0x8278, 0xFF39, 0x8279, 0xFF3A, 0x8281, 0xFF41, 0x8282, 0xFF42, + 0x8283, 0xFF43, 0x8284, 0xFF44, 0x8285, 0xFF45, 0x8286, 0xFF46, 0x8287, 0xFF47, 0x8288, 0xFF48, 0x8289, 0xFF49, 0x828A, 0xFF4A, + 0x828B, 0xFF4B, 0x828C, 0xFF4C, 0x828D, 0xFF4D, 0x828E, 0xFF4E, 0x828F, 0xFF4F, 0x8290, 0xFF50, 0x8291, 0xFF51, 0x8292, 0xFF52, + 0x8293, 0xFF53, 0x8294, 0xFF54, 0x8295, 0xFF55, 0x8296, 0xFF56, 0x8297, 0xFF57, 0x8298, 0xFF58, 0x8299, 0xFF59, 0x829A, 0xFF5A, + 0x829F, 0x3041, 0x82A0, 0x3042, 0x82A1, 0x3043, 0x82A2, 0x3044, 0x82A3, 0x3045, 0x82A4, 0x3046, 0x82A5, 0x3047, 0x82A6, 0x3048, + 0x82A7, 0x3049, 0x82A8, 0x304A, 0x82A9, 0x304B, 0x82AA, 0x304C, 0x82AB, 0x304D, 0x82AC, 0x304E, 0x82AD, 0x304F, 0x82AE, 0x3050, + 0x82AF, 0x3051, 0x82B0, 0x3052, 0x82B1, 0x3053, 0x82B2, 0x3054, 0x82B3, 0x3055, 0x82B4, 0x3056, 0x82B5, 0x3057, 0x82B6, 0x3058, + 0x82B7, 0x3059, 0x82B8, 0x305A, 0x82B9, 0x305B, 0x82BA, 0x305C, 0x82BB, 0x305D, 0x82BC, 0x305E, 0x82BD, 0x305F, 0x82BE, 0x3060, + 0x82BF, 0x3061, 0x82C0, 0x3062, 0x82C1, 0x3063, 0x82C2, 0x3064, 0x82C3, 0x3065, 0x82C4, 0x3066, 0x82C5, 0x3067, 0x82C6, 0x3068, + 0x82C7, 0x3069, 0x82C8, 0x306A, 0x82C9, 0x306B, 0x82CA, 0x306C, 0x82CB, 0x306D, 0x82CC, 0x306E, 0x82CD, 0x306F, 0x82CE, 0x3070, + 0x82CF, 0x3071, 0x82D0, 0x3072, 0x82D1, 0x3073, 0x82D2, 0x3074, 0x82D3, 0x3075, 0x82D4, 0x3076, 0x82D5, 0x3077, 0x82D6, 0x3078, + 0x82D7, 0x3079, 0x82D8, 0x307A, 0x82D9, 0x307B, 0x82DA, 0x307C, 0x82DB, 0x307D, 0x82DC, 0x307E, 0x82DD, 0x307F, 0x82DE, 0x3080, + 0x82DF, 0x3081, 0x82E0, 0x3082, 0x82E1, 0x3083, 0x82E2, 0x3084, 0x82E3, 0x3085, 0x82E4, 0x3086, 0x82E5, 0x3087, 0x82E6, 0x3088, + 0x82E7, 0x3089, 0x82E8, 0x308A, 0x82E9, 0x308B, 0x82EA, 0x308C, 0x82EB, 0x308D, 0x82EC, 0x308E, 0x82ED, 0x308F, 0x82EE, 0x3090, + 0x82EF, 0x3091, 0x82F0, 0x3092, 0x82F1, 0x3093, 0x8340, 0x30A1, 0x8341, 0x30A2, 0x8342, 0x30A3, 0x8343, 0x30A4, 0x8344, 0x30A5, + 0x8345, 0x30A6, 0x8346, 0x30A7, 0x8347, 0x30A8, 0x8348, 0x30A9, 0x8349, 0x30AA, 0x834A, 0x30AB, 0x834B, 0x30AC, 0x834C, 0x30AD, + 0x834D, 0x30AE, 0x834E, 0x30AF, 0x834F, 0x30B0, 0x8350, 0x30B1, 0x8351, 0x30B2, 0x8352, 0x30B3, 0x8353, 0x30B4, 0x8354, 0x30B5, + 0x8355, 0x30B6, 0x8356, 0x30B7, 0x8357, 0x30B8, 0x8358, 0x30B9, 0x8359, 0x30BA, 0x835A, 0x30BB, 0x835B, 0x30BC, 0x835C, 0x30BD, + 0x835D, 0x30BE, 0x835E, 0x30BF, 0x835F, 0x30C0, 0x8360, 0x30C1, 0x8361, 0x30C2, 0x8362, 0x30C3, 0x8363, 0x30C4, 0x8364, 0x30C5, + 0x8365, 0x30C6, 0x8366, 0x30C7, 0x8367, 0x30C8, 0x8368, 0x30C9, 0x8369, 0x30CA, 0x836A, 0x30CB, 0x836B, 0x30CC, 0x836C, 0x30CD, + 0x836D, 0x30CE, 0x836E, 0x30CF, 0x836F, 0x30D0, 0x8370, 0x30D1, 0x8371, 0x30D2, 0x8372, 0x30D3, 0x8373, 0x30D4, 0x8374, 0x30D5, + 0x8375, 0x30D6, 0x8376, 0x30D7, 0x8377, 0x30D8, 0x8378, 0x30D9, 0x8379, 0x30DA, 0x837A, 0x30DB, 0x837B, 0x30DC, 0x837C, 0x30DD, + 0x837D, 0x30DE, 0x837E, 0x30DF, 0x8380, 0x30E0, 0x8381, 0x30E1, 0x8382, 0x30E2, 0x8383, 0x30E3, 0x8384, 0x30E4, 0x8385, 0x30E5, + 0x8386, 0x30E6, 0x8387, 0x30E7, 0x8388, 0x30E8, 0x8389, 0x30E9, 0x838A, 0x30EA, 0x838B, 0x30EB, 0x838C, 0x30EC, 0x838D, 0x30ED, + 0x838E, 0x30EE, 0x838F, 0x30EF, 0x8390, 0x30F0, 0x8391, 0x30F1, 0x8392, 0x30F2, 0x8393, 0x30F3, 0x8394, 0x30F4, 0x8395, 0x30F5, + 0x8396, 0x30F6, 0x839F, 0x0391, 0x83A0, 0x0392, 0x83A1, 0x0393, 0x83A2, 0x0394, 0x83A3, 0x0395, 0x83A4, 0x0396, 0x83A5, 0x0397, + 0x83A6, 0x0398, 0x83A7, 0x0399, 0x83A8, 0x039A, 0x83A9, 0x039B, 0x83AA, 0x039C, 0x83AB, 0x039D, 0x83AC, 0x039E, 0x83AD, 0x039F, + 0x83AE, 0x03A0, 0x83AF, 0x03A1, 0x83B0, 0x03A3, 0x83B1, 0x03A4, 0x83B2, 0x03A5, 0x83B3, 0x03A6, 0x83B4, 0x03A7, 0x83B5, 0x03A8, + 0x83B6, 0x03A9, 0x83BF, 0x03B1, 0x83C0, 0x03B2, 0x83C1, 0x03B3, 0x83C2, 0x03B4, 0x83C3, 0x03B5, 0x83C4, 0x03B6, 0x83C5, 0x03B7, + 0x83C6, 0x03B8, 0x83C7, 0x03B9, 0x83C8, 0x03BA, 0x83C9, 0x03BB, 0x83CA, 0x03BC, 0x83CB, 0x03BD, 0x83CC, 0x03BE, 0x83CD, 0x03BF, + 0x83CE, 0x03C0, 0x83CF, 0x03C1, 0x83D0, 0x03C3, 0x83D1, 0x03C4, 0x83D2, 0x03C5, 0x83D3, 0x03C6, 0x83D4, 0x03C7, 0x83D5, 0x03C8, + 0x83D6, 0x03C9, 0x8440, 0x0410, 0x8441, 0x0411, 0x8442, 0x0412, 0x8443, 0x0413, 0x8444, 0x0414, 0x8445, 0x0415, 0x8446, 0x0401, + 0x8447, 0x0416, 0x8448, 0x0417, 0x8449, 0x0418, 0x844A, 0x0419, 0x844B, 0x041A, 0x844C, 0x041B, 0x844D, 0x041C, 0x844E, 0x041D, + 0x844F, 0x041E, 0x8450, 0x041F, 0x8451, 0x0420, 0x8452, 0x0421, 0x8453, 0x0422, 0x8454, 0x0423, 0x8455, 0x0424, 0x8456, 0x0425, + 0x8457, 0x0426, 0x8458, 0x0427, 0x8459, 0x0428, 0x845A, 0x0429, 0x845B, 0x042A, 0x845C, 0x042B, 0x845D, 0x042C, 0x845E, 0x042D, + 0x845F, 0x042E, 0x8460, 0x042F, 0x8470, 0x0430, 0x8471, 0x0431, 0x8472, 0x0432, 0x8473, 0x0433, 0x8474, 0x0434, 0x8475, 0x0435, + 0x8476, 0x0451, 0x8477, 0x0436, 0x8478, 0x0437, 0x8479, 0x0438, 0x847A, 0x0439, 0x847B, 0x043A, 0x847C, 0x043B, 0x847D, 0x043C, + 0x847E, 0x043D, 0x8480, 0x043E, 0x8481, 0x043F, 0x8482, 0x0440, 0x8483, 0x0441, 0x8484, 0x0442, 0x8485, 0x0443, 0x8486, 0x0444, + 0x8487, 0x0445, 0x8488, 0x0446, 0x8489, 0x0447, 0x848A, 0x0448, 0x848B, 0x0449, 0x848C, 0x044A, 0x848D, 0x044B, 0x848E, 0x044C, + 0x848F, 0x044D, 0x8490, 0x044E, 0x8491, 0x044F, 0x849F, 0x2500, 0x84A0, 0x2502, 0x84A1, 0x250C, 0x84A2, 0x2510, 0x84A3, 0x2518, + 0x84A4, 0x2514, 0x84A5, 0x251C, 0x84A6, 0x252C, 0x84A7, 0x2524, 0x84A8, 0x2534, 0x84A9, 0x253C, 0x84AA, 0x2501, 0x84AB, 0x2503, + 0x84AC, 0x250F, 0x84AD, 0x2513, 0x84AE, 0x251B, 0x84AF, 0x2517, 0x84B0, 0x2523, 0x84B1, 0x2533, 0x84B2, 0x252B, 0x84B3, 0x253B, + 0x84B4, 0x254B, 0x84B5, 0x2520, 0x84B6, 0x252F, 0x84B7, 0x2528, 0x84B8, 0x2537, 0x84B9, 0x253F, 0x84BA, 0x251D, 0x84BB, 0x2530, + 0x84BC, 0x2525, 0x84BD, 0x2538, 0x84BE, 0x2542, 0x8740, 0x2460, 0x8741, 0x2461, 0x8742, 0x2462, 0x8743, 0x2463, 0x8744, 0x2464, + 0x8745, 0x2465, 0x8746, 0x2466, 0x8747, 0x2467, 0x8748, 0x2468, 0x8749, 0x2469, 0x874A, 0x246A, 0x874B, 0x246B, 0x874C, 0x246C, + 0x874D, 0x246D, 0x874E, 0x246E, 0x874F, 0x246F, 0x8750, 0x2470, 0x8751, 0x2471, 0x8752, 0x2472, 0x8753, 0x2473, 0x8754, 0x2160, + 0x8755, 0x2161, 0x8756, 0x2162, 0x8757, 0x2163, 0x8758, 0x2164, 0x8759, 0x2165, 0x875A, 0x2166, 0x875B, 0x2167, 0x875C, 0x2168, + 0x875D, 0x2169, 0x875F, 0x3349, 0x8760, 0x3314, 0x8761, 0x3322, 0x8762, 0x334D, 0x8763, 0x3318, 0x8764, 0x3327, 0x8765, 0x3303, + 0x8766, 0x3336, 0x8767, 0x3351, 0x8768, 0x3357, 0x8769, 0x330D, 0x876A, 0x3326, 0x876B, 0x3323, 0x876C, 0x332B, 0x876D, 0x334A, + 0x876E, 0x333B, 0x876F, 0x339C, 0x8770, 0x339D, 0x8771, 0x339E, 0x8772, 0x338E, 0x8773, 0x338F, 0x8774, 0x33C4, 0x8775, 0x33A1, + 0x877E, 0x337B, 0x8780, 0x301D, 0x8781, 0x301F, 0x8782, 0x2116, 0x8783, 0x33CD, 0x8784, 0x2121, 0x8785, 0x32A4, 0x8786, 0x32A5, + 0x8787, 0x32A6, 0x8788, 0x32A7, 0x8789, 0x32A8, 0x878A, 0x3231, 0x878B, 0x3232, 0x878C, 0x3239, 0x878D, 0x337E, 0x878E, 0x337D, + 0x878F, 0x337C, 0x8793, 0x222E, 0x8794, 0x2211, 0x8798, 0x221F, 0x8799, 0x22BF, 0x889F, 0x4E9C, 0x88A0, 0x5516, 0x88A1, 0x5A03, + 0x88A2, 0x963F, 0x88A3, 0x54C0, 0x88A4, 0x611B, 0x88A5, 0x6328, 0x88A6, 0x59F6, 0x88A7, 0x9022, 0x88A8, 0x8475, 0x88A9, 0x831C, + 0x88AA, 0x7A50, 0x88AB, 0x60AA, 0x88AC, 0x63E1, 0x88AD, 0x6E25, 0x88AE, 0x65ED, 0x88AF, 0x8466, 0x88B0, 0x82A6, 0x88B1, 0x9BF5, + 0x88B2, 0x6893, 0x88B3, 0x5727, 0x88B4, 0x65A1, 0x88B5, 0x6271, 0x88B6, 0x5B9B, 0x88B7, 0x59D0, 0x88B8, 0x867B, 0x88B9, 0x98F4, + 0x88BA, 0x7D62, 0x88BB, 0x7DBE, 0x88BC, 0x9B8E, 0x88BD, 0x6216, 0x88BE, 0x7C9F, 0x88BF, 0x88B7, 0x88C0, 0x5B89, 0x88C1, 0x5EB5, + 0x88C2, 0x6309, 0x88C3, 0x6697, 0x88C4, 0x6848, 0x88C5, 0x95C7, 0x88C6, 0x978D, 0x88C7, 0x674F, 0x88C8, 0x4EE5, 0x88C9, 0x4F0A, + 0x88CA, 0x4F4D, 0x88CB, 0x4F9D, 0x88CC, 0x5049, 0x88CD, 0x56F2, 0x88CE, 0x5937, 0x88CF, 0x59D4, 0x88D0, 0x5A01, 0x88D1, 0x5C09, + 0x88D2, 0x60DF, 0x88D3, 0x610F, 0x88D4, 0x6170, 0x88D5, 0x6613, 0x88D6, 0x6905, 0x88D7, 0x70BA, 0x88D8, 0x754F, 0x88D9, 0x7570, + 0x88DA, 0x79FB, 0x88DB, 0x7DAD, 0x88DC, 0x7DEF, 0x88DD, 0x80C3, 0x88DE, 0x840E, 0x88DF, 0x8863, 0x88E0, 0x8B02, 0x88E1, 0x9055, + 0x88E2, 0x907A, 0x88E3, 0x533B, 0x88E4, 0x4E95, 0x88E5, 0x4EA5, 0x88E6, 0x57DF, 0x88E7, 0x80B2, 0x88E8, 0x90C1, 0x88E9, 0x78EF, + 0x88EA, 0x4E00, 0x88EB, 0x58F1, 0x88EC, 0x6EA2, 0x88ED, 0x9038, 0x88EE, 0x7A32, 0x88EF, 0x8328, 0x88F0, 0x828B, 0x88F1, 0x9C2F, + 0x88F2, 0x5141, 0x88F3, 0x5370, 0x88F4, 0x54BD, 0x88F5, 0x54E1, 0x88F6, 0x56E0, 0x88F7, 0x59FB, 0x88F8, 0x5F15, 0x88F9, 0x98F2, + 0x88FA, 0x6DEB, 0x88FB, 0x80E4, 0x88FC, 0x852D, 0x8940, 0x9662, 0x8941, 0x9670, 0x8942, 0x96A0, 0x8943, 0x97FB, 0x8944, 0x540B, + 0x8945, 0x53F3, 0x8946, 0x5B87, 0x8947, 0x70CF, 0x8948, 0x7FBD, 0x8949, 0x8FC2, 0x894A, 0x96E8, 0x894B, 0x536F, 0x894C, 0x9D5C, + 0x894D, 0x7ABA, 0x894E, 0x4E11, 0x894F, 0x7893, 0x8950, 0x81FC, 0x8951, 0x6E26, 0x8952, 0x5618, 0x8953, 0x5504, 0x8954, 0x6B1D, + 0x8955, 0x851A, 0x8956, 0x9C3B, 0x8957, 0x59E5, 0x8958, 0x53A9, 0x8959, 0x6D66, 0x895A, 0x74DC, 0x895B, 0x958F, 0x895C, 0x5642, + 0x895D, 0x4E91, 0x895E, 0x904B, 0x895F, 0x96F2, 0x8960, 0x834F, 0x8961, 0x990C, 0x8962, 0x53E1, 0x8963, 0x55B6, 0x8964, 0x5B30, + 0x8965, 0x5F71, 0x8966, 0x6620, 0x8967, 0x66F3, 0x8968, 0x6804, 0x8969, 0x6C38, 0x896A, 0x6CF3, 0x896B, 0x6D29, 0x896C, 0x745B, + 0x896D, 0x76C8, 0x896E, 0x7A4E, 0x896F, 0x9834, 0x8970, 0x82F1, 0x8971, 0x885B, 0x8972, 0x8A60, 0x8973, 0x92ED, 0x8974, 0x6DB2, + 0x8975, 0x75AB, 0x8976, 0x76CA, 0x8977, 0x99C5, 0x8978, 0x60A6, 0x8979, 0x8B01, 0x897A, 0x8D8A, 0x897B, 0x95B2, 0x897C, 0x698E, + 0x897D, 0x53AD, 0x897E, 0x5186, 0x8980, 0x5712, 0x8981, 0x5830, 0x8982, 0x5944, 0x8983, 0x5BB4, 0x8984, 0x5EF6, 0x8985, 0x6028, + 0x8986, 0x63A9, 0x8987, 0x63F4, 0x8988, 0x6CBF, 0x8989, 0x6F14, 0x898A, 0x708E, 0x898B, 0x7114, 0x898C, 0x7159, 0x898D, 0x71D5, + 0x898E, 0x733F, 0x898F, 0x7E01, 0x8990, 0x8276, 0x8991, 0x82D1, 0x8992, 0x8597, 0x8993, 0x9060, 0x8994, 0x925B, 0x8995, 0x9D1B, + 0x8996, 0x5869, 0x8997, 0x65BC, 0x8998, 0x6C5A, 0x8999, 0x7525, 0x899A, 0x51F9, 0x899B, 0x592E, 0x899C, 0x5965, 0x899D, 0x5F80, + 0x899E, 0x5FDC, 0x899F, 0x62BC, 0x89A0, 0x65FA, 0x89A1, 0x6A2A, 0x89A2, 0x6B27, 0x89A3, 0x6BB4, 0x89A4, 0x738B, 0x89A5, 0x7FC1, + 0x89A6, 0x8956, 0x89A7, 0x9D2C, 0x89A8, 0x9D0E, 0x89A9, 0x9EC4, 0x89AA, 0x5CA1, 0x89AB, 0x6C96, 0x89AC, 0x837B, 0x89AD, 0x5104, + 0x89AE, 0x5C4B, 0x89AF, 0x61B6, 0x89B0, 0x81C6, 0x89B1, 0x6876, 0x89B2, 0x7261, 0x89B3, 0x4E59, 0x89B4, 0x4FFA, 0x89B5, 0x5378, + 0x89B6, 0x6069, 0x89B7, 0x6E29, 0x89B8, 0x7A4F, 0x89B9, 0x97F3, 0x89BA, 0x4E0B, 0x89BB, 0x5316, 0x89BC, 0x4EEE, 0x89BD, 0x4F55, + 0x89BE, 0x4F3D, 0x89BF, 0x4FA1, 0x89C0, 0x4F73, 0x89C1, 0x52A0, 0x89C2, 0x53EF, 0x89C3, 0x5609, 0x89C4, 0x590F, 0x89C5, 0x5AC1, + 0x89C6, 0x5BB6, 0x89C7, 0x5BE1, 0x89C8, 0x79D1, 0x89C9, 0x6687, 0x89CA, 0x679C, 0x89CB, 0x67B6, 0x89CC, 0x6B4C, 0x89CD, 0x6CB3, + 0x89CE, 0x706B, 0x89CF, 0x73C2, 0x89D0, 0x798D, 0x89D1, 0x79BE, 0x89D2, 0x7A3C, 0x89D3, 0x7B87, 0x89D4, 0x82B1, 0x89D5, 0x82DB, + 0x89D6, 0x8304, 0x89D7, 0x8377, 0x89D8, 0x83EF, 0x89D9, 0x83D3, 0x89DA, 0x8766, 0x89DB, 0x8AB2, 0x89DC, 0x5629, 0x89DD, 0x8CA8, + 0x89DE, 0x8FE6, 0x89DF, 0x904E, 0x89E0, 0x971E, 0x89E1, 0x868A, 0x89E2, 0x4FC4, 0x89E3, 0x5CE8, 0x89E4, 0x6211, 0x89E5, 0x7259, + 0x89E6, 0x753B, 0x89E7, 0x81E5, 0x89E8, 0x82BD, 0x89E9, 0x86FE, 0x89EA, 0x8CC0, 0x89EB, 0x96C5, 0x89EC, 0x9913, 0x89ED, 0x99D5, + 0x89EE, 0x4ECB, 0x89EF, 0x4F1A, 0x89F0, 0x89E3, 0x89F1, 0x56DE, 0x89F2, 0x584A, 0x89F3, 0x58CA, 0x89F4, 0x5EFB, 0x89F5, 0x5FEB, + 0x89F6, 0x602A, 0x89F7, 0x6094, 0x89F8, 0x6062, 0x89F9, 0x61D0, 0x89FA, 0x6212, 0x89FB, 0x62D0, 0x89FC, 0x6539, 0x8A40, 0x9B41, + 0x8A41, 0x6666, 0x8A42, 0x68B0, 0x8A43, 0x6D77, 0x8A44, 0x7070, 0x8A45, 0x754C, 0x8A46, 0x7686, 0x8A47, 0x7D75, 0x8A48, 0x82A5, + 0x8A49, 0x87F9, 0x8A4A, 0x958B, 0x8A4B, 0x968E, 0x8A4C, 0x8C9D, 0x8A4D, 0x51F1, 0x8A4E, 0x52BE, 0x8A4F, 0x5916, 0x8A50, 0x54B3, + 0x8A51, 0x5BB3, 0x8A52, 0x5D16, 0x8A53, 0x6168, 0x8A54, 0x6982, 0x8A55, 0x6DAF, 0x8A56, 0x788D, 0x8A57, 0x84CB, 0x8A58, 0x8857, + 0x8A59, 0x8A72, 0x8A5A, 0x93A7, 0x8A5B, 0x9AB8, 0x8A5C, 0x6D6C, 0x8A5D, 0x99A8, 0x8A5E, 0x86D9, 0x8A5F, 0x57A3, 0x8A60, 0x67FF, + 0x8A61, 0x86CE, 0x8A62, 0x920E, 0x8A63, 0x5283, 0x8A64, 0x5687, 0x8A65, 0x5404, 0x8A66, 0x5ED3, 0x8A67, 0x62E1, 0x8A68, 0x64B9, + 0x8A69, 0x683C, 0x8A6A, 0x6838, 0x8A6B, 0x6BBB, 0x8A6C, 0x7372, 0x8A6D, 0x78BA, 0x8A6E, 0x7A6B, 0x8A6F, 0x899A, 0x8A70, 0x89D2, + 0x8A71, 0x8D6B, 0x8A72, 0x8F03, 0x8A73, 0x90ED, 0x8A74, 0x95A3, 0x8A75, 0x9694, 0x8A76, 0x9769, 0x8A77, 0x5B66, 0x8A78, 0x5CB3, + 0x8A79, 0x697D, 0x8A7A, 0x984D, 0x8A7B, 0x984E, 0x8A7C, 0x639B, 0x8A7D, 0x7B20, 0x8A7E, 0x6A2B, 0x8A80, 0x6A7F, 0x8A81, 0x68B6, + 0x8A82, 0x9C0D, 0x8A83, 0x6F5F, 0x8A84, 0x5272, 0x8A85, 0x559D, 0x8A86, 0x6070, 0x8A87, 0x62EC, 0x8A88, 0x6D3B, 0x8A89, 0x6E07, + 0x8A8A, 0x6ED1, 0x8A8B, 0x845B, 0x8A8C, 0x8910, 0x8A8D, 0x8F44, 0x8A8E, 0x4E14, 0x8A8F, 0x9C39, 0x8A90, 0x53F6, 0x8A91, 0x691B, + 0x8A92, 0x6A3A, 0x8A93, 0x9784, 0x8A94, 0x682A, 0x8A95, 0x515C, 0x8A96, 0x7AC3, 0x8A97, 0x84B2, 0x8A98, 0x91DC, 0x8A99, 0x938C, + 0x8A9A, 0x565B, 0x8A9B, 0x9D28, 0x8A9C, 0x6822, 0x8A9D, 0x8305, 0x8A9E, 0x8431, 0x8A9F, 0x7CA5, 0x8AA0, 0x5208, 0x8AA1, 0x82C5, + 0x8AA2, 0x74E6, 0x8AA3, 0x4E7E, 0x8AA4, 0x4F83, 0x8AA5, 0x51A0, 0x8AA6, 0x5BD2, 0x8AA7, 0x520A, 0x8AA8, 0x52D8, 0x8AA9, 0x52E7, + 0x8AAA, 0x5DFB, 0x8AAB, 0x559A, 0x8AAC, 0x582A, 0x8AAD, 0x59E6, 0x8AAE, 0x5B8C, 0x8AAF, 0x5B98, 0x8AB0, 0x5BDB, 0x8AB1, 0x5E72, + 0x8AB2, 0x5E79, 0x8AB3, 0x60A3, 0x8AB4, 0x611F, 0x8AB5, 0x6163, 0x8AB6, 0x61BE, 0x8AB7, 0x63DB, 0x8AB8, 0x6562, 0x8AB9, 0x67D1, + 0x8ABA, 0x6853, 0x8ABB, 0x68FA, 0x8ABC, 0x6B3E, 0x8ABD, 0x6B53, 0x8ABE, 0x6C57, 0x8ABF, 0x6F22, 0x8AC0, 0x6F97, 0x8AC1, 0x6F45, + 0x8AC2, 0x74B0, 0x8AC3, 0x7518, 0x8AC4, 0x76E3, 0x8AC5, 0x770B, 0x8AC6, 0x7AFF, 0x8AC7, 0x7BA1, 0x8AC8, 0x7C21, 0x8AC9, 0x7DE9, + 0x8ACA, 0x7F36, 0x8ACB, 0x7FF0, 0x8ACC, 0x809D, 0x8ACD, 0x8266, 0x8ACE, 0x839E, 0x8ACF, 0x89B3, 0x8AD0, 0x8ACC, 0x8AD1, 0x8CAB, + 0x8AD2, 0x9084, 0x8AD3, 0x9451, 0x8AD4, 0x9593, 0x8AD5, 0x9591, 0x8AD6, 0x95A2, 0x8AD7, 0x9665, 0x8AD8, 0x97D3, 0x8AD9, 0x9928, + 0x8ADA, 0x8218, 0x8ADB, 0x4E38, 0x8ADC, 0x542B, 0x8ADD, 0x5CB8, 0x8ADE, 0x5DCC, 0x8ADF, 0x73A9, 0x8AE0, 0x764C, 0x8AE1, 0x773C, + 0x8AE2, 0x5CA9, 0x8AE3, 0x7FEB, 0x8AE4, 0x8D0B, 0x8AE5, 0x96C1, 0x8AE6, 0x9811, 0x8AE7, 0x9854, 0x8AE8, 0x9858, 0x8AE9, 0x4F01, + 0x8AEA, 0x4F0E, 0x8AEB, 0x5371, 0x8AEC, 0x559C, 0x8AED, 0x5668, 0x8AEE, 0x57FA, 0x8AEF, 0x5947, 0x8AF0, 0x5B09, 0x8AF1, 0x5BC4, + 0x8AF2, 0x5C90, 0x8AF3, 0x5E0C, 0x8AF4, 0x5E7E, 0x8AF5, 0x5FCC, 0x8AF6, 0x63EE, 0x8AF7, 0x673A, 0x8AF8, 0x65D7, 0x8AF9, 0x65E2, + 0x8AFA, 0x671F, 0x8AFB, 0x68CB, 0x8AFC, 0x68C4, 0x8B40, 0x6A5F, 0x8B41, 0x5E30, 0x8B42, 0x6BC5, 0x8B43, 0x6C17, 0x8B44, 0x6C7D, + 0x8B45, 0x757F, 0x8B46, 0x7948, 0x8B47, 0x5B63, 0x8B48, 0x7A00, 0x8B49, 0x7D00, 0x8B4A, 0x5FBD, 0x8B4B, 0x898F, 0x8B4C, 0x8A18, + 0x8B4D, 0x8CB4, 0x8B4E, 0x8D77, 0x8B4F, 0x8ECC, 0x8B50, 0x8F1D, 0x8B51, 0x98E2, 0x8B52, 0x9A0E, 0x8B53, 0x9B3C, 0x8B54, 0x4E80, + 0x8B55, 0x507D, 0x8B56, 0x5100, 0x8B57, 0x5993, 0x8B58, 0x5B9C, 0x8B59, 0x622F, 0x8B5A, 0x6280, 0x8B5B, 0x64EC, 0x8B5C, 0x6B3A, + 0x8B5D, 0x72A0, 0x8B5E, 0x7591, 0x8B5F, 0x7947, 0x8B60, 0x7FA9, 0x8B61, 0x87FB, 0x8B62, 0x8ABC, 0x8B63, 0x8B70, 0x8B64, 0x63AC, + 0x8B65, 0x83CA, 0x8B66, 0x97A0, 0x8B67, 0x5409, 0x8B68, 0x5403, 0x8B69, 0x55AB, 0x8B6A, 0x6854, 0x8B6B, 0x6A58, 0x8B6C, 0x8A70, + 0x8B6D, 0x7827, 0x8B6E, 0x6775, 0x8B6F, 0x9ECD, 0x8B70, 0x5374, 0x8B71, 0x5BA2, 0x8B72, 0x811A, 0x8B73, 0x8650, 0x8B74, 0x9006, + 0x8B75, 0x4E18, 0x8B76, 0x4E45, 0x8B77, 0x4EC7, 0x8B78, 0x4F11, 0x8B79, 0x53CA, 0x8B7A, 0x5438, 0x8B7B, 0x5BAE, 0x8B7C, 0x5F13, + 0x8B7D, 0x6025, 0x8B7E, 0x6551, 0x8B80, 0x673D, 0x8B81, 0x6C42, 0x8B82, 0x6C72, 0x8B83, 0x6CE3, 0x8B84, 0x7078, 0x8B85, 0x7403, + 0x8B86, 0x7A76, 0x8B87, 0x7AAE, 0x8B88, 0x7B08, 0x8B89, 0x7D1A, 0x8B8A, 0x7CFE, 0x8B8B, 0x7D66, 0x8B8C, 0x65E7, 0x8B8D, 0x725B, + 0x8B8E, 0x53BB, 0x8B8F, 0x5C45, 0x8B90, 0x5DE8, 0x8B91, 0x62D2, 0x8B92, 0x62E0, 0x8B93, 0x6319, 0x8B94, 0x6E20, 0x8B95, 0x865A, + 0x8B96, 0x8A31, 0x8B97, 0x8DDD, 0x8B98, 0x92F8, 0x8B99, 0x6F01, 0x8B9A, 0x79A6, 0x8B9B, 0x9B5A, 0x8B9C, 0x4EA8, 0x8B9D, 0x4EAB, + 0x8B9E, 0x4EAC, 0x8B9F, 0x4F9B, 0x8BA0, 0x4FA0, 0x8BA1, 0x50D1, 0x8BA2, 0x5147, 0x8BA3, 0x7AF6, 0x8BA4, 0x5171, 0x8BA5, 0x51F6, + 0x8BA6, 0x5354, 0x8BA7, 0x5321, 0x8BA8, 0x537F, 0x8BA9, 0x53EB, 0x8BAA, 0x55AC, 0x8BAB, 0x5883, 0x8BAC, 0x5CE1, 0x8BAD, 0x5F37, + 0x8BAE, 0x5F4A, 0x8BAF, 0x602F, 0x8BB0, 0x6050, 0x8BB1, 0x606D, 0x8BB2, 0x631F, 0x8BB3, 0x6559, 0x8BB4, 0x6A4B, 0x8BB5, 0x6CC1, + 0x8BB6, 0x72C2, 0x8BB7, 0x72ED, 0x8BB8, 0x77EF, 0x8BB9, 0x80F8, 0x8BBA, 0x8105, 0x8BBB, 0x8208, 0x8BBC, 0x854E, 0x8BBD, 0x90F7, + 0x8BBE, 0x93E1, 0x8BBF, 0x97FF, 0x8BC0, 0x9957, 0x8BC1, 0x9A5A, 0x8BC2, 0x4EF0, 0x8BC3, 0x51DD, 0x8BC4, 0x5C2D, 0x8BC5, 0x6681, + 0x8BC6, 0x696D, 0x8BC7, 0x5C40, 0x8BC8, 0x66F2, 0x8BC9, 0x6975, 0x8BCA, 0x7389, 0x8BCB, 0x6850, 0x8BCC, 0x7C81, 0x8BCD, 0x50C5, + 0x8BCE, 0x52E4, 0x8BCF, 0x5747, 0x8BD0, 0x5DFE, 0x8BD1, 0x9326, 0x8BD2, 0x65A4, 0x8BD3, 0x6B23, 0x8BD4, 0x6B3D, 0x8BD5, 0x7434, + 0x8BD6, 0x7981, 0x8BD7, 0x79BD, 0x8BD8, 0x7B4B, 0x8BD9, 0x7DCA, 0x8BDA, 0x82B9, 0x8BDB, 0x83CC, 0x8BDC, 0x887F, 0x8BDD, 0x895F, + 0x8BDE, 0x8B39, 0x8BDF, 0x8FD1, 0x8BE0, 0x91D1, 0x8BE1, 0x541F, 0x8BE2, 0x9280, 0x8BE3, 0x4E5D, 0x8BE4, 0x5036, 0x8BE5, 0x53E5, + 0x8BE6, 0x533A, 0x8BE7, 0x72D7, 0x8BE8, 0x7396, 0x8BE9, 0x77E9, 0x8BEA, 0x82E6, 0x8BEB, 0x8EAF, 0x8BEC, 0x99C6, 0x8BED, 0x99C8, + 0x8BEE, 0x99D2, 0x8BEF, 0x5177, 0x8BF0, 0x611A, 0x8BF1, 0x865E, 0x8BF2, 0x55B0, 0x8BF3, 0x7A7A, 0x8BF4, 0x5076, 0x8BF5, 0x5BD3, + 0x8BF6, 0x9047, 0x8BF7, 0x9685, 0x8BF8, 0x4E32, 0x8BF9, 0x6ADB, 0x8BFA, 0x91E7, 0x8BFB, 0x5C51, 0x8BFC, 0x5C48, 0x8C40, 0x6398, + 0x8C41, 0x7A9F, 0x8C42, 0x6C93, 0x8C43, 0x9774, 0x8C44, 0x8F61, 0x8C45, 0x7AAA, 0x8C46, 0x718A, 0x8C47, 0x9688, 0x8C48, 0x7C82, + 0x8C49, 0x6817, 0x8C4A, 0x7E70, 0x8C4B, 0x6851, 0x8C4C, 0x936C, 0x8C4D, 0x52F2, 0x8C4E, 0x541B, 0x8C4F, 0x85AB, 0x8C50, 0x8A13, + 0x8C51, 0x7FA4, 0x8C52, 0x8ECD, 0x8C53, 0x90E1, 0x8C54, 0x5366, 0x8C55, 0x8888, 0x8C56, 0x7941, 0x8C57, 0x4FC2, 0x8C58, 0x50BE, + 0x8C59, 0x5211, 0x8C5A, 0x5144, 0x8C5B, 0x5553, 0x8C5C, 0x572D, 0x8C5D, 0x73EA, 0x8C5E, 0x578B, 0x8C5F, 0x5951, 0x8C60, 0x5F62, + 0x8C61, 0x5F84, 0x8C62, 0x6075, 0x8C63, 0x6176, 0x8C64, 0x6167, 0x8C65, 0x61A9, 0x8C66, 0x63B2, 0x8C67, 0x643A, 0x8C68, 0x656C, + 0x8C69, 0x666F, 0x8C6A, 0x6842, 0x8C6B, 0x6E13, 0x8C6C, 0x7566, 0x8C6D, 0x7A3D, 0x8C6E, 0x7CFB, 0x8C6F, 0x7D4C, 0x8C70, 0x7D99, + 0x8C71, 0x7E4B, 0x8C72, 0x7F6B, 0x8C73, 0x830E, 0x8C74, 0x834A, 0x8C75, 0x86CD, 0x8C76, 0x8A08, 0x8C77, 0x8A63, 0x8C78, 0x8B66, + 0x8C79, 0x8EFD, 0x8C7A, 0x981A, 0x8C7B, 0x9D8F, 0x8C7C, 0x82B8, 0x8C7D, 0x8FCE, 0x8C7E, 0x9BE8, 0x8C80, 0x5287, 0x8C81, 0x621F, + 0x8C82, 0x6483, 0x8C83, 0x6FC0, 0x8C84, 0x9699, 0x8C85, 0x6841, 0x8C86, 0x5091, 0x8C87, 0x6B20, 0x8C88, 0x6C7A, 0x8C89, 0x6F54, + 0x8C8A, 0x7A74, 0x8C8B, 0x7D50, 0x8C8C, 0x8840, 0x8C8D, 0x8A23, 0x8C8E, 0x6708, 0x8C8F, 0x4EF6, 0x8C90, 0x5039, 0x8C91, 0x5026, + 0x8C92, 0x5065, 0x8C93, 0x517C, 0x8C94, 0x5238, 0x8C95, 0x5263, 0x8C96, 0x55A7, 0x8C97, 0x570F, 0x8C98, 0x5805, 0x8C99, 0x5ACC, + 0x8C9A, 0x5EFA, 0x8C9B, 0x61B2, 0x8C9C, 0x61F8, 0x8C9D, 0x62F3, 0x8C9E, 0x6372, 0x8C9F, 0x691C, 0x8CA0, 0x6A29, 0x8CA1, 0x727D, + 0x8CA2, 0x72AC, 0x8CA3, 0x732E, 0x8CA4, 0x7814, 0x8CA5, 0x786F, 0x8CA6, 0x7D79, 0x8CA7, 0x770C, 0x8CA8, 0x80A9, 0x8CA9, 0x898B, + 0x8CAA, 0x8B19, 0x8CAB, 0x8CE2, 0x8CAC, 0x8ED2, 0x8CAD, 0x9063, 0x8CAE, 0x9375, 0x8CAF, 0x967A, 0x8CB0, 0x9855, 0x8CB1, 0x9A13, + 0x8CB2, 0x9E78, 0x8CB3, 0x5143, 0x8CB4, 0x539F, 0x8CB5, 0x53B3, 0x8CB6, 0x5E7B, 0x8CB7, 0x5F26, 0x8CB8, 0x6E1B, 0x8CB9, 0x6E90, + 0x8CBA, 0x7384, 0x8CBB, 0x73FE, 0x8CBC, 0x7D43, 0x8CBD, 0x8237, 0x8CBE, 0x8A00, 0x8CBF, 0x8AFA, 0x8CC0, 0x9650, 0x8CC1, 0x4E4E, + 0x8CC2, 0x500B, 0x8CC3, 0x53E4, 0x8CC4, 0x547C, 0x8CC5, 0x56FA, 0x8CC6, 0x59D1, 0x8CC7, 0x5B64, 0x8CC8, 0x5DF1, 0x8CC9, 0x5EAB, + 0x8CCA, 0x5F27, 0x8CCB, 0x6238, 0x8CCC, 0x6545, 0x8CCD, 0x67AF, 0x8CCE, 0x6E56, 0x8CCF, 0x72D0, 0x8CD0, 0x7CCA, 0x8CD1, 0x88B4, + 0x8CD2, 0x80A1, 0x8CD3, 0x80E1, 0x8CD4, 0x83F0, 0x8CD5, 0x864E, 0x8CD6, 0x8A87, 0x8CD7, 0x8DE8, 0x8CD8, 0x9237, 0x8CD9, 0x96C7, + 0x8CDA, 0x9867, 0x8CDB, 0x9F13, 0x8CDC, 0x4E94, 0x8CDD, 0x4E92, 0x8CDE, 0x4F0D, 0x8CDF, 0x5348, 0x8CE0, 0x5449, 0x8CE1, 0x543E, + 0x8CE2, 0x5A2F, 0x8CE3, 0x5F8C, 0x8CE4, 0x5FA1, 0x8CE5, 0x609F, 0x8CE6, 0x68A7, 0x8CE7, 0x6A8E, 0x8CE8, 0x745A, 0x8CE9, 0x7881, + 0x8CEA, 0x8A9E, 0x8CEB, 0x8AA4, 0x8CEC, 0x8B77, 0x8CED, 0x9190, 0x8CEE, 0x4E5E, 0x8CEF, 0x9BC9, 0x8CF0, 0x4EA4, 0x8CF1, 0x4F7C, + 0x8CF2, 0x4FAF, 0x8CF3, 0x5019, 0x8CF4, 0x5016, 0x8CF5, 0x5149, 0x8CF6, 0x516C, 0x8CF7, 0x529F, 0x8CF8, 0x52B9, 0x8CF9, 0x52FE, + 0x8CFA, 0x539A, 0x8CFB, 0x53E3, 0x8CFC, 0x5411, 0x8D40, 0x540E, 0x8D41, 0x5589, 0x8D42, 0x5751, 0x8D43, 0x57A2, 0x8D44, 0x597D, + 0x8D45, 0x5B54, 0x8D46, 0x5B5D, 0x8D47, 0x5B8F, 0x8D48, 0x5DE5, 0x8D49, 0x5DE7, 0x8D4A, 0x5DF7, 0x8D4B, 0x5E78, 0x8D4C, 0x5E83, + 0x8D4D, 0x5E9A, 0x8D4E, 0x5EB7, 0x8D4F, 0x5F18, 0x8D50, 0x6052, 0x8D51, 0x614C, 0x8D52, 0x6297, 0x8D53, 0x62D8, 0x8D54, 0x63A7, + 0x8D55, 0x653B, 0x8D56, 0x6602, 0x8D57, 0x6643, 0x8D58, 0x66F4, 0x8D59, 0x676D, 0x8D5A, 0x6821, 0x8D5B, 0x6897, 0x8D5C, 0x69CB, + 0x8D5D, 0x6C5F, 0x8D5E, 0x6D2A, 0x8D5F, 0x6D69, 0x8D60, 0x6E2F, 0x8D61, 0x6E9D, 0x8D62, 0x7532, 0x8D63, 0x7687, 0x8D64, 0x786C, + 0x8D65, 0x7A3F, 0x8D66, 0x7CE0, 0x8D67, 0x7D05, 0x8D68, 0x7D18, 0x8D69, 0x7D5E, 0x8D6A, 0x7DB1, 0x8D6B, 0x8015, 0x8D6C, 0x8003, + 0x8D6D, 0x80AF, 0x8D6E, 0x80B1, 0x8D6F, 0x8154, 0x8D70, 0x818F, 0x8D71, 0x822A, 0x8D72, 0x8352, 0x8D73, 0x884C, 0x8D74, 0x8861, + 0x8D75, 0x8B1B, 0x8D76, 0x8CA2, 0x8D77, 0x8CFC, 0x8D78, 0x90CA, 0x8D79, 0x9175, 0x8D7A, 0x9271, 0x8D7B, 0x783F, 0x8D7C, 0x92FC, + 0x8D7D, 0x95A4, 0x8D7E, 0x964D, 0x8D80, 0x9805, 0x8D81, 0x9999, 0x8D82, 0x9AD8, 0x8D83, 0x9D3B, 0x8D84, 0x525B, 0x8D85, 0x52AB, + 0x8D86, 0x53F7, 0x8D87, 0x5408, 0x8D88, 0x58D5, 0x8D89, 0x62F7, 0x8D8A, 0x6FE0, 0x8D8B, 0x8C6A, 0x8D8C, 0x8F5F, 0x8D8D, 0x9EB9, + 0x8D8E, 0x514B, 0x8D8F, 0x523B, 0x8D90, 0x544A, 0x8D91, 0x56FD, 0x8D92, 0x7A40, 0x8D93, 0x9177, 0x8D94, 0x9D60, 0x8D95, 0x9ED2, + 0x8D96, 0x7344, 0x8D97, 0x6F09, 0x8D98, 0x8170, 0x8D99, 0x7511, 0x8D9A, 0x5FFD, 0x8D9B, 0x60DA, 0x8D9C, 0x9AA8, 0x8D9D, 0x72DB, + 0x8D9E, 0x8FBC, 0x8D9F, 0x6B64, 0x8DA0, 0x9803, 0x8DA1, 0x4ECA, 0x8DA2, 0x56F0, 0x8DA3, 0x5764, 0x8DA4, 0x58BE, 0x8DA5, 0x5A5A, + 0x8DA6, 0x6068, 0x8DA7, 0x61C7, 0x8DA8, 0x660F, 0x8DA9, 0x6606, 0x8DAA, 0x6839, 0x8DAB, 0x68B1, 0x8DAC, 0x6DF7, 0x8DAD, 0x75D5, + 0x8DAE, 0x7D3A, 0x8DAF, 0x826E, 0x8DB0, 0x9B42, 0x8DB1, 0x4E9B, 0x8DB2, 0x4F50, 0x8DB3, 0x53C9, 0x8DB4, 0x5506, 0x8DB5, 0x5D6F, + 0x8DB6, 0x5DE6, 0x8DB7, 0x5DEE, 0x8DB8, 0x67FB, 0x8DB9, 0x6C99, 0x8DBA, 0x7473, 0x8DBB, 0x7802, 0x8DBC, 0x8A50, 0x8DBD, 0x9396, + 0x8DBE, 0x88DF, 0x8DBF, 0x5750, 0x8DC0, 0x5EA7, 0x8DC1, 0x632B, 0x8DC2, 0x50B5, 0x8DC3, 0x50AC, 0x8DC4, 0x518D, 0x8DC5, 0x6700, + 0x8DC6, 0x54C9, 0x8DC7, 0x585E, 0x8DC8, 0x59BB, 0x8DC9, 0x5BB0, 0x8DCA, 0x5F69, 0x8DCB, 0x624D, 0x8DCC, 0x63A1, 0x8DCD, 0x683D, + 0x8DCE, 0x6B73, 0x8DCF, 0x6E08, 0x8DD0, 0x707D, 0x8DD1, 0x91C7, 0x8DD2, 0x7280, 0x8DD3, 0x7815, 0x8DD4, 0x7826, 0x8DD5, 0x796D, + 0x8DD6, 0x658E, 0x8DD7, 0x7D30, 0x8DD8, 0x83DC, 0x8DD9, 0x88C1, 0x8DDA, 0x8F09, 0x8DDB, 0x969B, 0x8DDC, 0x5264, 0x8DDD, 0x5728, + 0x8DDE, 0x6750, 0x8DDF, 0x7F6A, 0x8DE0, 0x8CA1, 0x8DE1, 0x51B4, 0x8DE2, 0x5742, 0x8DE3, 0x962A, 0x8DE4, 0x583A, 0x8DE5, 0x698A, + 0x8DE6, 0x80B4, 0x8DE7, 0x54B2, 0x8DE8, 0x5D0E, 0x8DE9, 0x57FC, 0x8DEA, 0x7895, 0x8DEB, 0x9DFA, 0x8DEC, 0x4F5C, 0x8DED, 0x524A, + 0x8DEE, 0x548B, 0x8DEF, 0x643E, 0x8DF0, 0x6628, 0x8DF1, 0x6714, 0x8DF2, 0x67F5, 0x8DF3, 0x7A84, 0x8DF4, 0x7B56, 0x8DF5, 0x7D22, + 0x8DF6, 0x932F, 0x8DF7, 0x685C, 0x8DF8, 0x9BAD, 0x8DF9, 0x7B39, 0x8DFA, 0x5319, 0x8DFB, 0x518A, 0x8DFC, 0x5237, 0x8E40, 0x5BDF, + 0x8E41, 0x62F6, 0x8E42, 0x64AE, 0x8E43, 0x64E6, 0x8E44, 0x672D, 0x8E45, 0x6BBA, 0x8E46, 0x85A9, 0x8E47, 0x96D1, 0x8E48, 0x7690, + 0x8E49, 0x9BD6, 0x8E4A, 0x634C, 0x8E4B, 0x9306, 0x8E4C, 0x9BAB, 0x8E4D, 0x76BF, 0x8E4E, 0x6652, 0x8E4F, 0x4E09, 0x8E50, 0x5098, + 0x8E51, 0x53C2, 0x8E52, 0x5C71, 0x8E53, 0x60E8, 0x8E54, 0x6492, 0x8E55, 0x6563, 0x8E56, 0x685F, 0x8E57, 0x71E6, 0x8E58, 0x73CA, + 0x8E59, 0x7523, 0x8E5A, 0x7B97, 0x8E5B, 0x7E82, 0x8E5C, 0x8695, 0x8E5D, 0x8B83, 0x8E5E, 0x8CDB, 0x8E5F, 0x9178, 0x8E60, 0x9910, + 0x8E61, 0x65AC, 0x8E62, 0x66AB, 0x8E63, 0x6B8B, 0x8E64, 0x4ED5, 0x8E65, 0x4ED4, 0x8E66, 0x4F3A, 0x8E67, 0x4F7F, 0x8E68, 0x523A, + 0x8E69, 0x53F8, 0x8E6A, 0x53F2, 0x8E6B, 0x55E3, 0x8E6C, 0x56DB, 0x8E6D, 0x58EB, 0x8E6E, 0x59CB, 0x8E6F, 0x59C9, 0x8E70, 0x59FF, + 0x8E71, 0x5B50, 0x8E72, 0x5C4D, 0x8E73, 0x5E02, 0x8E74, 0x5E2B, 0x8E75, 0x5FD7, 0x8E76, 0x601D, 0x8E77, 0x6307, 0x8E78, 0x652F, + 0x8E79, 0x5B5C, 0x8E7A, 0x65AF, 0x8E7B, 0x65BD, 0x8E7C, 0x65E8, 0x8E7D, 0x679D, 0x8E7E, 0x6B62, 0x8E80, 0x6B7B, 0x8E81, 0x6C0F, + 0x8E82, 0x7345, 0x8E83, 0x7949, 0x8E84, 0x79C1, 0x8E85, 0x7CF8, 0x8E86, 0x7D19, 0x8E87, 0x7D2B, 0x8E88, 0x80A2, 0x8E89, 0x8102, + 0x8E8A, 0x81F3, 0x8E8B, 0x8996, 0x8E8C, 0x8A5E, 0x8E8D, 0x8A69, 0x8E8E, 0x8A66, 0x8E8F, 0x8A8C, 0x8E90, 0x8AEE, 0x8E91, 0x8CC7, + 0x8E92, 0x8CDC, 0x8E93, 0x96CC, 0x8E94, 0x98FC, 0x8E95, 0x6B6F, 0x8E96, 0x4E8B, 0x8E97, 0x4F3C, 0x8E98, 0x4F8D, 0x8E99, 0x5150, + 0x8E9A, 0x5B57, 0x8E9B, 0x5BFA, 0x8E9C, 0x6148, 0x8E9D, 0x6301, 0x8E9E, 0x6642, 0x8E9F, 0x6B21, 0x8EA0, 0x6ECB, 0x8EA1, 0x6CBB, + 0x8EA2, 0x723E, 0x8EA3, 0x74BD, 0x8EA4, 0x75D4, 0x8EA5, 0x78C1, 0x8EA6, 0x793A, 0x8EA7, 0x800C, 0x8EA8, 0x8033, 0x8EA9, 0x81EA, + 0x8EAA, 0x8494, 0x8EAB, 0x8F9E, 0x8EAC, 0x6C50, 0x8EAD, 0x9E7F, 0x8EAE, 0x5F0F, 0x8EAF, 0x8B58, 0x8EB0, 0x9D2B, 0x8EB1, 0x7AFA, + 0x8EB2, 0x8EF8, 0x8EB3, 0x5B8D, 0x8EB4, 0x96EB, 0x8EB5, 0x4E03, 0x8EB6, 0x53F1, 0x8EB7, 0x57F7, 0x8EB8, 0x5931, 0x8EB9, 0x5AC9, + 0x8EBA, 0x5BA4, 0x8EBB, 0x6089, 0x8EBC, 0x6E7F, 0x8EBD, 0x6F06, 0x8EBE, 0x75BE, 0x8EBF, 0x8CEA, 0x8EC0, 0x5B9F, 0x8EC1, 0x8500, + 0x8EC2, 0x7BE0, 0x8EC3, 0x5072, 0x8EC4, 0x67F4, 0x8EC5, 0x829D, 0x8EC6, 0x5C61, 0x8EC7, 0x854A, 0x8EC8, 0x7E1E, 0x8EC9, 0x820E, + 0x8ECA, 0x5199, 0x8ECB, 0x5C04, 0x8ECC, 0x6368, 0x8ECD, 0x8D66, 0x8ECE, 0x659C, 0x8ECF, 0x716E, 0x8ED0, 0x793E, 0x8ED1, 0x7D17, + 0x8ED2, 0x8005, 0x8ED3, 0x8B1D, 0x8ED4, 0x8ECA, 0x8ED5, 0x906E, 0x8ED6, 0x86C7, 0x8ED7, 0x90AA, 0x8ED8, 0x501F, 0x8ED9, 0x52FA, + 0x8EDA, 0x5C3A, 0x8EDB, 0x6753, 0x8EDC, 0x707C, 0x8EDD, 0x7235, 0x8EDE, 0x914C, 0x8EDF, 0x91C8, 0x8EE0, 0x932B, 0x8EE1, 0x82E5, + 0x8EE2, 0x5BC2, 0x8EE3, 0x5F31, 0x8EE4, 0x60F9, 0x8EE5, 0x4E3B, 0x8EE6, 0x53D6, 0x8EE7, 0x5B88, 0x8EE8, 0x624B, 0x8EE9, 0x6731, + 0x8EEA, 0x6B8A, 0x8EEB, 0x72E9, 0x8EEC, 0x73E0, 0x8EED, 0x7A2E, 0x8EEE, 0x816B, 0x8EEF, 0x8DA3, 0x8EF0, 0x9152, 0x8EF1, 0x9996, + 0x8EF2, 0x5112, 0x8EF3, 0x53D7, 0x8EF4, 0x546A, 0x8EF5, 0x5BFF, 0x8EF6, 0x6388, 0x8EF7, 0x6A39, 0x8EF8, 0x7DAC, 0x8EF9, 0x9700, + 0x8EFA, 0x56DA, 0x8EFB, 0x53CE, 0x8EFC, 0x5468, 0x8F40, 0x5B97, 0x8F41, 0x5C31, 0x8F42, 0x5DDE, 0x8F43, 0x4FEE, 0x8F44, 0x6101, + 0x8F45, 0x62FE, 0x8F46, 0x6D32, 0x8F47, 0x79C0, 0x8F48, 0x79CB, 0x8F49, 0x7D42, 0x8F4A, 0x7E4D, 0x8F4B, 0x7FD2, 0x8F4C, 0x81ED, + 0x8F4D, 0x821F, 0x8F4E, 0x8490, 0x8F4F, 0x8846, 0x8F50, 0x8972, 0x8F51, 0x8B90, 0x8F52, 0x8E74, 0x8F53, 0x8F2F, 0x8F54, 0x9031, + 0x8F55, 0x914B, 0x8F56, 0x916C, 0x8F57, 0x96C6, 0x8F58, 0x919C, 0x8F59, 0x4EC0, 0x8F5A, 0x4F4F, 0x8F5B, 0x5145, 0x8F5C, 0x5341, + 0x8F5D, 0x5F93, 0x8F5E, 0x620E, 0x8F5F, 0x67D4, 0x8F60, 0x6C41, 0x8F61, 0x6E0B, 0x8F62, 0x7363, 0x8F63, 0x7E26, 0x8F64, 0x91CD, + 0x8F65, 0x9283, 0x8F66, 0x53D4, 0x8F67, 0x5919, 0x8F68, 0x5BBF, 0x8F69, 0x6DD1, 0x8F6A, 0x795D, 0x8F6B, 0x7E2E, 0x8F6C, 0x7C9B, + 0x8F6D, 0x587E, 0x8F6E, 0x719F, 0x8F6F, 0x51FA, 0x8F70, 0x8853, 0x8F71, 0x8FF0, 0x8F72, 0x4FCA, 0x8F73, 0x5CFB, 0x8F74, 0x6625, + 0x8F75, 0x77AC, 0x8F76, 0x7AE3, 0x8F77, 0x821C, 0x8F78, 0x99FF, 0x8F79, 0x51C6, 0x8F7A, 0x5FAA, 0x8F7B, 0x65EC, 0x8F7C, 0x696F, + 0x8F7D, 0x6B89, 0x8F7E, 0x6DF3, 0x8F80, 0x6E96, 0x8F81, 0x6F64, 0x8F82, 0x76FE, 0x8F83, 0x7D14, 0x8F84, 0x5DE1, 0x8F85, 0x9075, + 0x8F86, 0x9187, 0x8F87, 0x9806, 0x8F88, 0x51E6, 0x8F89, 0x521D, 0x8F8A, 0x6240, 0x8F8B, 0x6691, 0x8F8C, 0x66D9, 0x8F8D, 0x6E1A, + 0x8F8E, 0x5EB6, 0x8F8F, 0x7DD2, 0x8F90, 0x7F72, 0x8F91, 0x66F8, 0x8F92, 0x85AF, 0x8F93, 0x85F7, 0x8F94, 0x8AF8, 0x8F95, 0x52A9, + 0x8F96, 0x53D9, 0x8F97, 0x5973, 0x8F98, 0x5E8F, 0x8F99, 0x5F90, 0x8F9A, 0x6055, 0x8F9B, 0x92E4, 0x8F9C, 0x9664, 0x8F9D, 0x50B7, + 0x8F9E, 0x511F, 0x8F9F, 0x52DD, 0x8FA0, 0x5320, 0x8FA1, 0x5347, 0x8FA2, 0x53EC, 0x8FA3, 0x54E8, 0x8FA4, 0x5546, 0x8FA5, 0x5531, + 0x8FA6, 0x5617, 0x8FA7, 0x5968, 0x8FA8, 0x59BE, 0x8FA9, 0x5A3C, 0x8FAA, 0x5BB5, 0x8FAB, 0x5C06, 0x8FAC, 0x5C0F, 0x8FAD, 0x5C11, + 0x8FAE, 0x5C1A, 0x8FAF, 0x5E84, 0x8FB0, 0x5E8A, 0x8FB1, 0x5EE0, 0x8FB2, 0x5F70, 0x8FB3, 0x627F, 0x8FB4, 0x6284, 0x8FB5, 0x62DB, + 0x8FB6, 0x638C, 0x8FB7, 0x6377, 0x8FB8, 0x6607, 0x8FB9, 0x660C, 0x8FBA, 0x662D, 0x8FBB, 0x6676, 0x8FBC, 0x677E, 0x8FBD, 0x68A2, + 0x8FBE, 0x6A1F, 0x8FBF, 0x6A35, 0x8FC0, 0x6CBC, 0x8FC1, 0x6D88, 0x8FC2, 0x6E09, 0x8FC3, 0x6E58, 0x8FC4, 0x713C, 0x8FC5, 0x7126, + 0x8FC6, 0x7167, 0x8FC7, 0x75C7, 0x8FC8, 0x7701, 0x8FC9, 0x785D, 0x8FCA, 0x7901, 0x8FCB, 0x7965, 0x8FCC, 0x79F0, 0x8FCD, 0x7AE0, + 0x8FCE, 0x7B11, 0x8FCF, 0x7CA7, 0x8FD0, 0x7D39, 0x8FD1, 0x8096, 0x8FD2, 0x83D6, 0x8FD3, 0x848B, 0x8FD4, 0x8549, 0x8FD5, 0x885D, + 0x8FD6, 0x88F3, 0x8FD7, 0x8A1F, 0x8FD8, 0x8A3C, 0x8FD9, 0x8A54, 0x8FDA, 0x8A73, 0x8FDB, 0x8C61, 0x8FDC, 0x8CDE, 0x8FDD, 0x91A4, + 0x8FDE, 0x9266, 0x8FDF, 0x937E, 0x8FE0, 0x9418, 0x8FE1, 0x969C, 0x8FE2, 0x9798, 0x8FE3, 0x4E0A, 0x8FE4, 0x4E08, 0x8FE5, 0x4E1E, + 0x8FE6, 0x4E57, 0x8FE7, 0x5197, 0x8FE8, 0x5270, 0x8FE9, 0x57CE, 0x8FEA, 0x5834, 0x8FEB, 0x58CC, 0x8FEC, 0x5B22, 0x8FED, 0x5E38, + 0x8FEE, 0x60C5, 0x8FEF, 0x64FE, 0x8FF0, 0x6761, 0x8FF1, 0x6756, 0x8FF2, 0x6D44, 0x8FF3, 0x72B6, 0x8FF4, 0x7573, 0x8FF5, 0x7A63, + 0x8FF6, 0x84B8, 0x8FF7, 0x8B72, 0x8FF8, 0x91B8, 0x8FF9, 0x9320, 0x8FFA, 0x5631, 0x8FFB, 0x57F4, 0x8FFC, 0x98FE, 0x9040, 0x62ED, + 0x9041, 0x690D, 0x9042, 0x6B96, 0x9043, 0x71ED, 0x9044, 0x7E54, 0x9045, 0x8077, 0x9046, 0x8272, 0x9047, 0x89E6, 0x9048, 0x98DF, + 0x9049, 0x8755, 0x904A, 0x8FB1, 0x904B, 0x5C3B, 0x904C, 0x4F38, 0x904D, 0x4FE1, 0x904E, 0x4FB5, 0x904F, 0x5507, 0x9050, 0x5A20, + 0x9051, 0x5BDD, 0x9052, 0x5BE9, 0x9053, 0x5FC3, 0x9054, 0x614E, 0x9055, 0x632F, 0x9056, 0x65B0, 0x9057, 0x664B, 0x9058, 0x68EE, + 0x9059, 0x699B, 0x905A, 0x6D78, 0x905B, 0x6DF1, 0x905C, 0x7533, 0x905D, 0x75B9, 0x905E, 0x771F, 0x905F, 0x795E, 0x9060, 0x79E6, + 0x9061, 0x7D33, 0x9062, 0x81E3, 0x9063, 0x82AF, 0x9064, 0x85AA, 0x9065, 0x89AA, 0x9066, 0x8A3A, 0x9067, 0x8EAB, 0x9068, 0x8F9B, + 0x9069, 0x9032, 0x906A, 0x91DD, 0x906B, 0x9707, 0x906C, 0x4EBA, 0x906D, 0x4EC1, 0x906E, 0x5203, 0x906F, 0x5875, 0x9070, 0x58EC, + 0x9071, 0x5C0B, 0x9072, 0x751A, 0x9073, 0x5C3D, 0x9074, 0x814E, 0x9075, 0x8A0A, 0x9076, 0x8FC5, 0x9077, 0x9663, 0x9078, 0x976D, + 0x9079, 0x7B25, 0x907A, 0x8ACF, 0x907B, 0x9808, 0x907C, 0x9162, 0x907D, 0x56F3, 0x907E, 0x53A8, 0x9080, 0x9017, 0x9081, 0x5439, + 0x9082, 0x5782, 0x9083, 0x5E25, 0x9084, 0x63A8, 0x9085, 0x6C34, 0x9086, 0x708A, 0x9087, 0x7761, 0x9088, 0x7C8B, 0x9089, 0x7FE0, + 0x908A, 0x8870, 0x908B, 0x9042, 0x908C, 0x9154, 0x908D, 0x9310, 0x908E, 0x9318, 0x908F, 0x968F, 0x9090, 0x745E, 0x9091, 0x9AC4, + 0x9092, 0x5D07, 0x9093, 0x5D69, 0x9094, 0x6570, 0x9095, 0x67A2, 0x9096, 0x8DA8, 0x9097, 0x96DB, 0x9098, 0x636E, 0x9099, 0x6749, + 0x909A, 0x6919, 0x909B, 0x83C5, 0x909C, 0x9817, 0x909D, 0x96C0, 0x909E, 0x88FE, 0x909F, 0x6F84, 0x90A0, 0x647A, 0x90A1, 0x5BF8, + 0x90A2, 0x4E16, 0x90A3, 0x702C, 0x90A4, 0x755D, 0x90A5, 0x662F, 0x90A6, 0x51C4, 0x90A7, 0x5236, 0x90A8, 0x52E2, 0x90A9, 0x59D3, + 0x90AA, 0x5F81, 0x90AB, 0x6027, 0x90AC, 0x6210, 0x90AD, 0x653F, 0x90AE, 0x6574, 0x90AF, 0x661F, 0x90B0, 0x6674, 0x90B1, 0x68F2, + 0x90B2, 0x6816, 0x90B3, 0x6B63, 0x90B4, 0x6E05, 0x90B5, 0x7272, 0x90B6, 0x751F, 0x90B7, 0x76DB, 0x90B8, 0x7CBE, 0x90B9, 0x8056, + 0x90BA, 0x58F0, 0x90BB, 0x88FD, 0x90BC, 0x897F, 0x90BD, 0x8AA0, 0x90BE, 0x8A93, 0x90BF, 0x8ACB, 0x90C0, 0x901D, 0x90C1, 0x9192, + 0x90C2, 0x9752, 0x90C3, 0x9759, 0x90C4, 0x6589, 0x90C5, 0x7A0E, 0x90C6, 0x8106, 0x90C7, 0x96BB, 0x90C8, 0x5E2D, 0x90C9, 0x60DC, + 0x90CA, 0x621A, 0x90CB, 0x65A5, 0x90CC, 0x6614, 0x90CD, 0x6790, 0x90CE, 0x77F3, 0x90CF, 0x7A4D, 0x90D0, 0x7C4D, 0x90D1, 0x7E3E, + 0x90D2, 0x810A, 0x90D3, 0x8CAC, 0x90D4, 0x8D64, 0x90D5, 0x8DE1, 0x90D6, 0x8E5F, 0x90D7, 0x78A9, 0x90D8, 0x5207, 0x90D9, 0x62D9, + 0x90DA, 0x63A5, 0x90DB, 0x6442, 0x90DC, 0x6298, 0x90DD, 0x8A2D, 0x90DE, 0x7A83, 0x90DF, 0x7BC0, 0x90E0, 0x8AAC, 0x90E1, 0x96EA, + 0x90E2, 0x7D76, 0x90E3, 0x820C, 0x90E4, 0x8749, 0x90E5, 0x4ED9, 0x90E6, 0x5148, 0x90E7, 0x5343, 0x90E8, 0x5360, 0x90E9, 0x5BA3, + 0x90EA, 0x5C02, 0x90EB, 0x5C16, 0x90EC, 0x5DDD, 0x90ED, 0x6226, 0x90EE, 0x6247, 0x90EF, 0x64B0, 0x90F0, 0x6813, 0x90F1, 0x6834, + 0x90F2, 0x6CC9, 0x90F3, 0x6D45, 0x90F4, 0x6D17, 0x90F5, 0x67D3, 0x90F6, 0x6F5C, 0x90F7, 0x714E, 0x90F8, 0x717D, 0x90F9, 0x65CB, + 0x90FA, 0x7A7F, 0x90FB, 0x7BAD, 0x90FC, 0x7DDA, 0x9140, 0x7E4A, 0x9141, 0x7FA8, 0x9142, 0x817A, 0x9143, 0x821B, 0x9144, 0x8239, + 0x9145, 0x85A6, 0x9146, 0x8A6E, 0x9147, 0x8CCE, 0x9148, 0x8DF5, 0x9149, 0x9078, 0x914A, 0x9077, 0x914B, 0x92AD, 0x914C, 0x9291, + 0x914D, 0x9583, 0x914E, 0x9BAE, 0x914F, 0x524D, 0x9150, 0x5584, 0x9151, 0x6F38, 0x9152, 0x7136, 0x9153, 0x5168, 0x9154, 0x7985, + 0x9155, 0x7E55, 0x9156, 0x81B3, 0x9157, 0x7CCE, 0x9158, 0x564C, 0x9159, 0x5851, 0x915A, 0x5CA8, 0x915B, 0x63AA, 0x915C, 0x66FE, + 0x915D, 0x66FD, 0x915E, 0x695A, 0x915F, 0x72D9, 0x9160, 0x758F, 0x9161, 0x758E, 0x9162, 0x790E, 0x9163, 0x7956, 0x9164, 0x79DF, + 0x9165, 0x7C97, 0x9166, 0x7D20, 0x9167, 0x7D44, 0x9168, 0x8607, 0x9169, 0x8A34, 0x916A, 0x963B, 0x916B, 0x9061, 0x916C, 0x9F20, + 0x916D, 0x50E7, 0x916E, 0x5275, 0x916F, 0x53CC, 0x9170, 0x53E2, 0x9171, 0x5009, 0x9172, 0x55AA, 0x9173, 0x58EE, 0x9174, 0x594F, + 0x9175, 0x723D, 0x9176, 0x5B8B, 0x9177, 0x5C64, 0x9178, 0x531D, 0x9179, 0x60E3, 0x917A, 0x60F3, 0x917B, 0x635C, 0x917C, 0x6383, + 0x917D, 0x633F, 0x917E, 0x63BB, 0x9180, 0x64CD, 0x9181, 0x65E9, 0x9182, 0x66F9, 0x9183, 0x5DE3, 0x9184, 0x69CD, 0x9185, 0x69FD, + 0x9186, 0x6F15, 0x9187, 0x71E5, 0x9188, 0x4E89, 0x9189, 0x75E9, 0x918A, 0x76F8, 0x918B, 0x7A93, 0x918C, 0x7CDF, 0x918D, 0x7DCF, + 0x918E, 0x7D9C, 0x918F, 0x8061, 0x9190, 0x8349, 0x9191, 0x8358, 0x9192, 0x846C, 0x9193, 0x84BC, 0x9194, 0x85FB, 0x9195, 0x88C5, + 0x9196, 0x8D70, 0x9197, 0x9001, 0x9198, 0x906D, 0x9199, 0x9397, 0x919A, 0x971C, 0x919B, 0x9A12, 0x919C, 0x50CF, 0x919D, 0x5897, + 0x919E, 0x618E, 0x919F, 0x81D3, 0x91A0, 0x8535, 0x91A1, 0x8D08, 0x91A2, 0x9020, 0x91A3, 0x4FC3, 0x91A4, 0x5074, 0x91A5, 0x5247, + 0x91A6, 0x5373, 0x91A7, 0x606F, 0x91A8, 0x6349, 0x91A9, 0x675F, 0x91AA, 0x6E2C, 0x91AB, 0x8DB3, 0x91AC, 0x901F, 0x91AD, 0x4FD7, + 0x91AE, 0x5C5E, 0x91AF, 0x8CCA, 0x91B0, 0x65CF, 0x91B1, 0x7D9A, 0x91B2, 0x5352, 0x91B3, 0x8896, 0x91B4, 0x5176, 0x91B5, 0x63C3, + 0x91B6, 0x5B58, 0x91B7, 0x5B6B, 0x91B8, 0x5C0A, 0x91B9, 0x640D, 0x91BA, 0x6751, 0x91BB, 0x905C, 0x91BC, 0x4ED6, 0x91BD, 0x591A, + 0x91BE, 0x592A, 0x91BF, 0x6C70, 0x91C0, 0x8A51, 0x91C1, 0x553E, 0x91C2, 0x5815, 0x91C3, 0x59A5, 0x91C4, 0x60F0, 0x91C5, 0x6253, + 0x91C6, 0x67C1, 0x91C7, 0x8235, 0x91C8, 0x6955, 0x91C9, 0x9640, 0x91CA, 0x99C4, 0x91CB, 0x9A28, 0x91CC, 0x4F53, 0x91CD, 0x5806, + 0x91CE, 0x5BFE, 0x91CF, 0x8010, 0x91D0, 0x5CB1, 0x91D1, 0x5E2F, 0x91D2, 0x5F85, 0x91D3, 0x6020, 0x91D4, 0x614B, 0x91D5, 0x6234, + 0x91D6, 0x66FF, 0x91D7, 0x6CF0, 0x91D8, 0x6EDE, 0x91D9, 0x80CE, 0x91DA, 0x817F, 0x91DB, 0x82D4, 0x91DC, 0x888B, 0x91DD, 0x8CB8, + 0x91DE, 0x9000, 0x91DF, 0x902E, 0x91E0, 0x968A, 0x91E1, 0x9EDB, 0x91E2, 0x9BDB, 0x91E3, 0x4EE3, 0x91E4, 0x53F0, 0x91E5, 0x5927, + 0x91E6, 0x7B2C, 0x91E7, 0x918D, 0x91E8, 0x984C, 0x91E9, 0x9DF9, 0x91EA, 0x6EDD, 0x91EB, 0x7027, 0x91EC, 0x5353, 0x91ED, 0x5544, + 0x91EE, 0x5B85, 0x91EF, 0x6258, 0x91F0, 0x629E, 0x91F1, 0x62D3, 0x91F2, 0x6CA2, 0x91F3, 0x6FEF, 0x91F4, 0x7422, 0x91F5, 0x8A17, + 0x91F6, 0x9438, 0x91F7, 0x6FC1, 0x91F8, 0x8AFE, 0x91F9, 0x8338, 0x91FA, 0x51E7, 0x91FB, 0x86F8, 0x91FC, 0x53EA, 0x9240, 0x53E9, + 0x9241, 0x4F46, 0x9242, 0x9054, 0x9243, 0x8FB0, 0x9244, 0x596A, 0x9245, 0x8131, 0x9246, 0x5DFD, 0x9247, 0x7AEA, 0x9248, 0x8FBF, + 0x9249, 0x68DA, 0x924A, 0x8C37, 0x924B, 0x72F8, 0x924C, 0x9C48, 0x924D, 0x6A3D, 0x924E, 0x8AB0, 0x924F, 0x4E39, 0x9250, 0x5358, + 0x9251, 0x5606, 0x9252, 0x5766, 0x9253, 0x62C5, 0x9254, 0x63A2, 0x9255, 0x65E6, 0x9256, 0x6B4E, 0x9257, 0x6DE1, 0x9258, 0x6E5B, + 0x9259, 0x70AD, 0x925A, 0x77ED, 0x925B, 0x7AEF, 0x925C, 0x7BAA, 0x925D, 0x7DBB, 0x925E, 0x803D, 0x925F, 0x80C6, 0x9260, 0x86CB, + 0x9261, 0x8A95, 0x9262, 0x935B, 0x9263, 0x56E3, 0x9264, 0x58C7, 0x9265, 0x5F3E, 0x9266, 0x65AD, 0x9267, 0x6696, 0x9268, 0x6A80, + 0x9269, 0x6BB5, 0x926A, 0x7537, 0x926B, 0x8AC7, 0x926C, 0x5024, 0x926D, 0x77E5, 0x926E, 0x5730, 0x926F, 0x5F1B, 0x9270, 0x6065, + 0x9271, 0x667A, 0x9272, 0x6C60, 0x9273, 0x75F4, 0x9274, 0x7A1A, 0x9275, 0x7F6E, 0x9276, 0x81F4, 0x9277, 0x8718, 0x9278, 0x9045, + 0x9279, 0x99B3, 0x927A, 0x7BC9, 0x927B, 0x755C, 0x927C, 0x7AF9, 0x927D, 0x7B51, 0x927E, 0x84C4, 0x9280, 0x9010, 0x9281, 0x79E9, + 0x9282, 0x7A92, 0x9283, 0x8336, 0x9284, 0x5AE1, 0x9285, 0x7740, 0x9286, 0x4E2D, 0x9287, 0x4EF2, 0x9288, 0x5B99, 0x9289, 0x5FE0, + 0x928A, 0x62BD, 0x928B, 0x663C, 0x928C, 0x67F1, 0x928D, 0x6CE8, 0x928E, 0x866B, 0x928F, 0x8877, 0x9290, 0x8A3B, 0x9291, 0x914E, + 0x9292, 0x92F3, 0x9293, 0x99D0, 0x9294, 0x6A17, 0x9295, 0x7026, 0x9296, 0x732A, 0x9297, 0x82E7, 0x9298, 0x8457, 0x9299, 0x8CAF, + 0x929A, 0x4E01, 0x929B, 0x5146, 0x929C, 0x51CB, 0x929D, 0x558B, 0x929E, 0x5BF5, 0x929F, 0x5E16, 0x92A0, 0x5E33, 0x92A1, 0x5E81, + 0x92A2, 0x5F14, 0x92A3, 0x5F35, 0x92A4, 0x5F6B, 0x92A5, 0x5FB4, 0x92A6, 0x61F2, 0x92A7, 0x6311, 0x92A8, 0x66A2, 0x92A9, 0x671D, + 0x92AA, 0x6F6E, 0x92AB, 0x7252, 0x92AC, 0x753A, 0x92AD, 0x773A, 0x92AE, 0x8074, 0x92AF, 0x8139, 0x92B0, 0x8178, 0x92B1, 0x8776, + 0x92B2, 0x8ABF, 0x92B3, 0x8ADC, 0x92B4, 0x8D85, 0x92B5, 0x8DF3, 0x92B6, 0x929A, 0x92B7, 0x9577, 0x92B8, 0x9802, 0x92B9, 0x9CE5, + 0x92BA, 0x52C5, 0x92BB, 0x6357, 0x92BC, 0x76F4, 0x92BD, 0x6715, 0x92BE, 0x6C88, 0x92BF, 0x73CD, 0x92C0, 0x8CC3, 0x92C1, 0x93AE, + 0x92C2, 0x9673, 0x92C3, 0x6D25, 0x92C4, 0x589C, 0x92C5, 0x690E, 0x92C6, 0x69CC, 0x92C7, 0x8FFD, 0x92C8, 0x939A, 0x92C9, 0x75DB, + 0x92CA, 0x901A, 0x92CB, 0x585A, 0x92CC, 0x6802, 0x92CD, 0x63B4, 0x92CE, 0x69FB, 0x92CF, 0x4F43, 0x92D0, 0x6F2C, 0x92D1, 0x67D8, + 0x92D2, 0x8FBB, 0x92D3, 0x8526, 0x92D4, 0x7DB4, 0x92D5, 0x9354, 0x92D6, 0x693F, 0x92D7, 0x6F70, 0x92D8, 0x576A, 0x92D9, 0x58F7, + 0x92DA, 0x5B2C, 0x92DB, 0x7D2C, 0x92DC, 0x722A, 0x92DD, 0x540A, 0x92DE, 0x91E3, 0x92DF, 0x9DB4, 0x92E0, 0x4EAD, 0x92E1, 0x4F4E, + 0x92E2, 0x505C, 0x92E3, 0x5075, 0x92E4, 0x5243, 0x92E5, 0x8C9E, 0x92E6, 0x5448, 0x92E7, 0x5824, 0x92E8, 0x5B9A, 0x92E9, 0x5E1D, + 0x92EA, 0x5E95, 0x92EB, 0x5EAD, 0x92EC, 0x5EF7, 0x92ED, 0x5F1F, 0x92EE, 0x608C, 0x92EF, 0x62B5, 0x92F0, 0x633A, 0x92F1, 0x63D0, + 0x92F2, 0x68AF, 0x92F3, 0x6C40, 0x92F4, 0x7887, 0x92F5, 0x798E, 0x92F6, 0x7A0B, 0x92F7, 0x7DE0, 0x92F8, 0x8247, 0x92F9, 0x8A02, + 0x92FA, 0x8AE6, 0x92FB, 0x8E44, 0x92FC, 0x9013, 0x9340, 0x90B8, 0x9341, 0x912D, 0x9342, 0x91D8, 0x9343, 0x9F0E, 0x9344, 0x6CE5, + 0x9345, 0x6458, 0x9346, 0x64E2, 0x9347, 0x6575, 0x9348, 0x6EF4, 0x9349, 0x7684, 0x934A, 0x7B1B, 0x934B, 0x9069, 0x934C, 0x93D1, + 0x934D, 0x6EBA, 0x934E, 0x54F2, 0x934F, 0x5FB9, 0x9350, 0x64A4, 0x9351, 0x8F4D, 0x9352, 0x8FED, 0x9353, 0x9244, 0x9354, 0x5178, + 0x9355, 0x586B, 0x9356, 0x5929, 0x9357, 0x5C55, 0x9358, 0x5E97, 0x9359, 0x6DFB, 0x935A, 0x7E8F, 0x935B, 0x751C, 0x935C, 0x8CBC, + 0x935D, 0x8EE2, 0x935E, 0x985B, 0x935F, 0x70B9, 0x9360, 0x4F1D, 0x9361, 0x6BBF, 0x9362, 0x6FB1, 0x9363, 0x7530, 0x9364, 0x96FB, + 0x9365, 0x514E, 0x9366, 0x5410, 0x9367, 0x5835, 0x9368, 0x5857, 0x9369, 0x59AC, 0x936A, 0x5C60, 0x936B, 0x5F92, 0x936C, 0x6597, + 0x936D, 0x675C, 0x936E, 0x6E21, 0x936F, 0x767B, 0x9370, 0x83DF, 0x9371, 0x8CED, 0x9372, 0x9014, 0x9373, 0x90FD, 0x9374, 0x934D, + 0x9375, 0x7825, 0x9376, 0x783A, 0x9377, 0x52AA, 0x9378, 0x5EA6, 0x9379, 0x571F, 0x937A, 0x5974, 0x937B, 0x6012, 0x937C, 0x5012, + 0x937D, 0x515A, 0x937E, 0x51AC, 0x9380, 0x51CD, 0x9381, 0x5200, 0x9382, 0x5510, 0x9383, 0x5854, 0x9384, 0x5858, 0x9385, 0x5957, + 0x9386, 0x5B95, 0x9387, 0x5CF6, 0x9388, 0x5D8B, 0x9389, 0x60BC, 0x938A, 0x6295, 0x938B, 0x642D, 0x938C, 0x6771, 0x938D, 0x6843, + 0x938E, 0x68BC, 0x938F, 0x68DF, 0x9390, 0x76D7, 0x9391, 0x6DD8, 0x9392, 0x6E6F, 0x9393, 0x6D9B, 0x9394, 0x706F, 0x9395, 0x71C8, + 0x9396, 0x5F53, 0x9397, 0x75D8, 0x9398, 0x7977, 0x9399, 0x7B49, 0x939A, 0x7B54, 0x939B, 0x7B52, 0x939C, 0x7CD6, 0x939D, 0x7D71, + 0x939E, 0x5230, 0x939F, 0x8463, 0x93A0, 0x8569, 0x93A1, 0x85E4, 0x93A2, 0x8A0E, 0x93A3, 0x8B04, 0x93A4, 0x8C46, 0x93A5, 0x8E0F, + 0x93A6, 0x9003, 0x93A7, 0x900F, 0x93A8, 0x9419, 0x93A9, 0x9676, 0x93AA, 0x982D, 0x93AB, 0x9A30, 0x93AC, 0x95D8, 0x93AD, 0x50CD, + 0x93AE, 0x52D5, 0x93AF, 0x540C, 0x93B0, 0x5802, 0x93B1, 0x5C0E, 0x93B2, 0x61A7, 0x93B3, 0x649E, 0x93B4, 0x6D1E, 0x93B5, 0x77B3, + 0x93B6, 0x7AE5, 0x93B7, 0x80F4, 0x93B8, 0x8404, 0x93B9, 0x9053, 0x93BA, 0x9285, 0x93BB, 0x5CE0, 0x93BC, 0x9D07, 0x93BD, 0x533F, + 0x93BE, 0x5F97, 0x93BF, 0x5FB3, 0x93C0, 0x6D9C, 0x93C1, 0x7279, 0x93C2, 0x7763, 0x93C3, 0x79BF, 0x93C4, 0x7BE4, 0x93C5, 0x6BD2, + 0x93C6, 0x72EC, 0x93C7, 0x8AAD, 0x93C8, 0x6803, 0x93C9, 0x6A61, 0x93CA, 0x51F8, 0x93CB, 0x7A81, 0x93CC, 0x6934, 0x93CD, 0x5C4A, + 0x93CE, 0x9CF6, 0x93CF, 0x82EB, 0x93D0, 0x5BC5, 0x93D1, 0x9149, 0x93D2, 0x701E, 0x93D3, 0x5678, 0x93D4, 0x5C6F, 0x93D5, 0x60C7, + 0x93D6, 0x6566, 0x93D7, 0x6C8C, 0x93D8, 0x8C5A, 0x93D9, 0x9041, 0x93DA, 0x9813, 0x93DB, 0x5451, 0x93DC, 0x66C7, 0x93DD, 0x920D, + 0x93DE, 0x5948, 0x93DF, 0x90A3, 0x93E0, 0x5185, 0x93E1, 0x4E4D, 0x93E2, 0x51EA, 0x93E3, 0x8599, 0x93E4, 0x8B0E, 0x93E5, 0x7058, + 0x93E6, 0x637A, 0x93E7, 0x934B, 0x93E8, 0x6962, 0x93E9, 0x99B4, 0x93EA, 0x7E04, 0x93EB, 0x7577, 0x93EC, 0x5357, 0x93ED, 0x6960, + 0x93EE, 0x8EDF, 0x93EF, 0x96E3, 0x93F0, 0x6C5D, 0x93F1, 0x4E8C, 0x93F2, 0x5C3C, 0x93F3, 0x5F10, 0x93F4, 0x8FE9, 0x93F5, 0x5302, + 0x93F6, 0x8CD1, 0x93F7, 0x8089, 0x93F8, 0x8679, 0x93F9, 0x5EFF, 0x93FA, 0x65E5, 0x93FB, 0x4E73, 0x93FC, 0x5165, 0x9440, 0x5982, + 0x9441, 0x5C3F, 0x9442, 0x97EE, 0x9443, 0x4EFB, 0x9444, 0x598A, 0x9445, 0x5FCD, 0x9446, 0x8A8D, 0x9447, 0x6FE1, 0x9448, 0x79B0, + 0x9449, 0x7962, 0x944A, 0x5BE7, 0x944B, 0x8471, 0x944C, 0x732B, 0x944D, 0x71B1, 0x944E, 0x5E74, 0x944F, 0x5FF5, 0x9450, 0x637B, + 0x9451, 0x649A, 0x9452, 0x71C3, 0x9453, 0x7C98, 0x9454, 0x4E43, 0x9455, 0x5EFC, 0x9456, 0x4E4B, 0x9457, 0x57DC, 0x9458, 0x56A2, + 0x9459, 0x60A9, 0x945A, 0x6FC3, 0x945B, 0x7D0D, 0x945C, 0x80FD, 0x945D, 0x8133, 0x945E, 0x81BF, 0x945F, 0x8FB2, 0x9460, 0x8997, + 0x9461, 0x86A4, 0x9462, 0x5DF4, 0x9463, 0x628A, 0x9464, 0x64AD, 0x9465, 0x8987, 0x9466, 0x6777, 0x9467, 0x6CE2, 0x9468, 0x6D3E, + 0x9469, 0x7436, 0x946A, 0x7834, 0x946B, 0x5A46, 0x946C, 0x7F75, 0x946D, 0x82AD, 0x946E, 0x99AC, 0x946F, 0x4FF3, 0x9470, 0x5EC3, + 0x9471, 0x62DD, 0x9472, 0x6392, 0x9473, 0x6557, 0x9474, 0x676F, 0x9475, 0x76C3, 0x9476, 0x724C, 0x9477, 0x80CC, 0x9478, 0x80BA, + 0x9479, 0x8F29, 0x947A, 0x914D, 0x947B, 0x500D, 0x947C, 0x57F9, 0x947D, 0x5A92, 0x947E, 0x6885, 0x9480, 0x6973, 0x9481, 0x7164, + 0x9482, 0x72FD, 0x9483, 0x8CB7, 0x9484, 0x58F2, 0x9485, 0x8CE0, 0x9486, 0x966A, 0x9487, 0x9019, 0x9488, 0x877F, 0x9489, 0x79E4, + 0x948A, 0x77E7, 0x948B, 0x8429, 0x948C, 0x4F2F, 0x948D, 0x5265, 0x948E, 0x535A, 0x948F, 0x62CD, 0x9490, 0x67CF, 0x9491, 0x6CCA, + 0x9492, 0x767D, 0x9493, 0x7B94, 0x9494, 0x7C95, 0x9495, 0x8236, 0x9496, 0x8584, 0x9497, 0x8FEB, 0x9498, 0x66DD, 0x9499, 0x6F20, + 0x949A, 0x7206, 0x949B, 0x7E1B, 0x949C, 0x83AB, 0x949D, 0x99C1, 0x949E, 0x9EA6, 0x949F, 0x51FD, 0x94A0, 0x7BB1, 0x94A1, 0x7872, + 0x94A2, 0x7BB8, 0x94A3, 0x8087, 0x94A4, 0x7B48, 0x94A5, 0x6AE8, 0x94A6, 0x5E61, 0x94A7, 0x808C, 0x94A8, 0x7551, 0x94A9, 0x7560, + 0x94AA, 0x516B, 0x94AB, 0x9262, 0x94AC, 0x6E8C, 0x94AD, 0x767A, 0x94AE, 0x9197, 0x94AF, 0x9AEA, 0x94B0, 0x4F10, 0x94B1, 0x7F70, + 0x94B2, 0x629C, 0x94B3, 0x7B4F, 0x94B4, 0x95A5, 0x94B5, 0x9CE9, 0x94B6, 0x567A, 0x94B7, 0x5859, 0x94B8, 0x86E4, 0x94B9, 0x96BC, + 0x94BA, 0x4F34, 0x94BB, 0x5224, 0x94BC, 0x534A, 0x94BD, 0x53CD, 0x94BE, 0x53DB, 0x94BF, 0x5E06, 0x94C0, 0x642C, 0x94C1, 0x6591, + 0x94C2, 0x677F, 0x94C3, 0x6C3E, 0x94C4, 0x6C4E, 0x94C5, 0x7248, 0x94C6, 0x72AF, 0x94C7, 0x73ED, 0x94C8, 0x7554, 0x94C9, 0x7E41, + 0x94CA, 0x822C, 0x94CB, 0x85E9, 0x94CC, 0x8CA9, 0x94CD, 0x7BC4, 0x94CE, 0x91C6, 0x94CF, 0x7169, 0x94D0, 0x9812, 0x94D1, 0x98EF, + 0x94D2, 0x633D, 0x94D3, 0x6669, 0x94D4, 0x756A, 0x94D5, 0x76E4, 0x94D6, 0x78D0, 0x94D7, 0x8543, 0x94D8, 0x86EE, 0x94D9, 0x532A, + 0x94DA, 0x5351, 0x94DB, 0x5426, 0x94DC, 0x5983, 0x94DD, 0x5E87, 0x94DE, 0x5F7C, 0x94DF, 0x60B2, 0x94E0, 0x6249, 0x94E1, 0x6279, + 0x94E2, 0x62AB, 0x94E3, 0x6590, 0x94E4, 0x6BD4, 0x94E5, 0x6CCC, 0x94E6, 0x75B2, 0x94E7, 0x76AE, 0x94E8, 0x7891, 0x94E9, 0x79D8, + 0x94EA, 0x7DCB, 0x94EB, 0x7F77, 0x94EC, 0x80A5, 0x94ED, 0x88AB, 0x94EE, 0x8AB9, 0x94EF, 0x8CBB, 0x94F0, 0x907F, 0x94F1, 0x975E, + 0x94F2, 0x98DB, 0x94F3, 0x6A0B, 0x94F4, 0x7C38, 0x94F5, 0x5099, 0x94F6, 0x5C3E, 0x94F7, 0x5FAE, 0x94F8, 0x6787, 0x94F9, 0x6BD8, + 0x94FA, 0x7435, 0x94FB, 0x7709, 0x94FC, 0x7F8E, 0x9540, 0x9F3B, 0x9541, 0x67CA, 0x9542, 0x7A17, 0x9543, 0x5339, 0x9544, 0x758B, + 0x9545, 0x9AED, 0x9546, 0x5F66, 0x9547, 0x819D, 0x9548, 0x83F1, 0x9549, 0x8098, 0x954A, 0x5F3C, 0x954B, 0x5FC5, 0x954C, 0x7562, + 0x954D, 0x7B46, 0x954E, 0x903C, 0x954F, 0x6867, 0x9550, 0x59EB, 0x9551, 0x5A9B, 0x9552, 0x7D10, 0x9553, 0x767E, 0x9554, 0x8B2C, + 0x9555, 0x4FF5, 0x9556, 0x5F6A, 0x9557, 0x6A19, 0x9558, 0x6C37, 0x9559, 0x6F02, 0x955A, 0x74E2, 0x955B, 0x7968, 0x955C, 0x8868, + 0x955D, 0x8A55, 0x955E, 0x8C79, 0x955F, 0x5EDF, 0x9560, 0x63CF, 0x9561, 0x75C5, 0x9562, 0x79D2, 0x9563, 0x82D7, 0x9564, 0x9328, + 0x9565, 0x92F2, 0x9566, 0x849C, 0x9567, 0x86ED, 0x9568, 0x9C2D, 0x9569, 0x54C1, 0x956A, 0x5F6C, 0x956B, 0x658C, 0x956C, 0x6D5C, + 0x956D, 0x7015, 0x956E, 0x8CA7, 0x956F, 0x8CD3, 0x9570, 0x983B, 0x9571, 0x654F, 0x9572, 0x74F6, 0x9573, 0x4E0D, 0x9574, 0x4ED8, + 0x9575, 0x57E0, 0x9576, 0x592B, 0x9577, 0x5A66, 0x9578, 0x5BCC, 0x9579, 0x51A8, 0x957A, 0x5E03, 0x957B, 0x5E9C, 0x957C, 0x6016, + 0x957D, 0x6276, 0x957E, 0x6577, 0x9580, 0x65A7, 0x9581, 0x666E, 0x9582, 0x6D6E, 0x9583, 0x7236, 0x9584, 0x7B26, 0x9585, 0x8150, + 0x9586, 0x819A, 0x9587, 0x8299, 0x9588, 0x8B5C, 0x9589, 0x8CA0, 0x958A, 0x8CE6, 0x958B, 0x8D74, 0x958C, 0x961C, 0x958D, 0x9644, + 0x958E, 0x4FAE, 0x958F, 0x64AB, 0x9590, 0x6B66, 0x9591, 0x821E, 0x9592, 0x8461, 0x9593, 0x856A, 0x9594, 0x90E8, 0x9595, 0x5C01, + 0x9596, 0x6953, 0x9597, 0x98A8, 0x9598, 0x847A, 0x9599, 0x8557, 0x959A, 0x4F0F, 0x959B, 0x526F, 0x959C, 0x5FA9, 0x959D, 0x5E45, + 0x959E, 0x670D, 0x959F, 0x798F, 0x95A0, 0x8179, 0x95A1, 0x8907, 0x95A2, 0x8986, 0x95A3, 0x6DF5, 0x95A4, 0x5F17, 0x95A5, 0x6255, + 0x95A6, 0x6CB8, 0x95A7, 0x4ECF, 0x95A8, 0x7269, 0x95A9, 0x9B92, 0x95AA, 0x5206, 0x95AB, 0x543B, 0x95AC, 0x5674, 0x95AD, 0x58B3, + 0x95AE, 0x61A4, 0x95AF, 0x626E, 0x95B0, 0x711A, 0x95B1, 0x596E, 0x95B2, 0x7C89, 0x95B3, 0x7CDE, 0x95B4, 0x7D1B, 0x95B5, 0x96F0, + 0x95B6, 0x6587, 0x95B7, 0x805E, 0x95B8, 0x4E19, 0x95B9, 0x4F75, 0x95BA, 0x5175, 0x95BB, 0x5840, 0x95BC, 0x5E63, 0x95BD, 0x5E73, + 0x95BE, 0x5F0A, 0x95BF, 0x67C4, 0x95C0, 0x4E26, 0x95C1, 0x853D, 0x95C2, 0x9589, 0x95C3, 0x965B, 0x95C4, 0x7C73, 0x95C5, 0x9801, + 0x95C6, 0x50FB, 0x95C7, 0x58C1, 0x95C8, 0x7656, 0x95C9, 0x78A7, 0x95CA, 0x5225, 0x95CB, 0x77A5, 0x95CC, 0x8511, 0x95CD, 0x7B86, + 0x95CE, 0x504F, 0x95CF, 0x5909, 0x95D0, 0x7247, 0x95D1, 0x7BC7, 0x95D2, 0x7DE8, 0x95D3, 0x8FBA, 0x95D4, 0x8FD4, 0x95D5, 0x904D, + 0x95D6, 0x4FBF, 0x95D7, 0x52C9, 0x95D8, 0x5A29, 0x95D9, 0x5F01, 0x95DA, 0x97AD, 0x95DB, 0x4FDD, 0x95DC, 0x8217, 0x95DD, 0x92EA, + 0x95DE, 0x5703, 0x95DF, 0x6355, 0x95E0, 0x6B69, 0x95E1, 0x752B, 0x95E2, 0x88DC, 0x95E3, 0x8F14, 0x95E4, 0x7A42, 0x95E5, 0x52DF, + 0x95E6, 0x5893, 0x95E7, 0x6155, 0x95E8, 0x620A, 0x95E9, 0x66AE, 0x95EA, 0x6BCD, 0x95EB, 0x7C3F, 0x95EC, 0x83E9, 0x95ED, 0x5023, + 0x95EE, 0x4FF8, 0x95EF, 0x5305, 0x95F0, 0x5446, 0x95F1, 0x5831, 0x95F2, 0x5949, 0x95F3, 0x5B9D, 0x95F4, 0x5CF0, 0x95F5, 0x5CEF, + 0x95F6, 0x5D29, 0x95F7, 0x5E96, 0x95F8, 0x62B1, 0x95F9, 0x6367, 0x95FA, 0x653E, 0x95FB, 0x65B9, 0x95FC, 0x670B, 0x9640, 0x6CD5, + 0x9641, 0x6CE1, 0x9642, 0x70F9, 0x9643, 0x7832, 0x9644, 0x7E2B, 0x9645, 0x80DE, 0x9646, 0x82B3, 0x9647, 0x840C, 0x9648, 0x84EC, + 0x9649, 0x8702, 0x964A, 0x8912, 0x964B, 0x8A2A, 0x964C, 0x8C4A, 0x964D, 0x90A6, 0x964E, 0x92D2, 0x964F, 0x98FD, 0x9650, 0x9CF3, + 0x9651, 0x9D6C, 0x9652, 0x4E4F, 0x9653, 0x4EA1, 0x9654, 0x508D, 0x9655, 0x5256, 0x9656, 0x574A, 0x9657, 0x59A8, 0x9658, 0x5E3D, + 0x9659, 0x5FD8, 0x965A, 0x5FD9, 0x965B, 0x623F, 0x965C, 0x66B4, 0x965D, 0x671B, 0x965E, 0x67D0, 0x965F, 0x68D2, 0x9660, 0x5192, + 0x9661, 0x7D21, 0x9662, 0x80AA, 0x9663, 0x81A8, 0x9664, 0x8B00, 0x9665, 0x8C8C, 0x9666, 0x8CBF, 0x9667, 0x927E, 0x9668, 0x9632, + 0x9669, 0x5420, 0x966A, 0x982C, 0x966B, 0x5317, 0x966C, 0x50D5, 0x966D, 0x535C, 0x966E, 0x58A8, 0x966F, 0x64B2, 0x9670, 0x6734, + 0x9671, 0x7267, 0x9672, 0x7766, 0x9673, 0x7A46, 0x9674, 0x91E6, 0x9675, 0x52C3, 0x9676, 0x6CA1, 0x9677, 0x6B86, 0x9678, 0x5800, + 0x9679, 0x5E4C, 0x967A, 0x5954, 0x967B, 0x672C, 0x967C, 0x7FFB, 0x967D, 0x51E1, 0x967E, 0x76C6, 0x9680, 0x6469, 0x9681, 0x78E8, + 0x9682, 0x9B54, 0x9683, 0x9EBB, 0x9684, 0x57CB, 0x9685, 0x59B9, 0x9686, 0x6627, 0x9687, 0x679A, 0x9688, 0x6BCE, 0x9689, 0x54E9, + 0x968A, 0x69D9, 0x968B, 0x5E55, 0x968C, 0x819C, 0x968D, 0x6795, 0x968E, 0x9BAA, 0x968F, 0x67FE, 0x9690, 0x9C52, 0x9691, 0x685D, + 0x9692, 0x4EA6, 0x9693, 0x4FE3, 0x9694, 0x53C8, 0x9695, 0x62B9, 0x9696, 0x672B, 0x9697, 0x6CAB, 0x9698, 0x8FC4, 0x9699, 0x4FAD, + 0x969A, 0x7E6D, 0x969B, 0x9EBF, 0x969C, 0x4E07, 0x969D, 0x6162, 0x969E, 0x6E80, 0x969F, 0x6F2B, 0x96A0, 0x8513, 0x96A1, 0x5473, + 0x96A2, 0x672A, 0x96A3, 0x9B45, 0x96A4, 0x5DF3, 0x96A5, 0x7B95, 0x96A6, 0x5CAC, 0x96A7, 0x5BC6, 0x96A8, 0x871C, 0x96A9, 0x6E4A, + 0x96AA, 0x84D1, 0x96AB, 0x7A14, 0x96AC, 0x8108, 0x96AD, 0x5999, 0x96AE, 0x7C8D, 0x96AF, 0x6C11, 0x96B0, 0x7720, 0x96B1, 0x52D9, + 0x96B2, 0x5922, 0x96B3, 0x7121, 0x96B4, 0x725F, 0x96B5, 0x77DB, 0x96B6, 0x9727, 0x96B7, 0x9D61, 0x96B8, 0x690B, 0x96B9, 0x5A7F, + 0x96BA, 0x5A18, 0x96BB, 0x51A5, 0x96BC, 0x540D, 0x96BD, 0x547D, 0x96BE, 0x660E, 0x96BF, 0x76DF, 0x96C0, 0x8FF7, 0x96C1, 0x9298, + 0x96C2, 0x9CF4, 0x96C3, 0x59EA, 0x96C4, 0x725D, 0x96C5, 0x6EC5, 0x96C6, 0x514D, 0x96C7, 0x68C9, 0x96C8, 0x7DBF, 0x96C9, 0x7DEC, + 0x96CA, 0x9762, 0x96CB, 0x9EBA, 0x96CC, 0x6478, 0x96CD, 0x6A21, 0x96CE, 0x8302, 0x96CF, 0x5984, 0x96D0, 0x5B5F, 0x96D1, 0x6BDB, + 0x96D2, 0x731B, 0x96D3, 0x76F2, 0x96D4, 0x7DB2, 0x96D5, 0x8017, 0x96D6, 0x8499, 0x96D7, 0x5132, 0x96D8, 0x6728, 0x96D9, 0x9ED9, + 0x96DA, 0x76EE, 0x96DB, 0x6762, 0x96DC, 0x52FF, 0x96DD, 0x9905, 0x96DE, 0x5C24, 0x96DF, 0x623B, 0x96E0, 0x7C7E, 0x96E1, 0x8CB0, + 0x96E2, 0x554F, 0x96E3, 0x60B6, 0x96E4, 0x7D0B, 0x96E5, 0x9580, 0x96E6, 0x5301, 0x96E7, 0x4E5F, 0x96E8, 0x51B6, 0x96E9, 0x591C, + 0x96EA, 0x723A, 0x96EB, 0x8036, 0x96EC, 0x91CE, 0x96ED, 0x5F25, 0x96EE, 0x77E2, 0x96EF, 0x5384, 0x96F0, 0x5F79, 0x96F1, 0x7D04, + 0x96F2, 0x85AC, 0x96F3, 0x8A33, 0x96F4, 0x8E8D, 0x96F5, 0x9756, 0x96F6, 0x67F3, 0x96F7, 0x85AE, 0x96F8, 0x9453, 0x96F9, 0x6109, + 0x96FA, 0x6108, 0x96FB, 0x6CB9, 0x96FC, 0x7652, 0x9740, 0x8AED, 0x9741, 0x8F38, 0x9742, 0x552F, 0x9743, 0x4F51, 0x9744, 0x512A, + 0x9745, 0x52C7, 0x9746, 0x53CB, 0x9747, 0x5BA5, 0x9748, 0x5E7D, 0x9749, 0x60A0, 0x974A, 0x6182, 0x974B, 0x63D6, 0x974C, 0x6709, + 0x974D, 0x67DA, 0x974E, 0x6E67, 0x974F, 0x6D8C, 0x9750, 0x7336, 0x9751, 0x7337, 0x9752, 0x7531, 0x9753, 0x7950, 0x9754, 0x88D5, + 0x9755, 0x8A98, 0x9756, 0x904A, 0x9757, 0x9091, 0x9758, 0x90F5, 0x9759, 0x96C4, 0x975A, 0x878D, 0x975B, 0x5915, 0x975C, 0x4E88, + 0x975D, 0x4F59, 0x975E, 0x4E0E, 0x975F, 0x8A89, 0x9760, 0x8F3F, 0x9761, 0x9810, 0x9762, 0x50AD, 0x9763, 0x5E7C, 0x9764, 0x5996, + 0x9765, 0x5BB9, 0x9766, 0x5EB8, 0x9767, 0x63DA, 0x9768, 0x63FA, 0x9769, 0x64C1, 0x976A, 0x66DC, 0x976B, 0x694A, 0x976C, 0x69D8, + 0x976D, 0x6D0B, 0x976E, 0x6EB6, 0x976F, 0x7194, 0x9770, 0x7528, 0x9771, 0x7AAF, 0x9772, 0x7F8A, 0x9773, 0x8000, 0x9774, 0x8449, + 0x9775, 0x84C9, 0x9776, 0x8981, 0x9777, 0x8B21, 0x9778, 0x8E0A, 0x9779, 0x9065, 0x977A, 0x967D, 0x977B, 0x990A, 0x977C, 0x617E, + 0x977D, 0x6291, 0x977E, 0x6B32, 0x9780, 0x6C83, 0x9781, 0x6D74, 0x9782, 0x7FCC, 0x9783, 0x7FFC, 0x9784, 0x6DC0, 0x9785, 0x7F85, + 0x9786, 0x87BA, 0x9787, 0x88F8, 0x9788, 0x6765, 0x9789, 0x83B1, 0x978A, 0x983C, 0x978B, 0x96F7, 0x978C, 0x6D1B, 0x978D, 0x7D61, + 0x978E, 0x843D, 0x978F, 0x916A, 0x9790, 0x4E71, 0x9791, 0x5375, 0x9792, 0x5D50, 0x9793, 0x6B04, 0x9794, 0x6FEB, 0x9795, 0x85CD, + 0x9796, 0x862D, 0x9797, 0x89A7, 0x9798, 0x5229, 0x9799, 0x540F, 0x979A, 0x5C65, 0x979B, 0x674E, 0x979C, 0x68A8, 0x979D, 0x7406, + 0x979E, 0x7483, 0x979F, 0x75E2, 0x97A0, 0x88CF, 0x97A1, 0x88E1, 0x97A2, 0x91CC, 0x97A3, 0x96E2, 0x97A4, 0x9678, 0x97A5, 0x5F8B, + 0x97A6, 0x7387, 0x97A7, 0x7ACB, 0x97A8, 0x844E, 0x97A9, 0x63A0, 0x97AA, 0x7565, 0x97AB, 0x5289, 0x97AC, 0x6D41, 0x97AD, 0x6E9C, + 0x97AE, 0x7409, 0x97AF, 0x7559, 0x97B0, 0x786B, 0x97B1, 0x7C92, 0x97B2, 0x9686, 0x97B3, 0x7ADC, 0x97B4, 0x9F8D, 0x97B5, 0x4FB6, + 0x97B6, 0x616E, 0x97B7, 0x65C5, 0x97B8, 0x865C, 0x97B9, 0x4E86, 0x97BA, 0x4EAE, 0x97BB, 0x50DA, 0x97BC, 0x4E21, 0x97BD, 0x51CC, + 0x97BE, 0x5BEE, 0x97BF, 0x6599, 0x97C0, 0x6881, 0x97C1, 0x6DBC, 0x97C2, 0x731F, 0x97C3, 0x7642, 0x97C4, 0x77AD, 0x97C5, 0x7A1C, + 0x97C6, 0x7CE7, 0x97C7, 0x826F, 0x97C8, 0x8AD2, 0x97C9, 0x907C, 0x97CA, 0x91CF, 0x97CB, 0x9675, 0x97CC, 0x9818, 0x97CD, 0x529B, + 0x97CE, 0x7DD1, 0x97CF, 0x502B, 0x97D0, 0x5398, 0x97D1, 0x6797, 0x97D2, 0x6DCB, 0x97D3, 0x71D0, 0x97D4, 0x7433, 0x97D5, 0x81E8, + 0x97D6, 0x8F2A, 0x97D7, 0x96A3, 0x97D8, 0x9C57, 0x97D9, 0x9E9F, 0x97DA, 0x7460, 0x97DB, 0x5841, 0x97DC, 0x6D99, 0x97DD, 0x7D2F, + 0x97DE, 0x985E, 0x97DF, 0x4EE4, 0x97E0, 0x4F36, 0x97E1, 0x4F8B, 0x97E2, 0x51B7, 0x97E3, 0x52B1, 0x97E4, 0x5DBA, 0x97E5, 0x601C, + 0x97E6, 0x73B2, 0x97E7, 0x793C, 0x97E8, 0x82D3, 0x97E9, 0x9234, 0x97EA, 0x96B7, 0x97EB, 0x96F6, 0x97EC, 0x970A, 0x97ED, 0x9E97, + 0x97EE, 0x9F62, 0x97EF, 0x66A6, 0x97F0, 0x6B74, 0x97F1, 0x5217, 0x97F2, 0x52A3, 0x97F3, 0x70C8, 0x97F4, 0x88C2, 0x97F5, 0x5EC9, + 0x97F6, 0x604B, 0x97F7, 0x6190, 0x97F8, 0x6F23, 0x97F9, 0x7149, 0x97FA, 0x7C3E, 0x97FB, 0x7DF4, 0x97FC, 0x806F, 0x9840, 0x84EE, + 0x9841, 0x9023, 0x9842, 0x932C, 0x9843, 0x5442, 0x9844, 0x9B6F, 0x9845, 0x6AD3, 0x9846, 0x7089, 0x9847, 0x8CC2, 0x9848, 0x8DEF, + 0x9849, 0x9732, 0x984A, 0x52B4, 0x984B, 0x5A41, 0x984C, 0x5ECA, 0x984D, 0x5F04, 0x984E, 0x6717, 0x984F, 0x697C, 0x9850, 0x6994, + 0x9851, 0x6D6A, 0x9852, 0x6F0F, 0x9853, 0x7262, 0x9854, 0x72FC, 0x9855, 0x7BED, 0x9856, 0x8001, 0x9857, 0x807E, 0x9858, 0x874B, + 0x9859, 0x90CE, 0x985A, 0x516D, 0x985B, 0x9E93, 0x985C, 0x7984, 0x985D, 0x808B, 0x985E, 0x9332, 0x985F, 0x8AD6, 0x9860, 0x502D, + 0x9861, 0x548C, 0x9862, 0x8A71, 0x9863, 0x6B6A, 0x9864, 0x8CC4, 0x9865, 0x8107, 0x9866, 0x60D1, 0x9867, 0x67A0, 0x9868, 0x9DF2, + 0x9869, 0x4E99, 0x986A, 0x4E98, 0x986B, 0x9C10, 0x986C, 0x8A6B, 0x986D, 0x85C1, 0x986E, 0x8568, 0x986F, 0x6900, 0x9870, 0x6E7E, + 0x9871, 0x7897, 0x9872, 0x8155, 0x989F, 0x5F0C, 0x98A0, 0x4E10, 0x98A1, 0x4E15, 0x98A2, 0x4E2A, 0x98A3, 0x4E31, 0x98A4, 0x4E36, + 0x98A5, 0x4E3C, 0x98A6, 0x4E3F, 0x98A7, 0x4E42, 0x98A8, 0x4E56, 0x98A9, 0x4E58, 0x98AA, 0x4E82, 0x98AB, 0x4E85, 0x98AC, 0x8C6B, + 0x98AD, 0x4E8A, 0x98AE, 0x8212, 0x98AF, 0x5F0D, 0x98B0, 0x4E8E, 0x98B1, 0x4E9E, 0x98B2, 0x4E9F, 0x98B3, 0x4EA0, 0x98B4, 0x4EA2, + 0x98B5, 0x4EB0, 0x98B6, 0x4EB3, 0x98B7, 0x4EB6, 0x98B8, 0x4ECE, 0x98B9, 0x4ECD, 0x98BA, 0x4EC4, 0x98BB, 0x4EC6, 0x98BC, 0x4EC2, + 0x98BD, 0x4ED7, 0x98BE, 0x4EDE, 0x98BF, 0x4EED, 0x98C0, 0x4EDF, 0x98C1, 0x4EF7, 0x98C2, 0x4F09, 0x98C3, 0x4F5A, 0x98C4, 0x4F30, + 0x98C5, 0x4F5B, 0x98C6, 0x4F5D, 0x98C7, 0x4F57, 0x98C8, 0x4F47, 0x98C9, 0x4F76, 0x98CA, 0x4F88, 0x98CB, 0x4F8F, 0x98CC, 0x4F98, + 0x98CD, 0x4F7B, 0x98CE, 0x4F69, 0x98CF, 0x4F70, 0x98D0, 0x4F91, 0x98D1, 0x4F6F, 0x98D2, 0x4F86, 0x98D3, 0x4F96, 0x98D4, 0x5118, + 0x98D5, 0x4FD4, 0x98D6, 0x4FDF, 0x98D7, 0x4FCE, 0x98D8, 0x4FD8, 0x98D9, 0x4FDB, 0x98DA, 0x4FD1, 0x98DB, 0x4FDA, 0x98DC, 0x4FD0, + 0x98DD, 0x4FE4, 0x98DE, 0x4FE5, 0x98DF, 0x501A, 0x98E0, 0x5028, 0x98E1, 0x5014, 0x98E2, 0x502A, 0x98E3, 0x5025, 0x98E4, 0x5005, + 0x98E5, 0x4F1C, 0x98E6, 0x4FF6, 0x98E7, 0x5021, 0x98E8, 0x5029, 0x98E9, 0x502C, 0x98EA, 0x4FFE, 0x98EB, 0x4FEF, 0x98EC, 0x5011, + 0x98ED, 0x5006, 0x98EE, 0x5043, 0x98EF, 0x5047, 0x98F0, 0x6703, 0x98F1, 0x5055, 0x98F2, 0x5050, 0x98F3, 0x5048, 0x98F4, 0x505A, + 0x98F5, 0x5056, 0x98F6, 0x506C, 0x98F7, 0x5078, 0x98F8, 0x5080, 0x98F9, 0x509A, 0x98FA, 0x5085, 0x98FB, 0x50B4, 0x98FC, 0x50B2, + 0x9940, 0x50C9, 0x9941, 0x50CA, 0x9942, 0x50B3, 0x9943, 0x50C2, 0x9944, 0x50D6, 0x9945, 0x50DE, 0x9946, 0x50E5, 0x9947, 0x50ED, + 0x9948, 0x50E3, 0x9949, 0x50EE, 0x994A, 0x50F9, 0x994B, 0x50F5, 0x994C, 0x5109, 0x994D, 0x5101, 0x994E, 0x5102, 0x994F, 0x5116, + 0x9950, 0x5115, 0x9951, 0x5114, 0x9952, 0x511A, 0x9953, 0x5121, 0x9954, 0x513A, 0x9955, 0x5137, 0x9956, 0x513C, 0x9957, 0x513B, + 0x9958, 0x513F, 0x9959, 0x5140, 0x995A, 0x5152, 0x995B, 0x514C, 0x995C, 0x5154, 0x995D, 0x5162, 0x995E, 0x7AF8, 0x995F, 0x5169, + 0x9960, 0x516A, 0x9961, 0x516E, 0x9962, 0x5180, 0x9963, 0x5182, 0x9964, 0x56D8, 0x9965, 0x518C, 0x9966, 0x5189, 0x9967, 0x518F, + 0x9968, 0x5191, 0x9969, 0x5193, 0x996A, 0x5195, 0x996B, 0x5196, 0x996C, 0x51A4, 0x996D, 0x51A6, 0x996E, 0x51A2, 0x996F, 0x51A9, + 0x9970, 0x51AA, 0x9971, 0x51AB, 0x9972, 0x51B3, 0x9973, 0x51B1, 0x9974, 0x51B2, 0x9975, 0x51B0, 0x9976, 0x51B5, 0x9977, 0x51BD, + 0x9978, 0x51C5, 0x9979, 0x51C9, 0x997A, 0x51DB, 0x997B, 0x51E0, 0x997C, 0x8655, 0x997D, 0x51E9, 0x997E, 0x51ED, 0x9980, 0x51F0, + 0x9981, 0x51F5, 0x9982, 0x51FE, 0x9983, 0x5204, 0x9984, 0x520B, 0x9985, 0x5214, 0x9986, 0x520E, 0x9987, 0x5227, 0x9988, 0x522A, + 0x9989, 0x522E, 0x998A, 0x5233, 0x998B, 0x5239, 0x998C, 0x524F, 0x998D, 0x5244, 0x998E, 0x524B, 0x998F, 0x524C, 0x9990, 0x525E, + 0x9991, 0x5254, 0x9992, 0x526A, 0x9993, 0x5274, 0x9994, 0x5269, 0x9995, 0x5273, 0x9996, 0x527F, 0x9997, 0x527D, 0x9998, 0x528D, + 0x9999, 0x5294, 0x999A, 0x5292, 0x999B, 0x5271, 0x999C, 0x5288, 0x999D, 0x5291, 0x999E, 0x8FA8, 0x999F, 0x8FA7, 0x99A0, 0x52AC, + 0x99A1, 0x52AD, 0x99A2, 0x52BC, 0x99A3, 0x52B5, 0x99A4, 0x52C1, 0x99A5, 0x52CD, 0x99A6, 0x52D7, 0x99A7, 0x52DE, 0x99A8, 0x52E3, + 0x99A9, 0x52E6, 0x99AA, 0x98ED, 0x99AB, 0x52E0, 0x99AC, 0x52F3, 0x99AD, 0x52F5, 0x99AE, 0x52F8, 0x99AF, 0x52F9, 0x99B0, 0x5306, + 0x99B1, 0x5308, 0x99B2, 0x7538, 0x99B3, 0x530D, 0x99B4, 0x5310, 0x99B5, 0x530F, 0x99B6, 0x5315, 0x99B7, 0x531A, 0x99B8, 0x5323, + 0x99B9, 0x532F, 0x99BA, 0x5331, 0x99BB, 0x5333, 0x99BC, 0x5338, 0x99BD, 0x5340, 0x99BE, 0x5346, 0x99BF, 0x5345, 0x99C0, 0x4E17, + 0x99C1, 0x5349, 0x99C2, 0x534D, 0x99C3, 0x51D6, 0x99C4, 0x535E, 0x99C5, 0x5369, 0x99C6, 0x536E, 0x99C7, 0x5918, 0x99C8, 0x537B, + 0x99C9, 0x5377, 0x99CA, 0x5382, 0x99CB, 0x5396, 0x99CC, 0x53A0, 0x99CD, 0x53A6, 0x99CE, 0x53A5, 0x99CF, 0x53AE, 0x99D0, 0x53B0, + 0x99D1, 0x53B6, 0x99D2, 0x53C3, 0x99D3, 0x7C12, 0x99D4, 0x96D9, 0x99D5, 0x53DF, 0x99D6, 0x66FC, 0x99D7, 0x71EE, 0x99D8, 0x53EE, + 0x99D9, 0x53E8, 0x99DA, 0x53ED, 0x99DB, 0x53FA, 0x99DC, 0x5401, 0x99DD, 0x543D, 0x99DE, 0x5440, 0x99DF, 0x542C, 0x99E0, 0x542D, + 0x99E1, 0x543C, 0x99E2, 0x542E, 0x99E3, 0x5436, 0x99E4, 0x5429, 0x99E5, 0x541D, 0x99E6, 0x544E, 0x99E7, 0x548F, 0x99E8, 0x5475, + 0x99E9, 0x548E, 0x99EA, 0x545F, 0x99EB, 0x5471, 0x99EC, 0x5477, 0x99ED, 0x5470, 0x99EE, 0x5492, 0x99EF, 0x547B, 0x99F0, 0x5480, + 0x99F1, 0x5476, 0x99F2, 0x5484, 0x99F3, 0x5490, 0x99F4, 0x5486, 0x99F5, 0x54C7, 0x99F6, 0x54A2, 0x99F7, 0x54B8, 0x99F8, 0x54A5, + 0x99F9, 0x54AC, 0x99FA, 0x54C4, 0x99FB, 0x54C8, 0x99FC, 0x54A8, 0x9A40, 0x54AB, 0x9A41, 0x54C2, 0x9A42, 0x54A4, 0x9A43, 0x54BE, + 0x9A44, 0x54BC, 0x9A45, 0x54D8, 0x9A46, 0x54E5, 0x9A47, 0x54E6, 0x9A48, 0x550F, 0x9A49, 0x5514, 0x9A4A, 0x54FD, 0x9A4B, 0x54EE, + 0x9A4C, 0x54ED, 0x9A4D, 0x54FA, 0x9A4E, 0x54E2, 0x9A4F, 0x5539, 0x9A50, 0x5540, 0x9A51, 0x5563, 0x9A52, 0x554C, 0x9A53, 0x552E, + 0x9A54, 0x555C, 0x9A55, 0x5545, 0x9A56, 0x5556, 0x9A57, 0x5557, 0x9A58, 0x5538, 0x9A59, 0x5533, 0x9A5A, 0x555D, 0x9A5B, 0x5599, + 0x9A5C, 0x5580, 0x9A5D, 0x54AF, 0x9A5E, 0x558A, 0x9A5F, 0x559F, 0x9A60, 0x557B, 0x9A61, 0x557E, 0x9A62, 0x5598, 0x9A63, 0x559E, + 0x9A64, 0x55AE, 0x9A65, 0x557C, 0x9A66, 0x5583, 0x9A67, 0x55A9, 0x9A68, 0x5587, 0x9A69, 0x55A8, 0x9A6A, 0x55DA, 0x9A6B, 0x55C5, + 0x9A6C, 0x55DF, 0x9A6D, 0x55C4, 0x9A6E, 0x55DC, 0x9A6F, 0x55E4, 0x9A70, 0x55D4, 0x9A71, 0x5614, 0x9A72, 0x55F7, 0x9A73, 0x5616, + 0x9A74, 0x55FE, 0x9A75, 0x55FD, 0x9A76, 0x561B, 0x9A77, 0x55F9, 0x9A78, 0x564E, 0x9A79, 0x5650, 0x9A7A, 0x71DF, 0x9A7B, 0x5634, + 0x9A7C, 0x5636, 0x9A7D, 0x5632, 0x9A7E, 0x5638, 0x9A80, 0x566B, 0x9A81, 0x5664, 0x9A82, 0x562F, 0x9A83, 0x566C, 0x9A84, 0x566A, + 0x9A85, 0x5686, 0x9A86, 0x5680, 0x9A87, 0x568A, 0x9A88, 0x56A0, 0x9A89, 0x5694, 0x9A8A, 0x568F, 0x9A8B, 0x56A5, 0x9A8C, 0x56AE, + 0x9A8D, 0x56B6, 0x9A8E, 0x56B4, 0x9A8F, 0x56C2, 0x9A90, 0x56BC, 0x9A91, 0x56C1, 0x9A92, 0x56C3, 0x9A93, 0x56C0, 0x9A94, 0x56C8, + 0x9A95, 0x56CE, 0x9A96, 0x56D1, 0x9A97, 0x56D3, 0x9A98, 0x56D7, 0x9A99, 0x56EE, 0x9A9A, 0x56F9, 0x9A9B, 0x5700, 0x9A9C, 0x56FF, + 0x9A9D, 0x5704, 0x9A9E, 0x5709, 0x9A9F, 0x5708, 0x9AA0, 0x570B, 0x9AA1, 0x570D, 0x9AA2, 0x5713, 0x9AA3, 0x5718, 0x9AA4, 0x5716, + 0x9AA5, 0x55C7, 0x9AA6, 0x571C, 0x9AA7, 0x5726, 0x9AA8, 0x5737, 0x9AA9, 0x5738, 0x9AAA, 0x574E, 0x9AAB, 0x573B, 0x9AAC, 0x5740, + 0x9AAD, 0x574F, 0x9AAE, 0x5769, 0x9AAF, 0x57C0, 0x9AB0, 0x5788, 0x9AB1, 0x5761, 0x9AB2, 0x577F, 0x9AB3, 0x5789, 0x9AB4, 0x5793, + 0x9AB5, 0x57A0, 0x9AB6, 0x57B3, 0x9AB7, 0x57A4, 0x9AB8, 0x57AA, 0x9AB9, 0x57B0, 0x9ABA, 0x57C3, 0x9ABB, 0x57C6, 0x9ABC, 0x57D4, + 0x9ABD, 0x57D2, 0x9ABE, 0x57D3, 0x9ABF, 0x580A, 0x9AC0, 0x57D6, 0x9AC1, 0x57E3, 0x9AC2, 0x580B, 0x9AC3, 0x5819, 0x9AC4, 0x581D, + 0x9AC5, 0x5872, 0x9AC6, 0x5821, 0x9AC7, 0x5862, 0x9AC8, 0x584B, 0x9AC9, 0x5870, 0x9ACA, 0x6BC0, 0x9ACB, 0x5852, 0x9ACC, 0x583D, + 0x9ACD, 0x5879, 0x9ACE, 0x5885, 0x9ACF, 0x58B9, 0x9AD0, 0x589F, 0x9AD1, 0x58AB, 0x9AD2, 0x58BA, 0x9AD3, 0x58DE, 0x9AD4, 0x58BB, + 0x9AD5, 0x58B8, 0x9AD6, 0x58AE, 0x9AD7, 0x58C5, 0x9AD8, 0x58D3, 0x9AD9, 0x58D1, 0x9ADA, 0x58D7, 0x9ADB, 0x58D9, 0x9ADC, 0x58D8, + 0x9ADD, 0x58E5, 0x9ADE, 0x58DC, 0x9ADF, 0x58E4, 0x9AE0, 0x58DF, 0x9AE1, 0x58EF, 0x9AE2, 0x58FA, 0x9AE3, 0x58F9, 0x9AE4, 0x58FB, + 0x9AE5, 0x58FC, 0x9AE6, 0x58FD, 0x9AE7, 0x5902, 0x9AE8, 0x590A, 0x9AE9, 0x5910, 0x9AEA, 0x591B, 0x9AEB, 0x68A6, 0x9AEC, 0x5925, + 0x9AED, 0x592C, 0x9AEE, 0x592D, 0x9AEF, 0x5932, 0x9AF0, 0x5938, 0x9AF1, 0x593E, 0x9AF2, 0x7AD2, 0x9AF3, 0x5955, 0x9AF4, 0x5950, + 0x9AF5, 0x594E, 0x9AF6, 0x595A, 0x9AF7, 0x5958, 0x9AF8, 0x5962, 0x9AF9, 0x5960, 0x9AFA, 0x5967, 0x9AFB, 0x596C, 0x9AFC, 0x5969, + 0x9B40, 0x5978, 0x9B41, 0x5981, 0x9B42, 0x599D, 0x9B43, 0x4F5E, 0x9B44, 0x4FAB, 0x9B45, 0x59A3, 0x9B46, 0x59B2, 0x9B47, 0x59C6, + 0x9B48, 0x59E8, 0x9B49, 0x59DC, 0x9B4A, 0x598D, 0x9B4B, 0x59D9, 0x9B4C, 0x59DA, 0x9B4D, 0x5A25, 0x9B4E, 0x5A1F, 0x9B4F, 0x5A11, + 0x9B50, 0x5A1C, 0x9B51, 0x5A09, 0x9B52, 0x5A1A, 0x9B53, 0x5A40, 0x9B54, 0x5A6C, 0x9B55, 0x5A49, 0x9B56, 0x5A35, 0x9B57, 0x5A36, + 0x9B58, 0x5A62, 0x9B59, 0x5A6A, 0x9B5A, 0x5A9A, 0x9B5B, 0x5ABC, 0x9B5C, 0x5ABE, 0x9B5D, 0x5ACB, 0x9B5E, 0x5AC2, 0x9B5F, 0x5ABD, + 0x9B60, 0x5AE3, 0x9B61, 0x5AD7, 0x9B62, 0x5AE6, 0x9B63, 0x5AE9, 0x9B64, 0x5AD6, 0x9B65, 0x5AFA, 0x9B66, 0x5AFB, 0x9B67, 0x5B0C, + 0x9B68, 0x5B0B, 0x9B69, 0x5B16, 0x9B6A, 0x5B32, 0x9B6B, 0x5AD0, 0x9B6C, 0x5B2A, 0x9B6D, 0x5B36, 0x9B6E, 0x5B3E, 0x9B6F, 0x5B43, + 0x9B70, 0x5B45, 0x9B71, 0x5B40, 0x9B72, 0x5B51, 0x9B73, 0x5B55, 0x9B74, 0x5B5A, 0x9B75, 0x5B5B, 0x9B76, 0x5B65, 0x9B77, 0x5B69, + 0x9B78, 0x5B70, 0x9B79, 0x5B73, 0x9B7A, 0x5B75, 0x9B7B, 0x5B78, 0x9B7C, 0x6588, 0x9B7D, 0x5B7A, 0x9B7E, 0x5B80, 0x9B80, 0x5B83, + 0x9B81, 0x5BA6, 0x9B82, 0x5BB8, 0x9B83, 0x5BC3, 0x9B84, 0x5BC7, 0x9B85, 0x5BC9, 0x9B86, 0x5BD4, 0x9B87, 0x5BD0, 0x9B88, 0x5BE4, + 0x9B89, 0x5BE6, 0x9B8A, 0x5BE2, 0x9B8B, 0x5BDE, 0x9B8C, 0x5BE5, 0x9B8D, 0x5BEB, 0x9B8E, 0x5BF0, 0x9B8F, 0x5BF6, 0x9B90, 0x5BF3, + 0x9B91, 0x5C05, 0x9B92, 0x5C07, 0x9B93, 0x5C08, 0x9B94, 0x5C0D, 0x9B95, 0x5C13, 0x9B96, 0x5C20, 0x9B97, 0x5C22, 0x9B98, 0x5C28, + 0x9B99, 0x5C38, 0x9B9A, 0x5C39, 0x9B9B, 0x5C41, 0x9B9C, 0x5C46, 0x9B9D, 0x5C4E, 0x9B9E, 0x5C53, 0x9B9F, 0x5C50, 0x9BA0, 0x5C4F, + 0x9BA1, 0x5B71, 0x9BA2, 0x5C6C, 0x9BA3, 0x5C6E, 0x9BA4, 0x4E62, 0x9BA5, 0x5C76, 0x9BA6, 0x5C79, 0x9BA7, 0x5C8C, 0x9BA8, 0x5C91, + 0x9BA9, 0x5C94, 0x9BAA, 0x599B, 0x9BAB, 0x5CAB, 0x9BAC, 0x5CBB, 0x9BAD, 0x5CB6, 0x9BAE, 0x5CBC, 0x9BAF, 0x5CB7, 0x9BB0, 0x5CC5, + 0x9BB1, 0x5CBE, 0x9BB2, 0x5CC7, 0x9BB3, 0x5CD9, 0x9BB4, 0x5CE9, 0x9BB5, 0x5CFD, 0x9BB6, 0x5CFA, 0x9BB7, 0x5CED, 0x9BB8, 0x5D8C, + 0x9BB9, 0x5CEA, 0x9BBA, 0x5D0B, 0x9BBB, 0x5D15, 0x9BBC, 0x5D17, 0x9BBD, 0x5D5C, 0x9BBE, 0x5D1F, 0x9BBF, 0x5D1B, 0x9BC0, 0x5D11, + 0x9BC1, 0x5D14, 0x9BC2, 0x5D22, 0x9BC3, 0x5D1A, 0x9BC4, 0x5D19, 0x9BC5, 0x5D18, 0x9BC6, 0x5D4C, 0x9BC7, 0x5D52, 0x9BC8, 0x5D4E, + 0x9BC9, 0x5D4B, 0x9BCA, 0x5D6C, 0x9BCB, 0x5D73, 0x9BCC, 0x5D76, 0x9BCD, 0x5D87, 0x9BCE, 0x5D84, 0x9BCF, 0x5D82, 0x9BD0, 0x5DA2, + 0x9BD1, 0x5D9D, 0x9BD2, 0x5DAC, 0x9BD3, 0x5DAE, 0x9BD4, 0x5DBD, 0x9BD5, 0x5D90, 0x9BD6, 0x5DB7, 0x9BD7, 0x5DBC, 0x9BD8, 0x5DC9, + 0x9BD9, 0x5DCD, 0x9BDA, 0x5DD3, 0x9BDB, 0x5DD2, 0x9BDC, 0x5DD6, 0x9BDD, 0x5DDB, 0x9BDE, 0x5DEB, 0x9BDF, 0x5DF2, 0x9BE0, 0x5DF5, + 0x9BE1, 0x5E0B, 0x9BE2, 0x5E1A, 0x9BE3, 0x5E19, 0x9BE4, 0x5E11, 0x9BE5, 0x5E1B, 0x9BE6, 0x5E36, 0x9BE7, 0x5E37, 0x9BE8, 0x5E44, + 0x9BE9, 0x5E43, 0x9BEA, 0x5E40, 0x9BEB, 0x5E4E, 0x9BEC, 0x5E57, 0x9BED, 0x5E54, 0x9BEE, 0x5E5F, 0x9BEF, 0x5E62, 0x9BF0, 0x5E64, + 0x9BF1, 0x5E47, 0x9BF2, 0x5E75, 0x9BF3, 0x5E76, 0x9BF4, 0x5E7A, 0x9BF5, 0x9EBC, 0x9BF6, 0x5E7F, 0x9BF7, 0x5EA0, 0x9BF8, 0x5EC1, + 0x9BF9, 0x5EC2, 0x9BFA, 0x5EC8, 0x9BFB, 0x5ED0, 0x9BFC, 0x5ECF, 0x9C40, 0x5ED6, 0x9C41, 0x5EE3, 0x9C42, 0x5EDD, 0x9C43, 0x5EDA, + 0x9C44, 0x5EDB, 0x9C45, 0x5EE2, 0x9C46, 0x5EE1, 0x9C47, 0x5EE8, 0x9C48, 0x5EE9, 0x9C49, 0x5EEC, 0x9C4A, 0x5EF1, 0x9C4B, 0x5EF3, + 0x9C4C, 0x5EF0, 0x9C4D, 0x5EF4, 0x9C4E, 0x5EF8, 0x9C4F, 0x5EFE, 0x9C50, 0x5F03, 0x9C51, 0x5F09, 0x9C52, 0x5F5D, 0x9C53, 0x5F5C, + 0x9C54, 0x5F0B, 0x9C55, 0x5F11, 0x9C56, 0x5F16, 0x9C57, 0x5F29, 0x9C58, 0x5F2D, 0x9C59, 0x5F38, 0x9C5A, 0x5F41, 0x9C5B, 0x5F48, + 0x9C5C, 0x5F4C, 0x9C5D, 0x5F4E, 0x9C5E, 0x5F2F, 0x9C5F, 0x5F51, 0x9C60, 0x5F56, 0x9C61, 0x5F57, 0x9C62, 0x5F59, 0x9C63, 0x5F61, + 0x9C64, 0x5F6D, 0x9C65, 0x5F73, 0x9C66, 0x5F77, 0x9C67, 0x5F83, 0x9C68, 0x5F82, 0x9C69, 0x5F7F, 0x9C6A, 0x5F8A, 0x9C6B, 0x5F88, + 0x9C6C, 0x5F91, 0x9C6D, 0x5F87, 0x9C6E, 0x5F9E, 0x9C6F, 0x5F99, 0x9C70, 0x5F98, 0x9C71, 0x5FA0, 0x9C72, 0x5FA8, 0x9C73, 0x5FAD, + 0x9C74, 0x5FBC, 0x9C75, 0x5FD6, 0x9C76, 0x5FFB, 0x9C77, 0x5FE4, 0x9C78, 0x5FF8, 0x9C79, 0x5FF1, 0x9C7A, 0x5FDD, 0x9C7B, 0x60B3, + 0x9C7C, 0x5FFF, 0x9C7D, 0x6021, 0x9C7E, 0x6060, 0x9C80, 0x6019, 0x9C81, 0x6010, 0x9C82, 0x6029, 0x9C83, 0x600E, 0x9C84, 0x6031, + 0x9C85, 0x601B, 0x9C86, 0x6015, 0x9C87, 0x602B, 0x9C88, 0x6026, 0x9C89, 0x600F, 0x9C8A, 0x603A, 0x9C8B, 0x605A, 0x9C8C, 0x6041, + 0x9C8D, 0x606A, 0x9C8E, 0x6077, 0x9C8F, 0x605F, 0x9C90, 0x604A, 0x9C91, 0x6046, 0x9C92, 0x604D, 0x9C93, 0x6063, 0x9C94, 0x6043, + 0x9C95, 0x6064, 0x9C96, 0x6042, 0x9C97, 0x606C, 0x9C98, 0x606B, 0x9C99, 0x6059, 0x9C9A, 0x6081, 0x9C9B, 0x608D, 0x9C9C, 0x60E7, + 0x9C9D, 0x6083, 0x9C9E, 0x609A, 0x9C9F, 0x6084, 0x9CA0, 0x609B, 0x9CA1, 0x6096, 0x9CA2, 0x6097, 0x9CA3, 0x6092, 0x9CA4, 0x60A7, + 0x9CA5, 0x608B, 0x9CA6, 0x60E1, 0x9CA7, 0x60B8, 0x9CA8, 0x60E0, 0x9CA9, 0x60D3, 0x9CAA, 0x60B4, 0x9CAB, 0x5FF0, 0x9CAC, 0x60BD, + 0x9CAD, 0x60C6, 0x9CAE, 0x60B5, 0x9CAF, 0x60D8, 0x9CB0, 0x614D, 0x9CB1, 0x6115, 0x9CB2, 0x6106, 0x9CB3, 0x60F6, 0x9CB4, 0x60F7, + 0x9CB5, 0x6100, 0x9CB6, 0x60F4, 0x9CB7, 0x60FA, 0x9CB8, 0x6103, 0x9CB9, 0x6121, 0x9CBA, 0x60FB, 0x9CBB, 0x60F1, 0x9CBC, 0x610D, + 0x9CBD, 0x610E, 0x9CBE, 0x6147, 0x9CBF, 0x613E, 0x9CC0, 0x6128, 0x9CC1, 0x6127, 0x9CC2, 0x614A, 0x9CC3, 0x613F, 0x9CC4, 0x613C, + 0x9CC5, 0x612C, 0x9CC6, 0x6134, 0x9CC7, 0x613D, 0x9CC8, 0x6142, 0x9CC9, 0x6144, 0x9CCA, 0x6173, 0x9CCB, 0x6177, 0x9CCC, 0x6158, + 0x9CCD, 0x6159, 0x9CCE, 0x615A, 0x9CCF, 0x616B, 0x9CD0, 0x6174, 0x9CD1, 0x616F, 0x9CD2, 0x6165, 0x9CD3, 0x6171, 0x9CD4, 0x615F, + 0x9CD5, 0x615D, 0x9CD6, 0x6153, 0x9CD7, 0x6175, 0x9CD8, 0x6199, 0x9CD9, 0x6196, 0x9CDA, 0x6187, 0x9CDB, 0x61AC, 0x9CDC, 0x6194, + 0x9CDD, 0x619A, 0x9CDE, 0x618A, 0x9CDF, 0x6191, 0x9CE0, 0x61AB, 0x9CE1, 0x61AE, 0x9CE2, 0x61CC, 0x9CE3, 0x61CA, 0x9CE4, 0x61C9, + 0x9CE5, 0x61F7, 0x9CE6, 0x61C8, 0x9CE7, 0x61C3, 0x9CE8, 0x61C6, 0x9CE9, 0x61BA, 0x9CEA, 0x61CB, 0x9CEB, 0x7F79, 0x9CEC, 0x61CD, + 0x9CED, 0x61E6, 0x9CEE, 0x61E3, 0x9CEF, 0x61F6, 0x9CF0, 0x61FA, 0x9CF1, 0x61F4, 0x9CF2, 0x61FF, 0x9CF3, 0x61FD, 0x9CF4, 0x61FC, + 0x9CF5, 0x61FE, 0x9CF6, 0x6200, 0x9CF7, 0x6208, 0x9CF8, 0x6209, 0x9CF9, 0x620D, 0x9CFA, 0x620C, 0x9CFB, 0x6214, 0x9CFC, 0x621B, + 0x9D40, 0x621E, 0x9D41, 0x6221, 0x9D42, 0x622A, 0x9D43, 0x622E, 0x9D44, 0x6230, 0x9D45, 0x6232, 0x9D46, 0x6233, 0x9D47, 0x6241, + 0x9D48, 0x624E, 0x9D49, 0x625E, 0x9D4A, 0x6263, 0x9D4B, 0x625B, 0x9D4C, 0x6260, 0x9D4D, 0x6268, 0x9D4E, 0x627C, 0x9D4F, 0x6282, + 0x9D50, 0x6289, 0x9D51, 0x627E, 0x9D52, 0x6292, 0x9D53, 0x6293, 0x9D54, 0x6296, 0x9D55, 0x62D4, 0x9D56, 0x6283, 0x9D57, 0x6294, + 0x9D58, 0x62D7, 0x9D59, 0x62D1, 0x9D5A, 0x62BB, 0x9D5B, 0x62CF, 0x9D5C, 0x62FF, 0x9D5D, 0x62C6, 0x9D5E, 0x64D4, 0x9D5F, 0x62C8, + 0x9D60, 0x62DC, 0x9D61, 0x62CC, 0x9D62, 0x62CA, 0x9D63, 0x62C2, 0x9D64, 0x62C7, 0x9D65, 0x629B, 0x9D66, 0x62C9, 0x9D67, 0x630C, + 0x9D68, 0x62EE, 0x9D69, 0x62F1, 0x9D6A, 0x6327, 0x9D6B, 0x6302, 0x9D6C, 0x6308, 0x9D6D, 0x62EF, 0x9D6E, 0x62F5, 0x9D6F, 0x6350, + 0x9D70, 0x633E, 0x9D71, 0x634D, 0x9D72, 0x641C, 0x9D73, 0x634F, 0x9D74, 0x6396, 0x9D75, 0x638E, 0x9D76, 0x6380, 0x9D77, 0x63AB, + 0x9D78, 0x6376, 0x9D79, 0x63A3, 0x9D7A, 0x638F, 0x9D7B, 0x6389, 0x9D7C, 0x639F, 0x9D7D, 0x63B5, 0x9D7E, 0x636B, 0x9D80, 0x6369, + 0x9D81, 0x63BE, 0x9D82, 0x63E9, 0x9D83, 0x63C0, 0x9D84, 0x63C6, 0x9D85, 0x63E3, 0x9D86, 0x63C9, 0x9D87, 0x63D2, 0x9D88, 0x63F6, + 0x9D89, 0x63C4, 0x9D8A, 0x6416, 0x9D8B, 0x6434, 0x9D8C, 0x6406, 0x9D8D, 0x6413, 0x9D8E, 0x6426, 0x9D8F, 0x6436, 0x9D90, 0x651D, + 0x9D91, 0x6417, 0x9D92, 0x6428, 0x9D93, 0x640F, 0x9D94, 0x6467, 0x9D95, 0x646F, 0x9D96, 0x6476, 0x9D97, 0x644E, 0x9D98, 0x652A, + 0x9D99, 0x6495, 0x9D9A, 0x6493, 0x9D9B, 0x64A5, 0x9D9C, 0x64A9, 0x9D9D, 0x6488, 0x9D9E, 0x64BC, 0x9D9F, 0x64DA, 0x9DA0, 0x64D2, + 0x9DA1, 0x64C5, 0x9DA2, 0x64C7, 0x9DA3, 0x64BB, 0x9DA4, 0x64D8, 0x9DA5, 0x64C2, 0x9DA6, 0x64F1, 0x9DA7, 0x64E7, 0x9DA8, 0x8209, + 0x9DA9, 0x64E0, 0x9DAA, 0x64E1, 0x9DAB, 0x62AC, 0x9DAC, 0x64E3, 0x9DAD, 0x64EF, 0x9DAE, 0x652C, 0x9DAF, 0x64F6, 0x9DB0, 0x64F4, + 0x9DB1, 0x64F2, 0x9DB2, 0x64FA, 0x9DB3, 0x6500, 0x9DB4, 0x64FD, 0x9DB5, 0x6518, 0x9DB6, 0x651C, 0x9DB7, 0x6505, 0x9DB8, 0x6524, + 0x9DB9, 0x6523, 0x9DBA, 0x652B, 0x9DBB, 0x6534, 0x9DBC, 0x6535, 0x9DBD, 0x6537, 0x9DBE, 0x6536, 0x9DBF, 0x6538, 0x9DC0, 0x754B, + 0x9DC1, 0x6548, 0x9DC2, 0x6556, 0x9DC3, 0x6555, 0x9DC4, 0x654D, 0x9DC5, 0x6558, 0x9DC6, 0x655E, 0x9DC7, 0x655D, 0x9DC8, 0x6572, + 0x9DC9, 0x6578, 0x9DCA, 0x6582, 0x9DCB, 0x6583, 0x9DCC, 0x8B8A, 0x9DCD, 0x659B, 0x9DCE, 0x659F, 0x9DCF, 0x65AB, 0x9DD0, 0x65B7, + 0x9DD1, 0x65C3, 0x9DD2, 0x65C6, 0x9DD3, 0x65C1, 0x9DD4, 0x65C4, 0x9DD5, 0x65CC, 0x9DD6, 0x65D2, 0x9DD7, 0x65DB, 0x9DD8, 0x65D9, + 0x9DD9, 0x65E0, 0x9DDA, 0x65E1, 0x9DDB, 0x65F1, 0x9DDC, 0x6772, 0x9DDD, 0x660A, 0x9DDE, 0x6603, 0x9DDF, 0x65FB, 0x9DE0, 0x6773, + 0x9DE1, 0x6635, 0x9DE2, 0x6636, 0x9DE3, 0x6634, 0x9DE4, 0x661C, 0x9DE5, 0x664F, 0x9DE6, 0x6644, 0x9DE7, 0x6649, 0x9DE8, 0x6641, + 0x9DE9, 0x665E, 0x9DEA, 0x665D, 0x9DEB, 0x6664, 0x9DEC, 0x6667, 0x9DED, 0x6668, 0x9DEE, 0x665F, 0x9DEF, 0x6662, 0x9DF0, 0x6670, + 0x9DF1, 0x6683, 0x9DF2, 0x6688, 0x9DF3, 0x668E, 0x9DF4, 0x6689, 0x9DF5, 0x6684, 0x9DF6, 0x6698, 0x9DF7, 0x669D, 0x9DF8, 0x66C1, + 0x9DF9, 0x66B9, 0x9DFA, 0x66C9, 0x9DFB, 0x66BE, 0x9DFC, 0x66BC, 0x9E40, 0x66C4, 0x9E41, 0x66B8, 0x9E42, 0x66D6, 0x9E43, 0x66DA, + 0x9E44, 0x66E0, 0x9E45, 0x663F, 0x9E46, 0x66E6, 0x9E47, 0x66E9, 0x9E48, 0x66F0, 0x9E49, 0x66F5, 0x9E4A, 0x66F7, 0x9E4B, 0x670F, + 0x9E4C, 0x6716, 0x9E4D, 0x671E, 0x9E4E, 0x6726, 0x9E4F, 0x6727, 0x9E50, 0x9738, 0x9E51, 0x672E, 0x9E52, 0x673F, 0x9E53, 0x6736, + 0x9E54, 0x6741, 0x9E55, 0x6738, 0x9E56, 0x6737, 0x9E57, 0x6746, 0x9E58, 0x675E, 0x9E59, 0x6760, 0x9E5A, 0x6759, 0x9E5B, 0x6763, + 0x9E5C, 0x6764, 0x9E5D, 0x6789, 0x9E5E, 0x6770, 0x9E5F, 0x67A9, 0x9E60, 0x677C, 0x9E61, 0x676A, 0x9E62, 0x678C, 0x9E63, 0x678B, + 0x9E64, 0x67A6, 0x9E65, 0x67A1, 0x9E66, 0x6785, 0x9E67, 0x67B7, 0x9E68, 0x67EF, 0x9E69, 0x67B4, 0x9E6A, 0x67EC, 0x9E6B, 0x67B3, + 0x9E6C, 0x67E9, 0x9E6D, 0x67B8, 0x9E6E, 0x67E4, 0x9E6F, 0x67DE, 0x9E70, 0x67DD, 0x9E71, 0x67E2, 0x9E72, 0x67EE, 0x9E73, 0x67B9, + 0x9E74, 0x67CE, 0x9E75, 0x67C6, 0x9E76, 0x67E7, 0x9E77, 0x6A9C, 0x9E78, 0x681E, 0x9E79, 0x6846, 0x9E7A, 0x6829, 0x9E7B, 0x6840, + 0x9E7C, 0x684D, 0x9E7D, 0x6832, 0x9E7E, 0x684E, 0x9E80, 0x68B3, 0x9E81, 0x682B, 0x9E82, 0x6859, 0x9E83, 0x6863, 0x9E84, 0x6877, + 0x9E85, 0x687F, 0x9E86, 0x689F, 0x9E87, 0x688F, 0x9E88, 0x68AD, 0x9E89, 0x6894, 0x9E8A, 0x689D, 0x9E8B, 0x689B, 0x9E8C, 0x6883, + 0x9E8D, 0x6AAE, 0x9E8E, 0x68B9, 0x9E8F, 0x6874, 0x9E90, 0x68B5, 0x9E91, 0x68A0, 0x9E92, 0x68BA, 0x9E93, 0x690F, 0x9E94, 0x688D, + 0x9E95, 0x687E, 0x9E96, 0x6901, 0x9E97, 0x68CA, 0x9E98, 0x6908, 0x9E99, 0x68D8, 0x9E9A, 0x6922, 0x9E9B, 0x6926, 0x9E9C, 0x68E1, + 0x9E9D, 0x690C, 0x9E9E, 0x68CD, 0x9E9F, 0x68D4, 0x9EA0, 0x68E7, 0x9EA1, 0x68D5, 0x9EA2, 0x6936, 0x9EA3, 0x6912, 0x9EA4, 0x6904, + 0x9EA5, 0x68D7, 0x9EA6, 0x68E3, 0x9EA7, 0x6925, 0x9EA8, 0x68F9, 0x9EA9, 0x68E0, 0x9EAA, 0x68EF, 0x9EAB, 0x6928, 0x9EAC, 0x692A, + 0x9EAD, 0x691A, 0x9EAE, 0x6923, 0x9EAF, 0x6921, 0x9EB0, 0x68C6, 0x9EB1, 0x6979, 0x9EB2, 0x6977, 0x9EB3, 0x695C, 0x9EB4, 0x6978, + 0x9EB5, 0x696B, 0x9EB6, 0x6954, 0x9EB7, 0x697E, 0x9EB8, 0x696E, 0x9EB9, 0x6939, 0x9EBA, 0x6974, 0x9EBB, 0x693D, 0x9EBC, 0x6959, + 0x9EBD, 0x6930, 0x9EBE, 0x6961, 0x9EBF, 0x695E, 0x9EC0, 0x695D, 0x9EC1, 0x6981, 0x9EC2, 0x696A, 0x9EC3, 0x69B2, 0x9EC4, 0x69AE, + 0x9EC5, 0x69D0, 0x9EC6, 0x69BF, 0x9EC7, 0x69C1, 0x9EC8, 0x69D3, 0x9EC9, 0x69BE, 0x9ECA, 0x69CE, 0x9ECB, 0x5BE8, 0x9ECC, 0x69CA, + 0x9ECD, 0x69DD, 0x9ECE, 0x69BB, 0x9ECF, 0x69C3, 0x9ED0, 0x69A7, 0x9ED1, 0x6A2E, 0x9ED2, 0x6991, 0x9ED3, 0x69A0, 0x9ED4, 0x699C, + 0x9ED5, 0x6995, 0x9ED6, 0x69B4, 0x9ED7, 0x69DE, 0x9ED8, 0x69E8, 0x9ED9, 0x6A02, 0x9EDA, 0x6A1B, 0x9EDB, 0x69FF, 0x9EDC, 0x6B0A, + 0x9EDD, 0x69F9, 0x9EDE, 0x69F2, 0x9EDF, 0x69E7, 0x9EE0, 0x6A05, 0x9EE1, 0x69B1, 0x9EE2, 0x6A1E, 0x9EE3, 0x69ED, 0x9EE4, 0x6A14, + 0x9EE5, 0x69EB, 0x9EE6, 0x6A0A, 0x9EE7, 0x6A12, 0x9EE8, 0x6AC1, 0x9EE9, 0x6A23, 0x9EEA, 0x6A13, 0x9EEB, 0x6A44, 0x9EEC, 0x6A0C, + 0x9EED, 0x6A72, 0x9EEE, 0x6A36, 0x9EEF, 0x6A78, 0x9EF0, 0x6A47, 0x9EF1, 0x6A62, 0x9EF2, 0x6A59, 0x9EF3, 0x6A66, 0x9EF4, 0x6A48, + 0x9EF5, 0x6A38, 0x9EF6, 0x6A22, 0x9EF7, 0x6A90, 0x9EF8, 0x6A8D, 0x9EF9, 0x6AA0, 0x9EFA, 0x6A84, 0x9EFB, 0x6AA2, 0x9EFC, 0x6AA3, + 0x9F40, 0x6A97, 0x9F41, 0x8617, 0x9F42, 0x6ABB, 0x9F43, 0x6AC3, 0x9F44, 0x6AC2, 0x9F45, 0x6AB8, 0x9F46, 0x6AB3, 0x9F47, 0x6AAC, + 0x9F48, 0x6ADE, 0x9F49, 0x6AD1, 0x9F4A, 0x6ADF, 0x9F4B, 0x6AAA, 0x9F4C, 0x6ADA, 0x9F4D, 0x6AEA, 0x9F4E, 0x6AFB, 0x9F4F, 0x6B05, + 0x9F50, 0x8616, 0x9F51, 0x6AFA, 0x9F52, 0x6B12, 0x9F53, 0x6B16, 0x9F54, 0x9B31, 0x9F55, 0x6B1F, 0x9F56, 0x6B38, 0x9F57, 0x6B37, + 0x9F58, 0x76DC, 0x9F59, 0x6B39, 0x9F5A, 0x98EE, 0x9F5B, 0x6B47, 0x9F5C, 0x6B43, 0x9F5D, 0x6B49, 0x9F5E, 0x6B50, 0x9F5F, 0x6B59, + 0x9F60, 0x6B54, 0x9F61, 0x6B5B, 0x9F62, 0x6B5F, 0x9F63, 0x6B61, 0x9F64, 0x6B78, 0x9F65, 0x6B79, 0x9F66, 0x6B7F, 0x9F67, 0x6B80, + 0x9F68, 0x6B84, 0x9F69, 0x6B83, 0x9F6A, 0x6B8D, 0x9F6B, 0x6B98, 0x9F6C, 0x6B95, 0x9F6D, 0x6B9E, 0x9F6E, 0x6BA4, 0x9F6F, 0x6BAA, + 0x9F70, 0x6BAB, 0x9F71, 0x6BAF, 0x9F72, 0x6BB2, 0x9F73, 0x6BB1, 0x9F74, 0x6BB3, 0x9F75, 0x6BB7, 0x9F76, 0x6BBC, 0x9F77, 0x6BC6, + 0x9F78, 0x6BCB, 0x9F79, 0x6BD3, 0x9F7A, 0x6BDF, 0x9F7B, 0x6BEC, 0x9F7C, 0x6BEB, 0x9F7D, 0x6BF3, 0x9F7E, 0x6BEF, 0x9F80, 0x9EBE, + 0x9F81, 0x6C08, 0x9F82, 0x6C13, 0x9F83, 0x6C14, 0x9F84, 0x6C1B, 0x9F85, 0x6C24, 0x9F86, 0x6C23, 0x9F87, 0x6C5E, 0x9F88, 0x6C55, + 0x9F89, 0x6C62, 0x9F8A, 0x6C6A, 0x9F8B, 0x6C82, 0x9F8C, 0x6C8D, 0x9F8D, 0x6C9A, 0x9F8E, 0x6C81, 0x9F8F, 0x6C9B, 0x9F90, 0x6C7E, + 0x9F91, 0x6C68, 0x9F92, 0x6C73, 0x9F93, 0x6C92, 0x9F94, 0x6C90, 0x9F95, 0x6CC4, 0x9F96, 0x6CF1, 0x9F97, 0x6CD3, 0x9F98, 0x6CBD, + 0x9F99, 0x6CD7, 0x9F9A, 0x6CC5, 0x9F9B, 0x6CDD, 0x9F9C, 0x6CAE, 0x9F9D, 0x6CB1, 0x9F9E, 0x6CBE, 0x9F9F, 0x6CBA, 0x9FA0, 0x6CDB, + 0x9FA1, 0x6CEF, 0x9FA2, 0x6CD9, 0x9FA3, 0x6CEA, 0x9FA4, 0x6D1F, 0x9FA5, 0x884D, 0x9FA6, 0x6D36, 0x9FA7, 0x6D2B, 0x9FA8, 0x6D3D, + 0x9FA9, 0x6D38, 0x9FAA, 0x6D19, 0x9FAB, 0x6D35, 0x9FAC, 0x6D33, 0x9FAD, 0x6D12, 0x9FAE, 0x6D0C, 0x9FAF, 0x6D63, 0x9FB0, 0x6D93, + 0x9FB1, 0x6D64, 0x9FB2, 0x6D5A, 0x9FB3, 0x6D79, 0x9FB4, 0x6D59, 0x9FB5, 0x6D8E, 0x9FB6, 0x6D95, 0x9FB7, 0x6FE4, 0x9FB8, 0x6D85, + 0x9FB9, 0x6DF9, 0x9FBA, 0x6E15, 0x9FBB, 0x6E0A, 0x9FBC, 0x6DB5, 0x9FBD, 0x6DC7, 0x9FBE, 0x6DE6, 0x9FBF, 0x6DB8, 0x9FC0, 0x6DC6, + 0x9FC1, 0x6DEC, 0x9FC2, 0x6DDE, 0x9FC3, 0x6DCC, 0x9FC4, 0x6DE8, 0x9FC5, 0x6DD2, 0x9FC6, 0x6DC5, 0x9FC7, 0x6DFA, 0x9FC8, 0x6DD9, + 0x9FC9, 0x6DE4, 0x9FCA, 0x6DD5, 0x9FCB, 0x6DEA, 0x9FCC, 0x6DEE, 0x9FCD, 0x6E2D, 0x9FCE, 0x6E6E, 0x9FCF, 0x6E2E, 0x9FD0, 0x6E19, + 0x9FD1, 0x6E72, 0x9FD2, 0x6E5F, 0x9FD3, 0x6E3E, 0x9FD4, 0x6E23, 0x9FD5, 0x6E6B, 0x9FD6, 0x6E2B, 0x9FD7, 0x6E76, 0x9FD8, 0x6E4D, + 0x9FD9, 0x6E1F, 0x9FDA, 0x6E43, 0x9FDB, 0x6E3A, 0x9FDC, 0x6E4E, 0x9FDD, 0x6E24, 0x9FDE, 0x6EFF, 0x9FDF, 0x6E1D, 0x9FE0, 0x6E38, + 0x9FE1, 0x6E82, 0x9FE2, 0x6EAA, 0x9FE3, 0x6E98, 0x9FE4, 0x6EC9, 0x9FE5, 0x6EB7, 0x9FE6, 0x6ED3, 0x9FE7, 0x6EBD, 0x9FE8, 0x6EAF, + 0x9FE9, 0x6EC4, 0x9FEA, 0x6EB2, 0x9FEB, 0x6ED4, 0x9FEC, 0x6ED5, 0x9FED, 0x6E8F, 0x9FEE, 0x6EA5, 0x9FEF, 0x6EC2, 0x9FF0, 0x6E9F, + 0x9FF1, 0x6F41, 0x9FF2, 0x6F11, 0x9FF3, 0x704C, 0x9FF4, 0x6EEC, 0x9FF5, 0x6EF8, 0x9FF6, 0x6EFE, 0x9FF7, 0x6F3F, 0x9FF8, 0x6EF2, + 0x9FF9, 0x6F31, 0x9FFA, 0x6EEF, 0x9FFB, 0x6F32, 0x9FFC, 0x6ECC, 0xE040, 0x6F3E, 0xE041, 0x6F13, 0xE042, 0x6EF7, 0xE043, 0x6F86, + 0xE044, 0x6F7A, 0xE045, 0x6F78, 0xE046, 0x6F81, 0xE047, 0x6F80, 0xE048, 0x6F6F, 0xE049, 0x6F5B, 0xE04A, 0x6FF3, 0xE04B, 0x6F6D, + 0xE04C, 0x6F82, 0xE04D, 0x6F7C, 0xE04E, 0x6F58, 0xE04F, 0x6F8E, 0xE050, 0x6F91, 0xE051, 0x6FC2, 0xE052, 0x6F66, 0xE053, 0x6FB3, + 0xE054, 0x6FA3, 0xE055, 0x6FA1, 0xE056, 0x6FA4, 0xE057, 0x6FB9, 0xE058, 0x6FC6, 0xE059, 0x6FAA, 0xE05A, 0x6FDF, 0xE05B, 0x6FD5, + 0xE05C, 0x6FEC, 0xE05D, 0x6FD4, 0xE05E, 0x6FD8, 0xE05F, 0x6FF1, 0xE060, 0x6FEE, 0xE061, 0x6FDB, 0xE062, 0x7009, 0xE063, 0x700B, + 0xE064, 0x6FFA, 0xE065, 0x7011, 0xE066, 0x7001, 0xE067, 0x700F, 0xE068, 0x6FFE, 0xE069, 0x701B, 0xE06A, 0x701A, 0xE06B, 0x6F74, + 0xE06C, 0x701D, 0xE06D, 0x7018, 0xE06E, 0x701F, 0xE06F, 0x7030, 0xE070, 0x703E, 0xE071, 0x7032, 0xE072, 0x7051, 0xE073, 0x7063, + 0xE074, 0x7099, 0xE075, 0x7092, 0xE076, 0x70AF, 0xE077, 0x70F1, 0xE078, 0x70AC, 0xE079, 0x70B8, 0xE07A, 0x70B3, 0xE07B, 0x70AE, + 0xE07C, 0x70DF, 0xE07D, 0x70CB, 0xE07E, 0x70DD, 0xE080, 0x70D9, 0xE081, 0x7109, 0xE082, 0x70FD, 0xE083, 0x711C, 0xE084, 0x7119, + 0xE085, 0x7165, 0xE086, 0x7155, 0xE087, 0x7188, 0xE088, 0x7166, 0xE089, 0x7162, 0xE08A, 0x714C, 0xE08B, 0x7156, 0xE08C, 0x716C, + 0xE08D, 0x718F, 0xE08E, 0x71FB, 0xE08F, 0x7184, 0xE090, 0x7195, 0xE091, 0x71A8, 0xE092, 0x71AC, 0xE093, 0x71D7, 0xE094, 0x71B9, + 0xE095, 0x71BE, 0xE096, 0x71D2, 0xE097, 0x71C9, 0xE098, 0x71D4, 0xE099, 0x71CE, 0xE09A, 0x71E0, 0xE09B, 0x71EC, 0xE09C, 0x71E7, + 0xE09D, 0x71F5, 0xE09E, 0x71FC, 0xE09F, 0x71F9, 0xE0A0, 0x71FF, 0xE0A1, 0x720D, 0xE0A2, 0x7210, 0xE0A3, 0x721B, 0xE0A4, 0x7228, + 0xE0A5, 0x722D, 0xE0A6, 0x722C, 0xE0A7, 0x7230, 0xE0A8, 0x7232, 0xE0A9, 0x723B, 0xE0AA, 0x723C, 0xE0AB, 0x723F, 0xE0AC, 0x7240, + 0xE0AD, 0x7246, 0xE0AE, 0x724B, 0xE0AF, 0x7258, 0xE0B0, 0x7274, 0xE0B1, 0x727E, 0xE0B2, 0x7282, 0xE0B3, 0x7281, 0xE0B4, 0x7287, + 0xE0B5, 0x7292, 0xE0B6, 0x7296, 0xE0B7, 0x72A2, 0xE0B8, 0x72A7, 0xE0B9, 0x72B9, 0xE0BA, 0x72B2, 0xE0BB, 0x72C3, 0xE0BC, 0x72C6, + 0xE0BD, 0x72C4, 0xE0BE, 0x72CE, 0xE0BF, 0x72D2, 0xE0C0, 0x72E2, 0xE0C1, 0x72E0, 0xE0C2, 0x72E1, 0xE0C3, 0x72F9, 0xE0C4, 0x72F7, + 0xE0C5, 0x500F, 0xE0C6, 0x7317, 0xE0C7, 0x730A, 0xE0C8, 0x731C, 0xE0C9, 0x7316, 0xE0CA, 0x731D, 0xE0CB, 0x7334, 0xE0CC, 0x732F, + 0xE0CD, 0x7329, 0xE0CE, 0x7325, 0xE0CF, 0x733E, 0xE0D0, 0x734E, 0xE0D1, 0x734F, 0xE0D2, 0x9ED8, 0xE0D3, 0x7357, 0xE0D4, 0x736A, + 0xE0D5, 0x7368, 0xE0D6, 0x7370, 0xE0D7, 0x7378, 0xE0D8, 0x7375, 0xE0D9, 0x737B, 0xE0DA, 0x737A, 0xE0DB, 0x73C8, 0xE0DC, 0x73B3, + 0xE0DD, 0x73CE, 0xE0DE, 0x73BB, 0xE0DF, 0x73C0, 0xE0E0, 0x73E5, 0xE0E1, 0x73EE, 0xE0E2, 0x73DE, 0xE0E3, 0x74A2, 0xE0E4, 0x7405, + 0xE0E5, 0x746F, 0xE0E6, 0x7425, 0xE0E7, 0x73F8, 0xE0E8, 0x7432, 0xE0E9, 0x743A, 0xE0EA, 0x7455, 0xE0EB, 0x743F, 0xE0EC, 0x745F, + 0xE0ED, 0x7459, 0xE0EE, 0x7441, 0xE0EF, 0x745C, 0xE0F0, 0x7469, 0xE0F1, 0x7470, 0xE0F2, 0x7463, 0xE0F3, 0x746A, 0xE0F4, 0x7476, + 0xE0F5, 0x747E, 0xE0F6, 0x748B, 0xE0F7, 0x749E, 0xE0F8, 0x74A7, 0xE0F9, 0x74CA, 0xE0FA, 0x74CF, 0xE0FB, 0x74D4, 0xE0FC, 0x73F1, + 0xE140, 0x74E0, 0xE141, 0x74E3, 0xE142, 0x74E7, 0xE143, 0x74E9, 0xE144, 0x74EE, 0xE145, 0x74F2, 0xE146, 0x74F0, 0xE147, 0x74F1, + 0xE148, 0x74F8, 0xE149, 0x74F7, 0xE14A, 0x7504, 0xE14B, 0x7503, 0xE14C, 0x7505, 0xE14D, 0x750C, 0xE14E, 0x750E, 0xE14F, 0x750D, + 0xE150, 0x7515, 0xE151, 0x7513, 0xE152, 0x751E, 0xE153, 0x7526, 0xE154, 0x752C, 0xE155, 0x753C, 0xE156, 0x7544, 0xE157, 0x754D, + 0xE158, 0x754A, 0xE159, 0x7549, 0xE15A, 0x755B, 0xE15B, 0x7546, 0xE15C, 0x755A, 0xE15D, 0x7569, 0xE15E, 0x7564, 0xE15F, 0x7567, + 0xE160, 0x756B, 0xE161, 0x756D, 0xE162, 0x7578, 0xE163, 0x7576, 0xE164, 0x7586, 0xE165, 0x7587, 0xE166, 0x7574, 0xE167, 0x758A, + 0xE168, 0x7589, 0xE169, 0x7582, 0xE16A, 0x7594, 0xE16B, 0x759A, 0xE16C, 0x759D, 0xE16D, 0x75A5, 0xE16E, 0x75A3, 0xE16F, 0x75C2, + 0xE170, 0x75B3, 0xE171, 0x75C3, 0xE172, 0x75B5, 0xE173, 0x75BD, 0xE174, 0x75B8, 0xE175, 0x75BC, 0xE176, 0x75B1, 0xE177, 0x75CD, + 0xE178, 0x75CA, 0xE179, 0x75D2, 0xE17A, 0x75D9, 0xE17B, 0x75E3, 0xE17C, 0x75DE, 0xE17D, 0x75FE, 0xE17E, 0x75FF, 0xE180, 0x75FC, + 0xE181, 0x7601, 0xE182, 0x75F0, 0xE183, 0x75FA, 0xE184, 0x75F2, 0xE185, 0x75F3, 0xE186, 0x760B, 0xE187, 0x760D, 0xE188, 0x7609, + 0xE189, 0x761F, 0xE18A, 0x7627, 0xE18B, 0x7620, 0xE18C, 0x7621, 0xE18D, 0x7622, 0xE18E, 0x7624, 0xE18F, 0x7634, 0xE190, 0x7630, + 0xE191, 0x763B, 0xE192, 0x7647, 0xE193, 0x7648, 0xE194, 0x7646, 0xE195, 0x765C, 0xE196, 0x7658, 0xE197, 0x7661, 0xE198, 0x7662, + 0xE199, 0x7668, 0xE19A, 0x7669, 0xE19B, 0x766A, 0xE19C, 0x7667, 0xE19D, 0x766C, 0xE19E, 0x7670, 0xE19F, 0x7672, 0xE1A0, 0x7676, + 0xE1A1, 0x7678, 0xE1A2, 0x767C, 0xE1A3, 0x7680, 0xE1A4, 0x7683, 0xE1A5, 0x7688, 0xE1A6, 0x768B, 0xE1A7, 0x768E, 0xE1A8, 0x7696, + 0xE1A9, 0x7693, 0xE1AA, 0x7699, 0xE1AB, 0x769A, 0xE1AC, 0x76B0, 0xE1AD, 0x76B4, 0xE1AE, 0x76B8, 0xE1AF, 0x76B9, 0xE1B0, 0x76BA, + 0xE1B1, 0x76C2, 0xE1B2, 0x76CD, 0xE1B3, 0x76D6, 0xE1B4, 0x76D2, 0xE1B5, 0x76DE, 0xE1B6, 0x76E1, 0xE1B7, 0x76E5, 0xE1B8, 0x76E7, + 0xE1B9, 0x76EA, 0xE1BA, 0x862F, 0xE1BB, 0x76FB, 0xE1BC, 0x7708, 0xE1BD, 0x7707, 0xE1BE, 0x7704, 0xE1BF, 0x7729, 0xE1C0, 0x7724, + 0xE1C1, 0x771E, 0xE1C2, 0x7725, 0xE1C3, 0x7726, 0xE1C4, 0x771B, 0xE1C5, 0x7737, 0xE1C6, 0x7738, 0xE1C7, 0x7747, 0xE1C8, 0x775A, + 0xE1C9, 0x7768, 0xE1CA, 0x776B, 0xE1CB, 0x775B, 0xE1CC, 0x7765, 0xE1CD, 0x777F, 0xE1CE, 0x777E, 0xE1CF, 0x7779, 0xE1D0, 0x778E, + 0xE1D1, 0x778B, 0xE1D2, 0x7791, 0xE1D3, 0x77A0, 0xE1D4, 0x779E, 0xE1D5, 0x77B0, 0xE1D6, 0x77B6, 0xE1D7, 0x77B9, 0xE1D8, 0x77BF, + 0xE1D9, 0x77BC, 0xE1DA, 0x77BD, 0xE1DB, 0x77BB, 0xE1DC, 0x77C7, 0xE1DD, 0x77CD, 0xE1DE, 0x77D7, 0xE1DF, 0x77DA, 0xE1E0, 0x77DC, + 0xE1E1, 0x77E3, 0xE1E2, 0x77EE, 0xE1E3, 0x77FC, 0xE1E4, 0x780C, 0xE1E5, 0x7812, 0xE1E6, 0x7926, 0xE1E7, 0x7820, 0xE1E8, 0x792A, + 0xE1E9, 0x7845, 0xE1EA, 0x788E, 0xE1EB, 0x7874, 0xE1EC, 0x7886, 0xE1ED, 0x787C, 0xE1EE, 0x789A, 0xE1EF, 0x788C, 0xE1F0, 0x78A3, + 0xE1F1, 0x78B5, 0xE1F2, 0x78AA, 0xE1F3, 0x78AF, 0xE1F4, 0x78D1, 0xE1F5, 0x78C6, 0xE1F6, 0x78CB, 0xE1F7, 0x78D4, 0xE1F8, 0x78BE, + 0xE1F9, 0x78BC, 0xE1FA, 0x78C5, 0xE1FB, 0x78CA, 0xE1FC, 0x78EC, 0xE240, 0x78E7, 0xE241, 0x78DA, 0xE242, 0x78FD, 0xE243, 0x78F4, + 0xE244, 0x7907, 0xE245, 0x7912, 0xE246, 0x7911, 0xE247, 0x7919, 0xE248, 0x792C, 0xE249, 0x792B, 0xE24A, 0x7940, 0xE24B, 0x7960, + 0xE24C, 0x7957, 0xE24D, 0x795F, 0xE24E, 0x795A, 0xE24F, 0x7955, 0xE250, 0x7953, 0xE251, 0x797A, 0xE252, 0x797F, 0xE253, 0x798A, + 0xE254, 0x799D, 0xE255, 0x79A7, 0xE256, 0x9F4B, 0xE257, 0x79AA, 0xE258, 0x79AE, 0xE259, 0x79B3, 0xE25A, 0x79B9, 0xE25B, 0x79BA, + 0xE25C, 0x79C9, 0xE25D, 0x79D5, 0xE25E, 0x79E7, 0xE25F, 0x79EC, 0xE260, 0x79E1, 0xE261, 0x79E3, 0xE262, 0x7A08, 0xE263, 0x7A0D, + 0xE264, 0x7A18, 0xE265, 0x7A19, 0xE266, 0x7A20, 0xE267, 0x7A1F, 0xE268, 0x7980, 0xE269, 0x7A31, 0xE26A, 0x7A3B, 0xE26B, 0x7A3E, + 0xE26C, 0x7A37, 0xE26D, 0x7A43, 0xE26E, 0x7A57, 0xE26F, 0x7A49, 0xE270, 0x7A61, 0xE271, 0x7A62, 0xE272, 0x7A69, 0xE273, 0x9F9D, + 0xE274, 0x7A70, 0xE275, 0x7A79, 0xE276, 0x7A7D, 0xE277, 0x7A88, 0xE278, 0x7A97, 0xE279, 0x7A95, 0xE27A, 0x7A98, 0xE27B, 0x7A96, + 0xE27C, 0x7AA9, 0xE27D, 0x7AC8, 0xE27E, 0x7AB0, 0xE280, 0x7AB6, 0xE281, 0x7AC5, 0xE282, 0x7AC4, 0xE283, 0x7ABF, 0xE284, 0x9083, + 0xE285, 0x7AC7, 0xE286, 0x7ACA, 0xE287, 0x7ACD, 0xE288, 0x7ACF, 0xE289, 0x7AD5, 0xE28A, 0x7AD3, 0xE28B, 0x7AD9, 0xE28C, 0x7ADA, + 0xE28D, 0x7ADD, 0xE28E, 0x7AE1, 0xE28F, 0x7AE2, 0xE290, 0x7AE6, 0xE291, 0x7AED, 0xE292, 0x7AF0, 0xE293, 0x7B02, 0xE294, 0x7B0F, + 0xE295, 0x7B0A, 0xE296, 0x7B06, 0xE297, 0x7B33, 0xE298, 0x7B18, 0xE299, 0x7B19, 0xE29A, 0x7B1E, 0xE29B, 0x7B35, 0xE29C, 0x7B28, + 0xE29D, 0x7B36, 0xE29E, 0x7B50, 0xE29F, 0x7B7A, 0xE2A0, 0x7B04, 0xE2A1, 0x7B4D, 0xE2A2, 0x7B0B, 0xE2A3, 0x7B4C, 0xE2A4, 0x7B45, + 0xE2A5, 0x7B75, 0xE2A6, 0x7B65, 0xE2A7, 0x7B74, 0xE2A8, 0x7B67, 0xE2A9, 0x7B70, 0xE2AA, 0x7B71, 0xE2AB, 0x7B6C, 0xE2AC, 0x7B6E, + 0xE2AD, 0x7B9D, 0xE2AE, 0x7B98, 0xE2AF, 0x7B9F, 0xE2B0, 0x7B8D, 0xE2B1, 0x7B9C, 0xE2B2, 0x7B9A, 0xE2B3, 0x7B8B, 0xE2B4, 0x7B92, + 0xE2B5, 0x7B8F, 0xE2B6, 0x7B5D, 0xE2B7, 0x7B99, 0xE2B8, 0x7BCB, 0xE2B9, 0x7BC1, 0xE2BA, 0x7BCC, 0xE2BB, 0x7BCF, 0xE2BC, 0x7BB4, + 0xE2BD, 0x7BC6, 0xE2BE, 0x7BDD, 0xE2BF, 0x7BE9, 0xE2C0, 0x7C11, 0xE2C1, 0x7C14, 0xE2C2, 0x7BE6, 0xE2C3, 0x7BE5, 0xE2C4, 0x7C60, + 0xE2C5, 0x7C00, 0xE2C6, 0x7C07, 0xE2C7, 0x7C13, 0xE2C8, 0x7BF3, 0xE2C9, 0x7BF7, 0xE2CA, 0x7C17, 0xE2CB, 0x7C0D, 0xE2CC, 0x7BF6, + 0xE2CD, 0x7C23, 0xE2CE, 0x7C27, 0xE2CF, 0x7C2A, 0xE2D0, 0x7C1F, 0xE2D1, 0x7C37, 0xE2D2, 0x7C2B, 0xE2D3, 0x7C3D, 0xE2D4, 0x7C4C, + 0xE2D5, 0x7C43, 0xE2D6, 0x7C54, 0xE2D7, 0x7C4F, 0xE2D8, 0x7C40, 0xE2D9, 0x7C50, 0xE2DA, 0x7C58, 0xE2DB, 0x7C5F, 0xE2DC, 0x7C64, + 0xE2DD, 0x7C56, 0xE2DE, 0x7C65, 0xE2DF, 0x7C6C, 0xE2E0, 0x7C75, 0xE2E1, 0x7C83, 0xE2E2, 0x7C90, 0xE2E3, 0x7CA4, 0xE2E4, 0x7CAD, + 0xE2E5, 0x7CA2, 0xE2E6, 0x7CAB, 0xE2E7, 0x7CA1, 0xE2E8, 0x7CA8, 0xE2E9, 0x7CB3, 0xE2EA, 0x7CB2, 0xE2EB, 0x7CB1, 0xE2EC, 0x7CAE, + 0xE2ED, 0x7CB9, 0xE2EE, 0x7CBD, 0xE2EF, 0x7CC0, 0xE2F0, 0x7CC5, 0xE2F1, 0x7CC2, 0xE2F2, 0x7CD8, 0xE2F3, 0x7CD2, 0xE2F4, 0x7CDC, + 0xE2F5, 0x7CE2, 0xE2F6, 0x9B3B, 0xE2F7, 0x7CEF, 0xE2F8, 0x7CF2, 0xE2F9, 0x7CF4, 0xE2FA, 0x7CF6, 0xE2FB, 0x7CFA, 0xE2FC, 0x7D06, + 0xE340, 0x7D02, 0xE341, 0x7D1C, 0xE342, 0x7D15, 0xE343, 0x7D0A, 0xE344, 0x7D45, 0xE345, 0x7D4B, 0xE346, 0x7D2E, 0xE347, 0x7D32, + 0xE348, 0x7D3F, 0xE349, 0x7D35, 0xE34A, 0x7D46, 0xE34B, 0x7D73, 0xE34C, 0x7D56, 0xE34D, 0x7D4E, 0xE34E, 0x7D72, 0xE34F, 0x7D68, + 0xE350, 0x7D6E, 0xE351, 0x7D4F, 0xE352, 0x7D63, 0xE353, 0x7D93, 0xE354, 0x7D89, 0xE355, 0x7D5B, 0xE356, 0x7D8F, 0xE357, 0x7D7D, + 0xE358, 0x7D9B, 0xE359, 0x7DBA, 0xE35A, 0x7DAE, 0xE35B, 0x7DA3, 0xE35C, 0x7DB5, 0xE35D, 0x7DC7, 0xE35E, 0x7DBD, 0xE35F, 0x7DAB, + 0xE360, 0x7E3D, 0xE361, 0x7DA2, 0xE362, 0x7DAF, 0xE363, 0x7DDC, 0xE364, 0x7DB8, 0xE365, 0x7D9F, 0xE366, 0x7DB0, 0xE367, 0x7DD8, + 0xE368, 0x7DDD, 0xE369, 0x7DE4, 0xE36A, 0x7DDE, 0xE36B, 0x7DFB, 0xE36C, 0x7DF2, 0xE36D, 0x7DE1, 0xE36E, 0x7E05, 0xE36F, 0x7E0A, + 0xE370, 0x7E23, 0xE371, 0x7E21, 0xE372, 0x7E12, 0xE373, 0x7E31, 0xE374, 0x7E1F, 0xE375, 0x7E09, 0xE376, 0x7E0B, 0xE377, 0x7E22, + 0xE378, 0x7E46, 0xE379, 0x7E66, 0xE37A, 0x7E3B, 0xE37B, 0x7E35, 0xE37C, 0x7E39, 0xE37D, 0x7E43, 0xE37E, 0x7E37, 0xE380, 0x7E32, + 0xE381, 0x7E3A, 0xE382, 0x7E67, 0xE383, 0x7E5D, 0xE384, 0x7E56, 0xE385, 0x7E5E, 0xE386, 0x7E59, 0xE387, 0x7E5A, 0xE388, 0x7E79, + 0xE389, 0x7E6A, 0xE38A, 0x7E69, 0xE38B, 0x7E7C, 0xE38C, 0x7E7B, 0xE38D, 0x7E83, 0xE38E, 0x7DD5, 0xE38F, 0x7E7D, 0xE390, 0x8FAE, + 0xE391, 0x7E7F, 0xE392, 0x7E88, 0xE393, 0x7E89, 0xE394, 0x7E8C, 0xE395, 0x7E92, 0xE396, 0x7E90, 0xE397, 0x7E93, 0xE398, 0x7E94, + 0xE399, 0x7E96, 0xE39A, 0x7E8E, 0xE39B, 0x7E9B, 0xE39C, 0x7E9C, 0xE39D, 0x7F38, 0xE39E, 0x7F3A, 0xE39F, 0x7F45, 0xE3A0, 0x7F4C, + 0xE3A1, 0x7F4D, 0xE3A2, 0x7F4E, 0xE3A3, 0x7F50, 0xE3A4, 0x7F51, 0xE3A5, 0x7F55, 0xE3A6, 0x7F54, 0xE3A7, 0x7F58, 0xE3A8, 0x7F5F, + 0xE3A9, 0x7F60, 0xE3AA, 0x7F68, 0xE3AB, 0x7F69, 0xE3AC, 0x7F67, 0xE3AD, 0x7F78, 0xE3AE, 0x7F82, 0xE3AF, 0x7F86, 0xE3B0, 0x7F83, + 0xE3B1, 0x7F88, 0xE3B2, 0x7F87, 0xE3B3, 0x7F8C, 0xE3B4, 0x7F94, 0xE3B5, 0x7F9E, 0xE3B6, 0x7F9D, 0xE3B7, 0x7F9A, 0xE3B8, 0x7FA3, + 0xE3B9, 0x7FAF, 0xE3BA, 0x7FB2, 0xE3BB, 0x7FB9, 0xE3BC, 0x7FAE, 0xE3BD, 0x7FB6, 0xE3BE, 0x7FB8, 0xE3BF, 0x8B71, 0xE3C0, 0x7FC5, + 0xE3C1, 0x7FC6, 0xE3C2, 0x7FCA, 0xE3C3, 0x7FD5, 0xE3C4, 0x7FD4, 0xE3C5, 0x7FE1, 0xE3C6, 0x7FE6, 0xE3C7, 0x7FE9, 0xE3C8, 0x7FF3, + 0xE3C9, 0x7FF9, 0xE3CA, 0x98DC, 0xE3CB, 0x8006, 0xE3CC, 0x8004, 0xE3CD, 0x800B, 0xE3CE, 0x8012, 0xE3CF, 0x8018, 0xE3D0, 0x8019, + 0xE3D1, 0x801C, 0xE3D2, 0x8021, 0xE3D3, 0x8028, 0xE3D4, 0x803F, 0xE3D5, 0x803B, 0xE3D6, 0x804A, 0xE3D7, 0x8046, 0xE3D8, 0x8052, + 0xE3D9, 0x8058, 0xE3DA, 0x805A, 0xE3DB, 0x805F, 0xE3DC, 0x8062, 0xE3DD, 0x8068, 0xE3DE, 0x8073, 0xE3DF, 0x8072, 0xE3E0, 0x8070, + 0xE3E1, 0x8076, 0xE3E2, 0x8079, 0xE3E3, 0x807D, 0xE3E4, 0x807F, 0xE3E5, 0x8084, 0xE3E6, 0x8086, 0xE3E7, 0x8085, 0xE3E8, 0x809B, + 0xE3E9, 0x8093, 0xE3EA, 0x809A, 0xE3EB, 0x80AD, 0xE3EC, 0x5190, 0xE3ED, 0x80AC, 0xE3EE, 0x80DB, 0xE3EF, 0x80E5, 0xE3F0, 0x80D9, + 0xE3F1, 0x80DD, 0xE3F2, 0x80C4, 0xE3F3, 0x80DA, 0xE3F4, 0x80D6, 0xE3F5, 0x8109, 0xE3F6, 0x80EF, 0xE3F7, 0x80F1, 0xE3F8, 0x811B, + 0xE3F9, 0x8129, 0xE3FA, 0x8123, 0xE3FB, 0x812F, 0xE3FC, 0x814B, 0xE440, 0x968B, 0xE441, 0x8146, 0xE442, 0x813E, 0xE443, 0x8153, + 0xE444, 0x8151, 0xE445, 0x80FC, 0xE446, 0x8171, 0xE447, 0x816E, 0xE448, 0x8165, 0xE449, 0x8166, 0xE44A, 0x8174, 0xE44B, 0x8183, + 0xE44C, 0x8188, 0xE44D, 0x818A, 0xE44E, 0x8180, 0xE44F, 0x8182, 0xE450, 0x81A0, 0xE451, 0x8195, 0xE452, 0x81A4, 0xE453, 0x81A3, + 0xE454, 0x815F, 0xE455, 0x8193, 0xE456, 0x81A9, 0xE457, 0x81B0, 0xE458, 0x81B5, 0xE459, 0x81BE, 0xE45A, 0x81B8, 0xE45B, 0x81BD, + 0xE45C, 0x81C0, 0xE45D, 0x81C2, 0xE45E, 0x81BA, 0xE45F, 0x81C9, 0xE460, 0x81CD, 0xE461, 0x81D1, 0xE462, 0x81D9, 0xE463, 0x81D8, + 0xE464, 0x81C8, 0xE465, 0x81DA, 0xE466, 0x81DF, 0xE467, 0x81E0, 0xE468, 0x81E7, 0xE469, 0x81FA, 0xE46A, 0x81FB, 0xE46B, 0x81FE, + 0xE46C, 0x8201, 0xE46D, 0x8202, 0xE46E, 0x8205, 0xE46F, 0x8207, 0xE470, 0x820A, 0xE471, 0x820D, 0xE472, 0x8210, 0xE473, 0x8216, + 0xE474, 0x8229, 0xE475, 0x822B, 0xE476, 0x8238, 0xE477, 0x8233, 0xE478, 0x8240, 0xE479, 0x8259, 0xE47A, 0x8258, 0xE47B, 0x825D, + 0xE47C, 0x825A, 0xE47D, 0x825F, 0xE47E, 0x8264, 0xE480, 0x8262, 0xE481, 0x8268, 0xE482, 0x826A, 0xE483, 0x826B, 0xE484, 0x822E, + 0xE485, 0x8271, 0xE486, 0x8277, 0xE487, 0x8278, 0xE488, 0x827E, 0xE489, 0x828D, 0xE48A, 0x8292, 0xE48B, 0x82AB, 0xE48C, 0x829F, + 0xE48D, 0x82BB, 0xE48E, 0x82AC, 0xE48F, 0x82E1, 0xE490, 0x82E3, 0xE491, 0x82DF, 0xE492, 0x82D2, 0xE493, 0x82F4, 0xE494, 0x82F3, + 0xE495, 0x82FA, 0xE496, 0x8393, 0xE497, 0x8303, 0xE498, 0x82FB, 0xE499, 0x82F9, 0xE49A, 0x82DE, 0xE49B, 0x8306, 0xE49C, 0x82DC, + 0xE49D, 0x8309, 0xE49E, 0x82D9, 0xE49F, 0x8335, 0xE4A0, 0x8334, 0xE4A1, 0x8316, 0xE4A2, 0x8332, 0xE4A3, 0x8331, 0xE4A4, 0x8340, + 0xE4A5, 0x8339, 0xE4A6, 0x8350, 0xE4A7, 0x8345, 0xE4A8, 0x832F, 0xE4A9, 0x832B, 0xE4AA, 0x8317, 0xE4AB, 0x8318, 0xE4AC, 0x8385, + 0xE4AD, 0x839A, 0xE4AE, 0x83AA, 0xE4AF, 0x839F, 0xE4B0, 0x83A2, 0xE4B1, 0x8396, 0xE4B2, 0x8323, 0xE4B3, 0x838E, 0xE4B4, 0x8387, + 0xE4B5, 0x838A, 0xE4B6, 0x837C, 0xE4B7, 0x83B5, 0xE4B8, 0x8373, 0xE4B9, 0x8375, 0xE4BA, 0x83A0, 0xE4BB, 0x8389, 0xE4BC, 0x83A8, + 0xE4BD, 0x83F4, 0xE4BE, 0x8413, 0xE4BF, 0x83EB, 0xE4C0, 0x83CE, 0xE4C1, 0x83FD, 0xE4C2, 0x8403, 0xE4C3, 0x83D8, 0xE4C4, 0x840B, + 0xE4C5, 0x83C1, 0xE4C6, 0x83F7, 0xE4C7, 0x8407, 0xE4C8, 0x83E0, 0xE4C9, 0x83F2, 0xE4CA, 0x840D, 0xE4CB, 0x8422, 0xE4CC, 0x8420, + 0xE4CD, 0x83BD, 0xE4CE, 0x8438, 0xE4CF, 0x8506, 0xE4D0, 0x83FB, 0xE4D1, 0x846D, 0xE4D2, 0x842A, 0xE4D3, 0x843C, 0xE4D4, 0x855A, + 0xE4D5, 0x8484, 0xE4D6, 0x8477, 0xE4D7, 0x846B, 0xE4D8, 0x84AD, 0xE4D9, 0x846E, 0xE4DA, 0x8482, 0xE4DB, 0x8469, 0xE4DC, 0x8446, + 0xE4DD, 0x842C, 0xE4DE, 0x846F, 0xE4DF, 0x8479, 0xE4E0, 0x8435, 0xE4E1, 0x84CA, 0xE4E2, 0x8462, 0xE4E3, 0x84B9, 0xE4E4, 0x84BF, + 0xE4E5, 0x849F, 0xE4E6, 0x84D9, 0xE4E7, 0x84CD, 0xE4E8, 0x84BB, 0xE4E9, 0x84DA, 0xE4EA, 0x84D0, 0xE4EB, 0x84C1, 0xE4EC, 0x84C6, + 0xE4ED, 0x84D6, 0xE4EE, 0x84A1, 0xE4EF, 0x8521, 0xE4F0, 0x84FF, 0xE4F1, 0x84F4, 0xE4F2, 0x8517, 0xE4F3, 0x8518, 0xE4F4, 0x852C, + 0xE4F5, 0x851F, 0xE4F6, 0x8515, 0xE4F7, 0x8514, 0xE4F8, 0x84FC, 0xE4F9, 0x8540, 0xE4FA, 0x8563, 0xE4FB, 0x8558, 0xE4FC, 0x8548, + 0xE540, 0x8541, 0xE541, 0x8602, 0xE542, 0x854B, 0xE543, 0x8555, 0xE544, 0x8580, 0xE545, 0x85A4, 0xE546, 0x8588, 0xE547, 0x8591, + 0xE548, 0x858A, 0xE549, 0x85A8, 0xE54A, 0x856D, 0xE54B, 0x8594, 0xE54C, 0x859B, 0xE54D, 0x85EA, 0xE54E, 0x8587, 0xE54F, 0x859C, + 0xE550, 0x8577, 0xE551, 0x857E, 0xE552, 0x8590, 0xE553, 0x85C9, 0xE554, 0x85BA, 0xE555, 0x85CF, 0xE556, 0x85B9, 0xE557, 0x85D0, + 0xE558, 0x85D5, 0xE559, 0x85DD, 0xE55A, 0x85E5, 0xE55B, 0x85DC, 0xE55C, 0x85F9, 0xE55D, 0x860A, 0xE55E, 0x8613, 0xE55F, 0x860B, + 0xE560, 0x85FE, 0xE561, 0x85FA, 0xE562, 0x8606, 0xE563, 0x8622, 0xE564, 0x861A, 0xE565, 0x8630, 0xE566, 0x863F, 0xE567, 0x864D, + 0xE568, 0x4E55, 0xE569, 0x8654, 0xE56A, 0x865F, 0xE56B, 0x8667, 0xE56C, 0x8671, 0xE56D, 0x8693, 0xE56E, 0x86A3, 0xE56F, 0x86A9, + 0xE570, 0x86AA, 0xE571, 0x868B, 0xE572, 0x868C, 0xE573, 0x86B6, 0xE574, 0x86AF, 0xE575, 0x86C4, 0xE576, 0x86C6, 0xE577, 0x86B0, + 0xE578, 0x86C9, 0xE579, 0x8823, 0xE57A, 0x86AB, 0xE57B, 0x86D4, 0xE57C, 0x86DE, 0xE57D, 0x86E9, 0xE57E, 0x86EC, 0xE580, 0x86DF, + 0xE581, 0x86DB, 0xE582, 0x86EF, 0xE583, 0x8712, 0xE584, 0x8706, 0xE585, 0x8708, 0xE586, 0x8700, 0xE587, 0x8703, 0xE588, 0x86FB, + 0xE589, 0x8711, 0xE58A, 0x8709, 0xE58B, 0x870D, 0xE58C, 0x86F9, 0xE58D, 0x870A, 0xE58E, 0x8734, 0xE58F, 0x873F, 0xE590, 0x8737, + 0xE591, 0x873B, 0xE592, 0x8725, 0xE593, 0x8729, 0xE594, 0x871A, 0xE595, 0x8760, 0xE596, 0x875F, 0xE597, 0x8778, 0xE598, 0x874C, + 0xE599, 0x874E, 0xE59A, 0x8774, 0xE59B, 0x8757, 0xE59C, 0x8768, 0xE59D, 0x876E, 0xE59E, 0x8759, 0xE59F, 0x8753, 0xE5A0, 0x8763, + 0xE5A1, 0x876A, 0xE5A2, 0x8805, 0xE5A3, 0x87A2, 0xE5A4, 0x879F, 0xE5A5, 0x8782, 0xE5A6, 0x87AF, 0xE5A7, 0x87CB, 0xE5A8, 0x87BD, + 0xE5A9, 0x87C0, 0xE5AA, 0x87D0, 0xE5AB, 0x96D6, 0xE5AC, 0x87AB, 0xE5AD, 0x87C4, 0xE5AE, 0x87B3, 0xE5AF, 0x87C7, 0xE5B0, 0x87C6, + 0xE5B1, 0x87BB, 0xE5B2, 0x87EF, 0xE5B3, 0x87F2, 0xE5B4, 0x87E0, 0xE5B5, 0x880F, 0xE5B6, 0x880D, 0xE5B7, 0x87FE, 0xE5B8, 0x87F6, + 0xE5B9, 0x87F7, 0xE5BA, 0x880E, 0xE5BB, 0x87D2, 0xE5BC, 0x8811, 0xE5BD, 0x8816, 0xE5BE, 0x8815, 0xE5BF, 0x8822, 0xE5C0, 0x8821, + 0xE5C1, 0x8831, 0xE5C2, 0x8836, 0xE5C3, 0x8839, 0xE5C4, 0x8827, 0xE5C5, 0x883B, 0xE5C6, 0x8844, 0xE5C7, 0x8842, 0xE5C8, 0x8852, + 0xE5C9, 0x8859, 0xE5CA, 0x885E, 0xE5CB, 0x8862, 0xE5CC, 0x886B, 0xE5CD, 0x8881, 0xE5CE, 0x887E, 0xE5CF, 0x889E, 0xE5D0, 0x8875, + 0xE5D1, 0x887D, 0xE5D2, 0x88B5, 0xE5D3, 0x8872, 0xE5D4, 0x8882, 0xE5D5, 0x8897, 0xE5D6, 0x8892, 0xE5D7, 0x88AE, 0xE5D8, 0x8899, + 0xE5D9, 0x88A2, 0xE5DA, 0x888D, 0xE5DB, 0x88A4, 0xE5DC, 0x88B0, 0xE5DD, 0x88BF, 0xE5DE, 0x88B1, 0xE5DF, 0x88C3, 0xE5E0, 0x88C4, + 0xE5E1, 0x88D4, 0xE5E2, 0x88D8, 0xE5E3, 0x88D9, 0xE5E4, 0x88DD, 0xE5E5, 0x88F9, 0xE5E6, 0x8902, 0xE5E7, 0x88FC, 0xE5E8, 0x88F4, + 0xE5E9, 0x88E8, 0xE5EA, 0x88F2, 0xE5EB, 0x8904, 0xE5EC, 0x890C, 0xE5ED, 0x890A, 0xE5EE, 0x8913, 0xE5EF, 0x8943, 0xE5F0, 0x891E, + 0xE5F1, 0x8925, 0xE5F2, 0x892A, 0xE5F3, 0x892B, 0xE5F4, 0x8941, 0xE5F5, 0x8944, 0xE5F6, 0x893B, 0xE5F7, 0x8936, 0xE5F8, 0x8938, + 0xE5F9, 0x894C, 0xE5FA, 0x891D, 0xE5FB, 0x8960, 0xE5FC, 0x895E, 0xE640, 0x8966, 0xE641, 0x8964, 0xE642, 0x896D, 0xE643, 0x896A, + 0xE644, 0x896F, 0xE645, 0x8974, 0xE646, 0x8977, 0xE647, 0x897E, 0xE648, 0x8983, 0xE649, 0x8988, 0xE64A, 0x898A, 0xE64B, 0x8993, + 0xE64C, 0x8998, 0xE64D, 0x89A1, 0xE64E, 0x89A9, 0xE64F, 0x89A6, 0xE650, 0x89AC, 0xE651, 0x89AF, 0xE652, 0x89B2, 0xE653, 0x89BA, + 0xE654, 0x89BD, 0xE655, 0x89BF, 0xE656, 0x89C0, 0xE657, 0x89DA, 0xE658, 0x89DC, 0xE659, 0x89DD, 0xE65A, 0x89E7, 0xE65B, 0x89F4, + 0xE65C, 0x89F8, 0xE65D, 0x8A03, 0xE65E, 0x8A16, 0xE65F, 0x8A10, 0xE660, 0x8A0C, 0xE661, 0x8A1B, 0xE662, 0x8A1D, 0xE663, 0x8A25, + 0xE664, 0x8A36, 0xE665, 0x8A41, 0xE666, 0x8A5B, 0xE667, 0x8A52, 0xE668, 0x8A46, 0xE669, 0x8A48, 0xE66A, 0x8A7C, 0xE66B, 0x8A6D, + 0xE66C, 0x8A6C, 0xE66D, 0x8A62, 0xE66E, 0x8A85, 0xE66F, 0x8A82, 0xE670, 0x8A84, 0xE671, 0x8AA8, 0xE672, 0x8AA1, 0xE673, 0x8A91, + 0xE674, 0x8AA5, 0xE675, 0x8AA6, 0xE676, 0x8A9A, 0xE677, 0x8AA3, 0xE678, 0x8AC4, 0xE679, 0x8ACD, 0xE67A, 0x8AC2, 0xE67B, 0x8ADA, + 0xE67C, 0x8AEB, 0xE67D, 0x8AF3, 0xE67E, 0x8AE7, 0xE680, 0x8AE4, 0xE681, 0x8AF1, 0xE682, 0x8B14, 0xE683, 0x8AE0, 0xE684, 0x8AE2, + 0xE685, 0x8AF7, 0xE686, 0x8ADE, 0xE687, 0x8ADB, 0xE688, 0x8B0C, 0xE689, 0x8B07, 0xE68A, 0x8B1A, 0xE68B, 0x8AE1, 0xE68C, 0x8B16, + 0xE68D, 0x8B10, 0xE68E, 0x8B17, 0xE68F, 0x8B20, 0xE690, 0x8B33, 0xE691, 0x97AB, 0xE692, 0x8B26, 0xE693, 0x8B2B, 0xE694, 0x8B3E, + 0xE695, 0x8B28, 0xE696, 0x8B41, 0xE697, 0x8B4C, 0xE698, 0x8B4F, 0xE699, 0x8B4E, 0xE69A, 0x8B49, 0xE69B, 0x8B56, 0xE69C, 0x8B5B, + 0xE69D, 0x8B5A, 0xE69E, 0x8B6B, 0xE69F, 0x8B5F, 0xE6A0, 0x8B6C, 0xE6A1, 0x8B6F, 0xE6A2, 0x8B74, 0xE6A3, 0x8B7D, 0xE6A4, 0x8B80, + 0xE6A5, 0x8B8C, 0xE6A6, 0x8B8E, 0xE6A7, 0x8B92, 0xE6A8, 0x8B93, 0xE6A9, 0x8B96, 0xE6AA, 0x8B99, 0xE6AB, 0x8B9A, 0xE6AC, 0x8C3A, + 0xE6AD, 0x8C41, 0xE6AE, 0x8C3F, 0xE6AF, 0x8C48, 0xE6B0, 0x8C4C, 0xE6B1, 0x8C4E, 0xE6B2, 0x8C50, 0xE6B3, 0x8C55, 0xE6B4, 0x8C62, + 0xE6B5, 0x8C6C, 0xE6B6, 0x8C78, 0xE6B7, 0x8C7A, 0xE6B8, 0x8C82, 0xE6B9, 0x8C89, 0xE6BA, 0x8C85, 0xE6BB, 0x8C8A, 0xE6BC, 0x8C8D, + 0xE6BD, 0x8C8E, 0xE6BE, 0x8C94, 0xE6BF, 0x8C7C, 0xE6C0, 0x8C98, 0xE6C1, 0x621D, 0xE6C2, 0x8CAD, 0xE6C3, 0x8CAA, 0xE6C4, 0x8CBD, + 0xE6C5, 0x8CB2, 0xE6C6, 0x8CB3, 0xE6C7, 0x8CAE, 0xE6C8, 0x8CB6, 0xE6C9, 0x8CC8, 0xE6CA, 0x8CC1, 0xE6CB, 0x8CE4, 0xE6CC, 0x8CE3, + 0xE6CD, 0x8CDA, 0xE6CE, 0x8CFD, 0xE6CF, 0x8CFA, 0xE6D0, 0x8CFB, 0xE6D1, 0x8D04, 0xE6D2, 0x8D05, 0xE6D3, 0x8D0A, 0xE6D4, 0x8D07, + 0xE6D5, 0x8D0F, 0xE6D6, 0x8D0D, 0xE6D7, 0x8D10, 0xE6D8, 0x9F4E, 0xE6D9, 0x8D13, 0xE6DA, 0x8CCD, 0xE6DB, 0x8D14, 0xE6DC, 0x8D16, + 0xE6DD, 0x8D67, 0xE6DE, 0x8D6D, 0xE6DF, 0x8D71, 0xE6E0, 0x8D73, 0xE6E1, 0x8D81, 0xE6E2, 0x8D99, 0xE6E3, 0x8DC2, 0xE6E4, 0x8DBE, + 0xE6E5, 0x8DBA, 0xE6E6, 0x8DCF, 0xE6E7, 0x8DDA, 0xE6E8, 0x8DD6, 0xE6E9, 0x8DCC, 0xE6EA, 0x8DDB, 0xE6EB, 0x8DCB, 0xE6EC, 0x8DEA, + 0xE6ED, 0x8DEB, 0xE6EE, 0x8DDF, 0xE6EF, 0x8DE3, 0xE6F0, 0x8DFC, 0xE6F1, 0x8E08, 0xE6F2, 0x8E09, 0xE6F3, 0x8DFF, 0xE6F4, 0x8E1D, + 0xE6F5, 0x8E1E, 0xE6F6, 0x8E10, 0xE6F7, 0x8E1F, 0xE6F8, 0x8E42, 0xE6F9, 0x8E35, 0xE6FA, 0x8E30, 0xE6FB, 0x8E34, 0xE6FC, 0x8E4A, + 0xE740, 0x8E47, 0xE741, 0x8E49, 0xE742, 0x8E4C, 0xE743, 0x8E50, 0xE744, 0x8E48, 0xE745, 0x8E59, 0xE746, 0x8E64, 0xE747, 0x8E60, + 0xE748, 0x8E2A, 0xE749, 0x8E63, 0xE74A, 0x8E55, 0xE74B, 0x8E76, 0xE74C, 0x8E72, 0xE74D, 0x8E7C, 0xE74E, 0x8E81, 0xE74F, 0x8E87, + 0xE750, 0x8E85, 0xE751, 0x8E84, 0xE752, 0x8E8B, 0xE753, 0x8E8A, 0xE754, 0x8E93, 0xE755, 0x8E91, 0xE756, 0x8E94, 0xE757, 0x8E99, + 0xE758, 0x8EAA, 0xE759, 0x8EA1, 0xE75A, 0x8EAC, 0xE75B, 0x8EB0, 0xE75C, 0x8EC6, 0xE75D, 0x8EB1, 0xE75E, 0x8EBE, 0xE75F, 0x8EC5, + 0xE760, 0x8EC8, 0xE761, 0x8ECB, 0xE762, 0x8EDB, 0xE763, 0x8EE3, 0xE764, 0x8EFC, 0xE765, 0x8EFB, 0xE766, 0x8EEB, 0xE767, 0x8EFE, + 0xE768, 0x8F0A, 0xE769, 0x8F05, 0xE76A, 0x8F15, 0xE76B, 0x8F12, 0xE76C, 0x8F19, 0xE76D, 0x8F13, 0xE76E, 0x8F1C, 0xE76F, 0x8F1F, + 0xE770, 0x8F1B, 0xE771, 0x8F0C, 0xE772, 0x8F26, 0xE773, 0x8F33, 0xE774, 0x8F3B, 0xE775, 0x8F39, 0xE776, 0x8F45, 0xE777, 0x8F42, + 0xE778, 0x8F3E, 0xE779, 0x8F4C, 0xE77A, 0x8F49, 0xE77B, 0x8F46, 0xE77C, 0x8F4E, 0xE77D, 0x8F57, 0xE77E, 0x8F5C, 0xE780, 0x8F62, + 0xE781, 0x8F63, 0xE782, 0x8F64, 0xE783, 0x8F9C, 0xE784, 0x8F9F, 0xE785, 0x8FA3, 0xE786, 0x8FAD, 0xE787, 0x8FAF, 0xE788, 0x8FB7, + 0xE789, 0x8FDA, 0xE78A, 0x8FE5, 0xE78B, 0x8FE2, 0xE78C, 0x8FEA, 0xE78D, 0x8FEF, 0xE78E, 0x9087, 0xE78F, 0x8FF4, 0xE790, 0x9005, + 0xE791, 0x8FF9, 0xE792, 0x8FFA, 0xE793, 0x9011, 0xE794, 0x9015, 0xE795, 0x9021, 0xE796, 0x900D, 0xE797, 0x901E, 0xE798, 0x9016, + 0xE799, 0x900B, 0xE79A, 0x9027, 0xE79B, 0x9036, 0xE79C, 0x9035, 0xE79D, 0x9039, 0xE79E, 0x8FF8, 0xE79F, 0x904F, 0xE7A0, 0x9050, + 0xE7A1, 0x9051, 0xE7A2, 0x9052, 0xE7A3, 0x900E, 0xE7A4, 0x9049, 0xE7A5, 0x903E, 0xE7A6, 0x9056, 0xE7A7, 0x9058, 0xE7A8, 0x905E, + 0xE7A9, 0x9068, 0xE7AA, 0x906F, 0xE7AB, 0x9076, 0xE7AC, 0x96A8, 0xE7AD, 0x9072, 0xE7AE, 0x9082, 0xE7AF, 0x907D, 0xE7B0, 0x9081, + 0xE7B1, 0x9080, 0xE7B2, 0x908A, 0xE7B3, 0x9089, 0xE7B4, 0x908F, 0xE7B5, 0x90A8, 0xE7B6, 0x90AF, 0xE7B7, 0x90B1, 0xE7B8, 0x90B5, + 0xE7B9, 0x90E2, 0xE7BA, 0x90E4, 0xE7BB, 0x6248, 0xE7BC, 0x90DB, 0xE7BD, 0x9102, 0xE7BE, 0x9112, 0xE7BF, 0x9119, 0xE7C0, 0x9132, + 0xE7C1, 0x9130, 0xE7C2, 0x914A, 0xE7C3, 0x9156, 0xE7C4, 0x9158, 0xE7C5, 0x9163, 0xE7C6, 0x9165, 0xE7C7, 0x9169, 0xE7C8, 0x9173, + 0xE7C9, 0x9172, 0xE7CA, 0x918B, 0xE7CB, 0x9189, 0xE7CC, 0x9182, 0xE7CD, 0x91A2, 0xE7CE, 0x91AB, 0xE7CF, 0x91AF, 0xE7D0, 0x91AA, + 0xE7D1, 0x91B5, 0xE7D2, 0x91B4, 0xE7D3, 0x91BA, 0xE7D4, 0x91C0, 0xE7D5, 0x91C1, 0xE7D6, 0x91C9, 0xE7D7, 0x91CB, 0xE7D8, 0x91D0, + 0xE7D9, 0x91D6, 0xE7DA, 0x91DF, 0xE7DB, 0x91E1, 0xE7DC, 0x91DB, 0xE7DD, 0x91FC, 0xE7DE, 0x91F5, 0xE7DF, 0x91F6, 0xE7E0, 0x921E, + 0xE7E1, 0x91FF, 0xE7E2, 0x9214, 0xE7E3, 0x922C, 0xE7E4, 0x9215, 0xE7E5, 0x9211, 0xE7E6, 0x925E, 0xE7E7, 0x9257, 0xE7E8, 0x9245, + 0xE7E9, 0x9249, 0xE7EA, 0x9264, 0xE7EB, 0x9248, 0xE7EC, 0x9295, 0xE7ED, 0x923F, 0xE7EE, 0x924B, 0xE7EF, 0x9250, 0xE7F0, 0x929C, + 0xE7F1, 0x9296, 0xE7F2, 0x9293, 0xE7F3, 0x929B, 0xE7F4, 0x925A, 0xE7F5, 0x92CF, 0xE7F6, 0x92B9, 0xE7F7, 0x92B7, 0xE7F8, 0x92E9, + 0xE7F9, 0x930F, 0xE7FA, 0x92FA, 0xE7FB, 0x9344, 0xE7FC, 0x932E, 0xE840, 0x9319, 0xE841, 0x9322, 0xE842, 0x931A, 0xE843, 0x9323, + 0xE844, 0x933A, 0xE845, 0x9335, 0xE846, 0x933B, 0xE847, 0x935C, 0xE848, 0x9360, 0xE849, 0x937C, 0xE84A, 0x936E, 0xE84B, 0x9356, + 0xE84C, 0x93B0, 0xE84D, 0x93AC, 0xE84E, 0x93AD, 0xE84F, 0x9394, 0xE850, 0x93B9, 0xE851, 0x93D6, 0xE852, 0x93D7, 0xE853, 0x93E8, + 0xE854, 0x93E5, 0xE855, 0x93D8, 0xE856, 0x93C3, 0xE857, 0x93DD, 0xE858, 0x93D0, 0xE859, 0x93C8, 0xE85A, 0x93E4, 0xE85B, 0x941A, + 0xE85C, 0x9414, 0xE85D, 0x9413, 0xE85E, 0x9403, 0xE85F, 0x9407, 0xE860, 0x9410, 0xE861, 0x9436, 0xE862, 0x942B, 0xE863, 0x9435, + 0xE864, 0x9421, 0xE865, 0x943A, 0xE866, 0x9441, 0xE867, 0x9452, 0xE868, 0x9444, 0xE869, 0x945B, 0xE86A, 0x9460, 0xE86B, 0x9462, + 0xE86C, 0x945E, 0xE86D, 0x946A, 0xE86E, 0x9229, 0xE86F, 0x9470, 0xE870, 0x9475, 0xE871, 0x9477, 0xE872, 0x947D, 0xE873, 0x945A, + 0xE874, 0x947C, 0xE875, 0x947E, 0xE876, 0x9481, 0xE877, 0x947F, 0xE878, 0x9582, 0xE879, 0x9587, 0xE87A, 0x958A, 0xE87B, 0x9594, + 0xE87C, 0x9596, 0xE87D, 0x9598, 0xE87E, 0x9599, 0xE880, 0x95A0, 0xE881, 0x95A8, 0xE882, 0x95A7, 0xE883, 0x95AD, 0xE884, 0x95BC, + 0xE885, 0x95BB, 0xE886, 0x95B9, 0xE887, 0x95BE, 0xE888, 0x95CA, 0xE889, 0x6FF6, 0xE88A, 0x95C3, 0xE88B, 0x95CD, 0xE88C, 0x95CC, + 0xE88D, 0x95D5, 0xE88E, 0x95D4, 0xE88F, 0x95D6, 0xE890, 0x95DC, 0xE891, 0x95E1, 0xE892, 0x95E5, 0xE893, 0x95E2, 0xE894, 0x9621, + 0xE895, 0x9628, 0xE896, 0x962E, 0xE897, 0x962F, 0xE898, 0x9642, 0xE899, 0x964C, 0xE89A, 0x964F, 0xE89B, 0x964B, 0xE89C, 0x9677, + 0xE89D, 0x965C, 0xE89E, 0x965E, 0xE89F, 0x965D, 0xE8A0, 0x965F, 0xE8A1, 0x9666, 0xE8A2, 0x9672, 0xE8A3, 0x966C, 0xE8A4, 0x968D, + 0xE8A5, 0x9698, 0xE8A6, 0x9695, 0xE8A7, 0x9697, 0xE8A8, 0x96AA, 0xE8A9, 0x96A7, 0xE8AA, 0x96B1, 0xE8AB, 0x96B2, 0xE8AC, 0x96B0, + 0xE8AD, 0x96B4, 0xE8AE, 0x96B6, 0xE8AF, 0x96B8, 0xE8B0, 0x96B9, 0xE8B1, 0x96CE, 0xE8B2, 0x96CB, 0xE8B3, 0x96C9, 0xE8B4, 0x96CD, + 0xE8B5, 0x894D, 0xE8B6, 0x96DC, 0xE8B7, 0x970D, 0xE8B8, 0x96D5, 0xE8B9, 0x96F9, 0xE8BA, 0x9704, 0xE8BB, 0x9706, 0xE8BC, 0x9708, + 0xE8BD, 0x9713, 0xE8BE, 0x970E, 0xE8BF, 0x9711, 0xE8C0, 0x970F, 0xE8C1, 0x9716, 0xE8C2, 0x9719, 0xE8C3, 0x9724, 0xE8C4, 0x972A, + 0xE8C5, 0x9730, 0xE8C6, 0x9739, 0xE8C7, 0x973D, 0xE8C8, 0x973E, 0xE8C9, 0x9744, 0xE8CA, 0x9746, 0xE8CB, 0x9748, 0xE8CC, 0x9742, + 0xE8CD, 0x9749, 0xE8CE, 0x975C, 0xE8CF, 0x9760, 0xE8D0, 0x9764, 0xE8D1, 0x9766, 0xE8D2, 0x9768, 0xE8D3, 0x52D2, 0xE8D4, 0x976B, + 0xE8D5, 0x9771, 0xE8D6, 0x9779, 0xE8D7, 0x9785, 0xE8D8, 0x977C, 0xE8D9, 0x9781, 0xE8DA, 0x977A, 0xE8DB, 0x9786, 0xE8DC, 0x978B, + 0xE8DD, 0x978F, 0xE8DE, 0x9790, 0xE8DF, 0x979C, 0xE8E0, 0x97A8, 0xE8E1, 0x97A6, 0xE8E2, 0x97A3, 0xE8E3, 0x97B3, 0xE8E4, 0x97B4, + 0xE8E5, 0x97C3, 0xE8E6, 0x97C6, 0xE8E7, 0x97C8, 0xE8E8, 0x97CB, 0xE8E9, 0x97DC, 0xE8EA, 0x97ED, 0xE8EB, 0x9F4F, 0xE8EC, 0x97F2, + 0xE8ED, 0x7ADF, 0xE8EE, 0x97F6, 0xE8EF, 0x97F5, 0xE8F0, 0x980F, 0xE8F1, 0x980C, 0xE8F2, 0x9838, 0xE8F3, 0x9824, 0xE8F4, 0x9821, + 0xE8F5, 0x9837, 0xE8F6, 0x983D, 0xE8F7, 0x9846, 0xE8F8, 0x984F, 0xE8F9, 0x984B, 0xE8FA, 0x986B, 0xE8FB, 0x986F, 0xE8FC, 0x9870, + 0xE940, 0x9871, 0xE941, 0x9874, 0xE942, 0x9873, 0xE943, 0x98AA, 0xE944, 0x98AF, 0xE945, 0x98B1, 0xE946, 0x98B6, 0xE947, 0x98C4, + 0xE948, 0x98C3, 0xE949, 0x98C6, 0xE94A, 0x98E9, 0xE94B, 0x98EB, 0xE94C, 0x9903, 0xE94D, 0x9909, 0xE94E, 0x9912, 0xE94F, 0x9914, + 0xE950, 0x9918, 0xE951, 0x9921, 0xE952, 0x991D, 0xE953, 0x991E, 0xE954, 0x9924, 0xE955, 0x9920, 0xE956, 0x992C, 0xE957, 0x992E, + 0xE958, 0x993D, 0xE959, 0x993E, 0xE95A, 0x9942, 0xE95B, 0x9949, 0xE95C, 0x9945, 0xE95D, 0x9950, 0xE95E, 0x994B, 0xE95F, 0x9951, + 0xE960, 0x9952, 0xE961, 0x994C, 0xE962, 0x9955, 0xE963, 0x9997, 0xE964, 0x9998, 0xE965, 0x99A5, 0xE966, 0x99AD, 0xE967, 0x99AE, + 0xE968, 0x99BC, 0xE969, 0x99DF, 0xE96A, 0x99DB, 0xE96B, 0x99DD, 0xE96C, 0x99D8, 0xE96D, 0x99D1, 0xE96E, 0x99ED, 0xE96F, 0x99EE, + 0xE970, 0x99F1, 0xE971, 0x99F2, 0xE972, 0x99FB, 0xE973, 0x99F8, 0xE974, 0x9A01, 0xE975, 0x9A0F, 0xE976, 0x9A05, 0xE977, 0x99E2, + 0xE978, 0x9A19, 0xE979, 0x9A2B, 0xE97A, 0x9A37, 0xE97B, 0x9A45, 0xE97C, 0x9A42, 0xE97D, 0x9A40, 0xE97E, 0x9A43, 0xE980, 0x9A3E, + 0xE981, 0x9A55, 0xE982, 0x9A4D, 0xE983, 0x9A5B, 0xE984, 0x9A57, 0xE985, 0x9A5F, 0xE986, 0x9A62, 0xE987, 0x9A65, 0xE988, 0x9A64, + 0xE989, 0x9A69, 0xE98A, 0x9A6B, 0xE98B, 0x9A6A, 0xE98C, 0x9AAD, 0xE98D, 0x9AB0, 0xE98E, 0x9ABC, 0xE98F, 0x9AC0, 0xE990, 0x9ACF, + 0xE991, 0x9AD1, 0xE992, 0x9AD3, 0xE993, 0x9AD4, 0xE994, 0x9ADE, 0xE995, 0x9ADF, 0xE996, 0x9AE2, 0xE997, 0x9AE3, 0xE998, 0x9AE6, + 0xE999, 0x9AEF, 0xE99A, 0x9AEB, 0xE99B, 0x9AEE, 0xE99C, 0x9AF4, 0xE99D, 0x9AF1, 0xE99E, 0x9AF7, 0xE99F, 0x9AFB, 0xE9A0, 0x9B06, + 0xE9A1, 0x9B18, 0xE9A2, 0x9B1A, 0xE9A3, 0x9B1F, 0xE9A4, 0x9B22, 0xE9A5, 0x9B23, 0xE9A6, 0x9B25, 0xE9A7, 0x9B27, 0xE9A8, 0x9B28, + 0xE9A9, 0x9B29, 0xE9AA, 0x9B2A, 0xE9AB, 0x9B2E, 0xE9AC, 0x9B2F, 0xE9AD, 0x9B32, 0xE9AE, 0x9B44, 0xE9AF, 0x9B43, 0xE9B0, 0x9B4F, + 0xE9B1, 0x9B4D, 0xE9B2, 0x9B4E, 0xE9B3, 0x9B51, 0xE9B4, 0x9B58, 0xE9B5, 0x9B74, 0xE9B6, 0x9B93, 0xE9B7, 0x9B83, 0xE9B8, 0x9B91, + 0xE9B9, 0x9B96, 0xE9BA, 0x9B97, 0xE9BB, 0x9B9F, 0xE9BC, 0x9BA0, 0xE9BD, 0x9BA8, 0xE9BE, 0x9BB4, 0xE9BF, 0x9BC0, 0xE9C0, 0x9BCA, + 0xE9C1, 0x9BB9, 0xE9C2, 0x9BC6, 0xE9C3, 0x9BCF, 0xE9C4, 0x9BD1, 0xE9C5, 0x9BD2, 0xE9C6, 0x9BE3, 0xE9C7, 0x9BE2, 0xE9C8, 0x9BE4, + 0xE9C9, 0x9BD4, 0xE9CA, 0x9BE1, 0xE9CB, 0x9C3A, 0xE9CC, 0x9BF2, 0xE9CD, 0x9BF1, 0xE9CE, 0x9BF0, 0xE9CF, 0x9C15, 0xE9D0, 0x9C14, + 0xE9D1, 0x9C09, 0xE9D2, 0x9C13, 0xE9D3, 0x9C0C, 0xE9D4, 0x9C06, 0xE9D5, 0x9C08, 0xE9D6, 0x9C12, 0xE9D7, 0x9C0A, 0xE9D8, 0x9C04, + 0xE9D9, 0x9C2E, 0xE9DA, 0x9C1B, 0xE9DB, 0x9C25, 0xE9DC, 0x9C24, 0xE9DD, 0x9C21, 0xE9DE, 0x9C30, 0xE9DF, 0x9C47, 0xE9E0, 0x9C32, + 0xE9E1, 0x9C46, 0xE9E2, 0x9C3E, 0xE9E3, 0x9C5A, 0xE9E4, 0x9C60, 0xE9E5, 0x9C67, 0xE9E6, 0x9C76, 0xE9E7, 0x9C78, 0xE9E8, 0x9CE7, + 0xE9E9, 0x9CEC, 0xE9EA, 0x9CF0, 0xE9EB, 0x9D09, 0xE9EC, 0x9D08, 0xE9ED, 0x9CEB, 0xE9EE, 0x9D03, 0xE9EF, 0x9D06, 0xE9F0, 0x9D2A, + 0xE9F1, 0x9D26, 0xE9F2, 0x9DAF, 0xE9F3, 0x9D23, 0xE9F4, 0x9D1F, 0xE9F5, 0x9D44, 0xE9F6, 0x9D15, 0xE9F7, 0x9D12, 0xE9F8, 0x9D41, + 0xE9F9, 0x9D3F, 0xE9FA, 0x9D3E, 0xE9FB, 0x9D46, 0xE9FC, 0x9D48, 0xEA40, 0x9D5D, 0xEA41, 0x9D5E, 0xEA42, 0x9D64, 0xEA43, 0x9D51, + 0xEA44, 0x9D50, 0xEA45, 0x9D59, 0xEA46, 0x9D72, 0xEA47, 0x9D89, 0xEA48, 0x9D87, 0xEA49, 0x9DAB, 0xEA4A, 0x9D6F, 0xEA4B, 0x9D7A, + 0xEA4C, 0x9D9A, 0xEA4D, 0x9DA4, 0xEA4E, 0x9DA9, 0xEA4F, 0x9DB2, 0xEA50, 0x9DC4, 0xEA51, 0x9DC1, 0xEA52, 0x9DBB, 0xEA53, 0x9DB8, + 0xEA54, 0x9DBA, 0xEA55, 0x9DC6, 0xEA56, 0x9DCF, 0xEA57, 0x9DC2, 0xEA58, 0x9DD9, 0xEA59, 0x9DD3, 0xEA5A, 0x9DF8, 0xEA5B, 0x9DE6, + 0xEA5C, 0x9DED, 0xEA5D, 0x9DEF, 0xEA5E, 0x9DFD, 0xEA5F, 0x9E1A, 0xEA60, 0x9E1B, 0xEA61, 0x9E1E, 0xEA62, 0x9E75, 0xEA63, 0x9E79, + 0xEA64, 0x9E7D, 0xEA65, 0x9E81, 0xEA66, 0x9E88, 0xEA67, 0x9E8B, 0xEA68, 0x9E8C, 0xEA69, 0x9E92, 0xEA6A, 0x9E95, 0xEA6B, 0x9E91, + 0xEA6C, 0x9E9D, 0xEA6D, 0x9EA5, 0xEA6E, 0x9EA9, 0xEA6F, 0x9EB8, 0xEA70, 0x9EAA, 0xEA71, 0x9EAD, 0xEA72, 0x9761, 0xEA73, 0x9ECC, + 0xEA74, 0x9ECE, 0xEA75, 0x9ECF, 0xEA76, 0x9ED0, 0xEA77, 0x9ED4, 0xEA78, 0x9EDC, 0xEA79, 0x9EDE, 0xEA7A, 0x9EDD, 0xEA7B, 0x9EE0, + 0xEA7C, 0x9EE5, 0xEA7D, 0x9EE8, 0xEA7E, 0x9EEF, 0xEA80, 0x9EF4, 0xEA81, 0x9EF6, 0xEA82, 0x9EF7, 0xEA83, 0x9EF9, 0xEA84, 0x9EFB, + 0xEA85, 0x9EFC, 0xEA86, 0x9EFD, 0xEA87, 0x9F07, 0xEA88, 0x9F08, 0xEA89, 0x76B7, 0xEA8A, 0x9F15, 0xEA8B, 0x9F21, 0xEA8C, 0x9F2C, + 0xEA8D, 0x9F3E, 0xEA8E, 0x9F4A, 0xEA8F, 0x9F52, 0xEA90, 0x9F54, 0xEA91, 0x9F63, 0xEA92, 0x9F5F, 0xEA93, 0x9F60, 0xEA94, 0x9F61, + 0xEA95, 0x9F66, 0xEA96, 0x9F67, 0xEA97, 0x9F6C, 0xEA98, 0x9F6A, 0xEA99, 0x9F77, 0xEA9A, 0x9F72, 0xEA9B, 0x9F76, 0xEA9C, 0x9F95, + 0xEA9D, 0x9F9C, 0xEA9E, 0x9FA0, 0xEA9F, 0x582F, 0xEAA0, 0x69C7, 0xEAA1, 0x9059, 0xEAA2, 0x7464, 0xEAA3, 0x51DC, 0xEAA4, 0x7199, + 0xFA40, 0x2170, 0xFA41, 0x2171, 0xFA42, 0x2172, 0xFA43, 0x2173, 0xFA44, 0x2174, 0xFA45, 0x2175, 0xFA46, 0x2176, 0xFA47, 0x2177, + 0xFA48, 0x2178, 0xFA49, 0x2179, 0xFA55, 0xFFE4, 0xFA56, 0xFF07, 0xFA57, 0xFF02, 0xFA5C, 0x7E8A, 0xFA5D, 0x891C, 0xFA5E, 0x9348, + 0xFA5F, 0x9288, 0xFA60, 0x84DC, 0xFA61, 0x4FC9, 0xFA62, 0x70BB, 0xFA63, 0x6631, 0xFA64, 0x68C8, 0xFA65, 0x92F9, 0xFA66, 0x66FB, + 0xFA67, 0x5F45, 0xFA68, 0x4E28, 0xFA69, 0x4EE1, 0xFA6A, 0x4EFC, 0xFA6B, 0x4F00, 0xFA6C, 0x4F03, 0xFA6D, 0x4F39, 0xFA6E, 0x4F56, + 0xFA6F, 0x4F92, 0xFA70, 0x4F8A, 0xFA71, 0x4F9A, 0xFA72, 0x4F94, 0xFA73, 0x4FCD, 0xFA74, 0x5040, 0xFA75, 0x5022, 0xFA76, 0x4FFF, + 0xFA77, 0x501E, 0xFA78, 0x5046, 0xFA79, 0x5070, 0xFA7A, 0x5042, 0xFA7B, 0x5094, 0xFA7C, 0x50F4, 0xFA7D, 0x50D8, 0xFA7E, 0x514A, + 0xFA80, 0x5164, 0xFA81, 0x519D, 0xFA82, 0x51BE, 0xFA83, 0x51EC, 0xFA84, 0x5215, 0xFA85, 0x529C, 0xFA86, 0x52A6, 0xFA87, 0x52C0, + 0xFA88, 0x52DB, 0xFA89, 0x5300, 0xFA8A, 0x5307, 0xFA8B, 0x5324, 0xFA8C, 0x5372, 0xFA8D, 0x5393, 0xFA8E, 0x53B2, 0xFA8F, 0x53DD, + 0xFA90, 0xFA0E, 0xFA91, 0x549C, 0xFA92, 0x548A, 0xFA93, 0x54A9, 0xFA94, 0x54FF, 0xFA95, 0x5586, 0xFA96, 0x5759, 0xFA97, 0x5765, + 0xFA98, 0x57AC, 0xFA99, 0x57C8, 0xFA9A, 0x57C7, 0xFA9B, 0xFA0F, 0xFA9C, 0xFA10, 0xFA9D, 0x589E, 0xFA9E, 0x58B2, 0xFA9F, 0x590B, + 0xFAA0, 0x5953, 0xFAA1, 0x595B, 0xFAA2, 0x595D, 0xFAA3, 0x5963, 0xFAA4, 0x59A4, 0xFAA5, 0x59BA, 0xFAA6, 0x5B56, 0xFAA7, 0x5BC0, + 0xFAA8, 0x752F, 0xFAA9, 0x5BD8, 0xFAAA, 0x5BEC, 0xFAAB, 0x5C1E, 0xFAAC, 0x5CA6, 0xFAAD, 0x5CBA, 0xFAAE, 0x5CF5, 0xFAAF, 0x5D27, + 0xFAB0, 0x5D53, 0xFAB1, 0xFA11, 0xFAB2, 0x5D42, 0xFAB3, 0x5D6D, 0xFAB4, 0x5DB8, 0xFAB5, 0x5DB9, 0xFAB6, 0x5DD0, 0xFAB7, 0x5F21, + 0xFAB8, 0x5F34, 0xFAB9, 0x5F67, 0xFABA, 0x5FB7, 0xFABB, 0x5FDE, 0xFABC, 0x605D, 0xFABD, 0x6085, 0xFABE, 0x608A, 0xFABF, 0x60DE, + 0xFAC0, 0x60D5, 0xFAC1, 0x6120, 0xFAC2, 0x60F2, 0xFAC3, 0x6111, 0xFAC4, 0x6137, 0xFAC5, 0x6130, 0xFAC6, 0x6198, 0xFAC7, 0x6213, + 0xFAC8, 0x62A6, 0xFAC9, 0x63F5, 0xFACA, 0x6460, 0xFACB, 0x649D, 0xFACC, 0x64CE, 0xFACD, 0x654E, 0xFACE, 0x6600, 0xFACF, 0x6615, + 0xFAD0, 0x663B, 0xFAD1, 0x6609, 0xFAD2, 0x662E, 0xFAD3, 0x661E, 0xFAD4, 0x6624, 0xFAD5, 0x6665, 0xFAD6, 0x6657, 0xFAD7, 0x6659, + 0xFAD8, 0xFA12, 0xFAD9, 0x6673, 0xFADA, 0x6699, 0xFADB, 0x66A0, 0xFADC, 0x66B2, 0xFADD, 0x66BF, 0xFADE, 0x66FA, 0xFADF, 0x670E, + 0xFAE0, 0xF929, 0xFAE1, 0x6766, 0xFAE2, 0x67BB, 0xFAE3, 0x6852, 0xFAE4, 0x67C0, 0xFAE5, 0x6801, 0xFAE6, 0x6844, 0xFAE7, 0x68CF, + 0xFAE8, 0xFA13, 0xFAE9, 0x6968, 0xFAEA, 0xFA14, 0xFAEB, 0x6998, 0xFAEC, 0x69E2, 0xFAED, 0x6A30, 0xFAEE, 0x6A6B, 0xFAEF, 0x6A46, + 0xFAF0, 0x6A73, 0xFAF1, 0x6A7E, 0xFAF2, 0x6AE2, 0xFAF3, 0x6AE4, 0xFAF4, 0x6BD6, 0xFAF5, 0x6C3F, 0xFAF6, 0x6C5C, 0xFAF7, 0x6C86, + 0xFAF8, 0x6C6F, 0xFAF9, 0x6CDA, 0xFAFA, 0x6D04, 0xFAFB, 0x6D87, 0xFAFC, 0x6D6F, 0xFB40, 0x6D96, 0xFB41, 0x6DAC, 0xFB42, 0x6DCF, + 0xFB43, 0x6DF8, 0xFB44, 0x6DF2, 0xFB45, 0x6DFC, 0xFB46, 0x6E39, 0xFB47, 0x6E5C, 0xFB48, 0x6E27, 0xFB49, 0x6E3C, 0xFB4A, 0x6EBF, + 0xFB4B, 0x6F88, 0xFB4C, 0x6FB5, 0xFB4D, 0x6FF5, 0xFB4E, 0x7005, 0xFB4F, 0x7007, 0xFB50, 0x7028, 0xFB51, 0x7085, 0xFB52, 0x70AB, + 0xFB53, 0x710F, 0xFB54, 0x7104, 0xFB55, 0x715C, 0xFB56, 0x7146, 0xFB57, 0x7147, 0xFB58, 0xFA15, 0xFB59, 0x71C1, 0xFB5A, 0x71FE, + 0xFB5B, 0x72B1, 0xFB5C, 0x72BE, 0xFB5D, 0x7324, 0xFB5E, 0xFA16, 0xFB5F, 0x7377, 0xFB60, 0x73BD, 0xFB61, 0x73C9, 0xFB62, 0x73D6, + 0xFB63, 0x73E3, 0xFB64, 0x73D2, 0xFB65, 0x7407, 0xFB66, 0x73F5, 0xFB67, 0x7426, 0xFB68, 0x742A, 0xFB69, 0x7429, 0xFB6A, 0x742E, + 0xFB6B, 0x7462, 0xFB6C, 0x7489, 0xFB6D, 0x749F, 0xFB6E, 0x7501, 0xFB6F, 0x756F, 0xFB70, 0x7682, 0xFB71, 0x769C, 0xFB72, 0x769E, + 0xFB73, 0x769B, 0xFB74, 0x76A6, 0xFB75, 0xFA17, 0xFB76, 0x7746, 0xFB77, 0x52AF, 0xFB78, 0x7821, 0xFB79, 0x784E, 0xFB7A, 0x7864, + 0xFB7B, 0x787A, 0xFB7C, 0x7930, 0xFB7D, 0xFA18, 0xFB7E, 0xFA19, 0xFB80, 0xFA1A, 0xFB81, 0x7994, 0xFB82, 0xFA1B, 0xFB83, 0x799B, + 0xFB84, 0x7AD1, 0xFB85, 0x7AE7, 0xFB86, 0xFA1C, 0xFB87, 0x7AEB, 0xFB88, 0x7B9E, 0xFB89, 0xFA1D, 0xFB8A, 0x7D48, 0xFB8B, 0x7D5C, + 0xFB8C, 0x7DB7, 0xFB8D, 0x7DA0, 0xFB8E, 0x7DD6, 0xFB8F, 0x7E52, 0xFB90, 0x7F47, 0xFB91, 0x7FA1, 0xFB92, 0xFA1E, 0xFB93, 0x8301, + 0xFB94, 0x8362, 0xFB95, 0x837F, 0xFB96, 0x83C7, 0xFB97, 0x83F6, 0xFB98, 0x8448, 0xFB99, 0x84B4, 0xFB9A, 0x8553, 0xFB9B, 0x8559, + 0xFB9C, 0x856B, 0xFB9D, 0xFA1F, 0xFB9E, 0x85B0, 0xFB9F, 0xFA20, 0xFBA0, 0xFA21, 0xFBA1, 0x8807, 0xFBA2, 0x88F5, 0xFBA3, 0x8A12, + 0xFBA4, 0x8A37, 0xFBA5, 0x8A79, 0xFBA6, 0x8AA7, 0xFBA7, 0x8ABE, 0xFBA8, 0x8ADF, 0xFBA9, 0xFA22, 0xFBAA, 0x8AF6, 0xFBAB, 0x8B53, + 0xFBAC, 0x8B7F, 0xFBAD, 0x8CF0, 0xFBAE, 0x8CF4, 0xFBAF, 0x8D12, 0xFBB0, 0x8D76, 0xFBB1, 0xFA23, 0xFBB2, 0x8ECF, 0xFBB3, 0xFA24, + 0xFBB4, 0xFA25, 0xFBB5, 0x9067, 0xFBB6, 0x90DE, 0xFBB7, 0xFA26, 0xFBB8, 0x9115, 0xFBB9, 0x9127, 0xFBBA, 0x91DA, 0xFBBB, 0x91D7, + 0xFBBC, 0x91DE, 0xFBBD, 0x91ED, 0xFBBE, 0x91EE, 0xFBBF, 0x91E4, 0xFBC0, 0x91E5, 0xFBC1, 0x9206, 0xFBC2, 0x9210, 0xFBC3, 0x920A, + 0xFBC4, 0x923A, 0xFBC5, 0x9240, 0xFBC6, 0x923C, 0xFBC7, 0x924E, 0xFBC8, 0x9259, 0xFBC9, 0x9251, 0xFBCA, 0x9239, 0xFBCB, 0x9267, + 0xFBCC, 0x92A7, 0xFBCD, 0x9277, 0xFBCE, 0x9278, 0xFBCF, 0x92E7, 0xFBD0, 0x92D7, 0xFBD1, 0x92D9, 0xFBD2, 0x92D0, 0xFBD3, 0xFA27, + 0xFBD4, 0x92D5, 0xFBD5, 0x92E0, 0xFBD6, 0x92D3, 0xFBD7, 0x9325, 0xFBD8, 0x9321, 0xFBD9, 0x92FB, 0xFBDA, 0xFA28, 0xFBDB, 0x931E, + 0xFBDC, 0x92FF, 0xFBDD, 0x931D, 0xFBDE, 0x9302, 0xFBDF, 0x9370, 0xFBE0, 0x9357, 0xFBE1, 0x93A4, 0xFBE2, 0x93C6, 0xFBE3, 0x93DE, + 0xFBE4, 0x93F8, 0xFBE5, 0x9431, 0xFBE6, 0x9445, 0xFBE7, 0x9448, 0xFBE8, 0x9592, 0xFBE9, 0xF9DC, 0xFBEA, 0xFA29, 0xFBEB, 0x969D, + 0xFBEC, 0x96AF, 0xFBED, 0x9733, 0xFBEE, 0x973B, 0xFBEF, 0x9743, 0xFBF0, 0x974D, 0xFBF1, 0x974F, 0xFBF2, 0x9751, 0xFBF3, 0x9755, + 0xFBF4, 0x9857, 0xFBF5, 0x9865, 0xFBF6, 0xFA2A, 0xFBF7, 0xFA2B, 0xFBF8, 0x9927, 0xFBF9, 0xFA2C, 0xFBFA, 0x999E, 0xFBFB, 0x9A4E, + 0xFBFC, 0x9AD9, 0xFC40, 0x9ADC, 0xFC41, 0x9B75, 0xFC42, 0x9B72, 0xFC43, 0x9B8F, 0xFC44, 0x9BB1, 0xFC45, 0x9BBB, 0xFC46, 0x9C00, + 0xFC47, 0x9D70, 0xFC48, 0x9D6B, 0xFC49, 0xFA2D, 0xFC4A, 0x9E19, 0xFC4B, 0x9ED1, 0, 0 +}; +#endif + +#if FF_CODE_PAGE == 936 || FF_CODE_PAGE == 0 /* Simplified Chinese */ +static const WCHAR uni2oem936[] = { /* Unicode --> GBK pairs */ + 0x00A4, 0xA1E8, 0x00A7, 0xA1EC, 0x00A8, 0xA1A7, 0x00B0, 0xA1E3, 0x00B1, 0xA1C0, 0x00B7, 0xA1A4, 0x00D7, 0xA1C1, 0x00E0, 0xA8A4, + 0x00E1, 0xA8A2, 0x00E8, 0xA8A8, 0x00E9, 0xA8A6, 0x00EA, 0xA8BA, 0x00EC, 0xA8AC, 0x00ED, 0xA8AA, 0x00F2, 0xA8B0, 0x00F3, 0xA8AE, + 0x00F7, 0xA1C2, 0x00F9, 0xA8B4, 0x00FA, 0xA8B2, 0x00FC, 0xA8B9, 0x0101, 0xA8A1, 0x0113, 0xA8A5, 0x011B, 0xA8A7, 0x012B, 0xA8A9, + 0x0144, 0xA8BD, 0x0148, 0xA8BE, 0x014D, 0xA8AD, 0x016B, 0xA8B1, 0x01CE, 0xA8A3, 0x01D0, 0xA8AB, 0x01D2, 0xA8AF, 0x01D4, 0xA8B3, + 0x01D6, 0xA8B5, 0x01D8, 0xA8B6, 0x01DA, 0xA8B7, 0x01DC, 0xA8B8, 0x0251, 0xA8BB, 0x0261, 0xA8C0, 0x02C7, 0xA1A6, 0x02C9, 0xA1A5, + 0x02CA, 0xA840, 0x02CB, 0xA841, 0x02D9, 0xA842, 0x0391, 0xA6A1, 0x0392, 0xA6A2, 0x0393, 0xA6A3, 0x0394, 0xA6A4, 0x0395, 0xA6A5, + 0x0396, 0xA6A6, 0x0397, 0xA6A7, 0x0398, 0xA6A8, 0x0399, 0xA6A9, 0x039A, 0xA6AA, 0x039B, 0xA6AB, 0x039C, 0xA6AC, 0x039D, 0xA6AD, + 0x039E, 0xA6AE, 0x039F, 0xA6AF, 0x03A0, 0xA6B0, 0x03A1, 0xA6B1, 0x03A3, 0xA6B2, 0x03A4, 0xA6B3, 0x03A5, 0xA6B4, 0x03A6, 0xA6B5, + 0x03A7, 0xA6B6, 0x03A8, 0xA6B7, 0x03A9, 0xA6B8, 0x03B1, 0xA6C1, 0x03B2, 0xA6C2, 0x03B3, 0xA6C3, 0x03B4, 0xA6C4, 0x03B5, 0xA6C5, + 0x03B6, 0xA6C6, 0x03B7, 0xA6C7, 0x03B8, 0xA6C8, 0x03B9, 0xA6C9, 0x03BA, 0xA6CA, 0x03BB, 0xA6CB, 0x03BC, 0xA6CC, 0x03BD, 0xA6CD, + 0x03BE, 0xA6CE, 0x03BF, 0xA6CF, 0x03C0, 0xA6D0, 0x03C1, 0xA6D1, 0x03C3, 0xA6D2, 0x03C4, 0xA6D3, 0x03C5, 0xA6D4, 0x03C6, 0xA6D5, + 0x03C7, 0xA6D6, 0x03C8, 0xA6D7, 0x03C9, 0xA6D8, 0x0401, 0xA7A7, 0x0410, 0xA7A1, 0x0411, 0xA7A2, 0x0412, 0xA7A3, 0x0413, 0xA7A4, + 0x0414, 0xA7A5, 0x0415, 0xA7A6, 0x0416, 0xA7A8, 0x0417, 0xA7A9, 0x0418, 0xA7AA, 0x0419, 0xA7AB, 0x041A, 0xA7AC, 0x041B, 0xA7AD, + 0x041C, 0xA7AE, 0x041D, 0xA7AF, 0x041E, 0xA7B0, 0x041F, 0xA7B1, 0x0420, 0xA7B2, 0x0421, 0xA7B3, 0x0422, 0xA7B4, 0x0423, 0xA7B5, + 0x0424, 0xA7B6, 0x0425, 0xA7B7, 0x0426, 0xA7B8, 0x0427, 0xA7B9, 0x0428, 0xA7BA, 0x0429, 0xA7BB, 0x042A, 0xA7BC, 0x042B, 0xA7BD, + 0x042C, 0xA7BE, 0x042D, 0xA7BF, 0x042E, 0xA7C0, 0x042F, 0xA7C1, 0x0430, 0xA7D1, 0x0431, 0xA7D2, 0x0432, 0xA7D3, 0x0433, 0xA7D4, + 0x0434, 0xA7D5, 0x0435, 0xA7D6, 0x0436, 0xA7D8, 0x0437, 0xA7D9, 0x0438, 0xA7DA, 0x0439, 0xA7DB, 0x043A, 0xA7DC, 0x043B, 0xA7DD, + 0x043C, 0xA7DE, 0x043D, 0xA7DF, 0x043E, 0xA7E0, 0x043F, 0xA7E1, 0x0440, 0xA7E2, 0x0441, 0xA7E3, 0x0442, 0xA7E4, 0x0443, 0xA7E5, + 0x0444, 0xA7E6, 0x0445, 0xA7E7, 0x0446, 0xA7E8, 0x0447, 0xA7E9, 0x0448, 0xA7EA, 0x0449, 0xA7EB, 0x044A, 0xA7EC, 0x044B, 0xA7ED, + 0x044C, 0xA7EE, 0x044D, 0xA7EF, 0x044E, 0xA7F0, 0x044F, 0xA7F1, 0x0451, 0xA7D7, 0x2010, 0xA95C, 0x2013, 0xA843, 0x2014, 0xA1AA, + 0x2015, 0xA844, 0x2016, 0xA1AC, 0x2018, 0xA1AE, 0x2019, 0xA1AF, 0x201C, 0xA1B0, 0x201D, 0xA1B1, 0x2025, 0xA845, 0x2026, 0xA1AD, + 0x2030, 0xA1EB, 0x2032, 0xA1E4, 0x2033, 0xA1E5, 0x2035, 0xA846, 0x203B, 0xA1F9, 0x20AC, 0x0080, 0x2103, 0xA1E6, 0x2105, 0xA847, + 0x2109, 0xA848, 0x2116, 0xA1ED, 0x2121, 0xA959, 0x2160, 0xA2F1, 0x2161, 0xA2F2, 0x2162, 0xA2F3, 0x2163, 0xA2F4, 0x2164, 0xA2F5, + 0x2165, 0xA2F6, 0x2166, 0xA2F7, 0x2167, 0xA2F8, 0x2168, 0xA2F9, 0x2169, 0xA2FA, 0x216A, 0xA2FB, 0x216B, 0xA2FC, 0x2170, 0xA2A1, + 0x2171, 0xA2A2, 0x2172, 0xA2A3, 0x2173, 0xA2A4, 0x2174, 0xA2A5, 0x2175, 0xA2A6, 0x2176, 0xA2A7, 0x2177, 0xA2A8, 0x2178, 0xA2A9, + 0x2179, 0xA2AA, 0x2190, 0xA1FB, 0x2191, 0xA1FC, 0x2192, 0xA1FA, 0x2193, 0xA1FD, 0x2196, 0xA849, 0x2197, 0xA84A, 0x2198, 0xA84B, + 0x2199, 0xA84C, 0x2208, 0xA1CA, 0x220F, 0xA1C7, 0x2211, 0xA1C6, 0x2215, 0xA84D, 0x221A, 0xA1CC, 0x221D, 0xA1D8, 0x221E, 0xA1DE, + 0x221F, 0xA84E, 0x2220, 0xA1CF, 0x2223, 0xA84F, 0x2225, 0xA1CE, 0x2227, 0xA1C4, 0x2228, 0xA1C5, 0x2229, 0xA1C9, 0x222A, 0xA1C8, + 0x222B, 0xA1D2, 0x222E, 0xA1D3, 0x2234, 0xA1E0, 0x2235, 0xA1DF, 0x2236, 0xA1C3, 0x2237, 0xA1CB, 0x223D, 0xA1D7, 0x2248, 0xA1D6, + 0x224C, 0xA1D5, 0x2252, 0xA850, 0x2260, 0xA1D9, 0x2261, 0xA1D4, 0x2264, 0xA1DC, 0x2265, 0xA1DD, 0x2266, 0xA851, 0x2267, 0xA852, + 0x226E, 0xA1DA, 0x226F, 0xA1DB, 0x2295, 0xA892, 0x2299, 0xA1D1, 0x22A5, 0xA1CD, 0x22BF, 0xA853, 0x2312, 0xA1D0, 0x2460, 0xA2D9, + 0x2461, 0xA2DA, 0x2462, 0xA2DB, 0x2463, 0xA2DC, 0x2464, 0xA2DD, 0x2465, 0xA2DE, 0x2466, 0xA2DF, 0x2467, 0xA2E0, 0x2468, 0xA2E1, + 0x2469, 0xA2E2, 0x2474, 0xA2C5, 0x2475, 0xA2C6, 0x2476, 0xA2C7, 0x2477, 0xA2C8, 0x2478, 0xA2C9, 0x2479, 0xA2CA, 0x247A, 0xA2CB, + 0x247B, 0xA2CC, 0x247C, 0xA2CD, 0x247D, 0xA2CE, 0x247E, 0xA2CF, 0x247F, 0xA2D0, 0x2480, 0xA2D1, 0x2481, 0xA2D2, 0x2482, 0xA2D3, + 0x2483, 0xA2D4, 0x2484, 0xA2D5, 0x2485, 0xA2D6, 0x2486, 0xA2D7, 0x2487, 0xA2D8, 0x2488, 0xA2B1, 0x2489, 0xA2B2, 0x248A, 0xA2B3, + 0x248B, 0xA2B4, 0x248C, 0xA2B5, 0x248D, 0xA2B6, 0x248E, 0xA2B7, 0x248F, 0xA2B8, 0x2490, 0xA2B9, 0x2491, 0xA2BA, 0x2492, 0xA2BB, + 0x2493, 0xA2BC, 0x2494, 0xA2BD, 0x2495, 0xA2BE, 0x2496, 0xA2BF, 0x2497, 0xA2C0, 0x2498, 0xA2C1, 0x2499, 0xA2C2, 0x249A, 0xA2C3, + 0x249B, 0xA2C4, 0x2500, 0xA9A4, 0x2501, 0xA9A5, 0x2502, 0xA9A6, 0x2503, 0xA9A7, 0x2504, 0xA9A8, 0x2505, 0xA9A9, 0x2506, 0xA9AA, + 0x2507, 0xA9AB, 0x2508, 0xA9AC, 0x2509, 0xA9AD, 0x250A, 0xA9AE, 0x250B, 0xA9AF, 0x250C, 0xA9B0, 0x250D, 0xA9B1, 0x250E, 0xA9B2, + 0x250F, 0xA9B3, 0x2510, 0xA9B4, 0x2511, 0xA9B5, 0x2512, 0xA9B6, 0x2513, 0xA9B7, 0x2514, 0xA9B8, 0x2515, 0xA9B9, 0x2516, 0xA9BA, + 0x2517, 0xA9BB, 0x2518, 0xA9BC, 0x2519, 0xA9BD, 0x251A, 0xA9BE, 0x251B, 0xA9BF, 0x251C, 0xA9C0, 0x251D, 0xA9C1, 0x251E, 0xA9C2, + 0x251F, 0xA9C3, 0x2520, 0xA9C4, 0x2521, 0xA9C5, 0x2522, 0xA9C6, 0x2523, 0xA9C7, 0x2524, 0xA9C8, 0x2525, 0xA9C9, 0x2526, 0xA9CA, + 0x2527, 0xA9CB, 0x2528, 0xA9CC, 0x2529, 0xA9CD, 0x252A, 0xA9CE, 0x252B, 0xA9CF, 0x252C, 0xA9D0, 0x252D, 0xA9D1, 0x252E, 0xA9D2, + 0x252F, 0xA9D3, 0x2530, 0xA9D4, 0x2531, 0xA9D5, 0x2532, 0xA9D6, 0x2533, 0xA9D7, 0x2534, 0xA9D8, 0x2535, 0xA9D9, 0x2536, 0xA9DA, + 0x2537, 0xA9DB, 0x2538, 0xA9DC, 0x2539, 0xA9DD, 0x253A, 0xA9DE, 0x253B, 0xA9DF, 0x253C, 0xA9E0, 0x253D, 0xA9E1, 0x253E, 0xA9E2, + 0x253F, 0xA9E3, 0x2540, 0xA9E4, 0x2541, 0xA9E5, 0x2542, 0xA9E6, 0x2543, 0xA9E7, 0x2544, 0xA9E8, 0x2545, 0xA9E9, 0x2546, 0xA9EA, + 0x2547, 0xA9EB, 0x2548, 0xA9EC, 0x2549, 0xA9ED, 0x254A, 0xA9EE, 0x254B, 0xA9EF, 0x2550, 0xA854, 0x2551, 0xA855, 0x2552, 0xA856, + 0x2553, 0xA857, 0x2554, 0xA858, 0x2555, 0xA859, 0x2556, 0xA85A, 0x2557, 0xA85B, 0x2558, 0xA85C, 0x2559, 0xA85D, 0x255A, 0xA85E, + 0x255B, 0xA85F, 0x255C, 0xA860, 0x255D, 0xA861, 0x255E, 0xA862, 0x255F, 0xA863, 0x2560, 0xA864, 0x2561, 0xA865, 0x2562, 0xA866, + 0x2563, 0xA867, 0x2564, 0xA868, 0x2565, 0xA869, 0x2566, 0xA86A, 0x2567, 0xA86B, 0x2568, 0xA86C, 0x2569, 0xA86D, 0x256A, 0xA86E, + 0x256B, 0xA86F, 0x256C, 0xA870, 0x256D, 0xA871, 0x256E, 0xA872, 0x256F, 0xA873, 0x2570, 0xA874, 0x2571, 0xA875, 0x2572, 0xA876, + 0x2573, 0xA877, 0x2581, 0xA878, 0x2582, 0xA879, 0x2583, 0xA87A, 0x2584, 0xA87B, 0x2585, 0xA87C, 0x2586, 0xA87D, 0x2587, 0xA87E, + 0x2588, 0xA880, 0x2589, 0xA881, 0x258A, 0xA882, 0x258B, 0xA883, 0x258C, 0xA884, 0x258D, 0xA885, 0x258E, 0xA886, 0x258F, 0xA887, + 0x2593, 0xA888, 0x2594, 0xA889, 0x2595, 0xA88A, 0x25A0, 0xA1F6, 0x25A1, 0xA1F5, 0x25B2, 0xA1F8, 0x25B3, 0xA1F7, 0x25BC, 0xA88B, + 0x25BD, 0xA88C, 0x25C6, 0xA1F4, 0x25C7, 0xA1F3, 0x25CB, 0xA1F0, 0x25CE, 0xA1F2, 0x25CF, 0xA1F1, 0x25E2, 0xA88D, 0x25E3, 0xA88E, + 0x25E4, 0xA88F, 0x25E5, 0xA890, 0x2605, 0xA1EF, 0x2606, 0xA1EE, 0x2609, 0xA891, 0x2640, 0xA1E2, 0x2642, 0xA1E1, 0x3000, 0xA1A1, + 0x3001, 0xA1A2, 0x3002, 0xA1A3, 0x3003, 0xA1A8, 0x3005, 0xA1A9, 0x3006, 0xA965, 0x3007, 0xA996, 0x3008, 0xA1B4, 0x3009, 0xA1B5, + 0x300A, 0xA1B6, 0x300B, 0xA1B7, 0x300C, 0xA1B8, 0x300D, 0xA1B9, 0x300E, 0xA1BA, 0x300F, 0xA1BB, 0x3010, 0xA1BE, 0x3011, 0xA1BF, + 0x3012, 0xA893, 0x3013, 0xA1FE, 0x3014, 0xA1B2, 0x3015, 0xA1B3, 0x3016, 0xA1BC, 0x3017, 0xA1BD, 0x301D, 0xA894, 0x301E, 0xA895, + 0x3021, 0xA940, 0x3022, 0xA941, 0x3023, 0xA942, 0x3024, 0xA943, 0x3025, 0xA944, 0x3026, 0xA945, 0x3027, 0xA946, 0x3028, 0xA947, + 0x3029, 0xA948, 0x3041, 0xA4A1, 0x3042, 0xA4A2, 0x3043, 0xA4A3, 0x3044, 0xA4A4, 0x3045, 0xA4A5, 0x3046, 0xA4A6, 0x3047, 0xA4A7, + 0x3048, 0xA4A8, 0x3049, 0xA4A9, 0x304A, 0xA4AA, 0x304B, 0xA4AB, 0x304C, 0xA4AC, 0x304D, 0xA4AD, 0x304E, 0xA4AE, 0x304F, 0xA4AF, + 0x3050, 0xA4B0, 0x3051, 0xA4B1, 0x3052, 0xA4B2, 0x3053, 0xA4B3, 0x3054, 0xA4B4, 0x3055, 0xA4B5, 0x3056, 0xA4B6, 0x3057, 0xA4B7, + 0x3058, 0xA4B8, 0x3059, 0xA4B9, 0x305A, 0xA4BA, 0x305B, 0xA4BB, 0x305C, 0xA4BC, 0x305D, 0xA4BD, 0x305E, 0xA4BE, 0x305F, 0xA4BF, + 0x3060, 0xA4C0, 0x3061, 0xA4C1, 0x3062, 0xA4C2, 0x3063, 0xA4C3, 0x3064, 0xA4C4, 0x3065, 0xA4C5, 0x3066, 0xA4C6, 0x3067, 0xA4C7, + 0x3068, 0xA4C8, 0x3069, 0xA4C9, 0x306A, 0xA4CA, 0x306B, 0xA4CB, 0x306C, 0xA4CC, 0x306D, 0xA4CD, 0x306E, 0xA4CE, 0x306F, 0xA4CF, + 0x3070, 0xA4D0, 0x3071, 0xA4D1, 0x3072, 0xA4D2, 0x3073, 0xA4D3, 0x3074, 0xA4D4, 0x3075, 0xA4D5, 0x3076, 0xA4D6, 0x3077, 0xA4D7, + 0x3078, 0xA4D8, 0x3079, 0xA4D9, 0x307A, 0xA4DA, 0x307B, 0xA4DB, 0x307C, 0xA4DC, 0x307D, 0xA4DD, 0x307E, 0xA4DE, 0x307F, 0xA4DF, + 0x3080, 0xA4E0, 0x3081, 0xA4E1, 0x3082, 0xA4E2, 0x3083, 0xA4E3, 0x3084, 0xA4E4, 0x3085, 0xA4E5, 0x3086, 0xA4E6, 0x3087, 0xA4E7, + 0x3088, 0xA4E8, 0x3089, 0xA4E9, 0x308A, 0xA4EA, 0x308B, 0xA4EB, 0x308C, 0xA4EC, 0x308D, 0xA4ED, 0x308E, 0xA4EE, 0x308F, 0xA4EF, + 0x3090, 0xA4F0, 0x3091, 0xA4F1, 0x3092, 0xA4F2, 0x3093, 0xA4F3, 0x309B, 0xA961, 0x309C, 0xA962, 0x309D, 0xA966, 0x309E, 0xA967, + 0x30A1, 0xA5A1, 0x30A2, 0xA5A2, 0x30A3, 0xA5A3, 0x30A4, 0xA5A4, 0x30A5, 0xA5A5, 0x30A6, 0xA5A6, 0x30A7, 0xA5A7, 0x30A8, 0xA5A8, + 0x30A9, 0xA5A9, 0x30AA, 0xA5AA, 0x30AB, 0xA5AB, 0x30AC, 0xA5AC, 0x30AD, 0xA5AD, 0x30AE, 0xA5AE, 0x30AF, 0xA5AF, 0x30B0, 0xA5B0, + 0x30B1, 0xA5B1, 0x30B2, 0xA5B2, 0x30B3, 0xA5B3, 0x30B4, 0xA5B4, 0x30B5, 0xA5B5, 0x30B6, 0xA5B6, 0x30B7, 0xA5B7, 0x30B8, 0xA5B8, + 0x30B9, 0xA5B9, 0x30BA, 0xA5BA, 0x30BB, 0xA5BB, 0x30BC, 0xA5BC, 0x30BD, 0xA5BD, 0x30BE, 0xA5BE, 0x30BF, 0xA5BF, 0x30C0, 0xA5C0, + 0x30C1, 0xA5C1, 0x30C2, 0xA5C2, 0x30C3, 0xA5C3, 0x30C4, 0xA5C4, 0x30C5, 0xA5C5, 0x30C6, 0xA5C6, 0x30C7, 0xA5C7, 0x30C8, 0xA5C8, + 0x30C9, 0xA5C9, 0x30CA, 0xA5CA, 0x30CB, 0xA5CB, 0x30CC, 0xA5CC, 0x30CD, 0xA5CD, 0x30CE, 0xA5CE, 0x30CF, 0xA5CF, 0x30D0, 0xA5D0, + 0x30D1, 0xA5D1, 0x30D2, 0xA5D2, 0x30D3, 0xA5D3, 0x30D4, 0xA5D4, 0x30D5, 0xA5D5, 0x30D6, 0xA5D6, 0x30D7, 0xA5D7, 0x30D8, 0xA5D8, + 0x30D9, 0xA5D9, 0x30DA, 0xA5DA, 0x30DB, 0xA5DB, 0x30DC, 0xA5DC, 0x30DD, 0xA5DD, 0x30DE, 0xA5DE, 0x30DF, 0xA5DF, 0x30E0, 0xA5E0, + 0x30E1, 0xA5E1, 0x30E2, 0xA5E2, 0x30E3, 0xA5E3, 0x30E4, 0xA5E4, 0x30E5, 0xA5E5, 0x30E6, 0xA5E6, 0x30E7, 0xA5E7, 0x30E8, 0xA5E8, + 0x30E9, 0xA5E9, 0x30EA, 0xA5EA, 0x30EB, 0xA5EB, 0x30EC, 0xA5EC, 0x30ED, 0xA5ED, 0x30EE, 0xA5EE, 0x30EF, 0xA5EF, 0x30F0, 0xA5F0, + 0x30F1, 0xA5F1, 0x30F2, 0xA5F2, 0x30F3, 0xA5F3, 0x30F4, 0xA5F4, 0x30F5, 0xA5F5, 0x30F6, 0xA5F6, 0x30FC, 0xA960, 0x30FD, 0xA963, + 0x30FE, 0xA964, 0x3105, 0xA8C5, 0x3106, 0xA8C6, 0x3107, 0xA8C7, 0x3108, 0xA8C8, 0x3109, 0xA8C9, 0x310A, 0xA8CA, 0x310B, 0xA8CB, + 0x310C, 0xA8CC, 0x310D, 0xA8CD, 0x310E, 0xA8CE, 0x310F, 0xA8CF, 0x3110, 0xA8D0, 0x3111, 0xA8D1, 0x3112, 0xA8D2, 0x3113, 0xA8D3, + 0x3114, 0xA8D4, 0x3115, 0xA8D5, 0x3116, 0xA8D6, 0x3117, 0xA8D7, 0x3118, 0xA8D8, 0x3119, 0xA8D9, 0x311A, 0xA8DA, 0x311B, 0xA8DB, + 0x311C, 0xA8DC, 0x311D, 0xA8DD, 0x311E, 0xA8DE, 0x311F, 0xA8DF, 0x3120, 0xA8E0, 0x3121, 0xA8E1, 0x3122, 0xA8E2, 0x3123, 0xA8E3, + 0x3124, 0xA8E4, 0x3125, 0xA8E5, 0x3126, 0xA8E6, 0x3127, 0xA8E7, 0x3128, 0xA8E8, 0x3129, 0xA8E9, 0x3220, 0xA2E5, 0x3221, 0xA2E6, + 0x3222, 0xA2E7, 0x3223, 0xA2E8, 0x3224, 0xA2E9, 0x3225, 0xA2EA, 0x3226, 0xA2EB, 0x3227, 0xA2EC, 0x3228, 0xA2ED, 0x3229, 0xA2EE, + 0x3231, 0xA95A, 0x32A3, 0xA949, 0x338E, 0xA94A, 0x338F, 0xA94B, 0x339C, 0xA94C, 0x339D, 0xA94D, 0x339E, 0xA94E, 0x33A1, 0xA94F, + 0x33C4, 0xA950, 0x33CE, 0xA951, 0x33D1, 0xA952, 0x33D2, 0xA953, 0x33D5, 0xA954, 0x4E00, 0xD2BB, 0x4E01, 0xB6A1, 0x4E02, 0x8140, + 0x4E03, 0xC6DF, 0x4E04, 0x8141, 0x4E05, 0x8142, 0x4E06, 0x8143, 0x4E07, 0xCDF2, 0x4E08, 0xD5C9, 0x4E09, 0xC8FD, 0x4E0A, 0xC9CF, + 0x4E0B, 0xCFC2, 0x4E0C, 0xD8A2, 0x4E0D, 0xB2BB, 0x4E0E, 0xD3EB, 0x4E0F, 0x8144, 0x4E10, 0xD8A4, 0x4E11, 0xB3F3, 0x4E12, 0x8145, + 0x4E13, 0xD7A8, 0x4E14, 0xC7D2, 0x4E15, 0xD8A7, 0x4E16, 0xCAC0, 0x4E17, 0x8146, 0x4E18, 0xC7F0, 0x4E19, 0xB1FB, 0x4E1A, 0xD2B5, + 0x4E1B, 0xB4D4, 0x4E1C, 0xB6AB, 0x4E1D, 0xCBBF, 0x4E1E, 0xD8A9, 0x4E1F, 0x8147, 0x4E20, 0x8148, 0x4E21, 0x8149, 0x4E22, 0xB6AA, + 0x4E23, 0x814A, 0x4E24, 0xC1BD, 0x4E25, 0xD1CF, 0x4E26, 0x814B, 0x4E27, 0xC9A5, 0x4E28, 0xD8AD, 0x4E29, 0x814C, 0x4E2A, 0xB8F6, + 0x4E2B, 0xD1BE, 0x4E2C, 0xE3DC, 0x4E2D, 0xD6D0, 0x4E2E, 0x814D, 0x4E2F, 0x814E, 0x4E30, 0xB7E1, 0x4E31, 0x814F, 0x4E32, 0xB4AE, + 0x4E33, 0x8150, 0x4E34, 0xC1D9, 0x4E35, 0x8151, 0x4E36, 0xD8BC, 0x4E37, 0x8152, 0x4E38, 0xCDE8, 0x4E39, 0xB5A4, 0x4E3A, 0xCEAA, + 0x4E3B, 0xD6F7, 0x4E3C, 0x8153, 0x4E3D, 0xC0F6, 0x4E3E, 0xBED9, 0x4E3F, 0xD8AF, 0x4E40, 0x8154, 0x4E41, 0x8155, 0x4E42, 0x8156, + 0x4E43, 0xC4CB, 0x4E44, 0x8157, 0x4E45, 0xBEC3, 0x4E46, 0x8158, 0x4E47, 0xD8B1, 0x4E48, 0xC3B4, 0x4E49, 0xD2E5, 0x4E4A, 0x8159, + 0x4E4B, 0xD6AE, 0x4E4C, 0xCEDA, 0x4E4D, 0xD5A7, 0x4E4E, 0xBAF5, 0x4E4F, 0xB7A6, 0x4E50, 0xC0D6, 0x4E51, 0x815A, 0x4E52, 0xC6B9, + 0x4E53, 0xC5D2, 0x4E54, 0xC7C7, 0x4E55, 0x815B, 0x4E56, 0xB9D4, 0x4E57, 0x815C, 0x4E58, 0xB3CB, 0x4E59, 0xD2D2, 0x4E5A, 0x815D, + 0x4E5B, 0x815E, 0x4E5C, 0xD8BF, 0x4E5D, 0xBEC5, 0x4E5E, 0xC6F2, 0x4E5F, 0xD2B2, 0x4E60, 0xCFB0, 0x4E61, 0xCFE7, 0x4E62, 0x815F, + 0x4E63, 0x8160, 0x4E64, 0x8161, 0x4E65, 0x8162, 0x4E66, 0xCAE9, 0x4E67, 0x8163, 0x4E68, 0x8164, 0x4E69, 0xD8C0, 0x4E6A, 0x8165, + 0x4E6B, 0x8166, 0x4E6C, 0x8167, 0x4E6D, 0x8168, 0x4E6E, 0x8169, 0x4E6F, 0x816A, 0x4E70, 0xC2F2, 0x4E71, 0xC2D2, 0x4E72, 0x816B, + 0x4E73, 0xC8E9, 0x4E74, 0x816C, 0x4E75, 0x816D, 0x4E76, 0x816E, 0x4E77, 0x816F, 0x4E78, 0x8170, 0x4E79, 0x8171, 0x4E7A, 0x8172, + 0x4E7B, 0x8173, 0x4E7C, 0x8174, 0x4E7D, 0x8175, 0x4E7E, 0xC7AC, 0x4E7F, 0x8176, 0x4E80, 0x8177, 0x4E81, 0x8178, 0x4E82, 0x8179, + 0x4E83, 0x817A, 0x4E84, 0x817B, 0x4E85, 0x817C, 0x4E86, 0xC1CB, 0x4E87, 0x817D, 0x4E88, 0xD3E8, 0x4E89, 0xD5F9, 0x4E8A, 0x817E, + 0x4E8B, 0xCAC2, 0x4E8C, 0xB6FE, 0x4E8D, 0xD8A1, 0x4E8E, 0xD3DA, 0x4E8F, 0xBFF7, 0x4E90, 0x8180, 0x4E91, 0xD4C6, 0x4E92, 0xBBA5, + 0x4E93, 0xD8C1, 0x4E94, 0xCEE5, 0x4E95, 0xBEAE, 0x4E96, 0x8181, 0x4E97, 0x8182, 0x4E98, 0xD8A8, 0x4E99, 0x8183, 0x4E9A, 0xD1C7, + 0x4E9B, 0xD0A9, 0x4E9C, 0x8184, 0x4E9D, 0x8185, 0x4E9E, 0x8186, 0x4E9F, 0xD8BD, 0x4EA0, 0xD9EF, 0x4EA1, 0xCDF6, 0x4EA2, 0xBFBA, + 0x4EA3, 0x8187, 0x4EA4, 0xBDBB, 0x4EA5, 0xBAA5, 0x4EA6, 0xD2E0, 0x4EA7, 0xB2FA, 0x4EA8, 0xBAE0, 0x4EA9, 0xC4B6, 0x4EAA, 0x8188, + 0x4EAB, 0xCFED, 0x4EAC, 0xBEA9, 0x4EAD, 0xCDA4, 0x4EAE, 0xC1C1, 0x4EAF, 0x8189, 0x4EB0, 0x818A, 0x4EB1, 0x818B, 0x4EB2, 0xC7D7, + 0x4EB3, 0xD9F1, 0x4EB4, 0x818C, 0x4EB5, 0xD9F4, 0x4EB6, 0x818D, 0x4EB7, 0x818E, 0x4EB8, 0x818F, 0x4EB9, 0x8190, 0x4EBA, 0xC8CB, + 0x4EBB, 0xD8E9, 0x4EBC, 0x8191, 0x4EBD, 0x8192, 0x4EBE, 0x8193, 0x4EBF, 0xD2DA, 0x4EC0, 0xCAB2, 0x4EC1, 0xC8CA, 0x4EC2, 0xD8EC, + 0x4EC3, 0xD8EA, 0x4EC4, 0xD8C6, 0x4EC5, 0xBDF6, 0x4EC6, 0xC6CD, 0x4EC7, 0xB3F0, 0x4EC8, 0x8194, 0x4EC9, 0xD8EB, 0x4ECA, 0xBDF1, + 0x4ECB, 0xBDE9, 0x4ECC, 0x8195, 0x4ECD, 0xC8D4, 0x4ECE, 0xB4D3, 0x4ECF, 0x8196, 0x4ED0, 0x8197, 0x4ED1, 0xC2D8, 0x4ED2, 0x8198, + 0x4ED3, 0xB2D6, 0x4ED4, 0xD7D0, 0x4ED5, 0xCACB, 0x4ED6, 0xCBFB, 0x4ED7, 0xD5CC, 0x4ED8, 0xB8B6, 0x4ED9, 0xCFC9, 0x4EDA, 0x8199, + 0x4EDB, 0x819A, 0x4EDC, 0x819B, 0x4EDD, 0xD9DA, 0x4EDE, 0xD8F0, 0x4EDF, 0xC7AA, 0x4EE0, 0x819C, 0x4EE1, 0xD8EE, 0x4EE2, 0x819D, + 0x4EE3, 0xB4FA, 0x4EE4, 0xC1EE, 0x4EE5, 0xD2D4, 0x4EE6, 0x819E, 0x4EE7, 0x819F, 0x4EE8, 0xD8ED, 0x4EE9, 0x81A0, 0x4EEA, 0xD2C7, + 0x4EEB, 0xD8EF, 0x4EEC, 0xC3C7, 0x4EED, 0x81A1, 0x4EEE, 0x81A2, 0x4EEF, 0x81A3, 0x4EF0, 0xD1F6, 0x4EF1, 0x81A4, 0x4EF2, 0xD6D9, + 0x4EF3, 0xD8F2, 0x4EF4, 0x81A5, 0x4EF5, 0xD8F5, 0x4EF6, 0xBCFE, 0x4EF7, 0xBCDB, 0x4EF8, 0x81A6, 0x4EF9, 0x81A7, 0x4EFA, 0x81A8, + 0x4EFB, 0xC8CE, 0x4EFC, 0x81A9, 0x4EFD, 0xB7DD, 0x4EFE, 0x81AA, 0x4EFF, 0xB7C2, 0x4F00, 0x81AB, 0x4F01, 0xC6F3, 0x4F02, 0x81AC, + 0x4F03, 0x81AD, 0x4F04, 0x81AE, 0x4F05, 0x81AF, 0x4F06, 0x81B0, 0x4F07, 0x81B1, 0x4F08, 0x81B2, 0x4F09, 0xD8F8, 0x4F0A, 0xD2C1, + 0x4F0B, 0x81B3, 0x4F0C, 0x81B4, 0x4F0D, 0xCEE9, 0x4F0E, 0xBCBF, 0x4F0F, 0xB7FC, 0x4F10, 0xB7A5, 0x4F11, 0xD0DD, 0x4F12, 0x81B5, + 0x4F13, 0x81B6, 0x4F14, 0x81B7, 0x4F15, 0x81B8, 0x4F16, 0x81B9, 0x4F17, 0xD6DA, 0x4F18, 0xD3C5, 0x4F19, 0xBBEF, 0x4F1A, 0xBBE1, + 0x4F1B, 0xD8F1, 0x4F1C, 0x81BA, 0x4F1D, 0x81BB, 0x4F1E, 0xC9A1, 0x4F1F, 0xCEB0, 0x4F20, 0xB4AB, 0x4F21, 0x81BC, 0x4F22, 0xD8F3, + 0x4F23, 0x81BD, 0x4F24, 0xC9CB, 0x4F25, 0xD8F6, 0x4F26, 0xC2D7, 0x4F27, 0xD8F7, 0x4F28, 0x81BE, 0x4F29, 0x81BF, 0x4F2A, 0xCEB1, + 0x4F2B, 0xD8F9, 0x4F2C, 0x81C0, 0x4F2D, 0x81C1, 0x4F2E, 0x81C2, 0x4F2F, 0xB2AE, 0x4F30, 0xB9C0, 0x4F31, 0x81C3, 0x4F32, 0xD9A3, + 0x4F33, 0x81C4, 0x4F34, 0xB0E9, 0x4F35, 0x81C5, 0x4F36, 0xC1E6, 0x4F37, 0x81C6, 0x4F38, 0xC9EC, 0x4F39, 0x81C7, 0x4F3A, 0xCBC5, + 0x4F3B, 0x81C8, 0x4F3C, 0xCBC6, 0x4F3D, 0xD9A4, 0x4F3E, 0x81C9, 0x4F3F, 0x81CA, 0x4F40, 0x81CB, 0x4F41, 0x81CC, 0x4F42, 0x81CD, + 0x4F43, 0xB5E8, 0x4F44, 0x81CE, 0x4F45, 0x81CF, 0x4F46, 0xB5AB, 0x4F47, 0x81D0, 0x4F48, 0x81D1, 0x4F49, 0x81D2, 0x4F4A, 0x81D3, + 0x4F4B, 0x81D4, 0x4F4C, 0x81D5, 0x4F4D, 0xCEBB, 0x4F4E, 0xB5CD, 0x4F4F, 0xD7A1, 0x4F50, 0xD7F4, 0x4F51, 0xD3D3, 0x4F52, 0x81D6, + 0x4F53, 0xCCE5, 0x4F54, 0x81D7, 0x4F55, 0xBACE, 0x4F56, 0x81D8, 0x4F57, 0xD9A2, 0x4F58, 0xD9DC, 0x4F59, 0xD3E0, 0x4F5A, 0xD8FD, + 0x4F5B, 0xB7F0, 0x4F5C, 0xD7F7, 0x4F5D, 0xD8FE, 0x4F5E, 0xD8FA, 0x4F5F, 0xD9A1, 0x4F60, 0xC4E3, 0x4F61, 0x81D9, 0x4F62, 0x81DA, + 0x4F63, 0xD3B6, 0x4F64, 0xD8F4, 0x4F65, 0xD9DD, 0x4F66, 0x81DB, 0x4F67, 0xD8FB, 0x4F68, 0x81DC, 0x4F69, 0xC5E5, 0x4F6A, 0x81DD, + 0x4F6B, 0x81DE, 0x4F6C, 0xC0D0, 0x4F6D, 0x81DF, 0x4F6E, 0x81E0, 0x4F6F, 0xD1F0, 0x4F70, 0xB0DB, 0x4F71, 0x81E1, 0x4F72, 0x81E2, + 0x4F73, 0xBCD1, 0x4F74, 0xD9A6, 0x4F75, 0x81E3, 0x4F76, 0xD9A5, 0x4F77, 0x81E4, 0x4F78, 0x81E5, 0x4F79, 0x81E6, 0x4F7A, 0x81E7, + 0x4F7B, 0xD9AC, 0x4F7C, 0xD9AE, 0x4F7D, 0x81E8, 0x4F7E, 0xD9AB, 0x4F7F, 0xCAB9, 0x4F80, 0x81E9, 0x4F81, 0x81EA, 0x4F82, 0x81EB, + 0x4F83, 0xD9A9, 0x4F84, 0xD6B6, 0x4F85, 0x81EC, 0x4F86, 0x81ED, 0x4F87, 0x81EE, 0x4F88, 0xB3DE, 0x4F89, 0xD9A8, 0x4F8A, 0x81EF, + 0x4F8B, 0xC0FD, 0x4F8C, 0x81F0, 0x4F8D, 0xCACC, 0x4F8E, 0x81F1, 0x4F8F, 0xD9AA, 0x4F90, 0x81F2, 0x4F91, 0xD9A7, 0x4F92, 0x81F3, + 0x4F93, 0x81F4, 0x4F94, 0xD9B0, 0x4F95, 0x81F5, 0x4F96, 0x81F6, 0x4F97, 0xB6B1, 0x4F98, 0x81F7, 0x4F99, 0x81F8, 0x4F9A, 0x81F9, + 0x4F9B, 0xB9A9, 0x4F9C, 0x81FA, 0x4F9D, 0xD2C0, 0x4F9E, 0x81FB, 0x4F9F, 0x81FC, 0x4FA0, 0xCFC0, 0x4FA1, 0x81FD, 0x4FA2, 0x81FE, + 0x4FA3, 0xC2C2, 0x4FA4, 0x8240, 0x4FA5, 0xBDC4, 0x4FA6, 0xD5EC, 0x4FA7, 0xB2E0, 0x4FA8, 0xC7C8, 0x4FA9, 0xBFEB, 0x4FAA, 0xD9AD, + 0x4FAB, 0x8241, 0x4FAC, 0xD9AF, 0x4FAD, 0x8242, 0x4FAE, 0xCEEA, 0x4FAF, 0xBAEE, 0x4FB0, 0x8243, 0x4FB1, 0x8244, 0x4FB2, 0x8245, + 0x4FB3, 0x8246, 0x4FB4, 0x8247, 0x4FB5, 0xC7D6, 0x4FB6, 0x8248, 0x4FB7, 0x8249, 0x4FB8, 0x824A, 0x4FB9, 0x824B, 0x4FBA, 0x824C, + 0x4FBB, 0x824D, 0x4FBC, 0x824E, 0x4FBD, 0x824F, 0x4FBE, 0x8250, 0x4FBF, 0xB1E3, 0x4FC0, 0x8251, 0x4FC1, 0x8252, 0x4FC2, 0x8253, + 0x4FC3, 0xB4D9, 0x4FC4, 0xB6ED, 0x4FC5, 0xD9B4, 0x4FC6, 0x8254, 0x4FC7, 0x8255, 0x4FC8, 0x8256, 0x4FC9, 0x8257, 0x4FCA, 0xBFA1, + 0x4FCB, 0x8258, 0x4FCC, 0x8259, 0x4FCD, 0x825A, 0x4FCE, 0xD9DE, 0x4FCF, 0xC7CE, 0x4FD0, 0xC0FE, 0x4FD1, 0xD9B8, 0x4FD2, 0x825B, + 0x4FD3, 0x825C, 0x4FD4, 0x825D, 0x4FD5, 0x825E, 0x4FD6, 0x825F, 0x4FD7, 0xCBD7, 0x4FD8, 0xB7FD, 0x4FD9, 0x8260, 0x4FDA, 0xD9B5, + 0x4FDB, 0x8261, 0x4FDC, 0xD9B7, 0x4FDD, 0xB1A3, 0x4FDE, 0xD3E1, 0x4FDF, 0xD9B9, 0x4FE0, 0x8262, 0x4FE1, 0xD0C5, 0x4FE2, 0x8263, + 0x4FE3, 0xD9B6, 0x4FE4, 0x8264, 0x4FE5, 0x8265, 0x4FE6, 0xD9B1, 0x4FE7, 0x8266, 0x4FE8, 0xD9B2, 0x4FE9, 0xC1A9, 0x4FEA, 0xD9B3, + 0x4FEB, 0x8267, 0x4FEC, 0x8268, 0x4FED, 0xBCF3, 0x4FEE, 0xD0DE, 0x4FEF, 0xB8A9, 0x4FF0, 0x8269, 0x4FF1, 0xBEE3, 0x4FF2, 0x826A, + 0x4FF3, 0xD9BD, 0x4FF4, 0x826B, 0x4FF5, 0x826C, 0x4FF6, 0x826D, 0x4FF7, 0x826E, 0x4FF8, 0xD9BA, 0x4FF9, 0x826F, 0x4FFA, 0xB0B3, + 0x4FFB, 0x8270, 0x4FFC, 0x8271, 0x4FFD, 0x8272, 0x4FFE, 0xD9C2, 0x4FFF, 0x8273, 0x5000, 0x8274, 0x5001, 0x8275, 0x5002, 0x8276, + 0x5003, 0x8277, 0x5004, 0x8278, 0x5005, 0x8279, 0x5006, 0x827A, 0x5007, 0x827B, 0x5008, 0x827C, 0x5009, 0x827D, 0x500A, 0x827E, + 0x500B, 0x8280, 0x500C, 0xD9C4, 0x500D, 0xB1B6, 0x500E, 0x8281, 0x500F, 0xD9BF, 0x5010, 0x8282, 0x5011, 0x8283, 0x5012, 0xB5B9, + 0x5013, 0x8284, 0x5014, 0xBEF3, 0x5015, 0x8285, 0x5016, 0x8286, 0x5017, 0x8287, 0x5018, 0xCCC8, 0x5019, 0xBAF2, 0x501A, 0xD2D0, + 0x501B, 0x8288, 0x501C, 0xD9C3, 0x501D, 0x8289, 0x501E, 0x828A, 0x501F, 0xBDE8, 0x5020, 0x828B, 0x5021, 0xB3AB, 0x5022, 0x828C, + 0x5023, 0x828D, 0x5024, 0x828E, 0x5025, 0xD9C5, 0x5026, 0xBEEB, 0x5027, 0x828F, 0x5028, 0xD9C6, 0x5029, 0xD9BB, 0x502A, 0xC4DF, + 0x502B, 0x8290, 0x502C, 0xD9BE, 0x502D, 0xD9C1, 0x502E, 0xD9C0, 0x502F, 0x8291, 0x5030, 0x8292, 0x5031, 0x8293, 0x5032, 0x8294, + 0x5033, 0x8295, 0x5034, 0x8296, 0x5035, 0x8297, 0x5036, 0x8298, 0x5037, 0x8299, 0x5038, 0x829A, 0x5039, 0x829B, 0x503A, 0xD5AE, + 0x503B, 0x829C, 0x503C, 0xD6B5, 0x503D, 0x829D, 0x503E, 0xC7E3, 0x503F, 0x829E, 0x5040, 0x829F, 0x5041, 0x82A0, 0x5042, 0x82A1, + 0x5043, 0xD9C8, 0x5044, 0x82A2, 0x5045, 0x82A3, 0x5046, 0x82A4, 0x5047, 0xBCD9, 0x5048, 0xD9CA, 0x5049, 0x82A5, 0x504A, 0x82A6, + 0x504B, 0x82A7, 0x504C, 0xD9BC, 0x504D, 0x82A8, 0x504E, 0xD9CB, 0x504F, 0xC6AB, 0x5050, 0x82A9, 0x5051, 0x82AA, 0x5052, 0x82AB, + 0x5053, 0x82AC, 0x5054, 0x82AD, 0x5055, 0xD9C9, 0x5056, 0x82AE, 0x5057, 0x82AF, 0x5058, 0x82B0, 0x5059, 0x82B1, 0x505A, 0xD7F6, + 0x505B, 0x82B2, 0x505C, 0xCDA3, 0x505D, 0x82B3, 0x505E, 0x82B4, 0x505F, 0x82B5, 0x5060, 0x82B6, 0x5061, 0x82B7, 0x5062, 0x82B8, + 0x5063, 0x82B9, 0x5064, 0x82BA, 0x5065, 0xBDA1, 0x5066, 0x82BB, 0x5067, 0x82BC, 0x5068, 0x82BD, 0x5069, 0x82BE, 0x506A, 0x82BF, + 0x506B, 0x82C0, 0x506C, 0xD9CC, 0x506D, 0x82C1, 0x506E, 0x82C2, 0x506F, 0x82C3, 0x5070, 0x82C4, 0x5071, 0x82C5, 0x5072, 0x82C6, + 0x5073, 0x82C7, 0x5074, 0x82C8, 0x5075, 0x82C9, 0x5076, 0xC5BC, 0x5077, 0xCDB5, 0x5078, 0x82CA, 0x5079, 0x82CB, 0x507A, 0x82CC, + 0x507B, 0xD9CD, 0x507C, 0x82CD, 0x507D, 0x82CE, 0x507E, 0xD9C7, 0x507F, 0xB3A5, 0x5080, 0xBFFE, 0x5081, 0x82CF, 0x5082, 0x82D0, + 0x5083, 0x82D1, 0x5084, 0x82D2, 0x5085, 0xB8B5, 0x5086, 0x82D3, 0x5087, 0x82D4, 0x5088, 0xC0FC, 0x5089, 0x82D5, 0x508A, 0x82D6, + 0x508B, 0x82D7, 0x508C, 0x82D8, 0x508D, 0xB0F8, 0x508E, 0x82D9, 0x508F, 0x82DA, 0x5090, 0x82DB, 0x5091, 0x82DC, 0x5092, 0x82DD, + 0x5093, 0x82DE, 0x5094, 0x82DF, 0x5095, 0x82E0, 0x5096, 0x82E1, 0x5097, 0x82E2, 0x5098, 0x82E3, 0x5099, 0x82E4, 0x509A, 0x82E5, + 0x509B, 0x82E6, 0x509C, 0x82E7, 0x509D, 0x82E8, 0x509E, 0x82E9, 0x509F, 0x82EA, 0x50A0, 0x82EB, 0x50A1, 0x82EC, 0x50A2, 0x82ED, + 0x50A3, 0xB4F6, 0x50A4, 0x82EE, 0x50A5, 0xD9CE, 0x50A6, 0x82EF, 0x50A7, 0xD9CF, 0x50A8, 0xB4A2, 0x50A9, 0xD9D0, 0x50AA, 0x82F0, + 0x50AB, 0x82F1, 0x50AC, 0xB4DF, 0x50AD, 0x82F2, 0x50AE, 0x82F3, 0x50AF, 0x82F4, 0x50B0, 0x82F5, 0x50B1, 0x82F6, 0x50B2, 0xB0C1, + 0x50B3, 0x82F7, 0x50B4, 0x82F8, 0x50B5, 0x82F9, 0x50B6, 0x82FA, 0x50B7, 0x82FB, 0x50B8, 0x82FC, 0x50B9, 0x82FD, 0x50BA, 0xD9D1, + 0x50BB, 0xC9B5, 0x50BC, 0x82FE, 0x50BD, 0x8340, 0x50BE, 0x8341, 0x50BF, 0x8342, 0x50C0, 0x8343, 0x50C1, 0x8344, 0x50C2, 0x8345, + 0x50C3, 0x8346, 0x50C4, 0x8347, 0x50C5, 0x8348, 0x50C6, 0x8349, 0x50C7, 0x834A, 0x50C8, 0x834B, 0x50C9, 0x834C, 0x50CA, 0x834D, + 0x50CB, 0x834E, 0x50CC, 0x834F, 0x50CD, 0x8350, 0x50CE, 0x8351, 0x50CF, 0xCFF1, 0x50D0, 0x8352, 0x50D1, 0x8353, 0x50D2, 0x8354, + 0x50D3, 0x8355, 0x50D4, 0x8356, 0x50D5, 0x8357, 0x50D6, 0xD9D2, 0x50D7, 0x8358, 0x50D8, 0x8359, 0x50D9, 0x835A, 0x50DA, 0xC1C5, + 0x50DB, 0x835B, 0x50DC, 0x835C, 0x50DD, 0x835D, 0x50DE, 0x835E, 0x50DF, 0x835F, 0x50E0, 0x8360, 0x50E1, 0x8361, 0x50E2, 0x8362, + 0x50E3, 0x8363, 0x50E4, 0x8364, 0x50E5, 0x8365, 0x50E6, 0xD9D6, 0x50E7, 0xC9AE, 0x50E8, 0x8366, 0x50E9, 0x8367, 0x50EA, 0x8368, + 0x50EB, 0x8369, 0x50EC, 0xD9D5, 0x50ED, 0xD9D4, 0x50EE, 0xD9D7, 0x50EF, 0x836A, 0x50F0, 0x836B, 0x50F1, 0x836C, 0x50F2, 0x836D, + 0x50F3, 0xCBDB, 0x50F4, 0x836E, 0x50F5, 0xBDA9, 0x50F6, 0x836F, 0x50F7, 0x8370, 0x50F8, 0x8371, 0x50F9, 0x8372, 0x50FA, 0x8373, + 0x50FB, 0xC6A7, 0x50FC, 0x8374, 0x50FD, 0x8375, 0x50FE, 0x8376, 0x50FF, 0x8377, 0x5100, 0x8378, 0x5101, 0x8379, 0x5102, 0x837A, + 0x5103, 0x837B, 0x5104, 0x837C, 0x5105, 0x837D, 0x5106, 0xD9D3, 0x5107, 0xD9D8, 0x5108, 0x837E, 0x5109, 0x8380, 0x510A, 0x8381, + 0x510B, 0xD9D9, 0x510C, 0x8382, 0x510D, 0x8383, 0x510E, 0x8384, 0x510F, 0x8385, 0x5110, 0x8386, 0x5111, 0x8387, 0x5112, 0xC8E5, + 0x5113, 0x8388, 0x5114, 0x8389, 0x5115, 0x838A, 0x5116, 0x838B, 0x5117, 0x838C, 0x5118, 0x838D, 0x5119, 0x838E, 0x511A, 0x838F, + 0x511B, 0x8390, 0x511C, 0x8391, 0x511D, 0x8392, 0x511E, 0x8393, 0x511F, 0x8394, 0x5120, 0x8395, 0x5121, 0xC0DC, 0x5122, 0x8396, + 0x5123, 0x8397, 0x5124, 0x8398, 0x5125, 0x8399, 0x5126, 0x839A, 0x5127, 0x839B, 0x5128, 0x839C, 0x5129, 0x839D, 0x512A, 0x839E, + 0x512B, 0x839F, 0x512C, 0x83A0, 0x512D, 0x83A1, 0x512E, 0x83A2, 0x512F, 0x83A3, 0x5130, 0x83A4, 0x5131, 0x83A5, 0x5132, 0x83A6, + 0x5133, 0x83A7, 0x5134, 0x83A8, 0x5135, 0x83A9, 0x5136, 0x83AA, 0x5137, 0x83AB, 0x5138, 0x83AC, 0x5139, 0x83AD, 0x513A, 0x83AE, + 0x513B, 0x83AF, 0x513C, 0x83B0, 0x513D, 0x83B1, 0x513E, 0x83B2, 0x513F, 0xB6F9, 0x5140, 0xD8A3, 0x5141, 0xD4CA, 0x5142, 0x83B3, + 0x5143, 0xD4AA, 0x5144, 0xD0D6, 0x5145, 0xB3E4, 0x5146, 0xD5D7, 0x5147, 0x83B4, 0x5148, 0xCFC8, 0x5149, 0xB9E2, 0x514A, 0x83B5, + 0x514B, 0xBFCB, 0x514C, 0x83B6, 0x514D, 0xC3E2, 0x514E, 0x83B7, 0x514F, 0x83B8, 0x5150, 0x83B9, 0x5151, 0xB6D2, 0x5152, 0x83BA, + 0x5153, 0x83BB, 0x5154, 0xCDC3, 0x5155, 0xD9EE, 0x5156, 0xD9F0, 0x5157, 0x83BC, 0x5158, 0x83BD, 0x5159, 0x83BE, 0x515A, 0xB5B3, + 0x515B, 0x83BF, 0x515C, 0xB6B5, 0x515D, 0x83C0, 0x515E, 0x83C1, 0x515F, 0x83C2, 0x5160, 0x83C3, 0x5161, 0x83C4, 0x5162, 0xBEA4, + 0x5163, 0x83C5, 0x5164, 0x83C6, 0x5165, 0xC8EB, 0x5166, 0x83C7, 0x5167, 0x83C8, 0x5168, 0xC8AB, 0x5169, 0x83C9, 0x516A, 0x83CA, + 0x516B, 0xB0CB, 0x516C, 0xB9AB, 0x516D, 0xC1F9, 0x516E, 0xD9E2, 0x516F, 0x83CB, 0x5170, 0xC0BC, 0x5171, 0xB9B2, 0x5172, 0x83CC, + 0x5173, 0xB9D8, 0x5174, 0xD0CB, 0x5175, 0xB1F8, 0x5176, 0xC6E4, 0x5177, 0xBEDF, 0x5178, 0xB5E4, 0x5179, 0xD7C8, 0x517A, 0x83CD, + 0x517B, 0xD1F8, 0x517C, 0xBCE6, 0x517D, 0xCADE, 0x517E, 0x83CE, 0x517F, 0x83CF, 0x5180, 0xBCBD, 0x5181, 0xD9E6, 0x5182, 0xD8E7, + 0x5183, 0x83D0, 0x5184, 0x83D1, 0x5185, 0xC4DA, 0x5186, 0x83D2, 0x5187, 0x83D3, 0x5188, 0xB8D4, 0x5189, 0xC8BD, 0x518A, 0x83D4, + 0x518B, 0x83D5, 0x518C, 0xB2E1, 0x518D, 0xD4D9, 0x518E, 0x83D6, 0x518F, 0x83D7, 0x5190, 0x83D8, 0x5191, 0x83D9, 0x5192, 0xC3B0, + 0x5193, 0x83DA, 0x5194, 0x83DB, 0x5195, 0xC3E1, 0x5196, 0xDAA2, 0x5197, 0xC8DF, 0x5198, 0x83DC, 0x5199, 0xD0B4, 0x519A, 0x83DD, + 0x519B, 0xBEFC, 0x519C, 0xC5A9, 0x519D, 0x83DE, 0x519E, 0x83DF, 0x519F, 0x83E0, 0x51A0, 0xB9DA, 0x51A1, 0x83E1, 0x51A2, 0xDAA3, + 0x51A3, 0x83E2, 0x51A4, 0xD4A9, 0x51A5, 0xDAA4, 0x51A6, 0x83E3, 0x51A7, 0x83E4, 0x51A8, 0x83E5, 0x51A9, 0x83E6, 0x51AA, 0x83E7, + 0x51AB, 0xD9FB, 0x51AC, 0xB6AC, 0x51AD, 0x83E8, 0x51AE, 0x83E9, 0x51AF, 0xB7EB, 0x51B0, 0xB1F9, 0x51B1, 0xD9FC, 0x51B2, 0xB3E5, + 0x51B3, 0xBEF6, 0x51B4, 0x83EA, 0x51B5, 0xBFF6, 0x51B6, 0xD2B1, 0x51B7, 0xC0E4, 0x51B8, 0x83EB, 0x51B9, 0x83EC, 0x51BA, 0x83ED, + 0x51BB, 0xB6B3, 0x51BC, 0xD9FE, 0x51BD, 0xD9FD, 0x51BE, 0x83EE, 0x51BF, 0x83EF, 0x51C0, 0xBEBB, 0x51C1, 0x83F0, 0x51C2, 0x83F1, + 0x51C3, 0x83F2, 0x51C4, 0xC6E0, 0x51C5, 0x83F3, 0x51C6, 0xD7BC, 0x51C7, 0xDAA1, 0x51C8, 0x83F4, 0x51C9, 0xC1B9, 0x51CA, 0x83F5, + 0x51CB, 0xB5F2, 0x51CC, 0xC1E8, 0x51CD, 0x83F6, 0x51CE, 0x83F7, 0x51CF, 0xBCF5, 0x51D0, 0x83F8, 0x51D1, 0xB4D5, 0x51D2, 0x83F9, + 0x51D3, 0x83FA, 0x51D4, 0x83FB, 0x51D5, 0x83FC, 0x51D6, 0x83FD, 0x51D7, 0x83FE, 0x51D8, 0x8440, 0x51D9, 0x8441, 0x51DA, 0x8442, + 0x51DB, 0xC1DD, 0x51DC, 0x8443, 0x51DD, 0xC4FD, 0x51DE, 0x8444, 0x51DF, 0x8445, 0x51E0, 0xBCB8, 0x51E1, 0xB7B2, 0x51E2, 0x8446, + 0x51E3, 0x8447, 0x51E4, 0xB7EF, 0x51E5, 0x8448, 0x51E6, 0x8449, 0x51E7, 0x844A, 0x51E8, 0x844B, 0x51E9, 0x844C, 0x51EA, 0x844D, + 0x51EB, 0xD9EC, 0x51EC, 0x844E, 0x51ED, 0xC6BE, 0x51EE, 0x844F, 0x51EF, 0xBFAD, 0x51F0, 0xBBCB, 0x51F1, 0x8450, 0x51F2, 0x8451, + 0x51F3, 0xB5CA, 0x51F4, 0x8452, 0x51F5, 0xDBC9, 0x51F6, 0xD0D7, 0x51F7, 0x8453, 0x51F8, 0xCDB9, 0x51F9, 0xB0BC, 0x51FA, 0xB3F6, + 0x51FB, 0xBBF7, 0x51FC, 0xDBCA, 0x51FD, 0xBAAF, 0x51FE, 0x8454, 0x51FF, 0xD4E4, 0x5200, 0xB5B6, 0x5201, 0xB5F3, 0x5202, 0xD8D6, + 0x5203, 0xC8D0, 0x5204, 0x8455, 0x5205, 0x8456, 0x5206, 0xB7D6, 0x5207, 0xC7D0, 0x5208, 0xD8D7, 0x5209, 0x8457, 0x520A, 0xBFAF, + 0x520B, 0x8458, 0x520C, 0x8459, 0x520D, 0xDBBB, 0x520E, 0xD8D8, 0x520F, 0x845A, 0x5210, 0x845B, 0x5211, 0xD0CC, 0x5212, 0xBBAE, + 0x5213, 0x845C, 0x5214, 0x845D, 0x5215, 0x845E, 0x5216, 0xEBBE, 0x5217, 0xC1D0, 0x5218, 0xC1F5, 0x5219, 0xD4F2, 0x521A, 0xB8D5, + 0x521B, 0xB4B4, 0x521C, 0x845F, 0x521D, 0xB3F5, 0x521E, 0x8460, 0x521F, 0x8461, 0x5220, 0xC9BE, 0x5221, 0x8462, 0x5222, 0x8463, + 0x5223, 0x8464, 0x5224, 0xC5D0, 0x5225, 0x8465, 0x5226, 0x8466, 0x5227, 0x8467, 0x5228, 0xC5D9, 0x5229, 0xC0FB, 0x522A, 0x8468, + 0x522B, 0xB1F0, 0x522C, 0x8469, 0x522D, 0xD8D9, 0x522E, 0xB9CE, 0x522F, 0x846A, 0x5230, 0xB5BD, 0x5231, 0x846B, 0x5232, 0x846C, + 0x5233, 0xD8DA, 0x5234, 0x846D, 0x5235, 0x846E, 0x5236, 0xD6C6, 0x5237, 0xCBA2, 0x5238, 0xC8AF, 0x5239, 0xC9B2, 0x523A, 0xB4CC, + 0x523B, 0xBFCC, 0x523C, 0x846F, 0x523D, 0xB9F4, 0x523E, 0x8470, 0x523F, 0xD8DB, 0x5240, 0xD8DC, 0x5241, 0xB6E7, 0x5242, 0xBCC1, + 0x5243, 0xCCEA, 0x5244, 0x8471, 0x5245, 0x8472, 0x5246, 0x8473, 0x5247, 0x8474, 0x5248, 0x8475, 0x5249, 0x8476, 0x524A, 0xCFF7, + 0x524B, 0x8477, 0x524C, 0xD8DD, 0x524D, 0xC7B0, 0x524E, 0x8478, 0x524F, 0x8479, 0x5250, 0xB9D0, 0x5251, 0xBDA3, 0x5252, 0x847A, + 0x5253, 0x847B, 0x5254, 0xCCDE, 0x5255, 0x847C, 0x5256, 0xC6CA, 0x5257, 0x847D, 0x5258, 0x847E, 0x5259, 0x8480, 0x525A, 0x8481, + 0x525B, 0x8482, 0x525C, 0xD8E0, 0x525D, 0x8483, 0x525E, 0xD8DE, 0x525F, 0x8484, 0x5260, 0x8485, 0x5261, 0xD8DF, 0x5262, 0x8486, + 0x5263, 0x8487, 0x5264, 0x8488, 0x5265, 0xB0FE, 0x5266, 0x8489, 0x5267, 0xBEE7, 0x5268, 0x848A, 0x5269, 0xCAA3, 0x526A, 0xBCF4, + 0x526B, 0x848B, 0x526C, 0x848C, 0x526D, 0x848D, 0x526E, 0x848E, 0x526F, 0xB8B1, 0x5270, 0x848F, 0x5271, 0x8490, 0x5272, 0xB8EE, + 0x5273, 0x8491, 0x5274, 0x8492, 0x5275, 0x8493, 0x5276, 0x8494, 0x5277, 0x8495, 0x5278, 0x8496, 0x5279, 0x8497, 0x527A, 0x8498, + 0x527B, 0x8499, 0x527C, 0x849A, 0x527D, 0xD8E2, 0x527E, 0x849B, 0x527F, 0xBDCB, 0x5280, 0x849C, 0x5281, 0xD8E4, 0x5282, 0xD8E3, + 0x5283, 0x849D, 0x5284, 0x849E, 0x5285, 0x849F, 0x5286, 0x84A0, 0x5287, 0x84A1, 0x5288, 0xC5FC, 0x5289, 0x84A2, 0x528A, 0x84A3, + 0x528B, 0x84A4, 0x528C, 0x84A5, 0x528D, 0x84A6, 0x528E, 0x84A7, 0x528F, 0x84A8, 0x5290, 0xD8E5, 0x5291, 0x84A9, 0x5292, 0x84AA, + 0x5293, 0xD8E6, 0x5294, 0x84AB, 0x5295, 0x84AC, 0x5296, 0x84AD, 0x5297, 0x84AE, 0x5298, 0x84AF, 0x5299, 0x84B0, 0x529A, 0x84B1, + 0x529B, 0xC1A6, 0x529C, 0x84B2, 0x529D, 0xC8B0, 0x529E, 0xB0EC, 0x529F, 0xB9A6, 0x52A0, 0xBCD3, 0x52A1, 0xCEF1, 0x52A2, 0xDBBD, + 0x52A3, 0xC1D3, 0x52A4, 0x84B3, 0x52A5, 0x84B4, 0x52A6, 0x84B5, 0x52A7, 0x84B6, 0x52A8, 0xB6AF, 0x52A9, 0xD6FA, 0x52AA, 0xC5AC, + 0x52AB, 0xBDD9, 0x52AC, 0xDBBE, 0x52AD, 0xDBBF, 0x52AE, 0x84B7, 0x52AF, 0x84B8, 0x52B0, 0x84B9, 0x52B1, 0xC0F8, 0x52B2, 0xBEA2, + 0x52B3, 0xC0CD, 0x52B4, 0x84BA, 0x52B5, 0x84BB, 0x52B6, 0x84BC, 0x52B7, 0x84BD, 0x52B8, 0x84BE, 0x52B9, 0x84BF, 0x52BA, 0x84C0, + 0x52BB, 0x84C1, 0x52BC, 0x84C2, 0x52BD, 0x84C3, 0x52BE, 0xDBC0, 0x52BF, 0xCAC6, 0x52C0, 0x84C4, 0x52C1, 0x84C5, 0x52C2, 0x84C6, + 0x52C3, 0xB2AA, 0x52C4, 0x84C7, 0x52C5, 0x84C8, 0x52C6, 0x84C9, 0x52C7, 0xD3C2, 0x52C8, 0x84CA, 0x52C9, 0xC3E3, 0x52CA, 0x84CB, + 0x52CB, 0xD1AB, 0x52CC, 0x84CC, 0x52CD, 0x84CD, 0x52CE, 0x84CE, 0x52CF, 0x84CF, 0x52D0, 0xDBC2, 0x52D1, 0x84D0, 0x52D2, 0xC0D5, + 0x52D3, 0x84D1, 0x52D4, 0x84D2, 0x52D5, 0x84D3, 0x52D6, 0xDBC3, 0x52D7, 0x84D4, 0x52D8, 0xBFB1, 0x52D9, 0x84D5, 0x52DA, 0x84D6, + 0x52DB, 0x84D7, 0x52DC, 0x84D8, 0x52DD, 0x84D9, 0x52DE, 0x84DA, 0x52DF, 0xC4BC, 0x52E0, 0x84DB, 0x52E1, 0x84DC, 0x52E2, 0x84DD, + 0x52E3, 0x84DE, 0x52E4, 0xC7DA, 0x52E5, 0x84DF, 0x52E6, 0x84E0, 0x52E7, 0x84E1, 0x52E8, 0x84E2, 0x52E9, 0x84E3, 0x52EA, 0x84E4, + 0x52EB, 0x84E5, 0x52EC, 0x84E6, 0x52ED, 0x84E7, 0x52EE, 0x84E8, 0x52EF, 0x84E9, 0x52F0, 0xDBC4, 0x52F1, 0x84EA, 0x52F2, 0x84EB, + 0x52F3, 0x84EC, 0x52F4, 0x84ED, 0x52F5, 0x84EE, 0x52F6, 0x84EF, 0x52F7, 0x84F0, 0x52F8, 0x84F1, 0x52F9, 0xD9E8, 0x52FA, 0xC9D7, + 0x52FB, 0x84F2, 0x52FC, 0x84F3, 0x52FD, 0x84F4, 0x52FE, 0xB9B4, 0x52FF, 0xCEF0, 0x5300, 0xD4C8, 0x5301, 0x84F5, 0x5302, 0x84F6, + 0x5303, 0x84F7, 0x5304, 0x84F8, 0x5305, 0xB0FC, 0x5306, 0xB4D2, 0x5307, 0x84F9, 0x5308, 0xD0D9, 0x5309, 0x84FA, 0x530A, 0x84FB, + 0x530B, 0x84FC, 0x530C, 0x84FD, 0x530D, 0xD9E9, 0x530E, 0x84FE, 0x530F, 0xDECB, 0x5310, 0xD9EB, 0x5311, 0x8540, 0x5312, 0x8541, + 0x5313, 0x8542, 0x5314, 0x8543, 0x5315, 0xD8B0, 0x5316, 0xBBAF, 0x5317, 0xB1B1, 0x5318, 0x8544, 0x5319, 0xB3D7, 0x531A, 0xD8CE, + 0x531B, 0x8545, 0x531C, 0x8546, 0x531D, 0xD4D1, 0x531E, 0x8547, 0x531F, 0x8548, 0x5320, 0xBDB3, 0x5321, 0xBFEF, 0x5322, 0x8549, + 0x5323, 0xCFBB, 0x5324, 0x854A, 0x5325, 0x854B, 0x5326, 0xD8D0, 0x5327, 0x854C, 0x5328, 0x854D, 0x5329, 0x854E, 0x532A, 0xB7CB, + 0x532B, 0x854F, 0x532C, 0x8550, 0x532D, 0x8551, 0x532E, 0xD8D1, 0x532F, 0x8552, 0x5330, 0x8553, 0x5331, 0x8554, 0x5332, 0x8555, + 0x5333, 0x8556, 0x5334, 0x8557, 0x5335, 0x8558, 0x5336, 0x8559, 0x5337, 0x855A, 0x5338, 0x855B, 0x5339, 0xC6A5, 0x533A, 0xC7F8, + 0x533B, 0xD2BD, 0x533C, 0x855C, 0x533D, 0x855D, 0x533E, 0xD8D2, 0x533F, 0xC4E4, 0x5340, 0x855E, 0x5341, 0xCAAE, 0x5342, 0x855F, + 0x5343, 0xC7A7, 0x5344, 0x8560, 0x5345, 0xD8A6, 0x5346, 0x8561, 0x5347, 0xC9FD, 0x5348, 0xCEE7, 0x5349, 0xBBDC, 0x534A, 0xB0EB, + 0x534B, 0x8562, 0x534C, 0x8563, 0x534D, 0x8564, 0x534E, 0xBBAA, 0x534F, 0xD0AD, 0x5350, 0x8565, 0x5351, 0xB1B0, 0x5352, 0xD7E4, + 0x5353, 0xD7BF, 0x5354, 0x8566, 0x5355, 0xB5A5, 0x5356, 0xC2F4, 0x5357, 0xC4CF, 0x5358, 0x8567, 0x5359, 0x8568, 0x535A, 0xB2A9, + 0x535B, 0x8569, 0x535C, 0xB2B7, 0x535D, 0x856A, 0x535E, 0xB1E5, 0x535F, 0xDFB2, 0x5360, 0xD5BC, 0x5361, 0xBFA8, 0x5362, 0xC2AC, + 0x5363, 0xD8D5, 0x5364, 0xC2B1, 0x5365, 0x856B, 0x5366, 0xD8D4, 0x5367, 0xCED4, 0x5368, 0x856C, 0x5369, 0xDAE0, 0x536A, 0x856D, + 0x536B, 0xCEC0, 0x536C, 0x856E, 0x536D, 0x856F, 0x536E, 0xD8B4, 0x536F, 0xC3AE, 0x5370, 0xD3A1, 0x5371, 0xCEA3, 0x5372, 0x8570, + 0x5373, 0xBCB4, 0x5374, 0xC8B4, 0x5375, 0xC2D1, 0x5376, 0x8571, 0x5377, 0xBEED, 0x5378, 0xD0B6, 0x5379, 0x8572, 0x537A, 0xDAE1, + 0x537B, 0x8573, 0x537C, 0x8574, 0x537D, 0x8575, 0x537E, 0x8576, 0x537F, 0xC7E4, 0x5380, 0x8577, 0x5381, 0x8578, 0x5382, 0xB3A7, + 0x5383, 0x8579, 0x5384, 0xB6F2, 0x5385, 0xCCFC, 0x5386, 0xC0FA, 0x5387, 0x857A, 0x5388, 0x857B, 0x5389, 0xC0F7, 0x538A, 0x857C, + 0x538B, 0xD1B9, 0x538C, 0xD1E1, 0x538D, 0xD8C7, 0x538E, 0x857D, 0x538F, 0x857E, 0x5390, 0x8580, 0x5391, 0x8581, 0x5392, 0x8582, + 0x5393, 0x8583, 0x5394, 0x8584, 0x5395, 0xB2DE, 0x5396, 0x8585, 0x5397, 0x8586, 0x5398, 0xC0E5, 0x5399, 0x8587, 0x539A, 0xBAF1, + 0x539B, 0x8588, 0x539C, 0x8589, 0x539D, 0xD8C8, 0x539E, 0x858A, 0x539F, 0xD4AD, 0x53A0, 0x858B, 0x53A1, 0x858C, 0x53A2, 0xCFE1, + 0x53A3, 0xD8C9, 0x53A4, 0x858D, 0x53A5, 0xD8CA, 0x53A6, 0xCFC3, 0x53A7, 0x858E, 0x53A8, 0xB3F8, 0x53A9, 0xBEC7, 0x53AA, 0x858F, + 0x53AB, 0x8590, 0x53AC, 0x8591, 0x53AD, 0x8592, 0x53AE, 0xD8CB, 0x53AF, 0x8593, 0x53B0, 0x8594, 0x53B1, 0x8595, 0x53B2, 0x8596, + 0x53B3, 0x8597, 0x53B4, 0x8598, 0x53B5, 0x8599, 0x53B6, 0xDBCC, 0x53B7, 0x859A, 0x53B8, 0x859B, 0x53B9, 0x859C, 0x53BA, 0x859D, + 0x53BB, 0xC8A5, 0x53BC, 0x859E, 0x53BD, 0x859F, 0x53BE, 0x85A0, 0x53BF, 0xCFD8, 0x53C0, 0x85A1, 0x53C1, 0xC8FE, 0x53C2, 0xB2CE, + 0x53C3, 0x85A2, 0x53C4, 0x85A3, 0x53C5, 0x85A4, 0x53C6, 0x85A5, 0x53C7, 0x85A6, 0x53C8, 0xD3D6, 0x53C9, 0xB2E6, 0x53CA, 0xBCB0, + 0x53CB, 0xD3D1, 0x53CC, 0xCBAB, 0x53CD, 0xB7B4, 0x53CE, 0x85A7, 0x53CF, 0x85A8, 0x53D0, 0x85A9, 0x53D1, 0xB7A2, 0x53D2, 0x85AA, + 0x53D3, 0x85AB, 0x53D4, 0xCAE5, 0x53D5, 0x85AC, 0x53D6, 0xC8A1, 0x53D7, 0xCADC, 0x53D8, 0xB1E4, 0x53D9, 0xD0F0, 0x53DA, 0x85AD, + 0x53DB, 0xC5D1, 0x53DC, 0x85AE, 0x53DD, 0x85AF, 0x53DE, 0x85B0, 0x53DF, 0xDBC5, 0x53E0, 0xB5FE, 0x53E1, 0x85B1, 0x53E2, 0x85B2, + 0x53E3, 0xBFDA, 0x53E4, 0xB9C5, 0x53E5, 0xBEE4, 0x53E6, 0xC1ED, 0x53E7, 0x85B3, 0x53E8, 0xDFB6, 0x53E9, 0xDFB5, 0x53EA, 0xD6BB, + 0x53EB, 0xBDD0, 0x53EC, 0xD5D9, 0x53ED, 0xB0C8, 0x53EE, 0xB6A3, 0x53EF, 0xBFC9, 0x53F0, 0xCCA8, 0x53F1, 0xDFB3, 0x53F2, 0xCAB7, + 0x53F3, 0xD3D2, 0x53F4, 0x85B4, 0x53F5, 0xD8CF, 0x53F6, 0xD2B6, 0x53F7, 0xBAC5, 0x53F8, 0xCBBE, 0x53F9, 0xCCBE, 0x53FA, 0x85B5, + 0x53FB, 0xDFB7, 0x53FC, 0xB5F0, 0x53FD, 0xDFB4, 0x53FE, 0x85B6, 0x53FF, 0x85B7, 0x5400, 0x85B8, 0x5401, 0xD3F5, 0x5402, 0x85B9, + 0x5403, 0xB3D4, 0x5404, 0xB8F7, 0x5405, 0x85BA, 0x5406, 0xDFBA, 0x5407, 0x85BB, 0x5408, 0xBACF, 0x5409, 0xBCAA, 0x540A, 0xB5F5, + 0x540B, 0x85BC, 0x540C, 0xCDAC, 0x540D, 0xC3FB, 0x540E, 0xBAF3, 0x540F, 0xC0F4, 0x5410, 0xCDC2, 0x5411, 0xCFF2, 0x5412, 0xDFB8, + 0x5413, 0xCFC5, 0x5414, 0x85BD, 0x5415, 0xC2C0, 0x5416, 0xDFB9, 0x5417, 0xC2F0, 0x5418, 0x85BE, 0x5419, 0x85BF, 0x541A, 0x85C0, + 0x541B, 0xBEFD, 0x541C, 0x85C1, 0x541D, 0xC1DF, 0x541E, 0xCDCC, 0x541F, 0xD2F7, 0x5420, 0xB7CD, 0x5421, 0xDFC1, 0x5422, 0x85C2, + 0x5423, 0xDFC4, 0x5424, 0x85C3, 0x5425, 0x85C4, 0x5426, 0xB7F1, 0x5427, 0xB0C9, 0x5428, 0xB6D6, 0x5429, 0xB7D4, 0x542A, 0x85C5, + 0x542B, 0xBAAC, 0x542C, 0xCCFD, 0x542D, 0xBFD4, 0x542E, 0xCBB1, 0x542F, 0xC6F4, 0x5430, 0x85C6, 0x5431, 0xD6A8, 0x5432, 0xDFC5, + 0x5433, 0x85C7, 0x5434, 0xCEE2, 0x5435, 0xB3B3, 0x5436, 0x85C8, 0x5437, 0x85C9, 0x5438, 0xCEFC, 0x5439, 0xB4B5, 0x543A, 0x85CA, + 0x543B, 0xCEC7, 0x543C, 0xBAF0, 0x543D, 0x85CB, 0x543E, 0xCEE1, 0x543F, 0x85CC, 0x5440, 0xD1BD, 0x5441, 0x85CD, 0x5442, 0x85CE, + 0x5443, 0xDFC0, 0x5444, 0x85CF, 0x5445, 0x85D0, 0x5446, 0xB4F4, 0x5447, 0x85D1, 0x5448, 0xB3CA, 0x5449, 0x85D2, 0x544A, 0xB8E6, + 0x544B, 0xDFBB, 0x544C, 0x85D3, 0x544D, 0x85D4, 0x544E, 0x85D5, 0x544F, 0x85D6, 0x5450, 0xC4C5, 0x5451, 0x85D7, 0x5452, 0xDFBC, + 0x5453, 0xDFBD, 0x5454, 0xDFBE, 0x5455, 0xC5BB, 0x5456, 0xDFBF, 0x5457, 0xDFC2, 0x5458, 0xD4B1, 0x5459, 0xDFC3, 0x545A, 0x85D8, + 0x545B, 0xC7BA, 0x545C, 0xCED8, 0x545D, 0x85D9, 0x545E, 0x85DA, 0x545F, 0x85DB, 0x5460, 0x85DC, 0x5461, 0x85DD, 0x5462, 0xC4D8, + 0x5463, 0x85DE, 0x5464, 0xDFCA, 0x5465, 0x85DF, 0x5466, 0xDFCF, 0x5467, 0x85E0, 0x5468, 0xD6DC, 0x5469, 0x85E1, 0x546A, 0x85E2, + 0x546B, 0x85E3, 0x546C, 0x85E4, 0x546D, 0x85E5, 0x546E, 0x85E6, 0x546F, 0x85E7, 0x5470, 0x85E8, 0x5471, 0xDFC9, 0x5472, 0xDFDA, + 0x5473, 0xCEB6, 0x5474, 0x85E9, 0x5475, 0xBAC7, 0x5476, 0xDFCE, 0x5477, 0xDFC8, 0x5478, 0xC5DE, 0x5479, 0x85EA, 0x547A, 0x85EB, + 0x547B, 0xC9EB, 0x547C, 0xBAF4, 0x547D, 0xC3FC, 0x547E, 0x85EC, 0x547F, 0x85ED, 0x5480, 0xBED7, 0x5481, 0x85EE, 0x5482, 0xDFC6, + 0x5483, 0x85EF, 0x5484, 0xDFCD, 0x5485, 0x85F0, 0x5486, 0xC5D8, 0x5487, 0x85F1, 0x5488, 0x85F2, 0x5489, 0x85F3, 0x548A, 0x85F4, + 0x548B, 0xD5A6, 0x548C, 0xBACD, 0x548D, 0x85F5, 0x548E, 0xBECC, 0x548F, 0xD3BD, 0x5490, 0xB8C0, 0x5491, 0x85F6, 0x5492, 0xD6E4, + 0x5493, 0x85F7, 0x5494, 0xDFC7, 0x5495, 0xB9BE, 0x5496, 0xBFA7, 0x5497, 0x85F8, 0x5498, 0x85F9, 0x5499, 0xC1FC, 0x549A, 0xDFCB, + 0x549B, 0xDFCC, 0x549C, 0x85FA, 0x549D, 0xDFD0, 0x549E, 0x85FB, 0x549F, 0x85FC, 0x54A0, 0x85FD, 0x54A1, 0x85FE, 0x54A2, 0x8640, + 0x54A3, 0xDFDB, 0x54A4, 0xDFE5, 0x54A5, 0x8641, 0x54A6, 0xDFD7, 0x54A7, 0xDFD6, 0x54A8, 0xD7C9, 0x54A9, 0xDFE3, 0x54AA, 0xDFE4, + 0x54AB, 0xE5EB, 0x54AC, 0xD2A7, 0x54AD, 0xDFD2, 0x54AE, 0x8642, 0x54AF, 0xBFA9, 0x54B0, 0x8643, 0x54B1, 0xD4DB, 0x54B2, 0x8644, + 0x54B3, 0xBFC8, 0x54B4, 0xDFD4, 0x54B5, 0x8645, 0x54B6, 0x8646, 0x54B7, 0x8647, 0x54B8, 0xCFCC, 0x54B9, 0x8648, 0x54BA, 0x8649, + 0x54BB, 0xDFDD, 0x54BC, 0x864A, 0x54BD, 0xD1CA, 0x54BE, 0x864B, 0x54BF, 0xDFDE, 0x54C0, 0xB0A7, 0x54C1, 0xC6B7, 0x54C2, 0xDFD3, + 0x54C3, 0x864C, 0x54C4, 0xBAE5, 0x54C5, 0x864D, 0x54C6, 0xB6DF, 0x54C7, 0xCDDB, 0x54C8, 0xB9FE, 0x54C9, 0xD4D5, 0x54CA, 0x864E, + 0x54CB, 0x864F, 0x54CC, 0xDFDF, 0x54CD, 0xCFEC, 0x54CE, 0xB0A5, 0x54CF, 0xDFE7, 0x54D0, 0xDFD1, 0x54D1, 0xD1C6, 0x54D2, 0xDFD5, + 0x54D3, 0xDFD8, 0x54D4, 0xDFD9, 0x54D5, 0xDFDC, 0x54D6, 0x8650, 0x54D7, 0xBBA9, 0x54D8, 0x8651, 0x54D9, 0xDFE0, 0x54DA, 0xDFE1, + 0x54DB, 0x8652, 0x54DC, 0xDFE2, 0x54DD, 0xDFE6, 0x54DE, 0xDFE8, 0x54DF, 0xD3B4, 0x54E0, 0x8653, 0x54E1, 0x8654, 0x54E2, 0x8655, + 0x54E3, 0x8656, 0x54E4, 0x8657, 0x54E5, 0xB8E7, 0x54E6, 0xC5B6, 0x54E7, 0xDFEA, 0x54E8, 0xC9DA, 0x54E9, 0xC1A8, 0x54EA, 0xC4C4, + 0x54EB, 0x8658, 0x54EC, 0x8659, 0x54ED, 0xBFDE, 0x54EE, 0xCFF8, 0x54EF, 0x865A, 0x54F0, 0x865B, 0x54F1, 0x865C, 0x54F2, 0xD5DC, + 0x54F3, 0xDFEE, 0x54F4, 0x865D, 0x54F5, 0x865E, 0x54F6, 0x865F, 0x54F7, 0x8660, 0x54F8, 0x8661, 0x54F9, 0x8662, 0x54FA, 0xB2B8, + 0x54FB, 0x8663, 0x54FC, 0xBADF, 0x54FD, 0xDFEC, 0x54FE, 0x8664, 0x54FF, 0xDBC1, 0x5500, 0x8665, 0x5501, 0xD1E4, 0x5502, 0x8666, + 0x5503, 0x8667, 0x5504, 0x8668, 0x5505, 0x8669, 0x5506, 0xCBF4, 0x5507, 0xB4BD, 0x5508, 0x866A, 0x5509, 0xB0A6, 0x550A, 0x866B, + 0x550B, 0x866C, 0x550C, 0x866D, 0x550D, 0x866E, 0x550E, 0x866F, 0x550F, 0xDFF1, 0x5510, 0xCCC6, 0x5511, 0xDFF2, 0x5512, 0x8670, + 0x5513, 0x8671, 0x5514, 0xDFED, 0x5515, 0x8672, 0x5516, 0x8673, 0x5517, 0x8674, 0x5518, 0x8675, 0x5519, 0x8676, 0x551A, 0x8677, + 0x551B, 0xDFE9, 0x551C, 0x8678, 0x551D, 0x8679, 0x551E, 0x867A, 0x551F, 0x867B, 0x5520, 0xDFEB, 0x5521, 0x867C, 0x5522, 0xDFEF, + 0x5523, 0xDFF0, 0x5524, 0xBBBD, 0x5525, 0x867D, 0x5526, 0x867E, 0x5527, 0xDFF3, 0x5528, 0x8680, 0x5529, 0x8681, 0x552A, 0xDFF4, + 0x552B, 0x8682, 0x552C, 0xBBA3, 0x552D, 0x8683, 0x552E, 0xCADB, 0x552F, 0xCEA8, 0x5530, 0xE0A7, 0x5531, 0xB3AA, 0x5532, 0x8684, + 0x5533, 0xE0A6, 0x5534, 0x8685, 0x5535, 0x8686, 0x5536, 0x8687, 0x5537, 0xE0A1, 0x5538, 0x8688, 0x5539, 0x8689, 0x553A, 0x868A, + 0x553B, 0x868B, 0x553C, 0xDFFE, 0x553D, 0x868C, 0x553E, 0xCDD9, 0x553F, 0xDFFC, 0x5540, 0x868D, 0x5541, 0xDFFA, 0x5542, 0x868E, + 0x5543, 0xBFD0, 0x5544, 0xD7C4, 0x5545, 0x868F, 0x5546, 0xC9CC, 0x5547, 0x8690, 0x5548, 0x8691, 0x5549, 0xDFF8, 0x554A, 0xB0A1, + 0x554B, 0x8692, 0x554C, 0x8693, 0x554D, 0x8694, 0x554E, 0x8695, 0x554F, 0x8696, 0x5550, 0xDFFD, 0x5551, 0x8697, 0x5552, 0x8698, + 0x5553, 0x8699, 0x5554, 0x869A, 0x5555, 0xDFFB, 0x5556, 0xE0A2, 0x5557, 0x869B, 0x5558, 0x869C, 0x5559, 0x869D, 0x555A, 0x869E, + 0x555B, 0x869F, 0x555C, 0xE0A8, 0x555D, 0x86A0, 0x555E, 0x86A1, 0x555F, 0x86A2, 0x5560, 0x86A3, 0x5561, 0xB7C8, 0x5562, 0x86A4, + 0x5563, 0x86A5, 0x5564, 0xC6A1, 0x5565, 0xC9B6, 0x5566, 0xC0B2, 0x5567, 0xDFF5, 0x5568, 0x86A6, 0x5569, 0x86A7, 0x556A, 0xC5BE, + 0x556B, 0x86A8, 0x556C, 0xD8C4, 0x556D, 0xDFF9, 0x556E, 0xC4F6, 0x556F, 0x86A9, 0x5570, 0x86AA, 0x5571, 0x86AB, 0x5572, 0x86AC, + 0x5573, 0x86AD, 0x5574, 0x86AE, 0x5575, 0xE0A3, 0x5576, 0xE0A4, 0x5577, 0xE0A5, 0x5578, 0xD0A5, 0x5579, 0x86AF, 0x557A, 0x86B0, + 0x557B, 0xE0B4, 0x557C, 0xCCE4, 0x557D, 0x86B1, 0x557E, 0xE0B1, 0x557F, 0x86B2, 0x5580, 0xBFA6, 0x5581, 0xE0AF, 0x5582, 0xCEB9, + 0x5583, 0xE0AB, 0x5584, 0xC9C6, 0x5585, 0x86B3, 0x5586, 0x86B4, 0x5587, 0xC0AE, 0x5588, 0xE0AE, 0x5589, 0xBAED, 0x558A, 0xBAB0, + 0x558B, 0xE0A9, 0x558C, 0x86B5, 0x558D, 0x86B6, 0x558E, 0x86B7, 0x558F, 0xDFF6, 0x5590, 0x86B8, 0x5591, 0xE0B3, 0x5592, 0x86B9, + 0x5593, 0x86BA, 0x5594, 0xE0B8, 0x5595, 0x86BB, 0x5596, 0x86BC, 0x5597, 0x86BD, 0x5598, 0xB4AD, 0x5599, 0xE0B9, 0x559A, 0x86BE, + 0x559B, 0x86BF, 0x559C, 0xCFB2, 0x559D, 0xBAC8, 0x559E, 0x86C0, 0x559F, 0xE0B0, 0x55A0, 0x86C1, 0x55A1, 0x86C2, 0x55A2, 0x86C3, + 0x55A3, 0x86C4, 0x55A4, 0x86C5, 0x55A5, 0x86C6, 0x55A6, 0x86C7, 0x55A7, 0xD0FA, 0x55A8, 0x86C8, 0x55A9, 0x86C9, 0x55AA, 0x86CA, + 0x55AB, 0x86CB, 0x55AC, 0x86CC, 0x55AD, 0x86CD, 0x55AE, 0x86CE, 0x55AF, 0x86CF, 0x55B0, 0x86D0, 0x55B1, 0xE0AC, 0x55B2, 0x86D1, + 0x55B3, 0xD4FB, 0x55B4, 0x86D2, 0x55B5, 0xDFF7, 0x55B6, 0x86D3, 0x55B7, 0xC5E7, 0x55B8, 0x86D4, 0x55B9, 0xE0AD, 0x55BA, 0x86D5, + 0x55BB, 0xD3F7, 0x55BC, 0x86D6, 0x55BD, 0xE0B6, 0x55BE, 0xE0B7, 0x55BF, 0x86D7, 0x55C0, 0x86D8, 0x55C1, 0x86D9, 0x55C2, 0x86DA, + 0x55C3, 0x86DB, 0x55C4, 0xE0C4, 0x55C5, 0xD0E1, 0x55C6, 0x86DC, 0x55C7, 0x86DD, 0x55C8, 0x86DE, 0x55C9, 0xE0BC, 0x55CA, 0x86DF, + 0x55CB, 0x86E0, 0x55CC, 0xE0C9, 0x55CD, 0xE0CA, 0x55CE, 0x86E1, 0x55CF, 0x86E2, 0x55D0, 0x86E3, 0x55D1, 0xE0BE, 0x55D2, 0xE0AA, + 0x55D3, 0xC9A4, 0x55D4, 0xE0C1, 0x55D5, 0x86E4, 0x55D6, 0xE0B2, 0x55D7, 0x86E5, 0x55D8, 0x86E6, 0x55D9, 0x86E7, 0x55DA, 0x86E8, + 0x55DB, 0x86E9, 0x55DC, 0xCAC8, 0x55DD, 0xE0C3, 0x55DE, 0x86EA, 0x55DF, 0xE0B5, 0x55E0, 0x86EB, 0x55E1, 0xCECB, 0x55E2, 0x86EC, + 0x55E3, 0xCBC3, 0x55E4, 0xE0CD, 0x55E5, 0xE0C6, 0x55E6, 0xE0C2, 0x55E7, 0x86ED, 0x55E8, 0xE0CB, 0x55E9, 0x86EE, 0x55EA, 0xE0BA, + 0x55EB, 0xE0BF, 0x55EC, 0xE0C0, 0x55ED, 0x86EF, 0x55EE, 0x86F0, 0x55EF, 0xE0C5, 0x55F0, 0x86F1, 0x55F1, 0x86F2, 0x55F2, 0xE0C7, + 0x55F3, 0xE0C8, 0x55F4, 0x86F3, 0x55F5, 0xE0CC, 0x55F6, 0x86F4, 0x55F7, 0xE0BB, 0x55F8, 0x86F5, 0x55F9, 0x86F6, 0x55FA, 0x86F7, + 0x55FB, 0x86F8, 0x55FC, 0x86F9, 0x55FD, 0xCBD4, 0x55FE, 0xE0D5, 0x55FF, 0x86FA, 0x5600, 0xE0D6, 0x5601, 0xE0D2, 0x5602, 0x86FB, + 0x5603, 0x86FC, 0x5604, 0x86FD, 0x5605, 0x86FE, 0x5606, 0x8740, 0x5607, 0x8741, 0x5608, 0xE0D0, 0x5609, 0xBCCE, 0x560A, 0x8742, + 0x560B, 0x8743, 0x560C, 0xE0D1, 0x560D, 0x8744, 0x560E, 0xB8C2, 0x560F, 0xD8C5, 0x5610, 0x8745, 0x5611, 0x8746, 0x5612, 0x8747, + 0x5613, 0x8748, 0x5614, 0x8749, 0x5615, 0x874A, 0x5616, 0x874B, 0x5617, 0x874C, 0x5618, 0xD0EA, 0x5619, 0x874D, 0x561A, 0x874E, + 0x561B, 0xC2EF, 0x561C, 0x874F, 0x561D, 0x8750, 0x561E, 0xE0CF, 0x561F, 0xE0BD, 0x5620, 0x8751, 0x5621, 0x8752, 0x5622, 0x8753, + 0x5623, 0xE0D4, 0x5624, 0xE0D3, 0x5625, 0x8754, 0x5626, 0x8755, 0x5627, 0xE0D7, 0x5628, 0x8756, 0x5629, 0x8757, 0x562A, 0x8758, + 0x562B, 0x8759, 0x562C, 0xE0DC, 0x562D, 0xE0D8, 0x562E, 0x875A, 0x562F, 0x875B, 0x5630, 0x875C, 0x5631, 0xD6F6, 0x5632, 0xB3B0, + 0x5633, 0x875D, 0x5634, 0xD7EC, 0x5635, 0x875E, 0x5636, 0xCBBB, 0x5637, 0x875F, 0x5638, 0x8760, 0x5639, 0xE0DA, 0x563A, 0x8761, + 0x563B, 0xCEFB, 0x563C, 0x8762, 0x563D, 0x8763, 0x563E, 0x8764, 0x563F, 0xBAD9, 0x5640, 0x8765, 0x5641, 0x8766, 0x5642, 0x8767, + 0x5643, 0x8768, 0x5644, 0x8769, 0x5645, 0x876A, 0x5646, 0x876B, 0x5647, 0x876C, 0x5648, 0x876D, 0x5649, 0x876E, 0x564A, 0x876F, + 0x564B, 0x8770, 0x564C, 0xE0E1, 0x564D, 0xE0DD, 0x564E, 0xD2AD, 0x564F, 0x8771, 0x5650, 0x8772, 0x5651, 0x8773, 0x5652, 0x8774, + 0x5653, 0x8775, 0x5654, 0xE0E2, 0x5655, 0x8776, 0x5656, 0x8777, 0x5657, 0xE0DB, 0x5658, 0xE0D9, 0x5659, 0xE0DF, 0x565A, 0x8778, + 0x565B, 0x8779, 0x565C, 0xE0E0, 0x565D, 0x877A, 0x565E, 0x877B, 0x565F, 0x877C, 0x5660, 0x877D, 0x5661, 0x877E, 0x5662, 0xE0DE, + 0x5663, 0x8780, 0x5664, 0xE0E4, 0x5665, 0x8781, 0x5666, 0x8782, 0x5667, 0x8783, 0x5668, 0xC6F7, 0x5669, 0xD8AC, 0x566A, 0xD4EB, + 0x566B, 0xE0E6, 0x566C, 0xCAC9, 0x566D, 0x8784, 0x566E, 0x8785, 0x566F, 0x8786, 0x5670, 0x8787, 0x5671, 0xE0E5, 0x5672, 0x8788, + 0x5673, 0x8789, 0x5674, 0x878A, 0x5675, 0x878B, 0x5676, 0xB8C1, 0x5677, 0x878C, 0x5678, 0x878D, 0x5679, 0x878E, 0x567A, 0x878F, + 0x567B, 0xE0E7, 0x567C, 0xE0E8, 0x567D, 0x8790, 0x567E, 0x8791, 0x567F, 0x8792, 0x5680, 0x8793, 0x5681, 0x8794, 0x5682, 0x8795, + 0x5683, 0x8796, 0x5684, 0x8797, 0x5685, 0xE0E9, 0x5686, 0xE0E3, 0x5687, 0x8798, 0x5688, 0x8799, 0x5689, 0x879A, 0x568A, 0x879B, + 0x568B, 0x879C, 0x568C, 0x879D, 0x568D, 0x879E, 0x568E, 0xBABF, 0x568F, 0xCCE7, 0x5690, 0x879F, 0x5691, 0x87A0, 0x5692, 0x87A1, + 0x5693, 0xE0EA, 0x5694, 0x87A2, 0x5695, 0x87A3, 0x5696, 0x87A4, 0x5697, 0x87A5, 0x5698, 0x87A6, 0x5699, 0x87A7, 0x569A, 0x87A8, + 0x569B, 0x87A9, 0x569C, 0x87AA, 0x569D, 0x87AB, 0x569E, 0x87AC, 0x569F, 0x87AD, 0x56A0, 0x87AE, 0x56A1, 0x87AF, 0x56A2, 0x87B0, + 0x56A3, 0xCFF9, 0x56A4, 0x87B1, 0x56A5, 0x87B2, 0x56A6, 0x87B3, 0x56A7, 0x87B4, 0x56A8, 0x87B5, 0x56A9, 0x87B6, 0x56AA, 0x87B7, + 0x56AB, 0x87B8, 0x56AC, 0x87B9, 0x56AD, 0x87BA, 0x56AE, 0x87BB, 0x56AF, 0xE0EB, 0x56B0, 0x87BC, 0x56B1, 0x87BD, 0x56B2, 0x87BE, + 0x56B3, 0x87BF, 0x56B4, 0x87C0, 0x56B5, 0x87C1, 0x56B6, 0x87C2, 0x56B7, 0xC8C2, 0x56B8, 0x87C3, 0x56B9, 0x87C4, 0x56BA, 0x87C5, + 0x56BB, 0x87C6, 0x56BC, 0xBDC0, 0x56BD, 0x87C7, 0x56BE, 0x87C8, 0x56BF, 0x87C9, 0x56C0, 0x87CA, 0x56C1, 0x87CB, 0x56C2, 0x87CC, + 0x56C3, 0x87CD, 0x56C4, 0x87CE, 0x56C5, 0x87CF, 0x56C6, 0x87D0, 0x56C7, 0x87D1, 0x56C8, 0x87D2, 0x56C9, 0x87D3, 0x56CA, 0xC4D2, + 0x56CB, 0x87D4, 0x56CC, 0x87D5, 0x56CD, 0x87D6, 0x56CE, 0x87D7, 0x56CF, 0x87D8, 0x56D0, 0x87D9, 0x56D1, 0x87DA, 0x56D2, 0x87DB, + 0x56D3, 0x87DC, 0x56D4, 0xE0EC, 0x56D5, 0x87DD, 0x56D6, 0x87DE, 0x56D7, 0xE0ED, 0x56D8, 0x87DF, 0x56D9, 0x87E0, 0x56DA, 0xC7F4, + 0x56DB, 0xCBC4, 0x56DC, 0x87E1, 0x56DD, 0xE0EE, 0x56DE, 0xBBD8, 0x56DF, 0xD8B6, 0x56E0, 0xD2F2, 0x56E1, 0xE0EF, 0x56E2, 0xCDC5, + 0x56E3, 0x87E2, 0x56E4, 0xB6DA, 0x56E5, 0x87E3, 0x56E6, 0x87E4, 0x56E7, 0x87E5, 0x56E8, 0x87E6, 0x56E9, 0x87E7, 0x56EA, 0x87E8, + 0x56EB, 0xE0F1, 0x56EC, 0x87E9, 0x56ED, 0xD4B0, 0x56EE, 0x87EA, 0x56EF, 0x87EB, 0x56F0, 0xC0A7, 0x56F1, 0xB4D1, 0x56F2, 0x87EC, + 0x56F3, 0x87ED, 0x56F4, 0xCEA7, 0x56F5, 0xE0F0, 0x56F6, 0x87EE, 0x56F7, 0x87EF, 0x56F8, 0x87F0, 0x56F9, 0xE0F2, 0x56FA, 0xB9CC, + 0x56FB, 0x87F1, 0x56FC, 0x87F2, 0x56FD, 0xB9FA, 0x56FE, 0xCDBC, 0x56FF, 0xE0F3, 0x5700, 0x87F3, 0x5701, 0x87F4, 0x5702, 0x87F5, + 0x5703, 0xC6D4, 0x5704, 0xE0F4, 0x5705, 0x87F6, 0x5706, 0xD4B2, 0x5707, 0x87F7, 0x5708, 0xC8A6, 0x5709, 0xE0F6, 0x570A, 0xE0F5, + 0x570B, 0x87F8, 0x570C, 0x87F9, 0x570D, 0x87FA, 0x570E, 0x87FB, 0x570F, 0x87FC, 0x5710, 0x87FD, 0x5711, 0x87FE, 0x5712, 0x8840, + 0x5713, 0x8841, 0x5714, 0x8842, 0x5715, 0x8843, 0x5716, 0x8844, 0x5717, 0x8845, 0x5718, 0x8846, 0x5719, 0x8847, 0x571A, 0x8848, + 0x571B, 0x8849, 0x571C, 0xE0F7, 0x571D, 0x884A, 0x571E, 0x884B, 0x571F, 0xCDC1, 0x5720, 0x884C, 0x5721, 0x884D, 0x5722, 0x884E, + 0x5723, 0xCAA5, 0x5724, 0x884F, 0x5725, 0x8850, 0x5726, 0x8851, 0x5727, 0x8852, 0x5728, 0xD4DA, 0x5729, 0xDBD7, 0x572A, 0xDBD9, + 0x572B, 0x8853, 0x572C, 0xDBD8, 0x572D, 0xB9E7, 0x572E, 0xDBDC, 0x572F, 0xDBDD, 0x5730, 0xB5D8, 0x5731, 0x8854, 0x5732, 0x8855, + 0x5733, 0xDBDA, 0x5734, 0x8856, 0x5735, 0x8857, 0x5736, 0x8858, 0x5737, 0x8859, 0x5738, 0x885A, 0x5739, 0xDBDB, 0x573A, 0xB3A1, + 0x573B, 0xDBDF, 0x573C, 0x885B, 0x573D, 0x885C, 0x573E, 0xBBF8, 0x573F, 0x885D, 0x5740, 0xD6B7, 0x5741, 0x885E, 0x5742, 0xDBE0, + 0x5743, 0x885F, 0x5744, 0x8860, 0x5745, 0x8861, 0x5746, 0x8862, 0x5747, 0xBEF9, 0x5748, 0x8863, 0x5749, 0x8864, 0x574A, 0xB7BB, + 0x574B, 0x8865, 0x574C, 0xDBD0, 0x574D, 0xCCAE, 0x574E, 0xBFB2, 0x574F, 0xBBB5, 0x5750, 0xD7F8, 0x5751, 0xBFD3, 0x5752, 0x8866, + 0x5753, 0x8867, 0x5754, 0x8868, 0x5755, 0x8869, 0x5756, 0x886A, 0x5757, 0xBFE9, 0x5758, 0x886B, 0x5759, 0x886C, 0x575A, 0xBCE1, + 0x575B, 0xCCB3, 0x575C, 0xDBDE, 0x575D, 0xB0D3, 0x575E, 0xCEEB, 0x575F, 0xB7D8, 0x5760, 0xD7B9, 0x5761, 0xC6C2, 0x5762, 0x886D, + 0x5763, 0x886E, 0x5764, 0xC0A4, 0x5765, 0x886F, 0x5766, 0xCCB9, 0x5767, 0x8870, 0x5768, 0xDBE7, 0x5769, 0xDBE1, 0x576A, 0xC6BA, + 0x576B, 0xDBE3, 0x576C, 0x8871, 0x576D, 0xDBE8, 0x576E, 0x8872, 0x576F, 0xC5F7, 0x5770, 0x8873, 0x5771, 0x8874, 0x5772, 0x8875, + 0x5773, 0xDBEA, 0x5774, 0x8876, 0x5775, 0x8877, 0x5776, 0xDBE9, 0x5777, 0xBFC0, 0x5778, 0x8878, 0x5779, 0x8879, 0x577A, 0x887A, + 0x577B, 0xDBE6, 0x577C, 0xDBE5, 0x577D, 0x887B, 0x577E, 0x887C, 0x577F, 0x887D, 0x5780, 0x887E, 0x5781, 0x8880, 0x5782, 0xB4B9, + 0x5783, 0xC0AC, 0x5784, 0xC2A2, 0x5785, 0xDBE2, 0x5786, 0xDBE4, 0x5787, 0x8881, 0x5788, 0x8882, 0x5789, 0x8883, 0x578A, 0x8884, + 0x578B, 0xD0CD, 0x578C, 0xDBED, 0x578D, 0x8885, 0x578E, 0x8886, 0x578F, 0x8887, 0x5790, 0x8888, 0x5791, 0x8889, 0x5792, 0xC0DD, + 0x5793, 0xDBF2, 0x5794, 0x888A, 0x5795, 0x888B, 0x5796, 0x888C, 0x5797, 0x888D, 0x5798, 0x888E, 0x5799, 0x888F, 0x579A, 0x8890, + 0x579B, 0xB6E2, 0x579C, 0x8891, 0x579D, 0x8892, 0x579E, 0x8893, 0x579F, 0x8894, 0x57A0, 0xDBF3, 0x57A1, 0xDBD2, 0x57A2, 0xB9B8, + 0x57A3, 0xD4AB, 0x57A4, 0xDBEC, 0x57A5, 0x8895, 0x57A6, 0xBFD1, 0x57A7, 0xDBF0, 0x57A8, 0x8896, 0x57A9, 0xDBD1, 0x57AA, 0x8897, + 0x57AB, 0xB5E6, 0x57AC, 0x8898, 0x57AD, 0xDBEB, 0x57AE, 0xBFE5, 0x57AF, 0x8899, 0x57B0, 0x889A, 0x57B1, 0x889B, 0x57B2, 0xDBEE, + 0x57B3, 0x889C, 0x57B4, 0xDBF1, 0x57B5, 0x889D, 0x57B6, 0x889E, 0x57B7, 0x889F, 0x57B8, 0xDBF9, 0x57B9, 0x88A0, 0x57BA, 0x88A1, + 0x57BB, 0x88A2, 0x57BC, 0x88A3, 0x57BD, 0x88A4, 0x57BE, 0x88A5, 0x57BF, 0x88A6, 0x57C0, 0x88A7, 0x57C1, 0x88A8, 0x57C2, 0xB9A1, + 0x57C3, 0xB0A3, 0x57C4, 0x88A9, 0x57C5, 0x88AA, 0x57C6, 0x88AB, 0x57C7, 0x88AC, 0x57C8, 0x88AD, 0x57C9, 0x88AE, 0x57CA, 0x88AF, + 0x57CB, 0xC2F1, 0x57CC, 0x88B0, 0x57CD, 0x88B1, 0x57CE, 0xB3C7, 0x57CF, 0xDBEF, 0x57D0, 0x88B2, 0x57D1, 0x88B3, 0x57D2, 0xDBF8, + 0x57D3, 0x88B4, 0x57D4, 0xC6D2, 0x57D5, 0xDBF4, 0x57D6, 0x88B5, 0x57D7, 0x88B6, 0x57D8, 0xDBF5, 0x57D9, 0xDBF7, 0x57DA, 0xDBF6, + 0x57DB, 0x88B7, 0x57DC, 0x88B8, 0x57DD, 0xDBFE, 0x57DE, 0x88B9, 0x57DF, 0xD3F2, 0x57E0, 0xB2BA, 0x57E1, 0x88BA, 0x57E2, 0x88BB, + 0x57E3, 0x88BC, 0x57E4, 0xDBFD, 0x57E5, 0x88BD, 0x57E6, 0x88BE, 0x57E7, 0x88BF, 0x57E8, 0x88C0, 0x57E9, 0x88C1, 0x57EA, 0x88C2, + 0x57EB, 0x88C3, 0x57EC, 0x88C4, 0x57ED, 0xDCA4, 0x57EE, 0x88C5, 0x57EF, 0xDBFB, 0x57F0, 0x88C6, 0x57F1, 0x88C7, 0x57F2, 0x88C8, + 0x57F3, 0x88C9, 0x57F4, 0xDBFA, 0x57F5, 0x88CA, 0x57F6, 0x88CB, 0x57F7, 0x88CC, 0x57F8, 0xDBFC, 0x57F9, 0xC5E0, 0x57FA, 0xBBF9, + 0x57FB, 0x88CD, 0x57FC, 0x88CE, 0x57FD, 0xDCA3, 0x57FE, 0x88CF, 0x57FF, 0x88D0, 0x5800, 0xDCA5, 0x5801, 0x88D1, 0x5802, 0xCCC3, + 0x5803, 0x88D2, 0x5804, 0x88D3, 0x5805, 0x88D4, 0x5806, 0xB6D1, 0x5807, 0xDDC0, 0x5808, 0x88D5, 0x5809, 0x88D6, 0x580A, 0x88D7, + 0x580B, 0xDCA1, 0x580C, 0x88D8, 0x580D, 0xDCA2, 0x580E, 0x88D9, 0x580F, 0x88DA, 0x5810, 0x88DB, 0x5811, 0xC7B5, 0x5812, 0x88DC, + 0x5813, 0x88DD, 0x5814, 0x88DE, 0x5815, 0xB6E9, 0x5816, 0x88DF, 0x5817, 0x88E0, 0x5818, 0x88E1, 0x5819, 0xDCA7, 0x581A, 0x88E2, + 0x581B, 0x88E3, 0x581C, 0x88E4, 0x581D, 0x88E5, 0x581E, 0xDCA6, 0x581F, 0x88E6, 0x5820, 0xDCA9, 0x5821, 0xB1A4, 0x5822, 0x88E7, + 0x5823, 0x88E8, 0x5824, 0xB5CC, 0x5825, 0x88E9, 0x5826, 0x88EA, 0x5827, 0x88EB, 0x5828, 0x88EC, 0x5829, 0x88ED, 0x582A, 0xBFB0, + 0x582B, 0x88EE, 0x582C, 0x88EF, 0x582D, 0x88F0, 0x582E, 0x88F1, 0x582F, 0x88F2, 0x5830, 0xD1DF, 0x5831, 0x88F3, 0x5832, 0x88F4, + 0x5833, 0x88F5, 0x5834, 0x88F6, 0x5835, 0xB6C2, 0x5836, 0x88F7, 0x5837, 0x88F8, 0x5838, 0x88F9, 0x5839, 0x88FA, 0x583A, 0x88FB, + 0x583B, 0x88FC, 0x583C, 0x88FD, 0x583D, 0x88FE, 0x583E, 0x8940, 0x583F, 0x8941, 0x5840, 0x8942, 0x5841, 0x8943, 0x5842, 0x8944, + 0x5843, 0x8945, 0x5844, 0xDCA8, 0x5845, 0x8946, 0x5846, 0x8947, 0x5847, 0x8948, 0x5848, 0x8949, 0x5849, 0x894A, 0x584A, 0x894B, + 0x584B, 0x894C, 0x584C, 0xCBFA, 0x584D, 0xEBF3, 0x584E, 0x894D, 0x584F, 0x894E, 0x5850, 0x894F, 0x5851, 0xCBDC, 0x5852, 0x8950, + 0x5853, 0x8951, 0x5854, 0xCBFE, 0x5855, 0x8952, 0x5856, 0x8953, 0x5857, 0x8954, 0x5858, 0xCCC1, 0x5859, 0x8955, 0x585A, 0x8956, + 0x585B, 0x8957, 0x585C, 0x8958, 0x585D, 0x8959, 0x585E, 0xC8FB, 0x585F, 0x895A, 0x5860, 0x895B, 0x5861, 0x895C, 0x5862, 0x895D, + 0x5863, 0x895E, 0x5864, 0x895F, 0x5865, 0xDCAA, 0x5866, 0x8960, 0x5867, 0x8961, 0x5868, 0x8962, 0x5869, 0x8963, 0x586A, 0x8964, + 0x586B, 0xCCEE, 0x586C, 0xDCAB, 0x586D, 0x8965, 0x586E, 0x8966, 0x586F, 0x8967, 0x5870, 0x8968, 0x5871, 0x8969, 0x5872, 0x896A, + 0x5873, 0x896B, 0x5874, 0x896C, 0x5875, 0x896D, 0x5876, 0x896E, 0x5877, 0x896F, 0x5878, 0x8970, 0x5879, 0x8971, 0x587A, 0x8972, + 0x587B, 0x8973, 0x587C, 0x8974, 0x587D, 0x8975, 0x587E, 0xDBD3, 0x587F, 0x8976, 0x5880, 0xDCAF, 0x5881, 0xDCAC, 0x5882, 0x8977, + 0x5883, 0xBEB3, 0x5884, 0x8978, 0x5885, 0xCAFB, 0x5886, 0x8979, 0x5887, 0x897A, 0x5888, 0x897B, 0x5889, 0xDCAD, 0x588A, 0x897C, + 0x588B, 0x897D, 0x588C, 0x897E, 0x588D, 0x8980, 0x588E, 0x8981, 0x588F, 0x8982, 0x5890, 0x8983, 0x5891, 0x8984, 0x5892, 0xC9CA, + 0x5893, 0xC4B9, 0x5894, 0x8985, 0x5895, 0x8986, 0x5896, 0x8987, 0x5897, 0x8988, 0x5898, 0x8989, 0x5899, 0xC7BD, 0x589A, 0xDCAE, + 0x589B, 0x898A, 0x589C, 0x898B, 0x589D, 0x898C, 0x589E, 0xD4F6, 0x589F, 0xD0E6, 0x58A0, 0x898D, 0x58A1, 0x898E, 0x58A2, 0x898F, + 0x58A3, 0x8990, 0x58A4, 0x8991, 0x58A5, 0x8992, 0x58A6, 0x8993, 0x58A7, 0x8994, 0x58A8, 0xC4AB, 0x58A9, 0xB6D5, 0x58AA, 0x8995, + 0x58AB, 0x8996, 0x58AC, 0x8997, 0x58AD, 0x8998, 0x58AE, 0x8999, 0x58AF, 0x899A, 0x58B0, 0x899B, 0x58B1, 0x899C, 0x58B2, 0x899D, + 0x58B3, 0x899E, 0x58B4, 0x899F, 0x58B5, 0x89A0, 0x58B6, 0x89A1, 0x58B7, 0x89A2, 0x58B8, 0x89A3, 0x58B9, 0x89A4, 0x58BA, 0x89A5, + 0x58BB, 0x89A6, 0x58BC, 0xDBD4, 0x58BD, 0x89A7, 0x58BE, 0x89A8, 0x58BF, 0x89A9, 0x58C0, 0x89AA, 0x58C1, 0xB1DA, 0x58C2, 0x89AB, + 0x58C3, 0x89AC, 0x58C4, 0x89AD, 0x58C5, 0xDBD5, 0x58C6, 0x89AE, 0x58C7, 0x89AF, 0x58C8, 0x89B0, 0x58C9, 0x89B1, 0x58CA, 0x89B2, + 0x58CB, 0x89B3, 0x58CC, 0x89B4, 0x58CD, 0x89B5, 0x58CE, 0x89B6, 0x58CF, 0x89B7, 0x58D0, 0x89B8, 0x58D1, 0xDBD6, 0x58D2, 0x89B9, + 0x58D3, 0x89BA, 0x58D4, 0x89BB, 0x58D5, 0xBABE, 0x58D6, 0x89BC, 0x58D7, 0x89BD, 0x58D8, 0x89BE, 0x58D9, 0x89BF, 0x58DA, 0x89C0, + 0x58DB, 0x89C1, 0x58DC, 0x89C2, 0x58DD, 0x89C3, 0x58DE, 0x89C4, 0x58DF, 0x89C5, 0x58E0, 0x89C6, 0x58E1, 0x89C7, 0x58E2, 0x89C8, + 0x58E3, 0x89C9, 0x58E4, 0xC8C0, 0x58E5, 0x89CA, 0x58E6, 0x89CB, 0x58E7, 0x89CC, 0x58E8, 0x89CD, 0x58E9, 0x89CE, 0x58EA, 0x89CF, + 0x58EB, 0xCABF, 0x58EC, 0xC8C9, 0x58ED, 0x89D0, 0x58EE, 0xD7B3, 0x58EF, 0x89D1, 0x58F0, 0xC9F9, 0x58F1, 0x89D2, 0x58F2, 0x89D3, + 0x58F3, 0xBFC7, 0x58F4, 0x89D4, 0x58F5, 0x89D5, 0x58F6, 0xBAF8, 0x58F7, 0x89D6, 0x58F8, 0x89D7, 0x58F9, 0xD2BC, 0x58FA, 0x89D8, + 0x58FB, 0x89D9, 0x58FC, 0x89DA, 0x58FD, 0x89DB, 0x58FE, 0x89DC, 0x58FF, 0x89DD, 0x5900, 0x89DE, 0x5901, 0x89DF, 0x5902, 0xE2BA, + 0x5903, 0x89E0, 0x5904, 0xB4A6, 0x5905, 0x89E1, 0x5906, 0x89E2, 0x5907, 0xB1B8, 0x5908, 0x89E3, 0x5909, 0x89E4, 0x590A, 0x89E5, + 0x590B, 0x89E6, 0x590C, 0x89E7, 0x590D, 0xB8B4, 0x590E, 0x89E8, 0x590F, 0xCFC4, 0x5910, 0x89E9, 0x5911, 0x89EA, 0x5912, 0x89EB, + 0x5913, 0x89EC, 0x5914, 0xD9E7, 0x5915, 0xCFA6, 0x5916, 0xCDE2, 0x5917, 0x89ED, 0x5918, 0x89EE, 0x5919, 0xD9ED, 0x591A, 0xB6E0, + 0x591B, 0x89EF, 0x591C, 0xD2B9, 0x591D, 0x89F0, 0x591E, 0x89F1, 0x591F, 0xB9BB, 0x5920, 0x89F2, 0x5921, 0x89F3, 0x5922, 0x89F4, + 0x5923, 0x89F5, 0x5924, 0xE2B9, 0x5925, 0xE2B7, 0x5926, 0x89F6, 0x5927, 0xB4F3, 0x5928, 0x89F7, 0x5929, 0xCCEC, 0x592A, 0xCCAB, + 0x592B, 0xB7F2, 0x592C, 0x89F8, 0x592D, 0xD8B2, 0x592E, 0xD1EB, 0x592F, 0xBABB, 0x5930, 0x89F9, 0x5931, 0xCAA7, 0x5932, 0x89FA, + 0x5933, 0x89FB, 0x5934, 0xCDB7, 0x5935, 0x89FC, 0x5936, 0x89FD, 0x5937, 0xD2C4, 0x5938, 0xBFE4, 0x5939, 0xBCD0, 0x593A, 0xB6E1, + 0x593B, 0x89FE, 0x593C, 0xDEC5, 0x593D, 0x8A40, 0x593E, 0x8A41, 0x593F, 0x8A42, 0x5940, 0x8A43, 0x5941, 0xDEC6, 0x5942, 0xDBBC, + 0x5943, 0x8A44, 0x5944, 0xD1D9, 0x5945, 0x8A45, 0x5946, 0x8A46, 0x5947, 0xC6E6, 0x5948, 0xC4CE, 0x5949, 0xB7EE, 0x594A, 0x8A47, + 0x594B, 0xB7DC, 0x594C, 0x8A48, 0x594D, 0x8A49, 0x594E, 0xBFFC, 0x594F, 0xD7E0, 0x5950, 0x8A4A, 0x5951, 0xC6F5, 0x5952, 0x8A4B, + 0x5953, 0x8A4C, 0x5954, 0xB1BC, 0x5955, 0xDEC8, 0x5956, 0xBDB1, 0x5957, 0xCCD7, 0x5958, 0xDECA, 0x5959, 0x8A4D, 0x595A, 0xDEC9, + 0x595B, 0x8A4E, 0x595C, 0x8A4F, 0x595D, 0x8A50, 0x595E, 0x8A51, 0x595F, 0x8A52, 0x5960, 0xB5EC, 0x5961, 0x8A53, 0x5962, 0xC9DD, + 0x5963, 0x8A54, 0x5964, 0x8A55, 0x5965, 0xB0C2, 0x5966, 0x8A56, 0x5967, 0x8A57, 0x5968, 0x8A58, 0x5969, 0x8A59, 0x596A, 0x8A5A, + 0x596B, 0x8A5B, 0x596C, 0x8A5C, 0x596D, 0x8A5D, 0x596E, 0x8A5E, 0x596F, 0x8A5F, 0x5970, 0x8A60, 0x5971, 0x8A61, 0x5972, 0x8A62, + 0x5973, 0xC5AE, 0x5974, 0xC5AB, 0x5975, 0x8A63, 0x5976, 0xC4CC, 0x5977, 0x8A64, 0x5978, 0xBCE9, 0x5979, 0xCBFD, 0x597A, 0x8A65, + 0x597B, 0x8A66, 0x597C, 0x8A67, 0x597D, 0xBAC3, 0x597E, 0x8A68, 0x597F, 0x8A69, 0x5980, 0x8A6A, 0x5981, 0xE5F9, 0x5982, 0xC8E7, + 0x5983, 0xE5FA, 0x5984, 0xCDFD, 0x5985, 0x8A6B, 0x5986, 0xD7B1, 0x5987, 0xB8BE, 0x5988, 0xC2E8, 0x5989, 0x8A6C, 0x598A, 0xC8D1, + 0x598B, 0x8A6D, 0x598C, 0x8A6E, 0x598D, 0xE5FB, 0x598E, 0x8A6F, 0x598F, 0x8A70, 0x5990, 0x8A71, 0x5991, 0x8A72, 0x5992, 0xB6CA, + 0x5993, 0xBCCB, 0x5994, 0x8A73, 0x5995, 0x8A74, 0x5996, 0xD1FD, 0x5997, 0xE6A1, 0x5998, 0x8A75, 0x5999, 0xC3EE, 0x599A, 0x8A76, + 0x599B, 0x8A77, 0x599C, 0x8A78, 0x599D, 0x8A79, 0x599E, 0xE6A4, 0x599F, 0x8A7A, 0x59A0, 0x8A7B, 0x59A1, 0x8A7C, 0x59A2, 0x8A7D, + 0x59A3, 0xE5FE, 0x59A4, 0xE6A5, 0x59A5, 0xCDD7, 0x59A6, 0x8A7E, 0x59A7, 0x8A80, 0x59A8, 0xB7C1, 0x59A9, 0xE5FC, 0x59AA, 0xE5FD, + 0x59AB, 0xE6A3, 0x59AC, 0x8A81, 0x59AD, 0x8A82, 0x59AE, 0xC4DD, 0x59AF, 0xE6A8, 0x59B0, 0x8A83, 0x59B1, 0x8A84, 0x59B2, 0xE6A7, + 0x59B3, 0x8A85, 0x59B4, 0x8A86, 0x59B5, 0x8A87, 0x59B6, 0x8A88, 0x59B7, 0x8A89, 0x59B8, 0x8A8A, 0x59B9, 0xC3C3, 0x59BA, 0x8A8B, + 0x59BB, 0xC6DE, 0x59BC, 0x8A8C, 0x59BD, 0x8A8D, 0x59BE, 0xE6AA, 0x59BF, 0x8A8E, 0x59C0, 0x8A8F, 0x59C1, 0x8A90, 0x59C2, 0x8A91, + 0x59C3, 0x8A92, 0x59C4, 0x8A93, 0x59C5, 0x8A94, 0x59C6, 0xC4B7, 0x59C7, 0x8A95, 0x59C8, 0x8A96, 0x59C9, 0x8A97, 0x59CA, 0xE6A2, + 0x59CB, 0xCABC, 0x59CC, 0x8A98, 0x59CD, 0x8A99, 0x59CE, 0x8A9A, 0x59CF, 0x8A9B, 0x59D0, 0xBDE3, 0x59D1, 0xB9C3, 0x59D2, 0xE6A6, + 0x59D3, 0xD0D5, 0x59D4, 0xCEAF, 0x59D5, 0x8A9C, 0x59D6, 0x8A9D, 0x59D7, 0xE6A9, 0x59D8, 0xE6B0, 0x59D9, 0x8A9E, 0x59DA, 0xD2A6, + 0x59DB, 0x8A9F, 0x59DC, 0xBDAA, 0x59DD, 0xE6AD, 0x59DE, 0x8AA0, 0x59DF, 0x8AA1, 0x59E0, 0x8AA2, 0x59E1, 0x8AA3, 0x59E2, 0x8AA4, + 0x59E3, 0xE6AF, 0x59E4, 0x8AA5, 0x59E5, 0xC0D1, 0x59E6, 0x8AA6, 0x59E7, 0x8AA7, 0x59E8, 0xD2CC, 0x59E9, 0x8AA8, 0x59EA, 0x8AA9, + 0x59EB, 0x8AAA, 0x59EC, 0xBCA7, 0x59ED, 0x8AAB, 0x59EE, 0x8AAC, 0x59EF, 0x8AAD, 0x59F0, 0x8AAE, 0x59F1, 0x8AAF, 0x59F2, 0x8AB0, + 0x59F3, 0x8AB1, 0x59F4, 0x8AB2, 0x59F5, 0x8AB3, 0x59F6, 0x8AB4, 0x59F7, 0x8AB5, 0x59F8, 0x8AB6, 0x59F9, 0xE6B1, 0x59FA, 0x8AB7, + 0x59FB, 0xD2F6, 0x59FC, 0x8AB8, 0x59FD, 0x8AB9, 0x59FE, 0x8ABA, 0x59FF, 0xD7CB, 0x5A00, 0x8ABB, 0x5A01, 0xCDFE, 0x5A02, 0x8ABC, + 0x5A03, 0xCDDE, 0x5A04, 0xC2A6, 0x5A05, 0xE6AB, 0x5A06, 0xE6AC, 0x5A07, 0xBDBF, 0x5A08, 0xE6AE, 0x5A09, 0xE6B3, 0x5A0A, 0x8ABD, + 0x5A0B, 0x8ABE, 0x5A0C, 0xE6B2, 0x5A0D, 0x8ABF, 0x5A0E, 0x8AC0, 0x5A0F, 0x8AC1, 0x5A10, 0x8AC2, 0x5A11, 0xE6B6, 0x5A12, 0x8AC3, + 0x5A13, 0xE6B8, 0x5A14, 0x8AC4, 0x5A15, 0x8AC5, 0x5A16, 0x8AC6, 0x5A17, 0x8AC7, 0x5A18, 0xC4EF, 0x5A19, 0x8AC8, 0x5A1A, 0x8AC9, + 0x5A1B, 0x8ACA, 0x5A1C, 0xC4C8, 0x5A1D, 0x8ACB, 0x5A1E, 0x8ACC, 0x5A1F, 0xBEEA, 0x5A20, 0xC9EF, 0x5A21, 0x8ACD, 0x5A22, 0x8ACE, + 0x5A23, 0xE6B7, 0x5A24, 0x8ACF, 0x5A25, 0xB6F0, 0x5A26, 0x8AD0, 0x5A27, 0x8AD1, 0x5A28, 0x8AD2, 0x5A29, 0xC3E4, 0x5A2A, 0x8AD3, + 0x5A2B, 0x8AD4, 0x5A2C, 0x8AD5, 0x5A2D, 0x8AD6, 0x5A2E, 0x8AD7, 0x5A2F, 0x8AD8, 0x5A30, 0x8AD9, 0x5A31, 0xD3E9, 0x5A32, 0xE6B4, + 0x5A33, 0x8ADA, 0x5A34, 0xE6B5, 0x5A35, 0x8ADB, 0x5A36, 0xC8A2, 0x5A37, 0x8ADC, 0x5A38, 0x8ADD, 0x5A39, 0x8ADE, 0x5A3A, 0x8ADF, + 0x5A3B, 0x8AE0, 0x5A3C, 0xE6BD, 0x5A3D, 0x8AE1, 0x5A3E, 0x8AE2, 0x5A3F, 0x8AE3, 0x5A40, 0xE6B9, 0x5A41, 0x8AE4, 0x5A42, 0x8AE5, + 0x5A43, 0x8AE6, 0x5A44, 0x8AE7, 0x5A45, 0x8AE8, 0x5A46, 0xC6C5, 0x5A47, 0x8AE9, 0x5A48, 0x8AEA, 0x5A49, 0xCDF1, 0x5A4A, 0xE6BB, + 0x5A4B, 0x8AEB, 0x5A4C, 0x8AEC, 0x5A4D, 0x8AED, 0x5A4E, 0x8AEE, 0x5A4F, 0x8AEF, 0x5A50, 0x8AF0, 0x5A51, 0x8AF1, 0x5A52, 0x8AF2, + 0x5A53, 0x8AF3, 0x5A54, 0x8AF4, 0x5A55, 0xE6BC, 0x5A56, 0x8AF5, 0x5A57, 0x8AF6, 0x5A58, 0x8AF7, 0x5A59, 0x8AF8, 0x5A5A, 0xBBE9, + 0x5A5B, 0x8AF9, 0x5A5C, 0x8AFA, 0x5A5D, 0x8AFB, 0x5A5E, 0x8AFC, 0x5A5F, 0x8AFD, 0x5A60, 0x8AFE, 0x5A61, 0x8B40, 0x5A62, 0xE6BE, + 0x5A63, 0x8B41, 0x5A64, 0x8B42, 0x5A65, 0x8B43, 0x5A66, 0x8B44, 0x5A67, 0xE6BA, 0x5A68, 0x8B45, 0x5A69, 0x8B46, 0x5A6A, 0xC0B7, + 0x5A6B, 0x8B47, 0x5A6C, 0x8B48, 0x5A6D, 0x8B49, 0x5A6E, 0x8B4A, 0x5A6F, 0x8B4B, 0x5A70, 0x8B4C, 0x5A71, 0x8B4D, 0x5A72, 0x8B4E, + 0x5A73, 0x8B4F, 0x5A74, 0xD3A4, 0x5A75, 0xE6BF, 0x5A76, 0xC9F4, 0x5A77, 0xE6C3, 0x5A78, 0x8B50, 0x5A79, 0x8B51, 0x5A7A, 0xE6C4, + 0x5A7B, 0x8B52, 0x5A7C, 0x8B53, 0x5A7D, 0x8B54, 0x5A7E, 0x8B55, 0x5A7F, 0xD0F6, 0x5A80, 0x8B56, 0x5A81, 0x8B57, 0x5A82, 0x8B58, + 0x5A83, 0x8B59, 0x5A84, 0x8B5A, 0x5A85, 0x8B5B, 0x5A86, 0x8B5C, 0x5A87, 0x8B5D, 0x5A88, 0x8B5E, 0x5A89, 0x8B5F, 0x5A8A, 0x8B60, + 0x5A8B, 0x8B61, 0x5A8C, 0x8B62, 0x5A8D, 0x8B63, 0x5A8E, 0x8B64, 0x5A8F, 0x8B65, 0x5A90, 0x8B66, 0x5A91, 0x8B67, 0x5A92, 0xC3BD, + 0x5A93, 0x8B68, 0x5A94, 0x8B69, 0x5A95, 0x8B6A, 0x5A96, 0x8B6B, 0x5A97, 0x8B6C, 0x5A98, 0x8B6D, 0x5A99, 0x8B6E, 0x5A9A, 0xC3C4, + 0x5A9B, 0xE6C2, 0x5A9C, 0x8B6F, 0x5A9D, 0x8B70, 0x5A9E, 0x8B71, 0x5A9F, 0x8B72, 0x5AA0, 0x8B73, 0x5AA1, 0x8B74, 0x5AA2, 0x8B75, + 0x5AA3, 0x8B76, 0x5AA4, 0x8B77, 0x5AA5, 0x8B78, 0x5AA6, 0x8B79, 0x5AA7, 0x8B7A, 0x5AA8, 0x8B7B, 0x5AA9, 0x8B7C, 0x5AAA, 0xE6C1, + 0x5AAB, 0x8B7D, 0x5AAC, 0x8B7E, 0x5AAD, 0x8B80, 0x5AAE, 0x8B81, 0x5AAF, 0x8B82, 0x5AB0, 0x8B83, 0x5AB1, 0x8B84, 0x5AB2, 0xE6C7, + 0x5AB3, 0xCFB1, 0x5AB4, 0x8B85, 0x5AB5, 0xEBF4, 0x5AB6, 0x8B86, 0x5AB7, 0x8B87, 0x5AB8, 0xE6CA, 0x5AB9, 0x8B88, 0x5ABA, 0x8B89, + 0x5ABB, 0x8B8A, 0x5ABC, 0x8B8B, 0x5ABD, 0x8B8C, 0x5ABE, 0xE6C5, 0x5ABF, 0x8B8D, 0x5AC0, 0x8B8E, 0x5AC1, 0xBCDE, 0x5AC2, 0xC9A9, + 0x5AC3, 0x8B8F, 0x5AC4, 0x8B90, 0x5AC5, 0x8B91, 0x5AC6, 0x8B92, 0x5AC7, 0x8B93, 0x5AC8, 0x8B94, 0x5AC9, 0xBCB5, 0x5ACA, 0x8B95, + 0x5ACB, 0x8B96, 0x5ACC, 0xCFD3, 0x5ACD, 0x8B97, 0x5ACE, 0x8B98, 0x5ACF, 0x8B99, 0x5AD0, 0x8B9A, 0x5AD1, 0x8B9B, 0x5AD2, 0xE6C8, + 0x5AD3, 0x8B9C, 0x5AD4, 0xE6C9, 0x5AD5, 0x8B9D, 0x5AD6, 0xE6CE, 0x5AD7, 0x8B9E, 0x5AD8, 0xE6D0, 0x5AD9, 0x8B9F, 0x5ADA, 0x8BA0, + 0x5ADB, 0x8BA1, 0x5ADC, 0xE6D1, 0x5ADD, 0x8BA2, 0x5ADE, 0x8BA3, 0x5ADF, 0x8BA4, 0x5AE0, 0xE6CB, 0x5AE1, 0xB5D5, 0x5AE2, 0x8BA5, + 0x5AE3, 0xE6CC, 0x5AE4, 0x8BA6, 0x5AE5, 0x8BA7, 0x5AE6, 0xE6CF, 0x5AE7, 0x8BA8, 0x5AE8, 0x8BA9, 0x5AE9, 0xC4DB, 0x5AEA, 0x8BAA, + 0x5AEB, 0xE6C6, 0x5AEC, 0x8BAB, 0x5AED, 0x8BAC, 0x5AEE, 0x8BAD, 0x5AEF, 0x8BAE, 0x5AF0, 0x8BAF, 0x5AF1, 0xE6CD, 0x5AF2, 0x8BB0, + 0x5AF3, 0x8BB1, 0x5AF4, 0x8BB2, 0x5AF5, 0x8BB3, 0x5AF6, 0x8BB4, 0x5AF7, 0x8BB5, 0x5AF8, 0x8BB6, 0x5AF9, 0x8BB7, 0x5AFA, 0x8BB8, + 0x5AFB, 0x8BB9, 0x5AFC, 0x8BBA, 0x5AFD, 0x8BBB, 0x5AFE, 0x8BBC, 0x5AFF, 0x8BBD, 0x5B00, 0x8BBE, 0x5B01, 0x8BBF, 0x5B02, 0x8BC0, + 0x5B03, 0x8BC1, 0x5B04, 0x8BC2, 0x5B05, 0x8BC3, 0x5B06, 0x8BC4, 0x5B07, 0x8BC5, 0x5B08, 0x8BC6, 0x5B09, 0xE6D2, 0x5B0A, 0x8BC7, + 0x5B0B, 0x8BC8, 0x5B0C, 0x8BC9, 0x5B0D, 0x8BCA, 0x5B0E, 0x8BCB, 0x5B0F, 0x8BCC, 0x5B10, 0x8BCD, 0x5B11, 0x8BCE, 0x5B12, 0x8BCF, + 0x5B13, 0x8BD0, 0x5B14, 0x8BD1, 0x5B15, 0x8BD2, 0x5B16, 0xE6D4, 0x5B17, 0xE6D3, 0x5B18, 0x8BD3, 0x5B19, 0x8BD4, 0x5B1A, 0x8BD5, + 0x5B1B, 0x8BD6, 0x5B1C, 0x8BD7, 0x5B1D, 0x8BD8, 0x5B1E, 0x8BD9, 0x5B1F, 0x8BDA, 0x5B20, 0x8BDB, 0x5B21, 0x8BDC, 0x5B22, 0x8BDD, + 0x5B23, 0x8BDE, 0x5B24, 0x8BDF, 0x5B25, 0x8BE0, 0x5B26, 0x8BE1, 0x5B27, 0x8BE2, 0x5B28, 0x8BE3, 0x5B29, 0x8BE4, 0x5B2A, 0x8BE5, + 0x5B2B, 0x8BE6, 0x5B2C, 0x8BE7, 0x5B2D, 0x8BE8, 0x5B2E, 0x8BE9, 0x5B2F, 0x8BEA, 0x5B30, 0x8BEB, 0x5B31, 0x8BEC, 0x5B32, 0xE6D5, + 0x5B33, 0x8BED, 0x5B34, 0xD9F8, 0x5B35, 0x8BEE, 0x5B36, 0x8BEF, 0x5B37, 0xE6D6, 0x5B38, 0x8BF0, 0x5B39, 0x8BF1, 0x5B3A, 0x8BF2, + 0x5B3B, 0x8BF3, 0x5B3C, 0x8BF4, 0x5B3D, 0x8BF5, 0x5B3E, 0x8BF6, 0x5B3F, 0x8BF7, 0x5B40, 0xE6D7, 0x5B41, 0x8BF8, 0x5B42, 0x8BF9, + 0x5B43, 0x8BFA, 0x5B44, 0x8BFB, 0x5B45, 0x8BFC, 0x5B46, 0x8BFD, 0x5B47, 0x8BFE, 0x5B48, 0x8C40, 0x5B49, 0x8C41, 0x5B4A, 0x8C42, + 0x5B4B, 0x8C43, 0x5B4C, 0x8C44, 0x5B4D, 0x8C45, 0x5B4E, 0x8C46, 0x5B4F, 0x8C47, 0x5B50, 0xD7D3, 0x5B51, 0xE6DD, 0x5B52, 0x8C48, + 0x5B53, 0xE6DE, 0x5B54, 0xBFD7, 0x5B55, 0xD4D0, 0x5B56, 0x8C49, 0x5B57, 0xD7D6, 0x5B58, 0xB4E6, 0x5B59, 0xCBEF, 0x5B5A, 0xE6DA, + 0x5B5B, 0xD8C3, 0x5B5C, 0xD7CE, 0x5B5D, 0xD0A2, 0x5B5E, 0x8C4A, 0x5B5F, 0xC3CF, 0x5B60, 0x8C4B, 0x5B61, 0x8C4C, 0x5B62, 0xE6DF, + 0x5B63, 0xBCBE, 0x5B64, 0xB9C2, 0x5B65, 0xE6DB, 0x5B66, 0xD1A7, 0x5B67, 0x8C4D, 0x5B68, 0x8C4E, 0x5B69, 0xBAA2, 0x5B6A, 0xC2CF, + 0x5B6B, 0x8C4F, 0x5B6C, 0xD8AB, 0x5B6D, 0x8C50, 0x5B6E, 0x8C51, 0x5B6F, 0x8C52, 0x5B70, 0xCAEB, 0x5B71, 0xE5EE, 0x5B72, 0x8C53, + 0x5B73, 0xE6DC, 0x5B74, 0x8C54, 0x5B75, 0xB7F5, 0x5B76, 0x8C55, 0x5B77, 0x8C56, 0x5B78, 0x8C57, 0x5B79, 0x8C58, 0x5B7A, 0xC8E6, + 0x5B7B, 0x8C59, 0x5B7C, 0x8C5A, 0x5B7D, 0xC4F5, 0x5B7E, 0x8C5B, 0x5B7F, 0x8C5C, 0x5B80, 0xE5B2, 0x5B81, 0xC4FE, 0x5B82, 0x8C5D, + 0x5B83, 0xCBFC, 0x5B84, 0xE5B3, 0x5B85, 0xD5AC, 0x5B86, 0x8C5E, 0x5B87, 0xD3EE, 0x5B88, 0xCAD8, 0x5B89, 0xB0B2, 0x5B8A, 0x8C5F, + 0x5B8B, 0xCBCE, 0x5B8C, 0xCDEA, 0x5B8D, 0x8C60, 0x5B8E, 0x8C61, 0x5B8F, 0xBAEA, 0x5B90, 0x8C62, 0x5B91, 0x8C63, 0x5B92, 0x8C64, + 0x5B93, 0xE5B5, 0x5B94, 0x8C65, 0x5B95, 0xE5B4, 0x5B96, 0x8C66, 0x5B97, 0xD7DA, 0x5B98, 0xB9D9, 0x5B99, 0xD6E6, 0x5B9A, 0xB6A8, + 0x5B9B, 0xCDF0, 0x5B9C, 0xD2CB, 0x5B9D, 0xB1A6, 0x5B9E, 0xCAB5, 0x5B9F, 0x8C67, 0x5BA0, 0xB3E8, 0x5BA1, 0xC9F3, 0x5BA2, 0xBFCD, + 0x5BA3, 0xD0FB, 0x5BA4, 0xCAD2, 0x5BA5, 0xE5B6, 0x5BA6, 0xBBC2, 0x5BA7, 0x8C68, 0x5BA8, 0x8C69, 0x5BA9, 0x8C6A, 0x5BAA, 0xCFDC, + 0x5BAB, 0xB9AC, 0x5BAC, 0x8C6B, 0x5BAD, 0x8C6C, 0x5BAE, 0x8C6D, 0x5BAF, 0x8C6E, 0x5BB0, 0xD4D7, 0x5BB1, 0x8C6F, 0x5BB2, 0x8C70, + 0x5BB3, 0xBAA6, 0x5BB4, 0xD1E7, 0x5BB5, 0xCFFC, 0x5BB6, 0xBCD2, 0x5BB7, 0x8C71, 0x5BB8, 0xE5B7, 0x5BB9, 0xC8DD, 0x5BBA, 0x8C72, + 0x5BBB, 0x8C73, 0x5BBC, 0x8C74, 0x5BBD, 0xBFED, 0x5BBE, 0xB1F6, 0x5BBF, 0xCBDE, 0x5BC0, 0x8C75, 0x5BC1, 0x8C76, 0x5BC2, 0xBCC5, + 0x5BC3, 0x8C77, 0x5BC4, 0xBCC4, 0x5BC5, 0xD2FA, 0x5BC6, 0xC3DC, 0x5BC7, 0xBFDC, 0x5BC8, 0x8C78, 0x5BC9, 0x8C79, 0x5BCA, 0x8C7A, + 0x5BCB, 0x8C7B, 0x5BCC, 0xB8BB, 0x5BCD, 0x8C7C, 0x5BCE, 0x8C7D, 0x5BCF, 0x8C7E, 0x5BD0, 0xC3C2, 0x5BD1, 0x8C80, 0x5BD2, 0xBAAE, + 0x5BD3, 0xD4A2, 0x5BD4, 0x8C81, 0x5BD5, 0x8C82, 0x5BD6, 0x8C83, 0x5BD7, 0x8C84, 0x5BD8, 0x8C85, 0x5BD9, 0x8C86, 0x5BDA, 0x8C87, + 0x5BDB, 0x8C88, 0x5BDC, 0x8C89, 0x5BDD, 0xC7DE, 0x5BDE, 0xC4AF, 0x5BDF, 0xB2EC, 0x5BE0, 0x8C8A, 0x5BE1, 0xB9D1, 0x5BE2, 0x8C8B, + 0x5BE3, 0x8C8C, 0x5BE4, 0xE5BB, 0x5BE5, 0xC1C8, 0x5BE6, 0x8C8D, 0x5BE7, 0x8C8E, 0x5BE8, 0xD5AF, 0x5BE9, 0x8C8F, 0x5BEA, 0x8C90, + 0x5BEB, 0x8C91, 0x5BEC, 0x8C92, 0x5BED, 0x8C93, 0x5BEE, 0xE5BC, 0x5BEF, 0x8C94, 0x5BF0, 0xE5BE, 0x5BF1, 0x8C95, 0x5BF2, 0x8C96, + 0x5BF3, 0x8C97, 0x5BF4, 0x8C98, 0x5BF5, 0x8C99, 0x5BF6, 0x8C9A, 0x5BF7, 0x8C9B, 0x5BF8, 0xB4E7, 0x5BF9, 0xB6D4, 0x5BFA, 0xCBC2, + 0x5BFB, 0xD1B0, 0x5BFC, 0xB5BC, 0x5BFD, 0x8C9C, 0x5BFE, 0x8C9D, 0x5BFF, 0xCAD9, 0x5C00, 0x8C9E, 0x5C01, 0xB7E2, 0x5C02, 0x8C9F, + 0x5C03, 0x8CA0, 0x5C04, 0xC9E4, 0x5C05, 0x8CA1, 0x5C06, 0xBDAB, 0x5C07, 0x8CA2, 0x5C08, 0x8CA3, 0x5C09, 0xCEBE, 0x5C0A, 0xD7F0, + 0x5C0B, 0x8CA4, 0x5C0C, 0x8CA5, 0x5C0D, 0x8CA6, 0x5C0E, 0x8CA7, 0x5C0F, 0xD0A1, 0x5C10, 0x8CA8, 0x5C11, 0xC9D9, 0x5C12, 0x8CA9, + 0x5C13, 0x8CAA, 0x5C14, 0xB6FB, 0x5C15, 0xE6D8, 0x5C16, 0xBCE2, 0x5C17, 0x8CAB, 0x5C18, 0xB3BE, 0x5C19, 0x8CAC, 0x5C1A, 0xC9D0, + 0x5C1B, 0x8CAD, 0x5C1C, 0xE6D9, 0x5C1D, 0xB3A2, 0x5C1E, 0x8CAE, 0x5C1F, 0x8CAF, 0x5C20, 0x8CB0, 0x5C21, 0x8CB1, 0x5C22, 0xDECC, + 0x5C23, 0x8CB2, 0x5C24, 0xD3C8, 0x5C25, 0xDECD, 0x5C26, 0x8CB3, 0x5C27, 0xD2A2, 0x5C28, 0x8CB4, 0x5C29, 0x8CB5, 0x5C2A, 0x8CB6, + 0x5C2B, 0x8CB7, 0x5C2C, 0xDECE, 0x5C2D, 0x8CB8, 0x5C2E, 0x8CB9, 0x5C2F, 0x8CBA, 0x5C30, 0x8CBB, 0x5C31, 0xBECD, 0x5C32, 0x8CBC, + 0x5C33, 0x8CBD, 0x5C34, 0xDECF, 0x5C35, 0x8CBE, 0x5C36, 0x8CBF, 0x5C37, 0x8CC0, 0x5C38, 0xCAAC, 0x5C39, 0xD2FC, 0x5C3A, 0xB3DF, + 0x5C3B, 0xE5EA, 0x5C3C, 0xC4E1, 0x5C3D, 0xBEA1, 0x5C3E, 0xCEB2, 0x5C3F, 0xC4F2, 0x5C40, 0xBED6, 0x5C41, 0xC6A8, 0x5C42, 0xB2E3, + 0x5C43, 0x8CC1, 0x5C44, 0x8CC2, 0x5C45, 0xBED3, 0x5C46, 0x8CC3, 0x5C47, 0x8CC4, 0x5C48, 0xC7FC, 0x5C49, 0xCCEB, 0x5C4A, 0xBDEC, + 0x5C4B, 0xCEDD, 0x5C4C, 0x8CC5, 0x5C4D, 0x8CC6, 0x5C4E, 0xCABA, 0x5C4F, 0xC6C1, 0x5C50, 0xE5EC, 0x5C51, 0xD0BC, 0x5C52, 0x8CC7, + 0x5C53, 0x8CC8, 0x5C54, 0x8CC9, 0x5C55, 0xD5B9, 0x5C56, 0x8CCA, 0x5C57, 0x8CCB, 0x5C58, 0x8CCC, 0x5C59, 0xE5ED, 0x5C5A, 0x8CCD, + 0x5C5B, 0x8CCE, 0x5C5C, 0x8CCF, 0x5C5D, 0x8CD0, 0x5C5E, 0xCAF4, 0x5C5F, 0x8CD1, 0x5C60, 0xCDC0, 0x5C61, 0xC2C5, 0x5C62, 0x8CD2, + 0x5C63, 0xE5EF, 0x5C64, 0x8CD3, 0x5C65, 0xC2C4, 0x5C66, 0xE5F0, 0x5C67, 0x8CD4, 0x5C68, 0x8CD5, 0x5C69, 0x8CD6, 0x5C6A, 0x8CD7, + 0x5C6B, 0x8CD8, 0x5C6C, 0x8CD9, 0x5C6D, 0x8CDA, 0x5C6E, 0xE5F8, 0x5C6F, 0xCDCD, 0x5C70, 0x8CDB, 0x5C71, 0xC9BD, 0x5C72, 0x8CDC, + 0x5C73, 0x8CDD, 0x5C74, 0x8CDE, 0x5C75, 0x8CDF, 0x5C76, 0x8CE0, 0x5C77, 0x8CE1, 0x5C78, 0x8CE2, 0x5C79, 0xD2D9, 0x5C7A, 0xE1A8, + 0x5C7B, 0x8CE3, 0x5C7C, 0x8CE4, 0x5C7D, 0x8CE5, 0x5C7E, 0x8CE6, 0x5C7F, 0xD3EC, 0x5C80, 0x8CE7, 0x5C81, 0xCBEA, 0x5C82, 0xC6F1, + 0x5C83, 0x8CE8, 0x5C84, 0x8CE9, 0x5C85, 0x8CEA, 0x5C86, 0x8CEB, 0x5C87, 0x8CEC, 0x5C88, 0xE1AC, 0x5C89, 0x8CED, 0x5C8A, 0x8CEE, + 0x5C8B, 0x8CEF, 0x5C8C, 0xE1A7, 0x5C8D, 0xE1A9, 0x5C8E, 0x8CF0, 0x5C8F, 0x8CF1, 0x5C90, 0xE1AA, 0x5C91, 0xE1AF, 0x5C92, 0x8CF2, + 0x5C93, 0x8CF3, 0x5C94, 0xB2ED, 0x5C95, 0x8CF4, 0x5C96, 0xE1AB, 0x5C97, 0xB8DA, 0x5C98, 0xE1AD, 0x5C99, 0xE1AE, 0x5C9A, 0xE1B0, + 0x5C9B, 0xB5BA, 0x5C9C, 0xE1B1, 0x5C9D, 0x8CF5, 0x5C9E, 0x8CF6, 0x5C9F, 0x8CF7, 0x5CA0, 0x8CF8, 0x5CA1, 0x8CF9, 0x5CA2, 0xE1B3, + 0x5CA3, 0xE1B8, 0x5CA4, 0x8CFA, 0x5CA5, 0x8CFB, 0x5CA6, 0x8CFC, 0x5CA7, 0x8CFD, 0x5CA8, 0x8CFE, 0x5CA9, 0xD1D2, 0x5CAA, 0x8D40, + 0x5CAB, 0xE1B6, 0x5CAC, 0xE1B5, 0x5CAD, 0xC1EB, 0x5CAE, 0x8D41, 0x5CAF, 0x8D42, 0x5CB0, 0x8D43, 0x5CB1, 0xE1B7, 0x5CB2, 0x8D44, + 0x5CB3, 0xD4C0, 0x5CB4, 0x8D45, 0x5CB5, 0xE1B2, 0x5CB6, 0x8D46, 0x5CB7, 0xE1BA, 0x5CB8, 0xB0B6, 0x5CB9, 0x8D47, 0x5CBA, 0x8D48, + 0x5CBB, 0x8D49, 0x5CBC, 0x8D4A, 0x5CBD, 0xE1B4, 0x5CBE, 0x8D4B, 0x5CBF, 0xBFF9, 0x5CC0, 0x8D4C, 0x5CC1, 0xE1B9, 0x5CC2, 0x8D4D, + 0x5CC3, 0x8D4E, 0x5CC4, 0xE1BB, 0x5CC5, 0x8D4F, 0x5CC6, 0x8D50, 0x5CC7, 0x8D51, 0x5CC8, 0x8D52, 0x5CC9, 0x8D53, 0x5CCA, 0x8D54, + 0x5CCB, 0xE1BE, 0x5CCC, 0x8D55, 0x5CCD, 0x8D56, 0x5CCE, 0x8D57, 0x5CCF, 0x8D58, 0x5CD0, 0x8D59, 0x5CD1, 0x8D5A, 0x5CD2, 0xE1BC, + 0x5CD3, 0x8D5B, 0x5CD4, 0x8D5C, 0x5CD5, 0x8D5D, 0x5CD6, 0x8D5E, 0x5CD7, 0x8D5F, 0x5CD8, 0x8D60, 0x5CD9, 0xD6C5, 0x5CDA, 0x8D61, + 0x5CDB, 0x8D62, 0x5CDC, 0x8D63, 0x5CDD, 0x8D64, 0x5CDE, 0x8D65, 0x5CDF, 0x8D66, 0x5CE0, 0x8D67, 0x5CE1, 0xCFBF, 0x5CE2, 0x8D68, + 0x5CE3, 0x8D69, 0x5CE4, 0xE1BD, 0x5CE5, 0xE1BF, 0x5CE6, 0xC2CD, 0x5CE7, 0x8D6A, 0x5CE8, 0xB6EB, 0x5CE9, 0x8D6B, 0x5CEA, 0xD3F8, + 0x5CEB, 0x8D6C, 0x5CEC, 0x8D6D, 0x5CED, 0xC7CD, 0x5CEE, 0x8D6E, 0x5CEF, 0x8D6F, 0x5CF0, 0xB7E5, 0x5CF1, 0x8D70, 0x5CF2, 0x8D71, + 0x5CF3, 0x8D72, 0x5CF4, 0x8D73, 0x5CF5, 0x8D74, 0x5CF6, 0x8D75, 0x5CF7, 0x8D76, 0x5CF8, 0x8D77, 0x5CF9, 0x8D78, 0x5CFA, 0x8D79, + 0x5CFB, 0xBEFE, 0x5CFC, 0x8D7A, 0x5CFD, 0x8D7B, 0x5CFE, 0x8D7C, 0x5CFF, 0x8D7D, 0x5D00, 0x8D7E, 0x5D01, 0x8D80, 0x5D02, 0xE1C0, + 0x5D03, 0xE1C1, 0x5D04, 0x8D81, 0x5D05, 0x8D82, 0x5D06, 0xE1C7, 0x5D07, 0xB3E7, 0x5D08, 0x8D83, 0x5D09, 0x8D84, 0x5D0A, 0x8D85, + 0x5D0B, 0x8D86, 0x5D0C, 0x8D87, 0x5D0D, 0x8D88, 0x5D0E, 0xC6E9, 0x5D0F, 0x8D89, 0x5D10, 0x8D8A, 0x5D11, 0x8D8B, 0x5D12, 0x8D8C, + 0x5D13, 0x8D8D, 0x5D14, 0xB4DE, 0x5D15, 0x8D8E, 0x5D16, 0xD1C2, 0x5D17, 0x8D8F, 0x5D18, 0x8D90, 0x5D19, 0x8D91, 0x5D1A, 0x8D92, + 0x5D1B, 0xE1C8, 0x5D1C, 0x8D93, 0x5D1D, 0x8D94, 0x5D1E, 0xE1C6, 0x5D1F, 0x8D95, 0x5D20, 0x8D96, 0x5D21, 0x8D97, 0x5D22, 0x8D98, + 0x5D23, 0x8D99, 0x5D24, 0xE1C5, 0x5D25, 0x8D9A, 0x5D26, 0xE1C3, 0x5D27, 0xE1C2, 0x5D28, 0x8D9B, 0x5D29, 0xB1C0, 0x5D2A, 0x8D9C, + 0x5D2B, 0x8D9D, 0x5D2C, 0x8D9E, 0x5D2D, 0xD5B8, 0x5D2E, 0xE1C4, 0x5D2F, 0x8D9F, 0x5D30, 0x8DA0, 0x5D31, 0x8DA1, 0x5D32, 0x8DA2, + 0x5D33, 0x8DA3, 0x5D34, 0xE1CB, 0x5D35, 0x8DA4, 0x5D36, 0x8DA5, 0x5D37, 0x8DA6, 0x5D38, 0x8DA7, 0x5D39, 0x8DA8, 0x5D3A, 0x8DA9, + 0x5D3B, 0x8DAA, 0x5D3C, 0x8DAB, 0x5D3D, 0xE1CC, 0x5D3E, 0xE1CA, 0x5D3F, 0x8DAC, 0x5D40, 0x8DAD, 0x5D41, 0x8DAE, 0x5D42, 0x8DAF, + 0x5D43, 0x8DB0, 0x5D44, 0x8DB1, 0x5D45, 0x8DB2, 0x5D46, 0x8DB3, 0x5D47, 0xEFFA, 0x5D48, 0x8DB4, 0x5D49, 0x8DB5, 0x5D4A, 0xE1D3, + 0x5D4B, 0xE1D2, 0x5D4C, 0xC7B6, 0x5D4D, 0x8DB6, 0x5D4E, 0x8DB7, 0x5D4F, 0x8DB8, 0x5D50, 0x8DB9, 0x5D51, 0x8DBA, 0x5D52, 0x8DBB, + 0x5D53, 0x8DBC, 0x5D54, 0x8DBD, 0x5D55, 0x8DBE, 0x5D56, 0x8DBF, 0x5D57, 0x8DC0, 0x5D58, 0xE1C9, 0x5D59, 0x8DC1, 0x5D5A, 0x8DC2, + 0x5D5B, 0xE1CE, 0x5D5C, 0x8DC3, 0x5D5D, 0xE1D0, 0x5D5E, 0x8DC4, 0x5D5F, 0x8DC5, 0x5D60, 0x8DC6, 0x5D61, 0x8DC7, 0x5D62, 0x8DC8, + 0x5D63, 0x8DC9, 0x5D64, 0x8DCA, 0x5D65, 0x8DCB, 0x5D66, 0x8DCC, 0x5D67, 0x8DCD, 0x5D68, 0x8DCE, 0x5D69, 0xE1D4, 0x5D6A, 0x8DCF, + 0x5D6B, 0xE1D1, 0x5D6C, 0xE1CD, 0x5D6D, 0x8DD0, 0x5D6E, 0x8DD1, 0x5D6F, 0xE1CF, 0x5D70, 0x8DD2, 0x5D71, 0x8DD3, 0x5D72, 0x8DD4, + 0x5D73, 0x8DD5, 0x5D74, 0xE1D5, 0x5D75, 0x8DD6, 0x5D76, 0x8DD7, 0x5D77, 0x8DD8, 0x5D78, 0x8DD9, 0x5D79, 0x8DDA, 0x5D7A, 0x8DDB, + 0x5D7B, 0x8DDC, 0x5D7C, 0x8DDD, 0x5D7D, 0x8DDE, 0x5D7E, 0x8DDF, 0x5D7F, 0x8DE0, 0x5D80, 0x8DE1, 0x5D81, 0x8DE2, 0x5D82, 0xE1D6, + 0x5D83, 0x8DE3, 0x5D84, 0x8DE4, 0x5D85, 0x8DE5, 0x5D86, 0x8DE6, 0x5D87, 0x8DE7, 0x5D88, 0x8DE8, 0x5D89, 0x8DE9, 0x5D8A, 0x8DEA, + 0x5D8B, 0x8DEB, 0x5D8C, 0x8DEC, 0x5D8D, 0x8DED, 0x5D8E, 0x8DEE, 0x5D8F, 0x8DEF, 0x5D90, 0x8DF0, 0x5D91, 0x8DF1, 0x5D92, 0x8DF2, + 0x5D93, 0x8DF3, 0x5D94, 0x8DF4, 0x5D95, 0x8DF5, 0x5D96, 0x8DF6, 0x5D97, 0x8DF7, 0x5D98, 0x8DF8, 0x5D99, 0xE1D7, 0x5D9A, 0x8DF9, + 0x5D9B, 0x8DFA, 0x5D9C, 0x8DFB, 0x5D9D, 0xE1D8, 0x5D9E, 0x8DFC, 0x5D9F, 0x8DFD, 0x5DA0, 0x8DFE, 0x5DA1, 0x8E40, 0x5DA2, 0x8E41, + 0x5DA3, 0x8E42, 0x5DA4, 0x8E43, 0x5DA5, 0x8E44, 0x5DA6, 0x8E45, 0x5DA7, 0x8E46, 0x5DA8, 0x8E47, 0x5DA9, 0x8E48, 0x5DAA, 0x8E49, + 0x5DAB, 0x8E4A, 0x5DAC, 0x8E4B, 0x5DAD, 0x8E4C, 0x5DAE, 0x8E4D, 0x5DAF, 0x8E4E, 0x5DB0, 0x8E4F, 0x5DB1, 0x8E50, 0x5DB2, 0x8E51, + 0x5DB3, 0x8E52, 0x5DB4, 0x8E53, 0x5DB5, 0x8E54, 0x5DB6, 0x8E55, 0x5DB7, 0xE1DA, 0x5DB8, 0x8E56, 0x5DB9, 0x8E57, 0x5DBA, 0x8E58, + 0x5DBB, 0x8E59, 0x5DBC, 0x8E5A, 0x5DBD, 0x8E5B, 0x5DBE, 0x8E5C, 0x5DBF, 0x8E5D, 0x5DC0, 0x8E5E, 0x5DC1, 0x8E5F, 0x5DC2, 0x8E60, + 0x5DC3, 0x8E61, 0x5DC4, 0x8E62, 0x5DC5, 0xE1DB, 0x5DC6, 0x8E63, 0x5DC7, 0x8E64, 0x5DC8, 0x8E65, 0x5DC9, 0x8E66, 0x5DCA, 0x8E67, + 0x5DCB, 0x8E68, 0x5DCC, 0x8E69, 0x5DCD, 0xCEA1, 0x5DCE, 0x8E6A, 0x5DCF, 0x8E6B, 0x5DD0, 0x8E6C, 0x5DD1, 0x8E6D, 0x5DD2, 0x8E6E, + 0x5DD3, 0x8E6F, 0x5DD4, 0x8E70, 0x5DD5, 0x8E71, 0x5DD6, 0x8E72, 0x5DD7, 0x8E73, 0x5DD8, 0x8E74, 0x5DD9, 0x8E75, 0x5DDA, 0x8E76, + 0x5DDB, 0xE7DD, 0x5DDC, 0x8E77, 0x5DDD, 0xB4A8, 0x5DDE, 0xD6DD, 0x5DDF, 0x8E78, 0x5DE0, 0x8E79, 0x5DE1, 0xD1B2, 0x5DE2, 0xB3B2, + 0x5DE3, 0x8E7A, 0x5DE4, 0x8E7B, 0x5DE5, 0xB9A4, 0x5DE6, 0xD7F3, 0x5DE7, 0xC7C9, 0x5DE8, 0xBEDE, 0x5DE9, 0xB9AE, 0x5DEA, 0x8E7C, + 0x5DEB, 0xCED7, 0x5DEC, 0x8E7D, 0x5DED, 0x8E7E, 0x5DEE, 0xB2EE, 0x5DEF, 0xDBCF, 0x5DF0, 0x8E80, 0x5DF1, 0xBCBA, 0x5DF2, 0xD2D1, + 0x5DF3, 0xCBC8, 0x5DF4, 0xB0CD, 0x5DF5, 0x8E81, 0x5DF6, 0x8E82, 0x5DF7, 0xCFEF, 0x5DF8, 0x8E83, 0x5DF9, 0x8E84, 0x5DFA, 0x8E85, + 0x5DFB, 0x8E86, 0x5DFC, 0x8E87, 0x5DFD, 0xD9E3, 0x5DFE, 0xBDED, 0x5DFF, 0x8E88, 0x5E00, 0x8E89, 0x5E01, 0xB1D2, 0x5E02, 0xCAD0, + 0x5E03, 0xB2BC, 0x5E04, 0x8E8A, 0x5E05, 0xCBA7, 0x5E06, 0xB7AB, 0x5E07, 0x8E8B, 0x5E08, 0xCAA6, 0x5E09, 0x8E8C, 0x5E0A, 0x8E8D, + 0x5E0B, 0x8E8E, 0x5E0C, 0xCFA3, 0x5E0D, 0x8E8F, 0x5E0E, 0x8E90, 0x5E0F, 0xE0F8, 0x5E10, 0xD5CA, 0x5E11, 0xE0FB, 0x5E12, 0x8E91, + 0x5E13, 0x8E92, 0x5E14, 0xE0FA, 0x5E15, 0xC5C1, 0x5E16, 0xCCFB, 0x5E17, 0x8E93, 0x5E18, 0xC1B1, 0x5E19, 0xE0F9, 0x5E1A, 0xD6E3, + 0x5E1B, 0xB2AF, 0x5E1C, 0xD6C4, 0x5E1D, 0xB5DB, 0x5E1E, 0x8E94, 0x5E1F, 0x8E95, 0x5E20, 0x8E96, 0x5E21, 0x8E97, 0x5E22, 0x8E98, + 0x5E23, 0x8E99, 0x5E24, 0x8E9A, 0x5E25, 0x8E9B, 0x5E26, 0xB4F8, 0x5E27, 0xD6A1, 0x5E28, 0x8E9C, 0x5E29, 0x8E9D, 0x5E2A, 0x8E9E, + 0x5E2B, 0x8E9F, 0x5E2C, 0x8EA0, 0x5E2D, 0xCFAF, 0x5E2E, 0xB0EF, 0x5E2F, 0x8EA1, 0x5E30, 0x8EA2, 0x5E31, 0xE0FC, 0x5E32, 0x8EA3, + 0x5E33, 0x8EA4, 0x5E34, 0x8EA5, 0x5E35, 0x8EA6, 0x5E36, 0x8EA7, 0x5E37, 0xE1A1, 0x5E38, 0xB3A3, 0x5E39, 0x8EA8, 0x5E3A, 0x8EA9, + 0x5E3B, 0xE0FD, 0x5E3C, 0xE0FE, 0x5E3D, 0xC3B1, 0x5E3E, 0x8EAA, 0x5E3F, 0x8EAB, 0x5E40, 0x8EAC, 0x5E41, 0x8EAD, 0x5E42, 0xC3DD, + 0x5E43, 0x8EAE, 0x5E44, 0xE1A2, 0x5E45, 0xB7F9, 0x5E46, 0x8EAF, 0x5E47, 0x8EB0, 0x5E48, 0x8EB1, 0x5E49, 0x8EB2, 0x5E4A, 0x8EB3, + 0x5E4B, 0x8EB4, 0x5E4C, 0xBBCF, 0x5E4D, 0x8EB5, 0x5E4E, 0x8EB6, 0x5E4F, 0x8EB7, 0x5E50, 0x8EB8, 0x5E51, 0x8EB9, 0x5E52, 0x8EBA, + 0x5E53, 0x8EBB, 0x5E54, 0xE1A3, 0x5E55, 0xC4BB, 0x5E56, 0x8EBC, 0x5E57, 0x8EBD, 0x5E58, 0x8EBE, 0x5E59, 0x8EBF, 0x5E5A, 0x8EC0, + 0x5E5B, 0xE1A4, 0x5E5C, 0x8EC1, 0x5E5D, 0x8EC2, 0x5E5E, 0xE1A5, 0x5E5F, 0x8EC3, 0x5E60, 0x8EC4, 0x5E61, 0xE1A6, 0x5E62, 0xB4B1, + 0x5E63, 0x8EC5, 0x5E64, 0x8EC6, 0x5E65, 0x8EC7, 0x5E66, 0x8EC8, 0x5E67, 0x8EC9, 0x5E68, 0x8ECA, 0x5E69, 0x8ECB, 0x5E6A, 0x8ECC, + 0x5E6B, 0x8ECD, 0x5E6C, 0x8ECE, 0x5E6D, 0x8ECF, 0x5E6E, 0x8ED0, 0x5E6F, 0x8ED1, 0x5E70, 0x8ED2, 0x5E71, 0x8ED3, 0x5E72, 0xB8C9, + 0x5E73, 0xC6BD, 0x5E74, 0xC4EA, 0x5E75, 0x8ED4, 0x5E76, 0xB2A2, 0x5E77, 0x8ED5, 0x5E78, 0xD0D2, 0x5E79, 0x8ED6, 0x5E7A, 0xE7DB, + 0x5E7B, 0xBBC3, 0x5E7C, 0xD3D7, 0x5E7D, 0xD3C4, 0x5E7E, 0x8ED7, 0x5E7F, 0xB9E3, 0x5E80, 0xE2CF, 0x5E81, 0x8ED8, 0x5E82, 0x8ED9, + 0x5E83, 0x8EDA, 0x5E84, 0xD7AF, 0x5E85, 0x8EDB, 0x5E86, 0xC7EC, 0x5E87, 0xB1D3, 0x5E88, 0x8EDC, 0x5E89, 0x8EDD, 0x5E8A, 0xB4B2, + 0x5E8B, 0xE2D1, 0x5E8C, 0x8EDE, 0x5E8D, 0x8EDF, 0x5E8E, 0x8EE0, 0x5E8F, 0xD0F2, 0x5E90, 0xC2AE, 0x5E91, 0xE2D0, 0x5E92, 0x8EE1, + 0x5E93, 0xBFE2, 0x5E94, 0xD3A6, 0x5E95, 0xB5D7, 0x5E96, 0xE2D2, 0x5E97, 0xB5EA, 0x5E98, 0x8EE2, 0x5E99, 0xC3ED, 0x5E9A, 0xB8FD, + 0x5E9B, 0x8EE3, 0x5E9C, 0xB8AE, 0x5E9D, 0x8EE4, 0x5E9E, 0xC5D3, 0x5E9F, 0xB7CF, 0x5EA0, 0xE2D4, 0x5EA1, 0x8EE5, 0x5EA2, 0x8EE6, + 0x5EA3, 0x8EE7, 0x5EA4, 0x8EE8, 0x5EA5, 0xE2D3, 0x5EA6, 0xB6C8, 0x5EA7, 0xD7F9, 0x5EA8, 0x8EE9, 0x5EA9, 0x8EEA, 0x5EAA, 0x8EEB, + 0x5EAB, 0x8EEC, 0x5EAC, 0x8EED, 0x5EAD, 0xCDA5, 0x5EAE, 0x8EEE, 0x5EAF, 0x8EEF, 0x5EB0, 0x8EF0, 0x5EB1, 0x8EF1, 0x5EB2, 0x8EF2, + 0x5EB3, 0xE2D8, 0x5EB4, 0x8EF3, 0x5EB5, 0xE2D6, 0x5EB6, 0xCAFC, 0x5EB7, 0xBFB5, 0x5EB8, 0xD3B9, 0x5EB9, 0xE2D5, 0x5EBA, 0x8EF4, + 0x5EBB, 0x8EF5, 0x5EBC, 0x8EF6, 0x5EBD, 0x8EF7, 0x5EBE, 0xE2D7, 0x5EBF, 0x8EF8, 0x5EC0, 0x8EF9, 0x5EC1, 0x8EFA, 0x5EC2, 0x8EFB, + 0x5EC3, 0x8EFC, 0x5EC4, 0x8EFD, 0x5EC5, 0x8EFE, 0x5EC6, 0x8F40, 0x5EC7, 0x8F41, 0x5EC8, 0x8F42, 0x5EC9, 0xC1AE, 0x5ECA, 0xC0C8, + 0x5ECB, 0x8F43, 0x5ECC, 0x8F44, 0x5ECD, 0x8F45, 0x5ECE, 0x8F46, 0x5ECF, 0x8F47, 0x5ED0, 0x8F48, 0x5ED1, 0xE2DB, 0x5ED2, 0xE2DA, + 0x5ED3, 0xC0AA, 0x5ED4, 0x8F49, 0x5ED5, 0x8F4A, 0x5ED6, 0xC1CE, 0x5ED7, 0x8F4B, 0x5ED8, 0x8F4C, 0x5ED9, 0x8F4D, 0x5EDA, 0x8F4E, + 0x5EDB, 0xE2DC, 0x5EDC, 0x8F4F, 0x5EDD, 0x8F50, 0x5EDE, 0x8F51, 0x5EDF, 0x8F52, 0x5EE0, 0x8F53, 0x5EE1, 0x8F54, 0x5EE2, 0x8F55, + 0x5EE3, 0x8F56, 0x5EE4, 0x8F57, 0x5EE5, 0x8F58, 0x5EE6, 0x8F59, 0x5EE7, 0x8F5A, 0x5EE8, 0xE2DD, 0x5EE9, 0x8F5B, 0x5EEA, 0xE2DE, + 0x5EEB, 0x8F5C, 0x5EEC, 0x8F5D, 0x5EED, 0x8F5E, 0x5EEE, 0x8F5F, 0x5EEF, 0x8F60, 0x5EF0, 0x8F61, 0x5EF1, 0x8F62, 0x5EF2, 0x8F63, + 0x5EF3, 0x8F64, 0x5EF4, 0xDBC8, 0x5EF5, 0x8F65, 0x5EF6, 0xD1D3, 0x5EF7, 0xCDA2, 0x5EF8, 0x8F66, 0x5EF9, 0x8F67, 0x5EFA, 0xBDA8, + 0x5EFB, 0x8F68, 0x5EFC, 0x8F69, 0x5EFD, 0x8F6A, 0x5EFE, 0xDEC3, 0x5EFF, 0xD8A5, 0x5F00, 0xBFAA, 0x5F01, 0xDBCD, 0x5F02, 0xD2EC, + 0x5F03, 0xC6FA, 0x5F04, 0xC5AA, 0x5F05, 0x8F6B, 0x5F06, 0x8F6C, 0x5F07, 0x8F6D, 0x5F08, 0xDEC4, 0x5F09, 0x8F6E, 0x5F0A, 0xB1D7, + 0x5F0B, 0xDFAE, 0x5F0C, 0x8F6F, 0x5F0D, 0x8F70, 0x5F0E, 0x8F71, 0x5F0F, 0xCABD, 0x5F10, 0x8F72, 0x5F11, 0xDFB1, 0x5F12, 0x8F73, + 0x5F13, 0xB9AD, 0x5F14, 0x8F74, 0x5F15, 0xD2FD, 0x5F16, 0x8F75, 0x5F17, 0xB8A5, 0x5F18, 0xBAEB, 0x5F19, 0x8F76, 0x5F1A, 0x8F77, + 0x5F1B, 0xB3DA, 0x5F1C, 0x8F78, 0x5F1D, 0x8F79, 0x5F1E, 0x8F7A, 0x5F1F, 0xB5DC, 0x5F20, 0xD5C5, 0x5F21, 0x8F7B, 0x5F22, 0x8F7C, + 0x5F23, 0x8F7D, 0x5F24, 0x8F7E, 0x5F25, 0xC3D6, 0x5F26, 0xCFD2, 0x5F27, 0xBBA1, 0x5F28, 0x8F80, 0x5F29, 0xE5F3, 0x5F2A, 0xE5F2, + 0x5F2B, 0x8F81, 0x5F2C, 0x8F82, 0x5F2D, 0xE5F4, 0x5F2E, 0x8F83, 0x5F2F, 0xCDE4, 0x5F30, 0x8F84, 0x5F31, 0xC8F5, 0x5F32, 0x8F85, + 0x5F33, 0x8F86, 0x5F34, 0x8F87, 0x5F35, 0x8F88, 0x5F36, 0x8F89, 0x5F37, 0x8F8A, 0x5F38, 0x8F8B, 0x5F39, 0xB5AF, 0x5F3A, 0xC7BF, + 0x5F3B, 0x8F8C, 0x5F3C, 0xE5F6, 0x5F3D, 0x8F8D, 0x5F3E, 0x8F8E, 0x5F3F, 0x8F8F, 0x5F40, 0xECB0, 0x5F41, 0x8F90, 0x5F42, 0x8F91, + 0x5F43, 0x8F92, 0x5F44, 0x8F93, 0x5F45, 0x8F94, 0x5F46, 0x8F95, 0x5F47, 0x8F96, 0x5F48, 0x8F97, 0x5F49, 0x8F98, 0x5F4A, 0x8F99, + 0x5F4B, 0x8F9A, 0x5F4C, 0x8F9B, 0x5F4D, 0x8F9C, 0x5F4E, 0x8F9D, 0x5F4F, 0x8F9E, 0x5F50, 0xE5E6, 0x5F51, 0x8F9F, 0x5F52, 0xB9E9, + 0x5F53, 0xB5B1, 0x5F54, 0x8FA0, 0x5F55, 0xC2BC, 0x5F56, 0xE5E8, 0x5F57, 0xE5E7, 0x5F58, 0xE5E9, 0x5F59, 0x8FA1, 0x5F5A, 0x8FA2, + 0x5F5B, 0x8FA3, 0x5F5C, 0x8FA4, 0x5F5D, 0xD2CD, 0x5F5E, 0x8FA5, 0x5F5F, 0x8FA6, 0x5F60, 0x8FA7, 0x5F61, 0xE1EA, 0x5F62, 0xD0CE, + 0x5F63, 0x8FA8, 0x5F64, 0xCDAE, 0x5F65, 0x8FA9, 0x5F66, 0xD1E5, 0x5F67, 0x8FAA, 0x5F68, 0x8FAB, 0x5F69, 0xB2CA, 0x5F6A, 0xB1EB, + 0x5F6B, 0x8FAC, 0x5F6C, 0xB1F2, 0x5F6D, 0xC5ED, 0x5F6E, 0x8FAD, 0x5F6F, 0x8FAE, 0x5F70, 0xD5C3, 0x5F71, 0xD3B0, 0x5F72, 0x8FAF, + 0x5F73, 0xE1DC, 0x5F74, 0x8FB0, 0x5F75, 0x8FB1, 0x5F76, 0x8FB2, 0x5F77, 0xE1DD, 0x5F78, 0x8FB3, 0x5F79, 0xD2DB, 0x5F7A, 0x8FB4, + 0x5F7B, 0xB3B9, 0x5F7C, 0xB1CB, 0x5F7D, 0x8FB5, 0x5F7E, 0x8FB6, 0x5F7F, 0x8FB7, 0x5F80, 0xCDF9, 0x5F81, 0xD5F7, 0x5F82, 0xE1DE, + 0x5F83, 0x8FB8, 0x5F84, 0xBEB6, 0x5F85, 0xB4FD, 0x5F86, 0x8FB9, 0x5F87, 0xE1DF, 0x5F88, 0xBADC, 0x5F89, 0xE1E0, 0x5F8A, 0xBBB2, + 0x5F8B, 0xC2C9, 0x5F8C, 0xE1E1, 0x5F8D, 0x8FBA, 0x5F8E, 0x8FBB, 0x5F8F, 0x8FBC, 0x5F90, 0xD0EC, 0x5F91, 0x8FBD, 0x5F92, 0xCDBD, + 0x5F93, 0x8FBE, 0x5F94, 0x8FBF, 0x5F95, 0xE1E2, 0x5F96, 0x8FC0, 0x5F97, 0xB5C3, 0x5F98, 0xC5C7, 0x5F99, 0xE1E3, 0x5F9A, 0x8FC1, + 0x5F9B, 0x8FC2, 0x5F9C, 0xE1E4, 0x5F9D, 0x8FC3, 0x5F9E, 0x8FC4, 0x5F9F, 0x8FC5, 0x5FA0, 0x8FC6, 0x5FA1, 0xD3F9, 0x5FA2, 0x8FC7, + 0x5FA3, 0x8FC8, 0x5FA4, 0x8FC9, 0x5FA5, 0x8FCA, 0x5FA6, 0x8FCB, 0x5FA7, 0x8FCC, 0x5FA8, 0xE1E5, 0x5FA9, 0x8FCD, 0x5FAA, 0xD1AD, + 0x5FAB, 0x8FCE, 0x5FAC, 0x8FCF, 0x5FAD, 0xE1E6, 0x5FAE, 0xCEA2, 0x5FAF, 0x8FD0, 0x5FB0, 0x8FD1, 0x5FB1, 0x8FD2, 0x5FB2, 0x8FD3, + 0x5FB3, 0x8FD4, 0x5FB4, 0x8FD5, 0x5FB5, 0xE1E7, 0x5FB6, 0x8FD6, 0x5FB7, 0xB5C2, 0x5FB8, 0x8FD7, 0x5FB9, 0x8FD8, 0x5FBA, 0x8FD9, + 0x5FBB, 0x8FDA, 0x5FBC, 0xE1E8, 0x5FBD, 0xBBD5, 0x5FBE, 0x8FDB, 0x5FBF, 0x8FDC, 0x5FC0, 0x8FDD, 0x5FC1, 0x8FDE, 0x5FC2, 0x8FDF, + 0x5FC3, 0xD0C4, 0x5FC4, 0xE2E0, 0x5FC5, 0xB1D8, 0x5FC6, 0xD2E4, 0x5FC7, 0x8FE0, 0x5FC8, 0x8FE1, 0x5FC9, 0xE2E1, 0x5FCA, 0x8FE2, + 0x5FCB, 0x8FE3, 0x5FCC, 0xBCC9, 0x5FCD, 0xC8CC, 0x5FCE, 0x8FE4, 0x5FCF, 0xE2E3, 0x5FD0, 0xECFE, 0x5FD1, 0xECFD, 0x5FD2, 0xDFAF, + 0x5FD3, 0x8FE5, 0x5FD4, 0x8FE6, 0x5FD5, 0x8FE7, 0x5FD6, 0xE2E2, 0x5FD7, 0xD6BE, 0x5FD8, 0xCDFC, 0x5FD9, 0xC3A6, 0x5FDA, 0x8FE8, + 0x5FDB, 0x8FE9, 0x5FDC, 0x8FEA, 0x5FDD, 0xE3C3, 0x5FDE, 0x8FEB, 0x5FDF, 0x8FEC, 0x5FE0, 0xD6D2, 0x5FE1, 0xE2E7, 0x5FE2, 0x8FED, + 0x5FE3, 0x8FEE, 0x5FE4, 0xE2E8, 0x5FE5, 0x8FEF, 0x5FE6, 0x8FF0, 0x5FE7, 0xD3C7, 0x5FE8, 0x8FF1, 0x5FE9, 0x8FF2, 0x5FEA, 0xE2EC, + 0x5FEB, 0xBFEC, 0x5FEC, 0x8FF3, 0x5FED, 0xE2ED, 0x5FEE, 0xE2E5, 0x5FEF, 0x8FF4, 0x5FF0, 0x8FF5, 0x5FF1, 0xB3C0, 0x5FF2, 0x8FF6, + 0x5FF3, 0x8FF7, 0x5FF4, 0x8FF8, 0x5FF5, 0xC4EE, 0x5FF6, 0x8FF9, 0x5FF7, 0x8FFA, 0x5FF8, 0xE2EE, 0x5FF9, 0x8FFB, 0x5FFA, 0x8FFC, + 0x5FFB, 0xD0C3, 0x5FFC, 0x8FFD, 0x5FFD, 0xBAF6, 0x5FFE, 0xE2E9, 0x5FFF, 0xB7DE, 0x6000, 0xBBB3, 0x6001, 0xCCAC, 0x6002, 0xCBCB, + 0x6003, 0xE2E4, 0x6004, 0xE2E6, 0x6005, 0xE2EA, 0x6006, 0xE2EB, 0x6007, 0x8FFE, 0x6008, 0x9040, 0x6009, 0x9041, 0x600A, 0xE2F7, + 0x600B, 0x9042, 0x600C, 0x9043, 0x600D, 0xE2F4, 0x600E, 0xD4F5, 0x600F, 0xE2F3, 0x6010, 0x9044, 0x6011, 0x9045, 0x6012, 0xC5AD, + 0x6013, 0x9046, 0x6014, 0xD5FA, 0x6015, 0xC5C2, 0x6016, 0xB2C0, 0x6017, 0x9047, 0x6018, 0x9048, 0x6019, 0xE2EF, 0x601A, 0x9049, + 0x601B, 0xE2F2, 0x601C, 0xC1AF, 0x601D, 0xCBBC, 0x601E, 0x904A, 0x601F, 0x904B, 0x6020, 0xB5A1, 0x6021, 0xE2F9, 0x6022, 0x904C, + 0x6023, 0x904D, 0x6024, 0x904E, 0x6025, 0xBCB1, 0x6026, 0xE2F1, 0x6027, 0xD0D4, 0x6028, 0xD4B9, 0x6029, 0xE2F5, 0x602A, 0xB9D6, + 0x602B, 0xE2F6, 0x602C, 0x904F, 0x602D, 0x9050, 0x602E, 0x9051, 0x602F, 0xC7D3, 0x6030, 0x9052, 0x6031, 0x9053, 0x6032, 0x9054, + 0x6033, 0x9055, 0x6034, 0x9056, 0x6035, 0xE2F0, 0x6036, 0x9057, 0x6037, 0x9058, 0x6038, 0x9059, 0x6039, 0x905A, 0x603A, 0x905B, + 0x603B, 0xD7DC, 0x603C, 0xEDA1, 0x603D, 0x905C, 0x603E, 0x905D, 0x603F, 0xE2F8, 0x6040, 0x905E, 0x6041, 0xEDA5, 0x6042, 0xE2FE, + 0x6043, 0xCAD1, 0x6044, 0x905F, 0x6045, 0x9060, 0x6046, 0x9061, 0x6047, 0x9062, 0x6048, 0x9063, 0x6049, 0x9064, 0x604A, 0x9065, + 0x604B, 0xC1B5, 0x604C, 0x9066, 0x604D, 0xBBD0, 0x604E, 0x9067, 0x604F, 0x9068, 0x6050, 0xBFD6, 0x6051, 0x9069, 0x6052, 0xBAE3, + 0x6053, 0x906A, 0x6054, 0x906B, 0x6055, 0xCBA1, 0x6056, 0x906C, 0x6057, 0x906D, 0x6058, 0x906E, 0x6059, 0xEDA6, 0x605A, 0xEDA3, + 0x605B, 0x906F, 0x605C, 0x9070, 0x605D, 0xEDA2, 0x605E, 0x9071, 0x605F, 0x9072, 0x6060, 0x9073, 0x6061, 0x9074, 0x6062, 0xBBD6, + 0x6063, 0xEDA7, 0x6064, 0xD0F4, 0x6065, 0x9075, 0x6066, 0x9076, 0x6067, 0xEDA4, 0x6068, 0xBADE, 0x6069, 0xB6F7, 0x606A, 0xE3A1, + 0x606B, 0xB6B2, 0x606C, 0xCCF1, 0x606D, 0xB9A7, 0x606E, 0x9077, 0x606F, 0xCFA2, 0x6070, 0xC7A1, 0x6071, 0x9078, 0x6072, 0x9079, + 0x6073, 0xBFD2, 0x6074, 0x907A, 0x6075, 0x907B, 0x6076, 0xB6F1, 0x6077, 0x907C, 0x6078, 0xE2FA, 0x6079, 0xE2FB, 0x607A, 0xE2FD, + 0x607B, 0xE2FC, 0x607C, 0xC4D5, 0x607D, 0xE3A2, 0x607E, 0x907D, 0x607F, 0xD3C1, 0x6080, 0x907E, 0x6081, 0x9080, 0x6082, 0x9081, + 0x6083, 0xE3A7, 0x6084, 0xC7C4, 0x6085, 0x9082, 0x6086, 0x9083, 0x6087, 0x9084, 0x6088, 0x9085, 0x6089, 0xCFA4, 0x608A, 0x9086, + 0x608B, 0x9087, 0x608C, 0xE3A9, 0x608D, 0xBAB7, 0x608E, 0x9088, 0x608F, 0x9089, 0x6090, 0x908A, 0x6091, 0x908B, 0x6092, 0xE3A8, + 0x6093, 0x908C, 0x6094, 0xBBDA, 0x6095, 0x908D, 0x6096, 0xE3A3, 0x6097, 0x908E, 0x6098, 0x908F, 0x6099, 0x9090, 0x609A, 0xE3A4, + 0x609B, 0xE3AA, 0x609C, 0x9091, 0x609D, 0xE3A6, 0x609E, 0x9092, 0x609F, 0xCEF2, 0x60A0, 0xD3C6, 0x60A1, 0x9093, 0x60A2, 0x9094, + 0x60A3, 0xBBBC, 0x60A4, 0x9095, 0x60A5, 0x9096, 0x60A6, 0xD4C3, 0x60A7, 0x9097, 0x60A8, 0xC4FA, 0x60A9, 0x9098, 0x60AA, 0x9099, + 0x60AB, 0xEDA8, 0x60AC, 0xD0FC, 0x60AD, 0xE3A5, 0x60AE, 0x909A, 0x60AF, 0xC3F5, 0x60B0, 0x909B, 0x60B1, 0xE3AD, 0x60B2, 0xB1AF, + 0x60B3, 0x909C, 0x60B4, 0xE3B2, 0x60B5, 0x909D, 0x60B6, 0x909E, 0x60B7, 0x909F, 0x60B8, 0xBCC2, 0x60B9, 0x90A0, 0x60BA, 0x90A1, + 0x60BB, 0xE3AC, 0x60BC, 0xB5BF, 0x60BD, 0x90A2, 0x60BE, 0x90A3, 0x60BF, 0x90A4, 0x60C0, 0x90A5, 0x60C1, 0x90A6, 0x60C2, 0x90A7, + 0x60C3, 0x90A8, 0x60C4, 0x90A9, 0x60C5, 0xC7E9, 0x60C6, 0xE3B0, 0x60C7, 0x90AA, 0x60C8, 0x90AB, 0x60C9, 0x90AC, 0x60CA, 0xBEAA, + 0x60CB, 0xCDEF, 0x60CC, 0x90AD, 0x60CD, 0x90AE, 0x60CE, 0x90AF, 0x60CF, 0x90B0, 0x60D0, 0x90B1, 0x60D1, 0xBBF3, 0x60D2, 0x90B2, + 0x60D3, 0x90B3, 0x60D4, 0x90B4, 0x60D5, 0xCCE8, 0x60D6, 0x90B5, 0x60D7, 0x90B6, 0x60D8, 0xE3AF, 0x60D9, 0x90B7, 0x60DA, 0xE3B1, + 0x60DB, 0x90B8, 0x60DC, 0xCFA7, 0x60DD, 0xE3AE, 0x60DE, 0x90B9, 0x60DF, 0xCEA9, 0x60E0, 0xBBDD, 0x60E1, 0x90BA, 0x60E2, 0x90BB, + 0x60E3, 0x90BC, 0x60E4, 0x90BD, 0x60E5, 0x90BE, 0x60E6, 0xB5EB, 0x60E7, 0xBEE5, 0x60E8, 0xB2D2, 0x60E9, 0xB3CD, 0x60EA, 0x90BF, + 0x60EB, 0xB1B9, 0x60EC, 0xE3AB, 0x60ED, 0xB2D1, 0x60EE, 0xB5AC, 0x60EF, 0xB9DF, 0x60F0, 0xB6E8, 0x60F1, 0x90C0, 0x60F2, 0x90C1, + 0x60F3, 0xCFEB, 0x60F4, 0xE3B7, 0x60F5, 0x90C2, 0x60F6, 0xBBCC, 0x60F7, 0x90C3, 0x60F8, 0x90C4, 0x60F9, 0xC8C7, 0x60FA, 0xD0CA, + 0x60FB, 0x90C5, 0x60FC, 0x90C6, 0x60FD, 0x90C7, 0x60FE, 0x90C8, 0x60FF, 0x90C9, 0x6100, 0xE3B8, 0x6101, 0xB3EE, 0x6102, 0x90CA, + 0x6103, 0x90CB, 0x6104, 0x90CC, 0x6105, 0x90CD, 0x6106, 0xEDA9, 0x6107, 0x90CE, 0x6108, 0xD3FA, 0x6109, 0xD3E4, 0x610A, 0x90CF, + 0x610B, 0x90D0, 0x610C, 0x90D1, 0x610D, 0xEDAA, 0x610E, 0xE3B9, 0x610F, 0xD2E2, 0x6110, 0x90D2, 0x6111, 0x90D3, 0x6112, 0x90D4, + 0x6113, 0x90D5, 0x6114, 0x90D6, 0x6115, 0xE3B5, 0x6116, 0x90D7, 0x6117, 0x90D8, 0x6118, 0x90D9, 0x6119, 0x90DA, 0x611A, 0xD3DE, + 0x611B, 0x90DB, 0x611C, 0x90DC, 0x611D, 0x90DD, 0x611E, 0x90DE, 0x611F, 0xB8D0, 0x6120, 0xE3B3, 0x6121, 0x90DF, 0x6122, 0x90E0, + 0x6123, 0xE3B6, 0x6124, 0xB7DF, 0x6125, 0x90E1, 0x6126, 0xE3B4, 0x6127, 0xC0A2, 0x6128, 0x90E2, 0x6129, 0x90E3, 0x612A, 0x90E4, + 0x612B, 0xE3BA, 0x612C, 0x90E5, 0x612D, 0x90E6, 0x612E, 0x90E7, 0x612F, 0x90E8, 0x6130, 0x90E9, 0x6131, 0x90EA, 0x6132, 0x90EB, + 0x6133, 0x90EC, 0x6134, 0x90ED, 0x6135, 0x90EE, 0x6136, 0x90EF, 0x6137, 0x90F0, 0x6138, 0x90F1, 0x6139, 0x90F2, 0x613A, 0x90F3, + 0x613B, 0x90F4, 0x613C, 0x90F5, 0x613D, 0x90F6, 0x613E, 0x90F7, 0x613F, 0xD4B8, 0x6140, 0x90F8, 0x6141, 0x90F9, 0x6142, 0x90FA, + 0x6143, 0x90FB, 0x6144, 0x90FC, 0x6145, 0x90FD, 0x6146, 0x90FE, 0x6147, 0x9140, 0x6148, 0xB4C8, 0x6149, 0x9141, 0x614A, 0xE3BB, + 0x614B, 0x9142, 0x614C, 0xBBC5, 0x614D, 0x9143, 0x614E, 0xC9F7, 0x614F, 0x9144, 0x6150, 0x9145, 0x6151, 0xC9E5, 0x6152, 0x9146, + 0x6153, 0x9147, 0x6154, 0x9148, 0x6155, 0xC4BD, 0x6156, 0x9149, 0x6157, 0x914A, 0x6158, 0x914B, 0x6159, 0x914C, 0x615A, 0x914D, + 0x615B, 0x914E, 0x615C, 0x914F, 0x615D, 0xEDAB, 0x615E, 0x9150, 0x615F, 0x9151, 0x6160, 0x9152, 0x6161, 0x9153, 0x6162, 0xC2FD, + 0x6163, 0x9154, 0x6164, 0x9155, 0x6165, 0x9156, 0x6166, 0x9157, 0x6167, 0xBBDB, 0x6168, 0xBFAE, 0x6169, 0x9158, 0x616A, 0x9159, + 0x616B, 0x915A, 0x616C, 0x915B, 0x616D, 0x915C, 0x616E, 0x915D, 0x616F, 0x915E, 0x6170, 0xCEBF, 0x6171, 0x915F, 0x6172, 0x9160, + 0x6173, 0x9161, 0x6174, 0x9162, 0x6175, 0xE3BC, 0x6176, 0x9163, 0x6177, 0xBFB6, 0x6178, 0x9164, 0x6179, 0x9165, 0x617A, 0x9166, + 0x617B, 0x9167, 0x617C, 0x9168, 0x617D, 0x9169, 0x617E, 0x916A, 0x617F, 0x916B, 0x6180, 0x916C, 0x6181, 0x916D, 0x6182, 0x916E, + 0x6183, 0x916F, 0x6184, 0x9170, 0x6185, 0x9171, 0x6186, 0x9172, 0x6187, 0x9173, 0x6188, 0x9174, 0x6189, 0x9175, 0x618A, 0x9176, + 0x618B, 0xB1EF, 0x618C, 0x9177, 0x618D, 0x9178, 0x618E, 0xD4F7, 0x618F, 0x9179, 0x6190, 0x917A, 0x6191, 0x917B, 0x6192, 0x917C, + 0x6193, 0x917D, 0x6194, 0xE3BE, 0x6195, 0x917E, 0x6196, 0x9180, 0x6197, 0x9181, 0x6198, 0x9182, 0x6199, 0x9183, 0x619A, 0x9184, + 0x619B, 0x9185, 0x619C, 0x9186, 0x619D, 0xEDAD, 0x619E, 0x9187, 0x619F, 0x9188, 0x61A0, 0x9189, 0x61A1, 0x918A, 0x61A2, 0x918B, + 0x61A3, 0x918C, 0x61A4, 0x918D, 0x61A5, 0x918E, 0x61A6, 0x918F, 0x61A7, 0xE3BF, 0x61A8, 0xBAA9, 0x61A9, 0xEDAC, 0x61AA, 0x9190, + 0x61AB, 0x9191, 0x61AC, 0xE3BD, 0x61AD, 0x9192, 0x61AE, 0x9193, 0x61AF, 0x9194, 0x61B0, 0x9195, 0x61B1, 0x9196, 0x61B2, 0x9197, + 0x61B3, 0x9198, 0x61B4, 0x9199, 0x61B5, 0x919A, 0x61B6, 0x919B, 0x61B7, 0xE3C0, 0x61B8, 0x919C, 0x61B9, 0x919D, 0x61BA, 0x919E, + 0x61BB, 0x919F, 0x61BC, 0x91A0, 0x61BD, 0x91A1, 0x61BE, 0xBAB6, 0x61BF, 0x91A2, 0x61C0, 0x91A3, 0x61C1, 0x91A4, 0x61C2, 0xB6AE, + 0x61C3, 0x91A5, 0x61C4, 0x91A6, 0x61C5, 0x91A7, 0x61C6, 0x91A8, 0x61C7, 0x91A9, 0x61C8, 0xD0B8, 0x61C9, 0x91AA, 0x61CA, 0xB0C3, + 0x61CB, 0xEDAE, 0x61CC, 0x91AB, 0x61CD, 0x91AC, 0x61CE, 0x91AD, 0x61CF, 0x91AE, 0x61D0, 0x91AF, 0x61D1, 0xEDAF, 0x61D2, 0xC0C1, + 0x61D3, 0x91B0, 0x61D4, 0xE3C1, 0x61D5, 0x91B1, 0x61D6, 0x91B2, 0x61D7, 0x91B3, 0x61D8, 0x91B4, 0x61D9, 0x91B5, 0x61DA, 0x91B6, + 0x61DB, 0x91B7, 0x61DC, 0x91B8, 0x61DD, 0x91B9, 0x61DE, 0x91BA, 0x61DF, 0x91BB, 0x61E0, 0x91BC, 0x61E1, 0x91BD, 0x61E2, 0x91BE, + 0x61E3, 0x91BF, 0x61E4, 0x91C0, 0x61E5, 0x91C1, 0x61E6, 0xC5B3, 0x61E7, 0x91C2, 0x61E8, 0x91C3, 0x61E9, 0x91C4, 0x61EA, 0x91C5, + 0x61EB, 0x91C6, 0x61EC, 0x91C7, 0x61ED, 0x91C8, 0x61EE, 0x91C9, 0x61EF, 0x91CA, 0x61F0, 0x91CB, 0x61F1, 0x91CC, 0x61F2, 0x91CD, + 0x61F3, 0x91CE, 0x61F4, 0x91CF, 0x61F5, 0xE3C2, 0x61F6, 0x91D0, 0x61F7, 0x91D1, 0x61F8, 0x91D2, 0x61F9, 0x91D3, 0x61FA, 0x91D4, + 0x61FB, 0x91D5, 0x61FC, 0x91D6, 0x61FD, 0x91D7, 0x61FE, 0x91D8, 0x61FF, 0xDCB2, 0x6200, 0x91D9, 0x6201, 0x91DA, 0x6202, 0x91DB, + 0x6203, 0x91DC, 0x6204, 0x91DD, 0x6205, 0x91DE, 0x6206, 0xEDB0, 0x6207, 0x91DF, 0x6208, 0xB8EA, 0x6209, 0x91E0, 0x620A, 0xCEEC, + 0x620B, 0xEAA7, 0x620C, 0xD0E7, 0x620D, 0xCAF9, 0x620E, 0xC8D6, 0x620F, 0xCFB7, 0x6210, 0xB3C9, 0x6211, 0xCED2, 0x6212, 0xBDE4, + 0x6213, 0x91E1, 0x6214, 0x91E2, 0x6215, 0xE3DE, 0x6216, 0xBBF2, 0x6217, 0xEAA8, 0x6218, 0xD5BD, 0x6219, 0x91E3, 0x621A, 0xC6DD, + 0x621B, 0xEAA9, 0x621C, 0x91E4, 0x621D, 0x91E5, 0x621E, 0x91E6, 0x621F, 0xEAAA, 0x6220, 0x91E7, 0x6221, 0xEAAC, 0x6222, 0xEAAB, + 0x6223, 0x91E8, 0x6224, 0xEAAE, 0x6225, 0xEAAD, 0x6226, 0x91E9, 0x6227, 0x91EA, 0x6228, 0x91EB, 0x6229, 0x91EC, 0x622A, 0xBDD8, + 0x622B, 0x91ED, 0x622C, 0xEAAF, 0x622D, 0x91EE, 0x622E, 0xC2BE, 0x622F, 0x91EF, 0x6230, 0x91F0, 0x6231, 0x91F1, 0x6232, 0x91F2, + 0x6233, 0xB4C1, 0x6234, 0xB4F7, 0x6235, 0x91F3, 0x6236, 0x91F4, 0x6237, 0xBBA7, 0x6238, 0x91F5, 0x6239, 0x91F6, 0x623A, 0x91F7, + 0x623B, 0x91F8, 0x623C, 0x91F9, 0x623D, 0xECE6, 0x623E, 0xECE5, 0x623F, 0xB7BF, 0x6240, 0xCBF9, 0x6241, 0xB1E2, 0x6242, 0x91FA, + 0x6243, 0xECE7, 0x6244, 0x91FB, 0x6245, 0x91FC, 0x6246, 0x91FD, 0x6247, 0xC9C8, 0x6248, 0xECE8, 0x6249, 0xECE9, 0x624A, 0x91FE, + 0x624B, 0xCAD6, 0x624C, 0xDED0, 0x624D, 0xB2C5, 0x624E, 0xD4FA, 0x624F, 0x9240, 0x6250, 0x9241, 0x6251, 0xC6CB, 0x6252, 0xB0C7, + 0x6253, 0xB4F2, 0x6254, 0xC8D3, 0x6255, 0x9242, 0x6256, 0x9243, 0x6257, 0x9244, 0x6258, 0xCDD0, 0x6259, 0x9245, 0x625A, 0x9246, + 0x625B, 0xBFB8, 0x625C, 0x9247, 0x625D, 0x9248, 0x625E, 0x9249, 0x625F, 0x924A, 0x6260, 0x924B, 0x6261, 0x924C, 0x6262, 0x924D, + 0x6263, 0xBFDB, 0x6264, 0x924E, 0x6265, 0x924F, 0x6266, 0xC7A4, 0x6267, 0xD6B4, 0x6268, 0x9250, 0x6269, 0xC0A9, 0x626A, 0xDED1, + 0x626B, 0xC9A8, 0x626C, 0xD1EF, 0x626D, 0xC5A4, 0x626E, 0xB0E7, 0x626F, 0xB3B6, 0x6270, 0xC8C5, 0x6271, 0x9251, 0x6272, 0x9252, + 0x6273, 0xB0E2, 0x6274, 0x9253, 0x6275, 0x9254, 0x6276, 0xB7F6, 0x6277, 0x9255, 0x6278, 0x9256, 0x6279, 0xC5FA, 0x627A, 0x9257, + 0x627B, 0x9258, 0x627C, 0xB6F3, 0x627D, 0x9259, 0x627E, 0xD5D2, 0x627F, 0xB3D0, 0x6280, 0xBCBC, 0x6281, 0x925A, 0x6282, 0x925B, + 0x6283, 0x925C, 0x6284, 0xB3AD, 0x6285, 0x925D, 0x6286, 0x925E, 0x6287, 0x925F, 0x6288, 0x9260, 0x6289, 0xBEF1, 0x628A, 0xB0D1, + 0x628B, 0x9261, 0x628C, 0x9262, 0x628D, 0x9263, 0x628E, 0x9264, 0x628F, 0x9265, 0x6290, 0x9266, 0x6291, 0xD2D6, 0x6292, 0xCAE3, + 0x6293, 0xD7A5, 0x6294, 0x9267, 0x6295, 0xCDB6, 0x6296, 0xB6B6, 0x6297, 0xBFB9, 0x6298, 0xD5DB, 0x6299, 0x9268, 0x629A, 0xB8A7, + 0x629B, 0xC5D7, 0x629C, 0x9269, 0x629D, 0x926A, 0x629E, 0x926B, 0x629F, 0xDED2, 0x62A0, 0xBFD9, 0x62A1, 0xC2D5, 0x62A2, 0xC7C0, + 0x62A3, 0x926C, 0x62A4, 0xBBA4, 0x62A5, 0xB1A8, 0x62A6, 0x926D, 0x62A7, 0x926E, 0x62A8, 0xC5EA, 0x62A9, 0x926F, 0x62AA, 0x9270, + 0x62AB, 0xC5FB, 0x62AC, 0xCCA7, 0x62AD, 0x9271, 0x62AE, 0x9272, 0x62AF, 0x9273, 0x62B0, 0x9274, 0x62B1, 0xB1A7, 0x62B2, 0x9275, + 0x62B3, 0x9276, 0x62B4, 0x9277, 0x62B5, 0xB5D6, 0x62B6, 0x9278, 0x62B7, 0x9279, 0x62B8, 0x927A, 0x62B9, 0xC4A8, 0x62BA, 0x927B, + 0x62BB, 0xDED3, 0x62BC, 0xD1BA, 0x62BD, 0xB3E9, 0x62BE, 0x927C, 0x62BF, 0xC3F2, 0x62C0, 0x927D, 0x62C1, 0x927E, 0x62C2, 0xB7F7, + 0x62C3, 0x9280, 0x62C4, 0xD6F4, 0x62C5, 0xB5A3, 0x62C6, 0xB2F0, 0x62C7, 0xC4B4, 0x62C8, 0xC4E9, 0x62C9, 0xC0AD, 0x62CA, 0xDED4, + 0x62CB, 0x9281, 0x62CC, 0xB0E8, 0x62CD, 0xC5C4, 0x62CE, 0xC1E0, 0x62CF, 0x9282, 0x62D0, 0xB9D5, 0x62D1, 0x9283, 0x62D2, 0xBEDC, + 0x62D3, 0xCDD8, 0x62D4, 0xB0CE, 0x62D5, 0x9284, 0x62D6, 0xCDCF, 0x62D7, 0xDED6, 0x62D8, 0xBED0, 0x62D9, 0xD7BE, 0x62DA, 0xDED5, + 0x62DB, 0xD5D0, 0x62DC, 0xB0DD, 0x62DD, 0x9285, 0x62DE, 0x9286, 0x62DF, 0xC4E2, 0x62E0, 0x9287, 0x62E1, 0x9288, 0x62E2, 0xC2A3, + 0x62E3, 0xBCF0, 0x62E4, 0x9289, 0x62E5, 0xD3B5, 0x62E6, 0xC0B9, 0x62E7, 0xC5A1, 0x62E8, 0xB2A6, 0x62E9, 0xD4F1, 0x62EA, 0x928A, + 0x62EB, 0x928B, 0x62EC, 0xC0A8, 0x62ED, 0xCAC3, 0x62EE, 0xDED7, 0x62EF, 0xD5FC, 0x62F0, 0x928C, 0x62F1, 0xB9B0, 0x62F2, 0x928D, + 0x62F3, 0xC8AD, 0x62F4, 0xCBA9, 0x62F5, 0x928E, 0x62F6, 0xDED9, 0x62F7, 0xBFBD, 0x62F8, 0x928F, 0x62F9, 0x9290, 0x62FA, 0x9291, + 0x62FB, 0x9292, 0x62FC, 0xC6B4, 0x62FD, 0xD7A7, 0x62FE, 0xCAB0, 0x62FF, 0xC4C3, 0x6300, 0x9293, 0x6301, 0xB3D6, 0x6302, 0xB9D2, + 0x6303, 0x9294, 0x6304, 0x9295, 0x6305, 0x9296, 0x6306, 0x9297, 0x6307, 0xD6B8, 0x6308, 0xEAFC, 0x6309, 0xB0B4, 0x630A, 0x9298, + 0x630B, 0x9299, 0x630C, 0x929A, 0x630D, 0x929B, 0x630E, 0xBFE6, 0x630F, 0x929C, 0x6310, 0x929D, 0x6311, 0xCCF4, 0x6312, 0x929E, + 0x6313, 0x929F, 0x6314, 0x92A0, 0x6315, 0x92A1, 0x6316, 0xCDDA, 0x6317, 0x92A2, 0x6318, 0x92A3, 0x6319, 0x92A4, 0x631A, 0xD6BF, + 0x631B, 0xC2CE, 0x631C, 0x92A5, 0x631D, 0xCECE, 0x631E, 0xCCA2, 0x631F, 0xD0AE, 0x6320, 0xC4D3, 0x6321, 0xB5B2, 0x6322, 0xDED8, + 0x6323, 0xD5F5, 0x6324, 0xBCB7, 0x6325, 0xBBD3, 0x6326, 0x92A6, 0x6327, 0x92A7, 0x6328, 0xB0A4, 0x6329, 0x92A8, 0x632A, 0xC5B2, + 0x632B, 0xB4EC, 0x632C, 0x92A9, 0x632D, 0x92AA, 0x632E, 0x92AB, 0x632F, 0xD5F1, 0x6330, 0x92AC, 0x6331, 0x92AD, 0x6332, 0xEAFD, + 0x6333, 0x92AE, 0x6334, 0x92AF, 0x6335, 0x92B0, 0x6336, 0x92B1, 0x6337, 0x92B2, 0x6338, 0x92B3, 0x6339, 0xDEDA, 0x633A, 0xCDA6, + 0x633B, 0x92B4, 0x633C, 0x92B5, 0x633D, 0xCDEC, 0x633E, 0x92B6, 0x633F, 0x92B7, 0x6340, 0x92B8, 0x6341, 0x92B9, 0x6342, 0xCEE6, + 0x6343, 0xDEDC, 0x6344, 0x92BA, 0x6345, 0xCDB1, 0x6346, 0xC0A6, 0x6347, 0x92BB, 0x6348, 0x92BC, 0x6349, 0xD7BD, 0x634A, 0x92BD, + 0x634B, 0xDEDB, 0x634C, 0xB0C6, 0x634D, 0xBAB4, 0x634E, 0xC9D3, 0x634F, 0xC4F3, 0x6350, 0xBEE8, 0x6351, 0x92BE, 0x6352, 0x92BF, + 0x6353, 0x92C0, 0x6354, 0x92C1, 0x6355, 0xB2B6, 0x6356, 0x92C2, 0x6357, 0x92C3, 0x6358, 0x92C4, 0x6359, 0x92C5, 0x635A, 0x92C6, + 0x635B, 0x92C7, 0x635C, 0x92C8, 0x635D, 0x92C9, 0x635E, 0xC0CC, 0x635F, 0xCBF0, 0x6360, 0x92CA, 0x6361, 0xBCF1, 0x6362, 0xBBBB, + 0x6363, 0xB5B7, 0x6364, 0x92CB, 0x6365, 0x92CC, 0x6366, 0x92CD, 0x6367, 0xC5F5, 0x6368, 0x92CE, 0x6369, 0xDEE6, 0x636A, 0x92CF, + 0x636B, 0x92D0, 0x636C, 0x92D1, 0x636D, 0xDEE3, 0x636E, 0xBEDD, 0x636F, 0x92D2, 0x6370, 0x92D3, 0x6371, 0xDEDF, 0x6372, 0x92D4, + 0x6373, 0x92D5, 0x6374, 0x92D6, 0x6375, 0x92D7, 0x6376, 0xB4B7, 0x6377, 0xBDDD, 0x6378, 0x92D8, 0x6379, 0x92D9, 0x637A, 0xDEE0, + 0x637B, 0xC4ED, 0x637C, 0x92DA, 0x637D, 0x92DB, 0x637E, 0x92DC, 0x637F, 0x92DD, 0x6380, 0xCFC6, 0x6381, 0x92DE, 0x6382, 0xB5E0, + 0x6383, 0x92DF, 0x6384, 0x92E0, 0x6385, 0x92E1, 0x6386, 0x92E2, 0x6387, 0xB6DE, 0x6388, 0xCADA, 0x6389, 0xB5F4, 0x638A, 0xDEE5, + 0x638B, 0x92E3, 0x638C, 0xD5C6, 0x638D, 0x92E4, 0x638E, 0xDEE1, 0x638F, 0xCCCD, 0x6390, 0xC6FE, 0x6391, 0x92E5, 0x6392, 0xC5C5, + 0x6393, 0x92E6, 0x6394, 0x92E7, 0x6395, 0x92E8, 0x6396, 0xD2B4, 0x6397, 0x92E9, 0x6398, 0xBEF2, 0x6399, 0x92EA, 0x639A, 0x92EB, + 0x639B, 0x92EC, 0x639C, 0x92ED, 0x639D, 0x92EE, 0x639E, 0x92EF, 0x639F, 0x92F0, 0x63A0, 0xC2D3, 0x63A1, 0x92F1, 0x63A2, 0xCCBD, + 0x63A3, 0xB3B8, 0x63A4, 0x92F2, 0x63A5, 0xBDD3, 0x63A6, 0x92F3, 0x63A7, 0xBFD8, 0x63A8, 0xCDC6, 0x63A9, 0xD1DA, 0x63AA, 0xB4EB, + 0x63AB, 0x92F4, 0x63AC, 0xDEE4, 0x63AD, 0xDEDD, 0x63AE, 0xDEE7, 0x63AF, 0x92F5, 0x63B0, 0xEAFE, 0x63B1, 0x92F6, 0x63B2, 0x92F7, + 0x63B3, 0xC2B0, 0x63B4, 0xDEE2, 0x63B5, 0x92F8, 0x63B6, 0x92F9, 0x63B7, 0xD6C0, 0x63B8, 0xB5A7, 0x63B9, 0x92FA, 0x63BA, 0xB2F4, + 0x63BB, 0x92FB, 0x63BC, 0xDEE8, 0x63BD, 0x92FC, 0x63BE, 0xDEF2, 0x63BF, 0x92FD, 0x63C0, 0x92FE, 0x63C1, 0x9340, 0x63C2, 0x9341, + 0x63C3, 0x9342, 0x63C4, 0xDEED, 0x63C5, 0x9343, 0x63C6, 0xDEF1, 0x63C7, 0x9344, 0x63C8, 0x9345, 0x63C9, 0xC8E0, 0x63CA, 0x9346, + 0x63CB, 0x9347, 0x63CC, 0x9348, 0x63CD, 0xD7E1, 0x63CE, 0xDEEF, 0x63CF, 0xC3E8, 0x63D0, 0xCCE1, 0x63D1, 0x9349, 0x63D2, 0xB2E5, + 0x63D3, 0x934A, 0x63D4, 0x934B, 0x63D5, 0x934C, 0x63D6, 0xD2BE, 0x63D7, 0x934D, 0x63D8, 0x934E, 0x63D9, 0x934F, 0x63DA, 0x9350, + 0x63DB, 0x9351, 0x63DC, 0x9352, 0x63DD, 0x9353, 0x63DE, 0xDEEE, 0x63DF, 0x9354, 0x63E0, 0xDEEB, 0x63E1, 0xCED5, 0x63E2, 0x9355, + 0x63E3, 0xB4A7, 0x63E4, 0x9356, 0x63E5, 0x9357, 0x63E6, 0x9358, 0x63E7, 0x9359, 0x63E8, 0x935A, 0x63E9, 0xBFAB, 0x63EA, 0xBEBE, + 0x63EB, 0x935B, 0x63EC, 0x935C, 0x63ED, 0xBDD2, 0x63EE, 0x935D, 0x63EF, 0x935E, 0x63F0, 0x935F, 0x63F1, 0x9360, 0x63F2, 0xDEE9, + 0x63F3, 0x9361, 0x63F4, 0xD4AE, 0x63F5, 0x9362, 0x63F6, 0xDEDE, 0x63F7, 0x9363, 0x63F8, 0xDEEA, 0x63F9, 0x9364, 0x63FA, 0x9365, + 0x63FB, 0x9366, 0x63FC, 0x9367, 0x63FD, 0xC0BF, 0x63FE, 0x9368, 0x63FF, 0xDEEC, 0x6400, 0xB2F3, 0x6401, 0xB8E9, 0x6402, 0xC2A7, + 0x6403, 0x9369, 0x6404, 0x936A, 0x6405, 0xBDC1, 0x6406, 0x936B, 0x6407, 0x936C, 0x6408, 0x936D, 0x6409, 0x936E, 0x640A, 0x936F, + 0x640B, 0xDEF5, 0x640C, 0xDEF8, 0x640D, 0x9370, 0x640E, 0x9371, 0x640F, 0xB2AB, 0x6410, 0xB4A4, 0x6411, 0x9372, 0x6412, 0x9373, + 0x6413, 0xB4EA, 0x6414, 0xC9A6, 0x6415, 0x9374, 0x6416, 0x9375, 0x6417, 0x9376, 0x6418, 0x9377, 0x6419, 0x9378, 0x641A, 0x9379, + 0x641B, 0xDEF6, 0x641C, 0xCBD1, 0x641D, 0x937A, 0x641E, 0xB8E3, 0x641F, 0x937B, 0x6420, 0xDEF7, 0x6421, 0xDEFA, 0x6422, 0x937C, + 0x6423, 0x937D, 0x6424, 0x937E, 0x6425, 0x9380, 0x6426, 0xDEF9, 0x6427, 0x9381, 0x6428, 0x9382, 0x6429, 0x9383, 0x642A, 0xCCC2, + 0x642B, 0x9384, 0x642C, 0xB0E1, 0x642D, 0xB4EE, 0x642E, 0x9385, 0x642F, 0x9386, 0x6430, 0x9387, 0x6431, 0x9388, 0x6432, 0x9389, + 0x6433, 0x938A, 0x6434, 0xE5BA, 0x6435, 0x938B, 0x6436, 0x938C, 0x6437, 0x938D, 0x6438, 0x938E, 0x6439, 0x938F, 0x643A, 0xD0AF, + 0x643B, 0x9390, 0x643C, 0x9391, 0x643D, 0xB2EB, 0x643E, 0x9392, 0x643F, 0xEBA1, 0x6440, 0x9393, 0x6441, 0xDEF4, 0x6442, 0x9394, + 0x6443, 0x9395, 0x6444, 0xC9E3, 0x6445, 0xDEF3, 0x6446, 0xB0DA, 0x6447, 0xD2A1, 0x6448, 0xB1F7, 0x6449, 0x9396, 0x644A, 0xCCAF, + 0x644B, 0x9397, 0x644C, 0x9398, 0x644D, 0x9399, 0x644E, 0x939A, 0x644F, 0x939B, 0x6450, 0x939C, 0x6451, 0x939D, 0x6452, 0xDEF0, + 0x6453, 0x939E, 0x6454, 0xCBA4, 0x6455, 0x939F, 0x6456, 0x93A0, 0x6457, 0x93A1, 0x6458, 0xD5AA, 0x6459, 0x93A2, 0x645A, 0x93A3, + 0x645B, 0x93A4, 0x645C, 0x93A5, 0x645D, 0x93A6, 0x645E, 0xDEFB, 0x645F, 0x93A7, 0x6460, 0x93A8, 0x6461, 0x93A9, 0x6462, 0x93AA, + 0x6463, 0x93AB, 0x6464, 0x93AC, 0x6465, 0x93AD, 0x6466, 0x93AE, 0x6467, 0xB4DD, 0x6468, 0x93AF, 0x6469, 0xC4A6, 0x646A, 0x93B0, + 0x646B, 0x93B1, 0x646C, 0x93B2, 0x646D, 0xDEFD, 0x646E, 0x93B3, 0x646F, 0x93B4, 0x6470, 0x93B5, 0x6471, 0x93B6, 0x6472, 0x93B7, + 0x6473, 0x93B8, 0x6474, 0x93B9, 0x6475, 0x93BA, 0x6476, 0x93BB, 0x6477, 0x93BC, 0x6478, 0xC3FE, 0x6479, 0xC4A1, 0x647A, 0xDFA1, + 0x647B, 0x93BD, 0x647C, 0x93BE, 0x647D, 0x93BF, 0x647E, 0x93C0, 0x647F, 0x93C1, 0x6480, 0x93C2, 0x6481, 0x93C3, 0x6482, 0xC1CC, + 0x6483, 0x93C4, 0x6484, 0xDEFC, 0x6485, 0xBEEF, 0x6486, 0x93C5, 0x6487, 0xC6B2, 0x6488, 0x93C6, 0x6489, 0x93C7, 0x648A, 0x93C8, + 0x648B, 0x93C9, 0x648C, 0x93CA, 0x648D, 0x93CB, 0x648E, 0x93CC, 0x648F, 0x93CD, 0x6490, 0x93CE, 0x6491, 0xB3C5, 0x6492, 0xC8F6, + 0x6493, 0x93CF, 0x6494, 0x93D0, 0x6495, 0xCBBA, 0x6496, 0xDEFE, 0x6497, 0x93D1, 0x6498, 0x93D2, 0x6499, 0xDFA4, 0x649A, 0x93D3, + 0x649B, 0x93D4, 0x649C, 0x93D5, 0x649D, 0x93D6, 0x649E, 0xD7B2, 0x649F, 0x93D7, 0x64A0, 0x93D8, 0x64A1, 0x93D9, 0x64A2, 0x93DA, + 0x64A3, 0x93DB, 0x64A4, 0xB3B7, 0x64A5, 0x93DC, 0x64A6, 0x93DD, 0x64A7, 0x93DE, 0x64A8, 0x93DF, 0x64A9, 0xC1C3, 0x64AA, 0x93E0, + 0x64AB, 0x93E1, 0x64AC, 0xC7CB, 0x64AD, 0xB2A5, 0x64AE, 0xB4E9, 0x64AF, 0x93E2, 0x64B0, 0xD7AB, 0x64B1, 0x93E3, 0x64B2, 0x93E4, + 0x64B3, 0x93E5, 0x64B4, 0x93E6, 0x64B5, 0xC4EC, 0x64B6, 0x93E7, 0x64B7, 0xDFA2, 0x64B8, 0xDFA3, 0x64B9, 0x93E8, 0x64BA, 0xDFA5, + 0x64BB, 0x93E9, 0x64BC, 0xBAB3, 0x64BD, 0x93EA, 0x64BE, 0x93EB, 0x64BF, 0x93EC, 0x64C0, 0xDFA6, 0x64C1, 0x93ED, 0x64C2, 0xC0DE, + 0x64C3, 0x93EE, 0x64C4, 0x93EF, 0x64C5, 0xC9C3, 0x64C6, 0x93F0, 0x64C7, 0x93F1, 0x64C8, 0x93F2, 0x64C9, 0x93F3, 0x64CA, 0x93F4, + 0x64CB, 0x93F5, 0x64CC, 0x93F6, 0x64CD, 0xB2D9, 0x64CE, 0xC7E6, 0x64CF, 0x93F7, 0x64D0, 0xDFA7, 0x64D1, 0x93F8, 0x64D2, 0xC7DC, + 0x64D3, 0x93F9, 0x64D4, 0x93FA, 0x64D5, 0x93FB, 0x64D6, 0x93FC, 0x64D7, 0xDFA8, 0x64D8, 0xEBA2, 0x64D9, 0x93FD, 0x64DA, 0x93FE, + 0x64DB, 0x9440, 0x64DC, 0x9441, 0x64DD, 0x9442, 0x64DE, 0xCBD3, 0x64DF, 0x9443, 0x64E0, 0x9444, 0x64E1, 0x9445, 0x64E2, 0xDFAA, + 0x64E3, 0x9446, 0x64E4, 0xDFA9, 0x64E5, 0x9447, 0x64E6, 0xB2C1, 0x64E7, 0x9448, 0x64E8, 0x9449, 0x64E9, 0x944A, 0x64EA, 0x944B, + 0x64EB, 0x944C, 0x64EC, 0x944D, 0x64ED, 0x944E, 0x64EE, 0x944F, 0x64EF, 0x9450, 0x64F0, 0x9451, 0x64F1, 0x9452, 0x64F2, 0x9453, + 0x64F3, 0x9454, 0x64F4, 0x9455, 0x64F5, 0x9456, 0x64F6, 0x9457, 0x64F7, 0x9458, 0x64F8, 0x9459, 0x64F9, 0x945A, 0x64FA, 0x945B, + 0x64FB, 0x945C, 0x64FC, 0x945D, 0x64FD, 0x945E, 0x64FE, 0x945F, 0x64FF, 0x9460, 0x6500, 0xC5CA, 0x6501, 0x9461, 0x6502, 0x9462, + 0x6503, 0x9463, 0x6504, 0x9464, 0x6505, 0x9465, 0x6506, 0x9466, 0x6507, 0x9467, 0x6508, 0x9468, 0x6509, 0xDFAB, 0x650A, 0x9469, + 0x650B, 0x946A, 0x650C, 0x946B, 0x650D, 0x946C, 0x650E, 0x946D, 0x650F, 0x946E, 0x6510, 0x946F, 0x6511, 0x9470, 0x6512, 0xD4DC, + 0x6513, 0x9471, 0x6514, 0x9472, 0x6515, 0x9473, 0x6516, 0x9474, 0x6517, 0x9475, 0x6518, 0xC8C1, 0x6519, 0x9476, 0x651A, 0x9477, + 0x651B, 0x9478, 0x651C, 0x9479, 0x651D, 0x947A, 0x651E, 0x947B, 0x651F, 0x947C, 0x6520, 0x947D, 0x6521, 0x947E, 0x6522, 0x9480, + 0x6523, 0x9481, 0x6524, 0x9482, 0x6525, 0xDFAC, 0x6526, 0x9483, 0x6527, 0x9484, 0x6528, 0x9485, 0x6529, 0x9486, 0x652A, 0x9487, + 0x652B, 0xBEF0, 0x652C, 0x9488, 0x652D, 0x9489, 0x652E, 0xDFAD, 0x652F, 0xD6A7, 0x6530, 0x948A, 0x6531, 0x948B, 0x6532, 0x948C, + 0x6533, 0x948D, 0x6534, 0xEAB7, 0x6535, 0xEBB6, 0x6536, 0xCAD5, 0x6537, 0x948E, 0x6538, 0xD8FC, 0x6539, 0xB8C4, 0x653A, 0x948F, + 0x653B, 0xB9A5, 0x653C, 0x9490, 0x653D, 0x9491, 0x653E, 0xB7C5, 0x653F, 0xD5FE, 0x6540, 0x9492, 0x6541, 0x9493, 0x6542, 0x9494, + 0x6543, 0x9495, 0x6544, 0x9496, 0x6545, 0xB9CA, 0x6546, 0x9497, 0x6547, 0x9498, 0x6548, 0xD0A7, 0x6549, 0xF4CD, 0x654A, 0x9499, + 0x654B, 0x949A, 0x654C, 0xB5D0, 0x654D, 0x949B, 0x654E, 0x949C, 0x654F, 0xC3F4, 0x6550, 0x949D, 0x6551, 0xBEC8, 0x6552, 0x949E, + 0x6553, 0x949F, 0x6554, 0x94A0, 0x6555, 0xEBB7, 0x6556, 0xB0BD, 0x6557, 0x94A1, 0x6558, 0x94A2, 0x6559, 0xBDCC, 0x655A, 0x94A3, + 0x655B, 0xC1B2, 0x655C, 0x94A4, 0x655D, 0xB1D6, 0x655E, 0xB3A8, 0x655F, 0x94A5, 0x6560, 0x94A6, 0x6561, 0x94A7, 0x6562, 0xB8D2, + 0x6563, 0xC9A2, 0x6564, 0x94A8, 0x6565, 0x94A9, 0x6566, 0xB6D8, 0x6567, 0x94AA, 0x6568, 0x94AB, 0x6569, 0x94AC, 0x656A, 0x94AD, + 0x656B, 0xEBB8, 0x656C, 0xBEB4, 0x656D, 0x94AE, 0x656E, 0x94AF, 0x656F, 0x94B0, 0x6570, 0xCAFD, 0x6571, 0x94B1, 0x6572, 0xC7C3, + 0x6573, 0x94B2, 0x6574, 0xD5FB, 0x6575, 0x94B3, 0x6576, 0x94B4, 0x6577, 0xB7F3, 0x6578, 0x94B5, 0x6579, 0x94B6, 0x657A, 0x94B7, + 0x657B, 0x94B8, 0x657C, 0x94B9, 0x657D, 0x94BA, 0x657E, 0x94BB, 0x657F, 0x94BC, 0x6580, 0x94BD, 0x6581, 0x94BE, 0x6582, 0x94BF, + 0x6583, 0x94C0, 0x6584, 0x94C1, 0x6585, 0x94C2, 0x6586, 0x94C3, 0x6587, 0xCEC4, 0x6588, 0x94C4, 0x6589, 0x94C5, 0x658A, 0x94C6, + 0x658B, 0xD5AB, 0x658C, 0xB1F3, 0x658D, 0x94C7, 0x658E, 0x94C8, 0x658F, 0x94C9, 0x6590, 0xECB3, 0x6591, 0xB0DF, 0x6592, 0x94CA, + 0x6593, 0xECB5, 0x6594, 0x94CB, 0x6595, 0x94CC, 0x6596, 0x94CD, 0x6597, 0xB6B7, 0x6598, 0x94CE, 0x6599, 0xC1CF, 0x659A, 0x94CF, + 0x659B, 0xF5FA, 0x659C, 0xD0B1, 0x659D, 0x94D0, 0x659E, 0x94D1, 0x659F, 0xD5E5, 0x65A0, 0x94D2, 0x65A1, 0xCED3, 0x65A2, 0x94D3, + 0x65A3, 0x94D4, 0x65A4, 0xBDEF, 0x65A5, 0xB3E2, 0x65A6, 0x94D5, 0x65A7, 0xB8AB, 0x65A8, 0x94D6, 0x65A9, 0xD5B6, 0x65AA, 0x94D7, + 0x65AB, 0xEDBD, 0x65AC, 0x94D8, 0x65AD, 0xB6CF, 0x65AE, 0x94D9, 0x65AF, 0xCBB9, 0x65B0, 0xD0C2, 0x65B1, 0x94DA, 0x65B2, 0x94DB, + 0x65B3, 0x94DC, 0x65B4, 0x94DD, 0x65B5, 0x94DE, 0x65B6, 0x94DF, 0x65B7, 0x94E0, 0x65B8, 0x94E1, 0x65B9, 0xB7BD, 0x65BA, 0x94E2, + 0x65BB, 0x94E3, 0x65BC, 0xECB6, 0x65BD, 0xCAA9, 0x65BE, 0x94E4, 0x65BF, 0x94E5, 0x65C0, 0x94E6, 0x65C1, 0xC5D4, 0x65C2, 0x94E7, + 0x65C3, 0xECB9, 0x65C4, 0xECB8, 0x65C5, 0xC2C3, 0x65C6, 0xECB7, 0x65C7, 0x94E8, 0x65C8, 0x94E9, 0x65C9, 0x94EA, 0x65CA, 0x94EB, + 0x65CB, 0xD0FD, 0x65CC, 0xECBA, 0x65CD, 0x94EC, 0x65CE, 0xECBB, 0x65CF, 0xD7E5, 0x65D0, 0x94ED, 0x65D1, 0x94EE, 0x65D2, 0xECBC, + 0x65D3, 0x94EF, 0x65D4, 0x94F0, 0x65D5, 0x94F1, 0x65D6, 0xECBD, 0x65D7, 0xC6EC, 0x65D8, 0x94F2, 0x65D9, 0x94F3, 0x65DA, 0x94F4, + 0x65DB, 0x94F5, 0x65DC, 0x94F6, 0x65DD, 0x94F7, 0x65DE, 0x94F8, 0x65DF, 0x94F9, 0x65E0, 0xCEDE, 0x65E1, 0x94FA, 0x65E2, 0xBCC8, + 0x65E3, 0x94FB, 0x65E4, 0x94FC, 0x65E5, 0xC8D5, 0x65E6, 0xB5A9, 0x65E7, 0xBEC9, 0x65E8, 0xD6BC, 0x65E9, 0xD4E7, 0x65EA, 0x94FD, + 0x65EB, 0x94FE, 0x65EC, 0xD1AE, 0x65ED, 0xD0F1, 0x65EE, 0xEAB8, 0x65EF, 0xEAB9, 0x65F0, 0xEABA, 0x65F1, 0xBAB5, 0x65F2, 0x9540, + 0x65F3, 0x9541, 0x65F4, 0x9542, 0x65F5, 0x9543, 0x65F6, 0xCAB1, 0x65F7, 0xBFF5, 0x65F8, 0x9544, 0x65F9, 0x9545, 0x65FA, 0xCDFA, + 0x65FB, 0x9546, 0x65FC, 0x9547, 0x65FD, 0x9548, 0x65FE, 0x9549, 0x65FF, 0x954A, 0x6600, 0xEAC0, 0x6601, 0x954B, 0x6602, 0xB0BA, + 0x6603, 0xEABE, 0x6604, 0x954C, 0x6605, 0x954D, 0x6606, 0xC0A5, 0x6607, 0x954E, 0x6608, 0x954F, 0x6609, 0x9550, 0x660A, 0xEABB, + 0x660B, 0x9551, 0x660C, 0xB2FD, 0x660D, 0x9552, 0x660E, 0xC3F7, 0x660F, 0xBBE8, 0x6610, 0x9553, 0x6611, 0x9554, 0x6612, 0x9555, + 0x6613, 0xD2D7, 0x6614, 0xCEF4, 0x6615, 0xEABF, 0x6616, 0x9556, 0x6617, 0x9557, 0x6618, 0x9558, 0x6619, 0xEABC, 0x661A, 0x9559, + 0x661B, 0x955A, 0x661C, 0x955B, 0x661D, 0xEAC3, 0x661E, 0x955C, 0x661F, 0xD0C7, 0x6620, 0xD3B3, 0x6621, 0x955D, 0x6622, 0x955E, + 0x6623, 0x955F, 0x6624, 0x9560, 0x6625, 0xB4BA, 0x6626, 0x9561, 0x6627, 0xC3C1, 0x6628, 0xD7F2, 0x6629, 0x9562, 0x662A, 0x9563, + 0x662B, 0x9564, 0x662C, 0x9565, 0x662D, 0xD5D1, 0x662E, 0x9566, 0x662F, 0xCAC7, 0x6630, 0x9567, 0x6631, 0xEAC5, 0x6632, 0x9568, + 0x6633, 0x9569, 0x6634, 0xEAC4, 0x6635, 0xEAC7, 0x6636, 0xEAC6, 0x6637, 0x956A, 0x6638, 0x956B, 0x6639, 0x956C, 0x663A, 0x956D, + 0x663B, 0x956E, 0x663C, 0xD6E7, 0x663D, 0x956F, 0x663E, 0xCFD4, 0x663F, 0x9570, 0x6640, 0x9571, 0x6641, 0xEACB, 0x6642, 0x9572, + 0x6643, 0xBBCE, 0x6644, 0x9573, 0x6645, 0x9574, 0x6646, 0x9575, 0x6647, 0x9576, 0x6648, 0x9577, 0x6649, 0x9578, 0x664A, 0x9579, + 0x664B, 0xBDFA, 0x664C, 0xC9CE, 0x664D, 0x957A, 0x664E, 0x957B, 0x664F, 0xEACC, 0x6650, 0x957C, 0x6651, 0x957D, 0x6652, 0xC9B9, + 0x6653, 0xCFFE, 0x6654, 0xEACA, 0x6655, 0xD4CE, 0x6656, 0xEACD, 0x6657, 0xEACF, 0x6658, 0x957E, 0x6659, 0x9580, 0x665A, 0xCDED, + 0x665B, 0x9581, 0x665C, 0x9582, 0x665D, 0x9583, 0x665E, 0x9584, 0x665F, 0xEAC9, 0x6660, 0x9585, 0x6661, 0xEACE, 0x6662, 0x9586, + 0x6663, 0x9587, 0x6664, 0xCEEE, 0x6665, 0x9588, 0x6666, 0xBBDE, 0x6667, 0x9589, 0x6668, 0xB3BF, 0x6669, 0x958A, 0x666A, 0x958B, + 0x666B, 0x958C, 0x666C, 0x958D, 0x666D, 0x958E, 0x666E, 0xC6D5, 0x666F, 0xBEB0, 0x6670, 0xCEFA, 0x6671, 0x958F, 0x6672, 0x9590, + 0x6673, 0x9591, 0x6674, 0xC7E7, 0x6675, 0x9592, 0x6676, 0xBEA7, 0x6677, 0xEAD0, 0x6678, 0x9593, 0x6679, 0x9594, 0x667A, 0xD6C7, + 0x667B, 0x9595, 0x667C, 0x9596, 0x667D, 0x9597, 0x667E, 0xC1C0, 0x667F, 0x9598, 0x6680, 0x9599, 0x6681, 0x959A, 0x6682, 0xD4DD, + 0x6683, 0x959B, 0x6684, 0xEAD1, 0x6685, 0x959C, 0x6686, 0x959D, 0x6687, 0xCFBE, 0x6688, 0x959E, 0x6689, 0x959F, 0x668A, 0x95A0, + 0x668B, 0x95A1, 0x668C, 0xEAD2, 0x668D, 0x95A2, 0x668E, 0x95A3, 0x668F, 0x95A4, 0x6690, 0x95A5, 0x6691, 0xCAEE, 0x6692, 0x95A6, + 0x6693, 0x95A7, 0x6694, 0x95A8, 0x6695, 0x95A9, 0x6696, 0xC5AF, 0x6697, 0xB0B5, 0x6698, 0x95AA, 0x6699, 0x95AB, 0x669A, 0x95AC, + 0x669B, 0x95AD, 0x669C, 0x95AE, 0x669D, 0xEAD4, 0x669E, 0x95AF, 0x669F, 0x95B0, 0x66A0, 0x95B1, 0x66A1, 0x95B2, 0x66A2, 0x95B3, + 0x66A3, 0x95B4, 0x66A4, 0x95B5, 0x66A5, 0x95B6, 0x66A6, 0x95B7, 0x66A7, 0xEAD3, 0x66A8, 0xF4DF, 0x66A9, 0x95B8, 0x66AA, 0x95B9, + 0x66AB, 0x95BA, 0x66AC, 0x95BB, 0x66AD, 0x95BC, 0x66AE, 0xC4BA, 0x66AF, 0x95BD, 0x66B0, 0x95BE, 0x66B1, 0x95BF, 0x66B2, 0x95C0, + 0x66B3, 0x95C1, 0x66B4, 0xB1A9, 0x66B5, 0x95C2, 0x66B6, 0x95C3, 0x66B7, 0x95C4, 0x66B8, 0x95C5, 0x66B9, 0xE5DF, 0x66BA, 0x95C6, + 0x66BB, 0x95C7, 0x66BC, 0x95C8, 0x66BD, 0x95C9, 0x66BE, 0xEAD5, 0x66BF, 0x95CA, 0x66C0, 0x95CB, 0x66C1, 0x95CC, 0x66C2, 0x95CD, + 0x66C3, 0x95CE, 0x66C4, 0x95CF, 0x66C5, 0x95D0, 0x66C6, 0x95D1, 0x66C7, 0x95D2, 0x66C8, 0x95D3, 0x66C9, 0x95D4, 0x66CA, 0x95D5, + 0x66CB, 0x95D6, 0x66CC, 0x95D7, 0x66CD, 0x95D8, 0x66CE, 0x95D9, 0x66CF, 0x95DA, 0x66D0, 0x95DB, 0x66D1, 0x95DC, 0x66D2, 0x95DD, + 0x66D3, 0x95DE, 0x66D4, 0x95DF, 0x66D5, 0x95E0, 0x66D6, 0x95E1, 0x66D7, 0x95E2, 0x66D8, 0x95E3, 0x66D9, 0xCAEF, 0x66DA, 0x95E4, + 0x66DB, 0xEAD6, 0x66DC, 0xEAD7, 0x66DD, 0xC6D8, 0x66DE, 0x95E5, 0x66DF, 0x95E6, 0x66E0, 0x95E7, 0x66E1, 0x95E8, 0x66E2, 0x95E9, + 0x66E3, 0x95EA, 0x66E4, 0x95EB, 0x66E5, 0x95EC, 0x66E6, 0xEAD8, 0x66E7, 0x95ED, 0x66E8, 0x95EE, 0x66E9, 0xEAD9, 0x66EA, 0x95EF, + 0x66EB, 0x95F0, 0x66EC, 0x95F1, 0x66ED, 0x95F2, 0x66EE, 0x95F3, 0x66EF, 0x95F4, 0x66F0, 0xD4BB, 0x66F1, 0x95F5, 0x66F2, 0xC7FA, + 0x66F3, 0xD2B7, 0x66F4, 0xB8FC, 0x66F5, 0x95F6, 0x66F6, 0x95F7, 0x66F7, 0xEAC2, 0x66F8, 0x95F8, 0x66F9, 0xB2DC, 0x66FA, 0x95F9, + 0x66FB, 0x95FA, 0x66FC, 0xC2FC, 0x66FD, 0x95FB, 0x66FE, 0xD4F8, 0x66FF, 0xCCE6, 0x6700, 0xD7EE, 0x6701, 0x95FC, 0x6702, 0x95FD, + 0x6703, 0x95FE, 0x6704, 0x9640, 0x6705, 0x9641, 0x6706, 0x9642, 0x6707, 0x9643, 0x6708, 0xD4C2, 0x6709, 0xD3D0, 0x670A, 0xEBC3, + 0x670B, 0xC5F3, 0x670C, 0x9644, 0x670D, 0xB7FE, 0x670E, 0x9645, 0x670F, 0x9646, 0x6710, 0xEBD4, 0x6711, 0x9647, 0x6712, 0x9648, + 0x6713, 0x9649, 0x6714, 0xCBB7, 0x6715, 0xEBDE, 0x6716, 0x964A, 0x6717, 0xC0CA, 0x6718, 0x964B, 0x6719, 0x964C, 0x671A, 0x964D, + 0x671B, 0xCDFB, 0x671C, 0x964E, 0x671D, 0xB3AF, 0x671E, 0x964F, 0x671F, 0xC6DA, 0x6720, 0x9650, 0x6721, 0x9651, 0x6722, 0x9652, + 0x6723, 0x9653, 0x6724, 0x9654, 0x6725, 0x9655, 0x6726, 0xEBFC, 0x6727, 0x9656, 0x6728, 0xC4BE, 0x6729, 0x9657, 0x672A, 0xCEB4, + 0x672B, 0xC4A9, 0x672C, 0xB1BE, 0x672D, 0xD4FD, 0x672E, 0x9658, 0x672F, 0xCAF5, 0x6730, 0x9659, 0x6731, 0xD6EC, 0x6732, 0x965A, + 0x6733, 0x965B, 0x6734, 0xC6D3, 0x6735, 0xB6E4, 0x6736, 0x965C, 0x6737, 0x965D, 0x6738, 0x965E, 0x6739, 0x965F, 0x673A, 0xBBFA, + 0x673B, 0x9660, 0x673C, 0x9661, 0x673D, 0xD0E0, 0x673E, 0x9662, 0x673F, 0x9663, 0x6740, 0xC9B1, 0x6741, 0x9664, 0x6742, 0xD4D3, + 0x6743, 0xC8A8, 0x6744, 0x9665, 0x6745, 0x9666, 0x6746, 0xB8CB, 0x6747, 0x9667, 0x6748, 0xE8BE, 0x6749, 0xC9BC, 0x674A, 0x9668, + 0x674B, 0x9669, 0x674C, 0xE8BB, 0x674D, 0x966A, 0x674E, 0xC0EE, 0x674F, 0xD0D3, 0x6750, 0xB2C4, 0x6751, 0xB4E5, 0x6752, 0x966B, + 0x6753, 0xE8BC, 0x6754, 0x966C, 0x6755, 0x966D, 0x6756, 0xD5C8, 0x6757, 0x966E, 0x6758, 0x966F, 0x6759, 0x9670, 0x675A, 0x9671, + 0x675B, 0x9672, 0x675C, 0xB6C5, 0x675D, 0x9673, 0x675E, 0xE8BD, 0x675F, 0xCAF8, 0x6760, 0xB8DC, 0x6761, 0xCCF5, 0x6762, 0x9674, + 0x6763, 0x9675, 0x6764, 0x9676, 0x6765, 0xC0B4, 0x6766, 0x9677, 0x6767, 0x9678, 0x6768, 0xD1EE, 0x6769, 0xE8BF, 0x676A, 0xE8C2, + 0x676B, 0x9679, 0x676C, 0x967A, 0x676D, 0xBABC, 0x676E, 0x967B, 0x676F, 0xB1AD, 0x6770, 0xBDDC, 0x6771, 0x967C, 0x6772, 0xEABD, + 0x6773, 0xE8C3, 0x6774, 0x967D, 0x6775, 0xE8C6, 0x6776, 0x967E, 0x6777, 0xE8CB, 0x6778, 0x9680, 0x6779, 0x9681, 0x677A, 0x9682, + 0x677B, 0x9683, 0x677C, 0xE8CC, 0x677D, 0x9684, 0x677E, 0xCBC9, 0x677F, 0xB0E5, 0x6780, 0x9685, 0x6781, 0xBCAB, 0x6782, 0x9686, + 0x6783, 0x9687, 0x6784, 0xB9B9, 0x6785, 0x9688, 0x6786, 0x9689, 0x6787, 0xE8C1, 0x6788, 0x968A, 0x6789, 0xCDF7, 0x678A, 0x968B, + 0x678B, 0xE8CA, 0x678C, 0x968C, 0x678D, 0x968D, 0x678E, 0x968E, 0x678F, 0x968F, 0x6790, 0xCEF6, 0x6791, 0x9690, 0x6792, 0x9691, + 0x6793, 0x9692, 0x6794, 0x9693, 0x6795, 0xD5ED, 0x6796, 0x9694, 0x6797, 0xC1D6, 0x6798, 0xE8C4, 0x6799, 0x9695, 0x679A, 0xC3B6, + 0x679B, 0x9696, 0x679C, 0xB9FB, 0x679D, 0xD6A6, 0x679E, 0xE8C8, 0x679F, 0x9697, 0x67A0, 0x9698, 0x67A1, 0x9699, 0x67A2, 0xCAE0, + 0x67A3, 0xD4E6, 0x67A4, 0x969A, 0x67A5, 0xE8C0, 0x67A6, 0x969B, 0x67A7, 0xE8C5, 0x67A8, 0xE8C7, 0x67A9, 0x969C, 0x67AA, 0xC7B9, + 0x67AB, 0xB7E3, 0x67AC, 0x969D, 0x67AD, 0xE8C9, 0x67AE, 0x969E, 0x67AF, 0xBFDD, 0x67B0, 0xE8D2, 0x67B1, 0x969F, 0x67B2, 0x96A0, + 0x67B3, 0xE8D7, 0x67B4, 0x96A1, 0x67B5, 0xE8D5, 0x67B6, 0xBCDC, 0x67B7, 0xBCCF, 0x67B8, 0xE8DB, 0x67B9, 0x96A2, 0x67BA, 0x96A3, + 0x67BB, 0x96A4, 0x67BC, 0x96A5, 0x67BD, 0x96A6, 0x67BE, 0x96A7, 0x67BF, 0x96A8, 0x67C0, 0x96A9, 0x67C1, 0xE8DE, 0x67C2, 0x96AA, + 0x67C3, 0xE8DA, 0x67C4, 0xB1FA, 0x67C5, 0x96AB, 0x67C6, 0x96AC, 0x67C7, 0x96AD, 0x67C8, 0x96AE, 0x67C9, 0x96AF, 0x67CA, 0x96B0, + 0x67CB, 0x96B1, 0x67CC, 0x96B2, 0x67CD, 0x96B3, 0x67CE, 0x96B4, 0x67CF, 0xB0D8, 0x67D0, 0xC4B3, 0x67D1, 0xB8CC, 0x67D2, 0xC6E2, + 0x67D3, 0xC8BE, 0x67D4, 0xC8E1, 0x67D5, 0x96B5, 0x67D6, 0x96B6, 0x67D7, 0x96B7, 0x67D8, 0xE8CF, 0x67D9, 0xE8D4, 0x67DA, 0xE8D6, + 0x67DB, 0x96B8, 0x67DC, 0xB9F1, 0x67DD, 0xE8D8, 0x67DE, 0xD7F5, 0x67DF, 0x96B9, 0x67E0, 0xC4FB, 0x67E1, 0x96BA, 0x67E2, 0xE8DC, + 0x67E3, 0x96BB, 0x67E4, 0x96BC, 0x67E5, 0xB2E9, 0x67E6, 0x96BD, 0x67E7, 0x96BE, 0x67E8, 0x96BF, 0x67E9, 0xE8D1, 0x67EA, 0x96C0, + 0x67EB, 0x96C1, 0x67EC, 0xBCED, 0x67ED, 0x96C2, 0x67EE, 0x96C3, 0x67EF, 0xBFC2, 0x67F0, 0xE8CD, 0x67F1, 0xD6F9, 0x67F2, 0x96C4, + 0x67F3, 0xC1F8, 0x67F4, 0xB2F1, 0x67F5, 0x96C5, 0x67F6, 0x96C6, 0x67F7, 0x96C7, 0x67F8, 0x96C8, 0x67F9, 0x96C9, 0x67FA, 0x96CA, + 0x67FB, 0x96CB, 0x67FC, 0x96CC, 0x67FD, 0xE8DF, 0x67FE, 0x96CD, 0x67FF, 0xCAC1, 0x6800, 0xE8D9, 0x6801, 0x96CE, 0x6802, 0x96CF, + 0x6803, 0x96D0, 0x6804, 0x96D1, 0x6805, 0xD5A4, 0x6806, 0x96D2, 0x6807, 0xB1EA, 0x6808, 0xD5BB, 0x6809, 0xE8CE, 0x680A, 0xE8D0, + 0x680B, 0xB6B0, 0x680C, 0xE8D3, 0x680D, 0x96D3, 0x680E, 0xE8DD, 0x680F, 0xC0B8, 0x6810, 0x96D4, 0x6811, 0xCAF7, 0x6812, 0x96D5, + 0x6813, 0xCBA8, 0x6814, 0x96D6, 0x6815, 0x96D7, 0x6816, 0xC6DC, 0x6817, 0xC0F5, 0x6818, 0x96D8, 0x6819, 0x96D9, 0x681A, 0x96DA, + 0x681B, 0x96DB, 0x681C, 0x96DC, 0x681D, 0xE8E9, 0x681E, 0x96DD, 0x681F, 0x96DE, 0x6820, 0x96DF, 0x6821, 0xD0A3, 0x6822, 0x96E0, + 0x6823, 0x96E1, 0x6824, 0x96E2, 0x6825, 0x96E3, 0x6826, 0x96E4, 0x6827, 0x96E5, 0x6828, 0x96E6, 0x6829, 0xE8F2, 0x682A, 0xD6EA, + 0x682B, 0x96E7, 0x682C, 0x96E8, 0x682D, 0x96E9, 0x682E, 0x96EA, 0x682F, 0x96EB, 0x6830, 0x96EC, 0x6831, 0x96ED, 0x6832, 0xE8E0, + 0x6833, 0xE8E1, 0x6834, 0x96EE, 0x6835, 0x96EF, 0x6836, 0x96F0, 0x6837, 0xD1F9, 0x6838, 0xBACB, 0x6839, 0xB8F9, 0x683A, 0x96F1, + 0x683B, 0x96F2, 0x683C, 0xB8F1, 0x683D, 0xD4D4, 0x683E, 0xE8EF, 0x683F, 0x96F3, 0x6840, 0xE8EE, 0x6841, 0xE8EC, 0x6842, 0xB9F0, + 0x6843, 0xCCD2, 0x6844, 0xE8E6, 0x6845, 0xCEA6, 0x6846, 0xBFF2, 0x6847, 0x96F4, 0x6848, 0xB0B8, 0x6849, 0xE8F1, 0x684A, 0xE8F0, + 0x684B, 0x96F5, 0x684C, 0xD7C0, 0x684D, 0x96F6, 0x684E, 0xE8E4, 0x684F, 0x96F7, 0x6850, 0xCDA9, 0x6851, 0xC9A3, 0x6852, 0x96F8, + 0x6853, 0xBBB8, 0x6854, 0xBDDB, 0x6855, 0xE8EA, 0x6856, 0x96F9, 0x6857, 0x96FA, 0x6858, 0x96FB, 0x6859, 0x96FC, 0x685A, 0x96FD, + 0x685B, 0x96FE, 0x685C, 0x9740, 0x685D, 0x9741, 0x685E, 0x9742, 0x685F, 0x9743, 0x6860, 0xE8E2, 0x6861, 0xE8E3, 0x6862, 0xE8E5, + 0x6863, 0xB5B5, 0x6864, 0xE8E7, 0x6865, 0xC7C5, 0x6866, 0xE8EB, 0x6867, 0xE8ED, 0x6868, 0xBDB0, 0x6869, 0xD7AE, 0x686A, 0x9744, + 0x686B, 0xE8F8, 0x686C, 0x9745, 0x686D, 0x9746, 0x686E, 0x9747, 0x686F, 0x9748, 0x6870, 0x9749, 0x6871, 0x974A, 0x6872, 0x974B, + 0x6873, 0x974C, 0x6874, 0xE8F5, 0x6875, 0x974D, 0x6876, 0xCDB0, 0x6877, 0xE8F6, 0x6878, 0x974E, 0x6879, 0x974F, 0x687A, 0x9750, + 0x687B, 0x9751, 0x687C, 0x9752, 0x687D, 0x9753, 0x687E, 0x9754, 0x687F, 0x9755, 0x6880, 0x9756, 0x6881, 0xC1BA, 0x6882, 0x9757, + 0x6883, 0xE8E8, 0x6884, 0x9758, 0x6885, 0xC3B7, 0x6886, 0xB0F0, 0x6887, 0x9759, 0x6888, 0x975A, 0x6889, 0x975B, 0x688A, 0x975C, + 0x688B, 0x975D, 0x688C, 0x975E, 0x688D, 0x975F, 0x688E, 0x9760, 0x688F, 0xE8F4, 0x6890, 0x9761, 0x6891, 0x9762, 0x6892, 0x9763, + 0x6893, 0xE8F7, 0x6894, 0x9764, 0x6895, 0x9765, 0x6896, 0x9766, 0x6897, 0xB9A3, 0x6898, 0x9767, 0x6899, 0x9768, 0x689A, 0x9769, + 0x689B, 0x976A, 0x689C, 0x976B, 0x689D, 0x976C, 0x689E, 0x976D, 0x689F, 0x976E, 0x68A0, 0x976F, 0x68A1, 0x9770, 0x68A2, 0xC9D2, + 0x68A3, 0x9771, 0x68A4, 0x9772, 0x68A5, 0x9773, 0x68A6, 0xC3CE, 0x68A7, 0xCEE0, 0x68A8, 0xC0E6, 0x68A9, 0x9774, 0x68AA, 0x9775, + 0x68AB, 0x9776, 0x68AC, 0x9777, 0x68AD, 0xCBF3, 0x68AE, 0x9778, 0x68AF, 0xCCDD, 0x68B0, 0xD0B5, 0x68B1, 0x9779, 0x68B2, 0x977A, + 0x68B3, 0xCAE1, 0x68B4, 0x977B, 0x68B5, 0xE8F3, 0x68B6, 0x977C, 0x68B7, 0x977D, 0x68B8, 0x977E, 0x68B9, 0x9780, 0x68BA, 0x9781, + 0x68BB, 0x9782, 0x68BC, 0x9783, 0x68BD, 0x9784, 0x68BE, 0x9785, 0x68BF, 0x9786, 0x68C0, 0xBCEC, 0x68C1, 0x9787, 0x68C2, 0xE8F9, + 0x68C3, 0x9788, 0x68C4, 0x9789, 0x68C5, 0x978A, 0x68C6, 0x978B, 0x68C7, 0x978C, 0x68C8, 0x978D, 0x68C9, 0xC3DE, 0x68CA, 0x978E, + 0x68CB, 0xC6E5, 0x68CC, 0x978F, 0x68CD, 0xB9F7, 0x68CE, 0x9790, 0x68CF, 0x9791, 0x68D0, 0x9792, 0x68D1, 0x9793, 0x68D2, 0xB0F4, + 0x68D3, 0x9794, 0x68D4, 0x9795, 0x68D5, 0xD7D8, 0x68D6, 0x9796, 0x68D7, 0x9797, 0x68D8, 0xBCAC, 0x68D9, 0x9798, 0x68DA, 0xC5EF, + 0x68DB, 0x9799, 0x68DC, 0x979A, 0x68DD, 0x979B, 0x68DE, 0x979C, 0x68DF, 0x979D, 0x68E0, 0xCCC4, 0x68E1, 0x979E, 0x68E2, 0x979F, + 0x68E3, 0xE9A6, 0x68E4, 0x97A0, 0x68E5, 0x97A1, 0x68E6, 0x97A2, 0x68E7, 0x97A3, 0x68E8, 0x97A4, 0x68E9, 0x97A5, 0x68EA, 0x97A6, + 0x68EB, 0x97A7, 0x68EC, 0x97A8, 0x68ED, 0x97A9, 0x68EE, 0xC9AD, 0x68EF, 0x97AA, 0x68F0, 0xE9A2, 0x68F1, 0xC0E2, 0x68F2, 0x97AB, + 0x68F3, 0x97AC, 0x68F4, 0x97AD, 0x68F5, 0xBFC3, 0x68F6, 0x97AE, 0x68F7, 0x97AF, 0x68F8, 0x97B0, 0x68F9, 0xE8FE, 0x68FA, 0xB9D7, + 0x68FB, 0x97B1, 0x68FC, 0xE8FB, 0x68FD, 0x97B2, 0x68FE, 0x97B3, 0x68FF, 0x97B4, 0x6900, 0x97B5, 0x6901, 0xE9A4, 0x6902, 0x97B6, + 0x6903, 0x97B7, 0x6904, 0x97B8, 0x6905, 0xD2CE, 0x6906, 0x97B9, 0x6907, 0x97BA, 0x6908, 0x97BB, 0x6909, 0x97BC, 0x690A, 0x97BD, + 0x690B, 0xE9A3, 0x690C, 0x97BE, 0x690D, 0xD6B2, 0x690E, 0xD7B5, 0x690F, 0x97BF, 0x6910, 0xE9A7, 0x6911, 0x97C0, 0x6912, 0xBDB7, + 0x6913, 0x97C1, 0x6914, 0x97C2, 0x6915, 0x97C3, 0x6916, 0x97C4, 0x6917, 0x97C5, 0x6918, 0x97C6, 0x6919, 0x97C7, 0x691A, 0x97C8, + 0x691B, 0x97C9, 0x691C, 0x97CA, 0x691D, 0x97CB, 0x691E, 0x97CC, 0x691F, 0xE8FC, 0x6920, 0xE8FD, 0x6921, 0x97CD, 0x6922, 0x97CE, + 0x6923, 0x97CF, 0x6924, 0xE9A1, 0x6925, 0x97D0, 0x6926, 0x97D1, 0x6927, 0x97D2, 0x6928, 0x97D3, 0x6929, 0x97D4, 0x692A, 0x97D5, + 0x692B, 0x97D6, 0x692C, 0x97D7, 0x692D, 0xCDD6, 0x692E, 0x97D8, 0x692F, 0x97D9, 0x6930, 0xD2AC, 0x6931, 0x97DA, 0x6932, 0x97DB, + 0x6933, 0x97DC, 0x6934, 0xE9B2, 0x6935, 0x97DD, 0x6936, 0x97DE, 0x6937, 0x97DF, 0x6938, 0x97E0, 0x6939, 0xE9A9, 0x693A, 0x97E1, + 0x693B, 0x97E2, 0x693C, 0x97E3, 0x693D, 0xB4AA, 0x693E, 0x97E4, 0x693F, 0xB4BB, 0x6940, 0x97E5, 0x6941, 0x97E6, 0x6942, 0xE9AB, + 0x6943, 0x97E7, 0x6944, 0x97E8, 0x6945, 0x97E9, 0x6946, 0x97EA, 0x6947, 0x97EB, 0x6948, 0x97EC, 0x6949, 0x97ED, 0x694A, 0x97EE, + 0x694B, 0x97EF, 0x694C, 0x97F0, 0x694D, 0x97F1, 0x694E, 0x97F2, 0x694F, 0x97F3, 0x6950, 0x97F4, 0x6951, 0x97F5, 0x6952, 0x97F6, + 0x6953, 0x97F7, 0x6954, 0xD0A8, 0x6955, 0x97F8, 0x6956, 0x97F9, 0x6957, 0xE9A5, 0x6958, 0x97FA, 0x6959, 0x97FB, 0x695A, 0xB3FE, + 0x695B, 0x97FC, 0x695C, 0x97FD, 0x695D, 0xE9AC, 0x695E, 0xC0E3, 0x695F, 0x97FE, 0x6960, 0xE9AA, 0x6961, 0x9840, 0x6962, 0x9841, + 0x6963, 0xE9B9, 0x6964, 0x9842, 0x6965, 0x9843, 0x6966, 0xE9B8, 0x6967, 0x9844, 0x6968, 0x9845, 0x6969, 0x9846, 0x696A, 0x9847, + 0x696B, 0xE9AE, 0x696C, 0x9848, 0x696D, 0x9849, 0x696E, 0xE8FA, 0x696F, 0x984A, 0x6970, 0x984B, 0x6971, 0xE9A8, 0x6972, 0x984C, + 0x6973, 0x984D, 0x6974, 0x984E, 0x6975, 0x984F, 0x6976, 0x9850, 0x6977, 0xBFAC, 0x6978, 0xE9B1, 0x6979, 0xE9BA, 0x697A, 0x9851, + 0x697B, 0x9852, 0x697C, 0xC2A5, 0x697D, 0x9853, 0x697E, 0x9854, 0x697F, 0x9855, 0x6980, 0xE9AF, 0x6981, 0x9856, 0x6982, 0xB8C5, + 0x6983, 0x9857, 0x6984, 0xE9AD, 0x6985, 0x9858, 0x6986, 0xD3DC, 0x6987, 0xE9B4, 0x6988, 0xE9B5, 0x6989, 0xE9B7, 0x698A, 0x9859, + 0x698B, 0x985A, 0x698C, 0x985B, 0x698D, 0xE9C7, 0x698E, 0x985C, 0x698F, 0x985D, 0x6990, 0x985E, 0x6991, 0x985F, 0x6992, 0x9860, + 0x6993, 0x9861, 0x6994, 0xC0C6, 0x6995, 0xE9C5, 0x6996, 0x9862, 0x6997, 0x9863, 0x6998, 0xE9B0, 0x6999, 0x9864, 0x699A, 0x9865, + 0x699B, 0xE9BB, 0x699C, 0xB0F1, 0x699D, 0x9866, 0x699E, 0x9867, 0x699F, 0x9868, 0x69A0, 0x9869, 0x69A1, 0x986A, 0x69A2, 0x986B, + 0x69A3, 0x986C, 0x69A4, 0x986D, 0x69A5, 0x986E, 0x69A6, 0x986F, 0x69A7, 0xE9BC, 0x69A8, 0xD5A5, 0x69A9, 0x9870, 0x69AA, 0x9871, + 0x69AB, 0xE9BE, 0x69AC, 0x9872, 0x69AD, 0xE9BF, 0x69AE, 0x9873, 0x69AF, 0x9874, 0x69B0, 0x9875, 0x69B1, 0xE9C1, 0x69B2, 0x9876, + 0x69B3, 0x9877, 0x69B4, 0xC1F1, 0x69B5, 0x9878, 0x69B6, 0x9879, 0x69B7, 0xC8B6, 0x69B8, 0x987A, 0x69B9, 0x987B, 0x69BA, 0x987C, + 0x69BB, 0xE9BD, 0x69BC, 0x987D, 0x69BD, 0x987E, 0x69BE, 0x9880, 0x69BF, 0x9881, 0x69C0, 0x9882, 0x69C1, 0xE9C2, 0x69C2, 0x9883, + 0x69C3, 0x9884, 0x69C4, 0x9885, 0x69C5, 0x9886, 0x69C6, 0x9887, 0x69C7, 0x9888, 0x69C8, 0x9889, 0x69C9, 0x988A, 0x69CA, 0xE9C3, + 0x69CB, 0x988B, 0x69CC, 0xE9B3, 0x69CD, 0x988C, 0x69CE, 0xE9B6, 0x69CF, 0x988D, 0x69D0, 0xBBB1, 0x69D1, 0x988E, 0x69D2, 0x988F, + 0x69D3, 0x9890, 0x69D4, 0xE9C0, 0x69D5, 0x9891, 0x69D6, 0x9892, 0x69D7, 0x9893, 0x69D8, 0x9894, 0x69D9, 0x9895, 0x69DA, 0x9896, + 0x69DB, 0xBCF7, 0x69DC, 0x9897, 0x69DD, 0x9898, 0x69DE, 0x9899, 0x69DF, 0xE9C4, 0x69E0, 0xE9C6, 0x69E1, 0x989A, 0x69E2, 0x989B, + 0x69E3, 0x989C, 0x69E4, 0x989D, 0x69E5, 0x989E, 0x69E6, 0x989F, 0x69E7, 0x98A0, 0x69E8, 0x98A1, 0x69E9, 0x98A2, 0x69EA, 0x98A3, + 0x69EB, 0x98A4, 0x69EC, 0x98A5, 0x69ED, 0xE9CA, 0x69EE, 0x98A6, 0x69EF, 0x98A7, 0x69F0, 0x98A8, 0x69F1, 0x98A9, 0x69F2, 0xE9CE, + 0x69F3, 0x98AA, 0x69F4, 0x98AB, 0x69F5, 0x98AC, 0x69F6, 0x98AD, 0x69F7, 0x98AE, 0x69F8, 0x98AF, 0x69F9, 0x98B0, 0x69FA, 0x98B1, + 0x69FB, 0x98B2, 0x69FC, 0x98B3, 0x69FD, 0xB2DB, 0x69FE, 0x98B4, 0x69FF, 0xE9C8, 0x6A00, 0x98B5, 0x6A01, 0x98B6, 0x6A02, 0x98B7, + 0x6A03, 0x98B8, 0x6A04, 0x98B9, 0x6A05, 0x98BA, 0x6A06, 0x98BB, 0x6A07, 0x98BC, 0x6A08, 0x98BD, 0x6A09, 0x98BE, 0x6A0A, 0xB7AE, + 0x6A0B, 0x98BF, 0x6A0C, 0x98C0, 0x6A0D, 0x98C1, 0x6A0E, 0x98C2, 0x6A0F, 0x98C3, 0x6A10, 0x98C4, 0x6A11, 0x98C5, 0x6A12, 0x98C6, + 0x6A13, 0x98C7, 0x6A14, 0x98C8, 0x6A15, 0x98C9, 0x6A16, 0x98CA, 0x6A17, 0xE9CB, 0x6A18, 0xE9CC, 0x6A19, 0x98CB, 0x6A1A, 0x98CC, + 0x6A1B, 0x98CD, 0x6A1C, 0x98CE, 0x6A1D, 0x98CF, 0x6A1E, 0x98D0, 0x6A1F, 0xD5C1, 0x6A20, 0x98D1, 0x6A21, 0xC4A3, 0x6A22, 0x98D2, + 0x6A23, 0x98D3, 0x6A24, 0x98D4, 0x6A25, 0x98D5, 0x6A26, 0x98D6, 0x6A27, 0x98D7, 0x6A28, 0xE9D8, 0x6A29, 0x98D8, 0x6A2A, 0xBAE1, + 0x6A2B, 0x98D9, 0x6A2C, 0x98DA, 0x6A2D, 0x98DB, 0x6A2E, 0x98DC, 0x6A2F, 0xE9C9, 0x6A30, 0x98DD, 0x6A31, 0xD3A3, 0x6A32, 0x98DE, + 0x6A33, 0x98DF, 0x6A34, 0x98E0, 0x6A35, 0xE9D4, 0x6A36, 0x98E1, 0x6A37, 0x98E2, 0x6A38, 0x98E3, 0x6A39, 0x98E4, 0x6A3A, 0x98E5, + 0x6A3B, 0x98E6, 0x6A3C, 0x98E7, 0x6A3D, 0xE9D7, 0x6A3E, 0xE9D0, 0x6A3F, 0x98E8, 0x6A40, 0x98E9, 0x6A41, 0x98EA, 0x6A42, 0x98EB, + 0x6A43, 0x98EC, 0x6A44, 0xE9CF, 0x6A45, 0x98ED, 0x6A46, 0x98EE, 0x6A47, 0xC7C1, 0x6A48, 0x98EF, 0x6A49, 0x98F0, 0x6A4A, 0x98F1, + 0x6A4B, 0x98F2, 0x6A4C, 0x98F3, 0x6A4D, 0x98F4, 0x6A4E, 0x98F5, 0x6A4F, 0x98F6, 0x6A50, 0xE9D2, 0x6A51, 0x98F7, 0x6A52, 0x98F8, + 0x6A53, 0x98F9, 0x6A54, 0x98FA, 0x6A55, 0x98FB, 0x6A56, 0x98FC, 0x6A57, 0x98FD, 0x6A58, 0xE9D9, 0x6A59, 0xB3C8, 0x6A5A, 0x98FE, + 0x6A5B, 0xE9D3, 0x6A5C, 0x9940, 0x6A5D, 0x9941, 0x6A5E, 0x9942, 0x6A5F, 0x9943, 0x6A60, 0x9944, 0x6A61, 0xCFF0, 0x6A62, 0x9945, + 0x6A63, 0x9946, 0x6A64, 0x9947, 0x6A65, 0xE9CD, 0x6A66, 0x9948, 0x6A67, 0x9949, 0x6A68, 0x994A, 0x6A69, 0x994B, 0x6A6A, 0x994C, + 0x6A6B, 0x994D, 0x6A6C, 0x994E, 0x6A6D, 0x994F, 0x6A6E, 0x9950, 0x6A6F, 0x9951, 0x6A70, 0x9952, 0x6A71, 0xB3F7, 0x6A72, 0x9953, + 0x6A73, 0x9954, 0x6A74, 0x9955, 0x6A75, 0x9956, 0x6A76, 0x9957, 0x6A77, 0x9958, 0x6A78, 0x9959, 0x6A79, 0xE9D6, 0x6A7A, 0x995A, + 0x6A7B, 0x995B, 0x6A7C, 0xE9DA, 0x6A7D, 0x995C, 0x6A7E, 0x995D, 0x6A7F, 0x995E, 0x6A80, 0xCCB4, 0x6A81, 0x995F, 0x6A82, 0x9960, + 0x6A83, 0x9961, 0x6A84, 0xCFAD, 0x6A85, 0x9962, 0x6A86, 0x9963, 0x6A87, 0x9964, 0x6A88, 0x9965, 0x6A89, 0x9966, 0x6A8A, 0x9967, + 0x6A8B, 0x9968, 0x6A8C, 0x9969, 0x6A8D, 0x996A, 0x6A8E, 0xE9D5, 0x6A8F, 0x996B, 0x6A90, 0xE9DC, 0x6A91, 0xE9DB, 0x6A92, 0x996C, + 0x6A93, 0x996D, 0x6A94, 0x996E, 0x6A95, 0x996F, 0x6A96, 0x9970, 0x6A97, 0xE9DE, 0x6A98, 0x9971, 0x6A99, 0x9972, 0x6A9A, 0x9973, + 0x6A9B, 0x9974, 0x6A9C, 0x9975, 0x6A9D, 0x9976, 0x6A9E, 0x9977, 0x6A9F, 0x9978, 0x6AA0, 0xE9D1, 0x6AA1, 0x9979, 0x6AA2, 0x997A, + 0x6AA3, 0x997B, 0x6AA4, 0x997C, 0x6AA5, 0x997D, 0x6AA6, 0x997E, 0x6AA7, 0x9980, 0x6AA8, 0x9981, 0x6AA9, 0xE9DD, 0x6AAA, 0x9982, + 0x6AAB, 0xE9DF, 0x6AAC, 0xC3CA, 0x6AAD, 0x9983, 0x6AAE, 0x9984, 0x6AAF, 0x9985, 0x6AB0, 0x9986, 0x6AB1, 0x9987, 0x6AB2, 0x9988, + 0x6AB3, 0x9989, 0x6AB4, 0x998A, 0x6AB5, 0x998B, 0x6AB6, 0x998C, 0x6AB7, 0x998D, 0x6AB8, 0x998E, 0x6AB9, 0x998F, 0x6ABA, 0x9990, + 0x6ABB, 0x9991, 0x6ABC, 0x9992, 0x6ABD, 0x9993, 0x6ABE, 0x9994, 0x6ABF, 0x9995, 0x6AC0, 0x9996, 0x6AC1, 0x9997, 0x6AC2, 0x9998, + 0x6AC3, 0x9999, 0x6AC4, 0x999A, 0x6AC5, 0x999B, 0x6AC6, 0x999C, 0x6AC7, 0x999D, 0x6AC8, 0x999E, 0x6AC9, 0x999F, 0x6ACA, 0x99A0, + 0x6ACB, 0x99A1, 0x6ACC, 0x99A2, 0x6ACD, 0x99A3, 0x6ACE, 0x99A4, 0x6ACF, 0x99A5, 0x6AD0, 0x99A6, 0x6AD1, 0x99A7, 0x6AD2, 0x99A8, + 0x6AD3, 0x99A9, 0x6AD4, 0x99AA, 0x6AD5, 0x99AB, 0x6AD6, 0x99AC, 0x6AD7, 0x99AD, 0x6AD8, 0x99AE, 0x6AD9, 0x99AF, 0x6ADA, 0x99B0, + 0x6ADB, 0x99B1, 0x6ADC, 0x99B2, 0x6ADD, 0x99B3, 0x6ADE, 0x99B4, 0x6ADF, 0x99B5, 0x6AE0, 0x99B6, 0x6AE1, 0x99B7, 0x6AE2, 0x99B8, + 0x6AE3, 0x99B9, 0x6AE4, 0x99BA, 0x6AE5, 0x99BB, 0x6AE6, 0x99BC, 0x6AE7, 0x99BD, 0x6AE8, 0x99BE, 0x6AE9, 0x99BF, 0x6AEA, 0x99C0, + 0x6AEB, 0x99C1, 0x6AEC, 0x99C2, 0x6AED, 0x99C3, 0x6AEE, 0x99C4, 0x6AEF, 0x99C5, 0x6AF0, 0x99C6, 0x6AF1, 0x99C7, 0x6AF2, 0x99C8, + 0x6AF3, 0x99C9, 0x6AF4, 0x99CA, 0x6AF5, 0x99CB, 0x6AF6, 0x99CC, 0x6AF7, 0x99CD, 0x6AF8, 0x99CE, 0x6AF9, 0x99CF, 0x6AFA, 0x99D0, + 0x6AFB, 0x99D1, 0x6AFC, 0x99D2, 0x6AFD, 0x99D3, 0x6AFE, 0x99D4, 0x6AFF, 0x99D5, 0x6B00, 0x99D6, 0x6B01, 0x99D7, 0x6B02, 0x99D8, + 0x6B03, 0x99D9, 0x6B04, 0x99DA, 0x6B05, 0x99DB, 0x6B06, 0x99DC, 0x6B07, 0x99DD, 0x6B08, 0x99DE, 0x6B09, 0x99DF, 0x6B0A, 0x99E0, + 0x6B0B, 0x99E1, 0x6B0C, 0x99E2, 0x6B0D, 0x99E3, 0x6B0E, 0x99E4, 0x6B0F, 0x99E5, 0x6B10, 0x99E6, 0x6B11, 0x99E7, 0x6B12, 0x99E8, + 0x6B13, 0x99E9, 0x6B14, 0x99EA, 0x6B15, 0x99EB, 0x6B16, 0x99EC, 0x6B17, 0x99ED, 0x6B18, 0x99EE, 0x6B19, 0x99EF, 0x6B1A, 0x99F0, + 0x6B1B, 0x99F1, 0x6B1C, 0x99F2, 0x6B1D, 0x99F3, 0x6B1E, 0x99F4, 0x6B1F, 0x99F5, 0x6B20, 0xC7B7, 0x6B21, 0xB4CE, 0x6B22, 0xBBB6, + 0x6B23, 0xD0C0, 0x6B24, 0xECA3, 0x6B25, 0x99F6, 0x6B26, 0x99F7, 0x6B27, 0xC5B7, 0x6B28, 0x99F8, 0x6B29, 0x99F9, 0x6B2A, 0x99FA, + 0x6B2B, 0x99FB, 0x6B2C, 0x99FC, 0x6B2D, 0x99FD, 0x6B2E, 0x99FE, 0x6B2F, 0x9A40, 0x6B30, 0x9A41, 0x6B31, 0x9A42, 0x6B32, 0xD3FB, + 0x6B33, 0x9A43, 0x6B34, 0x9A44, 0x6B35, 0x9A45, 0x6B36, 0x9A46, 0x6B37, 0xECA4, 0x6B38, 0x9A47, 0x6B39, 0xECA5, 0x6B3A, 0xC6DB, + 0x6B3B, 0x9A48, 0x6B3C, 0x9A49, 0x6B3D, 0x9A4A, 0x6B3E, 0xBFEE, 0x6B3F, 0x9A4B, 0x6B40, 0x9A4C, 0x6B41, 0x9A4D, 0x6B42, 0x9A4E, + 0x6B43, 0xECA6, 0x6B44, 0x9A4F, 0x6B45, 0x9A50, 0x6B46, 0xECA7, 0x6B47, 0xD0AA, 0x6B48, 0x9A51, 0x6B49, 0xC7B8, 0x6B4A, 0x9A52, + 0x6B4B, 0x9A53, 0x6B4C, 0xB8E8, 0x6B4D, 0x9A54, 0x6B4E, 0x9A55, 0x6B4F, 0x9A56, 0x6B50, 0x9A57, 0x6B51, 0x9A58, 0x6B52, 0x9A59, + 0x6B53, 0x9A5A, 0x6B54, 0x9A5B, 0x6B55, 0x9A5C, 0x6B56, 0x9A5D, 0x6B57, 0x9A5E, 0x6B58, 0x9A5F, 0x6B59, 0xECA8, 0x6B5A, 0x9A60, + 0x6B5B, 0x9A61, 0x6B5C, 0x9A62, 0x6B5D, 0x9A63, 0x6B5E, 0x9A64, 0x6B5F, 0x9A65, 0x6B60, 0x9A66, 0x6B61, 0x9A67, 0x6B62, 0xD6B9, + 0x6B63, 0xD5FD, 0x6B64, 0xB4CB, 0x6B65, 0xB2BD, 0x6B66, 0xCEE4, 0x6B67, 0xC6E7, 0x6B68, 0x9A68, 0x6B69, 0x9A69, 0x6B6A, 0xCDE1, + 0x6B6B, 0x9A6A, 0x6B6C, 0x9A6B, 0x6B6D, 0x9A6C, 0x6B6E, 0x9A6D, 0x6B6F, 0x9A6E, 0x6B70, 0x9A6F, 0x6B71, 0x9A70, 0x6B72, 0x9A71, + 0x6B73, 0x9A72, 0x6B74, 0x9A73, 0x6B75, 0x9A74, 0x6B76, 0x9A75, 0x6B77, 0x9A76, 0x6B78, 0x9A77, 0x6B79, 0xB4F5, 0x6B7A, 0x9A78, + 0x6B7B, 0xCBC0, 0x6B7C, 0xBCDF, 0x6B7D, 0x9A79, 0x6B7E, 0x9A7A, 0x6B7F, 0x9A7B, 0x6B80, 0x9A7C, 0x6B81, 0xE9E2, 0x6B82, 0xE9E3, + 0x6B83, 0xD1EA, 0x6B84, 0xE9E5, 0x6B85, 0x9A7D, 0x6B86, 0xB4F9, 0x6B87, 0xE9E4, 0x6B88, 0x9A7E, 0x6B89, 0xD1B3, 0x6B8A, 0xCAE2, + 0x6B8B, 0xB2D0, 0x6B8C, 0x9A80, 0x6B8D, 0xE9E8, 0x6B8E, 0x9A81, 0x6B8F, 0x9A82, 0x6B90, 0x9A83, 0x6B91, 0x9A84, 0x6B92, 0xE9E6, + 0x6B93, 0xE9E7, 0x6B94, 0x9A85, 0x6B95, 0x9A86, 0x6B96, 0xD6B3, 0x6B97, 0x9A87, 0x6B98, 0x9A88, 0x6B99, 0x9A89, 0x6B9A, 0xE9E9, + 0x6B9B, 0xE9EA, 0x6B9C, 0x9A8A, 0x6B9D, 0x9A8B, 0x6B9E, 0x9A8C, 0x6B9F, 0x9A8D, 0x6BA0, 0x9A8E, 0x6BA1, 0xE9EB, 0x6BA2, 0x9A8F, + 0x6BA3, 0x9A90, 0x6BA4, 0x9A91, 0x6BA5, 0x9A92, 0x6BA6, 0x9A93, 0x6BA7, 0x9A94, 0x6BA8, 0x9A95, 0x6BA9, 0x9A96, 0x6BAA, 0xE9EC, + 0x6BAB, 0x9A97, 0x6BAC, 0x9A98, 0x6BAD, 0x9A99, 0x6BAE, 0x9A9A, 0x6BAF, 0x9A9B, 0x6BB0, 0x9A9C, 0x6BB1, 0x9A9D, 0x6BB2, 0x9A9E, + 0x6BB3, 0xECAF, 0x6BB4, 0xC5B9, 0x6BB5, 0xB6CE, 0x6BB6, 0x9A9F, 0x6BB7, 0xD2F3, 0x6BB8, 0x9AA0, 0x6BB9, 0x9AA1, 0x6BBA, 0x9AA2, + 0x6BBB, 0x9AA3, 0x6BBC, 0x9AA4, 0x6BBD, 0x9AA5, 0x6BBE, 0x9AA6, 0x6BBF, 0xB5EE, 0x6BC0, 0x9AA7, 0x6BC1, 0xBBD9, 0x6BC2, 0xECB1, + 0x6BC3, 0x9AA8, 0x6BC4, 0x9AA9, 0x6BC5, 0xD2E3, 0x6BC6, 0x9AAA, 0x6BC7, 0x9AAB, 0x6BC8, 0x9AAC, 0x6BC9, 0x9AAD, 0x6BCA, 0x9AAE, + 0x6BCB, 0xCEE3, 0x6BCC, 0x9AAF, 0x6BCD, 0xC4B8, 0x6BCE, 0x9AB0, 0x6BCF, 0xC3BF, 0x6BD0, 0x9AB1, 0x6BD1, 0x9AB2, 0x6BD2, 0xB6BE, + 0x6BD3, 0xD8B9, 0x6BD4, 0xB1C8, 0x6BD5, 0xB1CF, 0x6BD6, 0xB1D1, 0x6BD7, 0xC5FE, 0x6BD8, 0x9AB3, 0x6BD9, 0xB1D0, 0x6BDA, 0x9AB4, + 0x6BDB, 0xC3AB, 0x6BDC, 0x9AB5, 0x6BDD, 0x9AB6, 0x6BDE, 0x9AB7, 0x6BDF, 0x9AB8, 0x6BE0, 0x9AB9, 0x6BE1, 0xD5B1, 0x6BE2, 0x9ABA, + 0x6BE3, 0x9ABB, 0x6BE4, 0x9ABC, 0x6BE5, 0x9ABD, 0x6BE6, 0x9ABE, 0x6BE7, 0x9ABF, 0x6BE8, 0x9AC0, 0x6BE9, 0x9AC1, 0x6BEA, 0xEBA4, + 0x6BEB, 0xBAC1, 0x6BEC, 0x9AC2, 0x6BED, 0x9AC3, 0x6BEE, 0x9AC4, 0x6BEF, 0xCCBA, 0x6BF0, 0x9AC5, 0x6BF1, 0x9AC6, 0x6BF2, 0x9AC7, + 0x6BF3, 0xEBA5, 0x6BF4, 0x9AC8, 0x6BF5, 0xEBA7, 0x6BF6, 0x9AC9, 0x6BF7, 0x9ACA, 0x6BF8, 0x9ACB, 0x6BF9, 0xEBA8, 0x6BFA, 0x9ACC, + 0x6BFB, 0x9ACD, 0x6BFC, 0x9ACE, 0x6BFD, 0xEBA6, 0x6BFE, 0x9ACF, 0x6BFF, 0x9AD0, 0x6C00, 0x9AD1, 0x6C01, 0x9AD2, 0x6C02, 0x9AD3, + 0x6C03, 0x9AD4, 0x6C04, 0x9AD5, 0x6C05, 0xEBA9, 0x6C06, 0xEBAB, 0x6C07, 0xEBAA, 0x6C08, 0x9AD6, 0x6C09, 0x9AD7, 0x6C0A, 0x9AD8, + 0x6C0B, 0x9AD9, 0x6C0C, 0x9ADA, 0x6C0D, 0xEBAC, 0x6C0E, 0x9ADB, 0x6C0F, 0xCACF, 0x6C10, 0xD8B5, 0x6C11, 0xC3F1, 0x6C12, 0x9ADC, + 0x6C13, 0xC3A5, 0x6C14, 0xC6F8, 0x6C15, 0xEBAD, 0x6C16, 0xC4CA, 0x6C17, 0x9ADD, 0x6C18, 0xEBAE, 0x6C19, 0xEBAF, 0x6C1A, 0xEBB0, + 0x6C1B, 0xB7D5, 0x6C1C, 0x9ADE, 0x6C1D, 0x9ADF, 0x6C1E, 0x9AE0, 0x6C1F, 0xB7FA, 0x6C20, 0x9AE1, 0x6C21, 0xEBB1, 0x6C22, 0xC7E2, + 0x6C23, 0x9AE2, 0x6C24, 0xEBB3, 0x6C25, 0x9AE3, 0x6C26, 0xBAA4, 0x6C27, 0xD1F5, 0x6C28, 0xB0B1, 0x6C29, 0xEBB2, 0x6C2A, 0xEBB4, + 0x6C2B, 0x9AE4, 0x6C2C, 0x9AE5, 0x6C2D, 0x9AE6, 0x6C2E, 0xB5AA, 0x6C2F, 0xC2C8, 0x6C30, 0xC7E8, 0x6C31, 0x9AE7, 0x6C32, 0xEBB5, + 0x6C33, 0x9AE8, 0x6C34, 0xCBAE, 0x6C35, 0xE3DF, 0x6C36, 0x9AE9, 0x6C37, 0x9AEA, 0x6C38, 0xD3C0, 0x6C39, 0x9AEB, 0x6C3A, 0x9AEC, + 0x6C3B, 0x9AED, 0x6C3C, 0x9AEE, 0x6C3D, 0xD9DB, 0x6C3E, 0x9AEF, 0x6C3F, 0x9AF0, 0x6C40, 0xCDA1, 0x6C41, 0xD6AD, 0x6C42, 0xC7F3, + 0x6C43, 0x9AF1, 0x6C44, 0x9AF2, 0x6C45, 0x9AF3, 0x6C46, 0xD9E0, 0x6C47, 0xBBE3, 0x6C48, 0x9AF4, 0x6C49, 0xBABA, 0x6C4A, 0xE3E2, + 0x6C4B, 0x9AF5, 0x6C4C, 0x9AF6, 0x6C4D, 0x9AF7, 0x6C4E, 0x9AF8, 0x6C4F, 0x9AF9, 0x6C50, 0xCFAB, 0x6C51, 0x9AFA, 0x6C52, 0x9AFB, + 0x6C53, 0x9AFC, 0x6C54, 0xE3E0, 0x6C55, 0xC9C7, 0x6C56, 0x9AFD, 0x6C57, 0xBAB9, 0x6C58, 0x9AFE, 0x6C59, 0x9B40, 0x6C5A, 0x9B41, + 0x6C5B, 0xD1B4, 0x6C5C, 0xE3E1, 0x6C5D, 0xC8EA, 0x6C5E, 0xB9AF, 0x6C5F, 0xBDAD, 0x6C60, 0xB3D8, 0x6C61, 0xCEDB, 0x6C62, 0x9B42, + 0x6C63, 0x9B43, 0x6C64, 0xCCC0, 0x6C65, 0x9B44, 0x6C66, 0x9B45, 0x6C67, 0x9B46, 0x6C68, 0xE3E8, 0x6C69, 0xE3E9, 0x6C6A, 0xCDF4, + 0x6C6B, 0x9B47, 0x6C6C, 0x9B48, 0x6C6D, 0x9B49, 0x6C6E, 0x9B4A, 0x6C6F, 0x9B4B, 0x6C70, 0xCCAD, 0x6C71, 0x9B4C, 0x6C72, 0xBCB3, + 0x6C73, 0x9B4D, 0x6C74, 0xE3EA, 0x6C75, 0x9B4E, 0x6C76, 0xE3EB, 0x6C77, 0x9B4F, 0x6C78, 0x9B50, 0x6C79, 0xD0DA, 0x6C7A, 0x9B51, + 0x6C7B, 0x9B52, 0x6C7C, 0x9B53, 0x6C7D, 0xC6FB, 0x6C7E, 0xB7DA, 0x6C7F, 0x9B54, 0x6C80, 0x9B55, 0x6C81, 0xC7DF, 0x6C82, 0xD2CA, + 0x6C83, 0xCED6, 0x6C84, 0x9B56, 0x6C85, 0xE3E4, 0x6C86, 0xE3EC, 0x6C87, 0x9B57, 0x6C88, 0xC9F2, 0x6C89, 0xB3C1, 0x6C8A, 0x9B58, + 0x6C8B, 0x9B59, 0x6C8C, 0xE3E7, 0x6C8D, 0x9B5A, 0x6C8E, 0x9B5B, 0x6C8F, 0xC6E3, 0x6C90, 0xE3E5, 0x6C91, 0x9B5C, 0x6C92, 0x9B5D, + 0x6C93, 0xEDB3, 0x6C94, 0xE3E6, 0x6C95, 0x9B5E, 0x6C96, 0x9B5F, 0x6C97, 0x9B60, 0x6C98, 0x9B61, 0x6C99, 0xC9B3, 0x6C9A, 0x9B62, + 0x6C9B, 0xC5E6, 0x6C9C, 0x9B63, 0x6C9D, 0x9B64, 0x6C9E, 0x9B65, 0x6C9F, 0xB9B5, 0x6CA0, 0x9B66, 0x6CA1, 0xC3BB, 0x6CA2, 0x9B67, + 0x6CA3, 0xE3E3, 0x6CA4, 0xC5BD, 0x6CA5, 0xC1A4, 0x6CA6, 0xC2D9, 0x6CA7, 0xB2D7, 0x6CA8, 0x9B68, 0x6CA9, 0xE3ED, 0x6CAA, 0xBBA6, + 0x6CAB, 0xC4AD, 0x6CAC, 0x9B69, 0x6CAD, 0xE3F0, 0x6CAE, 0xBEDA, 0x6CAF, 0x9B6A, 0x6CB0, 0x9B6B, 0x6CB1, 0xE3FB, 0x6CB2, 0xE3F5, + 0x6CB3, 0xBAD3, 0x6CB4, 0x9B6C, 0x6CB5, 0x9B6D, 0x6CB6, 0x9B6E, 0x6CB7, 0x9B6F, 0x6CB8, 0xB7D0, 0x6CB9, 0xD3CD, 0x6CBA, 0x9B70, + 0x6CBB, 0xD6CE, 0x6CBC, 0xD5D3, 0x6CBD, 0xB9C1, 0x6CBE, 0xD5B4, 0x6CBF, 0xD1D8, 0x6CC0, 0x9B71, 0x6CC1, 0x9B72, 0x6CC2, 0x9B73, + 0x6CC3, 0x9B74, 0x6CC4, 0xD0B9, 0x6CC5, 0xC7F6, 0x6CC6, 0x9B75, 0x6CC7, 0x9B76, 0x6CC8, 0x9B77, 0x6CC9, 0xC8AA, 0x6CCA, 0xB2B4, + 0x6CCB, 0x9B78, 0x6CCC, 0xC3DA, 0x6CCD, 0x9B79, 0x6CCE, 0x9B7A, 0x6CCF, 0x9B7B, 0x6CD0, 0xE3EE, 0x6CD1, 0x9B7C, 0x6CD2, 0x9B7D, + 0x6CD3, 0xE3FC, 0x6CD4, 0xE3EF, 0x6CD5, 0xB7A8, 0x6CD6, 0xE3F7, 0x6CD7, 0xE3F4, 0x6CD8, 0x9B7E, 0x6CD9, 0x9B80, 0x6CDA, 0x9B81, + 0x6CDB, 0xB7BA, 0x6CDC, 0x9B82, 0x6CDD, 0x9B83, 0x6CDE, 0xC5A2, 0x6CDF, 0x9B84, 0x6CE0, 0xE3F6, 0x6CE1, 0xC5DD, 0x6CE2, 0xB2A8, + 0x6CE3, 0xC6FC, 0x6CE4, 0x9B85, 0x6CE5, 0xC4E0, 0x6CE6, 0x9B86, 0x6CE7, 0x9B87, 0x6CE8, 0xD7A2, 0x6CE9, 0x9B88, 0x6CEA, 0xC0E1, + 0x6CEB, 0xE3F9, 0x6CEC, 0x9B89, 0x6CED, 0x9B8A, 0x6CEE, 0xE3FA, 0x6CEF, 0xE3FD, 0x6CF0, 0xCCA9, 0x6CF1, 0xE3F3, 0x6CF2, 0x9B8B, + 0x6CF3, 0xD3BE, 0x6CF4, 0x9B8C, 0x6CF5, 0xB1C3, 0x6CF6, 0xEDB4, 0x6CF7, 0xE3F1, 0x6CF8, 0xE3F2, 0x6CF9, 0x9B8D, 0x6CFA, 0xE3F8, + 0x6CFB, 0xD0BA, 0x6CFC, 0xC6C3, 0x6CFD, 0xD4F3, 0x6CFE, 0xE3FE, 0x6CFF, 0x9B8E, 0x6D00, 0x9B8F, 0x6D01, 0xBDE0, 0x6D02, 0x9B90, + 0x6D03, 0x9B91, 0x6D04, 0xE4A7, 0x6D05, 0x9B92, 0x6D06, 0x9B93, 0x6D07, 0xE4A6, 0x6D08, 0x9B94, 0x6D09, 0x9B95, 0x6D0A, 0x9B96, + 0x6D0B, 0xD1F3, 0x6D0C, 0xE4A3, 0x6D0D, 0x9B97, 0x6D0E, 0xE4A9, 0x6D0F, 0x9B98, 0x6D10, 0x9B99, 0x6D11, 0x9B9A, 0x6D12, 0xC8F7, + 0x6D13, 0x9B9B, 0x6D14, 0x9B9C, 0x6D15, 0x9B9D, 0x6D16, 0x9B9E, 0x6D17, 0xCFB4, 0x6D18, 0x9B9F, 0x6D19, 0xE4A8, 0x6D1A, 0xE4AE, + 0x6D1B, 0xC2E5, 0x6D1C, 0x9BA0, 0x6D1D, 0x9BA1, 0x6D1E, 0xB6B4, 0x6D1F, 0x9BA2, 0x6D20, 0x9BA3, 0x6D21, 0x9BA4, 0x6D22, 0x9BA5, + 0x6D23, 0x9BA6, 0x6D24, 0x9BA7, 0x6D25, 0xBDF2, 0x6D26, 0x9BA8, 0x6D27, 0xE4A2, 0x6D28, 0x9BA9, 0x6D29, 0x9BAA, 0x6D2A, 0xBAE9, + 0x6D2B, 0xE4AA, 0x6D2C, 0x9BAB, 0x6D2D, 0x9BAC, 0x6D2E, 0xE4AC, 0x6D2F, 0x9BAD, 0x6D30, 0x9BAE, 0x6D31, 0xB6FD, 0x6D32, 0xD6DE, + 0x6D33, 0xE4B2, 0x6D34, 0x9BAF, 0x6D35, 0xE4AD, 0x6D36, 0x9BB0, 0x6D37, 0x9BB1, 0x6D38, 0x9BB2, 0x6D39, 0xE4A1, 0x6D3A, 0x9BB3, + 0x6D3B, 0xBBEE, 0x6D3C, 0xCDDD, 0x6D3D, 0xC7A2, 0x6D3E, 0xC5C9, 0x6D3F, 0x9BB4, 0x6D40, 0x9BB5, 0x6D41, 0xC1F7, 0x6D42, 0x9BB6, + 0x6D43, 0xE4A4, 0x6D44, 0x9BB7, 0x6D45, 0xC7B3, 0x6D46, 0xBDAC, 0x6D47, 0xBDBD, 0x6D48, 0xE4A5, 0x6D49, 0x9BB8, 0x6D4A, 0xD7C7, + 0x6D4B, 0xB2E2, 0x6D4C, 0x9BB9, 0x6D4D, 0xE4AB, 0x6D4E, 0xBCC3, 0x6D4F, 0xE4AF, 0x6D50, 0x9BBA, 0x6D51, 0xBBEB, 0x6D52, 0xE4B0, + 0x6D53, 0xC5A8, 0x6D54, 0xE4B1, 0x6D55, 0x9BBB, 0x6D56, 0x9BBC, 0x6D57, 0x9BBD, 0x6D58, 0x9BBE, 0x6D59, 0xD5E3, 0x6D5A, 0xBFA3, + 0x6D5B, 0x9BBF, 0x6D5C, 0xE4BA, 0x6D5D, 0x9BC0, 0x6D5E, 0xE4B7, 0x6D5F, 0x9BC1, 0x6D60, 0xE4BB, 0x6D61, 0x9BC2, 0x6D62, 0x9BC3, + 0x6D63, 0xE4BD, 0x6D64, 0x9BC4, 0x6D65, 0x9BC5, 0x6D66, 0xC6D6, 0x6D67, 0x9BC6, 0x6D68, 0x9BC7, 0x6D69, 0xBAC6, 0x6D6A, 0xC0CB, + 0x6D6B, 0x9BC8, 0x6D6C, 0x9BC9, 0x6D6D, 0x9BCA, 0x6D6E, 0xB8A1, 0x6D6F, 0xE4B4, 0x6D70, 0x9BCB, 0x6D71, 0x9BCC, 0x6D72, 0x9BCD, + 0x6D73, 0x9BCE, 0x6D74, 0xD4A1, 0x6D75, 0x9BCF, 0x6D76, 0x9BD0, 0x6D77, 0xBAA3, 0x6D78, 0xBDFE, 0x6D79, 0x9BD1, 0x6D7A, 0x9BD2, + 0x6D7B, 0x9BD3, 0x6D7C, 0xE4BC, 0x6D7D, 0x9BD4, 0x6D7E, 0x9BD5, 0x6D7F, 0x9BD6, 0x6D80, 0x9BD7, 0x6D81, 0x9BD8, 0x6D82, 0xCDBF, + 0x6D83, 0x9BD9, 0x6D84, 0x9BDA, 0x6D85, 0xC4F9, 0x6D86, 0x9BDB, 0x6D87, 0x9BDC, 0x6D88, 0xCFFB, 0x6D89, 0xC9E6, 0x6D8A, 0x9BDD, + 0x6D8B, 0x9BDE, 0x6D8C, 0xD3BF, 0x6D8D, 0x9BDF, 0x6D8E, 0xCFD1, 0x6D8F, 0x9BE0, 0x6D90, 0x9BE1, 0x6D91, 0xE4B3, 0x6D92, 0x9BE2, + 0x6D93, 0xE4B8, 0x6D94, 0xE4B9, 0x6D95, 0xCCE9, 0x6D96, 0x9BE3, 0x6D97, 0x9BE4, 0x6D98, 0x9BE5, 0x6D99, 0x9BE6, 0x6D9A, 0x9BE7, + 0x6D9B, 0xCCCE, 0x6D9C, 0x9BE8, 0x6D9D, 0xC0D4, 0x6D9E, 0xE4B5, 0x6D9F, 0xC1B0, 0x6DA0, 0xE4B6, 0x6DA1, 0xCED0, 0x6DA2, 0x9BE9, + 0x6DA3, 0xBBC1, 0x6DA4, 0xB5D3, 0x6DA5, 0x9BEA, 0x6DA6, 0xC8F3, 0x6DA7, 0xBDA7, 0x6DA8, 0xD5C7, 0x6DA9, 0xC9AC, 0x6DAA, 0xB8A2, + 0x6DAB, 0xE4CA, 0x6DAC, 0x9BEB, 0x6DAD, 0x9BEC, 0x6DAE, 0xE4CC, 0x6DAF, 0xD1C4, 0x6DB0, 0x9BED, 0x6DB1, 0x9BEE, 0x6DB2, 0xD2BA, + 0x6DB3, 0x9BEF, 0x6DB4, 0x9BF0, 0x6DB5, 0xBAAD, 0x6DB6, 0x9BF1, 0x6DB7, 0x9BF2, 0x6DB8, 0xBAD4, 0x6DB9, 0x9BF3, 0x6DBA, 0x9BF4, + 0x6DBB, 0x9BF5, 0x6DBC, 0x9BF6, 0x6DBD, 0x9BF7, 0x6DBE, 0x9BF8, 0x6DBF, 0xE4C3, 0x6DC0, 0xB5ED, 0x6DC1, 0x9BF9, 0x6DC2, 0x9BFA, + 0x6DC3, 0x9BFB, 0x6DC4, 0xD7CD, 0x6DC5, 0xE4C0, 0x6DC6, 0xCFFD, 0x6DC7, 0xE4BF, 0x6DC8, 0x9BFC, 0x6DC9, 0x9BFD, 0x6DCA, 0x9BFE, + 0x6DCB, 0xC1DC, 0x6DCC, 0xCCCA, 0x6DCD, 0x9C40, 0x6DCE, 0x9C41, 0x6DCF, 0x9C42, 0x6DD0, 0x9C43, 0x6DD1, 0xCAE7, 0x6DD2, 0x9C44, + 0x6DD3, 0x9C45, 0x6DD4, 0x9C46, 0x6DD5, 0x9C47, 0x6DD6, 0xC4D7, 0x6DD7, 0x9C48, 0x6DD8, 0xCCD4, 0x6DD9, 0xE4C8, 0x6DDA, 0x9C49, + 0x6DDB, 0x9C4A, 0x6DDC, 0x9C4B, 0x6DDD, 0xE4C7, 0x6DDE, 0xE4C1, 0x6DDF, 0x9C4C, 0x6DE0, 0xE4C4, 0x6DE1, 0xB5AD, 0x6DE2, 0x9C4D, + 0x6DE3, 0x9C4E, 0x6DE4, 0xD3D9, 0x6DE5, 0x9C4F, 0x6DE6, 0xE4C6, 0x6DE7, 0x9C50, 0x6DE8, 0x9C51, 0x6DE9, 0x9C52, 0x6DEA, 0x9C53, + 0x6DEB, 0xD2F9, 0x6DEC, 0xB4E3, 0x6DED, 0x9C54, 0x6DEE, 0xBBB4, 0x6DEF, 0x9C55, 0x6DF0, 0x9C56, 0x6DF1, 0xC9EE, 0x6DF2, 0x9C57, + 0x6DF3, 0xB4BE, 0x6DF4, 0x9C58, 0x6DF5, 0x9C59, 0x6DF6, 0x9C5A, 0x6DF7, 0xBBEC, 0x6DF8, 0x9C5B, 0x6DF9, 0xD1CD, 0x6DFA, 0x9C5C, + 0x6DFB, 0xCCED, 0x6DFC, 0xEDB5, 0x6DFD, 0x9C5D, 0x6DFE, 0x9C5E, 0x6DFF, 0x9C5F, 0x6E00, 0x9C60, 0x6E01, 0x9C61, 0x6E02, 0x9C62, + 0x6E03, 0x9C63, 0x6E04, 0x9C64, 0x6E05, 0xC7E5, 0x6E06, 0x9C65, 0x6E07, 0x9C66, 0x6E08, 0x9C67, 0x6E09, 0x9C68, 0x6E0A, 0xD4A8, + 0x6E0B, 0x9C69, 0x6E0C, 0xE4CB, 0x6E0D, 0xD7D5, 0x6E0E, 0xE4C2, 0x6E0F, 0x9C6A, 0x6E10, 0xBDA5, 0x6E11, 0xE4C5, 0x6E12, 0x9C6B, + 0x6E13, 0x9C6C, 0x6E14, 0xD3E6, 0x6E15, 0x9C6D, 0x6E16, 0xE4C9, 0x6E17, 0xC9F8, 0x6E18, 0x9C6E, 0x6E19, 0x9C6F, 0x6E1A, 0xE4BE, + 0x6E1B, 0x9C70, 0x6E1C, 0x9C71, 0x6E1D, 0xD3E5, 0x6E1E, 0x9C72, 0x6E1F, 0x9C73, 0x6E20, 0xC7FE, 0x6E21, 0xB6C9, 0x6E22, 0x9C74, + 0x6E23, 0xD4FC, 0x6E24, 0xB2B3, 0x6E25, 0xE4D7, 0x6E26, 0x9C75, 0x6E27, 0x9C76, 0x6E28, 0x9C77, 0x6E29, 0xCEC2, 0x6E2A, 0x9C78, + 0x6E2B, 0xE4CD, 0x6E2C, 0x9C79, 0x6E2D, 0xCEBC, 0x6E2E, 0x9C7A, 0x6E2F, 0xB8DB, 0x6E30, 0x9C7B, 0x6E31, 0x9C7C, 0x6E32, 0xE4D6, + 0x6E33, 0x9C7D, 0x6E34, 0xBFCA, 0x6E35, 0x9C7E, 0x6E36, 0x9C80, 0x6E37, 0x9C81, 0x6E38, 0xD3CE, 0x6E39, 0x9C82, 0x6E3A, 0xC3EC, + 0x6E3B, 0x9C83, 0x6E3C, 0x9C84, 0x6E3D, 0x9C85, 0x6E3E, 0x9C86, 0x6E3F, 0x9C87, 0x6E40, 0x9C88, 0x6E41, 0x9C89, 0x6E42, 0x9C8A, + 0x6E43, 0xC5C8, 0x6E44, 0xE4D8, 0x6E45, 0x9C8B, 0x6E46, 0x9C8C, 0x6E47, 0x9C8D, 0x6E48, 0x9C8E, 0x6E49, 0x9C8F, 0x6E4A, 0x9C90, + 0x6E4B, 0x9C91, 0x6E4C, 0x9C92, 0x6E4D, 0xCDC4, 0x6E4E, 0xE4CF, 0x6E4F, 0x9C93, 0x6E50, 0x9C94, 0x6E51, 0x9C95, 0x6E52, 0x9C96, + 0x6E53, 0xE4D4, 0x6E54, 0xE4D5, 0x6E55, 0x9C97, 0x6E56, 0xBAFE, 0x6E57, 0x9C98, 0x6E58, 0xCFE6, 0x6E59, 0x9C99, 0x6E5A, 0x9C9A, + 0x6E5B, 0xD5BF, 0x6E5C, 0x9C9B, 0x6E5D, 0x9C9C, 0x6E5E, 0x9C9D, 0x6E5F, 0xE4D2, 0x6E60, 0x9C9E, 0x6E61, 0x9C9F, 0x6E62, 0x9CA0, + 0x6E63, 0x9CA1, 0x6E64, 0x9CA2, 0x6E65, 0x9CA3, 0x6E66, 0x9CA4, 0x6E67, 0x9CA5, 0x6E68, 0x9CA6, 0x6E69, 0x9CA7, 0x6E6A, 0x9CA8, + 0x6E6B, 0xE4D0, 0x6E6C, 0x9CA9, 0x6E6D, 0x9CAA, 0x6E6E, 0xE4CE, 0x6E6F, 0x9CAB, 0x6E70, 0x9CAC, 0x6E71, 0x9CAD, 0x6E72, 0x9CAE, + 0x6E73, 0x9CAF, 0x6E74, 0x9CB0, 0x6E75, 0x9CB1, 0x6E76, 0x9CB2, 0x6E77, 0x9CB3, 0x6E78, 0x9CB4, 0x6E79, 0x9CB5, 0x6E7A, 0x9CB6, + 0x6E7B, 0x9CB7, 0x6E7C, 0x9CB8, 0x6E7D, 0x9CB9, 0x6E7E, 0xCDE5, 0x6E7F, 0xCAAA, 0x6E80, 0x9CBA, 0x6E81, 0x9CBB, 0x6E82, 0x9CBC, + 0x6E83, 0xC0A3, 0x6E84, 0x9CBD, 0x6E85, 0xBDA6, 0x6E86, 0xE4D3, 0x6E87, 0x9CBE, 0x6E88, 0x9CBF, 0x6E89, 0xB8C8, 0x6E8A, 0x9CC0, + 0x6E8B, 0x9CC1, 0x6E8C, 0x9CC2, 0x6E8D, 0x9CC3, 0x6E8E, 0x9CC4, 0x6E8F, 0xE4E7, 0x6E90, 0xD4B4, 0x6E91, 0x9CC5, 0x6E92, 0x9CC6, + 0x6E93, 0x9CC7, 0x6E94, 0x9CC8, 0x6E95, 0x9CC9, 0x6E96, 0x9CCA, 0x6E97, 0x9CCB, 0x6E98, 0xE4DB, 0x6E99, 0x9CCC, 0x6E9A, 0x9CCD, + 0x6E9B, 0x9CCE, 0x6E9C, 0xC1EF, 0x6E9D, 0x9CCF, 0x6E9E, 0x9CD0, 0x6E9F, 0xE4E9, 0x6EA0, 0x9CD1, 0x6EA1, 0x9CD2, 0x6EA2, 0xD2E7, + 0x6EA3, 0x9CD3, 0x6EA4, 0x9CD4, 0x6EA5, 0xE4DF, 0x6EA6, 0x9CD5, 0x6EA7, 0xE4E0, 0x6EA8, 0x9CD6, 0x6EA9, 0x9CD7, 0x6EAA, 0xCFAA, + 0x6EAB, 0x9CD8, 0x6EAC, 0x9CD9, 0x6EAD, 0x9CDA, 0x6EAE, 0x9CDB, 0x6EAF, 0xCBDD, 0x6EB0, 0x9CDC, 0x6EB1, 0xE4DA, 0x6EB2, 0xE4D1, + 0x6EB3, 0x9CDD, 0x6EB4, 0xE4E5, 0x6EB5, 0x9CDE, 0x6EB6, 0xC8DC, 0x6EB7, 0xE4E3, 0x6EB8, 0x9CDF, 0x6EB9, 0x9CE0, 0x6EBA, 0xC4E7, + 0x6EBB, 0xE4E2, 0x6EBC, 0x9CE1, 0x6EBD, 0xE4E1, 0x6EBE, 0x9CE2, 0x6EBF, 0x9CE3, 0x6EC0, 0x9CE4, 0x6EC1, 0xB3FC, 0x6EC2, 0xE4E8, + 0x6EC3, 0x9CE5, 0x6EC4, 0x9CE6, 0x6EC5, 0x9CE7, 0x6EC6, 0x9CE8, 0x6EC7, 0xB5E1, 0x6EC8, 0x9CE9, 0x6EC9, 0x9CEA, 0x6ECA, 0x9CEB, + 0x6ECB, 0xD7CC, 0x6ECC, 0x9CEC, 0x6ECD, 0x9CED, 0x6ECE, 0x9CEE, 0x6ECF, 0xE4E6, 0x6ED0, 0x9CEF, 0x6ED1, 0xBBAC, 0x6ED2, 0x9CF0, + 0x6ED3, 0xD7D2, 0x6ED4, 0xCCCF, 0x6ED5, 0xEBF8, 0x6ED6, 0x9CF1, 0x6ED7, 0xE4E4, 0x6ED8, 0x9CF2, 0x6ED9, 0x9CF3, 0x6EDA, 0xB9F6, + 0x6EDB, 0x9CF4, 0x6EDC, 0x9CF5, 0x6EDD, 0x9CF6, 0x6EDE, 0xD6CD, 0x6EDF, 0xE4D9, 0x6EE0, 0xE4DC, 0x6EE1, 0xC2FA, 0x6EE2, 0xE4DE, + 0x6EE3, 0x9CF7, 0x6EE4, 0xC2CB, 0x6EE5, 0xC0C4, 0x6EE6, 0xC2D0, 0x6EE7, 0x9CF8, 0x6EE8, 0xB1F5, 0x6EE9, 0xCCB2, 0x6EEA, 0x9CF9, + 0x6EEB, 0x9CFA, 0x6EEC, 0x9CFB, 0x6EED, 0x9CFC, 0x6EEE, 0x9CFD, 0x6EEF, 0x9CFE, 0x6EF0, 0x9D40, 0x6EF1, 0x9D41, 0x6EF2, 0x9D42, + 0x6EF3, 0x9D43, 0x6EF4, 0xB5CE, 0x6EF5, 0x9D44, 0x6EF6, 0x9D45, 0x6EF7, 0x9D46, 0x6EF8, 0x9D47, 0x6EF9, 0xE4EF, 0x6EFA, 0x9D48, + 0x6EFB, 0x9D49, 0x6EFC, 0x9D4A, 0x6EFD, 0x9D4B, 0x6EFE, 0x9D4C, 0x6EFF, 0x9D4D, 0x6F00, 0x9D4E, 0x6F01, 0x9D4F, 0x6F02, 0xC6AF, + 0x6F03, 0x9D50, 0x6F04, 0x9D51, 0x6F05, 0x9D52, 0x6F06, 0xC6E1, 0x6F07, 0x9D53, 0x6F08, 0x9D54, 0x6F09, 0xE4F5, 0x6F0A, 0x9D55, + 0x6F0B, 0x9D56, 0x6F0C, 0x9D57, 0x6F0D, 0x9D58, 0x6F0E, 0x9D59, 0x6F0F, 0xC2A9, 0x6F10, 0x9D5A, 0x6F11, 0x9D5B, 0x6F12, 0x9D5C, + 0x6F13, 0xC0EC, 0x6F14, 0xD1DD, 0x6F15, 0xE4EE, 0x6F16, 0x9D5D, 0x6F17, 0x9D5E, 0x6F18, 0x9D5F, 0x6F19, 0x9D60, 0x6F1A, 0x9D61, + 0x6F1B, 0x9D62, 0x6F1C, 0x9D63, 0x6F1D, 0x9D64, 0x6F1E, 0x9D65, 0x6F1F, 0x9D66, 0x6F20, 0xC4AE, 0x6F21, 0x9D67, 0x6F22, 0x9D68, + 0x6F23, 0x9D69, 0x6F24, 0xE4ED, 0x6F25, 0x9D6A, 0x6F26, 0x9D6B, 0x6F27, 0x9D6C, 0x6F28, 0x9D6D, 0x6F29, 0xE4F6, 0x6F2A, 0xE4F4, + 0x6F2B, 0xC2FE, 0x6F2C, 0x9D6E, 0x6F2D, 0xE4DD, 0x6F2E, 0x9D6F, 0x6F2F, 0xE4F0, 0x6F30, 0x9D70, 0x6F31, 0xCAFE, 0x6F32, 0x9D71, + 0x6F33, 0xD5C4, 0x6F34, 0x9D72, 0x6F35, 0x9D73, 0x6F36, 0xE4F1, 0x6F37, 0x9D74, 0x6F38, 0x9D75, 0x6F39, 0x9D76, 0x6F3A, 0x9D77, + 0x6F3B, 0x9D78, 0x6F3C, 0x9D79, 0x6F3D, 0x9D7A, 0x6F3E, 0xD1FA, 0x6F3F, 0x9D7B, 0x6F40, 0x9D7C, 0x6F41, 0x9D7D, 0x6F42, 0x9D7E, + 0x6F43, 0x9D80, 0x6F44, 0x9D81, 0x6F45, 0x9D82, 0x6F46, 0xE4EB, 0x6F47, 0xE4EC, 0x6F48, 0x9D83, 0x6F49, 0x9D84, 0x6F4A, 0x9D85, + 0x6F4B, 0xE4F2, 0x6F4C, 0x9D86, 0x6F4D, 0xCEAB, 0x6F4E, 0x9D87, 0x6F4F, 0x9D88, 0x6F50, 0x9D89, 0x6F51, 0x9D8A, 0x6F52, 0x9D8B, + 0x6F53, 0x9D8C, 0x6F54, 0x9D8D, 0x6F55, 0x9D8E, 0x6F56, 0x9D8F, 0x6F57, 0x9D90, 0x6F58, 0xC5CB, 0x6F59, 0x9D91, 0x6F5A, 0x9D92, + 0x6F5B, 0x9D93, 0x6F5C, 0xC7B1, 0x6F5D, 0x9D94, 0x6F5E, 0xC2BA, 0x6F5F, 0x9D95, 0x6F60, 0x9D96, 0x6F61, 0x9D97, 0x6F62, 0xE4EA, + 0x6F63, 0x9D98, 0x6F64, 0x9D99, 0x6F65, 0x9D9A, 0x6F66, 0xC1CA, 0x6F67, 0x9D9B, 0x6F68, 0x9D9C, 0x6F69, 0x9D9D, 0x6F6A, 0x9D9E, + 0x6F6B, 0x9D9F, 0x6F6C, 0x9DA0, 0x6F6D, 0xCCB6, 0x6F6E, 0xB3B1, 0x6F6F, 0x9DA1, 0x6F70, 0x9DA2, 0x6F71, 0x9DA3, 0x6F72, 0xE4FB, + 0x6F73, 0x9DA4, 0x6F74, 0xE4F3, 0x6F75, 0x9DA5, 0x6F76, 0x9DA6, 0x6F77, 0x9DA7, 0x6F78, 0xE4FA, 0x6F79, 0x9DA8, 0x6F7A, 0xE4FD, + 0x6F7B, 0x9DA9, 0x6F7C, 0xE4FC, 0x6F7D, 0x9DAA, 0x6F7E, 0x9DAB, 0x6F7F, 0x9DAC, 0x6F80, 0x9DAD, 0x6F81, 0x9DAE, 0x6F82, 0x9DAF, + 0x6F83, 0x9DB0, 0x6F84, 0xB3CE, 0x6F85, 0x9DB1, 0x6F86, 0x9DB2, 0x6F87, 0x9DB3, 0x6F88, 0xB3BA, 0x6F89, 0xE4F7, 0x6F8A, 0x9DB4, + 0x6F8B, 0x9DB5, 0x6F8C, 0xE4F9, 0x6F8D, 0xE4F8, 0x6F8E, 0xC5EC, 0x6F8F, 0x9DB6, 0x6F90, 0x9DB7, 0x6F91, 0x9DB8, 0x6F92, 0x9DB9, + 0x6F93, 0x9DBA, 0x6F94, 0x9DBB, 0x6F95, 0x9DBC, 0x6F96, 0x9DBD, 0x6F97, 0x9DBE, 0x6F98, 0x9DBF, 0x6F99, 0x9DC0, 0x6F9A, 0x9DC1, + 0x6F9B, 0x9DC2, 0x6F9C, 0xC0BD, 0x6F9D, 0x9DC3, 0x6F9E, 0x9DC4, 0x6F9F, 0x9DC5, 0x6FA0, 0x9DC6, 0x6FA1, 0xD4E8, 0x6FA2, 0x9DC7, + 0x6FA3, 0x9DC8, 0x6FA4, 0x9DC9, 0x6FA5, 0x9DCA, 0x6FA6, 0x9DCB, 0x6FA7, 0xE5A2, 0x6FA8, 0x9DCC, 0x6FA9, 0x9DCD, 0x6FAA, 0x9DCE, + 0x6FAB, 0x9DCF, 0x6FAC, 0x9DD0, 0x6FAD, 0x9DD1, 0x6FAE, 0x9DD2, 0x6FAF, 0x9DD3, 0x6FB0, 0x9DD4, 0x6FB1, 0x9DD5, 0x6FB2, 0x9DD6, + 0x6FB3, 0xB0C4, 0x6FB4, 0x9DD7, 0x6FB5, 0x9DD8, 0x6FB6, 0xE5A4, 0x6FB7, 0x9DD9, 0x6FB8, 0x9DDA, 0x6FB9, 0xE5A3, 0x6FBA, 0x9DDB, + 0x6FBB, 0x9DDC, 0x6FBC, 0x9DDD, 0x6FBD, 0x9DDE, 0x6FBE, 0x9DDF, 0x6FBF, 0x9DE0, 0x6FC0, 0xBCA4, 0x6FC1, 0x9DE1, 0x6FC2, 0xE5A5, + 0x6FC3, 0x9DE2, 0x6FC4, 0x9DE3, 0x6FC5, 0x9DE4, 0x6FC6, 0x9DE5, 0x6FC7, 0x9DE6, 0x6FC8, 0x9DE7, 0x6FC9, 0xE5A1, 0x6FCA, 0x9DE8, + 0x6FCB, 0x9DE9, 0x6FCC, 0x9DEA, 0x6FCD, 0x9DEB, 0x6FCE, 0x9DEC, 0x6FCF, 0x9DED, 0x6FD0, 0x9DEE, 0x6FD1, 0xE4FE, 0x6FD2, 0xB1F4, + 0x6FD3, 0x9DEF, 0x6FD4, 0x9DF0, 0x6FD5, 0x9DF1, 0x6FD6, 0x9DF2, 0x6FD7, 0x9DF3, 0x6FD8, 0x9DF4, 0x6FD9, 0x9DF5, 0x6FDA, 0x9DF6, + 0x6FDB, 0x9DF7, 0x6FDC, 0x9DF8, 0x6FDD, 0x9DF9, 0x6FDE, 0xE5A8, 0x6FDF, 0x9DFA, 0x6FE0, 0xE5A9, 0x6FE1, 0xE5A6, 0x6FE2, 0x9DFB, + 0x6FE3, 0x9DFC, 0x6FE4, 0x9DFD, 0x6FE5, 0x9DFE, 0x6FE6, 0x9E40, 0x6FE7, 0x9E41, 0x6FE8, 0x9E42, 0x6FE9, 0x9E43, 0x6FEA, 0x9E44, + 0x6FEB, 0x9E45, 0x6FEC, 0x9E46, 0x6FED, 0x9E47, 0x6FEE, 0xE5A7, 0x6FEF, 0xE5AA, 0x6FF0, 0x9E48, 0x6FF1, 0x9E49, 0x6FF2, 0x9E4A, + 0x6FF3, 0x9E4B, 0x6FF4, 0x9E4C, 0x6FF5, 0x9E4D, 0x6FF6, 0x9E4E, 0x6FF7, 0x9E4F, 0x6FF8, 0x9E50, 0x6FF9, 0x9E51, 0x6FFA, 0x9E52, + 0x6FFB, 0x9E53, 0x6FFC, 0x9E54, 0x6FFD, 0x9E55, 0x6FFE, 0x9E56, 0x6FFF, 0x9E57, 0x7000, 0x9E58, 0x7001, 0x9E59, 0x7002, 0x9E5A, + 0x7003, 0x9E5B, 0x7004, 0x9E5C, 0x7005, 0x9E5D, 0x7006, 0x9E5E, 0x7007, 0x9E5F, 0x7008, 0x9E60, 0x7009, 0x9E61, 0x700A, 0x9E62, + 0x700B, 0x9E63, 0x700C, 0x9E64, 0x700D, 0x9E65, 0x700E, 0x9E66, 0x700F, 0x9E67, 0x7010, 0x9E68, 0x7011, 0xC6D9, 0x7012, 0x9E69, + 0x7013, 0x9E6A, 0x7014, 0x9E6B, 0x7015, 0x9E6C, 0x7016, 0x9E6D, 0x7017, 0x9E6E, 0x7018, 0x9E6F, 0x7019, 0x9E70, 0x701A, 0xE5AB, + 0x701B, 0xE5AD, 0x701C, 0x9E71, 0x701D, 0x9E72, 0x701E, 0x9E73, 0x701F, 0x9E74, 0x7020, 0x9E75, 0x7021, 0x9E76, 0x7022, 0x9E77, + 0x7023, 0xE5AC, 0x7024, 0x9E78, 0x7025, 0x9E79, 0x7026, 0x9E7A, 0x7027, 0x9E7B, 0x7028, 0x9E7C, 0x7029, 0x9E7D, 0x702A, 0x9E7E, + 0x702B, 0x9E80, 0x702C, 0x9E81, 0x702D, 0x9E82, 0x702E, 0x9E83, 0x702F, 0x9E84, 0x7030, 0x9E85, 0x7031, 0x9E86, 0x7032, 0x9E87, + 0x7033, 0x9E88, 0x7034, 0x9E89, 0x7035, 0xE5AF, 0x7036, 0x9E8A, 0x7037, 0x9E8B, 0x7038, 0x9E8C, 0x7039, 0xE5AE, 0x703A, 0x9E8D, + 0x703B, 0x9E8E, 0x703C, 0x9E8F, 0x703D, 0x9E90, 0x703E, 0x9E91, 0x703F, 0x9E92, 0x7040, 0x9E93, 0x7041, 0x9E94, 0x7042, 0x9E95, + 0x7043, 0x9E96, 0x7044, 0x9E97, 0x7045, 0x9E98, 0x7046, 0x9E99, 0x7047, 0x9E9A, 0x7048, 0x9E9B, 0x7049, 0x9E9C, 0x704A, 0x9E9D, + 0x704B, 0x9E9E, 0x704C, 0xB9E0, 0x704D, 0x9E9F, 0x704E, 0x9EA0, 0x704F, 0xE5B0, 0x7050, 0x9EA1, 0x7051, 0x9EA2, 0x7052, 0x9EA3, + 0x7053, 0x9EA4, 0x7054, 0x9EA5, 0x7055, 0x9EA6, 0x7056, 0x9EA7, 0x7057, 0x9EA8, 0x7058, 0x9EA9, 0x7059, 0x9EAA, 0x705A, 0x9EAB, + 0x705B, 0x9EAC, 0x705C, 0x9EAD, 0x705D, 0x9EAE, 0x705E, 0xE5B1, 0x705F, 0x9EAF, 0x7060, 0x9EB0, 0x7061, 0x9EB1, 0x7062, 0x9EB2, + 0x7063, 0x9EB3, 0x7064, 0x9EB4, 0x7065, 0x9EB5, 0x7066, 0x9EB6, 0x7067, 0x9EB7, 0x7068, 0x9EB8, 0x7069, 0x9EB9, 0x706A, 0x9EBA, + 0x706B, 0xBBF0, 0x706C, 0xECE1, 0x706D, 0xC3F0, 0x706E, 0x9EBB, 0x706F, 0xB5C6, 0x7070, 0xBBD2, 0x7071, 0x9EBC, 0x7072, 0x9EBD, + 0x7073, 0x9EBE, 0x7074, 0x9EBF, 0x7075, 0xC1E9, 0x7076, 0xD4EE, 0x7077, 0x9EC0, 0x7078, 0xBEC4, 0x7079, 0x9EC1, 0x707A, 0x9EC2, + 0x707B, 0x9EC3, 0x707C, 0xD7C6, 0x707D, 0x9EC4, 0x707E, 0xD4D6, 0x707F, 0xB2D3, 0x7080, 0xECBE, 0x7081, 0x9EC5, 0x7082, 0x9EC6, + 0x7083, 0x9EC7, 0x7084, 0x9EC8, 0x7085, 0xEAC1, 0x7086, 0x9EC9, 0x7087, 0x9ECA, 0x7088, 0x9ECB, 0x7089, 0xC2AF, 0x708A, 0xB4B6, + 0x708B, 0x9ECC, 0x708C, 0x9ECD, 0x708D, 0x9ECE, 0x708E, 0xD1D7, 0x708F, 0x9ECF, 0x7090, 0x9ED0, 0x7091, 0x9ED1, 0x7092, 0xB3B4, + 0x7093, 0x9ED2, 0x7094, 0xC8B2, 0x7095, 0xBFBB, 0x7096, 0xECC0, 0x7097, 0x9ED3, 0x7098, 0x9ED4, 0x7099, 0xD6CB, 0x709A, 0x9ED5, + 0x709B, 0x9ED6, 0x709C, 0xECBF, 0x709D, 0xECC1, 0x709E, 0x9ED7, 0x709F, 0x9ED8, 0x70A0, 0x9ED9, 0x70A1, 0x9EDA, 0x70A2, 0x9EDB, + 0x70A3, 0x9EDC, 0x70A4, 0x9EDD, 0x70A5, 0x9EDE, 0x70A6, 0x9EDF, 0x70A7, 0x9EE0, 0x70A8, 0x9EE1, 0x70A9, 0x9EE2, 0x70AA, 0x9EE3, + 0x70AB, 0xECC5, 0x70AC, 0xBEE6, 0x70AD, 0xCCBF, 0x70AE, 0xC5DA, 0x70AF, 0xBEBC, 0x70B0, 0x9EE4, 0x70B1, 0xECC6, 0x70B2, 0x9EE5, + 0x70B3, 0xB1FE, 0x70B4, 0x9EE6, 0x70B5, 0x9EE7, 0x70B6, 0x9EE8, 0x70B7, 0xECC4, 0x70B8, 0xD5A8, 0x70B9, 0xB5E3, 0x70BA, 0x9EE9, + 0x70BB, 0xECC2, 0x70BC, 0xC1B6, 0x70BD, 0xB3E3, 0x70BE, 0x9EEA, 0x70BF, 0x9EEB, 0x70C0, 0xECC3, 0x70C1, 0xCBB8, 0x70C2, 0xC0C3, + 0x70C3, 0xCCFE, 0x70C4, 0x9EEC, 0x70C5, 0x9EED, 0x70C6, 0x9EEE, 0x70C7, 0x9EEF, 0x70C8, 0xC1D2, 0x70C9, 0x9EF0, 0x70CA, 0xECC8, + 0x70CB, 0x9EF1, 0x70CC, 0x9EF2, 0x70CD, 0x9EF3, 0x70CE, 0x9EF4, 0x70CF, 0x9EF5, 0x70D0, 0x9EF6, 0x70D1, 0x9EF7, 0x70D2, 0x9EF8, + 0x70D3, 0x9EF9, 0x70D4, 0x9EFA, 0x70D5, 0x9EFB, 0x70D6, 0x9EFC, 0x70D7, 0x9EFD, 0x70D8, 0xBAE6, 0x70D9, 0xC0D3, 0x70DA, 0x9EFE, + 0x70DB, 0xD6F2, 0x70DC, 0x9F40, 0x70DD, 0x9F41, 0x70DE, 0x9F42, 0x70DF, 0xD1CC, 0x70E0, 0x9F43, 0x70E1, 0x9F44, 0x70E2, 0x9F45, + 0x70E3, 0x9F46, 0x70E4, 0xBFBE, 0x70E5, 0x9F47, 0x70E6, 0xB7B3, 0x70E7, 0xC9D5, 0x70E8, 0xECC7, 0x70E9, 0xBBE2, 0x70EA, 0x9F48, + 0x70EB, 0xCCCC, 0x70EC, 0xBDFD, 0x70ED, 0xC8C8, 0x70EE, 0x9F49, 0x70EF, 0xCFA9, 0x70F0, 0x9F4A, 0x70F1, 0x9F4B, 0x70F2, 0x9F4C, + 0x70F3, 0x9F4D, 0x70F4, 0x9F4E, 0x70F5, 0x9F4F, 0x70F6, 0x9F50, 0x70F7, 0xCDE9, 0x70F8, 0x9F51, 0x70F9, 0xC5EB, 0x70FA, 0x9F52, + 0x70FB, 0x9F53, 0x70FC, 0x9F54, 0x70FD, 0xB7E9, 0x70FE, 0x9F55, 0x70FF, 0x9F56, 0x7100, 0x9F57, 0x7101, 0x9F58, 0x7102, 0x9F59, + 0x7103, 0x9F5A, 0x7104, 0x9F5B, 0x7105, 0x9F5C, 0x7106, 0x9F5D, 0x7107, 0x9F5E, 0x7108, 0x9F5F, 0x7109, 0xD1C9, 0x710A, 0xBAB8, + 0x710B, 0x9F60, 0x710C, 0x9F61, 0x710D, 0x9F62, 0x710E, 0x9F63, 0x710F, 0x9F64, 0x7110, 0xECC9, 0x7111, 0x9F65, 0x7112, 0x9F66, + 0x7113, 0xECCA, 0x7114, 0x9F67, 0x7115, 0xBBC0, 0x7116, 0xECCB, 0x7117, 0x9F68, 0x7118, 0xECE2, 0x7119, 0xB1BA, 0x711A, 0xB7D9, + 0x711B, 0x9F69, 0x711C, 0x9F6A, 0x711D, 0x9F6B, 0x711E, 0x9F6C, 0x711F, 0x9F6D, 0x7120, 0x9F6E, 0x7121, 0x9F6F, 0x7122, 0x9F70, + 0x7123, 0x9F71, 0x7124, 0x9F72, 0x7125, 0x9F73, 0x7126, 0xBDB9, 0x7127, 0x9F74, 0x7128, 0x9F75, 0x7129, 0x9F76, 0x712A, 0x9F77, + 0x712B, 0x9F78, 0x712C, 0x9F79, 0x712D, 0x9F7A, 0x712E, 0x9F7B, 0x712F, 0xECCC, 0x7130, 0xD1E6, 0x7131, 0xECCD, 0x7132, 0x9F7C, + 0x7133, 0x9F7D, 0x7134, 0x9F7E, 0x7135, 0x9F80, 0x7136, 0xC8BB, 0x7137, 0x9F81, 0x7138, 0x9F82, 0x7139, 0x9F83, 0x713A, 0x9F84, + 0x713B, 0x9F85, 0x713C, 0x9F86, 0x713D, 0x9F87, 0x713E, 0x9F88, 0x713F, 0x9F89, 0x7140, 0x9F8A, 0x7141, 0x9F8B, 0x7142, 0x9F8C, + 0x7143, 0x9F8D, 0x7144, 0x9F8E, 0x7145, 0xECD1, 0x7146, 0x9F8F, 0x7147, 0x9F90, 0x7148, 0x9F91, 0x7149, 0x9F92, 0x714A, 0xECD3, + 0x714B, 0x9F93, 0x714C, 0xBBCD, 0x714D, 0x9F94, 0x714E, 0xBCE5, 0x714F, 0x9F95, 0x7150, 0x9F96, 0x7151, 0x9F97, 0x7152, 0x9F98, + 0x7153, 0x9F99, 0x7154, 0x9F9A, 0x7155, 0x9F9B, 0x7156, 0x9F9C, 0x7157, 0x9F9D, 0x7158, 0x9F9E, 0x7159, 0x9F9F, 0x715A, 0x9FA0, + 0x715B, 0x9FA1, 0x715C, 0xECCF, 0x715D, 0x9FA2, 0x715E, 0xC9B7, 0x715F, 0x9FA3, 0x7160, 0x9FA4, 0x7161, 0x9FA5, 0x7162, 0x9FA6, + 0x7163, 0x9FA7, 0x7164, 0xC3BA, 0x7165, 0x9FA8, 0x7166, 0xECE3, 0x7167, 0xD5D5, 0x7168, 0xECD0, 0x7169, 0x9FA9, 0x716A, 0x9FAA, + 0x716B, 0x9FAB, 0x716C, 0x9FAC, 0x716D, 0x9FAD, 0x716E, 0xD6F3, 0x716F, 0x9FAE, 0x7170, 0x9FAF, 0x7171, 0x9FB0, 0x7172, 0xECD2, + 0x7173, 0xECCE, 0x7174, 0x9FB1, 0x7175, 0x9FB2, 0x7176, 0x9FB3, 0x7177, 0x9FB4, 0x7178, 0xECD4, 0x7179, 0x9FB5, 0x717A, 0xECD5, + 0x717B, 0x9FB6, 0x717C, 0x9FB7, 0x717D, 0xC9BF, 0x717E, 0x9FB8, 0x717F, 0x9FB9, 0x7180, 0x9FBA, 0x7181, 0x9FBB, 0x7182, 0x9FBC, + 0x7183, 0x9FBD, 0x7184, 0xCFA8, 0x7185, 0x9FBE, 0x7186, 0x9FBF, 0x7187, 0x9FC0, 0x7188, 0x9FC1, 0x7189, 0x9FC2, 0x718A, 0xD0DC, + 0x718B, 0x9FC3, 0x718C, 0x9FC4, 0x718D, 0x9FC5, 0x718E, 0x9FC6, 0x718F, 0xD1AC, 0x7190, 0x9FC7, 0x7191, 0x9FC8, 0x7192, 0x9FC9, + 0x7193, 0x9FCA, 0x7194, 0xC8DB, 0x7195, 0x9FCB, 0x7196, 0x9FCC, 0x7197, 0x9FCD, 0x7198, 0xECD6, 0x7199, 0xCEF5, 0x719A, 0x9FCE, + 0x719B, 0x9FCF, 0x719C, 0x9FD0, 0x719D, 0x9FD1, 0x719E, 0x9FD2, 0x719F, 0xCAEC, 0x71A0, 0xECDA, 0x71A1, 0x9FD3, 0x71A2, 0x9FD4, + 0x71A3, 0x9FD5, 0x71A4, 0x9FD6, 0x71A5, 0x9FD7, 0x71A6, 0x9FD8, 0x71A7, 0x9FD9, 0x71A8, 0xECD9, 0x71A9, 0x9FDA, 0x71AA, 0x9FDB, + 0x71AB, 0x9FDC, 0x71AC, 0xB0BE, 0x71AD, 0x9FDD, 0x71AE, 0x9FDE, 0x71AF, 0x9FDF, 0x71B0, 0x9FE0, 0x71B1, 0x9FE1, 0x71B2, 0x9FE2, + 0x71B3, 0xECD7, 0x71B4, 0x9FE3, 0x71B5, 0xECD8, 0x71B6, 0x9FE4, 0x71B7, 0x9FE5, 0x71B8, 0x9FE6, 0x71B9, 0xECE4, 0x71BA, 0x9FE7, + 0x71BB, 0x9FE8, 0x71BC, 0x9FE9, 0x71BD, 0x9FEA, 0x71BE, 0x9FEB, 0x71BF, 0x9FEC, 0x71C0, 0x9FED, 0x71C1, 0x9FEE, 0x71C2, 0x9FEF, + 0x71C3, 0xC8BC, 0x71C4, 0x9FF0, 0x71C5, 0x9FF1, 0x71C6, 0x9FF2, 0x71C7, 0x9FF3, 0x71C8, 0x9FF4, 0x71C9, 0x9FF5, 0x71CA, 0x9FF6, + 0x71CB, 0x9FF7, 0x71CC, 0x9FF8, 0x71CD, 0x9FF9, 0x71CE, 0xC1C7, 0x71CF, 0x9FFA, 0x71D0, 0x9FFB, 0x71D1, 0x9FFC, 0x71D2, 0x9FFD, + 0x71D3, 0x9FFE, 0x71D4, 0xECDC, 0x71D5, 0xD1E0, 0x71D6, 0xA040, 0x71D7, 0xA041, 0x71D8, 0xA042, 0x71D9, 0xA043, 0x71DA, 0xA044, + 0x71DB, 0xA045, 0x71DC, 0xA046, 0x71DD, 0xA047, 0x71DE, 0xA048, 0x71DF, 0xA049, 0x71E0, 0xECDB, 0x71E1, 0xA04A, 0x71E2, 0xA04B, + 0x71E3, 0xA04C, 0x71E4, 0xA04D, 0x71E5, 0xD4EF, 0x71E6, 0xA04E, 0x71E7, 0xECDD, 0x71E8, 0xA04F, 0x71E9, 0xA050, 0x71EA, 0xA051, + 0x71EB, 0xA052, 0x71EC, 0xA053, 0x71ED, 0xA054, 0x71EE, 0xDBC6, 0x71EF, 0xA055, 0x71F0, 0xA056, 0x71F1, 0xA057, 0x71F2, 0xA058, + 0x71F3, 0xA059, 0x71F4, 0xA05A, 0x71F5, 0xA05B, 0x71F6, 0xA05C, 0x71F7, 0xA05D, 0x71F8, 0xA05E, 0x71F9, 0xECDE, 0x71FA, 0xA05F, + 0x71FB, 0xA060, 0x71FC, 0xA061, 0x71FD, 0xA062, 0x71FE, 0xA063, 0x71FF, 0xA064, 0x7200, 0xA065, 0x7201, 0xA066, 0x7202, 0xA067, + 0x7203, 0xA068, 0x7204, 0xA069, 0x7205, 0xA06A, 0x7206, 0xB1AC, 0x7207, 0xA06B, 0x7208, 0xA06C, 0x7209, 0xA06D, 0x720A, 0xA06E, + 0x720B, 0xA06F, 0x720C, 0xA070, 0x720D, 0xA071, 0x720E, 0xA072, 0x720F, 0xA073, 0x7210, 0xA074, 0x7211, 0xA075, 0x7212, 0xA076, + 0x7213, 0xA077, 0x7214, 0xA078, 0x7215, 0xA079, 0x7216, 0xA07A, 0x7217, 0xA07B, 0x7218, 0xA07C, 0x7219, 0xA07D, 0x721A, 0xA07E, + 0x721B, 0xA080, 0x721C, 0xA081, 0x721D, 0xECDF, 0x721E, 0xA082, 0x721F, 0xA083, 0x7220, 0xA084, 0x7221, 0xA085, 0x7222, 0xA086, + 0x7223, 0xA087, 0x7224, 0xA088, 0x7225, 0xA089, 0x7226, 0xA08A, 0x7227, 0xA08B, 0x7228, 0xECE0, 0x7229, 0xA08C, 0x722A, 0xD7A6, + 0x722B, 0xA08D, 0x722C, 0xC5C0, 0x722D, 0xA08E, 0x722E, 0xA08F, 0x722F, 0xA090, 0x7230, 0xEBBC, 0x7231, 0xB0AE, 0x7232, 0xA091, + 0x7233, 0xA092, 0x7234, 0xA093, 0x7235, 0xBEF4, 0x7236, 0xB8B8, 0x7237, 0xD2AF, 0x7238, 0xB0D6, 0x7239, 0xB5F9, 0x723A, 0xA094, + 0x723B, 0xD8B3, 0x723C, 0xA095, 0x723D, 0xCBAC, 0x723E, 0xA096, 0x723F, 0xE3DD, 0x7240, 0xA097, 0x7241, 0xA098, 0x7242, 0xA099, + 0x7243, 0xA09A, 0x7244, 0xA09B, 0x7245, 0xA09C, 0x7246, 0xA09D, 0x7247, 0xC6AC, 0x7248, 0xB0E6, 0x7249, 0xA09E, 0x724A, 0xA09F, + 0x724B, 0xA0A0, 0x724C, 0xC5C6, 0x724D, 0xEBB9, 0x724E, 0xA0A1, 0x724F, 0xA0A2, 0x7250, 0xA0A3, 0x7251, 0xA0A4, 0x7252, 0xEBBA, + 0x7253, 0xA0A5, 0x7254, 0xA0A6, 0x7255, 0xA0A7, 0x7256, 0xEBBB, 0x7257, 0xA0A8, 0x7258, 0xA0A9, 0x7259, 0xD1C0, 0x725A, 0xA0AA, + 0x725B, 0xC5A3, 0x725C, 0xA0AB, 0x725D, 0xEAF2, 0x725E, 0xA0AC, 0x725F, 0xC4B2, 0x7260, 0xA0AD, 0x7261, 0xC4B5, 0x7262, 0xC0CE, + 0x7263, 0xA0AE, 0x7264, 0xA0AF, 0x7265, 0xA0B0, 0x7266, 0xEAF3, 0x7267, 0xC4C1, 0x7268, 0xA0B1, 0x7269, 0xCEEF, 0x726A, 0xA0B2, + 0x726B, 0xA0B3, 0x726C, 0xA0B4, 0x726D, 0xA0B5, 0x726E, 0xEAF0, 0x726F, 0xEAF4, 0x7270, 0xA0B6, 0x7271, 0xA0B7, 0x7272, 0xC9FC, + 0x7273, 0xA0B8, 0x7274, 0xA0B9, 0x7275, 0xC7A3, 0x7276, 0xA0BA, 0x7277, 0xA0BB, 0x7278, 0xA0BC, 0x7279, 0xCCD8, 0x727A, 0xCEFE, + 0x727B, 0xA0BD, 0x727C, 0xA0BE, 0x727D, 0xA0BF, 0x727E, 0xEAF5, 0x727F, 0xEAF6, 0x7280, 0xCFAC, 0x7281, 0xC0E7, 0x7282, 0xA0C0, + 0x7283, 0xA0C1, 0x7284, 0xEAF7, 0x7285, 0xA0C2, 0x7286, 0xA0C3, 0x7287, 0xA0C4, 0x7288, 0xA0C5, 0x7289, 0xA0C6, 0x728A, 0xB6BF, + 0x728B, 0xEAF8, 0x728C, 0xA0C7, 0x728D, 0xEAF9, 0x728E, 0xA0C8, 0x728F, 0xEAFA, 0x7290, 0xA0C9, 0x7291, 0xA0CA, 0x7292, 0xEAFB, + 0x7293, 0xA0CB, 0x7294, 0xA0CC, 0x7295, 0xA0CD, 0x7296, 0xA0CE, 0x7297, 0xA0CF, 0x7298, 0xA0D0, 0x7299, 0xA0D1, 0x729A, 0xA0D2, + 0x729B, 0xA0D3, 0x729C, 0xA0D4, 0x729D, 0xA0D5, 0x729E, 0xA0D6, 0x729F, 0xEAF1, 0x72A0, 0xA0D7, 0x72A1, 0xA0D8, 0x72A2, 0xA0D9, + 0x72A3, 0xA0DA, 0x72A4, 0xA0DB, 0x72A5, 0xA0DC, 0x72A6, 0xA0DD, 0x72A7, 0xA0DE, 0x72A8, 0xA0DF, 0x72A9, 0xA0E0, 0x72AA, 0xA0E1, + 0x72AB, 0xA0E2, 0x72AC, 0xC8AE, 0x72AD, 0xE1EB, 0x72AE, 0xA0E3, 0x72AF, 0xB7B8, 0x72B0, 0xE1EC, 0x72B1, 0xA0E4, 0x72B2, 0xA0E5, + 0x72B3, 0xA0E6, 0x72B4, 0xE1ED, 0x72B5, 0xA0E7, 0x72B6, 0xD7B4, 0x72B7, 0xE1EE, 0x72B8, 0xE1EF, 0x72B9, 0xD3CC, 0x72BA, 0xA0E8, + 0x72BB, 0xA0E9, 0x72BC, 0xA0EA, 0x72BD, 0xA0EB, 0x72BE, 0xA0EC, 0x72BF, 0xA0ED, 0x72C0, 0xA0EE, 0x72C1, 0xE1F1, 0x72C2, 0xBFF1, + 0x72C3, 0xE1F0, 0x72C4, 0xB5D2, 0x72C5, 0xA0EF, 0x72C6, 0xA0F0, 0x72C7, 0xA0F1, 0x72C8, 0xB1B7, 0x72C9, 0xA0F2, 0x72CA, 0xA0F3, + 0x72CB, 0xA0F4, 0x72CC, 0xA0F5, 0x72CD, 0xE1F3, 0x72CE, 0xE1F2, 0x72CF, 0xA0F6, 0x72D0, 0xBAFC, 0x72D1, 0xA0F7, 0x72D2, 0xE1F4, + 0x72D3, 0xA0F8, 0x72D4, 0xA0F9, 0x72D5, 0xA0FA, 0x72D6, 0xA0FB, 0x72D7, 0xB9B7, 0x72D8, 0xA0FC, 0x72D9, 0xBED1, 0x72DA, 0xA0FD, + 0x72DB, 0xA0FE, 0x72DC, 0xAA40, 0x72DD, 0xAA41, 0x72DE, 0xC4FC, 0x72DF, 0xAA42, 0x72E0, 0xBADD, 0x72E1, 0xBDC6, 0x72E2, 0xAA43, + 0x72E3, 0xAA44, 0x72E4, 0xAA45, 0x72E5, 0xAA46, 0x72E6, 0xAA47, 0x72E7, 0xAA48, 0x72E8, 0xE1F5, 0x72E9, 0xE1F7, 0x72EA, 0xAA49, + 0x72EB, 0xAA4A, 0x72EC, 0xB6C0, 0x72ED, 0xCFC1, 0x72EE, 0xCAA8, 0x72EF, 0xE1F6, 0x72F0, 0xD5F8, 0x72F1, 0xD3FC, 0x72F2, 0xE1F8, + 0x72F3, 0xE1FC, 0x72F4, 0xE1F9, 0x72F5, 0xAA4B, 0x72F6, 0xAA4C, 0x72F7, 0xE1FA, 0x72F8, 0xC0EA, 0x72F9, 0xAA4D, 0x72FA, 0xE1FE, + 0x72FB, 0xE2A1, 0x72FC, 0xC0C7, 0x72FD, 0xAA4E, 0x72FE, 0xAA4F, 0x72FF, 0xAA50, 0x7300, 0xAA51, 0x7301, 0xE1FB, 0x7302, 0xAA52, + 0x7303, 0xE1FD, 0x7304, 0xAA53, 0x7305, 0xAA54, 0x7306, 0xAA55, 0x7307, 0xAA56, 0x7308, 0xAA57, 0x7309, 0xAA58, 0x730A, 0xE2A5, + 0x730B, 0xAA59, 0x730C, 0xAA5A, 0x730D, 0xAA5B, 0x730E, 0xC1D4, 0x730F, 0xAA5C, 0x7310, 0xAA5D, 0x7311, 0xAA5E, 0x7312, 0xAA5F, + 0x7313, 0xE2A3, 0x7314, 0xAA60, 0x7315, 0xE2A8, 0x7316, 0xB2FE, 0x7317, 0xE2A2, 0x7318, 0xAA61, 0x7319, 0xAA62, 0x731A, 0xAA63, + 0x731B, 0xC3CD, 0x731C, 0xB2C2, 0x731D, 0xE2A7, 0x731E, 0xE2A6, 0x731F, 0xAA64, 0x7320, 0xAA65, 0x7321, 0xE2A4, 0x7322, 0xE2A9, + 0x7323, 0xAA66, 0x7324, 0xAA67, 0x7325, 0xE2AB, 0x7326, 0xAA68, 0x7327, 0xAA69, 0x7328, 0xAA6A, 0x7329, 0xD0C9, 0x732A, 0xD6ED, + 0x732B, 0xC3A8, 0x732C, 0xE2AC, 0x732D, 0xAA6B, 0x732E, 0xCFD7, 0x732F, 0xAA6C, 0x7330, 0xAA6D, 0x7331, 0xE2AE, 0x7332, 0xAA6E, + 0x7333, 0xAA6F, 0x7334, 0xBAEF, 0x7335, 0xAA70, 0x7336, 0xAA71, 0x7337, 0xE9E0, 0x7338, 0xE2AD, 0x7339, 0xE2AA, 0x733A, 0xAA72, + 0x733B, 0xAA73, 0x733C, 0xAA74, 0x733D, 0xAA75, 0x733E, 0xBBAB, 0x733F, 0xD4B3, 0x7340, 0xAA76, 0x7341, 0xAA77, 0x7342, 0xAA78, + 0x7343, 0xAA79, 0x7344, 0xAA7A, 0x7345, 0xAA7B, 0x7346, 0xAA7C, 0x7347, 0xAA7D, 0x7348, 0xAA7E, 0x7349, 0xAA80, 0x734A, 0xAA81, + 0x734B, 0xAA82, 0x734C, 0xAA83, 0x734D, 0xE2B0, 0x734E, 0xAA84, 0x734F, 0xAA85, 0x7350, 0xE2AF, 0x7351, 0xAA86, 0x7352, 0xE9E1, + 0x7353, 0xAA87, 0x7354, 0xAA88, 0x7355, 0xAA89, 0x7356, 0xAA8A, 0x7357, 0xE2B1, 0x7358, 0xAA8B, 0x7359, 0xAA8C, 0x735A, 0xAA8D, + 0x735B, 0xAA8E, 0x735C, 0xAA8F, 0x735D, 0xAA90, 0x735E, 0xAA91, 0x735F, 0xAA92, 0x7360, 0xE2B2, 0x7361, 0xAA93, 0x7362, 0xAA94, + 0x7363, 0xAA95, 0x7364, 0xAA96, 0x7365, 0xAA97, 0x7366, 0xAA98, 0x7367, 0xAA99, 0x7368, 0xAA9A, 0x7369, 0xAA9B, 0x736A, 0xAA9C, + 0x736B, 0xAA9D, 0x736C, 0xE2B3, 0x736D, 0xCCA1, 0x736E, 0xAA9E, 0x736F, 0xE2B4, 0x7370, 0xAA9F, 0x7371, 0xAAA0, 0x7372, 0xAB40, + 0x7373, 0xAB41, 0x7374, 0xAB42, 0x7375, 0xAB43, 0x7376, 0xAB44, 0x7377, 0xAB45, 0x7378, 0xAB46, 0x7379, 0xAB47, 0x737A, 0xAB48, + 0x737B, 0xAB49, 0x737C, 0xAB4A, 0x737D, 0xAB4B, 0x737E, 0xE2B5, 0x737F, 0xAB4C, 0x7380, 0xAB4D, 0x7381, 0xAB4E, 0x7382, 0xAB4F, + 0x7383, 0xAB50, 0x7384, 0xD0FE, 0x7385, 0xAB51, 0x7386, 0xAB52, 0x7387, 0xC2CA, 0x7388, 0xAB53, 0x7389, 0xD3F1, 0x738A, 0xAB54, + 0x738B, 0xCDF5, 0x738C, 0xAB55, 0x738D, 0xAB56, 0x738E, 0xE7E0, 0x738F, 0xAB57, 0x7390, 0xAB58, 0x7391, 0xE7E1, 0x7392, 0xAB59, + 0x7393, 0xAB5A, 0x7394, 0xAB5B, 0x7395, 0xAB5C, 0x7396, 0xBEC1, 0x7397, 0xAB5D, 0x7398, 0xAB5E, 0x7399, 0xAB5F, 0x739A, 0xAB60, + 0x739B, 0xC2EA, 0x739C, 0xAB61, 0x739D, 0xAB62, 0x739E, 0xAB63, 0x739F, 0xE7E4, 0x73A0, 0xAB64, 0x73A1, 0xAB65, 0x73A2, 0xE7E3, + 0x73A3, 0xAB66, 0x73A4, 0xAB67, 0x73A5, 0xAB68, 0x73A6, 0xAB69, 0x73A7, 0xAB6A, 0x73A8, 0xAB6B, 0x73A9, 0xCDE6, 0x73AA, 0xAB6C, + 0x73AB, 0xC3B5, 0x73AC, 0xAB6D, 0x73AD, 0xAB6E, 0x73AE, 0xE7E2, 0x73AF, 0xBBB7, 0x73B0, 0xCFD6, 0x73B1, 0xAB6F, 0x73B2, 0xC1E1, + 0x73B3, 0xE7E9, 0x73B4, 0xAB70, 0x73B5, 0xAB71, 0x73B6, 0xAB72, 0x73B7, 0xE7E8, 0x73B8, 0xAB73, 0x73B9, 0xAB74, 0x73BA, 0xE7F4, + 0x73BB, 0xB2A3, 0x73BC, 0xAB75, 0x73BD, 0xAB76, 0x73BE, 0xAB77, 0x73BF, 0xAB78, 0x73C0, 0xE7EA, 0x73C1, 0xAB79, 0x73C2, 0xE7E6, + 0x73C3, 0xAB7A, 0x73C4, 0xAB7B, 0x73C5, 0xAB7C, 0x73C6, 0xAB7D, 0x73C7, 0xAB7E, 0x73C8, 0xE7EC, 0x73C9, 0xE7EB, 0x73CA, 0xC9BA, + 0x73CB, 0xAB80, 0x73CC, 0xAB81, 0x73CD, 0xD5E4, 0x73CE, 0xAB82, 0x73CF, 0xE7E5, 0x73D0, 0xB7A9, 0x73D1, 0xE7E7, 0x73D2, 0xAB83, + 0x73D3, 0xAB84, 0x73D4, 0xAB85, 0x73D5, 0xAB86, 0x73D6, 0xAB87, 0x73D7, 0xAB88, 0x73D8, 0xAB89, 0x73D9, 0xE7EE, 0x73DA, 0xAB8A, + 0x73DB, 0xAB8B, 0x73DC, 0xAB8C, 0x73DD, 0xAB8D, 0x73DE, 0xE7F3, 0x73DF, 0xAB8E, 0x73E0, 0xD6E9, 0x73E1, 0xAB8F, 0x73E2, 0xAB90, + 0x73E3, 0xAB91, 0x73E4, 0xAB92, 0x73E5, 0xE7ED, 0x73E6, 0xAB93, 0x73E7, 0xE7F2, 0x73E8, 0xAB94, 0x73E9, 0xE7F1, 0x73EA, 0xAB95, + 0x73EB, 0xAB96, 0x73EC, 0xAB97, 0x73ED, 0xB0E0, 0x73EE, 0xAB98, 0x73EF, 0xAB99, 0x73F0, 0xAB9A, 0x73F1, 0xAB9B, 0x73F2, 0xE7F5, + 0x73F3, 0xAB9C, 0x73F4, 0xAB9D, 0x73F5, 0xAB9E, 0x73F6, 0xAB9F, 0x73F7, 0xABA0, 0x73F8, 0xAC40, 0x73F9, 0xAC41, 0x73FA, 0xAC42, + 0x73FB, 0xAC43, 0x73FC, 0xAC44, 0x73FD, 0xAC45, 0x73FE, 0xAC46, 0x73FF, 0xAC47, 0x7400, 0xAC48, 0x7401, 0xAC49, 0x7402, 0xAC4A, + 0x7403, 0xC7F2, 0x7404, 0xAC4B, 0x7405, 0xC0C5, 0x7406, 0xC0ED, 0x7407, 0xAC4C, 0x7408, 0xAC4D, 0x7409, 0xC1F0, 0x740A, 0xE7F0, + 0x740B, 0xAC4E, 0x740C, 0xAC4F, 0x740D, 0xAC50, 0x740E, 0xAC51, 0x740F, 0xE7F6, 0x7410, 0xCBF6, 0x7411, 0xAC52, 0x7412, 0xAC53, + 0x7413, 0xAC54, 0x7414, 0xAC55, 0x7415, 0xAC56, 0x7416, 0xAC57, 0x7417, 0xAC58, 0x7418, 0xAC59, 0x7419, 0xAC5A, 0x741A, 0xE8A2, + 0x741B, 0xE8A1, 0x741C, 0xAC5B, 0x741D, 0xAC5C, 0x741E, 0xAC5D, 0x741F, 0xAC5E, 0x7420, 0xAC5F, 0x7421, 0xAC60, 0x7422, 0xD7C1, + 0x7423, 0xAC61, 0x7424, 0xAC62, 0x7425, 0xE7FA, 0x7426, 0xE7F9, 0x7427, 0xAC63, 0x7428, 0xE7FB, 0x7429, 0xAC64, 0x742A, 0xE7F7, + 0x742B, 0xAC65, 0x742C, 0xE7FE, 0x742D, 0xAC66, 0x742E, 0xE7FD, 0x742F, 0xAC67, 0x7430, 0xE7FC, 0x7431, 0xAC68, 0x7432, 0xAC69, + 0x7433, 0xC1D5, 0x7434, 0xC7D9, 0x7435, 0xC5FD, 0x7436, 0xC5C3, 0x7437, 0xAC6A, 0x7438, 0xAC6B, 0x7439, 0xAC6C, 0x743A, 0xAC6D, + 0x743B, 0xAC6E, 0x743C, 0xC7ED, 0x743D, 0xAC6F, 0x743E, 0xAC70, 0x743F, 0xAC71, 0x7440, 0xAC72, 0x7441, 0xE8A3, 0x7442, 0xAC73, + 0x7443, 0xAC74, 0x7444, 0xAC75, 0x7445, 0xAC76, 0x7446, 0xAC77, 0x7447, 0xAC78, 0x7448, 0xAC79, 0x7449, 0xAC7A, 0x744A, 0xAC7B, + 0x744B, 0xAC7C, 0x744C, 0xAC7D, 0x744D, 0xAC7E, 0x744E, 0xAC80, 0x744F, 0xAC81, 0x7450, 0xAC82, 0x7451, 0xAC83, 0x7452, 0xAC84, + 0x7453, 0xAC85, 0x7454, 0xAC86, 0x7455, 0xE8A6, 0x7456, 0xAC87, 0x7457, 0xE8A5, 0x7458, 0xAC88, 0x7459, 0xE8A7, 0x745A, 0xBAF7, + 0x745B, 0xE7F8, 0x745C, 0xE8A4, 0x745D, 0xAC89, 0x745E, 0xC8F0, 0x745F, 0xC9AA, 0x7460, 0xAC8A, 0x7461, 0xAC8B, 0x7462, 0xAC8C, + 0x7463, 0xAC8D, 0x7464, 0xAC8E, 0x7465, 0xAC8F, 0x7466, 0xAC90, 0x7467, 0xAC91, 0x7468, 0xAC92, 0x7469, 0xAC93, 0x746A, 0xAC94, + 0x746B, 0xAC95, 0x746C, 0xAC96, 0x746D, 0xE8A9, 0x746E, 0xAC97, 0x746F, 0xAC98, 0x7470, 0xB9E5, 0x7471, 0xAC99, 0x7472, 0xAC9A, + 0x7473, 0xAC9B, 0x7474, 0xAC9C, 0x7475, 0xAC9D, 0x7476, 0xD1FE, 0x7477, 0xE8A8, 0x7478, 0xAC9E, 0x7479, 0xAC9F, 0x747A, 0xACA0, + 0x747B, 0xAD40, 0x747C, 0xAD41, 0x747D, 0xAD42, 0x747E, 0xE8AA, 0x747F, 0xAD43, 0x7480, 0xE8AD, 0x7481, 0xE8AE, 0x7482, 0xAD44, + 0x7483, 0xC1A7, 0x7484, 0xAD45, 0x7485, 0xAD46, 0x7486, 0xAD47, 0x7487, 0xE8AF, 0x7488, 0xAD48, 0x7489, 0xAD49, 0x748A, 0xAD4A, + 0x748B, 0xE8B0, 0x748C, 0xAD4B, 0x748D, 0xAD4C, 0x748E, 0xE8AC, 0x748F, 0xAD4D, 0x7490, 0xE8B4, 0x7491, 0xAD4E, 0x7492, 0xAD4F, + 0x7493, 0xAD50, 0x7494, 0xAD51, 0x7495, 0xAD52, 0x7496, 0xAD53, 0x7497, 0xAD54, 0x7498, 0xAD55, 0x7499, 0xAD56, 0x749A, 0xAD57, + 0x749B, 0xAD58, 0x749C, 0xE8AB, 0x749D, 0xAD59, 0x749E, 0xE8B1, 0x749F, 0xAD5A, 0x74A0, 0xAD5B, 0x74A1, 0xAD5C, 0x74A2, 0xAD5D, + 0x74A3, 0xAD5E, 0x74A4, 0xAD5F, 0x74A5, 0xAD60, 0x74A6, 0xAD61, 0x74A7, 0xE8B5, 0x74A8, 0xE8B2, 0x74A9, 0xE8B3, 0x74AA, 0xAD62, + 0x74AB, 0xAD63, 0x74AC, 0xAD64, 0x74AD, 0xAD65, 0x74AE, 0xAD66, 0x74AF, 0xAD67, 0x74B0, 0xAD68, 0x74B1, 0xAD69, 0x74B2, 0xAD6A, + 0x74B3, 0xAD6B, 0x74B4, 0xAD6C, 0x74B5, 0xAD6D, 0x74B6, 0xAD6E, 0x74B7, 0xAD6F, 0x74B8, 0xAD70, 0x74B9, 0xAD71, 0x74BA, 0xE8B7, + 0x74BB, 0xAD72, 0x74BC, 0xAD73, 0x74BD, 0xAD74, 0x74BE, 0xAD75, 0x74BF, 0xAD76, 0x74C0, 0xAD77, 0x74C1, 0xAD78, 0x74C2, 0xAD79, + 0x74C3, 0xAD7A, 0x74C4, 0xAD7B, 0x74C5, 0xAD7C, 0x74C6, 0xAD7D, 0x74C7, 0xAD7E, 0x74C8, 0xAD80, 0x74C9, 0xAD81, 0x74CA, 0xAD82, + 0x74CB, 0xAD83, 0x74CC, 0xAD84, 0x74CD, 0xAD85, 0x74CE, 0xAD86, 0x74CF, 0xAD87, 0x74D0, 0xAD88, 0x74D1, 0xAD89, 0x74D2, 0xE8B6, + 0x74D3, 0xAD8A, 0x74D4, 0xAD8B, 0x74D5, 0xAD8C, 0x74D6, 0xAD8D, 0x74D7, 0xAD8E, 0x74D8, 0xAD8F, 0x74D9, 0xAD90, 0x74DA, 0xAD91, + 0x74DB, 0xAD92, 0x74DC, 0xB9CF, 0x74DD, 0xAD93, 0x74DE, 0xF0AC, 0x74DF, 0xAD94, 0x74E0, 0xF0AD, 0x74E1, 0xAD95, 0x74E2, 0xC6B0, + 0x74E3, 0xB0EA, 0x74E4, 0xC8BF, 0x74E5, 0xAD96, 0x74E6, 0xCDDF, 0x74E7, 0xAD97, 0x74E8, 0xAD98, 0x74E9, 0xAD99, 0x74EA, 0xAD9A, + 0x74EB, 0xAD9B, 0x74EC, 0xAD9C, 0x74ED, 0xAD9D, 0x74EE, 0xCECD, 0x74EF, 0xEAB1, 0x74F0, 0xAD9E, 0x74F1, 0xAD9F, 0x74F2, 0xADA0, + 0x74F3, 0xAE40, 0x74F4, 0xEAB2, 0x74F5, 0xAE41, 0x74F6, 0xC6BF, 0x74F7, 0xB4C9, 0x74F8, 0xAE42, 0x74F9, 0xAE43, 0x74FA, 0xAE44, + 0x74FB, 0xAE45, 0x74FC, 0xAE46, 0x74FD, 0xAE47, 0x74FE, 0xAE48, 0x74FF, 0xEAB3, 0x7500, 0xAE49, 0x7501, 0xAE4A, 0x7502, 0xAE4B, + 0x7503, 0xAE4C, 0x7504, 0xD5E7, 0x7505, 0xAE4D, 0x7506, 0xAE4E, 0x7507, 0xAE4F, 0x7508, 0xAE50, 0x7509, 0xAE51, 0x750A, 0xAE52, + 0x750B, 0xAE53, 0x750C, 0xAE54, 0x750D, 0xDDF9, 0x750E, 0xAE55, 0x750F, 0xEAB4, 0x7510, 0xAE56, 0x7511, 0xEAB5, 0x7512, 0xAE57, + 0x7513, 0xEAB6, 0x7514, 0xAE58, 0x7515, 0xAE59, 0x7516, 0xAE5A, 0x7517, 0xAE5B, 0x7518, 0xB8CA, 0x7519, 0xDFB0, 0x751A, 0xC9F5, + 0x751B, 0xAE5C, 0x751C, 0xCCF0, 0x751D, 0xAE5D, 0x751E, 0xAE5E, 0x751F, 0xC9FA, 0x7520, 0xAE5F, 0x7521, 0xAE60, 0x7522, 0xAE61, + 0x7523, 0xAE62, 0x7524, 0xAE63, 0x7525, 0xC9FB, 0x7526, 0xAE64, 0x7527, 0xAE65, 0x7528, 0xD3C3, 0x7529, 0xCBA6, 0x752A, 0xAE66, + 0x752B, 0xB8A6, 0x752C, 0xF0AE, 0x752D, 0xB1C2, 0x752E, 0xAE67, 0x752F, 0xE5B8, 0x7530, 0xCCEF, 0x7531, 0xD3C9, 0x7532, 0xBCD7, + 0x7533, 0xC9EA, 0x7534, 0xAE68, 0x7535, 0xB5E7, 0x7536, 0xAE69, 0x7537, 0xC4D0, 0x7538, 0xB5E9, 0x7539, 0xAE6A, 0x753A, 0xEEAE, + 0x753B, 0xBBAD, 0x753C, 0xAE6B, 0x753D, 0xAE6C, 0x753E, 0xE7DE, 0x753F, 0xAE6D, 0x7540, 0xEEAF, 0x7541, 0xAE6E, 0x7542, 0xAE6F, + 0x7543, 0xAE70, 0x7544, 0xAE71, 0x7545, 0xB3A9, 0x7546, 0xAE72, 0x7547, 0xAE73, 0x7548, 0xEEB2, 0x7549, 0xAE74, 0x754A, 0xAE75, + 0x754B, 0xEEB1, 0x754C, 0xBDE7, 0x754D, 0xAE76, 0x754E, 0xEEB0, 0x754F, 0xCEB7, 0x7550, 0xAE77, 0x7551, 0xAE78, 0x7552, 0xAE79, + 0x7553, 0xAE7A, 0x7554, 0xC5CF, 0x7555, 0xAE7B, 0x7556, 0xAE7C, 0x7557, 0xAE7D, 0x7558, 0xAE7E, 0x7559, 0xC1F4, 0x755A, 0xDBCE, + 0x755B, 0xEEB3, 0x755C, 0xD0F3, 0x755D, 0xAE80, 0x755E, 0xAE81, 0x755F, 0xAE82, 0x7560, 0xAE83, 0x7561, 0xAE84, 0x7562, 0xAE85, + 0x7563, 0xAE86, 0x7564, 0xAE87, 0x7565, 0xC2D4, 0x7566, 0xC6E8, 0x7567, 0xAE88, 0x7568, 0xAE89, 0x7569, 0xAE8A, 0x756A, 0xB7AC, + 0x756B, 0xAE8B, 0x756C, 0xAE8C, 0x756D, 0xAE8D, 0x756E, 0xAE8E, 0x756F, 0xAE8F, 0x7570, 0xAE90, 0x7571, 0xAE91, 0x7572, 0xEEB4, + 0x7573, 0xAE92, 0x7574, 0xB3EB, 0x7575, 0xAE93, 0x7576, 0xAE94, 0x7577, 0xAE95, 0x7578, 0xBBFB, 0x7579, 0xEEB5, 0x757A, 0xAE96, + 0x757B, 0xAE97, 0x757C, 0xAE98, 0x757D, 0xAE99, 0x757E, 0xAE9A, 0x757F, 0xE7DC, 0x7580, 0xAE9B, 0x7581, 0xAE9C, 0x7582, 0xAE9D, + 0x7583, 0xEEB6, 0x7584, 0xAE9E, 0x7585, 0xAE9F, 0x7586, 0xBDAE, 0x7587, 0xAEA0, 0x7588, 0xAF40, 0x7589, 0xAF41, 0x758A, 0xAF42, + 0x758B, 0xF1E2, 0x758C, 0xAF43, 0x758D, 0xAF44, 0x758E, 0xAF45, 0x758F, 0xCAE8, 0x7590, 0xAF46, 0x7591, 0xD2C9, 0x7592, 0xF0DA, + 0x7593, 0xAF47, 0x7594, 0xF0DB, 0x7595, 0xAF48, 0x7596, 0xF0DC, 0x7597, 0xC1C6, 0x7598, 0xAF49, 0x7599, 0xB8ED, 0x759A, 0xBECE, + 0x759B, 0xAF4A, 0x759C, 0xAF4B, 0x759D, 0xF0DE, 0x759E, 0xAF4C, 0x759F, 0xC5B1, 0x75A0, 0xF0DD, 0x75A1, 0xD1F1, 0x75A2, 0xAF4D, + 0x75A3, 0xF0E0, 0x75A4, 0xB0CC, 0x75A5, 0xBDEA, 0x75A6, 0xAF4E, 0x75A7, 0xAF4F, 0x75A8, 0xAF50, 0x75A9, 0xAF51, 0x75AA, 0xAF52, + 0x75AB, 0xD2DF, 0x75AC, 0xF0DF, 0x75AD, 0xAF53, 0x75AE, 0xB4AF, 0x75AF, 0xB7E8, 0x75B0, 0xF0E6, 0x75B1, 0xF0E5, 0x75B2, 0xC6A3, + 0x75B3, 0xF0E1, 0x75B4, 0xF0E2, 0x75B5, 0xB4C3, 0x75B6, 0xAF54, 0x75B7, 0xAF55, 0x75B8, 0xF0E3, 0x75B9, 0xD5EE, 0x75BA, 0xAF56, + 0x75BB, 0xAF57, 0x75BC, 0xCCDB, 0x75BD, 0xBED2, 0x75BE, 0xBCB2, 0x75BF, 0xAF58, 0x75C0, 0xAF59, 0x75C1, 0xAF5A, 0x75C2, 0xF0E8, + 0x75C3, 0xF0E7, 0x75C4, 0xF0E4, 0x75C5, 0xB2A1, 0x75C6, 0xAF5B, 0x75C7, 0xD6A2, 0x75C8, 0xD3B8, 0x75C9, 0xBEB7, 0x75CA, 0xC8AC, + 0x75CB, 0xAF5C, 0x75CC, 0xAF5D, 0x75CD, 0xF0EA, 0x75CE, 0xAF5E, 0x75CF, 0xAF5F, 0x75D0, 0xAF60, 0x75D1, 0xAF61, 0x75D2, 0xD1F7, + 0x75D3, 0xAF62, 0x75D4, 0xD6CC, 0x75D5, 0xBADB, 0x75D6, 0xF0E9, 0x75D7, 0xAF63, 0x75D8, 0xB6BB, 0x75D9, 0xAF64, 0x75DA, 0xAF65, + 0x75DB, 0xCDB4, 0x75DC, 0xAF66, 0x75DD, 0xAF67, 0x75DE, 0xC6A6, 0x75DF, 0xAF68, 0x75E0, 0xAF69, 0x75E1, 0xAF6A, 0x75E2, 0xC1A1, + 0x75E3, 0xF0EB, 0x75E4, 0xF0EE, 0x75E5, 0xAF6B, 0x75E6, 0xF0ED, 0x75E7, 0xF0F0, 0x75E8, 0xF0EC, 0x75E9, 0xAF6C, 0x75EA, 0xBBBE, + 0x75EB, 0xF0EF, 0x75EC, 0xAF6D, 0x75ED, 0xAF6E, 0x75EE, 0xAF6F, 0x75EF, 0xAF70, 0x75F0, 0xCCB5, 0x75F1, 0xF0F2, 0x75F2, 0xAF71, + 0x75F3, 0xAF72, 0x75F4, 0xB3D5, 0x75F5, 0xAF73, 0x75F6, 0xAF74, 0x75F7, 0xAF75, 0x75F8, 0xAF76, 0x75F9, 0xB1D4, 0x75FA, 0xAF77, + 0x75FB, 0xAF78, 0x75FC, 0xF0F3, 0x75FD, 0xAF79, 0x75FE, 0xAF7A, 0x75FF, 0xF0F4, 0x7600, 0xF0F6, 0x7601, 0xB4E1, 0x7602, 0xAF7B, + 0x7603, 0xF0F1, 0x7604, 0xAF7C, 0x7605, 0xF0F7, 0x7606, 0xAF7D, 0x7607, 0xAF7E, 0x7608, 0xAF80, 0x7609, 0xAF81, 0x760A, 0xF0FA, + 0x760B, 0xAF82, 0x760C, 0xF0F8, 0x760D, 0xAF83, 0x760E, 0xAF84, 0x760F, 0xAF85, 0x7610, 0xF0F5, 0x7611, 0xAF86, 0x7612, 0xAF87, + 0x7613, 0xAF88, 0x7614, 0xAF89, 0x7615, 0xF0FD, 0x7616, 0xAF8A, 0x7617, 0xF0F9, 0x7618, 0xF0FC, 0x7619, 0xF0FE, 0x761A, 0xAF8B, + 0x761B, 0xF1A1, 0x761C, 0xAF8C, 0x761D, 0xAF8D, 0x761E, 0xAF8E, 0x761F, 0xCEC1, 0x7620, 0xF1A4, 0x7621, 0xAF8F, 0x7622, 0xF1A3, + 0x7623, 0xAF90, 0x7624, 0xC1F6, 0x7625, 0xF0FB, 0x7626, 0xCADD, 0x7627, 0xAF91, 0x7628, 0xAF92, 0x7629, 0xB4F1, 0x762A, 0xB1F1, + 0x762B, 0xCCB1, 0x762C, 0xAF93, 0x762D, 0xF1A6, 0x762E, 0xAF94, 0x762F, 0xAF95, 0x7630, 0xF1A7, 0x7631, 0xAF96, 0x7632, 0xAF97, + 0x7633, 0xF1AC, 0x7634, 0xD5CE, 0x7635, 0xF1A9, 0x7636, 0xAF98, 0x7637, 0xAF99, 0x7638, 0xC8B3, 0x7639, 0xAF9A, 0x763A, 0xAF9B, + 0x763B, 0xAF9C, 0x763C, 0xF1A2, 0x763D, 0xAF9D, 0x763E, 0xF1AB, 0x763F, 0xF1A8, 0x7640, 0xF1A5, 0x7641, 0xAF9E, 0x7642, 0xAF9F, + 0x7643, 0xF1AA, 0x7644, 0xAFA0, 0x7645, 0xB040, 0x7646, 0xB041, 0x7647, 0xB042, 0x7648, 0xB043, 0x7649, 0xB044, 0x764A, 0xB045, + 0x764B, 0xB046, 0x764C, 0xB0A9, 0x764D, 0xF1AD, 0x764E, 0xB047, 0x764F, 0xB048, 0x7650, 0xB049, 0x7651, 0xB04A, 0x7652, 0xB04B, + 0x7653, 0xB04C, 0x7654, 0xF1AF, 0x7655, 0xB04D, 0x7656, 0xF1B1, 0x7657, 0xB04E, 0x7658, 0xB04F, 0x7659, 0xB050, 0x765A, 0xB051, + 0x765B, 0xB052, 0x765C, 0xF1B0, 0x765D, 0xB053, 0x765E, 0xF1AE, 0x765F, 0xB054, 0x7660, 0xB055, 0x7661, 0xB056, 0x7662, 0xB057, + 0x7663, 0xD1A2, 0x7664, 0xB058, 0x7665, 0xB059, 0x7666, 0xB05A, 0x7667, 0xB05B, 0x7668, 0xB05C, 0x7669, 0xB05D, 0x766A, 0xB05E, + 0x766B, 0xF1B2, 0x766C, 0xB05F, 0x766D, 0xB060, 0x766E, 0xB061, 0x766F, 0xF1B3, 0x7670, 0xB062, 0x7671, 0xB063, 0x7672, 0xB064, + 0x7673, 0xB065, 0x7674, 0xB066, 0x7675, 0xB067, 0x7676, 0xB068, 0x7677, 0xB069, 0x7678, 0xB9EF, 0x7679, 0xB06A, 0x767A, 0xB06B, + 0x767B, 0xB5C7, 0x767C, 0xB06C, 0x767D, 0xB0D7, 0x767E, 0xB0D9, 0x767F, 0xB06D, 0x7680, 0xB06E, 0x7681, 0xB06F, 0x7682, 0xD4ED, + 0x7683, 0xB070, 0x7684, 0xB5C4, 0x7685, 0xB071, 0x7686, 0xBDD4, 0x7687, 0xBBCA, 0x7688, 0xF0A7, 0x7689, 0xB072, 0x768A, 0xB073, + 0x768B, 0xB8DE, 0x768C, 0xB074, 0x768D, 0xB075, 0x768E, 0xF0A8, 0x768F, 0xB076, 0x7690, 0xB077, 0x7691, 0xB0A8, 0x7692, 0xB078, + 0x7693, 0xF0A9, 0x7694, 0xB079, 0x7695, 0xB07A, 0x7696, 0xCDEE, 0x7697, 0xB07B, 0x7698, 0xB07C, 0x7699, 0xF0AA, 0x769A, 0xB07D, + 0x769B, 0xB07E, 0x769C, 0xB080, 0x769D, 0xB081, 0x769E, 0xB082, 0x769F, 0xB083, 0x76A0, 0xB084, 0x76A1, 0xB085, 0x76A2, 0xB086, + 0x76A3, 0xB087, 0x76A4, 0xF0AB, 0x76A5, 0xB088, 0x76A6, 0xB089, 0x76A7, 0xB08A, 0x76A8, 0xB08B, 0x76A9, 0xB08C, 0x76AA, 0xB08D, + 0x76AB, 0xB08E, 0x76AC, 0xB08F, 0x76AD, 0xB090, 0x76AE, 0xC6A4, 0x76AF, 0xB091, 0x76B0, 0xB092, 0x76B1, 0xD6E5, 0x76B2, 0xF1E4, + 0x76B3, 0xB093, 0x76B4, 0xF1E5, 0x76B5, 0xB094, 0x76B6, 0xB095, 0x76B7, 0xB096, 0x76B8, 0xB097, 0x76B9, 0xB098, 0x76BA, 0xB099, + 0x76BB, 0xB09A, 0x76BC, 0xB09B, 0x76BD, 0xB09C, 0x76BE, 0xB09D, 0x76BF, 0xC3F3, 0x76C0, 0xB09E, 0x76C1, 0xB09F, 0x76C2, 0xD3DB, + 0x76C3, 0xB0A0, 0x76C4, 0xB140, 0x76C5, 0xD6D1, 0x76C6, 0xC5E8, 0x76C7, 0xB141, 0x76C8, 0xD3AF, 0x76C9, 0xB142, 0x76CA, 0xD2E6, + 0x76CB, 0xB143, 0x76CC, 0xB144, 0x76CD, 0xEEC1, 0x76CE, 0xB0BB, 0x76CF, 0xD5B5, 0x76D0, 0xD1CE, 0x76D1, 0xBCE0, 0x76D2, 0xBAD0, + 0x76D3, 0xB145, 0x76D4, 0xBFF8, 0x76D5, 0xB146, 0x76D6, 0xB8C7, 0x76D7, 0xB5C1, 0x76D8, 0xC5CC, 0x76D9, 0xB147, 0x76DA, 0xB148, + 0x76DB, 0xCAA2, 0x76DC, 0xB149, 0x76DD, 0xB14A, 0x76DE, 0xB14B, 0x76DF, 0xC3CB, 0x76E0, 0xB14C, 0x76E1, 0xB14D, 0x76E2, 0xB14E, + 0x76E3, 0xB14F, 0x76E4, 0xB150, 0x76E5, 0xEEC2, 0x76E6, 0xB151, 0x76E7, 0xB152, 0x76E8, 0xB153, 0x76E9, 0xB154, 0x76EA, 0xB155, + 0x76EB, 0xB156, 0x76EC, 0xB157, 0x76ED, 0xB158, 0x76EE, 0xC4BF, 0x76EF, 0xB6A2, 0x76F0, 0xB159, 0x76F1, 0xEDEC, 0x76F2, 0xC3A4, + 0x76F3, 0xB15A, 0x76F4, 0xD6B1, 0x76F5, 0xB15B, 0x76F6, 0xB15C, 0x76F7, 0xB15D, 0x76F8, 0xCFE0, 0x76F9, 0xEDEF, 0x76FA, 0xB15E, + 0x76FB, 0xB15F, 0x76FC, 0xC5CE, 0x76FD, 0xB160, 0x76FE, 0xB6DC, 0x76FF, 0xB161, 0x7700, 0xB162, 0x7701, 0xCAA1, 0x7702, 0xB163, + 0x7703, 0xB164, 0x7704, 0xEDED, 0x7705, 0xB165, 0x7706, 0xB166, 0x7707, 0xEDF0, 0x7708, 0xEDF1, 0x7709, 0xC3BC, 0x770A, 0xB167, + 0x770B, 0xBFB4, 0x770C, 0xB168, 0x770D, 0xEDEE, 0x770E, 0xB169, 0x770F, 0xB16A, 0x7710, 0xB16B, 0x7711, 0xB16C, 0x7712, 0xB16D, + 0x7713, 0xB16E, 0x7714, 0xB16F, 0x7715, 0xB170, 0x7716, 0xB171, 0x7717, 0xB172, 0x7718, 0xB173, 0x7719, 0xEDF4, 0x771A, 0xEDF2, + 0x771B, 0xB174, 0x771C, 0xB175, 0x771D, 0xB176, 0x771E, 0xB177, 0x771F, 0xD5E6, 0x7720, 0xC3DF, 0x7721, 0xB178, 0x7722, 0xEDF3, + 0x7723, 0xB179, 0x7724, 0xB17A, 0x7725, 0xB17B, 0x7726, 0xEDF6, 0x7727, 0xB17C, 0x7728, 0xD5A3, 0x7729, 0xD1A3, 0x772A, 0xB17D, + 0x772B, 0xB17E, 0x772C, 0xB180, 0x772D, 0xEDF5, 0x772E, 0xB181, 0x772F, 0xC3D0, 0x7730, 0xB182, 0x7731, 0xB183, 0x7732, 0xB184, + 0x7733, 0xB185, 0x7734, 0xB186, 0x7735, 0xEDF7, 0x7736, 0xBFF4, 0x7737, 0xBEEC, 0x7738, 0xEDF8, 0x7739, 0xB187, 0x773A, 0xCCF7, + 0x773B, 0xB188, 0x773C, 0xD1DB, 0x773D, 0xB189, 0x773E, 0xB18A, 0x773F, 0xB18B, 0x7740, 0xD7C5, 0x7741, 0xD5F6, 0x7742, 0xB18C, + 0x7743, 0xEDFC, 0x7744, 0xB18D, 0x7745, 0xB18E, 0x7746, 0xB18F, 0x7747, 0xEDFB, 0x7748, 0xB190, 0x7749, 0xB191, 0x774A, 0xB192, + 0x774B, 0xB193, 0x774C, 0xB194, 0x774D, 0xB195, 0x774E, 0xB196, 0x774F, 0xB197, 0x7750, 0xEDF9, 0x7751, 0xEDFA, 0x7752, 0xB198, + 0x7753, 0xB199, 0x7754, 0xB19A, 0x7755, 0xB19B, 0x7756, 0xB19C, 0x7757, 0xB19D, 0x7758, 0xB19E, 0x7759, 0xB19F, 0x775A, 0xEDFD, + 0x775B, 0xBEA6, 0x775C, 0xB1A0, 0x775D, 0xB240, 0x775E, 0xB241, 0x775F, 0xB242, 0x7760, 0xB243, 0x7761, 0xCBAF, 0x7762, 0xEEA1, + 0x7763, 0xB6BD, 0x7764, 0xB244, 0x7765, 0xEEA2, 0x7766, 0xC4C0, 0x7767, 0xB245, 0x7768, 0xEDFE, 0x7769, 0xB246, 0x776A, 0xB247, + 0x776B, 0xBDDE, 0x776C, 0xB2C7, 0x776D, 0xB248, 0x776E, 0xB249, 0x776F, 0xB24A, 0x7770, 0xB24B, 0x7771, 0xB24C, 0x7772, 0xB24D, + 0x7773, 0xB24E, 0x7774, 0xB24F, 0x7775, 0xB250, 0x7776, 0xB251, 0x7777, 0xB252, 0x7778, 0xB253, 0x7779, 0xB6C3, 0x777A, 0xB254, + 0x777B, 0xB255, 0x777C, 0xB256, 0x777D, 0xEEA5, 0x777E, 0xD8BA, 0x777F, 0xEEA3, 0x7780, 0xEEA6, 0x7781, 0xB257, 0x7782, 0xB258, + 0x7783, 0xB259, 0x7784, 0xC3E9, 0x7785, 0xB3F2, 0x7786, 0xB25A, 0x7787, 0xB25B, 0x7788, 0xB25C, 0x7789, 0xB25D, 0x778A, 0xB25E, + 0x778B, 0xB25F, 0x778C, 0xEEA7, 0x778D, 0xEEA4, 0x778E, 0xCFB9, 0x778F, 0xB260, 0x7790, 0xB261, 0x7791, 0xEEA8, 0x7792, 0xC2F7, + 0x7793, 0xB262, 0x7794, 0xB263, 0x7795, 0xB264, 0x7796, 0xB265, 0x7797, 0xB266, 0x7798, 0xB267, 0x7799, 0xB268, 0x779A, 0xB269, + 0x779B, 0xB26A, 0x779C, 0xB26B, 0x779D, 0xB26C, 0x779E, 0xB26D, 0x779F, 0xEEA9, 0x77A0, 0xEEAA, 0x77A1, 0xB26E, 0x77A2, 0xDEAB, + 0x77A3, 0xB26F, 0x77A4, 0xB270, 0x77A5, 0xC6B3, 0x77A6, 0xB271, 0x77A7, 0xC7C6, 0x77A8, 0xB272, 0x77A9, 0xD6F5, 0x77AA, 0xB5C9, + 0x77AB, 0xB273, 0x77AC, 0xCBB2, 0x77AD, 0xB274, 0x77AE, 0xB275, 0x77AF, 0xB276, 0x77B0, 0xEEAB, 0x77B1, 0xB277, 0x77B2, 0xB278, + 0x77B3, 0xCDAB, 0x77B4, 0xB279, 0x77B5, 0xEEAC, 0x77B6, 0xB27A, 0x77B7, 0xB27B, 0x77B8, 0xB27C, 0x77B9, 0xB27D, 0x77BA, 0xB27E, + 0x77BB, 0xD5B0, 0x77BC, 0xB280, 0x77BD, 0xEEAD, 0x77BE, 0xB281, 0x77BF, 0xF6C4, 0x77C0, 0xB282, 0x77C1, 0xB283, 0x77C2, 0xB284, + 0x77C3, 0xB285, 0x77C4, 0xB286, 0x77C5, 0xB287, 0x77C6, 0xB288, 0x77C7, 0xB289, 0x77C8, 0xB28A, 0x77C9, 0xB28B, 0x77CA, 0xB28C, + 0x77CB, 0xB28D, 0x77CC, 0xB28E, 0x77CD, 0xDBC7, 0x77CE, 0xB28F, 0x77CF, 0xB290, 0x77D0, 0xB291, 0x77D1, 0xB292, 0x77D2, 0xB293, + 0x77D3, 0xB294, 0x77D4, 0xB295, 0x77D5, 0xB296, 0x77D6, 0xB297, 0x77D7, 0xB4A3, 0x77D8, 0xB298, 0x77D9, 0xB299, 0x77DA, 0xB29A, + 0x77DB, 0xC3AC, 0x77DC, 0xF1E6, 0x77DD, 0xB29B, 0x77DE, 0xB29C, 0x77DF, 0xB29D, 0x77E0, 0xB29E, 0x77E1, 0xB29F, 0x77E2, 0xCAB8, + 0x77E3, 0xD2D3, 0x77E4, 0xB2A0, 0x77E5, 0xD6AA, 0x77E6, 0xB340, 0x77E7, 0xEFF2, 0x77E8, 0xB341, 0x77E9, 0xBED8, 0x77EA, 0xB342, + 0x77EB, 0xBDC3, 0x77EC, 0xEFF3, 0x77ED, 0xB6CC, 0x77EE, 0xB0AB, 0x77EF, 0xB343, 0x77F0, 0xB344, 0x77F1, 0xB345, 0x77F2, 0xB346, + 0x77F3, 0xCAAF, 0x77F4, 0xB347, 0x77F5, 0xB348, 0x77F6, 0xEDB6, 0x77F7, 0xB349, 0x77F8, 0xEDB7, 0x77F9, 0xB34A, 0x77FA, 0xB34B, + 0x77FB, 0xB34C, 0x77FC, 0xB34D, 0x77FD, 0xCEF9, 0x77FE, 0xB7AF, 0x77FF, 0xBFF3, 0x7800, 0xEDB8, 0x7801, 0xC2EB, 0x7802, 0xC9B0, + 0x7803, 0xB34E, 0x7804, 0xB34F, 0x7805, 0xB350, 0x7806, 0xB351, 0x7807, 0xB352, 0x7808, 0xB353, 0x7809, 0xEDB9, 0x780A, 0xB354, + 0x780B, 0xB355, 0x780C, 0xC6F6, 0x780D, 0xBFB3, 0x780E, 0xB356, 0x780F, 0xB357, 0x7810, 0xB358, 0x7811, 0xEDBC, 0x7812, 0xC5F8, + 0x7813, 0xB359, 0x7814, 0xD1D0, 0x7815, 0xB35A, 0x7816, 0xD7A9, 0x7817, 0xEDBA, 0x7818, 0xEDBB, 0x7819, 0xB35B, 0x781A, 0xD1E2, + 0x781B, 0xB35C, 0x781C, 0xEDBF, 0x781D, 0xEDC0, 0x781E, 0xB35D, 0x781F, 0xEDC4, 0x7820, 0xB35E, 0x7821, 0xB35F, 0x7822, 0xB360, + 0x7823, 0xEDC8, 0x7824, 0xB361, 0x7825, 0xEDC6, 0x7826, 0xEDCE, 0x7827, 0xD5E8, 0x7828, 0xB362, 0x7829, 0xEDC9, 0x782A, 0xB363, + 0x782B, 0xB364, 0x782C, 0xEDC7, 0x782D, 0xEDBE, 0x782E, 0xB365, 0x782F, 0xB366, 0x7830, 0xC5E9, 0x7831, 0xB367, 0x7832, 0xB368, + 0x7833, 0xB369, 0x7834, 0xC6C6, 0x7835, 0xB36A, 0x7836, 0xB36B, 0x7837, 0xC9E9, 0x7838, 0xD4D2, 0x7839, 0xEDC1, 0x783A, 0xEDC2, + 0x783B, 0xEDC3, 0x783C, 0xEDC5, 0x783D, 0xB36C, 0x783E, 0xC0F9, 0x783F, 0xB36D, 0x7840, 0xB4A1, 0x7841, 0xB36E, 0x7842, 0xB36F, + 0x7843, 0xB370, 0x7844, 0xB371, 0x7845, 0xB9E8, 0x7846, 0xB372, 0x7847, 0xEDD0, 0x7848, 0xB373, 0x7849, 0xB374, 0x784A, 0xB375, + 0x784B, 0xB376, 0x784C, 0xEDD1, 0x784D, 0xB377, 0x784E, 0xEDCA, 0x784F, 0xB378, 0x7850, 0xEDCF, 0x7851, 0xB379, 0x7852, 0xCEF8, + 0x7853, 0xB37A, 0x7854, 0xB37B, 0x7855, 0xCBB6, 0x7856, 0xEDCC, 0x7857, 0xEDCD, 0x7858, 0xB37C, 0x7859, 0xB37D, 0x785A, 0xB37E, + 0x785B, 0xB380, 0x785C, 0xB381, 0x785D, 0xCFF5, 0x785E, 0xB382, 0x785F, 0xB383, 0x7860, 0xB384, 0x7861, 0xB385, 0x7862, 0xB386, + 0x7863, 0xB387, 0x7864, 0xB388, 0x7865, 0xB389, 0x7866, 0xB38A, 0x7867, 0xB38B, 0x7868, 0xB38C, 0x7869, 0xB38D, 0x786A, 0xEDD2, + 0x786B, 0xC1F2, 0x786C, 0xD3B2, 0x786D, 0xEDCB, 0x786E, 0xC8B7, 0x786F, 0xB38E, 0x7870, 0xB38F, 0x7871, 0xB390, 0x7872, 0xB391, + 0x7873, 0xB392, 0x7874, 0xB393, 0x7875, 0xB394, 0x7876, 0xB395, 0x7877, 0xBCEF, 0x7878, 0xB396, 0x7879, 0xB397, 0x787A, 0xB398, + 0x787B, 0xB399, 0x787C, 0xC5F0, 0x787D, 0xB39A, 0x787E, 0xB39B, 0x787F, 0xB39C, 0x7880, 0xB39D, 0x7881, 0xB39E, 0x7882, 0xB39F, + 0x7883, 0xB3A0, 0x7884, 0xB440, 0x7885, 0xB441, 0x7886, 0xB442, 0x7887, 0xEDD6, 0x7888, 0xB443, 0x7889, 0xB5EF, 0x788A, 0xB444, + 0x788B, 0xB445, 0x788C, 0xC2B5, 0x788D, 0xB0AD, 0x788E, 0xCBE9, 0x788F, 0xB446, 0x7890, 0xB447, 0x7891, 0xB1AE, 0x7892, 0xB448, + 0x7893, 0xEDD4, 0x7894, 0xB449, 0x7895, 0xB44A, 0x7896, 0xB44B, 0x7897, 0xCDEB, 0x7898, 0xB5E2, 0x7899, 0xB44C, 0x789A, 0xEDD5, + 0x789B, 0xEDD3, 0x789C, 0xEDD7, 0x789D, 0xB44D, 0x789E, 0xB44E, 0x789F, 0xB5FA, 0x78A0, 0xB44F, 0x78A1, 0xEDD8, 0x78A2, 0xB450, + 0x78A3, 0xEDD9, 0x78A4, 0xB451, 0x78A5, 0xEDDC, 0x78A6, 0xB452, 0x78A7, 0xB1CC, 0x78A8, 0xB453, 0x78A9, 0xB454, 0x78AA, 0xB455, + 0x78AB, 0xB456, 0x78AC, 0xB457, 0x78AD, 0xB458, 0x78AE, 0xB459, 0x78AF, 0xB45A, 0x78B0, 0xC5F6, 0x78B1, 0xBCEE, 0x78B2, 0xEDDA, + 0x78B3, 0xCCBC, 0x78B4, 0xB2EA, 0x78B5, 0xB45B, 0x78B6, 0xB45C, 0x78B7, 0xB45D, 0x78B8, 0xB45E, 0x78B9, 0xEDDB, 0x78BA, 0xB45F, + 0x78BB, 0xB460, 0x78BC, 0xB461, 0x78BD, 0xB462, 0x78BE, 0xC4EB, 0x78BF, 0xB463, 0x78C0, 0xB464, 0x78C1, 0xB4C5, 0x78C2, 0xB465, + 0x78C3, 0xB466, 0x78C4, 0xB467, 0x78C5, 0xB0F5, 0x78C6, 0xB468, 0x78C7, 0xB469, 0x78C8, 0xB46A, 0x78C9, 0xEDDF, 0x78CA, 0xC0DA, + 0x78CB, 0xB4E8, 0x78CC, 0xB46B, 0x78CD, 0xB46C, 0x78CE, 0xB46D, 0x78CF, 0xB46E, 0x78D0, 0xC5CD, 0x78D1, 0xB46F, 0x78D2, 0xB470, + 0x78D3, 0xB471, 0x78D4, 0xEDDD, 0x78D5, 0xBFC4, 0x78D6, 0xB472, 0x78D7, 0xB473, 0x78D8, 0xB474, 0x78D9, 0xEDDE, 0x78DA, 0xB475, + 0x78DB, 0xB476, 0x78DC, 0xB477, 0x78DD, 0xB478, 0x78DE, 0xB479, 0x78DF, 0xB47A, 0x78E0, 0xB47B, 0x78E1, 0xB47C, 0x78E2, 0xB47D, + 0x78E3, 0xB47E, 0x78E4, 0xB480, 0x78E5, 0xB481, 0x78E6, 0xB482, 0x78E7, 0xB483, 0x78E8, 0xC4A5, 0x78E9, 0xB484, 0x78EA, 0xB485, + 0x78EB, 0xB486, 0x78EC, 0xEDE0, 0x78ED, 0xB487, 0x78EE, 0xB488, 0x78EF, 0xB489, 0x78F0, 0xB48A, 0x78F1, 0xB48B, 0x78F2, 0xEDE1, + 0x78F3, 0xB48C, 0x78F4, 0xEDE3, 0x78F5, 0xB48D, 0x78F6, 0xB48E, 0x78F7, 0xC1D7, 0x78F8, 0xB48F, 0x78F9, 0xB490, 0x78FA, 0xBBC7, + 0x78FB, 0xB491, 0x78FC, 0xB492, 0x78FD, 0xB493, 0x78FE, 0xB494, 0x78FF, 0xB495, 0x7900, 0xB496, 0x7901, 0xBDB8, 0x7902, 0xB497, + 0x7903, 0xB498, 0x7904, 0xB499, 0x7905, 0xEDE2, 0x7906, 0xB49A, 0x7907, 0xB49B, 0x7908, 0xB49C, 0x7909, 0xB49D, 0x790A, 0xB49E, + 0x790B, 0xB49F, 0x790C, 0xB4A0, 0x790D, 0xB540, 0x790E, 0xB541, 0x790F, 0xB542, 0x7910, 0xB543, 0x7911, 0xB544, 0x7912, 0xB545, + 0x7913, 0xEDE4, 0x7914, 0xB546, 0x7915, 0xB547, 0x7916, 0xB548, 0x7917, 0xB549, 0x7918, 0xB54A, 0x7919, 0xB54B, 0x791A, 0xB54C, + 0x791B, 0xB54D, 0x791C, 0xB54E, 0x791D, 0xB54F, 0x791E, 0xEDE6, 0x791F, 0xB550, 0x7920, 0xB551, 0x7921, 0xB552, 0x7922, 0xB553, + 0x7923, 0xB554, 0x7924, 0xEDE5, 0x7925, 0xB555, 0x7926, 0xB556, 0x7927, 0xB557, 0x7928, 0xB558, 0x7929, 0xB559, 0x792A, 0xB55A, + 0x792B, 0xB55B, 0x792C, 0xB55C, 0x792D, 0xB55D, 0x792E, 0xB55E, 0x792F, 0xB55F, 0x7930, 0xB560, 0x7931, 0xB561, 0x7932, 0xB562, + 0x7933, 0xB563, 0x7934, 0xEDE7, 0x7935, 0xB564, 0x7936, 0xB565, 0x7937, 0xB566, 0x7938, 0xB567, 0x7939, 0xB568, 0x793A, 0xCABE, + 0x793B, 0xECEA, 0x793C, 0xC0F1, 0x793D, 0xB569, 0x793E, 0xC9E7, 0x793F, 0xB56A, 0x7940, 0xECEB, 0x7941, 0xC6EE, 0x7942, 0xB56B, + 0x7943, 0xB56C, 0x7944, 0xB56D, 0x7945, 0xB56E, 0x7946, 0xECEC, 0x7947, 0xB56F, 0x7948, 0xC6ED, 0x7949, 0xECED, 0x794A, 0xB570, + 0x794B, 0xB571, 0x794C, 0xB572, 0x794D, 0xB573, 0x794E, 0xB574, 0x794F, 0xB575, 0x7950, 0xB576, 0x7951, 0xB577, 0x7952, 0xB578, + 0x7953, 0xECF0, 0x7954, 0xB579, 0x7955, 0xB57A, 0x7956, 0xD7E6, 0x7957, 0xECF3, 0x7958, 0xB57B, 0x7959, 0xB57C, 0x795A, 0xECF1, + 0x795B, 0xECEE, 0x795C, 0xECEF, 0x795D, 0xD7A3, 0x795E, 0xC9F1, 0x795F, 0xCBEE, 0x7960, 0xECF4, 0x7961, 0xB57D, 0x7962, 0xECF2, + 0x7963, 0xB57E, 0x7964, 0xB580, 0x7965, 0xCFE9, 0x7966, 0xB581, 0x7967, 0xECF6, 0x7968, 0xC6B1, 0x7969, 0xB582, 0x796A, 0xB583, + 0x796B, 0xB584, 0x796C, 0xB585, 0x796D, 0xBCC0, 0x796E, 0xB586, 0x796F, 0xECF5, 0x7970, 0xB587, 0x7971, 0xB588, 0x7972, 0xB589, + 0x7973, 0xB58A, 0x7974, 0xB58B, 0x7975, 0xB58C, 0x7976, 0xB58D, 0x7977, 0xB5BB, 0x7978, 0xBBF6, 0x7979, 0xB58E, 0x797A, 0xECF7, + 0x797B, 0xB58F, 0x797C, 0xB590, 0x797D, 0xB591, 0x797E, 0xB592, 0x797F, 0xB593, 0x7980, 0xD9F7, 0x7981, 0xBDFB, 0x7982, 0xB594, + 0x7983, 0xB595, 0x7984, 0xC2BB, 0x7985, 0xECF8, 0x7986, 0xB596, 0x7987, 0xB597, 0x7988, 0xB598, 0x7989, 0xB599, 0x798A, 0xECF9, + 0x798B, 0xB59A, 0x798C, 0xB59B, 0x798D, 0xB59C, 0x798E, 0xB59D, 0x798F, 0xB8A3, 0x7990, 0xB59E, 0x7991, 0xB59F, 0x7992, 0xB5A0, + 0x7993, 0xB640, 0x7994, 0xB641, 0x7995, 0xB642, 0x7996, 0xB643, 0x7997, 0xB644, 0x7998, 0xB645, 0x7999, 0xB646, 0x799A, 0xECFA, + 0x799B, 0xB647, 0x799C, 0xB648, 0x799D, 0xB649, 0x799E, 0xB64A, 0x799F, 0xB64B, 0x79A0, 0xB64C, 0x79A1, 0xB64D, 0x79A2, 0xB64E, + 0x79A3, 0xB64F, 0x79A4, 0xB650, 0x79A5, 0xB651, 0x79A6, 0xB652, 0x79A7, 0xECFB, 0x79A8, 0xB653, 0x79A9, 0xB654, 0x79AA, 0xB655, + 0x79AB, 0xB656, 0x79AC, 0xB657, 0x79AD, 0xB658, 0x79AE, 0xB659, 0x79AF, 0xB65A, 0x79B0, 0xB65B, 0x79B1, 0xB65C, 0x79B2, 0xB65D, + 0x79B3, 0xECFC, 0x79B4, 0xB65E, 0x79B5, 0xB65F, 0x79B6, 0xB660, 0x79B7, 0xB661, 0x79B8, 0xB662, 0x79B9, 0xD3ED, 0x79BA, 0xD8AE, + 0x79BB, 0xC0EB, 0x79BC, 0xB663, 0x79BD, 0xC7DD, 0x79BE, 0xBACC, 0x79BF, 0xB664, 0x79C0, 0xD0E3, 0x79C1, 0xCBBD, 0x79C2, 0xB665, + 0x79C3, 0xCDBA, 0x79C4, 0xB666, 0x79C5, 0xB667, 0x79C6, 0xB8D1, 0x79C7, 0xB668, 0x79C8, 0xB669, 0x79C9, 0xB1FC, 0x79CA, 0xB66A, + 0x79CB, 0xC7EF, 0x79CC, 0xB66B, 0x79CD, 0xD6D6, 0x79CE, 0xB66C, 0x79CF, 0xB66D, 0x79D0, 0xB66E, 0x79D1, 0xBFC6, 0x79D2, 0xC3EB, + 0x79D3, 0xB66F, 0x79D4, 0xB670, 0x79D5, 0xEFF5, 0x79D6, 0xB671, 0x79D7, 0xB672, 0x79D8, 0xC3D8, 0x79D9, 0xB673, 0x79DA, 0xB674, + 0x79DB, 0xB675, 0x79DC, 0xB676, 0x79DD, 0xB677, 0x79DE, 0xB678, 0x79DF, 0xD7E2, 0x79E0, 0xB679, 0x79E1, 0xB67A, 0x79E2, 0xB67B, + 0x79E3, 0xEFF7, 0x79E4, 0xB3D3, 0x79E5, 0xB67C, 0x79E6, 0xC7D8, 0x79E7, 0xD1ED, 0x79E8, 0xB67D, 0x79E9, 0xD6C8, 0x79EA, 0xB67E, + 0x79EB, 0xEFF8, 0x79EC, 0xB680, 0x79ED, 0xEFF6, 0x79EE, 0xB681, 0x79EF, 0xBBFD, 0x79F0, 0xB3C6, 0x79F1, 0xB682, 0x79F2, 0xB683, + 0x79F3, 0xB684, 0x79F4, 0xB685, 0x79F5, 0xB686, 0x79F6, 0xB687, 0x79F7, 0xB688, 0x79F8, 0xBDD5, 0x79F9, 0xB689, 0x79FA, 0xB68A, + 0x79FB, 0xD2C6, 0x79FC, 0xB68B, 0x79FD, 0xBBE0, 0x79FE, 0xB68C, 0x79FF, 0xB68D, 0x7A00, 0xCFA1, 0x7A01, 0xB68E, 0x7A02, 0xEFFC, + 0x7A03, 0xEFFB, 0x7A04, 0xB68F, 0x7A05, 0xB690, 0x7A06, 0xEFF9, 0x7A07, 0xB691, 0x7A08, 0xB692, 0x7A09, 0xB693, 0x7A0A, 0xB694, + 0x7A0B, 0xB3CC, 0x7A0C, 0xB695, 0x7A0D, 0xC9D4, 0x7A0E, 0xCBB0, 0x7A0F, 0xB696, 0x7A10, 0xB697, 0x7A11, 0xB698, 0x7A12, 0xB699, + 0x7A13, 0xB69A, 0x7A14, 0xEFFE, 0x7A15, 0xB69B, 0x7A16, 0xB69C, 0x7A17, 0xB0DE, 0x7A18, 0xB69D, 0x7A19, 0xB69E, 0x7A1A, 0xD6C9, + 0x7A1B, 0xB69F, 0x7A1C, 0xB6A0, 0x7A1D, 0xB740, 0x7A1E, 0xEFFD, 0x7A1F, 0xB741, 0x7A20, 0xB3ED, 0x7A21, 0xB742, 0x7A22, 0xB743, + 0x7A23, 0xF6D5, 0x7A24, 0xB744, 0x7A25, 0xB745, 0x7A26, 0xB746, 0x7A27, 0xB747, 0x7A28, 0xB748, 0x7A29, 0xB749, 0x7A2A, 0xB74A, + 0x7A2B, 0xB74B, 0x7A2C, 0xB74C, 0x7A2D, 0xB74D, 0x7A2E, 0xB74E, 0x7A2F, 0xB74F, 0x7A30, 0xB750, 0x7A31, 0xB751, 0x7A32, 0xB752, + 0x7A33, 0xCEC8, 0x7A34, 0xB753, 0x7A35, 0xB754, 0x7A36, 0xB755, 0x7A37, 0xF0A2, 0x7A38, 0xB756, 0x7A39, 0xF0A1, 0x7A3A, 0xB757, + 0x7A3B, 0xB5BE, 0x7A3C, 0xBCDA, 0x7A3D, 0xBBFC, 0x7A3E, 0xB758, 0x7A3F, 0xB8E5, 0x7A40, 0xB759, 0x7A41, 0xB75A, 0x7A42, 0xB75B, + 0x7A43, 0xB75C, 0x7A44, 0xB75D, 0x7A45, 0xB75E, 0x7A46, 0xC4C2, 0x7A47, 0xB75F, 0x7A48, 0xB760, 0x7A49, 0xB761, 0x7A4A, 0xB762, + 0x7A4B, 0xB763, 0x7A4C, 0xB764, 0x7A4D, 0xB765, 0x7A4E, 0xB766, 0x7A4F, 0xB767, 0x7A50, 0xB768, 0x7A51, 0xF0A3, 0x7A52, 0xB769, + 0x7A53, 0xB76A, 0x7A54, 0xB76B, 0x7A55, 0xB76C, 0x7A56, 0xB76D, 0x7A57, 0xCBEB, 0x7A58, 0xB76E, 0x7A59, 0xB76F, 0x7A5A, 0xB770, + 0x7A5B, 0xB771, 0x7A5C, 0xB772, 0x7A5D, 0xB773, 0x7A5E, 0xB774, 0x7A5F, 0xB775, 0x7A60, 0xB776, 0x7A61, 0xB777, 0x7A62, 0xB778, + 0x7A63, 0xB779, 0x7A64, 0xB77A, 0x7A65, 0xB77B, 0x7A66, 0xB77C, 0x7A67, 0xB77D, 0x7A68, 0xB77E, 0x7A69, 0xB780, 0x7A6A, 0xB781, + 0x7A6B, 0xB782, 0x7A6C, 0xB783, 0x7A6D, 0xB784, 0x7A6E, 0xB785, 0x7A6F, 0xB786, 0x7A70, 0xF0A6, 0x7A71, 0xB787, 0x7A72, 0xB788, + 0x7A73, 0xB789, 0x7A74, 0xD1A8, 0x7A75, 0xB78A, 0x7A76, 0xBEBF, 0x7A77, 0xC7EE, 0x7A78, 0xF1B6, 0x7A79, 0xF1B7, 0x7A7A, 0xBFD5, + 0x7A7B, 0xB78B, 0x7A7C, 0xB78C, 0x7A7D, 0xB78D, 0x7A7E, 0xB78E, 0x7A7F, 0xB4A9, 0x7A80, 0xF1B8, 0x7A81, 0xCDBB, 0x7A82, 0xB78F, + 0x7A83, 0xC7D4, 0x7A84, 0xD5AD, 0x7A85, 0xB790, 0x7A86, 0xF1B9, 0x7A87, 0xB791, 0x7A88, 0xF1BA, 0x7A89, 0xB792, 0x7A8A, 0xB793, + 0x7A8B, 0xB794, 0x7A8C, 0xB795, 0x7A8D, 0xC7CF, 0x7A8E, 0xB796, 0x7A8F, 0xB797, 0x7A90, 0xB798, 0x7A91, 0xD2A4, 0x7A92, 0xD6CF, + 0x7A93, 0xB799, 0x7A94, 0xB79A, 0x7A95, 0xF1BB, 0x7A96, 0xBDD1, 0x7A97, 0xB4B0, 0x7A98, 0xBEBD, 0x7A99, 0xB79B, 0x7A9A, 0xB79C, + 0x7A9B, 0xB79D, 0x7A9C, 0xB4DC, 0x7A9D, 0xCED1, 0x7A9E, 0xB79E, 0x7A9F, 0xBFDF, 0x7AA0, 0xF1BD, 0x7AA1, 0xB79F, 0x7AA2, 0xB7A0, + 0x7AA3, 0xB840, 0x7AA4, 0xB841, 0x7AA5, 0xBFFA, 0x7AA6, 0xF1BC, 0x7AA7, 0xB842, 0x7AA8, 0xF1BF, 0x7AA9, 0xB843, 0x7AAA, 0xB844, + 0x7AAB, 0xB845, 0x7AAC, 0xF1BE, 0x7AAD, 0xF1C0, 0x7AAE, 0xB846, 0x7AAF, 0xB847, 0x7AB0, 0xB848, 0x7AB1, 0xB849, 0x7AB2, 0xB84A, + 0x7AB3, 0xF1C1, 0x7AB4, 0xB84B, 0x7AB5, 0xB84C, 0x7AB6, 0xB84D, 0x7AB7, 0xB84E, 0x7AB8, 0xB84F, 0x7AB9, 0xB850, 0x7ABA, 0xB851, + 0x7ABB, 0xB852, 0x7ABC, 0xB853, 0x7ABD, 0xB854, 0x7ABE, 0xB855, 0x7ABF, 0xC1FE, 0x7AC0, 0xB856, 0x7AC1, 0xB857, 0x7AC2, 0xB858, + 0x7AC3, 0xB859, 0x7AC4, 0xB85A, 0x7AC5, 0xB85B, 0x7AC6, 0xB85C, 0x7AC7, 0xB85D, 0x7AC8, 0xB85E, 0x7AC9, 0xB85F, 0x7ACA, 0xB860, + 0x7ACB, 0xC1A2, 0x7ACC, 0xB861, 0x7ACD, 0xB862, 0x7ACE, 0xB863, 0x7ACF, 0xB864, 0x7AD0, 0xB865, 0x7AD1, 0xB866, 0x7AD2, 0xB867, + 0x7AD3, 0xB868, 0x7AD4, 0xB869, 0x7AD5, 0xB86A, 0x7AD6, 0xCAFA, 0x7AD7, 0xB86B, 0x7AD8, 0xB86C, 0x7AD9, 0xD5BE, 0x7ADA, 0xB86D, + 0x7ADB, 0xB86E, 0x7ADC, 0xB86F, 0x7ADD, 0xB870, 0x7ADE, 0xBEBA, 0x7ADF, 0xBEB9, 0x7AE0, 0xD5C2, 0x7AE1, 0xB871, 0x7AE2, 0xB872, + 0x7AE3, 0xBFA2, 0x7AE4, 0xB873, 0x7AE5, 0xCDAF, 0x7AE6, 0xF1B5, 0x7AE7, 0xB874, 0x7AE8, 0xB875, 0x7AE9, 0xB876, 0x7AEA, 0xB877, + 0x7AEB, 0xB878, 0x7AEC, 0xB879, 0x7AED, 0xBDDF, 0x7AEE, 0xB87A, 0x7AEF, 0xB6CB, 0x7AF0, 0xB87B, 0x7AF1, 0xB87C, 0x7AF2, 0xB87D, + 0x7AF3, 0xB87E, 0x7AF4, 0xB880, 0x7AF5, 0xB881, 0x7AF6, 0xB882, 0x7AF7, 0xB883, 0x7AF8, 0xB884, 0x7AF9, 0xD6F1, 0x7AFA, 0xF3C3, + 0x7AFB, 0xB885, 0x7AFC, 0xB886, 0x7AFD, 0xF3C4, 0x7AFE, 0xB887, 0x7AFF, 0xB8CD, 0x7B00, 0xB888, 0x7B01, 0xB889, 0x7B02, 0xB88A, + 0x7B03, 0xF3C6, 0x7B04, 0xF3C7, 0x7B05, 0xB88B, 0x7B06, 0xB0CA, 0x7B07, 0xB88C, 0x7B08, 0xF3C5, 0x7B09, 0xB88D, 0x7B0A, 0xF3C9, + 0x7B0B, 0xCBF1, 0x7B0C, 0xB88E, 0x7B0D, 0xB88F, 0x7B0E, 0xB890, 0x7B0F, 0xF3CB, 0x7B10, 0xB891, 0x7B11, 0xD0A6, 0x7B12, 0xB892, + 0x7B13, 0xB893, 0x7B14, 0xB1CA, 0x7B15, 0xF3C8, 0x7B16, 0xB894, 0x7B17, 0xB895, 0x7B18, 0xB896, 0x7B19, 0xF3CF, 0x7B1A, 0xB897, + 0x7B1B, 0xB5D1, 0x7B1C, 0xB898, 0x7B1D, 0xB899, 0x7B1E, 0xF3D7, 0x7B1F, 0xB89A, 0x7B20, 0xF3D2, 0x7B21, 0xB89B, 0x7B22, 0xB89C, + 0x7B23, 0xB89D, 0x7B24, 0xF3D4, 0x7B25, 0xF3D3, 0x7B26, 0xB7FB, 0x7B27, 0xB89E, 0x7B28, 0xB1BF, 0x7B29, 0xB89F, 0x7B2A, 0xF3CE, + 0x7B2B, 0xF3CA, 0x7B2C, 0xB5DA, 0x7B2D, 0xB8A0, 0x7B2E, 0xF3D0, 0x7B2F, 0xB940, 0x7B30, 0xB941, 0x7B31, 0xF3D1, 0x7B32, 0xB942, + 0x7B33, 0xF3D5, 0x7B34, 0xB943, 0x7B35, 0xB944, 0x7B36, 0xB945, 0x7B37, 0xB946, 0x7B38, 0xF3CD, 0x7B39, 0xB947, 0x7B3A, 0xBCE3, + 0x7B3B, 0xB948, 0x7B3C, 0xC1FD, 0x7B3D, 0xB949, 0x7B3E, 0xF3D6, 0x7B3F, 0xB94A, 0x7B40, 0xB94B, 0x7B41, 0xB94C, 0x7B42, 0xB94D, + 0x7B43, 0xB94E, 0x7B44, 0xB94F, 0x7B45, 0xF3DA, 0x7B46, 0xB950, 0x7B47, 0xF3CC, 0x7B48, 0xB951, 0x7B49, 0xB5C8, 0x7B4A, 0xB952, + 0x7B4B, 0xBDEE, 0x7B4C, 0xF3DC, 0x7B4D, 0xB953, 0x7B4E, 0xB954, 0x7B4F, 0xB7A4, 0x7B50, 0xBFF0, 0x7B51, 0xD6FE, 0x7B52, 0xCDB2, + 0x7B53, 0xB955, 0x7B54, 0xB4F0, 0x7B55, 0xB956, 0x7B56, 0xB2DF, 0x7B57, 0xB957, 0x7B58, 0xF3D8, 0x7B59, 0xB958, 0x7B5A, 0xF3D9, + 0x7B5B, 0xC9B8, 0x7B5C, 0xB959, 0x7B5D, 0xF3DD, 0x7B5E, 0xB95A, 0x7B5F, 0xB95B, 0x7B60, 0xF3DE, 0x7B61, 0xB95C, 0x7B62, 0xF3E1, + 0x7B63, 0xB95D, 0x7B64, 0xB95E, 0x7B65, 0xB95F, 0x7B66, 0xB960, 0x7B67, 0xB961, 0x7B68, 0xB962, 0x7B69, 0xB963, 0x7B6A, 0xB964, + 0x7B6B, 0xB965, 0x7B6C, 0xB966, 0x7B6D, 0xB967, 0x7B6E, 0xF3DF, 0x7B6F, 0xB968, 0x7B70, 0xB969, 0x7B71, 0xF3E3, 0x7B72, 0xF3E2, + 0x7B73, 0xB96A, 0x7B74, 0xB96B, 0x7B75, 0xF3DB, 0x7B76, 0xB96C, 0x7B77, 0xBFEA, 0x7B78, 0xB96D, 0x7B79, 0xB3EF, 0x7B7A, 0xB96E, + 0x7B7B, 0xF3E0, 0x7B7C, 0xB96F, 0x7B7D, 0xB970, 0x7B7E, 0xC7A9, 0x7B7F, 0xB971, 0x7B80, 0xBCF2, 0x7B81, 0xB972, 0x7B82, 0xB973, + 0x7B83, 0xB974, 0x7B84, 0xB975, 0x7B85, 0xF3EB, 0x7B86, 0xB976, 0x7B87, 0xB977, 0x7B88, 0xB978, 0x7B89, 0xB979, 0x7B8A, 0xB97A, + 0x7B8B, 0xB97B, 0x7B8C, 0xB97C, 0x7B8D, 0xB9BF, 0x7B8E, 0xB97D, 0x7B8F, 0xB97E, 0x7B90, 0xF3E4, 0x7B91, 0xB980, 0x7B92, 0xB981, + 0x7B93, 0xB982, 0x7B94, 0xB2AD, 0x7B95, 0xBBFE, 0x7B96, 0xB983, 0x7B97, 0xCBE3, 0x7B98, 0xB984, 0x7B99, 0xB985, 0x7B9A, 0xB986, + 0x7B9B, 0xB987, 0x7B9C, 0xF3ED, 0x7B9D, 0xF3E9, 0x7B9E, 0xB988, 0x7B9F, 0xB989, 0x7BA0, 0xB98A, 0x7BA1, 0xB9DC, 0x7BA2, 0xF3EE, + 0x7BA3, 0xB98B, 0x7BA4, 0xB98C, 0x7BA5, 0xB98D, 0x7BA6, 0xF3E5, 0x7BA7, 0xF3E6, 0x7BA8, 0xF3EA, 0x7BA9, 0xC2E1, 0x7BAA, 0xF3EC, + 0x7BAB, 0xF3EF, 0x7BAC, 0xF3E8, 0x7BAD, 0xBCFD, 0x7BAE, 0xB98E, 0x7BAF, 0xB98F, 0x7BB0, 0xB990, 0x7BB1, 0xCFE4, 0x7BB2, 0xB991, + 0x7BB3, 0xB992, 0x7BB4, 0xF3F0, 0x7BB5, 0xB993, 0x7BB6, 0xB994, 0x7BB7, 0xB995, 0x7BB8, 0xF3E7, 0x7BB9, 0xB996, 0x7BBA, 0xB997, + 0x7BBB, 0xB998, 0x7BBC, 0xB999, 0x7BBD, 0xB99A, 0x7BBE, 0xB99B, 0x7BBF, 0xB99C, 0x7BC0, 0xB99D, 0x7BC1, 0xF3F2, 0x7BC2, 0xB99E, + 0x7BC3, 0xB99F, 0x7BC4, 0xB9A0, 0x7BC5, 0xBA40, 0x7BC6, 0xD7AD, 0x7BC7, 0xC6AA, 0x7BC8, 0xBA41, 0x7BC9, 0xBA42, 0x7BCA, 0xBA43, + 0x7BCB, 0xBA44, 0x7BCC, 0xF3F3, 0x7BCD, 0xBA45, 0x7BCE, 0xBA46, 0x7BCF, 0xBA47, 0x7BD0, 0xBA48, 0x7BD1, 0xF3F1, 0x7BD2, 0xBA49, + 0x7BD3, 0xC2A8, 0x7BD4, 0xBA4A, 0x7BD5, 0xBA4B, 0x7BD6, 0xBA4C, 0x7BD7, 0xBA4D, 0x7BD8, 0xBA4E, 0x7BD9, 0xB8DD, 0x7BDA, 0xF3F5, + 0x7BDB, 0xBA4F, 0x7BDC, 0xBA50, 0x7BDD, 0xF3F4, 0x7BDE, 0xBA51, 0x7BDF, 0xBA52, 0x7BE0, 0xBA53, 0x7BE1, 0xB4DB, 0x7BE2, 0xBA54, + 0x7BE3, 0xBA55, 0x7BE4, 0xBA56, 0x7BE5, 0xF3F6, 0x7BE6, 0xF3F7, 0x7BE7, 0xBA57, 0x7BE8, 0xBA58, 0x7BE9, 0xBA59, 0x7BEA, 0xF3F8, + 0x7BEB, 0xBA5A, 0x7BEC, 0xBA5B, 0x7BED, 0xBA5C, 0x7BEE, 0xC0BA, 0x7BEF, 0xBA5D, 0x7BF0, 0xBA5E, 0x7BF1, 0xC0E9, 0x7BF2, 0xBA5F, + 0x7BF3, 0xBA60, 0x7BF4, 0xBA61, 0x7BF5, 0xBA62, 0x7BF6, 0xBA63, 0x7BF7, 0xC5F1, 0x7BF8, 0xBA64, 0x7BF9, 0xBA65, 0x7BFA, 0xBA66, + 0x7BFB, 0xBA67, 0x7BFC, 0xF3FB, 0x7BFD, 0xBA68, 0x7BFE, 0xF3FA, 0x7BFF, 0xBA69, 0x7C00, 0xBA6A, 0x7C01, 0xBA6B, 0x7C02, 0xBA6C, + 0x7C03, 0xBA6D, 0x7C04, 0xBA6E, 0x7C05, 0xBA6F, 0x7C06, 0xBA70, 0x7C07, 0xB4D8, 0x7C08, 0xBA71, 0x7C09, 0xBA72, 0x7C0A, 0xBA73, + 0x7C0B, 0xF3FE, 0x7C0C, 0xF3F9, 0x7C0D, 0xBA74, 0x7C0E, 0xBA75, 0x7C0F, 0xF3FC, 0x7C10, 0xBA76, 0x7C11, 0xBA77, 0x7C12, 0xBA78, + 0x7C13, 0xBA79, 0x7C14, 0xBA7A, 0x7C15, 0xBA7B, 0x7C16, 0xF3FD, 0x7C17, 0xBA7C, 0x7C18, 0xBA7D, 0x7C19, 0xBA7E, 0x7C1A, 0xBA80, + 0x7C1B, 0xBA81, 0x7C1C, 0xBA82, 0x7C1D, 0xBA83, 0x7C1E, 0xBA84, 0x7C1F, 0xF4A1, 0x7C20, 0xBA85, 0x7C21, 0xBA86, 0x7C22, 0xBA87, + 0x7C23, 0xBA88, 0x7C24, 0xBA89, 0x7C25, 0xBA8A, 0x7C26, 0xF4A3, 0x7C27, 0xBBC9, 0x7C28, 0xBA8B, 0x7C29, 0xBA8C, 0x7C2A, 0xF4A2, + 0x7C2B, 0xBA8D, 0x7C2C, 0xBA8E, 0x7C2D, 0xBA8F, 0x7C2E, 0xBA90, 0x7C2F, 0xBA91, 0x7C30, 0xBA92, 0x7C31, 0xBA93, 0x7C32, 0xBA94, + 0x7C33, 0xBA95, 0x7C34, 0xBA96, 0x7C35, 0xBA97, 0x7C36, 0xBA98, 0x7C37, 0xBA99, 0x7C38, 0xF4A4, 0x7C39, 0xBA9A, 0x7C3A, 0xBA9B, + 0x7C3B, 0xBA9C, 0x7C3C, 0xBA9D, 0x7C3D, 0xBA9E, 0x7C3E, 0xBA9F, 0x7C3F, 0xB2BE, 0x7C40, 0xF4A6, 0x7C41, 0xF4A5, 0x7C42, 0xBAA0, + 0x7C43, 0xBB40, 0x7C44, 0xBB41, 0x7C45, 0xBB42, 0x7C46, 0xBB43, 0x7C47, 0xBB44, 0x7C48, 0xBB45, 0x7C49, 0xBB46, 0x7C4A, 0xBB47, + 0x7C4B, 0xBB48, 0x7C4C, 0xBB49, 0x7C4D, 0xBCAE, 0x7C4E, 0xBB4A, 0x7C4F, 0xBB4B, 0x7C50, 0xBB4C, 0x7C51, 0xBB4D, 0x7C52, 0xBB4E, + 0x7C53, 0xBB4F, 0x7C54, 0xBB50, 0x7C55, 0xBB51, 0x7C56, 0xBB52, 0x7C57, 0xBB53, 0x7C58, 0xBB54, 0x7C59, 0xBB55, 0x7C5A, 0xBB56, + 0x7C5B, 0xBB57, 0x7C5C, 0xBB58, 0x7C5D, 0xBB59, 0x7C5E, 0xBB5A, 0x7C5F, 0xBB5B, 0x7C60, 0xBB5C, 0x7C61, 0xBB5D, 0x7C62, 0xBB5E, + 0x7C63, 0xBB5F, 0x7C64, 0xBB60, 0x7C65, 0xBB61, 0x7C66, 0xBB62, 0x7C67, 0xBB63, 0x7C68, 0xBB64, 0x7C69, 0xBB65, 0x7C6A, 0xBB66, + 0x7C6B, 0xBB67, 0x7C6C, 0xBB68, 0x7C6D, 0xBB69, 0x7C6E, 0xBB6A, 0x7C6F, 0xBB6B, 0x7C70, 0xBB6C, 0x7C71, 0xBB6D, 0x7C72, 0xBB6E, + 0x7C73, 0xC3D7, 0x7C74, 0xD9E1, 0x7C75, 0xBB6F, 0x7C76, 0xBB70, 0x7C77, 0xBB71, 0x7C78, 0xBB72, 0x7C79, 0xBB73, 0x7C7A, 0xBB74, + 0x7C7B, 0xC0E0, 0x7C7C, 0xF4CC, 0x7C7D, 0xD7D1, 0x7C7E, 0xBB75, 0x7C7F, 0xBB76, 0x7C80, 0xBB77, 0x7C81, 0xBB78, 0x7C82, 0xBB79, + 0x7C83, 0xBB7A, 0x7C84, 0xBB7B, 0x7C85, 0xBB7C, 0x7C86, 0xBB7D, 0x7C87, 0xBB7E, 0x7C88, 0xBB80, 0x7C89, 0xB7DB, 0x7C8A, 0xBB81, + 0x7C8B, 0xBB82, 0x7C8C, 0xBB83, 0x7C8D, 0xBB84, 0x7C8E, 0xBB85, 0x7C8F, 0xBB86, 0x7C90, 0xBB87, 0x7C91, 0xF4CE, 0x7C92, 0xC1A3, + 0x7C93, 0xBB88, 0x7C94, 0xBB89, 0x7C95, 0xC6C9, 0x7C96, 0xBB8A, 0x7C97, 0xB4D6, 0x7C98, 0xD5B3, 0x7C99, 0xBB8B, 0x7C9A, 0xBB8C, + 0x7C9B, 0xBB8D, 0x7C9C, 0xF4D0, 0x7C9D, 0xF4CF, 0x7C9E, 0xF4D1, 0x7C9F, 0xCBDA, 0x7CA0, 0xBB8E, 0x7CA1, 0xBB8F, 0x7CA2, 0xF4D2, + 0x7CA3, 0xBB90, 0x7CA4, 0xD4C1, 0x7CA5, 0xD6E0, 0x7CA6, 0xBB91, 0x7CA7, 0xBB92, 0x7CA8, 0xBB93, 0x7CA9, 0xBB94, 0x7CAA, 0xB7E0, + 0x7CAB, 0xBB95, 0x7CAC, 0xBB96, 0x7CAD, 0xBB97, 0x7CAE, 0xC1B8, 0x7CAF, 0xBB98, 0x7CB0, 0xBB99, 0x7CB1, 0xC1BB, 0x7CB2, 0xF4D3, + 0x7CB3, 0xBEAC, 0x7CB4, 0xBB9A, 0x7CB5, 0xBB9B, 0x7CB6, 0xBB9C, 0x7CB7, 0xBB9D, 0x7CB8, 0xBB9E, 0x7CB9, 0xB4E2, 0x7CBA, 0xBB9F, + 0x7CBB, 0xBBA0, 0x7CBC, 0xF4D4, 0x7CBD, 0xF4D5, 0x7CBE, 0xBEAB, 0x7CBF, 0xBC40, 0x7CC0, 0xBC41, 0x7CC1, 0xF4D6, 0x7CC2, 0xBC42, + 0x7CC3, 0xBC43, 0x7CC4, 0xBC44, 0x7CC5, 0xF4DB, 0x7CC6, 0xBC45, 0x7CC7, 0xF4D7, 0x7CC8, 0xF4DA, 0x7CC9, 0xBC46, 0x7CCA, 0xBAFD, + 0x7CCB, 0xBC47, 0x7CCC, 0xF4D8, 0x7CCD, 0xF4D9, 0x7CCE, 0xBC48, 0x7CCF, 0xBC49, 0x7CD0, 0xBC4A, 0x7CD1, 0xBC4B, 0x7CD2, 0xBC4C, + 0x7CD3, 0xBC4D, 0x7CD4, 0xBC4E, 0x7CD5, 0xB8E2, 0x7CD6, 0xCCC7, 0x7CD7, 0xF4DC, 0x7CD8, 0xBC4F, 0x7CD9, 0xB2DA, 0x7CDA, 0xBC50, + 0x7CDB, 0xBC51, 0x7CDC, 0xC3D3, 0x7CDD, 0xBC52, 0x7CDE, 0xBC53, 0x7CDF, 0xD4E3, 0x7CE0, 0xBFB7, 0x7CE1, 0xBC54, 0x7CE2, 0xBC55, + 0x7CE3, 0xBC56, 0x7CE4, 0xBC57, 0x7CE5, 0xBC58, 0x7CE6, 0xBC59, 0x7CE7, 0xBC5A, 0x7CE8, 0xF4DD, 0x7CE9, 0xBC5B, 0x7CEA, 0xBC5C, + 0x7CEB, 0xBC5D, 0x7CEC, 0xBC5E, 0x7CED, 0xBC5F, 0x7CEE, 0xBC60, 0x7CEF, 0xC5B4, 0x7CF0, 0xBC61, 0x7CF1, 0xBC62, 0x7CF2, 0xBC63, + 0x7CF3, 0xBC64, 0x7CF4, 0xBC65, 0x7CF5, 0xBC66, 0x7CF6, 0xBC67, 0x7CF7, 0xBC68, 0x7CF8, 0xF4E9, 0x7CF9, 0xBC69, 0x7CFA, 0xBC6A, + 0x7CFB, 0xCFB5, 0x7CFC, 0xBC6B, 0x7CFD, 0xBC6C, 0x7CFE, 0xBC6D, 0x7CFF, 0xBC6E, 0x7D00, 0xBC6F, 0x7D01, 0xBC70, 0x7D02, 0xBC71, + 0x7D03, 0xBC72, 0x7D04, 0xBC73, 0x7D05, 0xBC74, 0x7D06, 0xBC75, 0x7D07, 0xBC76, 0x7D08, 0xBC77, 0x7D09, 0xBC78, 0x7D0A, 0xCEC9, + 0x7D0B, 0xBC79, 0x7D0C, 0xBC7A, 0x7D0D, 0xBC7B, 0x7D0E, 0xBC7C, 0x7D0F, 0xBC7D, 0x7D10, 0xBC7E, 0x7D11, 0xBC80, 0x7D12, 0xBC81, + 0x7D13, 0xBC82, 0x7D14, 0xBC83, 0x7D15, 0xBC84, 0x7D16, 0xBC85, 0x7D17, 0xBC86, 0x7D18, 0xBC87, 0x7D19, 0xBC88, 0x7D1A, 0xBC89, + 0x7D1B, 0xBC8A, 0x7D1C, 0xBC8B, 0x7D1D, 0xBC8C, 0x7D1E, 0xBC8D, 0x7D1F, 0xBC8E, 0x7D20, 0xCBD8, 0x7D21, 0xBC8F, 0x7D22, 0xCBF7, + 0x7D23, 0xBC90, 0x7D24, 0xBC91, 0x7D25, 0xBC92, 0x7D26, 0xBC93, 0x7D27, 0xBDF4, 0x7D28, 0xBC94, 0x7D29, 0xBC95, 0x7D2A, 0xBC96, + 0x7D2B, 0xD7CF, 0x7D2C, 0xBC97, 0x7D2D, 0xBC98, 0x7D2E, 0xBC99, 0x7D2F, 0xC0DB, 0x7D30, 0xBC9A, 0x7D31, 0xBC9B, 0x7D32, 0xBC9C, + 0x7D33, 0xBC9D, 0x7D34, 0xBC9E, 0x7D35, 0xBC9F, 0x7D36, 0xBCA0, 0x7D37, 0xBD40, 0x7D38, 0xBD41, 0x7D39, 0xBD42, 0x7D3A, 0xBD43, + 0x7D3B, 0xBD44, 0x7D3C, 0xBD45, 0x7D3D, 0xBD46, 0x7D3E, 0xBD47, 0x7D3F, 0xBD48, 0x7D40, 0xBD49, 0x7D41, 0xBD4A, 0x7D42, 0xBD4B, + 0x7D43, 0xBD4C, 0x7D44, 0xBD4D, 0x7D45, 0xBD4E, 0x7D46, 0xBD4F, 0x7D47, 0xBD50, 0x7D48, 0xBD51, 0x7D49, 0xBD52, 0x7D4A, 0xBD53, + 0x7D4B, 0xBD54, 0x7D4C, 0xBD55, 0x7D4D, 0xBD56, 0x7D4E, 0xBD57, 0x7D4F, 0xBD58, 0x7D50, 0xBD59, 0x7D51, 0xBD5A, 0x7D52, 0xBD5B, + 0x7D53, 0xBD5C, 0x7D54, 0xBD5D, 0x7D55, 0xBD5E, 0x7D56, 0xBD5F, 0x7D57, 0xBD60, 0x7D58, 0xBD61, 0x7D59, 0xBD62, 0x7D5A, 0xBD63, + 0x7D5B, 0xBD64, 0x7D5C, 0xBD65, 0x7D5D, 0xBD66, 0x7D5E, 0xBD67, 0x7D5F, 0xBD68, 0x7D60, 0xBD69, 0x7D61, 0xBD6A, 0x7D62, 0xBD6B, + 0x7D63, 0xBD6C, 0x7D64, 0xBD6D, 0x7D65, 0xBD6E, 0x7D66, 0xBD6F, 0x7D67, 0xBD70, 0x7D68, 0xBD71, 0x7D69, 0xBD72, 0x7D6A, 0xBD73, + 0x7D6B, 0xBD74, 0x7D6C, 0xBD75, 0x7D6D, 0xBD76, 0x7D6E, 0xD0F5, 0x7D6F, 0xBD77, 0x7D70, 0xBD78, 0x7D71, 0xBD79, 0x7D72, 0xBD7A, + 0x7D73, 0xBD7B, 0x7D74, 0xBD7C, 0x7D75, 0xBD7D, 0x7D76, 0xBD7E, 0x7D77, 0xF4EA, 0x7D78, 0xBD80, 0x7D79, 0xBD81, 0x7D7A, 0xBD82, + 0x7D7B, 0xBD83, 0x7D7C, 0xBD84, 0x7D7D, 0xBD85, 0x7D7E, 0xBD86, 0x7D7F, 0xBD87, 0x7D80, 0xBD88, 0x7D81, 0xBD89, 0x7D82, 0xBD8A, + 0x7D83, 0xBD8B, 0x7D84, 0xBD8C, 0x7D85, 0xBD8D, 0x7D86, 0xBD8E, 0x7D87, 0xBD8F, 0x7D88, 0xBD90, 0x7D89, 0xBD91, 0x7D8A, 0xBD92, + 0x7D8B, 0xBD93, 0x7D8C, 0xBD94, 0x7D8D, 0xBD95, 0x7D8E, 0xBD96, 0x7D8F, 0xBD97, 0x7D90, 0xBD98, 0x7D91, 0xBD99, 0x7D92, 0xBD9A, + 0x7D93, 0xBD9B, 0x7D94, 0xBD9C, 0x7D95, 0xBD9D, 0x7D96, 0xBD9E, 0x7D97, 0xBD9F, 0x7D98, 0xBDA0, 0x7D99, 0xBE40, 0x7D9A, 0xBE41, + 0x7D9B, 0xBE42, 0x7D9C, 0xBE43, 0x7D9D, 0xBE44, 0x7D9E, 0xBE45, 0x7D9F, 0xBE46, 0x7DA0, 0xBE47, 0x7DA1, 0xBE48, 0x7DA2, 0xBE49, + 0x7DA3, 0xBE4A, 0x7DA4, 0xBE4B, 0x7DA5, 0xBE4C, 0x7DA6, 0xF4EB, 0x7DA7, 0xBE4D, 0x7DA8, 0xBE4E, 0x7DA9, 0xBE4F, 0x7DAA, 0xBE50, + 0x7DAB, 0xBE51, 0x7DAC, 0xBE52, 0x7DAD, 0xBE53, 0x7DAE, 0xF4EC, 0x7DAF, 0xBE54, 0x7DB0, 0xBE55, 0x7DB1, 0xBE56, 0x7DB2, 0xBE57, + 0x7DB3, 0xBE58, 0x7DB4, 0xBE59, 0x7DB5, 0xBE5A, 0x7DB6, 0xBE5B, 0x7DB7, 0xBE5C, 0x7DB8, 0xBE5D, 0x7DB9, 0xBE5E, 0x7DBA, 0xBE5F, + 0x7DBB, 0xBE60, 0x7DBC, 0xBE61, 0x7DBD, 0xBE62, 0x7DBE, 0xBE63, 0x7DBF, 0xBE64, 0x7DC0, 0xBE65, 0x7DC1, 0xBE66, 0x7DC2, 0xBE67, + 0x7DC3, 0xBE68, 0x7DC4, 0xBE69, 0x7DC5, 0xBE6A, 0x7DC6, 0xBE6B, 0x7DC7, 0xBE6C, 0x7DC8, 0xBE6D, 0x7DC9, 0xBE6E, 0x7DCA, 0xBE6F, + 0x7DCB, 0xBE70, 0x7DCC, 0xBE71, 0x7DCD, 0xBE72, 0x7DCE, 0xBE73, 0x7DCF, 0xBE74, 0x7DD0, 0xBE75, 0x7DD1, 0xBE76, 0x7DD2, 0xBE77, + 0x7DD3, 0xBE78, 0x7DD4, 0xBE79, 0x7DD5, 0xBE7A, 0x7DD6, 0xBE7B, 0x7DD7, 0xBE7C, 0x7DD8, 0xBE7D, 0x7DD9, 0xBE7E, 0x7DDA, 0xBE80, + 0x7DDB, 0xBE81, 0x7DDC, 0xBE82, 0x7DDD, 0xBE83, 0x7DDE, 0xBE84, 0x7DDF, 0xBE85, 0x7DE0, 0xBE86, 0x7DE1, 0xBE87, 0x7DE2, 0xBE88, + 0x7DE3, 0xBE89, 0x7DE4, 0xBE8A, 0x7DE5, 0xBE8B, 0x7DE6, 0xBE8C, 0x7DE7, 0xBE8D, 0x7DE8, 0xBE8E, 0x7DE9, 0xBE8F, 0x7DEA, 0xBE90, + 0x7DEB, 0xBE91, 0x7DEC, 0xBE92, 0x7DED, 0xBE93, 0x7DEE, 0xBE94, 0x7DEF, 0xBE95, 0x7DF0, 0xBE96, 0x7DF1, 0xBE97, 0x7DF2, 0xBE98, + 0x7DF3, 0xBE99, 0x7DF4, 0xBE9A, 0x7DF5, 0xBE9B, 0x7DF6, 0xBE9C, 0x7DF7, 0xBE9D, 0x7DF8, 0xBE9E, 0x7DF9, 0xBE9F, 0x7DFA, 0xBEA0, + 0x7DFB, 0xBF40, 0x7DFC, 0xBF41, 0x7DFD, 0xBF42, 0x7DFE, 0xBF43, 0x7DFF, 0xBF44, 0x7E00, 0xBF45, 0x7E01, 0xBF46, 0x7E02, 0xBF47, + 0x7E03, 0xBF48, 0x7E04, 0xBF49, 0x7E05, 0xBF4A, 0x7E06, 0xBF4B, 0x7E07, 0xBF4C, 0x7E08, 0xBF4D, 0x7E09, 0xBF4E, 0x7E0A, 0xBF4F, + 0x7E0B, 0xBF50, 0x7E0C, 0xBF51, 0x7E0D, 0xBF52, 0x7E0E, 0xBF53, 0x7E0F, 0xBF54, 0x7E10, 0xBF55, 0x7E11, 0xBF56, 0x7E12, 0xBF57, + 0x7E13, 0xBF58, 0x7E14, 0xBF59, 0x7E15, 0xBF5A, 0x7E16, 0xBF5B, 0x7E17, 0xBF5C, 0x7E18, 0xBF5D, 0x7E19, 0xBF5E, 0x7E1A, 0xBF5F, + 0x7E1B, 0xBF60, 0x7E1C, 0xBF61, 0x7E1D, 0xBF62, 0x7E1E, 0xBF63, 0x7E1F, 0xBF64, 0x7E20, 0xBF65, 0x7E21, 0xBF66, 0x7E22, 0xBF67, + 0x7E23, 0xBF68, 0x7E24, 0xBF69, 0x7E25, 0xBF6A, 0x7E26, 0xBF6B, 0x7E27, 0xBF6C, 0x7E28, 0xBF6D, 0x7E29, 0xBF6E, 0x7E2A, 0xBF6F, + 0x7E2B, 0xBF70, 0x7E2C, 0xBF71, 0x7E2D, 0xBF72, 0x7E2E, 0xBF73, 0x7E2F, 0xBF74, 0x7E30, 0xBF75, 0x7E31, 0xBF76, 0x7E32, 0xBF77, + 0x7E33, 0xBF78, 0x7E34, 0xBF79, 0x7E35, 0xBF7A, 0x7E36, 0xBF7B, 0x7E37, 0xBF7C, 0x7E38, 0xBF7D, 0x7E39, 0xBF7E, 0x7E3A, 0xBF80, + 0x7E3B, 0xF7E3, 0x7E3C, 0xBF81, 0x7E3D, 0xBF82, 0x7E3E, 0xBF83, 0x7E3F, 0xBF84, 0x7E40, 0xBF85, 0x7E41, 0xB7B1, 0x7E42, 0xBF86, + 0x7E43, 0xBF87, 0x7E44, 0xBF88, 0x7E45, 0xBF89, 0x7E46, 0xBF8A, 0x7E47, 0xF4ED, 0x7E48, 0xBF8B, 0x7E49, 0xBF8C, 0x7E4A, 0xBF8D, + 0x7E4B, 0xBF8E, 0x7E4C, 0xBF8F, 0x7E4D, 0xBF90, 0x7E4E, 0xBF91, 0x7E4F, 0xBF92, 0x7E50, 0xBF93, 0x7E51, 0xBF94, 0x7E52, 0xBF95, + 0x7E53, 0xBF96, 0x7E54, 0xBF97, 0x7E55, 0xBF98, 0x7E56, 0xBF99, 0x7E57, 0xBF9A, 0x7E58, 0xBF9B, 0x7E59, 0xBF9C, 0x7E5A, 0xBF9D, + 0x7E5B, 0xBF9E, 0x7E5C, 0xBF9F, 0x7E5D, 0xBFA0, 0x7E5E, 0xC040, 0x7E5F, 0xC041, 0x7E60, 0xC042, 0x7E61, 0xC043, 0x7E62, 0xC044, + 0x7E63, 0xC045, 0x7E64, 0xC046, 0x7E65, 0xC047, 0x7E66, 0xC048, 0x7E67, 0xC049, 0x7E68, 0xC04A, 0x7E69, 0xC04B, 0x7E6A, 0xC04C, + 0x7E6B, 0xC04D, 0x7E6C, 0xC04E, 0x7E6D, 0xC04F, 0x7E6E, 0xC050, 0x7E6F, 0xC051, 0x7E70, 0xC052, 0x7E71, 0xC053, 0x7E72, 0xC054, + 0x7E73, 0xC055, 0x7E74, 0xC056, 0x7E75, 0xC057, 0x7E76, 0xC058, 0x7E77, 0xC059, 0x7E78, 0xC05A, 0x7E79, 0xC05B, 0x7E7A, 0xC05C, + 0x7E7B, 0xC05D, 0x7E7C, 0xC05E, 0x7E7D, 0xC05F, 0x7E7E, 0xC060, 0x7E7F, 0xC061, 0x7E80, 0xC062, 0x7E81, 0xC063, 0x7E82, 0xD7EB, + 0x7E83, 0xC064, 0x7E84, 0xC065, 0x7E85, 0xC066, 0x7E86, 0xC067, 0x7E87, 0xC068, 0x7E88, 0xC069, 0x7E89, 0xC06A, 0x7E8A, 0xC06B, + 0x7E8B, 0xC06C, 0x7E8C, 0xC06D, 0x7E8D, 0xC06E, 0x7E8E, 0xC06F, 0x7E8F, 0xC070, 0x7E90, 0xC071, 0x7E91, 0xC072, 0x7E92, 0xC073, + 0x7E93, 0xC074, 0x7E94, 0xC075, 0x7E95, 0xC076, 0x7E96, 0xC077, 0x7E97, 0xC078, 0x7E98, 0xC079, 0x7E99, 0xC07A, 0x7E9A, 0xC07B, + 0x7E9B, 0xF4EE, 0x7E9C, 0xC07C, 0x7E9D, 0xC07D, 0x7E9E, 0xC07E, 0x7E9F, 0xE6F9, 0x7EA0, 0xBEC0, 0x7EA1, 0xE6FA, 0x7EA2, 0xBAEC, + 0x7EA3, 0xE6FB, 0x7EA4, 0xCFCB, 0x7EA5, 0xE6FC, 0x7EA6, 0xD4BC, 0x7EA7, 0xBCB6, 0x7EA8, 0xE6FD, 0x7EA9, 0xE6FE, 0x7EAA, 0xBCCD, + 0x7EAB, 0xC8D2, 0x7EAC, 0xCEB3, 0x7EAD, 0xE7A1, 0x7EAE, 0xC080, 0x7EAF, 0xB4BF, 0x7EB0, 0xE7A2, 0x7EB1, 0xC9B4, 0x7EB2, 0xB8D9, + 0x7EB3, 0xC4C9, 0x7EB4, 0xC081, 0x7EB5, 0xD7DD, 0x7EB6, 0xC2DA, 0x7EB7, 0xB7D7, 0x7EB8, 0xD6BD, 0x7EB9, 0xCEC6, 0x7EBA, 0xB7C4, + 0x7EBB, 0xC082, 0x7EBC, 0xC083, 0x7EBD, 0xC5A6, 0x7EBE, 0xE7A3, 0x7EBF, 0xCFDF, 0x7EC0, 0xE7A4, 0x7EC1, 0xE7A5, 0x7EC2, 0xE7A6, + 0x7EC3, 0xC1B7, 0x7EC4, 0xD7E9, 0x7EC5, 0xC9F0, 0x7EC6, 0xCFB8, 0x7EC7, 0xD6AF, 0x7EC8, 0xD6D5, 0x7EC9, 0xE7A7, 0x7ECA, 0xB0ED, + 0x7ECB, 0xE7A8, 0x7ECC, 0xE7A9, 0x7ECD, 0xC9DC, 0x7ECE, 0xD2EF, 0x7ECF, 0xBEAD, 0x7ED0, 0xE7AA, 0x7ED1, 0xB0F3, 0x7ED2, 0xC8DE, + 0x7ED3, 0xBDE1, 0x7ED4, 0xE7AB, 0x7ED5, 0xC8C6, 0x7ED6, 0xC084, 0x7ED7, 0xE7AC, 0x7ED8, 0xBBE6, 0x7ED9, 0xB8F8, 0x7EDA, 0xD1A4, + 0x7EDB, 0xE7AD, 0x7EDC, 0xC2E7, 0x7EDD, 0xBEF8, 0x7EDE, 0xBDCA, 0x7EDF, 0xCDB3, 0x7EE0, 0xE7AE, 0x7EE1, 0xE7AF, 0x7EE2, 0xBEEE, + 0x7EE3, 0xD0E5, 0x7EE4, 0xC085, 0x7EE5, 0xCBE7, 0x7EE6, 0xCCD0, 0x7EE7, 0xBCCC, 0x7EE8, 0xE7B0, 0x7EE9, 0xBCA8, 0x7EEA, 0xD0F7, + 0x7EEB, 0xE7B1, 0x7EEC, 0xC086, 0x7EED, 0xD0F8, 0x7EEE, 0xE7B2, 0x7EEF, 0xE7B3, 0x7EF0, 0xB4C2, 0x7EF1, 0xE7B4, 0x7EF2, 0xE7B5, + 0x7EF3, 0xC9FE, 0x7EF4, 0xCEAC, 0x7EF5, 0xC3E0, 0x7EF6, 0xE7B7, 0x7EF7, 0xB1C1, 0x7EF8, 0xB3F1, 0x7EF9, 0xC087, 0x7EFA, 0xE7B8, + 0x7EFB, 0xE7B9, 0x7EFC, 0xD7DB, 0x7EFD, 0xD5C0, 0x7EFE, 0xE7BA, 0x7EFF, 0xC2CC, 0x7F00, 0xD7BA, 0x7F01, 0xE7BB, 0x7F02, 0xE7BC, + 0x7F03, 0xE7BD, 0x7F04, 0xBCEA, 0x7F05, 0xC3E5, 0x7F06, 0xC0C2, 0x7F07, 0xE7BE, 0x7F08, 0xE7BF, 0x7F09, 0xBCA9, 0x7F0A, 0xC088, + 0x7F0B, 0xE7C0, 0x7F0C, 0xE7C1, 0x7F0D, 0xE7B6, 0x7F0E, 0xB6D0, 0x7F0F, 0xE7C2, 0x7F10, 0xC089, 0x7F11, 0xE7C3, 0x7F12, 0xE7C4, + 0x7F13, 0xBBBA, 0x7F14, 0xB5DE, 0x7F15, 0xC2C6, 0x7F16, 0xB1E0, 0x7F17, 0xE7C5, 0x7F18, 0xD4B5, 0x7F19, 0xE7C6, 0x7F1A, 0xB8BF, + 0x7F1B, 0xE7C8, 0x7F1C, 0xE7C7, 0x7F1D, 0xB7EC, 0x7F1E, 0xC08A, 0x7F1F, 0xE7C9, 0x7F20, 0xB2F8, 0x7F21, 0xE7CA, 0x7F22, 0xE7CB, + 0x7F23, 0xE7CC, 0x7F24, 0xE7CD, 0x7F25, 0xE7CE, 0x7F26, 0xE7CF, 0x7F27, 0xE7D0, 0x7F28, 0xD3A7, 0x7F29, 0xCBF5, 0x7F2A, 0xE7D1, + 0x7F2B, 0xE7D2, 0x7F2C, 0xE7D3, 0x7F2D, 0xE7D4, 0x7F2E, 0xC9C9, 0x7F2F, 0xE7D5, 0x7F30, 0xE7D6, 0x7F31, 0xE7D7, 0x7F32, 0xE7D8, + 0x7F33, 0xE7D9, 0x7F34, 0xBDC9, 0x7F35, 0xE7DA, 0x7F36, 0xF3BE, 0x7F37, 0xC08B, 0x7F38, 0xB8D7, 0x7F39, 0xC08C, 0x7F3A, 0xC8B1, + 0x7F3B, 0xC08D, 0x7F3C, 0xC08E, 0x7F3D, 0xC08F, 0x7F3E, 0xC090, 0x7F3F, 0xC091, 0x7F40, 0xC092, 0x7F41, 0xC093, 0x7F42, 0xF3BF, + 0x7F43, 0xC094, 0x7F44, 0xF3C0, 0x7F45, 0xF3C1, 0x7F46, 0xC095, 0x7F47, 0xC096, 0x7F48, 0xC097, 0x7F49, 0xC098, 0x7F4A, 0xC099, + 0x7F4B, 0xC09A, 0x7F4C, 0xC09B, 0x7F4D, 0xC09C, 0x7F4E, 0xC09D, 0x7F4F, 0xC09E, 0x7F50, 0xB9DE, 0x7F51, 0xCDF8, 0x7F52, 0xC09F, + 0x7F53, 0xC0A0, 0x7F54, 0xD8E8, 0x7F55, 0xBAB1, 0x7F56, 0xC140, 0x7F57, 0xC2DE, 0x7F58, 0xEEB7, 0x7F59, 0xC141, 0x7F5A, 0xB7A3, + 0x7F5B, 0xC142, 0x7F5C, 0xC143, 0x7F5D, 0xC144, 0x7F5E, 0xC145, 0x7F5F, 0xEEB9, 0x7F60, 0xC146, 0x7F61, 0xEEB8, 0x7F62, 0xB0D5, + 0x7F63, 0xC147, 0x7F64, 0xC148, 0x7F65, 0xC149, 0x7F66, 0xC14A, 0x7F67, 0xC14B, 0x7F68, 0xEEBB, 0x7F69, 0xD5D6, 0x7F6A, 0xD7EF, + 0x7F6B, 0xC14C, 0x7F6C, 0xC14D, 0x7F6D, 0xC14E, 0x7F6E, 0xD6C3, 0x7F6F, 0xC14F, 0x7F70, 0xC150, 0x7F71, 0xEEBD, 0x7F72, 0xCAF0, + 0x7F73, 0xC151, 0x7F74, 0xEEBC, 0x7F75, 0xC152, 0x7F76, 0xC153, 0x7F77, 0xC154, 0x7F78, 0xC155, 0x7F79, 0xEEBE, 0x7F7A, 0xC156, + 0x7F7B, 0xC157, 0x7F7C, 0xC158, 0x7F7D, 0xC159, 0x7F7E, 0xEEC0, 0x7F7F, 0xC15A, 0x7F80, 0xC15B, 0x7F81, 0xEEBF, 0x7F82, 0xC15C, + 0x7F83, 0xC15D, 0x7F84, 0xC15E, 0x7F85, 0xC15F, 0x7F86, 0xC160, 0x7F87, 0xC161, 0x7F88, 0xC162, 0x7F89, 0xC163, 0x7F8A, 0xD1F2, + 0x7F8B, 0xC164, 0x7F8C, 0xC7BC, 0x7F8D, 0xC165, 0x7F8E, 0xC3C0, 0x7F8F, 0xC166, 0x7F90, 0xC167, 0x7F91, 0xC168, 0x7F92, 0xC169, + 0x7F93, 0xC16A, 0x7F94, 0xB8E1, 0x7F95, 0xC16B, 0x7F96, 0xC16C, 0x7F97, 0xC16D, 0x7F98, 0xC16E, 0x7F99, 0xC16F, 0x7F9A, 0xC1E7, + 0x7F9B, 0xC170, 0x7F9C, 0xC171, 0x7F9D, 0xF4C6, 0x7F9E, 0xD0DF, 0x7F9F, 0xF4C7, 0x7FA0, 0xC172, 0x7FA1, 0xCFDB, 0x7FA2, 0xC173, + 0x7FA3, 0xC174, 0x7FA4, 0xC8BA, 0x7FA5, 0xC175, 0x7FA6, 0xC176, 0x7FA7, 0xF4C8, 0x7FA8, 0xC177, 0x7FA9, 0xC178, 0x7FAA, 0xC179, + 0x7FAB, 0xC17A, 0x7FAC, 0xC17B, 0x7FAD, 0xC17C, 0x7FAE, 0xC17D, 0x7FAF, 0xF4C9, 0x7FB0, 0xF4CA, 0x7FB1, 0xC17E, 0x7FB2, 0xF4CB, + 0x7FB3, 0xC180, 0x7FB4, 0xC181, 0x7FB5, 0xC182, 0x7FB6, 0xC183, 0x7FB7, 0xC184, 0x7FB8, 0xD9FA, 0x7FB9, 0xB8FE, 0x7FBA, 0xC185, + 0x7FBB, 0xC186, 0x7FBC, 0xE5F1, 0x7FBD, 0xD3F0, 0x7FBE, 0xC187, 0x7FBF, 0xF4E0, 0x7FC0, 0xC188, 0x7FC1, 0xCECC, 0x7FC2, 0xC189, + 0x7FC3, 0xC18A, 0x7FC4, 0xC18B, 0x7FC5, 0xB3E1, 0x7FC6, 0xC18C, 0x7FC7, 0xC18D, 0x7FC8, 0xC18E, 0x7FC9, 0xC18F, 0x7FCA, 0xF1B4, + 0x7FCB, 0xC190, 0x7FCC, 0xD2EE, 0x7FCD, 0xC191, 0x7FCE, 0xF4E1, 0x7FCF, 0xC192, 0x7FD0, 0xC193, 0x7FD1, 0xC194, 0x7FD2, 0xC195, + 0x7FD3, 0xC196, 0x7FD4, 0xCFE8, 0x7FD5, 0xF4E2, 0x7FD6, 0xC197, 0x7FD7, 0xC198, 0x7FD8, 0xC7CC, 0x7FD9, 0xC199, 0x7FDA, 0xC19A, + 0x7FDB, 0xC19B, 0x7FDC, 0xC19C, 0x7FDD, 0xC19D, 0x7FDE, 0xC19E, 0x7FDF, 0xB5D4, 0x7FE0, 0xB4E4, 0x7FE1, 0xF4E4, 0x7FE2, 0xC19F, + 0x7FE3, 0xC1A0, 0x7FE4, 0xC240, 0x7FE5, 0xF4E3, 0x7FE6, 0xF4E5, 0x7FE7, 0xC241, 0x7FE8, 0xC242, 0x7FE9, 0xF4E6, 0x7FEA, 0xC243, + 0x7FEB, 0xC244, 0x7FEC, 0xC245, 0x7FED, 0xC246, 0x7FEE, 0xF4E7, 0x7FEF, 0xC247, 0x7FF0, 0xBAB2, 0x7FF1, 0xB0BF, 0x7FF2, 0xC248, + 0x7FF3, 0xF4E8, 0x7FF4, 0xC249, 0x7FF5, 0xC24A, 0x7FF6, 0xC24B, 0x7FF7, 0xC24C, 0x7FF8, 0xC24D, 0x7FF9, 0xC24E, 0x7FFA, 0xC24F, + 0x7FFB, 0xB7AD, 0x7FFC, 0xD2ED, 0x7FFD, 0xC250, 0x7FFE, 0xC251, 0x7FFF, 0xC252, 0x8000, 0xD2AB, 0x8001, 0xC0CF, 0x8002, 0xC253, + 0x8003, 0xBFBC, 0x8004, 0xEBA3, 0x8005, 0xD5DF, 0x8006, 0xEAC8, 0x8007, 0xC254, 0x8008, 0xC255, 0x8009, 0xC256, 0x800A, 0xC257, + 0x800B, 0xF1F3, 0x800C, 0xB6F8, 0x800D, 0xCBA3, 0x800E, 0xC258, 0x800F, 0xC259, 0x8010, 0xC4CD, 0x8011, 0xC25A, 0x8012, 0xF1E7, + 0x8013, 0xC25B, 0x8014, 0xF1E8, 0x8015, 0xB8FB, 0x8016, 0xF1E9, 0x8017, 0xBAC4, 0x8018, 0xD4C5, 0x8019, 0xB0D2, 0x801A, 0xC25C, + 0x801B, 0xC25D, 0x801C, 0xF1EA, 0x801D, 0xC25E, 0x801E, 0xC25F, 0x801F, 0xC260, 0x8020, 0xF1EB, 0x8021, 0xC261, 0x8022, 0xF1EC, + 0x8023, 0xC262, 0x8024, 0xC263, 0x8025, 0xF1ED, 0x8026, 0xF1EE, 0x8027, 0xF1EF, 0x8028, 0xF1F1, 0x8029, 0xF1F0, 0x802A, 0xC5D5, + 0x802B, 0xC264, 0x802C, 0xC265, 0x802D, 0xC266, 0x802E, 0xC267, 0x802F, 0xC268, 0x8030, 0xC269, 0x8031, 0xF1F2, 0x8032, 0xC26A, + 0x8033, 0xB6FA, 0x8034, 0xC26B, 0x8035, 0xF1F4, 0x8036, 0xD2AE, 0x8037, 0xDEC7, 0x8038, 0xCBCA, 0x8039, 0xC26C, 0x803A, 0xC26D, + 0x803B, 0xB3DC, 0x803C, 0xC26E, 0x803D, 0xB5A2, 0x803E, 0xC26F, 0x803F, 0xB9A2, 0x8040, 0xC270, 0x8041, 0xC271, 0x8042, 0xC4F4, + 0x8043, 0xF1F5, 0x8044, 0xC272, 0x8045, 0xC273, 0x8046, 0xF1F6, 0x8047, 0xC274, 0x8048, 0xC275, 0x8049, 0xC276, 0x804A, 0xC1C4, + 0x804B, 0xC1FB, 0x804C, 0xD6B0, 0x804D, 0xF1F7, 0x804E, 0xC277, 0x804F, 0xC278, 0x8050, 0xC279, 0x8051, 0xC27A, 0x8052, 0xF1F8, + 0x8053, 0xC27B, 0x8054, 0xC1AA, 0x8055, 0xC27C, 0x8056, 0xC27D, 0x8057, 0xC27E, 0x8058, 0xC6B8, 0x8059, 0xC280, 0x805A, 0xBEDB, + 0x805B, 0xC281, 0x805C, 0xC282, 0x805D, 0xC283, 0x805E, 0xC284, 0x805F, 0xC285, 0x8060, 0xC286, 0x8061, 0xC287, 0x8062, 0xC288, + 0x8063, 0xC289, 0x8064, 0xC28A, 0x8065, 0xC28B, 0x8066, 0xC28C, 0x8067, 0xC28D, 0x8068, 0xC28E, 0x8069, 0xF1F9, 0x806A, 0xB4CF, + 0x806B, 0xC28F, 0x806C, 0xC290, 0x806D, 0xC291, 0x806E, 0xC292, 0x806F, 0xC293, 0x8070, 0xC294, 0x8071, 0xF1FA, 0x8072, 0xC295, + 0x8073, 0xC296, 0x8074, 0xC297, 0x8075, 0xC298, 0x8076, 0xC299, 0x8077, 0xC29A, 0x8078, 0xC29B, 0x8079, 0xC29C, 0x807A, 0xC29D, + 0x807B, 0xC29E, 0x807C, 0xC29F, 0x807D, 0xC2A0, 0x807E, 0xC340, 0x807F, 0xEDB2, 0x8080, 0xEDB1, 0x8081, 0xC341, 0x8082, 0xC342, + 0x8083, 0xCBE0, 0x8084, 0xD2DE, 0x8085, 0xC343, 0x8086, 0xCBC1, 0x8087, 0xD5D8, 0x8088, 0xC344, 0x8089, 0xC8E2, 0x808A, 0xC345, + 0x808B, 0xC0DF, 0x808C, 0xBCA1, 0x808D, 0xC346, 0x808E, 0xC347, 0x808F, 0xC348, 0x8090, 0xC349, 0x8091, 0xC34A, 0x8092, 0xC34B, + 0x8093, 0xEBC1, 0x8094, 0xC34C, 0x8095, 0xC34D, 0x8096, 0xD0A4, 0x8097, 0xC34E, 0x8098, 0xD6E2, 0x8099, 0xC34F, 0x809A, 0xB6C7, + 0x809B, 0xB8D8, 0x809C, 0xEBC0, 0x809D, 0xB8CE, 0x809E, 0xC350, 0x809F, 0xEBBF, 0x80A0, 0xB3A6, 0x80A1, 0xB9C9, 0x80A2, 0xD6AB, + 0x80A3, 0xC351, 0x80A4, 0xB7F4, 0x80A5, 0xB7CA, 0x80A6, 0xC352, 0x80A7, 0xC353, 0x80A8, 0xC354, 0x80A9, 0xBCE7, 0x80AA, 0xB7BE, + 0x80AB, 0xEBC6, 0x80AC, 0xC355, 0x80AD, 0xEBC7, 0x80AE, 0xB0B9, 0x80AF, 0xBFCF, 0x80B0, 0xC356, 0x80B1, 0xEBC5, 0x80B2, 0xD3FD, + 0x80B3, 0xC357, 0x80B4, 0xEBC8, 0x80B5, 0xC358, 0x80B6, 0xC359, 0x80B7, 0xEBC9, 0x80B8, 0xC35A, 0x80B9, 0xC35B, 0x80BA, 0xB7CE, + 0x80BB, 0xC35C, 0x80BC, 0xEBC2, 0x80BD, 0xEBC4, 0x80BE, 0xC9F6, 0x80BF, 0xD6D7, 0x80C0, 0xD5CD, 0x80C1, 0xD0B2, 0x80C2, 0xEBCF, + 0x80C3, 0xCEB8, 0x80C4, 0xEBD0, 0x80C5, 0xC35D, 0x80C6, 0xB5A8, 0x80C7, 0xC35E, 0x80C8, 0xC35F, 0x80C9, 0xC360, 0x80CA, 0xC361, + 0x80CB, 0xC362, 0x80CC, 0xB1B3, 0x80CD, 0xEBD2, 0x80CE, 0xCCA5, 0x80CF, 0xC363, 0x80D0, 0xC364, 0x80D1, 0xC365, 0x80D2, 0xC366, + 0x80D3, 0xC367, 0x80D4, 0xC368, 0x80D5, 0xC369, 0x80D6, 0xC5D6, 0x80D7, 0xEBD3, 0x80D8, 0xC36A, 0x80D9, 0xEBD1, 0x80DA, 0xC5DF, + 0x80DB, 0xEBCE, 0x80DC, 0xCAA4, 0x80DD, 0xEBD5, 0x80DE, 0xB0FB, 0x80DF, 0xC36B, 0x80E0, 0xC36C, 0x80E1, 0xBAFA, 0x80E2, 0xC36D, + 0x80E3, 0xC36E, 0x80E4, 0xD8B7, 0x80E5, 0xF1E3, 0x80E6, 0xC36F, 0x80E7, 0xEBCA, 0x80E8, 0xEBCB, 0x80E9, 0xEBCC, 0x80EA, 0xEBCD, + 0x80EB, 0xEBD6, 0x80EC, 0xE6C0, 0x80ED, 0xEBD9, 0x80EE, 0xC370, 0x80EF, 0xBFE8, 0x80F0, 0xD2C8, 0x80F1, 0xEBD7, 0x80F2, 0xEBDC, + 0x80F3, 0xB8EC, 0x80F4, 0xEBD8, 0x80F5, 0xC371, 0x80F6, 0xBDBA, 0x80F7, 0xC372, 0x80F8, 0xD0D8, 0x80F9, 0xC373, 0x80FA, 0xB0B7, + 0x80FB, 0xC374, 0x80FC, 0xEBDD, 0x80FD, 0xC4DC, 0x80FE, 0xC375, 0x80FF, 0xC376, 0x8100, 0xC377, 0x8101, 0xC378, 0x8102, 0xD6AC, + 0x8103, 0xC379, 0x8104, 0xC37A, 0x8105, 0xC37B, 0x8106, 0xB4E0, 0x8107, 0xC37C, 0x8108, 0xC37D, 0x8109, 0xC2F6, 0x810A, 0xBCB9, + 0x810B, 0xC37E, 0x810C, 0xC380, 0x810D, 0xEBDA, 0x810E, 0xEBDB, 0x810F, 0xD4E0, 0x8110, 0xC6EA, 0x8111, 0xC4D4, 0x8112, 0xEBDF, + 0x8113, 0xC5A7, 0x8114, 0xD9F5, 0x8115, 0xC381, 0x8116, 0xB2B1, 0x8117, 0xC382, 0x8118, 0xEBE4, 0x8119, 0xC383, 0x811A, 0xBDC5, + 0x811B, 0xC384, 0x811C, 0xC385, 0x811D, 0xC386, 0x811E, 0xEBE2, 0x811F, 0xC387, 0x8120, 0xC388, 0x8121, 0xC389, 0x8122, 0xC38A, + 0x8123, 0xC38B, 0x8124, 0xC38C, 0x8125, 0xC38D, 0x8126, 0xC38E, 0x8127, 0xC38F, 0x8128, 0xC390, 0x8129, 0xC391, 0x812A, 0xC392, + 0x812B, 0xC393, 0x812C, 0xEBE3, 0x812D, 0xC394, 0x812E, 0xC395, 0x812F, 0xB8AC, 0x8130, 0xC396, 0x8131, 0xCDD1, 0x8132, 0xEBE5, + 0x8133, 0xC397, 0x8134, 0xC398, 0x8135, 0xC399, 0x8136, 0xEBE1, 0x8137, 0xC39A, 0x8138, 0xC1B3, 0x8139, 0xC39B, 0x813A, 0xC39C, + 0x813B, 0xC39D, 0x813C, 0xC39E, 0x813D, 0xC39F, 0x813E, 0xC6A2, 0x813F, 0xC3A0, 0x8140, 0xC440, 0x8141, 0xC441, 0x8142, 0xC442, + 0x8143, 0xC443, 0x8144, 0xC444, 0x8145, 0xC445, 0x8146, 0xCCF3, 0x8147, 0xC446, 0x8148, 0xEBE6, 0x8149, 0xC447, 0x814A, 0xC0B0, + 0x814B, 0xD2B8, 0x814C, 0xEBE7, 0x814D, 0xC448, 0x814E, 0xC449, 0x814F, 0xC44A, 0x8150, 0xB8AF, 0x8151, 0xB8AD, 0x8152, 0xC44B, + 0x8153, 0xEBE8, 0x8154, 0xC7BB, 0x8155, 0xCDF3, 0x8156, 0xC44C, 0x8157, 0xC44D, 0x8158, 0xC44E, 0x8159, 0xEBEA, 0x815A, 0xEBEB, + 0x815B, 0xC44F, 0x815C, 0xC450, 0x815D, 0xC451, 0x815E, 0xC452, 0x815F, 0xC453, 0x8160, 0xEBED, 0x8161, 0xC454, 0x8162, 0xC455, + 0x8163, 0xC456, 0x8164, 0xC457, 0x8165, 0xD0C8, 0x8166, 0xC458, 0x8167, 0xEBF2, 0x8168, 0xC459, 0x8169, 0xEBEE, 0x816A, 0xC45A, + 0x816B, 0xC45B, 0x816C, 0xC45C, 0x816D, 0xEBF1, 0x816E, 0xC8F9, 0x816F, 0xC45D, 0x8170, 0xD1FC, 0x8171, 0xEBEC, 0x8172, 0xC45E, + 0x8173, 0xC45F, 0x8174, 0xEBE9, 0x8175, 0xC460, 0x8176, 0xC461, 0x8177, 0xC462, 0x8178, 0xC463, 0x8179, 0xB8B9, 0x817A, 0xCFD9, + 0x817B, 0xC4E5, 0x817C, 0xEBEF, 0x817D, 0xEBF0, 0x817E, 0xCCDA, 0x817F, 0xCDC8, 0x8180, 0xB0F2, 0x8181, 0xC464, 0x8182, 0xEBF6, + 0x8183, 0xC465, 0x8184, 0xC466, 0x8185, 0xC467, 0x8186, 0xC468, 0x8187, 0xC469, 0x8188, 0xEBF5, 0x8189, 0xC46A, 0x818A, 0xB2B2, + 0x818B, 0xC46B, 0x818C, 0xC46C, 0x818D, 0xC46D, 0x818E, 0xC46E, 0x818F, 0xB8E0, 0x8190, 0xC46F, 0x8191, 0xEBF7, 0x8192, 0xC470, + 0x8193, 0xC471, 0x8194, 0xC472, 0x8195, 0xC473, 0x8196, 0xC474, 0x8197, 0xC475, 0x8198, 0xB1EC, 0x8199, 0xC476, 0x819A, 0xC477, + 0x819B, 0xCCC5, 0x819C, 0xC4A4, 0x819D, 0xCFA5, 0x819E, 0xC478, 0x819F, 0xC479, 0x81A0, 0xC47A, 0x81A1, 0xC47B, 0x81A2, 0xC47C, + 0x81A3, 0xEBF9, 0x81A4, 0xC47D, 0x81A5, 0xC47E, 0x81A6, 0xECA2, 0x81A7, 0xC480, 0x81A8, 0xC5F2, 0x81A9, 0xC481, 0x81AA, 0xEBFA, + 0x81AB, 0xC482, 0x81AC, 0xC483, 0x81AD, 0xC484, 0x81AE, 0xC485, 0x81AF, 0xC486, 0x81B0, 0xC487, 0x81B1, 0xC488, 0x81B2, 0xC489, + 0x81B3, 0xC9C5, 0x81B4, 0xC48A, 0x81B5, 0xC48B, 0x81B6, 0xC48C, 0x81B7, 0xC48D, 0x81B8, 0xC48E, 0x81B9, 0xC48F, 0x81BA, 0xE2DF, + 0x81BB, 0xEBFE, 0x81BC, 0xC490, 0x81BD, 0xC491, 0x81BE, 0xC492, 0x81BF, 0xC493, 0x81C0, 0xCDCE, 0x81C1, 0xECA1, 0x81C2, 0xB1DB, + 0x81C3, 0xD3B7, 0x81C4, 0xC494, 0x81C5, 0xC495, 0x81C6, 0xD2DC, 0x81C7, 0xC496, 0x81C8, 0xC497, 0x81C9, 0xC498, 0x81CA, 0xEBFD, + 0x81CB, 0xC499, 0x81CC, 0xEBFB, 0x81CD, 0xC49A, 0x81CE, 0xC49B, 0x81CF, 0xC49C, 0x81D0, 0xC49D, 0x81D1, 0xC49E, 0x81D2, 0xC49F, + 0x81D3, 0xC4A0, 0x81D4, 0xC540, 0x81D5, 0xC541, 0x81D6, 0xC542, 0x81D7, 0xC543, 0x81D8, 0xC544, 0x81D9, 0xC545, 0x81DA, 0xC546, + 0x81DB, 0xC547, 0x81DC, 0xC548, 0x81DD, 0xC549, 0x81DE, 0xC54A, 0x81DF, 0xC54B, 0x81E0, 0xC54C, 0x81E1, 0xC54D, 0x81E2, 0xC54E, + 0x81E3, 0xB3BC, 0x81E4, 0xC54F, 0x81E5, 0xC550, 0x81E6, 0xC551, 0x81E7, 0xEAB0, 0x81E8, 0xC552, 0x81E9, 0xC553, 0x81EA, 0xD7D4, + 0x81EB, 0xC554, 0x81EC, 0xF4AB, 0x81ED, 0xB3F4, 0x81EE, 0xC555, 0x81EF, 0xC556, 0x81F0, 0xC557, 0x81F1, 0xC558, 0x81F2, 0xC559, + 0x81F3, 0xD6C1, 0x81F4, 0xD6C2, 0x81F5, 0xC55A, 0x81F6, 0xC55B, 0x81F7, 0xC55C, 0x81F8, 0xC55D, 0x81F9, 0xC55E, 0x81FA, 0xC55F, + 0x81FB, 0xD5E9, 0x81FC, 0xBECA, 0x81FD, 0xC560, 0x81FE, 0xF4A7, 0x81FF, 0xC561, 0x8200, 0xD2A8, 0x8201, 0xF4A8, 0x8202, 0xF4A9, + 0x8203, 0xC562, 0x8204, 0xF4AA, 0x8205, 0xBECB, 0x8206, 0xD3DF, 0x8207, 0xC563, 0x8208, 0xC564, 0x8209, 0xC565, 0x820A, 0xC566, + 0x820B, 0xC567, 0x820C, 0xC9E0, 0x820D, 0xC9E1, 0x820E, 0xC568, 0x820F, 0xC569, 0x8210, 0xF3C2, 0x8211, 0xC56A, 0x8212, 0xCAE6, + 0x8213, 0xC56B, 0x8214, 0xCCF2, 0x8215, 0xC56C, 0x8216, 0xC56D, 0x8217, 0xC56E, 0x8218, 0xC56F, 0x8219, 0xC570, 0x821A, 0xC571, + 0x821B, 0xE2B6, 0x821C, 0xCBB4, 0x821D, 0xC572, 0x821E, 0xCEE8, 0x821F, 0xD6DB, 0x8220, 0xC573, 0x8221, 0xF4AD, 0x8222, 0xF4AE, + 0x8223, 0xF4AF, 0x8224, 0xC574, 0x8225, 0xC575, 0x8226, 0xC576, 0x8227, 0xC577, 0x8228, 0xF4B2, 0x8229, 0xC578, 0x822A, 0xBABD, + 0x822B, 0xF4B3, 0x822C, 0xB0E3, 0x822D, 0xF4B0, 0x822E, 0xC579, 0x822F, 0xF4B1, 0x8230, 0xBDA2, 0x8231, 0xB2D5, 0x8232, 0xC57A, + 0x8233, 0xF4B6, 0x8234, 0xF4B7, 0x8235, 0xB6E6, 0x8236, 0xB2B0, 0x8237, 0xCFCF, 0x8238, 0xF4B4, 0x8239, 0xB4AC, 0x823A, 0xC57B, + 0x823B, 0xF4B5, 0x823C, 0xC57C, 0x823D, 0xC57D, 0x823E, 0xF4B8, 0x823F, 0xC57E, 0x8240, 0xC580, 0x8241, 0xC581, 0x8242, 0xC582, + 0x8243, 0xC583, 0x8244, 0xF4B9, 0x8245, 0xC584, 0x8246, 0xC585, 0x8247, 0xCDA7, 0x8248, 0xC586, 0x8249, 0xF4BA, 0x824A, 0xC587, + 0x824B, 0xF4BB, 0x824C, 0xC588, 0x824D, 0xC589, 0x824E, 0xC58A, 0x824F, 0xF4BC, 0x8250, 0xC58B, 0x8251, 0xC58C, 0x8252, 0xC58D, + 0x8253, 0xC58E, 0x8254, 0xC58F, 0x8255, 0xC590, 0x8256, 0xC591, 0x8257, 0xC592, 0x8258, 0xCBD2, 0x8259, 0xC593, 0x825A, 0xF4BD, + 0x825B, 0xC594, 0x825C, 0xC595, 0x825D, 0xC596, 0x825E, 0xC597, 0x825F, 0xF4BE, 0x8260, 0xC598, 0x8261, 0xC599, 0x8262, 0xC59A, + 0x8263, 0xC59B, 0x8264, 0xC59C, 0x8265, 0xC59D, 0x8266, 0xC59E, 0x8267, 0xC59F, 0x8268, 0xF4BF, 0x8269, 0xC5A0, 0x826A, 0xC640, + 0x826B, 0xC641, 0x826C, 0xC642, 0x826D, 0xC643, 0x826E, 0xF4DE, 0x826F, 0xC1BC, 0x8270, 0xBCE8, 0x8271, 0xC644, 0x8272, 0xC9AB, + 0x8273, 0xD1DE, 0x8274, 0xE5F5, 0x8275, 0xC645, 0x8276, 0xC646, 0x8277, 0xC647, 0x8278, 0xC648, 0x8279, 0xDCB3, 0x827A, 0xD2D5, + 0x827B, 0xC649, 0x827C, 0xC64A, 0x827D, 0xDCB4, 0x827E, 0xB0AC, 0x827F, 0xDCB5, 0x8280, 0xC64B, 0x8281, 0xC64C, 0x8282, 0xBDDA, + 0x8283, 0xC64D, 0x8284, 0xDCB9, 0x8285, 0xC64E, 0x8286, 0xC64F, 0x8287, 0xC650, 0x8288, 0xD8C2, 0x8289, 0xC651, 0x828A, 0xDCB7, + 0x828B, 0xD3F3, 0x828C, 0xC652, 0x828D, 0xC9D6, 0x828E, 0xDCBA, 0x828F, 0xDCB6, 0x8290, 0xC653, 0x8291, 0xDCBB, 0x8292, 0xC3A2, + 0x8293, 0xC654, 0x8294, 0xC655, 0x8295, 0xC656, 0x8296, 0xC657, 0x8297, 0xDCBC, 0x8298, 0xDCC5, 0x8299, 0xDCBD, 0x829A, 0xC658, + 0x829B, 0xC659, 0x829C, 0xCEDF, 0x829D, 0xD6A5, 0x829E, 0xC65A, 0x829F, 0xDCCF, 0x82A0, 0xC65B, 0x82A1, 0xDCCD, 0x82A2, 0xC65C, + 0x82A3, 0xC65D, 0x82A4, 0xDCD2, 0x82A5, 0xBDE6, 0x82A6, 0xC2AB, 0x82A7, 0xC65E, 0x82A8, 0xDCB8, 0x82A9, 0xDCCB, 0x82AA, 0xDCCE, + 0x82AB, 0xDCBE, 0x82AC, 0xB7D2, 0x82AD, 0xB0C5, 0x82AE, 0xDCC7, 0x82AF, 0xD0BE, 0x82B0, 0xDCC1, 0x82B1, 0xBBA8, 0x82B2, 0xC65F, + 0x82B3, 0xB7BC, 0x82B4, 0xDCCC, 0x82B5, 0xC660, 0x82B6, 0xC661, 0x82B7, 0xDCC6, 0x82B8, 0xDCBF, 0x82B9, 0xC7DB, 0x82BA, 0xC662, + 0x82BB, 0xC663, 0x82BC, 0xC664, 0x82BD, 0xD1BF, 0x82BE, 0xDCC0, 0x82BF, 0xC665, 0x82C0, 0xC666, 0x82C1, 0xDCCA, 0x82C2, 0xC667, + 0x82C3, 0xC668, 0x82C4, 0xDCD0, 0x82C5, 0xC669, 0x82C6, 0xC66A, 0x82C7, 0xCEAD, 0x82C8, 0xDCC2, 0x82C9, 0xC66B, 0x82CA, 0xDCC3, + 0x82CB, 0xDCC8, 0x82CC, 0xDCC9, 0x82CD, 0xB2D4, 0x82CE, 0xDCD1, 0x82CF, 0xCBD5, 0x82D0, 0xC66C, 0x82D1, 0xD4B7, 0x82D2, 0xDCDB, + 0x82D3, 0xDCDF, 0x82D4, 0xCCA6, 0x82D5, 0xDCE6, 0x82D6, 0xC66D, 0x82D7, 0xC3E7, 0x82D8, 0xDCDC, 0x82D9, 0xC66E, 0x82DA, 0xC66F, + 0x82DB, 0xBFC1, 0x82DC, 0xDCD9, 0x82DD, 0xC670, 0x82DE, 0xB0FA, 0x82DF, 0xB9B6, 0x82E0, 0xDCE5, 0x82E1, 0xDCD3, 0x82E2, 0xC671, + 0x82E3, 0xDCC4, 0x82E4, 0xDCD6, 0x82E5, 0xC8F4, 0x82E6, 0xBFE0, 0x82E7, 0xC672, 0x82E8, 0xC673, 0x82E9, 0xC674, 0x82EA, 0xC675, + 0x82EB, 0xC9BB, 0x82EC, 0xC676, 0x82ED, 0xC677, 0x82EE, 0xC678, 0x82EF, 0xB1BD, 0x82F0, 0xC679, 0x82F1, 0xD3A2, 0x82F2, 0xC67A, + 0x82F3, 0xC67B, 0x82F4, 0xDCDA, 0x82F5, 0xC67C, 0x82F6, 0xC67D, 0x82F7, 0xDCD5, 0x82F8, 0xC67E, 0x82F9, 0xC6BB, 0x82FA, 0xC680, + 0x82FB, 0xDCDE, 0x82FC, 0xC681, 0x82FD, 0xC682, 0x82FE, 0xC683, 0x82FF, 0xC684, 0x8300, 0xC685, 0x8301, 0xD7C2, 0x8302, 0xC3AF, + 0x8303, 0xB7B6, 0x8304, 0xC7D1, 0x8305, 0xC3A9, 0x8306, 0xDCE2, 0x8307, 0xDCD8, 0x8308, 0xDCEB, 0x8309, 0xDCD4, 0x830A, 0xC686, + 0x830B, 0xC687, 0x830C, 0xDCDD, 0x830D, 0xC688, 0x830E, 0xBEA5, 0x830F, 0xDCD7, 0x8310, 0xC689, 0x8311, 0xDCE0, 0x8312, 0xC68A, + 0x8313, 0xC68B, 0x8314, 0xDCE3, 0x8315, 0xDCE4, 0x8316, 0xC68C, 0x8317, 0xDCF8, 0x8318, 0xC68D, 0x8319, 0xC68E, 0x831A, 0xDCE1, + 0x831B, 0xDDA2, 0x831C, 0xDCE7, 0x831D, 0xC68F, 0x831E, 0xC690, 0x831F, 0xC691, 0x8320, 0xC692, 0x8321, 0xC693, 0x8322, 0xC694, + 0x8323, 0xC695, 0x8324, 0xC696, 0x8325, 0xC697, 0x8326, 0xC698, 0x8327, 0xBCEB, 0x8328, 0xB4C4, 0x8329, 0xC699, 0x832A, 0xC69A, + 0x832B, 0xC3A3, 0x832C, 0xB2E7, 0x832D, 0xDCFA, 0x832E, 0xC69B, 0x832F, 0xDCF2, 0x8330, 0xC69C, 0x8331, 0xDCEF, 0x8332, 0xC69D, + 0x8333, 0xDCFC, 0x8334, 0xDCEE, 0x8335, 0xD2F0, 0x8336, 0xB2E8, 0x8337, 0xC69E, 0x8338, 0xC8D7, 0x8339, 0xC8E3, 0x833A, 0xDCFB, + 0x833B, 0xC69F, 0x833C, 0xDCED, 0x833D, 0xC6A0, 0x833E, 0xC740, 0x833F, 0xC741, 0x8340, 0xDCF7, 0x8341, 0xC742, 0x8342, 0xC743, + 0x8343, 0xDCF5, 0x8344, 0xC744, 0x8345, 0xC745, 0x8346, 0xBEA3, 0x8347, 0xDCF4, 0x8348, 0xC746, 0x8349, 0xB2DD, 0x834A, 0xC747, + 0x834B, 0xC748, 0x834C, 0xC749, 0x834D, 0xC74A, 0x834E, 0xC74B, 0x834F, 0xDCF3, 0x8350, 0xBCF6, 0x8351, 0xDCE8, 0x8352, 0xBBC4, + 0x8353, 0xC74C, 0x8354, 0xC0F3, 0x8355, 0xC74D, 0x8356, 0xC74E, 0x8357, 0xC74F, 0x8358, 0xC750, 0x8359, 0xC751, 0x835A, 0xBCD4, + 0x835B, 0xDCE9, 0x835C, 0xDCEA, 0x835D, 0xC752, 0x835E, 0xDCF1, 0x835F, 0xDCF6, 0x8360, 0xDCF9, 0x8361, 0xB5B4, 0x8362, 0xC753, + 0x8363, 0xC8D9, 0x8364, 0xBBE7, 0x8365, 0xDCFE, 0x8366, 0xDCFD, 0x8367, 0xD3AB, 0x8368, 0xDDA1, 0x8369, 0xDDA3, 0x836A, 0xDDA5, + 0x836B, 0xD2F1, 0x836C, 0xDDA4, 0x836D, 0xDDA6, 0x836E, 0xDDA7, 0x836F, 0xD2A9, 0x8370, 0xC754, 0x8371, 0xC755, 0x8372, 0xC756, + 0x8373, 0xC757, 0x8374, 0xC758, 0x8375, 0xC759, 0x8376, 0xC75A, 0x8377, 0xBAC9, 0x8378, 0xDDA9, 0x8379, 0xC75B, 0x837A, 0xC75C, + 0x837B, 0xDDB6, 0x837C, 0xDDB1, 0x837D, 0xDDB4, 0x837E, 0xC75D, 0x837F, 0xC75E, 0x8380, 0xC75F, 0x8381, 0xC760, 0x8382, 0xC761, + 0x8383, 0xC762, 0x8384, 0xC763, 0x8385, 0xDDB0, 0x8386, 0xC6CE, 0x8387, 0xC764, 0x8388, 0xC765, 0x8389, 0xC0F2, 0x838A, 0xC766, + 0x838B, 0xC767, 0x838C, 0xC768, 0x838D, 0xC769, 0x838E, 0xC9AF, 0x838F, 0xC76A, 0x8390, 0xC76B, 0x8391, 0xC76C, 0x8392, 0xDCEC, + 0x8393, 0xDDAE, 0x8394, 0xC76D, 0x8395, 0xC76E, 0x8396, 0xC76F, 0x8397, 0xC770, 0x8398, 0xDDB7, 0x8399, 0xC771, 0x839A, 0xC772, + 0x839B, 0xDCF0, 0x839C, 0xDDAF, 0x839D, 0xC773, 0x839E, 0xDDB8, 0x839F, 0xC774, 0x83A0, 0xDDAC, 0x83A1, 0xC775, 0x83A2, 0xC776, + 0x83A3, 0xC777, 0x83A4, 0xC778, 0x83A5, 0xC779, 0x83A6, 0xC77A, 0x83A7, 0xC77B, 0x83A8, 0xDDB9, 0x83A9, 0xDDB3, 0x83AA, 0xDDAD, + 0x83AB, 0xC4AA, 0x83AC, 0xC77C, 0x83AD, 0xC77D, 0x83AE, 0xC77E, 0x83AF, 0xC780, 0x83B0, 0xDDA8, 0x83B1, 0xC0B3, 0x83B2, 0xC1AB, + 0x83B3, 0xDDAA, 0x83B4, 0xDDAB, 0x83B5, 0xC781, 0x83B6, 0xDDB2, 0x83B7, 0xBBF1, 0x83B8, 0xDDB5, 0x83B9, 0xD3A8, 0x83BA, 0xDDBA, + 0x83BB, 0xC782, 0x83BC, 0xDDBB, 0x83BD, 0xC3A7, 0x83BE, 0xC783, 0x83BF, 0xC784, 0x83C0, 0xDDD2, 0x83C1, 0xDDBC, 0x83C2, 0xC785, + 0x83C3, 0xC786, 0x83C4, 0xC787, 0x83C5, 0xDDD1, 0x83C6, 0xC788, 0x83C7, 0xB9BD, 0x83C8, 0xC789, 0x83C9, 0xC78A, 0x83CA, 0xBED5, + 0x83CB, 0xC78B, 0x83CC, 0xBEFA, 0x83CD, 0xC78C, 0x83CE, 0xC78D, 0x83CF, 0xBACA, 0x83D0, 0xC78E, 0x83D1, 0xC78F, 0x83D2, 0xC790, + 0x83D3, 0xC791, 0x83D4, 0xDDCA, 0x83D5, 0xC792, 0x83D6, 0xDDC5, 0x83D7, 0xC793, 0x83D8, 0xDDBF, 0x83D9, 0xC794, 0x83DA, 0xC795, + 0x83DB, 0xC796, 0x83DC, 0xB2CB, 0x83DD, 0xDDC3, 0x83DE, 0xC797, 0x83DF, 0xDDCB, 0x83E0, 0xB2A4, 0x83E1, 0xDDD5, 0x83E2, 0xC798, + 0x83E3, 0xC799, 0x83E4, 0xC79A, 0x83E5, 0xDDBE, 0x83E6, 0xC79B, 0x83E7, 0xC79C, 0x83E8, 0xC79D, 0x83E9, 0xC6D0, 0x83EA, 0xDDD0, + 0x83EB, 0xC79E, 0x83EC, 0xC79F, 0x83ED, 0xC7A0, 0x83EE, 0xC840, 0x83EF, 0xC841, 0x83F0, 0xDDD4, 0x83F1, 0xC1E2, 0x83F2, 0xB7C6, + 0x83F3, 0xC842, 0x83F4, 0xC843, 0x83F5, 0xC844, 0x83F6, 0xC845, 0x83F7, 0xC846, 0x83F8, 0xDDCE, 0x83F9, 0xDDCF, 0x83FA, 0xC847, + 0x83FB, 0xC848, 0x83FC, 0xC849, 0x83FD, 0xDDC4, 0x83FE, 0xC84A, 0x83FF, 0xC84B, 0x8400, 0xC84C, 0x8401, 0xDDBD, 0x8402, 0xC84D, + 0x8403, 0xDDCD, 0x8404, 0xCCD1, 0x8405, 0xC84E, 0x8406, 0xDDC9, 0x8407, 0xC84F, 0x8408, 0xC850, 0x8409, 0xC851, 0x840A, 0xC852, + 0x840B, 0xDDC2, 0x840C, 0xC3C8, 0x840D, 0xC6BC, 0x840E, 0xCEAE, 0x840F, 0xDDCC, 0x8410, 0xC853, 0x8411, 0xDDC8, 0x8412, 0xC854, + 0x8413, 0xC855, 0x8414, 0xC856, 0x8415, 0xC857, 0x8416, 0xC858, 0x8417, 0xC859, 0x8418, 0xDDC1, 0x8419, 0xC85A, 0x841A, 0xC85B, + 0x841B, 0xC85C, 0x841C, 0xDDC6, 0x841D, 0xC2DC, 0x841E, 0xC85D, 0x841F, 0xC85E, 0x8420, 0xC85F, 0x8421, 0xC860, 0x8422, 0xC861, + 0x8423, 0xC862, 0x8424, 0xD3A9, 0x8425, 0xD3AA, 0x8426, 0xDDD3, 0x8427, 0xCFF4, 0x8428, 0xC8F8, 0x8429, 0xC863, 0x842A, 0xC864, + 0x842B, 0xC865, 0x842C, 0xC866, 0x842D, 0xC867, 0x842E, 0xC868, 0x842F, 0xC869, 0x8430, 0xC86A, 0x8431, 0xDDE6, 0x8432, 0xC86B, + 0x8433, 0xC86C, 0x8434, 0xC86D, 0x8435, 0xC86E, 0x8436, 0xC86F, 0x8437, 0xC870, 0x8438, 0xDDC7, 0x8439, 0xC871, 0x843A, 0xC872, + 0x843B, 0xC873, 0x843C, 0xDDE0, 0x843D, 0xC2E4, 0x843E, 0xC874, 0x843F, 0xC875, 0x8440, 0xC876, 0x8441, 0xC877, 0x8442, 0xC878, + 0x8443, 0xC879, 0x8444, 0xC87A, 0x8445, 0xC87B, 0x8446, 0xDDE1, 0x8447, 0xC87C, 0x8448, 0xC87D, 0x8449, 0xC87E, 0x844A, 0xC880, + 0x844B, 0xC881, 0x844C, 0xC882, 0x844D, 0xC883, 0x844E, 0xC884, 0x844F, 0xC885, 0x8450, 0xC886, 0x8451, 0xDDD7, 0x8452, 0xC887, + 0x8453, 0xC888, 0x8454, 0xC889, 0x8455, 0xC88A, 0x8456, 0xC88B, 0x8457, 0xD6F8, 0x8458, 0xC88C, 0x8459, 0xDDD9, 0x845A, 0xDDD8, + 0x845B, 0xB8F0, 0x845C, 0xDDD6, 0x845D, 0xC88D, 0x845E, 0xC88E, 0x845F, 0xC88F, 0x8460, 0xC890, 0x8461, 0xC6CF, 0x8462, 0xC891, + 0x8463, 0xB6AD, 0x8464, 0xC892, 0x8465, 0xC893, 0x8466, 0xC894, 0x8467, 0xC895, 0x8468, 0xC896, 0x8469, 0xDDE2, 0x846A, 0xC897, + 0x846B, 0xBAF9, 0x846C, 0xD4E1, 0x846D, 0xDDE7, 0x846E, 0xC898, 0x846F, 0xC899, 0x8470, 0xC89A, 0x8471, 0xB4D0, 0x8472, 0xC89B, + 0x8473, 0xDDDA, 0x8474, 0xC89C, 0x8475, 0xBFFB, 0x8476, 0xDDE3, 0x8477, 0xC89D, 0x8478, 0xDDDF, 0x8479, 0xC89E, 0x847A, 0xDDDD, + 0x847B, 0xC89F, 0x847C, 0xC8A0, 0x847D, 0xC940, 0x847E, 0xC941, 0x847F, 0xC942, 0x8480, 0xC943, 0x8481, 0xC944, 0x8482, 0xB5D9, + 0x8483, 0xC945, 0x8484, 0xC946, 0x8485, 0xC947, 0x8486, 0xC948, 0x8487, 0xDDDB, 0x8488, 0xDDDC, 0x8489, 0xDDDE, 0x848A, 0xC949, + 0x848B, 0xBDAF, 0x848C, 0xDDE4, 0x848D, 0xC94A, 0x848E, 0xDDE5, 0x848F, 0xC94B, 0x8490, 0xC94C, 0x8491, 0xC94D, 0x8492, 0xC94E, + 0x8493, 0xC94F, 0x8494, 0xC950, 0x8495, 0xC951, 0x8496, 0xC952, 0x8497, 0xDDF5, 0x8498, 0xC953, 0x8499, 0xC3C9, 0x849A, 0xC954, + 0x849B, 0xC955, 0x849C, 0xCBE2, 0x849D, 0xC956, 0x849E, 0xC957, 0x849F, 0xC958, 0x84A0, 0xC959, 0x84A1, 0xDDF2, 0x84A2, 0xC95A, + 0x84A3, 0xC95B, 0x84A4, 0xC95C, 0x84A5, 0xC95D, 0x84A6, 0xC95E, 0x84A7, 0xC95F, 0x84A8, 0xC960, 0x84A9, 0xC961, 0x84AA, 0xC962, + 0x84AB, 0xC963, 0x84AC, 0xC964, 0x84AD, 0xC965, 0x84AE, 0xC966, 0x84AF, 0xD8E1, 0x84B0, 0xC967, 0x84B1, 0xC968, 0x84B2, 0xC6D1, + 0x84B3, 0xC969, 0x84B4, 0xDDF4, 0x84B5, 0xC96A, 0x84B6, 0xC96B, 0x84B7, 0xC96C, 0x84B8, 0xD5F4, 0x84B9, 0xDDF3, 0x84BA, 0xDDF0, + 0x84BB, 0xC96D, 0x84BC, 0xC96E, 0x84BD, 0xDDEC, 0x84BE, 0xC96F, 0x84BF, 0xDDEF, 0x84C0, 0xC970, 0x84C1, 0xDDE8, 0x84C2, 0xC971, + 0x84C3, 0xC972, 0x84C4, 0xD0EE, 0x84C5, 0xC973, 0x84C6, 0xC974, 0x84C7, 0xC975, 0x84C8, 0xC976, 0x84C9, 0xC8D8, 0x84CA, 0xDDEE, + 0x84CB, 0xC977, 0x84CC, 0xC978, 0x84CD, 0xDDE9, 0x84CE, 0xC979, 0x84CF, 0xC97A, 0x84D0, 0xDDEA, 0x84D1, 0xCBF2, 0x84D2, 0xC97B, + 0x84D3, 0xDDED, 0x84D4, 0xC97C, 0x84D5, 0xC97D, 0x84D6, 0xB1CD, 0x84D7, 0xC97E, 0x84D8, 0xC980, 0x84D9, 0xC981, 0x84DA, 0xC982, + 0x84DB, 0xC983, 0x84DC, 0xC984, 0x84DD, 0xC0B6, 0x84DE, 0xC985, 0x84DF, 0xBCBB, 0x84E0, 0xDDF1, 0x84E1, 0xC986, 0x84E2, 0xC987, + 0x84E3, 0xDDF7, 0x84E4, 0xC988, 0x84E5, 0xDDF6, 0x84E6, 0xDDEB, 0x84E7, 0xC989, 0x84E8, 0xC98A, 0x84E9, 0xC98B, 0x84EA, 0xC98C, + 0x84EB, 0xC98D, 0x84EC, 0xC5EE, 0x84ED, 0xC98E, 0x84EE, 0xC98F, 0x84EF, 0xC990, 0x84F0, 0xDDFB, 0x84F1, 0xC991, 0x84F2, 0xC992, + 0x84F3, 0xC993, 0x84F4, 0xC994, 0x84F5, 0xC995, 0x84F6, 0xC996, 0x84F7, 0xC997, 0x84F8, 0xC998, 0x84F9, 0xC999, 0x84FA, 0xC99A, + 0x84FB, 0xC99B, 0x84FC, 0xDEA4, 0x84FD, 0xC99C, 0x84FE, 0xC99D, 0x84FF, 0xDEA3, 0x8500, 0xC99E, 0x8501, 0xC99F, 0x8502, 0xC9A0, + 0x8503, 0xCA40, 0x8504, 0xCA41, 0x8505, 0xCA42, 0x8506, 0xCA43, 0x8507, 0xCA44, 0x8508, 0xCA45, 0x8509, 0xCA46, 0x850A, 0xCA47, + 0x850B, 0xCA48, 0x850C, 0xDDF8, 0x850D, 0xCA49, 0x850E, 0xCA4A, 0x850F, 0xCA4B, 0x8510, 0xCA4C, 0x8511, 0xC3EF, 0x8512, 0xCA4D, + 0x8513, 0xC2FB, 0x8514, 0xCA4E, 0x8515, 0xCA4F, 0x8516, 0xCA50, 0x8517, 0xD5E1, 0x8518, 0xCA51, 0x8519, 0xCA52, 0x851A, 0xCEB5, + 0x851B, 0xCA53, 0x851C, 0xCA54, 0x851D, 0xCA55, 0x851E, 0xCA56, 0x851F, 0xDDFD, 0x8520, 0xCA57, 0x8521, 0xB2CC, 0x8522, 0xCA58, + 0x8523, 0xCA59, 0x8524, 0xCA5A, 0x8525, 0xCA5B, 0x8526, 0xCA5C, 0x8527, 0xCA5D, 0x8528, 0xCA5E, 0x8529, 0xCA5F, 0x852A, 0xCA60, + 0x852B, 0xC4E8, 0x852C, 0xCADF, 0x852D, 0xCA61, 0x852E, 0xCA62, 0x852F, 0xCA63, 0x8530, 0xCA64, 0x8531, 0xCA65, 0x8532, 0xCA66, + 0x8533, 0xCA67, 0x8534, 0xCA68, 0x8535, 0xCA69, 0x8536, 0xCA6A, 0x8537, 0xC7BE, 0x8538, 0xDDFA, 0x8539, 0xDDFC, 0x853A, 0xDDFE, + 0x853B, 0xDEA2, 0x853C, 0xB0AA, 0x853D, 0xB1CE, 0x853E, 0xCA6B, 0x853F, 0xCA6C, 0x8540, 0xCA6D, 0x8541, 0xCA6E, 0x8542, 0xCA6F, + 0x8543, 0xDEAC, 0x8544, 0xCA70, 0x8545, 0xCA71, 0x8546, 0xCA72, 0x8547, 0xCA73, 0x8548, 0xDEA6, 0x8549, 0xBDB6, 0x854A, 0xC8EF, + 0x854B, 0xCA74, 0x854C, 0xCA75, 0x854D, 0xCA76, 0x854E, 0xCA77, 0x854F, 0xCA78, 0x8550, 0xCA79, 0x8551, 0xCA7A, 0x8552, 0xCA7B, + 0x8553, 0xCA7C, 0x8554, 0xCA7D, 0x8555, 0xCA7E, 0x8556, 0xDEA1, 0x8557, 0xCA80, 0x8558, 0xCA81, 0x8559, 0xDEA5, 0x855A, 0xCA82, + 0x855B, 0xCA83, 0x855C, 0xCA84, 0x855D, 0xCA85, 0x855E, 0xDEA9, 0x855F, 0xCA86, 0x8560, 0xCA87, 0x8561, 0xCA88, 0x8562, 0xCA89, + 0x8563, 0xCA8A, 0x8564, 0xDEA8, 0x8565, 0xCA8B, 0x8566, 0xCA8C, 0x8567, 0xCA8D, 0x8568, 0xDEA7, 0x8569, 0xCA8E, 0x856A, 0xCA8F, + 0x856B, 0xCA90, 0x856C, 0xCA91, 0x856D, 0xCA92, 0x856E, 0xCA93, 0x856F, 0xCA94, 0x8570, 0xCA95, 0x8571, 0xCA96, 0x8572, 0xDEAD, + 0x8573, 0xCA97, 0x8574, 0xD4CC, 0x8575, 0xCA98, 0x8576, 0xCA99, 0x8577, 0xCA9A, 0x8578, 0xCA9B, 0x8579, 0xDEB3, 0x857A, 0xDEAA, + 0x857B, 0xDEAE, 0x857C, 0xCA9C, 0x857D, 0xCA9D, 0x857E, 0xC0D9, 0x857F, 0xCA9E, 0x8580, 0xCA9F, 0x8581, 0xCAA0, 0x8582, 0xCB40, + 0x8583, 0xCB41, 0x8584, 0xB1A1, 0x8585, 0xDEB6, 0x8586, 0xCB42, 0x8587, 0xDEB1, 0x8588, 0xCB43, 0x8589, 0xCB44, 0x858A, 0xCB45, + 0x858B, 0xCB46, 0x858C, 0xCB47, 0x858D, 0xCB48, 0x858E, 0xCB49, 0x858F, 0xDEB2, 0x8590, 0xCB4A, 0x8591, 0xCB4B, 0x8592, 0xCB4C, + 0x8593, 0xCB4D, 0x8594, 0xCB4E, 0x8595, 0xCB4F, 0x8596, 0xCB50, 0x8597, 0xCB51, 0x8598, 0xCB52, 0x8599, 0xCB53, 0x859A, 0xCB54, + 0x859B, 0xD1A6, 0x859C, 0xDEB5, 0x859D, 0xCB55, 0x859E, 0xCB56, 0x859F, 0xCB57, 0x85A0, 0xCB58, 0x85A1, 0xCB59, 0x85A2, 0xCB5A, + 0x85A3, 0xCB5B, 0x85A4, 0xDEAF, 0x85A5, 0xCB5C, 0x85A6, 0xCB5D, 0x85A7, 0xCB5E, 0x85A8, 0xDEB0, 0x85A9, 0xCB5F, 0x85AA, 0xD0BD, + 0x85AB, 0xCB60, 0x85AC, 0xCB61, 0x85AD, 0xCB62, 0x85AE, 0xDEB4, 0x85AF, 0xCAED, 0x85B0, 0xDEB9, 0x85B1, 0xCB63, 0x85B2, 0xCB64, + 0x85B3, 0xCB65, 0x85B4, 0xCB66, 0x85B5, 0xCB67, 0x85B6, 0xCB68, 0x85B7, 0xDEB8, 0x85B8, 0xCB69, 0x85B9, 0xDEB7, 0x85BA, 0xCB6A, + 0x85BB, 0xCB6B, 0x85BC, 0xCB6C, 0x85BD, 0xCB6D, 0x85BE, 0xCB6E, 0x85BF, 0xCB6F, 0x85C0, 0xCB70, 0x85C1, 0xDEBB, 0x85C2, 0xCB71, + 0x85C3, 0xCB72, 0x85C4, 0xCB73, 0x85C5, 0xCB74, 0x85C6, 0xCB75, 0x85C7, 0xCB76, 0x85C8, 0xCB77, 0x85C9, 0xBDE5, 0x85CA, 0xCB78, + 0x85CB, 0xCB79, 0x85CC, 0xCB7A, 0x85CD, 0xCB7B, 0x85CE, 0xCB7C, 0x85CF, 0xB2D8, 0x85D0, 0xC3EA, 0x85D1, 0xCB7D, 0x85D2, 0xCB7E, + 0x85D3, 0xDEBA, 0x85D4, 0xCB80, 0x85D5, 0xC5BA, 0x85D6, 0xCB81, 0x85D7, 0xCB82, 0x85D8, 0xCB83, 0x85D9, 0xCB84, 0x85DA, 0xCB85, + 0x85DB, 0xCB86, 0x85DC, 0xDEBC, 0x85DD, 0xCB87, 0x85DE, 0xCB88, 0x85DF, 0xCB89, 0x85E0, 0xCB8A, 0x85E1, 0xCB8B, 0x85E2, 0xCB8C, + 0x85E3, 0xCB8D, 0x85E4, 0xCCD9, 0x85E5, 0xCB8E, 0x85E6, 0xCB8F, 0x85E7, 0xCB90, 0x85E8, 0xCB91, 0x85E9, 0xB7AA, 0x85EA, 0xCB92, + 0x85EB, 0xCB93, 0x85EC, 0xCB94, 0x85ED, 0xCB95, 0x85EE, 0xCB96, 0x85EF, 0xCB97, 0x85F0, 0xCB98, 0x85F1, 0xCB99, 0x85F2, 0xCB9A, + 0x85F3, 0xCB9B, 0x85F4, 0xCB9C, 0x85F5, 0xCB9D, 0x85F6, 0xCB9E, 0x85F7, 0xCB9F, 0x85F8, 0xCBA0, 0x85F9, 0xCC40, 0x85FA, 0xCC41, + 0x85FB, 0xD4E5, 0x85FC, 0xCC42, 0x85FD, 0xCC43, 0x85FE, 0xCC44, 0x85FF, 0xDEBD, 0x8600, 0xCC45, 0x8601, 0xCC46, 0x8602, 0xCC47, + 0x8603, 0xCC48, 0x8604, 0xCC49, 0x8605, 0xDEBF, 0x8606, 0xCC4A, 0x8607, 0xCC4B, 0x8608, 0xCC4C, 0x8609, 0xCC4D, 0x860A, 0xCC4E, + 0x860B, 0xCC4F, 0x860C, 0xCC50, 0x860D, 0xCC51, 0x860E, 0xCC52, 0x860F, 0xCC53, 0x8610, 0xCC54, 0x8611, 0xC4A2, 0x8612, 0xCC55, + 0x8613, 0xCC56, 0x8614, 0xCC57, 0x8615, 0xCC58, 0x8616, 0xDEC1, 0x8617, 0xCC59, 0x8618, 0xCC5A, 0x8619, 0xCC5B, 0x861A, 0xCC5C, + 0x861B, 0xCC5D, 0x861C, 0xCC5E, 0x861D, 0xCC5F, 0x861E, 0xCC60, 0x861F, 0xCC61, 0x8620, 0xCC62, 0x8621, 0xCC63, 0x8622, 0xCC64, + 0x8623, 0xCC65, 0x8624, 0xCC66, 0x8625, 0xCC67, 0x8626, 0xCC68, 0x8627, 0xDEBE, 0x8628, 0xCC69, 0x8629, 0xDEC0, 0x862A, 0xCC6A, + 0x862B, 0xCC6B, 0x862C, 0xCC6C, 0x862D, 0xCC6D, 0x862E, 0xCC6E, 0x862F, 0xCC6F, 0x8630, 0xCC70, 0x8631, 0xCC71, 0x8632, 0xCC72, + 0x8633, 0xCC73, 0x8634, 0xCC74, 0x8635, 0xCC75, 0x8636, 0xCC76, 0x8637, 0xCC77, 0x8638, 0xD5BA, 0x8639, 0xCC78, 0x863A, 0xCC79, + 0x863B, 0xCC7A, 0x863C, 0xDEC2, 0x863D, 0xCC7B, 0x863E, 0xCC7C, 0x863F, 0xCC7D, 0x8640, 0xCC7E, 0x8641, 0xCC80, 0x8642, 0xCC81, + 0x8643, 0xCC82, 0x8644, 0xCC83, 0x8645, 0xCC84, 0x8646, 0xCC85, 0x8647, 0xCC86, 0x8648, 0xCC87, 0x8649, 0xCC88, 0x864A, 0xCC89, + 0x864B, 0xCC8A, 0x864C, 0xCC8B, 0x864D, 0xF2AE, 0x864E, 0xBBA2, 0x864F, 0xC2B2, 0x8650, 0xC5B0, 0x8651, 0xC2C7, 0x8652, 0xCC8C, + 0x8653, 0xCC8D, 0x8654, 0xF2AF, 0x8655, 0xCC8E, 0x8656, 0xCC8F, 0x8657, 0xCC90, 0x8658, 0xCC91, 0x8659, 0xCC92, 0x865A, 0xD0E9, + 0x865B, 0xCC93, 0x865C, 0xCC94, 0x865D, 0xCC95, 0x865E, 0xD3DD, 0x865F, 0xCC96, 0x8660, 0xCC97, 0x8661, 0xCC98, 0x8662, 0xEBBD, + 0x8663, 0xCC99, 0x8664, 0xCC9A, 0x8665, 0xCC9B, 0x8666, 0xCC9C, 0x8667, 0xCC9D, 0x8668, 0xCC9E, 0x8669, 0xCC9F, 0x866A, 0xCCA0, + 0x866B, 0xB3E6, 0x866C, 0xF2B0, 0x866D, 0xCD40, 0x866E, 0xF2B1, 0x866F, 0xCD41, 0x8670, 0xCD42, 0x8671, 0xCAAD, 0x8672, 0xCD43, + 0x8673, 0xCD44, 0x8674, 0xCD45, 0x8675, 0xCD46, 0x8676, 0xCD47, 0x8677, 0xCD48, 0x8678, 0xCD49, 0x8679, 0xBAE7, 0x867A, 0xF2B3, + 0x867B, 0xF2B5, 0x867C, 0xF2B4, 0x867D, 0xCBE4, 0x867E, 0xCFBA, 0x867F, 0xF2B2, 0x8680, 0xCAB4, 0x8681, 0xD2CF, 0x8682, 0xC2EC, + 0x8683, 0xCD4A, 0x8684, 0xCD4B, 0x8685, 0xCD4C, 0x8686, 0xCD4D, 0x8687, 0xCD4E, 0x8688, 0xCD4F, 0x8689, 0xCD50, 0x868A, 0xCEC3, + 0x868B, 0xF2B8, 0x868C, 0xB0F6, 0x868D, 0xF2B7, 0x868E, 0xCD51, 0x868F, 0xCD52, 0x8690, 0xCD53, 0x8691, 0xCD54, 0x8692, 0xCD55, + 0x8693, 0xF2BE, 0x8694, 0xCD56, 0x8695, 0xB2CF, 0x8696, 0xCD57, 0x8697, 0xCD58, 0x8698, 0xCD59, 0x8699, 0xCD5A, 0x869A, 0xCD5B, + 0x869B, 0xCD5C, 0x869C, 0xD1C1, 0x869D, 0xF2BA, 0x869E, 0xCD5D, 0x869F, 0xCD5E, 0x86A0, 0xCD5F, 0x86A1, 0xCD60, 0x86A2, 0xCD61, + 0x86A3, 0xF2BC, 0x86A4, 0xD4E9, 0x86A5, 0xCD62, 0x86A6, 0xCD63, 0x86A7, 0xF2BB, 0x86A8, 0xF2B6, 0x86A9, 0xF2BF, 0x86AA, 0xF2BD, + 0x86AB, 0xCD64, 0x86AC, 0xF2B9, 0x86AD, 0xCD65, 0x86AE, 0xCD66, 0x86AF, 0xF2C7, 0x86B0, 0xF2C4, 0x86B1, 0xF2C6, 0x86B2, 0xCD67, + 0x86B3, 0xCD68, 0x86B4, 0xF2CA, 0x86B5, 0xF2C2, 0x86B6, 0xF2C0, 0x86B7, 0xCD69, 0x86B8, 0xCD6A, 0x86B9, 0xCD6B, 0x86BA, 0xF2C5, + 0x86BB, 0xCD6C, 0x86BC, 0xCD6D, 0x86BD, 0xCD6E, 0x86BE, 0xCD6F, 0x86BF, 0xCD70, 0x86C0, 0xD6FB, 0x86C1, 0xCD71, 0x86C2, 0xCD72, + 0x86C3, 0xCD73, 0x86C4, 0xF2C1, 0x86C5, 0xCD74, 0x86C6, 0xC7F9, 0x86C7, 0xC9DF, 0x86C8, 0xCD75, 0x86C9, 0xF2C8, 0x86CA, 0xB9C6, + 0x86CB, 0xB5B0, 0x86CC, 0xCD76, 0x86CD, 0xCD77, 0x86CE, 0xF2C3, 0x86CF, 0xF2C9, 0x86D0, 0xF2D0, 0x86D1, 0xF2D6, 0x86D2, 0xCD78, + 0x86D3, 0xCD79, 0x86D4, 0xBBD7, 0x86D5, 0xCD7A, 0x86D6, 0xCD7B, 0x86D7, 0xCD7C, 0x86D8, 0xF2D5, 0x86D9, 0xCDDC, 0x86DA, 0xCD7D, + 0x86DB, 0xD6EB, 0x86DC, 0xCD7E, 0x86DD, 0xCD80, 0x86DE, 0xF2D2, 0x86DF, 0xF2D4, 0x86E0, 0xCD81, 0x86E1, 0xCD82, 0x86E2, 0xCD83, + 0x86E3, 0xCD84, 0x86E4, 0xB8F2, 0x86E5, 0xCD85, 0x86E6, 0xCD86, 0x86E7, 0xCD87, 0x86E8, 0xCD88, 0x86E9, 0xF2CB, 0x86EA, 0xCD89, + 0x86EB, 0xCD8A, 0x86EC, 0xCD8B, 0x86ED, 0xF2CE, 0x86EE, 0xC2F9, 0x86EF, 0xCD8C, 0x86F0, 0xD5DD, 0x86F1, 0xF2CC, 0x86F2, 0xF2CD, + 0x86F3, 0xF2CF, 0x86F4, 0xF2D3, 0x86F5, 0xCD8D, 0x86F6, 0xCD8E, 0x86F7, 0xCD8F, 0x86F8, 0xF2D9, 0x86F9, 0xD3BC, 0x86FA, 0xCD90, + 0x86FB, 0xCD91, 0x86FC, 0xCD92, 0x86FD, 0xCD93, 0x86FE, 0xB6EA, 0x86FF, 0xCD94, 0x8700, 0xCAF1, 0x8701, 0xCD95, 0x8702, 0xB7E4, + 0x8703, 0xF2D7, 0x8704, 0xCD96, 0x8705, 0xCD97, 0x8706, 0xCD98, 0x8707, 0xF2D8, 0x8708, 0xF2DA, 0x8709, 0xF2DD, 0x870A, 0xF2DB, + 0x870B, 0xCD99, 0x870C, 0xCD9A, 0x870D, 0xF2DC, 0x870E, 0xCD9B, 0x870F, 0xCD9C, 0x8710, 0xCD9D, 0x8711, 0xCD9E, 0x8712, 0xD1D1, + 0x8713, 0xF2D1, 0x8714, 0xCD9F, 0x8715, 0xCDC9, 0x8716, 0xCDA0, 0x8717, 0xCECF, 0x8718, 0xD6A9, 0x8719, 0xCE40, 0x871A, 0xF2E3, + 0x871B, 0xCE41, 0x871C, 0xC3DB, 0x871D, 0xCE42, 0x871E, 0xF2E0, 0x871F, 0xCE43, 0x8720, 0xCE44, 0x8721, 0xC0AF, 0x8722, 0xF2EC, + 0x8723, 0xF2DE, 0x8724, 0xCE45, 0x8725, 0xF2E1, 0x8726, 0xCE46, 0x8727, 0xCE47, 0x8728, 0xCE48, 0x8729, 0xF2E8, 0x872A, 0xCE49, + 0x872B, 0xCE4A, 0x872C, 0xCE4B, 0x872D, 0xCE4C, 0x872E, 0xF2E2, 0x872F, 0xCE4D, 0x8730, 0xCE4E, 0x8731, 0xF2E7, 0x8732, 0xCE4F, + 0x8733, 0xCE50, 0x8734, 0xF2E6, 0x8735, 0xCE51, 0x8736, 0xCE52, 0x8737, 0xF2E9, 0x8738, 0xCE53, 0x8739, 0xCE54, 0x873A, 0xCE55, + 0x873B, 0xF2DF, 0x873C, 0xCE56, 0x873D, 0xCE57, 0x873E, 0xF2E4, 0x873F, 0xF2EA, 0x8740, 0xCE58, 0x8741, 0xCE59, 0x8742, 0xCE5A, + 0x8743, 0xCE5B, 0x8744, 0xCE5C, 0x8745, 0xCE5D, 0x8746, 0xCE5E, 0x8747, 0xD3AC, 0x8748, 0xF2E5, 0x8749, 0xB2F5, 0x874A, 0xCE5F, + 0x874B, 0xCE60, 0x874C, 0xF2F2, 0x874D, 0xCE61, 0x874E, 0xD0AB, 0x874F, 0xCE62, 0x8750, 0xCE63, 0x8751, 0xCE64, 0x8752, 0xCE65, + 0x8753, 0xF2F5, 0x8754, 0xCE66, 0x8755, 0xCE67, 0x8756, 0xCE68, 0x8757, 0xBBC8, 0x8758, 0xCE69, 0x8759, 0xF2F9, 0x875A, 0xCE6A, + 0x875B, 0xCE6B, 0x875C, 0xCE6C, 0x875D, 0xCE6D, 0x875E, 0xCE6E, 0x875F, 0xCE6F, 0x8760, 0xF2F0, 0x8761, 0xCE70, 0x8762, 0xCE71, + 0x8763, 0xF2F6, 0x8764, 0xF2F8, 0x8765, 0xF2FA, 0x8766, 0xCE72, 0x8767, 0xCE73, 0x8768, 0xCE74, 0x8769, 0xCE75, 0x876A, 0xCE76, + 0x876B, 0xCE77, 0x876C, 0xCE78, 0x876D, 0xCE79, 0x876E, 0xF2F3, 0x876F, 0xCE7A, 0x8770, 0xF2F1, 0x8771, 0xCE7B, 0x8772, 0xCE7C, + 0x8773, 0xCE7D, 0x8774, 0xBAFB, 0x8775, 0xCE7E, 0x8776, 0xB5FB, 0x8777, 0xCE80, 0x8778, 0xCE81, 0x8779, 0xCE82, 0x877A, 0xCE83, + 0x877B, 0xF2EF, 0x877C, 0xF2F7, 0x877D, 0xF2ED, 0x877E, 0xF2EE, 0x877F, 0xCE84, 0x8780, 0xCE85, 0x8781, 0xCE86, 0x8782, 0xF2EB, + 0x8783, 0xF3A6, 0x8784, 0xCE87, 0x8785, 0xF3A3, 0x8786, 0xCE88, 0x8787, 0xCE89, 0x8788, 0xF3A2, 0x8789, 0xCE8A, 0x878A, 0xCE8B, + 0x878B, 0xF2F4, 0x878C, 0xCE8C, 0x878D, 0xC8DA, 0x878E, 0xCE8D, 0x878F, 0xCE8E, 0x8790, 0xCE8F, 0x8791, 0xCE90, 0x8792, 0xCE91, + 0x8793, 0xF2FB, 0x8794, 0xCE92, 0x8795, 0xCE93, 0x8796, 0xCE94, 0x8797, 0xF3A5, 0x8798, 0xCE95, 0x8799, 0xCE96, 0x879A, 0xCE97, + 0x879B, 0xCE98, 0x879C, 0xCE99, 0x879D, 0xCE9A, 0x879E, 0xCE9B, 0x879F, 0xC3F8, 0x87A0, 0xCE9C, 0x87A1, 0xCE9D, 0x87A2, 0xCE9E, + 0x87A3, 0xCE9F, 0x87A4, 0xCEA0, 0x87A5, 0xCF40, 0x87A6, 0xCF41, 0x87A7, 0xCF42, 0x87A8, 0xF2FD, 0x87A9, 0xCF43, 0x87AA, 0xCF44, + 0x87AB, 0xF3A7, 0x87AC, 0xF3A9, 0x87AD, 0xF3A4, 0x87AE, 0xCF45, 0x87AF, 0xF2FC, 0x87B0, 0xCF46, 0x87B1, 0xCF47, 0x87B2, 0xCF48, + 0x87B3, 0xF3AB, 0x87B4, 0xCF49, 0x87B5, 0xF3AA, 0x87B6, 0xCF4A, 0x87B7, 0xCF4B, 0x87B8, 0xCF4C, 0x87B9, 0xCF4D, 0x87BA, 0xC2DD, + 0x87BB, 0xCF4E, 0x87BC, 0xCF4F, 0x87BD, 0xF3AE, 0x87BE, 0xCF50, 0x87BF, 0xCF51, 0x87C0, 0xF3B0, 0x87C1, 0xCF52, 0x87C2, 0xCF53, + 0x87C3, 0xCF54, 0x87C4, 0xCF55, 0x87C5, 0xCF56, 0x87C6, 0xF3A1, 0x87C7, 0xCF57, 0x87C8, 0xCF58, 0x87C9, 0xCF59, 0x87CA, 0xF3B1, + 0x87CB, 0xF3AC, 0x87CC, 0xCF5A, 0x87CD, 0xCF5B, 0x87CE, 0xCF5C, 0x87CF, 0xCF5D, 0x87D0, 0xCF5E, 0x87D1, 0xF3AF, 0x87D2, 0xF2FE, + 0x87D3, 0xF3AD, 0x87D4, 0xCF5F, 0x87D5, 0xCF60, 0x87D6, 0xCF61, 0x87D7, 0xCF62, 0x87D8, 0xCF63, 0x87D9, 0xCF64, 0x87DA, 0xCF65, + 0x87DB, 0xF3B2, 0x87DC, 0xCF66, 0x87DD, 0xCF67, 0x87DE, 0xCF68, 0x87DF, 0xCF69, 0x87E0, 0xF3B4, 0x87E1, 0xCF6A, 0x87E2, 0xCF6B, + 0x87E3, 0xCF6C, 0x87E4, 0xCF6D, 0x87E5, 0xF3A8, 0x87E6, 0xCF6E, 0x87E7, 0xCF6F, 0x87E8, 0xCF70, 0x87E9, 0xCF71, 0x87EA, 0xF3B3, + 0x87EB, 0xCF72, 0x87EC, 0xCF73, 0x87ED, 0xCF74, 0x87EE, 0xF3B5, 0x87EF, 0xCF75, 0x87F0, 0xCF76, 0x87F1, 0xCF77, 0x87F2, 0xCF78, + 0x87F3, 0xCF79, 0x87F4, 0xCF7A, 0x87F5, 0xCF7B, 0x87F6, 0xCF7C, 0x87F7, 0xCF7D, 0x87F8, 0xCF7E, 0x87F9, 0xD0B7, 0x87FA, 0xCF80, + 0x87FB, 0xCF81, 0x87FC, 0xCF82, 0x87FD, 0xCF83, 0x87FE, 0xF3B8, 0x87FF, 0xCF84, 0x8800, 0xCF85, 0x8801, 0xCF86, 0x8802, 0xCF87, + 0x8803, 0xD9F9, 0x8804, 0xCF88, 0x8805, 0xCF89, 0x8806, 0xCF8A, 0x8807, 0xCF8B, 0x8808, 0xCF8C, 0x8809, 0xCF8D, 0x880A, 0xF3B9, + 0x880B, 0xCF8E, 0x880C, 0xCF8F, 0x880D, 0xCF90, 0x880E, 0xCF91, 0x880F, 0xCF92, 0x8810, 0xCF93, 0x8811, 0xCF94, 0x8812, 0xCF95, + 0x8813, 0xF3B7, 0x8814, 0xCF96, 0x8815, 0xC8E4, 0x8816, 0xF3B6, 0x8817, 0xCF97, 0x8818, 0xCF98, 0x8819, 0xCF99, 0x881A, 0xCF9A, + 0x881B, 0xF3BA, 0x881C, 0xCF9B, 0x881D, 0xCF9C, 0x881E, 0xCF9D, 0x881F, 0xCF9E, 0x8820, 0xCF9F, 0x8821, 0xF3BB, 0x8822, 0xB4C0, + 0x8823, 0xCFA0, 0x8824, 0xD040, 0x8825, 0xD041, 0x8826, 0xD042, 0x8827, 0xD043, 0x8828, 0xD044, 0x8829, 0xD045, 0x882A, 0xD046, + 0x882B, 0xD047, 0x882C, 0xD048, 0x882D, 0xD049, 0x882E, 0xD04A, 0x882F, 0xD04B, 0x8830, 0xD04C, 0x8831, 0xD04D, 0x8832, 0xEEC3, + 0x8833, 0xD04E, 0x8834, 0xD04F, 0x8835, 0xD050, 0x8836, 0xD051, 0x8837, 0xD052, 0x8838, 0xD053, 0x8839, 0xF3BC, 0x883A, 0xD054, + 0x883B, 0xD055, 0x883C, 0xF3BD, 0x883D, 0xD056, 0x883E, 0xD057, 0x883F, 0xD058, 0x8840, 0xD1AA, 0x8841, 0xD059, 0x8842, 0xD05A, + 0x8843, 0xD05B, 0x8844, 0xF4AC, 0x8845, 0xD0C6, 0x8846, 0xD05C, 0x8847, 0xD05D, 0x8848, 0xD05E, 0x8849, 0xD05F, 0x884A, 0xD060, + 0x884B, 0xD061, 0x884C, 0xD0D0, 0x884D, 0xD1DC, 0x884E, 0xD062, 0x884F, 0xD063, 0x8850, 0xD064, 0x8851, 0xD065, 0x8852, 0xD066, + 0x8853, 0xD067, 0x8854, 0xCFCE, 0x8855, 0xD068, 0x8856, 0xD069, 0x8857, 0xBDD6, 0x8858, 0xD06A, 0x8859, 0xD1C3, 0x885A, 0xD06B, + 0x885B, 0xD06C, 0x885C, 0xD06D, 0x885D, 0xD06E, 0x885E, 0xD06F, 0x885F, 0xD070, 0x8860, 0xD071, 0x8861, 0xBAE2, 0x8862, 0xE1E9, + 0x8863, 0xD2C2, 0x8864, 0xF1C2, 0x8865, 0xB2B9, 0x8866, 0xD072, 0x8867, 0xD073, 0x8868, 0xB1ED, 0x8869, 0xF1C3, 0x886A, 0xD074, + 0x886B, 0xC9C0, 0x886C, 0xB3C4, 0x886D, 0xD075, 0x886E, 0xD9F2, 0x886F, 0xD076, 0x8870, 0xCBA5, 0x8871, 0xD077, 0x8872, 0xF1C4, + 0x8873, 0xD078, 0x8874, 0xD079, 0x8875, 0xD07A, 0x8876, 0xD07B, 0x8877, 0xD6D4, 0x8878, 0xD07C, 0x8879, 0xD07D, 0x887A, 0xD07E, + 0x887B, 0xD080, 0x887C, 0xD081, 0x887D, 0xF1C5, 0x887E, 0xF4C0, 0x887F, 0xF1C6, 0x8880, 0xD082, 0x8881, 0xD4AC, 0x8882, 0xF1C7, + 0x8883, 0xD083, 0x8884, 0xB0C0, 0x8885, 0xF4C1, 0x8886, 0xD084, 0x8887, 0xD085, 0x8888, 0xF4C2, 0x8889, 0xD086, 0x888A, 0xD087, + 0x888B, 0xB4FC, 0x888C, 0xD088, 0x888D, 0xC5DB, 0x888E, 0xD089, 0x888F, 0xD08A, 0x8890, 0xD08B, 0x8891, 0xD08C, 0x8892, 0xCCBB, + 0x8893, 0xD08D, 0x8894, 0xD08E, 0x8895, 0xD08F, 0x8896, 0xD0E4, 0x8897, 0xD090, 0x8898, 0xD091, 0x8899, 0xD092, 0x889A, 0xD093, + 0x889B, 0xD094, 0x889C, 0xCDE0, 0x889D, 0xD095, 0x889E, 0xD096, 0x889F, 0xD097, 0x88A0, 0xD098, 0x88A1, 0xD099, 0x88A2, 0xF1C8, + 0x88A3, 0xD09A, 0x88A4, 0xD9F3, 0x88A5, 0xD09B, 0x88A6, 0xD09C, 0x88A7, 0xD09D, 0x88A8, 0xD09E, 0x88A9, 0xD09F, 0x88AA, 0xD0A0, + 0x88AB, 0xB1BB, 0x88AC, 0xD140, 0x88AD, 0xCFAE, 0x88AE, 0xD141, 0x88AF, 0xD142, 0x88B0, 0xD143, 0x88B1, 0xB8A4, 0x88B2, 0xD144, + 0x88B3, 0xD145, 0x88B4, 0xD146, 0x88B5, 0xD147, 0x88B6, 0xD148, 0x88B7, 0xF1CA, 0x88B8, 0xD149, 0x88B9, 0xD14A, 0x88BA, 0xD14B, + 0x88BB, 0xD14C, 0x88BC, 0xF1CB, 0x88BD, 0xD14D, 0x88BE, 0xD14E, 0x88BF, 0xD14F, 0x88C0, 0xD150, 0x88C1, 0xB2C3, 0x88C2, 0xC1D1, + 0x88C3, 0xD151, 0x88C4, 0xD152, 0x88C5, 0xD7B0, 0x88C6, 0xF1C9, 0x88C7, 0xD153, 0x88C8, 0xD154, 0x88C9, 0xF1CC, 0x88CA, 0xD155, + 0x88CB, 0xD156, 0x88CC, 0xD157, 0x88CD, 0xD158, 0x88CE, 0xF1CE, 0x88CF, 0xD159, 0x88D0, 0xD15A, 0x88D1, 0xD15B, 0x88D2, 0xD9F6, + 0x88D3, 0xD15C, 0x88D4, 0xD2E1, 0x88D5, 0xD4A3, 0x88D6, 0xD15D, 0x88D7, 0xD15E, 0x88D8, 0xF4C3, 0x88D9, 0xC8B9, 0x88DA, 0xD15F, + 0x88DB, 0xD160, 0x88DC, 0xD161, 0x88DD, 0xD162, 0x88DE, 0xD163, 0x88DF, 0xF4C4, 0x88E0, 0xD164, 0x88E1, 0xD165, 0x88E2, 0xF1CD, + 0x88E3, 0xF1CF, 0x88E4, 0xBFE3, 0x88E5, 0xF1D0, 0x88E6, 0xD166, 0x88E7, 0xD167, 0x88E8, 0xF1D4, 0x88E9, 0xD168, 0x88EA, 0xD169, + 0x88EB, 0xD16A, 0x88EC, 0xD16B, 0x88ED, 0xD16C, 0x88EE, 0xD16D, 0x88EF, 0xD16E, 0x88F0, 0xF1D6, 0x88F1, 0xF1D1, 0x88F2, 0xD16F, + 0x88F3, 0xC9D1, 0x88F4, 0xC5E1, 0x88F5, 0xD170, 0x88F6, 0xD171, 0x88F7, 0xD172, 0x88F8, 0xC2E3, 0x88F9, 0xB9FC, 0x88FA, 0xD173, + 0x88FB, 0xD174, 0x88FC, 0xF1D3, 0x88FD, 0xD175, 0x88FE, 0xF1D5, 0x88FF, 0xD176, 0x8900, 0xD177, 0x8901, 0xD178, 0x8902, 0xB9D3, + 0x8903, 0xD179, 0x8904, 0xD17A, 0x8905, 0xD17B, 0x8906, 0xD17C, 0x8907, 0xD17D, 0x8908, 0xD17E, 0x8909, 0xD180, 0x890A, 0xF1DB, + 0x890B, 0xD181, 0x890C, 0xD182, 0x890D, 0xD183, 0x890E, 0xD184, 0x890F, 0xD185, 0x8910, 0xBAD6, 0x8911, 0xD186, 0x8912, 0xB0FD, + 0x8913, 0xF1D9, 0x8914, 0xD187, 0x8915, 0xD188, 0x8916, 0xD189, 0x8917, 0xD18A, 0x8918, 0xD18B, 0x8919, 0xF1D8, 0x891A, 0xF1D2, + 0x891B, 0xF1DA, 0x891C, 0xD18C, 0x891D, 0xD18D, 0x891E, 0xD18E, 0x891F, 0xD18F, 0x8920, 0xD190, 0x8921, 0xF1D7, 0x8922, 0xD191, + 0x8923, 0xD192, 0x8924, 0xD193, 0x8925, 0xC8EC, 0x8926, 0xD194, 0x8927, 0xD195, 0x8928, 0xD196, 0x8929, 0xD197, 0x892A, 0xCDCA, + 0x892B, 0xF1DD, 0x892C, 0xD198, 0x892D, 0xD199, 0x892E, 0xD19A, 0x892F, 0xD19B, 0x8930, 0xE5BD, 0x8931, 0xD19C, 0x8932, 0xD19D, + 0x8933, 0xD19E, 0x8934, 0xF1DC, 0x8935, 0xD19F, 0x8936, 0xF1DE, 0x8937, 0xD1A0, 0x8938, 0xD240, 0x8939, 0xD241, 0x893A, 0xD242, + 0x893B, 0xD243, 0x893C, 0xD244, 0x893D, 0xD245, 0x893E, 0xD246, 0x893F, 0xD247, 0x8940, 0xD248, 0x8941, 0xF1DF, 0x8942, 0xD249, + 0x8943, 0xD24A, 0x8944, 0xCFE5, 0x8945, 0xD24B, 0x8946, 0xD24C, 0x8947, 0xD24D, 0x8948, 0xD24E, 0x8949, 0xD24F, 0x894A, 0xD250, + 0x894B, 0xD251, 0x894C, 0xD252, 0x894D, 0xD253, 0x894E, 0xD254, 0x894F, 0xD255, 0x8950, 0xD256, 0x8951, 0xD257, 0x8952, 0xD258, + 0x8953, 0xD259, 0x8954, 0xD25A, 0x8955, 0xD25B, 0x8956, 0xD25C, 0x8957, 0xD25D, 0x8958, 0xD25E, 0x8959, 0xD25F, 0x895A, 0xD260, + 0x895B, 0xD261, 0x895C, 0xD262, 0x895D, 0xD263, 0x895E, 0xF4C5, 0x895F, 0xBDF3, 0x8960, 0xD264, 0x8961, 0xD265, 0x8962, 0xD266, + 0x8963, 0xD267, 0x8964, 0xD268, 0x8965, 0xD269, 0x8966, 0xF1E0, 0x8967, 0xD26A, 0x8968, 0xD26B, 0x8969, 0xD26C, 0x896A, 0xD26D, + 0x896B, 0xD26E, 0x896C, 0xD26F, 0x896D, 0xD270, 0x896E, 0xD271, 0x896F, 0xD272, 0x8970, 0xD273, 0x8971, 0xD274, 0x8972, 0xD275, + 0x8973, 0xD276, 0x8974, 0xD277, 0x8975, 0xD278, 0x8976, 0xD279, 0x8977, 0xD27A, 0x8978, 0xD27B, 0x8979, 0xD27C, 0x897A, 0xD27D, + 0x897B, 0xF1E1, 0x897C, 0xD27E, 0x897D, 0xD280, 0x897E, 0xD281, 0x897F, 0xCEF7, 0x8980, 0xD282, 0x8981, 0xD2AA, 0x8982, 0xD283, + 0x8983, 0xF1FB, 0x8984, 0xD284, 0x8985, 0xD285, 0x8986, 0xB8B2, 0x8987, 0xD286, 0x8988, 0xD287, 0x8989, 0xD288, 0x898A, 0xD289, + 0x898B, 0xD28A, 0x898C, 0xD28B, 0x898D, 0xD28C, 0x898E, 0xD28D, 0x898F, 0xD28E, 0x8990, 0xD28F, 0x8991, 0xD290, 0x8992, 0xD291, + 0x8993, 0xD292, 0x8994, 0xD293, 0x8995, 0xD294, 0x8996, 0xD295, 0x8997, 0xD296, 0x8998, 0xD297, 0x8999, 0xD298, 0x899A, 0xD299, + 0x899B, 0xD29A, 0x899C, 0xD29B, 0x899D, 0xD29C, 0x899E, 0xD29D, 0x899F, 0xD29E, 0x89A0, 0xD29F, 0x89A1, 0xD2A0, 0x89A2, 0xD340, + 0x89A3, 0xD341, 0x89A4, 0xD342, 0x89A5, 0xD343, 0x89A6, 0xD344, 0x89A7, 0xD345, 0x89A8, 0xD346, 0x89A9, 0xD347, 0x89AA, 0xD348, + 0x89AB, 0xD349, 0x89AC, 0xD34A, 0x89AD, 0xD34B, 0x89AE, 0xD34C, 0x89AF, 0xD34D, 0x89B0, 0xD34E, 0x89B1, 0xD34F, 0x89B2, 0xD350, + 0x89B3, 0xD351, 0x89B4, 0xD352, 0x89B5, 0xD353, 0x89B6, 0xD354, 0x89B7, 0xD355, 0x89B8, 0xD356, 0x89B9, 0xD357, 0x89BA, 0xD358, + 0x89BB, 0xD359, 0x89BC, 0xD35A, 0x89BD, 0xD35B, 0x89BE, 0xD35C, 0x89BF, 0xD35D, 0x89C0, 0xD35E, 0x89C1, 0xBCFB, 0x89C2, 0xB9DB, + 0x89C3, 0xD35F, 0x89C4, 0xB9E6, 0x89C5, 0xC3D9, 0x89C6, 0xCAD3, 0x89C7, 0xEAE8, 0x89C8, 0xC0C0, 0x89C9, 0xBEF5, 0x89CA, 0xEAE9, + 0x89CB, 0xEAEA, 0x89CC, 0xEAEB, 0x89CD, 0xD360, 0x89CE, 0xEAEC, 0x89CF, 0xEAED, 0x89D0, 0xEAEE, 0x89D1, 0xEAEF, 0x89D2, 0xBDC7, + 0x89D3, 0xD361, 0x89D4, 0xD362, 0x89D5, 0xD363, 0x89D6, 0xF5FB, 0x89D7, 0xD364, 0x89D8, 0xD365, 0x89D9, 0xD366, 0x89DA, 0xF5FD, + 0x89DB, 0xD367, 0x89DC, 0xF5FE, 0x89DD, 0xD368, 0x89DE, 0xF5FC, 0x89DF, 0xD369, 0x89E0, 0xD36A, 0x89E1, 0xD36B, 0x89E2, 0xD36C, + 0x89E3, 0xBDE2, 0x89E4, 0xD36D, 0x89E5, 0xF6A1, 0x89E6, 0xB4A5, 0x89E7, 0xD36E, 0x89E8, 0xD36F, 0x89E9, 0xD370, 0x89EA, 0xD371, + 0x89EB, 0xF6A2, 0x89EC, 0xD372, 0x89ED, 0xD373, 0x89EE, 0xD374, 0x89EF, 0xF6A3, 0x89F0, 0xD375, 0x89F1, 0xD376, 0x89F2, 0xD377, + 0x89F3, 0xECB2, 0x89F4, 0xD378, 0x89F5, 0xD379, 0x89F6, 0xD37A, 0x89F7, 0xD37B, 0x89F8, 0xD37C, 0x89F9, 0xD37D, 0x89FA, 0xD37E, + 0x89FB, 0xD380, 0x89FC, 0xD381, 0x89FD, 0xD382, 0x89FE, 0xD383, 0x89FF, 0xD384, 0x8A00, 0xD1D4, 0x8A01, 0xD385, 0x8A02, 0xD386, + 0x8A03, 0xD387, 0x8A04, 0xD388, 0x8A05, 0xD389, 0x8A06, 0xD38A, 0x8A07, 0xD9EA, 0x8A08, 0xD38B, 0x8A09, 0xD38C, 0x8A0A, 0xD38D, + 0x8A0B, 0xD38E, 0x8A0C, 0xD38F, 0x8A0D, 0xD390, 0x8A0E, 0xD391, 0x8A0F, 0xD392, 0x8A10, 0xD393, 0x8A11, 0xD394, 0x8A12, 0xD395, + 0x8A13, 0xD396, 0x8A14, 0xD397, 0x8A15, 0xD398, 0x8A16, 0xD399, 0x8A17, 0xD39A, 0x8A18, 0xD39B, 0x8A19, 0xD39C, 0x8A1A, 0xD39D, + 0x8A1B, 0xD39E, 0x8A1C, 0xD39F, 0x8A1D, 0xD3A0, 0x8A1E, 0xD440, 0x8A1F, 0xD441, 0x8A20, 0xD442, 0x8A21, 0xD443, 0x8A22, 0xD444, + 0x8A23, 0xD445, 0x8A24, 0xD446, 0x8A25, 0xD447, 0x8A26, 0xD448, 0x8A27, 0xD449, 0x8A28, 0xD44A, 0x8A29, 0xD44B, 0x8A2A, 0xD44C, + 0x8A2B, 0xD44D, 0x8A2C, 0xD44E, 0x8A2D, 0xD44F, 0x8A2E, 0xD450, 0x8A2F, 0xD451, 0x8A30, 0xD452, 0x8A31, 0xD453, 0x8A32, 0xD454, + 0x8A33, 0xD455, 0x8A34, 0xD456, 0x8A35, 0xD457, 0x8A36, 0xD458, 0x8A37, 0xD459, 0x8A38, 0xD45A, 0x8A39, 0xD45B, 0x8A3A, 0xD45C, + 0x8A3B, 0xD45D, 0x8A3C, 0xD45E, 0x8A3D, 0xD45F, 0x8A3E, 0xF6A4, 0x8A3F, 0xD460, 0x8A40, 0xD461, 0x8A41, 0xD462, 0x8A42, 0xD463, + 0x8A43, 0xD464, 0x8A44, 0xD465, 0x8A45, 0xD466, 0x8A46, 0xD467, 0x8A47, 0xD468, 0x8A48, 0xEEBA, 0x8A49, 0xD469, 0x8A4A, 0xD46A, + 0x8A4B, 0xD46B, 0x8A4C, 0xD46C, 0x8A4D, 0xD46D, 0x8A4E, 0xD46E, 0x8A4F, 0xD46F, 0x8A50, 0xD470, 0x8A51, 0xD471, 0x8A52, 0xD472, + 0x8A53, 0xD473, 0x8A54, 0xD474, 0x8A55, 0xD475, 0x8A56, 0xD476, 0x8A57, 0xD477, 0x8A58, 0xD478, 0x8A59, 0xD479, 0x8A5A, 0xD47A, + 0x8A5B, 0xD47B, 0x8A5C, 0xD47C, 0x8A5D, 0xD47D, 0x8A5E, 0xD47E, 0x8A5F, 0xD480, 0x8A60, 0xD481, 0x8A61, 0xD482, 0x8A62, 0xD483, + 0x8A63, 0xD484, 0x8A64, 0xD485, 0x8A65, 0xD486, 0x8A66, 0xD487, 0x8A67, 0xD488, 0x8A68, 0xD489, 0x8A69, 0xD48A, 0x8A6A, 0xD48B, + 0x8A6B, 0xD48C, 0x8A6C, 0xD48D, 0x8A6D, 0xD48E, 0x8A6E, 0xD48F, 0x8A6F, 0xD490, 0x8A70, 0xD491, 0x8A71, 0xD492, 0x8A72, 0xD493, + 0x8A73, 0xD494, 0x8A74, 0xD495, 0x8A75, 0xD496, 0x8A76, 0xD497, 0x8A77, 0xD498, 0x8A78, 0xD499, 0x8A79, 0xD5B2, 0x8A7A, 0xD49A, + 0x8A7B, 0xD49B, 0x8A7C, 0xD49C, 0x8A7D, 0xD49D, 0x8A7E, 0xD49E, 0x8A7F, 0xD49F, 0x8A80, 0xD4A0, 0x8A81, 0xD540, 0x8A82, 0xD541, + 0x8A83, 0xD542, 0x8A84, 0xD543, 0x8A85, 0xD544, 0x8A86, 0xD545, 0x8A87, 0xD546, 0x8A88, 0xD547, 0x8A89, 0xD3FE, 0x8A8A, 0xCCDC, + 0x8A8B, 0xD548, 0x8A8C, 0xD549, 0x8A8D, 0xD54A, 0x8A8E, 0xD54B, 0x8A8F, 0xD54C, 0x8A90, 0xD54D, 0x8A91, 0xD54E, 0x8A92, 0xD54F, + 0x8A93, 0xCAC4, 0x8A94, 0xD550, 0x8A95, 0xD551, 0x8A96, 0xD552, 0x8A97, 0xD553, 0x8A98, 0xD554, 0x8A99, 0xD555, 0x8A9A, 0xD556, + 0x8A9B, 0xD557, 0x8A9C, 0xD558, 0x8A9D, 0xD559, 0x8A9E, 0xD55A, 0x8A9F, 0xD55B, 0x8AA0, 0xD55C, 0x8AA1, 0xD55D, 0x8AA2, 0xD55E, + 0x8AA3, 0xD55F, 0x8AA4, 0xD560, 0x8AA5, 0xD561, 0x8AA6, 0xD562, 0x8AA7, 0xD563, 0x8AA8, 0xD564, 0x8AA9, 0xD565, 0x8AAA, 0xD566, + 0x8AAB, 0xD567, 0x8AAC, 0xD568, 0x8AAD, 0xD569, 0x8AAE, 0xD56A, 0x8AAF, 0xD56B, 0x8AB0, 0xD56C, 0x8AB1, 0xD56D, 0x8AB2, 0xD56E, + 0x8AB3, 0xD56F, 0x8AB4, 0xD570, 0x8AB5, 0xD571, 0x8AB6, 0xD572, 0x8AB7, 0xD573, 0x8AB8, 0xD574, 0x8AB9, 0xD575, 0x8ABA, 0xD576, + 0x8ABB, 0xD577, 0x8ABC, 0xD578, 0x8ABD, 0xD579, 0x8ABE, 0xD57A, 0x8ABF, 0xD57B, 0x8AC0, 0xD57C, 0x8AC1, 0xD57D, 0x8AC2, 0xD57E, + 0x8AC3, 0xD580, 0x8AC4, 0xD581, 0x8AC5, 0xD582, 0x8AC6, 0xD583, 0x8AC7, 0xD584, 0x8AC8, 0xD585, 0x8AC9, 0xD586, 0x8ACA, 0xD587, + 0x8ACB, 0xD588, 0x8ACC, 0xD589, 0x8ACD, 0xD58A, 0x8ACE, 0xD58B, 0x8ACF, 0xD58C, 0x8AD0, 0xD58D, 0x8AD1, 0xD58E, 0x8AD2, 0xD58F, + 0x8AD3, 0xD590, 0x8AD4, 0xD591, 0x8AD5, 0xD592, 0x8AD6, 0xD593, 0x8AD7, 0xD594, 0x8AD8, 0xD595, 0x8AD9, 0xD596, 0x8ADA, 0xD597, + 0x8ADB, 0xD598, 0x8ADC, 0xD599, 0x8ADD, 0xD59A, 0x8ADE, 0xD59B, 0x8ADF, 0xD59C, 0x8AE0, 0xD59D, 0x8AE1, 0xD59E, 0x8AE2, 0xD59F, + 0x8AE3, 0xD5A0, 0x8AE4, 0xD640, 0x8AE5, 0xD641, 0x8AE6, 0xD642, 0x8AE7, 0xD643, 0x8AE8, 0xD644, 0x8AE9, 0xD645, 0x8AEA, 0xD646, + 0x8AEB, 0xD647, 0x8AEC, 0xD648, 0x8AED, 0xD649, 0x8AEE, 0xD64A, 0x8AEF, 0xD64B, 0x8AF0, 0xD64C, 0x8AF1, 0xD64D, 0x8AF2, 0xD64E, + 0x8AF3, 0xD64F, 0x8AF4, 0xD650, 0x8AF5, 0xD651, 0x8AF6, 0xD652, 0x8AF7, 0xD653, 0x8AF8, 0xD654, 0x8AF9, 0xD655, 0x8AFA, 0xD656, + 0x8AFB, 0xD657, 0x8AFC, 0xD658, 0x8AFD, 0xD659, 0x8AFE, 0xD65A, 0x8AFF, 0xD65B, 0x8B00, 0xD65C, 0x8B01, 0xD65D, 0x8B02, 0xD65E, + 0x8B03, 0xD65F, 0x8B04, 0xD660, 0x8B05, 0xD661, 0x8B06, 0xD662, 0x8B07, 0xE5C0, 0x8B08, 0xD663, 0x8B09, 0xD664, 0x8B0A, 0xD665, + 0x8B0B, 0xD666, 0x8B0C, 0xD667, 0x8B0D, 0xD668, 0x8B0E, 0xD669, 0x8B0F, 0xD66A, 0x8B10, 0xD66B, 0x8B11, 0xD66C, 0x8B12, 0xD66D, + 0x8B13, 0xD66E, 0x8B14, 0xD66F, 0x8B15, 0xD670, 0x8B16, 0xD671, 0x8B17, 0xD672, 0x8B18, 0xD673, 0x8B19, 0xD674, 0x8B1A, 0xD675, + 0x8B1B, 0xD676, 0x8B1C, 0xD677, 0x8B1D, 0xD678, 0x8B1E, 0xD679, 0x8B1F, 0xD67A, 0x8B20, 0xD67B, 0x8B21, 0xD67C, 0x8B22, 0xD67D, + 0x8B23, 0xD67E, 0x8B24, 0xD680, 0x8B25, 0xD681, 0x8B26, 0xF6A5, 0x8B27, 0xD682, 0x8B28, 0xD683, 0x8B29, 0xD684, 0x8B2A, 0xD685, + 0x8B2B, 0xD686, 0x8B2C, 0xD687, 0x8B2D, 0xD688, 0x8B2E, 0xD689, 0x8B2F, 0xD68A, 0x8B30, 0xD68B, 0x8B31, 0xD68C, 0x8B32, 0xD68D, + 0x8B33, 0xD68E, 0x8B34, 0xD68F, 0x8B35, 0xD690, 0x8B36, 0xD691, 0x8B37, 0xD692, 0x8B38, 0xD693, 0x8B39, 0xD694, 0x8B3A, 0xD695, + 0x8B3B, 0xD696, 0x8B3C, 0xD697, 0x8B3D, 0xD698, 0x8B3E, 0xD699, 0x8B3F, 0xD69A, 0x8B40, 0xD69B, 0x8B41, 0xD69C, 0x8B42, 0xD69D, + 0x8B43, 0xD69E, 0x8B44, 0xD69F, 0x8B45, 0xD6A0, 0x8B46, 0xD740, 0x8B47, 0xD741, 0x8B48, 0xD742, 0x8B49, 0xD743, 0x8B4A, 0xD744, + 0x8B4B, 0xD745, 0x8B4C, 0xD746, 0x8B4D, 0xD747, 0x8B4E, 0xD748, 0x8B4F, 0xD749, 0x8B50, 0xD74A, 0x8B51, 0xD74B, 0x8B52, 0xD74C, + 0x8B53, 0xD74D, 0x8B54, 0xD74E, 0x8B55, 0xD74F, 0x8B56, 0xD750, 0x8B57, 0xD751, 0x8B58, 0xD752, 0x8B59, 0xD753, 0x8B5A, 0xD754, + 0x8B5B, 0xD755, 0x8B5C, 0xD756, 0x8B5D, 0xD757, 0x8B5E, 0xD758, 0x8B5F, 0xD759, 0x8B60, 0xD75A, 0x8B61, 0xD75B, 0x8B62, 0xD75C, + 0x8B63, 0xD75D, 0x8B64, 0xD75E, 0x8B65, 0xD75F, 0x8B66, 0xBEAF, 0x8B67, 0xD760, 0x8B68, 0xD761, 0x8B69, 0xD762, 0x8B6A, 0xD763, + 0x8B6B, 0xD764, 0x8B6C, 0xC6A9, 0x8B6D, 0xD765, 0x8B6E, 0xD766, 0x8B6F, 0xD767, 0x8B70, 0xD768, 0x8B71, 0xD769, 0x8B72, 0xD76A, + 0x8B73, 0xD76B, 0x8B74, 0xD76C, 0x8B75, 0xD76D, 0x8B76, 0xD76E, 0x8B77, 0xD76F, 0x8B78, 0xD770, 0x8B79, 0xD771, 0x8B7A, 0xD772, + 0x8B7B, 0xD773, 0x8B7C, 0xD774, 0x8B7D, 0xD775, 0x8B7E, 0xD776, 0x8B7F, 0xD777, 0x8B80, 0xD778, 0x8B81, 0xD779, 0x8B82, 0xD77A, + 0x8B83, 0xD77B, 0x8B84, 0xD77C, 0x8B85, 0xD77D, 0x8B86, 0xD77E, 0x8B87, 0xD780, 0x8B88, 0xD781, 0x8B89, 0xD782, 0x8B8A, 0xD783, + 0x8B8B, 0xD784, 0x8B8C, 0xD785, 0x8B8D, 0xD786, 0x8B8E, 0xD787, 0x8B8F, 0xD788, 0x8B90, 0xD789, 0x8B91, 0xD78A, 0x8B92, 0xD78B, + 0x8B93, 0xD78C, 0x8B94, 0xD78D, 0x8B95, 0xD78E, 0x8B96, 0xD78F, 0x8B97, 0xD790, 0x8B98, 0xD791, 0x8B99, 0xD792, 0x8B9A, 0xD793, + 0x8B9B, 0xD794, 0x8B9C, 0xD795, 0x8B9D, 0xD796, 0x8B9E, 0xD797, 0x8B9F, 0xD798, 0x8BA0, 0xDAA5, 0x8BA1, 0xBCC6, 0x8BA2, 0xB6A9, + 0x8BA3, 0xB8BC, 0x8BA4, 0xC8CF, 0x8BA5, 0xBCA5, 0x8BA6, 0xDAA6, 0x8BA7, 0xDAA7, 0x8BA8, 0xCCD6, 0x8BA9, 0xC8C3, 0x8BAA, 0xDAA8, + 0x8BAB, 0xC6FD, 0x8BAC, 0xD799, 0x8BAD, 0xD1B5, 0x8BAE, 0xD2E9, 0x8BAF, 0xD1B6, 0x8BB0, 0xBCC7, 0x8BB1, 0xD79A, 0x8BB2, 0xBDB2, + 0x8BB3, 0xBBE4, 0x8BB4, 0xDAA9, 0x8BB5, 0xDAAA, 0x8BB6, 0xD1C8, 0x8BB7, 0xDAAB, 0x8BB8, 0xD0ED, 0x8BB9, 0xB6EF, 0x8BBA, 0xC2DB, + 0x8BBB, 0xD79B, 0x8BBC, 0xCBCF, 0x8BBD, 0xB7ED, 0x8BBE, 0xC9E8, 0x8BBF, 0xB7C3, 0x8BC0, 0xBEF7, 0x8BC1, 0xD6A4, 0x8BC2, 0xDAAC, + 0x8BC3, 0xDAAD, 0x8BC4, 0xC6C0, 0x8BC5, 0xD7E7, 0x8BC6, 0xCAB6, 0x8BC7, 0xD79C, 0x8BC8, 0xD5A9, 0x8BC9, 0xCBDF, 0x8BCA, 0xD5EF, + 0x8BCB, 0xDAAE, 0x8BCC, 0xD6DF, 0x8BCD, 0xB4CA, 0x8BCE, 0xDAB0, 0x8BCF, 0xDAAF, 0x8BD0, 0xD79D, 0x8BD1, 0xD2EB, 0x8BD2, 0xDAB1, + 0x8BD3, 0xDAB2, 0x8BD4, 0xDAB3, 0x8BD5, 0xCAD4, 0x8BD6, 0xDAB4, 0x8BD7, 0xCAAB, 0x8BD8, 0xDAB5, 0x8BD9, 0xDAB6, 0x8BDA, 0xB3CF, + 0x8BDB, 0xD6EF, 0x8BDC, 0xDAB7, 0x8BDD, 0xBBB0, 0x8BDE, 0xB5AE, 0x8BDF, 0xDAB8, 0x8BE0, 0xDAB9, 0x8BE1, 0xB9EE, 0x8BE2, 0xD1AF, + 0x8BE3, 0xD2E8, 0x8BE4, 0xDABA, 0x8BE5, 0xB8C3, 0x8BE6, 0xCFEA, 0x8BE7, 0xB2EF, 0x8BE8, 0xDABB, 0x8BE9, 0xDABC, 0x8BEA, 0xD79E, + 0x8BEB, 0xBDEB, 0x8BEC, 0xCEDC, 0x8BED, 0xD3EF, 0x8BEE, 0xDABD, 0x8BEF, 0xCEF3, 0x8BF0, 0xDABE, 0x8BF1, 0xD3D5, 0x8BF2, 0xBBE5, + 0x8BF3, 0xDABF, 0x8BF4, 0xCBB5, 0x8BF5, 0xCBD0, 0x8BF6, 0xDAC0, 0x8BF7, 0xC7EB, 0x8BF8, 0xD6EE, 0x8BF9, 0xDAC1, 0x8BFA, 0xC5B5, + 0x8BFB, 0xB6C1, 0x8BFC, 0xDAC2, 0x8BFD, 0xB7CC, 0x8BFE, 0xBFCE, 0x8BFF, 0xDAC3, 0x8C00, 0xDAC4, 0x8C01, 0xCBAD, 0x8C02, 0xDAC5, + 0x8C03, 0xB5F7, 0x8C04, 0xDAC6, 0x8C05, 0xC1C2, 0x8C06, 0xD7BB, 0x8C07, 0xDAC7, 0x8C08, 0xCCB8, 0x8C09, 0xD79F, 0x8C0A, 0xD2EA, + 0x8C0B, 0xC4B1, 0x8C0C, 0xDAC8, 0x8C0D, 0xB5FD, 0x8C0E, 0xBBD1, 0x8C0F, 0xDAC9, 0x8C10, 0xD0B3, 0x8C11, 0xDACA, 0x8C12, 0xDACB, + 0x8C13, 0xCEBD, 0x8C14, 0xDACC, 0x8C15, 0xDACD, 0x8C16, 0xDACE, 0x8C17, 0xB2F7, 0x8C18, 0xDAD1, 0x8C19, 0xDACF, 0x8C1A, 0xD1E8, + 0x8C1B, 0xDAD0, 0x8C1C, 0xC3D5, 0x8C1D, 0xDAD2, 0x8C1E, 0xD7A0, 0x8C1F, 0xDAD3, 0x8C20, 0xDAD4, 0x8C21, 0xDAD5, 0x8C22, 0xD0BB, + 0x8C23, 0xD2A5, 0x8C24, 0xB0F9, 0x8C25, 0xDAD6, 0x8C26, 0xC7AB, 0x8C27, 0xDAD7, 0x8C28, 0xBDF7, 0x8C29, 0xC3A1, 0x8C2A, 0xDAD8, + 0x8C2B, 0xDAD9, 0x8C2C, 0xC3FD, 0x8C2D, 0xCCB7, 0x8C2E, 0xDADA, 0x8C2F, 0xDADB, 0x8C30, 0xC0BE, 0x8C31, 0xC6D7, 0x8C32, 0xDADC, + 0x8C33, 0xDADD, 0x8C34, 0xC7B4, 0x8C35, 0xDADE, 0x8C36, 0xDADF, 0x8C37, 0xB9C8, 0x8C38, 0xD840, 0x8C39, 0xD841, 0x8C3A, 0xD842, + 0x8C3B, 0xD843, 0x8C3C, 0xD844, 0x8C3D, 0xD845, 0x8C3E, 0xD846, 0x8C3F, 0xD847, 0x8C40, 0xD848, 0x8C41, 0xBBED, 0x8C42, 0xD849, + 0x8C43, 0xD84A, 0x8C44, 0xD84B, 0x8C45, 0xD84C, 0x8C46, 0xB6B9, 0x8C47, 0xF4F8, 0x8C48, 0xD84D, 0x8C49, 0xF4F9, 0x8C4A, 0xD84E, + 0x8C4B, 0xD84F, 0x8C4C, 0xCDE3, 0x8C4D, 0xD850, 0x8C4E, 0xD851, 0x8C4F, 0xD852, 0x8C50, 0xD853, 0x8C51, 0xD854, 0x8C52, 0xD855, + 0x8C53, 0xD856, 0x8C54, 0xD857, 0x8C55, 0xF5B9, 0x8C56, 0xD858, 0x8C57, 0xD859, 0x8C58, 0xD85A, 0x8C59, 0xD85B, 0x8C5A, 0xEBE0, + 0x8C5B, 0xD85C, 0x8C5C, 0xD85D, 0x8C5D, 0xD85E, 0x8C5E, 0xD85F, 0x8C5F, 0xD860, 0x8C60, 0xD861, 0x8C61, 0xCFF3, 0x8C62, 0xBBBF, + 0x8C63, 0xD862, 0x8C64, 0xD863, 0x8C65, 0xD864, 0x8C66, 0xD865, 0x8C67, 0xD866, 0x8C68, 0xD867, 0x8C69, 0xD868, 0x8C6A, 0xBAC0, + 0x8C6B, 0xD4A5, 0x8C6C, 0xD869, 0x8C6D, 0xD86A, 0x8C6E, 0xD86B, 0x8C6F, 0xD86C, 0x8C70, 0xD86D, 0x8C71, 0xD86E, 0x8C72, 0xD86F, + 0x8C73, 0xE1D9, 0x8C74, 0xD870, 0x8C75, 0xD871, 0x8C76, 0xD872, 0x8C77, 0xD873, 0x8C78, 0xF5F4, 0x8C79, 0xB1AA, 0x8C7A, 0xB2F2, + 0x8C7B, 0xD874, 0x8C7C, 0xD875, 0x8C7D, 0xD876, 0x8C7E, 0xD877, 0x8C7F, 0xD878, 0x8C80, 0xD879, 0x8C81, 0xD87A, 0x8C82, 0xF5F5, + 0x8C83, 0xD87B, 0x8C84, 0xD87C, 0x8C85, 0xF5F7, 0x8C86, 0xD87D, 0x8C87, 0xD87E, 0x8C88, 0xD880, 0x8C89, 0xBAD1, 0x8C8A, 0xF5F6, + 0x8C8B, 0xD881, 0x8C8C, 0xC3B2, 0x8C8D, 0xD882, 0x8C8E, 0xD883, 0x8C8F, 0xD884, 0x8C90, 0xD885, 0x8C91, 0xD886, 0x8C92, 0xD887, + 0x8C93, 0xD888, 0x8C94, 0xF5F9, 0x8C95, 0xD889, 0x8C96, 0xD88A, 0x8C97, 0xD88B, 0x8C98, 0xF5F8, 0x8C99, 0xD88C, 0x8C9A, 0xD88D, + 0x8C9B, 0xD88E, 0x8C9C, 0xD88F, 0x8C9D, 0xD890, 0x8C9E, 0xD891, 0x8C9F, 0xD892, 0x8CA0, 0xD893, 0x8CA1, 0xD894, 0x8CA2, 0xD895, + 0x8CA3, 0xD896, 0x8CA4, 0xD897, 0x8CA5, 0xD898, 0x8CA6, 0xD899, 0x8CA7, 0xD89A, 0x8CA8, 0xD89B, 0x8CA9, 0xD89C, 0x8CAA, 0xD89D, + 0x8CAB, 0xD89E, 0x8CAC, 0xD89F, 0x8CAD, 0xD8A0, 0x8CAE, 0xD940, 0x8CAF, 0xD941, 0x8CB0, 0xD942, 0x8CB1, 0xD943, 0x8CB2, 0xD944, + 0x8CB3, 0xD945, 0x8CB4, 0xD946, 0x8CB5, 0xD947, 0x8CB6, 0xD948, 0x8CB7, 0xD949, 0x8CB8, 0xD94A, 0x8CB9, 0xD94B, 0x8CBA, 0xD94C, + 0x8CBB, 0xD94D, 0x8CBC, 0xD94E, 0x8CBD, 0xD94F, 0x8CBE, 0xD950, 0x8CBF, 0xD951, 0x8CC0, 0xD952, 0x8CC1, 0xD953, 0x8CC2, 0xD954, + 0x8CC3, 0xD955, 0x8CC4, 0xD956, 0x8CC5, 0xD957, 0x8CC6, 0xD958, 0x8CC7, 0xD959, 0x8CC8, 0xD95A, 0x8CC9, 0xD95B, 0x8CCA, 0xD95C, + 0x8CCB, 0xD95D, 0x8CCC, 0xD95E, 0x8CCD, 0xD95F, 0x8CCE, 0xD960, 0x8CCF, 0xD961, 0x8CD0, 0xD962, 0x8CD1, 0xD963, 0x8CD2, 0xD964, + 0x8CD3, 0xD965, 0x8CD4, 0xD966, 0x8CD5, 0xD967, 0x8CD6, 0xD968, 0x8CD7, 0xD969, 0x8CD8, 0xD96A, 0x8CD9, 0xD96B, 0x8CDA, 0xD96C, + 0x8CDB, 0xD96D, 0x8CDC, 0xD96E, 0x8CDD, 0xD96F, 0x8CDE, 0xD970, 0x8CDF, 0xD971, 0x8CE0, 0xD972, 0x8CE1, 0xD973, 0x8CE2, 0xD974, + 0x8CE3, 0xD975, 0x8CE4, 0xD976, 0x8CE5, 0xD977, 0x8CE6, 0xD978, 0x8CE7, 0xD979, 0x8CE8, 0xD97A, 0x8CE9, 0xD97B, 0x8CEA, 0xD97C, + 0x8CEB, 0xD97D, 0x8CEC, 0xD97E, 0x8CED, 0xD980, 0x8CEE, 0xD981, 0x8CEF, 0xD982, 0x8CF0, 0xD983, 0x8CF1, 0xD984, 0x8CF2, 0xD985, + 0x8CF3, 0xD986, 0x8CF4, 0xD987, 0x8CF5, 0xD988, 0x8CF6, 0xD989, 0x8CF7, 0xD98A, 0x8CF8, 0xD98B, 0x8CF9, 0xD98C, 0x8CFA, 0xD98D, + 0x8CFB, 0xD98E, 0x8CFC, 0xD98F, 0x8CFD, 0xD990, 0x8CFE, 0xD991, 0x8CFF, 0xD992, 0x8D00, 0xD993, 0x8D01, 0xD994, 0x8D02, 0xD995, + 0x8D03, 0xD996, 0x8D04, 0xD997, 0x8D05, 0xD998, 0x8D06, 0xD999, 0x8D07, 0xD99A, 0x8D08, 0xD99B, 0x8D09, 0xD99C, 0x8D0A, 0xD99D, + 0x8D0B, 0xD99E, 0x8D0C, 0xD99F, 0x8D0D, 0xD9A0, 0x8D0E, 0xDA40, 0x8D0F, 0xDA41, 0x8D10, 0xDA42, 0x8D11, 0xDA43, 0x8D12, 0xDA44, + 0x8D13, 0xDA45, 0x8D14, 0xDA46, 0x8D15, 0xDA47, 0x8D16, 0xDA48, 0x8D17, 0xDA49, 0x8D18, 0xDA4A, 0x8D19, 0xDA4B, 0x8D1A, 0xDA4C, + 0x8D1B, 0xDA4D, 0x8D1C, 0xDA4E, 0x8D1D, 0xB1B4, 0x8D1E, 0xD5EA, 0x8D1F, 0xB8BA, 0x8D20, 0xDA4F, 0x8D21, 0xB9B1, 0x8D22, 0xB2C6, + 0x8D23, 0xD4F0, 0x8D24, 0xCFCD, 0x8D25, 0xB0DC, 0x8D26, 0xD5CB, 0x8D27, 0xBBF5, 0x8D28, 0xD6CA, 0x8D29, 0xB7B7, 0x8D2A, 0xCCB0, + 0x8D2B, 0xC6B6, 0x8D2C, 0xB1E1, 0x8D2D, 0xB9BA, 0x8D2E, 0xD6FC, 0x8D2F, 0xB9E1, 0x8D30, 0xB7A1, 0x8D31, 0xBCFA, 0x8D32, 0xEADA, + 0x8D33, 0xEADB, 0x8D34, 0xCCF9, 0x8D35, 0xB9F3, 0x8D36, 0xEADC, 0x8D37, 0xB4FB, 0x8D38, 0xC3B3, 0x8D39, 0xB7D1, 0x8D3A, 0xBAD8, + 0x8D3B, 0xEADD, 0x8D3C, 0xD4F4, 0x8D3D, 0xEADE, 0x8D3E, 0xBCD6, 0x8D3F, 0xBBDF, 0x8D40, 0xEADF, 0x8D41, 0xC1DE, 0x8D42, 0xC2B8, + 0x8D43, 0xD4DF, 0x8D44, 0xD7CA, 0x8D45, 0xEAE0, 0x8D46, 0xEAE1, 0x8D47, 0xEAE4, 0x8D48, 0xEAE2, 0x8D49, 0xEAE3, 0x8D4A, 0xC9DE, + 0x8D4B, 0xB8B3, 0x8D4C, 0xB6C4, 0x8D4D, 0xEAE5, 0x8D4E, 0xCAEA, 0x8D4F, 0xC9CD, 0x8D50, 0xB4CD, 0x8D51, 0xDA50, 0x8D52, 0xDA51, + 0x8D53, 0xE2D9, 0x8D54, 0xC5E2, 0x8D55, 0xEAE6, 0x8D56, 0xC0B5, 0x8D57, 0xDA52, 0x8D58, 0xD7B8, 0x8D59, 0xEAE7, 0x8D5A, 0xD7AC, + 0x8D5B, 0xC8FC, 0x8D5C, 0xD8D3, 0x8D5D, 0xD8CD, 0x8D5E, 0xD4DE, 0x8D5F, 0xDA53, 0x8D60, 0xD4F9, 0x8D61, 0xC9C4, 0x8D62, 0xD3AE, + 0x8D63, 0xB8D3, 0x8D64, 0xB3E0, 0x8D65, 0xDA54, 0x8D66, 0xC9E2, 0x8D67, 0xF4F6, 0x8D68, 0xDA55, 0x8D69, 0xDA56, 0x8D6A, 0xDA57, + 0x8D6B, 0xBAD5, 0x8D6C, 0xDA58, 0x8D6D, 0xF4F7, 0x8D6E, 0xDA59, 0x8D6F, 0xDA5A, 0x8D70, 0xD7DF, 0x8D71, 0xDA5B, 0x8D72, 0xDA5C, + 0x8D73, 0xF4F1, 0x8D74, 0xB8B0, 0x8D75, 0xD5D4, 0x8D76, 0xB8CF, 0x8D77, 0xC6F0, 0x8D78, 0xDA5D, 0x8D79, 0xDA5E, 0x8D7A, 0xDA5F, + 0x8D7B, 0xDA60, 0x8D7C, 0xDA61, 0x8D7D, 0xDA62, 0x8D7E, 0xDA63, 0x8D7F, 0xDA64, 0x8D80, 0xDA65, 0x8D81, 0xB3C3, 0x8D82, 0xDA66, + 0x8D83, 0xDA67, 0x8D84, 0xF4F2, 0x8D85, 0xB3AC, 0x8D86, 0xDA68, 0x8D87, 0xDA69, 0x8D88, 0xDA6A, 0x8D89, 0xDA6B, 0x8D8A, 0xD4BD, + 0x8D8B, 0xC7F7, 0x8D8C, 0xDA6C, 0x8D8D, 0xDA6D, 0x8D8E, 0xDA6E, 0x8D8F, 0xDA6F, 0x8D90, 0xDA70, 0x8D91, 0xF4F4, 0x8D92, 0xDA71, + 0x8D93, 0xDA72, 0x8D94, 0xF4F3, 0x8D95, 0xDA73, 0x8D96, 0xDA74, 0x8D97, 0xDA75, 0x8D98, 0xDA76, 0x8D99, 0xDA77, 0x8D9A, 0xDA78, + 0x8D9B, 0xDA79, 0x8D9C, 0xDA7A, 0x8D9D, 0xDA7B, 0x8D9E, 0xDA7C, 0x8D9F, 0xCCCB, 0x8DA0, 0xDA7D, 0x8DA1, 0xDA7E, 0x8DA2, 0xDA80, + 0x8DA3, 0xC8A4, 0x8DA4, 0xDA81, 0x8DA5, 0xDA82, 0x8DA6, 0xDA83, 0x8DA7, 0xDA84, 0x8DA8, 0xDA85, 0x8DA9, 0xDA86, 0x8DAA, 0xDA87, + 0x8DAB, 0xDA88, 0x8DAC, 0xDA89, 0x8DAD, 0xDA8A, 0x8DAE, 0xDA8B, 0x8DAF, 0xDA8C, 0x8DB0, 0xDA8D, 0x8DB1, 0xF4F5, 0x8DB2, 0xDA8E, + 0x8DB3, 0xD7E3, 0x8DB4, 0xC5BF, 0x8DB5, 0xF5C0, 0x8DB6, 0xDA8F, 0x8DB7, 0xDA90, 0x8DB8, 0xF5BB, 0x8DB9, 0xDA91, 0x8DBA, 0xF5C3, + 0x8DBB, 0xDA92, 0x8DBC, 0xF5C2, 0x8DBD, 0xDA93, 0x8DBE, 0xD6BA, 0x8DBF, 0xF5C1, 0x8DC0, 0xDA94, 0x8DC1, 0xDA95, 0x8DC2, 0xDA96, + 0x8DC3, 0xD4BE, 0x8DC4, 0xF5C4, 0x8DC5, 0xDA97, 0x8DC6, 0xF5CC, 0x8DC7, 0xDA98, 0x8DC8, 0xDA99, 0x8DC9, 0xDA9A, 0x8DCA, 0xDA9B, + 0x8DCB, 0xB0CF, 0x8DCC, 0xB5F8, 0x8DCD, 0xDA9C, 0x8DCE, 0xF5C9, 0x8DCF, 0xF5CA, 0x8DD0, 0xDA9D, 0x8DD1, 0xC5DC, 0x8DD2, 0xDA9E, + 0x8DD3, 0xDA9F, 0x8DD4, 0xDAA0, 0x8DD5, 0xDB40, 0x8DD6, 0xF5C5, 0x8DD7, 0xF5C6, 0x8DD8, 0xDB41, 0x8DD9, 0xDB42, 0x8DDA, 0xF5C7, + 0x8DDB, 0xF5CB, 0x8DDC, 0xDB43, 0x8DDD, 0xBEE0, 0x8DDE, 0xF5C8, 0x8DDF, 0xB8FA, 0x8DE0, 0xDB44, 0x8DE1, 0xDB45, 0x8DE2, 0xDB46, + 0x8DE3, 0xF5D0, 0x8DE4, 0xF5D3, 0x8DE5, 0xDB47, 0x8DE6, 0xDB48, 0x8DE7, 0xDB49, 0x8DE8, 0xBFE7, 0x8DE9, 0xDB4A, 0x8DEA, 0xB9F2, + 0x8DEB, 0xF5BC, 0x8DEC, 0xF5CD, 0x8DED, 0xDB4B, 0x8DEE, 0xDB4C, 0x8DEF, 0xC2B7, 0x8DF0, 0xDB4D, 0x8DF1, 0xDB4E, 0x8DF2, 0xDB4F, + 0x8DF3, 0xCCF8, 0x8DF4, 0xDB50, 0x8DF5, 0xBCF9, 0x8DF6, 0xDB51, 0x8DF7, 0xF5CE, 0x8DF8, 0xF5CF, 0x8DF9, 0xF5D1, 0x8DFA, 0xB6E5, + 0x8DFB, 0xF5D2, 0x8DFC, 0xDB52, 0x8DFD, 0xF5D5, 0x8DFE, 0xDB53, 0x8DFF, 0xDB54, 0x8E00, 0xDB55, 0x8E01, 0xDB56, 0x8E02, 0xDB57, + 0x8E03, 0xDB58, 0x8E04, 0xDB59, 0x8E05, 0xF5BD, 0x8E06, 0xDB5A, 0x8E07, 0xDB5B, 0x8E08, 0xDB5C, 0x8E09, 0xF5D4, 0x8E0A, 0xD3BB, + 0x8E0B, 0xDB5D, 0x8E0C, 0xB3EC, 0x8E0D, 0xDB5E, 0x8E0E, 0xDB5F, 0x8E0F, 0xCCA4, 0x8E10, 0xDB60, 0x8E11, 0xDB61, 0x8E12, 0xDB62, + 0x8E13, 0xDB63, 0x8E14, 0xF5D6, 0x8E15, 0xDB64, 0x8E16, 0xDB65, 0x8E17, 0xDB66, 0x8E18, 0xDB67, 0x8E19, 0xDB68, 0x8E1A, 0xDB69, + 0x8E1B, 0xDB6A, 0x8E1C, 0xDB6B, 0x8E1D, 0xF5D7, 0x8E1E, 0xBEE1, 0x8E1F, 0xF5D8, 0x8E20, 0xDB6C, 0x8E21, 0xDB6D, 0x8E22, 0xCCDF, + 0x8E23, 0xF5DB, 0x8E24, 0xDB6E, 0x8E25, 0xDB6F, 0x8E26, 0xDB70, 0x8E27, 0xDB71, 0x8E28, 0xDB72, 0x8E29, 0xB2C8, 0x8E2A, 0xD7D9, + 0x8E2B, 0xDB73, 0x8E2C, 0xF5D9, 0x8E2D, 0xDB74, 0x8E2E, 0xF5DA, 0x8E2F, 0xF5DC, 0x8E30, 0xDB75, 0x8E31, 0xF5E2, 0x8E32, 0xDB76, + 0x8E33, 0xDB77, 0x8E34, 0xDB78, 0x8E35, 0xF5E0, 0x8E36, 0xDB79, 0x8E37, 0xDB7A, 0x8E38, 0xDB7B, 0x8E39, 0xF5DF, 0x8E3A, 0xF5DD, + 0x8E3B, 0xDB7C, 0x8E3C, 0xDB7D, 0x8E3D, 0xF5E1, 0x8E3E, 0xDB7E, 0x8E3F, 0xDB80, 0x8E40, 0xF5DE, 0x8E41, 0xF5E4, 0x8E42, 0xF5E5, + 0x8E43, 0xDB81, 0x8E44, 0xCCE3, 0x8E45, 0xDB82, 0x8E46, 0xDB83, 0x8E47, 0xE5BF, 0x8E48, 0xB5B8, 0x8E49, 0xF5E3, 0x8E4A, 0xF5E8, + 0x8E4B, 0xCCA3, 0x8E4C, 0xDB84, 0x8E4D, 0xDB85, 0x8E4E, 0xDB86, 0x8E4F, 0xDB87, 0x8E50, 0xDB88, 0x8E51, 0xF5E6, 0x8E52, 0xF5E7, + 0x8E53, 0xDB89, 0x8E54, 0xDB8A, 0x8E55, 0xDB8B, 0x8E56, 0xDB8C, 0x8E57, 0xDB8D, 0x8E58, 0xDB8E, 0x8E59, 0xF5BE, 0x8E5A, 0xDB8F, + 0x8E5B, 0xDB90, 0x8E5C, 0xDB91, 0x8E5D, 0xDB92, 0x8E5E, 0xDB93, 0x8E5F, 0xDB94, 0x8E60, 0xDB95, 0x8E61, 0xDB96, 0x8E62, 0xDB97, + 0x8E63, 0xDB98, 0x8E64, 0xDB99, 0x8E65, 0xDB9A, 0x8E66, 0xB1C4, 0x8E67, 0xDB9B, 0x8E68, 0xDB9C, 0x8E69, 0xF5BF, 0x8E6A, 0xDB9D, + 0x8E6B, 0xDB9E, 0x8E6C, 0xB5C5, 0x8E6D, 0xB2E4, 0x8E6E, 0xDB9F, 0x8E6F, 0xF5EC, 0x8E70, 0xF5E9, 0x8E71, 0xDBA0, 0x8E72, 0xB6D7, + 0x8E73, 0xDC40, 0x8E74, 0xF5ED, 0x8E75, 0xDC41, 0x8E76, 0xF5EA, 0x8E77, 0xDC42, 0x8E78, 0xDC43, 0x8E79, 0xDC44, 0x8E7A, 0xDC45, + 0x8E7B, 0xDC46, 0x8E7C, 0xF5EB, 0x8E7D, 0xDC47, 0x8E7E, 0xDC48, 0x8E7F, 0xB4DA, 0x8E80, 0xDC49, 0x8E81, 0xD4EA, 0x8E82, 0xDC4A, + 0x8E83, 0xDC4B, 0x8E84, 0xDC4C, 0x8E85, 0xF5EE, 0x8E86, 0xDC4D, 0x8E87, 0xB3F9, 0x8E88, 0xDC4E, 0x8E89, 0xDC4F, 0x8E8A, 0xDC50, + 0x8E8B, 0xDC51, 0x8E8C, 0xDC52, 0x8E8D, 0xDC53, 0x8E8E, 0xDC54, 0x8E8F, 0xF5EF, 0x8E90, 0xF5F1, 0x8E91, 0xDC55, 0x8E92, 0xDC56, + 0x8E93, 0xDC57, 0x8E94, 0xF5F0, 0x8E95, 0xDC58, 0x8E96, 0xDC59, 0x8E97, 0xDC5A, 0x8E98, 0xDC5B, 0x8E99, 0xDC5C, 0x8E9A, 0xDC5D, + 0x8E9B, 0xDC5E, 0x8E9C, 0xF5F2, 0x8E9D, 0xDC5F, 0x8E9E, 0xF5F3, 0x8E9F, 0xDC60, 0x8EA0, 0xDC61, 0x8EA1, 0xDC62, 0x8EA2, 0xDC63, + 0x8EA3, 0xDC64, 0x8EA4, 0xDC65, 0x8EA5, 0xDC66, 0x8EA6, 0xDC67, 0x8EA7, 0xDC68, 0x8EA8, 0xDC69, 0x8EA9, 0xDC6A, 0x8EAA, 0xDC6B, + 0x8EAB, 0xC9ED, 0x8EAC, 0xB9AA, 0x8EAD, 0xDC6C, 0x8EAE, 0xDC6D, 0x8EAF, 0xC7FB, 0x8EB0, 0xDC6E, 0x8EB1, 0xDC6F, 0x8EB2, 0xB6E3, + 0x8EB3, 0xDC70, 0x8EB4, 0xDC71, 0x8EB5, 0xDC72, 0x8EB6, 0xDC73, 0x8EB7, 0xDC74, 0x8EB8, 0xDC75, 0x8EB9, 0xDC76, 0x8EBA, 0xCCC9, + 0x8EBB, 0xDC77, 0x8EBC, 0xDC78, 0x8EBD, 0xDC79, 0x8EBE, 0xDC7A, 0x8EBF, 0xDC7B, 0x8EC0, 0xDC7C, 0x8EC1, 0xDC7D, 0x8EC2, 0xDC7E, + 0x8EC3, 0xDC80, 0x8EC4, 0xDC81, 0x8EC5, 0xDC82, 0x8EC6, 0xDC83, 0x8EC7, 0xDC84, 0x8EC8, 0xDC85, 0x8EC9, 0xDC86, 0x8ECA, 0xDC87, + 0x8ECB, 0xDC88, 0x8ECC, 0xDC89, 0x8ECD, 0xDC8A, 0x8ECE, 0xEAA6, 0x8ECF, 0xDC8B, 0x8ED0, 0xDC8C, 0x8ED1, 0xDC8D, 0x8ED2, 0xDC8E, + 0x8ED3, 0xDC8F, 0x8ED4, 0xDC90, 0x8ED5, 0xDC91, 0x8ED6, 0xDC92, 0x8ED7, 0xDC93, 0x8ED8, 0xDC94, 0x8ED9, 0xDC95, 0x8EDA, 0xDC96, + 0x8EDB, 0xDC97, 0x8EDC, 0xDC98, 0x8EDD, 0xDC99, 0x8EDE, 0xDC9A, 0x8EDF, 0xDC9B, 0x8EE0, 0xDC9C, 0x8EE1, 0xDC9D, 0x8EE2, 0xDC9E, + 0x8EE3, 0xDC9F, 0x8EE4, 0xDCA0, 0x8EE5, 0xDD40, 0x8EE6, 0xDD41, 0x8EE7, 0xDD42, 0x8EE8, 0xDD43, 0x8EE9, 0xDD44, 0x8EEA, 0xDD45, + 0x8EEB, 0xDD46, 0x8EEC, 0xDD47, 0x8EED, 0xDD48, 0x8EEE, 0xDD49, 0x8EEF, 0xDD4A, 0x8EF0, 0xDD4B, 0x8EF1, 0xDD4C, 0x8EF2, 0xDD4D, + 0x8EF3, 0xDD4E, 0x8EF4, 0xDD4F, 0x8EF5, 0xDD50, 0x8EF6, 0xDD51, 0x8EF7, 0xDD52, 0x8EF8, 0xDD53, 0x8EF9, 0xDD54, 0x8EFA, 0xDD55, + 0x8EFB, 0xDD56, 0x8EFC, 0xDD57, 0x8EFD, 0xDD58, 0x8EFE, 0xDD59, 0x8EFF, 0xDD5A, 0x8F00, 0xDD5B, 0x8F01, 0xDD5C, 0x8F02, 0xDD5D, + 0x8F03, 0xDD5E, 0x8F04, 0xDD5F, 0x8F05, 0xDD60, 0x8F06, 0xDD61, 0x8F07, 0xDD62, 0x8F08, 0xDD63, 0x8F09, 0xDD64, 0x8F0A, 0xDD65, + 0x8F0B, 0xDD66, 0x8F0C, 0xDD67, 0x8F0D, 0xDD68, 0x8F0E, 0xDD69, 0x8F0F, 0xDD6A, 0x8F10, 0xDD6B, 0x8F11, 0xDD6C, 0x8F12, 0xDD6D, + 0x8F13, 0xDD6E, 0x8F14, 0xDD6F, 0x8F15, 0xDD70, 0x8F16, 0xDD71, 0x8F17, 0xDD72, 0x8F18, 0xDD73, 0x8F19, 0xDD74, 0x8F1A, 0xDD75, + 0x8F1B, 0xDD76, 0x8F1C, 0xDD77, 0x8F1D, 0xDD78, 0x8F1E, 0xDD79, 0x8F1F, 0xDD7A, 0x8F20, 0xDD7B, 0x8F21, 0xDD7C, 0x8F22, 0xDD7D, + 0x8F23, 0xDD7E, 0x8F24, 0xDD80, 0x8F25, 0xDD81, 0x8F26, 0xDD82, 0x8F27, 0xDD83, 0x8F28, 0xDD84, 0x8F29, 0xDD85, 0x8F2A, 0xDD86, + 0x8F2B, 0xDD87, 0x8F2C, 0xDD88, 0x8F2D, 0xDD89, 0x8F2E, 0xDD8A, 0x8F2F, 0xDD8B, 0x8F30, 0xDD8C, 0x8F31, 0xDD8D, 0x8F32, 0xDD8E, + 0x8F33, 0xDD8F, 0x8F34, 0xDD90, 0x8F35, 0xDD91, 0x8F36, 0xDD92, 0x8F37, 0xDD93, 0x8F38, 0xDD94, 0x8F39, 0xDD95, 0x8F3A, 0xDD96, + 0x8F3B, 0xDD97, 0x8F3C, 0xDD98, 0x8F3D, 0xDD99, 0x8F3E, 0xDD9A, 0x8F3F, 0xDD9B, 0x8F40, 0xDD9C, 0x8F41, 0xDD9D, 0x8F42, 0xDD9E, + 0x8F43, 0xDD9F, 0x8F44, 0xDDA0, 0x8F45, 0xDE40, 0x8F46, 0xDE41, 0x8F47, 0xDE42, 0x8F48, 0xDE43, 0x8F49, 0xDE44, 0x8F4A, 0xDE45, + 0x8F4B, 0xDE46, 0x8F4C, 0xDE47, 0x8F4D, 0xDE48, 0x8F4E, 0xDE49, 0x8F4F, 0xDE4A, 0x8F50, 0xDE4B, 0x8F51, 0xDE4C, 0x8F52, 0xDE4D, + 0x8F53, 0xDE4E, 0x8F54, 0xDE4F, 0x8F55, 0xDE50, 0x8F56, 0xDE51, 0x8F57, 0xDE52, 0x8F58, 0xDE53, 0x8F59, 0xDE54, 0x8F5A, 0xDE55, + 0x8F5B, 0xDE56, 0x8F5C, 0xDE57, 0x8F5D, 0xDE58, 0x8F5E, 0xDE59, 0x8F5F, 0xDE5A, 0x8F60, 0xDE5B, 0x8F61, 0xDE5C, 0x8F62, 0xDE5D, + 0x8F63, 0xDE5E, 0x8F64, 0xDE5F, 0x8F65, 0xDE60, 0x8F66, 0xB3B5, 0x8F67, 0xD4FE, 0x8F68, 0xB9EC, 0x8F69, 0xD0F9, 0x8F6A, 0xDE61, + 0x8F6B, 0xE9ED, 0x8F6C, 0xD7AA, 0x8F6D, 0xE9EE, 0x8F6E, 0xC2D6, 0x8F6F, 0xC8ED, 0x8F70, 0xBAE4, 0x8F71, 0xE9EF, 0x8F72, 0xE9F0, + 0x8F73, 0xE9F1, 0x8F74, 0xD6E1, 0x8F75, 0xE9F2, 0x8F76, 0xE9F3, 0x8F77, 0xE9F5, 0x8F78, 0xE9F4, 0x8F79, 0xE9F6, 0x8F7A, 0xE9F7, + 0x8F7B, 0xC7E1, 0x8F7C, 0xE9F8, 0x8F7D, 0xD4D8, 0x8F7E, 0xE9F9, 0x8F7F, 0xBDCE, 0x8F80, 0xDE62, 0x8F81, 0xE9FA, 0x8F82, 0xE9FB, + 0x8F83, 0xBDCF, 0x8F84, 0xE9FC, 0x8F85, 0xB8A8, 0x8F86, 0xC1BE, 0x8F87, 0xE9FD, 0x8F88, 0xB1B2, 0x8F89, 0xBBD4, 0x8F8A, 0xB9F5, + 0x8F8B, 0xE9FE, 0x8F8C, 0xDE63, 0x8F8D, 0xEAA1, 0x8F8E, 0xEAA2, 0x8F8F, 0xEAA3, 0x8F90, 0xB7F8, 0x8F91, 0xBCAD, 0x8F92, 0xDE64, + 0x8F93, 0xCAE4, 0x8F94, 0xE0CE, 0x8F95, 0xD4AF, 0x8F96, 0xCFBD, 0x8F97, 0xD5B7, 0x8F98, 0xEAA4, 0x8F99, 0xD5DE, 0x8F9A, 0xEAA5, + 0x8F9B, 0xD0C1, 0x8F9C, 0xB9BC, 0x8F9D, 0xDE65, 0x8F9E, 0xB4C7, 0x8F9F, 0xB1D9, 0x8FA0, 0xDE66, 0x8FA1, 0xDE67, 0x8FA2, 0xDE68, + 0x8FA3, 0xC0B1, 0x8FA4, 0xDE69, 0x8FA5, 0xDE6A, 0x8FA6, 0xDE6B, 0x8FA7, 0xDE6C, 0x8FA8, 0xB1E6, 0x8FA9, 0xB1E7, 0x8FAA, 0xDE6D, + 0x8FAB, 0xB1E8, 0x8FAC, 0xDE6E, 0x8FAD, 0xDE6F, 0x8FAE, 0xDE70, 0x8FAF, 0xDE71, 0x8FB0, 0xB3BD, 0x8FB1, 0xC8E8, 0x8FB2, 0xDE72, + 0x8FB3, 0xDE73, 0x8FB4, 0xDE74, 0x8FB5, 0xDE75, 0x8FB6, 0xE5C1, 0x8FB7, 0xDE76, 0x8FB8, 0xDE77, 0x8FB9, 0xB1DF, 0x8FBA, 0xDE78, + 0x8FBB, 0xDE79, 0x8FBC, 0xDE7A, 0x8FBD, 0xC1C9, 0x8FBE, 0xB4EF, 0x8FBF, 0xDE7B, 0x8FC0, 0xDE7C, 0x8FC1, 0xC7A8, 0x8FC2, 0xD3D8, + 0x8FC3, 0xDE7D, 0x8FC4, 0xC6F9, 0x8FC5, 0xD1B8, 0x8FC6, 0xDE7E, 0x8FC7, 0xB9FD, 0x8FC8, 0xC2F5, 0x8FC9, 0xDE80, 0x8FCA, 0xDE81, + 0x8FCB, 0xDE82, 0x8FCC, 0xDE83, 0x8FCD, 0xDE84, 0x8FCE, 0xD3AD, 0x8FCF, 0xDE85, 0x8FD0, 0xD4CB, 0x8FD1, 0xBDFC, 0x8FD2, 0xDE86, + 0x8FD3, 0xE5C2, 0x8FD4, 0xB7B5, 0x8FD5, 0xE5C3, 0x8FD6, 0xDE87, 0x8FD7, 0xDE88, 0x8FD8, 0xBBB9, 0x8FD9, 0xD5E2, 0x8FDA, 0xDE89, + 0x8FDB, 0xBDF8, 0x8FDC, 0xD4B6, 0x8FDD, 0xCEA5, 0x8FDE, 0xC1AC, 0x8FDF, 0xB3D9, 0x8FE0, 0xDE8A, 0x8FE1, 0xDE8B, 0x8FE2, 0xCCF6, + 0x8FE3, 0xDE8C, 0x8FE4, 0xE5C6, 0x8FE5, 0xE5C4, 0x8FE6, 0xE5C8, 0x8FE7, 0xDE8D, 0x8FE8, 0xE5CA, 0x8FE9, 0xE5C7, 0x8FEA, 0xB5CF, + 0x8FEB, 0xC6C8, 0x8FEC, 0xDE8E, 0x8FED, 0xB5FC, 0x8FEE, 0xE5C5, 0x8FEF, 0xDE8F, 0x8FF0, 0xCAF6, 0x8FF1, 0xDE90, 0x8FF2, 0xDE91, + 0x8FF3, 0xE5C9, 0x8FF4, 0xDE92, 0x8FF5, 0xDE93, 0x8FF6, 0xDE94, 0x8FF7, 0xC3D4, 0x8FF8, 0xB1C5, 0x8FF9, 0xBCA3, 0x8FFA, 0xDE95, + 0x8FFB, 0xDE96, 0x8FFC, 0xDE97, 0x8FFD, 0xD7B7, 0x8FFE, 0xDE98, 0x8FFF, 0xDE99, 0x9000, 0xCDCB, 0x9001, 0xCBCD, 0x9002, 0xCACA, + 0x9003, 0xCCD3, 0x9004, 0xE5CC, 0x9005, 0xE5CB, 0x9006, 0xC4E6, 0x9007, 0xDE9A, 0x9008, 0xDE9B, 0x9009, 0xD1A1, 0x900A, 0xD1B7, + 0x900B, 0xE5CD, 0x900C, 0xDE9C, 0x900D, 0xE5D0, 0x900E, 0xDE9D, 0x900F, 0xCDB8, 0x9010, 0xD6F0, 0x9011, 0xE5CF, 0x9012, 0xB5DD, + 0x9013, 0xDE9E, 0x9014, 0xCDBE, 0x9015, 0xDE9F, 0x9016, 0xE5D1, 0x9017, 0xB6BA, 0x9018, 0xDEA0, 0x9019, 0xDF40, 0x901A, 0xCDA8, + 0x901B, 0xB9E4, 0x901C, 0xDF41, 0x901D, 0xCAC5, 0x901E, 0xB3D1, 0x901F, 0xCBD9, 0x9020, 0xD4EC, 0x9021, 0xE5D2, 0x9022, 0xB7EA, + 0x9023, 0xDF42, 0x9024, 0xDF43, 0x9025, 0xDF44, 0x9026, 0xE5CE, 0x9027, 0xDF45, 0x9028, 0xDF46, 0x9029, 0xDF47, 0x902A, 0xDF48, + 0x902B, 0xDF49, 0x902C, 0xDF4A, 0x902D, 0xE5D5, 0x902E, 0xB4FE, 0x902F, 0xE5D6, 0x9030, 0xDF4B, 0x9031, 0xDF4C, 0x9032, 0xDF4D, + 0x9033, 0xDF4E, 0x9034, 0xDF4F, 0x9035, 0xE5D3, 0x9036, 0xE5D4, 0x9037, 0xDF50, 0x9038, 0xD2DD, 0x9039, 0xDF51, 0x903A, 0xDF52, + 0x903B, 0xC2DF, 0x903C, 0xB1C6, 0x903D, 0xDF53, 0x903E, 0xD3E2, 0x903F, 0xDF54, 0x9040, 0xDF55, 0x9041, 0xB6DD, 0x9042, 0xCBEC, + 0x9043, 0xDF56, 0x9044, 0xE5D7, 0x9045, 0xDF57, 0x9046, 0xDF58, 0x9047, 0xD3F6, 0x9048, 0xDF59, 0x9049, 0xDF5A, 0x904A, 0xDF5B, + 0x904B, 0xDF5C, 0x904C, 0xDF5D, 0x904D, 0xB1E9, 0x904E, 0xDF5E, 0x904F, 0xB6F4, 0x9050, 0xE5DA, 0x9051, 0xE5D8, 0x9052, 0xE5D9, + 0x9053, 0xB5C0, 0x9054, 0xDF5F, 0x9055, 0xDF60, 0x9056, 0xDF61, 0x9057, 0xD2C5, 0x9058, 0xE5DC, 0x9059, 0xDF62, 0x905A, 0xDF63, + 0x905B, 0xE5DE, 0x905C, 0xDF64, 0x905D, 0xDF65, 0x905E, 0xDF66, 0x905F, 0xDF67, 0x9060, 0xDF68, 0x9061, 0xDF69, 0x9062, 0xE5DD, + 0x9063, 0xC7B2, 0x9064, 0xDF6A, 0x9065, 0xD2A3, 0x9066, 0xDF6B, 0x9067, 0xDF6C, 0x9068, 0xE5DB, 0x9069, 0xDF6D, 0x906A, 0xDF6E, + 0x906B, 0xDF6F, 0x906C, 0xDF70, 0x906D, 0xD4E2, 0x906E, 0xD5DA, 0x906F, 0xDF71, 0x9070, 0xDF72, 0x9071, 0xDF73, 0x9072, 0xDF74, + 0x9073, 0xDF75, 0x9074, 0xE5E0, 0x9075, 0xD7F1, 0x9076, 0xDF76, 0x9077, 0xDF77, 0x9078, 0xDF78, 0x9079, 0xDF79, 0x907A, 0xDF7A, + 0x907B, 0xDF7B, 0x907C, 0xDF7C, 0x907D, 0xE5E1, 0x907E, 0xDF7D, 0x907F, 0xB1DC, 0x9080, 0xD1FB, 0x9081, 0xDF7E, 0x9082, 0xE5E2, + 0x9083, 0xE5E4, 0x9084, 0xDF80, 0x9085, 0xDF81, 0x9086, 0xDF82, 0x9087, 0xDF83, 0x9088, 0xE5E3, 0x9089, 0xDF84, 0x908A, 0xDF85, + 0x908B, 0xE5E5, 0x908C, 0xDF86, 0x908D, 0xDF87, 0x908E, 0xDF88, 0x908F, 0xDF89, 0x9090, 0xDF8A, 0x9091, 0xD2D8, 0x9092, 0xDF8B, + 0x9093, 0xB5CB, 0x9094, 0xDF8C, 0x9095, 0xE7DF, 0x9096, 0xDF8D, 0x9097, 0xDAF5, 0x9098, 0xDF8E, 0x9099, 0xDAF8, 0x909A, 0xDF8F, + 0x909B, 0xDAF6, 0x909C, 0xDF90, 0x909D, 0xDAF7, 0x909E, 0xDF91, 0x909F, 0xDF92, 0x90A0, 0xDF93, 0x90A1, 0xDAFA, 0x90A2, 0xD0CF, + 0x90A3, 0xC4C7, 0x90A4, 0xDF94, 0x90A5, 0xDF95, 0x90A6, 0xB0EE, 0x90A7, 0xDF96, 0x90A8, 0xDF97, 0x90A9, 0xDF98, 0x90AA, 0xD0B0, + 0x90AB, 0xDF99, 0x90AC, 0xDAF9, 0x90AD, 0xDF9A, 0x90AE, 0xD3CA, 0x90AF, 0xBAAA, 0x90B0, 0xDBA2, 0x90B1, 0xC7F1, 0x90B2, 0xDF9B, + 0x90B3, 0xDAFC, 0x90B4, 0xDAFB, 0x90B5, 0xC9DB, 0x90B6, 0xDAFD, 0x90B7, 0xDF9C, 0x90B8, 0xDBA1, 0x90B9, 0xD7DE, 0x90BA, 0xDAFE, + 0x90BB, 0xC1DA, 0x90BC, 0xDF9D, 0x90BD, 0xDF9E, 0x90BE, 0xDBA5, 0x90BF, 0xDF9F, 0x90C0, 0xDFA0, 0x90C1, 0xD3F4, 0x90C2, 0xE040, + 0x90C3, 0xE041, 0x90C4, 0xDBA7, 0x90C5, 0xDBA4, 0x90C6, 0xE042, 0x90C7, 0xDBA8, 0x90C8, 0xE043, 0x90C9, 0xE044, 0x90CA, 0xBDBC, + 0x90CB, 0xE045, 0x90CC, 0xE046, 0x90CD, 0xE047, 0x90CE, 0xC0C9, 0x90CF, 0xDBA3, 0x90D0, 0xDBA6, 0x90D1, 0xD6A3, 0x90D2, 0xE048, + 0x90D3, 0xDBA9, 0x90D4, 0xE049, 0x90D5, 0xE04A, 0x90D6, 0xE04B, 0x90D7, 0xDBAD, 0x90D8, 0xE04C, 0x90D9, 0xE04D, 0x90DA, 0xE04E, + 0x90DB, 0xDBAE, 0x90DC, 0xDBAC, 0x90DD, 0xBAC2, 0x90DE, 0xE04F, 0x90DF, 0xE050, 0x90E0, 0xE051, 0x90E1, 0xBFA4, 0x90E2, 0xDBAB, + 0x90E3, 0xE052, 0x90E4, 0xE053, 0x90E5, 0xE054, 0x90E6, 0xDBAA, 0x90E7, 0xD4C7, 0x90E8, 0xB2BF, 0x90E9, 0xE055, 0x90EA, 0xE056, + 0x90EB, 0xDBAF, 0x90EC, 0xE057, 0x90ED, 0xB9F9, 0x90EE, 0xE058, 0x90EF, 0xDBB0, 0x90F0, 0xE059, 0x90F1, 0xE05A, 0x90F2, 0xE05B, + 0x90F3, 0xE05C, 0x90F4, 0xB3BB, 0x90F5, 0xE05D, 0x90F6, 0xE05E, 0x90F7, 0xE05F, 0x90F8, 0xB5A6, 0x90F9, 0xE060, 0x90FA, 0xE061, + 0x90FB, 0xE062, 0x90FC, 0xE063, 0x90FD, 0xB6BC, 0x90FE, 0xDBB1, 0x90FF, 0xE064, 0x9100, 0xE065, 0x9101, 0xE066, 0x9102, 0xB6F5, + 0x9103, 0xE067, 0x9104, 0xDBB2, 0x9105, 0xE068, 0x9106, 0xE069, 0x9107, 0xE06A, 0x9108, 0xE06B, 0x9109, 0xE06C, 0x910A, 0xE06D, + 0x910B, 0xE06E, 0x910C, 0xE06F, 0x910D, 0xE070, 0x910E, 0xE071, 0x910F, 0xE072, 0x9110, 0xE073, 0x9111, 0xE074, 0x9112, 0xE075, + 0x9113, 0xE076, 0x9114, 0xE077, 0x9115, 0xE078, 0x9116, 0xE079, 0x9117, 0xE07A, 0x9118, 0xE07B, 0x9119, 0xB1C9, 0x911A, 0xE07C, + 0x911B, 0xE07D, 0x911C, 0xE07E, 0x911D, 0xE080, 0x911E, 0xDBB4, 0x911F, 0xE081, 0x9120, 0xE082, 0x9121, 0xE083, 0x9122, 0xDBB3, + 0x9123, 0xDBB5, 0x9124, 0xE084, 0x9125, 0xE085, 0x9126, 0xE086, 0x9127, 0xE087, 0x9128, 0xE088, 0x9129, 0xE089, 0x912A, 0xE08A, + 0x912B, 0xE08B, 0x912C, 0xE08C, 0x912D, 0xE08D, 0x912E, 0xE08E, 0x912F, 0xDBB7, 0x9130, 0xE08F, 0x9131, 0xDBB6, 0x9132, 0xE090, + 0x9133, 0xE091, 0x9134, 0xE092, 0x9135, 0xE093, 0x9136, 0xE094, 0x9137, 0xE095, 0x9138, 0xE096, 0x9139, 0xDBB8, 0x913A, 0xE097, + 0x913B, 0xE098, 0x913C, 0xE099, 0x913D, 0xE09A, 0x913E, 0xE09B, 0x913F, 0xE09C, 0x9140, 0xE09D, 0x9141, 0xE09E, 0x9142, 0xE09F, + 0x9143, 0xDBB9, 0x9144, 0xE0A0, 0x9145, 0xE140, 0x9146, 0xDBBA, 0x9147, 0xE141, 0x9148, 0xE142, 0x9149, 0xD3CF, 0x914A, 0xF4FA, + 0x914B, 0xC7F5, 0x914C, 0xD7C3, 0x914D, 0xC5E4, 0x914E, 0xF4FC, 0x914F, 0xF4FD, 0x9150, 0xF4FB, 0x9151, 0xE143, 0x9152, 0xBEC6, + 0x9153, 0xE144, 0x9154, 0xE145, 0x9155, 0xE146, 0x9156, 0xE147, 0x9157, 0xD0EF, 0x9158, 0xE148, 0x9159, 0xE149, 0x915A, 0xB7D3, + 0x915B, 0xE14A, 0x915C, 0xE14B, 0x915D, 0xD4CD, 0x915E, 0xCCAA, 0x915F, 0xE14C, 0x9160, 0xE14D, 0x9161, 0xF5A2, 0x9162, 0xF5A1, + 0x9163, 0xBAA8, 0x9164, 0xF4FE, 0x9165, 0xCBD6, 0x9166, 0xE14E, 0x9167, 0xE14F, 0x9168, 0xE150, 0x9169, 0xF5A4, 0x916A, 0xC0D2, + 0x916B, 0xE151, 0x916C, 0xB3EA, 0x916D, 0xE152, 0x916E, 0xCDAA, 0x916F, 0xF5A5, 0x9170, 0xF5A3, 0x9171, 0xBDB4, 0x9172, 0xF5A8, + 0x9173, 0xE153, 0x9174, 0xF5A9, 0x9175, 0xBDCD, 0x9176, 0xC3B8, 0x9177, 0xBFE1, 0x9178, 0xCBE1, 0x9179, 0xF5AA, 0x917A, 0xE154, + 0x917B, 0xE155, 0x917C, 0xE156, 0x917D, 0xF5A6, 0x917E, 0xF5A7, 0x917F, 0xC4F0, 0x9180, 0xE157, 0x9181, 0xE158, 0x9182, 0xE159, + 0x9183, 0xE15A, 0x9184, 0xE15B, 0x9185, 0xF5AC, 0x9186, 0xE15C, 0x9187, 0xB4BC, 0x9188, 0xE15D, 0x9189, 0xD7ED, 0x918A, 0xE15E, + 0x918B, 0xB4D7, 0x918C, 0xF5AB, 0x918D, 0xF5AE, 0x918E, 0xE15F, 0x918F, 0xE160, 0x9190, 0xF5AD, 0x9191, 0xF5AF, 0x9192, 0xD0D1, + 0x9193, 0xE161, 0x9194, 0xE162, 0x9195, 0xE163, 0x9196, 0xE164, 0x9197, 0xE165, 0x9198, 0xE166, 0x9199, 0xE167, 0x919A, 0xC3D1, + 0x919B, 0xC8A9, 0x919C, 0xE168, 0x919D, 0xE169, 0x919E, 0xE16A, 0x919F, 0xE16B, 0x91A0, 0xE16C, 0x91A1, 0xE16D, 0x91A2, 0xF5B0, + 0x91A3, 0xF5B1, 0x91A4, 0xE16E, 0x91A5, 0xE16F, 0x91A6, 0xE170, 0x91A7, 0xE171, 0x91A8, 0xE172, 0x91A9, 0xE173, 0x91AA, 0xF5B2, + 0x91AB, 0xE174, 0x91AC, 0xE175, 0x91AD, 0xF5B3, 0x91AE, 0xF5B4, 0x91AF, 0xF5B5, 0x91B0, 0xE176, 0x91B1, 0xE177, 0x91B2, 0xE178, + 0x91B3, 0xE179, 0x91B4, 0xF5B7, 0x91B5, 0xF5B6, 0x91B6, 0xE17A, 0x91B7, 0xE17B, 0x91B8, 0xE17C, 0x91B9, 0xE17D, 0x91BA, 0xF5B8, + 0x91BB, 0xE17E, 0x91BC, 0xE180, 0x91BD, 0xE181, 0x91BE, 0xE182, 0x91BF, 0xE183, 0x91C0, 0xE184, 0x91C1, 0xE185, 0x91C2, 0xE186, + 0x91C3, 0xE187, 0x91C4, 0xE188, 0x91C5, 0xE189, 0x91C6, 0xE18A, 0x91C7, 0xB2C9, 0x91C8, 0xE18B, 0x91C9, 0xD3D4, 0x91CA, 0xCACD, + 0x91CB, 0xE18C, 0x91CC, 0xC0EF, 0x91CD, 0xD6D8, 0x91CE, 0xD2B0, 0x91CF, 0xC1BF, 0x91D0, 0xE18D, 0x91D1, 0xBDF0, 0x91D2, 0xE18E, + 0x91D3, 0xE18F, 0x91D4, 0xE190, 0x91D5, 0xE191, 0x91D6, 0xE192, 0x91D7, 0xE193, 0x91D8, 0xE194, 0x91D9, 0xE195, 0x91DA, 0xE196, + 0x91DB, 0xE197, 0x91DC, 0xB8AA, 0x91DD, 0xE198, 0x91DE, 0xE199, 0x91DF, 0xE19A, 0x91E0, 0xE19B, 0x91E1, 0xE19C, 0x91E2, 0xE19D, + 0x91E3, 0xE19E, 0x91E4, 0xE19F, 0x91E5, 0xE1A0, 0x91E6, 0xE240, 0x91E7, 0xE241, 0x91E8, 0xE242, 0x91E9, 0xE243, 0x91EA, 0xE244, + 0x91EB, 0xE245, 0x91EC, 0xE246, 0x91ED, 0xE247, 0x91EE, 0xE248, 0x91EF, 0xE249, 0x91F0, 0xE24A, 0x91F1, 0xE24B, 0x91F2, 0xE24C, + 0x91F3, 0xE24D, 0x91F4, 0xE24E, 0x91F5, 0xE24F, 0x91F6, 0xE250, 0x91F7, 0xE251, 0x91F8, 0xE252, 0x91F9, 0xE253, 0x91FA, 0xE254, + 0x91FB, 0xE255, 0x91FC, 0xE256, 0x91FD, 0xE257, 0x91FE, 0xE258, 0x91FF, 0xE259, 0x9200, 0xE25A, 0x9201, 0xE25B, 0x9202, 0xE25C, + 0x9203, 0xE25D, 0x9204, 0xE25E, 0x9205, 0xE25F, 0x9206, 0xE260, 0x9207, 0xE261, 0x9208, 0xE262, 0x9209, 0xE263, 0x920A, 0xE264, + 0x920B, 0xE265, 0x920C, 0xE266, 0x920D, 0xE267, 0x920E, 0xE268, 0x920F, 0xE269, 0x9210, 0xE26A, 0x9211, 0xE26B, 0x9212, 0xE26C, + 0x9213, 0xE26D, 0x9214, 0xE26E, 0x9215, 0xE26F, 0x9216, 0xE270, 0x9217, 0xE271, 0x9218, 0xE272, 0x9219, 0xE273, 0x921A, 0xE274, + 0x921B, 0xE275, 0x921C, 0xE276, 0x921D, 0xE277, 0x921E, 0xE278, 0x921F, 0xE279, 0x9220, 0xE27A, 0x9221, 0xE27B, 0x9222, 0xE27C, + 0x9223, 0xE27D, 0x9224, 0xE27E, 0x9225, 0xE280, 0x9226, 0xE281, 0x9227, 0xE282, 0x9228, 0xE283, 0x9229, 0xE284, 0x922A, 0xE285, + 0x922B, 0xE286, 0x922C, 0xE287, 0x922D, 0xE288, 0x922E, 0xE289, 0x922F, 0xE28A, 0x9230, 0xE28B, 0x9231, 0xE28C, 0x9232, 0xE28D, + 0x9233, 0xE28E, 0x9234, 0xE28F, 0x9235, 0xE290, 0x9236, 0xE291, 0x9237, 0xE292, 0x9238, 0xE293, 0x9239, 0xE294, 0x923A, 0xE295, + 0x923B, 0xE296, 0x923C, 0xE297, 0x923D, 0xE298, 0x923E, 0xE299, 0x923F, 0xE29A, 0x9240, 0xE29B, 0x9241, 0xE29C, 0x9242, 0xE29D, + 0x9243, 0xE29E, 0x9244, 0xE29F, 0x9245, 0xE2A0, 0x9246, 0xE340, 0x9247, 0xE341, 0x9248, 0xE342, 0x9249, 0xE343, 0x924A, 0xE344, + 0x924B, 0xE345, 0x924C, 0xE346, 0x924D, 0xE347, 0x924E, 0xE348, 0x924F, 0xE349, 0x9250, 0xE34A, 0x9251, 0xE34B, 0x9252, 0xE34C, + 0x9253, 0xE34D, 0x9254, 0xE34E, 0x9255, 0xE34F, 0x9256, 0xE350, 0x9257, 0xE351, 0x9258, 0xE352, 0x9259, 0xE353, 0x925A, 0xE354, + 0x925B, 0xE355, 0x925C, 0xE356, 0x925D, 0xE357, 0x925E, 0xE358, 0x925F, 0xE359, 0x9260, 0xE35A, 0x9261, 0xE35B, 0x9262, 0xE35C, + 0x9263, 0xE35D, 0x9264, 0xE35E, 0x9265, 0xE35F, 0x9266, 0xE360, 0x9267, 0xE361, 0x9268, 0xE362, 0x9269, 0xE363, 0x926A, 0xE364, + 0x926B, 0xE365, 0x926C, 0xE366, 0x926D, 0xE367, 0x926E, 0xE368, 0x926F, 0xE369, 0x9270, 0xE36A, 0x9271, 0xE36B, 0x9272, 0xE36C, + 0x9273, 0xE36D, 0x9274, 0xBCF8, 0x9275, 0xE36E, 0x9276, 0xE36F, 0x9277, 0xE370, 0x9278, 0xE371, 0x9279, 0xE372, 0x927A, 0xE373, + 0x927B, 0xE374, 0x927C, 0xE375, 0x927D, 0xE376, 0x927E, 0xE377, 0x927F, 0xE378, 0x9280, 0xE379, 0x9281, 0xE37A, 0x9282, 0xE37B, + 0x9283, 0xE37C, 0x9284, 0xE37D, 0x9285, 0xE37E, 0x9286, 0xE380, 0x9287, 0xE381, 0x9288, 0xE382, 0x9289, 0xE383, 0x928A, 0xE384, + 0x928B, 0xE385, 0x928C, 0xE386, 0x928D, 0xE387, 0x928E, 0xF6C6, 0x928F, 0xE388, 0x9290, 0xE389, 0x9291, 0xE38A, 0x9292, 0xE38B, + 0x9293, 0xE38C, 0x9294, 0xE38D, 0x9295, 0xE38E, 0x9296, 0xE38F, 0x9297, 0xE390, 0x9298, 0xE391, 0x9299, 0xE392, 0x929A, 0xE393, + 0x929B, 0xE394, 0x929C, 0xE395, 0x929D, 0xE396, 0x929E, 0xE397, 0x929F, 0xE398, 0x92A0, 0xE399, 0x92A1, 0xE39A, 0x92A2, 0xE39B, + 0x92A3, 0xE39C, 0x92A4, 0xE39D, 0x92A5, 0xE39E, 0x92A6, 0xE39F, 0x92A7, 0xE3A0, 0x92A8, 0xE440, 0x92A9, 0xE441, 0x92AA, 0xE442, + 0x92AB, 0xE443, 0x92AC, 0xE444, 0x92AD, 0xE445, 0x92AE, 0xF6C7, 0x92AF, 0xE446, 0x92B0, 0xE447, 0x92B1, 0xE448, 0x92B2, 0xE449, + 0x92B3, 0xE44A, 0x92B4, 0xE44B, 0x92B5, 0xE44C, 0x92B6, 0xE44D, 0x92B7, 0xE44E, 0x92B8, 0xE44F, 0x92B9, 0xE450, 0x92BA, 0xE451, + 0x92BB, 0xE452, 0x92BC, 0xE453, 0x92BD, 0xE454, 0x92BE, 0xE455, 0x92BF, 0xE456, 0x92C0, 0xE457, 0x92C1, 0xE458, 0x92C2, 0xE459, + 0x92C3, 0xE45A, 0x92C4, 0xE45B, 0x92C5, 0xE45C, 0x92C6, 0xE45D, 0x92C7, 0xE45E, 0x92C8, 0xF6C8, 0x92C9, 0xE45F, 0x92CA, 0xE460, + 0x92CB, 0xE461, 0x92CC, 0xE462, 0x92CD, 0xE463, 0x92CE, 0xE464, 0x92CF, 0xE465, 0x92D0, 0xE466, 0x92D1, 0xE467, 0x92D2, 0xE468, + 0x92D3, 0xE469, 0x92D4, 0xE46A, 0x92D5, 0xE46B, 0x92D6, 0xE46C, 0x92D7, 0xE46D, 0x92D8, 0xE46E, 0x92D9, 0xE46F, 0x92DA, 0xE470, + 0x92DB, 0xE471, 0x92DC, 0xE472, 0x92DD, 0xE473, 0x92DE, 0xE474, 0x92DF, 0xE475, 0x92E0, 0xE476, 0x92E1, 0xE477, 0x92E2, 0xE478, + 0x92E3, 0xE479, 0x92E4, 0xE47A, 0x92E5, 0xE47B, 0x92E6, 0xE47C, 0x92E7, 0xE47D, 0x92E8, 0xE47E, 0x92E9, 0xE480, 0x92EA, 0xE481, + 0x92EB, 0xE482, 0x92EC, 0xE483, 0x92ED, 0xE484, 0x92EE, 0xE485, 0x92EF, 0xE486, 0x92F0, 0xE487, 0x92F1, 0xE488, 0x92F2, 0xE489, + 0x92F3, 0xE48A, 0x92F4, 0xE48B, 0x92F5, 0xE48C, 0x92F6, 0xE48D, 0x92F7, 0xE48E, 0x92F8, 0xE48F, 0x92F9, 0xE490, 0x92FA, 0xE491, + 0x92FB, 0xE492, 0x92FC, 0xE493, 0x92FD, 0xE494, 0x92FE, 0xE495, 0x92FF, 0xE496, 0x9300, 0xE497, 0x9301, 0xE498, 0x9302, 0xE499, + 0x9303, 0xE49A, 0x9304, 0xE49B, 0x9305, 0xE49C, 0x9306, 0xE49D, 0x9307, 0xE49E, 0x9308, 0xE49F, 0x9309, 0xE4A0, 0x930A, 0xE540, + 0x930B, 0xE541, 0x930C, 0xE542, 0x930D, 0xE543, 0x930E, 0xE544, 0x930F, 0xE545, 0x9310, 0xE546, 0x9311, 0xE547, 0x9312, 0xE548, + 0x9313, 0xE549, 0x9314, 0xE54A, 0x9315, 0xE54B, 0x9316, 0xE54C, 0x9317, 0xE54D, 0x9318, 0xE54E, 0x9319, 0xE54F, 0x931A, 0xE550, + 0x931B, 0xE551, 0x931C, 0xE552, 0x931D, 0xE553, 0x931E, 0xE554, 0x931F, 0xE555, 0x9320, 0xE556, 0x9321, 0xE557, 0x9322, 0xE558, + 0x9323, 0xE559, 0x9324, 0xE55A, 0x9325, 0xE55B, 0x9326, 0xE55C, 0x9327, 0xE55D, 0x9328, 0xE55E, 0x9329, 0xE55F, 0x932A, 0xE560, + 0x932B, 0xE561, 0x932C, 0xE562, 0x932D, 0xE563, 0x932E, 0xE564, 0x932F, 0xE565, 0x9330, 0xE566, 0x9331, 0xE567, 0x9332, 0xE568, + 0x9333, 0xE569, 0x9334, 0xE56A, 0x9335, 0xE56B, 0x9336, 0xE56C, 0x9337, 0xE56D, 0x9338, 0xE56E, 0x9339, 0xE56F, 0x933A, 0xE570, + 0x933B, 0xE571, 0x933C, 0xE572, 0x933D, 0xE573, 0x933E, 0xF6C9, 0x933F, 0xE574, 0x9340, 0xE575, 0x9341, 0xE576, 0x9342, 0xE577, + 0x9343, 0xE578, 0x9344, 0xE579, 0x9345, 0xE57A, 0x9346, 0xE57B, 0x9347, 0xE57C, 0x9348, 0xE57D, 0x9349, 0xE57E, 0x934A, 0xE580, + 0x934B, 0xE581, 0x934C, 0xE582, 0x934D, 0xE583, 0x934E, 0xE584, 0x934F, 0xE585, 0x9350, 0xE586, 0x9351, 0xE587, 0x9352, 0xE588, + 0x9353, 0xE589, 0x9354, 0xE58A, 0x9355, 0xE58B, 0x9356, 0xE58C, 0x9357, 0xE58D, 0x9358, 0xE58E, 0x9359, 0xE58F, 0x935A, 0xE590, + 0x935B, 0xE591, 0x935C, 0xE592, 0x935D, 0xE593, 0x935E, 0xE594, 0x935F, 0xE595, 0x9360, 0xE596, 0x9361, 0xE597, 0x9362, 0xE598, + 0x9363, 0xE599, 0x9364, 0xE59A, 0x9365, 0xE59B, 0x9366, 0xE59C, 0x9367, 0xE59D, 0x9368, 0xE59E, 0x9369, 0xE59F, 0x936A, 0xF6CA, + 0x936B, 0xE5A0, 0x936C, 0xE640, 0x936D, 0xE641, 0x936E, 0xE642, 0x936F, 0xE643, 0x9370, 0xE644, 0x9371, 0xE645, 0x9372, 0xE646, + 0x9373, 0xE647, 0x9374, 0xE648, 0x9375, 0xE649, 0x9376, 0xE64A, 0x9377, 0xE64B, 0x9378, 0xE64C, 0x9379, 0xE64D, 0x937A, 0xE64E, + 0x937B, 0xE64F, 0x937C, 0xE650, 0x937D, 0xE651, 0x937E, 0xE652, 0x937F, 0xE653, 0x9380, 0xE654, 0x9381, 0xE655, 0x9382, 0xE656, + 0x9383, 0xE657, 0x9384, 0xE658, 0x9385, 0xE659, 0x9386, 0xE65A, 0x9387, 0xE65B, 0x9388, 0xE65C, 0x9389, 0xE65D, 0x938A, 0xE65E, + 0x938B, 0xE65F, 0x938C, 0xE660, 0x938D, 0xE661, 0x938E, 0xE662, 0x938F, 0xF6CC, 0x9390, 0xE663, 0x9391, 0xE664, 0x9392, 0xE665, + 0x9393, 0xE666, 0x9394, 0xE667, 0x9395, 0xE668, 0x9396, 0xE669, 0x9397, 0xE66A, 0x9398, 0xE66B, 0x9399, 0xE66C, 0x939A, 0xE66D, + 0x939B, 0xE66E, 0x939C, 0xE66F, 0x939D, 0xE670, 0x939E, 0xE671, 0x939F, 0xE672, 0x93A0, 0xE673, 0x93A1, 0xE674, 0x93A2, 0xE675, + 0x93A3, 0xE676, 0x93A4, 0xE677, 0x93A5, 0xE678, 0x93A6, 0xE679, 0x93A7, 0xE67A, 0x93A8, 0xE67B, 0x93A9, 0xE67C, 0x93AA, 0xE67D, + 0x93AB, 0xE67E, 0x93AC, 0xE680, 0x93AD, 0xE681, 0x93AE, 0xE682, 0x93AF, 0xE683, 0x93B0, 0xE684, 0x93B1, 0xE685, 0x93B2, 0xE686, + 0x93B3, 0xE687, 0x93B4, 0xE688, 0x93B5, 0xE689, 0x93B6, 0xE68A, 0x93B7, 0xE68B, 0x93B8, 0xE68C, 0x93B9, 0xE68D, 0x93BA, 0xE68E, + 0x93BB, 0xE68F, 0x93BC, 0xE690, 0x93BD, 0xE691, 0x93BE, 0xE692, 0x93BF, 0xE693, 0x93C0, 0xE694, 0x93C1, 0xE695, 0x93C2, 0xE696, + 0x93C3, 0xE697, 0x93C4, 0xE698, 0x93C5, 0xE699, 0x93C6, 0xE69A, 0x93C7, 0xE69B, 0x93C8, 0xE69C, 0x93C9, 0xE69D, 0x93CA, 0xF6CB, + 0x93CB, 0xE69E, 0x93CC, 0xE69F, 0x93CD, 0xE6A0, 0x93CE, 0xE740, 0x93CF, 0xE741, 0x93D0, 0xE742, 0x93D1, 0xE743, 0x93D2, 0xE744, + 0x93D3, 0xE745, 0x93D4, 0xE746, 0x93D5, 0xE747, 0x93D6, 0xF7E9, 0x93D7, 0xE748, 0x93D8, 0xE749, 0x93D9, 0xE74A, 0x93DA, 0xE74B, + 0x93DB, 0xE74C, 0x93DC, 0xE74D, 0x93DD, 0xE74E, 0x93DE, 0xE74F, 0x93DF, 0xE750, 0x93E0, 0xE751, 0x93E1, 0xE752, 0x93E2, 0xE753, + 0x93E3, 0xE754, 0x93E4, 0xE755, 0x93E5, 0xE756, 0x93E6, 0xE757, 0x93E7, 0xE758, 0x93E8, 0xE759, 0x93E9, 0xE75A, 0x93EA, 0xE75B, + 0x93EB, 0xE75C, 0x93EC, 0xE75D, 0x93ED, 0xE75E, 0x93EE, 0xE75F, 0x93EF, 0xE760, 0x93F0, 0xE761, 0x93F1, 0xE762, 0x93F2, 0xE763, + 0x93F3, 0xE764, 0x93F4, 0xE765, 0x93F5, 0xE766, 0x93F6, 0xE767, 0x93F7, 0xE768, 0x93F8, 0xE769, 0x93F9, 0xE76A, 0x93FA, 0xE76B, + 0x93FB, 0xE76C, 0x93FC, 0xE76D, 0x93FD, 0xE76E, 0x93FE, 0xE76F, 0x93FF, 0xE770, 0x9400, 0xE771, 0x9401, 0xE772, 0x9402, 0xE773, + 0x9403, 0xE774, 0x9404, 0xE775, 0x9405, 0xE776, 0x9406, 0xE777, 0x9407, 0xE778, 0x9408, 0xE779, 0x9409, 0xE77A, 0x940A, 0xE77B, + 0x940B, 0xE77C, 0x940C, 0xE77D, 0x940D, 0xE77E, 0x940E, 0xE780, 0x940F, 0xE781, 0x9410, 0xE782, 0x9411, 0xE783, 0x9412, 0xE784, + 0x9413, 0xE785, 0x9414, 0xE786, 0x9415, 0xE787, 0x9416, 0xE788, 0x9417, 0xE789, 0x9418, 0xE78A, 0x9419, 0xE78B, 0x941A, 0xE78C, + 0x941B, 0xE78D, 0x941C, 0xE78E, 0x941D, 0xE78F, 0x941E, 0xE790, 0x941F, 0xE791, 0x9420, 0xE792, 0x9421, 0xE793, 0x9422, 0xE794, + 0x9423, 0xE795, 0x9424, 0xE796, 0x9425, 0xE797, 0x9426, 0xE798, 0x9427, 0xE799, 0x9428, 0xE79A, 0x9429, 0xE79B, 0x942A, 0xE79C, + 0x942B, 0xE79D, 0x942C, 0xE79E, 0x942D, 0xE79F, 0x942E, 0xE7A0, 0x942F, 0xE840, 0x9430, 0xE841, 0x9431, 0xE842, 0x9432, 0xE843, + 0x9433, 0xE844, 0x9434, 0xE845, 0x9435, 0xE846, 0x9436, 0xE847, 0x9437, 0xE848, 0x9438, 0xE849, 0x9439, 0xE84A, 0x943A, 0xE84B, + 0x943B, 0xE84C, 0x943C, 0xE84D, 0x943D, 0xE84E, 0x943E, 0xF6CD, 0x943F, 0xE84F, 0x9440, 0xE850, 0x9441, 0xE851, 0x9442, 0xE852, + 0x9443, 0xE853, 0x9444, 0xE854, 0x9445, 0xE855, 0x9446, 0xE856, 0x9447, 0xE857, 0x9448, 0xE858, 0x9449, 0xE859, 0x944A, 0xE85A, + 0x944B, 0xE85B, 0x944C, 0xE85C, 0x944D, 0xE85D, 0x944E, 0xE85E, 0x944F, 0xE85F, 0x9450, 0xE860, 0x9451, 0xE861, 0x9452, 0xE862, + 0x9453, 0xE863, 0x9454, 0xE864, 0x9455, 0xE865, 0x9456, 0xE866, 0x9457, 0xE867, 0x9458, 0xE868, 0x9459, 0xE869, 0x945A, 0xE86A, + 0x945B, 0xE86B, 0x945C, 0xE86C, 0x945D, 0xE86D, 0x945E, 0xE86E, 0x945F, 0xE86F, 0x9460, 0xE870, 0x9461, 0xE871, 0x9462, 0xE872, + 0x9463, 0xE873, 0x9464, 0xE874, 0x9465, 0xE875, 0x9466, 0xE876, 0x9467, 0xE877, 0x9468, 0xE878, 0x9469, 0xE879, 0x946A, 0xE87A, + 0x946B, 0xF6CE, 0x946C, 0xE87B, 0x946D, 0xE87C, 0x946E, 0xE87D, 0x946F, 0xE87E, 0x9470, 0xE880, 0x9471, 0xE881, 0x9472, 0xE882, + 0x9473, 0xE883, 0x9474, 0xE884, 0x9475, 0xE885, 0x9476, 0xE886, 0x9477, 0xE887, 0x9478, 0xE888, 0x9479, 0xE889, 0x947A, 0xE88A, + 0x947B, 0xE88B, 0x947C, 0xE88C, 0x947D, 0xE88D, 0x947E, 0xE88E, 0x947F, 0xE88F, 0x9480, 0xE890, 0x9481, 0xE891, 0x9482, 0xE892, + 0x9483, 0xE893, 0x9484, 0xE894, 0x9485, 0xEEC4, 0x9486, 0xEEC5, 0x9487, 0xEEC6, 0x9488, 0xD5EB, 0x9489, 0xB6A4, 0x948A, 0xEEC8, + 0x948B, 0xEEC7, 0x948C, 0xEEC9, 0x948D, 0xEECA, 0x948E, 0xC7A5, 0x948F, 0xEECB, 0x9490, 0xEECC, 0x9491, 0xE895, 0x9492, 0xB7B0, + 0x9493, 0xB5F6, 0x9494, 0xEECD, 0x9495, 0xEECF, 0x9496, 0xE896, 0x9497, 0xEECE, 0x9498, 0xE897, 0x9499, 0xB8C6, 0x949A, 0xEED0, + 0x949B, 0xEED1, 0x949C, 0xEED2, 0x949D, 0xB6DB, 0x949E, 0xB3AE, 0x949F, 0xD6D3, 0x94A0, 0xC4C6, 0x94A1, 0xB1B5, 0x94A2, 0xB8D6, + 0x94A3, 0xEED3, 0x94A4, 0xEED4, 0x94A5, 0xD4BF, 0x94A6, 0xC7D5, 0x94A7, 0xBEFB, 0x94A8, 0xCED9, 0x94A9, 0xB9B3, 0x94AA, 0xEED6, + 0x94AB, 0xEED5, 0x94AC, 0xEED8, 0x94AD, 0xEED7, 0x94AE, 0xC5A5, 0x94AF, 0xEED9, 0x94B0, 0xEEDA, 0x94B1, 0xC7AE, 0x94B2, 0xEEDB, + 0x94B3, 0xC7AF, 0x94B4, 0xEEDC, 0x94B5, 0xB2A7, 0x94B6, 0xEEDD, 0x94B7, 0xEEDE, 0x94B8, 0xEEDF, 0x94B9, 0xEEE0, 0x94BA, 0xEEE1, + 0x94BB, 0xD7EA, 0x94BC, 0xEEE2, 0x94BD, 0xEEE3, 0x94BE, 0xBCD8, 0x94BF, 0xEEE4, 0x94C0, 0xD3CB, 0x94C1, 0xCCFA, 0x94C2, 0xB2AC, + 0x94C3, 0xC1E5, 0x94C4, 0xEEE5, 0x94C5, 0xC7A6, 0x94C6, 0xC3AD, 0x94C7, 0xE898, 0x94C8, 0xEEE6, 0x94C9, 0xEEE7, 0x94CA, 0xEEE8, + 0x94CB, 0xEEE9, 0x94CC, 0xEEEA, 0x94CD, 0xEEEB, 0x94CE, 0xEEEC, 0x94CF, 0xE899, 0x94D0, 0xEEED, 0x94D1, 0xEEEE, 0x94D2, 0xEEEF, + 0x94D3, 0xE89A, 0x94D4, 0xE89B, 0x94D5, 0xEEF0, 0x94D6, 0xEEF1, 0x94D7, 0xEEF2, 0x94D8, 0xEEF4, 0x94D9, 0xEEF3, 0x94DA, 0xE89C, + 0x94DB, 0xEEF5, 0x94DC, 0xCDAD, 0x94DD, 0xC2C1, 0x94DE, 0xEEF6, 0x94DF, 0xEEF7, 0x94E0, 0xEEF8, 0x94E1, 0xD5A1, 0x94E2, 0xEEF9, + 0x94E3, 0xCFB3, 0x94E4, 0xEEFA, 0x94E5, 0xEEFB, 0x94E6, 0xE89D, 0x94E7, 0xEEFC, 0x94E8, 0xEEFD, 0x94E9, 0xEFA1, 0x94EA, 0xEEFE, + 0x94EB, 0xEFA2, 0x94EC, 0xB8F5, 0x94ED, 0xC3FA, 0x94EE, 0xEFA3, 0x94EF, 0xEFA4, 0x94F0, 0xBDC2, 0x94F1, 0xD2BF, 0x94F2, 0xB2F9, + 0x94F3, 0xEFA5, 0x94F4, 0xEFA6, 0x94F5, 0xEFA7, 0x94F6, 0xD2F8, 0x94F7, 0xEFA8, 0x94F8, 0xD6FD, 0x94F9, 0xEFA9, 0x94FA, 0xC6CC, + 0x94FB, 0xE89E, 0x94FC, 0xEFAA, 0x94FD, 0xEFAB, 0x94FE, 0xC1B4, 0x94FF, 0xEFAC, 0x9500, 0xCFFA, 0x9501, 0xCBF8, 0x9502, 0xEFAE, + 0x9503, 0xEFAD, 0x9504, 0xB3FA, 0x9505, 0xB9F8, 0x9506, 0xEFAF, 0x9507, 0xEFB0, 0x9508, 0xD0E2, 0x9509, 0xEFB1, 0x950A, 0xEFB2, + 0x950B, 0xB7E6, 0x950C, 0xD0BF, 0x950D, 0xEFB3, 0x950E, 0xEFB4, 0x950F, 0xEFB5, 0x9510, 0xC8F1, 0x9511, 0xCCE0, 0x9512, 0xEFB6, + 0x9513, 0xEFB7, 0x9514, 0xEFB8, 0x9515, 0xEFB9, 0x9516, 0xEFBA, 0x9517, 0xD5E0, 0x9518, 0xEFBB, 0x9519, 0xB4ED, 0x951A, 0xC3AA, + 0x951B, 0xEFBC, 0x951C, 0xE89F, 0x951D, 0xEFBD, 0x951E, 0xEFBE, 0x951F, 0xEFBF, 0x9520, 0xE8A0, 0x9521, 0xCEFD, 0x9522, 0xEFC0, + 0x9523, 0xC2E0, 0x9524, 0xB4B8, 0x9525, 0xD7B6, 0x9526, 0xBDF5, 0x9527, 0xE940, 0x9528, 0xCFC7, 0x9529, 0xEFC3, 0x952A, 0xEFC1, + 0x952B, 0xEFC2, 0x952C, 0xEFC4, 0x952D, 0xB6A7, 0x952E, 0xBCFC, 0x952F, 0xBEE2, 0x9530, 0xC3CC, 0x9531, 0xEFC5, 0x9532, 0xEFC6, + 0x9533, 0xE941, 0x9534, 0xEFC7, 0x9535, 0xEFCF, 0x9536, 0xEFC8, 0x9537, 0xEFC9, 0x9538, 0xEFCA, 0x9539, 0xC7C2, 0x953A, 0xEFF1, + 0x953B, 0xB6CD, 0x953C, 0xEFCB, 0x953D, 0xE942, 0x953E, 0xEFCC, 0x953F, 0xEFCD, 0x9540, 0xB6C6, 0x9541, 0xC3BE, 0x9542, 0xEFCE, + 0x9543, 0xE943, 0x9544, 0xEFD0, 0x9545, 0xEFD1, 0x9546, 0xEFD2, 0x9547, 0xD5F2, 0x9548, 0xE944, 0x9549, 0xEFD3, 0x954A, 0xC4F7, + 0x954B, 0xE945, 0x954C, 0xEFD4, 0x954D, 0xC4F8, 0x954E, 0xEFD5, 0x954F, 0xEFD6, 0x9550, 0xB8E4, 0x9551, 0xB0F7, 0x9552, 0xEFD7, + 0x9553, 0xEFD8, 0x9554, 0xEFD9, 0x9555, 0xE946, 0x9556, 0xEFDA, 0x9557, 0xEFDB, 0x9558, 0xEFDC, 0x9559, 0xEFDD, 0x955A, 0xE947, + 0x955B, 0xEFDE, 0x955C, 0xBEB5, 0x955D, 0xEFE1, 0x955E, 0xEFDF, 0x955F, 0xEFE0, 0x9560, 0xE948, 0x9561, 0xEFE2, 0x9562, 0xEFE3, + 0x9563, 0xC1CD, 0x9564, 0xEFE4, 0x9565, 0xEFE5, 0x9566, 0xEFE6, 0x9567, 0xEFE7, 0x9568, 0xEFE8, 0x9569, 0xEFE9, 0x956A, 0xEFEA, + 0x956B, 0xEFEB, 0x956C, 0xEFEC, 0x956D, 0xC0D8, 0x956E, 0xE949, 0x956F, 0xEFED, 0x9570, 0xC1AD, 0x9571, 0xEFEE, 0x9572, 0xEFEF, + 0x9573, 0xEFF0, 0x9574, 0xE94A, 0x9575, 0xE94B, 0x9576, 0xCFE2, 0x9577, 0xE94C, 0x9578, 0xE94D, 0x9579, 0xE94E, 0x957A, 0xE94F, + 0x957B, 0xE950, 0x957C, 0xE951, 0x957D, 0xE952, 0x957E, 0xE953, 0x957F, 0xB3A4, 0x9580, 0xE954, 0x9581, 0xE955, 0x9582, 0xE956, + 0x9583, 0xE957, 0x9584, 0xE958, 0x9585, 0xE959, 0x9586, 0xE95A, 0x9587, 0xE95B, 0x9588, 0xE95C, 0x9589, 0xE95D, 0x958A, 0xE95E, + 0x958B, 0xE95F, 0x958C, 0xE960, 0x958D, 0xE961, 0x958E, 0xE962, 0x958F, 0xE963, 0x9590, 0xE964, 0x9591, 0xE965, 0x9592, 0xE966, + 0x9593, 0xE967, 0x9594, 0xE968, 0x9595, 0xE969, 0x9596, 0xE96A, 0x9597, 0xE96B, 0x9598, 0xE96C, 0x9599, 0xE96D, 0x959A, 0xE96E, + 0x959B, 0xE96F, 0x959C, 0xE970, 0x959D, 0xE971, 0x959E, 0xE972, 0x959F, 0xE973, 0x95A0, 0xE974, 0x95A1, 0xE975, 0x95A2, 0xE976, + 0x95A3, 0xE977, 0x95A4, 0xE978, 0x95A5, 0xE979, 0x95A6, 0xE97A, 0x95A7, 0xE97B, 0x95A8, 0xE97C, 0x95A9, 0xE97D, 0x95AA, 0xE97E, + 0x95AB, 0xE980, 0x95AC, 0xE981, 0x95AD, 0xE982, 0x95AE, 0xE983, 0x95AF, 0xE984, 0x95B0, 0xE985, 0x95B1, 0xE986, 0x95B2, 0xE987, + 0x95B3, 0xE988, 0x95B4, 0xE989, 0x95B5, 0xE98A, 0x95B6, 0xE98B, 0x95B7, 0xE98C, 0x95B8, 0xE98D, 0x95B9, 0xE98E, 0x95BA, 0xE98F, + 0x95BB, 0xE990, 0x95BC, 0xE991, 0x95BD, 0xE992, 0x95BE, 0xE993, 0x95BF, 0xE994, 0x95C0, 0xE995, 0x95C1, 0xE996, 0x95C2, 0xE997, + 0x95C3, 0xE998, 0x95C4, 0xE999, 0x95C5, 0xE99A, 0x95C6, 0xE99B, 0x95C7, 0xE99C, 0x95C8, 0xE99D, 0x95C9, 0xE99E, 0x95CA, 0xE99F, + 0x95CB, 0xE9A0, 0x95CC, 0xEA40, 0x95CD, 0xEA41, 0x95CE, 0xEA42, 0x95CF, 0xEA43, 0x95D0, 0xEA44, 0x95D1, 0xEA45, 0x95D2, 0xEA46, + 0x95D3, 0xEA47, 0x95D4, 0xEA48, 0x95D5, 0xEA49, 0x95D6, 0xEA4A, 0x95D7, 0xEA4B, 0x95D8, 0xEA4C, 0x95D9, 0xEA4D, 0x95DA, 0xEA4E, + 0x95DB, 0xEA4F, 0x95DC, 0xEA50, 0x95DD, 0xEA51, 0x95DE, 0xEA52, 0x95DF, 0xEA53, 0x95E0, 0xEA54, 0x95E1, 0xEA55, 0x95E2, 0xEA56, + 0x95E3, 0xEA57, 0x95E4, 0xEA58, 0x95E5, 0xEA59, 0x95E6, 0xEA5A, 0x95E7, 0xEA5B, 0x95E8, 0xC3C5, 0x95E9, 0xE3C5, 0x95EA, 0xC9C1, + 0x95EB, 0xE3C6, 0x95EC, 0xEA5C, 0x95ED, 0xB1D5, 0x95EE, 0xCECA, 0x95EF, 0xB4B3, 0x95F0, 0xC8F2, 0x95F1, 0xE3C7, 0x95F2, 0xCFD0, + 0x95F3, 0xE3C8, 0x95F4, 0xBCE4, 0x95F5, 0xE3C9, 0x95F6, 0xE3CA, 0x95F7, 0xC3C6, 0x95F8, 0xD5A2, 0x95F9, 0xC4D6, 0x95FA, 0xB9EB, + 0x95FB, 0xCEC5, 0x95FC, 0xE3CB, 0x95FD, 0xC3F6, 0x95FE, 0xE3CC, 0x95FF, 0xEA5D, 0x9600, 0xB7A7, 0x9601, 0xB8F3, 0x9602, 0xBAD2, + 0x9603, 0xE3CD, 0x9604, 0xE3CE, 0x9605, 0xD4C4, 0x9606, 0xE3CF, 0x9607, 0xEA5E, 0x9608, 0xE3D0, 0x9609, 0xD1CB, 0x960A, 0xE3D1, + 0x960B, 0xE3D2, 0x960C, 0xE3D3, 0x960D, 0xE3D4, 0x960E, 0xD1D6, 0x960F, 0xE3D5, 0x9610, 0xB2FB, 0x9611, 0xC0BB, 0x9612, 0xE3D6, + 0x9613, 0xEA5F, 0x9614, 0xC0AB, 0x9615, 0xE3D7, 0x9616, 0xE3D8, 0x9617, 0xE3D9, 0x9618, 0xEA60, 0x9619, 0xE3DA, 0x961A, 0xE3DB, + 0x961B, 0xEA61, 0x961C, 0xB8B7, 0x961D, 0xDAE2, 0x961E, 0xEA62, 0x961F, 0xB6D3, 0x9620, 0xEA63, 0x9621, 0xDAE4, 0x9622, 0xDAE3, + 0x9623, 0xEA64, 0x9624, 0xEA65, 0x9625, 0xEA66, 0x9626, 0xEA67, 0x9627, 0xEA68, 0x9628, 0xEA69, 0x9629, 0xEA6A, 0x962A, 0xDAE6, + 0x962B, 0xEA6B, 0x962C, 0xEA6C, 0x962D, 0xEA6D, 0x962E, 0xC8EE, 0x962F, 0xEA6E, 0x9630, 0xEA6F, 0x9631, 0xDAE5, 0x9632, 0xB7C0, + 0x9633, 0xD1F4, 0x9634, 0xD2F5, 0x9635, 0xD5F3, 0x9636, 0xBDD7, 0x9637, 0xEA70, 0x9638, 0xEA71, 0x9639, 0xEA72, 0x963A, 0xEA73, + 0x963B, 0xD7E8, 0x963C, 0xDAE8, 0x963D, 0xDAE7, 0x963E, 0xEA74, 0x963F, 0xB0A2, 0x9640, 0xCDD3, 0x9641, 0xEA75, 0x9642, 0xDAE9, + 0x9643, 0xEA76, 0x9644, 0xB8BD, 0x9645, 0xBCCA, 0x9646, 0xC2BD, 0x9647, 0xC2A4, 0x9648, 0xB3C2, 0x9649, 0xDAEA, 0x964A, 0xEA77, + 0x964B, 0xC2AA, 0x964C, 0xC4B0, 0x964D, 0xBDB5, 0x964E, 0xEA78, 0x964F, 0xEA79, 0x9650, 0xCFDE, 0x9651, 0xEA7A, 0x9652, 0xEA7B, + 0x9653, 0xEA7C, 0x9654, 0xDAEB, 0x9655, 0xC9C2, 0x9656, 0xEA7D, 0x9657, 0xEA7E, 0x9658, 0xEA80, 0x9659, 0xEA81, 0x965A, 0xEA82, + 0x965B, 0xB1DD, 0x965C, 0xEA83, 0x965D, 0xEA84, 0x965E, 0xEA85, 0x965F, 0xDAEC, 0x9660, 0xEA86, 0x9661, 0xB6B8, 0x9662, 0xD4BA, + 0x9663, 0xEA87, 0x9664, 0xB3FD, 0x9665, 0xEA88, 0x9666, 0xEA89, 0x9667, 0xDAED, 0x9668, 0xD4C9, 0x9669, 0xCFD5, 0x966A, 0xC5E3, + 0x966B, 0xEA8A, 0x966C, 0xDAEE, 0x966D, 0xEA8B, 0x966E, 0xEA8C, 0x966F, 0xEA8D, 0x9670, 0xEA8E, 0x9671, 0xEA8F, 0x9672, 0xDAEF, + 0x9673, 0xEA90, 0x9674, 0xDAF0, 0x9675, 0xC1EA, 0x9676, 0xCCD5, 0x9677, 0xCFDD, 0x9678, 0xEA91, 0x9679, 0xEA92, 0x967A, 0xEA93, + 0x967B, 0xEA94, 0x967C, 0xEA95, 0x967D, 0xEA96, 0x967E, 0xEA97, 0x967F, 0xEA98, 0x9680, 0xEA99, 0x9681, 0xEA9A, 0x9682, 0xEA9B, + 0x9683, 0xEA9C, 0x9684, 0xEA9D, 0x9685, 0xD3E7, 0x9686, 0xC2A1, 0x9687, 0xEA9E, 0x9688, 0xDAF1, 0x9689, 0xEA9F, 0x968A, 0xEAA0, + 0x968B, 0xCBE5, 0x968C, 0xEB40, 0x968D, 0xDAF2, 0x968E, 0xEB41, 0x968F, 0xCBE6, 0x9690, 0xD2FE, 0x9691, 0xEB42, 0x9692, 0xEB43, + 0x9693, 0xEB44, 0x9694, 0xB8F4, 0x9695, 0xEB45, 0x9696, 0xEB46, 0x9697, 0xDAF3, 0x9698, 0xB0AF, 0x9699, 0xCFB6, 0x969A, 0xEB47, + 0x969B, 0xEB48, 0x969C, 0xD5CF, 0x969D, 0xEB49, 0x969E, 0xEB4A, 0x969F, 0xEB4B, 0x96A0, 0xEB4C, 0x96A1, 0xEB4D, 0x96A2, 0xEB4E, + 0x96A3, 0xEB4F, 0x96A4, 0xEB50, 0x96A5, 0xEB51, 0x96A6, 0xEB52, 0x96A7, 0xCBED, 0x96A8, 0xEB53, 0x96A9, 0xEB54, 0x96AA, 0xEB55, + 0x96AB, 0xEB56, 0x96AC, 0xEB57, 0x96AD, 0xEB58, 0x96AE, 0xEB59, 0x96AF, 0xEB5A, 0x96B0, 0xDAF4, 0x96B1, 0xEB5B, 0x96B2, 0xEB5C, + 0x96B3, 0xE3C4, 0x96B4, 0xEB5D, 0x96B5, 0xEB5E, 0x96B6, 0xC1A5, 0x96B7, 0xEB5F, 0x96B8, 0xEB60, 0x96B9, 0xF6BF, 0x96BA, 0xEB61, + 0x96BB, 0xEB62, 0x96BC, 0xF6C0, 0x96BD, 0xF6C1, 0x96BE, 0xC4D1, 0x96BF, 0xEB63, 0x96C0, 0xC8B8, 0x96C1, 0xD1E3, 0x96C2, 0xEB64, + 0x96C3, 0xEB65, 0x96C4, 0xD0DB, 0x96C5, 0xD1C5, 0x96C6, 0xBCAF, 0x96C7, 0xB9CD, 0x96C8, 0xEB66, 0x96C9, 0xEFF4, 0x96CA, 0xEB67, + 0x96CB, 0xEB68, 0x96CC, 0xB4C6, 0x96CD, 0xD3BA, 0x96CE, 0xF6C2, 0x96CF, 0xB3FB, 0x96D0, 0xEB69, 0x96D1, 0xEB6A, 0x96D2, 0xF6C3, + 0x96D3, 0xEB6B, 0x96D4, 0xEB6C, 0x96D5, 0xB5F1, 0x96D6, 0xEB6D, 0x96D7, 0xEB6E, 0x96D8, 0xEB6F, 0x96D9, 0xEB70, 0x96DA, 0xEB71, + 0x96DB, 0xEB72, 0x96DC, 0xEB73, 0x96DD, 0xEB74, 0x96DE, 0xEB75, 0x96DF, 0xEB76, 0x96E0, 0xF6C5, 0x96E1, 0xEB77, 0x96E2, 0xEB78, + 0x96E3, 0xEB79, 0x96E4, 0xEB7A, 0x96E5, 0xEB7B, 0x96E6, 0xEB7C, 0x96E7, 0xEB7D, 0x96E8, 0xD3EA, 0x96E9, 0xF6A7, 0x96EA, 0xD1A9, + 0x96EB, 0xEB7E, 0x96EC, 0xEB80, 0x96ED, 0xEB81, 0x96EE, 0xEB82, 0x96EF, 0xF6A9, 0x96F0, 0xEB83, 0x96F1, 0xEB84, 0x96F2, 0xEB85, + 0x96F3, 0xF6A8, 0x96F4, 0xEB86, 0x96F5, 0xEB87, 0x96F6, 0xC1E3, 0x96F7, 0xC0D7, 0x96F8, 0xEB88, 0x96F9, 0xB1A2, 0x96FA, 0xEB89, + 0x96FB, 0xEB8A, 0x96FC, 0xEB8B, 0x96FD, 0xEB8C, 0x96FE, 0xCEED, 0x96FF, 0xEB8D, 0x9700, 0xD0E8, 0x9701, 0xF6AB, 0x9702, 0xEB8E, + 0x9703, 0xEB8F, 0x9704, 0xCFF6, 0x9705, 0xEB90, 0x9706, 0xF6AA, 0x9707, 0xD5F0, 0x9708, 0xF6AC, 0x9709, 0xC3B9, 0x970A, 0xEB91, + 0x970B, 0xEB92, 0x970C, 0xEB93, 0x970D, 0xBBF4, 0x970E, 0xF6AE, 0x970F, 0xF6AD, 0x9710, 0xEB94, 0x9711, 0xEB95, 0x9712, 0xEB96, + 0x9713, 0xC4DE, 0x9714, 0xEB97, 0x9715, 0xEB98, 0x9716, 0xC1D8, 0x9717, 0xEB99, 0x9718, 0xEB9A, 0x9719, 0xEB9B, 0x971A, 0xEB9C, + 0x971B, 0xEB9D, 0x971C, 0xCBAA, 0x971D, 0xEB9E, 0x971E, 0xCFBC, 0x971F, 0xEB9F, 0x9720, 0xEBA0, 0x9721, 0xEC40, 0x9722, 0xEC41, + 0x9723, 0xEC42, 0x9724, 0xEC43, 0x9725, 0xEC44, 0x9726, 0xEC45, 0x9727, 0xEC46, 0x9728, 0xEC47, 0x9729, 0xEC48, 0x972A, 0xF6AF, + 0x972B, 0xEC49, 0x972C, 0xEC4A, 0x972D, 0xF6B0, 0x972E, 0xEC4B, 0x972F, 0xEC4C, 0x9730, 0xF6B1, 0x9731, 0xEC4D, 0x9732, 0xC2B6, + 0x9733, 0xEC4E, 0x9734, 0xEC4F, 0x9735, 0xEC50, 0x9736, 0xEC51, 0x9737, 0xEC52, 0x9738, 0xB0D4, 0x9739, 0xC5F9, 0x973A, 0xEC53, + 0x973B, 0xEC54, 0x973C, 0xEC55, 0x973D, 0xEC56, 0x973E, 0xF6B2, 0x973F, 0xEC57, 0x9740, 0xEC58, 0x9741, 0xEC59, 0x9742, 0xEC5A, + 0x9743, 0xEC5B, 0x9744, 0xEC5C, 0x9745, 0xEC5D, 0x9746, 0xEC5E, 0x9747, 0xEC5F, 0x9748, 0xEC60, 0x9749, 0xEC61, 0x974A, 0xEC62, + 0x974B, 0xEC63, 0x974C, 0xEC64, 0x974D, 0xEC65, 0x974E, 0xEC66, 0x974F, 0xEC67, 0x9750, 0xEC68, 0x9751, 0xEC69, 0x9752, 0xC7E0, + 0x9753, 0xF6A6, 0x9754, 0xEC6A, 0x9755, 0xEC6B, 0x9756, 0xBEB8, 0x9757, 0xEC6C, 0x9758, 0xEC6D, 0x9759, 0xBEB2, 0x975A, 0xEC6E, + 0x975B, 0xB5E5, 0x975C, 0xEC6F, 0x975D, 0xEC70, 0x975E, 0xB7C7, 0x975F, 0xEC71, 0x9760, 0xBFBF, 0x9761, 0xC3D2, 0x9762, 0xC3E6, + 0x9763, 0xEC72, 0x9764, 0xEC73, 0x9765, 0xD8CC, 0x9766, 0xEC74, 0x9767, 0xEC75, 0x9768, 0xEC76, 0x9769, 0xB8EF, 0x976A, 0xEC77, + 0x976B, 0xEC78, 0x976C, 0xEC79, 0x976D, 0xEC7A, 0x976E, 0xEC7B, 0x976F, 0xEC7C, 0x9770, 0xEC7D, 0x9771, 0xEC7E, 0x9772, 0xEC80, + 0x9773, 0xBDF9, 0x9774, 0xD1A5, 0x9775, 0xEC81, 0x9776, 0xB0D0, 0x9777, 0xEC82, 0x9778, 0xEC83, 0x9779, 0xEC84, 0x977A, 0xEC85, + 0x977B, 0xEC86, 0x977C, 0xF7B0, 0x977D, 0xEC87, 0x977E, 0xEC88, 0x977F, 0xEC89, 0x9780, 0xEC8A, 0x9781, 0xEC8B, 0x9782, 0xEC8C, + 0x9783, 0xEC8D, 0x9784, 0xEC8E, 0x9785, 0xF7B1, 0x9786, 0xEC8F, 0x9787, 0xEC90, 0x9788, 0xEC91, 0x9789, 0xEC92, 0x978A, 0xEC93, + 0x978B, 0xD0AC, 0x978C, 0xEC94, 0x978D, 0xB0B0, 0x978E, 0xEC95, 0x978F, 0xEC96, 0x9790, 0xEC97, 0x9791, 0xF7B2, 0x9792, 0xF7B3, + 0x9793, 0xEC98, 0x9794, 0xF7B4, 0x9795, 0xEC99, 0x9796, 0xEC9A, 0x9797, 0xEC9B, 0x9798, 0xC7CA, 0x9799, 0xEC9C, 0x979A, 0xEC9D, + 0x979B, 0xEC9E, 0x979C, 0xEC9F, 0x979D, 0xECA0, 0x979E, 0xED40, 0x979F, 0xED41, 0x97A0, 0xBECF, 0x97A1, 0xED42, 0x97A2, 0xED43, + 0x97A3, 0xF7B7, 0x97A4, 0xED44, 0x97A5, 0xED45, 0x97A6, 0xED46, 0x97A7, 0xED47, 0x97A8, 0xED48, 0x97A9, 0xED49, 0x97AA, 0xED4A, + 0x97AB, 0xF7B6, 0x97AC, 0xED4B, 0x97AD, 0xB1DE, 0x97AE, 0xED4C, 0x97AF, 0xF7B5, 0x97B0, 0xED4D, 0x97B1, 0xED4E, 0x97B2, 0xF7B8, + 0x97B3, 0xED4F, 0x97B4, 0xF7B9, 0x97B5, 0xED50, 0x97B6, 0xED51, 0x97B7, 0xED52, 0x97B8, 0xED53, 0x97B9, 0xED54, 0x97BA, 0xED55, + 0x97BB, 0xED56, 0x97BC, 0xED57, 0x97BD, 0xED58, 0x97BE, 0xED59, 0x97BF, 0xED5A, 0x97C0, 0xED5B, 0x97C1, 0xED5C, 0x97C2, 0xED5D, + 0x97C3, 0xED5E, 0x97C4, 0xED5F, 0x97C5, 0xED60, 0x97C6, 0xED61, 0x97C7, 0xED62, 0x97C8, 0xED63, 0x97C9, 0xED64, 0x97CA, 0xED65, + 0x97CB, 0xED66, 0x97CC, 0xED67, 0x97CD, 0xED68, 0x97CE, 0xED69, 0x97CF, 0xED6A, 0x97D0, 0xED6B, 0x97D1, 0xED6C, 0x97D2, 0xED6D, + 0x97D3, 0xED6E, 0x97D4, 0xED6F, 0x97D5, 0xED70, 0x97D6, 0xED71, 0x97D7, 0xED72, 0x97D8, 0xED73, 0x97D9, 0xED74, 0x97DA, 0xED75, + 0x97DB, 0xED76, 0x97DC, 0xED77, 0x97DD, 0xED78, 0x97DE, 0xED79, 0x97DF, 0xED7A, 0x97E0, 0xED7B, 0x97E1, 0xED7C, 0x97E2, 0xED7D, + 0x97E3, 0xED7E, 0x97E4, 0xED80, 0x97E5, 0xED81, 0x97E6, 0xCEA4, 0x97E7, 0xC8CD, 0x97E8, 0xED82, 0x97E9, 0xBAAB, 0x97EA, 0xE8B8, + 0x97EB, 0xE8B9, 0x97EC, 0xE8BA, 0x97ED, 0xBEC2, 0x97EE, 0xED83, 0x97EF, 0xED84, 0x97F0, 0xED85, 0x97F1, 0xED86, 0x97F2, 0xED87, + 0x97F3, 0xD2F4, 0x97F4, 0xED88, 0x97F5, 0xD4CF, 0x97F6, 0xC9D8, 0x97F7, 0xED89, 0x97F8, 0xED8A, 0x97F9, 0xED8B, 0x97FA, 0xED8C, + 0x97FB, 0xED8D, 0x97FC, 0xED8E, 0x97FD, 0xED8F, 0x97FE, 0xED90, 0x97FF, 0xED91, 0x9800, 0xED92, 0x9801, 0xED93, 0x9802, 0xED94, + 0x9803, 0xED95, 0x9804, 0xED96, 0x9805, 0xED97, 0x9806, 0xED98, 0x9807, 0xED99, 0x9808, 0xED9A, 0x9809, 0xED9B, 0x980A, 0xED9C, + 0x980B, 0xED9D, 0x980C, 0xED9E, 0x980D, 0xED9F, 0x980E, 0xEDA0, 0x980F, 0xEE40, 0x9810, 0xEE41, 0x9811, 0xEE42, 0x9812, 0xEE43, + 0x9813, 0xEE44, 0x9814, 0xEE45, 0x9815, 0xEE46, 0x9816, 0xEE47, 0x9817, 0xEE48, 0x9818, 0xEE49, 0x9819, 0xEE4A, 0x981A, 0xEE4B, + 0x981B, 0xEE4C, 0x981C, 0xEE4D, 0x981D, 0xEE4E, 0x981E, 0xEE4F, 0x981F, 0xEE50, 0x9820, 0xEE51, 0x9821, 0xEE52, 0x9822, 0xEE53, + 0x9823, 0xEE54, 0x9824, 0xEE55, 0x9825, 0xEE56, 0x9826, 0xEE57, 0x9827, 0xEE58, 0x9828, 0xEE59, 0x9829, 0xEE5A, 0x982A, 0xEE5B, + 0x982B, 0xEE5C, 0x982C, 0xEE5D, 0x982D, 0xEE5E, 0x982E, 0xEE5F, 0x982F, 0xEE60, 0x9830, 0xEE61, 0x9831, 0xEE62, 0x9832, 0xEE63, + 0x9833, 0xEE64, 0x9834, 0xEE65, 0x9835, 0xEE66, 0x9836, 0xEE67, 0x9837, 0xEE68, 0x9838, 0xEE69, 0x9839, 0xEE6A, 0x983A, 0xEE6B, + 0x983B, 0xEE6C, 0x983C, 0xEE6D, 0x983D, 0xEE6E, 0x983E, 0xEE6F, 0x983F, 0xEE70, 0x9840, 0xEE71, 0x9841, 0xEE72, 0x9842, 0xEE73, + 0x9843, 0xEE74, 0x9844, 0xEE75, 0x9845, 0xEE76, 0x9846, 0xEE77, 0x9847, 0xEE78, 0x9848, 0xEE79, 0x9849, 0xEE7A, 0x984A, 0xEE7B, + 0x984B, 0xEE7C, 0x984C, 0xEE7D, 0x984D, 0xEE7E, 0x984E, 0xEE80, 0x984F, 0xEE81, 0x9850, 0xEE82, 0x9851, 0xEE83, 0x9852, 0xEE84, + 0x9853, 0xEE85, 0x9854, 0xEE86, 0x9855, 0xEE87, 0x9856, 0xEE88, 0x9857, 0xEE89, 0x9858, 0xEE8A, 0x9859, 0xEE8B, 0x985A, 0xEE8C, + 0x985B, 0xEE8D, 0x985C, 0xEE8E, 0x985D, 0xEE8F, 0x985E, 0xEE90, 0x985F, 0xEE91, 0x9860, 0xEE92, 0x9861, 0xEE93, 0x9862, 0xEE94, + 0x9863, 0xEE95, 0x9864, 0xEE96, 0x9865, 0xEE97, 0x9866, 0xEE98, 0x9867, 0xEE99, 0x9868, 0xEE9A, 0x9869, 0xEE9B, 0x986A, 0xEE9C, + 0x986B, 0xEE9D, 0x986C, 0xEE9E, 0x986D, 0xEE9F, 0x986E, 0xEEA0, 0x986F, 0xEF40, 0x9870, 0xEF41, 0x9871, 0xEF42, 0x9872, 0xEF43, + 0x9873, 0xEF44, 0x9874, 0xEF45, 0x9875, 0xD2B3, 0x9876, 0xB6A5, 0x9877, 0xC7EA, 0x9878, 0xF1FC, 0x9879, 0xCFEE, 0x987A, 0xCBB3, + 0x987B, 0xD0EB, 0x987C, 0xE7EF, 0x987D, 0xCDE7, 0x987E, 0xB9CB, 0x987F, 0xB6D9, 0x9880, 0xF1FD, 0x9881, 0xB0E4, 0x9882, 0xCBCC, + 0x9883, 0xF1FE, 0x9884, 0xD4A4, 0x9885, 0xC2AD, 0x9886, 0xC1EC, 0x9887, 0xC6C4, 0x9888, 0xBEB1, 0x9889, 0xF2A1, 0x988A, 0xBCD5, + 0x988B, 0xEF46, 0x988C, 0xF2A2, 0x988D, 0xF2A3, 0x988E, 0xEF47, 0x988F, 0xF2A4, 0x9890, 0xD2C3, 0x9891, 0xC6B5, 0x9892, 0xEF48, + 0x9893, 0xCDC7, 0x9894, 0xF2A5, 0x9895, 0xEF49, 0x9896, 0xD3B1, 0x9897, 0xBFC5, 0x9898, 0xCCE2, 0x9899, 0xEF4A, 0x989A, 0xF2A6, + 0x989B, 0xF2A7, 0x989C, 0xD1D5, 0x989D, 0xB6EE, 0x989E, 0xF2A8, 0x989F, 0xF2A9, 0x98A0, 0xB5DF, 0x98A1, 0xF2AA, 0x98A2, 0xF2AB, + 0x98A3, 0xEF4B, 0x98A4, 0xB2FC, 0x98A5, 0xF2AC, 0x98A6, 0xF2AD, 0x98A7, 0xC8A7, 0x98A8, 0xEF4C, 0x98A9, 0xEF4D, 0x98AA, 0xEF4E, + 0x98AB, 0xEF4F, 0x98AC, 0xEF50, 0x98AD, 0xEF51, 0x98AE, 0xEF52, 0x98AF, 0xEF53, 0x98B0, 0xEF54, 0x98B1, 0xEF55, 0x98B2, 0xEF56, + 0x98B3, 0xEF57, 0x98B4, 0xEF58, 0x98B5, 0xEF59, 0x98B6, 0xEF5A, 0x98B7, 0xEF5B, 0x98B8, 0xEF5C, 0x98B9, 0xEF5D, 0x98BA, 0xEF5E, + 0x98BB, 0xEF5F, 0x98BC, 0xEF60, 0x98BD, 0xEF61, 0x98BE, 0xEF62, 0x98BF, 0xEF63, 0x98C0, 0xEF64, 0x98C1, 0xEF65, 0x98C2, 0xEF66, + 0x98C3, 0xEF67, 0x98C4, 0xEF68, 0x98C5, 0xEF69, 0x98C6, 0xEF6A, 0x98C7, 0xEF6B, 0x98C8, 0xEF6C, 0x98C9, 0xEF6D, 0x98CA, 0xEF6E, + 0x98CB, 0xEF6F, 0x98CC, 0xEF70, 0x98CD, 0xEF71, 0x98CE, 0xB7E7, 0x98CF, 0xEF72, 0x98D0, 0xEF73, 0x98D1, 0xECA9, 0x98D2, 0xECAA, + 0x98D3, 0xECAB, 0x98D4, 0xEF74, 0x98D5, 0xECAC, 0x98D6, 0xEF75, 0x98D7, 0xEF76, 0x98D8, 0xC6AE, 0x98D9, 0xECAD, 0x98DA, 0xECAE, + 0x98DB, 0xEF77, 0x98DC, 0xEF78, 0x98DD, 0xEF79, 0x98DE, 0xB7C9, 0x98DF, 0xCAB3, 0x98E0, 0xEF7A, 0x98E1, 0xEF7B, 0x98E2, 0xEF7C, + 0x98E3, 0xEF7D, 0x98E4, 0xEF7E, 0x98E5, 0xEF80, 0x98E6, 0xEF81, 0x98E7, 0xE2B8, 0x98E8, 0xF7CF, 0x98E9, 0xEF82, 0x98EA, 0xEF83, + 0x98EB, 0xEF84, 0x98EC, 0xEF85, 0x98ED, 0xEF86, 0x98EE, 0xEF87, 0x98EF, 0xEF88, 0x98F0, 0xEF89, 0x98F1, 0xEF8A, 0x98F2, 0xEF8B, + 0x98F3, 0xEF8C, 0x98F4, 0xEF8D, 0x98F5, 0xEF8E, 0x98F6, 0xEF8F, 0x98F7, 0xEF90, 0x98F8, 0xEF91, 0x98F9, 0xEF92, 0x98FA, 0xEF93, + 0x98FB, 0xEF94, 0x98FC, 0xEF95, 0x98FD, 0xEF96, 0x98FE, 0xEF97, 0x98FF, 0xEF98, 0x9900, 0xEF99, 0x9901, 0xEF9A, 0x9902, 0xEF9B, + 0x9903, 0xEF9C, 0x9904, 0xEF9D, 0x9905, 0xEF9E, 0x9906, 0xEF9F, 0x9907, 0xEFA0, 0x9908, 0xF040, 0x9909, 0xF041, 0x990A, 0xF042, + 0x990B, 0xF043, 0x990C, 0xF044, 0x990D, 0xF7D0, 0x990E, 0xF045, 0x990F, 0xF046, 0x9910, 0xB2CD, 0x9911, 0xF047, 0x9912, 0xF048, + 0x9913, 0xF049, 0x9914, 0xF04A, 0x9915, 0xF04B, 0x9916, 0xF04C, 0x9917, 0xF04D, 0x9918, 0xF04E, 0x9919, 0xF04F, 0x991A, 0xF050, + 0x991B, 0xF051, 0x991C, 0xF052, 0x991D, 0xF053, 0x991E, 0xF054, 0x991F, 0xF055, 0x9920, 0xF056, 0x9921, 0xF057, 0x9922, 0xF058, + 0x9923, 0xF059, 0x9924, 0xF05A, 0x9925, 0xF05B, 0x9926, 0xF05C, 0x9927, 0xF05D, 0x9928, 0xF05E, 0x9929, 0xF05F, 0x992A, 0xF060, + 0x992B, 0xF061, 0x992C, 0xF062, 0x992D, 0xF063, 0x992E, 0xF7D1, 0x992F, 0xF064, 0x9930, 0xF065, 0x9931, 0xF066, 0x9932, 0xF067, + 0x9933, 0xF068, 0x9934, 0xF069, 0x9935, 0xF06A, 0x9936, 0xF06B, 0x9937, 0xF06C, 0x9938, 0xF06D, 0x9939, 0xF06E, 0x993A, 0xF06F, + 0x993B, 0xF070, 0x993C, 0xF071, 0x993D, 0xF072, 0x993E, 0xF073, 0x993F, 0xF074, 0x9940, 0xF075, 0x9941, 0xF076, 0x9942, 0xF077, + 0x9943, 0xF078, 0x9944, 0xF079, 0x9945, 0xF07A, 0x9946, 0xF07B, 0x9947, 0xF07C, 0x9948, 0xF07D, 0x9949, 0xF07E, 0x994A, 0xF080, + 0x994B, 0xF081, 0x994C, 0xF082, 0x994D, 0xF083, 0x994E, 0xF084, 0x994F, 0xF085, 0x9950, 0xF086, 0x9951, 0xF087, 0x9952, 0xF088, + 0x9953, 0xF089, 0x9954, 0xF7D3, 0x9955, 0xF7D2, 0x9956, 0xF08A, 0x9957, 0xF08B, 0x9958, 0xF08C, 0x9959, 0xF08D, 0x995A, 0xF08E, + 0x995B, 0xF08F, 0x995C, 0xF090, 0x995D, 0xF091, 0x995E, 0xF092, 0x995F, 0xF093, 0x9960, 0xF094, 0x9961, 0xF095, 0x9962, 0xF096, + 0x9963, 0xE2BB, 0x9964, 0xF097, 0x9965, 0xBCA2, 0x9966, 0xF098, 0x9967, 0xE2BC, 0x9968, 0xE2BD, 0x9969, 0xE2BE, 0x996A, 0xE2BF, + 0x996B, 0xE2C0, 0x996C, 0xE2C1, 0x996D, 0xB7B9, 0x996E, 0xD2FB, 0x996F, 0xBDA4, 0x9970, 0xCACE, 0x9971, 0xB1A5, 0x9972, 0xCBC7, + 0x9973, 0xF099, 0x9974, 0xE2C2, 0x9975, 0xB6FC, 0x9976, 0xC8C4, 0x9977, 0xE2C3, 0x9978, 0xF09A, 0x9979, 0xF09B, 0x997A, 0xBDC8, + 0x997B, 0xF09C, 0x997C, 0xB1FD, 0x997D, 0xE2C4, 0x997E, 0xF09D, 0x997F, 0xB6F6, 0x9980, 0xE2C5, 0x9981, 0xC4D9, 0x9982, 0xF09E, + 0x9983, 0xF09F, 0x9984, 0xE2C6, 0x9985, 0xCFDA, 0x9986, 0xB9DD, 0x9987, 0xE2C7, 0x9988, 0xC0A1, 0x9989, 0xF0A0, 0x998A, 0xE2C8, + 0x998B, 0xB2F6, 0x998C, 0xF140, 0x998D, 0xE2C9, 0x998E, 0xF141, 0x998F, 0xC1F3, 0x9990, 0xE2CA, 0x9991, 0xE2CB, 0x9992, 0xC2F8, + 0x9993, 0xE2CC, 0x9994, 0xE2CD, 0x9995, 0xE2CE, 0x9996, 0xCAD7, 0x9997, 0xD8B8, 0x9998, 0xD9E5, 0x9999, 0xCFE3, 0x999A, 0xF142, + 0x999B, 0xF143, 0x999C, 0xF144, 0x999D, 0xF145, 0x999E, 0xF146, 0x999F, 0xF147, 0x99A0, 0xF148, 0x99A1, 0xF149, 0x99A2, 0xF14A, + 0x99A3, 0xF14B, 0x99A4, 0xF14C, 0x99A5, 0xF0A5, 0x99A6, 0xF14D, 0x99A7, 0xF14E, 0x99A8, 0xDCB0, 0x99A9, 0xF14F, 0x99AA, 0xF150, + 0x99AB, 0xF151, 0x99AC, 0xF152, 0x99AD, 0xF153, 0x99AE, 0xF154, 0x99AF, 0xF155, 0x99B0, 0xF156, 0x99B1, 0xF157, 0x99B2, 0xF158, + 0x99B3, 0xF159, 0x99B4, 0xF15A, 0x99B5, 0xF15B, 0x99B6, 0xF15C, 0x99B7, 0xF15D, 0x99B8, 0xF15E, 0x99B9, 0xF15F, 0x99BA, 0xF160, + 0x99BB, 0xF161, 0x99BC, 0xF162, 0x99BD, 0xF163, 0x99BE, 0xF164, 0x99BF, 0xF165, 0x99C0, 0xF166, 0x99C1, 0xF167, 0x99C2, 0xF168, + 0x99C3, 0xF169, 0x99C4, 0xF16A, 0x99C5, 0xF16B, 0x99C6, 0xF16C, 0x99C7, 0xF16D, 0x99C8, 0xF16E, 0x99C9, 0xF16F, 0x99CA, 0xF170, + 0x99CB, 0xF171, 0x99CC, 0xF172, 0x99CD, 0xF173, 0x99CE, 0xF174, 0x99CF, 0xF175, 0x99D0, 0xF176, 0x99D1, 0xF177, 0x99D2, 0xF178, + 0x99D3, 0xF179, 0x99D4, 0xF17A, 0x99D5, 0xF17B, 0x99D6, 0xF17C, 0x99D7, 0xF17D, 0x99D8, 0xF17E, 0x99D9, 0xF180, 0x99DA, 0xF181, + 0x99DB, 0xF182, 0x99DC, 0xF183, 0x99DD, 0xF184, 0x99DE, 0xF185, 0x99DF, 0xF186, 0x99E0, 0xF187, 0x99E1, 0xF188, 0x99E2, 0xF189, + 0x99E3, 0xF18A, 0x99E4, 0xF18B, 0x99E5, 0xF18C, 0x99E6, 0xF18D, 0x99E7, 0xF18E, 0x99E8, 0xF18F, 0x99E9, 0xF190, 0x99EA, 0xF191, + 0x99EB, 0xF192, 0x99EC, 0xF193, 0x99ED, 0xF194, 0x99EE, 0xF195, 0x99EF, 0xF196, 0x99F0, 0xF197, 0x99F1, 0xF198, 0x99F2, 0xF199, + 0x99F3, 0xF19A, 0x99F4, 0xF19B, 0x99F5, 0xF19C, 0x99F6, 0xF19D, 0x99F7, 0xF19E, 0x99F8, 0xF19F, 0x99F9, 0xF1A0, 0x99FA, 0xF240, + 0x99FB, 0xF241, 0x99FC, 0xF242, 0x99FD, 0xF243, 0x99FE, 0xF244, 0x99FF, 0xF245, 0x9A00, 0xF246, 0x9A01, 0xF247, 0x9A02, 0xF248, + 0x9A03, 0xF249, 0x9A04, 0xF24A, 0x9A05, 0xF24B, 0x9A06, 0xF24C, 0x9A07, 0xF24D, 0x9A08, 0xF24E, 0x9A09, 0xF24F, 0x9A0A, 0xF250, + 0x9A0B, 0xF251, 0x9A0C, 0xF252, 0x9A0D, 0xF253, 0x9A0E, 0xF254, 0x9A0F, 0xF255, 0x9A10, 0xF256, 0x9A11, 0xF257, 0x9A12, 0xF258, + 0x9A13, 0xF259, 0x9A14, 0xF25A, 0x9A15, 0xF25B, 0x9A16, 0xF25C, 0x9A17, 0xF25D, 0x9A18, 0xF25E, 0x9A19, 0xF25F, 0x9A1A, 0xF260, + 0x9A1B, 0xF261, 0x9A1C, 0xF262, 0x9A1D, 0xF263, 0x9A1E, 0xF264, 0x9A1F, 0xF265, 0x9A20, 0xF266, 0x9A21, 0xF267, 0x9A22, 0xF268, + 0x9A23, 0xF269, 0x9A24, 0xF26A, 0x9A25, 0xF26B, 0x9A26, 0xF26C, 0x9A27, 0xF26D, 0x9A28, 0xF26E, 0x9A29, 0xF26F, 0x9A2A, 0xF270, + 0x9A2B, 0xF271, 0x9A2C, 0xF272, 0x9A2D, 0xF273, 0x9A2E, 0xF274, 0x9A2F, 0xF275, 0x9A30, 0xF276, 0x9A31, 0xF277, 0x9A32, 0xF278, + 0x9A33, 0xF279, 0x9A34, 0xF27A, 0x9A35, 0xF27B, 0x9A36, 0xF27C, 0x9A37, 0xF27D, 0x9A38, 0xF27E, 0x9A39, 0xF280, 0x9A3A, 0xF281, + 0x9A3B, 0xF282, 0x9A3C, 0xF283, 0x9A3D, 0xF284, 0x9A3E, 0xF285, 0x9A3F, 0xF286, 0x9A40, 0xF287, 0x9A41, 0xF288, 0x9A42, 0xF289, + 0x9A43, 0xF28A, 0x9A44, 0xF28B, 0x9A45, 0xF28C, 0x9A46, 0xF28D, 0x9A47, 0xF28E, 0x9A48, 0xF28F, 0x9A49, 0xF290, 0x9A4A, 0xF291, + 0x9A4B, 0xF292, 0x9A4C, 0xF293, 0x9A4D, 0xF294, 0x9A4E, 0xF295, 0x9A4F, 0xF296, 0x9A50, 0xF297, 0x9A51, 0xF298, 0x9A52, 0xF299, + 0x9A53, 0xF29A, 0x9A54, 0xF29B, 0x9A55, 0xF29C, 0x9A56, 0xF29D, 0x9A57, 0xF29E, 0x9A58, 0xF29F, 0x9A59, 0xF2A0, 0x9A5A, 0xF340, + 0x9A5B, 0xF341, 0x9A5C, 0xF342, 0x9A5D, 0xF343, 0x9A5E, 0xF344, 0x9A5F, 0xF345, 0x9A60, 0xF346, 0x9A61, 0xF347, 0x9A62, 0xF348, + 0x9A63, 0xF349, 0x9A64, 0xF34A, 0x9A65, 0xF34B, 0x9A66, 0xF34C, 0x9A67, 0xF34D, 0x9A68, 0xF34E, 0x9A69, 0xF34F, 0x9A6A, 0xF350, + 0x9A6B, 0xF351, 0x9A6C, 0xC2ED, 0x9A6D, 0xD4A6, 0x9A6E, 0xCDD4, 0x9A6F, 0xD1B1, 0x9A70, 0xB3DB, 0x9A71, 0xC7FD, 0x9A72, 0xF352, + 0x9A73, 0xB2B5, 0x9A74, 0xC2BF, 0x9A75, 0xE6E0, 0x9A76, 0xCABB, 0x9A77, 0xE6E1, 0x9A78, 0xE6E2, 0x9A79, 0xBED4, 0x9A7A, 0xE6E3, + 0x9A7B, 0xD7A4, 0x9A7C, 0xCDD5, 0x9A7D, 0xE6E5, 0x9A7E, 0xBCDD, 0x9A7F, 0xE6E4, 0x9A80, 0xE6E6, 0x9A81, 0xE6E7, 0x9A82, 0xC2EE, + 0x9A83, 0xF353, 0x9A84, 0xBDBE, 0x9A85, 0xE6E8, 0x9A86, 0xC2E6, 0x9A87, 0xBAA7, 0x9A88, 0xE6E9, 0x9A89, 0xF354, 0x9A8A, 0xE6EA, + 0x9A8B, 0xB3D2, 0x9A8C, 0xD1E9, 0x9A8D, 0xF355, 0x9A8E, 0xF356, 0x9A8F, 0xBFA5, 0x9A90, 0xE6EB, 0x9A91, 0xC6EF, 0x9A92, 0xE6EC, + 0x9A93, 0xE6ED, 0x9A94, 0xF357, 0x9A95, 0xF358, 0x9A96, 0xE6EE, 0x9A97, 0xC6AD, 0x9A98, 0xE6EF, 0x9A99, 0xF359, 0x9A9A, 0xC9A7, + 0x9A9B, 0xE6F0, 0x9A9C, 0xE6F1, 0x9A9D, 0xE6F2, 0x9A9E, 0xE5B9, 0x9A9F, 0xE6F3, 0x9AA0, 0xE6F4, 0x9AA1, 0xC2E2, 0x9AA2, 0xE6F5, + 0x9AA3, 0xE6F6, 0x9AA4, 0xD6E8, 0x9AA5, 0xE6F7, 0x9AA6, 0xF35A, 0x9AA7, 0xE6F8, 0x9AA8, 0xB9C7, 0x9AA9, 0xF35B, 0x9AAA, 0xF35C, + 0x9AAB, 0xF35D, 0x9AAC, 0xF35E, 0x9AAD, 0xF35F, 0x9AAE, 0xF360, 0x9AAF, 0xF361, 0x9AB0, 0xF7BB, 0x9AB1, 0xF7BA, 0x9AB2, 0xF362, + 0x9AB3, 0xF363, 0x9AB4, 0xF364, 0x9AB5, 0xF365, 0x9AB6, 0xF7BE, 0x9AB7, 0xF7BC, 0x9AB8, 0xBAA1, 0x9AB9, 0xF366, 0x9ABA, 0xF7BF, + 0x9ABB, 0xF367, 0x9ABC, 0xF7C0, 0x9ABD, 0xF368, 0x9ABE, 0xF369, 0x9ABF, 0xF36A, 0x9AC0, 0xF7C2, 0x9AC1, 0xF7C1, 0x9AC2, 0xF7C4, + 0x9AC3, 0xF36B, 0x9AC4, 0xF36C, 0x9AC5, 0xF7C3, 0x9AC6, 0xF36D, 0x9AC7, 0xF36E, 0x9AC8, 0xF36F, 0x9AC9, 0xF370, 0x9ACA, 0xF371, + 0x9ACB, 0xF7C5, 0x9ACC, 0xF7C6, 0x9ACD, 0xF372, 0x9ACE, 0xF373, 0x9ACF, 0xF374, 0x9AD0, 0xF375, 0x9AD1, 0xF7C7, 0x9AD2, 0xF376, + 0x9AD3, 0xCBE8, 0x9AD4, 0xF377, 0x9AD5, 0xF378, 0x9AD6, 0xF379, 0x9AD7, 0xF37A, 0x9AD8, 0xB8DF, 0x9AD9, 0xF37B, 0x9ADA, 0xF37C, + 0x9ADB, 0xF37D, 0x9ADC, 0xF37E, 0x9ADD, 0xF380, 0x9ADE, 0xF381, 0x9ADF, 0xF7D4, 0x9AE0, 0xF382, 0x9AE1, 0xF7D5, 0x9AE2, 0xF383, + 0x9AE3, 0xF384, 0x9AE4, 0xF385, 0x9AE5, 0xF386, 0x9AE6, 0xF7D6, 0x9AE7, 0xF387, 0x9AE8, 0xF388, 0x9AE9, 0xF389, 0x9AEA, 0xF38A, + 0x9AEB, 0xF7D8, 0x9AEC, 0xF38B, 0x9AED, 0xF7DA, 0x9AEE, 0xF38C, 0x9AEF, 0xF7D7, 0x9AF0, 0xF38D, 0x9AF1, 0xF38E, 0x9AF2, 0xF38F, + 0x9AF3, 0xF390, 0x9AF4, 0xF391, 0x9AF5, 0xF392, 0x9AF6, 0xF393, 0x9AF7, 0xF394, 0x9AF8, 0xF395, 0x9AF9, 0xF7DB, 0x9AFA, 0xF396, + 0x9AFB, 0xF7D9, 0x9AFC, 0xF397, 0x9AFD, 0xF398, 0x9AFE, 0xF399, 0x9AFF, 0xF39A, 0x9B00, 0xF39B, 0x9B01, 0xF39C, 0x9B02, 0xF39D, + 0x9B03, 0xD7D7, 0x9B04, 0xF39E, 0x9B05, 0xF39F, 0x9B06, 0xF3A0, 0x9B07, 0xF440, 0x9B08, 0xF7DC, 0x9B09, 0xF441, 0x9B0A, 0xF442, + 0x9B0B, 0xF443, 0x9B0C, 0xF444, 0x9B0D, 0xF445, 0x9B0E, 0xF446, 0x9B0F, 0xF7DD, 0x9B10, 0xF447, 0x9B11, 0xF448, 0x9B12, 0xF449, + 0x9B13, 0xF7DE, 0x9B14, 0xF44A, 0x9B15, 0xF44B, 0x9B16, 0xF44C, 0x9B17, 0xF44D, 0x9B18, 0xF44E, 0x9B19, 0xF44F, 0x9B1A, 0xF450, + 0x9B1B, 0xF451, 0x9B1C, 0xF452, 0x9B1D, 0xF453, 0x9B1E, 0xF454, 0x9B1F, 0xF7DF, 0x9B20, 0xF455, 0x9B21, 0xF456, 0x9B22, 0xF457, + 0x9B23, 0xF7E0, 0x9B24, 0xF458, 0x9B25, 0xF459, 0x9B26, 0xF45A, 0x9B27, 0xF45B, 0x9B28, 0xF45C, 0x9B29, 0xF45D, 0x9B2A, 0xF45E, + 0x9B2B, 0xF45F, 0x9B2C, 0xF460, 0x9B2D, 0xF461, 0x9B2E, 0xF462, 0x9B2F, 0xDBCB, 0x9B30, 0xF463, 0x9B31, 0xF464, 0x9B32, 0xD8AA, + 0x9B33, 0xF465, 0x9B34, 0xF466, 0x9B35, 0xF467, 0x9B36, 0xF468, 0x9B37, 0xF469, 0x9B38, 0xF46A, 0x9B39, 0xF46B, 0x9B3A, 0xF46C, + 0x9B3B, 0xE5F7, 0x9B3C, 0xB9ED, 0x9B3D, 0xF46D, 0x9B3E, 0xF46E, 0x9B3F, 0xF46F, 0x9B40, 0xF470, 0x9B41, 0xBFFD, 0x9B42, 0xBBEA, + 0x9B43, 0xF7C9, 0x9B44, 0xC6C7, 0x9B45, 0xF7C8, 0x9B46, 0xF471, 0x9B47, 0xF7CA, 0x9B48, 0xF7CC, 0x9B49, 0xF7CB, 0x9B4A, 0xF472, + 0x9B4B, 0xF473, 0x9B4C, 0xF474, 0x9B4D, 0xF7CD, 0x9B4E, 0xF475, 0x9B4F, 0xCEBA, 0x9B50, 0xF476, 0x9B51, 0xF7CE, 0x9B52, 0xF477, + 0x9B53, 0xF478, 0x9B54, 0xC4A7, 0x9B55, 0xF479, 0x9B56, 0xF47A, 0x9B57, 0xF47B, 0x9B58, 0xF47C, 0x9B59, 0xF47D, 0x9B5A, 0xF47E, + 0x9B5B, 0xF480, 0x9B5C, 0xF481, 0x9B5D, 0xF482, 0x9B5E, 0xF483, 0x9B5F, 0xF484, 0x9B60, 0xF485, 0x9B61, 0xF486, 0x9B62, 0xF487, + 0x9B63, 0xF488, 0x9B64, 0xF489, 0x9B65, 0xF48A, 0x9B66, 0xF48B, 0x9B67, 0xF48C, 0x9B68, 0xF48D, 0x9B69, 0xF48E, 0x9B6A, 0xF48F, + 0x9B6B, 0xF490, 0x9B6C, 0xF491, 0x9B6D, 0xF492, 0x9B6E, 0xF493, 0x9B6F, 0xF494, 0x9B70, 0xF495, 0x9B71, 0xF496, 0x9B72, 0xF497, + 0x9B73, 0xF498, 0x9B74, 0xF499, 0x9B75, 0xF49A, 0x9B76, 0xF49B, 0x9B77, 0xF49C, 0x9B78, 0xF49D, 0x9B79, 0xF49E, 0x9B7A, 0xF49F, + 0x9B7B, 0xF4A0, 0x9B7C, 0xF540, 0x9B7D, 0xF541, 0x9B7E, 0xF542, 0x9B7F, 0xF543, 0x9B80, 0xF544, 0x9B81, 0xF545, 0x9B82, 0xF546, + 0x9B83, 0xF547, 0x9B84, 0xF548, 0x9B85, 0xF549, 0x9B86, 0xF54A, 0x9B87, 0xF54B, 0x9B88, 0xF54C, 0x9B89, 0xF54D, 0x9B8A, 0xF54E, + 0x9B8B, 0xF54F, 0x9B8C, 0xF550, 0x9B8D, 0xF551, 0x9B8E, 0xF552, 0x9B8F, 0xF553, 0x9B90, 0xF554, 0x9B91, 0xF555, 0x9B92, 0xF556, + 0x9B93, 0xF557, 0x9B94, 0xF558, 0x9B95, 0xF559, 0x9B96, 0xF55A, 0x9B97, 0xF55B, 0x9B98, 0xF55C, 0x9B99, 0xF55D, 0x9B9A, 0xF55E, + 0x9B9B, 0xF55F, 0x9B9C, 0xF560, 0x9B9D, 0xF561, 0x9B9E, 0xF562, 0x9B9F, 0xF563, 0x9BA0, 0xF564, 0x9BA1, 0xF565, 0x9BA2, 0xF566, + 0x9BA3, 0xF567, 0x9BA4, 0xF568, 0x9BA5, 0xF569, 0x9BA6, 0xF56A, 0x9BA7, 0xF56B, 0x9BA8, 0xF56C, 0x9BA9, 0xF56D, 0x9BAA, 0xF56E, + 0x9BAB, 0xF56F, 0x9BAC, 0xF570, 0x9BAD, 0xF571, 0x9BAE, 0xF572, 0x9BAF, 0xF573, 0x9BB0, 0xF574, 0x9BB1, 0xF575, 0x9BB2, 0xF576, + 0x9BB3, 0xF577, 0x9BB4, 0xF578, 0x9BB5, 0xF579, 0x9BB6, 0xF57A, 0x9BB7, 0xF57B, 0x9BB8, 0xF57C, 0x9BB9, 0xF57D, 0x9BBA, 0xF57E, + 0x9BBB, 0xF580, 0x9BBC, 0xF581, 0x9BBD, 0xF582, 0x9BBE, 0xF583, 0x9BBF, 0xF584, 0x9BC0, 0xF585, 0x9BC1, 0xF586, 0x9BC2, 0xF587, + 0x9BC3, 0xF588, 0x9BC4, 0xF589, 0x9BC5, 0xF58A, 0x9BC6, 0xF58B, 0x9BC7, 0xF58C, 0x9BC8, 0xF58D, 0x9BC9, 0xF58E, 0x9BCA, 0xF58F, + 0x9BCB, 0xF590, 0x9BCC, 0xF591, 0x9BCD, 0xF592, 0x9BCE, 0xF593, 0x9BCF, 0xF594, 0x9BD0, 0xF595, 0x9BD1, 0xF596, 0x9BD2, 0xF597, + 0x9BD3, 0xF598, 0x9BD4, 0xF599, 0x9BD5, 0xF59A, 0x9BD6, 0xF59B, 0x9BD7, 0xF59C, 0x9BD8, 0xF59D, 0x9BD9, 0xF59E, 0x9BDA, 0xF59F, + 0x9BDB, 0xF5A0, 0x9BDC, 0xF640, 0x9BDD, 0xF641, 0x9BDE, 0xF642, 0x9BDF, 0xF643, 0x9BE0, 0xF644, 0x9BE1, 0xF645, 0x9BE2, 0xF646, + 0x9BE3, 0xF647, 0x9BE4, 0xF648, 0x9BE5, 0xF649, 0x9BE6, 0xF64A, 0x9BE7, 0xF64B, 0x9BE8, 0xF64C, 0x9BE9, 0xF64D, 0x9BEA, 0xF64E, + 0x9BEB, 0xF64F, 0x9BEC, 0xF650, 0x9BED, 0xF651, 0x9BEE, 0xF652, 0x9BEF, 0xF653, 0x9BF0, 0xF654, 0x9BF1, 0xF655, 0x9BF2, 0xF656, + 0x9BF3, 0xF657, 0x9BF4, 0xF658, 0x9BF5, 0xF659, 0x9BF6, 0xF65A, 0x9BF7, 0xF65B, 0x9BF8, 0xF65C, 0x9BF9, 0xF65D, 0x9BFA, 0xF65E, + 0x9BFB, 0xF65F, 0x9BFC, 0xF660, 0x9BFD, 0xF661, 0x9BFE, 0xF662, 0x9BFF, 0xF663, 0x9C00, 0xF664, 0x9C01, 0xF665, 0x9C02, 0xF666, + 0x9C03, 0xF667, 0x9C04, 0xF668, 0x9C05, 0xF669, 0x9C06, 0xF66A, 0x9C07, 0xF66B, 0x9C08, 0xF66C, 0x9C09, 0xF66D, 0x9C0A, 0xF66E, + 0x9C0B, 0xF66F, 0x9C0C, 0xF670, 0x9C0D, 0xF671, 0x9C0E, 0xF672, 0x9C0F, 0xF673, 0x9C10, 0xF674, 0x9C11, 0xF675, 0x9C12, 0xF676, + 0x9C13, 0xF677, 0x9C14, 0xF678, 0x9C15, 0xF679, 0x9C16, 0xF67A, 0x9C17, 0xF67B, 0x9C18, 0xF67C, 0x9C19, 0xF67D, 0x9C1A, 0xF67E, + 0x9C1B, 0xF680, 0x9C1C, 0xF681, 0x9C1D, 0xF682, 0x9C1E, 0xF683, 0x9C1F, 0xF684, 0x9C20, 0xF685, 0x9C21, 0xF686, 0x9C22, 0xF687, + 0x9C23, 0xF688, 0x9C24, 0xF689, 0x9C25, 0xF68A, 0x9C26, 0xF68B, 0x9C27, 0xF68C, 0x9C28, 0xF68D, 0x9C29, 0xF68E, 0x9C2A, 0xF68F, + 0x9C2B, 0xF690, 0x9C2C, 0xF691, 0x9C2D, 0xF692, 0x9C2E, 0xF693, 0x9C2F, 0xF694, 0x9C30, 0xF695, 0x9C31, 0xF696, 0x9C32, 0xF697, + 0x9C33, 0xF698, 0x9C34, 0xF699, 0x9C35, 0xF69A, 0x9C36, 0xF69B, 0x9C37, 0xF69C, 0x9C38, 0xF69D, 0x9C39, 0xF69E, 0x9C3A, 0xF69F, + 0x9C3B, 0xF6A0, 0x9C3C, 0xF740, 0x9C3D, 0xF741, 0x9C3E, 0xF742, 0x9C3F, 0xF743, 0x9C40, 0xF744, 0x9C41, 0xF745, 0x9C42, 0xF746, + 0x9C43, 0xF747, 0x9C44, 0xF748, 0x9C45, 0xF749, 0x9C46, 0xF74A, 0x9C47, 0xF74B, 0x9C48, 0xF74C, 0x9C49, 0xF74D, 0x9C4A, 0xF74E, + 0x9C4B, 0xF74F, 0x9C4C, 0xF750, 0x9C4D, 0xF751, 0x9C4E, 0xF752, 0x9C4F, 0xF753, 0x9C50, 0xF754, 0x9C51, 0xF755, 0x9C52, 0xF756, + 0x9C53, 0xF757, 0x9C54, 0xF758, 0x9C55, 0xF759, 0x9C56, 0xF75A, 0x9C57, 0xF75B, 0x9C58, 0xF75C, 0x9C59, 0xF75D, 0x9C5A, 0xF75E, + 0x9C5B, 0xF75F, 0x9C5C, 0xF760, 0x9C5D, 0xF761, 0x9C5E, 0xF762, 0x9C5F, 0xF763, 0x9C60, 0xF764, 0x9C61, 0xF765, 0x9C62, 0xF766, + 0x9C63, 0xF767, 0x9C64, 0xF768, 0x9C65, 0xF769, 0x9C66, 0xF76A, 0x9C67, 0xF76B, 0x9C68, 0xF76C, 0x9C69, 0xF76D, 0x9C6A, 0xF76E, + 0x9C6B, 0xF76F, 0x9C6C, 0xF770, 0x9C6D, 0xF771, 0x9C6E, 0xF772, 0x9C6F, 0xF773, 0x9C70, 0xF774, 0x9C71, 0xF775, 0x9C72, 0xF776, + 0x9C73, 0xF777, 0x9C74, 0xF778, 0x9C75, 0xF779, 0x9C76, 0xF77A, 0x9C77, 0xF77B, 0x9C78, 0xF77C, 0x9C79, 0xF77D, 0x9C7A, 0xF77E, + 0x9C7B, 0xF780, 0x9C7C, 0xD3E3, 0x9C7D, 0xF781, 0x9C7E, 0xF782, 0x9C7F, 0xF6CF, 0x9C80, 0xF783, 0x9C81, 0xC2B3, 0x9C82, 0xF6D0, + 0x9C83, 0xF784, 0x9C84, 0xF785, 0x9C85, 0xF6D1, 0x9C86, 0xF6D2, 0x9C87, 0xF6D3, 0x9C88, 0xF6D4, 0x9C89, 0xF786, 0x9C8A, 0xF787, + 0x9C8B, 0xF6D6, 0x9C8C, 0xF788, 0x9C8D, 0xB1AB, 0x9C8E, 0xF6D7, 0x9C8F, 0xF789, 0x9C90, 0xF6D8, 0x9C91, 0xF6D9, 0x9C92, 0xF6DA, + 0x9C93, 0xF78A, 0x9C94, 0xF6DB, 0x9C95, 0xF6DC, 0x9C96, 0xF78B, 0x9C97, 0xF78C, 0x9C98, 0xF78D, 0x9C99, 0xF78E, 0x9C9A, 0xF6DD, + 0x9C9B, 0xF6DE, 0x9C9C, 0xCFCA, 0x9C9D, 0xF78F, 0x9C9E, 0xF6DF, 0x9C9F, 0xF6E0, 0x9CA0, 0xF6E1, 0x9CA1, 0xF6E2, 0x9CA2, 0xF6E3, + 0x9CA3, 0xF6E4, 0x9CA4, 0xC0F0, 0x9CA5, 0xF6E5, 0x9CA6, 0xF6E6, 0x9CA7, 0xF6E7, 0x9CA8, 0xF6E8, 0x9CA9, 0xF6E9, 0x9CAA, 0xF790, + 0x9CAB, 0xF6EA, 0x9CAC, 0xF791, 0x9CAD, 0xF6EB, 0x9CAE, 0xF6EC, 0x9CAF, 0xF792, 0x9CB0, 0xF6ED, 0x9CB1, 0xF6EE, 0x9CB2, 0xF6EF, + 0x9CB3, 0xF6F0, 0x9CB4, 0xF6F1, 0x9CB5, 0xF6F2, 0x9CB6, 0xF6F3, 0x9CB7, 0xF6F4, 0x9CB8, 0xBEA8, 0x9CB9, 0xF793, 0x9CBA, 0xF6F5, + 0x9CBB, 0xF6F6, 0x9CBC, 0xF6F7, 0x9CBD, 0xF6F8, 0x9CBE, 0xF794, 0x9CBF, 0xF795, 0x9CC0, 0xF796, 0x9CC1, 0xF797, 0x9CC2, 0xF798, + 0x9CC3, 0xC8FA, 0x9CC4, 0xF6F9, 0x9CC5, 0xF6FA, 0x9CC6, 0xF6FB, 0x9CC7, 0xF6FC, 0x9CC8, 0xF799, 0x9CC9, 0xF79A, 0x9CCA, 0xF6FD, + 0x9CCB, 0xF6FE, 0x9CCC, 0xF7A1, 0x9CCD, 0xF7A2, 0x9CCE, 0xF7A3, 0x9CCF, 0xF7A4, 0x9CD0, 0xF7A5, 0x9CD1, 0xF79B, 0x9CD2, 0xF79C, + 0x9CD3, 0xF7A6, 0x9CD4, 0xF7A7, 0x9CD5, 0xF7A8, 0x9CD6, 0xB1EE, 0x9CD7, 0xF7A9, 0x9CD8, 0xF7AA, 0x9CD9, 0xF7AB, 0x9CDA, 0xF79D, + 0x9CDB, 0xF79E, 0x9CDC, 0xF7AC, 0x9CDD, 0xF7AD, 0x9CDE, 0xC1DB, 0x9CDF, 0xF7AE, 0x9CE0, 0xF79F, 0x9CE1, 0xF7A0, 0x9CE2, 0xF7AF, + 0x9CE3, 0xF840, 0x9CE4, 0xF841, 0x9CE5, 0xF842, 0x9CE6, 0xF843, 0x9CE7, 0xF844, 0x9CE8, 0xF845, 0x9CE9, 0xF846, 0x9CEA, 0xF847, + 0x9CEB, 0xF848, 0x9CEC, 0xF849, 0x9CED, 0xF84A, 0x9CEE, 0xF84B, 0x9CEF, 0xF84C, 0x9CF0, 0xF84D, 0x9CF1, 0xF84E, 0x9CF2, 0xF84F, + 0x9CF3, 0xF850, 0x9CF4, 0xF851, 0x9CF5, 0xF852, 0x9CF6, 0xF853, 0x9CF7, 0xF854, 0x9CF8, 0xF855, 0x9CF9, 0xF856, 0x9CFA, 0xF857, + 0x9CFB, 0xF858, 0x9CFC, 0xF859, 0x9CFD, 0xF85A, 0x9CFE, 0xF85B, 0x9CFF, 0xF85C, 0x9D00, 0xF85D, 0x9D01, 0xF85E, 0x9D02, 0xF85F, + 0x9D03, 0xF860, 0x9D04, 0xF861, 0x9D05, 0xF862, 0x9D06, 0xF863, 0x9D07, 0xF864, 0x9D08, 0xF865, 0x9D09, 0xF866, 0x9D0A, 0xF867, + 0x9D0B, 0xF868, 0x9D0C, 0xF869, 0x9D0D, 0xF86A, 0x9D0E, 0xF86B, 0x9D0F, 0xF86C, 0x9D10, 0xF86D, 0x9D11, 0xF86E, 0x9D12, 0xF86F, + 0x9D13, 0xF870, 0x9D14, 0xF871, 0x9D15, 0xF872, 0x9D16, 0xF873, 0x9D17, 0xF874, 0x9D18, 0xF875, 0x9D19, 0xF876, 0x9D1A, 0xF877, + 0x9D1B, 0xF878, 0x9D1C, 0xF879, 0x9D1D, 0xF87A, 0x9D1E, 0xF87B, 0x9D1F, 0xF87C, 0x9D20, 0xF87D, 0x9D21, 0xF87E, 0x9D22, 0xF880, + 0x9D23, 0xF881, 0x9D24, 0xF882, 0x9D25, 0xF883, 0x9D26, 0xF884, 0x9D27, 0xF885, 0x9D28, 0xF886, 0x9D29, 0xF887, 0x9D2A, 0xF888, + 0x9D2B, 0xF889, 0x9D2C, 0xF88A, 0x9D2D, 0xF88B, 0x9D2E, 0xF88C, 0x9D2F, 0xF88D, 0x9D30, 0xF88E, 0x9D31, 0xF88F, 0x9D32, 0xF890, + 0x9D33, 0xF891, 0x9D34, 0xF892, 0x9D35, 0xF893, 0x9D36, 0xF894, 0x9D37, 0xF895, 0x9D38, 0xF896, 0x9D39, 0xF897, 0x9D3A, 0xF898, + 0x9D3B, 0xF899, 0x9D3C, 0xF89A, 0x9D3D, 0xF89B, 0x9D3E, 0xF89C, 0x9D3F, 0xF89D, 0x9D40, 0xF89E, 0x9D41, 0xF89F, 0x9D42, 0xF8A0, + 0x9D43, 0xF940, 0x9D44, 0xF941, 0x9D45, 0xF942, 0x9D46, 0xF943, 0x9D47, 0xF944, 0x9D48, 0xF945, 0x9D49, 0xF946, 0x9D4A, 0xF947, + 0x9D4B, 0xF948, 0x9D4C, 0xF949, 0x9D4D, 0xF94A, 0x9D4E, 0xF94B, 0x9D4F, 0xF94C, 0x9D50, 0xF94D, 0x9D51, 0xF94E, 0x9D52, 0xF94F, + 0x9D53, 0xF950, 0x9D54, 0xF951, 0x9D55, 0xF952, 0x9D56, 0xF953, 0x9D57, 0xF954, 0x9D58, 0xF955, 0x9D59, 0xF956, 0x9D5A, 0xF957, + 0x9D5B, 0xF958, 0x9D5C, 0xF959, 0x9D5D, 0xF95A, 0x9D5E, 0xF95B, 0x9D5F, 0xF95C, 0x9D60, 0xF95D, 0x9D61, 0xF95E, 0x9D62, 0xF95F, + 0x9D63, 0xF960, 0x9D64, 0xF961, 0x9D65, 0xF962, 0x9D66, 0xF963, 0x9D67, 0xF964, 0x9D68, 0xF965, 0x9D69, 0xF966, 0x9D6A, 0xF967, + 0x9D6B, 0xF968, 0x9D6C, 0xF969, 0x9D6D, 0xF96A, 0x9D6E, 0xF96B, 0x9D6F, 0xF96C, 0x9D70, 0xF96D, 0x9D71, 0xF96E, 0x9D72, 0xF96F, + 0x9D73, 0xF970, 0x9D74, 0xF971, 0x9D75, 0xF972, 0x9D76, 0xF973, 0x9D77, 0xF974, 0x9D78, 0xF975, 0x9D79, 0xF976, 0x9D7A, 0xF977, + 0x9D7B, 0xF978, 0x9D7C, 0xF979, 0x9D7D, 0xF97A, 0x9D7E, 0xF97B, 0x9D7F, 0xF97C, 0x9D80, 0xF97D, 0x9D81, 0xF97E, 0x9D82, 0xF980, + 0x9D83, 0xF981, 0x9D84, 0xF982, 0x9D85, 0xF983, 0x9D86, 0xF984, 0x9D87, 0xF985, 0x9D88, 0xF986, 0x9D89, 0xF987, 0x9D8A, 0xF988, + 0x9D8B, 0xF989, 0x9D8C, 0xF98A, 0x9D8D, 0xF98B, 0x9D8E, 0xF98C, 0x9D8F, 0xF98D, 0x9D90, 0xF98E, 0x9D91, 0xF98F, 0x9D92, 0xF990, + 0x9D93, 0xF991, 0x9D94, 0xF992, 0x9D95, 0xF993, 0x9D96, 0xF994, 0x9D97, 0xF995, 0x9D98, 0xF996, 0x9D99, 0xF997, 0x9D9A, 0xF998, + 0x9D9B, 0xF999, 0x9D9C, 0xF99A, 0x9D9D, 0xF99B, 0x9D9E, 0xF99C, 0x9D9F, 0xF99D, 0x9DA0, 0xF99E, 0x9DA1, 0xF99F, 0x9DA2, 0xF9A0, + 0x9DA3, 0xFA40, 0x9DA4, 0xFA41, 0x9DA5, 0xFA42, 0x9DA6, 0xFA43, 0x9DA7, 0xFA44, 0x9DA8, 0xFA45, 0x9DA9, 0xFA46, 0x9DAA, 0xFA47, + 0x9DAB, 0xFA48, 0x9DAC, 0xFA49, 0x9DAD, 0xFA4A, 0x9DAE, 0xFA4B, 0x9DAF, 0xFA4C, 0x9DB0, 0xFA4D, 0x9DB1, 0xFA4E, 0x9DB2, 0xFA4F, + 0x9DB3, 0xFA50, 0x9DB4, 0xFA51, 0x9DB5, 0xFA52, 0x9DB6, 0xFA53, 0x9DB7, 0xFA54, 0x9DB8, 0xFA55, 0x9DB9, 0xFA56, 0x9DBA, 0xFA57, + 0x9DBB, 0xFA58, 0x9DBC, 0xFA59, 0x9DBD, 0xFA5A, 0x9DBE, 0xFA5B, 0x9DBF, 0xFA5C, 0x9DC0, 0xFA5D, 0x9DC1, 0xFA5E, 0x9DC2, 0xFA5F, + 0x9DC3, 0xFA60, 0x9DC4, 0xFA61, 0x9DC5, 0xFA62, 0x9DC6, 0xFA63, 0x9DC7, 0xFA64, 0x9DC8, 0xFA65, 0x9DC9, 0xFA66, 0x9DCA, 0xFA67, + 0x9DCB, 0xFA68, 0x9DCC, 0xFA69, 0x9DCD, 0xFA6A, 0x9DCE, 0xFA6B, 0x9DCF, 0xFA6C, 0x9DD0, 0xFA6D, 0x9DD1, 0xFA6E, 0x9DD2, 0xFA6F, + 0x9DD3, 0xFA70, 0x9DD4, 0xFA71, 0x9DD5, 0xFA72, 0x9DD6, 0xFA73, 0x9DD7, 0xFA74, 0x9DD8, 0xFA75, 0x9DD9, 0xFA76, 0x9DDA, 0xFA77, + 0x9DDB, 0xFA78, 0x9DDC, 0xFA79, 0x9DDD, 0xFA7A, 0x9DDE, 0xFA7B, 0x9DDF, 0xFA7C, 0x9DE0, 0xFA7D, 0x9DE1, 0xFA7E, 0x9DE2, 0xFA80, + 0x9DE3, 0xFA81, 0x9DE4, 0xFA82, 0x9DE5, 0xFA83, 0x9DE6, 0xFA84, 0x9DE7, 0xFA85, 0x9DE8, 0xFA86, 0x9DE9, 0xFA87, 0x9DEA, 0xFA88, + 0x9DEB, 0xFA89, 0x9DEC, 0xFA8A, 0x9DED, 0xFA8B, 0x9DEE, 0xFA8C, 0x9DEF, 0xFA8D, 0x9DF0, 0xFA8E, 0x9DF1, 0xFA8F, 0x9DF2, 0xFA90, + 0x9DF3, 0xFA91, 0x9DF4, 0xFA92, 0x9DF5, 0xFA93, 0x9DF6, 0xFA94, 0x9DF7, 0xFA95, 0x9DF8, 0xFA96, 0x9DF9, 0xFA97, 0x9DFA, 0xFA98, + 0x9DFB, 0xFA99, 0x9DFC, 0xFA9A, 0x9DFD, 0xFA9B, 0x9DFE, 0xFA9C, 0x9DFF, 0xFA9D, 0x9E00, 0xFA9E, 0x9E01, 0xFA9F, 0x9E02, 0xFAA0, + 0x9E03, 0xFB40, 0x9E04, 0xFB41, 0x9E05, 0xFB42, 0x9E06, 0xFB43, 0x9E07, 0xFB44, 0x9E08, 0xFB45, 0x9E09, 0xFB46, 0x9E0A, 0xFB47, + 0x9E0B, 0xFB48, 0x9E0C, 0xFB49, 0x9E0D, 0xFB4A, 0x9E0E, 0xFB4B, 0x9E0F, 0xFB4C, 0x9E10, 0xFB4D, 0x9E11, 0xFB4E, 0x9E12, 0xFB4F, + 0x9E13, 0xFB50, 0x9E14, 0xFB51, 0x9E15, 0xFB52, 0x9E16, 0xFB53, 0x9E17, 0xFB54, 0x9E18, 0xFB55, 0x9E19, 0xFB56, 0x9E1A, 0xFB57, + 0x9E1B, 0xFB58, 0x9E1C, 0xFB59, 0x9E1D, 0xFB5A, 0x9E1E, 0xFB5B, 0x9E1F, 0xC4F1, 0x9E20, 0xF0AF, 0x9E21, 0xBCA6, 0x9E22, 0xF0B0, + 0x9E23, 0xC3F9, 0x9E24, 0xFB5C, 0x9E25, 0xC5B8, 0x9E26, 0xD1BB, 0x9E27, 0xFB5D, 0x9E28, 0xF0B1, 0x9E29, 0xF0B2, 0x9E2A, 0xF0B3, + 0x9E2B, 0xF0B4, 0x9E2C, 0xF0B5, 0x9E2D, 0xD1BC, 0x9E2E, 0xFB5E, 0x9E2F, 0xD1EC, 0x9E30, 0xFB5F, 0x9E31, 0xF0B7, 0x9E32, 0xF0B6, + 0x9E33, 0xD4A7, 0x9E34, 0xFB60, 0x9E35, 0xCDD2, 0x9E36, 0xF0B8, 0x9E37, 0xF0BA, 0x9E38, 0xF0B9, 0x9E39, 0xF0BB, 0x9E3A, 0xF0BC, + 0x9E3B, 0xFB61, 0x9E3C, 0xFB62, 0x9E3D, 0xB8EB, 0x9E3E, 0xF0BD, 0x9E3F, 0xBAE8, 0x9E40, 0xFB63, 0x9E41, 0xF0BE, 0x9E42, 0xF0BF, + 0x9E43, 0xBEE9, 0x9E44, 0xF0C0, 0x9E45, 0xB6EC, 0x9E46, 0xF0C1, 0x9E47, 0xF0C2, 0x9E48, 0xF0C3, 0x9E49, 0xF0C4, 0x9E4A, 0xC8B5, + 0x9E4B, 0xF0C5, 0x9E4C, 0xF0C6, 0x9E4D, 0xFB64, 0x9E4E, 0xF0C7, 0x9E4F, 0xC5F4, 0x9E50, 0xFB65, 0x9E51, 0xF0C8, 0x9E52, 0xFB66, + 0x9E53, 0xFB67, 0x9E54, 0xFB68, 0x9E55, 0xF0C9, 0x9E56, 0xFB69, 0x9E57, 0xF0CA, 0x9E58, 0xF7BD, 0x9E59, 0xFB6A, 0x9E5A, 0xF0CB, + 0x9E5B, 0xF0CC, 0x9E5C, 0xF0CD, 0x9E5D, 0xFB6B, 0x9E5E, 0xF0CE, 0x9E5F, 0xFB6C, 0x9E60, 0xFB6D, 0x9E61, 0xFB6E, 0x9E62, 0xFB6F, + 0x9E63, 0xF0CF, 0x9E64, 0xBAD7, 0x9E65, 0xFB70, 0x9E66, 0xF0D0, 0x9E67, 0xF0D1, 0x9E68, 0xF0D2, 0x9E69, 0xF0D3, 0x9E6A, 0xF0D4, + 0x9E6B, 0xF0D5, 0x9E6C, 0xF0D6, 0x9E6D, 0xF0D8, 0x9E6E, 0xFB71, 0x9E6F, 0xFB72, 0x9E70, 0xD3A5, 0x9E71, 0xF0D7, 0x9E72, 0xFB73, + 0x9E73, 0xF0D9, 0x9E74, 0xFB74, 0x9E75, 0xFB75, 0x9E76, 0xFB76, 0x9E77, 0xFB77, 0x9E78, 0xFB78, 0x9E79, 0xFB79, 0x9E7A, 0xFB7A, + 0x9E7B, 0xFB7B, 0x9E7C, 0xFB7C, 0x9E7D, 0xFB7D, 0x9E7E, 0xF5BA, 0x9E7F, 0xC2B9, 0x9E80, 0xFB7E, 0x9E81, 0xFB80, 0x9E82, 0xF7E4, + 0x9E83, 0xFB81, 0x9E84, 0xFB82, 0x9E85, 0xFB83, 0x9E86, 0xFB84, 0x9E87, 0xF7E5, 0x9E88, 0xF7E6, 0x9E89, 0xFB85, 0x9E8A, 0xFB86, + 0x9E8B, 0xF7E7, 0x9E8C, 0xFB87, 0x9E8D, 0xFB88, 0x9E8E, 0xFB89, 0x9E8F, 0xFB8A, 0x9E90, 0xFB8B, 0x9E91, 0xFB8C, 0x9E92, 0xF7E8, + 0x9E93, 0xC2B4, 0x9E94, 0xFB8D, 0x9E95, 0xFB8E, 0x9E96, 0xFB8F, 0x9E97, 0xFB90, 0x9E98, 0xFB91, 0x9E99, 0xFB92, 0x9E9A, 0xFB93, + 0x9E9B, 0xFB94, 0x9E9C, 0xFB95, 0x9E9D, 0xF7EA, 0x9E9E, 0xFB96, 0x9E9F, 0xF7EB, 0x9EA0, 0xFB97, 0x9EA1, 0xFB98, 0x9EA2, 0xFB99, + 0x9EA3, 0xFB9A, 0x9EA4, 0xFB9B, 0x9EA5, 0xFB9C, 0x9EA6, 0xC2F3, 0x9EA7, 0xFB9D, 0x9EA8, 0xFB9E, 0x9EA9, 0xFB9F, 0x9EAA, 0xFBA0, + 0x9EAB, 0xFC40, 0x9EAC, 0xFC41, 0x9EAD, 0xFC42, 0x9EAE, 0xFC43, 0x9EAF, 0xFC44, 0x9EB0, 0xFC45, 0x9EB1, 0xFC46, 0x9EB2, 0xFC47, + 0x9EB3, 0xFC48, 0x9EB4, 0xF4F0, 0x9EB5, 0xFC49, 0x9EB6, 0xFC4A, 0x9EB7, 0xFC4B, 0x9EB8, 0xF4EF, 0x9EB9, 0xFC4C, 0x9EBA, 0xFC4D, + 0x9EBB, 0xC2E9, 0x9EBC, 0xFC4E, 0x9EBD, 0xF7E1, 0x9EBE, 0xF7E2, 0x9EBF, 0xFC4F, 0x9EC0, 0xFC50, 0x9EC1, 0xFC51, 0x9EC2, 0xFC52, + 0x9EC3, 0xFC53, 0x9EC4, 0xBBC6, 0x9EC5, 0xFC54, 0x9EC6, 0xFC55, 0x9EC7, 0xFC56, 0x9EC8, 0xFC57, 0x9EC9, 0xD9E4, 0x9ECA, 0xFC58, + 0x9ECB, 0xFC59, 0x9ECC, 0xFC5A, 0x9ECD, 0xCAF2, 0x9ECE, 0xC0E8, 0x9ECF, 0xF0A4, 0x9ED0, 0xFC5B, 0x9ED1, 0xBADA, 0x9ED2, 0xFC5C, + 0x9ED3, 0xFC5D, 0x9ED4, 0xC7AD, 0x9ED5, 0xFC5E, 0x9ED6, 0xFC5F, 0x9ED7, 0xFC60, 0x9ED8, 0xC4AC, 0x9ED9, 0xFC61, 0x9EDA, 0xFC62, + 0x9EDB, 0xF7EC, 0x9EDC, 0xF7ED, 0x9EDD, 0xF7EE, 0x9EDE, 0xFC63, 0x9EDF, 0xF7F0, 0x9EE0, 0xF7EF, 0x9EE1, 0xFC64, 0x9EE2, 0xF7F1, + 0x9EE3, 0xFC65, 0x9EE4, 0xFC66, 0x9EE5, 0xF7F4, 0x9EE6, 0xFC67, 0x9EE7, 0xF7F3, 0x9EE8, 0xFC68, 0x9EE9, 0xF7F2, 0x9EEA, 0xF7F5, + 0x9EEB, 0xFC69, 0x9EEC, 0xFC6A, 0x9EED, 0xFC6B, 0x9EEE, 0xFC6C, 0x9EEF, 0xF7F6, 0x9EF0, 0xFC6D, 0x9EF1, 0xFC6E, 0x9EF2, 0xFC6F, + 0x9EF3, 0xFC70, 0x9EF4, 0xFC71, 0x9EF5, 0xFC72, 0x9EF6, 0xFC73, 0x9EF7, 0xFC74, 0x9EF8, 0xFC75, 0x9EF9, 0xEDE9, 0x9EFA, 0xFC76, + 0x9EFB, 0xEDEA, 0x9EFC, 0xEDEB, 0x9EFD, 0xFC77, 0x9EFE, 0xF6BC, 0x9EFF, 0xFC78, 0x9F00, 0xFC79, 0x9F01, 0xFC7A, 0x9F02, 0xFC7B, + 0x9F03, 0xFC7C, 0x9F04, 0xFC7D, 0x9F05, 0xFC7E, 0x9F06, 0xFC80, 0x9F07, 0xFC81, 0x9F08, 0xFC82, 0x9F09, 0xFC83, 0x9F0A, 0xFC84, + 0x9F0B, 0xF6BD, 0x9F0C, 0xFC85, 0x9F0D, 0xF6BE, 0x9F0E, 0xB6A6, 0x9F0F, 0xFC86, 0x9F10, 0xD8BE, 0x9F11, 0xFC87, 0x9F12, 0xFC88, + 0x9F13, 0xB9C4, 0x9F14, 0xFC89, 0x9F15, 0xFC8A, 0x9F16, 0xFC8B, 0x9F17, 0xD8BB, 0x9F18, 0xFC8C, 0x9F19, 0xDCB1, 0x9F1A, 0xFC8D, + 0x9F1B, 0xFC8E, 0x9F1C, 0xFC8F, 0x9F1D, 0xFC90, 0x9F1E, 0xFC91, 0x9F1F, 0xFC92, 0x9F20, 0xCAF3, 0x9F21, 0xFC93, 0x9F22, 0xF7F7, + 0x9F23, 0xFC94, 0x9F24, 0xFC95, 0x9F25, 0xFC96, 0x9F26, 0xFC97, 0x9F27, 0xFC98, 0x9F28, 0xFC99, 0x9F29, 0xFC9A, 0x9F2A, 0xFC9B, + 0x9F2B, 0xFC9C, 0x9F2C, 0xF7F8, 0x9F2D, 0xFC9D, 0x9F2E, 0xFC9E, 0x9F2F, 0xF7F9, 0x9F30, 0xFC9F, 0x9F31, 0xFCA0, 0x9F32, 0xFD40, + 0x9F33, 0xFD41, 0x9F34, 0xFD42, 0x9F35, 0xFD43, 0x9F36, 0xFD44, 0x9F37, 0xF7FB, 0x9F38, 0xFD45, 0x9F39, 0xF7FA, 0x9F3A, 0xFD46, + 0x9F3B, 0xB1C7, 0x9F3C, 0xFD47, 0x9F3D, 0xF7FC, 0x9F3E, 0xF7FD, 0x9F3F, 0xFD48, 0x9F40, 0xFD49, 0x9F41, 0xFD4A, 0x9F42, 0xFD4B, + 0x9F43, 0xFD4C, 0x9F44, 0xF7FE, 0x9F45, 0xFD4D, 0x9F46, 0xFD4E, 0x9F47, 0xFD4F, 0x9F48, 0xFD50, 0x9F49, 0xFD51, 0x9F4A, 0xFD52, + 0x9F4B, 0xFD53, 0x9F4C, 0xFD54, 0x9F4D, 0xFD55, 0x9F4E, 0xFD56, 0x9F4F, 0xFD57, 0x9F50, 0xC6EB, 0x9F51, 0xECB4, 0x9F52, 0xFD58, + 0x9F53, 0xFD59, 0x9F54, 0xFD5A, 0x9F55, 0xFD5B, 0x9F56, 0xFD5C, 0x9F57, 0xFD5D, 0x9F58, 0xFD5E, 0x9F59, 0xFD5F, 0x9F5A, 0xFD60, + 0x9F5B, 0xFD61, 0x9F5C, 0xFD62, 0x9F5D, 0xFD63, 0x9F5E, 0xFD64, 0x9F5F, 0xFD65, 0x9F60, 0xFD66, 0x9F61, 0xFD67, 0x9F62, 0xFD68, + 0x9F63, 0xFD69, 0x9F64, 0xFD6A, 0x9F65, 0xFD6B, 0x9F66, 0xFD6C, 0x9F67, 0xFD6D, 0x9F68, 0xFD6E, 0x9F69, 0xFD6F, 0x9F6A, 0xFD70, + 0x9F6B, 0xFD71, 0x9F6C, 0xFD72, 0x9F6D, 0xFD73, 0x9F6E, 0xFD74, 0x9F6F, 0xFD75, 0x9F70, 0xFD76, 0x9F71, 0xFD77, 0x9F72, 0xFD78, + 0x9F73, 0xFD79, 0x9F74, 0xFD7A, 0x9F75, 0xFD7B, 0x9F76, 0xFD7C, 0x9F77, 0xFD7D, 0x9F78, 0xFD7E, 0x9F79, 0xFD80, 0x9F7A, 0xFD81, + 0x9F7B, 0xFD82, 0x9F7C, 0xFD83, 0x9F7D, 0xFD84, 0x9F7E, 0xFD85, 0x9F7F, 0xB3DD, 0x9F80, 0xF6B3, 0x9F81, 0xFD86, 0x9F82, 0xFD87, + 0x9F83, 0xF6B4, 0x9F84, 0xC1E4, 0x9F85, 0xF6B5, 0x9F86, 0xF6B6, 0x9F87, 0xF6B7, 0x9F88, 0xF6B8, 0x9F89, 0xF6B9, 0x9F8A, 0xF6BA, + 0x9F8B, 0xC8A3, 0x9F8C, 0xF6BB, 0x9F8D, 0xFD88, 0x9F8E, 0xFD89, 0x9F8F, 0xFD8A, 0x9F90, 0xFD8B, 0x9F91, 0xFD8C, 0x9F92, 0xFD8D, + 0x9F93, 0xFD8E, 0x9F94, 0xFD8F, 0x9F95, 0xFD90, 0x9F96, 0xFD91, 0x9F97, 0xFD92, 0x9F98, 0xFD93, 0x9F99, 0xC1FA, 0x9F9A, 0xB9A8, + 0x9F9B, 0xEDE8, 0x9F9C, 0xFD94, 0x9F9D, 0xFD95, 0x9F9E, 0xFD96, 0x9F9F, 0xB9EA, 0x9FA0, 0xD9DF, 0x9FA1, 0xFD97, 0x9FA2, 0xFD98, + 0x9FA3, 0xFD99, 0x9FA4, 0xFD9A, 0x9FA5, 0xFD9B, 0xF92C, 0xFD9C, 0xF979, 0xFD9D, 0xF995, 0xFD9E, 0xF9E7, 0xFD9F, 0xF9F1, 0xFDA0, + 0xFA0C, 0xFE40, 0xFA0D, 0xFE41, 0xFA0E, 0xFE42, 0xFA0F, 0xFE43, 0xFA11, 0xFE44, 0xFA13, 0xFE45, 0xFA14, 0xFE46, 0xFA18, 0xFE47, + 0xFA1F, 0xFE48, 0xFA20, 0xFE49, 0xFA21, 0xFE4A, 0xFA23, 0xFE4B, 0xFA24, 0xFE4C, 0xFA27, 0xFE4D, 0xFA28, 0xFE4E, 0xFA29, 0xFE4F, + 0xFE30, 0xA955, 0xFE31, 0xA6F2, 0xFE33, 0xA6F4, 0xFE34, 0xA6F5, 0xFE35, 0xA6E0, 0xFE36, 0xA6E1, 0xFE37, 0xA6F0, 0xFE38, 0xA6F1, + 0xFE39, 0xA6E2, 0xFE3A, 0xA6E3, 0xFE3B, 0xA6EE, 0xFE3C, 0xA6EF, 0xFE3D, 0xA6E6, 0xFE3E, 0xA6E7, 0xFE3F, 0xA6E4, 0xFE40, 0xA6E5, + 0xFE41, 0xA6E8, 0xFE42, 0xA6E9, 0xFE43, 0xA6EA, 0xFE44, 0xA6EB, 0xFE49, 0xA968, 0xFE4A, 0xA969, 0xFE4B, 0xA96A, 0xFE4C, 0xA96B, + 0xFE4D, 0xA96C, 0xFE4E, 0xA96D, 0xFE4F, 0xA96E, 0xFE50, 0xA96F, 0xFE51, 0xA970, 0xFE52, 0xA971, 0xFE54, 0xA972, 0xFE55, 0xA973, + 0xFE56, 0xA974, 0xFE57, 0xA975, 0xFE59, 0xA976, 0xFE5A, 0xA977, 0xFE5B, 0xA978, 0xFE5C, 0xA979, 0xFE5D, 0xA97A, 0xFE5E, 0xA97B, + 0xFE5F, 0xA97C, 0xFE60, 0xA97D, 0xFE61, 0xA97E, 0xFE62, 0xA980, 0xFE63, 0xA981, 0xFE64, 0xA982, 0xFE65, 0xA983, 0xFE66, 0xA984, + 0xFE68, 0xA985, 0xFE69, 0xA986, 0xFE6A, 0xA987, 0xFE6B, 0xA988, 0xFF01, 0xA3A1, 0xFF02, 0xA3A2, 0xFF03, 0xA3A3, 0xFF04, 0xA1E7, + 0xFF05, 0xA3A5, 0xFF06, 0xA3A6, 0xFF07, 0xA3A7, 0xFF08, 0xA3A8, 0xFF09, 0xA3A9, 0xFF0A, 0xA3AA, 0xFF0B, 0xA3AB, 0xFF0C, 0xA3AC, + 0xFF0D, 0xA3AD, 0xFF0E, 0xA3AE, 0xFF0F, 0xA3AF, 0xFF10, 0xA3B0, 0xFF11, 0xA3B1, 0xFF12, 0xA3B2, 0xFF13, 0xA3B3, 0xFF14, 0xA3B4, + 0xFF15, 0xA3B5, 0xFF16, 0xA3B6, 0xFF17, 0xA3B7, 0xFF18, 0xA3B8, 0xFF19, 0xA3B9, 0xFF1A, 0xA3BA, 0xFF1B, 0xA3BB, 0xFF1C, 0xA3BC, + 0xFF1D, 0xA3BD, 0xFF1E, 0xA3BE, 0xFF1F, 0xA3BF, 0xFF20, 0xA3C0, 0xFF21, 0xA3C1, 0xFF22, 0xA3C2, 0xFF23, 0xA3C3, 0xFF24, 0xA3C4, + 0xFF25, 0xA3C5, 0xFF26, 0xA3C6, 0xFF27, 0xA3C7, 0xFF28, 0xA3C8, 0xFF29, 0xA3C9, 0xFF2A, 0xA3CA, 0xFF2B, 0xA3CB, 0xFF2C, 0xA3CC, + 0xFF2D, 0xA3CD, 0xFF2E, 0xA3CE, 0xFF2F, 0xA3CF, 0xFF30, 0xA3D0, 0xFF31, 0xA3D1, 0xFF32, 0xA3D2, 0xFF33, 0xA3D3, 0xFF34, 0xA3D4, + 0xFF35, 0xA3D5, 0xFF36, 0xA3D6, 0xFF37, 0xA3D7, 0xFF38, 0xA3D8, 0xFF39, 0xA3D9, 0xFF3A, 0xA3DA, 0xFF3B, 0xA3DB, 0xFF3C, 0xA3DC, + 0xFF3D, 0xA3DD, 0xFF3E, 0xA3DE, 0xFF3F, 0xA3DF, 0xFF40, 0xA3E0, 0xFF41, 0xA3E1, 0xFF42, 0xA3E2, 0xFF43, 0xA3E3, 0xFF44, 0xA3E4, + 0xFF45, 0xA3E5, 0xFF46, 0xA3E6, 0xFF47, 0xA3E7, 0xFF48, 0xA3E8, 0xFF49, 0xA3E9, 0xFF4A, 0xA3EA, 0xFF4B, 0xA3EB, 0xFF4C, 0xA3EC, + 0xFF4D, 0xA3ED, 0xFF4E, 0xA3EE, 0xFF4F, 0xA3EF, 0xFF50, 0xA3F0, 0xFF51, 0xA3F1, 0xFF52, 0xA3F2, 0xFF53, 0xA3F3, 0xFF54, 0xA3F4, + 0xFF55, 0xA3F5, 0xFF56, 0xA3F6, 0xFF57, 0xA3F7, 0xFF58, 0xA3F8, 0xFF59, 0xA3F9, 0xFF5A, 0xA3FA, 0xFF5B, 0xA3FB, 0xFF5C, 0xA3FC, + 0xFF5D, 0xA3FD, 0xFF5E, 0xA1AB, 0xFFE0, 0xA1E9, 0xFFE1, 0xA1EA, 0xFFE2, 0xA956, 0xFFE3, 0xA3FE, 0xFFE4, 0xA957, 0xFFE5, 0xA3A4, + 0, 0 +}; + +static const WCHAR oem2uni936[] = { /* GBK --> Unicode pairs */ + 0x0080, 0x20AC, 0x8140, 0x4E02, 0x8141, 0x4E04, 0x8142, 0x4E05, 0x8143, 0x4E06, 0x8144, 0x4E0F, 0x8145, 0x4E12, 0x8146, 0x4E17, + 0x8147, 0x4E1F, 0x8148, 0x4E20, 0x8149, 0x4E21, 0x814A, 0x4E23, 0x814B, 0x4E26, 0x814C, 0x4E29, 0x814D, 0x4E2E, 0x814E, 0x4E2F, + 0x814F, 0x4E31, 0x8150, 0x4E33, 0x8151, 0x4E35, 0x8152, 0x4E37, 0x8153, 0x4E3C, 0x8154, 0x4E40, 0x8155, 0x4E41, 0x8156, 0x4E42, + 0x8157, 0x4E44, 0x8158, 0x4E46, 0x8159, 0x4E4A, 0x815A, 0x4E51, 0x815B, 0x4E55, 0x815C, 0x4E57, 0x815D, 0x4E5A, 0x815E, 0x4E5B, + 0x815F, 0x4E62, 0x8160, 0x4E63, 0x8161, 0x4E64, 0x8162, 0x4E65, 0x8163, 0x4E67, 0x8164, 0x4E68, 0x8165, 0x4E6A, 0x8166, 0x4E6B, + 0x8167, 0x4E6C, 0x8168, 0x4E6D, 0x8169, 0x4E6E, 0x816A, 0x4E6F, 0x816B, 0x4E72, 0x816C, 0x4E74, 0x816D, 0x4E75, 0x816E, 0x4E76, + 0x816F, 0x4E77, 0x8170, 0x4E78, 0x8171, 0x4E79, 0x8172, 0x4E7A, 0x8173, 0x4E7B, 0x8174, 0x4E7C, 0x8175, 0x4E7D, 0x8176, 0x4E7F, + 0x8177, 0x4E80, 0x8178, 0x4E81, 0x8179, 0x4E82, 0x817A, 0x4E83, 0x817B, 0x4E84, 0x817C, 0x4E85, 0x817D, 0x4E87, 0x817E, 0x4E8A, + 0x8180, 0x4E90, 0x8181, 0x4E96, 0x8182, 0x4E97, 0x8183, 0x4E99, 0x8184, 0x4E9C, 0x8185, 0x4E9D, 0x8186, 0x4E9E, 0x8187, 0x4EA3, + 0x8188, 0x4EAA, 0x8189, 0x4EAF, 0x818A, 0x4EB0, 0x818B, 0x4EB1, 0x818C, 0x4EB4, 0x818D, 0x4EB6, 0x818E, 0x4EB7, 0x818F, 0x4EB8, + 0x8190, 0x4EB9, 0x8191, 0x4EBC, 0x8192, 0x4EBD, 0x8193, 0x4EBE, 0x8194, 0x4EC8, 0x8195, 0x4ECC, 0x8196, 0x4ECF, 0x8197, 0x4ED0, + 0x8198, 0x4ED2, 0x8199, 0x4EDA, 0x819A, 0x4EDB, 0x819B, 0x4EDC, 0x819C, 0x4EE0, 0x819D, 0x4EE2, 0x819E, 0x4EE6, 0x819F, 0x4EE7, + 0x81A0, 0x4EE9, 0x81A1, 0x4EED, 0x81A2, 0x4EEE, 0x81A3, 0x4EEF, 0x81A4, 0x4EF1, 0x81A5, 0x4EF4, 0x81A6, 0x4EF8, 0x81A7, 0x4EF9, + 0x81A8, 0x4EFA, 0x81A9, 0x4EFC, 0x81AA, 0x4EFE, 0x81AB, 0x4F00, 0x81AC, 0x4F02, 0x81AD, 0x4F03, 0x81AE, 0x4F04, 0x81AF, 0x4F05, + 0x81B0, 0x4F06, 0x81B1, 0x4F07, 0x81B2, 0x4F08, 0x81B3, 0x4F0B, 0x81B4, 0x4F0C, 0x81B5, 0x4F12, 0x81B6, 0x4F13, 0x81B7, 0x4F14, + 0x81B8, 0x4F15, 0x81B9, 0x4F16, 0x81BA, 0x4F1C, 0x81BB, 0x4F1D, 0x81BC, 0x4F21, 0x81BD, 0x4F23, 0x81BE, 0x4F28, 0x81BF, 0x4F29, + 0x81C0, 0x4F2C, 0x81C1, 0x4F2D, 0x81C2, 0x4F2E, 0x81C3, 0x4F31, 0x81C4, 0x4F33, 0x81C5, 0x4F35, 0x81C6, 0x4F37, 0x81C7, 0x4F39, + 0x81C8, 0x4F3B, 0x81C9, 0x4F3E, 0x81CA, 0x4F3F, 0x81CB, 0x4F40, 0x81CC, 0x4F41, 0x81CD, 0x4F42, 0x81CE, 0x4F44, 0x81CF, 0x4F45, + 0x81D0, 0x4F47, 0x81D1, 0x4F48, 0x81D2, 0x4F49, 0x81D3, 0x4F4A, 0x81D4, 0x4F4B, 0x81D5, 0x4F4C, 0x81D6, 0x4F52, 0x81D7, 0x4F54, + 0x81D8, 0x4F56, 0x81D9, 0x4F61, 0x81DA, 0x4F62, 0x81DB, 0x4F66, 0x81DC, 0x4F68, 0x81DD, 0x4F6A, 0x81DE, 0x4F6B, 0x81DF, 0x4F6D, + 0x81E0, 0x4F6E, 0x81E1, 0x4F71, 0x81E2, 0x4F72, 0x81E3, 0x4F75, 0x81E4, 0x4F77, 0x81E5, 0x4F78, 0x81E6, 0x4F79, 0x81E7, 0x4F7A, + 0x81E8, 0x4F7D, 0x81E9, 0x4F80, 0x81EA, 0x4F81, 0x81EB, 0x4F82, 0x81EC, 0x4F85, 0x81ED, 0x4F86, 0x81EE, 0x4F87, 0x81EF, 0x4F8A, + 0x81F0, 0x4F8C, 0x81F1, 0x4F8E, 0x81F2, 0x4F90, 0x81F3, 0x4F92, 0x81F4, 0x4F93, 0x81F5, 0x4F95, 0x81F6, 0x4F96, 0x81F7, 0x4F98, + 0x81F8, 0x4F99, 0x81F9, 0x4F9A, 0x81FA, 0x4F9C, 0x81FB, 0x4F9E, 0x81FC, 0x4F9F, 0x81FD, 0x4FA1, 0x81FE, 0x4FA2, 0x8240, 0x4FA4, + 0x8241, 0x4FAB, 0x8242, 0x4FAD, 0x8243, 0x4FB0, 0x8244, 0x4FB1, 0x8245, 0x4FB2, 0x8246, 0x4FB3, 0x8247, 0x4FB4, 0x8248, 0x4FB6, + 0x8249, 0x4FB7, 0x824A, 0x4FB8, 0x824B, 0x4FB9, 0x824C, 0x4FBA, 0x824D, 0x4FBB, 0x824E, 0x4FBC, 0x824F, 0x4FBD, 0x8250, 0x4FBE, + 0x8251, 0x4FC0, 0x8252, 0x4FC1, 0x8253, 0x4FC2, 0x8254, 0x4FC6, 0x8255, 0x4FC7, 0x8256, 0x4FC8, 0x8257, 0x4FC9, 0x8258, 0x4FCB, + 0x8259, 0x4FCC, 0x825A, 0x4FCD, 0x825B, 0x4FD2, 0x825C, 0x4FD3, 0x825D, 0x4FD4, 0x825E, 0x4FD5, 0x825F, 0x4FD6, 0x8260, 0x4FD9, + 0x8261, 0x4FDB, 0x8262, 0x4FE0, 0x8263, 0x4FE2, 0x8264, 0x4FE4, 0x8265, 0x4FE5, 0x8266, 0x4FE7, 0x8267, 0x4FEB, 0x8268, 0x4FEC, + 0x8269, 0x4FF0, 0x826A, 0x4FF2, 0x826B, 0x4FF4, 0x826C, 0x4FF5, 0x826D, 0x4FF6, 0x826E, 0x4FF7, 0x826F, 0x4FF9, 0x8270, 0x4FFB, + 0x8271, 0x4FFC, 0x8272, 0x4FFD, 0x8273, 0x4FFF, 0x8274, 0x5000, 0x8275, 0x5001, 0x8276, 0x5002, 0x8277, 0x5003, 0x8278, 0x5004, + 0x8279, 0x5005, 0x827A, 0x5006, 0x827B, 0x5007, 0x827C, 0x5008, 0x827D, 0x5009, 0x827E, 0x500A, 0x8280, 0x500B, 0x8281, 0x500E, + 0x8282, 0x5010, 0x8283, 0x5011, 0x8284, 0x5013, 0x8285, 0x5015, 0x8286, 0x5016, 0x8287, 0x5017, 0x8288, 0x501B, 0x8289, 0x501D, + 0x828A, 0x501E, 0x828B, 0x5020, 0x828C, 0x5022, 0x828D, 0x5023, 0x828E, 0x5024, 0x828F, 0x5027, 0x8290, 0x502B, 0x8291, 0x502F, + 0x8292, 0x5030, 0x8293, 0x5031, 0x8294, 0x5032, 0x8295, 0x5033, 0x8296, 0x5034, 0x8297, 0x5035, 0x8298, 0x5036, 0x8299, 0x5037, + 0x829A, 0x5038, 0x829B, 0x5039, 0x829C, 0x503B, 0x829D, 0x503D, 0x829E, 0x503F, 0x829F, 0x5040, 0x82A0, 0x5041, 0x82A1, 0x5042, + 0x82A2, 0x5044, 0x82A3, 0x5045, 0x82A4, 0x5046, 0x82A5, 0x5049, 0x82A6, 0x504A, 0x82A7, 0x504B, 0x82A8, 0x504D, 0x82A9, 0x5050, + 0x82AA, 0x5051, 0x82AB, 0x5052, 0x82AC, 0x5053, 0x82AD, 0x5054, 0x82AE, 0x5056, 0x82AF, 0x5057, 0x82B0, 0x5058, 0x82B1, 0x5059, + 0x82B2, 0x505B, 0x82B3, 0x505D, 0x82B4, 0x505E, 0x82B5, 0x505F, 0x82B6, 0x5060, 0x82B7, 0x5061, 0x82B8, 0x5062, 0x82B9, 0x5063, + 0x82BA, 0x5064, 0x82BB, 0x5066, 0x82BC, 0x5067, 0x82BD, 0x5068, 0x82BE, 0x5069, 0x82BF, 0x506A, 0x82C0, 0x506B, 0x82C1, 0x506D, + 0x82C2, 0x506E, 0x82C3, 0x506F, 0x82C4, 0x5070, 0x82C5, 0x5071, 0x82C6, 0x5072, 0x82C7, 0x5073, 0x82C8, 0x5074, 0x82C9, 0x5075, + 0x82CA, 0x5078, 0x82CB, 0x5079, 0x82CC, 0x507A, 0x82CD, 0x507C, 0x82CE, 0x507D, 0x82CF, 0x5081, 0x82D0, 0x5082, 0x82D1, 0x5083, + 0x82D2, 0x5084, 0x82D3, 0x5086, 0x82D4, 0x5087, 0x82D5, 0x5089, 0x82D6, 0x508A, 0x82D7, 0x508B, 0x82D8, 0x508C, 0x82D9, 0x508E, + 0x82DA, 0x508F, 0x82DB, 0x5090, 0x82DC, 0x5091, 0x82DD, 0x5092, 0x82DE, 0x5093, 0x82DF, 0x5094, 0x82E0, 0x5095, 0x82E1, 0x5096, + 0x82E2, 0x5097, 0x82E3, 0x5098, 0x82E4, 0x5099, 0x82E5, 0x509A, 0x82E6, 0x509B, 0x82E7, 0x509C, 0x82E8, 0x509D, 0x82E9, 0x509E, + 0x82EA, 0x509F, 0x82EB, 0x50A0, 0x82EC, 0x50A1, 0x82ED, 0x50A2, 0x82EE, 0x50A4, 0x82EF, 0x50A6, 0x82F0, 0x50AA, 0x82F1, 0x50AB, + 0x82F2, 0x50AD, 0x82F3, 0x50AE, 0x82F4, 0x50AF, 0x82F5, 0x50B0, 0x82F6, 0x50B1, 0x82F7, 0x50B3, 0x82F8, 0x50B4, 0x82F9, 0x50B5, + 0x82FA, 0x50B6, 0x82FB, 0x50B7, 0x82FC, 0x50B8, 0x82FD, 0x50B9, 0x82FE, 0x50BC, 0x8340, 0x50BD, 0x8341, 0x50BE, 0x8342, 0x50BF, + 0x8343, 0x50C0, 0x8344, 0x50C1, 0x8345, 0x50C2, 0x8346, 0x50C3, 0x8347, 0x50C4, 0x8348, 0x50C5, 0x8349, 0x50C6, 0x834A, 0x50C7, + 0x834B, 0x50C8, 0x834C, 0x50C9, 0x834D, 0x50CA, 0x834E, 0x50CB, 0x834F, 0x50CC, 0x8350, 0x50CD, 0x8351, 0x50CE, 0x8352, 0x50D0, + 0x8353, 0x50D1, 0x8354, 0x50D2, 0x8355, 0x50D3, 0x8356, 0x50D4, 0x8357, 0x50D5, 0x8358, 0x50D7, 0x8359, 0x50D8, 0x835A, 0x50D9, + 0x835B, 0x50DB, 0x835C, 0x50DC, 0x835D, 0x50DD, 0x835E, 0x50DE, 0x835F, 0x50DF, 0x8360, 0x50E0, 0x8361, 0x50E1, 0x8362, 0x50E2, + 0x8363, 0x50E3, 0x8364, 0x50E4, 0x8365, 0x50E5, 0x8366, 0x50E8, 0x8367, 0x50E9, 0x8368, 0x50EA, 0x8369, 0x50EB, 0x836A, 0x50EF, + 0x836B, 0x50F0, 0x836C, 0x50F1, 0x836D, 0x50F2, 0x836E, 0x50F4, 0x836F, 0x50F6, 0x8370, 0x50F7, 0x8371, 0x50F8, 0x8372, 0x50F9, + 0x8373, 0x50FA, 0x8374, 0x50FC, 0x8375, 0x50FD, 0x8376, 0x50FE, 0x8377, 0x50FF, 0x8378, 0x5100, 0x8379, 0x5101, 0x837A, 0x5102, + 0x837B, 0x5103, 0x837C, 0x5104, 0x837D, 0x5105, 0x837E, 0x5108, 0x8380, 0x5109, 0x8381, 0x510A, 0x8382, 0x510C, 0x8383, 0x510D, + 0x8384, 0x510E, 0x8385, 0x510F, 0x8386, 0x5110, 0x8387, 0x5111, 0x8388, 0x5113, 0x8389, 0x5114, 0x838A, 0x5115, 0x838B, 0x5116, + 0x838C, 0x5117, 0x838D, 0x5118, 0x838E, 0x5119, 0x838F, 0x511A, 0x8390, 0x511B, 0x8391, 0x511C, 0x8392, 0x511D, 0x8393, 0x511E, + 0x8394, 0x511F, 0x8395, 0x5120, 0x8396, 0x5122, 0x8397, 0x5123, 0x8398, 0x5124, 0x8399, 0x5125, 0x839A, 0x5126, 0x839B, 0x5127, + 0x839C, 0x5128, 0x839D, 0x5129, 0x839E, 0x512A, 0x839F, 0x512B, 0x83A0, 0x512C, 0x83A1, 0x512D, 0x83A2, 0x512E, 0x83A3, 0x512F, + 0x83A4, 0x5130, 0x83A5, 0x5131, 0x83A6, 0x5132, 0x83A7, 0x5133, 0x83A8, 0x5134, 0x83A9, 0x5135, 0x83AA, 0x5136, 0x83AB, 0x5137, + 0x83AC, 0x5138, 0x83AD, 0x5139, 0x83AE, 0x513A, 0x83AF, 0x513B, 0x83B0, 0x513C, 0x83B1, 0x513D, 0x83B2, 0x513E, 0x83B3, 0x5142, + 0x83B4, 0x5147, 0x83B5, 0x514A, 0x83B6, 0x514C, 0x83B7, 0x514E, 0x83B8, 0x514F, 0x83B9, 0x5150, 0x83BA, 0x5152, 0x83BB, 0x5153, + 0x83BC, 0x5157, 0x83BD, 0x5158, 0x83BE, 0x5159, 0x83BF, 0x515B, 0x83C0, 0x515D, 0x83C1, 0x515E, 0x83C2, 0x515F, 0x83C3, 0x5160, + 0x83C4, 0x5161, 0x83C5, 0x5163, 0x83C6, 0x5164, 0x83C7, 0x5166, 0x83C8, 0x5167, 0x83C9, 0x5169, 0x83CA, 0x516A, 0x83CB, 0x516F, + 0x83CC, 0x5172, 0x83CD, 0x517A, 0x83CE, 0x517E, 0x83CF, 0x517F, 0x83D0, 0x5183, 0x83D1, 0x5184, 0x83D2, 0x5186, 0x83D3, 0x5187, + 0x83D4, 0x518A, 0x83D5, 0x518B, 0x83D6, 0x518E, 0x83D7, 0x518F, 0x83D8, 0x5190, 0x83D9, 0x5191, 0x83DA, 0x5193, 0x83DB, 0x5194, + 0x83DC, 0x5198, 0x83DD, 0x519A, 0x83DE, 0x519D, 0x83DF, 0x519E, 0x83E0, 0x519F, 0x83E1, 0x51A1, 0x83E2, 0x51A3, 0x83E3, 0x51A6, + 0x83E4, 0x51A7, 0x83E5, 0x51A8, 0x83E6, 0x51A9, 0x83E7, 0x51AA, 0x83E8, 0x51AD, 0x83E9, 0x51AE, 0x83EA, 0x51B4, 0x83EB, 0x51B8, + 0x83EC, 0x51B9, 0x83ED, 0x51BA, 0x83EE, 0x51BE, 0x83EF, 0x51BF, 0x83F0, 0x51C1, 0x83F1, 0x51C2, 0x83F2, 0x51C3, 0x83F3, 0x51C5, + 0x83F4, 0x51C8, 0x83F5, 0x51CA, 0x83F6, 0x51CD, 0x83F7, 0x51CE, 0x83F8, 0x51D0, 0x83F9, 0x51D2, 0x83FA, 0x51D3, 0x83FB, 0x51D4, + 0x83FC, 0x51D5, 0x83FD, 0x51D6, 0x83FE, 0x51D7, 0x8440, 0x51D8, 0x8441, 0x51D9, 0x8442, 0x51DA, 0x8443, 0x51DC, 0x8444, 0x51DE, + 0x8445, 0x51DF, 0x8446, 0x51E2, 0x8447, 0x51E3, 0x8448, 0x51E5, 0x8449, 0x51E6, 0x844A, 0x51E7, 0x844B, 0x51E8, 0x844C, 0x51E9, + 0x844D, 0x51EA, 0x844E, 0x51EC, 0x844F, 0x51EE, 0x8450, 0x51F1, 0x8451, 0x51F2, 0x8452, 0x51F4, 0x8453, 0x51F7, 0x8454, 0x51FE, + 0x8455, 0x5204, 0x8456, 0x5205, 0x8457, 0x5209, 0x8458, 0x520B, 0x8459, 0x520C, 0x845A, 0x520F, 0x845B, 0x5210, 0x845C, 0x5213, + 0x845D, 0x5214, 0x845E, 0x5215, 0x845F, 0x521C, 0x8460, 0x521E, 0x8461, 0x521F, 0x8462, 0x5221, 0x8463, 0x5222, 0x8464, 0x5223, + 0x8465, 0x5225, 0x8466, 0x5226, 0x8467, 0x5227, 0x8468, 0x522A, 0x8469, 0x522C, 0x846A, 0x522F, 0x846B, 0x5231, 0x846C, 0x5232, + 0x846D, 0x5234, 0x846E, 0x5235, 0x846F, 0x523C, 0x8470, 0x523E, 0x8471, 0x5244, 0x8472, 0x5245, 0x8473, 0x5246, 0x8474, 0x5247, + 0x8475, 0x5248, 0x8476, 0x5249, 0x8477, 0x524B, 0x8478, 0x524E, 0x8479, 0x524F, 0x847A, 0x5252, 0x847B, 0x5253, 0x847C, 0x5255, + 0x847D, 0x5257, 0x847E, 0x5258, 0x8480, 0x5259, 0x8481, 0x525A, 0x8482, 0x525B, 0x8483, 0x525D, 0x8484, 0x525F, 0x8485, 0x5260, + 0x8486, 0x5262, 0x8487, 0x5263, 0x8488, 0x5264, 0x8489, 0x5266, 0x848A, 0x5268, 0x848B, 0x526B, 0x848C, 0x526C, 0x848D, 0x526D, + 0x848E, 0x526E, 0x848F, 0x5270, 0x8490, 0x5271, 0x8491, 0x5273, 0x8492, 0x5274, 0x8493, 0x5275, 0x8494, 0x5276, 0x8495, 0x5277, + 0x8496, 0x5278, 0x8497, 0x5279, 0x8498, 0x527A, 0x8499, 0x527B, 0x849A, 0x527C, 0x849B, 0x527E, 0x849C, 0x5280, 0x849D, 0x5283, + 0x849E, 0x5284, 0x849F, 0x5285, 0x84A0, 0x5286, 0x84A1, 0x5287, 0x84A2, 0x5289, 0x84A3, 0x528A, 0x84A4, 0x528B, 0x84A5, 0x528C, + 0x84A6, 0x528D, 0x84A7, 0x528E, 0x84A8, 0x528F, 0x84A9, 0x5291, 0x84AA, 0x5292, 0x84AB, 0x5294, 0x84AC, 0x5295, 0x84AD, 0x5296, + 0x84AE, 0x5297, 0x84AF, 0x5298, 0x84B0, 0x5299, 0x84B1, 0x529A, 0x84B2, 0x529C, 0x84B3, 0x52A4, 0x84B4, 0x52A5, 0x84B5, 0x52A6, + 0x84B6, 0x52A7, 0x84B7, 0x52AE, 0x84B8, 0x52AF, 0x84B9, 0x52B0, 0x84BA, 0x52B4, 0x84BB, 0x52B5, 0x84BC, 0x52B6, 0x84BD, 0x52B7, + 0x84BE, 0x52B8, 0x84BF, 0x52B9, 0x84C0, 0x52BA, 0x84C1, 0x52BB, 0x84C2, 0x52BC, 0x84C3, 0x52BD, 0x84C4, 0x52C0, 0x84C5, 0x52C1, + 0x84C6, 0x52C2, 0x84C7, 0x52C4, 0x84C8, 0x52C5, 0x84C9, 0x52C6, 0x84CA, 0x52C8, 0x84CB, 0x52CA, 0x84CC, 0x52CC, 0x84CD, 0x52CD, + 0x84CE, 0x52CE, 0x84CF, 0x52CF, 0x84D0, 0x52D1, 0x84D1, 0x52D3, 0x84D2, 0x52D4, 0x84D3, 0x52D5, 0x84D4, 0x52D7, 0x84D5, 0x52D9, + 0x84D6, 0x52DA, 0x84D7, 0x52DB, 0x84D8, 0x52DC, 0x84D9, 0x52DD, 0x84DA, 0x52DE, 0x84DB, 0x52E0, 0x84DC, 0x52E1, 0x84DD, 0x52E2, + 0x84DE, 0x52E3, 0x84DF, 0x52E5, 0x84E0, 0x52E6, 0x84E1, 0x52E7, 0x84E2, 0x52E8, 0x84E3, 0x52E9, 0x84E4, 0x52EA, 0x84E5, 0x52EB, + 0x84E6, 0x52EC, 0x84E7, 0x52ED, 0x84E8, 0x52EE, 0x84E9, 0x52EF, 0x84EA, 0x52F1, 0x84EB, 0x52F2, 0x84EC, 0x52F3, 0x84ED, 0x52F4, + 0x84EE, 0x52F5, 0x84EF, 0x52F6, 0x84F0, 0x52F7, 0x84F1, 0x52F8, 0x84F2, 0x52FB, 0x84F3, 0x52FC, 0x84F4, 0x52FD, 0x84F5, 0x5301, + 0x84F6, 0x5302, 0x84F7, 0x5303, 0x84F8, 0x5304, 0x84F9, 0x5307, 0x84FA, 0x5309, 0x84FB, 0x530A, 0x84FC, 0x530B, 0x84FD, 0x530C, + 0x84FE, 0x530E, 0x8540, 0x5311, 0x8541, 0x5312, 0x8542, 0x5313, 0x8543, 0x5314, 0x8544, 0x5318, 0x8545, 0x531B, 0x8546, 0x531C, + 0x8547, 0x531E, 0x8548, 0x531F, 0x8549, 0x5322, 0x854A, 0x5324, 0x854B, 0x5325, 0x854C, 0x5327, 0x854D, 0x5328, 0x854E, 0x5329, + 0x854F, 0x532B, 0x8550, 0x532C, 0x8551, 0x532D, 0x8552, 0x532F, 0x8553, 0x5330, 0x8554, 0x5331, 0x8555, 0x5332, 0x8556, 0x5333, + 0x8557, 0x5334, 0x8558, 0x5335, 0x8559, 0x5336, 0x855A, 0x5337, 0x855B, 0x5338, 0x855C, 0x533C, 0x855D, 0x533D, 0x855E, 0x5340, + 0x855F, 0x5342, 0x8560, 0x5344, 0x8561, 0x5346, 0x8562, 0x534B, 0x8563, 0x534C, 0x8564, 0x534D, 0x8565, 0x5350, 0x8566, 0x5354, + 0x8567, 0x5358, 0x8568, 0x5359, 0x8569, 0x535B, 0x856A, 0x535D, 0x856B, 0x5365, 0x856C, 0x5368, 0x856D, 0x536A, 0x856E, 0x536C, + 0x856F, 0x536D, 0x8570, 0x5372, 0x8571, 0x5376, 0x8572, 0x5379, 0x8573, 0x537B, 0x8574, 0x537C, 0x8575, 0x537D, 0x8576, 0x537E, + 0x8577, 0x5380, 0x8578, 0x5381, 0x8579, 0x5383, 0x857A, 0x5387, 0x857B, 0x5388, 0x857C, 0x538A, 0x857D, 0x538E, 0x857E, 0x538F, + 0x8580, 0x5390, 0x8581, 0x5391, 0x8582, 0x5392, 0x8583, 0x5393, 0x8584, 0x5394, 0x8585, 0x5396, 0x8586, 0x5397, 0x8587, 0x5399, + 0x8588, 0x539B, 0x8589, 0x539C, 0x858A, 0x539E, 0x858B, 0x53A0, 0x858C, 0x53A1, 0x858D, 0x53A4, 0x858E, 0x53A7, 0x858F, 0x53AA, + 0x8590, 0x53AB, 0x8591, 0x53AC, 0x8592, 0x53AD, 0x8593, 0x53AF, 0x8594, 0x53B0, 0x8595, 0x53B1, 0x8596, 0x53B2, 0x8597, 0x53B3, + 0x8598, 0x53B4, 0x8599, 0x53B5, 0x859A, 0x53B7, 0x859B, 0x53B8, 0x859C, 0x53B9, 0x859D, 0x53BA, 0x859E, 0x53BC, 0x859F, 0x53BD, + 0x85A0, 0x53BE, 0x85A1, 0x53C0, 0x85A2, 0x53C3, 0x85A3, 0x53C4, 0x85A4, 0x53C5, 0x85A5, 0x53C6, 0x85A6, 0x53C7, 0x85A7, 0x53CE, + 0x85A8, 0x53CF, 0x85A9, 0x53D0, 0x85AA, 0x53D2, 0x85AB, 0x53D3, 0x85AC, 0x53D5, 0x85AD, 0x53DA, 0x85AE, 0x53DC, 0x85AF, 0x53DD, + 0x85B0, 0x53DE, 0x85B1, 0x53E1, 0x85B2, 0x53E2, 0x85B3, 0x53E7, 0x85B4, 0x53F4, 0x85B5, 0x53FA, 0x85B6, 0x53FE, 0x85B7, 0x53FF, + 0x85B8, 0x5400, 0x85B9, 0x5402, 0x85BA, 0x5405, 0x85BB, 0x5407, 0x85BC, 0x540B, 0x85BD, 0x5414, 0x85BE, 0x5418, 0x85BF, 0x5419, + 0x85C0, 0x541A, 0x85C1, 0x541C, 0x85C2, 0x5422, 0x85C3, 0x5424, 0x85C4, 0x5425, 0x85C5, 0x542A, 0x85C6, 0x5430, 0x85C7, 0x5433, + 0x85C8, 0x5436, 0x85C9, 0x5437, 0x85CA, 0x543A, 0x85CB, 0x543D, 0x85CC, 0x543F, 0x85CD, 0x5441, 0x85CE, 0x5442, 0x85CF, 0x5444, + 0x85D0, 0x5445, 0x85D1, 0x5447, 0x85D2, 0x5449, 0x85D3, 0x544C, 0x85D4, 0x544D, 0x85D5, 0x544E, 0x85D6, 0x544F, 0x85D7, 0x5451, + 0x85D8, 0x545A, 0x85D9, 0x545D, 0x85DA, 0x545E, 0x85DB, 0x545F, 0x85DC, 0x5460, 0x85DD, 0x5461, 0x85DE, 0x5463, 0x85DF, 0x5465, + 0x85E0, 0x5467, 0x85E1, 0x5469, 0x85E2, 0x546A, 0x85E3, 0x546B, 0x85E4, 0x546C, 0x85E5, 0x546D, 0x85E6, 0x546E, 0x85E7, 0x546F, + 0x85E8, 0x5470, 0x85E9, 0x5474, 0x85EA, 0x5479, 0x85EB, 0x547A, 0x85EC, 0x547E, 0x85ED, 0x547F, 0x85EE, 0x5481, 0x85EF, 0x5483, + 0x85F0, 0x5485, 0x85F1, 0x5487, 0x85F2, 0x5488, 0x85F3, 0x5489, 0x85F4, 0x548A, 0x85F5, 0x548D, 0x85F6, 0x5491, 0x85F7, 0x5493, + 0x85F8, 0x5497, 0x85F9, 0x5498, 0x85FA, 0x549C, 0x85FB, 0x549E, 0x85FC, 0x549F, 0x85FD, 0x54A0, 0x85FE, 0x54A1, 0x8640, 0x54A2, + 0x8641, 0x54A5, 0x8642, 0x54AE, 0x8643, 0x54B0, 0x8644, 0x54B2, 0x8645, 0x54B5, 0x8646, 0x54B6, 0x8647, 0x54B7, 0x8648, 0x54B9, + 0x8649, 0x54BA, 0x864A, 0x54BC, 0x864B, 0x54BE, 0x864C, 0x54C3, 0x864D, 0x54C5, 0x864E, 0x54CA, 0x864F, 0x54CB, 0x8650, 0x54D6, + 0x8651, 0x54D8, 0x8652, 0x54DB, 0x8653, 0x54E0, 0x8654, 0x54E1, 0x8655, 0x54E2, 0x8656, 0x54E3, 0x8657, 0x54E4, 0x8658, 0x54EB, + 0x8659, 0x54EC, 0x865A, 0x54EF, 0x865B, 0x54F0, 0x865C, 0x54F1, 0x865D, 0x54F4, 0x865E, 0x54F5, 0x865F, 0x54F6, 0x8660, 0x54F7, + 0x8661, 0x54F8, 0x8662, 0x54F9, 0x8663, 0x54FB, 0x8664, 0x54FE, 0x8665, 0x5500, 0x8666, 0x5502, 0x8667, 0x5503, 0x8668, 0x5504, + 0x8669, 0x5505, 0x866A, 0x5508, 0x866B, 0x550A, 0x866C, 0x550B, 0x866D, 0x550C, 0x866E, 0x550D, 0x866F, 0x550E, 0x8670, 0x5512, + 0x8671, 0x5513, 0x8672, 0x5515, 0x8673, 0x5516, 0x8674, 0x5517, 0x8675, 0x5518, 0x8676, 0x5519, 0x8677, 0x551A, 0x8678, 0x551C, + 0x8679, 0x551D, 0x867A, 0x551E, 0x867B, 0x551F, 0x867C, 0x5521, 0x867D, 0x5525, 0x867E, 0x5526, 0x8680, 0x5528, 0x8681, 0x5529, + 0x8682, 0x552B, 0x8683, 0x552D, 0x8684, 0x5532, 0x8685, 0x5534, 0x8686, 0x5535, 0x8687, 0x5536, 0x8688, 0x5538, 0x8689, 0x5539, + 0x868A, 0x553A, 0x868B, 0x553B, 0x868C, 0x553D, 0x868D, 0x5540, 0x868E, 0x5542, 0x868F, 0x5545, 0x8690, 0x5547, 0x8691, 0x5548, + 0x8692, 0x554B, 0x8693, 0x554C, 0x8694, 0x554D, 0x8695, 0x554E, 0x8696, 0x554F, 0x8697, 0x5551, 0x8698, 0x5552, 0x8699, 0x5553, + 0x869A, 0x5554, 0x869B, 0x5557, 0x869C, 0x5558, 0x869D, 0x5559, 0x869E, 0x555A, 0x869F, 0x555B, 0x86A0, 0x555D, 0x86A1, 0x555E, + 0x86A2, 0x555F, 0x86A3, 0x5560, 0x86A4, 0x5562, 0x86A5, 0x5563, 0x86A6, 0x5568, 0x86A7, 0x5569, 0x86A8, 0x556B, 0x86A9, 0x556F, + 0x86AA, 0x5570, 0x86AB, 0x5571, 0x86AC, 0x5572, 0x86AD, 0x5573, 0x86AE, 0x5574, 0x86AF, 0x5579, 0x86B0, 0x557A, 0x86B1, 0x557D, + 0x86B2, 0x557F, 0x86B3, 0x5585, 0x86B4, 0x5586, 0x86B5, 0x558C, 0x86B6, 0x558D, 0x86B7, 0x558E, 0x86B8, 0x5590, 0x86B9, 0x5592, + 0x86BA, 0x5593, 0x86BB, 0x5595, 0x86BC, 0x5596, 0x86BD, 0x5597, 0x86BE, 0x559A, 0x86BF, 0x559B, 0x86C0, 0x559E, 0x86C1, 0x55A0, + 0x86C2, 0x55A1, 0x86C3, 0x55A2, 0x86C4, 0x55A3, 0x86C5, 0x55A4, 0x86C6, 0x55A5, 0x86C7, 0x55A6, 0x86C8, 0x55A8, 0x86C9, 0x55A9, + 0x86CA, 0x55AA, 0x86CB, 0x55AB, 0x86CC, 0x55AC, 0x86CD, 0x55AD, 0x86CE, 0x55AE, 0x86CF, 0x55AF, 0x86D0, 0x55B0, 0x86D1, 0x55B2, + 0x86D2, 0x55B4, 0x86D3, 0x55B6, 0x86D4, 0x55B8, 0x86D5, 0x55BA, 0x86D6, 0x55BC, 0x86D7, 0x55BF, 0x86D8, 0x55C0, 0x86D9, 0x55C1, + 0x86DA, 0x55C2, 0x86DB, 0x55C3, 0x86DC, 0x55C6, 0x86DD, 0x55C7, 0x86DE, 0x55C8, 0x86DF, 0x55CA, 0x86E0, 0x55CB, 0x86E1, 0x55CE, + 0x86E2, 0x55CF, 0x86E3, 0x55D0, 0x86E4, 0x55D5, 0x86E5, 0x55D7, 0x86E6, 0x55D8, 0x86E7, 0x55D9, 0x86E8, 0x55DA, 0x86E9, 0x55DB, + 0x86EA, 0x55DE, 0x86EB, 0x55E0, 0x86EC, 0x55E2, 0x86ED, 0x55E7, 0x86EE, 0x55E9, 0x86EF, 0x55ED, 0x86F0, 0x55EE, 0x86F1, 0x55F0, + 0x86F2, 0x55F1, 0x86F3, 0x55F4, 0x86F4, 0x55F6, 0x86F5, 0x55F8, 0x86F6, 0x55F9, 0x86F7, 0x55FA, 0x86F8, 0x55FB, 0x86F9, 0x55FC, + 0x86FA, 0x55FF, 0x86FB, 0x5602, 0x86FC, 0x5603, 0x86FD, 0x5604, 0x86FE, 0x5605, 0x8740, 0x5606, 0x8741, 0x5607, 0x8742, 0x560A, + 0x8743, 0x560B, 0x8744, 0x560D, 0x8745, 0x5610, 0x8746, 0x5611, 0x8747, 0x5612, 0x8748, 0x5613, 0x8749, 0x5614, 0x874A, 0x5615, + 0x874B, 0x5616, 0x874C, 0x5617, 0x874D, 0x5619, 0x874E, 0x561A, 0x874F, 0x561C, 0x8750, 0x561D, 0x8751, 0x5620, 0x8752, 0x5621, + 0x8753, 0x5622, 0x8754, 0x5625, 0x8755, 0x5626, 0x8756, 0x5628, 0x8757, 0x5629, 0x8758, 0x562A, 0x8759, 0x562B, 0x875A, 0x562E, + 0x875B, 0x562F, 0x875C, 0x5630, 0x875D, 0x5633, 0x875E, 0x5635, 0x875F, 0x5637, 0x8760, 0x5638, 0x8761, 0x563A, 0x8762, 0x563C, + 0x8763, 0x563D, 0x8764, 0x563E, 0x8765, 0x5640, 0x8766, 0x5641, 0x8767, 0x5642, 0x8768, 0x5643, 0x8769, 0x5644, 0x876A, 0x5645, + 0x876B, 0x5646, 0x876C, 0x5647, 0x876D, 0x5648, 0x876E, 0x5649, 0x876F, 0x564A, 0x8770, 0x564B, 0x8771, 0x564F, 0x8772, 0x5650, + 0x8773, 0x5651, 0x8774, 0x5652, 0x8775, 0x5653, 0x8776, 0x5655, 0x8777, 0x5656, 0x8778, 0x565A, 0x8779, 0x565B, 0x877A, 0x565D, + 0x877B, 0x565E, 0x877C, 0x565F, 0x877D, 0x5660, 0x877E, 0x5661, 0x8780, 0x5663, 0x8781, 0x5665, 0x8782, 0x5666, 0x8783, 0x5667, + 0x8784, 0x566D, 0x8785, 0x566E, 0x8786, 0x566F, 0x8787, 0x5670, 0x8788, 0x5672, 0x8789, 0x5673, 0x878A, 0x5674, 0x878B, 0x5675, + 0x878C, 0x5677, 0x878D, 0x5678, 0x878E, 0x5679, 0x878F, 0x567A, 0x8790, 0x567D, 0x8791, 0x567E, 0x8792, 0x567F, 0x8793, 0x5680, + 0x8794, 0x5681, 0x8795, 0x5682, 0x8796, 0x5683, 0x8797, 0x5684, 0x8798, 0x5687, 0x8799, 0x5688, 0x879A, 0x5689, 0x879B, 0x568A, + 0x879C, 0x568B, 0x879D, 0x568C, 0x879E, 0x568D, 0x879F, 0x5690, 0x87A0, 0x5691, 0x87A1, 0x5692, 0x87A2, 0x5694, 0x87A3, 0x5695, + 0x87A4, 0x5696, 0x87A5, 0x5697, 0x87A6, 0x5698, 0x87A7, 0x5699, 0x87A8, 0x569A, 0x87A9, 0x569B, 0x87AA, 0x569C, 0x87AB, 0x569D, + 0x87AC, 0x569E, 0x87AD, 0x569F, 0x87AE, 0x56A0, 0x87AF, 0x56A1, 0x87B0, 0x56A2, 0x87B1, 0x56A4, 0x87B2, 0x56A5, 0x87B3, 0x56A6, + 0x87B4, 0x56A7, 0x87B5, 0x56A8, 0x87B6, 0x56A9, 0x87B7, 0x56AA, 0x87B8, 0x56AB, 0x87B9, 0x56AC, 0x87BA, 0x56AD, 0x87BB, 0x56AE, + 0x87BC, 0x56B0, 0x87BD, 0x56B1, 0x87BE, 0x56B2, 0x87BF, 0x56B3, 0x87C0, 0x56B4, 0x87C1, 0x56B5, 0x87C2, 0x56B6, 0x87C3, 0x56B8, + 0x87C4, 0x56B9, 0x87C5, 0x56BA, 0x87C6, 0x56BB, 0x87C7, 0x56BD, 0x87C8, 0x56BE, 0x87C9, 0x56BF, 0x87CA, 0x56C0, 0x87CB, 0x56C1, + 0x87CC, 0x56C2, 0x87CD, 0x56C3, 0x87CE, 0x56C4, 0x87CF, 0x56C5, 0x87D0, 0x56C6, 0x87D1, 0x56C7, 0x87D2, 0x56C8, 0x87D3, 0x56C9, + 0x87D4, 0x56CB, 0x87D5, 0x56CC, 0x87D6, 0x56CD, 0x87D7, 0x56CE, 0x87D8, 0x56CF, 0x87D9, 0x56D0, 0x87DA, 0x56D1, 0x87DB, 0x56D2, + 0x87DC, 0x56D3, 0x87DD, 0x56D5, 0x87DE, 0x56D6, 0x87DF, 0x56D8, 0x87E0, 0x56D9, 0x87E1, 0x56DC, 0x87E2, 0x56E3, 0x87E3, 0x56E5, + 0x87E4, 0x56E6, 0x87E5, 0x56E7, 0x87E6, 0x56E8, 0x87E7, 0x56E9, 0x87E8, 0x56EA, 0x87E9, 0x56EC, 0x87EA, 0x56EE, 0x87EB, 0x56EF, + 0x87EC, 0x56F2, 0x87ED, 0x56F3, 0x87EE, 0x56F6, 0x87EF, 0x56F7, 0x87F0, 0x56F8, 0x87F1, 0x56FB, 0x87F2, 0x56FC, 0x87F3, 0x5700, + 0x87F4, 0x5701, 0x87F5, 0x5702, 0x87F6, 0x5705, 0x87F7, 0x5707, 0x87F8, 0x570B, 0x87F9, 0x570C, 0x87FA, 0x570D, 0x87FB, 0x570E, + 0x87FC, 0x570F, 0x87FD, 0x5710, 0x87FE, 0x5711, 0x8840, 0x5712, 0x8841, 0x5713, 0x8842, 0x5714, 0x8843, 0x5715, 0x8844, 0x5716, + 0x8845, 0x5717, 0x8846, 0x5718, 0x8847, 0x5719, 0x8848, 0x571A, 0x8849, 0x571B, 0x884A, 0x571D, 0x884B, 0x571E, 0x884C, 0x5720, + 0x884D, 0x5721, 0x884E, 0x5722, 0x884F, 0x5724, 0x8850, 0x5725, 0x8851, 0x5726, 0x8852, 0x5727, 0x8853, 0x572B, 0x8854, 0x5731, + 0x8855, 0x5732, 0x8856, 0x5734, 0x8857, 0x5735, 0x8858, 0x5736, 0x8859, 0x5737, 0x885A, 0x5738, 0x885B, 0x573C, 0x885C, 0x573D, + 0x885D, 0x573F, 0x885E, 0x5741, 0x885F, 0x5743, 0x8860, 0x5744, 0x8861, 0x5745, 0x8862, 0x5746, 0x8863, 0x5748, 0x8864, 0x5749, + 0x8865, 0x574B, 0x8866, 0x5752, 0x8867, 0x5753, 0x8868, 0x5754, 0x8869, 0x5755, 0x886A, 0x5756, 0x886B, 0x5758, 0x886C, 0x5759, + 0x886D, 0x5762, 0x886E, 0x5763, 0x886F, 0x5765, 0x8870, 0x5767, 0x8871, 0x576C, 0x8872, 0x576E, 0x8873, 0x5770, 0x8874, 0x5771, + 0x8875, 0x5772, 0x8876, 0x5774, 0x8877, 0x5775, 0x8878, 0x5778, 0x8879, 0x5779, 0x887A, 0x577A, 0x887B, 0x577D, 0x887C, 0x577E, + 0x887D, 0x577F, 0x887E, 0x5780, 0x8880, 0x5781, 0x8881, 0x5787, 0x8882, 0x5788, 0x8883, 0x5789, 0x8884, 0x578A, 0x8885, 0x578D, + 0x8886, 0x578E, 0x8887, 0x578F, 0x8888, 0x5790, 0x8889, 0x5791, 0x888A, 0x5794, 0x888B, 0x5795, 0x888C, 0x5796, 0x888D, 0x5797, + 0x888E, 0x5798, 0x888F, 0x5799, 0x8890, 0x579A, 0x8891, 0x579C, 0x8892, 0x579D, 0x8893, 0x579E, 0x8894, 0x579F, 0x8895, 0x57A5, + 0x8896, 0x57A8, 0x8897, 0x57AA, 0x8898, 0x57AC, 0x8899, 0x57AF, 0x889A, 0x57B0, 0x889B, 0x57B1, 0x889C, 0x57B3, 0x889D, 0x57B5, + 0x889E, 0x57B6, 0x889F, 0x57B7, 0x88A0, 0x57B9, 0x88A1, 0x57BA, 0x88A2, 0x57BB, 0x88A3, 0x57BC, 0x88A4, 0x57BD, 0x88A5, 0x57BE, + 0x88A6, 0x57BF, 0x88A7, 0x57C0, 0x88A8, 0x57C1, 0x88A9, 0x57C4, 0x88AA, 0x57C5, 0x88AB, 0x57C6, 0x88AC, 0x57C7, 0x88AD, 0x57C8, + 0x88AE, 0x57C9, 0x88AF, 0x57CA, 0x88B0, 0x57CC, 0x88B1, 0x57CD, 0x88B2, 0x57D0, 0x88B3, 0x57D1, 0x88B4, 0x57D3, 0x88B5, 0x57D6, + 0x88B6, 0x57D7, 0x88B7, 0x57DB, 0x88B8, 0x57DC, 0x88B9, 0x57DE, 0x88BA, 0x57E1, 0x88BB, 0x57E2, 0x88BC, 0x57E3, 0x88BD, 0x57E5, + 0x88BE, 0x57E6, 0x88BF, 0x57E7, 0x88C0, 0x57E8, 0x88C1, 0x57E9, 0x88C2, 0x57EA, 0x88C3, 0x57EB, 0x88C4, 0x57EC, 0x88C5, 0x57EE, + 0x88C6, 0x57F0, 0x88C7, 0x57F1, 0x88C8, 0x57F2, 0x88C9, 0x57F3, 0x88CA, 0x57F5, 0x88CB, 0x57F6, 0x88CC, 0x57F7, 0x88CD, 0x57FB, + 0x88CE, 0x57FC, 0x88CF, 0x57FE, 0x88D0, 0x57FF, 0x88D1, 0x5801, 0x88D2, 0x5803, 0x88D3, 0x5804, 0x88D4, 0x5805, 0x88D5, 0x5808, + 0x88D6, 0x5809, 0x88D7, 0x580A, 0x88D8, 0x580C, 0x88D9, 0x580E, 0x88DA, 0x580F, 0x88DB, 0x5810, 0x88DC, 0x5812, 0x88DD, 0x5813, + 0x88DE, 0x5814, 0x88DF, 0x5816, 0x88E0, 0x5817, 0x88E1, 0x5818, 0x88E2, 0x581A, 0x88E3, 0x581B, 0x88E4, 0x581C, 0x88E5, 0x581D, + 0x88E6, 0x581F, 0x88E7, 0x5822, 0x88E8, 0x5823, 0x88E9, 0x5825, 0x88EA, 0x5826, 0x88EB, 0x5827, 0x88EC, 0x5828, 0x88ED, 0x5829, + 0x88EE, 0x582B, 0x88EF, 0x582C, 0x88F0, 0x582D, 0x88F1, 0x582E, 0x88F2, 0x582F, 0x88F3, 0x5831, 0x88F4, 0x5832, 0x88F5, 0x5833, + 0x88F6, 0x5834, 0x88F7, 0x5836, 0x88F8, 0x5837, 0x88F9, 0x5838, 0x88FA, 0x5839, 0x88FB, 0x583A, 0x88FC, 0x583B, 0x88FD, 0x583C, + 0x88FE, 0x583D, 0x8940, 0x583E, 0x8941, 0x583F, 0x8942, 0x5840, 0x8943, 0x5841, 0x8944, 0x5842, 0x8945, 0x5843, 0x8946, 0x5845, + 0x8947, 0x5846, 0x8948, 0x5847, 0x8949, 0x5848, 0x894A, 0x5849, 0x894B, 0x584A, 0x894C, 0x584B, 0x894D, 0x584E, 0x894E, 0x584F, + 0x894F, 0x5850, 0x8950, 0x5852, 0x8951, 0x5853, 0x8952, 0x5855, 0x8953, 0x5856, 0x8954, 0x5857, 0x8955, 0x5859, 0x8956, 0x585A, + 0x8957, 0x585B, 0x8958, 0x585C, 0x8959, 0x585D, 0x895A, 0x585F, 0x895B, 0x5860, 0x895C, 0x5861, 0x895D, 0x5862, 0x895E, 0x5863, + 0x895F, 0x5864, 0x8960, 0x5866, 0x8961, 0x5867, 0x8962, 0x5868, 0x8963, 0x5869, 0x8964, 0x586A, 0x8965, 0x586D, 0x8966, 0x586E, + 0x8967, 0x586F, 0x8968, 0x5870, 0x8969, 0x5871, 0x896A, 0x5872, 0x896B, 0x5873, 0x896C, 0x5874, 0x896D, 0x5875, 0x896E, 0x5876, + 0x896F, 0x5877, 0x8970, 0x5878, 0x8971, 0x5879, 0x8972, 0x587A, 0x8973, 0x587B, 0x8974, 0x587C, 0x8975, 0x587D, 0x8976, 0x587F, + 0x8977, 0x5882, 0x8978, 0x5884, 0x8979, 0x5886, 0x897A, 0x5887, 0x897B, 0x5888, 0x897C, 0x588A, 0x897D, 0x588B, 0x897E, 0x588C, + 0x8980, 0x588D, 0x8981, 0x588E, 0x8982, 0x588F, 0x8983, 0x5890, 0x8984, 0x5891, 0x8985, 0x5894, 0x8986, 0x5895, 0x8987, 0x5896, + 0x8988, 0x5897, 0x8989, 0x5898, 0x898A, 0x589B, 0x898B, 0x589C, 0x898C, 0x589D, 0x898D, 0x58A0, 0x898E, 0x58A1, 0x898F, 0x58A2, + 0x8990, 0x58A3, 0x8991, 0x58A4, 0x8992, 0x58A5, 0x8993, 0x58A6, 0x8994, 0x58A7, 0x8995, 0x58AA, 0x8996, 0x58AB, 0x8997, 0x58AC, + 0x8998, 0x58AD, 0x8999, 0x58AE, 0x899A, 0x58AF, 0x899B, 0x58B0, 0x899C, 0x58B1, 0x899D, 0x58B2, 0x899E, 0x58B3, 0x899F, 0x58B4, + 0x89A0, 0x58B5, 0x89A1, 0x58B6, 0x89A2, 0x58B7, 0x89A3, 0x58B8, 0x89A4, 0x58B9, 0x89A5, 0x58BA, 0x89A6, 0x58BB, 0x89A7, 0x58BD, + 0x89A8, 0x58BE, 0x89A9, 0x58BF, 0x89AA, 0x58C0, 0x89AB, 0x58C2, 0x89AC, 0x58C3, 0x89AD, 0x58C4, 0x89AE, 0x58C6, 0x89AF, 0x58C7, + 0x89B0, 0x58C8, 0x89B1, 0x58C9, 0x89B2, 0x58CA, 0x89B3, 0x58CB, 0x89B4, 0x58CC, 0x89B5, 0x58CD, 0x89B6, 0x58CE, 0x89B7, 0x58CF, + 0x89B8, 0x58D0, 0x89B9, 0x58D2, 0x89BA, 0x58D3, 0x89BB, 0x58D4, 0x89BC, 0x58D6, 0x89BD, 0x58D7, 0x89BE, 0x58D8, 0x89BF, 0x58D9, + 0x89C0, 0x58DA, 0x89C1, 0x58DB, 0x89C2, 0x58DC, 0x89C3, 0x58DD, 0x89C4, 0x58DE, 0x89C5, 0x58DF, 0x89C6, 0x58E0, 0x89C7, 0x58E1, + 0x89C8, 0x58E2, 0x89C9, 0x58E3, 0x89CA, 0x58E5, 0x89CB, 0x58E6, 0x89CC, 0x58E7, 0x89CD, 0x58E8, 0x89CE, 0x58E9, 0x89CF, 0x58EA, + 0x89D0, 0x58ED, 0x89D1, 0x58EF, 0x89D2, 0x58F1, 0x89D3, 0x58F2, 0x89D4, 0x58F4, 0x89D5, 0x58F5, 0x89D6, 0x58F7, 0x89D7, 0x58F8, + 0x89D8, 0x58FA, 0x89D9, 0x58FB, 0x89DA, 0x58FC, 0x89DB, 0x58FD, 0x89DC, 0x58FE, 0x89DD, 0x58FF, 0x89DE, 0x5900, 0x89DF, 0x5901, + 0x89E0, 0x5903, 0x89E1, 0x5905, 0x89E2, 0x5906, 0x89E3, 0x5908, 0x89E4, 0x5909, 0x89E5, 0x590A, 0x89E6, 0x590B, 0x89E7, 0x590C, + 0x89E8, 0x590E, 0x89E9, 0x5910, 0x89EA, 0x5911, 0x89EB, 0x5912, 0x89EC, 0x5913, 0x89ED, 0x5917, 0x89EE, 0x5918, 0x89EF, 0x591B, + 0x89F0, 0x591D, 0x89F1, 0x591E, 0x89F2, 0x5920, 0x89F3, 0x5921, 0x89F4, 0x5922, 0x89F5, 0x5923, 0x89F6, 0x5926, 0x89F7, 0x5928, + 0x89F8, 0x592C, 0x89F9, 0x5930, 0x89FA, 0x5932, 0x89FB, 0x5933, 0x89FC, 0x5935, 0x89FD, 0x5936, 0x89FE, 0x593B, 0x8A40, 0x593D, + 0x8A41, 0x593E, 0x8A42, 0x593F, 0x8A43, 0x5940, 0x8A44, 0x5943, 0x8A45, 0x5945, 0x8A46, 0x5946, 0x8A47, 0x594A, 0x8A48, 0x594C, + 0x8A49, 0x594D, 0x8A4A, 0x5950, 0x8A4B, 0x5952, 0x8A4C, 0x5953, 0x8A4D, 0x5959, 0x8A4E, 0x595B, 0x8A4F, 0x595C, 0x8A50, 0x595D, + 0x8A51, 0x595E, 0x8A52, 0x595F, 0x8A53, 0x5961, 0x8A54, 0x5963, 0x8A55, 0x5964, 0x8A56, 0x5966, 0x8A57, 0x5967, 0x8A58, 0x5968, + 0x8A59, 0x5969, 0x8A5A, 0x596A, 0x8A5B, 0x596B, 0x8A5C, 0x596C, 0x8A5D, 0x596D, 0x8A5E, 0x596E, 0x8A5F, 0x596F, 0x8A60, 0x5970, + 0x8A61, 0x5971, 0x8A62, 0x5972, 0x8A63, 0x5975, 0x8A64, 0x5977, 0x8A65, 0x597A, 0x8A66, 0x597B, 0x8A67, 0x597C, 0x8A68, 0x597E, + 0x8A69, 0x597F, 0x8A6A, 0x5980, 0x8A6B, 0x5985, 0x8A6C, 0x5989, 0x8A6D, 0x598B, 0x8A6E, 0x598C, 0x8A6F, 0x598E, 0x8A70, 0x598F, + 0x8A71, 0x5990, 0x8A72, 0x5991, 0x8A73, 0x5994, 0x8A74, 0x5995, 0x8A75, 0x5998, 0x8A76, 0x599A, 0x8A77, 0x599B, 0x8A78, 0x599C, + 0x8A79, 0x599D, 0x8A7A, 0x599F, 0x8A7B, 0x59A0, 0x8A7C, 0x59A1, 0x8A7D, 0x59A2, 0x8A7E, 0x59A6, 0x8A80, 0x59A7, 0x8A81, 0x59AC, + 0x8A82, 0x59AD, 0x8A83, 0x59B0, 0x8A84, 0x59B1, 0x8A85, 0x59B3, 0x8A86, 0x59B4, 0x8A87, 0x59B5, 0x8A88, 0x59B6, 0x8A89, 0x59B7, + 0x8A8A, 0x59B8, 0x8A8B, 0x59BA, 0x8A8C, 0x59BC, 0x8A8D, 0x59BD, 0x8A8E, 0x59BF, 0x8A8F, 0x59C0, 0x8A90, 0x59C1, 0x8A91, 0x59C2, + 0x8A92, 0x59C3, 0x8A93, 0x59C4, 0x8A94, 0x59C5, 0x8A95, 0x59C7, 0x8A96, 0x59C8, 0x8A97, 0x59C9, 0x8A98, 0x59CC, 0x8A99, 0x59CD, + 0x8A9A, 0x59CE, 0x8A9B, 0x59CF, 0x8A9C, 0x59D5, 0x8A9D, 0x59D6, 0x8A9E, 0x59D9, 0x8A9F, 0x59DB, 0x8AA0, 0x59DE, 0x8AA1, 0x59DF, + 0x8AA2, 0x59E0, 0x8AA3, 0x59E1, 0x8AA4, 0x59E2, 0x8AA5, 0x59E4, 0x8AA6, 0x59E6, 0x8AA7, 0x59E7, 0x8AA8, 0x59E9, 0x8AA9, 0x59EA, + 0x8AAA, 0x59EB, 0x8AAB, 0x59ED, 0x8AAC, 0x59EE, 0x8AAD, 0x59EF, 0x8AAE, 0x59F0, 0x8AAF, 0x59F1, 0x8AB0, 0x59F2, 0x8AB1, 0x59F3, + 0x8AB2, 0x59F4, 0x8AB3, 0x59F5, 0x8AB4, 0x59F6, 0x8AB5, 0x59F7, 0x8AB6, 0x59F8, 0x8AB7, 0x59FA, 0x8AB8, 0x59FC, 0x8AB9, 0x59FD, + 0x8ABA, 0x59FE, 0x8ABB, 0x5A00, 0x8ABC, 0x5A02, 0x8ABD, 0x5A0A, 0x8ABE, 0x5A0B, 0x8ABF, 0x5A0D, 0x8AC0, 0x5A0E, 0x8AC1, 0x5A0F, + 0x8AC2, 0x5A10, 0x8AC3, 0x5A12, 0x8AC4, 0x5A14, 0x8AC5, 0x5A15, 0x8AC6, 0x5A16, 0x8AC7, 0x5A17, 0x8AC8, 0x5A19, 0x8AC9, 0x5A1A, + 0x8ACA, 0x5A1B, 0x8ACB, 0x5A1D, 0x8ACC, 0x5A1E, 0x8ACD, 0x5A21, 0x8ACE, 0x5A22, 0x8ACF, 0x5A24, 0x8AD0, 0x5A26, 0x8AD1, 0x5A27, + 0x8AD2, 0x5A28, 0x8AD3, 0x5A2A, 0x8AD4, 0x5A2B, 0x8AD5, 0x5A2C, 0x8AD6, 0x5A2D, 0x8AD7, 0x5A2E, 0x8AD8, 0x5A2F, 0x8AD9, 0x5A30, + 0x8ADA, 0x5A33, 0x8ADB, 0x5A35, 0x8ADC, 0x5A37, 0x8ADD, 0x5A38, 0x8ADE, 0x5A39, 0x8ADF, 0x5A3A, 0x8AE0, 0x5A3B, 0x8AE1, 0x5A3D, + 0x8AE2, 0x5A3E, 0x8AE3, 0x5A3F, 0x8AE4, 0x5A41, 0x8AE5, 0x5A42, 0x8AE6, 0x5A43, 0x8AE7, 0x5A44, 0x8AE8, 0x5A45, 0x8AE9, 0x5A47, + 0x8AEA, 0x5A48, 0x8AEB, 0x5A4B, 0x8AEC, 0x5A4C, 0x8AED, 0x5A4D, 0x8AEE, 0x5A4E, 0x8AEF, 0x5A4F, 0x8AF0, 0x5A50, 0x8AF1, 0x5A51, + 0x8AF2, 0x5A52, 0x8AF3, 0x5A53, 0x8AF4, 0x5A54, 0x8AF5, 0x5A56, 0x8AF6, 0x5A57, 0x8AF7, 0x5A58, 0x8AF8, 0x5A59, 0x8AF9, 0x5A5B, + 0x8AFA, 0x5A5C, 0x8AFB, 0x5A5D, 0x8AFC, 0x5A5E, 0x8AFD, 0x5A5F, 0x8AFE, 0x5A60, 0x8B40, 0x5A61, 0x8B41, 0x5A63, 0x8B42, 0x5A64, + 0x8B43, 0x5A65, 0x8B44, 0x5A66, 0x8B45, 0x5A68, 0x8B46, 0x5A69, 0x8B47, 0x5A6B, 0x8B48, 0x5A6C, 0x8B49, 0x5A6D, 0x8B4A, 0x5A6E, + 0x8B4B, 0x5A6F, 0x8B4C, 0x5A70, 0x8B4D, 0x5A71, 0x8B4E, 0x5A72, 0x8B4F, 0x5A73, 0x8B50, 0x5A78, 0x8B51, 0x5A79, 0x8B52, 0x5A7B, + 0x8B53, 0x5A7C, 0x8B54, 0x5A7D, 0x8B55, 0x5A7E, 0x8B56, 0x5A80, 0x8B57, 0x5A81, 0x8B58, 0x5A82, 0x8B59, 0x5A83, 0x8B5A, 0x5A84, + 0x8B5B, 0x5A85, 0x8B5C, 0x5A86, 0x8B5D, 0x5A87, 0x8B5E, 0x5A88, 0x8B5F, 0x5A89, 0x8B60, 0x5A8A, 0x8B61, 0x5A8B, 0x8B62, 0x5A8C, + 0x8B63, 0x5A8D, 0x8B64, 0x5A8E, 0x8B65, 0x5A8F, 0x8B66, 0x5A90, 0x8B67, 0x5A91, 0x8B68, 0x5A93, 0x8B69, 0x5A94, 0x8B6A, 0x5A95, + 0x8B6B, 0x5A96, 0x8B6C, 0x5A97, 0x8B6D, 0x5A98, 0x8B6E, 0x5A99, 0x8B6F, 0x5A9C, 0x8B70, 0x5A9D, 0x8B71, 0x5A9E, 0x8B72, 0x5A9F, + 0x8B73, 0x5AA0, 0x8B74, 0x5AA1, 0x8B75, 0x5AA2, 0x8B76, 0x5AA3, 0x8B77, 0x5AA4, 0x8B78, 0x5AA5, 0x8B79, 0x5AA6, 0x8B7A, 0x5AA7, + 0x8B7B, 0x5AA8, 0x8B7C, 0x5AA9, 0x8B7D, 0x5AAB, 0x8B7E, 0x5AAC, 0x8B80, 0x5AAD, 0x8B81, 0x5AAE, 0x8B82, 0x5AAF, 0x8B83, 0x5AB0, + 0x8B84, 0x5AB1, 0x8B85, 0x5AB4, 0x8B86, 0x5AB6, 0x8B87, 0x5AB7, 0x8B88, 0x5AB9, 0x8B89, 0x5ABA, 0x8B8A, 0x5ABB, 0x8B8B, 0x5ABC, + 0x8B8C, 0x5ABD, 0x8B8D, 0x5ABF, 0x8B8E, 0x5AC0, 0x8B8F, 0x5AC3, 0x8B90, 0x5AC4, 0x8B91, 0x5AC5, 0x8B92, 0x5AC6, 0x8B93, 0x5AC7, + 0x8B94, 0x5AC8, 0x8B95, 0x5ACA, 0x8B96, 0x5ACB, 0x8B97, 0x5ACD, 0x8B98, 0x5ACE, 0x8B99, 0x5ACF, 0x8B9A, 0x5AD0, 0x8B9B, 0x5AD1, + 0x8B9C, 0x5AD3, 0x8B9D, 0x5AD5, 0x8B9E, 0x5AD7, 0x8B9F, 0x5AD9, 0x8BA0, 0x5ADA, 0x8BA1, 0x5ADB, 0x8BA2, 0x5ADD, 0x8BA3, 0x5ADE, + 0x8BA4, 0x5ADF, 0x8BA5, 0x5AE2, 0x8BA6, 0x5AE4, 0x8BA7, 0x5AE5, 0x8BA8, 0x5AE7, 0x8BA9, 0x5AE8, 0x8BAA, 0x5AEA, 0x8BAB, 0x5AEC, + 0x8BAC, 0x5AED, 0x8BAD, 0x5AEE, 0x8BAE, 0x5AEF, 0x8BAF, 0x5AF0, 0x8BB0, 0x5AF2, 0x8BB1, 0x5AF3, 0x8BB2, 0x5AF4, 0x8BB3, 0x5AF5, + 0x8BB4, 0x5AF6, 0x8BB5, 0x5AF7, 0x8BB6, 0x5AF8, 0x8BB7, 0x5AF9, 0x8BB8, 0x5AFA, 0x8BB9, 0x5AFB, 0x8BBA, 0x5AFC, 0x8BBB, 0x5AFD, + 0x8BBC, 0x5AFE, 0x8BBD, 0x5AFF, 0x8BBE, 0x5B00, 0x8BBF, 0x5B01, 0x8BC0, 0x5B02, 0x8BC1, 0x5B03, 0x8BC2, 0x5B04, 0x8BC3, 0x5B05, + 0x8BC4, 0x5B06, 0x8BC5, 0x5B07, 0x8BC6, 0x5B08, 0x8BC7, 0x5B0A, 0x8BC8, 0x5B0B, 0x8BC9, 0x5B0C, 0x8BCA, 0x5B0D, 0x8BCB, 0x5B0E, + 0x8BCC, 0x5B0F, 0x8BCD, 0x5B10, 0x8BCE, 0x5B11, 0x8BCF, 0x5B12, 0x8BD0, 0x5B13, 0x8BD1, 0x5B14, 0x8BD2, 0x5B15, 0x8BD3, 0x5B18, + 0x8BD4, 0x5B19, 0x8BD5, 0x5B1A, 0x8BD6, 0x5B1B, 0x8BD7, 0x5B1C, 0x8BD8, 0x5B1D, 0x8BD9, 0x5B1E, 0x8BDA, 0x5B1F, 0x8BDB, 0x5B20, + 0x8BDC, 0x5B21, 0x8BDD, 0x5B22, 0x8BDE, 0x5B23, 0x8BDF, 0x5B24, 0x8BE0, 0x5B25, 0x8BE1, 0x5B26, 0x8BE2, 0x5B27, 0x8BE3, 0x5B28, + 0x8BE4, 0x5B29, 0x8BE5, 0x5B2A, 0x8BE6, 0x5B2B, 0x8BE7, 0x5B2C, 0x8BE8, 0x5B2D, 0x8BE9, 0x5B2E, 0x8BEA, 0x5B2F, 0x8BEB, 0x5B30, + 0x8BEC, 0x5B31, 0x8BED, 0x5B33, 0x8BEE, 0x5B35, 0x8BEF, 0x5B36, 0x8BF0, 0x5B38, 0x8BF1, 0x5B39, 0x8BF2, 0x5B3A, 0x8BF3, 0x5B3B, + 0x8BF4, 0x5B3C, 0x8BF5, 0x5B3D, 0x8BF6, 0x5B3E, 0x8BF7, 0x5B3F, 0x8BF8, 0x5B41, 0x8BF9, 0x5B42, 0x8BFA, 0x5B43, 0x8BFB, 0x5B44, + 0x8BFC, 0x5B45, 0x8BFD, 0x5B46, 0x8BFE, 0x5B47, 0x8C40, 0x5B48, 0x8C41, 0x5B49, 0x8C42, 0x5B4A, 0x8C43, 0x5B4B, 0x8C44, 0x5B4C, + 0x8C45, 0x5B4D, 0x8C46, 0x5B4E, 0x8C47, 0x5B4F, 0x8C48, 0x5B52, 0x8C49, 0x5B56, 0x8C4A, 0x5B5E, 0x8C4B, 0x5B60, 0x8C4C, 0x5B61, + 0x8C4D, 0x5B67, 0x8C4E, 0x5B68, 0x8C4F, 0x5B6B, 0x8C50, 0x5B6D, 0x8C51, 0x5B6E, 0x8C52, 0x5B6F, 0x8C53, 0x5B72, 0x8C54, 0x5B74, + 0x8C55, 0x5B76, 0x8C56, 0x5B77, 0x8C57, 0x5B78, 0x8C58, 0x5B79, 0x8C59, 0x5B7B, 0x8C5A, 0x5B7C, 0x8C5B, 0x5B7E, 0x8C5C, 0x5B7F, + 0x8C5D, 0x5B82, 0x8C5E, 0x5B86, 0x8C5F, 0x5B8A, 0x8C60, 0x5B8D, 0x8C61, 0x5B8E, 0x8C62, 0x5B90, 0x8C63, 0x5B91, 0x8C64, 0x5B92, + 0x8C65, 0x5B94, 0x8C66, 0x5B96, 0x8C67, 0x5B9F, 0x8C68, 0x5BA7, 0x8C69, 0x5BA8, 0x8C6A, 0x5BA9, 0x8C6B, 0x5BAC, 0x8C6C, 0x5BAD, + 0x8C6D, 0x5BAE, 0x8C6E, 0x5BAF, 0x8C6F, 0x5BB1, 0x8C70, 0x5BB2, 0x8C71, 0x5BB7, 0x8C72, 0x5BBA, 0x8C73, 0x5BBB, 0x8C74, 0x5BBC, + 0x8C75, 0x5BC0, 0x8C76, 0x5BC1, 0x8C77, 0x5BC3, 0x8C78, 0x5BC8, 0x8C79, 0x5BC9, 0x8C7A, 0x5BCA, 0x8C7B, 0x5BCB, 0x8C7C, 0x5BCD, + 0x8C7D, 0x5BCE, 0x8C7E, 0x5BCF, 0x8C80, 0x5BD1, 0x8C81, 0x5BD4, 0x8C82, 0x5BD5, 0x8C83, 0x5BD6, 0x8C84, 0x5BD7, 0x8C85, 0x5BD8, + 0x8C86, 0x5BD9, 0x8C87, 0x5BDA, 0x8C88, 0x5BDB, 0x8C89, 0x5BDC, 0x8C8A, 0x5BE0, 0x8C8B, 0x5BE2, 0x8C8C, 0x5BE3, 0x8C8D, 0x5BE6, + 0x8C8E, 0x5BE7, 0x8C8F, 0x5BE9, 0x8C90, 0x5BEA, 0x8C91, 0x5BEB, 0x8C92, 0x5BEC, 0x8C93, 0x5BED, 0x8C94, 0x5BEF, 0x8C95, 0x5BF1, + 0x8C96, 0x5BF2, 0x8C97, 0x5BF3, 0x8C98, 0x5BF4, 0x8C99, 0x5BF5, 0x8C9A, 0x5BF6, 0x8C9B, 0x5BF7, 0x8C9C, 0x5BFD, 0x8C9D, 0x5BFE, + 0x8C9E, 0x5C00, 0x8C9F, 0x5C02, 0x8CA0, 0x5C03, 0x8CA1, 0x5C05, 0x8CA2, 0x5C07, 0x8CA3, 0x5C08, 0x8CA4, 0x5C0B, 0x8CA5, 0x5C0C, + 0x8CA6, 0x5C0D, 0x8CA7, 0x5C0E, 0x8CA8, 0x5C10, 0x8CA9, 0x5C12, 0x8CAA, 0x5C13, 0x8CAB, 0x5C17, 0x8CAC, 0x5C19, 0x8CAD, 0x5C1B, + 0x8CAE, 0x5C1E, 0x8CAF, 0x5C1F, 0x8CB0, 0x5C20, 0x8CB1, 0x5C21, 0x8CB2, 0x5C23, 0x8CB3, 0x5C26, 0x8CB4, 0x5C28, 0x8CB5, 0x5C29, + 0x8CB6, 0x5C2A, 0x8CB7, 0x5C2B, 0x8CB8, 0x5C2D, 0x8CB9, 0x5C2E, 0x8CBA, 0x5C2F, 0x8CBB, 0x5C30, 0x8CBC, 0x5C32, 0x8CBD, 0x5C33, + 0x8CBE, 0x5C35, 0x8CBF, 0x5C36, 0x8CC0, 0x5C37, 0x8CC1, 0x5C43, 0x8CC2, 0x5C44, 0x8CC3, 0x5C46, 0x8CC4, 0x5C47, 0x8CC5, 0x5C4C, + 0x8CC6, 0x5C4D, 0x8CC7, 0x5C52, 0x8CC8, 0x5C53, 0x8CC9, 0x5C54, 0x8CCA, 0x5C56, 0x8CCB, 0x5C57, 0x8CCC, 0x5C58, 0x8CCD, 0x5C5A, + 0x8CCE, 0x5C5B, 0x8CCF, 0x5C5C, 0x8CD0, 0x5C5D, 0x8CD1, 0x5C5F, 0x8CD2, 0x5C62, 0x8CD3, 0x5C64, 0x8CD4, 0x5C67, 0x8CD5, 0x5C68, + 0x8CD6, 0x5C69, 0x8CD7, 0x5C6A, 0x8CD8, 0x5C6B, 0x8CD9, 0x5C6C, 0x8CDA, 0x5C6D, 0x8CDB, 0x5C70, 0x8CDC, 0x5C72, 0x8CDD, 0x5C73, + 0x8CDE, 0x5C74, 0x8CDF, 0x5C75, 0x8CE0, 0x5C76, 0x8CE1, 0x5C77, 0x8CE2, 0x5C78, 0x8CE3, 0x5C7B, 0x8CE4, 0x5C7C, 0x8CE5, 0x5C7D, + 0x8CE6, 0x5C7E, 0x8CE7, 0x5C80, 0x8CE8, 0x5C83, 0x8CE9, 0x5C84, 0x8CEA, 0x5C85, 0x8CEB, 0x5C86, 0x8CEC, 0x5C87, 0x8CED, 0x5C89, + 0x8CEE, 0x5C8A, 0x8CEF, 0x5C8B, 0x8CF0, 0x5C8E, 0x8CF1, 0x5C8F, 0x8CF2, 0x5C92, 0x8CF3, 0x5C93, 0x8CF4, 0x5C95, 0x8CF5, 0x5C9D, + 0x8CF6, 0x5C9E, 0x8CF7, 0x5C9F, 0x8CF8, 0x5CA0, 0x8CF9, 0x5CA1, 0x8CFA, 0x5CA4, 0x8CFB, 0x5CA5, 0x8CFC, 0x5CA6, 0x8CFD, 0x5CA7, + 0x8CFE, 0x5CA8, 0x8D40, 0x5CAA, 0x8D41, 0x5CAE, 0x8D42, 0x5CAF, 0x8D43, 0x5CB0, 0x8D44, 0x5CB2, 0x8D45, 0x5CB4, 0x8D46, 0x5CB6, + 0x8D47, 0x5CB9, 0x8D48, 0x5CBA, 0x8D49, 0x5CBB, 0x8D4A, 0x5CBC, 0x8D4B, 0x5CBE, 0x8D4C, 0x5CC0, 0x8D4D, 0x5CC2, 0x8D4E, 0x5CC3, + 0x8D4F, 0x5CC5, 0x8D50, 0x5CC6, 0x8D51, 0x5CC7, 0x8D52, 0x5CC8, 0x8D53, 0x5CC9, 0x8D54, 0x5CCA, 0x8D55, 0x5CCC, 0x8D56, 0x5CCD, + 0x8D57, 0x5CCE, 0x8D58, 0x5CCF, 0x8D59, 0x5CD0, 0x8D5A, 0x5CD1, 0x8D5B, 0x5CD3, 0x8D5C, 0x5CD4, 0x8D5D, 0x5CD5, 0x8D5E, 0x5CD6, + 0x8D5F, 0x5CD7, 0x8D60, 0x5CD8, 0x8D61, 0x5CDA, 0x8D62, 0x5CDB, 0x8D63, 0x5CDC, 0x8D64, 0x5CDD, 0x8D65, 0x5CDE, 0x8D66, 0x5CDF, + 0x8D67, 0x5CE0, 0x8D68, 0x5CE2, 0x8D69, 0x5CE3, 0x8D6A, 0x5CE7, 0x8D6B, 0x5CE9, 0x8D6C, 0x5CEB, 0x8D6D, 0x5CEC, 0x8D6E, 0x5CEE, + 0x8D6F, 0x5CEF, 0x8D70, 0x5CF1, 0x8D71, 0x5CF2, 0x8D72, 0x5CF3, 0x8D73, 0x5CF4, 0x8D74, 0x5CF5, 0x8D75, 0x5CF6, 0x8D76, 0x5CF7, + 0x8D77, 0x5CF8, 0x8D78, 0x5CF9, 0x8D79, 0x5CFA, 0x8D7A, 0x5CFC, 0x8D7B, 0x5CFD, 0x8D7C, 0x5CFE, 0x8D7D, 0x5CFF, 0x8D7E, 0x5D00, + 0x8D80, 0x5D01, 0x8D81, 0x5D04, 0x8D82, 0x5D05, 0x8D83, 0x5D08, 0x8D84, 0x5D09, 0x8D85, 0x5D0A, 0x8D86, 0x5D0B, 0x8D87, 0x5D0C, + 0x8D88, 0x5D0D, 0x8D89, 0x5D0F, 0x8D8A, 0x5D10, 0x8D8B, 0x5D11, 0x8D8C, 0x5D12, 0x8D8D, 0x5D13, 0x8D8E, 0x5D15, 0x8D8F, 0x5D17, + 0x8D90, 0x5D18, 0x8D91, 0x5D19, 0x8D92, 0x5D1A, 0x8D93, 0x5D1C, 0x8D94, 0x5D1D, 0x8D95, 0x5D1F, 0x8D96, 0x5D20, 0x8D97, 0x5D21, + 0x8D98, 0x5D22, 0x8D99, 0x5D23, 0x8D9A, 0x5D25, 0x8D9B, 0x5D28, 0x8D9C, 0x5D2A, 0x8D9D, 0x5D2B, 0x8D9E, 0x5D2C, 0x8D9F, 0x5D2F, + 0x8DA0, 0x5D30, 0x8DA1, 0x5D31, 0x8DA2, 0x5D32, 0x8DA3, 0x5D33, 0x8DA4, 0x5D35, 0x8DA5, 0x5D36, 0x8DA6, 0x5D37, 0x8DA7, 0x5D38, + 0x8DA8, 0x5D39, 0x8DA9, 0x5D3A, 0x8DAA, 0x5D3B, 0x8DAB, 0x5D3C, 0x8DAC, 0x5D3F, 0x8DAD, 0x5D40, 0x8DAE, 0x5D41, 0x8DAF, 0x5D42, + 0x8DB0, 0x5D43, 0x8DB1, 0x5D44, 0x8DB2, 0x5D45, 0x8DB3, 0x5D46, 0x8DB4, 0x5D48, 0x8DB5, 0x5D49, 0x8DB6, 0x5D4D, 0x8DB7, 0x5D4E, + 0x8DB8, 0x5D4F, 0x8DB9, 0x5D50, 0x8DBA, 0x5D51, 0x8DBB, 0x5D52, 0x8DBC, 0x5D53, 0x8DBD, 0x5D54, 0x8DBE, 0x5D55, 0x8DBF, 0x5D56, + 0x8DC0, 0x5D57, 0x8DC1, 0x5D59, 0x8DC2, 0x5D5A, 0x8DC3, 0x5D5C, 0x8DC4, 0x5D5E, 0x8DC5, 0x5D5F, 0x8DC6, 0x5D60, 0x8DC7, 0x5D61, + 0x8DC8, 0x5D62, 0x8DC9, 0x5D63, 0x8DCA, 0x5D64, 0x8DCB, 0x5D65, 0x8DCC, 0x5D66, 0x8DCD, 0x5D67, 0x8DCE, 0x5D68, 0x8DCF, 0x5D6A, + 0x8DD0, 0x5D6D, 0x8DD1, 0x5D6E, 0x8DD2, 0x5D70, 0x8DD3, 0x5D71, 0x8DD4, 0x5D72, 0x8DD5, 0x5D73, 0x8DD6, 0x5D75, 0x8DD7, 0x5D76, + 0x8DD8, 0x5D77, 0x8DD9, 0x5D78, 0x8DDA, 0x5D79, 0x8DDB, 0x5D7A, 0x8DDC, 0x5D7B, 0x8DDD, 0x5D7C, 0x8DDE, 0x5D7D, 0x8DDF, 0x5D7E, + 0x8DE0, 0x5D7F, 0x8DE1, 0x5D80, 0x8DE2, 0x5D81, 0x8DE3, 0x5D83, 0x8DE4, 0x5D84, 0x8DE5, 0x5D85, 0x8DE6, 0x5D86, 0x8DE7, 0x5D87, + 0x8DE8, 0x5D88, 0x8DE9, 0x5D89, 0x8DEA, 0x5D8A, 0x8DEB, 0x5D8B, 0x8DEC, 0x5D8C, 0x8DED, 0x5D8D, 0x8DEE, 0x5D8E, 0x8DEF, 0x5D8F, + 0x8DF0, 0x5D90, 0x8DF1, 0x5D91, 0x8DF2, 0x5D92, 0x8DF3, 0x5D93, 0x8DF4, 0x5D94, 0x8DF5, 0x5D95, 0x8DF6, 0x5D96, 0x8DF7, 0x5D97, + 0x8DF8, 0x5D98, 0x8DF9, 0x5D9A, 0x8DFA, 0x5D9B, 0x8DFB, 0x5D9C, 0x8DFC, 0x5D9E, 0x8DFD, 0x5D9F, 0x8DFE, 0x5DA0, 0x8E40, 0x5DA1, + 0x8E41, 0x5DA2, 0x8E42, 0x5DA3, 0x8E43, 0x5DA4, 0x8E44, 0x5DA5, 0x8E45, 0x5DA6, 0x8E46, 0x5DA7, 0x8E47, 0x5DA8, 0x8E48, 0x5DA9, + 0x8E49, 0x5DAA, 0x8E4A, 0x5DAB, 0x8E4B, 0x5DAC, 0x8E4C, 0x5DAD, 0x8E4D, 0x5DAE, 0x8E4E, 0x5DAF, 0x8E4F, 0x5DB0, 0x8E50, 0x5DB1, + 0x8E51, 0x5DB2, 0x8E52, 0x5DB3, 0x8E53, 0x5DB4, 0x8E54, 0x5DB5, 0x8E55, 0x5DB6, 0x8E56, 0x5DB8, 0x8E57, 0x5DB9, 0x8E58, 0x5DBA, + 0x8E59, 0x5DBB, 0x8E5A, 0x5DBC, 0x8E5B, 0x5DBD, 0x8E5C, 0x5DBE, 0x8E5D, 0x5DBF, 0x8E5E, 0x5DC0, 0x8E5F, 0x5DC1, 0x8E60, 0x5DC2, + 0x8E61, 0x5DC3, 0x8E62, 0x5DC4, 0x8E63, 0x5DC6, 0x8E64, 0x5DC7, 0x8E65, 0x5DC8, 0x8E66, 0x5DC9, 0x8E67, 0x5DCA, 0x8E68, 0x5DCB, + 0x8E69, 0x5DCC, 0x8E6A, 0x5DCE, 0x8E6B, 0x5DCF, 0x8E6C, 0x5DD0, 0x8E6D, 0x5DD1, 0x8E6E, 0x5DD2, 0x8E6F, 0x5DD3, 0x8E70, 0x5DD4, + 0x8E71, 0x5DD5, 0x8E72, 0x5DD6, 0x8E73, 0x5DD7, 0x8E74, 0x5DD8, 0x8E75, 0x5DD9, 0x8E76, 0x5DDA, 0x8E77, 0x5DDC, 0x8E78, 0x5DDF, + 0x8E79, 0x5DE0, 0x8E7A, 0x5DE3, 0x8E7B, 0x5DE4, 0x8E7C, 0x5DEA, 0x8E7D, 0x5DEC, 0x8E7E, 0x5DED, 0x8E80, 0x5DF0, 0x8E81, 0x5DF5, + 0x8E82, 0x5DF6, 0x8E83, 0x5DF8, 0x8E84, 0x5DF9, 0x8E85, 0x5DFA, 0x8E86, 0x5DFB, 0x8E87, 0x5DFC, 0x8E88, 0x5DFF, 0x8E89, 0x5E00, + 0x8E8A, 0x5E04, 0x8E8B, 0x5E07, 0x8E8C, 0x5E09, 0x8E8D, 0x5E0A, 0x8E8E, 0x5E0B, 0x8E8F, 0x5E0D, 0x8E90, 0x5E0E, 0x8E91, 0x5E12, + 0x8E92, 0x5E13, 0x8E93, 0x5E17, 0x8E94, 0x5E1E, 0x8E95, 0x5E1F, 0x8E96, 0x5E20, 0x8E97, 0x5E21, 0x8E98, 0x5E22, 0x8E99, 0x5E23, + 0x8E9A, 0x5E24, 0x8E9B, 0x5E25, 0x8E9C, 0x5E28, 0x8E9D, 0x5E29, 0x8E9E, 0x5E2A, 0x8E9F, 0x5E2B, 0x8EA0, 0x5E2C, 0x8EA1, 0x5E2F, + 0x8EA2, 0x5E30, 0x8EA3, 0x5E32, 0x8EA4, 0x5E33, 0x8EA5, 0x5E34, 0x8EA6, 0x5E35, 0x8EA7, 0x5E36, 0x8EA8, 0x5E39, 0x8EA9, 0x5E3A, + 0x8EAA, 0x5E3E, 0x8EAB, 0x5E3F, 0x8EAC, 0x5E40, 0x8EAD, 0x5E41, 0x8EAE, 0x5E43, 0x8EAF, 0x5E46, 0x8EB0, 0x5E47, 0x8EB1, 0x5E48, + 0x8EB2, 0x5E49, 0x8EB3, 0x5E4A, 0x8EB4, 0x5E4B, 0x8EB5, 0x5E4D, 0x8EB6, 0x5E4E, 0x8EB7, 0x5E4F, 0x8EB8, 0x5E50, 0x8EB9, 0x5E51, + 0x8EBA, 0x5E52, 0x8EBB, 0x5E53, 0x8EBC, 0x5E56, 0x8EBD, 0x5E57, 0x8EBE, 0x5E58, 0x8EBF, 0x5E59, 0x8EC0, 0x5E5A, 0x8EC1, 0x5E5C, + 0x8EC2, 0x5E5D, 0x8EC3, 0x5E5F, 0x8EC4, 0x5E60, 0x8EC5, 0x5E63, 0x8EC6, 0x5E64, 0x8EC7, 0x5E65, 0x8EC8, 0x5E66, 0x8EC9, 0x5E67, + 0x8ECA, 0x5E68, 0x8ECB, 0x5E69, 0x8ECC, 0x5E6A, 0x8ECD, 0x5E6B, 0x8ECE, 0x5E6C, 0x8ECF, 0x5E6D, 0x8ED0, 0x5E6E, 0x8ED1, 0x5E6F, + 0x8ED2, 0x5E70, 0x8ED3, 0x5E71, 0x8ED4, 0x5E75, 0x8ED5, 0x5E77, 0x8ED6, 0x5E79, 0x8ED7, 0x5E7E, 0x8ED8, 0x5E81, 0x8ED9, 0x5E82, + 0x8EDA, 0x5E83, 0x8EDB, 0x5E85, 0x8EDC, 0x5E88, 0x8EDD, 0x5E89, 0x8EDE, 0x5E8C, 0x8EDF, 0x5E8D, 0x8EE0, 0x5E8E, 0x8EE1, 0x5E92, + 0x8EE2, 0x5E98, 0x8EE3, 0x5E9B, 0x8EE4, 0x5E9D, 0x8EE5, 0x5EA1, 0x8EE6, 0x5EA2, 0x8EE7, 0x5EA3, 0x8EE8, 0x5EA4, 0x8EE9, 0x5EA8, + 0x8EEA, 0x5EA9, 0x8EEB, 0x5EAA, 0x8EEC, 0x5EAB, 0x8EED, 0x5EAC, 0x8EEE, 0x5EAE, 0x8EEF, 0x5EAF, 0x8EF0, 0x5EB0, 0x8EF1, 0x5EB1, + 0x8EF2, 0x5EB2, 0x8EF3, 0x5EB4, 0x8EF4, 0x5EBA, 0x8EF5, 0x5EBB, 0x8EF6, 0x5EBC, 0x8EF7, 0x5EBD, 0x8EF8, 0x5EBF, 0x8EF9, 0x5EC0, + 0x8EFA, 0x5EC1, 0x8EFB, 0x5EC2, 0x8EFC, 0x5EC3, 0x8EFD, 0x5EC4, 0x8EFE, 0x5EC5, 0x8F40, 0x5EC6, 0x8F41, 0x5EC7, 0x8F42, 0x5EC8, + 0x8F43, 0x5ECB, 0x8F44, 0x5ECC, 0x8F45, 0x5ECD, 0x8F46, 0x5ECE, 0x8F47, 0x5ECF, 0x8F48, 0x5ED0, 0x8F49, 0x5ED4, 0x8F4A, 0x5ED5, + 0x8F4B, 0x5ED7, 0x8F4C, 0x5ED8, 0x8F4D, 0x5ED9, 0x8F4E, 0x5EDA, 0x8F4F, 0x5EDC, 0x8F50, 0x5EDD, 0x8F51, 0x5EDE, 0x8F52, 0x5EDF, + 0x8F53, 0x5EE0, 0x8F54, 0x5EE1, 0x8F55, 0x5EE2, 0x8F56, 0x5EE3, 0x8F57, 0x5EE4, 0x8F58, 0x5EE5, 0x8F59, 0x5EE6, 0x8F5A, 0x5EE7, + 0x8F5B, 0x5EE9, 0x8F5C, 0x5EEB, 0x8F5D, 0x5EEC, 0x8F5E, 0x5EED, 0x8F5F, 0x5EEE, 0x8F60, 0x5EEF, 0x8F61, 0x5EF0, 0x8F62, 0x5EF1, + 0x8F63, 0x5EF2, 0x8F64, 0x5EF3, 0x8F65, 0x5EF5, 0x8F66, 0x5EF8, 0x8F67, 0x5EF9, 0x8F68, 0x5EFB, 0x8F69, 0x5EFC, 0x8F6A, 0x5EFD, + 0x8F6B, 0x5F05, 0x8F6C, 0x5F06, 0x8F6D, 0x5F07, 0x8F6E, 0x5F09, 0x8F6F, 0x5F0C, 0x8F70, 0x5F0D, 0x8F71, 0x5F0E, 0x8F72, 0x5F10, + 0x8F73, 0x5F12, 0x8F74, 0x5F14, 0x8F75, 0x5F16, 0x8F76, 0x5F19, 0x8F77, 0x5F1A, 0x8F78, 0x5F1C, 0x8F79, 0x5F1D, 0x8F7A, 0x5F1E, + 0x8F7B, 0x5F21, 0x8F7C, 0x5F22, 0x8F7D, 0x5F23, 0x8F7E, 0x5F24, 0x8F80, 0x5F28, 0x8F81, 0x5F2B, 0x8F82, 0x5F2C, 0x8F83, 0x5F2E, + 0x8F84, 0x5F30, 0x8F85, 0x5F32, 0x8F86, 0x5F33, 0x8F87, 0x5F34, 0x8F88, 0x5F35, 0x8F89, 0x5F36, 0x8F8A, 0x5F37, 0x8F8B, 0x5F38, + 0x8F8C, 0x5F3B, 0x8F8D, 0x5F3D, 0x8F8E, 0x5F3E, 0x8F8F, 0x5F3F, 0x8F90, 0x5F41, 0x8F91, 0x5F42, 0x8F92, 0x5F43, 0x8F93, 0x5F44, + 0x8F94, 0x5F45, 0x8F95, 0x5F46, 0x8F96, 0x5F47, 0x8F97, 0x5F48, 0x8F98, 0x5F49, 0x8F99, 0x5F4A, 0x8F9A, 0x5F4B, 0x8F9B, 0x5F4C, + 0x8F9C, 0x5F4D, 0x8F9D, 0x5F4E, 0x8F9E, 0x5F4F, 0x8F9F, 0x5F51, 0x8FA0, 0x5F54, 0x8FA1, 0x5F59, 0x8FA2, 0x5F5A, 0x8FA3, 0x5F5B, + 0x8FA4, 0x5F5C, 0x8FA5, 0x5F5E, 0x8FA6, 0x5F5F, 0x8FA7, 0x5F60, 0x8FA8, 0x5F63, 0x8FA9, 0x5F65, 0x8FAA, 0x5F67, 0x8FAB, 0x5F68, + 0x8FAC, 0x5F6B, 0x8FAD, 0x5F6E, 0x8FAE, 0x5F6F, 0x8FAF, 0x5F72, 0x8FB0, 0x5F74, 0x8FB1, 0x5F75, 0x8FB2, 0x5F76, 0x8FB3, 0x5F78, + 0x8FB4, 0x5F7A, 0x8FB5, 0x5F7D, 0x8FB6, 0x5F7E, 0x8FB7, 0x5F7F, 0x8FB8, 0x5F83, 0x8FB9, 0x5F86, 0x8FBA, 0x5F8D, 0x8FBB, 0x5F8E, + 0x8FBC, 0x5F8F, 0x8FBD, 0x5F91, 0x8FBE, 0x5F93, 0x8FBF, 0x5F94, 0x8FC0, 0x5F96, 0x8FC1, 0x5F9A, 0x8FC2, 0x5F9B, 0x8FC3, 0x5F9D, + 0x8FC4, 0x5F9E, 0x8FC5, 0x5F9F, 0x8FC6, 0x5FA0, 0x8FC7, 0x5FA2, 0x8FC8, 0x5FA3, 0x8FC9, 0x5FA4, 0x8FCA, 0x5FA5, 0x8FCB, 0x5FA6, + 0x8FCC, 0x5FA7, 0x8FCD, 0x5FA9, 0x8FCE, 0x5FAB, 0x8FCF, 0x5FAC, 0x8FD0, 0x5FAF, 0x8FD1, 0x5FB0, 0x8FD2, 0x5FB1, 0x8FD3, 0x5FB2, + 0x8FD4, 0x5FB3, 0x8FD5, 0x5FB4, 0x8FD6, 0x5FB6, 0x8FD7, 0x5FB8, 0x8FD8, 0x5FB9, 0x8FD9, 0x5FBA, 0x8FDA, 0x5FBB, 0x8FDB, 0x5FBE, + 0x8FDC, 0x5FBF, 0x8FDD, 0x5FC0, 0x8FDE, 0x5FC1, 0x8FDF, 0x5FC2, 0x8FE0, 0x5FC7, 0x8FE1, 0x5FC8, 0x8FE2, 0x5FCA, 0x8FE3, 0x5FCB, + 0x8FE4, 0x5FCE, 0x8FE5, 0x5FD3, 0x8FE6, 0x5FD4, 0x8FE7, 0x5FD5, 0x8FE8, 0x5FDA, 0x8FE9, 0x5FDB, 0x8FEA, 0x5FDC, 0x8FEB, 0x5FDE, + 0x8FEC, 0x5FDF, 0x8FED, 0x5FE2, 0x8FEE, 0x5FE3, 0x8FEF, 0x5FE5, 0x8FF0, 0x5FE6, 0x8FF1, 0x5FE8, 0x8FF2, 0x5FE9, 0x8FF3, 0x5FEC, + 0x8FF4, 0x5FEF, 0x8FF5, 0x5FF0, 0x8FF6, 0x5FF2, 0x8FF7, 0x5FF3, 0x8FF8, 0x5FF4, 0x8FF9, 0x5FF6, 0x8FFA, 0x5FF7, 0x8FFB, 0x5FF9, + 0x8FFC, 0x5FFA, 0x8FFD, 0x5FFC, 0x8FFE, 0x6007, 0x9040, 0x6008, 0x9041, 0x6009, 0x9042, 0x600B, 0x9043, 0x600C, 0x9044, 0x6010, + 0x9045, 0x6011, 0x9046, 0x6013, 0x9047, 0x6017, 0x9048, 0x6018, 0x9049, 0x601A, 0x904A, 0x601E, 0x904B, 0x601F, 0x904C, 0x6022, + 0x904D, 0x6023, 0x904E, 0x6024, 0x904F, 0x602C, 0x9050, 0x602D, 0x9051, 0x602E, 0x9052, 0x6030, 0x9053, 0x6031, 0x9054, 0x6032, + 0x9055, 0x6033, 0x9056, 0x6034, 0x9057, 0x6036, 0x9058, 0x6037, 0x9059, 0x6038, 0x905A, 0x6039, 0x905B, 0x603A, 0x905C, 0x603D, + 0x905D, 0x603E, 0x905E, 0x6040, 0x905F, 0x6044, 0x9060, 0x6045, 0x9061, 0x6046, 0x9062, 0x6047, 0x9063, 0x6048, 0x9064, 0x6049, + 0x9065, 0x604A, 0x9066, 0x604C, 0x9067, 0x604E, 0x9068, 0x604F, 0x9069, 0x6051, 0x906A, 0x6053, 0x906B, 0x6054, 0x906C, 0x6056, + 0x906D, 0x6057, 0x906E, 0x6058, 0x906F, 0x605B, 0x9070, 0x605C, 0x9071, 0x605E, 0x9072, 0x605F, 0x9073, 0x6060, 0x9074, 0x6061, + 0x9075, 0x6065, 0x9076, 0x6066, 0x9077, 0x606E, 0x9078, 0x6071, 0x9079, 0x6072, 0x907A, 0x6074, 0x907B, 0x6075, 0x907C, 0x6077, + 0x907D, 0x607E, 0x907E, 0x6080, 0x9080, 0x6081, 0x9081, 0x6082, 0x9082, 0x6085, 0x9083, 0x6086, 0x9084, 0x6087, 0x9085, 0x6088, + 0x9086, 0x608A, 0x9087, 0x608B, 0x9088, 0x608E, 0x9089, 0x608F, 0x908A, 0x6090, 0x908B, 0x6091, 0x908C, 0x6093, 0x908D, 0x6095, + 0x908E, 0x6097, 0x908F, 0x6098, 0x9090, 0x6099, 0x9091, 0x609C, 0x9092, 0x609E, 0x9093, 0x60A1, 0x9094, 0x60A2, 0x9095, 0x60A4, + 0x9096, 0x60A5, 0x9097, 0x60A7, 0x9098, 0x60A9, 0x9099, 0x60AA, 0x909A, 0x60AE, 0x909B, 0x60B0, 0x909C, 0x60B3, 0x909D, 0x60B5, + 0x909E, 0x60B6, 0x909F, 0x60B7, 0x90A0, 0x60B9, 0x90A1, 0x60BA, 0x90A2, 0x60BD, 0x90A3, 0x60BE, 0x90A4, 0x60BF, 0x90A5, 0x60C0, + 0x90A6, 0x60C1, 0x90A7, 0x60C2, 0x90A8, 0x60C3, 0x90A9, 0x60C4, 0x90AA, 0x60C7, 0x90AB, 0x60C8, 0x90AC, 0x60C9, 0x90AD, 0x60CC, + 0x90AE, 0x60CD, 0x90AF, 0x60CE, 0x90B0, 0x60CF, 0x90B1, 0x60D0, 0x90B2, 0x60D2, 0x90B3, 0x60D3, 0x90B4, 0x60D4, 0x90B5, 0x60D6, + 0x90B6, 0x60D7, 0x90B7, 0x60D9, 0x90B8, 0x60DB, 0x90B9, 0x60DE, 0x90BA, 0x60E1, 0x90BB, 0x60E2, 0x90BC, 0x60E3, 0x90BD, 0x60E4, + 0x90BE, 0x60E5, 0x90BF, 0x60EA, 0x90C0, 0x60F1, 0x90C1, 0x60F2, 0x90C2, 0x60F5, 0x90C3, 0x60F7, 0x90C4, 0x60F8, 0x90C5, 0x60FB, + 0x90C6, 0x60FC, 0x90C7, 0x60FD, 0x90C8, 0x60FE, 0x90C9, 0x60FF, 0x90CA, 0x6102, 0x90CB, 0x6103, 0x90CC, 0x6104, 0x90CD, 0x6105, + 0x90CE, 0x6107, 0x90CF, 0x610A, 0x90D0, 0x610B, 0x90D1, 0x610C, 0x90D2, 0x6110, 0x90D3, 0x6111, 0x90D4, 0x6112, 0x90D5, 0x6113, + 0x90D6, 0x6114, 0x90D7, 0x6116, 0x90D8, 0x6117, 0x90D9, 0x6118, 0x90DA, 0x6119, 0x90DB, 0x611B, 0x90DC, 0x611C, 0x90DD, 0x611D, + 0x90DE, 0x611E, 0x90DF, 0x6121, 0x90E0, 0x6122, 0x90E1, 0x6125, 0x90E2, 0x6128, 0x90E3, 0x6129, 0x90E4, 0x612A, 0x90E5, 0x612C, + 0x90E6, 0x612D, 0x90E7, 0x612E, 0x90E8, 0x612F, 0x90E9, 0x6130, 0x90EA, 0x6131, 0x90EB, 0x6132, 0x90EC, 0x6133, 0x90ED, 0x6134, + 0x90EE, 0x6135, 0x90EF, 0x6136, 0x90F0, 0x6137, 0x90F1, 0x6138, 0x90F2, 0x6139, 0x90F3, 0x613A, 0x90F4, 0x613B, 0x90F5, 0x613C, + 0x90F6, 0x613D, 0x90F7, 0x613E, 0x90F8, 0x6140, 0x90F9, 0x6141, 0x90FA, 0x6142, 0x90FB, 0x6143, 0x90FC, 0x6144, 0x90FD, 0x6145, + 0x90FE, 0x6146, 0x9140, 0x6147, 0x9141, 0x6149, 0x9142, 0x614B, 0x9143, 0x614D, 0x9144, 0x614F, 0x9145, 0x6150, 0x9146, 0x6152, + 0x9147, 0x6153, 0x9148, 0x6154, 0x9149, 0x6156, 0x914A, 0x6157, 0x914B, 0x6158, 0x914C, 0x6159, 0x914D, 0x615A, 0x914E, 0x615B, + 0x914F, 0x615C, 0x9150, 0x615E, 0x9151, 0x615F, 0x9152, 0x6160, 0x9153, 0x6161, 0x9154, 0x6163, 0x9155, 0x6164, 0x9156, 0x6165, + 0x9157, 0x6166, 0x9158, 0x6169, 0x9159, 0x616A, 0x915A, 0x616B, 0x915B, 0x616C, 0x915C, 0x616D, 0x915D, 0x616E, 0x915E, 0x616F, + 0x915F, 0x6171, 0x9160, 0x6172, 0x9161, 0x6173, 0x9162, 0x6174, 0x9163, 0x6176, 0x9164, 0x6178, 0x9165, 0x6179, 0x9166, 0x617A, + 0x9167, 0x617B, 0x9168, 0x617C, 0x9169, 0x617D, 0x916A, 0x617E, 0x916B, 0x617F, 0x916C, 0x6180, 0x916D, 0x6181, 0x916E, 0x6182, + 0x916F, 0x6183, 0x9170, 0x6184, 0x9171, 0x6185, 0x9172, 0x6186, 0x9173, 0x6187, 0x9174, 0x6188, 0x9175, 0x6189, 0x9176, 0x618A, + 0x9177, 0x618C, 0x9178, 0x618D, 0x9179, 0x618F, 0x917A, 0x6190, 0x917B, 0x6191, 0x917C, 0x6192, 0x917D, 0x6193, 0x917E, 0x6195, + 0x9180, 0x6196, 0x9181, 0x6197, 0x9182, 0x6198, 0x9183, 0x6199, 0x9184, 0x619A, 0x9185, 0x619B, 0x9186, 0x619C, 0x9187, 0x619E, + 0x9188, 0x619F, 0x9189, 0x61A0, 0x918A, 0x61A1, 0x918B, 0x61A2, 0x918C, 0x61A3, 0x918D, 0x61A4, 0x918E, 0x61A5, 0x918F, 0x61A6, + 0x9190, 0x61AA, 0x9191, 0x61AB, 0x9192, 0x61AD, 0x9193, 0x61AE, 0x9194, 0x61AF, 0x9195, 0x61B0, 0x9196, 0x61B1, 0x9197, 0x61B2, + 0x9198, 0x61B3, 0x9199, 0x61B4, 0x919A, 0x61B5, 0x919B, 0x61B6, 0x919C, 0x61B8, 0x919D, 0x61B9, 0x919E, 0x61BA, 0x919F, 0x61BB, + 0x91A0, 0x61BC, 0x91A1, 0x61BD, 0x91A2, 0x61BF, 0x91A3, 0x61C0, 0x91A4, 0x61C1, 0x91A5, 0x61C3, 0x91A6, 0x61C4, 0x91A7, 0x61C5, + 0x91A8, 0x61C6, 0x91A9, 0x61C7, 0x91AA, 0x61C9, 0x91AB, 0x61CC, 0x91AC, 0x61CD, 0x91AD, 0x61CE, 0x91AE, 0x61CF, 0x91AF, 0x61D0, + 0x91B0, 0x61D3, 0x91B1, 0x61D5, 0x91B2, 0x61D6, 0x91B3, 0x61D7, 0x91B4, 0x61D8, 0x91B5, 0x61D9, 0x91B6, 0x61DA, 0x91B7, 0x61DB, + 0x91B8, 0x61DC, 0x91B9, 0x61DD, 0x91BA, 0x61DE, 0x91BB, 0x61DF, 0x91BC, 0x61E0, 0x91BD, 0x61E1, 0x91BE, 0x61E2, 0x91BF, 0x61E3, + 0x91C0, 0x61E4, 0x91C1, 0x61E5, 0x91C2, 0x61E7, 0x91C3, 0x61E8, 0x91C4, 0x61E9, 0x91C5, 0x61EA, 0x91C6, 0x61EB, 0x91C7, 0x61EC, + 0x91C8, 0x61ED, 0x91C9, 0x61EE, 0x91CA, 0x61EF, 0x91CB, 0x61F0, 0x91CC, 0x61F1, 0x91CD, 0x61F2, 0x91CE, 0x61F3, 0x91CF, 0x61F4, + 0x91D0, 0x61F6, 0x91D1, 0x61F7, 0x91D2, 0x61F8, 0x91D3, 0x61F9, 0x91D4, 0x61FA, 0x91D5, 0x61FB, 0x91D6, 0x61FC, 0x91D7, 0x61FD, + 0x91D8, 0x61FE, 0x91D9, 0x6200, 0x91DA, 0x6201, 0x91DB, 0x6202, 0x91DC, 0x6203, 0x91DD, 0x6204, 0x91DE, 0x6205, 0x91DF, 0x6207, + 0x91E0, 0x6209, 0x91E1, 0x6213, 0x91E2, 0x6214, 0x91E3, 0x6219, 0x91E4, 0x621C, 0x91E5, 0x621D, 0x91E6, 0x621E, 0x91E7, 0x6220, + 0x91E8, 0x6223, 0x91E9, 0x6226, 0x91EA, 0x6227, 0x91EB, 0x6228, 0x91EC, 0x6229, 0x91ED, 0x622B, 0x91EE, 0x622D, 0x91EF, 0x622F, + 0x91F0, 0x6230, 0x91F1, 0x6231, 0x91F2, 0x6232, 0x91F3, 0x6235, 0x91F4, 0x6236, 0x91F5, 0x6238, 0x91F6, 0x6239, 0x91F7, 0x623A, + 0x91F8, 0x623B, 0x91F9, 0x623C, 0x91FA, 0x6242, 0x91FB, 0x6244, 0x91FC, 0x6245, 0x91FD, 0x6246, 0x91FE, 0x624A, 0x9240, 0x624F, + 0x9241, 0x6250, 0x9242, 0x6255, 0x9243, 0x6256, 0x9244, 0x6257, 0x9245, 0x6259, 0x9246, 0x625A, 0x9247, 0x625C, 0x9248, 0x625D, + 0x9249, 0x625E, 0x924A, 0x625F, 0x924B, 0x6260, 0x924C, 0x6261, 0x924D, 0x6262, 0x924E, 0x6264, 0x924F, 0x6265, 0x9250, 0x6268, + 0x9251, 0x6271, 0x9252, 0x6272, 0x9253, 0x6274, 0x9254, 0x6275, 0x9255, 0x6277, 0x9256, 0x6278, 0x9257, 0x627A, 0x9258, 0x627B, + 0x9259, 0x627D, 0x925A, 0x6281, 0x925B, 0x6282, 0x925C, 0x6283, 0x925D, 0x6285, 0x925E, 0x6286, 0x925F, 0x6287, 0x9260, 0x6288, + 0x9261, 0x628B, 0x9262, 0x628C, 0x9263, 0x628D, 0x9264, 0x628E, 0x9265, 0x628F, 0x9266, 0x6290, 0x9267, 0x6294, 0x9268, 0x6299, + 0x9269, 0x629C, 0x926A, 0x629D, 0x926B, 0x629E, 0x926C, 0x62A3, 0x926D, 0x62A6, 0x926E, 0x62A7, 0x926F, 0x62A9, 0x9270, 0x62AA, + 0x9271, 0x62AD, 0x9272, 0x62AE, 0x9273, 0x62AF, 0x9274, 0x62B0, 0x9275, 0x62B2, 0x9276, 0x62B3, 0x9277, 0x62B4, 0x9278, 0x62B6, + 0x9279, 0x62B7, 0x927A, 0x62B8, 0x927B, 0x62BA, 0x927C, 0x62BE, 0x927D, 0x62C0, 0x927E, 0x62C1, 0x9280, 0x62C3, 0x9281, 0x62CB, + 0x9282, 0x62CF, 0x9283, 0x62D1, 0x9284, 0x62D5, 0x9285, 0x62DD, 0x9286, 0x62DE, 0x9287, 0x62E0, 0x9288, 0x62E1, 0x9289, 0x62E4, + 0x928A, 0x62EA, 0x928B, 0x62EB, 0x928C, 0x62F0, 0x928D, 0x62F2, 0x928E, 0x62F5, 0x928F, 0x62F8, 0x9290, 0x62F9, 0x9291, 0x62FA, + 0x9292, 0x62FB, 0x9293, 0x6300, 0x9294, 0x6303, 0x9295, 0x6304, 0x9296, 0x6305, 0x9297, 0x6306, 0x9298, 0x630A, 0x9299, 0x630B, + 0x929A, 0x630C, 0x929B, 0x630D, 0x929C, 0x630F, 0x929D, 0x6310, 0x929E, 0x6312, 0x929F, 0x6313, 0x92A0, 0x6314, 0x92A1, 0x6315, + 0x92A2, 0x6317, 0x92A3, 0x6318, 0x92A4, 0x6319, 0x92A5, 0x631C, 0x92A6, 0x6326, 0x92A7, 0x6327, 0x92A8, 0x6329, 0x92A9, 0x632C, + 0x92AA, 0x632D, 0x92AB, 0x632E, 0x92AC, 0x6330, 0x92AD, 0x6331, 0x92AE, 0x6333, 0x92AF, 0x6334, 0x92B0, 0x6335, 0x92B1, 0x6336, + 0x92B2, 0x6337, 0x92B3, 0x6338, 0x92B4, 0x633B, 0x92B5, 0x633C, 0x92B6, 0x633E, 0x92B7, 0x633F, 0x92B8, 0x6340, 0x92B9, 0x6341, + 0x92BA, 0x6344, 0x92BB, 0x6347, 0x92BC, 0x6348, 0x92BD, 0x634A, 0x92BE, 0x6351, 0x92BF, 0x6352, 0x92C0, 0x6353, 0x92C1, 0x6354, + 0x92C2, 0x6356, 0x92C3, 0x6357, 0x92C4, 0x6358, 0x92C5, 0x6359, 0x92C6, 0x635A, 0x92C7, 0x635B, 0x92C8, 0x635C, 0x92C9, 0x635D, + 0x92CA, 0x6360, 0x92CB, 0x6364, 0x92CC, 0x6365, 0x92CD, 0x6366, 0x92CE, 0x6368, 0x92CF, 0x636A, 0x92D0, 0x636B, 0x92D1, 0x636C, + 0x92D2, 0x636F, 0x92D3, 0x6370, 0x92D4, 0x6372, 0x92D5, 0x6373, 0x92D6, 0x6374, 0x92D7, 0x6375, 0x92D8, 0x6378, 0x92D9, 0x6379, + 0x92DA, 0x637C, 0x92DB, 0x637D, 0x92DC, 0x637E, 0x92DD, 0x637F, 0x92DE, 0x6381, 0x92DF, 0x6383, 0x92E0, 0x6384, 0x92E1, 0x6385, + 0x92E2, 0x6386, 0x92E3, 0x638B, 0x92E4, 0x638D, 0x92E5, 0x6391, 0x92E6, 0x6393, 0x92E7, 0x6394, 0x92E8, 0x6395, 0x92E9, 0x6397, + 0x92EA, 0x6399, 0x92EB, 0x639A, 0x92EC, 0x639B, 0x92ED, 0x639C, 0x92EE, 0x639D, 0x92EF, 0x639E, 0x92F0, 0x639F, 0x92F1, 0x63A1, + 0x92F2, 0x63A4, 0x92F3, 0x63A6, 0x92F4, 0x63AB, 0x92F5, 0x63AF, 0x92F6, 0x63B1, 0x92F7, 0x63B2, 0x92F8, 0x63B5, 0x92F9, 0x63B6, + 0x92FA, 0x63B9, 0x92FB, 0x63BB, 0x92FC, 0x63BD, 0x92FD, 0x63BF, 0x92FE, 0x63C0, 0x9340, 0x63C1, 0x9341, 0x63C2, 0x9342, 0x63C3, + 0x9343, 0x63C5, 0x9344, 0x63C7, 0x9345, 0x63C8, 0x9346, 0x63CA, 0x9347, 0x63CB, 0x9348, 0x63CC, 0x9349, 0x63D1, 0x934A, 0x63D3, + 0x934B, 0x63D4, 0x934C, 0x63D5, 0x934D, 0x63D7, 0x934E, 0x63D8, 0x934F, 0x63D9, 0x9350, 0x63DA, 0x9351, 0x63DB, 0x9352, 0x63DC, + 0x9353, 0x63DD, 0x9354, 0x63DF, 0x9355, 0x63E2, 0x9356, 0x63E4, 0x9357, 0x63E5, 0x9358, 0x63E6, 0x9359, 0x63E7, 0x935A, 0x63E8, + 0x935B, 0x63EB, 0x935C, 0x63EC, 0x935D, 0x63EE, 0x935E, 0x63EF, 0x935F, 0x63F0, 0x9360, 0x63F1, 0x9361, 0x63F3, 0x9362, 0x63F5, + 0x9363, 0x63F7, 0x9364, 0x63F9, 0x9365, 0x63FA, 0x9366, 0x63FB, 0x9367, 0x63FC, 0x9368, 0x63FE, 0x9369, 0x6403, 0x936A, 0x6404, + 0x936B, 0x6406, 0x936C, 0x6407, 0x936D, 0x6408, 0x936E, 0x6409, 0x936F, 0x640A, 0x9370, 0x640D, 0x9371, 0x640E, 0x9372, 0x6411, + 0x9373, 0x6412, 0x9374, 0x6415, 0x9375, 0x6416, 0x9376, 0x6417, 0x9377, 0x6418, 0x9378, 0x6419, 0x9379, 0x641A, 0x937A, 0x641D, + 0x937B, 0x641F, 0x937C, 0x6422, 0x937D, 0x6423, 0x937E, 0x6424, 0x9380, 0x6425, 0x9381, 0x6427, 0x9382, 0x6428, 0x9383, 0x6429, + 0x9384, 0x642B, 0x9385, 0x642E, 0x9386, 0x642F, 0x9387, 0x6430, 0x9388, 0x6431, 0x9389, 0x6432, 0x938A, 0x6433, 0x938B, 0x6435, + 0x938C, 0x6436, 0x938D, 0x6437, 0x938E, 0x6438, 0x938F, 0x6439, 0x9390, 0x643B, 0x9391, 0x643C, 0x9392, 0x643E, 0x9393, 0x6440, + 0x9394, 0x6442, 0x9395, 0x6443, 0x9396, 0x6449, 0x9397, 0x644B, 0x9398, 0x644C, 0x9399, 0x644D, 0x939A, 0x644E, 0x939B, 0x644F, + 0x939C, 0x6450, 0x939D, 0x6451, 0x939E, 0x6453, 0x939F, 0x6455, 0x93A0, 0x6456, 0x93A1, 0x6457, 0x93A2, 0x6459, 0x93A3, 0x645A, + 0x93A4, 0x645B, 0x93A5, 0x645C, 0x93A6, 0x645D, 0x93A7, 0x645F, 0x93A8, 0x6460, 0x93A9, 0x6461, 0x93AA, 0x6462, 0x93AB, 0x6463, + 0x93AC, 0x6464, 0x93AD, 0x6465, 0x93AE, 0x6466, 0x93AF, 0x6468, 0x93B0, 0x646A, 0x93B1, 0x646B, 0x93B2, 0x646C, 0x93B3, 0x646E, + 0x93B4, 0x646F, 0x93B5, 0x6470, 0x93B6, 0x6471, 0x93B7, 0x6472, 0x93B8, 0x6473, 0x93B9, 0x6474, 0x93BA, 0x6475, 0x93BB, 0x6476, + 0x93BC, 0x6477, 0x93BD, 0x647B, 0x93BE, 0x647C, 0x93BF, 0x647D, 0x93C0, 0x647E, 0x93C1, 0x647F, 0x93C2, 0x6480, 0x93C3, 0x6481, + 0x93C4, 0x6483, 0x93C5, 0x6486, 0x93C6, 0x6488, 0x93C7, 0x6489, 0x93C8, 0x648A, 0x93C9, 0x648B, 0x93CA, 0x648C, 0x93CB, 0x648D, + 0x93CC, 0x648E, 0x93CD, 0x648F, 0x93CE, 0x6490, 0x93CF, 0x6493, 0x93D0, 0x6494, 0x93D1, 0x6497, 0x93D2, 0x6498, 0x93D3, 0x649A, + 0x93D4, 0x649B, 0x93D5, 0x649C, 0x93D6, 0x649D, 0x93D7, 0x649F, 0x93D8, 0x64A0, 0x93D9, 0x64A1, 0x93DA, 0x64A2, 0x93DB, 0x64A3, + 0x93DC, 0x64A5, 0x93DD, 0x64A6, 0x93DE, 0x64A7, 0x93DF, 0x64A8, 0x93E0, 0x64AA, 0x93E1, 0x64AB, 0x93E2, 0x64AF, 0x93E3, 0x64B1, + 0x93E4, 0x64B2, 0x93E5, 0x64B3, 0x93E6, 0x64B4, 0x93E7, 0x64B6, 0x93E8, 0x64B9, 0x93E9, 0x64BB, 0x93EA, 0x64BD, 0x93EB, 0x64BE, + 0x93EC, 0x64BF, 0x93ED, 0x64C1, 0x93EE, 0x64C3, 0x93EF, 0x64C4, 0x93F0, 0x64C6, 0x93F1, 0x64C7, 0x93F2, 0x64C8, 0x93F3, 0x64C9, + 0x93F4, 0x64CA, 0x93F5, 0x64CB, 0x93F6, 0x64CC, 0x93F7, 0x64CF, 0x93F8, 0x64D1, 0x93F9, 0x64D3, 0x93FA, 0x64D4, 0x93FB, 0x64D5, + 0x93FC, 0x64D6, 0x93FD, 0x64D9, 0x93FE, 0x64DA, 0x9440, 0x64DB, 0x9441, 0x64DC, 0x9442, 0x64DD, 0x9443, 0x64DF, 0x9444, 0x64E0, + 0x9445, 0x64E1, 0x9446, 0x64E3, 0x9447, 0x64E5, 0x9448, 0x64E7, 0x9449, 0x64E8, 0x944A, 0x64E9, 0x944B, 0x64EA, 0x944C, 0x64EB, + 0x944D, 0x64EC, 0x944E, 0x64ED, 0x944F, 0x64EE, 0x9450, 0x64EF, 0x9451, 0x64F0, 0x9452, 0x64F1, 0x9453, 0x64F2, 0x9454, 0x64F3, + 0x9455, 0x64F4, 0x9456, 0x64F5, 0x9457, 0x64F6, 0x9458, 0x64F7, 0x9459, 0x64F8, 0x945A, 0x64F9, 0x945B, 0x64FA, 0x945C, 0x64FB, + 0x945D, 0x64FC, 0x945E, 0x64FD, 0x945F, 0x64FE, 0x9460, 0x64FF, 0x9461, 0x6501, 0x9462, 0x6502, 0x9463, 0x6503, 0x9464, 0x6504, + 0x9465, 0x6505, 0x9466, 0x6506, 0x9467, 0x6507, 0x9468, 0x6508, 0x9469, 0x650A, 0x946A, 0x650B, 0x946B, 0x650C, 0x946C, 0x650D, + 0x946D, 0x650E, 0x946E, 0x650F, 0x946F, 0x6510, 0x9470, 0x6511, 0x9471, 0x6513, 0x9472, 0x6514, 0x9473, 0x6515, 0x9474, 0x6516, + 0x9475, 0x6517, 0x9476, 0x6519, 0x9477, 0x651A, 0x9478, 0x651B, 0x9479, 0x651C, 0x947A, 0x651D, 0x947B, 0x651E, 0x947C, 0x651F, + 0x947D, 0x6520, 0x947E, 0x6521, 0x9480, 0x6522, 0x9481, 0x6523, 0x9482, 0x6524, 0x9483, 0x6526, 0x9484, 0x6527, 0x9485, 0x6528, + 0x9486, 0x6529, 0x9487, 0x652A, 0x9488, 0x652C, 0x9489, 0x652D, 0x948A, 0x6530, 0x948B, 0x6531, 0x948C, 0x6532, 0x948D, 0x6533, + 0x948E, 0x6537, 0x948F, 0x653A, 0x9490, 0x653C, 0x9491, 0x653D, 0x9492, 0x6540, 0x9493, 0x6541, 0x9494, 0x6542, 0x9495, 0x6543, + 0x9496, 0x6544, 0x9497, 0x6546, 0x9498, 0x6547, 0x9499, 0x654A, 0x949A, 0x654B, 0x949B, 0x654D, 0x949C, 0x654E, 0x949D, 0x6550, + 0x949E, 0x6552, 0x949F, 0x6553, 0x94A0, 0x6554, 0x94A1, 0x6557, 0x94A2, 0x6558, 0x94A3, 0x655A, 0x94A4, 0x655C, 0x94A5, 0x655F, + 0x94A6, 0x6560, 0x94A7, 0x6561, 0x94A8, 0x6564, 0x94A9, 0x6565, 0x94AA, 0x6567, 0x94AB, 0x6568, 0x94AC, 0x6569, 0x94AD, 0x656A, + 0x94AE, 0x656D, 0x94AF, 0x656E, 0x94B0, 0x656F, 0x94B1, 0x6571, 0x94B2, 0x6573, 0x94B3, 0x6575, 0x94B4, 0x6576, 0x94B5, 0x6578, + 0x94B6, 0x6579, 0x94B7, 0x657A, 0x94B8, 0x657B, 0x94B9, 0x657C, 0x94BA, 0x657D, 0x94BB, 0x657E, 0x94BC, 0x657F, 0x94BD, 0x6580, + 0x94BE, 0x6581, 0x94BF, 0x6582, 0x94C0, 0x6583, 0x94C1, 0x6584, 0x94C2, 0x6585, 0x94C3, 0x6586, 0x94C4, 0x6588, 0x94C5, 0x6589, + 0x94C6, 0x658A, 0x94C7, 0x658D, 0x94C8, 0x658E, 0x94C9, 0x658F, 0x94CA, 0x6592, 0x94CB, 0x6594, 0x94CC, 0x6595, 0x94CD, 0x6596, + 0x94CE, 0x6598, 0x94CF, 0x659A, 0x94D0, 0x659D, 0x94D1, 0x659E, 0x94D2, 0x65A0, 0x94D3, 0x65A2, 0x94D4, 0x65A3, 0x94D5, 0x65A6, + 0x94D6, 0x65A8, 0x94D7, 0x65AA, 0x94D8, 0x65AC, 0x94D9, 0x65AE, 0x94DA, 0x65B1, 0x94DB, 0x65B2, 0x94DC, 0x65B3, 0x94DD, 0x65B4, + 0x94DE, 0x65B5, 0x94DF, 0x65B6, 0x94E0, 0x65B7, 0x94E1, 0x65B8, 0x94E2, 0x65BA, 0x94E3, 0x65BB, 0x94E4, 0x65BE, 0x94E5, 0x65BF, + 0x94E6, 0x65C0, 0x94E7, 0x65C2, 0x94E8, 0x65C7, 0x94E9, 0x65C8, 0x94EA, 0x65C9, 0x94EB, 0x65CA, 0x94EC, 0x65CD, 0x94ED, 0x65D0, + 0x94EE, 0x65D1, 0x94EF, 0x65D3, 0x94F0, 0x65D4, 0x94F1, 0x65D5, 0x94F2, 0x65D8, 0x94F3, 0x65D9, 0x94F4, 0x65DA, 0x94F5, 0x65DB, + 0x94F6, 0x65DC, 0x94F7, 0x65DD, 0x94F8, 0x65DE, 0x94F9, 0x65DF, 0x94FA, 0x65E1, 0x94FB, 0x65E3, 0x94FC, 0x65E4, 0x94FD, 0x65EA, + 0x94FE, 0x65EB, 0x9540, 0x65F2, 0x9541, 0x65F3, 0x9542, 0x65F4, 0x9543, 0x65F5, 0x9544, 0x65F8, 0x9545, 0x65F9, 0x9546, 0x65FB, + 0x9547, 0x65FC, 0x9548, 0x65FD, 0x9549, 0x65FE, 0x954A, 0x65FF, 0x954B, 0x6601, 0x954C, 0x6604, 0x954D, 0x6605, 0x954E, 0x6607, + 0x954F, 0x6608, 0x9550, 0x6609, 0x9551, 0x660B, 0x9552, 0x660D, 0x9553, 0x6610, 0x9554, 0x6611, 0x9555, 0x6612, 0x9556, 0x6616, + 0x9557, 0x6617, 0x9558, 0x6618, 0x9559, 0x661A, 0x955A, 0x661B, 0x955B, 0x661C, 0x955C, 0x661E, 0x955D, 0x6621, 0x955E, 0x6622, + 0x955F, 0x6623, 0x9560, 0x6624, 0x9561, 0x6626, 0x9562, 0x6629, 0x9563, 0x662A, 0x9564, 0x662B, 0x9565, 0x662C, 0x9566, 0x662E, + 0x9567, 0x6630, 0x9568, 0x6632, 0x9569, 0x6633, 0x956A, 0x6637, 0x956B, 0x6638, 0x956C, 0x6639, 0x956D, 0x663A, 0x956E, 0x663B, + 0x956F, 0x663D, 0x9570, 0x663F, 0x9571, 0x6640, 0x9572, 0x6642, 0x9573, 0x6644, 0x9574, 0x6645, 0x9575, 0x6646, 0x9576, 0x6647, + 0x9577, 0x6648, 0x9578, 0x6649, 0x9579, 0x664A, 0x957A, 0x664D, 0x957B, 0x664E, 0x957C, 0x6650, 0x957D, 0x6651, 0x957E, 0x6658, + 0x9580, 0x6659, 0x9581, 0x665B, 0x9582, 0x665C, 0x9583, 0x665D, 0x9584, 0x665E, 0x9585, 0x6660, 0x9586, 0x6662, 0x9587, 0x6663, + 0x9588, 0x6665, 0x9589, 0x6667, 0x958A, 0x6669, 0x958B, 0x666A, 0x958C, 0x666B, 0x958D, 0x666C, 0x958E, 0x666D, 0x958F, 0x6671, + 0x9590, 0x6672, 0x9591, 0x6673, 0x9592, 0x6675, 0x9593, 0x6678, 0x9594, 0x6679, 0x9595, 0x667B, 0x9596, 0x667C, 0x9597, 0x667D, + 0x9598, 0x667F, 0x9599, 0x6680, 0x959A, 0x6681, 0x959B, 0x6683, 0x959C, 0x6685, 0x959D, 0x6686, 0x959E, 0x6688, 0x959F, 0x6689, + 0x95A0, 0x668A, 0x95A1, 0x668B, 0x95A2, 0x668D, 0x95A3, 0x668E, 0x95A4, 0x668F, 0x95A5, 0x6690, 0x95A6, 0x6692, 0x95A7, 0x6693, + 0x95A8, 0x6694, 0x95A9, 0x6695, 0x95AA, 0x6698, 0x95AB, 0x6699, 0x95AC, 0x669A, 0x95AD, 0x669B, 0x95AE, 0x669C, 0x95AF, 0x669E, + 0x95B0, 0x669F, 0x95B1, 0x66A0, 0x95B2, 0x66A1, 0x95B3, 0x66A2, 0x95B4, 0x66A3, 0x95B5, 0x66A4, 0x95B6, 0x66A5, 0x95B7, 0x66A6, + 0x95B8, 0x66A9, 0x95B9, 0x66AA, 0x95BA, 0x66AB, 0x95BB, 0x66AC, 0x95BC, 0x66AD, 0x95BD, 0x66AF, 0x95BE, 0x66B0, 0x95BF, 0x66B1, + 0x95C0, 0x66B2, 0x95C1, 0x66B3, 0x95C2, 0x66B5, 0x95C3, 0x66B6, 0x95C4, 0x66B7, 0x95C5, 0x66B8, 0x95C6, 0x66BA, 0x95C7, 0x66BB, + 0x95C8, 0x66BC, 0x95C9, 0x66BD, 0x95CA, 0x66BF, 0x95CB, 0x66C0, 0x95CC, 0x66C1, 0x95CD, 0x66C2, 0x95CE, 0x66C3, 0x95CF, 0x66C4, + 0x95D0, 0x66C5, 0x95D1, 0x66C6, 0x95D2, 0x66C7, 0x95D3, 0x66C8, 0x95D4, 0x66C9, 0x95D5, 0x66CA, 0x95D6, 0x66CB, 0x95D7, 0x66CC, + 0x95D8, 0x66CD, 0x95D9, 0x66CE, 0x95DA, 0x66CF, 0x95DB, 0x66D0, 0x95DC, 0x66D1, 0x95DD, 0x66D2, 0x95DE, 0x66D3, 0x95DF, 0x66D4, + 0x95E0, 0x66D5, 0x95E1, 0x66D6, 0x95E2, 0x66D7, 0x95E3, 0x66D8, 0x95E4, 0x66DA, 0x95E5, 0x66DE, 0x95E6, 0x66DF, 0x95E7, 0x66E0, + 0x95E8, 0x66E1, 0x95E9, 0x66E2, 0x95EA, 0x66E3, 0x95EB, 0x66E4, 0x95EC, 0x66E5, 0x95ED, 0x66E7, 0x95EE, 0x66E8, 0x95EF, 0x66EA, + 0x95F0, 0x66EB, 0x95F1, 0x66EC, 0x95F2, 0x66ED, 0x95F3, 0x66EE, 0x95F4, 0x66EF, 0x95F5, 0x66F1, 0x95F6, 0x66F5, 0x95F7, 0x66F6, + 0x95F8, 0x66F8, 0x95F9, 0x66FA, 0x95FA, 0x66FB, 0x95FB, 0x66FD, 0x95FC, 0x6701, 0x95FD, 0x6702, 0x95FE, 0x6703, 0x9640, 0x6704, + 0x9641, 0x6705, 0x9642, 0x6706, 0x9643, 0x6707, 0x9644, 0x670C, 0x9645, 0x670E, 0x9646, 0x670F, 0x9647, 0x6711, 0x9648, 0x6712, + 0x9649, 0x6713, 0x964A, 0x6716, 0x964B, 0x6718, 0x964C, 0x6719, 0x964D, 0x671A, 0x964E, 0x671C, 0x964F, 0x671E, 0x9650, 0x6720, + 0x9651, 0x6721, 0x9652, 0x6722, 0x9653, 0x6723, 0x9654, 0x6724, 0x9655, 0x6725, 0x9656, 0x6727, 0x9657, 0x6729, 0x9658, 0x672E, + 0x9659, 0x6730, 0x965A, 0x6732, 0x965B, 0x6733, 0x965C, 0x6736, 0x965D, 0x6737, 0x965E, 0x6738, 0x965F, 0x6739, 0x9660, 0x673B, + 0x9661, 0x673C, 0x9662, 0x673E, 0x9663, 0x673F, 0x9664, 0x6741, 0x9665, 0x6744, 0x9666, 0x6745, 0x9667, 0x6747, 0x9668, 0x674A, + 0x9669, 0x674B, 0x966A, 0x674D, 0x966B, 0x6752, 0x966C, 0x6754, 0x966D, 0x6755, 0x966E, 0x6757, 0x966F, 0x6758, 0x9670, 0x6759, + 0x9671, 0x675A, 0x9672, 0x675B, 0x9673, 0x675D, 0x9674, 0x6762, 0x9675, 0x6763, 0x9676, 0x6764, 0x9677, 0x6766, 0x9678, 0x6767, + 0x9679, 0x676B, 0x967A, 0x676C, 0x967B, 0x676E, 0x967C, 0x6771, 0x967D, 0x6774, 0x967E, 0x6776, 0x9680, 0x6778, 0x9681, 0x6779, + 0x9682, 0x677A, 0x9683, 0x677B, 0x9684, 0x677D, 0x9685, 0x6780, 0x9686, 0x6782, 0x9687, 0x6783, 0x9688, 0x6785, 0x9689, 0x6786, + 0x968A, 0x6788, 0x968B, 0x678A, 0x968C, 0x678C, 0x968D, 0x678D, 0x968E, 0x678E, 0x968F, 0x678F, 0x9690, 0x6791, 0x9691, 0x6792, + 0x9692, 0x6793, 0x9693, 0x6794, 0x9694, 0x6796, 0x9695, 0x6799, 0x9696, 0x679B, 0x9697, 0x679F, 0x9698, 0x67A0, 0x9699, 0x67A1, + 0x969A, 0x67A4, 0x969B, 0x67A6, 0x969C, 0x67A9, 0x969D, 0x67AC, 0x969E, 0x67AE, 0x969F, 0x67B1, 0x96A0, 0x67B2, 0x96A1, 0x67B4, + 0x96A2, 0x67B9, 0x96A3, 0x67BA, 0x96A4, 0x67BB, 0x96A5, 0x67BC, 0x96A6, 0x67BD, 0x96A7, 0x67BE, 0x96A8, 0x67BF, 0x96A9, 0x67C0, + 0x96AA, 0x67C2, 0x96AB, 0x67C5, 0x96AC, 0x67C6, 0x96AD, 0x67C7, 0x96AE, 0x67C8, 0x96AF, 0x67C9, 0x96B0, 0x67CA, 0x96B1, 0x67CB, + 0x96B2, 0x67CC, 0x96B3, 0x67CD, 0x96B4, 0x67CE, 0x96B5, 0x67D5, 0x96B6, 0x67D6, 0x96B7, 0x67D7, 0x96B8, 0x67DB, 0x96B9, 0x67DF, + 0x96BA, 0x67E1, 0x96BB, 0x67E3, 0x96BC, 0x67E4, 0x96BD, 0x67E6, 0x96BE, 0x67E7, 0x96BF, 0x67E8, 0x96C0, 0x67EA, 0x96C1, 0x67EB, + 0x96C2, 0x67ED, 0x96C3, 0x67EE, 0x96C4, 0x67F2, 0x96C5, 0x67F5, 0x96C6, 0x67F6, 0x96C7, 0x67F7, 0x96C8, 0x67F8, 0x96C9, 0x67F9, + 0x96CA, 0x67FA, 0x96CB, 0x67FB, 0x96CC, 0x67FC, 0x96CD, 0x67FE, 0x96CE, 0x6801, 0x96CF, 0x6802, 0x96D0, 0x6803, 0x96D1, 0x6804, + 0x96D2, 0x6806, 0x96D3, 0x680D, 0x96D4, 0x6810, 0x96D5, 0x6812, 0x96D6, 0x6814, 0x96D7, 0x6815, 0x96D8, 0x6818, 0x96D9, 0x6819, + 0x96DA, 0x681A, 0x96DB, 0x681B, 0x96DC, 0x681C, 0x96DD, 0x681E, 0x96DE, 0x681F, 0x96DF, 0x6820, 0x96E0, 0x6822, 0x96E1, 0x6823, + 0x96E2, 0x6824, 0x96E3, 0x6825, 0x96E4, 0x6826, 0x96E5, 0x6827, 0x96E6, 0x6828, 0x96E7, 0x682B, 0x96E8, 0x682C, 0x96E9, 0x682D, + 0x96EA, 0x682E, 0x96EB, 0x682F, 0x96EC, 0x6830, 0x96ED, 0x6831, 0x96EE, 0x6834, 0x96EF, 0x6835, 0x96F0, 0x6836, 0x96F1, 0x683A, + 0x96F2, 0x683B, 0x96F3, 0x683F, 0x96F4, 0x6847, 0x96F5, 0x684B, 0x96F6, 0x684D, 0x96F7, 0x684F, 0x96F8, 0x6852, 0x96F9, 0x6856, + 0x96FA, 0x6857, 0x96FB, 0x6858, 0x96FC, 0x6859, 0x96FD, 0x685A, 0x96FE, 0x685B, 0x9740, 0x685C, 0x9741, 0x685D, 0x9742, 0x685E, + 0x9743, 0x685F, 0x9744, 0x686A, 0x9745, 0x686C, 0x9746, 0x686D, 0x9747, 0x686E, 0x9748, 0x686F, 0x9749, 0x6870, 0x974A, 0x6871, + 0x974B, 0x6872, 0x974C, 0x6873, 0x974D, 0x6875, 0x974E, 0x6878, 0x974F, 0x6879, 0x9750, 0x687A, 0x9751, 0x687B, 0x9752, 0x687C, + 0x9753, 0x687D, 0x9754, 0x687E, 0x9755, 0x687F, 0x9756, 0x6880, 0x9757, 0x6882, 0x9758, 0x6884, 0x9759, 0x6887, 0x975A, 0x6888, + 0x975B, 0x6889, 0x975C, 0x688A, 0x975D, 0x688B, 0x975E, 0x688C, 0x975F, 0x688D, 0x9760, 0x688E, 0x9761, 0x6890, 0x9762, 0x6891, + 0x9763, 0x6892, 0x9764, 0x6894, 0x9765, 0x6895, 0x9766, 0x6896, 0x9767, 0x6898, 0x9768, 0x6899, 0x9769, 0x689A, 0x976A, 0x689B, + 0x976B, 0x689C, 0x976C, 0x689D, 0x976D, 0x689E, 0x976E, 0x689F, 0x976F, 0x68A0, 0x9770, 0x68A1, 0x9771, 0x68A3, 0x9772, 0x68A4, + 0x9773, 0x68A5, 0x9774, 0x68A9, 0x9775, 0x68AA, 0x9776, 0x68AB, 0x9777, 0x68AC, 0x9778, 0x68AE, 0x9779, 0x68B1, 0x977A, 0x68B2, + 0x977B, 0x68B4, 0x977C, 0x68B6, 0x977D, 0x68B7, 0x977E, 0x68B8, 0x9780, 0x68B9, 0x9781, 0x68BA, 0x9782, 0x68BB, 0x9783, 0x68BC, + 0x9784, 0x68BD, 0x9785, 0x68BE, 0x9786, 0x68BF, 0x9787, 0x68C1, 0x9788, 0x68C3, 0x9789, 0x68C4, 0x978A, 0x68C5, 0x978B, 0x68C6, + 0x978C, 0x68C7, 0x978D, 0x68C8, 0x978E, 0x68CA, 0x978F, 0x68CC, 0x9790, 0x68CE, 0x9791, 0x68CF, 0x9792, 0x68D0, 0x9793, 0x68D1, + 0x9794, 0x68D3, 0x9795, 0x68D4, 0x9796, 0x68D6, 0x9797, 0x68D7, 0x9798, 0x68D9, 0x9799, 0x68DB, 0x979A, 0x68DC, 0x979B, 0x68DD, + 0x979C, 0x68DE, 0x979D, 0x68DF, 0x979E, 0x68E1, 0x979F, 0x68E2, 0x97A0, 0x68E4, 0x97A1, 0x68E5, 0x97A2, 0x68E6, 0x97A3, 0x68E7, + 0x97A4, 0x68E8, 0x97A5, 0x68E9, 0x97A6, 0x68EA, 0x97A7, 0x68EB, 0x97A8, 0x68EC, 0x97A9, 0x68ED, 0x97AA, 0x68EF, 0x97AB, 0x68F2, + 0x97AC, 0x68F3, 0x97AD, 0x68F4, 0x97AE, 0x68F6, 0x97AF, 0x68F7, 0x97B0, 0x68F8, 0x97B1, 0x68FB, 0x97B2, 0x68FD, 0x97B3, 0x68FE, + 0x97B4, 0x68FF, 0x97B5, 0x6900, 0x97B6, 0x6902, 0x97B7, 0x6903, 0x97B8, 0x6904, 0x97B9, 0x6906, 0x97BA, 0x6907, 0x97BB, 0x6908, + 0x97BC, 0x6909, 0x97BD, 0x690A, 0x97BE, 0x690C, 0x97BF, 0x690F, 0x97C0, 0x6911, 0x97C1, 0x6913, 0x97C2, 0x6914, 0x97C3, 0x6915, + 0x97C4, 0x6916, 0x97C5, 0x6917, 0x97C6, 0x6918, 0x97C7, 0x6919, 0x97C8, 0x691A, 0x97C9, 0x691B, 0x97CA, 0x691C, 0x97CB, 0x691D, + 0x97CC, 0x691E, 0x97CD, 0x6921, 0x97CE, 0x6922, 0x97CF, 0x6923, 0x97D0, 0x6925, 0x97D1, 0x6926, 0x97D2, 0x6927, 0x97D3, 0x6928, + 0x97D4, 0x6929, 0x97D5, 0x692A, 0x97D6, 0x692B, 0x97D7, 0x692C, 0x97D8, 0x692E, 0x97D9, 0x692F, 0x97DA, 0x6931, 0x97DB, 0x6932, + 0x97DC, 0x6933, 0x97DD, 0x6935, 0x97DE, 0x6936, 0x97DF, 0x6937, 0x97E0, 0x6938, 0x97E1, 0x693A, 0x97E2, 0x693B, 0x97E3, 0x693C, + 0x97E4, 0x693E, 0x97E5, 0x6940, 0x97E6, 0x6941, 0x97E7, 0x6943, 0x97E8, 0x6944, 0x97E9, 0x6945, 0x97EA, 0x6946, 0x97EB, 0x6947, + 0x97EC, 0x6948, 0x97ED, 0x6949, 0x97EE, 0x694A, 0x97EF, 0x694B, 0x97F0, 0x694C, 0x97F1, 0x694D, 0x97F2, 0x694E, 0x97F3, 0x694F, + 0x97F4, 0x6950, 0x97F5, 0x6951, 0x97F6, 0x6952, 0x97F7, 0x6953, 0x97F8, 0x6955, 0x97F9, 0x6956, 0x97FA, 0x6958, 0x97FB, 0x6959, + 0x97FC, 0x695B, 0x97FD, 0x695C, 0x97FE, 0x695F, 0x9840, 0x6961, 0x9841, 0x6962, 0x9842, 0x6964, 0x9843, 0x6965, 0x9844, 0x6967, + 0x9845, 0x6968, 0x9846, 0x6969, 0x9847, 0x696A, 0x9848, 0x696C, 0x9849, 0x696D, 0x984A, 0x696F, 0x984B, 0x6970, 0x984C, 0x6972, + 0x984D, 0x6973, 0x984E, 0x6974, 0x984F, 0x6975, 0x9850, 0x6976, 0x9851, 0x697A, 0x9852, 0x697B, 0x9853, 0x697D, 0x9854, 0x697E, + 0x9855, 0x697F, 0x9856, 0x6981, 0x9857, 0x6983, 0x9858, 0x6985, 0x9859, 0x698A, 0x985A, 0x698B, 0x985B, 0x698C, 0x985C, 0x698E, + 0x985D, 0x698F, 0x985E, 0x6990, 0x985F, 0x6991, 0x9860, 0x6992, 0x9861, 0x6993, 0x9862, 0x6996, 0x9863, 0x6997, 0x9864, 0x6999, + 0x9865, 0x699A, 0x9866, 0x699D, 0x9867, 0x699E, 0x9868, 0x699F, 0x9869, 0x69A0, 0x986A, 0x69A1, 0x986B, 0x69A2, 0x986C, 0x69A3, + 0x986D, 0x69A4, 0x986E, 0x69A5, 0x986F, 0x69A6, 0x9870, 0x69A9, 0x9871, 0x69AA, 0x9872, 0x69AC, 0x9873, 0x69AE, 0x9874, 0x69AF, + 0x9875, 0x69B0, 0x9876, 0x69B2, 0x9877, 0x69B3, 0x9878, 0x69B5, 0x9879, 0x69B6, 0x987A, 0x69B8, 0x987B, 0x69B9, 0x987C, 0x69BA, + 0x987D, 0x69BC, 0x987E, 0x69BD, 0x9880, 0x69BE, 0x9881, 0x69BF, 0x9882, 0x69C0, 0x9883, 0x69C2, 0x9884, 0x69C3, 0x9885, 0x69C4, + 0x9886, 0x69C5, 0x9887, 0x69C6, 0x9888, 0x69C7, 0x9889, 0x69C8, 0x988A, 0x69C9, 0x988B, 0x69CB, 0x988C, 0x69CD, 0x988D, 0x69CF, + 0x988E, 0x69D1, 0x988F, 0x69D2, 0x9890, 0x69D3, 0x9891, 0x69D5, 0x9892, 0x69D6, 0x9893, 0x69D7, 0x9894, 0x69D8, 0x9895, 0x69D9, + 0x9896, 0x69DA, 0x9897, 0x69DC, 0x9898, 0x69DD, 0x9899, 0x69DE, 0x989A, 0x69E1, 0x989B, 0x69E2, 0x989C, 0x69E3, 0x989D, 0x69E4, + 0x989E, 0x69E5, 0x989F, 0x69E6, 0x98A0, 0x69E7, 0x98A1, 0x69E8, 0x98A2, 0x69E9, 0x98A3, 0x69EA, 0x98A4, 0x69EB, 0x98A5, 0x69EC, + 0x98A6, 0x69EE, 0x98A7, 0x69EF, 0x98A8, 0x69F0, 0x98A9, 0x69F1, 0x98AA, 0x69F3, 0x98AB, 0x69F4, 0x98AC, 0x69F5, 0x98AD, 0x69F6, + 0x98AE, 0x69F7, 0x98AF, 0x69F8, 0x98B0, 0x69F9, 0x98B1, 0x69FA, 0x98B2, 0x69FB, 0x98B3, 0x69FC, 0x98B4, 0x69FE, 0x98B5, 0x6A00, + 0x98B6, 0x6A01, 0x98B7, 0x6A02, 0x98B8, 0x6A03, 0x98B9, 0x6A04, 0x98BA, 0x6A05, 0x98BB, 0x6A06, 0x98BC, 0x6A07, 0x98BD, 0x6A08, + 0x98BE, 0x6A09, 0x98BF, 0x6A0B, 0x98C0, 0x6A0C, 0x98C1, 0x6A0D, 0x98C2, 0x6A0E, 0x98C3, 0x6A0F, 0x98C4, 0x6A10, 0x98C5, 0x6A11, + 0x98C6, 0x6A12, 0x98C7, 0x6A13, 0x98C8, 0x6A14, 0x98C9, 0x6A15, 0x98CA, 0x6A16, 0x98CB, 0x6A19, 0x98CC, 0x6A1A, 0x98CD, 0x6A1B, + 0x98CE, 0x6A1C, 0x98CF, 0x6A1D, 0x98D0, 0x6A1E, 0x98D1, 0x6A20, 0x98D2, 0x6A22, 0x98D3, 0x6A23, 0x98D4, 0x6A24, 0x98D5, 0x6A25, + 0x98D6, 0x6A26, 0x98D7, 0x6A27, 0x98D8, 0x6A29, 0x98D9, 0x6A2B, 0x98DA, 0x6A2C, 0x98DB, 0x6A2D, 0x98DC, 0x6A2E, 0x98DD, 0x6A30, + 0x98DE, 0x6A32, 0x98DF, 0x6A33, 0x98E0, 0x6A34, 0x98E1, 0x6A36, 0x98E2, 0x6A37, 0x98E3, 0x6A38, 0x98E4, 0x6A39, 0x98E5, 0x6A3A, + 0x98E6, 0x6A3B, 0x98E7, 0x6A3C, 0x98E8, 0x6A3F, 0x98E9, 0x6A40, 0x98EA, 0x6A41, 0x98EB, 0x6A42, 0x98EC, 0x6A43, 0x98ED, 0x6A45, + 0x98EE, 0x6A46, 0x98EF, 0x6A48, 0x98F0, 0x6A49, 0x98F1, 0x6A4A, 0x98F2, 0x6A4B, 0x98F3, 0x6A4C, 0x98F4, 0x6A4D, 0x98F5, 0x6A4E, + 0x98F6, 0x6A4F, 0x98F7, 0x6A51, 0x98F8, 0x6A52, 0x98F9, 0x6A53, 0x98FA, 0x6A54, 0x98FB, 0x6A55, 0x98FC, 0x6A56, 0x98FD, 0x6A57, + 0x98FE, 0x6A5A, 0x9940, 0x6A5C, 0x9941, 0x6A5D, 0x9942, 0x6A5E, 0x9943, 0x6A5F, 0x9944, 0x6A60, 0x9945, 0x6A62, 0x9946, 0x6A63, + 0x9947, 0x6A64, 0x9948, 0x6A66, 0x9949, 0x6A67, 0x994A, 0x6A68, 0x994B, 0x6A69, 0x994C, 0x6A6A, 0x994D, 0x6A6B, 0x994E, 0x6A6C, + 0x994F, 0x6A6D, 0x9950, 0x6A6E, 0x9951, 0x6A6F, 0x9952, 0x6A70, 0x9953, 0x6A72, 0x9954, 0x6A73, 0x9955, 0x6A74, 0x9956, 0x6A75, + 0x9957, 0x6A76, 0x9958, 0x6A77, 0x9959, 0x6A78, 0x995A, 0x6A7A, 0x995B, 0x6A7B, 0x995C, 0x6A7D, 0x995D, 0x6A7E, 0x995E, 0x6A7F, + 0x995F, 0x6A81, 0x9960, 0x6A82, 0x9961, 0x6A83, 0x9962, 0x6A85, 0x9963, 0x6A86, 0x9964, 0x6A87, 0x9965, 0x6A88, 0x9966, 0x6A89, + 0x9967, 0x6A8A, 0x9968, 0x6A8B, 0x9969, 0x6A8C, 0x996A, 0x6A8D, 0x996B, 0x6A8F, 0x996C, 0x6A92, 0x996D, 0x6A93, 0x996E, 0x6A94, + 0x996F, 0x6A95, 0x9970, 0x6A96, 0x9971, 0x6A98, 0x9972, 0x6A99, 0x9973, 0x6A9A, 0x9974, 0x6A9B, 0x9975, 0x6A9C, 0x9976, 0x6A9D, + 0x9977, 0x6A9E, 0x9978, 0x6A9F, 0x9979, 0x6AA1, 0x997A, 0x6AA2, 0x997B, 0x6AA3, 0x997C, 0x6AA4, 0x997D, 0x6AA5, 0x997E, 0x6AA6, + 0x9980, 0x6AA7, 0x9981, 0x6AA8, 0x9982, 0x6AAA, 0x9983, 0x6AAD, 0x9984, 0x6AAE, 0x9985, 0x6AAF, 0x9986, 0x6AB0, 0x9987, 0x6AB1, + 0x9988, 0x6AB2, 0x9989, 0x6AB3, 0x998A, 0x6AB4, 0x998B, 0x6AB5, 0x998C, 0x6AB6, 0x998D, 0x6AB7, 0x998E, 0x6AB8, 0x998F, 0x6AB9, + 0x9990, 0x6ABA, 0x9991, 0x6ABB, 0x9992, 0x6ABC, 0x9993, 0x6ABD, 0x9994, 0x6ABE, 0x9995, 0x6ABF, 0x9996, 0x6AC0, 0x9997, 0x6AC1, + 0x9998, 0x6AC2, 0x9999, 0x6AC3, 0x999A, 0x6AC4, 0x999B, 0x6AC5, 0x999C, 0x6AC6, 0x999D, 0x6AC7, 0x999E, 0x6AC8, 0x999F, 0x6AC9, + 0x99A0, 0x6ACA, 0x99A1, 0x6ACB, 0x99A2, 0x6ACC, 0x99A3, 0x6ACD, 0x99A4, 0x6ACE, 0x99A5, 0x6ACF, 0x99A6, 0x6AD0, 0x99A7, 0x6AD1, + 0x99A8, 0x6AD2, 0x99A9, 0x6AD3, 0x99AA, 0x6AD4, 0x99AB, 0x6AD5, 0x99AC, 0x6AD6, 0x99AD, 0x6AD7, 0x99AE, 0x6AD8, 0x99AF, 0x6AD9, + 0x99B0, 0x6ADA, 0x99B1, 0x6ADB, 0x99B2, 0x6ADC, 0x99B3, 0x6ADD, 0x99B4, 0x6ADE, 0x99B5, 0x6ADF, 0x99B6, 0x6AE0, 0x99B7, 0x6AE1, + 0x99B8, 0x6AE2, 0x99B9, 0x6AE3, 0x99BA, 0x6AE4, 0x99BB, 0x6AE5, 0x99BC, 0x6AE6, 0x99BD, 0x6AE7, 0x99BE, 0x6AE8, 0x99BF, 0x6AE9, + 0x99C0, 0x6AEA, 0x99C1, 0x6AEB, 0x99C2, 0x6AEC, 0x99C3, 0x6AED, 0x99C4, 0x6AEE, 0x99C5, 0x6AEF, 0x99C6, 0x6AF0, 0x99C7, 0x6AF1, + 0x99C8, 0x6AF2, 0x99C9, 0x6AF3, 0x99CA, 0x6AF4, 0x99CB, 0x6AF5, 0x99CC, 0x6AF6, 0x99CD, 0x6AF7, 0x99CE, 0x6AF8, 0x99CF, 0x6AF9, + 0x99D0, 0x6AFA, 0x99D1, 0x6AFB, 0x99D2, 0x6AFC, 0x99D3, 0x6AFD, 0x99D4, 0x6AFE, 0x99D5, 0x6AFF, 0x99D6, 0x6B00, 0x99D7, 0x6B01, + 0x99D8, 0x6B02, 0x99D9, 0x6B03, 0x99DA, 0x6B04, 0x99DB, 0x6B05, 0x99DC, 0x6B06, 0x99DD, 0x6B07, 0x99DE, 0x6B08, 0x99DF, 0x6B09, + 0x99E0, 0x6B0A, 0x99E1, 0x6B0B, 0x99E2, 0x6B0C, 0x99E3, 0x6B0D, 0x99E4, 0x6B0E, 0x99E5, 0x6B0F, 0x99E6, 0x6B10, 0x99E7, 0x6B11, + 0x99E8, 0x6B12, 0x99E9, 0x6B13, 0x99EA, 0x6B14, 0x99EB, 0x6B15, 0x99EC, 0x6B16, 0x99ED, 0x6B17, 0x99EE, 0x6B18, 0x99EF, 0x6B19, + 0x99F0, 0x6B1A, 0x99F1, 0x6B1B, 0x99F2, 0x6B1C, 0x99F3, 0x6B1D, 0x99F4, 0x6B1E, 0x99F5, 0x6B1F, 0x99F6, 0x6B25, 0x99F7, 0x6B26, + 0x99F8, 0x6B28, 0x99F9, 0x6B29, 0x99FA, 0x6B2A, 0x99FB, 0x6B2B, 0x99FC, 0x6B2C, 0x99FD, 0x6B2D, 0x99FE, 0x6B2E, 0x9A40, 0x6B2F, + 0x9A41, 0x6B30, 0x9A42, 0x6B31, 0x9A43, 0x6B33, 0x9A44, 0x6B34, 0x9A45, 0x6B35, 0x9A46, 0x6B36, 0x9A47, 0x6B38, 0x9A48, 0x6B3B, + 0x9A49, 0x6B3C, 0x9A4A, 0x6B3D, 0x9A4B, 0x6B3F, 0x9A4C, 0x6B40, 0x9A4D, 0x6B41, 0x9A4E, 0x6B42, 0x9A4F, 0x6B44, 0x9A50, 0x6B45, + 0x9A51, 0x6B48, 0x9A52, 0x6B4A, 0x9A53, 0x6B4B, 0x9A54, 0x6B4D, 0x9A55, 0x6B4E, 0x9A56, 0x6B4F, 0x9A57, 0x6B50, 0x9A58, 0x6B51, + 0x9A59, 0x6B52, 0x9A5A, 0x6B53, 0x9A5B, 0x6B54, 0x9A5C, 0x6B55, 0x9A5D, 0x6B56, 0x9A5E, 0x6B57, 0x9A5F, 0x6B58, 0x9A60, 0x6B5A, + 0x9A61, 0x6B5B, 0x9A62, 0x6B5C, 0x9A63, 0x6B5D, 0x9A64, 0x6B5E, 0x9A65, 0x6B5F, 0x9A66, 0x6B60, 0x9A67, 0x6B61, 0x9A68, 0x6B68, + 0x9A69, 0x6B69, 0x9A6A, 0x6B6B, 0x9A6B, 0x6B6C, 0x9A6C, 0x6B6D, 0x9A6D, 0x6B6E, 0x9A6E, 0x6B6F, 0x9A6F, 0x6B70, 0x9A70, 0x6B71, + 0x9A71, 0x6B72, 0x9A72, 0x6B73, 0x9A73, 0x6B74, 0x9A74, 0x6B75, 0x9A75, 0x6B76, 0x9A76, 0x6B77, 0x9A77, 0x6B78, 0x9A78, 0x6B7A, + 0x9A79, 0x6B7D, 0x9A7A, 0x6B7E, 0x9A7B, 0x6B7F, 0x9A7C, 0x6B80, 0x9A7D, 0x6B85, 0x9A7E, 0x6B88, 0x9A80, 0x6B8C, 0x9A81, 0x6B8E, + 0x9A82, 0x6B8F, 0x9A83, 0x6B90, 0x9A84, 0x6B91, 0x9A85, 0x6B94, 0x9A86, 0x6B95, 0x9A87, 0x6B97, 0x9A88, 0x6B98, 0x9A89, 0x6B99, + 0x9A8A, 0x6B9C, 0x9A8B, 0x6B9D, 0x9A8C, 0x6B9E, 0x9A8D, 0x6B9F, 0x9A8E, 0x6BA0, 0x9A8F, 0x6BA2, 0x9A90, 0x6BA3, 0x9A91, 0x6BA4, + 0x9A92, 0x6BA5, 0x9A93, 0x6BA6, 0x9A94, 0x6BA7, 0x9A95, 0x6BA8, 0x9A96, 0x6BA9, 0x9A97, 0x6BAB, 0x9A98, 0x6BAC, 0x9A99, 0x6BAD, + 0x9A9A, 0x6BAE, 0x9A9B, 0x6BAF, 0x9A9C, 0x6BB0, 0x9A9D, 0x6BB1, 0x9A9E, 0x6BB2, 0x9A9F, 0x6BB6, 0x9AA0, 0x6BB8, 0x9AA1, 0x6BB9, + 0x9AA2, 0x6BBA, 0x9AA3, 0x6BBB, 0x9AA4, 0x6BBC, 0x9AA5, 0x6BBD, 0x9AA6, 0x6BBE, 0x9AA7, 0x6BC0, 0x9AA8, 0x6BC3, 0x9AA9, 0x6BC4, + 0x9AAA, 0x6BC6, 0x9AAB, 0x6BC7, 0x9AAC, 0x6BC8, 0x9AAD, 0x6BC9, 0x9AAE, 0x6BCA, 0x9AAF, 0x6BCC, 0x9AB0, 0x6BCE, 0x9AB1, 0x6BD0, + 0x9AB2, 0x6BD1, 0x9AB3, 0x6BD8, 0x9AB4, 0x6BDA, 0x9AB5, 0x6BDC, 0x9AB6, 0x6BDD, 0x9AB7, 0x6BDE, 0x9AB8, 0x6BDF, 0x9AB9, 0x6BE0, + 0x9ABA, 0x6BE2, 0x9ABB, 0x6BE3, 0x9ABC, 0x6BE4, 0x9ABD, 0x6BE5, 0x9ABE, 0x6BE6, 0x9ABF, 0x6BE7, 0x9AC0, 0x6BE8, 0x9AC1, 0x6BE9, + 0x9AC2, 0x6BEC, 0x9AC3, 0x6BED, 0x9AC4, 0x6BEE, 0x9AC5, 0x6BF0, 0x9AC6, 0x6BF1, 0x9AC7, 0x6BF2, 0x9AC8, 0x6BF4, 0x9AC9, 0x6BF6, + 0x9ACA, 0x6BF7, 0x9ACB, 0x6BF8, 0x9ACC, 0x6BFA, 0x9ACD, 0x6BFB, 0x9ACE, 0x6BFC, 0x9ACF, 0x6BFE, 0x9AD0, 0x6BFF, 0x9AD1, 0x6C00, + 0x9AD2, 0x6C01, 0x9AD3, 0x6C02, 0x9AD4, 0x6C03, 0x9AD5, 0x6C04, 0x9AD6, 0x6C08, 0x9AD7, 0x6C09, 0x9AD8, 0x6C0A, 0x9AD9, 0x6C0B, + 0x9ADA, 0x6C0C, 0x9ADB, 0x6C0E, 0x9ADC, 0x6C12, 0x9ADD, 0x6C17, 0x9ADE, 0x6C1C, 0x9ADF, 0x6C1D, 0x9AE0, 0x6C1E, 0x9AE1, 0x6C20, + 0x9AE2, 0x6C23, 0x9AE3, 0x6C25, 0x9AE4, 0x6C2B, 0x9AE5, 0x6C2C, 0x9AE6, 0x6C2D, 0x9AE7, 0x6C31, 0x9AE8, 0x6C33, 0x9AE9, 0x6C36, + 0x9AEA, 0x6C37, 0x9AEB, 0x6C39, 0x9AEC, 0x6C3A, 0x9AED, 0x6C3B, 0x9AEE, 0x6C3C, 0x9AEF, 0x6C3E, 0x9AF0, 0x6C3F, 0x9AF1, 0x6C43, + 0x9AF2, 0x6C44, 0x9AF3, 0x6C45, 0x9AF4, 0x6C48, 0x9AF5, 0x6C4B, 0x9AF6, 0x6C4C, 0x9AF7, 0x6C4D, 0x9AF8, 0x6C4E, 0x9AF9, 0x6C4F, + 0x9AFA, 0x6C51, 0x9AFB, 0x6C52, 0x9AFC, 0x6C53, 0x9AFD, 0x6C56, 0x9AFE, 0x6C58, 0x9B40, 0x6C59, 0x9B41, 0x6C5A, 0x9B42, 0x6C62, + 0x9B43, 0x6C63, 0x9B44, 0x6C65, 0x9B45, 0x6C66, 0x9B46, 0x6C67, 0x9B47, 0x6C6B, 0x9B48, 0x6C6C, 0x9B49, 0x6C6D, 0x9B4A, 0x6C6E, + 0x9B4B, 0x6C6F, 0x9B4C, 0x6C71, 0x9B4D, 0x6C73, 0x9B4E, 0x6C75, 0x9B4F, 0x6C77, 0x9B50, 0x6C78, 0x9B51, 0x6C7A, 0x9B52, 0x6C7B, + 0x9B53, 0x6C7C, 0x9B54, 0x6C7F, 0x9B55, 0x6C80, 0x9B56, 0x6C84, 0x9B57, 0x6C87, 0x9B58, 0x6C8A, 0x9B59, 0x6C8B, 0x9B5A, 0x6C8D, + 0x9B5B, 0x6C8E, 0x9B5C, 0x6C91, 0x9B5D, 0x6C92, 0x9B5E, 0x6C95, 0x9B5F, 0x6C96, 0x9B60, 0x6C97, 0x9B61, 0x6C98, 0x9B62, 0x6C9A, + 0x9B63, 0x6C9C, 0x9B64, 0x6C9D, 0x9B65, 0x6C9E, 0x9B66, 0x6CA0, 0x9B67, 0x6CA2, 0x9B68, 0x6CA8, 0x9B69, 0x6CAC, 0x9B6A, 0x6CAF, + 0x9B6B, 0x6CB0, 0x9B6C, 0x6CB4, 0x9B6D, 0x6CB5, 0x9B6E, 0x6CB6, 0x9B6F, 0x6CB7, 0x9B70, 0x6CBA, 0x9B71, 0x6CC0, 0x9B72, 0x6CC1, + 0x9B73, 0x6CC2, 0x9B74, 0x6CC3, 0x9B75, 0x6CC6, 0x9B76, 0x6CC7, 0x9B77, 0x6CC8, 0x9B78, 0x6CCB, 0x9B79, 0x6CCD, 0x9B7A, 0x6CCE, + 0x9B7B, 0x6CCF, 0x9B7C, 0x6CD1, 0x9B7D, 0x6CD2, 0x9B7E, 0x6CD8, 0x9B80, 0x6CD9, 0x9B81, 0x6CDA, 0x9B82, 0x6CDC, 0x9B83, 0x6CDD, + 0x9B84, 0x6CDF, 0x9B85, 0x6CE4, 0x9B86, 0x6CE6, 0x9B87, 0x6CE7, 0x9B88, 0x6CE9, 0x9B89, 0x6CEC, 0x9B8A, 0x6CED, 0x9B8B, 0x6CF2, + 0x9B8C, 0x6CF4, 0x9B8D, 0x6CF9, 0x9B8E, 0x6CFF, 0x9B8F, 0x6D00, 0x9B90, 0x6D02, 0x9B91, 0x6D03, 0x9B92, 0x6D05, 0x9B93, 0x6D06, + 0x9B94, 0x6D08, 0x9B95, 0x6D09, 0x9B96, 0x6D0A, 0x9B97, 0x6D0D, 0x9B98, 0x6D0F, 0x9B99, 0x6D10, 0x9B9A, 0x6D11, 0x9B9B, 0x6D13, + 0x9B9C, 0x6D14, 0x9B9D, 0x6D15, 0x9B9E, 0x6D16, 0x9B9F, 0x6D18, 0x9BA0, 0x6D1C, 0x9BA1, 0x6D1D, 0x9BA2, 0x6D1F, 0x9BA3, 0x6D20, + 0x9BA4, 0x6D21, 0x9BA5, 0x6D22, 0x9BA6, 0x6D23, 0x9BA7, 0x6D24, 0x9BA8, 0x6D26, 0x9BA9, 0x6D28, 0x9BAA, 0x6D29, 0x9BAB, 0x6D2C, + 0x9BAC, 0x6D2D, 0x9BAD, 0x6D2F, 0x9BAE, 0x6D30, 0x9BAF, 0x6D34, 0x9BB0, 0x6D36, 0x9BB1, 0x6D37, 0x9BB2, 0x6D38, 0x9BB3, 0x6D3A, + 0x9BB4, 0x6D3F, 0x9BB5, 0x6D40, 0x9BB6, 0x6D42, 0x9BB7, 0x6D44, 0x9BB8, 0x6D49, 0x9BB9, 0x6D4C, 0x9BBA, 0x6D50, 0x9BBB, 0x6D55, + 0x9BBC, 0x6D56, 0x9BBD, 0x6D57, 0x9BBE, 0x6D58, 0x9BBF, 0x6D5B, 0x9BC0, 0x6D5D, 0x9BC1, 0x6D5F, 0x9BC2, 0x6D61, 0x9BC3, 0x6D62, + 0x9BC4, 0x6D64, 0x9BC5, 0x6D65, 0x9BC6, 0x6D67, 0x9BC7, 0x6D68, 0x9BC8, 0x6D6B, 0x9BC9, 0x6D6C, 0x9BCA, 0x6D6D, 0x9BCB, 0x6D70, + 0x9BCC, 0x6D71, 0x9BCD, 0x6D72, 0x9BCE, 0x6D73, 0x9BCF, 0x6D75, 0x9BD0, 0x6D76, 0x9BD1, 0x6D79, 0x9BD2, 0x6D7A, 0x9BD3, 0x6D7B, + 0x9BD4, 0x6D7D, 0x9BD5, 0x6D7E, 0x9BD6, 0x6D7F, 0x9BD7, 0x6D80, 0x9BD8, 0x6D81, 0x9BD9, 0x6D83, 0x9BDA, 0x6D84, 0x9BDB, 0x6D86, + 0x9BDC, 0x6D87, 0x9BDD, 0x6D8A, 0x9BDE, 0x6D8B, 0x9BDF, 0x6D8D, 0x9BE0, 0x6D8F, 0x9BE1, 0x6D90, 0x9BE2, 0x6D92, 0x9BE3, 0x6D96, + 0x9BE4, 0x6D97, 0x9BE5, 0x6D98, 0x9BE6, 0x6D99, 0x9BE7, 0x6D9A, 0x9BE8, 0x6D9C, 0x9BE9, 0x6DA2, 0x9BEA, 0x6DA5, 0x9BEB, 0x6DAC, + 0x9BEC, 0x6DAD, 0x9BED, 0x6DB0, 0x9BEE, 0x6DB1, 0x9BEF, 0x6DB3, 0x9BF0, 0x6DB4, 0x9BF1, 0x6DB6, 0x9BF2, 0x6DB7, 0x9BF3, 0x6DB9, + 0x9BF4, 0x6DBA, 0x9BF5, 0x6DBB, 0x9BF6, 0x6DBC, 0x9BF7, 0x6DBD, 0x9BF8, 0x6DBE, 0x9BF9, 0x6DC1, 0x9BFA, 0x6DC2, 0x9BFB, 0x6DC3, + 0x9BFC, 0x6DC8, 0x9BFD, 0x6DC9, 0x9BFE, 0x6DCA, 0x9C40, 0x6DCD, 0x9C41, 0x6DCE, 0x9C42, 0x6DCF, 0x9C43, 0x6DD0, 0x9C44, 0x6DD2, + 0x9C45, 0x6DD3, 0x9C46, 0x6DD4, 0x9C47, 0x6DD5, 0x9C48, 0x6DD7, 0x9C49, 0x6DDA, 0x9C4A, 0x6DDB, 0x9C4B, 0x6DDC, 0x9C4C, 0x6DDF, + 0x9C4D, 0x6DE2, 0x9C4E, 0x6DE3, 0x9C4F, 0x6DE5, 0x9C50, 0x6DE7, 0x9C51, 0x6DE8, 0x9C52, 0x6DE9, 0x9C53, 0x6DEA, 0x9C54, 0x6DED, + 0x9C55, 0x6DEF, 0x9C56, 0x6DF0, 0x9C57, 0x6DF2, 0x9C58, 0x6DF4, 0x9C59, 0x6DF5, 0x9C5A, 0x6DF6, 0x9C5B, 0x6DF8, 0x9C5C, 0x6DFA, + 0x9C5D, 0x6DFD, 0x9C5E, 0x6DFE, 0x9C5F, 0x6DFF, 0x9C60, 0x6E00, 0x9C61, 0x6E01, 0x9C62, 0x6E02, 0x9C63, 0x6E03, 0x9C64, 0x6E04, + 0x9C65, 0x6E06, 0x9C66, 0x6E07, 0x9C67, 0x6E08, 0x9C68, 0x6E09, 0x9C69, 0x6E0B, 0x9C6A, 0x6E0F, 0x9C6B, 0x6E12, 0x9C6C, 0x6E13, + 0x9C6D, 0x6E15, 0x9C6E, 0x6E18, 0x9C6F, 0x6E19, 0x9C70, 0x6E1B, 0x9C71, 0x6E1C, 0x9C72, 0x6E1E, 0x9C73, 0x6E1F, 0x9C74, 0x6E22, + 0x9C75, 0x6E26, 0x9C76, 0x6E27, 0x9C77, 0x6E28, 0x9C78, 0x6E2A, 0x9C79, 0x6E2C, 0x9C7A, 0x6E2E, 0x9C7B, 0x6E30, 0x9C7C, 0x6E31, + 0x9C7D, 0x6E33, 0x9C7E, 0x6E35, 0x9C80, 0x6E36, 0x9C81, 0x6E37, 0x9C82, 0x6E39, 0x9C83, 0x6E3B, 0x9C84, 0x6E3C, 0x9C85, 0x6E3D, + 0x9C86, 0x6E3E, 0x9C87, 0x6E3F, 0x9C88, 0x6E40, 0x9C89, 0x6E41, 0x9C8A, 0x6E42, 0x9C8B, 0x6E45, 0x9C8C, 0x6E46, 0x9C8D, 0x6E47, + 0x9C8E, 0x6E48, 0x9C8F, 0x6E49, 0x9C90, 0x6E4A, 0x9C91, 0x6E4B, 0x9C92, 0x6E4C, 0x9C93, 0x6E4F, 0x9C94, 0x6E50, 0x9C95, 0x6E51, + 0x9C96, 0x6E52, 0x9C97, 0x6E55, 0x9C98, 0x6E57, 0x9C99, 0x6E59, 0x9C9A, 0x6E5A, 0x9C9B, 0x6E5C, 0x9C9C, 0x6E5D, 0x9C9D, 0x6E5E, + 0x9C9E, 0x6E60, 0x9C9F, 0x6E61, 0x9CA0, 0x6E62, 0x9CA1, 0x6E63, 0x9CA2, 0x6E64, 0x9CA3, 0x6E65, 0x9CA4, 0x6E66, 0x9CA5, 0x6E67, + 0x9CA6, 0x6E68, 0x9CA7, 0x6E69, 0x9CA8, 0x6E6A, 0x9CA9, 0x6E6C, 0x9CAA, 0x6E6D, 0x9CAB, 0x6E6F, 0x9CAC, 0x6E70, 0x9CAD, 0x6E71, + 0x9CAE, 0x6E72, 0x9CAF, 0x6E73, 0x9CB0, 0x6E74, 0x9CB1, 0x6E75, 0x9CB2, 0x6E76, 0x9CB3, 0x6E77, 0x9CB4, 0x6E78, 0x9CB5, 0x6E79, + 0x9CB6, 0x6E7A, 0x9CB7, 0x6E7B, 0x9CB8, 0x6E7C, 0x9CB9, 0x6E7D, 0x9CBA, 0x6E80, 0x9CBB, 0x6E81, 0x9CBC, 0x6E82, 0x9CBD, 0x6E84, + 0x9CBE, 0x6E87, 0x9CBF, 0x6E88, 0x9CC0, 0x6E8A, 0x9CC1, 0x6E8B, 0x9CC2, 0x6E8C, 0x9CC3, 0x6E8D, 0x9CC4, 0x6E8E, 0x9CC5, 0x6E91, + 0x9CC6, 0x6E92, 0x9CC7, 0x6E93, 0x9CC8, 0x6E94, 0x9CC9, 0x6E95, 0x9CCA, 0x6E96, 0x9CCB, 0x6E97, 0x9CCC, 0x6E99, 0x9CCD, 0x6E9A, + 0x9CCE, 0x6E9B, 0x9CCF, 0x6E9D, 0x9CD0, 0x6E9E, 0x9CD1, 0x6EA0, 0x9CD2, 0x6EA1, 0x9CD3, 0x6EA3, 0x9CD4, 0x6EA4, 0x9CD5, 0x6EA6, + 0x9CD6, 0x6EA8, 0x9CD7, 0x6EA9, 0x9CD8, 0x6EAB, 0x9CD9, 0x6EAC, 0x9CDA, 0x6EAD, 0x9CDB, 0x6EAE, 0x9CDC, 0x6EB0, 0x9CDD, 0x6EB3, + 0x9CDE, 0x6EB5, 0x9CDF, 0x6EB8, 0x9CE0, 0x6EB9, 0x9CE1, 0x6EBC, 0x9CE2, 0x6EBE, 0x9CE3, 0x6EBF, 0x9CE4, 0x6EC0, 0x9CE5, 0x6EC3, + 0x9CE6, 0x6EC4, 0x9CE7, 0x6EC5, 0x9CE8, 0x6EC6, 0x9CE9, 0x6EC8, 0x9CEA, 0x6EC9, 0x9CEB, 0x6ECA, 0x9CEC, 0x6ECC, 0x9CED, 0x6ECD, + 0x9CEE, 0x6ECE, 0x9CEF, 0x6ED0, 0x9CF0, 0x6ED2, 0x9CF1, 0x6ED6, 0x9CF2, 0x6ED8, 0x9CF3, 0x6ED9, 0x9CF4, 0x6EDB, 0x9CF5, 0x6EDC, + 0x9CF6, 0x6EDD, 0x9CF7, 0x6EE3, 0x9CF8, 0x6EE7, 0x9CF9, 0x6EEA, 0x9CFA, 0x6EEB, 0x9CFB, 0x6EEC, 0x9CFC, 0x6EED, 0x9CFD, 0x6EEE, + 0x9CFE, 0x6EEF, 0x9D40, 0x6EF0, 0x9D41, 0x6EF1, 0x9D42, 0x6EF2, 0x9D43, 0x6EF3, 0x9D44, 0x6EF5, 0x9D45, 0x6EF6, 0x9D46, 0x6EF7, + 0x9D47, 0x6EF8, 0x9D48, 0x6EFA, 0x9D49, 0x6EFB, 0x9D4A, 0x6EFC, 0x9D4B, 0x6EFD, 0x9D4C, 0x6EFE, 0x9D4D, 0x6EFF, 0x9D4E, 0x6F00, + 0x9D4F, 0x6F01, 0x9D50, 0x6F03, 0x9D51, 0x6F04, 0x9D52, 0x6F05, 0x9D53, 0x6F07, 0x9D54, 0x6F08, 0x9D55, 0x6F0A, 0x9D56, 0x6F0B, + 0x9D57, 0x6F0C, 0x9D58, 0x6F0D, 0x9D59, 0x6F0E, 0x9D5A, 0x6F10, 0x9D5B, 0x6F11, 0x9D5C, 0x6F12, 0x9D5D, 0x6F16, 0x9D5E, 0x6F17, + 0x9D5F, 0x6F18, 0x9D60, 0x6F19, 0x9D61, 0x6F1A, 0x9D62, 0x6F1B, 0x9D63, 0x6F1C, 0x9D64, 0x6F1D, 0x9D65, 0x6F1E, 0x9D66, 0x6F1F, + 0x9D67, 0x6F21, 0x9D68, 0x6F22, 0x9D69, 0x6F23, 0x9D6A, 0x6F25, 0x9D6B, 0x6F26, 0x9D6C, 0x6F27, 0x9D6D, 0x6F28, 0x9D6E, 0x6F2C, + 0x9D6F, 0x6F2E, 0x9D70, 0x6F30, 0x9D71, 0x6F32, 0x9D72, 0x6F34, 0x9D73, 0x6F35, 0x9D74, 0x6F37, 0x9D75, 0x6F38, 0x9D76, 0x6F39, + 0x9D77, 0x6F3A, 0x9D78, 0x6F3B, 0x9D79, 0x6F3C, 0x9D7A, 0x6F3D, 0x9D7B, 0x6F3F, 0x9D7C, 0x6F40, 0x9D7D, 0x6F41, 0x9D7E, 0x6F42, + 0x9D80, 0x6F43, 0x9D81, 0x6F44, 0x9D82, 0x6F45, 0x9D83, 0x6F48, 0x9D84, 0x6F49, 0x9D85, 0x6F4A, 0x9D86, 0x6F4C, 0x9D87, 0x6F4E, + 0x9D88, 0x6F4F, 0x9D89, 0x6F50, 0x9D8A, 0x6F51, 0x9D8B, 0x6F52, 0x9D8C, 0x6F53, 0x9D8D, 0x6F54, 0x9D8E, 0x6F55, 0x9D8F, 0x6F56, + 0x9D90, 0x6F57, 0x9D91, 0x6F59, 0x9D92, 0x6F5A, 0x9D93, 0x6F5B, 0x9D94, 0x6F5D, 0x9D95, 0x6F5F, 0x9D96, 0x6F60, 0x9D97, 0x6F61, + 0x9D98, 0x6F63, 0x9D99, 0x6F64, 0x9D9A, 0x6F65, 0x9D9B, 0x6F67, 0x9D9C, 0x6F68, 0x9D9D, 0x6F69, 0x9D9E, 0x6F6A, 0x9D9F, 0x6F6B, + 0x9DA0, 0x6F6C, 0x9DA1, 0x6F6F, 0x9DA2, 0x6F70, 0x9DA3, 0x6F71, 0x9DA4, 0x6F73, 0x9DA5, 0x6F75, 0x9DA6, 0x6F76, 0x9DA7, 0x6F77, + 0x9DA8, 0x6F79, 0x9DA9, 0x6F7B, 0x9DAA, 0x6F7D, 0x9DAB, 0x6F7E, 0x9DAC, 0x6F7F, 0x9DAD, 0x6F80, 0x9DAE, 0x6F81, 0x9DAF, 0x6F82, + 0x9DB0, 0x6F83, 0x9DB1, 0x6F85, 0x9DB2, 0x6F86, 0x9DB3, 0x6F87, 0x9DB4, 0x6F8A, 0x9DB5, 0x6F8B, 0x9DB6, 0x6F8F, 0x9DB7, 0x6F90, + 0x9DB8, 0x6F91, 0x9DB9, 0x6F92, 0x9DBA, 0x6F93, 0x9DBB, 0x6F94, 0x9DBC, 0x6F95, 0x9DBD, 0x6F96, 0x9DBE, 0x6F97, 0x9DBF, 0x6F98, + 0x9DC0, 0x6F99, 0x9DC1, 0x6F9A, 0x9DC2, 0x6F9B, 0x9DC3, 0x6F9D, 0x9DC4, 0x6F9E, 0x9DC5, 0x6F9F, 0x9DC6, 0x6FA0, 0x9DC7, 0x6FA2, + 0x9DC8, 0x6FA3, 0x9DC9, 0x6FA4, 0x9DCA, 0x6FA5, 0x9DCB, 0x6FA6, 0x9DCC, 0x6FA8, 0x9DCD, 0x6FA9, 0x9DCE, 0x6FAA, 0x9DCF, 0x6FAB, + 0x9DD0, 0x6FAC, 0x9DD1, 0x6FAD, 0x9DD2, 0x6FAE, 0x9DD3, 0x6FAF, 0x9DD4, 0x6FB0, 0x9DD5, 0x6FB1, 0x9DD6, 0x6FB2, 0x9DD7, 0x6FB4, + 0x9DD8, 0x6FB5, 0x9DD9, 0x6FB7, 0x9DDA, 0x6FB8, 0x9DDB, 0x6FBA, 0x9DDC, 0x6FBB, 0x9DDD, 0x6FBC, 0x9DDE, 0x6FBD, 0x9DDF, 0x6FBE, + 0x9DE0, 0x6FBF, 0x9DE1, 0x6FC1, 0x9DE2, 0x6FC3, 0x9DE3, 0x6FC4, 0x9DE4, 0x6FC5, 0x9DE5, 0x6FC6, 0x9DE6, 0x6FC7, 0x9DE7, 0x6FC8, + 0x9DE8, 0x6FCA, 0x9DE9, 0x6FCB, 0x9DEA, 0x6FCC, 0x9DEB, 0x6FCD, 0x9DEC, 0x6FCE, 0x9DED, 0x6FCF, 0x9DEE, 0x6FD0, 0x9DEF, 0x6FD3, + 0x9DF0, 0x6FD4, 0x9DF1, 0x6FD5, 0x9DF2, 0x6FD6, 0x9DF3, 0x6FD7, 0x9DF4, 0x6FD8, 0x9DF5, 0x6FD9, 0x9DF6, 0x6FDA, 0x9DF7, 0x6FDB, + 0x9DF8, 0x6FDC, 0x9DF9, 0x6FDD, 0x9DFA, 0x6FDF, 0x9DFB, 0x6FE2, 0x9DFC, 0x6FE3, 0x9DFD, 0x6FE4, 0x9DFE, 0x6FE5, 0x9E40, 0x6FE6, + 0x9E41, 0x6FE7, 0x9E42, 0x6FE8, 0x9E43, 0x6FE9, 0x9E44, 0x6FEA, 0x9E45, 0x6FEB, 0x9E46, 0x6FEC, 0x9E47, 0x6FED, 0x9E48, 0x6FF0, + 0x9E49, 0x6FF1, 0x9E4A, 0x6FF2, 0x9E4B, 0x6FF3, 0x9E4C, 0x6FF4, 0x9E4D, 0x6FF5, 0x9E4E, 0x6FF6, 0x9E4F, 0x6FF7, 0x9E50, 0x6FF8, + 0x9E51, 0x6FF9, 0x9E52, 0x6FFA, 0x9E53, 0x6FFB, 0x9E54, 0x6FFC, 0x9E55, 0x6FFD, 0x9E56, 0x6FFE, 0x9E57, 0x6FFF, 0x9E58, 0x7000, + 0x9E59, 0x7001, 0x9E5A, 0x7002, 0x9E5B, 0x7003, 0x9E5C, 0x7004, 0x9E5D, 0x7005, 0x9E5E, 0x7006, 0x9E5F, 0x7007, 0x9E60, 0x7008, + 0x9E61, 0x7009, 0x9E62, 0x700A, 0x9E63, 0x700B, 0x9E64, 0x700C, 0x9E65, 0x700D, 0x9E66, 0x700E, 0x9E67, 0x700F, 0x9E68, 0x7010, + 0x9E69, 0x7012, 0x9E6A, 0x7013, 0x9E6B, 0x7014, 0x9E6C, 0x7015, 0x9E6D, 0x7016, 0x9E6E, 0x7017, 0x9E6F, 0x7018, 0x9E70, 0x7019, + 0x9E71, 0x701C, 0x9E72, 0x701D, 0x9E73, 0x701E, 0x9E74, 0x701F, 0x9E75, 0x7020, 0x9E76, 0x7021, 0x9E77, 0x7022, 0x9E78, 0x7024, + 0x9E79, 0x7025, 0x9E7A, 0x7026, 0x9E7B, 0x7027, 0x9E7C, 0x7028, 0x9E7D, 0x7029, 0x9E7E, 0x702A, 0x9E80, 0x702B, 0x9E81, 0x702C, + 0x9E82, 0x702D, 0x9E83, 0x702E, 0x9E84, 0x702F, 0x9E85, 0x7030, 0x9E86, 0x7031, 0x9E87, 0x7032, 0x9E88, 0x7033, 0x9E89, 0x7034, + 0x9E8A, 0x7036, 0x9E8B, 0x7037, 0x9E8C, 0x7038, 0x9E8D, 0x703A, 0x9E8E, 0x703B, 0x9E8F, 0x703C, 0x9E90, 0x703D, 0x9E91, 0x703E, + 0x9E92, 0x703F, 0x9E93, 0x7040, 0x9E94, 0x7041, 0x9E95, 0x7042, 0x9E96, 0x7043, 0x9E97, 0x7044, 0x9E98, 0x7045, 0x9E99, 0x7046, + 0x9E9A, 0x7047, 0x9E9B, 0x7048, 0x9E9C, 0x7049, 0x9E9D, 0x704A, 0x9E9E, 0x704B, 0x9E9F, 0x704D, 0x9EA0, 0x704E, 0x9EA1, 0x7050, + 0x9EA2, 0x7051, 0x9EA3, 0x7052, 0x9EA4, 0x7053, 0x9EA5, 0x7054, 0x9EA6, 0x7055, 0x9EA7, 0x7056, 0x9EA8, 0x7057, 0x9EA9, 0x7058, + 0x9EAA, 0x7059, 0x9EAB, 0x705A, 0x9EAC, 0x705B, 0x9EAD, 0x705C, 0x9EAE, 0x705D, 0x9EAF, 0x705F, 0x9EB0, 0x7060, 0x9EB1, 0x7061, + 0x9EB2, 0x7062, 0x9EB3, 0x7063, 0x9EB4, 0x7064, 0x9EB5, 0x7065, 0x9EB6, 0x7066, 0x9EB7, 0x7067, 0x9EB8, 0x7068, 0x9EB9, 0x7069, + 0x9EBA, 0x706A, 0x9EBB, 0x706E, 0x9EBC, 0x7071, 0x9EBD, 0x7072, 0x9EBE, 0x7073, 0x9EBF, 0x7074, 0x9EC0, 0x7077, 0x9EC1, 0x7079, + 0x9EC2, 0x707A, 0x9EC3, 0x707B, 0x9EC4, 0x707D, 0x9EC5, 0x7081, 0x9EC6, 0x7082, 0x9EC7, 0x7083, 0x9EC8, 0x7084, 0x9EC9, 0x7086, + 0x9ECA, 0x7087, 0x9ECB, 0x7088, 0x9ECC, 0x708B, 0x9ECD, 0x708C, 0x9ECE, 0x708D, 0x9ECF, 0x708F, 0x9ED0, 0x7090, 0x9ED1, 0x7091, + 0x9ED2, 0x7093, 0x9ED3, 0x7097, 0x9ED4, 0x7098, 0x9ED5, 0x709A, 0x9ED6, 0x709B, 0x9ED7, 0x709E, 0x9ED8, 0x709F, 0x9ED9, 0x70A0, + 0x9EDA, 0x70A1, 0x9EDB, 0x70A2, 0x9EDC, 0x70A3, 0x9EDD, 0x70A4, 0x9EDE, 0x70A5, 0x9EDF, 0x70A6, 0x9EE0, 0x70A7, 0x9EE1, 0x70A8, + 0x9EE2, 0x70A9, 0x9EE3, 0x70AA, 0x9EE4, 0x70B0, 0x9EE5, 0x70B2, 0x9EE6, 0x70B4, 0x9EE7, 0x70B5, 0x9EE8, 0x70B6, 0x9EE9, 0x70BA, + 0x9EEA, 0x70BE, 0x9EEB, 0x70BF, 0x9EEC, 0x70C4, 0x9EED, 0x70C5, 0x9EEE, 0x70C6, 0x9EEF, 0x70C7, 0x9EF0, 0x70C9, 0x9EF1, 0x70CB, + 0x9EF2, 0x70CC, 0x9EF3, 0x70CD, 0x9EF4, 0x70CE, 0x9EF5, 0x70CF, 0x9EF6, 0x70D0, 0x9EF7, 0x70D1, 0x9EF8, 0x70D2, 0x9EF9, 0x70D3, + 0x9EFA, 0x70D4, 0x9EFB, 0x70D5, 0x9EFC, 0x70D6, 0x9EFD, 0x70D7, 0x9EFE, 0x70DA, 0x9F40, 0x70DC, 0x9F41, 0x70DD, 0x9F42, 0x70DE, + 0x9F43, 0x70E0, 0x9F44, 0x70E1, 0x9F45, 0x70E2, 0x9F46, 0x70E3, 0x9F47, 0x70E5, 0x9F48, 0x70EA, 0x9F49, 0x70EE, 0x9F4A, 0x70F0, + 0x9F4B, 0x70F1, 0x9F4C, 0x70F2, 0x9F4D, 0x70F3, 0x9F4E, 0x70F4, 0x9F4F, 0x70F5, 0x9F50, 0x70F6, 0x9F51, 0x70F8, 0x9F52, 0x70FA, + 0x9F53, 0x70FB, 0x9F54, 0x70FC, 0x9F55, 0x70FE, 0x9F56, 0x70FF, 0x9F57, 0x7100, 0x9F58, 0x7101, 0x9F59, 0x7102, 0x9F5A, 0x7103, + 0x9F5B, 0x7104, 0x9F5C, 0x7105, 0x9F5D, 0x7106, 0x9F5E, 0x7107, 0x9F5F, 0x7108, 0x9F60, 0x710B, 0x9F61, 0x710C, 0x9F62, 0x710D, + 0x9F63, 0x710E, 0x9F64, 0x710F, 0x9F65, 0x7111, 0x9F66, 0x7112, 0x9F67, 0x7114, 0x9F68, 0x7117, 0x9F69, 0x711B, 0x9F6A, 0x711C, + 0x9F6B, 0x711D, 0x9F6C, 0x711E, 0x9F6D, 0x711F, 0x9F6E, 0x7120, 0x9F6F, 0x7121, 0x9F70, 0x7122, 0x9F71, 0x7123, 0x9F72, 0x7124, + 0x9F73, 0x7125, 0x9F74, 0x7127, 0x9F75, 0x7128, 0x9F76, 0x7129, 0x9F77, 0x712A, 0x9F78, 0x712B, 0x9F79, 0x712C, 0x9F7A, 0x712D, + 0x9F7B, 0x712E, 0x9F7C, 0x7132, 0x9F7D, 0x7133, 0x9F7E, 0x7134, 0x9F80, 0x7135, 0x9F81, 0x7137, 0x9F82, 0x7138, 0x9F83, 0x7139, + 0x9F84, 0x713A, 0x9F85, 0x713B, 0x9F86, 0x713C, 0x9F87, 0x713D, 0x9F88, 0x713E, 0x9F89, 0x713F, 0x9F8A, 0x7140, 0x9F8B, 0x7141, + 0x9F8C, 0x7142, 0x9F8D, 0x7143, 0x9F8E, 0x7144, 0x9F8F, 0x7146, 0x9F90, 0x7147, 0x9F91, 0x7148, 0x9F92, 0x7149, 0x9F93, 0x714B, + 0x9F94, 0x714D, 0x9F95, 0x714F, 0x9F96, 0x7150, 0x9F97, 0x7151, 0x9F98, 0x7152, 0x9F99, 0x7153, 0x9F9A, 0x7154, 0x9F9B, 0x7155, + 0x9F9C, 0x7156, 0x9F9D, 0x7157, 0x9F9E, 0x7158, 0x9F9F, 0x7159, 0x9FA0, 0x715A, 0x9FA1, 0x715B, 0x9FA2, 0x715D, 0x9FA3, 0x715F, + 0x9FA4, 0x7160, 0x9FA5, 0x7161, 0x9FA6, 0x7162, 0x9FA7, 0x7163, 0x9FA8, 0x7165, 0x9FA9, 0x7169, 0x9FAA, 0x716A, 0x9FAB, 0x716B, + 0x9FAC, 0x716C, 0x9FAD, 0x716D, 0x9FAE, 0x716F, 0x9FAF, 0x7170, 0x9FB0, 0x7171, 0x9FB1, 0x7174, 0x9FB2, 0x7175, 0x9FB3, 0x7176, + 0x9FB4, 0x7177, 0x9FB5, 0x7179, 0x9FB6, 0x717B, 0x9FB7, 0x717C, 0x9FB8, 0x717E, 0x9FB9, 0x717F, 0x9FBA, 0x7180, 0x9FBB, 0x7181, + 0x9FBC, 0x7182, 0x9FBD, 0x7183, 0x9FBE, 0x7185, 0x9FBF, 0x7186, 0x9FC0, 0x7187, 0x9FC1, 0x7188, 0x9FC2, 0x7189, 0x9FC3, 0x718B, + 0x9FC4, 0x718C, 0x9FC5, 0x718D, 0x9FC6, 0x718E, 0x9FC7, 0x7190, 0x9FC8, 0x7191, 0x9FC9, 0x7192, 0x9FCA, 0x7193, 0x9FCB, 0x7195, + 0x9FCC, 0x7196, 0x9FCD, 0x7197, 0x9FCE, 0x719A, 0x9FCF, 0x719B, 0x9FD0, 0x719C, 0x9FD1, 0x719D, 0x9FD2, 0x719E, 0x9FD3, 0x71A1, + 0x9FD4, 0x71A2, 0x9FD5, 0x71A3, 0x9FD6, 0x71A4, 0x9FD7, 0x71A5, 0x9FD8, 0x71A6, 0x9FD9, 0x71A7, 0x9FDA, 0x71A9, 0x9FDB, 0x71AA, + 0x9FDC, 0x71AB, 0x9FDD, 0x71AD, 0x9FDE, 0x71AE, 0x9FDF, 0x71AF, 0x9FE0, 0x71B0, 0x9FE1, 0x71B1, 0x9FE2, 0x71B2, 0x9FE3, 0x71B4, + 0x9FE4, 0x71B6, 0x9FE5, 0x71B7, 0x9FE6, 0x71B8, 0x9FE7, 0x71BA, 0x9FE8, 0x71BB, 0x9FE9, 0x71BC, 0x9FEA, 0x71BD, 0x9FEB, 0x71BE, + 0x9FEC, 0x71BF, 0x9FED, 0x71C0, 0x9FEE, 0x71C1, 0x9FEF, 0x71C2, 0x9FF0, 0x71C4, 0x9FF1, 0x71C5, 0x9FF2, 0x71C6, 0x9FF3, 0x71C7, + 0x9FF4, 0x71C8, 0x9FF5, 0x71C9, 0x9FF6, 0x71CA, 0x9FF7, 0x71CB, 0x9FF8, 0x71CC, 0x9FF9, 0x71CD, 0x9FFA, 0x71CF, 0x9FFB, 0x71D0, + 0x9FFC, 0x71D1, 0x9FFD, 0x71D2, 0x9FFE, 0x71D3, 0xA040, 0x71D6, 0xA041, 0x71D7, 0xA042, 0x71D8, 0xA043, 0x71D9, 0xA044, 0x71DA, + 0xA045, 0x71DB, 0xA046, 0x71DC, 0xA047, 0x71DD, 0xA048, 0x71DE, 0xA049, 0x71DF, 0xA04A, 0x71E1, 0xA04B, 0x71E2, 0xA04C, 0x71E3, + 0xA04D, 0x71E4, 0xA04E, 0x71E6, 0xA04F, 0x71E8, 0xA050, 0x71E9, 0xA051, 0x71EA, 0xA052, 0x71EB, 0xA053, 0x71EC, 0xA054, 0x71ED, + 0xA055, 0x71EF, 0xA056, 0x71F0, 0xA057, 0x71F1, 0xA058, 0x71F2, 0xA059, 0x71F3, 0xA05A, 0x71F4, 0xA05B, 0x71F5, 0xA05C, 0x71F6, + 0xA05D, 0x71F7, 0xA05E, 0x71F8, 0xA05F, 0x71FA, 0xA060, 0x71FB, 0xA061, 0x71FC, 0xA062, 0x71FD, 0xA063, 0x71FE, 0xA064, 0x71FF, + 0xA065, 0x7200, 0xA066, 0x7201, 0xA067, 0x7202, 0xA068, 0x7203, 0xA069, 0x7204, 0xA06A, 0x7205, 0xA06B, 0x7207, 0xA06C, 0x7208, + 0xA06D, 0x7209, 0xA06E, 0x720A, 0xA06F, 0x720B, 0xA070, 0x720C, 0xA071, 0x720D, 0xA072, 0x720E, 0xA073, 0x720F, 0xA074, 0x7210, + 0xA075, 0x7211, 0xA076, 0x7212, 0xA077, 0x7213, 0xA078, 0x7214, 0xA079, 0x7215, 0xA07A, 0x7216, 0xA07B, 0x7217, 0xA07C, 0x7218, + 0xA07D, 0x7219, 0xA07E, 0x721A, 0xA080, 0x721B, 0xA081, 0x721C, 0xA082, 0x721E, 0xA083, 0x721F, 0xA084, 0x7220, 0xA085, 0x7221, + 0xA086, 0x7222, 0xA087, 0x7223, 0xA088, 0x7224, 0xA089, 0x7225, 0xA08A, 0x7226, 0xA08B, 0x7227, 0xA08C, 0x7229, 0xA08D, 0x722B, + 0xA08E, 0x722D, 0xA08F, 0x722E, 0xA090, 0x722F, 0xA091, 0x7232, 0xA092, 0x7233, 0xA093, 0x7234, 0xA094, 0x723A, 0xA095, 0x723C, + 0xA096, 0x723E, 0xA097, 0x7240, 0xA098, 0x7241, 0xA099, 0x7242, 0xA09A, 0x7243, 0xA09B, 0x7244, 0xA09C, 0x7245, 0xA09D, 0x7246, + 0xA09E, 0x7249, 0xA09F, 0x724A, 0xA0A0, 0x724B, 0xA0A1, 0x724E, 0xA0A2, 0x724F, 0xA0A3, 0x7250, 0xA0A4, 0x7251, 0xA0A5, 0x7253, + 0xA0A6, 0x7254, 0xA0A7, 0x7255, 0xA0A8, 0x7257, 0xA0A9, 0x7258, 0xA0AA, 0x725A, 0xA0AB, 0x725C, 0xA0AC, 0x725E, 0xA0AD, 0x7260, + 0xA0AE, 0x7263, 0xA0AF, 0x7264, 0xA0B0, 0x7265, 0xA0B1, 0x7268, 0xA0B2, 0x726A, 0xA0B3, 0x726B, 0xA0B4, 0x726C, 0xA0B5, 0x726D, + 0xA0B6, 0x7270, 0xA0B7, 0x7271, 0xA0B8, 0x7273, 0xA0B9, 0x7274, 0xA0BA, 0x7276, 0xA0BB, 0x7277, 0xA0BC, 0x7278, 0xA0BD, 0x727B, + 0xA0BE, 0x727C, 0xA0BF, 0x727D, 0xA0C0, 0x7282, 0xA0C1, 0x7283, 0xA0C2, 0x7285, 0xA0C3, 0x7286, 0xA0C4, 0x7287, 0xA0C5, 0x7288, + 0xA0C6, 0x7289, 0xA0C7, 0x728C, 0xA0C8, 0x728E, 0xA0C9, 0x7290, 0xA0CA, 0x7291, 0xA0CB, 0x7293, 0xA0CC, 0x7294, 0xA0CD, 0x7295, + 0xA0CE, 0x7296, 0xA0CF, 0x7297, 0xA0D0, 0x7298, 0xA0D1, 0x7299, 0xA0D2, 0x729A, 0xA0D3, 0x729B, 0xA0D4, 0x729C, 0xA0D5, 0x729D, + 0xA0D6, 0x729E, 0xA0D7, 0x72A0, 0xA0D8, 0x72A1, 0xA0D9, 0x72A2, 0xA0DA, 0x72A3, 0xA0DB, 0x72A4, 0xA0DC, 0x72A5, 0xA0DD, 0x72A6, + 0xA0DE, 0x72A7, 0xA0DF, 0x72A8, 0xA0E0, 0x72A9, 0xA0E1, 0x72AA, 0xA0E2, 0x72AB, 0xA0E3, 0x72AE, 0xA0E4, 0x72B1, 0xA0E5, 0x72B2, + 0xA0E6, 0x72B3, 0xA0E7, 0x72B5, 0xA0E8, 0x72BA, 0xA0E9, 0x72BB, 0xA0EA, 0x72BC, 0xA0EB, 0x72BD, 0xA0EC, 0x72BE, 0xA0ED, 0x72BF, + 0xA0EE, 0x72C0, 0xA0EF, 0x72C5, 0xA0F0, 0x72C6, 0xA0F1, 0x72C7, 0xA0F2, 0x72C9, 0xA0F3, 0x72CA, 0xA0F4, 0x72CB, 0xA0F5, 0x72CC, + 0xA0F6, 0x72CF, 0xA0F7, 0x72D1, 0xA0F8, 0x72D3, 0xA0F9, 0x72D4, 0xA0FA, 0x72D5, 0xA0FB, 0x72D6, 0xA0FC, 0x72D8, 0xA0FD, 0x72DA, + 0xA0FE, 0x72DB, 0xA1A1, 0x3000, 0xA1A2, 0x3001, 0xA1A3, 0x3002, 0xA1A4, 0x00B7, 0xA1A5, 0x02C9, 0xA1A6, 0x02C7, 0xA1A7, 0x00A8, + 0xA1A8, 0x3003, 0xA1A9, 0x3005, 0xA1AA, 0x2014, 0xA1AB, 0xFF5E, 0xA1AC, 0x2016, 0xA1AD, 0x2026, 0xA1AE, 0x2018, 0xA1AF, 0x2019, + 0xA1B0, 0x201C, 0xA1B1, 0x201D, 0xA1B2, 0x3014, 0xA1B3, 0x3015, 0xA1B4, 0x3008, 0xA1B5, 0x3009, 0xA1B6, 0x300A, 0xA1B7, 0x300B, + 0xA1B8, 0x300C, 0xA1B9, 0x300D, 0xA1BA, 0x300E, 0xA1BB, 0x300F, 0xA1BC, 0x3016, 0xA1BD, 0x3017, 0xA1BE, 0x3010, 0xA1BF, 0x3011, + 0xA1C0, 0x00B1, 0xA1C1, 0x00D7, 0xA1C2, 0x00F7, 0xA1C3, 0x2236, 0xA1C4, 0x2227, 0xA1C5, 0x2228, 0xA1C6, 0x2211, 0xA1C7, 0x220F, + 0xA1C8, 0x222A, 0xA1C9, 0x2229, 0xA1CA, 0x2208, 0xA1CB, 0x2237, 0xA1CC, 0x221A, 0xA1CD, 0x22A5, 0xA1CE, 0x2225, 0xA1CF, 0x2220, + 0xA1D0, 0x2312, 0xA1D1, 0x2299, 0xA1D2, 0x222B, 0xA1D3, 0x222E, 0xA1D4, 0x2261, 0xA1D5, 0x224C, 0xA1D6, 0x2248, 0xA1D7, 0x223D, + 0xA1D8, 0x221D, 0xA1D9, 0x2260, 0xA1DA, 0x226E, 0xA1DB, 0x226F, 0xA1DC, 0x2264, 0xA1DD, 0x2265, 0xA1DE, 0x221E, 0xA1DF, 0x2235, + 0xA1E0, 0x2234, 0xA1E1, 0x2642, 0xA1E2, 0x2640, 0xA1E3, 0x00B0, 0xA1E4, 0x2032, 0xA1E5, 0x2033, 0xA1E6, 0x2103, 0xA1E7, 0xFF04, + 0xA1E8, 0x00A4, 0xA1E9, 0xFFE0, 0xA1EA, 0xFFE1, 0xA1EB, 0x2030, 0xA1EC, 0x00A7, 0xA1ED, 0x2116, 0xA1EE, 0x2606, 0xA1EF, 0x2605, + 0xA1F0, 0x25CB, 0xA1F1, 0x25CF, 0xA1F2, 0x25CE, 0xA1F3, 0x25C7, 0xA1F4, 0x25C6, 0xA1F5, 0x25A1, 0xA1F6, 0x25A0, 0xA1F7, 0x25B3, + 0xA1F8, 0x25B2, 0xA1F9, 0x203B, 0xA1FA, 0x2192, 0xA1FB, 0x2190, 0xA1FC, 0x2191, 0xA1FD, 0x2193, 0xA1FE, 0x3013, 0xA2A1, 0x2170, + 0xA2A2, 0x2171, 0xA2A3, 0x2172, 0xA2A4, 0x2173, 0xA2A5, 0x2174, 0xA2A6, 0x2175, 0xA2A7, 0x2176, 0xA2A8, 0x2177, 0xA2A9, 0x2178, + 0xA2AA, 0x2179, 0xA2B1, 0x2488, 0xA2B2, 0x2489, 0xA2B3, 0x248A, 0xA2B4, 0x248B, 0xA2B5, 0x248C, 0xA2B6, 0x248D, 0xA2B7, 0x248E, + 0xA2B8, 0x248F, 0xA2B9, 0x2490, 0xA2BA, 0x2491, 0xA2BB, 0x2492, 0xA2BC, 0x2493, 0xA2BD, 0x2494, 0xA2BE, 0x2495, 0xA2BF, 0x2496, + 0xA2C0, 0x2497, 0xA2C1, 0x2498, 0xA2C2, 0x2499, 0xA2C3, 0x249A, 0xA2C4, 0x249B, 0xA2C5, 0x2474, 0xA2C6, 0x2475, 0xA2C7, 0x2476, + 0xA2C8, 0x2477, 0xA2C9, 0x2478, 0xA2CA, 0x2479, 0xA2CB, 0x247A, 0xA2CC, 0x247B, 0xA2CD, 0x247C, 0xA2CE, 0x247D, 0xA2CF, 0x247E, + 0xA2D0, 0x247F, 0xA2D1, 0x2480, 0xA2D2, 0x2481, 0xA2D3, 0x2482, 0xA2D4, 0x2483, 0xA2D5, 0x2484, 0xA2D6, 0x2485, 0xA2D7, 0x2486, + 0xA2D8, 0x2487, 0xA2D9, 0x2460, 0xA2DA, 0x2461, 0xA2DB, 0x2462, 0xA2DC, 0x2463, 0xA2DD, 0x2464, 0xA2DE, 0x2465, 0xA2DF, 0x2466, + 0xA2E0, 0x2467, 0xA2E1, 0x2468, 0xA2E2, 0x2469, 0xA2E5, 0x3220, 0xA2E6, 0x3221, 0xA2E7, 0x3222, 0xA2E8, 0x3223, 0xA2E9, 0x3224, + 0xA2EA, 0x3225, 0xA2EB, 0x3226, 0xA2EC, 0x3227, 0xA2ED, 0x3228, 0xA2EE, 0x3229, 0xA2F1, 0x2160, 0xA2F2, 0x2161, 0xA2F3, 0x2162, + 0xA2F4, 0x2163, 0xA2F5, 0x2164, 0xA2F6, 0x2165, 0xA2F7, 0x2166, 0xA2F8, 0x2167, 0xA2F9, 0x2168, 0xA2FA, 0x2169, 0xA2FB, 0x216A, + 0xA2FC, 0x216B, 0xA3A1, 0xFF01, 0xA3A2, 0xFF02, 0xA3A3, 0xFF03, 0xA3A4, 0xFFE5, 0xA3A5, 0xFF05, 0xA3A6, 0xFF06, 0xA3A7, 0xFF07, + 0xA3A8, 0xFF08, 0xA3A9, 0xFF09, 0xA3AA, 0xFF0A, 0xA3AB, 0xFF0B, 0xA3AC, 0xFF0C, 0xA3AD, 0xFF0D, 0xA3AE, 0xFF0E, 0xA3AF, 0xFF0F, + 0xA3B0, 0xFF10, 0xA3B1, 0xFF11, 0xA3B2, 0xFF12, 0xA3B3, 0xFF13, 0xA3B4, 0xFF14, 0xA3B5, 0xFF15, 0xA3B6, 0xFF16, 0xA3B7, 0xFF17, + 0xA3B8, 0xFF18, 0xA3B9, 0xFF19, 0xA3BA, 0xFF1A, 0xA3BB, 0xFF1B, 0xA3BC, 0xFF1C, 0xA3BD, 0xFF1D, 0xA3BE, 0xFF1E, 0xA3BF, 0xFF1F, + 0xA3C0, 0xFF20, 0xA3C1, 0xFF21, 0xA3C2, 0xFF22, 0xA3C3, 0xFF23, 0xA3C4, 0xFF24, 0xA3C5, 0xFF25, 0xA3C6, 0xFF26, 0xA3C7, 0xFF27, + 0xA3C8, 0xFF28, 0xA3C9, 0xFF29, 0xA3CA, 0xFF2A, 0xA3CB, 0xFF2B, 0xA3CC, 0xFF2C, 0xA3CD, 0xFF2D, 0xA3CE, 0xFF2E, 0xA3CF, 0xFF2F, + 0xA3D0, 0xFF30, 0xA3D1, 0xFF31, 0xA3D2, 0xFF32, 0xA3D3, 0xFF33, 0xA3D4, 0xFF34, 0xA3D5, 0xFF35, 0xA3D6, 0xFF36, 0xA3D7, 0xFF37, + 0xA3D8, 0xFF38, 0xA3D9, 0xFF39, 0xA3DA, 0xFF3A, 0xA3DB, 0xFF3B, 0xA3DC, 0xFF3C, 0xA3DD, 0xFF3D, 0xA3DE, 0xFF3E, 0xA3DF, 0xFF3F, + 0xA3E0, 0xFF40, 0xA3E1, 0xFF41, 0xA3E2, 0xFF42, 0xA3E3, 0xFF43, 0xA3E4, 0xFF44, 0xA3E5, 0xFF45, 0xA3E6, 0xFF46, 0xA3E7, 0xFF47, + 0xA3E8, 0xFF48, 0xA3E9, 0xFF49, 0xA3EA, 0xFF4A, 0xA3EB, 0xFF4B, 0xA3EC, 0xFF4C, 0xA3ED, 0xFF4D, 0xA3EE, 0xFF4E, 0xA3EF, 0xFF4F, + 0xA3F0, 0xFF50, 0xA3F1, 0xFF51, 0xA3F2, 0xFF52, 0xA3F3, 0xFF53, 0xA3F4, 0xFF54, 0xA3F5, 0xFF55, 0xA3F6, 0xFF56, 0xA3F7, 0xFF57, + 0xA3F8, 0xFF58, 0xA3F9, 0xFF59, 0xA3FA, 0xFF5A, 0xA3FB, 0xFF5B, 0xA3FC, 0xFF5C, 0xA3FD, 0xFF5D, 0xA3FE, 0xFFE3, 0xA4A1, 0x3041, + 0xA4A2, 0x3042, 0xA4A3, 0x3043, 0xA4A4, 0x3044, 0xA4A5, 0x3045, 0xA4A6, 0x3046, 0xA4A7, 0x3047, 0xA4A8, 0x3048, 0xA4A9, 0x3049, + 0xA4AA, 0x304A, 0xA4AB, 0x304B, 0xA4AC, 0x304C, 0xA4AD, 0x304D, 0xA4AE, 0x304E, 0xA4AF, 0x304F, 0xA4B0, 0x3050, 0xA4B1, 0x3051, + 0xA4B2, 0x3052, 0xA4B3, 0x3053, 0xA4B4, 0x3054, 0xA4B5, 0x3055, 0xA4B6, 0x3056, 0xA4B7, 0x3057, 0xA4B8, 0x3058, 0xA4B9, 0x3059, + 0xA4BA, 0x305A, 0xA4BB, 0x305B, 0xA4BC, 0x305C, 0xA4BD, 0x305D, 0xA4BE, 0x305E, 0xA4BF, 0x305F, 0xA4C0, 0x3060, 0xA4C1, 0x3061, + 0xA4C2, 0x3062, 0xA4C3, 0x3063, 0xA4C4, 0x3064, 0xA4C5, 0x3065, 0xA4C6, 0x3066, 0xA4C7, 0x3067, 0xA4C8, 0x3068, 0xA4C9, 0x3069, + 0xA4CA, 0x306A, 0xA4CB, 0x306B, 0xA4CC, 0x306C, 0xA4CD, 0x306D, 0xA4CE, 0x306E, 0xA4CF, 0x306F, 0xA4D0, 0x3070, 0xA4D1, 0x3071, + 0xA4D2, 0x3072, 0xA4D3, 0x3073, 0xA4D4, 0x3074, 0xA4D5, 0x3075, 0xA4D6, 0x3076, 0xA4D7, 0x3077, 0xA4D8, 0x3078, 0xA4D9, 0x3079, + 0xA4DA, 0x307A, 0xA4DB, 0x307B, 0xA4DC, 0x307C, 0xA4DD, 0x307D, 0xA4DE, 0x307E, 0xA4DF, 0x307F, 0xA4E0, 0x3080, 0xA4E1, 0x3081, + 0xA4E2, 0x3082, 0xA4E3, 0x3083, 0xA4E4, 0x3084, 0xA4E5, 0x3085, 0xA4E6, 0x3086, 0xA4E7, 0x3087, 0xA4E8, 0x3088, 0xA4E9, 0x3089, + 0xA4EA, 0x308A, 0xA4EB, 0x308B, 0xA4EC, 0x308C, 0xA4ED, 0x308D, 0xA4EE, 0x308E, 0xA4EF, 0x308F, 0xA4F0, 0x3090, 0xA4F1, 0x3091, + 0xA4F2, 0x3092, 0xA4F3, 0x3093, 0xA5A1, 0x30A1, 0xA5A2, 0x30A2, 0xA5A3, 0x30A3, 0xA5A4, 0x30A4, 0xA5A5, 0x30A5, 0xA5A6, 0x30A6, + 0xA5A7, 0x30A7, 0xA5A8, 0x30A8, 0xA5A9, 0x30A9, 0xA5AA, 0x30AA, 0xA5AB, 0x30AB, 0xA5AC, 0x30AC, 0xA5AD, 0x30AD, 0xA5AE, 0x30AE, + 0xA5AF, 0x30AF, 0xA5B0, 0x30B0, 0xA5B1, 0x30B1, 0xA5B2, 0x30B2, 0xA5B3, 0x30B3, 0xA5B4, 0x30B4, 0xA5B5, 0x30B5, 0xA5B6, 0x30B6, + 0xA5B7, 0x30B7, 0xA5B8, 0x30B8, 0xA5B9, 0x30B9, 0xA5BA, 0x30BA, 0xA5BB, 0x30BB, 0xA5BC, 0x30BC, 0xA5BD, 0x30BD, 0xA5BE, 0x30BE, + 0xA5BF, 0x30BF, 0xA5C0, 0x30C0, 0xA5C1, 0x30C1, 0xA5C2, 0x30C2, 0xA5C3, 0x30C3, 0xA5C4, 0x30C4, 0xA5C5, 0x30C5, 0xA5C6, 0x30C6, + 0xA5C7, 0x30C7, 0xA5C8, 0x30C8, 0xA5C9, 0x30C9, 0xA5CA, 0x30CA, 0xA5CB, 0x30CB, 0xA5CC, 0x30CC, 0xA5CD, 0x30CD, 0xA5CE, 0x30CE, + 0xA5CF, 0x30CF, 0xA5D0, 0x30D0, 0xA5D1, 0x30D1, 0xA5D2, 0x30D2, 0xA5D3, 0x30D3, 0xA5D4, 0x30D4, 0xA5D5, 0x30D5, 0xA5D6, 0x30D6, + 0xA5D7, 0x30D7, 0xA5D8, 0x30D8, 0xA5D9, 0x30D9, 0xA5DA, 0x30DA, 0xA5DB, 0x30DB, 0xA5DC, 0x30DC, 0xA5DD, 0x30DD, 0xA5DE, 0x30DE, + 0xA5DF, 0x30DF, 0xA5E0, 0x30E0, 0xA5E1, 0x30E1, 0xA5E2, 0x30E2, 0xA5E3, 0x30E3, 0xA5E4, 0x30E4, 0xA5E5, 0x30E5, 0xA5E6, 0x30E6, + 0xA5E7, 0x30E7, 0xA5E8, 0x30E8, 0xA5E9, 0x30E9, 0xA5EA, 0x30EA, 0xA5EB, 0x30EB, 0xA5EC, 0x30EC, 0xA5ED, 0x30ED, 0xA5EE, 0x30EE, + 0xA5EF, 0x30EF, 0xA5F0, 0x30F0, 0xA5F1, 0x30F1, 0xA5F2, 0x30F2, 0xA5F3, 0x30F3, 0xA5F4, 0x30F4, 0xA5F5, 0x30F5, 0xA5F6, 0x30F6, + 0xA6A1, 0x0391, 0xA6A2, 0x0392, 0xA6A3, 0x0393, 0xA6A4, 0x0394, 0xA6A5, 0x0395, 0xA6A6, 0x0396, 0xA6A7, 0x0397, 0xA6A8, 0x0398, + 0xA6A9, 0x0399, 0xA6AA, 0x039A, 0xA6AB, 0x039B, 0xA6AC, 0x039C, 0xA6AD, 0x039D, 0xA6AE, 0x039E, 0xA6AF, 0x039F, 0xA6B0, 0x03A0, + 0xA6B1, 0x03A1, 0xA6B2, 0x03A3, 0xA6B3, 0x03A4, 0xA6B4, 0x03A5, 0xA6B5, 0x03A6, 0xA6B6, 0x03A7, 0xA6B7, 0x03A8, 0xA6B8, 0x03A9, + 0xA6C1, 0x03B1, 0xA6C2, 0x03B2, 0xA6C3, 0x03B3, 0xA6C4, 0x03B4, 0xA6C5, 0x03B5, 0xA6C6, 0x03B6, 0xA6C7, 0x03B7, 0xA6C8, 0x03B8, + 0xA6C9, 0x03B9, 0xA6CA, 0x03BA, 0xA6CB, 0x03BB, 0xA6CC, 0x03BC, 0xA6CD, 0x03BD, 0xA6CE, 0x03BE, 0xA6CF, 0x03BF, 0xA6D0, 0x03C0, + 0xA6D1, 0x03C1, 0xA6D2, 0x03C3, 0xA6D3, 0x03C4, 0xA6D4, 0x03C5, 0xA6D5, 0x03C6, 0xA6D6, 0x03C7, 0xA6D7, 0x03C8, 0xA6D8, 0x03C9, + 0xA6E0, 0xFE35, 0xA6E1, 0xFE36, 0xA6E2, 0xFE39, 0xA6E3, 0xFE3A, 0xA6E4, 0xFE3F, 0xA6E5, 0xFE40, 0xA6E6, 0xFE3D, 0xA6E7, 0xFE3E, + 0xA6E8, 0xFE41, 0xA6E9, 0xFE42, 0xA6EA, 0xFE43, 0xA6EB, 0xFE44, 0xA6EE, 0xFE3B, 0xA6EF, 0xFE3C, 0xA6F0, 0xFE37, 0xA6F1, 0xFE38, + 0xA6F2, 0xFE31, 0xA6F4, 0xFE33, 0xA6F5, 0xFE34, 0xA7A1, 0x0410, 0xA7A2, 0x0411, 0xA7A3, 0x0412, 0xA7A4, 0x0413, 0xA7A5, 0x0414, + 0xA7A6, 0x0415, 0xA7A7, 0x0401, 0xA7A8, 0x0416, 0xA7A9, 0x0417, 0xA7AA, 0x0418, 0xA7AB, 0x0419, 0xA7AC, 0x041A, 0xA7AD, 0x041B, + 0xA7AE, 0x041C, 0xA7AF, 0x041D, 0xA7B0, 0x041E, 0xA7B1, 0x041F, 0xA7B2, 0x0420, 0xA7B3, 0x0421, 0xA7B4, 0x0422, 0xA7B5, 0x0423, + 0xA7B6, 0x0424, 0xA7B7, 0x0425, 0xA7B8, 0x0426, 0xA7B9, 0x0427, 0xA7BA, 0x0428, 0xA7BB, 0x0429, 0xA7BC, 0x042A, 0xA7BD, 0x042B, + 0xA7BE, 0x042C, 0xA7BF, 0x042D, 0xA7C0, 0x042E, 0xA7C1, 0x042F, 0xA7D1, 0x0430, 0xA7D2, 0x0431, 0xA7D3, 0x0432, 0xA7D4, 0x0433, + 0xA7D5, 0x0434, 0xA7D6, 0x0435, 0xA7D7, 0x0451, 0xA7D8, 0x0436, 0xA7D9, 0x0437, 0xA7DA, 0x0438, 0xA7DB, 0x0439, 0xA7DC, 0x043A, + 0xA7DD, 0x043B, 0xA7DE, 0x043C, 0xA7DF, 0x043D, 0xA7E0, 0x043E, 0xA7E1, 0x043F, 0xA7E2, 0x0440, 0xA7E3, 0x0441, 0xA7E4, 0x0442, + 0xA7E5, 0x0443, 0xA7E6, 0x0444, 0xA7E7, 0x0445, 0xA7E8, 0x0446, 0xA7E9, 0x0447, 0xA7EA, 0x0448, 0xA7EB, 0x0449, 0xA7EC, 0x044A, + 0xA7ED, 0x044B, 0xA7EE, 0x044C, 0xA7EF, 0x044D, 0xA7F0, 0x044E, 0xA7F1, 0x044F, 0xA840, 0x02CA, 0xA841, 0x02CB, 0xA842, 0x02D9, + 0xA843, 0x2013, 0xA844, 0x2015, 0xA845, 0x2025, 0xA846, 0x2035, 0xA847, 0x2105, 0xA848, 0x2109, 0xA849, 0x2196, 0xA84A, 0x2197, + 0xA84B, 0x2198, 0xA84C, 0x2199, 0xA84D, 0x2215, 0xA84E, 0x221F, 0xA84F, 0x2223, 0xA850, 0x2252, 0xA851, 0x2266, 0xA852, 0x2267, + 0xA853, 0x22BF, 0xA854, 0x2550, 0xA855, 0x2551, 0xA856, 0x2552, 0xA857, 0x2553, 0xA858, 0x2554, 0xA859, 0x2555, 0xA85A, 0x2556, + 0xA85B, 0x2557, 0xA85C, 0x2558, 0xA85D, 0x2559, 0xA85E, 0x255A, 0xA85F, 0x255B, 0xA860, 0x255C, 0xA861, 0x255D, 0xA862, 0x255E, + 0xA863, 0x255F, 0xA864, 0x2560, 0xA865, 0x2561, 0xA866, 0x2562, 0xA867, 0x2563, 0xA868, 0x2564, 0xA869, 0x2565, 0xA86A, 0x2566, + 0xA86B, 0x2567, 0xA86C, 0x2568, 0xA86D, 0x2569, 0xA86E, 0x256A, 0xA86F, 0x256B, 0xA870, 0x256C, 0xA871, 0x256D, 0xA872, 0x256E, + 0xA873, 0x256F, 0xA874, 0x2570, 0xA875, 0x2571, 0xA876, 0x2572, 0xA877, 0x2573, 0xA878, 0x2581, 0xA879, 0x2582, 0xA87A, 0x2583, + 0xA87B, 0x2584, 0xA87C, 0x2585, 0xA87D, 0x2586, 0xA87E, 0x2587, 0xA880, 0x2588, 0xA881, 0x2589, 0xA882, 0x258A, 0xA883, 0x258B, + 0xA884, 0x258C, 0xA885, 0x258D, 0xA886, 0x258E, 0xA887, 0x258F, 0xA888, 0x2593, 0xA889, 0x2594, 0xA88A, 0x2595, 0xA88B, 0x25BC, + 0xA88C, 0x25BD, 0xA88D, 0x25E2, 0xA88E, 0x25E3, 0xA88F, 0x25E4, 0xA890, 0x25E5, 0xA891, 0x2609, 0xA892, 0x2295, 0xA893, 0x3012, + 0xA894, 0x301D, 0xA895, 0x301E, 0xA8A1, 0x0101, 0xA8A2, 0x00E1, 0xA8A3, 0x01CE, 0xA8A4, 0x00E0, 0xA8A5, 0x0113, 0xA8A6, 0x00E9, + 0xA8A7, 0x011B, 0xA8A8, 0x00E8, 0xA8A9, 0x012B, 0xA8AA, 0x00ED, 0xA8AB, 0x01D0, 0xA8AC, 0x00EC, 0xA8AD, 0x014D, 0xA8AE, 0x00F3, + 0xA8AF, 0x01D2, 0xA8B0, 0x00F2, 0xA8B1, 0x016B, 0xA8B2, 0x00FA, 0xA8B3, 0x01D4, 0xA8B4, 0x00F9, 0xA8B5, 0x01D6, 0xA8B6, 0x01D8, + 0xA8B7, 0x01DA, 0xA8B8, 0x01DC, 0xA8B9, 0x00FC, 0xA8BA, 0x00EA, 0xA8BB, 0x0251, 0xA8BD, 0x0144, 0xA8BE, 0x0148, 0xA8C0, 0x0261, + 0xA8C5, 0x3105, 0xA8C6, 0x3106, 0xA8C7, 0x3107, 0xA8C8, 0x3108, 0xA8C9, 0x3109, 0xA8CA, 0x310A, 0xA8CB, 0x310B, 0xA8CC, 0x310C, + 0xA8CD, 0x310D, 0xA8CE, 0x310E, 0xA8CF, 0x310F, 0xA8D0, 0x3110, 0xA8D1, 0x3111, 0xA8D2, 0x3112, 0xA8D3, 0x3113, 0xA8D4, 0x3114, + 0xA8D5, 0x3115, 0xA8D6, 0x3116, 0xA8D7, 0x3117, 0xA8D8, 0x3118, 0xA8D9, 0x3119, 0xA8DA, 0x311A, 0xA8DB, 0x311B, 0xA8DC, 0x311C, + 0xA8DD, 0x311D, 0xA8DE, 0x311E, 0xA8DF, 0x311F, 0xA8E0, 0x3120, 0xA8E1, 0x3121, 0xA8E2, 0x3122, 0xA8E3, 0x3123, 0xA8E4, 0x3124, + 0xA8E5, 0x3125, 0xA8E6, 0x3126, 0xA8E7, 0x3127, 0xA8E8, 0x3128, 0xA8E9, 0x3129, 0xA940, 0x3021, 0xA941, 0x3022, 0xA942, 0x3023, + 0xA943, 0x3024, 0xA944, 0x3025, 0xA945, 0x3026, 0xA946, 0x3027, 0xA947, 0x3028, 0xA948, 0x3029, 0xA949, 0x32A3, 0xA94A, 0x338E, + 0xA94B, 0x338F, 0xA94C, 0x339C, 0xA94D, 0x339D, 0xA94E, 0x339E, 0xA94F, 0x33A1, 0xA950, 0x33C4, 0xA951, 0x33CE, 0xA952, 0x33D1, + 0xA953, 0x33D2, 0xA954, 0x33D5, 0xA955, 0xFE30, 0xA956, 0xFFE2, 0xA957, 0xFFE4, 0xA959, 0x2121, 0xA95A, 0x3231, 0xA95C, 0x2010, + 0xA960, 0x30FC, 0xA961, 0x309B, 0xA962, 0x309C, 0xA963, 0x30FD, 0xA964, 0x30FE, 0xA965, 0x3006, 0xA966, 0x309D, 0xA967, 0x309E, + 0xA968, 0xFE49, 0xA969, 0xFE4A, 0xA96A, 0xFE4B, 0xA96B, 0xFE4C, 0xA96C, 0xFE4D, 0xA96D, 0xFE4E, 0xA96E, 0xFE4F, 0xA96F, 0xFE50, + 0xA970, 0xFE51, 0xA971, 0xFE52, 0xA972, 0xFE54, 0xA973, 0xFE55, 0xA974, 0xFE56, 0xA975, 0xFE57, 0xA976, 0xFE59, 0xA977, 0xFE5A, + 0xA978, 0xFE5B, 0xA979, 0xFE5C, 0xA97A, 0xFE5D, 0xA97B, 0xFE5E, 0xA97C, 0xFE5F, 0xA97D, 0xFE60, 0xA97E, 0xFE61, 0xA980, 0xFE62, + 0xA981, 0xFE63, 0xA982, 0xFE64, 0xA983, 0xFE65, 0xA984, 0xFE66, 0xA985, 0xFE68, 0xA986, 0xFE69, 0xA987, 0xFE6A, 0xA988, 0xFE6B, + 0xA996, 0x3007, 0xA9A4, 0x2500, 0xA9A5, 0x2501, 0xA9A6, 0x2502, 0xA9A7, 0x2503, 0xA9A8, 0x2504, 0xA9A9, 0x2505, 0xA9AA, 0x2506, + 0xA9AB, 0x2507, 0xA9AC, 0x2508, 0xA9AD, 0x2509, 0xA9AE, 0x250A, 0xA9AF, 0x250B, 0xA9B0, 0x250C, 0xA9B1, 0x250D, 0xA9B2, 0x250E, + 0xA9B3, 0x250F, 0xA9B4, 0x2510, 0xA9B5, 0x2511, 0xA9B6, 0x2512, 0xA9B7, 0x2513, 0xA9B8, 0x2514, 0xA9B9, 0x2515, 0xA9BA, 0x2516, + 0xA9BB, 0x2517, 0xA9BC, 0x2518, 0xA9BD, 0x2519, 0xA9BE, 0x251A, 0xA9BF, 0x251B, 0xA9C0, 0x251C, 0xA9C1, 0x251D, 0xA9C2, 0x251E, + 0xA9C3, 0x251F, 0xA9C4, 0x2520, 0xA9C5, 0x2521, 0xA9C6, 0x2522, 0xA9C7, 0x2523, 0xA9C8, 0x2524, 0xA9C9, 0x2525, 0xA9CA, 0x2526, + 0xA9CB, 0x2527, 0xA9CC, 0x2528, 0xA9CD, 0x2529, 0xA9CE, 0x252A, 0xA9CF, 0x252B, 0xA9D0, 0x252C, 0xA9D1, 0x252D, 0xA9D2, 0x252E, + 0xA9D3, 0x252F, 0xA9D4, 0x2530, 0xA9D5, 0x2531, 0xA9D6, 0x2532, 0xA9D7, 0x2533, 0xA9D8, 0x2534, 0xA9D9, 0x2535, 0xA9DA, 0x2536, + 0xA9DB, 0x2537, 0xA9DC, 0x2538, 0xA9DD, 0x2539, 0xA9DE, 0x253A, 0xA9DF, 0x253B, 0xA9E0, 0x253C, 0xA9E1, 0x253D, 0xA9E2, 0x253E, + 0xA9E3, 0x253F, 0xA9E4, 0x2540, 0xA9E5, 0x2541, 0xA9E6, 0x2542, 0xA9E7, 0x2543, 0xA9E8, 0x2544, 0xA9E9, 0x2545, 0xA9EA, 0x2546, + 0xA9EB, 0x2547, 0xA9EC, 0x2548, 0xA9ED, 0x2549, 0xA9EE, 0x254A, 0xA9EF, 0x254B, 0xAA40, 0x72DC, 0xAA41, 0x72DD, 0xAA42, 0x72DF, + 0xAA43, 0x72E2, 0xAA44, 0x72E3, 0xAA45, 0x72E4, 0xAA46, 0x72E5, 0xAA47, 0x72E6, 0xAA48, 0x72E7, 0xAA49, 0x72EA, 0xAA4A, 0x72EB, + 0xAA4B, 0x72F5, 0xAA4C, 0x72F6, 0xAA4D, 0x72F9, 0xAA4E, 0x72FD, 0xAA4F, 0x72FE, 0xAA50, 0x72FF, 0xAA51, 0x7300, 0xAA52, 0x7302, + 0xAA53, 0x7304, 0xAA54, 0x7305, 0xAA55, 0x7306, 0xAA56, 0x7307, 0xAA57, 0x7308, 0xAA58, 0x7309, 0xAA59, 0x730B, 0xAA5A, 0x730C, + 0xAA5B, 0x730D, 0xAA5C, 0x730F, 0xAA5D, 0x7310, 0xAA5E, 0x7311, 0xAA5F, 0x7312, 0xAA60, 0x7314, 0xAA61, 0x7318, 0xAA62, 0x7319, + 0xAA63, 0x731A, 0xAA64, 0x731F, 0xAA65, 0x7320, 0xAA66, 0x7323, 0xAA67, 0x7324, 0xAA68, 0x7326, 0xAA69, 0x7327, 0xAA6A, 0x7328, + 0xAA6B, 0x732D, 0xAA6C, 0x732F, 0xAA6D, 0x7330, 0xAA6E, 0x7332, 0xAA6F, 0x7333, 0xAA70, 0x7335, 0xAA71, 0x7336, 0xAA72, 0x733A, + 0xAA73, 0x733B, 0xAA74, 0x733C, 0xAA75, 0x733D, 0xAA76, 0x7340, 0xAA77, 0x7341, 0xAA78, 0x7342, 0xAA79, 0x7343, 0xAA7A, 0x7344, + 0xAA7B, 0x7345, 0xAA7C, 0x7346, 0xAA7D, 0x7347, 0xAA7E, 0x7348, 0xAA80, 0x7349, 0xAA81, 0x734A, 0xAA82, 0x734B, 0xAA83, 0x734C, + 0xAA84, 0x734E, 0xAA85, 0x734F, 0xAA86, 0x7351, 0xAA87, 0x7353, 0xAA88, 0x7354, 0xAA89, 0x7355, 0xAA8A, 0x7356, 0xAA8B, 0x7358, + 0xAA8C, 0x7359, 0xAA8D, 0x735A, 0xAA8E, 0x735B, 0xAA8F, 0x735C, 0xAA90, 0x735D, 0xAA91, 0x735E, 0xAA92, 0x735F, 0xAA93, 0x7361, + 0xAA94, 0x7362, 0xAA95, 0x7363, 0xAA96, 0x7364, 0xAA97, 0x7365, 0xAA98, 0x7366, 0xAA99, 0x7367, 0xAA9A, 0x7368, 0xAA9B, 0x7369, + 0xAA9C, 0x736A, 0xAA9D, 0x736B, 0xAA9E, 0x736E, 0xAA9F, 0x7370, 0xAAA0, 0x7371, 0xAB40, 0x7372, 0xAB41, 0x7373, 0xAB42, 0x7374, + 0xAB43, 0x7375, 0xAB44, 0x7376, 0xAB45, 0x7377, 0xAB46, 0x7378, 0xAB47, 0x7379, 0xAB48, 0x737A, 0xAB49, 0x737B, 0xAB4A, 0x737C, + 0xAB4B, 0x737D, 0xAB4C, 0x737F, 0xAB4D, 0x7380, 0xAB4E, 0x7381, 0xAB4F, 0x7382, 0xAB50, 0x7383, 0xAB51, 0x7385, 0xAB52, 0x7386, + 0xAB53, 0x7388, 0xAB54, 0x738A, 0xAB55, 0x738C, 0xAB56, 0x738D, 0xAB57, 0x738F, 0xAB58, 0x7390, 0xAB59, 0x7392, 0xAB5A, 0x7393, + 0xAB5B, 0x7394, 0xAB5C, 0x7395, 0xAB5D, 0x7397, 0xAB5E, 0x7398, 0xAB5F, 0x7399, 0xAB60, 0x739A, 0xAB61, 0x739C, 0xAB62, 0x739D, + 0xAB63, 0x739E, 0xAB64, 0x73A0, 0xAB65, 0x73A1, 0xAB66, 0x73A3, 0xAB67, 0x73A4, 0xAB68, 0x73A5, 0xAB69, 0x73A6, 0xAB6A, 0x73A7, + 0xAB6B, 0x73A8, 0xAB6C, 0x73AA, 0xAB6D, 0x73AC, 0xAB6E, 0x73AD, 0xAB6F, 0x73B1, 0xAB70, 0x73B4, 0xAB71, 0x73B5, 0xAB72, 0x73B6, + 0xAB73, 0x73B8, 0xAB74, 0x73B9, 0xAB75, 0x73BC, 0xAB76, 0x73BD, 0xAB77, 0x73BE, 0xAB78, 0x73BF, 0xAB79, 0x73C1, 0xAB7A, 0x73C3, + 0xAB7B, 0x73C4, 0xAB7C, 0x73C5, 0xAB7D, 0x73C6, 0xAB7E, 0x73C7, 0xAB80, 0x73CB, 0xAB81, 0x73CC, 0xAB82, 0x73CE, 0xAB83, 0x73D2, + 0xAB84, 0x73D3, 0xAB85, 0x73D4, 0xAB86, 0x73D5, 0xAB87, 0x73D6, 0xAB88, 0x73D7, 0xAB89, 0x73D8, 0xAB8A, 0x73DA, 0xAB8B, 0x73DB, + 0xAB8C, 0x73DC, 0xAB8D, 0x73DD, 0xAB8E, 0x73DF, 0xAB8F, 0x73E1, 0xAB90, 0x73E2, 0xAB91, 0x73E3, 0xAB92, 0x73E4, 0xAB93, 0x73E6, + 0xAB94, 0x73E8, 0xAB95, 0x73EA, 0xAB96, 0x73EB, 0xAB97, 0x73EC, 0xAB98, 0x73EE, 0xAB99, 0x73EF, 0xAB9A, 0x73F0, 0xAB9B, 0x73F1, + 0xAB9C, 0x73F3, 0xAB9D, 0x73F4, 0xAB9E, 0x73F5, 0xAB9F, 0x73F6, 0xABA0, 0x73F7, 0xAC40, 0x73F8, 0xAC41, 0x73F9, 0xAC42, 0x73FA, + 0xAC43, 0x73FB, 0xAC44, 0x73FC, 0xAC45, 0x73FD, 0xAC46, 0x73FE, 0xAC47, 0x73FF, 0xAC48, 0x7400, 0xAC49, 0x7401, 0xAC4A, 0x7402, + 0xAC4B, 0x7404, 0xAC4C, 0x7407, 0xAC4D, 0x7408, 0xAC4E, 0x740B, 0xAC4F, 0x740C, 0xAC50, 0x740D, 0xAC51, 0x740E, 0xAC52, 0x7411, + 0xAC53, 0x7412, 0xAC54, 0x7413, 0xAC55, 0x7414, 0xAC56, 0x7415, 0xAC57, 0x7416, 0xAC58, 0x7417, 0xAC59, 0x7418, 0xAC5A, 0x7419, + 0xAC5B, 0x741C, 0xAC5C, 0x741D, 0xAC5D, 0x741E, 0xAC5E, 0x741F, 0xAC5F, 0x7420, 0xAC60, 0x7421, 0xAC61, 0x7423, 0xAC62, 0x7424, + 0xAC63, 0x7427, 0xAC64, 0x7429, 0xAC65, 0x742B, 0xAC66, 0x742D, 0xAC67, 0x742F, 0xAC68, 0x7431, 0xAC69, 0x7432, 0xAC6A, 0x7437, + 0xAC6B, 0x7438, 0xAC6C, 0x7439, 0xAC6D, 0x743A, 0xAC6E, 0x743B, 0xAC6F, 0x743D, 0xAC70, 0x743E, 0xAC71, 0x743F, 0xAC72, 0x7440, + 0xAC73, 0x7442, 0xAC74, 0x7443, 0xAC75, 0x7444, 0xAC76, 0x7445, 0xAC77, 0x7446, 0xAC78, 0x7447, 0xAC79, 0x7448, 0xAC7A, 0x7449, + 0xAC7B, 0x744A, 0xAC7C, 0x744B, 0xAC7D, 0x744C, 0xAC7E, 0x744D, 0xAC80, 0x744E, 0xAC81, 0x744F, 0xAC82, 0x7450, 0xAC83, 0x7451, + 0xAC84, 0x7452, 0xAC85, 0x7453, 0xAC86, 0x7454, 0xAC87, 0x7456, 0xAC88, 0x7458, 0xAC89, 0x745D, 0xAC8A, 0x7460, 0xAC8B, 0x7461, + 0xAC8C, 0x7462, 0xAC8D, 0x7463, 0xAC8E, 0x7464, 0xAC8F, 0x7465, 0xAC90, 0x7466, 0xAC91, 0x7467, 0xAC92, 0x7468, 0xAC93, 0x7469, + 0xAC94, 0x746A, 0xAC95, 0x746B, 0xAC96, 0x746C, 0xAC97, 0x746E, 0xAC98, 0x746F, 0xAC99, 0x7471, 0xAC9A, 0x7472, 0xAC9B, 0x7473, + 0xAC9C, 0x7474, 0xAC9D, 0x7475, 0xAC9E, 0x7478, 0xAC9F, 0x7479, 0xACA0, 0x747A, 0xAD40, 0x747B, 0xAD41, 0x747C, 0xAD42, 0x747D, + 0xAD43, 0x747F, 0xAD44, 0x7482, 0xAD45, 0x7484, 0xAD46, 0x7485, 0xAD47, 0x7486, 0xAD48, 0x7488, 0xAD49, 0x7489, 0xAD4A, 0x748A, + 0xAD4B, 0x748C, 0xAD4C, 0x748D, 0xAD4D, 0x748F, 0xAD4E, 0x7491, 0xAD4F, 0x7492, 0xAD50, 0x7493, 0xAD51, 0x7494, 0xAD52, 0x7495, + 0xAD53, 0x7496, 0xAD54, 0x7497, 0xAD55, 0x7498, 0xAD56, 0x7499, 0xAD57, 0x749A, 0xAD58, 0x749B, 0xAD59, 0x749D, 0xAD5A, 0x749F, + 0xAD5B, 0x74A0, 0xAD5C, 0x74A1, 0xAD5D, 0x74A2, 0xAD5E, 0x74A3, 0xAD5F, 0x74A4, 0xAD60, 0x74A5, 0xAD61, 0x74A6, 0xAD62, 0x74AA, + 0xAD63, 0x74AB, 0xAD64, 0x74AC, 0xAD65, 0x74AD, 0xAD66, 0x74AE, 0xAD67, 0x74AF, 0xAD68, 0x74B0, 0xAD69, 0x74B1, 0xAD6A, 0x74B2, + 0xAD6B, 0x74B3, 0xAD6C, 0x74B4, 0xAD6D, 0x74B5, 0xAD6E, 0x74B6, 0xAD6F, 0x74B7, 0xAD70, 0x74B8, 0xAD71, 0x74B9, 0xAD72, 0x74BB, + 0xAD73, 0x74BC, 0xAD74, 0x74BD, 0xAD75, 0x74BE, 0xAD76, 0x74BF, 0xAD77, 0x74C0, 0xAD78, 0x74C1, 0xAD79, 0x74C2, 0xAD7A, 0x74C3, + 0xAD7B, 0x74C4, 0xAD7C, 0x74C5, 0xAD7D, 0x74C6, 0xAD7E, 0x74C7, 0xAD80, 0x74C8, 0xAD81, 0x74C9, 0xAD82, 0x74CA, 0xAD83, 0x74CB, + 0xAD84, 0x74CC, 0xAD85, 0x74CD, 0xAD86, 0x74CE, 0xAD87, 0x74CF, 0xAD88, 0x74D0, 0xAD89, 0x74D1, 0xAD8A, 0x74D3, 0xAD8B, 0x74D4, + 0xAD8C, 0x74D5, 0xAD8D, 0x74D6, 0xAD8E, 0x74D7, 0xAD8F, 0x74D8, 0xAD90, 0x74D9, 0xAD91, 0x74DA, 0xAD92, 0x74DB, 0xAD93, 0x74DD, + 0xAD94, 0x74DF, 0xAD95, 0x74E1, 0xAD96, 0x74E5, 0xAD97, 0x74E7, 0xAD98, 0x74E8, 0xAD99, 0x74E9, 0xAD9A, 0x74EA, 0xAD9B, 0x74EB, + 0xAD9C, 0x74EC, 0xAD9D, 0x74ED, 0xAD9E, 0x74F0, 0xAD9F, 0x74F1, 0xADA0, 0x74F2, 0xAE40, 0x74F3, 0xAE41, 0x74F5, 0xAE42, 0x74F8, + 0xAE43, 0x74F9, 0xAE44, 0x74FA, 0xAE45, 0x74FB, 0xAE46, 0x74FC, 0xAE47, 0x74FD, 0xAE48, 0x74FE, 0xAE49, 0x7500, 0xAE4A, 0x7501, + 0xAE4B, 0x7502, 0xAE4C, 0x7503, 0xAE4D, 0x7505, 0xAE4E, 0x7506, 0xAE4F, 0x7507, 0xAE50, 0x7508, 0xAE51, 0x7509, 0xAE52, 0x750A, + 0xAE53, 0x750B, 0xAE54, 0x750C, 0xAE55, 0x750E, 0xAE56, 0x7510, 0xAE57, 0x7512, 0xAE58, 0x7514, 0xAE59, 0x7515, 0xAE5A, 0x7516, + 0xAE5B, 0x7517, 0xAE5C, 0x751B, 0xAE5D, 0x751D, 0xAE5E, 0x751E, 0xAE5F, 0x7520, 0xAE60, 0x7521, 0xAE61, 0x7522, 0xAE62, 0x7523, + 0xAE63, 0x7524, 0xAE64, 0x7526, 0xAE65, 0x7527, 0xAE66, 0x752A, 0xAE67, 0x752E, 0xAE68, 0x7534, 0xAE69, 0x7536, 0xAE6A, 0x7539, + 0xAE6B, 0x753C, 0xAE6C, 0x753D, 0xAE6D, 0x753F, 0xAE6E, 0x7541, 0xAE6F, 0x7542, 0xAE70, 0x7543, 0xAE71, 0x7544, 0xAE72, 0x7546, + 0xAE73, 0x7547, 0xAE74, 0x7549, 0xAE75, 0x754A, 0xAE76, 0x754D, 0xAE77, 0x7550, 0xAE78, 0x7551, 0xAE79, 0x7552, 0xAE7A, 0x7553, + 0xAE7B, 0x7555, 0xAE7C, 0x7556, 0xAE7D, 0x7557, 0xAE7E, 0x7558, 0xAE80, 0x755D, 0xAE81, 0x755E, 0xAE82, 0x755F, 0xAE83, 0x7560, + 0xAE84, 0x7561, 0xAE85, 0x7562, 0xAE86, 0x7563, 0xAE87, 0x7564, 0xAE88, 0x7567, 0xAE89, 0x7568, 0xAE8A, 0x7569, 0xAE8B, 0x756B, + 0xAE8C, 0x756C, 0xAE8D, 0x756D, 0xAE8E, 0x756E, 0xAE8F, 0x756F, 0xAE90, 0x7570, 0xAE91, 0x7571, 0xAE92, 0x7573, 0xAE93, 0x7575, + 0xAE94, 0x7576, 0xAE95, 0x7577, 0xAE96, 0x757A, 0xAE97, 0x757B, 0xAE98, 0x757C, 0xAE99, 0x757D, 0xAE9A, 0x757E, 0xAE9B, 0x7580, + 0xAE9C, 0x7581, 0xAE9D, 0x7582, 0xAE9E, 0x7584, 0xAE9F, 0x7585, 0xAEA0, 0x7587, 0xAF40, 0x7588, 0xAF41, 0x7589, 0xAF42, 0x758A, + 0xAF43, 0x758C, 0xAF44, 0x758D, 0xAF45, 0x758E, 0xAF46, 0x7590, 0xAF47, 0x7593, 0xAF48, 0x7595, 0xAF49, 0x7598, 0xAF4A, 0x759B, + 0xAF4B, 0x759C, 0xAF4C, 0x759E, 0xAF4D, 0x75A2, 0xAF4E, 0x75A6, 0xAF4F, 0x75A7, 0xAF50, 0x75A8, 0xAF51, 0x75A9, 0xAF52, 0x75AA, + 0xAF53, 0x75AD, 0xAF54, 0x75B6, 0xAF55, 0x75B7, 0xAF56, 0x75BA, 0xAF57, 0x75BB, 0xAF58, 0x75BF, 0xAF59, 0x75C0, 0xAF5A, 0x75C1, + 0xAF5B, 0x75C6, 0xAF5C, 0x75CB, 0xAF5D, 0x75CC, 0xAF5E, 0x75CE, 0xAF5F, 0x75CF, 0xAF60, 0x75D0, 0xAF61, 0x75D1, 0xAF62, 0x75D3, + 0xAF63, 0x75D7, 0xAF64, 0x75D9, 0xAF65, 0x75DA, 0xAF66, 0x75DC, 0xAF67, 0x75DD, 0xAF68, 0x75DF, 0xAF69, 0x75E0, 0xAF6A, 0x75E1, + 0xAF6B, 0x75E5, 0xAF6C, 0x75E9, 0xAF6D, 0x75EC, 0xAF6E, 0x75ED, 0xAF6F, 0x75EE, 0xAF70, 0x75EF, 0xAF71, 0x75F2, 0xAF72, 0x75F3, + 0xAF73, 0x75F5, 0xAF74, 0x75F6, 0xAF75, 0x75F7, 0xAF76, 0x75F8, 0xAF77, 0x75FA, 0xAF78, 0x75FB, 0xAF79, 0x75FD, 0xAF7A, 0x75FE, + 0xAF7B, 0x7602, 0xAF7C, 0x7604, 0xAF7D, 0x7606, 0xAF7E, 0x7607, 0xAF80, 0x7608, 0xAF81, 0x7609, 0xAF82, 0x760B, 0xAF83, 0x760D, + 0xAF84, 0x760E, 0xAF85, 0x760F, 0xAF86, 0x7611, 0xAF87, 0x7612, 0xAF88, 0x7613, 0xAF89, 0x7614, 0xAF8A, 0x7616, 0xAF8B, 0x761A, + 0xAF8C, 0x761C, 0xAF8D, 0x761D, 0xAF8E, 0x761E, 0xAF8F, 0x7621, 0xAF90, 0x7623, 0xAF91, 0x7627, 0xAF92, 0x7628, 0xAF93, 0x762C, + 0xAF94, 0x762E, 0xAF95, 0x762F, 0xAF96, 0x7631, 0xAF97, 0x7632, 0xAF98, 0x7636, 0xAF99, 0x7637, 0xAF9A, 0x7639, 0xAF9B, 0x763A, + 0xAF9C, 0x763B, 0xAF9D, 0x763D, 0xAF9E, 0x7641, 0xAF9F, 0x7642, 0xAFA0, 0x7644, 0xB040, 0x7645, 0xB041, 0x7646, 0xB042, 0x7647, + 0xB043, 0x7648, 0xB044, 0x7649, 0xB045, 0x764A, 0xB046, 0x764B, 0xB047, 0x764E, 0xB048, 0x764F, 0xB049, 0x7650, 0xB04A, 0x7651, + 0xB04B, 0x7652, 0xB04C, 0x7653, 0xB04D, 0x7655, 0xB04E, 0x7657, 0xB04F, 0x7658, 0xB050, 0x7659, 0xB051, 0x765A, 0xB052, 0x765B, + 0xB053, 0x765D, 0xB054, 0x765F, 0xB055, 0x7660, 0xB056, 0x7661, 0xB057, 0x7662, 0xB058, 0x7664, 0xB059, 0x7665, 0xB05A, 0x7666, + 0xB05B, 0x7667, 0xB05C, 0x7668, 0xB05D, 0x7669, 0xB05E, 0x766A, 0xB05F, 0x766C, 0xB060, 0x766D, 0xB061, 0x766E, 0xB062, 0x7670, + 0xB063, 0x7671, 0xB064, 0x7672, 0xB065, 0x7673, 0xB066, 0x7674, 0xB067, 0x7675, 0xB068, 0x7676, 0xB069, 0x7677, 0xB06A, 0x7679, + 0xB06B, 0x767A, 0xB06C, 0x767C, 0xB06D, 0x767F, 0xB06E, 0x7680, 0xB06F, 0x7681, 0xB070, 0x7683, 0xB071, 0x7685, 0xB072, 0x7689, + 0xB073, 0x768A, 0xB074, 0x768C, 0xB075, 0x768D, 0xB076, 0x768F, 0xB077, 0x7690, 0xB078, 0x7692, 0xB079, 0x7694, 0xB07A, 0x7695, + 0xB07B, 0x7697, 0xB07C, 0x7698, 0xB07D, 0x769A, 0xB07E, 0x769B, 0xB080, 0x769C, 0xB081, 0x769D, 0xB082, 0x769E, 0xB083, 0x769F, + 0xB084, 0x76A0, 0xB085, 0x76A1, 0xB086, 0x76A2, 0xB087, 0x76A3, 0xB088, 0x76A5, 0xB089, 0x76A6, 0xB08A, 0x76A7, 0xB08B, 0x76A8, + 0xB08C, 0x76A9, 0xB08D, 0x76AA, 0xB08E, 0x76AB, 0xB08F, 0x76AC, 0xB090, 0x76AD, 0xB091, 0x76AF, 0xB092, 0x76B0, 0xB093, 0x76B3, + 0xB094, 0x76B5, 0xB095, 0x76B6, 0xB096, 0x76B7, 0xB097, 0x76B8, 0xB098, 0x76B9, 0xB099, 0x76BA, 0xB09A, 0x76BB, 0xB09B, 0x76BC, + 0xB09C, 0x76BD, 0xB09D, 0x76BE, 0xB09E, 0x76C0, 0xB09F, 0x76C1, 0xB0A0, 0x76C3, 0xB0A1, 0x554A, 0xB0A2, 0x963F, 0xB0A3, 0x57C3, + 0xB0A4, 0x6328, 0xB0A5, 0x54CE, 0xB0A6, 0x5509, 0xB0A7, 0x54C0, 0xB0A8, 0x7691, 0xB0A9, 0x764C, 0xB0AA, 0x853C, 0xB0AB, 0x77EE, + 0xB0AC, 0x827E, 0xB0AD, 0x788D, 0xB0AE, 0x7231, 0xB0AF, 0x9698, 0xB0B0, 0x978D, 0xB0B1, 0x6C28, 0xB0B2, 0x5B89, 0xB0B3, 0x4FFA, + 0xB0B4, 0x6309, 0xB0B5, 0x6697, 0xB0B6, 0x5CB8, 0xB0B7, 0x80FA, 0xB0B8, 0x6848, 0xB0B9, 0x80AE, 0xB0BA, 0x6602, 0xB0BB, 0x76CE, + 0xB0BC, 0x51F9, 0xB0BD, 0x6556, 0xB0BE, 0x71AC, 0xB0BF, 0x7FF1, 0xB0C0, 0x8884, 0xB0C1, 0x50B2, 0xB0C2, 0x5965, 0xB0C3, 0x61CA, + 0xB0C4, 0x6FB3, 0xB0C5, 0x82AD, 0xB0C6, 0x634C, 0xB0C7, 0x6252, 0xB0C8, 0x53ED, 0xB0C9, 0x5427, 0xB0CA, 0x7B06, 0xB0CB, 0x516B, + 0xB0CC, 0x75A4, 0xB0CD, 0x5DF4, 0xB0CE, 0x62D4, 0xB0CF, 0x8DCB, 0xB0D0, 0x9776, 0xB0D1, 0x628A, 0xB0D2, 0x8019, 0xB0D3, 0x575D, + 0xB0D4, 0x9738, 0xB0D5, 0x7F62, 0xB0D6, 0x7238, 0xB0D7, 0x767D, 0xB0D8, 0x67CF, 0xB0D9, 0x767E, 0xB0DA, 0x6446, 0xB0DB, 0x4F70, + 0xB0DC, 0x8D25, 0xB0DD, 0x62DC, 0xB0DE, 0x7A17, 0xB0DF, 0x6591, 0xB0E0, 0x73ED, 0xB0E1, 0x642C, 0xB0E2, 0x6273, 0xB0E3, 0x822C, + 0xB0E4, 0x9881, 0xB0E5, 0x677F, 0xB0E6, 0x7248, 0xB0E7, 0x626E, 0xB0E8, 0x62CC, 0xB0E9, 0x4F34, 0xB0EA, 0x74E3, 0xB0EB, 0x534A, + 0xB0EC, 0x529E, 0xB0ED, 0x7ECA, 0xB0EE, 0x90A6, 0xB0EF, 0x5E2E, 0xB0F0, 0x6886, 0xB0F1, 0x699C, 0xB0F2, 0x8180, 0xB0F3, 0x7ED1, + 0xB0F4, 0x68D2, 0xB0F5, 0x78C5, 0xB0F6, 0x868C, 0xB0F7, 0x9551, 0xB0F8, 0x508D, 0xB0F9, 0x8C24, 0xB0FA, 0x82DE, 0xB0FB, 0x80DE, + 0xB0FC, 0x5305, 0xB0FD, 0x8912, 0xB0FE, 0x5265, 0xB140, 0x76C4, 0xB141, 0x76C7, 0xB142, 0x76C9, 0xB143, 0x76CB, 0xB144, 0x76CC, + 0xB145, 0x76D3, 0xB146, 0x76D5, 0xB147, 0x76D9, 0xB148, 0x76DA, 0xB149, 0x76DC, 0xB14A, 0x76DD, 0xB14B, 0x76DE, 0xB14C, 0x76E0, + 0xB14D, 0x76E1, 0xB14E, 0x76E2, 0xB14F, 0x76E3, 0xB150, 0x76E4, 0xB151, 0x76E6, 0xB152, 0x76E7, 0xB153, 0x76E8, 0xB154, 0x76E9, + 0xB155, 0x76EA, 0xB156, 0x76EB, 0xB157, 0x76EC, 0xB158, 0x76ED, 0xB159, 0x76F0, 0xB15A, 0x76F3, 0xB15B, 0x76F5, 0xB15C, 0x76F6, + 0xB15D, 0x76F7, 0xB15E, 0x76FA, 0xB15F, 0x76FB, 0xB160, 0x76FD, 0xB161, 0x76FF, 0xB162, 0x7700, 0xB163, 0x7702, 0xB164, 0x7703, + 0xB165, 0x7705, 0xB166, 0x7706, 0xB167, 0x770A, 0xB168, 0x770C, 0xB169, 0x770E, 0xB16A, 0x770F, 0xB16B, 0x7710, 0xB16C, 0x7711, + 0xB16D, 0x7712, 0xB16E, 0x7713, 0xB16F, 0x7714, 0xB170, 0x7715, 0xB171, 0x7716, 0xB172, 0x7717, 0xB173, 0x7718, 0xB174, 0x771B, + 0xB175, 0x771C, 0xB176, 0x771D, 0xB177, 0x771E, 0xB178, 0x7721, 0xB179, 0x7723, 0xB17A, 0x7724, 0xB17B, 0x7725, 0xB17C, 0x7727, + 0xB17D, 0x772A, 0xB17E, 0x772B, 0xB180, 0x772C, 0xB181, 0x772E, 0xB182, 0x7730, 0xB183, 0x7731, 0xB184, 0x7732, 0xB185, 0x7733, + 0xB186, 0x7734, 0xB187, 0x7739, 0xB188, 0x773B, 0xB189, 0x773D, 0xB18A, 0x773E, 0xB18B, 0x773F, 0xB18C, 0x7742, 0xB18D, 0x7744, + 0xB18E, 0x7745, 0xB18F, 0x7746, 0xB190, 0x7748, 0xB191, 0x7749, 0xB192, 0x774A, 0xB193, 0x774B, 0xB194, 0x774C, 0xB195, 0x774D, + 0xB196, 0x774E, 0xB197, 0x774F, 0xB198, 0x7752, 0xB199, 0x7753, 0xB19A, 0x7754, 0xB19B, 0x7755, 0xB19C, 0x7756, 0xB19D, 0x7757, + 0xB19E, 0x7758, 0xB19F, 0x7759, 0xB1A0, 0x775C, 0xB1A1, 0x8584, 0xB1A2, 0x96F9, 0xB1A3, 0x4FDD, 0xB1A4, 0x5821, 0xB1A5, 0x9971, + 0xB1A6, 0x5B9D, 0xB1A7, 0x62B1, 0xB1A8, 0x62A5, 0xB1A9, 0x66B4, 0xB1AA, 0x8C79, 0xB1AB, 0x9C8D, 0xB1AC, 0x7206, 0xB1AD, 0x676F, + 0xB1AE, 0x7891, 0xB1AF, 0x60B2, 0xB1B0, 0x5351, 0xB1B1, 0x5317, 0xB1B2, 0x8F88, 0xB1B3, 0x80CC, 0xB1B4, 0x8D1D, 0xB1B5, 0x94A1, + 0xB1B6, 0x500D, 0xB1B7, 0x72C8, 0xB1B8, 0x5907, 0xB1B9, 0x60EB, 0xB1BA, 0x7119, 0xB1BB, 0x88AB, 0xB1BC, 0x5954, 0xB1BD, 0x82EF, + 0xB1BE, 0x672C, 0xB1BF, 0x7B28, 0xB1C0, 0x5D29, 0xB1C1, 0x7EF7, 0xB1C2, 0x752D, 0xB1C3, 0x6CF5, 0xB1C4, 0x8E66, 0xB1C5, 0x8FF8, + 0xB1C6, 0x903C, 0xB1C7, 0x9F3B, 0xB1C8, 0x6BD4, 0xB1C9, 0x9119, 0xB1CA, 0x7B14, 0xB1CB, 0x5F7C, 0xB1CC, 0x78A7, 0xB1CD, 0x84D6, + 0xB1CE, 0x853D, 0xB1CF, 0x6BD5, 0xB1D0, 0x6BD9, 0xB1D1, 0x6BD6, 0xB1D2, 0x5E01, 0xB1D3, 0x5E87, 0xB1D4, 0x75F9, 0xB1D5, 0x95ED, + 0xB1D6, 0x655D, 0xB1D7, 0x5F0A, 0xB1D8, 0x5FC5, 0xB1D9, 0x8F9F, 0xB1DA, 0x58C1, 0xB1DB, 0x81C2, 0xB1DC, 0x907F, 0xB1DD, 0x965B, + 0xB1DE, 0x97AD, 0xB1DF, 0x8FB9, 0xB1E0, 0x7F16, 0xB1E1, 0x8D2C, 0xB1E2, 0x6241, 0xB1E3, 0x4FBF, 0xB1E4, 0x53D8, 0xB1E5, 0x535E, + 0xB1E6, 0x8FA8, 0xB1E7, 0x8FA9, 0xB1E8, 0x8FAB, 0xB1E9, 0x904D, 0xB1EA, 0x6807, 0xB1EB, 0x5F6A, 0xB1EC, 0x8198, 0xB1ED, 0x8868, + 0xB1EE, 0x9CD6, 0xB1EF, 0x618B, 0xB1F0, 0x522B, 0xB1F1, 0x762A, 0xB1F2, 0x5F6C, 0xB1F3, 0x658C, 0xB1F4, 0x6FD2, 0xB1F5, 0x6EE8, + 0xB1F6, 0x5BBE, 0xB1F7, 0x6448, 0xB1F8, 0x5175, 0xB1F9, 0x51B0, 0xB1FA, 0x67C4, 0xB1FB, 0x4E19, 0xB1FC, 0x79C9, 0xB1FD, 0x997C, + 0xB1FE, 0x70B3, 0xB240, 0x775D, 0xB241, 0x775E, 0xB242, 0x775F, 0xB243, 0x7760, 0xB244, 0x7764, 0xB245, 0x7767, 0xB246, 0x7769, + 0xB247, 0x776A, 0xB248, 0x776D, 0xB249, 0x776E, 0xB24A, 0x776F, 0xB24B, 0x7770, 0xB24C, 0x7771, 0xB24D, 0x7772, 0xB24E, 0x7773, + 0xB24F, 0x7774, 0xB250, 0x7775, 0xB251, 0x7776, 0xB252, 0x7777, 0xB253, 0x7778, 0xB254, 0x777A, 0xB255, 0x777B, 0xB256, 0x777C, + 0xB257, 0x7781, 0xB258, 0x7782, 0xB259, 0x7783, 0xB25A, 0x7786, 0xB25B, 0x7787, 0xB25C, 0x7788, 0xB25D, 0x7789, 0xB25E, 0x778A, + 0xB25F, 0x778B, 0xB260, 0x778F, 0xB261, 0x7790, 0xB262, 0x7793, 0xB263, 0x7794, 0xB264, 0x7795, 0xB265, 0x7796, 0xB266, 0x7797, + 0xB267, 0x7798, 0xB268, 0x7799, 0xB269, 0x779A, 0xB26A, 0x779B, 0xB26B, 0x779C, 0xB26C, 0x779D, 0xB26D, 0x779E, 0xB26E, 0x77A1, + 0xB26F, 0x77A3, 0xB270, 0x77A4, 0xB271, 0x77A6, 0xB272, 0x77A8, 0xB273, 0x77AB, 0xB274, 0x77AD, 0xB275, 0x77AE, 0xB276, 0x77AF, + 0xB277, 0x77B1, 0xB278, 0x77B2, 0xB279, 0x77B4, 0xB27A, 0x77B6, 0xB27B, 0x77B7, 0xB27C, 0x77B8, 0xB27D, 0x77B9, 0xB27E, 0x77BA, + 0xB280, 0x77BC, 0xB281, 0x77BE, 0xB282, 0x77C0, 0xB283, 0x77C1, 0xB284, 0x77C2, 0xB285, 0x77C3, 0xB286, 0x77C4, 0xB287, 0x77C5, + 0xB288, 0x77C6, 0xB289, 0x77C7, 0xB28A, 0x77C8, 0xB28B, 0x77C9, 0xB28C, 0x77CA, 0xB28D, 0x77CB, 0xB28E, 0x77CC, 0xB28F, 0x77CE, + 0xB290, 0x77CF, 0xB291, 0x77D0, 0xB292, 0x77D1, 0xB293, 0x77D2, 0xB294, 0x77D3, 0xB295, 0x77D4, 0xB296, 0x77D5, 0xB297, 0x77D6, + 0xB298, 0x77D8, 0xB299, 0x77D9, 0xB29A, 0x77DA, 0xB29B, 0x77DD, 0xB29C, 0x77DE, 0xB29D, 0x77DF, 0xB29E, 0x77E0, 0xB29F, 0x77E1, + 0xB2A0, 0x77E4, 0xB2A1, 0x75C5, 0xB2A2, 0x5E76, 0xB2A3, 0x73BB, 0xB2A4, 0x83E0, 0xB2A5, 0x64AD, 0xB2A6, 0x62E8, 0xB2A7, 0x94B5, + 0xB2A8, 0x6CE2, 0xB2A9, 0x535A, 0xB2AA, 0x52C3, 0xB2AB, 0x640F, 0xB2AC, 0x94C2, 0xB2AD, 0x7B94, 0xB2AE, 0x4F2F, 0xB2AF, 0x5E1B, + 0xB2B0, 0x8236, 0xB2B1, 0x8116, 0xB2B2, 0x818A, 0xB2B3, 0x6E24, 0xB2B4, 0x6CCA, 0xB2B5, 0x9A73, 0xB2B6, 0x6355, 0xB2B7, 0x535C, + 0xB2B8, 0x54FA, 0xB2B9, 0x8865, 0xB2BA, 0x57E0, 0xB2BB, 0x4E0D, 0xB2BC, 0x5E03, 0xB2BD, 0x6B65, 0xB2BE, 0x7C3F, 0xB2BF, 0x90E8, + 0xB2C0, 0x6016, 0xB2C1, 0x64E6, 0xB2C2, 0x731C, 0xB2C3, 0x88C1, 0xB2C4, 0x6750, 0xB2C5, 0x624D, 0xB2C6, 0x8D22, 0xB2C7, 0x776C, + 0xB2C8, 0x8E29, 0xB2C9, 0x91C7, 0xB2CA, 0x5F69, 0xB2CB, 0x83DC, 0xB2CC, 0x8521, 0xB2CD, 0x9910, 0xB2CE, 0x53C2, 0xB2CF, 0x8695, + 0xB2D0, 0x6B8B, 0xB2D1, 0x60ED, 0xB2D2, 0x60E8, 0xB2D3, 0x707F, 0xB2D4, 0x82CD, 0xB2D5, 0x8231, 0xB2D6, 0x4ED3, 0xB2D7, 0x6CA7, + 0xB2D8, 0x85CF, 0xB2D9, 0x64CD, 0xB2DA, 0x7CD9, 0xB2DB, 0x69FD, 0xB2DC, 0x66F9, 0xB2DD, 0x8349, 0xB2DE, 0x5395, 0xB2DF, 0x7B56, + 0xB2E0, 0x4FA7, 0xB2E1, 0x518C, 0xB2E2, 0x6D4B, 0xB2E3, 0x5C42, 0xB2E4, 0x8E6D, 0xB2E5, 0x63D2, 0xB2E6, 0x53C9, 0xB2E7, 0x832C, + 0xB2E8, 0x8336, 0xB2E9, 0x67E5, 0xB2EA, 0x78B4, 0xB2EB, 0x643D, 0xB2EC, 0x5BDF, 0xB2ED, 0x5C94, 0xB2EE, 0x5DEE, 0xB2EF, 0x8BE7, + 0xB2F0, 0x62C6, 0xB2F1, 0x67F4, 0xB2F2, 0x8C7A, 0xB2F3, 0x6400, 0xB2F4, 0x63BA, 0xB2F5, 0x8749, 0xB2F6, 0x998B, 0xB2F7, 0x8C17, + 0xB2F8, 0x7F20, 0xB2F9, 0x94F2, 0xB2FA, 0x4EA7, 0xB2FB, 0x9610, 0xB2FC, 0x98A4, 0xB2FD, 0x660C, 0xB2FE, 0x7316, 0xB340, 0x77E6, + 0xB341, 0x77E8, 0xB342, 0x77EA, 0xB343, 0x77EF, 0xB344, 0x77F0, 0xB345, 0x77F1, 0xB346, 0x77F2, 0xB347, 0x77F4, 0xB348, 0x77F5, + 0xB349, 0x77F7, 0xB34A, 0x77F9, 0xB34B, 0x77FA, 0xB34C, 0x77FB, 0xB34D, 0x77FC, 0xB34E, 0x7803, 0xB34F, 0x7804, 0xB350, 0x7805, + 0xB351, 0x7806, 0xB352, 0x7807, 0xB353, 0x7808, 0xB354, 0x780A, 0xB355, 0x780B, 0xB356, 0x780E, 0xB357, 0x780F, 0xB358, 0x7810, + 0xB359, 0x7813, 0xB35A, 0x7815, 0xB35B, 0x7819, 0xB35C, 0x781B, 0xB35D, 0x781E, 0xB35E, 0x7820, 0xB35F, 0x7821, 0xB360, 0x7822, + 0xB361, 0x7824, 0xB362, 0x7828, 0xB363, 0x782A, 0xB364, 0x782B, 0xB365, 0x782E, 0xB366, 0x782F, 0xB367, 0x7831, 0xB368, 0x7832, + 0xB369, 0x7833, 0xB36A, 0x7835, 0xB36B, 0x7836, 0xB36C, 0x783D, 0xB36D, 0x783F, 0xB36E, 0x7841, 0xB36F, 0x7842, 0xB370, 0x7843, + 0xB371, 0x7844, 0xB372, 0x7846, 0xB373, 0x7848, 0xB374, 0x7849, 0xB375, 0x784A, 0xB376, 0x784B, 0xB377, 0x784D, 0xB378, 0x784F, + 0xB379, 0x7851, 0xB37A, 0x7853, 0xB37B, 0x7854, 0xB37C, 0x7858, 0xB37D, 0x7859, 0xB37E, 0x785A, 0xB380, 0x785B, 0xB381, 0x785C, + 0xB382, 0x785E, 0xB383, 0x785F, 0xB384, 0x7860, 0xB385, 0x7861, 0xB386, 0x7862, 0xB387, 0x7863, 0xB388, 0x7864, 0xB389, 0x7865, + 0xB38A, 0x7866, 0xB38B, 0x7867, 0xB38C, 0x7868, 0xB38D, 0x7869, 0xB38E, 0x786F, 0xB38F, 0x7870, 0xB390, 0x7871, 0xB391, 0x7872, + 0xB392, 0x7873, 0xB393, 0x7874, 0xB394, 0x7875, 0xB395, 0x7876, 0xB396, 0x7878, 0xB397, 0x7879, 0xB398, 0x787A, 0xB399, 0x787B, + 0xB39A, 0x787D, 0xB39B, 0x787E, 0xB39C, 0x787F, 0xB39D, 0x7880, 0xB39E, 0x7881, 0xB39F, 0x7882, 0xB3A0, 0x7883, 0xB3A1, 0x573A, + 0xB3A2, 0x5C1D, 0xB3A3, 0x5E38, 0xB3A4, 0x957F, 0xB3A5, 0x507F, 0xB3A6, 0x80A0, 0xB3A7, 0x5382, 0xB3A8, 0x655E, 0xB3A9, 0x7545, + 0xB3AA, 0x5531, 0xB3AB, 0x5021, 0xB3AC, 0x8D85, 0xB3AD, 0x6284, 0xB3AE, 0x949E, 0xB3AF, 0x671D, 0xB3B0, 0x5632, 0xB3B1, 0x6F6E, + 0xB3B2, 0x5DE2, 0xB3B3, 0x5435, 0xB3B4, 0x7092, 0xB3B5, 0x8F66, 0xB3B6, 0x626F, 0xB3B7, 0x64A4, 0xB3B8, 0x63A3, 0xB3B9, 0x5F7B, + 0xB3BA, 0x6F88, 0xB3BB, 0x90F4, 0xB3BC, 0x81E3, 0xB3BD, 0x8FB0, 0xB3BE, 0x5C18, 0xB3BF, 0x6668, 0xB3C0, 0x5FF1, 0xB3C1, 0x6C89, + 0xB3C2, 0x9648, 0xB3C3, 0x8D81, 0xB3C4, 0x886C, 0xB3C5, 0x6491, 0xB3C6, 0x79F0, 0xB3C7, 0x57CE, 0xB3C8, 0x6A59, 0xB3C9, 0x6210, + 0xB3CA, 0x5448, 0xB3CB, 0x4E58, 0xB3CC, 0x7A0B, 0xB3CD, 0x60E9, 0xB3CE, 0x6F84, 0xB3CF, 0x8BDA, 0xB3D0, 0x627F, 0xB3D1, 0x901E, + 0xB3D2, 0x9A8B, 0xB3D3, 0x79E4, 0xB3D4, 0x5403, 0xB3D5, 0x75F4, 0xB3D6, 0x6301, 0xB3D7, 0x5319, 0xB3D8, 0x6C60, 0xB3D9, 0x8FDF, + 0xB3DA, 0x5F1B, 0xB3DB, 0x9A70, 0xB3DC, 0x803B, 0xB3DD, 0x9F7F, 0xB3DE, 0x4F88, 0xB3DF, 0x5C3A, 0xB3E0, 0x8D64, 0xB3E1, 0x7FC5, + 0xB3E2, 0x65A5, 0xB3E3, 0x70BD, 0xB3E4, 0x5145, 0xB3E5, 0x51B2, 0xB3E6, 0x866B, 0xB3E7, 0x5D07, 0xB3E8, 0x5BA0, 0xB3E9, 0x62BD, + 0xB3EA, 0x916C, 0xB3EB, 0x7574, 0xB3EC, 0x8E0C, 0xB3ED, 0x7A20, 0xB3EE, 0x6101, 0xB3EF, 0x7B79, 0xB3F0, 0x4EC7, 0xB3F1, 0x7EF8, + 0xB3F2, 0x7785, 0xB3F3, 0x4E11, 0xB3F4, 0x81ED, 0xB3F5, 0x521D, 0xB3F6, 0x51FA, 0xB3F7, 0x6A71, 0xB3F8, 0x53A8, 0xB3F9, 0x8E87, + 0xB3FA, 0x9504, 0xB3FB, 0x96CF, 0xB3FC, 0x6EC1, 0xB3FD, 0x9664, 0xB3FE, 0x695A, 0xB440, 0x7884, 0xB441, 0x7885, 0xB442, 0x7886, + 0xB443, 0x7888, 0xB444, 0x788A, 0xB445, 0x788B, 0xB446, 0x788F, 0xB447, 0x7890, 0xB448, 0x7892, 0xB449, 0x7894, 0xB44A, 0x7895, + 0xB44B, 0x7896, 0xB44C, 0x7899, 0xB44D, 0x789D, 0xB44E, 0x789E, 0xB44F, 0x78A0, 0xB450, 0x78A2, 0xB451, 0x78A4, 0xB452, 0x78A6, + 0xB453, 0x78A8, 0xB454, 0x78A9, 0xB455, 0x78AA, 0xB456, 0x78AB, 0xB457, 0x78AC, 0xB458, 0x78AD, 0xB459, 0x78AE, 0xB45A, 0x78AF, + 0xB45B, 0x78B5, 0xB45C, 0x78B6, 0xB45D, 0x78B7, 0xB45E, 0x78B8, 0xB45F, 0x78BA, 0xB460, 0x78BB, 0xB461, 0x78BC, 0xB462, 0x78BD, + 0xB463, 0x78BF, 0xB464, 0x78C0, 0xB465, 0x78C2, 0xB466, 0x78C3, 0xB467, 0x78C4, 0xB468, 0x78C6, 0xB469, 0x78C7, 0xB46A, 0x78C8, + 0xB46B, 0x78CC, 0xB46C, 0x78CD, 0xB46D, 0x78CE, 0xB46E, 0x78CF, 0xB46F, 0x78D1, 0xB470, 0x78D2, 0xB471, 0x78D3, 0xB472, 0x78D6, + 0xB473, 0x78D7, 0xB474, 0x78D8, 0xB475, 0x78DA, 0xB476, 0x78DB, 0xB477, 0x78DC, 0xB478, 0x78DD, 0xB479, 0x78DE, 0xB47A, 0x78DF, + 0xB47B, 0x78E0, 0xB47C, 0x78E1, 0xB47D, 0x78E2, 0xB47E, 0x78E3, 0xB480, 0x78E4, 0xB481, 0x78E5, 0xB482, 0x78E6, 0xB483, 0x78E7, + 0xB484, 0x78E9, 0xB485, 0x78EA, 0xB486, 0x78EB, 0xB487, 0x78ED, 0xB488, 0x78EE, 0xB489, 0x78EF, 0xB48A, 0x78F0, 0xB48B, 0x78F1, + 0xB48C, 0x78F3, 0xB48D, 0x78F5, 0xB48E, 0x78F6, 0xB48F, 0x78F8, 0xB490, 0x78F9, 0xB491, 0x78FB, 0xB492, 0x78FC, 0xB493, 0x78FD, + 0xB494, 0x78FE, 0xB495, 0x78FF, 0xB496, 0x7900, 0xB497, 0x7902, 0xB498, 0x7903, 0xB499, 0x7904, 0xB49A, 0x7906, 0xB49B, 0x7907, + 0xB49C, 0x7908, 0xB49D, 0x7909, 0xB49E, 0x790A, 0xB49F, 0x790B, 0xB4A0, 0x790C, 0xB4A1, 0x7840, 0xB4A2, 0x50A8, 0xB4A3, 0x77D7, + 0xB4A4, 0x6410, 0xB4A5, 0x89E6, 0xB4A6, 0x5904, 0xB4A7, 0x63E3, 0xB4A8, 0x5DDD, 0xB4A9, 0x7A7F, 0xB4AA, 0x693D, 0xB4AB, 0x4F20, + 0xB4AC, 0x8239, 0xB4AD, 0x5598, 0xB4AE, 0x4E32, 0xB4AF, 0x75AE, 0xB4B0, 0x7A97, 0xB4B1, 0x5E62, 0xB4B2, 0x5E8A, 0xB4B3, 0x95EF, + 0xB4B4, 0x521B, 0xB4B5, 0x5439, 0xB4B6, 0x708A, 0xB4B7, 0x6376, 0xB4B8, 0x9524, 0xB4B9, 0x5782, 0xB4BA, 0x6625, 0xB4BB, 0x693F, + 0xB4BC, 0x9187, 0xB4BD, 0x5507, 0xB4BE, 0x6DF3, 0xB4BF, 0x7EAF, 0xB4C0, 0x8822, 0xB4C1, 0x6233, 0xB4C2, 0x7EF0, 0xB4C3, 0x75B5, + 0xB4C4, 0x8328, 0xB4C5, 0x78C1, 0xB4C6, 0x96CC, 0xB4C7, 0x8F9E, 0xB4C8, 0x6148, 0xB4C9, 0x74F7, 0xB4CA, 0x8BCD, 0xB4CB, 0x6B64, + 0xB4CC, 0x523A, 0xB4CD, 0x8D50, 0xB4CE, 0x6B21, 0xB4CF, 0x806A, 0xB4D0, 0x8471, 0xB4D1, 0x56F1, 0xB4D2, 0x5306, 0xB4D3, 0x4ECE, + 0xB4D4, 0x4E1B, 0xB4D5, 0x51D1, 0xB4D6, 0x7C97, 0xB4D7, 0x918B, 0xB4D8, 0x7C07, 0xB4D9, 0x4FC3, 0xB4DA, 0x8E7F, 0xB4DB, 0x7BE1, + 0xB4DC, 0x7A9C, 0xB4DD, 0x6467, 0xB4DE, 0x5D14, 0xB4DF, 0x50AC, 0xB4E0, 0x8106, 0xB4E1, 0x7601, 0xB4E2, 0x7CB9, 0xB4E3, 0x6DEC, + 0xB4E4, 0x7FE0, 0xB4E5, 0x6751, 0xB4E6, 0x5B58, 0xB4E7, 0x5BF8, 0xB4E8, 0x78CB, 0xB4E9, 0x64AE, 0xB4EA, 0x6413, 0xB4EB, 0x63AA, + 0xB4EC, 0x632B, 0xB4ED, 0x9519, 0xB4EE, 0x642D, 0xB4EF, 0x8FBE, 0xB4F0, 0x7B54, 0xB4F1, 0x7629, 0xB4F2, 0x6253, 0xB4F3, 0x5927, + 0xB4F4, 0x5446, 0xB4F5, 0x6B79, 0xB4F6, 0x50A3, 0xB4F7, 0x6234, 0xB4F8, 0x5E26, 0xB4F9, 0x6B86, 0xB4FA, 0x4EE3, 0xB4FB, 0x8D37, + 0xB4FC, 0x888B, 0xB4FD, 0x5F85, 0xB4FE, 0x902E, 0xB540, 0x790D, 0xB541, 0x790E, 0xB542, 0x790F, 0xB543, 0x7910, 0xB544, 0x7911, + 0xB545, 0x7912, 0xB546, 0x7914, 0xB547, 0x7915, 0xB548, 0x7916, 0xB549, 0x7917, 0xB54A, 0x7918, 0xB54B, 0x7919, 0xB54C, 0x791A, + 0xB54D, 0x791B, 0xB54E, 0x791C, 0xB54F, 0x791D, 0xB550, 0x791F, 0xB551, 0x7920, 0xB552, 0x7921, 0xB553, 0x7922, 0xB554, 0x7923, + 0xB555, 0x7925, 0xB556, 0x7926, 0xB557, 0x7927, 0xB558, 0x7928, 0xB559, 0x7929, 0xB55A, 0x792A, 0xB55B, 0x792B, 0xB55C, 0x792C, + 0xB55D, 0x792D, 0xB55E, 0x792E, 0xB55F, 0x792F, 0xB560, 0x7930, 0xB561, 0x7931, 0xB562, 0x7932, 0xB563, 0x7933, 0xB564, 0x7935, + 0xB565, 0x7936, 0xB566, 0x7937, 0xB567, 0x7938, 0xB568, 0x7939, 0xB569, 0x793D, 0xB56A, 0x793F, 0xB56B, 0x7942, 0xB56C, 0x7943, + 0xB56D, 0x7944, 0xB56E, 0x7945, 0xB56F, 0x7947, 0xB570, 0x794A, 0xB571, 0x794B, 0xB572, 0x794C, 0xB573, 0x794D, 0xB574, 0x794E, + 0xB575, 0x794F, 0xB576, 0x7950, 0xB577, 0x7951, 0xB578, 0x7952, 0xB579, 0x7954, 0xB57A, 0x7955, 0xB57B, 0x7958, 0xB57C, 0x7959, + 0xB57D, 0x7961, 0xB57E, 0x7963, 0xB580, 0x7964, 0xB581, 0x7966, 0xB582, 0x7969, 0xB583, 0x796A, 0xB584, 0x796B, 0xB585, 0x796C, + 0xB586, 0x796E, 0xB587, 0x7970, 0xB588, 0x7971, 0xB589, 0x7972, 0xB58A, 0x7973, 0xB58B, 0x7974, 0xB58C, 0x7975, 0xB58D, 0x7976, + 0xB58E, 0x7979, 0xB58F, 0x797B, 0xB590, 0x797C, 0xB591, 0x797D, 0xB592, 0x797E, 0xB593, 0x797F, 0xB594, 0x7982, 0xB595, 0x7983, + 0xB596, 0x7986, 0xB597, 0x7987, 0xB598, 0x7988, 0xB599, 0x7989, 0xB59A, 0x798B, 0xB59B, 0x798C, 0xB59C, 0x798D, 0xB59D, 0x798E, + 0xB59E, 0x7990, 0xB59F, 0x7991, 0xB5A0, 0x7992, 0xB5A1, 0x6020, 0xB5A2, 0x803D, 0xB5A3, 0x62C5, 0xB5A4, 0x4E39, 0xB5A5, 0x5355, + 0xB5A6, 0x90F8, 0xB5A7, 0x63B8, 0xB5A8, 0x80C6, 0xB5A9, 0x65E6, 0xB5AA, 0x6C2E, 0xB5AB, 0x4F46, 0xB5AC, 0x60EE, 0xB5AD, 0x6DE1, + 0xB5AE, 0x8BDE, 0xB5AF, 0x5F39, 0xB5B0, 0x86CB, 0xB5B1, 0x5F53, 0xB5B2, 0x6321, 0xB5B3, 0x515A, 0xB5B4, 0x8361, 0xB5B5, 0x6863, + 0xB5B6, 0x5200, 0xB5B7, 0x6363, 0xB5B8, 0x8E48, 0xB5B9, 0x5012, 0xB5BA, 0x5C9B, 0xB5BB, 0x7977, 0xB5BC, 0x5BFC, 0xB5BD, 0x5230, + 0xB5BE, 0x7A3B, 0xB5BF, 0x60BC, 0xB5C0, 0x9053, 0xB5C1, 0x76D7, 0xB5C2, 0x5FB7, 0xB5C3, 0x5F97, 0xB5C4, 0x7684, 0xB5C5, 0x8E6C, + 0xB5C6, 0x706F, 0xB5C7, 0x767B, 0xB5C8, 0x7B49, 0xB5C9, 0x77AA, 0xB5CA, 0x51F3, 0xB5CB, 0x9093, 0xB5CC, 0x5824, 0xB5CD, 0x4F4E, + 0xB5CE, 0x6EF4, 0xB5CF, 0x8FEA, 0xB5D0, 0x654C, 0xB5D1, 0x7B1B, 0xB5D2, 0x72C4, 0xB5D3, 0x6DA4, 0xB5D4, 0x7FDF, 0xB5D5, 0x5AE1, + 0xB5D6, 0x62B5, 0xB5D7, 0x5E95, 0xB5D8, 0x5730, 0xB5D9, 0x8482, 0xB5DA, 0x7B2C, 0xB5DB, 0x5E1D, 0xB5DC, 0x5F1F, 0xB5DD, 0x9012, + 0xB5DE, 0x7F14, 0xB5DF, 0x98A0, 0xB5E0, 0x6382, 0xB5E1, 0x6EC7, 0xB5E2, 0x7898, 0xB5E3, 0x70B9, 0xB5E4, 0x5178, 0xB5E5, 0x975B, + 0xB5E6, 0x57AB, 0xB5E7, 0x7535, 0xB5E8, 0x4F43, 0xB5E9, 0x7538, 0xB5EA, 0x5E97, 0xB5EB, 0x60E6, 0xB5EC, 0x5960, 0xB5ED, 0x6DC0, + 0xB5EE, 0x6BBF, 0xB5EF, 0x7889, 0xB5F0, 0x53FC, 0xB5F1, 0x96D5, 0xB5F2, 0x51CB, 0xB5F3, 0x5201, 0xB5F4, 0x6389, 0xB5F5, 0x540A, + 0xB5F6, 0x9493, 0xB5F7, 0x8C03, 0xB5F8, 0x8DCC, 0xB5F9, 0x7239, 0xB5FA, 0x789F, 0xB5FB, 0x8776, 0xB5FC, 0x8FED, 0xB5FD, 0x8C0D, + 0xB5FE, 0x53E0, 0xB640, 0x7993, 0xB641, 0x7994, 0xB642, 0x7995, 0xB643, 0x7996, 0xB644, 0x7997, 0xB645, 0x7998, 0xB646, 0x7999, + 0xB647, 0x799B, 0xB648, 0x799C, 0xB649, 0x799D, 0xB64A, 0x799E, 0xB64B, 0x799F, 0xB64C, 0x79A0, 0xB64D, 0x79A1, 0xB64E, 0x79A2, + 0xB64F, 0x79A3, 0xB650, 0x79A4, 0xB651, 0x79A5, 0xB652, 0x79A6, 0xB653, 0x79A8, 0xB654, 0x79A9, 0xB655, 0x79AA, 0xB656, 0x79AB, + 0xB657, 0x79AC, 0xB658, 0x79AD, 0xB659, 0x79AE, 0xB65A, 0x79AF, 0xB65B, 0x79B0, 0xB65C, 0x79B1, 0xB65D, 0x79B2, 0xB65E, 0x79B4, + 0xB65F, 0x79B5, 0xB660, 0x79B6, 0xB661, 0x79B7, 0xB662, 0x79B8, 0xB663, 0x79BC, 0xB664, 0x79BF, 0xB665, 0x79C2, 0xB666, 0x79C4, + 0xB667, 0x79C5, 0xB668, 0x79C7, 0xB669, 0x79C8, 0xB66A, 0x79CA, 0xB66B, 0x79CC, 0xB66C, 0x79CE, 0xB66D, 0x79CF, 0xB66E, 0x79D0, + 0xB66F, 0x79D3, 0xB670, 0x79D4, 0xB671, 0x79D6, 0xB672, 0x79D7, 0xB673, 0x79D9, 0xB674, 0x79DA, 0xB675, 0x79DB, 0xB676, 0x79DC, + 0xB677, 0x79DD, 0xB678, 0x79DE, 0xB679, 0x79E0, 0xB67A, 0x79E1, 0xB67B, 0x79E2, 0xB67C, 0x79E5, 0xB67D, 0x79E8, 0xB67E, 0x79EA, + 0xB680, 0x79EC, 0xB681, 0x79EE, 0xB682, 0x79F1, 0xB683, 0x79F2, 0xB684, 0x79F3, 0xB685, 0x79F4, 0xB686, 0x79F5, 0xB687, 0x79F6, + 0xB688, 0x79F7, 0xB689, 0x79F9, 0xB68A, 0x79FA, 0xB68B, 0x79FC, 0xB68C, 0x79FE, 0xB68D, 0x79FF, 0xB68E, 0x7A01, 0xB68F, 0x7A04, + 0xB690, 0x7A05, 0xB691, 0x7A07, 0xB692, 0x7A08, 0xB693, 0x7A09, 0xB694, 0x7A0A, 0xB695, 0x7A0C, 0xB696, 0x7A0F, 0xB697, 0x7A10, + 0xB698, 0x7A11, 0xB699, 0x7A12, 0xB69A, 0x7A13, 0xB69B, 0x7A15, 0xB69C, 0x7A16, 0xB69D, 0x7A18, 0xB69E, 0x7A19, 0xB69F, 0x7A1B, + 0xB6A0, 0x7A1C, 0xB6A1, 0x4E01, 0xB6A2, 0x76EF, 0xB6A3, 0x53EE, 0xB6A4, 0x9489, 0xB6A5, 0x9876, 0xB6A6, 0x9F0E, 0xB6A7, 0x952D, + 0xB6A8, 0x5B9A, 0xB6A9, 0x8BA2, 0xB6AA, 0x4E22, 0xB6AB, 0x4E1C, 0xB6AC, 0x51AC, 0xB6AD, 0x8463, 0xB6AE, 0x61C2, 0xB6AF, 0x52A8, + 0xB6B0, 0x680B, 0xB6B1, 0x4F97, 0xB6B2, 0x606B, 0xB6B3, 0x51BB, 0xB6B4, 0x6D1E, 0xB6B5, 0x515C, 0xB6B6, 0x6296, 0xB6B7, 0x6597, + 0xB6B8, 0x9661, 0xB6B9, 0x8C46, 0xB6BA, 0x9017, 0xB6BB, 0x75D8, 0xB6BC, 0x90FD, 0xB6BD, 0x7763, 0xB6BE, 0x6BD2, 0xB6BF, 0x728A, + 0xB6C0, 0x72EC, 0xB6C1, 0x8BFB, 0xB6C2, 0x5835, 0xB6C3, 0x7779, 0xB6C4, 0x8D4C, 0xB6C5, 0x675C, 0xB6C6, 0x9540, 0xB6C7, 0x809A, + 0xB6C8, 0x5EA6, 0xB6C9, 0x6E21, 0xB6CA, 0x5992, 0xB6CB, 0x7AEF, 0xB6CC, 0x77ED, 0xB6CD, 0x953B, 0xB6CE, 0x6BB5, 0xB6CF, 0x65AD, + 0xB6D0, 0x7F0E, 0xB6D1, 0x5806, 0xB6D2, 0x5151, 0xB6D3, 0x961F, 0xB6D4, 0x5BF9, 0xB6D5, 0x58A9, 0xB6D6, 0x5428, 0xB6D7, 0x8E72, + 0xB6D8, 0x6566, 0xB6D9, 0x987F, 0xB6DA, 0x56E4, 0xB6DB, 0x949D, 0xB6DC, 0x76FE, 0xB6DD, 0x9041, 0xB6DE, 0x6387, 0xB6DF, 0x54C6, + 0xB6E0, 0x591A, 0xB6E1, 0x593A, 0xB6E2, 0x579B, 0xB6E3, 0x8EB2, 0xB6E4, 0x6735, 0xB6E5, 0x8DFA, 0xB6E6, 0x8235, 0xB6E7, 0x5241, + 0xB6E8, 0x60F0, 0xB6E9, 0x5815, 0xB6EA, 0x86FE, 0xB6EB, 0x5CE8, 0xB6EC, 0x9E45, 0xB6ED, 0x4FC4, 0xB6EE, 0x989D, 0xB6EF, 0x8BB9, + 0xB6F0, 0x5A25, 0xB6F1, 0x6076, 0xB6F2, 0x5384, 0xB6F3, 0x627C, 0xB6F4, 0x904F, 0xB6F5, 0x9102, 0xB6F6, 0x997F, 0xB6F7, 0x6069, + 0xB6F8, 0x800C, 0xB6F9, 0x513F, 0xB6FA, 0x8033, 0xB6FB, 0x5C14, 0xB6FC, 0x9975, 0xB6FD, 0x6D31, 0xB6FE, 0x4E8C, 0xB740, 0x7A1D, + 0xB741, 0x7A1F, 0xB742, 0x7A21, 0xB743, 0x7A22, 0xB744, 0x7A24, 0xB745, 0x7A25, 0xB746, 0x7A26, 0xB747, 0x7A27, 0xB748, 0x7A28, + 0xB749, 0x7A29, 0xB74A, 0x7A2A, 0xB74B, 0x7A2B, 0xB74C, 0x7A2C, 0xB74D, 0x7A2D, 0xB74E, 0x7A2E, 0xB74F, 0x7A2F, 0xB750, 0x7A30, + 0xB751, 0x7A31, 0xB752, 0x7A32, 0xB753, 0x7A34, 0xB754, 0x7A35, 0xB755, 0x7A36, 0xB756, 0x7A38, 0xB757, 0x7A3A, 0xB758, 0x7A3E, + 0xB759, 0x7A40, 0xB75A, 0x7A41, 0xB75B, 0x7A42, 0xB75C, 0x7A43, 0xB75D, 0x7A44, 0xB75E, 0x7A45, 0xB75F, 0x7A47, 0xB760, 0x7A48, + 0xB761, 0x7A49, 0xB762, 0x7A4A, 0xB763, 0x7A4B, 0xB764, 0x7A4C, 0xB765, 0x7A4D, 0xB766, 0x7A4E, 0xB767, 0x7A4F, 0xB768, 0x7A50, + 0xB769, 0x7A52, 0xB76A, 0x7A53, 0xB76B, 0x7A54, 0xB76C, 0x7A55, 0xB76D, 0x7A56, 0xB76E, 0x7A58, 0xB76F, 0x7A59, 0xB770, 0x7A5A, + 0xB771, 0x7A5B, 0xB772, 0x7A5C, 0xB773, 0x7A5D, 0xB774, 0x7A5E, 0xB775, 0x7A5F, 0xB776, 0x7A60, 0xB777, 0x7A61, 0xB778, 0x7A62, + 0xB779, 0x7A63, 0xB77A, 0x7A64, 0xB77B, 0x7A65, 0xB77C, 0x7A66, 0xB77D, 0x7A67, 0xB77E, 0x7A68, 0xB780, 0x7A69, 0xB781, 0x7A6A, + 0xB782, 0x7A6B, 0xB783, 0x7A6C, 0xB784, 0x7A6D, 0xB785, 0x7A6E, 0xB786, 0x7A6F, 0xB787, 0x7A71, 0xB788, 0x7A72, 0xB789, 0x7A73, + 0xB78A, 0x7A75, 0xB78B, 0x7A7B, 0xB78C, 0x7A7C, 0xB78D, 0x7A7D, 0xB78E, 0x7A7E, 0xB78F, 0x7A82, 0xB790, 0x7A85, 0xB791, 0x7A87, + 0xB792, 0x7A89, 0xB793, 0x7A8A, 0xB794, 0x7A8B, 0xB795, 0x7A8C, 0xB796, 0x7A8E, 0xB797, 0x7A8F, 0xB798, 0x7A90, 0xB799, 0x7A93, + 0xB79A, 0x7A94, 0xB79B, 0x7A99, 0xB79C, 0x7A9A, 0xB79D, 0x7A9B, 0xB79E, 0x7A9E, 0xB79F, 0x7AA1, 0xB7A0, 0x7AA2, 0xB7A1, 0x8D30, + 0xB7A2, 0x53D1, 0xB7A3, 0x7F5A, 0xB7A4, 0x7B4F, 0xB7A5, 0x4F10, 0xB7A6, 0x4E4F, 0xB7A7, 0x9600, 0xB7A8, 0x6CD5, 0xB7A9, 0x73D0, + 0xB7AA, 0x85E9, 0xB7AB, 0x5E06, 0xB7AC, 0x756A, 0xB7AD, 0x7FFB, 0xB7AE, 0x6A0A, 0xB7AF, 0x77FE, 0xB7B0, 0x9492, 0xB7B1, 0x7E41, + 0xB7B2, 0x51E1, 0xB7B3, 0x70E6, 0xB7B4, 0x53CD, 0xB7B5, 0x8FD4, 0xB7B6, 0x8303, 0xB7B7, 0x8D29, 0xB7B8, 0x72AF, 0xB7B9, 0x996D, + 0xB7BA, 0x6CDB, 0xB7BB, 0x574A, 0xB7BC, 0x82B3, 0xB7BD, 0x65B9, 0xB7BE, 0x80AA, 0xB7BF, 0x623F, 0xB7C0, 0x9632, 0xB7C1, 0x59A8, + 0xB7C2, 0x4EFF, 0xB7C3, 0x8BBF, 0xB7C4, 0x7EBA, 0xB7C5, 0x653E, 0xB7C6, 0x83F2, 0xB7C7, 0x975E, 0xB7C8, 0x5561, 0xB7C9, 0x98DE, + 0xB7CA, 0x80A5, 0xB7CB, 0x532A, 0xB7CC, 0x8BFD, 0xB7CD, 0x5420, 0xB7CE, 0x80BA, 0xB7CF, 0x5E9F, 0xB7D0, 0x6CB8, 0xB7D1, 0x8D39, + 0xB7D2, 0x82AC, 0xB7D3, 0x915A, 0xB7D4, 0x5429, 0xB7D5, 0x6C1B, 0xB7D6, 0x5206, 0xB7D7, 0x7EB7, 0xB7D8, 0x575F, 0xB7D9, 0x711A, + 0xB7DA, 0x6C7E, 0xB7DB, 0x7C89, 0xB7DC, 0x594B, 0xB7DD, 0x4EFD, 0xB7DE, 0x5FFF, 0xB7DF, 0x6124, 0xB7E0, 0x7CAA, 0xB7E1, 0x4E30, + 0xB7E2, 0x5C01, 0xB7E3, 0x67AB, 0xB7E4, 0x8702, 0xB7E5, 0x5CF0, 0xB7E6, 0x950B, 0xB7E7, 0x98CE, 0xB7E8, 0x75AF, 0xB7E9, 0x70FD, + 0xB7EA, 0x9022, 0xB7EB, 0x51AF, 0xB7EC, 0x7F1D, 0xB7ED, 0x8BBD, 0xB7EE, 0x5949, 0xB7EF, 0x51E4, 0xB7F0, 0x4F5B, 0xB7F1, 0x5426, + 0xB7F2, 0x592B, 0xB7F3, 0x6577, 0xB7F4, 0x80A4, 0xB7F5, 0x5B75, 0xB7F6, 0x6276, 0xB7F7, 0x62C2, 0xB7F8, 0x8F90, 0xB7F9, 0x5E45, + 0xB7FA, 0x6C1F, 0xB7FB, 0x7B26, 0xB7FC, 0x4F0F, 0xB7FD, 0x4FD8, 0xB7FE, 0x670D, 0xB840, 0x7AA3, 0xB841, 0x7AA4, 0xB842, 0x7AA7, + 0xB843, 0x7AA9, 0xB844, 0x7AAA, 0xB845, 0x7AAB, 0xB846, 0x7AAE, 0xB847, 0x7AAF, 0xB848, 0x7AB0, 0xB849, 0x7AB1, 0xB84A, 0x7AB2, + 0xB84B, 0x7AB4, 0xB84C, 0x7AB5, 0xB84D, 0x7AB6, 0xB84E, 0x7AB7, 0xB84F, 0x7AB8, 0xB850, 0x7AB9, 0xB851, 0x7ABA, 0xB852, 0x7ABB, + 0xB853, 0x7ABC, 0xB854, 0x7ABD, 0xB855, 0x7ABE, 0xB856, 0x7AC0, 0xB857, 0x7AC1, 0xB858, 0x7AC2, 0xB859, 0x7AC3, 0xB85A, 0x7AC4, + 0xB85B, 0x7AC5, 0xB85C, 0x7AC6, 0xB85D, 0x7AC7, 0xB85E, 0x7AC8, 0xB85F, 0x7AC9, 0xB860, 0x7ACA, 0xB861, 0x7ACC, 0xB862, 0x7ACD, + 0xB863, 0x7ACE, 0xB864, 0x7ACF, 0xB865, 0x7AD0, 0xB866, 0x7AD1, 0xB867, 0x7AD2, 0xB868, 0x7AD3, 0xB869, 0x7AD4, 0xB86A, 0x7AD5, + 0xB86B, 0x7AD7, 0xB86C, 0x7AD8, 0xB86D, 0x7ADA, 0xB86E, 0x7ADB, 0xB86F, 0x7ADC, 0xB870, 0x7ADD, 0xB871, 0x7AE1, 0xB872, 0x7AE2, + 0xB873, 0x7AE4, 0xB874, 0x7AE7, 0xB875, 0x7AE8, 0xB876, 0x7AE9, 0xB877, 0x7AEA, 0xB878, 0x7AEB, 0xB879, 0x7AEC, 0xB87A, 0x7AEE, + 0xB87B, 0x7AF0, 0xB87C, 0x7AF1, 0xB87D, 0x7AF2, 0xB87E, 0x7AF3, 0xB880, 0x7AF4, 0xB881, 0x7AF5, 0xB882, 0x7AF6, 0xB883, 0x7AF7, + 0xB884, 0x7AF8, 0xB885, 0x7AFB, 0xB886, 0x7AFC, 0xB887, 0x7AFE, 0xB888, 0x7B00, 0xB889, 0x7B01, 0xB88A, 0x7B02, 0xB88B, 0x7B05, + 0xB88C, 0x7B07, 0xB88D, 0x7B09, 0xB88E, 0x7B0C, 0xB88F, 0x7B0D, 0xB890, 0x7B0E, 0xB891, 0x7B10, 0xB892, 0x7B12, 0xB893, 0x7B13, + 0xB894, 0x7B16, 0xB895, 0x7B17, 0xB896, 0x7B18, 0xB897, 0x7B1A, 0xB898, 0x7B1C, 0xB899, 0x7B1D, 0xB89A, 0x7B1F, 0xB89B, 0x7B21, + 0xB89C, 0x7B22, 0xB89D, 0x7B23, 0xB89E, 0x7B27, 0xB89F, 0x7B29, 0xB8A0, 0x7B2D, 0xB8A1, 0x6D6E, 0xB8A2, 0x6DAA, 0xB8A3, 0x798F, + 0xB8A4, 0x88B1, 0xB8A5, 0x5F17, 0xB8A6, 0x752B, 0xB8A7, 0x629A, 0xB8A8, 0x8F85, 0xB8A9, 0x4FEF, 0xB8AA, 0x91DC, 0xB8AB, 0x65A7, + 0xB8AC, 0x812F, 0xB8AD, 0x8151, 0xB8AE, 0x5E9C, 0xB8AF, 0x8150, 0xB8B0, 0x8D74, 0xB8B1, 0x526F, 0xB8B2, 0x8986, 0xB8B3, 0x8D4B, + 0xB8B4, 0x590D, 0xB8B5, 0x5085, 0xB8B6, 0x4ED8, 0xB8B7, 0x961C, 0xB8B8, 0x7236, 0xB8B9, 0x8179, 0xB8BA, 0x8D1F, 0xB8BB, 0x5BCC, + 0xB8BC, 0x8BA3, 0xB8BD, 0x9644, 0xB8BE, 0x5987, 0xB8BF, 0x7F1A, 0xB8C0, 0x5490, 0xB8C1, 0x5676, 0xB8C2, 0x560E, 0xB8C3, 0x8BE5, + 0xB8C4, 0x6539, 0xB8C5, 0x6982, 0xB8C6, 0x9499, 0xB8C7, 0x76D6, 0xB8C8, 0x6E89, 0xB8C9, 0x5E72, 0xB8CA, 0x7518, 0xB8CB, 0x6746, + 0xB8CC, 0x67D1, 0xB8CD, 0x7AFF, 0xB8CE, 0x809D, 0xB8CF, 0x8D76, 0xB8D0, 0x611F, 0xB8D1, 0x79C6, 0xB8D2, 0x6562, 0xB8D3, 0x8D63, + 0xB8D4, 0x5188, 0xB8D5, 0x521A, 0xB8D6, 0x94A2, 0xB8D7, 0x7F38, 0xB8D8, 0x809B, 0xB8D9, 0x7EB2, 0xB8DA, 0x5C97, 0xB8DB, 0x6E2F, + 0xB8DC, 0x6760, 0xB8DD, 0x7BD9, 0xB8DE, 0x768B, 0xB8DF, 0x9AD8, 0xB8E0, 0x818F, 0xB8E1, 0x7F94, 0xB8E2, 0x7CD5, 0xB8E3, 0x641E, + 0xB8E4, 0x9550, 0xB8E5, 0x7A3F, 0xB8E6, 0x544A, 0xB8E7, 0x54E5, 0xB8E8, 0x6B4C, 0xB8E9, 0x6401, 0xB8EA, 0x6208, 0xB8EB, 0x9E3D, + 0xB8EC, 0x80F3, 0xB8ED, 0x7599, 0xB8EE, 0x5272, 0xB8EF, 0x9769, 0xB8F0, 0x845B, 0xB8F1, 0x683C, 0xB8F2, 0x86E4, 0xB8F3, 0x9601, + 0xB8F4, 0x9694, 0xB8F5, 0x94EC, 0xB8F6, 0x4E2A, 0xB8F7, 0x5404, 0xB8F8, 0x7ED9, 0xB8F9, 0x6839, 0xB8FA, 0x8DDF, 0xB8FB, 0x8015, + 0xB8FC, 0x66F4, 0xB8FD, 0x5E9A, 0xB8FE, 0x7FB9, 0xB940, 0x7B2F, 0xB941, 0x7B30, 0xB942, 0x7B32, 0xB943, 0x7B34, 0xB944, 0x7B35, + 0xB945, 0x7B36, 0xB946, 0x7B37, 0xB947, 0x7B39, 0xB948, 0x7B3B, 0xB949, 0x7B3D, 0xB94A, 0x7B3F, 0xB94B, 0x7B40, 0xB94C, 0x7B41, + 0xB94D, 0x7B42, 0xB94E, 0x7B43, 0xB94F, 0x7B44, 0xB950, 0x7B46, 0xB951, 0x7B48, 0xB952, 0x7B4A, 0xB953, 0x7B4D, 0xB954, 0x7B4E, + 0xB955, 0x7B53, 0xB956, 0x7B55, 0xB957, 0x7B57, 0xB958, 0x7B59, 0xB959, 0x7B5C, 0xB95A, 0x7B5E, 0xB95B, 0x7B5F, 0xB95C, 0x7B61, + 0xB95D, 0x7B63, 0xB95E, 0x7B64, 0xB95F, 0x7B65, 0xB960, 0x7B66, 0xB961, 0x7B67, 0xB962, 0x7B68, 0xB963, 0x7B69, 0xB964, 0x7B6A, + 0xB965, 0x7B6B, 0xB966, 0x7B6C, 0xB967, 0x7B6D, 0xB968, 0x7B6F, 0xB969, 0x7B70, 0xB96A, 0x7B73, 0xB96B, 0x7B74, 0xB96C, 0x7B76, + 0xB96D, 0x7B78, 0xB96E, 0x7B7A, 0xB96F, 0x7B7C, 0xB970, 0x7B7D, 0xB971, 0x7B7F, 0xB972, 0x7B81, 0xB973, 0x7B82, 0xB974, 0x7B83, + 0xB975, 0x7B84, 0xB976, 0x7B86, 0xB977, 0x7B87, 0xB978, 0x7B88, 0xB979, 0x7B89, 0xB97A, 0x7B8A, 0xB97B, 0x7B8B, 0xB97C, 0x7B8C, + 0xB97D, 0x7B8E, 0xB97E, 0x7B8F, 0xB980, 0x7B91, 0xB981, 0x7B92, 0xB982, 0x7B93, 0xB983, 0x7B96, 0xB984, 0x7B98, 0xB985, 0x7B99, + 0xB986, 0x7B9A, 0xB987, 0x7B9B, 0xB988, 0x7B9E, 0xB989, 0x7B9F, 0xB98A, 0x7BA0, 0xB98B, 0x7BA3, 0xB98C, 0x7BA4, 0xB98D, 0x7BA5, + 0xB98E, 0x7BAE, 0xB98F, 0x7BAF, 0xB990, 0x7BB0, 0xB991, 0x7BB2, 0xB992, 0x7BB3, 0xB993, 0x7BB5, 0xB994, 0x7BB6, 0xB995, 0x7BB7, + 0xB996, 0x7BB9, 0xB997, 0x7BBA, 0xB998, 0x7BBB, 0xB999, 0x7BBC, 0xB99A, 0x7BBD, 0xB99B, 0x7BBE, 0xB99C, 0x7BBF, 0xB99D, 0x7BC0, + 0xB99E, 0x7BC2, 0xB99F, 0x7BC3, 0xB9A0, 0x7BC4, 0xB9A1, 0x57C2, 0xB9A2, 0x803F, 0xB9A3, 0x6897, 0xB9A4, 0x5DE5, 0xB9A5, 0x653B, + 0xB9A6, 0x529F, 0xB9A7, 0x606D, 0xB9A8, 0x9F9A, 0xB9A9, 0x4F9B, 0xB9AA, 0x8EAC, 0xB9AB, 0x516C, 0xB9AC, 0x5BAB, 0xB9AD, 0x5F13, + 0xB9AE, 0x5DE9, 0xB9AF, 0x6C5E, 0xB9B0, 0x62F1, 0xB9B1, 0x8D21, 0xB9B2, 0x5171, 0xB9B3, 0x94A9, 0xB9B4, 0x52FE, 0xB9B5, 0x6C9F, + 0xB9B6, 0x82DF, 0xB9B7, 0x72D7, 0xB9B8, 0x57A2, 0xB9B9, 0x6784, 0xB9BA, 0x8D2D, 0xB9BB, 0x591F, 0xB9BC, 0x8F9C, 0xB9BD, 0x83C7, + 0xB9BE, 0x5495, 0xB9BF, 0x7B8D, 0xB9C0, 0x4F30, 0xB9C1, 0x6CBD, 0xB9C2, 0x5B64, 0xB9C3, 0x59D1, 0xB9C4, 0x9F13, 0xB9C5, 0x53E4, + 0xB9C6, 0x86CA, 0xB9C7, 0x9AA8, 0xB9C8, 0x8C37, 0xB9C9, 0x80A1, 0xB9CA, 0x6545, 0xB9CB, 0x987E, 0xB9CC, 0x56FA, 0xB9CD, 0x96C7, + 0xB9CE, 0x522E, 0xB9CF, 0x74DC, 0xB9D0, 0x5250, 0xB9D1, 0x5BE1, 0xB9D2, 0x6302, 0xB9D3, 0x8902, 0xB9D4, 0x4E56, 0xB9D5, 0x62D0, + 0xB9D6, 0x602A, 0xB9D7, 0x68FA, 0xB9D8, 0x5173, 0xB9D9, 0x5B98, 0xB9DA, 0x51A0, 0xB9DB, 0x89C2, 0xB9DC, 0x7BA1, 0xB9DD, 0x9986, + 0xB9DE, 0x7F50, 0xB9DF, 0x60EF, 0xB9E0, 0x704C, 0xB9E1, 0x8D2F, 0xB9E2, 0x5149, 0xB9E3, 0x5E7F, 0xB9E4, 0x901B, 0xB9E5, 0x7470, + 0xB9E6, 0x89C4, 0xB9E7, 0x572D, 0xB9E8, 0x7845, 0xB9E9, 0x5F52, 0xB9EA, 0x9F9F, 0xB9EB, 0x95FA, 0xB9EC, 0x8F68, 0xB9ED, 0x9B3C, + 0xB9EE, 0x8BE1, 0xB9EF, 0x7678, 0xB9F0, 0x6842, 0xB9F1, 0x67DC, 0xB9F2, 0x8DEA, 0xB9F3, 0x8D35, 0xB9F4, 0x523D, 0xB9F5, 0x8F8A, + 0xB9F6, 0x6EDA, 0xB9F7, 0x68CD, 0xB9F8, 0x9505, 0xB9F9, 0x90ED, 0xB9FA, 0x56FD, 0xB9FB, 0x679C, 0xB9FC, 0x88F9, 0xB9FD, 0x8FC7, + 0xB9FE, 0x54C8, 0xBA40, 0x7BC5, 0xBA41, 0x7BC8, 0xBA42, 0x7BC9, 0xBA43, 0x7BCA, 0xBA44, 0x7BCB, 0xBA45, 0x7BCD, 0xBA46, 0x7BCE, + 0xBA47, 0x7BCF, 0xBA48, 0x7BD0, 0xBA49, 0x7BD2, 0xBA4A, 0x7BD4, 0xBA4B, 0x7BD5, 0xBA4C, 0x7BD6, 0xBA4D, 0x7BD7, 0xBA4E, 0x7BD8, + 0xBA4F, 0x7BDB, 0xBA50, 0x7BDC, 0xBA51, 0x7BDE, 0xBA52, 0x7BDF, 0xBA53, 0x7BE0, 0xBA54, 0x7BE2, 0xBA55, 0x7BE3, 0xBA56, 0x7BE4, + 0xBA57, 0x7BE7, 0xBA58, 0x7BE8, 0xBA59, 0x7BE9, 0xBA5A, 0x7BEB, 0xBA5B, 0x7BEC, 0xBA5C, 0x7BED, 0xBA5D, 0x7BEF, 0xBA5E, 0x7BF0, + 0xBA5F, 0x7BF2, 0xBA60, 0x7BF3, 0xBA61, 0x7BF4, 0xBA62, 0x7BF5, 0xBA63, 0x7BF6, 0xBA64, 0x7BF8, 0xBA65, 0x7BF9, 0xBA66, 0x7BFA, + 0xBA67, 0x7BFB, 0xBA68, 0x7BFD, 0xBA69, 0x7BFF, 0xBA6A, 0x7C00, 0xBA6B, 0x7C01, 0xBA6C, 0x7C02, 0xBA6D, 0x7C03, 0xBA6E, 0x7C04, + 0xBA6F, 0x7C05, 0xBA70, 0x7C06, 0xBA71, 0x7C08, 0xBA72, 0x7C09, 0xBA73, 0x7C0A, 0xBA74, 0x7C0D, 0xBA75, 0x7C0E, 0xBA76, 0x7C10, + 0xBA77, 0x7C11, 0xBA78, 0x7C12, 0xBA79, 0x7C13, 0xBA7A, 0x7C14, 0xBA7B, 0x7C15, 0xBA7C, 0x7C17, 0xBA7D, 0x7C18, 0xBA7E, 0x7C19, + 0xBA80, 0x7C1A, 0xBA81, 0x7C1B, 0xBA82, 0x7C1C, 0xBA83, 0x7C1D, 0xBA84, 0x7C1E, 0xBA85, 0x7C20, 0xBA86, 0x7C21, 0xBA87, 0x7C22, + 0xBA88, 0x7C23, 0xBA89, 0x7C24, 0xBA8A, 0x7C25, 0xBA8B, 0x7C28, 0xBA8C, 0x7C29, 0xBA8D, 0x7C2B, 0xBA8E, 0x7C2C, 0xBA8F, 0x7C2D, + 0xBA90, 0x7C2E, 0xBA91, 0x7C2F, 0xBA92, 0x7C30, 0xBA93, 0x7C31, 0xBA94, 0x7C32, 0xBA95, 0x7C33, 0xBA96, 0x7C34, 0xBA97, 0x7C35, + 0xBA98, 0x7C36, 0xBA99, 0x7C37, 0xBA9A, 0x7C39, 0xBA9B, 0x7C3A, 0xBA9C, 0x7C3B, 0xBA9D, 0x7C3C, 0xBA9E, 0x7C3D, 0xBA9F, 0x7C3E, + 0xBAA0, 0x7C42, 0xBAA1, 0x9AB8, 0xBAA2, 0x5B69, 0xBAA3, 0x6D77, 0xBAA4, 0x6C26, 0xBAA5, 0x4EA5, 0xBAA6, 0x5BB3, 0xBAA7, 0x9A87, + 0xBAA8, 0x9163, 0xBAA9, 0x61A8, 0xBAAA, 0x90AF, 0xBAAB, 0x97E9, 0xBAAC, 0x542B, 0xBAAD, 0x6DB5, 0xBAAE, 0x5BD2, 0xBAAF, 0x51FD, + 0xBAB0, 0x558A, 0xBAB1, 0x7F55, 0xBAB2, 0x7FF0, 0xBAB3, 0x64BC, 0xBAB4, 0x634D, 0xBAB5, 0x65F1, 0xBAB6, 0x61BE, 0xBAB7, 0x608D, + 0xBAB8, 0x710A, 0xBAB9, 0x6C57, 0xBABA, 0x6C49, 0xBABB, 0x592F, 0xBABC, 0x676D, 0xBABD, 0x822A, 0xBABE, 0x58D5, 0xBABF, 0x568E, + 0xBAC0, 0x8C6A, 0xBAC1, 0x6BEB, 0xBAC2, 0x90DD, 0xBAC3, 0x597D, 0xBAC4, 0x8017, 0xBAC5, 0x53F7, 0xBAC6, 0x6D69, 0xBAC7, 0x5475, + 0xBAC8, 0x559D, 0xBAC9, 0x8377, 0xBACA, 0x83CF, 0xBACB, 0x6838, 0xBACC, 0x79BE, 0xBACD, 0x548C, 0xBACE, 0x4F55, 0xBACF, 0x5408, + 0xBAD0, 0x76D2, 0xBAD1, 0x8C89, 0xBAD2, 0x9602, 0xBAD3, 0x6CB3, 0xBAD4, 0x6DB8, 0xBAD5, 0x8D6B, 0xBAD6, 0x8910, 0xBAD7, 0x9E64, + 0xBAD8, 0x8D3A, 0xBAD9, 0x563F, 0xBADA, 0x9ED1, 0xBADB, 0x75D5, 0xBADC, 0x5F88, 0xBADD, 0x72E0, 0xBADE, 0x6068, 0xBADF, 0x54FC, + 0xBAE0, 0x4EA8, 0xBAE1, 0x6A2A, 0xBAE2, 0x8861, 0xBAE3, 0x6052, 0xBAE4, 0x8F70, 0xBAE5, 0x54C4, 0xBAE6, 0x70D8, 0xBAE7, 0x8679, + 0xBAE8, 0x9E3F, 0xBAE9, 0x6D2A, 0xBAEA, 0x5B8F, 0xBAEB, 0x5F18, 0xBAEC, 0x7EA2, 0xBAED, 0x5589, 0xBAEE, 0x4FAF, 0xBAEF, 0x7334, + 0xBAF0, 0x543C, 0xBAF1, 0x539A, 0xBAF2, 0x5019, 0xBAF3, 0x540E, 0xBAF4, 0x547C, 0xBAF5, 0x4E4E, 0xBAF6, 0x5FFD, 0xBAF7, 0x745A, + 0xBAF8, 0x58F6, 0xBAF9, 0x846B, 0xBAFA, 0x80E1, 0xBAFB, 0x8774, 0xBAFC, 0x72D0, 0xBAFD, 0x7CCA, 0xBAFE, 0x6E56, 0xBB40, 0x7C43, + 0xBB41, 0x7C44, 0xBB42, 0x7C45, 0xBB43, 0x7C46, 0xBB44, 0x7C47, 0xBB45, 0x7C48, 0xBB46, 0x7C49, 0xBB47, 0x7C4A, 0xBB48, 0x7C4B, + 0xBB49, 0x7C4C, 0xBB4A, 0x7C4E, 0xBB4B, 0x7C4F, 0xBB4C, 0x7C50, 0xBB4D, 0x7C51, 0xBB4E, 0x7C52, 0xBB4F, 0x7C53, 0xBB50, 0x7C54, + 0xBB51, 0x7C55, 0xBB52, 0x7C56, 0xBB53, 0x7C57, 0xBB54, 0x7C58, 0xBB55, 0x7C59, 0xBB56, 0x7C5A, 0xBB57, 0x7C5B, 0xBB58, 0x7C5C, + 0xBB59, 0x7C5D, 0xBB5A, 0x7C5E, 0xBB5B, 0x7C5F, 0xBB5C, 0x7C60, 0xBB5D, 0x7C61, 0xBB5E, 0x7C62, 0xBB5F, 0x7C63, 0xBB60, 0x7C64, + 0xBB61, 0x7C65, 0xBB62, 0x7C66, 0xBB63, 0x7C67, 0xBB64, 0x7C68, 0xBB65, 0x7C69, 0xBB66, 0x7C6A, 0xBB67, 0x7C6B, 0xBB68, 0x7C6C, + 0xBB69, 0x7C6D, 0xBB6A, 0x7C6E, 0xBB6B, 0x7C6F, 0xBB6C, 0x7C70, 0xBB6D, 0x7C71, 0xBB6E, 0x7C72, 0xBB6F, 0x7C75, 0xBB70, 0x7C76, + 0xBB71, 0x7C77, 0xBB72, 0x7C78, 0xBB73, 0x7C79, 0xBB74, 0x7C7A, 0xBB75, 0x7C7E, 0xBB76, 0x7C7F, 0xBB77, 0x7C80, 0xBB78, 0x7C81, + 0xBB79, 0x7C82, 0xBB7A, 0x7C83, 0xBB7B, 0x7C84, 0xBB7C, 0x7C85, 0xBB7D, 0x7C86, 0xBB7E, 0x7C87, 0xBB80, 0x7C88, 0xBB81, 0x7C8A, + 0xBB82, 0x7C8B, 0xBB83, 0x7C8C, 0xBB84, 0x7C8D, 0xBB85, 0x7C8E, 0xBB86, 0x7C8F, 0xBB87, 0x7C90, 0xBB88, 0x7C93, 0xBB89, 0x7C94, + 0xBB8A, 0x7C96, 0xBB8B, 0x7C99, 0xBB8C, 0x7C9A, 0xBB8D, 0x7C9B, 0xBB8E, 0x7CA0, 0xBB8F, 0x7CA1, 0xBB90, 0x7CA3, 0xBB91, 0x7CA6, + 0xBB92, 0x7CA7, 0xBB93, 0x7CA8, 0xBB94, 0x7CA9, 0xBB95, 0x7CAB, 0xBB96, 0x7CAC, 0xBB97, 0x7CAD, 0xBB98, 0x7CAF, 0xBB99, 0x7CB0, + 0xBB9A, 0x7CB4, 0xBB9B, 0x7CB5, 0xBB9C, 0x7CB6, 0xBB9D, 0x7CB7, 0xBB9E, 0x7CB8, 0xBB9F, 0x7CBA, 0xBBA0, 0x7CBB, 0xBBA1, 0x5F27, + 0xBBA2, 0x864E, 0xBBA3, 0x552C, 0xBBA4, 0x62A4, 0xBBA5, 0x4E92, 0xBBA6, 0x6CAA, 0xBBA7, 0x6237, 0xBBA8, 0x82B1, 0xBBA9, 0x54D7, + 0xBBAA, 0x534E, 0xBBAB, 0x733E, 0xBBAC, 0x6ED1, 0xBBAD, 0x753B, 0xBBAE, 0x5212, 0xBBAF, 0x5316, 0xBBB0, 0x8BDD, 0xBBB1, 0x69D0, + 0xBBB2, 0x5F8A, 0xBBB3, 0x6000, 0xBBB4, 0x6DEE, 0xBBB5, 0x574F, 0xBBB6, 0x6B22, 0xBBB7, 0x73AF, 0xBBB8, 0x6853, 0xBBB9, 0x8FD8, + 0xBBBA, 0x7F13, 0xBBBB, 0x6362, 0xBBBC, 0x60A3, 0xBBBD, 0x5524, 0xBBBE, 0x75EA, 0xBBBF, 0x8C62, 0xBBC0, 0x7115, 0xBBC1, 0x6DA3, + 0xBBC2, 0x5BA6, 0xBBC3, 0x5E7B, 0xBBC4, 0x8352, 0xBBC5, 0x614C, 0xBBC6, 0x9EC4, 0xBBC7, 0x78FA, 0xBBC8, 0x8757, 0xBBC9, 0x7C27, + 0xBBCA, 0x7687, 0xBBCB, 0x51F0, 0xBBCC, 0x60F6, 0xBBCD, 0x714C, 0xBBCE, 0x6643, 0xBBCF, 0x5E4C, 0xBBD0, 0x604D, 0xBBD1, 0x8C0E, + 0xBBD2, 0x7070, 0xBBD3, 0x6325, 0xBBD4, 0x8F89, 0xBBD5, 0x5FBD, 0xBBD6, 0x6062, 0xBBD7, 0x86D4, 0xBBD8, 0x56DE, 0xBBD9, 0x6BC1, + 0xBBDA, 0x6094, 0xBBDB, 0x6167, 0xBBDC, 0x5349, 0xBBDD, 0x60E0, 0xBBDE, 0x6666, 0xBBDF, 0x8D3F, 0xBBE0, 0x79FD, 0xBBE1, 0x4F1A, + 0xBBE2, 0x70E9, 0xBBE3, 0x6C47, 0xBBE4, 0x8BB3, 0xBBE5, 0x8BF2, 0xBBE6, 0x7ED8, 0xBBE7, 0x8364, 0xBBE8, 0x660F, 0xBBE9, 0x5A5A, + 0xBBEA, 0x9B42, 0xBBEB, 0x6D51, 0xBBEC, 0x6DF7, 0xBBED, 0x8C41, 0xBBEE, 0x6D3B, 0xBBEF, 0x4F19, 0xBBF0, 0x706B, 0xBBF1, 0x83B7, + 0xBBF2, 0x6216, 0xBBF3, 0x60D1, 0xBBF4, 0x970D, 0xBBF5, 0x8D27, 0xBBF6, 0x7978, 0xBBF7, 0x51FB, 0xBBF8, 0x573E, 0xBBF9, 0x57FA, + 0xBBFA, 0x673A, 0xBBFB, 0x7578, 0xBBFC, 0x7A3D, 0xBBFD, 0x79EF, 0xBBFE, 0x7B95, 0xBC40, 0x7CBF, 0xBC41, 0x7CC0, 0xBC42, 0x7CC2, + 0xBC43, 0x7CC3, 0xBC44, 0x7CC4, 0xBC45, 0x7CC6, 0xBC46, 0x7CC9, 0xBC47, 0x7CCB, 0xBC48, 0x7CCE, 0xBC49, 0x7CCF, 0xBC4A, 0x7CD0, + 0xBC4B, 0x7CD1, 0xBC4C, 0x7CD2, 0xBC4D, 0x7CD3, 0xBC4E, 0x7CD4, 0xBC4F, 0x7CD8, 0xBC50, 0x7CDA, 0xBC51, 0x7CDB, 0xBC52, 0x7CDD, + 0xBC53, 0x7CDE, 0xBC54, 0x7CE1, 0xBC55, 0x7CE2, 0xBC56, 0x7CE3, 0xBC57, 0x7CE4, 0xBC58, 0x7CE5, 0xBC59, 0x7CE6, 0xBC5A, 0x7CE7, + 0xBC5B, 0x7CE9, 0xBC5C, 0x7CEA, 0xBC5D, 0x7CEB, 0xBC5E, 0x7CEC, 0xBC5F, 0x7CED, 0xBC60, 0x7CEE, 0xBC61, 0x7CF0, 0xBC62, 0x7CF1, + 0xBC63, 0x7CF2, 0xBC64, 0x7CF3, 0xBC65, 0x7CF4, 0xBC66, 0x7CF5, 0xBC67, 0x7CF6, 0xBC68, 0x7CF7, 0xBC69, 0x7CF9, 0xBC6A, 0x7CFA, + 0xBC6B, 0x7CFC, 0xBC6C, 0x7CFD, 0xBC6D, 0x7CFE, 0xBC6E, 0x7CFF, 0xBC6F, 0x7D00, 0xBC70, 0x7D01, 0xBC71, 0x7D02, 0xBC72, 0x7D03, + 0xBC73, 0x7D04, 0xBC74, 0x7D05, 0xBC75, 0x7D06, 0xBC76, 0x7D07, 0xBC77, 0x7D08, 0xBC78, 0x7D09, 0xBC79, 0x7D0B, 0xBC7A, 0x7D0C, + 0xBC7B, 0x7D0D, 0xBC7C, 0x7D0E, 0xBC7D, 0x7D0F, 0xBC7E, 0x7D10, 0xBC80, 0x7D11, 0xBC81, 0x7D12, 0xBC82, 0x7D13, 0xBC83, 0x7D14, + 0xBC84, 0x7D15, 0xBC85, 0x7D16, 0xBC86, 0x7D17, 0xBC87, 0x7D18, 0xBC88, 0x7D19, 0xBC89, 0x7D1A, 0xBC8A, 0x7D1B, 0xBC8B, 0x7D1C, + 0xBC8C, 0x7D1D, 0xBC8D, 0x7D1E, 0xBC8E, 0x7D1F, 0xBC8F, 0x7D21, 0xBC90, 0x7D23, 0xBC91, 0x7D24, 0xBC92, 0x7D25, 0xBC93, 0x7D26, + 0xBC94, 0x7D28, 0xBC95, 0x7D29, 0xBC96, 0x7D2A, 0xBC97, 0x7D2C, 0xBC98, 0x7D2D, 0xBC99, 0x7D2E, 0xBC9A, 0x7D30, 0xBC9B, 0x7D31, + 0xBC9C, 0x7D32, 0xBC9D, 0x7D33, 0xBC9E, 0x7D34, 0xBC9F, 0x7D35, 0xBCA0, 0x7D36, 0xBCA1, 0x808C, 0xBCA2, 0x9965, 0xBCA3, 0x8FF9, + 0xBCA4, 0x6FC0, 0xBCA5, 0x8BA5, 0xBCA6, 0x9E21, 0xBCA7, 0x59EC, 0xBCA8, 0x7EE9, 0xBCA9, 0x7F09, 0xBCAA, 0x5409, 0xBCAB, 0x6781, + 0xBCAC, 0x68D8, 0xBCAD, 0x8F91, 0xBCAE, 0x7C4D, 0xBCAF, 0x96C6, 0xBCB0, 0x53CA, 0xBCB1, 0x6025, 0xBCB2, 0x75BE, 0xBCB3, 0x6C72, + 0xBCB4, 0x5373, 0xBCB5, 0x5AC9, 0xBCB6, 0x7EA7, 0xBCB7, 0x6324, 0xBCB8, 0x51E0, 0xBCB9, 0x810A, 0xBCBA, 0x5DF1, 0xBCBB, 0x84DF, + 0xBCBC, 0x6280, 0xBCBD, 0x5180, 0xBCBE, 0x5B63, 0xBCBF, 0x4F0E, 0xBCC0, 0x796D, 0xBCC1, 0x5242, 0xBCC2, 0x60B8, 0xBCC3, 0x6D4E, + 0xBCC4, 0x5BC4, 0xBCC5, 0x5BC2, 0xBCC6, 0x8BA1, 0xBCC7, 0x8BB0, 0xBCC8, 0x65E2, 0xBCC9, 0x5FCC, 0xBCCA, 0x9645, 0xBCCB, 0x5993, + 0xBCCC, 0x7EE7, 0xBCCD, 0x7EAA, 0xBCCE, 0x5609, 0xBCCF, 0x67B7, 0xBCD0, 0x5939, 0xBCD1, 0x4F73, 0xBCD2, 0x5BB6, 0xBCD3, 0x52A0, + 0xBCD4, 0x835A, 0xBCD5, 0x988A, 0xBCD6, 0x8D3E, 0xBCD7, 0x7532, 0xBCD8, 0x94BE, 0xBCD9, 0x5047, 0xBCDA, 0x7A3C, 0xBCDB, 0x4EF7, + 0xBCDC, 0x67B6, 0xBCDD, 0x9A7E, 0xBCDE, 0x5AC1, 0xBCDF, 0x6B7C, 0xBCE0, 0x76D1, 0xBCE1, 0x575A, 0xBCE2, 0x5C16, 0xBCE3, 0x7B3A, + 0xBCE4, 0x95F4, 0xBCE5, 0x714E, 0xBCE6, 0x517C, 0xBCE7, 0x80A9, 0xBCE8, 0x8270, 0xBCE9, 0x5978, 0xBCEA, 0x7F04, 0xBCEB, 0x8327, + 0xBCEC, 0x68C0, 0xBCED, 0x67EC, 0xBCEE, 0x78B1, 0xBCEF, 0x7877, 0xBCF0, 0x62E3, 0xBCF1, 0x6361, 0xBCF2, 0x7B80, 0xBCF3, 0x4FED, + 0xBCF4, 0x526A, 0xBCF5, 0x51CF, 0xBCF6, 0x8350, 0xBCF7, 0x69DB, 0xBCF8, 0x9274, 0xBCF9, 0x8DF5, 0xBCFA, 0x8D31, 0xBCFB, 0x89C1, + 0xBCFC, 0x952E, 0xBCFD, 0x7BAD, 0xBCFE, 0x4EF6, 0xBD40, 0x7D37, 0xBD41, 0x7D38, 0xBD42, 0x7D39, 0xBD43, 0x7D3A, 0xBD44, 0x7D3B, + 0xBD45, 0x7D3C, 0xBD46, 0x7D3D, 0xBD47, 0x7D3E, 0xBD48, 0x7D3F, 0xBD49, 0x7D40, 0xBD4A, 0x7D41, 0xBD4B, 0x7D42, 0xBD4C, 0x7D43, + 0xBD4D, 0x7D44, 0xBD4E, 0x7D45, 0xBD4F, 0x7D46, 0xBD50, 0x7D47, 0xBD51, 0x7D48, 0xBD52, 0x7D49, 0xBD53, 0x7D4A, 0xBD54, 0x7D4B, + 0xBD55, 0x7D4C, 0xBD56, 0x7D4D, 0xBD57, 0x7D4E, 0xBD58, 0x7D4F, 0xBD59, 0x7D50, 0xBD5A, 0x7D51, 0xBD5B, 0x7D52, 0xBD5C, 0x7D53, + 0xBD5D, 0x7D54, 0xBD5E, 0x7D55, 0xBD5F, 0x7D56, 0xBD60, 0x7D57, 0xBD61, 0x7D58, 0xBD62, 0x7D59, 0xBD63, 0x7D5A, 0xBD64, 0x7D5B, + 0xBD65, 0x7D5C, 0xBD66, 0x7D5D, 0xBD67, 0x7D5E, 0xBD68, 0x7D5F, 0xBD69, 0x7D60, 0xBD6A, 0x7D61, 0xBD6B, 0x7D62, 0xBD6C, 0x7D63, + 0xBD6D, 0x7D64, 0xBD6E, 0x7D65, 0xBD6F, 0x7D66, 0xBD70, 0x7D67, 0xBD71, 0x7D68, 0xBD72, 0x7D69, 0xBD73, 0x7D6A, 0xBD74, 0x7D6B, + 0xBD75, 0x7D6C, 0xBD76, 0x7D6D, 0xBD77, 0x7D6F, 0xBD78, 0x7D70, 0xBD79, 0x7D71, 0xBD7A, 0x7D72, 0xBD7B, 0x7D73, 0xBD7C, 0x7D74, + 0xBD7D, 0x7D75, 0xBD7E, 0x7D76, 0xBD80, 0x7D78, 0xBD81, 0x7D79, 0xBD82, 0x7D7A, 0xBD83, 0x7D7B, 0xBD84, 0x7D7C, 0xBD85, 0x7D7D, + 0xBD86, 0x7D7E, 0xBD87, 0x7D7F, 0xBD88, 0x7D80, 0xBD89, 0x7D81, 0xBD8A, 0x7D82, 0xBD8B, 0x7D83, 0xBD8C, 0x7D84, 0xBD8D, 0x7D85, + 0xBD8E, 0x7D86, 0xBD8F, 0x7D87, 0xBD90, 0x7D88, 0xBD91, 0x7D89, 0xBD92, 0x7D8A, 0xBD93, 0x7D8B, 0xBD94, 0x7D8C, 0xBD95, 0x7D8D, + 0xBD96, 0x7D8E, 0xBD97, 0x7D8F, 0xBD98, 0x7D90, 0xBD99, 0x7D91, 0xBD9A, 0x7D92, 0xBD9B, 0x7D93, 0xBD9C, 0x7D94, 0xBD9D, 0x7D95, + 0xBD9E, 0x7D96, 0xBD9F, 0x7D97, 0xBDA0, 0x7D98, 0xBDA1, 0x5065, 0xBDA2, 0x8230, 0xBDA3, 0x5251, 0xBDA4, 0x996F, 0xBDA5, 0x6E10, + 0xBDA6, 0x6E85, 0xBDA7, 0x6DA7, 0xBDA8, 0x5EFA, 0xBDA9, 0x50F5, 0xBDAA, 0x59DC, 0xBDAB, 0x5C06, 0xBDAC, 0x6D46, 0xBDAD, 0x6C5F, + 0xBDAE, 0x7586, 0xBDAF, 0x848B, 0xBDB0, 0x6868, 0xBDB1, 0x5956, 0xBDB2, 0x8BB2, 0xBDB3, 0x5320, 0xBDB4, 0x9171, 0xBDB5, 0x964D, + 0xBDB6, 0x8549, 0xBDB7, 0x6912, 0xBDB8, 0x7901, 0xBDB9, 0x7126, 0xBDBA, 0x80F6, 0xBDBB, 0x4EA4, 0xBDBC, 0x90CA, 0xBDBD, 0x6D47, + 0xBDBE, 0x9A84, 0xBDBF, 0x5A07, 0xBDC0, 0x56BC, 0xBDC1, 0x6405, 0xBDC2, 0x94F0, 0xBDC3, 0x77EB, 0xBDC4, 0x4FA5, 0xBDC5, 0x811A, + 0xBDC6, 0x72E1, 0xBDC7, 0x89D2, 0xBDC8, 0x997A, 0xBDC9, 0x7F34, 0xBDCA, 0x7EDE, 0xBDCB, 0x527F, 0xBDCC, 0x6559, 0xBDCD, 0x9175, + 0xBDCE, 0x8F7F, 0xBDCF, 0x8F83, 0xBDD0, 0x53EB, 0xBDD1, 0x7A96, 0xBDD2, 0x63ED, 0xBDD3, 0x63A5, 0xBDD4, 0x7686, 0xBDD5, 0x79F8, + 0xBDD6, 0x8857, 0xBDD7, 0x9636, 0xBDD8, 0x622A, 0xBDD9, 0x52AB, 0xBDDA, 0x8282, 0xBDDB, 0x6854, 0xBDDC, 0x6770, 0xBDDD, 0x6377, + 0xBDDE, 0x776B, 0xBDDF, 0x7AED, 0xBDE0, 0x6D01, 0xBDE1, 0x7ED3, 0xBDE2, 0x89E3, 0xBDE3, 0x59D0, 0xBDE4, 0x6212, 0xBDE5, 0x85C9, + 0xBDE6, 0x82A5, 0xBDE7, 0x754C, 0xBDE8, 0x501F, 0xBDE9, 0x4ECB, 0xBDEA, 0x75A5, 0xBDEB, 0x8BEB, 0xBDEC, 0x5C4A, 0xBDED, 0x5DFE, + 0xBDEE, 0x7B4B, 0xBDEF, 0x65A4, 0xBDF0, 0x91D1, 0xBDF1, 0x4ECA, 0xBDF2, 0x6D25, 0xBDF3, 0x895F, 0xBDF4, 0x7D27, 0xBDF5, 0x9526, + 0xBDF6, 0x4EC5, 0xBDF7, 0x8C28, 0xBDF8, 0x8FDB, 0xBDF9, 0x9773, 0xBDFA, 0x664B, 0xBDFB, 0x7981, 0xBDFC, 0x8FD1, 0xBDFD, 0x70EC, + 0xBDFE, 0x6D78, 0xBE40, 0x7D99, 0xBE41, 0x7D9A, 0xBE42, 0x7D9B, 0xBE43, 0x7D9C, 0xBE44, 0x7D9D, 0xBE45, 0x7D9E, 0xBE46, 0x7D9F, + 0xBE47, 0x7DA0, 0xBE48, 0x7DA1, 0xBE49, 0x7DA2, 0xBE4A, 0x7DA3, 0xBE4B, 0x7DA4, 0xBE4C, 0x7DA5, 0xBE4D, 0x7DA7, 0xBE4E, 0x7DA8, + 0xBE4F, 0x7DA9, 0xBE50, 0x7DAA, 0xBE51, 0x7DAB, 0xBE52, 0x7DAC, 0xBE53, 0x7DAD, 0xBE54, 0x7DAF, 0xBE55, 0x7DB0, 0xBE56, 0x7DB1, + 0xBE57, 0x7DB2, 0xBE58, 0x7DB3, 0xBE59, 0x7DB4, 0xBE5A, 0x7DB5, 0xBE5B, 0x7DB6, 0xBE5C, 0x7DB7, 0xBE5D, 0x7DB8, 0xBE5E, 0x7DB9, + 0xBE5F, 0x7DBA, 0xBE60, 0x7DBB, 0xBE61, 0x7DBC, 0xBE62, 0x7DBD, 0xBE63, 0x7DBE, 0xBE64, 0x7DBF, 0xBE65, 0x7DC0, 0xBE66, 0x7DC1, + 0xBE67, 0x7DC2, 0xBE68, 0x7DC3, 0xBE69, 0x7DC4, 0xBE6A, 0x7DC5, 0xBE6B, 0x7DC6, 0xBE6C, 0x7DC7, 0xBE6D, 0x7DC8, 0xBE6E, 0x7DC9, + 0xBE6F, 0x7DCA, 0xBE70, 0x7DCB, 0xBE71, 0x7DCC, 0xBE72, 0x7DCD, 0xBE73, 0x7DCE, 0xBE74, 0x7DCF, 0xBE75, 0x7DD0, 0xBE76, 0x7DD1, + 0xBE77, 0x7DD2, 0xBE78, 0x7DD3, 0xBE79, 0x7DD4, 0xBE7A, 0x7DD5, 0xBE7B, 0x7DD6, 0xBE7C, 0x7DD7, 0xBE7D, 0x7DD8, 0xBE7E, 0x7DD9, + 0xBE80, 0x7DDA, 0xBE81, 0x7DDB, 0xBE82, 0x7DDC, 0xBE83, 0x7DDD, 0xBE84, 0x7DDE, 0xBE85, 0x7DDF, 0xBE86, 0x7DE0, 0xBE87, 0x7DE1, + 0xBE88, 0x7DE2, 0xBE89, 0x7DE3, 0xBE8A, 0x7DE4, 0xBE8B, 0x7DE5, 0xBE8C, 0x7DE6, 0xBE8D, 0x7DE7, 0xBE8E, 0x7DE8, 0xBE8F, 0x7DE9, + 0xBE90, 0x7DEA, 0xBE91, 0x7DEB, 0xBE92, 0x7DEC, 0xBE93, 0x7DED, 0xBE94, 0x7DEE, 0xBE95, 0x7DEF, 0xBE96, 0x7DF0, 0xBE97, 0x7DF1, + 0xBE98, 0x7DF2, 0xBE99, 0x7DF3, 0xBE9A, 0x7DF4, 0xBE9B, 0x7DF5, 0xBE9C, 0x7DF6, 0xBE9D, 0x7DF7, 0xBE9E, 0x7DF8, 0xBE9F, 0x7DF9, + 0xBEA0, 0x7DFA, 0xBEA1, 0x5C3D, 0xBEA2, 0x52B2, 0xBEA3, 0x8346, 0xBEA4, 0x5162, 0xBEA5, 0x830E, 0xBEA6, 0x775B, 0xBEA7, 0x6676, + 0xBEA8, 0x9CB8, 0xBEA9, 0x4EAC, 0xBEAA, 0x60CA, 0xBEAB, 0x7CBE, 0xBEAC, 0x7CB3, 0xBEAD, 0x7ECF, 0xBEAE, 0x4E95, 0xBEAF, 0x8B66, + 0xBEB0, 0x666F, 0xBEB1, 0x9888, 0xBEB2, 0x9759, 0xBEB3, 0x5883, 0xBEB4, 0x656C, 0xBEB5, 0x955C, 0xBEB6, 0x5F84, 0xBEB7, 0x75C9, + 0xBEB8, 0x9756, 0xBEB9, 0x7ADF, 0xBEBA, 0x7ADE, 0xBEBB, 0x51C0, 0xBEBC, 0x70AF, 0xBEBD, 0x7A98, 0xBEBE, 0x63EA, 0xBEBF, 0x7A76, + 0xBEC0, 0x7EA0, 0xBEC1, 0x7396, 0xBEC2, 0x97ED, 0xBEC3, 0x4E45, 0xBEC4, 0x7078, 0xBEC5, 0x4E5D, 0xBEC6, 0x9152, 0xBEC7, 0x53A9, + 0xBEC8, 0x6551, 0xBEC9, 0x65E7, 0xBECA, 0x81FC, 0xBECB, 0x8205, 0xBECC, 0x548E, 0xBECD, 0x5C31, 0xBECE, 0x759A, 0xBECF, 0x97A0, + 0xBED0, 0x62D8, 0xBED1, 0x72D9, 0xBED2, 0x75BD, 0xBED3, 0x5C45, 0xBED4, 0x9A79, 0xBED5, 0x83CA, 0xBED6, 0x5C40, 0xBED7, 0x5480, + 0xBED8, 0x77E9, 0xBED9, 0x4E3E, 0xBEDA, 0x6CAE, 0xBEDB, 0x805A, 0xBEDC, 0x62D2, 0xBEDD, 0x636E, 0xBEDE, 0x5DE8, 0xBEDF, 0x5177, + 0xBEE0, 0x8DDD, 0xBEE1, 0x8E1E, 0xBEE2, 0x952F, 0xBEE3, 0x4FF1, 0xBEE4, 0x53E5, 0xBEE5, 0x60E7, 0xBEE6, 0x70AC, 0xBEE7, 0x5267, + 0xBEE8, 0x6350, 0xBEE9, 0x9E43, 0xBEEA, 0x5A1F, 0xBEEB, 0x5026, 0xBEEC, 0x7737, 0xBEED, 0x5377, 0xBEEE, 0x7EE2, 0xBEEF, 0x6485, + 0xBEF0, 0x652B, 0xBEF1, 0x6289, 0xBEF2, 0x6398, 0xBEF3, 0x5014, 0xBEF4, 0x7235, 0xBEF5, 0x89C9, 0xBEF6, 0x51B3, 0xBEF7, 0x8BC0, + 0xBEF8, 0x7EDD, 0xBEF9, 0x5747, 0xBEFA, 0x83CC, 0xBEFB, 0x94A7, 0xBEFC, 0x519B, 0xBEFD, 0x541B, 0xBEFE, 0x5CFB, 0xBF40, 0x7DFB, + 0xBF41, 0x7DFC, 0xBF42, 0x7DFD, 0xBF43, 0x7DFE, 0xBF44, 0x7DFF, 0xBF45, 0x7E00, 0xBF46, 0x7E01, 0xBF47, 0x7E02, 0xBF48, 0x7E03, + 0xBF49, 0x7E04, 0xBF4A, 0x7E05, 0xBF4B, 0x7E06, 0xBF4C, 0x7E07, 0xBF4D, 0x7E08, 0xBF4E, 0x7E09, 0xBF4F, 0x7E0A, 0xBF50, 0x7E0B, + 0xBF51, 0x7E0C, 0xBF52, 0x7E0D, 0xBF53, 0x7E0E, 0xBF54, 0x7E0F, 0xBF55, 0x7E10, 0xBF56, 0x7E11, 0xBF57, 0x7E12, 0xBF58, 0x7E13, + 0xBF59, 0x7E14, 0xBF5A, 0x7E15, 0xBF5B, 0x7E16, 0xBF5C, 0x7E17, 0xBF5D, 0x7E18, 0xBF5E, 0x7E19, 0xBF5F, 0x7E1A, 0xBF60, 0x7E1B, + 0xBF61, 0x7E1C, 0xBF62, 0x7E1D, 0xBF63, 0x7E1E, 0xBF64, 0x7E1F, 0xBF65, 0x7E20, 0xBF66, 0x7E21, 0xBF67, 0x7E22, 0xBF68, 0x7E23, + 0xBF69, 0x7E24, 0xBF6A, 0x7E25, 0xBF6B, 0x7E26, 0xBF6C, 0x7E27, 0xBF6D, 0x7E28, 0xBF6E, 0x7E29, 0xBF6F, 0x7E2A, 0xBF70, 0x7E2B, + 0xBF71, 0x7E2C, 0xBF72, 0x7E2D, 0xBF73, 0x7E2E, 0xBF74, 0x7E2F, 0xBF75, 0x7E30, 0xBF76, 0x7E31, 0xBF77, 0x7E32, 0xBF78, 0x7E33, + 0xBF79, 0x7E34, 0xBF7A, 0x7E35, 0xBF7B, 0x7E36, 0xBF7C, 0x7E37, 0xBF7D, 0x7E38, 0xBF7E, 0x7E39, 0xBF80, 0x7E3A, 0xBF81, 0x7E3C, + 0xBF82, 0x7E3D, 0xBF83, 0x7E3E, 0xBF84, 0x7E3F, 0xBF85, 0x7E40, 0xBF86, 0x7E42, 0xBF87, 0x7E43, 0xBF88, 0x7E44, 0xBF89, 0x7E45, + 0xBF8A, 0x7E46, 0xBF8B, 0x7E48, 0xBF8C, 0x7E49, 0xBF8D, 0x7E4A, 0xBF8E, 0x7E4B, 0xBF8F, 0x7E4C, 0xBF90, 0x7E4D, 0xBF91, 0x7E4E, + 0xBF92, 0x7E4F, 0xBF93, 0x7E50, 0xBF94, 0x7E51, 0xBF95, 0x7E52, 0xBF96, 0x7E53, 0xBF97, 0x7E54, 0xBF98, 0x7E55, 0xBF99, 0x7E56, + 0xBF9A, 0x7E57, 0xBF9B, 0x7E58, 0xBF9C, 0x7E59, 0xBF9D, 0x7E5A, 0xBF9E, 0x7E5B, 0xBF9F, 0x7E5C, 0xBFA0, 0x7E5D, 0xBFA1, 0x4FCA, + 0xBFA2, 0x7AE3, 0xBFA3, 0x6D5A, 0xBFA4, 0x90E1, 0xBFA5, 0x9A8F, 0xBFA6, 0x5580, 0xBFA7, 0x5496, 0xBFA8, 0x5361, 0xBFA9, 0x54AF, + 0xBFAA, 0x5F00, 0xBFAB, 0x63E9, 0xBFAC, 0x6977, 0xBFAD, 0x51EF, 0xBFAE, 0x6168, 0xBFAF, 0x520A, 0xBFB0, 0x582A, 0xBFB1, 0x52D8, + 0xBFB2, 0x574E, 0xBFB3, 0x780D, 0xBFB4, 0x770B, 0xBFB5, 0x5EB7, 0xBFB6, 0x6177, 0xBFB7, 0x7CE0, 0xBFB8, 0x625B, 0xBFB9, 0x6297, + 0xBFBA, 0x4EA2, 0xBFBB, 0x7095, 0xBFBC, 0x8003, 0xBFBD, 0x62F7, 0xBFBE, 0x70E4, 0xBFBF, 0x9760, 0xBFC0, 0x5777, 0xBFC1, 0x82DB, + 0xBFC2, 0x67EF, 0xBFC3, 0x68F5, 0xBFC4, 0x78D5, 0xBFC5, 0x9897, 0xBFC6, 0x79D1, 0xBFC7, 0x58F3, 0xBFC8, 0x54B3, 0xBFC9, 0x53EF, + 0xBFCA, 0x6E34, 0xBFCB, 0x514B, 0xBFCC, 0x523B, 0xBFCD, 0x5BA2, 0xBFCE, 0x8BFE, 0xBFCF, 0x80AF, 0xBFD0, 0x5543, 0xBFD1, 0x57A6, + 0xBFD2, 0x6073, 0xBFD3, 0x5751, 0xBFD4, 0x542D, 0xBFD5, 0x7A7A, 0xBFD6, 0x6050, 0xBFD7, 0x5B54, 0xBFD8, 0x63A7, 0xBFD9, 0x62A0, + 0xBFDA, 0x53E3, 0xBFDB, 0x6263, 0xBFDC, 0x5BC7, 0xBFDD, 0x67AF, 0xBFDE, 0x54ED, 0xBFDF, 0x7A9F, 0xBFE0, 0x82E6, 0xBFE1, 0x9177, + 0xBFE2, 0x5E93, 0xBFE3, 0x88E4, 0xBFE4, 0x5938, 0xBFE5, 0x57AE, 0xBFE6, 0x630E, 0xBFE7, 0x8DE8, 0xBFE8, 0x80EF, 0xBFE9, 0x5757, + 0xBFEA, 0x7B77, 0xBFEB, 0x4FA9, 0xBFEC, 0x5FEB, 0xBFED, 0x5BBD, 0xBFEE, 0x6B3E, 0xBFEF, 0x5321, 0xBFF0, 0x7B50, 0xBFF1, 0x72C2, + 0xBFF2, 0x6846, 0xBFF3, 0x77FF, 0xBFF4, 0x7736, 0xBFF5, 0x65F7, 0xBFF6, 0x51B5, 0xBFF7, 0x4E8F, 0xBFF8, 0x76D4, 0xBFF9, 0x5CBF, + 0xBFFA, 0x7AA5, 0xBFFB, 0x8475, 0xBFFC, 0x594E, 0xBFFD, 0x9B41, 0xBFFE, 0x5080, 0xC040, 0x7E5E, 0xC041, 0x7E5F, 0xC042, 0x7E60, + 0xC043, 0x7E61, 0xC044, 0x7E62, 0xC045, 0x7E63, 0xC046, 0x7E64, 0xC047, 0x7E65, 0xC048, 0x7E66, 0xC049, 0x7E67, 0xC04A, 0x7E68, + 0xC04B, 0x7E69, 0xC04C, 0x7E6A, 0xC04D, 0x7E6B, 0xC04E, 0x7E6C, 0xC04F, 0x7E6D, 0xC050, 0x7E6E, 0xC051, 0x7E6F, 0xC052, 0x7E70, + 0xC053, 0x7E71, 0xC054, 0x7E72, 0xC055, 0x7E73, 0xC056, 0x7E74, 0xC057, 0x7E75, 0xC058, 0x7E76, 0xC059, 0x7E77, 0xC05A, 0x7E78, + 0xC05B, 0x7E79, 0xC05C, 0x7E7A, 0xC05D, 0x7E7B, 0xC05E, 0x7E7C, 0xC05F, 0x7E7D, 0xC060, 0x7E7E, 0xC061, 0x7E7F, 0xC062, 0x7E80, + 0xC063, 0x7E81, 0xC064, 0x7E83, 0xC065, 0x7E84, 0xC066, 0x7E85, 0xC067, 0x7E86, 0xC068, 0x7E87, 0xC069, 0x7E88, 0xC06A, 0x7E89, + 0xC06B, 0x7E8A, 0xC06C, 0x7E8B, 0xC06D, 0x7E8C, 0xC06E, 0x7E8D, 0xC06F, 0x7E8E, 0xC070, 0x7E8F, 0xC071, 0x7E90, 0xC072, 0x7E91, + 0xC073, 0x7E92, 0xC074, 0x7E93, 0xC075, 0x7E94, 0xC076, 0x7E95, 0xC077, 0x7E96, 0xC078, 0x7E97, 0xC079, 0x7E98, 0xC07A, 0x7E99, + 0xC07B, 0x7E9A, 0xC07C, 0x7E9C, 0xC07D, 0x7E9D, 0xC07E, 0x7E9E, 0xC080, 0x7EAE, 0xC081, 0x7EB4, 0xC082, 0x7EBB, 0xC083, 0x7EBC, + 0xC084, 0x7ED6, 0xC085, 0x7EE4, 0xC086, 0x7EEC, 0xC087, 0x7EF9, 0xC088, 0x7F0A, 0xC089, 0x7F10, 0xC08A, 0x7F1E, 0xC08B, 0x7F37, + 0xC08C, 0x7F39, 0xC08D, 0x7F3B, 0xC08E, 0x7F3C, 0xC08F, 0x7F3D, 0xC090, 0x7F3E, 0xC091, 0x7F3F, 0xC092, 0x7F40, 0xC093, 0x7F41, + 0xC094, 0x7F43, 0xC095, 0x7F46, 0xC096, 0x7F47, 0xC097, 0x7F48, 0xC098, 0x7F49, 0xC099, 0x7F4A, 0xC09A, 0x7F4B, 0xC09B, 0x7F4C, + 0xC09C, 0x7F4D, 0xC09D, 0x7F4E, 0xC09E, 0x7F4F, 0xC09F, 0x7F52, 0xC0A0, 0x7F53, 0xC0A1, 0x9988, 0xC0A2, 0x6127, 0xC0A3, 0x6E83, + 0xC0A4, 0x5764, 0xC0A5, 0x6606, 0xC0A6, 0x6346, 0xC0A7, 0x56F0, 0xC0A8, 0x62EC, 0xC0A9, 0x6269, 0xC0AA, 0x5ED3, 0xC0AB, 0x9614, + 0xC0AC, 0x5783, 0xC0AD, 0x62C9, 0xC0AE, 0x5587, 0xC0AF, 0x8721, 0xC0B0, 0x814A, 0xC0B1, 0x8FA3, 0xC0B2, 0x5566, 0xC0B3, 0x83B1, + 0xC0B4, 0x6765, 0xC0B5, 0x8D56, 0xC0B6, 0x84DD, 0xC0B7, 0x5A6A, 0xC0B8, 0x680F, 0xC0B9, 0x62E6, 0xC0BA, 0x7BEE, 0xC0BB, 0x9611, + 0xC0BC, 0x5170, 0xC0BD, 0x6F9C, 0xC0BE, 0x8C30, 0xC0BF, 0x63FD, 0xC0C0, 0x89C8, 0xC0C1, 0x61D2, 0xC0C2, 0x7F06, 0xC0C3, 0x70C2, + 0xC0C4, 0x6EE5, 0xC0C5, 0x7405, 0xC0C6, 0x6994, 0xC0C7, 0x72FC, 0xC0C8, 0x5ECA, 0xC0C9, 0x90CE, 0xC0CA, 0x6717, 0xC0CB, 0x6D6A, + 0xC0CC, 0x635E, 0xC0CD, 0x52B3, 0xC0CE, 0x7262, 0xC0CF, 0x8001, 0xC0D0, 0x4F6C, 0xC0D1, 0x59E5, 0xC0D2, 0x916A, 0xC0D3, 0x70D9, + 0xC0D4, 0x6D9D, 0xC0D5, 0x52D2, 0xC0D6, 0x4E50, 0xC0D7, 0x96F7, 0xC0D8, 0x956D, 0xC0D9, 0x857E, 0xC0DA, 0x78CA, 0xC0DB, 0x7D2F, + 0xC0DC, 0x5121, 0xC0DD, 0x5792, 0xC0DE, 0x64C2, 0xC0DF, 0x808B, 0xC0E0, 0x7C7B, 0xC0E1, 0x6CEA, 0xC0E2, 0x68F1, 0xC0E3, 0x695E, + 0xC0E4, 0x51B7, 0xC0E5, 0x5398, 0xC0E6, 0x68A8, 0xC0E7, 0x7281, 0xC0E8, 0x9ECE, 0xC0E9, 0x7BF1, 0xC0EA, 0x72F8, 0xC0EB, 0x79BB, + 0xC0EC, 0x6F13, 0xC0ED, 0x7406, 0xC0EE, 0x674E, 0xC0EF, 0x91CC, 0xC0F0, 0x9CA4, 0xC0F1, 0x793C, 0xC0F2, 0x8389, 0xC0F3, 0x8354, + 0xC0F4, 0x540F, 0xC0F5, 0x6817, 0xC0F6, 0x4E3D, 0xC0F7, 0x5389, 0xC0F8, 0x52B1, 0xC0F9, 0x783E, 0xC0FA, 0x5386, 0xC0FB, 0x5229, + 0xC0FC, 0x5088, 0xC0FD, 0x4F8B, 0xC0FE, 0x4FD0, 0xC140, 0x7F56, 0xC141, 0x7F59, 0xC142, 0x7F5B, 0xC143, 0x7F5C, 0xC144, 0x7F5D, + 0xC145, 0x7F5E, 0xC146, 0x7F60, 0xC147, 0x7F63, 0xC148, 0x7F64, 0xC149, 0x7F65, 0xC14A, 0x7F66, 0xC14B, 0x7F67, 0xC14C, 0x7F6B, + 0xC14D, 0x7F6C, 0xC14E, 0x7F6D, 0xC14F, 0x7F6F, 0xC150, 0x7F70, 0xC151, 0x7F73, 0xC152, 0x7F75, 0xC153, 0x7F76, 0xC154, 0x7F77, + 0xC155, 0x7F78, 0xC156, 0x7F7A, 0xC157, 0x7F7B, 0xC158, 0x7F7C, 0xC159, 0x7F7D, 0xC15A, 0x7F7F, 0xC15B, 0x7F80, 0xC15C, 0x7F82, + 0xC15D, 0x7F83, 0xC15E, 0x7F84, 0xC15F, 0x7F85, 0xC160, 0x7F86, 0xC161, 0x7F87, 0xC162, 0x7F88, 0xC163, 0x7F89, 0xC164, 0x7F8B, + 0xC165, 0x7F8D, 0xC166, 0x7F8F, 0xC167, 0x7F90, 0xC168, 0x7F91, 0xC169, 0x7F92, 0xC16A, 0x7F93, 0xC16B, 0x7F95, 0xC16C, 0x7F96, + 0xC16D, 0x7F97, 0xC16E, 0x7F98, 0xC16F, 0x7F99, 0xC170, 0x7F9B, 0xC171, 0x7F9C, 0xC172, 0x7FA0, 0xC173, 0x7FA2, 0xC174, 0x7FA3, + 0xC175, 0x7FA5, 0xC176, 0x7FA6, 0xC177, 0x7FA8, 0xC178, 0x7FA9, 0xC179, 0x7FAA, 0xC17A, 0x7FAB, 0xC17B, 0x7FAC, 0xC17C, 0x7FAD, + 0xC17D, 0x7FAE, 0xC17E, 0x7FB1, 0xC180, 0x7FB3, 0xC181, 0x7FB4, 0xC182, 0x7FB5, 0xC183, 0x7FB6, 0xC184, 0x7FB7, 0xC185, 0x7FBA, + 0xC186, 0x7FBB, 0xC187, 0x7FBE, 0xC188, 0x7FC0, 0xC189, 0x7FC2, 0xC18A, 0x7FC3, 0xC18B, 0x7FC4, 0xC18C, 0x7FC6, 0xC18D, 0x7FC7, + 0xC18E, 0x7FC8, 0xC18F, 0x7FC9, 0xC190, 0x7FCB, 0xC191, 0x7FCD, 0xC192, 0x7FCF, 0xC193, 0x7FD0, 0xC194, 0x7FD1, 0xC195, 0x7FD2, + 0xC196, 0x7FD3, 0xC197, 0x7FD6, 0xC198, 0x7FD7, 0xC199, 0x7FD9, 0xC19A, 0x7FDA, 0xC19B, 0x7FDB, 0xC19C, 0x7FDC, 0xC19D, 0x7FDD, + 0xC19E, 0x7FDE, 0xC19F, 0x7FE2, 0xC1A0, 0x7FE3, 0xC1A1, 0x75E2, 0xC1A2, 0x7ACB, 0xC1A3, 0x7C92, 0xC1A4, 0x6CA5, 0xC1A5, 0x96B6, + 0xC1A6, 0x529B, 0xC1A7, 0x7483, 0xC1A8, 0x54E9, 0xC1A9, 0x4FE9, 0xC1AA, 0x8054, 0xC1AB, 0x83B2, 0xC1AC, 0x8FDE, 0xC1AD, 0x9570, + 0xC1AE, 0x5EC9, 0xC1AF, 0x601C, 0xC1B0, 0x6D9F, 0xC1B1, 0x5E18, 0xC1B2, 0x655B, 0xC1B3, 0x8138, 0xC1B4, 0x94FE, 0xC1B5, 0x604B, + 0xC1B6, 0x70BC, 0xC1B7, 0x7EC3, 0xC1B8, 0x7CAE, 0xC1B9, 0x51C9, 0xC1BA, 0x6881, 0xC1BB, 0x7CB1, 0xC1BC, 0x826F, 0xC1BD, 0x4E24, + 0xC1BE, 0x8F86, 0xC1BF, 0x91CF, 0xC1C0, 0x667E, 0xC1C1, 0x4EAE, 0xC1C2, 0x8C05, 0xC1C3, 0x64A9, 0xC1C4, 0x804A, 0xC1C5, 0x50DA, + 0xC1C6, 0x7597, 0xC1C7, 0x71CE, 0xC1C8, 0x5BE5, 0xC1C9, 0x8FBD, 0xC1CA, 0x6F66, 0xC1CB, 0x4E86, 0xC1CC, 0x6482, 0xC1CD, 0x9563, + 0xC1CE, 0x5ED6, 0xC1CF, 0x6599, 0xC1D0, 0x5217, 0xC1D1, 0x88C2, 0xC1D2, 0x70C8, 0xC1D3, 0x52A3, 0xC1D4, 0x730E, 0xC1D5, 0x7433, + 0xC1D6, 0x6797, 0xC1D7, 0x78F7, 0xC1D8, 0x9716, 0xC1D9, 0x4E34, 0xC1DA, 0x90BB, 0xC1DB, 0x9CDE, 0xC1DC, 0x6DCB, 0xC1DD, 0x51DB, + 0xC1DE, 0x8D41, 0xC1DF, 0x541D, 0xC1E0, 0x62CE, 0xC1E1, 0x73B2, 0xC1E2, 0x83F1, 0xC1E3, 0x96F6, 0xC1E4, 0x9F84, 0xC1E5, 0x94C3, + 0xC1E6, 0x4F36, 0xC1E7, 0x7F9A, 0xC1E8, 0x51CC, 0xC1E9, 0x7075, 0xC1EA, 0x9675, 0xC1EB, 0x5CAD, 0xC1EC, 0x9886, 0xC1ED, 0x53E6, + 0xC1EE, 0x4EE4, 0xC1EF, 0x6E9C, 0xC1F0, 0x7409, 0xC1F1, 0x69B4, 0xC1F2, 0x786B, 0xC1F3, 0x998F, 0xC1F4, 0x7559, 0xC1F5, 0x5218, + 0xC1F6, 0x7624, 0xC1F7, 0x6D41, 0xC1F8, 0x67F3, 0xC1F9, 0x516D, 0xC1FA, 0x9F99, 0xC1FB, 0x804B, 0xC1FC, 0x5499, 0xC1FD, 0x7B3C, + 0xC1FE, 0x7ABF, 0xC240, 0x7FE4, 0xC241, 0x7FE7, 0xC242, 0x7FE8, 0xC243, 0x7FEA, 0xC244, 0x7FEB, 0xC245, 0x7FEC, 0xC246, 0x7FED, + 0xC247, 0x7FEF, 0xC248, 0x7FF2, 0xC249, 0x7FF4, 0xC24A, 0x7FF5, 0xC24B, 0x7FF6, 0xC24C, 0x7FF7, 0xC24D, 0x7FF8, 0xC24E, 0x7FF9, + 0xC24F, 0x7FFA, 0xC250, 0x7FFD, 0xC251, 0x7FFE, 0xC252, 0x7FFF, 0xC253, 0x8002, 0xC254, 0x8007, 0xC255, 0x8008, 0xC256, 0x8009, + 0xC257, 0x800A, 0xC258, 0x800E, 0xC259, 0x800F, 0xC25A, 0x8011, 0xC25B, 0x8013, 0xC25C, 0x801A, 0xC25D, 0x801B, 0xC25E, 0x801D, + 0xC25F, 0x801E, 0xC260, 0x801F, 0xC261, 0x8021, 0xC262, 0x8023, 0xC263, 0x8024, 0xC264, 0x802B, 0xC265, 0x802C, 0xC266, 0x802D, + 0xC267, 0x802E, 0xC268, 0x802F, 0xC269, 0x8030, 0xC26A, 0x8032, 0xC26B, 0x8034, 0xC26C, 0x8039, 0xC26D, 0x803A, 0xC26E, 0x803C, + 0xC26F, 0x803E, 0xC270, 0x8040, 0xC271, 0x8041, 0xC272, 0x8044, 0xC273, 0x8045, 0xC274, 0x8047, 0xC275, 0x8048, 0xC276, 0x8049, + 0xC277, 0x804E, 0xC278, 0x804F, 0xC279, 0x8050, 0xC27A, 0x8051, 0xC27B, 0x8053, 0xC27C, 0x8055, 0xC27D, 0x8056, 0xC27E, 0x8057, + 0xC280, 0x8059, 0xC281, 0x805B, 0xC282, 0x805C, 0xC283, 0x805D, 0xC284, 0x805E, 0xC285, 0x805F, 0xC286, 0x8060, 0xC287, 0x8061, + 0xC288, 0x8062, 0xC289, 0x8063, 0xC28A, 0x8064, 0xC28B, 0x8065, 0xC28C, 0x8066, 0xC28D, 0x8067, 0xC28E, 0x8068, 0xC28F, 0x806B, + 0xC290, 0x806C, 0xC291, 0x806D, 0xC292, 0x806E, 0xC293, 0x806F, 0xC294, 0x8070, 0xC295, 0x8072, 0xC296, 0x8073, 0xC297, 0x8074, + 0xC298, 0x8075, 0xC299, 0x8076, 0xC29A, 0x8077, 0xC29B, 0x8078, 0xC29C, 0x8079, 0xC29D, 0x807A, 0xC29E, 0x807B, 0xC29F, 0x807C, + 0xC2A0, 0x807D, 0xC2A1, 0x9686, 0xC2A2, 0x5784, 0xC2A3, 0x62E2, 0xC2A4, 0x9647, 0xC2A5, 0x697C, 0xC2A6, 0x5A04, 0xC2A7, 0x6402, + 0xC2A8, 0x7BD3, 0xC2A9, 0x6F0F, 0xC2AA, 0x964B, 0xC2AB, 0x82A6, 0xC2AC, 0x5362, 0xC2AD, 0x9885, 0xC2AE, 0x5E90, 0xC2AF, 0x7089, + 0xC2B0, 0x63B3, 0xC2B1, 0x5364, 0xC2B2, 0x864F, 0xC2B3, 0x9C81, 0xC2B4, 0x9E93, 0xC2B5, 0x788C, 0xC2B6, 0x9732, 0xC2B7, 0x8DEF, + 0xC2B8, 0x8D42, 0xC2B9, 0x9E7F, 0xC2BA, 0x6F5E, 0xC2BB, 0x7984, 0xC2BC, 0x5F55, 0xC2BD, 0x9646, 0xC2BE, 0x622E, 0xC2BF, 0x9A74, + 0xC2C0, 0x5415, 0xC2C1, 0x94DD, 0xC2C2, 0x4FA3, 0xC2C3, 0x65C5, 0xC2C4, 0x5C65, 0xC2C5, 0x5C61, 0xC2C6, 0x7F15, 0xC2C7, 0x8651, + 0xC2C8, 0x6C2F, 0xC2C9, 0x5F8B, 0xC2CA, 0x7387, 0xC2CB, 0x6EE4, 0xC2CC, 0x7EFF, 0xC2CD, 0x5CE6, 0xC2CE, 0x631B, 0xC2CF, 0x5B6A, + 0xC2D0, 0x6EE6, 0xC2D1, 0x5375, 0xC2D2, 0x4E71, 0xC2D3, 0x63A0, 0xC2D4, 0x7565, 0xC2D5, 0x62A1, 0xC2D6, 0x8F6E, 0xC2D7, 0x4F26, + 0xC2D8, 0x4ED1, 0xC2D9, 0x6CA6, 0xC2DA, 0x7EB6, 0xC2DB, 0x8BBA, 0xC2DC, 0x841D, 0xC2DD, 0x87BA, 0xC2DE, 0x7F57, 0xC2DF, 0x903B, + 0xC2E0, 0x9523, 0xC2E1, 0x7BA9, 0xC2E2, 0x9AA1, 0xC2E3, 0x88F8, 0xC2E4, 0x843D, 0xC2E5, 0x6D1B, 0xC2E6, 0x9A86, 0xC2E7, 0x7EDC, + 0xC2E8, 0x5988, 0xC2E9, 0x9EBB, 0xC2EA, 0x739B, 0xC2EB, 0x7801, 0xC2EC, 0x8682, 0xC2ED, 0x9A6C, 0xC2EE, 0x9A82, 0xC2EF, 0x561B, + 0xC2F0, 0x5417, 0xC2F1, 0x57CB, 0xC2F2, 0x4E70, 0xC2F3, 0x9EA6, 0xC2F4, 0x5356, 0xC2F5, 0x8FC8, 0xC2F6, 0x8109, 0xC2F7, 0x7792, + 0xC2F8, 0x9992, 0xC2F9, 0x86EE, 0xC2FA, 0x6EE1, 0xC2FB, 0x8513, 0xC2FC, 0x66FC, 0xC2FD, 0x6162, 0xC2FE, 0x6F2B, 0xC340, 0x807E, + 0xC341, 0x8081, 0xC342, 0x8082, 0xC343, 0x8085, 0xC344, 0x8088, 0xC345, 0x808A, 0xC346, 0x808D, 0xC347, 0x808E, 0xC348, 0x808F, + 0xC349, 0x8090, 0xC34A, 0x8091, 0xC34B, 0x8092, 0xC34C, 0x8094, 0xC34D, 0x8095, 0xC34E, 0x8097, 0xC34F, 0x8099, 0xC350, 0x809E, + 0xC351, 0x80A3, 0xC352, 0x80A6, 0xC353, 0x80A7, 0xC354, 0x80A8, 0xC355, 0x80AC, 0xC356, 0x80B0, 0xC357, 0x80B3, 0xC358, 0x80B5, + 0xC359, 0x80B6, 0xC35A, 0x80B8, 0xC35B, 0x80B9, 0xC35C, 0x80BB, 0xC35D, 0x80C5, 0xC35E, 0x80C7, 0xC35F, 0x80C8, 0xC360, 0x80C9, + 0xC361, 0x80CA, 0xC362, 0x80CB, 0xC363, 0x80CF, 0xC364, 0x80D0, 0xC365, 0x80D1, 0xC366, 0x80D2, 0xC367, 0x80D3, 0xC368, 0x80D4, + 0xC369, 0x80D5, 0xC36A, 0x80D8, 0xC36B, 0x80DF, 0xC36C, 0x80E0, 0xC36D, 0x80E2, 0xC36E, 0x80E3, 0xC36F, 0x80E6, 0xC370, 0x80EE, + 0xC371, 0x80F5, 0xC372, 0x80F7, 0xC373, 0x80F9, 0xC374, 0x80FB, 0xC375, 0x80FE, 0xC376, 0x80FF, 0xC377, 0x8100, 0xC378, 0x8101, + 0xC379, 0x8103, 0xC37A, 0x8104, 0xC37B, 0x8105, 0xC37C, 0x8107, 0xC37D, 0x8108, 0xC37E, 0x810B, 0xC380, 0x810C, 0xC381, 0x8115, + 0xC382, 0x8117, 0xC383, 0x8119, 0xC384, 0x811B, 0xC385, 0x811C, 0xC386, 0x811D, 0xC387, 0x811F, 0xC388, 0x8120, 0xC389, 0x8121, + 0xC38A, 0x8122, 0xC38B, 0x8123, 0xC38C, 0x8124, 0xC38D, 0x8125, 0xC38E, 0x8126, 0xC38F, 0x8127, 0xC390, 0x8128, 0xC391, 0x8129, + 0xC392, 0x812A, 0xC393, 0x812B, 0xC394, 0x812D, 0xC395, 0x812E, 0xC396, 0x8130, 0xC397, 0x8133, 0xC398, 0x8134, 0xC399, 0x8135, + 0xC39A, 0x8137, 0xC39B, 0x8139, 0xC39C, 0x813A, 0xC39D, 0x813B, 0xC39E, 0x813C, 0xC39F, 0x813D, 0xC3A0, 0x813F, 0xC3A1, 0x8C29, + 0xC3A2, 0x8292, 0xC3A3, 0x832B, 0xC3A4, 0x76F2, 0xC3A5, 0x6C13, 0xC3A6, 0x5FD9, 0xC3A7, 0x83BD, 0xC3A8, 0x732B, 0xC3A9, 0x8305, + 0xC3AA, 0x951A, 0xC3AB, 0x6BDB, 0xC3AC, 0x77DB, 0xC3AD, 0x94C6, 0xC3AE, 0x536F, 0xC3AF, 0x8302, 0xC3B0, 0x5192, 0xC3B1, 0x5E3D, + 0xC3B2, 0x8C8C, 0xC3B3, 0x8D38, 0xC3B4, 0x4E48, 0xC3B5, 0x73AB, 0xC3B6, 0x679A, 0xC3B7, 0x6885, 0xC3B8, 0x9176, 0xC3B9, 0x9709, + 0xC3BA, 0x7164, 0xC3BB, 0x6CA1, 0xC3BC, 0x7709, 0xC3BD, 0x5A92, 0xC3BE, 0x9541, 0xC3BF, 0x6BCF, 0xC3C0, 0x7F8E, 0xC3C1, 0x6627, + 0xC3C2, 0x5BD0, 0xC3C3, 0x59B9, 0xC3C4, 0x5A9A, 0xC3C5, 0x95E8, 0xC3C6, 0x95F7, 0xC3C7, 0x4EEC, 0xC3C8, 0x840C, 0xC3C9, 0x8499, + 0xC3CA, 0x6AAC, 0xC3CB, 0x76DF, 0xC3CC, 0x9530, 0xC3CD, 0x731B, 0xC3CE, 0x68A6, 0xC3CF, 0x5B5F, 0xC3D0, 0x772F, 0xC3D1, 0x919A, + 0xC3D2, 0x9761, 0xC3D3, 0x7CDC, 0xC3D4, 0x8FF7, 0xC3D5, 0x8C1C, 0xC3D6, 0x5F25, 0xC3D7, 0x7C73, 0xC3D8, 0x79D8, 0xC3D9, 0x89C5, + 0xC3DA, 0x6CCC, 0xC3DB, 0x871C, 0xC3DC, 0x5BC6, 0xC3DD, 0x5E42, 0xC3DE, 0x68C9, 0xC3DF, 0x7720, 0xC3E0, 0x7EF5, 0xC3E1, 0x5195, + 0xC3E2, 0x514D, 0xC3E3, 0x52C9, 0xC3E4, 0x5A29, 0xC3E5, 0x7F05, 0xC3E6, 0x9762, 0xC3E7, 0x82D7, 0xC3E8, 0x63CF, 0xC3E9, 0x7784, + 0xC3EA, 0x85D0, 0xC3EB, 0x79D2, 0xC3EC, 0x6E3A, 0xC3ED, 0x5E99, 0xC3EE, 0x5999, 0xC3EF, 0x8511, 0xC3F0, 0x706D, 0xC3F1, 0x6C11, + 0xC3F2, 0x62BF, 0xC3F3, 0x76BF, 0xC3F4, 0x654F, 0xC3F5, 0x60AF, 0xC3F6, 0x95FD, 0xC3F7, 0x660E, 0xC3F8, 0x879F, 0xC3F9, 0x9E23, + 0xC3FA, 0x94ED, 0xC3FB, 0x540D, 0xC3FC, 0x547D, 0xC3FD, 0x8C2C, 0xC3FE, 0x6478, 0xC440, 0x8140, 0xC441, 0x8141, 0xC442, 0x8142, + 0xC443, 0x8143, 0xC444, 0x8144, 0xC445, 0x8145, 0xC446, 0x8147, 0xC447, 0x8149, 0xC448, 0x814D, 0xC449, 0x814E, 0xC44A, 0x814F, + 0xC44B, 0x8152, 0xC44C, 0x8156, 0xC44D, 0x8157, 0xC44E, 0x8158, 0xC44F, 0x815B, 0xC450, 0x815C, 0xC451, 0x815D, 0xC452, 0x815E, + 0xC453, 0x815F, 0xC454, 0x8161, 0xC455, 0x8162, 0xC456, 0x8163, 0xC457, 0x8164, 0xC458, 0x8166, 0xC459, 0x8168, 0xC45A, 0x816A, + 0xC45B, 0x816B, 0xC45C, 0x816C, 0xC45D, 0x816F, 0xC45E, 0x8172, 0xC45F, 0x8173, 0xC460, 0x8175, 0xC461, 0x8176, 0xC462, 0x8177, + 0xC463, 0x8178, 0xC464, 0x8181, 0xC465, 0x8183, 0xC466, 0x8184, 0xC467, 0x8185, 0xC468, 0x8186, 0xC469, 0x8187, 0xC46A, 0x8189, + 0xC46B, 0x818B, 0xC46C, 0x818C, 0xC46D, 0x818D, 0xC46E, 0x818E, 0xC46F, 0x8190, 0xC470, 0x8192, 0xC471, 0x8193, 0xC472, 0x8194, + 0xC473, 0x8195, 0xC474, 0x8196, 0xC475, 0x8197, 0xC476, 0x8199, 0xC477, 0x819A, 0xC478, 0x819E, 0xC479, 0x819F, 0xC47A, 0x81A0, + 0xC47B, 0x81A1, 0xC47C, 0x81A2, 0xC47D, 0x81A4, 0xC47E, 0x81A5, 0xC480, 0x81A7, 0xC481, 0x81A9, 0xC482, 0x81AB, 0xC483, 0x81AC, + 0xC484, 0x81AD, 0xC485, 0x81AE, 0xC486, 0x81AF, 0xC487, 0x81B0, 0xC488, 0x81B1, 0xC489, 0x81B2, 0xC48A, 0x81B4, 0xC48B, 0x81B5, + 0xC48C, 0x81B6, 0xC48D, 0x81B7, 0xC48E, 0x81B8, 0xC48F, 0x81B9, 0xC490, 0x81BC, 0xC491, 0x81BD, 0xC492, 0x81BE, 0xC493, 0x81BF, + 0xC494, 0x81C4, 0xC495, 0x81C5, 0xC496, 0x81C7, 0xC497, 0x81C8, 0xC498, 0x81C9, 0xC499, 0x81CB, 0xC49A, 0x81CD, 0xC49B, 0x81CE, + 0xC49C, 0x81CF, 0xC49D, 0x81D0, 0xC49E, 0x81D1, 0xC49F, 0x81D2, 0xC4A0, 0x81D3, 0xC4A1, 0x6479, 0xC4A2, 0x8611, 0xC4A3, 0x6A21, + 0xC4A4, 0x819C, 0xC4A5, 0x78E8, 0xC4A6, 0x6469, 0xC4A7, 0x9B54, 0xC4A8, 0x62B9, 0xC4A9, 0x672B, 0xC4AA, 0x83AB, 0xC4AB, 0x58A8, + 0xC4AC, 0x9ED8, 0xC4AD, 0x6CAB, 0xC4AE, 0x6F20, 0xC4AF, 0x5BDE, 0xC4B0, 0x964C, 0xC4B1, 0x8C0B, 0xC4B2, 0x725F, 0xC4B3, 0x67D0, + 0xC4B4, 0x62C7, 0xC4B5, 0x7261, 0xC4B6, 0x4EA9, 0xC4B7, 0x59C6, 0xC4B8, 0x6BCD, 0xC4B9, 0x5893, 0xC4BA, 0x66AE, 0xC4BB, 0x5E55, + 0xC4BC, 0x52DF, 0xC4BD, 0x6155, 0xC4BE, 0x6728, 0xC4BF, 0x76EE, 0xC4C0, 0x7766, 0xC4C1, 0x7267, 0xC4C2, 0x7A46, 0xC4C3, 0x62FF, + 0xC4C4, 0x54EA, 0xC4C5, 0x5450, 0xC4C6, 0x94A0, 0xC4C7, 0x90A3, 0xC4C8, 0x5A1C, 0xC4C9, 0x7EB3, 0xC4CA, 0x6C16, 0xC4CB, 0x4E43, + 0xC4CC, 0x5976, 0xC4CD, 0x8010, 0xC4CE, 0x5948, 0xC4CF, 0x5357, 0xC4D0, 0x7537, 0xC4D1, 0x96BE, 0xC4D2, 0x56CA, 0xC4D3, 0x6320, + 0xC4D4, 0x8111, 0xC4D5, 0x607C, 0xC4D6, 0x95F9, 0xC4D7, 0x6DD6, 0xC4D8, 0x5462, 0xC4D9, 0x9981, 0xC4DA, 0x5185, 0xC4DB, 0x5AE9, + 0xC4DC, 0x80FD, 0xC4DD, 0x59AE, 0xC4DE, 0x9713, 0xC4DF, 0x502A, 0xC4E0, 0x6CE5, 0xC4E1, 0x5C3C, 0xC4E2, 0x62DF, 0xC4E3, 0x4F60, + 0xC4E4, 0x533F, 0xC4E5, 0x817B, 0xC4E6, 0x9006, 0xC4E7, 0x6EBA, 0xC4E8, 0x852B, 0xC4E9, 0x62C8, 0xC4EA, 0x5E74, 0xC4EB, 0x78BE, + 0xC4EC, 0x64B5, 0xC4ED, 0x637B, 0xC4EE, 0x5FF5, 0xC4EF, 0x5A18, 0xC4F0, 0x917F, 0xC4F1, 0x9E1F, 0xC4F2, 0x5C3F, 0xC4F3, 0x634F, + 0xC4F4, 0x8042, 0xC4F5, 0x5B7D, 0xC4F6, 0x556E, 0xC4F7, 0x954A, 0xC4F8, 0x954D, 0xC4F9, 0x6D85, 0xC4FA, 0x60A8, 0xC4FB, 0x67E0, + 0xC4FC, 0x72DE, 0xC4FD, 0x51DD, 0xC4FE, 0x5B81, 0xC540, 0x81D4, 0xC541, 0x81D5, 0xC542, 0x81D6, 0xC543, 0x81D7, 0xC544, 0x81D8, + 0xC545, 0x81D9, 0xC546, 0x81DA, 0xC547, 0x81DB, 0xC548, 0x81DC, 0xC549, 0x81DD, 0xC54A, 0x81DE, 0xC54B, 0x81DF, 0xC54C, 0x81E0, + 0xC54D, 0x81E1, 0xC54E, 0x81E2, 0xC54F, 0x81E4, 0xC550, 0x81E5, 0xC551, 0x81E6, 0xC552, 0x81E8, 0xC553, 0x81E9, 0xC554, 0x81EB, + 0xC555, 0x81EE, 0xC556, 0x81EF, 0xC557, 0x81F0, 0xC558, 0x81F1, 0xC559, 0x81F2, 0xC55A, 0x81F5, 0xC55B, 0x81F6, 0xC55C, 0x81F7, + 0xC55D, 0x81F8, 0xC55E, 0x81F9, 0xC55F, 0x81FA, 0xC560, 0x81FD, 0xC561, 0x81FF, 0xC562, 0x8203, 0xC563, 0x8207, 0xC564, 0x8208, + 0xC565, 0x8209, 0xC566, 0x820A, 0xC567, 0x820B, 0xC568, 0x820E, 0xC569, 0x820F, 0xC56A, 0x8211, 0xC56B, 0x8213, 0xC56C, 0x8215, + 0xC56D, 0x8216, 0xC56E, 0x8217, 0xC56F, 0x8218, 0xC570, 0x8219, 0xC571, 0x821A, 0xC572, 0x821D, 0xC573, 0x8220, 0xC574, 0x8224, + 0xC575, 0x8225, 0xC576, 0x8226, 0xC577, 0x8227, 0xC578, 0x8229, 0xC579, 0x822E, 0xC57A, 0x8232, 0xC57B, 0x823A, 0xC57C, 0x823C, + 0xC57D, 0x823D, 0xC57E, 0x823F, 0xC580, 0x8240, 0xC581, 0x8241, 0xC582, 0x8242, 0xC583, 0x8243, 0xC584, 0x8245, 0xC585, 0x8246, + 0xC586, 0x8248, 0xC587, 0x824A, 0xC588, 0x824C, 0xC589, 0x824D, 0xC58A, 0x824E, 0xC58B, 0x8250, 0xC58C, 0x8251, 0xC58D, 0x8252, + 0xC58E, 0x8253, 0xC58F, 0x8254, 0xC590, 0x8255, 0xC591, 0x8256, 0xC592, 0x8257, 0xC593, 0x8259, 0xC594, 0x825B, 0xC595, 0x825C, + 0xC596, 0x825D, 0xC597, 0x825E, 0xC598, 0x8260, 0xC599, 0x8261, 0xC59A, 0x8262, 0xC59B, 0x8263, 0xC59C, 0x8264, 0xC59D, 0x8265, + 0xC59E, 0x8266, 0xC59F, 0x8267, 0xC5A0, 0x8269, 0xC5A1, 0x62E7, 0xC5A2, 0x6CDE, 0xC5A3, 0x725B, 0xC5A4, 0x626D, 0xC5A5, 0x94AE, + 0xC5A6, 0x7EBD, 0xC5A7, 0x8113, 0xC5A8, 0x6D53, 0xC5A9, 0x519C, 0xC5AA, 0x5F04, 0xC5AB, 0x5974, 0xC5AC, 0x52AA, 0xC5AD, 0x6012, + 0xC5AE, 0x5973, 0xC5AF, 0x6696, 0xC5B0, 0x8650, 0xC5B1, 0x759F, 0xC5B2, 0x632A, 0xC5B3, 0x61E6, 0xC5B4, 0x7CEF, 0xC5B5, 0x8BFA, + 0xC5B6, 0x54E6, 0xC5B7, 0x6B27, 0xC5B8, 0x9E25, 0xC5B9, 0x6BB4, 0xC5BA, 0x85D5, 0xC5BB, 0x5455, 0xC5BC, 0x5076, 0xC5BD, 0x6CA4, + 0xC5BE, 0x556A, 0xC5BF, 0x8DB4, 0xC5C0, 0x722C, 0xC5C1, 0x5E15, 0xC5C2, 0x6015, 0xC5C3, 0x7436, 0xC5C4, 0x62CD, 0xC5C5, 0x6392, + 0xC5C6, 0x724C, 0xC5C7, 0x5F98, 0xC5C8, 0x6E43, 0xC5C9, 0x6D3E, 0xC5CA, 0x6500, 0xC5CB, 0x6F58, 0xC5CC, 0x76D8, 0xC5CD, 0x78D0, + 0xC5CE, 0x76FC, 0xC5CF, 0x7554, 0xC5D0, 0x5224, 0xC5D1, 0x53DB, 0xC5D2, 0x4E53, 0xC5D3, 0x5E9E, 0xC5D4, 0x65C1, 0xC5D5, 0x802A, + 0xC5D6, 0x80D6, 0xC5D7, 0x629B, 0xC5D8, 0x5486, 0xC5D9, 0x5228, 0xC5DA, 0x70AE, 0xC5DB, 0x888D, 0xC5DC, 0x8DD1, 0xC5DD, 0x6CE1, + 0xC5DE, 0x5478, 0xC5DF, 0x80DA, 0xC5E0, 0x57F9, 0xC5E1, 0x88F4, 0xC5E2, 0x8D54, 0xC5E3, 0x966A, 0xC5E4, 0x914D, 0xC5E5, 0x4F69, + 0xC5E6, 0x6C9B, 0xC5E7, 0x55B7, 0xC5E8, 0x76C6, 0xC5E9, 0x7830, 0xC5EA, 0x62A8, 0xC5EB, 0x70F9, 0xC5EC, 0x6F8E, 0xC5ED, 0x5F6D, + 0xC5EE, 0x84EC, 0xC5EF, 0x68DA, 0xC5F0, 0x787C, 0xC5F1, 0x7BF7, 0xC5F2, 0x81A8, 0xC5F3, 0x670B, 0xC5F4, 0x9E4F, 0xC5F5, 0x6367, + 0xC5F6, 0x78B0, 0xC5F7, 0x576F, 0xC5F8, 0x7812, 0xC5F9, 0x9739, 0xC5FA, 0x6279, 0xC5FB, 0x62AB, 0xC5FC, 0x5288, 0xC5FD, 0x7435, + 0xC5FE, 0x6BD7, 0xC640, 0x826A, 0xC641, 0x826B, 0xC642, 0x826C, 0xC643, 0x826D, 0xC644, 0x8271, 0xC645, 0x8275, 0xC646, 0x8276, + 0xC647, 0x8277, 0xC648, 0x8278, 0xC649, 0x827B, 0xC64A, 0x827C, 0xC64B, 0x8280, 0xC64C, 0x8281, 0xC64D, 0x8283, 0xC64E, 0x8285, + 0xC64F, 0x8286, 0xC650, 0x8287, 0xC651, 0x8289, 0xC652, 0x828C, 0xC653, 0x8290, 0xC654, 0x8293, 0xC655, 0x8294, 0xC656, 0x8295, + 0xC657, 0x8296, 0xC658, 0x829A, 0xC659, 0x829B, 0xC65A, 0x829E, 0xC65B, 0x82A0, 0xC65C, 0x82A2, 0xC65D, 0x82A3, 0xC65E, 0x82A7, + 0xC65F, 0x82B2, 0xC660, 0x82B5, 0xC661, 0x82B6, 0xC662, 0x82BA, 0xC663, 0x82BB, 0xC664, 0x82BC, 0xC665, 0x82BF, 0xC666, 0x82C0, + 0xC667, 0x82C2, 0xC668, 0x82C3, 0xC669, 0x82C5, 0xC66A, 0x82C6, 0xC66B, 0x82C9, 0xC66C, 0x82D0, 0xC66D, 0x82D6, 0xC66E, 0x82D9, + 0xC66F, 0x82DA, 0xC670, 0x82DD, 0xC671, 0x82E2, 0xC672, 0x82E7, 0xC673, 0x82E8, 0xC674, 0x82E9, 0xC675, 0x82EA, 0xC676, 0x82EC, + 0xC677, 0x82ED, 0xC678, 0x82EE, 0xC679, 0x82F0, 0xC67A, 0x82F2, 0xC67B, 0x82F3, 0xC67C, 0x82F5, 0xC67D, 0x82F6, 0xC67E, 0x82F8, + 0xC680, 0x82FA, 0xC681, 0x82FC, 0xC682, 0x82FD, 0xC683, 0x82FE, 0xC684, 0x82FF, 0xC685, 0x8300, 0xC686, 0x830A, 0xC687, 0x830B, + 0xC688, 0x830D, 0xC689, 0x8310, 0xC68A, 0x8312, 0xC68B, 0x8313, 0xC68C, 0x8316, 0xC68D, 0x8318, 0xC68E, 0x8319, 0xC68F, 0x831D, + 0xC690, 0x831E, 0xC691, 0x831F, 0xC692, 0x8320, 0xC693, 0x8321, 0xC694, 0x8322, 0xC695, 0x8323, 0xC696, 0x8324, 0xC697, 0x8325, + 0xC698, 0x8326, 0xC699, 0x8329, 0xC69A, 0x832A, 0xC69B, 0x832E, 0xC69C, 0x8330, 0xC69D, 0x8332, 0xC69E, 0x8337, 0xC69F, 0x833B, + 0xC6A0, 0x833D, 0xC6A1, 0x5564, 0xC6A2, 0x813E, 0xC6A3, 0x75B2, 0xC6A4, 0x76AE, 0xC6A5, 0x5339, 0xC6A6, 0x75DE, 0xC6A7, 0x50FB, + 0xC6A8, 0x5C41, 0xC6A9, 0x8B6C, 0xC6AA, 0x7BC7, 0xC6AB, 0x504F, 0xC6AC, 0x7247, 0xC6AD, 0x9A97, 0xC6AE, 0x98D8, 0xC6AF, 0x6F02, + 0xC6B0, 0x74E2, 0xC6B1, 0x7968, 0xC6B2, 0x6487, 0xC6B3, 0x77A5, 0xC6B4, 0x62FC, 0xC6B5, 0x9891, 0xC6B6, 0x8D2B, 0xC6B7, 0x54C1, + 0xC6B8, 0x8058, 0xC6B9, 0x4E52, 0xC6BA, 0x576A, 0xC6BB, 0x82F9, 0xC6BC, 0x840D, 0xC6BD, 0x5E73, 0xC6BE, 0x51ED, 0xC6BF, 0x74F6, + 0xC6C0, 0x8BC4, 0xC6C1, 0x5C4F, 0xC6C2, 0x5761, 0xC6C3, 0x6CFC, 0xC6C4, 0x9887, 0xC6C5, 0x5A46, 0xC6C6, 0x7834, 0xC6C7, 0x9B44, + 0xC6C8, 0x8FEB, 0xC6C9, 0x7C95, 0xC6CA, 0x5256, 0xC6CB, 0x6251, 0xC6CC, 0x94FA, 0xC6CD, 0x4EC6, 0xC6CE, 0x8386, 0xC6CF, 0x8461, + 0xC6D0, 0x83E9, 0xC6D1, 0x84B2, 0xC6D2, 0x57D4, 0xC6D3, 0x6734, 0xC6D4, 0x5703, 0xC6D5, 0x666E, 0xC6D6, 0x6D66, 0xC6D7, 0x8C31, + 0xC6D8, 0x66DD, 0xC6D9, 0x7011, 0xC6DA, 0x671F, 0xC6DB, 0x6B3A, 0xC6DC, 0x6816, 0xC6DD, 0x621A, 0xC6DE, 0x59BB, 0xC6DF, 0x4E03, + 0xC6E0, 0x51C4, 0xC6E1, 0x6F06, 0xC6E2, 0x67D2, 0xC6E3, 0x6C8F, 0xC6E4, 0x5176, 0xC6E5, 0x68CB, 0xC6E6, 0x5947, 0xC6E7, 0x6B67, + 0xC6E8, 0x7566, 0xC6E9, 0x5D0E, 0xC6EA, 0x8110, 0xC6EB, 0x9F50, 0xC6EC, 0x65D7, 0xC6ED, 0x7948, 0xC6EE, 0x7941, 0xC6EF, 0x9A91, + 0xC6F0, 0x8D77, 0xC6F1, 0x5C82, 0xC6F2, 0x4E5E, 0xC6F3, 0x4F01, 0xC6F4, 0x542F, 0xC6F5, 0x5951, 0xC6F6, 0x780C, 0xC6F7, 0x5668, + 0xC6F8, 0x6C14, 0xC6F9, 0x8FC4, 0xC6FA, 0x5F03, 0xC6FB, 0x6C7D, 0xC6FC, 0x6CE3, 0xC6FD, 0x8BAB, 0xC6FE, 0x6390, 0xC740, 0x833E, + 0xC741, 0x833F, 0xC742, 0x8341, 0xC743, 0x8342, 0xC744, 0x8344, 0xC745, 0x8345, 0xC746, 0x8348, 0xC747, 0x834A, 0xC748, 0x834B, + 0xC749, 0x834C, 0xC74A, 0x834D, 0xC74B, 0x834E, 0xC74C, 0x8353, 0xC74D, 0x8355, 0xC74E, 0x8356, 0xC74F, 0x8357, 0xC750, 0x8358, + 0xC751, 0x8359, 0xC752, 0x835D, 0xC753, 0x8362, 0xC754, 0x8370, 0xC755, 0x8371, 0xC756, 0x8372, 0xC757, 0x8373, 0xC758, 0x8374, + 0xC759, 0x8375, 0xC75A, 0x8376, 0xC75B, 0x8379, 0xC75C, 0x837A, 0xC75D, 0x837E, 0xC75E, 0x837F, 0xC75F, 0x8380, 0xC760, 0x8381, + 0xC761, 0x8382, 0xC762, 0x8383, 0xC763, 0x8384, 0xC764, 0x8387, 0xC765, 0x8388, 0xC766, 0x838A, 0xC767, 0x838B, 0xC768, 0x838C, + 0xC769, 0x838D, 0xC76A, 0x838F, 0xC76B, 0x8390, 0xC76C, 0x8391, 0xC76D, 0x8394, 0xC76E, 0x8395, 0xC76F, 0x8396, 0xC770, 0x8397, + 0xC771, 0x8399, 0xC772, 0x839A, 0xC773, 0x839D, 0xC774, 0x839F, 0xC775, 0x83A1, 0xC776, 0x83A2, 0xC777, 0x83A3, 0xC778, 0x83A4, + 0xC779, 0x83A5, 0xC77A, 0x83A6, 0xC77B, 0x83A7, 0xC77C, 0x83AC, 0xC77D, 0x83AD, 0xC77E, 0x83AE, 0xC780, 0x83AF, 0xC781, 0x83B5, + 0xC782, 0x83BB, 0xC783, 0x83BE, 0xC784, 0x83BF, 0xC785, 0x83C2, 0xC786, 0x83C3, 0xC787, 0x83C4, 0xC788, 0x83C6, 0xC789, 0x83C8, + 0xC78A, 0x83C9, 0xC78B, 0x83CB, 0xC78C, 0x83CD, 0xC78D, 0x83CE, 0xC78E, 0x83D0, 0xC78F, 0x83D1, 0xC790, 0x83D2, 0xC791, 0x83D3, + 0xC792, 0x83D5, 0xC793, 0x83D7, 0xC794, 0x83D9, 0xC795, 0x83DA, 0xC796, 0x83DB, 0xC797, 0x83DE, 0xC798, 0x83E2, 0xC799, 0x83E3, + 0xC79A, 0x83E4, 0xC79B, 0x83E6, 0xC79C, 0x83E7, 0xC79D, 0x83E8, 0xC79E, 0x83EB, 0xC79F, 0x83EC, 0xC7A0, 0x83ED, 0xC7A1, 0x6070, + 0xC7A2, 0x6D3D, 0xC7A3, 0x7275, 0xC7A4, 0x6266, 0xC7A5, 0x948E, 0xC7A6, 0x94C5, 0xC7A7, 0x5343, 0xC7A8, 0x8FC1, 0xC7A9, 0x7B7E, + 0xC7AA, 0x4EDF, 0xC7AB, 0x8C26, 0xC7AC, 0x4E7E, 0xC7AD, 0x9ED4, 0xC7AE, 0x94B1, 0xC7AF, 0x94B3, 0xC7B0, 0x524D, 0xC7B1, 0x6F5C, + 0xC7B2, 0x9063, 0xC7B3, 0x6D45, 0xC7B4, 0x8C34, 0xC7B5, 0x5811, 0xC7B6, 0x5D4C, 0xC7B7, 0x6B20, 0xC7B8, 0x6B49, 0xC7B9, 0x67AA, + 0xC7BA, 0x545B, 0xC7BB, 0x8154, 0xC7BC, 0x7F8C, 0xC7BD, 0x5899, 0xC7BE, 0x8537, 0xC7BF, 0x5F3A, 0xC7C0, 0x62A2, 0xC7C1, 0x6A47, + 0xC7C2, 0x9539, 0xC7C3, 0x6572, 0xC7C4, 0x6084, 0xC7C5, 0x6865, 0xC7C6, 0x77A7, 0xC7C7, 0x4E54, 0xC7C8, 0x4FA8, 0xC7C9, 0x5DE7, + 0xC7CA, 0x9798, 0xC7CB, 0x64AC, 0xC7CC, 0x7FD8, 0xC7CD, 0x5CED, 0xC7CE, 0x4FCF, 0xC7CF, 0x7A8D, 0xC7D0, 0x5207, 0xC7D1, 0x8304, + 0xC7D2, 0x4E14, 0xC7D3, 0x602F, 0xC7D4, 0x7A83, 0xC7D5, 0x94A6, 0xC7D6, 0x4FB5, 0xC7D7, 0x4EB2, 0xC7D8, 0x79E6, 0xC7D9, 0x7434, + 0xC7DA, 0x52E4, 0xC7DB, 0x82B9, 0xC7DC, 0x64D2, 0xC7DD, 0x79BD, 0xC7DE, 0x5BDD, 0xC7DF, 0x6C81, 0xC7E0, 0x9752, 0xC7E1, 0x8F7B, + 0xC7E2, 0x6C22, 0xC7E3, 0x503E, 0xC7E4, 0x537F, 0xC7E5, 0x6E05, 0xC7E6, 0x64CE, 0xC7E7, 0x6674, 0xC7E8, 0x6C30, 0xC7E9, 0x60C5, + 0xC7EA, 0x9877, 0xC7EB, 0x8BF7, 0xC7EC, 0x5E86, 0xC7ED, 0x743C, 0xC7EE, 0x7A77, 0xC7EF, 0x79CB, 0xC7F0, 0x4E18, 0xC7F1, 0x90B1, + 0xC7F2, 0x7403, 0xC7F3, 0x6C42, 0xC7F4, 0x56DA, 0xC7F5, 0x914B, 0xC7F6, 0x6CC5, 0xC7F7, 0x8D8B, 0xC7F8, 0x533A, 0xC7F9, 0x86C6, + 0xC7FA, 0x66F2, 0xC7FB, 0x8EAF, 0xC7FC, 0x5C48, 0xC7FD, 0x9A71, 0xC7FE, 0x6E20, 0xC840, 0x83EE, 0xC841, 0x83EF, 0xC842, 0x83F3, + 0xC843, 0x83F4, 0xC844, 0x83F5, 0xC845, 0x83F6, 0xC846, 0x83F7, 0xC847, 0x83FA, 0xC848, 0x83FB, 0xC849, 0x83FC, 0xC84A, 0x83FE, + 0xC84B, 0x83FF, 0xC84C, 0x8400, 0xC84D, 0x8402, 0xC84E, 0x8405, 0xC84F, 0x8407, 0xC850, 0x8408, 0xC851, 0x8409, 0xC852, 0x840A, + 0xC853, 0x8410, 0xC854, 0x8412, 0xC855, 0x8413, 0xC856, 0x8414, 0xC857, 0x8415, 0xC858, 0x8416, 0xC859, 0x8417, 0xC85A, 0x8419, + 0xC85B, 0x841A, 0xC85C, 0x841B, 0xC85D, 0x841E, 0xC85E, 0x841F, 0xC85F, 0x8420, 0xC860, 0x8421, 0xC861, 0x8422, 0xC862, 0x8423, + 0xC863, 0x8429, 0xC864, 0x842A, 0xC865, 0x842B, 0xC866, 0x842C, 0xC867, 0x842D, 0xC868, 0x842E, 0xC869, 0x842F, 0xC86A, 0x8430, + 0xC86B, 0x8432, 0xC86C, 0x8433, 0xC86D, 0x8434, 0xC86E, 0x8435, 0xC86F, 0x8436, 0xC870, 0x8437, 0xC871, 0x8439, 0xC872, 0x843A, + 0xC873, 0x843B, 0xC874, 0x843E, 0xC875, 0x843F, 0xC876, 0x8440, 0xC877, 0x8441, 0xC878, 0x8442, 0xC879, 0x8443, 0xC87A, 0x8444, + 0xC87B, 0x8445, 0xC87C, 0x8447, 0xC87D, 0x8448, 0xC87E, 0x8449, 0xC880, 0x844A, 0xC881, 0x844B, 0xC882, 0x844C, 0xC883, 0x844D, + 0xC884, 0x844E, 0xC885, 0x844F, 0xC886, 0x8450, 0xC887, 0x8452, 0xC888, 0x8453, 0xC889, 0x8454, 0xC88A, 0x8455, 0xC88B, 0x8456, + 0xC88C, 0x8458, 0xC88D, 0x845D, 0xC88E, 0x845E, 0xC88F, 0x845F, 0xC890, 0x8460, 0xC891, 0x8462, 0xC892, 0x8464, 0xC893, 0x8465, + 0xC894, 0x8466, 0xC895, 0x8467, 0xC896, 0x8468, 0xC897, 0x846A, 0xC898, 0x846E, 0xC899, 0x846F, 0xC89A, 0x8470, 0xC89B, 0x8472, + 0xC89C, 0x8474, 0xC89D, 0x8477, 0xC89E, 0x8479, 0xC89F, 0x847B, 0xC8A0, 0x847C, 0xC8A1, 0x53D6, 0xC8A2, 0x5A36, 0xC8A3, 0x9F8B, + 0xC8A4, 0x8DA3, 0xC8A5, 0x53BB, 0xC8A6, 0x5708, 0xC8A7, 0x98A7, 0xC8A8, 0x6743, 0xC8A9, 0x919B, 0xC8AA, 0x6CC9, 0xC8AB, 0x5168, + 0xC8AC, 0x75CA, 0xC8AD, 0x62F3, 0xC8AE, 0x72AC, 0xC8AF, 0x5238, 0xC8B0, 0x529D, 0xC8B1, 0x7F3A, 0xC8B2, 0x7094, 0xC8B3, 0x7638, + 0xC8B4, 0x5374, 0xC8B5, 0x9E4A, 0xC8B6, 0x69B7, 0xC8B7, 0x786E, 0xC8B8, 0x96C0, 0xC8B9, 0x88D9, 0xC8BA, 0x7FA4, 0xC8BB, 0x7136, + 0xC8BC, 0x71C3, 0xC8BD, 0x5189, 0xC8BE, 0x67D3, 0xC8BF, 0x74E4, 0xC8C0, 0x58E4, 0xC8C1, 0x6518, 0xC8C2, 0x56B7, 0xC8C3, 0x8BA9, + 0xC8C4, 0x9976, 0xC8C5, 0x6270, 0xC8C6, 0x7ED5, 0xC8C7, 0x60F9, 0xC8C8, 0x70ED, 0xC8C9, 0x58EC, 0xC8CA, 0x4EC1, 0xC8CB, 0x4EBA, + 0xC8CC, 0x5FCD, 0xC8CD, 0x97E7, 0xC8CE, 0x4EFB, 0xC8CF, 0x8BA4, 0xC8D0, 0x5203, 0xC8D1, 0x598A, 0xC8D2, 0x7EAB, 0xC8D3, 0x6254, + 0xC8D4, 0x4ECD, 0xC8D5, 0x65E5, 0xC8D6, 0x620E, 0xC8D7, 0x8338, 0xC8D8, 0x84C9, 0xC8D9, 0x8363, 0xC8DA, 0x878D, 0xC8DB, 0x7194, + 0xC8DC, 0x6EB6, 0xC8DD, 0x5BB9, 0xC8DE, 0x7ED2, 0xC8DF, 0x5197, 0xC8E0, 0x63C9, 0xC8E1, 0x67D4, 0xC8E2, 0x8089, 0xC8E3, 0x8339, + 0xC8E4, 0x8815, 0xC8E5, 0x5112, 0xC8E6, 0x5B7A, 0xC8E7, 0x5982, 0xC8E8, 0x8FB1, 0xC8E9, 0x4E73, 0xC8EA, 0x6C5D, 0xC8EB, 0x5165, + 0xC8EC, 0x8925, 0xC8ED, 0x8F6F, 0xC8EE, 0x962E, 0xC8EF, 0x854A, 0xC8F0, 0x745E, 0xC8F1, 0x9510, 0xC8F2, 0x95F0, 0xC8F3, 0x6DA6, + 0xC8F4, 0x82E5, 0xC8F5, 0x5F31, 0xC8F6, 0x6492, 0xC8F7, 0x6D12, 0xC8F8, 0x8428, 0xC8F9, 0x816E, 0xC8FA, 0x9CC3, 0xC8FB, 0x585E, + 0xC8FC, 0x8D5B, 0xC8FD, 0x4E09, 0xC8FE, 0x53C1, 0xC940, 0x847D, 0xC941, 0x847E, 0xC942, 0x847F, 0xC943, 0x8480, 0xC944, 0x8481, + 0xC945, 0x8483, 0xC946, 0x8484, 0xC947, 0x8485, 0xC948, 0x8486, 0xC949, 0x848A, 0xC94A, 0x848D, 0xC94B, 0x848F, 0xC94C, 0x8490, + 0xC94D, 0x8491, 0xC94E, 0x8492, 0xC94F, 0x8493, 0xC950, 0x8494, 0xC951, 0x8495, 0xC952, 0x8496, 0xC953, 0x8498, 0xC954, 0x849A, + 0xC955, 0x849B, 0xC956, 0x849D, 0xC957, 0x849E, 0xC958, 0x849F, 0xC959, 0x84A0, 0xC95A, 0x84A2, 0xC95B, 0x84A3, 0xC95C, 0x84A4, + 0xC95D, 0x84A5, 0xC95E, 0x84A6, 0xC95F, 0x84A7, 0xC960, 0x84A8, 0xC961, 0x84A9, 0xC962, 0x84AA, 0xC963, 0x84AB, 0xC964, 0x84AC, + 0xC965, 0x84AD, 0xC966, 0x84AE, 0xC967, 0x84B0, 0xC968, 0x84B1, 0xC969, 0x84B3, 0xC96A, 0x84B5, 0xC96B, 0x84B6, 0xC96C, 0x84B7, + 0xC96D, 0x84BB, 0xC96E, 0x84BC, 0xC96F, 0x84BE, 0xC970, 0x84C0, 0xC971, 0x84C2, 0xC972, 0x84C3, 0xC973, 0x84C5, 0xC974, 0x84C6, + 0xC975, 0x84C7, 0xC976, 0x84C8, 0xC977, 0x84CB, 0xC978, 0x84CC, 0xC979, 0x84CE, 0xC97A, 0x84CF, 0xC97B, 0x84D2, 0xC97C, 0x84D4, + 0xC97D, 0x84D5, 0xC97E, 0x84D7, 0xC980, 0x84D8, 0xC981, 0x84D9, 0xC982, 0x84DA, 0xC983, 0x84DB, 0xC984, 0x84DC, 0xC985, 0x84DE, + 0xC986, 0x84E1, 0xC987, 0x84E2, 0xC988, 0x84E4, 0xC989, 0x84E7, 0xC98A, 0x84E8, 0xC98B, 0x84E9, 0xC98C, 0x84EA, 0xC98D, 0x84EB, + 0xC98E, 0x84ED, 0xC98F, 0x84EE, 0xC990, 0x84EF, 0xC991, 0x84F1, 0xC992, 0x84F2, 0xC993, 0x84F3, 0xC994, 0x84F4, 0xC995, 0x84F5, + 0xC996, 0x84F6, 0xC997, 0x84F7, 0xC998, 0x84F8, 0xC999, 0x84F9, 0xC99A, 0x84FA, 0xC99B, 0x84FB, 0xC99C, 0x84FD, 0xC99D, 0x84FE, + 0xC99E, 0x8500, 0xC99F, 0x8501, 0xC9A0, 0x8502, 0xC9A1, 0x4F1E, 0xC9A2, 0x6563, 0xC9A3, 0x6851, 0xC9A4, 0x55D3, 0xC9A5, 0x4E27, + 0xC9A6, 0x6414, 0xC9A7, 0x9A9A, 0xC9A8, 0x626B, 0xC9A9, 0x5AC2, 0xC9AA, 0x745F, 0xC9AB, 0x8272, 0xC9AC, 0x6DA9, 0xC9AD, 0x68EE, + 0xC9AE, 0x50E7, 0xC9AF, 0x838E, 0xC9B0, 0x7802, 0xC9B1, 0x6740, 0xC9B2, 0x5239, 0xC9B3, 0x6C99, 0xC9B4, 0x7EB1, 0xC9B5, 0x50BB, + 0xC9B6, 0x5565, 0xC9B7, 0x715E, 0xC9B8, 0x7B5B, 0xC9B9, 0x6652, 0xC9BA, 0x73CA, 0xC9BB, 0x82EB, 0xC9BC, 0x6749, 0xC9BD, 0x5C71, + 0xC9BE, 0x5220, 0xC9BF, 0x717D, 0xC9C0, 0x886B, 0xC9C1, 0x95EA, 0xC9C2, 0x9655, 0xC9C3, 0x64C5, 0xC9C4, 0x8D61, 0xC9C5, 0x81B3, + 0xC9C6, 0x5584, 0xC9C7, 0x6C55, 0xC9C8, 0x6247, 0xC9C9, 0x7F2E, 0xC9CA, 0x5892, 0xC9CB, 0x4F24, 0xC9CC, 0x5546, 0xC9CD, 0x8D4F, + 0xC9CE, 0x664C, 0xC9CF, 0x4E0A, 0xC9D0, 0x5C1A, 0xC9D1, 0x88F3, 0xC9D2, 0x68A2, 0xC9D3, 0x634E, 0xC9D4, 0x7A0D, 0xC9D5, 0x70E7, + 0xC9D6, 0x828D, 0xC9D7, 0x52FA, 0xC9D8, 0x97F6, 0xC9D9, 0x5C11, 0xC9DA, 0x54E8, 0xC9DB, 0x90B5, 0xC9DC, 0x7ECD, 0xC9DD, 0x5962, + 0xC9DE, 0x8D4A, 0xC9DF, 0x86C7, 0xC9E0, 0x820C, 0xC9E1, 0x820D, 0xC9E2, 0x8D66, 0xC9E3, 0x6444, 0xC9E4, 0x5C04, 0xC9E5, 0x6151, + 0xC9E6, 0x6D89, 0xC9E7, 0x793E, 0xC9E8, 0x8BBE, 0xC9E9, 0x7837, 0xC9EA, 0x7533, 0xC9EB, 0x547B, 0xC9EC, 0x4F38, 0xC9ED, 0x8EAB, + 0xC9EE, 0x6DF1, 0xC9EF, 0x5A20, 0xC9F0, 0x7EC5, 0xC9F1, 0x795E, 0xC9F2, 0x6C88, 0xC9F3, 0x5BA1, 0xC9F4, 0x5A76, 0xC9F5, 0x751A, + 0xC9F6, 0x80BE, 0xC9F7, 0x614E, 0xC9F8, 0x6E17, 0xC9F9, 0x58F0, 0xC9FA, 0x751F, 0xC9FB, 0x7525, 0xC9FC, 0x7272, 0xC9FD, 0x5347, + 0xC9FE, 0x7EF3, 0xCA40, 0x8503, 0xCA41, 0x8504, 0xCA42, 0x8505, 0xCA43, 0x8506, 0xCA44, 0x8507, 0xCA45, 0x8508, 0xCA46, 0x8509, + 0xCA47, 0x850A, 0xCA48, 0x850B, 0xCA49, 0x850D, 0xCA4A, 0x850E, 0xCA4B, 0x850F, 0xCA4C, 0x8510, 0xCA4D, 0x8512, 0xCA4E, 0x8514, + 0xCA4F, 0x8515, 0xCA50, 0x8516, 0xCA51, 0x8518, 0xCA52, 0x8519, 0xCA53, 0x851B, 0xCA54, 0x851C, 0xCA55, 0x851D, 0xCA56, 0x851E, + 0xCA57, 0x8520, 0xCA58, 0x8522, 0xCA59, 0x8523, 0xCA5A, 0x8524, 0xCA5B, 0x8525, 0xCA5C, 0x8526, 0xCA5D, 0x8527, 0xCA5E, 0x8528, + 0xCA5F, 0x8529, 0xCA60, 0x852A, 0xCA61, 0x852D, 0xCA62, 0x852E, 0xCA63, 0x852F, 0xCA64, 0x8530, 0xCA65, 0x8531, 0xCA66, 0x8532, + 0xCA67, 0x8533, 0xCA68, 0x8534, 0xCA69, 0x8535, 0xCA6A, 0x8536, 0xCA6B, 0x853E, 0xCA6C, 0x853F, 0xCA6D, 0x8540, 0xCA6E, 0x8541, + 0xCA6F, 0x8542, 0xCA70, 0x8544, 0xCA71, 0x8545, 0xCA72, 0x8546, 0xCA73, 0x8547, 0xCA74, 0x854B, 0xCA75, 0x854C, 0xCA76, 0x854D, + 0xCA77, 0x854E, 0xCA78, 0x854F, 0xCA79, 0x8550, 0xCA7A, 0x8551, 0xCA7B, 0x8552, 0xCA7C, 0x8553, 0xCA7D, 0x8554, 0xCA7E, 0x8555, + 0xCA80, 0x8557, 0xCA81, 0x8558, 0xCA82, 0x855A, 0xCA83, 0x855B, 0xCA84, 0x855C, 0xCA85, 0x855D, 0xCA86, 0x855F, 0xCA87, 0x8560, + 0xCA88, 0x8561, 0xCA89, 0x8562, 0xCA8A, 0x8563, 0xCA8B, 0x8565, 0xCA8C, 0x8566, 0xCA8D, 0x8567, 0xCA8E, 0x8569, 0xCA8F, 0x856A, + 0xCA90, 0x856B, 0xCA91, 0x856C, 0xCA92, 0x856D, 0xCA93, 0x856E, 0xCA94, 0x856F, 0xCA95, 0x8570, 0xCA96, 0x8571, 0xCA97, 0x8573, + 0xCA98, 0x8575, 0xCA99, 0x8576, 0xCA9A, 0x8577, 0xCA9B, 0x8578, 0xCA9C, 0x857C, 0xCA9D, 0x857D, 0xCA9E, 0x857F, 0xCA9F, 0x8580, + 0xCAA0, 0x8581, 0xCAA1, 0x7701, 0xCAA2, 0x76DB, 0xCAA3, 0x5269, 0xCAA4, 0x80DC, 0xCAA5, 0x5723, 0xCAA6, 0x5E08, 0xCAA7, 0x5931, + 0xCAA8, 0x72EE, 0xCAA9, 0x65BD, 0xCAAA, 0x6E7F, 0xCAAB, 0x8BD7, 0xCAAC, 0x5C38, 0xCAAD, 0x8671, 0xCAAE, 0x5341, 0xCAAF, 0x77F3, + 0xCAB0, 0x62FE, 0xCAB1, 0x65F6, 0xCAB2, 0x4EC0, 0xCAB3, 0x98DF, 0xCAB4, 0x8680, 0xCAB5, 0x5B9E, 0xCAB6, 0x8BC6, 0xCAB7, 0x53F2, + 0xCAB8, 0x77E2, 0xCAB9, 0x4F7F, 0xCABA, 0x5C4E, 0xCABB, 0x9A76, 0xCABC, 0x59CB, 0xCABD, 0x5F0F, 0xCABE, 0x793A, 0xCABF, 0x58EB, + 0xCAC0, 0x4E16, 0xCAC1, 0x67FF, 0xCAC2, 0x4E8B, 0xCAC3, 0x62ED, 0xCAC4, 0x8A93, 0xCAC5, 0x901D, 0xCAC6, 0x52BF, 0xCAC7, 0x662F, + 0xCAC8, 0x55DC, 0xCAC9, 0x566C, 0xCACA, 0x9002, 0xCACB, 0x4ED5, 0xCACC, 0x4F8D, 0xCACD, 0x91CA, 0xCACE, 0x9970, 0xCACF, 0x6C0F, + 0xCAD0, 0x5E02, 0xCAD1, 0x6043, 0xCAD2, 0x5BA4, 0xCAD3, 0x89C6, 0xCAD4, 0x8BD5, 0xCAD5, 0x6536, 0xCAD6, 0x624B, 0xCAD7, 0x9996, + 0xCAD8, 0x5B88, 0xCAD9, 0x5BFF, 0xCADA, 0x6388, 0xCADB, 0x552E, 0xCADC, 0x53D7, 0xCADD, 0x7626, 0xCADE, 0x517D, 0xCADF, 0x852C, + 0xCAE0, 0x67A2, 0xCAE1, 0x68B3, 0xCAE2, 0x6B8A, 0xCAE3, 0x6292, 0xCAE4, 0x8F93, 0xCAE5, 0x53D4, 0xCAE6, 0x8212, 0xCAE7, 0x6DD1, + 0xCAE8, 0x758F, 0xCAE9, 0x4E66, 0xCAEA, 0x8D4E, 0xCAEB, 0x5B70, 0xCAEC, 0x719F, 0xCAED, 0x85AF, 0xCAEE, 0x6691, 0xCAEF, 0x66D9, + 0xCAF0, 0x7F72, 0xCAF1, 0x8700, 0xCAF2, 0x9ECD, 0xCAF3, 0x9F20, 0xCAF4, 0x5C5E, 0xCAF5, 0x672F, 0xCAF6, 0x8FF0, 0xCAF7, 0x6811, + 0xCAF8, 0x675F, 0xCAF9, 0x620D, 0xCAFA, 0x7AD6, 0xCAFB, 0x5885, 0xCAFC, 0x5EB6, 0xCAFD, 0x6570, 0xCAFE, 0x6F31, 0xCB40, 0x8582, + 0xCB41, 0x8583, 0xCB42, 0x8586, 0xCB43, 0x8588, 0xCB44, 0x8589, 0xCB45, 0x858A, 0xCB46, 0x858B, 0xCB47, 0x858C, 0xCB48, 0x858D, + 0xCB49, 0x858E, 0xCB4A, 0x8590, 0xCB4B, 0x8591, 0xCB4C, 0x8592, 0xCB4D, 0x8593, 0xCB4E, 0x8594, 0xCB4F, 0x8595, 0xCB50, 0x8596, + 0xCB51, 0x8597, 0xCB52, 0x8598, 0xCB53, 0x8599, 0xCB54, 0x859A, 0xCB55, 0x859D, 0xCB56, 0x859E, 0xCB57, 0x859F, 0xCB58, 0x85A0, + 0xCB59, 0x85A1, 0xCB5A, 0x85A2, 0xCB5B, 0x85A3, 0xCB5C, 0x85A5, 0xCB5D, 0x85A6, 0xCB5E, 0x85A7, 0xCB5F, 0x85A9, 0xCB60, 0x85AB, + 0xCB61, 0x85AC, 0xCB62, 0x85AD, 0xCB63, 0x85B1, 0xCB64, 0x85B2, 0xCB65, 0x85B3, 0xCB66, 0x85B4, 0xCB67, 0x85B5, 0xCB68, 0x85B6, + 0xCB69, 0x85B8, 0xCB6A, 0x85BA, 0xCB6B, 0x85BB, 0xCB6C, 0x85BC, 0xCB6D, 0x85BD, 0xCB6E, 0x85BE, 0xCB6F, 0x85BF, 0xCB70, 0x85C0, + 0xCB71, 0x85C2, 0xCB72, 0x85C3, 0xCB73, 0x85C4, 0xCB74, 0x85C5, 0xCB75, 0x85C6, 0xCB76, 0x85C7, 0xCB77, 0x85C8, 0xCB78, 0x85CA, + 0xCB79, 0x85CB, 0xCB7A, 0x85CC, 0xCB7B, 0x85CD, 0xCB7C, 0x85CE, 0xCB7D, 0x85D1, 0xCB7E, 0x85D2, 0xCB80, 0x85D4, 0xCB81, 0x85D6, + 0xCB82, 0x85D7, 0xCB83, 0x85D8, 0xCB84, 0x85D9, 0xCB85, 0x85DA, 0xCB86, 0x85DB, 0xCB87, 0x85DD, 0xCB88, 0x85DE, 0xCB89, 0x85DF, + 0xCB8A, 0x85E0, 0xCB8B, 0x85E1, 0xCB8C, 0x85E2, 0xCB8D, 0x85E3, 0xCB8E, 0x85E5, 0xCB8F, 0x85E6, 0xCB90, 0x85E7, 0xCB91, 0x85E8, + 0xCB92, 0x85EA, 0xCB93, 0x85EB, 0xCB94, 0x85EC, 0xCB95, 0x85ED, 0xCB96, 0x85EE, 0xCB97, 0x85EF, 0xCB98, 0x85F0, 0xCB99, 0x85F1, + 0xCB9A, 0x85F2, 0xCB9B, 0x85F3, 0xCB9C, 0x85F4, 0xCB9D, 0x85F5, 0xCB9E, 0x85F6, 0xCB9F, 0x85F7, 0xCBA0, 0x85F8, 0xCBA1, 0x6055, + 0xCBA2, 0x5237, 0xCBA3, 0x800D, 0xCBA4, 0x6454, 0xCBA5, 0x8870, 0xCBA6, 0x7529, 0xCBA7, 0x5E05, 0xCBA8, 0x6813, 0xCBA9, 0x62F4, + 0xCBAA, 0x971C, 0xCBAB, 0x53CC, 0xCBAC, 0x723D, 0xCBAD, 0x8C01, 0xCBAE, 0x6C34, 0xCBAF, 0x7761, 0xCBB0, 0x7A0E, 0xCBB1, 0x542E, + 0xCBB2, 0x77AC, 0xCBB3, 0x987A, 0xCBB4, 0x821C, 0xCBB5, 0x8BF4, 0xCBB6, 0x7855, 0xCBB7, 0x6714, 0xCBB8, 0x70C1, 0xCBB9, 0x65AF, + 0xCBBA, 0x6495, 0xCBBB, 0x5636, 0xCBBC, 0x601D, 0xCBBD, 0x79C1, 0xCBBE, 0x53F8, 0xCBBF, 0x4E1D, 0xCBC0, 0x6B7B, 0xCBC1, 0x8086, + 0xCBC2, 0x5BFA, 0xCBC3, 0x55E3, 0xCBC4, 0x56DB, 0xCBC5, 0x4F3A, 0xCBC6, 0x4F3C, 0xCBC7, 0x9972, 0xCBC8, 0x5DF3, 0xCBC9, 0x677E, + 0xCBCA, 0x8038, 0xCBCB, 0x6002, 0xCBCC, 0x9882, 0xCBCD, 0x9001, 0xCBCE, 0x5B8B, 0xCBCF, 0x8BBC, 0xCBD0, 0x8BF5, 0xCBD1, 0x641C, + 0xCBD2, 0x8258, 0xCBD3, 0x64DE, 0xCBD4, 0x55FD, 0xCBD5, 0x82CF, 0xCBD6, 0x9165, 0xCBD7, 0x4FD7, 0xCBD8, 0x7D20, 0xCBD9, 0x901F, + 0xCBDA, 0x7C9F, 0xCBDB, 0x50F3, 0xCBDC, 0x5851, 0xCBDD, 0x6EAF, 0xCBDE, 0x5BBF, 0xCBDF, 0x8BC9, 0xCBE0, 0x8083, 0xCBE1, 0x9178, + 0xCBE2, 0x849C, 0xCBE3, 0x7B97, 0xCBE4, 0x867D, 0xCBE5, 0x968B, 0xCBE6, 0x968F, 0xCBE7, 0x7EE5, 0xCBE8, 0x9AD3, 0xCBE9, 0x788E, + 0xCBEA, 0x5C81, 0xCBEB, 0x7A57, 0xCBEC, 0x9042, 0xCBED, 0x96A7, 0xCBEE, 0x795F, 0xCBEF, 0x5B59, 0xCBF0, 0x635F, 0xCBF1, 0x7B0B, + 0xCBF2, 0x84D1, 0xCBF3, 0x68AD, 0xCBF4, 0x5506, 0xCBF5, 0x7F29, 0xCBF6, 0x7410, 0xCBF7, 0x7D22, 0xCBF8, 0x9501, 0xCBF9, 0x6240, + 0xCBFA, 0x584C, 0xCBFB, 0x4ED6, 0xCBFC, 0x5B83, 0xCBFD, 0x5979, 0xCBFE, 0x5854, 0xCC40, 0x85F9, 0xCC41, 0x85FA, 0xCC42, 0x85FC, + 0xCC43, 0x85FD, 0xCC44, 0x85FE, 0xCC45, 0x8600, 0xCC46, 0x8601, 0xCC47, 0x8602, 0xCC48, 0x8603, 0xCC49, 0x8604, 0xCC4A, 0x8606, + 0xCC4B, 0x8607, 0xCC4C, 0x8608, 0xCC4D, 0x8609, 0xCC4E, 0x860A, 0xCC4F, 0x860B, 0xCC50, 0x860C, 0xCC51, 0x860D, 0xCC52, 0x860E, + 0xCC53, 0x860F, 0xCC54, 0x8610, 0xCC55, 0x8612, 0xCC56, 0x8613, 0xCC57, 0x8614, 0xCC58, 0x8615, 0xCC59, 0x8617, 0xCC5A, 0x8618, + 0xCC5B, 0x8619, 0xCC5C, 0x861A, 0xCC5D, 0x861B, 0xCC5E, 0x861C, 0xCC5F, 0x861D, 0xCC60, 0x861E, 0xCC61, 0x861F, 0xCC62, 0x8620, + 0xCC63, 0x8621, 0xCC64, 0x8622, 0xCC65, 0x8623, 0xCC66, 0x8624, 0xCC67, 0x8625, 0xCC68, 0x8626, 0xCC69, 0x8628, 0xCC6A, 0x862A, + 0xCC6B, 0x862B, 0xCC6C, 0x862C, 0xCC6D, 0x862D, 0xCC6E, 0x862E, 0xCC6F, 0x862F, 0xCC70, 0x8630, 0xCC71, 0x8631, 0xCC72, 0x8632, + 0xCC73, 0x8633, 0xCC74, 0x8634, 0xCC75, 0x8635, 0xCC76, 0x8636, 0xCC77, 0x8637, 0xCC78, 0x8639, 0xCC79, 0x863A, 0xCC7A, 0x863B, + 0xCC7B, 0x863D, 0xCC7C, 0x863E, 0xCC7D, 0x863F, 0xCC7E, 0x8640, 0xCC80, 0x8641, 0xCC81, 0x8642, 0xCC82, 0x8643, 0xCC83, 0x8644, + 0xCC84, 0x8645, 0xCC85, 0x8646, 0xCC86, 0x8647, 0xCC87, 0x8648, 0xCC88, 0x8649, 0xCC89, 0x864A, 0xCC8A, 0x864B, 0xCC8B, 0x864C, + 0xCC8C, 0x8652, 0xCC8D, 0x8653, 0xCC8E, 0x8655, 0xCC8F, 0x8656, 0xCC90, 0x8657, 0xCC91, 0x8658, 0xCC92, 0x8659, 0xCC93, 0x865B, + 0xCC94, 0x865C, 0xCC95, 0x865D, 0xCC96, 0x865F, 0xCC97, 0x8660, 0xCC98, 0x8661, 0xCC99, 0x8663, 0xCC9A, 0x8664, 0xCC9B, 0x8665, + 0xCC9C, 0x8666, 0xCC9D, 0x8667, 0xCC9E, 0x8668, 0xCC9F, 0x8669, 0xCCA0, 0x866A, 0xCCA1, 0x736D, 0xCCA2, 0x631E, 0xCCA3, 0x8E4B, + 0xCCA4, 0x8E0F, 0xCCA5, 0x80CE, 0xCCA6, 0x82D4, 0xCCA7, 0x62AC, 0xCCA8, 0x53F0, 0xCCA9, 0x6CF0, 0xCCAA, 0x915E, 0xCCAB, 0x592A, + 0xCCAC, 0x6001, 0xCCAD, 0x6C70, 0xCCAE, 0x574D, 0xCCAF, 0x644A, 0xCCB0, 0x8D2A, 0xCCB1, 0x762B, 0xCCB2, 0x6EE9, 0xCCB3, 0x575B, + 0xCCB4, 0x6A80, 0xCCB5, 0x75F0, 0xCCB6, 0x6F6D, 0xCCB7, 0x8C2D, 0xCCB8, 0x8C08, 0xCCB9, 0x5766, 0xCCBA, 0x6BEF, 0xCCBB, 0x8892, + 0xCCBC, 0x78B3, 0xCCBD, 0x63A2, 0xCCBE, 0x53F9, 0xCCBF, 0x70AD, 0xCCC0, 0x6C64, 0xCCC1, 0x5858, 0xCCC2, 0x642A, 0xCCC3, 0x5802, + 0xCCC4, 0x68E0, 0xCCC5, 0x819B, 0xCCC6, 0x5510, 0xCCC7, 0x7CD6, 0xCCC8, 0x5018, 0xCCC9, 0x8EBA, 0xCCCA, 0x6DCC, 0xCCCB, 0x8D9F, + 0xCCCC, 0x70EB, 0xCCCD, 0x638F, 0xCCCE, 0x6D9B, 0xCCCF, 0x6ED4, 0xCCD0, 0x7EE6, 0xCCD1, 0x8404, 0xCCD2, 0x6843, 0xCCD3, 0x9003, + 0xCCD4, 0x6DD8, 0xCCD5, 0x9676, 0xCCD6, 0x8BA8, 0xCCD7, 0x5957, 0xCCD8, 0x7279, 0xCCD9, 0x85E4, 0xCCDA, 0x817E, 0xCCDB, 0x75BC, + 0xCCDC, 0x8A8A, 0xCCDD, 0x68AF, 0xCCDE, 0x5254, 0xCCDF, 0x8E22, 0xCCE0, 0x9511, 0xCCE1, 0x63D0, 0xCCE2, 0x9898, 0xCCE3, 0x8E44, + 0xCCE4, 0x557C, 0xCCE5, 0x4F53, 0xCCE6, 0x66FF, 0xCCE7, 0x568F, 0xCCE8, 0x60D5, 0xCCE9, 0x6D95, 0xCCEA, 0x5243, 0xCCEB, 0x5C49, + 0xCCEC, 0x5929, 0xCCED, 0x6DFB, 0xCCEE, 0x586B, 0xCCEF, 0x7530, 0xCCF0, 0x751C, 0xCCF1, 0x606C, 0xCCF2, 0x8214, 0xCCF3, 0x8146, + 0xCCF4, 0x6311, 0xCCF5, 0x6761, 0xCCF6, 0x8FE2, 0xCCF7, 0x773A, 0xCCF8, 0x8DF3, 0xCCF9, 0x8D34, 0xCCFA, 0x94C1, 0xCCFB, 0x5E16, + 0xCCFC, 0x5385, 0xCCFD, 0x542C, 0xCCFE, 0x70C3, 0xCD40, 0x866D, 0xCD41, 0x866F, 0xCD42, 0x8670, 0xCD43, 0x8672, 0xCD44, 0x8673, + 0xCD45, 0x8674, 0xCD46, 0x8675, 0xCD47, 0x8676, 0xCD48, 0x8677, 0xCD49, 0x8678, 0xCD4A, 0x8683, 0xCD4B, 0x8684, 0xCD4C, 0x8685, + 0xCD4D, 0x8686, 0xCD4E, 0x8687, 0xCD4F, 0x8688, 0xCD50, 0x8689, 0xCD51, 0x868E, 0xCD52, 0x868F, 0xCD53, 0x8690, 0xCD54, 0x8691, + 0xCD55, 0x8692, 0xCD56, 0x8694, 0xCD57, 0x8696, 0xCD58, 0x8697, 0xCD59, 0x8698, 0xCD5A, 0x8699, 0xCD5B, 0x869A, 0xCD5C, 0x869B, + 0xCD5D, 0x869E, 0xCD5E, 0x869F, 0xCD5F, 0x86A0, 0xCD60, 0x86A1, 0xCD61, 0x86A2, 0xCD62, 0x86A5, 0xCD63, 0x86A6, 0xCD64, 0x86AB, + 0xCD65, 0x86AD, 0xCD66, 0x86AE, 0xCD67, 0x86B2, 0xCD68, 0x86B3, 0xCD69, 0x86B7, 0xCD6A, 0x86B8, 0xCD6B, 0x86B9, 0xCD6C, 0x86BB, + 0xCD6D, 0x86BC, 0xCD6E, 0x86BD, 0xCD6F, 0x86BE, 0xCD70, 0x86BF, 0xCD71, 0x86C1, 0xCD72, 0x86C2, 0xCD73, 0x86C3, 0xCD74, 0x86C5, + 0xCD75, 0x86C8, 0xCD76, 0x86CC, 0xCD77, 0x86CD, 0xCD78, 0x86D2, 0xCD79, 0x86D3, 0xCD7A, 0x86D5, 0xCD7B, 0x86D6, 0xCD7C, 0x86D7, + 0xCD7D, 0x86DA, 0xCD7E, 0x86DC, 0xCD80, 0x86DD, 0xCD81, 0x86E0, 0xCD82, 0x86E1, 0xCD83, 0x86E2, 0xCD84, 0x86E3, 0xCD85, 0x86E5, + 0xCD86, 0x86E6, 0xCD87, 0x86E7, 0xCD88, 0x86E8, 0xCD89, 0x86EA, 0xCD8A, 0x86EB, 0xCD8B, 0x86EC, 0xCD8C, 0x86EF, 0xCD8D, 0x86F5, + 0xCD8E, 0x86F6, 0xCD8F, 0x86F7, 0xCD90, 0x86FA, 0xCD91, 0x86FB, 0xCD92, 0x86FC, 0xCD93, 0x86FD, 0xCD94, 0x86FF, 0xCD95, 0x8701, + 0xCD96, 0x8704, 0xCD97, 0x8705, 0xCD98, 0x8706, 0xCD99, 0x870B, 0xCD9A, 0x870C, 0xCD9B, 0x870E, 0xCD9C, 0x870F, 0xCD9D, 0x8710, + 0xCD9E, 0x8711, 0xCD9F, 0x8714, 0xCDA0, 0x8716, 0xCDA1, 0x6C40, 0xCDA2, 0x5EF7, 0xCDA3, 0x505C, 0xCDA4, 0x4EAD, 0xCDA5, 0x5EAD, + 0xCDA6, 0x633A, 0xCDA7, 0x8247, 0xCDA8, 0x901A, 0xCDA9, 0x6850, 0xCDAA, 0x916E, 0xCDAB, 0x77B3, 0xCDAC, 0x540C, 0xCDAD, 0x94DC, + 0xCDAE, 0x5F64, 0xCDAF, 0x7AE5, 0xCDB0, 0x6876, 0xCDB1, 0x6345, 0xCDB2, 0x7B52, 0xCDB3, 0x7EDF, 0xCDB4, 0x75DB, 0xCDB5, 0x5077, + 0xCDB6, 0x6295, 0xCDB7, 0x5934, 0xCDB8, 0x900F, 0xCDB9, 0x51F8, 0xCDBA, 0x79C3, 0xCDBB, 0x7A81, 0xCDBC, 0x56FE, 0xCDBD, 0x5F92, + 0xCDBE, 0x9014, 0xCDBF, 0x6D82, 0xCDC0, 0x5C60, 0xCDC1, 0x571F, 0xCDC2, 0x5410, 0xCDC3, 0x5154, 0xCDC4, 0x6E4D, 0xCDC5, 0x56E2, + 0xCDC6, 0x63A8, 0xCDC7, 0x9893, 0xCDC8, 0x817F, 0xCDC9, 0x8715, 0xCDCA, 0x892A, 0xCDCB, 0x9000, 0xCDCC, 0x541E, 0xCDCD, 0x5C6F, + 0xCDCE, 0x81C0, 0xCDCF, 0x62D6, 0xCDD0, 0x6258, 0xCDD1, 0x8131, 0xCDD2, 0x9E35, 0xCDD3, 0x9640, 0xCDD4, 0x9A6E, 0xCDD5, 0x9A7C, + 0xCDD6, 0x692D, 0xCDD7, 0x59A5, 0xCDD8, 0x62D3, 0xCDD9, 0x553E, 0xCDDA, 0x6316, 0xCDDB, 0x54C7, 0xCDDC, 0x86D9, 0xCDDD, 0x6D3C, + 0xCDDE, 0x5A03, 0xCDDF, 0x74E6, 0xCDE0, 0x889C, 0xCDE1, 0x6B6A, 0xCDE2, 0x5916, 0xCDE3, 0x8C4C, 0xCDE4, 0x5F2F, 0xCDE5, 0x6E7E, + 0xCDE6, 0x73A9, 0xCDE7, 0x987D, 0xCDE8, 0x4E38, 0xCDE9, 0x70F7, 0xCDEA, 0x5B8C, 0xCDEB, 0x7897, 0xCDEC, 0x633D, 0xCDED, 0x665A, + 0xCDEE, 0x7696, 0xCDEF, 0x60CB, 0xCDF0, 0x5B9B, 0xCDF1, 0x5A49, 0xCDF2, 0x4E07, 0xCDF3, 0x8155, 0xCDF4, 0x6C6A, 0xCDF5, 0x738B, + 0xCDF6, 0x4EA1, 0xCDF7, 0x6789, 0xCDF8, 0x7F51, 0xCDF9, 0x5F80, 0xCDFA, 0x65FA, 0xCDFB, 0x671B, 0xCDFC, 0x5FD8, 0xCDFD, 0x5984, + 0xCDFE, 0x5A01, 0xCE40, 0x8719, 0xCE41, 0x871B, 0xCE42, 0x871D, 0xCE43, 0x871F, 0xCE44, 0x8720, 0xCE45, 0x8724, 0xCE46, 0x8726, + 0xCE47, 0x8727, 0xCE48, 0x8728, 0xCE49, 0x872A, 0xCE4A, 0x872B, 0xCE4B, 0x872C, 0xCE4C, 0x872D, 0xCE4D, 0x872F, 0xCE4E, 0x8730, + 0xCE4F, 0x8732, 0xCE50, 0x8733, 0xCE51, 0x8735, 0xCE52, 0x8736, 0xCE53, 0x8738, 0xCE54, 0x8739, 0xCE55, 0x873A, 0xCE56, 0x873C, + 0xCE57, 0x873D, 0xCE58, 0x8740, 0xCE59, 0x8741, 0xCE5A, 0x8742, 0xCE5B, 0x8743, 0xCE5C, 0x8744, 0xCE5D, 0x8745, 0xCE5E, 0x8746, + 0xCE5F, 0x874A, 0xCE60, 0x874B, 0xCE61, 0x874D, 0xCE62, 0x874F, 0xCE63, 0x8750, 0xCE64, 0x8751, 0xCE65, 0x8752, 0xCE66, 0x8754, + 0xCE67, 0x8755, 0xCE68, 0x8756, 0xCE69, 0x8758, 0xCE6A, 0x875A, 0xCE6B, 0x875B, 0xCE6C, 0x875C, 0xCE6D, 0x875D, 0xCE6E, 0x875E, + 0xCE6F, 0x875F, 0xCE70, 0x8761, 0xCE71, 0x8762, 0xCE72, 0x8766, 0xCE73, 0x8767, 0xCE74, 0x8768, 0xCE75, 0x8769, 0xCE76, 0x876A, + 0xCE77, 0x876B, 0xCE78, 0x876C, 0xCE79, 0x876D, 0xCE7A, 0x876F, 0xCE7B, 0x8771, 0xCE7C, 0x8772, 0xCE7D, 0x8773, 0xCE7E, 0x8775, + 0xCE80, 0x8777, 0xCE81, 0x8778, 0xCE82, 0x8779, 0xCE83, 0x877A, 0xCE84, 0x877F, 0xCE85, 0x8780, 0xCE86, 0x8781, 0xCE87, 0x8784, + 0xCE88, 0x8786, 0xCE89, 0x8787, 0xCE8A, 0x8789, 0xCE8B, 0x878A, 0xCE8C, 0x878C, 0xCE8D, 0x878E, 0xCE8E, 0x878F, 0xCE8F, 0x8790, + 0xCE90, 0x8791, 0xCE91, 0x8792, 0xCE92, 0x8794, 0xCE93, 0x8795, 0xCE94, 0x8796, 0xCE95, 0x8798, 0xCE96, 0x8799, 0xCE97, 0x879A, + 0xCE98, 0x879B, 0xCE99, 0x879C, 0xCE9A, 0x879D, 0xCE9B, 0x879E, 0xCE9C, 0x87A0, 0xCE9D, 0x87A1, 0xCE9E, 0x87A2, 0xCE9F, 0x87A3, + 0xCEA0, 0x87A4, 0xCEA1, 0x5DCD, 0xCEA2, 0x5FAE, 0xCEA3, 0x5371, 0xCEA4, 0x97E6, 0xCEA5, 0x8FDD, 0xCEA6, 0x6845, 0xCEA7, 0x56F4, + 0xCEA8, 0x552F, 0xCEA9, 0x60DF, 0xCEAA, 0x4E3A, 0xCEAB, 0x6F4D, 0xCEAC, 0x7EF4, 0xCEAD, 0x82C7, 0xCEAE, 0x840E, 0xCEAF, 0x59D4, + 0xCEB0, 0x4F1F, 0xCEB1, 0x4F2A, 0xCEB2, 0x5C3E, 0xCEB3, 0x7EAC, 0xCEB4, 0x672A, 0xCEB5, 0x851A, 0xCEB6, 0x5473, 0xCEB7, 0x754F, + 0xCEB8, 0x80C3, 0xCEB9, 0x5582, 0xCEBA, 0x9B4F, 0xCEBB, 0x4F4D, 0xCEBC, 0x6E2D, 0xCEBD, 0x8C13, 0xCEBE, 0x5C09, 0xCEBF, 0x6170, + 0xCEC0, 0x536B, 0xCEC1, 0x761F, 0xCEC2, 0x6E29, 0xCEC3, 0x868A, 0xCEC4, 0x6587, 0xCEC5, 0x95FB, 0xCEC6, 0x7EB9, 0xCEC7, 0x543B, + 0xCEC8, 0x7A33, 0xCEC9, 0x7D0A, 0xCECA, 0x95EE, 0xCECB, 0x55E1, 0xCECC, 0x7FC1, 0xCECD, 0x74EE, 0xCECE, 0x631D, 0xCECF, 0x8717, + 0xCED0, 0x6DA1, 0xCED1, 0x7A9D, 0xCED2, 0x6211, 0xCED3, 0x65A1, 0xCED4, 0x5367, 0xCED5, 0x63E1, 0xCED6, 0x6C83, 0xCED7, 0x5DEB, + 0xCED8, 0x545C, 0xCED9, 0x94A8, 0xCEDA, 0x4E4C, 0xCEDB, 0x6C61, 0xCEDC, 0x8BEC, 0xCEDD, 0x5C4B, 0xCEDE, 0x65E0, 0xCEDF, 0x829C, + 0xCEE0, 0x68A7, 0xCEE1, 0x543E, 0xCEE2, 0x5434, 0xCEE3, 0x6BCB, 0xCEE4, 0x6B66, 0xCEE5, 0x4E94, 0xCEE6, 0x6342, 0xCEE7, 0x5348, + 0xCEE8, 0x821E, 0xCEE9, 0x4F0D, 0xCEEA, 0x4FAE, 0xCEEB, 0x575E, 0xCEEC, 0x620A, 0xCEED, 0x96FE, 0xCEEE, 0x6664, 0xCEEF, 0x7269, + 0xCEF0, 0x52FF, 0xCEF1, 0x52A1, 0xCEF2, 0x609F, 0xCEF3, 0x8BEF, 0xCEF4, 0x6614, 0xCEF5, 0x7199, 0xCEF6, 0x6790, 0xCEF7, 0x897F, + 0xCEF8, 0x7852, 0xCEF9, 0x77FD, 0xCEFA, 0x6670, 0xCEFB, 0x563B, 0xCEFC, 0x5438, 0xCEFD, 0x9521, 0xCEFE, 0x727A, 0xCF40, 0x87A5, + 0xCF41, 0x87A6, 0xCF42, 0x87A7, 0xCF43, 0x87A9, 0xCF44, 0x87AA, 0xCF45, 0x87AE, 0xCF46, 0x87B0, 0xCF47, 0x87B1, 0xCF48, 0x87B2, + 0xCF49, 0x87B4, 0xCF4A, 0x87B6, 0xCF4B, 0x87B7, 0xCF4C, 0x87B8, 0xCF4D, 0x87B9, 0xCF4E, 0x87BB, 0xCF4F, 0x87BC, 0xCF50, 0x87BE, + 0xCF51, 0x87BF, 0xCF52, 0x87C1, 0xCF53, 0x87C2, 0xCF54, 0x87C3, 0xCF55, 0x87C4, 0xCF56, 0x87C5, 0xCF57, 0x87C7, 0xCF58, 0x87C8, + 0xCF59, 0x87C9, 0xCF5A, 0x87CC, 0xCF5B, 0x87CD, 0xCF5C, 0x87CE, 0xCF5D, 0x87CF, 0xCF5E, 0x87D0, 0xCF5F, 0x87D4, 0xCF60, 0x87D5, + 0xCF61, 0x87D6, 0xCF62, 0x87D7, 0xCF63, 0x87D8, 0xCF64, 0x87D9, 0xCF65, 0x87DA, 0xCF66, 0x87DC, 0xCF67, 0x87DD, 0xCF68, 0x87DE, + 0xCF69, 0x87DF, 0xCF6A, 0x87E1, 0xCF6B, 0x87E2, 0xCF6C, 0x87E3, 0xCF6D, 0x87E4, 0xCF6E, 0x87E6, 0xCF6F, 0x87E7, 0xCF70, 0x87E8, + 0xCF71, 0x87E9, 0xCF72, 0x87EB, 0xCF73, 0x87EC, 0xCF74, 0x87ED, 0xCF75, 0x87EF, 0xCF76, 0x87F0, 0xCF77, 0x87F1, 0xCF78, 0x87F2, + 0xCF79, 0x87F3, 0xCF7A, 0x87F4, 0xCF7B, 0x87F5, 0xCF7C, 0x87F6, 0xCF7D, 0x87F7, 0xCF7E, 0x87F8, 0xCF80, 0x87FA, 0xCF81, 0x87FB, + 0xCF82, 0x87FC, 0xCF83, 0x87FD, 0xCF84, 0x87FF, 0xCF85, 0x8800, 0xCF86, 0x8801, 0xCF87, 0x8802, 0xCF88, 0x8804, 0xCF89, 0x8805, + 0xCF8A, 0x8806, 0xCF8B, 0x8807, 0xCF8C, 0x8808, 0xCF8D, 0x8809, 0xCF8E, 0x880B, 0xCF8F, 0x880C, 0xCF90, 0x880D, 0xCF91, 0x880E, + 0xCF92, 0x880F, 0xCF93, 0x8810, 0xCF94, 0x8811, 0xCF95, 0x8812, 0xCF96, 0x8814, 0xCF97, 0x8817, 0xCF98, 0x8818, 0xCF99, 0x8819, + 0xCF9A, 0x881A, 0xCF9B, 0x881C, 0xCF9C, 0x881D, 0xCF9D, 0x881E, 0xCF9E, 0x881F, 0xCF9F, 0x8820, 0xCFA0, 0x8823, 0xCFA1, 0x7A00, + 0xCFA2, 0x606F, 0xCFA3, 0x5E0C, 0xCFA4, 0x6089, 0xCFA5, 0x819D, 0xCFA6, 0x5915, 0xCFA7, 0x60DC, 0xCFA8, 0x7184, 0xCFA9, 0x70EF, + 0xCFAA, 0x6EAA, 0xCFAB, 0x6C50, 0xCFAC, 0x7280, 0xCFAD, 0x6A84, 0xCFAE, 0x88AD, 0xCFAF, 0x5E2D, 0xCFB0, 0x4E60, 0xCFB1, 0x5AB3, + 0xCFB2, 0x559C, 0xCFB3, 0x94E3, 0xCFB4, 0x6D17, 0xCFB5, 0x7CFB, 0xCFB6, 0x9699, 0xCFB7, 0x620F, 0xCFB8, 0x7EC6, 0xCFB9, 0x778E, + 0xCFBA, 0x867E, 0xCFBB, 0x5323, 0xCFBC, 0x971E, 0xCFBD, 0x8F96, 0xCFBE, 0x6687, 0xCFBF, 0x5CE1, 0xCFC0, 0x4FA0, 0xCFC1, 0x72ED, + 0xCFC2, 0x4E0B, 0xCFC3, 0x53A6, 0xCFC4, 0x590F, 0xCFC5, 0x5413, 0xCFC6, 0x6380, 0xCFC7, 0x9528, 0xCFC8, 0x5148, 0xCFC9, 0x4ED9, + 0xCFCA, 0x9C9C, 0xCFCB, 0x7EA4, 0xCFCC, 0x54B8, 0xCFCD, 0x8D24, 0xCFCE, 0x8854, 0xCFCF, 0x8237, 0xCFD0, 0x95F2, 0xCFD1, 0x6D8E, + 0xCFD2, 0x5F26, 0xCFD3, 0x5ACC, 0xCFD4, 0x663E, 0xCFD5, 0x9669, 0xCFD6, 0x73B0, 0xCFD7, 0x732E, 0xCFD8, 0x53BF, 0xCFD9, 0x817A, + 0xCFDA, 0x9985, 0xCFDB, 0x7FA1, 0xCFDC, 0x5BAA, 0xCFDD, 0x9677, 0xCFDE, 0x9650, 0xCFDF, 0x7EBF, 0xCFE0, 0x76F8, 0xCFE1, 0x53A2, + 0xCFE2, 0x9576, 0xCFE3, 0x9999, 0xCFE4, 0x7BB1, 0xCFE5, 0x8944, 0xCFE6, 0x6E58, 0xCFE7, 0x4E61, 0xCFE8, 0x7FD4, 0xCFE9, 0x7965, + 0xCFEA, 0x8BE6, 0xCFEB, 0x60F3, 0xCFEC, 0x54CD, 0xCFED, 0x4EAB, 0xCFEE, 0x9879, 0xCFEF, 0x5DF7, 0xCFF0, 0x6A61, 0xCFF1, 0x50CF, + 0xCFF2, 0x5411, 0xCFF3, 0x8C61, 0xCFF4, 0x8427, 0xCFF5, 0x785D, 0xCFF6, 0x9704, 0xCFF7, 0x524A, 0xCFF8, 0x54EE, 0xCFF9, 0x56A3, + 0xCFFA, 0x9500, 0xCFFB, 0x6D88, 0xCFFC, 0x5BB5, 0xCFFD, 0x6DC6, 0xCFFE, 0x6653, 0xD040, 0x8824, 0xD041, 0x8825, 0xD042, 0x8826, + 0xD043, 0x8827, 0xD044, 0x8828, 0xD045, 0x8829, 0xD046, 0x882A, 0xD047, 0x882B, 0xD048, 0x882C, 0xD049, 0x882D, 0xD04A, 0x882E, + 0xD04B, 0x882F, 0xD04C, 0x8830, 0xD04D, 0x8831, 0xD04E, 0x8833, 0xD04F, 0x8834, 0xD050, 0x8835, 0xD051, 0x8836, 0xD052, 0x8837, + 0xD053, 0x8838, 0xD054, 0x883A, 0xD055, 0x883B, 0xD056, 0x883D, 0xD057, 0x883E, 0xD058, 0x883F, 0xD059, 0x8841, 0xD05A, 0x8842, + 0xD05B, 0x8843, 0xD05C, 0x8846, 0xD05D, 0x8847, 0xD05E, 0x8848, 0xD05F, 0x8849, 0xD060, 0x884A, 0xD061, 0x884B, 0xD062, 0x884E, + 0xD063, 0x884F, 0xD064, 0x8850, 0xD065, 0x8851, 0xD066, 0x8852, 0xD067, 0x8853, 0xD068, 0x8855, 0xD069, 0x8856, 0xD06A, 0x8858, + 0xD06B, 0x885A, 0xD06C, 0x885B, 0xD06D, 0x885C, 0xD06E, 0x885D, 0xD06F, 0x885E, 0xD070, 0x885F, 0xD071, 0x8860, 0xD072, 0x8866, + 0xD073, 0x8867, 0xD074, 0x886A, 0xD075, 0x886D, 0xD076, 0x886F, 0xD077, 0x8871, 0xD078, 0x8873, 0xD079, 0x8874, 0xD07A, 0x8875, + 0xD07B, 0x8876, 0xD07C, 0x8878, 0xD07D, 0x8879, 0xD07E, 0x887A, 0xD080, 0x887B, 0xD081, 0x887C, 0xD082, 0x8880, 0xD083, 0x8883, + 0xD084, 0x8886, 0xD085, 0x8887, 0xD086, 0x8889, 0xD087, 0x888A, 0xD088, 0x888C, 0xD089, 0x888E, 0xD08A, 0x888F, 0xD08B, 0x8890, + 0xD08C, 0x8891, 0xD08D, 0x8893, 0xD08E, 0x8894, 0xD08F, 0x8895, 0xD090, 0x8897, 0xD091, 0x8898, 0xD092, 0x8899, 0xD093, 0x889A, + 0xD094, 0x889B, 0xD095, 0x889D, 0xD096, 0x889E, 0xD097, 0x889F, 0xD098, 0x88A0, 0xD099, 0x88A1, 0xD09A, 0x88A3, 0xD09B, 0x88A5, + 0xD09C, 0x88A6, 0xD09D, 0x88A7, 0xD09E, 0x88A8, 0xD09F, 0x88A9, 0xD0A0, 0x88AA, 0xD0A1, 0x5C0F, 0xD0A2, 0x5B5D, 0xD0A3, 0x6821, + 0xD0A4, 0x8096, 0xD0A5, 0x5578, 0xD0A6, 0x7B11, 0xD0A7, 0x6548, 0xD0A8, 0x6954, 0xD0A9, 0x4E9B, 0xD0AA, 0x6B47, 0xD0AB, 0x874E, + 0xD0AC, 0x978B, 0xD0AD, 0x534F, 0xD0AE, 0x631F, 0xD0AF, 0x643A, 0xD0B0, 0x90AA, 0xD0B1, 0x659C, 0xD0B2, 0x80C1, 0xD0B3, 0x8C10, + 0xD0B4, 0x5199, 0xD0B5, 0x68B0, 0xD0B6, 0x5378, 0xD0B7, 0x87F9, 0xD0B8, 0x61C8, 0xD0B9, 0x6CC4, 0xD0BA, 0x6CFB, 0xD0BB, 0x8C22, + 0xD0BC, 0x5C51, 0xD0BD, 0x85AA, 0xD0BE, 0x82AF, 0xD0BF, 0x950C, 0xD0C0, 0x6B23, 0xD0C1, 0x8F9B, 0xD0C2, 0x65B0, 0xD0C3, 0x5FFB, + 0xD0C4, 0x5FC3, 0xD0C5, 0x4FE1, 0xD0C6, 0x8845, 0xD0C7, 0x661F, 0xD0C8, 0x8165, 0xD0C9, 0x7329, 0xD0CA, 0x60FA, 0xD0CB, 0x5174, + 0xD0CC, 0x5211, 0xD0CD, 0x578B, 0xD0CE, 0x5F62, 0xD0CF, 0x90A2, 0xD0D0, 0x884C, 0xD0D1, 0x9192, 0xD0D2, 0x5E78, 0xD0D3, 0x674F, + 0xD0D4, 0x6027, 0xD0D5, 0x59D3, 0xD0D6, 0x5144, 0xD0D7, 0x51F6, 0xD0D8, 0x80F8, 0xD0D9, 0x5308, 0xD0DA, 0x6C79, 0xD0DB, 0x96C4, + 0xD0DC, 0x718A, 0xD0DD, 0x4F11, 0xD0DE, 0x4FEE, 0xD0DF, 0x7F9E, 0xD0E0, 0x673D, 0xD0E1, 0x55C5, 0xD0E2, 0x9508, 0xD0E3, 0x79C0, + 0xD0E4, 0x8896, 0xD0E5, 0x7EE3, 0xD0E6, 0x589F, 0xD0E7, 0x620C, 0xD0E8, 0x9700, 0xD0E9, 0x865A, 0xD0EA, 0x5618, 0xD0EB, 0x987B, + 0xD0EC, 0x5F90, 0xD0ED, 0x8BB8, 0xD0EE, 0x84C4, 0xD0EF, 0x9157, 0xD0F0, 0x53D9, 0xD0F1, 0x65ED, 0xD0F2, 0x5E8F, 0xD0F3, 0x755C, + 0xD0F4, 0x6064, 0xD0F5, 0x7D6E, 0xD0F6, 0x5A7F, 0xD0F7, 0x7EEA, 0xD0F8, 0x7EED, 0xD0F9, 0x8F69, 0xD0FA, 0x55A7, 0xD0FB, 0x5BA3, + 0xD0FC, 0x60AC, 0xD0FD, 0x65CB, 0xD0FE, 0x7384, 0xD140, 0x88AC, 0xD141, 0x88AE, 0xD142, 0x88AF, 0xD143, 0x88B0, 0xD144, 0x88B2, + 0xD145, 0x88B3, 0xD146, 0x88B4, 0xD147, 0x88B5, 0xD148, 0x88B6, 0xD149, 0x88B8, 0xD14A, 0x88B9, 0xD14B, 0x88BA, 0xD14C, 0x88BB, + 0xD14D, 0x88BD, 0xD14E, 0x88BE, 0xD14F, 0x88BF, 0xD150, 0x88C0, 0xD151, 0x88C3, 0xD152, 0x88C4, 0xD153, 0x88C7, 0xD154, 0x88C8, + 0xD155, 0x88CA, 0xD156, 0x88CB, 0xD157, 0x88CC, 0xD158, 0x88CD, 0xD159, 0x88CF, 0xD15A, 0x88D0, 0xD15B, 0x88D1, 0xD15C, 0x88D3, + 0xD15D, 0x88D6, 0xD15E, 0x88D7, 0xD15F, 0x88DA, 0xD160, 0x88DB, 0xD161, 0x88DC, 0xD162, 0x88DD, 0xD163, 0x88DE, 0xD164, 0x88E0, + 0xD165, 0x88E1, 0xD166, 0x88E6, 0xD167, 0x88E7, 0xD168, 0x88E9, 0xD169, 0x88EA, 0xD16A, 0x88EB, 0xD16B, 0x88EC, 0xD16C, 0x88ED, + 0xD16D, 0x88EE, 0xD16E, 0x88EF, 0xD16F, 0x88F2, 0xD170, 0x88F5, 0xD171, 0x88F6, 0xD172, 0x88F7, 0xD173, 0x88FA, 0xD174, 0x88FB, + 0xD175, 0x88FD, 0xD176, 0x88FF, 0xD177, 0x8900, 0xD178, 0x8901, 0xD179, 0x8903, 0xD17A, 0x8904, 0xD17B, 0x8905, 0xD17C, 0x8906, + 0xD17D, 0x8907, 0xD17E, 0x8908, 0xD180, 0x8909, 0xD181, 0x890B, 0xD182, 0x890C, 0xD183, 0x890D, 0xD184, 0x890E, 0xD185, 0x890F, + 0xD186, 0x8911, 0xD187, 0x8914, 0xD188, 0x8915, 0xD189, 0x8916, 0xD18A, 0x8917, 0xD18B, 0x8918, 0xD18C, 0x891C, 0xD18D, 0x891D, + 0xD18E, 0x891E, 0xD18F, 0x891F, 0xD190, 0x8920, 0xD191, 0x8922, 0xD192, 0x8923, 0xD193, 0x8924, 0xD194, 0x8926, 0xD195, 0x8927, + 0xD196, 0x8928, 0xD197, 0x8929, 0xD198, 0x892C, 0xD199, 0x892D, 0xD19A, 0x892E, 0xD19B, 0x892F, 0xD19C, 0x8931, 0xD19D, 0x8932, + 0xD19E, 0x8933, 0xD19F, 0x8935, 0xD1A0, 0x8937, 0xD1A1, 0x9009, 0xD1A2, 0x7663, 0xD1A3, 0x7729, 0xD1A4, 0x7EDA, 0xD1A5, 0x9774, + 0xD1A6, 0x859B, 0xD1A7, 0x5B66, 0xD1A8, 0x7A74, 0xD1A9, 0x96EA, 0xD1AA, 0x8840, 0xD1AB, 0x52CB, 0xD1AC, 0x718F, 0xD1AD, 0x5FAA, + 0xD1AE, 0x65EC, 0xD1AF, 0x8BE2, 0xD1B0, 0x5BFB, 0xD1B1, 0x9A6F, 0xD1B2, 0x5DE1, 0xD1B3, 0x6B89, 0xD1B4, 0x6C5B, 0xD1B5, 0x8BAD, + 0xD1B6, 0x8BAF, 0xD1B7, 0x900A, 0xD1B8, 0x8FC5, 0xD1B9, 0x538B, 0xD1BA, 0x62BC, 0xD1BB, 0x9E26, 0xD1BC, 0x9E2D, 0xD1BD, 0x5440, + 0xD1BE, 0x4E2B, 0xD1BF, 0x82BD, 0xD1C0, 0x7259, 0xD1C1, 0x869C, 0xD1C2, 0x5D16, 0xD1C3, 0x8859, 0xD1C4, 0x6DAF, 0xD1C5, 0x96C5, + 0xD1C6, 0x54D1, 0xD1C7, 0x4E9A, 0xD1C8, 0x8BB6, 0xD1C9, 0x7109, 0xD1CA, 0x54BD, 0xD1CB, 0x9609, 0xD1CC, 0x70DF, 0xD1CD, 0x6DF9, + 0xD1CE, 0x76D0, 0xD1CF, 0x4E25, 0xD1D0, 0x7814, 0xD1D1, 0x8712, 0xD1D2, 0x5CA9, 0xD1D3, 0x5EF6, 0xD1D4, 0x8A00, 0xD1D5, 0x989C, + 0xD1D6, 0x960E, 0xD1D7, 0x708E, 0xD1D8, 0x6CBF, 0xD1D9, 0x5944, 0xD1DA, 0x63A9, 0xD1DB, 0x773C, 0xD1DC, 0x884D, 0xD1DD, 0x6F14, + 0xD1DE, 0x8273, 0xD1DF, 0x5830, 0xD1E0, 0x71D5, 0xD1E1, 0x538C, 0xD1E2, 0x781A, 0xD1E3, 0x96C1, 0xD1E4, 0x5501, 0xD1E5, 0x5F66, + 0xD1E6, 0x7130, 0xD1E7, 0x5BB4, 0xD1E8, 0x8C1A, 0xD1E9, 0x9A8C, 0xD1EA, 0x6B83, 0xD1EB, 0x592E, 0xD1EC, 0x9E2F, 0xD1ED, 0x79E7, + 0xD1EE, 0x6768, 0xD1EF, 0x626C, 0xD1F0, 0x4F6F, 0xD1F1, 0x75A1, 0xD1F2, 0x7F8A, 0xD1F3, 0x6D0B, 0xD1F4, 0x9633, 0xD1F5, 0x6C27, + 0xD1F6, 0x4EF0, 0xD1F7, 0x75D2, 0xD1F8, 0x517B, 0xD1F9, 0x6837, 0xD1FA, 0x6F3E, 0xD1FB, 0x9080, 0xD1FC, 0x8170, 0xD1FD, 0x5996, + 0xD1FE, 0x7476, 0xD240, 0x8938, 0xD241, 0x8939, 0xD242, 0x893A, 0xD243, 0x893B, 0xD244, 0x893C, 0xD245, 0x893D, 0xD246, 0x893E, + 0xD247, 0x893F, 0xD248, 0x8940, 0xD249, 0x8942, 0xD24A, 0x8943, 0xD24B, 0x8945, 0xD24C, 0x8946, 0xD24D, 0x8947, 0xD24E, 0x8948, + 0xD24F, 0x8949, 0xD250, 0x894A, 0xD251, 0x894B, 0xD252, 0x894C, 0xD253, 0x894D, 0xD254, 0x894E, 0xD255, 0x894F, 0xD256, 0x8950, + 0xD257, 0x8951, 0xD258, 0x8952, 0xD259, 0x8953, 0xD25A, 0x8954, 0xD25B, 0x8955, 0xD25C, 0x8956, 0xD25D, 0x8957, 0xD25E, 0x8958, + 0xD25F, 0x8959, 0xD260, 0x895A, 0xD261, 0x895B, 0xD262, 0x895C, 0xD263, 0x895D, 0xD264, 0x8960, 0xD265, 0x8961, 0xD266, 0x8962, + 0xD267, 0x8963, 0xD268, 0x8964, 0xD269, 0x8965, 0xD26A, 0x8967, 0xD26B, 0x8968, 0xD26C, 0x8969, 0xD26D, 0x896A, 0xD26E, 0x896B, + 0xD26F, 0x896C, 0xD270, 0x896D, 0xD271, 0x896E, 0xD272, 0x896F, 0xD273, 0x8970, 0xD274, 0x8971, 0xD275, 0x8972, 0xD276, 0x8973, + 0xD277, 0x8974, 0xD278, 0x8975, 0xD279, 0x8976, 0xD27A, 0x8977, 0xD27B, 0x8978, 0xD27C, 0x8979, 0xD27D, 0x897A, 0xD27E, 0x897C, + 0xD280, 0x897D, 0xD281, 0x897E, 0xD282, 0x8980, 0xD283, 0x8982, 0xD284, 0x8984, 0xD285, 0x8985, 0xD286, 0x8987, 0xD287, 0x8988, + 0xD288, 0x8989, 0xD289, 0x898A, 0xD28A, 0x898B, 0xD28B, 0x898C, 0xD28C, 0x898D, 0xD28D, 0x898E, 0xD28E, 0x898F, 0xD28F, 0x8990, + 0xD290, 0x8991, 0xD291, 0x8992, 0xD292, 0x8993, 0xD293, 0x8994, 0xD294, 0x8995, 0xD295, 0x8996, 0xD296, 0x8997, 0xD297, 0x8998, + 0xD298, 0x8999, 0xD299, 0x899A, 0xD29A, 0x899B, 0xD29B, 0x899C, 0xD29C, 0x899D, 0xD29D, 0x899E, 0xD29E, 0x899F, 0xD29F, 0x89A0, + 0xD2A0, 0x89A1, 0xD2A1, 0x6447, 0xD2A2, 0x5C27, 0xD2A3, 0x9065, 0xD2A4, 0x7A91, 0xD2A5, 0x8C23, 0xD2A6, 0x59DA, 0xD2A7, 0x54AC, + 0xD2A8, 0x8200, 0xD2A9, 0x836F, 0xD2AA, 0x8981, 0xD2AB, 0x8000, 0xD2AC, 0x6930, 0xD2AD, 0x564E, 0xD2AE, 0x8036, 0xD2AF, 0x7237, + 0xD2B0, 0x91CE, 0xD2B1, 0x51B6, 0xD2B2, 0x4E5F, 0xD2B3, 0x9875, 0xD2B4, 0x6396, 0xD2B5, 0x4E1A, 0xD2B6, 0x53F6, 0xD2B7, 0x66F3, + 0xD2B8, 0x814B, 0xD2B9, 0x591C, 0xD2BA, 0x6DB2, 0xD2BB, 0x4E00, 0xD2BC, 0x58F9, 0xD2BD, 0x533B, 0xD2BE, 0x63D6, 0xD2BF, 0x94F1, + 0xD2C0, 0x4F9D, 0xD2C1, 0x4F0A, 0xD2C2, 0x8863, 0xD2C3, 0x9890, 0xD2C4, 0x5937, 0xD2C5, 0x9057, 0xD2C6, 0x79FB, 0xD2C7, 0x4EEA, + 0xD2C8, 0x80F0, 0xD2C9, 0x7591, 0xD2CA, 0x6C82, 0xD2CB, 0x5B9C, 0xD2CC, 0x59E8, 0xD2CD, 0x5F5D, 0xD2CE, 0x6905, 0xD2CF, 0x8681, + 0xD2D0, 0x501A, 0xD2D1, 0x5DF2, 0xD2D2, 0x4E59, 0xD2D3, 0x77E3, 0xD2D4, 0x4EE5, 0xD2D5, 0x827A, 0xD2D6, 0x6291, 0xD2D7, 0x6613, + 0xD2D8, 0x9091, 0xD2D9, 0x5C79, 0xD2DA, 0x4EBF, 0xD2DB, 0x5F79, 0xD2DC, 0x81C6, 0xD2DD, 0x9038, 0xD2DE, 0x8084, 0xD2DF, 0x75AB, + 0xD2E0, 0x4EA6, 0xD2E1, 0x88D4, 0xD2E2, 0x610F, 0xD2E3, 0x6BC5, 0xD2E4, 0x5FC6, 0xD2E5, 0x4E49, 0xD2E6, 0x76CA, 0xD2E7, 0x6EA2, + 0xD2E8, 0x8BE3, 0xD2E9, 0x8BAE, 0xD2EA, 0x8C0A, 0xD2EB, 0x8BD1, 0xD2EC, 0x5F02, 0xD2ED, 0x7FFC, 0xD2EE, 0x7FCC, 0xD2EF, 0x7ECE, + 0xD2F0, 0x8335, 0xD2F1, 0x836B, 0xD2F2, 0x56E0, 0xD2F3, 0x6BB7, 0xD2F4, 0x97F3, 0xD2F5, 0x9634, 0xD2F6, 0x59FB, 0xD2F7, 0x541F, + 0xD2F8, 0x94F6, 0xD2F9, 0x6DEB, 0xD2FA, 0x5BC5, 0xD2FB, 0x996E, 0xD2FC, 0x5C39, 0xD2FD, 0x5F15, 0xD2FE, 0x9690, 0xD340, 0x89A2, + 0xD341, 0x89A3, 0xD342, 0x89A4, 0xD343, 0x89A5, 0xD344, 0x89A6, 0xD345, 0x89A7, 0xD346, 0x89A8, 0xD347, 0x89A9, 0xD348, 0x89AA, + 0xD349, 0x89AB, 0xD34A, 0x89AC, 0xD34B, 0x89AD, 0xD34C, 0x89AE, 0xD34D, 0x89AF, 0xD34E, 0x89B0, 0xD34F, 0x89B1, 0xD350, 0x89B2, + 0xD351, 0x89B3, 0xD352, 0x89B4, 0xD353, 0x89B5, 0xD354, 0x89B6, 0xD355, 0x89B7, 0xD356, 0x89B8, 0xD357, 0x89B9, 0xD358, 0x89BA, + 0xD359, 0x89BB, 0xD35A, 0x89BC, 0xD35B, 0x89BD, 0xD35C, 0x89BE, 0xD35D, 0x89BF, 0xD35E, 0x89C0, 0xD35F, 0x89C3, 0xD360, 0x89CD, + 0xD361, 0x89D3, 0xD362, 0x89D4, 0xD363, 0x89D5, 0xD364, 0x89D7, 0xD365, 0x89D8, 0xD366, 0x89D9, 0xD367, 0x89DB, 0xD368, 0x89DD, + 0xD369, 0x89DF, 0xD36A, 0x89E0, 0xD36B, 0x89E1, 0xD36C, 0x89E2, 0xD36D, 0x89E4, 0xD36E, 0x89E7, 0xD36F, 0x89E8, 0xD370, 0x89E9, + 0xD371, 0x89EA, 0xD372, 0x89EC, 0xD373, 0x89ED, 0xD374, 0x89EE, 0xD375, 0x89F0, 0xD376, 0x89F1, 0xD377, 0x89F2, 0xD378, 0x89F4, + 0xD379, 0x89F5, 0xD37A, 0x89F6, 0xD37B, 0x89F7, 0xD37C, 0x89F8, 0xD37D, 0x89F9, 0xD37E, 0x89FA, 0xD380, 0x89FB, 0xD381, 0x89FC, + 0xD382, 0x89FD, 0xD383, 0x89FE, 0xD384, 0x89FF, 0xD385, 0x8A01, 0xD386, 0x8A02, 0xD387, 0x8A03, 0xD388, 0x8A04, 0xD389, 0x8A05, + 0xD38A, 0x8A06, 0xD38B, 0x8A08, 0xD38C, 0x8A09, 0xD38D, 0x8A0A, 0xD38E, 0x8A0B, 0xD38F, 0x8A0C, 0xD390, 0x8A0D, 0xD391, 0x8A0E, + 0xD392, 0x8A0F, 0xD393, 0x8A10, 0xD394, 0x8A11, 0xD395, 0x8A12, 0xD396, 0x8A13, 0xD397, 0x8A14, 0xD398, 0x8A15, 0xD399, 0x8A16, + 0xD39A, 0x8A17, 0xD39B, 0x8A18, 0xD39C, 0x8A19, 0xD39D, 0x8A1A, 0xD39E, 0x8A1B, 0xD39F, 0x8A1C, 0xD3A0, 0x8A1D, 0xD3A1, 0x5370, + 0xD3A2, 0x82F1, 0xD3A3, 0x6A31, 0xD3A4, 0x5A74, 0xD3A5, 0x9E70, 0xD3A6, 0x5E94, 0xD3A7, 0x7F28, 0xD3A8, 0x83B9, 0xD3A9, 0x8424, + 0xD3AA, 0x8425, 0xD3AB, 0x8367, 0xD3AC, 0x8747, 0xD3AD, 0x8FCE, 0xD3AE, 0x8D62, 0xD3AF, 0x76C8, 0xD3B0, 0x5F71, 0xD3B1, 0x9896, + 0xD3B2, 0x786C, 0xD3B3, 0x6620, 0xD3B4, 0x54DF, 0xD3B5, 0x62E5, 0xD3B6, 0x4F63, 0xD3B7, 0x81C3, 0xD3B8, 0x75C8, 0xD3B9, 0x5EB8, + 0xD3BA, 0x96CD, 0xD3BB, 0x8E0A, 0xD3BC, 0x86F9, 0xD3BD, 0x548F, 0xD3BE, 0x6CF3, 0xD3BF, 0x6D8C, 0xD3C0, 0x6C38, 0xD3C1, 0x607F, + 0xD3C2, 0x52C7, 0xD3C3, 0x7528, 0xD3C4, 0x5E7D, 0xD3C5, 0x4F18, 0xD3C6, 0x60A0, 0xD3C7, 0x5FE7, 0xD3C8, 0x5C24, 0xD3C9, 0x7531, + 0xD3CA, 0x90AE, 0xD3CB, 0x94C0, 0xD3CC, 0x72B9, 0xD3CD, 0x6CB9, 0xD3CE, 0x6E38, 0xD3CF, 0x9149, 0xD3D0, 0x6709, 0xD3D1, 0x53CB, + 0xD3D2, 0x53F3, 0xD3D3, 0x4F51, 0xD3D4, 0x91C9, 0xD3D5, 0x8BF1, 0xD3D6, 0x53C8, 0xD3D7, 0x5E7C, 0xD3D8, 0x8FC2, 0xD3D9, 0x6DE4, + 0xD3DA, 0x4E8E, 0xD3DB, 0x76C2, 0xD3DC, 0x6986, 0xD3DD, 0x865E, 0xD3DE, 0x611A, 0xD3DF, 0x8206, 0xD3E0, 0x4F59, 0xD3E1, 0x4FDE, + 0xD3E2, 0x903E, 0xD3E3, 0x9C7C, 0xD3E4, 0x6109, 0xD3E5, 0x6E1D, 0xD3E6, 0x6E14, 0xD3E7, 0x9685, 0xD3E8, 0x4E88, 0xD3E9, 0x5A31, + 0xD3EA, 0x96E8, 0xD3EB, 0x4E0E, 0xD3EC, 0x5C7F, 0xD3ED, 0x79B9, 0xD3EE, 0x5B87, 0xD3EF, 0x8BED, 0xD3F0, 0x7FBD, 0xD3F1, 0x7389, + 0xD3F2, 0x57DF, 0xD3F3, 0x828B, 0xD3F4, 0x90C1, 0xD3F5, 0x5401, 0xD3F6, 0x9047, 0xD3F7, 0x55BB, 0xD3F8, 0x5CEA, 0xD3F9, 0x5FA1, + 0xD3FA, 0x6108, 0xD3FB, 0x6B32, 0xD3FC, 0x72F1, 0xD3FD, 0x80B2, 0xD3FE, 0x8A89, 0xD440, 0x8A1E, 0xD441, 0x8A1F, 0xD442, 0x8A20, + 0xD443, 0x8A21, 0xD444, 0x8A22, 0xD445, 0x8A23, 0xD446, 0x8A24, 0xD447, 0x8A25, 0xD448, 0x8A26, 0xD449, 0x8A27, 0xD44A, 0x8A28, + 0xD44B, 0x8A29, 0xD44C, 0x8A2A, 0xD44D, 0x8A2B, 0xD44E, 0x8A2C, 0xD44F, 0x8A2D, 0xD450, 0x8A2E, 0xD451, 0x8A2F, 0xD452, 0x8A30, + 0xD453, 0x8A31, 0xD454, 0x8A32, 0xD455, 0x8A33, 0xD456, 0x8A34, 0xD457, 0x8A35, 0xD458, 0x8A36, 0xD459, 0x8A37, 0xD45A, 0x8A38, + 0xD45B, 0x8A39, 0xD45C, 0x8A3A, 0xD45D, 0x8A3B, 0xD45E, 0x8A3C, 0xD45F, 0x8A3D, 0xD460, 0x8A3F, 0xD461, 0x8A40, 0xD462, 0x8A41, + 0xD463, 0x8A42, 0xD464, 0x8A43, 0xD465, 0x8A44, 0xD466, 0x8A45, 0xD467, 0x8A46, 0xD468, 0x8A47, 0xD469, 0x8A49, 0xD46A, 0x8A4A, + 0xD46B, 0x8A4B, 0xD46C, 0x8A4C, 0xD46D, 0x8A4D, 0xD46E, 0x8A4E, 0xD46F, 0x8A4F, 0xD470, 0x8A50, 0xD471, 0x8A51, 0xD472, 0x8A52, + 0xD473, 0x8A53, 0xD474, 0x8A54, 0xD475, 0x8A55, 0xD476, 0x8A56, 0xD477, 0x8A57, 0xD478, 0x8A58, 0xD479, 0x8A59, 0xD47A, 0x8A5A, + 0xD47B, 0x8A5B, 0xD47C, 0x8A5C, 0xD47D, 0x8A5D, 0xD47E, 0x8A5E, 0xD480, 0x8A5F, 0xD481, 0x8A60, 0xD482, 0x8A61, 0xD483, 0x8A62, + 0xD484, 0x8A63, 0xD485, 0x8A64, 0xD486, 0x8A65, 0xD487, 0x8A66, 0xD488, 0x8A67, 0xD489, 0x8A68, 0xD48A, 0x8A69, 0xD48B, 0x8A6A, + 0xD48C, 0x8A6B, 0xD48D, 0x8A6C, 0xD48E, 0x8A6D, 0xD48F, 0x8A6E, 0xD490, 0x8A6F, 0xD491, 0x8A70, 0xD492, 0x8A71, 0xD493, 0x8A72, + 0xD494, 0x8A73, 0xD495, 0x8A74, 0xD496, 0x8A75, 0xD497, 0x8A76, 0xD498, 0x8A77, 0xD499, 0x8A78, 0xD49A, 0x8A7A, 0xD49B, 0x8A7B, + 0xD49C, 0x8A7C, 0xD49D, 0x8A7D, 0xD49E, 0x8A7E, 0xD49F, 0x8A7F, 0xD4A0, 0x8A80, 0xD4A1, 0x6D74, 0xD4A2, 0x5BD3, 0xD4A3, 0x88D5, + 0xD4A4, 0x9884, 0xD4A5, 0x8C6B, 0xD4A6, 0x9A6D, 0xD4A7, 0x9E33, 0xD4A8, 0x6E0A, 0xD4A9, 0x51A4, 0xD4AA, 0x5143, 0xD4AB, 0x57A3, + 0xD4AC, 0x8881, 0xD4AD, 0x539F, 0xD4AE, 0x63F4, 0xD4AF, 0x8F95, 0xD4B0, 0x56ED, 0xD4B1, 0x5458, 0xD4B2, 0x5706, 0xD4B3, 0x733F, + 0xD4B4, 0x6E90, 0xD4B5, 0x7F18, 0xD4B6, 0x8FDC, 0xD4B7, 0x82D1, 0xD4B8, 0x613F, 0xD4B9, 0x6028, 0xD4BA, 0x9662, 0xD4BB, 0x66F0, + 0xD4BC, 0x7EA6, 0xD4BD, 0x8D8A, 0xD4BE, 0x8DC3, 0xD4BF, 0x94A5, 0xD4C0, 0x5CB3, 0xD4C1, 0x7CA4, 0xD4C2, 0x6708, 0xD4C3, 0x60A6, + 0xD4C4, 0x9605, 0xD4C5, 0x8018, 0xD4C6, 0x4E91, 0xD4C7, 0x90E7, 0xD4C8, 0x5300, 0xD4C9, 0x9668, 0xD4CA, 0x5141, 0xD4CB, 0x8FD0, + 0xD4CC, 0x8574, 0xD4CD, 0x915D, 0xD4CE, 0x6655, 0xD4CF, 0x97F5, 0xD4D0, 0x5B55, 0xD4D1, 0x531D, 0xD4D2, 0x7838, 0xD4D3, 0x6742, + 0xD4D4, 0x683D, 0xD4D5, 0x54C9, 0xD4D6, 0x707E, 0xD4D7, 0x5BB0, 0xD4D8, 0x8F7D, 0xD4D9, 0x518D, 0xD4DA, 0x5728, 0xD4DB, 0x54B1, + 0xD4DC, 0x6512, 0xD4DD, 0x6682, 0xD4DE, 0x8D5E, 0xD4DF, 0x8D43, 0xD4E0, 0x810F, 0xD4E1, 0x846C, 0xD4E2, 0x906D, 0xD4E3, 0x7CDF, + 0xD4E4, 0x51FF, 0xD4E5, 0x85FB, 0xD4E6, 0x67A3, 0xD4E7, 0x65E9, 0xD4E8, 0x6FA1, 0xD4E9, 0x86A4, 0xD4EA, 0x8E81, 0xD4EB, 0x566A, + 0xD4EC, 0x9020, 0xD4ED, 0x7682, 0xD4EE, 0x7076, 0xD4EF, 0x71E5, 0xD4F0, 0x8D23, 0xD4F1, 0x62E9, 0xD4F2, 0x5219, 0xD4F3, 0x6CFD, + 0xD4F4, 0x8D3C, 0xD4F5, 0x600E, 0xD4F6, 0x589E, 0xD4F7, 0x618E, 0xD4F8, 0x66FE, 0xD4F9, 0x8D60, 0xD4FA, 0x624E, 0xD4FB, 0x55B3, + 0xD4FC, 0x6E23, 0xD4FD, 0x672D, 0xD4FE, 0x8F67, 0xD540, 0x8A81, 0xD541, 0x8A82, 0xD542, 0x8A83, 0xD543, 0x8A84, 0xD544, 0x8A85, + 0xD545, 0x8A86, 0xD546, 0x8A87, 0xD547, 0x8A88, 0xD548, 0x8A8B, 0xD549, 0x8A8C, 0xD54A, 0x8A8D, 0xD54B, 0x8A8E, 0xD54C, 0x8A8F, + 0xD54D, 0x8A90, 0xD54E, 0x8A91, 0xD54F, 0x8A92, 0xD550, 0x8A94, 0xD551, 0x8A95, 0xD552, 0x8A96, 0xD553, 0x8A97, 0xD554, 0x8A98, + 0xD555, 0x8A99, 0xD556, 0x8A9A, 0xD557, 0x8A9B, 0xD558, 0x8A9C, 0xD559, 0x8A9D, 0xD55A, 0x8A9E, 0xD55B, 0x8A9F, 0xD55C, 0x8AA0, + 0xD55D, 0x8AA1, 0xD55E, 0x8AA2, 0xD55F, 0x8AA3, 0xD560, 0x8AA4, 0xD561, 0x8AA5, 0xD562, 0x8AA6, 0xD563, 0x8AA7, 0xD564, 0x8AA8, + 0xD565, 0x8AA9, 0xD566, 0x8AAA, 0xD567, 0x8AAB, 0xD568, 0x8AAC, 0xD569, 0x8AAD, 0xD56A, 0x8AAE, 0xD56B, 0x8AAF, 0xD56C, 0x8AB0, + 0xD56D, 0x8AB1, 0xD56E, 0x8AB2, 0xD56F, 0x8AB3, 0xD570, 0x8AB4, 0xD571, 0x8AB5, 0xD572, 0x8AB6, 0xD573, 0x8AB7, 0xD574, 0x8AB8, + 0xD575, 0x8AB9, 0xD576, 0x8ABA, 0xD577, 0x8ABB, 0xD578, 0x8ABC, 0xD579, 0x8ABD, 0xD57A, 0x8ABE, 0xD57B, 0x8ABF, 0xD57C, 0x8AC0, + 0xD57D, 0x8AC1, 0xD57E, 0x8AC2, 0xD580, 0x8AC3, 0xD581, 0x8AC4, 0xD582, 0x8AC5, 0xD583, 0x8AC6, 0xD584, 0x8AC7, 0xD585, 0x8AC8, + 0xD586, 0x8AC9, 0xD587, 0x8ACA, 0xD588, 0x8ACB, 0xD589, 0x8ACC, 0xD58A, 0x8ACD, 0xD58B, 0x8ACE, 0xD58C, 0x8ACF, 0xD58D, 0x8AD0, + 0xD58E, 0x8AD1, 0xD58F, 0x8AD2, 0xD590, 0x8AD3, 0xD591, 0x8AD4, 0xD592, 0x8AD5, 0xD593, 0x8AD6, 0xD594, 0x8AD7, 0xD595, 0x8AD8, + 0xD596, 0x8AD9, 0xD597, 0x8ADA, 0xD598, 0x8ADB, 0xD599, 0x8ADC, 0xD59A, 0x8ADD, 0xD59B, 0x8ADE, 0xD59C, 0x8ADF, 0xD59D, 0x8AE0, + 0xD59E, 0x8AE1, 0xD59F, 0x8AE2, 0xD5A0, 0x8AE3, 0xD5A1, 0x94E1, 0xD5A2, 0x95F8, 0xD5A3, 0x7728, 0xD5A4, 0x6805, 0xD5A5, 0x69A8, + 0xD5A6, 0x548B, 0xD5A7, 0x4E4D, 0xD5A8, 0x70B8, 0xD5A9, 0x8BC8, 0xD5AA, 0x6458, 0xD5AB, 0x658B, 0xD5AC, 0x5B85, 0xD5AD, 0x7A84, + 0xD5AE, 0x503A, 0xD5AF, 0x5BE8, 0xD5B0, 0x77BB, 0xD5B1, 0x6BE1, 0xD5B2, 0x8A79, 0xD5B3, 0x7C98, 0xD5B4, 0x6CBE, 0xD5B5, 0x76CF, + 0xD5B6, 0x65A9, 0xD5B7, 0x8F97, 0xD5B8, 0x5D2D, 0xD5B9, 0x5C55, 0xD5BA, 0x8638, 0xD5BB, 0x6808, 0xD5BC, 0x5360, 0xD5BD, 0x6218, + 0xD5BE, 0x7AD9, 0xD5BF, 0x6E5B, 0xD5C0, 0x7EFD, 0xD5C1, 0x6A1F, 0xD5C2, 0x7AE0, 0xD5C3, 0x5F70, 0xD5C4, 0x6F33, 0xD5C5, 0x5F20, + 0xD5C6, 0x638C, 0xD5C7, 0x6DA8, 0xD5C8, 0x6756, 0xD5C9, 0x4E08, 0xD5CA, 0x5E10, 0xD5CB, 0x8D26, 0xD5CC, 0x4ED7, 0xD5CD, 0x80C0, + 0xD5CE, 0x7634, 0xD5CF, 0x969C, 0xD5D0, 0x62DB, 0xD5D1, 0x662D, 0xD5D2, 0x627E, 0xD5D3, 0x6CBC, 0xD5D4, 0x8D75, 0xD5D5, 0x7167, + 0xD5D6, 0x7F69, 0xD5D7, 0x5146, 0xD5D8, 0x8087, 0xD5D9, 0x53EC, 0xD5DA, 0x906E, 0xD5DB, 0x6298, 0xD5DC, 0x54F2, 0xD5DD, 0x86F0, + 0xD5DE, 0x8F99, 0xD5DF, 0x8005, 0xD5E0, 0x9517, 0xD5E1, 0x8517, 0xD5E2, 0x8FD9, 0xD5E3, 0x6D59, 0xD5E4, 0x73CD, 0xD5E5, 0x659F, + 0xD5E6, 0x771F, 0xD5E7, 0x7504, 0xD5E8, 0x7827, 0xD5E9, 0x81FB, 0xD5EA, 0x8D1E, 0xD5EB, 0x9488, 0xD5EC, 0x4FA6, 0xD5ED, 0x6795, + 0xD5EE, 0x75B9, 0xD5EF, 0x8BCA, 0xD5F0, 0x9707, 0xD5F1, 0x632F, 0xD5F2, 0x9547, 0xD5F3, 0x9635, 0xD5F4, 0x84B8, 0xD5F5, 0x6323, + 0xD5F6, 0x7741, 0xD5F7, 0x5F81, 0xD5F8, 0x72F0, 0xD5F9, 0x4E89, 0xD5FA, 0x6014, 0xD5FB, 0x6574, 0xD5FC, 0x62EF, 0xD5FD, 0x6B63, + 0xD5FE, 0x653F, 0xD640, 0x8AE4, 0xD641, 0x8AE5, 0xD642, 0x8AE6, 0xD643, 0x8AE7, 0xD644, 0x8AE8, 0xD645, 0x8AE9, 0xD646, 0x8AEA, + 0xD647, 0x8AEB, 0xD648, 0x8AEC, 0xD649, 0x8AED, 0xD64A, 0x8AEE, 0xD64B, 0x8AEF, 0xD64C, 0x8AF0, 0xD64D, 0x8AF1, 0xD64E, 0x8AF2, + 0xD64F, 0x8AF3, 0xD650, 0x8AF4, 0xD651, 0x8AF5, 0xD652, 0x8AF6, 0xD653, 0x8AF7, 0xD654, 0x8AF8, 0xD655, 0x8AF9, 0xD656, 0x8AFA, + 0xD657, 0x8AFB, 0xD658, 0x8AFC, 0xD659, 0x8AFD, 0xD65A, 0x8AFE, 0xD65B, 0x8AFF, 0xD65C, 0x8B00, 0xD65D, 0x8B01, 0xD65E, 0x8B02, + 0xD65F, 0x8B03, 0xD660, 0x8B04, 0xD661, 0x8B05, 0xD662, 0x8B06, 0xD663, 0x8B08, 0xD664, 0x8B09, 0xD665, 0x8B0A, 0xD666, 0x8B0B, + 0xD667, 0x8B0C, 0xD668, 0x8B0D, 0xD669, 0x8B0E, 0xD66A, 0x8B0F, 0xD66B, 0x8B10, 0xD66C, 0x8B11, 0xD66D, 0x8B12, 0xD66E, 0x8B13, + 0xD66F, 0x8B14, 0xD670, 0x8B15, 0xD671, 0x8B16, 0xD672, 0x8B17, 0xD673, 0x8B18, 0xD674, 0x8B19, 0xD675, 0x8B1A, 0xD676, 0x8B1B, + 0xD677, 0x8B1C, 0xD678, 0x8B1D, 0xD679, 0x8B1E, 0xD67A, 0x8B1F, 0xD67B, 0x8B20, 0xD67C, 0x8B21, 0xD67D, 0x8B22, 0xD67E, 0x8B23, + 0xD680, 0x8B24, 0xD681, 0x8B25, 0xD682, 0x8B27, 0xD683, 0x8B28, 0xD684, 0x8B29, 0xD685, 0x8B2A, 0xD686, 0x8B2B, 0xD687, 0x8B2C, + 0xD688, 0x8B2D, 0xD689, 0x8B2E, 0xD68A, 0x8B2F, 0xD68B, 0x8B30, 0xD68C, 0x8B31, 0xD68D, 0x8B32, 0xD68E, 0x8B33, 0xD68F, 0x8B34, + 0xD690, 0x8B35, 0xD691, 0x8B36, 0xD692, 0x8B37, 0xD693, 0x8B38, 0xD694, 0x8B39, 0xD695, 0x8B3A, 0xD696, 0x8B3B, 0xD697, 0x8B3C, + 0xD698, 0x8B3D, 0xD699, 0x8B3E, 0xD69A, 0x8B3F, 0xD69B, 0x8B40, 0xD69C, 0x8B41, 0xD69D, 0x8B42, 0xD69E, 0x8B43, 0xD69F, 0x8B44, + 0xD6A0, 0x8B45, 0xD6A1, 0x5E27, 0xD6A2, 0x75C7, 0xD6A3, 0x90D1, 0xD6A4, 0x8BC1, 0xD6A5, 0x829D, 0xD6A6, 0x679D, 0xD6A7, 0x652F, + 0xD6A8, 0x5431, 0xD6A9, 0x8718, 0xD6AA, 0x77E5, 0xD6AB, 0x80A2, 0xD6AC, 0x8102, 0xD6AD, 0x6C41, 0xD6AE, 0x4E4B, 0xD6AF, 0x7EC7, + 0xD6B0, 0x804C, 0xD6B1, 0x76F4, 0xD6B2, 0x690D, 0xD6B3, 0x6B96, 0xD6B4, 0x6267, 0xD6B5, 0x503C, 0xD6B6, 0x4F84, 0xD6B7, 0x5740, + 0xD6B8, 0x6307, 0xD6B9, 0x6B62, 0xD6BA, 0x8DBE, 0xD6BB, 0x53EA, 0xD6BC, 0x65E8, 0xD6BD, 0x7EB8, 0xD6BE, 0x5FD7, 0xD6BF, 0x631A, + 0xD6C0, 0x63B7, 0xD6C1, 0x81F3, 0xD6C2, 0x81F4, 0xD6C3, 0x7F6E, 0xD6C4, 0x5E1C, 0xD6C5, 0x5CD9, 0xD6C6, 0x5236, 0xD6C7, 0x667A, + 0xD6C8, 0x79E9, 0xD6C9, 0x7A1A, 0xD6CA, 0x8D28, 0xD6CB, 0x7099, 0xD6CC, 0x75D4, 0xD6CD, 0x6EDE, 0xD6CE, 0x6CBB, 0xD6CF, 0x7A92, + 0xD6D0, 0x4E2D, 0xD6D1, 0x76C5, 0xD6D2, 0x5FE0, 0xD6D3, 0x949F, 0xD6D4, 0x8877, 0xD6D5, 0x7EC8, 0xD6D6, 0x79CD, 0xD6D7, 0x80BF, + 0xD6D8, 0x91CD, 0xD6D9, 0x4EF2, 0xD6DA, 0x4F17, 0xD6DB, 0x821F, 0xD6DC, 0x5468, 0xD6DD, 0x5DDE, 0xD6DE, 0x6D32, 0xD6DF, 0x8BCC, + 0xD6E0, 0x7CA5, 0xD6E1, 0x8F74, 0xD6E2, 0x8098, 0xD6E3, 0x5E1A, 0xD6E4, 0x5492, 0xD6E5, 0x76B1, 0xD6E6, 0x5B99, 0xD6E7, 0x663C, + 0xD6E8, 0x9AA4, 0xD6E9, 0x73E0, 0xD6EA, 0x682A, 0xD6EB, 0x86DB, 0xD6EC, 0x6731, 0xD6ED, 0x732A, 0xD6EE, 0x8BF8, 0xD6EF, 0x8BDB, + 0xD6F0, 0x9010, 0xD6F1, 0x7AF9, 0xD6F2, 0x70DB, 0xD6F3, 0x716E, 0xD6F4, 0x62C4, 0xD6F5, 0x77A9, 0xD6F6, 0x5631, 0xD6F7, 0x4E3B, + 0xD6F8, 0x8457, 0xD6F9, 0x67F1, 0xD6FA, 0x52A9, 0xD6FB, 0x86C0, 0xD6FC, 0x8D2E, 0xD6FD, 0x94F8, 0xD6FE, 0x7B51, 0xD740, 0x8B46, + 0xD741, 0x8B47, 0xD742, 0x8B48, 0xD743, 0x8B49, 0xD744, 0x8B4A, 0xD745, 0x8B4B, 0xD746, 0x8B4C, 0xD747, 0x8B4D, 0xD748, 0x8B4E, + 0xD749, 0x8B4F, 0xD74A, 0x8B50, 0xD74B, 0x8B51, 0xD74C, 0x8B52, 0xD74D, 0x8B53, 0xD74E, 0x8B54, 0xD74F, 0x8B55, 0xD750, 0x8B56, + 0xD751, 0x8B57, 0xD752, 0x8B58, 0xD753, 0x8B59, 0xD754, 0x8B5A, 0xD755, 0x8B5B, 0xD756, 0x8B5C, 0xD757, 0x8B5D, 0xD758, 0x8B5E, + 0xD759, 0x8B5F, 0xD75A, 0x8B60, 0xD75B, 0x8B61, 0xD75C, 0x8B62, 0xD75D, 0x8B63, 0xD75E, 0x8B64, 0xD75F, 0x8B65, 0xD760, 0x8B67, + 0xD761, 0x8B68, 0xD762, 0x8B69, 0xD763, 0x8B6A, 0xD764, 0x8B6B, 0xD765, 0x8B6D, 0xD766, 0x8B6E, 0xD767, 0x8B6F, 0xD768, 0x8B70, + 0xD769, 0x8B71, 0xD76A, 0x8B72, 0xD76B, 0x8B73, 0xD76C, 0x8B74, 0xD76D, 0x8B75, 0xD76E, 0x8B76, 0xD76F, 0x8B77, 0xD770, 0x8B78, + 0xD771, 0x8B79, 0xD772, 0x8B7A, 0xD773, 0x8B7B, 0xD774, 0x8B7C, 0xD775, 0x8B7D, 0xD776, 0x8B7E, 0xD777, 0x8B7F, 0xD778, 0x8B80, + 0xD779, 0x8B81, 0xD77A, 0x8B82, 0xD77B, 0x8B83, 0xD77C, 0x8B84, 0xD77D, 0x8B85, 0xD77E, 0x8B86, 0xD780, 0x8B87, 0xD781, 0x8B88, + 0xD782, 0x8B89, 0xD783, 0x8B8A, 0xD784, 0x8B8B, 0xD785, 0x8B8C, 0xD786, 0x8B8D, 0xD787, 0x8B8E, 0xD788, 0x8B8F, 0xD789, 0x8B90, + 0xD78A, 0x8B91, 0xD78B, 0x8B92, 0xD78C, 0x8B93, 0xD78D, 0x8B94, 0xD78E, 0x8B95, 0xD78F, 0x8B96, 0xD790, 0x8B97, 0xD791, 0x8B98, + 0xD792, 0x8B99, 0xD793, 0x8B9A, 0xD794, 0x8B9B, 0xD795, 0x8B9C, 0xD796, 0x8B9D, 0xD797, 0x8B9E, 0xD798, 0x8B9F, 0xD799, 0x8BAC, + 0xD79A, 0x8BB1, 0xD79B, 0x8BBB, 0xD79C, 0x8BC7, 0xD79D, 0x8BD0, 0xD79E, 0x8BEA, 0xD79F, 0x8C09, 0xD7A0, 0x8C1E, 0xD7A1, 0x4F4F, + 0xD7A2, 0x6CE8, 0xD7A3, 0x795D, 0xD7A4, 0x9A7B, 0xD7A5, 0x6293, 0xD7A6, 0x722A, 0xD7A7, 0x62FD, 0xD7A8, 0x4E13, 0xD7A9, 0x7816, + 0xD7AA, 0x8F6C, 0xD7AB, 0x64B0, 0xD7AC, 0x8D5A, 0xD7AD, 0x7BC6, 0xD7AE, 0x6869, 0xD7AF, 0x5E84, 0xD7B0, 0x88C5, 0xD7B1, 0x5986, + 0xD7B2, 0x649E, 0xD7B3, 0x58EE, 0xD7B4, 0x72B6, 0xD7B5, 0x690E, 0xD7B6, 0x9525, 0xD7B7, 0x8FFD, 0xD7B8, 0x8D58, 0xD7B9, 0x5760, + 0xD7BA, 0x7F00, 0xD7BB, 0x8C06, 0xD7BC, 0x51C6, 0xD7BD, 0x6349, 0xD7BE, 0x62D9, 0xD7BF, 0x5353, 0xD7C0, 0x684C, 0xD7C1, 0x7422, + 0xD7C2, 0x8301, 0xD7C3, 0x914C, 0xD7C4, 0x5544, 0xD7C5, 0x7740, 0xD7C6, 0x707C, 0xD7C7, 0x6D4A, 0xD7C8, 0x5179, 0xD7C9, 0x54A8, + 0xD7CA, 0x8D44, 0xD7CB, 0x59FF, 0xD7CC, 0x6ECB, 0xD7CD, 0x6DC4, 0xD7CE, 0x5B5C, 0xD7CF, 0x7D2B, 0xD7D0, 0x4ED4, 0xD7D1, 0x7C7D, + 0xD7D2, 0x6ED3, 0xD7D3, 0x5B50, 0xD7D4, 0x81EA, 0xD7D5, 0x6E0D, 0xD7D6, 0x5B57, 0xD7D7, 0x9B03, 0xD7D8, 0x68D5, 0xD7D9, 0x8E2A, + 0xD7DA, 0x5B97, 0xD7DB, 0x7EFC, 0xD7DC, 0x603B, 0xD7DD, 0x7EB5, 0xD7DE, 0x90B9, 0xD7DF, 0x8D70, 0xD7E0, 0x594F, 0xD7E1, 0x63CD, + 0xD7E2, 0x79DF, 0xD7E3, 0x8DB3, 0xD7E4, 0x5352, 0xD7E5, 0x65CF, 0xD7E6, 0x7956, 0xD7E7, 0x8BC5, 0xD7E8, 0x963B, 0xD7E9, 0x7EC4, + 0xD7EA, 0x94BB, 0xD7EB, 0x7E82, 0xD7EC, 0x5634, 0xD7ED, 0x9189, 0xD7EE, 0x6700, 0xD7EF, 0x7F6A, 0xD7F0, 0x5C0A, 0xD7F1, 0x9075, + 0xD7F2, 0x6628, 0xD7F3, 0x5DE6, 0xD7F4, 0x4F50, 0xD7F5, 0x67DE, 0xD7F6, 0x505A, 0xD7F7, 0x4F5C, 0xD7F8, 0x5750, 0xD7F9, 0x5EA7, + 0xD840, 0x8C38, 0xD841, 0x8C39, 0xD842, 0x8C3A, 0xD843, 0x8C3B, 0xD844, 0x8C3C, 0xD845, 0x8C3D, 0xD846, 0x8C3E, 0xD847, 0x8C3F, + 0xD848, 0x8C40, 0xD849, 0x8C42, 0xD84A, 0x8C43, 0xD84B, 0x8C44, 0xD84C, 0x8C45, 0xD84D, 0x8C48, 0xD84E, 0x8C4A, 0xD84F, 0x8C4B, + 0xD850, 0x8C4D, 0xD851, 0x8C4E, 0xD852, 0x8C4F, 0xD853, 0x8C50, 0xD854, 0x8C51, 0xD855, 0x8C52, 0xD856, 0x8C53, 0xD857, 0x8C54, + 0xD858, 0x8C56, 0xD859, 0x8C57, 0xD85A, 0x8C58, 0xD85B, 0x8C59, 0xD85C, 0x8C5B, 0xD85D, 0x8C5C, 0xD85E, 0x8C5D, 0xD85F, 0x8C5E, + 0xD860, 0x8C5F, 0xD861, 0x8C60, 0xD862, 0x8C63, 0xD863, 0x8C64, 0xD864, 0x8C65, 0xD865, 0x8C66, 0xD866, 0x8C67, 0xD867, 0x8C68, + 0xD868, 0x8C69, 0xD869, 0x8C6C, 0xD86A, 0x8C6D, 0xD86B, 0x8C6E, 0xD86C, 0x8C6F, 0xD86D, 0x8C70, 0xD86E, 0x8C71, 0xD86F, 0x8C72, + 0xD870, 0x8C74, 0xD871, 0x8C75, 0xD872, 0x8C76, 0xD873, 0x8C77, 0xD874, 0x8C7B, 0xD875, 0x8C7C, 0xD876, 0x8C7D, 0xD877, 0x8C7E, + 0xD878, 0x8C7F, 0xD879, 0x8C80, 0xD87A, 0x8C81, 0xD87B, 0x8C83, 0xD87C, 0x8C84, 0xD87D, 0x8C86, 0xD87E, 0x8C87, 0xD880, 0x8C88, + 0xD881, 0x8C8B, 0xD882, 0x8C8D, 0xD883, 0x8C8E, 0xD884, 0x8C8F, 0xD885, 0x8C90, 0xD886, 0x8C91, 0xD887, 0x8C92, 0xD888, 0x8C93, + 0xD889, 0x8C95, 0xD88A, 0x8C96, 0xD88B, 0x8C97, 0xD88C, 0x8C99, 0xD88D, 0x8C9A, 0xD88E, 0x8C9B, 0xD88F, 0x8C9C, 0xD890, 0x8C9D, + 0xD891, 0x8C9E, 0xD892, 0x8C9F, 0xD893, 0x8CA0, 0xD894, 0x8CA1, 0xD895, 0x8CA2, 0xD896, 0x8CA3, 0xD897, 0x8CA4, 0xD898, 0x8CA5, + 0xD899, 0x8CA6, 0xD89A, 0x8CA7, 0xD89B, 0x8CA8, 0xD89C, 0x8CA9, 0xD89D, 0x8CAA, 0xD89E, 0x8CAB, 0xD89F, 0x8CAC, 0xD8A0, 0x8CAD, + 0xD8A1, 0x4E8D, 0xD8A2, 0x4E0C, 0xD8A3, 0x5140, 0xD8A4, 0x4E10, 0xD8A5, 0x5EFF, 0xD8A6, 0x5345, 0xD8A7, 0x4E15, 0xD8A8, 0x4E98, + 0xD8A9, 0x4E1E, 0xD8AA, 0x9B32, 0xD8AB, 0x5B6C, 0xD8AC, 0x5669, 0xD8AD, 0x4E28, 0xD8AE, 0x79BA, 0xD8AF, 0x4E3F, 0xD8B0, 0x5315, + 0xD8B1, 0x4E47, 0xD8B2, 0x592D, 0xD8B3, 0x723B, 0xD8B4, 0x536E, 0xD8B5, 0x6C10, 0xD8B6, 0x56DF, 0xD8B7, 0x80E4, 0xD8B8, 0x9997, + 0xD8B9, 0x6BD3, 0xD8BA, 0x777E, 0xD8BB, 0x9F17, 0xD8BC, 0x4E36, 0xD8BD, 0x4E9F, 0xD8BE, 0x9F10, 0xD8BF, 0x4E5C, 0xD8C0, 0x4E69, + 0xD8C1, 0x4E93, 0xD8C2, 0x8288, 0xD8C3, 0x5B5B, 0xD8C4, 0x556C, 0xD8C5, 0x560F, 0xD8C6, 0x4EC4, 0xD8C7, 0x538D, 0xD8C8, 0x539D, + 0xD8C9, 0x53A3, 0xD8CA, 0x53A5, 0xD8CB, 0x53AE, 0xD8CC, 0x9765, 0xD8CD, 0x8D5D, 0xD8CE, 0x531A, 0xD8CF, 0x53F5, 0xD8D0, 0x5326, + 0xD8D1, 0x532E, 0xD8D2, 0x533E, 0xD8D3, 0x8D5C, 0xD8D4, 0x5366, 0xD8D5, 0x5363, 0xD8D6, 0x5202, 0xD8D7, 0x5208, 0xD8D8, 0x520E, + 0xD8D9, 0x522D, 0xD8DA, 0x5233, 0xD8DB, 0x523F, 0xD8DC, 0x5240, 0xD8DD, 0x524C, 0xD8DE, 0x525E, 0xD8DF, 0x5261, 0xD8E0, 0x525C, + 0xD8E1, 0x84AF, 0xD8E2, 0x527D, 0xD8E3, 0x5282, 0xD8E4, 0x5281, 0xD8E5, 0x5290, 0xD8E6, 0x5293, 0xD8E7, 0x5182, 0xD8E8, 0x7F54, + 0xD8E9, 0x4EBB, 0xD8EA, 0x4EC3, 0xD8EB, 0x4EC9, 0xD8EC, 0x4EC2, 0xD8ED, 0x4EE8, 0xD8EE, 0x4EE1, 0xD8EF, 0x4EEB, 0xD8F0, 0x4EDE, + 0xD8F1, 0x4F1B, 0xD8F2, 0x4EF3, 0xD8F3, 0x4F22, 0xD8F4, 0x4F64, 0xD8F5, 0x4EF5, 0xD8F6, 0x4F25, 0xD8F7, 0x4F27, 0xD8F8, 0x4F09, + 0xD8F9, 0x4F2B, 0xD8FA, 0x4F5E, 0xD8FB, 0x4F67, 0xD8FC, 0x6538, 0xD8FD, 0x4F5A, 0xD8FE, 0x4F5D, 0xD940, 0x8CAE, 0xD941, 0x8CAF, + 0xD942, 0x8CB0, 0xD943, 0x8CB1, 0xD944, 0x8CB2, 0xD945, 0x8CB3, 0xD946, 0x8CB4, 0xD947, 0x8CB5, 0xD948, 0x8CB6, 0xD949, 0x8CB7, + 0xD94A, 0x8CB8, 0xD94B, 0x8CB9, 0xD94C, 0x8CBA, 0xD94D, 0x8CBB, 0xD94E, 0x8CBC, 0xD94F, 0x8CBD, 0xD950, 0x8CBE, 0xD951, 0x8CBF, + 0xD952, 0x8CC0, 0xD953, 0x8CC1, 0xD954, 0x8CC2, 0xD955, 0x8CC3, 0xD956, 0x8CC4, 0xD957, 0x8CC5, 0xD958, 0x8CC6, 0xD959, 0x8CC7, + 0xD95A, 0x8CC8, 0xD95B, 0x8CC9, 0xD95C, 0x8CCA, 0xD95D, 0x8CCB, 0xD95E, 0x8CCC, 0xD95F, 0x8CCD, 0xD960, 0x8CCE, 0xD961, 0x8CCF, + 0xD962, 0x8CD0, 0xD963, 0x8CD1, 0xD964, 0x8CD2, 0xD965, 0x8CD3, 0xD966, 0x8CD4, 0xD967, 0x8CD5, 0xD968, 0x8CD6, 0xD969, 0x8CD7, + 0xD96A, 0x8CD8, 0xD96B, 0x8CD9, 0xD96C, 0x8CDA, 0xD96D, 0x8CDB, 0xD96E, 0x8CDC, 0xD96F, 0x8CDD, 0xD970, 0x8CDE, 0xD971, 0x8CDF, + 0xD972, 0x8CE0, 0xD973, 0x8CE1, 0xD974, 0x8CE2, 0xD975, 0x8CE3, 0xD976, 0x8CE4, 0xD977, 0x8CE5, 0xD978, 0x8CE6, 0xD979, 0x8CE7, + 0xD97A, 0x8CE8, 0xD97B, 0x8CE9, 0xD97C, 0x8CEA, 0xD97D, 0x8CEB, 0xD97E, 0x8CEC, 0xD980, 0x8CED, 0xD981, 0x8CEE, 0xD982, 0x8CEF, + 0xD983, 0x8CF0, 0xD984, 0x8CF1, 0xD985, 0x8CF2, 0xD986, 0x8CF3, 0xD987, 0x8CF4, 0xD988, 0x8CF5, 0xD989, 0x8CF6, 0xD98A, 0x8CF7, + 0xD98B, 0x8CF8, 0xD98C, 0x8CF9, 0xD98D, 0x8CFA, 0xD98E, 0x8CFB, 0xD98F, 0x8CFC, 0xD990, 0x8CFD, 0xD991, 0x8CFE, 0xD992, 0x8CFF, + 0xD993, 0x8D00, 0xD994, 0x8D01, 0xD995, 0x8D02, 0xD996, 0x8D03, 0xD997, 0x8D04, 0xD998, 0x8D05, 0xD999, 0x8D06, 0xD99A, 0x8D07, + 0xD99B, 0x8D08, 0xD99C, 0x8D09, 0xD99D, 0x8D0A, 0xD99E, 0x8D0B, 0xD99F, 0x8D0C, 0xD9A0, 0x8D0D, 0xD9A1, 0x4F5F, 0xD9A2, 0x4F57, + 0xD9A3, 0x4F32, 0xD9A4, 0x4F3D, 0xD9A5, 0x4F76, 0xD9A6, 0x4F74, 0xD9A7, 0x4F91, 0xD9A8, 0x4F89, 0xD9A9, 0x4F83, 0xD9AA, 0x4F8F, + 0xD9AB, 0x4F7E, 0xD9AC, 0x4F7B, 0xD9AD, 0x4FAA, 0xD9AE, 0x4F7C, 0xD9AF, 0x4FAC, 0xD9B0, 0x4F94, 0xD9B1, 0x4FE6, 0xD9B2, 0x4FE8, + 0xD9B3, 0x4FEA, 0xD9B4, 0x4FC5, 0xD9B5, 0x4FDA, 0xD9B6, 0x4FE3, 0xD9B7, 0x4FDC, 0xD9B8, 0x4FD1, 0xD9B9, 0x4FDF, 0xD9BA, 0x4FF8, + 0xD9BB, 0x5029, 0xD9BC, 0x504C, 0xD9BD, 0x4FF3, 0xD9BE, 0x502C, 0xD9BF, 0x500F, 0xD9C0, 0x502E, 0xD9C1, 0x502D, 0xD9C2, 0x4FFE, + 0xD9C3, 0x501C, 0xD9C4, 0x500C, 0xD9C5, 0x5025, 0xD9C6, 0x5028, 0xD9C7, 0x507E, 0xD9C8, 0x5043, 0xD9C9, 0x5055, 0xD9CA, 0x5048, + 0xD9CB, 0x504E, 0xD9CC, 0x506C, 0xD9CD, 0x507B, 0xD9CE, 0x50A5, 0xD9CF, 0x50A7, 0xD9D0, 0x50A9, 0xD9D1, 0x50BA, 0xD9D2, 0x50D6, + 0xD9D3, 0x5106, 0xD9D4, 0x50ED, 0xD9D5, 0x50EC, 0xD9D6, 0x50E6, 0xD9D7, 0x50EE, 0xD9D8, 0x5107, 0xD9D9, 0x510B, 0xD9DA, 0x4EDD, + 0xD9DB, 0x6C3D, 0xD9DC, 0x4F58, 0xD9DD, 0x4F65, 0xD9DE, 0x4FCE, 0xD9DF, 0x9FA0, 0xD9E0, 0x6C46, 0xD9E1, 0x7C74, 0xD9E2, 0x516E, + 0xD9E3, 0x5DFD, 0xD9E4, 0x9EC9, 0xD9E5, 0x9998, 0xD9E6, 0x5181, 0xD9E7, 0x5914, 0xD9E8, 0x52F9, 0xD9E9, 0x530D, 0xD9EA, 0x8A07, + 0xD9EB, 0x5310, 0xD9EC, 0x51EB, 0xD9ED, 0x5919, 0xD9EE, 0x5155, 0xD9EF, 0x4EA0, 0xD9F0, 0x5156, 0xD9F1, 0x4EB3, 0xD9F2, 0x886E, + 0xD9F3, 0x88A4, 0xD9F4, 0x4EB5, 0xD9F5, 0x8114, 0xD9F6, 0x88D2, 0xD9F7, 0x7980, 0xD9F8, 0x5B34, 0xD9F9, 0x8803, 0xD9FA, 0x7FB8, + 0xD9FB, 0x51AB, 0xD9FC, 0x51B1, 0xD9FD, 0x51BD, 0xD9FE, 0x51BC, 0xDA40, 0x8D0E, 0xDA41, 0x8D0F, 0xDA42, 0x8D10, 0xDA43, 0x8D11, + 0xDA44, 0x8D12, 0xDA45, 0x8D13, 0xDA46, 0x8D14, 0xDA47, 0x8D15, 0xDA48, 0x8D16, 0xDA49, 0x8D17, 0xDA4A, 0x8D18, 0xDA4B, 0x8D19, + 0xDA4C, 0x8D1A, 0xDA4D, 0x8D1B, 0xDA4E, 0x8D1C, 0xDA4F, 0x8D20, 0xDA50, 0x8D51, 0xDA51, 0x8D52, 0xDA52, 0x8D57, 0xDA53, 0x8D5F, + 0xDA54, 0x8D65, 0xDA55, 0x8D68, 0xDA56, 0x8D69, 0xDA57, 0x8D6A, 0xDA58, 0x8D6C, 0xDA59, 0x8D6E, 0xDA5A, 0x8D6F, 0xDA5B, 0x8D71, + 0xDA5C, 0x8D72, 0xDA5D, 0x8D78, 0xDA5E, 0x8D79, 0xDA5F, 0x8D7A, 0xDA60, 0x8D7B, 0xDA61, 0x8D7C, 0xDA62, 0x8D7D, 0xDA63, 0x8D7E, + 0xDA64, 0x8D7F, 0xDA65, 0x8D80, 0xDA66, 0x8D82, 0xDA67, 0x8D83, 0xDA68, 0x8D86, 0xDA69, 0x8D87, 0xDA6A, 0x8D88, 0xDA6B, 0x8D89, + 0xDA6C, 0x8D8C, 0xDA6D, 0x8D8D, 0xDA6E, 0x8D8E, 0xDA6F, 0x8D8F, 0xDA70, 0x8D90, 0xDA71, 0x8D92, 0xDA72, 0x8D93, 0xDA73, 0x8D95, + 0xDA74, 0x8D96, 0xDA75, 0x8D97, 0xDA76, 0x8D98, 0xDA77, 0x8D99, 0xDA78, 0x8D9A, 0xDA79, 0x8D9B, 0xDA7A, 0x8D9C, 0xDA7B, 0x8D9D, + 0xDA7C, 0x8D9E, 0xDA7D, 0x8DA0, 0xDA7E, 0x8DA1, 0xDA80, 0x8DA2, 0xDA81, 0x8DA4, 0xDA82, 0x8DA5, 0xDA83, 0x8DA6, 0xDA84, 0x8DA7, + 0xDA85, 0x8DA8, 0xDA86, 0x8DA9, 0xDA87, 0x8DAA, 0xDA88, 0x8DAB, 0xDA89, 0x8DAC, 0xDA8A, 0x8DAD, 0xDA8B, 0x8DAE, 0xDA8C, 0x8DAF, + 0xDA8D, 0x8DB0, 0xDA8E, 0x8DB2, 0xDA8F, 0x8DB6, 0xDA90, 0x8DB7, 0xDA91, 0x8DB9, 0xDA92, 0x8DBB, 0xDA93, 0x8DBD, 0xDA94, 0x8DC0, + 0xDA95, 0x8DC1, 0xDA96, 0x8DC2, 0xDA97, 0x8DC5, 0xDA98, 0x8DC7, 0xDA99, 0x8DC8, 0xDA9A, 0x8DC9, 0xDA9B, 0x8DCA, 0xDA9C, 0x8DCD, + 0xDA9D, 0x8DD0, 0xDA9E, 0x8DD2, 0xDA9F, 0x8DD3, 0xDAA0, 0x8DD4, 0xDAA1, 0x51C7, 0xDAA2, 0x5196, 0xDAA3, 0x51A2, 0xDAA4, 0x51A5, + 0xDAA5, 0x8BA0, 0xDAA6, 0x8BA6, 0xDAA7, 0x8BA7, 0xDAA8, 0x8BAA, 0xDAA9, 0x8BB4, 0xDAAA, 0x8BB5, 0xDAAB, 0x8BB7, 0xDAAC, 0x8BC2, + 0xDAAD, 0x8BC3, 0xDAAE, 0x8BCB, 0xDAAF, 0x8BCF, 0xDAB0, 0x8BCE, 0xDAB1, 0x8BD2, 0xDAB2, 0x8BD3, 0xDAB3, 0x8BD4, 0xDAB4, 0x8BD6, + 0xDAB5, 0x8BD8, 0xDAB6, 0x8BD9, 0xDAB7, 0x8BDC, 0xDAB8, 0x8BDF, 0xDAB9, 0x8BE0, 0xDABA, 0x8BE4, 0xDABB, 0x8BE8, 0xDABC, 0x8BE9, + 0xDABD, 0x8BEE, 0xDABE, 0x8BF0, 0xDABF, 0x8BF3, 0xDAC0, 0x8BF6, 0xDAC1, 0x8BF9, 0xDAC2, 0x8BFC, 0xDAC3, 0x8BFF, 0xDAC4, 0x8C00, + 0xDAC5, 0x8C02, 0xDAC6, 0x8C04, 0xDAC7, 0x8C07, 0xDAC8, 0x8C0C, 0xDAC9, 0x8C0F, 0xDACA, 0x8C11, 0xDACB, 0x8C12, 0xDACC, 0x8C14, + 0xDACD, 0x8C15, 0xDACE, 0x8C16, 0xDACF, 0x8C19, 0xDAD0, 0x8C1B, 0xDAD1, 0x8C18, 0xDAD2, 0x8C1D, 0xDAD3, 0x8C1F, 0xDAD4, 0x8C20, + 0xDAD5, 0x8C21, 0xDAD6, 0x8C25, 0xDAD7, 0x8C27, 0xDAD8, 0x8C2A, 0xDAD9, 0x8C2B, 0xDADA, 0x8C2E, 0xDADB, 0x8C2F, 0xDADC, 0x8C32, + 0xDADD, 0x8C33, 0xDADE, 0x8C35, 0xDADF, 0x8C36, 0xDAE0, 0x5369, 0xDAE1, 0x537A, 0xDAE2, 0x961D, 0xDAE3, 0x9622, 0xDAE4, 0x9621, + 0xDAE5, 0x9631, 0xDAE6, 0x962A, 0xDAE7, 0x963D, 0xDAE8, 0x963C, 0xDAE9, 0x9642, 0xDAEA, 0x9649, 0xDAEB, 0x9654, 0xDAEC, 0x965F, + 0xDAED, 0x9667, 0xDAEE, 0x966C, 0xDAEF, 0x9672, 0xDAF0, 0x9674, 0xDAF1, 0x9688, 0xDAF2, 0x968D, 0xDAF3, 0x9697, 0xDAF4, 0x96B0, + 0xDAF5, 0x9097, 0xDAF6, 0x909B, 0xDAF7, 0x909D, 0xDAF8, 0x9099, 0xDAF9, 0x90AC, 0xDAFA, 0x90A1, 0xDAFB, 0x90B4, 0xDAFC, 0x90B3, + 0xDAFD, 0x90B6, 0xDAFE, 0x90BA, 0xDB40, 0x8DD5, 0xDB41, 0x8DD8, 0xDB42, 0x8DD9, 0xDB43, 0x8DDC, 0xDB44, 0x8DE0, 0xDB45, 0x8DE1, + 0xDB46, 0x8DE2, 0xDB47, 0x8DE5, 0xDB48, 0x8DE6, 0xDB49, 0x8DE7, 0xDB4A, 0x8DE9, 0xDB4B, 0x8DED, 0xDB4C, 0x8DEE, 0xDB4D, 0x8DF0, + 0xDB4E, 0x8DF1, 0xDB4F, 0x8DF2, 0xDB50, 0x8DF4, 0xDB51, 0x8DF6, 0xDB52, 0x8DFC, 0xDB53, 0x8DFE, 0xDB54, 0x8DFF, 0xDB55, 0x8E00, + 0xDB56, 0x8E01, 0xDB57, 0x8E02, 0xDB58, 0x8E03, 0xDB59, 0x8E04, 0xDB5A, 0x8E06, 0xDB5B, 0x8E07, 0xDB5C, 0x8E08, 0xDB5D, 0x8E0B, + 0xDB5E, 0x8E0D, 0xDB5F, 0x8E0E, 0xDB60, 0x8E10, 0xDB61, 0x8E11, 0xDB62, 0x8E12, 0xDB63, 0x8E13, 0xDB64, 0x8E15, 0xDB65, 0x8E16, + 0xDB66, 0x8E17, 0xDB67, 0x8E18, 0xDB68, 0x8E19, 0xDB69, 0x8E1A, 0xDB6A, 0x8E1B, 0xDB6B, 0x8E1C, 0xDB6C, 0x8E20, 0xDB6D, 0x8E21, + 0xDB6E, 0x8E24, 0xDB6F, 0x8E25, 0xDB70, 0x8E26, 0xDB71, 0x8E27, 0xDB72, 0x8E28, 0xDB73, 0x8E2B, 0xDB74, 0x8E2D, 0xDB75, 0x8E30, + 0xDB76, 0x8E32, 0xDB77, 0x8E33, 0xDB78, 0x8E34, 0xDB79, 0x8E36, 0xDB7A, 0x8E37, 0xDB7B, 0x8E38, 0xDB7C, 0x8E3B, 0xDB7D, 0x8E3C, + 0xDB7E, 0x8E3E, 0xDB80, 0x8E3F, 0xDB81, 0x8E43, 0xDB82, 0x8E45, 0xDB83, 0x8E46, 0xDB84, 0x8E4C, 0xDB85, 0x8E4D, 0xDB86, 0x8E4E, + 0xDB87, 0x8E4F, 0xDB88, 0x8E50, 0xDB89, 0x8E53, 0xDB8A, 0x8E54, 0xDB8B, 0x8E55, 0xDB8C, 0x8E56, 0xDB8D, 0x8E57, 0xDB8E, 0x8E58, + 0xDB8F, 0x8E5A, 0xDB90, 0x8E5B, 0xDB91, 0x8E5C, 0xDB92, 0x8E5D, 0xDB93, 0x8E5E, 0xDB94, 0x8E5F, 0xDB95, 0x8E60, 0xDB96, 0x8E61, + 0xDB97, 0x8E62, 0xDB98, 0x8E63, 0xDB99, 0x8E64, 0xDB9A, 0x8E65, 0xDB9B, 0x8E67, 0xDB9C, 0x8E68, 0xDB9D, 0x8E6A, 0xDB9E, 0x8E6B, + 0xDB9F, 0x8E6E, 0xDBA0, 0x8E71, 0xDBA1, 0x90B8, 0xDBA2, 0x90B0, 0xDBA3, 0x90CF, 0xDBA4, 0x90C5, 0xDBA5, 0x90BE, 0xDBA6, 0x90D0, + 0xDBA7, 0x90C4, 0xDBA8, 0x90C7, 0xDBA9, 0x90D3, 0xDBAA, 0x90E6, 0xDBAB, 0x90E2, 0xDBAC, 0x90DC, 0xDBAD, 0x90D7, 0xDBAE, 0x90DB, + 0xDBAF, 0x90EB, 0xDBB0, 0x90EF, 0xDBB1, 0x90FE, 0xDBB2, 0x9104, 0xDBB3, 0x9122, 0xDBB4, 0x911E, 0xDBB5, 0x9123, 0xDBB6, 0x9131, + 0xDBB7, 0x912F, 0xDBB8, 0x9139, 0xDBB9, 0x9143, 0xDBBA, 0x9146, 0xDBBB, 0x520D, 0xDBBC, 0x5942, 0xDBBD, 0x52A2, 0xDBBE, 0x52AC, + 0xDBBF, 0x52AD, 0xDBC0, 0x52BE, 0xDBC1, 0x54FF, 0xDBC2, 0x52D0, 0xDBC3, 0x52D6, 0xDBC4, 0x52F0, 0xDBC5, 0x53DF, 0xDBC6, 0x71EE, + 0xDBC7, 0x77CD, 0xDBC8, 0x5EF4, 0xDBC9, 0x51F5, 0xDBCA, 0x51FC, 0xDBCB, 0x9B2F, 0xDBCC, 0x53B6, 0xDBCD, 0x5F01, 0xDBCE, 0x755A, + 0xDBCF, 0x5DEF, 0xDBD0, 0x574C, 0xDBD1, 0x57A9, 0xDBD2, 0x57A1, 0xDBD3, 0x587E, 0xDBD4, 0x58BC, 0xDBD5, 0x58C5, 0xDBD6, 0x58D1, + 0xDBD7, 0x5729, 0xDBD8, 0x572C, 0xDBD9, 0x572A, 0xDBDA, 0x5733, 0xDBDB, 0x5739, 0xDBDC, 0x572E, 0xDBDD, 0x572F, 0xDBDE, 0x575C, + 0xDBDF, 0x573B, 0xDBE0, 0x5742, 0xDBE1, 0x5769, 0xDBE2, 0x5785, 0xDBE3, 0x576B, 0xDBE4, 0x5786, 0xDBE5, 0x577C, 0xDBE6, 0x577B, + 0xDBE7, 0x5768, 0xDBE8, 0x576D, 0xDBE9, 0x5776, 0xDBEA, 0x5773, 0xDBEB, 0x57AD, 0xDBEC, 0x57A4, 0xDBED, 0x578C, 0xDBEE, 0x57B2, + 0xDBEF, 0x57CF, 0xDBF0, 0x57A7, 0xDBF1, 0x57B4, 0xDBF2, 0x5793, 0xDBF3, 0x57A0, 0xDBF4, 0x57D5, 0xDBF5, 0x57D8, 0xDBF6, 0x57DA, + 0xDBF7, 0x57D9, 0xDBF8, 0x57D2, 0xDBF9, 0x57B8, 0xDBFA, 0x57F4, 0xDBFB, 0x57EF, 0xDBFC, 0x57F8, 0xDBFD, 0x57E4, 0xDBFE, 0x57DD, + 0xDC40, 0x8E73, 0xDC41, 0x8E75, 0xDC42, 0x8E77, 0xDC43, 0x8E78, 0xDC44, 0x8E79, 0xDC45, 0x8E7A, 0xDC46, 0x8E7B, 0xDC47, 0x8E7D, + 0xDC48, 0x8E7E, 0xDC49, 0x8E80, 0xDC4A, 0x8E82, 0xDC4B, 0x8E83, 0xDC4C, 0x8E84, 0xDC4D, 0x8E86, 0xDC4E, 0x8E88, 0xDC4F, 0x8E89, + 0xDC50, 0x8E8A, 0xDC51, 0x8E8B, 0xDC52, 0x8E8C, 0xDC53, 0x8E8D, 0xDC54, 0x8E8E, 0xDC55, 0x8E91, 0xDC56, 0x8E92, 0xDC57, 0x8E93, + 0xDC58, 0x8E95, 0xDC59, 0x8E96, 0xDC5A, 0x8E97, 0xDC5B, 0x8E98, 0xDC5C, 0x8E99, 0xDC5D, 0x8E9A, 0xDC5E, 0x8E9B, 0xDC5F, 0x8E9D, + 0xDC60, 0x8E9F, 0xDC61, 0x8EA0, 0xDC62, 0x8EA1, 0xDC63, 0x8EA2, 0xDC64, 0x8EA3, 0xDC65, 0x8EA4, 0xDC66, 0x8EA5, 0xDC67, 0x8EA6, + 0xDC68, 0x8EA7, 0xDC69, 0x8EA8, 0xDC6A, 0x8EA9, 0xDC6B, 0x8EAA, 0xDC6C, 0x8EAD, 0xDC6D, 0x8EAE, 0xDC6E, 0x8EB0, 0xDC6F, 0x8EB1, + 0xDC70, 0x8EB3, 0xDC71, 0x8EB4, 0xDC72, 0x8EB5, 0xDC73, 0x8EB6, 0xDC74, 0x8EB7, 0xDC75, 0x8EB8, 0xDC76, 0x8EB9, 0xDC77, 0x8EBB, + 0xDC78, 0x8EBC, 0xDC79, 0x8EBD, 0xDC7A, 0x8EBE, 0xDC7B, 0x8EBF, 0xDC7C, 0x8EC0, 0xDC7D, 0x8EC1, 0xDC7E, 0x8EC2, 0xDC80, 0x8EC3, + 0xDC81, 0x8EC4, 0xDC82, 0x8EC5, 0xDC83, 0x8EC6, 0xDC84, 0x8EC7, 0xDC85, 0x8EC8, 0xDC86, 0x8EC9, 0xDC87, 0x8ECA, 0xDC88, 0x8ECB, + 0xDC89, 0x8ECC, 0xDC8A, 0x8ECD, 0xDC8B, 0x8ECF, 0xDC8C, 0x8ED0, 0xDC8D, 0x8ED1, 0xDC8E, 0x8ED2, 0xDC8F, 0x8ED3, 0xDC90, 0x8ED4, + 0xDC91, 0x8ED5, 0xDC92, 0x8ED6, 0xDC93, 0x8ED7, 0xDC94, 0x8ED8, 0xDC95, 0x8ED9, 0xDC96, 0x8EDA, 0xDC97, 0x8EDB, 0xDC98, 0x8EDC, + 0xDC99, 0x8EDD, 0xDC9A, 0x8EDE, 0xDC9B, 0x8EDF, 0xDC9C, 0x8EE0, 0xDC9D, 0x8EE1, 0xDC9E, 0x8EE2, 0xDC9F, 0x8EE3, 0xDCA0, 0x8EE4, + 0xDCA1, 0x580B, 0xDCA2, 0x580D, 0xDCA3, 0x57FD, 0xDCA4, 0x57ED, 0xDCA5, 0x5800, 0xDCA6, 0x581E, 0xDCA7, 0x5819, 0xDCA8, 0x5844, + 0xDCA9, 0x5820, 0xDCAA, 0x5865, 0xDCAB, 0x586C, 0xDCAC, 0x5881, 0xDCAD, 0x5889, 0xDCAE, 0x589A, 0xDCAF, 0x5880, 0xDCB0, 0x99A8, + 0xDCB1, 0x9F19, 0xDCB2, 0x61FF, 0xDCB3, 0x8279, 0xDCB4, 0x827D, 0xDCB5, 0x827F, 0xDCB6, 0x828F, 0xDCB7, 0x828A, 0xDCB8, 0x82A8, + 0xDCB9, 0x8284, 0xDCBA, 0x828E, 0xDCBB, 0x8291, 0xDCBC, 0x8297, 0xDCBD, 0x8299, 0xDCBE, 0x82AB, 0xDCBF, 0x82B8, 0xDCC0, 0x82BE, + 0xDCC1, 0x82B0, 0xDCC2, 0x82C8, 0xDCC3, 0x82CA, 0xDCC4, 0x82E3, 0xDCC5, 0x8298, 0xDCC6, 0x82B7, 0xDCC7, 0x82AE, 0xDCC8, 0x82CB, + 0xDCC9, 0x82CC, 0xDCCA, 0x82C1, 0xDCCB, 0x82A9, 0xDCCC, 0x82B4, 0xDCCD, 0x82A1, 0xDCCE, 0x82AA, 0xDCCF, 0x829F, 0xDCD0, 0x82C4, + 0xDCD1, 0x82CE, 0xDCD2, 0x82A4, 0xDCD3, 0x82E1, 0xDCD4, 0x8309, 0xDCD5, 0x82F7, 0xDCD6, 0x82E4, 0xDCD7, 0x830F, 0xDCD8, 0x8307, + 0xDCD9, 0x82DC, 0xDCDA, 0x82F4, 0xDCDB, 0x82D2, 0xDCDC, 0x82D8, 0xDCDD, 0x830C, 0xDCDE, 0x82FB, 0xDCDF, 0x82D3, 0xDCE0, 0x8311, + 0xDCE1, 0x831A, 0xDCE2, 0x8306, 0xDCE3, 0x8314, 0xDCE4, 0x8315, 0xDCE5, 0x82E0, 0xDCE6, 0x82D5, 0xDCE7, 0x831C, 0xDCE8, 0x8351, + 0xDCE9, 0x835B, 0xDCEA, 0x835C, 0xDCEB, 0x8308, 0xDCEC, 0x8392, 0xDCED, 0x833C, 0xDCEE, 0x8334, 0xDCEF, 0x8331, 0xDCF0, 0x839B, + 0xDCF1, 0x835E, 0xDCF2, 0x832F, 0xDCF3, 0x834F, 0xDCF4, 0x8347, 0xDCF5, 0x8343, 0xDCF6, 0x835F, 0xDCF7, 0x8340, 0xDCF8, 0x8317, + 0xDCF9, 0x8360, 0xDCFA, 0x832D, 0xDCFB, 0x833A, 0xDCFC, 0x8333, 0xDCFD, 0x8366, 0xDCFE, 0x8365, 0xDD40, 0x8EE5, 0xDD41, 0x8EE6, + 0xDD42, 0x8EE7, 0xDD43, 0x8EE8, 0xDD44, 0x8EE9, 0xDD45, 0x8EEA, 0xDD46, 0x8EEB, 0xDD47, 0x8EEC, 0xDD48, 0x8EED, 0xDD49, 0x8EEE, + 0xDD4A, 0x8EEF, 0xDD4B, 0x8EF0, 0xDD4C, 0x8EF1, 0xDD4D, 0x8EF2, 0xDD4E, 0x8EF3, 0xDD4F, 0x8EF4, 0xDD50, 0x8EF5, 0xDD51, 0x8EF6, + 0xDD52, 0x8EF7, 0xDD53, 0x8EF8, 0xDD54, 0x8EF9, 0xDD55, 0x8EFA, 0xDD56, 0x8EFB, 0xDD57, 0x8EFC, 0xDD58, 0x8EFD, 0xDD59, 0x8EFE, + 0xDD5A, 0x8EFF, 0xDD5B, 0x8F00, 0xDD5C, 0x8F01, 0xDD5D, 0x8F02, 0xDD5E, 0x8F03, 0xDD5F, 0x8F04, 0xDD60, 0x8F05, 0xDD61, 0x8F06, + 0xDD62, 0x8F07, 0xDD63, 0x8F08, 0xDD64, 0x8F09, 0xDD65, 0x8F0A, 0xDD66, 0x8F0B, 0xDD67, 0x8F0C, 0xDD68, 0x8F0D, 0xDD69, 0x8F0E, + 0xDD6A, 0x8F0F, 0xDD6B, 0x8F10, 0xDD6C, 0x8F11, 0xDD6D, 0x8F12, 0xDD6E, 0x8F13, 0xDD6F, 0x8F14, 0xDD70, 0x8F15, 0xDD71, 0x8F16, + 0xDD72, 0x8F17, 0xDD73, 0x8F18, 0xDD74, 0x8F19, 0xDD75, 0x8F1A, 0xDD76, 0x8F1B, 0xDD77, 0x8F1C, 0xDD78, 0x8F1D, 0xDD79, 0x8F1E, + 0xDD7A, 0x8F1F, 0xDD7B, 0x8F20, 0xDD7C, 0x8F21, 0xDD7D, 0x8F22, 0xDD7E, 0x8F23, 0xDD80, 0x8F24, 0xDD81, 0x8F25, 0xDD82, 0x8F26, + 0xDD83, 0x8F27, 0xDD84, 0x8F28, 0xDD85, 0x8F29, 0xDD86, 0x8F2A, 0xDD87, 0x8F2B, 0xDD88, 0x8F2C, 0xDD89, 0x8F2D, 0xDD8A, 0x8F2E, + 0xDD8B, 0x8F2F, 0xDD8C, 0x8F30, 0xDD8D, 0x8F31, 0xDD8E, 0x8F32, 0xDD8F, 0x8F33, 0xDD90, 0x8F34, 0xDD91, 0x8F35, 0xDD92, 0x8F36, + 0xDD93, 0x8F37, 0xDD94, 0x8F38, 0xDD95, 0x8F39, 0xDD96, 0x8F3A, 0xDD97, 0x8F3B, 0xDD98, 0x8F3C, 0xDD99, 0x8F3D, 0xDD9A, 0x8F3E, + 0xDD9B, 0x8F3F, 0xDD9C, 0x8F40, 0xDD9D, 0x8F41, 0xDD9E, 0x8F42, 0xDD9F, 0x8F43, 0xDDA0, 0x8F44, 0xDDA1, 0x8368, 0xDDA2, 0x831B, + 0xDDA3, 0x8369, 0xDDA4, 0x836C, 0xDDA5, 0x836A, 0xDDA6, 0x836D, 0xDDA7, 0x836E, 0xDDA8, 0x83B0, 0xDDA9, 0x8378, 0xDDAA, 0x83B3, + 0xDDAB, 0x83B4, 0xDDAC, 0x83A0, 0xDDAD, 0x83AA, 0xDDAE, 0x8393, 0xDDAF, 0x839C, 0xDDB0, 0x8385, 0xDDB1, 0x837C, 0xDDB2, 0x83B6, + 0xDDB3, 0x83A9, 0xDDB4, 0x837D, 0xDDB5, 0x83B8, 0xDDB6, 0x837B, 0xDDB7, 0x8398, 0xDDB8, 0x839E, 0xDDB9, 0x83A8, 0xDDBA, 0x83BA, + 0xDDBB, 0x83BC, 0xDDBC, 0x83C1, 0xDDBD, 0x8401, 0xDDBE, 0x83E5, 0xDDBF, 0x83D8, 0xDDC0, 0x5807, 0xDDC1, 0x8418, 0xDDC2, 0x840B, + 0xDDC3, 0x83DD, 0xDDC4, 0x83FD, 0xDDC5, 0x83D6, 0xDDC6, 0x841C, 0xDDC7, 0x8438, 0xDDC8, 0x8411, 0xDDC9, 0x8406, 0xDDCA, 0x83D4, + 0xDDCB, 0x83DF, 0xDDCC, 0x840F, 0xDDCD, 0x8403, 0xDDCE, 0x83F8, 0xDDCF, 0x83F9, 0xDDD0, 0x83EA, 0xDDD1, 0x83C5, 0xDDD2, 0x83C0, + 0xDDD3, 0x8426, 0xDDD4, 0x83F0, 0xDDD5, 0x83E1, 0xDDD6, 0x845C, 0xDDD7, 0x8451, 0xDDD8, 0x845A, 0xDDD9, 0x8459, 0xDDDA, 0x8473, + 0xDDDB, 0x8487, 0xDDDC, 0x8488, 0xDDDD, 0x847A, 0xDDDE, 0x8489, 0xDDDF, 0x8478, 0xDDE0, 0x843C, 0xDDE1, 0x8446, 0xDDE2, 0x8469, + 0xDDE3, 0x8476, 0xDDE4, 0x848C, 0xDDE5, 0x848E, 0xDDE6, 0x8431, 0xDDE7, 0x846D, 0xDDE8, 0x84C1, 0xDDE9, 0x84CD, 0xDDEA, 0x84D0, + 0xDDEB, 0x84E6, 0xDDEC, 0x84BD, 0xDDED, 0x84D3, 0xDDEE, 0x84CA, 0xDDEF, 0x84BF, 0xDDF0, 0x84BA, 0xDDF1, 0x84E0, 0xDDF2, 0x84A1, + 0xDDF3, 0x84B9, 0xDDF4, 0x84B4, 0xDDF5, 0x8497, 0xDDF6, 0x84E5, 0xDDF7, 0x84E3, 0xDDF8, 0x850C, 0xDDF9, 0x750D, 0xDDFA, 0x8538, + 0xDDFB, 0x84F0, 0xDDFC, 0x8539, 0xDDFD, 0x851F, 0xDDFE, 0x853A, 0xDE40, 0x8F45, 0xDE41, 0x8F46, 0xDE42, 0x8F47, 0xDE43, 0x8F48, + 0xDE44, 0x8F49, 0xDE45, 0x8F4A, 0xDE46, 0x8F4B, 0xDE47, 0x8F4C, 0xDE48, 0x8F4D, 0xDE49, 0x8F4E, 0xDE4A, 0x8F4F, 0xDE4B, 0x8F50, + 0xDE4C, 0x8F51, 0xDE4D, 0x8F52, 0xDE4E, 0x8F53, 0xDE4F, 0x8F54, 0xDE50, 0x8F55, 0xDE51, 0x8F56, 0xDE52, 0x8F57, 0xDE53, 0x8F58, + 0xDE54, 0x8F59, 0xDE55, 0x8F5A, 0xDE56, 0x8F5B, 0xDE57, 0x8F5C, 0xDE58, 0x8F5D, 0xDE59, 0x8F5E, 0xDE5A, 0x8F5F, 0xDE5B, 0x8F60, + 0xDE5C, 0x8F61, 0xDE5D, 0x8F62, 0xDE5E, 0x8F63, 0xDE5F, 0x8F64, 0xDE60, 0x8F65, 0xDE61, 0x8F6A, 0xDE62, 0x8F80, 0xDE63, 0x8F8C, + 0xDE64, 0x8F92, 0xDE65, 0x8F9D, 0xDE66, 0x8FA0, 0xDE67, 0x8FA1, 0xDE68, 0x8FA2, 0xDE69, 0x8FA4, 0xDE6A, 0x8FA5, 0xDE6B, 0x8FA6, + 0xDE6C, 0x8FA7, 0xDE6D, 0x8FAA, 0xDE6E, 0x8FAC, 0xDE6F, 0x8FAD, 0xDE70, 0x8FAE, 0xDE71, 0x8FAF, 0xDE72, 0x8FB2, 0xDE73, 0x8FB3, + 0xDE74, 0x8FB4, 0xDE75, 0x8FB5, 0xDE76, 0x8FB7, 0xDE77, 0x8FB8, 0xDE78, 0x8FBA, 0xDE79, 0x8FBB, 0xDE7A, 0x8FBC, 0xDE7B, 0x8FBF, + 0xDE7C, 0x8FC0, 0xDE7D, 0x8FC3, 0xDE7E, 0x8FC6, 0xDE80, 0x8FC9, 0xDE81, 0x8FCA, 0xDE82, 0x8FCB, 0xDE83, 0x8FCC, 0xDE84, 0x8FCD, + 0xDE85, 0x8FCF, 0xDE86, 0x8FD2, 0xDE87, 0x8FD6, 0xDE88, 0x8FD7, 0xDE89, 0x8FDA, 0xDE8A, 0x8FE0, 0xDE8B, 0x8FE1, 0xDE8C, 0x8FE3, + 0xDE8D, 0x8FE7, 0xDE8E, 0x8FEC, 0xDE8F, 0x8FEF, 0xDE90, 0x8FF1, 0xDE91, 0x8FF2, 0xDE92, 0x8FF4, 0xDE93, 0x8FF5, 0xDE94, 0x8FF6, + 0xDE95, 0x8FFA, 0xDE96, 0x8FFB, 0xDE97, 0x8FFC, 0xDE98, 0x8FFE, 0xDE99, 0x8FFF, 0xDE9A, 0x9007, 0xDE9B, 0x9008, 0xDE9C, 0x900C, + 0xDE9D, 0x900E, 0xDE9E, 0x9013, 0xDE9F, 0x9015, 0xDEA0, 0x9018, 0xDEA1, 0x8556, 0xDEA2, 0x853B, 0xDEA3, 0x84FF, 0xDEA4, 0x84FC, + 0xDEA5, 0x8559, 0xDEA6, 0x8548, 0xDEA7, 0x8568, 0xDEA8, 0x8564, 0xDEA9, 0x855E, 0xDEAA, 0x857A, 0xDEAB, 0x77A2, 0xDEAC, 0x8543, + 0xDEAD, 0x8572, 0xDEAE, 0x857B, 0xDEAF, 0x85A4, 0xDEB0, 0x85A8, 0xDEB1, 0x8587, 0xDEB2, 0x858F, 0xDEB3, 0x8579, 0xDEB4, 0x85AE, + 0xDEB5, 0x859C, 0xDEB6, 0x8585, 0xDEB7, 0x85B9, 0xDEB8, 0x85B7, 0xDEB9, 0x85B0, 0xDEBA, 0x85D3, 0xDEBB, 0x85C1, 0xDEBC, 0x85DC, + 0xDEBD, 0x85FF, 0xDEBE, 0x8627, 0xDEBF, 0x8605, 0xDEC0, 0x8629, 0xDEC1, 0x8616, 0xDEC2, 0x863C, 0xDEC3, 0x5EFE, 0xDEC4, 0x5F08, + 0xDEC5, 0x593C, 0xDEC6, 0x5941, 0xDEC7, 0x8037, 0xDEC8, 0x5955, 0xDEC9, 0x595A, 0xDECA, 0x5958, 0xDECB, 0x530F, 0xDECC, 0x5C22, + 0xDECD, 0x5C25, 0xDECE, 0x5C2C, 0xDECF, 0x5C34, 0xDED0, 0x624C, 0xDED1, 0x626A, 0xDED2, 0x629F, 0xDED3, 0x62BB, 0xDED4, 0x62CA, + 0xDED5, 0x62DA, 0xDED6, 0x62D7, 0xDED7, 0x62EE, 0xDED8, 0x6322, 0xDED9, 0x62F6, 0xDEDA, 0x6339, 0xDEDB, 0x634B, 0xDEDC, 0x6343, + 0xDEDD, 0x63AD, 0xDEDE, 0x63F6, 0xDEDF, 0x6371, 0xDEE0, 0x637A, 0xDEE1, 0x638E, 0xDEE2, 0x63B4, 0xDEE3, 0x636D, 0xDEE4, 0x63AC, + 0xDEE5, 0x638A, 0xDEE6, 0x6369, 0xDEE7, 0x63AE, 0xDEE8, 0x63BC, 0xDEE9, 0x63F2, 0xDEEA, 0x63F8, 0xDEEB, 0x63E0, 0xDEEC, 0x63FF, + 0xDEED, 0x63C4, 0xDEEE, 0x63DE, 0xDEEF, 0x63CE, 0xDEF0, 0x6452, 0xDEF1, 0x63C6, 0xDEF2, 0x63BE, 0xDEF3, 0x6445, 0xDEF4, 0x6441, + 0xDEF5, 0x640B, 0xDEF6, 0x641B, 0xDEF7, 0x6420, 0xDEF8, 0x640C, 0xDEF9, 0x6426, 0xDEFA, 0x6421, 0xDEFB, 0x645E, 0xDEFC, 0x6484, + 0xDEFD, 0x646D, 0xDEFE, 0x6496, 0xDF40, 0x9019, 0xDF41, 0x901C, 0xDF42, 0x9023, 0xDF43, 0x9024, 0xDF44, 0x9025, 0xDF45, 0x9027, + 0xDF46, 0x9028, 0xDF47, 0x9029, 0xDF48, 0x902A, 0xDF49, 0x902B, 0xDF4A, 0x902C, 0xDF4B, 0x9030, 0xDF4C, 0x9031, 0xDF4D, 0x9032, + 0xDF4E, 0x9033, 0xDF4F, 0x9034, 0xDF50, 0x9037, 0xDF51, 0x9039, 0xDF52, 0x903A, 0xDF53, 0x903D, 0xDF54, 0x903F, 0xDF55, 0x9040, + 0xDF56, 0x9043, 0xDF57, 0x9045, 0xDF58, 0x9046, 0xDF59, 0x9048, 0xDF5A, 0x9049, 0xDF5B, 0x904A, 0xDF5C, 0x904B, 0xDF5D, 0x904C, + 0xDF5E, 0x904E, 0xDF5F, 0x9054, 0xDF60, 0x9055, 0xDF61, 0x9056, 0xDF62, 0x9059, 0xDF63, 0x905A, 0xDF64, 0x905C, 0xDF65, 0x905D, + 0xDF66, 0x905E, 0xDF67, 0x905F, 0xDF68, 0x9060, 0xDF69, 0x9061, 0xDF6A, 0x9064, 0xDF6B, 0x9066, 0xDF6C, 0x9067, 0xDF6D, 0x9069, + 0xDF6E, 0x906A, 0xDF6F, 0x906B, 0xDF70, 0x906C, 0xDF71, 0x906F, 0xDF72, 0x9070, 0xDF73, 0x9071, 0xDF74, 0x9072, 0xDF75, 0x9073, + 0xDF76, 0x9076, 0xDF77, 0x9077, 0xDF78, 0x9078, 0xDF79, 0x9079, 0xDF7A, 0x907A, 0xDF7B, 0x907B, 0xDF7C, 0x907C, 0xDF7D, 0x907E, + 0xDF7E, 0x9081, 0xDF80, 0x9084, 0xDF81, 0x9085, 0xDF82, 0x9086, 0xDF83, 0x9087, 0xDF84, 0x9089, 0xDF85, 0x908A, 0xDF86, 0x908C, + 0xDF87, 0x908D, 0xDF88, 0x908E, 0xDF89, 0x908F, 0xDF8A, 0x9090, 0xDF8B, 0x9092, 0xDF8C, 0x9094, 0xDF8D, 0x9096, 0xDF8E, 0x9098, + 0xDF8F, 0x909A, 0xDF90, 0x909C, 0xDF91, 0x909E, 0xDF92, 0x909F, 0xDF93, 0x90A0, 0xDF94, 0x90A4, 0xDF95, 0x90A5, 0xDF96, 0x90A7, + 0xDF97, 0x90A8, 0xDF98, 0x90A9, 0xDF99, 0x90AB, 0xDF9A, 0x90AD, 0xDF9B, 0x90B2, 0xDF9C, 0x90B7, 0xDF9D, 0x90BC, 0xDF9E, 0x90BD, + 0xDF9F, 0x90BF, 0xDFA0, 0x90C0, 0xDFA1, 0x647A, 0xDFA2, 0x64B7, 0xDFA3, 0x64B8, 0xDFA4, 0x6499, 0xDFA5, 0x64BA, 0xDFA6, 0x64C0, + 0xDFA7, 0x64D0, 0xDFA8, 0x64D7, 0xDFA9, 0x64E4, 0xDFAA, 0x64E2, 0xDFAB, 0x6509, 0xDFAC, 0x6525, 0xDFAD, 0x652E, 0xDFAE, 0x5F0B, + 0xDFAF, 0x5FD2, 0xDFB0, 0x7519, 0xDFB1, 0x5F11, 0xDFB2, 0x535F, 0xDFB3, 0x53F1, 0xDFB4, 0x53FD, 0xDFB5, 0x53E9, 0xDFB6, 0x53E8, + 0xDFB7, 0x53FB, 0xDFB8, 0x5412, 0xDFB9, 0x5416, 0xDFBA, 0x5406, 0xDFBB, 0x544B, 0xDFBC, 0x5452, 0xDFBD, 0x5453, 0xDFBE, 0x5454, + 0xDFBF, 0x5456, 0xDFC0, 0x5443, 0xDFC1, 0x5421, 0xDFC2, 0x5457, 0xDFC3, 0x5459, 0xDFC4, 0x5423, 0xDFC5, 0x5432, 0xDFC6, 0x5482, + 0xDFC7, 0x5494, 0xDFC8, 0x5477, 0xDFC9, 0x5471, 0xDFCA, 0x5464, 0xDFCB, 0x549A, 0xDFCC, 0x549B, 0xDFCD, 0x5484, 0xDFCE, 0x5476, + 0xDFCF, 0x5466, 0xDFD0, 0x549D, 0xDFD1, 0x54D0, 0xDFD2, 0x54AD, 0xDFD3, 0x54C2, 0xDFD4, 0x54B4, 0xDFD5, 0x54D2, 0xDFD6, 0x54A7, + 0xDFD7, 0x54A6, 0xDFD8, 0x54D3, 0xDFD9, 0x54D4, 0xDFDA, 0x5472, 0xDFDB, 0x54A3, 0xDFDC, 0x54D5, 0xDFDD, 0x54BB, 0xDFDE, 0x54BF, + 0xDFDF, 0x54CC, 0xDFE0, 0x54D9, 0xDFE1, 0x54DA, 0xDFE2, 0x54DC, 0xDFE3, 0x54A9, 0xDFE4, 0x54AA, 0xDFE5, 0x54A4, 0xDFE6, 0x54DD, + 0xDFE7, 0x54CF, 0xDFE8, 0x54DE, 0xDFE9, 0x551B, 0xDFEA, 0x54E7, 0xDFEB, 0x5520, 0xDFEC, 0x54FD, 0xDFED, 0x5514, 0xDFEE, 0x54F3, + 0xDFEF, 0x5522, 0xDFF0, 0x5523, 0xDFF1, 0x550F, 0xDFF2, 0x5511, 0xDFF3, 0x5527, 0xDFF4, 0x552A, 0xDFF5, 0x5567, 0xDFF6, 0x558F, + 0xDFF7, 0x55B5, 0xDFF8, 0x5549, 0xDFF9, 0x556D, 0xDFFA, 0x5541, 0xDFFB, 0x5555, 0xDFFC, 0x553F, 0xDFFD, 0x5550, 0xDFFE, 0x553C, + 0xE040, 0x90C2, 0xE041, 0x90C3, 0xE042, 0x90C6, 0xE043, 0x90C8, 0xE044, 0x90C9, 0xE045, 0x90CB, 0xE046, 0x90CC, 0xE047, 0x90CD, + 0xE048, 0x90D2, 0xE049, 0x90D4, 0xE04A, 0x90D5, 0xE04B, 0x90D6, 0xE04C, 0x90D8, 0xE04D, 0x90D9, 0xE04E, 0x90DA, 0xE04F, 0x90DE, + 0xE050, 0x90DF, 0xE051, 0x90E0, 0xE052, 0x90E3, 0xE053, 0x90E4, 0xE054, 0x90E5, 0xE055, 0x90E9, 0xE056, 0x90EA, 0xE057, 0x90EC, + 0xE058, 0x90EE, 0xE059, 0x90F0, 0xE05A, 0x90F1, 0xE05B, 0x90F2, 0xE05C, 0x90F3, 0xE05D, 0x90F5, 0xE05E, 0x90F6, 0xE05F, 0x90F7, + 0xE060, 0x90F9, 0xE061, 0x90FA, 0xE062, 0x90FB, 0xE063, 0x90FC, 0xE064, 0x90FF, 0xE065, 0x9100, 0xE066, 0x9101, 0xE067, 0x9103, + 0xE068, 0x9105, 0xE069, 0x9106, 0xE06A, 0x9107, 0xE06B, 0x9108, 0xE06C, 0x9109, 0xE06D, 0x910A, 0xE06E, 0x910B, 0xE06F, 0x910C, + 0xE070, 0x910D, 0xE071, 0x910E, 0xE072, 0x910F, 0xE073, 0x9110, 0xE074, 0x9111, 0xE075, 0x9112, 0xE076, 0x9113, 0xE077, 0x9114, + 0xE078, 0x9115, 0xE079, 0x9116, 0xE07A, 0x9117, 0xE07B, 0x9118, 0xE07C, 0x911A, 0xE07D, 0x911B, 0xE07E, 0x911C, 0xE080, 0x911D, + 0xE081, 0x911F, 0xE082, 0x9120, 0xE083, 0x9121, 0xE084, 0x9124, 0xE085, 0x9125, 0xE086, 0x9126, 0xE087, 0x9127, 0xE088, 0x9128, + 0xE089, 0x9129, 0xE08A, 0x912A, 0xE08B, 0x912B, 0xE08C, 0x912C, 0xE08D, 0x912D, 0xE08E, 0x912E, 0xE08F, 0x9130, 0xE090, 0x9132, + 0xE091, 0x9133, 0xE092, 0x9134, 0xE093, 0x9135, 0xE094, 0x9136, 0xE095, 0x9137, 0xE096, 0x9138, 0xE097, 0x913A, 0xE098, 0x913B, + 0xE099, 0x913C, 0xE09A, 0x913D, 0xE09B, 0x913E, 0xE09C, 0x913F, 0xE09D, 0x9140, 0xE09E, 0x9141, 0xE09F, 0x9142, 0xE0A0, 0x9144, + 0xE0A1, 0x5537, 0xE0A2, 0x5556, 0xE0A3, 0x5575, 0xE0A4, 0x5576, 0xE0A5, 0x5577, 0xE0A6, 0x5533, 0xE0A7, 0x5530, 0xE0A8, 0x555C, + 0xE0A9, 0x558B, 0xE0AA, 0x55D2, 0xE0AB, 0x5583, 0xE0AC, 0x55B1, 0xE0AD, 0x55B9, 0xE0AE, 0x5588, 0xE0AF, 0x5581, 0xE0B0, 0x559F, + 0xE0B1, 0x557E, 0xE0B2, 0x55D6, 0xE0B3, 0x5591, 0xE0B4, 0x557B, 0xE0B5, 0x55DF, 0xE0B6, 0x55BD, 0xE0B7, 0x55BE, 0xE0B8, 0x5594, + 0xE0B9, 0x5599, 0xE0BA, 0x55EA, 0xE0BB, 0x55F7, 0xE0BC, 0x55C9, 0xE0BD, 0x561F, 0xE0BE, 0x55D1, 0xE0BF, 0x55EB, 0xE0C0, 0x55EC, + 0xE0C1, 0x55D4, 0xE0C2, 0x55E6, 0xE0C3, 0x55DD, 0xE0C4, 0x55C4, 0xE0C5, 0x55EF, 0xE0C6, 0x55E5, 0xE0C7, 0x55F2, 0xE0C8, 0x55F3, + 0xE0C9, 0x55CC, 0xE0CA, 0x55CD, 0xE0CB, 0x55E8, 0xE0CC, 0x55F5, 0xE0CD, 0x55E4, 0xE0CE, 0x8F94, 0xE0CF, 0x561E, 0xE0D0, 0x5608, + 0xE0D1, 0x560C, 0xE0D2, 0x5601, 0xE0D3, 0x5624, 0xE0D4, 0x5623, 0xE0D5, 0x55FE, 0xE0D6, 0x5600, 0xE0D7, 0x5627, 0xE0D8, 0x562D, + 0xE0D9, 0x5658, 0xE0DA, 0x5639, 0xE0DB, 0x5657, 0xE0DC, 0x562C, 0xE0DD, 0x564D, 0xE0DE, 0x5662, 0xE0DF, 0x5659, 0xE0E0, 0x565C, + 0xE0E1, 0x564C, 0xE0E2, 0x5654, 0xE0E3, 0x5686, 0xE0E4, 0x5664, 0xE0E5, 0x5671, 0xE0E6, 0x566B, 0xE0E7, 0x567B, 0xE0E8, 0x567C, + 0xE0E9, 0x5685, 0xE0EA, 0x5693, 0xE0EB, 0x56AF, 0xE0EC, 0x56D4, 0xE0ED, 0x56D7, 0xE0EE, 0x56DD, 0xE0EF, 0x56E1, 0xE0F0, 0x56F5, + 0xE0F1, 0x56EB, 0xE0F2, 0x56F9, 0xE0F3, 0x56FF, 0xE0F4, 0x5704, 0xE0F5, 0x570A, 0xE0F6, 0x5709, 0xE0F7, 0x571C, 0xE0F8, 0x5E0F, + 0xE0F9, 0x5E19, 0xE0FA, 0x5E14, 0xE0FB, 0x5E11, 0xE0FC, 0x5E31, 0xE0FD, 0x5E3B, 0xE0FE, 0x5E3C, 0xE140, 0x9145, 0xE141, 0x9147, + 0xE142, 0x9148, 0xE143, 0x9151, 0xE144, 0x9153, 0xE145, 0x9154, 0xE146, 0x9155, 0xE147, 0x9156, 0xE148, 0x9158, 0xE149, 0x9159, + 0xE14A, 0x915B, 0xE14B, 0x915C, 0xE14C, 0x915F, 0xE14D, 0x9160, 0xE14E, 0x9166, 0xE14F, 0x9167, 0xE150, 0x9168, 0xE151, 0x916B, + 0xE152, 0x916D, 0xE153, 0x9173, 0xE154, 0x917A, 0xE155, 0x917B, 0xE156, 0x917C, 0xE157, 0x9180, 0xE158, 0x9181, 0xE159, 0x9182, + 0xE15A, 0x9183, 0xE15B, 0x9184, 0xE15C, 0x9186, 0xE15D, 0x9188, 0xE15E, 0x918A, 0xE15F, 0x918E, 0xE160, 0x918F, 0xE161, 0x9193, + 0xE162, 0x9194, 0xE163, 0x9195, 0xE164, 0x9196, 0xE165, 0x9197, 0xE166, 0x9198, 0xE167, 0x9199, 0xE168, 0x919C, 0xE169, 0x919D, + 0xE16A, 0x919E, 0xE16B, 0x919F, 0xE16C, 0x91A0, 0xE16D, 0x91A1, 0xE16E, 0x91A4, 0xE16F, 0x91A5, 0xE170, 0x91A6, 0xE171, 0x91A7, + 0xE172, 0x91A8, 0xE173, 0x91A9, 0xE174, 0x91AB, 0xE175, 0x91AC, 0xE176, 0x91B0, 0xE177, 0x91B1, 0xE178, 0x91B2, 0xE179, 0x91B3, + 0xE17A, 0x91B6, 0xE17B, 0x91B7, 0xE17C, 0x91B8, 0xE17D, 0x91B9, 0xE17E, 0x91BB, 0xE180, 0x91BC, 0xE181, 0x91BD, 0xE182, 0x91BE, + 0xE183, 0x91BF, 0xE184, 0x91C0, 0xE185, 0x91C1, 0xE186, 0x91C2, 0xE187, 0x91C3, 0xE188, 0x91C4, 0xE189, 0x91C5, 0xE18A, 0x91C6, + 0xE18B, 0x91C8, 0xE18C, 0x91CB, 0xE18D, 0x91D0, 0xE18E, 0x91D2, 0xE18F, 0x91D3, 0xE190, 0x91D4, 0xE191, 0x91D5, 0xE192, 0x91D6, + 0xE193, 0x91D7, 0xE194, 0x91D8, 0xE195, 0x91D9, 0xE196, 0x91DA, 0xE197, 0x91DB, 0xE198, 0x91DD, 0xE199, 0x91DE, 0xE19A, 0x91DF, + 0xE19B, 0x91E0, 0xE19C, 0x91E1, 0xE19D, 0x91E2, 0xE19E, 0x91E3, 0xE19F, 0x91E4, 0xE1A0, 0x91E5, 0xE1A1, 0x5E37, 0xE1A2, 0x5E44, + 0xE1A3, 0x5E54, 0xE1A4, 0x5E5B, 0xE1A5, 0x5E5E, 0xE1A6, 0x5E61, 0xE1A7, 0x5C8C, 0xE1A8, 0x5C7A, 0xE1A9, 0x5C8D, 0xE1AA, 0x5C90, + 0xE1AB, 0x5C96, 0xE1AC, 0x5C88, 0xE1AD, 0x5C98, 0xE1AE, 0x5C99, 0xE1AF, 0x5C91, 0xE1B0, 0x5C9A, 0xE1B1, 0x5C9C, 0xE1B2, 0x5CB5, + 0xE1B3, 0x5CA2, 0xE1B4, 0x5CBD, 0xE1B5, 0x5CAC, 0xE1B6, 0x5CAB, 0xE1B7, 0x5CB1, 0xE1B8, 0x5CA3, 0xE1B9, 0x5CC1, 0xE1BA, 0x5CB7, + 0xE1BB, 0x5CC4, 0xE1BC, 0x5CD2, 0xE1BD, 0x5CE4, 0xE1BE, 0x5CCB, 0xE1BF, 0x5CE5, 0xE1C0, 0x5D02, 0xE1C1, 0x5D03, 0xE1C2, 0x5D27, + 0xE1C3, 0x5D26, 0xE1C4, 0x5D2E, 0xE1C5, 0x5D24, 0xE1C6, 0x5D1E, 0xE1C7, 0x5D06, 0xE1C8, 0x5D1B, 0xE1C9, 0x5D58, 0xE1CA, 0x5D3E, + 0xE1CB, 0x5D34, 0xE1CC, 0x5D3D, 0xE1CD, 0x5D6C, 0xE1CE, 0x5D5B, 0xE1CF, 0x5D6F, 0xE1D0, 0x5D5D, 0xE1D1, 0x5D6B, 0xE1D2, 0x5D4B, + 0xE1D3, 0x5D4A, 0xE1D4, 0x5D69, 0xE1D5, 0x5D74, 0xE1D6, 0x5D82, 0xE1D7, 0x5D99, 0xE1D8, 0x5D9D, 0xE1D9, 0x8C73, 0xE1DA, 0x5DB7, + 0xE1DB, 0x5DC5, 0xE1DC, 0x5F73, 0xE1DD, 0x5F77, 0xE1DE, 0x5F82, 0xE1DF, 0x5F87, 0xE1E0, 0x5F89, 0xE1E1, 0x5F8C, 0xE1E2, 0x5F95, + 0xE1E3, 0x5F99, 0xE1E4, 0x5F9C, 0xE1E5, 0x5FA8, 0xE1E6, 0x5FAD, 0xE1E7, 0x5FB5, 0xE1E8, 0x5FBC, 0xE1E9, 0x8862, 0xE1EA, 0x5F61, + 0xE1EB, 0x72AD, 0xE1EC, 0x72B0, 0xE1ED, 0x72B4, 0xE1EE, 0x72B7, 0xE1EF, 0x72B8, 0xE1F0, 0x72C3, 0xE1F1, 0x72C1, 0xE1F2, 0x72CE, + 0xE1F3, 0x72CD, 0xE1F4, 0x72D2, 0xE1F5, 0x72E8, 0xE1F6, 0x72EF, 0xE1F7, 0x72E9, 0xE1F8, 0x72F2, 0xE1F9, 0x72F4, 0xE1FA, 0x72F7, + 0xE1FB, 0x7301, 0xE1FC, 0x72F3, 0xE1FD, 0x7303, 0xE1FE, 0x72FA, 0xE240, 0x91E6, 0xE241, 0x91E7, 0xE242, 0x91E8, 0xE243, 0x91E9, + 0xE244, 0x91EA, 0xE245, 0x91EB, 0xE246, 0x91EC, 0xE247, 0x91ED, 0xE248, 0x91EE, 0xE249, 0x91EF, 0xE24A, 0x91F0, 0xE24B, 0x91F1, + 0xE24C, 0x91F2, 0xE24D, 0x91F3, 0xE24E, 0x91F4, 0xE24F, 0x91F5, 0xE250, 0x91F6, 0xE251, 0x91F7, 0xE252, 0x91F8, 0xE253, 0x91F9, + 0xE254, 0x91FA, 0xE255, 0x91FB, 0xE256, 0x91FC, 0xE257, 0x91FD, 0xE258, 0x91FE, 0xE259, 0x91FF, 0xE25A, 0x9200, 0xE25B, 0x9201, + 0xE25C, 0x9202, 0xE25D, 0x9203, 0xE25E, 0x9204, 0xE25F, 0x9205, 0xE260, 0x9206, 0xE261, 0x9207, 0xE262, 0x9208, 0xE263, 0x9209, + 0xE264, 0x920A, 0xE265, 0x920B, 0xE266, 0x920C, 0xE267, 0x920D, 0xE268, 0x920E, 0xE269, 0x920F, 0xE26A, 0x9210, 0xE26B, 0x9211, + 0xE26C, 0x9212, 0xE26D, 0x9213, 0xE26E, 0x9214, 0xE26F, 0x9215, 0xE270, 0x9216, 0xE271, 0x9217, 0xE272, 0x9218, 0xE273, 0x9219, + 0xE274, 0x921A, 0xE275, 0x921B, 0xE276, 0x921C, 0xE277, 0x921D, 0xE278, 0x921E, 0xE279, 0x921F, 0xE27A, 0x9220, 0xE27B, 0x9221, + 0xE27C, 0x9222, 0xE27D, 0x9223, 0xE27E, 0x9224, 0xE280, 0x9225, 0xE281, 0x9226, 0xE282, 0x9227, 0xE283, 0x9228, 0xE284, 0x9229, + 0xE285, 0x922A, 0xE286, 0x922B, 0xE287, 0x922C, 0xE288, 0x922D, 0xE289, 0x922E, 0xE28A, 0x922F, 0xE28B, 0x9230, 0xE28C, 0x9231, + 0xE28D, 0x9232, 0xE28E, 0x9233, 0xE28F, 0x9234, 0xE290, 0x9235, 0xE291, 0x9236, 0xE292, 0x9237, 0xE293, 0x9238, 0xE294, 0x9239, + 0xE295, 0x923A, 0xE296, 0x923B, 0xE297, 0x923C, 0xE298, 0x923D, 0xE299, 0x923E, 0xE29A, 0x923F, 0xE29B, 0x9240, 0xE29C, 0x9241, + 0xE29D, 0x9242, 0xE29E, 0x9243, 0xE29F, 0x9244, 0xE2A0, 0x9245, 0xE2A1, 0x72FB, 0xE2A2, 0x7317, 0xE2A3, 0x7313, 0xE2A4, 0x7321, + 0xE2A5, 0x730A, 0xE2A6, 0x731E, 0xE2A7, 0x731D, 0xE2A8, 0x7315, 0xE2A9, 0x7322, 0xE2AA, 0x7339, 0xE2AB, 0x7325, 0xE2AC, 0x732C, + 0xE2AD, 0x7338, 0xE2AE, 0x7331, 0xE2AF, 0x7350, 0xE2B0, 0x734D, 0xE2B1, 0x7357, 0xE2B2, 0x7360, 0xE2B3, 0x736C, 0xE2B4, 0x736F, + 0xE2B5, 0x737E, 0xE2B6, 0x821B, 0xE2B7, 0x5925, 0xE2B8, 0x98E7, 0xE2B9, 0x5924, 0xE2BA, 0x5902, 0xE2BB, 0x9963, 0xE2BC, 0x9967, + 0xE2BD, 0x9968, 0xE2BE, 0x9969, 0xE2BF, 0x996A, 0xE2C0, 0x996B, 0xE2C1, 0x996C, 0xE2C2, 0x9974, 0xE2C3, 0x9977, 0xE2C4, 0x997D, + 0xE2C5, 0x9980, 0xE2C6, 0x9984, 0xE2C7, 0x9987, 0xE2C8, 0x998A, 0xE2C9, 0x998D, 0xE2CA, 0x9990, 0xE2CB, 0x9991, 0xE2CC, 0x9993, + 0xE2CD, 0x9994, 0xE2CE, 0x9995, 0xE2CF, 0x5E80, 0xE2D0, 0x5E91, 0xE2D1, 0x5E8B, 0xE2D2, 0x5E96, 0xE2D3, 0x5EA5, 0xE2D4, 0x5EA0, + 0xE2D5, 0x5EB9, 0xE2D6, 0x5EB5, 0xE2D7, 0x5EBE, 0xE2D8, 0x5EB3, 0xE2D9, 0x8D53, 0xE2DA, 0x5ED2, 0xE2DB, 0x5ED1, 0xE2DC, 0x5EDB, + 0xE2DD, 0x5EE8, 0xE2DE, 0x5EEA, 0xE2DF, 0x81BA, 0xE2E0, 0x5FC4, 0xE2E1, 0x5FC9, 0xE2E2, 0x5FD6, 0xE2E3, 0x5FCF, 0xE2E4, 0x6003, + 0xE2E5, 0x5FEE, 0xE2E6, 0x6004, 0xE2E7, 0x5FE1, 0xE2E8, 0x5FE4, 0xE2E9, 0x5FFE, 0xE2EA, 0x6005, 0xE2EB, 0x6006, 0xE2EC, 0x5FEA, + 0xE2ED, 0x5FED, 0xE2EE, 0x5FF8, 0xE2EF, 0x6019, 0xE2F0, 0x6035, 0xE2F1, 0x6026, 0xE2F2, 0x601B, 0xE2F3, 0x600F, 0xE2F4, 0x600D, + 0xE2F5, 0x6029, 0xE2F6, 0x602B, 0xE2F7, 0x600A, 0xE2F8, 0x603F, 0xE2F9, 0x6021, 0xE2FA, 0x6078, 0xE2FB, 0x6079, 0xE2FC, 0x607B, + 0xE2FD, 0x607A, 0xE2FE, 0x6042, 0xE340, 0x9246, 0xE341, 0x9247, 0xE342, 0x9248, 0xE343, 0x9249, 0xE344, 0x924A, 0xE345, 0x924B, + 0xE346, 0x924C, 0xE347, 0x924D, 0xE348, 0x924E, 0xE349, 0x924F, 0xE34A, 0x9250, 0xE34B, 0x9251, 0xE34C, 0x9252, 0xE34D, 0x9253, + 0xE34E, 0x9254, 0xE34F, 0x9255, 0xE350, 0x9256, 0xE351, 0x9257, 0xE352, 0x9258, 0xE353, 0x9259, 0xE354, 0x925A, 0xE355, 0x925B, + 0xE356, 0x925C, 0xE357, 0x925D, 0xE358, 0x925E, 0xE359, 0x925F, 0xE35A, 0x9260, 0xE35B, 0x9261, 0xE35C, 0x9262, 0xE35D, 0x9263, + 0xE35E, 0x9264, 0xE35F, 0x9265, 0xE360, 0x9266, 0xE361, 0x9267, 0xE362, 0x9268, 0xE363, 0x9269, 0xE364, 0x926A, 0xE365, 0x926B, + 0xE366, 0x926C, 0xE367, 0x926D, 0xE368, 0x926E, 0xE369, 0x926F, 0xE36A, 0x9270, 0xE36B, 0x9271, 0xE36C, 0x9272, 0xE36D, 0x9273, + 0xE36E, 0x9275, 0xE36F, 0x9276, 0xE370, 0x9277, 0xE371, 0x9278, 0xE372, 0x9279, 0xE373, 0x927A, 0xE374, 0x927B, 0xE375, 0x927C, + 0xE376, 0x927D, 0xE377, 0x927E, 0xE378, 0x927F, 0xE379, 0x9280, 0xE37A, 0x9281, 0xE37B, 0x9282, 0xE37C, 0x9283, 0xE37D, 0x9284, + 0xE37E, 0x9285, 0xE380, 0x9286, 0xE381, 0x9287, 0xE382, 0x9288, 0xE383, 0x9289, 0xE384, 0x928A, 0xE385, 0x928B, 0xE386, 0x928C, + 0xE387, 0x928D, 0xE388, 0x928F, 0xE389, 0x9290, 0xE38A, 0x9291, 0xE38B, 0x9292, 0xE38C, 0x9293, 0xE38D, 0x9294, 0xE38E, 0x9295, + 0xE38F, 0x9296, 0xE390, 0x9297, 0xE391, 0x9298, 0xE392, 0x9299, 0xE393, 0x929A, 0xE394, 0x929B, 0xE395, 0x929C, 0xE396, 0x929D, + 0xE397, 0x929E, 0xE398, 0x929F, 0xE399, 0x92A0, 0xE39A, 0x92A1, 0xE39B, 0x92A2, 0xE39C, 0x92A3, 0xE39D, 0x92A4, 0xE39E, 0x92A5, + 0xE39F, 0x92A6, 0xE3A0, 0x92A7, 0xE3A1, 0x606A, 0xE3A2, 0x607D, 0xE3A3, 0x6096, 0xE3A4, 0x609A, 0xE3A5, 0x60AD, 0xE3A6, 0x609D, + 0xE3A7, 0x6083, 0xE3A8, 0x6092, 0xE3A9, 0x608C, 0xE3AA, 0x609B, 0xE3AB, 0x60EC, 0xE3AC, 0x60BB, 0xE3AD, 0x60B1, 0xE3AE, 0x60DD, + 0xE3AF, 0x60D8, 0xE3B0, 0x60C6, 0xE3B1, 0x60DA, 0xE3B2, 0x60B4, 0xE3B3, 0x6120, 0xE3B4, 0x6126, 0xE3B5, 0x6115, 0xE3B6, 0x6123, + 0xE3B7, 0x60F4, 0xE3B8, 0x6100, 0xE3B9, 0x610E, 0xE3BA, 0x612B, 0xE3BB, 0x614A, 0xE3BC, 0x6175, 0xE3BD, 0x61AC, 0xE3BE, 0x6194, + 0xE3BF, 0x61A7, 0xE3C0, 0x61B7, 0xE3C1, 0x61D4, 0xE3C2, 0x61F5, 0xE3C3, 0x5FDD, 0xE3C4, 0x96B3, 0xE3C5, 0x95E9, 0xE3C6, 0x95EB, + 0xE3C7, 0x95F1, 0xE3C8, 0x95F3, 0xE3C9, 0x95F5, 0xE3CA, 0x95F6, 0xE3CB, 0x95FC, 0xE3CC, 0x95FE, 0xE3CD, 0x9603, 0xE3CE, 0x9604, + 0xE3CF, 0x9606, 0xE3D0, 0x9608, 0xE3D1, 0x960A, 0xE3D2, 0x960B, 0xE3D3, 0x960C, 0xE3D4, 0x960D, 0xE3D5, 0x960F, 0xE3D6, 0x9612, + 0xE3D7, 0x9615, 0xE3D8, 0x9616, 0xE3D9, 0x9617, 0xE3DA, 0x9619, 0xE3DB, 0x961A, 0xE3DC, 0x4E2C, 0xE3DD, 0x723F, 0xE3DE, 0x6215, + 0xE3DF, 0x6C35, 0xE3E0, 0x6C54, 0xE3E1, 0x6C5C, 0xE3E2, 0x6C4A, 0xE3E3, 0x6CA3, 0xE3E4, 0x6C85, 0xE3E5, 0x6C90, 0xE3E6, 0x6C94, + 0xE3E7, 0x6C8C, 0xE3E8, 0x6C68, 0xE3E9, 0x6C69, 0xE3EA, 0x6C74, 0xE3EB, 0x6C76, 0xE3EC, 0x6C86, 0xE3ED, 0x6CA9, 0xE3EE, 0x6CD0, + 0xE3EF, 0x6CD4, 0xE3F0, 0x6CAD, 0xE3F1, 0x6CF7, 0xE3F2, 0x6CF8, 0xE3F3, 0x6CF1, 0xE3F4, 0x6CD7, 0xE3F5, 0x6CB2, 0xE3F6, 0x6CE0, + 0xE3F7, 0x6CD6, 0xE3F8, 0x6CFA, 0xE3F9, 0x6CEB, 0xE3FA, 0x6CEE, 0xE3FB, 0x6CB1, 0xE3FC, 0x6CD3, 0xE3FD, 0x6CEF, 0xE3FE, 0x6CFE, + 0xE440, 0x92A8, 0xE441, 0x92A9, 0xE442, 0x92AA, 0xE443, 0x92AB, 0xE444, 0x92AC, 0xE445, 0x92AD, 0xE446, 0x92AF, 0xE447, 0x92B0, + 0xE448, 0x92B1, 0xE449, 0x92B2, 0xE44A, 0x92B3, 0xE44B, 0x92B4, 0xE44C, 0x92B5, 0xE44D, 0x92B6, 0xE44E, 0x92B7, 0xE44F, 0x92B8, + 0xE450, 0x92B9, 0xE451, 0x92BA, 0xE452, 0x92BB, 0xE453, 0x92BC, 0xE454, 0x92BD, 0xE455, 0x92BE, 0xE456, 0x92BF, 0xE457, 0x92C0, + 0xE458, 0x92C1, 0xE459, 0x92C2, 0xE45A, 0x92C3, 0xE45B, 0x92C4, 0xE45C, 0x92C5, 0xE45D, 0x92C6, 0xE45E, 0x92C7, 0xE45F, 0x92C9, + 0xE460, 0x92CA, 0xE461, 0x92CB, 0xE462, 0x92CC, 0xE463, 0x92CD, 0xE464, 0x92CE, 0xE465, 0x92CF, 0xE466, 0x92D0, 0xE467, 0x92D1, + 0xE468, 0x92D2, 0xE469, 0x92D3, 0xE46A, 0x92D4, 0xE46B, 0x92D5, 0xE46C, 0x92D6, 0xE46D, 0x92D7, 0xE46E, 0x92D8, 0xE46F, 0x92D9, + 0xE470, 0x92DA, 0xE471, 0x92DB, 0xE472, 0x92DC, 0xE473, 0x92DD, 0xE474, 0x92DE, 0xE475, 0x92DF, 0xE476, 0x92E0, 0xE477, 0x92E1, + 0xE478, 0x92E2, 0xE479, 0x92E3, 0xE47A, 0x92E4, 0xE47B, 0x92E5, 0xE47C, 0x92E6, 0xE47D, 0x92E7, 0xE47E, 0x92E8, 0xE480, 0x92E9, + 0xE481, 0x92EA, 0xE482, 0x92EB, 0xE483, 0x92EC, 0xE484, 0x92ED, 0xE485, 0x92EE, 0xE486, 0x92EF, 0xE487, 0x92F0, 0xE488, 0x92F1, + 0xE489, 0x92F2, 0xE48A, 0x92F3, 0xE48B, 0x92F4, 0xE48C, 0x92F5, 0xE48D, 0x92F6, 0xE48E, 0x92F7, 0xE48F, 0x92F8, 0xE490, 0x92F9, + 0xE491, 0x92FA, 0xE492, 0x92FB, 0xE493, 0x92FC, 0xE494, 0x92FD, 0xE495, 0x92FE, 0xE496, 0x92FF, 0xE497, 0x9300, 0xE498, 0x9301, + 0xE499, 0x9302, 0xE49A, 0x9303, 0xE49B, 0x9304, 0xE49C, 0x9305, 0xE49D, 0x9306, 0xE49E, 0x9307, 0xE49F, 0x9308, 0xE4A0, 0x9309, + 0xE4A1, 0x6D39, 0xE4A2, 0x6D27, 0xE4A3, 0x6D0C, 0xE4A4, 0x6D43, 0xE4A5, 0x6D48, 0xE4A6, 0x6D07, 0xE4A7, 0x6D04, 0xE4A8, 0x6D19, + 0xE4A9, 0x6D0E, 0xE4AA, 0x6D2B, 0xE4AB, 0x6D4D, 0xE4AC, 0x6D2E, 0xE4AD, 0x6D35, 0xE4AE, 0x6D1A, 0xE4AF, 0x6D4F, 0xE4B0, 0x6D52, + 0xE4B1, 0x6D54, 0xE4B2, 0x6D33, 0xE4B3, 0x6D91, 0xE4B4, 0x6D6F, 0xE4B5, 0x6D9E, 0xE4B6, 0x6DA0, 0xE4B7, 0x6D5E, 0xE4B8, 0x6D93, + 0xE4B9, 0x6D94, 0xE4BA, 0x6D5C, 0xE4BB, 0x6D60, 0xE4BC, 0x6D7C, 0xE4BD, 0x6D63, 0xE4BE, 0x6E1A, 0xE4BF, 0x6DC7, 0xE4C0, 0x6DC5, + 0xE4C1, 0x6DDE, 0xE4C2, 0x6E0E, 0xE4C3, 0x6DBF, 0xE4C4, 0x6DE0, 0xE4C5, 0x6E11, 0xE4C6, 0x6DE6, 0xE4C7, 0x6DDD, 0xE4C8, 0x6DD9, + 0xE4C9, 0x6E16, 0xE4CA, 0x6DAB, 0xE4CB, 0x6E0C, 0xE4CC, 0x6DAE, 0xE4CD, 0x6E2B, 0xE4CE, 0x6E6E, 0xE4CF, 0x6E4E, 0xE4D0, 0x6E6B, + 0xE4D1, 0x6EB2, 0xE4D2, 0x6E5F, 0xE4D3, 0x6E86, 0xE4D4, 0x6E53, 0xE4D5, 0x6E54, 0xE4D6, 0x6E32, 0xE4D7, 0x6E25, 0xE4D8, 0x6E44, + 0xE4D9, 0x6EDF, 0xE4DA, 0x6EB1, 0xE4DB, 0x6E98, 0xE4DC, 0x6EE0, 0xE4DD, 0x6F2D, 0xE4DE, 0x6EE2, 0xE4DF, 0x6EA5, 0xE4E0, 0x6EA7, + 0xE4E1, 0x6EBD, 0xE4E2, 0x6EBB, 0xE4E3, 0x6EB7, 0xE4E4, 0x6ED7, 0xE4E5, 0x6EB4, 0xE4E6, 0x6ECF, 0xE4E7, 0x6E8F, 0xE4E8, 0x6EC2, + 0xE4E9, 0x6E9F, 0xE4EA, 0x6F62, 0xE4EB, 0x6F46, 0xE4EC, 0x6F47, 0xE4ED, 0x6F24, 0xE4EE, 0x6F15, 0xE4EF, 0x6EF9, 0xE4F0, 0x6F2F, + 0xE4F1, 0x6F36, 0xE4F2, 0x6F4B, 0xE4F3, 0x6F74, 0xE4F4, 0x6F2A, 0xE4F5, 0x6F09, 0xE4F6, 0x6F29, 0xE4F7, 0x6F89, 0xE4F8, 0x6F8D, + 0xE4F9, 0x6F8C, 0xE4FA, 0x6F78, 0xE4FB, 0x6F72, 0xE4FC, 0x6F7C, 0xE4FD, 0x6F7A, 0xE4FE, 0x6FD1, 0xE540, 0x930A, 0xE541, 0x930B, + 0xE542, 0x930C, 0xE543, 0x930D, 0xE544, 0x930E, 0xE545, 0x930F, 0xE546, 0x9310, 0xE547, 0x9311, 0xE548, 0x9312, 0xE549, 0x9313, + 0xE54A, 0x9314, 0xE54B, 0x9315, 0xE54C, 0x9316, 0xE54D, 0x9317, 0xE54E, 0x9318, 0xE54F, 0x9319, 0xE550, 0x931A, 0xE551, 0x931B, + 0xE552, 0x931C, 0xE553, 0x931D, 0xE554, 0x931E, 0xE555, 0x931F, 0xE556, 0x9320, 0xE557, 0x9321, 0xE558, 0x9322, 0xE559, 0x9323, + 0xE55A, 0x9324, 0xE55B, 0x9325, 0xE55C, 0x9326, 0xE55D, 0x9327, 0xE55E, 0x9328, 0xE55F, 0x9329, 0xE560, 0x932A, 0xE561, 0x932B, + 0xE562, 0x932C, 0xE563, 0x932D, 0xE564, 0x932E, 0xE565, 0x932F, 0xE566, 0x9330, 0xE567, 0x9331, 0xE568, 0x9332, 0xE569, 0x9333, + 0xE56A, 0x9334, 0xE56B, 0x9335, 0xE56C, 0x9336, 0xE56D, 0x9337, 0xE56E, 0x9338, 0xE56F, 0x9339, 0xE570, 0x933A, 0xE571, 0x933B, + 0xE572, 0x933C, 0xE573, 0x933D, 0xE574, 0x933F, 0xE575, 0x9340, 0xE576, 0x9341, 0xE577, 0x9342, 0xE578, 0x9343, 0xE579, 0x9344, + 0xE57A, 0x9345, 0xE57B, 0x9346, 0xE57C, 0x9347, 0xE57D, 0x9348, 0xE57E, 0x9349, 0xE580, 0x934A, 0xE581, 0x934B, 0xE582, 0x934C, + 0xE583, 0x934D, 0xE584, 0x934E, 0xE585, 0x934F, 0xE586, 0x9350, 0xE587, 0x9351, 0xE588, 0x9352, 0xE589, 0x9353, 0xE58A, 0x9354, + 0xE58B, 0x9355, 0xE58C, 0x9356, 0xE58D, 0x9357, 0xE58E, 0x9358, 0xE58F, 0x9359, 0xE590, 0x935A, 0xE591, 0x935B, 0xE592, 0x935C, + 0xE593, 0x935D, 0xE594, 0x935E, 0xE595, 0x935F, 0xE596, 0x9360, 0xE597, 0x9361, 0xE598, 0x9362, 0xE599, 0x9363, 0xE59A, 0x9364, + 0xE59B, 0x9365, 0xE59C, 0x9366, 0xE59D, 0x9367, 0xE59E, 0x9368, 0xE59F, 0x9369, 0xE5A0, 0x936B, 0xE5A1, 0x6FC9, 0xE5A2, 0x6FA7, + 0xE5A3, 0x6FB9, 0xE5A4, 0x6FB6, 0xE5A5, 0x6FC2, 0xE5A6, 0x6FE1, 0xE5A7, 0x6FEE, 0xE5A8, 0x6FDE, 0xE5A9, 0x6FE0, 0xE5AA, 0x6FEF, + 0xE5AB, 0x701A, 0xE5AC, 0x7023, 0xE5AD, 0x701B, 0xE5AE, 0x7039, 0xE5AF, 0x7035, 0xE5B0, 0x704F, 0xE5B1, 0x705E, 0xE5B2, 0x5B80, + 0xE5B3, 0x5B84, 0xE5B4, 0x5B95, 0xE5B5, 0x5B93, 0xE5B6, 0x5BA5, 0xE5B7, 0x5BB8, 0xE5B8, 0x752F, 0xE5B9, 0x9A9E, 0xE5BA, 0x6434, + 0xE5BB, 0x5BE4, 0xE5BC, 0x5BEE, 0xE5BD, 0x8930, 0xE5BE, 0x5BF0, 0xE5BF, 0x8E47, 0xE5C0, 0x8B07, 0xE5C1, 0x8FB6, 0xE5C2, 0x8FD3, + 0xE5C3, 0x8FD5, 0xE5C4, 0x8FE5, 0xE5C5, 0x8FEE, 0xE5C6, 0x8FE4, 0xE5C7, 0x8FE9, 0xE5C8, 0x8FE6, 0xE5C9, 0x8FF3, 0xE5CA, 0x8FE8, + 0xE5CB, 0x9005, 0xE5CC, 0x9004, 0xE5CD, 0x900B, 0xE5CE, 0x9026, 0xE5CF, 0x9011, 0xE5D0, 0x900D, 0xE5D1, 0x9016, 0xE5D2, 0x9021, + 0xE5D3, 0x9035, 0xE5D4, 0x9036, 0xE5D5, 0x902D, 0xE5D6, 0x902F, 0xE5D7, 0x9044, 0xE5D8, 0x9051, 0xE5D9, 0x9052, 0xE5DA, 0x9050, + 0xE5DB, 0x9068, 0xE5DC, 0x9058, 0xE5DD, 0x9062, 0xE5DE, 0x905B, 0xE5DF, 0x66B9, 0xE5E0, 0x9074, 0xE5E1, 0x907D, 0xE5E2, 0x9082, + 0xE5E3, 0x9088, 0xE5E4, 0x9083, 0xE5E5, 0x908B, 0xE5E6, 0x5F50, 0xE5E7, 0x5F57, 0xE5E8, 0x5F56, 0xE5E9, 0x5F58, 0xE5EA, 0x5C3B, + 0xE5EB, 0x54AB, 0xE5EC, 0x5C50, 0xE5ED, 0x5C59, 0xE5EE, 0x5B71, 0xE5EF, 0x5C63, 0xE5F0, 0x5C66, 0xE5F1, 0x7FBC, 0xE5F2, 0x5F2A, + 0xE5F3, 0x5F29, 0xE5F4, 0x5F2D, 0xE5F5, 0x8274, 0xE5F6, 0x5F3C, 0xE5F7, 0x9B3B, 0xE5F8, 0x5C6E, 0xE5F9, 0x5981, 0xE5FA, 0x5983, + 0xE5FB, 0x598D, 0xE5FC, 0x59A9, 0xE5FD, 0x59AA, 0xE5FE, 0x59A3, 0xE640, 0x936C, 0xE641, 0x936D, 0xE642, 0x936E, 0xE643, 0x936F, + 0xE644, 0x9370, 0xE645, 0x9371, 0xE646, 0x9372, 0xE647, 0x9373, 0xE648, 0x9374, 0xE649, 0x9375, 0xE64A, 0x9376, 0xE64B, 0x9377, + 0xE64C, 0x9378, 0xE64D, 0x9379, 0xE64E, 0x937A, 0xE64F, 0x937B, 0xE650, 0x937C, 0xE651, 0x937D, 0xE652, 0x937E, 0xE653, 0x937F, + 0xE654, 0x9380, 0xE655, 0x9381, 0xE656, 0x9382, 0xE657, 0x9383, 0xE658, 0x9384, 0xE659, 0x9385, 0xE65A, 0x9386, 0xE65B, 0x9387, + 0xE65C, 0x9388, 0xE65D, 0x9389, 0xE65E, 0x938A, 0xE65F, 0x938B, 0xE660, 0x938C, 0xE661, 0x938D, 0xE662, 0x938E, 0xE663, 0x9390, + 0xE664, 0x9391, 0xE665, 0x9392, 0xE666, 0x9393, 0xE667, 0x9394, 0xE668, 0x9395, 0xE669, 0x9396, 0xE66A, 0x9397, 0xE66B, 0x9398, + 0xE66C, 0x9399, 0xE66D, 0x939A, 0xE66E, 0x939B, 0xE66F, 0x939C, 0xE670, 0x939D, 0xE671, 0x939E, 0xE672, 0x939F, 0xE673, 0x93A0, + 0xE674, 0x93A1, 0xE675, 0x93A2, 0xE676, 0x93A3, 0xE677, 0x93A4, 0xE678, 0x93A5, 0xE679, 0x93A6, 0xE67A, 0x93A7, 0xE67B, 0x93A8, + 0xE67C, 0x93A9, 0xE67D, 0x93AA, 0xE67E, 0x93AB, 0xE680, 0x93AC, 0xE681, 0x93AD, 0xE682, 0x93AE, 0xE683, 0x93AF, 0xE684, 0x93B0, + 0xE685, 0x93B1, 0xE686, 0x93B2, 0xE687, 0x93B3, 0xE688, 0x93B4, 0xE689, 0x93B5, 0xE68A, 0x93B6, 0xE68B, 0x93B7, 0xE68C, 0x93B8, + 0xE68D, 0x93B9, 0xE68E, 0x93BA, 0xE68F, 0x93BB, 0xE690, 0x93BC, 0xE691, 0x93BD, 0xE692, 0x93BE, 0xE693, 0x93BF, 0xE694, 0x93C0, + 0xE695, 0x93C1, 0xE696, 0x93C2, 0xE697, 0x93C3, 0xE698, 0x93C4, 0xE699, 0x93C5, 0xE69A, 0x93C6, 0xE69B, 0x93C7, 0xE69C, 0x93C8, + 0xE69D, 0x93C9, 0xE69E, 0x93CB, 0xE69F, 0x93CC, 0xE6A0, 0x93CD, 0xE6A1, 0x5997, 0xE6A2, 0x59CA, 0xE6A3, 0x59AB, 0xE6A4, 0x599E, + 0xE6A5, 0x59A4, 0xE6A6, 0x59D2, 0xE6A7, 0x59B2, 0xE6A8, 0x59AF, 0xE6A9, 0x59D7, 0xE6AA, 0x59BE, 0xE6AB, 0x5A05, 0xE6AC, 0x5A06, + 0xE6AD, 0x59DD, 0xE6AE, 0x5A08, 0xE6AF, 0x59E3, 0xE6B0, 0x59D8, 0xE6B1, 0x59F9, 0xE6B2, 0x5A0C, 0xE6B3, 0x5A09, 0xE6B4, 0x5A32, + 0xE6B5, 0x5A34, 0xE6B6, 0x5A11, 0xE6B7, 0x5A23, 0xE6B8, 0x5A13, 0xE6B9, 0x5A40, 0xE6BA, 0x5A67, 0xE6BB, 0x5A4A, 0xE6BC, 0x5A55, + 0xE6BD, 0x5A3C, 0xE6BE, 0x5A62, 0xE6BF, 0x5A75, 0xE6C0, 0x80EC, 0xE6C1, 0x5AAA, 0xE6C2, 0x5A9B, 0xE6C3, 0x5A77, 0xE6C4, 0x5A7A, + 0xE6C5, 0x5ABE, 0xE6C6, 0x5AEB, 0xE6C7, 0x5AB2, 0xE6C8, 0x5AD2, 0xE6C9, 0x5AD4, 0xE6CA, 0x5AB8, 0xE6CB, 0x5AE0, 0xE6CC, 0x5AE3, + 0xE6CD, 0x5AF1, 0xE6CE, 0x5AD6, 0xE6CF, 0x5AE6, 0xE6D0, 0x5AD8, 0xE6D1, 0x5ADC, 0xE6D2, 0x5B09, 0xE6D3, 0x5B17, 0xE6D4, 0x5B16, + 0xE6D5, 0x5B32, 0xE6D6, 0x5B37, 0xE6D7, 0x5B40, 0xE6D8, 0x5C15, 0xE6D9, 0x5C1C, 0xE6DA, 0x5B5A, 0xE6DB, 0x5B65, 0xE6DC, 0x5B73, + 0xE6DD, 0x5B51, 0xE6DE, 0x5B53, 0xE6DF, 0x5B62, 0xE6E0, 0x9A75, 0xE6E1, 0x9A77, 0xE6E2, 0x9A78, 0xE6E3, 0x9A7A, 0xE6E4, 0x9A7F, + 0xE6E5, 0x9A7D, 0xE6E6, 0x9A80, 0xE6E7, 0x9A81, 0xE6E8, 0x9A85, 0xE6E9, 0x9A88, 0xE6EA, 0x9A8A, 0xE6EB, 0x9A90, 0xE6EC, 0x9A92, + 0xE6ED, 0x9A93, 0xE6EE, 0x9A96, 0xE6EF, 0x9A98, 0xE6F0, 0x9A9B, 0xE6F1, 0x9A9C, 0xE6F2, 0x9A9D, 0xE6F3, 0x9A9F, 0xE6F4, 0x9AA0, + 0xE6F5, 0x9AA2, 0xE6F6, 0x9AA3, 0xE6F7, 0x9AA5, 0xE6F8, 0x9AA7, 0xE6F9, 0x7E9F, 0xE6FA, 0x7EA1, 0xE6FB, 0x7EA3, 0xE6FC, 0x7EA5, + 0xE6FD, 0x7EA8, 0xE6FE, 0x7EA9, 0xE740, 0x93CE, 0xE741, 0x93CF, 0xE742, 0x93D0, 0xE743, 0x93D1, 0xE744, 0x93D2, 0xE745, 0x93D3, + 0xE746, 0x93D4, 0xE747, 0x93D5, 0xE748, 0x93D7, 0xE749, 0x93D8, 0xE74A, 0x93D9, 0xE74B, 0x93DA, 0xE74C, 0x93DB, 0xE74D, 0x93DC, + 0xE74E, 0x93DD, 0xE74F, 0x93DE, 0xE750, 0x93DF, 0xE751, 0x93E0, 0xE752, 0x93E1, 0xE753, 0x93E2, 0xE754, 0x93E3, 0xE755, 0x93E4, + 0xE756, 0x93E5, 0xE757, 0x93E6, 0xE758, 0x93E7, 0xE759, 0x93E8, 0xE75A, 0x93E9, 0xE75B, 0x93EA, 0xE75C, 0x93EB, 0xE75D, 0x93EC, + 0xE75E, 0x93ED, 0xE75F, 0x93EE, 0xE760, 0x93EF, 0xE761, 0x93F0, 0xE762, 0x93F1, 0xE763, 0x93F2, 0xE764, 0x93F3, 0xE765, 0x93F4, + 0xE766, 0x93F5, 0xE767, 0x93F6, 0xE768, 0x93F7, 0xE769, 0x93F8, 0xE76A, 0x93F9, 0xE76B, 0x93FA, 0xE76C, 0x93FB, 0xE76D, 0x93FC, + 0xE76E, 0x93FD, 0xE76F, 0x93FE, 0xE770, 0x93FF, 0xE771, 0x9400, 0xE772, 0x9401, 0xE773, 0x9402, 0xE774, 0x9403, 0xE775, 0x9404, + 0xE776, 0x9405, 0xE777, 0x9406, 0xE778, 0x9407, 0xE779, 0x9408, 0xE77A, 0x9409, 0xE77B, 0x940A, 0xE77C, 0x940B, 0xE77D, 0x940C, + 0xE77E, 0x940D, 0xE780, 0x940E, 0xE781, 0x940F, 0xE782, 0x9410, 0xE783, 0x9411, 0xE784, 0x9412, 0xE785, 0x9413, 0xE786, 0x9414, + 0xE787, 0x9415, 0xE788, 0x9416, 0xE789, 0x9417, 0xE78A, 0x9418, 0xE78B, 0x9419, 0xE78C, 0x941A, 0xE78D, 0x941B, 0xE78E, 0x941C, + 0xE78F, 0x941D, 0xE790, 0x941E, 0xE791, 0x941F, 0xE792, 0x9420, 0xE793, 0x9421, 0xE794, 0x9422, 0xE795, 0x9423, 0xE796, 0x9424, + 0xE797, 0x9425, 0xE798, 0x9426, 0xE799, 0x9427, 0xE79A, 0x9428, 0xE79B, 0x9429, 0xE79C, 0x942A, 0xE79D, 0x942B, 0xE79E, 0x942C, + 0xE79F, 0x942D, 0xE7A0, 0x942E, 0xE7A1, 0x7EAD, 0xE7A2, 0x7EB0, 0xE7A3, 0x7EBE, 0xE7A4, 0x7EC0, 0xE7A5, 0x7EC1, 0xE7A6, 0x7EC2, + 0xE7A7, 0x7EC9, 0xE7A8, 0x7ECB, 0xE7A9, 0x7ECC, 0xE7AA, 0x7ED0, 0xE7AB, 0x7ED4, 0xE7AC, 0x7ED7, 0xE7AD, 0x7EDB, 0xE7AE, 0x7EE0, + 0xE7AF, 0x7EE1, 0xE7B0, 0x7EE8, 0xE7B1, 0x7EEB, 0xE7B2, 0x7EEE, 0xE7B3, 0x7EEF, 0xE7B4, 0x7EF1, 0xE7B5, 0x7EF2, 0xE7B6, 0x7F0D, + 0xE7B7, 0x7EF6, 0xE7B8, 0x7EFA, 0xE7B9, 0x7EFB, 0xE7BA, 0x7EFE, 0xE7BB, 0x7F01, 0xE7BC, 0x7F02, 0xE7BD, 0x7F03, 0xE7BE, 0x7F07, + 0xE7BF, 0x7F08, 0xE7C0, 0x7F0B, 0xE7C1, 0x7F0C, 0xE7C2, 0x7F0F, 0xE7C3, 0x7F11, 0xE7C4, 0x7F12, 0xE7C5, 0x7F17, 0xE7C6, 0x7F19, + 0xE7C7, 0x7F1C, 0xE7C8, 0x7F1B, 0xE7C9, 0x7F1F, 0xE7CA, 0x7F21, 0xE7CB, 0x7F22, 0xE7CC, 0x7F23, 0xE7CD, 0x7F24, 0xE7CE, 0x7F25, + 0xE7CF, 0x7F26, 0xE7D0, 0x7F27, 0xE7D1, 0x7F2A, 0xE7D2, 0x7F2B, 0xE7D3, 0x7F2C, 0xE7D4, 0x7F2D, 0xE7D5, 0x7F2F, 0xE7D6, 0x7F30, + 0xE7D7, 0x7F31, 0xE7D8, 0x7F32, 0xE7D9, 0x7F33, 0xE7DA, 0x7F35, 0xE7DB, 0x5E7A, 0xE7DC, 0x757F, 0xE7DD, 0x5DDB, 0xE7DE, 0x753E, + 0xE7DF, 0x9095, 0xE7E0, 0x738E, 0xE7E1, 0x7391, 0xE7E2, 0x73AE, 0xE7E3, 0x73A2, 0xE7E4, 0x739F, 0xE7E5, 0x73CF, 0xE7E6, 0x73C2, + 0xE7E7, 0x73D1, 0xE7E8, 0x73B7, 0xE7E9, 0x73B3, 0xE7EA, 0x73C0, 0xE7EB, 0x73C9, 0xE7EC, 0x73C8, 0xE7ED, 0x73E5, 0xE7EE, 0x73D9, + 0xE7EF, 0x987C, 0xE7F0, 0x740A, 0xE7F1, 0x73E9, 0xE7F2, 0x73E7, 0xE7F3, 0x73DE, 0xE7F4, 0x73BA, 0xE7F5, 0x73F2, 0xE7F6, 0x740F, + 0xE7F7, 0x742A, 0xE7F8, 0x745B, 0xE7F9, 0x7426, 0xE7FA, 0x7425, 0xE7FB, 0x7428, 0xE7FC, 0x7430, 0xE7FD, 0x742E, 0xE7FE, 0x742C, + 0xE840, 0x942F, 0xE841, 0x9430, 0xE842, 0x9431, 0xE843, 0x9432, 0xE844, 0x9433, 0xE845, 0x9434, 0xE846, 0x9435, 0xE847, 0x9436, + 0xE848, 0x9437, 0xE849, 0x9438, 0xE84A, 0x9439, 0xE84B, 0x943A, 0xE84C, 0x943B, 0xE84D, 0x943C, 0xE84E, 0x943D, 0xE84F, 0x943F, + 0xE850, 0x9440, 0xE851, 0x9441, 0xE852, 0x9442, 0xE853, 0x9443, 0xE854, 0x9444, 0xE855, 0x9445, 0xE856, 0x9446, 0xE857, 0x9447, + 0xE858, 0x9448, 0xE859, 0x9449, 0xE85A, 0x944A, 0xE85B, 0x944B, 0xE85C, 0x944C, 0xE85D, 0x944D, 0xE85E, 0x944E, 0xE85F, 0x944F, + 0xE860, 0x9450, 0xE861, 0x9451, 0xE862, 0x9452, 0xE863, 0x9453, 0xE864, 0x9454, 0xE865, 0x9455, 0xE866, 0x9456, 0xE867, 0x9457, + 0xE868, 0x9458, 0xE869, 0x9459, 0xE86A, 0x945A, 0xE86B, 0x945B, 0xE86C, 0x945C, 0xE86D, 0x945D, 0xE86E, 0x945E, 0xE86F, 0x945F, + 0xE870, 0x9460, 0xE871, 0x9461, 0xE872, 0x9462, 0xE873, 0x9463, 0xE874, 0x9464, 0xE875, 0x9465, 0xE876, 0x9466, 0xE877, 0x9467, + 0xE878, 0x9468, 0xE879, 0x9469, 0xE87A, 0x946A, 0xE87B, 0x946C, 0xE87C, 0x946D, 0xE87D, 0x946E, 0xE87E, 0x946F, 0xE880, 0x9470, + 0xE881, 0x9471, 0xE882, 0x9472, 0xE883, 0x9473, 0xE884, 0x9474, 0xE885, 0x9475, 0xE886, 0x9476, 0xE887, 0x9477, 0xE888, 0x9478, + 0xE889, 0x9479, 0xE88A, 0x947A, 0xE88B, 0x947B, 0xE88C, 0x947C, 0xE88D, 0x947D, 0xE88E, 0x947E, 0xE88F, 0x947F, 0xE890, 0x9480, + 0xE891, 0x9481, 0xE892, 0x9482, 0xE893, 0x9483, 0xE894, 0x9484, 0xE895, 0x9491, 0xE896, 0x9496, 0xE897, 0x9498, 0xE898, 0x94C7, + 0xE899, 0x94CF, 0xE89A, 0x94D3, 0xE89B, 0x94D4, 0xE89C, 0x94DA, 0xE89D, 0x94E6, 0xE89E, 0x94FB, 0xE89F, 0x951C, 0xE8A0, 0x9520, + 0xE8A1, 0x741B, 0xE8A2, 0x741A, 0xE8A3, 0x7441, 0xE8A4, 0x745C, 0xE8A5, 0x7457, 0xE8A6, 0x7455, 0xE8A7, 0x7459, 0xE8A8, 0x7477, + 0xE8A9, 0x746D, 0xE8AA, 0x747E, 0xE8AB, 0x749C, 0xE8AC, 0x748E, 0xE8AD, 0x7480, 0xE8AE, 0x7481, 0xE8AF, 0x7487, 0xE8B0, 0x748B, + 0xE8B1, 0x749E, 0xE8B2, 0x74A8, 0xE8B3, 0x74A9, 0xE8B4, 0x7490, 0xE8B5, 0x74A7, 0xE8B6, 0x74D2, 0xE8B7, 0x74BA, 0xE8B8, 0x97EA, + 0xE8B9, 0x97EB, 0xE8BA, 0x97EC, 0xE8BB, 0x674C, 0xE8BC, 0x6753, 0xE8BD, 0x675E, 0xE8BE, 0x6748, 0xE8BF, 0x6769, 0xE8C0, 0x67A5, + 0xE8C1, 0x6787, 0xE8C2, 0x676A, 0xE8C3, 0x6773, 0xE8C4, 0x6798, 0xE8C5, 0x67A7, 0xE8C6, 0x6775, 0xE8C7, 0x67A8, 0xE8C8, 0x679E, + 0xE8C9, 0x67AD, 0xE8CA, 0x678B, 0xE8CB, 0x6777, 0xE8CC, 0x677C, 0xE8CD, 0x67F0, 0xE8CE, 0x6809, 0xE8CF, 0x67D8, 0xE8D0, 0x680A, + 0xE8D1, 0x67E9, 0xE8D2, 0x67B0, 0xE8D3, 0x680C, 0xE8D4, 0x67D9, 0xE8D5, 0x67B5, 0xE8D6, 0x67DA, 0xE8D7, 0x67B3, 0xE8D8, 0x67DD, + 0xE8D9, 0x6800, 0xE8DA, 0x67C3, 0xE8DB, 0x67B8, 0xE8DC, 0x67E2, 0xE8DD, 0x680E, 0xE8DE, 0x67C1, 0xE8DF, 0x67FD, 0xE8E0, 0x6832, + 0xE8E1, 0x6833, 0xE8E2, 0x6860, 0xE8E3, 0x6861, 0xE8E4, 0x684E, 0xE8E5, 0x6862, 0xE8E6, 0x6844, 0xE8E7, 0x6864, 0xE8E8, 0x6883, + 0xE8E9, 0x681D, 0xE8EA, 0x6855, 0xE8EB, 0x6866, 0xE8EC, 0x6841, 0xE8ED, 0x6867, 0xE8EE, 0x6840, 0xE8EF, 0x683E, 0xE8F0, 0x684A, + 0xE8F1, 0x6849, 0xE8F2, 0x6829, 0xE8F3, 0x68B5, 0xE8F4, 0x688F, 0xE8F5, 0x6874, 0xE8F6, 0x6877, 0xE8F7, 0x6893, 0xE8F8, 0x686B, + 0xE8F9, 0x68C2, 0xE8FA, 0x696E, 0xE8FB, 0x68FC, 0xE8FC, 0x691F, 0xE8FD, 0x6920, 0xE8FE, 0x68F9, 0xE940, 0x9527, 0xE941, 0x9533, + 0xE942, 0x953D, 0xE943, 0x9543, 0xE944, 0x9548, 0xE945, 0x954B, 0xE946, 0x9555, 0xE947, 0x955A, 0xE948, 0x9560, 0xE949, 0x956E, + 0xE94A, 0x9574, 0xE94B, 0x9575, 0xE94C, 0x9577, 0xE94D, 0x9578, 0xE94E, 0x9579, 0xE94F, 0x957A, 0xE950, 0x957B, 0xE951, 0x957C, + 0xE952, 0x957D, 0xE953, 0x957E, 0xE954, 0x9580, 0xE955, 0x9581, 0xE956, 0x9582, 0xE957, 0x9583, 0xE958, 0x9584, 0xE959, 0x9585, + 0xE95A, 0x9586, 0xE95B, 0x9587, 0xE95C, 0x9588, 0xE95D, 0x9589, 0xE95E, 0x958A, 0xE95F, 0x958B, 0xE960, 0x958C, 0xE961, 0x958D, + 0xE962, 0x958E, 0xE963, 0x958F, 0xE964, 0x9590, 0xE965, 0x9591, 0xE966, 0x9592, 0xE967, 0x9593, 0xE968, 0x9594, 0xE969, 0x9595, + 0xE96A, 0x9596, 0xE96B, 0x9597, 0xE96C, 0x9598, 0xE96D, 0x9599, 0xE96E, 0x959A, 0xE96F, 0x959B, 0xE970, 0x959C, 0xE971, 0x959D, + 0xE972, 0x959E, 0xE973, 0x959F, 0xE974, 0x95A0, 0xE975, 0x95A1, 0xE976, 0x95A2, 0xE977, 0x95A3, 0xE978, 0x95A4, 0xE979, 0x95A5, + 0xE97A, 0x95A6, 0xE97B, 0x95A7, 0xE97C, 0x95A8, 0xE97D, 0x95A9, 0xE97E, 0x95AA, 0xE980, 0x95AB, 0xE981, 0x95AC, 0xE982, 0x95AD, + 0xE983, 0x95AE, 0xE984, 0x95AF, 0xE985, 0x95B0, 0xE986, 0x95B1, 0xE987, 0x95B2, 0xE988, 0x95B3, 0xE989, 0x95B4, 0xE98A, 0x95B5, + 0xE98B, 0x95B6, 0xE98C, 0x95B7, 0xE98D, 0x95B8, 0xE98E, 0x95B9, 0xE98F, 0x95BA, 0xE990, 0x95BB, 0xE991, 0x95BC, 0xE992, 0x95BD, + 0xE993, 0x95BE, 0xE994, 0x95BF, 0xE995, 0x95C0, 0xE996, 0x95C1, 0xE997, 0x95C2, 0xE998, 0x95C3, 0xE999, 0x95C4, 0xE99A, 0x95C5, + 0xE99B, 0x95C6, 0xE99C, 0x95C7, 0xE99D, 0x95C8, 0xE99E, 0x95C9, 0xE99F, 0x95CA, 0xE9A0, 0x95CB, 0xE9A1, 0x6924, 0xE9A2, 0x68F0, + 0xE9A3, 0x690B, 0xE9A4, 0x6901, 0xE9A5, 0x6957, 0xE9A6, 0x68E3, 0xE9A7, 0x6910, 0xE9A8, 0x6971, 0xE9A9, 0x6939, 0xE9AA, 0x6960, + 0xE9AB, 0x6942, 0xE9AC, 0x695D, 0xE9AD, 0x6984, 0xE9AE, 0x696B, 0xE9AF, 0x6980, 0xE9B0, 0x6998, 0xE9B1, 0x6978, 0xE9B2, 0x6934, + 0xE9B3, 0x69CC, 0xE9B4, 0x6987, 0xE9B5, 0x6988, 0xE9B6, 0x69CE, 0xE9B7, 0x6989, 0xE9B8, 0x6966, 0xE9B9, 0x6963, 0xE9BA, 0x6979, + 0xE9BB, 0x699B, 0xE9BC, 0x69A7, 0xE9BD, 0x69BB, 0xE9BE, 0x69AB, 0xE9BF, 0x69AD, 0xE9C0, 0x69D4, 0xE9C1, 0x69B1, 0xE9C2, 0x69C1, + 0xE9C3, 0x69CA, 0xE9C4, 0x69DF, 0xE9C5, 0x6995, 0xE9C6, 0x69E0, 0xE9C7, 0x698D, 0xE9C8, 0x69FF, 0xE9C9, 0x6A2F, 0xE9CA, 0x69ED, + 0xE9CB, 0x6A17, 0xE9CC, 0x6A18, 0xE9CD, 0x6A65, 0xE9CE, 0x69F2, 0xE9CF, 0x6A44, 0xE9D0, 0x6A3E, 0xE9D1, 0x6AA0, 0xE9D2, 0x6A50, + 0xE9D3, 0x6A5B, 0xE9D4, 0x6A35, 0xE9D5, 0x6A8E, 0xE9D6, 0x6A79, 0xE9D7, 0x6A3D, 0xE9D8, 0x6A28, 0xE9D9, 0x6A58, 0xE9DA, 0x6A7C, + 0xE9DB, 0x6A91, 0xE9DC, 0x6A90, 0xE9DD, 0x6AA9, 0xE9DE, 0x6A97, 0xE9DF, 0x6AAB, 0xE9E0, 0x7337, 0xE9E1, 0x7352, 0xE9E2, 0x6B81, + 0xE9E3, 0x6B82, 0xE9E4, 0x6B87, 0xE9E5, 0x6B84, 0xE9E6, 0x6B92, 0xE9E7, 0x6B93, 0xE9E8, 0x6B8D, 0xE9E9, 0x6B9A, 0xE9EA, 0x6B9B, + 0xE9EB, 0x6BA1, 0xE9EC, 0x6BAA, 0xE9ED, 0x8F6B, 0xE9EE, 0x8F6D, 0xE9EF, 0x8F71, 0xE9F0, 0x8F72, 0xE9F1, 0x8F73, 0xE9F2, 0x8F75, + 0xE9F3, 0x8F76, 0xE9F4, 0x8F78, 0xE9F5, 0x8F77, 0xE9F6, 0x8F79, 0xE9F7, 0x8F7A, 0xE9F8, 0x8F7C, 0xE9F9, 0x8F7E, 0xE9FA, 0x8F81, + 0xE9FB, 0x8F82, 0xE9FC, 0x8F84, 0xE9FD, 0x8F87, 0xE9FE, 0x8F8B, 0xEA40, 0x95CC, 0xEA41, 0x95CD, 0xEA42, 0x95CE, 0xEA43, 0x95CF, + 0xEA44, 0x95D0, 0xEA45, 0x95D1, 0xEA46, 0x95D2, 0xEA47, 0x95D3, 0xEA48, 0x95D4, 0xEA49, 0x95D5, 0xEA4A, 0x95D6, 0xEA4B, 0x95D7, + 0xEA4C, 0x95D8, 0xEA4D, 0x95D9, 0xEA4E, 0x95DA, 0xEA4F, 0x95DB, 0xEA50, 0x95DC, 0xEA51, 0x95DD, 0xEA52, 0x95DE, 0xEA53, 0x95DF, + 0xEA54, 0x95E0, 0xEA55, 0x95E1, 0xEA56, 0x95E2, 0xEA57, 0x95E3, 0xEA58, 0x95E4, 0xEA59, 0x95E5, 0xEA5A, 0x95E6, 0xEA5B, 0x95E7, + 0xEA5C, 0x95EC, 0xEA5D, 0x95FF, 0xEA5E, 0x9607, 0xEA5F, 0x9613, 0xEA60, 0x9618, 0xEA61, 0x961B, 0xEA62, 0x961E, 0xEA63, 0x9620, + 0xEA64, 0x9623, 0xEA65, 0x9624, 0xEA66, 0x9625, 0xEA67, 0x9626, 0xEA68, 0x9627, 0xEA69, 0x9628, 0xEA6A, 0x9629, 0xEA6B, 0x962B, + 0xEA6C, 0x962C, 0xEA6D, 0x962D, 0xEA6E, 0x962F, 0xEA6F, 0x9630, 0xEA70, 0x9637, 0xEA71, 0x9638, 0xEA72, 0x9639, 0xEA73, 0x963A, + 0xEA74, 0x963E, 0xEA75, 0x9641, 0xEA76, 0x9643, 0xEA77, 0x964A, 0xEA78, 0x964E, 0xEA79, 0x964F, 0xEA7A, 0x9651, 0xEA7B, 0x9652, + 0xEA7C, 0x9653, 0xEA7D, 0x9656, 0xEA7E, 0x9657, 0xEA80, 0x9658, 0xEA81, 0x9659, 0xEA82, 0x965A, 0xEA83, 0x965C, 0xEA84, 0x965D, + 0xEA85, 0x965E, 0xEA86, 0x9660, 0xEA87, 0x9663, 0xEA88, 0x9665, 0xEA89, 0x9666, 0xEA8A, 0x966B, 0xEA8B, 0x966D, 0xEA8C, 0x966E, + 0xEA8D, 0x966F, 0xEA8E, 0x9670, 0xEA8F, 0x9671, 0xEA90, 0x9673, 0xEA91, 0x9678, 0xEA92, 0x9679, 0xEA93, 0x967A, 0xEA94, 0x967B, + 0xEA95, 0x967C, 0xEA96, 0x967D, 0xEA97, 0x967E, 0xEA98, 0x967F, 0xEA99, 0x9680, 0xEA9A, 0x9681, 0xEA9B, 0x9682, 0xEA9C, 0x9683, + 0xEA9D, 0x9684, 0xEA9E, 0x9687, 0xEA9F, 0x9689, 0xEAA0, 0x968A, 0xEAA1, 0x8F8D, 0xEAA2, 0x8F8E, 0xEAA3, 0x8F8F, 0xEAA4, 0x8F98, + 0xEAA5, 0x8F9A, 0xEAA6, 0x8ECE, 0xEAA7, 0x620B, 0xEAA8, 0x6217, 0xEAA9, 0x621B, 0xEAAA, 0x621F, 0xEAAB, 0x6222, 0xEAAC, 0x6221, + 0xEAAD, 0x6225, 0xEAAE, 0x6224, 0xEAAF, 0x622C, 0xEAB0, 0x81E7, 0xEAB1, 0x74EF, 0xEAB2, 0x74F4, 0xEAB3, 0x74FF, 0xEAB4, 0x750F, + 0xEAB5, 0x7511, 0xEAB6, 0x7513, 0xEAB7, 0x6534, 0xEAB8, 0x65EE, 0xEAB9, 0x65EF, 0xEABA, 0x65F0, 0xEABB, 0x660A, 0xEABC, 0x6619, + 0xEABD, 0x6772, 0xEABE, 0x6603, 0xEABF, 0x6615, 0xEAC0, 0x6600, 0xEAC1, 0x7085, 0xEAC2, 0x66F7, 0xEAC3, 0x661D, 0xEAC4, 0x6634, + 0xEAC5, 0x6631, 0xEAC6, 0x6636, 0xEAC7, 0x6635, 0xEAC8, 0x8006, 0xEAC9, 0x665F, 0xEACA, 0x6654, 0xEACB, 0x6641, 0xEACC, 0x664F, + 0xEACD, 0x6656, 0xEACE, 0x6661, 0xEACF, 0x6657, 0xEAD0, 0x6677, 0xEAD1, 0x6684, 0xEAD2, 0x668C, 0xEAD3, 0x66A7, 0xEAD4, 0x669D, + 0xEAD5, 0x66BE, 0xEAD6, 0x66DB, 0xEAD7, 0x66DC, 0xEAD8, 0x66E6, 0xEAD9, 0x66E9, 0xEADA, 0x8D32, 0xEADB, 0x8D33, 0xEADC, 0x8D36, + 0xEADD, 0x8D3B, 0xEADE, 0x8D3D, 0xEADF, 0x8D40, 0xEAE0, 0x8D45, 0xEAE1, 0x8D46, 0xEAE2, 0x8D48, 0xEAE3, 0x8D49, 0xEAE4, 0x8D47, + 0xEAE5, 0x8D4D, 0xEAE6, 0x8D55, 0xEAE7, 0x8D59, 0xEAE8, 0x89C7, 0xEAE9, 0x89CA, 0xEAEA, 0x89CB, 0xEAEB, 0x89CC, 0xEAEC, 0x89CE, + 0xEAED, 0x89CF, 0xEAEE, 0x89D0, 0xEAEF, 0x89D1, 0xEAF0, 0x726E, 0xEAF1, 0x729F, 0xEAF2, 0x725D, 0xEAF3, 0x7266, 0xEAF4, 0x726F, + 0xEAF5, 0x727E, 0xEAF6, 0x727F, 0xEAF7, 0x7284, 0xEAF8, 0x728B, 0xEAF9, 0x728D, 0xEAFA, 0x728F, 0xEAFB, 0x7292, 0xEAFC, 0x6308, + 0xEAFD, 0x6332, 0xEAFE, 0x63B0, 0xEB40, 0x968C, 0xEB41, 0x968E, 0xEB42, 0x9691, 0xEB43, 0x9692, 0xEB44, 0x9693, 0xEB45, 0x9695, + 0xEB46, 0x9696, 0xEB47, 0x969A, 0xEB48, 0x969B, 0xEB49, 0x969D, 0xEB4A, 0x969E, 0xEB4B, 0x969F, 0xEB4C, 0x96A0, 0xEB4D, 0x96A1, + 0xEB4E, 0x96A2, 0xEB4F, 0x96A3, 0xEB50, 0x96A4, 0xEB51, 0x96A5, 0xEB52, 0x96A6, 0xEB53, 0x96A8, 0xEB54, 0x96A9, 0xEB55, 0x96AA, + 0xEB56, 0x96AB, 0xEB57, 0x96AC, 0xEB58, 0x96AD, 0xEB59, 0x96AE, 0xEB5A, 0x96AF, 0xEB5B, 0x96B1, 0xEB5C, 0x96B2, 0xEB5D, 0x96B4, + 0xEB5E, 0x96B5, 0xEB5F, 0x96B7, 0xEB60, 0x96B8, 0xEB61, 0x96BA, 0xEB62, 0x96BB, 0xEB63, 0x96BF, 0xEB64, 0x96C2, 0xEB65, 0x96C3, + 0xEB66, 0x96C8, 0xEB67, 0x96CA, 0xEB68, 0x96CB, 0xEB69, 0x96D0, 0xEB6A, 0x96D1, 0xEB6B, 0x96D3, 0xEB6C, 0x96D4, 0xEB6D, 0x96D6, + 0xEB6E, 0x96D7, 0xEB6F, 0x96D8, 0xEB70, 0x96D9, 0xEB71, 0x96DA, 0xEB72, 0x96DB, 0xEB73, 0x96DC, 0xEB74, 0x96DD, 0xEB75, 0x96DE, + 0xEB76, 0x96DF, 0xEB77, 0x96E1, 0xEB78, 0x96E2, 0xEB79, 0x96E3, 0xEB7A, 0x96E4, 0xEB7B, 0x96E5, 0xEB7C, 0x96E6, 0xEB7D, 0x96E7, + 0xEB7E, 0x96EB, 0xEB80, 0x96EC, 0xEB81, 0x96ED, 0xEB82, 0x96EE, 0xEB83, 0x96F0, 0xEB84, 0x96F1, 0xEB85, 0x96F2, 0xEB86, 0x96F4, + 0xEB87, 0x96F5, 0xEB88, 0x96F8, 0xEB89, 0x96FA, 0xEB8A, 0x96FB, 0xEB8B, 0x96FC, 0xEB8C, 0x96FD, 0xEB8D, 0x96FF, 0xEB8E, 0x9702, + 0xEB8F, 0x9703, 0xEB90, 0x9705, 0xEB91, 0x970A, 0xEB92, 0x970B, 0xEB93, 0x970C, 0xEB94, 0x9710, 0xEB95, 0x9711, 0xEB96, 0x9712, + 0xEB97, 0x9714, 0xEB98, 0x9715, 0xEB99, 0x9717, 0xEB9A, 0x9718, 0xEB9B, 0x9719, 0xEB9C, 0x971A, 0xEB9D, 0x971B, 0xEB9E, 0x971D, + 0xEB9F, 0x971F, 0xEBA0, 0x9720, 0xEBA1, 0x643F, 0xEBA2, 0x64D8, 0xEBA3, 0x8004, 0xEBA4, 0x6BEA, 0xEBA5, 0x6BF3, 0xEBA6, 0x6BFD, + 0xEBA7, 0x6BF5, 0xEBA8, 0x6BF9, 0xEBA9, 0x6C05, 0xEBAA, 0x6C07, 0xEBAB, 0x6C06, 0xEBAC, 0x6C0D, 0xEBAD, 0x6C15, 0xEBAE, 0x6C18, + 0xEBAF, 0x6C19, 0xEBB0, 0x6C1A, 0xEBB1, 0x6C21, 0xEBB2, 0x6C29, 0xEBB3, 0x6C24, 0xEBB4, 0x6C2A, 0xEBB5, 0x6C32, 0xEBB6, 0x6535, + 0xEBB7, 0x6555, 0xEBB8, 0x656B, 0xEBB9, 0x724D, 0xEBBA, 0x7252, 0xEBBB, 0x7256, 0xEBBC, 0x7230, 0xEBBD, 0x8662, 0xEBBE, 0x5216, + 0xEBBF, 0x809F, 0xEBC0, 0x809C, 0xEBC1, 0x8093, 0xEBC2, 0x80BC, 0xEBC3, 0x670A, 0xEBC4, 0x80BD, 0xEBC5, 0x80B1, 0xEBC6, 0x80AB, + 0xEBC7, 0x80AD, 0xEBC8, 0x80B4, 0xEBC9, 0x80B7, 0xEBCA, 0x80E7, 0xEBCB, 0x80E8, 0xEBCC, 0x80E9, 0xEBCD, 0x80EA, 0xEBCE, 0x80DB, + 0xEBCF, 0x80C2, 0xEBD0, 0x80C4, 0xEBD1, 0x80D9, 0xEBD2, 0x80CD, 0xEBD3, 0x80D7, 0xEBD4, 0x6710, 0xEBD5, 0x80DD, 0xEBD6, 0x80EB, + 0xEBD7, 0x80F1, 0xEBD8, 0x80F4, 0xEBD9, 0x80ED, 0xEBDA, 0x810D, 0xEBDB, 0x810E, 0xEBDC, 0x80F2, 0xEBDD, 0x80FC, 0xEBDE, 0x6715, + 0xEBDF, 0x8112, 0xEBE0, 0x8C5A, 0xEBE1, 0x8136, 0xEBE2, 0x811E, 0xEBE3, 0x812C, 0xEBE4, 0x8118, 0xEBE5, 0x8132, 0xEBE6, 0x8148, + 0xEBE7, 0x814C, 0xEBE8, 0x8153, 0xEBE9, 0x8174, 0xEBEA, 0x8159, 0xEBEB, 0x815A, 0xEBEC, 0x8171, 0xEBED, 0x8160, 0xEBEE, 0x8169, + 0xEBEF, 0x817C, 0xEBF0, 0x817D, 0xEBF1, 0x816D, 0xEBF2, 0x8167, 0xEBF3, 0x584D, 0xEBF4, 0x5AB5, 0xEBF5, 0x8188, 0xEBF6, 0x8182, + 0xEBF7, 0x8191, 0xEBF8, 0x6ED5, 0xEBF9, 0x81A3, 0xEBFA, 0x81AA, 0xEBFB, 0x81CC, 0xEBFC, 0x6726, 0xEBFD, 0x81CA, 0xEBFE, 0x81BB, + 0xEC40, 0x9721, 0xEC41, 0x9722, 0xEC42, 0x9723, 0xEC43, 0x9724, 0xEC44, 0x9725, 0xEC45, 0x9726, 0xEC46, 0x9727, 0xEC47, 0x9728, + 0xEC48, 0x9729, 0xEC49, 0x972B, 0xEC4A, 0x972C, 0xEC4B, 0x972E, 0xEC4C, 0x972F, 0xEC4D, 0x9731, 0xEC4E, 0x9733, 0xEC4F, 0x9734, + 0xEC50, 0x9735, 0xEC51, 0x9736, 0xEC52, 0x9737, 0xEC53, 0x973A, 0xEC54, 0x973B, 0xEC55, 0x973C, 0xEC56, 0x973D, 0xEC57, 0x973F, + 0xEC58, 0x9740, 0xEC59, 0x9741, 0xEC5A, 0x9742, 0xEC5B, 0x9743, 0xEC5C, 0x9744, 0xEC5D, 0x9745, 0xEC5E, 0x9746, 0xEC5F, 0x9747, + 0xEC60, 0x9748, 0xEC61, 0x9749, 0xEC62, 0x974A, 0xEC63, 0x974B, 0xEC64, 0x974C, 0xEC65, 0x974D, 0xEC66, 0x974E, 0xEC67, 0x974F, + 0xEC68, 0x9750, 0xEC69, 0x9751, 0xEC6A, 0x9754, 0xEC6B, 0x9755, 0xEC6C, 0x9757, 0xEC6D, 0x9758, 0xEC6E, 0x975A, 0xEC6F, 0x975C, + 0xEC70, 0x975D, 0xEC71, 0x975F, 0xEC72, 0x9763, 0xEC73, 0x9764, 0xEC74, 0x9766, 0xEC75, 0x9767, 0xEC76, 0x9768, 0xEC77, 0x976A, + 0xEC78, 0x976B, 0xEC79, 0x976C, 0xEC7A, 0x976D, 0xEC7B, 0x976E, 0xEC7C, 0x976F, 0xEC7D, 0x9770, 0xEC7E, 0x9771, 0xEC80, 0x9772, + 0xEC81, 0x9775, 0xEC82, 0x9777, 0xEC83, 0x9778, 0xEC84, 0x9779, 0xEC85, 0x977A, 0xEC86, 0x977B, 0xEC87, 0x977D, 0xEC88, 0x977E, + 0xEC89, 0x977F, 0xEC8A, 0x9780, 0xEC8B, 0x9781, 0xEC8C, 0x9782, 0xEC8D, 0x9783, 0xEC8E, 0x9784, 0xEC8F, 0x9786, 0xEC90, 0x9787, + 0xEC91, 0x9788, 0xEC92, 0x9789, 0xEC93, 0x978A, 0xEC94, 0x978C, 0xEC95, 0x978E, 0xEC96, 0x978F, 0xEC97, 0x9790, 0xEC98, 0x9793, + 0xEC99, 0x9795, 0xEC9A, 0x9796, 0xEC9B, 0x9797, 0xEC9C, 0x9799, 0xEC9D, 0x979A, 0xEC9E, 0x979B, 0xEC9F, 0x979C, 0xECA0, 0x979D, + 0xECA1, 0x81C1, 0xECA2, 0x81A6, 0xECA3, 0x6B24, 0xECA4, 0x6B37, 0xECA5, 0x6B39, 0xECA6, 0x6B43, 0xECA7, 0x6B46, 0xECA8, 0x6B59, + 0xECA9, 0x98D1, 0xECAA, 0x98D2, 0xECAB, 0x98D3, 0xECAC, 0x98D5, 0xECAD, 0x98D9, 0xECAE, 0x98DA, 0xECAF, 0x6BB3, 0xECB0, 0x5F40, + 0xECB1, 0x6BC2, 0xECB2, 0x89F3, 0xECB3, 0x6590, 0xECB4, 0x9F51, 0xECB5, 0x6593, 0xECB6, 0x65BC, 0xECB7, 0x65C6, 0xECB8, 0x65C4, + 0xECB9, 0x65C3, 0xECBA, 0x65CC, 0xECBB, 0x65CE, 0xECBC, 0x65D2, 0xECBD, 0x65D6, 0xECBE, 0x7080, 0xECBF, 0x709C, 0xECC0, 0x7096, + 0xECC1, 0x709D, 0xECC2, 0x70BB, 0xECC3, 0x70C0, 0xECC4, 0x70B7, 0xECC5, 0x70AB, 0xECC6, 0x70B1, 0xECC7, 0x70E8, 0xECC8, 0x70CA, + 0xECC9, 0x7110, 0xECCA, 0x7113, 0xECCB, 0x7116, 0xECCC, 0x712F, 0xECCD, 0x7131, 0xECCE, 0x7173, 0xECCF, 0x715C, 0xECD0, 0x7168, + 0xECD1, 0x7145, 0xECD2, 0x7172, 0xECD3, 0x714A, 0xECD4, 0x7178, 0xECD5, 0x717A, 0xECD6, 0x7198, 0xECD7, 0x71B3, 0xECD8, 0x71B5, + 0xECD9, 0x71A8, 0xECDA, 0x71A0, 0xECDB, 0x71E0, 0xECDC, 0x71D4, 0xECDD, 0x71E7, 0xECDE, 0x71F9, 0xECDF, 0x721D, 0xECE0, 0x7228, + 0xECE1, 0x706C, 0xECE2, 0x7118, 0xECE3, 0x7166, 0xECE4, 0x71B9, 0xECE5, 0x623E, 0xECE6, 0x623D, 0xECE7, 0x6243, 0xECE8, 0x6248, + 0xECE9, 0x6249, 0xECEA, 0x793B, 0xECEB, 0x7940, 0xECEC, 0x7946, 0xECED, 0x7949, 0xECEE, 0x795B, 0xECEF, 0x795C, 0xECF0, 0x7953, + 0xECF1, 0x795A, 0xECF2, 0x7962, 0xECF3, 0x7957, 0xECF4, 0x7960, 0xECF5, 0x796F, 0xECF6, 0x7967, 0xECF7, 0x797A, 0xECF8, 0x7985, + 0xECF9, 0x798A, 0xECFA, 0x799A, 0xECFB, 0x79A7, 0xECFC, 0x79B3, 0xECFD, 0x5FD1, 0xECFE, 0x5FD0, 0xED40, 0x979E, 0xED41, 0x979F, + 0xED42, 0x97A1, 0xED43, 0x97A2, 0xED44, 0x97A4, 0xED45, 0x97A5, 0xED46, 0x97A6, 0xED47, 0x97A7, 0xED48, 0x97A8, 0xED49, 0x97A9, + 0xED4A, 0x97AA, 0xED4B, 0x97AC, 0xED4C, 0x97AE, 0xED4D, 0x97B0, 0xED4E, 0x97B1, 0xED4F, 0x97B3, 0xED50, 0x97B5, 0xED51, 0x97B6, + 0xED52, 0x97B7, 0xED53, 0x97B8, 0xED54, 0x97B9, 0xED55, 0x97BA, 0xED56, 0x97BB, 0xED57, 0x97BC, 0xED58, 0x97BD, 0xED59, 0x97BE, + 0xED5A, 0x97BF, 0xED5B, 0x97C0, 0xED5C, 0x97C1, 0xED5D, 0x97C2, 0xED5E, 0x97C3, 0xED5F, 0x97C4, 0xED60, 0x97C5, 0xED61, 0x97C6, + 0xED62, 0x97C7, 0xED63, 0x97C8, 0xED64, 0x97C9, 0xED65, 0x97CA, 0xED66, 0x97CB, 0xED67, 0x97CC, 0xED68, 0x97CD, 0xED69, 0x97CE, + 0xED6A, 0x97CF, 0xED6B, 0x97D0, 0xED6C, 0x97D1, 0xED6D, 0x97D2, 0xED6E, 0x97D3, 0xED6F, 0x97D4, 0xED70, 0x97D5, 0xED71, 0x97D6, + 0xED72, 0x97D7, 0xED73, 0x97D8, 0xED74, 0x97D9, 0xED75, 0x97DA, 0xED76, 0x97DB, 0xED77, 0x97DC, 0xED78, 0x97DD, 0xED79, 0x97DE, + 0xED7A, 0x97DF, 0xED7B, 0x97E0, 0xED7C, 0x97E1, 0xED7D, 0x97E2, 0xED7E, 0x97E3, 0xED80, 0x97E4, 0xED81, 0x97E5, 0xED82, 0x97E8, + 0xED83, 0x97EE, 0xED84, 0x97EF, 0xED85, 0x97F0, 0xED86, 0x97F1, 0xED87, 0x97F2, 0xED88, 0x97F4, 0xED89, 0x97F7, 0xED8A, 0x97F8, + 0xED8B, 0x97F9, 0xED8C, 0x97FA, 0xED8D, 0x97FB, 0xED8E, 0x97FC, 0xED8F, 0x97FD, 0xED90, 0x97FE, 0xED91, 0x97FF, 0xED92, 0x9800, + 0xED93, 0x9801, 0xED94, 0x9802, 0xED95, 0x9803, 0xED96, 0x9804, 0xED97, 0x9805, 0xED98, 0x9806, 0xED99, 0x9807, 0xED9A, 0x9808, + 0xED9B, 0x9809, 0xED9C, 0x980A, 0xED9D, 0x980B, 0xED9E, 0x980C, 0xED9F, 0x980D, 0xEDA0, 0x980E, 0xEDA1, 0x603C, 0xEDA2, 0x605D, + 0xEDA3, 0x605A, 0xEDA4, 0x6067, 0xEDA5, 0x6041, 0xEDA6, 0x6059, 0xEDA7, 0x6063, 0xEDA8, 0x60AB, 0xEDA9, 0x6106, 0xEDAA, 0x610D, + 0xEDAB, 0x615D, 0xEDAC, 0x61A9, 0xEDAD, 0x619D, 0xEDAE, 0x61CB, 0xEDAF, 0x61D1, 0xEDB0, 0x6206, 0xEDB1, 0x8080, 0xEDB2, 0x807F, + 0xEDB3, 0x6C93, 0xEDB4, 0x6CF6, 0xEDB5, 0x6DFC, 0xEDB6, 0x77F6, 0xEDB7, 0x77F8, 0xEDB8, 0x7800, 0xEDB9, 0x7809, 0xEDBA, 0x7817, + 0xEDBB, 0x7818, 0xEDBC, 0x7811, 0xEDBD, 0x65AB, 0xEDBE, 0x782D, 0xEDBF, 0x781C, 0xEDC0, 0x781D, 0xEDC1, 0x7839, 0xEDC2, 0x783A, + 0xEDC3, 0x783B, 0xEDC4, 0x781F, 0xEDC5, 0x783C, 0xEDC6, 0x7825, 0xEDC7, 0x782C, 0xEDC8, 0x7823, 0xEDC9, 0x7829, 0xEDCA, 0x784E, + 0xEDCB, 0x786D, 0xEDCC, 0x7856, 0xEDCD, 0x7857, 0xEDCE, 0x7826, 0xEDCF, 0x7850, 0xEDD0, 0x7847, 0xEDD1, 0x784C, 0xEDD2, 0x786A, + 0xEDD3, 0x789B, 0xEDD4, 0x7893, 0xEDD5, 0x789A, 0xEDD6, 0x7887, 0xEDD7, 0x789C, 0xEDD8, 0x78A1, 0xEDD9, 0x78A3, 0xEDDA, 0x78B2, + 0xEDDB, 0x78B9, 0xEDDC, 0x78A5, 0xEDDD, 0x78D4, 0xEDDE, 0x78D9, 0xEDDF, 0x78C9, 0xEDE0, 0x78EC, 0xEDE1, 0x78F2, 0xEDE2, 0x7905, + 0xEDE3, 0x78F4, 0xEDE4, 0x7913, 0xEDE5, 0x7924, 0xEDE6, 0x791E, 0xEDE7, 0x7934, 0xEDE8, 0x9F9B, 0xEDE9, 0x9EF9, 0xEDEA, 0x9EFB, + 0xEDEB, 0x9EFC, 0xEDEC, 0x76F1, 0xEDED, 0x7704, 0xEDEE, 0x770D, 0xEDEF, 0x76F9, 0xEDF0, 0x7707, 0xEDF1, 0x7708, 0xEDF2, 0x771A, + 0xEDF3, 0x7722, 0xEDF4, 0x7719, 0xEDF5, 0x772D, 0xEDF6, 0x7726, 0xEDF7, 0x7735, 0xEDF8, 0x7738, 0xEDF9, 0x7750, 0xEDFA, 0x7751, + 0xEDFB, 0x7747, 0xEDFC, 0x7743, 0xEDFD, 0x775A, 0xEDFE, 0x7768, 0xEE40, 0x980F, 0xEE41, 0x9810, 0xEE42, 0x9811, 0xEE43, 0x9812, + 0xEE44, 0x9813, 0xEE45, 0x9814, 0xEE46, 0x9815, 0xEE47, 0x9816, 0xEE48, 0x9817, 0xEE49, 0x9818, 0xEE4A, 0x9819, 0xEE4B, 0x981A, + 0xEE4C, 0x981B, 0xEE4D, 0x981C, 0xEE4E, 0x981D, 0xEE4F, 0x981E, 0xEE50, 0x981F, 0xEE51, 0x9820, 0xEE52, 0x9821, 0xEE53, 0x9822, + 0xEE54, 0x9823, 0xEE55, 0x9824, 0xEE56, 0x9825, 0xEE57, 0x9826, 0xEE58, 0x9827, 0xEE59, 0x9828, 0xEE5A, 0x9829, 0xEE5B, 0x982A, + 0xEE5C, 0x982B, 0xEE5D, 0x982C, 0xEE5E, 0x982D, 0xEE5F, 0x982E, 0xEE60, 0x982F, 0xEE61, 0x9830, 0xEE62, 0x9831, 0xEE63, 0x9832, + 0xEE64, 0x9833, 0xEE65, 0x9834, 0xEE66, 0x9835, 0xEE67, 0x9836, 0xEE68, 0x9837, 0xEE69, 0x9838, 0xEE6A, 0x9839, 0xEE6B, 0x983A, + 0xEE6C, 0x983B, 0xEE6D, 0x983C, 0xEE6E, 0x983D, 0xEE6F, 0x983E, 0xEE70, 0x983F, 0xEE71, 0x9840, 0xEE72, 0x9841, 0xEE73, 0x9842, + 0xEE74, 0x9843, 0xEE75, 0x9844, 0xEE76, 0x9845, 0xEE77, 0x9846, 0xEE78, 0x9847, 0xEE79, 0x9848, 0xEE7A, 0x9849, 0xEE7B, 0x984A, + 0xEE7C, 0x984B, 0xEE7D, 0x984C, 0xEE7E, 0x984D, 0xEE80, 0x984E, 0xEE81, 0x984F, 0xEE82, 0x9850, 0xEE83, 0x9851, 0xEE84, 0x9852, + 0xEE85, 0x9853, 0xEE86, 0x9854, 0xEE87, 0x9855, 0xEE88, 0x9856, 0xEE89, 0x9857, 0xEE8A, 0x9858, 0xEE8B, 0x9859, 0xEE8C, 0x985A, + 0xEE8D, 0x985B, 0xEE8E, 0x985C, 0xEE8F, 0x985D, 0xEE90, 0x985E, 0xEE91, 0x985F, 0xEE92, 0x9860, 0xEE93, 0x9861, 0xEE94, 0x9862, + 0xEE95, 0x9863, 0xEE96, 0x9864, 0xEE97, 0x9865, 0xEE98, 0x9866, 0xEE99, 0x9867, 0xEE9A, 0x9868, 0xEE9B, 0x9869, 0xEE9C, 0x986A, + 0xEE9D, 0x986B, 0xEE9E, 0x986C, 0xEE9F, 0x986D, 0xEEA0, 0x986E, 0xEEA1, 0x7762, 0xEEA2, 0x7765, 0xEEA3, 0x777F, 0xEEA4, 0x778D, + 0xEEA5, 0x777D, 0xEEA6, 0x7780, 0xEEA7, 0x778C, 0xEEA8, 0x7791, 0xEEA9, 0x779F, 0xEEAA, 0x77A0, 0xEEAB, 0x77B0, 0xEEAC, 0x77B5, + 0xEEAD, 0x77BD, 0xEEAE, 0x753A, 0xEEAF, 0x7540, 0xEEB0, 0x754E, 0xEEB1, 0x754B, 0xEEB2, 0x7548, 0xEEB3, 0x755B, 0xEEB4, 0x7572, + 0xEEB5, 0x7579, 0xEEB6, 0x7583, 0xEEB7, 0x7F58, 0xEEB8, 0x7F61, 0xEEB9, 0x7F5F, 0xEEBA, 0x8A48, 0xEEBB, 0x7F68, 0xEEBC, 0x7F74, + 0xEEBD, 0x7F71, 0xEEBE, 0x7F79, 0xEEBF, 0x7F81, 0xEEC0, 0x7F7E, 0xEEC1, 0x76CD, 0xEEC2, 0x76E5, 0xEEC3, 0x8832, 0xEEC4, 0x9485, + 0xEEC5, 0x9486, 0xEEC6, 0x9487, 0xEEC7, 0x948B, 0xEEC8, 0x948A, 0xEEC9, 0x948C, 0xEECA, 0x948D, 0xEECB, 0x948F, 0xEECC, 0x9490, + 0xEECD, 0x9494, 0xEECE, 0x9497, 0xEECF, 0x9495, 0xEED0, 0x949A, 0xEED1, 0x949B, 0xEED2, 0x949C, 0xEED3, 0x94A3, 0xEED4, 0x94A4, + 0xEED5, 0x94AB, 0xEED6, 0x94AA, 0xEED7, 0x94AD, 0xEED8, 0x94AC, 0xEED9, 0x94AF, 0xEEDA, 0x94B0, 0xEEDB, 0x94B2, 0xEEDC, 0x94B4, + 0xEEDD, 0x94B6, 0xEEDE, 0x94B7, 0xEEDF, 0x94B8, 0xEEE0, 0x94B9, 0xEEE1, 0x94BA, 0xEEE2, 0x94BC, 0xEEE3, 0x94BD, 0xEEE4, 0x94BF, + 0xEEE5, 0x94C4, 0xEEE6, 0x94C8, 0xEEE7, 0x94C9, 0xEEE8, 0x94CA, 0xEEE9, 0x94CB, 0xEEEA, 0x94CC, 0xEEEB, 0x94CD, 0xEEEC, 0x94CE, + 0xEEED, 0x94D0, 0xEEEE, 0x94D1, 0xEEEF, 0x94D2, 0xEEF0, 0x94D5, 0xEEF1, 0x94D6, 0xEEF2, 0x94D7, 0xEEF3, 0x94D9, 0xEEF4, 0x94D8, + 0xEEF5, 0x94DB, 0xEEF6, 0x94DE, 0xEEF7, 0x94DF, 0xEEF8, 0x94E0, 0xEEF9, 0x94E2, 0xEEFA, 0x94E4, 0xEEFB, 0x94E5, 0xEEFC, 0x94E7, + 0xEEFD, 0x94E8, 0xEEFE, 0x94EA, 0xEF40, 0x986F, 0xEF41, 0x9870, 0xEF42, 0x9871, 0xEF43, 0x9872, 0xEF44, 0x9873, 0xEF45, 0x9874, + 0xEF46, 0x988B, 0xEF47, 0x988E, 0xEF48, 0x9892, 0xEF49, 0x9895, 0xEF4A, 0x9899, 0xEF4B, 0x98A3, 0xEF4C, 0x98A8, 0xEF4D, 0x98A9, + 0xEF4E, 0x98AA, 0xEF4F, 0x98AB, 0xEF50, 0x98AC, 0xEF51, 0x98AD, 0xEF52, 0x98AE, 0xEF53, 0x98AF, 0xEF54, 0x98B0, 0xEF55, 0x98B1, + 0xEF56, 0x98B2, 0xEF57, 0x98B3, 0xEF58, 0x98B4, 0xEF59, 0x98B5, 0xEF5A, 0x98B6, 0xEF5B, 0x98B7, 0xEF5C, 0x98B8, 0xEF5D, 0x98B9, + 0xEF5E, 0x98BA, 0xEF5F, 0x98BB, 0xEF60, 0x98BC, 0xEF61, 0x98BD, 0xEF62, 0x98BE, 0xEF63, 0x98BF, 0xEF64, 0x98C0, 0xEF65, 0x98C1, + 0xEF66, 0x98C2, 0xEF67, 0x98C3, 0xEF68, 0x98C4, 0xEF69, 0x98C5, 0xEF6A, 0x98C6, 0xEF6B, 0x98C7, 0xEF6C, 0x98C8, 0xEF6D, 0x98C9, + 0xEF6E, 0x98CA, 0xEF6F, 0x98CB, 0xEF70, 0x98CC, 0xEF71, 0x98CD, 0xEF72, 0x98CF, 0xEF73, 0x98D0, 0xEF74, 0x98D4, 0xEF75, 0x98D6, + 0xEF76, 0x98D7, 0xEF77, 0x98DB, 0xEF78, 0x98DC, 0xEF79, 0x98DD, 0xEF7A, 0x98E0, 0xEF7B, 0x98E1, 0xEF7C, 0x98E2, 0xEF7D, 0x98E3, + 0xEF7E, 0x98E4, 0xEF80, 0x98E5, 0xEF81, 0x98E6, 0xEF82, 0x98E9, 0xEF83, 0x98EA, 0xEF84, 0x98EB, 0xEF85, 0x98EC, 0xEF86, 0x98ED, + 0xEF87, 0x98EE, 0xEF88, 0x98EF, 0xEF89, 0x98F0, 0xEF8A, 0x98F1, 0xEF8B, 0x98F2, 0xEF8C, 0x98F3, 0xEF8D, 0x98F4, 0xEF8E, 0x98F5, + 0xEF8F, 0x98F6, 0xEF90, 0x98F7, 0xEF91, 0x98F8, 0xEF92, 0x98F9, 0xEF93, 0x98FA, 0xEF94, 0x98FB, 0xEF95, 0x98FC, 0xEF96, 0x98FD, + 0xEF97, 0x98FE, 0xEF98, 0x98FF, 0xEF99, 0x9900, 0xEF9A, 0x9901, 0xEF9B, 0x9902, 0xEF9C, 0x9903, 0xEF9D, 0x9904, 0xEF9E, 0x9905, + 0xEF9F, 0x9906, 0xEFA0, 0x9907, 0xEFA1, 0x94E9, 0xEFA2, 0x94EB, 0xEFA3, 0x94EE, 0xEFA4, 0x94EF, 0xEFA5, 0x94F3, 0xEFA6, 0x94F4, + 0xEFA7, 0x94F5, 0xEFA8, 0x94F7, 0xEFA9, 0x94F9, 0xEFAA, 0x94FC, 0xEFAB, 0x94FD, 0xEFAC, 0x94FF, 0xEFAD, 0x9503, 0xEFAE, 0x9502, + 0xEFAF, 0x9506, 0xEFB0, 0x9507, 0xEFB1, 0x9509, 0xEFB2, 0x950A, 0xEFB3, 0x950D, 0xEFB4, 0x950E, 0xEFB5, 0x950F, 0xEFB6, 0x9512, + 0xEFB7, 0x9513, 0xEFB8, 0x9514, 0xEFB9, 0x9515, 0xEFBA, 0x9516, 0xEFBB, 0x9518, 0xEFBC, 0x951B, 0xEFBD, 0x951D, 0xEFBE, 0x951E, + 0xEFBF, 0x951F, 0xEFC0, 0x9522, 0xEFC1, 0x952A, 0xEFC2, 0x952B, 0xEFC3, 0x9529, 0xEFC4, 0x952C, 0xEFC5, 0x9531, 0xEFC6, 0x9532, + 0xEFC7, 0x9534, 0xEFC8, 0x9536, 0xEFC9, 0x9537, 0xEFCA, 0x9538, 0xEFCB, 0x953C, 0xEFCC, 0x953E, 0xEFCD, 0x953F, 0xEFCE, 0x9542, + 0xEFCF, 0x9535, 0xEFD0, 0x9544, 0xEFD1, 0x9545, 0xEFD2, 0x9546, 0xEFD3, 0x9549, 0xEFD4, 0x954C, 0xEFD5, 0x954E, 0xEFD6, 0x954F, + 0xEFD7, 0x9552, 0xEFD8, 0x9553, 0xEFD9, 0x9554, 0xEFDA, 0x9556, 0xEFDB, 0x9557, 0xEFDC, 0x9558, 0xEFDD, 0x9559, 0xEFDE, 0x955B, + 0xEFDF, 0x955E, 0xEFE0, 0x955F, 0xEFE1, 0x955D, 0xEFE2, 0x9561, 0xEFE3, 0x9562, 0xEFE4, 0x9564, 0xEFE5, 0x9565, 0xEFE6, 0x9566, + 0xEFE7, 0x9567, 0xEFE8, 0x9568, 0xEFE9, 0x9569, 0xEFEA, 0x956A, 0xEFEB, 0x956B, 0xEFEC, 0x956C, 0xEFED, 0x956F, 0xEFEE, 0x9571, + 0xEFEF, 0x9572, 0xEFF0, 0x9573, 0xEFF1, 0x953A, 0xEFF2, 0x77E7, 0xEFF3, 0x77EC, 0xEFF4, 0x96C9, 0xEFF5, 0x79D5, 0xEFF6, 0x79ED, + 0xEFF7, 0x79E3, 0xEFF8, 0x79EB, 0xEFF9, 0x7A06, 0xEFFA, 0x5D47, 0xEFFB, 0x7A03, 0xEFFC, 0x7A02, 0xEFFD, 0x7A1E, 0xEFFE, 0x7A14, + 0xF040, 0x9908, 0xF041, 0x9909, 0xF042, 0x990A, 0xF043, 0x990B, 0xF044, 0x990C, 0xF045, 0x990E, 0xF046, 0x990F, 0xF047, 0x9911, + 0xF048, 0x9912, 0xF049, 0x9913, 0xF04A, 0x9914, 0xF04B, 0x9915, 0xF04C, 0x9916, 0xF04D, 0x9917, 0xF04E, 0x9918, 0xF04F, 0x9919, + 0xF050, 0x991A, 0xF051, 0x991B, 0xF052, 0x991C, 0xF053, 0x991D, 0xF054, 0x991E, 0xF055, 0x991F, 0xF056, 0x9920, 0xF057, 0x9921, + 0xF058, 0x9922, 0xF059, 0x9923, 0xF05A, 0x9924, 0xF05B, 0x9925, 0xF05C, 0x9926, 0xF05D, 0x9927, 0xF05E, 0x9928, 0xF05F, 0x9929, + 0xF060, 0x992A, 0xF061, 0x992B, 0xF062, 0x992C, 0xF063, 0x992D, 0xF064, 0x992F, 0xF065, 0x9930, 0xF066, 0x9931, 0xF067, 0x9932, + 0xF068, 0x9933, 0xF069, 0x9934, 0xF06A, 0x9935, 0xF06B, 0x9936, 0xF06C, 0x9937, 0xF06D, 0x9938, 0xF06E, 0x9939, 0xF06F, 0x993A, + 0xF070, 0x993B, 0xF071, 0x993C, 0xF072, 0x993D, 0xF073, 0x993E, 0xF074, 0x993F, 0xF075, 0x9940, 0xF076, 0x9941, 0xF077, 0x9942, + 0xF078, 0x9943, 0xF079, 0x9944, 0xF07A, 0x9945, 0xF07B, 0x9946, 0xF07C, 0x9947, 0xF07D, 0x9948, 0xF07E, 0x9949, 0xF080, 0x994A, + 0xF081, 0x994B, 0xF082, 0x994C, 0xF083, 0x994D, 0xF084, 0x994E, 0xF085, 0x994F, 0xF086, 0x9950, 0xF087, 0x9951, 0xF088, 0x9952, + 0xF089, 0x9953, 0xF08A, 0x9956, 0xF08B, 0x9957, 0xF08C, 0x9958, 0xF08D, 0x9959, 0xF08E, 0x995A, 0xF08F, 0x995B, 0xF090, 0x995C, + 0xF091, 0x995D, 0xF092, 0x995E, 0xF093, 0x995F, 0xF094, 0x9960, 0xF095, 0x9961, 0xF096, 0x9962, 0xF097, 0x9964, 0xF098, 0x9966, + 0xF099, 0x9973, 0xF09A, 0x9978, 0xF09B, 0x9979, 0xF09C, 0x997B, 0xF09D, 0x997E, 0xF09E, 0x9982, 0xF09F, 0x9983, 0xF0A0, 0x9989, + 0xF0A1, 0x7A39, 0xF0A2, 0x7A37, 0xF0A3, 0x7A51, 0xF0A4, 0x9ECF, 0xF0A5, 0x99A5, 0xF0A6, 0x7A70, 0xF0A7, 0x7688, 0xF0A8, 0x768E, + 0xF0A9, 0x7693, 0xF0AA, 0x7699, 0xF0AB, 0x76A4, 0xF0AC, 0x74DE, 0xF0AD, 0x74E0, 0xF0AE, 0x752C, 0xF0AF, 0x9E20, 0xF0B0, 0x9E22, + 0xF0B1, 0x9E28, 0xF0B2, 0x9E29, 0xF0B3, 0x9E2A, 0xF0B4, 0x9E2B, 0xF0B5, 0x9E2C, 0xF0B6, 0x9E32, 0xF0B7, 0x9E31, 0xF0B8, 0x9E36, + 0xF0B9, 0x9E38, 0xF0BA, 0x9E37, 0xF0BB, 0x9E39, 0xF0BC, 0x9E3A, 0xF0BD, 0x9E3E, 0xF0BE, 0x9E41, 0xF0BF, 0x9E42, 0xF0C0, 0x9E44, + 0xF0C1, 0x9E46, 0xF0C2, 0x9E47, 0xF0C3, 0x9E48, 0xF0C4, 0x9E49, 0xF0C5, 0x9E4B, 0xF0C6, 0x9E4C, 0xF0C7, 0x9E4E, 0xF0C8, 0x9E51, + 0xF0C9, 0x9E55, 0xF0CA, 0x9E57, 0xF0CB, 0x9E5A, 0xF0CC, 0x9E5B, 0xF0CD, 0x9E5C, 0xF0CE, 0x9E5E, 0xF0CF, 0x9E63, 0xF0D0, 0x9E66, + 0xF0D1, 0x9E67, 0xF0D2, 0x9E68, 0xF0D3, 0x9E69, 0xF0D4, 0x9E6A, 0xF0D5, 0x9E6B, 0xF0D6, 0x9E6C, 0xF0D7, 0x9E71, 0xF0D8, 0x9E6D, + 0xF0D9, 0x9E73, 0xF0DA, 0x7592, 0xF0DB, 0x7594, 0xF0DC, 0x7596, 0xF0DD, 0x75A0, 0xF0DE, 0x759D, 0xF0DF, 0x75AC, 0xF0E0, 0x75A3, + 0xF0E1, 0x75B3, 0xF0E2, 0x75B4, 0xF0E3, 0x75B8, 0xF0E4, 0x75C4, 0xF0E5, 0x75B1, 0xF0E6, 0x75B0, 0xF0E7, 0x75C3, 0xF0E8, 0x75C2, + 0xF0E9, 0x75D6, 0xF0EA, 0x75CD, 0xF0EB, 0x75E3, 0xF0EC, 0x75E8, 0xF0ED, 0x75E6, 0xF0EE, 0x75E4, 0xF0EF, 0x75EB, 0xF0F0, 0x75E7, + 0xF0F1, 0x7603, 0xF0F2, 0x75F1, 0xF0F3, 0x75FC, 0xF0F4, 0x75FF, 0xF0F5, 0x7610, 0xF0F6, 0x7600, 0xF0F7, 0x7605, 0xF0F8, 0x760C, + 0xF0F9, 0x7617, 0xF0FA, 0x760A, 0xF0FB, 0x7625, 0xF0FC, 0x7618, 0xF0FD, 0x7615, 0xF0FE, 0x7619, 0xF140, 0x998C, 0xF141, 0x998E, + 0xF142, 0x999A, 0xF143, 0x999B, 0xF144, 0x999C, 0xF145, 0x999D, 0xF146, 0x999E, 0xF147, 0x999F, 0xF148, 0x99A0, 0xF149, 0x99A1, + 0xF14A, 0x99A2, 0xF14B, 0x99A3, 0xF14C, 0x99A4, 0xF14D, 0x99A6, 0xF14E, 0x99A7, 0xF14F, 0x99A9, 0xF150, 0x99AA, 0xF151, 0x99AB, + 0xF152, 0x99AC, 0xF153, 0x99AD, 0xF154, 0x99AE, 0xF155, 0x99AF, 0xF156, 0x99B0, 0xF157, 0x99B1, 0xF158, 0x99B2, 0xF159, 0x99B3, + 0xF15A, 0x99B4, 0xF15B, 0x99B5, 0xF15C, 0x99B6, 0xF15D, 0x99B7, 0xF15E, 0x99B8, 0xF15F, 0x99B9, 0xF160, 0x99BA, 0xF161, 0x99BB, + 0xF162, 0x99BC, 0xF163, 0x99BD, 0xF164, 0x99BE, 0xF165, 0x99BF, 0xF166, 0x99C0, 0xF167, 0x99C1, 0xF168, 0x99C2, 0xF169, 0x99C3, + 0xF16A, 0x99C4, 0xF16B, 0x99C5, 0xF16C, 0x99C6, 0xF16D, 0x99C7, 0xF16E, 0x99C8, 0xF16F, 0x99C9, 0xF170, 0x99CA, 0xF171, 0x99CB, + 0xF172, 0x99CC, 0xF173, 0x99CD, 0xF174, 0x99CE, 0xF175, 0x99CF, 0xF176, 0x99D0, 0xF177, 0x99D1, 0xF178, 0x99D2, 0xF179, 0x99D3, + 0xF17A, 0x99D4, 0xF17B, 0x99D5, 0xF17C, 0x99D6, 0xF17D, 0x99D7, 0xF17E, 0x99D8, 0xF180, 0x99D9, 0xF181, 0x99DA, 0xF182, 0x99DB, + 0xF183, 0x99DC, 0xF184, 0x99DD, 0xF185, 0x99DE, 0xF186, 0x99DF, 0xF187, 0x99E0, 0xF188, 0x99E1, 0xF189, 0x99E2, 0xF18A, 0x99E3, + 0xF18B, 0x99E4, 0xF18C, 0x99E5, 0xF18D, 0x99E6, 0xF18E, 0x99E7, 0xF18F, 0x99E8, 0xF190, 0x99E9, 0xF191, 0x99EA, 0xF192, 0x99EB, + 0xF193, 0x99EC, 0xF194, 0x99ED, 0xF195, 0x99EE, 0xF196, 0x99EF, 0xF197, 0x99F0, 0xF198, 0x99F1, 0xF199, 0x99F2, 0xF19A, 0x99F3, + 0xF19B, 0x99F4, 0xF19C, 0x99F5, 0xF19D, 0x99F6, 0xF19E, 0x99F7, 0xF19F, 0x99F8, 0xF1A0, 0x99F9, 0xF1A1, 0x761B, 0xF1A2, 0x763C, + 0xF1A3, 0x7622, 0xF1A4, 0x7620, 0xF1A5, 0x7640, 0xF1A6, 0x762D, 0xF1A7, 0x7630, 0xF1A8, 0x763F, 0xF1A9, 0x7635, 0xF1AA, 0x7643, + 0xF1AB, 0x763E, 0xF1AC, 0x7633, 0xF1AD, 0x764D, 0xF1AE, 0x765E, 0xF1AF, 0x7654, 0xF1B0, 0x765C, 0xF1B1, 0x7656, 0xF1B2, 0x766B, + 0xF1B3, 0x766F, 0xF1B4, 0x7FCA, 0xF1B5, 0x7AE6, 0xF1B6, 0x7A78, 0xF1B7, 0x7A79, 0xF1B8, 0x7A80, 0xF1B9, 0x7A86, 0xF1BA, 0x7A88, + 0xF1BB, 0x7A95, 0xF1BC, 0x7AA6, 0xF1BD, 0x7AA0, 0xF1BE, 0x7AAC, 0xF1BF, 0x7AA8, 0xF1C0, 0x7AAD, 0xF1C1, 0x7AB3, 0xF1C2, 0x8864, + 0xF1C3, 0x8869, 0xF1C4, 0x8872, 0xF1C5, 0x887D, 0xF1C6, 0x887F, 0xF1C7, 0x8882, 0xF1C8, 0x88A2, 0xF1C9, 0x88C6, 0xF1CA, 0x88B7, + 0xF1CB, 0x88BC, 0xF1CC, 0x88C9, 0xF1CD, 0x88E2, 0xF1CE, 0x88CE, 0xF1CF, 0x88E3, 0xF1D0, 0x88E5, 0xF1D1, 0x88F1, 0xF1D2, 0x891A, + 0xF1D3, 0x88FC, 0xF1D4, 0x88E8, 0xF1D5, 0x88FE, 0xF1D6, 0x88F0, 0xF1D7, 0x8921, 0xF1D8, 0x8919, 0xF1D9, 0x8913, 0xF1DA, 0x891B, + 0xF1DB, 0x890A, 0xF1DC, 0x8934, 0xF1DD, 0x892B, 0xF1DE, 0x8936, 0xF1DF, 0x8941, 0xF1E0, 0x8966, 0xF1E1, 0x897B, 0xF1E2, 0x758B, + 0xF1E3, 0x80E5, 0xF1E4, 0x76B2, 0xF1E5, 0x76B4, 0xF1E6, 0x77DC, 0xF1E7, 0x8012, 0xF1E8, 0x8014, 0xF1E9, 0x8016, 0xF1EA, 0x801C, + 0xF1EB, 0x8020, 0xF1EC, 0x8022, 0xF1ED, 0x8025, 0xF1EE, 0x8026, 0xF1EF, 0x8027, 0xF1F0, 0x8029, 0xF1F1, 0x8028, 0xF1F2, 0x8031, + 0xF1F3, 0x800B, 0xF1F4, 0x8035, 0xF1F5, 0x8043, 0xF1F6, 0x8046, 0xF1F7, 0x804D, 0xF1F8, 0x8052, 0xF1F9, 0x8069, 0xF1FA, 0x8071, + 0xF1FB, 0x8983, 0xF1FC, 0x9878, 0xF1FD, 0x9880, 0xF1FE, 0x9883, 0xF240, 0x99FA, 0xF241, 0x99FB, 0xF242, 0x99FC, 0xF243, 0x99FD, + 0xF244, 0x99FE, 0xF245, 0x99FF, 0xF246, 0x9A00, 0xF247, 0x9A01, 0xF248, 0x9A02, 0xF249, 0x9A03, 0xF24A, 0x9A04, 0xF24B, 0x9A05, + 0xF24C, 0x9A06, 0xF24D, 0x9A07, 0xF24E, 0x9A08, 0xF24F, 0x9A09, 0xF250, 0x9A0A, 0xF251, 0x9A0B, 0xF252, 0x9A0C, 0xF253, 0x9A0D, + 0xF254, 0x9A0E, 0xF255, 0x9A0F, 0xF256, 0x9A10, 0xF257, 0x9A11, 0xF258, 0x9A12, 0xF259, 0x9A13, 0xF25A, 0x9A14, 0xF25B, 0x9A15, + 0xF25C, 0x9A16, 0xF25D, 0x9A17, 0xF25E, 0x9A18, 0xF25F, 0x9A19, 0xF260, 0x9A1A, 0xF261, 0x9A1B, 0xF262, 0x9A1C, 0xF263, 0x9A1D, + 0xF264, 0x9A1E, 0xF265, 0x9A1F, 0xF266, 0x9A20, 0xF267, 0x9A21, 0xF268, 0x9A22, 0xF269, 0x9A23, 0xF26A, 0x9A24, 0xF26B, 0x9A25, + 0xF26C, 0x9A26, 0xF26D, 0x9A27, 0xF26E, 0x9A28, 0xF26F, 0x9A29, 0xF270, 0x9A2A, 0xF271, 0x9A2B, 0xF272, 0x9A2C, 0xF273, 0x9A2D, + 0xF274, 0x9A2E, 0xF275, 0x9A2F, 0xF276, 0x9A30, 0xF277, 0x9A31, 0xF278, 0x9A32, 0xF279, 0x9A33, 0xF27A, 0x9A34, 0xF27B, 0x9A35, + 0xF27C, 0x9A36, 0xF27D, 0x9A37, 0xF27E, 0x9A38, 0xF280, 0x9A39, 0xF281, 0x9A3A, 0xF282, 0x9A3B, 0xF283, 0x9A3C, 0xF284, 0x9A3D, + 0xF285, 0x9A3E, 0xF286, 0x9A3F, 0xF287, 0x9A40, 0xF288, 0x9A41, 0xF289, 0x9A42, 0xF28A, 0x9A43, 0xF28B, 0x9A44, 0xF28C, 0x9A45, + 0xF28D, 0x9A46, 0xF28E, 0x9A47, 0xF28F, 0x9A48, 0xF290, 0x9A49, 0xF291, 0x9A4A, 0xF292, 0x9A4B, 0xF293, 0x9A4C, 0xF294, 0x9A4D, + 0xF295, 0x9A4E, 0xF296, 0x9A4F, 0xF297, 0x9A50, 0xF298, 0x9A51, 0xF299, 0x9A52, 0xF29A, 0x9A53, 0xF29B, 0x9A54, 0xF29C, 0x9A55, + 0xF29D, 0x9A56, 0xF29E, 0x9A57, 0xF29F, 0x9A58, 0xF2A0, 0x9A59, 0xF2A1, 0x9889, 0xF2A2, 0x988C, 0xF2A3, 0x988D, 0xF2A4, 0x988F, + 0xF2A5, 0x9894, 0xF2A6, 0x989A, 0xF2A7, 0x989B, 0xF2A8, 0x989E, 0xF2A9, 0x989F, 0xF2AA, 0x98A1, 0xF2AB, 0x98A2, 0xF2AC, 0x98A5, + 0xF2AD, 0x98A6, 0xF2AE, 0x864D, 0xF2AF, 0x8654, 0xF2B0, 0x866C, 0xF2B1, 0x866E, 0xF2B2, 0x867F, 0xF2B3, 0x867A, 0xF2B4, 0x867C, + 0xF2B5, 0x867B, 0xF2B6, 0x86A8, 0xF2B7, 0x868D, 0xF2B8, 0x868B, 0xF2B9, 0x86AC, 0xF2BA, 0x869D, 0xF2BB, 0x86A7, 0xF2BC, 0x86A3, + 0xF2BD, 0x86AA, 0xF2BE, 0x8693, 0xF2BF, 0x86A9, 0xF2C0, 0x86B6, 0xF2C1, 0x86C4, 0xF2C2, 0x86B5, 0xF2C3, 0x86CE, 0xF2C4, 0x86B0, + 0xF2C5, 0x86BA, 0xF2C6, 0x86B1, 0xF2C7, 0x86AF, 0xF2C8, 0x86C9, 0xF2C9, 0x86CF, 0xF2CA, 0x86B4, 0xF2CB, 0x86E9, 0xF2CC, 0x86F1, + 0xF2CD, 0x86F2, 0xF2CE, 0x86ED, 0xF2CF, 0x86F3, 0xF2D0, 0x86D0, 0xF2D1, 0x8713, 0xF2D2, 0x86DE, 0xF2D3, 0x86F4, 0xF2D4, 0x86DF, + 0xF2D5, 0x86D8, 0xF2D6, 0x86D1, 0xF2D7, 0x8703, 0xF2D8, 0x8707, 0xF2D9, 0x86F8, 0xF2DA, 0x8708, 0xF2DB, 0x870A, 0xF2DC, 0x870D, + 0xF2DD, 0x8709, 0xF2DE, 0x8723, 0xF2DF, 0x873B, 0xF2E0, 0x871E, 0xF2E1, 0x8725, 0xF2E2, 0x872E, 0xF2E3, 0x871A, 0xF2E4, 0x873E, + 0xF2E5, 0x8748, 0xF2E6, 0x8734, 0xF2E7, 0x8731, 0xF2E8, 0x8729, 0xF2E9, 0x8737, 0xF2EA, 0x873F, 0xF2EB, 0x8782, 0xF2EC, 0x8722, + 0xF2ED, 0x877D, 0xF2EE, 0x877E, 0xF2EF, 0x877B, 0xF2F0, 0x8760, 0xF2F1, 0x8770, 0xF2F2, 0x874C, 0xF2F3, 0x876E, 0xF2F4, 0x878B, + 0xF2F5, 0x8753, 0xF2F6, 0x8763, 0xF2F7, 0x877C, 0xF2F8, 0x8764, 0xF2F9, 0x8759, 0xF2FA, 0x8765, 0xF2FB, 0x8793, 0xF2FC, 0x87AF, + 0xF2FD, 0x87A8, 0xF2FE, 0x87D2, 0xF340, 0x9A5A, 0xF341, 0x9A5B, 0xF342, 0x9A5C, 0xF343, 0x9A5D, 0xF344, 0x9A5E, 0xF345, 0x9A5F, + 0xF346, 0x9A60, 0xF347, 0x9A61, 0xF348, 0x9A62, 0xF349, 0x9A63, 0xF34A, 0x9A64, 0xF34B, 0x9A65, 0xF34C, 0x9A66, 0xF34D, 0x9A67, + 0xF34E, 0x9A68, 0xF34F, 0x9A69, 0xF350, 0x9A6A, 0xF351, 0x9A6B, 0xF352, 0x9A72, 0xF353, 0x9A83, 0xF354, 0x9A89, 0xF355, 0x9A8D, + 0xF356, 0x9A8E, 0xF357, 0x9A94, 0xF358, 0x9A95, 0xF359, 0x9A99, 0xF35A, 0x9AA6, 0xF35B, 0x9AA9, 0xF35C, 0x9AAA, 0xF35D, 0x9AAB, + 0xF35E, 0x9AAC, 0xF35F, 0x9AAD, 0xF360, 0x9AAE, 0xF361, 0x9AAF, 0xF362, 0x9AB2, 0xF363, 0x9AB3, 0xF364, 0x9AB4, 0xF365, 0x9AB5, + 0xF366, 0x9AB9, 0xF367, 0x9ABB, 0xF368, 0x9ABD, 0xF369, 0x9ABE, 0xF36A, 0x9ABF, 0xF36B, 0x9AC3, 0xF36C, 0x9AC4, 0xF36D, 0x9AC6, + 0xF36E, 0x9AC7, 0xF36F, 0x9AC8, 0xF370, 0x9AC9, 0xF371, 0x9ACA, 0xF372, 0x9ACD, 0xF373, 0x9ACE, 0xF374, 0x9ACF, 0xF375, 0x9AD0, + 0xF376, 0x9AD2, 0xF377, 0x9AD4, 0xF378, 0x9AD5, 0xF379, 0x9AD6, 0xF37A, 0x9AD7, 0xF37B, 0x9AD9, 0xF37C, 0x9ADA, 0xF37D, 0x9ADB, + 0xF37E, 0x9ADC, 0xF380, 0x9ADD, 0xF381, 0x9ADE, 0xF382, 0x9AE0, 0xF383, 0x9AE2, 0xF384, 0x9AE3, 0xF385, 0x9AE4, 0xF386, 0x9AE5, + 0xF387, 0x9AE7, 0xF388, 0x9AE8, 0xF389, 0x9AE9, 0xF38A, 0x9AEA, 0xF38B, 0x9AEC, 0xF38C, 0x9AEE, 0xF38D, 0x9AF0, 0xF38E, 0x9AF1, + 0xF38F, 0x9AF2, 0xF390, 0x9AF3, 0xF391, 0x9AF4, 0xF392, 0x9AF5, 0xF393, 0x9AF6, 0xF394, 0x9AF7, 0xF395, 0x9AF8, 0xF396, 0x9AFA, + 0xF397, 0x9AFC, 0xF398, 0x9AFD, 0xF399, 0x9AFE, 0xF39A, 0x9AFF, 0xF39B, 0x9B00, 0xF39C, 0x9B01, 0xF39D, 0x9B02, 0xF39E, 0x9B04, + 0xF39F, 0x9B05, 0xF3A0, 0x9B06, 0xF3A1, 0x87C6, 0xF3A2, 0x8788, 0xF3A3, 0x8785, 0xF3A4, 0x87AD, 0xF3A5, 0x8797, 0xF3A6, 0x8783, + 0xF3A7, 0x87AB, 0xF3A8, 0x87E5, 0xF3A9, 0x87AC, 0xF3AA, 0x87B5, 0xF3AB, 0x87B3, 0xF3AC, 0x87CB, 0xF3AD, 0x87D3, 0xF3AE, 0x87BD, + 0xF3AF, 0x87D1, 0xF3B0, 0x87C0, 0xF3B1, 0x87CA, 0xF3B2, 0x87DB, 0xF3B3, 0x87EA, 0xF3B4, 0x87E0, 0xF3B5, 0x87EE, 0xF3B6, 0x8816, + 0xF3B7, 0x8813, 0xF3B8, 0x87FE, 0xF3B9, 0x880A, 0xF3BA, 0x881B, 0xF3BB, 0x8821, 0xF3BC, 0x8839, 0xF3BD, 0x883C, 0xF3BE, 0x7F36, + 0xF3BF, 0x7F42, 0xF3C0, 0x7F44, 0xF3C1, 0x7F45, 0xF3C2, 0x8210, 0xF3C3, 0x7AFA, 0xF3C4, 0x7AFD, 0xF3C5, 0x7B08, 0xF3C6, 0x7B03, + 0xF3C7, 0x7B04, 0xF3C8, 0x7B15, 0xF3C9, 0x7B0A, 0xF3CA, 0x7B2B, 0xF3CB, 0x7B0F, 0xF3CC, 0x7B47, 0xF3CD, 0x7B38, 0xF3CE, 0x7B2A, + 0xF3CF, 0x7B19, 0xF3D0, 0x7B2E, 0xF3D1, 0x7B31, 0xF3D2, 0x7B20, 0xF3D3, 0x7B25, 0xF3D4, 0x7B24, 0xF3D5, 0x7B33, 0xF3D6, 0x7B3E, + 0xF3D7, 0x7B1E, 0xF3D8, 0x7B58, 0xF3D9, 0x7B5A, 0xF3DA, 0x7B45, 0xF3DB, 0x7B75, 0xF3DC, 0x7B4C, 0xF3DD, 0x7B5D, 0xF3DE, 0x7B60, + 0xF3DF, 0x7B6E, 0xF3E0, 0x7B7B, 0xF3E1, 0x7B62, 0xF3E2, 0x7B72, 0xF3E3, 0x7B71, 0xF3E4, 0x7B90, 0xF3E5, 0x7BA6, 0xF3E6, 0x7BA7, + 0xF3E7, 0x7BB8, 0xF3E8, 0x7BAC, 0xF3E9, 0x7B9D, 0xF3EA, 0x7BA8, 0xF3EB, 0x7B85, 0xF3EC, 0x7BAA, 0xF3ED, 0x7B9C, 0xF3EE, 0x7BA2, + 0xF3EF, 0x7BAB, 0xF3F0, 0x7BB4, 0xF3F1, 0x7BD1, 0xF3F2, 0x7BC1, 0xF3F3, 0x7BCC, 0xF3F4, 0x7BDD, 0xF3F5, 0x7BDA, 0xF3F6, 0x7BE5, + 0xF3F7, 0x7BE6, 0xF3F8, 0x7BEA, 0xF3F9, 0x7C0C, 0xF3FA, 0x7BFE, 0xF3FB, 0x7BFC, 0xF3FC, 0x7C0F, 0xF3FD, 0x7C16, 0xF3FE, 0x7C0B, + 0xF440, 0x9B07, 0xF441, 0x9B09, 0xF442, 0x9B0A, 0xF443, 0x9B0B, 0xF444, 0x9B0C, 0xF445, 0x9B0D, 0xF446, 0x9B0E, 0xF447, 0x9B10, + 0xF448, 0x9B11, 0xF449, 0x9B12, 0xF44A, 0x9B14, 0xF44B, 0x9B15, 0xF44C, 0x9B16, 0xF44D, 0x9B17, 0xF44E, 0x9B18, 0xF44F, 0x9B19, + 0xF450, 0x9B1A, 0xF451, 0x9B1B, 0xF452, 0x9B1C, 0xF453, 0x9B1D, 0xF454, 0x9B1E, 0xF455, 0x9B20, 0xF456, 0x9B21, 0xF457, 0x9B22, + 0xF458, 0x9B24, 0xF459, 0x9B25, 0xF45A, 0x9B26, 0xF45B, 0x9B27, 0xF45C, 0x9B28, 0xF45D, 0x9B29, 0xF45E, 0x9B2A, 0xF45F, 0x9B2B, + 0xF460, 0x9B2C, 0xF461, 0x9B2D, 0xF462, 0x9B2E, 0xF463, 0x9B30, 0xF464, 0x9B31, 0xF465, 0x9B33, 0xF466, 0x9B34, 0xF467, 0x9B35, + 0xF468, 0x9B36, 0xF469, 0x9B37, 0xF46A, 0x9B38, 0xF46B, 0x9B39, 0xF46C, 0x9B3A, 0xF46D, 0x9B3D, 0xF46E, 0x9B3E, 0xF46F, 0x9B3F, + 0xF470, 0x9B40, 0xF471, 0x9B46, 0xF472, 0x9B4A, 0xF473, 0x9B4B, 0xF474, 0x9B4C, 0xF475, 0x9B4E, 0xF476, 0x9B50, 0xF477, 0x9B52, + 0xF478, 0x9B53, 0xF479, 0x9B55, 0xF47A, 0x9B56, 0xF47B, 0x9B57, 0xF47C, 0x9B58, 0xF47D, 0x9B59, 0xF47E, 0x9B5A, 0xF480, 0x9B5B, + 0xF481, 0x9B5C, 0xF482, 0x9B5D, 0xF483, 0x9B5E, 0xF484, 0x9B5F, 0xF485, 0x9B60, 0xF486, 0x9B61, 0xF487, 0x9B62, 0xF488, 0x9B63, + 0xF489, 0x9B64, 0xF48A, 0x9B65, 0xF48B, 0x9B66, 0xF48C, 0x9B67, 0xF48D, 0x9B68, 0xF48E, 0x9B69, 0xF48F, 0x9B6A, 0xF490, 0x9B6B, + 0xF491, 0x9B6C, 0xF492, 0x9B6D, 0xF493, 0x9B6E, 0xF494, 0x9B6F, 0xF495, 0x9B70, 0xF496, 0x9B71, 0xF497, 0x9B72, 0xF498, 0x9B73, + 0xF499, 0x9B74, 0xF49A, 0x9B75, 0xF49B, 0x9B76, 0xF49C, 0x9B77, 0xF49D, 0x9B78, 0xF49E, 0x9B79, 0xF49F, 0x9B7A, 0xF4A0, 0x9B7B, + 0xF4A1, 0x7C1F, 0xF4A2, 0x7C2A, 0xF4A3, 0x7C26, 0xF4A4, 0x7C38, 0xF4A5, 0x7C41, 0xF4A6, 0x7C40, 0xF4A7, 0x81FE, 0xF4A8, 0x8201, + 0xF4A9, 0x8202, 0xF4AA, 0x8204, 0xF4AB, 0x81EC, 0xF4AC, 0x8844, 0xF4AD, 0x8221, 0xF4AE, 0x8222, 0xF4AF, 0x8223, 0xF4B0, 0x822D, + 0xF4B1, 0x822F, 0xF4B2, 0x8228, 0xF4B3, 0x822B, 0xF4B4, 0x8238, 0xF4B5, 0x823B, 0xF4B6, 0x8233, 0xF4B7, 0x8234, 0xF4B8, 0x823E, + 0xF4B9, 0x8244, 0xF4BA, 0x8249, 0xF4BB, 0x824B, 0xF4BC, 0x824F, 0xF4BD, 0x825A, 0xF4BE, 0x825F, 0xF4BF, 0x8268, 0xF4C0, 0x887E, + 0xF4C1, 0x8885, 0xF4C2, 0x8888, 0xF4C3, 0x88D8, 0xF4C4, 0x88DF, 0xF4C5, 0x895E, 0xF4C6, 0x7F9D, 0xF4C7, 0x7F9F, 0xF4C8, 0x7FA7, + 0xF4C9, 0x7FAF, 0xF4CA, 0x7FB0, 0xF4CB, 0x7FB2, 0xF4CC, 0x7C7C, 0xF4CD, 0x6549, 0xF4CE, 0x7C91, 0xF4CF, 0x7C9D, 0xF4D0, 0x7C9C, + 0xF4D1, 0x7C9E, 0xF4D2, 0x7CA2, 0xF4D3, 0x7CB2, 0xF4D4, 0x7CBC, 0xF4D5, 0x7CBD, 0xF4D6, 0x7CC1, 0xF4D7, 0x7CC7, 0xF4D8, 0x7CCC, + 0xF4D9, 0x7CCD, 0xF4DA, 0x7CC8, 0xF4DB, 0x7CC5, 0xF4DC, 0x7CD7, 0xF4DD, 0x7CE8, 0xF4DE, 0x826E, 0xF4DF, 0x66A8, 0xF4E0, 0x7FBF, + 0xF4E1, 0x7FCE, 0xF4E2, 0x7FD5, 0xF4E3, 0x7FE5, 0xF4E4, 0x7FE1, 0xF4E5, 0x7FE6, 0xF4E6, 0x7FE9, 0xF4E7, 0x7FEE, 0xF4E8, 0x7FF3, + 0xF4E9, 0x7CF8, 0xF4EA, 0x7D77, 0xF4EB, 0x7DA6, 0xF4EC, 0x7DAE, 0xF4ED, 0x7E47, 0xF4EE, 0x7E9B, 0xF4EF, 0x9EB8, 0xF4F0, 0x9EB4, + 0xF4F1, 0x8D73, 0xF4F2, 0x8D84, 0xF4F3, 0x8D94, 0xF4F4, 0x8D91, 0xF4F5, 0x8DB1, 0xF4F6, 0x8D67, 0xF4F7, 0x8D6D, 0xF4F8, 0x8C47, + 0xF4F9, 0x8C49, 0xF4FA, 0x914A, 0xF4FB, 0x9150, 0xF4FC, 0x914E, 0xF4FD, 0x914F, 0xF4FE, 0x9164, 0xF540, 0x9B7C, 0xF541, 0x9B7D, + 0xF542, 0x9B7E, 0xF543, 0x9B7F, 0xF544, 0x9B80, 0xF545, 0x9B81, 0xF546, 0x9B82, 0xF547, 0x9B83, 0xF548, 0x9B84, 0xF549, 0x9B85, + 0xF54A, 0x9B86, 0xF54B, 0x9B87, 0xF54C, 0x9B88, 0xF54D, 0x9B89, 0xF54E, 0x9B8A, 0xF54F, 0x9B8B, 0xF550, 0x9B8C, 0xF551, 0x9B8D, + 0xF552, 0x9B8E, 0xF553, 0x9B8F, 0xF554, 0x9B90, 0xF555, 0x9B91, 0xF556, 0x9B92, 0xF557, 0x9B93, 0xF558, 0x9B94, 0xF559, 0x9B95, + 0xF55A, 0x9B96, 0xF55B, 0x9B97, 0xF55C, 0x9B98, 0xF55D, 0x9B99, 0xF55E, 0x9B9A, 0xF55F, 0x9B9B, 0xF560, 0x9B9C, 0xF561, 0x9B9D, + 0xF562, 0x9B9E, 0xF563, 0x9B9F, 0xF564, 0x9BA0, 0xF565, 0x9BA1, 0xF566, 0x9BA2, 0xF567, 0x9BA3, 0xF568, 0x9BA4, 0xF569, 0x9BA5, + 0xF56A, 0x9BA6, 0xF56B, 0x9BA7, 0xF56C, 0x9BA8, 0xF56D, 0x9BA9, 0xF56E, 0x9BAA, 0xF56F, 0x9BAB, 0xF570, 0x9BAC, 0xF571, 0x9BAD, + 0xF572, 0x9BAE, 0xF573, 0x9BAF, 0xF574, 0x9BB0, 0xF575, 0x9BB1, 0xF576, 0x9BB2, 0xF577, 0x9BB3, 0xF578, 0x9BB4, 0xF579, 0x9BB5, + 0xF57A, 0x9BB6, 0xF57B, 0x9BB7, 0xF57C, 0x9BB8, 0xF57D, 0x9BB9, 0xF57E, 0x9BBA, 0xF580, 0x9BBB, 0xF581, 0x9BBC, 0xF582, 0x9BBD, + 0xF583, 0x9BBE, 0xF584, 0x9BBF, 0xF585, 0x9BC0, 0xF586, 0x9BC1, 0xF587, 0x9BC2, 0xF588, 0x9BC3, 0xF589, 0x9BC4, 0xF58A, 0x9BC5, + 0xF58B, 0x9BC6, 0xF58C, 0x9BC7, 0xF58D, 0x9BC8, 0xF58E, 0x9BC9, 0xF58F, 0x9BCA, 0xF590, 0x9BCB, 0xF591, 0x9BCC, 0xF592, 0x9BCD, + 0xF593, 0x9BCE, 0xF594, 0x9BCF, 0xF595, 0x9BD0, 0xF596, 0x9BD1, 0xF597, 0x9BD2, 0xF598, 0x9BD3, 0xF599, 0x9BD4, 0xF59A, 0x9BD5, + 0xF59B, 0x9BD6, 0xF59C, 0x9BD7, 0xF59D, 0x9BD8, 0xF59E, 0x9BD9, 0xF59F, 0x9BDA, 0xF5A0, 0x9BDB, 0xF5A1, 0x9162, 0xF5A2, 0x9161, + 0xF5A3, 0x9170, 0xF5A4, 0x9169, 0xF5A5, 0x916F, 0xF5A6, 0x917D, 0xF5A7, 0x917E, 0xF5A8, 0x9172, 0xF5A9, 0x9174, 0xF5AA, 0x9179, + 0xF5AB, 0x918C, 0xF5AC, 0x9185, 0xF5AD, 0x9190, 0xF5AE, 0x918D, 0xF5AF, 0x9191, 0xF5B0, 0x91A2, 0xF5B1, 0x91A3, 0xF5B2, 0x91AA, + 0xF5B3, 0x91AD, 0xF5B4, 0x91AE, 0xF5B5, 0x91AF, 0xF5B6, 0x91B5, 0xF5B7, 0x91B4, 0xF5B8, 0x91BA, 0xF5B9, 0x8C55, 0xF5BA, 0x9E7E, + 0xF5BB, 0x8DB8, 0xF5BC, 0x8DEB, 0xF5BD, 0x8E05, 0xF5BE, 0x8E59, 0xF5BF, 0x8E69, 0xF5C0, 0x8DB5, 0xF5C1, 0x8DBF, 0xF5C2, 0x8DBC, + 0xF5C3, 0x8DBA, 0xF5C4, 0x8DC4, 0xF5C5, 0x8DD6, 0xF5C6, 0x8DD7, 0xF5C7, 0x8DDA, 0xF5C8, 0x8DDE, 0xF5C9, 0x8DCE, 0xF5CA, 0x8DCF, + 0xF5CB, 0x8DDB, 0xF5CC, 0x8DC6, 0xF5CD, 0x8DEC, 0xF5CE, 0x8DF7, 0xF5CF, 0x8DF8, 0xF5D0, 0x8DE3, 0xF5D1, 0x8DF9, 0xF5D2, 0x8DFB, + 0xF5D3, 0x8DE4, 0xF5D4, 0x8E09, 0xF5D5, 0x8DFD, 0xF5D6, 0x8E14, 0xF5D7, 0x8E1D, 0xF5D8, 0x8E1F, 0xF5D9, 0x8E2C, 0xF5DA, 0x8E2E, + 0xF5DB, 0x8E23, 0xF5DC, 0x8E2F, 0xF5DD, 0x8E3A, 0xF5DE, 0x8E40, 0xF5DF, 0x8E39, 0xF5E0, 0x8E35, 0xF5E1, 0x8E3D, 0xF5E2, 0x8E31, + 0xF5E3, 0x8E49, 0xF5E4, 0x8E41, 0xF5E5, 0x8E42, 0xF5E6, 0x8E51, 0xF5E7, 0x8E52, 0xF5E8, 0x8E4A, 0xF5E9, 0x8E70, 0xF5EA, 0x8E76, + 0xF5EB, 0x8E7C, 0xF5EC, 0x8E6F, 0xF5ED, 0x8E74, 0xF5EE, 0x8E85, 0xF5EF, 0x8E8F, 0xF5F0, 0x8E94, 0xF5F1, 0x8E90, 0xF5F2, 0x8E9C, + 0xF5F3, 0x8E9E, 0xF5F4, 0x8C78, 0xF5F5, 0x8C82, 0xF5F6, 0x8C8A, 0xF5F7, 0x8C85, 0xF5F8, 0x8C98, 0xF5F9, 0x8C94, 0xF5FA, 0x659B, + 0xF5FB, 0x89D6, 0xF5FC, 0x89DE, 0xF5FD, 0x89DA, 0xF5FE, 0x89DC, 0xF640, 0x9BDC, 0xF641, 0x9BDD, 0xF642, 0x9BDE, 0xF643, 0x9BDF, + 0xF644, 0x9BE0, 0xF645, 0x9BE1, 0xF646, 0x9BE2, 0xF647, 0x9BE3, 0xF648, 0x9BE4, 0xF649, 0x9BE5, 0xF64A, 0x9BE6, 0xF64B, 0x9BE7, + 0xF64C, 0x9BE8, 0xF64D, 0x9BE9, 0xF64E, 0x9BEA, 0xF64F, 0x9BEB, 0xF650, 0x9BEC, 0xF651, 0x9BED, 0xF652, 0x9BEE, 0xF653, 0x9BEF, + 0xF654, 0x9BF0, 0xF655, 0x9BF1, 0xF656, 0x9BF2, 0xF657, 0x9BF3, 0xF658, 0x9BF4, 0xF659, 0x9BF5, 0xF65A, 0x9BF6, 0xF65B, 0x9BF7, + 0xF65C, 0x9BF8, 0xF65D, 0x9BF9, 0xF65E, 0x9BFA, 0xF65F, 0x9BFB, 0xF660, 0x9BFC, 0xF661, 0x9BFD, 0xF662, 0x9BFE, 0xF663, 0x9BFF, + 0xF664, 0x9C00, 0xF665, 0x9C01, 0xF666, 0x9C02, 0xF667, 0x9C03, 0xF668, 0x9C04, 0xF669, 0x9C05, 0xF66A, 0x9C06, 0xF66B, 0x9C07, + 0xF66C, 0x9C08, 0xF66D, 0x9C09, 0xF66E, 0x9C0A, 0xF66F, 0x9C0B, 0xF670, 0x9C0C, 0xF671, 0x9C0D, 0xF672, 0x9C0E, 0xF673, 0x9C0F, + 0xF674, 0x9C10, 0xF675, 0x9C11, 0xF676, 0x9C12, 0xF677, 0x9C13, 0xF678, 0x9C14, 0xF679, 0x9C15, 0xF67A, 0x9C16, 0xF67B, 0x9C17, + 0xF67C, 0x9C18, 0xF67D, 0x9C19, 0xF67E, 0x9C1A, 0xF680, 0x9C1B, 0xF681, 0x9C1C, 0xF682, 0x9C1D, 0xF683, 0x9C1E, 0xF684, 0x9C1F, + 0xF685, 0x9C20, 0xF686, 0x9C21, 0xF687, 0x9C22, 0xF688, 0x9C23, 0xF689, 0x9C24, 0xF68A, 0x9C25, 0xF68B, 0x9C26, 0xF68C, 0x9C27, + 0xF68D, 0x9C28, 0xF68E, 0x9C29, 0xF68F, 0x9C2A, 0xF690, 0x9C2B, 0xF691, 0x9C2C, 0xF692, 0x9C2D, 0xF693, 0x9C2E, 0xF694, 0x9C2F, + 0xF695, 0x9C30, 0xF696, 0x9C31, 0xF697, 0x9C32, 0xF698, 0x9C33, 0xF699, 0x9C34, 0xF69A, 0x9C35, 0xF69B, 0x9C36, 0xF69C, 0x9C37, + 0xF69D, 0x9C38, 0xF69E, 0x9C39, 0xF69F, 0x9C3A, 0xF6A0, 0x9C3B, 0xF6A1, 0x89E5, 0xF6A2, 0x89EB, 0xF6A3, 0x89EF, 0xF6A4, 0x8A3E, + 0xF6A5, 0x8B26, 0xF6A6, 0x9753, 0xF6A7, 0x96E9, 0xF6A8, 0x96F3, 0xF6A9, 0x96EF, 0xF6AA, 0x9706, 0xF6AB, 0x9701, 0xF6AC, 0x9708, + 0xF6AD, 0x970F, 0xF6AE, 0x970E, 0xF6AF, 0x972A, 0xF6B0, 0x972D, 0xF6B1, 0x9730, 0xF6B2, 0x973E, 0xF6B3, 0x9F80, 0xF6B4, 0x9F83, + 0xF6B5, 0x9F85, 0xF6B6, 0x9F86, 0xF6B7, 0x9F87, 0xF6B8, 0x9F88, 0xF6B9, 0x9F89, 0xF6BA, 0x9F8A, 0xF6BB, 0x9F8C, 0xF6BC, 0x9EFE, + 0xF6BD, 0x9F0B, 0xF6BE, 0x9F0D, 0xF6BF, 0x96B9, 0xF6C0, 0x96BC, 0xF6C1, 0x96BD, 0xF6C2, 0x96CE, 0xF6C3, 0x96D2, 0xF6C4, 0x77BF, + 0xF6C5, 0x96E0, 0xF6C6, 0x928E, 0xF6C7, 0x92AE, 0xF6C8, 0x92C8, 0xF6C9, 0x933E, 0xF6CA, 0x936A, 0xF6CB, 0x93CA, 0xF6CC, 0x938F, + 0xF6CD, 0x943E, 0xF6CE, 0x946B, 0xF6CF, 0x9C7F, 0xF6D0, 0x9C82, 0xF6D1, 0x9C85, 0xF6D2, 0x9C86, 0xF6D3, 0x9C87, 0xF6D4, 0x9C88, + 0xF6D5, 0x7A23, 0xF6D6, 0x9C8B, 0xF6D7, 0x9C8E, 0xF6D8, 0x9C90, 0xF6D9, 0x9C91, 0xF6DA, 0x9C92, 0xF6DB, 0x9C94, 0xF6DC, 0x9C95, + 0xF6DD, 0x9C9A, 0xF6DE, 0x9C9B, 0xF6DF, 0x9C9E, 0xF6E0, 0x9C9F, 0xF6E1, 0x9CA0, 0xF6E2, 0x9CA1, 0xF6E3, 0x9CA2, 0xF6E4, 0x9CA3, + 0xF6E5, 0x9CA5, 0xF6E6, 0x9CA6, 0xF6E7, 0x9CA7, 0xF6E8, 0x9CA8, 0xF6E9, 0x9CA9, 0xF6EA, 0x9CAB, 0xF6EB, 0x9CAD, 0xF6EC, 0x9CAE, + 0xF6ED, 0x9CB0, 0xF6EE, 0x9CB1, 0xF6EF, 0x9CB2, 0xF6F0, 0x9CB3, 0xF6F1, 0x9CB4, 0xF6F2, 0x9CB5, 0xF6F3, 0x9CB6, 0xF6F4, 0x9CB7, + 0xF6F5, 0x9CBA, 0xF6F6, 0x9CBB, 0xF6F7, 0x9CBC, 0xF6F8, 0x9CBD, 0xF6F9, 0x9CC4, 0xF6FA, 0x9CC5, 0xF6FB, 0x9CC6, 0xF6FC, 0x9CC7, + 0xF6FD, 0x9CCA, 0xF6FE, 0x9CCB, 0xF740, 0x9C3C, 0xF741, 0x9C3D, 0xF742, 0x9C3E, 0xF743, 0x9C3F, 0xF744, 0x9C40, 0xF745, 0x9C41, + 0xF746, 0x9C42, 0xF747, 0x9C43, 0xF748, 0x9C44, 0xF749, 0x9C45, 0xF74A, 0x9C46, 0xF74B, 0x9C47, 0xF74C, 0x9C48, 0xF74D, 0x9C49, + 0xF74E, 0x9C4A, 0xF74F, 0x9C4B, 0xF750, 0x9C4C, 0xF751, 0x9C4D, 0xF752, 0x9C4E, 0xF753, 0x9C4F, 0xF754, 0x9C50, 0xF755, 0x9C51, + 0xF756, 0x9C52, 0xF757, 0x9C53, 0xF758, 0x9C54, 0xF759, 0x9C55, 0xF75A, 0x9C56, 0xF75B, 0x9C57, 0xF75C, 0x9C58, 0xF75D, 0x9C59, + 0xF75E, 0x9C5A, 0xF75F, 0x9C5B, 0xF760, 0x9C5C, 0xF761, 0x9C5D, 0xF762, 0x9C5E, 0xF763, 0x9C5F, 0xF764, 0x9C60, 0xF765, 0x9C61, + 0xF766, 0x9C62, 0xF767, 0x9C63, 0xF768, 0x9C64, 0xF769, 0x9C65, 0xF76A, 0x9C66, 0xF76B, 0x9C67, 0xF76C, 0x9C68, 0xF76D, 0x9C69, + 0xF76E, 0x9C6A, 0xF76F, 0x9C6B, 0xF770, 0x9C6C, 0xF771, 0x9C6D, 0xF772, 0x9C6E, 0xF773, 0x9C6F, 0xF774, 0x9C70, 0xF775, 0x9C71, + 0xF776, 0x9C72, 0xF777, 0x9C73, 0xF778, 0x9C74, 0xF779, 0x9C75, 0xF77A, 0x9C76, 0xF77B, 0x9C77, 0xF77C, 0x9C78, 0xF77D, 0x9C79, + 0xF77E, 0x9C7A, 0xF780, 0x9C7B, 0xF781, 0x9C7D, 0xF782, 0x9C7E, 0xF783, 0x9C80, 0xF784, 0x9C83, 0xF785, 0x9C84, 0xF786, 0x9C89, + 0xF787, 0x9C8A, 0xF788, 0x9C8C, 0xF789, 0x9C8F, 0xF78A, 0x9C93, 0xF78B, 0x9C96, 0xF78C, 0x9C97, 0xF78D, 0x9C98, 0xF78E, 0x9C99, + 0xF78F, 0x9C9D, 0xF790, 0x9CAA, 0xF791, 0x9CAC, 0xF792, 0x9CAF, 0xF793, 0x9CB9, 0xF794, 0x9CBE, 0xF795, 0x9CBF, 0xF796, 0x9CC0, + 0xF797, 0x9CC1, 0xF798, 0x9CC2, 0xF799, 0x9CC8, 0xF79A, 0x9CC9, 0xF79B, 0x9CD1, 0xF79C, 0x9CD2, 0xF79D, 0x9CDA, 0xF79E, 0x9CDB, + 0xF79F, 0x9CE0, 0xF7A0, 0x9CE1, 0xF7A1, 0x9CCC, 0xF7A2, 0x9CCD, 0xF7A3, 0x9CCE, 0xF7A4, 0x9CCF, 0xF7A5, 0x9CD0, 0xF7A6, 0x9CD3, + 0xF7A7, 0x9CD4, 0xF7A8, 0x9CD5, 0xF7A9, 0x9CD7, 0xF7AA, 0x9CD8, 0xF7AB, 0x9CD9, 0xF7AC, 0x9CDC, 0xF7AD, 0x9CDD, 0xF7AE, 0x9CDF, + 0xF7AF, 0x9CE2, 0xF7B0, 0x977C, 0xF7B1, 0x9785, 0xF7B2, 0x9791, 0xF7B3, 0x9792, 0xF7B4, 0x9794, 0xF7B5, 0x97AF, 0xF7B6, 0x97AB, + 0xF7B7, 0x97A3, 0xF7B8, 0x97B2, 0xF7B9, 0x97B4, 0xF7BA, 0x9AB1, 0xF7BB, 0x9AB0, 0xF7BC, 0x9AB7, 0xF7BD, 0x9E58, 0xF7BE, 0x9AB6, + 0xF7BF, 0x9ABA, 0xF7C0, 0x9ABC, 0xF7C1, 0x9AC1, 0xF7C2, 0x9AC0, 0xF7C3, 0x9AC5, 0xF7C4, 0x9AC2, 0xF7C5, 0x9ACB, 0xF7C6, 0x9ACC, + 0xF7C7, 0x9AD1, 0xF7C8, 0x9B45, 0xF7C9, 0x9B43, 0xF7CA, 0x9B47, 0xF7CB, 0x9B49, 0xF7CC, 0x9B48, 0xF7CD, 0x9B4D, 0xF7CE, 0x9B51, + 0xF7CF, 0x98E8, 0xF7D0, 0x990D, 0xF7D1, 0x992E, 0xF7D2, 0x9955, 0xF7D3, 0x9954, 0xF7D4, 0x9ADF, 0xF7D5, 0x9AE1, 0xF7D6, 0x9AE6, + 0xF7D7, 0x9AEF, 0xF7D8, 0x9AEB, 0xF7D9, 0x9AFB, 0xF7DA, 0x9AED, 0xF7DB, 0x9AF9, 0xF7DC, 0x9B08, 0xF7DD, 0x9B0F, 0xF7DE, 0x9B13, + 0xF7DF, 0x9B1F, 0xF7E0, 0x9B23, 0xF7E1, 0x9EBD, 0xF7E2, 0x9EBE, 0xF7E3, 0x7E3B, 0xF7E4, 0x9E82, 0xF7E5, 0x9E87, 0xF7E6, 0x9E88, + 0xF7E7, 0x9E8B, 0xF7E8, 0x9E92, 0xF7E9, 0x93D6, 0xF7EA, 0x9E9D, 0xF7EB, 0x9E9F, 0xF7EC, 0x9EDB, 0xF7ED, 0x9EDC, 0xF7EE, 0x9EDD, + 0xF7EF, 0x9EE0, 0xF7F0, 0x9EDF, 0xF7F1, 0x9EE2, 0xF7F2, 0x9EE9, 0xF7F3, 0x9EE7, 0xF7F4, 0x9EE5, 0xF7F5, 0x9EEA, 0xF7F6, 0x9EEF, + 0xF7F7, 0x9F22, 0xF7F8, 0x9F2C, 0xF7F9, 0x9F2F, 0xF7FA, 0x9F39, 0xF7FB, 0x9F37, 0xF7FC, 0x9F3D, 0xF7FD, 0x9F3E, 0xF7FE, 0x9F44, + 0xF840, 0x9CE3, 0xF841, 0x9CE4, 0xF842, 0x9CE5, 0xF843, 0x9CE6, 0xF844, 0x9CE7, 0xF845, 0x9CE8, 0xF846, 0x9CE9, 0xF847, 0x9CEA, + 0xF848, 0x9CEB, 0xF849, 0x9CEC, 0xF84A, 0x9CED, 0xF84B, 0x9CEE, 0xF84C, 0x9CEF, 0xF84D, 0x9CF0, 0xF84E, 0x9CF1, 0xF84F, 0x9CF2, + 0xF850, 0x9CF3, 0xF851, 0x9CF4, 0xF852, 0x9CF5, 0xF853, 0x9CF6, 0xF854, 0x9CF7, 0xF855, 0x9CF8, 0xF856, 0x9CF9, 0xF857, 0x9CFA, + 0xF858, 0x9CFB, 0xF859, 0x9CFC, 0xF85A, 0x9CFD, 0xF85B, 0x9CFE, 0xF85C, 0x9CFF, 0xF85D, 0x9D00, 0xF85E, 0x9D01, 0xF85F, 0x9D02, + 0xF860, 0x9D03, 0xF861, 0x9D04, 0xF862, 0x9D05, 0xF863, 0x9D06, 0xF864, 0x9D07, 0xF865, 0x9D08, 0xF866, 0x9D09, 0xF867, 0x9D0A, + 0xF868, 0x9D0B, 0xF869, 0x9D0C, 0xF86A, 0x9D0D, 0xF86B, 0x9D0E, 0xF86C, 0x9D0F, 0xF86D, 0x9D10, 0xF86E, 0x9D11, 0xF86F, 0x9D12, + 0xF870, 0x9D13, 0xF871, 0x9D14, 0xF872, 0x9D15, 0xF873, 0x9D16, 0xF874, 0x9D17, 0xF875, 0x9D18, 0xF876, 0x9D19, 0xF877, 0x9D1A, + 0xF878, 0x9D1B, 0xF879, 0x9D1C, 0xF87A, 0x9D1D, 0xF87B, 0x9D1E, 0xF87C, 0x9D1F, 0xF87D, 0x9D20, 0xF87E, 0x9D21, 0xF880, 0x9D22, + 0xF881, 0x9D23, 0xF882, 0x9D24, 0xF883, 0x9D25, 0xF884, 0x9D26, 0xF885, 0x9D27, 0xF886, 0x9D28, 0xF887, 0x9D29, 0xF888, 0x9D2A, + 0xF889, 0x9D2B, 0xF88A, 0x9D2C, 0xF88B, 0x9D2D, 0xF88C, 0x9D2E, 0xF88D, 0x9D2F, 0xF88E, 0x9D30, 0xF88F, 0x9D31, 0xF890, 0x9D32, + 0xF891, 0x9D33, 0xF892, 0x9D34, 0xF893, 0x9D35, 0xF894, 0x9D36, 0xF895, 0x9D37, 0xF896, 0x9D38, 0xF897, 0x9D39, 0xF898, 0x9D3A, + 0xF899, 0x9D3B, 0xF89A, 0x9D3C, 0xF89B, 0x9D3D, 0xF89C, 0x9D3E, 0xF89D, 0x9D3F, 0xF89E, 0x9D40, 0xF89F, 0x9D41, 0xF8A0, 0x9D42, + 0xF940, 0x9D43, 0xF941, 0x9D44, 0xF942, 0x9D45, 0xF943, 0x9D46, 0xF944, 0x9D47, 0xF945, 0x9D48, 0xF946, 0x9D49, 0xF947, 0x9D4A, + 0xF948, 0x9D4B, 0xF949, 0x9D4C, 0xF94A, 0x9D4D, 0xF94B, 0x9D4E, 0xF94C, 0x9D4F, 0xF94D, 0x9D50, 0xF94E, 0x9D51, 0xF94F, 0x9D52, + 0xF950, 0x9D53, 0xF951, 0x9D54, 0xF952, 0x9D55, 0xF953, 0x9D56, 0xF954, 0x9D57, 0xF955, 0x9D58, 0xF956, 0x9D59, 0xF957, 0x9D5A, + 0xF958, 0x9D5B, 0xF959, 0x9D5C, 0xF95A, 0x9D5D, 0xF95B, 0x9D5E, 0xF95C, 0x9D5F, 0xF95D, 0x9D60, 0xF95E, 0x9D61, 0xF95F, 0x9D62, + 0xF960, 0x9D63, 0xF961, 0x9D64, 0xF962, 0x9D65, 0xF963, 0x9D66, 0xF964, 0x9D67, 0xF965, 0x9D68, 0xF966, 0x9D69, 0xF967, 0x9D6A, + 0xF968, 0x9D6B, 0xF969, 0x9D6C, 0xF96A, 0x9D6D, 0xF96B, 0x9D6E, 0xF96C, 0x9D6F, 0xF96D, 0x9D70, 0xF96E, 0x9D71, 0xF96F, 0x9D72, + 0xF970, 0x9D73, 0xF971, 0x9D74, 0xF972, 0x9D75, 0xF973, 0x9D76, 0xF974, 0x9D77, 0xF975, 0x9D78, 0xF976, 0x9D79, 0xF977, 0x9D7A, + 0xF978, 0x9D7B, 0xF979, 0x9D7C, 0xF97A, 0x9D7D, 0xF97B, 0x9D7E, 0xF97C, 0x9D7F, 0xF97D, 0x9D80, 0xF97E, 0x9D81, 0xF980, 0x9D82, + 0xF981, 0x9D83, 0xF982, 0x9D84, 0xF983, 0x9D85, 0xF984, 0x9D86, 0xF985, 0x9D87, 0xF986, 0x9D88, 0xF987, 0x9D89, 0xF988, 0x9D8A, + 0xF989, 0x9D8B, 0xF98A, 0x9D8C, 0xF98B, 0x9D8D, 0xF98C, 0x9D8E, 0xF98D, 0x9D8F, 0xF98E, 0x9D90, 0xF98F, 0x9D91, 0xF990, 0x9D92, + 0xF991, 0x9D93, 0xF992, 0x9D94, 0xF993, 0x9D95, 0xF994, 0x9D96, 0xF995, 0x9D97, 0xF996, 0x9D98, 0xF997, 0x9D99, 0xF998, 0x9D9A, + 0xF999, 0x9D9B, 0xF99A, 0x9D9C, 0xF99B, 0x9D9D, 0xF99C, 0x9D9E, 0xF99D, 0x9D9F, 0xF99E, 0x9DA0, 0xF99F, 0x9DA1, 0xF9A0, 0x9DA2, + 0xFA40, 0x9DA3, 0xFA41, 0x9DA4, 0xFA42, 0x9DA5, 0xFA43, 0x9DA6, 0xFA44, 0x9DA7, 0xFA45, 0x9DA8, 0xFA46, 0x9DA9, 0xFA47, 0x9DAA, + 0xFA48, 0x9DAB, 0xFA49, 0x9DAC, 0xFA4A, 0x9DAD, 0xFA4B, 0x9DAE, 0xFA4C, 0x9DAF, 0xFA4D, 0x9DB0, 0xFA4E, 0x9DB1, 0xFA4F, 0x9DB2, + 0xFA50, 0x9DB3, 0xFA51, 0x9DB4, 0xFA52, 0x9DB5, 0xFA53, 0x9DB6, 0xFA54, 0x9DB7, 0xFA55, 0x9DB8, 0xFA56, 0x9DB9, 0xFA57, 0x9DBA, + 0xFA58, 0x9DBB, 0xFA59, 0x9DBC, 0xFA5A, 0x9DBD, 0xFA5B, 0x9DBE, 0xFA5C, 0x9DBF, 0xFA5D, 0x9DC0, 0xFA5E, 0x9DC1, 0xFA5F, 0x9DC2, + 0xFA60, 0x9DC3, 0xFA61, 0x9DC4, 0xFA62, 0x9DC5, 0xFA63, 0x9DC6, 0xFA64, 0x9DC7, 0xFA65, 0x9DC8, 0xFA66, 0x9DC9, 0xFA67, 0x9DCA, + 0xFA68, 0x9DCB, 0xFA69, 0x9DCC, 0xFA6A, 0x9DCD, 0xFA6B, 0x9DCE, 0xFA6C, 0x9DCF, 0xFA6D, 0x9DD0, 0xFA6E, 0x9DD1, 0xFA6F, 0x9DD2, + 0xFA70, 0x9DD3, 0xFA71, 0x9DD4, 0xFA72, 0x9DD5, 0xFA73, 0x9DD6, 0xFA74, 0x9DD7, 0xFA75, 0x9DD8, 0xFA76, 0x9DD9, 0xFA77, 0x9DDA, + 0xFA78, 0x9DDB, 0xFA79, 0x9DDC, 0xFA7A, 0x9DDD, 0xFA7B, 0x9DDE, 0xFA7C, 0x9DDF, 0xFA7D, 0x9DE0, 0xFA7E, 0x9DE1, 0xFA80, 0x9DE2, + 0xFA81, 0x9DE3, 0xFA82, 0x9DE4, 0xFA83, 0x9DE5, 0xFA84, 0x9DE6, 0xFA85, 0x9DE7, 0xFA86, 0x9DE8, 0xFA87, 0x9DE9, 0xFA88, 0x9DEA, + 0xFA89, 0x9DEB, 0xFA8A, 0x9DEC, 0xFA8B, 0x9DED, 0xFA8C, 0x9DEE, 0xFA8D, 0x9DEF, 0xFA8E, 0x9DF0, 0xFA8F, 0x9DF1, 0xFA90, 0x9DF2, + 0xFA91, 0x9DF3, 0xFA92, 0x9DF4, 0xFA93, 0x9DF5, 0xFA94, 0x9DF6, 0xFA95, 0x9DF7, 0xFA96, 0x9DF8, 0xFA97, 0x9DF9, 0xFA98, 0x9DFA, + 0xFA99, 0x9DFB, 0xFA9A, 0x9DFC, 0xFA9B, 0x9DFD, 0xFA9C, 0x9DFE, 0xFA9D, 0x9DFF, 0xFA9E, 0x9E00, 0xFA9F, 0x9E01, 0xFAA0, 0x9E02, + 0xFB40, 0x9E03, 0xFB41, 0x9E04, 0xFB42, 0x9E05, 0xFB43, 0x9E06, 0xFB44, 0x9E07, 0xFB45, 0x9E08, 0xFB46, 0x9E09, 0xFB47, 0x9E0A, + 0xFB48, 0x9E0B, 0xFB49, 0x9E0C, 0xFB4A, 0x9E0D, 0xFB4B, 0x9E0E, 0xFB4C, 0x9E0F, 0xFB4D, 0x9E10, 0xFB4E, 0x9E11, 0xFB4F, 0x9E12, + 0xFB50, 0x9E13, 0xFB51, 0x9E14, 0xFB52, 0x9E15, 0xFB53, 0x9E16, 0xFB54, 0x9E17, 0xFB55, 0x9E18, 0xFB56, 0x9E19, 0xFB57, 0x9E1A, + 0xFB58, 0x9E1B, 0xFB59, 0x9E1C, 0xFB5A, 0x9E1D, 0xFB5B, 0x9E1E, 0xFB5C, 0x9E24, 0xFB5D, 0x9E27, 0xFB5E, 0x9E2E, 0xFB5F, 0x9E30, + 0xFB60, 0x9E34, 0xFB61, 0x9E3B, 0xFB62, 0x9E3C, 0xFB63, 0x9E40, 0xFB64, 0x9E4D, 0xFB65, 0x9E50, 0xFB66, 0x9E52, 0xFB67, 0x9E53, + 0xFB68, 0x9E54, 0xFB69, 0x9E56, 0xFB6A, 0x9E59, 0xFB6B, 0x9E5D, 0xFB6C, 0x9E5F, 0xFB6D, 0x9E60, 0xFB6E, 0x9E61, 0xFB6F, 0x9E62, + 0xFB70, 0x9E65, 0xFB71, 0x9E6E, 0xFB72, 0x9E6F, 0xFB73, 0x9E72, 0xFB74, 0x9E74, 0xFB75, 0x9E75, 0xFB76, 0x9E76, 0xFB77, 0x9E77, + 0xFB78, 0x9E78, 0xFB79, 0x9E79, 0xFB7A, 0x9E7A, 0xFB7B, 0x9E7B, 0xFB7C, 0x9E7C, 0xFB7D, 0x9E7D, 0xFB7E, 0x9E80, 0xFB80, 0x9E81, + 0xFB81, 0x9E83, 0xFB82, 0x9E84, 0xFB83, 0x9E85, 0xFB84, 0x9E86, 0xFB85, 0x9E89, 0xFB86, 0x9E8A, 0xFB87, 0x9E8C, 0xFB88, 0x9E8D, + 0xFB89, 0x9E8E, 0xFB8A, 0x9E8F, 0xFB8B, 0x9E90, 0xFB8C, 0x9E91, 0xFB8D, 0x9E94, 0xFB8E, 0x9E95, 0xFB8F, 0x9E96, 0xFB90, 0x9E97, + 0xFB91, 0x9E98, 0xFB92, 0x9E99, 0xFB93, 0x9E9A, 0xFB94, 0x9E9B, 0xFB95, 0x9E9C, 0xFB96, 0x9E9E, 0xFB97, 0x9EA0, 0xFB98, 0x9EA1, + 0xFB99, 0x9EA2, 0xFB9A, 0x9EA3, 0xFB9B, 0x9EA4, 0xFB9C, 0x9EA5, 0xFB9D, 0x9EA7, 0xFB9E, 0x9EA8, 0xFB9F, 0x9EA9, 0xFBA0, 0x9EAA, + 0xFC40, 0x9EAB, 0xFC41, 0x9EAC, 0xFC42, 0x9EAD, 0xFC43, 0x9EAE, 0xFC44, 0x9EAF, 0xFC45, 0x9EB0, 0xFC46, 0x9EB1, 0xFC47, 0x9EB2, + 0xFC48, 0x9EB3, 0xFC49, 0x9EB5, 0xFC4A, 0x9EB6, 0xFC4B, 0x9EB7, 0xFC4C, 0x9EB9, 0xFC4D, 0x9EBA, 0xFC4E, 0x9EBC, 0xFC4F, 0x9EBF, + 0xFC50, 0x9EC0, 0xFC51, 0x9EC1, 0xFC52, 0x9EC2, 0xFC53, 0x9EC3, 0xFC54, 0x9EC5, 0xFC55, 0x9EC6, 0xFC56, 0x9EC7, 0xFC57, 0x9EC8, + 0xFC58, 0x9ECA, 0xFC59, 0x9ECB, 0xFC5A, 0x9ECC, 0xFC5B, 0x9ED0, 0xFC5C, 0x9ED2, 0xFC5D, 0x9ED3, 0xFC5E, 0x9ED5, 0xFC5F, 0x9ED6, + 0xFC60, 0x9ED7, 0xFC61, 0x9ED9, 0xFC62, 0x9EDA, 0xFC63, 0x9EDE, 0xFC64, 0x9EE1, 0xFC65, 0x9EE3, 0xFC66, 0x9EE4, 0xFC67, 0x9EE6, + 0xFC68, 0x9EE8, 0xFC69, 0x9EEB, 0xFC6A, 0x9EEC, 0xFC6B, 0x9EED, 0xFC6C, 0x9EEE, 0xFC6D, 0x9EF0, 0xFC6E, 0x9EF1, 0xFC6F, 0x9EF2, + 0xFC70, 0x9EF3, 0xFC71, 0x9EF4, 0xFC72, 0x9EF5, 0xFC73, 0x9EF6, 0xFC74, 0x9EF7, 0xFC75, 0x9EF8, 0xFC76, 0x9EFA, 0xFC77, 0x9EFD, + 0xFC78, 0x9EFF, 0xFC79, 0x9F00, 0xFC7A, 0x9F01, 0xFC7B, 0x9F02, 0xFC7C, 0x9F03, 0xFC7D, 0x9F04, 0xFC7E, 0x9F05, 0xFC80, 0x9F06, + 0xFC81, 0x9F07, 0xFC82, 0x9F08, 0xFC83, 0x9F09, 0xFC84, 0x9F0A, 0xFC85, 0x9F0C, 0xFC86, 0x9F0F, 0xFC87, 0x9F11, 0xFC88, 0x9F12, + 0xFC89, 0x9F14, 0xFC8A, 0x9F15, 0xFC8B, 0x9F16, 0xFC8C, 0x9F18, 0xFC8D, 0x9F1A, 0xFC8E, 0x9F1B, 0xFC8F, 0x9F1C, 0xFC90, 0x9F1D, + 0xFC91, 0x9F1E, 0xFC92, 0x9F1F, 0xFC93, 0x9F21, 0xFC94, 0x9F23, 0xFC95, 0x9F24, 0xFC96, 0x9F25, 0xFC97, 0x9F26, 0xFC98, 0x9F27, + 0xFC99, 0x9F28, 0xFC9A, 0x9F29, 0xFC9B, 0x9F2A, 0xFC9C, 0x9F2B, 0xFC9D, 0x9F2D, 0xFC9E, 0x9F2E, 0xFC9F, 0x9F30, 0xFCA0, 0x9F31, + 0xFD40, 0x9F32, 0xFD41, 0x9F33, 0xFD42, 0x9F34, 0xFD43, 0x9F35, 0xFD44, 0x9F36, 0xFD45, 0x9F38, 0xFD46, 0x9F3A, 0xFD47, 0x9F3C, + 0xFD48, 0x9F3F, 0xFD49, 0x9F40, 0xFD4A, 0x9F41, 0xFD4B, 0x9F42, 0xFD4C, 0x9F43, 0xFD4D, 0x9F45, 0xFD4E, 0x9F46, 0xFD4F, 0x9F47, + 0xFD50, 0x9F48, 0xFD51, 0x9F49, 0xFD52, 0x9F4A, 0xFD53, 0x9F4B, 0xFD54, 0x9F4C, 0xFD55, 0x9F4D, 0xFD56, 0x9F4E, 0xFD57, 0x9F4F, + 0xFD58, 0x9F52, 0xFD59, 0x9F53, 0xFD5A, 0x9F54, 0xFD5B, 0x9F55, 0xFD5C, 0x9F56, 0xFD5D, 0x9F57, 0xFD5E, 0x9F58, 0xFD5F, 0x9F59, + 0xFD60, 0x9F5A, 0xFD61, 0x9F5B, 0xFD62, 0x9F5C, 0xFD63, 0x9F5D, 0xFD64, 0x9F5E, 0xFD65, 0x9F5F, 0xFD66, 0x9F60, 0xFD67, 0x9F61, + 0xFD68, 0x9F62, 0xFD69, 0x9F63, 0xFD6A, 0x9F64, 0xFD6B, 0x9F65, 0xFD6C, 0x9F66, 0xFD6D, 0x9F67, 0xFD6E, 0x9F68, 0xFD6F, 0x9F69, + 0xFD70, 0x9F6A, 0xFD71, 0x9F6B, 0xFD72, 0x9F6C, 0xFD73, 0x9F6D, 0xFD74, 0x9F6E, 0xFD75, 0x9F6F, 0xFD76, 0x9F70, 0xFD77, 0x9F71, + 0xFD78, 0x9F72, 0xFD79, 0x9F73, 0xFD7A, 0x9F74, 0xFD7B, 0x9F75, 0xFD7C, 0x9F76, 0xFD7D, 0x9F77, 0xFD7E, 0x9F78, 0xFD80, 0x9F79, + 0xFD81, 0x9F7A, 0xFD82, 0x9F7B, 0xFD83, 0x9F7C, 0xFD84, 0x9F7D, 0xFD85, 0x9F7E, 0xFD86, 0x9F81, 0xFD87, 0x9F82, 0xFD88, 0x9F8D, + 0xFD89, 0x9F8E, 0xFD8A, 0x9F8F, 0xFD8B, 0x9F90, 0xFD8C, 0x9F91, 0xFD8D, 0x9F92, 0xFD8E, 0x9F93, 0xFD8F, 0x9F94, 0xFD90, 0x9F95, + 0xFD91, 0x9F96, 0xFD92, 0x9F97, 0xFD93, 0x9F98, 0xFD94, 0x9F9C, 0xFD95, 0x9F9D, 0xFD96, 0x9F9E, 0xFD97, 0x9FA1, 0xFD98, 0x9FA2, + 0xFD99, 0x9FA3, 0xFD9A, 0x9FA4, 0xFD9B, 0x9FA5, 0xFD9C, 0xF92C, 0xFD9D, 0xF979, 0xFD9E, 0xF995, 0xFD9F, 0xF9E7, 0xFDA0, 0xF9F1, + 0xFE40, 0xFA0C, 0xFE41, 0xFA0D, 0xFE42, 0xFA0E, 0xFE43, 0xFA0F, 0xFE44, 0xFA11, 0xFE45, 0xFA13, 0xFE46, 0xFA14, 0xFE47, 0xFA18, + 0xFE48, 0xFA1F, 0xFE49, 0xFA20, 0xFE4A, 0xFA21, 0xFE4B, 0xFA23, 0xFE4C, 0xFA24, 0xFE4D, 0xFA27, 0xFE4E, 0xFA28, 0xFE4F, 0xFA29, + 0, 0 +}; +#endif + +#if FF_CODE_PAGE == 949 || FF_CODE_PAGE == 0 /* Korean */ +static const WCHAR uni2oem949[] = { /* Unicode --> Korean pairs */ + 0x00A1, 0xA2AE, 0x00A4, 0xA2B4, 0x00A7, 0xA1D7, 0x00A8, 0xA1A7, 0x00AA, 0xA8A3, 0x00AD, 0xA1A9, 0x00AE, 0xA2E7, 0x00B0, 0xA1C6, + 0x00B1, 0xA1BE, 0x00B2, 0xA9F7, 0x00B3, 0xA9F8, 0x00B4, 0xA2A5, 0x00B6, 0xA2D2, 0x00B7, 0xA1A4, 0x00B8, 0xA2AC, 0x00B9, 0xA9F6, + 0x00BA, 0xA8AC, 0x00BC, 0xA8F9, 0x00BD, 0xA8F6, 0x00BE, 0xA8FA, 0x00BF, 0xA2AF, 0x00C6, 0xA8A1, 0x00D0, 0xA8A2, 0x00D7, 0xA1BF, + 0x00D8, 0xA8AA, 0x00DE, 0xA8AD, 0x00DF, 0xA9AC, 0x00E6, 0xA9A1, 0x00F0, 0xA9A3, 0x00F7, 0xA1C0, 0x00F8, 0xA9AA, 0x00FE, 0xA9AD, + 0x0111, 0xA9A2, 0x0126, 0xA8A4, 0x0127, 0xA9A4, 0x0131, 0xA9A5, 0x0132, 0xA8A6, 0x0133, 0xA9A6, 0x0138, 0xA9A7, 0x013F, 0xA8A8, + 0x0140, 0xA9A8, 0x0141, 0xA8A9, 0x0142, 0xA9A9, 0x0149, 0xA9B0, 0x014A, 0xA8AF, 0x014B, 0xA9AF, 0x0152, 0xA8AB, 0x0153, 0xA9AB, + 0x0166, 0xA8AE, 0x0167, 0xA9AE, 0x02C7, 0xA2A7, 0x02D0, 0xA2B0, 0x02D8, 0xA2A8, 0x02D9, 0xA2AB, 0x02DA, 0xA2AA, 0x02DB, 0xA2AD, + 0x02DD, 0xA2A9, 0x0391, 0xA5C1, 0x0392, 0xA5C2, 0x0393, 0xA5C3, 0x0394, 0xA5C4, 0x0395, 0xA5C5, 0x0396, 0xA5C6, 0x0397, 0xA5C7, + 0x0398, 0xA5C8, 0x0399, 0xA5C9, 0x039A, 0xA5CA, 0x039B, 0xA5CB, 0x039C, 0xA5CC, 0x039D, 0xA5CD, 0x039E, 0xA5CE, 0x039F, 0xA5CF, + 0x03A0, 0xA5D0, 0x03A1, 0xA5D1, 0x03A3, 0xA5D2, 0x03A4, 0xA5D3, 0x03A5, 0xA5D4, 0x03A6, 0xA5D5, 0x03A7, 0xA5D6, 0x03A8, 0xA5D7, + 0x03A9, 0xA5D8, 0x03B1, 0xA5E1, 0x03B2, 0xA5E2, 0x03B3, 0xA5E3, 0x03B4, 0xA5E4, 0x03B5, 0xA5E5, 0x03B6, 0xA5E6, 0x03B7, 0xA5E7, + 0x03B8, 0xA5E8, 0x03B9, 0xA5E9, 0x03BA, 0xA5EA, 0x03BB, 0xA5EB, 0x03BC, 0xA5EC, 0x03BD, 0xA5ED, 0x03BE, 0xA5EE, 0x03BF, 0xA5EF, + 0x03C0, 0xA5F0, 0x03C1, 0xA5F1, 0x03C3, 0xA5F2, 0x03C4, 0xA5F3, 0x03C5, 0xA5F4, 0x03C6, 0xA5F5, 0x03C7, 0xA5F6, 0x03C8, 0xA5F7, + 0x03C9, 0xA5F8, 0x0401, 0xACA7, 0x0410, 0xACA1, 0x0411, 0xACA2, 0x0412, 0xACA3, 0x0413, 0xACA4, 0x0414, 0xACA5, 0x0415, 0xACA6, + 0x0416, 0xACA8, 0x0417, 0xACA9, 0x0418, 0xACAA, 0x0419, 0xACAB, 0x041A, 0xACAC, 0x041B, 0xACAD, 0x041C, 0xACAE, 0x041D, 0xACAF, + 0x041E, 0xACB0, 0x041F, 0xACB1, 0x0420, 0xACB2, 0x0421, 0xACB3, 0x0422, 0xACB4, 0x0423, 0xACB5, 0x0424, 0xACB6, 0x0425, 0xACB7, + 0x0426, 0xACB8, 0x0427, 0xACB9, 0x0428, 0xACBA, 0x0429, 0xACBB, 0x042A, 0xACBC, 0x042B, 0xACBD, 0x042C, 0xACBE, 0x042D, 0xACBF, + 0x042E, 0xACC0, 0x042F, 0xACC1, 0x0430, 0xACD1, 0x0431, 0xACD2, 0x0432, 0xACD3, 0x0433, 0xACD4, 0x0434, 0xACD5, 0x0435, 0xACD6, + 0x0436, 0xACD8, 0x0437, 0xACD9, 0x0438, 0xACDA, 0x0439, 0xACDB, 0x043A, 0xACDC, 0x043B, 0xACDD, 0x043C, 0xACDE, 0x043D, 0xACDF, + 0x043E, 0xACE0, 0x043F, 0xACE1, 0x0440, 0xACE2, 0x0441, 0xACE3, 0x0442, 0xACE4, 0x0443, 0xACE5, 0x0444, 0xACE6, 0x0445, 0xACE7, + 0x0446, 0xACE8, 0x0447, 0xACE9, 0x0448, 0xACEA, 0x0449, 0xACEB, 0x044A, 0xACEC, 0x044B, 0xACED, 0x044C, 0xACEE, 0x044D, 0xACEF, + 0x044E, 0xACF0, 0x044F, 0xACF1, 0x0451, 0xACD7, 0x2015, 0xA1AA, 0x2018, 0xA1AE, 0x2019, 0xA1AF, 0x201C, 0xA1B0, 0x201D, 0xA1B1, + 0x2020, 0xA2D3, 0x2021, 0xA2D4, 0x2025, 0xA1A5, 0x2026, 0xA1A6, 0x2030, 0xA2B6, 0x2032, 0xA1C7, 0x2033, 0xA1C8, 0x203B, 0xA1D8, + 0x2074, 0xA9F9, 0x207F, 0xA9FA, 0x2081, 0xA9FB, 0x2082, 0xA9FC, 0x2083, 0xA9FD, 0x2084, 0xA9FE, 0x20AC, 0xA2E6, 0x2103, 0xA1C9, + 0x2109, 0xA2B5, 0x2113, 0xA7A4, 0x2116, 0xA2E0, 0x2121, 0xA2E5, 0x2122, 0xA2E2, 0x2126, 0xA7D9, 0x212B, 0xA1CA, 0x2153, 0xA8F7, + 0x2154, 0xA8F8, 0x215B, 0xA8FB, 0x215C, 0xA8FC, 0x215D, 0xA8FD, 0x215E, 0xA8FE, 0x2160, 0xA5B0, 0x2161, 0xA5B1, 0x2162, 0xA5B2, + 0x2163, 0xA5B3, 0x2164, 0xA5B4, 0x2165, 0xA5B5, 0x2166, 0xA5B6, 0x2167, 0xA5B7, 0x2168, 0xA5B8, 0x2169, 0xA5B9, 0x2170, 0xA5A1, + 0x2171, 0xA5A2, 0x2172, 0xA5A3, 0x2173, 0xA5A4, 0x2174, 0xA5A5, 0x2175, 0xA5A6, 0x2176, 0xA5A7, 0x2177, 0xA5A8, 0x2178, 0xA5A9, + 0x2179, 0xA5AA, 0x2190, 0xA1E7, 0x2191, 0xA1E8, 0x2192, 0xA1E6, 0x2193, 0xA1E9, 0x2194, 0xA1EA, 0x2195, 0xA2D5, 0x2196, 0xA2D8, + 0x2197, 0xA2D6, 0x2198, 0xA2D9, 0x2199, 0xA2D7, 0x21D2, 0xA2A1, 0x21D4, 0xA2A2, 0x2200, 0xA2A3, 0x2202, 0xA1D3, 0x2203, 0xA2A4, + 0x2207, 0xA1D4, 0x2208, 0xA1F4, 0x220B, 0xA1F5, 0x220F, 0xA2B3, 0x2211, 0xA2B2, 0x221A, 0xA1EE, 0x221D, 0xA1F0, 0x221E, 0xA1C4, + 0x2220, 0xA1D0, 0x2225, 0xA1AB, 0x2227, 0xA1FC, 0x2228, 0xA1FD, 0x2229, 0xA1FB, 0x222A, 0xA1FA, 0x222B, 0xA1F2, 0x222C, 0xA1F3, + 0x222E, 0xA2B1, 0x2234, 0xA1C5, 0x2235, 0xA1F1, 0x223C, 0xA1AD, 0x223D, 0xA1EF, 0x2252, 0xA1D6, 0x2260, 0xA1C1, 0x2261, 0xA1D5, + 0x2264, 0xA1C2, 0x2265, 0xA1C3, 0x226A, 0xA1EC, 0x226B, 0xA1ED, 0x2282, 0xA1F8, 0x2283, 0xA1F9, 0x2286, 0xA1F6, 0x2287, 0xA1F7, + 0x2299, 0xA2C1, 0x22A5, 0xA1D1, 0x2312, 0xA1D2, 0x2460, 0xA8E7, 0x2461, 0xA8E8, 0x2462, 0xA8E9, 0x2463, 0xA8EA, 0x2464, 0xA8EB, + 0x2465, 0xA8EC, 0x2466, 0xA8ED, 0x2467, 0xA8EE, 0x2468, 0xA8EF, 0x2469, 0xA8F0, 0x246A, 0xA8F1, 0x246B, 0xA8F2, 0x246C, 0xA8F3, + 0x246D, 0xA8F4, 0x246E, 0xA8F5, 0x2474, 0xA9E7, 0x2475, 0xA9E8, 0x2476, 0xA9E9, 0x2477, 0xA9EA, 0x2478, 0xA9EB, 0x2479, 0xA9EC, + 0x247A, 0xA9ED, 0x247B, 0xA9EE, 0x247C, 0xA9EF, 0x247D, 0xA9F0, 0x247E, 0xA9F1, 0x247F, 0xA9F2, 0x2480, 0xA9F3, 0x2481, 0xA9F4, + 0x2482, 0xA9F5, 0x249C, 0xA9CD, 0x249D, 0xA9CE, 0x249E, 0xA9CF, 0x249F, 0xA9D0, 0x24A0, 0xA9D1, 0x24A1, 0xA9D2, 0x24A2, 0xA9D3, + 0x24A3, 0xA9D4, 0x24A4, 0xA9D5, 0x24A5, 0xA9D6, 0x24A6, 0xA9D7, 0x24A7, 0xA9D8, 0x24A8, 0xA9D9, 0x24A9, 0xA9DA, 0x24AA, 0xA9DB, + 0x24AB, 0xA9DC, 0x24AC, 0xA9DD, 0x24AD, 0xA9DE, 0x24AE, 0xA9DF, 0x24AF, 0xA9E0, 0x24B0, 0xA9E1, 0x24B1, 0xA9E2, 0x24B2, 0xA9E3, + 0x24B3, 0xA9E4, 0x24B4, 0xA9E5, 0x24B5, 0xA9E6, 0x24D0, 0xA8CD, 0x24D1, 0xA8CE, 0x24D2, 0xA8CF, 0x24D3, 0xA8D0, 0x24D4, 0xA8D1, + 0x24D5, 0xA8D2, 0x24D6, 0xA8D3, 0x24D7, 0xA8D4, 0x24D8, 0xA8D5, 0x24D9, 0xA8D6, 0x24DA, 0xA8D7, 0x24DB, 0xA8D8, 0x24DC, 0xA8D9, + 0x24DD, 0xA8DA, 0x24DE, 0xA8DB, 0x24DF, 0xA8DC, 0x24E0, 0xA8DD, 0x24E1, 0xA8DE, 0x24E2, 0xA8DF, 0x24E3, 0xA8E0, 0x24E4, 0xA8E1, + 0x24E5, 0xA8E2, 0x24E6, 0xA8E3, 0x24E7, 0xA8E4, 0x24E8, 0xA8E5, 0x24E9, 0xA8E6, 0x2500, 0xA6A1, 0x2501, 0xA6AC, 0x2502, 0xA6A2, + 0x2503, 0xA6AD, 0x250C, 0xA6A3, 0x250D, 0xA6C8, 0x250E, 0xA6C7, 0x250F, 0xA6AE, 0x2510, 0xA6A4, 0x2511, 0xA6C2, 0x2512, 0xA6C1, + 0x2513, 0xA6AF, 0x2514, 0xA6A6, 0x2515, 0xA6C6, 0x2516, 0xA6C5, 0x2517, 0xA6B1, 0x2518, 0xA6A5, 0x2519, 0xA6C4, 0x251A, 0xA6C3, + 0x251B, 0xA6B0, 0x251C, 0xA6A7, 0x251D, 0xA6BC, 0x251E, 0xA6C9, 0x251F, 0xA6CA, 0x2520, 0xA6B7, 0x2521, 0xA6CB, 0x2522, 0xA6CC, + 0x2523, 0xA6B2, 0x2524, 0xA6A9, 0x2525, 0xA6BE, 0x2526, 0xA6CD, 0x2527, 0xA6CE, 0x2528, 0xA6B9, 0x2529, 0xA6CF, 0x252A, 0xA6D0, + 0x252B, 0xA6B4, 0x252C, 0xA6A8, 0x252D, 0xA6D1, 0x252E, 0xA6D2, 0x252F, 0xA6B8, 0x2530, 0xA6BD, 0x2531, 0xA6D3, 0x2532, 0xA6D4, + 0x2533, 0xA6B3, 0x2534, 0xA6AA, 0x2535, 0xA6D5, 0x2536, 0xA6D6, 0x2537, 0xA6BA, 0x2538, 0xA6BF, 0x2539, 0xA6D7, 0x253A, 0xA6D8, + 0x253B, 0xA6B5, 0x253C, 0xA6AB, 0x253D, 0xA6D9, 0x253E, 0xA6DA, 0x253F, 0xA6BB, 0x2540, 0xA6DB, 0x2541, 0xA6DC, 0x2542, 0xA6C0, + 0x2543, 0xA6DD, 0x2544, 0xA6DE, 0x2545, 0xA6DF, 0x2546, 0xA6E0, 0x2547, 0xA6E1, 0x2548, 0xA6E2, 0x2549, 0xA6E3, 0x254A, 0xA6E4, + 0x254B, 0xA6B6, 0x2592, 0xA2C6, 0x25A0, 0xA1E1, 0x25A1, 0xA1E0, 0x25A3, 0xA2C3, 0x25A4, 0xA2C7, 0x25A5, 0xA2C8, 0x25A6, 0xA2CB, + 0x25A7, 0xA2CA, 0x25A8, 0xA2C9, 0x25A9, 0xA2CC, 0x25B2, 0xA1E3, 0x25B3, 0xA1E2, 0x25B6, 0xA2BA, 0x25B7, 0xA2B9, 0x25BC, 0xA1E5, + 0x25BD, 0xA1E4, 0x25C0, 0xA2B8, 0x25C1, 0xA2B7, 0x25C6, 0xA1DF, 0x25C7, 0xA1DE, 0x25C8, 0xA2C2, 0x25CB, 0xA1DB, 0x25CE, 0xA1DD, + 0x25CF, 0xA1DC, 0x25D0, 0xA2C4, 0x25D1, 0xA2C5, 0x2605, 0xA1DA, 0x2606, 0xA1D9, 0x260E, 0xA2CF, 0x260F, 0xA2CE, 0x261C, 0xA2D0, + 0x261E, 0xA2D1, 0x2640, 0xA1CF, 0x2642, 0xA1CE, 0x2660, 0xA2BC, 0x2661, 0xA2BD, 0x2663, 0xA2C0, 0x2664, 0xA2BB, 0x2665, 0xA2BE, + 0x2667, 0xA2BF, 0x2668, 0xA2CD, 0x2669, 0xA2DB, 0x266A, 0xA2DC, 0x266C, 0xA2DD, 0x266D, 0xA2DA, 0x3000, 0xA1A1, 0x3001, 0xA1A2, + 0x3002, 0xA1A3, 0x3003, 0xA1A8, 0x3008, 0xA1B4, 0x3009, 0xA1B5, 0x300A, 0xA1B6, 0x300B, 0xA1B7, 0x300C, 0xA1B8, 0x300D, 0xA1B9, + 0x300E, 0xA1BA, 0x300F, 0xA1BB, 0x3010, 0xA1BC, 0x3011, 0xA1BD, 0x3013, 0xA1EB, 0x3014, 0xA1B2, 0x3015, 0xA1B3, 0x3041, 0xAAA1, + 0x3042, 0xAAA2, 0x3043, 0xAAA3, 0x3044, 0xAAA4, 0x3045, 0xAAA5, 0x3046, 0xAAA6, 0x3047, 0xAAA7, 0x3048, 0xAAA8, 0x3049, 0xAAA9, + 0x304A, 0xAAAA, 0x304B, 0xAAAB, 0x304C, 0xAAAC, 0x304D, 0xAAAD, 0x304E, 0xAAAE, 0x304F, 0xAAAF, 0x3050, 0xAAB0, 0x3051, 0xAAB1, + 0x3052, 0xAAB2, 0x3053, 0xAAB3, 0x3054, 0xAAB4, 0x3055, 0xAAB5, 0x3056, 0xAAB6, 0x3057, 0xAAB7, 0x3058, 0xAAB8, 0x3059, 0xAAB9, + 0x305A, 0xAABA, 0x305B, 0xAABB, 0x305C, 0xAABC, 0x305D, 0xAABD, 0x305E, 0xAABE, 0x305F, 0xAABF, 0x3060, 0xAAC0, 0x3061, 0xAAC1, + 0x3062, 0xAAC2, 0x3063, 0xAAC3, 0x3064, 0xAAC4, 0x3065, 0xAAC5, 0x3066, 0xAAC6, 0x3067, 0xAAC7, 0x3068, 0xAAC8, 0x3069, 0xAAC9, + 0x306A, 0xAACA, 0x306B, 0xAACB, 0x306C, 0xAACC, 0x306D, 0xAACD, 0x306E, 0xAACE, 0x306F, 0xAACF, 0x3070, 0xAAD0, 0x3071, 0xAAD1, + 0x3072, 0xAAD2, 0x3073, 0xAAD3, 0x3074, 0xAAD4, 0x3075, 0xAAD5, 0x3076, 0xAAD6, 0x3077, 0xAAD7, 0x3078, 0xAAD8, 0x3079, 0xAAD9, + 0x307A, 0xAADA, 0x307B, 0xAADB, 0x307C, 0xAADC, 0x307D, 0xAADD, 0x307E, 0xAADE, 0x307F, 0xAADF, 0x3080, 0xAAE0, 0x3081, 0xAAE1, + 0x3082, 0xAAE2, 0x3083, 0xAAE3, 0x3084, 0xAAE4, 0x3085, 0xAAE5, 0x3086, 0xAAE6, 0x3087, 0xAAE7, 0x3088, 0xAAE8, 0x3089, 0xAAE9, + 0x308A, 0xAAEA, 0x308B, 0xAAEB, 0x308C, 0xAAEC, 0x308D, 0xAAED, 0x308E, 0xAAEE, 0x308F, 0xAAEF, 0x3090, 0xAAF0, 0x3091, 0xAAF1, + 0x3092, 0xAAF2, 0x3093, 0xAAF3, 0x30A1, 0xABA1, 0x30A2, 0xABA2, 0x30A3, 0xABA3, 0x30A4, 0xABA4, 0x30A5, 0xABA5, 0x30A6, 0xABA6, + 0x30A7, 0xABA7, 0x30A8, 0xABA8, 0x30A9, 0xABA9, 0x30AA, 0xABAA, 0x30AB, 0xABAB, 0x30AC, 0xABAC, 0x30AD, 0xABAD, 0x30AE, 0xABAE, + 0x30AF, 0xABAF, 0x30B0, 0xABB0, 0x30B1, 0xABB1, 0x30B2, 0xABB2, 0x30B3, 0xABB3, 0x30B4, 0xABB4, 0x30B5, 0xABB5, 0x30B6, 0xABB6, + 0x30B7, 0xABB7, 0x30B8, 0xABB8, 0x30B9, 0xABB9, 0x30BA, 0xABBA, 0x30BB, 0xABBB, 0x30BC, 0xABBC, 0x30BD, 0xABBD, 0x30BE, 0xABBE, + 0x30BF, 0xABBF, 0x30C0, 0xABC0, 0x30C1, 0xABC1, 0x30C2, 0xABC2, 0x30C3, 0xABC3, 0x30C4, 0xABC4, 0x30C5, 0xABC5, 0x30C6, 0xABC6, + 0x30C7, 0xABC7, 0x30C8, 0xABC8, 0x30C9, 0xABC9, 0x30CA, 0xABCA, 0x30CB, 0xABCB, 0x30CC, 0xABCC, 0x30CD, 0xABCD, 0x30CE, 0xABCE, + 0x30CF, 0xABCF, 0x30D0, 0xABD0, 0x30D1, 0xABD1, 0x30D2, 0xABD2, 0x30D3, 0xABD3, 0x30D4, 0xABD4, 0x30D5, 0xABD5, 0x30D6, 0xABD6, + 0x30D7, 0xABD7, 0x30D8, 0xABD8, 0x30D9, 0xABD9, 0x30DA, 0xABDA, 0x30DB, 0xABDB, 0x30DC, 0xABDC, 0x30DD, 0xABDD, 0x30DE, 0xABDE, + 0x30DF, 0xABDF, 0x30E0, 0xABE0, 0x30E1, 0xABE1, 0x30E2, 0xABE2, 0x30E3, 0xABE3, 0x30E4, 0xABE4, 0x30E5, 0xABE5, 0x30E6, 0xABE6, + 0x30E7, 0xABE7, 0x30E8, 0xABE8, 0x30E9, 0xABE9, 0x30EA, 0xABEA, 0x30EB, 0xABEB, 0x30EC, 0xABEC, 0x30ED, 0xABED, 0x30EE, 0xABEE, + 0x30EF, 0xABEF, 0x30F0, 0xABF0, 0x30F1, 0xABF1, 0x30F2, 0xABF2, 0x30F3, 0xABF3, 0x30F4, 0xABF4, 0x30F5, 0xABF5, 0x30F6, 0xABF6, + 0x3131, 0xA4A1, 0x3132, 0xA4A2, 0x3133, 0xA4A3, 0x3134, 0xA4A4, 0x3135, 0xA4A5, 0x3136, 0xA4A6, 0x3137, 0xA4A7, 0x3138, 0xA4A8, + 0x3139, 0xA4A9, 0x313A, 0xA4AA, 0x313B, 0xA4AB, 0x313C, 0xA4AC, 0x313D, 0xA4AD, 0x313E, 0xA4AE, 0x313F, 0xA4AF, 0x3140, 0xA4B0, + 0x3141, 0xA4B1, 0x3142, 0xA4B2, 0x3143, 0xA4B3, 0x3144, 0xA4B4, 0x3145, 0xA4B5, 0x3146, 0xA4B6, 0x3147, 0xA4B7, 0x3148, 0xA4B8, + 0x3149, 0xA4B9, 0x314A, 0xA4BA, 0x314B, 0xA4BB, 0x314C, 0xA4BC, 0x314D, 0xA4BD, 0x314E, 0xA4BE, 0x314F, 0xA4BF, 0x3150, 0xA4C0, + 0x3151, 0xA4C1, 0x3152, 0xA4C2, 0x3153, 0xA4C3, 0x3154, 0xA4C4, 0x3155, 0xA4C5, 0x3156, 0xA4C6, 0x3157, 0xA4C7, 0x3158, 0xA4C8, + 0x3159, 0xA4C9, 0x315A, 0xA4CA, 0x315B, 0xA4CB, 0x315C, 0xA4CC, 0x315D, 0xA4CD, 0x315E, 0xA4CE, 0x315F, 0xA4CF, 0x3160, 0xA4D0, + 0x3161, 0xA4D1, 0x3162, 0xA4D2, 0x3163, 0xA4D3, 0x3164, 0xA4D4, 0x3165, 0xA4D5, 0x3166, 0xA4D6, 0x3167, 0xA4D7, 0x3168, 0xA4D8, + 0x3169, 0xA4D9, 0x316A, 0xA4DA, 0x316B, 0xA4DB, 0x316C, 0xA4DC, 0x316D, 0xA4DD, 0x316E, 0xA4DE, 0x316F, 0xA4DF, 0x3170, 0xA4E0, + 0x3171, 0xA4E1, 0x3172, 0xA4E2, 0x3173, 0xA4E3, 0x3174, 0xA4E4, 0x3175, 0xA4E5, 0x3176, 0xA4E6, 0x3177, 0xA4E7, 0x3178, 0xA4E8, + 0x3179, 0xA4E9, 0x317A, 0xA4EA, 0x317B, 0xA4EB, 0x317C, 0xA4EC, 0x317D, 0xA4ED, 0x317E, 0xA4EE, 0x317F, 0xA4EF, 0x3180, 0xA4F0, + 0x3181, 0xA4F1, 0x3182, 0xA4F2, 0x3183, 0xA4F3, 0x3184, 0xA4F4, 0x3185, 0xA4F5, 0x3186, 0xA4F6, 0x3187, 0xA4F7, 0x3188, 0xA4F8, + 0x3189, 0xA4F9, 0x318A, 0xA4FA, 0x318B, 0xA4FB, 0x318C, 0xA4FC, 0x318D, 0xA4FD, 0x318E, 0xA4FE, 0x3200, 0xA9B1, 0x3201, 0xA9B2, + 0x3202, 0xA9B3, 0x3203, 0xA9B4, 0x3204, 0xA9B5, 0x3205, 0xA9B6, 0x3206, 0xA9B7, 0x3207, 0xA9B8, 0x3208, 0xA9B9, 0x3209, 0xA9BA, + 0x320A, 0xA9BB, 0x320B, 0xA9BC, 0x320C, 0xA9BD, 0x320D, 0xA9BE, 0x320E, 0xA9BF, 0x320F, 0xA9C0, 0x3210, 0xA9C1, 0x3211, 0xA9C2, + 0x3212, 0xA9C3, 0x3213, 0xA9C4, 0x3214, 0xA9C5, 0x3215, 0xA9C6, 0x3216, 0xA9C7, 0x3217, 0xA9C8, 0x3218, 0xA9C9, 0x3219, 0xA9CA, + 0x321A, 0xA9CB, 0x321B, 0xA9CC, 0x321C, 0xA2DF, 0x3260, 0xA8B1, 0x3261, 0xA8B2, 0x3262, 0xA8B3, 0x3263, 0xA8B4, 0x3264, 0xA8B5, + 0x3265, 0xA8B6, 0x3266, 0xA8B7, 0x3267, 0xA8B8, 0x3268, 0xA8B9, 0x3269, 0xA8BA, 0x326A, 0xA8BB, 0x326B, 0xA8BC, 0x326C, 0xA8BD, + 0x326D, 0xA8BE, 0x326E, 0xA8BF, 0x326F, 0xA8C0, 0x3270, 0xA8C1, 0x3271, 0xA8C2, 0x3272, 0xA8C3, 0x3273, 0xA8C4, 0x3274, 0xA8C5, + 0x3275, 0xA8C6, 0x3276, 0xA8C7, 0x3277, 0xA8C8, 0x3278, 0xA8C9, 0x3279, 0xA8CA, 0x327A, 0xA8CB, 0x327B, 0xA8CC, 0x327F, 0xA2DE, + 0x3380, 0xA7C9, 0x3381, 0xA7CA, 0x3382, 0xA7CB, 0x3383, 0xA7CC, 0x3384, 0xA7CD, 0x3388, 0xA7BA, 0x3389, 0xA7BB, 0x338A, 0xA7DC, + 0x338B, 0xA7DD, 0x338C, 0xA7DE, 0x338D, 0xA7B6, 0x338E, 0xA7B7, 0x338F, 0xA7B8, 0x3390, 0xA7D4, 0x3391, 0xA7D5, 0x3392, 0xA7D6, + 0x3393, 0xA7D7, 0x3394, 0xA7D8, 0x3395, 0xA7A1, 0x3396, 0xA7A2, 0x3397, 0xA7A3, 0x3398, 0xA7A5, 0x3399, 0xA7AB, 0x339A, 0xA7AC, + 0x339B, 0xA7AD, 0x339C, 0xA7AE, 0x339D, 0xA7AF, 0x339E, 0xA7B0, 0x339F, 0xA7B1, 0x33A0, 0xA7B2, 0x33A1, 0xA7B3, 0x33A2, 0xA7B4, + 0x33A3, 0xA7A7, 0x33A4, 0xA7A8, 0x33A5, 0xA7A9, 0x33A6, 0xA7AA, 0x33A7, 0xA7BD, 0x33A8, 0xA7BE, 0x33A9, 0xA7E5, 0x33AA, 0xA7E6, + 0x33AB, 0xA7E7, 0x33AC, 0xA7E8, 0x33AD, 0xA7E1, 0x33AE, 0xA7E2, 0x33AF, 0xA7E3, 0x33B0, 0xA7BF, 0x33B1, 0xA7C0, 0x33B2, 0xA7C1, + 0x33B3, 0xA7C2, 0x33B4, 0xA7C3, 0x33B5, 0xA7C4, 0x33B6, 0xA7C5, 0x33B7, 0xA7C6, 0x33B8, 0xA7C7, 0x33B9, 0xA7C8, 0x33BA, 0xA7CE, + 0x33BB, 0xA7CF, 0x33BC, 0xA7D0, 0x33BD, 0xA7D1, 0x33BE, 0xA7D2, 0x33BF, 0xA7D3, 0x33C0, 0xA7DA, 0x33C1, 0xA7DB, 0x33C2, 0xA2E3, + 0x33C3, 0xA7EC, 0x33C4, 0xA7A6, 0x33C5, 0xA7E0, 0x33C6, 0xA7EF, 0x33C7, 0xA2E1, 0x33C8, 0xA7BC, 0x33C9, 0xA7ED, 0x33CA, 0xA7B5, + 0x33CF, 0xA7B9, 0x33D0, 0xA7EA, 0x33D3, 0xA7EB, 0x33D6, 0xA7DF, 0x33D8, 0xA2E4, 0x33DB, 0xA7E4, 0x33DC, 0xA7EE, 0x33DD, 0xA7E9, + 0x4E00, 0xECE9, 0x4E01, 0xEFCB, 0x4E03, 0xF6D2, 0x4E07, 0xD8B2, 0x4E08, 0xEDDB, 0x4E09, 0xDFB2, 0x4E0A, 0xDFBE, 0x4E0B, 0xF9BB, + 0x4E0D, 0xDCF4, 0x4E11, 0xF5E4, 0x4E14, 0xF3A6, 0x4E15, 0xDDE0, 0x4E16, 0xE1A6, 0x4E18, 0xCEF8, 0x4E19, 0xDCB0, 0x4E1E, 0xE3AA, + 0x4E2D, 0xF1E9, 0x4E32, 0xCDFA, 0x4E38, 0xFCAF, 0x4E39, 0xD3A1, 0x4E3B, 0xF1AB, 0x4E42, 0xE7D1, 0x4E43, 0xD2AC, 0x4E45, 0xCEF9, + 0x4E4B, 0xF1FD, 0x4E4D, 0xDEBF, 0x4E4E, 0xFBBA, 0x4E4F, 0xF9B9, 0x4E56, 0xCED2, 0x4E58, 0xE3AB, 0x4E59, 0xEBE0, 0x4E5D, 0xCEFA, + 0x4E5E, 0xCBF7, 0x4E5F, 0xE5A5, 0x4E6B, 0xCAE1, 0x4E6D, 0xD4CC, 0x4E73, 0xEAE1, 0x4E76, 0xDCE3, 0x4E77, 0xDFAD, 0x4E7E, 0xCBEB, + 0x4E82, 0xD5AF, 0x4E86, 0xD6F5, 0x4E88, 0xE5F8, 0x4E8B, 0xDEC0, 0x4E8C, 0xECA3, 0x4E8E, 0xE9CD, 0x4E90, 0xEAA7, 0x4E91, 0xE9F6, + 0x4E92, 0xFBBB, 0x4E94, 0xE7E9, 0x4E95, 0xEFCC, 0x4E98, 0xD0E6, 0x4E9B, 0xDEC1, 0x4E9E, 0xE4AC, 0x4EA1, 0xD8CC, 0x4EA2, 0xF9F1, + 0x4EA4, 0xCEDF, 0x4EA5, 0xFAA4, 0x4EA6, 0xE6B2, 0x4EA8, 0xFAFB, 0x4EAB, 0xFABD, 0x4EAC, 0xCCC8, 0x4EAD, 0xEFCD, 0x4EAE, 0xD5D5, + 0x4EB6, 0xD3A2, 0x4EBA, 0xECD1, 0x4EC0, 0xE4A7, 0x4EC1, 0xECD2, 0x4EC4, 0xF6B1, 0x4EC7, 0xCEFB, 0x4ECA, 0xD0D1, 0x4ECB, 0xCBBF, + 0x4ECD, 0xEDA4, 0x4ED4, 0xEDA8, 0x4ED5, 0xDEC2, 0x4ED6, 0xF6E2, 0x4ED7, 0xEDDC, 0x4ED8, 0xDCF5, 0x4ED9, 0xE0B9, 0x4EDD, 0xD4CE, + 0x4EDF, 0xF4B5, 0x4EE3, 0xD3DB, 0x4EE4, 0xD6B5, 0x4EE5, 0xECA4, 0x4EF0, 0xE4E6, 0x4EF2, 0xF1EA, 0x4EF6, 0xCBEC, 0x4EF7, 0xCBC0, + 0x4EFB, 0xECF2, 0x4F01, 0xD0EA, 0x4F09, 0xF9F2, 0x4F0A, 0xECA5, 0x4F0B, 0xD0DF, 0x4F0D, 0xE7EA, 0x4F0E, 0xD0EB, 0x4F0F, 0xDCD1, + 0x4F10, 0xDBE9, 0x4F11, 0xFDCC, 0x4F2F, 0xDBD7, 0x4F34, 0xDAE1, 0x4F36, 0xD6B6, 0x4F38, 0xE3DF, 0x4F3A, 0xDEC3, 0x4F3C, 0xDEC4, + 0x4F3D, 0xCAA1, 0x4F43, 0xEEEC, 0x4F46, 0xD3A3, 0x4F47, 0xEEB7, 0x4F48, 0xF8CF, 0x4F4D, 0xEAC8, 0x4F4E, 0xEEB8, 0x4F4F, 0xF1AC, + 0x4F50, 0xF1A5, 0x4F51, 0xE9CE, 0x4F55, 0xF9BC, 0x4F59, 0xE5F9, 0x4F5A, 0xECEA, 0x4F5B, 0xDDD6, 0x4F5C, 0xEDC2, 0x4F69, 0xF8A5, + 0x4F6F, 0xE5BA, 0x4F70, 0xDBD8, 0x4F73, 0xCAA2, 0x4F76, 0xD1CD, 0x4F7A, 0xEEED, 0x4F7E, 0xECEB, 0x4F7F, 0xDEC5, 0x4F81, 0xE3E0, + 0x4F83, 0xCAC9, 0x4F84, 0xF2E9, 0x4F86, 0xD5CE, 0x4F88, 0xF6B6, 0x4F8A, 0xCEC2, 0x4F8B, 0xD6C7, 0x4F8D, 0xE3B4, 0x4F8F, 0xF1AD, + 0x4F91, 0xEAE2, 0x4F96, 0xD7C2, 0x4F98, 0xF3A7, 0x4F9B, 0xCDEA, 0x4F9D, 0xEBEE, 0x4FAE, 0xD9B2, 0x4FAF, 0xFDA5, 0x4FB5, 0xF6D5, + 0x4FB6, 0xD5E2, 0x4FBF, 0xF8B5, 0x4FC2, 0xCCF5, 0x4FC3, 0xF5B5, 0x4FC4, 0xE4AD, 0x4FC9, 0xE7EB, 0x4FCA, 0xF1D5, 0x4FCE, 0xF0BB, + 0x4FD1, 0xE9B5, 0x4FD3, 0xCCC9, 0x4FD4, 0xFAD5, 0x4FD7, 0xE1D4, 0x4FDA, 0xD7D6, 0x4FDD, 0xDCC1, 0x4FDF, 0xDEC6, 0x4FE0, 0xFAEF, + 0x4FE1, 0xE3E1, 0x4FEE, 0xE1F3, 0x4FEF, 0xDCF6, 0x4FF1, 0xCEFC, 0x4FF3, 0xDBC4, 0x4FF5, 0xF8F1, 0x4FF8, 0xDCE4, 0x4FFA, 0xE5EF, + 0x5002, 0xDCB1, 0x5006, 0xD5D6, 0x5009, 0xF3DA, 0x500B, 0xCBC1, 0x500D, 0xDBC3, 0x5011, 0xD9FA, 0x5012, 0xD3EE, 0x5016, 0xFAB8, + 0x5019, 0xFDA6, 0x501A, 0xEBEF, 0x501C, 0xF4A6, 0x501E, 0xCCCA, 0x501F, 0xF3A8, 0x5021, 0xF3DB, 0x5023, 0xDBA7, 0x5024, 0xF6B7, + 0x5026, 0xCFE6, 0x5027, 0xF0F2, 0x5028, 0xCBDA, 0x502A, 0xE7D2, 0x502B, 0xD7C3, 0x502C, 0xF6F0, 0x502D, 0xE8DE, 0x503B, 0xE5A6, + 0x5043, 0xE5E7, 0x5047, 0xCAA3, 0x5048, 0xCCA7, 0x5049, 0xEAC9, 0x504F, 0xF8B6, 0x5055, 0xFAA5, 0x505A, 0xF1AE, 0x505C, 0xEFCE, + 0x5065, 0xCBED, 0x5074, 0xF6B0, 0x5075, 0xEFCF, 0x5076, 0xE9CF, 0x5078, 0xF7DE, 0x5080, 0xCED3, 0x5085, 0xDCF7, 0x508D, 0xDBA8, + 0x5091, 0xCBF8, 0x5098, 0xDFA1, 0x5099, 0xDDE1, 0x50AC, 0xF5CA, 0x50AD, 0xE9B6, 0x50B2, 0xE7EC, 0x50B3, 0xEEEE, 0x50B5, 0xF3F0, + 0x50B7, 0xDFBF, 0x50BE, 0xCCCB, 0x50C5, 0xD0C1, 0x50C9, 0xF4D2, 0x50CA, 0xE0BA, 0x50CF, 0xDFC0, 0x50D1, 0xCEE0, 0x50D5, 0xDCD2, + 0x50D6, 0xFDEA, 0x50DA, 0xD6F6, 0x50DE, 0xEACA, 0x50E5, 0xE8E9, 0x50E7, 0xE3AC, 0x50ED, 0xF3D0, 0x50F9, 0xCAA4, 0x50FB, 0xDBF8, + 0x50FF, 0xDEC7, 0x5100, 0xEBF0, 0x5101, 0xF1D6, 0x5104, 0xE5E2, 0x5106, 0xCCCC, 0x5109, 0xCBFB, 0x5112, 0xEAE3, 0x511F, 0xDFC1, + 0x5121, 0xD6ED, 0x512A, 0xE9D0, 0x5132, 0xEEB9, 0x5137, 0xD5E3, 0x513A, 0xD1D3, 0x513C, 0xE5F0, 0x5140, 0xE8B4, 0x5141, 0xEBC3, + 0x5143, 0xEAAA, 0x5144, 0xFAFC, 0x5145, 0xF5F6, 0x5146, 0xF0BC, 0x5147, 0xFDD4, 0x5148, 0xE0BB, 0x5149, 0xCEC3, 0x514B, 0xD0BA, + 0x514C, 0xF7BA, 0x514D, 0xD8F3, 0x514E, 0xF7CD, 0x5152, 0xE4AE, 0x515C, 0xD4DF, 0x5162, 0xD0E7, 0x5165, 0xECFD, 0x5167, 0xD2AE, + 0x5168, 0xEEEF, 0x5169, 0xD5D7, 0x516A, 0xEAE4, 0x516B, 0xF8A2, 0x516C, 0xCDEB, 0x516D, 0xD7BF, 0x516E, 0xFBB1, 0x5171, 0xCDEC, + 0x5175, 0xDCB2, 0x5176, 0xD0EC, 0x5177, 0xCEFD, 0x5178, 0xEEF0, 0x517C, 0xCCC2, 0x5180, 0xD0ED, 0x5186, 0xE5F7, 0x518A, 0xF3FC, + 0x518D, 0xEEA2, 0x5192, 0xD9B3, 0x5195, 0xD8F4, 0x5197, 0xE9B7, 0x51A0, 0xCEAE, 0x51A5, 0xD9A2, 0x51AA, 0xD8F1, 0x51AC, 0xD4CF, + 0x51B6, 0xE5A7, 0x51B7, 0xD5D2, 0x51BD, 0xD6A9, 0x51C4, 0xF4A2, 0x51C6, 0xF1D7, 0x51C9, 0xD5D8, 0x51CB, 0xF0BD, 0x51CC, 0xD7D0, + 0x51CD, 0xD4D0, 0x51DC, 0xD7CF, 0x51DD, 0xEBEA, 0x51DE, 0xFDEB, 0x51E1, 0xDBED, 0x51F0, 0xFCC5, 0x51F1, 0xCBC2, 0x51F6, 0xFDD5, + 0x51F8, 0xF4C8, 0x51F9, 0xE8EA, 0x51FA, 0xF5F3, 0x51FD, 0xF9DE, 0x5200, 0xD3EF, 0x5203, 0xECD3, 0x5206, 0xDDC2, 0x5207, 0xEFB7, + 0x5208, 0xE7D4, 0x520A, 0xCACA, 0x520E, 0xD9FB, 0x5211, 0xFAFD, 0x5217, 0xD6AA, 0x521D, 0xF4F8, 0x5224, 0xF7F7, 0x5225, 0xDCAC, + 0x5229, 0xD7D7, 0x522A, 0xDFA2, 0x522E, 0xCEBE, 0x5230, 0xD3F0, 0x5236, 0xF0A4, 0x5237, 0xE1EC, 0x5238, 0xCFE7, 0x5239, 0xF3CB, + 0x523A, 0xEDA9, 0x523B, 0xCABE, 0x5243, 0xF4EF, 0x5247, 0xF6CE, 0x524A, 0xDEFB, 0x524B, 0xD0BB, 0x524C, 0xD5B7, 0x524D, 0xEEF1, + 0x5254, 0xF4A8, 0x5256, 0xDCF8, 0x525B, 0xCBA7, 0x525D, 0xDACE, 0x5261, 0xE0E6, 0x5269, 0xEDA5, 0x526A, 0xEEF2, 0x526F, 0xDCF9, + 0x5272, 0xF9DC, 0x5275, 0xF3DC, 0x527D, 0xF8F2, 0x527F, 0xF4F9, 0x5283, 0xFCF1, 0x5287, 0xD0BC, 0x5288, 0xDBF9, 0x5289, 0xD7B1, + 0x528D, 0xCBFC, 0x5291, 0xF0A5, 0x5292, 0xCBFD, 0x529B, 0xD5F4, 0x529F, 0xCDED, 0x52A0, 0xCAA5, 0x52A3, 0xD6AB, 0x52A4, 0xD0C2, + 0x52A9, 0xF0BE, 0x52AA, 0xD2BD, 0x52AB, 0xCCA4, 0x52BE, 0xFAB6, 0x52C1, 0xCCCD, 0x52C3, 0xDAFA, 0x52C5, 0xF6CF, 0x52C7, 0xE9B8, + 0x52C9, 0xD8F5, 0x52CD, 0xCCCE, 0x52D2, 0xD7CD, 0x52D5, 0xD4D1, 0x52D6, 0xE9ED, 0x52D8, 0xCAEB, 0x52D9, 0xD9E2, 0x52DB, 0xFDB2, + 0x52DD, 0xE3AD, 0x52DE, 0xD6CC, 0x52DF, 0xD9B4, 0x52E2, 0xE1A7, 0x52E3, 0xEED3, 0x52E4, 0xD0C3, 0x52F3, 0xFDB3, 0x52F5, 0xD5E4, + 0x52F8, 0xCFE8, 0x52FA, 0xEDC3, 0x52FB, 0xD0B2, 0x52FE, 0xCEFE, 0x52FF, 0xDAA8, 0x5305, 0xF8D0, 0x5308, 0xFDD6, 0x530D, 0xF8D1, + 0x530F, 0xF8D2, 0x5310, 0xDCD3, 0x5315, 0xDDE2, 0x5316, 0xFBF9, 0x5317, 0xDDC1, 0x5319, 0xE3B5, 0x5320, 0xEDDD, 0x5321, 0xCEC4, + 0x5323, 0xCBA1, 0x532A, 0xDDE3, 0x532F, 0xFCDD, 0x5339, 0xF9AF, 0x533F, 0xD2FB, 0x5340, 0xCFA1, 0x5341, 0xE4A8, 0x5343, 0xF4B6, + 0x5344, 0xECFE, 0x5347, 0xE3AE, 0x5348, 0xE7ED, 0x5349, 0xFDC1, 0x534A, 0xDAE2, 0x534D, 0xD8B3, 0x5351, 0xDDE4, 0x5352, 0xF0EF, + 0x5353, 0xF6F1, 0x5354, 0xFAF0, 0x5357, 0xD1F5, 0x535A, 0xDACF, 0x535C, 0xDCD4, 0x535E, 0xDCA6, 0x5360, 0xEFBF, 0x5366, 0xCECF, + 0x5368, 0xE0D9, 0x536F, 0xD9D6, 0x5370, 0xECD4, 0x5371, 0xEACB, 0x5374, 0xCABF, 0x5375, 0xD5B0, 0x5377, 0xCFE9, 0x537D, 0xF1ED, + 0x537F, 0xCCCF, 0x5384, 0xE4F8, 0x5393, 0xE4ED, 0x5398, 0xD7D8, 0x539A, 0xFDA7, 0x539F, 0xEAAB, 0x53A0, 0xF6B2, 0x53A5, 0xCFF0, + 0x53A6, 0xF9BD, 0x53AD, 0xE6F4, 0x53BB, 0xCBDB, 0x53C3, 0xF3D1, 0x53C8, 0xE9D1, 0x53C9, 0xF3A9, 0x53CA, 0xD0E0, 0x53CB, 0xE9D2, + 0x53CD, 0xDAE3, 0x53D4, 0xE2D2, 0x53D6, 0xF6A2, 0x53D7, 0xE1F4, 0x53DB, 0xDAE4, 0x53E1, 0xE7D5, 0x53E2, 0xF5BF, 0x53E3, 0xCFA2, + 0x53E4, 0xCDAF, 0x53E5, 0xCFA3, 0x53E9, 0xCDB0, 0x53EA, 0xF1FE, 0x53EB, 0xD0A3, 0x53EC, 0xE1AF, 0x53ED, 0xF8A3, 0x53EF, 0xCAA6, + 0x53F0, 0xF7BB, 0x53F1, 0xF2EA, 0x53F2, 0xDEC8, 0x53F3, 0xE9D3, 0x53F8, 0xDEC9, 0x5403, 0xFDDE, 0x5404, 0xCAC0, 0x5408, 0xF9EA, + 0x5409, 0xD1CE, 0x540A, 0xEED4, 0x540C, 0xD4D2, 0x540D, 0xD9A3, 0x540E, 0xFDA8, 0x540F, 0xD7D9, 0x5410, 0xF7CE, 0x5411, 0xFABE, + 0x541B, 0xCFD6, 0x541D, 0xD7F0, 0x541F, 0xEBE1, 0x5420, 0xF8C5, 0x5426, 0xDCFA, 0x5429, 0xDDC3, 0x542B, 0xF9DF, 0x5433, 0xE7EF, + 0x5438, 0xFDE5, 0x5439, 0xF6A3, 0x543B, 0xD9FC, 0x543C, 0xFDA9, 0x543E, 0xE7EE, 0x5442, 0xD5E5, 0x5448, 0xEFD0, 0x544A, 0xCDB1, + 0x5451, 0xF7A2, 0x5468, 0xF1B2, 0x546A, 0xF1B1, 0x5471, 0xCDB2, 0x5473, 0xDAAB, 0x5475, 0xCAA7, 0x547B, 0xE3E2, 0x547C, 0xFBBC, + 0x547D, 0xD9A4, 0x5480, 0xEEBA, 0x5486, 0xF8D3, 0x548C, 0xFBFA, 0x548E, 0xCFA4, 0x5490, 0xDCFB, 0x54A4, 0xF6E3, 0x54A8, 0xEDAA, + 0x54AB, 0xF2A1, 0x54AC, 0xCEE1, 0x54B3, 0xFAA6, 0x54B8, 0xF9E0, 0x54BD, 0xECD6, 0x54C0, 0xE4EE, 0x54C1, 0xF9A1, 0x54C4, 0xFBEF, + 0x54C8, 0xF9EB, 0x54C9, 0xEEA3, 0x54E1, 0xEAAC, 0x54E5, 0xCAA8, 0x54E8, 0xF4FA, 0x54ED, 0xCDD6, 0x54EE, 0xFCF6, 0x54F2, 0xF4C9, + 0x54FA, 0xF8D4, 0x5504, 0xF8A6, 0x5506, 0xDECA, 0x5507, 0xF2C6, 0x550E, 0xD7DA, 0x5510, 0xD3D0, 0x551C, 0xD8C5, 0x552F, 0xEAE6, + 0x5531, 0xF3DD, 0x5535, 0xE4DA, 0x553E, 0xF6E4, 0x5544, 0xF6F2, 0x5546, 0xDFC2, 0x554F, 0xD9FD, 0x5553, 0xCCF6, 0x5556, 0xD3BA, + 0x555E, 0xE4AF, 0x5563, 0xF9E1, 0x557C, 0xF0A6, 0x5580, 0xCBD3, 0x5584, 0xE0BC, 0x5586, 0xF4CA, 0x5587, 0xD4FA, 0x5589, 0xFDAA, + 0x558A, 0xF9E2, 0x5598, 0xF4B7, 0x5599, 0xFDC2, 0x559A, 0xFCB0, 0x559C, 0xFDEC, 0x559D, 0xCAE2, 0x55A7, 0xFDBD, 0x55A9, 0xEAE7, + 0x55AA, 0xDFC3, 0x55AB, 0xD1D2, 0x55AC, 0xCEE2, 0x55AE, 0xD3A4, 0x55C5, 0xFDAB, 0x55C7, 0xDFE0, 0x55D4, 0xF2C7, 0x55DA, 0xE7F0, + 0x55DC, 0xD0EE, 0x55DF, 0xF3AA, 0x55E3, 0xDECB, 0x55E4, 0xF6B8, 0x55FD, 0xE1F5, 0x55FE, 0xF1B3, 0x5606, 0xF7A3, 0x5609, 0xCAA9, + 0x5614, 0xCFA5, 0x5617, 0xDFC4, 0x562F, 0xE1B0, 0x5632, 0xF0BF, 0x5634, 0xF6A4, 0x5636, 0xE3B6, 0x5653, 0xFAC6, 0x5668, 0xD0EF, + 0x566B, 0xFDED, 0x5674, 0xDDC4, 0x5686, 0xFCF7, 0x56A5, 0xE6BF, 0x56AC, 0xDEAD, 0x56AE, 0xFABF, 0x56B4, 0xE5F1, 0x56BC, 0xEDC4, + 0x56CA, 0xD2A5, 0x56CD, 0xFDEE, 0x56D1, 0xF5B6, 0x56DA, 0xE1F6, 0x56DB, 0xDECC, 0x56DE, 0xFCDE, 0x56E0, 0xECD7, 0x56F0, 0xCDDD, + 0x56F9, 0xD6B7, 0x56FA, 0xCDB3, 0x5703, 0xF8D5, 0x5704, 0xE5D8, 0x5708, 0xCFEA, 0x570B, 0xCFD0, 0x570D, 0xEACC, 0x5712, 0xEAAE, + 0x5713, 0xEAAD, 0x5716, 0xD3F1, 0x5718, 0xD3A5, 0x571F, 0xF7CF, 0x5728, 0xEEA4, 0x572D, 0xD0A4, 0x5730, 0xF2A2, 0x573B, 0xD0F0, + 0x5740, 0xF2A3, 0x5742, 0xF7F8, 0x5747, 0xD0B3, 0x574A, 0xDBA9, 0x574D, 0xD3BB, 0x574E, 0xCAEC, 0x5750, 0xF1A6, 0x5751, 0xCBD5, + 0x5761, 0xF7E7, 0x5764, 0xCDDE, 0x5766, 0xF7A4, 0x576A, 0xF8C0, 0x576E, 0xD3DD, 0x5770, 0xCCD0, 0x5775, 0xCFA6, 0x577C, 0xF6F3, + 0x5782, 0xE1F7, 0x5788, 0xD3DC, 0x578B, 0xFAFE, 0x5793, 0xFAA7, 0x57A0, 0xEBD9, 0x57A2, 0xCFA7, 0x57A3, 0xEAAF, 0x57C3, 0xE4EF, + 0x57C7, 0xE9B9, 0x57C8, 0xF1D8, 0x57CB, 0xD8D8, 0x57CE, 0xE0F2, 0x57DF, 0xE6B4, 0x57E0, 0xDCFC, 0x57F0, 0xF3F1, 0x57F4, 0xE3D0, + 0x57F7, 0xF2FB, 0x57F9, 0xDBC6, 0x57FA, 0xD0F1, 0x57FC, 0xD0F2, 0x5800, 0xCFDC, 0x5802, 0xD3D1, 0x5805, 0xCCB1, 0x5806, 0xF7D8, + 0x5808, 0xCBA8, 0x5809, 0xEBBC, 0x580A, 0xE4BE, 0x581E, 0xF4DC, 0x5821, 0xDCC2, 0x5824, 0xF0A7, 0x5827, 0xE6C0, 0x582A, 0xCAED, + 0x582F, 0xE8EB, 0x5830, 0xE5E8, 0x5831, 0xDCC3, 0x5834, 0xEDDE, 0x5835, 0xD3F2, 0x583A, 0xCCF7, 0x584A, 0xCED4, 0x584B, 0xE7AB, + 0x584F, 0xCBC3, 0x5851, 0xE1B1, 0x5854, 0xF7B2, 0x5857, 0xD3F3, 0x5858, 0xD3D2, 0x585A, 0xF5C0, 0x585E, 0xDFDD, 0x5861, 0xEEF3, + 0x5862, 0xE7F1, 0x5864, 0xFDB4, 0x5875, 0xF2C8, 0x5879, 0xF3D2, 0x587C, 0xEEF4, 0x587E, 0xE2D3, 0x5883, 0xCCD1, 0x5885, 0xDFEA, + 0x5889, 0xE9BA, 0x5893, 0xD9D7, 0x589C, 0xF5CD, 0x589E, 0xF1F2, 0x589F, 0xFAC7, 0x58A8, 0xD9F8, 0x58A9, 0xD4C2, 0x58AE, 0xF6E5, + 0x58B3, 0xDDC5, 0x58BA, 0xE7F2, 0x58BB, 0xEDDF, 0x58BE, 0xCACB, 0x58C1, 0xDBFA, 0x58C5, 0xE8B5, 0x58C7, 0xD3A6, 0x58CE, 0xFDB5, + 0x58D1, 0xF9C9, 0x58D3, 0xE4E2, 0x58D5, 0xFBBD, 0x58D8, 0xD7A4, 0x58D9, 0xCEC5, 0x58DE, 0xCED5, 0x58DF, 0xD6E6, 0x58E4, 0xE5BD, + 0x58EB, 0xDECD, 0x58EC, 0xECF3, 0x58EF, 0xEDE0, 0x58F9, 0xECEC, 0x58FA, 0xFBBE, 0x58FB, 0xDFEB, 0x58FD, 0xE1F8, 0x590F, 0xF9BE, + 0x5914, 0xD0F3, 0x5915, 0xE0AA, 0x5916, 0xE8E2, 0x5919, 0xE2D4, 0x591A, 0xD2FD, 0x591C, 0xE5A8, 0x5922, 0xD9D3, 0x5927, 0xD3DE, + 0x5929, 0xF4B8, 0x592A, 0xF7BC, 0x592B, 0xDCFD, 0x592D, 0xE8EC, 0x592E, 0xE4E7, 0x5931, 0xE3F7, 0x5937, 0xECA8, 0x593E, 0xFAF1, + 0x5944, 0xE5F2, 0x5947, 0xD0F4, 0x5948, 0xD2AF, 0x5949, 0xDCE5, 0x594E, 0xD0A5, 0x594F, 0xF1B4, 0x5950, 0xFCB1, 0x5951, 0xCCF8, + 0x5954, 0xDDC6, 0x5955, 0xFAD1, 0x5957, 0xF7DF, 0x595A, 0xFAA8, 0x5960, 0xEEF5, 0x5962, 0xDECE, 0x5967, 0xE7F3, 0x596A, 0xF7AC, + 0x596B, 0xEBC4, 0x596C, 0xEDE1, 0x596D, 0xE0AB, 0x596E, 0xDDC7, 0x5973, 0xD2B3, 0x5974, 0xD2BF, 0x5978, 0xCACC, 0x597D, 0xFBBF, + 0x5982, 0xE5FD, 0x5983, 0xDDE5, 0x5984, 0xD8CD, 0x598A, 0xECF4, 0x5993, 0xD0F5, 0x5996, 0xE8ED, 0x5997, 0xD0D2, 0x5999, 0xD9D8, + 0x59A5, 0xF6E6, 0x59A8, 0xDBAA, 0x59AC, 0xF7E0, 0x59B9, 0xD8D9, 0x59BB, 0xF4A3, 0x59BE, 0xF4DD, 0x59C3, 0xEFD1, 0x59C6, 0xD9B5, + 0x59C9, 0xEDAB, 0x59CB, 0xE3B7, 0x59D0, 0xEEBB, 0x59D1, 0xCDB4, 0x59D3, 0xE0F3, 0x59D4, 0xEACD, 0x59D9, 0xECF5, 0x59DA, 0xE8EE, + 0x59DC, 0xCBA9, 0x59DD, 0xF1AF, 0x59E6, 0xCACD, 0x59E8, 0xECA9, 0x59EA, 0xF2EB, 0x59EC, 0xFDEF, 0x59EE, 0xF9F3, 0x59F8, 0xE6C1, + 0x59FB, 0xECD8, 0x59FF, 0xEDAC, 0x5A01, 0xEACE, 0x5A03, 0xE8DF, 0x5A11, 0xDECF, 0x5A18, 0xD2A6, 0x5A1B, 0xE7F4, 0x5A1C, 0xD1D6, + 0x5A1F, 0xE6C2, 0x5A20, 0xE3E3, 0x5A25, 0xE4B0, 0x5A29, 0xD8B4, 0x5A36, 0xF6A5, 0x5A3C, 0xF3DE, 0x5A41, 0xD7A5, 0x5A46, 0xF7E8, + 0x5A49, 0xE8C6, 0x5A5A, 0xFBE6, 0x5A62, 0xDDE6, 0x5A66, 0xDCFE, 0x5A92, 0xD8DA, 0x5A9A, 0xDAAC, 0x5A9B, 0xEAB0, 0x5AA4, 0xE3B8, + 0x5AC1, 0xCAAA, 0x5AC2, 0xE1F9, 0x5AC4, 0xEAB1, 0x5AC9, 0xF2EC, 0x5ACC, 0xFAEE, 0x5AE1, 0xEED5, 0x5AE6, 0xF9F4, 0x5AE9, 0xD2EC, + 0x5B05, 0xFBFB, 0x5B09, 0xFDF0, 0x5B0B, 0xE0BD, 0x5B0C, 0xCEE3, 0x5B16, 0xF8C6, 0x5B2A, 0xDEAE, 0x5B40, 0xDFC5, 0x5B43, 0xE5BE, + 0x5B50, 0xEDAD, 0x5B51, 0xFAEA, 0x5B54, 0xCDEE, 0x5B55, 0xEDA6, 0x5B57, 0xEDAE, 0x5B58, 0xF0ED, 0x5B5A, 0xDDA1, 0x5B5C, 0xEDAF, + 0x5B5D, 0xFCF8, 0x5B5F, 0xD8EB, 0x5B63, 0xCCF9, 0x5B64, 0xCDB5, 0x5B69, 0xFAA9, 0x5B6B, 0xE1DD, 0x5B70, 0xE2D5, 0x5B71, 0xEDCF, + 0x5B75, 0xDDA2, 0x5B78, 0xF9CA, 0x5B7A, 0xEAE8, 0x5B7C, 0xE5ED, 0x5B85, 0xD3EB, 0x5B87, 0xE9D4, 0x5B88, 0xE1FA, 0x5B89, 0xE4CC, + 0x5B8B, 0xE1E4, 0x5B8C, 0xE8C7, 0x5B8F, 0xCEDB, 0x5B93, 0xDCD5, 0x5B95, 0xF7B5, 0x5B96, 0xFCF3, 0x5B97, 0xF0F3, 0x5B98, 0xCEAF, + 0x5B99, 0xF1B5, 0x5B9A, 0xEFD2, 0x5B9B, 0xE8C8, 0x5B9C, 0xEBF1, 0x5BA2, 0xCBD4, 0x5BA3, 0xE0BE, 0x5BA4, 0xE3F8, 0x5BA5, 0xEAE9, + 0x5BA6, 0xFCB2, 0x5BAC, 0xE0F4, 0x5BAE, 0xCFE0, 0x5BB0, 0xEEA5, 0x5BB3, 0xFAAA, 0x5BB4, 0xE6C3, 0x5BB5, 0xE1B2, 0x5BB6, 0xCAAB, + 0x5BB8, 0xE3E4, 0x5BB9, 0xE9BB, 0x5BBF, 0xE2D6, 0x5BC0, 0xF3F2, 0x5BC2, 0xEED6, 0x5BC3, 0xEAB2, 0x5BC4, 0xD0F6, 0x5BC5, 0xECD9, + 0x5BC6, 0xDACB, 0x5BC7, 0xCFA8, 0x5BCC, 0xDDA3, 0x5BD0, 0xD8DB, 0x5BD2, 0xF9CE, 0x5BD3, 0xE9D5, 0x5BD4, 0xE3D1, 0x5BD7, 0xD2BC, + 0x5BDE, 0xD8AC, 0x5BDF, 0xF3CC, 0x5BE1, 0xCDFB, 0x5BE2, 0xF6D6, 0x5BE4, 0xE7F5, 0x5BE5, 0xE8EF, 0x5BE6, 0xE3F9, 0x5BE7, 0xD2BB, + 0x5BE8, 0xF3F3, 0x5BE9, 0xE3FB, 0x5BEB, 0xDED0, 0x5BEC, 0xCEB0, 0x5BEE, 0xD6F7, 0x5BEF, 0xF1D9, 0x5BF5, 0xF5C1, 0x5BF6, 0xDCC4, + 0x5BF8, 0xF5BB, 0x5BFA, 0xDED1, 0x5C01, 0xDCE6, 0x5C04, 0xDED2, 0x5C07, 0xEDE2, 0x5C08, 0xEEF6, 0x5C09, 0xEACF, 0x5C0A, 0xF0EE, + 0x5C0B, 0xE3FC, 0x5C0D, 0xD3DF, 0x5C0E, 0xD3F4, 0x5C0F, 0xE1B3, 0x5C11, 0xE1B4, 0x5C16, 0xF4D3, 0x5C19, 0xDFC6, 0x5C24, 0xE9D6, + 0x5C28, 0xDBAB, 0x5C31, 0xF6A6, 0x5C38, 0xE3B9, 0x5C39, 0xEBC5, 0x5C3A, 0xF4A9, 0x5C3B, 0xCDB6, 0x5C3C, 0xD2F9, 0x5C3E, 0xDAAD, + 0x5C3F, 0xD2E3, 0x5C40, 0xCFD1, 0x5C45, 0xCBDC, 0x5C46, 0xCCFA, 0x5C48, 0xCFDD, 0x5C4B, 0xE8A9, 0x5C4D, 0xE3BB, 0x5C4E, 0xE3BA, + 0x5C51, 0xE0DA, 0x5C55, 0xEEF7, 0x5C5B, 0xDCB3, 0x5C60, 0xD3F5, 0x5C62, 0xD7A6, 0x5C64, 0xF6B5, 0x5C65, 0xD7DB, 0x5C6C, 0xE1D5, + 0x5C6F, 0xD4EA, 0x5C71, 0xDFA3, 0x5C79, 0xFDDF, 0x5C90, 0xD0F7, 0x5C91, 0xEDD4, 0x5CA1, 0xCBAA, 0x5CA9, 0xE4DB, 0x5CAB, 0xE1FB, + 0x5CAC, 0xCBA2, 0x5CB1, 0xD3E0, 0x5CB3, 0xE4BF, 0x5CB5, 0xFBC0, 0x5CB7, 0xDABE, 0x5CB8, 0xE4CD, 0x5CBA, 0xD6B9, 0x5CBE, 0xEFC0, + 0x5CC0, 0xE1FC, 0x5CD9, 0xF6B9, 0x5CE0, 0xDFC7, 0x5CE8, 0xE4B1, 0x5CEF, 0xDCE7, 0x5CF0, 0xDCE8, 0x5CF4, 0xFAD6, 0x5CF6, 0xD3F6, + 0x5CFB, 0xF1DA, 0x5CFD, 0xFAF2, 0x5D07, 0xE2FD, 0x5D0D, 0xD5CF, 0x5D0E, 0xD0F8, 0x5D11, 0xCDDF, 0x5D14, 0xF5CB, 0x5D16, 0xE4F0, + 0x5D17, 0xCBAB, 0x5D19, 0xD7C4, 0x5D27, 0xE2FE, 0x5D29, 0xDDDA, 0x5D4B, 0xDAAE, 0x5D4C, 0xCAEE, 0x5D50, 0xD5B9, 0x5D69, 0xE3A1, + 0x5D6C, 0xE8E3, 0x5D6F, 0xF3AB, 0x5D87, 0xCFA9, 0x5D8B, 0xD3F7, 0x5D9D, 0xD4F1, 0x5DA0, 0xCEE4, 0x5DA2, 0xE8F2, 0x5DAA, 0xE5F5, + 0x5DB8, 0xE7AE, 0x5DBA, 0xD6BA, 0x5DBC, 0xDFEC, 0x5DBD, 0xE4C0, 0x5DCD, 0xE8E4, 0x5DD2, 0xD8B5, 0x5DD6, 0xE4DC, 0x5DDD, 0xF4B9, + 0x5DDE, 0xF1B6, 0x5DE1, 0xE2DE, 0x5DE2, 0xE1B5, 0x5DE5, 0xCDEF, 0x5DE6, 0xF1A7, 0x5DE7, 0xCEE5, 0x5DE8, 0xCBDD, 0x5DEB, 0xD9E3, + 0x5DEE, 0xF3AC, 0x5DF1, 0xD0F9, 0x5DF2, 0xECAB, 0x5DF3, 0xDED3, 0x5DF4, 0xF7E9, 0x5DF7, 0xF9F5, 0x5DFD, 0xE1DE, 0x5DFE, 0xCBEE, + 0x5E02, 0xE3BC, 0x5E03, 0xF8D6, 0x5E06, 0xDBEE, 0x5E0C, 0xFDF1, 0x5E11, 0xF7B6, 0x5E16, 0xF4DE, 0x5E19, 0xF2ED, 0x5E1B, 0xDBD9, + 0x5E1D, 0xF0A8, 0x5E25, 0xE1FD, 0x5E2B, 0xDED4, 0x5E2D, 0xE0AC, 0x5E33, 0xEDE3, 0x5E36, 0xD3E1, 0x5E38, 0xDFC8, 0x5E3D, 0xD9B6, + 0x5E3F, 0xFDAC, 0x5E40, 0xEFD3, 0x5E44, 0xE4C1, 0x5E45, 0xF8EB, 0x5E47, 0xDBAC, 0x5E4C, 0xFCC6, 0x5E55, 0xD8AD, 0x5E5F, 0xF6BA, + 0x5E61, 0xDBDF, 0x5E62, 0xD3D3, 0x5E63, 0xF8C7, 0x5E72, 0xCACE, 0x5E73, 0xF8C1, 0x5E74, 0xD2B4, 0x5E77, 0xDCB4, 0x5E78, 0xFAB9, + 0x5E79, 0xCACF, 0x5E7B, 0xFCB3, 0x5E7C, 0xEAEA, 0x5E7D, 0xEAEB, 0x5E7E, 0xD0FA, 0x5E84, 0xEDE4, 0x5E87, 0xDDE7, 0x5E8A, 0xDFC9, + 0x5E8F, 0xDFED, 0x5E95, 0xEEBC, 0x5E97, 0xEFC1, 0x5E9A, 0xCCD2, 0x5E9C, 0xDDA4, 0x5EA0, 0xDFCA, 0x5EA6, 0xD3F8, 0x5EA7, 0xF1A8, + 0x5EAB, 0xCDB7, 0x5EAD, 0xEFD4, 0x5EB5, 0xE4DD, 0x5EB6, 0xDFEE, 0x5EB7, 0xCBAC, 0x5EB8, 0xE9BC, 0x5EBE, 0xEAEC, 0x5EC2, 0xDFCB, + 0x5EC8, 0xF9BF, 0x5EC9, 0xD6AF, 0x5ECA, 0xD5C6, 0x5ED0, 0xCFAA, 0x5ED3, 0xCEA9, 0x5ED6, 0xD6F8, 0x5EDA, 0xF1B7, 0x5EDB, 0xEEF8, + 0x5EDF, 0xD9D9, 0x5EE0, 0xF3DF, 0x5EE2, 0xF8C8, 0x5EE3, 0xCEC6, 0x5EEC, 0xD5E6, 0x5EF3, 0xF4E6, 0x5EF6, 0xE6C5, 0x5EF7, 0xEFD5, + 0x5EFA, 0xCBEF, 0x5EFB, 0xFCDF, 0x5F01, 0xDCA7, 0x5F04, 0xD6E7, 0x5F0A, 0xF8C9, 0x5F0F, 0xE3D2, 0x5F11, 0xE3BD, 0x5F13, 0xCFE1, + 0x5F14, 0xF0C0, 0x5F15, 0xECDA, 0x5F17, 0xDDD7, 0x5F18, 0xFBF0, 0x5F1B, 0xECAC, 0x5F1F, 0xF0A9, 0x5F26, 0xFAD7, 0x5F27, 0xFBC1, + 0x5F29, 0xD2C0, 0x5F31, 0xE5B0, 0x5F35, 0xEDE5, 0x5F3A, 0xCBAD, 0x5F3C, 0xF9B0, 0x5F48, 0xF7A5, 0x5F4A, 0xCBAE, 0x5F4C, 0xDAAF, + 0x5F4E, 0xD8B6, 0x5F56, 0xD3A7, 0x5F57, 0xFBB2, 0x5F59, 0xFDC4, 0x5F5B, 0xECAD, 0x5F62, 0xFBA1, 0x5F66, 0xE5E9, 0x5F67, 0xE9EE, + 0x5F69, 0xF3F4, 0x5F6A, 0xF8F3, 0x5F6B, 0xF0C1, 0x5F6C, 0xDEAF, 0x5F6D, 0xF8B0, 0x5F70, 0xF3E0, 0x5F71, 0xE7AF, 0x5F77, 0xDBAD, + 0x5F79, 0xE6B5, 0x5F7C, 0xF9A8, 0x5F7F, 0xDDD8, 0x5F80, 0xE8D9, 0x5F81, 0xEFD6, 0x5F85, 0xD3E2, 0x5F87, 0xE2DF, 0x5F8A, 0xFCE0, + 0x5F8B, 0xD7C8, 0x5F8C, 0xFDAD, 0x5F90, 0xDFEF, 0x5F91, 0xCCD3, 0x5F92, 0xD3F9, 0x5F97, 0xD4F0, 0x5F98, 0xDBC7, 0x5F99, 0xDED5, + 0x5F9E, 0xF0F4, 0x5FA0, 0xD5D0, 0x5FA1, 0xE5D9, 0x5FA8, 0xFCC7, 0x5FA9, 0xDCD6, 0x5FAA, 0xE2E0, 0x5FAE, 0xDAB0, 0x5FB5, 0xF3A3, + 0x5FB7, 0xD3EC, 0x5FB9, 0xF4CB, 0x5FBD, 0xFDC5, 0x5FC3, 0xE3FD, 0x5FC5, 0xF9B1, 0x5FCC, 0xD0FB, 0x5FCD, 0xECDB, 0x5FD6, 0xF5BC, + 0x5FD7, 0xF2A4, 0x5FD8, 0xD8CE, 0x5FD9, 0xD8CF, 0x5FE0, 0xF5F7, 0x5FEB, 0xF6E1, 0x5FF5, 0xD2B7, 0x5FFD, 0xFBEC, 0x5FFF, 0xDDC8, + 0x600F, 0xE4E8, 0x6012, 0xD2C1, 0x6016, 0xF8D7, 0x601C, 0xD6BB, 0x601D, 0xDED6, 0x6020, 0xF7BD, 0x6021, 0xECAE, 0x6025, 0xD0E1, + 0x6027, 0xE0F5, 0x6028, 0xEAB3, 0x602A, 0xCED6, 0x602F, 0xCCA5, 0x6041, 0xECF6, 0x6042, 0xE2E1, 0x6043, 0xE3BE, 0x604D, 0xFCC8, + 0x6050, 0xCDF0, 0x6052, 0xF9F6, 0x6055, 0xDFF0, 0x6059, 0xE5BF, 0x605D, 0xCEBF, 0x6062, 0xFCE1, 0x6063, 0xEDB0, 0x6064, 0xFDD1, + 0x6065, 0xF6BB, 0x6068, 0xF9CF, 0x6069, 0xEBDA, 0x606A, 0xCAC1, 0x606C, 0xD2B8, 0x606D, 0xCDF1, 0x606F, 0xE3D3, 0x6070, 0xFDE6, + 0x6085, 0xE6ED, 0x6089, 0xE3FA, 0x608C, 0xF0AA, 0x608D, 0xF9D0, 0x6094, 0xFCE2, 0x6096, 0xF8A7, 0x609A, 0xE1E5, 0x609B, 0xEEF9, + 0x609F, 0xE7F6, 0x60A0, 0xEAED, 0x60A3, 0xFCB4, 0x60A4, 0xF5C2, 0x60A7, 0xD7DC, 0x60B0, 0xF0F5, 0x60B2, 0xDDE8, 0x60B3, 0xD3ED, + 0x60B4, 0xF5FC, 0x60B6, 0xDABF, 0x60B8, 0xCCFB, 0x60BC, 0xD3FA, 0x60BD, 0xF4A4, 0x60C5, 0xEFD7, 0x60C7, 0xD4C3, 0x60D1, 0xFBE3, + 0x60DA, 0xFBED, 0x60DC, 0xE0AD, 0x60DF, 0xEAEE, 0x60E0, 0xFBB3, 0x60E1, 0xE4C2, 0x60F0, 0xF6E7, 0x60F1, 0xD2DD, 0x60F3, 0xDFCC, + 0x60F6, 0xFCC9, 0x60F9, 0xE5A9, 0x60FA, 0xE0F6, 0x60FB, 0xF6B3, 0x6101, 0xE1FE, 0x6106, 0xCBF0, 0x6108, 0xEAEF, 0x6109, 0xEAF0, + 0x610D, 0xDAC0, 0x610E, 0xF8B4, 0x610F, 0xEBF2, 0x6115, 0xE4C3, 0x611A, 0xE9D7, 0x611B, 0xE4F1, 0x611F, 0xCAEF, 0x6127, 0xCED7, + 0x6130, 0xFCCA, 0x6134, 0xF3E1, 0x6137, 0xCBC4, 0x613C, 0xE3E5, 0x613E, 0xCBC5, 0x613F, 0xEAB4, 0x6142, 0xE9BD, 0x6144, 0xD7C9, + 0x6147, 0xEBDB, 0x6148, 0xEDB1, 0x614A, 0xCCC3, 0x614B, 0xF7BE, 0x614C, 0xFCCB, 0x6153, 0xF8F4, 0x6155, 0xD9B7, 0x6158, 0xF3D3, + 0x6159, 0xF3D4, 0x615D, 0xF7E4, 0x615F, 0xF7D1, 0x6162, 0xD8B7, 0x6163, 0xCEB1, 0x6164, 0xCAC2, 0x6167, 0xFBB4, 0x6168, 0xCBC6, + 0x616B, 0xF0F6, 0x616E, 0xD5E7, 0x6170, 0xEAD0, 0x6176, 0xCCD4, 0x6177, 0xCBAF, 0x617D, 0xF4AA, 0x617E, 0xE9AF, 0x6181, 0xF5C3, + 0x6182, 0xE9D8, 0x618A, 0xDDE9, 0x618E, 0xF1F3, 0x6190, 0xD5FB, 0x6191, 0xDEBB, 0x6194, 0xF4FB, 0x6198, 0xFDF3, 0x6199, 0xFDF2, + 0x619A, 0xF7A6, 0x61A4, 0xDDC9, 0x61A7, 0xD4D3, 0x61A9, 0xCCA8, 0x61AB, 0xDAC1, 0x61AC, 0xCCD5, 0x61AE, 0xD9E4, 0x61B2, 0xFACA, + 0x61B6, 0xE5E3, 0x61BA, 0xD3BC, 0x61BE, 0xCAF0, 0x61C3, 0xD0C4, 0x61C7, 0xCAD0, 0x61C8, 0xFAAB, 0x61C9, 0xEBEB, 0x61CA, 0xE7F8, + 0x61CB, 0xD9E5, 0x61E6, 0xD1D7, 0x61F2, 0xF3A4, 0x61F6, 0xD4FB, 0x61F7, 0xFCE3, 0x61F8, 0xFAD8, 0x61FA, 0xF3D5, 0x61FC, 0xCFAB, + 0x61FF, 0xEBF3, 0x6200, 0xD5FC, 0x6207, 0xD3D4, 0x6208, 0xCDFC, 0x620A, 0xD9E6, 0x620C, 0xE2F9, 0x620D, 0xE2A1, 0x620E, 0xEBD4, + 0x6210, 0xE0F7, 0x6211, 0xE4B2, 0x6212, 0xCCFC, 0x6216, 0xFBE4, 0x621A, 0xF4AB, 0x621F, 0xD0BD, 0x6221, 0xCAF1, 0x622A, 0xEFB8, + 0x622E, 0xD7C0, 0x6230, 0xEEFA, 0x6231, 0xFDF4, 0x6234, 0xD3E3, 0x6236, 0xFBC2, 0x623E, 0xD5E8, 0x623F, 0xDBAE, 0x6240, 0xE1B6, + 0x6241, 0xF8B7, 0x6247, 0xE0BF, 0x6248, 0xFBC3, 0x6249, 0xDDEA, 0x624B, 0xE2A2, 0x624D, 0xEEA6, 0x6253, 0xF6E8, 0x6258, 0xF6F5, + 0x626E, 0xDDCA, 0x6271, 0xD0E2, 0x6276, 0xDDA6, 0x6279, 0xDDEB, 0x627C, 0xE4F9, 0x627F, 0xE3AF, 0x6280, 0xD0FC, 0x6284, 0xF4FC, + 0x6289, 0xCCBC, 0x628A, 0xF7EA, 0x6291, 0xE5E4, 0x6292, 0xDFF1, 0x6295, 0xF7E1, 0x6297, 0xF9F7, 0x6298, 0xEFB9, 0x629B, 0xF8D8, + 0x62AB, 0xF9A9, 0x62B1, 0xF8D9, 0x62B5, 0xEEBD, 0x62B9, 0xD8C6, 0x62BC, 0xE4E3, 0x62BD, 0xF5CE, 0x62C2, 0xDDD9, 0x62C7, 0xD9E7, + 0x62C8, 0xD2B9, 0x62C9, 0xD5C3, 0x62CC, 0xDAE5, 0x62CD, 0xDAD0, 0x62CF, 0xD1D9, 0x62D0, 0xCED8, 0x62D2, 0xCBDE, 0x62D3, 0xF4AC, + 0x62D4, 0xDAFB, 0x62D6, 0xF6E9, 0x62D7, 0xE8F3, 0x62D8, 0xCFAC, 0x62D9, 0xF0F0, 0x62DB, 0xF4FD, 0x62DC, 0xDBC8, 0x62EC, 0xCEC0, + 0x62ED, 0xE3D4, 0x62EE, 0xD1CF, 0x62EF, 0xF1F5, 0x62F1, 0xCDF2, 0x62F3, 0xCFEB, 0x62F7, 0xCDB8, 0x62FE, 0xE3A6, 0x62FF, 0xD1DA, + 0x6301, 0xF2A5, 0x6307, 0xF2A6, 0x6309, 0xE4CE, 0x6311, 0xD3FB, 0x632B, 0xF1A9, 0x632F, 0xF2C9, 0x633A, 0xEFD8, 0x633B, 0xE6C9, + 0x633D, 0xD8B8, 0x633E, 0xFAF3, 0x6349, 0xF3B5, 0x634C, 0xF8A4, 0x634F, 0xD1F3, 0x6350, 0xE6C8, 0x6355, 0xF8DA, 0x6367, 0xDCE9, + 0x6368, 0xDED7, 0x636E, 0xCBDF, 0x6372, 0xCFEC, 0x6377, 0xF4DF, 0x637A, 0xD1F4, 0x637B, 0xD2BA, 0x637F, 0xDFF2, 0x6383, 0xE1B7, + 0x6388, 0xE2A3, 0x6389, 0xD3FC, 0x638C, 0xEDE6, 0x6392, 0xDBC9, 0x6396, 0xE4FA, 0x6398, 0xCFDE, 0x639B, 0xCED0, 0x63A0, 0xD5D3, + 0x63A1, 0xF3F5, 0x63A2, 0xF7AE, 0x63A5, 0xEFC8, 0x63A7, 0xCDF3, 0x63A8, 0xF5CF, 0x63A9, 0xE5F3, 0x63AA, 0xF0C2, 0x63C0, 0xCAD1, + 0x63C4, 0xEAF1, 0x63C6, 0xD0A6, 0x63CF, 0xD9DA, 0x63D0, 0xF0AB, 0x63D6, 0xEBE7, 0x63DA, 0xE5C0, 0x63DB, 0xFCB5, 0x63E1, 0xE4C4, + 0x63ED, 0xCCA9, 0x63EE, 0xFDC6, 0x63F4, 0xEAB5, 0x63F6, 0xE5AA, 0x63F7, 0xDFBA, 0x640D, 0xE1DF, 0x640F, 0xDAD1, 0x6414, 0xE1B8, + 0x6416, 0xE8F4, 0x6417, 0xD3FD, 0x641C, 0xE2A4, 0x6422, 0xF2CA, 0x642C, 0xDAE6, 0x642D, 0xF7B3, 0x643A, 0xFDCD, 0x643E, 0xF3B6, + 0x6458, 0xEED7, 0x6460, 0xF5C4, 0x6469, 0xD8A4, 0x646F, 0xF2A7, 0x6478, 0xD9B8, 0x6479, 0xD9B9, 0x647A, 0xEFC9, 0x6488, 0xD6CE, + 0x6491, 0xF7CB, 0x6492, 0xDFAE, 0x6493, 0xE8F5, 0x649A, 0xD2B5, 0x649E, 0xD3D5, 0x64A4, 0xF4CC, 0x64A5, 0xDAFC, 0x64AB, 0xD9E8, + 0x64AD, 0xF7EB, 0x64AE, 0xF5C9, 0x64B0, 0xF3BC, 0x64B2, 0xDAD2, 0x64BB, 0xD3B5, 0x64C1, 0xE8B6, 0x64C4, 0xD6CF, 0x64C5, 0xF4BA, + 0x64C7, 0xF7C9, 0x64CA, 0xCCAA, 0x64CD, 0xF0C3, 0x64CE, 0xCCD6, 0x64D2, 0xD0D3, 0x64D4, 0xD3BD, 0x64D8, 0xDBFB, 0x64DA, 0xCBE0, + 0x64E1, 0xD3E4, 0x64E2, 0xF6F7, 0x64E5, 0xD5BA, 0x64E6, 0xF3CD, 0x64E7, 0xCBE1, 0x64EC, 0xEBF4, 0x64F2, 0xF4AD, 0x64F4, 0xFCAA, + 0x64FA, 0xF7EC, 0x64FE, 0xE8F6, 0x6500, 0xDAE7, 0x6504, 0xF7CC, 0x6518, 0xE5C1, 0x651D, 0xE0EE, 0x6523, 0xD5FD, 0x652A, 0xCEE6, + 0x652B, 0xFCAB, 0x652C, 0xD5BB, 0x652F, 0xF2A8, 0x6536, 0xE2A5, 0x6537, 0xCDB9, 0x6538, 0xEAF2, 0x6539, 0xCBC7, 0x653B, 0xCDF4, + 0x653E, 0xDBAF, 0x653F, 0xEFD9, 0x6545, 0xCDBA, 0x6548, 0xFCF9, 0x654D, 0xDFF3, 0x654E, 0xCEE7, 0x654F, 0xDAC2, 0x6551, 0xCFAD, + 0x6556, 0xE7F9, 0x6557, 0xF8A8, 0x655E, 0xF3E2, 0x6562, 0xCAF2, 0x6563, 0xDFA4, 0x6566, 0xD4C4, 0x656C, 0xCCD7, 0x656D, 0xE5C2, + 0x6572, 0xCDBB, 0x6574, 0xEFDA, 0x6575, 0xEED8, 0x6577, 0xDDA7, 0x6578, 0xE2A6, 0x657E, 0xE0C0, 0x6582, 0xD6B0, 0x6583, 0xF8CA, + 0x6585, 0xFCFA, 0x6587, 0xD9FE, 0x658C, 0xDEB0, 0x6590, 0xDDEC, 0x6591, 0xDAE8, 0x6597, 0xD4E0, 0x6599, 0xD6F9, 0x659B, 0xCDD7, + 0x659C, 0xDED8, 0x659F, 0xF2F8, 0x65A1, 0xE4D6, 0x65A4, 0xD0C5, 0x65A5, 0xF4AE, 0x65A7, 0xDDA8, 0x65AB, 0xEDC5, 0x65AC, 0xF3D6, + 0x65AF, 0xDED9, 0x65B0, 0xE3E6, 0x65B7, 0xD3A8, 0x65B9, 0xDBB0, 0x65BC, 0xE5DA, 0x65BD, 0xE3BF, 0x65C1, 0xDBB1, 0x65C5, 0xD5E9, + 0x65CB, 0xE0C1, 0x65CC, 0xEFDB, 0x65CF, 0xF0E9, 0x65D2, 0xD7B2, 0x65D7, 0xD0FD, 0x65E0, 0xD9E9, 0x65E3, 0xD0FE, 0x65E5, 0xECED, + 0x65E6, 0xD3A9, 0x65E8, 0xF2A9, 0x65E9, 0xF0C4, 0x65EC, 0xE2E2, 0x65ED, 0xE9EF, 0x65F1, 0xF9D1, 0x65F4, 0xE9D9, 0x65FA, 0xE8DA, + 0x65FB, 0xDAC3, 0x65FC, 0xDAC4, 0x65FD, 0xD4C5, 0x65FF, 0xE7FA, 0x6606, 0xCDE0, 0x6607, 0xE3B0, 0x6609, 0xDBB2, 0x660A, 0xFBC4, + 0x660C, 0xF3E3, 0x660E, 0xD9A5, 0x660F, 0xFBE7, 0x6610, 0xDDCB, 0x6611, 0xD0D4, 0x6613, 0xE6B6, 0x6614, 0xE0AE, 0x6615, 0xFDDA, + 0x661E, 0xDCB5, 0x661F, 0xE0F8, 0x6620, 0xE7B1, 0x6625, 0xF5F0, 0x6627, 0xD8DC, 0x6628, 0xEDC6, 0x662D, 0xE1B9, 0x662F, 0xE3C0, + 0x6630, 0xF9C0, 0x6631, 0xE9F0, 0x6634, 0xD9DB, 0x6636, 0xF3E4, 0x663A, 0xDCB6, 0x663B, 0xE4E9, 0x6641, 0xF0C5, 0x6642, 0xE3C1, + 0x6643, 0xFCCC, 0x6644, 0xFCCD, 0x6649, 0xF2CB, 0x664B, 0xF2CC, 0x664F, 0xE4CF, 0x6659, 0xF1DB, 0x665B, 0xFAD9, 0x665D, 0xF1B8, + 0x665E, 0xFDF5, 0x665F, 0xE0F9, 0x6664, 0xE7FB, 0x6665, 0xFCB7, 0x6666, 0xFCE4, 0x6667, 0xFBC5, 0x6668, 0xE3E7, 0x6669, 0xD8B9, + 0x666B, 0xF6F8, 0x666E, 0xDCC5, 0x666F, 0xCCD8, 0x6673, 0xE0AF, 0x6674, 0xF4E7, 0x6676, 0xEFDC, 0x6677, 0xCFFC, 0x6678, 0xEFDD, + 0x667A, 0xF2AA, 0x6684, 0xFDBE, 0x6687, 0xCAAC, 0x6688, 0xFDBB, 0x6689, 0xFDC7, 0x668E, 0xE7B2, 0x6690, 0xEAD1, 0x6691, 0xDFF4, + 0x6696, 0xD1EC, 0x6697, 0xE4DE, 0x6698, 0xE5C3, 0x669D, 0xD9A6, 0x66A0, 0xCDBC, 0x66A2, 0xF3E5, 0x66AB, 0xEDD5, 0x66AE, 0xD9BA, + 0x66B2, 0xEDE7, 0x66B3, 0xFBB5, 0x66B4, 0xF8EC, 0x66B9, 0xE0E7, 0x66BB, 0xCCD9, 0x66BE, 0xD4C6, 0x66C4, 0xE7A5, 0x66C6, 0xD5F5, + 0x66C7, 0xD3BE, 0x66C9, 0xFCFB, 0x66D6, 0xE4F2, 0x66D9, 0xDFF5, 0x66DC, 0xE8F8, 0x66DD, 0xF8ED, 0x66E0, 0xCEC7, 0x66E6, 0xFDF6, + 0x66F0, 0xE8D8, 0x66F2, 0xCDD8, 0x66F3, 0xE7D6, 0x66F4, 0xCCDA, 0x66F7, 0xCAE3, 0x66F8, 0xDFF6, 0x66F9, 0xF0C7, 0x66FA, 0xF0C6, + 0x66FC, 0xD8BA, 0x66FE, 0xF1F4, 0x66FF, 0xF4F0, 0x6700, 0xF5CC, 0x6703, 0xFCE5, 0x6708, 0xEAC5, 0x6709, 0xEAF3, 0x670B, 0xDDDB, + 0x670D, 0xDCD7, 0x6714, 0xDEFD, 0x6715, 0xF2F9, 0x6717, 0xD5C7, 0x671B, 0xD8D0, 0x671D, 0xF0C8, 0x671E, 0xD1A1, 0x671F, 0xD1A2, + 0x6726, 0xD9D4, 0x6727, 0xD6E8, 0x6728, 0xD9CA, 0x672A, 0xDAB1, 0x672B, 0xD8C7, 0x672C, 0xDCE2, 0x672D, 0xF3CE, 0x672E, 0xF5F4, + 0x6731, 0xF1B9, 0x6734, 0xDAD3, 0x6736, 0xF6EA, 0x673A, 0xCFF5, 0x673D, 0xFDAE, 0x6746, 0xCAD2, 0x6749, 0xDFB4, 0x674E, 0xD7DD, + 0x674F, 0xFABA, 0x6750, 0xEEA7, 0x6751, 0xF5BD, 0x6753, 0xF8F5, 0x6756, 0xEDE8, 0x675C, 0xD4E1, 0x675E, 0xD1A3, 0x675F, 0xE1D6, + 0x676D, 0xF9F8, 0x676F, 0xDBCA, 0x6770, 0xCBF9, 0x6771, 0xD4D4, 0x6773, 0xD9DC, 0x6775, 0xEEBE, 0x6777, 0xF7ED, 0x677B, 0xD2EE, + 0x677E, 0xE1E6, 0x677F, 0xF7F9, 0x6787, 0xDDED, 0x6789, 0xE8DB, 0x678B, 0xDBB3, 0x678F, 0xD1F7, 0x6790, 0xE0B0, 0x6793, 0xD4E2, + 0x6795, 0xF6D7, 0x6797, 0xD7F9, 0x679A, 0xD8DD, 0x679C, 0xCDFD, 0x679D, 0xF2AB, 0x67AF, 0xCDBD, 0x67B0, 0xF8C2, 0x67B3, 0xF2AC, + 0x67B6, 0xCAAD, 0x67B7, 0xCAAE, 0x67B8, 0xCFAE, 0x67BE, 0xE3C2, 0x67C4, 0xDCB7, 0x67CF, 0xDBDA, 0x67D0, 0xD9BB, 0x67D1, 0xCAF3, + 0x67D2, 0xF6D3, 0x67D3, 0xE6F8, 0x67D4, 0xEAF5, 0x67DA, 0xEAF6, 0x67DD, 0xF6F9, 0x67E9, 0xCFAF, 0x67EC, 0xCAD3, 0x67EF, 0xCAAF, + 0x67F0, 0xD2B0, 0x67F1, 0xF1BA, 0x67F3, 0xD7B3, 0x67F4, 0xE3C3, 0x67F5, 0xF3FD, 0x67F6, 0xDEDA, 0x67FB, 0xDEDB, 0x67FE, 0xEFDE, + 0x6812, 0xE2E3, 0x6813, 0xEEFB, 0x6816, 0xDFF7, 0x6817, 0xD7CA, 0x6821, 0xCEE8, 0x6822, 0xDBDB, 0x682A, 0xF1BB, 0x682F, 0xE9F1, + 0x6838, 0xFAB7, 0x6839, 0xD0C6, 0x683C, 0xCCAB, 0x683D, 0xEEA8, 0x6840, 0xCBFA, 0x6841, 0xF9F9, 0x6842, 0xCCFD, 0x6843, 0xD3FE, + 0x6848, 0xE4D0, 0x684E, 0xF2EE, 0x6850, 0xD4D5, 0x6851, 0xDFCD, 0x6853, 0xFCB8, 0x6854, 0xD1D0, 0x686D, 0xF2CD, 0x6876, 0xF7D2, + 0x687F, 0xCAD4, 0x6881, 0xD5D9, 0x6885, 0xD8DE, 0x688F, 0xCDD9, 0x6893, 0xEEA9, 0x6894, 0xF6BC, 0x6897, 0xCCDB, 0x689D, 0xF0C9, + 0x689F, 0xFCFC, 0x68A1, 0xE8C9, 0x68A2, 0xF4FE, 0x68A7, 0xE7FC, 0x68A8, 0xD7DE, 0x68AD, 0xDEDC, 0x68AF, 0xF0AC, 0x68B0, 0xCCFE, + 0x68B1, 0xCDE1, 0x68B3, 0xE1BA, 0x68B5, 0xDBEF, 0x68B6, 0xDAB2, 0x68C4, 0xD1A5, 0x68C5, 0xDCB8, 0x68C9, 0xD8F6, 0x68CB, 0xD1A4, + 0x68CD, 0xCDE2, 0x68D2, 0xDCEA, 0x68D5, 0xF0F7, 0x68D7, 0xF0CA, 0x68D8, 0xD0BE, 0x68DA, 0xDDDC, 0x68DF, 0xD4D6, 0x68E0, 0xD3D6, + 0x68E7, 0xEDD0, 0x68E8, 0xCDA1, 0x68EE, 0xDFB5, 0x68F2, 0xDFF8, 0x68F9, 0xD4A1, 0x68FA, 0xCEB2, 0x6900, 0xE8CA, 0x6905, 0xEBF5, + 0x690D, 0xE3D5, 0x690E, 0xF5D0, 0x6912, 0xF5A1, 0x6927, 0xD9A7, 0x6930, 0xE5AB, 0x693D, 0xE6CB, 0x693F, 0xF5F1, 0x694A, 0xE5C5, + 0x6953, 0xF9A3, 0x6954, 0xE0DB, 0x6955, 0xF6EB, 0x6957, 0xCBF1, 0x6959, 0xD9EA, 0x695A, 0xF5A2, 0x695E, 0xD7D1, 0x6960, 0xD1F8, + 0x6961, 0xEAF8, 0x6962, 0xEAF9, 0x6963, 0xDAB3, 0x6968, 0xEFDF, 0x696B, 0xF1EF, 0x696D, 0xE5F6, 0x696E, 0xEEBF, 0x696F, 0xE2E4, + 0x6975, 0xD0BF, 0x6977, 0xFAAC, 0x6978, 0xF5D1, 0x6979, 0xE7B3, 0x6995, 0xE9BE, 0x699B, 0xF2CE, 0x699C, 0xDBB4, 0x69A5, 0xFCCE, + 0x69A7, 0xDDEE, 0x69AE, 0xE7B4, 0x69B4, 0xD7B4, 0x69BB, 0xF7B4, 0x69C1, 0xCDBE, 0x69C3, 0xDAE9, 0x69CB, 0xCFB0, 0x69CC, 0xF7D9, + 0x69CD, 0xF3E6, 0x69D0, 0xCED9, 0x69E8, 0xCEAA, 0x69EA, 0xCBC8, 0x69FB, 0xD0A7, 0x69FD, 0xF0CB, 0x69FF, 0xD0C7, 0x6A02, 0xE4C5, + 0x6A0A, 0xDBE0, 0x6A11, 0xD5DA, 0x6A13, 0xD7A7, 0x6A17, 0xEEC0, 0x6A19, 0xF8F6, 0x6A1E, 0xF5D2, 0x6A1F, 0xEDE9, 0x6A21, 0xD9BC, + 0x6A23, 0xE5C6, 0x6A35, 0xF5A3, 0x6A38, 0xDAD4, 0x6A39, 0xE2A7, 0x6A3A, 0xFBFC, 0x6A3D, 0xF1DC, 0x6A44, 0xCAF4, 0x6A48, 0xE8FA, + 0x6A4B, 0xCEE9, 0x6A52, 0xE9F8, 0x6A53, 0xE2E5, 0x6A58, 0xD0B9, 0x6A59, 0xD4F2, 0x6A5F, 0xD1A6, 0x6A61, 0xDFCE, 0x6A6B, 0xFCF4, + 0x6A80, 0xD3AA, 0x6A84, 0xCCAC, 0x6A89, 0xEFE0, 0x6A8D, 0xE5E5, 0x6A8E, 0xD0D5, 0x6A97, 0xDBFC, 0x6A9C, 0xFCE6, 0x6AA2, 0xCBFE, + 0x6AA3, 0xEDEA, 0x6AB3, 0xDEB1, 0x6ABB, 0xF9E3, 0x6AC2, 0xD4A2, 0x6AC3, 0xCFF6, 0x6AD3, 0xD6D0, 0x6ADA, 0xD5EA, 0x6ADB, 0xF1EE, + 0x6AF6, 0xFACB, 0x6AFB, 0xE5A1, 0x6B04, 0xD5B1, 0x6B0A, 0xCFED, 0x6B0C, 0xEDEB, 0x6B12, 0xD5B2, 0x6B16, 0xD5BC, 0x6B20, 0xFDE2, + 0x6B21, 0xF3AD, 0x6B23, 0xFDDB, 0x6B32, 0xE9B0, 0x6B3A, 0xD1A7, 0x6B3D, 0xFDE3, 0x6B3E, 0xCEB3, 0x6B46, 0xFDE4, 0x6B47, 0xFACE, + 0x6B4C, 0xCAB0, 0x6B4E, 0xF7A7, 0x6B50, 0xCFB1, 0x6B5F, 0xE6A2, 0x6B61, 0xFCB6, 0x6B62, 0xF2AD, 0x6B63, 0xEFE1, 0x6B64, 0xF3AE, + 0x6B65, 0xDCC6, 0x6B66, 0xD9EB, 0x6B6A, 0xE8E0, 0x6B72, 0xE1A8, 0x6B77, 0xD5F6, 0x6B78, 0xCFFD, 0x6B7B, 0xDEDD, 0x6B7F, 0xD9D1, + 0x6B83, 0xE4EA, 0x6B84, 0xF2CF, 0x6B86, 0xF7BF, 0x6B89, 0xE2E6, 0x6B8A, 0xE2A8, 0x6B96, 0xE3D6, 0x6B98, 0xEDD1, 0x6B9E, 0xE9F9, + 0x6BAE, 0xD6B1, 0x6BAF, 0xDEB2, 0x6BB2, 0xE0E8, 0x6BB5, 0xD3AB, 0x6BB7, 0xEBDC, 0x6BBA, 0xDFAF, 0x6BBC, 0xCAC3, 0x6BBF, 0xEEFC, + 0x6BC1, 0xFDC3, 0x6BC5, 0xEBF6, 0x6BC6, 0xCFB2, 0x6BCB, 0xD9EC, 0x6BCD, 0xD9BD, 0x6BCF, 0xD8DF, 0x6BD2, 0xD4B8, 0x6BD3, 0xEBBE, + 0x6BD4, 0xDDEF, 0x6BD6, 0xDDF0, 0x6BD7, 0xDDF1, 0x6BD8, 0xDDF2, 0x6BDB, 0xD9BE, 0x6BEB, 0xFBC6, 0x6BEC, 0xCFB3, 0x6C08, 0xEEFD, + 0x6C0F, 0xE4AB, 0x6C11, 0xDAC5, 0x6C13, 0xD8EC, 0x6C23, 0xD1A8, 0x6C34, 0xE2A9, 0x6C37, 0xDEBC, 0x6C38, 0xE7B5, 0x6C3E, 0xDBF0, + 0x6C40, 0xEFE2, 0x6C41, 0xF1F0, 0x6C42, 0xCFB4, 0x6C4E, 0xDBF1, 0x6C50, 0xE0B1, 0x6C55, 0xDFA5, 0x6C57, 0xF9D2, 0x6C5A, 0xE7FD, + 0x6C5D, 0xE6A3, 0x6C5E, 0xFBF1, 0x6C5F, 0xCBB0, 0x6C60, 0xF2AE, 0x6C68, 0xCDE7, 0x6C6A, 0xE8DC, 0x6C6D, 0xE7D7, 0x6C70, 0xF7C0, + 0x6C72, 0xD0E3, 0x6C76, 0xDAA1, 0x6C7A, 0xCCBD, 0x6C7D, 0xD1A9, 0x6C7E, 0xDDCC, 0x6C81, 0xE3FE, 0x6C82, 0xD1AA, 0x6C83, 0xE8AA, + 0x6C85, 0xEAB6, 0x6C86, 0xF9FA, 0x6C87, 0xE6CC, 0x6C88, 0xF6D8, 0x6C8C, 0xD4C7, 0x6C90, 0xD9CB, 0x6C92, 0xD9D2, 0x6C93, 0xD3CB, + 0x6C94, 0xD8F7, 0x6C95, 0xDAA9, 0x6C96, 0xF5F8, 0x6C99, 0xDEDE, 0x6C9A, 0xF2AF, 0x6C9B, 0xF8A9, 0x6CAB, 0xD8C8, 0x6CAE, 0xEEC1, + 0x6CB3, 0xF9C1, 0x6CB8, 0xDDF3, 0x6CB9, 0xEAFA, 0x6CBB, 0xF6BD, 0x6CBC, 0xE1BB, 0x6CBD, 0xCDBF, 0x6CBE, 0xF4D4, 0x6CBF, 0xE6CD, + 0x6CC1, 0xFCCF, 0x6CC2, 0xFBA2, 0x6CC4, 0xE0DC, 0x6CC9, 0xF4BB, 0x6CCA, 0xDAD5, 0x6CCC, 0xF9B2, 0x6CD3, 0xFBF2, 0x6CD5, 0xDBF6, + 0x6CD7, 0xDEDF, 0x6CDB, 0xDBF2, 0x6CE1, 0xF8DC, 0x6CE2, 0xF7EE, 0x6CE3, 0xEBE8, 0x6CE5, 0xD2FA, 0x6CE8, 0xF1BC, 0x6CEB, 0xFADA, + 0x6CEE, 0xDAEA, 0x6CEF, 0xDAC6, 0x6CF0, 0xF7C1, 0x6CF3, 0xE7B6, 0x6D0B, 0xE5C7, 0x6D0C, 0xD6AC, 0x6D11, 0xDCC7, 0x6D17, 0xE1A9, + 0x6D19, 0xE2AA, 0x6D1B, 0xD5A6, 0x6D1E, 0xD4D7, 0x6D25, 0xF2D0, 0x6D27, 0xEAFB, 0x6D29, 0xE0DD, 0x6D2A, 0xFBF3, 0x6D32, 0xF1BD, + 0x6D35, 0xE2E7, 0x6D36, 0xFDD7, 0x6D38, 0xCEC8, 0x6D39, 0xEAB7, 0x6D3B, 0xFCC0, 0x6D3D, 0xFDE7, 0x6D3E, 0xF7EF, 0x6D41, 0xD7B5, + 0x6D59, 0xEFBA, 0x6D5A, 0xF1DD, 0x6D5C, 0xDEB3, 0x6D63, 0xE8CB, 0x6D66, 0xF8DD, 0x6D69, 0xFBC7, 0x6D6A, 0xD5C8, 0x6D6C, 0xD7DF, + 0x6D6E, 0xDDA9, 0x6D74, 0xE9B1, 0x6D77, 0xFAAD, 0x6D78, 0xF6D9, 0x6D79, 0xFAF4, 0x6D7F, 0xF8AA, 0x6D85, 0xE6EE, 0x6D87, 0xCCDC, + 0x6D88, 0xE1BC, 0x6D89, 0xE0EF, 0x6D8C, 0xE9BF, 0x6D8D, 0xFCFD, 0x6D8E, 0xE6CE, 0x6D91, 0xE1D7, 0x6D93, 0xE6CF, 0x6D95, 0xF4F1, + 0x6DAF, 0xE4F3, 0x6DB2, 0xE4FB, 0x6DB5, 0xF9E4, 0x6DC0, 0xEFE3, 0x6DC3, 0xCFEE, 0x6DC4, 0xF6BE, 0x6DC5, 0xE0B2, 0x6DC6, 0xFCFE, + 0x6DC7, 0xD1AB, 0x6DCB, 0xD7FA, 0x6DCF, 0xFBC8, 0x6DD1, 0xE2D7, 0x6DD8, 0xD4A3, 0x6DD9, 0xF0F8, 0x6DDA, 0xD7A8, 0x6DDE, 0xE1E7, + 0x6DE1, 0xD3BF, 0x6DE8, 0xEFE4, 0x6DEA, 0xD7C5, 0x6DEB, 0xEBE2, 0x6DEE, 0xFCE7, 0x6DF1, 0xE4A2, 0x6DF3, 0xE2E8, 0x6DF5, 0xE6D0, + 0x6DF7, 0xFBE8, 0x6DF8, 0xF4E8, 0x6DF9, 0xE5F4, 0x6DFA, 0xF4BC, 0x6DFB, 0xF4D5, 0x6E17, 0xDFB6, 0x6E19, 0xFCB9, 0x6E1A, 0xEEC2, + 0x6E1B, 0xCAF5, 0x6E1F, 0xEFE5, 0x6E20, 0xCBE2, 0x6E21, 0xD4A4, 0x6E23, 0xDEE0, 0x6E24, 0xDAFD, 0x6E25, 0xE4C6, 0x6E26, 0xE8BE, + 0x6E2B, 0xE0DE, 0x6E2C, 0xF6B4, 0x6E2D, 0xEAD2, 0x6E2F, 0xF9FB, 0x6E32, 0xE0C2, 0x6E34, 0xCAE4, 0x6E36, 0xE7B7, 0x6E38, 0xEAFD, + 0x6E3A, 0xD9DD, 0x6E3C, 0xDAB4, 0x6E3D, 0xEEAA, 0x6E3E, 0xFBE9, 0x6E43, 0xDBCB, 0x6E44, 0xDAB5, 0x6E4A, 0xF1BE, 0x6E4D, 0xD3AC, + 0x6E56, 0xFBC9, 0x6E58, 0xDFCF, 0x6E5B, 0xD3C0, 0x6E5C, 0xE3D7, 0x6E5E, 0xEFE6, 0x6E5F, 0xFCD0, 0x6E67, 0xE9C0, 0x6E6B, 0xF5D3, + 0x6E6E, 0xECDC, 0x6E6F, 0xF7B7, 0x6E72, 0xEAB8, 0x6E73, 0xD1F9, 0x6E7A, 0xDCC8, 0x6E90, 0xEAB9, 0x6E96, 0xF1DE, 0x6E9C, 0xD7B6, + 0x6E9D, 0xCFB5, 0x6E9F, 0xD9A8, 0x6EA2, 0xECEE, 0x6EA5, 0xDDAA, 0x6EAA, 0xCDA2, 0x6EAB, 0xE8AE, 0x6EAF, 0xE1BD, 0x6EB1, 0xF2D1, + 0x6EB6, 0xE9C1, 0x6EBA, 0xD2FC, 0x6EC2, 0xDBB5, 0x6EC4, 0xF3E7, 0x6EC5, 0xD8FE, 0x6EC9, 0xFCD1, 0x6ECB, 0xEDB2, 0x6ECC, 0xF4AF, + 0x6ECE, 0xFBA3, 0x6ED1, 0xFCC1, 0x6ED3, 0xEEAB, 0x6ED4, 0xD4A5, 0x6EEF, 0xF4F2, 0x6EF4, 0xEED9, 0x6EF8, 0xFBCA, 0x6EFE, 0xCDE3, + 0x6EFF, 0xD8BB, 0x6F01, 0xE5DB, 0x6F02, 0xF8F7, 0x6F06, 0xF6D4, 0x6F0F, 0xD7A9, 0x6F11, 0xCBC9, 0x6F14, 0xE6D1, 0x6F15, 0xF0CC, + 0x6F20, 0xD8AE, 0x6F22, 0xF9D3, 0x6F23, 0xD5FE, 0x6F2B, 0xD8BC, 0x6F2C, 0xF2B0, 0x6F31, 0xE2AB, 0x6F32, 0xF3E8, 0x6F38, 0xEFC2, + 0x6F3F, 0xEDEC, 0x6F41, 0xE7B8, 0x6F51, 0xDAFE, 0x6F54, 0xCCBE, 0x6F57, 0xF2FC, 0x6F58, 0xDAEB, 0x6F5A, 0xE2D8, 0x6F5B, 0xEDD6, + 0x6F5E, 0xD6D1, 0x6F5F, 0xE0B3, 0x6F62, 0xFCD2, 0x6F64, 0xEBC8, 0x6F6D, 0xD3C1, 0x6F6E, 0xF0CD, 0x6F70, 0xCFF7, 0x6F7A, 0xEDD2, + 0x6F7C, 0xD4D8, 0x6F7D, 0xDCC9, 0x6F7E, 0xD7F1, 0x6F81, 0xDFBB, 0x6F84, 0xF3A5, 0x6F88, 0xF4CD, 0x6F8D, 0xF1BF, 0x6F8E, 0xF8B1, + 0x6F90, 0xE9FA, 0x6F94, 0xFBCB, 0x6F97, 0xCAD5, 0x6FA3, 0xF9D4, 0x6FA4, 0xF7CA, 0x6FA7, 0xD6C8, 0x6FAE, 0xFCE8, 0x6FAF, 0xF3BD, + 0x6FB1, 0xEEFE, 0x6FB3, 0xE7FE, 0x6FB9, 0xD3C2, 0x6FBE, 0xD3B6, 0x6FC0, 0xCCAD, 0x6FC1, 0xF6FA, 0x6FC2, 0xD6B2, 0x6FC3, 0xD2D8, + 0x6FCA, 0xE7D8, 0x6FD5, 0xE3A5, 0x6FDA, 0xE7B9, 0x6FDF, 0xF0AD, 0x6FE0, 0xFBCC, 0x6FE1, 0xEBA1, 0x6FE4, 0xD4A6, 0x6FE9, 0xFBCD, + 0x6FEB, 0xD5BD, 0x6FEC, 0xF1DF, 0x6FEF, 0xF6FB, 0x6FF1, 0xDEB4, 0x6FFE, 0xD5EB, 0x7001, 0xE5C8, 0x7005, 0xFBA4, 0x7006, 0xD4B9, + 0x7009, 0xDEE1, 0x700B, 0xE4A3, 0x700F, 0xD7B7, 0x7011, 0xF8EE, 0x7015, 0xDEB5, 0x7018, 0xD6D2, 0x701A, 0xF9D5, 0x701B, 0xE7BA, + 0x701C, 0xEBD5, 0x701D, 0xD5F7, 0x701E, 0xEFE7, 0x701F, 0xE1BE, 0x7023, 0xFAAE, 0x7027, 0xD6E9, 0x7028, 0xD6EE, 0x702F, 0xE7BB, + 0x7037, 0xECCB, 0x703E, 0xD5B3, 0x704C, 0xCEB4, 0x7050, 0xFBA5, 0x7051, 0xE1EE, 0x7058, 0xF7A8, 0x705D, 0xFBCE, 0x7063, 0xD8BD, + 0x706B, 0xFBFD, 0x7070, 0xFCE9, 0x7078, 0xCFB6, 0x707C, 0xEDC7, 0x707D, 0xEEAC, 0x7085, 0xCCDD, 0x708A, 0xF6A7, 0x708E, 0xE6FA, + 0x7092, 0xF5A4, 0x7098, 0xFDDC, 0x7099, 0xEDB3, 0x709A, 0xCEC9, 0x70A1, 0xEFE8, 0x70A4, 0xE1BF, 0x70AB, 0xFADB, 0x70AC, 0xCBE3, + 0x70AD, 0xF7A9, 0x70AF, 0xFBA6, 0x70B3, 0xDCB9, 0x70B7, 0xF1C0, 0x70B8, 0xEDC8, 0x70B9, 0xEFC3, 0x70C8, 0xD6AD, 0x70CB, 0xFDCE, + 0x70CF, 0xE8A1, 0x70D8, 0xFBF4, 0x70D9, 0xD5A7, 0x70DD, 0xF1F6, 0x70DF, 0xE6D3, 0x70F1, 0xCCDE, 0x70F9, 0xF8B2, 0x70FD, 0xDCEB, + 0x7104, 0xFDB6, 0x7109, 0xE5EA, 0x710C, 0xF1E0, 0x7119, 0xDBCC, 0x711A, 0xDDCD, 0x711E, 0xD4C8, 0x7121, 0xD9ED, 0x7126, 0xF5A5, + 0x7130, 0xE6FB, 0x7136, 0xE6D4, 0x7147, 0xFDC8, 0x7149, 0xD6A1, 0x714A, 0xFDBF, 0x714C, 0xFCD3, 0x714E, 0xEFA1, 0x7150, 0xE7BC, + 0x7156, 0xD1EE, 0x7159, 0xE6D5, 0x715C, 0xE9F2, 0x715E, 0xDFB0, 0x7164, 0xD8E0, 0x7165, 0xFCBA, 0x7166, 0xFDAF, 0x7167, 0xF0CE, + 0x7169, 0xDBE1, 0x716C, 0xE5C9, 0x716E, 0xEDB4, 0x717D, 0xE0C3, 0x7184, 0xE3D8, 0x7189, 0xE9FB, 0x718A, 0xEAA8, 0x718F, 0xFDB7, + 0x7192, 0xFBA7, 0x7194, 0xE9C2, 0x7199, 0xFDF7, 0x719F, 0xE2D9, 0x71A2, 0xDCEC, 0x71AC, 0xE8A2, 0x71B1, 0xE6F0, 0x71B9, 0xFDF8, + 0x71BA, 0xFDF9, 0x71BE, 0xF6BF, 0x71C1, 0xE7A7, 0x71C3, 0xE6D7, 0x71C8, 0xD4F3, 0x71C9, 0xD4C9, 0x71CE, 0xD6FA, 0x71D0, 0xD7F2, + 0x71D2, 0xE1C0, 0x71D4, 0xDBE2, 0x71D5, 0xE6D8, 0x71DF, 0xE7BD, 0x71E5, 0xF0CF, 0x71E6, 0xF3BE, 0x71E7, 0xE2AC, 0x71ED, 0xF5B7, + 0x71EE, 0xE0F0, 0x71FB, 0xFDB8, 0x71FC, 0xE3E8, 0x71FE, 0xD4A7, 0x71FF, 0xE8FC, 0x7200, 0xFAD2, 0x7206, 0xF8EF, 0x7210, 0xD6D3, + 0x721B, 0xD5B4, 0x722A, 0xF0D0, 0x722C, 0xF7F0, 0x722D, 0xEEB3, 0x7230, 0xEABA, 0x7232, 0xEAD3, 0x7235, 0xEDC9, 0x7236, 0xDDAB, + 0x723A, 0xE5AC, 0x723B, 0xFDA1, 0x723D, 0xDFD0, 0x723E, 0xECB3, 0x7240, 0xDFD1, 0x7246, 0xEDED, 0x7247, 0xF8B8, 0x7248, 0xF7FA, + 0x724C, 0xF8AB, 0x7252, 0xF4E0, 0x7258, 0xD4BA, 0x7259, 0xE4B3, 0x725B, 0xE9DA, 0x725D, 0xDEB6, 0x725F, 0xD9BF, 0x7261, 0xD9C0, + 0x7262, 0xD6EF, 0x7267, 0xD9CC, 0x7269, 0xDAAA, 0x7272, 0xDFE5, 0x7279, 0xF7E5, 0x727D, 0xCCB2, 0x7280, 0xDFF9, 0x7281, 0xD7E0, + 0x72A2, 0xD4BB, 0x72A7, 0xFDFA, 0x72AC, 0xCCB3, 0x72AF, 0xDBF3, 0x72C0, 0xDFD2, 0x72C2, 0xCECA, 0x72C4, 0xEEDA, 0x72CE, 0xE4E4, + 0x72D0, 0xFBCF, 0x72D7, 0xCFB7, 0x72D9, 0xEEC3, 0x72E1, 0xCEEA, 0x72E9, 0xE2AD, 0x72F8, 0xD7E1, 0x72F9, 0xFAF5, 0x72FC, 0xD5C9, + 0x72FD, 0xF8AC, 0x730A, 0xE7D9, 0x7316, 0xF3E9, 0x731B, 0xD8ED, 0x731C, 0xE3C4, 0x731D, 0xF0F1, 0x7325, 0xE8E5, 0x7329, 0xE0FA, + 0x732A, 0xEEC4, 0x732B, 0xD9DE, 0x7336, 0xEBA2, 0x7337, 0xEBA3, 0x733E, 0xFCC2, 0x733F, 0xEABB, 0x7344, 0xE8AB, 0x7345, 0xDEE2, + 0x7350, 0xEDEF, 0x7352, 0xE8A3, 0x7357, 0xCFF1, 0x7368, 0xD4BC, 0x736A, 0xFCEA, 0x7370, 0xE7BE, 0x7372, 0xFCF2, 0x7375, 0xD6B4, + 0x7378, 0xE2AE, 0x737A, 0xD3B7, 0x737B, 0xFACC, 0x7384, 0xFADC, 0x7386, 0xEDB5, 0x7387, 0xE1E3, 0x7389, 0xE8AC, 0x738B, 0xE8DD, + 0x738E, 0xEFE9, 0x7394, 0xF4BD, 0x7396, 0xCFB8, 0x7397, 0xE9DB, 0x7398, 0xD1AC, 0x739F, 0xDAC7, 0x73A7, 0xEBC9, 0x73A9, 0xE8CC, + 0x73AD, 0xDEB7, 0x73B2, 0xD6BC, 0x73B3, 0xD3E5, 0x73B9, 0xFADD, 0x73C0, 0xDAD6, 0x73C2, 0xCAB1, 0x73C9, 0xDAC8, 0x73CA, 0xDFA6, + 0x73CC, 0xF9B3, 0x73CD, 0xF2D2, 0x73CF, 0xCAC4, 0x73D6, 0xCECB, 0x73D9, 0xCDF5, 0x73DD, 0xFDB0, 0x73DE, 0xD5A8, 0x73E0, 0xF1C1, + 0x73E3, 0xE2E9, 0x73E4, 0xDCCA, 0x73E5, 0xECB4, 0x73E6, 0xFAC0, 0x73E9, 0xFBA8, 0x73EA, 0xD0A8, 0x73ED, 0xDAEC, 0x73F7, 0xD9EE, + 0x73F9, 0xE0FB, 0x73FD, 0xEFEA, 0x73FE, 0xFADE, 0x7401, 0xE0C4, 0x7403, 0xCFB9, 0x7405, 0xD5CA, 0x7406, 0xD7E2, 0x7407, 0xE2AF, + 0x7409, 0xD7B8, 0x7413, 0xE8CD, 0x741B, 0xF6DA, 0x7420, 0xEFA2, 0x7421, 0xE2DA, 0x7422, 0xF6FC, 0x7425, 0xFBD0, 0x7426, 0xD1AD, + 0x7428, 0xCDE4, 0x742A, 0xD1AE, 0x742B, 0xDCED, 0x742C, 0xE8CE, 0x742E, 0xF0F9, 0x742F, 0xCEB5, 0x7430, 0xE6FC, 0x7433, 0xD7FB, + 0x7434, 0xD0D6, 0x7435, 0xDDF5, 0x7436, 0xF7F1, 0x7438, 0xF6FD, 0x743A, 0xDBF7, 0x743F, 0xFBEA, 0x7440, 0xE9DC, 0x7441, 0xD9C1, + 0x7443, 0xF5F2, 0x7444, 0xE0C5, 0x744B, 0xEAD4, 0x7455, 0xF9C2, 0x7457, 0xEABC, 0x7459, 0xD2C5, 0x745A, 0xFBD1, 0x745B, 0xE7C0, + 0x745C, 0xEBA5, 0x745E, 0xDFFA, 0x745F, 0xE3A2, 0x7460, 0xD7B9, 0x7462, 0xE9C3, 0x7464, 0xE8FD, 0x7465, 0xE8AF, 0x7468, 0xF2D3, + 0x7469, 0xFBA9, 0x746A, 0xD8A5, 0x746F, 0xD5CB, 0x747E, 0xD0C8, 0x7482, 0xD1AF, 0x7483, 0xD7E3, 0x7487, 0xE0C6, 0x7489, 0xD6A2, + 0x748B, 0xEDF0, 0x7498, 0xD7F3, 0x749C, 0xFCD4, 0x749E, 0xDAD7, 0x749F, 0xCCDF, 0x74A1, 0xF2D4, 0x74A3, 0xD1B0, 0x74A5, 0xCCE0, + 0x74A7, 0xDBFD, 0x74A8, 0xF3BF, 0x74AA, 0xF0D1, 0x74B0, 0xFCBB, 0x74B2, 0xE2B0, 0x74B5, 0xE6A5, 0x74B9, 0xE2DB, 0x74BD, 0xDFDE, + 0x74BF, 0xE0C7, 0x74C6, 0xF2EF, 0x74CA, 0xCCE1, 0x74CF, 0xD6EA, 0x74D4, 0xE7C2, 0x74D8, 0xCEB6, 0x74DA, 0xF3C0, 0x74DC, 0xCDFE, + 0x74E0, 0xFBD2, 0x74E2, 0xF8F8, 0x74E3, 0xF7FB, 0x74E6, 0xE8BF, 0x74EE, 0xE8B7, 0x74F7, 0xEDB6, 0x7501, 0xDCBA, 0x7504, 0xCCB4, + 0x7511, 0xF1F7, 0x7515, 0xE8B8, 0x7518, 0xCAF6, 0x751A, 0xE4A4, 0x751B, 0xF4D6, 0x751F, 0xDFE6, 0x7523, 0xDFA7, 0x7525, 0xDFE7, + 0x7526, 0xE1C1, 0x7528, 0xE9C4, 0x752B, 0xDCCB, 0x752C, 0xE9C5, 0x7530, 0xEFA3, 0x7531, 0xEBA6, 0x7532, 0xCBA3, 0x7533, 0xE3E9, + 0x7537, 0xD1FB, 0x7538, 0xEFA4, 0x753A, 0xEFEB, 0x7547, 0xD0B4, 0x754C, 0xCDA3, 0x754F, 0xE8E6, 0x7551, 0xEFA5, 0x7553, 0xD3CC, + 0x7554, 0xDAED, 0x7559, 0xD7BA, 0x755B, 0xF2D5, 0x755C, 0xF5E5, 0x755D, 0xD9EF, 0x7562, 0xF9B4, 0x7565, 0xD5D4, 0x7566, 0xFDCF, + 0x756A, 0xDBE3, 0x756F, 0xF1E1, 0x7570, 0xECB6, 0x7575, 0xFBFE, 0x7576, 0xD3D7, 0x7578, 0xD1B1, 0x757A, 0xCBB1, 0x757F, 0xD1B2, + 0x7586, 0xCBB2, 0x7587, 0xF1C2, 0x758A, 0xF4E1, 0x758B, 0xF9B5, 0x758E, 0xE1C3, 0x758F, 0xE1C2, 0x7591, 0xEBF7, 0x759D, 0xDFA8, + 0x75A5, 0xCBCA, 0x75AB, 0xE6B9, 0x75B1, 0xF8DE, 0x75B2, 0xF9AA, 0x75B3, 0xCAF7, 0x75B5, 0xEDB7, 0x75B8, 0xD3B8, 0x75B9, 0xF2D6, + 0x75BC, 0xD4D9, 0x75BD, 0xEEC5, 0x75BE, 0xF2F0, 0x75C2, 0xCAB2, 0x75C5, 0xDCBB, 0x75C7, 0xF1F8, 0x75CD, 0xECB7, 0x75D2, 0xE5CA, + 0x75D4, 0xF6C0, 0x75D5, 0xFDDD, 0x75D8, 0xD4E3, 0x75D9, 0xCCE2, 0x75DB, 0xF7D4, 0x75E2, 0xD7E5, 0x75F0, 0xD3C3, 0x75F2, 0xD8A6, + 0x75F4, 0xF6C1, 0x75FA, 0xDDF6, 0x75FC, 0xCDC0, 0x7600, 0xE5DC, 0x760D, 0xE5CB, 0x7619, 0xE1C4, 0x761F, 0xE8B0, 0x7620, 0xF4B0, + 0x7621, 0xF3EA, 0x7622, 0xDAEE, 0x7624, 0xD7BB, 0x7626, 0xE2B1, 0x763B, 0xD7AA, 0x7642, 0xD6FB, 0x764C, 0xE4DF, 0x764E, 0xCAD6, + 0x7652, 0xEBA8, 0x7656, 0xDBFE, 0x7661, 0xF6C2, 0x7664, 0xEFBB, 0x7669, 0xD4FD, 0x766C, 0xE0C8, 0x7670, 0xE8B9, 0x7672, 0xEFA6, + 0x7678, 0xCDA4, 0x767B, 0xD4F4, 0x767C, 0xDBA1, 0x767D, 0xDBDC, 0x767E, 0xDBDD, 0x7684, 0xEEDC, 0x7686, 0xCBCB, 0x7687, 0xFCD5, + 0x768E, 0xCEEB, 0x7690, 0xCDC1, 0x7693, 0xFBD3, 0x76AE, 0xF9AB, 0x76BA, 0xF5D4, 0x76BF, 0xD9A9, 0x76C2, 0xE9DD, 0x76C3, 0xDBCD, + 0x76C6, 0xDDCE, 0x76C8, 0xE7C3, 0x76CA, 0xECCC, 0x76D2, 0xF9EC, 0x76D6, 0xCBCC, 0x76DB, 0xE0FC, 0x76DC, 0xD4A8, 0x76DE, 0xEDD3, + 0x76DF, 0xD8EF, 0x76E1, 0xF2D7, 0x76E3, 0xCAF8, 0x76E4, 0xDAEF, 0x76E7, 0xD6D4, 0x76EE, 0xD9CD, 0x76F2, 0xD8EE, 0x76F4, 0xF2C1, + 0x76F8, 0xDFD3, 0x76FC, 0xDAF0, 0x76FE, 0xE2EA, 0x7701, 0xE0FD, 0x7704, 0xD8F8, 0x7708, 0xF7AF, 0x7709, 0xDAB6, 0x770B, 0xCAD7, + 0x771E, 0xF2D8, 0x7720, 0xD8F9, 0x7729, 0xFADF, 0x7737, 0xCFEF, 0x7738, 0xD9C2, 0x773A, 0xF0D2, 0x773C, 0xE4D1, 0x7740, 0xF3B7, + 0x774D, 0xFAE0, 0x775B, 0xEFEC, 0x7761, 0xE2B2, 0x7763, 0xD4BD, 0x7766, 0xD9CE, 0x776B, 0xF4E2, 0x7779, 0xD4A9, 0x777E, 0xCDC2, + 0x777F, 0xE7DA, 0x778B, 0xF2D9, 0x7791, 0xD9AA, 0x779E, 0xD8BE, 0x77A5, 0xDCAD, 0x77AC, 0xE2EB, 0x77AD, 0xD6FC, 0x77B0, 0xCAF9, + 0x77B3, 0xD4DA, 0x77BB, 0xF4D7, 0x77BC, 0xCCA1, 0x77BF, 0xCFBA, 0x77D7, 0xF5B8, 0x77DB, 0xD9C3, 0x77DC, 0xD0E8, 0x77E2, 0xE3C5, + 0x77E3, 0xEBF8, 0x77E5, 0xF2B1, 0x77E9, 0xCFBB, 0x77ED, 0xD3AD, 0x77EE, 0xE8E1, 0x77EF, 0xCEEC, 0x77F3, 0xE0B4, 0x7802, 0xDEE3, + 0x7812, 0xDDF7, 0x7825, 0xF2B2, 0x7826, 0xF3F6, 0x7827, 0xF6DB, 0x782C, 0xD7FE, 0x7832, 0xF8DF, 0x7834, 0xF7F2, 0x7845, 0xD0A9, + 0x784F, 0xE6DA, 0x785D, 0xF5A6, 0x786B, 0xD7BC, 0x786C, 0xCCE3, 0x786F, 0xE6DB, 0x787C, 0xDDDD, 0x7881, 0xD1B3, 0x7887, 0xEFED, + 0x788C, 0xD6DE, 0x788D, 0xE4F4, 0x788E, 0xE1EF, 0x7891, 0xDDF8, 0x7897, 0xE8CF, 0x78A3, 0xCAE5, 0x78A7, 0xDCA1, 0x78A9, 0xE0B5, + 0x78BA, 0xFCAC, 0x78BB, 0xFCAD, 0x78BC, 0xD8A7, 0x78C1, 0xEDB8, 0x78C5, 0xDBB6, 0x78CA, 0xD6F0, 0x78CB, 0xF3AF, 0x78CE, 0xCDA5, + 0x78D0, 0xDAF1, 0x78E8, 0xD8A8, 0x78EC, 0xCCE4, 0x78EF, 0xD1B4, 0x78F5, 0xCAD8, 0x78FB, 0xDAF2, 0x7901, 0xF5A7, 0x790E, 0xF5A8, + 0x7916, 0xE6A6, 0x792A, 0xD5EC, 0x792B, 0xD5F8, 0x792C, 0xDAF3, 0x793A, 0xE3C6, 0x793E, 0xDEE4, 0x7940, 0xDEE5, 0x7941, 0xD1B5, + 0x7947, 0xD1B6, 0x7948, 0xD1B7, 0x7949, 0xF2B3, 0x7950, 0xE9DE, 0x7956, 0xF0D3, 0x7957, 0xF2B4, 0x795A, 0xF0D4, 0x795B, 0xCBE4, + 0x795C, 0xFBD4, 0x795D, 0xF5E6, 0x795E, 0xE3EA, 0x7960, 0xDEE6, 0x7965, 0xDFD4, 0x7968, 0xF8F9, 0x796D, 0xF0AE, 0x797A, 0xD1B8, + 0x797F, 0xD6DF, 0x7981, 0xD0D7, 0x798D, 0xFCA1, 0x798E, 0xEFEE, 0x798F, 0xDCD8, 0x7991, 0xE9DF, 0x79A6, 0xE5DD, 0x79A7, 0xFDFB, + 0x79AA, 0xE0C9, 0x79AE, 0xD6C9, 0x79B1, 0xD4AA, 0x79B3, 0xE5CC, 0x79B9, 0xE9E0, 0x79BD, 0xD0D8, 0x79BE, 0xFCA2, 0x79BF, 0xD4BE, + 0x79C0, 0xE2B3, 0x79C1, 0xDEE7, 0x79C9, 0xDCBC, 0x79CA, 0xD2B6, 0x79CB, 0xF5D5, 0x79D1, 0xCEA1, 0x79D2, 0xF5A9, 0x79D5, 0xDDF9, + 0x79D8, 0xDDFA, 0x79DF, 0xF0D5, 0x79E4, 0xF6DF, 0x79E6, 0xF2DA, 0x79E7, 0xE4EB, 0x79E9, 0xF2F1, 0x79FB, 0xECB9, 0x7A00, 0xFDFC, + 0x7A05, 0xE1AA, 0x7A08, 0xCAD9, 0x7A0B, 0xEFEF, 0x7A0D, 0xF5AA, 0x7A14, 0xECF9, 0x7A17, 0xF8AD, 0x7A19, 0xF2C2, 0x7A1A, 0xF6C3, + 0x7A1C, 0xD7D2, 0x7A1F, 0xF9A2, 0x7A20, 0xF0D6, 0x7A2E, 0xF0FA, 0x7A31, 0xF6E0, 0x7A36, 0xE9F3, 0x7A37, 0xF2C3, 0x7A3B, 0xD4AB, + 0x7A3C, 0xCAB3, 0x7A3D, 0xCDA6, 0x7A3F, 0xCDC3, 0x7A40, 0xCDDA, 0x7A46, 0xD9CF, 0x7A49, 0xF6C4, 0x7A4D, 0xEEDD, 0x7A4E, 0xE7C4, + 0x7A57, 0xE2B4, 0x7A61, 0xDFE2, 0x7A62, 0xE7DB, 0x7A69, 0xE8B1, 0x7A6B, 0xFCAE, 0x7A70, 0xE5CD, 0x7A74, 0xFAEB, 0x7A76, 0xCFBC, + 0x7A79, 0xCFE2, 0x7A7A, 0xCDF6, 0x7A7D, 0xEFF0, 0x7A7F, 0xF4BE, 0x7A81, 0xD4CD, 0x7A84, 0xF3B8, 0x7A88, 0xE9A1, 0x7A92, 0xF2F2, + 0x7A93, 0xF3EB, 0x7A95, 0xF0D7, 0x7A98, 0xCFD7, 0x7A9F, 0xCFDF, 0x7AA9, 0xE8C0, 0x7AAA, 0xE8C1, 0x7AAE, 0xCFE3, 0x7AAF, 0xE9A2, + 0x7ABA, 0xD0AA, 0x7AC4, 0xF3C1, 0x7AC5, 0xD0AB, 0x7AC7, 0xD4E4, 0x7ACA, 0xEFBC, 0x7ACB, 0xD8A1, 0x7AD7, 0xD9DF, 0x7AD9, 0xF3D7, + 0x7ADD, 0xDCBD, 0x7ADF, 0xCCE5, 0x7AE0, 0xEDF1, 0x7AE3, 0xF1E2, 0x7AE5, 0xD4DB, 0x7AEA, 0xE2B5, 0x7AED, 0xCAE6, 0x7AEF, 0xD3AE, + 0x7AF6, 0xCCE6, 0x7AF9, 0xF1D3, 0x7AFA, 0xF5E7, 0x7AFF, 0xCADA, 0x7B0F, 0xFBEE, 0x7B11, 0xE1C5, 0x7B19, 0xDFE9, 0x7B1B, 0xEEDE, + 0x7B1E, 0xF7C2, 0x7B20, 0xD8A2, 0x7B26, 0xDDAC, 0x7B2C, 0xF0AF, 0x7B2D, 0xD6BD, 0x7B39, 0xE1AB, 0x7B46, 0xF9B6, 0x7B49, 0xD4F5, + 0x7B4B, 0xD0C9, 0x7B4C, 0xEFA7, 0x7B4D, 0xE2EC, 0x7B4F, 0xDBEA, 0x7B50, 0xCECC, 0x7B51, 0xF5E8, 0x7B52, 0xF7D5, 0x7B54, 0xD3CD, + 0x7B56, 0xF3FE, 0x7B60, 0xD0B5, 0x7B6C, 0xE0FE, 0x7B6E, 0xDFFB, 0x7B75, 0xE6DD, 0x7B7D, 0xE8A4, 0x7B87, 0xCBCD, 0x7B8B, 0xEFA8, + 0x7B8F, 0xEEB4, 0x7B94, 0xDAD8, 0x7B95, 0xD1B9, 0x7B97, 0xDFA9, 0x7B9A, 0xF3B0, 0x7B9D, 0xCCC4, 0x7BA1, 0xCEB7, 0x7BAD, 0xEFA9, + 0x7BB1, 0xDFD5, 0x7BB4, 0xEDD7, 0x7BB8, 0xEEC6, 0x7BC0, 0xEFBD, 0x7BC1, 0xFCD6, 0x7BC4, 0xDBF4, 0x7BC6, 0xEFAA, 0x7BC7, 0xF8B9, + 0x7BC9, 0xF5E9, 0x7BD2, 0xE3D9, 0x7BE0, 0xE1C6, 0x7BE4, 0xD4BF, 0x7BE9, 0xDEE8, 0x7C07, 0xF0EA, 0x7C12, 0xF3C2, 0x7C1E, 0xD3AF, + 0x7C21, 0xCADB, 0x7C27, 0xFCD7, 0x7C2A, 0xEDD8, 0x7C2B, 0xE1C7, 0x7C3D, 0xF4D8, 0x7C3E, 0xD6B3, 0x7C3F, 0xDDAD, 0x7C43, 0xD5BE, + 0x7C4C, 0xF1C3, 0x7C4D, 0xEEDF, 0x7C60, 0xD6EB, 0x7C64, 0xF4D9, 0x7C6C, 0xD7E6, 0x7C73, 0xDAB7, 0x7C83, 0xDDFB, 0x7C89, 0xDDCF, + 0x7C92, 0xD8A3, 0x7C95, 0xDAD9, 0x7C97, 0xF0D8, 0x7C98, 0xEFC4, 0x7C9F, 0xE1D8, 0x7CA5, 0xF1D4, 0x7CA7, 0xEDF2, 0x7CAE, 0xD5DB, + 0x7CB1, 0xD5DC, 0x7CB2, 0xF3C4, 0x7CB3, 0xCBD7, 0x7CB9, 0xE2B6, 0x7CBE, 0xEFF1, 0x7CCA, 0xFBD5, 0x7CD6, 0xD3D8, 0x7CDE, 0xDDD0, + 0x7CDF, 0xF0D9, 0x7CE0, 0xCBB3, 0x7CE7, 0xD5DD, 0x7CFB, 0xCDA7, 0x7CFE, 0xD0AC, 0x7D00, 0xD1BA, 0x7D02, 0xF1C4, 0x7D04, 0xE5B3, + 0x7D05, 0xFBF5, 0x7D06, 0xE9E1, 0x7D07, 0xFDE0, 0x7D08, 0xFCBC, 0x7D0A, 0xDAA2, 0x7D0B, 0xDAA3, 0x7D0D, 0xD2A1, 0x7D10, 0xD2EF, + 0x7D14, 0xE2ED, 0x7D17, 0xDEE9, 0x7D18, 0xCEDC, 0x7D19, 0xF2B5, 0x7D1A, 0xD0E4, 0x7D1B, 0xDDD1, 0x7D20, 0xE1C8, 0x7D21, 0xDBB7, + 0x7D22, 0xDFE3, 0x7D2B, 0xEDB9, 0x7D2C, 0xF1C5, 0x7D2E, 0xF3CF, 0x7D2F, 0xD7AB, 0x7D30, 0xE1AC, 0x7D33, 0xE3EB, 0x7D35, 0xEEC7, + 0x7D39, 0xE1C9, 0x7D3A, 0xCAFA, 0x7D42, 0xF0FB, 0x7D43, 0xFAE1, 0x7D44, 0xF0DA, 0x7D45, 0xCCE7, 0x7D46, 0xDAF4, 0x7D50, 0xCCBF, + 0x7D5E, 0xCEED, 0x7D61, 0xD5A9, 0x7D62, 0xFAE2, 0x7D66, 0xD0E5, 0x7D68, 0xEBD6, 0x7D6A, 0xECDF, 0x7D6E, 0xDFFC, 0x7D71, 0xF7D6, + 0x7D72, 0xDEEA, 0x7D73, 0xCBB4, 0x7D76, 0xEFBE, 0x7D79, 0xCCB5, 0x7D7F, 0xCFBD, 0x7D8E, 0xEFF2, 0x7D8F, 0xE2B7, 0x7D93, 0xCCE8, + 0x7D9C, 0xF0FC, 0x7DA0, 0xD6E0, 0x7DA2, 0xF1C6, 0x7DAC, 0xE2B8, 0x7DAD, 0xEBAB, 0x7DB1, 0xCBB5, 0x7DB2, 0xD8D1, 0x7DB4, 0xF4CE, + 0x7DB5, 0xF3F7, 0x7DB8, 0xD7C6, 0x7DBA, 0xD1BB, 0x7DBB, 0xF7AA, 0x7DBD, 0xEDCA, 0x7DBE, 0xD7D3, 0x7DBF, 0xD8FA, 0x7DC7, 0xF6C5, + 0x7DCA, 0xD1CC, 0x7DCB, 0xDDFC, 0x7DD6, 0xDFFD, 0x7DD8, 0xF9E5, 0x7DDA, 0xE0CA, 0x7DDD, 0xF2FD, 0x7DDE, 0xD3B0, 0x7DE0, 0xF4F3, + 0x7DE1, 0xDAC9, 0x7DE3, 0xE6DE, 0x7DE8, 0xF8BA, 0x7DE9, 0xE8D0, 0x7DEC, 0xD8FB, 0x7DEF, 0xEAD5, 0x7DF4, 0xD6A3, 0x7DFB, 0xF6C6, + 0x7E09, 0xF2DB, 0x7E0A, 0xE4FC, 0x7E15, 0xE8B2, 0x7E1B, 0xDADA, 0x7E1D, 0xF2DC, 0x7E1E, 0xFBD6, 0x7E1F, 0xE9B2, 0x7E21, 0xEEAD, + 0x7E23, 0xFAE3, 0x7E2B, 0xDCEE, 0x7E2E, 0xF5EA, 0x7E2F, 0xE6E0, 0x7E31, 0xF0FD, 0x7E37, 0xD7AC, 0x7E3D, 0xF5C5, 0x7E3E, 0xEEE0, + 0x7E41, 0xDBE5, 0x7E43, 0xDDDE, 0x7E46, 0xD9F0, 0x7E47, 0xE9A3, 0x7E52, 0xF1F9, 0x7E54, 0xF2C4, 0x7E55, 0xE0CB, 0x7E5E, 0xE9A4, + 0x7E61, 0xE2B9, 0x7E69, 0xE3B1, 0x7E6A, 0xFCEB, 0x7E6B, 0xCDA8, 0x7E6D, 0xCCB6, 0x7E70, 0xF0DB, 0x7E79, 0xE6BA, 0x7E7C, 0xCDA9, + 0x7E82, 0xF3C3, 0x7E8C, 0xE1D9, 0x7E8F, 0xEFAB, 0x7E93, 0xE7C5, 0x7E96, 0xE0E9, 0x7E98, 0xF3C5, 0x7E9B, 0xD4C0, 0x7E9C, 0xD5BF, + 0x7F36, 0xDDAE, 0x7F38, 0xF9FC, 0x7F3A, 0xCCC0, 0x7F4C, 0xE5A2, 0x7F50, 0xCEB8, 0x7F54, 0xD8D2, 0x7F55, 0xF9D6, 0x7F6A, 0xF1AA, + 0x7F6B, 0xCED1, 0x7F6E, 0xF6C7, 0x7F70, 0xDBEB, 0x7F72, 0xDFFE, 0x7F75, 0xD8E1, 0x7F77, 0xF7F3, 0x7F79, 0xD7E7, 0x7F85, 0xD4FE, + 0x7F88, 0xD1BC, 0x7F8A, 0xE5CF, 0x7F8C, 0xCBB6, 0x7F8E, 0xDAB8, 0x7F94, 0xCDC4, 0x7F9A, 0xD6BE, 0x7F9E, 0xE2BA, 0x7FA4, 0xCFD8, + 0x7FA8, 0xE0CC, 0x7FA9, 0xEBF9, 0x7FB2, 0xFDFD, 0x7FB8, 0xD7E8, 0x7FB9, 0xCBD8, 0x7FBD, 0xE9E2, 0x7FC1, 0xE8BA, 0x7FC5, 0xE3C7, + 0x7FCA, 0xECCD, 0x7FCC, 0xECCE, 0x7FCE, 0xD6BF, 0x7FD2, 0xE3A7, 0x7FD4, 0xDFD6, 0x7FD5, 0xFDE8, 0x7FDF, 0xEEE1, 0x7FE0, 0xF6A8, + 0x7FE1, 0xDDFD, 0x7FE9, 0xF8BB, 0x7FEB, 0xE8D1, 0x7FF0, 0xF9D7, 0x7FF9, 0xCEEE, 0x7FFC, 0xECCF, 0x8000, 0xE9A5, 0x8001, 0xD6D5, + 0x8003, 0xCDC5, 0x8005, 0xEDBA, 0x8006, 0xD1BD, 0x8009, 0xCFBE, 0x800C, 0xECBB, 0x8010, 0xD2B1, 0x8015, 0xCCE9, 0x8017, 0xD9C4, + 0x8018, 0xE9FC, 0x802D, 0xD1BE, 0x8033, 0xECBC, 0x8036, 0xE5AD, 0x803D, 0xF7B0, 0x803F, 0xCCEA, 0x8043, 0xD3C4, 0x8046, 0xD6C0, + 0x804A, 0xD6FD, 0x8056, 0xE1A1, 0x8058, 0xDEBD, 0x805A, 0xF6A9, 0x805E, 0xDAA4, 0x806F, 0xD6A4, 0x8070, 0xF5C6, 0x8072, 0xE1A2, + 0x8073, 0xE9C6, 0x8077, 0xF2C5, 0x807D, 0xF4E9, 0x807E, 0xD6EC, 0x807F, 0xEBD3, 0x8084, 0xECBD, 0x8085, 0xE2DC, 0x8086, 0xDEEB, + 0x8087, 0xF0DC, 0x8089, 0xEBBF, 0x808B, 0xD7CE, 0x808C, 0xD1BF, 0x8096, 0xF5AB, 0x809B, 0xF9FD, 0x809D, 0xCADC, 0x80A1, 0xCDC6, + 0x80A2, 0xF2B6, 0x80A5, 0xDDFE, 0x80A9, 0xCCB7, 0x80AA, 0xDBB8, 0x80AF, 0xD0E9, 0x80B1, 0xCEDD, 0x80B2, 0xEBC0, 0x80B4, 0xFDA2, + 0x80BA, 0xF8CB, 0x80C3, 0xEAD6, 0x80C4, 0xF1B0, 0x80CC, 0xDBCE, 0x80CE, 0xF7C3, 0x80DA, 0xDBCF, 0x80DB, 0xCBA4, 0x80DE, 0xF8E0, + 0x80E1, 0xFBD7, 0x80E4, 0xEBCA, 0x80E5, 0xE0A1, 0x80F1, 0xCECD, 0x80F4, 0xD4DC, 0x80F8, 0xFDD8, 0x80FD, 0xD2F6, 0x8102, 0xF2B7, + 0x8105, 0xFAF6, 0x8106, 0xF6AA, 0x8107, 0xFAF7, 0x8108, 0xD8E6, 0x810A, 0xF4B1, 0x8118, 0xE8D2, 0x811A, 0xCAC5, 0x811B, 0xCCEB, + 0x8123, 0xE2EE, 0x8129, 0xE2BB, 0x812B, 0xF7AD, 0x812F, 0xF8E1, 0x8139, 0xF3EC, 0x813E, 0xDEA1, 0x814B, 0xE4FD, 0x814E, 0xE3EC, + 0x8150, 0xDDAF, 0x8151, 0xDDB0, 0x8154, 0xCBB7, 0x8155, 0xE8D3, 0x8165, 0xE1A3, 0x8166, 0xD2E0, 0x816B, 0xF0FE, 0x8170, 0xE9A6, + 0x8171, 0xCBF2, 0x8178, 0xEDF3, 0x8179, 0xDCD9, 0x817A, 0xE0CD, 0x817F, 0xF7DA, 0x8180, 0xDBB9, 0x8188, 0xCCAE, 0x818A, 0xDADB, + 0x818F, 0xCDC7, 0x819A, 0xDDB1, 0x819C, 0xD8AF, 0x819D, 0xE3A3, 0x81A0, 0xCEEF, 0x81A3, 0xF2F3, 0x81A8, 0xF8B3, 0x81B3, 0xE0CE, + 0x81B5, 0xF5FD, 0x81BA, 0xEBEC, 0x81BD, 0xD3C5, 0x81BE, 0xFCEC, 0x81BF, 0xD2DB, 0x81C0, 0xD4EB, 0x81C2, 0xDEA2, 0x81C6, 0xE5E6, + 0x81CD, 0xF0B0, 0x81D8, 0xD5C4, 0x81DF, 0xEDF4, 0x81E3, 0xE3ED, 0x81E5, 0xE8C2, 0x81E7, 0xEDF5, 0x81E8, 0xD7FC, 0x81EA, 0xEDBB, + 0x81ED, 0xF6AB, 0x81F3, 0xF2B8, 0x81F4, 0xF6C8, 0x81FA, 0xD3E6, 0x81FB, 0xF2DD, 0x81FC, 0xCFBF, 0x81FE, 0xEBAC, 0x8205, 0xCFC0, + 0x8207, 0xE6A8, 0x8208, 0xFDE9, 0x820A, 0xCFC1, 0x820C, 0xE0DF, 0x820D, 0xDEEC, 0x8212, 0xE0A2, 0x821B, 0xF4BF, 0x821C, 0xE2EF, + 0x821E, 0xD9F1, 0x821F, 0xF1C7, 0x8221, 0xCBB8, 0x822A, 0xF9FE, 0x822B, 0xDBBA, 0x822C, 0xDAF5, 0x8235, 0xF6EC, 0x8236, 0xDADC, + 0x8237, 0xFAE4, 0x8239, 0xE0CF, 0x8240, 0xDDB2, 0x8245, 0xE6A9, 0x8247, 0xEFF3, 0x8259, 0xF3ED, 0x8264, 0xEBFA, 0x8266, 0xF9E6, + 0x826E, 0xCADD, 0x826F, 0xD5DE, 0x8271, 0xCADE, 0x8272, 0xDFE4, 0x8276, 0xE6FD, 0x8278, 0xF5AC, 0x827E, 0xE4F5, 0x828B, 0xE9E3, + 0x828D, 0xEDCB, 0x828E, 0xCFE4, 0x8292, 0xD8D3, 0x8299, 0xDDB3, 0x829A, 0xD4EC, 0x829D, 0xF2B9, 0x829F, 0xDFB7, 0x82A5, 0xCBCE, + 0x82A6, 0xFBD8, 0x82A9, 0xD0D9, 0x82AC, 0xDDD2, 0x82AD, 0xF7F4, 0x82AE, 0xE7DC, 0x82AF, 0xE4A5, 0x82B1, 0xFCA3, 0x82B3, 0xDBBB, + 0x82B7, 0xF2BA, 0x82B8, 0xE9FD, 0x82B9, 0xD0CA, 0x82BB, 0xF5D6, 0x82BC, 0xD9C5, 0x82BD, 0xE4B4, 0x82BF, 0xEDA7, 0x82D1, 0xEABD, + 0x82D2, 0xE6FE, 0x82D4, 0xF7C4, 0x82D5, 0xF5AD, 0x82D7, 0xD9E0, 0x82DB, 0xCAB4, 0x82DE, 0xF8E2, 0x82DF, 0xCFC2, 0x82E1, 0xECBE, + 0x82E5, 0xE5B4, 0x82E6, 0xCDC8, 0x82E7, 0xEEC8, 0x82F1, 0xE7C8, 0x82FD, 0xCDC9, 0x82FE, 0xF9B7, 0x8301, 0xF1E8, 0x8302, 0xD9F2, + 0x8303, 0xDBF5, 0x8304, 0xCAB5, 0x8305, 0xD9C6, 0x8309, 0xD8C9, 0x8317, 0xD9AB, 0x8328, 0xEDBC, 0x832B, 0xD8D4, 0x832F, 0xDCDA, + 0x8331, 0xE2BC, 0x8334, 0xFCED, 0x8335, 0xECE0, 0x8336, 0xD2FE, 0x8338, 0xE9C7, 0x8339, 0xE6AA, 0x8340, 0xE2F0, 0x8347, 0xFABB, + 0x8349, 0xF5AE, 0x834A, 0xFBAA, 0x834F, 0xECFB, 0x8351, 0xECBF, 0x8352, 0xFCD8, 0x8373, 0xD4E5, 0x8377, 0xF9C3, 0x837B, 0xEEE2, + 0x8389, 0xD7E9, 0x838A, 0xEDF6, 0x838E, 0xDEED, 0x8396, 0xCCEC, 0x8398, 0xE3EE, 0x839E, 0xE8D4, 0x83A2, 0xFAF8, 0x83A9, 0xDDB4, + 0x83AA, 0xE4B5, 0x83AB, 0xD8B0, 0x83BD, 0xD8D5, 0x83C1, 0xF4EA, 0x83C5, 0xCEB9, 0x83C9, 0xD6E1, 0x83CA, 0xCFD2, 0x83CC, 0xD0B6, + 0x83D3, 0xCEA2, 0x83D6, 0xF3EE, 0x83DC, 0xF3F8, 0x83E9, 0xDCCC, 0x83EB, 0xD0CB, 0x83EF, 0xFCA4, 0x83F0, 0xCDCA, 0x83F1, 0xD7D4, + 0x83F2, 0xDEA3, 0x83F4, 0xE4E0, 0x83F9, 0xEEC9, 0x83FD, 0xE2DD, 0x8403, 0xF5FE, 0x8404, 0xD4AC, 0x840A, 0xD5D1, 0x840C, 0xD8F0, + 0x840D, 0xF8C3, 0x840E, 0xEAD7, 0x8429, 0xF5D7, 0x842C, 0xD8BF, 0x8431, 0xFDC0, 0x8438, 0xEBAD, 0x843D, 0xD5AA, 0x8449, 0xE7A8, + 0x8457, 0xEECA, 0x845B, 0xCAE7, 0x8461, 0xF8E3, 0x8463, 0xD4DD, 0x8466, 0xEAD8, 0x846B, 0xFBD9, 0x846C, 0xEDF7, 0x846F, 0xE5B5, + 0x8475, 0xD0AD, 0x847A, 0xF1F1, 0x8490, 0xE2BD, 0x8494, 0xE3C8, 0x8499, 0xD9D5, 0x849C, 0xDFAA, 0x84A1, 0xDBBC, 0x84B2, 0xF8E4, + 0x84B8, 0xF1FA, 0x84BB, 0xE5B6, 0x84BC, 0xF3EF, 0x84BF, 0xFBDA, 0x84C0, 0xE1E0, 0x84C2, 0xD9AC, 0x84C4, 0xF5EB, 0x84C6, 0xE0B6, + 0x84C9, 0xE9C8, 0x84CB, 0xCBCF, 0x84CD, 0xE3C9, 0x84D1, 0xDEEE, 0x84DA, 0xE2BE, 0x84EC, 0xDCEF, 0x84EE, 0xD6A5, 0x84F4, 0xE2F1, + 0x84FC, 0xD6FE, 0x8511, 0xD9A1, 0x8513, 0xD8C0, 0x8514, 0xDCDB, 0x8517, 0xEDBD, 0x8518, 0xDFB8, 0x851A, 0xEAA5, 0x851E, 0xD7AD, + 0x8521, 0xF3F9, 0x8523, 0xEDF8, 0x8525, 0xF5C7, 0x852C, 0xE1CA, 0x852D, 0xEBE3, 0x852F, 0xF2DE, 0x853D, 0xF8CC, 0x853F, 0xEAD9, + 0x8541, 0xD3C6, 0x8543, 0xDBE6, 0x8549, 0xF5AF, 0x854E, 0xCEF0, 0x8553, 0xE9FE, 0x8559, 0xFBB6, 0x8563, 0xE2F2, 0x8568, 0xCFF2, + 0x8569, 0xF7B9, 0x856A, 0xD9F3, 0x856D, 0xE1CB, 0x8584, 0xDADD, 0x8587, 0xDAB9, 0x858F, 0xEBFB, 0x8591, 0xCBB9, 0x8594, 0xEDF9, + 0x859B, 0xE0E0, 0x85A6, 0xF4C0, 0x85A8, 0xFDBC, 0x85A9, 0xDFB1, 0x85AA, 0xE3EF, 0x85AF, 0xE0A3, 0x85B0, 0xFDB9, 0x85BA, 0xF0B1, + 0x85C1, 0xCDCB, 0x85C9, 0xEDBE, 0x85CD, 0xD5C0, 0x85CE, 0xE3F0, 0x85CF, 0xEDFA, 0x85D5, 0xE9E4, 0x85DC, 0xD5ED, 0x85DD, 0xE7DD, + 0x85E4, 0xD4F6, 0x85E5, 0xE5B7, 0x85E9, 0xDBE7, 0x85EA, 0xE2BF, 0x85F7, 0xEECB, 0x85FA, 0xD7F4, 0x85FB, 0xF0DD, 0x85FF, 0xCEAB, + 0x8602, 0xE7DE, 0x8606, 0xD6D6, 0x8607, 0xE1CC, 0x860A, 0xE8B3, 0x8616, 0xE5EE, 0x8617, 0xDCA2, 0x861A, 0xE0D0, 0x862D, 0xD5B5, + 0x863F, 0xD5A1, 0x864E, 0xFBDB, 0x8650, 0xF9CB, 0x8654, 0xCBF3, 0x8655, 0xF4A5, 0x865B, 0xFAC8, 0x865C, 0xD6D7, 0x865E, 0xE9E5, + 0x865F, 0xFBDC, 0x8667, 0xFDD0, 0x8679, 0xFBF6, 0x868A, 0xDAA5, 0x868C, 0xDBBD, 0x8693, 0xECE2, 0x86A3, 0xCDF7, 0x86A4, 0xF0DE, + 0x86A9, 0xF6C9, 0x86C7, 0xDEEF, 0x86CB, 0xD3B1, 0x86D4, 0xFCEE, 0x86D9, 0xE8C3, 0x86DB, 0xF1C8, 0x86DF, 0xCEF1, 0x86E4, 0xF9ED, + 0x86ED, 0xF2F4, 0x86FE, 0xE4B6, 0x8700, 0xF5B9, 0x8702, 0xDCF0, 0x8703, 0xE3F1, 0x8708, 0xE8A5, 0x8718, 0xF2BB, 0x871A, 0xDEA4, + 0x871C, 0xDACC, 0x874E, 0xCAE9, 0x8755, 0xE3DA, 0x8757, 0xFCD9, 0x875F, 0xEADA, 0x8766, 0xF9C4, 0x8768, 0xE3A4, 0x8774, 0xFBDD, + 0x8776, 0xEFCA, 0x8778, 0xE8C4, 0x8782, 0xD5CC, 0x878D, 0xEBD7, 0x879F, 0xD9AD, 0x87A2, 0xFBAB, 0x87B3, 0xD3D9, 0x87BA, 0xD5A2, + 0x87C4, 0xF6DE, 0x87E0, 0xDAF6, 0x87EC, 0xE0D1, 0x87EF, 0xE9A8, 0x87F2, 0xF5F9, 0x87F9, 0xFAAF, 0x87FB, 0xEBFC, 0x87FE, 0xE0EA, + 0x8805, 0xE3B2, 0x881F, 0xD5C5, 0x8822, 0xF1E3, 0x8823, 0xD5EE, 0x8831, 0xCDCC, 0x8836, 0xEDD9, 0x883B, 0xD8C1, 0x8840, 0xFAEC, + 0x8846, 0xF1EB, 0x884C, 0xFABC, 0x884D, 0xE6E2, 0x8852, 0xFAE5, 0x8853, 0xE2FA, 0x8857, 0xCAB6, 0x8859, 0xE4B7, 0x885B, 0xEADB, + 0x885D, 0xF5FA, 0x8861, 0xFBAC, 0x8862, 0xCFC3, 0x8863, 0xEBFD, 0x8868, 0xF8FA, 0x886B, 0xDFB9, 0x8870, 0xE1F1, 0x8872, 0xD2A4, + 0x8877, 0xF5FB, 0x887E, 0xD0DA, 0x887F, 0xD0DB, 0x8881, 0xEABE, 0x8882, 0xD9B1, 0x8888, 0xCAB7, 0x888B, 0xD3E7, 0x888D, 0xF8E5, + 0x8892, 0xD3B2, 0x8896, 0xE2C0, 0x8897, 0xF2DF, 0x889E, 0xCDE5, 0x88AB, 0xF9AC, 0x88B4, 0xCDCD, 0x88C1, 0xEEAE, 0x88C2, 0xD6AE, + 0x88CF, 0xD7EA, 0x88D4, 0xE7E0, 0x88D5, 0xEBAE, 0x88D9, 0xCFD9, 0x88DC, 0xDCCD, 0x88DD, 0xEDFB, 0x88DF, 0xDEF0, 0x88E1, 0xD7EB, + 0x88E8, 0xDEA5, 0x88F3, 0xDFD7, 0x88F4, 0xDBD0, 0x88F5, 0xDBD1, 0x88F8, 0xD5A3, 0x88FD, 0xF0B2, 0x8907, 0xDCDC, 0x8910, 0xCAE8, + 0x8912, 0xF8E6, 0x8913, 0xDCCE, 0x8918, 0xEADC, 0x8919, 0xDBD2, 0x8925, 0xE9B3, 0x892A, 0xF7DB, 0x8936, 0xE3A8, 0x8938, 0xD7AE, + 0x893B, 0xE0E1, 0x8941, 0xCBBA, 0x8944, 0xE5D1, 0x895F, 0xD0DC, 0x8964, 0xD5C1, 0x896A, 0xD8CA, 0x8972, 0xE3A9, 0x897F, 0xE0A4, + 0x8981, 0xE9A9, 0x8983, 0xD3C7, 0x8986, 0xDCDD, 0x8987, 0xF8AE, 0x898B, 0xCCB8, 0x898F, 0xD0AE, 0x8993, 0xD8F2, 0x8996, 0xE3CA, + 0x89A1, 0xCCAF, 0x89A9, 0xD4AD, 0x89AA, 0xF6D1, 0x89B2, 0xD0CC, 0x89BA, 0xCAC6, 0x89BD, 0xD5C2, 0x89C0, 0xCEBA, 0x89D2, 0xCAC7, + 0x89E3, 0xFAB0, 0x89F4, 0xDFD8, 0x89F8, 0xF5BA, 0x8A00, 0xE5EB, 0x8A02, 0xEFF4, 0x8A03, 0xDDB5, 0x8A08, 0xCDAA, 0x8A0A, 0xE3F2, + 0x8A0C, 0xFBF7, 0x8A0E, 0xF7D0, 0x8A13, 0xFDBA, 0x8A16, 0xFDE1, 0x8A17, 0xF6FE, 0x8A18, 0xD1C0, 0x8A1B, 0xE8C5, 0x8A1D, 0xE4B8, + 0x8A1F, 0xE1E8, 0x8A23, 0xCCC1, 0x8A25, 0xD2ED, 0x8A2A, 0xDBBE, 0x8A2D, 0xE0E2, 0x8A31, 0xFAC9, 0x8A34, 0xE1CD, 0x8A36, 0xCAB8, + 0x8A3A, 0xF2E0, 0x8A3B, 0xF1C9, 0x8A50, 0xDEF1, 0x8A54, 0xF0DF, 0x8A55, 0xF8C4, 0x8A5B, 0xEECC, 0x8A5E, 0xDEF2, 0x8A60, 0xE7C9, + 0x8A62, 0xE2F3, 0x8A63, 0xE7E1, 0x8A66, 0xE3CB, 0x8A69, 0xE3CC, 0x8A6D, 0xCFF8, 0x8A6E, 0xEFAC, 0x8A70, 0xFDFE, 0x8A71, 0xFCA5, + 0x8A72, 0xFAB1, 0x8A73, 0xDFD9, 0x8A75, 0xE0D2, 0x8A79, 0xF4DA, 0x8A85, 0xF1CA, 0x8A87, 0xCEA3, 0x8A8C, 0xF2BC, 0x8A8D, 0xECE3, + 0x8A93, 0xE0A5, 0x8A95, 0xF7AB, 0x8A98, 0xEBAF, 0x8A9E, 0xE5DE, 0x8AA0, 0xE1A4, 0x8AA1, 0xCDAB, 0x8AA3, 0xD9F4, 0x8AA4, 0xE8A6, + 0x8AA5, 0xCDCE, 0x8AA6, 0xE1E9, 0x8AA8, 0xFCEF, 0x8AAA, 0xE0E3, 0x8AB0, 0xE2C1, 0x8AB2, 0xCEA4, 0x8AB9, 0xDEA6, 0x8ABC, 0xEBFE, + 0x8ABE, 0xEBDD, 0x8ABF, 0xF0E0, 0x8AC2, 0xF4DB, 0x8AC4, 0xE2F4, 0x8AC7, 0xD3C8, 0x8ACB, 0xF4EB, 0x8ACD, 0xEEB5, 0x8ACF, 0xF5D8, + 0x8AD2, 0xD5DF, 0x8AD6, 0xD6E5, 0x8ADB, 0xEBB0, 0x8ADC, 0xF4E3, 0x8AE1, 0xE3CD, 0x8AE6, 0xF4F4, 0x8AE7, 0xFAB2, 0x8AEA, 0xEFF5, + 0x8AEB, 0xCADF, 0x8AED, 0xEBB1, 0x8AEE, 0xEDBF, 0x8AF1, 0xFDC9, 0x8AF6, 0xE4A6, 0x8AF7, 0xF9A4, 0x8AF8, 0xF0B3, 0x8AFA, 0xE5EC, + 0x8AFE, 0xD1E7, 0x8B00, 0xD9C7, 0x8B01, 0xE4D7, 0x8B02, 0xEADD, 0x8B04, 0xD4F7, 0x8B0E, 0xDABA, 0x8B10, 0xDACD, 0x8B14, 0xF9CC, + 0x8B16, 0xE1DA, 0x8B17, 0xDBBF, 0x8B19, 0xCCC5, 0x8B1A, 0xECD0, 0x8B1B, 0xCBBB, 0x8B1D, 0xDEF3, 0x8B20, 0xE9AA, 0x8B28, 0xD9C8, + 0x8B2B, 0xEEE3, 0x8B2C, 0xD7BD, 0x8B33, 0xCFC4, 0x8B39, 0xD0CD, 0x8B41, 0xFCA6, 0x8B49, 0xF1FB, 0x8B4E, 0xFDD2, 0x8B4F, 0xD1C1, + 0x8B58, 0xE3DB, 0x8B5A, 0xD3C9, 0x8B5C, 0xDCCF, 0x8B66, 0xCCED, 0x8B6C, 0xDEA7, 0x8B6F, 0xE6BB, 0x8B70, 0xECA1, 0x8B74, 0xCCB9, + 0x8B77, 0xFBDE, 0x8B7D, 0xE7E2, 0x8B80, 0xD4C1, 0x8B8A, 0xDCA8, 0x8B90, 0xE2C2, 0x8B92, 0xF3D8, 0x8B93, 0xE5D3, 0x8B96, 0xF3D9, + 0x8B9A, 0xF3C6, 0x8C37, 0xCDDB, 0x8C3F, 0xCDAC, 0x8C41, 0xFCC3, 0x8C46, 0xD4E7, 0x8C48, 0xD1C2, 0x8C4A, 0xF9A5, 0x8C4C, 0xE8D5, + 0x8C55, 0xE3CE, 0x8C5A, 0xD4CA, 0x8C61, 0xDFDA, 0x8C6A, 0xFBDF, 0x8C6B, 0xE7E3, 0x8C79, 0xF8FB, 0x8C7A, 0xE3CF, 0x8C82, 0xF5B0, + 0x8C8A, 0xD8E7, 0x8C8C, 0xD9C9, 0x8C9D, 0xF8AF, 0x8C9E, 0xEFF6, 0x8CA0, 0xDDB6, 0x8CA1, 0xEEAF, 0x8CA2, 0xCDF8, 0x8CA7, 0xDEB8, + 0x8CA8, 0xFCA7, 0x8CA9, 0xF7FC, 0x8CAA, 0xF7B1, 0x8CAB, 0xCEBB, 0x8CAC, 0xF4A1, 0x8CAF, 0xEECD, 0x8CB0, 0xE1AE, 0x8CB3, 0xECC3, + 0x8CB4, 0xCFFE, 0x8CB6, 0xF8BF, 0x8CB7, 0xD8E2, 0x8CB8, 0xD3E8, 0x8CBB, 0xDEA8, 0x8CBC, 0xF4E4, 0x8CBD, 0xECC2, 0x8CBF, 0xD9F5, + 0x8CC0, 0xF9C5, 0x8CC1, 0xDDD3, 0x8CC2, 0xD6F1, 0x8CC3, 0xECFC, 0x8CC4, 0xFCF0, 0x8CC7, 0xEDC0, 0x8CC8, 0xCAB9, 0x8CCA, 0xEEE4, + 0x8CD1, 0xF2E1, 0x8CD3, 0xDEB9, 0x8CDA, 0xD6F2, 0x8CDC, 0xDEF4, 0x8CDE, 0xDFDB, 0x8CE0, 0xDBD3, 0x8CE2, 0xFAE7, 0x8CE3, 0xD8E3, + 0x8CE4, 0xF4C1, 0x8CE6, 0xDDB7, 0x8CEA, 0xF2F5, 0x8CED, 0xD4AE, 0x8CF4, 0xD6F3, 0x8CFB, 0xDDB8, 0x8CFC, 0xCFC5, 0x8CFD, 0xDFDF, + 0x8D04, 0xF2BE, 0x8D05, 0xF6A1, 0x8D07, 0xEBCB, 0x8D08, 0xF1FC, 0x8D0A, 0xF3C7, 0x8D0D, 0xE0EB, 0x8D13, 0xEDFC, 0x8D16, 0xE1DB, + 0x8D64, 0xEEE5, 0x8D66, 0xDEF5, 0x8D6B, 0xFAD3, 0x8D70, 0xF1CB, 0x8D73, 0xD0AF, 0x8D74, 0xDDB9, 0x8D77, 0xD1C3, 0x8D85, 0xF5B1, + 0x8D8A, 0xEAC6, 0x8D99, 0xF0E1, 0x8DA3, 0xF6AC, 0x8DA8, 0xF5D9, 0x8DB3, 0xF0EB, 0x8DBA, 0xDDBA, 0x8DBE, 0xF2BF, 0x8DC6, 0xF7C5, + 0x8DCB, 0xDBA2, 0x8DCC, 0xF2F6, 0x8DCF, 0xCABA, 0x8DDB, 0xF7F5, 0x8DDD, 0xCBE5, 0x8DE1, 0xEEE6, 0x8DE3, 0xE0D3, 0x8DE8, 0xCEA5, + 0x8DEF, 0xD6D8, 0x8DF3, 0xD4AF, 0x8E0A, 0xE9C9, 0x8E0F, 0xD3CE, 0x8E10, 0xF4C2, 0x8E1E, 0xCBE6, 0x8E2A, 0xF1A1, 0x8E30, 0xEBB2, + 0x8E35, 0xF1A2, 0x8E42, 0xEBB3, 0x8E44, 0xF0B4, 0x8E47, 0xCBF4, 0x8E48, 0xD4B0, 0x8E49, 0xF3B2, 0x8E4A, 0xFBB7, 0x8E59, 0xF5EC, + 0x8E5F, 0xEEE7, 0x8E60, 0xF4B2, 0x8E74, 0xF5ED, 0x8E76, 0xCFF3, 0x8E81, 0xF0E2, 0x8E87, 0xEECE, 0x8E8A, 0xF1CC, 0x8E8D, 0xE5B8, + 0x8EAA, 0xD7F5, 0x8EAB, 0xE3F3, 0x8EAC, 0xCFE5, 0x8EC0, 0xCFC6, 0x8ECA, 0xF3B3, 0x8ECB, 0xE4D8, 0x8ECC, 0xCFF9, 0x8ECD, 0xCFDA, + 0x8ED2, 0xFACD, 0x8EDF, 0xE6E3, 0x8EEB, 0xF2E2, 0x8EF8, 0xF5EE, 0x8EFB, 0xCABB, 0x8EFE, 0xE3DC, 0x8F03, 0xCEF2, 0x8F05, 0xD6D9, + 0x8F09, 0xEEB0, 0x8F12, 0xF4E5, 0x8F13, 0xD8C2, 0x8F14, 0xDCD0, 0x8F15, 0xCCEE, 0x8F1B, 0xD5E0, 0x8F1C, 0xF6CA, 0x8F1D, 0xFDCA, + 0x8F1E, 0xD8D6, 0x8F1F, 0xF4CF, 0x8F26, 0xD6A6, 0x8F27, 0xDCBE, 0x8F29, 0xDBD4, 0x8F2A, 0xD7C7, 0x8F2F, 0xF2FE, 0x8F33, 0xF1CD, + 0x8F38, 0xE2C3, 0x8F39, 0xDCDE, 0x8F3B, 0xDCDF, 0x8F3E, 0xEFAD, 0x8F3F, 0xE6AB, 0x8F44, 0xF9DD, 0x8F45, 0xEABF, 0x8F49, 0xEFAE, + 0x8F4D, 0xF4D0, 0x8F4E, 0xCEF3, 0x8F5D, 0xE6AC, 0x8F5F, 0xCEDE, 0x8F62, 0xD5F9, 0x8F9B, 0xE3F4, 0x8F9C, 0xCDD0, 0x8FA3, 0xD5B8, + 0x8FA6, 0xF7FD, 0x8FA8, 0xDCA9, 0x8FAD, 0xDEF6, 0x8FAF, 0xDCAA, 0x8FB0, 0xF2E3, 0x8FB1, 0xE9B4, 0x8FB2, 0xD2DC, 0x8FC2, 0xE9E6, + 0x8FC5, 0xE3F6, 0x8FCE, 0xE7CA, 0x8FD1, 0xD0CE, 0x8FD4, 0xDAF7, 0x8FE6, 0xCABC, 0x8FEA, 0xEEE8, 0x8FEB, 0xDADE, 0x8FED, 0xF2F7, + 0x8FF0, 0xE2FB, 0x8FF2, 0xCCA6, 0x8FF7, 0xDABB, 0x8FF9, 0xEEE9, 0x8FFD, 0xF5DA, 0x9000, 0xF7DC, 0x9001, 0xE1EA, 0x9002, 0xCEC1, + 0x9003, 0xD4B1, 0x9005, 0xFDB1, 0x9006, 0xE6BD, 0x9008, 0xFBAD, 0x900B, 0xF8E7, 0x900D, 0xE1CE, 0x900F, 0xF7E2, 0x9010, 0xF5EF, + 0x9011, 0xCFC7, 0x9014, 0xD4B2, 0x9015, 0xCCEF, 0x9017, 0xD4E8, 0x9019, 0xEECF, 0x901A, 0xF7D7, 0x901D, 0xE0A6, 0x901E, 0xD6C1, + 0x901F, 0xE1DC, 0x9020, 0xF0E3, 0x9021, 0xF1E4, 0x9022, 0xDCF1, 0x9023, 0xD6A7, 0x902E, 0xF4F5, 0x9031, 0xF1CE, 0x9032, 0xF2E4, + 0x9035, 0xD0B0, 0x9038, 0xECEF, 0x903C, 0xF9BA, 0x903E, 0xEBB5, 0x9041, 0xD4ED, 0x9042, 0xE2C4, 0x9047, 0xE9E7, 0x904A, 0xEBB4, + 0x904B, 0xEAA1, 0x904D, 0xF8BC, 0x904E, 0xCEA6, 0x9050, 0xF9C6, 0x9051, 0xFCDA, 0x9053, 0xD4B3, 0x9054, 0xD3B9, 0x9055, 0xEADE, + 0x9059, 0xE9AB, 0x905C, 0xE1E1, 0x905D, 0xD3CF, 0x905E, 0xF4F6, 0x9060, 0xEAC0, 0x9061, 0xE1CF, 0x9063, 0xCCBA, 0x9069, 0xEEEA, + 0x906D, 0xF0E4, 0x906E, 0xF3B4, 0x906F, 0xD4EE, 0x9072, 0xF2C0, 0x9075, 0xF1E5, 0x9077, 0xF4C3, 0x9078, 0xE0D4, 0x907A, 0xEBB6, + 0x907C, 0xD7A1, 0x907D, 0xCBE8, 0x907F, 0xF9AD, 0x9080, 0xE9AD, 0x9081, 0xD8E4, 0x9082, 0xFAB3, 0x9083, 0xE2C5, 0x9084, 0xFCBD, + 0x9087, 0xECC4, 0x9088, 0xD8B1, 0x908A, 0xDCAB, 0x908F, 0xD5A4, 0x9091, 0xEBE9, 0x9095, 0xE8BB, 0x9099, 0xD8D7, 0x90A2, 0xFBAE, + 0x90A3, 0xD1E1, 0x90A6, 0xDBC0, 0x90A8, 0xF5BE, 0x90AA, 0xDEF7, 0x90AF, 0xCAFB, 0x90B0, 0xF7C6, 0x90B1, 0xCFC8, 0x90B5, 0xE1D0, + 0x90B8, 0xEED0, 0x90C1, 0xE9F4, 0x90CA, 0xCEF4, 0x90DE, 0xD5CD, 0x90E1, 0xCFDB, 0x90E8, 0xDDBB, 0x90ED, 0xCEAC, 0x90F5, 0xE9E8, + 0x90FD, 0xD4B4, 0x9102, 0xE4C7, 0x9112, 0xF5DB, 0x9115, 0xFAC1, 0x9119, 0xDEA9, 0x9127, 0xD4F8, 0x912D, 0xEFF7, 0x9132, 0xD3B3, + 0x9149, 0xEBB7, 0x914A, 0xEFF8, 0x914B, 0xF5DC, 0x914C, 0xEDCC, 0x914D, 0xDBD5, 0x914E, 0xF1CF, 0x9152, 0xF1D0, 0x9162, 0xF5B2, + 0x9169, 0xD9AE, 0x916A, 0xD5AC, 0x916C, 0xE2C6, 0x9175, 0xFDA3, 0x9177, 0xFBE5, 0x9178, 0xDFAB, 0x9187, 0xE2F5, 0x9189, 0xF6AD, + 0x918B, 0xF5B3, 0x918D, 0xF0B5, 0x9192, 0xE1A5, 0x919C, 0xF5DD, 0x91AB, 0xECA2, 0x91AC, 0xEDFD, 0x91AE, 0xF5B4, 0x91AF, 0xFBB8, + 0x91B1, 0xDBA3, 0x91B4, 0xD6CA, 0x91B5, 0xCBD9, 0x91C0, 0xE5D4, 0x91C7, 0xF3FA, 0x91C9, 0xEBB8, 0x91CB, 0xE0B7, 0x91CC, 0xD7EC, + 0x91CD, 0xF1EC, 0x91CE, 0xE5AF, 0x91CF, 0xD5E1, 0x91D0, 0xD7ED, 0x91D1, 0xD1D1, 0x91D7, 0xE1F2, 0x91D8, 0xEFF9, 0x91DC, 0xDDBC, + 0x91DD, 0xF6DC, 0x91E3, 0xF0E5, 0x91E7, 0xF4C4, 0x91EA, 0xE9E9, 0x91F5, 0xF3FB, 0x920D, 0xD4EF, 0x9210, 0xCCA2, 0x9211, 0xF7FE, + 0x9212, 0xDFBC, 0x9217, 0xEBCD, 0x921E, 0xD0B7, 0x9234, 0xD6C2, 0x923A, 0xE8AD, 0x923F, 0xEFAF, 0x9240, 0xCBA5, 0x9245, 0xCBE9, + 0x9249, 0xFAE8, 0x9257, 0xCCC6, 0x925B, 0xE6E7, 0x925E, 0xEAC7, 0x9262, 0xDBA4, 0x9264, 0xCFC9, 0x9265, 0xE2FC, 0x9266, 0xEFFA, + 0x9280, 0xEBDE, 0x9283, 0xF5C8, 0x9285, 0xD4DE, 0x9291, 0xE0D5, 0x9293, 0xEFB0, 0x9296, 0xE2C7, 0x9298, 0xD9AF, 0x929C, 0xF9E7, + 0x92B3, 0xE7E5, 0x92B6, 0xCFCA, 0x92B7, 0xE1D1, 0x92B9, 0xE2C8, 0x92CC, 0xEFFB, 0x92CF, 0xFAF9, 0x92D2, 0xDCF2, 0x92E4, 0xE0A7, + 0x92EA, 0xF8E8, 0x92F8, 0xCBEA, 0x92FC, 0xCBBC, 0x9304, 0xD6E2, 0x9310, 0xF5DE, 0x9318, 0xF5DF, 0x931A, 0xEEB6, 0x931E, 0xE2F6, + 0x931F, 0xD3CA, 0x9320, 0xEFFC, 0x9321, 0xD1C4, 0x9322, 0xEFB1, 0x9324, 0xD1C5, 0x9326, 0xD0DE, 0x9328, 0xD9E1, 0x932B, 0xE0B8, + 0x932E, 0xCDD1, 0x932F, 0xF3B9, 0x9348, 0xE7CC, 0x934A, 0xD6A8, 0x934B, 0xCEA7, 0x934D, 0xD4B5, 0x9354, 0xE4C8, 0x935B, 0xD3B4, + 0x936E, 0xEBB9, 0x9375, 0xCBF5, 0x937C, 0xF6DD, 0x937E, 0xF1A3, 0x938C, 0xCCC7, 0x9394, 0xE9CA, 0x9396, 0xE1F0, 0x939A, 0xF5E0, + 0x93A3, 0xFBAF, 0x93A7, 0xCBD1, 0x93AC, 0xFBE0, 0x93AD, 0xF2E5, 0x93B0, 0xECF0, 0x93C3, 0xF0EC, 0x93D1, 0xEEEB, 0x93DE, 0xE9CB, + 0x93E1, 0xCCF0, 0x93E4, 0xD7AF, 0x93F6, 0xF3A1, 0x9404, 0xFCF5, 0x9418, 0xF1A4, 0x9425, 0xE0D6, 0x942B, 0xEFB2, 0x9435, 0xF4D1, + 0x9438, 0xF7A1, 0x9444, 0xF1D1, 0x9451, 0xCAFC, 0x9452, 0xCAFD, 0x945B, 0xCECE, 0x947D, 0xF3C8, 0x947F, 0xF3BA, 0x9577, 0xEDFE, + 0x9580, 0xDAA6, 0x9583, 0xE0EC, 0x9589, 0xF8CD, 0x958B, 0xCBD2, 0x958F, 0xEBCE, 0x9591, 0xF9D8, 0x9592, 0xF9D9, 0x9593, 0xCAE0, + 0x9594, 0xDACA, 0x9598, 0xCBA6, 0x95A3, 0xCAC8, 0x95A4, 0xF9EE, 0x95A5, 0xDBEC, 0x95A8, 0xD0B1, 0x95AD, 0xD5EF, 0x95B1, 0xE6F3, + 0x95BB, 0xE7A2, 0x95BC, 0xE4D9, 0x95C7, 0xE4E1, 0x95CA, 0xFCC4, 0x95D4, 0xF9EF, 0x95D5, 0xCFF4, 0x95D6, 0xF7E6, 0x95DC, 0xCEBC, + 0x95E1, 0xF4C5, 0x95E2, 0xDCA3, 0x961C, 0xDDBD, 0x9621, 0xF4C6, 0x962A, 0xF8A1, 0x962E, 0xE8D6, 0x9632, 0xDBC1, 0x963B, 0xF0E6, + 0x963F, 0xE4B9, 0x9640, 0xF6ED, 0x9642, 0xF9AE, 0x9644, 0xDDBE, 0x964B, 0xD7B0, 0x964C, 0xD8E8, 0x964D, 0xCBBD, 0x9650, 0xF9DA, + 0x965B, 0xF8CE, 0x965C, 0xF9F0, 0x965D, 0xE0ED, 0x965E, 0xE3B3, 0x965F, 0xF4B3, 0x9662, 0xEAC2, 0x9663, 0xF2E6, 0x9664, 0xF0B6, + 0x966A, 0xDBD6, 0x9670, 0xEBE4, 0x9673, 0xF2E7, 0x9675, 0xD7D5, 0x9676, 0xD4B6, 0x9677, 0xF9E8, 0x9678, 0xD7C1, 0x967D, 0xE5D5, + 0x9685, 0xE9EA, 0x9686, 0xD7CC, 0x968A, 0xD3E9, 0x968B, 0xE2C9, 0x968D, 0xFCDB, 0x968E, 0xCDAD, 0x9694, 0xCCB0, 0x9695, 0xEAA2, + 0x9698, 0xE4F6, 0x9699, 0xD0C0, 0x969B, 0xF0B7, 0x969C, 0xEEA1, 0x96A3, 0xD7F6, 0x96A7, 0xE2CA, 0x96A8, 0xE2CB, 0x96AA, 0xFACF, + 0x96B1, 0xEBDF, 0x96B7, 0xD6CB, 0x96BB, 0xF4B4, 0x96C0, 0xEDCD, 0x96C1, 0xE4D2, 0x96C4, 0xEAA9, 0x96C5, 0xE4BA, 0x96C6, 0xF3A2, + 0x96C7, 0xCDD2, 0x96C9, 0xF6CB, 0x96CB, 0xF1E6, 0x96CC, 0xEDC1, 0x96CD, 0xE8BC, 0x96CE, 0xEED1, 0x96D5, 0xF0E7, 0x96D6, 0xE2CC, + 0x96D9, 0xE4AA, 0x96DB, 0xF5E1, 0x96DC, 0xEDDA, 0x96E2, 0xD7EE, 0x96E3, 0xD1F1, 0x96E8, 0xE9EB, 0x96E9, 0xE9EC, 0x96EA, 0xE0E4, + 0x96EF, 0xDAA7, 0x96F0, 0xDDD4, 0x96F2, 0xEAA3, 0x96F6, 0xD6C3, 0x96F7, 0xD6F4, 0x96F9, 0xDADF, 0x96FB, 0xEFB3, 0x9700, 0xE2CD, + 0x9706, 0xEFFD, 0x9707, 0xF2E8, 0x9711, 0xEFC5, 0x9713, 0xE7E7, 0x9716, 0xD7FD, 0x9719, 0xE7CE, 0x971C, 0xDFDC, 0x971E, 0xF9C7, + 0x9727, 0xD9F6, 0x9730, 0xDFAC, 0x9732, 0xD6DA, 0x9739, 0xDCA4, 0x973D, 0xF0B8, 0x9742, 0xD5FA, 0x9744, 0xE4F7, 0x9748, 0xD6C4, + 0x9751, 0xF4EC, 0x9756, 0xEFFE, 0x975C, 0xF0A1, 0x975E, 0xDEAA, 0x9761, 0xDABC, 0x9762, 0xD8FC, 0x9769, 0xFAD4, 0x976D, 0xECE5, + 0x9774, 0xFCA8, 0x9777, 0xECE6, 0x977A, 0xD8CB, 0x978B, 0xFBB9, 0x978D, 0xE4D3, 0x978F, 0xCDF9, 0x97A0, 0xCFD3, 0x97A8, 0xCAEA, + 0x97AB, 0xCFD4, 0x97AD, 0xF8BD, 0x97C6, 0xF4C7, 0x97CB, 0xEADF, 0x97D3, 0xF9DB, 0x97DC, 0xD4B7, 0x97F3, 0xEBE5, 0x97F6, 0xE1D2, + 0x97FB, 0xEAA4, 0x97FF, 0xFAC2, 0x9800, 0xFBE1, 0x9801, 0xFAED, 0x9802, 0xF0A2, 0x9803, 0xCCF1, 0x9805, 0xFAA3, 0x9806, 0xE2F7, + 0x9808, 0xE2CE, 0x980A, 0xE9F5, 0x980C, 0xE1EB, 0x9810, 0xE7E8, 0x9811, 0xE8D7, 0x9812, 0xDAF8, 0x9813, 0xD4CB, 0x9817, 0xF7F6, + 0x9818, 0xD6C5, 0x982D, 0xD4E9, 0x9830, 0xFAFA, 0x9838, 0xCCF2, 0x9839, 0xF7DD, 0x983B, 0xDEBA, 0x9846, 0xCEA8, 0x984C, 0xF0B9, + 0x984D, 0xE4FE, 0x984E, 0xE4C9, 0x9854, 0xE4D4, 0x9858, 0xEAC3, 0x985A, 0xEFB4, 0x985E, 0xD7BE, 0x9865, 0xFBE2, 0x9867, 0xCDD3, + 0x986B, 0xEFB5, 0x986F, 0xFAE9, 0x98A8, 0xF9A6, 0x98AF, 0xDFBD, 0x98B1, 0xF7C7, 0x98C4, 0xF8FD, 0x98C7, 0xF8FC, 0x98DB, 0xDEAB, + 0x98DC, 0xDBE8, 0x98DF, 0xE3DD, 0x98E1, 0xE1E2, 0x98E2, 0xD1C6, 0x98ED, 0xF6D0, 0x98EE, 0xEBE6, 0x98EF, 0xDAF9, 0x98F4, 0xECC7, + 0x98FC, 0xDEF8, 0x98FD, 0xF8E9, 0x98FE, 0xE3DE, 0x9903, 0xCEF5, 0x9909, 0xFAC3, 0x990A, 0xE5D7, 0x990C, 0xECC8, 0x9910, 0xF3C9, + 0x9913, 0xE4BB, 0x9918, 0xE6AE, 0x991E, 0xEFB6, 0x9920, 0xDCBF, 0x9928, 0xCEBD, 0x9945, 0xD8C3, 0x9949, 0xD0CF, 0x994B, 0xCFFA, + 0x994C, 0xF3CA, 0x994D, 0xE0D7, 0x9951, 0xD1C7, 0x9952, 0xE9AE, 0x9954, 0xE8BD, 0x9957, 0xFAC4, 0x9996, 0xE2CF, 0x9999, 0xFAC5, + 0x999D, 0xF9B8, 0x99A5, 0xDCE0, 0x99A8, 0xFBB0, 0x99AC, 0xD8A9, 0x99AD, 0xE5DF, 0x99AE, 0xF9A7, 0x99B1, 0xF6EE, 0x99B3, 0xF6CC, + 0x99B4, 0xE2F8, 0x99B9, 0xECF1, 0x99C1, 0xDAE0, 0x99D0, 0xF1D2, 0x99D1, 0xD2CC, 0x99D2, 0xCFCB, 0x99D5, 0xCABD, 0x99D9, 0xDDBF, + 0x99DD, 0xF6EF, 0x99DF, 0xDEF9, 0x99ED, 0xFAB4, 0x99F1, 0xD5AD, 0x99FF, 0xF1E7, 0x9A01, 0xDEBE, 0x9A08, 0xDCC0, 0x9A0E, 0xD1C8, + 0x9A0F, 0xD1C9, 0x9A19, 0xF8BE, 0x9A2B, 0xCBF6, 0x9A30, 0xD4F9, 0x9A36, 0xF5E2, 0x9A37, 0xE1D3, 0x9A40, 0xD8E9, 0x9A43, 0xF8FE, + 0x9A45, 0xCFCC, 0x9A4D, 0xFDA4, 0x9A55, 0xCEF6, 0x9A57, 0xFAD0, 0x9A5A, 0xCCF3, 0x9A5B, 0xE6BE, 0x9A5F, 0xF6AE, 0x9A62, 0xD5F0, + 0x9A65, 0xD1CA, 0x9A69, 0xFCBE, 0x9A6A, 0xD5F1, 0x9AA8, 0xCDE9, 0x9AB8, 0xFAB5, 0x9AD3, 0xE2D0, 0x9AD4, 0xF4F7, 0x9AD8, 0xCDD4, + 0x9AE5, 0xE7A3, 0x9AEE, 0xDBA5, 0x9B1A, 0xE2D1, 0x9B27, 0xD7A2, 0x9B2A, 0xF7E3, 0x9B31, 0xEAA6, 0x9B3C, 0xD0A1, 0x9B41, 0xCEDA, + 0x9B42, 0xFBEB, 0x9B43, 0xDBA6, 0x9B44, 0xDBDE, 0x9B45, 0xD8E5, 0x9B4F, 0xEAE0, 0x9B54, 0xD8AA, 0x9B5A, 0xE5E0, 0x9B6F, 0xD6DB, + 0x9B8E, 0xEFC6, 0x9B91, 0xF8EA, 0x9B9F, 0xE4D5, 0x9BAB, 0xCEF7, 0x9BAE, 0xE0D8, 0x9BC9, 0xD7EF, 0x9BD6, 0xF4ED, 0x9BE4, 0xCDE6, + 0x9BE8, 0xCCF4, 0x9C0D, 0xF5E3, 0x9C10, 0xE4CA, 0x9C12, 0xDCE1, 0x9C15, 0xF9C8, 0x9C25, 0xFCBF, 0x9C32, 0xE8A7, 0x9C3B, 0xD8C4, + 0x9C47, 0xCBBE, 0x9C49, 0xDCAE, 0x9C57, 0xD7F7, 0x9CE5, 0xF0E8, 0x9CE7, 0xDDC0, 0x9CE9, 0xCFCD, 0x9CF3, 0xDCF3, 0x9CF4, 0xD9B0, + 0x9CF6, 0xE6E9, 0x9D09, 0xE4BC, 0x9D1B, 0xEAC4, 0x9D26, 0xE4EC, 0x9D28, 0xE4E5, 0x9D3B, 0xFBF8, 0x9D51, 0xCCBB, 0x9D5D, 0xE4BD, + 0x9D60, 0xCDDC, 0x9D61, 0xD9F7, 0x9D6C, 0xDDDF, 0x9D72, 0xEDCE, 0x9DA9, 0xD9D0, 0x9DAF, 0xE5A3, 0x9DB4, 0xF9CD, 0x9DC4, 0xCDAE, + 0x9DD7, 0xCFCE, 0x9DF2, 0xF6AF, 0x9DF8, 0xFDD3, 0x9DF9, 0xEBED, 0x9DFA, 0xD6DC, 0x9E1A, 0xE5A4, 0x9E1E, 0xD5B6, 0x9E75, 0xD6DD, + 0x9E79, 0xF9E9, 0x9E7D, 0xE7A4, 0x9E7F, 0xD6E3, 0x9E92, 0xD1CB, 0x9E93, 0xD6E4, 0x9E97, 0xD5F2, 0x9E9D, 0xDEFA, 0x9E9F, 0xD7F8, + 0x9EA5, 0xD8EA, 0x9EB4, 0xCFD5, 0x9EB5, 0xD8FD, 0x9EBB, 0xD8AB, 0x9EBE, 0xFDCB, 0x9EC3, 0xFCDC, 0x9ECD, 0xE0A8, 0x9ECE, 0xD5F3, + 0x9ED1, 0xFDD9, 0x9ED4, 0xCCA3, 0x9ED8, 0xD9F9, 0x9EDB, 0xD3EA, 0x9EDC, 0xF5F5, 0x9EDE, 0xEFC7, 0x9EE8, 0xD3DA, 0x9EF4, 0xDABD, + 0x9F07, 0xE8A8, 0x9F08, 0xDCAF, 0x9F0E, 0xF0A3, 0x9F13, 0xCDD5, 0x9F20, 0xE0A9, 0x9F3B, 0xDEAC, 0x9F4A, 0xF0BA, 0x9F4B, 0xEEB1, + 0x9F4E, 0xEEB2, 0x9F52, 0xF6CD, 0x9F5F, 0xEED2, 0x9F61, 0xD6C6, 0x9F67, 0xE0E5, 0x9F6A, 0xF3BB, 0x9F6C, 0xE5E1, 0x9F77, 0xE4CB, + 0x9F8D, 0xD7A3, 0x9F90, 0xDBC2, 0x9F95, 0xCAFE, 0x9F9C, 0xCFCF, 0xAC00, 0xB0A1, 0xAC01, 0xB0A2, 0xAC02, 0x8141, 0xAC03, 0x8142, + 0xAC04, 0xB0A3, 0xAC05, 0x8143, 0xAC06, 0x8144, 0xAC07, 0xB0A4, 0xAC08, 0xB0A5, 0xAC09, 0xB0A6, 0xAC0A, 0xB0A7, 0xAC0B, 0x8145, + 0xAC0C, 0x8146, 0xAC0D, 0x8147, 0xAC0E, 0x8148, 0xAC0F, 0x8149, 0xAC10, 0xB0A8, 0xAC11, 0xB0A9, 0xAC12, 0xB0AA, 0xAC13, 0xB0AB, + 0xAC14, 0xB0AC, 0xAC15, 0xB0AD, 0xAC16, 0xB0AE, 0xAC17, 0xB0AF, 0xAC18, 0x814A, 0xAC19, 0xB0B0, 0xAC1A, 0xB0B1, 0xAC1B, 0xB0B2, + 0xAC1C, 0xB0B3, 0xAC1D, 0xB0B4, 0xAC1E, 0x814B, 0xAC1F, 0x814C, 0xAC20, 0xB0B5, 0xAC21, 0x814D, 0xAC22, 0x814E, 0xAC23, 0x814F, + 0xAC24, 0xB0B6, 0xAC25, 0x8150, 0xAC26, 0x8151, 0xAC27, 0x8152, 0xAC28, 0x8153, 0xAC29, 0x8154, 0xAC2A, 0x8155, 0xAC2B, 0x8156, + 0xAC2C, 0xB0B7, 0xAC2D, 0xB0B8, 0xAC2E, 0x8157, 0xAC2F, 0xB0B9, 0xAC30, 0xB0BA, 0xAC31, 0xB0BB, 0xAC32, 0x8158, 0xAC33, 0x8159, + 0xAC34, 0x815A, 0xAC35, 0x8161, 0xAC36, 0x8162, 0xAC37, 0x8163, 0xAC38, 0xB0BC, 0xAC39, 0xB0BD, 0xAC3A, 0x8164, 0xAC3B, 0x8165, + 0xAC3C, 0xB0BE, 0xAC3D, 0x8166, 0xAC3E, 0x8167, 0xAC3F, 0x8168, 0xAC40, 0xB0BF, 0xAC41, 0x8169, 0xAC42, 0x816A, 0xAC43, 0x816B, + 0xAC44, 0x816C, 0xAC45, 0x816D, 0xAC46, 0x816E, 0xAC47, 0x816F, 0xAC48, 0x8170, 0xAC49, 0x8171, 0xAC4A, 0x8172, 0xAC4B, 0xB0C0, + 0xAC4C, 0x8173, 0xAC4D, 0xB0C1, 0xAC4E, 0x8174, 0xAC4F, 0x8175, 0xAC50, 0x8176, 0xAC51, 0x8177, 0xAC52, 0x8178, 0xAC53, 0x8179, + 0xAC54, 0xB0C2, 0xAC55, 0x817A, 0xAC56, 0x8181, 0xAC57, 0x8182, 0xAC58, 0xB0C3, 0xAC59, 0x8183, 0xAC5A, 0x8184, 0xAC5B, 0x8185, + 0xAC5C, 0xB0C4, 0xAC5D, 0x8186, 0xAC5E, 0x8187, 0xAC5F, 0x8188, 0xAC60, 0x8189, 0xAC61, 0x818A, 0xAC62, 0x818B, 0xAC63, 0x818C, + 0xAC64, 0x818D, 0xAC65, 0x818E, 0xAC66, 0x818F, 0xAC67, 0x8190, 0xAC68, 0x8191, 0xAC69, 0x8192, 0xAC6A, 0x8193, 0xAC6B, 0x8194, + 0xAC6C, 0x8195, 0xAC6D, 0x8196, 0xAC6E, 0x8197, 0xAC6F, 0x8198, 0xAC70, 0xB0C5, 0xAC71, 0xB0C6, 0xAC72, 0x8199, 0xAC73, 0x819A, + 0xAC74, 0xB0C7, 0xAC75, 0x819B, 0xAC76, 0x819C, 0xAC77, 0xB0C8, 0xAC78, 0xB0C9, 0xAC79, 0x819D, 0xAC7A, 0xB0CA, 0xAC7B, 0x819E, + 0xAC7C, 0x819F, 0xAC7D, 0x81A0, 0xAC7E, 0x81A1, 0xAC7F, 0x81A2, 0xAC80, 0xB0CB, 0xAC81, 0xB0CC, 0xAC82, 0x81A3, 0xAC83, 0xB0CD, + 0xAC84, 0xB0CE, 0xAC85, 0xB0CF, 0xAC86, 0xB0D0, 0xAC87, 0x81A4, 0xAC88, 0x81A5, 0xAC89, 0xB0D1, 0xAC8A, 0xB0D2, 0xAC8B, 0xB0D3, + 0xAC8C, 0xB0D4, 0xAC8D, 0x81A6, 0xAC8E, 0x81A7, 0xAC8F, 0x81A8, 0xAC90, 0xB0D5, 0xAC91, 0x81A9, 0xAC92, 0x81AA, 0xAC93, 0x81AB, + 0xAC94, 0xB0D6, 0xAC95, 0x81AC, 0xAC96, 0x81AD, 0xAC97, 0x81AE, 0xAC98, 0x81AF, 0xAC99, 0x81B0, 0xAC9A, 0x81B1, 0xAC9B, 0x81B2, + 0xAC9C, 0xB0D7, 0xAC9D, 0xB0D8, 0xAC9E, 0x81B3, 0xAC9F, 0xB0D9, 0xACA0, 0xB0DA, 0xACA1, 0xB0DB, 0xACA2, 0x81B4, 0xACA3, 0x81B5, + 0xACA4, 0x81B6, 0xACA5, 0x81B7, 0xACA6, 0x81B8, 0xACA7, 0x81B9, 0xACA8, 0xB0DC, 0xACA9, 0xB0DD, 0xACAA, 0xB0DE, 0xACAB, 0x81BA, + 0xACAC, 0xB0DF, 0xACAD, 0x81BB, 0xACAE, 0x81BC, 0xACAF, 0xB0E0, 0xACB0, 0xB0E1, 0xACB1, 0x81BD, 0xACB2, 0x81BE, 0xACB3, 0x81BF, + 0xACB4, 0x81C0, 0xACB5, 0x81C1, 0xACB6, 0x81C2, 0xACB7, 0x81C3, 0xACB8, 0xB0E2, 0xACB9, 0xB0E3, 0xACBA, 0x81C4, 0xACBB, 0xB0E4, + 0xACBC, 0xB0E5, 0xACBD, 0xB0E6, 0xACBE, 0x81C5, 0xACBF, 0x81C6, 0xACC0, 0x81C7, 0xACC1, 0xB0E7, 0xACC2, 0x81C8, 0xACC3, 0x81C9, + 0xACC4, 0xB0E8, 0xACC5, 0x81CA, 0xACC6, 0x81CB, 0xACC7, 0x81CC, 0xACC8, 0xB0E9, 0xACC9, 0x81CD, 0xACCA, 0x81CE, 0xACCB, 0x81CF, + 0xACCC, 0xB0EA, 0xACCD, 0x81D0, 0xACCE, 0x81D1, 0xACCF, 0x81D2, 0xACD0, 0x81D3, 0xACD1, 0x81D4, 0xACD2, 0x81D5, 0xACD3, 0x81D6, + 0xACD4, 0x81D7, 0xACD5, 0xB0EB, 0xACD6, 0x81D8, 0xACD7, 0xB0EC, 0xACD8, 0x81D9, 0xACD9, 0x81DA, 0xACDA, 0x81DB, 0xACDB, 0x81DC, + 0xACDC, 0x81DD, 0xACDD, 0x81DE, 0xACDE, 0x81DF, 0xACDF, 0x81E0, 0xACE0, 0xB0ED, 0xACE1, 0xB0EE, 0xACE2, 0x81E1, 0xACE3, 0x81E2, + 0xACE4, 0xB0EF, 0xACE5, 0x81E3, 0xACE6, 0x81E4, 0xACE7, 0xB0F0, 0xACE8, 0xB0F1, 0xACE9, 0x81E5, 0xACEA, 0xB0F2, 0xACEB, 0x81E6, + 0xACEC, 0xB0F3, 0xACED, 0x81E7, 0xACEE, 0x81E8, 0xACEF, 0xB0F4, 0xACF0, 0xB0F5, 0xACF1, 0xB0F6, 0xACF2, 0x81E9, 0xACF3, 0xB0F7, + 0xACF4, 0x81EA, 0xACF5, 0xB0F8, 0xACF6, 0xB0F9, 0xACF7, 0x81EB, 0xACF8, 0x81EC, 0xACF9, 0x81ED, 0xACFA, 0x81EE, 0xACFB, 0x81EF, + 0xACFC, 0xB0FA, 0xACFD, 0xB0FB, 0xACFE, 0x81F0, 0xACFF, 0x81F1, 0xAD00, 0xB0FC, 0xAD01, 0x81F2, 0xAD02, 0x81F3, 0xAD03, 0x81F4, + 0xAD04, 0xB0FD, 0xAD05, 0x81F5, 0xAD06, 0xB0FE, 0xAD07, 0x81F6, 0xAD08, 0x81F7, 0xAD09, 0x81F8, 0xAD0A, 0x81F9, 0xAD0B, 0x81FA, + 0xAD0C, 0xB1A1, 0xAD0D, 0xB1A2, 0xAD0E, 0x81FB, 0xAD0F, 0xB1A3, 0xAD10, 0x81FC, 0xAD11, 0xB1A4, 0xAD12, 0x81FD, 0xAD13, 0x81FE, + 0xAD14, 0x8241, 0xAD15, 0x8242, 0xAD16, 0x8243, 0xAD17, 0x8244, 0xAD18, 0xB1A5, 0xAD19, 0x8245, 0xAD1A, 0x8246, 0xAD1B, 0x8247, + 0xAD1C, 0xB1A6, 0xAD1D, 0x8248, 0xAD1E, 0x8249, 0xAD1F, 0x824A, 0xAD20, 0xB1A7, 0xAD21, 0x824B, 0xAD22, 0x824C, 0xAD23, 0x824D, + 0xAD24, 0x824E, 0xAD25, 0x824F, 0xAD26, 0x8250, 0xAD27, 0x8251, 0xAD28, 0x8252, 0xAD29, 0xB1A8, 0xAD2A, 0x8253, 0xAD2B, 0x8254, + 0xAD2C, 0xB1A9, 0xAD2D, 0xB1AA, 0xAD2E, 0x8255, 0xAD2F, 0x8256, 0xAD30, 0x8257, 0xAD31, 0x8258, 0xAD32, 0x8259, 0xAD33, 0x825A, + 0xAD34, 0xB1AB, 0xAD35, 0xB1AC, 0xAD36, 0x8261, 0xAD37, 0x8262, 0xAD38, 0xB1AD, 0xAD39, 0x8263, 0xAD3A, 0x8264, 0xAD3B, 0x8265, + 0xAD3C, 0xB1AE, 0xAD3D, 0x8266, 0xAD3E, 0x8267, 0xAD3F, 0x8268, 0xAD40, 0x8269, 0xAD41, 0x826A, 0xAD42, 0x826B, 0xAD43, 0x826C, + 0xAD44, 0xB1AF, 0xAD45, 0xB1B0, 0xAD46, 0x826D, 0xAD47, 0xB1B1, 0xAD48, 0x826E, 0xAD49, 0xB1B2, 0xAD4A, 0x826F, 0xAD4B, 0x8270, + 0xAD4C, 0x8271, 0xAD4D, 0x8272, 0xAD4E, 0x8273, 0xAD4F, 0x8274, 0xAD50, 0xB1B3, 0xAD51, 0x8275, 0xAD52, 0x8276, 0xAD53, 0x8277, + 0xAD54, 0xB1B4, 0xAD55, 0x8278, 0xAD56, 0x8279, 0xAD57, 0x827A, 0xAD58, 0xB1B5, 0xAD59, 0x8281, 0xAD5A, 0x8282, 0xAD5B, 0x8283, + 0xAD5C, 0x8284, 0xAD5D, 0x8285, 0xAD5E, 0x8286, 0xAD5F, 0x8287, 0xAD60, 0x8288, 0xAD61, 0xB1B6, 0xAD62, 0x8289, 0xAD63, 0xB1B7, + 0xAD64, 0x828A, 0xAD65, 0x828B, 0xAD66, 0x828C, 0xAD67, 0x828D, 0xAD68, 0x828E, 0xAD69, 0x828F, 0xAD6A, 0x8290, 0xAD6B, 0x8291, + 0xAD6C, 0xB1B8, 0xAD6D, 0xB1B9, 0xAD6E, 0x8292, 0xAD6F, 0x8293, 0xAD70, 0xB1BA, 0xAD71, 0x8294, 0xAD72, 0x8295, 0xAD73, 0xB1BB, + 0xAD74, 0xB1BC, 0xAD75, 0xB1BD, 0xAD76, 0xB1BE, 0xAD77, 0x8296, 0xAD78, 0x8297, 0xAD79, 0x8298, 0xAD7A, 0x8299, 0xAD7B, 0xB1BF, + 0xAD7C, 0xB1C0, 0xAD7D, 0xB1C1, 0xAD7E, 0x829A, 0xAD7F, 0xB1C2, 0xAD80, 0x829B, 0xAD81, 0xB1C3, 0xAD82, 0xB1C4, 0xAD83, 0x829C, + 0xAD84, 0x829D, 0xAD85, 0x829E, 0xAD86, 0x829F, 0xAD87, 0x82A0, 0xAD88, 0xB1C5, 0xAD89, 0xB1C6, 0xAD8A, 0x82A1, 0xAD8B, 0x82A2, + 0xAD8C, 0xB1C7, 0xAD8D, 0x82A3, 0xAD8E, 0x82A4, 0xAD8F, 0x82A5, 0xAD90, 0xB1C8, 0xAD91, 0x82A6, 0xAD92, 0x82A7, 0xAD93, 0x82A8, + 0xAD94, 0x82A9, 0xAD95, 0x82AA, 0xAD96, 0x82AB, 0xAD97, 0x82AC, 0xAD98, 0x82AD, 0xAD99, 0x82AE, 0xAD9A, 0x82AF, 0xAD9B, 0x82B0, + 0xAD9C, 0xB1C9, 0xAD9D, 0xB1CA, 0xAD9E, 0x82B1, 0xAD9F, 0x82B2, 0xADA0, 0x82B3, 0xADA1, 0x82B4, 0xADA2, 0x82B5, 0xADA3, 0x82B6, + 0xADA4, 0xB1CB, 0xADA5, 0x82B7, 0xADA6, 0x82B8, 0xADA7, 0x82B9, 0xADA8, 0x82BA, 0xADA9, 0x82BB, 0xADAA, 0x82BC, 0xADAB, 0x82BD, + 0xADAC, 0x82BE, 0xADAD, 0x82BF, 0xADAE, 0x82C0, 0xADAF, 0x82C1, 0xADB0, 0x82C2, 0xADB1, 0x82C3, 0xADB2, 0x82C4, 0xADB3, 0x82C5, + 0xADB4, 0x82C6, 0xADB5, 0x82C7, 0xADB6, 0x82C8, 0xADB7, 0xB1CC, 0xADB8, 0x82C9, 0xADB9, 0x82CA, 0xADBA, 0x82CB, 0xADBB, 0x82CC, + 0xADBC, 0x82CD, 0xADBD, 0x82CE, 0xADBE, 0x82CF, 0xADBF, 0x82D0, 0xADC0, 0xB1CD, 0xADC1, 0xB1CE, 0xADC2, 0x82D1, 0xADC3, 0x82D2, + 0xADC4, 0xB1CF, 0xADC5, 0x82D3, 0xADC6, 0x82D4, 0xADC7, 0x82D5, 0xADC8, 0xB1D0, 0xADC9, 0x82D6, 0xADCA, 0x82D7, 0xADCB, 0x82D8, + 0xADCC, 0x82D9, 0xADCD, 0x82DA, 0xADCE, 0x82DB, 0xADCF, 0x82DC, 0xADD0, 0xB1D1, 0xADD1, 0xB1D2, 0xADD2, 0x82DD, 0xADD3, 0xB1D3, + 0xADD4, 0x82DE, 0xADD5, 0x82DF, 0xADD6, 0x82E0, 0xADD7, 0x82E1, 0xADD8, 0x82E2, 0xADD9, 0x82E3, 0xADDA, 0x82E4, 0xADDB, 0x82E5, + 0xADDC, 0xB1D4, 0xADDD, 0x82E6, 0xADDE, 0x82E7, 0xADDF, 0x82E8, 0xADE0, 0xB1D5, 0xADE1, 0x82E9, 0xADE2, 0x82EA, 0xADE3, 0x82EB, + 0xADE4, 0xB1D6, 0xADE5, 0x82EC, 0xADE6, 0x82ED, 0xADE7, 0x82EE, 0xADE8, 0x82EF, 0xADE9, 0x82F0, 0xADEA, 0x82F1, 0xADEB, 0x82F2, + 0xADEC, 0x82F3, 0xADED, 0x82F4, 0xADEE, 0x82F5, 0xADEF, 0x82F6, 0xADF0, 0x82F7, 0xADF1, 0x82F8, 0xADF2, 0x82F9, 0xADF3, 0x82FA, + 0xADF4, 0x82FB, 0xADF5, 0x82FC, 0xADF6, 0x82FD, 0xADF7, 0x82FE, 0xADF8, 0xB1D7, 0xADF9, 0xB1D8, 0xADFA, 0x8341, 0xADFB, 0x8342, + 0xADFC, 0xB1D9, 0xADFD, 0x8343, 0xADFE, 0x8344, 0xADFF, 0xB1DA, 0xAE00, 0xB1DB, 0xAE01, 0xB1DC, 0xAE02, 0x8345, 0xAE03, 0x8346, + 0xAE04, 0x8347, 0xAE05, 0x8348, 0xAE06, 0x8349, 0xAE07, 0x834A, 0xAE08, 0xB1DD, 0xAE09, 0xB1DE, 0xAE0A, 0x834B, 0xAE0B, 0xB1DF, + 0xAE0C, 0x834C, 0xAE0D, 0xB1E0, 0xAE0E, 0x834D, 0xAE0F, 0x834E, 0xAE10, 0x834F, 0xAE11, 0x8350, 0xAE12, 0x8351, 0xAE13, 0x8352, + 0xAE14, 0xB1E1, 0xAE15, 0x8353, 0xAE16, 0x8354, 0xAE17, 0x8355, 0xAE18, 0x8356, 0xAE19, 0x8357, 0xAE1A, 0x8358, 0xAE1B, 0x8359, + 0xAE1C, 0x835A, 0xAE1D, 0x8361, 0xAE1E, 0x8362, 0xAE1F, 0x8363, 0xAE20, 0x8364, 0xAE21, 0x8365, 0xAE22, 0x8366, 0xAE23, 0x8367, + 0xAE24, 0x8368, 0xAE25, 0x8369, 0xAE26, 0x836A, 0xAE27, 0x836B, 0xAE28, 0x836C, 0xAE29, 0x836D, 0xAE2A, 0x836E, 0xAE2B, 0x836F, + 0xAE2C, 0x8370, 0xAE2D, 0x8371, 0xAE2E, 0x8372, 0xAE2F, 0x8373, 0xAE30, 0xB1E2, 0xAE31, 0xB1E3, 0xAE32, 0x8374, 0xAE33, 0x8375, + 0xAE34, 0xB1E4, 0xAE35, 0x8376, 0xAE36, 0x8377, 0xAE37, 0xB1E5, 0xAE38, 0xB1E6, 0xAE39, 0x8378, 0xAE3A, 0xB1E7, 0xAE3B, 0x8379, + 0xAE3C, 0x837A, 0xAE3D, 0x8381, 0xAE3E, 0x8382, 0xAE3F, 0x8383, 0xAE40, 0xB1E8, 0xAE41, 0xB1E9, 0xAE42, 0x8384, 0xAE43, 0xB1EA, + 0xAE44, 0x8385, 0xAE45, 0xB1EB, 0xAE46, 0xB1EC, 0xAE47, 0x8386, 0xAE48, 0x8387, 0xAE49, 0x8388, 0xAE4A, 0xB1ED, 0xAE4B, 0x8389, + 0xAE4C, 0xB1EE, 0xAE4D, 0xB1EF, 0xAE4E, 0xB1F0, 0xAE4F, 0x838A, 0xAE50, 0xB1F1, 0xAE51, 0x838B, 0xAE52, 0x838C, 0xAE53, 0x838D, + 0xAE54, 0xB1F2, 0xAE55, 0x838E, 0xAE56, 0xB1F3, 0xAE57, 0x838F, 0xAE58, 0x8390, 0xAE59, 0x8391, 0xAE5A, 0x8392, 0xAE5B, 0x8393, + 0xAE5C, 0xB1F4, 0xAE5D, 0xB1F5, 0xAE5E, 0x8394, 0xAE5F, 0xB1F6, 0xAE60, 0xB1F7, 0xAE61, 0xB1F8, 0xAE62, 0x8395, 0xAE63, 0x8396, + 0xAE64, 0x8397, 0xAE65, 0xB1F9, 0xAE66, 0x8398, 0xAE67, 0x8399, 0xAE68, 0xB1FA, 0xAE69, 0xB1FB, 0xAE6A, 0x839A, 0xAE6B, 0x839B, + 0xAE6C, 0xB1FC, 0xAE6D, 0x839C, 0xAE6E, 0x839D, 0xAE6F, 0x839E, 0xAE70, 0xB1FD, 0xAE71, 0x839F, 0xAE72, 0x83A0, 0xAE73, 0x83A1, + 0xAE74, 0x83A2, 0xAE75, 0x83A3, 0xAE76, 0x83A4, 0xAE77, 0x83A5, 0xAE78, 0xB1FE, 0xAE79, 0xB2A1, 0xAE7A, 0x83A6, 0xAE7B, 0xB2A2, + 0xAE7C, 0xB2A3, 0xAE7D, 0xB2A4, 0xAE7E, 0x83A7, 0xAE7F, 0x83A8, 0xAE80, 0x83A9, 0xAE81, 0x83AA, 0xAE82, 0x83AB, 0xAE83, 0x83AC, + 0xAE84, 0xB2A5, 0xAE85, 0xB2A6, 0xAE86, 0x83AD, 0xAE87, 0x83AE, 0xAE88, 0x83AF, 0xAE89, 0x83B0, 0xAE8A, 0x83B1, 0xAE8B, 0x83B2, + 0xAE8C, 0xB2A7, 0xAE8D, 0x83B3, 0xAE8E, 0x83B4, 0xAE8F, 0x83B5, 0xAE90, 0x83B6, 0xAE91, 0x83B7, 0xAE92, 0x83B8, 0xAE93, 0x83B9, + 0xAE94, 0x83BA, 0xAE95, 0x83BB, 0xAE96, 0x83BC, 0xAE97, 0x83BD, 0xAE98, 0x83BE, 0xAE99, 0x83BF, 0xAE9A, 0x83C0, 0xAE9B, 0x83C1, + 0xAE9C, 0x83C2, 0xAE9D, 0x83C3, 0xAE9E, 0x83C4, 0xAE9F, 0x83C5, 0xAEA0, 0x83C6, 0xAEA1, 0x83C7, 0xAEA2, 0x83C8, 0xAEA3, 0x83C9, + 0xAEA4, 0x83CA, 0xAEA5, 0x83CB, 0xAEA6, 0x83CC, 0xAEA7, 0x83CD, 0xAEA8, 0x83CE, 0xAEA9, 0x83CF, 0xAEAA, 0x83D0, 0xAEAB, 0x83D1, + 0xAEAC, 0x83D2, 0xAEAD, 0x83D3, 0xAEAE, 0x83D4, 0xAEAF, 0x83D5, 0xAEB0, 0x83D6, 0xAEB1, 0x83D7, 0xAEB2, 0x83D8, 0xAEB3, 0x83D9, + 0xAEB4, 0x83DA, 0xAEB5, 0x83DB, 0xAEB6, 0x83DC, 0xAEB7, 0x83DD, 0xAEB8, 0x83DE, 0xAEB9, 0x83DF, 0xAEBA, 0x83E0, 0xAEBB, 0x83E1, + 0xAEBC, 0xB2A8, 0xAEBD, 0xB2A9, 0xAEBE, 0xB2AA, 0xAEBF, 0x83E2, 0xAEC0, 0xB2AB, 0xAEC1, 0x83E3, 0xAEC2, 0x83E4, 0xAEC3, 0x83E5, + 0xAEC4, 0xB2AC, 0xAEC5, 0x83E6, 0xAEC6, 0x83E7, 0xAEC7, 0x83E8, 0xAEC8, 0x83E9, 0xAEC9, 0x83EA, 0xAECA, 0x83EB, 0xAECB, 0x83EC, + 0xAECC, 0xB2AD, 0xAECD, 0xB2AE, 0xAECE, 0x83ED, 0xAECF, 0xB2AF, 0xAED0, 0xB2B0, 0xAED1, 0xB2B1, 0xAED2, 0x83EE, 0xAED3, 0x83EF, + 0xAED4, 0x83F0, 0xAED5, 0x83F1, 0xAED6, 0x83F2, 0xAED7, 0x83F3, 0xAED8, 0xB2B2, 0xAED9, 0xB2B3, 0xAEDA, 0x83F4, 0xAEDB, 0x83F5, + 0xAEDC, 0xB2B4, 0xAEDD, 0x83F6, 0xAEDE, 0x83F7, 0xAEDF, 0x83F8, 0xAEE0, 0x83F9, 0xAEE1, 0x83FA, 0xAEE2, 0x83FB, 0xAEE3, 0x83FC, + 0xAEE4, 0x83FD, 0xAEE5, 0x83FE, 0xAEE6, 0x8441, 0xAEE7, 0x8442, 0xAEE8, 0xB2B5, 0xAEE9, 0x8443, 0xAEEA, 0x8444, 0xAEEB, 0xB2B6, + 0xAEEC, 0x8445, 0xAEED, 0xB2B7, 0xAEEE, 0x8446, 0xAEEF, 0x8447, 0xAEF0, 0x8448, 0xAEF1, 0x8449, 0xAEF2, 0x844A, 0xAEF3, 0x844B, + 0xAEF4, 0xB2B8, 0xAEF5, 0x844C, 0xAEF6, 0x844D, 0xAEF7, 0x844E, 0xAEF8, 0xB2B9, 0xAEF9, 0x844F, 0xAEFA, 0x8450, 0xAEFB, 0x8451, + 0xAEFC, 0xB2BA, 0xAEFD, 0x8452, 0xAEFE, 0x8453, 0xAEFF, 0x8454, 0xAF00, 0x8455, 0xAF01, 0x8456, 0xAF02, 0x8457, 0xAF03, 0x8458, + 0xAF04, 0x8459, 0xAF05, 0x845A, 0xAF06, 0x8461, 0xAF07, 0xB2BB, 0xAF08, 0xB2BC, 0xAF09, 0x8462, 0xAF0A, 0x8463, 0xAF0B, 0x8464, + 0xAF0C, 0x8465, 0xAF0D, 0xB2BD, 0xAF0E, 0x8466, 0xAF0F, 0x8467, 0xAF10, 0xB2BE, 0xAF11, 0x8468, 0xAF12, 0x8469, 0xAF13, 0x846A, + 0xAF14, 0x846B, 0xAF15, 0x846C, 0xAF16, 0x846D, 0xAF17, 0x846E, 0xAF18, 0x846F, 0xAF19, 0x8470, 0xAF1A, 0x8471, 0xAF1B, 0x8472, + 0xAF1C, 0x8473, 0xAF1D, 0x8474, 0xAF1E, 0x8475, 0xAF1F, 0x8476, 0xAF20, 0x8477, 0xAF21, 0x8478, 0xAF22, 0x8479, 0xAF23, 0x847A, + 0xAF24, 0x8481, 0xAF25, 0x8482, 0xAF26, 0x8483, 0xAF27, 0x8484, 0xAF28, 0x8485, 0xAF29, 0x8486, 0xAF2A, 0x8487, 0xAF2B, 0x8488, + 0xAF2C, 0xB2BF, 0xAF2D, 0xB2C0, 0xAF2E, 0x8489, 0xAF2F, 0x848A, 0xAF30, 0xB2C1, 0xAF31, 0x848B, 0xAF32, 0xB2C2, 0xAF33, 0x848C, + 0xAF34, 0xB2C3, 0xAF35, 0x848D, 0xAF36, 0x848E, 0xAF37, 0x848F, 0xAF38, 0x8490, 0xAF39, 0x8491, 0xAF3A, 0x8492, 0xAF3B, 0x8493, + 0xAF3C, 0xB2C4, 0xAF3D, 0xB2C5, 0xAF3E, 0x8494, 0xAF3F, 0xB2C6, 0xAF40, 0x8495, 0xAF41, 0xB2C7, 0xAF42, 0xB2C8, 0xAF43, 0xB2C9, + 0xAF44, 0x8496, 0xAF45, 0x8497, 0xAF46, 0x8498, 0xAF47, 0x8499, 0xAF48, 0xB2CA, 0xAF49, 0xB2CB, 0xAF4A, 0x849A, 0xAF4B, 0x849B, + 0xAF4C, 0x849C, 0xAF4D, 0x849D, 0xAF4E, 0x849E, 0xAF4F, 0x849F, 0xAF50, 0xB2CC, 0xAF51, 0x84A0, 0xAF52, 0x84A1, 0xAF53, 0x84A2, + 0xAF54, 0x84A3, 0xAF55, 0x84A4, 0xAF56, 0x84A5, 0xAF57, 0x84A6, 0xAF58, 0x84A7, 0xAF59, 0x84A8, 0xAF5A, 0x84A9, 0xAF5B, 0x84AA, + 0xAF5C, 0xB2CD, 0xAF5D, 0xB2CE, 0xAF5E, 0x84AB, 0xAF5F, 0x84AC, 0xAF60, 0x84AD, 0xAF61, 0x84AE, 0xAF62, 0x84AF, 0xAF63, 0x84B0, + 0xAF64, 0xB2CF, 0xAF65, 0xB2D0, 0xAF66, 0x84B1, 0xAF67, 0x84B2, 0xAF68, 0x84B3, 0xAF69, 0x84B4, 0xAF6A, 0x84B5, 0xAF6B, 0x84B6, + 0xAF6C, 0x84B7, 0xAF6D, 0x84B8, 0xAF6E, 0x84B9, 0xAF6F, 0x84BA, 0xAF70, 0x84BB, 0xAF71, 0x84BC, 0xAF72, 0x84BD, 0xAF73, 0x84BE, + 0xAF74, 0x84BF, 0xAF75, 0x84C0, 0xAF76, 0x84C1, 0xAF77, 0x84C2, 0xAF78, 0x84C3, 0xAF79, 0xB2D1, 0xAF7A, 0x84C4, 0xAF7B, 0x84C5, + 0xAF7C, 0x84C6, 0xAF7D, 0x84C7, 0xAF7E, 0x84C8, 0xAF7F, 0x84C9, 0xAF80, 0xB2D2, 0xAF81, 0x84CA, 0xAF82, 0x84CB, 0xAF83, 0x84CC, + 0xAF84, 0xB2D3, 0xAF85, 0x84CD, 0xAF86, 0x84CE, 0xAF87, 0x84CF, 0xAF88, 0xB2D4, 0xAF89, 0x84D0, 0xAF8A, 0x84D1, 0xAF8B, 0x84D2, + 0xAF8C, 0x84D3, 0xAF8D, 0x84D4, 0xAF8E, 0x84D5, 0xAF8F, 0x84D6, 0xAF90, 0xB2D5, 0xAF91, 0xB2D6, 0xAF92, 0x84D7, 0xAF93, 0x84D8, + 0xAF94, 0x84D9, 0xAF95, 0xB2D7, 0xAF96, 0x84DA, 0xAF97, 0x84DB, 0xAF98, 0x84DC, 0xAF99, 0x84DD, 0xAF9A, 0x84DE, 0xAF9B, 0x84DF, + 0xAF9C, 0xB2D8, 0xAF9D, 0x84E0, 0xAF9E, 0x84E1, 0xAF9F, 0x84E2, 0xAFA0, 0x84E3, 0xAFA1, 0x84E4, 0xAFA2, 0x84E5, 0xAFA3, 0x84E6, + 0xAFA4, 0x84E7, 0xAFA5, 0x84E8, 0xAFA6, 0x84E9, 0xAFA7, 0x84EA, 0xAFA8, 0x84EB, 0xAFA9, 0x84EC, 0xAFAA, 0x84ED, 0xAFAB, 0x84EE, + 0xAFAC, 0x84EF, 0xAFAD, 0x84F0, 0xAFAE, 0x84F1, 0xAFAF, 0x84F2, 0xAFB0, 0x84F3, 0xAFB1, 0x84F4, 0xAFB2, 0x84F5, 0xAFB3, 0x84F6, + 0xAFB4, 0x84F7, 0xAFB5, 0x84F8, 0xAFB6, 0x84F9, 0xAFB7, 0x84FA, 0xAFB8, 0xB2D9, 0xAFB9, 0xB2DA, 0xAFBA, 0x84FB, 0xAFBB, 0x84FC, + 0xAFBC, 0xB2DB, 0xAFBD, 0x84FD, 0xAFBE, 0x84FE, 0xAFBF, 0x8541, 0xAFC0, 0xB2DC, 0xAFC1, 0x8542, 0xAFC2, 0x8543, 0xAFC3, 0x8544, + 0xAFC4, 0x8545, 0xAFC5, 0x8546, 0xAFC6, 0x8547, 0xAFC7, 0xB2DD, 0xAFC8, 0xB2DE, 0xAFC9, 0xB2DF, 0xAFCA, 0x8548, 0xAFCB, 0xB2E0, + 0xAFCC, 0x8549, 0xAFCD, 0xB2E1, 0xAFCE, 0xB2E2, 0xAFCF, 0x854A, 0xAFD0, 0x854B, 0xAFD1, 0x854C, 0xAFD2, 0x854D, 0xAFD3, 0x854E, + 0xAFD4, 0xB2E3, 0xAFD5, 0x854F, 0xAFD6, 0x8550, 0xAFD7, 0x8551, 0xAFD8, 0x8552, 0xAFD9, 0x8553, 0xAFDA, 0x8554, 0xAFDB, 0x8555, + 0xAFDC, 0xB2E4, 0xAFDD, 0x8556, 0xAFDE, 0x8557, 0xAFDF, 0x8558, 0xAFE0, 0x8559, 0xAFE1, 0x855A, 0xAFE2, 0x8561, 0xAFE3, 0x8562, + 0xAFE4, 0x8563, 0xAFE5, 0x8564, 0xAFE6, 0x8565, 0xAFE7, 0x8566, 0xAFE8, 0xB2E5, 0xAFE9, 0xB2E6, 0xAFEA, 0x8567, 0xAFEB, 0x8568, + 0xAFEC, 0x8569, 0xAFED, 0x856A, 0xAFEE, 0x856B, 0xAFEF, 0x856C, 0xAFF0, 0xB2E7, 0xAFF1, 0xB2E8, 0xAFF2, 0x856D, 0xAFF3, 0x856E, + 0xAFF4, 0xB2E9, 0xAFF5, 0x856F, 0xAFF6, 0x8570, 0xAFF7, 0x8571, 0xAFF8, 0xB2EA, 0xAFF9, 0x8572, 0xAFFA, 0x8573, 0xAFFB, 0x8574, + 0xAFFC, 0x8575, 0xAFFD, 0x8576, 0xAFFE, 0x8577, 0xAFFF, 0x8578, 0xB000, 0xB2EB, 0xB001, 0xB2EC, 0xB002, 0x8579, 0xB003, 0x857A, + 0xB004, 0xB2ED, 0xB005, 0x8581, 0xB006, 0x8582, 0xB007, 0x8583, 0xB008, 0x8584, 0xB009, 0x8585, 0xB00A, 0x8586, 0xB00B, 0x8587, + 0xB00C, 0xB2EE, 0xB00D, 0x8588, 0xB00E, 0x8589, 0xB00F, 0x858A, 0xB010, 0xB2EF, 0xB011, 0x858B, 0xB012, 0x858C, 0xB013, 0x858D, + 0xB014, 0xB2F0, 0xB015, 0x858E, 0xB016, 0x858F, 0xB017, 0x8590, 0xB018, 0x8591, 0xB019, 0x8592, 0xB01A, 0x8593, 0xB01B, 0x8594, + 0xB01C, 0xB2F1, 0xB01D, 0xB2F2, 0xB01E, 0x8595, 0xB01F, 0x8596, 0xB020, 0x8597, 0xB021, 0x8598, 0xB022, 0x8599, 0xB023, 0x859A, + 0xB024, 0x859B, 0xB025, 0x859C, 0xB026, 0x859D, 0xB027, 0x859E, 0xB028, 0xB2F3, 0xB029, 0x859F, 0xB02A, 0x85A0, 0xB02B, 0x85A1, + 0xB02C, 0x85A2, 0xB02D, 0x85A3, 0xB02E, 0x85A4, 0xB02F, 0x85A5, 0xB030, 0x85A6, 0xB031, 0x85A7, 0xB032, 0x85A8, 0xB033, 0x85A9, + 0xB034, 0x85AA, 0xB035, 0x85AB, 0xB036, 0x85AC, 0xB037, 0x85AD, 0xB038, 0x85AE, 0xB039, 0x85AF, 0xB03A, 0x85B0, 0xB03B, 0x85B1, + 0xB03C, 0x85B2, 0xB03D, 0x85B3, 0xB03E, 0x85B4, 0xB03F, 0x85B5, 0xB040, 0x85B6, 0xB041, 0x85B7, 0xB042, 0x85B8, 0xB043, 0x85B9, + 0xB044, 0xB2F4, 0xB045, 0xB2F5, 0xB046, 0x85BA, 0xB047, 0x85BB, 0xB048, 0xB2F6, 0xB049, 0x85BC, 0xB04A, 0xB2F7, 0xB04B, 0x85BD, + 0xB04C, 0xB2F8, 0xB04D, 0x85BE, 0xB04E, 0xB2F9, 0xB04F, 0x85BF, 0xB050, 0x85C0, 0xB051, 0x85C1, 0xB052, 0x85C2, 0xB053, 0xB2FA, + 0xB054, 0xB2FB, 0xB055, 0xB2FC, 0xB056, 0x85C3, 0xB057, 0xB2FD, 0xB058, 0x85C4, 0xB059, 0xB2FE, 0xB05A, 0x85C5, 0xB05B, 0x85C6, + 0xB05C, 0x85C7, 0xB05D, 0xB3A1, 0xB05E, 0x85C8, 0xB05F, 0x85C9, 0xB060, 0x85CA, 0xB061, 0x85CB, 0xB062, 0x85CC, 0xB063, 0x85CD, + 0xB064, 0x85CE, 0xB065, 0x85CF, 0xB066, 0x85D0, 0xB067, 0x85D1, 0xB068, 0x85D2, 0xB069, 0x85D3, 0xB06A, 0x85D4, 0xB06B, 0x85D5, + 0xB06C, 0x85D6, 0xB06D, 0x85D7, 0xB06E, 0x85D8, 0xB06F, 0x85D9, 0xB070, 0x85DA, 0xB071, 0x85DB, 0xB072, 0x85DC, 0xB073, 0x85DD, + 0xB074, 0x85DE, 0xB075, 0x85DF, 0xB076, 0x85E0, 0xB077, 0x85E1, 0xB078, 0x85E2, 0xB079, 0x85E3, 0xB07A, 0x85E4, 0xB07B, 0x85E5, + 0xB07C, 0xB3A2, 0xB07D, 0xB3A3, 0xB07E, 0x85E6, 0xB07F, 0x85E7, 0xB080, 0xB3A4, 0xB081, 0x85E8, 0xB082, 0x85E9, 0xB083, 0x85EA, + 0xB084, 0xB3A5, 0xB085, 0x85EB, 0xB086, 0x85EC, 0xB087, 0x85ED, 0xB088, 0x85EE, 0xB089, 0x85EF, 0xB08A, 0x85F0, 0xB08B, 0x85F1, + 0xB08C, 0xB3A6, 0xB08D, 0xB3A7, 0xB08E, 0x85F2, 0xB08F, 0xB3A8, 0xB090, 0x85F3, 0xB091, 0xB3A9, 0xB092, 0x85F4, 0xB093, 0x85F5, + 0xB094, 0x85F6, 0xB095, 0x85F7, 0xB096, 0x85F8, 0xB097, 0x85F9, 0xB098, 0xB3AA, 0xB099, 0xB3AB, 0xB09A, 0xB3AC, 0xB09B, 0x85FA, + 0xB09C, 0xB3AD, 0xB09D, 0x85FB, 0xB09E, 0x85FC, 0xB09F, 0xB3AE, 0xB0A0, 0xB3AF, 0xB0A1, 0xB3B0, 0xB0A2, 0xB3B1, 0xB0A3, 0x85FD, + 0xB0A4, 0x85FE, 0xB0A5, 0x8641, 0xB0A6, 0x8642, 0xB0A7, 0x8643, 0xB0A8, 0xB3B2, 0xB0A9, 0xB3B3, 0xB0AA, 0x8644, 0xB0AB, 0xB3B4, + 0xB0AC, 0xB3B5, 0xB0AD, 0xB3B6, 0xB0AE, 0xB3B7, 0xB0AF, 0xB3B8, 0xB0B0, 0x8645, 0xB0B1, 0xB3B9, 0xB0B2, 0x8646, 0xB0B3, 0xB3BA, + 0xB0B4, 0xB3BB, 0xB0B5, 0xB3BC, 0xB0B6, 0x8647, 0xB0B7, 0x8648, 0xB0B8, 0xB3BD, 0xB0B9, 0x8649, 0xB0BA, 0x864A, 0xB0BB, 0x864B, + 0xB0BC, 0xB3BE, 0xB0BD, 0x864C, 0xB0BE, 0x864D, 0xB0BF, 0x864E, 0xB0C0, 0x864F, 0xB0C1, 0x8650, 0xB0C2, 0x8651, 0xB0C3, 0x8652, + 0xB0C4, 0xB3BF, 0xB0C5, 0xB3C0, 0xB0C6, 0x8653, 0xB0C7, 0xB3C1, 0xB0C8, 0xB3C2, 0xB0C9, 0xB3C3, 0xB0CA, 0x8654, 0xB0CB, 0x8655, + 0xB0CC, 0x8656, 0xB0CD, 0x8657, 0xB0CE, 0x8658, 0xB0CF, 0x8659, 0xB0D0, 0xB3C4, 0xB0D1, 0xB3C5, 0xB0D2, 0x865A, 0xB0D3, 0x8661, + 0xB0D4, 0xB3C6, 0xB0D5, 0x8662, 0xB0D6, 0x8663, 0xB0D7, 0x8664, 0xB0D8, 0xB3C7, 0xB0D9, 0x8665, 0xB0DA, 0x8666, 0xB0DB, 0x8667, + 0xB0DC, 0x8668, 0xB0DD, 0x8669, 0xB0DE, 0x866A, 0xB0DF, 0x866B, 0xB0E0, 0xB3C8, 0xB0E1, 0x866C, 0xB0E2, 0x866D, 0xB0E3, 0x866E, + 0xB0E4, 0x866F, 0xB0E5, 0xB3C9, 0xB0E6, 0x8670, 0xB0E7, 0x8671, 0xB0E8, 0x8672, 0xB0E9, 0x8673, 0xB0EA, 0x8674, 0xB0EB, 0x8675, + 0xB0EC, 0x8676, 0xB0ED, 0x8677, 0xB0EE, 0x8678, 0xB0EF, 0x8679, 0xB0F0, 0x867A, 0xB0F1, 0x8681, 0xB0F2, 0x8682, 0xB0F3, 0x8683, + 0xB0F4, 0x8684, 0xB0F5, 0x8685, 0xB0F6, 0x8686, 0xB0F7, 0x8687, 0xB0F8, 0x8688, 0xB0F9, 0x8689, 0xB0FA, 0x868A, 0xB0FB, 0x868B, + 0xB0FC, 0x868C, 0xB0FD, 0x868D, 0xB0FE, 0x868E, 0xB0FF, 0x868F, 0xB100, 0x8690, 0xB101, 0x8691, 0xB102, 0x8692, 0xB103, 0x8693, + 0xB104, 0x8694, 0xB105, 0x8695, 0xB106, 0x8696, 0xB107, 0x8697, 0xB108, 0xB3CA, 0xB109, 0xB3CB, 0xB10A, 0x8698, 0xB10B, 0xB3CC, + 0xB10C, 0xB3CD, 0xB10D, 0x8699, 0xB10E, 0x869A, 0xB10F, 0x869B, 0xB110, 0xB3CE, 0xB111, 0x869C, 0xB112, 0xB3CF, 0xB113, 0xB3D0, + 0xB114, 0x869D, 0xB115, 0x869E, 0xB116, 0x869F, 0xB117, 0x86A0, 0xB118, 0xB3D1, 0xB119, 0xB3D2, 0xB11A, 0x86A1, 0xB11B, 0xB3D3, + 0xB11C, 0xB3D4, 0xB11D, 0xB3D5, 0xB11E, 0x86A2, 0xB11F, 0x86A3, 0xB120, 0x86A4, 0xB121, 0x86A5, 0xB122, 0x86A6, 0xB123, 0xB3D6, + 0xB124, 0xB3D7, 0xB125, 0xB3D8, 0xB126, 0x86A7, 0xB127, 0x86A8, 0xB128, 0xB3D9, 0xB129, 0x86A9, 0xB12A, 0x86AA, 0xB12B, 0x86AB, + 0xB12C, 0xB3DA, 0xB12D, 0x86AC, 0xB12E, 0x86AD, 0xB12F, 0x86AE, 0xB130, 0x86AF, 0xB131, 0x86B0, 0xB132, 0x86B1, 0xB133, 0x86B2, + 0xB134, 0xB3DB, 0xB135, 0xB3DC, 0xB136, 0x86B3, 0xB137, 0xB3DD, 0xB138, 0xB3DE, 0xB139, 0xB3DF, 0xB13A, 0x86B4, 0xB13B, 0x86B5, + 0xB13C, 0x86B6, 0xB13D, 0x86B7, 0xB13E, 0x86B8, 0xB13F, 0x86B9, 0xB140, 0xB3E0, 0xB141, 0xB3E1, 0xB142, 0x86BA, 0xB143, 0x86BB, + 0xB144, 0xB3E2, 0xB145, 0x86BC, 0xB146, 0x86BD, 0xB147, 0x86BE, 0xB148, 0xB3E3, 0xB149, 0x86BF, 0xB14A, 0x86C0, 0xB14B, 0x86C1, + 0xB14C, 0x86C2, 0xB14D, 0x86C3, 0xB14E, 0x86C4, 0xB14F, 0x86C5, 0xB150, 0xB3E4, 0xB151, 0xB3E5, 0xB152, 0x86C6, 0xB153, 0x86C7, + 0xB154, 0xB3E6, 0xB155, 0xB3E7, 0xB156, 0x86C8, 0xB157, 0x86C9, 0xB158, 0xB3E8, 0xB159, 0x86CA, 0xB15A, 0x86CB, 0xB15B, 0x86CC, + 0xB15C, 0xB3E9, 0xB15D, 0x86CD, 0xB15E, 0x86CE, 0xB15F, 0x86CF, 0xB160, 0xB3EA, 0xB161, 0x86D0, 0xB162, 0x86D1, 0xB163, 0x86D2, + 0xB164, 0x86D3, 0xB165, 0x86D4, 0xB166, 0x86D5, 0xB167, 0x86D6, 0xB168, 0x86D7, 0xB169, 0x86D8, 0xB16A, 0x86D9, 0xB16B, 0x86DA, + 0xB16C, 0x86DB, 0xB16D, 0x86DC, 0xB16E, 0x86DD, 0xB16F, 0x86DE, 0xB170, 0x86DF, 0xB171, 0x86E0, 0xB172, 0x86E1, 0xB173, 0x86E2, + 0xB174, 0x86E3, 0xB175, 0x86E4, 0xB176, 0x86E5, 0xB177, 0x86E6, 0xB178, 0xB3EB, 0xB179, 0xB3EC, 0xB17A, 0x86E7, 0xB17B, 0x86E8, + 0xB17C, 0xB3ED, 0xB17D, 0x86E9, 0xB17E, 0x86EA, 0xB17F, 0x86EB, 0xB180, 0xB3EE, 0xB181, 0x86EC, 0xB182, 0xB3EF, 0xB183, 0x86ED, + 0xB184, 0x86EE, 0xB185, 0x86EF, 0xB186, 0x86F0, 0xB187, 0x86F1, 0xB188, 0xB3F0, 0xB189, 0xB3F1, 0xB18A, 0x86F2, 0xB18B, 0xB3F2, + 0xB18C, 0x86F3, 0xB18D, 0xB3F3, 0xB18E, 0x86F4, 0xB18F, 0x86F5, 0xB190, 0x86F6, 0xB191, 0x86F7, 0xB192, 0xB3F4, 0xB193, 0xB3F5, + 0xB194, 0xB3F6, 0xB195, 0x86F8, 0xB196, 0x86F9, 0xB197, 0x86FA, 0xB198, 0xB3F7, 0xB199, 0x86FB, 0xB19A, 0x86FC, 0xB19B, 0x86FD, + 0xB19C, 0xB3F8, 0xB19D, 0x86FE, 0xB19E, 0x8741, 0xB19F, 0x8742, 0xB1A0, 0x8743, 0xB1A1, 0x8744, 0xB1A2, 0x8745, 0xB1A3, 0x8746, + 0xB1A4, 0x8747, 0xB1A5, 0x8748, 0xB1A6, 0x8749, 0xB1A7, 0x874A, 0xB1A8, 0xB3F9, 0xB1A9, 0x874B, 0xB1AA, 0x874C, 0xB1AB, 0x874D, + 0xB1AC, 0x874E, 0xB1AD, 0x874F, 0xB1AE, 0x8750, 0xB1AF, 0x8751, 0xB1B0, 0x8752, 0xB1B1, 0x8753, 0xB1B2, 0x8754, 0xB1B3, 0x8755, + 0xB1B4, 0x8756, 0xB1B5, 0x8757, 0xB1B6, 0x8758, 0xB1B7, 0x8759, 0xB1B8, 0x875A, 0xB1B9, 0x8761, 0xB1BA, 0x8762, 0xB1BB, 0x8763, + 0xB1BC, 0x8764, 0xB1BD, 0x8765, 0xB1BE, 0x8766, 0xB1BF, 0x8767, 0xB1C0, 0x8768, 0xB1C1, 0x8769, 0xB1C2, 0x876A, 0xB1C3, 0x876B, + 0xB1C4, 0x876C, 0xB1C5, 0x876D, 0xB1C6, 0x876E, 0xB1C7, 0x876F, 0xB1C8, 0x8770, 0xB1C9, 0x8771, 0xB1CA, 0x8772, 0xB1CB, 0x8773, + 0xB1CC, 0xB3FA, 0xB1CD, 0x8774, 0xB1CE, 0x8775, 0xB1CF, 0x8776, 0xB1D0, 0xB3FB, 0xB1D1, 0x8777, 0xB1D2, 0x8778, 0xB1D3, 0x8779, + 0xB1D4, 0xB3FC, 0xB1D5, 0x877A, 0xB1D6, 0x8781, 0xB1D7, 0x8782, 0xB1D8, 0x8783, 0xB1D9, 0x8784, 0xB1DA, 0x8785, 0xB1DB, 0x8786, + 0xB1DC, 0xB3FD, 0xB1DD, 0xB3FE, 0xB1DE, 0x8787, 0xB1DF, 0xB4A1, 0xB1E0, 0x8788, 0xB1E1, 0x8789, 0xB1E2, 0x878A, 0xB1E3, 0x878B, + 0xB1E4, 0x878C, 0xB1E5, 0x878D, 0xB1E6, 0x878E, 0xB1E7, 0x878F, 0xB1E8, 0xB4A2, 0xB1E9, 0xB4A3, 0xB1EA, 0x8790, 0xB1EB, 0x8791, + 0xB1EC, 0xB4A4, 0xB1ED, 0x8792, 0xB1EE, 0x8793, 0xB1EF, 0x8794, 0xB1F0, 0xB4A5, 0xB1F1, 0x8795, 0xB1F2, 0x8796, 0xB1F3, 0x8797, + 0xB1F4, 0x8798, 0xB1F5, 0x8799, 0xB1F6, 0x879A, 0xB1F7, 0x879B, 0xB1F8, 0x879C, 0xB1F9, 0xB4A6, 0xB1FA, 0x879D, 0xB1FB, 0xB4A7, + 0xB1FC, 0x879E, 0xB1FD, 0xB4A8, 0xB1FE, 0x879F, 0xB1FF, 0x87A0, 0xB200, 0x87A1, 0xB201, 0x87A2, 0xB202, 0x87A3, 0xB203, 0x87A4, + 0xB204, 0xB4A9, 0xB205, 0xB4AA, 0xB206, 0x87A5, 0xB207, 0x87A6, 0xB208, 0xB4AB, 0xB209, 0x87A7, 0xB20A, 0x87A8, 0xB20B, 0xB4AC, + 0xB20C, 0xB4AD, 0xB20D, 0x87A9, 0xB20E, 0x87AA, 0xB20F, 0x87AB, 0xB210, 0x87AC, 0xB211, 0x87AD, 0xB212, 0x87AE, 0xB213, 0x87AF, + 0xB214, 0xB4AE, 0xB215, 0xB4AF, 0xB216, 0x87B0, 0xB217, 0xB4B0, 0xB218, 0x87B1, 0xB219, 0xB4B1, 0xB21A, 0x87B2, 0xB21B, 0x87B3, + 0xB21C, 0x87B4, 0xB21D, 0x87B5, 0xB21E, 0x87B6, 0xB21F, 0x87B7, 0xB220, 0xB4B2, 0xB221, 0x87B8, 0xB222, 0x87B9, 0xB223, 0x87BA, + 0xB224, 0x87BB, 0xB225, 0x87BC, 0xB226, 0x87BD, 0xB227, 0x87BE, 0xB228, 0x87BF, 0xB229, 0x87C0, 0xB22A, 0x87C1, 0xB22B, 0x87C2, + 0xB22C, 0x87C3, 0xB22D, 0x87C4, 0xB22E, 0x87C5, 0xB22F, 0x87C6, 0xB230, 0x87C7, 0xB231, 0x87C8, 0xB232, 0x87C9, 0xB233, 0x87CA, + 0xB234, 0xB4B3, 0xB235, 0x87CB, 0xB236, 0x87CC, 0xB237, 0x87CD, 0xB238, 0x87CE, 0xB239, 0x87CF, 0xB23A, 0x87D0, 0xB23B, 0x87D1, + 0xB23C, 0xB4B4, 0xB23D, 0x87D2, 0xB23E, 0x87D3, 0xB23F, 0x87D4, 0xB240, 0x87D5, 0xB241, 0x87D6, 0xB242, 0x87D7, 0xB243, 0x87D8, + 0xB244, 0x87D9, 0xB245, 0x87DA, 0xB246, 0x87DB, 0xB247, 0x87DC, 0xB248, 0x87DD, 0xB249, 0x87DE, 0xB24A, 0x87DF, 0xB24B, 0x87E0, + 0xB24C, 0x87E1, 0xB24D, 0x87E2, 0xB24E, 0x87E3, 0xB24F, 0x87E4, 0xB250, 0x87E5, 0xB251, 0x87E6, 0xB252, 0x87E7, 0xB253, 0x87E8, + 0xB254, 0x87E9, 0xB255, 0x87EA, 0xB256, 0x87EB, 0xB257, 0x87EC, 0xB258, 0xB4B5, 0xB259, 0x87ED, 0xB25A, 0x87EE, 0xB25B, 0x87EF, + 0xB25C, 0xB4B6, 0xB25D, 0x87F0, 0xB25E, 0x87F1, 0xB25F, 0x87F2, 0xB260, 0xB4B7, 0xB261, 0x87F3, 0xB262, 0x87F4, 0xB263, 0x87F5, + 0xB264, 0x87F6, 0xB265, 0x87F7, 0xB266, 0x87F8, 0xB267, 0x87F9, 0xB268, 0xB4B8, 0xB269, 0xB4B9, 0xB26A, 0x87FA, 0xB26B, 0x87FB, + 0xB26C, 0x87FC, 0xB26D, 0x87FD, 0xB26E, 0x87FE, 0xB26F, 0x8841, 0xB270, 0x8842, 0xB271, 0x8843, 0xB272, 0x8844, 0xB273, 0x8845, + 0xB274, 0xB4BA, 0xB275, 0xB4BB, 0xB276, 0x8846, 0xB277, 0x8847, 0xB278, 0x8848, 0xB279, 0x8849, 0xB27A, 0x884A, 0xB27B, 0x884B, + 0xB27C, 0xB4BC, 0xB27D, 0x884C, 0xB27E, 0x884D, 0xB27F, 0x884E, 0xB280, 0x884F, 0xB281, 0x8850, 0xB282, 0x8851, 0xB283, 0x8852, + 0xB284, 0xB4BD, 0xB285, 0xB4BE, 0xB286, 0x8853, 0xB287, 0x8854, 0xB288, 0x8855, 0xB289, 0xB4BF, 0xB28A, 0x8856, 0xB28B, 0x8857, + 0xB28C, 0x8858, 0xB28D, 0x8859, 0xB28E, 0x885A, 0xB28F, 0x8861, 0xB290, 0xB4C0, 0xB291, 0xB4C1, 0xB292, 0x8862, 0xB293, 0x8863, + 0xB294, 0xB4C2, 0xB295, 0x8864, 0xB296, 0x8865, 0xB297, 0x8866, 0xB298, 0xB4C3, 0xB299, 0xB4C4, 0xB29A, 0xB4C5, 0xB29B, 0x8867, + 0xB29C, 0x8868, 0xB29D, 0x8869, 0xB29E, 0x886A, 0xB29F, 0x886B, 0xB2A0, 0xB4C6, 0xB2A1, 0xB4C7, 0xB2A2, 0x886C, 0xB2A3, 0xB4C8, + 0xB2A4, 0x886D, 0xB2A5, 0xB4C9, 0xB2A6, 0xB4CA, 0xB2A7, 0x886E, 0xB2A8, 0x886F, 0xB2A9, 0x8870, 0xB2AA, 0xB4CB, 0xB2AB, 0x8871, + 0xB2AC, 0xB4CC, 0xB2AD, 0x8872, 0xB2AE, 0x8873, 0xB2AF, 0x8874, 0xB2B0, 0xB4CD, 0xB2B1, 0x8875, 0xB2B2, 0x8876, 0xB2B3, 0x8877, + 0xB2B4, 0xB4CE, 0xB2B5, 0x8878, 0xB2B6, 0x8879, 0xB2B7, 0x887A, 0xB2B8, 0x8881, 0xB2B9, 0x8882, 0xB2BA, 0x8883, 0xB2BB, 0x8884, + 0xB2BC, 0x8885, 0xB2BD, 0x8886, 0xB2BE, 0x8887, 0xB2BF, 0x8888, 0xB2C0, 0x8889, 0xB2C1, 0x888A, 0xB2C2, 0x888B, 0xB2C3, 0x888C, + 0xB2C4, 0x888D, 0xB2C5, 0x888E, 0xB2C6, 0x888F, 0xB2C7, 0x8890, 0xB2C8, 0xB4CF, 0xB2C9, 0xB4D0, 0xB2CA, 0x8891, 0xB2CB, 0x8892, + 0xB2CC, 0xB4D1, 0xB2CD, 0x8893, 0xB2CE, 0x8894, 0xB2CF, 0x8895, 0xB2D0, 0xB4D2, 0xB2D1, 0x8896, 0xB2D2, 0xB4D3, 0xB2D3, 0x8897, + 0xB2D4, 0x8898, 0xB2D5, 0x8899, 0xB2D6, 0x889A, 0xB2D7, 0x889B, 0xB2D8, 0xB4D4, 0xB2D9, 0xB4D5, 0xB2DA, 0x889C, 0xB2DB, 0xB4D6, + 0xB2DC, 0x889D, 0xB2DD, 0xB4D7, 0xB2DE, 0x889E, 0xB2DF, 0x889F, 0xB2E0, 0x88A0, 0xB2E1, 0x88A1, 0xB2E2, 0xB4D8, 0xB2E3, 0x88A2, + 0xB2E4, 0xB4D9, 0xB2E5, 0xB4DA, 0xB2E6, 0xB4DB, 0xB2E7, 0x88A3, 0xB2E8, 0xB4DC, 0xB2E9, 0x88A4, 0xB2EA, 0x88A5, 0xB2EB, 0xB4DD, + 0xB2EC, 0xB4DE, 0xB2ED, 0xB4DF, 0xB2EE, 0xB4E0, 0xB2EF, 0xB4E1, 0xB2F0, 0x88A6, 0xB2F1, 0x88A7, 0xB2F2, 0x88A8, 0xB2F3, 0xB4E2, + 0xB2F4, 0xB4E3, 0xB2F5, 0xB4E4, 0xB2F6, 0x88A9, 0xB2F7, 0xB4E5, 0xB2F8, 0xB4E6, 0xB2F9, 0xB4E7, 0xB2FA, 0xB4E8, 0xB2FB, 0xB4E9, + 0xB2FC, 0x88AA, 0xB2FD, 0x88AB, 0xB2FE, 0x88AC, 0xB2FF, 0xB4EA, 0xB300, 0xB4EB, 0xB301, 0xB4EC, 0xB302, 0x88AD, 0xB303, 0x88AE, + 0xB304, 0xB4ED, 0xB305, 0x88AF, 0xB306, 0x88B0, 0xB307, 0x88B1, 0xB308, 0xB4EE, 0xB309, 0x88B2, 0xB30A, 0x88B3, 0xB30B, 0x88B4, + 0xB30C, 0x88B5, 0xB30D, 0x88B6, 0xB30E, 0x88B7, 0xB30F, 0x88B8, 0xB310, 0xB4EF, 0xB311, 0xB4F0, 0xB312, 0x88B9, 0xB313, 0xB4F1, + 0xB314, 0xB4F2, 0xB315, 0xB4F3, 0xB316, 0x88BA, 0xB317, 0x88BB, 0xB318, 0x88BC, 0xB319, 0x88BD, 0xB31A, 0x88BE, 0xB31B, 0x88BF, + 0xB31C, 0xB4F4, 0xB31D, 0x88C0, 0xB31E, 0x88C1, 0xB31F, 0x88C2, 0xB320, 0x88C3, 0xB321, 0x88C4, 0xB322, 0x88C5, 0xB323, 0x88C6, + 0xB324, 0x88C7, 0xB325, 0x88C8, 0xB326, 0x88C9, 0xB327, 0x88CA, 0xB328, 0x88CB, 0xB329, 0x88CC, 0xB32A, 0x88CD, 0xB32B, 0x88CE, + 0xB32C, 0x88CF, 0xB32D, 0x88D0, 0xB32E, 0x88D1, 0xB32F, 0x88D2, 0xB330, 0x88D3, 0xB331, 0x88D4, 0xB332, 0x88D5, 0xB333, 0x88D6, + 0xB334, 0x88D7, 0xB335, 0x88D8, 0xB336, 0x88D9, 0xB337, 0x88DA, 0xB338, 0x88DB, 0xB339, 0x88DC, 0xB33A, 0x88DD, 0xB33B, 0x88DE, + 0xB33C, 0x88DF, 0xB33D, 0x88E0, 0xB33E, 0x88E1, 0xB33F, 0x88E2, 0xB340, 0x88E3, 0xB341, 0x88E4, 0xB342, 0x88E5, 0xB343, 0x88E6, + 0xB344, 0x88E7, 0xB345, 0x88E8, 0xB346, 0x88E9, 0xB347, 0x88EA, 0xB348, 0x88EB, 0xB349, 0x88EC, 0xB34A, 0x88ED, 0xB34B, 0x88EE, + 0xB34C, 0x88EF, 0xB34D, 0x88F0, 0xB34E, 0x88F1, 0xB34F, 0x88F2, 0xB350, 0x88F3, 0xB351, 0x88F4, 0xB352, 0x88F5, 0xB353, 0x88F6, + 0xB354, 0xB4F5, 0xB355, 0xB4F6, 0xB356, 0xB4F7, 0xB357, 0x88F7, 0xB358, 0xB4F8, 0xB359, 0x88F8, 0xB35A, 0x88F9, 0xB35B, 0xB4F9, + 0xB35C, 0xB4FA, 0xB35D, 0x88FA, 0xB35E, 0xB4FB, 0xB35F, 0xB4FC, 0xB360, 0x88FB, 0xB361, 0x88FC, 0xB362, 0x88FD, 0xB363, 0x88FE, + 0xB364, 0xB4FD, 0xB365, 0xB4FE, 0xB366, 0x8941, 0xB367, 0xB5A1, 0xB368, 0x8942, 0xB369, 0xB5A2, 0xB36A, 0x8943, 0xB36B, 0xB5A3, + 0xB36C, 0x8944, 0xB36D, 0x8945, 0xB36E, 0xB5A4, 0xB36F, 0x8946, 0xB370, 0xB5A5, 0xB371, 0xB5A6, 0xB372, 0x8947, 0xB373, 0x8948, + 0xB374, 0xB5A7, 0xB375, 0x8949, 0xB376, 0x894A, 0xB377, 0x894B, 0xB378, 0xB5A8, 0xB379, 0x894C, 0xB37A, 0x894D, 0xB37B, 0x894E, + 0xB37C, 0x894F, 0xB37D, 0x8950, 0xB37E, 0x8951, 0xB37F, 0x8952, 0xB380, 0xB5A9, 0xB381, 0xB5AA, 0xB382, 0x8953, 0xB383, 0xB5AB, + 0xB384, 0xB5AC, 0xB385, 0xB5AD, 0xB386, 0x8954, 0xB387, 0x8955, 0xB388, 0x8956, 0xB389, 0x8957, 0xB38A, 0x8958, 0xB38B, 0x8959, + 0xB38C, 0xB5AE, 0xB38D, 0x895A, 0xB38E, 0x8961, 0xB38F, 0x8962, 0xB390, 0xB5AF, 0xB391, 0x8963, 0xB392, 0x8964, 0xB393, 0x8965, + 0xB394, 0xB5B0, 0xB395, 0x8966, 0xB396, 0x8967, 0xB397, 0x8968, 0xB398, 0x8969, 0xB399, 0x896A, 0xB39A, 0x896B, 0xB39B, 0x896C, + 0xB39C, 0x896D, 0xB39D, 0x896E, 0xB39E, 0x896F, 0xB39F, 0x8970, 0xB3A0, 0xB5B1, 0xB3A1, 0xB5B2, 0xB3A2, 0x8971, 0xB3A3, 0x8972, + 0xB3A4, 0x8973, 0xB3A5, 0x8974, 0xB3A6, 0x8975, 0xB3A7, 0x8976, 0xB3A8, 0xB5B3, 0xB3A9, 0x8977, 0xB3AA, 0x8978, 0xB3AB, 0x8979, + 0xB3AC, 0xB5B4, 0xB3AD, 0x897A, 0xB3AE, 0x8981, 0xB3AF, 0x8982, 0xB3B0, 0x8983, 0xB3B1, 0x8984, 0xB3B2, 0x8985, 0xB3B3, 0x8986, + 0xB3B4, 0x8987, 0xB3B5, 0x8988, 0xB3B6, 0x8989, 0xB3B7, 0x898A, 0xB3B8, 0x898B, 0xB3B9, 0x898C, 0xB3BA, 0x898D, 0xB3BB, 0x898E, + 0xB3BC, 0x898F, 0xB3BD, 0x8990, 0xB3BE, 0x8991, 0xB3BF, 0x8992, 0xB3C0, 0x8993, 0xB3C1, 0x8994, 0xB3C2, 0x8995, 0xB3C3, 0x8996, + 0xB3C4, 0xB5B5, 0xB3C5, 0xB5B6, 0xB3C6, 0x8997, 0xB3C7, 0x8998, 0xB3C8, 0xB5B7, 0xB3C9, 0x8999, 0xB3CA, 0x899A, 0xB3CB, 0xB5B8, + 0xB3CC, 0xB5B9, 0xB3CD, 0x899B, 0xB3CE, 0xB5BA, 0xB3CF, 0x899C, 0xB3D0, 0xB5BB, 0xB3D1, 0x899D, 0xB3D2, 0x899E, 0xB3D3, 0x899F, + 0xB3D4, 0xB5BC, 0xB3D5, 0xB5BD, 0xB3D6, 0x89A0, 0xB3D7, 0xB5BE, 0xB3D8, 0x89A1, 0xB3D9, 0xB5BF, 0xB3DA, 0x89A2, 0xB3DB, 0xB5C0, + 0xB3DC, 0x89A3, 0xB3DD, 0xB5C1, 0xB3DE, 0x89A4, 0xB3DF, 0x89A5, 0xB3E0, 0xB5C2, 0xB3E1, 0x89A6, 0xB3E2, 0x89A7, 0xB3E3, 0x89A8, + 0xB3E4, 0xB5C3, 0xB3E5, 0x89A9, 0xB3E6, 0x89AA, 0xB3E7, 0x89AB, 0xB3E8, 0xB5C4, 0xB3E9, 0x89AC, 0xB3EA, 0x89AD, 0xB3EB, 0x89AE, + 0xB3EC, 0x89AF, 0xB3ED, 0x89B0, 0xB3EE, 0x89B1, 0xB3EF, 0x89B2, 0xB3F0, 0x89B3, 0xB3F1, 0x89B4, 0xB3F2, 0x89B5, 0xB3F3, 0x89B6, + 0xB3F4, 0x89B7, 0xB3F5, 0x89B8, 0xB3F6, 0x89B9, 0xB3F7, 0x89BA, 0xB3F8, 0x89BB, 0xB3F9, 0x89BC, 0xB3FA, 0x89BD, 0xB3FB, 0x89BE, + 0xB3FC, 0xB5C5, 0xB3FD, 0x89BF, 0xB3FE, 0x89C0, 0xB3FF, 0x89C1, 0xB400, 0x89C2, 0xB401, 0x89C3, 0xB402, 0x89C4, 0xB403, 0x89C5, + 0xB404, 0x89C6, 0xB405, 0x89C7, 0xB406, 0x89C8, 0xB407, 0x89C9, 0xB408, 0x89CA, 0xB409, 0x89CB, 0xB40A, 0x89CC, 0xB40B, 0x89CD, + 0xB40C, 0x89CE, 0xB40D, 0x89CF, 0xB40E, 0x89D0, 0xB40F, 0x89D1, 0xB410, 0xB5C6, 0xB411, 0x89D2, 0xB412, 0x89D3, 0xB413, 0x89D4, + 0xB414, 0x89D5, 0xB415, 0x89D6, 0xB416, 0x89D7, 0xB417, 0x89D8, 0xB418, 0xB5C7, 0xB419, 0x89D9, 0xB41A, 0x89DA, 0xB41B, 0x89DB, + 0xB41C, 0xB5C8, 0xB41D, 0x89DC, 0xB41E, 0x89DD, 0xB41F, 0x89DE, 0xB420, 0xB5C9, 0xB421, 0x89DF, 0xB422, 0x89E0, 0xB423, 0x89E1, + 0xB424, 0x89E2, 0xB425, 0x89E3, 0xB426, 0x89E4, 0xB427, 0x89E5, 0xB428, 0xB5CA, 0xB429, 0xB5CB, 0xB42A, 0x89E6, 0xB42B, 0xB5CC, + 0xB42C, 0x89E7, 0xB42D, 0x89E8, 0xB42E, 0x89E9, 0xB42F, 0x89EA, 0xB430, 0x89EB, 0xB431, 0x89EC, 0xB432, 0x89ED, 0xB433, 0x89EE, + 0xB434, 0xB5CD, 0xB435, 0x89EF, 0xB436, 0x89F0, 0xB437, 0x89F1, 0xB438, 0x89F2, 0xB439, 0x89F3, 0xB43A, 0x89F4, 0xB43B, 0x89F5, + 0xB43C, 0x89F6, 0xB43D, 0x89F7, 0xB43E, 0x89F8, 0xB43F, 0x89F9, 0xB440, 0x89FA, 0xB441, 0x89FB, 0xB442, 0x89FC, 0xB443, 0x89FD, + 0xB444, 0x89FE, 0xB445, 0x8A41, 0xB446, 0x8A42, 0xB447, 0x8A43, 0xB448, 0x8A44, 0xB449, 0x8A45, 0xB44A, 0x8A46, 0xB44B, 0x8A47, + 0xB44C, 0x8A48, 0xB44D, 0x8A49, 0xB44E, 0x8A4A, 0xB44F, 0x8A4B, 0xB450, 0xB5CE, 0xB451, 0xB5CF, 0xB452, 0x8A4C, 0xB453, 0x8A4D, + 0xB454, 0xB5D0, 0xB455, 0x8A4E, 0xB456, 0x8A4F, 0xB457, 0x8A50, 0xB458, 0xB5D1, 0xB459, 0x8A51, 0xB45A, 0x8A52, 0xB45B, 0x8A53, + 0xB45C, 0x8A54, 0xB45D, 0x8A55, 0xB45E, 0x8A56, 0xB45F, 0x8A57, 0xB460, 0xB5D2, 0xB461, 0xB5D3, 0xB462, 0x8A58, 0xB463, 0xB5D4, + 0xB464, 0x8A59, 0xB465, 0xB5D5, 0xB466, 0x8A5A, 0xB467, 0x8A61, 0xB468, 0x8A62, 0xB469, 0x8A63, 0xB46A, 0x8A64, 0xB46B, 0x8A65, + 0xB46C, 0xB5D6, 0xB46D, 0x8A66, 0xB46E, 0x8A67, 0xB46F, 0x8A68, 0xB470, 0x8A69, 0xB471, 0x8A6A, 0xB472, 0x8A6B, 0xB473, 0x8A6C, + 0xB474, 0x8A6D, 0xB475, 0x8A6E, 0xB476, 0x8A6F, 0xB477, 0x8A70, 0xB478, 0x8A71, 0xB479, 0x8A72, 0xB47A, 0x8A73, 0xB47B, 0x8A74, + 0xB47C, 0x8A75, 0xB47D, 0x8A76, 0xB47E, 0x8A77, 0xB47F, 0x8A78, 0xB480, 0xB5D7, 0xB481, 0x8A79, 0xB482, 0x8A7A, 0xB483, 0x8A81, + 0xB484, 0x8A82, 0xB485, 0x8A83, 0xB486, 0x8A84, 0xB487, 0x8A85, 0xB488, 0xB5D8, 0xB489, 0x8A86, 0xB48A, 0x8A87, 0xB48B, 0x8A88, + 0xB48C, 0x8A89, 0xB48D, 0x8A8A, 0xB48E, 0x8A8B, 0xB48F, 0x8A8C, 0xB490, 0x8A8D, 0xB491, 0x8A8E, 0xB492, 0x8A8F, 0xB493, 0x8A90, + 0xB494, 0x8A91, 0xB495, 0x8A92, 0xB496, 0x8A93, 0xB497, 0x8A94, 0xB498, 0x8A95, 0xB499, 0x8A96, 0xB49A, 0x8A97, 0xB49B, 0x8A98, + 0xB49C, 0x8A99, 0xB49D, 0xB5D9, 0xB49E, 0x8A9A, 0xB49F, 0x8A9B, 0xB4A0, 0x8A9C, 0xB4A1, 0x8A9D, 0xB4A2, 0x8A9E, 0xB4A3, 0x8A9F, + 0xB4A4, 0xB5DA, 0xB4A5, 0x8AA0, 0xB4A6, 0x8AA1, 0xB4A7, 0x8AA2, 0xB4A8, 0xB5DB, 0xB4A9, 0x8AA3, 0xB4AA, 0x8AA4, 0xB4AB, 0x8AA5, + 0xB4AC, 0xB5DC, 0xB4AD, 0x8AA6, 0xB4AE, 0x8AA7, 0xB4AF, 0x8AA8, 0xB4B0, 0x8AA9, 0xB4B1, 0x8AAA, 0xB4B2, 0x8AAB, 0xB4B3, 0x8AAC, + 0xB4B4, 0x8AAD, 0xB4B5, 0xB5DD, 0xB4B6, 0x8AAE, 0xB4B7, 0xB5DE, 0xB4B8, 0x8AAF, 0xB4B9, 0xB5DF, 0xB4BA, 0x8AB0, 0xB4BB, 0x8AB1, + 0xB4BC, 0x8AB2, 0xB4BD, 0x8AB3, 0xB4BE, 0x8AB4, 0xB4BF, 0x8AB5, 0xB4C0, 0xB5E0, 0xB4C1, 0x8AB6, 0xB4C2, 0x8AB7, 0xB4C3, 0x8AB8, + 0xB4C4, 0xB5E1, 0xB4C5, 0x8AB9, 0xB4C6, 0x8ABA, 0xB4C7, 0x8ABB, 0xB4C8, 0xB5E2, 0xB4C9, 0x8ABC, 0xB4CA, 0x8ABD, 0xB4CB, 0x8ABE, + 0xB4CC, 0x8ABF, 0xB4CD, 0x8AC0, 0xB4CE, 0x8AC1, 0xB4CF, 0x8AC2, 0xB4D0, 0xB5E3, 0xB4D1, 0x8AC3, 0xB4D2, 0x8AC4, 0xB4D3, 0x8AC5, + 0xB4D4, 0x8AC6, 0xB4D5, 0xB5E4, 0xB4D6, 0x8AC7, 0xB4D7, 0x8AC8, 0xB4D8, 0x8AC9, 0xB4D9, 0x8ACA, 0xB4DA, 0x8ACB, 0xB4DB, 0x8ACC, + 0xB4DC, 0xB5E5, 0xB4DD, 0xB5E6, 0xB4DE, 0x8ACD, 0xB4DF, 0x8ACE, 0xB4E0, 0xB5E7, 0xB4E1, 0x8ACF, 0xB4E2, 0x8AD0, 0xB4E3, 0xB5E8, + 0xB4E4, 0xB5E9, 0xB4E5, 0x8AD1, 0xB4E6, 0xB5EA, 0xB4E7, 0x8AD2, 0xB4E8, 0x8AD3, 0xB4E9, 0x8AD4, 0xB4EA, 0x8AD5, 0xB4EB, 0x8AD6, + 0xB4EC, 0xB5EB, 0xB4ED, 0xB5EC, 0xB4EE, 0x8AD7, 0xB4EF, 0xB5ED, 0xB4F0, 0x8AD8, 0xB4F1, 0xB5EE, 0xB4F2, 0x8AD9, 0xB4F3, 0x8ADA, + 0xB4F4, 0x8ADB, 0xB4F5, 0x8ADC, 0xB4F6, 0x8ADD, 0xB4F7, 0x8ADE, 0xB4F8, 0xB5EF, 0xB4F9, 0x8ADF, 0xB4FA, 0x8AE0, 0xB4FB, 0x8AE1, + 0xB4FC, 0x8AE2, 0xB4FD, 0x8AE3, 0xB4FE, 0x8AE4, 0xB4FF, 0x8AE5, 0xB500, 0x8AE6, 0xB501, 0x8AE7, 0xB502, 0x8AE8, 0xB503, 0x8AE9, + 0xB504, 0x8AEA, 0xB505, 0x8AEB, 0xB506, 0x8AEC, 0xB507, 0x8AED, 0xB508, 0x8AEE, 0xB509, 0x8AEF, 0xB50A, 0x8AF0, 0xB50B, 0x8AF1, + 0xB50C, 0x8AF2, 0xB50D, 0x8AF3, 0xB50E, 0x8AF4, 0xB50F, 0x8AF5, 0xB510, 0x8AF6, 0xB511, 0x8AF7, 0xB512, 0x8AF8, 0xB513, 0x8AF9, + 0xB514, 0xB5F0, 0xB515, 0xB5F1, 0xB516, 0x8AFA, 0xB517, 0x8AFB, 0xB518, 0xB5F2, 0xB519, 0x8AFC, 0xB51A, 0x8AFD, 0xB51B, 0xB5F3, + 0xB51C, 0xB5F4, 0xB51D, 0x8AFE, 0xB51E, 0x8B41, 0xB51F, 0x8B42, 0xB520, 0x8B43, 0xB521, 0x8B44, 0xB522, 0x8B45, 0xB523, 0x8B46, + 0xB524, 0xB5F5, 0xB525, 0xB5F6, 0xB526, 0x8B47, 0xB527, 0xB5F7, 0xB528, 0xB5F8, 0xB529, 0xB5F9, 0xB52A, 0xB5FA, 0xB52B, 0x8B48, + 0xB52C, 0x8B49, 0xB52D, 0x8B4A, 0xB52E, 0x8B4B, 0xB52F, 0x8B4C, 0xB530, 0xB5FB, 0xB531, 0xB5FC, 0xB532, 0x8B4D, 0xB533, 0x8B4E, + 0xB534, 0xB5FD, 0xB535, 0x8B4F, 0xB536, 0x8B50, 0xB537, 0x8B51, 0xB538, 0xB5FE, 0xB539, 0x8B52, 0xB53A, 0x8B53, 0xB53B, 0x8B54, + 0xB53C, 0x8B55, 0xB53D, 0x8B56, 0xB53E, 0x8B57, 0xB53F, 0x8B58, 0xB540, 0xB6A1, 0xB541, 0xB6A2, 0xB542, 0x8B59, 0xB543, 0xB6A3, + 0xB544, 0xB6A4, 0xB545, 0xB6A5, 0xB546, 0x8B5A, 0xB547, 0x8B61, 0xB548, 0x8B62, 0xB549, 0x8B63, 0xB54A, 0x8B64, 0xB54B, 0xB6A6, + 0xB54C, 0xB6A7, 0xB54D, 0xB6A8, 0xB54E, 0x8B65, 0xB54F, 0x8B66, 0xB550, 0xB6A9, 0xB551, 0x8B67, 0xB552, 0x8B68, 0xB553, 0x8B69, + 0xB554, 0xB6AA, 0xB555, 0x8B6A, 0xB556, 0x8B6B, 0xB557, 0x8B6C, 0xB558, 0x8B6D, 0xB559, 0x8B6E, 0xB55A, 0x8B6F, 0xB55B, 0x8B70, + 0xB55C, 0xB6AB, 0xB55D, 0xB6AC, 0xB55E, 0x8B71, 0xB55F, 0xB6AD, 0xB560, 0xB6AE, 0xB561, 0xB6AF, 0xB562, 0x8B72, 0xB563, 0x8B73, + 0xB564, 0x8B74, 0xB565, 0x8B75, 0xB566, 0x8B76, 0xB567, 0x8B77, 0xB568, 0x8B78, 0xB569, 0x8B79, 0xB56A, 0x8B7A, 0xB56B, 0x8B81, + 0xB56C, 0x8B82, 0xB56D, 0x8B83, 0xB56E, 0x8B84, 0xB56F, 0x8B85, 0xB570, 0x8B86, 0xB571, 0x8B87, 0xB572, 0x8B88, 0xB573, 0x8B89, + 0xB574, 0x8B8A, 0xB575, 0x8B8B, 0xB576, 0x8B8C, 0xB577, 0x8B8D, 0xB578, 0x8B8E, 0xB579, 0x8B8F, 0xB57A, 0x8B90, 0xB57B, 0x8B91, + 0xB57C, 0x8B92, 0xB57D, 0x8B93, 0xB57E, 0x8B94, 0xB57F, 0x8B95, 0xB580, 0x8B96, 0xB581, 0x8B97, 0xB582, 0x8B98, 0xB583, 0x8B99, + 0xB584, 0x8B9A, 0xB585, 0x8B9B, 0xB586, 0x8B9C, 0xB587, 0x8B9D, 0xB588, 0x8B9E, 0xB589, 0x8B9F, 0xB58A, 0x8BA0, 0xB58B, 0x8BA1, + 0xB58C, 0x8BA2, 0xB58D, 0x8BA3, 0xB58E, 0x8BA4, 0xB58F, 0x8BA5, 0xB590, 0x8BA6, 0xB591, 0x8BA7, 0xB592, 0x8BA8, 0xB593, 0x8BA9, + 0xB594, 0x8BAA, 0xB595, 0x8BAB, 0xB596, 0x8BAC, 0xB597, 0x8BAD, 0xB598, 0x8BAE, 0xB599, 0x8BAF, 0xB59A, 0x8BB0, 0xB59B, 0x8BB1, + 0xB59C, 0x8BB2, 0xB59D, 0x8BB3, 0xB59E, 0x8BB4, 0xB59F, 0x8BB5, 0xB5A0, 0xB6B0, 0xB5A1, 0xB6B1, 0xB5A2, 0x8BB6, 0xB5A3, 0x8BB7, + 0xB5A4, 0xB6B2, 0xB5A5, 0x8BB8, 0xB5A6, 0x8BB9, 0xB5A7, 0x8BBA, 0xB5A8, 0xB6B3, 0xB5A9, 0x8BBB, 0xB5AA, 0xB6B4, 0xB5AB, 0xB6B5, + 0xB5AC, 0x8BBC, 0xB5AD, 0x8BBD, 0xB5AE, 0x8BBE, 0xB5AF, 0x8BBF, 0xB5B0, 0xB6B6, 0xB5B1, 0xB6B7, 0xB5B2, 0x8BC0, 0xB5B3, 0xB6B8, + 0xB5B4, 0xB6B9, 0xB5B5, 0xB6BA, 0xB5B6, 0x8BC1, 0xB5B7, 0x8BC2, 0xB5B8, 0x8BC3, 0xB5B9, 0x8BC4, 0xB5BA, 0x8BC5, 0xB5BB, 0xB6BB, + 0xB5BC, 0xB6BC, 0xB5BD, 0xB6BD, 0xB5BE, 0x8BC6, 0xB5BF, 0x8BC7, 0xB5C0, 0xB6BE, 0xB5C1, 0x8BC8, 0xB5C2, 0x8BC9, 0xB5C3, 0x8BCA, + 0xB5C4, 0xB6BF, 0xB5C5, 0x8BCB, 0xB5C6, 0x8BCC, 0xB5C7, 0x8BCD, 0xB5C8, 0x8BCE, 0xB5C9, 0x8BCF, 0xB5CA, 0x8BD0, 0xB5CB, 0x8BD1, + 0xB5CC, 0xB6C0, 0xB5CD, 0xB6C1, 0xB5CE, 0x8BD2, 0xB5CF, 0xB6C2, 0xB5D0, 0xB6C3, 0xB5D1, 0xB6C4, 0xB5D2, 0x8BD3, 0xB5D3, 0x8BD4, + 0xB5D4, 0x8BD5, 0xB5D5, 0x8BD6, 0xB5D6, 0x8BD7, 0xB5D7, 0x8BD8, 0xB5D8, 0xB6C5, 0xB5D9, 0x8BD9, 0xB5DA, 0x8BDA, 0xB5DB, 0x8BDB, + 0xB5DC, 0x8BDC, 0xB5DD, 0x8BDD, 0xB5DE, 0x8BDE, 0xB5DF, 0x8BDF, 0xB5E0, 0x8BE0, 0xB5E1, 0x8BE1, 0xB5E2, 0x8BE2, 0xB5E3, 0x8BE3, + 0xB5E4, 0x8BE4, 0xB5E5, 0x8BE5, 0xB5E6, 0x8BE6, 0xB5E7, 0x8BE7, 0xB5E8, 0x8BE8, 0xB5E9, 0x8BE9, 0xB5EA, 0x8BEA, 0xB5EB, 0x8BEB, + 0xB5EC, 0xB6C6, 0xB5ED, 0x8BEC, 0xB5EE, 0x8BED, 0xB5EF, 0x8BEE, 0xB5F0, 0x8BEF, 0xB5F1, 0x8BF0, 0xB5F2, 0x8BF1, 0xB5F3, 0x8BF2, + 0xB5F4, 0x8BF3, 0xB5F5, 0x8BF4, 0xB5F6, 0x8BF5, 0xB5F7, 0x8BF6, 0xB5F8, 0x8BF7, 0xB5F9, 0x8BF8, 0xB5FA, 0x8BF9, 0xB5FB, 0x8BFA, + 0xB5FC, 0x8BFB, 0xB5FD, 0x8BFC, 0xB5FE, 0x8BFD, 0xB5FF, 0x8BFE, 0xB600, 0x8C41, 0xB601, 0x8C42, 0xB602, 0x8C43, 0xB603, 0x8C44, + 0xB604, 0x8C45, 0xB605, 0x8C46, 0xB606, 0x8C47, 0xB607, 0x8C48, 0xB608, 0x8C49, 0xB609, 0x8C4A, 0xB60A, 0x8C4B, 0xB60B, 0x8C4C, + 0xB60C, 0x8C4D, 0xB60D, 0x8C4E, 0xB60E, 0x8C4F, 0xB60F, 0x8C50, 0xB610, 0xB6C7, 0xB611, 0xB6C8, 0xB612, 0x8C51, 0xB613, 0x8C52, + 0xB614, 0xB6C9, 0xB615, 0x8C53, 0xB616, 0x8C54, 0xB617, 0x8C55, 0xB618, 0xB6CA, 0xB619, 0x8C56, 0xB61A, 0x8C57, 0xB61B, 0x8C58, + 0xB61C, 0x8C59, 0xB61D, 0x8C5A, 0xB61E, 0x8C61, 0xB61F, 0x8C62, 0xB620, 0x8C63, 0xB621, 0x8C64, 0xB622, 0x8C65, 0xB623, 0x8C66, + 0xB624, 0x8C67, 0xB625, 0xB6CB, 0xB626, 0x8C68, 0xB627, 0x8C69, 0xB628, 0x8C6A, 0xB629, 0x8C6B, 0xB62A, 0x8C6C, 0xB62B, 0x8C6D, + 0xB62C, 0xB6CC, 0xB62D, 0x8C6E, 0xB62E, 0x8C6F, 0xB62F, 0x8C70, 0xB630, 0x8C71, 0xB631, 0x8C72, 0xB632, 0x8C73, 0xB633, 0x8C74, + 0xB634, 0xB6CD, 0xB635, 0x8C75, 0xB636, 0x8C76, 0xB637, 0x8C77, 0xB638, 0x8C78, 0xB639, 0x8C79, 0xB63A, 0x8C7A, 0xB63B, 0x8C81, + 0xB63C, 0x8C82, 0xB63D, 0x8C83, 0xB63E, 0x8C84, 0xB63F, 0x8C85, 0xB640, 0x8C86, 0xB641, 0x8C87, 0xB642, 0x8C88, 0xB643, 0x8C89, + 0xB644, 0x8C8A, 0xB645, 0x8C8B, 0xB646, 0x8C8C, 0xB647, 0x8C8D, 0xB648, 0xB6CE, 0xB649, 0x8C8E, 0xB64A, 0x8C8F, 0xB64B, 0x8C90, + 0xB64C, 0x8C91, 0xB64D, 0x8C92, 0xB64E, 0x8C93, 0xB64F, 0x8C94, 0xB650, 0x8C95, 0xB651, 0x8C96, 0xB652, 0x8C97, 0xB653, 0x8C98, + 0xB654, 0x8C99, 0xB655, 0x8C9A, 0xB656, 0x8C9B, 0xB657, 0x8C9C, 0xB658, 0x8C9D, 0xB659, 0x8C9E, 0xB65A, 0x8C9F, 0xB65B, 0x8CA0, + 0xB65C, 0x8CA1, 0xB65D, 0x8CA2, 0xB65E, 0x8CA3, 0xB65F, 0x8CA4, 0xB660, 0x8CA5, 0xB661, 0x8CA6, 0xB662, 0x8CA7, 0xB663, 0x8CA8, + 0xB664, 0xB6CF, 0xB665, 0x8CA9, 0xB666, 0x8CAA, 0xB667, 0x8CAB, 0xB668, 0xB6D0, 0xB669, 0x8CAC, 0xB66A, 0x8CAD, 0xB66B, 0x8CAE, + 0xB66C, 0x8CAF, 0xB66D, 0x8CB0, 0xB66E, 0x8CB1, 0xB66F, 0x8CB2, 0xB670, 0x8CB3, 0xB671, 0x8CB4, 0xB672, 0x8CB5, 0xB673, 0x8CB6, + 0xB674, 0x8CB7, 0xB675, 0x8CB8, 0xB676, 0x8CB9, 0xB677, 0x8CBA, 0xB678, 0x8CBB, 0xB679, 0x8CBC, 0xB67A, 0x8CBD, 0xB67B, 0x8CBE, + 0xB67C, 0x8CBF, 0xB67D, 0x8CC0, 0xB67E, 0x8CC1, 0xB67F, 0x8CC2, 0xB680, 0x8CC3, 0xB681, 0x8CC4, 0xB682, 0x8CC5, 0xB683, 0x8CC6, + 0xB684, 0x8CC7, 0xB685, 0x8CC8, 0xB686, 0x8CC9, 0xB687, 0x8CCA, 0xB688, 0x8CCB, 0xB689, 0x8CCC, 0xB68A, 0x8CCD, 0xB68B, 0x8CCE, + 0xB68C, 0x8CCF, 0xB68D, 0x8CD0, 0xB68E, 0x8CD1, 0xB68F, 0x8CD2, 0xB690, 0x8CD3, 0xB691, 0x8CD4, 0xB692, 0x8CD5, 0xB693, 0x8CD6, + 0xB694, 0x8CD7, 0xB695, 0x8CD8, 0xB696, 0x8CD9, 0xB697, 0x8CDA, 0xB698, 0x8CDB, 0xB699, 0x8CDC, 0xB69A, 0x8CDD, 0xB69B, 0x8CDE, + 0xB69C, 0xB6D1, 0xB69D, 0xB6D2, 0xB69E, 0x8CDF, 0xB69F, 0x8CE0, 0xB6A0, 0xB6D3, 0xB6A1, 0x8CE1, 0xB6A2, 0x8CE2, 0xB6A3, 0x8CE3, + 0xB6A4, 0xB6D4, 0xB6A5, 0x8CE4, 0xB6A6, 0x8CE5, 0xB6A7, 0x8CE6, 0xB6A8, 0x8CE7, 0xB6A9, 0x8CE8, 0xB6AA, 0x8CE9, 0xB6AB, 0xB6D5, + 0xB6AC, 0xB6D6, 0xB6AD, 0x8CEA, 0xB6AE, 0x8CEB, 0xB6AF, 0x8CEC, 0xB6B0, 0x8CED, 0xB6B1, 0xB6D7, 0xB6B2, 0x8CEE, 0xB6B3, 0x8CEF, + 0xB6B4, 0x8CF0, 0xB6B5, 0x8CF1, 0xB6B6, 0x8CF2, 0xB6B7, 0x8CF3, 0xB6B8, 0x8CF4, 0xB6B9, 0x8CF5, 0xB6BA, 0x8CF6, 0xB6BB, 0x8CF7, + 0xB6BC, 0x8CF8, 0xB6BD, 0x8CF9, 0xB6BE, 0x8CFA, 0xB6BF, 0x8CFB, 0xB6C0, 0x8CFC, 0xB6C1, 0x8CFD, 0xB6C2, 0x8CFE, 0xB6C3, 0x8D41, + 0xB6C4, 0x8D42, 0xB6C5, 0x8D43, 0xB6C6, 0x8D44, 0xB6C7, 0x8D45, 0xB6C8, 0x8D46, 0xB6C9, 0x8D47, 0xB6CA, 0x8D48, 0xB6CB, 0x8D49, + 0xB6CC, 0x8D4A, 0xB6CD, 0x8D4B, 0xB6CE, 0x8D4C, 0xB6CF, 0x8D4D, 0xB6D0, 0x8D4E, 0xB6D1, 0x8D4F, 0xB6D2, 0x8D50, 0xB6D3, 0x8D51, + 0xB6D4, 0xB6D8, 0xB6D5, 0x8D52, 0xB6D6, 0x8D53, 0xB6D7, 0x8D54, 0xB6D8, 0x8D55, 0xB6D9, 0x8D56, 0xB6DA, 0x8D57, 0xB6DB, 0x8D58, + 0xB6DC, 0x8D59, 0xB6DD, 0x8D5A, 0xB6DE, 0x8D61, 0xB6DF, 0x8D62, 0xB6E0, 0x8D63, 0xB6E1, 0x8D64, 0xB6E2, 0x8D65, 0xB6E3, 0x8D66, + 0xB6E4, 0x8D67, 0xB6E5, 0x8D68, 0xB6E6, 0x8D69, 0xB6E7, 0x8D6A, 0xB6E8, 0x8D6B, 0xB6E9, 0x8D6C, 0xB6EA, 0x8D6D, 0xB6EB, 0x8D6E, + 0xB6EC, 0x8D6F, 0xB6ED, 0x8D70, 0xB6EE, 0x8D71, 0xB6EF, 0x8D72, 0xB6F0, 0xB6D9, 0xB6F1, 0x8D73, 0xB6F2, 0x8D74, 0xB6F3, 0x8D75, + 0xB6F4, 0xB6DA, 0xB6F5, 0x8D76, 0xB6F6, 0x8D77, 0xB6F7, 0x8D78, 0xB6F8, 0xB6DB, 0xB6F9, 0x8D79, 0xB6FA, 0x8D7A, 0xB6FB, 0x8D81, + 0xB6FC, 0x8D82, 0xB6FD, 0x8D83, 0xB6FE, 0x8D84, 0xB6FF, 0x8D85, 0xB700, 0xB6DC, 0xB701, 0xB6DD, 0xB702, 0x8D86, 0xB703, 0x8D87, + 0xB704, 0x8D88, 0xB705, 0xB6DE, 0xB706, 0x8D89, 0xB707, 0x8D8A, 0xB708, 0x8D8B, 0xB709, 0x8D8C, 0xB70A, 0x8D8D, 0xB70B, 0x8D8E, + 0xB70C, 0x8D8F, 0xB70D, 0x8D90, 0xB70E, 0x8D91, 0xB70F, 0x8D92, 0xB710, 0x8D93, 0xB711, 0x8D94, 0xB712, 0x8D95, 0xB713, 0x8D96, + 0xB714, 0x8D97, 0xB715, 0x8D98, 0xB716, 0x8D99, 0xB717, 0x8D9A, 0xB718, 0x8D9B, 0xB719, 0x8D9C, 0xB71A, 0x8D9D, 0xB71B, 0x8D9E, + 0xB71C, 0x8D9F, 0xB71D, 0x8DA0, 0xB71E, 0x8DA1, 0xB71F, 0x8DA2, 0xB720, 0x8DA3, 0xB721, 0x8DA4, 0xB722, 0x8DA5, 0xB723, 0x8DA6, + 0xB724, 0x8DA7, 0xB725, 0x8DA8, 0xB726, 0x8DA9, 0xB727, 0x8DAA, 0xB728, 0xB6DF, 0xB729, 0xB6E0, 0xB72A, 0x8DAB, 0xB72B, 0x8DAC, + 0xB72C, 0xB6E1, 0xB72D, 0x8DAD, 0xB72E, 0x8DAE, 0xB72F, 0xB6E2, 0xB730, 0xB6E3, 0xB731, 0x8DAF, 0xB732, 0x8DB0, 0xB733, 0x8DB1, + 0xB734, 0x8DB2, 0xB735, 0x8DB3, 0xB736, 0x8DB4, 0xB737, 0x8DB5, 0xB738, 0xB6E4, 0xB739, 0xB6E5, 0xB73A, 0x8DB6, 0xB73B, 0xB6E6, + 0xB73C, 0x8DB7, 0xB73D, 0x8DB8, 0xB73E, 0x8DB9, 0xB73F, 0x8DBA, 0xB740, 0x8DBB, 0xB741, 0x8DBC, 0xB742, 0x8DBD, 0xB743, 0x8DBE, + 0xB744, 0xB6E7, 0xB745, 0x8DBF, 0xB746, 0x8DC0, 0xB747, 0x8DC1, 0xB748, 0xB6E8, 0xB749, 0x8DC2, 0xB74A, 0x8DC3, 0xB74B, 0x8DC4, + 0xB74C, 0xB6E9, 0xB74D, 0x8DC5, 0xB74E, 0x8DC6, 0xB74F, 0x8DC7, 0xB750, 0x8DC8, 0xB751, 0x8DC9, 0xB752, 0x8DCA, 0xB753, 0x8DCB, + 0xB754, 0xB6EA, 0xB755, 0xB6EB, 0xB756, 0x8DCC, 0xB757, 0x8DCD, 0xB758, 0x8DCE, 0xB759, 0x8DCF, 0xB75A, 0x8DD0, 0xB75B, 0x8DD1, + 0xB75C, 0x8DD2, 0xB75D, 0x8DD3, 0xB75E, 0x8DD4, 0xB75F, 0x8DD5, 0xB760, 0xB6EC, 0xB761, 0x8DD6, 0xB762, 0x8DD7, 0xB763, 0x8DD8, + 0xB764, 0xB6ED, 0xB765, 0x8DD9, 0xB766, 0x8DDA, 0xB767, 0x8DDB, 0xB768, 0xB6EE, 0xB769, 0x8DDC, 0xB76A, 0x8DDD, 0xB76B, 0x8DDE, + 0xB76C, 0x8DDF, 0xB76D, 0x8DE0, 0xB76E, 0x8DE1, 0xB76F, 0x8DE2, 0xB770, 0xB6EF, 0xB771, 0xB6F0, 0xB772, 0x8DE3, 0xB773, 0xB6F1, + 0xB774, 0x8DE4, 0xB775, 0xB6F2, 0xB776, 0x8DE5, 0xB777, 0x8DE6, 0xB778, 0x8DE7, 0xB779, 0x8DE8, 0xB77A, 0x8DE9, 0xB77B, 0x8DEA, + 0xB77C, 0xB6F3, 0xB77D, 0xB6F4, 0xB77E, 0x8DEB, 0xB77F, 0x8DEC, 0xB780, 0xB6F5, 0xB781, 0x8DED, 0xB782, 0x8DEE, 0xB783, 0x8DEF, + 0xB784, 0xB6F6, 0xB785, 0x8DF0, 0xB786, 0x8DF1, 0xB787, 0x8DF2, 0xB788, 0x8DF3, 0xB789, 0x8DF4, 0xB78A, 0x8DF5, 0xB78B, 0x8DF6, + 0xB78C, 0xB6F7, 0xB78D, 0xB6F8, 0xB78E, 0x8DF7, 0xB78F, 0xB6F9, 0xB790, 0xB6FA, 0xB791, 0xB6FB, 0xB792, 0xB6FC, 0xB793, 0x8DF8, + 0xB794, 0x8DF9, 0xB795, 0x8DFA, 0xB796, 0xB6FD, 0xB797, 0xB6FE, 0xB798, 0xB7A1, 0xB799, 0xB7A2, 0xB79A, 0x8DFB, 0xB79B, 0x8DFC, + 0xB79C, 0xB7A3, 0xB79D, 0x8DFD, 0xB79E, 0x8DFE, 0xB79F, 0x8E41, 0xB7A0, 0xB7A4, 0xB7A1, 0x8E42, 0xB7A2, 0x8E43, 0xB7A3, 0x8E44, + 0xB7A4, 0x8E45, 0xB7A5, 0x8E46, 0xB7A6, 0x8E47, 0xB7A7, 0x8E48, 0xB7A8, 0xB7A5, 0xB7A9, 0xB7A6, 0xB7AA, 0x8E49, 0xB7AB, 0xB7A7, + 0xB7AC, 0xB7A8, 0xB7AD, 0xB7A9, 0xB7AE, 0x8E4A, 0xB7AF, 0x8E4B, 0xB7B0, 0x8E4C, 0xB7B1, 0x8E4D, 0xB7B2, 0x8E4E, 0xB7B3, 0x8E4F, + 0xB7B4, 0xB7AA, 0xB7B5, 0xB7AB, 0xB7B6, 0x8E50, 0xB7B7, 0x8E51, 0xB7B8, 0xB7AC, 0xB7B9, 0x8E52, 0xB7BA, 0x8E53, 0xB7BB, 0x8E54, + 0xB7BC, 0x8E55, 0xB7BD, 0x8E56, 0xB7BE, 0x8E57, 0xB7BF, 0x8E58, 0xB7C0, 0x8E59, 0xB7C1, 0x8E5A, 0xB7C2, 0x8E61, 0xB7C3, 0x8E62, + 0xB7C4, 0x8E63, 0xB7C5, 0x8E64, 0xB7C6, 0x8E65, 0xB7C7, 0xB7AD, 0xB7C8, 0x8E66, 0xB7C9, 0xB7AE, 0xB7CA, 0x8E67, 0xB7CB, 0x8E68, + 0xB7CC, 0x8E69, 0xB7CD, 0x8E6A, 0xB7CE, 0x8E6B, 0xB7CF, 0x8E6C, 0xB7D0, 0x8E6D, 0xB7D1, 0x8E6E, 0xB7D2, 0x8E6F, 0xB7D3, 0x8E70, + 0xB7D4, 0x8E71, 0xB7D5, 0x8E72, 0xB7D6, 0x8E73, 0xB7D7, 0x8E74, 0xB7D8, 0x8E75, 0xB7D9, 0x8E76, 0xB7DA, 0x8E77, 0xB7DB, 0x8E78, + 0xB7DC, 0x8E79, 0xB7DD, 0x8E7A, 0xB7DE, 0x8E81, 0xB7DF, 0x8E82, 0xB7E0, 0x8E83, 0xB7E1, 0x8E84, 0xB7E2, 0x8E85, 0xB7E3, 0x8E86, + 0xB7E4, 0x8E87, 0xB7E5, 0x8E88, 0xB7E6, 0x8E89, 0xB7E7, 0x8E8A, 0xB7E8, 0x8E8B, 0xB7E9, 0x8E8C, 0xB7EA, 0x8E8D, 0xB7EB, 0x8E8E, + 0xB7EC, 0xB7AF, 0xB7ED, 0xB7B0, 0xB7EE, 0x8E8F, 0xB7EF, 0x8E90, 0xB7F0, 0xB7B1, 0xB7F1, 0x8E91, 0xB7F2, 0x8E92, 0xB7F3, 0x8E93, + 0xB7F4, 0xB7B2, 0xB7F5, 0x8E94, 0xB7F6, 0x8E95, 0xB7F7, 0x8E96, 0xB7F8, 0x8E97, 0xB7F9, 0x8E98, 0xB7FA, 0x8E99, 0xB7FB, 0x8E9A, + 0xB7FC, 0xB7B3, 0xB7FD, 0xB7B4, 0xB7FE, 0x8E9B, 0xB7FF, 0xB7B5, 0xB800, 0xB7B6, 0xB801, 0xB7B7, 0xB802, 0x8E9C, 0xB803, 0x8E9D, + 0xB804, 0x8E9E, 0xB805, 0x8E9F, 0xB806, 0x8EA0, 0xB807, 0xB7B8, 0xB808, 0xB7B9, 0xB809, 0xB7BA, 0xB80A, 0x8EA1, 0xB80B, 0x8EA2, + 0xB80C, 0xB7BB, 0xB80D, 0x8EA3, 0xB80E, 0x8EA4, 0xB80F, 0x8EA5, 0xB810, 0xB7BC, 0xB811, 0x8EA6, 0xB812, 0x8EA7, 0xB813, 0x8EA8, + 0xB814, 0x8EA9, 0xB815, 0x8EAA, 0xB816, 0x8EAB, 0xB817, 0x8EAC, 0xB818, 0xB7BD, 0xB819, 0xB7BE, 0xB81A, 0x8EAD, 0xB81B, 0xB7BF, + 0xB81C, 0x8EAE, 0xB81D, 0xB7C0, 0xB81E, 0x8EAF, 0xB81F, 0x8EB0, 0xB820, 0x8EB1, 0xB821, 0x8EB2, 0xB822, 0x8EB3, 0xB823, 0x8EB4, + 0xB824, 0xB7C1, 0xB825, 0xB7C2, 0xB826, 0x8EB5, 0xB827, 0x8EB6, 0xB828, 0xB7C3, 0xB829, 0x8EB7, 0xB82A, 0x8EB8, 0xB82B, 0x8EB9, + 0xB82C, 0xB7C4, 0xB82D, 0x8EBA, 0xB82E, 0x8EBB, 0xB82F, 0x8EBC, 0xB830, 0x8EBD, 0xB831, 0x8EBE, 0xB832, 0x8EBF, 0xB833, 0x8EC0, + 0xB834, 0xB7C5, 0xB835, 0xB7C6, 0xB836, 0x8EC1, 0xB837, 0xB7C7, 0xB838, 0xB7C8, 0xB839, 0xB7C9, 0xB83A, 0x8EC2, 0xB83B, 0x8EC3, + 0xB83C, 0x8EC4, 0xB83D, 0x8EC5, 0xB83E, 0x8EC6, 0xB83F, 0x8EC7, 0xB840, 0xB7CA, 0xB841, 0x8EC8, 0xB842, 0x8EC9, 0xB843, 0x8ECA, + 0xB844, 0xB7CB, 0xB845, 0x8ECB, 0xB846, 0x8ECC, 0xB847, 0x8ECD, 0xB848, 0x8ECE, 0xB849, 0x8ECF, 0xB84A, 0x8ED0, 0xB84B, 0x8ED1, + 0xB84C, 0x8ED2, 0xB84D, 0x8ED3, 0xB84E, 0x8ED4, 0xB84F, 0x8ED5, 0xB850, 0x8ED6, 0xB851, 0xB7CC, 0xB852, 0x8ED7, 0xB853, 0xB7CD, + 0xB854, 0x8ED8, 0xB855, 0x8ED9, 0xB856, 0x8EDA, 0xB857, 0x8EDB, 0xB858, 0x8EDC, 0xB859, 0x8EDD, 0xB85A, 0x8EDE, 0xB85B, 0x8EDF, + 0xB85C, 0xB7CE, 0xB85D, 0xB7CF, 0xB85E, 0x8EE0, 0xB85F, 0x8EE1, 0xB860, 0xB7D0, 0xB861, 0x8EE2, 0xB862, 0x8EE3, 0xB863, 0x8EE4, + 0xB864, 0xB7D1, 0xB865, 0x8EE5, 0xB866, 0x8EE6, 0xB867, 0x8EE7, 0xB868, 0x8EE8, 0xB869, 0x8EE9, 0xB86A, 0x8EEA, 0xB86B, 0x8EEB, + 0xB86C, 0xB7D2, 0xB86D, 0xB7D3, 0xB86E, 0x8EEC, 0xB86F, 0xB7D4, 0xB870, 0x8EED, 0xB871, 0xB7D5, 0xB872, 0x8EEE, 0xB873, 0x8EEF, + 0xB874, 0x8EF0, 0xB875, 0x8EF1, 0xB876, 0x8EF2, 0xB877, 0x8EF3, 0xB878, 0xB7D6, 0xB879, 0x8EF4, 0xB87A, 0x8EF5, 0xB87B, 0x8EF6, + 0xB87C, 0xB7D7, 0xB87D, 0x8EF7, 0xB87E, 0x8EF8, 0xB87F, 0x8EF9, 0xB880, 0x8EFA, 0xB881, 0x8EFB, 0xB882, 0x8EFC, 0xB883, 0x8EFD, + 0xB884, 0x8EFE, 0xB885, 0x8F41, 0xB886, 0x8F42, 0xB887, 0x8F43, 0xB888, 0x8F44, 0xB889, 0x8F45, 0xB88A, 0x8F46, 0xB88B, 0x8F47, + 0xB88C, 0x8F48, 0xB88D, 0xB7D8, 0xB88E, 0x8F49, 0xB88F, 0x8F4A, 0xB890, 0x8F4B, 0xB891, 0x8F4C, 0xB892, 0x8F4D, 0xB893, 0x8F4E, + 0xB894, 0x8F4F, 0xB895, 0x8F50, 0xB896, 0x8F51, 0xB897, 0x8F52, 0xB898, 0x8F53, 0xB899, 0x8F54, 0xB89A, 0x8F55, 0xB89B, 0x8F56, + 0xB89C, 0x8F57, 0xB89D, 0x8F58, 0xB89E, 0x8F59, 0xB89F, 0x8F5A, 0xB8A0, 0x8F61, 0xB8A1, 0x8F62, 0xB8A2, 0x8F63, 0xB8A3, 0x8F64, + 0xB8A4, 0x8F65, 0xB8A5, 0x8F66, 0xB8A6, 0x8F67, 0xB8A7, 0x8F68, 0xB8A8, 0xB7D9, 0xB8A9, 0x8F69, 0xB8AA, 0x8F6A, 0xB8AB, 0x8F6B, + 0xB8AC, 0x8F6C, 0xB8AD, 0x8F6D, 0xB8AE, 0x8F6E, 0xB8AF, 0x8F6F, 0xB8B0, 0xB7DA, 0xB8B1, 0x8F70, 0xB8B2, 0x8F71, 0xB8B3, 0x8F72, + 0xB8B4, 0xB7DB, 0xB8B5, 0x8F73, 0xB8B6, 0x8F74, 0xB8B7, 0x8F75, 0xB8B8, 0xB7DC, 0xB8B9, 0x8F76, 0xB8BA, 0x8F77, 0xB8BB, 0x8F78, + 0xB8BC, 0x8F79, 0xB8BD, 0x8F7A, 0xB8BE, 0x8F81, 0xB8BF, 0x8F82, 0xB8C0, 0xB7DD, 0xB8C1, 0xB7DE, 0xB8C2, 0x8F83, 0xB8C3, 0xB7DF, + 0xB8C4, 0x8F84, 0xB8C5, 0xB7E0, 0xB8C6, 0x8F85, 0xB8C7, 0x8F86, 0xB8C8, 0x8F87, 0xB8C9, 0x8F88, 0xB8CA, 0x8F89, 0xB8CB, 0x8F8A, + 0xB8CC, 0xB7E1, 0xB8CD, 0x8F8B, 0xB8CE, 0x8F8C, 0xB8CF, 0x8F8D, 0xB8D0, 0xB7E2, 0xB8D1, 0x8F8E, 0xB8D2, 0x8F8F, 0xB8D3, 0x8F90, + 0xB8D4, 0xB7E3, 0xB8D5, 0x8F91, 0xB8D6, 0x8F92, 0xB8D7, 0x8F93, 0xB8D8, 0x8F94, 0xB8D9, 0x8F95, 0xB8DA, 0x8F96, 0xB8DB, 0x8F97, + 0xB8DC, 0x8F98, 0xB8DD, 0xB7E4, 0xB8DE, 0x8F99, 0xB8DF, 0xB7E5, 0xB8E0, 0x8F9A, 0xB8E1, 0xB7E6, 0xB8E2, 0x8F9B, 0xB8E3, 0x8F9C, + 0xB8E4, 0x8F9D, 0xB8E5, 0x8F9E, 0xB8E6, 0x8F9F, 0xB8E7, 0x8FA0, 0xB8E8, 0xB7E7, 0xB8E9, 0xB7E8, 0xB8EA, 0x8FA1, 0xB8EB, 0x8FA2, + 0xB8EC, 0xB7E9, 0xB8ED, 0x8FA3, 0xB8EE, 0x8FA4, 0xB8EF, 0x8FA5, 0xB8F0, 0xB7EA, 0xB8F1, 0x8FA6, 0xB8F2, 0x8FA7, 0xB8F3, 0x8FA8, + 0xB8F4, 0x8FA9, 0xB8F5, 0x8FAA, 0xB8F6, 0x8FAB, 0xB8F7, 0x8FAC, 0xB8F8, 0xB7EB, 0xB8F9, 0xB7EC, 0xB8FA, 0x8FAD, 0xB8FB, 0xB7ED, + 0xB8FC, 0x8FAE, 0xB8FD, 0xB7EE, 0xB8FE, 0x8FAF, 0xB8FF, 0x8FB0, 0xB900, 0x8FB1, 0xB901, 0x8FB2, 0xB902, 0x8FB3, 0xB903, 0x8FB4, + 0xB904, 0xB7EF, 0xB905, 0x8FB5, 0xB906, 0x8FB6, 0xB907, 0x8FB7, 0xB908, 0x8FB8, 0xB909, 0x8FB9, 0xB90A, 0x8FBA, 0xB90B, 0x8FBB, + 0xB90C, 0x8FBC, 0xB90D, 0x8FBD, 0xB90E, 0x8FBE, 0xB90F, 0x8FBF, 0xB910, 0x8FC0, 0xB911, 0x8FC1, 0xB912, 0x8FC2, 0xB913, 0x8FC3, + 0xB914, 0x8FC4, 0xB915, 0x8FC5, 0xB916, 0x8FC6, 0xB917, 0x8FC7, 0xB918, 0xB7F0, 0xB919, 0x8FC8, 0xB91A, 0x8FC9, 0xB91B, 0x8FCA, + 0xB91C, 0x8FCB, 0xB91D, 0x8FCC, 0xB91E, 0x8FCD, 0xB91F, 0x8FCE, 0xB920, 0xB7F1, 0xB921, 0x8FCF, 0xB922, 0x8FD0, 0xB923, 0x8FD1, + 0xB924, 0x8FD2, 0xB925, 0x8FD3, 0xB926, 0x8FD4, 0xB927, 0x8FD5, 0xB928, 0x8FD6, 0xB929, 0x8FD7, 0xB92A, 0x8FD8, 0xB92B, 0x8FD9, + 0xB92C, 0x8FDA, 0xB92D, 0x8FDB, 0xB92E, 0x8FDC, 0xB92F, 0x8FDD, 0xB930, 0x8FDE, 0xB931, 0x8FDF, 0xB932, 0x8FE0, 0xB933, 0x8FE1, + 0xB934, 0x8FE2, 0xB935, 0x8FE3, 0xB936, 0x8FE4, 0xB937, 0x8FE5, 0xB938, 0x8FE6, 0xB939, 0x8FE7, 0xB93A, 0x8FE8, 0xB93B, 0x8FE9, + 0xB93C, 0xB7F2, 0xB93D, 0xB7F3, 0xB93E, 0x8FEA, 0xB93F, 0x8FEB, 0xB940, 0xB7F4, 0xB941, 0x8FEC, 0xB942, 0x8FED, 0xB943, 0x8FEE, + 0xB944, 0xB7F5, 0xB945, 0x8FEF, 0xB946, 0x8FF0, 0xB947, 0x8FF1, 0xB948, 0x8FF2, 0xB949, 0x8FF3, 0xB94A, 0x8FF4, 0xB94B, 0x8FF5, + 0xB94C, 0xB7F6, 0xB94D, 0x8FF6, 0xB94E, 0x8FF7, 0xB94F, 0xB7F7, 0xB950, 0x8FF8, 0xB951, 0xB7F8, 0xB952, 0x8FF9, 0xB953, 0x8FFA, + 0xB954, 0x8FFB, 0xB955, 0x8FFC, 0xB956, 0x8FFD, 0xB957, 0x8FFE, 0xB958, 0xB7F9, 0xB959, 0xB7FA, 0xB95A, 0x9041, 0xB95B, 0x9042, + 0xB95C, 0xB7FB, 0xB95D, 0x9043, 0xB95E, 0x9044, 0xB95F, 0x9045, 0xB960, 0xB7FC, 0xB961, 0x9046, 0xB962, 0x9047, 0xB963, 0x9048, + 0xB964, 0x9049, 0xB965, 0x904A, 0xB966, 0x904B, 0xB967, 0x904C, 0xB968, 0xB7FD, 0xB969, 0xB7FE, 0xB96A, 0x904D, 0xB96B, 0xB8A1, + 0xB96C, 0x904E, 0xB96D, 0xB8A2, 0xB96E, 0x904F, 0xB96F, 0x9050, 0xB970, 0x9051, 0xB971, 0x9052, 0xB972, 0x9053, 0xB973, 0x9054, + 0xB974, 0xB8A3, 0xB975, 0xB8A4, 0xB976, 0x9055, 0xB977, 0x9056, 0xB978, 0xB8A5, 0xB979, 0x9057, 0xB97A, 0x9058, 0xB97B, 0x9059, + 0xB97C, 0xB8A6, 0xB97D, 0x905A, 0xB97E, 0x9061, 0xB97F, 0x9062, 0xB980, 0x9063, 0xB981, 0x9064, 0xB982, 0x9065, 0xB983, 0x9066, + 0xB984, 0xB8A7, 0xB985, 0xB8A8, 0xB986, 0x9067, 0xB987, 0xB8A9, 0xB988, 0x9068, 0xB989, 0xB8AA, 0xB98A, 0xB8AB, 0xB98B, 0x9069, + 0xB98C, 0x906A, 0xB98D, 0xB8AC, 0xB98E, 0xB8AD, 0xB98F, 0x906B, 0xB990, 0x906C, 0xB991, 0x906D, 0xB992, 0x906E, 0xB993, 0x906F, + 0xB994, 0x9070, 0xB995, 0x9071, 0xB996, 0x9072, 0xB997, 0x9073, 0xB998, 0x9074, 0xB999, 0x9075, 0xB99A, 0x9076, 0xB99B, 0x9077, + 0xB99C, 0x9078, 0xB99D, 0x9079, 0xB99E, 0x907A, 0xB99F, 0x9081, 0xB9A0, 0x9082, 0xB9A1, 0x9083, 0xB9A2, 0x9084, 0xB9A3, 0x9085, + 0xB9A4, 0x9086, 0xB9A5, 0x9087, 0xB9A6, 0x9088, 0xB9A7, 0x9089, 0xB9A8, 0x908A, 0xB9A9, 0x908B, 0xB9AA, 0x908C, 0xB9AB, 0x908D, + 0xB9AC, 0xB8AE, 0xB9AD, 0xB8AF, 0xB9AE, 0x908E, 0xB9AF, 0x908F, 0xB9B0, 0xB8B0, 0xB9B1, 0x9090, 0xB9B2, 0x9091, 0xB9B3, 0x9092, + 0xB9B4, 0xB8B1, 0xB9B5, 0x9093, 0xB9B6, 0x9094, 0xB9B7, 0x9095, 0xB9B8, 0x9096, 0xB9B9, 0x9097, 0xB9BA, 0x9098, 0xB9BB, 0x9099, + 0xB9BC, 0xB8B2, 0xB9BD, 0xB8B3, 0xB9BE, 0x909A, 0xB9BF, 0xB8B4, 0xB9C0, 0x909B, 0xB9C1, 0xB8B5, 0xB9C2, 0x909C, 0xB9C3, 0x909D, + 0xB9C4, 0x909E, 0xB9C5, 0x909F, 0xB9C6, 0x90A0, 0xB9C7, 0x90A1, 0xB9C8, 0xB8B6, 0xB9C9, 0xB8B7, 0xB9CA, 0x90A2, 0xB9CB, 0x90A3, + 0xB9CC, 0xB8B8, 0xB9CD, 0x90A4, 0xB9CE, 0xB8B9, 0xB9CF, 0xB8BA, 0xB9D0, 0xB8BB, 0xB9D1, 0xB8BC, 0xB9D2, 0xB8BD, 0xB9D3, 0x90A5, + 0xB9D4, 0x90A6, 0xB9D5, 0x90A7, 0xB9D6, 0x90A8, 0xB9D7, 0x90A9, 0xB9D8, 0xB8BE, 0xB9D9, 0xB8BF, 0xB9DA, 0x90AA, 0xB9DB, 0xB8C0, + 0xB9DC, 0x90AB, 0xB9DD, 0xB8C1, 0xB9DE, 0xB8C2, 0xB9DF, 0x90AC, 0xB9E0, 0x90AD, 0xB9E1, 0xB8C3, 0xB9E2, 0x90AE, 0xB9E3, 0xB8C4, + 0xB9E4, 0xB8C5, 0xB9E5, 0xB8C6, 0xB9E6, 0x90AF, 0xB9E7, 0x90B0, 0xB9E8, 0xB8C7, 0xB9E9, 0x90B1, 0xB9EA, 0x90B2, 0xB9EB, 0x90B3, + 0xB9EC, 0xB8C8, 0xB9ED, 0x90B4, 0xB9EE, 0x90B5, 0xB9EF, 0x90B6, 0xB9F0, 0x90B7, 0xB9F1, 0x90B8, 0xB9F2, 0x90B9, 0xB9F3, 0x90BA, + 0xB9F4, 0xB8C9, 0xB9F5, 0xB8CA, 0xB9F6, 0x90BB, 0xB9F7, 0xB8CB, 0xB9F8, 0xB8CC, 0xB9F9, 0xB8CD, 0xB9FA, 0xB8CE, 0xB9FB, 0x90BC, + 0xB9FC, 0x90BD, 0xB9FD, 0x90BE, 0xB9FE, 0x90BF, 0xB9FF, 0x90C0, 0xBA00, 0xB8CF, 0xBA01, 0xB8D0, 0xBA02, 0x90C1, 0xBA03, 0x90C2, + 0xBA04, 0x90C3, 0xBA05, 0x90C4, 0xBA06, 0x90C5, 0xBA07, 0x90C6, 0xBA08, 0xB8D1, 0xBA09, 0x90C7, 0xBA0A, 0x90C8, 0xBA0B, 0x90C9, + 0xBA0C, 0x90CA, 0xBA0D, 0x90CB, 0xBA0E, 0x90CC, 0xBA0F, 0x90CD, 0xBA10, 0x90CE, 0xBA11, 0x90CF, 0xBA12, 0x90D0, 0xBA13, 0x90D1, + 0xBA14, 0x90D2, 0xBA15, 0xB8D2, 0xBA16, 0x90D3, 0xBA17, 0x90D4, 0xBA18, 0x90D5, 0xBA19, 0x90D6, 0xBA1A, 0x90D7, 0xBA1B, 0x90D8, + 0xBA1C, 0x90D9, 0xBA1D, 0x90DA, 0xBA1E, 0x90DB, 0xBA1F, 0x90DC, 0xBA20, 0x90DD, 0xBA21, 0x90DE, 0xBA22, 0x90DF, 0xBA23, 0x90E0, + 0xBA24, 0x90E1, 0xBA25, 0x90E2, 0xBA26, 0x90E3, 0xBA27, 0x90E4, 0xBA28, 0x90E5, 0xBA29, 0x90E6, 0xBA2A, 0x90E7, 0xBA2B, 0x90E8, + 0xBA2C, 0x90E9, 0xBA2D, 0x90EA, 0xBA2E, 0x90EB, 0xBA2F, 0x90EC, 0xBA30, 0x90ED, 0xBA31, 0x90EE, 0xBA32, 0x90EF, 0xBA33, 0x90F0, + 0xBA34, 0x90F1, 0xBA35, 0x90F2, 0xBA36, 0x90F3, 0xBA37, 0x90F4, 0xBA38, 0xB8D3, 0xBA39, 0xB8D4, 0xBA3A, 0x90F5, 0xBA3B, 0x90F6, + 0xBA3C, 0xB8D5, 0xBA3D, 0x90F7, 0xBA3E, 0x90F8, 0xBA3F, 0x90F9, 0xBA40, 0xB8D6, 0xBA41, 0x90FA, 0xBA42, 0xB8D7, 0xBA43, 0x90FB, + 0xBA44, 0x90FC, 0xBA45, 0x90FD, 0xBA46, 0x90FE, 0xBA47, 0x9141, 0xBA48, 0xB8D8, 0xBA49, 0xB8D9, 0xBA4A, 0x9142, 0xBA4B, 0xB8DA, + 0xBA4C, 0x9143, 0xBA4D, 0xB8DB, 0xBA4E, 0xB8DC, 0xBA4F, 0x9144, 0xBA50, 0x9145, 0xBA51, 0x9146, 0xBA52, 0x9147, 0xBA53, 0xB8DD, + 0xBA54, 0xB8DE, 0xBA55, 0xB8DF, 0xBA56, 0x9148, 0xBA57, 0x9149, 0xBA58, 0xB8E0, 0xBA59, 0x914A, 0xBA5A, 0x914B, 0xBA5B, 0x914C, + 0xBA5C, 0xB8E1, 0xBA5D, 0x914D, 0xBA5E, 0x914E, 0xBA5F, 0x914F, 0xBA60, 0x9150, 0xBA61, 0x9151, 0xBA62, 0x9152, 0xBA63, 0x9153, + 0xBA64, 0xB8E2, 0xBA65, 0xB8E3, 0xBA66, 0x9154, 0xBA67, 0xB8E4, 0xBA68, 0xB8E5, 0xBA69, 0xB8E6, 0xBA6A, 0x9155, 0xBA6B, 0x9156, + 0xBA6C, 0x9157, 0xBA6D, 0x9158, 0xBA6E, 0x9159, 0xBA6F, 0x915A, 0xBA70, 0xB8E7, 0xBA71, 0xB8E8, 0xBA72, 0x9161, 0xBA73, 0x9162, + 0xBA74, 0xB8E9, 0xBA75, 0x9163, 0xBA76, 0x9164, 0xBA77, 0x9165, 0xBA78, 0xB8EA, 0xBA79, 0x9166, 0xBA7A, 0x9167, 0xBA7B, 0x9168, + 0xBA7C, 0x9169, 0xBA7D, 0x916A, 0xBA7E, 0x916B, 0xBA7F, 0x916C, 0xBA80, 0x916D, 0xBA81, 0x916E, 0xBA82, 0x916F, 0xBA83, 0xB8EB, + 0xBA84, 0xB8EC, 0xBA85, 0xB8ED, 0xBA86, 0x9170, 0xBA87, 0xB8EE, 0xBA88, 0x9171, 0xBA89, 0x9172, 0xBA8A, 0x9173, 0xBA8B, 0x9174, + 0xBA8C, 0xB8EF, 0xBA8D, 0x9175, 0xBA8E, 0x9176, 0xBA8F, 0x9177, 0xBA90, 0x9178, 0xBA91, 0x9179, 0xBA92, 0x917A, 0xBA93, 0x9181, + 0xBA94, 0x9182, 0xBA95, 0x9183, 0xBA96, 0x9184, 0xBA97, 0x9185, 0xBA98, 0x9186, 0xBA99, 0x9187, 0xBA9A, 0x9188, 0xBA9B, 0x9189, + 0xBA9C, 0x918A, 0xBA9D, 0x918B, 0xBA9E, 0x918C, 0xBA9F, 0x918D, 0xBAA0, 0x918E, 0xBAA1, 0x918F, 0xBAA2, 0x9190, 0xBAA3, 0x9191, + 0xBAA4, 0x9192, 0xBAA5, 0x9193, 0xBAA6, 0x9194, 0xBAA7, 0x9195, 0xBAA8, 0xB8F0, 0xBAA9, 0xB8F1, 0xBAAA, 0x9196, 0xBAAB, 0xB8F2, + 0xBAAC, 0xB8F3, 0xBAAD, 0x9197, 0xBAAE, 0x9198, 0xBAAF, 0x9199, 0xBAB0, 0xB8F4, 0xBAB1, 0x919A, 0xBAB2, 0xB8F5, 0xBAB3, 0x919B, + 0xBAB4, 0x919C, 0xBAB5, 0x919D, 0xBAB6, 0x919E, 0xBAB7, 0x919F, 0xBAB8, 0xB8F6, 0xBAB9, 0xB8F7, 0xBABA, 0x91A0, 0xBABB, 0xB8F8, + 0xBABC, 0x91A1, 0xBABD, 0xB8F9, 0xBABE, 0x91A2, 0xBABF, 0x91A3, 0xBAC0, 0x91A4, 0xBAC1, 0x91A5, 0xBAC2, 0x91A6, 0xBAC3, 0x91A7, + 0xBAC4, 0xB8FA, 0xBAC5, 0x91A8, 0xBAC6, 0x91A9, 0xBAC7, 0x91AA, 0xBAC8, 0xB8FB, 0xBAC9, 0x91AB, 0xBACA, 0x91AC, 0xBACB, 0x91AD, + 0xBACC, 0x91AE, 0xBACD, 0x91AF, 0xBACE, 0x91B0, 0xBACF, 0x91B1, 0xBAD0, 0x91B2, 0xBAD1, 0x91B3, 0xBAD2, 0x91B4, 0xBAD3, 0x91B5, + 0xBAD4, 0x91B6, 0xBAD5, 0x91B7, 0xBAD6, 0x91B8, 0xBAD7, 0x91B9, 0xBAD8, 0xB8FC, 0xBAD9, 0xB8FD, 0xBADA, 0x91BA, 0xBADB, 0x91BB, + 0xBADC, 0x91BC, 0xBADD, 0x91BD, 0xBADE, 0x91BE, 0xBADF, 0x91BF, 0xBAE0, 0x91C0, 0xBAE1, 0x91C1, 0xBAE2, 0x91C2, 0xBAE3, 0x91C3, + 0xBAE4, 0x91C4, 0xBAE5, 0x91C5, 0xBAE6, 0x91C6, 0xBAE7, 0x91C7, 0xBAE8, 0x91C8, 0xBAE9, 0x91C9, 0xBAEA, 0x91CA, 0xBAEB, 0x91CB, + 0xBAEC, 0x91CC, 0xBAED, 0x91CD, 0xBAEE, 0x91CE, 0xBAEF, 0x91CF, 0xBAF0, 0x91D0, 0xBAF1, 0x91D1, 0xBAF2, 0x91D2, 0xBAF3, 0x91D3, + 0xBAF4, 0x91D4, 0xBAF5, 0x91D5, 0xBAF6, 0x91D6, 0xBAF7, 0x91D7, 0xBAF8, 0x91D8, 0xBAF9, 0x91D9, 0xBAFA, 0x91DA, 0xBAFB, 0x91DB, + 0xBAFC, 0xB8FE, 0xBAFD, 0x91DC, 0xBAFE, 0x91DD, 0xBAFF, 0x91DE, 0xBB00, 0xB9A1, 0xBB01, 0x91DF, 0xBB02, 0x91E0, 0xBB03, 0x91E1, + 0xBB04, 0xB9A2, 0xBB05, 0x91E2, 0xBB06, 0x91E3, 0xBB07, 0x91E4, 0xBB08, 0x91E5, 0xBB09, 0x91E6, 0xBB0A, 0x91E7, 0xBB0B, 0x91E8, + 0xBB0C, 0x91E9, 0xBB0D, 0xB9A3, 0xBB0E, 0x91EA, 0xBB0F, 0xB9A4, 0xBB10, 0x91EB, 0xBB11, 0xB9A5, 0xBB12, 0x91EC, 0xBB13, 0x91ED, + 0xBB14, 0x91EE, 0xBB15, 0x91EF, 0xBB16, 0x91F0, 0xBB17, 0x91F1, 0xBB18, 0xB9A6, 0xBB19, 0x91F2, 0xBB1A, 0x91F3, 0xBB1B, 0x91F4, + 0xBB1C, 0xB9A7, 0xBB1D, 0x91F5, 0xBB1E, 0x91F6, 0xBB1F, 0x91F7, 0xBB20, 0xB9A8, 0xBB21, 0x91F8, 0xBB22, 0x91F9, 0xBB23, 0x91FA, + 0xBB24, 0x91FB, 0xBB25, 0x91FC, 0xBB26, 0x91FD, 0xBB27, 0x91FE, 0xBB28, 0x9241, 0xBB29, 0xB9A9, 0xBB2A, 0x9242, 0xBB2B, 0xB9AA, + 0xBB2C, 0x9243, 0xBB2D, 0x9244, 0xBB2E, 0x9245, 0xBB2F, 0x9246, 0xBB30, 0x9247, 0xBB31, 0x9248, 0xBB32, 0x9249, 0xBB33, 0x924A, + 0xBB34, 0xB9AB, 0xBB35, 0xB9AC, 0xBB36, 0xB9AD, 0xBB37, 0x924B, 0xBB38, 0xB9AE, 0xBB39, 0x924C, 0xBB3A, 0x924D, 0xBB3B, 0xB9AF, + 0xBB3C, 0xB9B0, 0xBB3D, 0xB9B1, 0xBB3E, 0xB9B2, 0xBB3F, 0x924E, 0xBB40, 0x924F, 0xBB41, 0x9250, 0xBB42, 0x9251, 0xBB43, 0x9252, + 0xBB44, 0xB9B3, 0xBB45, 0xB9B4, 0xBB46, 0x9253, 0xBB47, 0xB9B5, 0xBB48, 0x9254, 0xBB49, 0xB9B6, 0xBB4A, 0x9255, 0xBB4B, 0x9256, + 0xBB4C, 0x9257, 0xBB4D, 0xB9B7, 0xBB4E, 0x9258, 0xBB4F, 0xB9B8, 0xBB50, 0xB9B9, 0xBB51, 0x9259, 0xBB52, 0x925A, 0xBB53, 0x9261, + 0xBB54, 0xB9BA, 0xBB55, 0x9262, 0xBB56, 0x9263, 0xBB57, 0x9264, 0xBB58, 0xB9BB, 0xBB59, 0x9265, 0xBB5A, 0x9266, 0xBB5B, 0x9267, + 0xBB5C, 0x9268, 0xBB5D, 0x9269, 0xBB5E, 0x926A, 0xBB5F, 0x926B, 0xBB60, 0x926C, 0xBB61, 0xB9BC, 0xBB62, 0x926D, 0xBB63, 0xB9BD, + 0xBB64, 0x926E, 0xBB65, 0x926F, 0xBB66, 0x9270, 0xBB67, 0x9271, 0xBB68, 0x9272, 0xBB69, 0x9273, 0xBB6A, 0x9274, 0xBB6B, 0x9275, + 0xBB6C, 0xB9BE, 0xBB6D, 0x9276, 0xBB6E, 0x9277, 0xBB6F, 0x9278, 0xBB70, 0x9279, 0xBB71, 0x927A, 0xBB72, 0x9281, 0xBB73, 0x9282, + 0xBB74, 0x9283, 0xBB75, 0x9284, 0xBB76, 0x9285, 0xBB77, 0x9286, 0xBB78, 0x9287, 0xBB79, 0x9288, 0xBB7A, 0x9289, 0xBB7B, 0x928A, + 0xBB7C, 0x928B, 0xBB7D, 0x928C, 0xBB7E, 0x928D, 0xBB7F, 0x928E, 0xBB80, 0x928F, 0xBB81, 0x9290, 0xBB82, 0x9291, 0xBB83, 0x9292, + 0xBB84, 0x9293, 0xBB85, 0x9294, 0xBB86, 0x9295, 0xBB87, 0x9296, 0xBB88, 0xB9BF, 0xBB89, 0x9297, 0xBB8A, 0x9298, 0xBB8B, 0x9299, + 0xBB8C, 0xB9C0, 0xBB8D, 0x929A, 0xBB8E, 0x929B, 0xBB8F, 0x929C, 0xBB90, 0xB9C1, 0xBB91, 0x929D, 0xBB92, 0x929E, 0xBB93, 0x929F, + 0xBB94, 0x92A0, 0xBB95, 0x92A1, 0xBB96, 0x92A2, 0xBB97, 0x92A3, 0xBB98, 0x92A4, 0xBB99, 0x92A5, 0xBB9A, 0x92A6, 0xBB9B, 0x92A7, + 0xBB9C, 0x92A8, 0xBB9D, 0x92A9, 0xBB9E, 0x92AA, 0xBB9F, 0x92AB, 0xBBA0, 0x92AC, 0xBBA1, 0x92AD, 0xBBA2, 0x92AE, 0xBBA3, 0x92AF, + 0xBBA4, 0xB9C2, 0xBBA5, 0x92B0, 0xBBA6, 0x92B1, 0xBBA7, 0x92B2, 0xBBA8, 0xB9C3, 0xBBA9, 0x92B3, 0xBBAA, 0x92B4, 0xBBAB, 0x92B5, + 0xBBAC, 0xB9C4, 0xBBAD, 0x92B6, 0xBBAE, 0x92B7, 0xBBAF, 0x92B8, 0xBBB0, 0x92B9, 0xBBB1, 0x92BA, 0xBBB2, 0x92BB, 0xBBB3, 0x92BC, + 0xBBB4, 0xB9C5, 0xBBB5, 0x92BD, 0xBBB6, 0x92BE, 0xBBB7, 0xB9C6, 0xBBB8, 0x92BF, 0xBBB9, 0x92C0, 0xBBBA, 0x92C1, 0xBBBB, 0x92C2, + 0xBBBC, 0x92C3, 0xBBBD, 0x92C4, 0xBBBE, 0x92C5, 0xBBBF, 0x92C6, 0xBBC0, 0xB9C7, 0xBBC1, 0x92C7, 0xBBC2, 0x92C8, 0xBBC3, 0x92C9, + 0xBBC4, 0xB9C8, 0xBBC5, 0x92CA, 0xBBC6, 0x92CB, 0xBBC7, 0x92CC, 0xBBC8, 0xB9C9, 0xBBC9, 0x92CD, 0xBBCA, 0x92CE, 0xBBCB, 0x92CF, + 0xBBCC, 0x92D0, 0xBBCD, 0x92D1, 0xBBCE, 0x92D2, 0xBBCF, 0x92D3, 0xBBD0, 0xB9CA, 0xBBD1, 0x92D4, 0xBBD2, 0x92D5, 0xBBD3, 0xB9CB, + 0xBBD4, 0x92D6, 0xBBD5, 0x92D7, 0xBBD6, 0x92D8, 0xBBD7, 0x92D9, 0xBBD8, 0x92DA, 0xBBD9, 0x92DB, 0xBBDA, 0x92DC, 0xBBDB, 0x92DD, + 0xBBDC, 0x92DE, 0xBBDD, 0x92DF, 0xBBDE, 0x92E0, 0xBBDF, 0x92E1, 0xBBE0, 0x92E2, 0xBBE1, 0x92E3, 0xBBE2, 0x92E4, 0xBBE3, 0x92E5, + 0xBBE4, 0x92E6, 0xBBE5, 0x92E7, 0xBBE6, 0x92E8, 0xBBE7, 0x92E9, 0xBBE8, 0x92EA, 0xBBE9, 0x92EB, 0xBBEA, 0x92EC, 0xBBEB, 0x92ED, + 0xBBEC, 0x92EE, 0xBBED, 0x92EF, 0xBBEE, 0x92F0, 0xBBEF, 0x92F1, 0xBBF0, 0x92F2, 0xBBF1, 0x92F3, 0xBBF2, 0x92F4, 0xBBF3, 0x92F5, + 0xBBF4, 0x92F6, 0xBBF5, 0x92F7, 0xBBF6, 0x92F8, 0xBBF7, 0x92F9, 0xBBF8, 0xB9CC, 0xBBF9, 0xB9CD, 0xBBFA, 0x92FA, 0xBBFB, 0x92FB, + 0xBBFC, 0xB9CE, 0xBBFD, 0x92FC, 0xBBFE, 0x92FD, 0xBBFF, 0xB9CF, 0xBC00, 0xB9D0, 0xBC01, 0x92FE, 0xBC02, 0xB9D1, 0xBC03, 0x9341, + 0xBC04, 0x9342, 0xBC05, 0x9343, 0xBC06, 0x9344, 0xBC07, 0x9345, 0xBC08, 0xB9D2, 0xBC09, 0xB9D3, 0xBC0A, 0x9346, 0xBC0B, 0xB9D4, + 0xBC0C, 0xB9D5, 0xBC0D, 0xB9D6, 0xBC0E, 0x9347, 0xBC0F, 0xB9D7, 0xBC10, 0x9348, 0xBC11, 0xB9D8, 0xBC12, 0x9349, 0xBC13, 0x934A, + 0xBC14, 0xB9D9, 0xBC15, 0xB9DA, 0xBC16, 0xB9DB, 0xBC17, 0xB9DC, 0xBC18, 0xB9DD, 0xBC19, 0x934B, 0xBC1A, 0x934C, 0xBC1B, 0xB9DE, + 0xBC1C, 0xB9DF, 0xBC1D, 0xB9E0, 0xBC1E, 0xB9E1, 0xBC1F, 0xB9E2, 0xBC20, 0x934D, 0xBC21, 0x934E, 0xBC22, 0x934F, 0xBC23, 0x9350, + 0xBC24, 0xB9E3, 0xBC25, 0xB9E4, 0xBC26, 0x9351, 0xBC27, 0xB9E5, 0xBC28, 0x9352, 0xBC29, 0xB9E6, 0xBC2A, 0x9353, 0xBC2B, 0x9354, + 0xBC2C, 0x9355, 0xBC2D, 0xB9E7, 0xBC2E, 0x9356, 0xBC2F, 0x9357, 0xBC30, 0xB9E8, 0xBC31, 0xB9E9, 0xBC32, 0x9358, 0xBC33, 0x9359, + 0xBC34, 0xB9EA, 0xBC35, 0x935A, 0xBC36, 0x9361, 0xBC37, 0x9362, 0xBC38, 0xB9EB, 0xBC39, 0x9363, 0xBC3A, 0x9364, 0xBC3B, 0x9365, + 0xBC3C, 0x9366, 0xBC3D, 0x9367, 0xBC3E, 0x9368, 0xBC3F, 0x9369, 0xBC40, 0xB9EC, 0xBC41, 0xB9ED, 0xBC42, 0x936A, 0xBC43, 0xB9EE, + 0xBC44, 0xB9EF, 0xBC45, 0xB9F0, 0xBC46, 0x936B, 0xBC47, 0x936C, 0xBC48, 0x936D, 0xBC49, 0xB9F1, 0xBC4A, 0x936E, 0xBC4B, 0x936F, + 0xBC4C, 0xB9F2, 0xBC4D, 0xB9F3, 0xBC4E, 0x9370, 0xBC4F, 0x9371, 0xBC50, 0xB9F4, 0xBC51, 0x9372, 0xBC52, 0x9373, 0xBC53, 0x9374, + 0xBC54, 0x9375, 0xBC55, 0x9376, 0xBC56, 0x9377, 0xBC57, 0x9378, 0xBC58, 0x9379, 0xBC59, 0x937A, 0xBC5A, 0x9381, 0xBC5B, 0x9382, + 0xBC5C, 0x9383, 0xBC5D, 0xB9F5, 0xBC5E, 0x9384, 0xBC5F, 0x9385, 0xBC60, 0x9386, 0xBC61, 0x9387, 0xBC62, 0x9388, 0xBC63, 0x9389, + 0xBC64, 0x938A, 0xBC65, 0x938B, 0xBC66, 0x938C, 0xBC67, 0x938D, 0xBC68, 0x938E, 0xBC69, 0x938F, 0xBC6A, 0x9390, 0xBC6B, 0x9391, + 0xBC6C, 0x9392, 0xBC6D, 0x9393, 0xBC6E, 0x9394, 0xBC6F, 0x9395, 0xBC70, 0x9396, 0xBC71, 0x9397, 0xBC72, 0x9398, 0xBC73, 0x9399, + 0xBC74, 0x939A, 0xBC75, 0x939B, 0xBC76, 0x939C, 0xBC77, 0x939D, 0xBC78, 0x939E, 0xBC79, 0x939F, 0xBC7A, 0x93A0, 0xBC7B, 0x93A1, + 0xBC7C, 0x93A2, 0xBC7D, 0x93A3, 0xBC7E, 0x93A4, 0xBC7F, 0x93A5, 0xBC80, 0x93A6, 0xBC81, 0x93A7, 0xBC82, 0x93A8, 0xBC83, 0x93A9, + 0xBC84, 0xB9F6, 0xBC85, 0xB9F7, 0xBC86, 0x93AA, 0xBC87, 0x93AB, 0xBC88, 0xB9F8, 0xBC89, 0x93AC, 0xBC8A, 0x93AD, 0xBC8B, 0xB9F9, + 0xBC8C, 0xB9FA, 0xBC8D, 0x93AE, 0xBC8E, 0xB9FB, 0xBC8F, 0x93AF, 0xBC90, 0x93B0, 0xBC91, 0x93B1, 0xBC92, 0x93B2, 0xBC93, 0x93B3, + 0xBC94, 0xB9FC, 0xBC95, 0xB9FD, 0xBC96, 0x93B4, 0xBC97, 0xB9FE, 0xBC98, 0x93B5, 0xBC99, 0xBAA1, 0xBC9A, 0xBAA2, 0xBC9B, 0x93B6, + 0xBC9C, 0x93B7, 0xBC9D, 0x93B8, 0xBC9E, 0x93B9, 0xBC9F, 0x93BA, 0xBCA0, 0xBAA3, 0xBCA1, 0xBAA4, 0xBCA2, 0x93BB, 0xBCA3, 0x93BC, + 0xBCA4, 0xBAA5, 0xBCA5, 0x93BD, 0xBCA6, 0x93BE, 0xBCA7, 0xBAA6, 0xBCA8, 0xBAA7, 0xBCA9, 0x93BF, 0xBCAA, 0x93C0, 0xBCAB, 0x93C1, + 0xBCAC, 0x93C2, 0xBCAD, 0x93C3, 0xBCAE, 0x93C4, 0xBCAF, 0x93C5, 0xBCB0, 0xBAA8, 0xBCB1, 0xBAA9, 0xBCB2, 0x93C6, 0xBCB3, 0xBAAA, + 0xBCB4, 0xBAAB, 0xBCB5, 0xBAAC, 0xBCB6, 0x93C7, 0xBCB7, 0x93C8, 0xBCB8, 0x93C9, 0xBCB9, 0x93CA, 0xBCBA, 0x93CB, 0xBCBB, 0x93CC, + 0xBCBC, 0xBAAD, 0xBCBD, 0xBAAE, 0xBCBE, 0x93CD, 0xBCBF, 0x93CE, 0xBCC0, 0xBAAF, 0xBCC1, 0x93CF, 0xBCC2, 0x93D0, 0xBCC3, 0x93D1, + 0xBCC4, 0xBAB0, 0xBCC5, 0x93D2, 0xBCC6, 0x93D3, 0xBCC7, 0x93D4, 0xBCC8, 0x93D5, 0xBCC9, 0x93D6, 0xBCCA, 0x93D7, 0xBCCB, 0x93D8, + 0xBCCC, 0x93D9, 0xBCCD, 0xBAB1, 0xBCCE, 0x93DA, 0xBCCF, 0xBAB2, 0xBCD0, 0xBAB3, 0xBCD1, 0xBAB4, 0xBCD2, 0x93DB, 0xBCD3, 0x93DC, + 0xBCD4, 0x93DD, 0xBCD5, 0xBAB5, 0xBCD6, 0x93DE, 0xBCD7, 0x93DF, 0xBCD8, 0xBAB6, 0xBCD9, 0x93E0, 0xBCDA, 0x93E1, 0xBCDB, 0x93E2, + 0xBCDC, 0xBAB7, 0xBCDD, 0x93E3, 0xBCDE, 0x93E4, 0xBCDF, 0x93E5, 0xBCE0, 0x93E6, 0xBCE1, 0x93E7, 0xBCE2, 0x93E8, 0xBCE3, 0x93E9, + 0xBCE4, 0x93EA, 0xBCE5, 0x93EB, 0xBCE6, 0x93EC, 0xBCE7, 0x93ED, 0xBCE8, 0x93EE, 0xBCE9, 0x93EF, 0xBCEA, 0x93F0, 0xBCEB, 0x93F1, + 0xBCEC, 0x93F2, 0xBCED, 0x93F3, 0xBCEE, 0x93F4, 0xBCEF, 0x93F5, 0xBCF0, 0x93F6, 0xBCF1, 0x93F7, 0xBCF2, 0x93F8, 0xBCF3, 0x93F9, + 0xBCF4, 0xBAB8, 0xBCF5, 0xBAB9, 0xBCF6, 0xBABA, 0xBCF7, 0x93FA, 0xBCF8, 0xBABB, 0xBCF9, 0x93FB, 0xBCFA, 0x93FC, 0xBCFB, 0x93FD, + 0xBCFC, 0xBABC, 0xBCFD, 0x93FE, 0xBCFE, 0x9441, 0xBCFF, 0x9442, 0xBD00, 0x9443, 0xBD01, 0x9444, 0xBD02, 0x9445, 0xBD03, 0x9446, + 0xBD04, 0xBABD, 0xBD05, 0xBABE, 0xBD06, 0x9447, 0xBD07, 0xBABF, 0xBD08, 0x9448, 0xBD09, 0xBAC0, 0xBD0A, 0x9449, 0xBD0B, 0x944A, + 0xBD0C, 0x944B, 0xBD0D, 0x944C, 0xBD0E, 0x944D, 0xBD0F, 0x944E, 0xBD10, 0xBAC1, 0xBD11, 0x944F, 0xBD12, 0x9450, 0xBD13, 0x9451, + 0xBD14, 0xBAC2, 0xBD15, 0x9452, 0xBD16, 0x9453, 0xBD17, 0x9454, 0xBD18, 0x9455, 0xBD19, 0x9456, 0xBD1A, 0x9457, 0xBD1B, 0x9458, + 0xBD1C, 0x9459, 0xBD1D, 0x945A, 0xBD1E, 0x9461, 0xBD1F, 0x9462, 0xBD20, 0x9463, 0xBD21, 0x9464, 0xBD22, 0x9465, 0xBD23, 0x9466, + 0xBD24, 0xBAC3, 0xBD25, 0x9467, 0xBD26, 0x9468, 0xBD27, 0x9469, 0xBD28, 0x946A, 0xBD29, 0x946B, 0xBD2A, 0x946C, 0xBD2B, 0x946D, + 0xBD2C, 0xBAC4, 0xBD2D, 0x946E, 0xBD2E, 0x946F, 0xBD2F, 0x9470, 0xBD30, 0x9471, 0xBD31, 0x9472, 0xBD32, 0x9473, 0xBD33, 0x9474, + 0xBD34, 0x9475, 0xBD35, 0x9476, 0xBD36, 0x9477, 0xBD37, 0x9478, 0xBD38, 0x9479, 0xBD39, 0x947A, 0xBD3A, 0x9481, 0xBD3B, 0x9482, + 0xBD3C, 0x9483, 0xBD3D, 0x9484, 0xBD3E, 0x9485, 0xBD3F, 0x9486, 0xBD40, 0xBAC5, 0xBD41, 0x9487, 0xBD42, 0x9488, 0xBD43, 0x9489, + 0xBD44, 0x948A, 0xBD45, 0x948B, 0xBD46, 0x948C, 0xBD47, 0x948D, 0xBD48, 0xBAC6, 0xBD49, 0xBAC7, 0xBD4A, 0x948E, 0xBD4B, 0x948F, + 0xBD4C, 0xBAC8, 0xBD4D, 0x9490, 0xBD4E, 0x9491, 0xBD4F, 0x9492, 0xBD50, 0xBAC9, 0xBD51, 0x9493, 0xBD52, 0x9494, 0xBD53, 0x9495, + 0xBD54, 0x9496, 0xBD55, 0x9497, 0xBD56, 0x9498, 0xBD57, 0x9499, 0xBD58, 0xBACA, 0xBD59, 0xBACB, 0xBD5A, 0x949A, 0xBD5B, 0x949B, + 0xBD5C, 0x949C, 0xBD5D, 0x949D, 0xBD5E, 0x949E, 0xBD5F, 0x949F, 0xBD60, 0x94A0, 0xBD61, 0x94A1, 0xBD62, 0x94A2, 0xBD63, 0x94A3, + 0xBD64, 0xBACC, 0xBD65, 0x94A4, 0xBD66, 0x94A5, 0xBD67, 0x94A6, 0xBD68, 0xBACD, 0xBD69, 0x94A7, 0xBD6A, 0x94A8, 0xBD6B, 0x94A9, + 0xBD6C, 0x94AA, 0xBD6D, 0x94AB, 0xBD6E, 0x94AC, 0xBD6F, 0x94AD, 0xBD70, 0x94AE, 0xBD71, 0x94AF, 0xBD72, 0x94B0, 0xBD73, 0x94B1, + 0xBD74, 0x94B2, 0xBD75, 0x94B3, 0xBD76, 0x94B4, 0xBD77, 0x94B5, 0xBD78, 0x94B6, 0xBD79, 0x94B7, 0xBD7A, 0x94B8, 0xBD7B, 0x94B9, + 0xBD7C, 0x94BA, 0xBD7D, 0x94BB, 0xBD7E, 0x94BC, 0xBD7F, 0x94BD, 0xBD80, 0xBACE, 0xBD81, 0xBACF, 0xBD82, 0x94BE, 0xBD83, 0x94BF, + 0xBD84, 0xBAD0, 0xBD85, 0x94C0, 0xBD86, 0x94C1, 0xBD87, 0xBAD1, 0xBD88, 0xBAD2, 0xBD89, 0xBAD3, 0xBD8A, 0xBAD4, 0xBD8B, 0x94C2, + 0xBD8C, 0x94C3, 0xBD8D, 0x94C4, 0xBD8E, 0x94C5, 0xBD8F, 0x94C6, 0xBD90, 0xBAD5, 0xBD91, 0xBAD6, 0xBD92, 0x94C7, 0xBD93, 0xBAD7, + 0xBD94, 0x94C8, 0xBD95, 0xBAD8, 0xBD96, 0x94C9, 0xBD97, 0x94CA, 0xBD98, 0x94CB, 0xBD99, 0xBAD9, 0xBD9A, 0xBADA, 0xBD9B, 0x94CC, + 0xBD9C, 0xBADB, 0xBD9D, 0x94CD, 0xBD9E, 0x94CE, 0xBD9F, 0x94CF, 0xBDA0, 0x94D0, 0xBDA1, 0x94D1, 0xBDA2, 0x94D2, 0xBDA3, 0x94D3, + 0xBDA4, 0xBADC, 0xBDA5, 0x94D4, 0xBDA6, 0x94D5, 0xBDA7, 0x94D6, 0xBDA8, 0x94D7, 0xBDA9, 0x94D8, 0xBDAA, 0x94D9, 0xBDAB, 0x94DA, + 0xBDAC, 0x94DB, 0xBDAD, 0x94DC, 0xBDAE, 0x94DD, 0xBDAF, 0x94DE, 0xBDB0, 0xBADD, 0xBDB1, 0x94DF, 0xBDB2, 0x94E0, 0xBDB3, 0x94E1, + 0xBDB4, 0x94E2, 0xBDB5, 0x94E3, 0xBDB6, 0x94E4, 0xBDB7, 0x94E5, 0xBDB8, 0xBADE, 0xBDB9, 0x94E6, 0xBDBA, 0x94E7, 0xBDBB, 0x94E8, + 0xBDBC, 0x94E9, 0xBDBD, 0x94EA, 0xBDBE, 0x94EB, 0xBDBF, 0x94EC, 0xBDC0, 0x94ED, 0xBDC1, 0x94EE, 0xBDC2, 0x94EF, 0xBDC3, 0x94F0, + 0xBDC4, 0x94F1, 0xBDC5, 0x94F2, 0xBDC6, 0x94F3, 0xBDC7, 0x94F4, 0xBDC8, 0x94F5, 0xBDC9, 0x94F6, 0xBDCA, 0x94F7, 0xBDCB, 0x94F8, + 0xBDCC, 0x94F9, 0xBDCD, 0x94FA, 0xBDCE, 0x94FB, 0xBDCF, 0x94FC, 0xBDD0, 0x94FD, 0xBDD1, 0x94FE, 0xBDD2, 0x9541, 0xBDD3, 0x9542, + 0xBDD4, 0xBADF, 0xBDD5, 0xBAE0, 0xBDD6, 0x9543, 0xBDD7, 0x9544, 0xBDD8, 0xBAE1, 0xBDD9, 0x9545, 0xBDDA, 0x9546, 0xBDDB, 0x9547, + 0xBDDC, 0xBAE2, 0xBDDD, 0x9548, 0xBDDE, 0x9549, 0xBDDF, 0x954A, 0xBDE0, 0x954B, 0xBDE1, 0x954C, 0xBDE2, 0x954D, 0xBDE3, 0x954E, + 0xBDE4, 0x954F, 0xBDE5, 0x9550, 0xBDE6, 0x9551, 0xBDE7, 0x9552, 0xBDE8, 0x9553, 0xBDE9, 0xBAE3, 0xBDEA, 0x9554, 0xBDEB, 0x9555, + 0xBDEC, 0x9556, 0xBDED, 0x9557, 0xBDEE, 0x9558, 0xBDEF, 0x9559, 0xBDF0, 0xBAE4, 0xBDF1, 0x955A, 0xBDF2, 0x9561, 0xBDF3, 0x9562, + 0xBDF4, 0xBAE5, 0xBDF5, 0x9563, 0xBDF6, 0x9564, 0xBDF7, 0x9565, 0xBDF8, 0xBAE6, 0xBDF9, 0x9566, 0xBDFA, 0x9567, 0xBDFB, 0x9568, + 0xBDFC, 0x9569, 0xBDFD, 0x956A, 0xBDFE, 0x956B, 0xBDFF, 0x956C, 0xBE00, 0xBAE7, 0xBE01, 0x956D, 0xBE02, 0x956E, 0xBE03, 0xBAE8, + 0xBE04, 0x956F, 0xBE05, 0xBAE9, 0xBE06, 0x9570, 0xBE07, 0x9571, 0xBE08, 0x9572, 0xBE09, 0x9573, 0xBE0A, 0x9574, 0xBE0B, 0x9575, + 0xBE0C, 0xBAEA, 0xBE0D, 0xBAEB, 0xBE0E, 0x9576, 0xBE0F, 0x9577, 0xBE10, 0xBAEC, 0xBE11, 0x9578, 0xBE12, 0x9579, 0xBE13, 0x957A, + 0xBE14, 0xBAED, 0xBE15, 0x9581, 0xBE16, 0x9582, 0xBE17, 0x9583, 0xBE18, 0x9584, 0xBE19, 0x9585, 0xBE1A, 0x9586, 0xBE1B, 0x9587, + 0xBE1C, 0xBAEE, 0xBE1D, 0xBAEF, 0xBE1E, 0x9588, 0xBE1F, 0xBAF0, 0xBE20, 0x9589, 0xBE21, 0x958A, 0xBE22, 0x958B, 0xBE23, 0x958C, + 0xBE24, 0x958D, 0xBE25, 0x958E, 0xBE26, 0x958F, 0xBE27, 0x9590, 0xBE28, 0x9591, 0xBE29, 0x9592, 0xBE2A, 0x9593, 0xBE2B, 0x9594, + 0xBE2C, 0x9595, 0xBE2D, 0x9596, 0xBE2E, 0x9597, 0xBE2F, 0x9598, 0xBE30, 0x9599, 0xBE31, 0x959A, 0xBE32, 0x959B, 0xBE33, 0x959C, + 0xBE34, 0x959D, 0xBE35, 0x959E, 0xBE36, 0x959F, 0xBE37, 0x95A0, 0xBE38, 0x95A1, 0xBE39, 0x95A2, 0xBE3A, 0x95A3, 0xBE3B, 0x95A4, + 0xBE3C, 0x95A5, 0xBE3D, 0x95A6, 0xBE3E, 0x95A7, 0xBE3F, 0x95A8, 0xBE40, 0x95A9, 0xBE41, 0x95AA, 0xBE42, 0x95AB, 0xBE43, 0x95AC, + 0xBE44, 0xBAF1, 0xBE45, 0xBAF2, 0xBE46, 0x95AD, 0xBE47, 0x95AE, 0xBE48, 0xBAF3, 0xBE49, 0x95AF, 0xBE4A, 0x95B0, 0xBE4B, 0x95B1, + 0xBE4C, 0xBAF4, 0xBE4D, 0x95B2, 0xBE4E, 0xBAF5, 0xBE4F, 0x95B3, 0xBE50, 0x95B4, 0xBE51, 0x95B5, 0xBE52, 0x95B6, 0xBE53, 0x95B7, + 0xBE54, 0xBAF6, 0xBE55, 0xBAF7, 0xBE56, 0x95B8, 0xBE57, 0xBAF8, 0xBE58, 0x95B9, 0xBE59, 0xBAF9, 0xBE5A, 0xBAFA, 0xBE5B, 0xBAFB, + 0xBE5C, 0x95BA, 0xBE5D, 0x95BB, 0xBE5E, 0x95BC, 0xBE5F, 0x95BD, 0xBE60, 0xBAFC, 0xBE61, 0xBAFD, 0xBE62, 0x95BE, 0xBE63, 0x95BF, + 0xBE64, 0xBAFE, 0xBE65, 0x95C0, 0xBE66, 0x95C1, 0xBE67, 0x95C2, 0xBE68, 0xBBA1, 0xBE69, 0x95C3, 0xBE6A, 0xBBA2, 0xBE6B, 0x95C4, + 0xBE6C, 0x95C5, 0xBE6D, 0x95C6, 0xBE6E, 0x95C7, 0xBE6F, 0x95C8, 0xBE70, 0xBBA3, 0xBE71, 0xBBA4, 0xBE72, 0x95C9, 0xBE73, 0xBBA5, + 0xBE74, 0xBBA6, 0xBE75, 0xBBA7, 0xBE76, 0x95CA, 0xBE77, 0x95CB, 0xBE78, 0x95CC, 0xBE79, 0x95CD, 0xBE7A, 0x95CE, 0xBE7B, 0xBBA8, + 0xBE7C, 0xBBA9, 0xBE7D, 0xBBAA, 0xBE7E, 0x95CF, 0xBE7F, 0x95D0, 0xBE80, 0xBBAB, 0xBE81, 0x95D1, 0xBE82, 0x95D2, 0xBE83, 0x95D3, + 0xBE84, 0xBBAC, 0xBE85, 0x95D4, 0xBE86, 0x95D5, 0xBE87, 0x95D6, 0xBE88, 0x95D7, 0xBE89, 0x95D8, 0xBE8A, 0x95D9, 0xBE8B, 0x95DA, + 0xBE8C, 0xBBAD, 0xBE8D, 0xBBAE, 0xBE8E, 0x95DB, 0xBE8F, 0xBBAF, 0xBE90, 0xBBB0, 0xBE91, 0xBBB1, 0xBE92, 0x95DC, 0xBE93, 0x95DD, + 0xBE94, 0x95DE, 0xBE95, 0x95DF, 0xBE96, 0x95E0, 0xBE97, 0x95E1, 0xBE98, 0xBBB2, 0xBE99, 0xBBB3, 0xBE9A, 0x95E2, 0xBE9B, 0x95E3, + 0xBE9C, 0x95E4, 0xBE9D, 0x95E5, 0xBE9E, 0x95E6, 0xBE9F, 0x95E7, 0xBEA0, 0x95E8, 0xBEA1, 0x95E9, 0xBEA2, 0x95EA, 0xBEA3, 0x95EB, + 0xBEA4, 0x95EC, 0xBEA5, 0x95ED, 0xBEA6, 0x95EE, 0xBEA7, 0x95EF, 0xBEA8, 0xBBB4, 0xBEA9, 0x95F0, 0xBEAA, 0x95F1, 0xBEAB, 0x95F2, + 0xBEAC, 0x95F3, 0xBEAD, 0x95F4, 0xBEAE, 0x95F5, 0xBEAF, 0x95F6, 0xBEB0, 0x95F7, 0xBEB1, 0x95F8, 0xBEB2, 0x95F9, 0xBEB3, 0x95FA, + 0xBEB4, 0x95FB, 0xBEB5, 0x95FC, 0xBEB6, 0x95FD, 0xBEB7, 0x95FE, 0xBEB8, 0x9641, 0xBEB9, 0x9642, 0xBEBA, 0x9643, 0xBEBB, 0x9644, + 0xBEBC, 0x9645, 0xBEBD, 0x9646, 0xBEBE, 0x9647, 0xBEBF, 0x9648, 0xBEC0, 0x9649, 0xBEC1, 0x964A, 0xBEC2, 0x964B, 0xBEC3, 0x964C, + 0xBEC4, 0x964D, 0xBEC5, 0x964E, 0xBEC6, 0x964F, 0xBEC7, 0x9650, 0xBEC8, 0x9651, 0xBEC9, 0x9652, 0xBECA, 0x9653, 0xBECB, 0x9654, + 0xBECC, 0x9655, 0xBECD, 0x9656, 0xBECE, 0x9657, 0xBECF, 0x9658, 0xBED0, 0xBBB5, 0xBED1, 0xBBB6, 0xBED2, 0x9659, 0xBED3, 0x965A, + 0xBED4, 0xBBB7, 0xBED5, 0x9661, 0xBED6, 0x9662, 0xBED7, 0xBBB8, 0xBED8, 0xBBB9, 0xBED9, 0x9663, 0xBEDA, 0x9664, 0xBEDB, 0x9665, + 0xBEDC, 0x9666, 0xBEDD, 0x9667, 0xBEDE, 0x9668, 0xBEDF, 0x9669, 0xBEE0, 0xBBBA, 0xBEE1, 0x966A, 0xBEE2, 0x966B, 0xBEE3, 0xBBBB, + 0xBEE4, 0xBBBC, 0xBEE5, 0xBBBD, 0xBEE6, 0x966C, 0xBEE7, 0x966D, 0xBEE8, 0x966E, 0xBEE9, 0x966F, 0xBEEA, 0x9670, 0xBEEB, 0x9671, + 0xBEEC, 0xBBBE, 0xBEED, 0x9672, 0xBEEE, 0x9673, 0xBEEF, 0x9674, 0xBEF0, 0x9675, 0xBEF1, 0x9676, 0xBEF2, 0x9677, 0xBEF3, 0x9678, + 0xBEF4, 0x9679, 0xBEF5, 0x967A, 0xBEF6, 0x9681, 0xBEF7, 0x9682, 0xBEF8, 0x9683, 0xBEF9, 0x9684, 0xBEFA, 0x9685, 0xBEFB, 0x9686, + 0xBEFC, 0x9687, 0xBEFD, 0x9688, 0xBEFE, 0x9689, 0xBEFF, 0x968A, 0xBF00, 0x968B, 0xBF01, 0xBBBF, 0xBF02, 0x968C, 0xBF03, 0x968D, + 0xBF04, 0x968E, 0xBF05, 0x968F, 0xBF06, 0x9690, 0xBF07, 0x9691, 0xBF08, 0xBBC0, 0xBF09, 0xBBC1, 0xBF0A, 0x9692, 0xBF0B, 0x9693, + 0xBF0C, 0x9694, 0xBF0D, 0x9695, 0xBF0E, 0x9696, 0xBF0F, 0x9697, 0xBF10, 0x9698, 0xBF11, 0x9699, 0xBF12, 0x969A, 0xBF13, 0x969B, + 0xBF14, 0x969C, 0xBF15, 0x969D, 0xBF16, 0x969E, 0xBF17, 0x969F, 0xBF18, 0xBBC2, 0xBF19, 0xBBC3, 0xBF1A, 0x96A0, 0xBF1B, 0xBBC4, + 0xBF1C, 0xBBC5, 0xBF1D, 0xBBC6, 0xBF1E, 0x96A1, 0xBF1F, 0x96A2, 0xBF20, 0x96A3, 0xBF21, 0x96A4, 0xBF22, 0x96A5, 0xBF23, 0x96A6, + 0xBF24, 0x96A7, 0xBF25, 0x96A8, 0xBF26, 0x96A9, 0xBF27, 0x96AA, 0xBF28, 0x96AB, 0xBF29, 0x96AC, 0xBF2A, 0x96AD, 0xBF2B, 0x96AE, + 0xBF2C, 0x96AF, 0xBF2D, 0x96B0, 0xBF2E, 0x96B1, 0xBF2F, 0x96B2, 0xBF30, 0x96B3, 0xBF31, 0x96B4, 0xBF32, 0x96B5, 0xBF33, 0x96B6, + 0xBF34, 0x96B7, 0xBF35, 0x96B8, 0xBF36, 0x96B9, 0xBF37, 0x96BA, 0xBF38, 0x96BB, 0xBF39, 0x96BC, 0xBF3A, 0x96BD, 0xBF3B, 0x96BE, + 0xBF3C, 0x96BF, 0xBF3D, 0x96C0, 0xBF3E, 0x96C1, 0xBF3F, 0x96C2, 0xBF40, 0xBBC7, 0xBF41, 0xBBC8, 0xBF42, 0x96C3, 0xBF43, 0x96C4, + 0xBF44, 0xBBC9, 0xBF45, 0x96C5, 0xBF46, 0x96C6, 0xBF47, 0x96C7, 0xBF48, 0xBBCA, 0xBF49, 0x96C8, 0xBF4A, 0x96C9, 0xBF4B, 0x96CA, + 0xBF4C, 0x96CB, 0xBF4D, 0x96CC, 0xBF4E, 0x96CD, 0xBF4F, 0x96CE, 0xBF50, 0xBBCB, 0xBF51, 0xBBCC, 0xBF52, 0x96CF, 0xBF53, 0x96D0, + 0xBF54, 0x96D1, 0xBF55, 0xBBCD, 0xBF56, 0x96D2, 0xBF57, 0x96D3, 0xBF58, 0x96D4, 0xBF59, 0x96D5, 0xBF5A, 0x96D6, 0xBF5B, 0x96D7, + 0xBF5C, 0x96D8, 0xBF5D, 0x96D9, 0xBF5E, 0x96DA, 0xBF5F, 0x96DB, 0xBF60, 0x96DC, 0xBF61, 0x96DD, 0xBF62, 0x96DE, 0xBF63, 0x96DF, + 0xBF64, 0x96E0, 0xBF65, 0x96E1, 0xBF66, 0x96E2, 0xBF67, 0x96E3, 0xBF68, 0x96E4, 0xBF69, 0x96E5, 0xBF6A, 0x96E6, 0xBF6B, 0x96E7, + 0xBF6C, 0x96E8, 0xBF6D, 0x96E9, 0xBF6E, 0x96EA, 0xBF6F, 0x96EB, 0xBF70, 0x96EC, 0xBF71, 0x96ED, 0xBF72, 0x96EE, 0xBF73, 0x96EF, + 0xBF74, 0x96F0, 0xBF75, 0x96F1, 0xBF76, 0x96F2, 0xBF77, 0x96F3, 0xBF78, 0x96F4, 0xBF79, 0x96F5, 0xBF7A, 0x96F6, 0xBF7B, 0x96F7, + 0xBF7C, 0x96F8, 0xBF7D, 0x96F9, 0xBF7E, 0x96FA, 0xBF7F, 0x96FB, 0xBF80, 0x96FC, 0xBF81, 0x96FD, 0xBF82, 0x96FE, 0xBF83, 0x9741, + 0xBF84, 0x9742, 0xBF85, 0x9743, 0xBF86, 0x9744, 0xBF87, 0x9745, 0xBF88, 0x9746, 0xBF89, 0x9747, 0xBF8A, 0x9748, 0xBF8B, 0x9749, + 0xBF8C, 0x974A, 0xBF8D, 0x974B, 0xBF8E, 0x974C, 0xBF8F, 0x974D, 0xBF90, 0x974E, 0xBF91, 0x974F, 0xBF92, 0x9750, 0xBF93, 0x9751, + 0xBF94, 0xBBCE, 0xBF95, 0x9752, 0xBF96, 0x9753, 0xBF97, 0x9754, 0xBF98, 0x9755, 0xBF99, 0x9756, 0xBF9A, 0x9757, 0xBF9B, 0x9758, + 0xBF9C, 0x9759, 0xBF9D, 0x975A, 0xBF9E, 0x9761, 0xBF9F, 0x9762, 0xBFA0, 0x9763, 0xBFA1, 0x9764, 0xBFA2, 0x9765, 0xBFA3, 0x9766, + 0xBFA4, 0x9767, 0xBFA5, 0x9768, 0xBFA6, 0x9769, 0xBFA7, 0x976A, 0xBFA8, 0x976B, 0xBFA9, 0x976C, 0xBFAA, 0x976D, 0xBFAB, 0x976E, + 0xBFAC, 0x976F, 0xBFAD, 0x9770, 0xBFAE, 0x9771, 0xBFAF, 0x9772, 0xBFB0, 0xBBCF, 0xBFB1, 0x9773, 0xBFB2, 0x9774, 0xBFB3, 0x9775, + 0xBFB4, 0x9776, 0xBFB5, 0x9777, 0xBFB6, 0x9778, 0xBFB7, 0x9779, 0xBFB8, 0x977A, 0xBFB9, 0x9781, 0xBFBA, 0x9782, 0xBFBB, 0x9783, + 0xBFBC, 0x9784, 0xBFBD, 0x9785, 0xBFBE, 0x9786, 0xBFBF, 0x9787, 0xBFC0, 0x9788, 0xBFC1, 0x9789, 0xBFC2, 0x978A, 0xBFC3, 0x978B, + 0xBFC4, 0x978C, 0xBFC5, 0xBBD0, 0xBFC6, 0x978D, 0xBFC7, 0x978E, 0xBFC8, 0x978F, 0xBFC9, 0x9790, 0xBFCA, 0x9791, 0xBFCB, 0x9792, + 0xBFCC, 0xBBD1, 0xBFCD, 0xBBD2, 0xBFCE, 0x9793, 0xBFCF, 0x9794, 0xBFD0, 0xBBD3, 0xBFD1, 0x9795, 0xBFD2, 0x9796, 0xBFD3, 0x9797, + 0xBFD4, 0xBBD4, 0xBFD5, 0x9798, 0xBFD6, 0x9799, 0xBFD7, 0x979A, 0xBFD8, 0x979B, 0xBFD9, 0x979C, 0xBFDA, 0x979D, 0xBFDB, 0x979E, + 0xBFDC, 0xBBD5, 0xBFDD, 0x979F, 0xBFDE, 0x97A0, 0xBFDF, 0xBBD6, 0xBFE0, 0x97A1, 0xBFE1, 0xBBD7, 0xBFE2, 0x97A2, 0xBFE3, 0x97A3, + 0xBFE4, 0x97A4, 0xBFE5, 0x97A5, 0xBFE6, 0x97A6, 0xBFE7, 0x97A7, 0xBFE8, 0x97A8, 0xBFE9, 0x97A9, 0xBFEA, 0x97AA, 0xBFEB, 0x97AB, + 0xBFEC, 0x97AC, 0xBFED, 0x97AD, 0xBFEE, 0x97AE, 0xBFEF, 0x97AF, 0xBFF0, 0x97B0, 0xBFF1, 0x97B1, 0xBFF2, 0x97B2, 0xBFF3, 0x97B3, + 0xBFF4, 0x97B4, 0xBFF5, 0x97B5, 0xBFF6, 0x97B6, 0xBFF7, 0x97B7, 0xBFF8, 0x97B8, 0xBFF9, 0x97B9, 0xBFFA, 0x97BA, 0xBFFB, 0x97BB, + 0xBFFC, 0x97BC, 0xBFFD, 0x97BD, 0xBFFE, 0x97BE, 0xBFFF, 0x97BF, 0xC000, 0x97C0, 0xC001, 0x97C1, 0xC002, 0x97C2, 0xC003, 0x97C3, + 0xC004, 0x97C4, 0xC005, 0x97C5, 0xC006, 0x97C6, 0xC007, 0x97C7, 0xC008, 0x97C8, 0xC009, 0x97C9, 0xC00A, 0x97CA, 0xC00B, 0x97CB, + 0xC00C, 0x97CC, 0xC00D, 0x97CD, 0xC00E, 0x97CE, 0xC00F, 0x97CF, 0xC010, 0x97D0, 0xC011, 0x97D1, 0xC012, 0x97D2, 0xC013, 0x97D3, + 0xC014, 0x97D4, 0xC015, 0x97D5, 0xC016, 0x97D6, 0xC017, 0x97D7, 0xC018, 0x97D8, 0xC019, 0x97D9, 0xC01A, 0x97DA, 0xC01B, 0x97DB, + 0xC01C, 0x97DC, 0xC01D, 0x97DD, 0xC01E, 0x97DE, 0xC01F, 0x97DF, 0xC020, 0x97E0, 0xC021, 0x97E1, 0xC022, 0x97E2, 0xC023, 0x97E3, + 0xC024, 0x97E4, 0xC025, 0x97E5, 0xC026, 0x97E6, 0xC027, 0x97E7, 0xC028, 0x97E8, 0xC029, 0x97E9, 0xC02A, 0x97EA, 0xC02B, 0x97EB, + 0xC02C, 0x97EC, 0xC02D, 0x97ED, 0xC02E, 0x97EE, 0xC02F, 0x97EF, 0xC030, 0x97F0, 0xC031, 0x97F1, 0xC032, 0x97F2, 0xC033, 0x97F3, + 0xC034, 0x97F4, 0xC035, 0x97F5, 0xC036, 0x97F6, 0xC037, 0x97F7, 0xC038, 0x97F8, 0xC039, 0x97F9, 0xC03A, 0x97FA, 0xC03B, 0x97FB, + 0xC03C, 0xBBD8, 0xC03D, 0x97FC, 0xC03E, 0x97FD, 0xC03F, 0x97FE, 0xC040, 0x9841, 0xC041, 0x9842, 0xC042, 0x9843, 0xC043, 0x9844, + 0xC044, 0x9845, 0xC045, 0x9846, 0xC046, 0x9847, 0xC047, 0x9848, 0xC048, 0x9849, 0xC049, 0x984A, 0xC04A, 0x984B, 0xC04B, 0x984C, + 0xC04C, 0x984D, 0xC04D, 0x984E, 0xC04E, 0x984F, 0xC04F, 0x9850, 0xC050, 0x9851, 0xC051, 0xBBD9, 0xC052, 0x9852, 0xC053, 0x9853, + 0xC054, 0x9854, 0xC055, 0x9855, 0xC056, 0x9856, 0xC057, 0x9857, 0xC058, 0xBBDA, 0xC059, 0x9858, 0xC05A, 0x9859, 0xC05B, 0x985A, + 0xC05C, 0xBBDB, 0xC05D, 0x9861, 0xC05E, 0x9862, 0xC05F, 0x9863, 0xC060, 0xBBDC, 0xC061, 0x9864, 0xC062, 0x9865, 0xC063, 0x9866, + 0xC064, 0x9867, 0xC065, 0x9868, 0xC066, 0x9869, 0xC067, 0x986A, 0xC068, 0xBBDD, 0xC069, 0xBBDE, 0xC06A, 0x986B, 0xC06B, 0x986C, + 0xC06C, 0x986D, 0xC06D, 0x986E, 0xC06E, 0x986F, 0xC06F, 0x9870, 0xC070, 0x9871, 0xC071, 0x9872, 0xC072, 0x9873, 0xC073, 0x9874, + 0xC074, 0x9875, 0xC075, 0x9876, 0xC076, 0x9877, 0xC077, 0x9878, 0xC078, 0x9879, 0xC079, 0x987A, 0xC07A, 0x9881, 0xC07B, 0x9882, + 0xC07C, 0x9883, 0xC07D, 0x9884, 0xC07E, 0x9885, 0xC07F, 0x9886, 0xC080, 0x9887, 0xC081, 0x9888, 0xC082, 0x9889, 0xC083, 0x988A, + 0xC084, 0x988B, 0xC085, 0x988C, 0xC086, 0x988D, 0xC087, 0x988E, 0xC088, 0x988F, 0xC089, 0x9890, 0xC08A, 0x9891, 0xC08B, 0x9892, + 0xC08C, 0x9893, 0xC08D, 0x9894, 0xC08E, 0x9895, 0xC08F, 0x9896, 0xC090, 0xBBDF, 0xC091, 0xBBE0, 0xC092, 0x9897, 0xC093, 0x9898, + 0xC094, 0xBBE1, 0xC095, 0x9899, 0xC096, 0x989A, 0xC097, 0x989B, 0xC098, 0xBBE2, 0xC099, 0x989C, 0xC09A, 0x989D, 0xC09B, 0x989E, + 0xC09C, 0x989F, 0xC09D, 0x98A0, 0xC09E, 0x98A1, 0xC09F, 0x98A2, 0xC0A0, 0xBBE3, 0xC0A1, 0xBBE4, 0xC0A2, 0x98A3, 0xC0A3, 0xBBE5, + 0xC0A4, 0x98A4, 0xC0A5, 0xBBE6, 0xC0A6, 0x98A5, 0xC0A7, 0x98A6, 0xC0A8, 0x98A7, 0xC0A9, 0x98A8, 0xC0AA, 0x98A9, 0xC0AB, 0x98AA, + 0xC0AC, 0xBBE7, 0xC0AD, 0xBBE8, 0xC0AE, 0x98AB, 0xC0AF, 0xBBE9, 0xC0B0, 0xBBEA, 0xC0B1, 0x98AC, 0xC0B2, 0x98AD, 0xC0B3, 0xBBEB, + 0xC0B4, 0xBBEC, 0xC0B5, 0xBBED, 0xC0B6, 0xBBEE, 0xC0B7, 0x98AE, 0xC0B8, 0x98AF, 0xC0B9, 0x98B0, 0xC0BA, 0x98B1, 0xC0BB, 0x98B2, + 0xC0BC, 0xBBEF, 0xC0BD, 0xBBF0, 0xC0BE, 0x98B3, 0xC0BF, 0xBBF1, 0xC0C0, 0xBBF2, 0xC0C1, 0xBBF3, 0xC0C2, 0x98B4, 0xC0C3, 0x98B5, + 0xC0C4, 0x98B6, 0xC0C5, 0xBBF4, 0xC0C6, 0x98B7, 0xC0C7, 0x98B8, 0xC0C8, 0xBBF5, 0xC0C9, 0xBBF6, 0xC0CA, 0x98B9, 0xC0CB, 0x98BA, + 0xC0CC, 0xBBF7, 0xC0CD, 0x98BB, 0xC0CE, 0x98BC, 0xC0CF, 0x98BD, 0xC0D0, 0xBBF8, 0xC0D1, 0x98BE, 0xC0D2, 0x98BF, 0xC0D3, 0x98C0, + 0xC0D4, 0x98C1, 0xC0D5, 0x98C2, 0xC0D6, 0x98C3, 0xC0D7, 0x98C4, 0xC0D8, 0xBBF9, 0xC0D9, 0xBBFA, 0xC0DA, 0x98C5, 0xC0DB, 0xBBFB, + 0xC0DC, 0xBBFC, 0xC0DD, 0xBBFD, 0xC0DE, 0x98C6, 0xC0DF, 0x98C7, 0xC0E0, 0x98C8, 0xC0E1, 0x98C9, 0xC0E2, 0x98CA, 0xC0E3, 0x98CB, + 0xC0E4, 0xBBFE, 0xC0E5, 0xBCA1, 0xC0E6, 0x98CC, 0xC0E7, 0x98CD, 0xC0E8, 0xBCA2, 0xC0E9, 0x98CE, 0xC0EA, 0x98CF, 0xC0EB, 0x98D0, + 0xC0EC, 0xBCA3, 0xC0ED, 0x98D1, 0xC0EE, 0x98D2, 0xC0EF, 0x98D3, 0xC0F0, 0x98D4, 0xC0F1, 0x98D5, 0xC0F2, 0x98D6, 0xC0F3, 0x98D7, + 0xC0F4, 0xBCA4, 0xC0F5, 0xBCA5, 0xC0F6, 0x98D8, 0xC0F7, 0xBCA6, 0xC0F8, 0x98D9, 0xC0F9, 0xBCA7, 0xC0FA, 0x98DA, 0xC0FB, 0x98DB, + 0xC0FC, 0x98DC, 0xC0FD, 0x98DD, 0xC0FE, 0x98DE, 0xC0FF, 0x98DF, 0xC100, 0xBCA8, 0xC101, 0x98E0, 0xC102, 0x98E1, 0xC103, 0x98E2, + 0xC104, 0xBCA9, 0xC105, 0x98E3, 0xC106, 0x98E4, 0xC107, 0x98E5, 0xC108, 0xBCAA, 0xC109, 0x98E6, 0xC10A, 0x98E7, 0xC10B, 0x98E8, + 0xC10C, 0x98E9, 0xC10D, 0x98EA, 0xC10E, 0x98EB, 0xC10F, 0x98EC, 0xC110, 0xBCAB, 0xC111, 0x98ED, 0xC112, 0x98EE, 0xC113, 0x98EF, + 0xC114, 0x98F0, 0xC115, 0xBCAC, 0xC116, 0x98F1, 0xC117, 0x98F2, 0xC118, 0x98F3, 0xC119, 0x98F4, 0xC11A, 0x98F5, 0xC11B, 0x98F6, + 0xC11C, 0xBCAD, 0xC11D, 0xBCAE, 0xC11E, 0xBCAF, 0xC11F, 0xBCB0, 0xC120, 0xBCB1, 0xC121, 0x98F7, 0xC122, 0x98F8, 0xC123, 0xBCB2, + 0xC124, 0xBCB3, 0xC125, 0x98F9, 0xC126, 0xBCB4, 0xC127, 0xBCB5, 0xC128, 0x98FA, 0xC129, 0x98FB, 0xC12A, 0x98FC, 0xC12B, 0x98FD, + 0xC12C, 0xBCB6, 0xC12D, 0xBCB7, 0xC12E, 0x98FE, 0xC12F, 0xBCB8, 0xC130, 0xBCB9, 0xC131, 0xBCBA, 0xC132, 0x9941, 0xC133, 0x9942, + 0xC134, 0x9943, 0xC135, 0x9944, 0xC136, 0xBCBB, 0xC137, 0x9945, 0xC138, 0xBCBC, 0xC139, 0xBCBD, 0xC13A, 0x9946, 0xC13B, 0x9947, + 0xC13C, 0xBCBE, 0xC13D, 0x9948, 0xC13E, 0x9949, 0xC13F, 0x994A, 0xC140, 0xBCBF, 0xC141, 0x994B, 0xC142, 0x994C, 0xC143, 0x994D, + 0xC144, 0x994E, 0xC145, 0x994F, 0xC146, 0x9950, 0xC147, 0x9951, 0xC148, 0xBCC0, 0xC149, 0xBCC1, 0xC14A, 0x9952, 0xC14B, 0xBCC2, + 0xC14C, 0xBCC3, 0xC14D, 0xBCC4, 0xC14E, 0x9953, 0xC14F, 0x9954, 0xC150, 0x9955, 0xC151, 0x9956, 0xC152, 0x9957, 0xC153, 0x9958, + 0xC154, 0xBCC5, 0xC155, 0xBCC6, 0xC156, 0x9959, 0xC157, 0x995A, 0xC158, 0xBCC7, 0xC159, 0x9961, 0xC15A, 0x9962, 0xC15B, 0x9963, + 0xC15C, 0xBCC8, 0xC15D, 0x9964, 0xC15E, 0x9965, 0xC15F, 0x9966, 0xC160, 0x9967, 0xC161, 0x9968, 0xC162, 0x9969, 0xC163, 0x996A, + 0xC164, 0xBCC9, 0xC165, 0xBCCA, 0xC166, 0x996B, 0xC167, 0xBCCB, 0xC168, 0xBCCC, 0xC169, 0xBCCD, 0xC16A, 0x996C, 0xC16B, 0x996D, + 0xC16C, 0x996E, 0xC16D, 0x996F, 0xC16E, 0x9970, 0xC16F, 0x9971, 0xC170, 0xBCCE, 0xC171, 0x9972, 0xC172, 0x9973, 0xC173, 0x9974, + 0xC174, 0xBCCF, 0xC175, 0x9975, 0xC176, 0x9976, 0xC177, 0x9977, 0xC178, 0xBCD0, 0xC179, 0x9978, 0xC17A, 0x9979, 0xC17B, 0x997A, + 0xC17C, 0x9981, 0xC17D, 0x9982, 0xC17E, 0x9983, 0xC17F, 0x9984, 0xC180, 0x9985, 0xC181, 0x9986, 0xC182, 0x9987, 0xC183, 0x9988, + 0xC184, 0x9989, 0xC185, 0xBCD1, 0xC186, 0x998A, 0xC187, 0x998B, 0xC188, 0x998C, 0xC189, 0x998D, 0xC18A, 0x998E, 0xC18B, 0x998F, + 0xC18C, 0xBCD2, 0xC18D, 0xBCD3, 0xC18E, 0xBCD4, 0xC18F, 0x9990, 0xC190, 0xBCD5, 0xC191, 0x9991, 0xC192, 0x9992, 0xC193, 0x9993, + 0xC194, 0xBCD6, 0xC195, 0x9994, 0xC196, 0xBCD7, 0xC197, 0x9995, 0xC198, 0x9996, 0xC199, 0x9997, 0xC19A, 0x9998, 0xC19B, 0x9999, + 0xC19C, 0xBCD8, 0xC19D, 0xBCD9, 0xC19E, 0x999A, 0xC19F, 0xBCDA, 0xC1A0, 0x999B, 0xC1A1, 0xBCDB, 0xC1A2, 0x999C, 0xC1A3, 0x999D, + 0xC1A4, 0x999E, 0xC1A5, 0xBCDC, 0xC1A6, 0x999F, 0xC1A7, 0x99A0, 0xC1A8, 0xBCDD, 0xC1A9, 0xBCDE, 0xC1AA, 0x99A1, 0xC1AB, 0x99A2, + 0xC1AC, 0xBCDF, 0xC1AD, 0x99A3, 0xC1AE, 0x99A4, 0xC1AF, 0x99A5, 0xC1B0, 0xBCE0, 0xC1B1, 0x99A6, 0xC1B2, 0x99A7, 0xC1B3, 0x99A8, + 0xC1B4, 0x99A9, 0xC1B5, 0x99AA, 0xC1B6, 0x99AB, 0xC1B7, 0x99AC, 0xC1B8, 0x99AD, 0xC1B9, 0x99AE, 0xC1BA, 0x99AF, 0xC1BB, 0x99B0, + 0xC1BC, 0x99B1, 0xC1BD, 0xBCE1, 0xC1BE, 0x99B2, 0xC1BF, 0x99B3, 0xC1C0, 0x99B4, 0xC1C1, 0x99B5, 0xC1C2, 0x99B6, 0xC1C3, 0x99B7, + 0xC1C4, 0xBCE2, 0xC1C5, 0x99B8, 0xC1C6, 0x99B9, 0xC1C7, 0x99BA, 0xC1C8, 0xBCE3, 0xC1C9, 0x99BB, 0xC1CA, 0x99BC, 0xC1CB, 0x99BD, + 0xC1CC, 0xBCE4, 0xC1CD, 0x99BE, 0xC1CE, 0x99BF, 0xC1CF, 0x99C0, 0xC1D0, 0x99C1, 0xC1D1, 0x99C2, 0xC1D2, 0x99C3, 0xC1D3, 0x99C4, + 0xC1D4, 0xBCE5, 0xC1D5, 0x99C5, 0xC1D6, 0x99C6, 0xC1D7, 0xBCE6, 0xC1D8, 0xBCE7, 0xC1D9, 0x99C7, 0xC1DA, 0x99C8, 0xC1DB, 0x99C9, + 0xC1DC, 0x99CA, 0xC1DD, 0x99CB, 0xC1DE, 0x99CC, 0xC1DF, 0x99CD, 0xC1E0, 0xBCE8, 0xC1E1, 0x99CE, 0xC1E2, 0x99CF, 0xC1E3, 0x99D0, + 0xC1E4, 0xBCE9, 0xC1E5, 0x99D1, 0xC1E6, 0x99D2, 0xC1E7, 0x99D3, 0xC1E8, 0xBCEA, 0xC1E9, 0x99D4, 0xC1EA, 0x99D5, 0xC1EB, 0x99D6, + 0xC1EC, 0x99D7, 0xC1ED, 0x99D8, 0xC1EE, 0x99D9, 0xC1EF, 0x99DA, 0xC1F0, 0xBCEB, 0xC1F1, 0xBCEC, 0xC1F2, 0x99DB, 0xC1F3, 0xBCED, + 0xC1F4, 0x99DC, 0xC1F5, 0x99DD, 0xC1F6, 0x99DE, 0xC1F7, 0x99DF, 0xC1F8, 0x99E0, 0xC1F9, 0x99E1, 0xC1FA, 0x99E2, 0xC1FB, 0x99E3, + 0xC1FC, 0xBCEE, 0xC1FD, 0xBCEF, 0xC1FE, 0x99E4, 0xC1FF, 0x99E5, 0xC200, 0xBCF0, 0xC201, 0x99E6, 0xC202, 0x99E7, 0xC203, 0x99E8, + 0xC204, 0xBCF1, 0xC205, 0x99E9, 0xC206, 0x99EA, 0xC207, 0x99EB, 0xC208, 0x99EC, 0xC209, 0x99ED, 0xC20A, 0x99EE, 0xC20B, 0x99EF, + 0xC20C, 0xBCF2, 0xC20D, 0xBCF3, 0xC20E, 0x99F0, 0xC20F, 0xBCF4, 0xC210, 0x99F1, 0xC211, 0xBCF5, 0xC212, 0x99F2, 0xC213, 0x99F3, + 0xC214, 0x99F4, 0xC215, 0x99F5, 0xC216, 0x99F6, 0xC217, 0x99F7, 0xC218, 0xBCF6, 0xC219, 0xBCF7, 0xC21A, 0x99F8, 0xC21B, 0x99F9, + 0xC21C, 0xBCF8, 0xC21D, 0x99FA, 0xC21E, 0x99FB, 0xC21F, 0xBCF9, 0xC220, 0xBCFA, 0xC221, 0x99FC, 0xC222, 0x99FD, 0xC223, 0x99FE, + 0xC224, 0x9A41, 0xC225, 0x9A42, 0xC226, 0x9A43, 0xC227, 0x9A44, 0xC228, 0xBCFB, 0xC229, 0xBCFC, 0xC22A, 0x9A45, 0xC22B, 0xBCFD, + 0xC22C, 0x9A46, 0xC22D, 0xBCFE, 0xC22E, 0x9A47, 0xC22F, 0xBDA1, 0xC230, 0x9A48, 0xC231, 0xBDA2, 0xC232, 0xBDA3, 0xC233, 0x9A49, + 0xC234, 0xBDA4, 0xC235, 0x9A4A, 0xC236, 0x9A4B, 0xC237, 0x9A4C, 0xC238, 0x9A4D, 0xC239, 0x9A4E, 0xC23A, 0x9A4F, 0xC23B, 0x9A50, + 0xC23C, 0x9A51, 0xC23D, 0x9A52, 0xC23E, 0x9A53, 0xC23F, 0x9A54, 0xC240, 0x9A55, 0xC241, 0x9A56, 0xC242, 0x9A57, 0xC243, 0x9A58, + 0xC244, 0x9A59, 0xC245, 0x9A5A, 0xC246, 0x9A61, 0xC247, 0x9A62, 0xC248, 0xBDA5, 0xC249, 0x9A63, 0xC24A, 0x9A64, 0xC24B, 0x9A65, + 0xC24C, 0x9A66, 0xC24D, 0x9A67, 0xC24E, 0x9A68, 0xC24F, 0x9A69, 0xC250, 0xBDA6, 0xC251, 0xBDA7, 0xC252, 0x9A6A, 0xC253, 0x9A6B, + 0xC254, 0xBDA8, 0xC255, 0x9A6C, 0xC256, 0x9A6D, 0xC257, 0x9A6E, 0xC258, 0xBDA9, 0xC259, 0x9A6F, 0xC25A, 0x9A70, 0xC25B, 0x9A71, + 0xC25C, 0x9A72, 0xC25D, 0x9A73, 0xC25E, 0x9A74, 0xC25F, 0x9A75, 0xC260, 0xBDAA, 0xC261, 0x9A76, 0xC262, 0x9A77, 0xC263, 0x9A78, + 0xC264, 0x9A79, 0xC265, 0xBDAB, 0xC266, 0x9A7A, 0xC267, 0x9A81, 0xC268, 0x9A82, 0xC269, 0x9A83, 0xC26A, 0x9A84, 0xC26B, 0x9A85, + 0xC26C, 0xBDAC, 0xC26D, 0xBDAD, 0xC26E, 0x9A86, 0xC26F, 0x9A87, 0xC270, 0xBDAE, 0xC271, 0x9A88, 0xC272, 0x9A89, 0xC273, 0x9A8A, + 0xC274, 0xBDAF, 0xC275, 0x9A8B, 0xC276, 0x9A8C, 0xC277, 0x9A8D, 0xC278, 0x9A8E, 0xC279, 0x9A8F, 0xC27A, 0x9A90, 0xC27B, 0x9A91, + 0xC27C, 0xBDB0, 0xC27D, 0xBDB1, 0xC27E, 0x9A92, 0xC27F, 0xBDB2, 0xC280, 0x9A93, 0xC281, 0xBDB3, 0xC282, 0x9A94, 0xC283, 0x9A95, + 0xC284, 0x9A96, 0xC285, 0x9A97, 0xC286, 0x9A98, 0xC287, 0x9A99, 0xC288, 0xBDB4, 0xC289, 0xBDB5, 0xC28A, 0x9A9A, 0xC28B, 0x9A9B, + 0xC28C, 0x9A9C, 0xC28D, 0x9A9D, 0xC28E, 0x9A9E, 0xC28F, 0x9A9F, 0xC290, 0xBDB6, 0xC291, 0x9AA0, 0xC292, 0x9AA1, 0xC293, 0x9AA2, + 0xC294, 0x9AA3, 0xC295, 0x9AA4, 0xC296, 0x9AA5, 0xC297, 0x9AA6, 0xC298, 0xBDB7, 0xC299, 0x9AA7, 0xC29A, 0x9AA8, 0xC29B, 0xBDB8, + 0xC29C, 0x9AA9, 0xC29D, 0xBDB9, 0xC29E, 0x9AAA, 0xC29F, 0x9AAB, 0xC2A0, 0x9AAC, 0xC2A1, 0x9AAD, 0xC2A2, 0x9AAE, 0xC2A3, 0x9AAF, + 0xC2A4, 0xBDBA, 0xC2A5, 0xBDBB, 0xC2A6, 0x9AB0, 0xC2A7, 0x9AB1, 0xC2A8, 0xBDBC, 0xC2A9, 0x9AB2, 0xC2AA, 0x9AB3, 0xC2AB, 0x9AB4, + 0xC2AC, 0xBDBD, 0xC2AD, 0xBDBE, 0xC2AE, 0x9AB5, 0xC2AF, 0x9AB6, 0xC2B0, 0x9AB7, 0xC2B1, 0x9AB8, 0xC2B2, 0x9AB9, 0xC2B3, 0x9ABA, + 0xC2B4, 0xBDBF, 0xC2B5, 0xBDC0, 0xC2B6, 0x9ABB, 0xC2B7, 0xBDC1, 0xC2B8, 0x9ABC, 0xC2B9, 0xBDC2, 0xC2BA, 0x9ABD, 0xC2BB, 0x9ABE, + 0xC2BC, 0x9ABF, 0xC2BD, 0x9AC0, 0xC2BE, 0x9AC1, 0xC2BF, 0x9AC2, 0xC2C0, 0x9AC3, 0xC2C1, 0x9AC4, 0xC2C2, 0x9AC5, 0xC2C3, 0x9AC6, + 0xC2C4, 0x9AC7, 0xC2C5, 0x9AC8, 0xC2C6, 0x9AC9, 0xC2C7, 0x9ACA, 0xC2C8, 0x9ACB, 0xC2C9, 0x9ACC, 0xC2CA, 0x9ACD, 0xC2CB, 0x9ACE, + 0xC2CC, 0x9ACF, 0xC2CD, 0x9AD0, 0xC2CE, 0x9AD1, 0xC2CF, 0x9AD2, 0xC2D0, 0x9AD3, 0xC2D1, 0x9AD4, 0xC2D2, 0x9AD5, 0xC2D3, 0x9AD6, + 0xC2D4, 0x9AD7, 0xC2D5, 0x9AD8, 0xC2D6, 0x9AD9, 0xC2D7, 0x9ADA, 0xC2D8, 0x9ADB, 0xC2D9, 0x9ADC, 0xC2DA, 0x9ADD, 0xC2DB, 0x9ADE, + 0xC2DC, 0xBDC3, 0xC2DD, 0xBDC4, 0xC2DE, 0x9ADF, 0xC2DF, 0x9AE0, 0xC2E0, 0xBDC5, 0xC2E1, 0x9AE1, 0xC2E2, 0x9AE2, 0xC2E3, 0xBDC6, + 0xC2E4, 0xBDC7, 0xC2E5, 0x9AE3, 0xC2E6, 0x9AE4, 0xC2E7, 0x9AE5, 0xC2E8, 0x9AE6, 0xC2E9, 0x9AE7, 0xC2EA, 0x9AE8, 0xC2EB, 0xBDC8, + 0xC2EC, 0xBDC9, 0xC2ED, 0xBDCA, 0xC2EE, 0x9AE9, 0xC2EF, 0xBDCB, 0xC2F0, 0x9AEA, 0xC2F1, 0xBDCC, 0xC2F2, 0x9AEB, 0xC2F3, 0x9AEC, + 0xC2F4, 0x9AED, 0xC2F5, 0x9AEE, 0xC2F6, 0xBDCD, 0xC2F7, 0x9AEF, 0xC2F8, 0xBDCE, 0xC2F9, 0xBDCF, 0xC2FA, 0x9AF0, 0xC2FB, 0xBDD0, + 0xC2FC, 0xBDD1, 0xC2FD, 0x9AF1, 0xC2FE, 0x9AF2, 0xC2FF, 0x9AF3, 0xC300, 0xBDD2, 0xC301, 0x9AF4, 0xC302, 0x9AF5, 0xC303, 0x9AF6, + 0xC304, 0x9AF7, 0xC305, 0x9AF8, 0xC306, 0x9AF9, 0xC307, 0x9AFA, 0xC308, 0xBDD3, 0xC309, 0xBDD4, 0xC30A, 0x9AFB, 0xC30B, 0x9AFC, + 0xC30C, 0xBDD5, 0xC30D, 0xBDD6, 0xC30E, 0x9AFD, 0xC30F, 0x9AFE, 0xC310, 0x9B41, 0xC311, 0x9B42, 0xC312, 0x9B43, 0xC313, 0xBDD7, + 0xC314, 0xBDD8, 0xC315, 0xBDD9, 0xC316, 0x9B44, 0xC317, 0x9B45, 0xC318, 0xBDDA, 0xC319, 0x9B46, 0xC31A, 0x9B47, 0xC31B, 0x9B48, + 0xC31C, 0xBDDB, 0xC31D, 0x9B49, 0xC31E, 0x9B4A, 0xC31F, 0x9B4B, 0xC320, 0x9B4C, 0xC321, 0x9B4D, 0xC322, 0x9B4E, 0xC323, 0x9B4F, + 0xC324, 0xBDDC, 0xC325, 0xBDDD, 0xC326, 0x9B50, 0xC327, 0x9B51, 0xC328, 0xBDDE, 0xC329, 0xBDDF, 0xC32A, 0x9B52, 0xC32B, 0x9B53, + 0xC32C, 0x9B54, 0xC32D, 0x9B55, 0xC32E, 0x9B56, 0xC32F, 0x9B57, 0xC330, 0x9B58, 0xC331, 0x9B59, 0xC332, 0x9B5A, 0xC333, 0x9B61, + 0xC334, 0x9B62, 0xC335, 0x9B63, 0xC336, 0x9B64, 0xC337, 0x9B65, 0xC338, 0x9B66, 0xC339, 0x9B67, 0xC33A, 0x9B68, 0xC33B, 0x9B69, + 0xC33C, 0x9B6A, 0xC33D, 0x9B6B, 0xC33E, 0x9B6C, 0xC33F, 0x9B6D, 0xC340, 0x9B6E, 0xC341, 0x9B6F, 0xC342, 0x9B70, 0xC343, 0x9B71, + 0xC344, 0x9B72, 0xC345, 0xBDE0, 0xC346, 0x9B73, 0xC347, 0x9B74, 0xC348, 0x9B75, 0xC349, 0x9B76, 0xC34A, 0x9B77, 0xC34B, 0x9B78, + 0xC34C, 0x9B79, 0xC34D, 0x9B7A, 0xC34E, 0x9B81, 0xC34F, 0x9B82, 0xC350, 0x9B83, 0xC351, 0x9B84, 0xC352, 0x9B85, 0xC353, 0x9B86, + 0xC354, 0x9B87, 0xC355, 0x9B88, 0xC356, 0x9B89, 0xC357, 0x9B8A, 0xC358, 0x9B8B, 0xC359, 0x9B8C, 0xC35A, 0x9B8D, 0xC35B, 0x9B8E, + 0xC35C, 0x9B8F, 0xC35D, 0x9B90, 0xC35E, 0x9B91, 0xC35F, 0x9B92, 0xC360, 0x9B93, 0xC361, 0x9B94, 0xC362, 0x9B95, 0xC363, 0x9B96, + 0xC364, 0x9B97, 0xC365, 0x9B98, 0xC366, 0x9B99, 0xC367, 0x9B9A, 0xC368, 0xBDE1, 0xC369, 0xBDE2, 0xC36A, 0x9B9B, 0xC36B, 0x9B9C, + 0xC36C, 0xBDE3, 0xC36D, 0x9B9D, 0xC36E, 0x9B9E, 0xC36F, 0x9B9F, 0xC370, 0xBDE4, 0xC371, 0x9BA0, 0xC372, 0xBDE5, 0xC373, 0x9BA1, + 0xC374, 0x9BA2, 0xC375, 0x9BA3, 0xC376, 0x9BA4, 0xC377, 0x9BA5, 0xC378, 0xBDE6, 0xC379, 0xBDE7, 0xC37A, 0x9BA6, 0xC37B, 0x9BA7, + 0xC37C, 0xBDE8, 0xC37D, 0xBDE9, 0xC37E, 0x9BA8, 0xC37F, 0x9BA9, 0xC380, 0x9BAA, 0xC381, 0x9BAB, 0xC382, 0x9BAC, 0xC383, 0x9BAD, + 0xC384, 0xBDEA, 0xC385, 0x9BAE, 0xC386, 0x9BAF, 0xC387, 0x9BB0, 0xC388, 0xBDEB, 0xC389, 0x9BB1, 0xC38A, 0x9BB2, 0xC38B, 0x9BB3, + 0xC38C, 0xBDEC, 0xC38D, 0x9BB4, 0xC38E, 0x9BB5, 0xC38F, 0x9BB6, 0xC390, 0x9BB7, 0xC391, 0x9BB8, 0xC392, 0x9BB9, 0xC393, 0x9BBA, + 0xC394, 0x9BBB, 0xC395, 0x9BBC, 0xC396, 0x9BBD, 0xC397, 0x9BBE, 0xC398, 0x9BBF, 0xC399, 0x9BC0, 0xC39A, 0x9BC1, 0xC39B, 0x9BC2, + 0xC39C, 0x9BC3, 0xC39D, 0x9BC4, 0xC39E, 0x9BC5, 0xC39F, 0x9BC6, 0xC3A0, 0x9BC7, 0xC3A1, 0x9BC8, 0xC3A2, 0x9BC9, 0xC3A3, 0x9BCA, + 0xC3A4, 0x9BCB, 0xC3A5, 0x9BCC, 0xC3A6, 0x9BCD, 0xC3A7, 0x9BCE, 0xC3A8, 0x9BCF, 0xC3A9, 0x9BD0, 0xC3AA, 0x9BD1, 0xC3AB, 0x9BD2, + 0xC3AC, 0x9BD3, 0xC3AD, 0x9BD4, 0xC3AE, 0x9BD5, 0xC3AF, 0x9BD6, 0xC3B0, 0x9BD7, 0xC3B1, 0x9BD8, 0xC3B2, 0x9BD9, 0xC3B3, 0x9BDA, + 0xC3B4, 0x9BDB, 0xC3B5, 0x9BDC, 0xC3B6, 0x9BDD, 0xC3B7, 0x9BDE, 0xC3B8, 0x9BDF, 0xC3B9, 0x9BE0, 0xC3BA, 0x9BE1, 0xC3BB, 0x9BE2, + 0xC3BC, 0x9BE3, 0xC3BD, 0x9BE4, 0xC3BE, 0x9BE5, 0xC3BF, 0x9BE6, 0xC3C0, 0xBDED, 0xC3C1, 0x9BE7, 0xC3C2, 0x9BE8, 0xC3C3, 0x9BE9, + 0xC3C4, 0x9BEA, 0xC3C5, 0x9BEB, 0xC3C6, 0x9BEC, 0xC3C7, 0x9BED, 0xC3C8, 0x9BEE, 0xC3C9, 0x9BEF, 0xC3CA, 0x9BF0, 0xC3CB, 0x9BF1, + 0xC3CC, 0x9BF2, 0xC3CD, 0x9BF3, 0xC3CE, 0x9BF4, 0xC3CF, 0x9BF5, 0xC3D0, 0x9BF6, 0xC3D1, 0x9BF7, 0xC3D2, 0x9BF8, 0xC3D3, 0x9BF9, + 0xC3D4, 0x9BFA, 0xC3D5, 0x9BFB, 0xC3D6, 0x9BFC, 0xC3D7, 0x9BFD, 0xC3D8, 0xBDEE, 0xC3D9, 0xBDEF, 0xC3DA, 0x9BFE, 0xC3DB, 0x9C41, + 0xC3DC, 0xBDF0, 0xC3DD, 0x9C42, 0xC3DE, 0x9C43, 0xC3DF, 0xBDF1, 0xC3E0, 0xBDF2, 0xC3E1, 0x9C44, 0xC3E2, 0xBDF3, 0xC3E3, 0x9C45, + 0xC3E4, 0x9C46, 0xC3E5, 0x9C47, 0xC3E6, 0x9C48, 0xC3E7, 0x9C49, 0xC3E8, 0xBDF4, 0xC3E9, 0xBDF5, 0xC3EA, 0x9C4A, 0xC3EB, 0x9C4B, + 0xC3EC, 0x9C4C, 0xC3ED, 0xBDF6, 0xC3EE, 0x9C4D, 0xC3EF, 0x9C4E, 0xC3F0, 0x9C4F, 0xC3F1, 0x9C50, 0xC3F2, 0x9C51, 0xC3F3, 0x9C52, + 0xC3F4, 0xBDF7, 0xC3F5, 0xBDF8, 0xC3F6, 0x9C53, 0xC3F7, 0x9C54, 0xC3F8, 0xBDF9, 0xC3F9, 0x9C55, 0xC3FA, 0x9C56, 0xC3FB, 0x9C57, + 0xC3FC, 0x9C58, 0xC3FD, 0x9C59, 0xC3FE, 0x9C5A, 0xC3FF, 0x9C61, 0xC400, 0x9C62, 0xC401, 0x9C63, 0xC402, 0x9C64, 0xC403, 0x9C65, + 0xC404, 0x9C66, 0xC405, 0x9C67, 0xC406, 0x9C68, 0xC407, 0x9C69, 0xC408, 0xBDFA, 0xC409, 0x9C6A, 0xC40A, 0x9C6B, 0xC40B, 0x9C6C, + 0xC40C, 0x9C6D, 0xC40D, 0x9C6E, 0xC40E, 0x9C6F, 0xC40F, 0x9C70, 0xC410, 0xBDFB, 0xC411, 0x9C71, 0xC412, 0x9C72, 0xC413, 0x9C73, + 0xC414, 0x9C74, 0xC415, 0x9C75, 0xC416, 0x9C76, 0xC417, 0x9C77, 0xC418, 0x9C78, 0xC419, 0x9C79, 0xC41A, 0x9C7A, 0xC41B, 0x9C81, + 0xC41C, 0x9C82, 0xC41D, 0x9C83, 0xC41E, 0x9C84, 0xC41F, 0x9C85, 0xC420, 0x9C86, 0xC421, 0x9C87, 0xC422, 0x9C88, 0xC423, 0x9C89, + 0xC424, 0xBDFC, 0xC425, 0x9C8A, 0xC426, 0x9C8B, 0xC427, 0x9C8C, 0xC428, 0x9C8D, 0xC429, 0x9C8E, 0xC42A, 0x9C8F, 0xC42B, 0x9C90, + 0xC42C, 0xBDFD, 0xC42D, 0x9C91, 0xC42E, 0x9C92, 0xC42F, 0x9C93, 0xC430, 0xBDFE, 0xC431, 0x9C94, 0xC432, 0x9C95, 0xC433, 0x9C96, + 0xC434, 0xBEA1, 0xC435, 0x9C97, 0xC436, 0x9C98, 0xC437, 0x9C99, 0xC438, 0x9C9A, 0xC439, 0x9C9B, 0xC43A, 0x9C9C, 0xC43B, 0x9C9D, + 0xC43C, 0xBEA2, 0xC43D, 0xBEA3, 0xC43E, 0x9C9E, 0xC43F, 0x9C9F, 0xC440, 0x9CA0, 0xC441, 0x9CA1, 0xC442, 0x9CA2, 0xC443, 0x9CA3, + 0xC444, 0x9CA4, 0xC445, 0x9CA5, 0xC446, 0x9CA6, 0xC447, 0x9CA7, 0xC448, 0xBEA4, 0xC449, 0x9CA8, 0xC44A, 0x9CA9, 0xC44B, 0x9CAA, + 0xC44C, 0x9CAB, 0xC44D, 0x9CAC, 0xC44E, 0x9CAD, 0xC44F, 0x9CAE, 0xC450, 0x9CAF, 0xC451, 0x9CB0, 0xC452, 0x9CB1, 0xC453, 0x9CB2, + 0xC454, 0x9CB3, 0xC455, 0x9CB4, 0xC456, 0x9CB5, 0xC457, 0x9CB6, 0xC458, 0x9CB7, 0xC459, 0x9CB8, 0xC45A, 0x9CB9, 0xC45B, 0x9CBA, + 0xC45C, 0x9CBB, 0xC45D, 0x9CBC, 0xC45E, 0x9CBD, 0xC45F, 0x9CBE, 0xC460, 0x9CBF, 0xC461, 0x9CC0, 0xC462, 0x9CC1, 0xC463, 0x9CC2, + 0xC464, 0xBEA5, 0xC465, 0xBEA6, 0xC466, 0x9CC3, 0xC467, 0x9CC4, 0xC468, 0xBEA7, 0xC469, 0x9CC5, 0xC46A, 0x9CC6, 0xC46B, 0x9CC7, + 0xC46C, 0xBEA8, 0xC46D, 0x9CC8, 0xC46E, 0x9CC9, 0xC46F, 0x9CCA, 0xC470, 0x9CCB, 0xC471, 0x9CCC, 0xC472, 0x9CCD, 0xC473, 0x9CCE, + 0xC474, 0xBEA9, 0xC475, 0xBEAA, 0xC476, 0x9CCF, 0xC477, 0x9CD0, 0xC478, 0x9CD1, 0xC479, 0xBEAB, 0xC47A, 0x9CD2, 0xC47B, 0x9CD3, + 0xC47C, 0x9CD4, 0xC47D, 0x9CD5, 0xC47E, 0x9CD6, 0xC47F, 0x9CD7, 0xC480, 0xBEAC, 0xC481, 0x9CD8, 0xC482, 0x9CD9, 0xC483, 0x9CDA, + 0xC484, 0x9CDB, 0xC485, 0x9CDC, 0xC486, 0x9CDD, 0xC487, 0x9CDE, 0xC488, 0x9CDF, 0xC489, 0x9CE0, 0xC48A, 0x9CE1, 0xC48B, 0x9CE2, + 0xC48C, 0x9CE3, 0xC48D, 0x9CE4, 0xC48E, 0x9CE5, 0xC48F, 0x9CE6, 0xC490, 0x9CE7, 0xC491, 0x9CE8, 0xC492, 0x9CE9, 0xC493, 0x9CEA, + 0xC494, 0xBEAD, 0xC495, 0x9CEB, 0xC496, 0x9CEC, 0xC497, 0x9CED, 0xC498, 0x9CEE, 0xC499, 0x9CEF, 0xC49A, 0x9CF0, 0xC49B, 0x9CF1, + 0xC49C, 0xBEAE, 0xC49D, 0x9CF2, 0xC49E, 0x9CF3, 0xC49F, 0x9CF4, 0xC4A0, 0x9CF5, 0xC4A1, 0x9CF6, 0xC4A2, 0x9CF7, 0xC4A3, 0x9CF8, + 0xC4A4, 0x9CF9, 0xC4A5, 0x9CFA, 0xC4A6, 0x9CFB, 0xC4A7, 0x9CFC, 0xC4A8, 0x9CFD, 0xC4A9, 0x9CFE, 0xC4AA, 0x9D41, 0xC4AB, 0x9D42, + 0xC4AC, 0x9D43, 0xC4AD, 0x9D44, 0xC4AE, 0x9D45, 0xC4AF, 0x9D46, 0xC4B0, 0x9D47, 0xC4B1, 0x9D48, 0xC4B2, 0x9D49, 0xC4B3, 0x9D4A, + 0xC4B4, 0x9D4B, 0xC4B5, 0x9D4C, 0xC4B6, 0x9D4D, 0xC4B7, 0x9D4E, 0xC4B8, 0xBEAF, 0xC4B9, 0x9D4F, 0xC4BA, 0x9D50, 0xC4BB, 0x9D51, + 0xC4BC, 0xBEB0, 0xC4BD, 0x9D52, 0xC4BE, 0x9D53, 0xC4BF, 0x9D54, 0xC4C0, 0x9D55, 0xC4C1, 0x9D56, 0xC4C2, 0x9D57, 0xC4C3, 0x9D58, + 0xC4C4, 0x9D59, 0xC4C5, 0x9D5A, 0xC4C6, 0x9D61, 0xC4C7, 0x9D62, 0xC4C8, 0x9D63, 0xC4C9, 0x9D64, 0xC4CA, 0x9D65, 0xC4CB, 0x9D66, + 0xC4CC, 0x9D67, 0xC4CD, 0x9D68, 0xC4CE, 0x9D69, 0xC4CF, 0x9D6A, 0xC4D0, 0x9D6B, 0xC4D1, 0x9D6C, 0xC4D2, 0x9D6D, 0xC4D3, 0x9D6E, + 0xC4D4, 0x9D6F, 0xC4D5, 0x9D70, 0xC4D6, 0x9D71, 0xC4D7, 0x9D72, 0xC4D8, 0x9D73, 0xC4D9, 0x9D74, 0xC4DA, 0x9D75, 0xC4DB, 0x9D76, + 0xC4DC, 0x9D77, 0xC4DD, 0x9D78, 0xC4DE, 0x9D79, 0xC4DF, 0x9D7A, 0xC4E0, 0x9D81, 0xC4E1, 0x9D82, 0xC4E2, 0x9D83, 0xC4E3, 0x9D84, + 0xC4E4, 0x9D85, 0xC4E5, 0x9D86, 0xC4E6, 0x9D87, 0xC4E7, 0x9D88, 0xC4E8, 0x9D89, 0xC4E9, 0xBEB1, 0xC4EA, 0x9D8A, 0xC4EB, 0x9D8B, + 0xC4EC, 0x9D8C, 0xC4ED, 0x9D8D, 0xC4EE, 0x9D8E, 0xC4EF, 0x9D8F, 0xC4F0, 0xBEB2, 0xC4F1, 0xBEB3, 0xC4F2, 0x9D90, 0xC4F3, 0x9D91, + 0xC4F4, 0xBEB4, 0xC4F5, 0x9D92, 0xC4F6, 0x9D93, 0xC4F7, 0x9D94, 0xC4F8, 0xBEB5, 0xC4F9, 0x9D95, 0xC4FA, 0xBEB6, 0xC4FB, 0x9D96, + 0xC4FC, 0x9D97, 0xC4FD, 0x9D98, 0xC4FE, 0x9D99, 0xC4FF, 0xBEB7, 0xC500, 0xBEB8, 0xC501, 0xBEB9, 0xC502, 0x9D9A, 0xC503, 0x9D9B, + 0xC504, 0x9D9C, 0xC505, 0x9D9D, 0xC506, 0x9D9E, 0xC507, 0x9D9F, 0xC508, 0x9DA0, 0xC509, 0x9DA1, 0xC50A, 0x9DA2, 0xC50B, 0x9DA3, + 0xC50C, 0xBEBA, 0xC50D, 0x9DA4, 0xC50E, 0x9DA5, 0xC50F, 0x9DA6, 0xC510, 0xBEBB, 0xC511, 0x9DA7, 0xC512, 0x9DA8, 0xC513, 0x9DA9, + 0xC514, 0xBEBC, 0xC515, 0x9DAA, 0xC516, 0x9DAB, 0xC517, 0x9DAC, 0xC518, 0x9DAD, 0xC519, 0x9DAE, 0xC51A, 0x9DAF, 0xC51B, 0x9DB0, + 0xC51C, 0xBEBD, 0xC51D, 0x9DB1, 0xC51E, 0x9DB2, 0xC51F, 0x9DB3, 0xC520, 0x9DB4, 0xC521, 0x9DB5, 0xC522, 0x9DB6, 0xC523, 0x9DB7, + 0xC524, 0x9DB8, 0xC525, 0x9DB9, 0xC526, 0x9DBA, 0xC527, 0x9DBB, 0xC528, 0xBEBE, 0xC529, 0xBEBF, 0xC52A, 0x9DBC, 0xC52B, 0x9DBD, + 0xC52C, 0xBEC0, 0xC52D, 0x9DBE, 0xC52E, 0x9DBF, 0xC52F, 0x9DC0, 0xC530, 0xBEC1, 0xC531, 0x9DC1, 0xC532, 0x9DC2, 0xC533, 0x9DC3, + 0xC534, 0x9DC4, 0xC535, 0x9DC5, 0xC536, 0x9DC6, 0xC537, 0x9DC7, 0xC538, 0xBEC2, 0xC539, 0xBEC3, 0xC53A, 0x9DC8, 0xC53B, 0xBEC4, + 0xC53C, 0x9DC9, 0xC53D, 0xBEC5, 0xC53E, 0x9DCA, 0xC53F, 0x9DCB, 0xC540, 0x9DCC, 0xC541, 0x9DCD, 0xC542, 0x9DCE, 0xC543, 0x9DCF, + 0xC544, 0xBEC6, 0xC545, 0xBEC7, 0xC546, 0x9DD0, 0xC547, 0x9DD1, 0xC548, 0xBEC8, 0xC549, 0xBEC9, 0xC54A, 0xBECA, 0xC54B, 0x9DD2, + 0xC54C, 0xBECB, 0xC54D, 0xBECC, 0xC54E, 0xBECD, 0xC54F, 0x9DD3, 0xC550, 0x9DD4, 0xC551, 0x9DD5, 0xC552, 0x9DD6, 0xC553, 0xBECE, + 0xC554, 0xBECF, 0xC555, 0xBED0, 0xC556, 0x9DD7, 0xC557, 0xBED1, 0xC558, 0xBED2, 0xC559, 0xBED3, 0xC55A, 0x9DD8, 0xC55B, 0x9DD9, + 0xC55C, 0x9DDA, 0xC55D, 0xBED4, 0xC55E, 0xBED5, 0xC55F, 0x9DDB, 0xC560, 0xBED6, 0xC561, 0xBED7, 0xC562, 0x9DDC, 0xC563, 0x9DDD, + 0xC564, 0xBED8, 0xC565, 0x9DDE, 0xC566, 0x9DDF, 0xC567, 0x9DE0, 0xC568, 0xBED9, 0xC569, 0x9DE1, 0xC56A, 0x9DE2, 0xC56B, 0x9DE3, + 0xC56C, 0x9DE4, 0xC56D, 0x9DE5, 0xC56E, 0x9DE6, 0xC56F, 0x9DE7, 0xC570, 0xBEDA, 0xC571, 0xBEDB, 0xC572, 0x9DE8, 0xC573, 0xBEDC, + 0xC574, 0xBEDD, 0xC575, 0xBEDE, 0xC576, 0x9DE9, 0xC577, 0x9DEA, 0xC578, 0x9DEB, 0xC579, 0x9DEC, 0xC57A, 0x9DED, 0xC57B, 0x9DEE, + 0xC57C, 0xBEDF, 0xC57D, 0xBEE0, 0xC57E, 0x9DEF, 0xC57F, 0x9DF0, 0xC580, 0xBEE1, 0xC581, 0x9DF1, 0xC582, 0x9DF2, 0xC583, 0x9DF3, + 0xC584, 0xBEE2, 0xC585, 0x9DF4, 0xC586, 0x9DF5, 0xC587, 0xBEE3, 0xC588, 0x9DF6, 0xC589, 0x9DF7, 0xC58A, 0x9DF8, 0xC58B, 0x9DF9, + 0xC58C, 0xBEE4, 0xC58D, 0xBEE5, 0xC58E, 0x9DFA, 0xC58F, 0xBEE6, 0xC590, 0x9DFB, 0xC591, 0xBEE7, 0xC592, 0x9DFC, 0xC593, 0x9DFD, + 0xC594, 0x9DFE, 0xC595, 0xBEE8, 0xC596, 0x9E41, 0xC597, 0xBEE9, 0xC598, 0xBEEA, 0xC599, 0x9E42, 0xC59A, 0x9E43, 0xC59B, 0x9E44, + 0xC59C, 0xBEEB, 0xC59D, 0x9E45, 0xC59E, 0x9E46, 0xC59F, 0x9E47, 0xC5A0, 0xBEEC, 0xC5A1, 0x9E48, 0xC5A2, 0x9E49, 0xC5A3, 0x9E4A, + 0xC5A4, 0x9E4B, 0xC5A5, 0x9E4C, 0xC5A6, 0x9E4D, 0xC5A7, 0x9E4E, 0xC5A8, 0x9E4F, 0xC5A9, 0xBEED, 0xC5AA, 0x9E50, 0xC5AB, 0x9E51, + 0xC5AC, 0x9E52, 0xC5AD, 0x9E53, 0xC5AE, 0x9E54, 0xC5AF, 0x9E55, 0xC5B0, 0x9E56, 0xC5B1, 0x9E57, 0xC5B2, 0x9E58, 0xC5B3, 0x9E59, + 0xC5B4, 0xBEEE, 0xC5B5, 0xBEEF, 0xC5B6, 0x9E5A, 0xC5B7, 0x9E61, 0xC5B8, 0xBEF0, 0xC5B9, 0xBEF1, 0xC5BA, 0x9E62, 0xC5BB, 0xBEF2, + 0xC5BC, 0xBEF3, 0xC5BD, 0xBEF4, 0xC5BE, 0xBEF5, 0xC5BF, 0x9E63, 0xC5C0, 0x9E64, 0xC5C1, 0x9E65, 0xC5C2, 0x9E66, 0xC5C3, 0x9E67, + 0xC5C4, 0xBEF6, 0xC5C5, 0xBEF7, 0xC5C6, 0xBEF8, 0xC5C7, 0xBEF9, 0xC5C8, 0xBEFA, 0xC5C9, 0xBEFB, 0xC5CA, 0xBEFC, 0xC5CB, 0x9E68, + 0xC5CC, 0xBEFD, 0xC5CD, 0x9E69, 0xC5CE, 0xBEFE, 0xC5CF, 0x9E6A, 0xC5D0, 0xBFA1, 0xC5D1, 0xBFA2, 0xC5D2, 0x9E6B, 0xC5D3, 0x9E6C, + 0xC5D4, 0xBFA3, 0xC5D5, 0x9E6D, 0xC5D6, 0x9E6E, 0xC5D7, 0x9E6F, 0xC5D8, 0xBFA4, 0xC5D9, 0x9E70, 0xC5DA, 0x9E71, 0xC5DB, 0x9E72, + 0xC5DC, 0x9E73, 0xC5DD, 0x9E74, 0xC5DE, 0x9E75, 0xC5DF, 0x9E76, 0xC5E0, 0xBFA5, 0xC5E1, 0xBFA6, 0xC5E2, 0x9E77, 0xC5E3, 0xBFA7, + 0xC5E4, 0x9E78, 0xC5E5, 0xBFA8, 0xC5E6, 0x9E79, 0xC5E7, 0x9E7A, 0xC5E8, 0x9E81, 0xC5E9, 0x9E82, 0xC5EA, 0x9E83, 0xC5EB, 0x9E84, + 0xC5EC, 0xBFA9, 0xC5ED, 0xBFAA, 0xC5EE, 0xBFAB, 0xC5EF, 0x9E85, 0xC5F0, 0xBFAC, 0xC5F1, 0x9E86, 0xC5F2, 0x9E87, 0xC5F3, 0x9E88, + 0xC5F4, 0xBFAD, 0xC5F5, 0x9E89, 0xC5F6, 0xBFAE, 0xC5F7, 0xBFAF, 0xC5F8, 0x9E8A, 0xC5F9, 0x9E8B, 0xC5FA, 0x9E8C, 0xC5FB, 0x9E8D, + 0xC5FC, 0xBFB0, 0xC5FD, 0xBFB1, 0xC5FE, 0xBFB2, 0xC5FF, 0xBFB3, 0xC600, 0xBFB4, 0xC601, 0xBFB5, 0xC602, 0x9E8E, 0xC603, 0x9E8F, + 0xC604, 0x9E90, 0xC605, 0xBFB6, 0xC606, 0xBFB7, 0xC607, 0xBFB8, 0xC608, 0xBFB9, 0xC609, 0x9E91, 0xC60A, 0x9E92, 0xC60B, 0x9E93, + 0xC60C, 0xBFBA, 0xC60D, 0x9E94, 0xC60E, 0x9E95, 0xC60F, 0x9E96, 0xC610, 0xBFBB, 0xC611, 0x9E97, 0xC612, 0x9E98, 0xC613, 0x9E99, + 0xC614, 0x9E9A, 0xC615, 0x9E9B, 0xC616, 0x9E9C, 0xC617, 0x9E9D, 0xC618, 0xBFBC, 0xC619, 0xBFBD, 0xC61A, 0x9E9E, 0xC61B, 0xBFBE, + 0xC61C, 0xBFBF, 0xC61D, 0x9E9F, 0xC61E, 0x9EA0, 0xC61F, 0x9EA1, 0xC620, 0x9EA2, 0xC621, 0x9EA3, 0xC622, 0x9EA4, 0xC623, 0x9EA5, + 0xC624, 0xBFC0, 0xC625, 0xBFC1, 0xC626, 0x9EA6, 0xC627, 0x9EA7, 0xC628, 0xBFC2, 0xC629, 0x9EA8, 0xC62A, 0x9EA9, 0xC62B, 0x9EAA, + 0xC62C, 0xBFC3, 0xC62D, 0xBFC4, 0xC62E, 0xBFC5, 0xC62F, 0x9EAB, 0xC630, 0xBFC6, 0xC631, 0x9EAC, 0xC632, 0x9EAD, 0xC633, 0xBFC7, + 0xC634, 0xBFC8, 0xC635, 0xBFC9, 0xC636, 0x9EAE, 0xC637, 0xBFCA, 0xC638, 0x9EAF, 0xC639, 0xBFCB, 0xC63A, 0x9EB0, 0xC63B, 0xBFCC, + 0xC63C, 0x9EB1, 0xC63D, 0x9EB2, 0xC63E, 0x9EB3, 0xC63F, 0x9EB4, 0xC640, 0xBFCD, 0xC641, 0xBFCE, 0xC642, 0x9EB5, 0xC643, 0x9EB6, + 0xC644, 0xBFCF, 0xC645, 0x9EB7, 0xC646, 0x9EB8, 0xC647, 0x9EB9, 0xC648, 0xBFD0, 0xC649, 0x9EBA, 0xC64A, 0x9EBB, 0xC64B, 0x9EBC, + 0xC64C, 0x9EBD, 0xC64D, 0x9EBE, 0xC64E, 0x9EBF, 0xC64F, 0x9EC0, 0xC650, 0xBFD1, 0xC651, 0xBFD2, 0xC652, 0x9EC1, 0xC653, 0xBFD3, + 0xC654, 0xBFD4, 0xC655, 0xBFD5, 0xC656, 0x9EC2, 0xC657, 0x9EC3, 0xC658, 0x9EC4, 0xC659, 0x9EC5, 0xC65A, 0x9EC6, 0xC65B, 0x9EC7, + 0xC65C, 0xBFD6, 0xC65D, 0xBFD7, 0xC65E, 0x9EC8, 0xC65F, 0x9EC9, 0xC660, 0xBFD8, 0xC661, 0x9ECA, 0xC662, 0x9ECB, 0xC663, 0x9ECC, + 0xC664, 0x9ECD, 0xC665, 0x9ECE, 0xC666, 0x9ECF, 0xC667, 0x9ED0, 0xC668, 0x9ED1, 0xC669, 0x9ED2, 0xC66A, 0x9ED3, 0xC66B, 0x9ED4, + 0xC66C, 0xBFD9, 0xC66D, 0x9ED5, 0xC66E, 0x9ED6, 0xC66F, 0xBFDA, 0xC670, 0x9ED7, 0xC671, 0xBFDB, 0xC672, 0x9ED8, 0xC673, 0x9ED9, + 0xC674, 0x9EDA, 0xC675, 0x9EDB, 0xC676, 0x9EDC, 0xC677, 0x9EDD, 0xC678, 0xBFDC, 0xC679, 0xBFDD, 0xC67A, 0x9EDE, 0xC67B, 0x9EDF, + 0xC67C, 0xBFDE, 0xC67D, 0x9EE0, 0xC67E, 0x9EE1, 0xC67F, 0x9EE2, 0xC680, 0xBFDF, 0xC681, 0x9EE3, 0xC682, 0x9EE4, 0xC683, 0x9EE5, + 0xC684, 0x9EE6, 0xC685, 0x9EE7, 0xC686, 0x9EE8, 0xC687, 0x9EE9, 0xC688, 0xBFE0, 0xC689, 0xBFE1, 0xC68A, 0x9EEA, 0xC68B, 0xBFE2, + 0xC68C, 0x9EEB, 0xC68D, 0xBFE3, 0xC68E, 0x9EEC, 0xC68F, 0x9EED, 0xC690, 0x9EEE, 0xC691, 0x9EEF, 0xC692, 0x9EF0, 0xC693, 0x9EF1, + 0xC694, 0xBFE4, 0xC695, 0xBFE5, 0xC696, 0x9EF2, 0xC697, 0x9EF3, 0xC698, 0xBFE6, 0xC699, 0x9EF4, 0xC69A, 0x9EF5, 0xC69B, 0x9EF6, + 0xC69C, 0xBFE7, 0xC69D, 0x9EF7, 0xC69E, 0x9EF8, 0xC69F, 0x9EF9, 0xC6A0, 0x9EFA, 0xC6A1, 0x9EFB, 0xC6A2, 0x9EFC, 0xC6A3, 0x9EFD, + 0xC6A4, 0xBFE8, 0xC6A5, 0xBFE9, 0xC6A6, 0x9EFE, 0xC6A7, 0xBFEA, 0xC6A8, 0x9F41, 0xC6A9, 0xBFEB, 0xC6AA, 0x9F42, 0xC6AB, 0x9F43, + 0xC6AC, 0x9F44, 0xC6AD, 0x9F45, 0xC6AE, 0x9F46, 0xC6AF, 0x9F47, 0xC6B0, 0xBFEC, 0xC6B1, 0xBFED, 0xC6B2, 0x9F48, 0xC6B3, 0x9F49, + 0xC6B4, 0xBFEE, 0xC6B5, 0x9F4A, 0xC6B6, 0x9F4B, 0xC6B7, 0x9F4C, 0xC6B8, 0xBFEF, 0xC6B9, 0xBFF0, 0xC6BA, 0xBFF1, 0xC6BB, 0x9F4D, + 0xC6BC, 0x9F4E, 0xC6BD, 0x9F4F, 0xC6BE, 0x9F50, 0xC6BF, 0x9F51, 0xC6C0, 0xBFF2, 0xC6C1, 0xBFF3, 0xC6C2, 0x9F52, 0xC6C3, 0xBFF4, + 0xC6C4, 0x9F53, 0xC6C5, 0xBFF5, 0xC6C6, 0x9F54, 0xC6C7, 0x9F55, 0xC6C8, 0x9F56, 0xC6C9, 0x9F57, 0xC6CA, 0x9F58, 0xC6CB, 0x9F59, + 0xC6CC, 0xBFF6, 0xC6CD, 0xBFF7, 0xC6CE, 0x9F5A, 0xC6CF, 0x9F61, 0xC6D0, 0xBFF8, 0xC6D1, 0x9F62, 0xC6D2, 0x9F63, 0xC6D3, 0x9F64, + 0xC6D4, 0xBFF9, 0xC6D5, 0x9F65, 0xC6D6, 0x9F66, 0xC6D7, 0x9F67, 0xC6D8, 0x9F68, 0xC6D9, 0x9F69, 0xC6DA, 0x9F6A, 0xC6DB, 0x9F6B, + 0xC6DC, 0xBFFA, 0xC6DD, 0xBFFB, 0xC6DE, 0x9F6C, 0xC6DF, 0x9F6D, 0xC6E0, 0xBFFC, 0xC6E1, 0xBFFD, 0xC6E2, 0x9F6E, 0xC6E3, 0x9F6F, + 0xC6E4, 0x9F70, 0xC6E5, 0x9F71, 0xC6E6, 0x9F72, 0xC6E7, 0x9F73, 0xC6E8, 0xBFFE, 0xC6E9, 0xC0A1, 0xC6EA, 0x9F74, 0xC6EB, 0x9F75, + 0xC6EC, 0xC0A2, 0xC6ED, 0x9F76, 0xC6EE, 0x9F77, 0xC6EF, 0x9F78, 0xC6F0, 0xC0A3, 0xC6F1, 0x9F79, 0xC6F2, 0x9F7A, 0xC6F3, 0x9F81, + 0xC6F4, 0x9F82, 0xC6F5, 0x9F83, 0xC6F6, 0x9F84, 0xC6F7, 0x9F85, 0xC6F8, 0xC0A4, 0xC6F9, 0xC0A5, 0xC6FA, 0x9F86, 0xC6FB, 0x9F87, + 0xC6FC, 0x9F88, 0xC6FD, 0xC0A6, 0xC6FE, 0x9F89, 0xC6FF, 0x9F8A, 0xC700, 0x9F8B, 0xC701, 0x9F8C, 0xC702, 0x9F8D, 0xC703, 0x9F8E, + 0xC704, 0xC0A7, 0xC705, 0xC0A8, 0xC706, 0x9F8F, 0xC707, 0x9F90, 0xC708, 0xC0A9, 0xC709, 0x9F91, 0xC70A, 0x9F92, 0xC70B, 0x9F93, + 0xC70C, 0xC0AA, 0xC70D, 0x9F94, 0xC70E, 0x9F95, 0xC70F, 0x9F96, 0xC710, 0x9F97, 0xC711, 0x9F98, 0xC712, 0x9F99, 0xC713, 0x9F9A, + 0xC714, 0xC0AB, 0xC715, 0xC0AC, 0xC716, 0x9F9B, 0xC717, 0xC0AD, 0xC718, 0x9F9C, 0xC719, 0xC0AE, 0xC71A, 0x9F9D, 0xC71B, 0x9F9E, + 0xC71C, 0x9F9F, 0xC71D, 0x9FA0, 0xC71E, 0x9FA1, 0xC71F, 0x9FA2, 0xC720, 0xC0AF, 0xC721, 0xC0B0, 0xC722, 0x9FA3, 0xC723, 0x9FA4, + 0xC724, 0xC0B1, 0xC725, 0x9FA5, 0xC726, 0x9FA6, 0xC727, 0x9FA7, 0xC728, 0xC0B2, 0xC729, 0x9FA8, 0xC72A, 0x9FA9, 0xC72B, 0x9FAA, + 0xC72C, 0x9FAB, 0xC72D, 0x9FAC, 0xC72E, 0x9FAD, 0xC72F, 0x9FAE, 0xC730, 0xC0B3, 0xC731, 0xC0B4, 0xC732, 0x9FAF, 0xC733, 0xC0B5, + 0xC734, 0x9FB0, 0xC735, 0xC0B6, 0xC736, 0x9FB1, 0xC737, 0xC0B7, 0xC738, 0x9FB2, 0xC739, 0x9FB3, 0xC73A, 0x9FB4, 0xC73B, 0x9FB5, + 0xC73C, 0xC0B8, 0xC73D, 0xC0B9, 0xC73E, 0x9FB6, 0xC73F, 0x9FB7, 0xC740, 0xC0BA, 0xC741, 0x9FB8, 0xC742, 0x9FB9, 0xC743, 0x9FBA, + 0xC744, 0xC0BB, 0xC745, 0x9FBB, 0xC746, 0x9FBC, 0xC747, 0x9FBD, 0xC748, 0x9FBE, 0xC749, 0x9FBF, 0xC74A, 0xC0BC, 0xC74B, 0x9FC0, + 0xC74C, 0xC0BD, 0xC74D, 0xC0BE, 0xC74E, 0x9FC1, 0xC74F, 0xC0BF, 0xC750, 0x9FC2, 0xC751, 0xC0C0, 0xC752, 0xC0C1, 0xC753, 0xC0C2, + 0xC754, 0xC0C3, 0xC755, 0xC0C4, 0xC756, 0xC0C5, 0xC757, 0xC0C6, 0xC758, 0xC0C7, 0xC759, 0x9FC3, 0xC75A, 0x9FC4, 0xC75B, 0x9FC5, + 0xC75C, 0xC0C8, 0xC75D, 0x9FC6, 0xC75E, 0x9FC7, 0xC75F, 0x9FC8, 0xC760, 0xC0C9, 0xC761, 0x9FC9, 0xC762, 0x9FCA, 0xC763, 0x9FCB, + 0xC764, 0x9FCC, 0xC765, 0x9FCD, 0xC766, 0x9FCE, 0xC767, 0x9FCF, 0xC768, 0xC0CA, 0xC769, 0x9FD0, 0xC76A, 0x9FD1, 0xC76B, 0xC0CB, + 0xC76C, 0x9FD2, 0xC76D, 0x9FD3, 0xC76E, 0x9FD4, 0xC76F, 0x9FD5, 0xC770, 0x9FD6, 0xC771, 0x9FD7, 0xC772, 0x9FD8, 0xC773, 0x9FD9, + 0xC774, 0xC0CC, 0xC775, 0xC0CD, 0xC776, 0x9FDA, 0xC777, 0x9FDB, 0xC778, 0xC0CE, 0xC779, 0x9FDC, 0xC77A, 0x9FDD, 0xC77B, 0x9FDE, + 0xC77C, 0xC0CF, 0xC77D, 0xC0D0, 0xC77E, 0xC0D1, 0xC77F, 0x9FDF, 0xC780, 0x9FE0, 0xC781, 0x9FE1, 0xC782, 0x9FE2, 0xC783, 0xC0D2, + 0xC784, 0xC0D3, 0xC785, 0xC0D4, 0xC786, 0x9FE3, 0xC787, 0xC0D5, 0xC788, 0xC0D6, 0xC789, 0xC0D7, 0xC78A, 0xC0D8, 0xC78B, 0x9FE4, + 0xC78C, 0x9FE5, 0xC78D, 0x9FE6, 0xC78E, 0xC0D9, 0xC78F, 0x9FE7, 0xC790, 0xC0DA, 0xC791, 0xC0DB, 0xC792, 0x9FE8, 0xC793, 0x9FE9, + 0xC794, 0xC0DC, 0xC795, 0x9FEA, 0xC796, 0xC0DD, 0xC797, 0xC0DE, 0xC798, 0xC0DF, 0xC799, 0x9FEB, 0xC79A, 0xC0E0, 0xC79B, 0x9FEC, + 0xC79C, 0x9FED, 0xC79D, 0x9FEE, 0xC79E, 0x9FEF, 0xC79F, 0x9FF0, 0xC7A0, 0xC0E1, 0xC7A1, 0xC0E2, 0xC7A2, 0x9FF1, 0xC7A3, 0xC0E3, + 0xC7A4, 0xC0E4, 0xC7A5, 0xC0E5, 0xC7A6, 0xC0E6, 0xC7A7, 0x9FF2, 0xC7A8, 0x9FF3, 0xC7A9, 0x9FF4, 0xC7AA, 0x9FF5, 0xC7AB, 0x9FF6, + 0xC7AC, 0xC0E7, 0xC7AD, 0xC0E8, 0xC7AE, 0x9FF7, 0xC7AF, 0x9FF8, 0xC7B0, 0xC0E9, 0xC7B1, 0x9FF9, 0xC7B2, 0x9FFA, 0xC7B3, 0x9FFB, + 0xC7B4, 0xC0EA, 0xC7B5, 0x9FFC, 0xC7B6, 0x9FFD, 0xC7B7, 0x9FFE, 0xC7B8, 0xA041, 0xC7B9, 0xA042, 0xC7BA, 0xA043, 0xC7BB, 0xA044, + 0xC7BC, 0xC0EB, 0xC7BD, 0xC0EC, 0xC7BE, 0xA045, 0xC7BF, 0xC0ED, 0xC7C0, 0xC0EE, 0xC7C1, 0xC0EF, 0xC7C2, 0xA046, 0xC7C3, 0xA047, + 0xC7C4, 0xA048, 0xC7C5, 0xA049, 0xC7C6, 0xA04A, 0xC7C7, 0xA04B, 0xC7C8, 0xC0F0, 0xC7C9, 0xC0F1, 0xC7CA, 0xA04C, 0xC7CB, 0xA04D, + 0xC7CC, 0xC0F2, 0xC7CD, 0xA04E, 0xC7CE, 0xC0F3, 0xC7CF, 0xA04F, 0xC7D0, 0xC0F4, 0xC7D1, 0xA050, 0xC7D2, 0xA051, 0xC7D3, 0xA052, + 0xC7D4, 0xA053, 0xC7D5, 0xA054, 0xC7D6, 0xA055, 0xC7D7, 0xA056, 0xC7D8, 0xC0F5, 0xC7D9, 0xA057, 0xC7DA, 0xA058, 0xC7DB, 0xA059, + 0xC7DC, 0xA05A, 0xC7DD, 0xC0F6, 0xC7DE, 0xA061, 0xC7DF, 0xA062, 0xC7E0, 0xA063, 0xC7E1, 0xA064, 0xC7E2, 0xA065, 0xC7E3, 0xA066, + 0xC7E4, 0xC0F7, 0xC7E5, 0xA067, 0xC7E6, 0xA068, 0xC7E7, 0xA069, 0xC7E8, 0xC0F8, 0xC7E9, 0xA06A, 0xC7EA, 0xA06B, 0xC7EB, 0xA06C, + 0xC7EC, 0xC0F9, 0xC7ED, 0xA06D, 0xC7EE, 0xA06E, 0xC7EF, 0xA06F, 0xC7F0, 0xA070, 0xC7F1, 0xA071, 0xC7F2, 0xA072, 0xC7F3, 0xA073, + 0xC7F4, 0xA074, 0xC7F5, 0xA075, 0xC7F6, 0xA076, 0xC7F7, 0xA077, 0xC7F8, 0xA078, 0xC7F9, 0xA079, 0xC7FA, 0xA07A, 0xC7FB, 0xA081, + 0xC7FC, 0xA082, 0xC7FD, 0xA083, 0xC7FE, 0xA084, 0xC7FF, 0xA085, 0xC800, 0xC0FA, 0xC801, 0xC0FB, 0xC802, 0xA086, 0xC803, 0xA087, + 0xC804, 0xC0FC, 0xC805, 0xA088, 0xC806, 0xA089, 0xC807, 0xA08A, 0xC808, 0xC0FD, 0xC809, 0xA08B, 0xC80A, 0xC0FE, 0xC80B, 0xA08C, + 0xC80C, 0xA08D, 0xC80D, 0xA08E, 0xC80E, 0xA08F, 0xC80F, 0xA090, 0xC810, 0xC1A1, 0xC811, 0xC1A2, 0xC812, 0xA091, 0xC813, 0xC1A3, + 0xC814, 0xA092, 0xC815, 0xC1A4, 0xC816, 0xC1A5, 0xC817, 0xA093, 0xC818, 0xA094, 0xC819, 0xA095, 0xC81A, 0xA096, 0xC81B, 0xA097, + 0xC81C, 0xC1A6, 0xC81D, 0xC1A7, 0xC81E, 0xA098, 0xC81F, 0xA099, 0xC820, 0xC1A8, 0xC821, 0xA09A, 0xC822, 0xA09B, 0xC823, 0xA09C, + 0xC824, 0xC1A9, 0xC825, 0xA09D, 0xC826, 0xA09E, 0xC827, 0xA09F, 0xC828, 0xA0A0, 0xC829, 0xA0A1, 0xC82A, 0xA0A2, 0xC82B, 0xA0A3, + 0xC82C, 0xC1AA, 0xC82D, 0xC1AB, 0xC82E, 0xA0A4, 0xC82F, 0xC1AC, 0xC830, 0xA0A5, 0xC831, 0xC1AD, 0xC832, 0xA0A6, 0xC833, 0xA0A7, + 0xC834, 0xA0A8, 0xC835, 0xA0A9, 0xC836, 0xA0AA, 0xC837, 0xA0AB, 0xC838, 0xC1AE, 0xC839, 0xA0AC, 0xC83A, 0xA0AD, 0xC83B, 0xA0AE, + 0xC83C, 0xC1AF, 0xC83D, 0xA0AF, 0xC83E, 0xA0B0, 0xC83F, 0xA0B1, 0xC840, 0xC1B0, 0xC841, 0xA0B2, 0xC842, 0xA0B3, 0xC843, 0xA0B4, + 0xC844, 0xA0B5, 0xC845, 0xA0B6, 0xC846, 0xA0B7, 0xC847, 0xA0B8, 0xC848, 0xC1B1, 0xC849, 0xC1B2, 0xC84A, 0xA0B9, 0xC84B, 0xA0BA, + 0xC84C, 0xC1B3, 0xC84D, 0xC1B4, 0xC84E, 0xA0BB, 0xC84F, 0xA0BC, 0xC850, 0xA0BD, 0xC851, 0xA0BE, 0xC852, 0xA0BF, 0xC853, 0xA0C0, + 0xC854, 0xC1B5, 0xC855, 0xA0C1, 0xC856, 0xA0C2, 0xC857, 0xA0C3, 0xC858, 0xA0C4, 0xC859, 0xA0C5, 0xC85A, 0xA0C6, 0xC85B, 0xA0C7, + 0xC85C, 0xA0C8, 0xC85D, 0xA0C9, 0xC85E, 0xA0CA, 0xC85F, 0xA0CB, 0xC860, 0xA0CC, 0xC861, 0xA0CD, 0xC862, 0xA0CE, 0xC863, 0xA0CF, + 0xC864, 0xA0D0, 0xC865, 0xA0D1, 0xC866, 0xA0D2, 0xC867, 0xA0D3, 0xC868, 0xA0D4, 0xC869, 0xA0D5, 0xC86A, 0xA0D6, 0xC86B, 0xA0D7, + 0xC86C, 0xA0D8, 0xC86D, 0xA0D9, 0xC86E, 0xA0DA, 0xC86F, 0xA0DB, 0xC870, 0xC1B6, 0xC871, 0xC1B7, 0xC872, 0xA0DC, 0xC873, 0xA0DD, + 0xC874, 0xC1B8, 0xC875, 0xA0DE, 0xC876, 0xA0DF, 0xC877, 0xA0E0, 0xC878, 0xC1B9, 0xC879, 0xA0E1, 0xC87A, 0xC1BA, 0xC87B, 0xA0E2, + 0xC87C, 0xA0E3, 0xC87D, 0xA0E4, 0xC87E, 0xA0E5, 0xC87F, 0xA0E6, 0xC880, 0xC1BB, 0xC881, 0xC1BC, 0xC882, 0xA0E7, 0xC883, 0xC1BD, + 0xC884, 0xA0E8, 0xC885, 0xC1BE, 0xC886, 0xC1BF, 0xC887, 0xC1C0, 0xC888, 0xA0E9, 0xC889, 0xA0EA, 0xC88A, 0xA0EB, 0xC88B, 0xC1C1, + 0xC88C, 0xC1C2, 0xC88D, 0xC1C3, 0xC88E, 0xA0EC, 0xC88F, 0xA0ED, 0xC890, 0xA0EE, 0xC891, 0xA0EF, 0xC892, 0xA0F0, 0xC893, 0xA0F1, + 0xC894, 0xC1C4, 0xC895, 0xA0F2, 0xC896, 0xA0F3, 0xC897, 0xA0F4, 0xC898, 0xA0F5, 0xC899, 0xA0F6, 0xC89A, 0xA0F7, 0xC89B, 0xA0F8, + 0xC89C, 0xA0F9, 0xC89D, 0xC1C5, 0xC89E, 0xA0FA, 0xC89F, 0xC1C6, 0xC8A0, 0xA0FB, 0xC8A1, 0xC1C7, 0xC8A2, 0xA0FC, 0xC8A3, 0xA0FD, + 0xC8A4, 0xA0FE, 0xC8A5, 0xA141, 0xC8A6, 0xA142, 0xC8A7, 0xA143, 0xC8A8, 0xC1C8, 0xC8A9, 0xA144, 0xC8AA, 0xA145, 0xC8AB, 0xA146, + 0xC8AC, 0xA147, 0xC8AD, 0xA148, 0xC8AE, 0xA149, 0xC8AF, 0xA14A, 0xC8B0, 0xA14B, 0xC8B1, 0xA14C, 0xC8B2, 0xA14D, 0xC8B3, 0xA14E, + 0xC8B4, 0xA14F, 0xC8B5, 0xA150, 0xC8B6, 0xA151, 0xC8B7, 0xA152, 0xC8B8, 0xA153, 0xC8B9, 0xA154, 0xC8BA, 0xA155, 0xC8BB, 0xA156, + 0xC8BC, 0xC1C9, 0xC8BD, 0xC1CA, 0xC8BE, 0xA157, 0xC8BF, 0xA158, 0xC8C0, 0xA159, 0xC8C1, 0xA15A, 0xC8C2, 0xA161, 0xC8C3, 0xA162, + 0xC8C4, 0xC1CB, 0xC8C5, 0xA163, 0xC8C6, 0xA164, 0xC8C7, 0xA165, 0xC8C8, 0xC1CC, 0xC8C9, 0xA166, 0xC8CA, 0xA167, 0xC8CB, 0xA168, + 0xC8CC, 0xC1CD, 0xC8CD, 0xA169, 0xC8CE, 0xA16A, 0xC8CF, 0xA16B, 0xC8D0, 0xA16C, 0xC8D1, 0xA16D, 0xC8D2, 0xA16E, 0xC8D3, 0xA16F, + 0xC8D4, 0xC1CE, 0xC8D5, 0xC1CF, 0xC8D6, 0xA170, 0xC8D7, 0xC1D0, 0xC8D8, 0xA171, 0xC8D9, 0xC1D1, 0xC8DA, 0xA172, 0xC8DB, 0xA173, + 0xC8DC, 0xA174, 0xC8DD, 0xA175, 0xC8DE, 0xA176, 0xC8DF, 0xA177, 0xC8E0, 0xC1D2, 0xC8E1, 0xC1D3, 0xC8E2, 0xA178, 0xC8E3, 0xA179, + 0xC8E4, 0xC1D4, 0xC8E5, 0xA17A, 0xC8E6, 0xA181, 0xC8E7, 0xA182, 0xC8E8, 0xA183, 0xC8E9, 0xA184, 0xC8EA, 0xA185, 0xC8EB, 0xA186, + 0xC8EC, 0xA187, 0xC8ED, 0xA188, 0xC8EE, 0xA189, 0xC8EF, 0xA18A, 0xC8F0, 0xA18B, 0xC8F1, 0xA18C, 0xC8F2, 0xA18D, 0xC8F3, 0xA18E, + 0xC8F4, 0xA18F, 0xC8F5, 0xC1D5, 0xC8F6, 0xA190, 0xC8F7, 0xA191, 0xC8F8, 0xA192, 0xC8F9, 0xA193, 0xC8FA, 0xA194, 0xC8FB, 0xA195, + 0xC8FC, 0xC1D6, 0xC8FD, 0xC1D7, 0xC8FE, 0xA196, 0xC8FF, 0xA197, 0xC900, 0xC1D8, 0xC901, 0xA198, 0xC902, 0xA199, 0xC903, 0xA19A, + 0xC904, 0xC1D9, 0xC905, 0xC1DA, 0xC906, 0xC1DB, 0xC907, 0xA19B, 0xC908, 0xA19C, 0xC909, 0xA19D, 0xC90A, 0xA19E, 0xC90B, 0xA19F, + 0xC90C, 0xC1DC, 0xC90D, 0xC1DD, 0xC90E, 0xA1A0, 0xC90F, 0xC1DE, 0xC910, 0xA241, 0xC911, 0xC1DF, 0xC912, 0xA242, 0xC913, 0xA243, + 0xC914, 0xA244, 0xC915, 0xA245, 0xC916, 0xA246, 0xC917, 0xA247, 0xC918, 0xC1E0, 0xC919, 0xA248, 0xC91A, 0xA249, 0xC91B, 0xA24A, + 0xC91C, 0xA24B, 0xC91D, 0xA24C, 0xC91E, 0xA24D, 0xC91F, 0xA24E, 0xC920, 0xA24F, 0xC921, 0xA250, 0xC922, 0xA251, 0xC923, 0xA252, + 0xC924, 0xA253, 0xC925, 0xA254, 0xC926, 0xA255, 0xC927, 0xA256, 0xC928, 0xA257, 0xC929, 0xA258, 0xC92A, 0xA259, 0xC92B, 0xA25A, + 0xC92C, 0xC1E1, 0xC92D, 0xA261, 0xC92E, 0xA262, 0xC92F, 0xA263, 0xC930, 0xA264, 0xC931, 0xA265, 0xC932, 0xA266, 0xC933, 0xA267, + 0xC934, 0xC1E2, 0xC935, 0xA268, 0xC936, 0xA269, 0xC937, 0xA26A, 0xC938, 0xA26B, 0xC939, 0xA26C, 0xC93A, 0xA26D, 0xC93B, 0xA26E, + 0xC93C, 0xA26F, 0xC93D, 0xA270, 0xC93E, 0xA271, 0xC93F, 0xA272, 0xC940, 0xA273, 0xC941, 0xA274, 0xC942, 0xA275, 0xC943, 0xA276, + 0xC944, 0xA277, 0xC945, 0xA278, 0xC946, 0xA279, 0xC947, 0xA27A, 0xC948, 0xA281, 0xC949, 0xA282, 0xC94A, 0xA283, 0xC94B, 0xA284, + 0xC94C, 0xA285, 0xC94D, 0xA286, 0xC94E, 0xA287, 0xC94F, 0xA288, 0xC950, 0xC1E3, 0xC951, 0xC1E4, 0xC952, 0xA289, 0xC953, 0xA28A, + 0xC954, 0xC1E5, 0xC955, 0xA28B, 0xC956, 0xA28C, 0xC957, 0xA28D, 0xC958, 0xC1E6, 0xC959, 0xA28E, 0xC95A, 0xA28F, 0xC95B, 0xA290, + 0xC95C, 0xA291, 0xC95D, 0xA292, 0xC95E, 0xA293, 0xC95F, 0xA294, 0xC960, 0xC1E7, 0xC961, 0xC1E8, 0xC962, 0xA295, 0xC963, 0xC1E9, + 0xC964, 0xA296, 0xC965, 0xA297, 0xC966, 0xA298, 0xC967, 0xA299, 0xC968, 0xA29A, 0xC969, 0xA29B, 0xC96A, 0xA29C, 0xC96B, 0xA29D, + 0xC96C, 0xC1EA, 0xC96D, 0xA29E, 0xC96E, 0xA29F, 0xC96F, 0xA2A0, 0xC970, 0xC1EB, 0xC971, 0xA341, 0xC972, 0xA342, 0xC973, 0xA343, + 0xC974, 0xC1EC, 0xC975, 0xA344, 0xC976, 0xA345, 0xC977, 0xA346, 0xC978, 0xA347, 0xC979, 0xA348, 0xC97A, 0xA349, 0xC97B, 0xA34A, + 0xC97C, 0xC1ED, 0xC97D, 0xA34B, 0xC97E, 0xA34C, 0xC97F, 0xA34D, 0xC980, 0xA34E, 0xC981, 0xA34F, 0xC982, 0xA350, 0xC983, 0xA351, + 0xC984, 0xA352, 0xC985, 0xA353, 0xC986, 0xA354, 0xC987, 0xA355, 0xC988, 0xC1EE, 0xC989, 0xC1EF, 0xC98A, 0xA356, 0xC98B, 0xA357, + 0xC98C, 0xC1F0, 0xC98D, 0xA358, 0xC98E, 0xA359, 0xC98F, 0xA35A, 0xC990, 0xC1F1, 0xC991, 0xA361, 0xC992, 0xA362, 0xC993, 0xA363, + 0xC994, 0xA364, 0xC995, 0xA365, 0xC996, 0xA366, 0xC997, 0xA367, 0xC998, 0xC1F2, 0xC999, 0xC1F3, 0xC99A, 0xA368, 0xC99B, 0xC1F4, + 0xC99C, 0xA369, 0xC99D, 0xC1F5, 0xC99E, 0xA36A, 0xC99F, 0xA36B, 0xC9A0, 0xA36C, 0xC9A1, 0xA36D, 0xC9A2, 0xA36E, 0xC9A3, 0xA36F, + 0xC9A4, 0xA370, 0xC9A5, 0xA371, 0xC9A6, 0xA372, 0xC9A7, 0xA373, 0xC9A8, 0xA374, 0xC9A9, 0xA375, 0xC9AA, 0xA376, 0xC9AB, 0xA377, + 0xC9AC, 0xA378, 0xC9AD, 0xA379, 0xC9AE, 0xA37A, 0xC9AF, 0xA381, 0xC9B0, 0xA382, 0xC9B1, 0xA383, 0xC9B2, 0xA384, 0xC9B3, 0xA385, + 0xC9B4, 0xA386, 0xC9B5, 0xA387, 0xC9B6, 0xA388, 0xC9B7, 0xA389, 0xC9B8, 0xA38A, 0xC9B9, 0xA38B, 0xC9BA, 0xA38C, 0xC9BB, 0xA38D, + 0xC9BC, 0xA38E, 0xC9BD, 0xA38F, 0xC9BE, 0xA390, 0xC9BF, 0xA391, 0xC9C0, 0xC1F6, 0xC9C1, 0xC1F7, 0xC9C2, 0xA392, 0xC9C3, 0xA393, + 0xC9C4, 0xC1F8, 0xC9C5, 0xA394, 0xC9C6, 0xA395, 0xC9C7, 0xC1F9, 0xC9C8, 0xC1FA, 0xC9C9, 0xA396, 0xC9CA, 0xC1FB, 0xC9CB, 0xA397, + 0xC9CC, 0xA398, 0xC9CD, 0xA399, 0xC9CE, 0xA39A, 0xC9CF, 0xA39B, 0xC9D0, 0xC1FC, 0xC9D1, 0xC1FD, 0xC9D2, 0xA39C, 0xC9D3, 0xC1FE, + 0xC9D4, 0xA39D, 0xC9D5, 0xC2A1, 0xC9D6, 0xC2A2, 0xC9D7, 0xA39E, 0xC9D8, 0xA39F, 0xC9D9, 0xC2A3, 0xC9DA, 0xC2A4, 0xC9DB, 0xA3A0, + 0xC9DC, 0xC2A5, 0xC9DD, 0xC2A6, 0xC9DE, 0xA441, 0xC9DF, 0xA442, 0xC9E0, 0xC2A7, 0xC9E1, 0xA443, 0xC9E2, 0xC2A8, 0xC9E3, 0xA444, + 0xC9E4, 0xC2A9, 0xC9E5, 0xA445, 0xC9E6, 0xA446, 0xC9E7, 0xC2AA, 0xC9E8, 0xA447, 0xC9E9, 0xA448, 0xC9EA, 0xA449, 0xC9EB, 0xA44A, + 0xC9EC, 0xC2AB, 0xC9ED, 0xC2AC, 0xC9EE, 0xA44B, 0xC9EF, 0xC2AD, 0xC9F0, 0xC2AE, 0xC9F1, 0xC2AF, 0xC9F2, 0xA44C, 0xC9F3, 0xA44D, + 0xC9F4, 0xA44E, 0xC9F5, 0xA44F, 0xC9F6, 0xA450, 0xC9F7, 0xA451, 0xC9F8, 0xC2B0, 0xC9F9, 0xC2B1, 0xC9FA, 0xA452, 0xC9FB, 0xA453, + 0xC9FC, 0xC2B2, 0xC9FD, 0xA454, 0xC9FE, 0xA455, 0xC9FF, 0xA456, 0xCA00, 0xC2B3, 0xCA01, 0xA457, 0xCA02, 0xA458, 0xCA03, 0xA459, + 0xCA04, 0xA45A, 0xCA05, 0xA461, 0xCA06, 0xA462, 0xCA07, 0xA463, 0xCA08, 0xC2B4, 0xCA09, 0xC2B5, 0xCA0A, 0xA464, 0xCA0B, 0xC2B6, + 0xCA0C, 0xC2B7, 0xCA0D, 0xC2B8, 0xCA0E, 0xA465, 0xCA0F, 0xA466, 0xCA10, 0xA467, 0xCA11, 0xA468, 0xCA12, 0xA469, 0xCA13, 0xA46A, + 0xCA14, 0xC2B9, 0xCA15, 0xA46B, 0xCA16, 0xA46C, 0xCA17, 0xA46D, 0xCA18, 0xC2BA, 0xCA19, 0xA46E, 0xCA1A, 0xA46F, 0xCA1B, 0xA470, + 0xCA1C, 0xA471, 0xCA1D, 0xA472, 0xCA1E, 0xA473, 0xCA1F, 0xA474, 0xCA20, 0xA475, 0xCA21, 0xA476, 0xCA22, 0xA477, 0xCA23, 0xA478, + 0xCA24, 0xA479, 0xCA25, 0xA47A, 0xCA26, 0xA481, 0xCA27, 0xA482, 0xCA28, 0xA483, 0xCA29, 0xC2BB, 0xCA2A, 0xA484, 0xCA2B, 0xA485, + 0xCA2C, 0xA486, 0xCA2D, 0xA487, 0xCA2E, 0xA488, 0xCA2F, 0xA489, 0xCA30, 0xA48A, 0xCA31, 0xA48B, 0xCA32, 0xA48C, 0xCA33, 0xA48D, + 0xCA34, 0xA48E, 0xCA35, 0xA48F, 0xCA36, 0xA490, 0xCA37, 0xA491, 0xCA38, 0xA492, 0xCA39, 0xA493, 0xCA3A, 0xA494, 0xCA3B, 0xA495, + 0xCA3C, 0xA496, 0xCA3D, 0xA497, 0xCA3E, 0xA498, 0xCA3F, 0xA499, 0xCA40, 0xA49A, 0xCA41, 0xA49B, 0xCA42, 0xA49C, 0xCA43, 0xA49D, + 0xCA44, 0xA49E, 0xCA45, 0xA49F, 0xCA46, 0xA4A0, 0xCA47, 0xA541, 0xCA48, 0xA542, 0xCA49, 0xA543, 0xCA4A, 0xA544, 0xCA4B, 0xA545, + 0xCA4C, 0xC2BC, 0xCA4D, 0xC2BD, 0xCA4E, 0xA546, 0xCA4F, 0xA547, 0xCA50, 0xC2BE, 0xCA51, 0xA548, 0xCA52, 0xA549, 0xCA53, 0xA54A, + 0xCA54, 0xC2BF, 0xCA55, 0xA54B, 0xCA56, 0xA54C, 0xCA57, 0xA54D, 0xCA58, 0xA54E, 0xCA59, 0xA54F, 0xCA5A, 0xA550, 0xCA5B, 0xA551, + 0xCA5C, 0xC2C0, 0xCA5D, 0xC2C1, 0xCA5E, 0xA552, 0xCA5F, 0xC2C2, 0xCA60, 0xC2C3, 0xCA61, 0xC2C4, 0xCA62, 0xA553, 0xCA63, 0xA554, + 0xCA64, 0xA555, 0xCA65, 0xA556, 0xCA66, 0xA557, 0xCA67, 0xA558, 0xCA68, 0xC2C5, 0xCA69, 0xA559, 0xCA6A, 0xA55A, 0xCA6B, 0xA561, + 0xCA6C, 0xA562, 0xCA6D, 0xA563, 0xCA6E, 0xA564, 0xCA6F, 0xA565, 0xCA70, 0xA566, 0xCA71, 0xA567, 0xCA72, 0xA568, 0xCA73, 0xA569, + 0xCA74, 0xA56A, 0xCA75, 0xA56B, 0xCA76, 0xA56C, 0xCA77, 0xA56D, 0xCA78, 0xA56E, 0xCA79, 0xA56F, 0xCA7A, 0xA570, 0xCA7B, 0xA571, + 0xCA7C, 0xA572, 0xCA7D, 0xC2C6, 0xCA7E, 0xA573, 0xCA7F, 0xA574, 0xCA80, 0xA575, 0xCA81, 0xA576, 0xCA82, 0xA577, 0xCA83, 0xA578, + 0xCA84, 0xC2C7, 0xCA85, 0xA579, 0xCA86, 0xA57A, 0xCA87, 0xA581, 0xCA88, 0xA582, 0xCA89, 0xA583, 0xCA8A, 0xA584, 0xCA8B, 0xA585, + 0xCA8C, 0xA586, 0xCA8D, 0xA587, 0xCA8E, 0xA588, 0xCA8F, 0xA589, 0xCA90, 0xA58A, 0xCA91, 0xA58B, 0xCA92, 0xA58C, 0xCA93, 0xA58D, + 0xCA94, 0xA58E, 0xCA95, 0xA58F, 0xCA96, 0xA590, 0xCA97, 0xA591, 0xCA98, 0xC2C8, 0xCA99, 0xA592, 0xCA9A, 0xA593, 0xCA9B, 0xA594, + 0xCA9C, 0xA595, 0xCA9D, 0xA596, 0xCA9E, 0xA597, 0xCA9F, 0xA598, 0xCAA0, 0xA599, 0xCAA1, 0xA59A, 0xCAA2, 0xA59B, 0xCAA3, 0xA59C, + 0xCAA4, 0xA59D, 0xCAA5, 0xA59E, 0xCAA6, 0xA59F, 0xCAA7, 0xA5A0, 0xCAA8, 0xA641, 0xCAA9, 0xA642, 0xCAAA, 0xA643, 0xCAAB, 0xA644, + 0xCAAC, 0xA645, 0xCAAD, 0xA646, 0xCAAE, 0xA647, 0xCAAF, 0xA648, 0xCAB0, 0xA649, 0xCAB1, 0xA64A, 0xCAB2, 0xA64B, 0xCAB3, 0xA64C, + 0xCAB4, 0xA64D, 0xCAB5, 0xA64E, 0xCAB6, 0xA64F, 0xCAB7, 0xA650, 0xCAB8, 0xA651, 0xCAB9, 0xA652, 0xCABA, 0xA653, 0xCABB, 0xA654, + 0xCABC, 0xC2C9, 0xCABD, 0xC2CA, 0xCABE, 0xA655, 0xCABF, 0xA656, 0xCAC0, 0xC2CB, 0xCAC1, 0xA657, 0xCAC2, 0xA658, 0xCAC3, 0xA659, + 0xCAC4, 0xC2CC, 0xCAC5, 0xA65A, 0xCAC6, 0xA661, 0xCAC7, 0xA662, 0xCAC8, 0xA663, 0xCAC9, 0xA664, 0xCACA, 0xA665, 0xCACB, 0xA666, + 0xCACC, 0xC2CD, 0xCACD, 0xC2CE, 0xCACE, 0xA667, 0xCACF, 0xC2CF, 0xCAD0, 0xA668, 0xCAD1, 0xC2D0, 0xCAD2, 0xA669, 0xCAD3, 0xC2D1, + 0xCAD4, 0xA66A, 0xCAD5, 0xA66B, 0xCAD6, 0xA66C, 0xCAD7, 0xA66D, 0xCAD8, 0xC2D2, 0xCAD9, 0xC2D3, 0xCADA, 0xA66E, 0xCADB, 0xA66F, + 0xCADC, 0xA670, 0xCADD, 0xA671, 0xCADE, 0xA672, 0xCADF, 0xA673, 0xCAE0, 0xC2D4, 0xCAE1, 0xA674, 0xCAE2, 0xA675, 0xCAE3, 0xA676, + 0xCAE4, 0xA677, 0xCAE5, 0xA678, 0xCAE6, 0xA679, 0xCAE7, 0xA67A, 0xCAE8, 0xA681, 0xCAE9, 0xA682, 0xCAEA, 0xA683, 0xCAEB, 0xA684, + 0xCAEC, 0xC2D5, 0xCAED, 0xA685, 0xCAEE, 0xA686, 0xCAEF, 0xA687, 0xCAF0, 0xA688, 0xCAF1, 0xA689, 0xCAF2, 0xA68A, 0xCAF3, 0xA68B, + 0xCAF4, 0xC2D6, 0xCAF5, 0xA68C, 0xCAF6, 0xA68D, 0xCAF7, 0xA68E, 0xCAF8, 0xA68F, 0xCAF9, 0xA690, 0xCAFA, 0xA691, 0xCAFB, 0xA692, + 0xCAFC, 0xA693, 0xCAFD, 0xA694, 0xCAFE, 0xA695, 0xCAFF, 0xA696, 0xCB00, 0xA697, 0xCB01, 0xA698, 0xCB02, 0xA699, 0xCB03, 0xA69A, + 0xCB04, 0xA69B, 0xCB05, 0xA69C, 0xCB06, 0xA69D, 0xCB07, 0xA69E, 0xCB08, 0xC2D7, 0xCB09, 0xA69F, 0xCB0A, 0xA6A0, 0xCB0B, 0xA741, + 0xCB0C, 0xA742, 0xCB0D, 0xA743, 0xCB0E, 0xA744, 0xCB0F, 0xA745, 0xCB10, 0xC2D8, 0xCB11, 0xA746, 0xCB12, 0xA747, 0xCB13, 0xA748, + 0xCB14, 0xC2D9, 0xCB15, 0xA749, 0xCB16, 0xA74A, 0xCB17, 0xA74B, 0xCB18, 0xC2DA, 0xCB19, 0xA74C, 0xCB1A, 0xA74D, 0xCB1B, 0xA74E, + 0xCB1C, 0xA74F, 0xCB1D, 0xA750, 0xCB1E, 0xA751, 0xCB1F, 0xA752, 0xCB20, 0xC2DB, 0xCB21, 0xC2DC, 0xCB22, 0xA753, 0xCB23, 0xA754, + 0xCB24, 0xA755, 0xCB25, 0xA756, 0xCB26, 0xA757, 0xCB27, 0xA758, 0xCB28, 0xA759, 0xCB29, 0xA75A, 0xCB2A, 0xA761, 0xCB2B, 0xA762, + 0xCB2C, 0xA763, 0xCB2D, 0xA764, 0xCB2E, 0xA765, 0xCB2F, 0xA766, 0xCB30, 0xA767, 0xCB31, 0xA768, 0xCB32, 0xA769, 0xCB33, 0xA76A, + 0xCB34, 0xA76B, 0xCB35, 0xA76C, 0xCB36, 0xA76D, 0xCB37, 0xA76E, 0xCB38, 0xA76F, 0xCB39, 0xA770, 0xCB3A, 0xA771, 0xCB3B, 0xA772, + 0xCB3C, 0xA773, 0xCB3D, 0xA774, 0xCB3E, 0xA775, 0xCB3F, 0xA776, 0xCB40, 0xA777, 0xCB41, 0xC2DD, 0xCB42, 0xA778, 0xCB43, 0xA779, + 0xCB44, 0xA77A, 0xCB45, 0xA781, 0xCB46, 0xA782, 0xCB47, 0xA783, 0xCB48, 0xC2DE, 0xCB49, 0xC2DF, 0xCB4A, 0xA784, 0xCB4B, 0xA785, + 0xCB4C, 0xC2E0, 0xCB4D, 0xA786, 0xCB4E, 0xA787, 0xCB4F, 0xA788, 0xCB50, 0xC2E1, 0xCB51, 0xA789, 0xCB52, 0xA78A, 0xCB53, 0xA78B, + 0xCB54, 0xA78C, 0xCB55, 0xA78D, 0xCB56, 0xA78E, 0xCB57, 0xA78F, 0xCB58, 0xC2E2, 0xCB59, 0xC2E3, 0xCB5A, 0xA790, 0xCB5B, 0xA791, + 0xCB5C, 0xA792, 0xCB5D, 0xC2E4, 0xCB5E, 0xA793, 0xCB5F, 0xA794, 0xCB60, 0xA795, 0xCB61, 0xA796, 0xCB62, 0xA797, 0xCB63, 0xA798, + 0xCB64, 0xC2E5, 0xCB65, 0xA799, 0xCB66, 0xA79A, 0xCB67, 0xA79B, 0xCB68, 0xA79C, 0xCB69, 0xA79D, 0xCB6A, 0xA79E, 0xCB6B, 0xA79F, + 0xCB6C, 0xA7A0, 0xCB6D, 0xA841, 0xCB6E, 0xA842, 0xCB6F, 0xA843, 0xCB70, 0xA844, 0xCB71, 0xA845, 0xCB72, 0xA846, 0xCB73, 0xA847, + 0xCB74, 0xA848, 0xCB75, 0xA849, 0xCB76, 0xA84A, 0xCB77, 0xA84B, 0xCB78, 0xC2E6, 0xCB79, 0xC2E7, 0xCB7A, 0xA84C, 0xCB7B, 0xA84D, + 0xCB7C, 0xA84E, 0xCB7D, 0xA84F, 0xCB7E, 0xA850, 0xCB7F, 0xA851, 0xCB80, 0xA852, 0xCB81, 0xA853, 0xCB82, 0xA854, 0xCB83, 0xA855, + 0xCB84, 0xA856, 0xCB85, 0xA857, 0xCB86, 0xA858, 0xCB87, 0xA859, 0xCB88, 0xA85A, 0xCB89, 0xA861, 0xCB8A, 0xA862, 0xCB8B, 0xA863, + 0xCB8C, 0xA864, 0xCB8D, 0xA865, 0xCB8E, 0xA866, 0xCB8F, 0xA867, 0xCB90, 0xA868, 0xCB91, 0xA869, 0xCB92, 0xA86A, 0xCB93, 0xA86B, + 0xCB94, 0xA86C, 0xCB95, 0xA86D, 0xCB96, 0xA86E, 0xCB97, 0xA86F, 0xCB98, 0xA870, 0xCB99, 0xA871, 0xCB9A, 0xA872, 0xCB9B, 0xA873, + 0xCB9C, 0xC2E8, 0xCB9D, 0xA874, 0xCB9E, 0xA875, 0xCB9F, 0xA876, 0xCBA0, 0xA877, 0xCBA1, 0xA878, 0xCBA2, 0xA879, 0xCBA3, 0xA87A, + 0xCBA4, 0xA881, 0xCBA5, 0xA882, 0xCBA6, 0xA883, 0xCBA7, 0xA884, 0xCBA8, 0xA885, 0xCBA9, 0xA886, 0xCBAA, 0xA887, 0xCBAB, 0xA888, + 0xCBAC, 0xA889, 0xCBAD, 0xA88A, 0xCBAE, 0xA88B, 0xCBAF, 0xA88C, 0xCBB0, 0xA88D, 0xCBB1, 0xA88E, 0xCBB2, 0xA88F, 0xCBB3, 0xA890, + 0xCBB4, 0xA891, 0xCBB5, 0xA892, 0xCBB6, 0xA893, 0xCBB7, 0xA894, 0xCBB8, 0xC2E9, 0xCBB9, 0xA895, 0xCBBA, 0xA896, 0xCBBB, 0xA897, + 0xCBBC, 0xA898, 0xCBBD, 0xA899, 0xCBBE, 0xA89A, 0xCBBF, 0xA89B, 0xCBC0, 0xA89C, 0xCBC1, 0xA89D, 0xCBC2, 0xA89E, 0xCBC3, 0xA89F, + 0xCBC4, 0xA8A0, 0xCBC5, 0xA941, 0xCBC6, 0xA942, 0xCBC7, 0xA943, 0xCBC8, 0xA944, 0xCBC9, 0xA945, 0xCBCA, 0xA946, 0xCBCB, 0xA947, + 0xCBCC, 0xA948, 0xCBCD, 0xA949, 0xCBCE, 0xA94A, 0xCBCF, 0xA94B, 0xCBD0, 0xA94C, 0xCBD1, 0xA94D, 0xCBD2, 0xA94E, 0xCBD3, 0xA94F, + 0xCBD4, 0xC2EA, 0xCBD5, 0xA950, 0xCBD6, 0xA951, 0xCBD7, 0xA952, 0xCBD8, 0xA953, 0xCBD9, 0xA954, 0xCBDA, 0xA955, 0xCBDB, 0xA956, + 0xCBDC, 0xA957, 0xCBDD, 0xA958, 0xCBDE, 0xA959, 0xCBDF, 0xA95A, 0xCBE0, 0xA961, 0xCBE1, 0xA962, 0xCBE2, 0xA963, 0xCBE3, 0xA964, + 0xCBE4, 0xC2EB, 0xCBE5, 0xA965, 0xCBE6, 0xA966, 0xCBE7, 0xC2EC, 0xCBE8, 0xA967, 0xCBE9, 0xC2ED, 0xCBEA, 0xA968, 0xCBEB, 0xA969, + 0xCBEC, 0xA96A, 0xCBED, 0xA96B, 0xCBEE, 0xA96C, 0xCBEF, 0xA96D, 0xCBF0, 0xA96E, 0xCBF1, 0xA96F, 0xCBF2, 0xA970, 0xCBF3, 0xA971, + 0xCBF4, 0xA972, 0xCBF5, 0xA973, 0xCBF6, 0xA974, 0xCBF7, 0xA975, 0xCBF8, 0xA976, 0xCBF9, 0xA977, 0xCBFA, 0xA978, 0xCBFB, 0xA979, + 0xCBFC, 0xA97A, 0xCBFD, 0xA981, 0xCBFE, 0xA982, 0xCBFF, 0xA983, 0xCC00, 0xA984, 0xCC01, 0xA985, 0xCC02, 0xA986, 0xCC03, 0xA987, + 0xCC04, 0xA988, 0xCC05, 0xA989, 0xCC06, 0xA98A, 0xCC07, 0xA98B, 0xCC08, 0xA98C, 0xCC09, 0xA98D, 0xCC0A, 0xA98E, 0xCC0B, 0xA98F, + 0xCC0C, 0xC2EE, 0xCC0D, 0xC2EF, 0xCC0E, 0xA990, 0xCC0F, 0xA991, 0xCC10, 0xC2F0, 0xCC11, 0xA992, 0xCC12, 0xA993, 0xCC13, 0xA994, + 0xCC14, 0xC2F1, 0xCC15, 0xA995, 0xCC16, 0xA996, 0xCC17, 0xA997, 0xCC18, 0xA998, 0xCC19, 0xA999, 0xCC1A, 0xA99A, 0xCC1B, 0xA99B, + 0xCC1C, 0xC2F2, 0xCC1D, 0xC2F3, 0xCC1E, 0xA99C, 0xCC1F, 0xA99D, 0xCC20, 0xA99E, 0xCC21, 0xC2F4, 0xCC22, 0xC2F5, 0xCC23, 0xA99F, + 0xCC24, 0xA9A0, 0xCC25, 0xAA41, 0xCC26, 0xAA42, 0xCC27, 0xC2F6, 0xCC28, 0xC2F7, 0xCC29, 0xC2F8, 0xCC2A, 0xAA43, 0xCC2B, 0xAA44, + 0xCC2C, 0xC2F9, 0xCC2D, 0xAA45, 0xCC2E, 0xC2FA, 0xCC2F, 0xAA46, 0xCC30, 0xC2FB, 0xCC31, 0xAA47, 0xCC32, 0xAA48, 0xCC33, 0xAA49, + 0xCC34, 0xAA4A, 0xCC35, 0xAA4B, 0xCC36, 0xAA4C, 0xCC37, 0xAA4D, 0xCC38, 0xC2FC, 0xCC39, 0xC2FD, 0xCC3A, 0xAA4E, 0xCC3B, 0xC2FE, + 0xCC3C, 0xC3A1, 0xCC3D, 0xC3A2, 0xCC3E, 0xC3A3, 0xCC3F, 0xAA4F, 0xCC40, 0xAA50, 0xCC41, 0xAA51, 0xCC42, 0xAA52, 0xCC43, 0xAA53, + 0xCC44, 0xC3A4, 0xCC45, 0xC3A5, 0xCC46, 0xAA54, 0xCC47, 0xAA55, 0xCC48, 0xC3A6, 0xCC49, 0xAA56, 0xCC4A, 0xAA57, 0xCC4B, 0xAA58, + 0xCC4C, 0xC3A7, 0xCC4D, 0xAA59, 0xCC4E, 0xAA5A, 0xCC4F, 0xAA61, 0xCC50, 0xAA62, 0xCC51, 0xAA63, 0xCC52, 0xAA64, 0xCC53, 0xAA65, + 0xCC54, 0xC3A8, 0xCC55, 0xC3A9, 0xCC56, 0xAA66, 0xCC57, 0xC3AA, 0xCC58, 0xC3AB, 0xCC59, 0xC3AC, 0xCC5A, 0xAA67, 0xCC5B, 0xAA68, + 0xCC5C, 0xAA69, 0xCC5D, 0xAA6A, 0xCC5E, 0xAA6B, 0xCC5F, 0xAA6C, 0xCC60, 0xC3AD, 0xCC61, 0xAA6D, 0xCC62, 0xAA6E, 0xCC63, 0xAA6F, + 0xCC64, 0xC3AE, 0xCC65, 0xAA70, 0xCC66, 0xC3AF, 0xCC67, 0xAA71, 0xCC68, 0xC3B0, 0xCC69, 0xAA72, 0xCC6A, 0xAA73, 0xCC6B, 0xAA74, + 0xCC6C, 0xAA75, 0xCC6D, 0xAA76, 0xCC6E, 0xAA77, 0xCC6F, 0xAA78, 0xCC70, 0xC3B1, 0xCC71, 0xAA79, 0xCC72, 0xAA7A, 0xCC73, 0xAA81, + 0xCC74, 0xAA82, 0xCC75, 0xC3B2, 0xCC76, 0xAA83, 0xCC77, 0xAA84, 0xCC78, 0xAA85, 0xCC79, 0xAA86, 0xCC7A, 0xAA87, 0xCC7B, 0xAA88, + 0xCC7C, 0xAA89, 0xCC7D, 0xAA8A, 0xCC7E, 0xAA8B, 0xCC7F, 0xAA8C, 0xCC80, 0xAA8D, 0xCC81, 0xAA8E, 0xCC82, 0xAA8F, 0xCC83, 0xAA90, + 0xCC84, 0xAA91, 0xCC85, 0xAA92, 0xCC86, 0xAA93, 0xCC87, 0xAA94, 0xCC88, 0xAA95, 0xCC89, 0xAA96, 0xCC8A, 0xAA97, 0xCC8B, 0xAA98, + 0xCC8C, 0xAA99, 0xCC8D, 0xAA9A, 0xCC8E, 0xAA9B, 0xCC8F, 0xAA9C, 0xCC90, 0xAA9D, 0xCC91, 0xAA9E, 0xCC92, 0xAA9F, 0xCC93, 0xAAA0, + 0xCC94, 0xAB41, 0xCC95, 0xAB42, 0xCC96, 0xAB43, 0xCC97, 0xAB44, 0xCC98, 0xC3B3, 0xCC99, 0xC3B4, 0xCC9A, 0xAB45, 0xCC9B, 0xAB46, + 0xCC9C, 0xC3B5, 0xCC9D, 0xAB47, 0xCC9E, 0xAB48, 0xCC9F, 0xAB49, 0xCCA0, 0xC3B6, 0xCCA1, 0xAB4A, 0xCCA2, 0xAB4B, 0xCCA3, 0xAB4C, + 0xCCA4, 0xAB4D, 0xCCA5, 0xAB4E, 0xCCA6, 0xAB4F, 0xCCA7, 0xAB50, 0xCCA8, 0xC3B7, 0xCCA9, 0xC3B8, 0xCCAA, 0xAB51, 0xCCAB, 0xC3B9, + 0xCCAC, 0xC3BA, 0xCCAD, 0xC3BB, 0xCCAE, 0xAB52, 0xCCAF, 0xAB53, 0xCCB0, 0xAB54, 0xCCB1, 0xAB55, 0xCCB2, 0xAB56, 0xCCB3, 0xAB57, + 0xCCB4, 0xC3BC, 0xCCB5, 0xC3BD, 0xCCB6, 0xAB58, 0xCCB7, 0xAB59, 0xCCB8, 0xC3BE, 0xCCB9, 0xAB5A, 0xCCBA, 0xAB61, 0xCCBB, 0xAB62, + 0xCCBC, 0xC3BF, 0xCCBD, 0xAB63, 0xCCBE, 0xAB64, 0xCCBF, 0xAB65, 0xCCC0, 0xAB66, 0xCCC1, 0xAB67, 0xCCC2, 0xAB68, 0xCCC3, 0xAB69, + 0xCCC4, 0xC3C0, 0xCCC5, 0xC3C1, 0xCCC6, 0xAB6A, 0xCCC7, 0xC3C2, 0xCCC8, 0xAB6B, 0xCCC9, 0xC3C3, 0xCCCA, 0xAB6C, 0xCCCB, 0xAB6D, + 0xCCCC, 0xAB6E, 0xCCCD, 0xAB6F, 0xCCCE, 0xAB70, 0xCCCF, 0xAB71, 0xCCD0, 0xC3C4, 0xCCD1, 0xAB72, 0xCCD2, 0xAB73, 0xCCD3, 0xAB74, + 0xCCD4, 0xC3C5, 0xCCD5, 0xAB75, 0xCCD6, 0xAB76, 0xCCD7, 0xAB77, 0xCCD8, 0xAB78, 0xCCD9, 0xAB79, 0xCCDA, 0xAB7A, 0xCCDB, 0xAB81, + 0xCCDC, 0xAB82, 0xCCDD, 0xAB83, 0xCCDE, 0xAB84, 0xCCDF, 0xAB85, 0xCCE0, 0xAB86, 0xCCE1, 0xAB87, 0xCCE2, 0xAB88, 0xCCE3, 0xAB89, + 0xCCE4, 0xC3C6, 0xCCE5, 0xAB8A, 0xCCE6, 0xAB8B, 0xCCE7, 0xAB8C, 0xCCE8, 0xAB8D, 0xCCE9, 0xAB8E, 0xCCEA, 0xAB8F, 0xCCEB, 0xAB90, + 0xCCEC, 0xC3C7, 0xCCED, 0xAB91, 0xCCEE, 0xAB92, 0xCCEF, 0xAB93, 0xCCF0, 0xC3C8, 0xCCF1, 0xAB94, 0xCCF2, 0xAB95, 0xCCF3, 0xAB96, + 0xCCF4, 0xAB97, 0xCCF5, 0xAB98, 0xCCF6, 0xAB99, 0xCCF7, 0xAB9A, 0xCCF8, 0xAB9B, 0xCCF9, 0xAB9C, 0xCCFA, 0xAB9D, 0xCCFB, 0xAB9E, + 0xCCFC, 0xAB9F, 0xCCFD, 0xABA0, 0xCCFE, 0xAC41, 0xCCFF, 0xAC42, 0xCD00, 0xAC43, 0xCD01, 0xC3C9, 0xCD02, 0xAC44, 0xCD03, 0xAC45, + 0xCD04, 0xAC46, 0xCD05, 0xAC47, 0xCD06, 0xAC48, 0xCD07, 0xAC49, 0xCD08, 0xC3CA, 0xCD09, 0xC3CB, 0xCD0A, 0xAC4A, 0xCD0B, 0xAC4B, + 0xCD0C, 0xC3CC, 0xCD0D, 0xAC4C, 0xCD0E, 0xAC4D, 0xCD0F, 0xAC4E, 0xCD10, 0xC3CD, 0xCD11, 0xAC4F, 0xCD12, 0xAC50, 0xCD13, 0xAC51, + 0xCD14, 0xAC52, 0xCD15, 0xAC53, 0xCD16, 0xAC54, 0xCD17, 0xAC55, 0xCD18, 0xC3CE, 0xCD19, 0xC3CF, 0xCD1A, 0xAC56, 0xCD1B, 0xC3D0, + 0xCD1C, 0xAC57, 0xCD1D, 0xC3D1, 0xCD1E, 0xAC58, 0xCD1F, 0xAC59, 0xCD20, 0xAC5A, 0xCD21, 0xAC61, 0xCD22, 0xAC62, 0xCD23, 0xAC63, + 0xCD24, 0xC3D2, 0xCD25, 0xAC64, 0xCD26, 0xAC65, 0xCD27, 0xAC66, 0xCD28, 0xC3D3, 0xCD29, 0xAC67, 0xCD2A, 0xAC68, 0xCD2B, 0xAC69, + 0xCD2C, 0xC3D4, 0xCD2D, 0xAC6A, 0xCD2E, 0xAC6B, 0xCD2F, 0xAC6C, 0xCD30, 0xAC6D, 0xCD31, 0xAC6E, 0xCD32, 0xAC6F, 0xCD33, 0xAC70, + 0xCD34, 0xAC71, 0xCD35, 0xAC72, 0xCD36, 0xAC73, 0xCD37, 0xAC74, 0xCD38, 0xAC75, 0xCD39, 0xC3D5, 0xCD3A, 0xAC76, 0xCD3B, 0xAC77, + 0xCD3C, 0xAC78, 0xCD3D, 0xAC79, 0xCD3E, 0xAC7A, 0xCD3F, 0xAC81, 0xCD40, 0xAC82, 0xCD41, 0xAC83, 0xCD42, 0xAC84, 0xCD43, 0xAC85, + 0xCD44, 0xAC86, 0xCD45, 0xAC87, 0xCD46, 0xAC88, 0xCD47, 0xAC89, 0xCD48, 0xAC8A, 0xCD49, 0xAC8B, 0xCD4A, 0xAC8C, 0xCD4B, 0xAC8D, + 0xCD4C, 0xAC8E, 0xCD4D, 0xAC8F, 0xCD4E, 0xAC90, 0xCD4F, 0xAC91, 0xCD50, 0xAC92, 0xCD51, 0xAC93, 0xCD52, 0xAC94, 0xCD53, 0xAC95, + 0xCD54, 0xAC96, 0xCD55, 0xAC97, 0xCD56, 0xAC98, 0xCD57, 0xAC99, 0xCD58, 0xAC9A, 0xCD59, 0xAC9B, 0xCD5A, 0xAC9C, 0xCD5B, 0xAC9D, + 0xCD5C, 0xC3D6, 0xCD5D, 0xAC9E, 0xCD5E, 0xAC9F, 0xCD5F, 0xACA0, 0xCD60, 0xC3D7, 0xCD61, 0xAD41, 0xCD62, 0xAD42, 0xCD63, 0xAD43, + 0xCD64, 0xC3D8, 0xCD65, 0xAD44, 0xCD66, 0xAD45, 0xCD67, 0xAD46, 0xCD68, 0xAD47, 0xCD69, 0xAD48, 0xCD6A, 0xAD49, 0xCD6B, 0xAD4A, + 0xCD6C, 0xC3D9, 0xCD6D, 0xC3DA, 0xCD6E, 0xAD4B, 0xCD6F, 0xC3DB, 0xCD70, 0xAD4C, 0xCD71, 0xC3DC, 0xCD72, 0xAD4D, 0xCD73, 0xAD4E, + 0xCD74, 0xAD4F, 0xCD75, 0xAD50, 0xCD76, 0xAD51, 0xCD77, 0xAD52, 0xCD78, 0xC3DD, 0xCD79, 0xAD53, 0xCD7A, 0xAD54, 0xCD7B, 0xAD55, + 0xCD7C, 0xAD56, 0xCD7D, 0xAD57, 0xCD7E, 0xAD58, 0xCD7F, 0xAD59, 0xCD80, 0xAD5A, 0xCD81, 0xAD61, 0xCD82, 0xAD62, 0xCD83, 0xAD63, + 0xCD84, 0xAD64, 0xCD85, 0xAD65, 0xCD86, 0xAD66, 0xCD87, 0xAD67, 0xCD88, 0xC3DE, 0xCD89, 0xAD68, 0xCD8A, 0xAD69, 0xCD8B, 0xAD6A, + 0xCD8C, 0xAD6B, 0xCD8D, 0xAD6C, 0xCD8E, 0xAD6D, 0xCD8F, 0xAD6E, 0xCD90, 0xAD6F, 0xCD91, 0xAD70, 0xCD92, 0xAD71, 0xCD93, 0xAD72, + 0xCD94, 0xC3DF, 0xCD95, 0xC3E0, 0xCD96, 0xAD73, 0xCD97, 0xAD74, 0xCD98, 0xC3E1, 0xCD99, 0xAD75, 0xCD9A, 0xAD76, 0xCD9B, 0xAD77, + 0xCD9C, 0xC3E2, 0xCD9D, 0xAD78, 0xCD9E, 0xAD79, 0xCD9F, 0xAD7A, 0xCDA0, 0xAD81, 0xCDA1, 0xAD82, 0xCDA2, 0xAD83, 0xCDA3, 0xAD84, + 0xCDA4, 0xC3E3, 0xCDA5, 0xC3E4, 0xCDA6, 0xAD85, 0xCDA7, 0xC3E5, 0xCDA8, 0xAD86, 0xCDA9, 0xC3E6, 0xCDAA, 0xAD87, 0xCDAB, 0xAD88, + 0xCDAC, 0xAD89, 0xCDAD, 0xAD8A, 0xCDAE, 0xAD8B, 0xCDAF, 0xAD8C, 0xCDB0, 0xC3E7, 0xCDB1, 0xAD8D, 0xCDB2, 0xAD8E, 0xCDB3, 0xAD8F, + 0xCDB4, 0xAD90, 0xCDB5, 0xAD91, 0xCDB6, 0xAD92, 0xCDB7, 0xAD93, 0xCDB8, 0xAD94, 0xCDB9, 0xAD95, 0xCDBA, 0xAD96, 0xCDBB, 0xAD97, + 0xCDBC, 0xAD98, 0xCDBD, 0xAD99, 0xCDBE, 0xAD9A, 0xCDBF, 0xAD9B, 0xCDC0, 0xAD9C, 0xCDC1, 0xAD9D, 0xCDC2, 0xAD9E, 0xCDC3, 0xAD9F, + 0xCDC4, 0xC3E8, 0xCDC5, 0xADA0, 0xCDC6, 0xAE41, 0xCDC7, 0xAE42, 0xCDC8, 0xAE43, 0xCDC9, 0xAE44, 0xCDCA, 0xAE45, 0xCDCB, 0xAE46, + 0xCDCC, 0xC3E9, 0xCDCD, 0xAE47, 0xCDCE, 0xAE48, 0xCDCF, 0xAE49, 0xCDD0, 0xC3EA, 0xCDD1, 0xAE4A, 0xCDD2, 0xAE4B, 0xCDD3, 0xAE4C, + 0xCDD4, 0xAE4D, 0xCDD5, 0xAE4E, 0xCDD6, 0xAE4F, 0xCDD7, 0xAE50, 0xCDD8, 0xAE51, 0xCDD9, 0xAE52, 0xCDDA, 0xAE53, 0xCDDB, 0xAE54, + 0xCDDC, 0xAE55, 0xCDDD, 0xAE56, 0xCDDE, 0xAE57, 0xCDDF, 0xAE58, 0xCDE0, 0xAE59, 0xCDE1, 0xAE5A, 0xCDE2, 0xAE61, 0xCDE3, 0xAE62, + 0xCDE4, 0xAE63, 0xCDE5, 0xAE64, 0xCDE6, 0xAE65, 0xCDE7, 0xAE66, 0xCDE8, 0xC3EB, 0xCDE9, 0xAE67, 0xCDEA, 0xAE68, 0xCDEB, 0xAE69, + 0xCDEC, 0xC3EC, 0xCDED, 0xAE6A, 0xCDEE, 0xAE6B, 0xCDEF, 0xAE6C, 0xCDF0, 0xC3ED, 0xCDF1, 0xAE6D, 0xCDF2, 0xAE6E, 0xCDF3, 0xAE6F, + 0xCDF4, 0xAE70, 0xCDF5, 0xAE71, 0xCDF6, 0xAE72, 0xCDF7, 0xAE73, 0xCDF8, 0xC3EE, 0xCDF9, 0xC3EF, 0xCDFA, 0xAE74, 0xCDFB, 0xC3F0, + 0xCDFC, 0xAE75, 0xCDFD, 0xC3F1, 0xCDFE, 0xAE76, 0xCDFF, 0xAE77, 0xCE00, 0xAE78, 0xCE01, 0xAE79, 0xCE02, 0xAE7A, 0xCE03, 0xAE81, + 0xCE04, 0xC3F2, 0xCE05, 0xAE82, 0xCE06, 0xAE83, 0xCE07, 0xAE84, 0xCE08, 0xC3F3, 0xCE09, 0xAE85, 0xCE0A, 0xAE86, 0xCE0B, 0xAE87, + 0xCE0C, 0xC3F4, 0xCE0D, 0xAE88, 0xCE0E, 0xAE89, 0xCE0F, 0xAE8A, 0xCE10, 0xAE8B, 0xCE11, 0xAE8C, 0xCE12, 0xAE8D, 0xCE13, 0xAE8E, + 0xCE14, 0xC3F5, 0xCE15, 0xAE8F, 0xCE16, 0xAE90, 0xCE17, 0xAE91, 0xCE18, 0xAE92, 0xCE19, 0xC3F6, 0xCE1A, 0xAE93, 0xCE1B, 0xAE94, + 0xCE1C, 0xAE95, 0xCE1D, 0xAE96, 0xCE1E, 0xAE97, 0xCE1F, 0xAE98, 0xCE20, 0xC3F7, 0xCE21, 0xC3F8, 0xCE22, 0xAE99, 0xCE23, 0xAE9A, + 0xCE24, 0xC3F9, 0xCE25, 0xAE9B, 0xCE26, 0xAE9C, 0xCE27, 0xAE9D, 0xCE28, 0xC3FA, 0xCE29, 0xAE9E, 0xCE2A, 0xAE9F, 0xCE2B, 0xAEA0, + 0xCE2C, 0xAF41, 0xCE2D, 0xAF42, 0xCE2E, 0xAF43, 0xCE2F, 0xAF44, 0xCE30, 0xC3FB, 0xCE31, 0xC3FC, 0xCE32, 0xAF45, 0xCE33, 0xC3FD, + 0xCE34, 0xAF46, 0xCE35, 0xC3FE, 0xCE36, 0xAF47, 0xCE37, 0xAF48, 0xCE38, 0xAF49, 0xCE39, 0xAF4A, 0xCE3A, 0xAF4B, 0xCE3B, 0xAF4C, + 0xCE3C, 0xAF4D, 0xCE3D, 0xAF4E, 0xCE3E, 0xAF4F, 0xCE3F, 0xAF50, 0xCE40, 0xAF51, 0xCE41, 0xAF52, 0xCE42, 0xAF53, 0xCE43, 0xAF54, + 0xCE44, 0xAF55, 0xCE45, 0xAF56, 0xCE46, 0xAF57, 0xCE47, 0xAF58, 0xCE48, 0xAF59, 0xCE49, 0xAF5A, 0xCE4A, 0xAF61, 0xCE4B, 0xAF62, + 0xCE4C, 0xAF63, 0xCE4D, 0xAF64, 0xCE4E, 0xAF65, 0xCE4F, 0xAF66, 0xCE50, 0xAF67, 0xCE51, 0xAF68, 0xCE52, 0xAF69, 0xCE53, 0xAF6A, + 0xCE54, 0xAF6B, 0xCE55, 0xAF6C, 0xCE56, 0xAF6D, 0xCE57, 0xAF6E, 0xCE58, 0xC4A1, 0xCE59, 0xC4A2, 0xCE5A, 0xAF6F, 0xCE5B, 0xAF70, + 0xCE5C, 0xC4A3, 0xCE5D, 0xAF71, 0xCE5E, 0xAF72, 0xCE5F, 0xC4A4, 0xCE60, 0xC4A5, 0xCE61, 0xC4A6, 0xCE62, 0xAF73, 0xCE63, 0xAF74, + 0xCE64, 0xAF75, 0xCE65, 0xAF76, 0xCE66, 0xAF77, 0xCE67, 0xAF78, 0xCE68, 0xC4A7, 0xCE69, 0xC4A8, 0xCE6A, 0xAF79, 0xCE6B, 0xC4A9, + 0xCE6C, 0xAF7A, 0xCE6D, 0xC4AA, 0xCE6E, 0xAF81, 0xCE6F, 0xAF82, 0xCE70, 0xAF83, 0xCE71, 0xAF84, 0xCE72, 0xAF85, 0xCE73, 0xAF86, + 0xCE74, 0xC4AB, 0xCE75, 0xC4AC, 0xCE76, 0xAF87, 0xCE77, 0xAF88, 0xCE78, 0xC4AD, 0xCE79, 0xAF89, 0xCE7A, 0xAF8A, 0xCE7B, 0xAF8B, + 0xCE7C, 0xC4AE, 0xCE7D, 0xAF8C, 0xCE7E, 0xAF8D, 0xCE7F, 0xAF8E, 0xCE80, 0xAF8F, 0xCE81, 0xAF90, 0xCE82, 0xAF91, 0xCE83, 0xAF92, + 0xCE84, 0xC4AF, 0xCE85, 0xC4B0, 0xCE86, 0xAF93, 0xCE87, 0xC4B1, 0xCE88, 0xAF94, 0xCE89, 0xC4B2, 0xCE8A, 0xAF95, 0xCE8B, 0xAF96, + 0xCE8C, 0xAF97, 0xCE8D, 0xAF98, 0xCE8E, 0xAF99, 0xCE8F, 0xAF9A, 0xCE90, 0xC4B3, 0xCE91, 0xC4B4, 0xCE92, 0xAF9B, 0xCE93, 0xAF9C, + 0xCE94, 0xC4B5, 0xCE95, 0xAF9D, 0xCE96, 0xAF9E, 0xCE97, 0xAF9F, 0xCE98, 0xC4B6, 0xCE99, 0xAFA0, 0xCE9A, 0xB041, 0xCE9B, 0xB042, + 0xCE9C, 0xB043, 0xCE9D, 0xB044, 0xCE9E, 0xB045, 0xCE9F, 0xB046, 0xCEA0, 0xC4B7, 0xCEA1, 0xC4B8, 0xCEA2, 0xB047, 0xCEA3, 0xC4B9, + 0xCEA4, 0xC4BA, 0xCEA5, 0xC4BB, 0xCEA6, 0xB048, 0xCEA7, 0xB049, 0xCEA8, 0xB04A, 0xCEA9, 0xB04B, 0xCEAA, 0xB04C, 0xCEAB, 0xB04D, + 0xCEAC, 0xC4BC, 0xCEAD, 0xC4BD, 0xCEAE, 0xB04E, 0xCEAF, 0xB04F, 0xCEB0, 0xB050, 0xCEB1, 0xB051, 0xCEB2, 0xB052, 0xCEB3, 0xB053, + 0xCEB4, 0xB054, 0xCEB5, 0xB055, 0xCEB6, 0xB056, 0xCEB7, 0xB057, 0xCEB8, 0xB058, 0xCEB9, 0xB059, 0xCEBA, 0xB05A, 0xCEBB, 0xB061, + 0xCEBC, 0xB062, 0xCEBD, 0xB063, 0xCEBE, 0xB064, 0xCEBF, 0xB065, 0xCEC0, 0xB066, 0xCEC1, 0xC4BE, 0xCEC2, 0xB067, 0xCEC3, 0xB068, + 0xCEC4, 0xB069, 0xCEC5, 0xB06A, 0xCEC6, 0xB06B, 0xCEC7, 0xB06C, 0xCEC8, 0xB06D, 0xCEC9, 0xB06E, 0xCECA, 0xB06F, 0xCECB, 0xB070, + 0xCECC, 0xB071, 0xCECD, 0xB072, 0xCECE, 0xB073, 0xCECF, 0xB074, 0xCED0, 0xB075, 0xCED1, 0xB076, 0xCED2, 0xB077, 0xCED3, 0xB078, + 0xCED4, 0xB079, 0xCED5, 0xB07A, 0xCED6, 0xB081, 0xCED7, 0xB082, 0xCED8, 0xB083, 0xCED9, 0xB084, 0xCEDA, 0xB085, 0xCEDB, 0xB086, + 0xCEDC, 0xB087, 0xCEDD, 0xB088, 0xCEDE, 0xB089, 0xCEDF, 0xB08A, 0xCEE0, 0xB08B, 0xCEE1, 0xB08C, 0xCEE2, 0xB08D, 0xCEE3, 0xB08E, + 0xCEE4, 0xC4BF, 0xCEE5, 0xC4C0, 0xCEE6, 0xB08F, 0xCEE7, 0xB090, 0xCEE8, 0xC4C1, 0xCEE9, 0xB091, 0xCEEA, 0xB092, 0xCEEB, 0xC4C2, + 0xCEEC, 0xC4C3, 0xCEED, 0xB093, 0xCEEE, 0xB094, 0xCEEF, 0xB095, 0xCEF0, 0xB096, 0xCEF1, 0xB097, 0xCEF2, 0xB098, 0xCEF3, 0xB099, + 0xCEF4, 0xC4C4, 0xCEF5, 0xC4C5, 0xCEF6, 0xB09A, 0xCEF7, 0xC4C6, 0xCEF8, 0xC4C7, 0xCEF9, 0xC4C8, 0xCEFA, 0xB09B, 0xCEFB, 0xB09C, + 0xCEFC, 0xB09D, 0xCEFD, 0xB09E, 0xCEFE, 0xB09F, 0xCEFF, 0xB0A0, 0xCF00, 0xC4C9, 0xCF01, 0xC4CA, 0xCF02, 0xB141, 0xCF03, 0xB142, + 0xCF04, 0xC4CB, 0xCF05, 0xB143, 0xCF06, 0xB144, 0xCF07, 0xB145, 0xCF08, 0xC4CC, 0xCF09, 0xB146, 0xCF0A, 0xB147, 0xCF0B, 0xB148, + 0xCF0C, 0xB149, 0xCF0D, 0xB14A, 0xCF0E, 0xB14B, 0xCF0F, 0xB14C, 0xCF10, 0xC4CD, 0xCF11, 0xC4CE, 0xCF12, 0xB14D, 0xCF13, 0xC4CF, + 0xCF14, 0xB14E, 0xCF15, 0xC4D0, 0xCF16, 0xB14F, 0xCF17, 0xB150, 0xCF18, 0xB151, 0xCF19, 0xB152, 0xCF1A, 0xB153, 0xCF1B, 0xB154, + 0xCF1C, 0xC4D1, 0xCF1D, 0xB155, 0xCF1E, 0xB156, 0xCF1F, 0xB157, 0xCF20, 0xC4D2, 0xCF21, 0xB158, 0xCF22, 0xB159, 0xCF23, 0xB15A, + 0xCF24, 0xC4D3, 0xCF25, 0xB161, 0xCF26, 0xB162, 0xCF27, 0xB163, 0xCF28, 0xB164, 0xCF29, 0xB165, 0xCF2A, 0xB166, 0xCF2B, 0xB167, + 0xCF2C, 0xC4D4, 0xCF2D, 0xC4D5, 0xCF2E, 0xB168, 0xCF2F, 0xC4D6, 0xCF30, 0xC4D7, 0xCF31, 0xC4D8, 0xCF32, 0xB169, 0xCF33, 0xB16A, + 0xCF34, 0xB16B, 0xCF35, 0xB16C, 0xCF36, 0xB16D, 0xCF37, 0xB16E, 0xCF38, 0xC4D9, 0xCF39, 0xB16F, 0xCF3A, 0xB170, 0xCF3B, 0xB171, + 0xCF3C, 0xB172, 0xCF3D, 0xB173, 0xCF3E, 0xB174, 0xCF3F, 0xB175, 0xCF40, 0xB176, 0xCF41, 0xB177, 0xCF42, 0xB178, 0xCF43, 0xB179, + 0xCF44, 0xB17A, 0xCF45, 0xB181, 0xCF46, 0xB182, 0xCF47, 0xB183, 0xCF48, 0xB184, 0xCF49, 0xB185, 0xCF4A, 0xB186, 0xCF4B, 0xB187, + 0xCF4C, 0xB188, 0xCF4D, 0xB189, 0xCF4E, 0xB18A, 0xCF4F, 0xB18B, 0xCF50, 0xB18C, 0xCF51, 0xB18D, 0xCF52, 0xB18E, 0xCF53, 0xB18F, + 0xCF54, 0xC4DA, 0xCF55, 0xC4DB, 0xCF56, 0xB190, 0xCF57, 0xB191, 0xCF58, 0xC4DC, 0xCF59, 0xB192, 0xCF5A, 0xB193, 0xCF5B, 0xB194, + 0xCF5C, 0xC4DD, 0xCF5D, 0xB195, 0xCF5E, 0xB196, 0xCF5F, 0xB197, 0xCF60, 0xB198, 0xCF61, 0xB199, 0xCF62, 0xB19A, 0xCF63, 0xB19B, + 0xCF64, 0xC4DE, 0xCF65, 0xC4DF, 0xCF66, 0xB19C, 0xCF67, 0xC4E0, 0xCF68, 0xB19D, 0xCF69, 0xC4E1, 0xCF6A, 0xB19E, 0xCF6B, 0xB19F, + 0xCF6C, 0xB1A0, 0xCF6D, 0xB241, 0xCF6E, 0xB242, 0xCF6F, 0xB243, 0xCF70, 0xC4E2, 0xCF71, 0xC4E3, 0xCF72, 0xB244, 0xCF73, 0xB245, + 0xCF74, 0xC4E4, 0xCF75, 0xB246, 0xCF76, 0xB247, 0xCF77, 0xB248, 0xCF78, 0xC4E5, 0xCF79, 0xB249, 0xCF7A, 0xB24A, 0xCF7B, 0xB24B, + 0xCF7C, 0xB24C, 0xCF7D, 0xB24D, 0xCF7E, 0xB24E, 0xCF7F, 0xB24F, 0xCF80, 0xC4E6, 0xCF81, 0xB250, 0xCF82, 0xB251, 0xCF83, 0xB252, + 0xCF84, 0xB253, 0xCF85, 0xC4E7, 0xCF86, 0xB254, 0xCF87, 0xB255, 0xCF88, 0xB256, 0xCF89, 0xB257, 0xCF8A, 0xB258, 0xCF8B, 0xB259, + 0xCF8C, 0xC4E8, 0xCF8D, 0xB25A, 0xCF8E, 0xB261, 0xCF8F, 0xB262, 0xCF90, 0xB263, 0xCF91, 0xB264, 0xCF92, 0xB265, 0xCF93, 0xB266, + 0xCF94, 0xB267, 0xCF95, 0xB268, 0xCF96, 0xB269, 0xCF97, 0xB26A, 0xCF98, 0xB26B, 0xCF99, 0xB26C, 0xCF9A, 0xB26D, 0xCF9B, 0xB26E, + 0xCF9C, 0xB26F, 0xCF9D, 0xB270, 0xCF9E, 0xB271, 0xCF9F, 0xB272, 0xCFA0, 0xB273, 0xCFA1, 0xC4E9, 0xCFA2, 0xB274, 0xCFA3, 0xB275, + 0xCFA4, 0xB276, 0xCFA5, 0xB277, 0xCFA6, 0xB278, 0xCFA7, 0xB279, 0xCFA8, 0xC4EA, 0xCFA9, 0xB27A, 0xCFAA, 0xB281, 0xCFAB, 0xB282, + 0xCFAC, 0xB283, 0xCFAD, 0xB284, 0xCFAE, 0xB285, 0xCFAF, 0xB286, 0xCFB0, 0xC4EB, 0xCFB1, 0xB287, 0xCFB2, 0xB288, 0xCFB3, 0xB289, + 0xCFB4, 0xB28A, 0xCFB5, 0xB28B, 0xCFB6, 0xB28C, 0xCFB7, 0xB28D, 0xCFB8, 0xB28E, 0xCFB9, 0xB28F, 0xCFBA, 0xB290, 0xCFBB, 0xB291, + 0xCFBC, 0xB292, 0xCFBD, 0xB293, 0xCFBE, 0xB294, 0xCFBF, 0xB295, 0xCFC0, 0xB296, 0xCFC1, 0xB297, 0xCFC2, 0xB298, 0xCFC3, 0xB299, + 0xCFC4, 0xC4EC, 0xCFC5, 0xB29A, 0xCFC6, 0xB29B, 0xCFC7, 0xB29C, 0xCFC8, 0xB29D, 0xCFC9, 0xB29E, 0xCFCA, 0xB29F, 0xCFCB, 0xB2A0, + 0xCFCC, 0xB341, 0xCFCD, 0xB342, 0xCFCE, 0xB343, 0xCFCF, 0xB344, 0xCFD0, 0xB345, 0xCFD1, 0xB346, 0xCFD2, 0xB347, 0xCFD3, 0xB348, + 0xCFD4, 0xB349, 0xCFD5, 0xB34A, 0xCFD6, 0xB34B, 0xCFD7, 0xB34C, 0xCFD8, 0xB34D, 0xCFD9, 0xB34E, 0xCFDA, 0xB34F, 0xCFDB, 0xB350, + 0xCFDC, 0xB351, 0xCFDD, 0xB352, 0xCFDE, 0xB353, 0xCFDF, 0xB354, 0xCFE0, 0xC4ED, 0xCFE1, 0xC4EE, 0xCFE2, 0xB355, 0xCFE3, 0xB356, + 0xCFE4, 0xC4EF, 0xCFE5, 0xB357, 0xCFE6, 0xB358, 0xCFE7, 0xB359, 0xCFE8, 0xC4F0, 0xCFE9, 0xB35A, 0xCFEA, 0xB361, 0xCFEB, 0xB362, + 0xCFEC, 0xB363, 0xCFED, 0xB364, 0xCFEE, 0xB365, 0xCFEF, 0xB366, 0xCFF0, 0xC4F1, 0xCFF1, 0xC4F2, 0xCFF2, 0xB367, 0xCFF3, 0xC4F3, + 0xCFF4, 0xB368, 0xCFF5, 0xC4F4, 0xCFF6, 0xB369, 0xCFF7, 0xB36A, 0xCFF8, 0xB36B, 0xCFF9, 0xB36C, 0xCFFA, 0xB36D, 0xCFFB, 0xB36E, + 0xCFFC, 0xC4F5, 0xCFFD, 0xB36F, 0xCFFE, 0xB370, 0xCFFF, 0xB371, 0xD000, 0xC4F6, 0xD001, 0xB372, 0xD002, 0xB373, 0xD003, 0xB374, + 0xD004, 0xC4F7, 0xD005, 0xB375, 0xD006, 0xB376, 0xD007, 0xB377, 0xD008, 0xB378, 0xD009, 0xB379, 0xD00A, 0xB37A, 0xD00B, 0xB381, + 0xD00C, 0xB382, 0xD00D, 0xB383, 0xD00E, 0xB384, 0xD00F, 0xB385, 0xD010, 0xB386, 0xD011, 0xC4F8, 0xD012, 0xB387, 0xD013, 0xB388, + 0xD014, 0xB389, 0xD015, 0xB38A, 0xD016, 0xB38B, 0xD017, 0xB38C, 0xD018, 0xC4F9, 0xD019, 0xB38D, 0xD01A, 0xB38E, 0xD01B, 0xB38F, + 0xD01C, 0xB390, 0xD01D, 0xB391, 0xD01E, 0xB392, 0xD01F, 0xB393, 0xD020, 0xB394, 0xD021, 0xB395, 0xD022, 0xB396, 0xD023, 0xB397, + 0xD024, 0xB398, 0xD025, 0xB399, 0xD026, 0xB39A, 0xD027, 0xB39B, 0xD028, 0xB39C, 0xD029, 0xB39D, 0xD02A, 0xB39E, 0xD02B, 0xB39F, + 0xD02C, 0xB3A0, 0xD02D, 0xC4FA, 0xD02E, 0xB441, 0xD02F, 0xB442, 0xD030, 0xB443, 0xD031, 0xB444, 0xD032, 0xB445, 0xD033, 0xB446, + 0xD034, 0xC4FB, 0xD035, 0xC4FC, 0xD036, 0xB447, 0xD037, 0xB448, 0xD038, 0xC4FD, 0xD039, 0xB449, 0xD03A, 0xB44A, 0xD03B, 0xB44B, + 0xD03C, 0xC4FE, 0xD03D, 0xB44C, 0xD03E, 0xB44D, 0xD03F, 0xB44E, 0xD040, 0xB44F, 0xD041, 0xB450, 0xD042, 0xB451, 0xD043, 0xB452, + 0xD044, 0xC5A1, 0xD045, 0xC5A2, 0xD046, 0xB453, 0xD047, 0xC5A3, 0xD048, 0xB454, 0xD049, 0xC5A4, 0xD04A, 0xB455, 0xD04B, 0xB456, + 0xD04C, 0xB457, 0xD04D, 0xB458, 0xD04E, 0xB459, 0xD04F, 0xB45A, 0xD050, 0xC5A5, 0xD051, 0xB461, 0xD052, 0xB462, 0xD053, 0xB463, + 0xD054, 0xC5A6, 0xD055, 0xB464, 0xD056, 0xB465, 0xD057, 0xB466, 0xD058, 0xC5A7, 0xD059, 0xB467, 0xD05A, 0xB468, 0xD05B, 0xB469, + 0xD05C, 0xB46A, 0xD05D, 0xB46B, 0xD05E, 0xB46C, 0xD05F, 0xB46D, 0xD060, 0xC5A8, 0xD061, 0xB46E, 0xD062, 0xB46F, 0xD063, 0xB470, + 0xD064, 0xB471, 0xD065, 0xB472, 0xD066, 0xB473, 0xD067, 0xB474, 0xD068, 0xB475, 0xD069, 0xB476, 0xD06A, 0xB477, 0xD06B, 0xB478, + 0xD06C, 0xC5A9, 0xD06D, 0xC5AA, 0xD06E, 0xB479, 0xD06F, 0xB47A, 0xD070, 0xC5AB, 0xD071, 0xB481, 0xD072, 0xB482, 0xD073, 0xB483, + 0xD074, 0xC5AC, 0xD075, 0xB484, 0xD076, 0xB485, 0xD077, 0xB486, 0xD078, 0xB487, 0xD079, 0xB488, 0xD07A, 0xB489, 0xD07B, 0xB48A, + 0xD07C, 0xC5AD, 0xD07D, 0xC5AE, 0xD07E, 0xB48B, 0xD07F, 0xB48C, 0xD080, 0xB48D, 0xD081, 0xC5AF, 0xD082, 0xB48E, 0xD083, 0xB48F, + 0xD084, 0xB490, 0xD085, 0xB491, 0xD086, 0xB492, 0xD087, 0xB493, 0xD088, 0xB494, 0xD089, 0xB495, 0xD08A, 0xB496, 0xD08B, 0xB497, + 0xD08C, 0xB498, 0xD08D, 0xB499, 0xD08E, 0xB49A, 0xD08F, 0xB49B, 0xD090, 0xB49C, 0xD091, 0xB49D, 0xD092, 0xB49E, 0xD093, 0xB49F, + 0xD094, 0xB4A0, 0xD095, 0xB541, 0xD096, 0xB542, 0xD097, 0xB543, 0xD098, 0xB544, 0xD099, 0xB545, 0xD09A, 0xB546, 0xD09B, 0xB547, + 0xD09C, 0xB548, 0xD09D, 0xB549, 0xD09E, 0xB54A, 0xD09F, 0xB54B, 0xD0A0, 0xB54C, 0xD0A1, 0xB54D, 0xD0A2, 0xB54E, 0xD0A3, 0xB54F, + 0xD0A4, 0xC5B0, 0xD0A5, 0xC5B1, 0xD0A6, 0xB550, 0xD0A7, 0xB551, 0xD0A8, 0xC5B2, 0xD0A9, 0xB552, 0xD0AA, 0xB553, 0xD0AB, 0xB554, + 0xD0AC, 0xC5B3, 0xD0AD, 0xB555, 0xD0AE, 0xB556, 0xD0AF, 0xB557, 0xD0B0, 0xB558, 0xD0B1, 0xB559, 0xD0B2, 0xB55A, 0xD0B3, 0xB561, + 0xD0B4, 0xC5B4, 0xD0B5, 0xC5B5, 0xD0B6, 0xB562, 0xD0B7, 0xC5B6, 0xD0B8, 0xB563, 0xD0B9, 0xC5B7, 0xD0BA, 0xB564, 0xD0BB, 0xB565, + 0xD0BC, 0xB566, 0xD0BD, 0xB567, 0xD0BE, 0xB568, 0xD0BF, 0xB569, 0xD0C0, 0xC5B8, 0xD0C1, 0xC5B9, 0xD0C2, 0xB56A, 0xD0C3, 0xB56B, + 0xD0C4, 0xC5BA, 0xD0C5, 0xB56C, 0xD0C6, 0xB56D, 0xD0C7, 0xB56E, 0xD0C8, 0xC5BB, 0xD0C9, 0xC5BC, 0xD0CA, 0xB56F, 0xD0CB, 0xB570, + 0xD0CC, 0xB571, 0xD0CD, 0xB572, 0xD0CE, 0xB573, 0xD0CF, 0xB574, 0xD0D0, 0xC5BD, 0xD0D1, 0xC5BE, 0xD0D2, 0xB575, 0xD0D3, 0xC5BF, + 0xD0D4, 0xC5C0, 0xD0D5, 0xC5C1, 0xD0D6, 0xB576, 0xD0D7, 0xB577, 0xD0D8, 0xB578, 0xD0D9, 0xB579, 0xD0DA, 0xB57A, 0xD0DB, 0xB581, + 0xD0DC, 0xC5C2, 0xD0DD, 0xC5C3, 0xD0DE, 0xB582, 0xD0DF, 0xB583, 0xD0E0, 0xC5C4, 0xD0E1, 0xB584, 0xD0E2, 0xB585, 0xD0E3, 0xB586, + 0xD0E4, 0xC5C5, 0xD0E5, 0xB587, 0xD0E6, 0xB588, 0xD0E7, 0xB589, 0xD0E8, 0xB58A, 0xD0E9, 0xB58B, 0xD0EA, 0xB58C, 0xD0EB, 0xB58D, + 0xD0EC, 0xC5C6, 0xD0ED, 0xC5C7, 0xD0EE, 0xB58E, 0xD0EF, 0xC5C8, 0xD0F0, 0xC5C9, 0xD0F1, 0xC5CA, 0xD0F2, 0xB58F, 0xD0F3, 0xB590, + 0xD0F4, 0xB591, 0xD0F5, 0xB592, 0xD0F6, 0xB593, 0xD0F7, 0xB594, 0xD0F8, 0xC5CB, 0xD0F9, 0xB595, 0xD0FA, 0xB596, 0xD0FB, 0xB597, + 0xD0FC, 0xB598, 0xD0FD, 0xB599, 0xD0FE, 0xB59A, 0xD0FF, 0xB59B, 0xD100, 0xB59C, 0xD101, 0xB59D, 0xD102, 0xB59E, 0xD103, 0xB59F, + 0xD104, 0xB5A0, 0xD105, 0xB641, 0xD106, 0xB642, 0xD107, 0xB643, 0xD108, 0xB644, 0xD109, 0xB645, 0xD10A, 0xB646, 0xD10B, 0xB647, + 0xD10C, 0xB648, 0xD10D, 0xC5CC, 0xD10E, 0xB649, 0xD10F, 0xB64A, 0xD110, 0xB64B, 0xD111, 0xB64C, 0xD112, 0xB64D, 0xD113, 0xB64E, + 0xD114, 0xB64F, 0xD115, 0xB650, 0xD116, 0xB651, 0xD117, 0xB652, 0xD118, 0xB653, 0xD119, 0xB654, 0xD11A, 0xB655, 0xD11B, 0xB656, + 0xD11C, 0xB657, 0xD11D, 0xB658, 0xD11E, 0xB659, 0xD11F, 0xB65A, 0xD120, 0xB661, 0xD121, 0xB662, 0xD122, 0xB663, 0xD123, 0xB664, + 0xD124, 0xB665, 0xD125, 0xB666, 0xD126, 0xB667, 0xD127, 0xB668, 0xD128, 0xB669, 0xD129, 0xB66A, 0xD12A, 0xB66B, 0xD12B, 0xB66C, + 0xD12C, 0xB66D, 0xD12D, 0xB66E, 0xD12E, 0xB66F, 0xD12F, 0xB670, 0xD130, 0xC5CD, 0xD131, 0xC5CE, 0xD132, 0xB671, 0xD133, 0xB672, + 0xD134, 0xC5CF, 0xD135, 0xB673, 0xD136, 0xB674, 0xD137, 0xB675, 0xD138, 0xC5D0, 0xD139, 0xB676, 0xD13A, 0xC5D1, 0xD13B, 0xB677, + 0xD13C, 0xB678, 0xD13D, 0xB679, 0xD13E, 0xB67A, 0xD13F, 0xB681, 0xD140, 0xC5D2, 0xD141, 0xC5D3, 0xD142, 0xB682, 0xD143, 0xC5D4, + 0xD144, 0xC5D5, 0xD145, 0xC5D6, 0xD146, 0xB683, 0xD147, 0xB684, 0xD148, 0xB685, 0xD149, 0xB686, 0xD14A, 0xB687, 0xD14B, 0xB688, + 0xD14C, 0xC5D7, 0xD14D, 0xC5D8, 0xD14E, 0xB689, 0xD14F, 0xB68A, 0xD150, 0xC5D9, 0xD151, 0xB68B, 0xD152, 0xB68C, 0xD153, 0xB68D, + 0xD154, 0xC5DA, 0xD155, 0xB68E, 0xD156, 0xB68F, 0xD157, 0xB690, 0xD158, 0xB691, 0xD159, 0xB692, 0xD15A, 0xB693, 0xD15B, 0xB694, + 0xD15C, 0xC5DB, 0xD15D, 0xC5DC, 0xD15E, 0xB695, 0xD15F, 0xC5DD, 0xD160, 0xB696, 0xD161, 0xC5DE, 0xD162, 0xB697, 0xD163, 0xB698, + 0xD164, 0xB699, 0xD165, 0xB69A, 0xD166, 0xB69B, 0xD167, 0xB69C, 0xD168, 0xC5DF, 0xD169, 0xB69D, 0xD16A, 0xB69E, 0xD16B, 0xB69F, + 0xD16C, 0xC5E0, 0xD16D, 0xB6A0, 0xD16E, 0xB741, 0xD16F, 0xB742, 0xD170, 0xB743, 0xD171, 0xB744, 0xD172, 0xB745, 0xD173, 0xB746, + 0xD174, 0xB747, 0xD175, 0xB748, 0xD176, 0xB749, 0xD177, 0xB74A, 0xD178, 0xB74B, 0xD179, 0xB74C, 0xD17A, 0xB74D, 0xD17B, 0xB74E, + 0xD17C, 0xC5E1, 0xD17D, 0xB74F, 0xD17E, 0xB750, 0xD17F, 0xB751, 0xD180, 0xB752, 0xD181, 0xB753, 0xD182, 0xB754, 0xD183, 0xB755, + 0xD184, 0xC5E2, 0xD185, 0xB756, 0xD186, 0xB757, 0xD187, 0xB758, 0xD188, 0xC5E3, 0xD189, 0xB759, 0xD18A, 0xB75A, 0xD18B, 0xB761, + 0xD18C, 0xB762, 0xD18D, 0xB763, 0xD18E, 0xB764, 0xD18F, 0xB765, 0xD190, 0xB766, 0xD191, 0xB767, 0xD192, 0xB768, 0xD193, 0xB769, + 0xD194, 0xB76A, 0xD195, 0xB76B, 0xD196, 0xB76C, 0xD197, 0xB76D, 0xD198, 0xB76E, 0xD199, 0xB76F, 0xD19A, 0xB770, 0xD19B, 0xB771, + 0xD19C, 0xB772, 0xD19D, 0xB773, 0xD19E, 0xB774, 0xD19F, 0xB775, 0xD1A0, 0xC5E4, 0xD1A1, 0xC5E5, 0xD1A2, 0xB776, 0xD1A3, 0xB777, + 0xD1A4, 0xC5E6, 0xD1A5, 0xB778, 0xD1A6, 0xB779, 0xD1A7, 0xB77A, 0xD1A8, 0xC5E7, 0xD1A9, 0xB781, 0xD1AA, 0xB782, 0xD1AB, 0xB783, + 0xD1AC, 0xB784, 0xD1AD, 0xB785, 0xD1AE, 0xB786, 0xD1AF, 0xB787, 0xD1B0, 0xC5E8, 0xD1B1, 0xC5E9, 0xD1B2, 0xB788, 0xD1B3, 0xC5EA, + 0xD1B4, 0xB789, 0xD1B5, 0xC5EB, 0xD1B6, 0xB78A, 0xD1B7, 0xB78B, 0xD1B8, 0xB78C, 0xD1B9, 0xB78D, 0xD1BA, 0xC5EC, 0xD1BB, 0xB78E, + 0xD1BC, 0xC5ED, 0xD1BD, 0xB78F, 0xD1BE, 0xB790, 0xD1BF, 0xB791, 0xD1C0, 0xC5EE, 0xD1C1, 0xB792, 0xD1C2, 0xB793, 0xD1C3, 0xB794, + 0xD1C4, 0xB795, 0xD1C5, 0xB796, 0xD1C6, 0xB797, 0xD1C7, 0xB798, 0xD1C8, 0xB799, 0xD1C9, 0xB79A, 0xD1CA, 0xB79B, 0xD1CB, 0xB79C, + 0xD1CC, 0xB79D, 0xD1CD, 0xB79E, 0xD1CE, 0xB79F, 0xD1CF, 0xB7A0, 0xD1D0, 0xB841, 0xD1D1, 0xB842, 0xD1D2, 0xB843, 0xD1D3, 0xB844, + 0xD1D4, 0xB845, 0xD1D5, 0xB846, 0xD1D6, 0xB847, 0xD1D7, 0xB848, 0xD1D8, 0xC5EF, 0xD1D9, 0xB849, 0xD1DA, 0xB84A, 0xD1DB, 0xB84B, + 0xD1DC, 0xB84C, 0xD1DD, 0xB84D, 0xD1DE, 0xB84E, 0xD1DF, 0xB84F, 0xD1E0, 0xB850, 0xD1E1, 0xB851, 0xD1E2, 0xB852, 0xD1E3, 0xB853, + 0xD1E4, 0xB854, 0xD1E5, 0xB855, 0xD1E6, 0xB856, 0xD1E7, 0xB857, 0xD1E8, 0xB858, 0xD1E9, 0xB859, 0xD1EA, 0xB85A, 0xD1EB, 0xB861, + 0xD1EC, 0xB862, 0xD1ED, 0xB863, 0xD1EE, 0xB864, 0xD1EF, 0xB865, 0xD1F0, 0xB866, 0xD1F1, 0xB867, 0xD1F2, 0xB868, 0xD1F3, 0xB869, + 0xD1F4, 0xC5F0, 0xD1F5, 0xB86A, 0xD1F6, 0xB86B, 0xD1F7, 0xB86C, 0xD1F8, 0xC5F1, 0xD1F9, 0xB86D, 0xD1FA, 0xB86E, 0xD1FB, 0xB86F, + 0xD1FC, 0xB870, 0xD1FD, 0xB871, 0xD1FE, 0xB872, 0xD1FF, 0xB873, 0xD200, 0xB874, 0xD201, 0xB875, 0xD202, 0xB876, 0xD203, 0xB877, + 0xD204, 0xB878, 0xD205, 0xB879, 0xD206, 0xB87A, 0xD207, 0xC5F2, 0xD208, 0xB881, 0xD209, 0xC5F3, 0xD20A, 0xB882, 0xD20B, 0xB883, + 0xD20C, 0xB884, 0xD20D, 0xB885, 0xD20E, 0xB886, 0xD20F, 0xB887, 0xD210, 0xC5F4, 0xD211, 0xB888, 0xD212, 0xB889, 0xD213, 0xB88A, + 0xD214, 0xB88B, 0xD215, 0xB88C, 0xD216, 0xB88D, 0xD217, 0xB88E, 0xD218, 0xB88F, 0xD219, 0xB890, 0xD21A, 0xB891, 0xD21B, 0xB892, + 0xD21C, 0xB893, 0xD21D, 0xB894, 0xD21E, 0xB895, 0xD21F, 0xB896, 0xD220, 0xB897, 0xD221, 0xB898, 0xD222, 0xB899, 0xD223, 0xB89A, + 0xD224, 0xB89B, 0xD225, 0xB89C, 0xD226, 0xB89D, 0xD227, 0xB89E, 0xD228, 0xB89F, 0xD229, 0xB8A0, 0xD22A, 0xB941, 0xD22B, 0xB942, + 0xD22C, 0xC5F5, 0xD22D, 0xC5F6, 0xD22E, 0xB943, 0xD22F, 0xB944, 0xD230, 0xC5F7, 0xD231, 0xB945, 0xD232, 0xB946, 0xD233, 0xB947, + 0xD234, 0xC5F8, 0xD235, 0xB948, 0xD236, 0xB949, 0xD237, 0xB94A, 0xD238, 0xB94B, 0xD239, 0xB94C, 0xD23A, 0xB94D, 0xD23B, 0xB94E, + 0xD23C, 0xC5F9, 0xD23D, 0xC5FA, 0xD23E, 0xB94F, 0xD23F, 0xC5FB, 0xD240, 0xB950, 0xD241, 0xC5FC, 0xD242, 0xB951, 0xD243, 0xB952, + 0xD244, 0xB953, 0xD245, 0xB954, 0xD246, 0xB955, 0xD247, 0xB956, 0xD248, 0xC5FD, 0xD249, 0xB957, 0xD24A, 0xB958, 0xD24B, 0xB959, + 0xD24C, 0xB95A, 0xD24D, 0xB961, 0xD24E, 0xB962, 0xD24F, 0xB963, 0xD250, 0xB964, 0xD251, 0xB965, 0xD252, 0xB966, 0xD253, 0xB967, + 0xD254, 0xB968, 0xD255, 0xB969, 0xD256, 0xB96A, 0xD257, 0xB96B, 0xD258, 0xB96C, 0xD259, 0xB96D, 0xD25A, 0xB96E, 0xD25B, 0xB96F, + 0xD25C, 0xC5FE, 0xD25D, 0xB970, 0xD25E, 0xB971, 0xD25F, 0xB972, 0xD260, 0xB973, 0xD261, 0xB974, 0xD262, 0xB975, 0xD263, 0xB976, + 0xD264, 0xC6A1, 0xD265, 0xB977, 0xD266, 0xB978, 0xD267, 0xB979, 0xD268, 0xB97A, 0xD269, 0xB981, 0xD26A, 0xB982, 0xD26B, 0xB983, + 0xD26C, 0xB984, 0xD26D, 0xB985, 0xD26E, 0xB986, 0xD26F, 0xB987, 0xD270, 0xB988, 0xD271, 0xB989, 0xD272, 0xB98A, 0xD273, 0xB98B, + 0xD274, 0xB98C, 0xD275, 0xB98D, 0xD276, 0xB98E, 0xD277, 0xB98F, 0xD278, 0xB990, 0xD279, 0xB991, 0xD27A, 0xB992, 0xD27B, 0xB993, + 0xD27C, 0xB994, 0xD27D, 0xB995, 0xD27E, 0xB996, 0xD27F, 0xB997, 0xD280, 0xC6A2, 0xD281, 0xC6A3, 0xD282, 0xB998, 0xD283, 0xB999, + 0xD284, 0xC6A4, 0xD285, 0xB99A, 0xD286, 0xB99B, 0xD287, 0xB99C, 0xD288, 0xC6A5, 0xD289, 0xB99D, 0xD28A, 0xB99E, 0xD28B, 0xB99F, + 0xD28C, 0xB9A0, 0xD28D, 0xBA41, 0xD28E, 0xBA42, 0xD28F, 0xBA43, 0xD290, 0xC6A6, 0xD291, 0xC6A7, 0xD292, 0xBA44, 0xD293, 0xBA45, + 0xD294, 0xBA46, 0xD295, 0xC6A8, 0xD296, 0xBA47, 0xD297, 0xBA48, 0xD298, 0xBA49, 0xD299, 0xBA4A, 0xD29A, 0xBA4B, 0xD29B, 0xBA4C, + 0xD29C, 0xC6A9, 0xD29D, 0xBA4D, 0xD29E, 0xBA4E, 0xD29F, 0xBA4F, 0xD2A0, 0xC6AA, 0xD2A1, 0xBA50, 0xD2A2, 0xBA51, 0xD2A3, 0xBA52, + 0xD2A4, 0xC6AB, 0xD2A5, 0xBA53, 0xD2A6, 0xBA54, 0xD2A7, 0xBA55, 0xD2A8, 0xBA56, 0xD2A9, 0xBA57, 0xD2AA, 0xBA58, 0xD2AB, 0xBA59, + 0xD2AC, 0xC6AC, 0xD2AD, 0xBA5A, 0xD2AE, 0xBA61, 0xD2AF, 0xBA62, 0xD2B0, 0xBA63, 0xD2B1, 0xC6AD, 0xD2B2, 0xBA64, 0xD2B3, 0xBA65, + 0xD2B4, 0xBA66, 0xD2B5, 0xBA67, 0xD2B6, 0xBA68, 0xD2B7, 0xBA69, 0xD2B8, 0xC6AE, 0xD2B9, 0xC6AF, 0xD2BA, 0xBA6A, 0xD2BB, 0xBA6B, + 0xD2BC, 0xC6B0, 0xD2BD, 0xBA6C, 0xD2BE, 0xBA6D, 0xD2BF, 0xC6B1, 0xD2C0, 0xC6B2, 0xD2C1, 0xBA6E, 0xD2C2, 0xC6B3, 0xD2C3, 0xBA6F, + 0xD2C4, 0xBA70, 0xD2C5, 0xBA71, 0xD2C6, 0xBA72, 0xD2C7, 0xBA73, 0xD2C8, 0xC6B4, 0xD2C9, 0xC6B5, 0xD2CA, 0xBA74, 0xD2CB, 0xC6B6, + 0xD2CC, 0xBA75, 0xD2CD, 0xBA76, 0xD2CE, 0xBA77, 0xD2CF, 0xBA78, 0xD2D0, 0xBA79, 0xD2D1, 0xBA7A, 0xD2D2, 0xBA81, 0xD2D3, 0xBA82, + 0xD2D4, 0xC6B7, 0xD2D5, 0xBA83, 0xD2D6, 0xBA84, 0xD2D7, 0xBA85, 0xD2D8, 0xC6B8, 0xD2D9, 0xBA86, 0xD2DA, 0xBA87, 0xD2DB, 0xBA88, + 0xD2DC, 0xC6B9, 0xD2DD, 0xBA89, 0xD2DE, 0xBA8A, 0xD2DF, 0xBA8B, 0xD2E0, 0xBA8C, 0xD2E1, 0xBA8D, 0xD2E2, 0xBA8E, 0xD2E3, 0xBA8F, + 0xD2E4, 0xC6BA, 0xD2E5, 0xC6BB, 0xD2E6, 0xBA90, 0xD2E7, 0xBA91, 0xD2E8, 0xBA92, 0xD2E9, 0xBA93, 0xD2EA, 0xBA94, 0xD2EB, 0xBA95, + 0xD2EC, 0xBA96, 0xD2ED, 0xBA97, 0xD2EE, 0xBA98, 0xD2EF, 0xBA99, 0xD2F0, 0xC6BC, 0xD2F1, 0xC6BD, 0xD2F2, 0xBA9A, 0xD2F3, 0xBA9B, + 0xD2F4, 0xC6BE, 0xD2F5, 0xBA9C, 0xD2F6, 0xBA9D, 0xD2F7, 0xBA9E, 0xD2F8, 0xC6BF, 0xD2F9, 0xBA9F, 0xD2FA, 0xBAA0, 0xD2FB, 0xBB41, + 0xD2FC, 0xBB42, 0xD2FD, 0xBB43, 0xD2FE, 0xBB44, 0xD2FF, 0xBB45, 0xD300, 0xC6C0, 0xD301, 0xC6C1, 0xD302, 0xBB46, 0xD303, 0xC6C2, + 0xD304, 0xBB47, 0xD305, 0xC6C3, 0xD306, 0xBB48, 0xD307, 0xBB49, 0xD308, 0xBB4A, 0xD309, 0xBB4B, 0xD30A, 0xBB4C, 0xD30B, 0xBB4D, + 0xD30C, 0xC6C4, 0xD30D, 0xC6C5, 0xD30E, 0xC6C6, 0xD30F, 0xBB4E, 0xD310, 0xC6C7, 0xD311, 0xBB4F, 0xD312, 0xBB50, 0xD313, 0xBB51, + 0xD314, 0xC6C8, 0xD315, 0xBB52, 0xD316, 0xC6C9, 0xD317, 0xBB53, 0xD318, 0xBB54, 0xD319, 0xBB55, 0xD31A, 0xBB56, 0xD31B, 0xBB57, + 0xD31C, 0xC6CA, 0xD31D, 0xC6CB, 0xD31E, 0xBB58, 0xD31F, 0xC6CC, 0xD320, 0xC6CD, 0xD321, 0xC6CE, 0xD322, 0xBB59, 0xD323, 0xBB5A, + 0xD324, 0xBB61, 0xD325, 0xC6CF, 0xD326, 0xBB62, 0xD327, 0xBB63, 0xD328, 0xC6D0, 0xD329, 0xC6D1, 0xD32A, 0xBB64, 0xD32B, 0xBB65, + 0xD32C, 0xC6D2, 0xD32D, 0xBB66, 0xD32E, 0xBB67, 0xD32F, 0xBB68, 0xD330, 0xC6D3, 0xD331, 0xBB69, 0xD332, 0xBB6A, 0xD333, 0xBB6B, + 0xD334, 0xBB6C, 0xD335, 0xBB6D, 0xD336, 0xBB6E, 0xD337, 0xBB6F, 0xD338, 0xC6D4, 0xD339, 0xC6D5, 0xD33A, 0xBB70, 0xD33B, 0xC6D6, + 0xD33C, 0xC6D7, 0xD33D, 0xC6D8, 0xD33E, 0xBB71, 0xD33F, 0xBB72, 0xD340, 0xBB73, 0xD341, 0xBB74, 0xD342, 0xBB75, 0xD343, 0xBB76, + 0xD344, 0xC6D9, 0xD345, 0xC6DA, 0xD346, 0xBB77, 0xD347, 0xBB78, 0xD348, 0xBB79, 0xD349, 0xBB7A, 0xD34A, 0xBB81, 0xD34B, 0xBB82, + 0xD34C, 0xBB83, 0xD34D, 0xBB84, 0xD34E, 0xBB85, 0xD34F, 0xBB86, 0xD350, 0xBB87, 0xD351, 0xBB88, 0xD352, 0xBB89, 0xD353, 0xBB8A, + 0xD354, 0xBB8B, 0xD355, 0xBB8C, 0xD356, 0xBB8D, 0xD357, 0xBB8E, 0xD358, 0xBB8F, 0xD359, 0xBB90, 0xD35A, 0xBB91, 0xD35B, 0xBB92, + 0xD35C, 0xBB93, 0xD35D, 0xBB94, 0xD35E, 0xBB95, 0xD35F, 0xBB96, 0xD360, 0xBB97, 0xD361, 0xBB98, 0xD362, 0xBB99, 0xD363, 0xBB9A, + 0xD364, 0xBB9B, 0xD365, 0xBB9C, 0xD366, 0xBB9D, 0xD367, 0xBB9E, 0xD368, 0xBB9F, 0xD369, 0xBBA0, 0xD36A, 0xBC41, 0xD36B, 0xBC42, + 0xD36C, 0xBC43, 0xD36D, 0xBC44, 0xD36E, 0xBC45, 0xD36F, 0xBC46, 0xD370, 0xBC47, 0xD371, 0xBC48, 0xD372, 0xBC49, 0xD373, 0xBC4A, + 0xD374, 0xBC4B, 0xD375, 0xBC4C, 0xD376, 0xBC4D, 0xD377, 0xBC4E, 0xD378, 0xBC4F, 0xD379, 0xBC50, 0xD37A, 0xBC51, 0xD37B, 0xBC52, + 0xD37C, 0xC6DB, 0xD37D, 0xC6DC, 0xD37E, 0xBC53, 0xD37F, 0xBC54, 0xD380, 0xC6DD, 0xD381, 0xBC55, 0xD382, 0xBC56, 0xD383, 0xBC57, + 0xD384, 0xC6DE, 0xD385, 0xBC58, 0xD386, 0xBC59, 0xD387, 0xBC5A, 0xD388, 0xBC61, 0xD389, 0xBC62, 0xD38A, 0xBC63, 0xD38B, 0xBC64, + 0xD38C, 0xC6DF, 0xD38D, 0xC6E0, 0xD38E, 0xBC65, 0xD38F, 0xC6E1, 0xD390, 0xC6E2, 0xD391, 0xC6E3, 0xD392, 0xBC66, 0xD393, 0xBC67, + 0xD394, 0xBC68, 0xD395, 0xBC69, 0xD396, 0xBC6A, 0xD397, 0xBC6B, 0xD398, 0xC6E4, 0xD399, 0xC6E5, 0xD39A, 0xBC6C, 0xD39B, 0xBC6D, + 0xD39C, 0xC6E6, 0xD39D, 0xBC6E, 0xD39E, 0xBC6F, 0xD39F, 0xBC70, 0xD3A0, 0xC6E7, 0xD3A1, 0xBC71, 0xD3A2, 0xBC72, 0xD3A3, 0xBC73, + 0xD3A4, 0xBC74, 0xD3A5, 0xBC75, 0xD3A6, 0xBC76, 0xD3A7, 0xBC77, 0xD3A8, 0xC6E8, 0xD3A9, 0xC6E9, 0xD3AA, 0xBC78, 0xD3AB, 0xC6EA, + 0xD3AC, 0xBC79, 0xD3AD, 0xC6EB, 0xD3AE, 0xBC7A, 0xD3AF, 0xBC81, 0xD3B0, 0xBC82, 0xD3B1, 0xBC83, 0xD3B2, 0xBC84, 0xD3B3, 0xBC85, + 0xD3B4, 0xC6EC, 0xD3B5, 0xBC86, 0xD3B6, 0xBC87, 0xD3B7, 0xBC88, 0xD3B8, 0xC6ED, 0xD3B9, 0xBC89, 0xD3BA, 0xBC8A, 0xD3BB, 0xBC8B, + 0xD3BC, 0xC6EE, 0xD3BD, 0xBC8C, 0xD3BE, 0xBC8D, 0xD3BF, 0xBC8E, 0xD3C0, 0xBC8F, 0xD3C1, 0xBC90, 0xD3C2, 0xBC91, 0xD3C3, 0xBC92, + 0xD3C4, 0xC6EF, 0xD3C5, 0xC6F0, 0xD3C6, 0xBC93, 0xD3C7, 0xBC94, 0xD3C8, 0xC6F1, 0xD3C9, 0xC6F2, 0xD3CA, 0xBC95, 0xD3CB, 0xBC96, + 0xD3CC, 0xBC97, 0xD3CD, 0xBC98, 0xD3CE, 0xBC99, 0xD3CF, 0xBC9A, 0xD3D0, 0xC6F3, 0xD3D1, 0xBC9B, 0xD3D2, 0xBC9C, 0xD3D3, 0xBC9D, + 0xD3D4, 0xBC9E, 0xD3D5, 0xBC9F, 0xD3D6, 0xBCA0, 0xD3D7, 0xBD41, 0xD3D8, 0xC6F4, 0xD3D9, 0xBD42, 0xD3DA, 0xBD43, 0xD3DB, 0xBD44, + 0xD3DC, 0xBD45, 0xD3DD, 0xBD46, 0xD3DE, 0xBD47, 0xD3DF, 0xBD48, 0xD3E0, 0xBD49, 0xD3E1, 0xC6F5, 0xD3E2, 0xBD4A, 0xD3E3, 0xC6F6, + 0xD3E4, 0xBD4B, 0xD3E5, 0xBD4C, 0xD3E6, 0xBD4D, 0xD3E7, 0xBD4E, 0xD3E8, 0xBD4F, 0xD3E9, 0xBD50, 0xD3EA, 0xBD51, 0xD3EB, 0xBD52, + 0xD3EC, 0xC6F7, 0xD3ED, 0xC6F8, 0xD3EE, 0xBD53, 0xD3EF, 0xBD54, 0xD3F0, 0xC6F9, 0xD3F1, 0xBD55, 0xD3F2, 0xBD56, 0xD3F3, 0xBD57, + 0xD3F4, 0xC6FA, 0xD3F5, 0xBD58, 0xD3F6, 0xBD59, 0xD3F7, 0xBD5A, 0xD3F8, 0xBD61, 0xD3F9, 0xBD62, 0xD3FA, 0xBD63, 0xD3FB, 0xBD64, + 0xD3FC, 0xC6FB, 0xD3FD, 0xC6FC, 0xD3FE, 0xBD65, 0xD3FF, 0xC6FD, 0xD400, 0xBD66, 0xD401, 0xC6FE, 0xD402, 0xBD67, 0xD403, 0xBD68, + 0xD404, 0xBD69, 0xD405, 0xBD6A, 0xD406, 0xBD6B, 0xD407, 0xBD6C, 0xD408, 0xC7A1, 0xD409, 0xBD6D, 0xD40A, 0xBD6E, 0xD40B, 0xBD6F, + 0xD40C, 0xBD70, 0xD40D, 0xBD71, 0xD40E, 0xBD72, 0xD40F, 0xBD73, 0xD410, 0xBD74, 0xD411, 0xBD75, 0xD412, 0xBD76, 0xD413, 0xBD77, + 0xD414, 0xBD78, 0xD415, 0xBD79, 0xD416, 0xBD7A, 0xD417, 0xBD81, 0xD418, 0xBD82, 0xD419, 0xBD83, 0xD41A, 0xBD84, 0xD41B, 0xBD85, + 0xD41C, 0xBD86, 0xD41D, 0xC7A2, 0xD41E, 0xBD87, 0xD41F, 0xBD88, 0xD420, 0xBD89, 0xD421, 0xBD8A, 0xD422, 0xBD8B, 0xD423, 0xBD8C, + 0xD424, 0xBD8D, 0xD425, 0xBD8E, 0xD426, 0xBD8F, 0xD427, 0xBD90, 0xD428, 0xBD91, 0xD429, 0xBD92, 0xD42A, 0xBD93, 0xD42B, 0xBD94, + 0xD42C, 0xBD95, 0xD42D, 0xBD96, 0xD42E, 0xBD97, 0xD42F, 0xBD98, 0xD430, 0xBD99, 0xD431, 0xBD9A, 0xD432, 0xBD9B, 0xD433, 0xBD9C, + 0xD434, 0xBD9D, 0xD435, 0xBD9E, 0xD436, 0xBD9F, 0xD437, 0xBDA0, 0xD438, 0xBE41, 0xD439, 0xBE42, 0xD43A, 0xBE43, 0xD43B, 0xBE44, + 0xD43C, 0xBE45, 0xD43D, 0xBE46, 0xD43E, 0xBE47, 0xD43F, 0xBE48, 0xD440, 0xC7A3, 0xD441, 0xBE49, 0xD442, 0xBE4A, 0xD443, 0xBE4B, + 0xD444, 0xC7A4, 0xD445, 0xBE4C, 0xD446, 0xBE4D, 0xD447, 0xBE4E, 0xD448, 0xBE4F, 0xD449, 0xBE50, 0xD44A, 0xBE51, 0xD44B, 0xBE52, + 0xD44C, 0xBE53, 0xD44D, 0xBE54, 0xD44E, 0xBE55, 0xD44F, 0xBE56, 0xD450, 0xBE57, 0xD451, 0xBE58, 0xD452, 0xBE59, 0xD453, 0xBE5A, + 0xD454, 0xBE61, 0xD455, 0xBE62, 0xD456, 0xBE63, 0xD457, 0xBE64, 0xD458, 0xBE65, 0xD459, 0xBE66, 0xD45A, 0xBE67, 0xD45B, 0xBE68, + 0xD45C, 0xC7A5, 0xD45D, 0xBE69, 0xD45E, 0xBE6A, 0xD45F, 0xBE6B, 0xD460, 0xC7A6, 0xD461, 0xBE6C, 0xD462, 0xBE6D, 0xD463, 0xBE6E, + 0xD464, 0xC7A7, 0xD465, 0xBE6F, 0xD466, 0xBE70, 0xD467, 0xBE71, 0xD468, 0xBE72, 0xD469, 0xBE73, 0xD46A, 0xBE74, 0xD46B, 0xBE75, + 0xD46C, 0xBE76, 0xD46D, 0xC7A8, 0xD46E, 0xBE77, 0xD46F, 0xC7A9, 0xD470, 0xBE78, 0xD471, 0xBE79, 0xD472, 0xBE7A, 0xD473, 0xBE81, + 0xD474, 0xBE82, 0xD475, 0xBE83, 0xD476, 0xBE84, 0xD477, 0xBE85, 0xD478, 0xC7AA, 0xD479, 0xC7AB, 0xD47A, 0xBE86, 0xD47B, 0xBE87, + 0xD47C, 0xC7AC, 0xD47D, 0xBE88, 0xD47E, 0xBE89, 0xD47F, 0xC7AD, 0xD480, 0xC7AE, 0xD481, 0xBE8A, 0xD482, 0xC7AF, 0xD483, 0xBE8B, + 0xD484, 0xBE8C, 0xD485, 0xBE8D, 0xD486, 0xBE8E, 0xD487, 0xBE8F, 0xD488, 0xC7B0, 0xD489, 0xC7B1, 0xD48A, 0xBE90, 0xD48B, 0xC7B2, + 0xD48C, 0xBE91, 0xD48D, 0xC7B3, 0xD48E, 0xBE92, 0xD48F, 0xBE93, 0xD490, 0xBE94, 0xD491, 0xBE95, 0xD492, 0xBE96, 0xD493, 0xBE97, + 0xD494, 0xC7B4, 0xD495, 0xBE98, 0xD496, 0xBE99, 0xD497, 0xBE9A, 0xD498, 0xBE9B, 0xD499, 0xBE9C, 0xD49A, 0xBE9D, 0xD49B, 0xBE9E, + 0xD49C, 0xBE9F, 0xD49D, 0xBEA0, 0xD49E, 0xBF41, 0xD49F, 0xBF42, 0xD4A0, 0xBF43, 0xD4A1, 0xBF44, 0xD4A2, 0xBF45, 0xD4A3, 0xBF46, + 0xD4A4, 0xBF47, 0xD4A5, 0xBF48, 0xD4A6, 0xBF49, 0xD4A7, 0xBF4A, 0xD4A8, 0xBF4B, 0xD4A9, 0xC7B5, 0xD4AA, 0xBF4C, 0xD4AB, 0xBF4D, + 0xD4AC, 0xBF4E, 0xD4AD, 0xBF4F, 0xD4AE, 0xBF50, 0xD4AF, 0xBF51, 0xD4B0, 0xBF52, 0xD4B1, 0xBF53, 0xD4B2, 0xBF54, 0xD4B3, 0xBF55, + 0xD4B4, 0xBF56, 0xD4B5, 0xBF57, 0xD4B6, 0xBF58, 0xD4B7, 0xBF59, 0xD4B8, 0xBF5A, 0xD4B9, 0xBF61, 0xD4BA, 0xBF62, 0xD4BB, 0xBF63, + 0xD4BC, 0xBF64, 0xD4BD, 0xBF65, 0xD4BE, 0xBF66, 0xD4BF, 0xBF67, 0xD4C0, 0xBF68, 0xD4C1, 0xBF69, 0xD4C2, 0xBF6A, 0xD4C3, 0xBF6B, + 0xD4C4, 0xBF6C, 0xD4C5, 0xBF6D, 0xD4C6, 0xBF6E, 0xD4C7, 0xBF6F, 0xD4C8, 0xBF70, 0xD4C9, 0xBF71, 0xD4CA, 0xBF72, 0xD4CB, 0xBF73, + 0xD4CC, 0xC7B6, 0xD4CD, 0xBF74, 0xD4CE, 0xBF75, 0xD4CF, 0xBF76, 0xD4D0, 0xC7B7, 0xD4D1, 0xBF77, 0xD4D2, 0xBF78, 0xD4D3, 0xBF79, + 0xD4D4, 0xC7B8, 0xD4D5, 0xBF7A, 0xD4D6, 0xBF81, 0xD4D7, 0xBF82, 0xD4D8, 0xBF83, 0xD4D9, 0xBF84, 0xD4DA, 0xBF85, 0xD4DB, 0xBF86, + 0xD4DC, 0xC7B9, 0xD4DD, 0xBF87, 0xD4DE, 0xBF88, 0xD4DF, 0xC7BA, 0xD4E0, 0xBF89, 0xD4E1, 0xBF8A, 0xD4E2, 0xBF8B, 0xD4E3, 0xBF8C, + 0xD4E4, 0xBF8D, 0xD4E5, 0xBF8E, 0xD4E6, 0xBF8F, 0xD4E7, 0xBF90, 0xD4E8, 0xC7BB, 0xD4E9, 0xBF91, 0xD4EA, 0xBF92, 0xD4EB, 0xBF93, + 0xD4EC, 0xC7BC, 0xD4ED, 0xBF94, 0xD4EE, 0xBF95, 0xD4EF, 0xBF96, 0xD4F0, 0xC7BD, 0xD4F1, 0xBF97, 0xD4F2, 0xBF98, 0xD4F3, 0xBF99, + 0xD4F4, 0xBF9A, 0xD4F5, 0xBF9B, 0xD4F6, 0xBF9C, 0xD4F7, 0xBF9D, 0xD4F8, 0xC7BE, 0xD4F9, 0xBF9E, 0xD4FA, 0xBF9F, 0xD4FB, 0xC7BF, + 0xD4FC, 0xBFA0, 0xD4FD, 0xC7C0, 0xD4FE, 0xC041, 0xD4FF, 0xC042, 0xD500, 0xC043, 0xD501, 0xC044, 0xD502, 0xC045, 0xD503, 0xC046, + 0xD504, 0xC7C1, 0xD505, 0xC047, 0xD506, 0xC048, 0xD507, 0xC049, 0xD508, 0xC7C2, 0xD509, 0xC04A, 0xD50A, 0xC04B, 0xD50B, 0xC04C, + 0xD50C, 0xC7C3, 0xD50D, 0xC04D, 0xD50E, 0xC04E, 0xD50F, 0xC04F, 0xD510, 0xC050, 0xD511, 0xC051, 0xD512, 0xC052, 0xD513, 0xC053, + 0xD514, 0xC7C4, 0xD515, 0xC7C5, 0xD516, 0xC054, 0xD517, 0xC7C6, 0xD518, 0xC055, 0xD519, 0xC056, 0xD51A, 0xC057, 0xD51B, 0xC058, + 0xD51C, 0xC059, 0xD51D, 0xC05A, 0xD51E, 0xC061, 0xD51F, 0xC062, 0xD520, 0xC063, 0xD521, 0xC064, 0xD522, 0xC065, 0xD523, 0xC066, + 0xD524, 0xC067, 0xD525, 0xC068, 0xD526, 0xC069, 0xD527, 0xC06A, 0xD528, 0xC06B, 0xD529, 0xC06C, 0xD52A, 0xC06D, 0xD52B, 0xC06E, + 0xD52C, 0xC06F, 0xD52D, 0xC070, 0xD52E, 0xC071, 0xD52F, 0xC072, 0xD530, 0xC073, 0xD531, 0xC074, 0xD532, 0xC075, 0xD533, 0xC076, + 0xD534, 0xC077, 0xD535, 0xC078, 0xD536, 0xC079, 0xD537, 0xC07A, 0xD538, 0xC081, 0xD539, 0xC082, 0xD53A, 0xC083, 0xD53B, 0xC084, + 0xD53C, 0xC7C7, 0xD53D, 0xC7C8, 0xD53E, 0xC085, 0xD53F, 0xC086, 0xD540, 0xC7C9, 0xD541, 0xC087, 0xD542, 0xC088, 0xD543, 0xC089, + 0xD544, 0xC7CA, 0xD545, 0xC08A, 0xD546, 0xC08B, 0xD547, 0xC08C, 0xD548, 0xC08D, 0xD549, 0xC08E, 0xD54A, 0xC08F, 0xD54B, 0xC090, + 0xD54C, 0xC7CB, 0xD54D, 0xC7CC, 0xD54E, 0xC091, 0xD54F, 0xC7CD, 0xD550, 0xC092, 0xD551, 0xC7CE, 0xD552, 0xC093, 0xD553, 0xC094, + 0xD554, 0xC095, 0xD555, 0xC096, 0xD556, 0xC097, 0xD557, 0xC098, 0xD558, 0xC7CF, 0xD559, 0xC7D0, 0xD55A, 0xC099, 0xD55B, 0xC09A, + 0xD55C, 0xC7D1, 0xD55D, 0xC09B, 0xD55E, 0xC09C, 0xD55F, 0xC09D, 0xD560, 0xC7D2, 0xD561, 0xC09E, 0xD562, 0xC09F, 0xD563, 0xC0A0, + 0xD564, 0xC141, 0xD565, 0xC7D3, 0xD566, 0xC142, 0xD567, 0xC143, 0xD568, 0xC7D4, 0xD569, 0xC7D5, 0xD56A, 0xC144, 0xD56B, 0xC7D6, + 0xD56C, 0xC145, 0xD56D, 0xC7D7, 0xD56E, 0xC146, 0xD56F, 0xC147, 0xD570, 0xC148, 0xD571, 0xC149, 0xD572, 0xC14A, 0xD573, 0xC14B, + 0xD574, 0xC7D8, 0xD575, 0xC7D9, 0xD576, 0xC14C, 0xD577, 0xC14D, 0xD578, 0xC7DA, 0xD579, 0xC14E, 0xD57A, 0xC14F, 0xD57B, 0xC150, + 0xD57C, 0xC7DB, 0xD57D, 0xC151, 0xD57E, 0xC152, 0xD57F, 0xC153, 0xD580, 0xC154, 0xD581, 0xC155, 0xD582, 0xC156, 0xD583, 0xC157, + 0xD584, 0xC7DC, 0xD585, 0xC7DD, 0xD586, 0xC158, 0xD587, 0xC7DE, 0xD588, 0xC7DF, 0xD589, 0xC7E0, 0xD58A, 0xC159, 0xD58B, 0xC15A, + 0xD58C, 0xC161, 0xD58D, 0xC162, 0xD58E, 0xC163, 0xD58F, 0xC164, 0xD590, 0xC7E1, 0xD591, 0xC165, 0xD592, 0xC166, 0xD593, 0xC167, + 0xD594, 0xC168, 0xD595, 0xC169, 0xD596, 0xC16A, 0xD597, 0xC16B, 0xD598, 0xC16C, 0xD599, 0xC16D, 0xD59A, 0xC16E, 0xD59B, 0xC16F, + 0xD59C, 0xC170, 0xD59D, 0xC171, 0xD59E, 0xC172, 0xD59F, 0xC173, 0xD5A0, 0xC174, 0xD5A1, 0xC175, 0xD5A2, 0xC176, 0xD5A3, 0xC177, + 0xD5A4, 0xC178, 0xD5A5, 0xC7E2, 0xD5A6, 0xC179, 0xD5A7, 0xC17A, 0xD5A8, 0xC181, 0xD5A9, 0xC182, 0xD5AA, 0xC183, 0xD5AB, 0xC184, + 0xD5AC, 0xC185, 0xD5AD, 0xC186, 0xD5AE, 0xC187, 0xD5AF, 0xC188, 0xD5B0, 0xC189, 0xD5B1, 0xC18A, 0xD5B2, 0xC18B, 0xD5B3, 0xC18C, + 0xD5B4, 0xC18D, 0xD5B5, 0xC18E, 0xD5B6, 0xC18F, 0xD5B7, 0xC190, 0xD5B8, 0xC191, 0xD5B9, 0xC192, 0xD5BA, 0xC193, 0xD5BB, 0xC194, + 0xD5BC, 0xC195, 0xD5BD, 0xC196, 0xD5BE, 0xC197, 0xD5BF, 0xC198, 0xD5C0, 0xC199, 0xD5C1, 0xC19A, 0xD5C2, 0xC19B, 0xD5C3, 0xC19C, + 0xD5C4, 0xC19D, 0xD5C5, 0xC19E, 0xD5C6, 0xC19F, 0xD5C7, 0xC1A0, 0xD5C8, 0xC7E3, 0xD5C9, 0xC7E4, 0xD5CA, 0xC241, 0xD5CB, 0xC242, + 0xD5CC, 0xC7E5, 0xD5CD, 0xC243, 0xD5CE, 0xC244, 0xD5CF, 0xC245, 0xD5D0, 0xC7E6, 0xD5D1, 0xC246, 0xD5D2, 0xC7E7, 0xD5D3, 0xC247, + 0xD5D4, 0xC248, 0xD5D5, 0xC249, 0xD5D6, 0xC24A, 0xD5D7, 0xC24B, 0xD5D8, 0xC7E8, 0xD5D9, 0xC7E9, 0xD5DA, 0xC24C, 0xD5DB, 0xC7EA, + 0xD5DC, 0xC24D, 0xD5DD, 0xC7EB, 0xD5DE, 0xC24E, 0xD5DF, 0xC24F, 0xD5E0, 0xC250, 0xD5E1, 0xC251, 0xD5E2, 0xC252, 0xD5E3, 0xC253, + 0xD5E4, 0xC7EC, 0xD5E5, 0xC7ED, 0xD5E6, 0xC254, 0xD5E7, 0xC255, 0xD5E8, 0xC7EE, 0xD5E9, 0xC256, 0xD5EA, 0xC257, 0xD5EB, 0xC258, + 0xD5EC, 0xC7EF, 0xD5ED, 0xC259, 0xD5EE, 0xC25A, 0xD5EF, 0xC261, 0xD5F0, 0xC262, 0xD5F1, 0xC263, 0xD5F2, 0xC264, 0xD5F3, 0xC265, + 0xD5F4, 0xC7F0, 0xD5F5, 0xC7F1, 0xD5F6, 0xC266, 0xD5F7, 0xC7F2, 0xD5F8, 0xC267, 0xD5F9, 0xC7F3, 0xD5FA, 0xC268, 0xD5FB, 0xC269, + 0xD5FC, 0xC26A, 0xD5FD, 0xC26B, 0xD5FE, 0xC26C, 0xD5FF, 0xC26D, 0xD600, 0xC7F4, 0xD601, 0xC7F5, 0xD602, 0xC26E, 0xD603, 0xC26F, + 0xD604, 0xC7F6, 0xD605, 0xC270, 0xD606, 0xC271, 0xD607, 0xC272, 0xD608, 0xC7F7, 0xD609, 0xC273, 0xD60A, 0xC274, 0xD60B, 0xC275, + 0xD60C, 0xC276, 0xD60D, 0xC277, 0xD60E, 0xC278, 0xD60F, 0xC279, 0xD610, 0xC7F8, 0xD611, 0xC7F9, 0xD612, 0xC27A, 0xD613, 0xC7FA, + 0xD614, 0xC7FB, 0xD615, 0xC7FC, 0xD616, 0xC281, 0xD617, 0xC282, 0xD618, 0xC283, 0xD619, 0xC284, 0xD61A, 0xC285, 0xD61B, 0xC286, + 0xD61C, 0xC7FD, 0xD61D, 0xC287, 0xD61E, 0xC288, 0xD61F, 0xC289, 0xD620, 0xC7FE, 0xD621, 0xC28A, 0xD622, 0xC28B, 0xD623, 0xC28C, + 0xD624, 0xC8A1, 0xD625, 0xC28D, 0xD626, 0xC28E, 0xD627, 0xC28F, 0xD628, 0xC290, 0xD629, 0xC291, 0xD62A, 0xC292, 0xD62B, 0xC293, + 0xD62C, 0xC294, 0xD62D, 0xC8A2, 0xD62E, 0xC295, 0xD62F, 0xC296, 0xD630, 0xC297, 0xD631, 0xC298, 0xD632, 0xC299, 0xD633, 0xC29A, + 0xD634, 0xC29B, 0xD635, 0xC29C, 0xD636, 0xC29D, 0xD637, 0xC29E, 0xD638, 0xC8A3, 0xD639, 0xC8A4, 0xD63A, 0xC29F, 0xD63B, 0xC2A0, + 0xD63C, 0xC8A5, 0xD63D, 0xC341, 0xD63E, 0xC342, 0xD63F, 0xC343, 0xD640, 0xC8A6, 0xD641, 0xC344, 0xD642, 0xC345, 0xD643, 0xC346, + 0xD644, 0xC347, 0xD645, 0xC8A7, 0xD646, 0xC348, 0xD647, 0xC349, 0xD648, 0xC8A8, 0xD649, 0xC8A9, 0xD64A, 0xC34A, 0xD64B, 0xC8AA, + 0xD64C, 0xC34B, 0xD64D, 0xC8AB, 0xD64E, 0xC34C, 0xD64F, 0xC34D, 0xD650, 0xC34E, 0xD651, 0xC8AC, 0xD652, 0xC34F, 0xD653, 0xC350, + 0xD654, 0xC8AD, 0xD655, 0xC8AE, 0xD656, 0xC351, 0xD657, 0xC352, 0xD658, 0xC8AF, 0xD659, 0xC353, 0xD65A, 0xC354, 0xD65B, 0xC355, + 0xD65C, 0xC8B0, 0xD65D, 0xC356, 0xD65E, 0xC357, 0xD65F, 0xC358, 0xD660, 0xC359, 0xD661, 0xC35A, 0xD662, 0xC361, 0xD663, 0xC362, + 0xD664, 0xC363, 0xD665, 0xC364, 0xD666, 0xC365, 0xD667, 0xC8B1, 0xD668, 0xC366, 0xD669, 0xC8B2, 0xD66A, 0xC367, 0xD66B, 0xC368, + 0xD66C, 0xC369, 0xD66D, 0xC36A, 0xD66E, 0xC36B, 0xD66F, 0xC36C, 0xD670, 0xC8B3, 0xD671, 0xC8B4, 0xD672, 0xC36D, 0xD673, 0xC36E, + 0xD674, 0xC8B5, 0xD675, 0xC36F, 0xD676, 0xC370, 0xD677, 0xC371, 0xD678, 0xC372, 0xD679, 0xC373, 0xD67A, 0xC374, 0xD67B, 0xC375, + 0xD67C, 0xC376, 0xD67D, 0xC377, 0xD67E, 0xC378, 0xD67F, 0xC379, 0xD680, 0xC37A, 0xD681, 0xC381, 0xD682, 0xC382, 0xD683, 0xC8B6, + 0xD684, 0xC383, 0xD685, 0xC8B7, 0xD686, 0xC384, 0xD687, 0xC385, 0xD688, 0xC386, 0xD689, 0xC387, 0xD68A, 0xC388, 0xD68B, 0xC389, + 0xD68C, 0xC8B8, 0xD68D, 0xC8B9, 0xD68E, 0xC38A, 0xD68F, 0xC38B, 0xD690, 0xC8BA, 0xD691, 0xC38C, 0xD692, 0xC38D, 0xD693, 0xC38E, + 0xD694, 0xC8BB, 0xD695, 0xC38F, 0xD696, 0xC390, 0xD697, 0xC391, 0xD698, 0xC392, 0xD699, 0xC393, 0xD69A, 0xC394, 0xD69B, 0xC395, + 0xD69C, 0xC396, 0xD69D, 0xC8BC, 0xD69E, 0xC397, 0xD69F, 0xC8BD, 0xD6A0, 0xC398, 0xD6A1, 0xC8BE, 0xD6A2, 0xC399, 0xD6A3, 0xC39A, + 0xD6A4, 0xC39B, 0xD6A5, 0xC39C, 0xD6A6, 0xC39D, 0xD6A7, 0xC39E, 0xD6A8, 0xC8BF, 0xD6A9, 0xC39F, 0xD6AA, 0xC3A0, 0xD6AB, 0xC441, + 0xD6AC, 0xC8C0, 0xD6AD, 0xC442, 0xD6AE, 0xC443, 0xD6AF, 0xC444, 0xD6B0, 0xC8C1, 0xD6B1, 0xC445, 0xD6B2, 0xC446, 0xD6B3, 0xC447, + 0xD6B4, 0xC448, 0xD6B5, 0xC449, 0xD6B6, 0xC44A, 0xD6B7, 0xC44B, 0xD6B8, 0xC44C, 0xD6B9, 0xC8C2, 0xD6BA, 0xC44D, 0xD6BB, 0xC8C3, + 0xD6BC, 0xC44E, 0xD6BD, 0xC44F, 0xD6BE, 0xC450, 0xD6BF, 0xC451, 0xD6C0, 0xC452, 0xD6C1, 0xC453, 0xD6C2, 0xC454, 0xD6C3, 0xC455, + 0xD6C4, 0xC8C4, 0xD6C5, 0xC8C5, 0xD6C6, 0xC456, 0xD6C7, 0xC457, 0xD6C8, 0xC8C6, 0xD6C9, 0xC458, 0xD6CA, 0xC459, 0xD6CB, 0xC45A, + 0xD6CC, 0xC8C7, 0xD6CD, 0xC461, 0xD6CE, 0xC462, 0xD6CF, 0xC463, 0xD6D0, 0xC464, 0xD6D1, 0xC8C8, 0xD6D2, 0xC465, 0xD6D3, 0xC466, + 0xD6D4, 0xC8C9, 0xD6D5, 0xC467, 0xD6D6, 0xC468, 0xD6D7, 0xC8CA, 0xD6D8, 0xC469, 0xD6D9, 0xC8CB, 0xD6DA, 0xC46A, 0xD6DB, 0xC46B, + 0xD6DC, 0xC46C, 0xD6DD, 0xC46D, 0xD6DE, 0xC46E, 0xD6DF, 0xC46F, 0xD6E0, 0xC8CC, 0xD6E1, 0xC470, 0xD6E2, 0xC471, 0xD6E3, 0xC472, + 0xD6E4, 0xC8CD, 0xD6E5, 0xC473, 0xD6E6, 0xC474, 0xD6E7, 0xC475, 0xD6E8, 0xC8CE, 0xD6E9, 0xC476, 0xD6EA, 0xC477, 0xD6EB, 0xC478, + 0xD6EC, 0xC479, 0xD6ED, 0xC47A, 0xD6EE, 0xC481, 0xD6EF, 0xC482, 0xD6F0, 0xC8CF, 0xD6F1, 0xC483, 0xD6F2, 0xC484, 0xD6F3, 0xC485, + 0xD6F4, 0xC486, 0xD6F5, 0xC8D0, 0xD6F6, 0xC487, 0xD6F7, 0xC488, 0xD6F8, 0xC489, 0xD6F9, 0xC48A, 0xD6FA, 0xC48B, 0xD6FB, 0xC48C, + 0xD6FC, 0xC8D1, 0xD6FD, 0xC8D2, 0xD6FE, 0xC48D, 0xD6FF, 0xC48E, 0xD700, 0xC8D3, 0xD701, 0xC48F, 0xD702, 0xC490, 0xD703, 0xC491, + 0xD704, 0xC8D4, 0xD705, 0xC492, 0xD706, 0xC493, 0xD707, 0xC494, 0xD708, 0xC495, 0xD709, 0xC496, 0xD70A, 0xC497, 0xD70B, 0xC498, + 0xD70C, 0xC499, 0xD70D, 0xC49A, 0xD70E, 0xC49B, 0xD70F, 0xC49C, 0xD710, 0xC49D, 0xD711, 0xC8D5, 0xD712, 0xC49E, 0xD713, 0xC49F, + 0xD714, 0xC4A0, 0xD715, 0xC541, 0xD716, 0xC542, 0xD717, 0xC543, 0xD718, 0xC8D6, 0xD719, 0xC8D7, 0xD71A, 0xC544, 0xD71B, 0xC545, + 0xD71C, 0xC8D8, 0xD71D, 0xC546, 0xD71E, 0xC547, 0xD71F, 0xC548, 0xD720, 0xC8D9, 0xD721, 0xC549, 0xD722, 0xC54A, 0xD723, 0xC54B, + 0xD724, 0xC54C, 0xD725, 0xC54D, 0xD726, 0xC54E, 0xD727, 0xC54F, 0xD728, 0xC8DA, 0xD729, 0xC8DB, 0xD72A, 0xC550, 0xD72B, 0xC8DC, + 0xD72C, 0xC551, 0xD72D, 0xC8DD, 0xD72E, 0xC552, 0xD72F, 0xC553, 0xD730, 0xC554, 0xD731, 0xC555, 0xD732, 0xC556, 0xD733, 0xC557, + 0xD734, 0xC8DE, 0xD735, 0xC8DF, 0xD736, 0xC558, 0xD737, 0xC559, 0xD738, 0xC8E0, 0xD739, 0xC55A, 0xD73A, 0xC561, 0xD73B, 0xC562, + 0xD73C, 0xC8E1, 0xD73D, 0xC563, 0xD73E, 0xC564, 0xD73F, 0xC565, 0xD740, 0xC566, 0xD741, 0xC567, 0xD742, 0xC568, 0xD743, 0xC569, + 0xD744, 0xC8E2, 0xD745, 0xC56A, 0xD746, 0xC56B, 0xD747, 0xC8E3, 0xD748, 0xC56C, 0xD749, 0xC8E4, 0xD74A, 0xC56D, 0xD74B, 0xC56E, + 0xD74C, 0xC56F, 0xD74D, 0xC570, 0xD74E, 0xC571, 0xD74F, 0xC572, 0xD750, 0xC8E5, 0xD751, 0xC8E6, 0xD752, 0xC573, 0xD753, 0xC574, + 0xD754, 0xC8E7, 0xD755, 0xC575, 0xD756, 0xC8E8, 0xD757, 0xC8E9, 0xD758, 0xC8EA, 0xD759, 0xC8EB, 0xD75A, 0xC576, 0xD75B, 0xC577, + 0xD75C, 0xC578, 0xD75D, 0xC579, 0xD75E, 0xC57A, 0xD75F, 0xC581, 0xD760, 0xC8EC, 0xD761, 0xC8ED, 0xD762, 0xC582, 0xD763, 0xC8EE, + 0xD764, 0xC583, 0xD765, 0xC8EF, 0xD766, 0xC584, 0xD767, 0xC585, 0xD768, 0xC586, 0xD769, 0xC8F0, 0xD76A, 0xC587, 0xD76B, 0xC588, + 0xD76C, 0xC8F1, 0xD76D, 0xC589, 0xD76E, 0xC58A, 0xD76F, 0xC58B, 0xD770, 0xC8F2, 0xD771, 0xC58C, 0xD772, 0xC58D, 0xD773, 0xC58E, + 0xD774, 0xC8F3, 0xD775, 0xC58F, 0xD776, 0xC590, 0xD777, 0xC591, 0xD778, 0xC592, 0xD779, 0xC593, 0xD77A, 0xC594, 0xD77B, 0xC595, + 0xD77C, 0xC8F4, 0xD77D, 0xC8F5, 0xD77E, 0xC596, 0xD77F, 0xC597, 0xD780, 0xC598, 0xD781, 0xC8F6, 0xD782, 0xC599, 0xD783, 0xC59A, + 0xD784, 0xC59B, 0xD785, 0xC59C, 0xD786, 0xC59D, 0xD787, 0xC59E, 0xD788, 0xC8F7, 0xD789, 0xC8F8, 0xD78A, 0xC59F, 0xD78B, 0xC5A0, + 0xD78C, 0xC8F9, 0xD78D, 0xC641, 0xD78E, 0xC642, 0xD78F, 0xC643, 0xD790, 0xC8FA, 0xD791, 0xC644, 0xD792, 0xC645, 0xD793, 0xC646, + 0xD794, 0xC647, 0xD795, 0xC648, 0xD796, 0xC649, 0xD797, 0xC64A, 0xD798, 0xC8FB, 0xD799, 0xC8FC, 0xD79A, 0xC64B, 0xD79B, 0xC8FD, + 0xD79C, 0xC64C, 0xD79D, 0xC8FE, 0xD79E, 0xC64D, 0xD79F, 0xC64E, 0xD7A0, 0xC64F, 0xD7A1, 0xC650, 0xD7A2, 0xC651, 0xD7A3, 0xC652, + 0xF900, 0xCBD0, 0xF901, 0xCBD6, 0xF902, 0xCBE7, 0xF903, 0xCDCF, 0xF904, 0xCDE8, 0xF905, 0xCEAD, 0xF906, 0xCFFB, 0xF907, 0xD0A2, + 0xF908, 0xD0B8, 0xF909, 0xD0D0, 0xF90A, 0xD0DD, 0xF90B, 0xD1D4, 0xF90C, 0xD1D5, 0xF90D, 0xD1D8, 0xF90E, 0xD1DB, 0xF90F, 0xD1DC, + 0xF910, 0xD1DD, 0xF911, 0xD1DE, 0xF912, 0xD1DF, 0xF913, 0xD1E0, 0xF914, 0xD1E2, 0xF915, 0xD1E3, 0xF916, 0xD1E4, 0xF917, 0xD1E5, + 0xF918, 0xD1E6, 0xF919, 0xD1E8, 0xF91A, 0xD1E9, 0xF91B, 0xD1EA, 0xF91C, 0xD1EB, 0xF91D, 0xD1ED, 0xF91E, 0xD1EF, 0xF91F, 0xD1F0, + 0xF920, 0xD1F2, 0xF921, 0xD1F6, 0xF922, 0xD1FA, 0xF923, 0xD1FC, 0xF924, 0xD1FD, 0xF925, 0xD1FE, 0xF926, 0xD2A2, 0xF927, 0xD2A3, + 0xF928, 0xD2A7, 0xF929, 0xD2A8, 0xF92A, 0xD2A9, 0xF92B, 0xD2AA, 0xF92C, 0xD2AB, 0xF92D, 0xD2AD, 0xF92E, 0xD2B2, 0xF92F, 0xD2BE, + 0xF930, 0xD2C2, 0xF931, 0xD2C3, 0xF932, 0xD2C4, 0xF933, 0xD2C6, 0xF934, 0xD2C7, 0xF935, 0xD2C8, 0xF936, 0xD2C9, 0xF937, 0xD2CA, + 0xF938, 0xD2CB, 0xF939, 0xD2CD, 0xF93A, 0xD2CE, 0xF93B, 0xD2CF, 0xF93C, 0xD2D0, 0xF93D, 0xD2D1, 0xF93E, 0xD2D2, 0xF93F, 0xD2D3, + 0xF940, 0xD2D4, 0xF941, 0xD2D5, 0xF942, 0xD2D6, 0xF943, 0xD2D7, 0xF944, 0xD2D9, 0xF945, 0xD2DA, 0xF946, 0xD2DE, 0xF947, 0xD2DF, + 0xF948, 0xD2E1, 0xF949, 0xD2E2, 0xF94A, 0xD2E4, 0xF94B, 0xD2E5, 0xF94C, 0xD2E6, 0xF94D, 0xD2E7, 0xF94E, 0xD2E8, 0xF94F, 0xD2E9, + 0xF950, 0xD2EA, 0xF951, 0xD2EB, 0xF952, 0xD2F0, 0xF953, 0xD2F1, 0xF954, 0xD2F2, 0xF955, 0xD2F3, 0xF956, 0xD2F4, 0xF957, 0xD2F5, + 0xF958, 0xD2F7, 0xF959, 0xD2F8, 0xF95A, 0xD4E6, 0xF95B, 0xD4FC, 0xF95C, 0xD5A5, 0xF95D, 0xD5AB, 0xF95E, 0xD5AE, 0xF95F, 0xD6B8, + 0xF960, 0xD6CD, 0xF961, 0xD7CB, 0xF962, 0xD7E4, 0xF963, 0xDBC5, 0xF964, 0xDBE4, 0xF965, 0xDCA5, 0xF966, 0xDDA5, 0xF967, 0xDDD5, + 0xF968, 0xDDF4, 0xF969, 0xDEFC, 0xF96A, 0xDEFE, 0xF96B, 0xDFB3, 0xF96C, 0xDFE1, 0xF96D, 0xDFE8, 0xF96E, 0xE0F1, 0xF96F, 0xE1AD, + 0xF970, 0xE1ED, 0xF971, 0xE3F5, 0xF972, 0xE4A1, 0xF973, 0xE4A9, 0xF974, 0xE5AE, 0xF975, 0xE5B1, 0xF976, 0xE5B2, 0xF977, 0xE5B9, + 0xF978, 0xE5BB, 0xF979, 0xE5BC, 0xF97A, 0xE5C4, 0xF97B, 0xE5CE, 0xF97C, 0xE5D0, 0xF97D, 0xE5D2, 0xF97E, 0xE5D6, 0xF97F, 0xE5FA, + 0xF980, 0xE5FB, 0xF981, 0xE5FC, 0xF982, 0xE5FE, 0xF983, 0xE6A1, 0xF984, 0xE6A4, 0xF985, 0xE6A7, 0xF986, 0xE6AD, 0xF987, 0xE6AF, + 0xF988, 0xE6B0, 0xF989, 0xE6B1, 0xF98A, 0xE6B3, 0xF98B, 0xE6B7, 0xF98C, 0xE6B8, 0xF98D, 0xE6BC, 0xF98E, 0xE6C4, 0xF98F, 0xE6C6, + 0xF990, 0xE6C7, 0xF991, 0xE6CA, 0xF992, 0xE6D2, 0xF993, 0xE6D6, 0xF994, 0xE6D9, 0xF995, 0xE6DC, 0xF996, 0xE6DF, 0xF997, 0xE6E1, + 0xF998, 0xE6E4, 0xF999, 0xE6E5, 0xF99A, 0xE6E6, 0xF99B, 0xE6E8, 0xF99C, 0xE6EA, 0xF99D, 0xE6EB, 0xF99E, 0xE6EC, 0xF99F, 0xE6EF, + 0xF9A0, 0xE6F1, 0xF9A1, 0xE6F2, 0xF9A2, 0xE6F5, 0xF9A3, 0xE6F6, 0xF9A4, 0xE6F7, 0xF9A5, 0xE6F9, 0xF9A6, 0xE7A1, 0xF9A7, 0xE7A6, + 0xF9A8, 0xE7A9, 0xF9A9, 0xE7AA, 0xF9AA, 0xE7AC, 0xF9AB, 0xE7AD, 0xF9AC, 0xE7B0, 0xF9AD, 0xE7BF, 0xF9AE, 0xE7C1, 0xF9AF, 0xE7C6, + 0xF9B0, 0xE7C7, 0xF9B1, 0xE7CB, 0xF9B2, 0xE7CD, 0xF9B3, 0xE7CF, 0xF9B4, 0xE7D0, 0xF9B5, 0xE7D3, 0xF9B6, 0xE7DF, 0xF9B7, 0xE7E4, + 0xF9B8, 0xE7E6, 0xF9B9, 0xE7F7, 0xF9BA, 0xE8E7, 0xF9BB, 0xE8E8, 0xF9BC, 0xE8F0, 0xF9BD, 0xE8F1, 0xF9BE, 0xE8F7, 0xF9BF, 0xE8F9, + 0xF9C0, 0xE8FB, 0xF9C1, 0xE8FE, 0xF9C2, 0xE9A7, 0xF9C3, 0xE9AC, 0xF9C4, 0xE9CC, 0xF9C5, 0xE9F7, 0xF9C6, 0xEAC1, 0xF9C7, 0xEAE5, + 0xF9C8, 0xEAF4, 0xF9C9, 0xEAF7, 0xF9CA, 0xEAFC, 0xF9CB, 0xEAFE, 0xF9CC, 0xEBA4, 0xF9CD, 0xEBA7, 0xF9CE, 0xEBA9, 0xF9CF, 0xEBAA, + 0xF9D0, 0xEBBA, 0xF9D1, 0xEBBB, 0xF9D2, 0xEBBD, 0xF9D3, 0xEBC1, 0xF9D4, 0xEBC2, 0xF9D5, 0xEBC6, 0xF9D6, 0xEBC7, 0xF9D7, 0xEBCC, + 0xF9D8, 0xEBCF, 0xF9D9, 0xEBD0, 0xF9DA, 0xEBD1, 0xF9DB, 0xEBD2, 0xF9DC, 0xEBD8, 0xF9DD, 0xECA6, 0xF9DE, 0xECA7, 0xF9DF, 0xECAA, + 0xF9E0, 0xECAF, 0xF9E1, 0xECB0, 0xF9E2, 0xECB1, 0xF9E3, 0xECB2, 0xF9E4, 0xECB5, 0xF9E5, 0xECB8, 0xF9E6, 0xECBA, 0xF9E7, 0xECC0, + 0xF9E8, 0xECC1, 0xF9E9, 0xECC5, 0xF9EA, 0xECC6, 0xF9EB, 0xECC9, 0xF9EC, 0xECCA, 0xF9ED, 0xECD5, 0xF9EE, 0xECDD, 0xF9EF, 0xECDE, + 0xF9F0, 0xECE1, 0xF9F1, 0xECE4, 0xF9F2, 0xECE7, 0xF9F3, 0xECE8, 0xF9F4, 0xECF7, 0xF9F5, 0xECF8, 0xF9F6, 0xECFA, 0xF9F7, 0xEDA1, + 0xF9F8, 0xEDA2, 0xF9F9, 0xEDA3, 0xF9FA, 0xEDEE, 0xF9FB, 0xEEDB, 0xF9FC, 0xF2BD, 0xF9FD, 0xF2FA, 0xF9FE, 0xF3B1, 0xF9FF, 0xF4A7, + 0xFA00, 0xF4EE, 0xFA01, 0xF6F4, 0xFA02, 0xF6F6, 0xFA03, 0xF7B8, 0xFA04, 0xF7C8, 0xFA05, 0xF7D3, 0xFA06, 0xF8DB, 0xFA07, 0xF8F0, + 0xFA08, 0xFAA1, 0xFA09, 0xFAA2, 0xFA0A, 0xFAE6, 0xFA0B, 0xFCA9, 0xFF01, 0xA3A1, 0xFF02, 0xA3A2, 0xFF03, 0xA3A3, 0xFF04, 0xA3A4, + 0xFF05, 0xA3A5, 0xFF06, 0xA3A6, 0xFF07, 0xA3A7, 0xFF08, 0xA3A8, 0xFF09, 0xA3A9, 0xFF0A, 0xA3AA, 0xFF0B, 0xA3AB, 0xFF0C, 0xA3AC, + 0xFF0D, 0xA3AD, 0xFF0E, 0xA3AE, 0xFF0F, 0xA3AF, 0xFF10, 0xA3B0, 0xFF11, 0xA3B1, 0xFF12, 0xA3B2, 0xFF13, 0xA3B3, 0xFF14, 0xA3B4, + 0xFF15, 0xA3B5, 0xFF16, 0xA3B6, 0xFF17, 0xA3B7, 0xFF18, 0xA3B8, 0xFF19, 0xA3B9, 0xFF1A, 0xA3BA, 0xFF1B, 0xA3BB, 0xFF1C, 0xA3BC, + 0xFF1D, 0xA3BD, 0xFF1E, 0xA3BE, 0xFF1F, 0xA3BF, 0xFF20, 0xA3C0, 0xFF21, 0xA3C1, 0xFF22, 0xA3C2, 0xFF23, 0xA3C3, 0xFF24, 0xA3C4, + 0xFF25, 0xA3C5, 0xFF26, 0xA3C6, 0xFF27, 0xA3C7, 0xFF28, 0xA3C8, 0xFF29, 0xA3C9, 0xFF2A, 0xA3CA, 0xFF2B, 0xA3CB, 0xFF2C, 0xA3CC, + 0xFF2D, 0xA3CD, 0xFF2E, 0xA3CE, 0xFF2F, 0xA3CF, 0xFF30, 0xA3D0, 0xFF31, 0xA3D1, 0xFF32, 0xA3D2, 0xFF33, 0xA3D3, 0xFF34, 0xA3D4, + 0xFF35, 0xA3D5, 0xFF36, 0xA3D6, 0xFF37, 0xA3D7, 0xFF38, 0xA3D8, 0xFF39, 0xA3D9, 0xFF3A, 0xA3DA, 0xFF3B, 0xA3DB, 0xFF3C, 0xA1AC, + 0xFF3D, 0xA3DD, 0xFF3E, 0xA3DE, 0xFF3F, 0xA3DF, 0xFF40, 0xA3E0, 0xFF41, 0xA3E1, 0xFF42, 0xA3E2, 0xFF43, 0xA3E3, 0xFF44, 0xA3E4, + 0xFF45, 0xA3E5, 0xFF46, 0xA3E6, 0xFF47, 0xA3E7, 0xFF48, 0xA3E8, 0xFF49, 0xA3E9, 0xFF4A, 0xA3EA, 0xFF4B, 0xA3EB, 0xFF4C, 0xA3EC, + 0xFF4D, 0xA3ED, 0xFF4E, 0xA3EE, 0xFF4F, 0xA3EF, 0xFF50, 0xA3F0, 0xFF51, 0xA3F1, 0xFF52, 0xA3F2, 0xFF53, 0xA3F3, 0xFF54, 0xA3F4, + 0xFF55, 0xA3F5, 0xFF56, 0xA3F6, 0xFF57, 0xA3F7, 0xFF58, 0xA3F8, 0xFF59, 0xA3F9, 0xFF5A, 0xA3FA, 0xFF5B, 0xA3FB, 0xFF5C, 0xA3FC, + 0xFF5D, 0xA3FD, 0xFF5E, 0xA2A6, 0xFFE0, 0xA1CB, 0xFFE1, 0xA1CC, 0xFFE2, 0xA1FE, 0xFFE3, 0xA3FE, 0xFFE5, 0xA1CD, 0xFFE6, 0xA3DC, + 0, 0 +}; + +static const WCHAR oem2uni949[] = { /* Korean --> Unicode pairs */ + 0x8141, 0xAC02, 0x8142, 0xAC03, 0x8143, 0xAC05, 0x8144, 0xAC06, 0x8145, 0xAC0B, 0x8146, 0xAC0C, 0x8147, 0xAC0D, 0x8148, 0xAC0E, + 0x8149, 0xAC0F, 0x814A, 0xAC18, 0x814B, 0xAC1E, 0x814C, 0xAC1F, 0x814D, 0xAC21, 0x814E, 0xAC22, 0x814F, 0xAC23, 0x8150, 0xAC25, + 0x8151, 0xAC26, 0x8152, 0xAC27, 0x8153, 0xAC28, 0x8154, 0xAC29, 0x8155, 0xAC2A, 0x8156, 0xAC2B, 0x8157, 0xAC2E, 0x8158, 0xAC32, + 0x8159, 0xAC33, 0x815A, 0xAC34, 0x8161, 0xAC35, 0x8162, 0xAC36, 0x8163, 0xAC37, 0x8164, 0xAC3A, 0x8165, 0xAC3B, 0x8166, 0xAC3D, + 0x8167, 0xAC3E, 0x8168, 0xAC3F, 0x8169, 0xAC41, 0x816A, 0xAC42, 0x816B, 0xAC43, 0x816C, 0xAC44, 0x816D, 0xAC45, 0x816E, 0xAC46, + 0x816F, 0xAC47, 0x8170, 0xAC48, 0x8171, 0xAC49, 0x8172, 0xAC4A, 0x8173, 0xAC4C, 0x8174, 0xAC4E, 0x8175, 0xAC4F, 0x8176, 0xAC50, + 0x8177, 0xAC51, 0x8178, 0xAC52, 0x8179, 0xAC53, 0x817A, 0xAC55, 0x8181, 0xAC56, 0x8182, 0xAC57, 0x8183, 0xAC59, 0x8184, 0xAC5A, + 0x8185, 0xAC5B, 0x8186, 0xAC5D, 0x8187, 0xAC5E, 0x8188, 0xAC5F, 0x8189, 0xAC60, 0x818A, 0xAC61, 0x818B, 0xAC62, 0x818C, 0xAC63, + 0x818D, 0xAC64, 0x818E, 0xAC65, 0x818F, 0xAC66, 0x8190, 0xAC67, 0x8191, 0xAC68, 0x8192, 0xAC69, 0x8193, 0xAC6A, 0x8194, 0xAC6B, + 0x8195, 0xAC6C, 0x8196, 0xAC6D, 0x8197, 0xAC6E, 0x8198, 0xAC6F, 0x8199, 0xAC72, 0x819A, 0xAC73, 0x819B, 0xAC75, 0x819C, 0xAC76, + 0x819D, 0xAC79, 0x819E, 0xAC7B, 0x819F, 0xAC7C, 0x81A0, 0xAC7D, 0x81A1, 0xAC7E, 0x81A2, 0xAC7F, 0x81A3, 0xAC82, 0x81A4, 0xAC87, + 0x81A5, 0xAC88, 0x81A6, 0xAC8D, 0x81A7, 0xAC8E, 0x81A8, 0xAC8F, 0x81A9, 0xAC91, 0x81AA, 0xAC92, 0x81AB, 0xAC93, 0x81AC, 0xAC95, + 0x81AD, 0xAC96, 0x81AE, 0xAC97, 0x81AF, 0xAC98, 0x81B0, 0xAC99, 0x81B1, 0xAC9A, 0x81B2, 0xAC9B, 0x81B3, 0xAC9E, 0x81B4, 0xACA2, + 0x81B5, 0xACA3, 0x81B6, 0xACA4, 0x81B7, 0xACA5, 0x81B8, 0xACA6, 0x81B9, 0xACA7, 0x81BA, 0xACAB, 0x81BB, 0xACAD, 0x81BC, 0xACAE, + 0x81BD, 0xACB1, 0x81BE, 0xACB2, 0x81BF, 0xACB3, 0x81C0, 0xACB4, 0x81C1, 0xACB5, 0x81C2, 0xACB6, 0x81C3, 0xACB7, 0x81C4, 0xACBA, + 0x81C5, 0xACBE, 0x81C6, 0xACBF, 0x81C7, 0xACC0, 0x81C8, 0xACC2, 0x81C9, 0xACC3, 0x81CA, 0xACC5, 0x81CB, 0xACC6, 0x81CC, 0xACC7, + 0x81CD, 0xACC9, 0x81CE, 0xACCA, 0x81CF, 0xACCB, 0x81D0, 0xACCD, 0x81D1, 0xACCE, 0x81D2, 0xACCF, 0x81D3, 0xACD0, 0x81D4, 0xACD1, + 0x81D5, 0xACD2, 0x81D6, 0xACD3, 0x81D7, 0xACD4, 0x81D8, 0xACD6, 0x81D9, 0xACD8, 0x81DA, 0xACD9, 0x81DB, 0xACDA, 0x81DC, 0xACDB, + 0x81DD, 0xACDC, 0x81DE, 0xACDD, 0x81DF, 0xACDE, 0x81E0, 0xACDF, 0x81E1, 0xACE2, 0x81E2, 0xACE3, 0x81E3, 0xACE5, 0x81E4, 0xACE6, + 0x81E5, 0xACE9, 0x81E6, 0xACEB, 0x81E7, 0xACED, 0x81E8, 0xACEE, 0x81E9, 0xACF2, 0x81EA, 0xACF4, 0x81EB, 0xACF7, 0x81EC, 0xACF8, + 0x81ED, 0xACF9, 0x81EE, 0xACFA, 0x81EF, 0xACFB, 0x81F0, 0xACFE, 0x81F1, 0xACFF, 0x81F2, 0xAD01, 0x81F3, 0xAD02, 0x81F4, 0xAD03, + 0x81F5, 0xAD05, 0x81F6, 0xAD07, 0x81F7, 0xAD08, 0x81F8, 0xAD09, 0x81F9, 0xAD0A, 0x81FA, 0xAD0B, 0x81FB, 0xAD0E, 0x81FC, 0xAD10, + 0x81FD, 0xAD12, 0x81FE, 0xAD13, 0x8241, 0xAD14, 0x8242, 0xAD15, 0x8243, 0xAD16, 0x8244, 0xAD17, 0x8245, 0xAD19, 0x8246, 0xAD1A, + 0x8247, 0xAD1B, 0x8248, 0xAD1D, 0x8249, 0xAD1E, 0x824A, 0xAD1F, 0x824B, 0xAD21, 0x824C, 0xAD22, 0x824D, 0xAD23, 0x824E, 0xAD24, + 0x824F, 0xAD25, 0x8250, 0xAD26, 0x8251, 0xAD27, 0x8252, 0xAD28, 0x8253, 0xAD2A, 0x8254, 0xAD2B, 0x8255, 0xAD2E, 0x8256, 0xAD2F, + 0x8257, 0xAD30, 0x8258, 0xAD31, 0x8259, 0xAD32, 0x825A, 0xAD33, 0x8261, 0xAD36, 0x8262, 0xAD37, 0x8263, 0xAD39, 0x8264, 0xAD3A, + 0x8265, 0xAD3B, 0x8266, 0xAD3D, 0x8267, 0xAD3E, 0x8268, 0xAD3F, 0x8269, 0xAD40, 0x826A, 0xAD41, 0x826B, 0xAD42, 0x826C, 0xAD43, + 0x826D, 0xAD46, 0x826E, 0xAD48, 0x826F, 0xAD4A, 0x8270, 0xAD4B, 0x8271, 0xAD4C, 0x8272, 0xAD4D, 0x8273, 0xAD4E, 0x8274, 0xAD4F, + 0x8275, 0xAD51, 0x8276, 0xAD52, 0x8277, 0xAD53, 0x8278, 0xAD55, 0x8279, 0xAD56, 0x827A, 0xAD57, 0x8281, 0xAD59, 0x8282, 0xAD5A, + 0x8283, 0xAD5B, 0x8284, 0xAD5C, 0x8285, 0xAD5D, 0x8286, 0xAD5E, 0x8287, 0xAD5F, 0x8288, 0xAD60, 0x8289, 0xAD62, 0x828A, 0xAD64, + 0x828B, 0xAD65, 0x828C, 0xAD66, 0x828D, 0xAD67, 0x828E, 0xAD68, 0x828F, 0xAD69, 0x8290, 0xAD6A, 0x8291, 0xAD6B, 0x8292, 0xAD6E, + 0x8293, 0xAD6F, 0x8294, 0xAD71, 0x8295, 0xAD72, 0x8296, 0xAD77, 0x8297, 0xAD78, 0x8298, 0xAD79, 0x8299, 0xAD7A, 0x829A, 0xAD7E, + 0x829B, 0xAD80, 0x829C, 0xAD83, 0x829D, 0xAD84, 0x829E, 0xAD85, 0x829F, 0xAD86, 0x82A0, 0xAD87, 0x82A1, 0xAD8A, 0x82A2, 0xAD8B, + 0x82A3, 0xAD8D, 0x82A4, 0xAD8E, 0x82A5, 0xAD8F, 0x82A6, 0xAD91, 0x82A7, 0xAD92, 0x82A8, 0xAD93, 0x82A9, 0xAD94, 0x82AA, 0xAD95, + 0x82AB, 0xAD96, 0x82AC, 0xAD97, 0x82AD, 0xAD98, 0x82AE, 0xAD99, 0x82AF, 0xAD9A, 0x82B0, 0xAD9B, 0x82B1, 0xAD9E, 0x82B2, 0xAD9F, + 0x82B3, 0xADA0, 0x82B4, 0xADA1, 0x82B5, 0xADA2, 0x82B6, 0xADA3, 0x82B7, 0xADA5, 0x82B8, 0xADA6, 0x82B9, 0xADA7, 0x82BA, 0xADA8, + 0x82BB, 0xADA9, 0x82BC, 0xADAA, 0x82BD, 0xADAB, 0x82BE, 0xADAC, 0x82BF, 0xADAD, 0x82C0, 0xADAE, 0x82C1, 0xADAF, 0x82C2, 0xADB0, + 0x82C3, 0xADB1, 0x82C4, 0xADB2, 0x82C5, 0xADB3, 0x82C6, 0xADB4, 0x82C7, 0xADB5, 0x82C8, 0xADB6, 0x82C9, 0xADB8, 0x82CA, 0xADB9, + 0x82CB, 0xADBA, 0x82CC, 0xADBB, 0x82CD, 0xADBC, 0x82CE, 0xADBD, 0x82CF, 0xADBE, 0x82D0, 0xADBF, 0x82D1, 0xADC2, 0x82D2, 0xADC3, + 0x82D3, 0xADC5, 0x82D4, 0xADC6, 0x82D5, 0xADC7, 0x82D6, 0xADC9, 0x82D7, 0xADCA, 0x82D8, 0xADCB, 0x82D9, 0xADCC, 0x82DA, 0xADCD, + 0x82DB, 0xADCE, 0x82DC, 0xADCF, 0x82DD, 0xADD2, 0x82DE, 0xADD4, 0x82DF, 0xADD5, 0x82E0, 0xADD6, 0x82E1, 0xADD7, 0x82E2, 0xADD8, + 0x82E3, 0xADD9, 0x82E4, 0xADDA, 0x82E5, 0xADDB, 0x82E6, 0xADDD, 0x82E7, 0xADDE, 0x82E8, 0xADDF, 0x82E9, 0xADE1, 0x82EA, 0xADE2, + 0x82EB, 0xADE3, 0x82EC, 0xADE5, 0x82ED, 0xADE6, 0x82EE, 0xADE7, 0x82EF, 0xADE8, 0x82F0, 0xADE9, 0x82F1, 0xADEA, 0x82F2, 0xADEB, + 0x82F3, 0xADEC, 0x82F4, 0xADED, 0x82F5, 0xADEE, 0x82F6, 0xADEF, 0x82F7, 0xADF0, 0x82F8, 0xADF1, 0x82F9, 0xADF2, 0x82FA, 0xADF3, + 0x82FB, 0xADF4, 0x82FC, 0xADF5, 0x82FD, 0xADF6, 0x82FE, 0xADF7, 0x8341, 0xADFA, 0x8342, 0xADFB, 0x8343, 0xADFD, 0x8344, 0xADFE, + 0x8345, 0xAE02, 0x8346, 0xAE03, 0x8347, 0xAE04, 0x8348, 0xAE05, 0x8349, 0xAE06, 0x834A, 0xAE07, 0x834B, 0xAE0A, 0x834C, 0xAE0C, + 0x834D, 0xAE0E, 0x834E, 0xAE0F, 0x834F, 0xAE10, 0x8350, 0xAE11, 0x8351, 0xAE12, 0x8352, 0xAE13, 0x8353, 0xAE15, 0x8354, 0xAE16, + 0x8355, 0xAE17, 0x8356, 0xAE18, 0x8357, 0xAE19, 0x8358, 0xAE1A, 0x8359, 0xAE1B, 0x835A, 0xAE1C, 0x8361, 0xAE1D, 0x8362, 0xAE1E, + 0x8363, 0xAE1F, 0x8364, 0xAE20, 0x8365, 0xAE21, 0x8366, 0xAE22, 0x8367, 0xAE23, 0x8368, 0xAE24, 0x8369, 0xAE25, 0x836A, 0xAE26, + 0x836B, 0xAE27, 0x836C, 0xAE28, 0x836D, 0xAE29, 0x836E, 0xAE2A, 0x836F, 0xAE2B, 0x8370, 0xAE2C, 0x8371, 0xAE2D, 0x8372, 0xAE2E, + 0x8373, 0xAE2F, 0x8374, 0xAE32, 0x8375, 0xAE33, 0x8376, 0xAE35, 0x8377, 0xAE36, 0x8378, 0xAE39, 0x8379, 0xAE3B, 0x837A, 0xAE3C, + 0x8381, 0xAE3D, 0x8382, 0xAE3E, 0x8383, 0xAE3F, 0x8384, 0xAE42, 0x8385, 0xAE44, 0x8386, 0xAE47, 0x8387, 0xAE48, 0x8388, 0xAE49, + 0x8389, 0xAE4B, 0x838A, 0xAE4F, 0x838B, 0xAE51, 0x838C, 0xAE52, 0x838D, 0xAE53, 0x838E, 0xAE55, 0x838F, 0xAE57, 0x8390, 0xAE58, + 0x8391, 0xAE59, 0x8392, 0xAE5A, 0x8393, 0xAE5B, 0x8394, 0xAE5E, 0x8395, 0xAE62, 0x8396, 0xAE63, 0x8397, 0xAE64, 0x8398, 0xAE66, + 0x8399, 0xAE67, 0x839A, 0xAE6A, 0x839B, 0xAE6B, 0x839C, 0xAE6D, 0x839D, 0xAE6E, 0x839E, 0xAE6F, 0x839F, 0xAE71, 0x83A0, 0xAE72, + 0x83A1, 0xAE73, 0x83A2, 0xAE74, 0x83A3, 0xAE75, 0x83A4, 0xAE76, 0x83A5, 0xAE77, 0x83A6, 0xAE7A, 0x83A7, 0xAE7E, 0x83A8, 0xAE7F, + 0x83A9, 0xAE80, 0x83AA, 0xAE81, 0x83AB, 0xAE82, 0x83AC, 0xAE83, 0x83AD, 0xAE86, 0x83AE, 0xAE87, 0x83AF, 0xAE88, 0x83B0, 0xAE89, + 0x83B1, 0xAE8A, 0x83B2, 0xAE8B, 0x83B3, 0xAE8D, 0x83B4, 0xAE8E, 0x83B5, 0xAE8F, 0x83B6, 0xAE90, 0x83B7, 0xAE91, 0x83B8, 0xAE92, + 0x83B9, 0xAE93, 0x83BA, 0xAE94, 0x83BB, 0xAE95, 0x83BC, 0xAE96, 0x83BD, 0xAE97, 0x83BE, 0xAE98, 0x83BF, 0xAE99, 0x83C0, 0xAE9A, + 0x83C1, 0xAE9B, 0x83C2, 0xAE9C, 0x83C3, 0xAE9D, 0x83C4, 0xAE9E, 0x83C5, 0xAE9F, 0x83C6, 0xAEA0, 0x83C7, 0xAEA1, 0x83C8, 0xAEA2, + 0x83C9, 0xAEA3, 0x83CA, 0xAEA4, 0x83CB, 0xAEA5, 0x83CC, 0xAEA6, 0x83CD, 0xAEA7, 0x83CE, 0xAEA8, 0x83CF, 0xAEA9, 0x83D0, 0xAEAA, + 0x83D1, 0xAEAB, 0x83D2, 0xAEAC, 0x83D3, 0xAEAD, 0x83D4, 0xAEAE, 0x83D5, 0xAEAF, 0x83D6, 0xAEB0, 0x83D7, 0xAEB1, 0x83D8, 0xAEB2, + 0x83D9, 0xAEB3, 0x83DA, 0xAEB4, 0x83DB, 0xAEB5, 0x83DC, 0xAEB6, 0x83DD, 0xAEB7, 0x83DE, 0xAEB8, 0x83DF, 0xAEB9, 0x83E0, 0xAEBA, + 0x83E1, 0xAEBB, 0x83E2, 0xAEBF, 0x83E3, 0xAEC1, 0x83E4, 0xAEC2, 0x83E5, 0xAEC3, 0x83E6, 0xAEC5, 0x83E7, 0xAEC6, 0x83E8, 0xAEC7, + 0x83E9, 0xAEC8, 0x83EA, 0xAEC9, 0x83EB, 0xAECA, 0x83EC, 0xAECB, 0x83ED, 0xAECE, 0x83EE, 0xAED2, 0x83EF, 0xAED3, 0x83F0, 0xAED4, + 0x83F1, 0xAED5, 0x83F2, 0xAED6, 0x83F3, 0xAED7, 0x83F4, 0xAEDA, 0x83F5, 0xAEDB, 0x83F6, 0xAEDD, 0x83F7, 0xAEDE, 0x83F8, 0xAEDF, + 0x83F9, 0xAEE0, 0x83FA, 0xAEE1, 0x83FB, 0xAEE2, 0x83FC, 0xAEE3, 0x83FD, 0xAEE4, 0x83FE, 0xAEE5, 0x8441, 0xAEE6, 0x8442, 0xAEE7, + 0x8443, 0xAEE9, 0x8444, 0xAEEA, 0x8445, 0xAEEC, 0x8446, 0xAEEE, 0x8447, 0xAEEF, 0x8448, 0xAEF0, 0x8449, 0xAEF1, 0x844A, 0xAEF2, + 0x844B, 0xAEF3, 0x844C, 0xAEF5, 0x844D, 0xAEF6, 0x844E, 0xAEF7, 0x844F, 0xAEF9, 0x8450, 0xAEFA, 0x8451, 0xAEFB, 0x8452, 0xAEFD, + 0x8453, 0xAEFE, 0x8454, 0xAEFF, 0x8455, 0xAF00, 0x8456, 0xAF01, 0x8457, 0xAF02, 0x8458, 0xAF03, 0x8459, 0xAF04, 0x845A, 0xAF05, + 0x8461, 0xAF06, 0x8462, 0xAF09, 0x8463, 0xAF0A, 0x8464, 0xAF0B, 0x8465, 0xAF0C, 0x8466, 0xAF0E, 0x8467, 0xAF0F, 0x8468, 0xAF11, + 0x8469, 0xAF12, 0x846A, 0xAF13, 0x846B, 0xAF14, 0x846C, 0xAF15, 0x846D, 0xAF16, 0x846E, 0xAF17, 0x846F, 0xAF18, 0x8470, 0xAF19, + 0x8471, 0xAF1A, 0x8472, 0xAF1B, 0x8473, 0xAF1C, 0x8474, 0xAF1D, 0x8475, 0xAF1E, 0x8476, 0xAF1F, 0x8477, 0xAF20, 0x8478, 0xAF21, + 0x8479, 0xAF22, 0x847A, 0xAF23, 0x8481, 0xAF24, 0x8482, 0xAF25, 0x8483, 0xAF26, 0x8484, 0xAF27, 0x8485, 0xAF28, 0x8486, 0xAF29, + 0x8487, 0xAF2A, 0x8488, 0xAF2B, 0x8489, 0xAF2E, 0x848A, 0xAF2F, 0x848B, 0xAF31, 0x848C, 0xAF33, 0x848D, 0xAF35, 0x848E, 0xAF36, + 0x848F, 0xAF37, 0x8490, 0xAF38, 0x8491, 0xAF39, 0x8492, 0xAF3A, 0x8493, 0xAF3B, 0x8494, 0xAF3E, 0x8495, 0xAF40, 0x8496, 0xAF44, + 0x8497, 0xAF45, 0x8498, 0xAF46, 0x8499, 0xAF47, 0x849A, 0xAF4A, 0x849B, 0xAF4B, 0x849C, 0xAF4C, 0x849D, 0xAF4D, 0x849E, 0xAF4E, + 0x849F, 0xAF4F, 0x84A0, 0xAF51, 0x84A1, 0xAF52, 0x84A2, 0xAF53, 0x84A3, 0xAF54, 0x84A4, 0xAF55, 0x84A5, 0xAF56, 0x84A6, 0xAF57, + 0x84A7, 0xAF58, 0x84A8, 0xAF59, 0x84A9, 0xAF5A, 0x84AA, 0xAF5B, 0x84AB, 0xAF5E, 0x84AC, 0xAF5F, 0x84AD, 0xAF60, 0x84AE, 0xAF61, + 0x84AF, 0xAF62, 0x84B0, 0xAF63, 0x84B1, 0xAF66, 0x84B2, 0xAF67, 0x84B3, 0xAF68, 0x84B4, 0xAF69, 0x84B5, 0xAF6A, 0x84B6, 0xAF6B, + 0x84B7, 0xAF6C, 0x84B8, 0xAF6D, 0x84B9, 0xAF6E, 0x84BA, 0xAF6F, 0x84BB, 0xAF70, 0x84BC, 0xAF71, 0x84BD, 0xAF72, 0x84BE, 0xAF73, + 0x84BF, 0xAF74, 0x84C0, 0xAF75, 0x84C1, 0xAF76, 0x84C2, 0xAF77, 0x84C3, 0xAF78, 0x84C4, 0xAF7A, 0x84C5, 0xAF7B, 0x84C6, 0xAF7C, + 0x84C7, 0xAF7D, 0x84C8, 0xAF7E, 0x84C9, 0xAF7F, 0x84CA, 0xAF81, 0x84CB, 0xAF82, 0x84CC, 0xAF83, 0x84CD, 0xAF85, 0x84CE, 0xAF86, + 0x84CF, 0xAF87, 0x84D0, 0xAF89, 0x84D1, 0xAF8A, 0x84D2, 0xAF8B, 0x84D3, 0xAF8C, 0x84D4, 0xAF8D, 0x84D5, 0xAF8E, 0x84D6, 0xAF8F, + 0x84D7, 0xAF92, 0x84D8, 0xAF93, 0x84D9, 0xAF94, 0x84DA, 0xAF96, 0x84DB, 0xAF97, 0x84DC, 0xAF98, 0x84DD, 0xAF99, 0x84DE, 0xAF9A, + 0x84DF, 0xAF9B, 0x84E0, 0xAF9D, 0x84E1, 0xAF9E, 0x84E2, 0xAF9F, 0x84E3, 0xAFA0, 0x84E4, 0xAFA1, 0x84E5, 0xAFA2, 0x84E6, 0xAFA3, + 0x84E7, 0xAFA4, 0x84E8, 0xAFA5, 0x84E9, 0xAFA6, 0x84EA, 0xAFA7, 0x84EB, 0xAFA8, 0x84EC, 0xAFA9, 0x84ED, 0xAFAA, 0x84EE, 0xAFAB, + 0x84EF, 0xAFAC, 0x84F0, 0xAFAD, 0x84F1, 0xAFAE, 0x84F2, 0xAFAF, 0x84F3, 0xAFB0, 0x84F4, 0xAFB1, 0x84F5, 0xAFB2, 0x84F6, 0xAFB3, + 0x84F7, 0xAFB4, 0x84F8, 0xAFB5, 0x84F9, 0xAFB6, 0x84FA, 0xAFB7, 0x84FB, 0xAFBA, 0x84FC, 0xAFBB, 0x84FD, 0xAFBD, 0x84FE, 0xAFBE, + 0x8541, 0xAFBF, 0x8542, 0xAFC1, 0x8543, 0xAFC2, 0x8544, 0xAFC3, 0x8545, 0xAFC4, 0x8546, 0xAFC5, 0x8547, 0xAFC6, 0x8548, 0xAFCA, + 0x8549, 0xAFCC, 0x854A, 0xAFCF, 0x854B, 0xAFD0, 0x854C, 0xAFD1, 0x854D, 0xAFD2, 0x854E, 0xAFD3, 0x854F, 0xAFD5, 0x8550, 0xAFD6, + 0x8551, 0xAFD7, 0x8552, 0xAFD8, 0x8553, 0xAFD9, 0x8554, 0xAFDA, 0x8555, 0xAFDB, 0x8556, 0xAFDD, 0x8557, 0xAFDE, 0x8558, 0xAFDF, + 0x8559, 0xAFE0, 0x855A, 0xAFE1, 0x8561, 0xAFE2, 0x8562, 0xAFE3, 0x8563, 0xAFE4, 0x8564, 0xAFE5, 0x8565, 0xAFE6, 0x8566, 0xAFE7, + 0x8567, 0xAFEA, 0x8568, 0xAFEB, 0x8569, 0xAFEC, 0x856A, 0xAFED, 0x856B, 0xAFEE, 0x856C, 0xAFEF, 0x856D, 0xAFF2, 0x856E, 0xAFF3, + 0x856F, 0xAFF5, 0x8570, 0xAFF6, 0x8571, 0xAFF7, 0x8572, 0xAFF9, 0x8573, 0xAFFA, 0x8574, 0xAFFB, 0x8575, 0xAFFC, 0x8576, 0xAFFD, + 0x8577, 0xAFFE, 0x8578, 0xAFFF, 0x8579, 0xB002, 0x857A, 0xB003, 0x8581, 0xB005, 0x8582, 0xB006, 0x8583, 0xB007, 0x8584, 0xB008, + 0x8585, 0xB009, 0x8586, 0xB00A, 0x8587, 0xB00B, 0x8588, 0xB00D, 0x8589, 0xB00E, 0x858A, 0xB00F, 0x858B, 0xB011, 0x858C, 0xB012, + 0x858D, 0xB013, 0x858E, 0xB015, 0x858F, 0xB016, 0x8590, 0xB017, 0x8591, 0xB018, 0x8592, 0xB019, 0x8593, 0xB01A, 0x8594, 0xB01B, + 0x8595, 0xB01E, 0x8596, 0xB01F, 0x8597, 0xB020, 0x8598, 0xB021, 0x8599, 0xB022, 0x859A, 0xB023, 0x859B, 0xB024, 0x859C, 0xB025, + 0x859D, 0xB026, 0x859E, 0xB027, 0x859F, 0xB029, 0x85A0, 0xB02A, 0x85A1, 0xB02B, 0x85A2, 0xB02C, 0x85A3, 0xB02D, 0x85A4, 0xB02E, + 0x85A5, 0xB02F, 0x85A6, 0xB030, 0x85A7, 0xB031, 0x85A8, 0xB032, 0x85A9, 0xB033, 0x85AA, 0xB034, 0x85AB, 0xB035, 0x85AC, 0xB036, + 0x85AD, 0xB037, 0x85AE, 0xB038, 0x85AF, 0xB039, 0x85B0, 0xB03A, 0x85B1, 0xB03B, 0x85B2, 0xB03C, 0x85B3, 0xB03D, 0x85B4, 0xB03E, + 0x85B5, 0xB03F, 0x85B6, 0xB040, 0x85B7, 0xB041, 0x85B8, 0xB042, 0x85B9, 0xB043, 0x85BA, 0xB046, 0x85BB, 0xB047, 0x85BC, 0xB049, + 0x85BD, 0xB04B, 0x85BE, 0xB04D, 0x85BF, 0xB04F, 0x85C0, 0xB050, 0x85C1, 0xB051, 0x85C2, 0xB052, 0x85C3, 0xB056, 0x85C4, 0xB058, + 0x85C5, 0xB05A, 0x85C6, 0xB05B, 0x85C7, 0xB05C, 0x85C8, 0xB05E, 0x85C9, 0xB05F, 0x85CA, 0xB060, 0x85CB, 0xB061, 0x85CC, 0xB062, + 0x85CD, 0xB063, 0x85CE, 0xB064, 0x85CF, 0xB065, 0x85D0, 0xB066, 0x85D1, 0xB067, 0x85D2, 0xB068, 0x85D3, 0xB069, 0x85D4, 0xB06A, + 0x85D5, 0xB06B, 0x85D6, 0xB06C, 0x85D7, 0xB06D, 0x85D8, 0xB06E, 0x85D9, 0xB06F, 0x85DA, 0xB070, 0x85DB, 0xB071, 0x85DC, 0xB072, + 0x85DD, 0xB073, 0x85DE, 0xB074, 0x85DF, 0xB075, 0x85E0, 0xB076, 0x85E1, 0xB077, 0x85E2, 0xB078, 0x85E3, 0xB079, 0x85E4, 0xB07A, + 0x85E5, 0xB07B, 0x85E6, 0xB07E, 0x85E7, 0xB07F, 0x85E8, 0xB081, 0x85E9, 0xB082, 0x85EA, 0xB083, 0x85EB, 0xB085, 0x85EC, 0xB086, + 0x85ED, 0xB087, 0x85EE, 0xB088, 0x85EF, 0xB089, 0x85F0, 0xB08A, 0x85F1, 0xB08B, 0x85F2, 0xB08E, 0x85F3, 0xB090, 0x85F4, 0xB092, + 0x85F5, 0xB093, 0x85F6, 0xB094, 0x85F7, 0xB095, 0x85F8, 0xB096, 0x85F9, 0xB097, 0x85FA, 0xB09B, 0x85FB, 0xB09D, 0x85FC, 0xB09E, + 0x85FD, 0xB0A3, 0x85FE, 0xB0A4, 0x8641, 0xB0A5, 0x8642, 0xB0A6, 0x8643, 0xB0A7, 0x8644, 0xB0AA, 0x8645, 0xB0B0, 0x8646, 0xB0B2, + 0x8647, 0xB0B6, 0x8648, 0xB0B7, 0x8649, 0xB0B9, 0x864A, 0xB0BA, 0x864B, 0xB0BB, 0x864C, 0xB0BD, 0x864D, 0xB0BE, 0x864E, 0xB0BF, + 0x864F, 0xB0C0, 0x8650, 0xB0C1, 0x8651, 0xB0C2, 0x8652, 0xB0C3, 0x8653, 0xB0C6, 0x8654, 0xB0CA, 0x8655, 0xB0CB, 0x8656, 0xB0CC, + 0x8657, 0xB0CD, 0x8658, 0xB0CE, 0x8659, 0xB0CF, 0x865A, 0xB0D2, 0x8661, 0xB0D3, 0x8662, 0xB0D5, 0x8663, 0xB0D6, 0x8664, 0xB0D7, + 0x8665, 0xB0D9, 0x8666, 0xB0DA, 0x8667, 0xB0DB, 0x8668, 0xB0DC, 0x8669, 0xB0DD, 0x866A, 0xB0DE, 0x866B, 0xB0DF, 0x866C, 0xB0E1, + 0x866D, 0xB0E2, 0x866E, 0xB0E3, 0x866F, 0xB0E4, 0x8670, 0xB0E6, 0x8671, 0xB0E7, 0x8672, 0xB0E8, 0x8673, 0xB0E9, 0x8674, 0xB0EA, + 0x8675, 0xB0EB, 0x8676, 0xB0EC, 0x8677, 0xB0ED, 0x8678, 0xB0EE, 0x8679, 0xB0EF, 0x867A, 0xB0F0, 0x8681, 0xB0F1, 0x8682, 0xB0F2, + 0x8683, 0xB0F3, 0x8684, 0xB0F4, 0x8685, 0xB0F5, 0x8686, 0xB0F6, 0x8687, 0xB0F7, 0x8688, 0xB0F8, 0x8689, 0xB0F9, 0x868A, 0xB0FA, + 0x868B, 0xB0FB, 0x868C, 0xB0FC, 0x868D, 0xB0FD, 0x868E, 0xB0FE, 0x868F, 0xB0FF, 0x8690, 0xB100, 0x8691, 0xB101, 0x8692, 0xB102, + 0x8693, 0xB103, 0x8694, 0xB104, 0x8695, 0xB105, 0x8696, 0xB106, 0x8697, 0xB107, 0x8698, 0xB10A, 0x8699, 0xB10D, 0x869A, 0xB10E, + 0x869B, 0xB10F, 0x869C, 0xB111, 0x869D, 0xB114, 0x869E, 0xB115, 0x869F, 0xB116, 0x86A0, 0xB117, 0x86A1, 0xB11A, 0x86A2, 0xB11E, + 0x86A3, 0xB11F, 0x86A4, 0xB120, 0x86A5, 0xB121, 0x86A6, 0xB122, 0x86A7, 0xB126, 0x86A8, 0xB127, 0x86A9, 0xB129, 0x86AA, 0xB12A, + 0x86AB, 0xB12B, 0x86AC, 0xB12D, 0x86AD, 0xB12E, 0x86AE, 0xB12F, 0x86AF, 0xB130, 0x86B0, 0xB131, 0x86B1, 0xB132, 0x86B2, 0xB133, + 0x86B3, 0xB136, 0x86B4, 0xB13A, 0x86B5, 0xB13B, 0x86B6, 0xB13C, 0x86B7, 0xB13D, 0x86B8, 0xB13E, 0x86B9, 0xB13F, 0x86BA, 0xB142, + 0x86BB, 0xB143, 0x86BC, 0xB145, 0x86BD, 0xB146, 0x86BE, 0xB147, 0x86BF, 0xB149, 0x86C0, 0xB14A, 0x86C1, 0xB14B, 0x86C2, 0xB14C, + 0x86C3, 0xB14D, 0x86C4, 0xB14E, 0x86C5, 0xB14F, 0x86C6, 0xB152, 0x86C7, 0xB153, 0x86C8, 0xB156, 0x86C9, 0xB157, 0x86CA, 0xB159, + 0x86CB, 0xB15A, 0x86CC, 0xB15B, 0x86CD, 0xB15D, 0x86CE, 0xB15E, 0x86CF, 0xB15F, 0x86D0, 0xB161, 0x86D1, 0xB162, 0x86D2, 0xB163, + 0x86D3, 0xB164, 0x86D4, 0xB165, 0x86D5, 0xB166, 0x86D6, 0xB167, 0x86D7, 0xB168, 0x86D8, 0xB169, 0x86D9, 0xB16A, 0x86DA, 0xB16B, + 0x86DB, 0xB16C, 0x86DC, 0xB16D, 0x86DD, 0xB16E, 0x86DE, 0xB16F, 0x86DF, 0xB170, 0x86E0, 0xB171, 0x86E1, 0xB172, 0x86E2, 0xB173, + 0x86E3, 0xB174, 0x86E4, 0xB175, 0x86E5, 0xB176, 0x86E6, 0xB177, 0x86E7, 0xB17A, 0x86E8, 0xB17B, 0x86E9, 0xB17D, 0x86EA, 0xB17E, + 0x86EB, 0xB17F, 0x86EC, 0xB181, 0x86ED, 0xB183, 0x86EE, 0xB184, 0x86EF, 0xB185, 0x86F0, 0xB186, 0x86F1, 0xB187, 0x86F2, 0xB18A, + 0x86F3, 0xB18C, 0x86F4, 0xB18E, 0x86F5, 0xB18F, 0x86F6, 0xB190, 0x86F7, 0xB191, 0x86F8, 0xB195, 0x86F9, 0xB196, 0x86FA, 0xB197, + 0x86FB, 0xB199, 0x86FC, 0xB19A, 0x86FD, 0xB19B, 0x86FE, 0xB19D, 0x8741, 0xB19E, 0x8742, 0xB19F, 0x8743, 0xB1A0, 0x8744, 0xB1A1, + 0x8745, 0xB1A2, 0x8746, 0xB1A3, 0x8747, 0xB1A4, 0x8748, 0xB1A5, 0x8749, 0xB1A6, 0x874A, 0xB1A7, 0x874B, 0xB1A9, 0x874C, 0xB1AA, + 0x874D, 0xB1AB, 0x874E, 0xB1AC, 0x874F, 0xB1AD, 0x8750, 0xB1AE, 0x8751, 0xB1AF, 0x8752, 0xB1B0, 0x8753, 0xB1B1, 0x8754, 0xB1B2, + 0x8755, 0xB1B3, 0x8756, 0xB1B4, 0x8757, 0xB1B5, 0x8758, 0xB1B6, 0x8759, 0xB1B7, 0x875A, 0xB1B8, 0x8761, 0xB1B9, 0x8762, 0xB1BA, + 0x8763, 0xB1BB, 0x8764, 0xB1BC, 0x8765, 0xB1BD, 0x8766, 0xB1BE, 0x8767, 0xB1BF, 0x8768, 0xB1C0, 0x8769, 0xB1C1, 0x876A, 0xB1C2, + 0x876B, 0xB1C3, 0x876C, 0xB1C4, 0x876D, 0xB1C5, 0x876E, 0xB1C6, 0x876F, 0xB1C7, 0x8770, 0xB1C8, 0x8771, 0xB1C9, 0x8772, 0xB1CA, + 0x8773, 0xB1CB, 0x8774, 0xB1CD, 0x8775, 0xB1CE, 0x8776, 0xB1CF, 0x8777, 0xB1D1, 0x8778, 0xB1D2, 0x8779, 0xB1D3, 0x877A, 0xB1D5, + 0x8781, 0xB1D6, 0x8782, 0xB1D7, 0x8783, 0xB1D8, 0x8784, 0xB1D9, 0x8785, 0xB1DA, 0x8786, 0xB1DB, 0x8787, 0xB1DE, 0x8788, 0xB1E0, + 0x8789, 0xB1E1, 0x878A, 0xB1E2, 0x878B, 0xB1E3, 0x878C, 0xB1E4, 0x878D, 0xB1E5, 0x878E, 0xB1E6, 0x878F, 0xB1E7, 0x8790, 0xB1EA, + 0x8791, 0xB1EB, 0x8792, 0xB1ED, 0x8793, 0xB1EE, 0x8794, 0xB1EF, 0x8795, 0xB1F1, 0x8796, 0xB1F2, 0x8797, 0xB1F3, 0x8798, 0xB1F4, + 0x8799, 0xB1F5, 0x879A, 0xB1F6, 0x879B, 0xB1F7, 0x879C, 0xB1F8, 0x879D, 0xB1FA, 0x879E, 0xB1FC, 0x879F, 0xB1FE, 0x87A0, 0xB1FF, + 0x87A1, 0xB200, 0x87A2, 0xB201, 0x87A3, 0xB202, 0x87A4, 0xB203, 0x87A5, 0xB206, 0x87A6, 0xB207, 0x87A7, 0xB209, 0x87A8, 0xB20A, + 0x87A9, 0xB20D, 0x87AA, 0xB20E, 0x87AB, 0xB20F, 0x87AC, 0xB210, 0x87AD, 0xB211, 0x87AE, 0xB212, 0x87AF, 0xB213, 0x87B0, 0xB216, + 0x87B1, 0xB218, 0x87B2, 0xB21A, 0x87B3, 0xB21B, 0x87B4, 0xB21C, 0x87B5, 0xB21D, 0x87B6, 0xB21E, 0x87B7, 0xB21F, 0x87B8, 0xB221, + 0x87B9, 0xB222, 0x87BA, 0xB223, 0x87BB, 0xB224, 0x87BC, 0xB225, 0x87BD, 0xB226, 0x87BE, 0xB227, 0x87BF, 0xB228, 0x87C0, 0xB229, + 0x87C1, 0xB22A, 0x87C2, 0xB22B, 0x87C3, 0xB22C, 0x87C4, 0xB22D, 0x87C5, 0xB22E, 0x87C6, 0xB22F, 0x87C7, 0xB230, 0x87C8, 0xB231, + 0x87C9, 0xB232, 0x87CA, 0xB233, 0x87CB, 0xB235, 0x87CC, 0xB236, 0x87CD, 0xB237, 0x87CE, 0xB238, 0x87CF, 0xB239, 0x87D0, 0xB23A, + 0x87D1, 0xB23B, 0x87D2, 0xB23D, 0x87D3, 0xB23E, 0x87D4, 0xB23F, 0x87D5, 0xB240, 0x87D6, 0xB241, 0x87D7, 0xB242, 0x87D8, 0xB243, + 0x87D9, 0xB244, 0x87DA, 0xB245, 0x87DB, 0xB246, 0x87DC, 0xB247, 0x87DD, 0xB248, 0x87DE, 0xB249, 0x87DF, 0xB24A, 0x87E0, 0xB24B, + 0x87E1, 0xB24C, 0x87E2, 0xB24D, 0x87E3, 0xB24E, 0x87E4, 0xB24F, 0x87E5, 0xB250, 0x87E6, 0xB251, 0x87E7, 0xB252, 0x87E8, 0xB253, + 0x87E9, 0xB254, 0x87EA, 0xB255, 0x87EB, 0xB256, 0x87EC, 0xB257, 0x87ED, 0xB259, 0x87EE, 0xB25A, 0x87EF, 0xB25B, 0x87F0, 0xB25D, + 0x87F1, 0xB25E, 0x87F2, 0xB25F, 0x87F3, 0xB261, 0x87F4, 0xB262, 0x87F5, 0xB263, 0x87F6, 0xB264, 0x87F7, 0xB265, 0x87F8, 0xB266, + 0x87F9, 0xB267, 0x87FA, 0xB26A, 0x87FB, 0xB26B, 0x87FC, 0xB26C, 0x87FD, 0xB26D, 0x87FE, 0xB26E, 0x8841, 0xB26F, 0x8842, 0xB270, + 0x8843, 0xB271, 0x8844, 0xB272, 0x8845, 0xB273, 0x8846, 0xB276, 0x8847, 0xB277, 0x8848, 0xB278, 0x8849, 0xB279, 0x884A, 0xB27A, + 0x884B, 0xB27B, 0x884C, 0xB27D, 0x884D, 0xB27E, 0x884E, 0xB27F, 0x884F, 0xB280, 0x8850, 0xB281, 0x8851, 0xB282, 0x8852, 0xB283, + 0x8853, 0xB286, 0x8854, 0xB287, 0x8855, 0xB288, 0x8856, 0xB28A, 0x8857, 0xB28B, 0x8858, 0xB28C, 0x8859, 0xB28D, 0x885A, 0xB28E, + 0x8861, 0xB28F, 0x8862, 0xB292, 0x8863, 0xB293, 0x8864, 0xB295, 0x8865, 0xB296, 0x8866, 0xB297, 0x8867, 0xB29B, 0x8868, 0xB29C, + 0x8869, 0xB29D, 0x886A, 0xB29E, 0x886B, 0xB29F, 0x886C, 0xB2A2, 0x886D, 0xB2A4, 0x886E, 0xB2A7, 0x886F, 0xB2A8, 0x8870, 0xB2A9, + 0x8871, 0xB2AB, 0x8872, 0xB2AD, 0x8873, 0xB2AE, 0x8874, 0xB2AF, 0x8875, 0xB2B1, 0x8876, 0xB2B2, 0x8877, 0xB2B3, 0x8878, 0xB2B5, + 0x8879, 0xB2B6, 0x887A, 0xB2B7, 0x8881, 0xB2B8, 0x8882, 0xB2B9, 0x8883, 0xB2BA, 0x8884, 0xB2BB, 0x8885, 0xB2BC, 0x8886, 0xB2BD, + 0x8887, 0xB2BE, 0x8888, 0xB2BF, 0x8889, 0xB2C0, 0x888A, 0xB2C1, 0x888B, 0xB2C2, 0x888C, 0xB2C3, 0x888D, 0xB2C4, 0x888E, 0xB2C5, + 0x888F, 0xB2C6, 0x8890, 0xB2C7, 0x8891, 0xB2CA, 0x8892, 0xB2CB, 0x8893, 0xB2CD, 0x8894, 0xB2CE, 0x8895, 0xB2CF, 0x8896, 0xB2D1, + 0x8897, 0xB2D3, 0x8898, 0xB2D4, 0x8899, 0xB2D5, 0x889A, 0xB2D6, 0x889B, 0xB2D7, 0x889C, 0xB2DA, 0x889D, 0xB2DC, 0x889E, 0xB2DE, + 0x889F, 0xB2DF, 0x88A0, 0xB2E0, 0x88A1, 0xB2E1, 0x88A2, 0xB2E3, 0x88A3, 0xB2E7, 0x88A4, 0xB2E9, 0x88A5, 0xB2EA, 0x88A6, 0xB2F0, + 0x88A7, 0xB2F1, 0x88A8, 0xB2F2, 0x88A9, 0xB2F6, 0x88AA, 0xB2FC, 0x88AB, 0xB2FD, 0x88AC, 0xB2FE, 0x88AD, 0xB302, 0x88AE, 0xB303, + 0x88AF, 0xB305, 0x88B0, 0xB306, 0x88B1, 0xB307, 0x88B2, 0xB309, 0x88B3, 0xB30A, 0x88B4, 0xB30B, 0x88B5, 0xB30C, 0x88B6, 0xB30D, + 0x88B7, 0xB30E, 0x88B8, 0xB30F, 0x88B9, 0xB312, 0x88BA, 0xB316, 0x88BB, 0xB317, 0x88BC, 0xB318, 0x88BD, 0xB319, 0x88BE, 0xB31A, + 0x88BF, 0xB31B, 0x88C0, 0xB31D, 0x88C1, 0xB31E, 0x88C2, 0xB31F, 0x88C3, 0xB320, 0x88C4, 0xB321, 0x88C5, 0xB322, 0x88C6, 0xB323, + 0x88C7, 0xB324, 0x88C8, 0xB325, 0x88C9, 0xB326, 0x88CA, 0xB327, 0x88CB, 0xB328, 0x88CC, 0xB329, 0x88CD, 0xB32A, 0x88CE, 0xB32B, + 0x88CF, 0xB32C, 0x88D0, 0xB32D, 0x88D1, 0xB32E, 0x88D2, 0xB32F, 0x88D3, 0xB330, 0x88D4, 0xB331, 0x88D5, 0xB332, 0x88D6, 0xB333, + 0x88D7, 0xB334, 0x88D8, 0xB335, 0x88D9, 0xB336, 0x88DA, 0xB337, 0x88DB, 0xB338, 0x88DC, 0xB339, 0x88DD, 0xB33A, 0x88DE, 0xB33B, + 0x88DF, 0xB33C, 0x88E0, 0xB33D, 0x88E1, 0xB33E, 0x88E2, 0xB33F, 0x88E3, 0xB340, 0x88E4, 0xB341, 0x88E5, 0xB342, 0x88E6, 0xB343, + 0x88E7, 0xB344, 0x88E8, 0xB345, 0x88E9, 0xB346, 0x88EA, 0xB347, 0x88EB, 0xB348, 0x88EC, 0xB349, 0x88ED, 0xB34A, 0x88EE, 0xB34B, + 0x88EF, 0xB34C, 0x88F0, 0xB34D, 0x88F1, 0xB34E, 0x88F2, 0xB34F, 0x88F3, 0xB350, 0x88F4, 0xB351, 0x88F5, 0xB352, 0x88F6, 0xB353, + 0x88F7, 0xB357, 0x88F8, 0xB359, 0x88F9, 0xB35A, 0x88FA, 0xB35D, 0x88FB, 0xB360, 0x88FC, 0xB361, 0x88FD, 0xB362, 0x88FE, 0xB363, + 0x8941, 0xB366, 0x8942, 0xB368, 0x8943, 0xB36A, 0x8944, 0xB36C, 0x8945, 0xB36D, 0x8946, 0xB36F, 0x8947, 0xB372, 0x8948, 0xB373, + 0x8949, 0xB375, 0x894A, 0xB376, 0x894B, 0xB377, 0x894C, 0xB379, 0x894D, 0xB37A, 0x894E, 0xB37B, 0x894F, 0xB37C, 0x8950, 0xB37D, + 0x8951, 0xB37E, 0x8952, 0xB37F, 0x8953, 0xB382, 0x8954, 0xB386, 0x8955, 0xB387, 0x8956, 0xB388, 0x8957, 0xB389, 0x8958, 0xB38A, + 0x8959, 0xB38B, 0x895A, 0xB38D, 0x8961, 0xB38E, 0x8962, 0xB38F, 0x8963, 0xB391, 0x8964, 0xB392, 0x8965, 0xB393, 0x8966, 0xB395, + 0x8967, 0xB396, 0x8968, 0xB397, 0x8969, 0xB398, 0x896A, 0xB399, 0x896B, 0xB39A, 0x896C, 0xB39B, 0x896D, 0xB39C, 0x896E, 0xB39D, + 0x896F, 0xB39E, 0x8970, 0xB39F, 0x8971, 0xB3A2, 0x8972, 0xB3A3, 0x8973, 0xB3A4, 0x8974, 0xB3A5, 0x8975, 0xB3A6, 0x8976, 0xB3A7, + 0x8977, 0xB3A9, 0x8978, 0xB3AA, 0x8979, 0xB3AB, 0x897A, 0xB3AD, 0x8981, 0xB3AE, 0x8982, 0xB3AF, 0x8983, 0xB3B0, 0x8984, 0xB3B1, + 0x8985, 0xB3B2, 0x8986, 0xB3B3, 0x8987, 0xB3B4, 0x8988, 0xB3B5, 0x8989, 0xB3B6, 0x898A, 0xB3B7, 0x898B, 0xB3B8, 0x898C, 0xB3B9, + 0x898D, 0xB3BA, 0x898E, 0xB3BB, 0x898F, 0xB3BC, 0x8990, 0xB3BD, 0x8991, 0xB3BE, 0x8992, 0xB3BF, 0x8993, 0xB3C0, 0x8994, 0xB3C1, + 0x8995, 0xB3C2, 0x8996, 0xB3C3, 0x8997, 0xB3C6, 0x8998, 0xB3C7, 0x8999, 0xB3C9, 0x899A, 0xB3CA, 0x899B, 0xB3CD, 0x899C, 0xB3CF, + 0x899D, 0xB3D1, 0x899E, 0xB3D2, 0x899F, 0xB3D3, 0x89A0, 0xB3D6, 0x89A1, 0xB3D8, 0x89A2, 0xB3DA, 0x89A3, 0xB3DC, 0x89A4, 0xB3DE, + 0x89A5, 0xB3DF, 0x89A6, 0xB3E1, 0x89A7, 0xB3E2, 0x89A8, 0xB3E3, 0x89A9, 0xB3E5, 0x89AA, 0xB3E6, 0x89AB, 0xB3E7, 0x89AC, 0xB3E9, + 0x89AD, 0xB3EA, 0x89AE, 0xB3EB, 0x89AF, 0xB3EC, 0x89B0, 0xB3ED, 0x89B1, 0xB3EE, 0x89B2, 0xB3EF, 0x89B3, 0xB3F0, 0x89B4, 0xB3F1, + 0x89B5, 0xB3F2, 0x89B6, 0xB3F3, 0x89B7, 0xB3F4, 0x89B8, 0xB3F5, 0x89B9, 0xB3F6, 0x89BA, 0xB3F7, 0x89BB, 0xB3F8, 0x89BC, 0xB3F9, + 0x89BD, 0xB3FA, 0x89BE, 0xB3FB, 0x89BF, 0xB3FD, 0x89C0, 0xB3FE, 0x89C1, 0xB3FF, 0x89C2, 0xB400, 0x89C3, 0xB401, 0x89C4, 0xB402, + 0x89C5, 0xB403, 0x89C6, 0xB404, 0x89C7, 0xB405, 0x89C8, 0xB406, 0x89C9, 0xB407, 0x89CA, 0xB408, 0x89CB, 0xB409, 0x89CC, 0xB40A, + 0x89CD, 0xB40B, 0x89CE, 0xB40C, 0x89CF, 0xB40D, 0x89D0, 0xB40E, 0x89D1, 0xB40F, 0x89D2, 0xB411, 0x89D3, 0xB412, 0x89D4, 0xB413, + 0x89D5, 0xB414, 0x89D6, 0xB415, 0x89D7, 0xB416, 0x89D8, 0xB417, 0x89D9, 0xB419, 0x89DA, 0xB41A, 0x89DB, 0xB41B, 0x89DC, 0xB41D, + 0x89DD, 0xB41E, 0x89DE, 0xB41F, 0x89DF, 0xB421, 0x89E0, 0xB422, 0x89E1, 0xB423, 0x89E2, 0xB424, 0x89E3, 0xB425, 0x89E4, 0xB426, + 0x89E5, 0xB427, 0x89E6, 0xB42A, 0x89E7, 0xB42C, 0x89E8, 0xB42D, 0x89E9, 0xB42E, 0x89EA, 0xB42F, 0x89EB, 0xB430, 0x89EC, 0xB431, + 0x89ED, 0xB432, 0x89EE, 0xB433, 0x89EF, 0xB435, 0x89F0, 0xB436, 0x89F1, 0xB437, 0x89F2, 0xB438, 0x89F3, 0xB439, 0x89F4, 0xB43A, + 0x89F5, 0xB43B, 0x89F6, 0xB43C, 0x89F7, 0xB43D, 0x89F8, 0xB43E, 0x89F9, 0xB43F, 0x89FA, 0xB440, 0x89FB, 0xB441, 0x89FC, 0xB442, + 0x89FD, 0xB443, 0x89FE, 0xB444, 0x8A41, 0xB445, 0x8A42, 0xB446, 0x8A43, 0xB447, 0x8A44, 0xB448, 0x8A45, 0xB449, 0x8A46, 0xB44A, + 0x8A47, 0xB44B, 0x8A48, 0xB44C, 0x8A49, 0xB44D, 0x8A4A, 0xB44E, 0x8A4B, 0xB44F, 0x8A4C, 0xB452, 0x8A4D, 0xB453, 0x8A4E, 0xB455, + 0x8A4F, 0xB456, 0x8A50, 0xB457, 0x8A51, 0xB459, 0x8A52, 0xB45A, 0x8A53, 0xB45B, 0x8A54, 0xB45C, 0x8A55, 0xB45D, 0x8A56, 0xB45E, + 0x8A57, 0xB45F, 0x8A58, 0xB462, 0x8A59, 0xB464, 0x8A5A, 0xB466, 0x8A61, 0xB467, 0x8A62, 0xB468, 0x8A63, 0xB469, 0x8A64, 0xB46A, + 0x8A65, 0xB46B, 0x8A66, 0xB46D, 0x8A67, 0xB46E, 0x8A68, 0xB46F, 0x8A69, 0xB470, 0x8A6A, 0xB471, 0x8A6B, 0xB472, 0x8A6C, 0xB473, + 0x8A6D, 0xB474, 0x8A6E, 0xB475, 0x8A6F, 0xB476, 0x8A70, 0xB477, 0x8A71, 0xB478, 0x8A72, 0xB479, 0x8A73, 0xB47A, 0x8A74, 0xB47B, + 0x8A75, 0xB47C, 0x8A76, 0xB47D, 0x8A77, 0xB47E, 0x8A78, 0xB47F, 0x8A79, 0xB481, 0x8A7A, 0xB482, 0x8A81, 0xB483, 0x8A82, 0xB484, + 0x8A83, 0xB485, 0x8A84, 0xB486, 0x8A85, 0xB487, 0x8A86, 0xB489, 0x8A87, 0xB48A, 0x8A88, 0xB48B, 0x8A89, 0xB48C, 0x8A8A, 0xB48D, + 0x8A8B, 0xB48E, 0x8A8C, 0xB48F, 0x8A8D, 0xB490, 0x8A8E, 0xB491, 0x8A8F, 0xB492, 0x8A90, 0xB493, 0x8A91, 0xB494, 0x8A92, 0xB495, + 0x8A93, 0xB496, 0x8A94, 0xB497, 0x8A95, 0xB498, 0x8A96, 0xB499, 0x8A97, 0xB49A, 0x8A98, 0xB49B, 0x8A99, 0xB49C, 0x8A9A, 0xB49E, + 0x8A9B, 0xB49F, 0x8A9C, 0xB4A0, 0x8A9D, 0xB4A1, 0x8A9E, 0xB4A2, 0x8A9F, 0xB4A3, 0x8AA0, 0xB4A5, 0x8AA1, 0xB4A6, 0x8AA2, 0xB4A7, + 0x8AA3, 0xB4A9, 0x8AA4, 0xB4AA, 0x8AA5, 0xB4AB, 0x8AA6, 0xB4AD, 0x8AA7, 0xB4AE, 0x8AA8, 0xB4AF, 0x8AA9, 0xB4B0, 0x8AAA, 0xB4B1, + 0x8AAB, 0xB4B2, 0x8AAC, 0xB4B3, 0x8AAD, 0xB4B4, 0x8AAE, 0xB4B6, 0x8AAF, 0xB4B8, 0x8AB0, 0xB4BA, 0x8AB1, 0xB4BB, 0x8AB2, 0xB4BC, + 0x8AB3, 0xB4BD, 0x8AB4, 0xB4BE, 0x8AB5, 0xB4BF, 0x8AB6, 0xB4C1, 0x8AB7, 0xB4C2, 0x8AB8, 0xB4C3, 0x8AB9, 0xB4C5, 0x8ABA, 0xB4C6, + 0x8ABB, 0xB4C7, 0x8ABC, 0xB4C9, 0x8ABD, 0xB4CA, 0x8ABE, 0xB4CB, 0x8ABF, 0xB4CC, 0x8AC0, 0xB4CD, 0x8AC1, 0xB4CE, 0x8AC2, 0xB4CF, + 0x8AC3, 0xB4D1, 0x8AC4, 0xB4D2, 0x8AC5, 0xB4D3, 0x8AC6, 0xB4D4, 0x8AC7, 0xB4D6, 0x8AC8, 0xB4D7, 0x8AC9, 0xB4D8, 0x8ACA, 0xB4D9, + 0x8ACB, 0xB4DA, 0x8ACC, 0xB4DB, 0x8ACD, 0xB4DE, 0x8ACE, 0xB4DF, 0x8ACF, 0xB4E1, 0x8AD0, 0xB4E2, 0x8AD1, 0xB4E5, 0x8AD2, 0xB4E7, + 0x8AD3, 0xB4E8, 0x8AD4, 0xB4E9, 0x8AD5, 0xB4EA, 0x8AD6, 0xB4EB, 0x8AD7, 0xB4EE, 0x8AD8, 0xB4F0, 0x8AD9, 0xB4F2, 0x8ADA, 0xB4F3, + 0x8ADB, 0xB4F4, 0x8ADC, 0xB4F5, 0x8ADD, 0xB4F6, 0x8ADE, 0xB4F7, 0x8ADF, 0xB4F9, 0x8AE0, 0xB4FA, 0x8AE1, 0xB4FB, 0x8AE2, 0xB4FC, + 0x8AE3, 0xB4FD, 0x8AE4, 0xB4FE, 0x8AE5, 0xB4FF, 0x8AE6, 0xB500, 0x8AE7, 0xB501, 0x8AE8, 0xB502, 0x8AE9, 0xB503, 0x8AEA, 0xB504, + 0x8AEB, 0xB505, 0x8AEC, 0xB506, 0x8AED, 0xB507, 0x8AEE, 0xB508, 0x8AEF, 0xB509, 0x8AF0, 0xB50A, 0x8AF1, 0xB50B, 0x8AF2, 0xB50C, + 0x8AF3, 0xB50D, 0x8AF4, 0xB50E, 0x8AF5, 0xB50F, 0x8AF6, 0xB510, 0x8AF7, 0xB511, 0x8AF8, 0xB512, 0x8AF9, 0xB513, 0x8AFA, 0xB516, + 0x8AFB, 0xB517, 0x8AFC, 0xB519, 0x8AFD, 0xB51A, 0x8AFE, 0xB51D, 0x8B41, 0xB51E, 0x8B42, 0xB51F, 0x8B43, 0xB520, 0x8B44, 0xB521, + 0x8B45, 0xB522, 0x8B46, 0xB523, 0x8B47, 0xB526, 0x8B48, 0xB52B, 0x8B49, 0xB52C, 0x8B4A, 0xB52D, 0x8B4B, 0xB52E, 0x8B4C, 0xB52F, + 0x8B4D, 0xB532, 0x8B4E, 0xB533, 0x8B4F, 0xB535, 0x8B50, 0xB536, 0x8B51, 0xB537, 0x8B52, 0xB539, 0x8B53, 0xB53A, 0x8B54, 0xB53B, + 0x8B55, 0xB53C, 0x8B56, 0xB53D, 0x8B57, 0xB53E, 0x8B58, 0xB53F, 0x8B59, 0xB542, 0x8B5A, 0xB546, 0x8B61, 0xB547, 0x8B62, 0xB548, + 0x8B63, 0xB549, 0x8B64, 0xB54A, 0x8B65, 0xB54E, 0x8B66, 0xB54F, 0x8B67, 0xB551, 0x8B68, 0xB552, 0x8B69, 0xB553, 0x8B6A, 0xB555, + 0x8B6B, 0xB556, 0x8B6C, 0xB557, 0x8B6D, 0xB558, 0x8B6E, 0xB559, 0x8B6F, 0xB55A, 0x8B70, 0xB55B, 0x8B71, 0xB55E, 0x8B72, 0xB562, + 0x8B73, 0xB563, 0x8B74, 0xB564, 0x8B75, 0xB565, 0x8B76, 0xB566, 0x8B77, 0xB567, 0x8B78, 0xB568, 0x8B79, 0xB569, 0x8B7A, 0xB56A, + 0x8B81, 0xB56B, 0x8B82, 0xB56C, 0x8B83, 0xB56D, 0x8B84, 0xB56E, 0x8B85, 0xB56F, 0x8B86, 0xB570, 0x8B87, 0xB571, 0x8B88, 0xB572, + 0x8B89, 0xB573, 0x8B8A, 0xB574, 0x8B8B, 0xB575, 0x8B8C, 0xB576, 0x8B8D, 0xB577, 0x8B8E, 0xB578, 0x8B8F, 0xB579, 0x8B90, 0xB57A, + 0x8B91, 0xB57B, 0x8B92, 0xB57C, 0x8B93, 0xB57D, 0x8B94, 0xB57E, 0x8B95, 0xB57F, 0x8B96, 0xB580, 0x8B97, 0xB581, 0x8B98, 0xB582, + 0x8B99, 0xB583, 0x8B9A, 0xB584, 0x8B9B, 0xB585, 0x8B9C, 0xB586, 0x8B9D, 0xB587, 0x8B9E, 0xB588, 0x8B9F, 0xB589, 0x8BA0, 0xB58A, + 0x8BA1, 0xB58B, 0x8BA2, 0xB58C, 0x8BA3, 0xB58D, 0x8BA4, 0xB58E, 0x8BA5, 0xB58F, 0x8BA6, 0xB590, 0x8BA7, 0xB591, 0x8BA8, 0xB592, + 0x8BA9, 0xB593, 0x8BAA, 0xB594, 0x8BAB, 0xB595, 0x8BAC, 0xB596, 0x8BAD, 0xB597, 0x8BAE, 0xB598, 0x8BAF, 0xB599, 0x8BB0, 0xB59A, + 0x8BB1, 0xB59B, 0x8BB2, 0xB59C, 0x8BB3, 0xB59D, 0x8BB4, 0xB59E, 0x8BB5, 0xB59F, 0x8BB6, 0xB5A2, 0x8BB7, 0xB5A3, 0x8BB8, 0xB5A5, + 0x8BB9, 0xB5A6, 0x8BBA, 0xB5A7, 0x8BBB, 0xB5A9, 0x8BBC, 0xB5AC, 0x8BBD, 0xB5AD, 0x8BBE, 0xB5AE, 0x8BBF, 0xB5AF, 0x8BC0, 0xB5B2, + 0x8BC1, 0xB5B6, 0x8BC2, 0xB5B7, 0x8BC3, 0xB5B8, 0x8BC4, 0xB5B9, 0x8BC5, 0xB5BA, 0x8BC6, 0xB5BE, 0x8BC7, 0xB5BF, 0x8BC8, 0xB5C1, + 0x8BC9, 0xB5C2, 0x8BCA, 0xB5C3, 0x8BCB, 0xB5C5, 0x8BCC, 0xB5C6, 0x8BCD, 0xB5C7, 0x8BCE, 0xB5C8, 0x8BCF, 0xB5C9, 0x8BD0, 0xB5CA, + 0x8BD1, 0xB5CB, 0x8BD2, 0xB5CE, 0x8BD3, 0xB5D2, 0x8BD4, 0xB5D3, 0x8BD5, 0xB5D4, 0x8BD6, 0xB5D5, 0x8BD7, 0xB5D6, 0x8BD8, 0xB5D7, + 0x8BD9, 0xB5D9, 0x8BDA, 0xB5DA, 0x8BDB, 0xB5DB, 0x8BDC, 0xB5DC, 0x8BDD, 0xB5DD, 0x8BDE, 0xB5DE, 0x8BDF, 0xB5DF, 0x8BE0, 0xB5E0, + 0x8BE1, 0xB5E1, 0x8BE2, 0xB5E2, 0x8BE3, 0xB5E3, 0x8BE4, 0xB5E4, 0x8BE5, 0xB5E5, 0x8BE6, 0xB5E6, 0x8BE7, 0xB5E7, 0x8BE8, 0xB5E8, + 0x8BE9, 0xB5E9, 0x8BEA, 0xB5EA, 0x8BEB, 0xB5EB, 0x8BEC, 0xB5ED, 0x8BED, 0xB5EE, 0x8BEE, 0xB5EF, 0x8BEF, 0xB5F0, 0x8BF0, 0xB5F1, + 0x8BF1, 0xB5F2, 0x8BF2, 0xB5F3, 0x8BF3, 0xB5F4, 0x8BF4, 0xB5F5, 0x8BF5, 0xB5F6, 0x8BF6, 0xB5F7, 0x8BF7, 0xB5F8, 0x8BF8, 0xB5F9, + 0x8BF9, 0xB5FA, 0x8BFA, 0xB5FB, 0x8BFB, 0xB5FC, 0x8BFC, 0xB5FD, 0x8BFD, 0xB5FE, 0x8BFE, 0xB5FF, 0x8C41, 0xB600, 0x8C42, 0xB601, + 0x8C43, 0xB602, 0x8C44, 0xB603, 0x8C45, 0xB604, 0x8C46, 0xB605, 0x8C47, 0xB606, 0x8C48, 0xB607, 0x8C49, 0xB608, 0x8C4A, 0xB609, + 0x8C4B, 0xB60A, 0x8C4C, 0xB60B, 0x8C4D, 0xB60C, 0x8C4E, 0xB60D, 0x8C4F, 0xB60E, 0x8C50, 0xB60F, 0x8C51, 0xB612, 0x8C52, 0xB613, + 0x8C53, 0xB615, 0x8C54, 0xB616, 0x8C55, 0xB617, 0x8C56, 0xB619, 0x8C57, 0xB61A, 0x8C58, 0xB61B, 0x8C59, 0xB61C, 0x8C5A, 0xB61D, + 0x8C61, 0xB61E, 0x8C62, 0xB61F, 0x8C63, 0xB620, 0x8C64, 0xB621, 0x8C65, 0xB622, 0x8C66, 0xB623, 0x8C67, 0xB624, 0x8C68, 0xB626, + 0x8C69, 0xB627, 0x8C6A, 0xB628, 0x8C6B, 0xB629, 0x8C6C, 0xB62A, 0x8C6D, 0xB62B, 0x8C6E, 0xB62D, 0x8C6F, 0xB62E, 0x8C70, 0xB62F, + 0x8C71, 0xB630, 0x8C72, 0xB631, 0x8C73, 0xB632, 0x8C74, 0xB633, 0x8C75, 0xB635, 0x8C76, 0xB636, 0x8C77, 0xB637, 0x8C78, 0xB638, + 0x8C79, 0xB639, 0x8C7A, 0xB63A, 0x8C81, 0xB63B, 0x8C82, 0xB63C, 0x8C83, 0xB63D, 0x8C84, 0xB63E, 0x8C85, 0xB63F, 0x8C86, 0xB640, + 0x8C87, 0xB641, 0x8C88, 0xB642, 0x8C89, 0xB643, 0x8C8A, 0xB644, 0x8C8B, 0xB645, 0x8C8C, 0xB646, 0x8C8D, 0xB647, 0x8C8E, 0xB649, + 0x8C8F, 0xB64A, 0x8C90, 0xB64B, 0x8C91, 0xB64C, 0x8C92, 0xB64D, 0x8C93, 0xB64E, 0x8C94, 0xB64F, 0x8C95, 0xB650, 0x8C96, 0xB651, + 0x8C97, 0xB652, 0x8C98, 0xB653, 0x8C99, 0xB654, 0x8C9A, 0xB655, 0x8C9B, 0xB656, 0x8C9C, 0xB657, 0x8C9D, 0xB658, 0x8C9E, 0xB659, + 0x8C9F, 0xB65A, 0x8CA0, 0xB65B, 0x8CA1, 0xB65C, 0x8CA2, 0xB65D, 0x8CA3, 0xB65E, 0x8CA4, 0xB65F, 0x8CA5, 0xB660, 0x8CA6, 0xB661, + 0x8CA7, 0xB662, 0x8CA8, 0xB663, 0x8CA9, 0xB665, 0x8CAA, 0xB666, 0x8CAB, 0xB667, 0x8CAC, 0xB669, 0x8CAD, 0xB66A, 0x8CAE, 0xB66B, + 0x8CAF, 0xB66C, 0x8CB0, 0xB66D, 0x8CB1, 0xB66E, 0x8CB2, 0xB66F, 0x8CB3, 0xB670, 0x8CB4, 0xB671, 0x8CB5, 0xB672, 0x8CB6, 0xB673, + 0x8CB7, 0xB674, 0x8CB8, 0xB675, 0x8CB9, 0xB676, 0x8CBA, 0xB677, 0x8CBB, 0xB678, 0x8CBC, 0xB679, 0x8CBD, 0xB67A, 0x8CBE, 0xB67B, + 0x8CBF, 0xB67C, 0x8CC0, 0xB67D, 0x8CC1, 0xB67E, 0x8CC2, 0xB67F, 0x8CC3, 0xB680, 0x8CC4, 0xB681, 0x8CC5, 0xB682, 0x8CC6, 0xB683, + 0x8CC7, 0xB684, 0x8CC8, 0xB685, 0x8CC9, 0xB686, 0x8CCA, 0xB687, 0x8CCB, 0xB688, 0x8CCC, 0xB689, 0x8CCD, 0xB68A, 0x8CCE, 0xB68B, + 0x8CCF, 0xB68C, 0x8CD0, 0xB68D, 0x8CD1, 0xB68E, 0x8CD2, 0xB68F, 0x8CD3, 0xB690, 0x8CD4, 0xB691, 0x8CD5, 0xB692, 0x8CD6, 0xB693, + 0x8CD7, 0xB694, 0x8CD8, 0xB695, 0x8CD9, 0xB696, 0x8CDA, 0xB697, 0x8CDB, 0xB698, 0x8CDC, 0xB699, 0x8CDD, 0xB69A, 0x8CDE, 0xB69B, + 0x8CDF, 0xB69E, 0x8CE0, 0xB69F, 0x8CE1, 0xB6A1, 0x8CE2, 0xB6A2, 0x8CE3, 0xB6A3, 0x8CE4, 0xB6A5, 0x8CE5, 0xB6A6, 0x8CE6, 0xB6A7, + 0x8CE7, 0xB6A8, 0x8CE8, 0xB6A9, 0x8CE9, 0xB6AA, 0x8CEA, 0xB6AD, 0x8CEB, 0xB6AE, 0x8CEC, 0xB6AF, 0x8CED, 0xB6B0, 0x8CEE, 0xB6B2, + 0x8CEF, 0xB6B3, 0x8CF0, 0xB6B4, 0x8CF1, 0xB6B5, 0x8CF2, 0xB6B6, 0x8CF3, 0xB6B7, 0x8CF4, 0xB6B8, 0x8CF5, 0xB6B9, 0x8CF6, 0xB6BA, + 0x8CF7, 0xB6BB, 0x8CF8, 0xB6BC, 0x8CF9, 0xB6BD, 0x8CFA, 0xB6BE, 0x8CFB, 0xB6BF, 0x8CFC, 0xB6C0, 0x8CFD, 0xB6C1, 0x8CFE, 0xB6C2, + 0x8D41, 0xB6C3, 0x8D42, 0xB6C4, 0x8D43, 0xB6C5, 0x8D44, 0xB6C6, 0x8D45, 0xB6C7, 0x8D46, 0xB6C8, 0x8D47, 0xB6C9, 0x8D48, 0xB6CA, + 0x8D49, 0xB6CB, 0x8D4A, 0xB6CC, 0x8D4B, 0xB6CD, 0x8D4C, 0xB6CE, 0x8D4D, 0xB6CF, 0x8D4E, 0xB6D0, 0x8D4F, 0xB6D1, 0x8D50, 0xB6D2, + 0x8D51, 0xB6D3, 0x8D52, 0xB6D5, 0x8D53, 0xB6D6, 0x8D54, 0xB6D7, 0x8D55, 0xB6D8, 0x8D56, 0xB6D9, 0x8D57, 0xB6DA, 0x8D58, 0xB6DB, + 0x8D59, 0xB6DC, 0x8D5A, 0xB6DD, 0x8D61, 0xB6DE, 0x8D62, 0xB6DF, 0x8D63, 0xB6E0, 0x8D64, 0xB6E1, 0x8D65, 0xB6E2, 0x8D66, 0xB6E3, + 0x8D67, 0xB6E4, 0x8D68, 0xB6E5, 0x8D69, 0xB6E6, 0x8D6A, 0xB6E7, 0x8D6B, 0xB6E8, 0x8D6C, 0xB6E9, 0x8D6D, 0xB6EA, 0x8D6E, 0xB6EB, + 0x8D6F, 0xB6EC, 0x8D70, 0xB6ED, 0x8D71, 0xB6EE, 0x8D72, 0xB6EF, 0x8D73, 0xB6F1, 0x8D74, 0xB6F2, 0x8D75, 0xB6F3, 0x8D76, 0xB6F5, + 0x8D77, 0xB6F6, 0x8D78, 0xB6F7, 0x8D79, 0xB6F9, 0x8D7A, 0xB6FA, 0x8D81, 0xB6FB, 0x8D82, 0xB6FC, 0x8D83, 0xB6FD, 0x8D84, 0xB6FE, + 0x8D85, 0xB6FF, 0x8D86, 0xB702, 0x8D87, 0xB703, 0x8D88, 0xB704, 0x8D89, 0xB706, 0x8D8A, 0xB707, 0x8D8B, 0xB708, 0x8D8C, 0xB709, + 0x8D8D, 0xB70A, 0x8D8E, 0xB70B, 0x8D8F, 0xB70C, 0x8D90, 0xB70D, 0x8D91, 0xB70E, 0x8D92, 0xB70F, 0x8D93, 0xB710, 0x8D94, 0xB711, + 0x8D95, 0xB712, 0x8D96, 0xB713, 0x8D97, 0xB714, 0x8D98, 0xB715, 0x8D99, 0xB716, 0x8D9A, 0xB717, 0x8D9B, 0xB718, 0x8D9C, 0xB719, + 0x8D9D, 0xB71A, 0x8D9E, 0xB71B, 0x8D9F, 0xB71C, 0x8DA0, 0xB71D, 0x8DA1, 0xB71E, 0x8DA2, 0xB71F, 0x8DA3, 0xB720, 0x8DA4, 0xB721, + 0x8DA5, 0xB722, 0x8DA6, 0xB723, 0x8DA7, 0xB724, 0x8DA8, 0xB725, 0x8DA9, 0xB726, 0x8DAA, 0xB727, 0x8DAB, 0xB72A, 0x8DAC, 0xB72B, + 0x8DAD, 0xB72D, 0x8DAE, 0xB72E, 0x8DAF, 0xB731, 0x8DB0, 0xB732, 0x8DB1, 0xB733, 0x8DB2, 0xB734, 0x8DB3, 0xB735, 0x8DB4, 0xB736, + 0x8DB5, 0xB737, 0x8DB6, 0xB73A, 0x8DB7, 0xB73C, 0x8DB8, 0xB73D, 0x8DB9, 0xB73E, 0x8DBA, 0xB73F, 0x8DBB, 0xB740, 0x8DBC, 0xB741, + 0x8DBD, 0xB742, 0x8DBE, 0xB743, 0x8DBF, 0xB745, 0x8DC0, 0xB746, 0x8DC1, 0xB747, 0x8DC2, 0xB749, 0x8DC3, 0xB74A, 0x8DC4, 0xB74B, + 0x8DC5, 0xB74D, 0x8DC6, 0xB74E, 0x8DC7, 0xB74F, 0x8DC8, 0xB750, 0x8DC9, 0xB751, 0x8DCA, 0xB752, 0x8DCB, 0xB753, 0x8DCC, 0xB756, + 0x8DCD, 0xB757, 0x8DCE, 0xB758, 0x8DCF, 0xB759, 0x8DD0, 0xB75A, 0x8DD1, 0xB75B, 0x8DD2, 0xB75C, 0x8DD3, 0xB75D, 0x8DD4, 0xB75E, + 0x8DD5, 0xB75F, 0x8DD6, 0xB761, 0x8DD7, 0xB762, 0x8DD8, 0xB763, 0x8DD9, 0xB765, 0x8DDA, 0xB766, 0x8DDB, 0xB767, 0x8DDC, 0xB769, + 0x8DDD, 0xB76A, 0x8DDE, 0xB76B, 0x8DDF, 0xB76C, 0x8DE0, 0xB76D, 0x8DE1, 0xB76E, 0x8DE2, 0xB76F, 0x8DE3, 0xB772, 0x8DE4, 0xB774, + 0x8DE5, 0xB776, 0x8DE6, 0xB777, 0x8DE7, 0xB778, 0x8DE8, 0xB779, 0x8DE9, 0xB77A, 0x8DEA, 0xB77B, 0x8DEB, 0xB77E, 0x8DEC, 0xB77F, + 0x8DED, 0xB781, 0x8DEE, 0xB782, 0x8DEF, 0xB783, 0x8DF0, 0xB785, 0x8DF1, 0xB786, 0x8DF2, 0xB787, 0x8DF3, 0xB788, 0x8DF4, 0xB789, + 0x8DF5, 0xB78A, 0x8DF6, 0xB78B, 0x8DF7, 0xB78E, 0x8DF8, 0xB793, 0x8DF9, 0xB794, 0x8DFA, 0xB795, 0x8DFB, 0xB79A, 0x8DFC, 0xB79B, + 0x8DFD, 0xB79D, 0x8DFE, 0xB79E, 0x8E41, 0xB79F, 0x8E42, 0xB7A1, 0x8E43, 0xB7A2, 0x8E44, 0xB7A3, 0x8E45, 0xB7A4, 0x8E46, 0xB7A5, + 0x8E47, 0xB7A6, 0x8E48, 0xB7A7, 0x8E49, 0xB7AA, 0x8E4A, 0xB7AE, 0x8E4B, 0xB7AF, 0x8E4C, 0xB7B0, 0x8E4D, 0xB7B1, 0x8E4E, 0xB7B2, + 0x8E4F, 0xB7B3, 0x8E50, 0xB7B6, 0x8E51, 0xB7B7, 0x8E52, 0xB7B9, 0x8E53, 0xB7BA, 0x8E54, 0xB7BB, 0x8E55, 0xB7BC, 0x8E56, 0xB7BD, + 0x8E57, 0xB7BE, 0x8E58, 0xB7BF, 0x8E59, 0xB7C0, 0x8E5A, 0xB7C1, 0x8E61, 0xB7C2, 0x8E62, 0xB7C3, 0x8E63, 0xB7C4, 0x8E64, 0xB7C5, + 0x8E65, 0xB7C6, 0x8E66, 0xB7C8, 0x8E67, 0xB7CA, 0x8E68, 0xB7CB, 0x8E69, 0xB7CC, 0x8E6A, 0xB7CD, 0x8E6B, 0xB7CE, 0x8E6C, 0xB7CF, + 0x8E6D, 0xB7D0, 0x8E6E, 0xB7D1, 0x8E6F, 0xB7D2, 0x8E70, 0xB7D3, 0x8E71, 0xB7D4, 0x8E72, 0xB7D5, 0x8E73, 0xB7D6, 0x8E74, 0xB7D7, + 0x8E75, 0xB7D8, 0x8E76, 0xB7D9, 0x8E77, 0xB7DA, 0x8E78, 0xB7DB, 0x8E79, 0xB7DC, 0x8E7A, 0xB7DD, 0x8E81, 0xB7DE, 0x8E82, 0xB7DF, + 0x8E83, 0xB7E0, 0x8E84, 0xB7E1, 0x8E85, 0xB7E2, 0x8E86, 0xB7E3, 0x8E87, 0xB7E4, 0x8E88, 0xB7E5, 0x8E89, 0xB7E6, 0x8E8A, 0xB7E7, + 0x8E8B, 0xB7E8, 0x8E8C, 0xB7E9, 0x8E8D, 0xB7EA, 0x8E8E, 0xB7EB, 0x8E8F, 0xB7EE, 0x8E90, 0xB7EF, 0x8E91, 0xB7F1, 0x8E92, 0xB7F2, + 0x8E93, 0xB7F3, 0x8E94, 0xB7F5, 0x8E95, 0xB7F6, 0x8E96, 0xB7F7, 0x8E97, 0xB7F8, 0x8E98, 0xB7F9, 0x8E99, 0xB7FA, 0x8E9A, 0xB7FB, + 0x8E9B, 0xB7FE, 0x8E9C, 0xB802, 0x8E9D, 0xB803, 0x8E9E, 0xB804, 0x8E9F, 0xB805, 0x8EA0, 0xB806, 0x8EA1, 0xB80A, 0x8EA2, 0xB80B, + 0x8EA3, 0xB80D, 0x8EA4, 0xB80E, 0x8EA5, 0xB80F, 0x8EA6, 0xB811, 0x8EA7, 0xB812, 0x8EA8, 0xB813, 0x8EA9, 0xB814, 0x8EAA, 0xB815, + 0x8EAB, 0xB816, 0x8EAC, 0xB817, 0x8EAD, 0xB81A, 0x8EAE, 0xB81C, 0x8EAF, 0xB81E, 0x8EB0, 0xB81F, 0x8EB1, 0xB820, 0x8EB2, 0xB821, + 0x8EB3, 0xB822, 0x8EB4, 0xB823, 0x8EB5, 0xB826, 0x8EB6, 0xB827, 0x8EB7, 0xB829, 0x8EB8, 0xB82A, 0x8EB9, 0xB82B, 0x8EBA, 0xB82D, + 0x8EBB, 0xB82E, 0x8EBC, 0xB82F, 0x8EBD, 0xB830, 0x8EBE, 0xB831, 0x8EBF, 0xB832, 0x8EC0, 0xB833, 0x8EC1, 0xB836, 0x8EC2, 0xB83A, + 0x8EC3, 0xB83B, 0x8EC4, 0xB83C, 0x8EC5, 0xB83D, 0x8EC6, 0xB83E, 0x8EC7, 0xB83F, 0x8EC8, 0xB841, 0x8EC9, 0xB842, 0x8ECA, 0xB843, + 0x8ECB, 0xB845, 0x8ECC, 0xB846, 0x8ECD, 0xB847, 0x8ECE, 0xB848, 0x8ECF, 0xB849, 0x8ED0, 0xB84A, 0x8ED1, 0xB84B, 0x8ED2, 0xB84C, + 0x8ED3, 0xB84D, 0x8ED4, 0xB84E, 0x8ED5, 0xB84F, 0x8ED6, 0xB850, 0x8ED7, 0xB852, 0x8ED8, 0xB854, 0x8ED9, 0xB855, 0x8EDA, 0xB856, + 0x8EDB, 0xB857, 0x8EDC, 0xB858, 0x8EDD, 0xB859, 0x8EDE, 0xB85A, 0x8EDF, 0xB85B, 0x8EE0, 0xB85E, 0x8EE1, 0xB85F, 0x8EE2, 0xB861, + 0x8EE3, 0xB862, 0x8EE4, 0xB863, 0x8EE5, 0xB865, 0x8EE6, 0xB866, 0x8EE7, 0xB867, 0x8EE8, 0xB868, 0x8EE9, 0xB869, 0x8EEA, 0xB86A, + 0x8EEB, 0xB86B, 0x8EEC, 0xB86E, 0x8EED, 0xB870, 0x8EEE, 0xB872, 0x8EEF, 0xB873, 0x8EF0, 0xB874, 0x8EF1, 0xB875, 0x8EF2, 0xB876, + 0x8EF3, 0xB877, 0x8EF4, 0xB879, 0x8EF5, 0xB87A, 0x8EF6, 0xB87B, 0x8EF7, 0xB87D, 0x8EF8, 0xB87E, 0x8EF9, 0xB87F, 0x8EFA, 0xB880, + 0x8EFB, 0xB881, 0x8EFC, 0xB882, 0x8EFD, 0xB883, 0x8EFE, 0xB884, 0x8F41, 0xB885, 0x8F42, 0xB886, 0x8F43, 0xB887, 0x8F44, 0xB888, + 0x8F45, 0xB889, 0x8F46, 0xB88A, 0x8F47, 0xB88B, 0x8F48, 0xB88C, 0x8F49, 0xB88E, 0x8F4A, 0xB88F, 0x8F4B, 0xB890, 0x8F4C, 0xB891, + 0x8F4D, 0xB892, 0x8F4E, 0xB893, 0x8F4F, 0xB894, 0x8F50, 0xB895, 0x8F51, 0xB896, 0x8F52, 0xB897, 0x8F53, 0xB898, 0x8F54, 0xB899, + 0x8F55, 0xB89A, 0x8F56, 0xB89B, 0x8F57, 0xB89C, 0x8F58, 0xB89D, 0x8F59, 0xB89E, 0x8F5A, 0xB89F, 0x8F61, 0xB8A0, 0x8F62, 0xB8A1, + 0x8F63, 0xB8A2, 0x8F64, 0xB8A3, 0x8F65, 0xB8A4, 0x8F66, 0xB8A5, 0x8F67, 0xB8A6, 0x8F68, 0xB8A7, 0x8F69, 0xB8A9, 0x8F6A, 0xB8AA, + 0x8F6B, 0xB8AB, 0x8F6C, 0xB8AC, 0x8F6D, 0xB8AD, 0x8F6E, 0xB8AE, 0x8F6F, 0xB8AF, 0x8F70, 0xB8B1, 0x8F71, 0xB8B2, 0x8F72, 0xB8B3, + 0x8F73, 0xB8B5, 0x8F74, 0xB8B6, 0x8F75, 0xB8B7, 0x8F76, 0xB8B9, 0x8F77, 0xB8BA, 0x8F78, 0xB8BB, 0x8F79, 0xB8BC, 0x8F7A, 0xB8BD, + 0x8F81, 0xB8BE, 0x8F82, 0xB8BF, 0x8F83, 0xB8C2, 0x8F84, 0xB8C4, 0x8F85, 0xB8C6, 0x8F86, 0xB8C7, 0x8F87, 0xB8C8, 0x8F88, 0xB8C9, + 0x8F89, 0xB8CA, 0x8F8A, 0xB8CB, 0x8F8B, 0xB8CD, 0x8F8C, 0xB8CE, 0x8F8D, 0xB8CF, 0x8F8E, 0xB8D1, 0x8F8F, 0xB8D2, 0x8F90, 0xB8D3, + 0x8F91, 0xB8D5, 0x8F92, 0xB8D6, 0x8F93, 0xB8D7, 0x8F94, 0xB8D8, 0x8F95, 0xB8D9, 0x8F96, 0xB8DA, 0x8F97, 0xB8DB, 0x8F98, 0xB8DC, + 0x8F99, 0xB8DE, 0x8F9A, 0xB8E0, 0x8F9B, 0xB8E2, 0x8F9C, 0xB8E3, 0x8F9D, 0xB8E4, 0x8F9E, 0xB8E5, 0x8F9F, 0xB8E6, 0x8FA0, 0xB8E7, + 0x8FA1, 0xB8EA, 0x8FA2, 0xB8EB, 0x8FA3, 0xB8ED, 0x8FA4, 0xB8EE, 0x8FA5, 0xB8EF, 0x8FA6, 0xB8F1, 0x8FA7, 0xB8F2, 0x8FA8, 0xB8F3, + 0x8FA9, 0xB8F4, 0x8FAA, 0xB8F5, 0x8FAB, 0xB8F6, 0x8FAC, 0xB8F7, 0x8FAD, 0xB8FA, 0x8FAE, 0xB8FC, 0x8FAF, 0xB8FE, 0x8FB0, 0xB8FF, + 0x8FB1, 0xB900, 0x8FB2, 0xB901, 0x8FB3, 0xB902, 0x8FB4, 0xB903, 0x8FB5, 0xB905, 0x8FB6, 0xB906, 0x8FB7, 0xB907, 0x8FB8, 0xB908, + 0x8FB9, 0xB909, 0x8FBA, 0xB90A, 0x8FBB, 0xB90B, 0x8FBC, 0xB90C, 0x8FBD, 0xB90D, 0x8FBE, 0xB90E, 0x8FBF, 0xB90F, 0x8FC0, 0xB910, + 0x8FC1, 0xB911, 0x8FC2, 0xB912, 0x8FC3, 0xB913, 0x8FC4, 0xB914, 0x8FC5, 0xB915, 0x8FC6, 0xB916, 0x8FC7, 0xB917, 0x8FC8, 0xB919, + 0x8FC9, 0xB91A, 0x8FCA, 0xB91B, 0x8FCB, 0xB91C, 0x8FCC, 0xB91D, 0x8FCD, 0xB91E, 0x8FCE, 0xB91F, 0x8FCF, 0xB921, 0x8FD0, 0xB922, + 0x8FD1, 0xB923, 0x8FD2, 0xB924, 0x8FD3, 0xB925, 0x8FD4, 0xB926, 0x8FD5, 0xB927, 0x8FD6, 0xB928, 0x8FD7, 0xB929, 0x8FD8, 0xB92A, + 0x8FD9, 0xB92B, 0x8FDA, 0xB92C, 0x8FDB, 0xB92D, 0x8FDC, 0xB92E, 0x8FDD, 0xB92F, 0x8FDE, 0xB930, 0x8FDF, 0xB931, 0x8FE0, 0xB932, + 0x8FE1, 0xB933, 0x8FE2, 0xB934, 0x8FE3, 0xB935, 0x8FE4, 0xB936, 0x8FE5, 0xB937, 0x8FE6, 0xB938, 0x8FE7, 0xB939, 0x8FE8, 0xB93A, + 0x8FE9, 0xB93B, 0x8FEA, 0xB93E, 0x8FEB, 0xB93F, 0x8FEC, 0xB941, 0x8FED, 0xB942, 0x8FEE, 0xB943, 0x8FEF, 0xB945, 0x8FF0, 0xB946, + 0x8FF1, 0xB947, 0x8FF2, 0xB948, 0x8FF3, 0xB949, 0x8FF4, 0xB94A, 0x8FF5, 0xB94B, 0x8FF6, 0xB94D, 0x8FF7, 0xB94E, 0x8FF8, 0xB950, + 0x8FF9, 0xB952, 0x8FFA, 0xB953, 0x8FFB, 0xB954, 0x8FFC, 0xB955, 0x8FFD, 0xB956, 0x8FFE, 0xB957, 0x9041, 0xB95A, 0x9042, 0xB95B, + 0x9043, 0xB95D, 0x9044, 0xB95E, 0x9045, 0xB95F, 0x9046, 0xB961, 0x9047, 0xB962, 0x9048, 0xB963, 0x9049, 0xB964, 0x904A, 0xB965, + 0x904B, 0xB966, 0x904C, 0xB967, 0x904D, 0xB96A, 0x904E, 0xB96C, 0x904F, 0xB96E, 0x9050, 0xB96F, 0x9051, 0xB970, 0x9052, 0xB971, + 0x9053, 0xB972, 0x9054, 0xB973, 0x9055, 0xB976, 0x9056, 0xB977, 0x9057, 0xB979, 0x9058, 0xB97A, 0x9059, 0xB97B, 0x905A, 0xB97D, + 0x9061, 0xB97E, 0x9062, 0xB97F, 0x9063, 0xB980, 0x9064, 0xB981, 0x9065, 0xB982, 0x9066, 0xB983, 0x9067, 0xB986, 0x9068, 0xB988, + 0x9069, 0xB98B, 0x906A, 0xB98C, 0x906B, 0xB98F, 0x906C, 0xB990, 0x906D, 0xB991, 0x906E, 0xB992, 0x906F, 0xB993, 0x9070, 0xB994, + 0x9071, 0xB995, 0x9072, 0xB996, 0x9073, 0xB997, 0x9074, 0xB998, 0x9075, 0xB999, 0x9076, 0xB99A, 0x9077, 0xB99B, 0x9078, 0xB99C, + 0x9079, 0xB99D, 0x907A, 0xB99E, 0x9081, 0xB99F, 0x9082, 0xB9A0, 0x9083, 0xB9A1, 0x9084, 0xB9A2, 0x9085, 0xB9A3, 0x9086, 0xB9A4, + 0x9087, 0xB9A5, 0x9088, 0xB9A6, 0x9089, 0xB9A7, 0x908A, 0xB9A8, 0x908B, 0xB9A9, 0x908C, 0xB9AA, 0x908D, 0xB9AB, 0x908E, 0xB9AE, + 0x908F, 0xB9AF, 0x9090, 0xB9B1, 0x9091, 0xB9B2, 0x9092, 0xB9B3, 0x9093, 0xB9B5, 0x9094, 0xB9B6, 0x9095, 0xB9B7, 0x9096, 0xB9B8, + 0x9097, 0xB9B9, 0x9098, 0xB9BA, 0x9099, 0xB9BB, 0x909A, 0xB9BE, 0x909B, 0xB9C0, 0x909C, 0xB9C2, 0x909D, 0xB9C3, 0x909E, 0xB9C4, + 0x909F, 0xB9C5, 0x90A0, 0xB9C6, 0x90A1, 0xB9C7, 0x90A2, 0xB9CA, 0x90A3, 0xB9CB, 0x90A4, 0xB9CD, 0x90A5, 0xB9D3, 0x90A6, 0xB9D4, + 0x90A7, 0xB9D5, 0x90A8, 0xB9D6, 0x90A9, 0xB9D7, 0x90AA, 0xB9DA, 0x90AB, 0xB9DC, 0x90AC, 0xB9DF, 0x90AD, 0xB9E0, 0x90AE, 0xB9E2, + 0x90AF, 0xB9E6, 0x90B0, 0xB9E7, 0x90B1, 0xB9E9, 0x90B2, 0xB9EA, 0x90B3, 0xB9EB, 0x90B4, 0xB9ED, 0x90B5, 0xB9EE, 0x90B6, 0xB9EF, + 0x90B7, 0xB9F0, 0x90B8, 0xB9F1, 0x90B9, 0xB9F2, 0x90BA, 0xB9F3, 0x90BB, 0xB9F6, 0x90BC, 0xB9FB, 0x90BD, 0xB9FC, 0x90BE, 0xB9FD, + 0x90BF, 0xB9FE, 0x90C0, 0xB9FF, 0x90C1, 0xBA02, 0x90C2, 0xBA03, 0x90C3, 0xBA04, 0x90C4, 0xBA05, 0x90C5, 0xBA06, 0x90C6, 0xBA07, + 0x90C7, 0xBA09, 0x90C8, 0xBA0A, 0x90C9, 0xBA0B, 0x90CA, 0xBA0C, 0x90CB, 0xBA0D, 0x90CC, 0xBA0E, 0x90CD, 0xBA0F, 0x90CE, 0xBA10, + 0x90CF, 0xBA11, 0x90D0, 0xBA12, 0x90D1, 0xBA13, 0x90D2, 0xBA14, 0x90D3, 0xBA16, 0x90D4, 0xBA17, 0x90D5, 0xBA18, 0x90D6, 0xBA19, + 0x90D7, 0xBA1A, 0x90D8, 0xBA1B, 0x90D9, 0xBA1C, 0x90DA, 0xBA1D, 0x90DB, 0xBA1E, 0x90DC, 0xBA1F, 0x90DD, 0xBA20, 0x90DE, 0xBA21, + 0x90DF, 0xBA22, 0x90E0, 0xBA23, 0x90E1, 0xBA24, 0x90E2, 0xBA25, 0x90E3, 0xBA26, 0x90E4, 0xBA27, 0x90E5, 0xBA28, 0x90E6, 0xBA29, + 0x90E7, 0xBA2A, 0x90E8, 0xBA2B, 0x90E9, 0xBA2C, 0x90EA, 0xBA2D, 0x90EB, 0xBA2E, 0x90EC, 0xBA2F, 0x90ED, 0xBA30, 0x90EE, 0xBA31, + 0x90EF, 0xBA32, 0x90F0, 0xBA33, 0x90F1, 0xBA34, 0x90F2, 0xBA35, 0x90F3, 0xBA36, 0x90F4, 0xBA37, 0x90F5, 0xBA3A, 0x90F6, 0xBA3B, + 0x90F7, 0xBA3D, 0x90F8, 0xBA3E, 0x90F9, 0xBA3F, 0x90FA, 0xBA41, 0x90FB, 0xBA43, 0x90FC, 0xBA44, 0x90FD, 0xBA45, 0x90FE, 0xBA46, + 0x9141, 0xBA47, 0x9142, 0xBA4A, 0x9143, 0xBA4C, 0x9144, 0xBA4F, 0x9145, 0xBA50, 0x9146, 0xBA51, 0x9147, 0xBA52, 0x9148, 0xBA56, + 0x9149, 0xBA57, 0x914A, 0xBA59, 0x914B, 0xBA5A, 0x914C, 0xBA5B, 0x914D, 0xBA5D, 0x914E, 0xBA5E, 0x914F, 0xBA5F, 0x9150, 0xBA60, + 0x9151, 0xBA61, 0x9152, 0xBA62, 0x9153, 0xBA63, 0x9154, 0xBA66, 0x9155, 0xBA6A, 0x9156, 0xBA6B, 0x9157, 0xBA6C, 0x9158, 0xBA6D, + 0x9159, 0xBA6E, 0x915A, 0xBA6F, 0x9161, 0xBA72, 0x9162, 0xBA73, 0x9163, 0xBA75, 0x9164, 0xBA76, 0x9165, 0xBA77, 0x9166, 0xBA79, + 0x9167, 0xBA7A, 0x9168, 0xBA7B, 0x9169, 0xBA7C, 0x916A, 0xBA7D, 0x916B, 0xBA7E, 0x916C, 0xBA7F, 0x916D, 0xBA80, 0x916E, 0xBA81, + 0x916F, 0xBA82, 0x9170, 0xBA86, 0x9171, 0xBA88, 0x9172, 0xBA89, 0x9173, 0xBA8A, 0x9174, 0xBA8B, 0x9175, 0xBA8D, 0x9176, 0xBA8E, + 0x9177, 0xBA8F, 0x9178, 0xBA90, 0x9179, 0xBA91, 0x917A, 0xBA92, 0x9181, 0xBA93, 0x9182, 0xBA94, 0x9183, 0xBA95, 0x9184, 0xBA96, + 0x9185, 0xBA97, 0x9186, 0xBA98, 0x9187, 0xBA99, 0x9188, 0xBA9A, 0x9189, 0xBA9B, 0x918A, 0xBA9C, 0x918B, 0xBA9D, 0x918C, 0xBA9E, + 0x918D, 0xBA9F, 0x918E, 0xBAA0, 0x918F, 0xBAA1, 0x9190, 0xBAA2, 0x9191, 0xBAA3, 0x9192, 0xBAA4, 0x9193, 0xBAA5, 0x9194, 0xBAA6, + 0x9195, 0xBAA7, 0x9196, 0xBAAA, 0x9197, 0xBAAD, 0x9198, 0xBAAE, 0x9199, 0xBAAF, 0x919A, 0xBAB1, 0x919B, 0xBAB3, 0x919C, 0xBAB4, + 0x919D, 0xBAB5, 0x919E, 0xBAB6, 0x919F, 0xBAB7, 0x91A0, 0xBABA, 0x91A1, 0xBABC, 0x91A2, 0xBABE, 0x91A3, 0xBABF, 0x91A4, 0xBAC0, + 0x91A5, 0xBAC1, 0x91A6, 0xBAC2, 0x91A7, 0xBAC3, 0x91A8, 0xBAC5, 0x91A9, 0xBAC6, 0x91AA, 0xBAC7, 0x91AB, 0xBAC9, 0x91AC, 0xBACA, + 0x91AD, 0xBACB, 0x91AE, 0xBACC, 0x91AF, 0xBACD, 0x91B0, 0xBACE, 0x91B1, 0xBACF, 0x91B2, 0xBAD0, 0x91B3, 0xBAD1, 0x91B4, 0xBAD2, + 0x91B5, 0xBAD3, 0x91B6, 0xBAD4, 0x91B7, 0xBAD5, 0x91B8, 0xBAD6, 0x91B9, 0xBAD7, 0x91BA, 0xBADA, 0x91BB, 0xBADB, 0x91BC, 0xBADC, + 0x91BD, 0xBADD, 0x91BE, 0xBADE, 0x91BF, 0xBADF, 0x91C0, 0xBAE0, 0x91C1, 0xBAE1, 0x91C2, 0xBAE2, 0x91C3, 0xBAE3, 0x91C4, 0xBAE4, + 0x91C5, 0xBAE5, 0x91C6, 0xBAE6, 0x91C7, 0xBAE7, 0x91C8, 0xBAE8, 0x91C9, 0xBAE9, 0x91CA, 0xBAEA, 0x91CB, 0xBAEB, 0x91CC, 0xBAEC, + 0x91CD, 0xBAED, 0x91CE, 0xBAEE, 0x91CF, 0xBAEF, 0x91D0, 0xBAF0, 0x91D1, 0xBAF1, 0x91D2, 0xBAF2, 0x91D3, 0xBAF3, 0x91D4, 0xBAF4, + 0x91D5, 0xBAF5, 0x91D6, 0xBAF6, 0x91D7, 0xBAF7, 0x91D8, 0xBAF8, 0x91D9, 0xBAF9, 0x91DA, 0xBAFA, 0x91DB, 0xBAFB, 0x91DC, 0xBAFD, + 0x91DD, 0xBAFE, 0x91DE, 0xBAFF, 0x91DF, 0xBB01, 0x91E0, 0xBB02, 0x91E1, 0xBB03, 0x91E2, 0xBB05, 0x91E3, 0xBB06, 0x91E4, 0xBB07, + 0x91E5, 0xBB08, 0x91E6, 0xBB09, 0x91E7, 0xBB0A, 0x91E8, 0xBB0B, 0x91E9, 0xBB0C, 0x91EA, 0xBB0E, 0x91EB, 0xBB10, 0x91EC, 0xBB12, + 0x91ED, 0xBB13, 0x91EE, 0xBB14, 0x91EF, 0xBB15, 0x91F0, 0xBB16, 0x91F1, 0xBB17, 0x91F2, 0xBB19, 0x91F3, 0xBB1A, 0x91F4, 0xBB1B, + 0x91F5, 0xBB1D, 0x91F6, 0xBB1E, 0x91F7, 0xBB1F, 0x91F8, 0xBB21, 0x91F9, 0xBB22, 0x91FA, 0xBB23, 0x91FB, 0xBB24, 0x91FC, 0xBB25, + 0x91FD, 0xBB26, 0x91FE, 0xBB27, 0x9241, 0xBB28, 0x9242, 0xBB2A, 0x9243, 0xBB2C, 0x9244, 0xBB2D, 0x9245, 0xBB2E, 0x9246, 0xBB2F, + 0x9247, 0xBB30, 0x9248, 0xBB31, 0x9249, 0xBB32, 0x924A, 0xBB33, 0x924B, 0xBB37, 0x924C, 0xBB39, 0x924D, 0xBB3A, 0x924E, 0xBB3F, + 0x924F, 0xBB40, 0x9250, 0xBB41, 0x9251, 0xBB42, 0x9252, 0xBB43, 0x9253, 0xBB46, 0x9254, 0xBB48, 0x9255, 0xBB4A, 0x9256, 0xBB4B, + 0x9257, 0xBB4C, 0x9258, 0xBB4E, 0x9259, 0xBB51, 0x925A, 0xBB52, 0x9261, 0xBB53, 0x9262, 0xBB55, 0x9263, 0xBB56, 0x9264, 0xBB57, + 0x9265, 0xBB59, 0x9266, 0xBB5A, 0x9267, 0xBB5B, 0x9268, 0xBB5C, 0x9269, 0xBB5D, 0x926A, 0xBB5E, 0x926B, 0xBB5F, 0x926C, 0xBB60, + 0x926D, 0xBB62, 0x926E, 0xBB64, 0x926F, 0xBB65, 0x9270, 0xBB66, 0x9271, 0xBB67, 0x9272, 0xBB68, 0x9273, 0xBB69, 0x9274, 0xBB6A, + 0x9275, 0xBB6B, 0x9276, 0xBB6D, 0x9277, 0xBB6E, 0x9278, 0xBB6F, 0x9279, 0xBB70, 0x927A, 0xBB71, 0x9281, 0xBB72, 0x9282, 0xBB73, + 0x9283, 0xBB74, 0x9284, 0xBB75, 0x9285, 0xBB76, 0x9286, 0xBB77, 0x9287, 0xBB78, 0x9288, 0xBB79, 0x9289, 0xBB7A, 0x928A, 0xBB7B, + 0x928B, 0xBB7C, 0x928C, 0xBB7D, 0x928D, 0xBB7E, 0x928E, 0xBB7F, 0x928F, 0xBB80, 0x9290, 0xBB81, 0x9291, 0xBB82, 0x9292, 0xBB83, + 0x9293, 0xBB84, 0x9294, 0xBB85, 0x9295, 0xBB86, 0x9296, 0xBB87, 0x9297, 0xBB89, 0x9298, 0xBB8A, 0x9299, 0xBB8B, 0x929A, 0xBB8D, + 0x929B, 0xBB8E, 0x929C, 0xBB8F, 0x929D, 0xBB91, 0x929E, 0xBB92, 0x929F, 0xBB93, 0x92A0, 0xBB94, 0x92A1, 0xBB95, 0x92A2, 0xBB96, + 0x92A3, 0xBB97, 0x92A4, 0xBB98, 0x92A5, 0xBB99, 0x92A6, 0xBB9A, 0x92A7, 0xBB9B, 0x92A8, 0xBB9C, 0x92A9, 0xBB9D, 0x92AA, 0xBB9E, + 0x92AB, 0xBB9F, 0x92AC, 0xBBA0, 0x92AD, 0xBBA1, 0x92AE, 0xBBA2, 0x92AF, 0xBBA3, 0x92B0, 0xBBA5, 0x92B1, 0xBBA6, 0x92B2, 0xBBA7, + 0x92B3, 0xBBA9, 0x92B4, 0xBBAA, 0x92B5, 0xBBAB, 0x92B6, 0xBBAD, 0x92B7, 0xBBAE, 0x92B8, 0xBBAF, 0x92B9, 0xBBB0, 0x92BA, 0xBBB1, + 0x92BB, 0xBBB2, 0x92BC, 0xBBB3, 0x92BD, 0xBBB5, 0x92BE, 0xBBB6, 0x92BF, 0xBBB8, 0x92C0, 0xBBB9, 0x92C1, 0xBBBA, 0x92C2, 0xBBBB, + 0x92C3, 0xBBBC, 0x92C4, 0xBBBD, 0x92C5, 0xBBBE, 0x92C6, 0xBBBF, 0x92C7, 0xBBC1, 0x92C8, 0xBBC2, 0x92C9, 0xBBC3, 0x92CA, 0xBBC5, + 0x92CB, 0xBBC6, 0x92CC, 0xBBC7, 0x92CD, 0xBBC9, 0x92CE, 0xBBCA, 0x92CF, 0xBBCB, 0x92D0, 0xBBCC, 0x92D1, 0xBBCD, 0x92D2, 0xBBCE, + 0x92D3, 0xBBCF, 0x92D4, 0xBBD1, 0x92D5, 0xBBD2, 0x92D6, 0xBBD4, 0x92D7, 0xBBD5, 0x92D8, 0xBBD6, 0x92D9, 0xBBD7, 0x92DA, 0xBBD8, + 0x92DB, 0xBBD9, 0x92DC, 0xBBDA, 0x92DD, 0xBBDB, 0x92DE, 0xBBDC, 0x92DF, 0xBBDD, 0x92E0, 0xBBDE, 0x92E1, 0xBBDF, 0x92E2, 0xBBE0, + 0x92E3, 0xBBE1, 0x92E4, 0xBBE2, 0x92E5, 0xBBE3, 0x92E6, 0xBBE4, 0x92E7, 0xBBE5, 0x92E8, 0xBBE6, 0x92E9, 0xBBE7, 0x92EA, 0xBBE8, + 0x92EB, 0xBBE9, 0x92EC, 0xBBEA, 0x92ED, 0xBBEB, 0x92EE, 0xBBEC, 0x92EF, 0xBBED, 0x92F0, 0xBBEE, 0x92F1, 0xBBEF, 0x92F2, 0xBBF0, + 0x92F3, 0xBBF1, 0x92F4, 0xBBF2, 0x92F5, 0xBBF3, 0x92F6, 0xBBF4, 0x92F7, 0xBBF5, 0x92F8, 0xBBF6, 0x92F9, 0xBBF7, 0x92FA, 0xBBFA, + 0x92FB, 0xBBFB, 0x92FC, 0xBBFD, 0x92FD, 0xBBFE, 0x92FE, 0xBC01, 0x9341, 0xBC03, 0x9342, 0xBC04, 0x9343, 0xBC05, 0x9344, 0xBC06, + 0x9345, 0xBC07, 0x9346, 0xBC0A, 0x9347, 0xBC0E, 0x9348, 0xBC10, 0x9349, 0xBC12, 0x934A, 0xBC13, 0x934B, 0xBC19, 0x934C, 0xBC1A, + 0x934D, 0xBC20, 0x934E, 0xBC21, 0x934F, 0xBC22, 0x9350, 0xBC23, 0x9351, 0xBC26, 0x9352, 0xBC28, 0x9353, 0xBC2A, 0x9354, 0xBC2B, + 0x9355, 0xBC2C, 0x9356, 0xBC2E, 0x9357, 0xBC2F, 0x9358, 0xBC32, 0x9359, 0xBC33, 0x935A, 0xBC35, 0x9361, 0xBC36, 0x9362, 0xBC37, + 0x9363, 0xBC39, 0x9364, 0xBC3A, 0x9365, 0xBC3B, 0x9366, 0xBC3C, 0x9367, 0xBC3D, 0x9368, 0xBC3E, 0x9369, 0xBC3F, 0x936A, 0xBC42, + 0x936B, 0xBC46, 0x936C, 0xBC47, 0x936D, 0xBC48, 0x936E, 0xBC4A, 0x936F, 0xBC4B, 0x9370, 0xBC4E, 0x9371, 0xBC4F, 0x9372, 0xBC51, + 0x9373, 0xBC52, 0x9374, 0xBC53, 0x9375, 0xBC54, 0x9376, 0xBC55, 0x9377, 0xBC56, 0x9378, 0xBC57, 0x9379, 0xBC58, 0x937A, 0xBC59, + 0x9381, 0xBC5A, 0x9382, 0xBC5B, 0x9383, 0xBC5C, 0x9384, 0xBC5E, 0x9385, 0xBC5F, 0x9386, 0xBC60, 0x9387, 0xBC61, 0x9388, 0xBC62, + 0x9389, 0xBC63, 0x938A, 0xBC64, 0x938B, 0xBC65, 0x938C, 0xBC66, 0x938D, 0xBC67, 0x938E, 0xBC68, 0x938F, 0xBC69, 0x9390, 0xBC6A, + 0x9391, 0xBC6B, 0x9392, 0xBC6C, 0x9393, 0xBC6D, 0x9394, 0xBC6E, 0x9395, 0xBC6F, 0x9396, 0xBC70, 0x9397, 0xBC71, 0x9398, 0xBC72, + 0x9399, 0xBC73, 0x939A, 0xBC74, 0x939B, 0xBC75, 0x939C, 0xBC76, 0x939D, 0xBC77, 0x939E, 0xBC78, 0x939F, 0xBC79, 0x93A0, 0xBC7A, + 0x93A1, 0xBC7B, 0x93A2, 0xBC7C, 0x93A3, 0xBC7D, 0x93A4, 0xBC7E, 0x93A5, 0xBC7F, 0x93A6, 0xBC80, 0x93A7, 0xBC81, 0x93A8, 0xBC82, + 0x93A9, 0xBC83, 0x93AA, 0xBC86, 0x93AB, 0xBC87, 0x93AC, 0xBC89, 0x93AD, 0xBC8A, 0x93AE, 0xBC8D, 0x93AF, 0xBC8F, 0x93B0, 0xBC90, + 0x93B1, 0xBC91, 0x93B2, 0xBC92, 0x93B3, 0xBC93, 0x93B4, 0xBC96, 0x93B5, 0xBC98, 0x93B6, 0xBC9B, 0x93B7, 0xBC9C, 0x93B8, 0xBC9D, + 0x93B9, 0xBC9E, 0x93BA, 0xBC9F, 0x93BB, 0xBCA2, 0x93BC, 0xBCA3, 0x93BD, 0xBCA5, 0x93BE, 0xBCA6, 0x93BF, 0xBCA9, 0x93C0, 0xBCAA, + 0x93C1, 0xBCAB, 0x93C2, 0xBCAC, 0x93C3, 0xBCAD, 0x93C4, 0xBCAE, 0x93C5, 0xBCAF, 0x93C6, 0xBCB2, 0x93C7, 0xBCB6, 0x93C8, 0xBCB7, + 0x93C9, 0xBCB8, 0x93CA, 0xBCB9, 0x93CB, 0xBCBA, 0x93CC, 0xBCBB, 0x93CD, 0xBCBE, 0x93CE, 0xBCBF, 0x93CF, 0xBCC1, 0x93D0, 0xBCC2, + 0x93D1, 0xBCC3, 0x93D2, 0xBCC5, 0x93D3, 0xBCC6, 0x93D4, 0xBCC7, 0x93D5, 0xBCC8, 0x93D6, 0xBCC9, 0x93D7, 0xBCCA, 0x93D8, 0xBCCB, + 0x93D9, 0xBCCC, 0x93DA, 0xBCCE, 0x93DB, 0xBCD2, 0x93DC, 0xBCD3, 0x93DD, 0xBCD4, 0x93DE, 0xBCD6, 0x93DF, 0xBCD7, 0x93E0, 0xBCD9, + 0x93E1, 0xBCDA, 0x93E2, 0xBCDB, 0x93E3, 0xBCDD, 0x93E4, 0xBCDE, 0x93E5, 0xBCDF, 0x93E6, 0xBCE0, 0x93E7, 0xBCE1, 0x93E8, 0xBCE2, + 0x93E9, 0xBCE3, 0x93EA, 0xBCE4, 0x93EB, 0xBCE5, 0x93EC, 0xBCE6, 0x93ED, 0xBCE7, 0x93EE, 0xBCE8, 0x93EF, 0xBCE9, 0x93F0, 0xBCEA, + 0x93F1, 0xBCEB, 0x93F2, 0xBCEC, 0x93F3, 0xBCED, 0x93F4, 0xBCEE, 0x93F5, 0xBCEF, 0x93F6, 0xBCF0, 0x93F7, 0xBCF1, 0x93F8, 0xBCF2, + 0x93F9, 0xBCF3, 0x93FA, 0xBCF7, 0x93FB, 0xBCF9, 0x93FC, 0xBCFA, 0x93FD, 0xBCFB, 0x93FE, 0xBCFD, 0x9441, 0xBCFE, 0x9442, 0xBCFF, + 0x9443, 0xBD00, 0x9444, 0xBD01, 0x9445, 0xBD02, 0x9446, 0xBD03, 0x9447, 0xBD06, 0x9448, 0xBD08, 0x9449, 0xBD0A, 0x944A, 0xBD0B, + 0x944B, 0xBD0C, 0x944C, 0xBD0D, 0x944D, 0xBD0E, 0x944E, 0xBD0F, 0x944F, 0xBD11, 0x9450, 0xBD12, 0x9451, 0xBD13, 0x9452, 0xBD15, + 0x9453, 0xBD16, 0x9454, 0xBD17, 0x9455, 0xBD18, 0x9456, 0xBD19, 0x9457, 0xBD1A, 0x9458, 0xBD1B, 0x9459, 0xBD1C, 0x945A, 0xBD1D, + 0x9461, 0xBD1E, 0x9462, 0xBD1F, 0x9463, 0xBD20, 0x9464, 0xBD21, 0x9465, 0xBD22, 0x9466, 0xBD23, 0x9467, 0xBD25, 0x9468, 0xBD26, + 0x9469, 0xBD27, 0x946A, 0xBD28, 0x946B, 0xBD29, 0x946C, 0xBD2A, 0x946D, 0xBD2B, 0x946E, 0xBD2D, 0x946F, 0xBD2E, 0x9470, 0xBD2F, + 0x9471, 0xBD30, 0x9472, 0xBD31, 0x9473, 0xBD32, 0x9474, 0xBD33, 0x9475, 0xBD34, 0x9476, 0xBD35, 0x9477, 0xBD36, 0x9478, 0xBD37, + 0x9479, 0xBD38, 0x947A, 0xBD39, 0x9481, 0xBD3A, 0x9482, 0xBD3B, 0x9483, 0xBD3C, 0x9484, 0xBD3D, 0x9485, 0xBD3E, 0x9486, 0xBD3F, + 0x9487, 0xBD41, 0x9488, 0xBD42, 0x9489, 0xBD43, 0x948A, 0xBD44, 0x948B, 0xBD45, 0x948C, 0xBD46, 0x948D, 0xBD47, 0x948E, 0xBD4A, + 0x948F, 0xBD4B, 0x9490, 0xBD4D, 0x9491, 0xBD4E, 0x9492, 0xBD4F, 0x9493, 0xBD51, 0x9494, 0xBD52, 0x9495, 0xBD53, 0x9496, 0xBD54, + 0x9497, 0xBD55, 0x9498, 0xBD56, 0x9499, 0xBD57, 0x949A, 0xBD5A, 0x949B, 0xBD5B, 0x949C, 0xBD5C, 0x949D, 0xBD5D, 0x949E, 0xBD5E, + 0x949F, 0xBD5F, 0x94A0, 0xBD60, 0x94A1, 0xBD61, 0x94A2, 0xBD62, 0x94A3, 0xBD63, 0x94A4, 0xBD65, 0x94A5, 0xBD66, 0x94A6, 0xBD67, + 0x94A7, 0xBD69, 0x94A8, 0xBD6A, 0x94A9, 0xBD6B, 0x94AA, 0xBD6C, 0x94AB, 0xBD6D, 0x94AC, 0xBD6E, 0x94AD, 0xBD6F, 0x94AE, 0xBD70, + 0x94AF, 0xBD71, 0x94B0, 0xBD72, 0x94B1, 0xBD73, 0x94B2, 0xBD74, 0x94B3, 0xBD75, 0x94B4, 0xBD76, 0x94B5, 0xBD77, 0x94B6, 0xBD78, + 0x94B7, 0xBD79, 0x94B8, 0xBD7A, 0x94B9, 0xBD7B, 0x94BA, 0xBD7C, 0x94BB, 0xBD7D, 0x94BC, 0xBD7E, 0x94BD, 0xBD7F, 0x94BE, 0xBD82, + 0x94BF, 0xBD83, 0x94C0, 0xBD85, 0x94C1, 0xBD86, 0x94C2, 0xBD8B, 0x94C3, 0xBD8C, 0x94C4, 0xBD8D, 0x94C5, 0xBD8E, 0x94C6, 0xBD8F, + 0x94C7, 0xBD92, 0x94C8, 0xBD94, 0x94C9, 0xBD96, 0x94CA, 0xBD97, 0x94CB, 0xBD98, 0x94CC, 0xBD9B, 0x94CD, 0xBD9D, 0x94CE, 0xBD9E, + 0x94CF, 0xBD9F, 0x94D0, 0xBDA0, 0x94D1, 0xBDA1, 0x94D2, 0xBDA2, 0x94D3, 0xBDA3, 0x94D4, 0xBDA5, 0x94D5, 0xBDA6, 0x94D6, 0xBDA7, + 0x94D7, 0xBDA8, 0x94D8, 0xBDA9, 0x94D9, 0xBDAA, 0x94DA, 0xBDAB, 0x94DB, 0xBDAC, 0x94DC, 0xBDAD, 0x94DD, 0xBDAE, 0x94DE, 0xBDAF, + 0x94DF, 0xBDB1, 0x94E0, 0xBDB2, 0x94E1, 0xBDB3, 0x94E2, 0xBDB4, 0x94E3, 0xBDB5, 0x94E4, 0xBDB6, 0x94E5, 0xBDB7, 0x94E6, 0xBDB9, + 0x94E7, 0xBDBA, 0x94E8, 0xBDBB, 0x94E9, 0xBDBC, 0x94EA, 0xBDBD, 0x94EB, 0xBDBE, 0x94EC, 0xBDBF, 0x94ED, 0xBDC0, 0x94EE, 0xBDC1, + 0x94EF, 0xBDC2, 0x94F0, 0xBDC3, 0x94F1, 0xBDC4, 0x94F2, 0xBDC5, 0x94F3, 0xBDC6, 0x94F4, 0xBDC7, 0x94F5, 0xBDC8, 0x94F6, 0xBDC9, + 0x94F7, 0xBDCA, 0x94F8, 0xBDCB, 0x94F9, 0xBDCC, 0x94FA, 0xBDCD, 0x94FB, 0xBDCE, 0x94FC, 0xBDCF, 0x94FD, 0xBDD0, 0x94FE, 0xBDD1, + 0x9541, 0xBDD2, 0x9542, 0xBDD3, 0x9543, 0xBDD6, 0x9544, 0xBDD7, 0x9545, 0xBDD9, 0x9546, 0xBDDA, 0x9547, 0xBDDB, 0x9548, 0xBDDD, + 0x9549, 0xBDDE, 0x954A, 0xBDDF, 0x954B, 0xBDE0, 0x954C, 0xBDE1, 0x954D, 0xBDE2, 0x954E, 0xBDE3, 0x954F, 0xBDE4, 0x9550, 0xBDE5, + 0x9551, 0xBDE6, 0x9552, 0xBDE7, 0x9553, 0xBDE8, 0x9554, 0xBDEA, 0x9555, 0xBDEB, 0x9556, 0xBDEC, 0x9557, 0xBDED, 0x9558, 0xBDEE, + 0x9559, 0xBDEF, 0x955A, 0xBDF1, 0x9561, 0xBDF2, 0x9562, 0xBDF3, 0x9563, 0xBDF5, 0x9564, 0xBDF6, 0x9565, 0xBDF7, 0x9566, 0xBDF9, + 0x9567, 0xBDFA, 0x9568, 0xBDFB, 0x9569, 0xBDFC, 0x956A, 0xBDFD, 0x956B, 0xBDFE, 0x956C, 0xBDFF, 0x956D, 0xBE01, 0x956E, 0xBE02, + 0x956F, 0xBE04, 0x9570, 0xBE06, 0x9571, 0xBE07, 0x9572, 0xBE08, 0x9573, 0xBE09, 0x9574, 0xBE0A, 0x9575, 0xBE0B, 0x9576, 0xBE0E, + 0x9577, 0xBE0F, 0x9578, 0xBE11, 0x9579, 0xBE12, 0x957A, 0xBE13, 0x9581, 0xBE15, 0x9582, 0xBE16, 0x9583, 0xBE17, 0x9584, 0xBE18, + 0x9585, 0xBE19, 0x9586, 0xBE1A, 0x9587, 0xBE1B, 0x9588, 0xBE1E, 0x9589, 0xBE20, 0x958A, 0xBE21, 0x958B, 0xBE22, 0x958C, 0xBE23, + 0x958D, 0xBE24, 0x958E, 0xBE25, 0x958F, 0xBE26, 0x9590, 0xBE27, 0x9591, 0xBE28, 0x9592, 0xBE29, 0x9593, 0xBE2A, 0x9594, 0xBE2B, + 0x9595, 0xBE2C, 0x9596, 0xBE2D, 0x9597, 0xBE2E, 0x9598, 0xBE2F, 0x9599, 0xBE30, 0x959A, 0xBE31, 0x959B, 0xBE32, 0x959C, 0xBE33, + 0x959D, 0xBE34, 0x959E, 0xBE35, 0x959F, 0xBE36, 0x95A0, 0xBE37, 0x95A1, 0xBE38, 0x95A2, 0xBE39, 0x95A3, 0xBE3A, 0x95A4, 0xBE3B, + 0x95A5, 0xBE3C, 0x95A6, 0xBE3D, 0x95A7, 0xBE3E, 0x95A8, 0xBE3F, 0x95A9, 0xBE40, 0x95AA, 0xBE41, 0x95AB, 0xBE42, 0x95AC, 0xBE43, + 0x95AD, 0xBE46, 0x95AE, 0xBE47, 0x95AF, 0xBE49, 0x95B0, 0xBE4A, 0x95B1, 0xBE4B, 0x95B2, 0xBE4D, 0x95B3, 0xBE4F, 0x95B4, 0xBE50, + 0x95B5, 0xBE51, 0x95B6, 0xBE52, 0x95B7, 0xBE53, 0x95B8, 0xBE56, 0x95B9, 0xBE58, 0x95BA, 0xBE5C, 0x95BB, 0xBE5D, 0x95BC, 0xBE5E, + 0x95BD, 0xBE5F, 0x95BE, 0xBE62, 0x95BF, 0xBE63, 0x95C0, 0xBE65, 0x95C1, 0xBE66, 0x95C2, 0xBE67, 0x95C3, 0xBE69, 0x95C4, 0xBE6B, + 0x95C5, 0xBE6C, 0x95C6, 0xBE6D, 0x95C7, 0xBE6E, 0x95C8, 0xBE6F, 0x95C9, 0xBE72, 0x95CA, 0xBE76, 0x95CB, 0xBE77, 0x95CC, 0xBE78, + 0x95CD, 0xBE79, 0x95CE, 0xBE7A, 0x95CF, 0xBE7E, 0x95D0, 0xBE7F, 0x95D1, 0xBE81, 0x95D2, 0xBE82, 0x95D3, 0xBE83, 0x95D4, 0xBE85, + 0x95D5, 0xBE86, 0x95D6, 0xBE87, 0x95D7, 0xBE88, 0x95D8, 0xBE89, 0x95D9, 0xBE8A, 0x95DA, 0xBE8B, 0x95DB, 0xBE8E, 0x95DC, 0xBE92, + 0x95DD, 0xBE93, 0x95DE, 0xBE94, 0x95DF, 0xBE95, 0x95E0, 0xBE96, 0x95E1, 0xBE97, 0x95E2, 0xBE9A, 0x95E3, 0xBE9B, 0x95E4, 0xBE9C, + 0x95E5, 0xBE9D, 0x95E6, 0xBE9E, 0x95E7, 0xBE9F, 0x95E8, 0xBEA0, 0x95E9, 0xBEA1, 0x95EA, 0xBEA2, 0x95EB, 0xBEA3, 0x95EC, 0xBEA4, + 0x95ED, 0xBEA5, 0x95EE, 0xBEA6, 0x95EF, 0xBEA7, 0x95F0, 0xBEA9, 0x95F1, 0xBEAA, 0x95F2, 0xBEAB, 0x95F3, 0xBEAC, 0x95F4, 0xBEAD, + 0x95F5, 0xBEAE, 0x95F6, 0xBEAF, 0x95F7, 0xBEB0, 0x95F8, 0xBEB1, 0x95F9, 0xBEB2, 0x95FA, 0xBEB3, 0x95FB, 0xBEB4, 0x95FC, 0xBEB5, + 0x95FD, 0xBEB6, 0x95FE, 0xBEB7, 0x9641, 0xBEB8, 0x9642, 0xBEB9, 0x9643, 0xBEBA, 0x9644, 0xBEBB, 0x9645, 0xBEBC, 0x9646, 0xBEBD, + 0x9647, 0xBEBE, 0x9648, 0xBEBF, 0x9649, 0xBEC0, 0x964A, 0xBEC1, 0x964B, 0xBEC2, 0x964C, 0xBEC3, 0x964D, 0xBEC4, 0x964E, 0xBEC5, + 0x964F, 0xBEC6, 0x9650, 0xBEC7, 0x9651, 0xBEC8, 0x9652, 0xBEC9, 0x9653, 0xBECA, 0x9654, 0xBECB, 0x9655, 0xBECC, 0x9656, 0xBECD, + 0x9657, 0xBECE, 0x9658, 0xBECF, 0x9659, 0xBED2, 0x965A, 0xBED3, 0x9661, 0xBED5, 0x9662, 0xBED6, 0x9663, 0xBED9, 0x9664, 0xBEDA, + 0x9665, 0xBEDB, 0x9666, 0xBEDC, 0x9667, 0xBEDD, 0x9668, 0xBEDE, 0x9669, 0xBEDF, 0x966A, 0xBEE1, 0x966B, 0xBEE2, 0x966C, 0xBEE6, + 0x966D, 0xBEE7, 0x966E, 0xBEE8, 0x966F, 0xBEE9, 0x9670, 0xBEEA, 0x9671, 0xBEEB, 0x9672, 0xBEED, 0x9673, 0xBEEE, 0x9674, 0xBEEF, + 0x9675, 0xBEF0, 0x9676, 0xBEF1, 0x9677, 0xBEF2, 0x9678, 0xBEF3, 0x9679, 0xBEF4, 0x967A, 0xBEF5, 0x9681, 0xBEF6, 0x9682, 0xBEF7, + 0x9683, 0xBEF8, 0x9684, 0xBEF9, 0x9685, 0xBEFA, 0x9686, 0xBEFB, 0x9687, 0xBEFC, 0x9688, 0xBEFD, 0x9689, 0xBEFE, 0x968A, 0xBEFF, + 0x968B, 0xBF00, 0x968C, 0xBF02, 0x968D, 0xBF03, 0x968E, 0xBF04, 0x968F, 0xBF05, 0x9690, 0xBF06, 0x9691, 0xBF07, 0x9692, 0xBF0A, + 0x9693, 0xBF0B, 0x9694, 0xBF0C, 0x9695, 0xBF0D, 0x9696, 0xBF0E, 0x9697, 0xBF0F, 0x9698, 0xBF10, 0x9699, 0xBF11, 0x969A, 0xBF12, + 0x969B, 0xBF13, 0x969C, 0xBF14, 0x969D, 0xBF15, 0x969E, 0xBF16, 0x969F, 0xBF17, 0x96A0, 0xBF1A, 0x96A1, 0xBF1E, 0x96A2, 0xBF1F, + 0x96A3, 0xBF20, 0x96A4, 0xBF21, 0x96A5, 0xBF22, 0x96A6, 0xBF23, 0x96A7, 0xBF24, 0x96A8, 0xBF25, 0x96A9, 0xBF26, 0x96AA, 0xBF27, + 0x96AB, 0xBF28, 0x96AC, 0xBF29, 0x96AD, 0xBF2A, 0x96AE, 0xBF2B, 0x96AF, 0xBF2C, 0x96B0, 0xBF2D, 0x96B1, 0xBF2E, 0x96B2, 0xBF2F, + 0x96B3, 0xBF30, 0x96B4, 0xBF31, 0x96B5, 0xBF32, 0x96B6, 0xBF33, 0x96B7, 0xBF34, 0x96B8, 0xBF35, 0x96B9, 0xBF36, 0x96BA, 0xBF37, + 0x96BB, 0xBF38, 0x96BC, 0xBF39, 0x96BD, 0xBF3A, 0x96BE, 0xBF3B, 0x96BF, 0xBF3C, 0x96C0, 0xBF3D, 0x96C1, 0xBF3E, 0x96C2, 0xBF3F, + 0x96C3, 0xBF42, 0x96C4, 0xBF43, 0x96C5, 0xBF45, 0x96C6, 0xBF46, 0x96C7, 0xBF47, 0x96C8, 0xBF49, 0x96C9, 0xBF4A, 0x96CA, 0xBF4B, + 0x96CB, 0xBF4C, 0x96CC, 0xBF4D, 0x96CD, 0xBF4E, 0x96CE, 0xBF4F, 0x96CF, 0xBF52, 0x96D0, 0xBF53, 0x96D1, 0xBF54, 0x96D2, 0xBF56, + 0x96D3, 0xBF57, 0x96D4, 0xBF58, 0x96D5, 0xBF59, 0x96D6, 0xBF5A, 0x96D7, 0xBF5B, 0x96D8, 0xBF5C, 0x96D9, 0xBF5D, 0x96DA, 0xBF5E, + 0x96DB, 0xBF5F, 0x96DC, 0xBF60, 0x96DD, 0xBF61, 0x96DE, 0xBF62, 0x96DF, 0xBF63, 0x96E0, 0xBF64, 0x96E1, 0xBF65, 0x96E2, 0xBF66, + 0x96E3, 0xBF67, 0x96E4, 0xBF68, 0x96E5, 0xBF69, 0x96E6, 0xBF6A, 0x96E7, 0xBF6B, 0x96E8, 0xBF6C, 0x96E9, 0xBF6D, 0x96EA, 0xBF6E, + 0x96EB, 0xBF6F, 0x96EC, 0xBF70, 0x96ED, 0xBF71, 0x96EE, 0xBF72, 0x96EF, 0xBF73, 0x96F0, 0xBF74, 0x96F1, 0xBF75, 0x96F2, 0xBF76, + 0x96F3, 0xBF77, 0x96F4, 0xBF78, 0x96F5, 0xBF79, 0x96F6, 0xBF7A, 0x96F7, 0xBF7B, 0x96F8, 0xBF7C, 0x96F9, 0xBF7D, 0x96FA, 0xBF7E, + 0x96FB, 0xBF7F, 0x96FC, 0xBF80, 0x96FD, 0xBF81, 0x96FE, 0xBF82, 0x9741, 0xBF83, 0x9742, 0xBF84, 0x9743, 0xBF85, 0x9744, 0xBF86, + 0x9745, 0xBF87, 0x9746, 0xBF88, 0x9747, 0xBF89, 0x9748, 0xBF8A, 0x9749, 0xBF8B, 0x974A, 0xBF8C, 0x974B, 0xBF8D, 0x974C, 0xBF8E, + 0x974D, 0xBF8F, 0x974E, 0xBF90, 0x974F, 0xBF91, 0x9750, 0xBF92, 0x9751, 0xBF93, 0x9752, 0xBF95, 0x9753, 0xBF96, 0x9754, 0xBF97, + 0x9755, 0xBF98, 0x9756, 0xBF99, 0x9757, 0xBF9A, 0x9758, 0xBF9B, 0x9759, 0xBF9C, 0x975A, 0xBF9D, 0x9761, 0xBF9E, 0x9762, 0xBF9F, + 0x9763, 0xBFA0, 0x9764, 0xBFA1, 0x9765, 0xBFA2, 0x9766, 0xBFA3, 0x9767, 0xBFA4, 0x9768, 0xBFA5, 0x9769, 0xBFA6, 0x976A, 0xBFA7, + 0x976B, 0xBFA8, 0x976C, 0xBFA9, 0x976D, 0xBFAA, 0x976E, 0xBFAB, 0x976F, 0xBFAC, 0x9770, 0xBFAD, 0x9771, 0xBFAE, 0x9772, 0xBFAF, + 0x9773, 0xBFB1, 0x9774, 0xBFB2, 0x9775, 0xBFB3, 0x9776, 0xBFB4, 0x9777, 0xBFB5, 0x9778, 0xBFB6, 0x9779, 0xBFB7, 0x977A, 0xBFB8, + 0x9781, 0xBFB9, 0x9782, 0xBFBA, 0x9783, 0xBFBB, 0x9784, 0xBFBC, 0x9785, 0xBFBD, 0x9786, 0xBFBE, 0x9787, 0xBFBF, 0x9788, 0xBFC0, + 0x9789, 0xBFC1, 0x978A, 0xBFC2, 0x978B, 0xBFC3, 0x978C, 0xBFC4, 0x978D, 0xBFC6, 0x978E, 0xBFC7, 0x978F, 0xBFC8, 0x9790, 0xBFC9, + 0x9791, 0xBFCA, 0x9792, 0xBFCB, 0x9793, 0xBFCE, 0x9794, 0xBFCF, 0x9795, 0xBFD1, 0x9796, 0xBFD2, 0x9797, 0xBFD3, 0x9798, 0xBFD5, + 0x9799, 0xBFD6, 0x979A, 0xBFD7, 0x979B, 0xBFD8, 0x979C, 0xBFD9, 0x979D, 0xBFDA, 0x979E, 0xBFDB, 0x979F, 0xBFDD, 0x97A0, 0xBFDE, + 0x97A1, 0xBFE0, 0x97A2, 0xBFE2, 0x97A3, 0xBFE3, 0x97A4, 0xBFE4, 0x97A5, 0xBFE5, 0x97A6, 0xBFE6, 0x97A7, 0xBFE7, 0x97A8, 0xBFE8, + 0x97A9, 0xBFE9, 0x97AA, 0xBFEA, 0x97AB, 0xBFEB, 0x97AC, 0xBFEC, 0x97AD, 0xBFED, 0x97AE, 0xBFEE, 0x97AF, 0xBFEF, 0x97B0, 0xBFF0, + 0x97B1, 0xBFF1, 0x97B2, 0xBFF2, 0x97B3, 0xBFF3, 0x97B4, 0xBFF4, 0x97B5, 0xBFF5, 0x97B6, 0xBFF6, 0x97B7, 0xBFF7, 0x97B8, 0xBFF8, + 0x97B9, 0xBFF9, 0x97BA, 0xBFFA, 0x97BB, 0xBFFB, 0x97BC, 0xBFFC, 0x97BD, 0xBFFD, 0x97BE, 0xBFFE, 0x97BF, 0xBFFF, 0x97C0, 0xC000, + 0x97C1, 0xC001, 0x97C2, 0xC002, 0x97C3, 0xC003, 0x97C4, 0xC004, 0x97C5, 0xC005, 0x97C6, 0xC006, 0x97C7, 0xC007, 0x97C8, 0xC008, + 0x97C9, 0xC009, 0x97CA, 0xC00A, 0x97CB, 0xC00B, 0x97CC, 0xC00C, 0x97CD, 0xC00D, 0x97CE, 0xC00E, 0x97CF, 0xC00F, 0x97D0, 0xC010, + 0x97D1, 0xC011, 0x97D2, 0xC012, 0x97D3, 0xC013, 0x97D4, 0xC014, 0x97D5, 0xC015, 0x97D6, 0xC016, 0x97D7, 0xC017, 0x97D8, 0xC018, + 0x97D9, 0xC019, 0x97DA, 0xC01A, 0x97DB, 0xC01B, 0x97DC, 0xC01C, 0x97DD, 0xC01D, 0x97DE, 0xC01E, 0x97DF, 0xC01F, 0x97E0, 0xC020, + 0x97E1, 0xC021, 0x97E2, 0xC022, 0x97E3, 0xC023, 0x97E4, 0xC024, 0x97E5, 0xC025, 0x97E6, 0xC026, 0x97E7, 0xC027, 0x97E8, 0xC028, + 0x97E9, 0xC029, 0x97EA, 0xC02A, 0x97EB, 0xC02B, 0x97EC, 0xC02C, 0x97ED, 0xC02D, 0x97EE, 0xC02E, 0x97EF, 0xC02F, 0x97F0, 0xC030, + 0x97F1, 0xC031, 0x97F2, 0xC032, 0x97F3, 0xC033, 0x97F4, 0xC034, 0x97F5, 0xC035, 0x97F6, 0xC036, 0x97F7, 0xC037, 0x97F8, 0xC038, + 0x97F9, 0xC039, 0x97FA, 0xC03A, 0x97FB, 0xC03B, 0x97FC, 0xC03D, 0x97FD, 0xC03E, 0x97FE, 0xC03F, 0x9841, 0xC040, 0x9842, 0xC041, + 0x9843, 0xC042, 0x9844, 0xC043, 0x9845, 0xC044, 0x9846, 0xC045, 0x9847, 0xC046, 0x9848, 0xC047, 0x9849, 0xC048, 0x984A, 0xC049, + 0x984B, 0xC04A, 0x984C, 0xC04B, 0x984D, 0xC04C, 0x984E, 0xC04D, 0x984F, 0xC04E, 0x9850, 0xC04F, 0x9851, 0xC050, 0x9852, 0xC052, + 0x9853, 0xC053, 0x9854, 0xC054, 0x9855, 0xC055, 0x9856, 0xC056, 0x9857, 0xC057, 0x9858, 0xC059, 0x9859, 0xC05A, 0x985A, 0xC05B, + 0x9861, 0xC05D, 0x9862, 0xC05E, 0x9863, 0xC05F, 0x9864, 0xC061, 0x9865, 0xC062, 0x9866, 0xC063, 0x9867, 0xC064, 0x9868, 0xC065, + 0x9869, 0xC066, 0x986A, 0xC067, 0x986B, 0xC06A, 0x986C, 0xC06B, 0x986D, 0xC06C, 0x986E, 0xC06D, 0x986F, 0xC06E, 0x9870, 0xC06F, + 0x9871, 0xC070, 0x9872, 0xC071, 0x9873, 0xC072, 0x9874, 0xC073, 0x9875, 0xC074, 0x9876, 0xC075, 0x9877, 0xC076, 0x9878, 0xC077, + 0x9879, 0xC078, 0x987A, 0xC079, 0x9881, 0xC07A, 0x9882, 0xC07B, 0x9883, 0xC07C, 0x9884, 0xC07D, 0x9885, 0xC07E, 0x9886, 0xC07F, + 0x9887, 0xC080, 0x9888, 0xC081, 0x9889, 0xC082, 0x988A, 0xC083, 0x988B, 0xC084, 0x988C, 0xC085, 0x988D, 0xC086, 0x988E, 0xC087, + 0x988F, 0xC088, 0x9890, 0xC089, 0x9891, 0xC08A, 0x9892, 0xC08B, 0x9893, 0xC08C, 0x9894, 0xC08D, 0x9895, 0xC08E, 0x9896, 0xC08F, + 0x9897, 0xC092, 0x9898, 0xC093, 0x9899, 0xC095, 0x989A, 0xC096, 0x989B, 0xC097, 0x989C, 0xC099, 0x989D, 0xC09A, 0x989E, 0xC09B, + 0x989F, 0xC09C, 0x98A0, 0xC09D, 0x98A1, 0xC09E, 0x98A2, 0xC09F, 0x98A3, 0xC0A2, 0x98A4, 0xC0A4, 0x98A5, 0xC0A6, 0x98A6, 0xC0A7, + 0x98A7, 0xC0A8, 0x98A8, 0xC0A9, 0x98A9, 0xC0AA, 0x98AA, 0xC0AB, 0x98AB, 0xC0AE, 0x98AC, 0xC0B1, 0x98AD, 0xC0B2, 0x98AE, 0xC0B7, + 0x98AF, 0xC0B8, 0x98B0, 0xC0B9, 0x98B1, 0xC0BA, 0x98B2, 0xC0BB, 0x98B3, 0xC0BE, 0x98B4, 0xC0C2, 0x98B5, 0xC0C3, 0x98B6, 0xC0C4, + 0x98B7, 0xC0C6, 0x98B8, 0xC0C7, 0x98B9, 0xC0CA, 0x98BA, 0xC0CB, 0x98BB, 0xC0CD, 0x98BC, 0xC0CE, 0x98BD, 0xC0CF, 0x98BE, 0xC0D1, + 0x98BF, 0xC0D2, 0x98C0, 0xC0D3, 0x98C1, 0xC0D4, 0x98C2, 0xC0D5, 0x98C3, 0xC0D6, 0x98C4, 0xC0D7, 0x98C5, 0xC0DA, 0x98C6, 0xC0DE, + 0x98C7, 0xC0DF, 0x98C8, 0xC0E0, 0x98C9, 0xC0E1, 0x98CA, 0xC0E2, 0x98CB, 0xC0E3, 0x98CC, 0xC0E6, 0x98CD, 0xC0E7, 0x98CE, 0xC0E9, + 0x98CF, 0xC0EA, 0x98D0, 0xC0EB, 0x98D1, 0xC0ED, 0x98D2, 0xC0EE, 0x98D3, 0xC0EF, 0x98D4, 0xC0F0, 0x98D5, 0xC0F1, 0x98D6, 0xC0F2, + 0x98D7, 0xC0F3, 0x98D8, 0xC0F6, 0x98D9, 0xC0F8, 0x98DA, 0xC0FA, 0x98DB, 0xC0FB, 0x98DC, 0xC0FC, 0x98DD, 0xC0FD, 0x98DE, 0xC0FE, + 0x98DF, 0xC0FF, 0x98E0, 0xC101, 0x98E1, 0xC102, 0x98E2, 0xC103, 0x98E3, 0xC105, 0x98E4, 0xC106, 0x98E5, 0xC107, 0x98E6, 0xC109, + 0x98E7, 0xC10A, 0x98E8, 0xC10B, 0x98E9, 0xC10C, 0x98EA, 0xC10D, 0x98EB, 0xC10E, 0x98EC, 0xC10F, 0x98ED, 0xC111, 0x98EE, 0xC112, + 0x98EF, 0xC113, 0x98F0, 0xC114, 0x98F1, 0xC116, 0x98F2, 0xC117, 0x98F3, 0xC118, 0x98F4, 0xC119, 0x98F5, 0xC11A, 0x98F6, 0xC11B, + 0x98F7, 0xC121, 0x98F8, 0xC122, 0x98F9, 0xC125, 0x98FA, 0xC128, 0x98FB, 0xC129, 0x98FC, 0xC12A, 0x98FD, 0xC12B, 0x98FE, 0xC12E, + 0x9941, 0xC132, 0x9942, 0xC133, 0x9943, 0xC134, 0x9944, 0xC135, 0x9945, 0xC137, 0x9946, 0xC13A, 0x9947, 0xC13B, 0x9948, 0xC13D, + 0x9949, 0xC13E, 0x994A, 0xC13F, 0x994B, 0xC141, 0x994C, 0xC142, 0x994D, 0xC143, 0x994E, 0xC144, 0x994F, 0xC145, 0x9950, 0xC146, + 0x9951, 0xC147, 0x9952, 0xC14A, 0x9953, 0xC14E, 0x9954, 0xC14F, 0x9955, 0xC150, 0x9956, 0xC151, 0x9957, 0xC152, 0x9958, 0xC153, + 0x9959, 0xC156, 0x995A, 0xC157, 0x9961, 0xC159, 0x9962, 0xC15A, 0x9963, 0xC15B, 0x9964, 0xC15D, 0x9965, 0xC15E, 0x9966, 0xC15F, + 0x9967, 0xC160, 0x9968, 0xC161, 0x9969, 0xC162, 0x996A, 0xC163, 0x996B, 0xC166, 0x996C, 0xC16A, 0x996D, 0xC16B, 0x996E, 0xC16C, + 0x996F, 0xC16D, 0x9970, 0xC16E, 0x9971, 0xC16F, 0x9972, 0xC171, 0x9973, 0xC172, 0x9974, 0xC173, 0x9975, 0xC175, 0x9976, 0xC176, + 0x9977, 0xC177, 0x9978, 0xC179, 0x9979, 0xC17A, 0x997A, 0xC17B, 0x9981, 0xC17C, 0x9982, 0xC17D, 0x9983, 0xC17E, 0x9984, 0xC17F, + 0x9985, 0xC180, 0x9986, 0xC181, 0x9987, 0xC182, 0x9988, 0xC183, 0x9989, 0xC184, 0x998A, 0xC186, 0x998B, 0xC187, 0x998C, 0xC188, + 0x998D, 0xC189, 0x998E, 0xC18A, 0x998F, 0xC18B, 0x9990, 0xC18F, 0x9991, 0xC191, 0x9992, 0xC192, 0x9993, 0xC193, 0x9994, 0xC195, + 0x9995, 0xC197, 0x9996, 0xC198, 0x9997, 0xC199, 0x9998, 0xC19A, 0x9999, 0xC19B, 0x999A, 0xC19E, 0x999B, 0xC1A0, 0x999C, 0xC1A2, + 0x999D, 0xC1A3, 0x999E, 0xC1A4, 0x999F, 0xC1A6, 0x99A0, 0xC1A7, 0x99A1, 0xC1AA, 0x99A2, 0xC1AB, 0x99A3, 0xC1AD, 0x99A4, 0xC1AE, + 0x99A5, 0xC1AF, 0x99A6, 0xC1B1, 0x99A7, 0xC1B2, 0x99A8, 0xC1B3, 0x99A9, 0xC1B4, 0x99AA, 0xC1B5, 0x99AB, 0xC1B6, 0x99AC, 0xC1B7, + 0x99AD, 0xC1B8, 0x99AE, 0xC1B9, 0x99AF, 0xC1BA, 0x99B0, 0xC1BB, 0x99B1, 0xC1BC, 0x99B2, 0xC1BE, 0x99B3, 0xC1BF, 0x99B4, 0xC1C0, + 0x99B5, 0xC1C1, 0x99B6, 0xC1C2, 0x99B7, 0xC1C3, 0x99B8, 0xC1C5, 0x99B9, 0xC1C6, 0x99BA, 0xC1C7, 0x99BB, 0xC1C9, 0x99BC, 0xC1CA, + 0x99BD, 0xC1CB, 0x99BE, 0xC1CD, 0x99BF, 0xC1CE, 0x99C0, 0xC1CF, 0x99C1, 0xC1D0, 0x99C2, 0xC1D1, 0x99C3, 0xC1D2, 0x99C4, 0xC1D3, + 0x99C5, 0xC1D5, 0x99C6, 0xC1D6, 0x99C7, 0xC1D9, 0x99C8, 0xC1DA, 0x99C9, 0xC1DB, 0x99CA, 0xC1DC, 0x99CB, 0xC1DD, 0x99CC, 0xC1DE, + 0x99CD, 0xC1DF, 0x99CE, 0xC1E1, 0x99CF, 0xC1E2, 0x99D0, 0xC1E3, 0x99D1, 0xC1E5, 0x99D2, 0xC1E6, 0x99D3, 0xC1E7, 0x99D4, 0xC1E9, + 0x99D5, 0xC1EA, 0x99D6, 0xC1EB, 0x99D7, 0xC1EC, 0x99D8, 0xC1ED, 0x99D9, 0xC1EE, 0x99DA, 0xC1EF, 0x99DB, 0xC1F2, 0x99DC, 0xC1F4, + 0x99DD, 0xC1F5, 0x99DE, 0xC1F6, 0x99DF, 0xC1F7, 0x99E0, 0xC1F8, 0x99E1, 0xC1F9, 0x99E2, 0xC1FA, 0x99E3, 0xC1FB, 0x99E4, 0xC1FE, + 0x99E5, 0xC1FF, 0x99E6, 0xC201, 0x99E7, 0xC202, 0x99E8, 0xC203, 0x99E9, 0xC205, 0x99EA, 0xC206, 0x99EB, 0xC207, 0x99EC, 0xC208, + 0x99ED, 0xC209, 0x99EE, 0xC20A, 0x99EF, 0xC20B, 0x99F0, 0xC20E, 0x99F1, 0xC210, 0x99F2, 0xC212, 0x99F3, 0xC213, 0x99F4, 0xC214, + 0x99F5, 0xC215, 0x99F6, 0xC216, 0x99F7, 0xC217, 0x99F8, 0xC21A, 0x99F9, 0xC21B, 0x99FA, 0xC21D, 0x99FB, 0xC21E, 0x99FC, 0xC221, + 0x99FD, 0xC222, 0x99FE, 0xC223, 0x9A41, 0xC224, 0x9A42, 0xC225, 0x9A43, 0xC226, 0x9A44, 0xC227, 0x9A45, 0xC22A, 0x9A46, 0xC22C, + 0x9A47, 0xC22E, 0x9A48, 0xC230, 0x9A49, 0xC233, 0x9A4A, 0xC235, 0x9A4B, 0xC236, 0x9A4C, 0xC237, 0x9A4D, 0xC238, 0x9A4E, 0xC239, + 0x9A4F, 0xC23A, 0x9A50, 0xC23B, 0x9A51, 0xC23C, 0x9A52, 0xC23D, 0x9A53, 0xC23E, 0x9A54, 0xC23F, 0x9A55, 0xC240, 0x9A56, 0xC241, + 0x9A57, 0xC242, 0x9A58, 0xC243, 0x9A59, 0xC244, 0x9A5A, 0xC245, 0x9A61, 0xC246, 0x9A62, 0xC247, 0x9A63, 0xC249, 0x9A64, 0xC24A, + 0x9A65, 0xC24B, 0x9A66, 0xC24C, 0x9A67, 0xC24D, 0x9A68, 0xC24E, 0x9A69, 0xC24F, 0x9A6A, 0xC252, 0x9A6B, 0xC253, 0x9A6C, 0xC255, + 0x9A6D, 0xC256, 0x9A6E, 0xC257, 0x9A6F, 0xC259, 0x9A70, 0xC25A, 0x9A71, 0xC25B, 0x9A72, 0xC25C, 0x9A73, 0xC25D, 0x9A74, 0xC25E, + 0x9A75, 0xC25F, 0x9A76, 0xC261, 0x9A77, 0xC262, 0x9A78, 0xC263, 0x9A79, 0xC264, 0x9A7A, 0xC266, 0x9A81, 0xC267, 0x9A82, 0xC268, + 0x9A83, 0xC269, 0x9A84, 0xC26A, 0x9A85, 0xC26B, 0x9A86, 0xC26E, 0x9A87, 0xC26F, 0x9A88, 0xC271, 0x9A89, 0xC272, 0x9A8A, 0xC273, + 0x9A8B, 0xC275, 0x9A8C, 0xC276, 0x9A8D, 0xC277, 0x9A8E, 0xC278, 0x9A8F, 0xC279, 0x9A90, 0xC27A, 0x9A91, 0xC27B, 0x9A92, 0xC27E, + 0x9A93, 0xC280, 0x9A94, 0xC282, 0x9A95, 0xC283, 0x9A96, 0xC284, 0x9A97, 0xC285, 0x9A98, 0xC286, 0x9A99, 0xC287, 0x9A9A, 0xC28A, + 0x9A9B, 0xC28B, 0x9A9C, 0xC28C, 0x9A9D, 0xC28D, 0x9A9E, 0xC28E, 0x9A9F, 0xC28F, 0x9AA0, 0xC291, 0x9AA1, 0xC292, 0x9AA2, 0xC293, + 0x9AA3, 0xC294, 0x9AA4, 0xC295, 0x9AA5, 0xC296, 0x9AA6, 0xC297, 0x9AA7, 0xC299, 0x9AA8, 0xC29A, 0x9AA9, 0xC29C, 0x9AAA, 0xC29E, + 0x9AAB, 0xC29F, 0x9AAC, 0xC2A0, 0x9AAD, 0xC2A1, 0x9AAE, 0xC2A2, 0x9AAF, 0xC2A3, 0x9AB0, 0xC2A6, 0x9AB1, 0xC2A7, 0x9AB2, 0xC2A9, + 0x9AB3, 0xC2AA, 0x9AB4, 0xC2AB, 0x9AB5, 0xC2AE, 0x9AB6, 0xC2AF, 0x9AB7, 0xC2B0, 0x9AB8, 0xC2B1, 0x9AB9, 0xC2B2, 0x9ABA, 0xC2B3, + 0x9ABB, 0xC2B6, 0x9ABC, 0xC2B8, 0x9ABD, 0xC2BA, 0x9ABE, 0xC2BB, 0x9ABF, 0xC2BC, 0x9AC0, 0xC2BD, 0x9AC1, 0xC2BE, 0x9AC2, 0xC2BF, + 0x9AC3, 0xC2C0, 0x9AC4, 0xC2C1, 0x9AC5, 0xC2C2, 0x9AC6, 0xC2C3, 0x9AC7, 0xC2C4, 0x9AC8, 0xC2C5, 0x9AC9, 0xC2C6, 0x9ACA, 0xC2C7, + 0x9ACB, 0xC2C8, 0x9ACC, 0xC2C9, 0x9ACD, 0xC2CA, 0x9ACE, 0xC2CB, 0x9ACF, 0xC2CC, 0x9AD0, 0xC2CD, 0x9AD1, 0xC2CE, 0x9AD2, 0xC2CF, + 0x9AD3, 0xC2D0, 0x9AD4, 0xC2D1, 0x9AD5, 0xC2D2, 0x9AD6, 0xC2D3, 0x9AD7, 0xC2D4, 0x9AD8, 0xC2D5, 0x9AD9, 0xC2D6, 0x9ADA, 0xC2D7, + 0x9ADB, 0xC2D8, 0x9ADC, 0xC2D9, 0x9ADD, 0xC2DA, 0x9ADE, 0xC2DB, 0x9ADF, 0xC2DE, 0x9AE0, 0xC2DF, 0x9AE1, 0xC2E1, 0x9AE2, 0xC2E2, + 0x9AE3, 0xC2E5, 0x9AE4, 0xC2E6, 0x9AE5, 0xC2E7, 0x9AE6, 0xC2E8, 0x9AE7, 0xC2E9, 0x9AE8, 0xC2EA, 0x9AE9, 0xC2EE, 0x9AEA, 0xC2F0, + 0x9AEB, 0xC2F2, 0x9AEC, 0xC2F3, 0x9AED, 0xC2F4, 0x9AEE, 0xC2F5, 0x9AEF, 0xC2F7, 0x9AF0, 0xC2FA, 0x9AF1, 0xC2FD, 0x9AF2, 0xC2FE, + 0x9AF3, 0xC2FF, 0x9AF4, 0xC301, 0x9AF5, 0xC302, 0x9AF6, 0xC303, 0x9AF7, 0xC304, 0x9AF8, 0xC305, 0x9AF9, 0xC306, 0x9AFA, 0xC307, + 0x9AFB, 0xC30A, 0x9AFC, 0xC30B, 0x9AFD, 0xC30E, 0x9AFE, 0xC30F, 0x9B41, 0xC310, 0x9B42, 0xC311, 0x9B43, 0xC312, 0x9B44, 0xC316, + 0x9B45, 0xC317, 0x9B46, 0xC319, 0x9B47, 0xC31A, 0x9B48, 0xC31B, 0x9B49, 0xC31D, 0x9B4A, 0xC31E, 0x9B4B, 0xC31F, 0x9B4C, 0xC320, + 0x9B4D, 0xC321, 0x9B4E, 0xC322, 0x9B4F, 0xC323, 0x9B50, 0xC326, 0x9B51, 0xC327, 0x9B52, 0xC32A, 0x9B53, 0xC32B, 0x9B54, 0xC32C, + 0x9B55, 0xC32D, 0x9B56, 0xC32E, 0x9B57, 0xC32F, 0x9B58, 0xC330, 0x9B59, 0xC331, 0x9B5A, 0xC332, 0x9B61, 0xC333, 0x9B62, 0xC334, + 0x9B63, 0xC335, 0x9B64, 0xC336, 0x9B65, 0xC337, 0x9B66, 0xC338, 0x9B67, 0xC339, 0x9B68, 0xC33A, 0x9B69, 0xC33B, 0x9B6A, 0xC33C, + 0x9B6B, 0xC33D, 0x9B6C, 0xC33E, 0x9B6D, 0xC33F, 0x9B6E, 0xC340, 0x9B6F, 0xC341, 0x9B70, 0xC342, 0x9B71, 0xC343, 0x9B72, 0xC344, + 0x9B73, 0xC346, 0x9B74, 0xC347, 0x9B75, 0xC348, 0x9B76, 0xC349, 0x9B77, 0xC34A, 0x9B78, 0xC34B, 0x9B79, 0xC34C, 0x9B7A, 0xC34D, + 0x9B81, 0xC34E, 0x9B82, 0xC34F, 0x9B83, 0xC350, 0x9B84, 0xC351, 0x9B85, 0xC352, 0x9B86, 0xC353, 0x9B87, 0xC354, 0x9B88, 0xC355, + 0x9B89, 0xC356, 0x9B8A, 0xC357, 0x9B8B, 0xC358, 0x9B8C, 0xC359, 0x9B8D, 0xC35A, 0x9B8E, 0xC35B, 0x9B8F, 0xC35C, 0x9B90, 0xC35D, + 0x9B91, 0xC35E, 0x9B92, 0xC35F, 0x9B93, 0xC360, 0x9B94, 0xC361, 0x9B95, 0xC362, 0x9B96, 0xC363, 0x9B97, 0xC364, 0x9B98, 0xC365, + 0x9B99, 0xC366, 0x9B9A, 0xC367, 0x9B9B, 0xC36A, 0x9B9C, 0xC36B, 0x9B9D, 0xC36D, 0x9B9E, 0xC36E, 0x9B9F, 0xC36F, 0x9BA0, 0xC371, + 0x9BA1, 0xC373, 0x9BA2, 0xC374, 0x9BA3, 0xC375, 0x9BA4, 0xC376, 0x9BA5, 0xC377, 0x9BA6, 0xC37A, 0x9BA7, 0xC37B, 0x9BA8, 0xC37E, + 0x9BA9, 0xC37F, 0x9BAA, 0xC380, 0x9BAB, 0xC381, 0x9BAC, 0xC382, 0x9BAD, 0xC383, 0x9BAE, 0xC385, 0x9BAF, 0xC386, 0x9BB0, 0xC387, + 0x9BB1, 0xC389, 0x9BB2, 0xC38A, 0x9BB3, 0xC38B, 0x9BB4, 0xC38D, 0x9BB5, 0xC38E, 0x9BB6, 0xC38F, 0x9BB7, 0xC390, 0x9BB8, 0xC391, + 0x9BB9, 0xC392, 0x9BBA, 0xC393, 0x9BBB, 0xC394, 0x9BBC, 0xC395, 0x9BBD, 0xC396, 0x9BBE, 0xC397, 0x9BBF, 0xC398, 0x9BC0, 0xC399, + 0x9BC1, 0xC39A, 0x9BC2, 0xC39B, 0x9BC3, 0xC39C, 0x9BC4, 0xC39D, 0x9BC5, 0xC39E, 0x9BC6, 0xC39F, 0x9BC7, 0xC3A0, 0x9BC8, 0xC3A1, + 0x9BC9, 0xC3A2, 0x9BCA, 0xC3A3, 0x9BCB, 0xC3A4, 0x9BCC, 0xC3A5, 0x9BCD, 0xC3A6, 0x9BCE, 0xC3A7, 0x9BCF, 0xC3A8, 0x9BD0, 0xC3A9, + 0x9BD1, 0xC3AA, 0x9BD2, 0xC3AB, 0x9BD3, 0xC3AC, 0x9BD4, 0xC3AD, 0x9BD5, 0xC3AE, 0x9BD6, 0xC3AF, 0x9BD7, 0xC3B0, 0x9BD8, 0xC3B1, + 0x9BD9, 0xC3B2, 0x9BDA, 0xC3B3, 0x9BDB, 0xC3B4, 0x9BDC, 0xC3B5, 0x9BDD, 0xC3B6, 0x9BDE, 0xC3B7, 0x9BDF, 0xC3B8, 0x9BE0, 0xC3B9, + 0x9BE1, 0xC3BA, 0x9BE2, 0xC3BB, 0x9BE3, 0xC3BC, 0x9BE4, 0xC3BD, 0x9BE5, 0xC3BE, 0x9BE6, 0xC3BF, 0x9BE7, 0xC3C1, 0x9BE8, 0xC3C2, + 0x9BE9, 0xC3C3, 0x9BEA, 0xC3C4, 0x9BEB, 0xC3C5, 0x9BEC, 0xC3C6, 0x9BED, 0xC3C7, 0x9BEE, 0xC3C8, 0x9BEF, 0xC3C9, 0x9BF0, 0xC3CA, + 0x9BF1, 0xC3CB, 0x9BF2, 0xC3CC, 0x9BF3, 0xC3CD, 0x9BF4, 0xC3CE, 0x9BF5, 0xC3CF, 0x9BF6, 0xC3D0, 0x9BF7, 0xC3D1, 0x9BF8, 0xC3D2, + 0x9BF9, 0xC3D3, 0x9BFA, 0xC3D4, 0x9BFB, 0xC3D5, 0x9BFC, 0xC3D6, 0x9BFD, 0xC3D7, 0x9BFE, 0xC3DA, 0x9C41, 0xC3DB, 0x9C42, 0xC3DD, + 0x9C43, 0xC3DE, 0x9C44, 0xC3E1, 0x9C45, 0xC3E3, 0x9C46, 0xC3E4, 0x9C47, 0xC3E5, 0x9C48, 0xC3E6, 0x9C49, 0xC3E7, 0x9C4A, 0xC3EA, + 0x9C4B, 0xC3EB, 0x9C4C, 0xC3EC, 0x9C4D, 0xC3EE, 0x9C4E, 0xC3EF, 0x9C4F, 0xC3F0, 0x9C50, 0xC3F1, 0x9C51, 0xC3F2, 0x9C52, 0xC3F3, + 0x9C53, 0xC3F6, 0x9C54, 0xC3F7, 0x9C55, 0xC3F9, 0x9C56, 0xC3FA, 0x9C57, 0xC3FB, 0x9C58, 0xC3FC, 0x9C59, 0xC3FD, 0x9C5A, 0xC3FE, + 0x9C61, 0xC3FF, 0x9C62, 0xC400, 0x9C63, 0xC401, 0x9C64, 0xC402, 0x9C65, 0xC403, 0x9C66, 0xC404, 0x9C67, 0xC405, 0x9C68, 0xC406, + 0x9C69, 0xC407, 0x9C6A, 0xC409, 0x9C6B, 0xC40A, 0x9C6C, 0xC40B, 0x9C6D, 0xC40C, 0x9C6E, 0xC40D, 0x9C6F, 0xC40E, 0x9C70, 0xC40F, + 0x9C71, 0xC411, 0x9C72, 0xC412, 0x9C73, 0xC413, 0x9C74, 0xC414, 0x9C75, 0xC415, 0x9C76, 0xC416, 0x9C77, 0xC417, 0x9C78, 0xC418, + 0x9C79, 0xC419, 0x9C7A, 0xC41A, 0x9C81, 0xC41B, 0x9C82, 0xC41C, 0x9C83, 0xC41D, 0x9C84, 0xC41E, 0x9C85, 0xC41F, 0x9C86, 0xC420, + 0x9C87, 0xC421, 0x9C88, 0xC422, 0x9C89, 0xC423, 0x9C8A, 0xC425, 0x9C8B, 0xC426, 0x9C8C, 0xC427, 0x9C8D, 0xC428, 0x9C8E, 0xC429, + 0x9C8F, 0xC42A, 0x9C90, 0xC42B, 0x9C91, 0xC42D, 0x9C92, 0xC42E, 0x9C93, 0xC42F, 0x9C94, 0xC431, 0x9C95, 0xC432, 0x9C96, 0xC433, + 0x9C97, 0xC435, 0x9C98, 0xC436, 0x9C99, 0xC437, 0x9C9A, 0xC438, 0x9C9B, 0xC439, 0x9C9C, 0xC43A, 0x9C9D, 0xC43B, 0x9C9E, 0xC43E, + 0x9C9F, 0xC43F, 0x9CA0, 0xC440, 0x9CA1, 0xC441, 0x9CA2, 0xC442, 0x9CA3, 0xC443, 0x9CA4, 0xC444, 0x9CA5, 0xC445, 0x9CA6, 0xC446, + 0x9CA7, 0xC447, 0x9CA8, 0xC449, 0x9CA9, 0xC44A, 0x9CAA, 0xC44B, 0x9CAB, 0xC44C, 0x9CAC, 0xC44D, 0x9CAD, 0xC44E, 0x9CAE, 0xC44F, + 0x9CAF, 0xC450, 0x9CB0, 0xC451, 0x9CB1, 0xC452, 0x9CB2, 0xC453, 0x9CB3, 0xC454, 0x9CB4, 0xC455, 0x9CB5, 0xC456, 0x9CB6, 0xC457, + 0x9CB7, 0xC458, 0x9CB8, 0xC459, 0x9CB9, 0xC45A, 0x9CBA, 0xC45B, 0x9CBB, 0xC45C, 0x9CBC, 0xC45D, 0x9CBD, 0xC45E, 0x9CBE, 0xC45F, + 0x9CBF, 0xC460, 0x9CC0, 0xC461, 0x9CC1, 0xC462, 0x9CC2, 0xC463, 0x9CC3, 0xC466, 0x9CC4, 0xC467, 0x9CC5, 0xC469, 0x9CC6, 0xC46A, + 0x9CC7, 0xC46B, 0x9CC8, 0xC46D, 0x9CC9, 0xC46E, 0x9CCA, 0xC46F, 0x9CCB, 0xC470, 0x9CCC, 0xC471, 0x9CCD, 0xC472, 0x9CCE, 0xC473, + 0x9CCF, 0xC476, 0x9CD0, 0xC477, 0x9CD1, 0xC478, 0x9CD2, 0xC47A, 0x9CD3, 0xC47B, 0x9CD4, 0xC47C, 0x9CD5, 0xC47D, 0x9CD6, 0xC47E, + 0x9CD7, 0xC47F, 0x9CD8, 0xC481, 0x9CD9, 0xC482, 0x9CDA, 0xC483, 0x9CDB, 0xC484, 0x9CDC, 0xC485, 0x9CDD, 0xC486, 0x9CDE, 0xC487, + 0x9CDF, 0xC488, 0x9CE0, 0xC489, 0x9CE1, 0xC48A, 0x9CE2, 0xC48B, 0x9CE3, 0xC48C, 0x9CE4, 0xC48D, 0x9CE5, 0xC48E, 0x9CE6, 0xC48F, + 0x9CE7, 0xC490, 0x9CE8, 0xC491, 0x9CE9, 0xC492, 0x9CEA, 0xC493, 0x9CEB, 0xC495, 0x9CEC, 0xC496, 0x9CED, 0xC497, 0x9CEE, 0xC498, + 0x9CEF, 0xC499, 0x9CF0, 0xC49A, 0x9CF1, 0xC49B, 0x9CF2, 0xC49D, 0x9CF3, 0xC49E, 0x9CF4, 0xC49F, 0x9CF5, 0xC4A0, 0x9CF6, 0xC4A1, + 0x9CF7, 0xC4A2, 0x9CF8, 0xC4A3, 0x9CF9, 0xC4A4, 0x9CFA, 0xC4A5, 0x9CFB, 0xC4A6, 0x9CFC, 0xC4A7, 0x9CFD, 0xC4A8, 0x9CFE, 0xC4A9, + 0x9D41, 0xC4AA, 0x9D42, 0xC4AB, 0x9D43, 0xC4AC, 0x9D44, 0xC4AD, 0x9D45, 0xC4AE, 0x9D46, 0xC4AF, 0x9D47, 0xC4B0, 0x9D48, 0xC4B1, + 0x9D49, 0xC4B2, 0x9D4A, 0xC4B3, 0x9D4B, 0xC4B4, 0x9D4C, 0xC4B5, 0x9D4D, 0xC4B6, 0x9D4E, 0xC4B7, 0x9D4F, 0xC4B9, 0x9D50, 0xC4BA, + 0x9D51, 0xC4BB, 0x9D52, 0xC4BD, 0x9D53, 0xC4BE, 0x9D54, 0xC4BF, 0x9D55, 0xC4C0, 0x9D56, 0xC4C1, 0x9D57, 0xC4C2, 0x9D58, 0xC4C3, + 0x9D59, 0xC4C4, 0x9D5A, 0xC4C5, 0x9D61, 0xC4C6, 0x9D62, 0xC4C7, 0x9D63, 0xC4C8, 0x9D64, 0xC4C9, 0x9D65, 0xC4CA, 0x9D66, 0xC4CB, + 0x9D67, 0xC4CC, 0x9D68, 0xC4CD, 0x9D69, 0xC4CE, 0x9D6A, 0xC4CF, 0x9D6B, 0xC4D0, 0x9D6C, 0xC4D1, 0x9D6D, 0xC4D2, 0x9D6E, 0xC4D3, + 0x9D6F, 0xC4D4, 0x9D70, 0xC4D5, 0x9D71, 0xC4D6, 0x9D72, 0xC4D7, 0x9D73, 0xC4D8, 0x9D74, 0xC4D9, 0x9D75, 0xC4DA, 0x9D76, 0xC4DB, + 0x9D77, 0xC4DC, 0x9D78, 0xC4DD, 0x9D79, 0xC4DE, 0x9D7A, 0xC4DF, 0x9D81, 0xC4E0, 0x9D82, 0xC4E1, 0x9D83, 0xC4E2, 0x9D84, 0xC4E3, + 0x9D85, 0xC4E4, 0x9D86, 0xC4E5, 0x9D87, 0xC4E6, 0x9D88, 0xC4E7, 0x9D89, 0xC4E8, 0x9D8A, 0xC4EA, 0x9D8B, 0xC4EB, 0x9D8C, 0xC4EC, + 0x9D8D, 0xC4ED, 0x9D8E, 0xC4EE, 0x9D8F, 0xC4EF, 0x9D90, 0xC4F2, 0x9D91, 0xC4F3, 0x9D92, 0xC4F5, 0x9D93, 0xC4F6, 0x9D94, 0xC4F7, + 0x9D95, 0xC4F9, 0x9D96, 0xC4FB, 0x9D97, 0xC4FC, 0x9D98, 0xC4FD, 0x9D99, 0xC4FE, 0x9D9A, 0xC502, 0x9D9B, 0xC503, 0x9D9C, 0xC504, + 0x9D9D, 0xC505, 0x9D9E, 0xC506, 0x9D9F, 0xC507, 0x9DA0, 0xC508, 0x9DA1, 0xC509, 0x9DA2, 0xC50A, 0x9DA3, 0xC50B, 0x9DA4, 0xC50D, + 0x9DA5, 0xC50E, 0x9DA6, 0xC50F, 0x9DA7, 0xC511, 0x9DA8, 0xC512, 0x9DA9, 0xC513, 0x9DAA, 0xC515, 0x9DAB, 0xC516, 0x9DAC, 0xC517, + 0x9DAD, 0xC518, 0x9DAE, 0xC519, 0x9DAF, 0xC51A, 0x9DB0, 0xC51B, 0x9DB1, 0xC51D, 0x9DB2, 0xC51E, 0x9DB3, 0xC51F, 0x9DB4, 0xC520, + 0x9DB5, 0xC521, 0x9DB6, 0xC522, 0x9DB7, 0xC523, 0x9DB8, 0xC524, 0x9DB9, 0xC525, 0x9DBA, 0xC526, 0x9DBB, 0xC527, 0x9DBC, 0xC52A, + 0x9DBD, 0xC52B, 0x9DBE, 0xC52D, 0x9DBF, 0xC52E, 0x9DC0, 0xC52F, 0x9DC1, 0xC531, 0x9DC2, 0xC532, 0x9DC3, 0xC533, 0x9DC4, 0xC534, + 0x9DC5, 0xC535, 0x9DC6, 0xC536, 0x9DC7, 0xC537, 0x9DC8, 0xC53A, 0x9DC9, 0xC53C, 0x9DCA, 0xC53E, 0x9DCB, 0xC53F, 0x9DCC, 0xC540, + 0x9DCD, 0xC541, 0x9DCE, 0xC542, 0x9DCF, 0xC543, 0x9DD0, 0xC546, 0x9DD1, 0xC547, 0x9DD2, 0xC54B, 0x9DD3, 0xC54F, 0x9DD4, 0xC550, + 0x9DD5, 0xC551, 0x9DD6, 0xC552, 0x9DD7, 0xC556, 0x9DD8, 0xC55A, 0x9DD9, 0xC55B, 0x9DDA, 0xC55C, 0x9DDB, 0xC55F, 0x9DDC, 0xC562, + 0x9DDD, 0xC563, 0x9DDE, 0xC565, 0x9DDF, 0xC566, 0x9DE0, 0xC567, 0x9DE1, 0xC569, 0x9DE2, 0xC56A, 0x9DE3, 0xC56B, 0x9DE4, 0xC56C, + 0x9DE5, 0xC56D, 0x9DE6, 0xC56E, 0x9DE7, 0xC56F, 0x9DE8, 0xC572, 0x9DE9, 0xC576, 0x9DEA, 0xC577, 0x9DEB, 0xC578, 0x9DEC, 0xC579, + 0x9DED, 0xC57A, 0x9DEE, 0xC57B, 0x9DEF, 0xC57E, 0x9DF0, 0xC57F, 0x9DF1, 0xC581, 0x9DF2, 0xC582, 0x9DF3, 0xC583, 0x9DF4, 0xC585, + 0x9DF5, 0xC586, 0x9DF6, 0xC588, 0x9DF7, 0xC589, 0x9DF8, 0xC58A, 0x9DF9, 0xC58B, 0x9DFA, 0xC58E, 0x9DFB, 0xC590, 0x9DFC, 0xC592, + 0x9DFD, 0xC593, 0x9DFE, 0xC594, 0x9E41, 0xC596, 0x9E42, 0xC599, 0x9E43, 0xC59A, 0x9E44, 0xC59B, 0x9E45, 0xC59D, 0x9E46, 0xC59E, + 0x9E47, 0xC59F, 0x9E48, 0xC5A1, 0x9E49, 0xC5A2, 0x9E4A, 0xC5A3, 0x9E4B, 0xC5A4, 0x9E4C, 0xC5A5, 0x9E4D, 0xC5A6, 0x9E4E, 0xC5A7, + 0x9E4F, 0xC5A8, 0x9E50, 0xC5AA, 0x9E51, 0xC5AB, 0x9E52, 0xC5AC, 0x9E53, 0xC5AD, 0x9E54, 0xC5AE, 0x9E55, 0xC5AF, 0x9E56, 0xC5B0, + 0x9E57, 0xC5B1, 0x9E58, 0xC5B2, 0x9E59, 0xC5B3, 0x9E5A, 0xC5B6, 0x9E61, 0xC5B7, 0x9E62, 0xC5BA, 0x9E63, 0xC5BF, 0x9E64, 0xC5C0, + 0x9E65, 0xC5C1, 0x9E66, 0xC5C2, 0x9E67, 0xC5C3, 0x9E68, 0xC5CB, 0x9E69, 0xC5CD, 0x9E6A, 0xC5CF, 0x9E6B, 0xC5D2, 0x9E6C, 0xC5D3, + 0x9E6D, 0xC5D5, 0x9E6E, 0xC5D6, 0x9E6F, 0xC5D7, 0x9E70, 0xC5D9, 0x9E71, 0xC5DA, 0x9E72, 0xC5DB, 0x9E73, 0xC5DC, 0x9E74, 0xC5DD, + 0x9E75, 0xC5DE, 0x9E76, 0xC5DF, 0x9E77, 0xC5E2, 0x9E78, 0xC5E4, 0x9E79, 0xC5E6, 0x9E7A, 0xC5E7, 0x9E81, 0xC5E8, 0x9E82, 0xC5E9, + 0x9E83, 0xC5EA, 0x9E84, 0xC5EB, 0x9E85, 0xC5EF, 0x9E86, 0xC5F1, 0x9E87, 0xC5F2, 0x9E88, 0xC5F3, 0x9E89, 0xC5F5, 0x9E8A, 0xC5F8, + 0x9E8B, 0xC5F9, 0x9E8C, 0xC5FA, 0x9E8D, 0xC5FB, 0x9E8E, 0xC602, 0x9E8F, 0xC603, 0x9E90, 0xC604, 0x9E91, 0xC609, 0x9E92, 0xC60A, + 0x9E93, 0xC60B, 0x9E94, 0xC60D, 0x9E95, 0xC60E, 0x9E96, 0xC60F, 0x9E97, 0xC611, 0x9E98, 0xC612, 0x9E99, 0xC613, 0x9E9A, 0xC614, + 0x9E9B, 0xC615, 0x9E9C, 0xC616, 0x9E9D, 0xC617, 0x9E9E, 0xC61A, 0x9E9F, 0xC61D, 0x9EA0, 0xC61E, 0x9EA1, 0xC61F, 0x9EA2, 0xC620, + 0x9EA3, 0xC621, 0x9EA4, 0xC622, 0x9EA5, 0xC623, 0x9EA6, 0xC626, 0x9EA7, 0xC627, 0x9EA8, 0xC629, 0x9EA9, 0xC62A, 0x9EAA, 0xC62B, + 0x9EAB, 0xC62F, 0x9EAC, 0xC631, 0x9EAD, 0xC632, 0x9EAE, 0xC636, 0x9EAF, 0xC638, 0x9EB0, 0xC63A, 0x9EB1, 0xC63C, 0x9EB2, 0xC63D, + 0x9EB3, 0xC63E, 0x9EB4, 0xC63F, 0x9EB5, 0xC642, 0x9EB6, 0xC643, 0x9EB7, 0xC645, 0x9EB8, 0xC646, 0x9EB9, 0xC647, 0x9EBA, 0xC649, + 0x9EBB, 0xC64A, 0x9EBC, 0xC64B, 0x9EBD, 0xC64C, 0x9EBE, 0xC64D, 0x9EBF, 0xC64E, 0x9EC0, 0xC64F, 0x9EC1, 0xC652, 0x9EC2, 0xC656, + 0x9EC3, 0xC657, 0x9EC4, 0xC658, 0x9EC5, 0xC659, 0x9EC6, 0xC65A, 0x9EC7, 0xC65B, 0x9EC8, 0xC65E, 0x9EC9, 0xC65F, 0x9ECA, 0xC661, + 0x9ECB, 0xC662, 0x9ECC, 0xC663, 0x9ECD, 0xC664, 0x9ECE, 0xC665, 0x9ECF, 0xC666, 0x9ED0, 0xC667, 0x9ED1, 0xC668, 0x9ED2, 0xC669, + 0x9ED3, 0xC66A, 0x9ED4, 0xC66B, 0x9ED5, 0xC66D, 0x9ED6, 0xC66E, 0x9ED7, 0xC670, 0x9ED8, 0xC672, 0x9ED9, 0xC673, 0x9EDA, 0xC674, + 0x9EDB, 0xC675, 0x9EDC, 0xC676, 0x9EDD, 0xC677, 0x9EDE, 0xC67A, 0x9EDF, 0xC67B, 0x9EE0, 0xC67D, 0x9EE1, 0xC67E, 0x9EE2, 0xC67F, + 0x9EE3, 0xC681, 0x9EE4, 0xC682, 0x9EE5, 0xC683, 0x9EE6, 0xC684, 0x9EE7, 0xC685, 0x9EE8, 0xC686, 0x9EE9, 0xC687, 0x9EEA, 0xC68A, + 0x9EEB, 0xC68C, 0x9EEC, 0xC68E, 0x9EED, 0xC68F, 0x9EEE, 0xC690, 0x9EEF, 0xC691, 0x9EF0, 0xC692, 0x9EF1, 0xC693, 0x9EF2, 0xC696, + 0x9EF3, 0xC697, 0x9EF4, 0xC699, 0x9EF5, 0xC69A, 0x9EF6, 0xC69B, 0x9EF7, 0xC69D, 0x9EF8, 0xC69E, 0x9EF9, 0xC69F, 0x9EFA, 0xC6A0, + 0x9EFB, 0xC6A1, 0x9EFC, 0xC6A2, 0x9EFD, 0xC6A3, 0x9EFE, 0xC6A6, 0x9F41, 0xC6A8, 0x9F42, 0xC6AA, 0x9F43, 0xC6AB, 0x9F44, 0xC6AC, + 0x9F45, 0xC6AD, 0x9F46, 0xC6AE, 0x9F47, 0xC6AF, 0x9F48, 0xC6B2, 0x9F49, 0xC6B3, 0x9F4A, 0xC6B5, 0x9F4B, 0xC6B6, 0x9F4C, 0xC6B7, + 0x9F4D, 0xC6BB, 0x9F4E, 0xC6BC, 0x9F4F, 0xC6BD, 0x9F50, 0xC6BE, 0x9F51, 0xC6BF, 0x9F52, 0xC6C2, 0x9F53, 0xC6C4, 0x9F54, 0xC6C6, + 0x9F55, 0xC6C7, 0x9F56, 0xC6C8, 0x9F57, 0xC6C9, 0x9F58, 0xC6CA, 0x9F59, 0xC6CB, 0x9F5A, 0xC6CE, 0x9F61, 0xC6CF, 0x9F62, 0xC6D1, + 0x9F63, 0xC6D2, 0x9F64, 0xC6D3, 0x9F65, 0xC6D5, 0x9F66, 0xC6D6, 0x9F67, 0xC6D7, 0x9F68, 0xC6D8, 0x9F69, 0xC6D9, 0x9F6A, 0xC6DA, + 0x9F6B, 0xC6DB, 0x9F6C, 0xC6DE, 0x9F6D, 0xC6DF, 0x9F6E, 0xC6E2, 0x9F6F, 0xC6E3, 0x9F70, 0xC6E4, 0x9F71, 0xC6E5, 0x9F72, 0xC6E6, + 0x9F73, 0xC6E7, 0x9F74, 0xC6EA, 0x9F75, 0xC6EB, 0x9F76, 0xC6ED, 0x9F77, 0xC6EE, 0x9F78, 0xC6EF, 0x9F79, 0xC6F1, 0x9F7A, 0xC6F2, + 0x9F81, 0xC6F3, 0x9F82, 0xC6F4, 0x9F83, 0xC6F5, 0x9F84, 0xC6F6, 0x9F85, 0xC6F7, 0x9F86, 0xC6FA, 0x9F87, 0xC6FB, 0x9F88, 0xC6FC, + 0x9F89, 0xC6FE, 0x9F8A, 0xC6FF, 0x9F8B, 0xC700, 0x9F8C, 0xC701, 0x9F8D, 0xC702, 0x9F8E, 0xC703, 0x9F8F, 0xC706, 0x9F90, 0xC707, + 0x9F91, 0xC709, 0x9F92, 0xC70A, 0x9F93, 0xC70B, 0x9F94, 0xC70D, 0x9F95, 0xC70E, 0x9F96, 0xC70F, 0x9F97, 0xC710, 0x9F98, 0xC711, + 0x9F99, 0xC712, 0x9F9A, 0xC713, 0x9F9B, 0xC716, 0x9F9C, 0xC718, 0x9F9D, 0xC71A, 0x9F9E, 0xC71B, 0x9F9F, 0xC71C, 0x9FA0, 0xC71D, + 0x9FA1, 0xC71E, 0x9FA2, 0xC71F, 0x9FA3, 0xC722, 0x9FA4, 0xC723, 0x9FA5, 0xC725, 0x9FA6, 0xC726, 0x9FA7, 0xC727, 0x9FA8, 0xC729, + 0x9FA9, 0xC72A, 0x9FAA, 0xC72B, 0x9FAB, 0xC72C, 0x9FAC, 0xC72D, 0x9FAD, 0xC72E, 0x9FAE, 0xC72F, 0x9FAF, 0xC732, 0x9FB0, 0xC734, + 0x9FB1, 0xC736, 0x9FB2, 0xC738, 0x9FB3, 0xC739, 0x9FB4, 0xC73A, 0x9FB5, 0xC73B, 0x9FB6, 0xC73E, 0x9FB7, 0xC73F, 0x9FB8, 0xC741, + 0x9FB9, 0xC742, 0x9FBA, 0xC743, 0x9FBB, 0xC745, 0x9FBC, 0xC746, 0x9FBD, 0xC747, 0x9FBE, 0xC748, 0x9FBF, 0xC749, 0x9FC0, 0xC74B, + 0x9FC1, 0xC74E, 0x9FC2, 0xC750, 0x9FC3, 0xC759, 0x9FC4, 0xC75A, 0x9FC5, 0xC75B, 0x9FC6, 0xC75D, 0x9FC7, 0xC75E, 0x9FC8, 0xC75F, + 0x9FC9, 0xC761, 0x9FCA, 0xC762, 0x9FCB, 0xC763, 0x9FCC, 0xC764, 0x9FCD, 0xC765, 0x9FCE, 0xC766, 0x9FCF, 0xC767, 0x9FD0, 0xC769, + 0x9FD1, 0xC76A, 0x9FD2, 0xC76C, 0x9FD3, 0xC76D, 0x9FD4, 0xC76E, 0x9FD5, 0xC76F, 0x9FD6, 0xC770, 0x9FD7, 0xC771, 0x9FD8, 0xC772, + 0x9FD9, 0xC773, 0x9FDA, 0xC776, 0x9FDB, 0xC777, 0x9FDC, 0xC779, 0x9FDD, 0xC77A, 0x9FDE, 0xC77B, 0x9FDF, 0xC77F, 0x9FE0, 0xC780, + 0x9FE1, 0xC781, 0x9FE2, 0xC782, 0x9FE3, 0xC786, 0x9FE4, 0xC78B, 0x9FE5, 0xC78C, 0x9FE6, 0xC78D, 0x9FE7, 0xC78F, 0x9FE8, 0xC792, + 0x9FE9, 0xC793, 0x9FEA, 0xC795, 0x9FEB, 0xC799, 0x9FEC, 0xC79B, 0x9FED, 0xC79C, 0x9FEE, 0xC79D, 0x9FEF, 0xC79E, 0x9FF0, 0xC79F, + 0x9FF1, 0xC7A2, 0x9FF2, 0xC7A7, 0x9FF3, 0xC7A8, 0x9FF4, 0xC7A9, 0x9FF5, 0xC7AA, 0x9FF6, 0xC7AB, 0x9FF7, 0xC7AE, 0x9FF8, 0xC7AF, + 0x9FF9, 0xC7B1, 0x9FFA, 0xC7B2, 0x9FFB, 0xC7B3, 0x9FFC, 0xC7B5, 0x9FFD, 0xC7B6, 0x9FFE, 0xC7B7, 0xA041, 0xC7B8, 0xA042, 0xC7B9, + 0xA043, 0xC7BA, 0xA044, 0xC7BB, 0xA045, 0xC7BE, 0xA046, 0xC7C2, 0xA047, 0xC7C3, 0xA048, 0xC7C4, 0xA049, 0xC7C5, 0xA04A, 0xC7C6, + 0xA04B, 0xC7C7, 0xA04C, 0xC7CA, 0xA04D, 0xC7CB, 0xA04E, 0xC7CD, 0xA04F, 0xC7CF, 0xA050, 0xC7D1, 0xA051, 0xC7D2, 0xA052, 0xC7D3, + 0xA053, 0xC7D4, 0xA054, 0xC7D5, 0xA055, 0xC7D6, 0xA056, 0xC7D7, 0xA057, 0xC7D9, 0xA058, 0xC7DA, 0xA059, 0xC7DB, 0xA05A, 0xC7DC, + 0xA061, 0xC7DE, 0xA062, 0xC7DF, 0xA063, 0xC7E0, 0xA064, 0xC7E1, 0xA065, 0xC7E2, 0xA066, 0xC7E3, 0xA067, 0xC7E5, 0xA068, 0xC7E6, + 0xA069, 0xC7E7, 0xA06A, 0xC7E9, 0xA06B, 0xC7EA, 0xA06C, 0xC7EB, 0xA06D, 0xC7ED, 0xA06E, 0xC7EE, 0xA06F, 0xC7EF, 0xA070, 0xC7F0, + 0xA071, 0xC7F1, 0xA072, 0xC7F2, 0xA073, 0xC7F3, 0xA074, 0xC7F4, 0xA075, 0xC7F5, 0xA076, 0xC7F6, 0xA077, 0xC7F7, 0xA078, 0xC7F8, + 0xA079, 0xC7F9, 0xA07A, 0xC7FA, 0xA081, 0xC7FB, 0xA082, 0xC7FC, 0xA083, 0xC7FD, 0xA084, 0xC7FE, 0xA085, 0xC7FF, 0xA086, 0xC802, + 0xA087, 0xC803, 0xA088, 0xC805, 0xA089, 0xC806, 0xA08A, 0xC807, 0xA08B, 0xC809, 0xA08C, 0xC80B, 0xA08D, 0xC80C, 0xA08E, 0xC80D, + 0xA08F, 0xC80E, 0xA090, 0xC80F, 0xA091, 0xC812, 0xA092, 0xC814, 0xA093, 0xC817, 0xA094, 0xC818, 0xA095, 0xC819, 0xA096, 0xC81A, + 0xA097, 0xC81B, 0xA098, 0xC81E, 0xA099, 0xC81F, 0xA09A, 0xC821, 0xA09B, 0xC822, 0xA09C, 0xC823, 0xA09D, 0xC825, 0xA09E, 0xC826, + 0xA09F, 0xC827, 0xA0A0, 0xC828, 0xA0A1, 0xC829, 0xA0A2, 0xC82A, 0xA0A3, 0xC82B, 0xA0A4, 0xC82E, 0xA0A5, 0xC830, 0xA0A6, 0xC832, + 0xA0A7, 0xC833, 0xA0A8, 0xC834, 0xA0A9, 0xC835, 0xA0AA, 0xC836, 0xA0AB, 0xC837, 0xA0AC, 0xC839, 0xA0AD, 0xC83A, 0xA0AE, 0xC83B, + 0xA0AF, 0xC83D, 0xA0B0, 0xC83E, 0xA0B1, 0xC83F, 0xA0B2, 0xC841, 0xA0B3, 0xC842, 0xA0B4, 0xC843, 0xA0B5, 0xC844, 0xA0B6, 0xC845, + 0xA0B7, 0xC846, 0xA0B8, 0xC847, 0xA0B9, 0xC84A, 0xA0BA, 0xC84B, 0xA0BB, 0xC84E, 0xA0BC, 0xC84F, 0xA0BD, 0xC850, 0xA0BE, 0xC851, + 0xA0BF, 0xC852, 0xA0C0, 0xC853, 0xA0C1, 0xC855, 0xA0C2, 0xC856, 0xA0C3, 0xC857, 0xA0C4, 0xC858, 0xA0C5, 0xC859, 0xA0C6, 0xC85A, + 0xA0C7, 0xC85B, 0xA0C8, 0xC85C, 0xA0C9, 0xC85D, 0xA0CA, 0xC85E, 0xA0CB, 0xC85F, 0xA0CC, 0xC860, 0xA0CD, 0xC861, 0xA0CE, 0xC862, + 0xA0CF, 0xC863, 0xA0D0, 0xC864, 0xA0D1, 0xC865, 0xA0D2, 0xC866, 0xA0D3, 0xC867, 0xA0D4, 0xC868, 0xA0D5, 0xC869, 0xA0D6, 0xC86A, + 0xA0D7, 0xC86B, 0xA0D8, 0xC86C, 0xA0D9, 0xC86D, 0xA0DA, 0xC86E, 0xA0DB, 0xC86F, 0xA0DC, 0xC872, 0xA0DD, 0xC873, 0xA0DE, 0xC875, + 0xA0DF, 0xC876, 0xA0E0, 0xC877, 0xA0E1, 0xC879, 0xA0E2, 0xC87B, 0xA0E3, 0xC87C, 0xA0E4, 0xC87D, 0xA0E5, 0xC87E, 0xA0E6, 0xC87F, + 0xA0E7, 0xC882, 0xA0E8, 0xC884, 0xA0E9, 0xC888, 0xA0EA, 0xC889, 0xA0EB, 0xC88A, 0xA0EC, 0xC88E, 0xA0ED, 0xC88F, 0xA0EE, 0xC890, + 0xA0EF, 0xC891, 0xA0F0, 0xC892, 0xA0F1, 0xC893, 0xA0F2, 0xC895, 0xA0F3, 0xC896, 0xA0F4, 0xC897, 0xA0F5, 0xC898, 0xA0F6, 0xC899, + 0xA0F7, 0xC89A, 0xA0F8, 0xC89B, 0xA0F9, 0xC89C, 0xA0FA, 0xC89E, 0xA0FB, 0xC8A0, 0xA0FC, 0xC8A2, 0xA0FD, 0xC8A3, 0xA0FE, 0xC8A4, + 0xA141, 0xC8A5, 0xA142, 0xC8A6, 0xA143, 0xC8A7, 0xA144, 0xC8A9, 0xA145, 0xC8AA, 0xA146, 0xC8AB, 0xA147, 0xC8AC, 0xA148, 0xC8AD, + 0xA149, 0xC8AE, 0xA14A, 0xC8AF, 0xA14B, 0xC8B0, 0xA14C, 0xC8B1, 0xA14D, 0xC8B2, 0xA14E, 0xC8B3, 0xA14F, 0xC8B4, 0xA150, 0xC8B5, + 0xA151, 0xC8B6, 0xA152, 0xC8B7, 0xA153, 0xC8B8, 0xA154, 0xC8B9, 0xA155, 0xC8BA, 0xA156, 0xC8BB, 0xA157, 0xC8BE, 0xA158, 0xC8BF, + 0xA159, 0xC8C0, 0xA15A, 0xC8C1, 0xA161, 0xC8C2, 0xA162, 0xC8C3, 0xA163, 0xC8C5, 0xA164, 0xC8C6, 0xA165, 0xC8C7, 0xA166, 0xC8C9, + 0xA167, 0xC8CA, 0xA168, 0xC8CB, 0xA169, 0xC8CD, 0xA16A, 0xC8CE, 0xA16B, 0xC8CF, 0xA16C, 0xC8D0, 0xA16D, 0xC8D1, 0xA16E, 0xC8D2, + 0xA16F, 0xC8D3, 0xA170, 0xC8D6, 0xA171, 0xC8D8, 0xA172, 0xC8DA, 0xA173, 0xC8DB, 0xA174, 0xC8DC, 0xA175, 0xC8DD, 0xA176, 0xC8DE, + 0xA177, 0xC8DF, 0xA178, 0xC8E2, 0xA179, 0xC8E3, 0xA17A, 0xC8E5, 0xA181, 0xC8E6, 0xA182, 0xC8E7, 0xA183, 0xC8E8, 0xA184, 0xC8E9, + 0xA185, 0xC8EA, 0xA186, 0xC8EB, 0xA187, 0xC8EC, 0xA188, 0xC8ED, 0xA189, 0xC8EE, 0xA18A, 0xC8EF, 0xA18B, 0xC8F0, 0xA18C, 0xC8F1, + 0xA18D, 0xC8F2, 0xA18E, 0xC8F3, 0xA18F, 0xC8F4, 0xA190, 0xC8F6, 0xA191, 0xC8F7, 0xA192, 0xC8F8, 0xA193, 0xC8F9, 0xA194, 0xC8FA, + 0xA195, 0xC8FB, 0xA196, 0xC8FE, 0xA197, 0xC8FF, 0xA198, 0xC901, 0xA199, 0xC902, 0xA19A, 0xC903, 0xA19B, 0xC907, 0xA19C, 0xC908, + 0xA19D, 0xC909, 0xA19E, 0xC90A, 0xA19F, 0xC90B, 0xA1A0, 0xC90E, 0xA1A1, 0x3000, 0xA1A2, 0x3001, 0xA1A3, 0x3002, 0xA1A4, 0x00B7, + 0xA1A5, 0x2025, 0xA1A6, 0x2026, 0xA1A7, 0x00A8, 0xA1A8, 0x3003, 0xA1A9, 0x00AD, 0xA1AA, 0x2015, 0xA1AB, 0x2225, 0xA1AC, 0xFF3C, + 0xA1AD, 0x223C, 0xA1AE, 0x2018, 0xA1AF, 0x2019, 0xA1B0, 0x201C, 0xA1B1, 0x201D, 0xA1B2, 0x3014, 0xA1B3, 0x3015, 0xA1B4, 0x3008, + 0xA1B5, 0x3009, 0xA1B6, 0x300A, 0xA1B7, 0x300B, 0xA1B8, 0x300C, 0xA1B9, 0x300D, 0xA1BA, 0x300E, 0xA1BB, 0x300F, 0xA1BC, 0x3010, + 0xA1BD, 0x3011, 0xA1BE, 0x00B1, 0xA1BF, 0x00D7, 0xA1C0, 0x00F7, 0xA1C1, 0x2260, 0xA1C2, 0x2264, 0xA1C3, 0x2265, 0xA1C4, 0x221E, + 0xA1C5, 0x2234, 0xA1C6, 0x00B0, 0xA1C7, 0x2032, 0xA1C8, 0x2033, 0xA1C9, 0x2103, 0xA1CA, 0x212B, 0xA1CB, 0xFFE0, 0xA1CC, 0xFFE1, + 0xA1CD, 0xFFE5, 0xA1CE, 0x2642, 0xA1CF, 0x2640, 0xA1D0, 0x2220, 0xA1D1, 0x22A5, 0xA1D2, 0x2312, 0xA1D3, 0x2202, 0xA1D4, 0x2207, + 0xA1D5, 0x2261, 0xA1D6, 0x2252, 0xA1D7, 0x00A7, 0xA1D8, 0x203B, 0xA1D9, 0x2606, 0xA1DA, 0x2605, 0xA1DB, 0x25CB, 0xA1DC, 0x25CF, + 0xA1DD, 0x25CE, 0xA1DE, 0x25C7, 0xA1DF, 0x25C6, 0xA1E0, 0x25A1, 0xA1E1, 0x25A0, 0xA1E2, 0x25B3, 0xA1E3, 0x25B2, 0xA1E4, 0x25BD, + 0xA1E5, 0x25BC, 0xA1E6, 0x2192, 0xA1E7, 0x2190, 0xA1E8, 0x2191, 0xA1E9, 0x2193, 0xA1EA, 0x2194, 0xA1EB, 0x3013, 0xA1EC, 0x226A, + 0xA1ED, 0x226B, 0xA1EE, 0x221A, 0xA1EF, 0x223D, 0xA1F0, 0x221D, 0xA1F1, 0x2235, 0xA1F2, 0x222B, 0xA1F3, 0x222C, 0xA1F4, 0x2208, + 0xA1F5, 0x220B, 0xA1F6, 0x2286, 0xA1F7, 0x2287, 0xA1F8, 0x2282, 0xA1F9, 0x2283, 0xA1FA, 0x222A, 0xA1FB, 0x2229, 0xA1FC, 0x2227, + 0xA1FD, 0x2228, 0xA1FE, 0xFFE2, 0xA241, 0xC910, 0xA242, 0xC912, 0xA243, 0xC913, 0xA244, 0xC914, 0xA245, 0xC915, 0xA246, 0xC916, + 0xA247, 0xC917, 0xA248, 0xC919, 0xA249, 0xC91A, 0xA24A, 0xC91B, 0xA24B, 0xC91C, 0xA24C, 0xC91D, 0xA24D, 0xC91E, 0xA24E, 0xC91F, + 0xA24F, 0xC920, 0xA250, 0xC921, 0xA251, 0xC922, 0xA252, 0xC923, 0xA253, 0xC924, 0xA254, 0xC925, 0xA255, 0xC926, 0xA256, 0xC927, + 0xA257, 0xC928, 0xA258, 0xC929, 0xA259, 0xC92A, 0xA25A, 0xC92B, 0xA261, 0xC92D, 0xA262, 0xC92E, 0xA263, 0xC92F, 0xA264, 0xC930, + 0xA265, 0xC931, 0xA266, 0xC932, 0xA267, 0xC933, 0xA268, 0xC935, 0xA269, 0xC936, 0xA26A, 0xC937, 0xA26B, 0xC938, 0xA26C, 0xC939, + 0xA26D, 0xC93A, 0xA26E, 0xC93B, 0xA26F, 0xC93C, 0xA270, 0xC93D, 0xA271, 0xC93E, 0xA272, 0xC93F, 0xA273, 0xC940, 0xA274, 0xC941, + 0xA275, 0xC942, 0xA276, 0xC943, 0xA277, 0xC944, 0xA278, 0xC945, 0xA279, 0xC946, 0xA27A, 0xC947, 0xA281, 0xC948, 0xA282, 0xC949, + 0xA283, 0xC94A, 0xA284, 0xC94B, 0xA285, 0xC94C, 0xA286, 0xC94D, 0xA287, 0xC94E, 0xA288, 0xC94F, 0xA289, 0xC952, 0xA28A, 0xC953, + 0xA28B, 0xC955, 0xA28C, 0xC956, 0xA28D, 0xC957, 0xA28E, 0xC959, 0xA28F, 0xC95A, 0xA290, 0xC95B, 0xA291, 0xC95C, 0xA292, 0xC95D, + 0xA293, 0xC95E, 0xA294, 0xC95F, 0xA295, 0xC962, 0xA296, 0xC964, 0xA297, 0xC965, 0xA298, 0xC966, 0xA299, 0xC967, 0xA29A, 0xC968, + 0xA29B, 0xC969, 0xA29C, 0xC96A, 0xA29D, 0xC96B, 0xA29E, 0xC96D, 0xA29F, 0xC96E, 0xA2A0, 0xC96F, 0xA2A1, 0x21D2, 0xA2A2, 0x21D4, + 0xA2A3, 0x2200, 0xA2A4, 0x2203, 0xA2A5, 0x00B4, 0xA2A6, 0xFF5E, 0xA2A7, 0x02C7, 0xA2A8, 0x02D8, 0xA2A9, 0x02DD, 0xA2AA, 0x02DA, + 0xA2AB, 0x02D9, 0xA2AC, 0x00B8, 0xA2AD, 0x02DB, 0xA2AE, 0x00A1, 0xA2AF, 0x00BF, 0xA2B0, 0x02D0, 0xA2B1, 0x222E, 0xA2B2, 0x2211, + 0xA2B3, 0x220F, 0xA2B4, 0x00A4, 0xA2B5, 0x2109, 0xA2B6, 0x2030, 0xA2B7, 0x25C1, 0xA2B8, 0x25C0, 0xA2B9, 0x25B7, 0xA2BA, 0x25B6, + 0xA2BB, 0x2664, 0xA2BC, 0x2660, 0xA2BD, 0x2661, 0xA2BE, 0x2665, 0xA2BF, 0x2667, 0xA2C0, 0x2663, 0xA2C1, 0x2299, 0xA2C2, 0x25C8, + 0xA2C3, 0x25A3, 0xA2C4, 0x25D0, 0xA2C5, 0x25D1, 0xA2C6, 0x2592, 0xA2C7, 0x25A4, 0xA2C8, 0x25A5, 0xA2C9, 0x25A8, 0xA2CA, 0x25A7, + 0xA2CB, 0x25A6, 0xA2CC, 0x25A9, 0xA2CD, 0x2668, 0xA2CE, 0x260F, 0xA2CF, 0x260E, 0xA2D0, 0x261C, 0xA2D1, 0x261E, 0xA2D2, 0x00B6, + 0xA2D3, 0x2020, 0xA2D4, 0x2021, 0xA2D5, 0x2195, 0xA2D6, 0x2197, 0xA2D7, 0x2199, 0xA2D8, 0x2196, 0xA2D9, 0x2198, 0xA2DA, 0x266D, + 0xA2DB, 0x2669, 0xA2DC, 0x266A, 0xA2DD, 0x266C, 0xA2DE, 0x327F, 0xA2DF, 0x321C, 0xA2E0, 0x2116, 0xA2E1, 0x33C7, 0xA2E2, 0x2122, + 0xA2E3, 0x33C2, 0xA2E4, 0x33D8, 0xA2E5, 0x2121, 0xA2E6, 0x20AC, 0xA2E7, 0x00AE, 0xA341, 0xC971, 0xA342, 0xC972, 0xA343, 0xC973, + 0xA344, 0xC975, 0xA345, 0xC976, 0xA346, 0xC977, 0xA347, 0xC978, 0xA348, 0xC979, 0xA349, 0xC97A, 0xA34A, 0xC97B, 0xA34B, 0xC97D, + 0xA34C, 0xC97E, 0xA34D, 0xC97F, 0xA34E, 0xC980, 0xA34F, 0xC981, 0xA350, 0xC982, 0xA351, 0xC983, 0xA352, 0xC984, 0xA353, 0xC985, + 0xA354, 0xC986, 0xA355, 0xC987, 0xA356, 0xC98A, 0xA357, 0xC98B, 0xA358, 0xC98D, 0xA359, 0xC98E, 0xA35A, 0xC98F, 0xA361, 0xC991, + 0xA362, 0xC992, 0xA363, 0xC993, 0xA364, 0xC994, 0xA365, 0xC995, 0xA366, 0xC996, 0xA367, 0xC997, 0xA368, 0xC99A, 0xA369, 0xC99C, + 0xA36A, 0xC99E, 0xA36B, 0xC99F, 0xA36C, 0xC9A0, 0xA36D, 0xC9A1, 0xA36E, 0xC9A2, 0xA36F, 0xC9A3, 0xA370, 0xC9A4, 0xA371, 0xC9A5, + 0xA372, 0xC9A6, 0xA373, 0xC9A7, 0xA374, 0xC9A8, 0xA375, 0xC9A9, 0xA376, 0xC9AA, 0xA377, 0xC9AB, 0xA378, 0xC9AC, 0xA379, 0xC9AD, + 0xA37A, 0xC9AE, 0xA381, 0xC9AF, 0xA382, 0xC9B0, 0xA383, 0xC9B1, 0xA384, 0xC9B2, 0xA385, 0xC9B3, 0xA386, 0xC9B4, 0xA387, 0xC9B5, + 0xA388, 0xC9B6, 0xA389, 0xC9B7, 0xA38A, 0xC9B8, 0xA38B, 0xC9B9, 0xA38C, 0xC9BA, 0xA38D, 0xC9BB, 0xA38E, 0xC9BC, 0xA38F, 0xC9BD, + 0xA390, 0xC9BE, 0xA391, 0xC9BF, 0xA392, 0xC9C2, 0xA393, 0xC9C3, 0xA394, 0xC9C5, 0xA395, 0xC9C6, 0xA396, 0xC9C9, 0xA397, 0xC9CB, + 0xA398, 0xC9CC, 0xA399, 0xC9CD, 0xA39A, 0xC9CE, 0xA39B, 0xC9CF, 0xA39C, 0xC9D2, 0xA39D, 0xC9D4, 0xA39E, 0xC9D7, 0xA39F, 0xC9D8, + 0xA3A0, 0xC9DB, 0xA3A1, 0xFF01, 0xA3A2, 0xFF02, 0xA3A3, 0xFF03, 0xA3A4, 0xFF04, 0xA3A5, 0xFF05, 0xA3A6, 0xFF06, 0xA3A7, 0xFF07, + 0xA3A8, 0xFF08, 0xA3A9, 0xFF09, 0xA3AA, 0xFF0A, 0xA3AB, 0xFF0B, 0xA3AC, 0xFF0C, 0xA3AD, 0xFF0D, 0xA3AE, 0xFF0E, 0xA3AF, 0xFF0F, + 0xA3B0, 0xFF10, 0xA3B1, 0xFF11, 0xA3B2, 0xFF12, 0xA3B3, 0xFF13, 0xA3B4, 0xFF14, 0xA3B5, 0xFF15, 0xA3B6, 0xFF16, 0xA3B7, 0xFF17, + 0xA3B8, 0xFF18, 0xA3B9, 0xFF19, 0xA3BA, 0xFF1A, 0xA3BB, 0xFF1B, 0xA3BC, 0xFF1C, 0xA3BD, 0xFF1D, 0xA3BE, 0xFF1E, 0xA3BF, 0xFF1F, + 0xA3C0, 0xFF20, 0xA3C1, 0xFF21, 0xA3C2, 0xFF22, 0xA3C3, 0xFF23, 0xA3C4, 0xFF24, 0xA3C5, 0xFF25, 0xA3C6, 0xFF26, 0xA3C7, 0xFF27, + 0xA3C8, 0xFF28, 0xA3C9, 0xFF29, 0xA3CA, 0xFF2A, 0xA3CB, 0xFF2B, 0xA3CC, 0xFF2C, 0xA3CD, 0xFF2D, 0xA3CE, 0xFF2E, 0xA3CF, 0xFF2F, + 0xA3D0, 0xFF30, 0xA3D1, 0xFF31, 0xA3D2, 0xFF32, 0xA3D3, 0xFF33, 0xA3D4, 0xFF34, 0xA3D5, 0xFF35, 0xA3D6, 0xFF36, 0xA3D7, 0xFF37, + 0xA3D8, 0xFF38, 0xA3D9, 0xFF39, 0xA3DA, 0xFF3A, 0xA3DB, 0xFF3B, 0xA3DC, 0xFFE6, 0xA3DD, 0xFF3D, 0xA3DE, 0xFF3E, 0xA3DF, 0xFF3F, + 0xA3E0, 0xFF40, 0xA3E1, 0xFF41, 0xA3E2, 0xFF42, 0xA3E3, 0xFF43, 0xA3E4, 0xFF44, 0xA3E5, 0xFF45, 0xA3E6, 0xFF46, 0xA3E7, 0xFF47, + 0xA3E8, 0xFF48, 0xA3E9, 0xFF49, 0xA3EA, 0xFF4A, 0xA3EB, 0xFF4B, 0xA3EC, 0xFF4C, 0xA3ED, 0xFF4D, 0xA3EE, 0xFF4E, 0xA3EF, 0xFF4F, + 0xA3F0, 0xFF50, 0xA3F1, 0xFF51, 0xA3F2, 0xFF52, 0xA3F3, 0xFF53, 0xA3F4, 0xFF54, 0xA3F5, 0xFF55, 0xA3F6, 0xFF56, 0xA3F7, 0xFF57, + 0xA3F8, 0xFF58, 0xA3F9, 0xFF59, 0xA3FA, 0xFF5A, 0xA3FB, 0xFF5B, 0xA3FC, 0xFF5C, 0xA3FD, 0xFF5D, 0xA3FE, 0xFFE3, 0xA441, 0xC9DE, + 0xA442, 0xC9DF, 0xA443, 0xC9E1, 0xA444, 0xC9E3, 0xA445, 0xC9E5, 0xA446, 0xC9E6, 0xA447, 0xC9E8, 0xA448, 0xC9E9, 0xA449, 0xC9EA, + 0xA44A, 0xC9EB, 0xA44B, 0xC9EE, 0xA44C, 0xC9F2, 0xA44D, 0xC9F3, 0xA44E, 0xC9F4, 0xA44F, 0xC9F5, 0xA450, 0xC9F6, 0xA451, 0xC9F7, + 0xA452, 0xC9FA, 0xA453, 0xC9FB, 0xA454, 0xC9FD, 0xA455, 0xC9FE, 0xA456, 0xC9FF, 0xA457, 0xCA01, 0xA458, 0xCA02, 0xA459, 0xCA03, + 0xA45A, 0xCA04, 0xA461, 0xCA05, 0xA462, 0xCA06, 0xA463, 0xCA07, 0xA464, 0xCA0A, 0xA465, 0xCA0E, 0xA466, 0xCA0F, 0xA467, 0xCA10, + 0xA468, 0xCA11, 0xA469, 0xCA12, 0xA46A, 0xCA13, 0xA46B, 0xCA15, 0xA46C, 0xCA16, 0xA46D, 0xCA17, 0xA46E, 0xCA19, 0xA46F, 0xCA1A, + 0xA470, 0xCA1B, 0xA471, 0xCA1C, 0xA472, 0xCA1D, 0xA473, 0xCA1E, 0xA474, 0xCA1F, 0xA475, 0xCA20, 0xA476, 0xCA21, 0xA477, 0xCA22, + 0xA478, 0xCA23, 0xA479, 0xCA24, 0xA47A, 0xCA25, 0xA481, 0xCA26, 0xA482, 0xCA27, 0xA483, 0xCA28, 0xA484, 0xCA2A, 0xA485, 0xCA2B, + 0xA486, 0xCA2C, 0xA487, 0xCA2D, 0xA488, 0xCA2E, 0xA489, 0xCA2F, 0xA48A, 0xCA30, 0xA48B, 0xCA31, 0xA48C, 0xCA32, 0xA48D, 0xCA33, + 0xA48E, 0xCA34, 0xA48F, 0xCA35, 0xA490, 0xCA36, 0xA491, 0xCA37, 0xA492, 0xCA38, 0xA493, 0xCA39, 0xA494, 0xCA3A, 0xA495, 0xCA3B, + 0xA496, 0xCA3C, 0xA497, 0xCA3D, 0xA498, 0xCA3E, 0xA499, 0xCA3F, 0xA49A, 0xCA40, 0xA49B, 0xCA41, 0xA49C, 0xCA42, 0xA49D, 0xCA43, + 0xA49E, 0xCA44, 0xA49F, 0xCA45, 0xA4A0, 0xCA46, 0xA4A1, 0x3131, 0xA4A2, 0x3132, 0xA4A3, 0x3133, 0xA4A4, 0x3134, 0xA4A5, 0x3135, + 0xA4A6, 0x3136, 0xA4A7, 0x3137, 0xA4A8, 0x3138, 0xA4A9, 0x3139, 0xA4AA, 0x313A, 0xA4AB, 0x313B, 0xA4AC, 0x313C, 0xA4AD, 0x313D, + 0xA4AE, 0x313E, 0xA4AF, 0x313F, 0xA4B0, 0x3140, 0xA4B1, 0x3141, 0xA4B2, 0x3142, 0xA4B3, 0x3143, 0xA4B4, 0x3144, 0xA4B5, 0x3145, + 0xA4B6, 0x3146, 0xA4B7, 0x3147, 0xA4B8, 0x3148, 0xA4B9, 0x3149, 0xA4BA, 0x314A, 0xA4BB, 0x314B, 0xA4BC, 0x314C, 0xA4BD, 0x314D, + 0xA4BE, 0x314E, 0xA4BF, 0x314F, 0xA4C0, 0x3150, 0xA4C1, 0x3151, 0xA4C2, 0x3152, 0xA4C3, 0x3153, 0xA4C4, 0x3154, 0xA4C5, 0x3155, + 0xA4C6, 0x3156, 0xA4C7, 0x3157, 0xA4C8, 0x3158, 0xA4C9, 0x3159, 0xA4CA, 0x315A, 0xA4CB, 0x315B, 0xA4CC, 0x315C, 0xA4CD, 0x315D, + 0xA4CE, 0x315E, 0xA4CF, 0x315F, 0xA4D0, 0x3160, 0xA4D1, 0x3161, 0xA4D2, 0x3162, 0xA4D3, 0x3163, 0xA4D4, 0x3164, 0xA4D5, 0x3165, + 0xA4D6, 0x3166, 0xA4D7, 0x3167, 0xA4D8, 0x3168, 0xA4D9, 0x3169, 0xA4DA, 0x316A, 0xA4DB, 0x316B, 0xA4DC, 0x316C, 0xA4DD, 0x316D, + 0xA4DE, 0x316E, 0xA4DF, 0x316F, 0xA4E0, 0x3170, 0xA4E1, 0x3171, 0xA4E2, 0x3172, 0xA4E3, 0x3173, 0xA4E4, 0x3174, 0xA4E5, 0x3175, + 0xA4E6, 0x3176, 0xA4E7, 0x3177, 0xA4E8, 0x3178, 0xA4E9, 0x3179, 0xA4EA, 0x317A, 0xA4EB, 0x317B, 0xA4EC, 0x317C, 0xA4ED, 0x317D, + 0xA4EE, 0x317E, 0xA4EF, 0x317F, 0xA4F0, 0x3180, 0xA4F1, 0x3181, 0xA4F2, 0x3182, 0xA4F3, 0x3183, 0xA4F4, 0x3184, 0xA4F5, 0x3185, + 0xA4F6, 0x3186, 0xA4F7, 0x3187, 0xA4F8, 0x3188, 0xA4F9, 0x3189, 0xA4FA, 0x318A, 0xA4FB, 0x318B, 0xA4FC, 0x318C, 0xA4FD, 0x318D, + 0xA4FE, 0x318E, 0xA541, 0xCA47, 0xA542, 0xCA48, 0xA543, 0xCA49, 0xA544, 0xCA4A, 0xA545, 0xCA4B, 0xA546, 0xCA4E, 0xA547, 0xCA4F, + 0xA548, 0xCA51, 0xA549, 0xCA52, 0xA54A, 0xCA53, 0xA54B, 0xCA55, 0xA54C, 0xCA56, 0xA54D, 0xCA57, 0xA54E, 0xCA58, 0xA54F, 0xCA59, + 0xA550, 0xCA5A, 0xA551, 0xCA5B, 0xA552, 0xCA5E, 0xA553, 0xCA62, 0xA554, 0xCA63, 0xA555, 0xCA64, 0xA556, 0xCA65, 0xA557, 0xCA66, + 0xA558, 0xCA67, 0xA559, 0xCA69, 0xA55A, 0xCA6A, 0xA561, 0xCA6B, 0xA562, 0xCA6C, 0xA563, 0xCA6D, 0xA564, 0xCA6E, 0xA565, 0xCA6F, + 0xA566, 0xCA70, 0xA567, 0xCA71, 0xA568, 0xCA72, 0xA569, 0xCA73, 0xA56A, 0xCA74, 0xA56B, 0xCA75, 0xA56C, 0xCA76, 0xA56D, 0xCA77, + 0xA56E, 0xCA78, 0xA56F, 0xCA79, 0xA570, 0xCA7A, 0xA571, 0xCA7B, 0xA572, 0xCA7C, 0xA573, 0xCA7E, 0xA574, 0xCA7F, 0xA575, 0xCA80, + 0xA576, 0xCA81, 0xA577, 0xCA82, 0xA578, 0xCA83, 0xA579, 0xCA85, 0xA57A, 0xCA86, 0xA581, 0xCA87, 0xA582, 0xCA88, 0xA583, 0xCA89, + 0xA584, 0xCA8A, 0xA585, 0xCA8B, 0xA586, 0xCA8C, 0xA587, 0xCA8D, 0xA588, 0xCA8E, 0xA589, 0xCA8F, 0xA58A, 0xCA90, 0xA58B, 0xCA91, + 0xA58C, 0xCA92, 0xA58D, 0xCA93, 0xA58E, 0xCA94, 0xA58F, 0xCA95, 0xA590, 0xCA96, 0xA591, 0xCA97, 0xA592, 0xCA99, 0xA593, 0xCA9A, + 0xA594, 0xCA9B, 0xA595, 0xCA9C, 0xA596, 0xCA9D, 0xA597, 0xCA9E, 0xA598, 0xCA9F, 0xA599, 0xCAA0, 0xA59A, 0xCAA1, 0xA59B, 0xCAA2, + 0xA59C, 0xCAA3, 0xA59D, 0xCAA4, 0xA59E, 0xCAA5, 0xA59F, 0xCAA6, 0xA5A0, 0xCAA7, 0xA5A1, 0x2170, 0xA5A2, 0x2171, 0xA5A3, 0x2172, + 0xA5A4, 0x2173, 0xA5A5, 0x2174, 0xA5A6, 0x2175, 0xA5A7, 0x2176, 0xA5A8, 0x2177, 0xA5A9, 0x2178, 0xA5AA, 0x2179, 0xA5B0, 0x2160, + 0xA5B1, 0x2161, 0xA5B2, 0x2162, 0xA5B3, 0x2163, 0xA5B4, 0x2164, 0xA5B5, 0x2165, 0xA5B6, 0x2166, 0xA5B7, 0x2167, 0xA5B8, 0x2168, + 0xA5B9, 0x2169, 0xA5C1, 0x0391, 0xA5C2, 0x0392, 0xA5C3, 0x0393, 0xA5C4, 0x0394, 0xA5C5, 0x0395, 0xA5C6, 0x0396, 0xA5C7, 0x0397, + 0xA5C8, 0x0398, 0xA5C9, 0x0399, 0xA5CA, 0x039A, 0xA5CB, 0x039B, 0xA5CC, 0x039C, 0xA5CD, 0x039D, 0xA5CE, 0x039E, 0xA5CF, 0x039F, + 0xA5D0, 0x03A0, 0xA5D1, 0x03A1, 0xA5D2, 0x03A3, 0xA5D3, 0x03A4, 0xA5D4, 0x03A5, 0xA5D5, 0x03A6, 0xA5D6, 0x03A7, 0xA5D7, 0x03A8, + 0xA5D8, 0x03A9, 0xA5E1, 0x03B1, 0xA5E2, 0x03B2, 0xA5E3, 0x03B3, 0xA5E4, 0x03B4, 0xA5E5, 0x03B5, 0xA5E6, 0x03B6, 0xA5E7, 0x03B7, + 0xA5E8, 0x03B8, 0xA5E9, 0x03B9, 0xA5EA, 0x03BA, 0xA5EB, 0x03BB, 0xA5EC, 0x03BC, 0xA5ED, 0x03BD, 0xA5EE, 0x03BE, 0xA5EF, 0x03BF, + 0xA5F0, 0x03C0, 0xA5F1, 0x03C1, 0xA5F2, 0x03C3, 0xA5F3, 0x03C4, 0xA5F4, 0x03C5, 0xA5F5, 0x03C6, 0xA5F6, 0x03C7, 0xA5F7, 0x03C8, + 0xA5F8, 0x03C9, 0xA641, 0xCAA8, 0xA642, 0xCAA9, 0xA643, 0xCAAA, 0xA644, 0xCAAB, 0xA645, 0xCAAC, 0xA646, 0xCAAD, 0xA647, 0xCAAE, + 0xA648, 0xCAAF, 0xA649, 0xCAB0, 0xA64A, 0xCAB1, 0xA64B, 0xCAB2, 0xA64C, 0xCAB3, 0xA64D, 0xCAB4, 0xA64E, 0xCAB5, 0xA64F, 0xCAB6, + 0xA650, 0xCAB7, 0xA651, 0xCAB8, 0xA652, 0xCAB9, 0xA653, 0xCABA, 0xA654, 0xCABB, 0xA655, 0xCABE, 0xA656, 0xCABF, 0xA657, 0xCAC1, + 0xA658, 0xCAC2, 0xA659, 0xCAC3, 0xA65A, 0xCAC5, 0xA661, 0xCAC6, 0xA662, 0xCAC7, 0xA663, 0xCAC8, 0xA664, 0xCAC9, 0xA665, 0xCACA, + 0xA666, 0xCACB, 0xA667, 0xCACE, 0xA668, 0xCAD0, 0xA669, 0xCAD2, 0xA66A, 0xCAD4, 0xA66B, 0xCAD5, 0xA66C, 0xCAD6, 0xA66D, 0xCAD7, + 0xA66E, 0xCADA, 0xA66F, 0xCADB, 0xA670, 0xCADC, 0xA671, 0xCADD, 0xA672, 0xCADE, 0xA673, 0xCADF, 0xA674, 0xCAE1, 0xA675, 0xCAE2, + 0xA676, 0xCAE3, 0xA677, 0xCAE4, 0xA678, 0xCAE5, 0xA679, 0xCAE6, 0xA67A, 0xCAE7, 0xA681, 0xCAE8, 0xA682, 0xCAE9, 0xA683, 0xCAEA, + 0xA684, 0xCAEB, 0xA685, 0xCAED, 0xA686, 0xCAEE, 0xA687, 0xCAEF, 0xA688, 0xCAF0, 0xA689, 0xCAF1, 0xA68A, 0xCAF2, 0xA68B, 0xCAF3, + 0xA68C, 0xCAF5, 0xA68D, 0xCAF6, 0xA68E, 0xCAF7, 0xA68F, 0xCAF8, 0xA690, 0xCAF9, 0xA691, 0xCAFA, 0xA692, 0xCAFB, 0xA693, 0xCAFC, + 0xA694, 0xCAFD, 0xA695, 0xCAFE, 0xA696, 0xCAFF, 0xA697, 0xCB00, 0xA698, 0xCB01, 0xA699, 0xCB02, 0xA69A, 0xCB03, 0xA69B, 0xCB04, + 0xA69C, 0xCB05, 0xA69D, 0xCB06, 0xA69E, 0xCB07, 0xA69F, 0xCB09, 0xA6A0, 0xCB0A, 0xA6A1, 0x2500, 0xA6A2, 0x2502, 0xA6A3, 0x250C, + 0xA6A4, 0x2510, 0xA6A5, 0x2518, 0xA6A6, 0x2514, 0xA6A7, 0x251C, 0xA6A8, 0x252C, 0xA6A9, 0x2524, 0xA6AA, 0x2534, 0xA6AB, 0x253C, + 0xA6AC, 0x2501, 0xA6AD, 0x2503, 0xA6AE, 0x250F, 0xA6AF, 0x2513, 0xA6B0, 0x251B, 0xA6B1, 0x2517, 0xA6B2, 0x2523, 0xA6B3, 0x2533, + 0xA6B4, 0x252B, 0xA6B5, 0x253B, 0xA6B6, 0x254B, 0xA6B7, 0x2520, 0xA6B8, 0x252F, 0xA6B9, 0x2528, 0xA6BA, 0x2537, 0xA6BB, 0x253F, + 0xA6BC, 0x251D, 0xA6BD, 0x2530, 0xA6BE, 0x2525, 0xA6BF, 0x2538, 0xA6C0, 0x2542, 0xA6C1, 0x2512, 0xA6C2, 0x2511, 0xA6C3, 0x251A, + 0xA6C4, 0x2519, 0xA6C5, 0x2516, 0xA6C6, 0x2515, 0xA6C7, 0x250E, 0xA6C8, 0x250D, 0xA6C9, 0x251E, 0xA6CA, 0x251F, 0xA6CB, 0x2521, + 0xA6CC, 0x2522, 0xA6CD, 0x2526, 0xA6CE, 0x2527, 0xA6CF, 0x2529, 0xA6D0, 0x252A, 0xA6D1, 0x252D, 0xA6D2, 0x252E, 0xA6D3, 0x2531, + 0xA6D4, 0x2532, 0xA6D5, 0x2535, 0xA6D6, 0x2536, 0xA6D7, 0x2539, 0xA6D8, 0x253A, 0xA6D9, 0x253D, 0xA6DA, 0x253E, 0xA6DB, 0x2540, + 0xA6DC, 0x2541, 0xA6DD, 0x2543, 0xA6DE, 0x2544, 0xA6DF, 0x2545, 0xA6E0, 0x2546, 0xA6E1, 0x2547, 0xA6E2, 0x2548, 0xA6E3, 0x2549, + 0xA6E4, 0x254A, 0xA741, 0xCB0B, 0xA742, 0xCB0C, 0xA743, 0xCB0D, 0xA744, 0xCB0E, 0xA745, 0xCB0F, 0xA746, 0xCB11, 0xA747, 0xCB12, + 0xA748, 0xCB13, 0xA749, 0xCB15, 0xA74A, 0xCB16, 0xA74B, 0xCB17, 0xA74C, 0xCB19, 0xA74D, 0xCB1A, 0xA74E, 0xCB1B, 0xA74F, 0xCB1C, + 0xA750, 0xCB1D, 0xA751, 0xCB1E, 0xA752, 0xCB1F, 0xA753, 0xCB22, 0xA754, 0xCB23, 0xA755, 0xCB24, 0xA756, 0xCB25, 0xA757, 0xCB26, + 0xA758, 0xCB27, 0xA759, 0xCB28, 0xA75A, 0xCB29, 0xA761, 0xCB2A, 0xA762, 0xCB2B, 0xA763, 0xCB2C, 0xA764, 0xCB2D, 0xA765, 0xCB2E, + 0xA766, 0xCB2F, 0xA767, 0xCB30, 0xA768, 0xCB31, 0xA769, 0xCB32, 0xA76A, 0xCB33, 0xA76B, 0xCB34, 0xA76C, 0xCB35, 0xA76D, 0xCB36, + 0xA76E, 0xCB37, 0xA76F, 0xCB38, 0xA770, 0xCB39, 0xA771, 0xCB3A, 0xA772, 0xCB3B, 0xA773, 0xCB3C, 0xA774, 0xCB3D, 0xA775, 0xCB3E, + 0xA776, 0xCB3F, 0xA777, 0xCB40, 0xA778, 0xCB42, 0xA779, 0xCB43, 0xA77A, 0xCB44, 0xA781, 0xCB45, 0xA782, 0xCB46, 0xA783, 0xCB47, + 0xA784, 0xCB4A, 0xA785, 0xCB4B, 0xA786, 0xCB4D, 0xA787, 0xCB4E, 0xA788, 0xCB4F, 0xA789, 0xCB51, 0xA78A, 0xCB52, 0xA78B, 0xCB53, + 0xA78C, 0xCB54, 0xA78D, 0xCB55, 0xA78E, 0xCB56, 0xA78F, 0xCB57, 0xA790, 0xCB5A, 0xA791, 0xCB5B, 0xA792, 0xCB5C, 0xA793, 0xCB5E, + 0xA794, 0xCB5F, 0xA795, 0xCB60, 0xA796, 0xCB61, 0xA797, 0xCB62, 0xA798, 0xCB63, 0xA799, 0xCB65, 0xA79A, 0xCB66, 0xA79B, 0xCB67, + 0xA79C, 0xCB68, 0xA79D, 0xCB69, 0xA79E, 0xCB6A, 0xA79F, 0xCB6B, 0xA7A0, 0xCB6C, 0xA7A1, 0x3395, 0xA7A2, 0x3396, 0xA7A3, 0x3397, + 0xA7A4, 0x2113, 0xA7A5, 0x3398, 0xA7A6, 0x33C4, 0xA7A7, 0x33A3, 0xA7A8, 0x33A4, 0xA7A9, 0x33A5, 0xA7AA, 0x33A6, 0xA7AB, 0x3399, + 0xA7AC, 0x339A, 0xA7AD, 0x339B, 0xA7AE, 0x339C, 0xA7AF, 0x339D, 0xA7B0, 0x339E, 0xA7B1, 0x339F, 0xA7B2, 0x33A0, 0xA7B3, 0x33A1, + 0xA7B4, 0x33A2, 0xA7B5, 0x33CA, 0xA7B6, 0x338D, 0xA7B7, 0x338E, 0xA7B8, 0x338F, 0xA7B9, 0x33CF, 0xA7BA, 0x3388, 0xA7BB, 0x3389, + 0xA7BC, 0x33C8, 0xA7BD, 0x33A7, 0xA7BE, 0x33A8, 0xA7BF, 0x33B0, 0xA7C0, 0x33B1, 0xA7C1, 0x33B2, 0xA7C2, 0x33B3, 0xA7C3, 0x33B4, + 0xA7C4, 0x33B5, 0xA7C5, 0x33B6, 0xA7C6, 0x33B7, 0xA7C7, 0x33B8, 0xA7C8, 0x33B9, 0xA7C9, 0x3380, 0xA7CA, 0x3381, 0xA7CB, 0x3382, + 0xA7CC, 0x3383, 0xA7CD, 0x3384, 0xA7CE, 0x33BA, 0xA7CF, 0x33BB, 0xA7D0, 0x33BC, 0xA7D1, 0x33BD, 0xA7D2, 0x33BE, 0xA7D3, 0x33BF, + 0xA7D4, 0x3390, 0xA7D5, 0x3391, 0xA7D6, 0x3392, 0xA7D7, 0x3393, 0xA7D8, 0x3394, 0xA7D9, 0x2126, 0xA7DA, 0x33C0, 0xA7DB, 0x33C1, + 0xA7DC, 0x338A, 0xA7DD, 0x338B, 0xA7DE, 0x338C, 0xA7DF, 0x33D6, 0xA7E0, 0x33C5, 0xA7E1, 0x33AD, 0xA7E2, 0x33AE, 0xA7E3, 0x33AF, + 0xA7E4, 0x33DB, 0xA7E5, 0x33A9, 0xA7E6, 0x33AA, 0xA7E7, 0x33AB, 0xA7E8, 0x33AC, 0xA7E9, 0x33DD, 0xA7EA, 0x33D0, 0xA7EB, 0x33D3, + 0xA7EC, 0x33C3, 0xA7ED, 0x33C9, 0xA7EE, 0x33DC, 0xA7EF, 0x33C6, 0xA841, 0xCB6D, 0xA842, 0xCB6E, 0xA843, 0xCB6F, 0xA844, 0xCB70, + 0xA845, 0xCB71, 0xA846, 0xCB72, 0xA847, 0xCB73, 0xA848, 0xCB74, 0xA849, 0xCB75, 0xA84A, 0xCB76, 0xA84B, 0xCB77, 0xA84C, 0xCB7A, + 0xA84D, 0xCB7B, 0xA84E, 0xCB7C, 0xA84F, 0xCB7D, 0xA850, 0xCB7E, 0xA851, 0xCB7F, 0xA852, 0xCB80, 0xA853, 0xCB81, 0xA854, 0xCB82, + 0xA855, 0xCB83, 0xA856, 0xCB84, 0xA857, 0xCB85, 0xA858, 0xCB86, 0xA859, 0xCB87, 0xA85A, 0xCB88, 0xA861, 0xCB89, 0xA862, 0xCB8A, + 0xA863, 0xCB8B, 0xA864, 0xCB8C, 0xA865, 0xCB8D, 0xA866, 0xCB8E, 0xA867, 0xCB8F, 0xA868, 0xCB90, 0xA869, 0xCB91, 0xA86A, 0xCB92, + 0xA86B, 0xCB93, 0xA86C, 0xCB94, 0xA86D, 0xCB95, 0xA86E, 0xCB96, 0xA86F, 0xCB97, 0xA870, 0xCB98, 0xA871, 0xCB99, 0xA872, 0xCB9A, + 0xA873, 0xCB9B, 0xA874, 0xCB9D, 0xA875, 0xCB9E, 0xA876, 0xCB9F, 0xA877, 0xCBA0, 0xA878, 0xCBA1, 0xA879, 0xCBA2, 0xA87A, 0xCBA3, + 0xA881, 0xCBA4, 0xA882, 0xCBA5, 0xA883, 0xCBA6, 0xA884, 0xCBA7, 0xA885, 0xCBA8, 0xA886, 0xCBA9, 0xA887, 0xCBAA, 0xA888, 0xCBAB, + 0xA889, 0xCBAC, 0xA88A, 0xCBAD, 0xA88B, 0xCBAE, 0xA88C, 0xCBAF, 0xA88D, 0xCBB0, 0xA88E, 0xCBB1, 0xA88F, 0xCBB2, 0xA890, 0xCBB3, + 0xA891, 0xCBB4, 0xA892, 0xCBB5, 0xA893, 0xCBB6, 0xA894, 0xCBB7, 0xA895, 0xCBB9, 0xA896, 0xCBBA, 0xA897, 0xCBBB, 0xA898, 0xCBBC, + 0xA899, 0xCBBD, 0xA89A, 0xCBBE, 0xA89B, 0xCBBF, 0xA89C, 0xCBC0, 0xA89D, 0xCBC1, 0xA89E, 0xCBC2, 0xA89F, 0xCBC3, 0xA8A0, 0xCBC4, + 0xA8A1, 0x00C6, 0xA8A2, 0x00D0, 0xA8A3, 0x00AA, 0xA8A4, 0x0126, 0xA8A6, 0x0132, 0xA8A8, 0x013F, 0xA8A9, 0x0141, 0xA8AA, 0x00D8, + 0xA8AB, 0x0152, 0xA8AC, 0x00BA, 0xA8AD, 0x00DE, 0xA8AE, 0x0166, 0xA8AF, 0x014A, 0xA8B1, 0x3260, 0xA8B2, 0x3261, 0xA8B3, 0x3262, + 0xA8B4, 0x3263, 0xA8B5, 0x3264, 0xA8B6, 0x3265, 0xA8B7, 0x3266, 0xA8B8, 0x3267, 0xA8B9, 0x3268, 0xA8BA, 0x3269, 0xA8BB, 0x326A, + 0xA8BC, 0x326B, 0xA8BD, 0x326C, 0xA8BE, 0x326D, 0xA8BF, 0x326E, 0xA8C0, 0x326F, 0xA8C1, 0x3270, 0xA8C2, 0x3271, 0xA8C3, 0x3272, + 0xA8C4, 0x3273, 0xA8C5, 0x3274, 0xA8C6, 0x3275, 0xA8C7, 0x3276, 0xA8C8, 0x3277, 0xA8C9, 0x3278, 0xA8CA, 0x3279, 0xA8CB, 0x327A, + 0xA8CC, 0x327B, 0xA8CD, 0x24D0, 0xA8CE, 0x24D1, 0xA8CF, 0x24D2, 0xA8D0, 0x24D3, 0xA8D1, 0x24D4, 0xA8D2, 0x24D5, 0xA8D3, 0x24D6, + 0xA8D4, 0x24D7, 0xA8D5, 0x24D8, 0xA8D6, 0x24D9, 0xA8D7, 0x24DA, 0xA8D8, 0x24DB, 0xA8D9, 0x24DC, 0xA8DA, 0x24DD, 0xA8DB, 0x24DE, + 0xA8DC, 0x24DF, 0xA8DD, 0x24E0, 0xA8DE, 0x24E1, 0xA8DF, 0x24E2, 0xA8E0, 0x24E3, 0xA8E1, 0x24E4, 0xA8E2, 0x24E5, 0xA8E3, 0x24E6, + 0xA8E4, 0x24E7, 0xA8E5, 0x24E8, 0xA8E6, 0x24E9, 0xA8E7, 0x2460, 0xA8E8, 0x2461, 0xA8E9, 0x2462, 0xA8EA, 0x2463, 0xA8EB, 0x2464, + 0xA8EC, 0x2465, 0xA8ED, 0x2466, 0xA8EE, 0x2467, 0xA8EF, 0x2468, 0xA8F0, 0x2469, 0xA8F1, 0x246A, 0xA8F2, 0x246B, 0xA8F3, 0x246C, + 0xA8F4, 0x246D, 0xA8F5, 0x246E, 0xA8F6, 0x00BD, 0xA8F7, 0x2153, 0xA8F8, 0x2154, 0xA8F9, 0x00BC, 0xA8FA, 0x00BE, 0xA8FB, 0x215B, + 0xA8FC, 0x215C, 0xA8FD, 0x215D, 0xA8FE, 0x215E, 0xA941, 0xCBC5, 0xA942, 0xCBC6, 0xA943, 0xCBC7, 0xA944, 0xCBC8, 0xA945, 0xCBC9, + 0xA946, 0xCBCA, 0xA947, 0xCBCB, 0xA948, 0xCBCC, 0xA949, 0xCBCD, 0xA94A, 0xCBCE, 0xA94B, 0xCBCF, 0xA94C, 0xCBD0, 0xA94D, 0xCBD1, + 0xA94E, 0xCBD2, 0xA94F, 0xCBD3, 0xA950, 0xCBD5, 0xA951, 0xCBD6, 0xA952, 0xCBD7, 0xA953, 0xCBD8, 0xA954, 0xCBD9, 0xA955, 0xCBDA, + 0xA956, 0xCBDB, 0xA957, 0xCBDC, 0xA958, 0xCBDD, 0xA959, 0xCBDE, 0xA95A, 0xCBDF, 0xA961, 0xCBE0, 0xA962, 0xCBE1, 0xA963, 0xCBE2, + 0xA964, 0xCBE3, 0xA965, 0xCBE5, 0xA966, 0xCBE6, 0xA967, 0xCBE8, 0xA968, 0xCBEA, 0xA969, 0xCBEB, 0xA96A, 0xCBEC, 0xA96B, 0xCBED, + 0xA96C, 0xCBEE, 0xA96D, 0xCBEF, 0xA96E, 0xCBF0, 0xA96F, 0xCBF1, 0xA970, 0xCBF2, 0xA971, 0xCBF3, 0xA972, 0xCBF4, 0xA973, 0xCBF5, + 0xA974, 0xCBF6, 0xA975, 0xCBF7, 0xA976, 0xCBF8, 0xA977, 0xCBF9, 0xA978, 0xCBFA, 0xA979, 0xCBFB, 0xA97A, 0xCBFC, 0xA981, 0xCBFD, + 0xA982, 0xCBFE, 0xA983, 0xCBFF, 0xA984, 0xCC00, 0xA985, 0xCC01, 0xA986, 0xCC02, 0xA987, 0xCC03, 0xA988, 0xCC04, 0xA989, 0xCC05, + 0xA98A, 0xCC06, 0xA98B, 0xCC07, 0xA98C, 0xCC08, 0xA98D, 0xCC09, 0xA98E, 0xCC0A, 0xA98F, 0xCC0B, 0xA990, 0xCC0E, 0xA991, 0xCC0F, + 0xA992, 0xCC11, 0xA993, 0xCC12, 0xA994, 0xCC13, 0xA995, 0xCC15, 0xA996, 0xCC16, 0xA997, 0xCC17, 0xA998, 0xCC18, 0xA999, 0xCC19, + 0xA99A, 0xCC1A, 0xA99B, 0xCC1B, 0xA99C, 0xCC1E, 0xA99D, 0xCC1F, 0xA99E, 0xCC20, 0xA99F, 0xCC23, 0xA9A0, 0xCC24, 0xA9A1, 0x00E6, + 0xA9A2, 0x0111, 0xA9A3, 0x00F0, 0xA9A4, 0x0127, 0xA9A5, 0x0131, 0xA9A6, 0x0133, 0xA9A7, 0x0138, 0xA9A8, 0x0140, 0xA9A9, 0x0142, + 0xA9AA, 0x00F8, 0xA9AB, 0x0153, 0xA9AC, 0x00DF, 0xA9AD, 0x00FE, 0xA9AE, 0x0167, 0xA9AF, 0x014B, 0xA9B0, 0x0149, 0xA9B1, 0x3200, + 0xA9B2, 0x3201, 0xA9B3, 0x3202, 0xA9B4, 0x3203, 0xA9B5, 0x3204, 0xA9B6, 0x3205, 0xA9B7, 0x3206, 0xA9B8, 0x3207, 0xA9B9, 0x3208, + 0xA9BA, 0x3209, 0xA9BB, 0x320A, 0xA9BC, 0x320B, 0xA9BD, 0x320C, 0xA9BE, 0x320D, 0xA9BF, 0x320E, 0xA9C0, 0x320F, 0xA9C1, 0x3210, + 0xA9C2, 0x3211, 0xA9C3, 0x3212, 0xA9C4, 0x3213, 0xA9C5, 0x3214, 0xA9C6, 0x3215, 0xA9C7, 0x3216, 0xA9C8, 0x3217, 0xA9C9, 0x3218, + 0xA9CA, 0x3219, 0xA9CB, 0x321A, 0xA9CC, 0x321B, 0xA9CD, 0x249C, 0xA9CE, 0x249D, 0xA9CF, 0x249E, 0xA9D0, 0x249F, 0xA9D1, 0x24A0, + 0xA9D2, 0x24A1, 0xA9D3, 0x24A2, 0xA9D4, 0x24A3, 0xA9D5, 0x24A4, 0xA9D6, 0x24A5, 0xA9D7, 0x24A6, 0xA9D8, 0x24A7, 0xA9D9, 0x24A8, + 0xA9DA, 0x24A9, 0xA9DB, 0x24AA, 0xA9DC, 0x24AB, 0xA9DD, 0x24AC, 0xA9DE, 0x24AD, 0xA9DF, 0x24AE, 0xA9E0, 0x24AF, 0xA9E1, 0x24B0, + 0xA9E2, 0x24B1, 0xA9E3, 0x24B2, 0xA9E4, 0x24B3, 0xA9E5, 0x24B4, 0xA9E6, 0x24B5, 0xA9E7, 0x2474, 0xA9E8, 0x2475, 0xA9E9, 0x2476, + 0xA9EA, 0x2477, 0xA9EB, 0x2478, 0xA9EC, 0x2479, 0xA9ED, 0x247A, 0xA9EE, 0x247B, 0xA9EF, 0x247C, 0xA9F0, 0x247D, 0xA9F1, 0x247E, + 0xA9F2, 0x247F, 0xA9F3, 0x2480, 0xA9F4, 0x2481, 0xA9F5, 0x2482, 0xA9F6, 0x00B9, 0xA9F7, 0x00B2, 0xA9F8, 0x00B3, 0xA9F9, 0x2074, + 0xA9FA, 0x207F, 0xA9FB, 0x2081, 0xA9FC, 0x2082, 0xA9FD, 0x2083, 0xA9FE, 0x2084, 0xAA41, 0xCC25, 0xAA42, 0xCC26, 0xAA43, 0xCC2A, + 0xAA44, 0xCC2B, 0xAA45, 0xCC2D, 0xAA46, 0xCC2F, 0xAA47, 0xCC31, 0xAA48, 0xCC32, 0xAA49, 0xCC33, 0xAA4A, 0xCC34, 0xAA4B, 0xCC35, + 0xAA4C, 0xCC36, 0xAA4D, 0xCC37, 0xAA4E, 0xCC3A, 0xAA4F, 0xCC3F, 0xAA50, 0xCC40, 0xAA51, 0xCC41, 0xAA52, 0xCC42, 0xAA53, 0xCC43, + 0xAA54, 0xCC46, 0xAA55, 0xCC47, 0xAA56, 0xCC49, 0xAA57, 0xCC4A, 0xAA58, 0xCC4B, 0xAA59, 0xCC4D, 0xAA5A, 0xCC4E, 0xAA61, 0xCC4F, + 0xAA62, 0xCC50, 0xAA63, 0xCC51, 0xAA64, 0xCC52, 0xAA65, 0xCC53, 0xAA66, 0xCC56, 0xAA67, 0xCC5A, 0xAA68, 0xCC5B, 0xAA69, 0xCC5C, + 0xAA6A, 0xCC5D, 0xAA6B, 0xCC5E, 0xAA6C, 0xCC5F, 0xAA6D, 0xCC61, 0xAA6E, 0xCC62, 0xAA6F, 0xCC63, 0xAA70, 0xCC65, 0xAA71, 0xCC67, + 0xAA72, 0xCC69, 0xAA73, 0xCC6A, 0xAA74, 0xCC6B, 0xAA75, 0xCC6C, 0xAA76, 0xCC6D, 0xAA77, 0xCC6E, 0xAA78, 0xCC6F, 0xAA79, 0xCC71, + 0xAA7A, 0xCC72, 0xAA81, 0xCC73, 0xAA82, 0xCC74, 0xAA83, 0xCC76, 0xAA84, 0xCC77, 0xAA85, 0xCC78, 0xAA86, 0xCC79, 0xAA87, 0xCC7A, + 0xAA88, 0xCC7B, 0xAA89, 0xCC7C, 0xAA8A, 0xCC7D, 0xAA8B, 0xCC7E, 0xAA8C, 0xCC7F, 0xAA8D, 0xCC80, 0xAA8E, 0xCC81, 0xAA8F, 0xCC82, + 0xAA90, 0xCC83, 0xAA91, 0xCC84, 0xAA92, 0xCC85, 0xAA93, 0xCC86, 0xAA94, 0xCC87, 0xAA95, 0xCC88, 0xAA96, 0xCC89, 0xAA97, 0xCC8A, + 0xAA98, 0xCC8B, 0xAA99, 0xCC8C, 0xAA9A, 0xCC8D, 0xAA9B, 0xCC8E, 0xAA9C, 0xCC8F, 0xAA9D, 0xCC90, 0xAA9E, 0xCC91, 0xAA9F, 0xCC92, + 0xAAA0, 0xCC93, 0xAAA1, 0x3041, 0xAAA2, 0x3042, 0xAAA3, 0x3043, 0xAAA4, 0x3044, 0xAAA5, 0x3045, 0xAAA6, 0x3046, 0xAAA7, 0x3047, + 0xAAA8, 0x3048, 0xAAA9, 0x3049, 0xAAAA, 0x304A, 0xAAAB, 0x304B, 0xAAAC, 0x304C, 0xAAAD, 0x304D, 0xAAAE, 0x304E, 0xAAAF, 0x304F, + 0xAAB0, 0x3050, 0xAAB1, 0x3051, 0xAAB2, 0x3052, 0xAAB3, 0x3053, 0xAAB4, 0x3054, 0xAAB5, 0x3055, 0xAAB6, 0x3056, 0xAAB7, 0x3057, + 0xAAB8, 0x3058, 0xAAB9, 0x3059, 0xAABA, 0x305A, 0xAABB, 0x305B, 0xAABC, 0x305C, 0xAABD, 0x305D, 0xAABE, 0x305E, 0xAABF, 0x305F, + 0xAAC0, 0x3060, 0xAAC1, 0x3061, 0xAAC2, 0x3062, 0xAAC3, 0x3063, 0xAAC4, 0x3064, 0xAAC5, 0x3065, 0xAAC6, 0x3066, 0xAAC7, 0x3067, + 0xAAC8, 0x3068, 0xAAC9, 0x3069, 0xAACA, 0x306A, 0xAACB, 0x306B, 0xAACC, 0x306C, 0xAACD, 0x306D, 0xAACE, 0x306E, 0xAACF, 0x306F, + 0xAAD0, 0x3070, 0xAAD1, 0x3071, 0xAAD2, 0x3072, 0xAAD3, 0x3073, 0xAAD4, 0x3074, 0xAAD5, 0x3075, 0xAAD6, 0x3076, 0xAAD7, 0x3077, + 0xAAD8, 0x3078, 0xAAD9, 0x3079, 0xAADA, 0x307A, 0xAADB, 0x307B, 0xAADC, 0x307C, 0xAADD, 0x307D, 0xAADE, 0x307E, 0xAADF, 0x307F, + 0xAAE0, 0x3080, 0xAAE1, 0x3081, 0xAAE2, 0x3082, 0xAAE3, 0x3083, 0xAAE4, 0x3084, 0xAAE5, 0x3085, 0xAAE6, 0x3086, 0xAAE7, 0x3087, + 0xAAE8, 0x3088, 0xAAE9, 0x3089, 0xAAEA, 0x308A, 0xAAEB, 0x308B, 0xAAEC, 0x308C, 0xAAED, 0x308D, 0xAAEE, 0x308E, 0xAAEF, 0x308F, + 0xAAF0, 0x3090, 0xAAF1, 0x3091, 0xAAF2, 0x3092, 0xAAF3, 0x3093, 0xAB41, 0xCC94, 0xAB42, 0xCC95, 0xAB43, 0xCC96, 0xAB44, 0xCC97, + 0xAB45, 0xCC9A, 0xAB46, 0xCC9B, 0xAB47, 0xCC9D, 0xAB48, 0xCC9E, 0xAB49, 0xCC9F, 0xAB4A, 0xCCA1, 0xAB4B, 0xCCA2, 0xAB4C, 0xCCA3, + 0xAB4D, 0xCCA4, 0xAB4E, 0xCCA5, 0xAB4F, 0xCCA6, 0xAB50, 0xCCA7, 0xAB51, 0xCCAA, 0xAB52, 0xCCAE, 0xAB53, 0xCCAF, 0xAB54, 0xCCB0, + 0xAB55, 0xCCB1, 0xAB56, 0xCCB2, 0xAB57, 0xCCB3, 0xAB58, 0xCCB6, 0xAB59, 0xCCB7, 0xAB5A, 0xCCB9, 0xAB61, 0xCCBA, 0xAB62, 0xCCBB, + 0xAB63, 0xCCBD, 0xAB64, 0xCCBE, 0xAB65, 0xCCBF, 0xAB66, 0xCCC0, 0xAB67, 0xCCC1, 0xAB68, 0xCCC2, 0xAB69, 0xCCC3, 0xAB6A, 0xCCC6, + 0xAB6B, 0xCCC8, 0xAB6C, 0xCCCA, 0xAB6D, 0xCCCB, 0xAB6E, 0xCCCC, 0xAB6F, 0xCCCD, 0xAB70, 0xCCCE, 0xAB71, 0xCCCF, 0xAB72, 0xCCD1, + 0xAB73, 0xCCD2, 0xAB74, 0xCCD3, 0xAB75, 0xCCD5, 0xAB76, 0xCCD6, 0xAB77, 0xCCD7, 0xAB78, 0xCCD8, 0xAB79, 0xCCD9, 0xAB7A, 0xCCDA, + 0xAB81, 0xCCDB, 0xAB82, 0xCCDC, 0xAB83, 0xCCDD, 0xAB84, 0xCCDE, 0xAB85, 0xCCDF, 0xAB86, 0xCCE0, 0xAB87, 0xCCE1, 0xAB88, 0xCCE2, + 0xAB89, 0xCCE3, 0xAB8A, 0xCCE5, 0xAB8B, 0xCCE6, 0xAB8C, 0xCCE7, 0xAB8D, 0xCCE8, 0xAB8E, 0xCCE9, 0xAB8F, 0xCCEA, 0xAB90, 0xCCEB, + 0xAB91, 0xCCED, 0xAB92, 0xCCEE, 0xAB93, 0xCCEF, 0xAB94, 0xCCF1, 0xAB95, 0xCCF2, 0xAB96, 0xCCF3, 0xAB97, 0xCCF4, 0xAB98, 0xCCF5, + 0xAB99, 0xCCF6, 0xAB9A, 0xCCF7, 0xAB9B, 0xCCF8, 0xAB9C, 0xCCF9, 0xAB9D, 0xCCFA, 0xAB9E, 0xCCFB, 0xAB9F, 0xCCFC, 0xABA0, 0xCCFD, + 0xABA1, 0x30A1, 0xABA2, 0x30A2, 0xABA3, 0x30A3, 0xABA4, 0x30A4, 0xABA5, 0x30A5, 0xABA6, 0x30A6, 0xABA7, 0x30A7, 0xABA8, 0x30A8, + 0xABA9, 0x30A9, 0xABAA, 0x30AA, 0xABAB, 0x30AB, 0xABAC, 0x30AC, 0xABAD, 0x30AD, 0xABAE, 0x30AE, 0xABAF, 0x30AF, 0xABB0, 0x30B0, + 0xABB1, 0x30B1, 0xABB2, 0x30B2, 0xABB3, 0x30B3, 0xABB4, 0x30B4, 0xABB5, 0x30B5, 0xABB6, 0x30B6, 0xABB7, 0x30B7, 0xABB8, 0x30B8, + 0xABB9, 0x30B9, 0xABBA, 0x30BA, 0xABBB, 0x30BB, 0xABBC, 0x30BC, 0xABBD, 0x30BD, 0xABBE, 0x30BE, 0xABBF, 0x30BF, 0xABC0, 0x30C0, + 0xABC1, 0x30C1, 0xABC2, 0x30C2, 0xABC3, 0x30C3, 0xABC4, 0x30C4, 0xABC5, 0x30C5, 0xABC6, 0x30C6, 0xABC7, 0x30C7, 0xABC8, 0x30C8, + 0xABC9, 0x30C9, 0xABCA, 0x30CA, 0xABCB, 0x30CB, 0xABCC, 0x30CC, 0xABCD, 0x30CD, 0xABCE, 0x30CE, 0xABCF, 0x30CF, 0xABD0, 0x30D0, + 0xABD1, 0x30D1, 0xABD2, 0x30D2, 0xABD3, 0x30D3, 0xABD4, 0x30D4, 0xABD5, 0x30D5, 0xABD6, 0x30D6, 0xABD7, 0x30D7, 0xABD8, 0x30D8, + 0xABD9, 0x30D9, 0xABDA, 0x30DA, 0xABDB, 0x30DB, 0xABDC, 0x30DC, 0xABDD, 0x30DD, 0xABDE, 0x30DE, 0xABDF, 0x30DF, 0xABE0, 0x30E0, + 0xABE1, 0x30E1, 0xABE2, 0x30E2, 0xABE3, 0x30E3, 0xABE4, 0x30E4, 0xABE5, 0x30E5, 0xABE6, 0x30E6, 0xABE7, 0x30E7, 0xABE8, 0x30E8, + 0xABE9, 0x30E9, 0xABEA, 0x30EA, 0xABEB, 0x30EB, 0xABEC, 0x30EC, 0xABED, 0x30ED, 0xABEE, 0x30EE, 0xABEF, 0x30EF, 0xABF0, 0x30F0, + 0xABF1, 0x30F1, 0xABF2, 0x30F2, 0xABF3, 0x30F3, 0xABF4, 0x30F4, 0xABF5, 0x30F5, 0xABF6, 0x30F6, 0xAC41, 0xCCFE, 0xAC42, 0xCCFF, + 0xAC43, 0xCD00, 0xAC44, 0xCD02, 0xAC45, 0xCD03, 0xAC46, 0xCD04, 0xAC47, 0xCD05, 0xAC48, 0xCD06, 0xAC49, 0xCD07, 0xAC4A, 0xCD0A, + 0xAC4B, 0xCD0B, 0xAC4C, 0xCD0D, 0xAC4D, 0xCD0E, 0xAC4E, 0xCD0F, 0xAC4F, 0xCD11, 0xAC50, 0xCD12, 0xAC51, 0xCD13, 0xAC52, 0xCD14, + 0xAC53, 0xCD15, 0xAC54, 0xCD16, 0xAC55, 0xCD17, 0xAC56, 0xCD1A, 0xAC57, 0xCD1C, 0xAC58, 0xCD1E, 0xAC59, 0xCD1F, 0xAC5A, 0xCD20, + 0xAC61, 0xCD21, 0xAC62, 0xCD22, 0xAC63, 0xCD23, 0xAC64, 0xCD25, 0xAC65, 0xCD26, 0xAC66, 0xCD27, 0xAC67, 0xCD29, 0xAC68, 0xCD2A, + 0xAC69, 0xCD2B, 0xAC6A, 0xCD2D, 0xAC6B, 0xCD2E, 0xAC6C, 0xCD2F, 0xAC6D, 0xCD30, 0xAC6E, 0xCD31, 0xAC6F, 0xCD32, 0xAC70, 0xCD33, + 0xAC71, 0xCD34, 0xAC72, 0xCD35, 0xAC73, 0xCD36, 0xAC74, 0xCD37, 0xAC75, 0xCD38, 0xAC76, 0xCD3A, 0xAC77, 0xCD3B, 0xAC78, 0xCD3C, + 0xAC79, 0xCD3D, 0xAC7A, 0xCD3E, 0xAC81, 0xCD3F, 0xAC82, 0xCD40, 0xAC83, 0xCD41, 0xAC84, 0xCD42, 0xAC85, 0xCD43, 0xAC86, 0xCD44, + 0xAC87, 0xCD45, 0xAC88, 0xCD46, 0xAC89, 0xCD47, 0xAC8A, 0xCD48, 0xAC8B, 0xCD49, 0xAC8C, 0xCD4A, 0xAC8D, 0xCD4B, 0xAC8E, 0xCD4C, + 0xAC8F, 0xCD4D, 0xAC90, 0xCD4E, 0xAC91, 0xCD4F, 0xAC92, 0xCD50, 0xAC93, 0xCD51, 0xAC94, 0xCD52, 0xAC95, 0xCD53, 0xAC96, 0xCD54, + 0xAC97, 0xCD55, 0xAC98, 0xCD56, 0xAC99, 0xCD57, 0xAC9A, 0xCD58, 0xAC9B, 0xCD59, 0xAC9C, 0xCD5A, 0xAC9D, 0xCD5B, 0xAC9E, 0xCD5D, + 0xAC9F, 0xCD5E, 0xACA0, 0xCD5F, 0xACA1, 0x0410, 0xACA2, 0x0411, 0xACA3, 0x0412, 0xACA4, 0x0413, 0xACA5, 0x0414, 0xACA6, 0x0415, + 0xACA7, 0x0401, 0xACA8, 0x0416, 0xACA9, 0x0417, 0xACAA, 0x0418, 0xACAB, 0x0419, 0xACAC, 0x041A, 0xACAD, 0x041B, 0xACAE, 0x041C, + 0xACAF, 0x041D, 0xACB0, 0x041E, 0xACB1, 0x041F, 0xACB2, 0x0420, 0xACB3, 0x0421, 0xACB4, 0x0422, 0xACB5, 0x0423, 0xACB6, 0x0424, + 0xACB7, 0x0425, 0xACB8, 0x0426, 0xACB9, 0x0427, 0xACBA, 0x0428, 0xACBB, 0x0429, 0xACBC, 0x042A, 0xACBD, 0x042B, 0xACBE, 0x042C, + 0xACBF, 0x042D, 0xACC0, 0x042E, 0xACC1, 0x042F, 0xACD1, 0x0430, 0xACD2, 0x0431, 0xACD3, 0x0432, 0xACD4, 0x0433, 0xACD5, 0x0434, + 0xACD6, 0x0435, 0xACD7, 0x0451, 0xACD8, 0x0436, 0xACD9, 0x0437, 0xACDA, 0x0438, 0xACDB, 0x0439, 0xACDC, 0x043A, 0xACDD, 0x043B, + 0xACDE, 0x043C, 0xACDF, 0x043D, 0xACE0, 0x043E, 0xACE1, 0x043F, 0xACE2, 0x0440, 0xACE3, 0x0441, 0xACE4, 0x0442, 0xACE5, 0x0443, + 0xACE6, 0x0444, 0xACE7, 0x0445, 0xACE8, 0x0446, 0xACE9, 0x0447, 0xACEA, 0x0448, 0xACEB, 0x0449, 0xACEC, 0x044A, 0xACED, 0x044B, + 0xACEE, 0x044C, 0xACEF, 0x044D, 0xACF0, 0x044E, 0xACF1, 0x044F, 0xAD41, 0xCD61, 0xAD42, 0xCD62, 0xAD43, 0xCD63, 0xAD44, 0xCD65, + 0xAD45, 0xCD66, 0xAD46, 0xCD67, 0xAD47, 0xCD68, 0xAD48, 0xCD69, 0xAD49, 0xCD6A, 0xAD4A, 0xCD6B, 0xAD4B, 0xCD6E, 0xAD4C, 0xCD70, + 0xAD4D, 0xCD72, 0xAD4E, 0xCD73, 0xAD4F, 0xCD74, 0xAD50, 0xCD75, 0xAD51, 0xCD76, 0xAD52, 0xCD77, 0xAD53, 0xCD79, 0xAD54, 0xCD7A, + 0xAD55, 0xCD7B, 0xAD56, 0xCD7C, 0xAD57, 0xCD7D, 0xAD58, 0xCD7E, 0xAD59, 0xCD7F, 0xAD5A, 0xCD80, 0xAD61, 0xCD81, 0xAD62, 0xCD82, + 0xAD63, 0xCD83, 0xAD64, 0xCD84, 0xAD65, 0xCD85, 0xAD66, 0xCD86, 0xAD67, 0xCD87, 0xAD68, 0xCD89, 0xAD69, 0xCD8A, 0xAD6A, 0xCD8B, + 0xAD6B, 0xCD8C, 0xAD6C, 0xCD8D, 0xAD6D, 0xCD8E, 0xAD6E, 0xCD8F, 0xAD6F, 0xCD90, 0xAD70, 0xCD91, 0xAD71, 0xCD92, 0xAD72, 0xCD93, + 0xAD73, 0xCD96, 0xAD74, 0xCD97, 0xAD75, 0xCD99, 0xAD76, 0xCD9A, 0xAD77, 0xCD9B, 0xAD78, 0xCD9D, 0xAD79, 0xCD9E, 0xAD7A, 0xCD9F, + 0xAD81, 0xCDA0, 0xAD82, 0xCDA1, 0xAD83, 0xCDA2, 0xAD84, 0xCDA3, 0xAD85, 0xCDA6, 0xAD86, 0xCDA8, 0xAD87, 0xCDAA, 0xAD88, 0xCDAB, + 0xAD89, 0xCDAC, 0xAD8A, 0xCDAD, 0xAD8B, 0xCDAE, 0xAD8C, 0xCDAF, 0xAD8D, 0xCDB1, 0xAD8E, 0xCDB2, 0xAD8F, 0xCDB3, 0xAD90, 0xCDB4, + 0xAD91, 0xCDB5, 0xAD92, 0xCDB6, 0xAD93, 0xCDB7, 0xAD94, 0xCDB8, 0xAD95, 0xCDB9, 0xAD96, 0xCDBA, 0xAD97, 0xCDBB, 0xAD98, 0xCDBC, + 0xAD99, 0xCDBD, 0xAD9A, 0xCDBE, 0xAD9B, 0xCDBF, 0xAD9C, 0xCDC0, 0xAD9D, 0xCDC1, 0xAD9E, 0xCDC2, 0xAD9F, 0xCDC3, 0xADA0, 0xCDC5, + 0xAE41, 0xCDC6, 0xAE42, 0xCDC7, 0xAE43, 0xCDC8, 0xAE44, 0xCDC9, 0xAE45, 0xCDCA, 0xAE46, 0xCDCB, 0xAE47, 0xCDCD, 0xAE48, 0xCDCE, + 0xAE49, 0xCDCF, 0xAE4A, 0xCDD1, 0xAE4B, 0xCDD2, 0xAE4C, 0xCDD3, 0xAE4D, 0xCDD4, 0xAE4E, 0xCDD5, 0xAE4F, 0xCDD6, 0xAE50, 0xCDD7, + 0xAE51, 0xCDD8, 0xAE52, 0xCDD9, 0xAE53, 0xCDDA, 0xAE54, 0xCDDB, 0xAE55, 0xCDDC, 0xAE56, 0xCDDD, 0xAE57, 0xCDDE, 0xAE58, 0xCDDF, + 0xAE59, 0xCDE0, 0xAE5A, 0xCDE1, 0xAE61, 0xCDE2, 0xAE62, 0xCDE3, 0xAE63, 0xCDE4, 0xAE64, 0xCDE5, 0xAE65, 0xCDE6, 0xAE66, 0xCDE7, + 0xAE67, 0xCDE9, 0xAE68, 0xCDEA, 0xAE69, 0xCDEB, 0xAE6A, 0xCDED, 0xAE6B, 0xCDEE, 0xAE6C, 0xCDEF, 0xAE6D, 0xCDF1, 0xAE6E, 0xCDF2, + 0xAE6F, 0xCDF3, 0xAE70, 0xCDF4, 0xAE71, 0xCDF5, 0xAE72, 0xCDF6, 0xAE73, 0xCDF7, 0xAE74, 0xCDFA, 0xAE75, 0xCDFC, 0xAE76, 0xCDFE, + 0xAE77, 0xCDFF, 0xAE78, 0xCE00, 0xAE79, 0xCE01, 0xAE7A, 0xCE02, 0xAE81, 0xCE03, 0xAE82, 0xCE05, 0xAE83, 0xCE06, 0xAE84, 0xCE07, + 0xAE85, 0xCE09, 0xAE86, 0xCE0A, 0xAE87, 0xCE0B, 0xAE88, 0xCE0D, 0xAE89, 0xCE0E, 0xAE8A, 0xCE0F, 0xAE8B, 0xCE10, 0xAE8C, 0xCE11, + 0xAE8D, 0xCE12, 0xAE8E, 0xCE13, 0xAE8F, 0xCE15, 0xAE90, 0xCE16, 0xAE91, 0xCE17, 0xAE92, 0xCE18, 0xAE93, 0xCE1A, 0xAE94, 0xCE1B, + 0xAE95, 0xCE1C, 0xAE96, 0xCE1D, 0xAE97, 0xCE1E, 0xAE98, 0xCE1F, 0xAE99, 0xCE22, 0xAE9A, 0xCE23, 0xAE9B, 0xCE25, 0xAE9C, 0xCE26, + 0xAE9D, 0xCE27, 0xAE9E, 0xCE29, 0xAE9F, 0xCE2A, 0xAEA0, 0xCE2B, 0xAF41, 0xCE2C, 0xAF42, 0xCE2D, 0xAF43, 0xCE2E, 0xAF44, 0xCE2F, + 0xAF45, 0xCE32, 0xAF46, 0xCE34, 0xAF47, 0xCE36, 0xAF48, 0xCE37, 0xAF49, 0xCE38, 0xAF4A, 0xCE39, 0xAF4B, 0xCE3A, 0xAF4C, 0xCE3B, + 0xAF4D, 0xCE3C, 0xAF4E, 0xCE3D, 0xAF4F, 0xCE3E, 0xAF50, 0xCE3F, 0xAF51, 0xCE40, 0xAF52, 0xCE41, 0xAF53, 0xCE42, 0xAF54, 0xCE43, + 0xAF55, 0xCE44, 0xAF56, 0xCE45, 0xAF57, 0xCE46, 0xAF58, 0xCE47, 0xAF59, 0xCE48, 0xAF5A, 0xCE49, 0xAF61, 0xCE4A, 0xAF62, 0xCE4B, + 0xAF63, 0xCE4C, 0xAF64, 0xCE4D, 0xAF65, 0xCE4E, 0xAF66, 0xCE4F, 0xAF67, 0xCE50, 0xAF68, 0xCE51, 0xAF69, 0xCE52, 0xAF6A, 0xCE53, + 0xAF6B, 0xCE54, 0xAF6C, 0xCE55, 0xAF6D, 0xCE56, 0xAF6E, 0xCE57, 0xAF6F, 0xCE5A, 0xAF70, 0xCE5B, 0xAF71, 0xCE5D, 0xAF72, 0xCE5E, + 0xAF73, 0xCE62, 0xAF74, 0xCE63, 0xAF75, 0xCE64, 0xAF76, 0xCE65, 0xAF77, 0xCE66, 0xAF78, 0xCE67, 0xAF79, 0xCE6A, 0xAF7A, 0xCE6C, + 0xAF81, 0xCE6E, 0xAF82, 0xCE6F, 0xAF83, 0xCE70, 0xAF84, 0xCE71, 0xAF85, 0xCE72, 0xAF86, 0xCE73, 0xAF87, 0xCE76, 0xAF88, 0xCE77, + 0xAF89, 0xCE79, 0xAF8A, 0xCE7A, 0xAF8B, 0xCE7B, 0xAF8C, 0xCE7D, 0xAF8D, 0xCE7E, 0xAF8E, 0xCE7F, 0xAF8F, 0xCE80, 0xAF90, 0xCE81, + 0xAF91, 0xCE82, 0xAF92, 0xCE83, 0xAF93, 0xCE86, 0xAF94, 0xCE88, 0xAF95, 0xCE8A, 0xAF96, 0xCE8B, 0xAF97, 0xCE8C, 0xAF98, 0xCE8D, + 0xAF99, 0xCE8E, 0xAF9A, 0xCE8F, 0xAF9B, 0xCE92, 0xAF9C, 0xCE93, 0xAF9D, 0xCE95, 0xAF9E, 0xCE96, 0xAF9F, 0xCE97, 0xAFA0, 0xCE99, + 0xB041, 0xCE9A, 0xB042, 0xCE9B, 0xB043, 0xCE9C, 0xB044, 0xCE9D, 0xB045, 0xCE9E, 0xB046, 0xCE9F, 0xB047, 0xCEA2, 0xB048, 0xCEA6, + 0xB049, 0xCEA7, 0xB04A, 0xCEA8, 0xB04B, 0xCEA9, 0xB04C, 0xCEAA, 0xB04D, 0xCEAB, 0xB04E, 0xCEAE, 0xB04F, 0xCEAF, 0xB050, 0xCEB0, + 0xB051, 0xCEB1, 0xB052, 0xCEB2, 0xB053, 0xCEB3, 0xB054, 0xCEB4, 0xB055, 0xCEB5, 0xB056, 0xCEB6, 0xB057, 0xCEB7, 0xB058, 0xCEB8, + 0xB059, 0xCEB9, 0xB05A, 0xCEBA, 0xB061, 0xCEBB, 0xB062, 0xCEBC, 0xB063, 0xCEBD, 0xB064, 0xCEBE, 0xB065, 0xCEBF, 0xB066, 0xCEC0, + 0xB067, 0xCEC2, 0xB068, 0xCEC3, 0xB069, 0xCEC4, 0xB06A, 0xCEC5, 0xB06B, 0xCEC6, 0xB06C, 0xCEC7, 0xB06D, 0xCEC8, 0xB06E, 0xCEC9, + 0xB06F, 0xCECA, 0xB070, 0xCECB, 0xB071, 0xCECC, 0xB072, 0xCECD, 0xB073, 0xCECE, 0xB074, 0xCECF, 0xB075, 0xCED0, 0xB076, 0xCED1, + 0xB077, 0xCED2, 0xB078, 0xCED3, 0xB079, 0xCED4, 0xB07A, 0xCED5, 0xB081, 0xCED6, 0xB082, 0xCED7, 0xB083, 0xCED8, 0xB084, 0xCED9, + 0xB085, 0xCEDA, 0xB086, 0xCEDB, 0xB087, 0xCEDC, 0xB088, 0xCEDD, 0xB089, 0xCEDE, 0xB08A, 0xCEDF, 0xB08B, 0xCEE0, 0xB08C, 0xCEE1, + 0xB08D, 0xCEE2, 0xB08E, 0xCEE3, 0xB08F, 0xCEE6, 0xB090, 0xCEE7, 0xB091, 0xCEE9, 0xB092, 0xCEEA, 0xB093, 0xCEED, 0xB094, 0xCEEE, + 0xB095, 0xCEEF, 0xB096, 0xCEF0, 0xB097, 0xCEF1, 0xB098, 0xCEF2, 0xB099, 0xCEF3, 0xB09A, 0xCEF6, 0xB09B, 0xCEFA, 0xB09C, 0xCEFB, + 0xB09D, 0xCEFC, 0xB09E, 0xCEFD, 0xB09F, 0xCEFE, 0xB0A0, 0xCEFF, 0xB0A1, 0xAC00, 0xB0A2, 0xAC01, 0xB0A3, 0xAC04, 0xB0A4, 0xAC07, + 0xB0A5, 0xAC08, 0xB0A6, 0xAC09, 0xB0A7, 0xAC0A, 0xB0A8, 0xAC10, 0xB0A9, 0xAC11, 0xB0AA, 0xAC12, 0xB0AB, 0xAC13, 0xB0AC, 0xAC14, + 0xB0AD, 0xAC15, 0xB0AE, 0xAC16, 0xB0AF, 0xAC17, 0xB0B0, 0xAC19, 0xB0B1, 0xAC1A, 0xB0B2, 0xAC1B, 0xB0B3, 0xAC1C, 0xB0B4, 0xAC1D, + 0xB0B5, 0xAC20, 0xB0B6, 0xAC24, 0xB0B7, 0xAC2C, 0xB0B8, 0xAC2D, 0xB0B9, 0xAC2F, 0xB0BA, 0xAC30, 0xB0BB, 0xAC31, 0xB0BC, 0xAC38, + 0xB0BD, 0xAC39, 0xB0BE, 0xAC3C, 0xB0BF, 0xAC40, 0xB0C0, 0xAC4B, 0xB0C1, 0xAC4D, 0xB0C2, 0xAC54, 0xB0C3, 0xAC58, 0xB0C4, 0xAC5C, + 0xB0C5, 0xAC70, 0xB0C6, 0xAC71, 0xB0C7, 0xAC74, 0xB0C8, 0xAC77, 0xB0C9, 0xAC78, 0xB0CA, 0xAC7A, 0xB0CB, 0xAC80, 0xB0CC, 0xAC81, + 0xB0CD, 0xAC83, 0xB0CE, 0xAC84, 0xB0CF, 0xAC85, 0xB0D0, 0xAC86, 0xB0D1, 0xAC89, 0xB0D2, 0xAC8A, 0xB0D3, 0xAC8B, 0xB0D4, 0xAC8C, + 0xB0D5, 0xAC90, 0xB0D6, 0xAC94, 0xB0D7, 0xAC9C, 0xB0D8, 0xAC9D, 0xB0D9, 0xAC9F, 0xB0DA, 0xACA0, 0xB0DB, 0xACA1, 0xB0DC, 0xACA8, + 0xB0DD, 0xACA9, 0xB0DE, 0xACAA, 0xB0DF, 0xACAC, 0xB0E0, 0xACAF, 0xB0E1, 0xACB0, 0xB0E2, 0xACB8, 0xB0E3, 0xACB9, 0xB0E4, 0xACBB, + 0xB0E5, 0xACBC, 0xB0E6, 0xACBD, 0xB0E7, 0xACC1, 0xB0E8, 0xACC4, 0xB0E9, 0xACC8, 0xB0EA, 0xACCC, 0xB0EB, 0xACD5, 0xB0EC, 0xACD7, + 0xB0ED, 0xACE0, 0xB0EE, 0xACE1, 0xB0EF, 0xACE4, 0xB0F0, 0xACE7, 0xB0F1, 0xACE8, 0xB0F2, 0xACEA, 0xB0F3, 0xACEC, 0xB0F4, 0xACEF, + 0xB0F5, 0xACF0, 0xB0F6, 0xACF1, 0xB0F7, 0xACF3, 0xB0F8, 0xACF5, 0xB0F9, 0xACF6, 0xB0FA, 0xACFC, 0xB0FB, 0xACFD, 0xB0FC, 0xAD00, + 0xB0FD, 0xAD04, 0xB0FE, 0xAD06, 0xB141, 0xCF02, 0xB142, 0xCF03, 0xB143, 0xCF05, 0xB144, 0xCF06, 0xB145, 0xCF07, 0xB146, 0xCF09, + 0xB147, 0xCF0A, 0xB148, 0xCF0B, 0xB149, 0xCF0C, 0xB14A, 0xCF0D, 0xB14B, 0xCF0E, 0xB14C, 0xCF0F, 0xB14D, 0xCF12, 0xB14E, 0xCF14, + 0xB14F, 0xCF16, 0xB150, 0xCF17, 0xB151, 0xCF18, 0xB152, 0xCF19, 0xB153, 0xCF1A, 0xB154, 0xCF1B, 0xB155, 0xCF1D, 0xB156, 0xCF1E, + 0xB157, 0xCF1F, 0xB158, 0xCF21, 0xB159, 0xCF22, 0xB15A, 0xCF23, 0xB161, 0xCF25, 0xB162, 0xCF26, 0xB163, 0xCF27, 0xB164, 0xCF28, + 0xB165, 0xCF29, 0xB166, 0xCF2A, 0xB167, 0xCF2B, 0xB168, 0xCF2E, 0xB169, 0xCF32, 0xB16A, 0xCF33, 0xB16B, 0xCF34, 0xB16C, 0xCF35, + 0xB16D, 0xCF36, 0xB16E, 0xCF37, 0xB16F, 0xCF39, 0xB170, 0xCF3A, 0xB171, 0xCF3B, 0xB172, 0xCF3C, 0xB173, 0xCF3D, 0xB174, 0xCF3E, + 0xB175, 0xCF3F, 0xB176, 0xCF40, 0xB177, 0xCF41, 0xB178, 0xCF42, 0xB179, 0xCF43, 0xB17A, 0xCF44, 0xB181, 0xCF45, 0xB182, 0xCF46, + 0xB183, 0xCF47, 0xB184, 0xCF48, 0xB185, 0xCF49, 0xB186, 0xCF4A, 0xB187, 0xCF4B, 0xB188, 0xCF4C, 0xB189, 0xCF4D, 0xB18A, 0xCF4E, + 0xB18B, 0xCF4F, 0xB18C, 0xCF50, 0xB18D, 0xCF51, 0xB18E, 0xCF52, 0xB18F, 0xCF53, 0xB190, 0xCF56, 0xB191, 0xCF57, 0xB192, 0xCF59, + 0xB193, 0xCF5A, 0xB194, 0xCF5B, 0xB195, 0xCF5D, 0xB196, 0xCF5E, 0xB197, 0xCF5F, 0xB198, 0xCF60, 0xB199, 0xCF61, 0xB19A, 0xCF62, + 0xB19B, 0xCF63, 0xB19C, 0xCF66, 0xB19D, 0xCF68, 0xB19E, 0xCF6A, 0xB19F, 0xCF6B, 0xB1A0, 0xCF6C, 0xB1A1, 0xAD0C, 0xB1A2, 0xAD0D, + 0xB1A3, 0xAD0F, 0xB1A4, 0xAD11, 0xB1A5, 0xAD18, 0xB1A6, 0xAD1C, 0xB1A7, 0xAD20, 0xB1A8, 0xAD29, 0xB1A9, 0xAD2C, 0xB1AA, 0xAD2D, + 0xB1AB, 0xAD34, 0xB1AC, 0xAD35, 0xB1AD, 0xAD38, 0xB1AE, 0xAD3C, 0xB1AF, 0xAD44, 0xB1B0, 0xAD45, 0xB1B1, 0xAD47, 0xB1B2, 0xAD49, + 0xB1B3, 0xAD50, 0xB1B4, 0xAD54, 0xB1B5, 0xAD58, 0xB1B6, 0xAD61, 0xB1B7, 0xAD63, 0xB1B8, 0xAD6C, 0xB1B9, 0xAD6D, 0xB1BA, 0xAD70, + 0xB1BB, 0xAD73, 0xB1BC, 0xAD74, 0xB1BD, 0xAD75, 0xB1BE, 0xAD76, 0xB1BF, 0xAD7B, 0xB1C0, 0xAD7C, 0xB1C1, 0xAD7D, 0xB1C2, 0xAD7F, + 0xB1C3, 0xAD81, 0xB1C4, 0xAD82, 0xB1C5, 0xAD88, 0xB1C6, 0xAD89, 0xB1C7, 0xAD8C, 0xB1C8, 0xAD90, 0xB1C9, 0xAD9C, 0xB1CA, 0xAD9D, + 0xB1CB, 0xADA4, 0xB1CC, 0xADB7, 0xB1CD, 0xADC0, 0xB1CE, 0xADC1, 0xB1CF, 0xADC4, 0xB1D0, 0xADC8, 0xB1D1, 0xADD0, 0xB1D2, 0xADD1, + 0xB1D3, 0xADD3, 0xB1D4, 0xADDC, 0xB1D5, 0xADE0, 0xB1D6, 0xADE4, 0xB1D7, 0xADF8, 0xB1D8, 0xADF9, 0xB1D9, 0xADFC, 0xB1DA, 0xADFF, + 0xB1DB, 0xAE00, 0xB1DC, 0xAE01, 0xB1DD, 0xAE08, 0xB1DE, 0xAE09, 0xB1DF, 0xAE0B, 0xB1E0, 0xAE0D, 0xB1E1, 0xAE14, 0xB1E2, 0xAE30, + 0xB1E3, 0xAE31, 0xB1E4, 0xAE34, 0xB1E5, 0xAE37, 0xB1E6, 0xAE38, 0xB1E7, 0xAE3A, 0xB1E8, 0xAE40, 0xB1E9, 0xAE41, 0xB1EA, 0xAE43, + 0xB1EB, 0xAE45, 0xB1EC, 0xAE46, 0xB1ED, 0xAE4A, 0xB1EE, 0xAE4C, 0xB1EF, 0xAE4D, 0xB1F0, 0xAE4E, 0xB1F1, 0xAE50, 0xB1F2, 0xAE54, + 0xB1F3, 0xAE56, 0xB1F4, 0xAE5C, 0xB1F5, 0xAE5D, 0xB1F6, 0xAE5F, 0xB1F7, 0xAE60, 0xB1F8, 0xAE61, 0xB1F9, 0xAE65, 0xB1FA, 0xAE68, + 0xB1FB, 0xAE69, 0xB1FC, 0xAE6C, 0xB1FD, 0xAE70, 0xB1FE, 0xAE78, 0xB241, 0xCF6D, 0xB242, 0xCF6E, 0xB243, 0xCF6F, 0xB244, 0xCF72, + 0xB245, 0xCF73, 0xB246, 0xCF75, 0xB247, 0xCF76, 0xB248, 0xCF77, 0xB249, 0xCF79, 0xB24A, 0xCF7A, 0xB24B, 0xCF7B, 0xB24C, 0xCF7C, + 0xB24D, 0xCF7D, 0xB24E, 0xCF7E, 0xB24F, 0xCF7F, 0xB250, 0xCF81, 0xB251, 0xCF82, 0xB252, 0xCF83, 0xB253, 0xCF84, 0xB254, 0xCF86, + 0xB255, 0xCF87, 0xB256, 0xCF88, 0xB257, 0xCF89, 0xB258, 0xCF8A, 0xB259, 0xCF8B, 0xB25A, 0xCF8D, 0xB261, 0xCF8E, 0xB262, 0xCF8F, + 0xB263, 0xCF90, 0xB264, 0xCF91, 0xB265, 0xCF92, 0xB266, 0xCF93, 0xB267, 0xCF94, 0xB268, 0xCF95, 0xB269, 0xCF96, 0xB26A, 0xCF97, + 0xB26B, 0xCF98, 0xB26C, 0xCF99, 0xB26D, 0xCF9A, 0xB26E, 0xCF9B, 0xB26F, 0xCF9C, 0xB270, 0xCF9D, 0xB271, 0xCF9E, 0xB272, 0xCF9F, + 0xB273, 0xCFA0, 0xB274, 0xCFA2, 0xB275, 0xCFA3, 0xB276, 0xCFA4, 0xB277, 0xCFA5, 0xB278, 0xCFA6, 0xB279, 0xCFA7, 0xB27A, 0xCFA9, + 0xB281, 0xCFAA, 0xB282, 0xCFAB, 0xB283, 0xCFAC, 0xB284, 0xCFAD, 0xB285, 0xCFAE, 0xB286, 0xCFAF, 0xB287, 0xCFB1, 0xB288, 0xCFB2, + 0xB289, 0xCFB3, 0xB28A, 0xCFB4, 0xB28B, 0xCFB5, 0xB28C, 0xCFB6, 0xB28D, 0xCFB7, 0xB28E, 0xCFB8, 0xB28F, 0xCFB9, 0xB290, 0xCFBA, + 0xB291, 0xCFBB, 0xB292, 0xCFBC, 0xB293, 0xCFBD, 0xB294, 0xCFBE, 0xB295, 0xCFBF, 0xB296, 0xCFC0, 0xB297, 0xCFC1, 0xB298, 0xCFC2, + 0xB299, 0xCFC3, 0xB29A, 0xCFC5, 0xB29B, 0xCFC6, 0xB29C, 0xCFC7, 0xB29D, 0xCFC8, 0xB29E, 0xCFC9, 0xB29F, 0xCFCA, 0xB2A0, 0xCFCB, + 0xB2A1, 0xAE79, 0xB2A2, 0xAE7B, 0xB2A3, 0xAE7C, 0xB2A4, 0xAE7D, 0xB2A5, 0xAE84, 0xB2A6, 0xAE85, 0xB2A7, 0xAE8C, 0xB2A8, 0xAEBC, + 0xB2A9, 0xAEBD, 0xB2AA, 0xAEBE, 0xB2AB, 0xAEC0, 0xB2AC, 0xAEC4, 0xB2AD, 0xAECC, 0xB2AE, 0xAECD, 0xB2AF, 0xAECF, 0xB2B0, 0xAED0, + 0xB2B1, 0xAED1, 0xB2B2, 0xAED8, 0xB2B3, 0xAED9, 0xB2B4, 0xAEDC, 0xB2B5, 0xAEE8, 0xB2B6, 0xAEEB, 0xB2B7, 0xAEED, 0xB2B8, 0xAEF4, + 0xB2B9, 0xAEF8, 0xB2BA, 0xAEFC, 0xB2BB, 0xAF07, 0xB2BC, 0xAF08, 0xB2BD, 0xAF0D, 0xB2BE, 0xAF10, 0xB2BF, 0xAF2C, 0xB2C0, 0xAF2D, + 0xB2C1, 0xAF30, 0xB2C2, 0xAF32, 0xB2C3, 0xAF34, 0xB2C4, 0xAF3C, 0xB2C5, 0xAF3D, 0xB2C6, 0xAF3F, 0xB2C7, 0xAF41, 0xB2C8, 0xAF42, + 0xB2C9, 0xAF43, 0xB2CA, 0xAF48, 0xB2CB, 0xAF49, 0xB2CC, 0xAF50, 0xB2CD, 0xAF5C, 0xB2CE, 0xAF5D, 0xB2CF, 0xAF64, 0xB2D0, 0xAF65, + 0xB2D1, 0xAF79, 0xB2D2, 0xAF80, 0xB2D3, 0xAF84, 0xB2D4, 0xAF88, 0xB2D5, 0xAF90, 0xB2D6, 0xAF91, 0xB2D7, 0xAF95, 0xB2D8, 0xAF9C, + 0xB2D9, 0xAFB8, 0xB2DA, 0xAFB9, 0xB2DB, 0xAFBC, 0xB2DC, 0xAFC0, 0xB2DD, 0xAFC7, 0xB2DE, 0xAFC8, 0xB2DF, 0xAFC9, 0xB2E0, 0xAFCB, + 0xB2E1, 0xAFCD, 0xB2E2, 0xAFCE, 0xB2E3, 0xAFD4, 0xB2E4, 0xAFDC, 0xB2E5, 0xAFE8, 0xB2E6, 0xAFE9, 0xB2E7, 0xAFF0, 0xB2E8, 0xAFF1, + 0xB2E9, 0xAFF4, 0xB2EA, 0xAFF8, 0xB2EB, 0xB000, 0xB2EC, 0xB001, 0xB2ED, 0xB004, 0xB2EE, 0xB00C, 0xB2EF, 0xB010, 0xB2F0, 0xB014, + 0xB2F1, 0xB01C, 0xB2F2, 0xB01D, 0xB2F3, 0xB028, 0xB2F4, 0xB044, 0xB2F5, 0xB045, 0xB2F6, 0xB048, 0xB2F7, 0xB04A, 0xB2F8, 0xB04C, + 0xB2F9, 0xB04E, 0xB2FA, 0xB053, 0xB2FB, 0xB054, 0xB2FC, 0xB055, 0xB2FD, 0xB057, 0xB2FE, 0xB059, 0xB341, 0xCFCC, 0xB342, 0xCFCD, + 0xB343, 0xCFCE, 0xB344, 0xCFCF, 0xB345, 0xCFD0, 0xB346, 0xCFD1, 0xB347, 0xCFD2, 0xB348, 0xCFD3, 0xB349, 0xCFD4, 0xB34A, 0xCFD5, + 0xB34B, 0xCFD6, 0xB34C, 0xCFD7, 0xB34D, 0xCFD8, 0xB34E, 0xCFD9, 0xB34F, 0xCFDA, 0xB350, 0xCFDB, 0xB351, 0xCFDC, 0xB352, 0xCFDD, + 0xB353, 0xCFDE, 0xB354, 0xCFDF, 0xB355, 0xCFE2, 0xB356, 0xCFE3, 0xB357, 0xCFE5, 0xB358, 0xCFE6, 0xB359, 0xCFE7, 0xB35A, 0xCFE9, + 0xB361, 0xCFEA, 0xB362, 0xCFEB, 0xB363, 0xCFEC, 0xB364, 0xCFED, 0xB365, 0xCFEE, 0xB366, 0xCFEF, 0xB367, 0xCFF2, 0xB368, 0xCFF4, + 0xB369, 0xCFF6, 0xB36A, 0xCFF7, 0xB36B, 0xCFF8, 0xB36C, 0xCFF9, 0xB36D, 0xCFFA, 0xB36E, 0xCFFB, 0xB36F, 0xCFFD, 0xB370, 0xCFFE, + 0xB371, 0xCFFF, 0xB372, 0xD001, 0xB373, 0xD002, 0xB374, 0xD003, 0xB375, 0xD005, 0xB376, 0xD006, 0xB377, 0xD007, 0xB378, 0xD008, + 0xB379, 0xD009, 0xB37A, 0xD00A, 0xB381, 0xD00B, 0xB382, 0xD00C, 0xB383, 0xD00D, 0xB384, 0xD00E, 0xB385, 0xD00F, 0xB386, 0xD010, + 0xB387, 0xD012, 0xB388, 0xD013, 0xB389, 0xD014, 0xB38A, 0xD015, 0xB38B, 0xD016, 0xB38C, 0xD017, 0xB38D, 0xD019, 0xB38E, 0xD01A, + 0xB38F, 0xD01B, 0xB390, 0xD01C, 0xB391, 0xD01D, 0xB392, 0xD01E, 0xB393, 0xD01F, 0xB394, 0xD020, 0xB395, 0xD021, 0xB396, 0xD022, + 0xB397, 0xD023, 0xB398, 0xD024, 0xB399, 0xD025, 0xB39A, 0xD026, 0xB39B, 0xD027, 0xB39C, 0xD028, 0xB39D, 0xD029, 0xB39E, 0xD02A, + 0xB39F, 0xD02B, 0xB3A0, 0xD02C, 0xB3A1, 0xB05D, 0xB3A2, 0xB07C, 0xB3A3, 0xB07D, 0xB3A4, 0xB080, 0xB3A5, 0xB084, 0xB3A6, 0xB08C, + 0xB3A7, 0xB08D, 0xB3A8, 0xB08F, 0xB3A9, 0xB091, 0xB3AA, 0xB098, 0xB3AB, 0xB099, 0xB3AC, 0xB09A, 0xB3AD, 0xB09C, 0xB3AE, 0xB09F, + 0xB3AF, 0xB0A0, 0xB3B0, 0xB0A1, 0xB3B1, 0xB0A2, 0xB3B2, 0xB0A8, 0xB3B3, 0xB0A9, 0xB3B4, 0xB0AB, 0xB3B5, 0xB0AC, 0xB3B6, 0xB0AD, + 0xB3B7, 0xB0AE, 0xB3B8, 0xB0AF, 0xB3B9, 0xB0B1, 0xB3BA, 0xB0B3, 0xB3BB, 0xB0B4, 0xB3BC, 0xB0B5, 0xB3BD, 0xB0B8, 0xB3BE, 0xB0BC, + 0xB3BF, 0xB0C4, 0xB3C0, 0xB0C5, 0xB3C1, 0xB0C7, 0xB3C2, 0xB0C8, 0xB3C3, 0xB0C9, 0xB3C4, 0xB0D0, 0xB3C5, 0xB0D1, 0xB3C6, 0xB0D4, + 0xB3C7, 0xB0D8, 0xB3C8, 0xB0E0, 0xB3C9, 0xB0E5, 0xB3CA, 0xB108, 0xB3CB, 0xB109, 0xB3CC, 0xB10B, 0xB3CD, 0xB10C, 0xB3CE, 0xB110, + 0xB3CF, 0xB112, 0xB3D0, 0xB113, 0xB3D1, 0xB118, 0xB3D2, 0xB119, 0xB3D3, 0xB11B, 0xB3D4, 0xB11C, 0xB3D5, 0xB11D, 0xB3D6, 0xB123, + 0xB3D7, 0xB124, 0xB3D8, 0xB125, 0xB3D9, 0xB128, 0xB3DA, 0xB12C, 0xB3DB, 0xB134, 0xB3DC, 0xB135, 0xB3DD, 0xB137, 0xB3DE, 0xB138, + 0xB3DF, 0xB139, 0xB3E0, 0xB140, 0xB3E1, 0xB141, 0xB3E2, 0xB144, 0xB3E3, 0xB148, 0xB3E4, 0xB150, 0xB3E5, 0xB151, 0xB3E6, 0xB154, + 0xB3E7, 0xB155, 0xB3E8, 0xB158, 0xB3E9, 0xB15C, 0xB3EA, 0xB160, 0xB3EB, 0xB178, 0xB3EC, 0xB179, 0xB3ED, 0xB17C, 0xB3EE, 0xB180, + 0xB3EF, 0xB182, 0xB3F0, 0xB188, 0xB3F1, 0xB189, 0xB3F2, 0xB18B, 0xB3F3, 0xB18D, 0xB3F4, 0xB192, 0xB3F5, 0xB193, 0xB3F6, 0xB194, + 0xB3F7, 0xB198, 0xB3F8, 0xB19C, 0xB3F9, 0xB1A8, 0xB3FA, 0xB1CC, 0xB3FB, 0xB1D0, 0xB3FC, 0xB1D4, 0xB3FD, 0xB1DC, 0xB3FE, 0xB1DD, + 0xB441, 0xD02E, 0xB442, 0xD02F, 0xB443, 0xD030, 0xB444, 0xD031, 0xB445, 0xD032, 0xB446, 0xD033, 0xB447, 0xD036, 0xB448, 0xD037, + 0xB449, 0xD039, 0xB44A, 0xD03A, 0xB44B, 0xD03B, 0xB44C, 0xD03D, 0xB44D, 0xD03E, 0xB44E, 0xD03F, 0xB44F, 0xD040, 0xB450, 0xD041, + 0xB451, 0xD042, 0xB452, 0xD043, 0xB453, 0xD046, 0xB454, 0xD048, 0xB455, 0xD04A, 0xB456, 0xD04B, 0xB457, 0xD04C, 0xB458, 0xD04D, + 0xB459, 0xD04E, 0xB45A, 0xD04F, 0xB461, 0xD051, 0xB462, 0xD052, 0xB463, 0xD053, 0xB464, 0xD055, 0xB465, 0xD056, 0xB466, 0xD057, + 0xB467, 0xD059, 0xB468, 0xD05A, 0xB469, 0xD05B, 0xB46A, 0xD05C, 0xB46B, 0xD05D, 0xB46C, 0xD05E, 0xB46D, 0xD05F, 0xB46E, 0xD061, + 0xB46F, 0xD062, 0xB470, 0xD063, 0xB471, 0xD064, 0xB472, 0xD065, 0xB473, 0xD066, 0xB474, 0xD067, 0xB475, 0xD068, 0xB476, 0xD069, + 0xB477, 0xD06A, 0xB478, 0xD06B, 0xB479, 0xD06E, 0xB47A, 0xD06F, 0xB481, 0xD071, 0xB482, 0xD072, 0xB483, 0xD073, 0xB484, 0xD075, + 0xB485, 0xD076, 0xB486, 0xD077, 0xB487, 0xD078, 0xB488, 0xD079, 0xB489, 0xD07A, 0xB48A, 0xD07B, 0xB48B, 0xD07E, 0xB48C, 0xD07F, + 0xB48D, 0xD080, 0xB48E, 0xD082, 0xB48F, 0xD083, 0xB490, 0xD084, 0xB491, 0xD085, 0xB492, 0xD086, 0xB493, 0xD087, 0xB494, 0xD088, + 0xB495, 0xD089, 0xB496, 0xD08A, 0xB497, 0xD08B, 0xB498, 0xD08C, 0xB499, 0xD08D, 0xB49A, 0xD08E, 0xB49B, 0xD08F, 0xB49C, 0xD090, + 0xB49D, 0xD091, 0xB49E, 0xD092, 0xB49F, 0xD093, 0xB4A0, 0xD094, 0xB4A1, 0xB1DF, 0xB4A2, 0xB1E8, 0xB4A3, 0xB1E9, 0xB4A4, 0xB1EC, + 0xB4A5, 0xB1F0, 0xB4A6, 0xB1F9, 0xB4A7, 0xB1FB, 0xB4A8, 0xB1FD, 0xB4A9, 0xB204, 0xB4AA, 0xB205, 0xB4AB, 0xB208, 0xB4AC, 0xB20B, + 0xB4AD, 0xB20C, 0xB4AE, 0xB214, 0xB4AF, 0xB215, 0xB4B0, 0xB217, 0xB4B1, 0xB219, 0xB4B2, 0xB220, 0xB4B3, 0xB234, 0xB4B4, 0xB23C, + 0xB4B5, 0xB258, 0xB4B6, 0xB25C, 0xB4B7, 0xB260, 0xB4B8, 0xB268, 0xB4B9, 0xB269, 0xB4BA, 0xB274, 0xB4BB, 0xB275, 0xB4BC, 0xB27C, + 0xB4BD, 0xB284, 0xB4BE, 0xB285, 0xB4BF, 0xB289, 0xB4C0, 0xB290, 0xB4C1, 0xB291, 0xB4C2, 0xB294, 0xB4C3, 0xB298, 0xB4C4, 0xB299, + 0xB4C5, 0xB29A, 0xB4C6, 0xB2A0, 0xB4C7, 0xB2A1, 0xB4C8, 0xB2A3, 0xB4C9, 0xB2A5, 0xB4CA, 0xB2A6, 0xB4CB, 0xB2AA, 0xB4CC, 0xB2AC, + 0xB4CD, 0xB2B0, 0xB4CE, 0xB2B4, 0xB4CF, 0xB2C8, 0xB4D0, 0xB2C9, 0xB4D1, 0xB2CC, 0xB4D2, 0xB2D0, 0xB4D3, 0xB2D2, 0xB4D4, 0xB2D8, + 0xB4D5, 0xB2D9, 0xB4D6, 0xB2DB, 0xB4D7, 0xB2DD, 0xB4D8, 0xB2E2, 0xB4D9, 0xB2E4, 0xB4DA, 0xB2E5, 0xB4DB, 0xB2E6, 0xB4DC, 0xB2E8, + 0xB4DD, 0xB2EB, 0xB4DE, 0xB2EC, 0xB4DF, 0xB2ED, 0xB4E0, 0xB2EE, 0xB4E1, 0xB2EF, 0xB4E2, 0xB2F3, 0xB4E3, 0xB2F4, 0xB4E4, 0xB2F5, + 0xB4E5, 0xB2F7, 0xB4E6, 0xB2F8, 0xB4E7, 0xB2F9, 0xB4E8, 0xB2FA, 0xB4E9, 0xB2FB, 0xB4EA, 0xB2FF, 0xB4EB, 0xB300, 0xB4EC, 0xB301, + 0xB4ED, 0xB304, 0xB4EE, 0xB308, 0xB4EF, 0xB310, 0xB4F0, 0xB311, 0xB4F1, 0xB313, 0xB4F2, 0xB314, 0xB4F3, 0xB315, 0xB4F4, 0xB31C, + 0xB4F5, 0xB354, 0xB4F6, 0xB355, 0xB4F7, 0xB356, 0xB4F8, 0xB358, 0xB4F9, 0xB35B, 0xB4FA, 0xB35C, 0xB4FB, 0xB35E, 0xB4FC, 0xB35F, + 0xB4FD, 0xB364, 0xB4FE, 0xB365, 0xB541, 0xD095, 0xB542, 0xD096, 0xB543, 0xD097, 0xB544, 0xD098, 0xB545, 0xD099, 0xB546, 0xD09A, + 0xB547, 0xD09B, 0xB548, 0xD09C, 0xB549, 0xD09D, 0xB54A, 0xD09E, 0xB54B, 0xD09F, 0xB54C, 0xD0A0, 0xB54D, 0xD0A1, 0xB54E, 0xD0A2, + 0xB54F, 0xD0A3, 0xB550, 0xD0A6, 0xB551, 0xD0A7, 0xB552, 0xD0A9, 0xB553, 0xD0AA, 0xB554, 0xD0AB, 0xB555, 0xD0AD, 0xB556, 0xD0AE, + 0xB557, 0xD0AF, 0xB558, 0xD0B0, 0xB559, 0xD0B1, 0xB55A, 0xD0B2, 0xB561, 0xD0B3, 0xB562, 0xD0B6, 0xB563, 0xD0B8, 0xB564, 0xD0BA, + 0xB565, 0xD0BB, 0xB566, 0xD0BC, 0xB567, 0xD0BD, 0xB568, 0xD0BE, 0xB569, 0xD0BF, 0xB56A, 0xD0C2, 0xB56B, 0xD0C3, 0xB56C, 0xD0C5, + 0xB56D, 0xD0C6, 0xB56E, 0xD0C7, 0xB56F, 0xD0CA, 0xB570, 0xD0CB, 0xB571, 0xD0CC, 0xB572, 0xD0CD, 0xB573, 0xD0CE, 0xB574, 0xD0CF, + 0xB575, 0xD0D2, 0xB576, 0xD0D6, 0xB577, 0xD0D7, 0xB578, 0xD0D8, 0xB579, 0xD0D9, 0xB57A, 0xD0DA, 0xB581, 0xD0DB, 0xB582, 0xD0DE, + 0xB583, 0xD0DF, 0xB584, 0xD0E1, 0xB585, 0xD0E2, 0xB586, 0xD0E3, 0xB587, 0xD0E5, 0xB588, 0xD0E6, 0xB589, 0xD0E7, 0xB58A, 0xD0E8, + 0xB58B, 0xD0E9, 0xB58C, 0xD0EA, 0xB58D, 0xD0EB, 0xB58E, 0xD0EE, 0xB58F, 0xD0F2, 0xB590, 0xD0F3, 0xB591, 0xD0F4, 0xB592, 0xD0F5, + 0xB593, 0xD0F6, 0xB594, 0xD0F7, 0xB595, 0xD0F9, 0xB596, 0xD0FA, 0xB597, 0xD0FB, 0xB598, 0xD0FC, 0xB599, 0xD0FD, 0xB59A, 0xD0FE, + 0xB59B, 0xD0FF, 0xB59C, 0xD100, 0xB59D, 0xD101, 0xB59E, 0xD102, 0xB59F, 0xD103, 0xB5A0, 0xD104, 0xB5A1, 0xB367, 0xB5A2, 0xB369, + 0xB5A3, 0xB36B, 0xB5A4, 0xB36E, 0xB5A5, 0xB370, 0xB5A6, 0xB371, 0xB5A7, 0xB374, 0xB5A8, 0xB378, 0xB5A9, 0xB380, 0xB5AA, 0xB381, + 0xB5AB, 0xB383, 0xB5AC, 0xB384, 0xB5AD, 0xB385, 0xB5AE, 0xB38C, 0xB5AF, 0xB390, 0xB5B0, 0xB394, 0xB5B1, 0xB3A0, 0xB5B2, 0xB3A1, + 0xB5B3, 0xB3A8, 0xB5B4, 0xB3AC, 0xB5B5, 0xB3C4, 0xB5B6, 0xB3C5, 0xB5B7, 0xB3C8, 0xB5B8, 0xB3CB, 0xB5B9, 0xB3CC, 0xB5BA, 0xB3CE, + 0xB5BB, 0xB3D0, 0xB5BC, 0xB3D4, 0xB5BD, 0xB3D5, 0xB5BE, 0xB3D7, 0xB5BF, 0xB3D9, 0xB5C0, 0xB3DB, 0xB5C1, 0xB3DD, 0xB5C2, 0xB3E0, + 0xB5C3, 0xB3E4, 0xB5C4, 0xB3E8, 0xB5C5, 0xB3FC, 0xB5C6, 0xB410, 0xB5C7, 0xB418, 0xB5C8, 0xB41C, 0xB5C9, 0xB420, 0xB5CA, 0xB428, + 0xB5CB, 0xB429, 0xB5CC, 0xB42B, 0xB5CD, 0xB434, 0xB5CE, 0xB450, 0xB5CF, 0xB451, 0xB5D0, 0xB454, 0xB5D1, 0xB458, 0xB5D2, 0xB460, + 0xB5D3, 0xB461, 0xB5D4, 0xB463, 0xB5D5, 0xB465, 0xB5D6, 0xB46C, 0xB5D7, 0xB480, 0xB5D8, 0xB488, 0xB5D9, 0xB49D, 0xB5DA, 0xB4A4, + 0xB5DB, 0xB4A8, 0xB5DC, 0xB4AC, 0xB5DD, 0xB4B5, 0xB5DE, 0xB4B7, 0xB5DF, 0xB4B9, 0xB5E0, 0xB4C0, 0xB5E1, 0xB4C4, 0xB5E2, 0xB4C8, + 0xB5E3, 0xB4D0, 0xB5E4, 0xB4D5, 0xB5E5, 0xB4DC, 0xB5E6, 0xB4DD, 0xB5E7, 0xB4E0, 0xB5E8, 0xB4E3, 0xB5E9, 0xB4E4, 0xB5EA, 0xB4E6, + 0xB5EB, 0xB4EC, 0xB5EC, 0xB4ED, 0xB5ED, 0xB4EF, 0xB5EE, 0xB4F1, 0xB5EF, 0xB4F8, 0xB5F0, 0xB514, 0xB5F1, 0xB515, 0xB5F2, 0xB518, + 0xB5F3, 0xB51B, 0xB5F4, 0xB51C, 0xB5F5, 0xB524, 0xB5F6, 0xB525, 0xB5F7, 0xB527, 0xB5F8, 0xB528, 0xB5F9, 0xB529, 0xB5FA, 0xB52A, + 0xB5FB, 0xB530, 0xB5FC, 0xB531, 0xB5FD, 0xB534, 0xB5FE, 0xB538, 0xB641, 0xD105, 0xB642, 0xD106, 0xB643, 0xD107, 0xB644, 0xD108, + 0xB645, 0xD109, 0xB646, 0xD10A, 0xB647, 0xD10B, 0xB648, 0xD10C, 0xB649, 0xD10E, 0xB64A, 0xD10F, 0xB64B, 0xD110, 0xB64C, 0xD111, + 0xB64D, 0xD112, 0xB64E, 0xD113, 0xB64F, 0xD114, 0xB650, 0xD115, 0xB651, 0xD116, 0xB652, 0xD117, 0xB653, 0xD118, 0xB654, 0xD119, + 0xB655, 0xD11A, 0xB656, 0xD11B, 0xB657, 0xD11C, 0xB658, 0xD11D, 0xB659, 0xD11E, 0xB65A, 0xD11F, 0xB661, 0xD120, 0xB662, 0xD121, + 0xB663, 0xD122, 0xB664, 0xD123, 0xB665, 0xD124, 0xB666, 0xD125, 0xB667, 0xD126, 0xB668, 0xD127, 0xB669, 0xD128, 0xB66A, 0xD129, + 0xB66B, 0xD12A, 0xB66C, 0xD12B, 0xB66D, 0xD12C, 0xB66E, 0xD12D, 0xB66F, 0xD12E, 0xB670, 0xD12F, 0xB671, 0xD132, 0xB672, 0xD133, + 0xB673, 0xD135, 0xB674, 0xD136, 0xB675, 0xD137, 0xB676, 0xD139, 0xB677, 0xD13B, 0xB678, 0xD13C, 0xB679, 0xD13D, 0xB67A, 0xD13E, + 0xB681, 0xD13F, 0xB682, 0xD142, 0xB683, 0xD146, 0xB684, 0xD147, 0xB685, 0xD148, 0xB686, 0xD149, 0xB687, 0xD14A, 0xB688, 0xD14B, + 0xB689, 0xD14E, 0xB68A, 0xD14F, 0xB68B, 0xD151, 0xB68C, 0xD152, 0xB68D, 0xD153, 0xB68E, 0xD155, 0xB68F, 0xD156, 0xB690, 0xD157, + 0xB691, 0xD158, 0xB692, 0xD159, 0xB693, 0xD15A, 0xB694, 0xD15B, 0xB695, 0xD15E, 0xB696, 0xD160, 0xB697, 0xD162, 0xB698, 0xD163, + 0xB699, 0xD164, 0xB69A, 0xD165, 0xB69B, 0xD166, 0xB69C, 0xD167, 0xB69D, 0xD169, 0xB69E, 0xD16A, 0xB69F, 0xD16B, 0xB6A0, 0xD16D, + 0xB6A1, 0xB540, 0xB6A2, 0xB541, 0xB6A3, 0xB543, 0xB6A4, 0xB544, 0xB6A5, 0xB545, 0xB6A6, 0xB54B, 0xB6A7, 0xB54C, 0xB6A8, 0xB54D, + 0xB6A9, 0xB550, 0xB6AA, 0xB554, 0xB6AB, 0xB55C, 0xB6AC, 0xB55D, 0xB6AD, 0xB55F, 0xB6AE, 0xB560, 0xB6AF, 0xB561, 0xB6B0, 0xB5A0, + 0xB6B1, 0xB5A1, 0xB6B2, 0xB5A4, 0xB6B3, 0xB5A8, 0xB6B4, 0xB5AA, 0xB6B5, 0xB5AB, 0xB6B6, 0xB5B0, 0xB6B7, 0xB5B1, 0xB6B8, 0xB5B3, + 0xB6B9, 0xB5B4, 0xB6BA, 0xB5B5, 0xB6BB, 0xB5BB, 0xB6BC, 0xB5BC, 0xB6BD, 0xB5BD, 0xB6BE, 0xB5C0, 0xB6BF, 0xB5C4, 0xB6C0, 0xB5CC, + 0xB6C1, 0xB5CD, 0xB6C2, 0xB5CF, 0xB6C3, 0xB5D0, 0xB6C4, 0xB5D1, 0xB6C5, 0xB5D8, 0xB6C6, 0xB5EC, 0xB6C7, 0xB610, 0xB6C8, 0xB611, + 0xB6C9, 0xB614, 0xB6CA, 0xB618, 0xB6CB, 0xB625, 0xB6CC, 0xB62C, 0xB6CD, 0xB634, 0xB6CE, 0xB648, 0xB6CF, 0xB664, 0xB6D0, 0xB668, + 0xB6D1, 0xB69C, 0xB6D2, 0xB69D, 0xB6D3, 0xB6A0, 0xB6D4, 0xB6A4, 0xB6D5, 0xB6AB, 0xB6D6, 0xB6AC, 0xB6D7, 0xB6B1, 0xB6D8, 0xB6D4, + 0xB6D9, 0xB6F0, 0xB6DA, 0xB6F4, 0xB6DB, 0xB6F8, 0xB6DC, 0xB700, 0xB6DD, 0xB701, 0xB6DE, 0xB705, 0xB6DF, 0xB728, 0xB6E0, 0xB729, + 0xB6E1, 0xB72C, 0xB6E2, 0xB72F, 0xB6E3, 0xB730, 0xB6E4, 0xB738, 0xB6E5, 0xB739, 0xB6E6, 0xB73B, 0xB6E7, 0xB744, 0xB6E8, 0xB748, + 0xB6E9, 0xB74C, 0xB6EA, 0xB754, 0xB6EB, 0xB755, 0xB6EC, 0xB760, 0xB6ED, 0xB764, 0xB6EE, 0xB768, 0xB6EF, 0xB770, 0xB6F0, 0xB771, + 0xB6F1, 0xB773, 0xB6F2, 0xB775, 0xB6F3, 0xB77C, 0xB6F4, 0xB77D, 0xB6F5, 0xB780, 0xB6F6, 0xB784, 0xB6F7, 0xB78C, 0xB6F8, 0xB78D, + 0xB6F9, 0xB78F, 0xB6FA, 0xB790, 0xB6FB, 0xB791, 0xB6FC, 0xB792, 0xB6FD, 0xB796, 0xB6FE, 0xB797, 0xB741, 0xD16E, 0xB742, 0xD16F, + 0xB743, 0xD170, 0xB744, 0xD171, 0xB745, 0xD172, 0xB746, 0xD173, 0xB747, 0xD174, 0xB748, 0xD175, 0xB749, 0xD176, 0xB74A, 0xD177, + 0xB74B, 0xD178, 0xB74C, 0xD179, 0xB74D, 0xD17A, 0xB74E, 0xD17B, 0xB74F, 0xD17D, 0xB750, 0xD17E, 0xB751, 0xD17F, 0xB752, 0xD180, + 0xB753, 0xD181, 0xB754, 0xD182, 0xB755, 0xD183, 0xB756, 0xD185, 0xB757, 0xD186, 0xB758, 0xD187, 0xB759, 0xD189, 0xB75A, 0xD18A, + 0xB761, 0xD18B, 0xB762, 0xD18C, 0xB763, 0xD18D, 0xB764, 0xD18E, 0xB765, 0xD18F, 0xB766, 0xD190, 0xB767, 0xD191, 0xB768, 0xD192, + 0xB769, 0xD193, 0xB76A, 0xD194, 0xB76B, 0xD195, 0xB76C, 0xD196, 0xB76D, 0xD197, 0xB76E, 0xD198, 0xB76F, 0xD199, 0xB770, 0xD19A, + 0xB771, 0xD19B, 0xB772, 0xD19C, 0xB773, 0xD19D, 0xB774, 0xD19E, 0xB775, 0xD19F, 0xB776, 0xD1A2, 0xB777, 0xD1A3, 0xB778, 0xD1A5, + 0xB779, 0xD1A6, 0xB77A, 0xD1A7, 0xB781, 0xD1A9, 0xB782, 0xD1AA, 0xB783, 0xD1AB, 0xB784, 0xD1AC, 0xB785, 0xD1AD, 0xB786, 0xD1AE, + 0xB787, 0xD1AF, 0xB788, 0xD1B2, 0xB789, 0xD1B4, 0xB78A, 0xD1B6, 0xB78B, 0xD1B7, 0xB78C, 0xD1B8, 0xB78D, 0xD1B9, 0xB78E, 0xD1BB, + 0xB78F, 0xD1BD, 0xB790, 0xD1BE, 0xB791, 0xD1BF, 0xB792, 0xD1C1, 0xB793, 0xD1C2, 0xB794, 0xD1C3, 0xB795, 0xD1C4, 0xB796, 0xD1C5, + 0xB797, 0xD1C6, 0xB798, 0xD1C7, 0xB799, 0xD1C8, 0xB79A, 0xD1C9, 0xB79B, 0xD1CA, 0xB79C, 0xD1CB, 0xB79D, 0xD1CC, 0xB79E, 0xD1CD, + 0xB79F, 0xD1CE, 0xB7A0, 0xD1CF, 0xB7A1, 0xB798, 0xB7A2, 0xB799, 0xB7A3, 0xB79C, 0xB7A4, 0xB7A0, 0xB7A5, 0xB7A8, 0xB7A6, 0xB7A9, + 0xB7A7, 0xB7AB, 0xB7A8, 0xB7AC, 0xB7A9, 0xB7AD, 0xB7AA, 0xB7B4, 0xB7AB, 0xB7B5, 0xB7AC, 0xB7B8, 0xB7AD, 0xB7C7, 0xB7AE, 0xB7C9, + 0xB7AF, 0xB7EC, 0xB7B0, 0xB7ED, 0xB7B1, 0xB7F0, 0xB7B2, 0xB7F4, 0xB7B3, 0xB7FC, 0xB7B4, 0xB7FD, 0xB7B5, 0xB7FF, 0xB7B6, 0xB800, + 0xB7B7, 0xB801, 0xB7B8, 0xB807, 0xB7B9, 0xB808, 0xB7BA, 0xB809, 0xB7BB, 0xB80C, 0xB7BC, 0xB810, 0xB7BD, 0xB818, 0xB7BE, 0xB819, + 0xB7BF, 0xB81B, 0xB7C0, 0xB81D, 0xB7C1, 0xB824, 0xB7C2, 0xB825, 0xB7C3, 0xB828, 0xB7C4, 0xB82C, 0xB7C5, 0xB834, 0xB7C6, 0xB835, + 0xB7C7, 0xB837, 0xB7C8, 0xB838, 0xB7C9, 0xB839, 0xB7CA, 0xB840, 0xB7CB, 0xB844, 0xB7CC, 0xB851, 0xB7CD, 0xB853, 0xB7CE, 0xB85C, + 0xB7CF, 0xB85D, 0xB7D0, 0xB860, 0xB7D1, 0xB864, 0xB7D2, 0xB86C, 0xB7D3, 0xB86D, 0xB7D4, 0xB86F, 0xB7D5, 0xB871, 0xB7D6, 0xB878, + 0xB7D7, 0xB87C, 0xB7D8, 0xB88D, 0xB7D9, 0xB8A8, 0xB7DA, 0xB8B0, 0xB7DB, 0xB8B4, 0xB7DC, 0xB8B8, 0xB7DD, 0xB8C0, 0xB7DE, 0xB8C1, + 0xB7DF, 0xB8C3, 0xB7E0, 0xB8C5, 0xB7E1, 0xB8CC, 0xB7E2, 0xB8D0, 0xB7E3, 0xB8D4, 0xB7E4, 0xB8DD, 0xB7E5, 0xB8DF, 0xB7E6, 0xB8E1, + 0xB7E7, 0xB8E8, 0xB7E8, 0xB8E9, 0xB7E9, 0xB8EC, 0xB7EA, 0xB8F0, 0xB7EB, 0xB8F8, 0xB7EC, 0xB8F9, 0xB7ED, 0xB8FB, 0xB7EE, 0xB8FD, + 0xB7EF, 0xB904, 0xB7F0, 0xB918, 0xB7F1, 0xB920, 0xB7F2, 0xB93C, 0xB7F3, 0xB93D, 0xB7F4, 0xB940, 0xB7F5, 0xB944, 0xB7F6, 0xB94C, + 0xB7F7, 0xB94F, 0xB7F8, 0xB951, 0xB7F9, 0xB958, 0xB7FA, 0xB959, 0xB7FB, 0xB95C, 0xB7FC, 0xB960, 0xB7FD, 0xB968, 0xB7FE, 0xB969, + 0xB841, 0xD1D0, 0xB842, 0xD1D1, 0xB843, 0xD1D2, 0xB844, 0xD1D3, 0xB845, 0xD1D4, 0xB846, 0xD1D5, 0xB847, 0xD1D6, 0xB848, 0xD1D7, + 0xB849, 0xD1D9, 0xB84A, 0xD1DA, 0xB84B, 0xD1DB, 0xB84C, 0xD1DC, 0xB84D, 0xD1DD, 0xB84E, 0xD1DE, 0xB84F, 0xD1DF, 0xB850, 0xD1E0, + 0xB851, 0xD1E1, 0xB852, 0xD1E2, 0xB853, 0xD1E3, 0xB854, 0xD1E4, 0xB855, 0xD1E5, 0xB856, 0xD1E6, 0xB857, 0xD1E7, 0xB858, 0xD1E8, + 0xB859, 0xD1E9, 0xB85A, 0xD1EA, 0xB861, 0xD1EB, 0xB862, 0xD1EC, 0xB863, 0xD1ED, 0xB864, 0xD1EE, 0xB865, 0xD1EF, 0xB866, 0xD1F0, + 0xB867, 0xD1F1, 0xB868, 0xD1F2, 0xB869, 0xD1F3, 0xB86A, 0xD1F5, 0xB86B, 0xD1F6, 0xB86C, 0xD1F7, 0xB86D, 0xD1F9, 0xB86E, 0xD1FA, + 0xB86F, 0xD1FB, 0xB870, 0xD1FC, 0xB871, 0xD1FD, 0xB872, 0xD1FE, 0xB873, 0xD1FF, 0xB874, 0xD200, 0xB875, 0xD201, 0xB876, 0xD202, + 0xB877, 0xD203, 0xB878, 0xD204, 0xB879, 0xD205, 0xB87A, 0xD206, 0xB881, 0xD208, 0xB882, 0xD20A, 0xB883, 0xD20B, 0xB884, 0xD20C, + 0xB885, 0xD20D, 0xB886, 0xD20E, 0xB887, 0xD20F, 0xB888, 0xD211, 0xB889, 0xD212, 0xB88A, 0xD213, 0xB88B, 0xD214, 0xB88C, 0xD215, + 0xB88D, 0xD216, 0xB88E, 0xD217, 0xB88F, 0xD218, 0xB890, 0xD219, 0xB891, 0xD21A, 0xB892, 0xD21B, 0xB893, 0xD21C, 0xB894, 0xD21D, + 0xB895, 0xD21E, 0xB896, 0xD21F, 0xB897, 0xD220, 0xB898, 0xD221, 0xB899, 0xD222, 0xB89A, 0xD223, 0xB89B, 0xD224, 0xB89C, 0xD225, + 0xB89D, 0xD226, 0xB89E, 0xD227, 0xB89F, 0xD228, 0xB8A0, 0xD229, 0xB8A1, 0xB96B, 0xB8A2, 0xB96D, 0xB8A3, 0xB974, 0xB8A4, 0xB975, + 0xB8A5, 0xB978, 0xB8A6, 0xB97C, 0xB8A7, 0xB984, 0xB8A8, 0xB985, 0xB8A9, 0xB987, 0xB8AA, 0xB989, 0xB8AB, 0xB98A, 0xB8AC, 0xB98D, + 0xB8AD, 0xB98E, 0xB8AE, 0xB9AC, 0xB8AF, 0xB9AD, 0xB8B0, 0xB9B0, 0xB8B1, 0xB9B4, 0xB8B2, 0xB9BC, 0xB8B3, 0xB9BD, 0xB8B4, 0xB9BF, + 0xB8B5, 0xB9C1, 0xB8B6, 0xB9C8, 0xB8B7, 0xB9C9, 0xB8B8, 0xB9CC, 0xB8B9, 0xB9CE, 0xB8BA, 0xB9CF, 0xB8BB, 0xB9D0, 0xB8BC, 0xB9D1, + 0xB8BD, 0xB9D2, 0xB8BE, 0xB9D8, 0xB8BF, 0xB9D9, 0xB8C0, 0xB9DB, 0xB8C1, 0xB9DD, 0xB8C2, 0xB9DE, 0xB8C3, 0xB9E1, 0xB8C4, 0xB9E3, + 0xB8C5, 0xB9E4, 0xB8C6, 0xB9E5, 0xB8C7, 0xB9E8, 0xB8C8, 0xB9EC, 0xB8C9, 0xB9F4, 0xB8CA, 0xB9F5, 0xB8CB, 0xB9F7, 0xB8CC, 0xB9F8, + 0xB8CD, 0xB9F9, 0xB8CE, 0xB9FA, 0xB8CF, 0xBA00, 0xB8D0, 0xBA01, 0xB8D1, 0xBA08, 0xB8D2, 0xBA15, 0xB8D3, 0xBA38, 0xB8D4, 0xBA39, + 0xB8D5, 0xBA3C, 0xB8D6, 0xBA40, 0xB8D7, 0xBA42, 0xB8D8, 0xBA48, 0xB8D9, 0xBA49, 0xB8DA, 0xBA4B, 0xB8DB, 0xBA4D, 0xB8DC, 0xBA4E, + 0xB8DD, 0xBA53, 0xB8DE, 0xBA54, 0xB8DF, 0xBA55, 0xB8E0, 0xBA58, 0xB8E1, 0xBA5C, 0xB8E2, 0xBA64, 0xB8E3, 0xBA65, 0xB8E4, 0xBA67, + 0xB8E5, 0xBA68, 0xB8E6, 0xBA69, 0xB8E7, 0xBA70, 0xB8E8, 0xBA71, 0xB8E9, 0xBA74, 0xB8EA, 0xBA78, 0xB8EB, 0xBA83, 0xB8EC, 0xBA84, + 0xB8ED, 0xBA85, 0xB8EE, 0xBA87, 0xB8EF, 0xBA8C, 0xB8F0, 0xBAA8, 0xB8F1, 0xBAA9, 0xB8F2, 0xBAAB, 0xB8F3, 0xBAAC, 0xB8F4, 0xBAB0, + 0xB8F5, 0xBAB2, 0xB8F6, 0xBAB8, 0xB8F7, 0xBAB9, 0xB8F8, 0xBABB, 0xB8F9, 0xBABD, 0xB8FA, 0xBAC4, 0xB8FB, 0xBAC8, 0xB8FC, 0xBAD8, + 0xB8FD, 0xBAD9, 0xB8FE, 0xBAFC, 0xB941, 0xD22A, 0xB942, 0xD22B, 0xB943, 0xD22E, 0xB944, 0xD22F, 0xB945, 0xD231, 0xB946, 0xD232, + 0xB947, 0xD233, 0xB948, 0xD235, 0xB949, 0xD236, 0xB94A, 0xD237, 0xB94B, 0xD238, 0xB94C, 0xD239, 0xB94D, 0xD23A, 0xB94E, 0xD23B, + 0xB94F, 0xD23E, 0xB950, 0xD240, 0xB951, 0xD242, 0xB952, 0xD243, 0xB953, 0xD244, 0xB954, 0xD245, 0xB955, 0xD246, 0xB956, 0xD247, + 0xB957, 0xD249, 0xB958, 0xD24A, 0xB959, 0xD24B, 0xB95A, 0xD24C, 0xB961, 0xD24D, 0xB962, 0xD24E, 0xB963, 0xD24F, 0xB964, 0xD250, + 0xB965, 0xD251, 0xB966, 0xD252, 0xB967, 0xD253, 0xB968, 0xD254, 0xB969, 0xD255, 0xB96A, 0xD256, 0xB96B, 0xD257, 0xB96C, 0xD258, + 0xB96D, 0xD259, 0xB96E, 0xD25A, 0xB96F, 0xD25B, 0xB970, 0xD25D, 0xB971, 0xD25E, 0xB972, 0xD25F, 0xB973, 0xD260, 0xB974, 0xD261, + 0xB975, 0xD262, 0xB976, 0xD263, 0xB977, 0xD265, 0xB978, 0xD266, 0xB979, 0xD267, 0xB97A, 0xD268, 0xB981, 0xD269, 0xB982, 0xD26A, + 0xB983, 0xD26B, 0xB984, 0xD26C, 0xB985, 0xD26D, 0xB986, 0xD26E, 0xB987, 0xD26F, 0xB988, 0xD270, 0xB989, 0xD271, 0xB98A, 0xD272, + 0xB98B, 0xD273, 0xB98C, 0xD274, 0xB98D, 0xD275, 0xB98E, 0xD276, 0xB98F, 0xD277, 0xB990, 0xD278, 0xB991, 0xD279, 0xB992, 0xD27A, + 0xB993, 0xD27B, 0xB994, 0xD27C, 0xB995, 0xD27D, 0xB996, 0xD27E, 0xB997, 0xD27F, 0xB998, 0xD282, 0xB999, 0xD283, 0xB99A, 0xD285, + 0xB99B, 0xD286, 0xB99C, 0xD287, 0xB99D, 0xD289, 0xB99E, 0xD28A, 0xB99F, 0xD28B, 0xB9A0, 0xD28C, 0xB9A1, 0xBB00, 0xB9A2, 0xBB04, + 0xB9A3, 0xBB0D, 0xB9A4, 0xBB0F, 0xB9A5, 0xBB11, 0xB9A6, 0xBB18, 0xB9A7, 0xBB1C, 0xB9A8, 0xBB20, 0xB9A9, 0xBB29, 0xB9AA, 0xBB2B, + 0xB9AB, 0xBB34, 0xB9AC, 0xBB35, 0xB9AD, 0xBB36, 0xB9AE, 0xBB38, 0xB9AF, 0xBB3B, 0xB9B0, 0xBB3C, 0xB9B1, 0xBB3D, 0xB9B2, 0xBB3E, + 0xB9B3, 0xBB44, 0xB9B4, 0xBB45, 0xB9B5, 0xBB47, 0xB9B6, 0xBB49, 0xB9B7, 0xBB4D, 0xB9B8, 0xBB4F, 0xB9B9, 0xBB50, 0xB9BA, 0xBB54, + 0xB9BB, 0xBB58, 0xB9BC, 0xBB61, 0xB9BD, 0xBB63, 0xB9BE, 0xBB6C, 0xB9BF, 0xBB88, 0xB9C0, 0xBB8C, 0xB9C1, 0xBB90, 0xB9C2, 0xBBA4, + 0xB9C3, 0xBBA8, 0xB9C4, 0xBBAC, 0xB9C5, 0xBBB4, 0xB9C6, 0xBBB7, 0xB9C7, 0xBBC0, 0xB9C8, 0xBBC4, 0xB9C9, 0xBBC8, 0xB9CA, 0xBBD0, + 0xB9CB, 0xBBD3, 0xB9CC, 0xBBF8, 0xB9CD, 0xBBF9, 0xB9CE, 0xBBFC, 0xB9CF, 0xBBFF, 0xB9D0, 0xBC00, 0xB9D1, 0xBC02, 0xB9D2, 0xBC08, + 0xB9D3, 0xBC09, 0xB9D4, 0xBC0B, 0xB9D5, 0xBC0C, 0xB9D6, 0xBC0D, 0xB9D7, 0xBC0F, 0xB9D8, 0xBC11, 0xB9D9, 0xBC14, 0xB9DA, 0xBC15, + 0xB9DB, 0xBC16, 0xB9DC, 0xBC17, 0xB9DD, 0xBC18, 0xB9DE, 0xBC1B, 0xB9DF, 0xBC1C, 0xB9E0, 0xBC1D, 0xB9E1, 0xBC1E, 0xB9E2, 0xBC1F, + 0xB9E3, 0xBC24, 0xB9E4, 0xBC25, 0xB9E5, 0xBC27, 0xB9E6, 0xBC29, 0xB9E7, 0xBC2D, 0xB9E8, 0xBC30, 0xB9E9, 0xBC31, 0xB9EA, 0xBC34, + 0xB9EB, 0xBC38, 0xB9EC, 0xBC40, 0xB9ED, 0xBC41, 0xB9EE, 0xBC43, 0xB9EF, 0xBC44, 0xB9F0, 0xBC45, 0xB9F1, 0xBC49, 0xB9F2, 0xBC4C, + 0xB9F3, 0xBC4D, 0xB9F4, 0xBC50, 0xB9F5, 0xBC5D, 0xB9F6, 0xBC84, 0xB9F7, 0xBC85, 0xB9F8, 0xBC88, 0xB9F9, 0xBC8B, 0xB9FA, 0xBC8C, + 0xB9FB, 0xBC8E, 0xB9FC, 0xBC94, 0xB9FD, 0xBC95, 0xB9FE, 0xBC97, 0xBA41, 0xD28D, 0xBA42, 0xD28E, 0xBA43, 0xD28F, 0xBA44, 0xD292, + 0xBA45, 0xD293, 0xBA46, 0xD294, 0xBA47, 0xD296, 0xBA48, 0xD297, 0xBA49, 0xD298, 0xBA4A, 0xD299, 0xBA4B, 0xD29A, 0xBA4C, 0xD29B, + 0xBA4D, 0xD29D, 0xBA4E, 0xD29E, 0xBA4F, 0xD29F, 0xBA50, 0xD2A1, 0xBA51, 0xD2A2, 0xBA52, 0xD2A3, 0xBA53, 0xD2A5, 0xBA54, 0xD2A6, + 0xBA55, 0xD2A7, 0xBA56, 0xD2A8, 0xBA57, 0xD2A9, 0xBA58, 0xD2AA, 0xBA59, 0xD2AB, 0xBA5A, 0xD2AD, 0xBA61, 0xD2AE, 0xBA62, 0xD2AF, + 0xBA63, 0xD2B0, 0xBA64, 0xD2B2, 0xBA65, 0xD2B3, 0xBA66, 0xD2B4, 0xBA67, 0xD2B5, 0xBA68, 0xD2B6, 0xBA69, 0xD2B7, 0xBA6A, 0xD2BA, + 0xBA6B, 0xD2BB, 0xBA6C, 0xD2BD, 0xBA6D, 0xD2BE, 0xBA6E, 0xD2C1, 0xBA6F, 0xD2C3, 0xBA70, 0xD2C4, 0xBA71, 0xD2C5, 0xBA72, 0xD2C6, + 0xBA73, 0xD2C7, 0xBA74, 0xD2CA, 0xBA75, 0xD2CC, 0xBA76, 0xD2CD, 0xBA77, 0xD2CE, 0xBA78, 0xD2CF, 0xBA79, 0xD2D0, 0xBA7A, 0xD2D1, + 0xBA81, 0xD2D2, 0xBA82, 0xD2D3, 0xBA83, 0xD2D5, 0xBA84, 0xD2D6, 0xBA85, 0xD2D7, 0xBA86, 0xD2D9, 0xBA87, 0xD2DA, 0xBA88, 0xD2DB, + 0xBA89, 0xD2DD, 0xBA8A, 0xD2DE, 0xBA8B, 0xD2DF, 0xBA8C, 0xD2E0, 0xBA8D, 0xD2E1, 0xBA8E, 0xD2E2, 0xBA8F, 0xD2E3, 0xBA90, 0xD2E6, + 0xBA91, 0xD2E7, 0xBA92, 0xD2E8, 0xBA93, 0xD2E9, 0xBA94, 0xD2EA, 0xBA95, 0xD2EB, 0xBA96, 0xD2EC, 0xBA97, 0xD2ED, 0xBA98, 0xD2EE, + 0xBA99, 0xD2EF, 0xBA9A, 0xD2F2, 0xBA9B, 0xD2F3, 0xBA9C, 0xD2F5, 0xBA9D, 0xD2F6, 0xBA9E, 0xD2F7, 0xBA9F, 0xD2F9, 0xBAA0, 0xD2FA, + 0xBAA1, 0xBC99, 0xBAA2, 0xBC9A, 0xBAA3, 0xBCA0, 0xBAA4, 0xBCA1, 0xBAA5, 0xBCA4, 0xBAA6, 0xBCA7, 0xBAA7, 0xBCA8, 0xBAA8, 0xBCB0, + 0xBAA9, 0xBCB1, 0xBAAA, 0xBCB3, 0xBAAB, 0xBCB4, 0xBAAC, 0xBCB5, 0xBAAD, 0xBCBC, 0xBAAE, 0xBCBD, 0xBAAF, 0xBCC0, 0xBAB0, 0xBCC4, + 0xBAB1, 0xBCCD, 0xBAB2, 0xBCCF, 0xBAB3, 0xBCD0, 0xBAB4, 0xBCD1, 0xBAB5, 0xBCD5, 0xBAB6, 0xBCD8, 0xBAB7, 0xBCDC, 0xBAB8, 0xBCF4, + 0xBAB9, 0xBCF5, 0xBABA, 0xBCF6, 0xBABB, 0xBCF8, 0xBABC, 0xBCFC, 0xBABD, 0xBD04, 0xBABE, 0xBD05, 0xBABF, 0xBD07, 0xBAC0, 0xBD09, + 0xBAC1, 0xBD10, 0xBAC2, 0xBD14, 0xBAC3, 0xBD24, 0xBAC4, 0xBD2C, 0xBAC5, 0xBD40, 0xBAC6, 0xBD48, 0xBAC7, 0xBD49, 0xBAC8, 0xBD4C, + 0xBAC9, 0xBD50, 0xBACA, 0xBD58, 0xBACB, 0xBD59, 0xBACC, 0xBD64, 0xBACD, 0xBD68, 0xBACE, 0xBD80, 0xBACF, 0xBD81, 0xBAD0, 0xBD84, + 0xBAD1, 0xBD87, 0xBAD2, 0xBD88, 0xBAD3, 0xBD89, 0xBAD4, 0xBD8A, 0xBAD5, 0xBD90, 0xBAD6, 0xBD91, 0xBAD7, 0xBD93, 0xBAD8, 0xBD95, + 0xBAD9, 0xBD99, 0xBADA, 0xBD9A, 0xBADB, 0xBD9C, 0xBADC, 0xBDA4, 0xBADD, 0xBDB0, 0xBADE, 0xBDB8, 0xBADF, 0xBDD4, 0xBAE0, 0xBDD5, + 0xBAE1, 0xBDD8, 0xBAE2, 0xBDDC, 0xBAE3, 0xBDE9, 0xBAE4, 0xBDF0, 0xBAE5, 0xBDF4, 0xBAE6, 0xBDF8, 0xBAE7, 0xBE00, 0xBAE8, 0xBE03, + 0xBAE9, 0xBE05, 0xBAEA, 0xBE0C, 0xBAEB, 0xBE0D, 0xBAEC, 0xBE10, 0xBAED, 0xBE14, 0xBAEE, 0xBE1C, 0xBAEF, 0xBE1D, 0xBAF0, 0xBE1F, + 0xBAF1, 0xBE44, 0xBAF2, 0xBE45, 0xBAF3, 0xBE48, 0xBAF4, 0xBE4C, 0xBAF5, 0xBE4E, 0xBAF6, 0xBE54, 0xBAF7, 0xBE55, 0xBAF8, 0xBE57, + 0xBAF9, 0xBE59, 0xBAFA, 0xBE5A, 0xBAFB, 0xBE5B, 0xBAFC, 0xBE60, 0xBAFD, 0xBE61, 0xBAFE, 0xBE64, 0xBB41, 0xD2FB, 0xBB42, 0xD2FC, + 0xBB43, 0xD2FD, 0xBB44, 0xD2FE, 0xBB45, 0xD2FF, 0xBB46, 0xD302, 0xBB47, 0xD304, 0xBB48, 0xD306, 0xBB49, 0xD307, 0xBB4A, 0xD308, + 0xBB4B, 0xD309, 0xBB4C, 0xD30A, 0xBB4D, 0xD30B, 0xBB4E, 0xD30F, 0xBB4F, 0xD311, 0xBB50, 0xD312, 0xBB51, 0xD313, 0xBB52, 0xD315, + 0xBB53, 0xD317, 0xBB54, 0xD318, 0xBB55, 0xD319, 0xBB56, 0xD31A, 0xBB57, 0xD31B, 0xBB58, 0xD31E, 0xBB59, 0xD322, 0xBB5A, 0xD323, + 0xBB61, 0xD324, 0xBB62, 0xD326, 0xBB63, 0xD327, 0xBB64, 0xD32A, 0xBB65, 0xD32B, 0xBB66, 0xD32D, 0xBB67, 0xD32E, 0xBB68, 0xD32F, + 0xBB69, 0xD331, 0xBB6A, 0xD332, 0xBB6B, 0xD333, 0xBB6C, 0xD334, 0xBB6D, 0xD335, 0xBB6E, 0xD336, 0xBB6F, 0xD337, 0xBB70, 0xD33A, + 0xBB71, 0xD33E, 0xBB72, 0xD33F, 0xBB73, 0xD340, 0xBB74, 0xD341, 0xBB75, 0xD342, 0xBB76, 0xD343, 0xBB77, 0xD346, 0xBB78, 0xD347, + 0xBB79, 0xD348, 0xBB7A, 0xD349, 0xBB81, 0xD34A, 0xBB82, 0xD34B, 0xBB83, 0xD34C, 0xBB84, 0xD34D, 0xBB85, 0xD34E, 0xBB86, 0xD34F, + 0xBB87, 0xD350, 0xBB88, 0xD351, 0xBB89, 0xD352, 0xBB8A, 0xD353, 0xBB8B, 0xD354, 0xBB8C, 0xD355, 0xBB8D, 0xD356, 0xBB8E, 0xD357, + 0xBB8F, 0xD358, 0xBB90, 0xD359, 0xBB91, 0xD35A, 0xBB92, 0xD35B, 0xBB93, 0xD35C, 0xBB94, 0xD35D, 0xBB95, 0xD35E, 0xBB96, 0xD35F, + 0xBB97, 0xD360, 0xBB98, 0xD361, 0xBB99, 0xD362, 0xBB9A, 0xD363, 0xBB9B, 0xD364, 0xBB9C, 0xD365, 0xBB9D, 0xD366, 0xBB9E, 0xD367, + 0xBB9F, 0xD368, 0xBBA0, 0xD369, 0xBBA1, 0xBE68, 0xBBA2, 0xBE6A, 0xBBA3, 0xBE70, 0xBBA4, 0xBE71, 0xBBA5, 0xBE73, 0xBBA6, 0xBE74, + 0xBBA7, 0xBE75, 0xBBA8, 0xBE7B, 0xBBA9, 0xBE7C, 0xBBAA, 0xBE7D, 0xBBAB, 0xBE80, 0xBBAC, 0xBE84, 0xBBAD, 0xBE8C, 0xBBAE, 0xBE8D, + 0xBBAF, 0xBE8F, 0xBBB0, 0xBE90, 0xBBB1, 0xBE91, 0xBBB2, 0xBE98, 0xBBB3, 0xBE99, 0xBBB4, 0xBEA8, 0xBBB5, 0xBED0, 0xBBB6, 0xBED1, + 0xBBB7, 0xBED4, 0xBBB8, 0xBED7, 0xBBB9, 0xBED8, 0xBBBA, 0xBEE0, 0xBBBB, 0xBEE3, 0xBBBC, 0xBEE4, 0xBBBD, 0xBEE5, 0xBBBE, 0xBEEC, + 0xBBBF, 0xBF01, 0xBBC0, 0xBF08, 0xBBC1, 0xBF09, 0xBBC2, 0xBF18, 0xBBC3, 0xBF19, 0xBBC4, 0xBF1B, 0xBBC5, 0xBF1C, 0xBBC6, 0xBF1D, + 0xBBC7, 0xBF40, 0xBBC8, 0xBF41, 0xBBC9, 0xBF44, 0xBBCA, 0xBF48, 0xBBCB, 0xBF50, 0xBBCC, 0xBF51, 0xBBCD, 0xBF55, 0xBBCE, 0xBF94, + 0xBBCF, 0xBFB0, 0xBBD0, 0xBFC5, 0xBBD1, 0xBFCC, 0xBBD2, 0xBFCD, 0xBBD3, 0xBFD0, 0xBBD4, 0xBFD4, 0xBBD5, 0xBFDC, 0xBBD6, 0xBFDF, + 0xBBD7, 0xBFE1, 0xBBD8, 0xC03C, 0xBBD9, 0xC051, 0xBBDA, 0xC058, 0xBBDB, 0xC05C, 0xBBDC, 0xC060, 0xBBDD, 0xC068, 0xBBDE, 0xC069, + 0xBBDF, 0xC090, 0xBBE0, 0xC091, 0xBBE1, 0xC094, 0xBBE2, 0xC098, 0xBBE3, 0xC0A0, 0xBBE4, 0xC0A1, 0xBBE5, 0xC0A3, 0xBBE6, 0xC0A5, + 0xBBE7, 0xC0AC, 0xBBE8, 0xC0AD, 0xBBE9, 0xC0AF, 0xBBEA, 0xC0B0, 0xBBEB, 0xC0B3, 0xBBEC, 0xC0B4, 0xBBED, 0xC0B5, 0xBBEE, 0xC0B6, + 0xBBEF, 0xC0BC, 0xBBF0, 0xC0BD, 0xBBF1, 0xC0BF, 0xBBF2, 0xC0C0, 0xBBF3, 0xC0C1, 0xBBF4, 0xC0C5, 0xBBF5, 0xC0C8, 0xBBF6, 0xC0C9, + 0xBBF7, 0xC0CC, 0xBBF8, 0xC0D0, 0xBBF9, 0xC0D8, 0xBBFA, 0xC0D9, 0xBBFB, 0xC0DB, 0xBBFC, 0xC0DC, 0xBBFD, 0xC0DD, 0xBBFE, 0xC0E4, + 0xBC41, 0xD36A, 0xBC42, 0xD36B, 0xBC43, 0xD36C, 0xBC44, 0xD36D, 0xBC45, 0xD36E, 0xBC46, 0xD36F, 0xBC47, 0xD370, 0xBC48, 0xD371, + 0xBC49, 0xD372, 0xBC4A, 0xD373, 0xBC4B, 0xD374, 0xBC4C, 0xD375, 0xBC4D, 0xD376, 0xBC4E, 0xD377, 0xBC4F, 0xD378, 0xBC50, 0xD379, + 0xBC51, 0xD37A, 0xBC52, 0xD37B, 0xBC53, 0xD37E, 0xBC54, 0xD37F, 0xBC55, 0xD381, 0xBC56, 0xD382, 0xBC57, 0xD383, 0xBC58, 0xD385, + 0xBC59, 0xD386, 0xBC5A, 0xD387, 0xBC61, 0xD388, 0xBC62, 0xD389, 0xBC63, 0xD38A, 0xBC64, 0xD38B, 0xBC65, 0xD38E, 0xBC66, 0xD392, + 0xBC67, 0xD393, 0xBC68, 0xD394, 0xBC69, 0xD395, 0xBC6A, 0xD396, 0xBC6B, 0xD397, 0xBC6C, 0xD39A, 0xBC6D, 0xD39B, 0xBC6E, 0xD39D, + 0xBC6F, 0xD39E, 0xBC70, 0xD39F, 0xBC71, 0xD3A1, 0xBC72, 0xD3A2, 0xBC73, 0xD3A3, 0xBC74, 0xD3A4, 0xBC75, 0xD3A5, 0xBC76, 0xD3A6, + 0xBC77, 0xD3A7, 0xBC78, 0xD3AA, 0xBC79, 0xD3AC, 0xBC7A, 0xD3AE, 0xBC81, 0xD3AF, 0xBC82, 0xD3B0, 0xBC83, 0xD3B1, 0xBC84, 0xD3B2, + 0xBC85, 0xD3B3, 0xBC86, 0xD3B5, 0xBC87, 0xD3B6, 0xBC88, 0xD3B7, 0xBC89, 0xD3B9, 0xBC8A, 0xD3BA, 0xBC8B, 0xD3BB, 0xBC8C, 0xD3BD, + 0xBC8D, 0xD3BE, 0xBC8E, 0xD3BF, 0xBC8F, 0xD3C0, 0xBC90, 0xD3C1, 0xBC91, 0xD3C2, 0xBC92, 0xD3C3, 0xBC93, 0xD3C6, 0xBC94, 0xD3C7, + 0xBC95, 0xD3CA, 0xBC96, 0xD3CB, 0xBC97, 0xD3CC, 0xBC98, 0xD3CD, 0xBC99, 0xD3CE, 0xBC9A, 0xD3CF, 0xBC9B, 0xD3D1, 0xBC9C, 0xD3D2, + 0xBC9D, 0xD3D3, 0xBC9E, 0xD3D4, 0xBC9F, 0xD3D5, 0xBCA0, 0xD3D6, 0xBCA1, 0xC0E5, 0xBCA2, 0xC0E8, 0xBCA3, 0xC0EC, 0xBCA4, 0xC0F4, + 0xBCA5, 0xC0F5, 0xBCA6, 0xC0F7, 0xBCA7, 0xC0F9, 0xBCA8, 0xC100, 0xBCA9, 0xC104, 0xBCAA, 0xC108, 0xBCAB, 0xC110, 0xBCAC, 0xC115, + 0xBCAD, 0xC11C, 0xBCAE, 0xC11D, 0xBCAF, 0xC11E, 0xBCB0, 0xC11F, 0xBCB1, 0xC120, 0xBCB2, 0xC123, 0xBCB3, 0xC124, 0xBCB4, 0xC126, + 0xBCB5, 0xC127, 0xBCB6, 0xC12C, 0xBCB7, 0xC12D, 0xBCB8, 0xC12F, 0xBCB9, 0xC130, 0xBCBA, 0xC131, 0xBCBB, 0xC136, 0xBCBC, 0xC138, + 0xBCBD, 0xC139, 0xBCBE, 0xC13C, 0xBCBF, 0xC140, 0xBCC0, 0xC148, 0xBCC1, 0xC149, 0xBCC2, 0xC14B, 0xBCC3, 0xC14C, 0xBCC4, 0xC14D, + 0xBCC5, 0xC154, 0xBCC6, 0xC155, 0xBCC7, 0xC158, 0xBCC8, 0xC15C, 0xBCC9, 0xC164, 0xBCCA, 0xC165, 0xBCCB, 0xC167, 0xBCCC, 0xC168, + 0xBCCD, 0xC169, 0xBCCE, 0xC170, 0xBCCF, 0xC174, 0xBCD0, 0xC178, 0xBCD1, 0xC185, 0xBCD2, 0xC18C, 0xBCD3, 0xC18D, 0xBCD4, 0xC18E, + 0xBCD5, 0xC190, 0xBCD6, 0xC194, 0xBCD7, 0xC196, 0xBCD8, 0xC19C, 0xBCD9, 0xC19D, 0xBCDA, 0xC19F, 0xBCDB, 0xC1A1, 0xBCDC, 0xC1A5, + 0xBCDD, 0xC1A8, 0xBCDE, 0xC1A9, 0xBCDF, 0xC1AC, 0xBCE0, 0xC1B0, 0xBCE1, 0xC1BD, 0xBCE2, 0xC1C4, 0xBCE3, 0xC1C8, 0xBCE4, 0xC1CC, + 0xBCE5, 0xC1D4, 0xBCE6, 0xC1D7, 0xBCE7, 0xC1D8, 0xBCE8, 0xC1E0, 0xBCE9, 0xC1E4, 0xBCEA, 0xC1E8, 0xBCEB, 0xC1F0, 0xBCEC, 0xC1F1, + 0xBCED, 0xC1F3, 0xBCEE, 0xC1FC, 0xBCEF, 0xC1FD, 0xBCF0, 0xC200, 0xBCF1, 0xC204, 0xBCF2, 0xC20C, 0xBCF3, 0xC20D, 0xBCF4, 0xC20F, + 0xBCF5, 0xC211, 0xBCF6, 0xC218, 0xBCF7, 0xC219, 0xBCF8, 0xC21C, 0xBCF9, 0xC21F, 0xBCFA, 0xC220, 0xBCFB, 0xC228, 0xBCFC, 0xC229, + 0xBCFD, 0xC22B, 0xBCFE, 0xC22D, 0xBD41, 0xD3D7, 0xBD42, 0xD3D9, 0xBD43, 0xD3DA, 0xBD44, 0xD3DB, 0xBD45, 0xD3DC, 0xBD46, 0xD3DD, + 0xBD47, 0xD3DE, 0xBD48, 0xD3DF, 0xBD49, 0xD3E0, 0xBD4A, 0xD3E2, 0xBD4B, 0xD3E4, 0xBD4C, 0xD3E5, 0xBD4D, 0xD3E6, 0xBD4E, 0xD3E7, + 0xBD4F, 0xD3E8, 0xBD50, 0xD3E9, 0xBD51, 0xD3EA, 0xBD52, 0xD3EB, 0xBD53, 0xD3EE, 0xBD54, 0xD3EF, 0xBD55, 0xD3F1, 0xBD56, 0xD3F2, + 0xBD57, 0xD3F3, 0xBD58, 0xD3F5, 0xBD59, 0xD3F6, 0xBD5A, 0xD3F7, 0xBD61, 0xD3F8, 0xBD62, 0xD3F9, 0xBD63, 0xD3FA, 0xBD64, 0xD3FB, + 0xBD65, 0xD3FE, 0xBD66, 0xD400, 0xBD67, 0xD402, 0xBD68, 0xD403, 0xBD69, 0xD404, 0xBD6A, 0xD405, 0xBD6B, 0xD406, 0xBD6C, 0xD407, + 0xBD6D, 0xD409, 0xBD6E, 0xD40A, 0xBD6F, 0xD40B, 0xBD70, 0xD40C, 0xBD71, 0xD40D, 0xBD72, 0xD40E, 0xBD73, 0xD40F, 0xBD74, 0xD410, + 0xBD75, 0xD411, 0xBD76, 0xD412, 0xBD77, 0xD413, 0xBD78, 0xD414, 0xBD79, 0xD415, 0xBD7A, 0xD416, 0xBD81, 0xD417, 0xBD82, 0xD418, + 0xBD83, 0xD419, 0xBD84, 0xD41A, 0xBD85, 0xD41B, 0xBD86, 0xD41C, 0xBD87, 0xD41E, 0xBD88, 0xD41F, 0xBD89, 0xD420, 0xBD8A, 0xD421, + 0xBD8B, 0xD422, 0xBD8C, 0xD423, 0xBD8D, 0xD424, 0xBD8E, 0xD425, 0xBD8F, 0xD426, 0xBD90, 0xD427, 0xBD91, 0xD428, 0xBD92, 0xD429, + 0xBD93, 0xD42A, 0xBD94, 0xD42B, 0xBD95, 0xD42C, 0xBD96, 0xD42D, 0xBD97, 0xD42E, 0xBD98, 0xD42F, 0xBD99, 0xD430, 0xBD9A, 0xD431, + 0xBD9B, 0xD432, 0xBD9C, 0xD433, 0xBD9D, 0xD434, 0xBD9E, 0xD435, 0xBD9F, 0xD436, 0xBDA0, 0xD437, 0xBDA1, 0xC22F, 0xBDA2, 0xC231, + 0xBDA3, 0xC232, 0xBDA4, 0xC234, 0xBDA5, 0xC248, 0xBDA6, 0xC250, 0xBDA7, 0xC251, 0xBDA8, 0xC254, 0xBDA9, 0xC258, 0xBDAA, 0xC260, + 0xBDAB, 0xC265, 0xBDAC, 0xC26C, 0xBDAD, 0xC26D, 0xBDAE, 0xC270, 0xBDAF, 0xC274, 0xBDB0, 0xC27C, 0xBDB1, 0xC27D, 0xBDB2, 0xC27F, + 0xBDB3, 0xC281, 0xBDB4, 0xC288, 0xBDB5, 0xC289, 0xBDB6, 0xC290, 0xBDB7, 0xC298, 0xBDB8, 0xC29B, 0xBDB9, 0xC29D, 0xBDBA, 0xC2A4, + 0xBDBB, 0xC2A5, 0xBDBC, 0xC2A8, 0xBDBD, 0xC2AC, 0xBDBE, 0xC2AD, 0xBDBF, 0xC2B4, 0xBDC0, 0xC2B5, 0xBDC1, 0xC2B7, 0xBDC2, 0xC2B9, + 0xBDC3, 0xC2DC, 0xBDC4, 0xC2DD, 0xBDC5, 0xC2E0, 0xBDC6, 0xC2E3, 0xBDC7, 0xC2E4, 0xBDC8, 0xC2EB, 0xBDC9, 0xC2EC, 0xBDCA, 0xC2ED, + 0xBDCB, 0xC2EF, 0xBDCC, 0xC2F1, 0xBDCD, 0xC2F6, 0xBDCE, 0xC2F8, 0xBDCF, 0xC2F9, 0xBDD0, 0xC2FB, 0xBDD1, 0xC2FC, 0xBDD2, 0xC300, + 0xBDD3, 0xC308, 0xBDD4, 0xC309, 0xBDD5, 0xC30C, 0xBDD6, 0xC30D, 0xBDD7, 0xC313, 0xBDD8, 0xC314, 0xBDD9, 0xC315, 0xBDDA, 0xC318, + 0xBDDB, 0xC31C, 0xBDDC, 0xC324, 0xBDDD, 0xC325, 0xBDDE, 0xC328, 0xBDDF, 0xC329, 0xBDE0, 0xC345, 0xBDE1, 0xC368, 0xBDE2, 0xC369, + 0xBDE3, 0xC36C, 0xBDE4, 0xC370, 0xBDE5, 0xC372, 0xBDE6, 0xC378, 0xBDE7, 0xC379, 0xBDE8, 0xC37C, 0xBDE9, 0xC37D, 0xBDEA, 0xC384, + 0xBDEB, 0xC388, 0xBDEC, 0xC38C, 0xBDED, 0xC3C0, 0xBDEE, 0xC3D8, 0xBDEF, 0xC3D9, 0xBDF0, 0xC3DC, 0xBDF1, 0xC3DF, 0xBDF2, 0xC3E0, + 0xBDF3, 0xC3E2, 0xBDF4, 0xC3E8, 0xBDF5, 0xC3E9, 0xBDF6, 0xC3ED, 0xBDF7, 0xC3F4, 0xBDF8, 0xC3F5, 0xBDF9, 0xC3F8, 0xBDFA, 0xC408, + 0xBDFB, 0xC410, 0xBDFC, 0xC424, 0xBDFD, 0xC42C, 0xBDFE, 0xC430, 0xBE41, 0xD438, 0xBE42, 0xD439, 0xBE43, 0xD43A, 0xBE44, 0xD43B, + 0xBE45, 0xD43C, 0xBE46, 0xD43D, 0xBE47, 0xD43E, 0xBE48, 0xD43F, 0xBE49, 0xD441, 0xBE4A, 0xD442, 0xBE4B, 0xD443, 0xBE4C, 0xD445, + 0xBE4D, 0xD446, 0xBE4E, 0xD447, 0xBE4F, 0xD448, 0xBE50, 0xD449, 0xBE51, 0xD44A, 0xBE52, 0xD44B, 0xBE53, 0xD44C, 0xBE54, 0xD44D, + 0xBE55, 0xD44E, 0xBE56, 0xD44F, 0xBE57, 0xD450, 0xBE58, 0xD451, 0xBE59, 0xD452, 0xBE5A, 0xD453, 0xBE61, 0xD454, 0xBE62, 0xD455, + 0xBE63, 0xD456, 0xBE64, 0xD457, 0xBE65, 0xD458, 0xBE66, 0xD459, 0xBE67, 0xD45A, 0xBE68, 0xD45B, 0xBE69, 0xD45D, 0xBE6A, 0xD45E, + 0xBE6B, 0xD45F, 0xBE6C, 0xD461, 0xBE6D, 0xD462, 0xBE6E, 0xD463, 0xBE6F, 0xD465, 0xBE70, 0xD466, 0xBE71, 0xD467, 0xBE72, 0xD468, + 0xBE73, 0xD469, 0xBE74, 0xD46A, 0xBE75, 0xD46B, 0xBE76, 0xD46C, 0xBE77, 0xD46E, 0xBE78, 0xD470, 0xBE79, 0xD471, 0xBE7A, 0xD472, + 0xBE81, 0xD473, 0xBE82, 0xD474, 0xBE83, 0xD475, 0xBE84, 0xD476, 0xBE85, 0xD477, 0xBE86, 0xD47A, 0xBE87, 0xD47B, 0xBE88, 0xD47D, + 0xBE89, 0xD47E, 0xBE8A, 0xD481, 0xBE8B, 0xD483, 0xBE8C, 0xD484, 0xBE8D, 0xD485, 0xBE8E, 0xD486, 0xBE8F, 0xD487, 0xBE90, 0xD48A, + 0xBE91, 0xD48C, 0xBE92, 0xD48E, 0xBE93, 0xD48F, 0xBE94, 0xD490, 0xBE95, 0xD491, 0xBE96, 0xD492, 0xBE97, 0xD493, 0xBE98, 0xD495, + 0xBE99, 0xD496, 0xBE9A, 0xD497, 0xBE9B, 0xD498, 0xBE9C, 0xD499, 0xBE9D, 0xD49A, 0xBE9E, 0xD49B, 0xBE9F, 0xD49C, 0xBEA0, 0xD49D, + 0xBEA1, 0xC434, 0xBEA2, 0xC43C, 0xBEA3, 0xC43D, 0xBEA4, 0xC448, 0xBEA5, 0xC464, 0xBEA6, 0xC465, 0xBEA7, 0xC468, 0xBEA8, 0xC46C, + 0xBEA9, 0xC474, 0xBEAA, 0xC475, 0xBEAB, 0xC479, 0xBEAC, 0xC480, 0xBEAD, 0xC494, 0xBEAE, 0xC49C, 0xBEAF, 0xC4B8, 0xBEB0, 0xC4BC, + 0xBEB1, 0xC4E9, 0xBEB2, 0xC4F0, 0xBEB3, 0xC4F1, 0xBEB4, 0xC4F4, 0xBEB5, 0xC4F8, 0xBEB6, 0xC4FA, 0xBEB7, 0xC4FF, 0xBEB8, 0xC500, + 0xBEB9, 0xC501, 0xBEBA, 0xC50C, 0xBEBB, 0xC510, 0xBEBC, 0xC514, 0xBEBD, 0xC51C, 0xBEBE, 0xC528, 0xBEBF, 0xC529, 0xBEC0, 0xC52C, + 0xBEC1, 0xC530, 0xBEC2, 0xC538, 0xBEC3, 0xC539, 0xBEC4, 0xC53B, 0xBEC5, 0xC53D, 0xBEC6, 0xC544, 0xBEC7, 0xC545, 0xBEC8, 0xC548, + 0xBEC9, 0xC549, 0xBECA, 0xC54A, 0xBECB, 0xC54C, 0xBECC, 0xC54D, 0xBECD, 0xC54E, 0xBECE, 0xC553, 0xBECF, 0xC554, 0xBED0, 0xC555, + 0xBED1, 0xC557, 0xBED2, 0xC558, 0xBED3, 0xC559, 0xBED4, 0xC55D, 0xBED5, 0xC55E, 0xBED6, 0xC560, 0xBED7, 0xC561, 0xBED8, 0xC564, + 0xBED9, 0xC568, 0xBEDA, 0xC570, 0xBEDB, 0xC571, 0xBEDC, 0xC573, 0xBEDD, 0xC574, 0xBEDE, 0xC575, 0xBEDF, 0xC57C, 0xBEE0, 0xC57D, + 0xBEE1, 0xC580, 0xBEE2, 0xC584, 0xBEE3, 0xC587, 0xBEE4, 0xC58C, 0xBEE5, 0xC58D, 0xBEE6, 0xC58F, 0xBEE7, 0xC591, 0xBEE8, 0xC595, + 0xBEE9, 0xC597, 0xBEEA, 0xC598, 0xBEEB, 0xC59C, 0xBEEC, 0xC5A0, 0xBEED, 0xC5A9, 0xBEEE, 0xC5B4, 0xBEEF, 0xC5B5, 0xBEF0, 0xC5B8, + 0xBEF1, 0xC5B9, 0xBEF2, 0xC5BB, 0xBEF3, 0xC5BC, 0xBEF4, 0xC5BD, 0xBEF5, 0xC5BE, 0xBEF6, 0xC5C4, 0xBEF7, 0xC5C5, 0xBEF8, 0xC5C6, + 0xBEF9, 0xC5C7, 0xBEFA, 0xC5C8, 0xBEFB, 0xC5C9, 0xBEFC, 0xC5CA, 0xBEFD, 0xC5CC, 0xBEFE, 0xC5CE, 0xBF41, 0xD49E, 0xBF42, 0xD49F, + 0xBF43, 0xD4A0, 0xBF44, 0xD4A1, 0xBF45, 0xD4A2, 0xBF46, 0xD4A3, 0xBF47, 0xD4A4, 0xBF48, 0xD4A5, 0xBF49, 0xD4A6, 0xBF4A, 0xD4A7, + 0xBF4B, 0xD4A8, 0xBF4C, 0xD4AA, 0xBF4D, 0xD4AB, 0xBF4E, 0xD4AC, 0xBF4F, 0xD4AD, 0xBF50, 0xD4AE, 0xBF51, 0xD4AF, 0xBF52, 0xD4B0, + 0xBF53, 0xD4B1, 0xBF54, 0xD4B2, 0xBF55, 0xD4B3, 0xBF56, 0xD4B4, 0xBF57, 0xD4B5, 0xBF58, 0xD4B6, 0xBF59, 0xD4B7, 0xBF5A, 0xD4B8, + 0xBF61, 0xD4B9, 0xBF62, 0xD4BA, 0xBF63, 0xD4BB, 0xBF64, 0xD4BC, 0xBF65, 0xD4BD, 0xBF66, 0xD4BE, 0xBF67, 0xD4BF, 0xBF68, 0xD4C0, + 0xBF69, 0xD4C1, 0xBF6A, 0xD4C2, 0xBF6B, 0xD4C3, 0xBF6C, 0xD4C4, 0xBF6D, 0xD4C5, 0xBF6E, 0xD4C6, 0xBF6F, 0xD4C7, 0xBF70, 0xD4C8, + 0xBF71, 0xD4C9, 0xBF72, 0xD4CA, 0xBF73, 0xD4CB, 0xBF74, 0xD4CD, 0xBF75, 0xD4CE, 0xBF76, 0xD4CF, 0xBF77, 0xD4D1, 0xBF78, 0xD4D2, + 0xBF79, 0xD4D3, 0xBF7A, 0xD4D5, 0xBF81, 0xD4D6, 0xBF82, 0xD4D7, 0xBF83, 0xD4D8, 0xBF84, 0xD4D9, 0xBF85, 0xD4DA, 0xBF86, 0xD4DB, + 0xBF87, 0xD4DD, 0xBF88, 0xD4DE, 0xBF89, 0xD4E0, 0xBF8A, 0xD4E1, 0xBF8B, 0xD4E2, 0xBF8C, 0xD4E3, 0xBF8D, 0xD4E4, 0xBF8E, 0xD4E5, + 0xBF8F, 0xD4E6, 0xBF90, 0xD4E7, 0xBF91, 0xD4E9, 0xBF92, 0xD4EA, 0xBF93, 0xD4EB, 0xBF94, 0xD4ED, 0xBF95, 0xD4EE, 0xBF96, 0xD4EF, + 0xBF97, 0xD4F1, 0xBF98, 0xD4F2, 0xBF99, 0xD4F3, 0xBF9A, 0xD4F4, 0xBF9B, 0xD4F5, 0xBF9C, 0xD4F6, 0xBF9D, 0xD4F7, 0xBF9E, 0xD4F9, + 0xBF9F, 0xD4FA, 0xBFA0, 0xD4FC, 0xBFA1, 0xC5D0, 0xBFA2, 0xC5D1, 0xBFA3, 0xC5D4, 0xBFA4, 0xC5D8, 0xBFA5, 0xC5E0, 0xBFA6, 0xC5E1, + 0xBFA7, 0xC5E3, 0xBFA8, 0xC5E5, 0xBFA9, 0xC5EC, 0xBFAA, 0xC5ED, 0xBFAB, 0xC5EE, 0xBFAC, 0xC5F0, 0xBFAD, 0xC5F4, 0xBFAE, 0xC5F6, + 0xBFAF, 0xC5F7, 0xBFB0, 0xC5FC, 0xBFB1, 0xC5FD, 0xBFB2, 0xC5FE, 0xBFB3, 0xC5FF, 0xBFB4, 0xC600, 0xBFB5, 0xC601, 0xBFB6, 0xC605, + 0xBFB7, 0xC606, 0xBFB8, 0xC607, 0xBFB9, 0xC608, 0xBFBA, 0xC60C, 0xBFBB, 0xC610, 0xBFBC, 0xC618, 0xBFBD, 0xC619, 0xBFBE, 0xC61B, + 0xBFBF, 0xC61C, 0xBFC0, 0xC624, 0xBFC1, 0xC625, 0xBFC2, 0xC628, 0xBFC3, 0xC62C, 0xBFC4, 0xC62D, 0xBFC5, 0xC62E, 0xBFC6, 0xC630, + 0xBFC7, 0xC633, 0xBFC8, 0xC634, 0xBFC9, 0xC635, 0xBFCA, 0xC637, 0xBFCB, 0xC639, 0xBFCC, 0xC63B, 0xBFCD, 0xC640, 0xBFCE, 0xC641, + 0xBFCF, 0xC644, 0xBFD0, 0xC648, 0xBFD1, 0xC650, 0xBFD2, 0xC651, 0xBFD3, 0xC653, 0xBFD4, 0xC654, 0xBFD5, 0xC655, 0xBFD6, 0xC65C, + 0xBFD7, 0xC65D, 0xBFD8, 0xC660, 0xBFD9, 0xC66C, 0xBFDA, 0xC66F, 0xBFDB, 0xC671, 0xBFDC, 0xC678, 0xBFDD, 0xC679, 0xBFDE, 0xC67C, + 0xBFDF, 0xC680, 0xBFE0, 0xC688, 0xBFE1, 0xC689, 0xBFE2, 0xC68B, 0xBFE3, 0xC68D, 0xBFE4, 0xC694, 0xBFE5, 0xC695, 0xBFE6, 0xC698, + 0xBFE7, 0xC69C, 0xBFE8, 0xC6A4, 0xBFE9, 0xC6A5, 0xBFEA, 0xC6A7, 0xBFEB, 0xC6A9, 0xBFEC, 0xC6B0, 0xBFED, 0xC6B1, 0xBFEE, 0xC6B4, + 0xBFEF, 0xC6B8, 0xBFF0, 0xC6B9, 0xBFF1, 0xC6BA, 0xBFF2, 0xC6C0, 0xBFF3, 0xC6C1, 0xBFF4, 0xC6C3, 0xBFF5, 0xC6C5, 0xBFF6, 0xC6CC, + 0xBFF7, 0xC6CD, 0xBFF8, 0xC6D0, 0xBFF9, 0xC6D4, 0xBFFA, 0xC6DC, 0xBFFB, 0xC6DD, 0xBFFC, 0xC6E0, 0xBFFD, 0xC6E1, 0xBFFE, 0xC6E8, + 0xC041, 0xD4FE, 0xC042, 0xD4FF, 0xC043, 0xD500, 0xC044, 0xD501, 0xC045, 0xD502, 0xC046, 0xD503, 0xC047, 0xD505, 0xC048, 0xD506, + 0xC049, 0xD507, 0xC04A, 0xD509, 0xC04B, 0xD50A, 0xC04C, 0xD50B, 0xC04D, 0xD50D, 0xC04E, 0xD50E, 0xC04F, 0xD50F, 0xC050, 0xD510, + 0xC051, 0xD511, 0xC052, 0xD512, 0xC053, 0xD513, 0xC054, 0xD516, 0xC055, 0xD518, 0xC056, 0xD519, 0xC057, 0xD51A, 0xC058, 0xD51B, + 0xC059, 0xD51C, 0xC05A, 0xD51D, 0xC061, 0xD51E, 0xC062, 0xD51F, 0xC063, 0xD520, 0xC064, 0xD521, 0xC065, 0xD522, 0xC066, 0xD523, + 0xC067, 0xD524, 0xC068, 0xD525, 0xC069, 0xD526, 0xC06A, 0xD527, 0xC06B, 0xD528, 0xC06C, 0xD529, 0xC06D, 0xD52A, 0xC06E, 0xD52B, + 0xC06F, 0xD52C, 0xC070, 0xD52D, 0xC071, 0xD52E, 0xC072, 0xD52F, 0xC073, 0xD530, 0xC074, 0xD531, 0xC075, 0xD532, 0xC076, 0xD533, + 0xC077, 0xD534, 0xC078, 0xD535, 0xC079, 0xD536, 0xC07A, 0xD537, 0xC081, 0xD538, 0xC082, 0xD539, 0xC083, 0xD53A, 0xC084, 0xD53B, + 0xC085, 0xD53E, 0xC086, 0xD53F, 0xC087, 0xD541, 0xC088, 0xD542, 0xC089, 0xD543, 0xC08A, 0xD545, 0xC08B, 0xD546, 0xC08C, 0xD547, + 0xC08D, 0xD548, 0xC08E, 0xD549, 0xC08F, 0xD54A, 0xC090, 0xD54B, 0xC091, 0xD54E, 0xC092, 0xD550, 0xC093, 0xD552, 0xC094, 0xD553, + 0xC095, 0xD554, 0xC096, 0xD555, 0xC097, 0xD556, 0xC098, 0xD557, 0xC099, 0xD55A, 0xC09A, 0xD55B, 0xC09B, 0xD55D, 0xC09C, 0xD55E, + 0xC09D, 0xD55F, 0xC09E, 0xD561, 0xC09F, 0xD562, 0xC0A0, 0xD563, 0xC0A1, 0xC6E9, 0xC0A2, 0xC6EC, 0xC0A3, 0xC6F0, 0xC0A4, 0xC6F8, + 0xC0A5, 0xC6F9, 0xC0A6, 0xC6FD, 0xC0A7, 0xC704, 0xC0A8, 0xC705, 0xC0A9, 0xC708, 0xC0AA, 0xC70C, 0xC0AB, 0xC714, 0xC0AC, 0xC715, + 0xC0AD, 0xC717, 0xC0AE, 0xC719, 0xC0AF, 0xC720, 0xC0B0, 0xC721, 0xC0B1, 0xC724, 0xC0B2, 0xC728, 0xC0B3, 0xC730, 0xC0B4, 0xC731, + 0xC0B5, 0xC733, 0xC0B6, 0xC735, 0xC0B7, 0xC737, 0xC0B8, 0xC73C, 0xC0B9, 0xC73D, 0xC0BA, 0xC740, 0xC0BB, 0xC744, 0xC0BC, 0xC74A, + 0xC0BD, 0xC74C, 0xC0BE, 0xC74D, 0xC0BF, 0xC74F, 0xC0C0, 0xC751, 0xC0C1, 0xC752, 0xC0C2, 0xC753, 0xC0C3, 0xC754, 0xC0C4, 0xC755, + 0xC0C5, 0xC756, 0xC0C6, 0xC757, 0xC0C7, 0xC758, 0xC0C8, 0xC75C, 0xC0C9, 0xC760, 0xC0CA, 0xC768, 0xC0CB, 0xC76B, 0xC0CC, 0xC774, + 0xC0CD, 0xC775, 0xC0CE, 0xC778, 0xC0CF, 0xC77C, 0xC0D0, 0xC77D, 0xC0D1, 0xC77E, 0xC0D2, 0xC783, 0xC0D3, 0xC784, 0xC0D4, 0xC785, + 0xC0D5, 0xC787, 0xC0D6, 0xC788, 0xC0D7, 0xC789, 0xC0D8, 0xC78A, 0xC0D9, 0xC78E, 0xC0DA, 0xC790, 0xC0DB, 0xC791, 0xC0DC, 0xC794, + 0xC0DD, 0xC796, 0xC0DE, 0xC797, 0xC0DF, 0xC798, 0xC0E0, 0xC79A, 0xC0E1, 0xC7A0, 0xC0E2, 0xC7A1, 0xC0E3, 0xC7A3, 0xC0E4, 0xC7A4, + 0xC0E5, 0xC7A5, 0xC0E6, 0xC7A6, 0xC0E7, 0xC7AC, 0xC0E8, 0xC7AD, 0xC0E9, 0xC7B0, 0xC0EA, 0xC7B4, 0xC0EB, 0xC7BC, 0xC0EC, 0xC7BD, + 0xC0ED, 0xC7BF, 0xC0EE, 0xC7C0, 0xC0EF, 0xC7C1, 0xC0F0, 0xC7C8, 0xC0F1, 0xC7C9, 0xC0F2, 0xC7CC, 0xC0F3, 0xC7CE, 0xC0F4, 0xC7D0, + 0xC0F5, 0xC7D8, 0xC0F6, 0xC7DD, 0xC0F7, 0xC7E4, 0xC0F8, 0xC7E8, 0xC0F9, 0xC7EC, 0xC0FA, 0xC800, 0xC0FB, 0xC801, 0xC0FC, 0xC804, + 0xC0FD, 0xC808, 0xC0FE, 0xC80A, 0xC141, 0xD564, 0xC142, 0xD566, 0xC143, 0xD567, 0xC144, 0xD56A, 0xC145, 0xD56C, 0xC146, 0xD56E, + 0xC147, 0xD56F, 0xC148, 0xD570, 0xC149, 0xD571, 0xC14A, 0xD572, 0xC14B, 0xD573, 0xC14C, 0xD576, 0xC14D, 0xD577, 0xC14E, 0xD579, + 0xC14F, 0xD57A, 0xC150, 0xD57B, 0xC151, 0xD57D, 0xC152, 0xD57E, 0xC153, 0xD57F, 0xC154, 0xD580, 0xC155, 0xD581, 0xC156, 0xD582, + 0xC157, 0xD583, 0xC158, 0xD586, 0xC159, 0xD58A, 0xC15A, 0xD58B, 0xC161, 0xD58C, 0xC162, 0xD58D, 0xC163, 0xD58E, 0xC164, 0xD58F, + 0xC165, 0xD591, 0xC166, 0xD592, 0xC167, 0xD593, 0xC168, 0xD594, 0xC169, 0xD595, 0xC16A, 0xD596, 0xC16B, 0xD597, 0xC16C, 0xD598, + 0xC16D, 0xD599, 0xC16E, 0xD59A, 0xC16F, 0xD59B, 0xC170, 0xD59C, 0xC171, 0xD59D, 0xC172, 0xD59E, 0xC173, 0xD59F, 0xC174, 0xD5A0, + 0xC175, 0xD5A1, 0xC176, 0xD5A2, 0xC177, 0xD5A3, 0xC178, 0xD5A4, 0xC179, 0xD5A6, 0xC17A, 0xD5A7, 0xC181, 0xD5A8, 0xC182, 0xD5A9, + 0xC183, 0xD5AA, 0xC184, 0xD5AB, 0xC185, 0xD5AC, 0xC186, 0xD5AD, 0xC187, 0xD5AE, 0xC188, 0xD5AF, 0xC189, 0xD5B0, 0xC18A, 0xD5B1, + 0xC18B, 0xD5B2, 0xC18C, 0xD5B3, 0xC18D, 0xD5B4, 0xC18E, 0xD5B5, 0xC18F, 0xD5B6, 0xC190, 0xD5B7, 0xC191, 0xD5B8, 0xC192, 0xD5B9, + 0xC193, 0xD5BA, 0xC194, 0xD5BB, 0xC195, 0xD5BC, 0xC196, 0xD5BD, 0xC197, 0xD5BE, 0xC198, 0xD5BF, 0xC199, 0xD5C0, 0xC19A, 0xD5C1, + 0xC19B, 0xD5C2, 0xC19C, 0xD5C3, 0xC19D, 0xD5C4, 0xC19E, 0xD5C5, 0xC19F, 0xD5C6, 0xC1A0, 0xD5C7, 0xC1A1, 0xC810, 0xC1A2, 0xC811, + 0xC1A3, 0xC813, 0xC1A4, 0xC815, 0xC1A5, 0xC816, 0xC1A6, 0xC81C, 0xC1A7, 0xC81D, 0xC1A8, 0xC820, 0xC1A9, 0xC824, 0xC1AA, 0xC82C, + 0xC1AB, 0xC82D, 0xC1AC, 0xC82F, 0xC1AD, 0xC831, 0xC1AE, 0xC838, 0xC1AF, 0xC83C, 0xC1B0, 0xC840, 0xC1B1, 0xC848, 0xC1B2, 0xC849, + 0xC1B3, 0xC84C, 0xC1B4, 0xC84D, 0xC1B5, 0xC854, 0xC1B6, 0xC870, 0xC1B7, 0xC871, 0xC1B8, 0xC874, 0xC1B9, 0xC878, 0xC1BA, 0xC87A, + 0xC1BB, 0xC880, 0xC1BC, 0xC881, 0xC1BD, 0xC883, 0xC1BE, 0xC885, 0xC1BF, 0xC886, 0xC1C0, 0xC887, 0xC1C1, 0xC88B, 0xC1C2, 0xC88C, + 0xC1C3, 0xC88D, 0xC1C4, 0xC894, 0xC1C5, 0xC89D, 0xC1C6, 0xC89F, 0xC1C7, 0xC8A1, 0xC1C8, 0xC8A8, 0xC1C9, 0xC8BC, 0xC1CA, 0xC8BD, + 0xC1CB, 0xC8C4, 0xC1CC, 0xC8C8, 0xC1CD, 0xC8CC, 0xC1CE, 0xC8D4, 0xC1CF, 0xC8D5, 0xC1D0, 0xC8D7, 0xC1D1, 0xC8D9, 0xC1D2, 0xC8E0, + 0xC1D3, 0xC8E1, 0xC1D4, 0xC8E4, 0xC1D5, 0xC8F5, 0xC1D6, 0xC8FC, 0xC1D7, 0xC8FD, 0xC1D8, 0xC900, 0xC1D9, 0xC904, 0xC1DA, 0xC905, + 0xC1DB, 0xC906, 0xC1DC, 0xC90C, 0xC1DD, 0xC90D, 0xC1DE, 0xC90F, 0xC1DF, 0xC911, 0xC1E0, 0xC918, 0xC1E1, 0xC92C, 0xC1E2, 0xC934, + 0xC1E3, 0xC950, 0xC1E4, 0xC951, 0xC1E5, 0xC954, 0xC1E6, 0xC958, 0xC1E7, 0xC960, 0xC1E8, 0xC961, 0xC1E9, 0xC963, 0xC1EA, 0xC96C, + 0xC1EB, 0xC970, 0xC1EC, 0xC974, 0xC1ED, 0xC97C, 0xC1EE, 0xC988, 0xC1EF, 0xC989, 0xC1F0, 0xC98C, 0xC1F1, 0xC990, 0xC1F2, 0xC998, + 0xC1F3, 0xC999, 0xC1F4, 0xC99B, 0xC1F5, 0xC99D, 0xC1F6, 0xC9C0, 0xC1F7, 0xC9C1, 0xC1F8, 0xC9C4, 0xC1F9, 0xC9C7, 0xC1FA, 0xC9C8, + 0xC1FB, 0xC9CA, 0xC1FC, 0xC9D0, 0xC1FD, 0xC9D1, 0xC1FE, 0xC9D3, 0xC241, 0xD5CA, 0xC242, 0xD5CB, 0xC243, 0xD5CD, 0xC244, 0xD5CE, + 0xC245, 0xD5CF, 0xC246, 0xD5D1, 0xC247, 0xD5D3, 0xC248, 0xD5D4, 0xC249, 0xD5D5, 0xC24A, 0xD5D6, 0xC24B, 0xD5D7, 0xC24C, 0xD5DA, + 0xC24D, 0xD5DC, 0xC24E, 0xD5DE, 0xC24F, 0xD5DF, 0xC250, 0xD5E0, 0xC251, 0xD5E1, 0xC252, 0xD5E2, 0xC253, 0xD5E3, 0xC254, 0xD5E6, + 0xC255, 0xD5E7, 0xC256, 0xD5E9, 0xC257, 0xD5EA, 0xC258, 0xD5EB, 0xC259, 0xD5ED, 0xC25A, 0xD5EE, 0xC261, 0xD5EF, 0xC262, 0xD5F0, + 0xC263, 0xD5F1, 0xC264, 0xD5F2, 0xC265, 0xD5F3, 0xC266, 0xD5F6, 0xC267, 0xD5F8, 0xC268, 0xD5FA, 0xC269, 0xD5FB, 0xC26A, 0xD5FC, + 0xC26B, 0xD5FD, 0xC26C, 0xD5FE, 0xC26D, 0xD5FF, 0xC26E, 0xD602, 0xC26F, 0xD603, 0xC270, 0xD605, 0xC271, 0xD606, 0xC272, 0xD607, + 0xC273, 0xD609, 0xC274, 0xD60A, 0xC275, 0xD60B, 0xC276, 0xD60C, 0xC277, 0xD60D, 0xC278, 0xD60E, 0xC279, 0xD60F, 0xC27A, 0xD612, + 0xC281, 0xD616, 0xC282, 0xD617, 0xC283, 0xD618, 0xC284, 0xD619, 0xC285, 0xD61A, 0xC286, 0xD61B, 0xC287, 0xD61D, 0xC288, 0xD61E, + 0xC289, 0xD61F, 0xC28A, 0xD621, 0xC28B, 0xD622, 0xC28C, 0xD623, 0xC28D, 0xD625, 0xC28E, 0xD626, 0xC28F, 0xD627, 0xC290, 0xD628, + 0xC291, 0xD629, 0xC292, 0xD62A, 0xC293, 0xD62B, 0xC294, 0xD62C, 0xC295, 0xD62E, 0xC296, 0xD62F, 0xC297, 0xD630, 0xC298, 0xD631, + 0xC299, 0xD632, 0xC29A, 0xD633, 0xC29B, 0xD634, 0xC29C, 0xD635, 0xC29D, 0xD636, 0xC29E, 0xD637, 0xC29F, 0xD63A, 0xC2A0, 0xD63B, + 0xC2A1, 0xC9D5, 0xC2A2, 0xC9D6, 0xC2A3, 0xC9D9, 0xC2A4, 0xC9DA, 0xC2A5, 0xC9DC, 0xC2A6, 0xC9DD, 0xC2A7, 0xC9E0, 0xC2A8, 0xC9E2, + 0xC2A9, 0xC9E4, 0xC2AA, 0xC9E7, 0xC2AB, 0xC9EC, 0xC2AC, 0xC9ED, 0xC2AD, 0xC9EF, 0xC2AE, 0xC9F0, 0xC2AF, 0xC9F1, 0xC2B0, 0xC9F8, + 0xC2B1, 0xC9F9, 0xC2B2, 0xC9FC, 0xC2B3, 0xCA00, 0xC2B4, 0xCA08, 0xC2B5, 0xCA09, 0xC2B6, 0xCA0B, 0xC2B7, 0xCA0C, 0xC2B8, 0xCA0D, + 0xC2B9, 0xCA14, 0xC2BA, 0xCA18, 0xC2BB, 0xCA29, 0xC2BC, 0xCA4C, 0xC2BD, 0xCA4D, 0xC2BE, 0xCA50, 0xC2BF, 0xCA54, 0xC2C0, 0xCA5C, + 0xC2C1, 0xCA5D, 0xC2C2, 0xCA5F, 0xC2C3, 0xCA60, 0xC2C4, 0xCA61, 0xC2C5, 0xCA68, 0xC2C6, 0xCA7D, 0xC2C7, 0xCA84, 0xC2C8, 0xCA98, + 0xC2C9, 0xCABC, 0xC2CA, 0xCABD, 0xC2CB, 0xCAC0, 0xC2CC, 0xCAC4, 0xC2CD, 0xCACC, 0xC2CE, 0xCACD, 0xC2CF, 0xCACF, 0xC2D0, 0xCAD1, + 0xC2D1, 0xCAD3, 0xC2D2, 0xCAD8, 0xC2D3, 0xCAD9, 0xC2D4, 0xCAE0, 0xC2D5, 0xCAEC, 0xC2D6, 0xCAF4, 0xC2D7, 0xCB08, 0xC2D8, 0xCB10, + 0xC2D9, 0xCB14, 0xC2DA, 0xCB18, 0xC2DB, 0xCB20, 0xC2DC, 0xCB21, 0xC2DD, 0xCB41, 0xC2DE, 0xCB48, 0xC2DF, 0xCB49, 0xC2E0, 0xCB4C, + 0xC2E1, 0xCB50, 0xC2E2, 0xCB58, 0xC2E3, 0xCB59, 0xC2E4, 0xCB5D, 0xC2E5, 0xCB64, 0xC2E6, 0xCB78, 0xC2E7, 0xCB79, 0xC2E8, 0xCB9C, + 0xC2E9, 0xCBB8, 0xC2EA, 0xCBD4, 0xC2EB, 0xCBE4, 0xC2EC, 0xCBE7, 0xC2ED, 0xCBE9, 0xC2EE, 0xCC0C, 0xC2EF, 0xCC0D, 0xC2F0, 0xCC10, + 0xC2F1, 0xCC14, 0xC2F2, 0xCC1C, 0xC2F3, 0xCC1D, 0xC2F4, 0xCC21, 0xC2F5, 0xCC22, 0xC2F6, 0xCC27, 0xC2F7, 0xCC28, 0xC2F8, 0xCC29, + 0xC2F9, 0xCC2C, 0xC2FA, 0xCC2E, 0xC2FB, 0xCC30, 0xC2FC, 0xCC38, 0xC2FD, 0xCC39, 0xC2FE, 0xCC3B, 0xC341, 0xD63D, 0xC342, 0xD63E, + 0xC343, 0xD63F, 0xC344, 0xD641, 0xC345, 0xD642, 0xC346, 0xD643, 0xC347, 0xD644, 0xC348, 0xD646, 0xC349, 0xD647, 0xC34A, 0xD64A, + 0xC34B, 0xD64C, 0xC34C, 0xD64E, 0xC34D, 0xD64F, 0xC34E, 0xD650, 0xC34F, 0xD652, 0xC350, 0xD653, 0xC351, 0xD656, 0xC352, 0xD657, + 0xC353, 0xD659, 0xC354, 0xD65A, 0xC355, 0xD65B, 0xC356, 0xD65D, 0xC357, 0xD65E, 0xC358, 0xD65F, 0xC359, 0xD660, 0xC35A, 0xD661, + 0xC361, 0xD662, 0xC362, 0xD663, 0xC363, 0xD664, 0xC364, 0xD665, 0xC365, 0xD666, 0xC366, 0xD668, 0xC367, 0xD66A, 0xC368, 0xD66B, + 0xC369, 0xD66C, 0xC36A, 0xD66D, 0xC36B, 0xD66E, 0xC36C, 0xD66F, 0xC36D, 0xD672, 0xC36E, 0xD673, 0xC36F, 0xD675, 0xC370, 0xD676, + 0xC371, 0xD677, 0xC372, 0xD678, 0xC373, 0xD679, 0xC374, 0xD67A, 0xC375, 0xD67B, 0xC376, 0xD67C, 0xC377, 0xD67D, 0xC378, 0xD67E, + 0xC379, 0xD67F, 0xC37A, 0xD680, 0xC381, 0xD681, 0xC382, 0xD682, 0xC383, 0xD684, 0xC384, 0xD686, 0xC385, 0xD687, 0xC386, 0xD688, + 0xC387, 0xD689, 0xC388, 0xD68A, 0xC389, 0xD68B, 0xC38A, 0xD68E, 0xC38B, 0xD68F, 0xC38C, 0xD691, 0xC38D, 0xD692, 0xC38E, 0xD693, + 0xC38F, 0xD695, 0xC390, 0xD696, 0xC391, 0xD697, 0xC392, 0xD698, 0xC393, 0xD699, 0xC394, 0xD69A, 0xC395, 0xD69B, 0xC396, 0xD69C, + 0xC397, 0xD69E, 0xC398, 0xD6A0, 0xC399, 0xD6A2, 0xC39A, 0xD6A3, 0xC39B, 0xD6A4, 0xC39C, 0xD6A5, 0xC39D, 0xD6A6, 0xC39E, 0xD6A7, + 0xC39F, 0xD6A9, 0xC3A0, 0xD6AA, 0xC3A1, 0xCC3C, 0xC3A2, 0xCC3D, 0xC3A3, 0xCC3E, 0xC3A4, 0xCC44, 0xC3A5, 0xCC45, 0xC3A6, 0xCC48, + 0xC3A7, 0xCC4C, 0xC3A8, 0xCC54, 0xC3A9, 0xCC55, 0xC3AA, 0xCC57, 0xC3AB, 0xCC58, 0xC3AC, 0xCC59, 0xC3AD, 0xCC60, 0xC3AE, 0xCC64, + 0xC3AF, 0xCC66, 0xC3B0, 0xCC68, 0xC3B1, 0xCC70, 0xC3B2, 0xCC75, 0xC3B3, 0xCC98, 0xC3B4, 0xCC99, 0xC3B5, 0xCC9C, 0xC3B6, 0xCCA0, + 0xC3B7, 0xCCA8, 0xC3B8, 0xCCA9, 0xC3B9, 0xCCAB, 0xC3BA, 0xCCAC, 0xC3BB, 0xCCAD, 0xC3BC, 0xCCB4, 0xC3BD, 0xCCB5, 0xC3BE, 0xCCB8, + 0xC3BF, 0xCCBC, 0xC3C0, 0xCCC4, 0xC3C1, 0xCCC5, 0xC3C2, 0xCCC7, 0xC3C3, 0xCCC9, 0xC3C4, 0xCCD0, 0xC3C5, 0xCCD4, 0xC3C6, 0xCCE4, + 0xC3C7, 0xCCEC, 0xC3C8, 0xCCF0, 0xC3C9, 0xCD01, 0xC3CA, 0xCD08, 0xC3CB, 0xCD09, 0xC3CC, 0xCD0C, 0xC3CD, 0xCD10, 0xC3CE, 0xCD18, + 0xC3CF, 0xCD19, 0xC3D0, 0xCD1B, 0xC3D1, 0xCD1D, 0xC3D2, 0xCD24, 0xC3D3, 0xCD28, 0xC3D4, 0xCD2C, 0xC3D5, 0xCD39, 0xC3D6, 0xCD5C, + 0xC3D7, 0xCD60, 0xC3D8, 0xCD64, 0xC3D9, 0xCD6C, 0xC3DA, 0xCD6D, 0xC3DB, 0xCD6F, 0xC3DC, 0xCD71, 0xC3DD, 0xCD78, 0xC3DE, 0xCD88, + 0xC3DF, 0xCD94, 0xC3E0, 0xCD95, 0xC3E1, 0xCD98, 0xC3E2, 0xCD9C, 0xC3E3, 0xCDA4, 0xC3E4, 0xCDA5, 0xC3E5, 0xCDA7, 0xC3E6, 0xCDA9, + 0xC3E7, 0xCDB0, 0xC3E8, 0xCDC4, 0xC3E9, 0xCDCC, 0xC3EA, 0xCDD0, 0xC3EB, 0xCDE8, 0xC3EC, 0xCDEC, 0xC3ED, 0xCDF0, 0xC3EE, 0xCDF8, + 0xC3EF, 0xCDF9, 0xC3F0, 0xCDFB, 0xC3F1, 0xCDFD, 0xC3F2, 0xCE04, 0xC3F3, 0xCE08, 0xC3F4, 0xCE0C, 0xC3F5, 0xCE14, 0xC3F6, 0xCE19, + 0xC3F7, 0xCE20, 0xC3F8, 0xCE21, 0xC3F9, 0xCE24, 0xC3FA, 0xCE28, 0xC3FB, 0xCE30, 0xC3FC, 0xCE31, 0xC3FD, 0xCE33, 0xC3FE, 0xCE35, + 0xC441, 0xD6AB, 0xC442, 0xD6AD, 0xC443, 0xD6AE, 0xC444, 0xD6AF, 0xC445, 0xD6B1, 0xC446, 0xD6B2, 0xC447, 0xD6B3, 0xC448, 0xD6B4, + 0xC449, 0xD6B5, 0xC44A, 0xD6B6, 0xC44B, 0xD6B7, 0xC44C, 0xD6B8, 0xC44D, 0xD6BA, 0xC44E, 0xD6BC, 0xC44F, 0xD6BD, 0xC450, 0xD6BE, + 0xC451, 0xD6BF, 0xC452, 0xD6C0, 0xC453, 0xD6C1, 0xC454, 0xD6C2, 0xC455, 0xD6C3, 0xC456, 0xD6C6, 0xC457, 0xD6C7, 0xC458, 0xD6C9, + 0xC459, 0xD6CA, 0xC45A, 0xD6CB, 0xC461, 0xD6CD, 0xC462, 0xD6CE, 0xC463, 0xD6CF, 0xC464, 0xD6D0, 0xC465, 0xD6D2, 0xC466, 0xD6D3, + 0xC467, 0xD6D5, 0xC468, 0xD6D6, 0xC469, 0xD6D8, 0xC46A, 0xD6DA, 0xC46B, 0xD6DB, 0xC46C, 0xD6DC, 0xC46D, 0xD6DD, 0xC46E, 0xD6DE, + 0xC46F, 0xD6DF, 0xC470, 0xD6E1, 0xC471, 0xD6E2, 0xC472, 0xD6E3, 0xC473, 0xD6E5, 0xC474, 0xD6E6, 0xC475, 0xD6E7, 0xC476, 0xD6E9, + 0xC477, 0xD6EA, 0xC478, 0xD6EB, 0xC479, 0xD6EC, 0xC47A, 0xD6ED, 0xC481, 0xD6EE, 0xC482, 0xD6EF, 0xC483, 0xD6F1, 0xC484, 0xD6F2, + 0xC485, 0xD6F3, 0xC486, 0xD6F4, 0xC487, 0xD6F6, 0xC488, 0xD6F7, 0xC489, 0xD6F8, 0xC48A, 0xD6F9, 0xC48B, 0xD6FA, 0xC48C, 0xD6FB, + 0xC48D, 0xD6FE, 0xC48E, 0xD6FF, 0xC48F, 0xD701, 0xC490, 0xD702, 0xC491, 0xD703, 0xC492, 0xD705, 0xC493, 0xD706, 0xC494, 0xD707, + 0xC495, 0xD708, 0xC496, 0xD709, 0xC497, 0xD70A, 0xC498, 0xD70B, 0xC499, 0xD70C, 0xC49A, 0xD70D, 0xC49B, 0xD70E, 0xC49C, 0xD70F, + 0xC49D, 0xD710, 0xC49E, 0xD712, 0xC49F, 0xD713, 0xC4A0, 0xD714, 0xC4A1, 0xCE58, 0xC4A2, 0xCE59, 0xC4A3, 0xCE5C, 0xC4A4, 0xCE5F, + 0xC4A5, 0xCE60, 0xC4A6, 0xCE61, 0xC4A7, 0xCE68, 0xC4A8, 0xCE69, 0xC4A9, 0xCE6B, 0xC4AA, 0xCE6D, 0xC4AB, 0xCE74, 0xC4AC, 0xCE75, + 0xC4AD, 0xCE78, 0xC4AE, 0xCE7C, 0xC4AF, 0xCE84, 0xC4B0, 0xCE85, 0xC4B1, 0xCE87, 0xC4B2, 0xCE89, 0xC4B3, 0xCE90, 0xC4B4, 0xCE91, + 0xC4B5, 0xCE94, 0xC4B6, 0xCE98, 0xC4B7, 0xCEA0, 0xC4B8, 0xCEA1, 0xC4B9, 0xCEA3, 0xC4BA, 0xCEA4, 0xC4BB, 0xCEA5, 0xC4BC, 0xCEAC, + 0xC4BD, 0xCEAD, 0xC4BE, 0xCEC1, 0xC4BF, 0xCEE4, 0xC4C0, 0xCEE5, 0xC4C1, 0xCEE8, 0xC4C2, 0xCEEB, 0xC4C3, 0xCEEC, 0xC4C4, 0xCEF4, + 0xC4C5, 0xCEF5, 0xC4C6, 0xCEF7, 0xC4C7, 0xCEF8, 0xC4C8, 0xCEF9, 0xC4C9, 0xCF00, 0xC4CA, 0xCF01, 0xC4CB, 0xCF04, 0xC4CC, 0xCF08, + 0xC4CD, 0xCF10, 0xC4CE, 0xCF11, 0xC4CF, 0xCF13, 0xC4D0, 0xCF15, 0xC4D1, 0xCF1C, 0xC4D2, 0xCF20, 0xC4D3, 0xCF24, 0xC4D4, 0xCF2C, + 0xC4D5, 0xCF2D, 0xC4D6, 0xCF2F, 0xC4D7, 0xCF30, 0xC4D8, 0xCF31, 0xC4D9, 0xCF38, 0xC4DA, 0xCF54, 0xC4DB, 0xCF55, 0xC4DC, 0xCF58, + 0xC4DD, 0xCF5C, 0xC4DE, 0xCF64, 0xC4DF, 0xCF65, 0xC4E0, 0xCF67, 0xC4E1, 0xCF69, 0xC4E2, 0xCF70, 0xC4E3, 0xCF71, 0xC4E4, 0xCF74, + 0xC4E5, 0xCF78, 0xC4E6, 0xCF80, 0xC4E7, 0xCF85, 0xC4E8, 0xCF8C, 0xC4E9, 0xCFA1, 0xC4EA, 0xCFA8, 0xC4EB, 0xCFB0, 0xC4EC, 0xCFC4, + 0xC4ED, 0xCFE0, 0xC4EE, 0xCFE1, 0xC4EF, 0xCFE4, 0xC4F0, 0xCFE8, 0xC4F1, 0xCFF0, 0xC4F2, 0xCFF1, 0xC4F3, 0xCFF3, 0xC4F4, 0xCFF5, + 0xC4F5, 0xCFFC, 0xC4F6, 0xD000, 0xC4F7, 0xD004, 0xC4F8, 0xD011, 0xC4F9, 0xD018, 0xC4FA, 0xD02D, 0xC4FB, 0xD034, 0xC4FC, 0xD035, + 0xC4FD, 0xD038, 0xC4FE, 0xD03C, 0xC541, 0xD715, 0xC542, 0xD716, 0xC543, 0xD717, 0xC544, 0xD71A, 0xC545, 0xD71B, 0xC546, 0xD71D, + 0xC547, 0xD71E, 0xC548, 0xD71F, 0xC549, 0xD721, 0xC54A, 0xD722, 0xC54B, 0xD723, 0xC54C, 0xD724, 0xC54D, 0xD725, 0xC54E, 0xD726, + 0xC54F, 0xD727, 0xC550, 0xD72A, 0xC551, 0xD72C, 0xC552, 0xD72E, 0xC553, 0xD72F, 0xC554, 0xD730, 0xC555, 0xD731, 0xC556, 0xD732, + 0xC557, 0xD733, 0xC558, 0xD736, 0xC559, 0xD737, 0xC55A, 0xD739, 0xC561, 0xD73A, 0xC562, 0xD73B, 0xC563, 0xD73D, 0xC564, 0xD73E, + 0xC565, 0xD73F, 0xC566, 0xD740, 0xC567, 0xD741, 0xC568, 0xD742, 0xC569, 0xD743, 0xC56A, 0xD745, 0xC56B, 0xD746, 0xC56C, 0xD748, + 0xC56D, 0xD74A, 0xC56E, 0xD74B, 0xC56F, 0xD74C, 0xC570, 0xD74D, 0xC571, 0xD74E, 0xC572, 0xD74F, 0xC573, 0xD752, 0xC574, 0xD753, + 0xC575, 0xD755, 0xC576, 0xD75A, 0xC577, 0xD75B, 0xC578, 0xD75C, 0xC579, 0xD75D, 0xC57A, 0xD75E, 0xC581, 0xD75F, 0xC582, 0xD762, + 0xC583, 0xD764, 0xC584, 0xD766, 0xC585, 0xD767, 0xC586, 0xD768, 0xC587, 0xD76A, 0xC588, 0xD76B, 0xC589, 0xD76D, 0xC58A, 0xD76E, + 0xC58B, 0xD76F, 0xC58C, 0xD771, 0xC58D, 0xD772, 0xC58E, 0xD773, 0xC58F, 0xD775, 0xC590, 0xD776, 0xC591, 0xD777, 0xC592, 0xD778, + 0xC593, 0xD779, 0xC594, 0xD77A, 0xC595, 0xD77B, 0xC596, 0xD77E, 0xC597, 0xD77F, 0xC598, 0xD780, 0xC599, 0xD782, 0xC59A, 0xD783, + 0xC59B, 0xD784, 0xC59C, 0xD785, 0xC59D, 0xD786, 0xC59E, 0xD787, 0xC59F, 0xD78A, 0xC5A0, 0xD78B, 0xC5A1, 0xD044, 0xC5A2, 0xD045, + 0xC5A3, 0xD047, 0xC5A4, 0xD049, 0xC5A5, 0xD050, 0xC5A6, 0xD054, 0xC5A7, 0xD058, 0xC5A8, 0xD060, 0xC5A9, 0xD06C, 0xC5AA, 0xD06D, + 0xC5AB, 0xD070, 0xC5AC, 0xD074, 0xC5AD, 0xD07C, 0xC5AE, 0xD07D, 0xC5AF, 0xD081, 0xC5B0, 0xD0A4, 0xC5B1, 0xD0A5, 0xC5B2, 0xD0A8, + 0xC5B3, 0xD0AC, 0xC5B4, 0xD0B4, 0xC5B5, 0xD0B5, 0xC5B6, 0xD0B7, 0xC5B7, 0xD0B9, 0xC5B8, 0xD0C0, 0xC5B9, 0xD0C1, 0xC5BA, 0xD0C4, + 0xC5BB, 0xD0C8, 0xC5BC, 0xD0C9, 0xC5BD, 0xD0D0, 0xC5BE, 0xD0D1, 0xC5BF, 0xD0D3, 0xC5C0, 0xD0D4, 0xC5C1, 0xD0D5, 0xC5C2, 0xD0DC, + 0xC5C3, 0xD0DD, 0xC5C4, 0xD0E0, 0xC5C5, 0xD0E4, 0xC5C6, 0xD0EC, 0xC5C7, 0xD0ED, 0xC5C8, 0xD0EF, 0xC5C9, 0xD0F0, 0xC5CA, 0xD0F1, + 0xC5CB, 0xD0F8, 0xC5CC, 0xD10D, 0xC5CD, 0xD130, 0xC5CE, 0xD131, 0xC5CF, 0xD134, 0xC5D0, 0xD138, 0xC5D1, 0xD13A, 0xC5D2, 0xD140, + 0xC5D3, 0xD141, 0xC5D4, 0xD143, 0xC5D5, 0xD144, 0xC5D6, 0xD145, 0xC5D7, 0xD14C, 0xC5D8, 0xD14D, 0xC5D9, 0xD150, 0xC5DA, 0xD154, + 0xC5DB, 0xD15C, 0xC5DC, 0xD15D, 0xC5DD, 0xD15F, 0xC5DE, 0xD161, 0xC5DF, 0xD168, 0xC5E0, 0xD16C, 0xC5E1, 0xD17C, 0xC5E2, 0xD184, + 0xC5E3, 0xD188, 0xC5E4, 0xD1A0, 0xC5E5, 0xD1A1, 0xC5E6, 0xD1A4, 0xC5E7, 0xD1A8, 0xC5E8, 0xD1B0, 0xC5E9, 0xD1B1, 0xC5EA, 0xD1B3, + 0xC5EB, 0xD1B5, 0xC5EC, 0xD1BA, 0xC5ED, 0xD1BC, 0xC5EE, 0xD1C0, 0xC5EF, 0xD1D8, 0xC5F0, 0xD1F4, 0xC5F1, 0xD1F8, 0xC5F2, 0xD207, + 0xC5F3, 0xD209, 0xC5F4, 0xD210, 0xC5F5, 0xD22C, 0xC5F6, 0xD22D, 0xC5F7, 0xD230, 0xC5F8, 0xD234, 0xC5F9, 0xD23C, 0xC5FA, 0xD23D, + 0xC5FB, 0xD23F, 0xC5FC, 0xD241, 0xC5FD, 0xD248, 0xC5FE, 0xD25C, 0xC641, 0xD78D, 0xC642, 0xD78E, 0xC643, 0xD78F, 0xC644, 0xD791, + 0xC645, 0xD792, 0xC646, 0xD793, 0xC647, 0xD794, 0xC648, 0xD795, 0xC649, 0xD796, 0xC64A, 0xD797, 0xC64B, 0xD79A, 0xC64C, 0xD79C, + 0xC64D, 0xD79E, 0xC64E, 0xD79F, 0xC64F, 0xD7A0, 0xC650, 0xD7A1, 0xC651, 0xD7A2, 0xC652, 0xD7A3, 0xC6A1, 0xD264, 0xC6A2, 0xD280, + 0xC6A3, 0xD281, 0xC6A4, 0xD284, 0xC6A5, 0xD288, 0xC6A6, 0xD290, 0xC6A7, 0xD291, 0xC6A8, 0xD295, 0xC6A9, 0xD29C, 0xC6AA, 0xD2A0, + 0xC6AB, 0xD2A4, 0xC6AC, 0xD2AC, 0xC6AD, 0xD2B1, 0xC6AE, 0xD2B8, 0xC6AF, 0xD2B9, 0xC6B0, 0xD2BC, 0xC6B1, 0xD2BF, 0xC6B2, 0xD2C0, + 0xC6B3, 0xD2C2, 0xC6B4, 0xD2C8, 0xC6B5, 0xD2C9, 0xC6B6, 0xD2CB, 0xC6B7, 0xD2D4, 0xC6B8, 0xD2D8, 0xC6B9, 0xD2DC, 0xC6BA, 0xD2E4, + 0xC6BB, 0xD2E5, 0xC6BC, 0xD2F0, 0xC6BD, 0xD2F1, 0xC6BE, 0xD2F4, 0xC6BF, 0xD2F8, 0xC6C0, 0xD300, 0xC6C1, 0xD301, 0xC6C2, 0xD303, + 0xC6C3, 0xD305, 0xC6C4, 0xD30C, 0xC6C5, 0xD30D, 0xC6C6, 0xD30E, 0xC6C7, 0xD310, 0xC6C8, 0xD314, 0xC6C9, 0xD316, 0xC6CA, 0xD31C, + 0xC6CB, 0xD31D, 0xC6CC, 0xD31F, 0xC6CD, 0xD320, 0xC6CE, 0xD321, 0xC6CF, 0xD325, 0xC6D0, 0xD328, 0xC6D1, 0xD329, 0xC6D2, 0xD32C, + 0xC6D3, 0xD330, 0xC6D4, 0xD338, 0xC6D5, 0xD339, 0xC6D6, 0xD33B, 0xC6D7, 0xD33C, 0xC6D8, 0xD33D, 0xC6D9, 0xD344, 0xC6DA, 0xD345, + 0xC6DB, 0xD37C, 0xC6DC, 0xD37D, 0xC6DD, 0xD380, 0xC6DE, 0xD384, 0xC6DF, 0xD38C, 0xC6E0, 0xD38D, 0xC6E1, 0xD38F, 0xC6E2, 0xD390, + 0xC6E3, 0xD391, 0xC6E4, 0xD398, 0xC6E5, 0xD399, 0xC6E6, 0xD39C, 0xC6E7, 0xD3A0, 0xC6E8, 0xD3A8, 0xC6E9, 0xD3A9, 0xC6EA, 0xD3AB, + 0xC6EB, 0xD3AD, 0xC6EC, 0xD3B4, 0xC6ED, 0xD3B8, 0xC6EE, 0xD3BC, 0xC6EF, 0xD3C4, 0xC6F0, 0xD3C5, 0xC6F1, 0xD3C8, 0xC6F2, 0xD3C9, + 0xC6F3, 0xD3D0, 0xC6F4, 0xD3D8, 0xC6F5, 0xD3E1, 0xC6F6, 0xD3E3, 0xC6F7, 0xD3EC, 0xC6F8, 0xD3ED, 0xC6F9, 0xD3F0, 0xC6FA, 0xD3F4, + 0xC6FB, 0xD3FC, 0xC6FC, 0xD3FD, 0xC6FD, 0xD3FF, 0xC6FE, 0xD401, 0xC7A1, 0xD408, 0xC7A2, 0xD41D, 0xC7A3, 0xD440, 0xC7A4, 0xD444, + 0xC7A5, 0xD45C, 0xC7A6, 0xD460, 0xC7A7, 0xD464, 0xC7A8, 0xD46D, 0xC7A9, 0xD46F, 0xC7AA, 0xD478, 0xC7AB, 0xD479, 0xC7AC, 0xD47C, + 0xC7AD, 0xD47F, 0xC7AE, 0xD480, 0xC7AF, 0xD482, 0xC7B0, 0xD488, 0xC7B1, 0xD489, 0xC7B2, 0xD48B, 0xC7B3, 0xD48D, 0xC7B4, 0xD494, + 0xC7B5, 0xD4A9, 0xC7B6, 0xD4CC, 0xC7B7, 0xD4D0, 0xC7B8, 0xD4D4, 0xC7B9, 0xD4DC, 0xC7BA, 0xD4DF, 0xC7BB, 0xD4E8, 0xC7BC, 0xD4EC, + 0xC7BD, 0xD4F0, 0xC7BE, 0xD4F8, 0xC7BF, 0xD4FB, 0xC7C0, 0xD4FD, 0xC7C1, 0xD504, 0xC7C2, 0xD508, 0xC7C3, 0xD50C, 0xC7C4, 0xD514, + 0xC7C5, 0xD515, 0xC7C6, 0xD517, 0xC7C7, 0xD53C, 0xC7C8, 0xD53D, 0xC7C9, 0xD540, 0xC7CA, 0xD544, 0xC7CB, 0xD54C, 0xC7CC, 0xD54D, + 0xC7CD, 0xD54F, 0xC7CE, 0xD551, 0xC7CF, 0xD558, 0xC7D0, 0xD559, 0xC7D1, 0xD55C, 0xC7D2, 0xD560, 0xC7D3, 0xD565, 0xC7D4, 0xD568, + 0xC7D5, 0xD569, 0xC7D6, 0xD56B, 0xC7D7, 0xD56D, 0xC7D8, 0xD574, 0xC7D9, 0xD575, 0xC7DA, 0xD578, 0xC7DB, 0xD57C, 0xC7DC, 0xD584, + 0xC7DD, 0xD585, 0xC7DE, 0xD587, 0xC7DF, 0xD588, 0xC7E0, 0xD589, 0xC7E1, 0xD590, 0xC7E2, 0xD5A5, 0xC7E3, 0xD5C8, 0xC7E4, 0xD5C9, + 0xC7E5, 0xD5CC, 0xC7E6, 0xD5D0, 0xC7E7, 0xD5D2, 0xC7E8, 0xD5D8, 0xC7E9, 0xD5D9, 0xC7EA, 0xD5DB, 0xC7EB, 0xD5DD, 0xC7EC, 0xD5E4, + 0xC7ED, 0xD5E5, 0xC7EE, 0xD5E8, 0xC7EF, 0xD5EC, 0xC7F0, 0xD5F4, 0xC7F1, 0xD5F5, 0xC7F2, 0xD5F7, 0xC7F3, 0xD5F9, 0xC7F4, 0xD600, + 0xC7F5, 0xD601, 0xC7F6, 0xD604, 0xC7F7, 0xD608, 0xC7F8, 0xD610, 0xC7F9, 0xD611, 0xC7FA, 0xD613, 0xC7FB, 0xD614, 0xC7FC, 0xD615, + 0xC7FD, 0xD61C, 0xC7FE, 0xD620, 0xC8A1, 0xD624, 0xC8A2, 0xD62D, 0xC8A3, 0xD638, 0xC8A4, 0xD639, 0xC8A5, 0xD63C, 0xC8A6, 0xD640, + 0xC8A7, 0xD645, 0xC8A8, 0xD648, 0xC8A9, 0xD649, 0xC8AA, 0xD64B, 0xC8AB, 0xD64D, 0xC8AC, 0xD651, 0xC8AD, 0xD654, 0xC8AE, 0xD655, + 0xC8AF, 0xD658, 0xC8B0, 0xD65C, 0xC8B1, 0xD667, 0xC8B2, 0xD669, 0xC8B3, 0xD670, 0xC8B4, 0xD671, 0xC8B5, 0xD674, 0xC8B6, 0xD683, + 0xC8B7, 0xD685, 0xC8B8, 0xD68C, 0xC8B9, 0xD68D, 0xC8BA, 0xD690, 0xC8BB, 0xD694, 0xC8BC, 0xD69D, 0xC8BD, 0xD69F, 0xC8BE, 0xD6A1, + 0xC8BF, 0xD6A8, 0xC8C0, 0xD6AC, 0xC8C1, 0xD6B0, 0xC8C2, 0xD6B9, 0xC8C3, 0xD6BB, 0xC8C4, 0xD6C4, 0xC8C5, 0xD6C5, 0xC8C6, 0xD6C8, + 0xC8C7, 0xD6CC, 0xC8C8, 0xD6D1, 0xC8C9, 0xD6D4, 0xC8CA, 0xD6D7, 0xC8CB, 0xD6D9, 0xC8CC, 0xD6E0, 0xC8CD, 0xD6E4, 0xC8CE, 0xD6E8, + 0xC8CF, 0xD6F0, 0xC8D0, 0xD6F5, 0xC8D1, 0xD6FC, 0xC8D2, 0xD6FD, 0xC8D3, 0xD700, 0xC8D4, 0xD704, 0xC8D5, 0xD711, 0xC8D6, 0xD718, + 0xC8D7, 0xD719, 0xC8D8, 0xD71C, 0xC8D9, 0xD720, 0xC8DA, 0xD728, 0xC8DB, 0xD729, 0xC8DC, 0xD72B, 0xC8DD, 0xD72D, 0xC8DE, 0xD734, + 0xC8DF, 0xD735, 0xC8E0, 0xD738, 0xC8E1, 0xD73C, 0xC8E2, 0xD744, 0xC8E3, 0xD747, 0xC8E4, 0xD749, 0xC8E5, 0xD750, 0xC8E6, 0xD751, + 0xC8E7, 0xD754, 0xC8E8, 0xD756, 0xC8E9, 0xD757, 0xC8EA, 0xD758, 0xC8EB, 0xD759, 0xC8EC, 0xD760, 0xC8ED, 0xD761, 0xC8EE, 0xD763, + 0xC8EF, 0xD765, 0xC8F0, 0xD769, 0xC8F1, 0xD76C, 0xC8F2, 0xD770, 0xC8F3, 0xD774, 0xC8F4, 0xD77C, 0xC8F5, 0xD77D, 0xC8F6, 0xD781, + 0xC8F7, 0xD788, 0xC8F8, 0xD789, 0xC8F9, 0xD78C, 0xC8FA, 0xD790, 0xC8FB, 0xD798, 0xC8FC, 0xD799, 0xC8FD, 0xD79B, 0xC8FE, 0xD79D, + 0xCAA1, 0x4F3D, 0xCAA2, 0x4F73, 0xCAA3, 0x5047, 0xCAA4, 0x50F9, 0xCAA5, 0x52A0, 0xCAA6, 0x53EF, 0xCAA7, 0x5475, 0xCAA8, 0x54E5, + 0xCAA9, 0x5609, 0xCAAA, 0x5AC1, 0xCAAB, 0x5BB6, 0xCAAC, 0x6687, 0xCAAD, 0x67B6, 0xCAAE, 0x67B7, 0xCAAF, 0x67EF, 0xCAB0, 0x6B4C, + 0xCAB1, 0x73C2, 0xCAB2, 0x75C2, 0xCAB3, 0x7A3C, 0xCAB4, 0x82DB, 0xCAB5, 0x8304, 0xCAB6, 0x8857, 0xCAB7, 0x8888, 0xCAB8, 0x8A36, + 0xCAB9, 0x8CC8, 0xCABA, 0x8DCF, 0xCABB, 0x8EFB, 0xCABC, 0x8FE6, 0xCABD, 0x99D5, 0xCABE, 0x523B, 0xCABF, 0x5374, 0xCAC0, 0x5404, + 0xCAC1, 0x606A, 0xCAC2, 0x6164, 0xCAC3, 0x6BBC, 0xCAC4, 0x73CF, 0xCAC5, 0x811A, 0xCAC6, 0x89BA, 0xCAC7, 0x89D2, 0xCAC8, 0x95A3, + 0xCAC9, 0x4F83, 0xCACA, 0x520A, 0xCACB, 0x58BE, 0xCACC, 0x5978, 0xCACD, 0x59E6, 0xCACE, 0x5E72, 0xCACF, 0x5E79, 0xCAD0, 0x61C7, + 0xCAD1, 0x63C0, 0xCAD2, 0x6746, 0xCAD3, 0x67EC, 0xCAD4, 0x687F, 0xCAD5, 0x6F97, 0xCAD6, 0x764E, 0xCAD7, 0x770B, 0xCAD8, 0x78F5, + 0xCAD9, 0x7A08, 0xCADA, 0x7AFF, 0xCADB, 0x7C21, 0xCADC, 0x809D, 0xCADD, 0x826E, 0xCADE, 0x8271, 0xCADF, 0x8AEB, 0xCAE0, 0x9593, + 0xCAE1, 0x4E6B, 0xCAE2, 0x559D, 0xCAE3, 0x66F7, 0xCAE4, 0x6E34, 0xCAE5, 0x78A3, 0xCAE6, 0x7AED, 0xCAE7, 0x845B, 0xCAE8, 0x8910, + 0xCAE9, 0x874E, 0xCAEA, 0x97A8, 0xCAEB, 0x52D8, 0xCAEC, 0x574E, 0xCAED, 0x582A, 0xCAEE, 0x5D4C, 0xCAEF, 0x611F, 0xCAF0, 0x61BE, + 0xCAF1, 0x6221, 0xCAF2, 0x6562, 0xCAF3, 0x67D1, 0xCAF4, 0x6A44, 0xCAF5, 0x6E1B, 0xCAF6, 0x7518, 0xCAF7, 0x75B3, 0xCAF8, 0x76E3, + 0xCAF9, 0x77B0, 0xCAFA, 0x7D3A, 0xCAFB, 0x90AF, 0xCAFC, 0x9451, 0xCAFD, 0x9452, 0xCAFE, 0x9F95, 0xCBA1, 0x5323, 0xCBA2, 0x5CAC, + 0xCBA3, 0x7532, 0xCBA4, 0x80DB, 0xCBA5, 0x9240, 0xCBA6, 0x9598, 0xCBA7, 0x525B, 0xCBA8, 0x5808, 0xCBA9, 0x59DC, 0xCBAA, 0x5CA1, + 0xCBAB, 0x5D17, 0xCBAC, 0x5EB7, 0xCBAD, 0x5F3A, 0xCBAE, 0x5F4A, 0xCBAF, 0x6177, 0xCBB0, 0x6C5F, 0xCBB1, 0x757A, 0xCBB2, 0x7586, + 0xCBB3, 0x7CE0, 0xCBB4, 0x7D73, 0xCBB5, 0x7DB1, 0xCBB6, 0x7F8C, 0xCBB7, 0x8154, 0xCBB8, 0x8221, 0xCBB9, 0x8591, 0xCBBA, 0x8941, + 0xCBBB, 0x8B1B, 0xCBBC, 0x92FC, 0xCBBD, 0x964D, 0xCBBE, 0x9C47, 0xCBBF, 0x4ECB, 0xCBC0, 0x4EF7, 0xCBC1, 0x500B, 0xCBC2, 0x51F1, + 0xCBC3, 0x584F, 0xCBC4, 0x6137, 0xCBC5, 0x613E, 0xCBC6, 0x6168, 0xCBC7, 0x6539, 0xCBC8, 0x69EA, 0xCBC9, 0x6F11, 0xCBCA, 0x75A5, + 0xCBCB, 0x7686, 0xCBCC, 0x76D6, 0xCBCD, 0x7B87, 0xCBCE, 0x82A5, 0xCBCF, 0x84CB, 0xCBD0, 0xF900, 0xCBD1, 0x93A7, 0xCBD2, 0x958B, + 0xCBD3, 0x5580, 0xCBD4, 0x5BA2, 0xCBD5, 0x5751, 0xCBD6, 0xF901, 0xCBD7, 0x7CB3, 0xCBD8, 0x7FB9, 0xCBD9, 0x91B5, 0xCBDA, 0x5028, + 0xCBDB, 0x53BB, 0xCBDC, 0x5C45, 0xCBDD, 0x5DE8, 0xCBDE, 0x62D2, 0xCBDF, 0x636E, 0xCBE0, 0x64DA, 0xCBE1, 0x64E7, 0xCBE2, 0x6E20, + 0xCBE3, 0x70AC, 0xCBE4, 0x795B, 0xCBE5, 0x8DDD, 0xCBE6, 0x8E1E, 0xCBE7, 0xF902, 0xCBE8, 0x907D, 0xCBE9, 0x9245, 0xCBEA, 0x92F8, + 0xCBEB, 0x4E7E, 0xCBEC, 0x4EF6, 0xCBED, 0x5065, 0xCBEE, 0x5DFE, 0xCBEF, 0x5EFA, 0xCBF0, 0x6106, 0xCBF1, 0x6957, 0xCBF2, 0x8171, + 0xCBF3, 0x8654, 0xCBF4, 0x8E47, 0xCBF5, 0x9375, 0xCBF6, 0x9A2B, 0xCBF7, 0x4E5E, 0xCBF8, 0x5091, 0xCBF9, 0x6770, 0xCBFA, 0x6840, + 0xCBFB, 0x5109, 0xCBFC, 0x528D, 0xCBFD, 0x5292, 0xCBFE, 0x6AA2, 0xCCA1, 0x77BC, 0xCCA2, 0x9210, 0xCCA3, 0x9ED4, 0xCCA4, 0x52AB, + 0xCCA5, 0x602F, 0xCCA6, 0x8FF2, 0xCCA7, 0x5048, 0xCCA8, 0x61A9, 0xCCA9, 0x63ED, 0xCCAA, 0x64CA, 0xCCAB, 0x683C, 0xCCAC, 0x6A84, + 0xCCAD, 0x6FC0, 0xCCAE, 0x8188, 0xCCAF, 0x89A1, 0xCCB0, 0x9694, 0xCCB1, 0x5805, 0xCCB2, 0x727D, 0xCCB3, 0x72AC, 0xCCB4, 0x7504, + 0xCCB5, 0x7D79, 0xCCB6, 0x7E6D, 0xCCB7, 0x80A9, 0xCCB8, 0x898B, 0xCCB9, 0x8B74, 0xCCBA, 0x9063, 0xCCBB, 0x9D51, 0xCCBC, 0x6289, + 0xCCBD, 0x6C7A, 0xCCBE, 0x6F54, 0xCCBF, 0x7D50, 0xCCC0, 0x7F3A, 0xCCC1, 0x8A23, 0xCCC2, 0x517C, 0xCCC3, 0x614A, 0xCCC4, 0x7B9D, + 0xCCC5, 0x8B19, 0xCCC6, 0x9257, 0xCCC7, 0x938C, 0xCCC8, 0x4EAC, 0xCCC9, 0x4FD3, 0xCCCA, 0x501E, 0xCCCB, 0x50BE, 0xCCCC, 0x5106, + 0xCCCD, 0x52C1, 0xCCCE, 0x52CD, 0xCCCF, 0x537F, 0xCCD0, 0x5770, 0xCCD1, 0x5883, 0xCCD2, 0x5E9A, 0xCCD3, 0x5F91, 0xCCD4, 0x6176, + 0xCCD5, 0x61AC, 0xCCD6, 0x64CE, 0xCCD7, 0x656C, 0xCCD8, 0x666F, 0xCCD9, 0x66BB, 0xCCDA, 0x66F4, 0xCCDB, 0x6897, 0xCCDC, 0x6D87, + 0xCCDD, 0x7085, 0xCCDE, 0x70F1, 0xCCDF, 0x749F, 0xCCE0, 0x74A5, 0xCCE1, 0x74CA, 0xCCE2, 0x75D9, 0xCCE3, 0x786C, 0xCCE4, 0x78EC, + 0xCCE5, 0x7ADF, 0xCCE6, 0x7AF6, 0xCCE7, 0x7D45, 0xCCE8, 0x7D93, 0xCCE9, 0x8015, 0xCCEA, 0x803F, 0xCCEB, 0x811B, 0xCCEC, 0x8396, + 0xCCED, 0x8B66, 0xCCEE, 0x8F15, 0xCCEF, 0x9015, 0xCCF0, 0x93E1, 0xCCF1, 0x9803, 0xCCF2, 0x9838, 0xCCF3, 0x9A5A, 0xCCF4, 0x9BE8, + 0xCCF5, 0x4FC2, 0xCCF6, 0x5553, 0xCCF7, 0x583A, 0xCCF8, 0x5951, 0xCCF9, 0x5B63, 0xCCFA, 0x5C46, 0xCCFB, 0x60B8, 0xCCFC, 0x6212, + 0xCCFD, 0x6842, 0xCCFE, 0x68B0, 0xCDA1, 0x68E8, 0xCDA2, 0x6EAA, 0xCDA3, 0x754C, 0xCDA4, 0x7678, 0xCDA5, 0x78CE, 0xCDA6, 0x7A3D, + 0xCDA7, 0x7CFB, 0xCDA8, 0x7E6B, 0xCDA9, 0x7E7C, 0xCDAA, 0x8A08, 0xCDAB, 0x8AA1, 0xCDAC, 0x8C3F, 0xCDAD, 0x968E, 0xCDAE, 0x9DC4, + 0xCDAF, 0x53E4, 0xCDB0, 0x53E9, 0xCDB1, 0x544A, 0xCDB2, 0x5471, 0xCDB3, 0x56FA, 0xCDB4, 0x59D1, 0xCDB5, 0x5B64, 0xCDB6, 0x5C3B, + 0xCDB7, 0x5EAB, 0xCDB8, 0x62F7, 0xCDB9, 0x6537, 0xCDBA, 0x6545, 0xCDBB, 0x6572, 0xCDBC, 0x66A0, 0xCDBD, 0x67AF, 0xCDBE, 0x69C1, + 0xCDBF, 0x6CBD, 0xCDC0, 0x75FC, 0xCDC1, 0x7690, 0xCDC2, 0x777E, 0xCDC3, 0x7A3F, 0xCDC4, 0x7F94, 0xCDC5, 0x8003, 0xCDC6, 0x80A1, + 0xCDC7, 0x818F, 0xCDC8, 0x82E6, 0xCDC9, 0x82FD, 0xCDCA, 0x83F0, 0xCDCB, 0x85C1, 0xCDCC, 0x8831, 0xCDCD, 0x88B4, 0xCDCE, 0x8AA5, + 0xCDCF, 0xF903, 0xCDD0, 0x8F9C, 0xCDD1, 0x932E, 0xCDD2, 0x96C7, 0xCDD3, 0x9867, 0xCDD4, 0x9AD8, 0xCDD5, 0x9F13, 0xCDD6, 0x54ED, + 0xCDD7, 0x659B, 0xCDD8, 0x66F2, 0xCDD9, 0x688F, 0xCDDA, 0x7A40, 0xCDDB, 0x8C37, 0xCDDC, 0x9D60, 0xCDDD, 0x56F0, 0xCDDE, 0x5764, + 0xCDDF, 0x5D11, 0xCDE0, 0x6606, 0xCDE1, 0x68B1, 0xCDE2, 0x68CD, 0xCDE3, 0x6EFE, 0xCDE4, 0x7428, 0xCDE5, 0x889E, 0xCDE6, 0x9BE4, + 0xCDE7, 0x6C68, 0xCDE8, 0xF904, 0xCDE9, 0x9AA8, 0xCDEA, 0x4F9B, 0xCDEB, 0x516C, 0xCDEC, 0x5171, 0xCDED, 0x529F, 0xCDEE, 0x5B54, + 0xCDEF, 0x5DE5, 0xCDF0, 0x6050, 0xCDF1, 0x606D, 0xCDF2, 0x62F1, 0xCDF3, 0x63A7, 0xCDF4, 0x653B, 0xCDF5, 0x73D9, 0xCDF6, 0x7A7A, + 0xCDF7, 0x86A3, 0xCDF8, 0x8CA2, 0xCDF9, 0x978F, 0xCDFA, 0x4E32, 0xCDFB, 0x5BE1, 0xCDFC, 0x6208, 0xCDFD, 0x679C, 0xCDFE, 0x74DC, + 0xCEA1, 0x79D1, 0xCEA2, 0x83D3, 0xCEA3, 0x8A87, 0xCEA4, 0x8AB2, 0xCEA5, 0x8DE8, 0xCEA6, 0x904E, 0xCEA7, 0x934B, 0xCEA8, 0x9846, + 0xCEA9, 0x5ED3, 0xCEAA, 0x69E8, 0xCEAB, 0x85FF, 0xCEAC, 0x90ED, 0xCEAD, 0xF905, 0xCEAE, 0x51A0, 0xCEAF, 0x5B98, 0xCEB0, 0x5BEC, + 0xCEB1, 0x6163, 0xCEB2, 0x68FA, 0xCEB3, 0x6B3E, 0xCEB4, 0x704C, 0xCEB5, 0x742F, 0xCEB6, 0x74D8, 0xCEB7, 0x7BA1, 0xCEB8, 0x7F50, + 0xCEB9, 0x83C5, 0xCEBA, 0x89C0, 0xCEBB, 0x8CAB, 0xCEBC, 0x95DC, 0xCEBD, 0x9928, 0xCEBE, 0x522E, 0xCEBF, 0x605D, 0xCEC0, 0x62EC, + 0xCEC1, 0x9002, 0xCEC2, 0x4F8A, 0xCEC3, 0x5149, 0xCEC4, 0x5321, 0xCEC5, 0x58D9, 0xCEC6, 0x5EE3, 0xCEC7, 0x66E0, 0xCEC8, 0x6D38, + 0xCEC9, 0x709A, 0xCECA, 0x72C2, 0xCECB, 0x73D6, 0xCECC, 0x7B50, 0xCECD, 0x80F1, 0xCECE, 0x945B, 0xCECF, 0x5366, 0xCED0, 0x639B, + 0xCED1, 0x7F6B, 0xCED2, 0x4E56, 0xCED3, 0x5080, 0xCED4, 0x584A, 0xCED5, 0x58DE, 0xCED6, 0x602A, 0xCED7, 0x6127, 0xCED8, 0x62D0, + 0xCED9, 0x69D0, 0xCEDA, 0x9B41, 0xCEDB, 0x5B8F, 0xCEDC, 0x7D18, 0xCEDD, 0x80B1, 0xCEDE, 0x8F5F, 0xCEDF, 0x4EA4, 0xCEE0, 0x50D1, + 0xCEE1, 0x54AC, 0xCEE2, 0x55AC, 0xCEE3, 0x5B0C, 0xCEE4, 0x5DA0, 0xCEE5, 0x5DE7, 0xCEE6, 0x652A, 0xCEE7, 0x654E, 0xCEE8, 0x6821, + 0xCEE9, 0x6A4B, 0xCEEA, 0x72E1, 0xCEEB, 0x768E, 0xCEEC, 0x77EF, 0xCEED, 0x7D5E, 0xCEEE, 0x7FF9, 0xCEEF, 0x81A0, 0xCEF0, 0x854E, + 0xCEF1, 0x86DF, 0xCEF2, 0x8F03, 0xCEF3, 0x8F4E, 0xCEF4, 0x90CA, 0xCEF5, 0x9903, 0xCEF6, 0x9A55, 0xCEF7, 0x9BAB, 0xCEF8, 0x4E18, + 0xCEF9, 0x4E45, 0xCEFA, 0x4E5D, 0xCEFB, 0x4EC7, 0xCEFC, 0x4FF1, 0xCEFD, 0x5177, 0xCEFE, 0x52FE, 0xCFA1, 0x5340, 0xCFA2, 0x53E3, + 0xCFA3, 0x53E5, 0xCFA4, 0x548E, 0xCFA5, 0x5614, 0xCFA6, 0x5775, 0xCFA7, 0x57A2, 0xCFA8, 0x5BC7, 0xCFA9, 0x5D87, 0xCFAA, 0x5ED0, + 0xCFAB, 0x61FC, 0xCFAC, 0x62D8, 0xCFAD, 0x6551, 0xCFAE, 0x67B8, 0xCFAF, 0x67E9, 0xCFB0, 0x69CB, 0xCFB1, 0x6B50, 0xCFB2, 0x6BC6, + 0xCFB3, 0x6BEC, 0xCFB4, 0x6C42, 0xCFB5, 0x6E9D, 0xCFB6, 0x7078, 0xCFB7, 0x72D7, 0xCFB8, 0x7396, 0xCFB9, 0x7403, 0xCFBA, 0x77BF, + 0xCFBB, 0x77E9, 0xCFBC, 0x7A76, 0xCFBD, 0x7D7F, 0xCFBE, 0x8009, 0xCFBF, 0x81FC, 0xCFC0, 0x8205, 0xCFC1, 0x820A, 0xCFC2, 0x82DF, + 0xCFC3, 0x8862, 0xCFC4, 0x8B33, 0xCFC5, 0x8CFC, 0xCFC6, 0x8EC0, 0xCFC7, 0x9011, 0xCFC8, 0x90B1, 0xCFC9, 0x9264, 0xCFCA, 0x92B6, + 0xCFCB, 0x99D2, 0xCFCC, 0x9A45, 0xCFCD, 0x9CE9, 0xCFCE, 0x9DD7, 0xCFCF, 0x9F9C, 0xCFD0, 0x570B, 0xCFD1, 0x5C40, 0xCFD2, 0x83CA, + 0xCFD3, 0x97A0, 0xCFD4, 0x97AB, 0xCFD5, 0x9EB4, 0xCFD6, 0x541B, 0xCFD7, 0x7A98, 0xCFD8, 0x7FA4, 0xCFD9, 0x88D9, 0xCFDA, 0x8ECD, + 0xCFDB, 0x90E1, 0xCFDC, 0x5800, 0xCFDD, 0x5C48, 0xCFDE, 0x6398, 0xCFDF, 0x7A9F, 0xCFE0, 0x5BAE, 0xCFE1, 0x5F13, 0xCFE2, 0x7A79, + 0xCFE3, 0x7AAE, 0xCFE4, 0x828E, 0xCFE5, 0x8EAC, 0xCFE6, 0x5026, 0xCFE7, 0x5238, 0xCFE8, 0x52F8, 0xCFE9, 0x5377, 0xCFEA, 0x5708, + 0xCFEB, 0x62F3, 0xCFEC, 0x6372, 0xCFED, 0x6B0A, 0xCFEE, 0x6DC3, 0xCFEF, 0x7737, 0xCFF0, 0x53A5, 0xCFF1, 0x7357, 0xCFF2, 0x8568, + 0xCFF3, 0x8E76, 0xCFF4, 0x95D5, 0xCFF5, 0x673A, 0xCFF6, 0x6AC3, 0xCFF7, 0x6F70, 0xCFF8, 0x8A6D, 0xCFF9, 0x8ECC, 0xCFFA, 0x994B, + 0xCFFB, 0xF906, 0xCFFC, 0x6677, 0xCFFD, 0x6B78, 0xCFFE, 0x8CB4, 0xD0A1, 0x9B3C, 0xD0A2, 0xF907, 0xD0A3, 0x53EB, 0xD0A4, 0x572D, + 0xD0A5, 0x594E, 0xD0A6, 0x63C6, 0xD0A7, 0x69FB, 0xD0A8, 0x73EA, 0xD0A9, 0x7845, 0xD0AA, 0x7ABA, 0xD0AB, 0x7AC5, 0xD0AC, 0x7CFE, + 0xD0AD, 0x8475, 0xD0AE, 0x898F, 0xD0AF, 0x8D73, 0xD0B0, 0x9035, 0xD0B1, 0x95A8, 0xD0B2, 0x52FB, 0xD0B3, 0x5747, 0xD0B4, 0x7547, + 0xD0B5, 0x7B60, 0xD0B6, 0x83CC, 0xD0B7, 0x921E, 0xD0B8, 0xF908, 0xD0B9, 0x6A58, 0xD0BA, 0x514B, 0xD0BB, 0x524B, 0xD0BC, 0x5287, + 0xD0BD, 0x621F, 0xD0BE, 0x68D8, 0xD0BF, 0x6975, 0xD0C0, 0x9699, 0xD0C1, 0x50C5, 0xD0C2, 0x52A4, 0xD0C3, 0x52E4, 0xD0C4, 0x61C3, + 0xD0C5, 0x65A4, 0xD0C6, 0x6839, 0xD0C7, 0x69FF, 0xD0C8, 0x747E, 0xD0C9, 0x7B4B, 0xD0CA, 0x82B9, 0xD0CB, 0x83EB, 0xD0CC, 0x89B2, + 0xD0CD, 0x8B39, 0xD0CE, 0x8FD1, 0xD0CF, 0x9949, 0xD0D0, 0xF909, 0xD0D1, 0x4ECA, 0xD0D2, 0x5997, 0xD0D3, 0x64D2, 0xD0D4, 0x6611, + 0xD0D5, 0x6A8E, 0xD0D6, 0x7434, 0xD0D7, 0x7981, 0xD0D8, 0x79BD, 0xD0D9, 0x82A9, 0xD0DA, 0x887E, 0xD0DB, 0x887F, 0xD0DC, 0x895F, + 0xD0DD, 0xF90A, 0xD0DE, 0x9326, 0xD0DF, 0x4F0B, 0xD0E0, 0x53CA, 0xD0E1, 0x6025, 0xD0E2, 0x6271, 0xD0E3, 0x6C72, 0xD0E4, 0x7D1A, + 0xD0E5, 0x7D66, 0xD0E6, 0x4E98, 0xD0E7, 0x5162, 0xD0E8, 0x77DC, 0xD0E9, 0x80AF, 0xD0EA, 0x4F01, 0xD0EB, 0x4F0E, 0xD0EC, 0x5176, + 0xD0ED, 0x5180, 0xD0EE, 0x55DC, 0xD0EF, 0x5668, 0xD0F0, 0x573B, 0xD0F1, 0x57FA, 0xD0F2, 0x57FC, 0xD0F3, 0x5914, 0xD0F4, 0x5947, + 0xD0F5, 0x5993, 0xD0F6, 0x5BC4, 0xD0F7, 0x5C90, 0xD0F8, 0x5D0E, 0xD0F9, 0x5DF1, 0xD0FA, 0x5E7E, 0xD0FB, 0x5FCC, 0xD0FC, 0x6280, + 0xD0FD, 0x65D7, 0xD0FE, 0x65E3, 0xD1A1, 0x671E, 0xD1A2, 0x671F, 0xD1A3, 0x675E, 0xD1A4, 0x68CB, 0xD1A5, 0x68C4, 0xD1A6, 0x6A5F, + 0xD1A7, 0x6B3A, 0xD1A8, 0x6C23, 0xD1A9, 0x6C7D, 0xD1AA, 0x6C82, 0xD1AB, 0x6DC7, 0xD1AC, 0x7398, 0xD1AD, 0x7426, 0xD1AE, 0x742A, + 0xD1AF, 0x7482, 0xD1B0, 0x74A3, 0xD1B1, 0x7578, 0xD1B2, 0x757F, 0xD1B3, 0x7881, 0xD1B4, 0x78EF, 0xD1B5, 0x7941, 0xD1B6, 0x7947, + 0xD1B7, 0x7948, 0xD1B8, 0x797A, 0xD1B9, 0x7B95, 0xD1BA, 0x7D00, 0xD1BB, 0x7DBA, 0xD1BC, 0x7F88, 0xD1BD, 0x8006, 0xD1BE, 0x802D, + 0xD1BF, 0x808C, 0xD1C0, 0x8A18, 0xD1C1, 0x8B4F, 0xD1C2, 0x8C48, 0xD1C3, 0x8D77, 0xD1C4, 0x9321, 0xD1C5, 0x9324, 0xD1C6, 0x98E2, + 0xD1C7, 0x9951, 0xD1C8, 0x9A0E, 0xD1C9, 0x9A0F, 0xD1CA, 0x9A65, 0xD1CB, 0x9E92, 0xD1CC, 0x7DCA, 0xD1CD, 0x4F76, 0xD1CE, 0x5409, + 0xD1CF, 0x62EE, 0xD1D0, 0x6854, 0xD1D1, 0x91D1, 0xD1D2, 0x55AB, 0xD1D3, 0x513A, 0xD1D4, 0xF90B, 0xD1D5, 0xF90C, 0xD1D6, 0x5A1C, + 0xD1D7, 0x61E6, 0xD1D8, 0xF90D, 0xD1D9, 0x62CF, 0xD1DA, 0x62FF, 0xD1DB, 0xF90E, 0xD1DC, 0xF90F, 0xD1DD, 0xF910, 0xD1DE, 0xF911, + 0xD1DF, 0xF912, 0xD1E0, 0xF913, 0xD1E1, 0x90A3, 0xD1E2, 0xF914, 0xD1E3, 0xF915, 0xD1E4, 0xF916, 0xD1E5, 0xF917, 0xD1E6, 0xF918, + 0xD1E7, 0x8AFE, 0xD1E8, 0xF919, 0xD1E9, 0xF91A, 0xD1EA, 0xF91B, 0xD1EB, 0xF91C, 0xD1EC, 0x6696, 0xD1ED, 0xF91D, 0xD1EE, 0x7156, + 0xD1EF, 0xF91E, 0xD1F0, 0xF91F, 0xD1F1, 0x96E3, 0xD1F2, 0xF920, 0xD1F3, 0x634F, 0xD1F4, 0x637A, 0xD1F5, 0x5357, 0xD1F6, 0xF921, + 0xD1F7, 0x678F, 0xD1F8, 0x6960, 0xD1F9, 0x6E73, 0xD1FA, 0xF922, 0xD1FB, 0x7537, 0xD1FC, 0xF923, 0xD1FD, 0xF924, 0xD1FE, 0xF925, + 0xD2A1, 0x7D0D, 0xD2A2, 0xF926, 0xD2A3, 0xF927, 0xD2A4, 0x8872, 0xD2A5, 0x56CA, 0xD2A6, 0x5A18, 0xD2A7, 0xF928, 0xD2A8, 0xF929, + 0xD2A9, 0xF92A, 0xD2AA, 0xF92B, 0xD2AB, 0xF92C, 0xD2AC, 0x4E43, 0xD2AD, 0xF92D, 0xD2AE, 0x5167, 0xD2AF, 0x5948, 0xD2B0, 0x67F0, + 0xD2B1, 0x8010, 0xD2B2, 0xF92E, 0xD2B3, 0x5973, 0xD2B4, 0x5E74, 0xD2B5, 0x649A, 0xD2B6, 0x79CA, 0xD2B7, 0x5FF5, 0xD2B8, 0x606C, + 0xD2B9, 0x62C8, 0xD2BA, 0x637B, 0xD2BB, 0x5BE7, 0xD2BC, 0x5BD7, 0xD2BD, 0x52AA, 0xD2BE, 0xF92F, 0xD2BF, 0x5974, 0xD2C0, 0x5F29, + 0xD2C1, 0x6012, 0xD2C2, 0xF930, 0xD2C3, 0xF931, 0xD2C4, 0xF932, 0xD2C5, 0x7459, 0xD2C6, 0xF933, 0xD2C7, 0xF934, 0xD2C8, 0xF935, + 0xD2C9, 0xF936, 0xD2CA, 0xF937, 0xD2CB, 0xF938, 0xD2CC, 0x99D1, 0xD2CD, 0xF939, 0xD2CE, 0xF93A, 0xD2CF, 0xF93B, 0xD2D0, 0xF93C, + 0xD2D1, 0xF93D, 0xD2D2, 0xF93E, 0xD2D3, 0xF93F, 0xD2D4, 0xF940, 0xD2D5, 0xF941, 0xD2D6, 0xF942, 0xD2D7, 0xF943, 0xD2D8, 0x6FC3, + 0xD2D9, 0xF944, 0xD2DA, 0xF945, 0xD2DB, 0x81BF, 0xD2DC, 0x8FB2, 0xD2DD, 0x60F1, 0xD2DE, 0xF946, 0xD2DF, 0xF947, 0xD2E0, 0x8166, + 0xD2E1, 0xF948, 0xD2E2, 0xF949, 0xD2E3, 0x5C3F, 0xD2E4, 0xF94A, 0xD2E5, 0xF94B, 0xD2E6, 0xF94C, 0xD2E7, 0xF94D, 0xD2E8, 0xF94E, + 0xD2E9, 0xF94F, 0xD2EA, 0xF950, 0xD2EB, 0xF951, 0xD2EC, 0x5AE9, 0xD2ED, 0x8A25, 0xD2EE, 0x677B, 0xD2EF, 0x7D10, 0xD2F0, 0xF952, + 0xD2F1, 0xF953, 0xD2F2, 0xF954, 0xD2F3, 0xF955, 0xD2F4, 0xF956, 0xD2F5, 0xF957, 0xD2F6, 0x80FD, 0xD2F7, 0xF958, 0xD2F8, 0xF959, + 0xD2F9, 0x5C3C, 0xD2FA, 0x6CE5, 0xD2FB, 0x533F, 0xD2FC, 0x6EBA, 0xD2FD, 0x591A, 0xD2FE, 0x8336, 0xD3A1, 0x4E39, 0xD3A2, 0x4EB6, + 0xD3A3, 0x4F46, 0xD3A4, 0x55AE, 0xD3A5, 0x5718, 0xD3A6, 0x58C7, 0xD3A7, 0x5F56, 0xD3A8, 0x65B7, 0xD3A9, 0x65E6, 0xD3AA, 0x6A80, + 0xD3AB, 0x6BB5, 0xD3AC, 0x6E4D, 0xD3AD, 0x77ED, 0xD3AE, 0x7AEF, 0xD3AF, 0x7C1E, 0xD3B0, 0x7DDE, 0xD3B1, 0x86CB, 0xD3B2, 0x8892, + 0xD3B3, 0x9132, 0xD3B4, 0x935B, 0xD3B5, 0x64BB, 0xD3B6, 0x6FBE, 0xD3B7, 0x737A, 0xD3B8, 0x75B8, 0xD3B9, 0x9054, 0xD3BA, 0x5556, + 0xD3BB, 0x574D, 0xD3BC, 0x61BA, 0xD3BD, 0x64D4, 0xD3BE, 0x66C7, 0xD3BF, 0x6DE1, 0xD3C0, 0x6E5B, 0xD3C1, 0x6F6D, 0xD3C2, 0x6FB9, + 0xD3C3, 0x75F0, 0xD3C4, 0x8043, 0xD3C5, 0x81BD, 0xD3C6, 0x8541, 0xD3C7, 0x8983, 0xD3C8, 0x8AC7, 0xD3C9, 0x8B5A, 0xD3CA, 0x931F, + 0xD3CB, 0x6C93, 0xD3CC, 0x7553, 0xD3CD, 0x7B54, 0xD3CE, 0x8E0F, 0xD3CF, 0x905D, 0xD3D0, 0x5510, 0xD3D1, 0x5802, 0xD3D2, 0x5858, + 0xD3D3, 0x5E62, 0xD3D4, 0x6207, 0xD3D5, 0x649E, 0xD3D6, 0x68E0, 0xD3D7, 0x7576, 0xD3D8, 0x7CD6, 0xD3D9, 0x87B3, 0xD3DA, 0x9EE8, + 0xD3DB, 0x4EE3, 0xD3DC, 0x5788, 0xD3DD, 0x576E, 0xD3DE, 0x5927, 0xD3DF, 0x5C0D, 0xD3E0, 0x5CB1, 0xD3E1, 0x5E36, 0xD3E2, 0x5F85, + 0xD3E3, 0x6234, 0xD3E4, 0x64E1, 0xD3E5, 0x73B3, 0xD3E6, 0x81FA, 0xD3E7, 0x888B, 0xD3E8, 0x8CB8, 0xD3E9, 0x968A, 0xD3EA, 0x9EDB, + 0xD3EB, 0x5B85, 0xD3EC, 0x5FB7, 0xD3ED, 0x60B3, 0xD3EE, 0x5012, 0xD3EF, 0x5200, 0xD3F0, 0x5230, 0xD3F1, 0x5716, 0xD3F2, 0x5835, + 0xD3F3, 0x5857, 0xD3F4, 0x5C0E, 0xD3F5, 0x5C60, 0xD3F6, 0x5CF6, 0xD3F7, 0x5D8B, 0xD3F8, 0x5EA6, 0xD3F9, 0x5F92, 0xD3FA, 0x60BC, + 0xD3FB, 0x6311, 0xD3FC, 0x6389, 0xD3FD, 0x6417, 0xD3FE, 0x6843, 0xD4A1, 0x68F9, 0xD4A2, 0x6AC2, 0xD4A3, 0x6DD8, 0xD4A4, 0x6E21, + 0xD4A5, 0x6ED4, 0xD4A6, 0x6FE4, 0xD4A7, 0x71FE, 0xD4A8, 0x76DC, 0xD4A9, 0x7779, 0xD4AA, 0x79B1, 0xD4AB, 0x7A3B, 0xD4AC, 0x8404, + 0xD4AD, 0x89A9, 0xD4AE, 0x8CED, 0xD4AF, 0x8DF3, 0xD4B0, 0x8E48, 0xD4B1, 0x9003, 0xD4B2, 0x9014, 0xD4B3, 0x9053, 0xD4B4, 0x90FD, + 0xD4B5, 0x934D, 0xD4B6, 0x9676, 0xD4B7, 0x97DC, 0xD4B8, 0x6BD2, 0xD4B9, 0x7006, 0xD4BA, 0x7258, 0xD4BB, 0x72A2, 0xD4BC, 0x7368, + 0xD4BD, 0x7763, 0xD4BE, 0x79BF, 0xD4BF, 0x7BE4, 0xD4C0, 0x7E9B, 0xD4C1, 0x8B80, 0xD4C2, 0x58A9, 0xD4C3, 0x60C7, 0xD4C4, 0x6566, + 0xD4C5, 0x65FD, 0xD4C6, 0x66BE, 0xD4C7, 0x6C8C, 0xD4C8, 0x711E, 0xD4C9, 0x71C9, 0xD4CA, 0x8C5A, 0xD4CB, 0x9813, 0xD4CC, 0x4E6D, + 0xD4CD, 0x7A81, 0xD4CE, 0x4EDD, 0xD4CF, 0x51AC, 0xD4D0, 0x51CD, 0xD4D1, 0x52D5, 0xD4D2, 0x540C, 0xD4D3, 0x61A7, 0xD4D4, 0x6771, + 0xD4D5, 0x6850, 0xD4D6, 0x68DF, 0xD4D7, 0x6D1E, 0xD4D8, 0x6F7C, 0xD4D9, 0x75BC, 0xD4DA, 0x77B3, 0xD4DB, 0x7AE5, 0xD4DC, 0x80F4, + 0xD4DD, 0x8463, 0xD4DE, 0x9285, 0xD4DF, 0x515C, 0xD4E0, 0x6597, 0xD4E1, 0x675C, 0xD4E2, 0x6793, 0xD4E3, 0x75D8, 0xD4E4, 0x7AC7, + 0xD4E5, 0x8373, 0xD4E6, 0xF95A, 0xD4E7, 0x8C46, 0xD4E8, 0x9017, 0xD4E9, 0x982D, 0xD4EA, 0x5C6F, 0xD4EB, 0x81C0, 0xD4EC, 0x829A, + 0xD4ED, 0x9041, 0xD4EE, 0x906F, 0xD4EF, 0x920D, 0xD4F0, 0x5F97, 0xD4F1, 0x5D9D, 0xD4F2, 0x6A59, 0xD4F3, 0x71C8, 0xD4F4, 0x767B, + 0xD4F5, 0x7B49, 0xD4F6, 0x85E4, 0xD4F7, 0x8B04, 0xD4F8, 0x9127, 0xD4F9, 0x9A30, 0xD4FA, 0x5587, 0xD4FB, 0x61F6, 0xD4FC, 0xF95B, + 0xD4FD, 0x7669, 0xD4FE, 0x7F85, 0xD5A1, 0x863F, 0xD5A2, 0x87BA, 0xD5A3, 0x88F8, 0xD5A4, 0x908F, 0xD5A5, 0xF95C, 0xD5A6, 0x6D1B, + 0xD5A7, 0x70D9, 0xD5A8, 0x73DE, 0xD5A9, 0x7D61, 0xD5AA, 0x843D, 0xD5AB, 0xF95D, 0xD5AC, 0x916A, 0xD5AD, 0x99F1, 0xD5AE, 0xF95E, + 0xD5AF, 0x4E82, 0xD5B0, 0x5375, 0xD5B1, 0x6B04, 0xD5B2, 0x6B12, 0xD5B3, 0x703E, 0xD5B4, 0x721B, 0xD5B5, 0x862D, 0xD5B6, 0x9E1E, + 0xD5B7, 0x524C, 0xD5B8, 0x8FA3, 0xD5B9, 0x5D50, 0xD5BA, 0x64E5, 0xD5BB, 0x652C, 0xD5BC, 0x6B16, 0xD5BD, 0x6FEB, 0xD5BE, 0x7C43, + 0xD5BF, 0x7E9C, 0xD5C0, 0x85CD, 0xD5C1, 0x8964, 0xD5C2, 0x89BD, 0xD5C3, 0x62C9, 0xD5C4, 0x81D8, 0xD5C5, 0x881F, 0xD5C6, 0x5ECA, + 0xD5C7, 0x6717, 0xD5C8, 0x6D6A, 0xD5C9, 0x72FC, 0xD5CA, 0x7405, 0xD5CB, 0x746F, 0xD5CC, 0x8782, 0xD5CD, 0x90DE, 0xD5CE, 0x4F86, + 0xD5CF, 0x5D0D, 0xD5D0, 0x5FA0, 0xD5D1, 0x840A, 0xD5D2, 0x51B7, 0xD5D3, 0x63A0, 0xD5D4, 0x7565, 0xD5D5, 0x4EAE, 0xD5D6, 0x5006, + 0xD5D7, 0x5169, 0xD5D8, 0x51C9, 0xD5D9, 0x6881, 0xD5DA, 0x6A11, 0xD5DB, 0x7CAE, 0xD5DC, 0x7CB1, 0xD5DD, 0x7CE7, 0xD5DE, 0x826F, + 0xD5DF, 0x8AD2, 0xD5E0, 0x8F1B, 0xD5E1, 0x91CF, 0xD5E2, 0x4FB6, 0xD5E3, 0x5137, 0xD5E4, 0x52F5, 0xD5E5, 0x5442, 0xD5E6, 0x5EEC, + 0xD5E7, 0x616E, 0xD5E8, 0x623E, 0xD5E9, 0x65C5, 0xD5EA, 0x6ADA, 0xD5EB, 0x6FFE, 0xD5EC, 0x792A, 0xD5ED, 0x85DC, 0xD5EE, 0x8823, + 0xD5EF, 0x95AD, 0xD5F0, 0x9A62, 0xD5F1, 0x9A6A, 0xD5F2, 0x9E97, 0xD5F3, 0x9ECE, 0xD5F4, 0x529B, 0xD5F5, 0x66C6, 0xD5F6, 0x6B77, + 0xD5F7, 0x701D, 0xD5F8, 0x792B, 0xD5F9, 0x8F62, 0xD5FA, 0x9742, 0xD5FB, 0x6190, 0xD5FC, 0x6200, 0xD5FD, 0x6523, 0xD5FE, 0x6F23, + 0xD6A1, 0x7149, 0xD6A2, 0x7489, 0xD6A3, 0x7DF4, 0xD6A4, 0x806F, 0xD6A5, 0x84EE, 0xD6A6, 0x8F26, 0xD6A7, 0x9023, 0xD6A8, 0x934A, + 0xD6A9, 0x51BD, 0xD6AA, 0x5217, 0xD6AB, 0x52A3, 0xD6AC, 0x6D0C, 0xD6AD, 0x70C8, 0xD6AE, 0x88C2, 0xD6AF, 0x5EC9, 0xD6B0, 0x6582, + 0xD6B1, 0x6BAE, 0xD6B2, 0x6FC2, 0xD6B3, 0x7C3E, 0xD6B4, 0x7375, 0xD6B5, 0x4EE4, 0xD6B6, 0x4F36, 0xD6B7, 0x56F9, 0xD6B8, 0xF95F, + 0xD6B9, 0x5CBA, 0xD6BA, 0x5DBA, 0xD6BB, 0x601C, 0xD6BC, 0x73B2, 0xD6BD, 0x7B2D, 0xD6BE, 0x7F9A, 0xD6BF, 0x7FCE, 0xD6C0, 0x8046, + 0xD6C1, 0x901E, 0xD6C2, 0x9234, 0xD6C3, 0x96F6, 0xD6C4, 0x9748, 0xD6C5, 0x9818, 0xD6C6, 0x9F61, 0xD6C7, 0x4F8B, 0xD6C8, 0x6FA7, + 0xD6C9, 0x79AE, 0xD6CA, 0x91B4, 0xD6CB, 0x96B7, 0xD6CC, 0x52DE, 0xD6CD, 0xF960, 0xD6CE, 0x6488, 0xD6CF, 0x64C4, 0xD6D0, 0x6AD3, + 0xD6D1, 0x6F5E, 0xD6D2, 0x7018, 0xD6D3, 0x7210, 0xD6D4, 0x76E7, 0xD6D5, 0x8001, 0xD6D6, 0x8606, 0xD6D7, 0x865C, 0xD6D8, 0x8DEF, + 0xD6D9, 0x8F05, 0xD6DA, 0x9732, 0xD6DB, 0x9B6F, 0xD6DC, 0x9DFA, 0xD6DD, 0x9E75, 0xD6DE, 0x788C, 0xD6DF, 0x797F, 0xD6E0, 0x7DA0, + 0xD6E1, 0x83C9, 0xD6E2, 0x9304, 0xD6E3, 0x9E7F, 0xD6E4, 0x9E93, 0xD6E5, 0x8AD6, 0xD6E6, 0x58DF, 0xD6E7, 0x5F04, 0xD6E8, 0x6727, + 0xD6E9, 0x7027, 0xD6EA, 0x74CF, 0xD6EB, 0x7C60, 0xD6EC, 0x807E, 0xD6ED, 0x5121, 0xD6EE, 0x7028, 0xD6EF, 0x7262, 0xD6F0, 0x78CA, + 0xD6F1, 0x8CC2, 0xD6F2, 0x8CDA, 0xD6F3, 0x8CF4, 0xD6F4, 0x96F7, 0xD6F5, 0x4E86, 0xD6F6, 0x50DA, 0xD6F7, 0x5BEE, 0xD6F8, 0x5ED6, + 0xD6F9, 0x6599, 0xD6FA, 0x71CE, 0xD6FB, 0x7642, 0xD6FC, 0x77AD, 0xD6FD, 0x804A, 0xD6FE, 0x84FC, 0xD7A1, 0x907C, 0xD7A2, 0x9B27, + 0xD7A3, 0x9F8D, 0xD7A4, 0x58D8, 0xD7A5, 0x5A41, 0xD7A6, 0x5C62, 0xD7A7, 0x6A13, 0xD7A8, 0x6DDA, 0xD7A9, 0x6F0F, 0xD7AA, 0x763B, + 0xD7AB, 0x7D2F, 0xD7AC, 0x7E37, 0xD7AD, 0x851E, 0xD7AE, 0x8938, 0xD7AF, 0x93E4, 0xD7B0, 0x964B, 0xD7B1, 0x5289, 0xD7B2, 0x65D2, + 0xD7B3, 0x67F3, 0xD7B4, 0x69B4, 0xD7B5, 0x6D41, 0xD7B6, 0x6E9C, 0xD7B7, 0x700F, 0xD7B8, 0x7409, 0xD7B9, 0x7460, 0xD7BA, 0x7559, + 0xD7BB, 0x7624, 0xD7BC, 0x786B, 0xD7BD, 0x8B2C, 0xD7BE, 0x985E, 0xD7BF, 0x516D, 0xD7C0, 0x622E, 0xD7C1, 0x9678, 0xD7C2, 0x4F96, + 0xD7C3, 0x502B, 0xD7C4, 0x5D19, 0xD7C5, 0x6DEA, 0xD7C6, 0x7DB8, 0xD7C7, 0x8F2A, 0xD7C8, 0x5F8B, 0xD7C9, 0x6144, 0xD7CA, 0x6817, + 0xD7CB, 0xF961, 0xD7CC, 0x9686, 0xD7CD, 0x52D2, 0xD7CE, 0x808B, 0xD7CF, 0x51DC, 0xD7D0, 0x51CC, 0xD7D1, 0x695E, 0xD7D2, 0x7A1C, + 0xD7D3, 0x7DBE, 0xD7D4, 0x83F1, 0xD7D5, 0x9675, 0xD7D6, 0x4FDA, 0xD7D7, 0x5229, 0xD7D8, 0x5398, 0xD7D9, 0x540F, 0xD7DA, 0x550E, + 0xD7DB, 0x5C65, 0xD7DC, 0x60A7, 0xD7DD, 0x674E, 0xD7DE, 0x68A8, 0xD7DF, 0x6D6C, 0xD7E0, 0x7281, 0xD7E1, 0x72F8, 0xD7E2, 0x7406, + 0xD7E3, 0x7483, 0xD7E4, 0xF962, 0xD7E5, 0x75E2, 0xD7E6, 0x7C6C, 0xD7E7, 0x7F79, 0xD7E8, 0x7FB8, 0xD7E9, 0x8389, 0xD7EA, 0x88CF, + 0xD7EB, 0x88E1, 0xD7EC, 0x91CC, 0xD7ED, 0x91D0, 0xD7EE, 0x96E2, 0xD7EF, 0x9BC9, 0xD7F0, 0x541D, 0xD7F1, 0x6F7E, 0xD7F2, 0x71D0, + 0xD7F3, 0x7498, 0xD7F4, 0x85FA, 0xD7F5, 0x8EAA, 0xD7F6, 0x96A3, 0xD7F7, 0x9C57, 0xD7F8, 0x9E9F, 0xD7F9, 0x6797, 0xD7FA, 0x6DCB, + 0xD7FB, 0x7433, 0xD7FC, 0x81E8, 0xD7FD, 0x9716, 0xD7FE, 0x782C, 0xD8A1, 0x7ACB, 0xD8A2, 0x7B20, 0xD8A3, 0x7C92, 0xD8A4, 0x6469, + 0xD8A5, 0x746A, 0xD8A6, 0x75F2, 0xD8A7, 0x78BC, 0xD8A8, 0x78E8, 0xD8A9, 0x99AC, 0xD8AA, 0x9B54, 0xD8AB, 0x9EBB, 0xD8AC, 0x5BDE, + 0xD8AD, 0x5E55, 0xD8AE, 0x6F20, 0xD8AF, 0x819C, 0xD8B0, 0x83AB, 0xD8B1, 0x9088, 0xD8B2, 0x4E07, 0xD8B3, 0x534D, 0xD8B4, 0x5A29, + 0xD8B5, 0x5DD2, 0xD8B6, 0x5F4E, 0xD8B7, 0x6162, 0xD8B8, 0x633D, 0xD8B9, 0x6669, 0xD8BA, 0x66FC, 0xD8BB, 0x6EFF, 0xD8BC, 0x6F2B, + 0xD8BD, 0x7063, 0xD8BE, 0x779E, 0xD8BF, 0x842C, 0xD8C0, 0x8513, 0xD8C1, 0x883B, 0xD8C2, 0x8F13, 0xD8C3, 0x9945, 0xD8C4, 0x9C3B, + 0xD8C5, 0x551C, 0xD8C6, 0x62B9, 0xD8C7, 0x672B, 0xD8C8, 0x6CAB, 0xD8C9, 0x8309, 0xD8CA, 0x896A, 0xD8CB, 0x977A, 0xD8CC, 0x4EA1, + 0xD8CD, 0x5984, 0xD8CE, 0x5FD8, 0xD8CF, 0x5FD9, 0xD8D0, 0x671B, 0xD8D1, 0x7DB2, 0xD8D2, 0x7F54, 0xD8D3, 0x8292, 0xD8D4, 0x832B, + 0xD8D5, 0x83BD, 0xD8D6, 0x8F1E, 0xD8D7, 0x9099, 0xD8D8, 0x57CB, 0xD8D9, 0x59B9, 0xD8DA, 0x5A92, 0xD8DB, 0x5BD0, 0xD8DC, 0x6627, + 0xD8DD, 0x679A, 0xD8DE, 0x6885, 0xD8DF, 0x6BCF, 0xD8E0, 0x7164, 0xD8E1, 0x7F75, 0xD8E2, 0x8CB7, 0xD8E3, 0x8CE3, 0xD8E4, 0x9081, + 0xD8E5, 0x9B45, 0xD8E6, 0x8108, 0xD8E7, 0x8C8A, 0xD8E8, 0x964C, 0xD8E9, 0x9A40, 0xD8EA, 0x9EA5, 0xD8EB, 0x5B5F, 0xD8EC, 0x6C13, + 0xD8ED, 0x731B, 0xD8EE, 0x76F2, 0xD8EF, 0x76DF, 0xD8F0, 0x840C, 0xD8F1, 0x51AA, 0xD8F2, 0x8993, 0xD8F3, 0x514D, 0xD8F4, 0x5195, + 0xD8F5, 0x52C9, 0xD8F6, 0x68C9, 0xD8F7, 0x6C94, 0xD8F8, 0x7704, 0xD8F9, 0x7720, 0xD8FA, 0x7DBF, 0xD8FB, 0x7DEC, 0xD8FC, 0x9762, + 0xD8FD, 0x9EB5, 0xD8FE, 0x6EC5, 0xD9A1, 0x8511, 0xD9A2, 0x51A5, 0xD9A3, 0x540D, 0xD9A4, 0x547D, 0xD9A5, 0x660E, 0xD9A6, 0x669D, + 0xD9A7, 0x6927, 0xD9A8, 0x6E9F, 0xD9A9, 0x76BF, 0xD9AA, 0x7791, 0xD9AB, 0x8317, 0xD9AC, 0x84C2, 0xD9AD, 0x879F, 0xD9AE, 0x9169, + 0xD9AF, 0x9298, 0xD9B0, 0x9CF4, 0xD9B1, 0x8882, 0xD9B2, 0x4FAE, 0xD9B3, 0x5192, 0xD9B4, 0x52DF, 0xD9B5, 0x59C6, 0xD9B6, 0x5E3D, + 0xD9B7, 0x6155, 0xD9B8, 0x6478, 0xD9B9, 0x6479, 0xD9BA, 0x66AE, 0xD9BB, 0x67D0, 0xD9BC, 0x6A21, 0xD9BD, 0x6BCD, 0xD9BE, 0x6BDB, + 0xD9BF, 0x725F, 0xD9C0, 0x7261, 0xD9C1, 0x7441, 0xD9C2, 0x7738, 0xD9C3, 0x77DB, 0xD9C4, 0x8017, 0xD9C5, 0x82BC, 0xD9C6, 0x8305, + 0xD9C7, 0x8B00, 0xD9C8, 0x8B28, 0xD9C9, 0x8C8C, 0xD9CA, 0x6728, 0xD9CB, 0x6C90, 0xD9CC, 0x7267, 0xD9CD, 0x76EE, 0xD9CE, 0x7766, + 0xD9CF, 0x7A46, 0xD9D0, 0x9DA9, 0xD9D1, 0x6B7F, 0xD9D2, 0x6C92, 0xD9D3, 0x5922, 0xD9D4, 0x6726, 0xD9D5, 0x8499, 0xD9D6, 0x536F, + 0xD9D7, 0x5893, 0xD9D8, 0x5999, 0xD9D9, 0x5EDF, 0xD9DA, 0x63CF, 0xD9DB, 0x6634, 0xD9DC, 0x6773, 0xD9DD, 0x6E3A, 0xD9DE, 0x732B, + 0xD9DF, 0x7AD7, 0xD9E0, 0x82D7, 0xD9E1, 0x9328, 0xD9E2, 0x52D9, 0xD9E3, 0x5DEB, 0xD9E4, 0x61AE, 0xD9E5, 0x61CB, 0xD9E6, 0x620A, + 0xD9E7, 0x62C7, 0xD9E8, 0x64AB, 0xD9E9, 0x65E0, 0xD9EA, 0x6959, 0xD9EB, 0x6B66, 0xD9EC, 0x6BCB, 0xD9ED, 0x7121, 0xD9EE, 0x73F7, + 0xD9EF, 0x755D, 0xD9F0, 0x7E46, 0xD9F1, 0x821E, 0xD9F2, 0x8302, 0xD9F3, 0x856A, 0xD9F4, 0x8AA3, 0xD9F5, 0x8CBF, 0xD9F6, 0x9727, + 0xD9F7, 0x9D61, 0xD9F8, 0x58A8, 0xD9F9, 0x9ED8, 0xD9FA, 0x5011, 0xD9FB, 0x520E, 0xD9FC, 0x543B, 0xD9FD, 0x554F, 0xD9FE, 0x6587, + 0xDAA1, 0x6C76, 0xDAA2, 0x7D0A, 0xDAA3, 0x7D0B, 0xDAA4, 0x805E, 0xDAA5, 0x868A, 0xDAA6, 0x9580, 0xDAA7, 0x96EF, 0xDAA8, 0x52FF, + 0xDAA9, 0x6C95, 0xDAAA, 0x7269, 0xDAAB, 0x5473, 0xDAAC, 0x5A9A, 0xDAAD, 0x5C3E, 0xDAAE, 0x5D4B, 0xDAAF, 0x5F4C, 0xDAB0, 0x5FAE, + 0xDAB1, 0x672A, 0xDAB2, 0x68B6, 0xDAB3, 0x6963, 0xDAB4, 0x6E3C, 0xDAB5, 0x6E44, 0xDAB6, 0x7709, 0xDAB7, 0x7C73, 0xDAB8, 0x7F8E, + 0xDAB9, 0x8587, 0xDABA, 0x8B0E, 0xDABB, 0x8FF7, 0xDABC, 0x9761, 0xDABD, 0x9EF4, 0xDABE, 0x5CB7, 0xDABF, 0x60B6, 0xDAC0, 0x610D, + 0xDAC1, 0x61AB, 0xDAC2, 0x654F, 0xDAC3, 0x65FB, 0xDAC4, 0x65FC, 0xDAC5, 0x6C11, 0xDAC6, 0x6CEF, 0xDAC7, 0x739F, 0xDAC8, 0x73C9, + 0xDAC9, 0x7DE1, 0xDACA, 0x9594, 0xDACB, 0x5BC6, 0xDACC, 0x871C, 0xDACD, 0x8B10, 0xDACE, 0x525D, 0xDACF, 0x535A, 0xDAD0, 0x62CD, + 0xDAD1, 0x640F, 0xDAD2, 0x64B2, 0xDAD3, 0x6734, 0xDAD4, 0x6A38, 0xDAD5, 0x6CCA, 0xDAD6, 0x73C0, 0xDAD7, 0x749E, 0xDAD8, 0x7B94, + 0xDAD9, 0x7C95, 0xDADA, 0x7E1B, 0xDADB, 0x818A, 0xDADC, 0x8236, 0xDADD, 0x8584, 0xDADE, 0x8FEB, 0xDADF, 0x96F9, 0xDAE0, 0x99C1, + 0xDAE1, 0x4F34, 0xDAE2, 0x534A, 0xDAE3, 0x53CD, 0xDAE4, 0x53DB, 0xDAE5, 0x62CC, 0xDAE6, 0x642C, 0xDAE7, 0x6500, 0xDAE8, 0x6591, + 0xDAE9, 0x69C3, 0xDAEA, 0x6CEE, 0xDAEB, 0x6F58, 0xDAEC, 0x73ED, 0xDAED, 0x7554, 0xDAEE, 0x7622, 0xDAEF, 0x76E4, 0xDAF0, 0x76FC, + 0xDAF1, 0x78D0, 0xDAF2, 0x78FB, 0xDAF3, 0x792C, 0xDAF4, 0x7D46, 0xDAF5, 0x822C, 0xDAF6, 0x87E0, 0xDAF7, 0x8FD4, 0xDAF8, 0x9812, + 0xDAF9, 0x98EF, 0xDAFA, 0x52C3, 0xDAFB, 0x62D4, 0xDAFC, 0x64A5, 0xDAFD, 0x6E24, 0xDAFE, 0x6F51, 0xDBA1, 0x767C, 0xDBA2, 0x8DCB, + 0xDBA3, 0x91B1, 0xDBA4, 0x9262, 0xDBA5, 0x9AEE, 0xDBA6, 0x9B43, 0xDBA7, 0x5023, 0xDBA8, 0x508D, 0xDBA9, 0x574A, 0xDBAA, 0x59A8, + 0xDBAB, 0x5C28, 0xDBAC, 0x5E47, 0xDBAD, 0x5F77, 0xDBAE, 0x623F, 0xDBAF, 0x653E, 0xDBB0, 0x65B9, 0xDBB1, 0x65C1, 0xDBB2, 0x6609, + 0xDBB3, 0x678B, 0xDBB4, 0x699C, 0xDBB5, 0x6EC2, 0xDBB6, 0x78C5, 0xDBB7, 0x7D21, 0xDBB8, 0x80AA, 0xDBB9, 0x8180, 0xDBBA, 0x822B, + 0xDBBB, 0x82B3, 0xDBBC, 0x84A1, 0xDBBD, 0x868C, 0xDBBE, 0x8A2A, 0xDBBF, 0x8B17, 0xDBC0, 0x90A6, 0xDBC1, 0x9632, 0xDBC2, 0x9F90, + 0xDBC3, 0x500D, 0xDBC4, 0x4FF3, 0xDBC5, 0xF963, 0xDBC6, 0x57F9, 0xDBC7, 0x5F98, 0xDBC8, 0x62DC, 0xDBC9, 0x6392, 0xDBCA, 0x676F, + 0xDBCB, 0x6E43, 0xDBCC, 0x7119, 0xDBCD, 0x76C3, 0xDBCE, 0x80CC, 0xDBCF, 0x80DA, 0xDBD0, 0x88F4, 0xDBD1, 0x88F5, 0xDBD2, 0x8919, + 0xDBD3, 0x8CE0, 0xDBD4, 0x8F29, 0xDBD5, 0x914D, 0xDBD6, 0x966A, 0xDBD7, 0x4F2F, 0xDBD8, 0x4F70, 0xDBD9, 0x5E1B, 0xDBDA, 0x67CF, + 0xDBDB, 0x6822, 0xDBDC, 0x767D, 0xDBDD, 0x767E, 0xDBDE, 0x9B44, 0xDBDF, 0x5E61, 0xDBE0, 0x6A0A, 0xDBE1, 0x7169, 0xDBE2, 0x71D4, + 0xDBE3, 0x756A, 0xDBE4, 0xF964, 0xDBE5, 0x7E41, 0xDBE6, 0x8543, 0xDBE7, 0x85E9, 0xDBE8, 0x98DC, 0xDBE9, 0x4F10, 0xDBEA, 0x7B4F, + 0xDBEB, 0x7F70, 0xDBEC, 0x95A5, 0xDBED, 0x51E1, 0xDBEE, 0x5E06, 0xDBEF, 0x68B5, 0xDBF0, 0x6C3E, 0xDBF1, 0x6C4E, 0xDBF2, 0x6CDB, + 0xDBF3, 0x72AF, 0xDBF4, 0x7BC4, 0xDBF5, 0x8303, 0xDBF6, 0x6CD5, 0xDBF7, 0x743A, 0xDBF8, 0x50FB, 0xDBF9, 0x5288, 0xDBFA, 0x58C1, + 0xDBFB, 0x64D8, 0xDBFC, 0x6A97, 0xDBFD, 0x74A7, 0xDBFE, 0x7656, 0xDCA1, 0x78A7, 0xDCA2, 0x8617, 0xDCA3, 0x95E2, 0xDCA4, 0x9739, + 0xDCA5, 0xF965, 0xDCA6, 0x535E, 0xDCA7, 0x5F01, 0xDCA8, 0x8B8A, 0xDCA9, 0x8FA8, 0xDCAA, 0x8FAF, 0xDCAB, 0x908A, 0xDCAC, 0x5225, + 0xDCAD, 0x77A5, 0xDCAE, 0x9C49, 0xDCAF, 0x9F08, 0xDCB0, 0x4E19, 0xDCB1, 0x5002, 0xDCB2, 0x5175, 0xDCB3, 0x5C5B, 0xDCB4, 0x5E77, + 0xDCB5, 0x661E, 0xDCB6, 0x663A, 0xDCB7, 0x67C4, 0xDCB8, 0x68C5, 0xDCB9, 0x70B3, 0xDCBA, 0x7501, 0xDCBB, 0x75C5, 0xDCBC, 0x79C9, + 0xDCBD, 0x7ADD, 0xDCBE, 0x8F27, 0xDCBF, 0x9920, 0xDCC0, 0x9A08, 0xDCC1, 0x4FDD, 0xDCC2, 0x5821, 0xDCC3, 0x5831, 0xDCC4, 0x5BF6, + 0xDCC5, 0x666E, 0xDCC6, 0x6B65, 0xDCC7, 0x6D11, 0xDCC8, 0x6E7A, 0xDCC9, 0x6F7D, 0xDCCA, 0x73E4, 0xDCCB, 0x752B, 0xDCCC, 0x83E9, + 0xDCCD, 0x88DC, 0xDCCE, 0x8913, 0xDCCF, 0x8B5C, 0xDCD0, 0x8F14, 0xDCD1, 0x4F0F, 0xDCD2, 0x50D5, 0xDCD3, 0x5310, 0xDCD4, 0x535C, + 0xDCD5, 0x5B93, 0xDCD6, 0x5FA9, 0xDCD7, 0x670D, 0xDCD8, 0x798F, 0xDCD9, 0x8179, 0xDCDA, 0x832F, 0xDCDB, 0x8514, 0xDCDC, 0x8907, + 0xDCDD, 0x8986, 0xDCDE, 0x8F39, 0xDCDF, 0x8F3B, 0xDCE0, 0x99A5, 0xDCE1, 0x9C12, 0xDCE2, 0x672C, 0xDCE3, 0x4E76, 0xDCE4, 0x4FF8, + 0xDCE5, 0x5949, 0xDCE6, 0x5C01, 0xDCE7, 0x5CEF, 0xDCE8, 0x5CF0, 0xDCE9, 0x6367, 0xDCEA, 0x68D2, 0xDCEB, 0x70FD, 0xDCEC, 0x71A2, + 0xDCED, 0x742B, 0xDCEE, 0x7E2B, 0xDCEF, 0x84EC, 0xDCF0, 0x8702, 0xDCF1, 0x9022, 0xDCF2, 0x92D2, 0xDCF3, 0x9CF3, 0xDCF4, 0x4E0D, + 0xDCF5, 0x4ED8, 0xDCF6, 0x4FEF, 0xDCF7, 0x5085, 0xDCF8, 0x5256, 0xDCF9, 0x526F, 0xDCFA, 0x5426, 0xDCFB, 0x5490, 0xDCFC, 0x57E0, + 0xDCFD, 0x592B, 0xDCFE, 0x5A66, 0xDDA1, 0x5B5A, 0xDDA2, 0x5B75, 0xDDA3, 0x5BCC, 0xDDA4, 0x5E9C, 0xDDA5, 0xF966, 0xDDA6, 0x6276, + 0xDDA7, 0x6577, 0xDDA8, 0x65A7, 0xDDA9, 0x6D6E, 0xDDAA, 0x6EA5, 0xDDAB, 0x7236, 0xDDAC, 0x7B26, 0xDDAD, 0x7C3F, 0xDDAE, 0x7F36, + 0xDDAF, 0x8150, 0xDDB0, 0x8151, 0xDDB1, 0x819A, 0xDDB2, 0x8240, 0xDDB3, 0x8299, 0xDDB4, 0x83A9, 0xDDB5, 0x8A03, 0xDDB6, 0x8CA0, + 0xDDB7, 0x8CE6, 0xDDB8, 0x8CFB, 0xDDB9, 0x8D74, 0xDDBA, 0x8DBA, 0xDDBB, 0x90E8, 0xDDBC, 0x91DC, 0xDDBD, 0x961C, 0xDDBE, 0x9644, + 0xDDBF, 0x99D9, 0xDDC0, 0x9CE7, 0xDDC1, 0x5317, 0xDDC2, 0x5206, 0xDDC3, 0x5429, 0xDDC4, 0x5674, 0xDDC5, 0x58B3, 0xDDC6, 0x5954, + 0xDDC7, 0x596E, 0xDDC8, 0x5FFF, 0xDDC9, 0x61A4, 0xDDCA, 0x626E, 0xDDCB, 0x6610, 0xDDCC, 0x6C7E, 0xDDCD, 0x711A, 0xDDCE, 0x76C6, + 0xDDCF, 0x7C89, 0xDDD0, 0x7CDE, 0xDDD1, 0x7D1B, 0xDDD2, 0x82AC, 0xDDD3, 0x8CC1, 0xDDD4, 0x96F0, 0xDDD5, 0xF967, 0xDDD6, 0x4F5B, + 0xDDD7, 0x5F17, 0xDDD8, 0x5F7F, 0xDDD9, 0x62C2, 0xDDDA, 0x5D29, 0xDDDB, 0x670B, 0xDDDC, 0x68DA, 0xDDDD, 0x787C, 0xDDDE, 0x7E43, + 0xDDDF, 0x9D6C, 0xDDE0, 0x4E15, 0xDDE1, 0x5099, 0xDDE2, 0x5315, 0xDDE3, 0x532A, 0xDDE4, 0x5351, 0xDDE5, 0x5983, 0xDDE6, 0x5A62, + 0xDDE7, 0x5E87, 0xDDE8, 0x60B2, 0xDDE9, 0x618A, 0xDDEA, 0x6249, 0xDDEB, 0x6279, 0xDDEC, 0x6590, 0xDDED, 0x6787, 0xDDEE, 0x69A7, + 0xDDEF, 0x6BD4, 0xDDF0, 0x6BD6, 0xDDF1, 0x6BD7, 0xDDF2, 0x6BD8, 0xDDF3, 0x6CB8, 0xDDF4, 0xF968, 0xDDF5, 0x7435, 0xDDF6, 0x75FA, + 0xDDF7, 0x7812, 0xDDF8, 0x7891, 0xDDF9, 0x79D5, 0xDDFA, 0x79D8, 0xDDFB, 0x7C83, 0xDDFC, 0x7DCB, 0xDDFD, 0x7FE1, 0xDDFE, 0x80A5, + 0xDEA1, 0x813E, 0xDEA2, 0x81C2, 0xDEA3, 0x83F2, 0xDEA4, 0x871A, 0xDEA5, 0x88E8, 0xDEA6, 0x8AB9, 0xDEA7, 0x8B6C, 0xDEA8, 0x8CBB, + 0xDEA9, 0x9119, 0xDEAA, 0x975E, 0xDEAB, 0x98DB, 0xDEAC, 0x9F3B, 0xDEAD, 0x56AC, 0xDEAE, 0x5B2A, 0xDEAF, 0x5F6C, 0xDEB0, 0x658C, + 0xDEB1, 0x6AB3, 0xDEB2, 0x6BAF, 0xDEB3, 0x6D5C, 0xDEB4, 0x6FF1, 0xDEB5, 0x7015, 0xDEB6, 0x725D, 0xDEB7, 0x73AD, 0xDEB8, 0x8CA7, + 0xDEB9, 0x8CD3, 0xDEBA, 0x983B, 0xDEBB, 0x6191, 0xDEBC, 0x6C37, 0xDEBD, 0x8058, 0xDEBE, 0x9A01, 0xDEBF, 0x4E4D, 0xDEC0, 0x4E8B, + 0xDEC1, 0x4E9B, 0xDEC2, 0x4ED5, 0xDEC3, 0x4F3A, 0xDEC4, 0x4F3C, 0xDEC5, 0x4F7F, 0xDEC6, 0x4FDF, 0xDEC7, 0x50FF, 0xDEC8, 0x53F2, + 0xDEC9, 0x53F8, 0xDECA, 0x5506, 0xDECB, 0x55E3, 0xDECC, 0x56DB, 0xDECD, 0x58EB, 0xDECE, 0x5962, 0xDECF, 0x5A11, 0xDED0, 0x5BEB, + 0xDED1, 0x5BFA, 0xDED2, 0x5C04, 0xDED3, 0x5DF3, 0xDED4, 0x5E2B, 0xDED5, 0x5F99, 0xDED6, 0x601D, 0xDED7, 0x6368, 0xDED8, 0x659C, + 0xDED9, 0x65AF, 0xDEDA, 0x67F6, 0xDEDB, 0x67FB, 0xDEDC, 0x68AD, 0xDEDD, 0x6B7B, 0xDEDE, 0x6C99, 0xDEDF, 0x6CD7, 0xDEE0, 0x6E23, + 0xDEE1, 0x7009, 0xDEE2, 0x7345, 0xDEE3, 0x7802, 0xDEE4, 0x793E, 0xDEE5, 0x7940, 0xDEE6, 0x7960, 0xDEE7, 0x79C1, 0xDEE8, 0x7BE9, + 0xDEE9, 0x7D17, 0xDEEA, 0x7D72, 0xDEEB, 0x8086, 0xDEEC, 0x820D, 0xDEED, 0x838E, 0xDEEE, 0x84D1, 0xDEEF, 0x86C7, 0xDEF0, 0x88DF, + 0xDEF1, 0x8A50, 0xDEF2, 0x8A5E, 0xDEF3, 0x8B1D, 0xDEF4, 0x8CDC, 0xDEF5, 0x8D66, 0xDEF6, 0x8FAD, 0xDEF7, 0x90AA, 0xDEF8, 0x98FC, + 0xDEF9, 0x99DF, 0xDEFA, 0x9E9D, 0xDEFB, 0x524A, 0xDEFC, 0xF969, 0xDEFD, 0x6714, 0xDEFE, 0xF96A, 0xDFA1, 0x5098, 0xDFA2, 0x522A, + 0xDFA3, 0x5C71, 0xDFA4, 0x6563, 0xDFA5, 0x6C55, 0xDFA6, 0x73CA, 0xDFA7, 0x7523, 0xDFA8, 0x759D, 0xDFA9, 0x7B97, 0xDFAA, 0x849C, + 0xDFAB, 0x9178, 0xDFAC, 0x9730, 0xDFAD, 0x4E77, 0xDFAE, 0x6492, 0xDFAF, 0x6BBA, 0xDFB0, 0x715E, 0xDFB1, 0x85A9, 0xDFB2, 0x4E09, + 0xDFB3, 0xF96B, 0xDFB4, 0x6749, 0xDFB5, 0x68EE, 0xDFB6, 0x6E17, 0xDFB7, 0x829F, 0xDFB8, 0x8518, 0xDFB9, 0x886B, 0xDFBA, 0x63F7, + 0xDFBB, 0x6F81, 0xDFBC, 0x9212, 0xDFBD, 0x98AF, 0xDFBE, 0x4E0A, 0xDFBF, 0x50B7, 0xDFC0, 0x50CF, 0xDFC1, 0x511F, 0xDFC2, 0x5546, + 0xDFC3, 0x55AA, 0xDFC4, 0x5617, 0xDFC5, 0x5B40, 0xDFC6, 0x5C19, 0xDFC7, 0x5CE0, 0xDFC8, 0x5E38, 0xDFC9, 0x5E8A, 0xDFCA, 0x5EA0, + 0xDFCB, 0x5EC2, 0xDFCC, 0x60F3, 0xDFCD, 0x6851, 0xDFCE, 0x6A61, 0xDFCF, 0x6E58, 0xDFD0, 0x723D, 0xDFD1, 0x7240, 0xDFD2, 0x72C0, + 0xDFD3, 0x76F8, 0xDFD4, 0x7965, 0xDFD5, 0x7BB1, 0xDFD6, 0x7FD4, 0xDFD7, 0x88F3, 0xDFD8, 0x89F4, 0xDFD9, 0x8A73, 0xDFDA, 0x8C61, + 0xDFDB, 0x8CDE, 0xDFDC, 0x971C, 0xDFDD, 0x585E, 0xDFDE, 0x74BD, 0xDFDF, 0x8CFD, 0xDFE0, 0x55C7, 0xDFE1, 0xF96C, 0xDFE2, 0x7A61, + 0xDFE3, 0x7D22, 0xDFE4, 0x8272, 0xDFE5, 0x7272, 0xDFE6, 0x751F, 0xDFE7, 0x7525, 0xDFE8, 0xF96D, 0xDFE9, 0x7B19, 0xDFEA, 0x5885, + 0xDFEB, 0x58FB, 0xDFEC, 0x5DBC, 0xDFED, 0x5E8F, 0xDFEE, 0x5EB6, 0xDFEF, 0x5F90, 0xDFF0, 0x6055, 0xDFF1, 0x6292, 0xDFF2, 0x637F, + 0xDFF3, 0x654D, 0xDFF4, 0x6691, 0xDFF5, 0x66D9, 0xDFF6, 0x66F8, 0xDFF7, 0x6816, 0xDFF8, 0x68F2, 0xDFF9, 0x7280, 0xDFFA, 0x745E, + 0xDFFB, 0x7B6E, 0xDFFC, 0x7D6E, 0xDFFD, 0x7DD6, 0xDFFE, 0x7F72, 0xE0A1, 0x80E5, 0xE0A2, 0x8212, 0xE0A3, 0x85AF, 0xE0A4, 0x897F, + 0xE0A5, 0x8A93, 0xE0A6, 0x901D, 0xE0A7, 0x92E4, 0xE0A8, 0x9ECD, 0xE0A9, 0x9F20, 0xE0AA, 0x5915, 0xE0AB, 0x596D, 0xE0AC, 0x5E2D, + 0xE0AD, 0x60DC, 0xE0AE, 0x6614, 0xE0AF, 0x6673, 0xE0B0, 0x6790, 0xE0B1, 0x6C50, 0xE0B2, 0x6DC5, 0xE0B3, 0x6F5F, 0xE0B4, 0x77F3, + 0xE0B5, 0x78A9, 0xE0B6, 0x84C6, 0xE0B7, 0x91CB, 0xE0B8, 0x932B, 0xE0B9, 0x4ED9, 0xE0BA, 0x50CA, 0xE0BB, 0x5148, 0xE0BC, 0x5584, + 0xE0BD, 0x5B0B, 0xE0BE, 0x5BA3, 0xE0BF, 0x6247, 0xE0C0, 0x657E, 0xE0C1, 0x65CB, 0xE0C2, 0x6E32, 0xE0C3, 0x717D, 0xE0C4, 0x7401, + 0xE0C5, 0x7444, 0xE0C6, 0x7487, 0xE0C7, 0x74BF, 0xE0C8, 0x766C, 0xE0C9, 0x79AA, 0xE0CA, 0x7DDA, 0xE0CB, 0x7E55, 0xE0CC, 0x7FA8, + 0xE0CD, 0x817A, 0xE0CE, 0x81B3, 0xE0CF, 0x8239, 0xE0D0, 0x861A, 0xE0D1, 0x87EC, 0xE0D2, 0x8A75, 0xE0D3, 0x8DE3, 0xE0D4, 0x9078, + 0xE0D5, 0x9291, 0xE0D6, 0x9425, 0xE0D7, 0x994D, 0xE0D8, 0x9BAE, 0xE0D9, 0x5368, 0xE0DA, 0x5C51, 0xE0DB, 0x6954, 0xE0DC, 0x6CC4, + 0xE0DD, 0x6D29, 0xE0DE, 0x6E2B, 0xE0DF, 0x820C, 0xE0E0, 0x859B, 0xE0E1, 0x893B, 0xE0E2, 0x8A2D, 0xE0E3, 0x8AAA, 0xE0E4, 0x96EA, + 0xE0E5, 0x9F67, 0xE0E6, 0x5261, 0xE0E7, 0x66B9, 0xE0E8, 0x6BB2, 0xE0E9, 0x7E96, 0xE0EA, 0x87FE, 0xE0EB, 0x8D0D, 0xE0EC, 0x9583, + 0xE0ED, 0x965D, 0xE0EE, 0x651D, 0xE0EF, 0x6D89, 0xE0F0, 0x71EE, 0xE0F1, 0xF96E, 0xE0F2, 0x57CE, 0xE0F3, 0x59D3, 0xE0F4, 0x5BAC, + 0xE0F5, 0x6027, 0xE0F6, 0x60FA, 0xE0F7, 0x6210, 0xE0F8, 0x661F, 0xE0F9, 0x665F, 0xE0FA, 0x7329, 0xE0FB, 0x73F9, 0xE0FC, 0x76DB, + 0xE0FD, 0x7701, 0xE0FE, 0x7B6C, 0xE1A1, 0x8056, 0xE1A2, 0x8072, 0xE1A3, 0x8165, 0xE1A4, 0x8AA0, 0xE1A5, 0x9192, 0xE1A6, 0x4E16, + 0xE1A7, 0x52E2, 0xE1A8, 0x6B72, 0xE1A9, 0x6D17, 0xE1AA, 0x7A05, 0xE1AB, 0x7B39, 0xE1AC, 0x7D30, 0xE1AD, 0xF96F, 0xE1AE, 0x8CB0, + 0xE1AF, 0x53EC, 0xE1B0, 0x562F, 0xE1B1, 0x5851, 0xE1B2, 0x5BB5, 0xE1B3, 0x5C0F, 0xE1B4, 0x5C11, 0xE1B5, 0x5DE2, 0xE1B6, 0x6240, + 0xE1B7, 0x6383, 0xE1B8, 0x6414, 0xE1B9, 0x662D, 0xE1BA, 0x68B3, 0xE1BB, 0x6CBC, 0xE1BC, 0x6D88, 0xE1BD, 0x6EAF, 0xE1BE, 0x701F, + 0xE1BF, 0x70A4, 0xE1C0, 0x71D2, 0xE1C1, 0x7526, 0xE1C2, 0x758F, 0xE1C3, 0x758E, 0xE1C4, 0x7619, 0xE1C5, 0x7B11, 0xE1C6, 0x7BE0, + 0xE1C7, 0x7C2B, 0xE1C8, 0x7D20, 0xE1C9, 0x7D39, 0xE1CA, 0x852C, 0xE1CB, 0x856D, 0xE1CC, 0x8607, 0xE1CD, 0x8A34, 0xE1CE, 0x900D, + 0xE1CF, 0x9061, 0xE1D0, 0x90B5, 0xE1D1, 0x92B7, 0xE1D2, 0x97F6, 0xE1D3, 0x9A37, 0xE1D4, 0x4FD7, 0xE1D5, 0x5C6C, 0xE1D6, 0x675F, + 0xE1D7, 0x6D91, 0xE1D8, 0x7C9F, 0xE1D9, 0x7E8C, 0xE1DA, 0x8B16, 0xE1DB, 0x8D16, 0xE1DC, 0x901F, 0xE1DD, 0x5B6B, 0xE1DE, 0x5DFD, + 0xE1DF, 0x640D, 0xE1E0, 0x84C0, 0xE1E1, 0x905C, 0xE1E2, 0x98E1, 0xE1E3, 0x7387, 0xE1E4, 0x5B8B, 0xE1E5, 0x609A, 0xE1E6, 0x677E, + 0xE1E7, 0x6DDE, 0xE1E8, 0x8A1F, 0xE1E9, 0x8AA6, 0xE1EA, 0x9001, 0xE1EB, 0x980C, 0xE1EC, 0x5237, 0xE1ED, 0xF970, 0xE1EE, 0x7051, + 0xE1EF, 0x788E, 0xE1F0, 0x9396, 0xE1F1, 0x8870, 0xE1F2, 0x91D7, 0xE1F3, 0x4FEE, 0xE1F4, 0x53D7, 0xE1F5, 0x55FD, 0xE1F6, 0x56DA, + 0xE1F7, 0x5782, 0xE1F8, 0x58FD, 0xE1F9, 0x5AC2, 0xE1FA, 0x5B88, 0xE1FB, 0x5CAB, 0xE1FC, 0x5CC0, 0xE1FD, 0x5E25, 0xE1FE, 0x6101, + 0xE2A1, 0x620D, 0xE2A2, 0x624B, 0xE2A3, 0x6388, 0xE2A4, 0x641C, 0xE2A5, 0x6536, 0xE2A6, 0x6578, 0xE2A7, 0x6A39, 0xE2A8, 0x6B8A, + 0xE2A9, 0x6C34, 0xE2AA, 0x6D19, 0xE2AB, 0x6F31, 0xE2AC, 0x71E7, 0xE2AD, 0x72E9, 0xE2AE, 0x7378, 0xE2AF, 0x7407, 0xE2B0, 0x74B2, + 0xE2B1, 0x7626, 0xE2B2, 0x7761, 0xE2B3, 0x79C0, 0xE2B4, 0x7A57, 0xE2B5, 0x7AEA, 0xE2B6, 0x7CB9, 0xE2B7, 0x7D8F, 0xE2B8, 0x7DAC, + 0xE2B9, 0x7E61, 0xE2BA, 0x7F9E, 0xE2BB, 0x8129, 0xE2BC, 0x8331, 0xE2BD, 0x8490, 0xE2BE, 0x84DA, 0xE2BF, 0x85EA, 0xE2C0, 0x8896, + 0xE2C1, 0x8AB0, 0xE2C2, 0x8B90, 0xE2C3, 0x8F38, 0xE2C4, 0x9042, 0xE2C5, 0x9083, 0xE2C6, 0x916C, 0xE2C7, 0x9296, 0xE2C8, 0x92B9, + 0xE2C9, 0x968B, 0xE2CA, 0x96A7, 0xE2CB, 0x96A8, 0xE2CC, 0x96D6, 0xE2CD, 0x9700, 0xE2CE, 0x9808, 0xE2CF, 0x9996, 0xE2D0, 0x9AD3, + 0xE2D1, 0x9B1A, 0xE2D2, 0x53D4, 0xE2D3, 0x587E, 0xE2D4, 0x5919, 0xE2D5, 0x5B70, 0xE2D6, 0x5BBF, 0xE2D7, 0x6DD1, 0xE2D8, 0x6F5A, + 0xE2D9, 0x719F, 0xE2DA, 0x7421, 0xE2DB, 0x74B9, 0xE2DC, 0x8085, 0xE2DD, 0x83FD, 0xE2DE, 0x5DE1, 0xE2DF, 0x5F87, 0xE2E0, 0x5FAA, + 0xE2E1, 0x6042, 0xE2E2, 0x65EC, 0xE2E3, 0x6812, 0xE2E4, 0x696F, 0xE2E5, 0x6A53, 0xE2E6, 0x6B89, 0xE2E7, 0x6D35, 0xE2E8, 0x6DF3, + 0xE2E9, 0x73E3, 0xE2EA, 0x76FE, 0xE2EB, 0x77AC, 0xE2EC, 0x7B4D, 0xE2ED, 0x7D14, 0xE2EE, 0x8123, 0xE2EF, 0x821C, 0xE2F0, 0x8340, + 0xE2F1, 0x84F4, 0xE2F2, 0x8563, 0xE2F3, 0x8A62, 0xE2F4, 0x8AC4, 0xE2F5, 0x9187, 0xE2F6, 0x931E, 0xE2F7, 0x9806, 0xE2F8, 0x99B4, + 0xE2F9, 0x620C, 0xE2FA, 0x8853, 0xE2FB, 0x8FF0, 0xE2FC, 0x9265, 0xE2FD, 0x5D07, 0xE2FE, 0x5D27, 0xE3A1, 0x5D69, 0xE3A2, 0x745F, + 0xE3A3, 0x819D, 0xE3A4, 0x8768, 0xE3A5, 0x6FD5, 0xE3A6, 0x62FE, 0xE3A7, 0x7FD2, 0xE3A8, 0x8936, 0xE3A9, 0x8972, 0xE3AA, 0x4E1E, + 0xE3AB, 0x4E58, 0xE3AC, 0x50E7, 0xE3AD, 0x52DD, 0xE3AE, 0x5347, 0xE3AF, 0x627F, 0xE3B0, 0x6607, 0xE3B1, 0x7E69, 0xE3B2, 0x8805, + 0xE3B3, 0x965E, 0xE3B4, 0x4F8D, 0xE3B5, 0x5319, 0xE3B6, 0x5636, 0xE3B7, 0x59CB, 0xE3B8, 0x5AA4, 0xE3B9, 0x5C38, 0xE3BA, 0x5C4E, + 0xE3BB, 0x5C4D, 0xE3BC, 0x5E02, 0xE3BD, 0x5F11, 0xE3BE, 0x6043, 0xE3BF, 0x65BD, 0xE3C0, 0x662F, 0xE3C1, 0x6642, 0xE3C2, 0x67BE, + 0xE3C3, 0x67F4, 0xE3C4, 0x731C, 0xE3C5, 0x77E2, 0xE3C6, 0x793A, 0xE3C7, 0x7FC5, 0xE3C8, 0x8494, 0xE3C9, 0x84CD, 0xE3CA, 0x8996, + 0xE3CB, 0x8A66, 0xE3CC, 0x8A69, 0xE3CD, 0x8AE1, 0xE3CE, 0x8C55, 0xE3CF, 0x8C7A, 0xE3D0, 0x57F4, 0xE3D1, 0x5BD4, 0xE3D2, 0x5F0F, + 0xE3D3, 0x606F, 0xE3D4, 0x62ED, 0xE3D5, 0x690D, 0xE3D6, 0x6B96, 0xE3D7, 0x6E5C, 0xE3D8, 0x7184, 0xE3D9, 0x7BD2, 0xE3DA, 0x8755, + 0xE3DB, 0x8B58, 0xE3DC, 0x8EFE, 0xE3DD, 0x98DF, 0xE3DE, 0x98FE, 0xE3DF, 0x4F38, 0xE3E0, 0x4F81, 0xE3E1, 0x4FE1, 0xE3E2, 0x547B, + 0xE3E3, 0x5A20, 0xE3E4, 0x5BB8, 0xE3E5, 0x613C, 0xE3E6, 0x65B0, 0xE3E7, 0x6668, 0xE3E8, 0x71FC, 0xE3E9, 0x7533, 0xE3EA, 0x795E, + 0xE3EB, 0x7D33, 0xE3EC, 0x814E, 0xE3ED, 0x81E3, 0xE3EE, 0x8398, 0xE3EF, 0x85AA, 0xE3F0, 0x85CE, 0xE3F1, 0x8703, 0xE3F2, 0x8A0A, + 0xE3F3, 0x8EAB, 0xE3F4, 0x8F9B, 0xE3F5, 0xF971, 0xE3F6, 0x8FC5, 0xE3F7, 0x5931, 0xE3F8, 0x5BA4, 0xE3F9, 0x5BE6, 0xE3FA, 0x6089, + 0xE3FB, 0x5BE9, 0xE3FC, 0x5C0B, 0xE3FD, 0x5FC3, 0xE3FE, 0x6C81, 0xE4A1, 0xF972, 0xE4A2, 0x6DF1, 0xE4A3, 0x700B, 0xE4A4, 0x751A, + 0xE4A5, 0x82AF, 0xE4A6, 0x8AF6, 0xE4A7, 0x4EC0, 0xE4A8, 0x5341, 0xE4A9, 0xF973, 0xE4AA, 0x96D9, 0xE4AB, 0x6C0F, 0xE4AC, 0x4E9E, + 0xE4AD, 0x4FC4, 0xE4AE, 0x5152, 0xE4AF, 0x555E, 0xE4B0, 0x5A25, 0xE4B1, 0x5CE8, 0xE4B2, 0x6211, 0xE4B3, 0x7259, 0xE4B4, 0x82BD, + 0xE4B5, 0x83AA, 0xE4B6, 0x86FE, 0xE4B7, 0x8859, 0xE4B8, 0x8A1D, 0xE4B9, 0x963F, 0xE4BA, 0x96C5, 0xE4BB, 0x9913, 0xE4BC, 0x9D09, + 0xE4BD, 0x9D5D, 0xE4BE, 0x580A, 0xE4BF, 0x5CB3, 0xE4C0, 0x5DBD, 0xE4C1, 0x5E44, 0xE4C2, 0x60E1, 0xE4C3, 0x6115, 0xE4C4, 0x63E1, + 0xE4C5, 0x6A02, 0xE4C6, 0x6E25, 0xE4C7, 0x9102, 0xE4C8, 0x9354, 0xE4C9, 0x984E, 0xE4CA, 0x9C10, 0xE4CB, 0x9F77, 0xE4CC, 0x5B89, + 0xE4CD, 0x5CB8, 0xE4CE, 0x6309, 0xE4CF, 0x664F, 0xE4D0, 0x6848, 0xE4D1, 0x773C, 0xE4D2, 0x96C1, 0xE4D3, 0x978D, 0xE4D4, 0x9854, + 0xE4D5, 0x9B9F, 0xE4D6, 0x65A1, 0xE4D7, 0x8B01, 0xE4D8, 0x8ECB, 0xE4D9, 0x95BC, 0xE4DA, 0x5535, 0xE4DB, 0x5CA9, 0xE4DC, 0x5DD6, + 0xE4DD, 0x5EB5, 0xE4DE, 0x6697, 0xE4DF, 0x764C, 0xE4E0, 0x83F4, 0xE4E1, 0x95C7, 0xE4E2, 0x58D3, 0xE4E3, 0x62BC, 0xE4E4, 0x72CE, + 0xE4E5, 0x9D28, 0xE4E6, 0x4EF0, 0xE4E7, 0x592E, 0xE4E8, 0x600F, 0xE4E9, 0x663B, 0xE4EA, 0x6B83, 0xE4EB, 0x79E7, 0xE4EC, 0x9D26, + 0xE4ED, 0x5393, 0xE4EE, 0x54C0, 0xE4EF, 0x57C3, 0xE4F0, 0x5D16, 0xE4F1, 0x611B, 0xE4F2, 0x66D6, 0xE4F3, 0x6DAF, 0xE4F4, 0x788D, + 0xE4F5, 0x827E, 0xE4F6, 0x9698, 0xE4F7, 0x9744, 0xE4F8, 0x5384, 0xE4F9, 0x627C, 0xE4FA, 0x6396, 0xE4FB, 0x6DB2, 0xE4FC, 0x7E0A, + 0xE4FD, 0x814B, 0xE4FE, 0x984D, 0xE5A1, 0x6AFB, 0xE5A2, 0x7F4C, 0xE5A3, 0x9DAF, 0xE5A4, 0x9E1A, 0xE5A5, 0x4E5F, 0xE5A6, 0x503B, + 0xE5A7, 0x51B6, 0xE5A8, 0x591C, 0xE5A9, 0x60F9, 0xE5AA, 0x63F6, 0xE5AB, 0x6930, 0xE5AC, 0x723A, 0xE5AD, 0x8036, 0xE5AE, 0xF974, + 0xE5AF, 0x91CE, 0xE5B0, 0x5F31, 0xE5B1, 0xF975, 0xE5B2, 0xF976, 0xE5B3, 0x7D04, 0xE5B4, 0x82E5, 0xE5B5, 0x846F, 0xE5B6, 0x84BB, + 0xE5B7, 0x85E5, 0xE5B8, 0x8E8D, 0xE5B9, 0xF977, 0xE5BA, 0x4F6F, 0xE5BB, 0xF978, 0xE5BC, 0xF979, 0xE5BD, 0x58E4, 0xE5BE, 0x5B43, + 0xE5BF, 0x6059, 0xE5C0, 0x63DA, 0xE5C1, 0x6518, 0xE5C2, 0x656D, 0xE5C3, 0x6698, 0xE5C4, 0xF97A, 0xE5C5, 0x694A, 0xE5C6, 0x6A23, + 0xE5C7, 0x6D0B, 0xE5C8, 0x7001, 0xE5C9, 0x716C, 0xE5CA, 0x75D2, 0xE5CB, 0x760D, 0xE5CC, 0x79B3, 0xE5CD, 0x7A70, 0xE5CE, 0xF97B, + 0xE5CF, 0x7F8A, 0xE5D0, 0xF97C, 0xE5D1, 0x8944, 0xE5D2, 0xF97D, 0xE5D3, 0x8B93, 0xE5D4, 0x91C0, 0xE5D5, 0x967D, 0xE5D6, 0xF97E, + 0xE5D7, 0x990A, 0xE5D8, 0x5704, 0xE5D9, 0x5FA1, 0xE5DA, 0x65BC, 0xE5DB, 0x6F01, 0xE5DC, 0x7600, 0xE5DD, 0x79A6, 0xE5DE, 0x8A9E, + 0xE5DF, 0x99AD, 0xE5E0, 0x9B5A, 0xE5E1, 0x9F6C, 0xE5E2, 0x5104, 0xE5E3, 0x61B6, 0xE5E4, 0x6291, 0xE5E5, 0x6A8D, 0xE5E6, 0x81C6, + 0xE5E7, 0x5043, 0xE5E8, 0x5830, 0xE5E9, 0x5F66, 0xE5EA, 0x7109, 0xE5EB, 0x8A00, 0xE5EC, 0x8AFA, 0xE5ED, 0x5B7C, 0xE5EE, 0x8616, + 0xE5EF, 0x4FFA, 0xE5F0, 0x513C, 0xE5F1, 0x56B4, 0xE5F2, 0x5944, 0xE5F3, 0x63A9, 0xE5F4, 0x6DF9, 0xE5F5, 0x5DAA, 0xE5F6, 0x696D, + 0xE5F7, 0x5186, 0xE5F8, 0x4E88, 0xE5F9, 0x4F59, 0xE5FA, 0xF97F, 0xE5FB, 0xF980, 0xE5FC, 0xF981, 0xE5FD, 0x5982, 0xE5FE, 0xF982, + 0xE6A1, 0xF983, 0xE6A2, 0x6B5F, 0xE6A3, 0x6C5D, 0xE6A4, 0xF984, 0xE6A5, 0x74B5, 0xE6A6, 0x7916, 0xE6A7, 0xF985, 0xE6A8, 0x8207, + 0xE6A9, 0x8245, 0xE6AA, 0x8339, 0xE6AB, 0x8F3F, 0xE6AC, 0x8F5D, 0xE6AD, 0xF986, 0xE6AE, 0x9918, 0xE6AF, 0xF987, 0xE6B0, 0xF988, + 0xE6B1, 0xF989, 0xE6B2, 0x4EA6, 0xE6B3, 0xF98A, 0xE6B4, 0x57DF, 0xE6B5, 0x5F79, 0xE6B6, 0x6613, 0xE6B7, 0xF98B, 0xE6B8, 0xF98C, + 0xE6B9, 0x75AB, 0xE6BA, 0x7E79, 0xE6BB, 0x8B6F, 0xE6BC, 0xF98D, 0xE6BD, 0x9006, 0xE6BE, 0x9A5B, 0xE6BF, 0x56A5, 0xE6C0, 0x5827, + 0xE6C1, 0x59F8, 0xE6C2, 0x5A1F, 0xE6C3, 0x5BB4, 0xE6C4, 0xF98E, 0xE6C5, 0x5EF6, 0xE6C6, 0xF98F, 0xE6C7, 0xF990, 0xE6C8, 0x6350, + 0xE6C9, 0x633B, 0xE6CA, 0xF991, 0xE6CB, 0x693D, 0xE6CC, 0x6C87, 0xE6CD, 0x6CBF, 0xE6CE, 0x6D8E, 0xE6CF, 0x6D93, 0xE6D0, 0x6DF5, + 0xE6D1, 0x6F14, 0xE6D2, 0xF992, 0xE6D3, 0x70DF, 0xE6D4, 0x7136, 0xE6D5, 0x7159, 0xE6D6, 0xF993, 0xE6D7, 0x71C3, 0xE6D8, 0x71D5, + 0xE6D9, 0xF994, 0xE6DA, 0x784F, 0xE6DB, 0x786F, 0xE6DC, 0xF995, 0xE6DD, 0x7B75, 0xE6DE, 0x7DE3, 0xE6DF, 0xF996, 0xE6E0, 0x7E2F, + 0xE6E1, 0xF997, 0xE6E2, 0x884D, 0xE6E3, 0x8EDF, 0xE6E4, 0xF998, 0xE6E5, 0xF999, 0xE6E6, 0xF99A, 0xE6E7, 0x925B, 0xE6E8, 0xF99B, + 0xE6E9, 0x9CF6, 0xE6EA, 0xF99C, 0xE6EB, 0xF99D, 0xE6EC, 0xF99E, 0xE6ED, 0x6085, 0xE6EE, 0x6D85, 0xE6EF, 0xF99F, 0xE6F0, 0x71B1, + 0xE6F1, 0xF9A0, 0xE6F2, 0xF9A1, 0xE6F3, 0x95B1, 0xE6F4, 0x53AD, 0xE6F5, 0xF9A2, 0xE6F6, 0xF9A3, 0xE6F7, 0xF9A4, 0xE6F8, 0x67D3, + 0xE6F9, 0xF9A5, 0xE6FA, 0x708E, 0xE6FB, 0x7130, 0xE6FC, 0x7430, 0xE6FD, 0x8276, 0xE6FE, 0x82D2, 0xE7A1, 0xF9A6, 0xE7A2, 0x95BB, + 0xE7A3, 0x9AE5, 0xE7A4, 0x9E7D, 0xE7A5, 0x66C4, 0xE7A6, 0xF9A7, 0xE7A7, 0x71C1, 0xE7A8, 0x8449, 0xE7A9, 0xF9A8, 0xE7AA, 0xF9A9, + 0xE7AB, 0x584B, 0xE7AC, 0xF9AA, 0xE7AD, 0xF9AB, 0xE7AE, 0x5DB8, 0xE7AF, 0x5F71, 0xE7B0, 0xF9AC, 0xE7B1, 0x6620, 0xE7B2, 0x668E, + 0xE7B3, 0x6979, 0xE7B4, 0x69AE, 0xE7B5, 0x6C38, 0xE7B6, 0x6CF3, 0xE7B7, 0x6E36, 0xE7B8, 0x6F41, 0xE7B9, 0x6FDA, 0xE7BA, 0x701B, + 0xE7BB, 0x702F, 0xE7BC, 0x7150, 0xE7BD, 0x71DF, 0xE7BE, 0x7370, 0xE7BF, 0xF9AD, 0xE7C0, 0x745B, 0xE7C1, 0xF9AE, 0xE7C2, 0x74D4, + 0xE7C3, 0x76C8, 0xE7C4, 0x7A4E, 0xE7C5, 0x7E93, 0xE7C6, 0xF9AF, 0xE7C7, 0xF9B0, 0xE7C8, 0x82F1, 0xE7C9, 0x8A60, 0xE7CA, 0x8FCE, + 0xE7CB, 0xF9B1, 0xE7CC, 0x9348, 0xE7CD, 0xF9B2, 0xE7CE, 0x9719, 0xE7CF, 0xF9B3, 0xE7D0, 0xF9B4, 0xE7D1, 0x4E42, 0xE7D2, 0x502A, + 0xE7D3, 0xF9B5, 0xE7D4, 0x5208, 0xE7D5, 0x53E1, 0xE7D6, 0x66F3, 0xE7D7, 0x6C6D, 0xE7D8, 0x6FCA, 0xE7D9, 0x730A, 0xE7DA, 0x777F, + 0xE7DB, 0x7A62, 0xE7DC, 0x82AE, 0xE7DD, 0x85DD, 0xE7DE, 0x8602, 0xE7DF, 0xF9B6, 0xE7E0, 0x88D4, 0xE7E1, 0x8A63, 0xE7E2, 0x8B7D, + 0xE7E3, 0x8C6B, 0xE7E4, 0xF9B7, 0xE7E5, 0x92B3, 0xE7E6, 0xF9B8, 0xE7E7, 0x9713, 0xE7E8, 0x9810, 0xE7E9, 0x4E94, 0xE7EA, 0x4F0D, + 0xE7EB, 0x4FC9, 0xE7EC, 0x50B2, 0xE7ED, 0x5348, 0xE7EE, 0x543E, 0xE7EF, 0x5433, 0xE7F0, 0x55DA, 0xE7F1, 0x5862, 0xE7F2, 0x58BA, + 0xE7F3, 0x5967, 0xE7F4, 0x5A1B, 0xE7F5, 0x5BE4, 0xE7F6, 0x609F, 0xE7F7, 0xF9B9, 0xE7F8, 0x61CA, 0xE7F9, 0x6556, 0xE7FA, 0x65FF, + 0xE7FB, 0x6664, 0xE7FC, 0x68A7, 0xE7FD, 0x6C5A, 0xE7FE, 0x6FB3, 0xE8A1, 0x70CF, 0xE8A2, 0x71AC, 0xE8A3, 0x7352, 0xE8A4, 0x7B7D, + 0xE8A5, 0x8708, 0xE8A6, 0x8AA4, 0xE8A7, 0x9C32, 0xE8A8, 0x9F07, 0xE8A9, 0x5C4B, 0xE8AA, 0x6C83, 0xE8AB, 0x7344, 0xE8AC, 0x7389, + 0xE8AD, 0x923A, 0xE8AE, 0x6EAB, 0xE8AF, 0x7465, 0xE8B0, 0x761F, 0xE8B1, 0x7A69, 0xE8B2, 0x7E15, 0xE8B3, 0x860A, 0xE8B4, 0x5140, + 0xE8B5, 0x58C5, 0xE8B6, 0x64C1, 0xE8B7, 0x74EE, 0xE8B8, 0x7515, 0xE8B9, 0x7670, 0xE8BA, 0x7FC1, 0xE8BB, 0x9095, 0xE8BC, 0x96CD, + 0xE8BD, 0x9954, 0xE8BE, 0x6E26, 0xE8BF, 0x74E6, 0xE8C0, 0x7AA9, 0xE8C1, 0x7AAA, 0xE8C2, 0x81E5, 0xE8C3, 0x86D9, 0xE8C4, 0x8778, + 0xE8C5, 0x8A1B, 0xE8C6, 0x5A49, 0xE8C7, 0x5B8C, 0xE8C8, 0x5B9B, 0xE8C9, 0x68A1, 0xE8CA, 0x6900, 0xE8CB, 0x6D63, 0xE8CC, 0x73A9, + 0xE8CD, 0x7413, 0xE8CE, 0x742C, 0xE8CF, 0x7897, 0xE8D0, 0x7DE9, 0xE8D1, 0x7FEB, 0xE8D2, 0x8118, 0xE8D3, 0x8155, 0xE8D4, 0x839E, + 0xE8D5, 0x8C4C, 0xE8D6, 0x962E, 0xE8D7, 0x9811, 0xE8D8, 0x66F0, 0xE8D9, 0x5F80, 0xE8DA, 0x65FA, 0xE8DB, 0x6789, 0xE8DC, 0x6C6A, + 0xE8DD, 0x738B, 0xE8DE, 0x502D, 0xE8DF, 0x5A03, 0xE8E0, 0x6B6A, 0xE8E1, 0x77EE, 0xE8E2, 0x5916, 0xE8E3, 0x5D6C, 0xE8E4, 0x5DCD, + 0xE8E5, 0x7325, 0xE8E6, 0x754F, 0xE8E7, 0xF9BA, 0xE8E8, 0xF9BB, 0xE8E9, 0x50E5, 0xE8EA, 0x51F9, 0xE8EB, 0x582F, 0xE8EC, 0x592D, + 0xE8ED, 0x5996, 0xE8EE, 0x59DA, 0xE8EF, 0x5BE5, 0xE8F0, 0xF9BC, 0xE8F1, 0xF9BD, 0xE8F2, 0x5DA2, 0xE8F3, 0x62D7, 0xE8F4, 0x6416, + 0xE8F5, 0x6493, 0xE8F6, 0x64FE, 0xE8F7, 0xF9BE, 0xE8F8, 0x66DC, 0xE8F9, 0xF9BF, 0xE8FA, 0x6A48, 0xE8FB, 0xF9C0, 0xE8FC, 0x71FF, + 0xE8FD, 0x7464, 0xE8FE, 0xF9C1, 0xE9A1, 0x7A88, 0xE9A2, 0x7AAF, 0xE9A3, 0x7E47, 0xE9A4, 0x7E5E, 0xE9A5, 0x8000, 0xE9A6, 0x8170, + 0xE9A7, 0xF9C2, 0xE9A8, 0x87EF, 0xE9A9, 0x8981, 0xE9AA, 0x8B20, 0xE9AB, 0x9059, 0xE9AC, 0xF9C3, 0xE9AD, 0x9080, 0xE9AE, 0x9952, + 0xE9AF, 0x617E, 0xE9B0, 0x6B32, 0xE9B1, 0x6D74, 0xE9B2, 0x7E1F, 0xE9B3, 0x8925, 0xE9B4, 0x8FB1, 0xE9B5, 0x4FD1, 0xE9B6, 0x50AD, + 0xE9B7, 0x5197, 0xE9B8, 0x52C7, 0xE9B9, 0x57C7, 0xE9BA, 0x5889, 0xE9BB, 0x5BB9, 0xE9BC, 0x5EB8, 0xE9BD, 0x6142, 0xE9BE, 0x6995, + 0xE9BF, 0x6D8C, 0xE9C0, 0x6E67, 0xE9C1, 0x6EB6, 0xE9C2, 0x7194, 0xE9C3, 0x7462, 0xE9C4, 0x7528, 0xE9C5, 0x752C, 0xE9C6, 0x8073, + 0xE9C7, 0x8338, 0xE9C8, 0x84C9, 0xE9C9, 0x8E0A, 0xE9CA, 0x9394, 0xE9CB, 0x93DE, 0xE9CC, 0xF9C4, 0xE9CD, 0x4E8E, 0xE9CE, 0x4F51, + 0xE9CF, 0x5076, 0xE9D0, 0x512A, 0xE9D1, 0x53C8, 0xE9D2, 0x53CB, 0xE9D3, 0x53F3, 0xE9D4, 0x5B87, 0xE9D5, 0x5BD3, 0xE9D6, 0x5C24, + 0xE9D7, 0x611A, 0xE9D8, 0x6182, 0xE9D9, 0x65F4, 0xE9DA, 0x725B, 0xE9DB, 0x7397, 0xE9DC, 0x7440, 0xE9DD, 0x76C2, 0xE9DE, 0x7950, + 0xE9DF, 0x7991, 0xE9E0, 0x79B9, 0xE9E1, 0x7D06, 0xE9E2, 0x7FBD, 0xE9E3, 0x828B, 0xE9E4, 0x85D5, 0xE9E5, 0x865E, 0xE9E6, 0x8FC2, + 0xE9E7, 0x9047, 0xE9E8, 0x90F5, 0xE9E9, 0x91EA, 0xE9EA, 0x9685, 0xE9EB, 0x96E8, 0xE9EC, 0x96E9, 0xE9ED, 0x52D6, 0xE9EE, 0x5F67, + 0xE9EF, 0x65ED, 0xE9F0, 0x6631, 0xE9F1, 0x682F, 0xE9F2, 0x715C, 0xE9F3, 0x7A36, 0xE9F4, 0x90C1, 0xE9F5, 0x980A, 0xE9F6, 0x4E91, + 0xE9F7, 0xF9C5, 0xE9F8, 0x6A52, 0xE9F9, 0x6B9E, 0xE9FA, 0x6F90, 0xE9FB, 0x7189, 0xE9FC, 0x8018, 0xE9FD, 0x82B8, 0xE9FE, 0x8553, + 0xEAA1, 0x904B, 0xEAA2, 0x9695, 0xEAA3, 0x96F2, 0xEAA4, 0x97FB, 0xEAA5, 0x851A, 0xEAA6, 0x9B31, 0xEAA7, 0x4E90, 0xEAA8, 0x718A, + 0xEAA9, 0x96C4, 0xEAAA, 0x5143, 0xEAAB, 0x539F, 0xEAAC, 0x54E1, 0xEAAD, 0x5713, 0xEAAE, 0x5712, 0xEAAF, 0x57A3, 0xEAB0, 0x5A9B, + 0xEAB1, 0x5AC4, 0xEAB2, 0x5BC3, 0xEAB3, 0x6028, 0xEAB4, 0x613F, 0xEAB5, 0x63F4, 0xEAB6, 0x6C85, 0xEAB7, 0x6D39, 0xEAB8, 0x6E72, + 0xEAB9, 0x6E90, 0xEABA, 0x7230, 0xEABB, 0x733F, 0xEABC, 0x7457, 0xEABD, 0x82D1, 0xEABE, 0x8881, 0xEABF, 0x8F45, 0xEAC0, 0x9060, + 0xEAC1, 0xF9C6, 0xEAC2, 0x9662, 0xEAC3, 0x9858, 0xEAC4, 0x9D1B, 0xEAC5, 0x6708, 0xEAC6, 0x8D8A, 0xEAC7, 0x925E, 0xEAC8, 0x4F4D, + 0xEAC9, 0x5049, 0xEACA, 0x50DE, 0xEACB, 0x5371, 0xEACC, 0x570D, 0xEACD, 0x59D4, 0xEACE, 0x5A01, 0xEACF, 0x5C09, 0xEAD0, 0x6170, + 0xEAD1, 0x6690, 0xEAD2, 0x6E2D, 0xEAD3, 0x7232, 0xEAD4, 0x744B, 0xEAD5, 0x7DEF, 0xEAD6, 0x80C3, 0xEAD7, 0x840E, 0xEAD8, 0x8466, + 0xEAD9, 0x853F, 0xEADA, 0x875F, 0xEADB, 0x885B, 0xEADC, 0x8918, 0xEADD, 0x8B02, 0xEADE, 0x9055, 0xEADF, 0x97CB, 0xEAE0, 0x9B4F, + 0xEAE1, 0x4E73, 0xEAE2, 0x4F91, 0xEAE3, 0x5112, 0xEAE4, 0x516A, 0xEAE5, 0xF9C7, 0xEAE6, 0x552F, 0xEAE7, 0x55A9, 0xEAE8, 0x5B7A, + 0xEAE9, 0x5BA5, 0xEAEA, 0x5E7C, 0xEAEB, 0x5E7D, 0xEAEC, 0x5EBE, 0xEAED, 0x60A0, 0xEAEE, 0x60DF, 0xEAEF, 0x6108, 0xEAF0, 0x6109, + 0xEAF1, 0x63C4, 0xEAF2, 0x6538, 0xEAF3, 0x6709, 0xEAF4, 0xF9C8, 0xEAF5, 0x67D4, 0xEAF6, 0x67DA, 0xEAF7, 0xF9C9, 0xEAF8, 0x6961, + 0xEAF9, 0x6962, 0xEAFA, 0x6CB9, 0xEAFB, 0x6D27, 0xEAFC, 0xF9CA, 0xEAFD, 0x6E38, 0xEAFE, 0xF9CB, 0xEBA1, 0x6FE1, 0xEBA2, 0x7336, + 0xEBA3, 0x7337, 0xEBA4, 0xF9CC, 0xEBA5, 0x745C, 0xEBA6, 0x7531, 0xEBA7, 0xF9CD, 0xEBA8, 0x7652, 0xEBA9, 0xF9CE, 0xEBAA, 0xF9CF, + 0xEBAB, 0x7DAD, 0xEBAC, 0x81FE, 0xEBAD, 0x8438, 0xEBAE, 0x88D5, 0xEBAF, 0x8A98, 0xEBB0, 0x8ADB, 0xEBB1, 0x8AED, 0xEBB2, 0x8E30, + 0xEBB3, 0x8E42, 0xEBB4, 0x904A, 0xEBB5, 0x903E, 0xEBB6, 0x907A, 0xEBB7, 0x9149, 0xEBB8, 0x91C9, 0xEBB9, 0x936E, 0xEBBA, 0xF9D0, + 0xEBBB, 0xF9D1, 0xEBBC, 0x5809, 0xEBBD, 0xF9D2, 0xEBBE, 0x6BD3, 0xEBBF, 0x8089, 0xEBC0, 0x80B2, 0xEBC1, 0xF9D3, 0xEBC2, 0xF9D4, + 0xEBC3, 0x5141, 0xEBC4, 0x596B, 0xEBC5, 0x5C39, 0xEBC6, 0xF9D5, 0xEBC7, 0xF9D6, 0xEBC8, 0x6F64, 0xEBC9, 0x73A7, 0xEBCA, 0x80E4, + 0xEBCB, 0x8D07, 0xEBCC, 0xF9D7, 0xEBCD, 0x9217, 0xEBCE, 0x958F, 0xEBCF, 0xF9D8, 0xEBD0, 0xF9D9, 0xEBD1, 0xF9DA, 0xEBD2, 0xF9DB, + 0xEBD3, 0x807F, 0xEBD4, 0x620E, 0xEBD5, 0x701C, 0xEBD6, 0x7D68, 0xEBD7, 0x878D, 0xEBD8, 0xF9DC, 0xEBD9, 0x57A0, 0xEBDA, 0x6069, + 0xEBDB, 0x6147, 0xEBDC, 0x6BB7, 0xEBDD, 0x8ABE, 0xEBDE, 0x9280, 0xEBDF, 0x96B1, 0xEBE0, 0x4E59, 0xEBE1, 0x541F, 0xEBE2, 0x6DEB, + 0xEBE3, 0x852D, 0xEBE4, 0x9670, 0xEBE5, 0x97F3, 0xEBE6, 0x98EE, 0xEBE7, 0x63D6, 0xEBE8, 0x6CE3, 0xEBE9, 0x9091, 0xEBEA, 0x51DD, + 0xEBEB, 0x61C9, 0xEBEC, 0x81BA, 0xEBED, 0x9DF9, 0xEBEE, 0x4F9D, 0xEBEF, 0x501A, 0xEBF0, 0x5100, 0xEBF1, 0x5B9C, 0xEBF2, 0x610F, + 0xEBF3, 0x61FF, 0xEBF4, 0x64EC, 0xEBF5, 0x6905, 0xEBF6, 0x6BC5, 0xEBF7, 0x7591, 0xEBF8, 0x77E3, 0xEBF9, 0x7FA9, 0xEBFA, 0x8264, + 0xEBFB, 0x858F, 0xEBFC, 0x87FB, 0xEBFD, 0x8863, 0xEBFE, 0x8ABC, 0xECA1, 0x8B70, 0xECA2, 0x91AB, 0xECA3, 0x4E8C, 0xECA4, 0x4EE5, + 0xECA5, 0x4F0A, 0xECA6, 0xF9DD, 0xECA7, 0xF9DE, 0xECA8, 0x5937, 0xECA9, 0x59E8, 0xECAA, 0xF9DF, 0xECAB, 0x5DF2, 0xECAC, 0x5F1B, + 0xECAD, 0x5F5B, 0xECAE, 0x6021, 0xECAF, 0xF9E0, 0xECB0, 0xF9E1, 0xECB1, 0xF9E2, 0xECB2, 0xF9E3, 0xECB3, 0x723E, 0xECB4, 0x73E5, + 0xECB5, 0xF9E4, 0xECB6, 0x7570, 0xECB7, 0x75CD, 0xECB8, 0xF9E5, 0xECB9, 0x79FB, 0xECBA, 0xF9E6, 0xECBB, 0x800C, 0xECBC, 0x8033, + 0xECBD, 0x8084, 0xECBE, 0x82E1, 0xECBF, 0x8351, 0xECC0, 0xF9E7, 0xECC1, 0xF9E8, 0xECC2, 0x8CBD, 0xECC3, 0x8CB3, 0xECC4, 0x9087, + 0xECC5, 0xF9E9, 0xECC6, 0xF9EA, 0xECC7, 0x98F4, 0xECC8, 0x990C, 0xECC9, 0xF9EB, 0xECCA, 0xF9EC, 0xECCB, 0x7037, 0xECCC, 0x76CA, + 0xECCD, 0x7FCA, 0xECCE, 0x7FCC, 0xECCF, 0x7FFC, 0xECD0, 0x8B1A, 0xECD1, 0x4EBA, 0xECD2, 0x4EC1, 0xECD3, 0x5203, 0xECD4, 0x5370, + 0xECD5, 0xF9ED, 0xECD6, 0x54BD, 0xECD7, 0x56E0, 0xECD8, 0x59FB, 0xECD9, 0x5BC5, 0xECDA, 0x5F15, 0xECDB, 0x5FCD, 0xECDC, 0x6E6E, + 0xECDD, 0xF9EE, 0xECDE, 0xF9EF, 0xECDF, 0x7D6A, 0xECE0, 0x8335, 0xECE1, 0xF9F0, 0xECE2, 0x8693, 0xECE3, 0x8A8D, 0xECE4, 0xF9F1, + 0xECE5, 0x976D, 0xECE6, 0x9777, 0xECE7, 0xF9F2, 0xECE8, 0xF9F3, 0xECE9, 0x4E00, 0xECEA, 0x4F5A, 0xECEB, 0x4F7E, 0xECEC, 0x58F9, + 0xECED, 0x65E5, 0xECEE, 0x6EA2, 0xECEF, 0x9038, 0xECF0, 0x93B0, 0xECF1, 0x99B9, 0xECF2, 0x4EFB, 0xECF3, 0x58EC, 0xECF4, 0x598A, + 0xECF5, 0x59D9, 0xECF6, 0x6041, 0xECF7, 0xF9F4, 0xECF8, 0xF9F5, 0xECF9, 0x7A14, 0xECFA, 0xF9F6, 0xECFB, 0x834F, 0xECFC, 0x8CC3, + 0xECFD, 0x5165, 0xECFE, 0x5344, 0xEDA1, 0xF9F7, 0xEDA2, 0xF9F8, 0xEDA3, 0xF9F9, 0xEDA4, 0x4ECD, 0xEDA5, 0x5269, 0xEDA6, 0x5B55, + 0xEDA7, 0x82BF, 0xEDA8, 0x4ED4, 0xEDA9, 0x523A, 0xEDAA, 0x54A8, 0xEDAB, 0x59C9, 0xEDAC, 0x59FF, 0xEDAD, 0x5B50, 0xEDAE, 0x5B57, + 0xEDAF, 0x5B5C, 0xEDB0, 0x6063, 0xEDB1, 0x6148, 0xEDB2, 0x6ECB, 0xEDB3, 0x7099, 0xEDB4, 0x716E, 0xEDB5, 0x7386, 0xEDB6, 0x74F7, + 0xEDB7, 0x75B5, 0xEDB8, 0x78C1, 0xEDB9, 0x7D2B, 0xEDBA, 0x8005, 0xEDBB, 0x81EA, 0xEDBC, 0x8328, 0xEDBD, 0x8517, 0xEDBE, 0x85C9, + 0xEDBF, 0x8AEE, 0xEDC0, 0x8CC7, 0xEDC1, 0x96CC, 0xEDC2, 0x4F5C, 0xEDC3, 0x52FA, 0xEDC4, 0x56BC, 0xEDC5, 0x65AB, 0xEDC6, 0x6628, + 0xEDC7, 0x707C, 0xEDC8, 0x70B8, 0xEDC9, 0x7235, 0xEDCA, 0x7DBD, 0xEDCB, 0x828D, 0xEDCC, 0x914C, 0xEDCD, 0x96C0, 0xEDCE, 0x9D72, + 0xEDCF, 0x5B71, 0xEDD0, 0x68E7, 0xEDD1, 0x6B98, 0xEDD2, 0x6F7A, 0xEDD3, 0x76DE, 0xEDD4, 0x5C91, 0xEDD5, 0x66AB, 0xEDD6, 0x6F5B, + 0xEDD7, 0x7BB4, 0xEDD8, 0x7C2A, 0xEDD9, 0x8836, 0xEDDA, 0x96DC, 0xEDDB, 0x4E08, 0xEDDC, 0x4ED7, 0xEDDD, 0x5320, 0xEDDE, 0x5834, + 0xEDDF, 0x58BB, 0xEDE0, 0x58EF, 0xEDE1, 0x596C, 0xEDE2, 0x5C07, 0xEDE3, 0x5E33, 0xEDE4, 0x5E84, 0xEDE5, 0x5F35, 0xEDE6, 0x638C, + 0xEDE7, 0x66B2, 0xEDE8, 0x6756, 0xEDE9, 0x6A1F, 0xEDEA, 0x6AA3, 0xEDEB, 0x6B0C, 0xEDEC, 0x6F3F, 0xEDED, 0x7246, 0xEDEE, 0xF9FA, + 0xEDEF, 0x7350, 0xEDF0, 0x748B, 0xEDF1, 0x7AE0, 0xEDF2, 0x7CA7, 0xEDF3, 0x8178, 0xEDF4, 0x81DF, 0xEDF5, 0x81E7, 0xEDF6, 0x838A, + 0xEDF7, 0x846C, 0xEDF8, 0x8523, 0xEDF9, 0x8594, 0xEDFA, 0x85CF, 0xEDFB, 0x88DD, 0xEDFC, 0x8D13, 0xEDFD, 0x91AC, 0xEDFE, 0x9577, + 0xEEA1, 0x969C, 0xEEA2, 0x518D, 0xEEA3, 0x54C9, 0xEEA4, 0x5728, 0xEEA5, 0x5BB0, 0xEEA6, 0x624D, 0xEEA7, 0x6750, 0xEEA8, 0x683D, + 0xEEA9, 0x6893, 0xEEAA, 0x6E3D, 0xEEAB, 0x6ED3, 0xEEAC, 0x707D, 0xEEAD, 0x7E21, 0xEEAE, 0x88C1, 0xEEAF, 0x8CA1, 0xEEB0, 0x8F09, + 0xEEB1, 0x9F4B, 0xEEB2, 0x9F4E, 0xEEB3, 0x722D, 0xEEB4, 0x7B8F, 0xEEB5, 0x8ACD, 0xEEB6, 0x931A, 0xEEB7, 0x4F47, 0xEEB8, 0x4F4E, + 0xEEB9, 0x5132, 0xEEBA, 0x5480, 0xEEBB, 0x59D0, 0xEEBC, 0x5E95, 0xEEBD, 0x62B5, 0xEEBE, 0x6775, 0xEEBF, 0x696E, 0xEEC0, 0x6A17, + 0xEEC1, 0x6CAE, 0xEEC2, 0x6E1A, 0xEEC3, 0x72D9, 0xEEC4, 0x732A, 0xEEC5, 0x75BD, 0xEEC6, 0x7BB8, 0xEEC7, 0x7D35, 0xEEC8, 0x82E7, + 0xEEC9, 0x83F9, 0xEECA, 0x8457, 0xEECB, 0x85F7, 0xEECC, 0x8A5B, 0xEECD, 0x8CAF, 0xEECE, 0x8E87, 0xEECF, 0x9019, 0xEED0, 0x90B8, + 0xEED1, 0x96CE, 0xEED2, 0x9F5F, 0xEED3, 0x52E3, 0xEED4, 0x540A, 0xEED5, 0x5AE1, 0xEED6, 0x5BC2, 0xEED7, 0x6458, 0xEED8, 0x6575, + 0xEED9, 0x6EF4, 0xEEDA, 0x72C4, 0xEEDB, 0xF9FB, 0xEEDC, 0x7684, 0xEEDD, 0x7A4D, 0xEEDE, 0x7B1B, 0xEEDF, 0x7C4D, 0xEEE0, 0x7E3E, + 0xEEE1, 0x7FDF, 0xEEE2, 0x837B, 0xEEE3, 0x8B2B, 0xEEE4, 0x8CCA, 0xEEE5, 0x8D64, 0xEEE6, 0x8DE1, 0xEEE7, 0x8E5F, 0xEEE8, 0x8FEA, + 0xEEE9, 0x8FF9, 0xEEEA, 0x9069, 0xEEEB, 0x93D1, 0xEEEC, 0x4F43, 0xEEED, 0x4F7A, 0xEEEE, 0x50B3, 0xEEEF, 0x5168, 0xEEF0, 0x5178, + 0xEEF1, 0x524D, 0xEEF2, 0x526A, 0xEEF3, 0x5861, 0xEEF4, 0x587C, 0xEEF5, 0x5960, 0xEEF6, 0x5C08, 0xEEF7, 0x5C55, 0xEEF8, 0x5EDB, + 0xEEF9, 0x609B, 0xEEFA, 0x6230, 0xEEFB, 0x6813, 0xEEFC, 0x6BBF, 0xEEFD, 0x6C08, 0xEEFE, 0x6FB1, 0xEFA1, 0x714E, 0xEFA2, 0x7420, + 0xEFA3, 0x7530, 0xEFA4, 0x7538, 0xEFA5, 0x7551, 0xEFA6, 0x7672, 0xEFA7, 0x7B4C, 0xEFA8, 0x7B8B, 0xEFA9, 0x7BAD, 0xEFAA, 0x7BC6, + 0xEFAB, 0x7E8F, 0xEFAC, 0x8A6E, 0xEFAD, 0x8F3E, 0xEFAE, 0x8F49, 0xEFAF, 0x923F, 0xEFB0, 0x9293, 0xEFB1, 0x9322, 0xEFB2, 0x942B, + 0xEFB3, 0x96FB, 0xEFB4, 0x985A, 0xEFB5, 0x986B, 0xEFB6, 0x991E, 0xEFB7, 0x5207, 0xEFB8, 0x622A, 0xEFB9, 0x6298, 0xEFBA, 0x6D59, + 0xEFBB, 0x7664, 0xEFBC, 0x7ACA, 0xEFBD, 0x7BC0, 0xEFBE, 0x7D76, 0xEFBF, 0x5360, 0xEFC0, 0x5CBE, 0xEFC1, 0x5E97, 0xEFC2, 0x6F38, + 0xEFC3, 0x70B9, 0xEFC4, 0x7C98, 0xEFC5, 0x9711, 0xEFC6, 0x9B8E, 0xEFC7, 0x9EDE, 0xEFC8, 0x63A5, 0xEFC9, 0x647A, 0xEFCA, 0x8776, + 0xEFCB, 0x4E01, 0xEFCC, 0x4E95, 0xEFCD, 0x4EAD, 0xEFCE, 0x505C, 0xEFCF, 0x5075, 0xEFD0, 0x5448, 0xEFD1, 0x59C3, 0xEFD2, 0x5B9A, + 0xEFD3, 0x5E40, 0xEFD4, 0x5EAD, 0xEFD5, 0x5EF7, 0xEFD6, 0x5F81, 0xEFD7, 0x60C5, 0xEFD8, 0x633A, 0xEFD9, 0x653F, 0xEFDA, 0x6574, + 0xEFDB, 0x65CC, 0xEFDC, 0x6676, 0xEFDD, 0x6678, 0xEFDE, 0x67FE, 0xEFDF, 0x6968, 0xEFE0, 0x6A89, 0xEFE1, 0x6B63, 0xEFE2, 0x6C40, + 0xEFE3, 0x6DC0, 0xEFE4, 0x6DE8, 0xEFE5, 0x6E1F, 0xEFE6, 0x6E5E, 0xEFE7, 0x701E, 0xEFE8, 0x70A1, 0xEFE9, 0x738E, 0xEFEA, 0x73FD, + 0xEFEB, 0x753A, 0xEFEC, 0x775B, 0xEFED, 0x7887, 0xEFEE, 0x798E, 0xEFEF, 0x7A0B, 0xEFF0, 0x7A7D, 0xEFF1, 0x7CBE, 0xEFF2, 0x7D8E, + 0xEFF3, 0x8247, 0xEFF4, 0x8A02, 0xEFF5, 0x8AEA, 0xEFF6, 0x8C9E, 0xEFF7, 0x912D, 0xEFF8, 0x914A, 0xEFF9, 0x91D8, 0xEFFA, 0x9266, + 0xEFFB, 0x92CC, 0xEFFC, 0x9320, 0xEFFD, 0x9706, 0xEFFE, 0x9756, 0xF0A1, 0x975C, 0xF0A2, 0x9802, 0xF0A3, 0x9F0E, 0xF0A4, 0x5236, + 0xF0A5, 0x5291, 0xF0A6, 0x557C, 0xF0A7, 0x5824, 0xF0A8, 0x5E1D, 0xF0A9, 0x5F1F, 0xF0AA, 0x608C, 0xF0AB, 0x63D0, 0xF0AC, 0x68AF, + 0xF0AD, 0x6FDF, 0xF0AE, 0x796D, 0xF0AF, 0x7B2C, 0xF0B0, 0x81CD, 0xF0B1, 0x85BA, 0xF0B2, 0x88FD, 0xF0B3, 0x8AF8, 0xF0B4, 0x8E44, + 0xF0B5, 0x918D, 0xF0B6, 0x9664, 0xF0B7, 0x969B, 0xF0B8, 0x973D, 0xF0B9, 0x984C, 0xF0BA, 0x9F4A, 0xF0BB, 0x4FCE, 0xF0BC, 0x5146, + 0xF0BD, 0x51CB, 0xF0BE, 0x52A9, 0xF0BF, 0x5632, 0xF0C0, 0x5F14, 0xF0C1, 0x5F6B, 0xF0C2, 0x63AA, 0xF0C3, 0x64CD, 0xF0C4, 0x65E9, + 0xF0C5, 0x6641, 0xF0C6, 0x66FA, 0xF0C7, 0x66F9, 0xF0C8, 0x671D, 0xF0C9, 0x689D, 0xF0CA, 0x68D7, 0xF0CB, 0x69FD, 0xF0CC, 0x6F15, + 0xF0CD, 0x6F6E, 0xF0CE, 0x7167, 0xF0CF, 0x71E5, 0xF0D0, 0x722A, 0xF0D1, 0x74AA, 0xF0D2, 0x773A, 0xF0D3, 0x7956, 0xF0D4, 0x795A, + 0xF0D5, 0x79DF, 0xF0D6, 0x7A20, 0xF0D7, 0x7A95, 0xF0D8, 0x7C97, 0xF0D9, 0x7CDF, 0xF0DA, 0x7D44, 0xF0DB, 0x7E70, 0xF0DC, 0x8087, + 0xF0DD, 0x85FB, 0xF0DE, 0x86A4, 0xF0DF, 0x8A54, 0xF0E0, 0x8ABF, 0xF0E1, 0x8D99, 0xF0E2, 0x8E81, 0xF0E3, 0x9020, 0xF0E4, 0x906D, + 0xF0E5, 0x91E3, 0xF0E6, 0x963B, 0xF0E7, 0x96D5, 0xF0E8, 0x9CE5, 0xF0E9, 0x65CF, 0xF0EA, 0x7C07, 0xF0EB, 0x8DB3, 0xF0EC, 0x93C3, + 0xF0ED, 0x5B58, 0xF0EE, 0x5C0A, 0xF0EF, 0x5352, 0xF0F0, 0x62D9, 0xF0F1, 0x731D, 0xF0F2, 0x5027, 0xF0F3, 0x5B97, 0xF0F4, 0x5F9E, + 0xF0F5, 0x60B0, 0xF0F6, 0x616B, 0xF0F7, 0x68D5, 0xF0F8, 0x6DD9, 0xF0F9, 0x742E, 0xF0FA, 0x7A2E, 0xF0FB, 0x7D42, 0xF0FC, 0x7D9C, + 0xF0FD, 0x7E31, 0xF0FE, 0x816B, 0xF1A1, 0x8E2A, 0xF1A2, 0x8E35, 0xF1A3, 0x937E, 0xF1A4, 0x9418, 0xF1A5, 0x4F50, 0xF1A6, 0x5750, + 0xF1A7, 0x5DE6, 0xF1A8, 0x5EA7, 0xF1A9, 0x632B, 0xF1AA, 0x7F6A, 0xF1AB, 0x4E3B, 0xF1AC, 0x4F4F, 0xF1AD, 0x4F8F, 0xF1AE, 0x505A, + 0xF1AF, 0x59DD, 0xF1B0, 0x80C4, 0xF1B1, 0x546A, 0xF1B2, 0x5468, 0xF1B3, 0x55FE, 0xF1B4, 0x594F, 0xF1B5, 0x5B99, 0xF1B6, 0x5DDE, + 0xF1B7, 0x5EDA, 0xF1B8, 0x665D, 0xF1B9, 0x6731, 0xF1BA, 0x67F1, 0xF1BB, 0x682A, 0xF1BC, 0x6CE8, 0xF1BD, 0x6D32, 0xF1BE, 0x6E4A, + 0xF1BF, 0x6F8D, 0xF1C0, 0x70B7, 0xF1C1, 0x73E0, 0xF1C2, 0x7587, 0xF1C3, 0x7C4C, 0xF1C4, 0x7D02, 0xF1C5, 0x7D2C, 0xF1C6, 0x7DA2, + 0xF1C7, 0x821F, 0xF1C8, 0x86DB, 0xF1C9, 0x8A3B, 0xF1CA, 0x8A85, 0xF1CB, 0x8D70, 0xF1CC, 0x8E8A, 0xF1CD, 0x8F33, 0xF1CE, 0x9031, + 0xF1CF, 0x914E, 0xF1D0, 0x9152, 0xF1D1, 0x9444, 0xF1D2, 0x99D0, 0xF1D3, 0x7AF9, 0xF1D4, 0x7CA5, 0xF1D5, 0x4FCA, 0xF1D6, 0x5101, + 0xF1D7, 0x51C6, 0xF1D8, 0x57C8, 0xF1D9, 0x5BEF, 0xF1DA, 0x5CFB, 0xF1DB, 0x6659, 0xF1DC, 0x6A3D, 0xF1DD, 0x6D5A, 0xF1DE, 0x6E96, + 0xF1DF, 0x6FEC, 0xF1E0, 0x710C, 0xF1E1, 0x756F, 0xF1E2, 0x7AE3, 0xF1E3, 0x8822, 0xF1E4, 0x9021, 0xF1E5, 0x9075, 0xF1E6, 0x96CB, + 0xF1E7, 0x99FF, 0xF1E8, 0x8301, 0xF1E9, 0x4E2D, 0xF1EA, 0x4EF2, 0xF1EB, 0x8846, 0xF1EC, 0x91CD, 0xF1ED, 0x537D, 0xF1EE, 0x6ADB, + 0xF1EF, 0x696B, 0xF1F0, 0x6C41, 0xF1F1, 0x847A, 0xF1F2, 0x589E, 0xF1F3, 0x618E, 0xF1F4, 0x66FE, 0xF1F5, 0x62EF, 0xF1F6, 0x70DD, + 0xF1F7, 0x7511, 0xF1F8, 0x75C7, 0xF1F9, 0x7E52, 0xF1FA, 0x84B8, 0xF1FB, 0x8B49, 0xF1FC, 0x8D08, 0xF1FD, 0x4E4B, 0xF1FE, 0x53EA, + 0xF2A1, 0x54AB, 0xF2A2, 0x5730, 0xF2A3, 0x5740, 0xF2A4, 0x5FD7, 0xF2A5, 0x6301, 0xF2A6, 0x6307, 0xF2A7, 0x646F, 0xF2A8, 0x652F, + 0xF2A9, 0x65E8, 0xF2AA, 0x667A, 0xF2AB, 0x679D, 0xF2AC, 0x67B3, 0xF2AD, 0x6B62, 0xF2AE, 0x6C60, 0xF2AF, 0x6C9A, 0xF2B0, 0x6F2C, + 0xF2B1, 0x77E5, 0xF2B2, 0x7825, 0xF2B3, 0x7949, 0xF2B4, 0x7957, 0xF2B5, 0x7D19, 0xF2B6, 0x80A2, 0xF2B7, 0x8102, 0xF2B8, 0x81F3, + 0xF2B9, 0x829D, 0xF2BA, 0x82B7, 0xF2BB, 0x8718, 0xF2BC, 0x8A8C, 0xF2BD, 0xF9FC, 0xF2BE, 0x8D04, 0xF2BF, 0x8DBE, 0xF2C0, 0x9072, + 0xF2C1, 0x76F4, 0xF2C2, 0x7A19, 0xF2C3, 0x7A37, 0xF2C4, 0x7E54, 0xF2C5, 0x8077, 0xF2C6, 0x5507, 0xF2C7, 0x55D4, 0xF2C8, 0x5875, + 0xF2C9, 0x632F, 0xF2CA, 0x6422, 0xF2CB, 0x6649, 0xF2CC, 0x664B, 0xF2CD, 0x686D, 0xF2CE, 0x699B, 0xF2CF, 0x6B84, 0xF2D0, 0x6D25, + 0xF2D1, 0x6EB1, 0xF2D2, 0x73CD, 0xF2D3, 0x7468, 0xF2D4, 0x74A1, 0xF2D5, 0x755B, 0xF2D6, 0x75B9, 0xF2D7, 0x76E1, 0xF2D8, 0x771E, + 0xF2D9, 0x778B, 0xF2DA, 0x79E6, 0xF2DB, 0x7E09, 0xF2DC, 0x7E1D, 0xF2DD, 0x81FB, 0xF2DE, 0x852F, 0xF2DF, 0x8897, 0xF2E0, 0x8A3A, + 0xF2E1, 0x8CD1, 0xF2E2, 0x8EEB, 0xF2E3, 0x8FB0, 0xF2E4, 0x9032, 0xF2E5, 0x93AD, 0xF2E6, 0x9663, 0xF2E7, 0x9673, 0xF2E8, 0x9707, + 0xF2E9, 0x4F84, 0xF2EA, 0x53F1, 0xF2EB, 0x59EA, 0xF2EC, 0x5AC9, 0xF2ED, 0x5E19, 0xF2EE, 0x684E, 0xF2EF, 0x74C6, 0xF2F0, 0x75BE, + 0xF2F1, 0x79E9, 0xF2F2, 0x7A92, 0xF2F3, 0x81A3, 0xF2F4, 0x86ED, 0xF2F5, 0x8CEA, 0xF2F6, 0x8DCC, 0xF2F7, 0x8FED, 0xF2F8, 0x659F, + 0xF2F9, 0x6715, 0xF2FA, 0xF9FD, 0xF2FB, 0x57F7, 0xF2FC, 0x6F57, 0xF2FD, 0x7DDD, 0xF2FE, 0x8F2F, 0xF3A1, 0x93F6, 0xF3A2, 0x96C6, + 0xF3A3, 0x5FB5, 0xF3A4, 0x61F2, 0xF3A5, 0x6F84, 0xF3A6, 0x4E14, 0xF3A7, 0x4F98, 0xF3A8, 0x501F, 0xF3A9, 0x53C9, 0xF3AA, 0x55DF, + 0xF3AB, 0x5D6F, 0xF3AC, 0x5DEE, 0xF3AD, 0x6B21, 0xF3AE, 0x6B64, 0xF3AF, 0x78CB, 0xF3B0, 0x7B9A, 0xF3B1, 0xF9FE, 0xF3B2, 0x8E49, + 0xF3B3, 0x8ECA, 0xF3B4, 0x906E, 0xF3B5, 0x6349, 0xF3B6, 0x643E, 0xF3B7, 0x7740, 0xF3B8, 0x7A84, 0xF3B9, 0x932F, 0xF3BA, 0x947F, + 0xF3BB, 0x9F6A, 0xF3BC, 0x64B0, 0xF3BD, 0x6FAF, 0xF3BE, 0x71E6, 0xF3BF, 0x74A8, 0xF3C0, 0x74DA, 0xF3C1, 0x7AC4, 0xF3C2, 0x7C12, + 0xF3C3, 0x7E82, 0xF3C4, 0x7CB2, 0xF3C5, 0x7E98, 0xF3C6, 0x8B9A, 0xF3C7, 0x8D0A, 0xF3C8, 0x947D, 0xF3C9, 0x9910, 0xF3CA, 0x994C, + 0xF3CB, 0x5239, 0xF3CC, 0x5BDF, 0xF3CD, 0x64E6, 0xF3CE, 0x672D, 0xF3CF, 0x7D2E, 0xF3D0, 0x50ED, 0xF3D1, 0x53C3, 0xF3D2, 0x5879, + 0xF3D3, 0x6158, 0xF3D4, 0x6159, 0xF3D5, 0x61FA, 0xF3D6, 0x65AC, 0xF3D7, 0x7AD9, 0xF3D8, 0x8B92, 0xF3D9, 0x8B96, 0xF3DA, 0x5009, + 0xF3DB, 0x5021, 0xF3DC, 0x5275, 0xF3DD, 0x5531, 0xF3DE, 0x5A3C, 0xF3DF, 0x5EE0, 0xF3E0, 0x5F70, 0xF3E1, 0x6134, 0xF3E2, 0x655E, + 0xF3E3, 0x660C, 0xF3E4, 0x6636, 0xF3E5, 0x66A2, 0xF3E6, 0x69CD, 0xF3E7, 0x6EC4, 0xF3E8, 0x6F32, 0xF3E9, 0x7316, 0xF3EA, 0x7621, + 0xF3EB, 0x7A93, 0xF3EC, 0x8139, 0xF3ED, 0x8259, 0xF3EE, 0x83D6, 0xF3EF, 0x84BC, 0xF3F0, 0x50B5, 0xF3F1, 0x57F0, 0xF3F2, 0x5BC0, + 0xF3F3, 0x5BE8, 0xF3F4, 0x5F69, 0xF3F5, 0x63A1, 0xF3F6, 0x7826, 0xF3F7, 0x7DB5, 0xF3F8, 0x83DC, 0xF3F9, 0x8521, 0xF3FA, 0x91C7, + 0xF3FB, 0x91F5, 0xF3FC, 0x518A, 0xF3FD, 0x67F5, 0xF3FE, 0x7B56, 0xF4A1, 0x8CAC, 0xF4A2, 0x51C4, 0xF4A3, 0x59BB, 0xF4A4, 0x60BD, + 0xF4A5, 0x8655, 0xF4A6, 0x501C, 0xF4A7, 0xF9FF, 0xF4A8, 0x5254, 0xF4A9, 0x5C3A, 0xF4AA, 0x617D, 0xF4AB, 0x621A, 0xF4AC, 0x62D3, + 0xF4AD, 0x64F2, 0xF4AE, 0x65A5, 0xF4AF, 0x6ECC, 0xF4B0, 0x7620, 0xF4B1, 0x810A, 0xF4B2, 0x8E60, 0xF4B3, 0x965F, 0xF4B4, 0x96BB, + 0xF4B5, 0x4EDF, 0xF4B6, 0x5343, 0xF4B7, 0x5598, 0xF4B8, 0x5929, 0xF4B9, 0x5DDD, 0xF4BA, 0x64C5, 0xF4BB, 0x6CC9, 0xF4BC, 0x6DFA, + 0xF4BD, 0x7394, 0xF4BE, 0x7A7F, 0xF4BF, 0x821B, 0xF4C0, 0x85A6, 0xF4C1, 0x8CE4, 0xF4C2, 0x8E10, 0xF4C3, 0x9077, 0xF4C4, 0x91E7, + 0xF4C5, 0x95E1, 0xF4C6, 0x9621, 0xF4C7, 0x97C6, 0xF4C8, 0x51F8, 0xF4C9, 0x54F2, 0xF4CA, 0x5586, 0xF4CB, 0x5FB9, 0xF4CC, 0x64A4, + 0xF4CD, 0x6F88, 0xF4CE, 0x7DB4, 0xF4CF, 0x8F1F, 0xF4D0, 0x8F4D, 0xF4D1, 0x9435, 0xF4D2, 0x50C9, 0xF4D3, 0x5C16, 0xF4D4, 0x6CBE, + 0xF4D5, 0x6DFB, 0xF4D6, 0x751B, 0xF4D7, 0x77BB, 0xF4D8, 0x7C3D, 0xF4D9, 0x7C64, 0xF4DA, 0x8A79, 0xF4DB, 0x8AC2, 0xF4DC, 0x581E, + 0xF4DD, 0x59BE, 0xF4DE, 0x5E16, 0xF4DF, 0x6377, 0xF4E0, 0x7252, 0xF4E1, 0x758A, 0xF4E2, 0x776B, 0xF4E3, 0x8ADC, 0xF4E4, 0x8CBC, + 0xF4E5, 0x8F12, 0xF4E6, 0x5EF3, 0xF4E7, 0x6674, 0xF4E8, 0x6DF8, 0xF4E9, 0x807D, 0xF4EA, 0x83C1, 0xF4EB, 0x8ACB, 0xF4EC, 0x9751, + 0xF4ED, 0x9BD6, 0xF4EE, 0xFA00, 0xF4EF, 0x5243, 0xF4F0, 0x66FF, 0xF4F1, 0x6D95, 0xF4F2, 0x6EEF, 0xF4F3, 0x7DE0, 0xF4F4, 0x8AE6, + 0xF4F5, 0x902E, 0xF4F6, 0x905E, 0xF4F7, 0x9AD4, 0xF4F8, 0x521D, 0xF4F9, 0x527F, 0xF4FA, 0x54E8, 0xF4FB, 0x6194, 0xF4FC, 0x6284, + 0xF4FD, 0x62DB, 0xF4FE, 0x68A2, 0xF5A1, 0x6912, 0xF5A2, 0x695A, 0xF5A3, 0x6A35, 0xF5A4, 0x7092, 0xF5A5, 0x7126, 0xF5A6, 0x785D, + 0xF5A7, 0x7901, 0xF5A8, 0x790E, 0xF5A9, 0x79D2, 0xF5AA, 0x7A0D, 0xF5AB, 0x8096, 0xF5AC, 0x8278, 0xF5AD, 0x82D5, 0xF5AE, 0x8349, + 0xF5AF, 0x8549, 0xF5B0, 0x8C82, 0xF5B1, 0x8D85, 0xF5B2, 0x9162, 0xF5B3, 0x918B, 0xF5B4, 0x91AE, 0xF5B5, 0x4FC3, 0xF5B6, 0x56D1, + 0xF5B7, 0x71ED, 0xF5B8, 0x77D7, 0xF5B9, 0x8700, 0xF5BA, 0x89F8, 0xF5BB, 0x5BF8, 0xF5BC, 0x5FD6, 0xF5BD, 0x6751, 0xF5BE, 0x90A8, + 0xF5BF, 0x53E2, 0xF5C0, 0x585A, 0xF5C1, 0x5BF5, 0xF5C2, 0x60A4, 0xF5C3, 0x6181, 0xF5C4, 0x6460, 0xF5C5, 0x7E3D, 0xF5C6, 0x8070, + 0xF5C7, 0x8525, 0xF5C8, 0x9283, 0xF5C9, 0x64AE, 0xF5CA, 0x50AC, 0xF5CB, 0x5D14, 0xF5CC, 0x6700, 0xF5CD, 0x589C, 0xF5CE, 0x62BD, + 0xF5CF, 0x63A8, 0xF5D0, 0x690E, 0xF5D1, 0x6978, 0xF5D2, 0x6A1E, 0xF5D3, 0x6E6B, 0xF5D4, 0x76BA, 0xF5D5, 0x79CB, 0xF5D6, 0x82BB, + 0xF5D7, 0x8429, 0xF5D8, 0x8ACF, 0xF5D9, 0x8DA8, 0xF5DA, 0x8FFD, 0xF5DB, 0x9112, 0xF5DC, 0x914B, 0xF5DD, 0x919C, 0xF5DE, 0x9310, + 0xF5DF, 0x9318, 0xF5E0, 0x939A, 0xF5E1, 0x96DB, 0xF5E2, 0x9A36, 0xF5E3, 0x9C0D, 0xF5E4, 0x4E11, 0xF5E5, 0x755C, 0xF5E6, 0x795D, + 0xF5E7, 0x7AFA, 0xF5E8, 0x7B51, 0xF5E9, 0x7BC9, 0xF5EA, 0x7E2E, 0xF5EB, 0x84C4, 0xF5EC, 0x8E59, 0xF5ED, 0x8E74, 0xF5EE, 0x8EF8, + 0xF5EF, 0x9010, 0xF5F0, 0x6625, 0xF5F1, 0x693F, 0xF5F2, 0x7443, 0xF5F3, 0x51FA, 0xF5F4, 0x672E, 0xF5F5, 0x9EDC, 0xF5F6, 0x5145, + 0xF5F7, 0x5FE0, 0xF5F8, 0x6C96, 0xF5F9, 0x87F2, 0xF5FA, 0x885D, 0xF5FB, 0x8877, 0xF5FC, 0x60B4, 0xF5FD, 0x81B5, 0xF5FE, 0x8403, + 0xF6A1, 0x8D05, 0xF6A2, 0x53D6, 0xF6A3, 0x5439, 0xF6A4, 0x5634, 0xF6A5, 0x5A36, 0xF6A6, 0x5C31, 0xF6A7, 0x708A, 0xF6A8, 0x7FE0, + 0xF6A9, 0x805A, 0xF6AA, 0x8106, 0xF6AB, 0x81ED, 0xF6AC, 0x8DA3, 0xF6AD, 0x9189, 0xF6AE, 0x9A5F, 0xF6AF, 0x9DF2, 0xF6B0, 0x5074, + 0xF6B1, 0x4EC4, 0xF6B2, 0x53A0, 0xF6B3, 0x60FB, 0xF6B4, 0x6E2C, 0xF6B5, 0x5C64, 0xF6B6, 0x4F88, 0xF6B7, 0x5024, 0xF6B8, 0x55E4, + 0xF6B9, 0x5CD9, 0xF6BA, 0x5E5F, 0xF6BB, 0x6065, 0xF6BC, 0x6894, 0xF6BD, 0x6CBB, 0xF6BE, 0x6DC4, 0xF6BF, 0x71BE, 0xF6C0, 0x75D4, + 0xF6C1, 0x75F4, 0xF6C2, 0x7661, 0xF6C3, 0x7A1A, 0xF6C4, 0x7A49, 0xF6C5, 0x7DC7, 0xF6C6, 0x7DFB, 0xF6C7, 0x7F6E, 0xF6C8, 0x81F4, + 0xF6C9, 0x86A9, 0xF6CA, 0x8F1C, 0xF6CB, 0x96C9, 0xF6CC, 0x99B3, 0xF6CD, 0x9F52, 0xF6CE, 0x5247, 0xF6CF, 0x52C5, 0xF6D0, 0x98ED, + 0xF6D1, 0x89AA, 0xF6D2, 0x4E03, 0xF6D3, 0x67D2, 0xF6D4, 0x6F06, 0xF6D5, 0x4FB5, 0xF6D6, 0x5BE2, 0xF6D7, 0x6795, 0xF6D8, 0x6C88, + 0xF6D9, 0x6D78, 0xF6DA, 0x741B, 0xF6DB, 0x7827, 0xF6DC, 0x91DD, 0xF6DD, 0x937C, 0xF6DE, 0x87C4, 0xF6DF, 0x79E4, 0xF6E0, 0x7A31, + 0xF6E1, 0x5FEB, 0xF6E2, 0x4ED6, 0xF6E3, 0x54A4, 0xF6E4, 0x553E, 0xF6E5, 0x58AE, 0xF6E6, 0x59A5, 0xF6E7, 0x60F0, 0xF6E8, 0x6253, + 0xF6E9, 0x62D6, 0xF6EA, 0x6736, 0xF6EB, 0x6955, 0xF6EC, 0x8235, 0xF6ED, 0x9640, 0xF6EE, 0x99B1, 0xF6EF, 0x99DD, 0xF6F0, 0x502C, + 0xF6F1, 0x5353, 0xF6F2, 0x5544, 0xF6F3, 0x577C, 0xF6F4, 0xFA01, 0xF6F5, 0x6258, 0xF6F6, 0xFA02, 0xF6F7, 0x64E2, 0xF6F8, 0x666B, + 0xF6F9, 0x67DD, 0xF6FA, 0x6FC1, 0xF6FB, 0x6FEF, 0xF6FC, 0x7422, 0xF6FD, 0x7438, 0xF6FE, 0x8A17, 0xF7A1, 0x9438, 0xF7A2, 0x5451, + 0xF7A3, 0x5606, 0xF7A4, 0x5766, 0xF7A5, 0x5F48, 0xF7A6, 0x619A, 0xF7A7, 0x6B4E, 0xF7A8, 0x7058, 0xF7A9, 0x70AD, 0xF7AA, 0x7DBB, + 0xF7AB, 0x8A95, 0xF7AC, 0x596A, 0xF7AD, 0x812B, 0xF7AE, 0x63A2, 0xF7AF, 0x7708, 0xF7B0, 0x803D, 0xF7B1, 0x8CAA, 0xF7B2, 0x5854, + 0xF7B3, 0x642D, 0xF7B4, 0x69BB, 0xF7B5, 0x5B95, 0xF7B6, 0x5E11, 0xF7B7, 0x6E6F, 0xF7B8, 0xFA03, 0xF7B9, 0x8569, 0xF7BA, 0x514C, + 0xF7BB, 0x53F0, 0xF7BC, 0x592A, 0xF7BD, 0x6020, 0xF7BE, 0x614B, 0xF7BF, 0x6B86, 0xF7C0, 0x6C70, 0xF7C1, 0x6CF0, 0xF7C2, 0x7B1E, + 0xF7C3, 0x80CE, 0xF7C4, 0x82D4, 0xF7C5, 0x8DC6, 0xF7C6, 0x90B0, 0xF7C7, 0x98B1, 0xF7C8, 0xFA04, 0xF7C9, 0x64C7, 0xF7CA, 0x6FA4, + 0xF7CB, 0x6491, 0xF7CC, 0x6504, 0xF7CD, 0x514E, 0xF7CE, 0x5410, 0xF7CF, 0x571F, 0xF7D0, 0x8A0E, 0xF7D1, 0x615F, 0xF7D2, 0x6876, + 0xF7D3, 0xFA05, 0xF7D4, 0x75DB, 0xF7D5, 0x7B52, 0xF7D6, 0x7D71, 0xF7D7, 0x901A, 0xF7D8, 0x5806, 0xF7D9, 0x69CC, 0xF7DA, 0x817F, + 0xF7DB, 0x892A, 0xF7DC, 0x9000, 0xF7DD, 0x9839, 0xF7DE, 0x5078, 0xF7DF, 0x5957, 0xF7E0, 0x59AC, 0xF7E1, 0x6295, 0xF7E2, 0x900F, + 0xF7E3, 0x9B2A, 0xF7E4, 0x615D, 0xF7E5, 0x7279, 0xF7E6, 0x95D6, 0xF7E7, 0x5761, 0xF7E8, 0x5A46, 0xF7E9, 0x5DF4, 0xF7EA, 0x628A, + 0xF7EB, 0x64AD, 0xF7EC, 0x64FA, 0xF7ED, 0x6777, 0xF7EE, 0x6CE2, 0xF7EF, 0x6D3E, 0xF7F0, 0x722C, 0xF7F1, 0x7436, 0xF7F2, 0x7834, + 0xF7F3, 0x7F77, 0xF7F4, 0x82AD, 0xF7F5, 0x8DDB, 0xF7F6, 0x9817, 0xF7F7, 0x5224, 0xF7F8, 0x5742, 0xF7F9, 0x677F, 0xF7FA, 0x7248, + 0xF7FB, 0x74E3, 0xF7FC, 0x8CA9, 0xF7FD, 0x8FA6, 0xF7FE, 0x9211, 0xF8A1, 0x962A, 0xF8A2, 0x516B, 0xF8A3, 0x53ED, 0xF8A4, 0x634C, + 0xF8A5, 0x4F69, 0xF8A6, 0x5504, 0xF8A7, 0x6096, 0xF8A8, 0x6557, 0xF8A9, 0x6C9B, 0xF8AA, 0x6D7F, 0xF8AB, 0x724C, 0xF8AC, 0x72FD, + 0xF8AD, 0x7A17, 0xF8AE, 0x8987, 0xF8AF, 0x8C9D, 0xF8B0, 0x5F6D, 0xF8B1, 0x6F8E, 0xF8B2, 0x70F9, 0xF8B3, 0x81A8, 0xF8B4, 0x610E, + 0xF8B5, 0x4FBF, 0xF8B6, 0x504F, 0xF8B7, 0x6241, 0xF8B8, 0x7247, 0xF8B9, 0x7BC7, 0xF8BA, 0x7DE8, 0xF8BB, 0x7FE9, 0xF8BC, 0x904D, + 0xF8BD, 0x97AD, 0xF8BE, 0x9A19, 0xF8BF, 0x8CB6, 0xF8C0, 0x576A, 0xF8C1, 0x5E73, 0xF8C2, 0x67B0, 0xF8C3, 0x840D, 0xF8C4, 0x8A55, + 0xF8C5, 0x5420, 0xF8C6, 0x5B16, 0xF8C7, 0x5E63, 0xF8C8, 0x5EE2, 0xF8C9, 0x5F0A, 0xF8CA, 0x6583, 0xF8CB, 0x80BA, 0xF8CC, 0x853D, + 0xF8CD, 0x9589, 0xF8CE, 0x965B, 0xF8CF, 0x4F48, 0xF8D0, 0x5305, 0xF8D1, 0x530D, 0xF8D2, 0x530F, 0xF8D3, 0x5486, 0xF8D4, 0x54FA, + 0xF8D5, 0x5703, 0xF8D6, 0x5E03, 0xF8D7, 0x6016, 0xF8D8, 0x629B, 0xF8D9, 0x62B1, 0xF8DA, 0x6355, 0xF8DB, 0xFA06, 0xF8DC, 0x6CE1, + 0xF8DD, 0x6D66, 0xF8DE, 0x75B1, 0xF8DF, 0x7832, 0xF8E0, 0x80DE, 0xF8E1, 0x812F, 0xF8E2, 0x82DE, 0xF8E3, 0x8461, 0xF8E4, 0x84B2, + 0xF8E5, 0x888D, 0xF8E6, 0x8912, 0xF8E7, 0x900B, 0xF8E8, 0x92EA, 0xF8E9, 0x98FD, 0xF8EA, 0x9B91, 0xF8EB, 0x5E45, 0xF8EC, 0x66B4, + 0xF8ED, 0x66DD, 0xF8EE, 0x7011, 0xF8EF, 0x7206, 0xF8F0, 0xFA07, 0xF8F1, 0x4FF5, 0xF8F2, 0x527D, 0xF8F3, 0x5F6A, 0xF8F4, 0x6153, + 0xF8F5, 0x6753, 0xF8F6, 0x6A19, 0xF8F7, 0x6F02, 0xF8F8, 0x74E2, 0xF8F9, 0x7968, 0xF8FA, 0x8868, 0xF8FB, 0x8C79, 0xF8FC, 0x98C7, + 0xF8FD, 0x98C4, 0xF8FE, 0x9A43, 0xF9A1, 0x54C1, 0xF9A2, 0x7A1F, 0xF9A3, 0x6953, 0xF9A4, 0x8AF7, 0xF9A5, 0x8C4A, 0xF9A6, 0x98A8, + 0xF9A7, 0x99AE, 0xF9A8, 0x5F7C, 0xF9A9, 0x62AB, 0xF9AA, 0x75B2, 0xF9AB, 0x76AE, 0xF9AC, 0x88AB, 0xF9AD, 0x907F, 0xF9AE, 0x9642, + 0xF9AF, 0x5339, 0xF9B0, 0x5F3C, 0xF9B1, 0x5FC5, 0xF9B2, 0x6CCC, 0xF9B3, 0x73CC, 0xF9B4, 0x7562, 0xF9B5, 0x758B, 0xF9B6, 0x7B46, + 0xF9B7, 0x82FE, 0xF9B8, 0x999D, 0xF9B9, 0x4E4F, 0xF9BA, 0x903C, 0xF9BB, 0x4E0B, 0xF9BC, 0x4F55, 0xF9BD, 0x53A6, 0xF9BE, 0x590F, + 0xF9BF, 0x5EC8, 0xF9C0, 0x6630, 0xF9C1, 0x6CB3, 0xF9C2, 0x7455, 0xF9C3, 0x8377, 0xF9C4, 0x8766, 0xF9C5, 0x8CC0, 0xF9C6, 0x9050, + 0xF9C7, 0x971E, 0xF9C8, 0x9C15, 0xF9C9, 0x58D1, 0xF9CA, 0x5B78, 0xF9CB, 0x8650, 0xF9CC, 0x8B14, 0xF9CD, 0x9DB4, 0xF9CE, 0x5BD2, + 0xF9CF, 0x6068, 0xF9D0, 0x608D, 0xF9D1, 0x65F1, 0xF9D2, 0x6C57, 0xF9D3, 0x6F22, 0xF9D4, 0x6FA3, 0xF9D5, 0x701A, 0xF9D6, 0x7F55, + 0xF9D7, 0x7FF0, 0xF9D8, 0x9591, 0xF9D9, 0x9592, 0xF9DA, 0x9650, 0xF9DB, 0x97D3, 0xF9DC, 0x5272, 0xF9DD, 0x8F44, 0xF9DE, 0x51FD, + 0xF9DF, 0x542B, 0xF9E0, 0x54B8, 0xF9E1, 0x5563, 0xF9E2, 0x558A, 0xF9E3, 0x6ABB, 0xF9E4, 0x6DB5, 0xF9E5, 0x7DD8, 0xF9E6, 0x8266, + 0xF9E7, 0x929C, 0xF9E8, 0x9677, 0xF9E9, 0x9E79, 0xF9EA, 0x5408, 0xF9EB, 0x54C8, 0xF9EC, 0x76D2, 0xF9ED, 0x86E4, 0xF9EE, 0x95A4, + 0xF9EF, 0x95D4, 0xF9F0, 0x965C, 0xF9F1, 0x4EA2, 0xF9F2, 0x4F09, 0xF9F3, 0x59EE, 0xF9F4, 0x5AE6, 0xF9F5, 0x5DF7, 0xF9F6, 0x6052, + 0xF9F7, 0x6297, 0xF9F8, 0x676D, 0xF9F9, 0x6841, 0xF9FA, 0x6C86, 0xF9FB, 0x6E2F, 0xF9FC, 0x7F38, 0xF9FD, 0x809B, 0xF9FE, 0x822A, + 0xFAA1, 0xFA08, 0xFAA2, 0xFA09, 0xFAA3, 0x9805, 0xFAA4, 0x4EA5, 0xFAA5, 0x5055, 0xFAA6, 0x54B3, 0xFAA7, 0x5793, 0xFAA8, 0x595A, + 0xFAA9, 0x5B69, 0xFAAA, 0x5BB3, 0xFAAB, 0x61C8, 0xFAAC, 0x6977, 0xFAAD, 0x6D77, 0xFAAE, 0x7023, 0xFAAF, 0x87F9, 0xFAB0, 0x89E3, + 0xFAB1, 0x8A72, 0xFAB2, 0x8AE7, 0xFAB3, 0x9082, 0xFAB4, 0x99ED, 0xFAB5, 0x9AB8, 0xFAB6, 0x52BE, 0xFAB7, 0x6838, 0xFAB8, 0x5016, + 0xFAB9, 0x5E78, 0xFABA, 0x674F, 0xFABB, 0x8347, 0xFABC, 0x884C, 0xFABD, 0x4EAB, 0xFABE, 0x5411, 0xFABF, 0x56AE, 0xFAC0, 0x73E6, + 0xFAC1, 0x9115, 0xFAC2, 0x97FF, 0xFAC3, 0x9909, 0xFAC4, 0x9957, 0xFAC5, 0x9999, 0xFAC6, 0x5653, 0xFAC7, 0x589F, 0xFAC8, 0x865B, + 0xFAC9, 0x8A31, 0xFACA, 0x61B2, 0xFACB, 0x6AF6, 0xFACC, 0x737B, 0xFACD, 0x8ED2, 0xFACE, 0x6B47, 0xFACF, 0x96AA, 0xFAD0, 0x9A57, + 0xFAD1, 0x5955, 0xFAD2, 0x7200, 0xFAD3, 0x8D6B, 0xFAD4, 0x9769, 0xFAD5, 0x4FD4, 0xFAD6, 0x5CF4, 0xFAD7, 0x5F26, 0xFAD8, 0x61F8, + 0xFAD9, 0x665B, 0xFADA, 0x6CEB, 0xFADB, 0x70AB, 0xFADC, 0x7384, 0xFADD, 0x73B9, 0xFADE, 0x73FE, 0xFADF, 0x7729, 0xFAE0, 0x774D, + 0xFAE1, 0x7D43, 0xFAE2, 0x7D62, 0xFAE3, 0x7E23, 0xFAE4, 0x8237, 0xFAE5, 0x8852, 0xFAE6, 0xFA0A, 0xFAE7, 0x8CE2, 0xFAE8, 0x9249, + 0xFAE9, 0x986F, 0xFAEA, 0x5B51, 0xFAEB, 0x7A74, 0xFAEC, 0x8840, 0xFAED, 0x9801, 0xFAEE, 0x5ACC, 0xFAEF, 0x4FE0, 0xFAF0, 0x5354, + 0xFAF1, 0x593E, 0xFAF2, 0x5CFD, 0xFAF3, 0x633E, 0xFAF4, 0x6D79, 0xFAF5, 0x72F9, 0xFAF6, 0x8105, 0xFAF7, 0x8107, 0xFAF8, 0x83A2, + 0xFAF9, 0x92CF, 0xFAFA, 0x9830, 0xFAFB, 0x4EA8, 0xFAFC, 0x5144, 0xFAFD, 0x5211, 0xFAFE, 0x578B, 0xFBA1, 0x5F62, 0xFBA2, 0x6CC2, + 0xFBA3, 0x6ECE, 0xFBA4, 0x7005, 0xFBA5, 0x7050, 0xFBA6, 0x70AF, 0xFBA7, 0x7192, 0xFBA8, 0x73E9, 0xFBA9, 0x7469, 0xFBAA, 0x834A, + 0xFBAB, 0x87A2, 0xFBAC, 0x8861, 0xFBAD, 0x9008, 0xFBAE, 0x90A2, 0xFBAF, 0x93A3, 0xFBB0, 0x99A8, 0xFBB1, 0x516E, 0xFBB2, 0x5F57, + 0xFBB3, 0x60E0, 0xFBB4, 0x6167, 0xFBB5, 0x66B3, 0xFBB6, 0x8559, 0xFBB7, 0x8E4A, 0xFBB8, 0x91AF, 0xFBB9, 0x978B, 0xFBBA, 0x4E4E, + 0xFBBB, 0x4E92, 0xFBBC, 0x547C, 0xFBBD, 0x58D5, 0xFBBE, 0x58FA, 0xFBBF, 0x597D, 0xFBC0, 0x5CB5, 0xFBC1, 0x5F27, 0xFBC2, 0x6236, + 0xFBC3, 0x6248, 0xFBC4, 0x660A, 0xFBC5, 0x6667, 0xFBC6, 0x6BEB, 0xFBC7, 0x6D69, 0xFBC8, 0x6DCF, 0xFBC9, 0x6E56, 0xFBCA, 0x6EF8, + 0xFBCB, 0x6F94, 0xFBCC, 0x6FE0, 0xFBCD, 0x6FE9, 0xFBCE, 0x705D, 0xFBCF, 0x72D0, 0xFBD0, 0x7425, 0xFBD1, 0x745A, 0xFBD2, 0x74E0, + 0xFBD3, 0x7693, 0xFBD4, 0x795C, 0xFBD5, 0x7CCA, 0xFBD6, 0x7E1E, 0xFBD7, 0x80E1, 0xFBD8, 0x82A6, 0xFBD9, 0x846B, 0xFBDA, 0x84BF, + 0xFBDB, 0x864E, 0xFBDC, 0x865F, 0xFBDD, 0x8774, 0xFBDE, 0x8B77, 0xFBDF, 0x8C6A, 0xFBE0, 0x93AC, 0xFBE1, 0x9800, 0xFBE2, 0x9865, + 0xFBE3, 0x60D1, 0xFBE4, 0x6216, 0xFBE5, 0x9177, 0xFBE6, 0x5A5A, 0xFBE7, 0x660F, 0xFBE8, 0x6DF7, 0xFBE9, 0x6E3E, 0xFBEA, 0x743F, + 0xFBEB, 0x9B42, 0xFBEC, 0x5FFD, 0xFBED, 0x60DA, 0xFBEE, 0x7B0F, 0xFBEF, 0x54C4, 0xFBF0, 0x5F18, 0xFBF1, 0x6C5E, 0xFBF2, 0x6CD3, + 0xFBF3, 0x6D2A, 0xFBF4, 0x70D8, 0xFBF5, 0x7D05, 0xFBF6, 0x8679, 0xFBF7, 0x8A0C, 0xFBF8, 0x9D3B, 0xFBF9, 0x5316, 0xFBFA, 0x548C, + 0xFBFB, 0x5B05, 0xFBFC, 0x6A3A, 0xFBFD, 0x706B, 0xFBFE, 0x7575, 0xFCA1, 0x798D, 0xFCA2, 0x79BE, 0xFCA3, 0x82B1, 0xFCA4, 0x83EF, + 0xFCA5, 0x8A71, 0xFCA6, 0x8B41, 0xFCA7, 0x8CA8, 0xFCA8, 0x9774, 0xFCA9, 0xFA0B, 0xFCAA, 0x64F4, 0xFCAB, 0x652B, 0xFCAC, 0x78BA, + 0xFCAD, 0x78BB, 0xFCAE, 0x7A6B, 0xFCAF, 0x4E38, 0xFCB0, 0x559A, 0xFCB1, 0x5950, 0xFCB2, 0x5BA6, 0xFCB3, 0x5E7B, 0xFCB4, 0x60A3, + 0xFCB5, 0x63DB, 0xFCB6, 0x6B61, 0xFCB7, 0x6665, 0xFCB8, 0x6853, 0xFCB9, 0x6E19, 0xFCBA, 0x7165, 0xFCBB, 0x74B0, 0xFCBC, 0x7D08, + 0xFCBD, 0x9084, 0xFCBE, 0x9A69, 0xFCBF, 0x9C25, 0xFCC0, 0x6D3B, 0xFCC1, 0x6ED1, 0xFCC2, 0x733E, 0xFCC3, 0x8C41, 0xFCC4, 0x95CA, + 0xFCC5, 0x51F0, 0xFCC6, 0x5E4C, 0xFCC7, 0x5FA8, 0xFCC8, 0x604D, 0xFCC9, 0x60F6, 0xFCCA, 0x6130, 0xFCCB, 0x614C, 0xFCCC, 0x6643, + 0xFCCD, 0x6644, 0xFCCE, 0x69A5, 0xFCCF, 0x6CC1, 0xFCD0, 0x6E5F, 0xFCD1, 0x6EC9, 0xFCD2, 0x6F62, 0xFCD3, 0x714C, 0xFCD4, 0x749C, + 0xFCD5, 0x7687, 0xFCD6, 0x7BC1, 0xFCD7, 0x7C27, 0xFCD8, 0x8352, 0xFCD9, 0x8757, 0xFCDA, 0x9051, 0xFCDB, 0x968D, 0xFCDC, 0x9EC3, + 0xFCDD, 0x532F, 0xFCDE, 0x56DE, 0xFCDF, 0x5EFB, 0xFCE0, 0x5F8A, 0xFCE1, 0x6062, 0xFCE2, 0x6094, 0xFCE3, 0x61F7, 0xFCE4, 0x6666, + 0xFCE5, 0x6703, 0xFCE6, 0x6A9C, 0xFCE7, 0x6DEE, 0xFCE8, 0x6FAE, 0xFCE9, 0x7070, 0xFCEA, 0x736A, 0xFCEB, 0x7E6A, 0xFCEC, 0x81BE, + 0xFCED, 0x8334, 0xFCEE, 0x86D4, 0xFCEF, 0x8AA8, 0xFCF0, 0x8CC4, 0xFCF1, 0x5283, 0xFCF2, 0x7372, 0xFCF3, 0x5B96, 0xFCF4, 0x6A6B, + 0xFCF5, 0x9404, 0xFCF6, 0x54EE, 0xFCF7, 0x5686, 0xFCF8, 0x5B5D, 0xFCF9, 0x6548, 0xFCFA, 0x6585, 0xFCFB, 0x66C9, 0xFCFC, 0x689F, + 0xFCFD, 0x6D8D, 0xFCFE, 0x6DC6, 0xFDA1, 0x723B, 0xFDA2, 0x80B4, 0xFDA3, 0x9175, 0xFDA4, 0x9A4D, 0xFDA5, 0x4FAF, 0xFDA6, 0x5019, + 0xFDA7, 0x539A, 0xFDA8, 0x540E, 0xFDA9, 0x543C, 0xFDAA, 0x5589, 0xFDAB, 0x55C5, 0xFDAC, 0x5E3F, 0xFDAD, 0x5F8C, 0xFDAE, 0x673D, + 0xFDAF, 0x7166, 0xFDB0, 0x73DD, 0xFDB1, 0x9005, 0xFDB2, 0x52DB, 0xFDB3, 0x52F3, 0xFDB4, 0x5864, 0xFDB5, 0x58CE, 0xFDB6, 0x7104, + 0xFDB7, 0x718F, 0xFDB8, 0x71FB, 0xFDB9, 0x85B0, 0xFDBA, 0x8A13, 0xFDBB, 0x6688, 0xFDBC, 0x85A8, 0xFDBD, 0x55A7, 0xFDBE, 0x6684, + 0xFDBF, 0x714A, 0xFDC0, 0x8431, 0xFDC1, 0x5349, 0xFDC2, 0x5599, 0xFDC3, 0x6BC1, 0xFDC4, 0x5F59, 0xFDC5, 0x5FBD, 0xFDC6, 0x63EE, + 0xFDC7, 0x6689, 0xFDC8, 0x7147, 0xFDC9, 0x8AF1, 0xFDCA, 0x8F1D, 0xFDCB, 0x9EBE, 0xFDCC, 0x4F11, 0xFDCD, 0x643A, 0xFDCE, 0x70CB, + 0xFDCF, 0x7566, 0xFDD0, 0x8667, 0xFDD1, 0x6064, 0xFDD2, 0x8B4E, 0xFDD3, 0x9DF8, 0xFDD4, 0x5147, 0xFDD5, 0x51F6, 0xFDD6, 0x5308, + 0xFDD7, 0x6D36, 0xFDD8, 0x80F8, 0xFDD9, 0x9ED1, 0xFDDA, 0x6615, 0xFDDB, 0x6B23, 0xFDDC, 0x7098, 0xFDDD, 0x75D5, 0xFDDE, 0x5403, + 0xFDDF, 0x5C79, 0xFDE0, 0x7D07, 0xFDE1, 0x8A16, 0xFDE2, 0x6B20, 0xFDE3, 0x6B3D, 0xFDE4, 0x6B46, 0xFDE5, 0x5438, 0xFDE6, 0x6070, + 0xFDE7, 0x6D3D, 0xFDE8, 0x7FD5, 0xFDE9, 0x8208, 0xFDEA, 0x50D6, 0xFDEB, 0x51DE, 0xFDEC, 0x559C, 0xFDED, 0x566B, 0xFDEE, 0x56CD, + 0xFDEF, 0x59EC, 0xFDF0, 0x5B09, 0xFDF1, 0x5E0C, 0xFDF2, 0x6199, 0xFDF3, 0x6198, 0xFDF4, 0x6231, 0xFDF5, 0x665E, 0xFDF6, 0x66E6, + 0xFDF7, 0x7199, 0xFDF8, 0x71B9, 0xFDF9, 0x71BA, 0xFDFA, 0x72A7, 0xFDFB, 0x79A7, 0xFDFC, 0x7A00, 0xFDFD, 0x7FB2, 0xFDFE, 0x8A70, + 0, 0 +}; +#endif + +#if FF_CODE_PAGE == 950 || FF_CODE_PAGE == 0 /* Traditional Chinese */ +static const WCHAR uni2oem950[] = { /* Unicode --> Big5 pairs */ + 0x00A7, 0xA1B1, 0x00AF, 0xA1C2, 0x00B0, 0xA258, 0x00B1, 0xA1D3, 0x00B7, 0xA150, 0x00D7, 0xA1D1, 0x00F7, 0xA1D2, 0x02C7, 0xA3BE, + 0x02C9, 0xA3BC, 0x02CA, 0xA3BD, 0x02CB, 0xA3BF, 0x02CD, 0xA1C5, 0x02D9, 0xA3BB, 0x0391, 0xA344, 0x0392, 0xA345, 0x0393, 0xA346, + 0x0394, 0xA347, 0x0395, 0xA348, 0x0396, 0xA349, 0x0397, 0xA34A, 0x0398, 0xA34B, 0x0399, 0xA34C, 0x039A, 0xA34D, 0x039B, 0xA34E, + 0x039C, 0xA34F, 0x039D, 0xA350, 0x039E, 0xA351, 0x039F, 0xA352, 0x03A0, 0xA353, 0x03A1, 0xA354, 0x03A3, 0xA355, 0x03A4, 0xA356, + 0x03A5, 0xA357, 0x03A6, 0xA358, 0x03A7, 0xA359, 0x03A8, 0xA35A, 0x03A9, 0xA35B, 0x03B1, 0xA35C, 0x03B2, 0xA35D, 0x03B3, 0xA35E, + 0x03B4, 0xA35F, 0x03B5, 0xA360, 0x03B6, 0xA361, 0x03B7, 0xA362, 0x03B8, 0xA363, 0x03B9, 0xA364, 0x03BA, 0xA365, 0x03BB, 0xA366, + 0x03BC, 0xA367, 0x03BD, 0xA368, 0x03BE, 0xA369, 0x03BF, 0xA36A, 0x03C0, 0xA36B, 0x03C1, 0xA36C, 0x03C3, 0xA36D, 0x03C4, 0xA36E, + 0x03C5, 0xA36F, 0x03C6, 0xA370, 0x03C7, 0xA371, 0x03C8, 0xA372, 0x03C9, 0xA373, 0x2013, 0xA156, 0x2014, 0xA158, 0x2018, 0xA1A5, + 0x2019, 0xA1A6, 0x201C, 0xA1A7, 0x201D, 0xA1A8, 0x2025, 0xA14C, 0x2026, 0xA14B, 0x2027, 0xA145, 0x2032, 0xA1AC, 0x2035, 0xA1AB, + 0x203B, 0xA1B0, 0x20AC, 0xA3E1, 0x2103, 0xA24A, 0x2105, 0xA1C1, 0x2109, 0xA24B, 0x2160, 0xA2B9, 0x2161, 0xA2BA, 0x2162, 0xA2BB, + 0x2163, 0xA2BC, 0x2164, 0xA2BD, 0x2165, 0xA2BE, 0x2166, 0xA2BF, 0x2167, 0xA2C0, 0x2168, 0xA2C1, 0x2169, 0xA2C2, 0x2190, 0xA1F6, + 0x2191, 0xA1F4, 0x2192, 0xA1F7, 0x2193, 0xA1F5, 0x2196, 0xA1F8, 0x2197, 0xA1F9, 0x2198, 0xA1FB, 0x2199, 0xA1FA, 0x2215, 0xA241, + 0x221A, 0xA1D4, 0x221E, 0xA1DB, 0x221F, 0xA1E8, 0x2220, 0xA1E7, 0x2223, 0xA1FD, 0x2225, 0xA1FC, 0x2229, 0xA1E4, 0x222A, 0xA1E5, + 0x222B, 0xA1EC, 0x222E, 0xA1ED, 0x2234, 0xA1EF, 0x2235, 0xA1EE, 0x2252, 0xA1DC, 0x2260, 0xA1DA, 0x2261, 0xA1DD, 0x2266, 0xA1D8, + 0x2267, 0xA1D9, 0x2295, 0xA1F2, 0x2299, 0xA1F3, 0x22A5, 0xA1E6, 0x22BF, 0xA1E9, 0x2500, 0xA277, 0x2502, 0xA278, 0x250C, 0xA27A, + 0x2510, 0xA27B, 0x2514, 0xA27C, 0x2518, 0xA27D, 0x251C, 0xA275, 0x2524, 0xA274, 0x252C, 0xA273, 0x2534, 0xA272, 0x253C, 0xA271, + 0x2550, 0xA2A4, 0x2550, 0xF9F9, 0x2551, 0xF9F8, 0x2552, 0xF9E6, 0x2553, 0xF9EF, 0x2554, 0xF9DD, 0x2555, 0xF9E8, 0x2556, 0xF9F1, + 0x2557, 0xF9DF, 0x2558, 0xF9EC, 0x2559, 0xF9F5, 0x255A, 0xF9E3, 0x255B, 0xF9EE, 0x255C, 0xF9F7, 0x255D, 0xF9E5, 0x255E, 0xA2A5, + 0x255E, 0xF9E9, 0x255F, 0xF9F2, 0x2560, 0xF9E0, 0x2561, 0xA2A7, 0x2561, 0xF9EB, 0x2562, 0xF9F4, 0x2563, 0xF9E2, 0x2564, 0xF9E7, + 0x2565, 0xF9F0, 0x2566, 0xF9DE, 0x2567, 0xF9ED, 0x2568, 0xF9F6, 0x2569, 0xF9E4, 0x256A, 0xA2A6, 0x256A, 0xF9EA, 0x256B, 0xF9F3, + 0x256C, 0xF9E1, 0x256D, 0xA27E, 0x256D, 0xF9FA, 0x256E, 0xA2A1, 0x256E, 0xF9FB, 0x256F, 0xA2A3, 0x256F, 0xF9FD, 0x2570, 0xA2A2, + 0x2570, 0xF9FC, 0x2571, 0xA2AC, 0x2572, 0xA2AD, 0x2573, 0xA2AE, 0x2574, 0xA15A, 0x2581, 0xA262, 0x2582, 0xA263, 0x2583, 0xA264, + 0x2584, 0xA265, 0x2585, 0xA266, 0x2586, 0xA267, 0x2587, 0xA268, 0x2588, 0xA269, 0x2589, 0xA270, 0x258A, 0xA26F, 0x258B, 0xA26E, + 0x258C, 0xA26D, 0x258D, 0xA26C, 0x258E, 0xA26B, 0x258F, 0xA26A, 0x2593, 0xF9FE, 0x2594, 0xA276, 0x2595, 0xA279, 0x25A0, 0xA1BD, + 0x25A1, 0xA1BC, 0x25B2, 0xA1B6, 0x25B3, 0xA1B5, 0x25BC, 0xA1BF, 0x25BD, 0xA1BE, 0x25C6, 0xA1BB, 0x25C7, 0xA1BA, 0x25CB, 0xA1B3, + 0x25CE, 0xA1B7, 0x25CF, 0xA1B4, 0x25E2, 0xA2A8, 0x25E3, 0xA2A9, 0x25E4, 0xA2AB, 0x25E5, 0xA2AA, 0x2605, 0xA1B9, 0x2606, 0xA1B8, + 0x2640, 0xA1F0, 0x2642, 0xA1F1, 0x3000, 0xA140, 0x3001, 0xA142, 0x3002, 0xA143, 0x3003, 0xA1B2, 0x3008, 0xA171, 0x3009, 0xA172, + 0x300A, 0xA16D, 0x300B, 0xA16E, 0x300C, 0xA175, 0x300D, 0xA176, 0x300E, 0xA179, 0x300F, 0xA17A, 0x3010, 0xA169, 0x3011, 0xA16A, + 0x3012, 0xA245, 0x3014, 0xA165, 0x3015, 0xA166, 0x301D, 0xA1A9, 0x301E, 0xA1AA, 0x3021, 0xA2C3, 0x3022, 0xA2C4, 0x3023, 0xA2C5, + 0x3024, 0xA2C6, 0x3025, 0xA2C7, 0x3026, 0xA2C8, 0x3027, 0xA2C9, 0x3028, 0xA2CA, 0x3029, 0xA2CB, 0x3105, 0xA374, 0x3106, 0xA375, + 0x3107, 0xA376, 0x3108, 0xA377, 0x3109, 0xA378, 0x310A, 0xA379, 0x310B, 0xA37A, 0x310C, 0xA37B, 0x310D, 0xA37C, 0x310E, 0xA37D, + 0x310F, 0xA37E, 0x3110, 0xA3A1, 0x3111, 0xA3A2, 0x3112, 0xA3A3, 0x3113, 0xA3A4, 0x3114, 0xA3A5, 0x3115, 0xA3A6, 0x3116, 0xA3A7, + 0x3117, 0xA3A8, 0x3118, 0xA3A9, 0x3119, 0xA3AA, 0x311A, 0xA3AB, 0x311B, 0xA3AC, 0x311C, 0xA3AD, 0x311D, 0xA3AE, 0x311E, 0xA3AF, + 0x311F, 0xA3B0, 0x3120, 0xA3B1, 0x3121, 0xA3B2, 0x3122, 0xA3B3, 0x3123, 0xA3B4, 0x3124, 0xA3B5, 0x3125, 0xA3B6, 0x3126, 0xA3B7, + 0x3127, 0xA3B8, 0x3128, 0xA3B9, 0x3129, 0xA3BA, 0x32A3, 0xA1C0, 0x338E, 0xA255, 0x338F, 0xA256, 0x339C, 0xA250, 0x339D, 0xA251, + 0x339E, 0xA252, 0x33A1, 0xA254, 0x33C4, 0xA257, 0x33CE, 0xA253, 0x33D1, 0xA1EB, 0x33D2, 0xA1EA, 0x33D5, 0xA24F, 0x4E00, 0xA440, + 0x4E01, 0xA442, 0x4E03, 0xA443, 0x4E07, 0xC945, 0x4E08, 0xA456, 0x4E09, 0xA454, 0x4E0A, 0xA457, 0x4E0B, 0xA455, 0x4E0C, 0xC946, + 0x4E0D, 0xA4A3, 0x4E0E, 0xC94F, 0x4E0F, 0xC94D, 0x4E10, 0xA4A2, 0x4E11, 0xA4A1, 0x4E14, 0xA542, 0x4E15, 0xA541, 0x4E16, 0xA540, + 0x4E18, 0xA543, 0x4E19, 0xA4FE, 0x4E1E, 0xA5E0, 0x4E1F, 0xA5E1, 0x4E26, 0xA8C3, 0x4E2B, 0xA458, 0x4E2D, 0xA4A4, 0x4E2E, 0xC950, + 0x4E30, 0xA4A5, 0x4E31, 0xC963, 0x4E32, 0xA6EA, 0x4E33, 0xCBB1, 0x4E38, 0xA459, 0x4E39, 0xA4A6, 0x4E3B, 0xA544, 0x4E3C, 0xC964, + 0x4E42, 0xC940, 0x4E43, 0xA444, 0x4E45, 0xA45B, 0x4E47, 0xC947, 0x4E48, 0xA45C, 0x4E4B, 0xA4A7, 0x4E4D, 0xA545, 0x4E4E, 0xA547, + 0x4E4F, 0xA546, 0x4E52, 0xA5E2, 0x4E53, 0xA5E3, 0x4E56, 0xA8C4, 0x4E58, 0xADBC, 0x4E59, 0xA441, 0x4E5C, 0xC941, 0x4E5D, 0xA445, + 0x4E5E, 0xA45E, 0x4E5F, 0xA45D, 0x4E69, 0xA5E4, 0x4E73, 0xA8C5, 0x4E7E, 0xB0AE, 0x4E7F, 0xD44B, 0x4E82, 0xB6C3, 0x4E83, 0xDCB1, + 0x4E84, 0xDCB2, 0x4E86, 0xA446, 0x4E88, 0xA4A9, 0x4E8B, 0xA8C6, 0x4E8C, 0xA447, 0x4E8D, 0xC948, 0x4E8E, 0xA45F, 0x4E91, 0xA4AA, + 0x4E92, 0xA4AC, 0x4E93, 0xC951, 0x4E94, 0xA4AD, 0x4E95, 0xA4AB, 0x4E99, 0xA5E5, 0x4E9B, 0xA8C7, 0x4E9E, 0xA8C8, 0x4E9F, 0xAB45, + 0x4EA1, 0xA460, 0x4EA2, 0xA4AE, 0x4EA4, 0xA5E6, 0x4EA5, 0xA5E8, 0x4EA6, 0xA5E7, 0x4EA8, 0xA6EB, 0x4EAB, 0xA8C9, 0x4EAC, 0xA8CA, + 0x4EAD, 0xAB46, 0x4EAE, 0xAB47, 0x4EB3, 0xADBD, 0x4EB6, 0xDCB3, 0x4EB9, 0xF6D6, 0x4EBA, 0xA448, 0x4EC0, 0xA4B0, 0x4EC1, 0xA4AF, + 0x4EC2, 0xC952, 0x4EC3, 0xA4B1, 0x4EC4, 0xA4B7, 0x4EC6, 0xA4B2, 0x4EC7, 0xA4B3, 0x4EC8, 0xC954, 0x4EC9, 0xC953, 0x4ECA, 0xA4B5, + 0x4ECB, 0xA4B6, 0x4ECD, 0xA4B4, 0x4ED4, 0xA54A, 0x4ED5, 0xA54B, 0x4ED6, 0xA54C, 0x4ED7, 0xA54D, 0x4ED8, 0xA549, 0x4ED9, 0xA550, + 0x4EDA, 0xC96A, 0x4EDC, 0xC966, 0x4EDD, 0xC969, 0x4EDE, 0xA551, 0x4EDF, 0xA561, 0x4EE1, 0xC968, 0x4EE3, 0xA54E, 0x4EE4, 0xA54F, + 0x4EE5, 0xA548, 0x4EE8, 0xC965, 0x4EE9, 0xC967, 0x4EF0, 0xA5F5, 0x4EF1, 0xC9B0, 0x4EF2, 0xA5F2, 0x4EF3, 0xA5F6, 0x4EF4, 0xC9BA, + 0x4EF5, 0xC9AE, 0x4EF6, 0xA5F3, 0x4EF7, 0xC9B2, 0x4EFB, 0xA5F4, 0x4EFD, 0xA5F7, 0x4EFF, 0xA5E9, 0x4F00, 0xC9B1, 0x4F01, 0xA5F8, + 0x4F02, 0xC9B5, 0x4F04, 0xC9B9, 0x4F05, 0xC9B6, 0x4F08, 0xC9B3, 0x4F09, 0xA5EA, 0x4F0A, 0xA5EC, 0x4F0B, 0xA5F9, 0x4F0D, 0xA5EE, + 0x4F0E, 0xC9AB, 0x4F0F, 0xA5F1, 0x4F10, 0xA5EF, 0x4F11, 0xA5F0, 0x4F12, 0xC9BB, 0x4F13, 0xC9B8, 0x4F14, 0xC9AF, 0x4F15, 0xA5ED, + 0x4F18, 0xC9AC, 0x4F19, 0xA5EB, 0x4F1D, 0xC9B4, 0x4F22, 0xC9B7, 0x4F2C, 0xC9AD, 0x4F2D, 0xCA66, 0x4F2F, 0xA742, 0x4F30, 0xA6F4, + 0x4F33, 0xCA67, 0x4F34, 0xA6F1, 0x4F36, 0xA744, 0x4F38, 0xA6F9, 0x4F3A, 0xA6F8, 0x4F3B, 0xCA5B, 0x4F3C, 0xA6FC, 0x4F3D, 0xA6F7, + 0x4F3E, 0xCA60, 0x4F3F, 0xCA68, 0x4F41, 0xCA64, 0x4F43, 0xA6FA, 0x4F46, 0xA6FD, 0x4F47, 0xA6EE, 0x4F48, 0xA747, 0x4F49, 0xCA5D, + 0x4F4C, 0xCBBD, 0x4F4D, 0xA6EC, 0x4F4E, 0xA743, 0x4F4F, 0xA6ED, 0x4F50, 0xA6F5, 0x4F51, 0xA6F6, 0x4F52, 0xCA62, 0x4F53, 0xCA5E, + 0x4F54, 0xA6FB, 0x4F55, 0xA6F3, 0x4F56, 0xCA5A, 0x4F57, 0xA6EF, 0x4F58, 0xCA65, 0x4F59, 0xA745, 0x4F5A, 0xA748, 0x4F5B, 0xA6F2, + 0x4F5C, 0xA740, 0x4F5D, 0xA746, 0x4F5E, 0xA6F0, 0x4F5F, 0xCA63, 0x4F60, 0xA741, 0x4F61, 0xCA69, 0x4F62, 0xCA5C, 0x4F63, 0xA6FE, + 0x4F64, 0xCA5F, 0x4F67, 0xCA61, 0x4F69, 0xA8D8, 0x4F6A, 0xCBBF, 0x4F6B, 0xCBCB, 0x4F6C, 0xA8D0, 0x4F6E, 0xCBCC, 0x4F6F, 0xA8CB, + 0x4F70, 0xA8D5, 0x4F73, 0xA8CE, 0x4F74, 0xCBB9, 0x4F75, 0xA8D6, 0x4F76, 0xCBB8, 0x4F77, 0xCBBC, 0x4F78, 0xCBC3, 0x4F79, 0xCBC1, + 0x4F7A, 0xA8DE, 0x4F7B, 0xA8D9, 0x4F7C, 0xCBB3, 0x4F7D, 0xCBB5, 0x4F7E, 0xA8DB, 0x4F7F, 0xA8CF, 0x4F80, 0xCBB6, 0x4F81, 0xCBC2, + 0x4F82, 0xCBC9, 0x4F83, 0xA8D4, 0x4F84, 0xCBBB, 0x4F85, 0xCBB4, 0x4F86, 0xA8D3, 0x4F87, 0xCBB7, 0x4F88, 0xA8D7, 0x4F89, 0xCBBA, + 0x4F8B, 0xA8D2, 0x4F8D, 0xA8CD, 0x4F8F, 0xA8DC, 0x4F90, 0xCBC4, 0x4F91, 0xA8DD, 0x4F92, 0xCBC8, 0x4F94, 0xCBC6, 0x4F95, 0xCBCA, + 0x4F96, 0xA8DA, 0x4F97, 0xCBBE, 0x4F98, 0xCBB2, 0x4F9A, 0xCBC0, 0x4F9B, 0xA8D1, 0x4F9C, 0xCBC5, 0x4F9D, 0xA8CC, 0x4F9E, 0xCBC7, + 0x4FAE, 0xAB56, 0x4FAF, 0xAB4A, 0x4FB2, 0xCDE0, 0x4FB3, 0xCDE8, 0x4FB5, 0xAB49, 0x4FB6, 0xAB51, 0x4FB7, 0xAB5D, 0x4FB9, 0xCDEE, + 0x4FBA, 0xCDEC, 0x4FBB, 0xCDE7, 0x4FBF, 0xAB4B, 0x4FC0, 0xCDED, 0x4FC1, 0xCDE3, 0x4FC2, 0xAB59, 0x4FC3, 0xAB50, 0x4FC4, 0xAB58, + 0x4FC5, 0xCDDE, 0x4FC7, 0xCDEA, 0x4FC9, 0xCDE1, 0x4FCA, 0xAB54, 0x4FCB, 0xCDE2, 0x4FCD, 0xCDDD, 0x4FCE, 0xAB5B, 0x4FCF, 0xAB4E, + 0x4FD0, 0xAB57, 0x4FD1, 0xAB4D, 0x4FD3, 0xCDDF, 0x4FD4, 0xCDE4, 0x4FD6, 0xCDEB, 0x4FD7, 0xAB55, 0x4FD8, 0xAB52, 0x4FD9, 0xCDE6, + 0x4FDA, 0xAB5A, 0x4FDB, 0xCDE9, 0x4FDC, 0xCDE5, 0x4FDD, 0xAB4F, 0x4FDE, 0xAB5C, 0x4FDF, 0xAB53, 0x4FE0, 0xAB4C, 0x4FE1, 0xAB48, + 0x4FEC, 0xCDEF, 0x4FEE, 0xADD7, 0x4FEF, 0xADC1, 0x4FF1, 0xADD1, 0x4FF3, 0xADD6, 0x4FF4, 0xD0D0, 0x4FF5, 0xD0CF, 0x4FF6, 0xD0D4, + 0x4FF7, 0xD0D5, 0x4FF8, 0xADC4, 0x4FFA, 0xADCD, 0x4FFE, 0xADDA, 0x5000, 0xADCE, 0x5005, 0xD0C9, 0x5006, 0xADC7, 0x5007, 0xD0CA, + 0x5009, 0xADDC, 0x500B, 0xADD3, 0x500C, 0xADBE, 0x500D, 0xADBF, 0x500E, 0xD0DD, 0x500F, 0xB0BF, 0x5011, 0xADCC, 0x5012, 0xADCB, + 0x5013, 0xD0CB, 0x5014, 0xADCF, 0x5015, 0xD45B, 0x5016, 0xADC6, 0x5017, 0xD0D6, 0x5018, 0xADD5, 0x5019, 0xADD4, 0x501A, 0xADCA, + 0x501B, 0xD0CE, 0x501C, 0xD0D7, 0x501E, 0xD0C8, 0x501F, 0xADC9, 0x5020, 0xD0D8, 0x5021, 0xADD2, 0x5022, 0xD0CC, 0x5023, 0xADC0, + 0x5025, 0xADC3, 0x5026, 0xADC2, 0x5027, 0xD0D9, 0x5028, 0xADD0, 0x5029, 0xADC5, 0x502A, 0xADD9, 0x502B, 0xADDB, 0x502C, 0xD0D3, + 0x502D, 0xADD8, 0x502F, 0xD0DB, 0x5030, 0xD0CD, 0x5031, 0xD0DC, 0x5033, 0xD0D1, 0x5035, 0xD0DA, 0x5037, 0xD0D2, 0x503C, 0xADC8, + 0x5040, 0xD463, 0x5041, 0xD457, 0x5043, 0xB0B3, 0x5045, 0xD45C, 0x5046, 0xD462, 0x5047, 0xB0B2, 0x5048, 0xD455, 0x5049, 0xB0B6, + 0x504A, 0xD459, 0x504B, 0xD452, 0x504C, 0xB0B4, 0x504D, 0xD456, 0x504E, 0xB0B9, 0x504F, 0xB0BE, 0x5051, 0xD467, 0x5053, 0xD451, + 0x5055, 0xB0BA, 0x5057, 0xD466, 0x505A, 0xB0B5, 0x505B, 0xD458, 0x505C, 0xB0B1, 0x505D, 0xD453, 0x505E, 0xD44F, 0x505F, 0xD45D, + 0x5060, 0xD450, 0x5061, 0xD44E, 0x5062, 0xD45A, 0x5063, 0xD460, 0x5064, 0xD461, 0x5065, 0xB0B7, 0x5068, 0xD85B, 0x5069, 0xD45E, + 0x506A, 0xD44D, 0x506B, 0xD45F, 0x506D, 0xB0C1, 0x506E, 0xD464, 0x506F, 0xB0C0, 0x5070, 0xD44C, 0x5072, 0xD454, 0x5073, 0xD465, + 0x5074, 0xB0BC, 0x5075, 0xB0BB, 0x5076, 0xB0B8, 0x5077, 0xB0BD, 0x507A, 0xB0AF, 0x507D, 0xB0B0, 0x5080, 0xB3C8, 0x5082, 0xD85E, + 0x5083, 0xD857, 0x5085, 0xB3C5, 0x5087, 0xD85F, 0x508B, 0xD855, 0x508C, 0xD858, 0x508D, 0xB3C4, 0x508E, 0xD859, 0x5091, 0xB3C7, + 0x5092, 0xD85D, 0x5094, 0xD853, 0x5095, 0xD852, 0x5096, 0xB3C9, 0x5098, 0xB3CA, 0x5099, 0xB3C6, 0x509A, 0xB3CB, 0x509B, 0xD851, + 0x509C, 0xD85C, 0x509D, 0xD85A, 0x509E, 0xD854, 0x50A2, 0xB3C3, 0x50A3, 0xD856, 0x50AC, 0xB6CA, 0x50AD, 0xB6C4, 0x50AE, 0xDCB7, + 0x50AF, 0xB6CD, 0x50B0, 0xDCBD, 0x50B1, 0xDCC0, 0x50B2, 0xB6C6, 0x50B3, 0xB6C7, 0x50B4, 0xDCBA, 0x50B5, 0xB6C5, 0x50B6, 0xDCC3, + 0x50B7, 0xB6CB, 0x50B8, 0xDCC4, 0x50BA, 0xDCBF, 0x50BB, 0xB6CC, 0x50BD, 0xDCB4, 0x50BE, 0xB6C9, 0x50BF, 0xDCB5, 0x50C1, 0xDCBE, + 0x50C2, 0xDCBC, 0x50C4, 0xDCB8, 0x50C5, 0xB6C8, 0x50C6, 0xDCB6, 0x50C7, 0xB6CE, 0x50C8, 0xDCBB, 0x50C9, 0xDCC2, 0x50CA, 0xDCB9, + 0x50CB, 0xDCC1, 0x50CE, 0xB9B6, 0x50CF, 0xB9B3, 0x50D1, 0xB9B4, 0x50D3, 0xE0F9, 0x50D4, 0xE0F1, 0x50D5, 0xB9B2, 0x50D6, 0xB9AF, + 0x50D7, 0xE0F2, 0x50DA, 0xB9B1, 0x50DB, 0xE0F5, 0x50DD, 0xE0F7, 0x50E0, 0xE0FE, 0x50E3, 0xE0FD, 0x50E4, 0xE0F8, 0x50E5, 0xB9AE, + 0x50E6, 0xE0F0, 0x50E7, 0xB9AC, 0x50E8, 0xE0F3, 0x50E9, 0xB9B7, 0x50EA, 0xE0F6, 0x50EC, 0xE0FA, 0x50ED, 0xB9B0, 0x50EE, 0xB9AD, + 0x50EF, 0xE0FC, 0x50F0, 0xE0FB, 0x50F1, 0xB9B5, 0x50F3, 0xE0F4, 0x50F5, 0xBBF8, 0x50F6, 0xE4EC, 0x50F8, 0xE4E9, 0x50F9, 0xBBF9, + 0x50FB, 0xBBF7, 0x50FD, 0xE4F0, 0x50FE, 0xE4ED, 0x50FF, 0xE4E6, 0x5100, 0xBBF6, 0x5102, 0xBBFA, 0x5103, 0xE4E7, 0x5104, 0xBBF5, + 0x5105, 0xBBFD, 0x5106, 0xE4EA, 0x5107, 0xE4EB, 0x5108, 0xBBFB, 0x5109, 0xBBFC, 0x510A, 0xE4F1, 0x510B, 0xE4EE, 0x510C, 0xE4EF, + 0x5110, 0xBEAA, 0x5111, 0xE8F8, 0x5112, 0xBEA7, 0x5113, 0xE8F5, 0x5114, 0xBEA9, 0x5115, 0xBEAB, 0x5117, 0xE8F6, 0x5118, 0xBEA8, + 0x511A, 0xE8F7, 0x511C, 0xE8F4, 0x511F, 0xC076, 0x5120, 0xECBD, 0x5121, 0xC077, 0x5122, 0xECBB, 0x5124, 0xECBC, 0x5125, 0xECBA, + 0x5126, 0xECB9, 0x5129, 0xECBE, 0x512A, 0xC075, 0x512D, 0xEFB8, 0x512E, 0xEFB9, 0x5130, 0xE4E8, 0x5131, 0xEFB7, 0x5132, 0xC078, + 0x5133, 0xC35F, 0x5134, 0xF1EB, 0x5135, 0xF1EC, 0x5137, 0xC4D7, 0x5138, 0xC4D8, 0x5139, 0xF5C1, 0x513A, 0xF5C0, 0x513B, 0xC56C, + 0x513C, 0xC56B, 0x513D, 0xF7D0, 0x513F, 0xA449, 0x5140, 0xA461, 0x5141, 0xA4B9, 0x5143, 0xA4B8, 0x5144, 0xA553, 0x5145, 0xA552, + 0x5146, 0xA5FC, 0x5147, 0xA5FB, 0x5148, 0xA5FD, 0x5149, 0xA5FA, 0x514B, 0xA74A, 0x514C, 0xA749, 0x514D, 0xA74B, 0x5152, 0xA8E0, + 0x5154, 0xA8DF, 0x5155, 0xA8E1, 0x5157, 0xAB5E, 0x5159, 0xA259, 0x515A, 0xD0DE, 0x515B, 0xA25A, 0x515C, 0xB0C2, 0x515D, 0xA25C, + 0x515E, 0xA25B, 0x515F, 0xD860, 0x5161, 0xA25D, 0x5162, 0xB9B8, 0x5163, 0xA25E, 0x5165, 0xA44A, 0x5167, 0xA4BA, 0x5168, 0xA5FE, + 0x5169, 0xA8E2, 0x516B, 0xA44B, 0x516C, 0xA4BD, 0x516D, 0xA4BB, 0x516E, 0xA4BC, 0x5171, 0xA640, 0x5175, 0xA74C, 0x5176, 0xA8E4, + 0x5177, 0xA8E3, 0x5178, 0xA8E5, 0x517C, 0xADDD, 0x5180, 0xBEAC, 0x5187, 0xC94E, 0x5189, 0xA554, 0x518A, 0xA555, 0x518D, 0xA641, + 0x518F, 0xCA6A, 0x5191, 0xAB60, 0x5192, 0xAB5F, 0x5193, 0xD0E0, 0x5194, 0xD0DF, 0x5195, 0xB0C3, 0x5197, 0xA4BE, 0x5198, 0xC955, + 0x519E, 0xCBCD, 0x51A0, 0xAB61, 0x51A2, 0xADE0, 0x51A4, 0xADDE, 0x51A5, 0xADDF, 0x51AA, 0xBEAD, 0x51AC, 0xA556, 0x51B0, 0xA642, + 0x51B1, 0xC9BC, 0x51B6, 0xA74D, 0x51B7, 0xA74E, 0x51B9, 0xCA6B, 0x51BC, 0xCBCE, 0x51BD, 0xA8E6, 0x51BE, 0xCBCF, 0x51C4, 0xD0E2, + 0x51C5, 0xD0E3, 0x51C6, 0xADE3, 0x51C8, 0xD0E4, 0x51CA, 0xD0E1, 0x51CB, 0xADE4, 0x51CC, 0xADE2, 0x51CD, 0xADE1, 0x51CE, 0xD0E5, + 0x51D0, 0xD468, 0x51D4, 0xD861, 0x51D7, 0xDCC5, 0x51D8, 0xE140, 0x51DC, 0xBBFE, 0x51DD, 0xBEAE, 0x51DE, 0xE8F9, 0x51E0, 0xA44C, + 0x51E1, 0xA45A, 0x51F0, 0xB0C4, 0x51F1, 0xB3CD, 0x51F3, 0xB9B9, 0x51F5, 0xC942, 0x51F6, 0xA4BF, 0x51F8, 0xA559, 0x51F9, 0xA557, + 0x51FA, 0xA558, 0x51FD, 0xA8E7, 0x5200, 0xA44D, 0x5201, 0xA44E, 0x5203, 0xA462, 0x5206, 0xA4C0, 0x5207, 0xA4C1, 0x5208, 0xA4C2, + 0x5209, 0xC9BE, 0x520A, 0xA55A, 0x520C, 0xC96B, 0x520E, 0xA646, 0x5210, 0xC9BF, 0x5211, 0xA644, 0x5212, 0xA645, 0x5213, 0xC9BD, + 0x5216, 0xA647, 0x5217, 0xA643, 0x521C, 0xCA6C, 0x521D, 0xAAEC, 0x521E, 0xCA6D, 0x5221, 0xCA6E, 0x5224, 0xA750, 0x5225, 0xA74F, + 0x5228, 0xA753, 0x5229, 0xA751, 0x522A, 0xA752, 0x522E, 0xA8ED, 0x5230, 0xA8EC, 0x5231, 0xCBD4, 0x5232, 0xCBD1, 0x5233, 0xCBD2, + 0x5235, 0xCBD0, 0x5236, 0xA8EE, 0x5237, 0xA8EA, 0x5238, 0xA8E9, 0x523A, 0xA8EB, 0x523B, 0xA8E8, 0x5241, 0xA8EF, 0x5243, 0xAB63, + 0x5244, 0xCDF0, 0x5246, 0xCBD3, 0x5247, 0xAB68, 0x5249, 0xCDF1, 0x524A, 0xAB64, 0x524B, 0xAB67, 0x524C, 0xAB66, 0x524D, 0xAB65, + 0x524E, 0xAB62, 0x5252, 0xD0E8, 0x5254, 0xADE7, 0x5255, 0xD0EB, 0x5256, 0xADE5, 0x525A, 0xD0E7, 0x525B, 0xADE8, 0x525C, 0xADE6, + 0x525D, 0xADE9, 0x525E, 0xD0E9, 0x525F, 0xD0EA, 0x5261, 0xD0E6, 0x5262, 0xD0EC, 0x5269, 0xB3D1, 0x526A, 0xB0C5, 0x526B, 0xD469, + 0x526C, 0xD46B, 0x526D, 0xD46A, 0x526E, 0xD46C, 0x526F, 0xB0C6, 0x5272, 0xB3CE, 0x5274, 0xB3CF, 0x5275, 0xB3D0, 0x5277, 0xB6D0, + 0x5278, 0xDCC7, 0x527A, 0xDCC6, 0x527B, 0xDCC8, 0x527C, 0xDCC9, 0x527D, 0xB6D1, 0x527F, 0xB6CF, 0x5280, 0xE141, 0x5281, 0xE142, + 0x5282, 0xB9BB, 0x5283, 0xB9BA, 0x5284, 0xE35A, 0x5287, 0xBC40, 0x5288, 0xBC41, 0x5289, 0xBC42, 0x528A, 0xBC44, 0x528B, 0xE4F2, + 0x528C, 0xE4F3, 0x528D, 0xBC43, 0x5291, 0xBEAF, 0x5293, 0xBEB0, 0x5296, 0xF1ED, 0x5297, 0xF5C3, 0x5298, 0xF5C2, 0x5299, 0xF7D1, + 0x529B, 0xA44F, 0x529F, 0xA55C, 0x52A0, 0xA55B, 0x52A3, 0xA648, 0x52A6, 0xC9C0, 0x52A9, 0xA755, 0x52AA, 0xA756, 0x52AB, 0xA754, + 0x52AC, 0xA757, 0x52AD, 0xCA6F, 0x52AE, 0xCA70, 0x52BB, 0xA8F1, 0x52BC, 0xCBD5, 0x52BE, 0xA8F0, 0x52C0, 0xCDF2, 0x52C1, 0xAB6C, + 0x52C2, 0xCDF3, 0x52C3, 0xAB6B, 0x52C7, 0xAB69, 0x52C9, 0xAB6A, 0x52CD, 0xD0ED, 0x52D2, 0xB0C7, 0x52D3, 0xD46E, 0x52D5, 0xB0CA, + 0x52D6, 0xD46D, 0x52D7, 0xB1E5, 0x52D8, 0xB0C9, 0x52D9, 0xB0C8, 0x52DB, 0xB3D4, 0x52DD, 0xB3D3, 0x52DE, 0xB3D2, 0x52DF, 0xB6D2, + 0x52E2, 0xB6D5, 0x52E3, 0xB6D6, 0x52E4, 0xB6D4, 0x52E6, 0xB6D3, 0x52E9, 0xE143, 0x52EB, 0xE144, 0x52EF, 0xE4F5, 0x52F0, 0xBC45, + 0x52F1, 0xE4F4, 0x52F3, 0xBEB1, 0x52F4, 0xECBF, 0x52F5, 0xC079, 0x52F7, 0xF1EE, 0x52F8, 0xC455, 0x52FA, 0xA463, 0x52FB, 0xA4C3, + 0x52FC, 0xC956, 0x52FE, 0xA4C4, 0x52FF, 0xA4C5, 0x5305, 0xA55D, 0x5306, 0xA55E, 0x5308, 0xA649, 0x5309, 0xCA71, 0x530A, 0xCBD6, + 0x530B, 0xCBD7, 0x530D, 0xAB6D, 0x530E, 0xD0EE, 0x530F, 0xB0CC, 0x5310, 0xB0CB, 0x5311, 0xD863, 0x5312, 0xD862, 0x5315, 0xA450, + 0x5316, 0xA4C6, 0x5317, 0xA55F, 0x5319, 0xB0CD, 0x531A, 0xC943, 0x531C, 0xC96C, 0x531D, 0xA560, 0x531F, 0xC9C2, 0x5320, 0xA64B, + 0x5321, 0xA64A, 0x5322, 0xC9C1, 0x5323, 0xA758, 0x532A, 0xADEA, 0x532D, 0xD46F, 0x532F, 0xB6D7, 0x5330, 0xE145, 0x5331, 0xB9BC, + 0x5334, 0xE8FA, 0x5337, 0xF3FD, 0x5339, 0xA4C7, 0x533C, 0xCBD8, 0x533D, 0xCDF4, 0x533E, 0xB0D0, 0x533F, 0xB0CE, 0x5340, 0xB0CF, + 0x5341, 0xA2CC, 0x5341, 0xA451, 0x5343, 0xA464, 0x5344, 0xA2CD, 0x5345, 0xA2CE, 0x5345, 0xA4CA, 0x5347, 0xA4C9, 0x5348, 0xA4C8, + 0x5349, 0xA563, 0x534A, 0xA562, 0x534C, 0xC96D, 0x534D, 0xC9C3, 0x5351, 0xA8F5, 0x5352, 0xA8F2, 0x5353, 0xA8F4, 0x5354, 0xA8F3, + 0x5357, 0xAB6E, 0x535A, 0xB3D5, 0x535C, 0xA452, 0x535E, 0xA4CB, 0x5360, 0xA565, 0x5361, 0xA564, 0x5363, 0xCA72, 0x5366, 0xA8F6, + 0x536C, 0xC957, 0x536E, 0xA567, 0x536F, 0xA566, 0x5370, 0xA64C, 0x5371, 0xA64D, 0x5372, 0xCA73, 0x5373, 0xA759, 0x5375, 0xA75A, + 0x5377, 0xA8F7, 0x5378, 0xA8F8, 0x5379, 0xA8F9, 0x537B, 0xAB6F, 0x537C, 0xCDF5, 0x537F, 0xADEB, 0x5382, 0xC944, 0x5384, 0xA4CC, + 0x538A, 0xC9C4, 0x538E, 0xCA74, 0x538F, 0xCA75, 0x5392, 0xCBD9, 0x5394, 0xCBDA, 0x5396, 0xCDF7, 0x5397, 0xCDF6, 0x5398, 0xCDF9, + 0x5399, 0xCDF8, 0x539A, 0xAB70, 0x539C, 0xD470, 0x539D, 0xADED, 0x539E, 0xD0EF, 0x539F, 0xADEC, 0x53A4, 0xD864, 0x53A5, 0xB3D6, + 0x53A7, 0xD865, 0x53AC, 0xE146, 0x53AD, 0xB9BD, 0x53B2, 0xBC46, 0x53B4, 0xF1EF, 0x53B9, 0xC958, 0x53BB, 0xA568, 0x53C3, 0xB0D1, + 0x53C8, 0xA453, 0x53C9, 0xA465, 0x53CA, 0xA4CE, 0x53CB, 0xA4CD, 0x53CD, 0xA4CF, 0x53D4, 0xA8FB, 0x53D6, 0xA8FA, 0x53D7, 0xA8FC, + 0x53DB, 0xAB71, 0x53DF, 0xADEE, 0x53E1, 0xE8FB, 0x53E2, 0xC24F, 0x53E3, 0xA466, 0x53E4, 0xA56A, 0x53E5, 0xA579, 0x53E6, 0xA574, + 0x53E8, 0xA56F, 0x53E9, 0xA56E, 0x53EA, 0xA575, 0x53EB, 0xA573, 0x53EC, 0xA56C, 0x53ED, 0xA57A, 0x53EE, 0xA56D, 0x53EF, 0xA569, + 0x53F0, 0xA578, 0x53F1, 0xA577, 0x53F2, 0xA576, 0x53F3, 0xA56B, 0x53F5, 0xA572, 0x53F8, 0xA571, 0x53FB, 0xA57B, 0x53FC, 0xA570, + 0x5401, 0xA653, 0x5403, 0xA659, 0x5404, 0xA655, 0x5406, 0xA65B, 0x5407, 0xC9C5, 0x5408, 0xA658, 0x5409, 0xA64E, 0x540A, 0xA651, + 0x540B, 0xA654, 0x540C, 0xA650, 0x540D, 0xA657, 0x540E, 0xA65A, 0x540F, 0xA64F, 0x5410, 0xA652, 0x5411, 0xA656, 0x5412, 0xA65C, + 0x5418, 0xCA7E, 0x5419, 0xCA7B, 0x541B, 0xA767, 0x541C, 0xCA7C, 0x541D, 0xA75B, 0x541E, 0xA75D, 0x541F, 0xA775, 0x5420, 0xA770, + 0x5424, 0xCAA5, 0x5425, 0xCA7D, 0x5426, 0xA75F, 0x5427, 0xA761, 0x5428, 0xCAA4, 0x5429, 0xA768, 0x542A, 0xCA78, 0x542B, 0xA774, + 0x542C, 0xA776, 0x542D, 0xA75C, 0x542E, 0xA76D, 0x5430, 0xCA76, 0x5431, 0xA773, 0x5433, 0xA764, 0x5435, 0xA76E, 0x5436, 0xA76F, + 0x5437, 0xCA77, 0x5438, 0xA76C, 0x5439, 0xA76A, 0x543B, 0xA76B, 0x543C, 0xA771, 0x543D, 0xCAA1, 0x543E, 0xA75E, 0x5440, 0xA772, + 0x5441, 0xCAA3, 0x5442, 0xA766, 0x5443, 0xA763, 0x5445, 0xCA7A, 0x5446, 0xA762, 0x5447, 0xCAA6, 0x5448, 0xA765, 0x544A, 0xA769, + 0x544E, 0xA760, 0x544F, 0xCAA2, 0x5454, 0xCA79, 0x5460, 0xCBEB, 0x5461, 0xCBEA, 0x5462, 0xA94F, 0x5463, 0xCBED, 0x5464, 0xCBEF, + 0x5465, 0xCBE4, 0x5466, 0xCBE7, 0x5467, 0xCBEE, 0x5468, 0xA950, 0x546B, 0xCBE1, 0x546C, 0xCBE5, 0x546F, 0xCBE9, 0x5470, 0xCE49, + 0x5471, 0xA94B, 0x5472, 0xCE4D, 0x5473, 0xA8FD, 0x5474, 0xCBE6, 0x5475, 0xA8FE, 0x5476, 0xA94C, 0x5477, 0xA945, 0x5478, 0xA941, + 0x547A, 0xCBE2, 0x547B, 0xA944, 0x547C, 0xA949, 0x547D, 0xA952, 0x547E, 0xCBE3, 0x547F, 0xCBDC, 0x5480, 0xA943, 0x5481, 0xCBDD, + 0x5482, 0xCBDF, 0x5484, 0xA946, 0x5486, 0xA948, 0x5487, 0xCBDB, 0x5488, 0xCBE0, 0x548B, 0xA951, 0x548C, 0xA94D, 0x548D, 0xCBE8, + 0x548E, 0xA953, 0x5490, 0xA94A, 0x5491, 0xCBDE, 0x5492, 0xA947, 0x5495, 0xA942, 0x5496, 0xA940, 0x5498, 0xCBEC, 0x549A, 0xA94E, + 0x54A0, 0xCE48, 0x54A1, 0xCDFB, 0x54A2, 0xCE4B, 0x54A5, 0xCDFD, 0x54A6, 0xAB78, 0x54A7, 0xABA8, 0x54A8, 0xAB74, 0x54A9, 0xABA7, + 0x54AA, 0xAB7D, 0x54AB, 0xABA4, 0x54AC, 0xAB72, 0x54AD, 0xCDFC, 0x54AE, 0xCE43, 0x54AF, 0xABA3, 0x54B0, 0xCE4F, 0x54B1, 0xABA5, + 0x54B3, 0xAB79, 0x54B6, 0xCE45, 0x54B7, 0xCE42, 0x54B8, 0xAB77, 0x54BA, 0xCDFA, 0x54BB, 0xABA6, 0x54BC, 0xCE4A, 0x54BD, 0xAB7C, + 0x54BE, 0xCE4C, 0x54BF, 0xABA9, 0x54C0, 0xAB73, 0x54C1, 0xAB7E, 0x54C2, 0xAB7B, 0x54C3, 0xCE40, 0x54C4, 0xABA1, 0x54C5, 0xCE46, + 0x54C6, 0xCE47, 0x54C7, 0xAB7A, 0x54C8, 0xABA2, 0x54C9, 0xAB76, 0x54CE, 0xAB75, 0x54CF, 0xCDFE, 0x54D6, 0xCE44, 0x54DE, 0xCE4E, + 0x54E0, 0xD144, 0x54E1, 0xADFB, 0x54E2, 0xD0F1, 0x54E4, 0xD0F6, 0x54E5, 0xADF4, 0x54E6, 0xAE40, 0x54E7, 0xD0F4, 0x54E8, 0xADEF, + 0x54E9, 0xADF9, 0x54EA, 0xADFE, 0x54EB, 0xD0FB, 0x54ED, 0xADFA, 0x54EE, 0xADFD, 0x54F1, 0xD0FE, 0x54F2, 0xADF5, 0x54F3, 0xD0F5, + 0x54F7, 0xD142, 0x54F8, 0xD143, 0x54FA, 0xADF7, 0x54FB, 0xD141, 0x54FC, 0xADF3, 0x54FD, 0xAE43, 0x54FF, 0xD0F8, 0x5501, 0xADF1, + 0x5503, 0xD146, 0x5504, 0xD0F9, 0x5505, 0xD0FD, 0x5506, 0xADF6, 0x5507, 0xAE42, 0x5508, 0xD0FA, 0x5509, 0xADFC, 0x550A, 0xD140, + 0x550B, 0xD147, 0x550C, 0xD4A1, 0x550E, 0xD145, 0x550F, 0xAE44, 0x5510, 0xADF0, 0x5511, 0xD0FC, 0x5512, 0xD0F3, 0x5514, 0xADF8, + 0x5517, 0xD0F2, 0x551A, 0xD0F7, 0x5526, 0xD0F0, 0x5527, 0xAE41, 0x552A, 0xD477, 0x552C, 0xB0E4, 0x552D, 0xD4A7, 0x552E, 0xB0E2, + 0x552F, 0xB0DF, 0x5530, 0xD47C, 0x5531, 0xB0DB, 0x5532, 0xD4A2, 0x5533, 0xB0E6, 0x5534, 0xD476, 0x5535, 0xD47B, 0x5536, 0xD47A, + 0x5537, 0xADF2, 0x5538, 0xB0E1, 0x5539, 0xD4A5, 0x553B, 0xD4A8, 0x553C, 0xD473, 0x553E, 0xB3E8, 0x5540, 0xD4A9, 0x5541, 0xB0E7, + 0x5543, 0xB0D9, 0x5544, 0xB0D6, 0x5545, 0xD47E, 0x5546, 0xB0D3, 0x5548, 0xD4A6, 0x554A, 0xB0DA, 0x554B, 0xD4AA, 0x554D, 0xD474, + 0x554E, 0xD4A4, 0x554F, 0xB0DD, 0x5550, 0xD475, 0x5551, 0xD478, 0x5552, 0xD47D, 0x5555, 0xB0DE, 0x5556, 0xB0DC, 0x5557, 0xB0E8, + 0x555C, 0xB0E3, 0x555E, 0xB0D7, 0x555F, 0xB1D2, 0x5561, 0xB0D8, 0x5562, 0xD479, 0x5563, 0xB0E5, 0x5564, 0xB0E0, 0x5565, 0xD4A3, + 0x5566, 0xB0D5, 0x556A, 0xB0D4, 0x5575, 0xD471, 0x5576, 0xD472, 0x5577, 0xD86A, 0x557B, 0xB3D7, 0x557C, 0xB3DA, 0x557D, 0xD875, + 0x557E, 0xB3EE, 0x557F, 0xD878, 0x5580, 0xB3D8, 0x5581, 0xD871, 0x5582, 0xB3DE, 0x5583, 0xB3E4, 0x5584, 0xB5BD, 0x5587, 0xB3E2, + 0x5588, 0xD86E, 0x5589, 0xB3EF, 0x558A, 0xB3DB, 0x558B, 0xB3E3, 0x558C, 0xD876, 0x558D, 0xDCD7, 0x558E, 0xD87B, 0x558F, 0xD86F, + 0x5591, 0xD866, 0x5592, 0xD873, 0x5593, 0xD86D, 0x5594, 0xB3E1, 0x5595, 0xD879, 0x5598, 0xB3DD, 0x5599, 0xB3F1, 0x559A, 0xB3EA, + 0x559C, 0xB3DF, 0x559D, 0xB3DC, 0x559F, 0xB3E7, 0x55A1, 0xD87A, 0x55A2, 0xD86C, 0x55A3, 0xD872, 0x55A4, 0xD874, 0x55A5, 0xD868, + 0x55A6, 0xD877, 0x55A7, 0xB3D9, 0x55A8, 0xD867, 0x55AA, 0xB3E0, 0x55AB, 0xB3F0, 0x55AC, 0xB3EC, 0x55AD, 0xD869, 0x55AE, 0xB3E6, + 0x55B1, 0xB3ED, 0x55B2, 0xB3E9, 0x55B3, 0xB3E5, 0x55B5, 0xD870, 0x55BB, 0xB3EB, 0x55BF, 0xDCD5, 0x55C0, 0xDCD1, 0x55C2, 0xDCE0, + 0x55C3, 0xDCCA, 0x55C4, 0xDCD3, 0x55C5, 0xB6E5, 0x55C6, 0xB6E6, 0x55C7, 0xB6DE, 0x55C8, 0xDCDC, 0x55C9, 0xB6E8, 0x55CA, 0xDCCF, + 0x55CB, 0xDCCE, 0x55CC, 0xDCCC, 0x55CD, 0xDCDE, 0x55CE, 0xB6DC, 0x55CF, 0xDCD8, 0x55D0, 0xDCCD, 0x55D1, 0xB6DF, 0x55D2, 0xDCD6, + 0x55D3, 0xB6DA, 0x55D4, 0xDCD2, 0x55D5, 0xDCD9, 0x55D6, 0xDCDB, 0x55D9, 0xDCDF, 0x55DA, 0xB6E3, 0x55DB, 0xDCCB, 0x55DC, 0xB6DD, + 0x55DD, 0xDCD0, 0x55DF, 0xB6D8, 0x55E1, 0xB6E4, 0x55E2, 0xDCDA, 0x55E3, 0xB6E0, 0x55E4, 0xB6E1, 0x55E5, 0xB6E7, 0x55E6, 0xB6DB, + 0x55E7, 0xA25F, 0x55E8, 0xB6D9, 0x55E9, 0xDCD4, 0x55EF, 0xB6E2, 0x55F2, 0xDCDD, 0x55F6, 0xB9CD, 0x55F7, 0xB9C8, 0x55F9, 0xE155, + 0x55FA, 0xE151, 0x55FC, 0xE14B, 0x55FD, 0xB9C2, 0x55FE, 0xB9BE, 0x55FF, 0xE154, 0x5600, 0xB9BF, 0x5601, 0xE14E, 0x5602, 0xE150, + 0x5604, 0xE153, 0x5606, 0xB9C4, 0x5608, 0xB9CB, 0x5609, 0xB9C5, 0x560C, 0xE149, 0x560D, 0xB9C6, 0x560E, 0xB9C7, 0x560F, 0xE14C, + 0x5610, 0xB9CC, 0x5612, 0xE14A, 0x5613, 0xE14F, 0x5614, 0xB9C3, 0x5615, 0xE148, 0x5616, 0xB9C9, 0x5617, 0xB9C1, 0x561B, 0xB9C0, + 0x561C, 0xE14D, 0x561D, 0xE152, 0x561F, 0xB9CA, 0x5627, 0xE147, 0x5629, 0xBC4D, 0x562A, 0xE547, 0x562C, 0xE544, 0x562E, 0xBC47, + 0x562F, 0xBC53, 0x5630, 0xBC54, 0x5632, 0xBC4A, 0x5633, 0xE542, 0x5634, 0xBC4C, 0x5635, 0xE4F9, 0x5636, 0xBC52, 0x5638, 0xE546, + 0x5639, 0xBC49, 0x563A, 0xE548, 0x563B, 0xBC48, 0x563D, 0xE543, 0x563E, 0xE545, 0x563F, 0xBC4B, 0x5640, 0xE541, 0x5641, 0xE4FA, + 0x5642, 0xE4F7, 0x5645, 0xD86B, 0x5646, 0xE4FD, 0x5648, 0xE4F6, 0x5649, 0xE4FC, 0x564A, 0xE4FB, 0x564C, 0xE4F8, 0x564E, 0xBC4F, + 0x5653, 0xBC4E, 0x5657, 0xBC50, 0x5658, 0xE4FE, 0x5659, 0xBEB2, 0x565A, 0xE540, 0x565E, 0xE945, 0x5660, 0xE8FD, 0x5662, 0xBEBE, + 0x5663, 0xE942, 0x5664, 0xBEB6, 0x5665, 0xBEBA, 0x5666, 0xE941, 0x5668, 0xBEB9, 0x5669, 0xBEB5, 0x566A, 0xBEB8, 0x566B, 0xBEB3, + 0x566C, 0xBEBD, 0x566D, 0xE943, 0x566E, 0xE8FE, 0x566F, 0xBEBC, 0x5670, 0xE8FC, 0x5671, 0xBEBB, 0x5672, 0xE944, 0x5673, 0xE940, + 0x5674, 0xBC51, 0x5676, 0xBEBF, 0x5677, 0xE946, 0x5678, 0xBEB7, 0x5679, 0xBEB4, 0x567E, 0xECC6, 0x567F, 0xECC8, 0x5680, 0xC07B, + 0x5681, 0xECC9, 0x5682, 0xECC7, 0x5683, 0xECC5, 0x5684, 0xECC4, 0x5685, 0xC07D, 0x5686, 0xECC3, 0x5687, 0xC07E, 0x568C, 0xECC1, + 0x568D, 0xECC2, 0x568E, 0xC07A, 0x568F, 0xC0A1, 0x5690, 0xC07C, 0x5693, 0xECC0, 0x5695, 0xC250, 0x5697, 0xEFBC, 0x5698, 0xEFBA, + 0x5699, 0xEFBF, 0x569A, 0xEFBD, 0x569C, 0xEFBB, 0x569D, 0xEFBE, 0x56A5, 0xC360, 0x56A6, 0xF1F2, 0x56A7, 0xF1F3, 0x56A8, 0xC456, + 0x56AA, 0xF1F4, 0x56AB, 0xF1F0, 0x56AC, 0xF1F5, 0x56AD, 0xF1F1, 0x56AE, 0xC251, 0x56B2, 0xF3FE, 0x56B3, 0xF441, 0x56B4, 0xC459, + 0x56B5, 0xF440, 0x56B6, 0xC458, 0x56B7, 0xC457, 0x56BC, 0xC45A, 0x56BD, 0xF5C5, 0x56BE, 0xF5C6, 0x56C0, 0xC4DA, 0x56C1, 0xC4D9, + 0x56C2, 0xC4DB, 0x56C3, 0xF5C4, 0x56C5, 0xF6D8, 0x56C6, 0xF6D7, 0x56C8, 0xC56D, 0x56C9, 0xC56F, 0x56CA, 0xC56E, 0x56CB, 0xF6D9, + 0x56CC, 0xC5C8, 0x56CD, 0xF8A6, 0x56D1, 0xC5F1, 0x56D3, 0xF8A5, 0x56D4, 0xF8EE, 0x56D7, 0xC949, 0x56DA, 0xA57D, 0x56DB, 0xA57C, + 0x56DD, 0xA65F, 0x56DE, 0xA65E, 0x56DF, 0xC9C7, 0x56E0, 0xA65D, 0x56E1, 0xC9C6, 0x56E4, 0xA779, 0x56E5, 0xCAA9, 0x56E7, 0xCAA8, + 0x56EA, 0xA777, 0x56EB, 0xA77A, 0x56EE, 0xCAA7, 0x56F0, 0xA778, 0x56F7, 0xCBF0, 0x56F9, 0xCBF1, 0x56FA, 0xA954, 0x56FF, 0xABAA, + 0x5701, 0xD148, 0x5702, 0xD149, 0x5703, 0xAE45, 0x5704, 0xAE46, 0x5707, 0xD4AC, 0x5708, 0xB0E9, 0x5709, 0xB0EB, 0x570A, 0xD4AB, + 0x570B, 0xB0EA, 0x570C, 0xD87C, 0x570D, 0xB3F2, 0x5712, 0xB6E9, 0x5713, 0xB6EA, 0x5714, 0xDCE1, 0x5716, 0xB9CF, 0x5718, 0xB9CE, + 0x571A, 0xE549, 0x571B, 0xE948, 0x571C, 0xE947, 0x571E, 0xF96B, 0x571F, 0xA467, 0x5720, 0xC959, 0x5722, 0xC96E, 0x5723, 0xC96F, + 0x5728, 0xA662, 0x5729, 0xA666, 0x572A, 0xC9C9, 0x572C, 0xA664, 0x572D, 0xA663, 0x572E, 0xC9C8, 0x572F, 0xA665, 0x5730, 0xA661, + 0x5733, 0xA660, 0x5734, 0xC9CA, 0x573B, 0xA7A6, 0x573E, 0xA7A3, 0x5740, 0xA77D, 0x5741, 0xCAAA, 0x5745, 0xCAAB, 0x5747, 0xA7A1, + 0x5749, 0xCAAD, 0x574A, 0xA77B, 0x574B, 0xCAAE, 0x574C, 0xCAAC, 0x574D, 0xA77E, 0x574E, 0xA7A2, 0x574F, 0xA7A5, 0x5750, 0xA7A4, + 0x5751, 0xA77C, 0x5752, 0xCAAF, 0x5761, 0xA959, 0x5762, 0xCBFE, 0x5764, 0xA95B, 0x5766, 0xA95A, 0x5768, 0xCC40, 0x5769, 0xA958, + 0x576A, 0xA957, 0x576B, 0xCBF5, 0x576D, 0xCBF4, 0x576F, 0xCBF2, 0x5770, 0xCBF7, 0x5771, 0xCBF6, 0x5772, 0xCBF3, 0x5773, 0xCBFC, + 0x5774, 0xCBFD, 0x5775, 0xCBFA, 0x5776, 0xCBF8, 0x5777, 0xA956, 0x577B, 0xCBFB, 0x577C, 0xA95C, 0x577D, 0xCC41, 0x5780, 0xCBF9, + 0x5782, 0xABAB, 0x5783, 0xA955, 0x578B, 0xABAC, 0x578C, 0xCE54, 0x578F, 0xCE5A, 0x5793, 0xABB2, 0x5794, 0xCE58, 0x5795, 0xCE5E, + 0x5797, 0xCE55, 0x5798, 0xCE59, 0x5799, 0xCE5B, 0x579A, 0xCE5D, 0x579B, 0xCE57, 0x579D, 0xCE56, 0x579E, 0xCE51, 0x579F, 0xCE52, + 0x57A0, 0xABAD, 0x57A2, 0xABAF, 0x57A3, 0xABAE, 0x57A4, 0xCE53, 0x57A5, 0xCE5C, 0x57AE, 0xABB1, 0x57B5, 0xCE50, 0x57B6, 0xD153, + 0x57B8, 0xD152, 0x57B9, 0xD157, 0x57BA, 0xD14E, 0x57BC, 0xD151, 0x57BD, 0xD150, 0x57BF, 0xD154, 0x57C1, 0xD158, 0x57C2, 0xAE47, + 0x57C3, 0xAE4A, 0x57C6, 0xD14F, 0x57C7, 0xD155, 0x57CB, 0xAE49, 0x57CC, 0xD14A, 0x57CE, 0xABB0, 0x57CF, 0xD4BA, 0x57D0, 0xD156, + 0x57D2, 0xD14D, 0x57D4, 0xAE48, 0x57D5, 0xD14C, 0x57DC, 0xD4B1, 0x57DF, 0xB0EC, 0x57E0, 0xB0F0, 0x57E1, 0xD4C1, 0x57E2, 0xD4AF, + 0x57E3, 0xD4BD, 0x57E4, 0xB0F1, 0x57E5, 0xD4BF, 0x57E7, 0xD4C5, 0x57E9, 0xD4C9, 0x57EC, 0xD4C0, 0x57ED, 0xD4B4, 0x57EE, 0xD4BC, + 0x57F0, 0xD4CA, 0x57F1, 0xD4C8, 0x57F2, 0xD4BE, 0x57F3, 0xD4B9, 0x57F4, 0xD4B2, 0x57F5, 0xD8A6, 0x57F6, 0xD4B0, 0x57F7, 0xB0F5, + 0x57F8, 0xD4B7, 0x57F9, 0xB0F6, 0x57FA, 0xB0F2, 0x57FB, 0xD4AD, 0x57FC, 0xD4C3, 0x57FD, 0xD4B5, 0x5800, 0xD4B3, 0x5801, 0xD4C6, + 0x5802, 0xB0F3, 0x5804, 0xD4CC, 0x5805, 0xB0ED, 0x5806, 0xB0EF, 0x5807, 0xD4BB, 0x5808, 0xD4B6, 0x5809, 0xAE4B, 0x580A, 0xB0EE, + 0x580B, 0xD4B8, 0x580C, 0xD4C7, 0x580D, 0xD4CB, 0x580E, 0xD4C2, 0x5810, 0xD4C4, 0x5814, 0xD4AE, 0x5819, 0xD8A1, 0x581B, 0xD8AA, + 0x581C, 0xD8A9, 0x581D, 0xB3FA, 0x581E, 0xD8A2, 0x5820, 0xB3FB, 0x5821, 0xB3F9, 0x5823, 0xD8A4, 0x5824, 0xB3F6, 0x5825, 0xD8A8, + 0x5827, 0xD8A3, 0x5828, 0xD8A5, 0x5829, 0xD87D, 0x582A, 0xB3F4, 0x582C, 0xD8B2, 0x582D, 0xD8B1, 0x582E, 0xD8AE, 0x582F, 0xB3F3, + 0x5830, 0xB3F7, 0x5831, 0xB3F8, 0x5832, 0xD14B, 0x5833, 0xD8AB, 0x5834, 0xB3F5, 0x5835, 0xB0F4, 0x5836, 0xD8AD, 0x5837, 0xD87E, + 0x5838, 0xD8B0, 0x5839, 0xD8AF, 0x583B, 0xD8B3, 0x583D, 0xDCEF, 0x583F, 0xD8AC, 0x5848, 0xD8A7, 0x5849, 0xDCE7, 0x584A, 0xB6F4, + 0x584B, 0xB6F7, 0x584C, 0xB6F2, 0x584D, 0xDCE6, 0x584E, 0xDCEA, 0x584F, 0xDCE5, 0x5851, 0xB6EC, 0x5852, 0xB6F6, 0x5853, 0xDCE2, + 0x5854, 0xB6F0, 0x5855, 0xDCE9, 0x5857, 0xB6EE, 0x5858, 0xB6ED, 0x5859, 0xDCEC, 0x585A, 0xB6EF, 0x585B, 0xDCEE, 0x585D, 0xDCEB, + 0x585E, 0xB6EB, 0x5862, 0xB6F5, 0x5863, 0xDCF0, 0x5864, 0xDCE4, 0x5865, 0xDCED, 0x5868, 0xDCE3, 0x586B, 0xB6F1, 0x586D, 0xB6F3, + 0x586F, 0xDCE8, 0x5871, 0xDCF1, 0x5874, 0xE15D, 0x5875, 0xB9D0, 0x5876, 0xE163, 0x5879, 0xB9D5, 0x587A, 0xE15F, 0x587B, 0xE166, + 0x587C, 0xE157, 0x587D, 0xB9D7, 0x587E, 0xB9D1, 0x587F, 0xE15C, 0x5880, 0xBC55, 0x5881, 0xE15B, 0x5882, 0xE164, 0x5883, 0xB9D2, + 0x5885, 0xB9D6, 0x5886, 0xE15A, 0x5887, 0xE160, 0x5888, 0xE165, 0x5889, 0xE156, 0x588A, 0xB9D4, 0x588B, 0xE15E, 0x588E, 0xE162, + 0x588F, 0xE168, 0x5890, 0xE158, 0x5891, 0xE161, 0x5893, 0xB9D3, 0x5894, 0xE167, 0x5898, 0xE159, 0x589C, 0xBC59, 0x589D, 0xE54B, + 0x589E, 0xBC57, 0x589F, 0xBC56, 0x58A0, 0xE54D, 0x58A1, 0xE552, 0x58A3, 0xE54E, 0x58A5, 0xE551, 0x58A6, 0xBC5C, 0x58A8, 0xBEA5, + 0x58A9, 0xBC5B, 0x58AB, 0xE54A, 0x58AC, 0xE550, 0x58AE, 0xBC5A, 0x58AF, 0xE54F, 0x58B1, 0xE54C, 0x58B3, 0xBC58, 0x58BA, 0xE94D, + 0x58BB, 0xF9D9, 0x58BC, 0xE94F, 0x58BD, 0xE94A, 0x58BE, 0xBEC1, 0x58BF, 0xE94C, 0x58C1, 0xBEC0, 0x58C2, 0xE94E, 0x58C5, 0xBEC3, + 0x58C6, 0xE950, 0x58C7, 0xBEC2, 0x58C8, 0xE949, 0x58C9, 0xE94B, 0x58CE, 0xC0A5, 0x58CF, 0xECCC, 0x58D1, 0xC0A4, 0x58D2, 0xECCD, + 0x58D3, 0xC0A3, 0x58D4, 0xECCB, 0x58D5, 0xC0A2, 0x58D6, 0xECCA, 0x58D8, 0xC253, 0x58D9, 0xC252, 0x58DA, 0xF1F6, 0x58DB, 0xF1F8, + 0x58DD, 0xF1F7, 0x58DE, 0xC361, 0x58DF, 0xC362, 0x58E2, 0xC363, 0x58E3, 0xF442, 0x58E4, 0xC45B, 0x58E7, 0xF7D3, 0x58E8, 0xF7D2, + 0x58E9, 0xC5F2, 0x58EB, 0xA468, 0x58EC, 0xA4D0, 0x58EF, 0xA7A7, 0x58F4, 0xCE5F, 0x58F9, 0xB3FC, 0x58FA, 0xB3FD, 0x58FC, 0xDCF2, + 0x58FD, 0xB9D8, 0x58FE, 0xE169, 0x58FF, 0xE553, 0x5903, 0xC95A, 0x5906, 0xCAB0, 0x590C, 0xCC42, 0x590D, 0xCE60, 0x590E, 0xD159, + 0x590F, 0xAE4C, 0x5912, 0xF1F9, 0x5914, 0xC4DC, 0x5915, 0xA469, 0x5916, 0xA57E, 0x5917, 0xC970, 0x5919, 0xA667, 0x591A, 0xA668, + 0x591C, 0xA95D, 0x5920, 0xB0F7, 0x5922, 0xB9DA, 0x5924, 0xB9DB, 0x5925, 0xB9D9, 0x5927, 0xA46A, 0x5929, 0xA4D1, 0x592A, 0xA4D3, + 0x592B, 0xA4D2, 0x592C, 0xC95B, 0x592D, 0xA4D4, 0x592E, 0xA5A1, 0x592F, 0xC971, 0x5931, 0xA5A2, 0x5937, 0xA669, 0x5938, 0xA66A, + 0x593C, 0xC9CB, 0x593E, 0xA7A8, 0x5940, 0xCAB1, 0x5944, 0xA961, 0x5945, 0xCC43, 0x5947, 0xA95F, 0x5948, 0xA960, 0x5949, 0xA95E, + 0x594A, 0xD15A, 0x594E, 0xABB6, 0x594F, 0xABB5, 0x5950, 0xABB7, 0x5951, 0xABB4, 0x5953, 0xCE61, 0x5954, 0xA962, 0x5955, 0xABB3, + 0x5957, 0xAE4D, 0x5958, 0xAE4E, 0x595A, 0xAE4F, 0x595C, 0xD4CD, 0x5960, 0xB3FE, 0x5961, 0xD8B4, 0x5962, 0xB0F8, 0x5967, 0xB6F8, + 0x5969, 0xB9DD, 0x596A, 0xB9DC, 0x596B, 0xE16A, 0x596D, 0xBC5D, 0x596E, 0xBEC4, 0x5970, 0xEFC0, 0x5971, 0xF6DA, 0x5972, 0xF7D4, + 0x5973, 0xA46B, 0x5974, 0xA5A3, 0x5976, 0xA5A4, 0x5977, 0xC9D1, 0x5978, 0xA66C, 0x5979, 0xA66F, 0x597B, 0xC9CF, 0x597C, 0xC9CD, + 0x597D, 0xA66E, 0x597E, 0xC9D0, 0x597F, 0xC9D2, 0x5980, 0xC9CC, 0x5981, 0xA671, 0x5982, 0xA670, 0x5983, 0xA66D, 0x5984, 0xA66B, + 0x5985, 0xC9CE, 0x598A, 0xA7B3, 0x598D, 0xA7B0, 0x598E, 0xCAB6, 0x598F, 0xCAB9, 0x5990, 0xCAB8, 0x5992, 0xA7AA, 0x5993, 0xA7B2, + 0x5996, 0xA7AF, 0x5997, 0xCAB5, 0x5998, 0xCAB3, 0x5999, 0xA7AE, 0x599D, 0xA7A9, 0x599E, 0xA7AC, 0x59A0, 0xCAB4, 0x59A1, 0xCABB, + 0x59A2, 0xCAB7, 0x59A3, 0xA7AD, 0x59A4, 0xA7B1, 0x59A5, 0xA7B4, 0x59A6, 0xCAB2, 0x59A7, 0xCABA, 0x59A8, 0xA7AB, 0x59AE, 0xA967, + 0x59AF, 0xA96F, 0x59B1, 0xCC4F, 0x59B2, 0xCC48, 0x59B3, 0xA970, 0x59B4, 0xCC53, 0x59B5, 0xCC44, 0x59B6, 0xCC4B, 0x59B9, 0xA966, + 0x59BA, 0xCC45, 0x59BB, 0xA964, 0x59BC, 0xCC4C, 0x59BD, 0xCC50, 0x59BE, 0xA963, 0x59C0, 0xCC51, 0x59C1, 0xCC4A, 0x59C3, 0xCC4D, + 0x59C5, 0xA972, 0x59C6, 0xA969, 0x59C7, 0xCC54, 0x59C8, 0xCC52, 0x59CA, 0xA96E, 0x59CB, 0xA96C, 0x59CC, 0xCC49, 0x59CD, 0xA96B, + 0x59CE, 0xCC47, 0x59CF, 0xCC46, 0x59D0, 0xA96A, 0x59D1, 0xA968, 0x59D2, 0xA971, 0x59D3, 0xA96D, 0x59D4, 0xA965, 0x59D6, 0xCC4E, + 0x59D8, 0xABB9, 0x59DA, 0xABC0, 0x59DB, 0xCE6F, 0x59DC, 0xABB8, 0x59DD, 0xCE67, 0x59DE, 0xCE63, 0x59E0, 0xCE73, 0x59E1, 0xCE62, + 0x59E3, 0xABBB, 0x59E4, 0xCE6C, 0x59E5, 0xABBE, 0x59E6, 0xABC1, 0x59E8, 0xABBC, 0x59E9, 0xCE70, 0x59EA, 0xABBF, 0x59EC, 0xAE56, + 0x59ED, 0xCE76, 0x59EE, 0xCE64, 0x59F1, 0xCE66, 0x59F2, 0xCE6D, 0x59F3, 0xCE71, 0x59F4, 0xCE75, 0x59F5, 0xCE72, 0x59F6, 0xCE6B, + 0x59F7, 0xCE6E, 0x59FA, 0xCE68, 0x59FB, 0xABC3, 0x59FC, 0xCE6A, 0x59FD, 0xCE69, 0x59FE, 0xCE74, 0x59FF, 0xABBA, 0x5A00, 0xCE65, + 0x5A01, 0xABC2, 0x5A03, 0xABBD, 0x5A09, 0xAE5C, 0x5A0A, 0xD162, 0x5A0C, 0xAE5B, 0x5A0F, 0xD160, 0x5A11, 0xAE50, 0x5A13, 0xAE55, + 0x5A15, 0xD15F, 0x5A16, 0xD15C, 0x5A17, 0xD161, 0x5A18, 0xAE51, 0x5A19, 0xD15B, 0x5A1B, 0xAE54, 0x5A1C, 0xAE52, 0x5A1E, 0xD163, + 0x5A1F, 0xAE53, 0x5A20, 0xAE57, 0x5A23, 0xAE58, 0x5A25, 0xAE5A, 0x5A29, 0xAE59, 0x5A2D, 0xD15D, 0x5A2E, 0xD15E, 0x5A33, 0xD164, + 0x5A35, 0xD4D4, 0x5A36, 0xB0F9, 0x5A37, 0xD8C2, 0x5A38, 0xD4D3, 0x5A39, 0xD4E6, 0x5A3C, 0xB140, 0x5A3E, 0xD4E4, 0x5A40, 0xB0FE, + 0x5A41, 0xB0FA, 0x5A42, 0xD4ED, 0x5A43, 0xD4DD, 0x5A44, 0xD4E0, 0x5A46, 0xB143, 0x5A47, 0xD4EA, 0x5A48, 0xD4E2, 0x5A49, 0xB0FB, + 0x5A4A, 0xB144, 0x5A4C, 0xD4E7, 0x5A4D, 0xD4E5, 0x5A50, 0xD4D6, 0x5A51, 0xD4EB, 0x5A52, 0xD4DF, 0x5A53, 0xD4DA, 0x5A55, 0xD4D0, + 0x5A56, 0xD4EC, 0x5A57, 0xD4DC, 0x5A58, 0xD4CF, 0x5A5A, 0xB142, 0x5A5B, 0xD4E1, 0x5A5C, 0xD4EE, 0x5A5D, 0xD4DE, 0x5A5E, 0xD4D2, + 0x5A5F, 0xD4D7, 0x5A60, 0xD4CE, 0x5A62, 0xB141, 0x5A64, 0xD4DB, 0x5A65, 0xD4D8, 0x5A66, 0xB0FC, 0x5A67, 0xD4D1, 0x5A69, 0xD4E9, + 0x5A6A, 0xB0FD, 0x5A6C, 0xD4D9, 0x5A6D, 0xD4D5, 0x5A70, 0xD4E8, 0x5A77, 0xB440, 0x5A78, 0xD8BB, 0x5A7A, 0xD8B8, 0x5A7B, 0xD8C9, + 0x5A7C, 0xD8BD, 0x5A7D, 0xD8CA, 0x5A7F, 0xB442, 0x5A83, 0xD8C6, 0x5A84, 0xD8C3, 0x5A8A, 0xD8C4, 0x5A8B, 0xD8C7, 0x5A8C, 0xD8CB, + 0x5A8E, 0xD4E3, 0x5A8F, 0xD8CD, 0x5A90, 0xDD47, 0x5A92, 0xB443, 0x5A93, 0xD8CE, 0x5A94, 0xD8B6, 0x5A95, 0xD8C0, 0x5A97, 0xD8C5, + 0x5A9A, 0xB441, 0x5A9B, 0xB444, 0x5A9C, 0xD8CC, 0x5A9D, 0xD8CF, 0x5A9E, 0xD8BA, 0x5A9F, 0xD8B7, 0x5AA2, 0xD8B9, 0x5AA5, 0xD8BE, + 0x5AA6, 0xD8BC, 0x5AA7, 0xB445, 0x5AA9, 0xD8C8, 0x5AAC, 0xD8BF, 0x5AAE, 0xD8C1, 0x5AAF, 0xD8B5, 0x5AB0, 0xDCFA, 0x5AB1, 0xDCF8, + 0x5AB2, 0xB742, 0x5AB3, 0xB740, 0x5AB4, 0xDD43, 0x5AB5, 0xDCF9, 0x5AB6, 0xDD44, 0x5AB7, 0xDD40, 0x5AB8, 0xDCF7, 0x5AB9, 0xDD46, + 0x5ABA, 0xDCF6, 0x5ABB, 0xDCFD, 0x5ABC, 0xB6FE, 0x5ABD, 0xB6FD, 0x5ABE, 0xB6FC, 0x5ABF, 0xDCFB, 0x5AC0, 0xDD41, 0x5AC1, 0xB6F9, + 0x5AC2, 0xB741, 0x5AC4, 0xDCF4, 0x5AC6, 0xDCFE, 0x5AC7, 0xDCF3, 0x5AC8, 0xDCFC, 0x5AC9, 0xB6FA, 0x5ACA, 0xDD42, 0x5ACB, 0xDCF5, + 0x5ACC, 0xB6FB, 0x5ACD, 0xDD45, 0x5AD5, 0xE16E, 0x5AD6, 0xB9E2, 0x5AD7, 0xB9E1, 0x5AD8, 0xB9E3, 0x5AD9, 0xE17A, 0x5ADA, 0xE170, + 0x5ADB, 0xE176, 0x5ADC, 0xE16B, 0x5ADD, 0xE179, 0x5ADE, 0xE178, 0x5ADF, 0xE17C, 0x5AE0, 0xE175, 0x5AE1, 0xB9DE, 0x5AE2, 0xE174, + 0x5AE3, 0xB9E4, 0x5AE5, 0xE16D, 0x5AE6, 0xB9DF, 0x5AE8, 0xE17B, 0x5AE9, 0xB9E0, 0x5AEA, 0xE16F, 0x5AEB, 0xE172, 0x5AEC, 0xE177, + 0x5AED, 0xE171, 0x5AEE, 0xE16C, 0x5AF3, 0xE173, 0x5AF4, 0xE555, 0x5AF5, 0xBC61, 0x5AF6, 0xE558, 0x5AF7, 0xE557, 0x5AF8, 0xE55A, + 0x5AF9, 0xE55C, 0x5AFA, 0xF9DC, 0x5AFB, 0xBC5F, 0x5AFD, 0xE556, 0x5AFF, 0xE554, 0x5B01, 0xE55D, 0x5B02, 0xE55B, 0x5B03, 0xE559, + 0x5B05, 0xE55F, 0x5B07, 0xE55E, 0x5B08, 0xBC63, 0x5B09, 0xBC5E, 0x5B0B, 0xBC60, 0x5B0C, 0xBC62, 0x5B0F, 0xE560, 0x5B10, 0xE957, + 0x5B13, 0xE956, 0x5B14, 0xE955, 0x5B16, 0xE958, 0x5B17, 0xE951, 0x5B19, 0xE952, 0x5B1A, 0xE95A, 0x5B1B, 0xE953, 0x5B1D, 0xBEC5, + 0x5B1E, 0xE95C, 0x5B20, 0xE95B, 0x5B21, 0xE954, 0x5B23, 0xECD1, 0x5B24, 0xC0A8, 0x5B25, 0xECCF, 0x5B26, 0xECD4, 0x5B27, 0xECD3, + 0x5B28, 0xE959, 0x5B2A, 0xC0A7, 0x5B2C, 0xECD2, 0x5B2D, 0xECCE, 0x5B2E, 0xECD6, 0x5B2F, 0xECD5, 0x5B30, 0xC0A6, 0x5B32, 0xECD0, + 0x5B34, 0xBEC6, 0x5B38, 0xC254, 0x5B3C, 0xEFC1, 0x5B3D, 0xF1FA, 0x5B3E, 0xF1FB, 0x5B3F, 0xF1FC, 0x5B40, 0xC45C, 0x5B43, 0xC45D, + 0x5B45, 0xF443, 0x5B47, 0xF5C8, 0x5B48, 0xF5C7, 0x5B4B, 0xF6DB, 0x5B4C, 0xF6DC, 0x5B4D, 0xF7D5, 0x5B4E, 0xF8A7, 0x5B50, 0xA46C, + 0x5B51, 0xA46D, 0x5B53, 0xA46E, 0x5B54, 0xA4D5, 0x5B55, 0xA5A5, 0x5B56, 0xC9D3, 0x5B57, 0xA672, 0x5B58, 0xA673, 0x5B5A, 0xA7B7, + 0x5B5B, 0xA7B8, 0x5B5C, 0xA7B6, 0x5B5D, 0xA7B5, 0x5B5F, 0xA973, 0x5B62, 0xCC55, 0x5B63, 0xA975, 0x5B64, 0xA974, 0x5B65, 0xCC56, + 0x5B69, 0xABC4, 0x5B6B, 0xAE5D, 0x5B6C, 0xD165, 0x5B6E, 0xD4F0, 0x5B70, 0xB145, 0x5B71, 0xB447, 0x5B72, 0xD4EF, 0x5B73, 0xB446, + 0x5B75, 0xB9E5, 0x5B77, 0xE17D, 0x5B78, 0xBEC7, 0x5B7A, 0xC0A9, 0x5B7B, 0xECD7, 0x5B7D, 0xC45E, 0x5B7F, 0xC570, 0x5B81, 0xC972, + 0x5B83, 0xA5A6, 0x5B84, 0xC973, 0x5B85, 0xA676, 0x5B87, 0xA674, 0x5B88, 0xA675, 0x5B89, 0xA677, 0x5B8B, 0xA7BA, 0x5B8C, 0xA7B9, + 0x5B8E, 0xCABC, 0x5B8F, 0xA7BB, 0x5B92, 0xCABD, 0x5B93, 0xCC57, 0x5B95, 0xCC58, 0x5B97, 0xA976, 0x5B98, 0xA978, 0x5B99, 0xA97A, + 0x5B9A, 0xA977, 0x5B9B, 0xA97B, 0x5B9C, 0xA979, 0x5BA2, 0xABC8, 0x5BA3, 0xABC5, 0x5BA4, 0xABC7, 0x5BA5, 0xABC9, 0x5BA6, 0xABC6, + 0x5BA7, 0xD166, 0x5BA8, 0xCE77, 0x5BAC, 0xD168, 0x5BAD, 0xD167, 0x5BAE, 0xAE63, 0x5BB0, 0xAE5F, 0x5BB3, 0xAE60, 0x5BB4, 0xAE62, + 0x5BB5, 0xAE64, 0x5BB6, 0xAE61, 0x5BB8, 0xAE66, 0x5BB9, 0xAE65, 0x5BBF, 0xB14A, 0x5BC0, 0xD4F2, 0x5BC1, 0xD4F1, 0x5BC2, 0xB149, + 0x5BC4, 0xB148, 0x5BC5, 0xB147, 0x5BC6, 0xB14B, 0x5BC7, 0xB146, 0x5BCA, 0xD8D5, 0x5BCB, 0xD8D2, 0x5BCC, 0xB449, 0x5BCD, 0xD8D1, + 0x5BCE, 0xD8D6, 0x5BD0, 0xB44B, 0x5BD1, 0xD8D4, 0x5BD2, 0xB448, 0x5BD3, 0xB44A, 0x5BD4, 0xD8D3, 0x5BD6, 0xDD48, 0x5BD8, 0xDD49, + 0x5BD9, 0xDD4A, 0x5BDE, 0xB9E6, 0x5BDF, 0xB9EE, 0x5BE0, 0xE17E, 0x5BE1, 0xB9E8, 0x5BE2, 0xB9EC, 0x5BE3, 0xE1A1, 0x5BE4, 0xB9ED, + 0x5BE5, 0xB9E9, 0x5BE6, 0xB9EA, 0x5BE7, 0xB9E7, 0x5BE8, 0xB9EB, 0x5BE9, 0xBC66, 0x5BEA, 0xD8D0, 0x5BEB, 0xBC67, 0x5BEC, 0xBC65, + 0x5BEE, 0xBC64, 0x5BEF, 0xE95D, 0x5BF0, 0xBEC8, 0x5BF1, 0xECD8, 0x5BF2, 0xECD9, 0x5BF5, 0xC364, 0x5BF6, 0xC45F, 0x5BF8, 0xA46F, + 0x5BFA, 0xA678, 0x5C01, 0xABCA, 0x5C03, 0xD169, 0x5C04, 0xAE67, 0x5C07, 0xB14E, 0x5C08, 0xB14D, 0x5C09, 0xB14C, 0x5C0A, 0xB44C, + 0x5C0B, 0xB44D, 0x5C0C, 0xD8D7, 0x5C0D, 0xB9EF, 0x5C0E, 0xBEC9, 0x5C0F, 0xA470, 0x5C10, 0xC95C, 0x5C11, 0xA4D6, 0x5C12, 0xC974, + 0x5C15, 0xC9D4, 0x5C16, 0xA679, 0x5C1A, 0xA97C, 0x5C1F, 0xDD4B, 0x5C22, 0xA471, 0x5C24, 0xA4D7, 0x5C25, 0xC9D5, 0x5C28, 0xCABE, + 0x5C2A, 0xCABF, 0x5C2C, 0xA7BC, 0x5C30, 0xD8D8, 0x5C31, 0xB44E, 0x5C33, 0xDD4C, 0x5C37, 0xC0AA, 0x5C38, 0xA472, 0x5C39, 0xA4A8, + 0x5C3A, 0xA4D8, 0x5C3B, 0xC975, 0x5C3C, 0xA5A7, 0x5C3E, 0xA7C0, 0x5C3F, 0xA7BF, 0x5C40, 0xA7BD, 0x5C41, 0xA7BE, 0x5C44, 0xCC59, + 0x5C45, 0xA97E, 0x5C46, 0xA9A1, 0x5C47, 0xCC5A, 0x5C48, 0xA97D, 0x5C4B, 0xABCE, 0x5C4C, 0xCE78, 0x5C4D, 0xABCD, 0x5C4E, 0xABCB, + 0x5C4F, 0xABCC, 0x5C50, 0xAE6A, 0x5C51, 0xAE68, 0x5C54, 0xD16B, 0x5C55, 0xAE69, 0x5C56, 0xD16A, 0x5C58, 0xAE5E, 0x5C59, 0xD4F3, + 0x5C5C, 0xB150, 0x5C5D, 0xB151, 0x5C60, 0xB14F, 0x5C62, 0xB9F0, 0x5C63, 0xE1A2, 0x5C64, 0xBC68, 0x5C65, 0xBC69, 0x5C67, 0xE561, + 0x5C68, 0xC0AB, 0x5C69, 0xEFC2, 0x5C6A, 0xEFC3, 0x5C6C, 0xC4DD, 0x5C6D, 0xF8A8, 0x5C6E, 0xC94B, 0x5C6F, 0xA4D9, 0x5C71, 0xA473, + 0x5C73, 0xC977, 0x5C74, 0xC976, 0x5C79, 0xA67A, 0x5C7A, 0xC9D7, 0x5C7B, 0xC9D8, 0x5C7C, 0xC9D6, 0x5C7E, 0xC9D9, 0x5C86, 0xCAC7, + 0x5C88, 0xCAC2, 0x5C89, 0xCAC4, 0x5C8A, 0xCAC6, 0x5C8B, 0xCAC3, 0x5C8C, 0xA7C4, 0x5C8D, 0xCAC0, 0x5C8F, 0xCAC1, 0x5C90, 0xA7C1, + 0x5C91, 0xA7C2, 0x5C92, 0xCAC5, 0x5C93, 0xCAC8, 0x5C94, 0xA7C3, 0x5C95, 0xCAC9, 0x5C9D, 0xCC68, 0x5C9F, 0xCC62, 0x5CA0, 0xCC5D, + 0x5CA1, 0xA9A3, 0x5CA2, 0xCC65, 0x5CA3, 0xCC63, 0x5CA4, 0xCC5C, 0x5CA5, 0xCC69, 0x5CA6, 0xCC6C, 0x5CA7, 0xCC67, 0x5CA8, 0xCC60, + 0x5CA9, 0xA9A5, 0x5CAA, 0xCC66, 0x5CAB, 0xA9A6, 0x5CAC, 0xCC61, 0x5CAD, 0xCC64, 0x5CAE, 0xCC5B, 0x5CAF, 0xCC5F, 0x5CB0, 0xCC6B, + 0x5CB1, 0xA9A7, 0x5CB3, 0xA9A8, 0x5CB5, 0xCC5E, 0x5CB6, 0xCC6A, 0x5CB7, 0xA9A2, 0x5CB8, 0xA9A4, 0x5CC6, 0xCEAB, 0x5CC7, 0xCEA4, + 0x5CC8, 0xCEAA, 0x5CC9, 0xCEA3, 0x5CCA, 0xCEA5, 0x5CCB, 0xCE7D, 0x5CCC, 0xCE7B, 0x5CCE, 0xCEAC, 0x5CCF, 0xCEA9, 0x5CD0, 0xCE79, + 0x5CD2, 0xABD0, 0x5CD3, 0xCEA7, 0x5CD4, 0xCEA8, 0x5CD6, 0xCEA6, 0x5CD7, 0xCE7C, 0x5CD8, 0xCE7A, 0x5CD9, 0xABCF, 0x5CDA, 0xCEA2, + 0x5CDB, 0xCE7E, 0x5CDE, 0xCEA1, 0x5CDF, 0xCEAD, 0x5CE8, 0xAE6F, 0x5CEA, 0xAE6E, 0x5CEC, 0xD16C, 0x5CED, 0xAE6B, 0x5CEE, 0xD16E, + 0x5CF0, 0xAE70, 0x5CF1, 0xD16F, 0x5CF4, 0xAE73, 0x5CF6, 0xAE71, 0x5CF7, 0xD170, 0x5CF8, 0xCEAE, 0x5CF9, 0xD172, 0x5CFB, 0xAE6D, + 0x5CFD, 0xAE6C, 0x5CFF, 0xD16D, 0x5D00, 0xD171, 0x5D01, 0xAE72, 0x5D06, 0xB153, 0x5D07, 0xB152, 0x5D0B, 0xD4F5, 0x5D0C, 0xD4F9, + 0x5D0D, 0xD4FB, 0x5D0E, 0xB154, 0x5D0F, 0xD4FE, 0x5D11, 0xB158, 0x5D12, 0xD541, 0x5D14, 0xB15A, 0x5D16, 0xB156, 0x5D17, 0xB15E, + 0x5D19, 0xB15B, 0x5D1A, 0xD4F7, 0x5D1B, 0xB155, 0x5D1D, 0xD4F6, 0x5D1E, 0xD4F4, 0x5D1F, 0xD543, 0x5D20, 0xD4F8, 0x5D22, 0xB157, + 0x5D23, 0xD542, 0x5D24, 0xB15C, 0x5D25, 0xD4FD, 0x5D26, 0xD4FC, 0x5D27, 0xB15D, 0x5D28, 0xD4FA, 0x5D29, 0xB159, 0x5D2E, 0xD544, + 0x5D30, 0xD540, 0x5D31, 0xD8E7, 0x5D32, 0xD8EE, 0x5D33, 0xD8E3, 0x5D34, 0xB451, 0x5D35, 0xD8DF, 0x5D36, 0xD8EF, 0x5D37, 0xD8D9, + 0x5D38, 0xD8EC, 0x5D39, 0xD8EA, 0x5D3A, 0xD8E4, 0x5D3C, 0xD8ED, 0x5D3D, 0xD8E6, 0x5D3F, 0xD8DE, 0x5D40, 0xD8F0, 0x5D41, 0xD8DC, + 0x5D42, 0xD8E9, 0x5D43, 0xD8DA, 0x5D45, 0xD8F1, 0x5D47, 0xB452, 0x5D49, 0xD8EB, 0x5D4A, 0xDD4F, 0x5D4B, 0xD8DD, 0x5D4C, 0xB44F, + 0x5D4E, 0xD8E1, 0x5D50, 0xB450, 0x5D51, 0xD8E0, 0x5D52, 0xD8E5, 0x5D55, 0xD8E2, 0x5D59, 0xD8E8, 0x5D5E, 0xDD53, 0x5D62, 0xDD56, + 0x5D63, 0xDD4E, 0x5D65, 0xDD50, 0x5D67, 0xDD55, 0x5D68, 0xDD54, 0x5D69, 0xB743, 0x5D6B, 0xD8DB, 0x5D6C, 0xDD52, 0x5D6F, 0xB744, + 0x5D71, 0xDD4D, 0x5D72, 0xDD51, 0x5D77, 0xE1A9, 0x5D79, 0xE1B0, 0x5D7A, 0xE1A7, 0x5D7C, 0xE1AE, 0x5D7D, 0xE1A5, 0x5D7E, 0xE1AD, + 0x5D7F, 0xE1B1, 0x5D80, 0xE1A4, 0x5D81, 0xE1A8, 0x5D82, 0xE1A3, 0x5D84, 0xB9F1, 0x5D86, 0xE1A6, 0x5D87, 0xB9F2, 0x5D88, 0xE1AC, + 0x5D89, 0xE1AB, 0x5D8A, 0xE1AA, 0x5D8D, 0xE1AF, 0x5D92, 0xE565, 0x5D93, 0xE567, 0x5D94, 0xBC6B, 0x5D95, 0xE568, 0x5D97, 0xE563, + 0x5D99, 0xE562, 0x5D9A, 0xE56C, 0x5D9C, 0xE56A, 0x5D9D, 0xBC6A, 0x5D9E, 0xE56D, 0x5D9F, 0xE564, 0x5DA0, 0xE569, 0x5DA1, 0xE56B, + 0x5DA2, 0xE566, 0x5DA7, 0xE961, 0x5DA8, 0xE966, 0x5DA9, 0xE960, 0x5DAA, 0xE965, 0x5DAC, 0xE95E, 0x5DAD, 0xE968, 0x5DAE, 0xE964, + 0x5DAF, 0xE969, 0x5DB0, 0xE963, 0x5DB1, 0xE95F, 0x5DB2, 0xE967, 0x5DB4, 0xE96A, 0x5DB5, 0xE962, 0x5DB7, 0xECDA, 0x5DB8, 0xC0AF, + 0x5DBA, 0xC0AD, 0x5DBC, 0xC0AC, 0x5DBD, 0xC0AE, 0x5DC0, 0xEFC4, 0x5DC2, 0xF172, 0x5DC3, 0xF1FD, 0x5DC6, 0xF444, 0x5DC7, 0xF445, + 0x5DC9, 0xC460, 0x5DCB, 0xF5C9, 0x5DCD, 0xC4DE, 0x5DCF, 0xF5CA, 0x5DD1, 0xF6DE, 0x5DD2, 0xC572, 0x5DD4, 0xC571, 0x5DD5, 0xF6DD, + 0x5DD6, 0xC5C9, 0x5DD8, 0xF7D6, 0x5DDD, 0xA474, 0x5DDE, 0xA67B, 0x5DDF, 0xC9DA, 0x5DE0, 0xCACA, 0x5DE1, 0xA8B5, 0x5DE2, 0xB15F, + 0x5DE5, 0xA475, 0x5DE6, 0xA5AA, 0x5DE7, 0xA5A9, 0x5DE8, 0xA5A8, 0x5DEB, 0xA7C5, 0x5DEE, 0xAE74, 0x5DF0, 0xDD57, 0x5DF1, 0xA476, + 0x5DF2, 0xA477, 0x5DF3, 0xA478, 0x5DF4, 0xA4DA, 0x5DF7, 0xABD1, 0x5DF9, 0xCEAF, 0x5DFD, 0xB453, 0x5DFE, 0xA479, 0x5DFF, 0xC95D, + 0x5E02, 0xA5AB, 0x5E03, 0xA5AC, 0x5E04, 0xC978, 0x5E06, 0xA67C, 0x5E0A, 0xCACB, 0x5E0C, 0xA7C6, 0x5E0E, 0xCACC, 0x5E11, 0xA9AE, + 0x5E14, 0xCC6E, 0x5E15, 0xA9AC, 0x5E16, 0xA9AB, 0x5E17, 0xCC6D, 0x5E18, 0xA9A9, 0x5E19, 0xCC6F, 0x5E1A, 0xA9AA, 0x5E1B, 0xA9AD, + 0x5E1D, 0xABD2, 0x5E1F, 0xABD4, 0x5E20, 0xCEB3, 0x5E21, 0xCEB0, 0x5E22, 0xCEB1, 0x5E23, 0xCEB2, 0x5E24, 0xCEB4, 0x5E25, 0xABD3, + 0x5E28, 0xD174, 0x5E29, 0xD173, 0x5E2B, 0xAE76, 0x5E2D, 0xAE75, 0x5E33, 0xB162, 0x5E34, 0xD546, 0x5E36, 0xB161, 0x5E37, 0xB163, + 0x5E38, 0xB160, 0x5E3D, 0xB455, 0x5E3E, 0xD545, 0x5E40, 0xB456, 0x5E41, 0xD8F3, 0x5E43, 0xB457, 0x5E44, 0xD8F2, 0x5E45, 0xB454, + 0x5E4A, 0xDD5A, 0x5E4B, 0xDD5C, 0x5E4C, 0xB745, 0x5E4D, 0xDD5B, 0x5E4E, 0xDD59, 0x5E4F, 0xDD58, 0x5E53, 0xE1B4, 0x5E54, 0xB9F7, + 0x5E55, 0xB9F5, 0x5E57, 0xB9F6, 0x5E58, 0xE1B2, 0x5E59, 0xE1B3, 0x5E5B, 0xB9F3, 0x5E5C, 0xE571, 0x5E5D, 0xE56F, 0x5E5F, 0xBC6D, + 0x5E60, 0xE570, 0x5E61, 0xBC6E, 0x5E62, 0xBC6C, 0x5E63, 0xB9F4, 0x5E66, 0xE96D, 0x5E67, 0xE96B, 0x5E68, 0xE96C, 0x5E69, 0xE56E, + 0x5E6A, 0xECDC, 0x5E6B, 0xC0B0, 0x5E6C, 0xECDB, 0x5E6D, 0xEFC5, 0x5E6E, 0xEFC6, 0x5E6F, 0xE96E, 0x5E70, 0xF1FE, 0x5E72, 0xA47A, + 0x5E73, 0xA5AD, 0x5E74, 0xA67E, 0x5E75, 0xC9DB, 0x5E76, 0xA67D, 0x5E78, 0xA9AF, 0x5E79, 0xB746, 0x5E7B, 0xA4DB, 0x5E7C, 0xA5AE, + 0x5E7D, 0xABD5, 0x5E7E, 0xB458, 0x5E80, 0xC979, 0x5E82, 0xC97A, 0x5E84, 0xC9DC, 0x5E87, 0xA7C8, 0x5E88, 0xCAD0, 0x5E89, 0xCACE, + 0x5E8A, 0xA7C9, 0x5E8B, 0xCACD, 0x5E8C, 0xCACF, 0x5E8D, 0xCAD1, 0x5E8F, 0xA7C7, 0x5E95, 0xA9B3, 0x5E96, 0xA9B4, 0x5E97, 0xA9B1, + 0x5E9A, 0xA9B0, 0x5E9B, 0xCEB8, 0x5E9C, 0xA9B2, 0x5EA0, 0xABD6, 0x5EA2, 0xCEB7, 0x5EA3, 0xCEB9, 0x5EA4, 0xCEB6, 0x5EA5, 0xCEBA, + 0x5EA6, 0xABD7, 0x5EA7, 0xAE79, 0x5EA8, 0xD175, 0x5EAA, 0xD177, 0x5EAB, 0xAE77, 0x5EAC, 0xD178, 0x5EAD, 0xAE78, 0x5EAE, 0xD176, + 0x5EB0, 0xCEB5, 0x5EB1, 0xD547, 0x5EB2, 0xD54A, 0x5EB3, 0xD54B, 0x5EB4, 0xD548, 0x5EB5, 0xB167, 0x5EB6, 0xB166, 0x5EB7, 0xB164, + 0x5EB8, 0xB165, 0x5EB9, 0xD549, 0x5EBE, 0xB168, 0x5EC1, 0xB45A, 0x5EC2, 0xB45B, 0x5EC4, 0xB45C, 0x5EC5, 0xDD5D, 0x5EC6, 0xDD5F, + 0x5EC7, 0xDD61, 0x5EC8, 0xB748, 0x5EC9, 0xB747, 0x5ECA, 0xB459, 0x5ECB, 0xDD60, 0x5ECC, 0xDD5E, 0x5ECE, 0xE1B8, 0x5ED1, 0xE1B6, + 0x5ED2, 0xE1BC, 0x5ED3, 0xB9F8, 0x5ED4, 0xE1BD, 0x5ED5, 0xE1BA, 0x5ED6, 0xB9F9, 0x5ED7, 0xE1B7, 0x5ED8, 0xE1B5, 0x5ED9, 0xE1BB, + 0x5EDA, 0xBC70, 0x5EDB, 0xE573, 0x5EDC, 0xE1B9, 0x5EDD, 0xBC72, 0x5EDE, 0xE574, 0x5EDF, 0xBC71, 0x5EE0, 0xBC74, 0x5EE1, 0xE575, + 0x5EE2, 0xBC6F, 0x5EE3, 0xBC73, 0x5EE5, 0xE973, 0x5EE6, 0xE971, 0x5EE7, 0xE970, 0x5EE8, 0xE972, 0x5EE9, 0xE96F, 0x5EEC, 0xC366, + 0x5EEE, 0xF446, 0x5EEF, 0xF447, 0x5EF1, 0xF5CB, 0x5EF2, 0xF6DF, 0x5EF3, 0xC655, 0x5EF6, 0xA9B5, 0x5EF7, 0xA7CA, 0x5EFA, 0xABD8, + 0x5EFE, 0xA47B, 0x5EFF, 0xA4DC, 0x5F01, 0xA5AF, 0x5F02, 0xC9DD, 0x5F04, 0xA7CB, 0x5F05, 0xCAD2, 0x5F07, 0xCEBB, 0x5F08, 0xABD9, + 0x5F0A, 0xB9FA, 0x5F0B, 0xA47C, 0x5F0F, 0xA6A1, 0x5F12, 0xB749, 0x5F13, 0xA47D, 0x5F14, 0xA4DD, 0x5F15, 0xA4DE, 0x5F17, 0xA5B1, + 0x5F18, 0xA5B0, 0x5F1A, 0xC9DE, 0x5F1B, 0xA6A2, 0x5F1D, 0xCAD3, 0x5F1F, 0xA7CC, 0x5F22, 0xCC71, 0x5F23, 0xCC72, 0x5F24, 0xCC73, + 0x5F26, 0xA9B6, 0x5F27, 0xA9B7, 0x5F28, 0xCC70, 0x5F29, 0xA9B8, 0x5F2D, 0xABDA, 0x5F2E, 0xCEBC, 0x5F30, 0xD17A, 0x5F31, 0xAE7A, + 0x5F33, 0xD179, 0x5F35, 0xB169, 0x5F36, 0xD54C, 0x5F37, 0xB16A, 0x5F38, 0xD54D, 0x5F3C, 0xB45D, 0x5F40, 0xDD62, 0x5F43, 0xE1BF, + 0x5F44, 0xE1BE, 0x5F46, 0xB9FB, 0x5F48, 0xBC75, 0x5F49, 0xE576, 0x5F4A, 0xBECA, 0x5F4B, 0xE974, 0x5F4C, 0xC0B1, 0x5F4E, 0xC573, + 0x5F4F, 0xF7D8, 0x5F54, 0xCC74, 0x5F56, 0xCEBD, 0x5F57, 0xB16B, 0x5F58, 0xD8F4, 0x5F59, 0xB74A, 0x5F5D, 0xC255, 0x5F62, 0xA7CE, + 0x5F64, 0xA7CD, 0x5F65, 0xABDB, 0x5F67, 0xD17B, 0x5F69, 0xB16D, 0x5F6A, 0xB343, 0x5F6B, 0xB16E, 0x5F6C, 0xB16C, 0x5F6D, 0xB45E, + 0x5F6F, 0xE1C0, 0x5F70, 0xB9FC, 0x5F71, 0xBC76, 0x5F73, 0xC94C, 0x5F74, 0xC9DF, 0x5F76, 0xCAD5, 0x5F77, 0xA7CF, 0x5F78, 0xCAD4, + 0x5F79, 0xA7D0, 0x5F7C, 0xA9BC, 0x5F7D, 0xCC77, 0x5F7E, 0xCC76, 0x5F7F, 0xA9BB, 0x5F80, 0xA9B9, 0x5F81, 0xA9BA, 0x5F82, 0xCC75, + 0x5F85, 0xABDD, 0x5F86, 0xCEBE, 0x5F87, 0xABE0, 0x5F88, 0xABDC, 0x5F89, 0xABE2, 0x5F8A, 0xABDE, 0x5F8B, 0xABDF, 0x5F8C, 0xABE1, + 0x5F90, 0xAE7D, 0x5F91, 0xAE7C, 0x5F92, 0xAE7B, 0x5F96, 0xD54F, 0x5F97, 0xB16F, 0x5F98, 0xB172, 0x5F99, 0xB170, 0x5F9B, 0xD54E, + 0x5F9C, 0xB175, 0x5F9E, 0xB171, 0x5F9F, 0xD550, 0x5FA0, 0xB174, 0x5FA1, 0xB173, 0x5FA5, 0xD8F6, 0x5FA6, 0xD8F5, 0x5FA8, 0xB461, + 0x5FA9, 0xB45F, 0x5FAA, 0xB460, 0x5FAB, 0xD8F7, 0x5FAC, 0xB74B, 0x5FAD, 0xDD64, 0x5FAE, 0xB74C, 0x5FAF, 0xDD63, 0x5FB2, 0xE577, + 0x5FB5, 0xBC78, 0x5FB6, 0xE1C1, 0x5FB7, 0xBC77, 0x5FB9, 0xB9FD, 0x5FBB, 0xECDE, 0x5FBC, 0xE975, 0x5FBD, 0xC0B2, 0x5FBE, 0xECDD, + 0x5FBF, 0xF240, 0x5FC0, 0xF448, 0x5FC1, 0xF449, 0x5FC3, 0xA4DF, 0x5FC5, 0xA5B2, 0x5FC9, 0xC97B, 0x5FCC, 0xA7D2, 0x5FCD, 0xA7D4, + 0x5FCF, 0xC9E2, 0x5FD0, 0xCAD8, 0x5FD1, 0xCAD7, 0x5FD2, 0xCAD6, 0x5FD4, 0xC9E1, 0x5FD5, 0xC9E0, 0x5FD6, 0xA6A4, 0x5FD7, 0xA7D3, + 0x5FD8, 0xA7D1, 0x5FD9, 0xA6A3, 0x5FDD, 0xA9BD, 0x5FDE, 0xCC78, 0x5FE0, 0xA9BE, 0x5FE1, 0xCADD, 0x5FE3, 0xCADF, 0x5FE4, 0xCADE, + 0x5FE5, 0xCC79, 0x5FE8, 0xCADA, 0x5FEA, 0xA7D8, 0x5FEB, 0xA7D6, 0x5FED, 0xCAD9, 0x5FEE, 0xCADB, 0x5FEF, 0xCAE1, 0x5FF1, 0xA7D5, + 0x5FF3, 0xCADC, 0x5FF4, 0xCAE5, 0x5FF5, 0xA9C0, 0x5FF7, 0xCAE2, 0x5FF8, 0xA7D7, 0x5FFA, 0xCAE0, 0x5FFB, 0xCAE3, 0x5FFD, 0xA9BF, + 0x5FFF, 0xA9C1, 0x6000, 0xCAE4, 0x6009, 0xCCAF, 0x600A, 0xCCA2, 0x600B, 0xCC7E, 0x600C, 0xCCAE, 0x600D, 0xCCA9, 0x600E, 0xABE7, + 0x600F, 0xA9C2, 0x6010, 0xCCAA, 0x6011, 0xCCAD, 0x6012, 0xABE3, 0x6013, 0xCCAC, 0x6014, 0xA9C3, 0x6015, 0xA9C8, 0x6016, 0xA9C6, + 0x6017, 0xCCA3, 0x6019, 0xCC7C, 0x601A, 0xCCA5, 0x601B, 0xA9CD, 0x601C, 0xCCB0, 0x601D, 0xABE4, 0x601E, 0xCCA6, 0x6020, 0xABE5, + 0x6021, 0xA9C9, 0x6022, 0xCCA8, 0x6024, 0xCECD, 0x6025, 0xABE6, 0x6026, 0xCC7B, 0x6027, 0xA9CA, 0x6028, 0xABE8, 0x6029, 0xA9CB, + 0x602A, 0xA9C7, 0x602B, 0xA9CC, 0x602C, 0xCCA7, 0x602D, 0xCC7A, 0x602E, 0xCCAB, 0x602F, 0xA9C4, 0x6032, 0xCC7D, 0x6033, 0xCCA4, + 0x6034, 0xCCA1, 0x6035, 0xA9C5, 0x6037, 0xCEBF, 0x6039, 0xCEC0, 0x6040, 0xCECA, 0x6041, 0xD1A1, 0x6042, 0xCECB, 0x6043, 0xABEE, + 0x6044, 0xCECE, 0x6045, 0xCEC4, 0x6046, 0xABED, 0x6047, 0xCEC6, 0x6049, 0xCEC7, 0x604C, 0xCEC9, 0x604D, 0xABE9, 0x6050, 0xAEA3, + 0x6052, 0xF9DA, 0x6053, 0xCEC5, 0x6054, 0xCEC1, 0x6055, 0xAEA4, 0x6058, 0xCECF, 0x6059, 0xAE7E, 0x605A, 0xD17D, 0x605B, 0xCEC8, + 0x605D, 0xD17C, 0x605E, 0xCEC3, 0x605F, 0xCECC, 0x6062, 0xABEC, 0x6063, 0xAEA1, 0x6064, 0xABF2, 0x6065, 0xAEA2, 0x6066, 0xCED0, + 0x6067, 0xD17E, 0x6068, 0xABEB, 0x6069, 0xAEA6, 0x606A, 0xABF1, 0x606B, 0xABF0, 0x606C, 0xABEF, 0x606D, 0xAEA5, 0x606E, 0xCED1, + 0x606F, 0xAEA7, 0x6070, 0xABEA, 0x6072, 0xCEC2, 0x607F, 0xB176, 0x6080, 0xD1A4, 0x6081, 0xD1A6, 0x6083, 0xD1A8, 0x6084, 0xAEA8, + 0x6085, 0xAEAE, 0x6086, 0xD553, 0x6087, 0xD1AC, 0x6088, 0xD1A3, 0x6089, 0xB178, 0x608A, 0xD551, 0x608C, 0xAEAD, 0x608D, 0xAEAB, + 0x608E, 0xD1AE, 0x6090, 0xD552, 0x6092, 0xD1A5, 0x6094, 0xAEAC, 0x6095, 0xD1A9, 0x6096, 0xAEAF, 0x6097, 0xD1AB, 0x609A, 0xAEAA, + 0x609B, 0xD1AA, 0x609C, 0xD1AD, 0x609D, 0xD1A7, 0x609F, 0xAEA9, 0x60A0, 0xB179, 0x60A2, 0xD1A2, 0x60A3, 0xB177, 0x60A8, 0xB17A, + 0x60B0, 0xD555, 0x60B1, 0xD55E, 0x60B2, 0xB464, 0x60B4, 0xB17C, 0x60B5, 0xB1A3, 0x60B6, 0xB465, 0x60B7, 0xD560, 0x60B8, 0xB1AA, + 0x60B9, 0xD8F9, 0x60BA, 0xD556, 0x60BB, 0xB1A2, 0x60BC, 0xB1A5, 0x60BD, 0xB17E, 0x60BE, 0xD554, 0x60BF, 0xD562, 0x60C0, 0xD565, + 0x60C1, 0xD949, 0x60C3, 0xD563, 0x60C4, 0xD8FD, 0x60C5, 0xB1A1, 0x60C6, 0xB1A8, 0x60C7, 0xB1AC, 0x60C8, 0xD55D, 0x60C9, 0xD8F8, + 0x60CA, 0xD561, 0x60CB, 0xB17B, 0x60CC, 0xD8FA, 0x60CD, 0xD564, 0x60CE, 0xD8FC, 0x60CF, 0xD559, 0x60D1, 0xB462, 0x60D3, 0xD557, + 0x60D4, 0xD558, 0x60D5, 0xB1A7, 0x60D8, 0xB1A6, 0x60D9, 0xD55B, 0x60DA, 0xB1AB, 0x60DB, 0xD55F, 0x60DC, 0xB1A4, 0x60DD, 0xD55C, + 0x60DF, 0xB1A9, 0x60E0, 0xB466, 0x60E1, 0xB463, 0x60E2, 0xD8FB, 0x60E4, 0xD55A, 0x60E6, 0xB17D, 0x60F0, 0xB46B, 0x60F1, 0xB46F, + 0x60F2, 0xD940, 0x60F3, 0xB751, 0x60F4, 0xB46D, 0x60F5, 0xD944, 0x60F6, 0xB471, 0x60F7, 0xDD65, 0x60F8, 0xD946, 0x60F9, 0xB753, + 0x60FA, 0xB469, 0x60FB, 0xB46C, 0x60FC, 0xD947, 0x60FE, 0xD948, 0x60FF, 0xD94E, 0x6100, 0xB473, 0x6101, 0xB754, 0x6103, 0xD94A, + 0x6104, 0xD94F, 0x6105, 0xD943, 0x6106, 0xB75E, 0x6108, 0xB755, 0x6109, 0xB472, 0x610A, 0xD941, 0x610B, 0xD950, 0x610D, 0xB75D, + 0x610E, 0xB470, 0x610F, 0xB74E, 0x6110, 0xD94D, 0x6112, 0xB474, 0x6113, 0xD945, 0x6114, 0xD8FE, 0x6115, 0xB46A, 0x6116, 0xD942, + 0x6118, 0xD94B, 0x611A, 0xB74D, 0x611B, 0xB752, 0x611C, 0xB467, 0x611D, 0xD94C, 0x611F, 0xB750, 0x6123, 0xB468, 0x6127, 0xB75C, + 0x6128, 0xE1C3, 0x6129, 0xDD70, 0x612B, 0xDD68, 0x612C, 0xE1C2, 0x612E, 0xDD6C, 0x612F, 0xDD6E, 0x6132, 0xDD6B, 0x6134, 0xB75B, + 0x6136, 0xDD6A, 0x6137, 0xB75F, 0x613B, 0xE1D2, 0x613E, 0xB75A, 0x613F, 0xBA40, 0x6140, 0xDD71, 0x6141, 0xE1C4, 0x6144, 0xB758, + 0x6145, 0xDD69, 0x6146, 0xDD6D, 0x6147, 0xB9FE, 0x6148, 0xB74F, 0x6149, 0xDD66, 0x614A, 0xDD67, 0x614B, 0xBA41, 0x614C, 0xB757, + 0x614D, 0xB759, 0x614E, 0xB756, 0x614F, 0xDD6F, 0x6152, 0xE1C8, 0x6153, 0xE1C9, 0x6154, 0xE1CE, 0x6155, 0xBC7D, 0x6156, 0xE1D5, + 0x6158, 0xBA47, 0x615A, 0xBA46, 0x615B, 0xE1D0, 0x615D, 0xBC7C, 0x615E, 0xE1C5, 0x615F, 0xBA45, 0x6161, 0xE1D4, 0x6162, 0xBA43, + 0x6163, 0xBA44, 0x6165, 0xE1D1, 0x6166, 0xE5AA, 0x6167, 0xBC7A, 0x6168, 0xB46E, 0x616A, 0xE1D3, 0x616B, 0xBCA3, 0x616C, 0xE1CB, + 0x616E, 0xBC7B, 0x6170, 0xBCA2, 0x6171, 0xE1C6, 0x6172, 0xE1CA, 0x6173, 0xE1C7, 0x6174, 0xE1CD, 0x6175, 0xBA48, 0x6176, 0xBC79, + 0x6177, 0xBA42, 0x6179, 0xE57A, 0x617A, 0xE1CF, 0x617C, 0xBCA1, 0x617E, 0xBCA4, 0x6180, 0xE1CC, 0x6182, 0xBC7E, 0x6183, 0xE579, + 0x6189, 0xE57E, 0x618A, 0xBECE, 0x618B, 0xE578, 0x618C, 0xE9A3, 0x618D, 0xE5A9, 0x618E, 0xBCA8, 0x6190, 0xBCA6, 0x6191, 0xBECC, + 0x6192, 0xE5A6, 0x6193, 0xE5A2, 0x6194, 0xBCAC, 0x6196, 0xE978, 0x619A, 0xBCAA, 0x619B, 0xE5A1, 0x619D, 0xE976, 0x619F, 0xE5A5, + 0x61A1, 0xE5A8, 0x61A2, 0xE57D, 0x61A4, 0xBCAB, 0x61A7, 0xBCA5, 0x61A8, 0xE977, 0x61A9, 0xBECD, 0x61AA, 0xE5A7, 0x61AB, 0xBCA7, + 0x61AC, 0xBCA9, 0x61AD, 0xE5A4, 0x61AE, 0xBCAD, 0x61AF, 0xE5A3, 0x61B0, 0xE57C, 0x61B1, 0xE57B, 0x61B2, 0xBECB, 0x61B3, 0xE5AB, + 0x61B4, 0xE97A, 0x61B5, 0xECE0, 0x61B6, 0xBED0, 0x61B8, 0xE9A2, 0x61BA, 0xE97E, 0x61BC, 0xECE1, 0x61BE, 0xBED1, 0x61BF, 0xE9A1, + 0x61C1, 0xE97C, 0x61C2, 0xC0B4, 0x61C3, 0xECDF, 0x61C5, 0xE979, 0x61C6, 0xE97B, 0x61C7, 0xC0B5, 0x61C8, 0xBED3, 0x61C9, 0xC0B3, + 0x61CA, 0xBED2, 0x61CB, 0xC0B7, 0x61CC, 0xE97D, 0x61CD, 0xBECF, 0x61D6, 0xEFCF, 0x61D8, 0xEFC7, 0x61DE, 0xECE7, 0x61DF, 0xEFC8, + 0x61E0, 0xECE3, 0x61E3, 0xC256, 0x61E4, 0xECE5, 0x61E5, 0xECE4, 0x61E6, 0xC0B6, 0x61E7, 0xECE2, 0x61E8, 0xECE6, 0x61E9, 0xEFD0, + 0x61EA, 0xEFCC, 0x61EB, 0xEFCE, 0x61ED, 0xEFC9, 0x61EE, 0xEFCA, 0x61F0, 0xEFCD, 0x61F1, 0xEFCB, 0x61F2, 0xC367, 0x61F5, 0xC36A, + 0x61F6, 0xC369, 0x61F7, 0xC368, 0x61F8, 0xC461, 0x61F9, 0xF44A, 0x61FA, 0xC462, 0x61FB, 0xF241, 0x61FC, 0xC4DF, 0x61FD, 0xF5CC, + 0x61FE, 0xC4E0, 0x61FF, 0xC574, 0x6200, 0xC5CA, 0x6201, 0xF7D9, 0x6203, 0xF7DA, 0x6204, 0xF7DB, 0x6207, 0xF9BA, 0x6208, 0xA4E0, + 0x6209, 0xC97C, 0x620A, 0xA5B3, 0x620C, 0xA6A6, 0x620D, 0xA6A7, 0x620E, 0xA6A5, 0x6210, 0xA6A8, 0x6211, 0xA7DA, 0x6212, 0xA7D9, + 0x6214, 0xCCB1, 0x6215, 0xA9CF, 0x6216, 0xA9CE, 0x6219, 0xD1AF, 0x621A, 0xB1AD, 0x621B, 0xB1AE, 0x621F, 0xB475, 0x6220, 0xDD72, + 0x6221, 0xB760, 0x6222, 0xB761, 0x6223, 0xDD74, 0x6224, 0xDD76, 0x6225, 0xDD75, 0x6227, 0xE1D7, 0x6229, 0xE1D6, 0x622A, 0xBA49, + 0x622B, 0xE1D8, 0x622D, 0xE5AC, 0x622E, 0xBCAE, 0x6230, 0xBED4, 0x6232, 0xC0B8, 0x6233, 0xC257, 0x6234, 0xC0B9, 0x6236, 0xA4E1, + 0x623A, 0xCAE6, 0x623D, 0xCCB2, 0x623E, 0xA9D1, 0x623F, 0xA9D0, 0x6240, 0xA9D2, 0x6241, 0xABF3, 0x6242, 0xCED2, 0x6243, 0xCED3, + 0x6246, 0xD1B0, 0x6247, 0xAEB0, 0x6248, 0xB1AF, 0x6249, 0xB476, 0x624A, 0xD951, 0x624B, 0xA4E2, 0x624D, 0xA47E, 0x624E, 0xA4E3, + 0x6250, 0xC97D, 0x6251, 0xA5B7, 0x6252, 0xA5B6, 0x6253, 0xA5B4, 0x6254, 0xA5B5, 0x6258, 0xA6AB, 0x6259, 0xC9E9, 0x625A, 0xC9EB, + 0x625B, 0xA6AA, 0x625C, 0xC9E3, 0x625E, 0xC9E4, 0x6260, 0xC9EA, 0x6261, 0xC9E6, 0x6262, 0xC9E8, 0x6263, 0xA6A9, 0x6264, 0xC9E5, + 0x6265, 0xC9EC, 0x6266, 0xC9E7, 0x626D, 0xA7E1, 0x626E, 0xA7EA, 0x626F, 0xA7E8, 0x6270, 0xCAF0, 0x6271, 0xCAED, 0x6272, 0xCAF5, + 0x6273, 0xA7E6, 0x6274, 0xCAF6, 0x6276, 0xA7DF, 0x6277, 0xCAF3, 0x6279, 0xA7E5, 0x627A, 0xCAEF, 0x627B, 0xCAEE, 0x627C, 0xA7E3, + 0x627D, 0xCAF4, 0x627E, 0xA7E4, 0x627F, 0xA9D3, 0x6280, 0xA7DE, 0x6281, 0xCAF1, 0x6283, 0xCAE7, 0x6284, 0xA7DB, 0x6286, 0xA7EE, + 0x6287, 0xCAEC, 0x6288, 0xCAF2, 0x6289, 0xA7E0, 0x628A, 0xA7E2, 0x628C, 0xCAE8, 0x628E, 0xCAE9, 0x628F, 0xCAEA, 0x6291, 0xA7ED, + 0x6292, 0xA7E7, 0x6293, 0xA7EC, 0x6294, 0xCAEB, 0x6295, 0xA7EB, 0x6296, 0xA7DD, 0x6297, 0xA7DC, 0x6298, 0xA7E9, 0x62A8, 0xA9E1, + 0x62A9, 0xCCBE, 0x62AA, 0xCCB7, 0x62AB, 0xA9DC, 0x62AC, 0xA9EF, 0x62AD, 0xCCB3, 0x62AE, 0xCCBA, 0x62AF, 0xCCBC, 0x62B0, 0xCCBF, + 0x62B1, 0xA9EA, 0x62B3, 0xCCBB, 0x62B4, 0xCCB4, 0x62B5, 0xA9E8, 0x62B6, 0xCCB8, 0x62B8, 0xCCC0, 0x62B9, 0xA9D9, 0x62BB, 0xCCBD, + 0x62BC, 0xA9E3, 0x62BD, 0xA9E2, 0x62BE, 0xCCB6, 0x62BF, 0xA9D7, 0x62C2, 0xA9D8, 0x62C4, 0xA9D6, 0x62C6, 0xA9EE, 0x62C7, 0xA9E6, + 0x62C8, 0xA9E0, 0x62C9, 0xA9D4, 0x62CA, 0xCCB9, 0x62CB, 0xA9DF, 0x62CC, 0xA9D5, 0x62CD, 0xA9E7, 0x62CE, 0xA9F0, 0x62CF, 0xCED4, + 0x62D0, 0xA9E4, 0x62D1, 0xCCB5, 0x62D2, 0xA9DA, 0x62D3, 0xA9DD, 0x62D4, 0xA9DE, 0x62D6, 0xA9EC, 0x62D7, 0xA9ED, 0x62D8, 0xA9EB, + 0x62D9, 0xA9E5, 0x62DA, 0xA9E9, 0x62DB, 0xA9DB, 0x62DC, 0xABF4, 0x62EB, 0xCEDA, 0x62EC, 0xAC41, 0x62ED, 0xABF8, 0x62EE, 0xABFA, + 0x62EF, 0xAC40, 0x62F0, 0xCEE6, 0x62F1, 0xABFD, 0x62F2, 0xD1B1, 0x62F3, 0xAEB1, 0x62F4, 0xAC43, 0x62F5, 0xCED7, 0x62F6, 0xCEDF, + 0x62F7, 0xABFE, 0x62F8, 0xCEDE, 0x62F9, 0xCEDB, 0x62FA, 0xCEE3, 0x62FB, 0xCEE5, 0x62FC, 0xABF7, 0x62FD, 0xABFB, 0x62FE, 0xAC42, + 0x62FF, 0xAEB3, 0x6300, 0xCEE0, 0x6301, 0xABF9, 0x6302, 0xAC45, 0x6303, 0xCED9, 0x6307, 0xABFC, 0x6308, 0xAEB2, 0x6309, 0xABF6, + 0x630B, 0xCED6, 0x630C, 0xCEDD, 0x630D, 0xCED5, 0x630E, 0xCED8, 0x630F, 0xCEDC, 0x6310, 0xD1B2, 0x6311, 0xAC44, 0x6313, 0xCEE1, + 0x6314, 0xCEE2, 0x6315, 0xCEE4, 0x6316, 0xABF5, 0x6328, 0xAEC1, 0x6329, 0xD1BE, 0x632A, 0xAEBF, 0x632B, 0xAEC0, 0x632C, 0xD1B4, + 0x632D, 0xD1C4, 0x632F, 0xAEB6, 0x6332, 0xD566, 0x6333, 0xD1C6, 0x6334, 0xD1C0, 0x6336, 0xD1B7, 0x6338, 0xD1C9, 0x6339, 0xD1BA, + 0x633A, 0xAEBC, 0x633B, 0xD57D, 0x633C, 0xD1BD, 0x633D, 0xAEBE, 0x633E, 0xAEB5, 0x6340, 0xD1CB, 0x6341, 0xD1BF, 0x6342, 0xAEB8, + 0x6343, 0xD1B8, 0x6344, 0xD1B5, 0x6345, 0xD1B6, 0x6346, 0xAEB9, 0x6347, 0xD1C5, 0x6348, 0xD1CC, 0x6349, 0xAEBB, 0x634A, 0xD1BC, + 0x634B, 0xD1BB, 0x634C, 0xAEC3, 0x634D, 0xAEC2, 0x634E, 0xAEB4, 0x634F, 0xAEBA, 0x6350, 0xAEBD, 0x6351, 0xD1C8, 0x6354, 0xD1C2, + 0x6355, 0xAEB7, 0x6356, 0xD1B3, 0x6357, 0xD1CA, 0x6358, 0xD1C1, 0x6359, 0xD1C3, 0x635A, 0xD1C7, 0x6365, 0xD567, 0x6367, 0xB1B7, + 0x6368, 0xB1CB, 0x6369, 0xB1CA, 0x636B, 0xB1BF, 0x636D, 0xD579, 0x636E, 0xD575, 0x636F, 0xD572, 0x6370, 0xD5A6, 0x6371, 0xB1BA, + 0x6372, 0xB1B2, 0x6375, 0xD577, 0x6376, 0xB4A8, 0x6377, 0xB1B6, 0x6378, 0xD5A1, 0x637A, 0xB1CC, 0x637B, 0xB1C9, 0x637C, 0xD57B, + 0x637D, 0xD56A, 0x6380, 0xB1C8, 0x6381, 0xD5A3, 0x6382, 0xD569, 0x6383, 0xB1BD, 0x6384, 0xB1C1, 0x6385, 0xD5A2, 0x6387, 0xD573, + 0x6388, 0xB1C2, 0x6389, 0xB1BC, 0x638A, 0xD568, 0x638C, 0xB478, 0x638D, 0xD5A5, 0x638E, 0xD571, 0x638F, 0xB1C7, 0x6390, 0xD574, + 0x6391, 0xD5A4, 0x6392, 0xB1C6, 0x6394, 0xD952, 0x6396, 0xB1B3, 0x6397, 0xD56F, 0x6398, 0xB1B8, 0x6399, 0xB1C3, 0x639B, 0xB1BE, + 0x639C, 0xD578, 0x639D, 0xD56E, 0x639E, 0xD56C, 0x639F, 0xD57E, 0x63A0, 0xB1B0, 0x63A1, 0xB1C4, 0x63A2, 0xB1B4, 0x63A3, 0xB477, + 0x63A4, 0xD57C, 0x63A5, 0xB1B5, 0x63A7, 0xB1B1, 0x63A8, 0xB1C0, 0x63A9, 0xB1BB, 0x63AA, 0xB1B9, 0x63AB, 0xD570, 0x63AC, 0xB1C5, + 0x63AD, 0xD56D, 0x63AE, 0xD57A, 0x63AF, 0xD576, 0x63B0, 0xD954, 0x63B1, 0xD953, 0x63BD, 0xD56B, 0x63BE, 0xD964, 0x63C0, 0xB47A, + 0x63C2, 0xD96A, 0x63C3, 0xD959, 0x63C4, 0xD967, 0x63C5, 0xDD77, 0x63C6, 0xB47D, 0x63C7, 0xD96B, 0x63C8, 0xD96E, 0x63C9, 0xB47C, + 0x63CA, 0xD95C, 0x63CB, 0xD96D, 0x63CC, 0xD96C, 0x63CD, 0xB47E, 0x63CE, 0xD955, 0x63CF, 0xB479, 0x63D0, 0xB4A3, 0x63D2, 0xB4A1, + 0x63D3, 0xD969, 0x63D5, 0xD95F, 0x63D6, 0xB4A5, 0x63D7, 0xD970, 0x63D8, 0xD968, 0x63D9, 0xD971, 0x63DA, 0xB4AD, 0x63DB, 0xB4AB, + 0x63DC, 0xD966, 0x63DD, 0xD965, 0x63DF, 0xD963, 0x63E0, 0xD95D, 0x63E1, 0xB4A4, 0x63E3, 0xB4A2, 0x63E4, 0xD1B9, 0x63E5, 0xD956, + 0x63E7, 0xDDB7, 0x63E8, 0xD957, 0x63E9, 0xB47B, 0x63EA, 0xB4AA, 0x63EB, 0xDD79, 0x63ED, 0xB4A6, 0x63EE, 0xB4A7, 0x63EF, 0xD958, + 0x63F0, 0xD96F, 0x63F1, 0xDD78, 0x63F2, 0xD960, 0x63F3, 0xD95B, 0x63F4, 0xB4A9, 0x63F5, 0xD961, 0x63F6, 0xD95E, 0x63F9, 0xB4AE, + 0x6406, 0xB770, 0x6409, 0xDD7C, 0x640A, 0xDDB1, 0x640B, 0xDDB6, 0x640C, 0xDDAA, 0x640D, 0xB76C, 0x640E, 0xDDBB, 0x640F, 0xB769, + 0x6410, 0xDD7A, 0x6412, 0xDD7B, 0x6413, 0xB762, 0x6414, 0xB76B, 0x6415, 0xDDA4, 0x6416, 0xB76E, 0x6417, 0xB76F, 0x6418, 0xDDA5, + 0x641A, 0xDDB2, 0x641B, 0xDDB8, 0x641C, 0xB76A, 0x641E, 0xB764, 0x641F, 0xDDA3, 0x6420, 0xDD7D, 0x6421, 0xDDBA, 0x6422, 0xDDA8, + 0x6423, 0xDDA9, 0x6424, 0xDD7E, 0x6425, 0xDDB4, 0x6426, 0xDDAB, 0x6427, 0xDDB5, 0x6428, 0xDDAD, 0x642A, 0xB765, 0x642B, 0xE1D9, + 0x642C, 0xB768, 0x642D, 0xB766, 0x642E, 0xDDB9, 0x642F, 0xDDB0, 0x6430, 0xDDAC, 0x6433, 0xDDA1, 0x6434, 0xBA53, 0x6435, 0xDDAF, + 0x6436, 0xB76D, 0x6437, 0xDDA7, 0x6439, 0xDDA6, 0x643D, 0xB767, 0x643E, 0xB763, 0x643F, 0xE1EE, 0x6440, 0xDDB3, 0x6441, 0xDDAE, + 0x6443, 0xDDA2, 0x644B, 0xE1E9, 0x644D, 0xE1DA, 0x644E, 0xE1E5, 0x6450, 0xE1EC, 0x6451, 0xBA51, 0x6452, 0xB4AC, 0x6453, 0xE1EA, + 0x6454, 0xBA4C, 0x6458, 0xBA4B, 0x6459, 0xE1F1, 0x645B, 0xE1DB, 0x645C, 0xE1E8, 0x645D, 0xE1DC, 0x645E, 0xE1E7, 0x645F, 0xBA4F, + 0x6460, 0xE1EB, 0x6461, 0xD962, 0x6465, 0xE1F2, 0x6466, 0xE1E3, 0x6467, 0xBA52, 0x6468, 0xE5BA, 0x6469, 0xBCAF, 0x646B, 0xE1F0, + 0x646C, 0xE1EF, 0x646D, 0xBA54, 0x646E, 0xE5AD, 0x646F, 0xBCB0, 0x6470, 0xE5AE, 0x6472, 0xE1DF, 0x6473, 0xE1E0, 0x6474, 0xE1DD, + 0x6475, 0xE1E2, 0x6476, 0xE1DE, 0x6477, 0xE1F3, 0x6478, 0xBA4E, 0x6479, 0xBCB1, 0x647A, 0xBA50, 0x647B, 0xBA55, 0x647D, 0xE1E1, + 0x647F, 0xE1ED, 0x6482, 0xE1E6, 0x6485, 0xE5B1, 0x6487, 0xBA4A, 0x6488, 0xBCB4, 0x6489, 0xE9AA, 0x648A, 0xE5B6, 0x648B, 0xE5B5, + 0x648C, 0xE5B7, 0x648F, 0xE5B4, 0x6490, 0xBCB5, 0x6492, 0xBCBB, 0x6493, 0xBCB8, 0x6495, 0xBCB9, 0x6496, 0xE5AF, 0x6497, 0xE5B2, + 0x6498, 0xE5BC, 0x6499, 0xBCC1, 0x649A, 0xBCBF, 0x649C, 0xE5B3, 0x649D, 0xD95A, 0x649E, 0xBCB2, 0x649F, 0xE5B9, 0x64A0, 0xE5B0, + 0x64A2, 0xBCC2, 0x64A3, 0xE5B8, 0x64A4, 0xBA4D, 0x64A5, 0xBCB7, 0x64A6, 0xE1E4, 0x64A9, 0xBCBA, 0x64AB, 0xBCBE, 0x64AC, 0xBCC0, + 0x64AD, 0xBCBD, 0x64AE, 0xBCBC, 0x64B0, 0xBCB6, 0x64B1, 0xE5BB, 0x64B2, 0xBCB3, 0x64B3, 0xBCC3, 0x64BB, 0xBED8, 0x64BC, 0xBED9, + 0x64BD, 0xE9A9, 0x64BE, 0xBEE2, 0x64BF, 0xBEDF, 0x64C1, 0xBED6, 0x64C2, 0xBEDD, 0x64C3, 0xE9AB, 0x64C4, 0xBEDB, 0x64C5, 0xBED5, + 0x64C7, 0xBEDC, 0x64C9, 0xE9A8, 0x64CA, 0xC0BB, 0x64CB, 0xBED7, 0x64CD, 0xBEDE, 0x64CE, 0xC0BA, 0x64CF, 0xE9A7, 0x64D0, 0xE9A6, + 0x64D2, 0xBEE0, 0x64D4, 0xBEE1, 0x64D6, 0xE9A5, 0x64D7, 0xE9A4, 0x64D8, 0xC0BC, 0x64D9, 0xE9AE, 0x64DA, 0xBEDA, 0x64DB, 0xE9AC, + 0x64E0, 0xC0BD, 0x64E2, 0xC0C2, 0x64E3, 0xECEA, 0x64E4, 0xECEC, 0x64E6, 0xC0BF, 0x64E8, 0xECED, 0x64E9, 0xECE9, 0x64EB, 0xECEB, + 0x64EC, 0xC0C0, 0x64ED, 0xC0C3, 0x64EF, 0xECE8, 0x64F0, 0xC0BE, 0x64F1, 0xC0C1, 0x64F2, 0xC259, 0x64F3, 0xE9AD, 0x64F4, 0xC258, + 0x64F7, 0xC25E, 0x64F8, 0xEFD4, 0x64FA, 0xC25C, 0x64FB, 0xC25D, 0x64FC, 0xEFD7, 0x64FD, 0xEFD3, 0x64FE, 0xC25A, 0x64FF, 0xEFD1, + 0x6500, 0xC36B, 0x6501, 0xEFD5, 0x6503, 0xEFD6, 0x6504, 0xEFD2, 0x6506, 0xC25B, 0x6507, 0xF242, 0x6509, 0xF245, 0x650C, 0xF246, + 0x650D, 0xF244, 0x650E, 0xF247, 0x650F, 0xC36C, 0x6510, 0xF243, 0x6513, 0xF44E, 0x6514, 0xC464, 0x6515, 0xF44D, 0x6516, 0xF44C, + 0x6517, 0xF44B, 0x6518, 0xC463, 0x6519, 0xC465, 0x651B, 0xF5CD, 0x651C, 0xC4E2, 0x651D, 0xC4E1, 0x6520, 0xF6E1, 0x6521, 0xF6E0, + 0x6522, 0xF6E3, 0x6523, 0xC5CB, 0x6524, 0xC575, 0x6525, 0xF7DD, 0x6526, 0xF6E2, 0x6529, 0xF7DC, 0x652A, 0xC5CD, 0x652B, 0xC5CC, + 0x652C, 0xC5F3, 0x652D, 0xF8A9, 0x652E, 0xF8EF, 0x652F, 0xA4E4, 0x6532, 0xD972, 0x6533, 0xE9AF, 0x6536, 0xA6AC, 0x6537, 0xCAF7, + 0x6538, 0xA7F1, 0x6539, 0xA7EF, 0x653B, 0xA7F0, 0x653D, 0xCCC1, 0x653E, 0xA9F1, 0x653F, 0xAC46, 0x6541, 0xCEE7, 0x6543, 0xCEE8, + 0x6545, 0xAC47, 0x6546, 0xD1CE, 0x6548, 0xAEC4, 0x6549, 0xAEC5, 0x654A, 0xD1CD, 0x654F, 0xB1D3, 0x6551, 0xB1CF, 0x6553, 0xD5A7, + 0x6554, 0xB1D6, 0x6555, 0xB1D5, 0x6556, 0xB1CE, 0x6557, 0xB1D1, 0x6558, 0xB1D4, 0x6559, 0xB1D0, 0x655C, 0xD976, 0x655D, 0xB1CD, + 0x655E, 0xB4AF, 0x6562, 0xB4B1, 0x6563, 0xB4B2, 0x6564, 0xD975, 0x6565, 0xD978, 0x6566, 0xB4B0, 0x6567, 0xD973, 0x6568, 0xD977, + 0x656A, 0xD974, 0x656C, 0xB771, 0x656F, 0xDDBC, 0x6572, 0xBA56, 0x6573, 0xE1F4, 0x6574, 0xBEE3, 0x6575, 0xBCC4, 0x6576, 0xE5BD, + 0x6577, 0xBCC5, 0x6578, 0xBCC6, 0x6579, 0xE5BF, 0x657A, 0xE5BE, 0x657B, 0xE5C0, 0x657C, 0xE9B1, 0x657F, 0xE9B0, 0x6580, 0xECEF, + 0x6581, 0xECEE, 0x6582, 0xC0C4, 0x6583, 0xC0C5, 0x6584, 0xF248, 0x6587, 0xA4E5, 0x658C, 0xD979, 0x6590, 0xB4B4, 0x6591, 0xB4B3, + 0x6592, 0xDDBD, 0x6594, 0xEFD8, 0x6595, 0xC4E3, 0x6596, 0xF7DE, 0x6597, 0xA4E6, 0x6599, 0xAEC6, 0x659B, 0xB1D8, 0x659C, 0xB1D7, + 0x659D, 0xD97A, 0x659E, 0xD97B, 0x659F, 0xB772, 0x65A0, 0xE1F5, 0x65A1, 0xBA57, 0x65A2, 0xE9B2, 0x65A4, 0xA4E7, 0x65A5, 0xA5B8, + 0x65A7, 0xA9F2, 0x65A8, 0xCCC2, 0x65AA, 0xCEE9, 0x65AB, 0xAC48, 0x65AC, 0xB1D9, 0x65AE, 0xD97C, 0x65AF, 0xB4B5, 0x65B0, 0xB773, + 0x65B2, 0xE5C1, 0x65B3, 0xE5C2, 0x65B6, 0xECF0, 0x65B7, 0xC25F, 0x65B8, 0xF8F0, 0x65B9, 0xA4E8, 0x65BB, 0xCCC3, 0x65BC, 0xA9F3, + 0x65BD, 0xAC49, 0x65BF, 0xCEEA, 0x65C1, 0xAEC7, 0x65C2, 0xD1D2, 0x65C3, 0xD1D0, 0x65C4, 0xD1D1, 0x65C5, 0xAEC8, 0x65C6, 0xD1CF, + 0x65CB, 0xB1DB, 0x65CC, 0xB1DC, 0x65CD, 0xD5A8, 0x65CE, 0xB1DD, 0x65CF, 0xB1DA, 0x65D0, 0xD97D, 0x65D2, 0xD97E, 0x65D3, 0xDDBE, + 0x65D6, 0xBA59, 0x65D7, 0xBA58, 0x65DA, 0xECF1, 0x65DB, 0xEFD9, 0x65DD, 0xF24A, 0x65DE, 0xF249, 0x65DF, 0xF44F, 0x65E1, 0xC95E, + 0x65E2, 0xAC4A, 0x65E5, 0xA4E9, 0x65E6, 0xA5B9, 0x65E8, 0xA6AE, 0x65E9, 0xA6AD, 0x65EC, 0xA6AF, 0x65ED, 0xA6B0, 0x65EE, 0xC9EE, + 0x65EF, 0xC9ED, 0x65F0, 0xCAF8, 0x65F1, 0xA7F2, 0x65F2, 0xCAFB, 0x65F3, 0xCAFA, 0x65F4, 0xCAF9, 0x65F5, 0xCAFC, 0x65FA, 0xA9F4, + 0x65FB, 0xCCC9, 0x65FC, 0xCCC5, 0x65FD, 0xCCCE, 0x6600, 0xA9FB, 0x6602, 0xA9F9, 0x6603, 0xCCCA, 0x6604, 0xCCC6, 0x6605, 0xCCCD, + 0x6606, 0xA9F8, 0x6607, 0xAA40, 0x6608, 0xCCC8, 0x6609, 0xCCC4, 0x660A, 0xA9FE, 0x660B, 0xCCCB, 0x660C, 0xA9F7, 0x660D, 0xCCCC, + 0x660E, 0xA9FA, 0x660F, 0xA9FC, 0x6610, 0xCCD0, 0x6611, 0xCCCF, 0x6612, 0xCCC7, 0x6613, 0xA9F6, 0x6614, 0xA9F5, 0x6615, 0xA9FD, + 0x661C, 0xCEEF, 0x661D, 0xCEF5, 0x661F, 0xAC50, 0x6620, 0xAC4D, 0x6621, 0xCEEC, 0x6622, 0xCEF1, 0x6624, 0xAC53, 0x6625, 0xAC4B, + 0x6626, 0xCEF0, 0x6627, 0xAC4E, 0x6628, 0xAC51, 0x662B, 0xCEF3, 0x662D, 0xAC4C, 0x662E, 0xCEF8, 0x662F, 0xAC4F, 0x6631, 0xAC52, + 0x6632, 0xCEED, 0x6633, 0xCEF2, 0x6634, 0xCEF6, 0x6635, 0xCEEE, 0x6636, 0xCEEB, 0x6639, 0xCEF7, 0x663A, 0xCEF4, 0x6641, 0xAED0, + 0x6642, 0xAEC9, 0x6643, 0xAECC, 0x6645, 0xAECF, 0x6647, 0xD1D5, 0x6649, 0xAECA, 0x664A, 0xD1D3, 0x664C, 0xAECE, 0x664F, 0xAECB, + 0x6651, 0xD1D6, 0x6652, 0xAECD, 0x6659, 0xD5AC, 0x665A, 0xB1DF, 0x665B, 0xD5AB, 0x665C, 0xD5AD, 0x665D, 0xB1DE, 0x665E, 0xB1E3, + 0x665F, 0xD1D4, 0x6661, 0xD5AA, 0x6662, 0xD5AE, 0x6664, 0xB1E0, 0x6665, 0xD5A9, 0x6666, 0xB1E2, 0x6668, 0xB1E1, 0x666A, 0xD9A7, + 0x666C, 0xD9A2, 0x666E, 0xB4B6, 0x666F, 0xB4BA, 0x6670, 0xB4B7, 0x6671, 0xD9A5, 0x6672, 0xD9A8, 0x6674, 0xB4B8, 0x6676, 0xB4B9, + 0x6677, 0xB4BE, 0x6678, 0xDDC7, 0x6679, 0xD9A6, 0x667A, 0xB4BC, 0x667B, 0xD9A3, 0x667C, 0xD9A1, 0x667E, 0xB4BD, 0x6680, 0xD9A4, + 0x6684, 0xB779, 0x6686, 0xDDBF, 0x6687, 0xB776, 0x6688, 0xB777, 0x6689, 0xB775, 0x668A, 0xDDC4, 0x668B, 0xDDC3, 0x668C, 0xDDC0, + 0x668D, 0xB77B, 0x6690, 0xDDC2, 0x6691, 0xB4BB, 0x6694, 0xDDC6, 0x6695, 0xDDC1, 0x6696, 0xB778, 0x6697, 0xB774, 0x6698, 0xB77A, + 0x6699, 0xDDC5, 0x669D, 0xBA5C, 0x669F, 0xE1F8, 0x66A0, 0xE1F7, 0x66A1, 0xE1F6, 0x66A2, 0xBA5A, 0x66A8, 0xBA5B, 0x66A9, 0xE5C5, + 0x66AA, 0xE5C8, 0x66AB, 0xBCC8, 0x66AE, 0xBCC7, 0x66AF, 0xE5C9, 0x66B0, 0xE5C4, 0x66B1, 0xBCCA, 0x66B2, 0xE5C6, 0x66B4, 0xBCC9, + 0x66B5, 0xE5C3, 0x66B7, 0xE5C7, 0x66B8, 0xBEE9, 0x66B9, 0xBEE6, 0x66BA, 0xE9BB, 0x66BB, 0xE9BA, 0x66BD, 0xE9B9, 0x66BE, 0xE9B4, + 0x66C0, 0xE9B5, 0x66C4, 0xBEE7, 0x66C6, 0xBEE4, 0x66C7, 0xBEE8, 0x66C8, 0xE9B3, 0x66C9, 0xBEE5, 0x66CA, 0xE9B6, 0x66CB, 0xE9B7, + 0x66CC, 0xE9BC, 0x66CF, 0xE9B8, 0x66D2, 0xECF2, 0x66D6, 0xC0C7, 0x66D8, 0xEFDC, 0x66D9, 0xC0C6, 0x66DA, 0xEFDA, 0x66DB, 0xEFDB, + 0x66DC, 0xC260, 0x66DD, 0xC36E, 0x66DE, 0xF24B, 0x66E0, 0xC36D, 0x66E3, 0xF451, 0x66E4, 0xF452, 0x66E6, 0xC466, 0x66E8, 0xF450, + 0x66E9, 0xC4E4, 0x66EB, 0xF7DF, 0x66EC, 0xC5CE, 0x66ED, 0xF8AA, 0x66EE, 0xF8AB, 0x66F0, 0xA4EA, 0x66F2, 0xA6B1, 0x66F3, 0xA6B2, + 0x66F4, 0xA7F3, 0x66F6, 0xCCD1, 0x66F7, 0xAC54, 0x66F8, 0xAED1, 0x66F9, 0xB1E4, 0x66FC, 0xB0D2, 0x66FE, 0xB4BF, 0x66FF, 0xB4C0, + 0x6700, 0xB3CC, 0x6701, 0xD9A9, 0x6703, 0xB77C, 0x6704, 0xE1FA, 0x6705, 0xE1F9, 0x6708, 0xA4EB, 0x6709, 0xA6B3, 0x670A, 0xCCD2, + 0x670B, 0xAA42, 0x670D, 0xAA41, 0x670F, 0xCEF9, 0x6710, 0xCEFA, 0x6712, 0xD1D7, 0x6713, 0xD1D8, 0x6714, 0xAED2, 0x6715, 0xAED3, + 0x6717, 0xAED4, 0x6718, 0xD5AF, 0x671B, 0xB1E6, 0x671D, 0xB4C2, 0x671F, 0xB4C1, 0x6720, 0xDDC8, 0x6721, 0xDF7A, 0x6722, 0xE1FB, + 0x6723, 0xE9BD, 0x6726, 0xC261, 0x6727, 0xC467, 0x6728, 0xA4EC, 0x672A, 0xA5BC, 0x672B, 0xA5BD, 0x672C, 0xA5BB, 0x672D, 0xA5BE, + 0x672E, 0xA5BA, 0x6731, 0xA6B6, 0x6733, 0xC9F6, 0x6734, 0xA6B5, 0x6735, 0xA6B7, 0x6738, 0xC9F1, 0x6739, 0xC9F0, 0x673A, 0xC9F3, + 0x673B, 0xC9F2, 0x673C, 0xC9F5, 0x673D, 0xA6B4, 0x673E, 0xC9EF, 0x673F, 0xC9F4, 0x6745, 0xCAFD, 0x6746, 0xA7FD, 0x6747, 0xCAFE, + 0x6748, 0xCB43, 0x6749, 0xA7FC, 0x674B, 0xCB47, 0x674C, 0xCB42, 0x674D, 0xCB45, 0x674E, 0xA7F5, 0x674F, 0xA7F6, 0x6750, 0xA7F7, + 0x6751, 0xA7F8, 0x6753, 0xA840, 0x6755, 0xCB41, 0x6756, 0xA7FA, 0x6757, 0xA841, 0x6759, 0xCB40, 0x675A, 0xCB46, 0x675C, 0xA7F9, + 0x675D, 0xCB44, 0x675E, 0xA7FB, 0x675F, 0xA7F4, 0x6760, 0xA7FE, 0x676A, 0xAA57, 0x676C, 0xCCD4, 0x676D, 0xAA43, 0x676F, 0xAA4D, + 0x6770, 0xAA4E, 0x6771, 0xAA46, 0x6772, 0xAA58, 0x6773, 0xAA48, 0x6774, 0xCCDC, 0x6775, 0xAA53, 0x6776, 0xCCD7, 0x6777, 0xAA49, + 0x6778, 0xCCE6, 0x6779, 0xCCE7, 0x677A, 0xCCDF, 0x677B, 0xCCD8, 0x677C, 0xAA56, 0x677D, 0xCCE4, 0x677E, 0xAA51, 0x677F, 0xAA4F, + 0x6781, 0xCCE5, 0x6783, 0xCCE3, 0x6784, 0xCCDB, 0x6785, 0xCCD3, 0x6786, 0xCCDA, 0x6787, 0xAA4A, 0x6789, 0xAA50, 0x678B, 0xAA44, + 0x678C, 0xCCDE, 0x678D, 0xCCDD, 0x678E, 0xCCD5, 0x6790, 0xAA52, 0x6791, 0xCCE1, 0x6792, 0xCCD6, 0x6793, 0xAA55, 0x6794, 0xCCE8, + 0x6795, 0xAA45, 0x6797, 0xAA4C, 0x6798, 0xCCD9, 0x6799, 0xCCE2, 0x679A, 0xAA54, 0x679C, 0xAA47, 0x679D, 0xAA4B, 0x679F, 0xCCE0, + 0x67AE, 0xCF5B, 0x67AF, 0xAC5C, 0x67B0, 0xAC69, 0x67B2, 0xCF56, 0x67B3, 0xCF4C, 0x67B4, 0xAC62, 0x67B5, 0xCF4A, 0x67B6, 0xAC5B, + 0x67B7, 0xCF45, 0x67B8, 0xAC65, 0x67B9, 0xCF52, 0x67BA, 0xCEFE, 0x67BB, 0xCF41, 0x67C0, 0xCF44, 0x67C1, 0xCEFB, 0x67C2, 0xCF51, + 0x67C3, 0xCF61, 0x67C4, 0xAC60, 0x67C5, 0xCF46, 0x67C6, 0xCF58, 0x67C8, 0xCEFD, 0x67C9, 0xCF5F, 0x67CA, 0xCF60, 0x67CB, 0xCF63, + 0x67CC, 0xCF5A, 0x67CD, 0xCF4B, 0x67CE, 0xCF53, 0x67CF, 0xAC66, 0x67D0, 0xAC59, 0x67D1, 0xAC61, 0x67D2, 0xAC6D, 0x67D3, 0xAC56, + 0x67D4, 0xAC58, 0x67D8, 0xCF43, 0x67D9, 0xAC6A, 0x67DA, 0xAC63, 0x67DB, 0xCF5D, 0x67DC, 0xCF40, 0x67DD, 0xAC6C, 0x67DE, 0xAC67, + 0x67DF, 0xCF49, 0x67E2, 0xAC6B, 0x67E3, 0xCF50, 0x67E4, 0xCF48, 0x67E5, 0xAC64, 0x67E6, 0xCF5C, 0x67E7, 0xCF54, 0x67E9, 0xAC5E, + 0x67EA, 0xCF62, 0x67EB, 0xCF47, 0x67EC, 0xAC5A, 0x67ED, 0xCF59, 0x67EE, 0xCF4F, 0x67EF, 0xAC5F, 0x67F0, 0xCF55, 0x67F1, 0xAC57, + 0x67F2, 0xCEFC, 0x67F3, 0xAC68, 0x67F4, 0xAEE3, 0x67F5, 0xAC5D, 0x67F6, 0xCF4E, 0x67F7, 0xCF4D, 0x67F8, 0xCF42, 0x67FA, 0xCF5E, + 0x67FC, 0xCF57, 0x67FF, 0xAC55, 0x6812, 0xD1EC, 0x6813, 0xAEEA, 0x6814, 0xD1ED, 0x6816, 0xD1E1, 0x6817, 0xAEDF, 0x6818, 0xAEEB, + 0x681A, 0xD1DA, 0x681C, 0xD1E3, 0x681D, 0xD1EB, 0x681F, 0xD1D9, 0x6820, 0xD1F4, 0x6821, 0xAED5, 0x6825, 0xD1F3, 0x6826, 0xD1EE, + 0x6828, 0xD1EF, 0x6829, 0xAEDD, 0x682A, 0xAEE8, 0x682B, 0xD1E5, 0x682D, 0xD1E6, 0x682E, 0xD1F0, 0x682F, 0xD1E7, 0x6831, 0xD1E2, + 0x6832, 0xD1DC, 0x6833, 0xD1DD, 0x6834, 0xD1EA, 0x6835, 0xD1E4, 0x6838, 0xAED6, 0x6839, 0xAEDA, 0x683A, 0xD1F2, 0x683B, 0xD1DE, + 0x683C, 0xAEE6, 0x683D, 0xAEE2, 0x6840, 0xAEE5, 0x6841, 0xAEEC, 0x6842, 0xAEDB, 0x6843, 0xAEE7, 0x6844, 0xD1E9, 0x6845, 0xAEE9, + 0x6846, 0xAED8, 0x6848, 0xAED7, 0x6849, 0xD1DB, 0x684B, 0xD1DF, 0x684C, 0xAEE0, 0x684D, 0xD1F1, 0x684E, 0xD1E8, 0x684F, 0xD1E0, + 0x6850, 0xAEE4, 0x6851, 0xAEE1, 0x6853, 0xAED9, 0x6854, 0xAEDC, 0x686B, 0xD5C4, 0x686D, 0xD5B4, 0x686E, 0xD5B5, 0x686F, 0xD5B9, + 0x6871, 0xD5C8, 0x6872, 0xD5C5, 0x6874, 0xD5BE, 0x6875, 0xD5BD, 0x6876, 0xB1ED, 0x6877, 0xD5C1, 0x6878, 0xD5D0, 0x6879, 0xD5B0, + 0x687B, 0xD5D1, 0x687C, 0xD5C3, 0x687D, 0xD5D5, 0x687E, 0xD5C9, 0x687F, 0xB1EC, 0x6880, 0xD5C7, 0x6881, 0xB1E7, 0x6882, 0xB1FC, + 0x6883, 0xB1F2, 0x6885, 0xB1F6, 0x6886, 0xB1F5, 0x6887, 0xD5B1, 0x6889, 0xD5CE, 0x688A, 0xD5D4, 0x688B, 0xD5CC, 0x688C, 0xD5D3, + 0x688F, 0xD5C0, 0x6890, 0xD5B2, 0x6891, 0xD5D2, 0x6892, 0xD5C2, 0x6893, 0xB1EA, 0x6894, 0xB1F7, 0x6896, 0xD5CB, 0x6897, 0xB1F0, + 0x689B, 0xD5CA, 0x689C, 0xD5B3, 0x689D, 0xB1F8, 0x689F, 0xB1FA, 0x68A0, 0xD5CD, 0x68A1, 0xB1FB, 0x68A2, 0xB1E9, 0x68A3, 0xD5BA, + 0x68A4, 0xD5CF, 0x68A7, 0xB1EF, 0x68A8, 0xB1F9, 0x68A9, 0xD5BC, 0x68AA, 0xD5C6, 0x68AB, 0xD5B7, 0x68AC, 0xD5BB, 0x68AD, 0xB1F4, + 0x68AE, 0xD5B6, 0x68AF, 0xB1E8, 0x68B0, 0xB1F1, 0x68B1, 0xB1EE, 0x68B2, 0xD5BF, 0x68B3, 0xAEDE, 0x68B4, 0xD9C0, 0x68B5, 0xB1EB, + 0x68C4, 0xB1F3, 0x68C6, 0xD9C3, 0x68C7, 0xD9D9, 0x68C8, 0xD9CE, 0x68C9, 0xB4D6, 0x68CB, 0xB4D1, 0x68CC, 0xD9BD, 0x68CD, 0xB4D2, + 0x68CE, 0xD9CD, 0x68D0, 0xD9C6, 0x68D1, 0xD9D3, 0x68D2, 0xB4CE, 0x68D3, 0xD9AB, 0x68D4, 0xD9D5, 0x68D5, 0xB4C4, 0x68D6, 0xD9B3, + 0x68D7, 0xB4C7, 0x68D8, 0xB4C6, 0x68DA, 0xB4D7, 0x68DC, 0xD9AD, 0x68DD, 0xD9CF, 0x68DE, 0xD9D0, 0x68DF, 0xB4C9, 0x68E0, 0xB4C5, + 0x68E1, 0xD9BB, 0x68E3, 0xB4D0, 0x68E4, 0xD9B6, 0x68E6, 0xD9D1, 0x68E7, 0xB4CC, 0x68E8, 0xD9C9, 0x68E9, 0xD9D6, 0x68EA, 0xD9B0, + 0x68EB, 0xD9B5, 0x68EC, 0xD9AF, 0x68EE, 0xB4CB, 0x68EF, 0xD9C2, 0x68F0, 0xDDDE, 0x68F1, 0xD9B1, 0x68F2, 0xB4CF, 0x68F3, 0xD9BA, + 0x68F4, 0xD9D2, 0x68F5, 0xB4CA, 0x68F6, 0xD9B7, 0x68F7, 0xD9B4, 0x68F8, 0xD9C5, 0x68F9, 0xB4CD, 0x68FA, 0xB4C3, 0x68FB, 0xB4D9, + 0x68FC, 0xD9C8, 0x68FD, 0xD9C7, 0x6904, 0xD9AC, 0x6905, 0xB4C8, 0x6906, 0xD9D4, 0x6907, 0xD9BC, 0x6908, 0xD9BE, 0x690A, 0xD9CB, + 0x690B, 0xD9CA, 0x690C, 0xD9AA, 0x690D, 0xB4D3, 0x690E, 0xB4D5, 0x690F, 0xD9B2, 0x6910, 0xD9B9, 0x6911, 0xD9C1, 0x6912, 0xB4D4, + 0x6913, 0xD9B8, 0x6914, 0xD9C4, 0x6915, 0xD9D7, 0x6917, 0xD9CC, 0x6925, 0xD9D8, 0x692A, 0xD9AE, 0x692F, 0xDDF2, 0x6930, 0xB7A6, + 0x6932, 0xDDF0, 0x6933, 0xDDDB, 0x6934, 0xDDE0, 0x6935, 0xDDD9, 0x6937, 0xDDEC, 0x6938, 0xDDCB, 0x6939, 0xDDD2, 0x693B, 0xDDEA, + 0x693C, 0xDDF4, 0x693D, 0xDDDC, 0x693F, 0xDDCF, 0x6940, 0xDDE2, 0x6941, 0xDDE7, 0x6942, 0xDDD3, 0x6944, 0xDDE4, 0x6945, 0xDDD0, + 0x6948, 0xDDD7, 0x6949, 0xDDD8, 0x694A, 0xB7A8, 0x694B, 0xDDEB, 0x694C, 0xDDE9, 0x694E, 0xDDCC, 0x694F, 0xDDEE, 0x6951, 0xDDEF, + 0x6952, 0xDDF1, 0x6953, 0xB7AC, 0x6954, 0xB7A4, 0x6956, 0xD5B8, 0x6957, 0xDDD4, 0x6958, 0xDDE6, 0x6959, 0xDDD5, 0x695A, 0xB7A1, + 0x695B, 0xB7B1, 0x695C, 0xDDED, 0x695D, 0xB7AF, 0x695E, 0xB7AB, 0x695F, 0xDDCA, 0x6960, 0xB7A3, 0x6962, 0xDDCD, 0x6963, 0xB7B0, + 0x6965, 0xDDDD, 0x6966, 0xDDC9, 0x6968, 0xB7A9, 0x6969, 0xDDE1, 0x696A, 0xDDD1, 0x696B, 0xB7AA, 0x696C, 0xDDDA, 0x696D, 0xB77E, + 0x696E, 0xB4D8, 0x696F, 0xDDE3, 0x6970, 0xD9BF, 0x6971, 0xDDCE, 0x6974, 0xDDE8, 0x6975, 0xB7A5, 0x6976, 0xDDE5, 0x6977, 0xB7A2, + 0x6978, 0xDDDF, 0x6979, 0xB7AD, 0x697A, 0xDDD6, 0x697B, 0xDDF3, 0x6982, 0xB7A7, 0x6983, 0xDEC6, 0x6986, 0xB7AE, 0x698D, 0xE24A, + 0x698E, 0xE248, 0x6990, 0xE25E, 0x6991, 0xE246, 0x6993, 0xE258, 0x6994, 0xB77D, 0x6995, 0xBA5F, 0x6996, 0xE242, 0x6997, 0xE25D, + 0x6999, 0xE247, 0x699A, 0xE255, 0x699B, 0xBA64, 0x699C, 0xBA5D, 0x699E, 0xE25B, 0x69A0, 0xE240, 0x69A1, 0xE25A, 0x69A3, 0xBA6F, + 0x69A4, 0xE251, 0x69A5, 0xE261, 0x69A6, 0xBA6D, 0x69A7, 0xE249, 0x69A8, 0xBA5E, 0x69A9, 0xE24B, 0x69AA, 0xE259, 0x69AB, 0xBA67, + 0x69AC, 0xE244, 0x69AD, 0xBA6B, 0x69AE, 0xBA61, 0x69AF, 0xE24D, 0x69B0, 0xE243, 0x69B1, 0xE1FC, 0x69B3, 0xE257, 0x69B4, 0xBA68, + 0x69B5, 0xE260, 0x69B6, 0xE1FD, 0x69B7, 0xBA65, 0x69B9, 0xE253, 0x69BB, 0xBA66, 0x69BC, 0xE245, 0x69BD, 0xE250, 0x69BE, 0xE24C, + 0x69BF, 0xE24E, 0x69C1, 0xBA60, 0x69C2, 0xE25F, 0x69C3, 0xBA6E, 0x69C4, 0xE24F, 0x69C6, 0xE262, 0x69C9, 0xE1FE, 0x69CA, 0xE254, + 0x69CB, 0xBA63, 0x69CC, 0xBA6C, 0x69CD, 0xBA6A, 0x69CE, 0xE241, 0x69CF, 0xE256, 0x69D0, 0xBA69, 0x69D3, 0xBA62, 0x69D4, 0xE252, + 0x69D9, 0xE25C, 0x69E2, 0xE5D5, 0x69E4, 0xE5D1, 0x69E5, 0xE5CD, 0x69E6, 0xE5E1, 0x69E7, 0xE5DE, 0x69E8, 0xBCCD, 0x69EB, 0xE5E5, + 0x69EC, 0xE5D4, 0x69ED, 0xBCD8, 0x69EE, 0xE5DB, 0x69F1, 0xE5D0, 0x69F2, 0xE5DA, 0x69F3, 0xBCD5, 0x69F4, 0xE5EE, 0x69F6, 0xE5EB, + 0x69F7, 0xE5DD, 0x69F8, 0xE5CE, 0x69FB, 0xE5E2, 0x69FC, 0xE5E4, 0x69FD, 0xBCD1, 0x69FE, 0xE5D8, 0x69FF, 0xE5D3, 0x6A00, 0xE5CA, + 0x6A01, 0xBCCE, 0x6A02, 0xBCD6, 0x6A04, 0xE5E7, 0x6A05, 0xBCD7, 0x6A06, 0xE5CB, 0x6A07, 0xE5ED, 0x6A08, 0xE5E0, 0x6A09, 0xE5E6, + 0x6A0A, 0xBCD4, 0x6A0D, 0xE5E3, 0x6A0F, 0xE5EA, 0x6A11, 0xBCD9, 0x6A13, 0xBCD3, 0x6A14, 0xE5DC, 0x6A15, 0xE5CF, 0x6A16, 0xE5EF, + 0x6A17, 0xE5CC, 0x6A18, 0xE5E8, 0x6A19, 0xBCD0, 0x6A1B, 0xE5D6, 0x6A1D, 0xE5D7, 0x6A1E, 0xBCCF, 0x6A1F, 0xBCCC, 0x6A20, 0xE5D2, + 0x6A21, 0xBCD2, 0x6A23, 0xBCCB, 0x6A25, 0xE5E9, 0x6A26, 0xE5EC, 0x6A27, 0xE5D9, 0x6A28, 0xE9CA, 0x6A32, 0xE9C2, 0x6A34, 0xE9BE, + 0x6A35, 0xBEF6, 0x6A38, 0xBEEB, 0x6A39, 0xBEF0, 0x6A3A, 0xBEEC, 0x6A3B, 0xE9CC, 0x6A3C, 0xE9D7, 0x6A3D, 0xBEEA, 0x6A3E, 0xE9C4, + 0x6A3F, 0xE9CD, 0x6A40, 0xE5DF, 0x6A41, 0xE9CE, 0x6A44, 0xBEF1, 0x6A46, 0xE9DD, 0x6A47, 0xBEF5, 0x6A48, 0xBEF8, 0x6A49, 0xE9C0, + 0x6A4B, 0xBEF4, 0x6A4D, 0xE9DB, 0x6A4E, 0xE9DC, 0x6A4F, 0xE9D2, 0x6A50, 0xE9D1, 0x6A51, 0xE9C9, 0x6A54, 0xE9D3, 0x6A55, 0xE9DA, + 0x6A56, 0xE9D9, 0x6A58, 0xBEEF, 0x6A59, 0xBEED, 0x6A5A, 0xE9CB, 0x6A5B, 0xE9C8, 0x6A5D, 0xE9C5, 0x6A5E, 0xE9D8, 0x6A5F, 0xBEF7, + 0x6A60, 0xE9D6, 0x6A61, 0xBEF3, 0x6A62, 0xBEF2, 0x6A64, 0xE9D0, 0x6A66, 0xE9BF, 0x6A67, 0xE9C1, 0x6A68, 0xE9C3, 0x6A69, 0xE9D5, + 0x6A6A, 0xE9CF, 0x6A6B, 0xBEEE, 0x6A6D, 0xE9C6, 0x6A6F, 0xE9D4, 0x6A76, 0xE9C7, 0x6A7E, 0xC0CF, 0x6A7F, 0xED45, 0x6A80, 0xC0C8, + 0x6A81, 0xECF5, 0x6A83, 0xED41, 0x6A84, 0xC0CA, 0x6A85, 0xED48, 0x6A87, 0xECFC, 0x6A89, 0xECF7, 0x6A8C, 0xED49, 0x6A8D, 0xECF3, + 0x6A8E, 0xECFE, 0x6A90, 0xC0D1, 0x6A91, 0xED44, 0x6A92, 0xED4A, 0x6A93, 0xECFD, 0x6A94, 0xC0C9, 0x6A95, 0xED40, 0x6A96, 0xECF4, + 0x6A97, 0xC0D0, 0x6A9A, 0xED47, 0x6A9B, 0xECF9, 0x6A9C, 0xC0CC, 0x6A9E, 0xECFB, 0x6A9F, 0xECF8, 0x6AA0, 0xC0D2, 0x6AA1, 0xECFA, + 0x6AA2, 0xC0CB, 0x6AA3, 0xC0CE, 0x6AA4, 0xED43, 0x6AA5, 0xECF6, 0x6AA6, 0xED46, 0x6AA8, 0xED42, 0x6AAC, 0xC263, 0x6AAD, 0xEFE7, + 0x6AAE, 0xC268, 0x6AAF, 0xC269, 0x6AB3, 0xC262, 0x6AB4, 0xEFE6, 0x6AB6, 0xEFE3, 0x6AB7, 0xEFE4, 0x6AB8, 0xC266, 0x6AB9, 0xEFDE, + 0x6ABA, 0xEFE2, 0x6ABB, 0xC265, 0x6ABD, 0xEFDF, 0x6AC2, 0xC267, 0x6AC3, 0xC264, 0x6AC5, 0xEFDD, 0x6AC6, 0xEFE1, 0x6AC7, 0xEFE5, + 0x6ACB, 0xF251, 0x6ACC, 0xF24E, 0x6ACD, 0xF257, 0x6ACF, 0xF256, 0x6AD0, 0xF254, 0x6AD1, 0xF24F, 0x6AD3, 0xC372, 0x6AD9, 0xF250, + 0x6ADA, 0xC371, 0x6ADB, 0xC0CD, 0x6ADC, 0xF253, 0x6ADD, 0xC370, 0x6ADE, 0xF258, 0x6ADF, 0xF252, 0x6AE0, 0xF24D, 0x6AE1, 0xEFE0, + 0x6AE5, 0xC36F, 0x6AE7, 0xF24C, 0x6AE8, 0xF456, 0x6AEA, 0xF455, 0x6AEB, 0xF255, 0x6AEC, 0xC468, 0x6AEE, 0xF459, 0x6AEF, 0xF45A, + 0x6AF0, 0xF454, 0x6AF1, 0xF458, 0x6AF3, 0xF453, 0x6AF8, 0xF5D1, 0x6AF9, 0xF457, 0x6AFA, 0xC4E7, 0x6AFB, 0xC4E5, 0x6AFC, 0xF5CF, + 0x6B00, 0xF5D2, 0x6B02, 0xF5CE, 0x6B03, 0xF5D0, 0x6B04, 0xC4E6, 0x6B08, 0xF6E5, 0x6B09, 0xF6E6, 0x6B0A, 0xC576, 0x6B0B, 0xF6E4, + 0x6B0F, 0xF7E2, 0x6B10, 0xC5CF, 0x6B11, 0xF7E0, 0x6B12, 0xF7E1, 0x6B13, 0xF8AC, 0x6B16, 0xC656, 0x6B17, 0xF8F3, 0x6B18, 0xF8F1, + 0x6B19, 0xF8F2, 0x6B1A, 0xF8F4, 0x6B1E, 0xF9BB, 0x6B20, 0xA4ED, 0x6B21, 0xA6B8, 0x6B23, 0xAA59, 0x6B25, 0xCCE9, 0x6B28, 0xCF64, + 0x6B2C, 0xD1F5, 0x6B2D, 0xD1F7, 0x6B2F, 0xD1F6, 0x6B31, 0xD1F8, 0x6B32, 0xB1FD, 0x6B33, 0xD5D7, 0x6B34, 0xD1F9, 0x6B36, 0xD5D6, + 0x6B37, 0xD5D8, 0x6B38, 0xD5D9, 0x6B39, 0xD9DA, 0x6B3A, 0xB4DB, 0x6B3B, 0xD9DB, 0x6B3C, 0xD9DD, 0x6B3D, 0xB4DC, 0x6B3E, 0xB4DA, + 0x6B3F, 0xD9DC, 0x6B41, 0xDDFA, 0x6B42, 0xDDF8, 0x6B43, 0xDDF7, 0x6B45, 0xDDF6, 0x6B46, 0xDDF5, 0x6B47, 0xB7B2, 0x6B48, 0xDDF9, + 0x6B49, 0xBA70, 0x6B4A, 0xE263, 0x6B4B, 0xE265, 0x6B4C, 0xBA71, 0x6B4D, 0xE264, 0x6B4E, 0xBCDB, 0x6B50, 0xBCDA, 0x6B51, 0xE5F0, + 0x6B54, 0xE9DF, 0x6B55, 0xE9DE, 0x6B56, 0xE9E0, 0x6B59, 0xBEF9, 0x6B5B, 0xED4B, 0x6B5C, 0xC0D3, 0x6B5E, 0xEFE8, 0x6B5F, 0xC26A, + 0x6B60, 0xF259, 0x6B61, 0xC577, 0x6B62, 0xA4EE, 0x6B63, 0xA5BF, 0x6B64, 0xA6B9, 0x6B65, 0xA842, 0x6B66, 0xAA5A, 0x6B67, 0xAA5B, + 0x6B6A, 0xAC6E, 0x6B6D, 0xD1FA, 0x6B72, 0xB7B3, 0x6B76, 0xE6D1, 0x6B77, 0xBEFA, 0x6B78, 0xC26B, 0x6B79, 0xA4EF, 0x6B7B, 0xA6BA, + 0x6B7E, 0xCCEB, 0x6B7F, 0xAA5C, 0x6B80, 0xCCEA, 0x6B82, 0xCF65, 0x6B83, 0xAC6F, 0x6B84, 0xCF66, 0x6B86, 0xAC70, 0x6B88, 0xD1FC, + 0x6B89, 0xAEEE, 0x6B8A, 0xAEED, 0x6B8C, 0xD5DE, 0x6B8D, 0xD5DC, 0x6B8E, 0xD5DD, 0x6B8F, 0xD5DB, 0x6B91, 0xD5DA, 0x6B94, 0xD9DE, + 0x6B95, 0xD9E1, 0x6B96, 0xB4DE, 0x6B97, 0xD9DF, 0x6B98, 0xB4DD, 0x6B99, 0xD9E0, 0x6B9B, 0xDDFB, 0x6B9E, 0xE266, 0x6B9F, 0xE267, + 0x6BA0, 0xE268, 0x6BA2, 0xE5F3, 0x6BA3, 0xE5F2, 0x6BA4, 0xBCDC, 0x6BA5, 0xE5F1, 0x6BA6, 0xE5F4, 0x6BA7, 0xE9E1, 0x6BAA, 0xE9E2, + 0x6BAB, 0xE9E3, 0x6BAD, 0xED4C, 0x6BAE, 0xC0D4, 0x6BAF, 0xC26C, 0x6BB0, 0xF25A, 0x6BB2, 0xC4E8, 0x6BB3, 0xC95F, 0x6BB5, 0xAC71, + 0x6BB6, 0xCF67, 0x6BB7, 0xAEEF, 0x6BBA, 0xB1FE, 0x6BBC, 0xB4DF, 0x6BBD, 0xD9E2, 0x6BBF, 0xB7B5, 0x6BC0, 0xB7B4, 0x6BC3, 0xE269, + 0x6BC4, 0xE26A, 0x6BC5, 0xBCDD, 0x6BC6, 0xBCDE, 0x6BC7, 0xE9E5, 0x6BC8, 0xE9E4, 0x6BC9, 0xEFE9, 0x6BCA, 0xF7E3, 0x6BCB, 0xA4F0, + 0x6BCC, 0xC960, 0x6BCD, 0xA5C0, 0x6BCF, 0xA843, 0x6BD0, 0xCB48, 0x6BD2, 0xAC72, 0x6BD3, 0xB7B6, 0x6BD4, 0xA4F1, 0x6BD6, 0xCF68, + 0x6BD7, 0xAC73, 0x6BD8, 0xCF69, 0x6BDA, 0xC0D5, 0x6BDB, 0xA4F2, 0x6BDE, 0xCCEC, 0x6BE0, 0xCF6A, 0x6BE2, 0xD242, 0x6BE3, 0xD241, + 0x6BE4, 0xD1FE, 0x6BE6, 0xD1FD, 0x6BE7, 0xD243, 0x6BE8, 0xD240, 0x6BEB, 0xB240, 0x6BEC, 0xB241, 0x6BEF, 0xB4E0, 0x6BF0, 0xD9E3, + 0x6BF2, 0xD9E4, 0x6BF3, 0xD9E5, 0x6BF7, 0xDE41, 0x6BF8, 0xDE42, 0x6BF9, 0xDE40, 0x6BFB, 0xDDFD, 0x6BFC, 0xDDFE, 0x6BFD, 0xB7B7, + 0x6BFE, 0xE26B, 0x6BFF, 0xE5F7, 0x6C00, 0xE5F6, 0x6C01, 0xE5F5, 0x6C02, 0xE5F8, 0x6C03, 0xE9E7, 0x6C04, 0xE9E6, 0x6C05, 0xBEFB, + 0x6C06, 0xE9E8, 0x6C08, 0xC0D6, 0x6C09, 0xED4D, 0x6C0B, 0xEFEA, 0x6C0C, 0xF25B, 0x6C0D, 0xF6E7, 0x6C0F, 0xA4F3, 0x6C10, 0xA5C2, + 0x6C11, 0xA5C1, 0x6C13, 0xAA5D, 0x6C14, 0xC961, 0x6C15, 0xC97E, 0x6C16, 0xA6BB, 0x6C18, 0xC9F7, 0x6C19, 0xCB49, 0x6C1A, 0xCB4A, + 0x6C1B, 0xAA5E, 0x6C1D, 0xCCED, 0x6C1F, 0xAC74, 0x6C20, 0xCF6B, 0x6C21, 0xCF6C, 0x6C23, 0xAEF0, 0x6C24, 0xAEF4, 0x6C25, 0xD244, + 0x6C26, 0xAEF3, 0x6C27, 0xAEF1, 0x6C28, 0xAEF2, 0x6C2A, 0xD5DF, 0x6C2B, 0xB242, 0x6C2C, 0xB4E3, 0x6C2E, 0xB4E1, 0x6C2F, 0xB4E2, + 0x6C30, 0xD9E6, 0x6C33, 0xBA72, 0x6C34, 0xA4F4, 0x6C36, 0xC9A1, 0x6C38, 0xA5C3, 0x6C3B, 0xC9A4, 0x6C3E, 0xA5C6, 0x6C3F, 0xC9A3, + 0x6C40, 0xA5C5, 0x6C41, 0xA5C4, 0x6C42, 0xA844, 0x6C43, 0xC9A2, 0x6C46, 0xC9F8, 0x6C4A, 0xC9FC, 0x6C4B, 0xC9FE, 0x6C4C, 0xCA40, + 0x6C4D, 0xA6C5, 0x6C4E, 0xA6C6, 0x6C4F, 0xC9FB, 0x6C50, 0xA6C1, 0x6C52, 0xC9F9, 0x6C54, 0xC9FD, 0x6C55, 0xA6C2, 0x6C57, 0xA6BD, + 0x6C59, 0xA6BE, 0x6C5B, 0xA6C4, 0x6C5C, 0xC9FA, 0x6C5D, 0xA6BC, 0x6C5E, 0xA845, 0x6C5F, 0xA6BF, 0x6C60, 0xA6C0, 0x6C61, 0xA6C3, + 0x6C65, 0xCB5B, 0x6C66, 0xCB59, 0x6C67, 0xCB4C, 0x6C68, 0xA851, 0x6C69, 0xCB53, 0x6C6A, 0xA84C, 0x6C6B, 0xCB4D, 0x6C6D, 0xCB55, + 0x6C6F, 0xCB52, 0x6C70, 0xA84F, 0x6C71, 0xCB51, 0x6C72, 0xA856, 0x6C73, 0xCB5A, 0x6C74, 0xA858, 0x6C76, 0xA85A, 0x6C78, 0xCB4B, + 0x6C7A, 0xA84D, 0x6C7B, 0xCB5C, 0x6C7D, 0xA854, 0x6C7E, 0xA857, 0x6C80, 0xCD45, 0x6C81, 0xA847, 0x6C82, 0xA85E, 0x6C83, 0xA855, + 0x6C84, 0xCB4E, 0x6C85, 0xA84A, 0x6C86, 0xA859, 0x6C87, 0xCB56, 0x6C88, 0xA848, 0x6C89, 0xA849, 0x6C8A, 0xCD43, 0x6C8B, 0xCB4F, + 0x6C8C, 0xA850, 0x6C8D, 0xA85B, 0x6C8E, 0xCB5D, 0x6C8F, 0xCB50, 0x6C90, 0xA84E, 0x6C92, 0xA853, 0x6C93, 0xCCEE, 0x6C94, 0xA85C, + 0x6C95, 0xCB57, 0x6C96, 0xA852, 0x6C98, 0xA85D, 0x6C99, 0xA846, 0x6C9A, 0xCB54, 0x6C9B, 0xA84B, 0x6C9C, 0xCB58, 0x6C9D, 0xCD44, + 0x6CAB, 0xAA6A, 0x6CAC, 0xAA7A, 0x6CAD, 0xCCF5, 0x6CAE, 0xAA71, 0x6CB0, 0xCD4B, 0x6CB1, 0xAA62, 0x6CB3, 0xAA65, 0x6CB4, 0xCD42, + 0x6CB6, 0xCCF3, 0x6CB7, 0xCCF7, 0x6CB8, 0xAA6D, 0x6CB9, 0xAA6F, 0x6CBA, 0xCCFA, 0x6CBB, 0xAA76, 0x6CBC, 0xAA68, 0x6CBD, 0xAA66, + 0x6CBE, 0xAA67, 0x6CBF, 0xAA75, 0x6CC0, 0xCD47, 0x6CC1, 0xAA70, 0x6CC2, 0xCCF9, 0x6CC3, 0xCCFB, 0x6CC4, 0xAA6E, 0x6CC5, 0xAA73, + 0x6CC6, 0xCCFC, 0x6CC7, 0xCD4A, 0x6CC9, 0xAC75, 0x6CCA, 0xAA79, 0x6CCC, 0xAA63, 0x6CCD, 0xCD49, 0x6CCF, 0xCD4D, 0x6CD0, 0xCCF8, + 0x6CD1, 0xCD4F, 0x6CD2, 0xCD40, 0x6CD3, 0xAA6C, 0x6CD4, 0xCCF4, 0x6CD5, 0xAA6B, 0x6CD6, 0xAA7D, 0x6CD7, 0xAA72, 0x6CD9, 0xCCF2, + 0x6CDA, 0xCF75, 0x6CDB, 0xAA78, 0x6CDC, 0xAA7C, 0x6CDD, 0xCD41, 0x6CDE, 0xCD46, 0x6CE0, 0xAA7E, 0x6CE1, 0xAA77, 0x6CE2, 0xAA69, + 0x6CE3, 0xAA5F, 0x6CE5, 0xAA64, 0x6CE7, 0xCCF6, 0x6CE8, 0xAA60, 0x6CE9, 0xCD4E, 0x6CEB, 0xCCF0, 0x6CEC, 0xCCEF, 0x6CED, 0xCCFD, + 0x6CEE, 0xCCF1, 0x6CEF, 0xAA7B, 0x6CF0, 0xAEF5, 0x6CF1, 0xAA74, 0x6CF2, 0xCCFE, 0x6CF3, 0xAA61, 0x6CF5, 0xACA6, 0x6CF9, 0xCD4C, + 0x6D00, 0xCF7C, 0x6D01, 0xCFA1, 0x6D03, 0xCFA4, 0x6D04, 0xCF77, 0x6D07, 0xCFA7, 0x6D08, 0xCFAA, 0x6D09, 0xCFAC, 0x6D0A, 0xCF74, + 0x6D0B, 0xAC76, 0x6D0C, 0xAC7B, 0x6D0D, 0xD249, 0x6D0E, 0xACAD, 0x6D0F, 0xCFA5, 0x6D10, 0xCFAD, 0x6D11, 0xCF7B, 0x6D12, 0xCF73, + 0x6D16, 0xD264, 0x6D17, 0xAC7E, 0x6D18, 0xCFA2, 0x6D19, 0xCF78, 0x6D1A, 0xCF7A, 0x6D1B, 0xACA5, 0x6D1D, 0xCF7D, 0x6D1E, 0xAC7D, + 0x6D1F, 0xCF70, 0x6D20, 0xCFA8, 0x6D22, 0xCFAB, 0x6D25, 0xAC7A, 0x6D27, 0xACA8, 0x6D28, 0xCF6D, 0x6D29, 0xACAA, 0x6D2A, 0xAC78, + 0x6D2B, 0xACAE, 0x6D2C, 0xCFA9, 0x6D2D, 0xCF6F, 0x6D2E, 0xACAB, 0x6D2F, 0xD25E, 0x6D30, 0xCD48, 0x6D31, 0xAC7C, 0x6D32, 0xAC77, + 0x6D33, 0xCF76, 0x6D34, 0xCF6E, 0x6D35, 0xACAC, 0x6D36, 0xACA4, 0x6D37, 0xCFA3, 0x6D38, 0xACA9, 0x6D39, 0xACA7, 0x6D3A, 0xCF79, + 0x6D3B, 0xACA1, 0x6D3C, 0xCF71, 0x6D3D, 0xACA2, 0x6D3E, 0xACA3, 0x6D3F, 0xCF72, 0x6D40, 0xCFA6, 0x6D41, 0xAC79, 0x6D42, 0xCF7E, + 0x6D58, 0xD24C, 0x6D59, 0xAEFD, 0x6D5A, 0xAF43, 0x6D5E, 0xD255, 0x6D5F, 0xD25B, 0x6D60, 0xD257, 0x6D61, 0xD24A, 0x6D62, 0xD24D, + 0x6D63, 0xD246, 0x6D64, 0xD247, 0x6D65, 0xAF4A, 0x6D66, 0xAEFA, 0x6D67, 0xD256, 0x6D68, 0xD25F, 0x6D69, 0xAF45, 0x6D6A, 0xAEF6, + 0x6D6C, 0xAF40, 0x6D6D, 0xD24E, 0x6D6E, 0xAF42, 0x6D6F, 0xD24F, 0x6D70, 0xD259, 0x6D74, 0xAF44, 0x6D75, 0xD268, 0x6D76, 0xD248, + 0x6D77, 0xAEFC, 0x6D78, 0xAEFB, 0x6D79, 0xAF48, 0x6D7A, 0xD245, 0x6D7B, 0xD266, 0x6D7C, 0xD25A, 0x6D7D, 0xD267, 0x6D7E, 0xD261, + 0x6D7F, 0xD253, 0x6D80, 0xD262, 0x6D82, 0xD25C, 0x6D83, 0xD265, 0x6D84, 0xD263, 0x6D85, 0xAF49, 0x6D86, 0xD254, 0x6D87, 0xAEF9, + 0x6D88, 0xAEF8, 0x6D89, 0xAF41, 0x6D8A, 0xAF47, 0x6D8B, 0xD260, 0x6D8C, 0xAF46, 0x6D8D, 0xD251, 0x6D8E, 0xB243, 0x6D90, 0xD269, + 0x6D91, 0xD250, 0x6D92, 0xD24B, 0x6D93, 0xAEFE, 0x6D94, 0xAF4B, 0x6D95, 0xAEF7, 0x6D97, 0xD258, 0x6D98, 0xD25D, 0x6DAA, 0xB265, + 0x6DAB, 0xD5E1, 0x6DAC, 0xD5E5, 0x6DAE, 0xB252, 0x6DAF, 0xB250, 0x6DB2, 0xB247, 0x6DB3, 0xD5E3, 0x6DB4, 0xD5E2, 0x6DB5, 0xB25B, + 0x6DB7, 0xD5E8, 0x6DB8, 0xB255, 0x6DBA, 0xD5FA, 0x6DBB, 0xD647, 0x6DBC, 0xB244, 0x6DBD, 0xD5F7, 0x6DBE, 0xD5F0, 0x6DBF, 0xB267, + 0x6DC0, 0xD5E0, 0x6DC2, 0xD5FC, 0x6DC4, 0xB264, 0x6DC5, 0xB258, 0x6DC6, 0xB263, 0x6DC7, 0xB24E, 0x6DC8, 0xD5EC, 0x6DC9, 0xD5FE, + 0x6DCA, 0xD5F6, 0x6DCB, 0xB24F, 0x6DCC, 0xB249, 0x6DCD, 0xD645, 0x6DCF, 0xD5FD, 0x6DD0, 0xD640, 0x6DD1, 0xB251, 0x6DD2, 0xB259, + 0x6DD3, 0xD642, 0x6DD4, 0xD5EA, 0x6DD5, 0xD5FB, 0x6DD6, 0xD5EF, 0x6DD7, 0xD644, 0x6DD8, 0xB25E, 0x6DD9, 0xB246, 0x6DDA, 0xB25C, + 0x6DDB, 0xD5F4, 0x6DDC, 0xD5F2, 0x6DDD, 0xD5F3, 0x6DDE, 0xB253, 0x6DDF, 0xD5EE, 0x6DE0, 0xD5ED, 0x6DE1, 0xB248, 0x6DE2, 0xD5E7, + 0x6DE3, 0xD646, 0x6DE4, 0xB24A, 0x6DE5, 0xD5F1, 0x6DE6, 0xB268, 0x6DE8, 0xB262, 0x6DE9, 0xD5E6, 0x6DEA, 0xB25F, 0x6DEB, 0xB25D, + 0x6DEC, 0xB266, 0x6DED, 0xD5F8, 0x6DEE, 0xB261, 0x6DEF, 0xD252, 0x6DF0, 0xD5F9, 0x6DF1, 0xB260, 0x6DF2, 0xD641, 0x6DF3, 0xB245, + 0x6DF4, 0xD5F5, 0x6DF5, 0xB257, 0x6DF6, 0xD5E9, 0x6DF7, 0xB256, 0x6DF9, 0xB254, 0x6DFA, 0xB24C, 0x6DFB, 0xB24B, 0x6DFC, 0xD9E7, + 0x6DFD, 0xD643, 0x6E00, 0xD5EB, 0x6E03, 0xD9FC, 0x6E05, 0xB24D, 0x6E19, 0xB541, 0x6E1A, 0xB25A, 0x6E1B, 0xB4EE, 0x6E1C, 0xD9F6, + 0x6E1D, 0xB4FC, 0x6E1F, 0xD9EA, 0x6E20, 0xB4EB, 0x6E21, 0xB4E7, 0x6E22, 0xDA49, 0x6E23, 0xB4ED, 0x6E24, 0xB4F1, 0x6E25, 0xB4EC, + 0x6E26, 0xB4F5, 0x6E27, 0xDA4D, 0x6E28, 0xDA44, 0x6E2B, 0xD9F1, 0x6E2C, 0xB4FA, 0x6E2D, 0xB4F4, 0x6E2E, 0xD9FD, 0x6E2F, 0xB4E4, + 0x6E30, 0xDA4A, 0x6E31, 0xDA43, 0x6E32, 0xB4E8, 0x6E33, 0xD9F7, 0x6E34, 0xB4F7, 0x6E35, 0xDA55, 0x6E36, 0xDA56, 0x6E38, 0xB4E5, + 0x6E39, 0xDA48, 0x6E3A, 0xB4F9, 0x6E3B, 0xD9FB, 0x6E3C, 0xD9ED, 0x6E3D, 0xD9EE, 0x6E3E, 0xB4FD, 0x6E3F, 0xD9F2, 0x6E40, 0xD9F9, + 0x6E41, 0xD9F3, 0x6E43, 0xB4FB, 0x6E44, 0xB544, 0x6E45, 0xD9EF, 0x6E46, 0xD9E8, 0x6E47, 0xD9E9, 0x6E49, 0xD9EB, 0x6E4A, 0xB4EA, + 0x6E4B, 0xD9F8, 0x6E4D, 0xB4F8, 0x6E4E, 0xB542, 0x6E51, 0xD9FA, 0x6E52, 0xDA53, 0x6E53, 0xDA4B, 0x6E54, 0xB4E6, 0x6E55, 0xDA51, + 0x6E56, 0xB4F2, 0x6E58, 0xB4F0, 0x6E5A, 0xDA57, 0x6E5B, 0xB4EF, 0x6E5C, 0xDA41, 0x6E5D, 0xD9F4, 0x6E5E, 0xD9FE, 0x6E5F, 0xB547, + 0x6E60, 0xDA45, 0x6E61, 0xDA42, 0x6E62, 0xD9F0, 0x6E63, 0xB543, 0x6E64, 0xDA4F, 0x6E65, 0xDA4C, 0x6E66, 0xDA54, 0x6E67, 0xB4E9, + 0x6E68, 0xDA40, 0x6E69, 0xB546, 0x6E6B, 0xDA47, 0x6E6E, 0xB4F3, 0x6E6F, 0xB4F6, 0x6E71, 0xDA46, 0x6E72, 0xB545, 0x6E73, 0xD9F5, + 0x6E74, 0xD5E4, 0x6E77, 0xDA50, 0x6E78, 0xDA4E, 0x6E79, 0xDA52, 0x6E88, 0xD9EC, 0x6E89, 0xB540, 0x6E8D, 0xDE61, 0x6E8E, 0xDE60, + 0x6E8F, 0xDE46, 0x6E90, 0xB7BD, 0x6E92, 0xDE5F, 0x6E93, 0xDE49, 0x6E94, 0xDE4A, 0x6E96, 0xB7C7, 0x6E97, 0xDE68, 0x6E98, 0xB7C2, + 0x6E99, 0xDE5E, 0x6E9B, 0xDE43, 0x6E9C, 0xB7C8, 0x6E9D, 0xB7BE, 0x6E9E, 0xDE52, 0x6E9F, 0xDE48, 0x6EA0, 0xDE4B, 0x6EA1, 0xDE63, + 0x6EA2, 0xB7B8, 0x6EA3, 0xDE6A, 0x6EA4, 0xDE62, 0x6EA5, 0xB7C1, 0x6EA6, 0xDE57, 0x6EA7, 0xB7CC, 0x6EAA, 0xB7CB, 0x6EAB, 0xB7C5, + 0x6EAE, 0xDE69, 0x6EAF, 0xB7B9, 0x6EB0, 0xDE55, 0x6EB1, 0xDE4C, 0x6EB2, 0xDE59, 0x6EB3, 0xDE65, 0x6EB4, 0xB7CD, 0x6EB6, 0xB7BB, + 0x6EB7, 0xDE54, 0x6EB9, 0xDE4D, 0x6EBA, 0xB7C4, 0x6EBC, 0xB7C3, 0x6EBD, 0xDE50, 0x6EBE, 0xDE5A, 0x6EBF, 0xDE64, 0x6EC0, 0xDE47, + 0x6EC1, 0xDE51, 0x6EC2, 0xB7BC, 0x6EC3, 0xDE5B, 0x6EC4, 0xB7C9, 0x6EC5, 0xB7C0, 0x6EC6, 0xDE4E, 0x6EC7, 0xB7BF, 0x6EC8, 0xDE45, + 0x6EC9, 0xDE53, 0x6ECA, 0xDE67, 0x6ECB, 0xB4FE, 0x6ECC, 0xBAB0, 0x6ECD, 0xDE56, 0x6ECE, 0xE26C, 0x6ECF, 0xDE58, 0x6ED0, 0xDE66, + 0x6ED1, 0xB7C6, 0x6ED2, 0xDE4F, 0x6ED3, 0xB7BA, 0x6ED4, 0xB7CA, 0x6ED5, 0xBCF0, 0x6ED6, 0xDE44, 0x6ED8, 0xDE5D, 0x6EDC, 0xDE5C, + 0x6EEB, 0xE2AA, 0x6EEC, 0xBAAD, 0x6EED, 0xE27D, 0x6EEE, 0xE2A4, 0x6EEF, 0xBAA2, 0x6EF1, 0xE26E, 0x6EF2, 0xBAAF, 0x6EF4, 0xBA77, + 0x6EF5, 0xE26D, 0x6EF6, 0xE2B0, 0x6EF7, 0xBAB1, 0x6EF8, 0xE271, 0x6EF9, 0xE2A3, 0x6EFB, 0xE273, 0x6EFC, 0xE2B3, 0x6EFD, 0xE2AF, + 0x6EFE, 0xBA75, 0x6EFF, 0xBAA1, 0x6F00, 0xE653, 0x6F01, 0xBAAE, 0x6F02, 0xBA7D, 0x6F03, 0xE26F, 0x6F05, 0xE2AE, 0x6F06, 0xBAA3, + 0x6F07, 0xE2AB, 0x6F08, 0xE2B8, 0x6F09, 0xE275, 0x6F0A, 0xE27E, 0x6F0D, 0xE2B6, 0x6F0E, 0xE2AC, 0x6F0F, 0xBA7C, 0x6F12, 0xE27C, + 0x6F13, 0xBA76, 0x6F14, 0xBA74, 0x6F15, 0xBAA8, 0x6F18, 0xE27A, 0x6F19, 0xE277, 0x6F1A, 0xE278, 0x6F1C, 0xE2B2, 0x6F1E, 0xE2B7, + 0x6F1F, 0xE2B5, 0x6F20, 0xBA7A, 0x6F21, 0xE2B9, 0x6F22, 0xBA7E, 0x6F23, 0xBAA7, 0x6F25, 0xE270, 0x6F26, 0xE5FA, 0x6F27, 0xE279, + 0x6F29, 0xBA78, 0x6F2A, 0xBAAC, 0x6F2B, 0xBAA9, 0x6F2C, 0xBA7B, 0x6F2D, 0xE2A5, 0x6F2E, 0xE274, 0x6F2F, 0xBAAA, 0x6F30, 0xE2A7, + 0x6F31, 0xBAA4, 0x6F32, 0xBAA6, 0x6F33, 0xBA73, 0x6F35, 0xE2A9, 0x6F36, 0xE2A1, 0x6F37, 0xE272, 0x6F38, 0xBAA5, 0x6F39, 0xE2B1, + 0x6F3A, 0xE2B4, 0x6F3B, 0xE27B, 0x6F3C, 0xE2A8, 0x6F3E, 0xBA79, 0x6F3F, 0xBCDF, 0x6F40, 0xE2A6, 0x6F41, 0xE5F9, 0x6F43, 0xE2AD, + 0x6F4E, 0xE276, 0x6F4F, 0xE644, 0x6F50, 0xE64E, 0x6F51, 0xBCE2, 0x6F52, 0xE64D, 0x6F53, 0xE659, 0x6F54, 0xBCE4, 0x6F55, 0xE64B, + 0x6F57, 0xE64F, 0x6F58, 0xBCEF, 0x6F5A, 0xE646, 0x6F5B, 0xBCE7, 0x6F5D, 0xE652, 0x6F5E, 0xE9F0, 0x6F5F, 0xBCF3, 0x6F60, 0xBCF2, + 0x6F61, 0xE654, 0x6F62, 0xE643, 0x6F63, 0xE65E, 0x6F64, 0xBCED, 0x6F66, 0xBCE3, 0x6F67, 0xE657, 0x6F69, 0xE65B, 0x6F6A, 0xE660, + 0x6F6B, 0xE655, 0x6F6C, 0xE649, 0x6F6D, 0xBCE6, 0x6F6E, 0xBCE9, 0x6F6F, 0xBCF1, 0x6F70, 0xBCEC, 0x6F72, 0xE64C, 0x6F73, 0xE2A2, + 0x6F76, 0xE648, 0x6F77, 0xE65F, 0x6F78, 0xBCE8, 0x6F7A, 0xBCEB, 0x6F7B, 0xE661, 0x6F7C, 0xBCE0, 0x6F7D, 0xE656, 0x6F7E, 0xE5FB, + 0x6F7F, 0xE65C, 0x6F80, 0xC0DF, 0x6F82, 0xE64A, 0x6F84, 0xBCE1, 0x6F85, 0xE645, 0x6F86, 0xBCE5, 0x6F87, 0xE5FC, 0x6F88, 0xBAAB, + 0x6F89, 0xE641, 0x6F8B, 0xE65A, 0x6F8C, 0xE642, 0x6F8D, 0xE640, 0x6F8E, 0xBCEA, 0x6F90, 0xE658, 0x6F92, 0xE5FE, 0x6F93, 0xE651, + 0x6F94, 0xE650, 0x6F95, 0xE65D, 0x6F96, 0xE647, 0x6F97, 0xBCEE, 0x6F9E, 0xE9F3, 0x6FA0, 0xBF49, 0x6FA1, 0xBEFE, 0x6FA2, 0xEA40, + 0x6FA3, 0xE9EB, 0x6FA4, 0xBF41, 0x6FA5, 0xE9F7, 0x6FA6, 0xBF48, 0x6FA7, 0xBF43, 0x6FA8, 0xE9F5, 0x6FA9, 0xED4F, 0x6FAA, 0xE9FB, + 0x6FAB, 0xEA42, 0x6FAC, 0xE9FA, 0x6FAD, 0xE9E9, 0x6FAE, 0xE9F8, 0x6FAF, 0xEA44, 0x6FB0, 0xEA46, 0x6FB1, 0xBEFD, 0x6FB2, 0xEA45, + 0x6FB3, 0xBF44, 0x6FB4, 0xBF4A, 0x6FB6, 0xBF47, 0x6FB8, 0xE9FE, 0x6FB9, 0xBF46, 0x6FBA, 0xE9F9, 0x6FBC, 0xE9ED, 0x6FBD, 0xE9F2, + 0x6FBF, 0xE9FD, 0x6FC0, 0xBF45, 0x6FC1, 0xBF42, 0x6FC2, 0xBEFC, 0x6FC3, 0xBF40, 0x6FC4, 0xE9F1, 0x6FC6, 0xE5FD, 0x6FC7, 0xE9EC, + 0x6FC8, 0xE9EF, 0x6FC9, 0xEA41, 0x6FCA, 0xE9F4, 0x6FCB, 0xE9EA, 0x6FCC, 0xED4E, 0x6FCD, 0xEA43, 0x6FCE, 0xE9EE, 0x6FCF, 0xE9FC, + 0x6FD4, 0xED51, 0x6FD5, 0xC0E3, 0x6FD8, 0xC0D7, 0x6FDB, 0xC0DB, 0x6FDC, 0xED53, 0x6FDD, 0xED59, 0x6FDE, 0xED57, 0x6FDF, 0xC0D9, + 0x6FE0, 0xC0DA, 0x6FE1, 0xC0E1, 0x6FE2, 0xED5A, 0x6FE3, 0xED52, 0x6FE4, 0xC0DC, 0x6FE6, 0xED56, 0x6FE7, 0xED55, 0x6FE8, 0xED5B, + 0x6FE9, 0xC0E2, 0x6FEB, 0xC0DD, 0x6FEC, 0xC0E0, 0x6FED, 0xED54, 0x6FEE, 0xC0E4, 0x6FEF, 0xC0DE, 0x6FF0, 0xC0E5, 0x6FF1, 0xC0D8, + 0x6FF2, 0xED58, 0x6FF4, 0xED50, 0x6FF7, 0xEFF7, 0x6FFA, 0xC271, 0x6FFB, 0xEFF4, 0x6FFC, 0xEFF6, 0x6FFE, 0xC26F, 0x6FFF, 0xEFF2, + 0x7000, 0xEFF3, 0x7001, 0xEFEE, 0x7004, 0xE9F6, 0x7005, 0xEFEF, 0x7006, 0xC270, 0x7007, 0xEFEB, 0x7009, 0xC26D, 0x700A, 0xEFF8, + 0x700B, 0xC26E, 0x700C, 0xEFEC, 0x700D, 0xEFED, 0x700E, 0xEFF1, 0x700F, 0xC273, 0x7011, 0xC272, 0x7014, 0xEFF0, 0x7015, 0xC378, + 0x7016, 0xF25F, 0x7017, 0xF265, 0x7018, 0xC379, 0x7019, 0xF25C, 0x701A, 0xC376, 0x701B, 0xC373, 0x701C, 0xF267, 0x701D, 0xC377, + 0x701F, 0xC374, 0x7020, 0xF25E, 0x7021, 0xF261, 0x7022, 0xF262, 0x7023, 0xF263, 0x7024, 0xF266, 0x7026, 0xEFF5, 0x7027, 0xF25D, + 0x7028, 0xC375, 0x7029, 0xF264, 0x702A, 0xF268, 0x702B, 0xF260, 0x702F, 0xF45D, 0x7030, 0xC46A, 0x7031, 0xF460, 0x7032, 0xC46B, + 0x7033, 0xF468, 0x7034, 0xF45F, 0x7035, 0xF45C, 0x7037, 0xF45E, 0x7038, 0xF462, 0x7039, 0xF465, 0x703A, 0xF464, 0x703B, 0xF467, + 0x703C, 0xF45B, 0x703E, 0xC469, 0x703F, 0xF463, 0x7040, 0xF466, 0x7041, 0xF469, 0x7042, 0xF461, 0x7043, 0xF5D3, 0x7044, 0xF5D4, + 0x7045, 0xF5D8, 0x7046, 0xF5D9, 0x7048, 0xF5D6, 0x7049, 0xF5D7, 0x704A, 0xF5D5, 0x704C, 0xC4E9, 0x7051, 0xC578, 0x7052, 0xF6EB, + 0x7055, 0xF6E8, 0x7056, 0xF6E9, 0x7057, 0xF6EA, 0x7058, 0xC579, 0x705A, 0xF7E5, 0x705B, 0xF7E4, 0x705D, 0xF8AF, 0x705E, 0xC5F4, + 0x705F, 0xF8AD, 0x7060, 0xF8B0, 0x7061, 0xF8AE, 0x7062, 0xF8F5, 0x7063, 0xC657, 0x7064, 0xC665, 0x7065, 0xF9A3, 0x7066, 0xF96C, + 0x7068, 0xF9A2, 0x7069, 0xF9D0, 0x706A, 0xF9D1, 0x706B, 0xA4F5, 0x7070, 0xA6C7, 0x7071, 0xCA41, 0x7074, 0xCB5E, 0x7076, 0xA85F, + 0x7078, 0xA862, 0x707A, 0xCB5F, 0x707C, 0xA860, 0x707D, 0xA861, 0x7082, 0xCD58, 0x7083, 0xCD5A, 0x7084, 0xCD55, 0x7085, 0xCD52, + 0x7086, 0xCD54, 0x708A, 0xAAA4, 0x708E, 0xAAA2, 0x7091, 0xCD56, 0x7092, 0xAAA3, 0x7093, 0xCD53, 0x7094, 0xCD50, 0x7095, 0xAAA1, + 0x7096, 0xCD57, 0x7098, 0xCD51, 0x7099, 0xAAA5, 0x709A, 0xCD59, 0x709F, 0xCFAF, 0x70A1, 0xCFB3, 0x70A4, 0xACB7, 0x70A9, 0xCFB6, + 0x70AB, 0xACAF, 0x70AC, 0xACB2, 0x70AD, 0xACB4, 0x70AE, 0xACB6, 0x70AF, 0xACB3, 0x70B0, 0xCFB2, 0x70B1, 0xCFB1, 0x70B3, 0xACB1, + 0x70B4, 0xCFB4, 0x70B5, 0xCFB5, 0x70B7, 0xCFAE, 0x70B8, 0xACB5, 0x70BA, 0xACB0, 0x70BE, 0xCFB0, 0x70C5, 0xD277, 0x70C6, 0xD278, + 0x70C7, 0xD279, 0x70C8, 0xAF50, 0x70CA, 0xAF4C, 0x70CB, 0xD26E, 0x70CD, 0xD276, 0x70CE, 0xD27B, 0x70CF, 0xAF51, 0x70D1, 0xD26C, + 0x70D2, 0xD272, 0x70D3, 0xD26B, 0x70D4, 0xD275, 0x70D7, 0xD271, 0x70D8, 0xAF4D, 0x70D9, 0xAF4F, 0x70DA, 0xD27A, 0x70DC, 0xD26A, + 0x70DD, 0xD26D, 0x70DE, 0xD273, 0x70E0, 0xD274, 0x70E1, 0xD27C, 0x70E2, 0xD270, 0x70E4, 0xAF4E, 0x70EF, 0xB26D, 0x70F0, 0xD64E, + 0x70F3, 0xD650, 0x70F4, 0xD64C, 0x70F6, 0xD658, 0x70F7, 0xD64A, 0x70F8, 0xD657, 0x70F9, 0xB269, 0x70FA, 0xD648, 0x70FB, 0xDA5B, + 0x70FC, 0xD652, 0x70FD, 0xB26C, 0x70FF, 0xD653, 0x7100, 0xD656, 0x7102, 0xD65A, 0x7104, 0xD64F, 0x7106, 0xD654, 0x7109, 0xB26A, + 0x710A, 0xB26B, 0x710B, 0xD659, 0x710C, 0xD64D, 0x710D, 0xD649, 0x710E, 0xD65B, 0x7110, 0xD651, 0x7113, 0xD655, 0x7117, 0xD64B, + 0x7119, 0xB548, 0x711A, 0xB549, 0x711B, 0xDA65, 0x711C, 0xB54F, 0x711E, 0xDA59, 0x711F, 0xDA62, 0x7120, 0xDA58, 0x7121, 0xB54C, + 0x7122, 0xDA60, 0x7123, 0xDA5E, 0x7125, 0xDA5F, 0x7126, 0xB54A, 0x7128, 0xDA63, 0x712E, 0xDA5C, 0x712F, 0xDA5A, 0x7130, 0xB54B, + 0x7131, 0xDA5D, 0x7132, 0xDA61, 0x7136, 0xB54D, 0x713A, 0xDA64, 0x7141, 0xDE70, 0x7142, 0xDE77, 0x7143, 0xDE79, 0x7144, 0xDEA1, + 0x7146, 0xB7DA, 0x7147, 0xDE6B, 0x7149, 0xB7D2, 0x714B, 0xDE7A, 0x714C, 0xB7D7, 0x714D, 0xDEA2, 0x714E, 0xB7CE, 0x7150, 0xDE7D, + 0x7152, 0xDE6D, 0x7153, 0xDE7E, 0x7154, 0xDE6C, 0x7156, 0xB7DC, 0x7158, 0xDE78, 0x7159, 0xB7CF, 0x715A, 0xDEA3, 0x715C, 0xB7D4, + 0x715D, 0xDE71, 0x715E, 0xB7D9, 0x715F, 0xDE7C, 0x7160, 0xDE6F, 0x7161, 0xDE76, 0x7162, 0xDE72, 0x7163, 0xDE6E, 0x7164, 0xB7D1, + 0x7165, 0xB7D8, 0x7166, 0xB7D6, 0x7167, 0xB7D3, 0x7168, 0xB7DB, 0x7169, 0xB7D0, 0x716A, 0xDE75, 0x716C, 0xB7D5, 0x716E, 0xB54E, + 0x7170, 0xDE7B, 0x7172, 0xDE73, 0x7178, 0xDE74, 0x717B, 0xE2C1, 0x717D, 0xBAB4, 0x7180, 0xE2BD, 0x7181, 0xE2C3, 0x7182, 0xE2BF, + 0x7184, 0xBAB6, 0x7185, 0xE2BE, 0x7186, 0xE2C2, 0x7187, 0xE2BA, 0x7189, 0xE2BC, 0x718A, 0xBAB5, 0x718F, 0xE2C0, 0x7190, 0xE2BB, + 0x7192, 0xBAB7, 0x7194, 0xBAB2, 0x7197, 0xE2C4, 0x7199, 0xBAB3, 0x719A, 0xE667, 0x719B, 0xE664, 0x719C, 0xE670, 0x719D, 0xE66A, + 0x719E, 0xE66C, 0x719F, 0xBCF4, 0x71A0, 0xE666, 0x71A1, 0xE66E, 0x71A4, 0xE66D, 0x71A5, 0xE66B, 0x71A7, 0xE671, 0x71A8, 0xBCF7, + 0x71A9, 0xE668, 0x71AA, 0xE66F, 0x71AC, 0xBCF5, 0x71AF, 0xE663, 0x71B0, 0xE665, 0x71B1, 0xBCF6, 0x71B2, 0xE662, 0x71B3, 0xE672, + 0x71B5, 0xE669, 0x71B8, 0xEA4A, 0x71B9, 0xBF51, 0x71BC, 0xEA55, 0x71BD, 0xEA53, 0x71BE, 0xBF4B, 0x71BF, 0xEA49, 0x71C0, 0xEA4C, + 0x71C1, 0xEA4D, 0x71C2, 0xEA48, 0x71C3, 0xBF55, 0x71C4, 0xBF56, 0x71C5, 0xEA47, 0x71C6, 0xEA56, 0x71C7, 0xEA51, 0x71C8, 0xBF4F, + 0x71C9, 0xBF4C, 0x71CA, 0xEA50, 0x71CB, 0xEA4E, 0x71CE, 0xBF52, 0x71CF, 0xEA52, 0x71D0, 0xBF4D, 0x71D2, 0xBF4E, 0x71D4, 0xEA4F, + 0x71D5, 0xBF50, 0x71D6, 0xEA4B, 0x71D8, 0xEA54, 0x71D9, 0xBF53, 0x71DA, 0xEA57, 0x71DB, 0xEA58, 0x71DC, 0xBF54, 0x71DF, 0xC0E7, + 0x71E0, 0xC0EE, 0x71E1, 0xED5C, 0x71E2, 0xED62, 0x71E4, 0xED60, 0x71E5, 0xC0EA, 0x71E6, 0xC0E9, 0x71E7, 0xC0E6, 0x71E8, 0xED5E, + 0x71EC, 0xC0EC, 0x71ED, 0xC0EB, 0x71EE, 0xC0E8, 0x71F0, 0xED61, 0x71F1, 0xED5D, 0x71F2, 0xED5F, 0x71F4, 0xC0ED, 0x71F8, 0xC277, + 0x71F9, 0xEFFB, 0x71FB, 0xC274, 0x71FC, 0xC275, 0x71FD, 0xEFFD, 0x71FE, 0xC276, 0x71FF, 0xEFFA, 0x7201, 0xEFF9, 0x7202, 0xF26C, + 0x7203, 0xEFFC, 0x7205, 0xF26D, 0x7206, 0xC37A, 0x7207, 0xF26B, 0x720A, 0xF26A, 0x720C, 0xF269, 0x720D, 0xC37B, 0x7210, 0xC46C, + 0x7213, 0xF46A, 0x7214, 0xF46B, 0x7219, 0xF5DC, 0x721A, 0xF5DB, 0x721B, 0xC4EA, 0x721D, 0xF5DA, 0x721E, 0xF6EC, 0x721F, 0xF6ED, + 0x7222, 0xF7E6, 0x7223, 0xF8B1, 0x7226, 0xF8F6, 0x7227, 0xF9BC, 0x7228, 0xC679, 0x7229, 0xF9C6, 0x722A, 0xA4F6, 0x722C, 0xAAA6, + 0x722D, 0xAAA7, 0x7230, 0xACB8, 0x7235, 0xC0EF, 0x7236, 0xA4F7, 0x7238, 0xAAA8, 0x7239, 0xAF52, 0x723A, 0xB7DD, 0x723B, 0xA4F8, + 0x723D, 0xB26E, 0x723E, 0xBAB8, 0x723F, 0xC962, 0x7241, 0xCFB7, 0x7242, 0xD27D, 0x7244, 0xE2C5, 0x7246, 0xC0F0, 0x7247, 0xA4F9, + 0x7248, 0xAAA9, 0x7249, 0xCFB8, 0x724A, 0xCFB9, 0x724B, 0xDA66, 0x724C, 0xB550, 0x724F, 0xDEA4, 0x7252, 0xB7DE, 0x7253, 0xE2C6, + 0x7256, 0xBCF8, 0x7258, 0xC37C, 0x7259, 0xA4FA, 0x725A, 0xDA67, 0x725B, 0xA4FB, 0x725D, 0xA6C9, 0x725E, 0xCA42, 0x725F, 0xA6C8, + 0x7260, 0xA865, 0x7261, 0xA864, 0x7262, 0xA863, 0x7263, 0xCB60, 0x7267, 0xAAAA, 0x7269, 0xAAAB, 0x726A, 0xCD5B, 0x726C, 0xCFBA, + 0x726E, 0xCFBD, 0x726F, 0xACBA, 0x7270, 0xCFBB, 0x7272, 0xACB9, 0x7273, 0xCFBC, 0x7274, 0xACBB, 0x7276, 0xD2A2, 0x7277, 0xD2A1, + 0x7278, 0xD27E, 0x7279, 0xAF53, 0x727B, 0xD65D, 0x727C, 0xD65E, 0x727D, 0xB26F, 0x727E, 0xD65C, 0x727F, 0xD65F, 0x7280, 0xB552, + 0x7281, 0xB270, 0x7284, 0xB551, 0x7285, 0xDA6B, 0x7286, 0xDA6A, 0x7288, 0xDA68, 0x7289, 0xDA69, 0x728B, 0xDA6C, 0x728C, 0xDEA6, + 0x728D, 0xDEA5, 0x728E, 0xDEA9, 0x7290, 0xDEA8, 0x7291, 0xDEA7, 0x7292, 0xBAB9, 0x7293, 0xE2C9, 0x7295, 0xE2C8, 0x7296, 0xBABA, + 0x7297, 0xE2C7, 0x7298, 0xE673, 0x729A, 0xE674, 0x729B, 0xBCF9, 0x729D, 0xEA59, 0x729E, 0xEA5A, 0x72A1, 0xF272, 0x72A2, 0xC37D, + 0x72A3, 0xF271, 0x72A4, 0xF270, 0x72A5, 0xF26E, 0x72A6, 0xF26F, 0x72A7, 0xC4EB, 0x72A8, 0xF46C, 0x72A9, 0xF6EE, 0x72AA, 0xF8F7, + 0x72AC, 0xA4FC, 0x72AE, 0xC9A5, 0x72AF, 0xA5C7, 0x72B0, 0xC9A6, 0x72B4, 0xCA43, 0x72B5, 0xCA44, 0x72BA, 0xCB66, 0x72BD, 0xCB62, + 0x72BF, 0xCB61, 0x72C0, 0xAAAC, 0x72C1, 0xCB65, 0x72C2, 0xA867, 0x72C3, 0xCB63, 0x72C4, 0xA866, 0x72C5, 0xCB67, 0x72C6, 0xCB64, + 0x72C9, 0xCD5F, 0x72CA, 0xCFBE, 0x72CB, 0xCD5D, 0x72CC, 0xCD64, 0x72CE, 0xAAAD, 0x72D0, 0xAAB0, 0x72D1, 0xCD65, 0x72D2, 0xCD61, + 0x72D4, 0xCD62, 0x72D6, 0xCD5C, 0x72D7, 0xAAAF, 0x72D8, 0xCD5E, 0x72D9, 0xAAAE, 0x72DA, 0xCD63, 0x72DC, 0xCD60, 0x72DF, 0xCFC2, + 0x72E0, 0xACBD, 0x72E1, 0xACBE, 0x72E3, 0xCFC5, 0x72E4, 0xCFBF, 0x72E6, 0xCFC4, 0x72E8, 0xCFC0, 0x72E9, 0xACBC, 0x72EA, 0xCFC3, + 0x72EB, 0xCFC1, 0x72F3, 0xD2A8, 0x72F4, 0xD2A5, 0x72F6, 0xD2A7, 0x72F7, 0xAF58, 0x72F8, 0xAF57, 0x72F9, 0xAF55, 0x72FA, 0xD2A4, + 0x72FB, 0xD2A9, 0x72FC, 0xAF54, 0x72FD, 0xAF56, 0x72FE, 0xD2A6, 0x72FF, 0xD667, 0x7300, 0xD2A3, 0x7301, 0xD2AA, 0x7307, 0xD662, + 0x7308, 0xD666, 0x730A, 0xD665, 0x730B, 0xDA6E, 0x730C, 0xDA79, 0x730F, 0xD668, 0x7311, 0xD663, 0x7312, 0xDA6D, 0x7313, 0xB274, + 0x7316, 0xB273, 0x7317, 0xD661, 0x7318, 0xD664, 0x7319, 0xB275, 0x731B, 0xB272, 0x731C, 0xB271, 0x731D, 0xD660, 0x731E, 0xD669, + 0x7322, 0xDA70, 0x7323, 0xDA77, 0x7325, 0xB554, 0x7326, 0xDA76, 0x7327, 0xDA73, 0x7329, 0xB556, 0x732D, 0xDA75, 0x7330, 0xDA6F, + 0x7331, 0xDA71, 0x7332, 0xDA74, 0x7333, 0xDA72, 0x7334, 0xB555, 0x7335, 0xDA78, 0x7336, 0xB553, 0x7337, 0xB7DF, 0x733A, 0xDEAD, + 0x733B, 0xDEAC, 0x733C, 0xDEAA, 0x733E, 0xB7E2, 0x733F, 0xB7E1, 0x7340, 0xDEAE, 0x7342, 0xDEAB, 0x7343, 0xE2CA, 0x7344, 0xBABB, + 0x7345, 0xB7E0, 0x7349, 0xDEB0, 0x734A, 0xDEAF, 0x734C, 0xE2CD, 0x734D, 0xE2CB, 0x734E, 0xBCFA, 0x7350, 0xBABC, 0x7351, 0xE2CC, + 0x7352, 0xE676, 0x7357, 0xBCFB, 0x7358, 0xE675, 0x7359, 0xE67E, 0x735A, 0xE67D, 0x735B, 0xE67B, 0x735D, 0xE67A, 0x735E, 0xE677, + 0x735F, 0xE678, 0x7360, 0xE679, 0x7361, 0xE67C, 0x7362, 0xE6A1, 0x7365, 0xEA5F, 0x7366, 0xEA5C, 0x7367, 0xEA5D, 0x7368, 0xBF57, + 0x7369, 0xEA5B, 0x736A, 0xEA61, 0x736B, 0xEA60, 0x736C, 0xEA5E, 0x736E, 0xED64, 0x736F, 0xED65, 0x7370, 0xC0F1, 0x7372, 0xC0F2, + 0x7373, 0xED63, 0x7375, 0xC279, 0x7376, 0xEFFE, 0x7377, 0xC278, 0x7378, 0xC37E, 0x737A, 0xC3A1, 0x737B, 0xC46D, 0x737C, 0xF46E, + 0x737D, 0xF46D, 0x737E, 0xF5DD, 0x737F, 0xF6EF, 0x7380, 0xC57A, 0x7381, 0xF7E8, 0x7382, 0xF7E7, 0x7383, 0xF7E9, 0x7384, 0xA5C8, + 0x7385, 0xCFC6, 0x7386, 0xAF59, 0x7387, 0xB276, 0x7388, 0xD66A, 0x7389, 0xA5C9, 0x738A, 0xC9A7, 0x738B, 0xA4FD, 0x738E, 0xCA45, + 0x7392, 0xCB6C, 0x7393, 0xCB6A, 0x7394, 0xCB6B, 0x7395, 0xCB68, 0x7396, 0xA868, 0x7397, 0xCB69, 0x739D, 0xCD6D, 0x739F, 0xAAB3, + 0x73A0, 0xCD6B, 0x73A1, 0xCD67, 0x73A2, 0xCD6A, 0x73A4, 0xCD66, 0x73A5, 0xAAB5, 0x73A6, 0xCD69, 0x73A8, 0xAAB2, 0x73A9, 0xAAB1, + 0x73AB, 0xAAB4, 0x73AC, 0xCD6C, 0x73AD, 0xCD68, 0x73B2, 0xACC2, 0x73B3, 0xACC5, 0x73B4, 0xCFCE, 0x73B5, 0xCFCD, 0x73B6, 0xCFCC, + 0x73B7, 0xACBF, 0x73B8, 0xCFD5, 0x73B9, 0xCFCB, 0x73BB, 0xACC1, 0x73BC, 0xD2AF, 0x73BE, 0xCFD2, 0x73BF, 0xCFD0, 0x73C0, 0xACC4, + 0x73C2, 0xCFC8, 0x73C3, 0xCFD3, 0x73C5, 0xCFCA, 0x73C6, 0xCFD4, 0x73C7, 0xCFD1, 0x73C8, 0xCFC9, 0x73CA, 0xACC0, 0x73CB, 0xCFD6, + 0x73CC, 0xCFC7, 0x73CD, 0xACC3, 0x73D2, 0xD2B4, 0x73D3, 0xD2AB, 0x73D4, 0xD2B6, 0x73D6, 0xD2AE, 0x73D7, 0xD2B9, 0x73D8, 0xD2BA, + 0x73D9, 0xD2AC, 0x73DA, 0xD2B8, 0x73DB, 0xD2B5, 0x73DC, 0xD2B3, 0x73DD, 0xD2B7, 0x73DE, 0xAF5F, 0x73E0, 0xAF5D, 0x73E3, 0xD2B1, + 0x73E5, 0xD2AD, 0x73E7, 0xD2B0, 0x73E8, 0xD2BB, 0x73E9, 0xD2B2, 0x73EA, 0xAF5E, 0x73EB, 0xCFCF, 0x73ED, 0xAF5A, 0x73EE, 0xAF5C, + 0x73F4, 0xD678, 0x73F5, 0xD66D, 0x73F6, 0xD66B, 0x73F8, 0xD66C, 0x73FA, 0xD673, 0x73FC, 0xD674, 0x73FD, 0xD670, 0x73FE, 0xB27B, + 0x73FF, 0xD675, 0x7400, 0xD672, 0x7401, 0xD66F, 0x7403, 0xB279, 0x7404, 0xD66E, 0x7405, 0xB277, 0x7406, 0xB27A, 0x7407, 0xD671, + 0x7408, 0xD679, 0x7409, 0xAF5B, 0x740A, 0xB278, 0x740B, 0xD677, 0x740C, 0xD676, 0x740D, 0xB27C, 0x7416, 0xDA7E, 0x741A, 0xDAA1, + 0x741B, 0xB560, 0x741D, 0xDAA7, 0x7420, 0xDAA9, 0x7421, 0xDAA2, 0x7422, 0xB55A, 0x7423, 0xDAA6, 0x7424, 0xDAA5, 0x7425, 0xB55B, + 0x7426, 0xB561, 0x7428, 0xB562, 0x7429, 0xDAA8, 0x742A, 0xB558, 0x742B, 0xDA7D, 0x742C, 0xDA7B, 0x742D, 0xDAA3, 0x742E, 0xDA7A, + 0x742F, 0xB55F, 0x7430, 0xDA7C, 0x7431, 0xDAA4, 0x7432, 0xDAAA, 0x7433, 0xB559, 0x7434, 0xB55E, 0x7435, 0xB55C, 0x7436, 0xB55D, + 0x743A, 0xB557, 0x743F, 0xB7E9, 0x7440, 0xDEB7, 0x7441, 0xB7E8, 0x7442, 0xDEBB, 0x7444, 0xDEB1, 0x7446, 0xDEBC, 0x744A, 0xDEB2, + 0x744B, 0xDEB3, 0x744D, 0xDEBD, 0x744E, 0xDEBA, 0x744F, 0xDEB8, 0x7450, 0xDEB9, 0x7451, 0xDEB5, 0x7452, 0xDEB4, 0x7454, 0xDEBE, + 0x7455, 0xB7E5, 0x7457, 0xDEB6, 0x7459, 0xB7EA, 0x745A, 0xB7E4, 0x745B, 0xB7EB, 0x745C, 0xB7EC, 0x745E, 0xB7E7, 0x745F, 0xB7E6, + 0x7462, 0xE2CE, 0x7463, 0xBABE, 0x7464, 0xBABD, 0x7467, 0xE2D3, 0x7469, 0xBCFC, 0x746A, 0xBABF, 0x746D, 0xBAC1, 0x746E, 0xE2D4, + 0x746F, 0xB7E3, 0x7470, 0xBAC0, 0x7471, 0xE2D0, 0x7472, 0xE2D2, 0x7473, 0xE2CF, 0x7475, 0xE2D1, 0x7479, 0xE6AB, 0x747C, 0xE6AA, + 0x747D, 0xE6A7, 0x747E, 0xBD40, 0x747F, 0xEA62, 0x7480, 0xBD41, 0x7481, 0xE6A6, 0x7483, 0xBCFE, 0x7485, 0xE6A8, 0x7486, 0xE6A5, + 0x7487, 0xE6A2, 0x7488, 0xE6A9, 0x7489, 0xE6A3, 0x748A, 0xE6A4, 0x748B, 0xBCFD, 0x7490, 0xED69, 0x7492, 0xEA66, 0x7494, 0xEA65, + 0x7495, 0xEA67, 0x7497, 0xED66, 0x7498, 0xBF5A, 0x749A, 0xEA63, 0x749C, 0xBF58, 0x749E, 0xBF5C, 0x749F, 0xBF5B, 0x74A0, 0xEA64, + 0x74A1, 0xEA68, 0x74A3, 0xBF59, 0x74A5, 0xED6D, 0x74A6, 0xC0F5, 0x74A7, 0xC27A, 0x74A8, 0xC0F6, 0x74A9, 0xC0F3, 0x74AA, 0xED6A, + 0x74AB, 0xED68, 0x74AD, 0xED6B, 0x74AF, 0xED6E, 0x74B0, 0xC0F4, 0x74B1, 0xED6C, 0x74B2, 0xED67, 0x74B5, 0xF042, 0x74B6, 0xF045, + 0x74B7, 0xF275, 0x74B8, 0xF040, 0x74BA, 0xF46F, 0x74BB, 0xF046, 0x74BD, 0xC3A2, 0x74BE, 0xF044, 0x74BF, 0xC27B, 0x74C0, 0xF041, + 0x74C1, 0xF043, 0x74C2, 0xF047, 0x74C3, 0xF276, 0x74C5, 0xF274, 0x74CA, 0xC3A3, 0x74CB, 0xF273, 0x74CF, 0xC46E, 0x74D4, 0xC4ED, + 0x74D5, 0xF6F1, 0x74D6, 0xC4EC, 0x74D7, 0xF6F3, 0x74D8, 0xF6F0, 0x74D9, 0xF6F2, 0x74DA, 0xC5D0, 0x74DB, 0xF8B2, 0x74DC, 0xA5CA, + 0x74DD, 0xCD6E, 0x74DE, 0xD2BC, 0x74DF, 0xD2BD, 0x74E0, 0xB27D, 0x74E1, 0xDEBF, 0x74E2, 0xBF5D, 0x74E3, 0xC3A4, 0x74E4, 0xC57B, + 0x74E5, 0xF8B3, 0x74E6, 0xA5CB, 0x74E8, 0xCD6F, 0x74E9, 0xA260, 0x74EC, 0xCFD7, 0x74EE, 0xCFD8, 0x74F4, 0xD2BE, 0x74F5, 0xD2BF, + 0x74F6, 0xB27E, 0x74F7, 0xB2A1, 0x74FB, 0xDAAB, 0x74FD, 0xDEC2, 0x74FE, 0xDEC1, 0x74FF, 0xDEC0, 0x7500, 0xE2D5, 0x7502, 0xE2D6, + 0x7503, 0xE2D7, 0x7504, 0xBAC2, 0x7507, 0xE6AD, 0x7508, 0xE6AC, 0x750B, 0xEA69, 0x750C, 0xBF5E, 0x750D, 0xBF5F, 0x750F, 0xED72, + 0x7510, 0xED6F, 0x7511, 0xED70, 0x7512, 0xED71, 0x7513, 0xF049, 0x7514, 0xF048, 0x7515, 0xC27C, 0x7516, 0xF277, 0x7517, 0xF5DE, + 0x7518, 0xA5CC, 0x751A, 0xACC6, 0x751C, 0xB2A2, 0x751D, 0xDEC3, 0x751F, 0xA5CD, 0x7521, 0xD2C0, 0x7522, 0xB2A3, 0x7525, 0xB563, + 0x7526, 0xB564, 0x7528, 0xA5CE, 0x7529, 0xA5CF, 0x752A, 0xCA46, 0x752B, 0xA86A, 0x752C, 0xA869, 0x752D, 0xACC7, 0x752E, 0xCFD9, + 0x752F, 0xDAAC, 0x7530, 0xA5D0, 0x7531, 0xA5D1, 0x7532, 0xA5D2, 0x7533, 0xA5D3, 0x7537, 0xA86B, 0x7538, 0xA86C, 0x7539, 0xCB6E, + 0x753A, 0xCB6D, 0x753D, 0xAAB6, 0x753E, 0xCD72, 0x753F, 0xCD70, 0x7540, 0xCD71, 0x7547, 0xCFDA, 0x7548, 0xCFDB, 0x754B, 0xACCB, + 0x754C, 0xACC9, 0x754E, 0xACCA, 0x754F, 0xACC8, 0x7554, 0xAF60, 0x7559, 0xAF64, 0x755A, 0xAF63, 0x755B, 0xD2C1, 0x755C, 0xAF62, + 0x755D, 0xAF61, 0x755F, 0xD2C2, 0x7562, 0xB2A6, 0x7563, 0xD67B, 0x7564, 0xD67A, 0x7565, 0xB2A4, 0x7566, 0xB2A5, 0x756A, 0xB566, + 0x756B, 0xB565, 0x756C, 0xDAAE, 0x756F, 0xDAAD, 0x7570, 0xB2A7, 0x7576, 0xB7ED, 0x7577, 0xDEC5, 0x7578, 0xB7EE, 0x7579, 0xDEC4, + 0x757D, 0xE2D8, 0x757E, 0xE6AE, 0x757F, 0xBD42, 0x7580, 0xEA6A, 0x7584, 0xED73, 0x7586, 0xC3A6, 0x7587, 0xC3A5, 0x758A, 0xC57C, + 0x758B, 0xA5D4, 0x758C, 0xCD73, 0x758F, 0xB2A8, 0x7590, 0xE2D9, 0x7591, 0xBAC3, 0x7594, 0xCB6F, 0x7595, 0xCB70, 0x7598, 0xCD74, + 0x7599, 0xAAB8, 0x759A, 0xAAB9, 0x759D, 0xAAB7, 0x75A2, 0xACCF, 0x75A3, 0xACD0, 0x75A4, 0xACCD, 0x75A5, 0xACCE, 0x75A7, 0xCFDC, + 0x75AA, 0xCFDD, 0x75AB, 0xACCC, 0x75B0, 0xD2C3, 0x75B2, 0xAF68, 0x75B3, 0xAF69, 0x75B5, 0xB2AB, 0x75B6, 0xD2C9, 0x75B8, 0xAF6E, + 0x75B9, 0xAF6C, 0x75BA, 0xD2CA, 0x75BB, 0xD2C5, 0x75BC, 0xAF6B, 0x75BD, 0xAF6A, 0x75BE, 0xAF65, 0x75BF, 0xD2C8, 0x75C0, 0xD2C7, + 0x75C1, 0xD2C4, 0x75C2, 0xAF6D, 0x75C4, 0xD2C6, 0x75C5, 0xAF66, 0x75C7, 0xAF67, 0x75CA, 0xB2AC, 0x75CB, 0xD6A1, 0x75CC, 0xD6A2, + 0x75CD, 0xB2AD, 0x75CE, 0xD67C, 0x75CF, 0xD67E, 0x75D0, 0xD6A4, 0x75D1, 0xD6A3, 0x75D2, 0xD67D, 0x75D4, 0xB2A9, 0x75D5, 0xB2AA, + 0x75D7, 0xDAB6, 0x75D8, 0xB56B, 0x75D9, 0xB56A, 0x75DA, 0xDAB0, 0x75DB, 0xB568, 0x75DD, 0xDAB3, 0x75DE, 0xB56C, 0x75DF, 0xDAB4, + 0x75E0, 0xB56D, 0x75E1, 0xDAB1, 0x75E2, 0xB567, 0x75E3, 0xB569, 0x75E4, 0xDAB5, 0x75E6, 0xDAB2, 0x75E7, 0xDAAF, 0x75ED, 0xDED2, + 0x75EF, 0xDEC7, 0x75F0, 0xB7F0, 0x75F1, 0xB7F3, 0x75F2, 0xB7F2, 0x75F3, 0xB7F7, 0x75F4, 0xB7F6, 0x75F5, 0xDED3, 0x75F6, 0xDED1, + 0x75F7, 0xDECA, 0x75F8, 0xDECE, 0x75F9, 0xDECD, 0x75FA, 0xB7F4, 0x75FB, 0xDED0, 0x75FC, 0xDECC, 0x75FD, 0xDED4, 0x75FE, 0xDECB, + 0x75FF, 0xB7F5, 0x7600, 0xB7EF, 0x7601, 0xB7F1, 0x7603, 0xDEC9, 0x7608, 0xE2DB, 0x7609, 0xBAC7, 0x760A, 0xE2DF, 0x760B, 0xBAC6, + 0x760C, 0xE2DC, 0x760D, 0xBAC5, 0x760F, 0xDEC8, 0x7610, 0xDECF, 0x7611, 0xE2DE, 0x7613, 0xBAC8, 0x7614, 0xE2E0, 0x7615, 0xE2DD, + 0x7616, 0xE2DA, 0x7619, 0xE6B1, 0x761A, 0xE6B5, 0x761B, 0xE6B7, 0x761C, 0xE6B3, 0x761D, 0xE6B2, 0x761E, 0xE6B0, 0x761F, 0xBD45, + 0x7620, 0xBD43, 0x7621, 0xBD48, 0x7622, 0xBD49, 0x7623, 0xE6B4, 0x7624, 0xBD46, 0x7625, 0xE6AF, 0x7626, 0xBD47, 0x7627, 0xBAC4, + 0x7628, 0xE6B6, 0x7629, 0xBD44, 0x762D, 0xEA6C, 0x762F, 0xEA6B, 0x7630, 0xEA73, 0x7631, 0xEA6D, 0x7632, 0xEA72, 0x7633, 0xEA6F, + 0x7634, 0xBF60, 0x7635, 0xEA71, 0x7638, 0xBF61, 0x763A, 0xBF62, 0x763C, 0xEA70, 0x763D, 0xEA6E, 0x7642, 0xC0F8, 0x7643, 0xED74, + 0x7646, 0xC0F7, 0x7647, 0xED77, 0x7648, 0xED75, 0x7649, 0xED76, 0x764C, 0xC0F9, 0x7650, 0xF04D, 0x7652, 0xC2A1, 0x7653, 0xF04E, + 0x7656, 0xC27D, 0x7657, 0xF04F, 0x7658, 0xC27E, 0x7659, 0xF04C, 0x765A, 0xF050, 0x765C, 0xF04A, 0x765F, 0xC3A7, 0x7660, 0xF278, + 0x7661, 0xC3A8, 0x7662, 0xC46F, 0x7664, 0xF04B, 0x7665, 0xC470, 0x7669, 0xC4EE, 0x766A, 0xF5DF, 0x766C, 0xC57E, 0x766D, 0xF6F4, + 0x766E, 0xC57D, 0x7670, 0xF7EA, 0x7671, 0xC5F5, 0x7672, 0xC5F6, 0x7675, 0xF9CC, 0x7678, 0xACD1, 0x7679, 0xCFDE, 0x767B, 0xB56E, + 0x767C, 0xB56F, 0x767D, 0xA5D5, 0x767E, 0xA6CA, 0x767F, 0xCA47, 0x7681, 0xCB71, 0x7682, 0xA86D, 0x7684, 0xAABA, 0x7686, 0xACD2, + 0x7687, 0xACD3, 0x7688, 0xACD4, 0x7689, 0xD6A6, 0x768A, 0xD2CB, 0x768B, 0xAF6F, 0x768E, 0xB2AE, 0x768F, 0xD6A5, 0x7692, 0xDAB8, + 0x7693, 0xB571, 0x7695, 0xDAB7, 0x7696, 0xB570, 0x7699, 0xDED5, 0x769A, 0xBD4A, 0x769B, 0xE6BB, 0x769C, 0xE6B8, 0x769D, 0xE6B9, + 0x769E, 0xE6BA, 0x76A4, 0xED78, 0x76A6, 0xF051, 0x76AA, 0xF471, 0x76AB, 0xF470, 0x76AD, 0xF6F5, 0x76AE, 0xA5D6, 0x76AF, 0xCD75, + 0x76B0, 0xAF70, 0x76B4, 0xB572, 0x76B5, 0xDED6, 0x76B8, 0xE2E1, 0x76BA, 0xBD4B, 0x76BB, 0xEA74, 0x76BD, 0xF052, 0x76BE, 0xF472, + 0x76BF, 0xA5D7, 0x76C2, 0xAABB, 0x76C3, 0xACD7, 0x76C4, 0xCFDF, 0x76C5, 0xACD8, 0x76C6, 0xACD6, 0x76C8, 0xACD5, 0x76C9, 0xD2CC, + 0x76CA, 0xAF71, 0x76CD, 0xAF72, 0x76CE, 0xAF73, 0x76D2, 0xB2B0, 0x76D3, 0xD6A7, 0x76D4, 0xB2AF, 0x76DA, 0xDAB9, 0x76DB, 0xB2B1, + 0x76DC, 0xB573, 0x76DD, 0xDED7, 0x76DE, 0xB7F8, 0x76DF, 0xB7F9, 0x76E1, 0xBAC9, 0x76E3, 0xBACA, 0x76E4, 0xBD4C, 0x76E5, 0xBF64, + 0x76E6, 0xEA75, 0x76E7, 0xBF63, 0x76E9, 0xED79, 0x76EA, 0xC0FA, 0x76EC, 0xF053, 0x76ED, 0xF473, 0x76EE, 0xA5D8, 0x76EF, 0xA86E, + 0x76F0, 0xCD78, 0x76F1, 0xCD77, 0x76F2, 0xAABC, 0x76F3, 0xCD76, 0x76F4, 0xAABD, 0x76F5, 0xCD79, 0x76F7, 0xCFE5, 0x76F8, 0xACDB, + 0x76F9, 0xACDA, 0x76FA, 0xCFE7, 0x76FB, 0xCFE6, 0x76FC, 0xACDF, 0x76FE, 0xACDE, 0x7701, 0xACD9, 0x7703, 0xCFE1, 0x7704, 0xCFE2, + 0x7705, 0xCFE3, 0x7707, 0xACE0, 0x7708, 0xCFE0, 0x7709, 0xACDC, 0x770A, 0xCFE4, 0x770B, 0xACDD, 0x7710, 0xD2CF, 0x7711, 0xD2D3, + 0x7712, 0xD2D1, 0x7713, 0xD2D0, 0x7715, 0xD2D4, 0x7719, 0xD2D5, 0x771A, 0xD2D6, 0x771B, 0xD2CE, 0x771D, 0xD2CD, 0x771F, 0xAF75, + 0x7720, 0xAF76, 0x7722, 0xD2D7, 0x7723, 0xD2D2, 0x7725, 0xD6B0, 0x7727, 0xD2D8, 0x7728, 0xAF77, 0x7729, 0xAF74, 0x772D, 0xD6AA, + 0x772F, 0xD6A9, 0x7731, 0xD6AB, 0x7732, 0xD6AC, 0x7733, 0xD6AE, 0x7734, 0xD6AD, 0x7735, 0xD6B2, 0x7736, 0xB2B5, 0x7737, 0xB2B2, + 0x7738, 0xB2B6, 0x7739, 0xD6A8, 0x773A, 0xB2B7, 0x773B, 0xD6B1, 0x773C, 0xB2B4, 0x773D, 0xD6AF, 0x773E, 0xB2B3, 0x7744, 0xDABC, + 0x7745, 0xDABE, 0x7746, 0xDABA, 0x7747, 0xDABB, 0x774A, 0xDABF, 0x774B, 0xDAC1, 0x774C, 0xDAC2, 0x774D, 0xDABD, 0x774E, 0xDAC0, + 0x774F, 0xB574, 0x7752, 0xDEDB, 0x7754, 0xDEE0, 0x7755, 0xDED8, 0x7756, 0xDEDC, 0x7759, 0xDEE1, 0x775A, 0xDEDD, 0x775B, 0xB7FA, + 0x775C, 0xB843, 0x775E, 0xB7FD, 0x775F, 0xDED9, 0x7760, 0xDEDA, 0x7761, 0xBACE, 0x7762, 0xB846, 0x7763, 0xB7FE, 0x7765, 0xB844, + 0x7766, 0xB7FC, 0x7767, 0xDEDF, 0x7768, 0xB845, 0x7769, 0xDEDE, 0x776A, 0xB841, 0x776B, 0xB7FB, 0x776C, 0xB842, 0x776D, 0xDEE2, + 0x776E, 0xE2E6, 0x776F, 0xE2E8, 0x7779, 0xB840, 0x777C, 0xE2E3, 0x777D, 0xBACC, 0x777E, 0xE2E9, 0x777F, 0xBACD, 0x7780, 0xE2E7, + 0x7781, 0xE2E2, 0x7782, 0xE2E5, 0x7783, 0xE2EA, 0x7784, 0xBACB, 0x7785, 0xE2E4, 0x7787, 0xBD4E, 0x7788, 0xE6BF, 0x7789, 0xE6BE, + 0x778B, 0xBD51, 0x778C, 0xBD4F, 0x778D, 0xE6BC, 0x778E, 0xBD4D, 0x778F, 0xE6BD, 0x7791, 0xBD50, 0x7795, 0xEA7D, 0x7797, 0xEAA1, + 0x7799, 0xEA7E, 0x779A, 0xEA76, 0x779B, 0xEA7A, 0x779C, 0xEA79, 0x779D, 0xEA77, 0x779E, 0xBF66, 0x779F, 0xBF67, 0x77A0, 0xBF65, + 0x77A1, 0xEA78, 0x77A2, 0xEA7B, 0x77A3, 0xEA7C, 0x77A5, 0xBF68, 0x77A7, 0xC140, 0x77A8, 0xEDA3, 0x77AA, 0xC0FC, 0x77AB, 0xED7B, + 0x77AC, 0xC0FE, 0x77AD, 0xC141, 0x77B0, 0xC0FD, 0x77B1, 0xEDA2, 0x77B2, 0xED7C, 0x77B3, 0xC0FB, 0x77B4, 0xEDA1, 0x77B5, 0xED7A, + 0x77B6, 0xED7E, 0x77B7, 0xED7D, 0x77BA, 0xF055, 0x77BB, 0xC2A4, 0x77BC, 0xC2A5, 0x77BD, 0xC2A2, 0x77BF, 0xC2A3, 0x77C2, 0xF054, + 0x77C4, 0xF27B, 0x77C7, 0xC3A9, 0x77C9, 0xF279, 0x77CA, 0xF27A, 0x77CC, 0xF474, 0x77CD, 0xF477, 0x77CE, 0xF475, 0x77CF, 0xF476, + 0x77D0, 0xF5E0, 0x77D3, 0xC4EF, 0x77D4, 0xF7EB, 0x77D5, 0xF8B4, 0x77D7, 0xC5F7, 0x77D8, 0xF8F8, 0x77D9, 0xF8F9, 0x77DA, 0xC666, + 0x77DB, 0xA5D9, 0x77DC, 0xACE1, 0x77DE, 0xDAC3, 0x77E0, 0xDEE3, 0x77E2, 0xA5DA, 0x77E3, 0xA86F, 0x77E5, 0xAABE, 0x77E7, 0xCFE8, + 0x77E8, 0xCFE9, 0x77E9, 0xAF78, 0x77EC, 0xDAC4, 0x77ED, 0xB575, 0x77EE, 0xB847, 0x77EF, 0xC142, 0x77F0, 0xEDA4, 0x77F1, 0xF27C, + 0x77F2, 0xF478, 0x77F3, 0xA5DB, 0x77F7, 0xCDA1, 0x77F8, 0xCD7A, 0x77F9, 0xCD7C, 0x77FA, 0xCD7E, 0x77FB, 0xCD7D, 0x77FC, 0xCD7B, + 0x77FD, 0xAABF, 0x7802, 0xACE2, 0x7803, 0xCFF2, 0x7805, 0xCFED, 0x7806, 0xCFEA, 0x7809, 0xCFF1, 0x780C, 0xACE4, 0x780D, 0xACE5, + 0x780E, 0xCFF0, 0x780F, 0xCFEF, 0x7810, 0xCFEE, 0x7811, 0xCFEB, 0x7812, 0xCFEC, 0x7813, 0xCFF3, 0x7814, 0xACE3, 0x781D, 0xAF7C, + 0x781F, 0xAFA4, 0x7820, 0xAFA3, 0x7821, 0xD2E1, 0x7822, 0xD2DB, 0x7823, 0xD2D9, 0x7825, 0xAFA1, 0x7826, 0xD6B9, 0x7827, 0xAF7A, + 0x7828, 0xD2DE, 0x7829, 0xD2E2, 0x782A, 0xD2E4, 0x782B, 0xD2E0, 0x782C, 0xD2DA, 0x782D, 0xAFA2, 0x782E, 0xD2DF, 0x782F, 0xD2DD, + 0x7830, 0xAF79, 0x7831, 0xD2E5, 0x7832, 0xAFA5, 0x7833, 0xD2E3, 0x7834, 0xAF7D, 0x7835, 0xD2DC, 0x7837, 0xAF7E, 0x7838, 0xAF7B, + 0x7843, 0xB2B9, 0x7845, 0xD6BA, 0x7848, 0xD6B3, 0x7849, 0xD6B5, 0x784A, 0xD6B7, 0x784C, 0xD6B8, 0x784D, 0xD6B6, 0x784E, 0xB2BA, + 0x7850, 0xD6BB, 0x7852, 0xD6B4, 0x785C, 0xDAC8, 0x785D, 0xB576, 0x785E, 0xDAD0, 0x7860, 0xDAC5, 0x7862, 0xDAD1, 0x7864, 0xDAC6, + 0x7865, 0xDAC7, 0x7868, 0xDACF, 0x7869, 0xDACE, 0x786A, 0xDACB, 0x786B, 0xB2B8, 0x786C, 0xB577, 0x786D, 0xDAC9, 0x786E, 0xDACC, + 0x786F, 0xB578, 0x7870, 0xDACD, 0x7871, 0xDACA, 0x7879, 0xDEEE, 0x787B, 0xDEF2, 0x787C, 0xB84E, 0x787E, 0xE2F0, 0x787F, 0xB851, + 0x7880, 0xDEF0, 0x7881, 0xF9D6, 0x7883, 0xDEED, 0x7884, 0xDEE8, 0x7885, 0xDEEA, 0x7886, 0xDEEB, 0x7887, 0xDEE4, 0x7889, 0xB84D, + 0x788C, 0xB84C, 0x788E, 0xB848, 0x788F, 0xDEE7, 0x7891, 0xB84F, 0x7893, 0xB850, 0x7894, 0xDEE6, 0x7895, 0xDEE9, 0x7896, 0xDEF1, + 0x7897, 0xB84A, 0x7898, 0xB84B, 0x7899, 0xDEEF, 0x789A, 0xDEE5, 0x789E, 0xE2F2, 0x789F, 0xBAD0, 0x78A0, 0xE2F4, 0x78A1, 0xDEEC, + 0x78A2, 0xE2F6, 0x78A3, 0xBAD4, 0x78A4, 0xE2F7, 0x78A5, 0xE2F3, 0x78A7, 0xBAD1, 0x78A8, 0xE2EF, 0x78A9, 0xBAD3, 0x78AA, 0xE2EC, + 0x78AB, 0xE2F1, 0x78AC, 0xE2F5, 0x78AD, 0xE2EE, 0x78B0, 0xB849, 0x78B2, 0xE2EB, 0x78B3, 0xBAD2, 0x78B4, 0xE2ED, 0x78BA, 0xBD54, + 0x78BB, 0xE6C1, 0x78BC, 0xBD58, 0x78BE, 0xBD56, 0x78C1, 0xBACF, 0x78C3, 0xE6C8, 0x78C4, 0xE6C9, 0x78C5, 0xBD53, 0x78C8, 0xE6C7, + 0x78C9, 0xE6CA, 0x78CA, 0xBD55, 0x78CB, 0xBD52, 0x78CC, 0xE6C3, 0x78CD, 0xE6C0, 0x78CE, 0xE6C5, 0x78CF, 0xE6C2, 0x78D0, 0xBD59, + 0x78D1, 0xE6C4, 0x78D4, 0xE6C6, 0x78D5, 0xBD57, 0x78DA, 0xBF6A, 0x78DB, 0xEAA8, 0x78DD, 0xEAA2, 0x78DE, 0xEAA6, 0x78DF, 0xEAAC, + 0x78E0, 0xEAAD, 0x78E1, 0xEAA9, 0x78E2, 0xEAAA, 0x78E3, 0xEAA7, 0x78E5, 0xEAA4, 0x78E7, 0xBF6C, 0x78E8, 0xBF69, 0x78E9, 0xEAA3, + 0x78EA, 0xEAA5, 0x78EC, 0xBF6B, 0x78ED, 0xEAAB, 0x78EF, 0xC146, 0x78F2, 0xEDAA, 0x78F3, 0xEDA5, 0x78F4, 0xC145, 0x78F7, 0xC143, + 0x78F9, 0xEDAC, 0x78FA, 0xC144, 0x78FB, 0xEDA8, 0x78FC, 0xEDA9, 0x78FD, 0xEDA6, 0x78FE, 0xEDAD, 0x78FF, 0xF056, 0x7901, 0xC147, + 0x7902, 0xEDA7, 0x7904, 0xEDAE, 0x7905, 0xEDAB, 0x7909, 0xF05A, 0x790C, 0xF057, 0x790E, 0xC2A6, 0x7910, 0xF05B, 0x7911, 0xF05D, + 0x7912, 0xF05C, 0x7913, 0xF058, 0x7914, 0xF059, 0x7917, 0xF2A3, 0x7919, 0xC3AA, 0x791B, 0xF27E, 0x791C, 0xF2A2, 0x791D, 0xF27D, + 0x791E, 0xF2A4, 0x7921, 0xF2A1, 0x7923, 0xF47A, 0x7924, 0xF47D, 0x7925, 0xF479, 0x7926, 0xC471, 0x7927, 0xF47B, 0x7928, 0xF47C, + 0x7929, 0xF47E, 0x792A, 0xC472, 0x792B, 0xC474, 0x792C, 0xC473, 0x792D, 0xF5E1, 0x792F, 0xF5E3, 0x7931, 0xF5E2, 0x7935, 0xF6F6, + 0x7938, 0xF8B5, 0x7939, 0xF8FA, 0x793A, 0xA5DC, 0x793D, 0xCB72, 0x793E, 0xAAC0, 0x793F, 0xCDA3, 0x7940, 0xAAC1, 0x7941, 0xAAC2, + 0x7942, 0xCDA2, 0x7944, 0xCFF8, 0x7945, 0xCFF7, 0x7946, 0xACE6, 0x7947, 0xACE9, 0x7948, 0xACE8, 0x7949, 0xACE7, 0x794A, 0xCFF4, + 0x794B, 0xCFF6, 0x794C, 0xCFF5, 0x794F, 0xD2E8, 0x7950, 0xAFA7, 0x7951, 0xD2EC, 0x7952, 0xD2EB, 0x7953, 0xD2EA, 0x7954, 0xD2E6, + 0x7955, 0xAFA6, 0x7956, 0xAFAA, 0x7957, 0xAFAD, 0x795A, 0xAFAE, 0x795B, 0xD2E7, 0x795C, 0xD2E9, 0x795D, 0xAFAC, 0x795E, 0xAFAB, + 0x795F, 0xAFA9, 0x7960, 0xAFA8, 0x7961, 0xD6C2, 0x7963, 0xD6C0, 0x7964, 0xD6BC, 0x7965, 0xB2BB, 0x7967, 0xD6BD, 0x7968, 0xB2BC, + 0x7969, 0xD6BE, 0x796A, 0xD6BF, 0x796B, 0xD6C1, 0x796D, 0xB2BD, 0x7970, 0xDAD5, 0x7972, 0xDAD4, 0x7973, 0xDAD3, 0x7974, 0xDAD2, + 0x7979, 0xDEF6, 0x797A, 0xB852, 0x797C, 0xDEF3, 0x797D, 0xDEF5, 0x797F, 0xB853, 0x7981, 0xB854, 0x7982, 0xDEF4, 0x7988, 0xE341, + 0x798A, 0xE2F9, 0x798B, 0xE2FA, 0x798D, 0xBAD7, 0x798E, 0xBAD5, 0x798F, 0xBAD6, 0x7990, 0xE343, 0x7992, 0xE342, 0x7993, 0xE2FE, + 0x7994, 0xE2FD, 0x7995, 0xE2FC, 0x7996, 0xE2FB, 0x7997, 0xE340, 0x7998, 0xE2F8, 0x799A, 0xE6CB, 0x799B, 0xE6D0, 0x799C, 0xE6CE, + 0x79A0, 0xE6CD, 0x79A1, 0xE6CC, 0x79A2, 0xE6CF, 0x79A4, 0xEAAE, 0x79A6, 0xBF6D, 0x79A7, 0xC148, 0x79A8, 0xEDB0, 0x79AA, 0xC149, + 0x79AB, 0xEDAF, 0x79AC, 0xF05F, 0x79AD, 0xF05E, 0x79AE, 0xC2A7, 0x79B0, 0xF2A5, 0x79B1, 0xC3AB, 0x79B2, 0xF4A1, 0x79B3, 0xC5A1, + 0x79B4, 0xF6F7, 0x79B6, 0xF8B7, 0x79B7, 0xF8B6, 0x79B8, 0xC9A8, 0x79B9, 0xACEA, 0x79BA, 0xACEB, 0x79BB, 0xD6C3, 0x79BD, 0xB856, + 0x79BE, 0xA5DD, 0x79BF, 0xA872, 0x79C0, 0xA871, 0x79C1, 0xA870, 0x79C5, 0xCDA4, 0x79C8, 0xAAC4, 0x79C9, 0xAAC3, 0x79CB, 0xACEE, + 0x79CD, 0xCFFA, 0x79CE, 0xCFFD, 0x79CF, 0xCFFB, 0x79D1, 0xACEC, 0x79D2, 0xACED, 0x79D5, 0xCFF9, 0x79D6, 0xCFFC, 0x79D8, 0xAFB5, + 0x79DC, 0xD2F3, 0x79DD, 0xD2F5, 0x79DE, 0xD2F4, 0x79DF, 0xAFB2, 0x79E0, 0xD2EF, 0x79E3, 0xAFB0, 0x79E4, 0xAFAF, 0x79E6, 0xAFB3, + 0x79E7, 0xAFB1, 0x79E9, 0xAFB4, 0x79EA, 0xD2F2, 0x79EB, 0xD2ED, 0x79EC, 0xD2EE, 0x79ED, 0xD2F1, 0x79EE, 0xD2F0, 0x79F6, 0xD6C6, + 0x79F7, 0xD6C7, 0x79F8, 0xD6C5, 0x79FA, 0xD6C4, 0x79FB, 0xB2BE, 0x7A00, 0xB57D, 0x7A02, 0xDAD6, 0x7A03, 0xDAD8, 0x7A04, 0xDADA, + 0x7A05, 0xB57C, 0x7A08, 0xB57A, 0x7A0A, 0xDAD7, 0x7A0B, 0xB57B, 0x7A0C, 0xDAD9, 0x7A0D, 0xB579, 0x7A10, 0xDF41, 0x7A11, 0xDEF7, + 0x7A12, 0xDEFA, 0x7A13, 0xDEFE, 0x7A14, 0xB85A, 0x7A15, 0xDEFC, 0x7A17, 0xDEFB, 0x7A18, 0xDEF8, 0x7A19, 0xDEF9, 0x7A1A, 0xB858, + 0x7A1B, 0xDF40, 0x7A1C, 0xB857, 0x7A1E, 0xB85C, 0x7A1F, 0xB85B, 0x7A20, 0xB859, 0x7A22, 0xDEFD, 0x7A26, 0xE349, 0x7A28, 0xE348, + 0x7A2B, 0xE344, 0x7A2E, 0xBAD8, 0x7A2F, 0xE347, 0x7A30, 0xE346, 0x7A31, 0xBAD9, 0x7A37, 0xBD5E, 0x7A39, 0xE6D2, 0x7A3B, 0xBD5F, + 0x7A3C, 0xBD5B, 0x7A3D, 0xBD5D, 0x7A3F, 0xBD5A, 0x7A40, 0xBD5C, 0x7A44, 0xEAAF, 0x7A46, 0xBF70, 0x7A47, 0xEAB1, 0x7A48, 0xEAB0, + 0x7A4A, 0xE345, 0x7A4B, 0xBF72, 0x7A4C, 0xBF71, 0x7A4D, 0xBF6E, 0x7A4E, 0xBF6F, 0x7A54, 0xEDB5, 0x7A56, 0xEDB3, 0x7A57, 0xC14A, + 0x7A58, 0xEDB4, 0x7A5A, 0xEDB6, 0x7A5B, 0xEDB2, 0x7A5C, 0xEDB1, 0x7A5F, 0xF060, 0x7A60, 0xC2AA, 0x7A61, 0xC2A8, 0x7A62, 0xC2A9, + 0x7A67, 0xF2A6, 0x7A68, 0xF2A7, 0x7A69, 0xC3AD, 0x7A6B, 0xC3AC, 0x7A6C, 0xF4A3, 0x7A6D, 0xF4A4, 0x7A6E, 0xF4A2, 0x7A70, 0xF6F8, + 0x7A71, 0xF6F9, 0x7A74, 0xA5DE, 0x7A75, 0xCA48, 0x7A76, 0xA873, 0x7A78, 0xCDA5, 0x7A79, 0xAAC6, 0x7A7A, 0xAAC5, 0x7A7B, 0xCDA6, + 0x7A7E, 0xD040, 0x7A7F, 0xACEF, 0x7A80, 0xCFFE, 0x7A81, 0xACF0, 0x7A84, 0xAFB6, 0x7A85, 0xD2F8, 0x7A86, 0xD2F6, 0x7A87, 0xD2FC, + 0x7A88, 0xAFB7, 0x7A89, 0xD2F7, 0x7A8A, 0xD2FB, 0x7A8B, 0xD2F9, 0x7A8C, 0xD2FA, 0x7A8F, 0xD6C8, 0x7A90, 0xD6CA, 0x7A92, 0xB2BF, + 0x7A94, 0xD6C9, 0x7A95, 0xB2C0, 0x7A96, 0xB5A2, 0x7A97, 0xB5A1, 0x7A98, 0xB57E, 0x7A99, 0xDADB, 0x7A9E, 0xDF44, 0x7A9F, 0xB85D, + 0x7AA0, 0xB85E, 0x7AA2, 0xDF43, 0x7AA3, 0xDF42, 0x7AA8, 0xE34A, 0x7AA9, 0xBADB, 0x7AAA, 0xBADA, 0x7AAB, 0xE34B, 0x7AAC, 0xE34C, + 0x7AAE, 0xBD61, 0x7AAF, 0xBD60, 0x7AB1, 0xEAB5, 0x7AB2, 0xE6D3, 0x7AB3, 0xE6D5, 0x7AB4, 0xE6D4, 0x7AB5, 0xEAB4, 0x7AB6, 0xEAB2, + 0x7AB7, 0xEAB6, 0x7AB8, 0xEAB3, 0x7ABA, 0xBF73, 0x7ABE, 0xEDB7, 0x7ABF, 0xC14B, 0x7AC0, 0xEDB8, 0x7AC1, 0xEDB9, 0x7AC4, 0xC2AB, + 0x7AC5, 0xC2AC, 0x7AC7, 0xC475, 0x7ACA, 0xC5D1, 0x7ACB, 0xA5DF, 0x7AD1, 0xD041, 0x7AD8, 0xD2FD, 0x7AD9, 0xAFB8, 0x7ADF, 0xB3BA, + 0x7AE0, 0xB3B9, 0x7AE3, 0xB5A4, 0x7AE4, 0xDADD, 0x7AE5, 0xB5A3, 0x7AE6, 0xDADC, 0x7AEB, 0xDF45, 0x7AED, 0xBADC, 0x7AEE, 0xE34D, + 0x7AEF, 0xBADD, 0x7AF6, 0xC476, 0x7AF7, 0xF4A5, 0x7AF9, 0xA6CB, 0x7AFA, 0xAAC7, 0x7AFB, 0xCDA7, 0x7AFD, 0xACF2, 0x7AFF, 0xACF1, + 0x7B00, 0xD042, 0x7B01, 0xD043, 0x7B04, 0xD340, 0x7B05, 0xD342, 0x7B06, 0xAFB9, 0x7B08, 0xD344, 0x7B09, 0xD347, 0x7B0A, 0xD345, + 0x7B0E, 0xD346, 0x7B0F, 0xD343, 0x7B10, 0xD2FE, 0x7B11, 0xAFBA, 0x7B12, 0xD348, 0x7B13, 0xD341, 0x7B18, 0xD6D3, 0x7B19, 0xB2C6, + 0x7B1A, 0xD6DC, 0x7B1B, 0xB2C3, 0x7B1D, 0xD6D5, 0x7B1E, 0xB2C7, 0x7B20, 0xB2C1, 0x7B22, 0xD6D0, 0x7B23, 0xD6DD, 0x7B24, 0xD6D1, + 0x7B25, 0xD6CE, 0x7B26, 0xB2C5, 0x7B28, 0xB2C2, 0x7B2A, 0xD6D4, 0x7B2B, 0xD6D7, 0x7B2C, 0xB2C4, 0x7B2D, 0xD6D8, 0x7B2E, 0xB2C8, + 0x7B2F, 0xD6D9, 0x7B30, 0xD6CF, 0x7B31, 0xD6D6, 0x7B32, 0xD6DA, 0x7B33, 0xD6D2, 0x7B34, 0xD6CD, 0x7B35, 0xD6CB, 0x7B38, 0xD6DB, + 0x7B3B, 0xDADF, 0x7B40, 0xDAE4, 0x7B44, 0xDAE0, 0x7B45, 0xDAE6, 0x7B46, 0xB5A7, 0x7B47, 0xD6CC, 0x7B48, 0xDAE1, 0x7B49, 0xB5A5, + 0x7B4A, 0xDADE, 0x7B4B, 0xB5AC, 0x7B4C, 0xDAE2, 0x7B4D, 0xB5AB, 0x7B4E, 0xDAE3, 0x7B4F, 0xB5AD, 0x7B50, 0xB5A8, 0x7B51, 0xB5AE, + 0x7B52, 0xB5A9, 0x7B54, 0xB5AA, 0x7B56, 0xB5A6, 0x7B58, 0xDAE5, 0x7B60, 0xB861, 0x7B61, 0xDF50, 0x7B63, 0xDF53, 0x7B64, 0xDF47, + 0x7B65, 0xDF4C, 0x7B66, 0xDF46, 0x7B67, 0xB863, 0x7B69, 0xDF4A, 0x7B6D, 0xDF48, 0x7B6E, 0xB862, 0x7B70, 0xDF4F, 0x7B71, 0xDF4E, + 0x7B72, 0xDF4B, 0x7B73, 0xDF4D, 0x7B74, 0xDF49, 0x7B75, 0xBAE1, 0x7B76, 0xDF52, 0x7B77, 0xB85F, 0x7B78, 0xDF51, 0x7B82, 0xE35D, + 0x7B84, 0xBAE8, 0x7B85, 0xE358, 0x7B87, 0xBAE7, 0x7B88, 0xE34E, 0x7B8A, 0xE350, 0x7B8B, 0xBAE0, 0x7B8C, 0xE355, 0x7B8D, 0xE354, + 0x7B8E, 0xE357, 0x7B8F, 0xBAE5, 0x7B90, 0xE352, 0x7B91, 0xE351, 0x7B94, 0xBAE4, 0x7B95, 0xBADF, 0x7B96, 0xE353, 0x7B97, 0xBAE2, + 0x7B98, 0xE359, 0x7B99, 0xE35B, 0x7B9B, 0xE356, 0x7B9C, 0xE34F, 0x7B9D, 0xBAE3, 0x7BA0, 0xBD69, 0x7BA1, 0xBADE, 0x7BA4, 0xE35C, + 0x7BAC, 0xE6D9, 0x7BAD, 0xBD62, 0x7BAF, 0xE6DB, 0x7BB1, 0xBD63, 0x7BB4, 0xBD65, 0x7BB5, 0xE6DE, 0x7BB7, 0xE6D6, 0x7BB8, 0xBAE6, + 0x7BB9, 0xE6DC, 0x7BBE, 0xE6D8, 0x7BC0, 0xB860, 0x7BC1, 0xBD68, 0x7BC4, 0xBD64, 0x7BC6, 0xBD66, 0x7BC7, 0xBD67, 0x7BC9, 0xBF76, + 0x7BCA, 0xE6DD, 0x7BCB, 0xE6D7, 0x7BCC, 0xBD6A, 0x7BCE, 0xE6DA, 0x7BD4, 0xEAC0, 0x7BD5, 0xEABB, 0x7BD8, 0xEAC5, 0x7BD9, 0xBF74, + 0x7BDA, 0xEABD, 0x7BDB, 0xBF78, 0x7BDC, 0xEAC3, 0x7BDD, 0xEABA, 0x7BDE, 0xEAB7, 0x7BDF, 0xEAC6, 0x7BE0, 0xC151, 0x7BE1, 0xBF79, + 0x7BE2, 0xEAC2, 0x7BE3, 0xEAB8, 0x7BE4, 0xBF77, 0x7BE5, 0xEABC, 0x7BE6, 0xBF7B, 0x7BE7, 0xEAB9, 0x7BE8, 0xEABE, 0x7BE9, 0xBF7A, + 0x7BEA, 0xEAC1, 0x7BEB, 0xEAC4, 0x7BF0, 0xEDCB, 0x7BF1, 0xEDCC, 0x7BF2, 0xEDBC, 0x7BF3, 0xEDC3, 0x7BF4, 0xEDC1, 0x7BF7, 0xC14F, + 0x7BF8, 0xEDC8, 0x7BF9, 0xEABF, 0x7BFB, 0xEDBF, 0x7BFD, 0xEDC9, 0x7BFE, 0xC14E, 0x7BFF, 0xEDBE, 0x7C00, 0xEDBD, 0x7C01, 0xEDC7, + 0x7C02, 0xEDC4, 0x7C03, 0xEDC6, 0x7C05, 0xEDBA, 0x7C06, 0xEDCA, 0x7C07, 0xC14C, 0x7C09, 0xEDC5, 0x7C0A, 0xEDCE, 0x7C0B, 0xEDC2, + 0x7C0C, 0xC150, 0x7C0D, 0xC14D, 0x7C0E, 0xEDC0, 0x7C0F, 0xEDBB, 0x7C10, 0xEDCD, 0x7C11, 0xBF75, 0x7C19, 0xF063, 0x7C1C, 0xF061, + 0x7C1D, 0xF067, 0x7C1E, 0xC2B0, 0x7C1F, 0xF065, 0x7C20, 0xF064, 0x7C21, 0xC2B2, 0x7C22, 0xF06A, 0x7C23, 0xC2B1, 0x7C25, 0xF06B, + 0x7C26, 0xF068, 0x7C27, 0xC2AE, 0x7C28, 0xF069, 0x7C29, 0xF062, 0x7C2A, 0xC2AF, 0x7C2B, 0xC2AD, 0x7C2C, 0xF2AB, 0x7C2D, 0xF066, + 0x7C30, 0xF06C, 0x7C33, 0xF2A8, 0x7C37, 0xC3B2, 0x7C38, 0xC3B0, 0x7C39, 0xF2AA, 0x7C3B, 0xF2AC, 0x7C3C, 0xF2A9, 0x7C3D, 0xC3B1, + 0x7C3E, 0xC3AE, 0x7C3F, 0xC3AF, 0x7C40, 0xC3B3, 0x7C43, 0xC478, 0x7C45, 0xF4AA, 0x7C47, 0xF4A9, 0x7C48, 0xF4A7, 0x7C49, 0xF4A6, + 0x7C4A, 0xF4A8, 0x7C4C, 0xC477, 0x7C4D, 0xC479, 0x7C50, 0xC4F0, 0x7C53, 0xF5E5, 0x7C54, 0xF5E4, 0x7C57, 0xF6FA, 0x7C59, 0xF6FC, + 0x7C5A, 0xF6FE, 0x7C5B, 0xF6FD, 0x7C5C, 0xF6FB, 0x7C5F, 0xC5A3, 0x7C60, 0xC5A2, 0x7C63, 0xC5D3, 0x7C64, 0xC5D2, 0x7C65, 0xC5D4, + 0x7C66, 0xF7ED, 0x7C67, 0xF7EC, 0x7C69, 0xF8FB, 0x7C6A, 0xF8B8, 0x7C6B, 0xF8FC, 0x7C6C, 0xC658, 0x7C6E, 0xC659, 0x7C6F, 0xF96D, + 0x7C72, 0xC67E, 0x7C73, 0xA6CC, 0x7C75, 0xCDA8, 0x7C78, 0xD045, 0x7C79, 0xD046, 0x7C7A, 0xD044, 0x7C7D, 0xACF3, 0x7C7F, 0xD047, + 0x7C80, 0xD048, 0x7C81, 0xD049, 0x7C84, 0xD349, 0x7C85, 0xD34F, 0x7C88, 0xD34D, 0x7C89, 0xAFBB, 0x7C8A, 0xD34B, 0x7C8C, 0xD34C, + 0x7C8D, 0xD34E, 0x7C91, 0xD34A, 0x7C92, 0xB2C9, 0x7C94, 0xD6DE, 0x7C95, 0xB2CB, 0x7C96, 0xD6E0, 0x7C97, 0xB2CA, 0x7C98, 0xD6DF, + 0x7C9E, 0xDAE8, 0x7C9F, 0xB5AF, 0x7CA1, 0xDAEA, 0x7CA2, 0xDAE7, 0x7CA3, 0xD6E1, 0x7CA5, 0xB5B0, 0x7CA7, 0xF9DB, 0x7CA8, 0xDAE9, + 0x7CAF, 0xDF56, 0x7CB1, 0xB864, 0x7CB2, 0xDF54, 0x7CB3, 0xB865, 0x7CB4, 0xDF55, 0x7CB5, 0xB866, 0x7CB9, 0xBAE9, 0x7CBA, 0xE361, + 0x7CBB, 0xE35E, 0x7CBC, 0xE360, 0x7CBD, 0xBAEA, 0x7CBE, 0xBAEB, 0x7CBF, 0xE35F, 0x7CC5, 0xE6DF, 0x7CC8, 0xE6E0, 0x7CCA, 0xBD6B, + 0x7CCB, 0xE6E2, 0x7CCC, 0xE6E1, 0x7CCE, 0xA261, 0x7CD0, 0xEACA, 0x7CD1, 0xEACB, 0x7CD2, 0xEAC7, 0x7CD4, 0xEAC8, 0x7CD5, 0xBF7C, + 0x7CD6, 0xBF7D, 0x7CD7, 0xEAC9, 0x7CD9, 0xC157, 0x7CDC, 0xC153, 0x7CDD, 0xC158, 0x7CDE, 0xC154, 0x7CDF, 0xC156, 0x7CE0, 0xC152, + 0x7CE2, 0xC155, 0x7CE7, 0xC2B3, 0x7CE8, 0xEDCF, 0x7CEA, 0xF2AE, 0x7CEC, 0xF2AD, 0x7CEE, 0xF4AB, 0x7CEF, 0xC47A, 0x7CF0, 0xC47B, + 0x7CF1, 0xF741, 0x7CF2, 0xF5E6, 0x7CF4, 0xF740, 0x7CF6, 0xF8FD, 0x7CF7, 0xF9A4, 0x7CF8, 0xA6CD, 0x7CFB, 0xA874, 0x7CFD, 0xCDA9, + 0x7CFE, 0xAAC8, 0x7D00, 0xACF6, 0x7D01, 0xD04C, 0x7D02, 0xACF4, 0x7D03, 0xD04A, 0x7D04, 0xACF9, 0x7D05, 0xACF5, 0x7D06, 0xACFA, + 0x7D07, 0xACF8, 0x7D08, 0xD04B, 0x7D09, 0xACF7, 0x7D0A, 0xAFBF, 0x7D0B, 0xAFBE, 0x7D0C, 0xD35A, 0x7D0D, 0xAFC7, 0x7D0E, 0xD353, + 0x7D0F, 0xD359, 0x7D10, 0xAFC3, 0x7D11, 0xD352, 0x7D12, 0xD358, 0x7D13, 0xD356, 0x7D14, 0xAFC2, 0x7D15, 0xAFC4, 0x7D16, 0xD355, + 0x7D17, 0xAFBD, 0x7D18, 0xD354, 0x7D19, 0xAFC8, 0x7D1A, 0xAFC5, 0x7D1B, 0xAFC9, 0x7D1C, 0xAFC6, 0x7D1D, 0xD351, 0x7D1E, 0xD350, + 0x7D1F, 0xD357, 0x7D20, 0xAFC0, 0x7D21, 0xAFBC, 0x7D22, 0xAFC1, 0x7D28, 0xD6F0, 0x7D29, 0xD6E9, 0x7D2B, 0xB5B5, 0x7D2C, 0xD6E8, + 0x7D2E, 0xB2CF, 0x7D2F, 0xB2D6, 0x7D30, 0xB2D3, 0x7D31, 0xB2D9, 0x7D32, 0xB2D8, 0x7D33, 0xB2D4, 0x7D35, 0xD6E2, 0x7D36, 0xD6E5, + 0x7D38, 0xD6E4, 0x7D39, 0xB2D0, 0x7D3A, 0xD6E6, 0x7D3B, 0xD6EF, 0x7D3C, 0xB2D1, 0x7D3D, 0xD6E3, 0x7D3E, 0xD6EC, 0x7D3F, 0xD6ED, + 0x7D40, 0xB2D2, 0x7D41, 0xD6EA, 0x7D42, 0xB2D7, 0x7D43, 0xB2CD, 0x7D44, 0xB2D5, 0x7D45, 0xD6E7, 0x7D46, 0xB2CC, 0x7D47, 0xD6EB, + 0x7D4A, 0xD6EE, 0x7D4E, 0xDAFB, 0x7D4F, 0xDAF2, 0x7D50, 0xB5B2, 0x7D51, 0xDAF9, 0x7D52, 0xDAF6, 0x7D53, 0xDAEE, 0x7D54, 0xDAF7, + 0x7D55, 0xB5B4, 0x7D56, 0xDAEF, 0x7D58, 0xDAEB, 0x7D5B, 0xB86C, 0x7D5C, 0xDAF4, 0x7D5E, 0xB5B1, 0x7D5F, 0xDAFA, 0x7D61, 0xB5B8, + 0x7D62, 0xB5BA, 0x7D63, 0xDAED, 0x7D66, 0xB5B9, 0x7D67, 0xDAF0, 0x7D68, 0xB5B3, 0x7D69, 0xDAF8, 0x7D6A, 0xDAF1, 0x7D6B, 0xDAF5, + 0x7D6D, 0xDAF3, 0x7D6E, 0xB5B6, 0x7D6F, 0xDAEC, 0x7D70, 0xB5BB, 0x7D71, 0xB2CE, 0x7D72, 0xB5B7, 0x7D73, 0xB5BC, 0x7D79, 0xB868, + 0x7D7A, 0xDF5D, 0x7D7B, 0xDF5F, 0x7D7C, 0xDF61, 0x7D7D, 0xDF65, 0x7D7F, 0xDF5B, 0x7D80, 0xDF59, 0x7D81, 0xB86A, 0x7D83, 0xDF60, + 0x7D84, 0xDF64, 0x7D85, 0xDF5C, 0x7D86, 0xDF58, 0x7D88, 0xDF57, 0x7D8C, 0xDF62, 0x7D8D, 0xDF5A, 0x7D8E, 0xDF5E, 0x7D8F, 0xB86B, + 0x7D91, 0xB869, 0x7D92, 0xDF66, 0x7D93, 0xB867, 0x7D94, 0xDF63, 0x7D96, 0xE372, 0x7D9C, 0xBAEE, 0x7D9D, 0xE36A, 0x7D9E, 0xBD78, + 0x7D9F, 0xE374, 0x7DA0, 0xBAF1, 0x7DA1, 0xE378, 0x7DA2, 0xBAF7, 0x7DA3, 0xE365, 0x7DA6, 0xE375, 0x7DA7, 0xE362, 0x7DA9, 0xE377, + 0x7DAA, 0xE366, 0x7DAC, 0xBAFE, 0x7DAD, 0xBAFB, 0x7DAE, 0xE376, 0x7DAF, 0xE370, 0x7DB0, 0xBAED, 0x7DB1, 0xBAF5, 0x7DB2, 0xBAF4, + 0x7DB4, 0xBAF3, 0x7DB5, 0xBAF9, 0x7DB7, 0xE363, 0x7DB8, 0xBAFA, 0x7DB9, 0xE371, 0x7DBA, 0xBAF6, 0x7DBB, 0xBAEC, 0x7DBC, 0xE373, + 0x7DBD, 0xBAEF, 0x7DBE, 0xBAF0, 0x7DBF, 0xBAF8, 0x7DC0, 0xE368, 0x7DC1, 0xE367, 0x7DC2, 0xE364, 0x7DC4, 0xE36C, 0x7DC5, 0xE369, + 0x7DC6, 0xE36D, 0x7DC7, 0xBAFD, 0x7DC9, 0xE379, 0x7DCA, 0xBAF2, 0x7DCB, 0xE36E, 0x7DCC, 0xE36F, 0x7DCE, 0xE36B, 0x7DD2, 0xBAFC, + 0x7DD7, 0xE6E7, 0x7DD8, 0xBD70, 0x7DD9, 0xBD79, 0x7DDA, 0xBD75, 0x7DDB, 0xE6E4, 0x7DDD, 0xBD72, 0x7DDE, 0xBD76, 0x7DDF, 0xE6F0, + 0x7DE0, 0xBD6C, 0x7DE1, 0xE6E8, 0x7DE3, 0xBD74, 0x7DE6, 0xE6EB, 0x7DE7, 0xE6E6, 0x7DE8, 0xBD73, 0x7DE9, 0xBD77, 0x7DEA, 0xE6E5, + 0x7DEC, 0xBD71, 0x7DEE, 0xE6EF, 0x7DEF, 0xBD6E, 0x7DF0, 0xE6EE, 0x7DF1, 0xE6ED, 0x7DF2, 0xBD7A, 0x7DF3, 0xE572, 0x7DF4, 0xBD6D, + 0x7DF6, 0xE6EC, 0x7DF7, 0xE6E3, 0x7DF9, 0xBD7B, 0x7DFA, 0xE6EA, 0x7DFB, 0xBD6F, 0x7E03, 0xE6E9, 0x7E08, 0xBFA2, 0x7E09, 0xBFA7, + 0x7E0A, 0xBF7E, 0x7E0B, 0xEAD8, 0x7E0C, 0xEACF, 0x7E0D, 0xEADB, 0x7E0E, 0xEAD3, 0x7E0F, 0xEAD9, 0x7E10, 0xBFA8, 0x7E11, 0xBFA1, + 0x7E12, 0xEACC, 0x7E13, 0xEAD2, 0x7E14, 0xEADC, 0x7E15, 0xEAD5, 0x7E16, 0xEADA, 0x7E17, 0xEACE, 0x7E1A, 0xEAD6, 0x7E1B, 0xBFA3, + 0x7E1C, 0xEAD4, 0x7E1D, 0xBFA6, 0x7E1E, 0xBFA5, 0x7E1F, 0xEAD0, 0x7E20, 0xEAD1, 0x7E21, 0xEACD, 0x7E22, 0xEAD7, 0x7E23, 0xBFA4, + 0x7E24, 0xEADE, 0x7E25, 0xEADD, 0x7E29, 0xEDDA, 0x7E2A, 0xEDD6, 0x7E2B, 0xC15F, 0x7E2D, 0xEDD0, 0x7E2E, 0xC159, 0x7E2F, 0xC169, + 0x7E30, 0xEDDC, 0x7E31, 0xC161, 0x7E32, 0xC15D, 0x7E33, 0xEDD3, 0x7E34, 0xC164, 0x7E35, 0xC167, 0x7E36, 0xEDDE, 0x7E37, 0xC15C, + 0x7E38, 0xEDD5, 0x7E39, 0xC165, 0x7E3A, 0xEDE0, 0x7E3B, 0xEDDD, 0x7E3C, 0xEDD1, 0x7E3D, 0xC160, 0x7E3E, 0xC15A, 0x7E3F, 0xC168, + 0x7E40, 0xEDD8, 0x7E41, 0xC163, 0x7E42, 0xEDD2, 0x7E43, 0xC15E, 0x7E44, 0xEDDF, 0x7E45, 0xC162, 0x7E46, 0xC15B, 0x7E47, 0xEDD9, + 0x7E48, 0xC166, 0x7E49, 0xEDD7, 0x7E4C, 0xEDDB, 0x7E50, 0xF06E, 0x7E51, 0xF074, 0x7E52, 0xC2B9, 0x7E53, 0xF077, 0x7E54, 0xC2B4, + 0x7E55, 0xC2B5, 0x7E56, 0xF06F, 0x7E57, 0xF076, 0x7E58, 0xF071, 0x7E59, 0xC2BA, 0x7E5A, 0xC2B7, 0x7E5C, 0xF06D, 0x7E5E, 0xC2B6, + 0x7E5F, 0xF073, 0x7E60, 0xF075, 0x7E61, 0xC2B8, 0x7E62, 0xF072, 0x7E63, 0xF070, 0x7E68, 0xF2B8, 0x7E69, 0xC3B7, 0x7E6A, 0xC3B8, + 0x7E6B, 0xC3B4, 0x7E6D, 0xC3B5, 0x7E6F, 0xF2B4, 0x7E70, 0xF2B2, 0x7E72, 0xF2B6, 0x7E73, 0xC3BA, 0x7E74, 0xF2B7, 0x7E75, 0xF2B0, + 0x7E76, 0xF2AF, 0x7E77, 0xF2B3, 0x7E78, 0xF2B1, 0x7E79, 0xC3B6, 0x7E7A, 0xF2B5, 0x7E7B, 0xF4AC, 0x7E7C, 0xC47E, 0x7E7D, 0xC47D, + 0x7E7E, 0xF4AD, 0x7E80, 0xF4AF, 0x7E81, 0xF4AE, 0x7E82, 0xC4A1, 0x7E86, 0xF5EB, 0x7E87, 0xF5E8, 0x7E88, 0xF5E9, 0x7E8A, 0xF5E7, + 0x7E8B, 0xF5EA, 0x7E8C, 0xC4F2, 0x7E8D, 0xF5EC, 0x7E8F, 0xC4F1, 0x7E91, 0xF742, 0x7E93, 0xC5D5, 0x7E94, 0xC5D7, 0x7E95, 0xF7EE, + 0x7E96, 0xC5D6, 0x7E97, 0xF8B9, 0x7E98, 0xF940, 0x7E99, 0xF942, 0x7E9A, 0xF8FE, 0x7E9B, 0xF941, 0x7E9C, 0xC66C, 0x7F36, 0xA6CE, + 0x7F38, 0xACFB, 0x7F39, 0xD26F, 0x7F3A, 0xAFCA, 0x7F3D, 0xB2DA, 0x7F3E, 0xDAFC, 0x7F3F, 0xDAFD, 0x7F43, 0xEADF, 0x7F44, 0xC16A, + 0x7F45, 0xEDE1, 0x7F48, 0xC2BB, 0x7F4A, 0xF2BA, 0x7F4B, 0xF2B9, 0x7F4C, 0xC4A2, 0x7F4D, 0xF5ED, 0x7F4F, 0xF743, 0x7F50, 0xC5F8, + 0x7F51, 0xCA49, 0x7F54, 0xAAC9, 0x7F55, 0xA875, 0x7F58, 0xD04D, 0x7F5B, 0xD360, 0x7F5C, 0xD35B, 0x7F5D, 0xD35F, 0x7F5E, 0xD35D, + 0x7F5F, 0xAFCB, 0x7F60, 0xD35E, 0x7F61, 0xD35C, 0x7F63, 0xD6F1, 0x7F65, 0xDAFE, 0x7F66, 0xDB40, 0x7F67, 0xDF69, 0x7F68, 0xDF6A, + 0x7F69, 0xB86E, 0x7F6A, 0xB86F, 0x7F6B, 0xDF68, 0x7F6C, 0xDF6B, 0x7F6D, 0xDF67, 0x7F6E, 0xB86D, 0x7F70, 0xBB40, 0x7F72, 0xB870, + 0x7F73, 0xE37A, 0x7F75, 0xBD7C, 0x7F76, 0xE6F1, 0x7F77, 0xBD7D, 0x7F79, 0xBFA9, 0x7F7A, 0xEAE2, 0x7F7B, 0xEAE0, 0x7F7C, 0xEAE1, + 0x7F7D, 0xEDE4, 0x7F7E, 0xEDE3, 0x7F7F, 0xEDE2, 0x7F83, 0xF2BB, 0x7F85, 0xC3B9, 0x7F86, 0xF2BC, 0x7F87, 0xF744, 0x7F88, 0xC5F9, + 0x7F89, 0xF8BA, 0x7F8A, 0xA6CF, 0x7F8B, 0xAACB, 0x7F8C, 0xAACA, 0x7F8D, 0xD04F, 0x7F8E, 0xACFC, 0x7F91, 0xD04E, 0x7F92, 0xD362, + 0x7F94, 0xAFCC, 0x7F95, 0xD6F2, 0x7F96, 0xD361, 0x7F9A, 0xB2DC, 0x7F9B, 0xD6F5, 0x7F9C, 0xD6F3, 0x7F9D, 0xD6F4, 0x7F9E, 0xB2DB, + 0x7FA0, 0xDB42, 0x7FA1, 0xDB43, 0x7FA2, 0xDB41, 0x7FA4, 0xB873, 0x7FA5, 0xDF6D, 0x7FA6, 0xDF6C, 0x7FA7, 0xDF6E, 0x7FA8, 0xB872, + 0x7FA9, 0xB871, 0x7FAC, 0xE6F2, 0x7FAD, 0xE6F4, 0x7FAF, 0xBD7E, 0x7FB0, 0xE6F3, 0x7FB1, 0xEAE3, 0x7FB2, 0xBFAA, 0x7FB3, 0xF079, + 0x7FB5, 0xF078, 0x7FB6, 0xC3BB, 0x7FB7, 0xF2BD, 0x7FB8, 0xC3BD, 0x7FB9, 0xC3BC, 0x7FBA, 0xF4B0, 0x7FBB, 0xF5EE, 0x7FBC, 0xC4F3, + 0x7FBD, 0xA6D0, 0x7FBE, 0xD050, 0x7FBF, 0xACFD, 0x7FC0, 0xD365, 0x7FC1, 0xAFCE, 0x7FC2, 0xD364, 0x7FC3, 0xD363, 0x7FC5, 0xAFCD, + 0x7FC7, 0xD6FB, 0x7FC9, 0xD6FD, 0x7FCA, 0xD6F6, 0x7FCB, 0xD6F7, 0x7FCC, 0xB2DD, 0x7FCD, 0xD6F8, 0x7FCE, 0xB2DE, 0x7FCF, 0xD6FC, + 0x7FD0, 0xD6F9, 0x7FD1, 0xD6FA, 0x7FD2, 0xB2DF, 0x7FD4, 0xB5BE, 0x7FD5, 0xB5BF, 0x7FD7, 0xDB44, 0x7FDB, 0xDF6F, 0x7FDC, 0xDF70, + 0x7FDE, 0xE37E, 0x7FDF, 0xBB43, 0x7FE0, 0xBB41, 0x7FE1, 0xBB42, 0x7FE2, 0xE37B, 0x7FE3, 0xE37C, 0x7FE5, 0xE37D, 0x7FE6, 0xE6F9, + 0x7FE8, 0xE6FA, 0x7FE9, 0xBDA1, 0x7FEA, 0xE6F7, 0x7FEB, 0xE6F6, 0x7FEC, 0xE6F8, 0x7FED, 0xE6F5, 0x7FEE, 0xBFAD, 0x7FEF, 0xEAE4, + 0x7FF0, 0xBFAB, 0x7FF1, 0xBFAC, 0x7FF2, 0xEDE6, 0x7FF3, 0xC16B, 0x7FF4, 0xEDE5, 0x7FF5, 0xEFA8, 0x7FF7, 0xF07A, 0x7FF8, 0xF07B, + 0x7FF9, 0xC2BC, 0x7FFB, 0xC2BD, 0x7FFC, 0xC16C, 0x7FFD, 0xF2BE, 0x7FFE, 0xF2BF, 0x7FFF, 0xF4B1, 0x8000, 0xC4A3, 0x8001, 0xA6D1, + 0x8003, 0xA6D2, 0x8004, 0xACFE, 0x8005, 0xAACC, 0x8006, 0xAFCF, 0x8007, 0xD051, 0x800B, 0xB5C0, 0x800C, 0xA6D3, 0x800D, 0xAD41, + 0x800E, 0xD052, 0x800F, 0xD053, 0x8010, 0xAD40, 0x8011, 0xAD42, 0x8012, 0xA6D4, 0x8014, 0xD054, 0x8015, 0xAFD1, 0x8016, 0xD366, + 0x8017, 0xAFD3, 0x8018, 0xAFD0, 0x8019, 0xAFD2, 0x801B, 0xD741, 0x801C, 0xB2E0, 0x801E, 0xD740, 0x801F, 0xD6FE, 0x8021, 0xDF71, + 0x8024, 0xE3A1, 0x8026, 0xBDA2, 0x8028, 0xBFAE, 0x8029, 0xEAE6, 0x802A, 0xEAE5, 0x802C, 0xEDE7, 0x8030, 0xF5EF, 0x8033, 0xA6D5, + 0x8034, 0xCB73, 0x8035, 0xCDAA, 0x8036, 0xAD43, 0x8037, 0xD055, 0x8039, 0xD368, 0x803D, 0xAFD4, 0x803E, 0xD367, 0x803F, 0xAFD5, + 0x8043, 0xD743, 0x8046, 0xB2E2, 0x8047, 0xD742, 0x8048, 0xD744, 0x804A, 0xB2E1, 0x804F, 0xDB46, 0x8050, 0xDB47, 0x8051, 0xDB45, + 0x8052, 0xB5C1, 0x8056, 0xB874, 0x8058, 0xB875, 0x805A, 0xBB45, 0x805C, 0xE3A3, 0x805D, 0xE3A2, 0x805E, 0xBB44, 0x8064, 0xE6FB, + 0x8067, 0xE6FC, 0x806C, 0xEAE7, 0x806F, 0xC170, 0x8070, 0xC16F, 0x8071, 0xC16D, 0x8072, 0xC16E, 0x8073, 0xC171, 0x8075, 0xF07C, + 0x8076, 0xC2BF, 0x8077, 0xC2BE, 0x8078, 0xF2C0, 0x8079, 0xF4B2, 0x807D, 0xC5A5, 0x807E, 0xC5A4, 0x807F, 0xA6D6, 0x8082, 0xD1FB, + 0x8084, 0xB877, 0x8085, 0xB5C2, 0x8086, 0xB876, 0x8087, 0xBB46, 0x8089, 0xA6D7, 0x808A, 0xC9A9, 0x808B, 0xA6D8, 0x808C, 0xA6D9, + 0x808F, 0xCDAB, 0x8090, 0xCB76, 0x8092, 0xCB77, 0x8093, 0xA877, 0x8095, 0xCB74, 0x8096, 0xA876, 0x8098, 0xA879, 0x8099, 0xCB75, + 0x809A, 0xA87B, 0x809B, 0xA87A, 0x809C, 0xCB78, 0x809D, 0xA878, 0x80A1, 0xAAD1, 0x80A2, 0xAACF, 0x80A3, 0xCDAD, 0x80A5, 0xAACE, + 0x80A9, 0xAAD3, 0x80AA, 0xAAD5, 0x80AB, 0xAAD2, 0x80AD, 0xCDB0, 0x80AE, 0xCDAC, 0x80AF, 0xAAD6, 0x80B1, 0xAAD0, 0x80B2, 0xA87C, + 0x80B4, 0xAAD4, 0x80B5, 0xCDAF, 0x80B8, 0xCDAE, 0x80BA, 0xAACD, 0x80C2, 0xD05B, 0x80C3, 0xAD47, 0x80C4, 0xAD48, 0x80C5, 0xD05D, + 0x80C7, 0xD057, 0x80C8, 0xD05A, 0x80C9, 0xD063, 0x80CA, 0xD061, 0x80CC, 0xAD49, 0x80CD, 0xD067, 0x80CE, 0xAD4C, 0x80CF, 0xD064, + 0x80D0, 0xD05C, 0x80D1, 0xD059, 0x80D4, 0xDB49, 0x80D5, 0xD062, 0x80D6, 0xAD44, 0x80D7, 0xD065, 0x80D8, 0xD056, 0x80D9, 0xD05F, + 0x80DA, 0xAD46, 0x80DB, 0xAD4B, 0x80DC, 0xD060, 0x80DD, 0xAD4F, 0x80DE, 0xAD4D, 0x80E0, 0xD058, 0x80E1, 0xAD4A, 0x80E3, 0xD05E, + 0x80E4, 0xAD4E, 0x80E5, 0xAD45, 0x80E6, 0xD066, 0x80ED, 0xAFDA, 0x80EF, 0xAFE3, 0x80F0, 0xAFD8, 0x80F1, 0xAFD6, 0x80F2, 0xD36A, + 0x80F3, 0xAFDE, 0x80F4, 0xAFDB, 0x80F5, 0xD36C, 0x80F8, 0xAFDD, 0x80F9, 0xD36B, 0x80FA, 0xD369, 0x80FB, 0xD36E, 0x80FC, 0xAFE2, + 0x80FD, 0xAFE0, 0x80FE, 0xDB48, 0x8100, 0xD36F, 0x8101, 0xD36D, 0x8102, 0xAFD7, 0x8105, 0xAFD9, 0x8106, 0xAFDC, 0x8108, 0xAFDF, + 0x810A, 0xAFE1, 0x8115, 0xD74E, 0x8116, 0xB2E4, 0x8118, 0xD745, 0x8119, 0xD747, 0x811B, 0xD748, 0x811D, 0xD750, 0x811E, 0xD74C, + 0x811F, 0xD74A, 0x8121, 0xD74D, 0x8122, 0xD751, 0x8123, 0xB2E5, 0x8124, 0xB2E9, 0x8125, 0xD746, 0x8127, 0xD74F, 0x8129, 0xB2E7, + 0x812B, 0xB2E6, 0x812C, 0xD74B, 0x812D, 0xD749, 0x812F, 0xB2E3, 0x8130, 0xB2E8, 0x8139, 0xB5C8, 0x813A, 0xDB51, 0x813D, 0xDB4F, + 0x813E, 0xB5CA, 0x8143, 0xDB4A, 0x8144, 0xDFA1, 0x8146, 0xB5C9, 0x8147, 0xDB4E, 0x814A, 0xDB4B, 0x814B, 0xB5C5, 0x814C, 0xB5CB, + 0x814D, 0xDB50, 0x814E, 0xB5C7, 0x814F, 0xDB4D, 0x8150, 0xBB47, 0x8151, 0xB5C6, 0x8152, 0xDB4C, 0x8153, 0xB5CC, 0x8154, 0xB5C4, + 0x8155, 0xB5C3, 0x815B, 0xDF77, 0x815C, 0xDF75, 0x815E, 0xDF7B, 0x8160, 0xDF73, 0x8161, 0xDFA2, 0x8162, 0xDF78, 0x8164, 0xDF72, + 0x8165, 0xB87B, 0x8166, 0xB8A3, 0x8167, 0xDF7D, 0x8169, 0xDF76, 0x816B, 0xB87E, 0x816E, 0xB87C, 0x816F, 0xDF7E, 0x8170, 0xB879, + 0x8171, 0xB878, 0x8172, 0xDF79, 0x8173, 0xB87D, 0x8174, 0xB5CD, 0x8176, 0xDF7C, 0x8177, 0xDF74, 0x8178, 0xB87A, 0x8179, 0xB8A1, + 0x817A, 0xB8A2, 0x817F, 0xBB4C, 0x8180, 0xBB48, 0x8182, 0xBB4D, 0x8183, 0xE3A6, 0x8186, 0xE3A5, 0x8187, 0xE3A7, 0x8188, 0xBB4A, + 0x8189, 0xE3A4, 0x818A, 0xBB4B, 0x818B, 0xE3AA, 0x818C, 0xE3A9, 0x818D, 0xE3A8, 0x818F, 0xBB49, 0x8195, 0xE741, 0x8197, 0xE744, + 0x8198, 0xBDA8, 0x8199, 0xE743, 0x819A, 0xBDA7, 0x819B, 0xBDA3, 0x819C, 0xBDA4, 0x819D, 0xBDA5, 0x819E, 0xE740, 0x819F, 0xE6FE, + 0x81A0, 0xBDA6, 0x81A2, 0xE742, 0x81A3, 0xE6FD, 0x81A6, 0xEAE9, 0x81A7, 0xEAF3, 0x81A8, 0xBFB1, 0x81A9, 0xBFB0, 0x81AB, 0xEAED, + 0x81AC, 0xEAEF, 0x81AE, 0xEAEA, 0x81B0, 0xEAEE, 0x81B1, 0xEAE8, 0x81B2, 0xEAF1, 0x81B3, 0xBFAF, 0x81B4, 0xEAF0, 0x81B5, 0xEAEC, + 0x81B7, 0xEAF2, 0x81B9, 0xEAEB, 0x81BA, 0xC174, 0x81BB, 0xEDE8, 0x81BC, 0xEDEE, 0x81BD, 0xC178, 0x81BE, 0xC17A, 0x81BF, 0xC177, + 0x81C0, 0xC176, 0x81C2, 0xC175, 0x81C3, 0xC173, 0x81C4, 0xEDE9, 0x81C5, 0xEDEC, 0x81C6, 0xC172, 0x81C7, 0xEDED, 0x81C9, 0xC179, + 0x81CA, 0xEDEB, 0x81CC, 0xEDEA, 0x81CD, 0xC2C0, 0x81CF, 0xC2C1, 0x81D0, 0xF0A1, 0x81D1, 0xF07D, 0x81D2, 0xF07E, 0x81D5, 0xF2C2, + 0x81D7, 0xF2C1, 0x81D8, 0xC3BE, 0x81D9, 0xF4B4, 0x81DA, 0xC4A4, 0x81DB, 0xF4B3, 0x81DD, 0xF5F0, 0x81DE, 0xF745, 0x81DF, 0xC5A6, + 0x81E0, 0xF943, 0x81E1, 0xF944, 0x81E2, 0xC5D8, 0x81E3, 0xA6DA, 0x81E5, 0xAAD7, 0x81E6, 0xDB52, 0x81E7, 0xBB4E, 0x81E8, 0xC17B, + 0x81E9, 0xEDEF, 0x81EA, 0xA6DB, 0x81EC, 0xAFE5, 0x81ED, 0xAFE4, 0x81EE, 0xDB53, 0x81F2, 0xEAF4, 0x81F3, 0xA6DC, 0x81F4, 0xAD50, + 0x81F7, 0xDB54, 0x81F8, 0xDB55, 0x81F9, 0xDB56, 0x81FA, 0xBB4F, 0x81FB, 0xBFB2, 0x81FC, 0xA6DD, 0x81FE, 0xAAD8, 0x81FF, 0xD068, + 0x8200, 0xAFE6, 0x8201, 0xD370, 0x8202, 0xB2EA, 0x8204, 0xDB57, 0x8205, 0xB8A4, 0x8207, 0xBB50, 0x8208, 0xBFB3, 0x8209, 0xC17C, + 0x820A, 0xC2C2, 0x820B, 0xF4B5, 0x820C, 0xA6DE, 0x820D, 0xAAD9, 0x8210, 0xAFE7, 0x8211, 0xD752, 0x8212, 0xB5CE, 0x8214, 0xBB51, + 0x8215, 0xE3AB, 0x8216, 0xE745, 0x821B, 0xA6DF, 0x821C, 0xB5CF, 0x821D, 0xDFA3, 0x821E, 0xBB52, 0x821F, 0xA6E0, 0x8220, 0xCDB1, + 0x8221, 0xD069, 0x8222, 0xAD51, 0x8225, 0xD372, 0x8228, 0xAFEA, 0x822A, 0xAFE8, 0x822B, 0xAFE9, 0x822C, 0xAFEB, 0x822F, 0xD371, + 0x8232, 0xD757, 0x8233, 0xD754, 0x8234, 0xD756, 0x8235, 0xB2EB, 0x8236, 0xB2ED, 0x8237, 0xB2EC, 0x8238, 0xD753, 0x8239, 0xB2EE, + 0x823A, 0xD755, 0x823C, 0xDB58, 0x823D, 0xDB59, 0x823F, 0xDB5A, 0x8240, 0xDFA6, 0x8242, 0xDFA7, 0x8244, 0xDFA5, 0x8245, 0xDFA8, + 0x8247, 0xB8A5, 0x8249, 0xDFA4, 0x824B, 0xBB53, 0x824E, 0xE74A, 0x824F, 0xE746, 0x8250, 0xE749, 0x8251, 0xE74B, 0x8252, 0xE748, + 0x8253, 0xE747, 0x8255, 0xEAF5, 0x8256, 0xEAF6, 0x8257, 0xEAF7, 0x8258, 0xBFB4, 0x8259, 0xBFB5, 0x825A, 0xEDF1, 0x825B, 0xEDF0, + 0x825C, 0xEDF2, 0x825E, 0xF0A3, 0x825F, 0xF0A2, 0x8261, 0xF2C4, 0x8263, 0xF2C5, 0x8264, 0xF2C3, 0x8266, 0xC4A5, 0x8268, 0xF4B6, + 0x8269, 0xF4B7, 0x826B, 0xF746, 0x826C, 0xF7EF, 0x826D, 0xF8BB, 0x826E, 0xA6E1, 0x826F, 0xA87D, 0x8271, 0xC17D, 0x8272, 0xA6E2, + 0x8274, 0xD758, 0x8275, 0xDB5B, 0x8277, 0xC641, 0x8278, 0xCA4A, 0x827C, 0xCA4B, 0x827D, 0xCA4D, 0x827E, 0xA6E3, 0x827F, 0xCA4E, + 0x8280, 0xCA4C, 0x8283, 0xCBA2, 0x8284, 0xCBA3, 0x8285, 0xCB7B, 0x828A, 0xCBA1, 0x828B, 0xA8A1, 0x828D, 0xA8A2, 0x828E, 0xCB7C, + 0x828F, 0xCB7A, 0x8290, 0xCB79, 0x8291, 0xCB7D, 0x8292, 0xA87E, 0x8293, 0xCB7E, 0x8294, 0xD06A, 0x8298, 0xCDB6, 0x8299, 0xAADC, + 0x829A, 0xCDB5, 0x829B, 0xCDB7, 0x829D, 0xAADB, 0x829E, 0xCDBC, 0x829F, 0xAADF, 0x82A0, 0xCDB2, 0x82A1, 0xCDC0, 0x82A2, 0xCDC6, + 0x82A3, 0xAAE6, 0x82A4, 0xCDC3, 0x82A5, 0xAAE3, 0x82A7, 0xCDB9, 0x82A8, 0xCDBF, 0x82A9, 0xCDC1, 0x82AB, 0xCDB4, 0x82AC, 0xAAE2, + 0x82AD, 0xAADD, 0x82AE, 0xCDBA, 0x82AF, 0xAAE4, 0x82B0, 0xAAE7, 0x82B1, 0xAAE1, 0x82B3, 0xAADA, 0x82B4, 0xCDBE, 0x82B5, 0xCDB8, + 0x82B6, 0xCDC5, 0x82B7, 0xAAE9, 0x82B8, 0xAAE5, 0x82B9, 0xAAE0, 0x82BA, 0xCDBD, 0x82BB, 0xAFEC, 0x82BC, 0xCDBB, 0x82BD, 0xAADE, + 0x82BE, 0xAAE8, 0x82C0, 0xCDB3, 0x82C2, 0xCDC2, 0x82C3, 0xCDC4, 0x82D1, 0xAD62, 0x82D2, 0xAD5C, 0x82D3, 0xAD64, 0x82D4, 0xAD61, + 0x82D5, 0xD071, 0x82D6, 0xD074, 0x82D7, 0xAD5D, 0x82D9, 0xD06B, 0x82DB, 0xAD56, 0x82DC, 0xAD60, 0x82DE, 0xAD63, 0x82DF, 0xAD65, + 0x82E0, 0xD0A2, 0x82E1, 0xD077, 0x82E3, 0xAD55, 0x82E4, 0xD0A1, 0x82E5, 0xAD59, 0x82E6, 0xAD57, 0x82E7, 0xAD52, 0x82E8, 0xD06F, + 0x82EA, 0xD07E, 0x82EB, 0xD073, 0x82EC, 0xD076, 0x82ED, 0xD0A5, 0x82EF, 0xAD66, 0x82F0, 0xD07D, 0x82F1, 0xAD5E, 0x82F2, 0xD078, + 0x82F3, 0xD0A4, 0x82F4, 0xD075, 0x82F5, 0xD079, 0x82F6, 0xD07C, 0x82F9, 0xD06D, 0x82FA, 0xD0A3, 0x82FB, 0xD07B, 0x82FE, 0xD06C, + 0x8300, 0xD070, 0x8301, 0xAD5F, 0x8302, 0xAD5A, 0x8303, 0xAD53, 0x8304, 0xAD58, 0x8305, 0xAD54, 0x8306, 0xAD67, 0x8307, 0xD06E, + 0x8308, 0xD3A5, 0x8309, 0xAD5B, 0x830C, 0xD07A, 0x830D, 0xCE41, 0x8316, 0xD3A8, 0x8317, 0xAFFA, 0x8319, 0xD376, 0x831B, 0xD3A3, + 0x831C, 0xD37D, 0x831E, 0xD3B2, 0x8320, 0xD3AA, 0x8322, 0xD37E, 0x8324, 0xD3A9, 0x8325, 0xD378, 0x8326, 0xD37C, 0x8327, 0xD3B5, + 0x8328, 0xAFFD, 0x8329, 0xD3AD, 0x832A, 0xD3A4, 0x832B, 0xAFED, 0x832C, 0xD3B3, 0x832D, 0xD374, 0x832F, 0xD3AC, 0x8331, 0xAFFC, + 0x8332, 0xAFF7, 0x8333, 0xD373, 0x8334, 0xAFF5, 0x8335, 0xAFF4, 0x8336, 0xAFF9, 0x8337, 0xD3AB, 0x8338, 0xAFF1, 0x8339, 0xAFF8, + 0x833A, 0xD072, 0x833B, 0xDB5C, 0x833C, 0xD3A6, 0x833F, 0xD37A, 0x8340, 0xAFFB, 0x8341, 0xD37B, 0x8342, 0xD3A1, 0x8343, 0xAFFE, + 0x8344, 0xD375, 0x8345, 0xD3AF, 0x8347, 0xD3AE, 0x8348, 0xD3B6, 0x8349, 0xAFF3, 0x834A, 0xAFF0, 0x834B, 0xD3B4, 0x834C, 0xD3B0, + 0x834D, 0xD3A7, 0x834E, 0xD3A2, 0x834F, 0xAFF6, 0x8350, 0xAFF2, 0x8351, 0xD377, 0x8352, 0xAFEE, 0x8353, 0xD3B1, 0x8354, 0xAFEF, + 0x8356, 0xD379, 0x8373, 0xD75E, 0x8374, 0xD760, 0x8375, 0xD765, 0x8376, 0xD779, 0x8377, 0xB2FC, 0x8378, 0xB2F2, 0x837A, 0xD75D, + 0x837B, 0xB2FD, 0x837C, 0xB2FE, 0x837D, 0xD768, 0x837E, 0xD76F, 0x837F, 0xD775, 0x8381, 0xD762, 0x8383, 0xD769, 0x8386, 0xB340, + 0x8387, 0xD777, 0x8388, 0xD772, 0x8389, 0xB2FA, 0x838A, 0xB2F8, 0x838B, 0xD76E, 0x838C, 0xD76A, 0x838D, 0xD75C, 0x838E, 0xB2EF, + 0x838F, 0xD761, 0x8390, 0xD759, 0x8392, 0xB2F7, 0x8393, 0xB2F9, 0x8394, 0xD766, 0x8395, 0xD763, 0x8396, 0xB2F4, 0x8397, 0xD773, + 0x8398, 0xB2F1, 0x8399, 0xD764, 0x839A, 0xD77A, 0x839B, 0xD76C, 0x839D, 0xD76B, 0x839E, 0xB2F0, 0x83A0, 0xB2FB, 0x83A2, 0xB2F3, + 0x83A3, 0xD75A, 0x83A4, 0xD75F, 0x83A5, 0xD770, 0x83A6, 0xD776, 0x83A7, 0xB341, 0x83A8, 0xD75B, 0x83A9, 0xD767, 0x83AA, 0xD76D, + 0x83AB, 0xB2F6, 0x83AE, 0xD778, 0x83AF, 0xD771, 0x83B0, 0xD774, 0x83BD, 0xB2F5, 0x83BF, 0xDB6C, 0x83C0, 0xDB60, 0x83C1, 0xB5D7, + 0x83C2, 0xDB7D, 0x83C3, 0xDBA7, 0x83C4, 0xDBAA, 0x83C5, 0xB5D5, 0x83C6, 0xDB68, 0x83C7, 0xDBA3, 0x83C8, 0xDB69, 0x83C9, 0xDB77, + 0x83CA, 0xB5E2, 0x83CB, 0xDB73, 0x83CC, 0xB5DF, 0x83CE, 0xDB74, 0x83CF, 0xDB5D, 0x83D1, 0xDBA4, 0x83D4, 0xB5E8, 0x83D5, 0xDBA1, + 0x83D6, 0xDB75, 0x83D7, 0xDBAC, 0x83D8, 0xDB70, 0x83D9, 0xDFC8, 0x83DB, 0xDBAF, 0x83DC, 0xB5E6, 0x83DD, 0xDB6E, 0x83DE, 0xDB7A, + 0x83DF, 0xB5E9, 0x83E0, 0xB5D4, 0x83E1, 0xDB72, 0x83E2, 0xDBAD, 0x83E3, 0xDB6B, 0x83E4, 0xDB64, 0x83E5, 0xDB6F, 0x83E7, 0xDB63, + 0x83E8, 0xDB61, 0x83E9, 0xB5D0, 0x83EA, 0xDBA5, 0x83EB, 0xDB6A, 0x83EC, 0xDBA8, 0x83EE, 0xDBA9, 0x83EF, 0xB5D8, 0x83F0, 0xB5DD, + 0x83F1, 0xB5D9, 0x83F2, 0xB5E1, 0x83F3, 0xDB7E, 0x83F4, 0xB5DA, 0x83F5, 0xDB76, 0x83F6, 0xDB66, 0x83F8, 0xB5D2, 0x83F9, 0xDB5E, + 0x83FA, 0xDBA2, 0x83FB, 0xDBAB, 0x83FC, 0xDB65, 0x83FD, 0xB5E0, 0x83FE, 0xDBB0, 0x83FF, 0xDB71, 0x8401, 0xDB6D, 0x8403, 0xB5D1, + 0x8404, 0xB5E5, 0x8406, 0xDB7C, 0x8407, 0xB5E7, 0x8409, 0xDB78, 0x840A, 0xB5DC, 0x840B, 0xB5D6, 0x840C, 0xB5DE, 0x840D, 0xB5D3, + 0x840E, 0xB5E4, 0x840F, 0xDB79, 0x8410, 0xDB67, 0x8411, 0xDB7B, 0x8412, 0xDB62, 0x8413, 0xDBA6, 0x841B, 0xDBAE, 0x8423, 0xDB5F, + 0x8429, 0xDFC7, 0x842B, 0xDFDD, 0x842C, 0xB855, 0x842D, 0xDFCC, 0x842F, 0xDFCA, 0x8430, 0xDFB5, 0x8431, 0xB8A9, 0x8432, 0xDFC5, + 0x8433, 0xDFD9, 0x8434, 0xDFC1, 0x8435, 0xB8B1, 0x8436, 0xDFD8, 0x8437, 0xDFBF, 0x8438, 0xB5E3, 0x8439, 0xDFCF, 0x843A, 0xDFC0, + 0x843B, 0xDFD6, 0x843C, 0xB8B0, 0x843D, 0xB8A8, 0x843F, 0xDFAA, 0x8440, 0xDFB2, 0x8442, 0xDFCB, 0x8443, 0xDFC3, 0x8444, 0xDFDC, + 0x8445, 0xDFC6, 0x8446, 0xB8B6, 0x8447, 0xDFD7, 0x8449, 0xB8AD, 0x844B, 0xDFC9, 0x844C, 0xDFD1, 0x844D, 0xDFB6, 0x844E, 0xDFD0, + 0x8450, 0xDFE1, 0x8451, 0xDFB1, 0x8452, 0xDFD2, 0x8454, 0xDFDF, 0x8456, 0xDFAB, 0x8457, 0xB5DB, 0x8459, 0xDFB9, 0x845A, 0xDFB8, + 0x845B, 0xB8AF, 0x845D, 0xDFBC, 0x845E, 0xDFBE, 0x845F, 0xDFCD, 0x8460, 0xDFDE, 0x8461, 0xB8B2, 0x8463, 0xB8B3, 0x8465, 0xDFB0, + 0x8466, 0xB8AB, 0x8467, 0xDFB4, 0x8468, 0xDFDA, 0x8469, 0xB8B4, 0x846B, 0xB8AC, 0x846C, 0xB8AE, 0x846D, 0xB8B5, 0x846E, 0xDFE0, + 0x846F, 0xDFD3, 0x8470, 0xDFCE, 0x8473, 0xDFBB, 0x8474, 0xDFBA, 0x8475, 0xB8AA, 0x8476, 0xDFAC, 0x8477, 0xB8A7, 0x8478, 0xDFC4, + 0x8479, 0xDFAD, 0x847A, 0xDFC2, 0x847D, 0xDFB7, 0x847E, 0xDFDB, 0x8482, 0xB8A6, 0x8486, 0xDFB3, 0x848D, 0xDFAF, 0x848E, 0xDFD5, + 0x848F, 0xDFAE, 0x8490, 0xBB60, 0x8491, 0xE3D3, 0x8494, 0xE3C2, 0x8497, 0xE3AC, 0x8498, 0xE3CA, 0x8499, 0xBB58, 0x849A, 0xE3BB, + 0x849B, 0xE3C5, 0x849C, 0xBB5B, 0x849D, 0xE3BE, 0x849E, 0xBB59, 0x849F, 0xE3AF, 0x84A0, 0xE3CD, 0x84A1, 0xE3AE, 0x84A2, 0xE3C1, + 0x84A4, 0xE3AD, 0x84A7, 0xE3BF, 0x84A8, 0xE3C8, 0x84A9, 0xE3C6, 0x84AA, 0xE3BA, 0x84AB, 0xE3B5, 0x84AC, 0xE3B3, 0x84AE, 0xE3B4, + 0x84AF, 0xE3C7, 0x84B0, 0xE3D2, 0x84B1, 0xE3BC, 0x84B2, 0xBB5A, 0x84B4, 0xE3B7, 0x84B6, 0xE3CB, 0x84B8, 0xBB5D, 0x84B9, 0xE3B6, + 0x84BA, 0xE3B0, 0x84BB, 0xE3C0, 0x84BC, 0xBB61, 0x84BF, 0xBB55, 0x84C0, 0xBB5E, 0x84C1, 0xE3B8, 0x84C2, 0xE3B2, 0x84C4, 0xBB57, + 0x84C5, 0xDFD4, 0x84C6, 0xBB56, 0x84C7, 0xE3C3, 0x84C9, 0xBB54, 0x84CA, 0xBB63, 0x84CB, 0xBB5C, 0x84CC, 0xE3C4, 0x84CD, 0xE3B9, + 0x84CE, 0xE3B1, 0x84CF, 0xE3CC, 0x84D0, 0xE3BD, 0x84D1, 0xBB62, 0x84D2, 0xE3D0, 0x84D3, 0xBB5F, 0x84D4, 0xE3CF, 0x84D6, 0xE3C9, + 0x84D7, 0xE3CE, 0x84DB, 0xE3D1, 0x84E7, 0xE773, 0x84E8, 0xE774, 0x84E9, 0xE767, 0x84EA, 0xE766, 0x84EB, 0xE762, 0x84EC, 0xBDB4, + 0x84EE, 0xBDAC, 0x84EF, 0xE776, 0x84F0, 0xE775, 0x84F1, 0xDFA9, 0x84F2, 0xE75F, 0x84F3, 0xE763, 0x84F4, 0xE75D, 0x84F6, 0xE770, + 0x84F7, 0xE761, 0x84F9, 0xE777, 0x84FA, 0xE75A, 0x84FB, 0xE758, 0x84FC, 0xE764, 0x84FD, 0xE76E, 0x84FE, 0xE769, 0x84FF, 0xBDB6, + 0x8500, 0xE74F, 0x8502, 0xE76D, 0x8506, 0xBDB7, 0x8507, 0xDFBD, 0x8508, 0xE75B, 0x8509, 0xE752, 0x850A, 0xE755, 0x850B, 0xE77B, + 0x850C, 0xE75C, 0x850D, 0xE753, 0x850E, 0xE751, 0x850F, 0xE74E, 0x8511, 0xBDB0, 0x8512, 0xE765, 0x8513, 0xBDAF, 0x8514, 0xBDB3, + 0x8515, 0xE760, 0x8516, 0xE768, 0x8517, 0xBDA9, 0x8518, 0xE778, 0x8519, 0xE77C, 0x851A, 0xBDAB, 0x851C, 0xE757, 0x851D, 0xE76B, + 0x851E, 0xE76F, 0x851F, 0xE754, 0x8520, 0xE779, 0x8521, 0xBDB2, 0x8523, 0xBDB1, 0x8524, 0xE74C, 0x8525, 0xBDB5, 0x8526, 0xE772, + 0x8527, 0xE756, 0x8528, 0xE76A, 0x8529, 0xE750, 0x852A, 0xE75E, 0x852B, 0xE759, 0x852C, 0xBDAD, 0x852D, 0xBDAE, 0x852E, 0xE76C, + 0x852F, 0xE77D, 0x8530, 0xE77A, 0x8531, 0xE771, 0x853B, 0xE74D, 0x853D, 0xBDAA, 0x853E, 0xEB49, 0x8540, 0xEB40, 0x8541, 0xEB43, + 0x8543, 0xBFBB, 0x8544, 0xEB45, 0x8545, 0xEAF9, 0x8546, 0xEB41, 0x8547, 0xEB47, 0x8548, 0xBFB8, 0x8549, 0xBFBC, 0x854A, 0xBFB6, + 0x854D, 0xEAFB, 0x854E, 0xEB4C, 0x8551, 0xEB46, 0x8553, 0xEAFC, 0x8554, 0xEB55, 0x8555, 0xEB4F, 0x8556, 0xEAF8, 0x8557, 0xEE46, + 0x8558, 0xEAFE, 0x8559, 0xBFB7, 0x855B, 0xEB4A, 0x855D, 0xEB54, 0x855E, 0xBFBF, 0x8560, 0xEB51, 0x8561, 0xEAFD, 0x8562, 0xEB44, + 0x8563, 0xEB48, 0x8564, 0xEB42, 0x8565, 0xEB56, 0x8566, 0xEB53, 0x8567, 0xEB50, 0x8568, 0xBFB9, 0x8569, 0xBFBA, 0x856A, 0xBFBE, + 0x856B, 0xEAFA, 0x856C, 0xEB57, 0x856D, 0xBFBD, 0x856E, 0xEB4D, 0x8571, 0xEB4B, 0x8575, 0xEB4E, 0x8576, 0xEE53, 0x8577, 0xEE40, + 0x8578, 0xEE45, 0x8579, 0xEE52, 0x857A, 0xEE44, 0x857B, 0xEDFB, 0x857C, 0xEE41, 0x857E, 0xC1A2, 0x8580, 0xEDF4, 0x8581, 0xEE4D, + 0x8582, 0xEE4F, 0x8583, 0xEDF3, 0x8584, 0xC1A1, 0x8585, 0xEE51, 0x8586, 0xEE49, 0x8587, 0xC1A8, 0x8588, 0xEE50, 0x8589, 0xEE42, + 0x858A, 0xC1AA, 0x858B, 0xEDF9, 0x858C, 0xEB52, 0x858D, 0xEE4A, 0x858E, 0xEE47, 0x858F, 0xEDF5, 0x8590, 0xEE55, 0x8591, 0xC1A4, + 0x8594, 0xC1A5, 0x8595, 0xEDF7, 0x8596, 0xEE48, 0x8598, 0xEE54, 0x8599, 0xEE4B, 0x859A, 0xEDFD, 0x859B, 0xC1A7, 0x859C, 0xC1A3, + 0x859D, 0xEE4C, 0x859E, 0xEDFE, 0x859F, 0xEE56, 0x85A0, 0xEDF8, 0x85A1, 0xEE43, 0x85A2, 0xEE4E, 0x85A3, 0xEDFA, 0x85A4, 0xEDFC, + 0x85A6, 0xC2CB, 0x85A7, 0xEDF6, 0x85A8, 0xC1A9, 0x85A9, 0xC2C4, 0x85AA, 0xC17E, 0x85AF, 0xC1A6, 0x85B0, 0xC2C8, 0x85B1, 0xF0B3, + 0x85B3, 0xF0A9, 0x85B4, 0xF0A4, 0x85B5, 0xF0AA, 0x85B6, 0xF0B4, 0x85B7, 0xF0B8, 0x85B8, 0xF0B7, 0x85B9, 0xC2CA, 0x85BA, 0xC2C9, + 0x85BD, 0xF0AB, 0x85BE, 0xF0B9, 0x85BF, 0xF0AE, 0x85C0, 0xF0A6, 0x85C2, 0xF0A8, 0x85C3, 0xF0A7, 0x85C4, 0xF0AD, 0x85C5, 0xF0B2, + 0x85C6, 0xF0A5, 0x85C7, 0xF0AC, 0x85C8, 0xF0B1, 0x85C9, 0xC2C7, 0x85CB, 0xF0AF, 0x85CD, 0xC2C5, 0x85CE, 0xF0B0, 0x85CF, 0xC2C3, + 0x85D0, 0xC2C6, 0x85D1, 0xF2D5, 0x85D2, 0xF0B5, 0x85D5, 0xC3C2, 0x85D7, 0xF2CD, 0x85D8, 0xF2D1, 0x85D9, 0xF2C9, 0x85DA, 0xF2CC, + 0x85DC, 0xF2D4, 0x85DD, 0xC3C0, 0x85DE, 0xF2D9, 0x85DF, 0xF2D2, 0x85E1, 0xF2CA, 0x85E2, 0xF2DA, 0x85E3, 0xF2D3, 0x85E4, 0xC3C3, + 0x85E5, 0xC3C4, 0x85E6, 0xF2D7, 0x85E8, 0xF2CB, 0x85E9, 0xC3BF, 0x85EA, 0xC3C1, 0x85EB, 0xF2C6, 0x85EC, 0xF2CE, 0x85ED, 0xF2C8, + 0x85EF, 0xF2D8, 0x85F0, 0xF2D6, 0x85F1, 0xF2C7, 0x85F2, 0xF2CF, 0x85F6, 0xF4BE, 0x85F7, 0xC3C5, 0x85F8, 0xF2D0, 0x85F9, 0xC4A7, + 0x85FA, 0xC4A9, 0x85FB, 0xC4A6, 0x85FD, 0xF4C3, 0x85FE, 0xF4BB, 0x85FF, 0xF4B9, 0x8600, 0xF4BD, 0x8601, 0xF4BA, 0x8604, 0xF4BF, + 0x8605, 0xF4C1, 0x8606, 0xC4AA, 0x8607, 0xC4AC, 0x8609, 0xF4C0, 0x860A, 0xC4AD, 0x860B, 0xC4AB, 0x860C, 0xF4C2, 0x8611, 0xC4A8, + 0x8617, 0xC4F4, 0x8618, 0xF5F1, 0x8619, 0xF5F7, 0x861A, 0xC4F6, 0x861B, 0xF4BC, 0x861C, 0xF5F6, 0x861E, 0xF5FD, 0x861F, 0xF5F4, + 0x8620, 0xF5FB, 0x8621, 0xF5FA, 0x8622, 0xF4B8, 0x8623, 0xF5F5, 0x8624, 0xF0B6, 0x8625, 0xF5FE, 0x8626, 0xF5F3, 0x8627, 0xF5F8, + 0x8629, 0xF5FC, 0x862A, 0xF5F2, 0x862C, 0xF74A, 0x862D, 0xC4F5, 0x862E, 0xF5F9, 0x8631, 0xF7F4, 0x8632, 0xF74B, 0x8633, 0xF749, + 0x8634, 0xF747, 0x8635, 0xF748, 0x8636, 0xF74C, 0x8638, 0xC5D9, 0x8639, 0xF7F2, 0x863A, 0xF7F0, 0x863B, 0xF7F5, 0x863C, 0xF7F3, + 0x863E, 0xF7F6, 0x863F, 0xC5DA, 0x8640, 0xF7F1, 0x8643, 0xF8BC, 0x8646, 0xF945, 0x8647, 0xF946, 0x8648, 0xF947, 0x864B, 0xF9C7, + 0x864C, 0xF9BD, 0x864D, 0xCA4F, 0x864E, 0xAAEA, 0x8650, 0xAD68, 0x8652, 0xD3B8, 0x8653, 0xD3B7, 0x8654, 0xB040, 0x8655, 0xB342, + 0x8656, 0xD77C, 0x8659, 0xD77B, 0x865B, 0xB5EA, 0x865C, 0xB8B8, 0x865E, 0xB8B7, 0x865F, 0xB8B9, 0x8661, 0xE3D4, 0x8662, 0xE77E, + 0x8663, 0xEB58, 0x8664, 0xEB5A, 0x8665, 0xEB59, 0x8667, 0xC1AB, 0x8668, 0xEE57, 0x8669, 0xF0BA, 0x866A, 0xF9A5, 0x866B, 0xA6E4, + 0x866D, 0xCDC9, 0x866E, 0xCDCA, 0x866F, 0xCDC8, 0x8670, 0xCDC7, 0x8671, 0xAAEB, 0x8673, 0xD0A9, 0x8674, 0xD0A7, 0x8677, 0xD0A6, + 0x8679, 0xAD69, 0x867A, 0xAD6B, 0x867B, 0xAD6A, 0x867C, 0xD0A8, 0x8685, 0xD3C4, 0x8686, 0xD3C1, 0x8687, 0xD3BF, 0x868A, 0xB041, + 0x868B, 0xD3C2, 0x868C, 0xB046, 0x868D, 0xD3BC, 0x868E, 0xD3CB, 0x8690, 0xD3CD, 0x8691, 0xD3BD, 0x8693, 0xB043, 0x8694, 0xD3CE, + 0x8695, 0xD3C9, 0x8696, 0xD3BB, 0x8697, 0xD3C0, 0x8698, 0xD3CA, 0x8699, 0xD3C6, 0x869A, 0xD3C3, 0x869C, 0xB048, 0x869D, 0xD3CC, + 0x869E, 0xD3BE, 0x86A1, 0xD3C7, 0x86A2, 0xD3B9, 0x86A3, 0xB047, 0x86A4, 0xB044, 0x86A5, 0xD3C5, 0x86A7, 0xD3C8, 0x86A8, 0xD3BA, + 0x86A9, 0xB045, 0x86AA, 0xB042, 0x86AF, 0xB34C, 0x86B0, 0xD7A5, 0x86B1, 0xB34B, 0x86B3, 0xD7A8, 0x86B4, 0xD7AB, 0x86B5, 0xB348, + 0x86B6, 0xB346, 0x86B7, 0xD77E, 0x86B8, 0xD7A9, 0x86B9, 0xD7A7, 0x86BA, 0xD7A4, 0x86BB, 0xD7AC, 0x86BC, 0xD7AD, 0x86BD, 0xD7AF, + 0x86BE, 0xD7B0, 0x86BF, 0xD77D, 0x86C0, 0xB345, 0x86C1, 0xD7A2, 0x86C2, 0xD7A1, 0x86C3, 0xD7AE, 0x86C4, 0xB347, 0x86C5, 0xD7A3, + 0x86C6, 0xB349, 0x86C7, 0xB344, 0x86C8, 0xD7A6, 0x86C9, 0xB34D, 0x86CB, 0xB34A, 0x86CC, 0xD7AA, 0x86D0, 0xB5F1, 0x86D1, 0xDBBF, + 0x86D3, 0xDBB4, 0x86D4, 0xB5EE, 0x86D6, 0xDFE7, 0x86D7, 0xDBBD, 0x86D8, 0xDBB1, 0x86D9, 0xB5EC, 0x86DA, 0xDBB6, 0x86DB, 0xB5EF, + 0x86DC, 0xDBBA, 0x86DD, 0xDBB8, 0x86DE, 0xB5F2, 0x86DF, 0xB5EB, 0x86E2, 0xDBB2, 0x86E3, 0xDBB5, 0x86E4, 0xB5F0, 0x86E6, 0xDBB3, + 0x86E8, 0xDBBE, 0x86E9, 0xDBBC, 0x86EA, 0xDBB7, 0x86EB, 0xDBB9, 0x86EC, 0xDBBB, 0x86ED, 0xB5ED, 0x86F5, 0xDFE8, 0x86F6, 0xDFEE, + 0x86F7, 0xDFE4, 0x86F8, 0xDFEA, 0x86F9, 0xB8BA, 0x86FA, 0xDFE6, 0x86FB, 0xB8C0, 0x86FE, 0xB8BF, 0x8700, 0xB8BE, 0x8701, 0xDFED, + 0x8702, 0xB8C1, 0x8703, 0xB8C2, 0x8704, 0xDFE3, 0x8705, 0xDFF0, 0x8706, 0xB8C3, 0x8707, 0xB8BD, 0x8708, 0xB8BC, 0x8709, 0xDFEC, + 0x870A, 0xB8C4, 0x870B, 0xDFE2, 0x870C, 0xDFE5, 0x870D, 0xDFEF, 0x870E, 0xDFEB, 0x8711, 0xE3F4, 0x8712, 0xE3E9, 0x8713, 0xB8BB, + 0x8718, 0xBB6A, 0x8719, 0xE3DD, 0x871A, 0xE3F2, 0x871B, 0xE3DE, 0x871C, 0xBB65, 0x871E, 0xE3DB, 0x8720, 0xE3E4, 0x8721, 0xE3DC, + 0x8722, 0xBB67, 0x8723, 0xE3D6, 0x8724, 0xE3F1, 0x8725, 0xBB68, 0x8726, 0xE3EE, 0x8727, 0xE3EF, 0x8728, 0xE3D7, 0x8729, 0xBB6D, + 0x872A, 0xE3E6, 0x872C, 0xE3E0, 0x872D, 0xE3E7, 0x872E, 0xE3DA, 0x8730, 0xE3F3, 0x8731, 0xE3EB, 0x8732, 0xE3E5, 0x8733, 0xE3D5, + 0x8734, 0xBB69, 0x8735, 0xE3EC, 0x8737, 0xBB6C, 0x8738, 0xE3F0, 0x873A, 0xE3EA, 0x873B, 0xBB66, 0x873C, 0xE3E8, 0x873E, 0xE3E2, + 0x873F, 0xBB64, 0x8740, 0xE3D9, 0x8741, 0xE3E1, 0x8742, 0xE3ED, 0x8743, 0xE3DF, 0x8746, 0xE3E3, 0x874C, 0xBDC1, 0x874D, 0xDFE9, + 0x874E, 0xE7B2, 0x874F, 0xE7BB, 0x8750, 0xE7B1, 0x8751, 0xE7AD, 0x8752, 0xE7AA, 0x8753, 0xBDC2, 0x8754, 0xE7A8, 0x8755, 0xBB6B, + 0x8756, 0xE7A1, 0x8757, 0xBDC0, 0x8758, 0xE7A7, 0x8759, 0xBDBF, 0x875A, 0xE7AC, 0x875B, 0xE7A9, 0x875C, 0xE7B9, 0x875D, 0xE7B4, + 0x875E, 0xE7AE, 0x875F, 0xE7B3, 0x8760, 0xBDBB, 0x8761, 0xE7AB, 0x8762, 0xE7BE, 0x8763, 0xE7A2, 0x8764, 0xE7A3, 0x8765, 0xE7BA, + 0x8766, 0xBDBC, 0x8767, 0xE7BF, 0x8768, 0xBDBE, 0x8769, 0xE7C0, 0x876A, 0xE7B0, 0x876B, 0xE3D8, 0x876C, 0xE7B6, 0x876D, 0xE7AF, + 0x876E, 0xE7B8, 0x876F, 0xE7B5, 0x8773, 0xE7A6, 0x8774, 0xBDB9, 0x8775, 0xE7BD, 0x8776, 0xBDBA, 0x8777, 0xE7A4, 0x8778, 0xBDBD, + 0x8779, 0xEB64, 0x877A, 0xE7B7, 0x877B, 0xE7BC, 0x8781, 0xEB61, 0x8782, 0xBDB8, 0x8783, 0xBFC0, 0x8784, 0xEB6B, 0x8785, 0xEB67, + 0x8787, 0xEB65, 0x8788, 0xEB60, 0x8789, 0xEB6F, 0x878D, 0xBFC4, 0x878F, 0xEB5C, 0x8790, 0xEB68, 0x8791, 0xEB69, 0x8792, 0xEB5F, + 0x8793, 0xEB5E, 0x8794, 0xEB6C, 0x8796, 0xEB62, 0x8797, 0xEB5D, 0x8798, 0xEB63, 0x879A, 0xEB6E, 0x879B, 0xEB5B, 0x879C, 0xEB6D, + 0x879D, 0xEB6A, 0x879E, 0xBFC2, 0x879F, 0xBFC1, 0x87A2, 0xBFC3, 0x87A3, 0xEB66, 0x87A4, 0xF0CB, 0x87AA, 0xEE59, 0x87AB, 0xC1B1, + 0x87AC, 0xEE5D, 0x87AD, 0xEE5A, 0x87AE, 0xEE61, 0x87AF, 0xEE67, 0x87B0, 0xEE5C, 0x87B2, 0xEE70, 0x87B3, 0xC1AE, 0x87B4, 0xEE6A, + 0x87B5, 0xEE5F, 0x87B6, 0xEE6B, 0x87B7, 0xEE66, 0x87B8, 0xEE6D, 0x87B9, 0xEE5E, 0x87BA, 0xC1B3, 0x87BB, 0xC1B2, 0x87BC, 0xEE60, + 0x87BD, 0xEE6E, 0x87BE, 0xEE58, 0x87BF, 0xEE6C, 0x87C0, 0xC1AC, 0x87C2, 0xEE64, 0x87C3, 0xEE63, 0x87C4, 0xEE68, 0x87C5, 0xEE5B, + 0x87C6, 0xC1B0, 0x87C8, 0xC1B4, 0x87C9, 0xEE62, 0x87CA, 0xEE69, 0x87CB, 0xC1B5, 0x87CC, 0xEE65, 0x87D1, 0xC1AD, 0x87D2, 0xC1AF, + 0x87D3, 0xF0C7, 0x87D4, 0xF0C5, 0x87D7, 0xF0CC, 0x87D8, 0xF0C9, 0x87D9, 0xF0CD, 0x87DB, 0xF0BE, 0x87DC, 0xF0C6, 0x87DD, 0xF0D1, + 0x87DE, 0xEE6F, 0x87DF, 0xF0C2, 0x87E0, 0xC2CF, 0x87E1, 0xE7A5, 0x87E2, 0xF0BD, 0x87E3, 0xF0CA, 0x87E4, 0xF0C4, 0x87E5, 0xF0C1, + 0x87E6, 0xF0BC, 0x87E7, 0xF0BB, 0x87E8, 0xF0D0, 0x87EA, 0xF0C0, 0x87EB, 0xF0BF, 0x87EC, 0xC2CD, 0x87ED, 0xF0C8, 0x87EF, 0xC2CC, + 0x87F2, 0xC2CE, 0x87F3, 0xF0C3, 0x87F4, 0xF0CF, 0x87F6, 0xF2DE, 0x87F7, 0xF2DF, 0x87F9, 0xC3C9, 0x87FA, 0xF2DC, 0x87FB, 0xC3C6, + 0x87FC, 0xF2E4, 0x87FE, 0xC3CA, 0x87FF, 0xF2E6, 0x8800, 0xF2DB, 0x8801, 0xF0CE, 0x8802, 0xF2E8, 0x8803, 0xF2DD, 0x8805, 0xC3C7, + 0x8806, 0xF2E3, 0x8808, 0xF2E5, 0x8809, 0xF2E0, 0x880A, 0xF2E7, 0x880B, 0xF2E2, 0x880C, 0xF2E1, 0x880D, 0xC3C8, 0x8810, 0xF4C5, + 0x8811, 0xF4C6, 0x8813, 0xF4C8, 0x8814, 0xC4AE, 0x8815, 0xC4AF, 0x8816, 0xF4C9, 0x8817, 0xF4C7, 0x8819, 0xF4C4, 0x881B, 0xF642, + 0x881C, 0xF645, 0x881D, 0xF641, 0x881F, 0xC4FA, 0x8820, 0xF643, 0x8821, 0xC4F9, 0x8822, 0xC4F8, 0x8823, 0xC4F7, 0x8824, 0xF644, + 0x8825, 0xF751, 0x8826, 0xF74F, 0x8828, 0xF74E, 0x8829, 0xF640, 0x882A, 0xF750, 0x882B, 0xF646, 0x882C, 0xF74D, 0x882E, 0xF7F9, + 0x882F, 0xF7D7, 0x8830, 0xF7F7, 0x8831, 0xC5DB, 0x8832, 0xF7F8, 0x8833, 0xF7FA, 0x8835, 0xF8BF, 0x8836, 0xC5FA, 0x8837, 0xF8BE, + 0x8838, 0xF8BD, 0x8839, 0xC5FB, 0x883B, 0xC65A, 0x883C, 0xF96E, 0x883D, 0xF9A7, 0x883E, 0xF9A6, 0x883F, 0xF9A8, 0x8840, 0xA6E5, + 0x8841, 0xD0AA, 0x8843, 0xD3CF, 0x8844, 0xD3D0, 0x8848, 0xDBC0, 0x884A, 0xF647, 0x884B, 0xF8C0, 0x884C, 0xA6E6, 0x884D, 0xAD6C, + 0x884E, 0xD0AB, 0x8852, 0xD7B1, 0x8853, 0xB34E, 0x8855, 0xDBC2, 0x8856, 0xDBC1, 0x8857, 0xB5F3, 0x8859, 0xB8C5, 0x885A, 0xE7C1, + 0x885B, 0xBDC3, 0x885D, 0xBDC4, 0x8861, 0xBFC5, 0x8862, 0xC5FC, 0x8863, 0xA6E7, 0x8867, 0xD0AC, 0x8868, 0xAAED, 0x8869, 0xD0AE, + 0x886A, 0xD0AD, 0x886B, 0xAD6D, 0x886D, 0xD3D1, 0x886F, 0xD3D8, 0x8870, 0xB049, 0x8871, 0xD3D6, 0x8872, 0xD3D4, 0x8874, 0xD3DB, + 0x8875, 0xD3D2, 0x8876, 0xD3D3, 0x8877, 0xB04A, 0x8879, 0xB04E, 0x887C, 0xD3DC, 0x887D, 0xB04D, 0x887E, 0xD3DA, 0x887F, 0xD3D7, + 0x8880, 0xD3D5, 0x8881, 0xB04B, 0x8882, 0xB04C, 0x8883, 0xD3D9, 0x8888, 0xB350, 0x8889, 0xD7B2, 0x888B, 0xB355, 0x888C, 0xD7C2, + 0x888D, 0xB354, 0x888E, 0xD7C4, 0x8891, 0xD7B8, 0x8892, 0xB352, 0x8893, 0xD7C3, 0x8895, 0xD7B3, 0x8896, 0xB353, 0x8897, 0xD7BF, + 0x8898, 0xD7BB, 0x8899, 0xD7BD, 0x889A, 0xD7B7, 0x889B, 0xD7BE, 0x889E, 0xB34F, 0x889F, 0xD7BA, 0x88A1, 0xD7B9, 0x88A2, 0xD7B5, + 0x88A4, 0xD7C0, 0x88A7, 0xD7BC, 0x88A8, 0xD7B4, 0x88AA, 0xD7B6, 0x88AB, 0xB351, 0x88AC, 0xD7C1, 0x88B1, 0xB5F6, 0x88B2, 0xDBCD, + 0x88B6, 0xDBC9, 0x88B7, 0xDBCB, 0x88B8, 0xDBC6, 0x88B9, 0xDBC5, 0x88BA, 0xDBC3, 0x88BC, 0xDBCA, 0x88BD, 0xDBCC, 0x88BE, 0xDBC8, + 0x88C0, 0xDBC7, 0x88C1, 0xB5F4, 0x88C2, 0xB5F5, 0x88C9, 0xDBCF, 0x88CA, 0xB8CD, 0x88CB, 0xDFF2, 0x88CC, 0xDFF8, 0x88CD, 0xDFF3, + 0x88CE, 0xDFF4, 0x88CF, 0xF9D8, 0x88D0, 0xDFF9, 0x88D2, 0xB8CF, 0x88D4, 0xB8C7, 0x88D5, 0xB8CE, 0x88D6, 0xDFF1, 0x88D7, 0xDBC4, + 0x88D8, 0xB8CA, 0x88D9, 0xB8C8, 0x88DA, 0xDFF7, 0x88DB, 0xDFF6, 0x88DC, 0xB8C9, 0x88DD, 0xB8CB, 0x88DE, 0xDFF5, 0x88DF, 0xB8C6, + 0x88E1, 0xB8CC, 0x88E7, 0xE3F6, 0x88E8, 0xBB74, 0x88EB, 0xE442, 0x88EC, 0xE441, 0x88EE, 0xE3FB, 0x88EF, 0xBB76, 0x88F0, 0xE440, + 0x88F1, 0xE3F7, 0x88F2, 0xE3F8, 0x88F3, 0xBB6E, 0x88F4, 0xBB70, 0x88F6, 0xE3FD, 0x88F7, 0xE3F5, 0x88F8, 0xBB72, 0x88F9, 0xBB71, + 0x88FA, 0xE3F9, 0x88FB, 0xE3FE, 0x88FC, 0xE3FC, 0x88FD, 0xBB73, 0x88FE, 0xE3FA, 0x8901, 0xDBCE, 0x8902, 0xBB6F, 0x8905, 0xE7C2, + 0x8906, 0xE7C9, 0x8907, 0xBDC6, 0x8909, 0xE7CD, 0x890A, 0xBDCA, 0x890B, 0xE7C5, 0x890C, 0xE7C3, 0x890E, 0xE7CC, 0x8910, 0xBDC5, + 0x8911, 0xE7CB, 0x8912, 0xBDC7, 0x8913, 0xBDC8, 0x8914, 0xE7C4, 0x8915, 0xBDC9, 0x8916, 0xE7CA, 0x8917, 0xE7C6, 0x8918, 0xE7C7, + 0x8919, 0xE7C8, 0x891A, 0xBB75, 0x891E, 0xEB70, 0x891F, 0xEB7C, 0x8921, 0xBFCA, 0x8922, 0xEB77, 0x8923, 0xEB79, 0x8925, 0xBFC8, + 0x8926, 0xEB71, 0x8927, 0xEB75, 0x8929, 0xEB78, 0x892A, 0xBFC6, 0x892B, 0xBFC9, 0x892C, 0xEB7B, 0x892D, 0xEB73, 0x892E, 0xEB74, + 0x892F, 0xEB7A, 0x8930, 0xEB72, 0x8931, 0xEB76, 0x8932, 0xBFC7, 0x8933, 0xEE72, 0x8935, 0xEE71, 0x8936, 0xC1B7, 0x8937, 0xEE77, + 0x8938, 0xC1B9, 0x893B, 0xC1B6, 0x893C, 0xEE73, 0x893D, 0xC1BA, 0x893E, 0xEE74, 0x8941, 0xEE75, 0x8942, 0xEE78, 0x8944, 0xC1B8, + 0x8946, 0xF0D6, 0x8949, 0xF0D9, 0x894B, 0xF0D3, 0x894C, 0xF0D5, 0x894F, 0xF0D4, 0x8950, 0xF0D7, 0x8951, 0xF0D8, 0x8952, 0xEE76, + 0x8953, 0xF0D2, 0x8956, 0xC3CD, 0x8957, 0xF2EC, 0x8958, 0xF2EF, 0x8959, 0xF2F1, 0x895A, 0xF2EA, 0x895B, 0xF2EB, 0x895C, 0xF2EE, + 0x895D, 0xF2F0, 0x895E, 0xC3CE, 0x895F, 0xC3CC, 0x8960, 0xC3CB, 0x8961, 0xF2ED, 0x8962, 0xF2E9, 0x8963, 0xF4CA, 0x8964, 0xC4B0, + 0x8966, 0xF4CB, 0x8969, 0xF649, 0x896A, 0xC4FB, 0x896B, 0xF64B, 0x896C, 0xC4FC, 0x896D, 0xF648, 0x896E, 0xF64A, 0x896F, 0xC5A8, + 0x8971, 0xF752, 0x8972, 0xC5A7, 0x8973, 0xF7FD, 0x8974, 0xF7FC, 0x8976, 0xF7FB, 0x8979, 0xF948, 0x897A, 0xF949, 0x897B, 0xF94B, + 0x897C, 0xF94A, 0x897E, 0xCA50, 0x897F, 0xA6E8, 0x8981, 0xAD6E, 0x8982, 0xD7C5, 0x8983, 0xB5F7, 0x8985, 0xDFFA, 0x8986, 0xC2D0, + 0x8988, 0xF2F2, 0x898B, 0xA8A3, 0x898F, 0xB357, 0x8993, 0xB356, 0x8995, 0xDBD0, 0x8996, 0xB5F8, 0x8997, 0xDBD2, 0x8998, 0xDBD1, + 0x899B, 0xDFFB, 0x899C, 0xB8D0, 0x899D, 0xE443, 0x899E, 0xE446, 0x899F, 0xE445, 0x89A1, 0xE444, 0x89A2, 0xE7CE, 0x89A3, 0xE7D0, + 0x89A4, 0xE7CF, 0x89A6, 0xBFCC, 0x89AA, 0xBFCB, 0x89AC, 0xC1BB, 0x89AD, 0xEE79, 0x89AE, 0xEE7B, 0x89AF, 0xEE7A, 0x89B2, 0xC2D1, + 0x89B6, 0xF2F4, 0x89B7, 0xF2F3, 0x89B9, 0xF4CC, 0x89BA, 0xC4B1, 0x89BD, 0xC4FD, 0x89BE, 0xF754, 0x89BF, 0xF753, 0x89C0, 0xC65B, + 0x89D2, 0xA8A4, 0x89D3, 0xD0AF, 0x89D4, 0xAD6F, 0x89D5, 0xD7C8, 0x89D6, 0xD7C6, 0x89D9, 0xD7C7, 0x89DA, 0xDBD4, 0x89DB, 0xDBD5, + 0x89DC, 0xE043, 0x89DD, 0xDBD3, 0x89DF, 0xDFFC, 0x89E0, 0xE041, 0x89E1, 0xE040, 0x89E2, 0xE042, 0x89E3, 0xB8D1, 0x89E4, 0xDFFE, + 0x89E5, 0xDFFD, 0x89E6, 0xE044, 0x89E8, 0xE449, 0x89E9, 0xE447, 0x89EB, 0xE448, 0x89EC, 0xE7D3, 0x89ED, 0xE7D1, 0x89F0, 0xE7D2, + 0x89F1, 0xEB7D, 0x89F2, 0xEE7C, 0x89F3, 0xEE7D, 0x89F4, 0xC2D2, 0x89F6, 0xF2F5, 0x89F7, 0xF4CD, 0x89F8, 0xC4B2, 0x89FA, 0xF64C, + 0x89FB, 0xF755, 0x89FC, 0xC5A9, 0x89FE, 0xF7FE, 0x89FF, 0xF94C, 0x8A00, 0xA8A5, 0x8A02, 0xAD71, 0x8A03, 0xAD72, 0x8A04, 0xD0B0, + 0x8A07, 0xD0B1, 0x8A08, 0xAD70, 0x8A0A, 0xB054, 0x8A0C, 0xB052, 0x8A0E, 0xB051, 0x8A0F, 0xB058, 0x8A10, 0xB050, 0x8A11, 0xB059, + 0x8A12, 0xD3DD, 0x8A13, 0xB056, 0x8A15, 0xB053, 0x8A16, 0xB057, 0x8A17, 0xB055, 0x8A18, 0xB04F, 0x8A1B, 0xB35F, 0x8A1D, 0xB359, + 0x8A1E, 0xD7CC, 0x8A1F, 0xB35E, 0x8A22, 0xB360, 0x8A23, 0xB35A, 0x8A25, 0xB35B, 0x8A27, 0xD7CA, 0x8A2A, 0xB358, 0x8A2C, 0xD7CB, + 0x8A2D, 0xB35D, 0x8A30, 0xD7C9, 0x8A31, 0xB35C, 0x8A34, 0xB644, 0x8A36, 0xB646, 0x8A39, 0xDBD8, 0x8A3A, 0xB645, 0x8A3B, 0xB5F9, + 0x8A3C, 0xB5FD, 0x8A3E, 0xB8E4, 0x8A3F, 0xE049, 0x8A40, 0xDBDA, 0x8A41, 0xB5FE, 0x8A44, 0xDBDD, 0x8A45, 0xDBDE, 0x8A46, 0xB643, + 0x8A48, 0xDBE0, 0x8A4A, 0xDBE2, 0x8A4C, 0xDBE3, 0x8A4D, 0xDBD7, 0x8A4E, 0xDBD6, 0x8A4F, 0xDBE4, 0x8A50, 0xB642, 0x8A51, 0xDBE1, + 0x8A52, 0xDBDF, 0x8A54, 0xB640, 0x8A55, 0xB5FB, 0x8A56, 0xB647, 0x8A57, 0xDBDB, 0x8A58, 0xDBDC, 0x8A59, 0xDBD9, 0x8A5B, 0xB641, + 0x8A5E, 0xB5FC, 0x8A60, 0xB5FA, 0x8A61, 0xE048, 0x8A62, 0xB8DF, 0x8A63, 0xB8DA, 0x8A66, 0xB8D5, 0x8A68, 0xB8E5, 0x8A69, 0xB8D6, + 0x8A6B, 0xB8D2, 0x8A6C, 0xB8E1, 0x8A6D, 0xB8DE, 0x8A6E, 0xB8E0, 0x8A70, 0xB8D7, 0x8A71, 0xB8DC, 0x8A72, 0xB8D3, 0x8A73, 0xB8D4, + 0x8A74, 0xE050, 0x8A75, 0xE04D, 0x8A76, 0xE045, 0x8A77, 0xE04A, 0x8A79, 0xB8E2, 0x8A7A, 0xE051, 0x8A7B, 0xB8E3, 0x8A7C, 0xB8D9, + 0x8A7F, 0xE047, 0x8A81, 0xE04F, 0x8A82, 0xE04B, 0x8A83, 0xE04E, 0x8A84, 0xE04C, 0x8A85, 0xB8DD, 0x8A86, 0xE046, 0x8A87, 0xB8D8, + 0x8A8B, 0xE44C, 0x8A8C, 0xBB78, 0x8A8D, 0xBB7B, 0x8A8F, 0xE44E, 0x8A91, 0xBBA5, 0x8A92, 0xE44D, 0x8A93, 0xBB7D, 0x8A95, 0xBDCF, + 0x8A96, 0xE44F, 0x8A98, 0xBBA4, 0x8A99, 0xE44B, 0x8A9A, 0xBBA6, 0x8A9E, 0xBB79, 0x8AA0, 0xB8DB, 0x8AA1, 0xBB7C, 0x8AA3, 0xBB7A, + 0x8AA4, 0xBB7E, 0x8AA5, 0xBBA2, 0x8AA6, 0xBB77, 0x8AA7, 0xBBA7, 0x8AA8, 0xBBA3, 0x8AAA, 0xBBA1, 0x8AAB, 0xE44A, 0x8AB0, 0xBDD6, + 0x8AB2, 0xBDD2, 0x8AB6, 0xBDD9, 0x8AB8, 0xE7D6, 0x8AB9, 0xBDDA, 0x8ABA, 0xE7E2, 0x8ABB, 0xE7DB, 0x8ABC, 0xBDCB, 0x8ABD, 0xE7E3, + 0x8ABE, 0xE7DD, 0x8ABF, 0xBDD5, 0x8AC0, 0xE7DE, 0x8AC2, 0xBDD4, 0x8AC3, 0xE7E1, 0x8AC4, 0xBDCE, 0x8AC5, 0xE7DF, 0x8AC6, 0xE7D5, + 0x8AC7, 0xBDCD, 0x8AC8, 0xEBAA, 0x8AC9, 0xBDD3, 0x8ACB, 0xBDD0, 0x8ACD, 0xBDD8, 0x8ACF, 0xE7D4, 0x8AD1, 0xE7D8, 0x8AD2, 0xBDCC, + 0x8AD3, 0xE7D7, 0x8AD4, 0xE7D9, 0x8AD5, 0xE7DA, 0x8AD6, 0xBDD7, 0x8AD7, 0xE7DC, 0x8AD8, 0xE7E0, 0x8AD9, 0xE7E4, 0x8ADB, 0xBDDB, + 0x8ADC, 0xBFD2, 0x8ADD, 0xEBA5, 0x8ADE, 0xEBAB, 0x8ADF, 0xEBA8, 0x8AE0, 0xEB7E, 0x8AE1, 0xEBAC, 0x8AE2, 0xEBA1, 0x8AE4, 0xEBA7, + 0x8AE6, 0xBFCD, 0x8AE7, 0xBFD3, 0x8AE8, 0xEBAD, 0x8AEB, 0xBFCF, 0x8AED, 0xBFD9, 0x8AEE, 0xBFD4, 0x8AEF, 0xEBAF, 0x8AF0, 0xEBA9, + 0x8AF1, 0xBFD0, 0x8AF2, 0xEBA2, 0x8AF3, 0xBFDA, 0x8AF4, 0xEBA3, 0x8AF5, 0xEBA4, 0x8AF6, 0xBFDB, 0x8AF7, 0xBFD8, 0x8AF8, 0xBDD1, + 0x8AFA, 0xBFCE, 0x8AFB, 0xEBB0, 0x8AFC, 0xBFDC, 0x8AFE, 0xBFD5, 0x8AFF, 0xEBAE, 0x8B00, 0xBFD1, 0x8B01, 0xBFD6, 0x8B02, 0xBFD7, + 0x8B04, 0xC1C3, 0x8B05, 0xEEA4, 0x8B06, 0xEEAD, 0x8B07, 0xEEAA, 0x8B08, 0xEEAC, 0x8B0A, 0xC1C0, 0x8B0B, 0xEEA5, 0x8B0D, 0xEEAB, + 0x8B0E, 0xC1BC, 0x8B0F, 0xEEA7, 0x8B10, 0xC1C4, 0x8B11, 0xEEA3, 0x8B12, 0xEEA8, 0x8B13, 0xEEAF, 0x8B14, 0xEBA6, 0x8B15, 0xEEA9, + 0x8B16, 0xEEA2, 0x8B17, 0xC1BD, 0x8B18, 0xEEA1, 0x8B19, 0xC1BE, 0x8B1A, 0xEEB0, 0x8B1B, 0xC1BF, 0x8B1C, 0xEEAE, 0x8B1D, 0xC1C2, + 0x8B1E, 0xEE7E, 0x8B20, 0xC1C1, 0x8B22, 0xEEA6, 0x8B23, 0xF0DC, 0x8B24, 0xF0EA, 0x8B25, 0xF0E5, 0x8B26, 0xF0E7, 0x8B27, 0xF0DB, + 0x8B28, 0xC2D3, 0x8B2A, 0xF0DA, 0x8B2B, 0xC2D6, 0x8B2C, 0xC2D5, 0x8B2E, 0xF0E9, 0x8B2F, 0xF0E1, 0x8B30, 0xF0DE, 0x8B31, 0xF0E4, + 0x8B33, 0xF0DD, 0x8B35, 0xF0DF, 0x8B36, 0xF0E8, 0x8B37, 0xF0E6, 0x8B39, 0xC2D4, 0x8B3A, 0xF0ED, 0x8B3B, 0xF0EB, 0x8B3C, 0xF0E2, + 0x8B3D, 0xF0EC, 0x8B3E, 0xF0E3, 0x8B40, 0xF2F9, 0x8B41, 0xC3CF, 0x8B42, 0xF341, 0x8B45, 0xF64F, 0x8B46, 0xC3D6, 0x8B47, 0xF0E0, + 0x8B48, 0xF2F7, 0x8B49, 0xC3D2, 0x8B4A, 0xF2F8, 0x8B4B, 0xF2FD, 0x8B4E, 0xC3D4, 0x8B4F, 0xC3D5, 0x8B50, 0xF2F6, 0x8B51, 0xF340, + 0x8B52, 0xF342, 0x8B53, 0xF2FA, 0x8B54, 0xF2FC, 0x8B55, 0xF2FE, 0x8B56, 0xF2FB, 0x8B57, 0xF343, 0x8B58, 0xC3D1, 0x8B59, 0xC3D7, + 0x8B5A, 0xC3D3, 0x8B5C, 0xC3D0, 0x8B5D, 0xF4D0, 0x8B5F, 0xC4B7, 0x8B60, 0xF4CE, 0x8B63, 0xF4D2, 0x8B65, 0xF4D3, 0x8B66, 0xC4B5, + 0x8B67, 0xF4D4, 0x8B68, 0xF4D1, 0x8B6A, 0xF4CF, 0x8B6B, 0xC4B8, 0x8B6C, 0xC4B4, 0x8B6D, 0xF4D5, 0x8B6F, 0xC4B6, 0x8B70, 0xC4B3, + 0x8B74, 0xC4FE, 0x8B77, 0xC540, 0x8B78, 0xF64E, 0x8B79, 0xF64D, 0x8B7A, 0xF650, 0x8B7B, 0xF651, 0x8B7D, 0xC541, 0x8B7E, 0xF756, + 0x8B7F, 0xF75B, 0x8B80, 0xC5AA, 0x8B82, 0xF758, 0x8B84, 0xF757, 0x8B85, 0xF75A, 0x8B86, 0xF759, 0x8B88, 0xF843, 0x8B8A, 0xC5DC, + 0x8B8B, 0xF842, 0x8B8C, 0xF840, 0x8B8E, 0xF841, 0x8B92, 0xC5FE, 0x8B93, 0xC5FD, 0x8B94, 0xF8C1, 0x8B95, 0xF8C2, 0x8B96, 0xC640, + 0x8B98, 0xF94D, 0x8B99, 0xF94E, 0x8B9A, 0xC667, 0x8B9C, 0xC66D, 0x8B9E, 0xF9A9, 0x8B9F, 0xF9C8, 0x8C37, 0xA8A6, 0x8C39, 0xD7CD, + 0x8C3B, 0xD7CE, 0x8C3C, 0xE052, 0x8C3D, 0xE450, 0x8C3E, 0xE7E5, 0x8C3F, 0xC1C6, 0x8C41, 0xC1C5, 0x8C42, 0xF0EE, 0x8C43, 0xF344, + 0x8C45, 0xF844, 0x8C46, 0xA8A7, 0x8C47, 0xD3DE, 0x8C48, 0xB05A, 0x8C49, 0xB361, 0x8C4A, 0xE054, 0x8C4B, 0xE053, 0x8C4C, 0xBDDC, + 0x8C4D, 0xE7E6, 0x8C4E, 0xBDDD, 0x8C4F, 0xEEB1, 0x8C50, 0xC2D7, 0x8C54, 0xC676, 0x8C55, 0xA8A8, 0x8C56, 0xCDCB, 0x8C57, 0xD3DF, + 0x8C5A, 0xB362, 0x8C5C, 0xD7CF, 0x8C5D, 0xD7D0, 0x8C5F, 0xDBE5, 0x8C61, 0xB648, 0x8C62, 0xB8E6, 0x8C64, 0xE056, 0x8C65, 0xE055, + 0x8C66, 0xE057, 0x8C68, 0xE451, 0x8C69, 0xE452, 0x8C6A, 0xBBA8, 0x8C6B, 0xBFDD, 0x8C6C, 0xBDDE, 0x8C6D, 0xBFDE, 0x8C6F, 0xEEB5, + 0x8C70, 0xEEB2, 0x8C71, 0xEEB4, 0x8C72, 0xEEB3, 0x8C73, 0xC1C7, 0x8C75, 0xF0EF, 0x8C76, 0xF346, 0x8C77, 0xF345, 0x8C78, 0xCBA4, + 0x8C79, 0xB05C, 0x8C7A, 0xB05B, 0x8C7B, 0xD3E0, 0x8C7D, 0xD7D1, 0x8C80, 0xDBE7, 0x8C81, 0xDBE6, 0x8C82, 0xB649, 0x8C84, 0xE059, + 0x8C85, 0xE05A, 0x8C86, 0xE058, 0x8C89, 0xB8E8, 0x8C8A, 0xB8E7, 0x8C8C, 0xBBAA, 0x8C8D, 0xBBA9, 0x8C8F, 0xE7E7, 0x8C90, 0xEBB3, + 0x8C91, 0xEBB1, 0x8C92, 0xEBB2, 0x8C93, 0xBFDF, 0x8C94, 0xEEB7, 0x8C95, 0xEEB6, 0x8C97, 0xF0F2, 0x8C98, 0xF0F1, 0x8C99, 0xF0F0, + 0x8C9A, 0xF347, 0x8C9C, 0xF9AA, 0x8C9D, 0xA8A9, 0x8C9E, 0xAD73, 0x8CA0, 0xAD74, 0x8CA1, 0xB05D, 0x8CA2, 0xB05E, 0x8CA3, 0xD3E2, + 0x8CA4, 0xD3E1, 0x8CA5, 0xD7D2, 0x8CA7, 0xB368, 0x8CA8, 0xB366, 0x8CA9, 0xB363, 0x8CAA, 0xB367, 0x8CAB, 0xB365, 0x8CAC, 0xB364, + 0x8CAF, 0xB64A, 0x8CB0, 0xDBEA, 0x8CB2, 0xB8ED, 0x8CB3, 0xB64C, 0x8CB4, 0xB651, 0x8CB5, 0xDBEC, 0x8CB6, 0xB653, 0x8CB7, 0xB652, + 0x8CB8, 0xB655, 0x8CB9, 0xDBEB, 0x8CBA, 0xDBE8, 0x8CBB, 0xB64F, 0x8CBC, 0xB64B, 0x8CBD, 0xB64D, 0x8CBE, 0xDBE9, 0x8CBF, 0xB654, + 0x8CC0, 0xB650, 0x8CC1, 0xB64E, 0x8CC2, 0xB8EF, 0x8CC3, 0xB8EE, 0x8CC4, 0xB8EC, 0x8CC5, 0xB8F0, 0x8CC7, 0xB8EA, 0x8CC8, 0xB8EB, + 0x8CCA, 0xB8E9, 0x8CCC, 0xE05B, 0x8CCF, 0xE454, 0x8CD1, 0xBBAC, 0x8CD2, 0xBBAD, 0x8CD3, 0xBBAB, 0x8CD5, 0xE453, 0x8CD7, 0xE455, + 0x8CD9, 0xE7EA, 0x8CDA, 0xE7EC, 0x8CDC, 0xBDE7, 0x8CDD, 0xE7ED, 0x8CDE, 0xBDE0, 0x8CDF, 0xE7E9, 0x8CE0, 0xBDDF, 0x8CE1, 0xBDE9, + 0x8CE2, 0xBDE5, 0x8CE3, 0xBDE6, 0x8CE4, 0xBDE2, 0x8CE5, 0xE7E8, 0x8CE6, 0xBDE1, 0x8CE7, 0xE7EE, 0x8CE8, 0xE7EB, 0x8CEA, 0xBDE8, + 0x8CEC, 0xBDE3, 0x8CED, 0xBDE4, 0x8CEE, 0xEBB5, 0x8CF0, 0xEBB7, 0x8CF1, 0xEBB6, 0x8CF3, 0xEBB8, 0x8CF4, 0xBFE0, 0x8CF5, 0xEBB4, + 0x8CF8, 0xC1CB, 0x8CF9, 0xEEB8, 0x8CFA, 0xC1C8, 0x8CFB, 0xC1CC, 0x8CFC, 0xC1CA, 0x8CFD, 0xC1C9, 0x8CFE, 0xF0F3, 0x8D00, 0xF0F6, + 0x8D02, 0xF0F5, 0x8D04, 0xF0F4, 0x8D05, 0xC2D8, 0x8D06, 0xF348, 0x8D07, 0xF349, 0x8D08, 0xC3D8, 0x8D09, 0xF34A, 0x8D0A, 0xC3D9, + 0x8D0D, 0xC4BA, 0x8D0F, 0xC4B9, 0x8D10, 0xF652, 0x8D13, 0xC542, 0x8D14, 0xF653, 0x8D15, 0xF75C, 0x8D16, 0xC5AB, 0x8D17, 0xC5AC, + 0x8D19, 0xF845, 0x8D1B, 0xC642, 0x8D64, 0xA8AA, 0x8D66, 0xB36A, 0x8D67, 0xB369, 0x8D68, 0xE05C, 0x8D69, 0xE05D, 0x8D6B, 0xBBAE, + 0x8D6C, 0xEBB9, 0x8D6D, 0xBDEA, 0x8D6E, 0xEBBA, 0x8D6F, 0xEEB9, 0x8D70, 0xA8AB, 0x8D72, 0xD0B2, 0x8D73, 0xAD76, 0x8D74, 0xAD75, + 0x8D76, 0xD3E3, 0x8D77, 0xB05F, 0x8D78, 0xD3E4, 0x8D79, 0xD7D5, 0x8D7B, 0xD7D4, 0x8D7D, 0xD7D3, 0x8D80, 0xDBEE, 0x8D81, 0xB658, + 0x8D84, 0xDBED, 0x8D85, 0xB657, 0x8D89, 0xDBEF, 0x8D8A, 0xB656, 0x8D8C, 0xE05F, 0x8D8D, 0xE062, 0x8D8E, 0xE060, 0x8D8F, 0xE061, + 0x8D90, 0xE065, 0x8D91, 0xE05E, 0x8D92, 0xE066, 0x8D93, 0xE063, 0x8D94, 0xE064, 0x8D95, 0xBBB0, 0x8D96, 0xE456, 0x8D99, 0xBBAF, + 0x8D9B, 0xE7F2, 0x8D9C, 0xE7F0, 0x8D9F, 0xBDEB, 0x8DA0, 0xE7EF, 0x8DA1, 0xE7F1, 0x8DA3, 0xBDEC, 0x8DA5, 0xEBBB, 0x8DA7, 0xEBBC, + 0x8DA8, 0xC1CD, 0x8DAA, 0xF34C, 0x8DAB, 0xF34E, 0x8DAC, 0xF34B, 0x8DAD, 0xF34D, 0x8DAE, 0xF4D6, 0x8DAF, 0xF654, 0x8DB2, 0xF96F, + 0x8DB3, 0xA8AC, 0x8DB4, 0xAD77, 0x8DB5, 0xD3E5, 0x8DB6, 0xD3E7, 0x8DB7, 0xD3E6, 0x8DB9, 0xD7D8, 0x8DBA, 0xB36C, 0x8DBC, 0xD7D6, + 0x8DBE, 0xB36B, 0x8DBF, 0xD7D9, 0x8DC1, 0xD7DA, 0x8DC2, 0xD7D7, 0x8DC5, 0xDBFB, 0x8DC6, 0xB660, 0x8DC7, 0xDBF3, 0x8DC8, 0xDBF9, + 0x8DCB, 0xB65B, 0x8DCC, 0xB65E, 0x8DCD, 0xDBF2, 0x8DCE, 0xB659, 0x8DCF, 0xDBF6, 0x8DD0, 0xE06C, 0x8DD1, 0xB65D, 0x8DD3, 0xDBF1, + 0x8DD5, 0xDBF7, 0x8DD6, 0xDBF4, 0x8DD7, 0xDBFA, 0x8DD8, 0xDBF0, 0x8DD9, 0xDBF8, 0x8DDA, 0xB65C, 0x8DDB, 0xB65F, 0x8DDC, 0xDBF5, + 0x8DDD, 0xB65A, 0x8DDF, 0xB8F2, 0x8DE0, 0xE068, 0x8DE1, 0xB8F1, 0x8DE2, 0xE06F, 0x8DE3, 0xE06E, 0x8DE4, 0xB8F8, 0x8DE6, 0xB8F9, + 0x8DE7, 0xE070, 0x8DE8, 0xB8F3, 0x8DE9, 0xE06D, 0x8DEA, 0xB8F7, 0x8DEB, 0xE072, 0x8DEC, 0xE069, 0x8DEE, 0xE06B, 0x8DEF, 0xB8F4, + 0x8DF0, 0xE067, 0x8DF1, 0xE06A, 0x8DF2, 0xE071, 0x8DF3, 0xB8F5, 0x8DF4, 0xE073, 0x8DFA, 0xB8F6, 0x8DFC, 0xBBB1, 0x8DFD, 0xE45B, + 0x8DFE, 0xE461, 0x8DFF, 0xE459, 0x8E00, 0xE462, 0x8E02, 0xE458, 0x8E03, 0xE45D, 0x8E04, 0xE463, 0x8E05, 0xE460, 0x8E06, 0xE45F, + 0x8E07, 0xE45E, 0x8E09, 0xE457, 0x8E0A, 0xE45C, 0x8E0D, 0xE45A, 0x8E0F, 0xBDF1, 0x8E10, 0xBDEE, 0x8E11, 0xE7FB, 0x8E12, 0xE841, + 0x8E13, 0xE843, 0x8E14, 0xE840, 0x8E15, 0xE7F8, 0x8E16, 0xE7FA, 0x8E17, 0xE845, 0x8E18, 0xE842, 0x8E19, 0xE7FC, 0x8E1A, 0xE846, + 0x8E1B, 0xE7F9, 0x8E1C, 0xE844, 0x8E1D, 0xBDEF, 0x8E1E, 0xBDF5, 0x8E1F, 0xBDF3, 0x8E20, 0xE7F3, 0x8E21, 0xBDF4, 0x8E22, 0xBDF0, + 0x8E23, 0xE7F4, 0x8E24, 0xE7F6, 0x8E25, 0xE7F5, 0x8E26, 0xE7FD, 0x8E27, 0xE7FE, 0x8E29, 0xBDF2, 0x8E2B, 0xBDED, 0x8E2E, 0xE7F7, + 0x8E30, 0xEBC6, 0x8E31, 0xBFE2, 0x8E33, 0xEBBD, 0x8E34, 0xBFE3, 0x8E35, 0xBFE6, 0x8E36, 0xEBC2, 0x8E38, 0xEBBF, 0x8E39, 0xBFE5, + 0x8E3C, 0xEBC3, 0x8E3D, 0xEBC4, 0x8E3E, 0xEBBE, 0x8E3F, 0xEBC7, 0x8E40, 0xEBC0, 0x8E41, 0xEBC5, 0x8E42, 0xBFE4, 0x8E44, 0xBFE1, + 0x8E45, 0xEBC1, 0x8E47, 0xEEBF, 0x8E48, 0xC1D0, 0x8E49, 0xC1CE, 0x8E4A, 0xC1D1, 0x8E4B, 0xC1CF, 0x8E4C, 0xEEBE, 0x8E4D, 0xEEBB, + 0x8E4E, 0xEEBA, 0x8E50, 0xEEBD, 0x8E53, 0xEEBC, 0x8E54, 0xF145, 0x8E55, 0xC2DE, 0x8E56, 0xF0FB, 0x8E57, 0xF0FA, 0x8E59, 0xC2D9, + 0x8E5A, 0xF141, 0x8E5B, 0xF140, 0x8E5C, 0xF0F7, 0x8E5D, 0xF143, 0x8E5E, 0xF0FC, 0x8E5F, 0xC2DD, 0x8E60, 0xF0F9, 0x8E61, 0xF142, + 0x8E62, 0xF0F8, 0x8E63, 0xC2DA, 0x8E64, 0xC2DC, 0x8E65, 0xF0FD, 0x8E66, 0xC2DB, 0x8E67, 0xF0FE, 0x8E69, 0xF144, 0x8E6A, 0xF352, + 0x8E6C, 0xC3DE, 0x8E6D, 0xF34F, 0x8E6F, 0xF353, 0x8E72, 0xC3DB, 0x8E73, 0xF351, 0x8E74, 0xC3E0, 0x8E76, 0xC3DD, 0x8E78, 0xF350, + 0x8E7A, 0xC3DF, 0x8E7B, 0xF354, 0x8E7C, 0xC3DA, 0x8E81, 0xC4BC, 0x8E82, 0xC4BE, 0x8E84, 0xF4D9, 0x8E85, 0xC4BD, 0x8E86, 0xF4D7, + 0x8E87, 0xC3DC, 0x8E88, 0xF4D8, 0x8E89, 0xC4BB, 0x8E8A, 0xC543, 0x8E8B, 0xC545, 0x8E8C, 0xF656, 0x8E8D, 0xC544, 0x8E8E, 0xF655, + 0x8E90, 0xF761, 0x8E91, 0xC5AD, 0x8E92, 0xF760, 0x8E93, 0xC5AE, 0x8E94, 0xF75E, 0x8E95, 0xF75D, 0x8E96, 0xF762, 0x8E97, 0xF763, + 0x8E98, 0xF846, 0x8E9A, 0xF75F, 0x8E9D, 0xF8C6, 0x8E9E, 0xF8C3, 0x8E9F, 0xF8C4, 0x8EA0, 0xF8C5, 0x8EA1, 0xC65C, 0x8EA3, 0xF951, + 0x8EA4, 0xF950, 0x8EA5, 0xF94F, 0x8EA6, 0xF970, 0x8EA8, 0xF9BE, 0x8EA9, 0xF9AB, 0x8EAA, 0xC66E, 0x8EAB, 0xA8AD, 0x8EAC, 0xB060, + 0x8EB2, 0xB8FA, 0x8EBA, 0xBDF6, 0x8EBD, 0xEBC8, 0x8EC0, 0xC2DF, 0x8EC2, 0xF355, 0x8EC9, 0xF9AC, 0x8ECA, 0xA8AE, 0x8ECB, 0xAAEE, + 0x8ECC, 0xAD79, 0x8ECD, 0xAD78, 0x8ECF, 0xB063, 0x8ED1, 0xD3E8, 0x8ED2, 0xB061, 0x8ED3, 0xD3E9, 0x8ED4, 0xB062, 0x8ED7, 0xD7DF, + 0x8ED8, 0xD7DB, 0x8EDB, 0xB36D, 0x8EDC, 0xD7DE, 0x8EDD, 0xD7DD, 0x8EDE, 0xD7DC, 0x8EDF, 0xB36E, 0x8EE0, 0xD7E0, 0x8EE1, 0xD7E1, + 0x8EE5, 0xDC43, 0x8EE6, 0xDC41, 0x8EE7, 0xDC45, 0x8EE8, 0xDC46, 0x8EE9, 0xDC4C, 0x8EEB, 0xDC48, 0x8EEC, 0xDC4A, 0x8EEE, 0xDC42, + 0x8EEF, 0xDBFC, 0x8EF1, 0xDC49, 0x8EF4, 0xDC4B, 0x8EF5, 0xDC44, 0x8EF6, 0xDC47, 0x8EF7, 0xDBFD, 0x8EF8, 0xB662, 0x8EF9, 0xDC40, + 0x8EFA, 0xDBFE, 0x8EFB, 0xB661, 0x8EFC, 0xB663, 0x8EFE, 0xB8FD, 0x8EFF, 0xE075, 0x8F00, 0xE077, 0x8F01, 0xE076, 0x8F02, 0xE07B, + 0x8F03, 0xB8FB, 0x8F05, 0xE078, 0x8F06, 0xE074, 0x8F07, 0xE079, 0x8F08, 0xE07A, 0x8F09, 0xB8FC, 0x8F0A, 0xB8FE, 0x8F0B, 0xE07C, + 0x8F0D, 0xE467, 0x8F0E, 0xE466, 0x8F10, 0xE464, 0x8F11, 0xE465, 0x8F12, 0xBBB3, 0x8F13, 0xBBB5, 0x8F14, 0xBBB2, 0x8F15, 0xBBB4, + 0x8F16, 0xE84D, 0x8F17, 0xE84E, 0x8F18, 0xE849, 0x8F1A, 0xE84A, 0x8F1B, 0xBDF8, 0x8F1C, 0xBDFD, 0x8F1D, 0xBDF7, 0x8F1E, 0xBDFE, + 0x8F1F, 0xBDF9, 0x8F20, 0xE84B, 0x8F23, 0xE84C, 0x8F24, 0xE848, 0x8F25, 0xBE40, 0x8F26, 0xBDFB, 0x8F29, 0xBDFA, 0x8F2A, 0xBDFC, + 0x8F2C, 0xE847, 0x8F2E, 0xEBCA, 0x8F2F, 0xBFE8, 0x8F32, 0xEBCC, 0x8F33, 0xBFEA, 0x8F34, 0xEBCF, 0x8F35, 0xEBCB, 0x8F36, 0xEBC9, + 0x8F37, 0xEBCE, 0x8F38, 0xBFE9, 0x8F39, 0xEBCD, 0x8F3B, 0xBFE7, 0x8F3E, 0xC1D3, 0x8F3F, 0xC1D6, 0x8F40, 0xEEC1, 0x8F42, 0xC1D4, + 0x8F43, 0xEEC0, 0x8F44, 0xC1D2, 0x8F45, 0xC1D5, 0x8F46, 0xF146, 0x8F47, 0xF147, 0x8F48, 0xF148, 0x8F49, 0xC2E0, 0x8F4B, 0xF149, + 0x8F4D, 0xC2E1, 0x8F4E, 0xC3E2, 0x8F4F, 0xF358, 0x8F50, 0xF359, 0x8F51, 0xF357, 0x8F52, 0xF356, 0x8F53, 0xF35A, 0x8F54, 0xC3E1, + 0x8F55, 0xF4DD, 0x8F56, 0xF4DB, 0x8F57, 0xF4DC, 0x8F58, 0xF4DE, 0x8F59, 0xF4DA, 0x8F5A, 0xF4DF, 0x8F5B, 0xF658, 0x8F5D, 0xF659, + 0x8F5E, 0xF657, 0x8F5F, 0xC546, 0x8F60, 0xF764, 0x8F61, 0xC5AF, 0x8F62, 0xF765, 0x8F63, 0xF848, 0x8F64, 0xF847, 0x8F9B, 0xA8AF, + 0x8F9C, 0xB664, 0x8F9F, 0xB940, 0x8FA3, 0xBBB6, 0x8FA6, 0xBFEC, 0x8FA8, 0xBFEB, 0x8FAD, 0xC3E3, 0x8FAE, 0xC47C, 0x8FAF, 0xC547, + 0x8FB0, 0xA8B0, 0x8FB1, 0xB064, 0x8FB2, 0xB941, 0x8FB4, 0xF35B, 0x8FBF, 0xCBA6, 0x8FC2, 0xA8B1, 0x8FC4, 0xA8B4, 0x8FC5, 0xA8B3, + 0x8FC6, 0xA8B2, 0x8FC9, 0xCBA5, 0x8FCB, 0xCDCD, 0x8FCD, 0xCDCF, 0x8FCE, 0xAAEF, 0x8FD1, 0xAAF1, 0x8FD2, 0xCDCC, 0x8FD3, 0xCDCE, + 0x8FD4, 0xAAF0, 0x8FD5, 0xCDD1, 0x8FD6, 0xCDD0, 0x8FD7, 0xCDD2, 0x8FE0, 0xD0B6, 0x8FE1, 0xD0B4, 0x8FE2, 0xAD7C, 0x8FE3, 0xD0B3, + 0x8FE4, 0xADA3, 0x8FE5, 0xAD7E, 0x8FE6, 0xAD7B, 0x8FE8, 0xADA4, 0x8FEA, 0xAD7D, 0x8FEB, 0xADA2, 0x8FED, 0xADA1, 0x8FEE, 0xD0B5, + 0x8FF0, 0xAD7A, 0x8FF4, 0xB06A, 0x8FF5, 0xD3EB, 0x8FF6, 0xD3F1, 0x8FF7, 0xB067, 0x8FF8, 0xB06E, 0x8FFA, 0xB069, 0x8FFB, 0xD3EE, + 0x8FFC, 0xD3F0, 0x8FFD, 0xB06C, 0x8FFE, 0xD3EA, 0x8FFF, 0xD3ED, 0x9000, 0xB068, 0x9001, 0xB065, 0x9002, 0xD3EC, 0x9003, 0xB06B, + 0x9004, 0xD3EF, 0x9005, 0xB06D, 0x9006, 0xB066, 0x900B, 0xD7E3, 0x900C, 0xD7E6, 0x900D, 0xB370, 0x900F, 0xB37A, 0x9010, 0xB376, + 0x9011, 0xD7E4, 0x9014, 0xB37E, 0x9015, 0xB377, 0x9016, 0xB37C, 0x9017, 0xB372, 0x9019, 0xB36F, 0x901A, 0xB371, 0x901B, 0xB37D, + 0x901C, 0xD7E5, 0x901D, 0xB375, 0x901E, 0xB378, 0x901F, 0xB374, 0x9020, 0xB379, 0x9021, 0xD7E7, 0x9022, 0xB37B, 0x9023, 0xB373, + 0x9024, 0xD7E2, 0x902D, 0xDC4D, 0x902E, 0xB665, 0x902F, 0xDC4F, 0x9031, 0xB667, 0x9032, 0xB669, 0x9034, 0xDC4E, 0x9035, 0xB666, + 0x9036, 0xB66A, 0x9038, 0xB668, 0x903C, 0xB947, 0x903D, 0xE0A3, 0x903E, 0xB94F, 0x903F, 0xE07E, 0x9041, 0xB950, 0x9042, 0xB945, + 0x9044, 0xE0A1, 0x9047, 0xB94A, 0x9049, 0xE0A2, 0x904A, 0xB943, 0x904B, 0xB942, 0x904D, 0xB94D, 0x904E, 0xB94C, 0x904F, 0xB94B, + 0x9050, 0xB949, 0x9051, 0xB94E, 0x9052, 0xE07D, 0x9053, 0xB944, 0x9054, 0xB946, 0x9055, 0xB948, 0x9058, 0xBBB8, 0x9059, 0xBBBB, + 0x905B, 0xBBBF, 0x905C, 0xBBB9, 0x905D, 0xBBBE, 0x905E, 0xBBBC, 0x9060, 0xBBB7, 0x9062, 0xBBBD, 0x9063, 0xBBBA, 0x9067, 0xE852, + 0x9068, 0xBE43, 0x9069, 0xBE41, 0x906B, 0xE853, 0x906D, 0xBE44, 0x906E, 0xBE42, 0x906F, 0xE851, 0x9070, 0xE850, 0x9072, 0xBFF0, + 0x9073, 0xE84F, 0x9074, 0xBFEE, 0x9075, 0xBFED, 0x9076, 0xEBD0, 0x9077, 0xBE45, 0x9078, 0xBFEF, 0x9079, 0xEBD1, 0x907A, 0xBFF2, + 0x907B, 0xEBD2, 0x907C, 0xBFF1, 0x907D, 0xC1D8, 0x907E, 0xEEC3, 0x907F, 0xC1D7, 0x9080, 0xC1DC, 0x9081, 0xC1DA, 0x9082, 0xC1DB, + 0x9083, 0xC2E3, 0x9084, 0xC1D9, 0x9085, 0xEEC2, 0x9086, 0xEBD3, 0x9087, 0xC2E2, 0x9088, 0xC2E4, 0x908A, 0xC3E4, 0x908B, 0xC3E5, + 0x908D, 0xF4E0, 0x908F, 0xC5DE, 0x9090, 0xC5DD, 0x9091, 0xA8B6, 0x9094, 0xCA55, 0x9095, 0xB06F, 0x9097, 0xCA52, 0x9098, 0xCA53, + 0x9099, 0xCA51, 0x909B, 0xCA54, 0x909E, 0xCBAA, 0x909F, 0xCBA7, 0x90A0, 0xCBAC, 0x90A1, 0xCBA8, 0x90A2, 0xA8B7, 0x90A3, 0xA8BA, + 0x90A5, 0xCBA9, 0x90A6, 0xA8B9, 0x90A7, 0xCBAB, 0x90AA, 0xA8B8, 0x90AF, 0xCDD5, 0x90B0, 0xCDD7, 0x90B1, 0xAAF4, 0x90B2, 0xCDD3, + 0x90B3, 0xCDD6, 0x90B4, 0xCDD4, 0x90B5, 0xAAF2, 0x90B6, 0xAAF5, 0x90B8, 0xAAF3, 0x90BD, 0xD0B8, 0x90BE, 0xD0BC, 0x90BF, 0xD0B9, + 0x90C1, 0xADA7, 0x90C3, 0xADA8, 0x90C5, 0xD0BB, 0x90C7, 0xD0BD, 0x90C8, 0xD0BF, 0x90CA, 0xADA5, 0x90CB, 0xD0BE, 0x90CE, 0xADA6, + 0x90D4, 0xD7EE, 0x90D5, 0xD0BA, 0x90D6, 0xD3F2, 0x90D7, 0xD3FB, 0x90D8, 0xD3F9, 0x90D9, 0xD3F4, 0x90DA, 0xD3F5, 0x90DB, 0xD3FA, + 0x90DC, 0xD3FC, 0x90DD, 0xB071, 0x90DF, 0xD3F7, 0x90E0, 0xD3F3, 0x90E1, 0xB070, 0x90E2, 0xB072, 0x90E3, 0xD3F6, 0x90E4, 0xD3FD, + 0x90E5, 0xD3F8, 0x90E8, 0xB3A1, 0x90E9, 0xD7F1, 0x90EA, 0xD7E9, 0x90EB, 0xD7EF, 0x90EC, 0xD7F0, 0x90ED, 0xB3A2, 0x90EF, 0xD7E8, + 0x90F0, 0xD7EA, 0x90F1, 0xD0B7, 0x90F2, 0xD7EC, 0x90F3, 0xD7ED, 0x90F4, 0xD7EB, 0x90F5, 0xB66C, 0x90F9, 0xDC56, 0x90FA, 0xEBD4, + 0x90FB, 0xDC57, 0x90FC, 0xDC54, 0x90FD, 0xB3A3, 0x90FE, 0xB66E, 0x90FF, 0xDC53, 0x9100, 0xDC59, 0x9101, 0xDC58, 0x9102, 0xB66B, + 0x9103, 0xDC5C, 0x9104, 0xDC52, 0x9105, 0xDC5B, 0x9106, 0xDC50, 0x9107, 0xDC5A, 0x9108, 0xDC55, 0x9109, 0xB66D, 0x910B, 0xE0AA, + 0x910D, 0xE0A5, 0x910E, 0xE0AB, 0x910F, 0xE0A6, 0x9110, 0xE0A4, 0x9111, 0xE0A7, 0x9112, 0xB951, 0x9114, 0xE0A9, 0x9116, 0xE0A8, + 0x9117, 0xB952, 0x9118, 0xBBC1, 0x9119, 0xBBC0, 0x911A, 0xE46E, 0x911B, 0xE471, 0x911C, 0xE469, 0x911D, 0xE46D, 0x911E, 0xBBC2, + 0x911F, 0xE46C, 0x9120, 0xE46A, 0x9121, 0xE470, 0x9122, 0xE46B, 0x9123, 0xE468, 0x9124, 0xE46F, 0x9126, 0xE859, 0x9127, 0xBE48, + 0x9128, 0xF14A, 0x9129, 0xE856, 0x912A, 0xE857, 0x912B, 0xE855, 0x912C, 0xDC51, 0x912D, 0xBE47, 0x912E, 0xE85A, 0x912F, 0xE854, + 0x9130, 0xBE46, 0x9131, 0xBE49, 0x9132, 0xE858, 0x9133, 0xEBD5, 0x9134, 0xBFF3, 0x9135, 0xEBD6, 0x9136, 0xEBD7, 0x9138, 0xEEC4, + 0x9139, 0xC1DD, 0x913A, 0xF14B, 0x913B, 0xF14C, 0x913E, 0xF14D, 0x913F, 0xF35D, 0x9140, 0xF35C, 0x9141, 0xF4E2, 0x9143, 0xF4E1, + 0x9144, 0xF65B, 0x9145, 0xF65C, 0x9146, 0xF65A, 0x9147, 0xF766, 0x9148, 0xC5B0, 0x9149, 0xA8BB, 0x914A, 0xADAA, 0x914B, 0xADA9, + 0x914C, 0xB075, 0x914D, 0xB074, 0x914E, 0xD440, 0x914F, 0xD441, 0x9150, 0xD3FE, 0x9152, 0xB073, 0x9153, 0xD7F5, 0x9155, 0xD7F6, + 0x9156, 0xD7F2, 0x9157, 0xB3A4, 0x9158, 0xD7F3, 0x915A, 0xD7F4, 0x915F, 0xDC5F, 0x9160, 0xDC61, 0x9161, 0xDC5D, 0x9162, 0xDC60, + 0x9163, 0xB66F, 0x9164, 0xDC5E, 0x9165, 0xB670, 0x9168, 0xDD73, 0x9169, 0xB955, 0x916A, 0xB954, 0x916C, 0xB953, 0x916E, 0xE0AC, + 0x916F, 0xE0AD, 0x9172, 0xE473, 0x9173, 0xE475, 0x9174, 0xBBC6, 0x9175, 0xBBC3, 0x9177, 0xBBC5, 0x9178, 0xBBC4, 0x9179, 0xE474, + 0x917A, 0xE472, 0x9180, 0xE861, 0x9181, 0xE85E, 0x9182, 0xE85F, 0x9183, 0xBE4D, 0x9184, 0xE860, 0x9185, 0xE85B, 0x9186, 0xE85C, + 0x9187, 0xBE4A, 0x9189, 0xBE4B, 0x918A, 0xE85D, 0x918B, 0xBE4C, 0x918D, 0xEBDB, 0x918F, 0xEBDC, 0x9190, 0xEBD9, 0x9191, 0xEBDA, + 0x9192, 0xBFF4, 0x9193, 0xEBD8, 0x9199, 0xEEC8, 0x919A, 0xEEC5, 0x919B, 0xEEC7, 0x919C, 0xC1E0, 0x919D, 0xEECB, 0x919E, 0xC1DF, + 0x919F, 0xEEC9, 0x91A0, 0xEECC, 0x91A1, 0xEECA, 0x91A2, 0xEEC6, 0x91A3, 0xC1DE, 0x91A5, 0xF14F, 0x91A7, 0xF150, 0x91A8, 0xF14E, + 0x91AA, 0xF152, 0x91AB, 0xC2E5, 0x91AC, 0xC2E6, 0x91AD, 0xF35F, 0x91AE, 0xC3E7, 0x91AF, 0xF151, 0x91B0, 0xF35E, 0x91B1, 0xC3E6, + 0x91B2, 0xF4E5, 0x91B3, 0xF4E6, 0x91B4, 0xC4BF, 0x91B5, 0xF4E4, 0x91B7, 0xF4E3, 0x91B9, 0xF65D, 0x91BA, 0xC548, 0x91BC, 0xF849, + 0x91BD, 0xF8C8, 0x91BE, 0xF8C7, 0x91C0, 0xC643, 0x91C1, 0xC65D, 0x91C2, 0xF8C9, 0x91C3, 0xF971, 0x91C5, 0xC66F, 0x91C6, 0xA8BC, + 0x91C7, 0xAAF6, 0x91C9, 0xB956, 0x91CB, 0xC4C0, 0x91CC, 0xA8BD, 0x91CD, 0xADAB, 0x91CE, 0xB3A5, 0x91CF, 0xB671, 0x91D0, 0xC2E7, + 0x91D1, 0xAAF7, 0x91D3, 0xD0C1, 0x91D4, 0xD0C0, 0x91D5, 0xD442, 0x91D7, 0xB078, 0x91D8, 0xB076, 0x91D9, 0xB07A, 0x91DA, 0xD444, + 0x91DC, 0xB079, 0x91DD, 0xB077, 0x91E2, 0xD443, 0x91E3, 0xB3A8, 0x91E4, 0xD7FC, 0x91E6, 0xB3A7, 0x91E7, 0xB3A9, 0x91E8, 0xD842, + 0x91E9, 0xB3AB, 0x91EA, 0xD7FE, 0x91EB, 0xD840, 0x91EC, 0xD7F7, 0x91ED, 0xB3AA, 0x91EE, 0xD843, 0x91F1, 0xD7F9, 0x91F3, 0xD7FA, + 0x91F4, 0xD7F8, 0x91F5, 0xB3A6, 0x91F7, 0xD841, 0x91F8, 0xD7FB, 0x91F9, 0xD7FD, 0x91FD, 0xDC6D, 0x91FF, 0xDC6C, 0x9200, 0xDC6A, + 0x9201, 0xDC62, 0x9202, 0xDC71, 0x9203, 0xDC65, 0x9204, 0xDC6F, 0x9205, 0xDC76, 0x9206, 0xDC6E, 0x9207, 0xB679, 0x9209, 0xB675, + 0x920A, 0xDC63, 0x920C, 0xDC69, 0x920D, 0xB677, 0x920F, 0xDC68, 0x9210, 0xB678, 0x9211, 0xB67A, 0x9212, 0xDC6B, 0x9214, 0xB672, + 0x9215, 0xB673, 0x9216, 0xDC77, 0x9217, 0xDC75, 0x9219, 0xDC74, 0x921A, 0xDC66, 0x921C, 0xDC72, 0x921E, 0xB676, 0x9223, 0xB674, + 0x9224, 0xDC73, 0x9225, 0xDC64, 0x9226, 0xDC67, 0x9227, 0xDC70, 0x922D, 0xE4BA, 0x922E, 0xE0B7, 0x9230, 0xE0B0, 0x9231, 0xE0C3, + 0x9232, 0xE0CC, 0x9233, 0xE0B3, 0x9234, 0xB961, 0x9236, 0xE0C0, 0x9237, 0xB957, 0x9238, 0xB959, 0x9239, 0xB965, 0x923A, 0xE0B1, + 0x923D, 0xB95A, 0x923E, 0xB95C, 0x923F, 0xB966, 0x9240, 0xB95B, 0x9245, 0xB964, 0x9246, 0xE0B9, 0x9248, 0xE0AE, 0x9249, 0xB962, + 0x924A, 0xE0B8, 0x924B, 0xB95E, 0x924C, 0xE0CA, 0x924D, 0xB963, 0x924E, 0xE0C8, 0x924F, 0xE0BC, 0x9250, 0xE0C6, 0x9251, 0xB960, + 0x9252, 0xE0AF, 0x9253, 0xE0C9, 0x9254, 0xE0C4, 0x9256, 0xE0CB, 0x9257, 0xB958, 0x925A, 0xB967, 0x925B, 0xB95D, 0x925E, 0xE0B5, + 0x9260, 0xE0BD, 0x9261, 0xE0C1, 0x9263, 0xE0C5, 0x9264, 0xB95F, 0x9265, 0xE0B4, 0x9266, 0xE0B2, 0x9267, 0xE0BE, 0x926C, 0xE0BB, + 0x926D, 0xE0BA, 0x926F, 0xE0BF, 0x9270, 0xE0C2, 0x9272, 0xE0C7, 0x9276, 0xE478, 0x9278, 0xBBC7, 0x9279, 0xE4A4, 0x927A, 0xE47A, + 0x927B, 0xBBCC, 0x927C, 0xBBD0, 0x927D, 0xE4AD, 0x927E, 0xE4B5, 0x927F, 0xE4A6, 0x9280, 0xBBC8, 0x9282, 0xE4AA, 0x9283, 0xE0B6, + 0x9285, 0xBBC9, 0x9286, 0xE4B1, 0x9287, 0xE4B6, 0x9288, 0xE4AE, 0x928A, 0xE4B0, 0x928B, 0xE4B9, 0x928C, 0xE4B2, 0x928D, 0xE47E, + 0x928E, 0xE4A9, 0x9291, 0xBBD1, 0x9293, 0xBBCD, 0x9294, 0xE47C, 0x9295, 0xE4AB, 0x9296, 0xBBCB, 0x9297, 0xE4A5, 0x9298, 0xBBCA, + 0x9299, 0xE4B3, 0x929A, 0xE4A2, 0x929B, 0xE479, 0x929C, 0xBBCE, 0x929D, 0xE4B8, 0x92A0, 0xE47B, 0x92A1, 0xE4AF, 0x92A2, 0xE4AC, + 0x92A3, 0xE4A7, 0x92A4, 0xE477, 0x92A5, 0xE476, 0x92A6, 0xE4A1, 0x92A7, 0xE4B4, 0x92A8, 0xBBCF, 0x92A9, 0xE4B7, 0x92AA, 0xE47D, + 0x92AB, 0xE4A3, 0x92AC, 0xBE52, 0x92B2, 0xBE5A, 0x92B3, 0xBE55, 0x92B4, 0xE8A4, 0x92B5, 0xE8A1, 0x92B6, 0xE867, 0x92B7, 0xBE50, + 0x92B9, 0xF9D7, 0x92BB, 0xBE4F, 0x92BC, 0xBE56, 0x92C0, 0xE865, 0x92C1, 0xBE54, 0x92C2, 0xE871, 0x92C3, 0xE863, 0x92C4, 0xE864, + 0x92C5, 0xBE4E, 0x92C6, 0xE8A3, 0x92C7, 0xBE58, 0x92C8, 0xE874, 0x92C9, 0xE879, 0x92CA, 0xE873, 0x92CB, 0xEBEE, 0x92CC, 0xE86F, + 0x92CD, 0xE877, 0x92CE, 0xE875, 0x92CF, 0xE868, 0x92D0, 0xE862, 0x92D1, 0xE87D, 0x92D2, 0xBE57, 0x92D3, 0xE87E, 0x92D5, 0xE878, + 0x92D7, 0xE86D, 0x92D8, 0xE86B, 0x92D9, 0xE866, 0x92DD, 0xE86E, 0x92DE, 0xE87B, 0x92DF, 0xE86A, 0x92E0, 0xE87A, 0x92E1, 0xE8A2, + 0x92E4, 0xBE53, 0x92E6, 0xE876, 0x92E7, 0xE87C, 0x92E8, 0xE872, 0x92E9, 0xE86C, 0x92EA, 0xBE51, 0x92EE, 0xE4A8, 0x92EF, 0xE870, + 0x92F0, 0xBE59, 0x92F1, 0xE869, 0x92F7, 0xEBF4, 0x92F8, 0xBFF7, 0x92F9, 0xEBF3, 0x92FA, 0xEBF0, 0x92FB, 0xEC44, 0x92FC, 0xBFFB, + 0x92FE, 0xEC41, 0x92FF, 0xEBF8, 0x9300, 0xEC43, 0x9301, 0xEBE9, 0x9302, 0xEBF6, 0x9304, 0xBFFD, 0x9306, 0xEBE1, 0x9308, 0xEBDF, + 0x9309, 0xEC42, 0x930B, 0xEC40, 0x930C, 0xEBFE, 0x930D, 0xEBED, 0x930E, 0xEBEC, 0x930F, 0xEBE2, 0x9310, 0xC040, 0x9312, 0xEBE8, + 0x9313, 0xEBF2, 0x9314, 0xEBFD, 0x9315, 0xC043, 0x9316, 0xEC45, 0x9318, 0xC1E8, 0x9319, 0xC045, 0x931A, 0xBFFE, 0x931B, 0xEBE6, + 0x931D, 0xEBEF, 0x931E, 0xEBDE, 0x931F, 0xEBE0, 0x9320, 0xBFF5, 0x9321, 0xC042, 0x9322, 0xBFFA, 0x9323, 0xEBE7, 0x9324, 0xEBF7, + 0x9325, 0xEBF1, 0x9326, 0xC041, 0x9327, 0xEBDD, 0x9328, 0xC1E3, 0x9329, 0xEBF9, 0x932A, 0xEBFC, 0x932B, 0xBFFC, 0x932D, 0xEBEB, + 0x932E, 0xC044, 0x932F, 0xBFF9, 0x9333, 0xBFF8, 0x9334, 0xEBF5, 0x9335, 0xEBFB, 0x9336, 0xBFF6, 0x9338, 0xEBE4, 0x9339, 0xEBFA, + 0x933C, 0xEBE5, 0x9346, 0xEBEA, 0x9347, 0xEED2, 0x9349, 0xEED7, 0x934A, 0xC1E5, 0x934B, 0xC1E7, 0x934C, 0xEEDD, 0x934D, 0xC1E1, + 0x934E, 0xEEEC, 0x934F, 0xEEE3, 0x9350, 0xEED8, 0x9351, 0xEED9, 0x9352, 0xEEE2, 0x9354, 0xC1EE, 0x9355, 0xEEE1, 0x9356, 0xEED1, + 0x9357, 0xEEE0, 0x9358, 0xEED4, 0x9359, 0xEEED, 0x935A, 0xC1ED, 0x935B, 0xC1EB, 0x935C, 0xEED5, 0x935E, 0xEEE8, 0x9360, 0xEEDA, + 0x9361, 0xEEE7, 0x9363, 0xEEE9, 0x9364, 0xEED0, 0x9365, 0xC1E6, 0x9367, 0xEEEA, 0x936A, 0xEEDE, 0x936C, 0xC1EA, 0x936D, 0xEEDB, + 0x9370, 0xC1EC, 0x9371, 0xEEE4, 0x9375, 0xC1E4, 0x9376, 0xEED6, 0x9377, 0xEEE5, 0x9379, 0xEEDF, 0x937A, 0xEBE3, 0x937B, 0xEEE6, + 0x937C, 0xEED3, 0x937E, 0xC1E9, 0x9380, 0xEEEB, 0x9382, 0xC1E2, 0x9383, 0xEECE, 0x9388, 0xF160, 0x9389, 0xF159, 0x938A, 0xC2E9, + 0x938C, 0xF154, 0x938D, 0xF163, 0x938E, 0xF15B, 0x938F, 0xEEDC, 0x9391, 0xF165, 0x9392, 0xF155, 0x9394, 0xC2E8, 0x9395, 0xF15F, + 0x9396, 0xC2EA, 0x9397, 0xC2F2, 0x9398, 0xC2F0, 0x9399, 0xF161, 0x939A, 0xC2F1, 0x939B, 0xF157, 0x939D, 0xF158, 0x939E, 0xF15D, + 0x939F, 0xF162, 0x93A1, 0xEECD, 0x93A2, 0xC2EB, 0x93A3, 0xF16A, 0x93A4, 0xF167, 0x93A5, 0xF16B, 0x93A6, 0xF15E, 0x93A7, 0xF15A, + 0x93A8, 0xF168, 0x93A9, 0xF36A, 0x93AA, 0xF15C, 0x93AC, 0xC2EE, 0x93AE, 0xC2ED, 0x93AF, 0xEECF, 0x93B0, 0xC2EF, 0x93B1, 0xF164, + 0x93B2, 0xF166, 0x93B3, 0xC2EC, 0x93B4, 0xF169, 0x93B5, 0xF153, 0x93B7, 0xF156, 0x93C0, 0xF373, 0x93C2, 0xF363, 0x93C3, 0xC3EB, + 0x93C4, 0xF371, 0x93C7, 0xF361, 0x93C8, 0xC3EC, 0x93CA, 0xF36C, 0x93CC, 0xF368, 0x93CD, 0xC3F1, 0x93CE, 0xF372, 0x93CF, 0xF362, + 0x93D0, 0xF365, 0x93D1, 0xC3E9, 0x93D2, 0xF374, 0x93D4, 0xF36D, 0x93D5, 0xF370, 0x93D6, 0xC3EF, 0x93D7, 0xC3F4, 0x93D8, 0xC3F2, + 0x93D9, 0xF369, 0x93DA, 0xF364, 0x93DC, 0xC3ED, 0x93DD, 0xC3EE, 0x93DE, 0xF360, 0x93DF, 0xC3EA, 0x93E1, 0xC3E8, 0x93E2, 0xC3F0, + 0x93E3, 0xF36F, 0x93E4, 0xC3F3, 0x93E6, 0xF36B, 0x93E7, 0xF375, 0x93E8, 0xC3F5, 0x93EC, 0xF367, 0x93EE, 0xF36E, 0x93F5, 0xF4F3, + 0x93F6, 0xF542, 0x93F7, 0xF4F5, 0x93F8, 0xF4FC, 0x93F9, 0xF366, 0x93FA, 0xF4FA, 0x93FB, 0xF4E9, 0x93FC, 0xF540, 0x93FD, 0xC4C3, + 0x93FE, 0xF4ED, 0x93FF, 0xF4FE, 0x9400, 0xF4F4, 0x9403, 0xC4C2, 0x9406, 0xF544, 0x9407, 0xF4F6, 0x9409, 0xF4FB, 0x940A, 0xF4FD, + 0x940B, 0xF4E7, 0x940C, 0xF541, 0x940D, 0xF4F2, 0x940E, 0xF4F7, 0x940F, 0xF4EB, 0x9410, 0xF4EF, 0x9411, 0xF543, 0x9412, 0xF4F9, + 0x9413, 0xF4E8, 0x9414, 0xF4EC, 0x9415, 0xF4EE, 0x9416, 0xF4F8, 0x9418, 0xC4C1, 0x9419, 0xF4F1, 0x9420, 0xF4EA, 0x9428, 0xF4F0, + 0x9429, 0xF661, 0x942A, 0xF666, 0x942B, 0xC54F, 0x942C, 0xF668, 0x942E, 0xC549, 0x9430, 0xF664, 0x9431, 0xF66A, 0x9432, 0xC54E, + 0x9433, 0xC54A, 0x9435, 0xC54B, 0x9436, 0xF660, 0x9437, 0xF667, 0x9438, 0xC54D, 0x9439, 0xF665, 0x943A, 0xC54C, 0x943B, 0xF65F, + 0x943C, 0xF663, 0x943D, 0xF662, 0x943F, 0xF65E, 0x9440, 0xF669, 0x9444, 0xC5B1, 0x9445, 0xF76D, 0x9446, 0xF770, 0x9447, 0xF76C, + 0x9448, 0xF76E, 0x9449, 0xF76F, 0x944A, 0xF769, 0x944B, 0xF76A, 0x944C, 0xF767, 0x944F, 0xF76B, 0x9450, 0xF768, 0x9451, 0xC5B2, + 0x9452, 0xC5B3, 0x9455, 0xF84B, 0x9457, 0xF84D, 0x945D, 0xF84C, 0x945E, 0xF84E, 0x9460, 0xC5E0, 0x9462, 0xF84A, 0x9463, 0xC5DF, + 0x9464, 0xC5E1, 0x9468, 0xF8CB, 0x9469, 0xF8CC, 0x946A, 0xC644, 0x946B, 0xF8CA, 0x946D, 0xF953, 0x946E, 0xF952, 0x946F, 0xF954, + 0x9470, 0xC65F, 0x9471, 0xF955, 0x9472, 0xC65E, 0x9473, 0xF956, 0x9474, 0xF972, 0x9475, 0xF975, 0x9476, 0xF974, 0x9477, 0xC668, + 0x9478, 0xF973, 0x947C, 0xC672, 0x947D, 0xC670, 0x947E, 0xC671, 0x947F, 0xC677, 0x9480, 0xF9C0, 0x9481, 0xF9C1, 0x9482, 0xF9BF, + 0x9483, 0xF9C9, 0x9577, 0xAAF8, 0x957A, 0xD844, 0x957B, 0xDC78, 0x957C, 0xE8A5, 0x957D, 0xF376, 0x9580, 0xAAF9, 0x9582, 0xADAC, + 0x9583, 0xB07B, 0x9586, 0xD845, 0x9588, 0xD846, 0x9589, 0xB3AC, 0x958B, 0xB67D, 0x958C, 0xDC7A, 0x958D, 0xDC79, 0x958E, 0xB6A3, + 0x958F, 0xB67C, 0x9590, 0xDC7B, 0x9591, 0xB67E, 0x9592, 0xB6A2, 0x9593, 0xB6A1, 0x9594, 0xB67B, 0x9598, 0xB968, 0x959B, 0xE0D0, + 0x959C, 0xE0CE, 0x959E, 0xE0CF, 0x959F, 0xE0CD, 0x95A1, 0xBBD2, 0x95A3, 0xBBD5, 0x95A4, 0xBBD7, 0x95A5, 0xBBD6, 0x95A8, 0xBBD3, + 0x95A9, 0xBBD4, 0x95AB, 0xE8A7, 0x95AC, 0xE8A6, 0x95AD, 0xBE5B, 0x95AE, 0xE8A8, 0x95B0, 0xE8A9, 0x95B1, 0xBE5C, 0x95B5, 0xEC4D, + 0x95B6, 0xEC4B, 0x95B7, 0xEEF3, 0x95B9, 0xEC49, 0x95BA, 0xEC4A, 0x95BB, 0xC046, 0x95BC, 0xEC46, 0x95BD, 0xEC4E, 0x95BE, 0xEC48, + 0x95BF, 0xEC4C, 0x95C0, 0xEEEF, 0x95C3, 0xEEF1, 0x95C5, 0xEEF2, 0x95C6, 0xC1F3, 0x95C7, 0xEEEE, 0x95C8, 0xC1F2, 0x95C9, 0xEEF0, + 0x95CA, 0xC1EF, 0x95CB, 0xC1F0, 0x95CC, 0xC1F1, 0x95CD, 0xEC47, 0x95D0, 0xC2F5, 0x95D1, 0xF16E, 0x95D2, 0xF16C, 0x95D3, 0xF16D, + 0x95D4, 0xC2F3, 0x95D5, 0xC2F6, 0x95D6, 0xC2F4, 0x95DA, 0xF377, 0x95DB, 0xF378, 0x95DC, 0xC3F6, 0x95DE, 0xF545, 0x95DF, 0xF547, + 0x95E0, 0xF546, 0x95E1, 0xC4C4, 0x95E2, 0xC550, 0x95E3, 0xF66D, 0x95E4, 0xF66C, 0x95E5, 0xF66B, 0x961C, 0xAAFA, 0x961E, 0xC9AA, + 0x9620, 0xCA58, 0x9621, 0xA6E9, 0x9622, 0xCA56, 0x9623, 0xCA59, 0x9624, 0xCA57, 0x9628, 0xCBAE, 0x962A, 0xA8C1, 0x962C, 0xA8C2, + 0x962D, 0xCBB0, 0x962E, 0xA8BF, 0x962F, 0xCBAF, 0x9630, 0xCBAD, 0x9631, 0xA8C0, 0x9632, 0xA8BE, 0x9639, 0xCDD8, 0x963A, 0xCDDB, + 0x963B, 0xAAFD, 0x963C, 0xCDDA, 0x963D, 0xCDD9, 0x963F, 0xAAFC, 0x9640, 0xAAFB, 0x9642, 0xAB40, 0x9643, 0xCDDC, 0x9644, 0xAAFE, + 0x964A, 0xD0C6, 0x964B, 0xADAE, 0x964C, 0xADAF, 0x964D, 0xADB0, 0x964E, 0xD0C7, 0x964F, 0xD0C3, 0x9650, 0xADAD, 0x9651, 0xD0C4, + 0x9653, 0xD0C5, 0x9654, 0xD0C2, 0x9658, 0xB0A4, 0x965B, 0xB0A1, 0x965C, 0xD445, 0x965D, 0xB0A2, 0x965E, 0xB0A5, 0x965F, 0xD446, + 0x9661, 0xB07E, 0x9662, 0xB07C, 0x9663, 0xB07D, 0x9664, 0xB0A3, 0x966A, 0xB3AD, 0x966B, 0xD849, 0x966C, 0xB3B5, 0x966D, 0xD848, + 0x966F, 0xD84B, 0x9670, 0xB3B1, 0x9671, 0xD84A, 0x9672, 0xB6AB, 0x9673, 0xB3AF, 0x9674, 0xB3B2, 0x9675, 0xB3AE, 0x9676, 0xB3B3, + 0x9677, 0xB3B4, 0x9678, 0xB3B0, 0x967C, 0xD847, 0x967D, 0xB6A7, 0x967E, 0xDC7D, 0x9680, 0xDCA3, 0x9683, 0xDCA2, 0x9684, 0xB6AC, + 0x9685, 0xB6A8, 0x9686, 0xB6A9, 0x9687, 0xDC7C, 0x9688, 0xDC7E, 0x9689, 0xDCA1, 0x968A, 0xB6A4, 0x968B, 0xB6A6, 0x968D, 0xB6AA, + 0x968E, 0xB6A5, 0x9691, 0xE0D3, 0x9692, 0xE0D1, 0x9693, 0xE0D2, 0x9694, 0xB96A, 0x9695, 0xB96B, 0x9697, 0xE0D4, 0x9698, 0xB969, + 0x9699, 0xBBD8, 0x969B, 0xBBDA, 0x969C, 0xBBD9, 0x969E, 0xE4BB, 0x96A1, 0xE4BC, 0x96A2, 0xE8AB, 0x96A4, 0xE8AA, 0x96A7, 0xC047, + 0x96A8, 0xC048, 0x96A9, 0xEC4F, 0x96AA, 0xC049, 0x96AC, 0xEEF6, 0x96AE, 0xEEF4, 0x96B0, 0xEEF5, 0x96B1, 0xC1F4, 0x96B3, 0xF16F, + 0x96B4, 0xC3F7, 0x96B8, 0xC1F5, 0x96B9, 0xAB41, 0x96BB, 0xB0A6, 0x96BC, 0xD447, 0x96BF, 0xD84C, 0x96C0, 0xB3B6, 0x96C1, 0xB6AD, + 0x96C2, 0xDCA4, 0x96C3, 0xDCA6, 0x96C4, 0xB6AF, 0x96C5, 0xB6AE, 0x96C6, 0xB6B0, 0x96C7, 0xB6B1, 0x96C8, 0xDCA5, 0x96C9, 0xB96E, + 0x96CA, 0xB96F, 0x96CB, 0xB96D, 0x96CC, 0xBBDB, 0x96CD, 0xB96C, 0x96CE, 0xE0D5, 0x96D2, 0xBBDC, 0x96D3, 0xE8AC, 0x96D4, 0xEC50, + 0x96D5, 0xC04A, 0x96D6, 0xC1F6, 0x96D7, 0xF170, 0x96D8, 0xF174, 0x96D9, 0xC2F9, 0x96DA, 0xF171, 0x96DB, 0xC2FA, 0x96DC, 0xC2F8, + 0x96DD, 0xF175, 0x96DE, 0xC2FB, 0x96DF, 0xF173, 0x96E1, 0xF379, 0x96E2, 0xC2F7, 0x96E3, 0xC3F8, 0x96E5, 0xF8CD, 0x96E8, 0xAB42, + 0x96E9, 0xB3B8, 0x96EA, 0xB3B7, 0x96EF, 0xB6B2, 0x96F0, 0xDCA8, 0x96F1, 0xDCA7, 0x96F2, 0xB6B3, 0x96F5, 0xE0D9, 0x96F6, 0xB973, + 0x96F7, 0xB970, 0x96F8, 0xE0D8, 0x96F9, 0xB972, 0x96FA, 0xE0D6, 0x96FB, 0xB971, 0x96FD, 0xE0D7, 0x96FF, 0xE4BD, 0x9700, 0xBBDD, + 0x9702, 0xE8AF, 0x9704, 0xBE5D, 0x9705, 0xE8AD, 0x9706, 0xBE5E, 0x9707, 0xBE5F, 0x9708, 0xE8AE, 0x9709, 0xBE60, 0x970B, 0xEC51, + 0x970D, 0xC04E, 0x970E, 0xC04B, 0x970F, 0xC050, 0x9710, 0xEC53, 0x9711, 0xC04C, 0x9712, 0xEC52, 0x9713, 0xC04F, 0x9716, 0xC04D, + 0x9718, 0xEEF9, 0x9719, 0xEEFB, 0x971C, 0xC1F7, 0x971D, 0xEEFA, 0x971E, 0xC1F8, 0x971F, 0xEEF8, 0x9720, 0xEEF7, 0x9722, 0xF177, + 0x9723, 0xF176, 0x9724, 0xC2FC, 0x9725, 0xF178, 0x9726, 0xF37E, 0x9727, 0xC3FA, 0x9728, 0xF37D, 0x9729, 0xF37A, 0x972A, 0xC3F9, + 0x972B, 0xF37B, 0x972C, 0xF37C, 0x972E, 0xF548, 0x972F, 0xF549, 0x9730, 0xC4C5, 0x9732, 0xC553, 0x9735, 0xF66E, 0x9738, 0xC551, + 0x9739, 0xC552, 0x973A, 0xF66F, 0x973D, 0xC5B4, 0x973E, 0xC5B5, 0x973F, 0xF771, 0x9742, 0xC645, 0x9743, 0xF8CF, 0x9744, 0xC647, + 0x9746, 0xF8CE, 0x9747, 0xF8D0, 0x9748, 0xC646, 0x9749, 0xF957, 0x974B, 0xF9AD, 0x9752, 0xAB43, 0x9756, 0xB974, 0x9758, 0xE4BE, + 0x975A, 0xE8B0, 0x975B, 0xC051, 0x975C, 0xC052, 0x975E, 0xAB44, 0x9760, 0xBE61, 0x9761, 0xC3FB, 0x9762, 0xADB1, 0x9766, 0xC053, + 0x9768, 0xC5E2, 0x9769, 0xADB2, 0x976A, 0xD84D, 0x976C, 0xDCA9, 0x976E, 0xDCAB, 0x9770, 0xDCAA, 0x9772, 0xE0DD, 0x9773, 0xE0DA, + 0x9774, 0xB975, 0x9776, 0xB976, 0x9777, 0xE0DB, 0x9778, 0xE0DC, 0x977A, 0xE4C0, 0x977B, 0xE4C5, 0x977C, 0xBBDE, 0x977D, 0xE4BF, + 0x977E, 0xE4C1, 0x977F, 0xE4C8, 0x9780, 0xE4C3, 0x9781, 0xE4C7, 0x9782, 0xE4C4, 0x9783, 0xE4C2, 0x9784, 0xE4C6, 0x9785, 0xBBDF, + 0x9788, 0xE8B3, 0x978A, 0xE8B1, 0x978B, 0xBE63, 0x978D, 0xBE62, 0x978E, 0xE8B2, 0x978F, 0xBE64, 0x9794, 0xEC56, 0x9797, 0xEC55, + 0x9798, 0xC054, 0x9799, 0xEC54, 0x979A, 0xEEFC, 0x979C, 0xEEFE, 0x979D, 0xEF41, 0x979E, 0xEF40, 0x97A0, 0xC1F9, 0x97A1, 0xEEFD, + 0x97A2, 0xF1A1, 0x97A3, 0xC2FD, 0x97A4, 0xF17D, 0x97A5, 0xF1A2, 0x97A6, 0xC2FE, 0x97A8, 0xF17B, 0x97AA, 0xF17E, 0x97AB, 0xF17C, + 0x97AC, 0xF179, 0x97AD, 0xC340, 0x97AE, 0xF17A, 0x97B3, 0xF3A1, 0x97B6, 0xF3A3, 0x97B7, 0xF3A2, 0x97B9, 0xF54A, 0x97BB, 0xF54B, + 0x97BF, 0xF670, 0x97C1, 0xC5B7, 0x97C3, 0xC5B6, 0x97C4, 0xF84F, 0x97C5, 0xF850, 0x97C6, 0xC648, 0x97C7, 0xF8D1, 0x97C9, 0xC669, + 0x97CB, 0xADB3, 0x97CC, 0xB6B4, 0x97CD, 0xE4CA, 0x97CE, 0xE4C9, 0x97CF, 0xE8B5, 0x97D0, 0xE8B4, 0x97D3, 0xC1FA, 0x97D4, 0xEF43, + 0x97D5, 0xEF42, 0x97D6, 0xF1A5, 0x97D7, 0xF1A3, 0x97D8, 0xF1A6, 0x97D9, 0xF1A4, 0x97DC, 0xC3FC, 0x97DD, 0xF3A4, 0x97DE, 0xF3A5, + 0x97DF, 0xF3A6, 0x97E1, 0xF671, 0x97E3, 0xF772, 0x97E5, 0xF8D2, 0x97ED, 0xADB4, 0x97F0, 0xEC57, 0x97F1, 0xEF44, 0x97F3, 0xADB5, + 0x97F6, 0xBBE0, 0x97F8, 0xEC58, 0x97F9, 0xC341, 0x97FA, 0xF1A7, 0x97FB, 0xC3FD, 0x97FD, 0xF54C, 0x97FE, 0xF54D, 0x97FF, 0xC554, + 0x9800, 0xF851, 0x9801, 0xADB6, 0x9802, 0xB3BB, 0x9803, 0xB3BC, 0x9804, 0xD84E, 0x9805, 0xB6B5, 0x9806, 0xB6B6, 0x9807, 0xDCAC, + 0x9808, 0xB6B7, 0x980A, 0xB97A, 0x980C, 0xB97C, 0x980D, 0xE0DF, 0x980E, 0xE0E0, 0x980F, 0xE0DE, 0x9810, 0xB977, 0x9811, 0xB978, + 0x9812, 0xB97B, 0x9813, 0xB979, 0x9816, 0xE4CB, 0x9817, 0xBBE1, 0x9818, 0xBBE2, 0x981B, 0xE8BC, 0x981C, 0xBE67, 0x981D, 0xE8B7, + 0x981E, 0xE8B6, 0x9820, 0xE8BB, 0x9821, 0xBE65, 0x9824, 0xC05B, 0x9826, 0xE8B8, 0x9827, 0xE8BD, 0x9828, 0xE8BA, 0x9829, 0xE8B9, + 0x982B, 0xBE66, 0x982D, 0xC059, 0x982F, 0xEC5A, 0x9830, 0xC055, 0x9832, 0xEC5B, 0x9835, 0xEC59, 0x9837, 0xC058, 0x9838, 0xC056, + 0x9839, 0xC05A, 0x983B, 0xC057, 0x9841, 0xEF45, 0x9843, 0xEF4A, 0x9844, 0xEF46, 0x9845, 0xEF49, 0x9846, 0xC1FB, 0x9848, 0xEDD4, + 0x9849, 0xEF48, 0x984A, 0xEF47, 0x984C, 0xC344, 0x984D, 0xC342, 0x984E, 0xC345, 0x984F, 0xC343, 0x9850, 0xF1A8, 0x9851, 0xF1A9, + 0x9852, 0xF1AA, 0x9853, 0xC346, 0x9857, 0xF3AA, 0x9858, 0xC440, 0x9859, 0xF3A8, 0x985B, 0xC441, 0x985C, 0xF3A7, 0x985D, 0xF3A9, + 0x985E, 0xC3FE, 0x985F, 0xF551, 0x9860, 0xF54E, 0x9862, 0xF54F, 0x9863, 0xF550, 0x9864, 0xF672, 0x9865, 0xC556, 0x9867, 0xC555, + 0x9869, 0xF774, 0x986A, 0xF773, 0x986B, 0xC5B8, 0x986F, 0xC5E3, 0x9870, 0xC649, 0x9871, 0xC660, 0x9872, 0xF958, 0x9873, 0xF9AE, + 0x9874, 0xF9AF, 0x98A8, 0xADB7, 0x98A9, 0xDCAD, 0x98AC, 0xE0E1, 0x98AD, 0xE4CC, 0x98AE, 0xE4CD, 0x98AF, 0xBBE3, 0x98B1, 0xBBE4, + 0x98B2, 0xE8BE, 0x98B3, 0xBE68, 0x98B6, 0xC1FC, 0x98B8, 0xF1AB, 0x98BA, 0xC347, 0x98BB, 0xF3AD, 0x98BC, 0xC442, 0x98BD, 0xF3AC, + 0x98BE, 0xF3AE, 0x98BF, 0xF3AB, 0x98C0, 0xF675, 0x98C1, 0xF552, 0x98C2, 0xF553, 0x98C4, 0xC4C6, 0x98C6, 0xF674, 0x98C9, 0xF673, + 0x98CB, 0xF775, 0x98CC, 0xF9B0, 0x98DB, 0xADB8, 0x98DF, 0xADB9, 0x98E2, 0xB0A7, 0x98E3, 0xD448, 0x98E5, 0xD84F, 0x98E7, 0xB6B8, + 0x98E9, 0xB6BB, 0x98EA, 0xB6B9, 0x98EB, 0xDCAE, 0x98ED, 0xB6BD, 0x98EF, 0xB6BA, 0x98F2, 0xB6BC, 0x98F4, 0xB97E, 0x98F6, 0xE0E2, + 0x98F9, 0xE0E3, 0x98FA, 0xE8C0, 0x98FC, 0xB97D, 0x98FD, 0xB9A1, 0x98FE, 0xB9A2, 0x9900, 0xE4CF, 0x9902, 0xE4CE, 0x9903, 0xBBE5, + 0x9905, 0xBBE6, 0x9907, 0xE4D0, 0x9908, 0xE8BF, 0x9909, 0xBBE8, 0x990A, 0xBE69, 0x990C, 0xBBE7, 0x9910, 0xC05C, 0x9911, 0xE8C1, + 0x9912, 0xBE6B, 0x9913, 0xBE6A, 0x9914, 0xE8C2, 0x9915, 0xE8C5, 0x9916, 0xE8C3, 0x9917, 0xE8C4, 0x9918, 0xBE6C, 0x991A, 0xC061, + 0x991B, 0xC05F, 0x991E, 0xC05E, 0x991F, 0xEC5D, 0x9921, 0xC060, 0x9924, 0xEC5C, 0x9925, 0xEF4B, 0x9927, 0xEC5E, 0x9928, 0xC05D, + 0x9929, 0xEC5F, 0x992A, 0xEF4E, 0x992B, 0xEF4C, 0x992C, 0xEF4D, 0x992D, 0xEF52, 0x992E, 0xC34B, 0x992F, 0xEF51, 0x9930, 0xEF54, + 0x9931, 0xEF53, 0x9932, 0xEF50, 0x9933, 0xEF4F, 0x9935, 0xC1FD, 0x993A, 0xF1AE, 0x993C, 0xF1AD, 0x993D, 0xC34A, 0x993E, 0xC348, + 0x993F, 0xC349, 0x9941, 0xF1AC, 0x9943, 0xF3B1, 0x9945, 0xC443, 0x9947, 0xF3B0, 0x9948, 0xF3AF, 0x9949, 0xC444, 0x994B, 0xF558, + 0x994C, 0xF557, 0x994E, 0xF555, 0x9950, 0xF554, 0x9951, 0xC4C8, 0x9952, 0xC4C7, 0x9953, 0xF559, 0x9954, 0xF776, 0x9955, 0xC5B9, + 0x9956, 0xF677, 0x9957, 0xC557, 0x9958, 0xF676, 0x9959, 0xF556, 0x995B, 0xF777, 0x995C, 0xC5E4, 0x995E, 0xC661, 0x995F, 0xF959, + 0x9961, 0xF9B1, 0x9996, 0xADBA, 0x9997, 0xD850, 0x9998, 0xEF55, 0x9999, 0xADBB, 0x999C, 0xE4D2, 0x999D, 0xE4D1, 0x999E, 0xEC60, + 0x99A1, 0xEF57, 0x99A3, 0xEF56, 0x99A5, 0xC34C, 0x99A6, 0xF3B2, 0x99A7, 0xF3B3, 0x99A8, 0xC4C9, 0x99AB, 0xF9B2, 0x99AC, 0xB0A8, + 0x99AD, 0xB6BF, 0x99AE, 0xB6BE, 0x99AF, 0xE0E4, 0x99B0, 0xE0E6, 0x99B1, 0xB9A4, 0x99B2, 0xE0E5, 0x99B3, 0xB9A3, 0x99B4, 0xB9A5, + 0x99B5, 0xE0E7, 0x99B9, 0xE4D4, 0x99BA, 0xE4D6, 0x99BB, 0xE4D5, 0x99BD, 0xE4D8, 0x99C1, 0xBBE9, 0x99C2, 0xE4D7, 0x99C3, 0xE4D3, + 0x99C7, 0xE4D9, 0x99C9, 0xE8CC, 0x99CB, 0xE8CF, 0x99CC, 0xE8D1, 0x99CD, 0xE8C7, 0x99CE, 0xE8CB, 0x99CF, 0xE8C8, 0x99D0, 0xBE6E, + 0x99D1, 0xBE71, 0x99D2, 0xBE73, 0x99D3, 0xE8C9, 0x99D4, 0xE8CA, 0x99D5, 0xBE72, 0x99D6, 0xE8CD, 0x99D7, 0xE8D0, 0x99D8, 0xE8CE, + 0x99D9, 0xBE74, 0x99DB, 0xBE70, 0x99DC, 0xE8C6, 0x99DD, 0xBE6D, 0x99DF, 0xBE6F, 0x99E2, 0xC063, 0x99E3, 0xEC66, 0x99E4, 0xEC64, + 0x99E5, 0xEC63, 0x99E7, 0xEC69, 0x99E9, 0xEC68, 0x99EA, 0xEC67, 0x99EC, 0xEC62, 0x99ED, 0xC062, 0x99EE, 0xEC61, 0x99F0, 0xEC65, + 0x99F1, 0xC064, 0x99F4, 0xEF5A, 0x99F6, 0xEF5E, 0x99F7, 0xEF5B, 0x99F8, 0xEF5D, 0x99F9, 0xEF5C, 0x99FA, 0xEF59, 0x99FB, 0xEF5F, + 0x99FC, 0xEF62, 0x99FD, 0xEF60, 0x99FE, 0xEF61, 0x99FF, 0xC240, 0x9A01, 0xC1FE, 0x9A02, 0xEF58, 0x9A03, 0xEF63, 0x9A04, 0xF1B3, + 0x9A05, 0xF1B6, 0x9A06, 0xF1B8, 0x9A07, 0xF1B7, 0x9A09, 0xF1B1, 0x9A0A, 0xF1B5, 0x9A0B, 0xF1B0, 0x9A0D, 0xF1B2, 0x9A0E, 0xC34D, + 0x9A0F, 0xF1AF, 0x9A11, 0xF1B4, 0x9A14, 0xF3C0, 0x9A15, 0xF3B5, 0x9A16, 0xC445, 0x9A19, 0xC446, 0x9A1A, 0xF3B4, 0x9A1B, 0xF3B9, + 0x9A1C, 0xF3BF, 0x9A1D, 0xF3B7, 0x9A1E, 0xF3BE, 0x9A20, 0xF3BB, 0x9A22, 0xF3BA, 0x9A23, 0xF3BD, 0x9A24, 0xF3B8, 0x9A25, 0xF3B6, + 0x9A27, 0xF3BC, 0x9A29, 0xF560, 0x9A2A, 0xF55E, 0x9A2B, 0xC4CA, 0x9A2C, 0xF55D, 0x9A2D, 0xF563, 0x9A2E, 0xF561, 0x9A30, 0xC4CB, + 0x9A31, 0xF55C, 0x9A32, 0xF55A, 0x9A34, 0xF55B, 0x9A35, 0xC4CD, 0x9A36, 0xF55F, 0x9A37, 0xC4CC, 0x9A38, 0xF562, 0x9A39, 0xF678, + 0x9A3A, 0xF67E, 0x9A3D, 0xF679, 0x9A3E, 0xC55B, 0x9A3F, 0xF6A1, 0x9A40, 0xC55A, 0x9A41, 0xF67D, 0x9A42, 0xF67C, 0x9A43, 0xC559, + 0x9A44, 0xF67B, 0x9A45, 0xC558, 0x9A46, 0xF67A, 0x9A48, 0xF77D, 0x9A49, 0xF7A1, 0x9A4A, 0xF77E, 0x9A4C, 0xF77B, 0x9A4D, 0xC5BB, + 0x9A4E, 0xF778, 0x9A4F, 0xF77C, 0x9A50, 0xF7A3, 0x9A52, 0xF7A2, 0x9A53, 0xF779, 0x9A54, 0xF77A, 0x9A55, 0xC5BA, 0x9A56, 0xF852, + 0x9A57, 0xC5E7, 0x9A59, 0xF853, 0x9A5A, 0xC5E5, 0x9A5B, 0xC5E6, 0x9A5E, 0xF8D3, 0x9A5F, 0xC64A, 0x9A60, 0xF976, 0x9A62, 0xC66A, + 0x9A64, 0xF9B3, 0x9A65, 0xC66B, 0x9A66, 0xF9B4, 0x9A67, 0xF9B5, 0x9A68, 0xF9C3, 0x9A69, 0xF9C2, 0x9A6A, 0xC67A, 0x9A6B, 0xF9CD, + 0x9AA8, 0xB0A9, 0x9AAB, 0xE0E9, 0x9AAD, 0xE0E8, 0x9AAF, 0xBBEA, 0x9AB0, 0xBBEB, 0x9AB1, 0xE4DA, 0x9AB3, 0xE8D2, 0x9AB4, 0xEC6C, + 0x9AB7, 0xBE75, 0x9AB8, 0xC065, 0x9AB9, 0xEC6A, 0x9ABB, 0xEC6D, 0x9ABC, 0xC066, 0x9ABE, 0xEF64, 0x9ABF, 0xEC6B, 0x9AC0, 0xF1B9, + 0x9AC1, 0xC34E, 0x9AC2, 0xF3C1, 0x9AC6, 0xF566, 0x9AC7, 0xF564, 0x9ACA, 0xF565, 0x9ACD, 0xF6A2, 0x9ACF, 0xC55C, 0x9AD0, 0xF7A4, + 0x9AD1, 0xC5EA, 0x9AD2, 0xC5BC, 0x9AD3, 0xC5E8, 0x9AD4, 0xC5E9, 0x9AD5, 0xF8D4, 0x9AD6, 0xC662, 0x9AD8, 0xB0AA, 0x9ADC, 0xF1BA, + 0x9ADF, 0xD449, 0x9AE1, 0xB9A6, 0x9AE3, 0xE4DB, 0x9AE6, 0xBBEC, 0x9AE7, 0xE4DC, 0x9AEB, 0xE8D4, 0x9AEC, 0xE8D3, 0x9AED, 0xC068, + 0x9AEE, 0xBE76, 0x9AEF, 0xBE77, 0x9AF1, 0xE8D7, 0x9AF2, 0xE8D6, 0x9AF3, 0xE8D5, 0x9AF6, 0xEC6E, 0x9AF7, 0xEC71, 0x9AF9, 0xEC70, + 0x9AFA, 0xEC6F, 0x9AFB, 0xC067, 0x9AFC, 0xEF68, 0x9AFD, 0xEF66, 0x9AFE, 0xEF65, 0x9B01, 0xEF67, 0x9B03, 0xC34F, 0x9B04, 0xF1BC, + 0x9B05, 0xF1BD, 0x9B06, 0xC350, 0x9B08, 0xF1BB, 0x9B0A, 0xF3C3, 0x9B0B, 0xF3C2, 0x9B0C, 0xF3C5, 0x9B0D, 0xC447, 0x9B0E, 0xF3C4, + 0x9B10, 0xF567, 0x9B11, 0xF569, 0x9B12, 0xF568, 0x9B15, 0xF6A3, 0x9B16, 0xF6A6, 0x9B17, 0xF6A4, 0x9B18, 0xF6A5, 0x9B19, 0xF7A5, + 0x9B1A, 0xC5BD, 0x9B1E, 0xF854, 0x9B1F, 0xF855, 0x9B20, 0xF856, 0x9B22, 0xC64B, 0x9B23, 0xC663, 0x9B24, 0xF9B6, 0x9B25, 0xB0AB, + 0x9B27, 0xBE78, 0x9B28, 0xC069, 0x9B29, 0xF1BE, 0x9B2B, 0xF7A6, 0x9B2E, 0xF9C4, 0x9B2F, 0xD44A, 0x9B31, 0xC67B, 0x9B32, 0xB0AC, + 0x9B33, 0xEC72, 0x9B35, 0xF1BF, 0x9B37, 0xF3C6, 0x9B3A, 0xF6A7, 0x9B3B, 0xF7A7, 0x9B3C, 0xB0AD, 0x9B3E, 0xE4DD, 0x9B3F, 0xE4DE, + 0x9B41, 0xBBED, 0x9B42, 0xBBEE, 0x9B43, 0xE8D9, 0x9B44, 0xBE7A, 0x9B45, 0xBE79, 0x9B46, 0xE8D8, 0x9B48, 0xEF69, 0x9B4A, 0xF1C0, + 0x9B4B, 0xF1C2, 0x9B4C, 0xF1C1, 0x9B4D, 0xC353, 0x9B4E, 0xC352, 0x9B4F, 0xC351, 0x9B51, 0xC55E, 0x9B52, 0xF6A8, 0x9B54, 0xC55D, + 0x9B55, 0xF7A9, 0x9B56, 0xF7A8, 0x9B58, 0xC64C, 0x9B59, 0xF8D5, 0x9B5A, 0xB3BD, 0x9B5B, 0xE0EA, 0x9B5F, 0xE4E1, 0x9B60, 0xE4DF, + 0x9B61, 0xE4E0, 0x9B64, 0xE8E2, 0x9B66, 0xE8DD, 0x9B67, 0xE8DA, 0x9B68, 0xE8E1, 0x9B6C, 0xE8E3, 0x9B6F, 0xBE7C, 0x9B70, 0xE8E0, + 0x9B71, 0xE8DC, 0x9B74, 0xE8DB, 0x9B75, 0xE8DF, 0x9B76, 0xE8DE, 0x9B77, 0xBE7B, 0x9B7A, 0xEC7D, 0x9B7B, 0xEC78, 0x9B7C, 0xEC76, + 0x9B7D, 0xECA1, 0x9B7E, 0xEC77, 0x9B80, 0xEC73, 0x9B82, 0xEC79, 0x9B85, 0xEC74, 0x9B86, 0xEF72, 0x9B87, 0xEC75, 0x9B88, 0xECA2, + 0x9B90, 0xEC7C, 0x9B91, 0xC06A, 0x9B92, 0xEC7B, 0x9B93, 0xEC7A, 0x9B95, 0xEC7E, 0x9B9A, 0xEF6A, 0x9B9B, 0xEF6D, 0x9B9E, 0xEF6C, + 0x9BA0, 0xEF74, 0x9BA1, 0xEF6F, 0x9BA2, 0xEF73, 0x9BA4, 0xEF71, 0x9BA5, 0xEF70, 0x9BA6, 0xEF6E, 0x9BA8, 0xEF6B, 0x9BAA, 0xC243, + 0x9BAB, 0xC242, 0x9BAD, 0xC244, 0x9BAE, 0xC241, 0x9BAF, 0xEF75, 0x9BB5, 0xF1C8, 0x9BB6, 0xF1CB, 0x9BB8, 0xF1C9, 0x9BB9, 0xF1CD, + 0x9BBD, 0xF1CE, 0x9BBF, 0xF1C6, 0x9BC0, 0xC358, 0x9BC1, 0xF1C7, 0x9BC3, 0xF1C5, 0x9BC4, 0xF1CC, 0x9BC6, 0xF1C4, 0x9BC7, 0xF1C3, + 0x9BC8, 0xC357, 0x9BC9, 0xC355, 0x9BCA, 0xC354, 0x9BD3, 0xF1CA, 0x9BD4, 0xF3CF, 0x9BD5, 0xF3D5, 0x9BD6, 0xC44A, 0x9BD7, 0xF3D0, + 0x9BD9, 0xF3D3, 0x9BDA, 0xF3D7, 0x9BDB, 0xC44B, 0x9BDC, 0xF3D2, 0x9BDE, 0xF3CA, 0x9BE0, 0xF3C9, 0x9BE1, 0xF3D6, 0x9BE2, 0xF3CD, + 0x9BE4, 0xF3CB, 0x9BE5, 0xF3D4, 0x9BE6, 0xF3CC, 0x9BE7, 0xC449, 0x9BE8, 0xC448, 0x9BEA, 0xF3C7, 0x9BEB, 0xF3C8, 0x9BEC, 0xF3D1, + 0x9BF0, 0xF3CE, 0x9BF7, 0xF56C, 0x9BF8, 0xF56F, 0x9BFD, 0xC356, 0x9C05, 0xF56D, 0x9C06, 0xF573, 0x9C07, 0xF571, 0x9C08, 0xF56B, + 0x9C09, 0xF576, 0x9C0B, 0xF56A, 0x9C0D, 0xC4CF, 0x9C0E, 0xF572, 0x9C12, 0xF56E, 0x9C13, 0xC4CE, 0x9C14, 0xF575, 0x9C17, 0xF574, + 0x9C1C, 0xF6AB, 0x9C1D, 0xF6AA, 0x9C21, 0xF6B1, 0x9C23, 0xF6AD, 0x9C24, 0xF6B0, 0x9C25, 0xC560, 0x9C28, 0xF6AE, 0x9C29, 0xF6AF, + 0x9C2B, 0xF6A9, 0x9C2C, 0xF6AC, 0x9C2D, 0xC55F, 0x9C31, 0xC5BF, 0x9C32, 0xF7B4, 0x9C33, 0xF7AF, 0x9C34, 0xF7B3, 0x9C36, 0xF7B6, + 0x9C37, 0xF7B2, 0x9C39, 0xF7AE, 0x9C3B, 0xC5C1, 0x9C3C, 0xF7B1, 0x9C3D, 0xF7B5, 0x9C3E, 0xC5C0, 0x9C3F, 0xF7AC, 0x9C40, 0xF570, + 0x9C41, 0xF7B0, 0x9C44, 0xF7AD, 0x9C46, 0xF7AA, 0x9C48, 0xF7AB, 0x9C49, 0xC5BE, 0x9C4A, 0xF85A, 0x9C4B, 0xF85C, 0x9C4C, 0xF85F, + 0x9C4D, 0xF85B, 0x9C4E, 0xF860, 0x9C50, 0xF859, 0x9C52, 0xF857, 0x9C54, 0xC5EB, 0x9C55, 0xF85D, 0x9C56, 0xC5ED, 0x9C57, 0xC5EC, + 0x9C58, 0xF858, 0x9C59, 0xF85E, 0x9C5E, 0xF8DA, 0x9C5F, 0xC64D, 0x9C60, 0xF8DB, 0x9C62, 0xF8D9, 0x9C63, 0xF8D6, 0x9C66, 0xF8D8, + 0x9C67, 0xF8D7, 0x9C68, 0xF95A, 0x9C6D, 0xF95C, 0x9C6E, 0xF95B, 0x9C71, 0xF979, 0x9C73, 0xF978, 0x9C74, 0xF977, 0x9C75, 0xF97A, + 0x9C77, 0xC673, 0x9C78, 0xC674, 0x9C79, 0xF9CA, 0x9C7A, 0xF9CE, 0x9CE5, 0xB3BE, 0x9CE6, 0xDCAF, 0x9CE7, 0xE0ED, 0x9CE9, 0xB9A7, + 0x9CEA, 0xE0EB, 0x9CED, 0xE0EC, 0x9CF1, 0xE4E2, 0x9CF2, 0xE4E3, 0x9CF3, 0xBBF1, 0x9CF4, 0xBBEF, 0x9CF5, 0xE4E4, 0x9CF6, 0xBBF0, + 0x9CF7, 0xE8E8, 0x9CF9, 0xE8EB, 0x9CFA, 0xE8E5, 0x9CFB, 0xE8EC, 0x9CFC, 0xE8E4, 0x9CFD, 0xE8E6, 0x9CFF, 0xE8E7, 0x9D00, 0xE8EA, + 0x9D03, 0xBEA1, 0x9D04, 0xE8EF, 0x9D05, 0xE8EE, 0x9D06, 0xBE7D, 0x9D07, 0xE8E9, 0x9D08, 0xE8ED, 0x9D09, 0xBE7E, 0x9D10, 0xECAC, + 0x9D12, 0xC06F, 0x9D14, 0xECA7, 0x9D15, 0xC06B, 0x9D17, 0xECA4, 0x9D18, 0xECAA, 0x9D19, 0xECAD, 0x9D1B, 0xC070, 0x9D1D, 0xECA9, + 0x9D1E, 0xECA6, 0x9D1F, 0xECAE, 0x9D20, 0xECA5, 0x9D22, 0xECAB, 0x9D23, 0xC06C, 0x9D25, 0xECA3, 0x9D26, 0xC06D, 0x9D28, 0xC06E, + 0x9D29, 0xECA8, 0x9D2D, 0xEFA9, 0x9D2E, 0xEF7A, 0x9D2F, 0xEF7B, 0x9D30, 0xEF7E, 0x9D31, 0xEF7C, 0x9D33, 0xEF76, 0x9D36, 0xEF79, + 0x9D37, 0xEFA5, 0x9D38, 0xEF7D, 0x9D3B, 0xC245, 0x9D3D, 0xEFA7, 0x9D3E, 0xEFA4, 0x9D3F, 0xC246, 0x9D40, 0xEFA6, 0x9D41, 0xEF77, + 0x9D42, 0xEFA2, 0x9D43, 0xEFA3, 0x9D45, 0xEFA1, 0x9D4A, 0xF1D2, 0x9D4B, 0xF1D4, 0x9D4C, 0xF1D7, 0x9D4F, 0xF1D1, 0x9D51, 0xC359, + 0x9D52, 0xF1D9, 0x9D53, 0xF1D0, 0x9D54, 0xF1DA, 0x9D56, 0xF1D6, 0x9D57, 0xF1D8, 0x9D58, 0xF1DC, 0x9D59, 0xF1D5, 0x9D5A, 0xF1DD, + 0x9D5B, 0xF1D3, 0x9D5C, 0xF1CF, 0x9D5D, 0xC35A, 0x9D5F, 0xF1DB, 0x9D60, 0xC35B, 0x9D61, 0xC44D, 0x9D67, 0xEF78, 0x9D68, 0xF3F1, + 0x9D69, 0xF3E8, 0x9D6A, 0xC44F, 0x9D6B, 0xF3E4, 0x9D6C, 0xC450, 0x9D6F, 0xF3ED, 0x9D70, 0xF3E7, 0x9D71, 0xF3DD, 0x9D72, 0xC44E, + 0x9D73, 0xF3EA, 0x9D74, 0xF3E5, 0x9D75, 0xF3E6, 0x9D77, 0xF3D8, 0x9D78, 0xF3DF, 0x9D79, 0xF3EE, 0x9D7B, 0xF3EB, 0x9D7D, 0xF3E3, + 0x9D7F, 0xF3EF, 0x9D80, 0xF3DE, 0x9D81, 0xF3D9, 0x9D82, 0xF3EC, 0x9D84, 0xF3DB, 0x9D85, 0xF3E9, 0x9D86, 0xF3E0, 0x9D87, 0xF3F0, + 0x9D88, 0xF3DC, 0x9D89, 0xC44C, 0x9D8A, 0xF3DA, 0x9D8B, 0xF3E1, 0x9D8C, 0xF3E2, 0x9D90, 0xF57D, 0x9D92, 0xF57B, 0x9D94, 0xF5A2, + 0x9D96, 0xF5AE, 0x9D97, 0xF5A5, 0x9D98, 0xF57C, 0x9D99, 0xF578, 0x9D9A, 0xF5A7, 0x9D9B, 0xF57E, 0x9D9C, 0xF5A3, 0x9D9D, 0xF57A, + 0x9D9E, 0xF5AA, 0x9D9F, 0xF577, 0x9DA0, 0xF5A1, 0x9DA1, 0xF5A6, 0x9DA2, 0xF5A8, 0x9DA3, 0xF5AB, 0x9DA4, 0xF579, 0x9DA6, 0xF5AF, + 0x9DA7, 0xF5B0, 0x9DA8, 0xF5A9, 0x9DA9, 0xF5AD, 0x9DAA, 0xF5A4, 0x9DAC, 0xF6C1, 0x9DAD, 0xF6C4, 0x9DAF, 0xC561, 0x9DB1, 0xF6C3, + 0x9DB2, 0xF6C8, 0x9DB3, 0xF6C6, 0x9DB4, 0xC562, 0x9DB5, 0xF6BD, 0x9DB6, 0xF6B3, 0x9DB7, 0xF6B2, 0x9DB8, 0xC564, 0x9DB9, 0xF6BF, + 0x9DBA, 0xF6C0, 0x9DBB, 0xF6BC, 0x9DBC, 0xF6B4, 0x9DBE, 0xF6B9, 0x9DBF, 0xF5AC, 0x9DC1, 0xF6B5, 0x9DC2, 0xC563, 0x9DC3, 0xF6BB, + 0x9DC5, 0xF6BA, 0x9DC7, 0xF6B6, 0x9DC8, 0xF6C2, 0x9DCA, 0xF6B7, 0x9DCB, 0xF7BB, 0x9DCC, 0xF6C5, 0x9DCD, 0xF6C7, 0x9DCE, 0xF6BE, + 0x9DCF, 0xF6B8, 0x9DD0, 0xF7BC, 0x9DD1, 0xF7BE, 0x9DD2, 0xF7B8, 0x9DD3, 0xC5C2, 0x9DD5, 0xF7C5, 0x9DD6, 0xF7C3, 0x9DD7, 0xC5C3, + 0x9DD8, 0xF7C2, 0x9DD9, 0xF7C1, 0x9DDA, 0xF7BA, 0x9DDB, 0xF7B7, 0x9DDC, 0xF7BD, 0x9DDD, 0xF7C6, 0x9DDE, 0xF7B9, 0x9DDF, 0xF7BF, + 0x9DE1, 0xF869, 0x9DE2, 0xF86E, 0x9DE3, 0xF864, 0x9DE4, 0xF867, 0x9DE5, 0xC5EE, 0x9DE6, 0xF86B, 0x9DE8, 0xF872, 0x9DE9, 0xF7C0, + 0x9DEB, 0xF865, 0x9DEC, 0xF86F, 0x9DED, 0xF873, 0x9DEE, 0xF86A, 0x9DEF, 0xF863, 0x9DF0, 0xF86D, 0x9DF2, 0xF86C, 0x9DF3, 0xF871, + 0x9DF4, 0xF870, 0x9DF5, 0xF7C4, 0x9DF6, 0xF868, 0x9DF7, 0xF862, 0x9DF8, 0xF866, 0x9DF9, 0xC64E, 0x9DFA, 0xC64F, 0x9DFB, 0xF861, + 0x9DFD, 0xF8E6, 0x9DFE, 0xF8DD, 0x9DFF, 0xF8E5, 0x9E00, 0xF8E2, 0x9E01, 0xF8E3, 0x9E02, 0xF8DC, 0x9E03, 0xF8DF, 0x9E04, 0xF8E7, + 0x9E05, 0xF8E1, 0x9E06, 0xF8E0, 0x9E07, 0xF8DE, 0x9E09, 0xF8E4, 0x9E0B, 0xF95D, 0x9E0D, 0xF95E, 0x9E0F, 0xF960, 0x9E10, 0xF95F, + 0x9E11, 0xF962, 0x9E12, 0xF961, 0x9E13, 0xF97C, 0x9E14, 0xF97B, 0x9E15, 0xF9B7, 0x9E17, 0xF9B8, 0x9E19, 0xF9C5, 0x9E1A, 0xC678, + 0x9E1B, 0xC67C, 0x9E1D, 0xF9CF, 0x9E1E, 0xC67D, 0x9E75, 0xB3BF, 0x9E79, 0xC4D0, 0x9E7A, 0xF6C9, 0x9E7C, 0xC650, 0x9E7D, 0xC651, + 0x9E7F, 0xB3C0, 0x9E80, 0xE0EE, 0x9E82, 0xB9A8, 0x9E83, 0xE8F0, 0x9E86, 0xECB0, 0x9E87, 0xECB1, 0x9E88, 0xECAF, 0x9E89, 0xEFAB, + 0x9E8A, 0xEFAA, 0x9E8B, 0xC247, 0x9E8C, 0xF1DF, 0x9E8D, 0xEFAC, 0x9E8E, 0xF1DE, 0x9E91, 0xF3F3, 0x9E92, 0xC451, 0x9E93, 0xC453, + 0x9E94, 0xF3F2, 0x9E97, 0xC452, 0x9E99, 0xF5B1, 0x9E9A, 0xF5B3, 0x9E9B, 0xF5B2, 0x9E9C, 0xF6CA, 0x9E9D, 0xC565, 0x9E9F, 0xC5EF, + 0x9EA0, 0xF8E8, 0x9EA1, 0xF963, 0x9EA4, 0xF9D2, 0x9EA5, 0xB3C1, 0x9EA7, 0xE4E5, 0x9EA9, 0xBEA2, 0x9EAD, 0xECB3, 0x9EAE, 0xECB2, + 0x9EB0, 0xEFAD, 0x9EB4, 0xC454, 0x9EB5, 0xC4D1, 0x9EB6, 0xF7C7, 0x9EB7, 0xF9CB, 0x9EBB, 0xB3C2, 0x9EBC, 0xBBF2, 0x9EBE, 0xBEA3, + 0x9EC0, 0xF3F4, 0x9EC2, 0xF874, 0x9EC3, 0xB6C0, 0x9EC8, 0xEFAE, 0x9ECC, 0xC664, 0x9ECD, 0xB6C1, 0x9ECE, 0xBEA4, 0x9ECF, 0xC248, + 0x9ED0, 0xF875, 0x9ED1, 0xB6C2, 0x9ED3, 0xE8F1, 0x9ED4, 0xC072, 0x9ED5, 0xECB4, 0x9ED6, 0xECB5, 0x9ED8, 0xC071, 0x9EDA, 0xEFAF, + 0x9EDB, 0xC24C, 0x9EDC, 0xC24A, 0x9EDD, 0xC24B, 0x9EDE, 0xC249, 0x9EDF, 0xF1E0, 0x9EE0, 0xC35C, 0x9EE4, 0xF5B5, 0x9EE5, 0xF5B4, + 0x9EE6, 0xF5B7, 0x9EE7, 0xF5B6, 0x9EE8, 0xC4D2, 0x9EEB, 0xF6CB, 0x9EED, 0xF6CD, 0x9EEE, 0xF6CC, 0x9EEF, 0xC566, 0x9EF0, 0xF7C8, + 0x9EF2, 0xF876, 0x9EF3, 0xF877, 0x9EF4, 0xC5F0, 0x9EF5, 0xF964, 0x9EF6, 0xF97D, 0x9EF7, 0xC675, 0x9EF9, 0xDCB0, 0x9EFA, 0xECB6, + 0x9EFB, 0xEFB0, 0x9EFC, 0xF3F5, 0x9EFD, 0xE0EF, 0x9EFF, 0xEFB1, 0x9F00, 0xF1E2, 0x9F01, 0xF1E1, 0x9F06, 0xF878, 0x9F07, 0xC652, + 0x9F09, 0xF965, 0x9F0A, 0xF97E, 0x9F0E, 0xB9A9, 0x9F0F, 0xE8F2, 0x9F10, 0xE8F3, 0x9F12, 0xECB7, 0x9F13, 0xB9AA, 0x9F15, 0xC35D, + 0x9F16, 0xF1E3, 0x9F18, 0xF6CF, 0x9F19, 0xC567, 0x9F1A, 0xF6D0, 0x9F1B, 0xF6CE, 0x9F1C, 0xF879, 0x9F1E, 0xF8E9, 0x9F20, 0xB9AB, + 0x9F22, 0xEFB4, 0x9F23, 0xEFB3, 0x9F24, 0xEFB2, 0x9F25, 0xF1E4, 0x9F28, 0xF1E8, 0x9F29, 0xF1E7, 0x9F2A, 0xF1E6, 0x9F2B, 0xF1E5, + 0x9F2C, 0xC35E, 0x9F2D, 0xF3F6, 0x9F2E, 0xF5B9, 0x9F2F, 0xC4D3, 0x9F30, 0xF5B8, 0x9F31, 0xF6D1, 0x9F32, 0xF7CB, 0x9F33, 0xF7CA, + 0x9F34, 0xC5C4, 0x9F35, 0xF7C9, 0x9F36, 0xF87C, 0x9F37, 0xF87B, 0x9F38, 0xF87A, 0x9F3B, 0xBBF3, 0x9F3D, 0xECB8, 0x9F3E, 0xC24D, + 0x9F40, 0xF3F7, 0x9F41, 0xF3F8, 0x9F42, 0xF7CC, 0x9F43, 0xF87D, 0x9F46, 0xF8EA, 0x9F47, 0xF966, 0x9F48, 0xF9B9, 0x9F49, 0xF9D4, + 0x9F4A, 0xBBF4, 0x9F4B, 0xC24E, 0x9F4C, 0xF1E9, 0x9F4D, 0xF3F9, 0x9F4E, 0xF6D2, 0x9F4F, 0xF87E, 0x9F52, 0xBEA6, 0x9F54, 0xEFB5, + 0x9F55, 0xF1EA, 0x9F56, 0xF3FA, 0x9F57, 0xF3FB, 0x9F58, 0xF3FC, 0x9F59, 0xF5BE, 0x9F5B, 0xF5BA, 0x9F5C, 0xC568, 0x9F5D, 0xF5BD, + 0x9F5E, 0xF5BC, 0x9F5F, 0xC4D4, 0x9F60, 0xF5BB, 0x9F61, 0xC4D6, 0x9F63, 0xC4D5, 0x9F64, 0xF6D4, 0x9F65, 0xF6D3, 0x9F66, 0xC569, + 0x9F67, 0xC56A, 0x9F6A, 0xC5C6, 0x9F6B, 0xF7CD, 0x9F6C, 0xC5C5, 0x9F6E, 0xF8A3, 0x9F6F, 0xF8A4, 0x9F70, 0xF8A2, 0x9F71, 0xF8A1, + 0x9F72, 0xC654, 0x9F74, 0xF8EB, 0x9F75, 0xF8EC, 0x9F76, 0xF8ED, 0x9F77, 0xC653, 0x9F78, 0xF967, 0x9F79, 0xF96A, 0x9F7A, 0xF969, + 0x9F7B, 0xF968, 0x9F7E, 0xF9D3, 0x9F8D, 0xC073, 0x9F90, 0xC365, 0x9F91, 0xF5BF, 0x9F92, 0xF6D5, 0x9F94, 0xC5C7, 0x9F95, 0xF7CE, + 0x9F98, 0xF9D5, 0x9F9C, 0xC074, 0x9FA0, 0xEFB6, 0x9FA2, 0xF7CF, 0x9FA4, 0xF9A1, 0xFA0C, 0xC94A, 0xFA0D, 0xDDFC, 0xFE30, 0xA14A, + 0xFE31, 0xA157, 0xFE33, 0xA159, 0xFE34, 0xA15B, 0xFE35, 0xA15F, 0xFE36, 0xA160, 0xFE37, 0xA163, 0xFE38, 0xA164, 0xFE39, 0xA167, + 0xFE3A, 0xA168, 0xFE3B, 0xA16B, 0xFE3C, 0xA16C, 0xFE3D, 0xA16F, 0xFE3E, 0xA170, 0xFE3F, 0xA173, 0xFE40, 0xA174, 0xFE41, 0xA177, + 0xFE42, 0xA178, 0xFE43, 0xA17B, 0xFE44, 0xA17C, 0xFE49, 0xA1C6, 0xFE4A, 0xA1C7, 0xFE4B, 0xA1CA, 0xFE4C, 0xA1CB, 0xFE4D, 0xA1C8, + 0xFE4E, 0xA1C9, 0xFE4F, 0xA15C, 0xFE50, 0xA14D, 0xFE51, 0xA14E, 0xFE52, 0xA14F, 0xFE54, 0xA151, 0xFE55, 0xA152, 0xFE56, 0xA153, + 0xFE57, 0xA154, 0xFE59, 0xA17D, 0xFE5A, 0xA17E, 0xFE5B, 0xA1A1, 0xFE5C, 0xA1A2, 0xFE5D, 0xA1A3, 0xFE5E, 0xA1A4, 0xFE5F, 0xA1CC, + 0xFE60, 0xA1CD, 0xFE61, 0xA1CE, 0xFE62, 0xA1DE, 0xFE63, 0xA1DF, 0xFE64, 0xA1E0, 0xFE65, 0xA1E1, 0xFE66, 0xA1E2, 0xFE68, 0xA242, + 0xFE69, 0xA24C, 0xFE6A, 0xA24D, 0xFE6B, 0xA24E, 0xFF01, 0xA149, 0xFF03, 0xA1AD, 0xFF04, 0xA243, 0xFF05, 0xA248, 0xFF06, 0xA1AE, + 0xFF08, 0xA15D, 0xFF09, 0xA15E, 0xFF0A, 0xA1AF, 0xFF0B, 0xA1CF, 0xFF0C, 0xA141, 0xFF0D, 0xA1D0, 0xFF0E, 0xA144, 0xFF0F, 0xA1FE, + 0xFF10, 0xA2AF, 0xFF11, 0xA2B0, 0xFF12, 0xA2B1, 0xFF13, 0xA2B2, 0xFF14, 0xA2B3, 0xFF15, 0xA2B4, 0xFF16, 0xA2B5, 0xFF17, 0xA2B6, + 0xFF18, 0xA2B7, 0xFF19, 0xA2B8, 0xFF1A, 0xA147, 0xFF1B, 0xA146, 0xFF1C, 0xA1D5, 0xFF1D, 0xA1D7, 0xFF1E, 0xA1D6, 0xFF1F, 0xA148, + 0xFF20, 0xA249, 0xFF21, 0xA2CF, 0xFF22, 0xA2D0, 0xFF23, 0xA2D1, 0xFF24, 0xA2D2, 0xFF25, 0xA2D3, 0xFF26, 0xA2D4, 0xFF27, 0xA2D5, + 0xFF28, 0xA2D6, 0xFF29, 0xA2D7, 0xFF2A, 0xA2D8, 0xFF2B, 0xA2D9, 0xFF2C, 0xA2DA, 0xFF2D, 0xA2DB, 0xFF2E, 0xA2DC, 0xFF2F, 0xA2DD, + 0xFF30, 0xA2DE, 0xFF31, 0xA2DF, 0xFF32, 0xA2E0, 0xFF33, 0xA2E1, 0xFF34, 0xA2E2, 0xFF35, 0xA2E3, 0xFF36, 0xA2E4, 0xFF37, 0xA2E5, + 0xFF38, 0xA2E6, 0xFF39, 0xA2E7, 0xFF3A, 0xA2E8, 0xFF3C, 0xA240, 0xFF3F, 0xA1C4, 0xFF41, 0xA2E9, 0xFF42, 0xA2EA, 0xFF43, 0xA2EB, + 0xFF44, 0xA2EC, 0xFF45, 0xA2ED, 0xFF46, 0xA2EE, 0xFF47, 0xA2EF, 0xFF48, 0xA2F0, 0xFF49, 0xA2F1, 0xFF4A, 0xA2F2, 0xFF4B, 0xA2F3, + 0xFF4C, 0xA2F4, 0xFF4D, 0xA2F5, 0xFF4E, 0xA2F6, 0xFF4F, 0xA2F7, 0xFF50, 0xA2F8, 0xFF51, 0xA2F9, 0xFF52, 0xA2FA, 0xFF53, 0xA2FB, + 0xFF54, 0xA2FC, 0xFF55, 0xA2FD, 0xFF56, 0xA2FE, 0xFF57, 0xA340, 0xFF58, 0xA341, 0xFF59, 0xA342, 0xFF5A, 0xA343, 0xFF5B, 0xA161, + 0xFF5C, 0xA155, 0xFF5D, 0xA162, 0xFF5E, 0xA1E3, 0xFFE0, 0xA246, 0xFFE1, 0xA247, 0xFFE3, 0xA1C3, 0xFFE5, 0xA244, 0, 0 +}; + +static const WCHAR oem2uni950[] = { /* Big5 --> Unicode pairs */ + 0xA140, 0x3000, 0xA141, 0xFF0C, 0xA142, 0x3001, 0xA143, 0x3002, 0xA144, 0xFF0E, 0xA145, 0x2027, 0xA146, 0xFF1B, 0xA147, 0xFF1A, + 0xA148, 0xFF1F, 0xA149, 0xFF01, 0xA14A, 0xFE30, 0xA14B, 0x2026, 0xA14C, 0x2025, 0xA14D, 0xFE50, 0xA14E, 0xFE51, 0xA14F, 0xFE52, + 0xA150, 0x00B7, 0xA151, 0xFE54, 0xA152, 0xFE55, 0xA153, 0xFE56, 0xA154, 0xFE57, 0xA155, 0xFF5C, 0xA156, 0x2013, 0xA157, 0xFE31, + 0xA158, 0x2014, 0xA159, 0xFE33, 0xA15A, 0x2574, 0xA15B, 0xFE34, 0xA15C, 0xFE4F, 0xA15D, 0xFF08, 0xA15E, 0xFF09, 0xA15F, 0xFE35, + 0xA160, 0xFE36, 0xA161, 0xFF5B, 0xA162, 0xFF5D, 0xA163, 0xFE37, 0xA164, 0xFE38, 0xA165, 0x3014, 0xA166, 0x3015, 0xA167, 0xFE39, + 0xA168, 0xFE3A, 0xA169, 0x3010, 0xA16A, 0x3011, 0xA16B, 0xFE3B, 0xA16C, 0xFE3C, 0xA16D, 0x300A, 0xA16E, 0x300B, 0xA16F, 0xFE3D, + 0xA170, 0xFE3E, 0xA171, 0x3008, 0xA172, 0x3009, 0xA173, 0xFE3F, 0xA174, 0xFE40, 0xA175, 0x300C, 0xA176, 0x300D, 0xA177, 0xFE41, + 0xA178, 0xFE42, 0xA179, 0x300E, 0xA17A, 0x300F, 0xA17B, 0xFE43, 0xA17C, 0xFE44, 0xA17D, 0xFE59, 0xA17E, 0xFE5A, 0xA1A1, 0xFE5B, + 0xA1A2, 0xFE5C, 0xA1A3, 0xFE5D, 0xA1A4, 0xFE5E, 0xA1A5, 0x2018, 0xA1A6, 0x2019, 0xA1A7, 0x201C, 0xA1A8, 0x201D, 0xA1A9, 0x301D, + 0xA1AA, 0x301E, 0xA1AB, 0x2035, 0xA1AC, 0x2032, 0xA1AD, 0xFF03, 0xA1AE, 0xFF06, 0xA1AF, 0xFF0A, 0xA1B0, 0x203B, 0xA1B1, 0x00A7, + 0xA1B2, 0x3003, 0xA1B3, 0x25CB, 0xA1B4, 0x25CF, 0xA1B5, 0x25B3, 0xA1B6, 0x25B2, 0xA1B7, 0x25CE, 0xA1B8, 0x2606, 0xA1B9, 0x2605, + 0xA1BA, 0x25C7, 0xA1BB, 0x25C6, 0xA1BC, 0x25A1, 0xA1BD, 0x25A0, 0xA1BE, 0x25BD, 0xA1BF, 0x25BC, 0xA1C0, 0x32A3, 0xA1C1, 0x2105, + 0xA1C2, 0x00AF, 0xA1C3, 0xFFE3, 0xA1C4, 0xFF3F, 0xA1C5, 0x02CD, 0xA1C6, 0xFE49, 0xA1C7, 0xFE4A, 0xA1C8, 0xFE4D, 0xA1C9, 0xFE4E, + 0xA1CA, 0xFE4B, 0xA1CB, 0xFE4C, 0xA1CC, 0xFE5F, 0xA1CD, 0xFE60, 0xA1CE, 0xFE61, 0xA1CF, 0xFF0B, 0xA1D0, 0xFF0D, 0xA1D1, 0x00D7, + 0xA1D2, 0x00F7, 0xA1D3, 0x00B1, 0xA1D4, 0x221A, 0xA1D5, 0xFF1C, 0xA1D6, 0xFF1E, 0xA1D7, 0xFF1D, 0xA1D8, 0x2266, 0xA1D9, 0x2267, + 0xA1DA, 0x2260, 0xA1DB, 0x221E, 0xA1DC, 0x2252, 0xA1DD, 0x2261, 0xA1DE, 0xFE62, 0xA1DF, 0xFE63, 0xA1E0, 0xFE64, 0xA1E1, 0xFE65, + 0xA1E2, 0xFE66, 0xA1E3, 0xFF5E, 0xA1E4, 0x2229, 0xA1E5, 0x222A, 0xA1E6, 0x22A5, 0xA1E7, 0x2220, 0xA1E8, 0x221F, 0xA1E9, 0x22BF, + 0xA1EA, 0x33D2, 0xA1EB, 0x33D1, 0xA1EC, 0x222B, 0xA1ED, 0x222E, 0xA1EE, 0x2235, 0xA1EF, 0x2234, 0xA1F0, 0x2640, 0xA1F1, 0x2642, + 0xA1F2, 0x2295, 0xA1F3, 0x2299, 0xA1F4, 0x2191, 0xA1F5, 0x2193, 0xA1F6, 0x2190, 0xA1F7, 0x2192, 0xA1F8, 0x2196, 0xA1F9, 0x2197, + 0xA1FA, 0x2199, 0xA1FB, 0x2198, 0xA1FC, 0x2225, 0xA1FD, 0x2223, 0xA1FE, 0xFF0F, 0xA240, 0xFF3C, 0xA241, 0x2215, 0xA242, 0xFE68, + 0xA243, 0xFF04, 0xA244, 0xFFE5, 0xA245, 0x3012, 0xA246, 0xFFE0, 0xA247, 0xFFE1, 0xA248, 0xFF05, 0xA249, 0xFF20, 0xA24A, 0x2103, + 0xA24B, 0x2109, 0xA24C, 0xFE69, 0xA24D, 0xFE6A, 0xA24E, 0xFE6B, 0xA24F, 0x33D5, 0xA250, 0x339C, 0xA251, 0x339D, 0xA252, 0x339E, + 0xA253, 0x33CE, 0xA254, 0x33A1, 0xA255, 0x338E, 0xA256, 0x338F, 0xA257, 0x33C4, 0xA258, 0x00B0, 0xA259, 0x5159, 0xA25A, 0x515B, + 0xA25B, 0x515E, 0xA25C, 0x515D, 0xA25D, 0x5161, 0xA25E, 0x5163, 0xA25F, 0x55E7, 0xA260, 0x74E9, 0xA261, 0x7CCE, 0xA262, 0x2581, + 0xA263, 0x2582, 0xA264, 0x2583, 0xA265, 0x2584, 0xA266, 0x2585, 0xA267, 0x2586, 0xA268, 0x2587, 0xA269, 0x2588, 0xA26A, 0x258F, + 0xA26B, 0x258E, 0xA26C, 0x258D, 0xA26D, 0x258C, 0xA26E, 0x258B, 0xA26F, 0x258A, 0xA270, 0x2589, 0xA271, 0x253C, 0xA272, 0x2534, + 0xA273, 0x252C, 0xA274, 0x2524, 0xA275, 0x251C, 0xA276, 0x2594, 0xA277, 0x2500, 0xA278, 0x2502, 0xA279, 0x2595, 0xA27A, 0x250C, + 0xA27B, 0x2510, 0xA27C, 0x2514, 0xA27D, 0x2518, 0xA27E, 0x256D, 0xA2A1, 0x256E, 0xA2A2, 0x2570, 0xA2A3, 0x256F, 0xA2A4, 0x2550, + 0xA2A5, 0x255E, 0xA2A6, 0x256A, 0xA2A7, 0x2561, 0xA2A8, 0x25E2, 0xA2A9, 0x25E3, 0xA2AA, 0x25E5, 0xA2AB, 0x25E4, 0xA2AC, 0x2571, + 0xA2AD, 0x2572, 0xA2AE, 0x2573, 0xA2AF, 0xFF10, 0xA2B0, 0xFF11, 0xA2B1, 0xFF12, 0xA2B2, 0xFF13, 0xA2B3, 0xFF14, 0xA2B4, 0xFF15, + 0xA2B5, 0xFF16, 0xA2B6, 0xFF17, 0xA2B7, 0xFF18, 0xA2B8, 0xFF19, 0xA2B9, 0x2160, 0xA2BA, 0x2161, 0xA2BB, 0x2162, 0xA2BC, 0x2163, + 0xA2BD, 0x2164, 0xA2BE, 0x2165, 0xA2BF, 0x2166, 0xA2C0, 0x2167, 0xA2C1, 0x2168, 0xA2C2, 0x2169, 0xA2C3, 0x3021, 0xA2C4, 0x3022, + 0xA2C5, 0x3023, 0xA2C6, 0x3024, 0xA2C7, 0x3025, 0xA2C8, 0x3026, 0xA2C9, 0x3027, 0xA2CA, 0x3028, 0xA2CB, 0x3029, 0xA2CC, 0x5341, + 0xA2CD, 0x5344, 0xA2CE, 0x5345, 0xA2CF, 0xFF21, 0xA2D0, 0xFF22, 0xA2D1, 0xFF23, 0xA2D2, 0xFF24, 0xA2D3, 0xFF25, 0xA2D4, 0xFF26, + 0xA2D5, 0xFF27, 0xA2D6, 0xFF28, 0xA2D7, 0xFF29, 0xA2D8, 0xFF2A, 0xA2D9, 0xFF2B, 0xA2DA, 0xFF2C, 0xA2DB, 0xFF2D, 0xA2DC, 0xFF2E, + 0xA2DD, 0xFF2F, 0xA2DE, 0xFF30, 0xA2DF, 0xFF31, 0xA2E0, 0xFF32, 0xA2E1, 0xFF33, 0xA2E2, 0xFF34, 0xA2E3, 0xFF35, 0xA2E4, 0xFF36, + 0xA2E5, 0xFF37, 0xA2E6, 0xFF38, 0xA2E7, 0xFF39, 0xA2E8, 0xFF3A, 0xA2E9, 0xFF41, 0xA2EA, 0xFF42, 0xA2EB, 0xFF43, 0xA2EC, 0xFF44, + 0xA2ED, 0xFF45, 0xA2EE, 0xFF46, 0xA2EF, 0xFF47, 0xA2F0, 0xFF48, 0xA2F1, 0xFF49, 0xA2F2, 0xFF4A, 0xA2F3, 0xFF4B, 0xA2F4, 0xFF4C, + 0xA2F5, 0xFF4D, 0xA2F6, 0xFF4E, 0xA2F7, 0xFF4F, 0xA2F8, 0xFF50, 0xA2F9, 0xFF51, 0xA2FA, 0xFF52, 0xA2FB, 0xFF53, 0xA2FC, 0xFF54, + 0xA2FD, 0xFF55, 0xA2FE, 0xFF56, 0xA340, 0xFF57, 0xA341, 0xFF58, 0xA342, 0xFF59, 0xA343, 0xFF5A, 0xA344, 0x0391, 0xA345, 0x0392, + 0xA346, 0x0393, 0xA347, 0x0394, 0xA348, 0x0395, 0xA349, 0x0396, 0xA34A, 0x0397, 0xA34B, 0x0398, 0xA34C, 0x0399, 0xA34D, 0x039A, + 0xA34E, 0x039B, 0xA34F, 0x039C, 0xA350, 0x039D, 0xA351, 0x039E, 0xA352, 0x039F, 0xA353, 0x03A0, 0xA354, 0x03A1, 0xA355, 0x03A3, + 0xA356, 0x03A4, 0xA357, 0x03A5, 0xA358, 0x03A6, 0xA359, 0x03A7, 0xA35A, 0x03A8, 0xA35B, 0x03A9, 0xA35C, 0x03B1, 0xA35D, 0x03B2, + 0xA35E, 0x03B3, 0xA35F, 0x03B4, 0xA360, 0x03B5, 0xA361, 0x03B6, 0xA362, 0x03B7, 0xA363, 0x03B8, 0xA364, 0x03B9, 0xA365, 0x03BA, + 0xA366, 0x03BB, 0xA367, 0x03BC, 0xA368, 0x03BD, 0xA369, 0x03BE, 0xA36A, 0x03BF, 0xA36B, 0x03C0, 0xA36C, 0x03C1, 0xA36D, 0x03C3, + 0xA36E, 0x03C4, 0xA36F, 0x03C5, 0xA370, 0x03C6, 0xA371, 0x03C7, 0xA372, 0x03C8, 0xA373, 0x03C9, 0xA374, 0x3105, 0xA375, 0x3106, + 0xA376, 0x3107, 0xA377, 0x3108, 0xA378, 0x3109, 0xA379, 0x310A, 0xA37A, 0x310B, 0xA37B, 0x310C, 0xA37C, 0x310D, 0xA37D, 0x310E, + 0xA37E, 0x310F, 0xA3A1, 0x3110, 0xA3A2, 0x3111, 0xA3A3, 0x3112, 0xA3A4, 0x3113, 0xA3A5, 0x3114, 0xA3A6, 0x3115, 0xA3A7, 0x3116, + 0xA3A8, 0x3117, 0xA3A9, 0x3118, 0xA3AA, 0x3119, 0xA3AB, 0x311A, 0xA3AC, 0x311B, 0xA3AD, 0x311C, 0xA3AE, 0x311D, 0xA3AF, 0x311E, + 0xA3B0, 0x311F, 0xA3B1, 0x3120, 0xA3B2, 0x3121, 0xA3B3, 0x3122, 0xA3B4, 0x3123, 0xA3B5, 0x3124, 0xA3B6, 0x3125, 0xA3B7, 0x3126, + 0xA3B8, 0x3127, 0xA3B9, 0x3128, 0xA3BA, 0x3129, 0xA3BB, 0x02D9, 0xA3BC, 0x02C9, 0xA3BD, 0x02CA, 0xA3BE, 0x02C7, 0xA3BF, 0x02CB, + 0xA3E1, 0x20AC, 0xA440, 0x4E00, 0xA441, 0x4E59, 0xA442, 0x4E01, 0xA443, 0x4E03, 0xA444, 0x4E43, 0xA445, 0x4E5D, 0xA446, 0x4E86, + 0xA447, 0x4E8C, 0xA448, 0x4EBA, 0xA449, 0x513F, 0xA44A, 0x5165, 0xA44B, 0x516B, 0xA44C, 0x51E0, 0xA44D, 0x5200, 0xA44E, 0x5201, + 0xA44F, 0x529B, 0xA450, 0x5315, 0xA451, 0x5341, 0xA452, 0x535C, 0xA453, 0x53C8, 0xA454, 0x4E09, 0xA455, 0x4E0B, 0xA456, 0x4E08, + 0xA457, 0x4E0A, 0xA458, 0x4E2B, 0xA459, 0x4E38, 0xA45A, 0x51E1, 0xA45B, 0x4E45, 0xA45C, 0x4E48, 0xA45D, 0x4E5F, 0xA45E, 0x4E5E, + 0xA45F, 0x4E8E, 0xA460, 0x4EA1, 0xA461, 0x5140, 0xA462, 0x5203, 0xA463, 0x52FA, 0xA464, 0x5343, 0xA465, 0x53C9, 0xA466, 0x53E3, + 0xA467, 0x571F, 0xA468, 0x58EB, 0xA469, 0x5915, 0xA46A, 0x5927, 0xA46B, 0x5973, 0xA46C, 0x5B50, 0xA46D, 0x5B51, 0xA46E, 0x5B53, + 0xA46F, 0x5BF8, 0xA470, 0x5C0F, 0xA471, 0x5C22, 0xA472, 0x5C38, 0xA473, 0x5C71, 0xA474, 0x5DDD, 0xA475, 0x5DE5, 0xA476, 0x5DF1, + 0xA477, 0x5DF2, 0xA478, 0x5DF3, 0xA479, 0x5DFE, 0xA47A, 0x5E72, 0xA47B, 0x5EFE, 0xA47C, 0x5F0B, 0xA47D, 0x5F13, 0xA47E, 0x624D, + 0xA4A1, 0x4E11, 0xA4A2, 0x4E10, 0xA4A3, 0x4E0D, 0xA4A4, 0x4E2D, 0xA4A5, 0x4E30, 0xA4A6, 0x4E39, 0xA4A7, 0x4E4B, 0xA4A8, 0x5C39, + 0xA4A9, 0x4E88, 0xA4AA, 0x4E91, 0xA4AB, 0x4E95, 0xA4AC, 0x4E92, 0xA4AD, 0x4E94, 0xA4AE, 0x4EA2, 0xA4AF, 0x4EC1, 0xA4B0, 0x4EC0, + 0xA4B1, 0x4EC3, 0xA4B2, 0x4EC6, 0xA4B3, 0x4EC7, 0xA4B4, 0x4ECD, 0xA4B5, 0x4ECA, 0xA4B6, 0x4ECB, 0xA4B7, 0x4EC4, 0xA4B8, 0x5143, + 0xA4B9, 0x5141, 0xA4BA, 0x5167, 0xA4BB, 0x516D, 0xA4BC, 0x516E, 0xA4BD, 0x516C, 0xA4BE, 0x5197, 0xA4BF, 0x51F6, 0xA4C0, 0x5206, + 0xA4C1, 0x5207, 0xA4C2, 0x5208, 0xA4C3, 0x52FB, 0xA4C4, 0x52FE, 0xA4C5, 0x52FF, 0xA4C6, 0x5316, 0xA4C7, 0x5339, 0xA4C8, 0x5348, + 0xA4C9, 0x5347, 0xA4CA, 0x5345, 0xA4CB, 0x535E, 0xA4CC, 0x5384, 0xA4CD, 0x53CB, 0xA4CE, 0x53CA, 0xA4CF, 0x53CD, 0xA4D0, 0x58EC, + 0xA4D1, 0x5929, 0xA4D2, 0x592B, 0xA4D3, 0x592A, 0xA4D4, 0x592D, 0xA4D5, 0x5B54, 0xA4D6, 0x5C11, 0xA4D7, 0x5C24, 0xA4D8, 0x5C3A, + 0xA4D9, 0x5C6F, 0xA4DA, 0x5DF4, 0xA4DB, 0x5E7B, 0xA4DC, 0x5EFF, 0xA4DD, 0x5F14, 0xA4DE, 0x5F15, 0xA4DF, 0x5FC3, 0xA4E0, 0x6208, + 0xA4E1, 0x6236, 0xA4E2, 0x624B, 0xA4E3, 0x624E, 0xA4E4, 0x652F, 0xA4E5, 0x6587, 0xA4E6, 0x6597, 0xA4E7, 0x65A4, 0xA4E8, 0x65B9, + 0xA4E9, 0x65E5, 0xA4EA, 0x66F0, 0xA4EB, 0x6708, 0xA4EC, 0x6728, 0xA4ED, 0x6B20, 0xA4EE, 0x6B62, 0xA4EF, 0x6B79, 0xA4F0, 0x6BCB, + 0xA4F1, 0x6BD4, 0xA4F2, 0x6BDB, 0xA4F3, 0x6C0F, 0xA4F4, 0x6C34, 0xA4F5, 0x706B, 0xA4F6, 0x722A, 0xA4F7, 0x7236, 0xA4F8, 0x723B, + 0xA4F9, 0x7247, 0xA4FA, 0x7259, 0xA4FB, 0x725B, 0xA4FC, 0x72AC, 0xA4FD, 0x738B, 0xA4FE, 0x4E19, 0xA540, 0x4E16, 0xA541, 0x4E15, + 0xA542, 0x4E14, 0xA543, 0x4E18, 0xA544, 0x4E3B, 0xA545, 0x4E4D, 0xA546, 0x4E4F, 0xA547, 0x4E4E, 0xA548, 0x4EE5, 0xA549, 0x4ED8, + 0xA54A, 0x4ED4, 0xA54B, 0x4ED5, 0xA54C, 0x4ED6, 0xA54D, 0x4ED7, 0xA54E, 0x4EE3, 0xA54F, 0x4EE4, 0xA550, 0x4ED9, 0xA551, 0x4EDE, + 0xA552, 0x5145, 0xA553, 0x5144, 0xA554, 0x5189, 0xA555, 0x518A, 0xA556, 0x51AC, 0xA557, 0x51F9, 0xA558, 0x51FA, 0xA559, 0x51F8, + 0xA55A, 0x520A, 0xA55B, 0x52A0, 0xA55C, 0x529F, 0xA55D, 0x5305, 0xA55E, 0x5306, 0xA55F, 0x5317, 0xA560, 0x531D, 0xA561, 0x4EDF, + 0xA562, 0x534A, 0xA563, 0x5349, 0xA564, 0x5361, 0xA565, 0x5360, 0xA566, 0x536F, 0xA567, 0x536E, 0xA568, 0x53BB, 0xA569, 0x53EF, + 0xA56A, 0x53E4, 0xA56B, 0x53F3, 0xA56C, 0x53EC, 0xA56D, 0x53EE, 0xA56E, 0x53E9, 0xA56F, 0x53E8, 0xA570, 0x53FC, 0xA571, 0x53F8, + 0xA572, 0x53F5, 0xA573, 0x53EB, 0xA574, 0x53E6, 0xA575, 0x53EA, 0xA576, 0x53F2, 0xA577, 0x53F1, 0xA578, 0x53F0, 0xA579, 0x53E5, + 0xA57A, 0x53ED, 0xA57B, 0x53FB, 0xA57C, 0x56DB, 0xA57D, 0x56DA, 0xA57E, 0x5916, 0xA5A1, 0x592E, 0xA5A2, 0x5931, 0xA5A3, 0x5974, + 0xA5A4, 0x5976, 0xA5A5, 0x5B55, 0xA5A6, 0x5B83, 0xA5A7, 0x5C3C, 0xA5A8, 0x5DE8, 0xA5A9, 0x5DE7, 0xA5AA, 0x5DE6, 0xA5AB, 0x5E02, + 0xA5AC, 0x5E03, 0xA5AD, 0x5E73, 0xA5AE, 0x5E7C, 0xA5AF, 0x5F01, 0xA5B0, 0x5F18, 0xA5B1, 0x5F17, 0xA5B2, 0x5FC5, 0xA5B3, 0x620A, + 0xA5B4, 0x6253, 0xA5B5, 0x6254, 0xA5B6, 0x6252, 0xA5B7, 0x6251, 0xA5B8, 0x65A5, 0xA5B9, 0x65E6, 0xA5BA, 0x672E, 0xA5BB, 0x672C, + 0xA5BC, 0x672A, 0xA5BD, 0x672B, 0xA5BE, 0x672D, 0xA5BF, 0x6B63, 0xA5C0, 0x6BCD, 0xA5C1, 0x6C11, 0xA5C2, 0x6C10, 0xA5C3, 0x6C38, + 0xA5C4, 0x6C41, 0xA5C5, 0x6C40, 0xA5C6, 0x6C3E, 0xA5C7, 0x72AF, 0xA5C8, 0x7384, 0xA5C9, 0x7389, 0xA5CA, 0x74DC, 0xA5CB, 0x74E6, + 0xA5CC, 0x7518, 0xA5CD, 0x751F, 0xA5CE, 0x7528, 0xA5CF, 0x7529, 0xA5D0, 0x7530, 0xA5D1, 0x7531, 0xA5D2, 0x7532, 0xA5D3, 0x7533, + 0xA5D4, 0x758B, 0xA5D5, 0x767D, 0xA5D6, 0x76AE, 0xA5D7, 0x76BF, 0xA5D8, 0x76EE, 0xA5D9, 0x77DB, 0xA5DA, 0x77E2, 0xA5DB, 0x77F3, + 0xA5DC, 0x793A, 0xA5DD, 0x79BE, 0xA5DE, 0x7A74, 0xA5DF, 0x7ACB, 0xA5E0, 0x4E1E, 0xA5E1, 0x4E1F, 0xA5E2, 0x4E52, 0xA5E3, 0x4E53, + 0xA5E4, 0x4E69, 0xA5E5, 0x4E99, 0xA5E6, 0x4EA4, 0xA5E7, 0x4EA6, 0xA5E8, 0x4EA5, 0xA5E9, 0x4EFF, 0xA5EA, 0x4F09, 0xA5EB, 0x4F19, + 0xA5EC, 0x4F0A, 0xA5ED, 0x4F15, 0xA5EE, 0x4F0D, 0xA5EF, 0x4F10, 0xA5F0, 0x4F11, 0xA5F1, 0x4F0F, 0xA5F2, 0x4EF2, 0xA5F3, 0x4EF6, + 0xA5F4, 0x4EFB, 0xA5F5, 0x4EF0, 0xA5F6, 0x4EF3, 0xA5F7, 0x4EFD, 0xA5F8, 0x4F01, 0xA5F9, 0x4F0B, 0xA5FA, 0x5149, 0xA5FB, 0x5147, + 0xA5FC, 0x5146, 0xA5FD, 0x5148, 0xA5FE, 0x5168, 0xA640, 0x5171, 0xA641, 0x518D, 0xA642, 0x51B0, 0xA643, 0x5217, 0xA644, 0x5211, + 0xA645, 0x5212, 0xA646, 0x520E, 0xA647, 0x5216, 0xA648, 0x52A3, 0xA649, 0x5308, 0xA64A, 0x5321, 0xA64B, 0x5320, 0xA64C, 0x5370, + 0xA64D, 0x5371, 0xA64E, 0x5409, 0xA64F, 0x540F, 0xA650, 0x540C, 0xA651, 0x540A, 0xA652, 0x5410, 0xA653, 0x5401, 0xA654, 0x540B, + 0xA655, 0x5404, 0xA656, 0x5411, 0xA657, 0x540D, 0xA658, 0x5408, 0xA659, 0x5403, 0xA65A, 0x540E, 0xA65B, 0x5406, 0xA65C, 0x5412, + 0xA65D, 0x56E0, 0xA65E, 0x56DE, 0xA65F, 0x56DD, 0xA660, 0x5733, 0xA661, 0x5730, 0xA662, 0x5728, 0xA663, 0x572D, 0xA664, 0x572C, + 0xA665, 0x572F, 0xA666, 0x5729, 0xA667, 0x5919, 0xA668, 0x591A, 0xA669, 0x5937, 0xA66A, 0x5938, 0xA66B, 0x5984, 0xA66C, 0x5978, + 0xA66D, 0x5983, 0xA66E, 0x597D, 0xA66F, 0x5979, 0xA670, 0x5982, 0xA671, 0x5981, 0xA672, 0x5B57, 0xA673, 0x5B58, 0xA674, 0x5B87, + 0xA675, 0x5B88, 0xA676, 0x5B85, 0xA677, 0x5B89, 0xA678, 0x5BFA, 0xA679, 0x5C16, 0xA67A, 0x5C79, 0xA67B, 0x5DDE, 0xA67C, 0x5E06, + 0xA67D, 0x5E76, 0xA67E, 0x5E74, 0xA6A1, 0x5F0F, 0xA6A2, 0x5F1B, 0xA6A3, 0x5FD9, 0xA6A4, 0x5FD6, 0xA6A5, 0x620E, 0xA6A6, 0x620C, + 0xA6A7, 0x620D, 0xA6A8, 0x6210, 0xA6A9, 0x6263, 0xA6AA, 0x625B, 0xA6AB, 0x6258, 0xA6AC, 0x6536, 0xA6AD, 0x65E9, 0xA6AE, 0x65E8, + 0xA6AF, 0x65EC, 0xA6B0, 0x65ED, 0xA6B1, 0x66F2, 0xA6B2, 0x66F3, 0xA6B3, 0x6709, 0xA6B4, 0x673D, 0xA6B5, 0x6734, 0xA6B6, 0x6731, + 0xA6B7, 0x6735, 0xA6B8, 0x6B21, 0xA6B9, 0x6B64, 0xA6BA, 0x6B7B, 0xA6BB, 0x6C16, 0xA6BC, 0x6C5D, 0xA6BD, 0x6C57, 0xA6BE, 0x6C59, + 0xA6BF, 0x6C5F, 0xA6C0, 0x6C60, 0xA6C1, 0x6C50, 0xA6C2, 0x6C55, 0xA6C3, 0x6C61, 0xA6C4, 0x6C5B, 0xA6C5, 0x6C4D, 0xA6C6, 0x6C4E, + 0xA6C7, 0x7070, 0xA6C8, 0x725F, 0xA6C9, 0x725D, 0xA6CA, 0x767E, 0xA6CB, 0x7AF9, 0xA6CC, 0x7C73, 0xA6CD, 0x7CF8, 0xA6CE, 0x7F36, + 0xA6CF, 0x7F8A, 0xA6D0, 0x7FBD, 0xA6D1, 0x8001, 0xA6D2, 0x8003, 0xA6D3, 0x800C, 0xA6D4, 0x8012, 0xA6D5, 0x8033, 0xA6D6, 0x807F, + 0xA6D7, 0x8089, 0xA6D8, 0x808B, 0xA6D9, 0x808C, 0xA6DA, 0x81E3, 0xA6DB, 0x81EA, 0xA6DC, 0x81F3, 0xA6DD, 0x81FC, 0xA6DE, 0x820C, + 0xA6DF, 0x821B, 0xA6E0, 0x821F, 0xA6E1, 0x826E, 0xA6E2, 0x8272, 0xA6E3, 0x827E, 0xA6E4, 0x866B, 0xA6E5, 0x8840, 0xA6E6, 0x884C, + 0xA6E7, 0x8863, 0xA6E8, 0x897F, 0xA6E9, 0x9621, 0xA6EA, 0x4E32, 0xA6EB, 0x4EA8, 0xA6EC, 0x4F4D, 0xA6ED, 0x4F4F, 0xA6EE, 0x4F47, + 0xA6EF, 0x4F57, 0xA6F0, 0x4F5E, 0xA6F1, 0x4F34, 0xA6F2, 0x4F5B, 0xA6F3, 0x4F55, 0xA6F4, 0x4F30, 0xA6F5, 0x4F50, 0xA6F6, 0x4F51, + 0xA6F7, 0x4F3D, 0xA6F8, 0x4F3A, 0xA6F9, 0x4F38, 0xA6FA, 0x4F43, 0xA6FB, 0x4F54, 0xA6FC, 0x4F3C, 0xA6FD, 0x4F46, 0xA6FE, 0x4F63, + 0xA740, 0x4F5C, 0xA741, 0x4F60, 0xA742, 0x4F2F, 0xA743, 0x4F4E, 0xA744, 0x4F36, 0xA745, 0x4F59, 0xA746, 0x4F5D, 0xA747, 0x4F48, + 0xA748, 0x4F5A, 0xA749, 0x514C, 0xA74A, 0x514B, 0xA74B, 0x514D, 0xA74C, 0x5175, 0xA74D, 0x51B6, 0xA74E, 0x51B7, 0xA74F, 0x5225, + 0xA750, 0x5224, 0xA751, 0x5229, 0xA752, 0x522A, 0xA753, 0x5228, 0xA754, 0x52AB, 0xA755, 0x52A9, 0xA756, 0x52AA, 0xA757, 0x52AC, + 0xA758, 0x5323, 0xA759, 0x5373, 0xA75A, 0x5375, 0xA75B, 0x541D, 0xA75C, 0x542D, 0xA75D, 0x541E, 0xA75E, 0x543E, 0xA75F, 0x5426, + 0xA760, 0x544E, 0xA761, 0x5427, 0xA762, 0x5446, 0xA763, 0x5443, 0xA764, 0x5433, 0xA765, 0x5448, 0xA766, 0x5442, 0xA767, 0x541B, + 0xA768, 0x5429, 0xA769, 0x544A, 0xA76A, 0x5439, 0xA76B, 0x543B, 0xA76C, 0x5438, 0xA76D, 0x542E, 0xA76E, 0x5435, 0xA76F, 0x5436, + 0xA770, 0x5420, 0xA771, 0x543C, 0xA772, 0x5440, 0xA773, 0x5431, 0xA774, 0x542B, 0xA775, 0x541F, 0xA776, 0x542C, 0xA777, 0x56EA, + 0xA778, 0x56F0, 0xA779, 0x56E4, 0xA77A, 0x56EB, 0xA77B, 0x574A, 0xA77C, 0x5751, 0xA77D, 0x5740, 0xA77E, 0x574D, 0xA7A1, 0x5747, + 0xA7A2, 0x574E, 0xA7A3, 0x573E, 0xA7A4, 0x5750, 0xA7A5, 0x574F, 0xA7A6, 0x573B, 0xA7A7, 0x58EF, 0xA7A8, 0x593E, 0xA7A9, 0x599D, + 0xA7AA, 0x5992, 0xA7AB, 0x59A8, 0xA7AC, 0x599E, 0xA7AD, 0x59A3, 0xA7AE, 0x5999, 0xA7AF, 0x5996, 0xA7B0, 0x598D, 0xA7B1, 0x59A4, + 0xA7B2, 0x5993, 0xA7B3, 0x598A, 0xA7B4, 0x59A5, 0xA7B5, 0x5B5D, 0xA7B6, 0x5B5C, 0xA7B7, 0x5B5A, 0xA7B8, 0x5B5B, 0xA7B9, 0x5B8C, + 0xA7BA, 0x5B8B, 0xA7BB, 0x5B8F, 0xA7BC, 0x5C2C, 0xA7BD, 0x5C40, 0xA7BE, 0x5C41, 0xA7BF, 0x5C3F, 0xA7C0, 0x5C3E, 0xA7C1, 0x5C90, + 0xA7C2, 0x5C91, 0xA7C3, 0x5C94, 0xA7C4, 0x5C8C, 0xA7C5, 0x5DEB, 0xA7C6, 0x5E0C, 0xA7C7, 0x5E8F, 0xA7C8, 0x5E87, 0xA7C9, 0x5E8A, + 0xA7CA, 0x5EF7, 0xA7CB, 0x5F04, 0xA7CC, 0x5F1F, 0xA7CD, 0x5F64, 0xA7CE, 0x5F62, 0xA7CF, 0x5F77, 0xA7D0, 0x5F79, 0xA7D1, 0x5FD8, + 0xA7D2, 0x5FCC, 0xA7D3, 0x5FD7, 0xA7D4, 0x5FCD, 0xA7D5, 0x5FF1, 0xA7D6, 0x5FEB, 0xA7D7, 0x5FF8, 0xA7D8, 0x5FEA, 0xA7D9, 0x6212, + 0xA7DA, 0x6211, 0xA7DB, 0x6284, 0xA7DC, 0x6297, 0xA7DD, 0x6296, 0xA7DE, 0x6280, 0xA7DF, 0x6276, 0xA7E0, 0x6289, 0xA7E1, 0x626D, + 0xA7E2, 0x628A, 0xA7E3, 0x627C, 0xA7E4, 0x627E, 0xA7E5, 0x6279, 0xA7E6, 0x6273, 0xA7E7, 0x6292, 0xA7E8, 0x626F, 0xA7E9, 0x6298, + 0xA7EA, 0x626E, 0xA7EB, 0x6295, 0xA7EC, 0x6293, 0xA7ED, 0x6291, 0xA7EE, 0x6286, 0xA7EF, 0x6539, 0xA7F0, 0x653B, 0xA7F1, 0x6538, + 0xA7F2, 0x65F1, 0xA7F3, 0x66F4, 0xA7F4, 0x675F, 0xA7F5, 0x674E, 0xA7F6, 0x674F, 0xA7F7, 0x6750, 0xA7F8, 0x6751, 0xA7F9, 0x675C, + 0xA7FA, 0x6756, 0xA7FB, 0x675E, 0xA7FC, 0x6749, 0xA7FD, 0x6746, 0xA7FE, 0x6760, 0xA840, 0x6753, 0xA841, 0x6757, 0xA842, 0x6B65, + 0xA843, 0x6BCF, 0xA844, 0x6C42, 0xA845, 0x6C5E, 0xA846, 0x6C99, 0xA847, 0x6C81, 0xA848, 0x6C88, 0xA849, 0x6C89, 0xA84A, 0x6C85, + 0xA84B, 0x6C9B, 0xA84C, 0x6C6A, 0xA84D, 0x6C7A, 0xA84E, 0x6C90, 0xA84F, 0x6C70, 0xA850, 0x6C8C, 0xA851, 0x6C68, 0xA852, 0x6C96, + 0xA853, 0x6C92, 0xA854, 0x6C7D, 0xA855, 0x6C83, 0xA856, 0x6C72, 0xA857, 0x6C7E, 0xA858, 0x6C74, 0xA859, 0x6C86, 0xA85A, 0x6C76, + 0xA85B, 0x6C8D, 0xA85C, 0x6C94, 0xA85D, 0x6C98, 0xA85E, 0x6C82, 0xA85F, 0x7076, 0xA860, 0x707C, 0xA861, 0x707D, 0xA862, 0x7078, + 0xA863, 0x7262, 0xA864, 0x7261, 0xA865, 0x7260, 0xA866, 0x72C4, 0xA867, 0x72C2, 0xA868, 0x7396, 0xA869, 0x752C, 0xA86A, 0x752B, + 0xA86B, 0x7537, 0xA86C, 0x7538, 0xA86D, 0x7682, 0xA86E, 0x76EF, 0xA86F, 0x77E3, 0xA870, 0x79C1, 0xA871, 0x79C0, 0xA872, 0x79BF, + 0xA873, 0x7A76, 0xA874, 0x7CFB, 0xA875, 0x7F55, 0xA876, 0x8096, 0xA877, 0x8093, 0xA878, 0x809D, 0xA879, 0x8098, 0xA87A, 0x809B, + 0xA87B, 0x809A, 0xA87C, 0x80B2, 0xA87D, 0x826F, 0xA87E, 0x8292, 0xA8A1, 0x828B, 0xA8A2, 0x828D, 0xA8A3, 0x898B, 0xA8A4, 0x89D2, + 0xA8A5, 0x8A00, 0xA8A6, 0x8C37, 0xA8A7, 0x8C46, 0xA8A8, 0x8C55, 0xA8A9, 0x8C9D, 0xA8AA, 0x8D64, 0xA8AB, 0x8D70, 0xA8AC, 0x8DB3, + 0xA8AD, 0x8EAB, 0xA8AE, 0x8ECA, 0xA8AF, 0x8F9B, 0xA8B0, 0x8FB0, 0xA8B1, 0x8FC2, 0xA8B2, 0x8FC6, 0xA8B3, 0x8FC5, 0xA8B4, 0x8FC4, + 0xA8B5, 0x5DE1, 0xA8B6, 0x9091, 0xA8B7, 0x90A2, 0xA8B8, 0x90AA, 0xA8B9, 0x90A6, 0xA8BA, 0x90A3, 0xA8BB, 0x9149, 0xA8BC, 0x91C6, + 0xA8BD, 0x91CC, 0xA8BE, 0x9632, 0xA8BF, 0x962E, 0xA8C0, 0x9631, 0xA8C1, 0x962A, 0xA8C2, 0x962C, 0xA8C3, 0x4E26, 0xA8C4, 0x4E56, + 0xA8C5, 0x4E73, 0xA8C6, 0x4E8B, 0xA8C7, 0x4E9B, 0xA8C8, 0x4E9E, 0xA8C9, 0x4EAB, 0xA8CA, 0x4EAC, 0xA8CB, 0x4F6F, 0xA8CC, 0x4F9D, + 0xA8CD, 0x4F8D, 0xA8CE, 0x4F73, 0xA8CF, 0x4F7F, 0xA8D0, 0x4F6C, 0xA8D1, 0x4F9B, 0xA8D2, 0x4F8B, 0xA8D3, 0x4F86, 0xA8D4, 0x4F83, + 0xA8D5, 0x4F70, 0xA8D6, 0x4F75, 0xA8D7, 0x4F88, 0xA8D8, 0x4F69, 0xA8D9, 0x4F7B, 0xA8DA, 0x4F96, 0xA8DB, 0x4F7E, 0xA8DC, 0x4F8F, + 0xA8DD, 0x4F91, 0xA8DE, 0x4F7A, 0xA8DF, 0x5154, 0xA8E0, 0x5152, 0xA8E1, 0x5155, 0xA8E2, 0x5169, 0xA8E3, 0x5177, 0xA8E4, 0x5176, + 0xA8E5, 0x5178, 0xA8E6, 0x51BD, 0xA8E7, 0x51FD, 0xA8E8, 0x523B, 0xA8E9, 0x5238, 0xA8EA, 0x5237, 0xA8EB, 0x523A, 0xA8EC, 0x5230, + 0xA8ED, 0x522E, 0xA8EE, 0x5236, 0xA8EF, 0x5241, 0xA8F0, 0x52BE, 0xA8F1, 0x52BB, 0xA8F2, 0x5352, 0xA8F3, 0x5354, 0xA8F4, 0x5353, + 0xA8F5, 0x5351, 0xA8F6, 0x5366, 0xA8F7, 0x5377, 0xA8F8, 0x5378, 0xA8F9, 0x5379, 0xA8FA, 0x53D6, 0xA8FB, 0x53D4, 0xA8FC, 0x53D7, + 0xA8FD, 0x5473, 0xA8FE, 0x5475, 0xA940, 0x5496, 0xA941, 0x5478, 0xA942, 0x5495, 0xA943, 0x5480, 0xA944, 0x547B, 0xA945, 0x5477, + 0xA946, 0x5484, 0xA947, 0x5492, 0xA948, 0x5486, 0xA949, 0x547C, 0xA94A, 0x5490, 0xA94B, 0x5471, 0xA94C, 0x5476, 0xA94D, 0x548C, + 0xA94E, 0x549A, 0xA94F, 0x5462, 0xA950, 0x5468, 0xA951, 0x548B, 0xA952, 0x547D, 0xA953, 0x548E, 0xA954, 0x56FA, 0xA955, 0x5783, + 0xA956, 0x5777, 0xA957, 0x576A, 0xA958, 0x5769, 0xA959, 0x5761, 0xA95A, 0x5766, 0xA95B, 0x5764, 0xA95C, 0x577C, 0xA95D, 0x591C, + 0xA95E, 0x5949, 0xA95F, 0x5947, 0xA960, 0x5948, 0xA961, 0x5944, 0xA962, 0x5954, 0xA963, 0x59BE, 0xA964, 0x59BB, 0xA965, 0x59D4, + 0xA966, 0x59B9, 0xA967, 0x59AE, 0xA968, 0x59D1, 0xA969, 0x59C6, 0xA96A, 0x59D0, 0xA96B, 0x59CD, 0xA96C, 0x59CB, 0xA96D, 0x59D3, + 0xA96E, 0x59CA, 0xA96F, 0x59AF, 0xA970, 0x59B3, 0xA971, 0x59D2, 0xA972, 0x59C5, 0xA973, 0x5B5F, 0xA974, 0x5B64, 0xA975, 0x5B63, + 0xA976, 0x5B97, 0xA977, 0x5B9A, 0xA978, 0x5B98, 0xA979, 0x5B9C, 0xA97A, 0x5B99, 0xA97B, 0x5B9B, 0xA97C, 0x5C1A, 0xA97D, 0x5C48, + 0xA97E, 0x5C45, 0xA9A1, 0x5C46, 0xA9A2, 0x5CB7, 0xA9A3, 0x5CA1, 0xA9A4, 0x5CB8, 0xA9A5, 0x5CA9, 0xA9A6, 0x5CAB, 0xA9A7, 0x5CB1, + 0xA9A8, 0x5CB3, 0xA9A9, 0x5E18, 0xA9AA, 0x5E1A, 0xA9AB, 0x5E16, 0xA9AC, 0x5E15, 0xA9AD, 0x5E1B, 0xA9AE, 0x5E11, 0xA9AF, 0x5E78, + 0xA9B0, 0x5E9A, 0xA9B1, 0x5E97, 0xA9B2, 0x5E9C, 0xA9B3, 0x5E95, 0xA9B4, 0x5E96, 0xA9B5, 0x5EF6, 0xA9B6, 0x5F26, 0xA9B7, 0x5F27, + 0xA9B8, 0x5F29, 0xA9B9, 0x5F80, 0xA9BA, 0x5F81, 0xA9BB, 0x5F7F, 0xA9BC, 0x5F7C, 0xA9BD, 0x5FDD, 0xA9BE, 0x5FE0, 0xA9BF, 0x5FFD, + 0xA9C0, 0x5FF5, 0xA9C1, 0x5FFF, 0xA9C2, 0x600F, 0xA9C3, 0x6014, 0xA9C4, 0x602F, 0xA9C5, 0x6035, 0xA9C6, 0x6016, 0xA9C7, 0x602A, + 0xA9C8, 0x6015, 0xA9C9, 0x6021, 0xA9CA, 0x6027, 0xA9CB, 0x6029, 0xA9CC, 0x602B, 0xA9CD, 0x601B, 0xA9CE, 0x6216, 0xA9CF, 0x6215, + 0xA9D0, 0x623F, 0xA9D1, 0x623E, 0xA9D2, 0x6240, 0xA9D3, 0x627F, 0xA9D4, 0x62C9, 0xA9D5, 0x62CC, 0xA9D6, 0x62C4, 0xA9D7, 0x62BF, + 0xA9D8, 0x62C2, 0xA9D9, 0x62B9, 0xA9DA, 0x62D2, 0xA9DB, 0x62DB, 0xA9DC, 0x62AB, 0xA9DD, 0x62D3, 0xA9DE, 0x62D4, 0xA9DF, 0x62CB, + 0xA9E0, 0x62C8, 0xA9E1, 0x62A8, 0xA9E2, 0x62BD, 0xA9E3, 0x62BC, 0xA9E4, 0x62D0, 0xA9E5, 0x62D9, 0xA9E6, 0x62C7, 0xA9E7, 0x62CD, + 0xA9E8, 0x62B5, 0xA9E9, 0x62DA, 0xA9EA, 0x62B1, 0xA9EB, 0x62D8, 0xA9EC, 0x62D6, 0xA9ED, 0x62D7, 0xA9EE, 0x62C6, 0xA9EF, 0x62AC, + 0xA9F0, 0x62CE, 0xA9F1, 0x653E, 0xA9F2, 0x65A7, 0xA9F3, 0x65BC, 0xA9F4, 0x65FA, 0xA9F5, 0x6614, 0xA9F6, 0x6613, 0xA9F7, 0x660C, + 0xA9F8, 0x6606, 0xA9F9, 0x6602, 0xA9FA, 0x660E, 0xA9FB, 0x6600, 0xA9FC, 0x660F, 0xA9FD, 0x6615, 0xA9FE, 0x660A, 0xAA40, 0x6607, + 0xAA41, 0x670D, 0xAA42, 0x670B, 0xAA43, 0x676D, 0xAA44, 0x678B, 0xAA45, 0x6795, 0xAA46, 0x6771, 0xAA47, 0x679C, 0xAA48, 0x6773, + 0xAA49, 0x6777, 0xAA4A, 0x6787, 0xAA4B, 0x679D, 0xAA4C, 0x6797, 0xAA4D, 0x676F, 0xAA4E, 0x6770, 0xAA4F, 0x677F, 0xAA50, 0x6789, + 0xAA51, 0x677E, 0xAA52, 0x6790, 0xAA53, 0x6775, 0xAA54, 0x679A, 0xAA55, 0x6793, 0xAA56, 0x677C, 0xAA57, 0x676A, 0xAA58, 0x6772, + 0xAA59, 0x6B23, 0xAA5A, 0x6B66, 0xAA5B, 0x6B67, 0xAA5C, 0x6B7F, 0xAA5D, 0x6C13, 0xAA5E, 0x6C1B, 0xAA5F, 0x6CE3, 0xAA60, 0x6CE8, + 0xAA61, 0x6CF3, 0xAA62, 0x6CB1, 0xAA63, 0x6CCC, 0xAA64, 0x6CE5, 0xAA65, 0x6CB3, 0xAA66, 0x6CBD, 0xAA67, 0x6CBE, 0xAA68, 0x6CBC, + 0xAA69, 0x6CE2, 0xAA6A, 0x6CAB, 0xAA6B, 0x6CD5, 0xAA6C, 0x6CD3, 0xAA6D, 0x6CB8, 0xAA6E, 0x6CC4, 0xAA6F, 0x6CB9, 0xAA70, 0x6CC1, + 0xAA71, 0x6CAE, 0xAA72, 0x6CD7, 0xAA73, 0x6CC5, 0xAA74, 0x6CF1, 0xAA75, 0x6CBF, 0xAA76, 0x6CBB, 0xAA77, 0x6CE1, 0xAA78, 0x6CDB, + 0xAA79, 0x6CCA, 0xAA7A, 0x6CAC, 0xAA7B, 0x6CEF, 0xAA7C, 0x6CDC, 0xAA7D, 0x6CD6, 0xAA7E, 0x6CE0, 0xAAA1, 0x7095, 0xAAA2, 0x708E, + 0xAAA3, 0x7092, 0xAAA4, 0x708A, 0xAAA5, 0x7099, 0xAAA6, 0x722C, 0xAAA7, 0x722D, 0xAAA8, 0x7238, 0xAAA9, 0x7248, 0xAAAA, 0x7267, + 0xAAAB, 0x7269, 0xAAAC, 0x72C0, 0xAAAD, 0x72CE, 0xAAAE, 0x72D9, 0xAAAF, 0x72D7, 0xAAB0, 0x72D0, 0xAAB1, 0x73A9, 0xAAB2, 0x73A8, + 0xAAB3, 0x739F, 0xAAB4, 0x73AB, 0xAAB5, 0x73A5, 0xAAB6, 0x753D, 0xAAB7, 0x759D, 0xAAB8, 0x7599, 0xAAB9, 0x759A, 0xAABA, 0x7684, + 0xAABB, 0x76C2, 0xAABC, 0x76F2, 0xAABD, 0x76F4, 0xAABE, 0x77E5, 0xAABF, 0x77FD, 0xAAC0, 0x793E, 0xAAC1, 0x7940, 0xAAC2, 0x7941, + 0xAAC3, 0x79C9, 0xAAC4, 0x79C8, 0xAAC5, 0x7A7A, 0xAAC6, 0x7A79, 0xAAC7, 0x7AFA, 0xAAC8, 0x7CFE, 0xAAC9, 0x7F54, 0xAACA, 0x7F8C, + 0xAACB, 0x7F8B, 0xAACC, 0x8005, 0xAACD, 0x80BA, 0xAACE, 0x80A5, 0xAACF, 0x80A2, 0xAAD0, 0x80B1, 0xAAD1, 0x80A1, 0xAAD2, 0x80AB, + 0xAAD3, 0x80A9, 0xAAD4, 0x80B4, 0xAAD5, 0x80AA, 0xAAD6, 0x80AF, 0xAAD7, 0x81E5, 0xAAD8, 0x81FE, 0xAAD9, 0x820D, 0xAADA, 0x82B3, + 0xAADB, 0x829D, 0xAADC, 0x8299, 0xAADD, 0x82AD, 0xAADE, 0x82BD, 0xAADF, 0x829F, 0xAAE0, 0x82B9, 0xAAE1, 0x82B1, 0xAAE2, 0x82AC, + 0xAAE3, 0x82A5, 0xAAE4, 0x82AF, 0xAAE5, 0x82B8, 0xAAE6, 0x82A3, 0xAAE7, 0x82B0, 0xAAE8, 0x82BE, 0xAAE9, 0x82B7, 0xAAEA, 0x864E, + 0xAAEB, 0x8671, 0xAAEC, 0x521D, 0xAAED, 0x8868, 0xAAEE, 0x8ECB, 0xAAEF, 0x8FCE, 0xAAF0, 0x8FD4, 0xAAF1, 0x8FD1, 0xAAF2, 0x90B5, + 0xAAF3, 0x90B8, 0xAAF4, 0x90B1, 0xAAF5, 0x90B6, 0xAAF6, 0x91C7, 0xAAF7, 0x91D1, 0xAAF8, 0x9577, 0xAAF9, 0x9580, 0xAAFA, 0x961C, + 0xAAFB, 0x9640, 0xAAFC, 0x963F, 0xAAFD, 0x963B, 0xAAFE, 0x9644, 0xAB40, 0x9642, 0xAB41, 0x96B9, 0xAB42, 0x96E8, 0xAB43, 0x9752, + 0xAB44, 0x975E, 0xAB45, 0x4E9F, 0xAB46, 0x4EAD, 0xAB47, 0x4EAE, 0xAB48, 0x4FE1, 0xAB49, 0x4FB5, 0xAB4A, 0x4FAF, 0xAB4B, 0x4FBF, + 0xAB4C, 0x4FE0, 0xAB4D, 0x4FD1, 0xAB4E, 0x4FCF, 0xAB4F, 0x4FDD, 0xAB50, 0x4FC3, 0xAB51, 0x4FB6, 0xAB52, 0x4FD8, 0xAB53, 0x4FDF, + 0xAB54, 0x4FCA, 0xAB55, 0x4FD7, 0xAB56, 0x4FAE, 0xAB57, 0x4FD0, 0xAB58, 0x4FC4, 0xAB59, 0x4FC2, 0xAB5A, 0x4FDA, 0xAB5B, 0x4FCE, + 0xAB5C, 0x4FDE, 0xAB5D, 0x4FB7, 0xAB5E, 0x5157, 0xAB5F, 0x5192, 0xAB60, 0x5191, 0xAB61, 0x51A0, 0xAB62, 0x524E, 0xAB63, 0x5243, + 0xAB64, 0x524A, 0xAB65, 0x524D, 0xAB66, 0x524C, 0xAB67, 0x524B, 0xAB68, 0x5247, 0xAB69, 0x52C7, 0xAB6A, 0x52C9, 0xAB6B, 0x52C3, + 0xAB6C, 0x52C1, 0xAB6D, 0x530D, 0xAB6E, 0x5357, 0xAB6F, 0x537B, 0xAB70, 0x539A, 0xAB71, 0x53DB, 0xAB72, 0x54AC, 0xAB73, 0x54C0, + 0xAB74, 0x54A8, 0xAB75, 0x54CE, 0xAB76, 0x54C9, 0xAB77, 0x54B8, 0xAB78, 0x54A6, 0xAB79, 0x54B3, 0xAB7A, 0x54C7, 0xAB7B, 0x54C2, + 0xAB7C, 0x54BD, 0xAB7D, 0x54AA, 0xAB7E, 0x54C1, 0xABA1, 0x54C4, 0xABA2, 0x54C8, 0xABA3, 0x54AF, 0xABA4, 0x54AB, 0xABA5, 0x54B1, + 0xABA6, 0x54BB, 0xABA7, 0x54A9, 0xABA8, 0x54A7, 0xABA9, 0x54BF, 0xABAA, 0x56FF, 0xABAB, 0x5782, 0xABAC, 0x578B, 0xABAD, 0x57A0, + 0xABAE, 0x57A3, 0xABAF, 0x57A2, 0xABB0, 0x57CE, 0xABB1, 0x57AE, 0xABB2, 0x5793, 0xABB3, 0x5955, 0xABB4, 0x5951, 0xABB5, 0x594F, + 0xABB6, 0x594E, 0xABB7, 0x5950, 0xABB8, 0x59DC, 0xABB9, 0x59D8, 0xABBA, 0x59FF, 0xABBB, 0x59E3, 0xABBC, 0x59E8, 0xABBD, 0x5A03, + 0xABBE, 0x59E5, 0xABBF, 0x59EA, 0xABC0, 0x59DA, 0xABC1, 0x59E6, 0xABC2, 0x5A01, 0xABC3, 0x59FB, 0xABC4, 0x5B69, 0xABC5, 0x5BA3, + 0xABC6, 0x5BA6, 0xABC7, 0x5BA4, 0xABC8, 0x5BA2, 0xABC9, 0x5BA5, 0xABCA, 0x5C01, 0xABCB, 0x5C4E, 0xABCC, 0x5C4F, 0xABCD, 0x5C4D, + 0xABCE, 0x5C4B, 0xABCF, 0x5CD9, 0xABD0, 0x5CD2, 0xABD1, 0x5DF7, 0xABD2, 0x5E1D, 0xABD3, 0x5E25, 0xABD4, 0x5E1F, 0xABD5, 0x5E7D, + 0xABD6, 0x5EA0, 0xABD7, 0x5EA6, 0xABD8, 0x5EFA, 0xABD9, 0x5F08, 0xABDA, 0x5F2D, 0xABDB, 0x5F65, 0xABDC, 0x5F88, 0xABDD, 0x5F85, + 0xABDE, 0x5F8A, 0xABDF, 0x5F8B, 0xABE0, 0x5F87, 0xABE1, 0x5F8C, 0xABE2, 0x5F89, 0xABE3, 0x6012, 0xABE4, 0x601D, 0xABE5, 0x6020, + 0xABE6, 0x6025, 0xABE7, 0x600E, 0xABE8, 0x6028, 0xABE9, 0x604D, 0xABEA, 0x6070, 0xABEB, 0x6068, 0xABEC, 0x6062, 0xABED, 0x6046, + 0xABEE, 0x6043, 0xABEF, 0x606C, 0xABF0, 0x606B, 0xABF1, 0x606A, 0xABF2, 0x6064, 0xABF3, 0x6241, 0xABF4, 0x62DC, 0xABF5, 0x6316, + 0xABF6, 0x6309, 0xABF7, 0x62FC, 0xABF8, 0x62ED, 0xABF9, 0x6301, 0xABFA, 0x62EE, 0xABFB, 0x62FD, 0xABFC, 0x6307, 0xABFD, 0x62F1, + 0xABFE, 0x62F7, 0xAC40, 0x62EF, 0xAC41, 0x62EC, 0xAC42, 0x62FE, 0xAC43, 0x62F4, 0xAC44, 0x6311, 0xAC45, 0x6302, 0xAC46, 0x653F, + 0xAC47, 0x6545, 0xAC48, 0x65AB, 0xAC49, 0x65BD, 0xAC4A, 0x65E2, 0xAC4B, 0x6625, 0xAC4C, 0x662D, 0xAC4D, 0x6620, 0xAC4E, 0x6627, + 0xAC4F, 0x662F, 0xAC50, 0x661F, 0xAC51, 0x6628, 0xAC52, 0x6631, 0xAC53, 0x6624, 0xAC54, 0x66F7, 0xAC55, 0x67FF, 0xAC56, 0x67D3, + 0xAC57, 0x67F1, 0xAC58, 0x67D4, 0xAC59, 0x67D0, 0xAC5A, 0x67EC, 0xAC5B, 0x67B6, 0xAC5C, 0x67AF, 0xAC5D, 0x67F5, 0xAC5E, 0x67E9, + 0xAC5F, 0x67EF, 0xAC60, 0x67C4, 0xAC61, 0x67D1, 0xAC62, 0x67B4, 0xAC63, 0x67DA, 0xAC64, 0x67E5, 0xAC65, 0x67B8, 0xAC66, 0x67CF, + 0xAC67, 0x67DE, 0xAC68, 0x67F3, 0xAC69, 0x67B0, 0xAC6A, 0x67D9, 0xAC6B, 0x67E2, 0xAC6C, 0x67DD, 0xAC6D, 0x67D2, 0xAC6E, 0x6B6A, + 0xAC6F, 0x6B83, 0xAC70, 0x6B86, 0xAC71, 0x6BB5, 0xAC72, 0x6BD2, 0xAC73, 0x6BD7, 0xAC74, 0x6C1F, 0xAC75, 0x6CC9, 0xAC76, 0x6D0B, + 0xAC77, 0x6D32, 0xAC78, 0x6D2A, 0xAC79, 0x6D41, 0xAC7A, 0x6D25, 0xAC7B, 0x6D0C, 0xAC7C, 0x6D31, 0xAC7D, 0x6D1E, 0xAC7E, 0x6D17, + 0xACA1, 0x6D3B, 0xACA2, 0x6D3D, 0xACA3, 0x6D3E, 0xACA4, 0x6D36, 0xACA5, 0x6D1B, 0xACA6, 0x6CF5, 0xACA7, 0x6D39, 0xACA8, 0x6D27, + 0xACA9, 0x6D38, 0xACAA, 0x6D29, 0xACAB, 0x6D2E, 0xACAC, 0x6D35, 0xACAD, 0x6D0E, 0xACAE, 0x6D2B, 0xACAF, 0x70AB, 0xACB0, 0x70BA, + 0xACB1, 0x70B3, 0xACB2, 0x70AC, 0xACB3, 0x70AF, 0xACB4, 0x70AD, 0xACB5, 0x70B8, 0xACB6, 0x70AE, 0xACB7, 0x70A4, 0xACB8, 0x7230, + 0xACB9, 0x7272, 0xACBA, 0x726F, 0xACBB, 0x7274, 0xACBC, 0x72E9, 0xACBD, 0x72E0, 0xACBE, 0x72E1, 0xACBF, 0x73B7, 0xACC0, 0x73CA, + 0xACC1, 0x73BB, 0xACC2, 0x73B2, 0xACC3, 0x73CD, 0xACC4, 0x73C0, 0xACC5, 0x73B3, 0xACC6, 0x751A, 0xACC7, 0x752D, 0xACC8, 0x754F, + 0xACC9, 0x754C, 0xACCA, 0x754E, 0xACCB, 0x754B, 0xACCC, 0x75AB, 0xACCD, 0x75A4, 0xACCE, 0x75A5, 0xACCF, 0x75A2, 0xACD0, 0x75A3, + 0xACD1, 0x7678, 0xACD2, 0x7686, 0xACD3, 0x7687, 0xACD4, 0x7688, 0xACD5, 0x76C8, 0xACD6, 0x76C6, 0xACD7, 0x76C3, 0xACD8, 0x76C5, + 0xACD9, 0x7701, 0xACDA, 0x76F9, 0xACDB, 0x76F8, 0xACDC, 0x7709, 0xACDD, 0x770B, 0xACDE, 0x76FE, 0xACDF, 0x76FC, 0xACE0, 0x7707, + 0xACE1, 0x77DC, 0xACE2, 0x7802, 0xACE3, 0x7814, 0xACE4, 0x780C, 0xACE5, 0x780D, 0xACE6, 0x7946, 0xACE7, 0x7949, 0xACE8, 0x7948, + 0xACE9, 0x7947, 0xACEA, 0x79B9, 0xACEB, 0x79BA, 0xACEC, 0x79D1, 0xACED, 0x79D2, 0xACEE, 0x79CB, 0xACEF, 0x7A7F, 0xACF0, 0x7A81, + 0xACF1, 0x7AFF, 0xACF2, 0x7AFD, 0xACF3, 0x7C7D, 0xACF4, 0x7D02, 0xACF5, 0x7D05, 0xACF6, 0x7D00, 0xACF7, 0x7D09, 0xACF8, 0x7D07, + 0xACF9, 0x7D04, 0xACFA, 0x7D06, 0xACFB, 0x7F38, 0xACFC, 0x7F8E, 0xACFD, 0x7FBF, 0xACFE, 0x8004, 0xAD40, 0x8010, 0xAD41, 0x800D, + 0xAD42, 0x8011, 0xAD43, 0x8036, 0xAD44, 0x80D6, 0xAD45, 0x80E5, 0xAD46, 0x80DA, 0xAD47, 0x80C3, 0xAD48, 0x80C4, 0xAD49, 0x80CC, + 0xAD4A, 0x80E1, 0xAD4B, 0x80DB, 0xAD4C, 0x80CE, 0xAD4D, 0x80DE, 0xAD4E, 0x80E4, 0xAD4F, 0x80DD, 0xAD50, 0x81F4, 0xAD51, 0x8222, + 0xAD52, 0x82E7, 0xAD53, 0x8303, 0xAD54, 0x8305, 0xAD55, 0x82E3, 0xAD56, 0x82DB, 0xAD57, 0x82E6, 0xAD58, 0x8304, 0xAD59, 0x82E5, + 0xAD5A, 0x8302, 0xAD5B, 0x8309, 0xAD5C, 0x82D2, 0xAD5D, 0x82D7, 0xAD5E, 0x82F1, 0xAD5F, 0x8301, 0xAD60, 0x82DC, 0xAD61, 0x82D4, + 0xAD62, 0x82D1, 0xAD63, 0x82DE, 0xAD64, 0x82D3, 0xAD65, 0x82DF, 0xAD66, 0x82EF, 0xAD67, 0x8306, 0xAD68, 0x8650, 0xAD69, 0x8679, + 0xAD6A, 0x867B, 0xAD6B, 0x867A, 0xAD6C, 0x884D, 0xAD6D, 0x886B, 0xAD6E, 0x8981, 0xAD6F, 0x89D4, 0xAD70, 0x8A08, 0xAD71, 0x8A02, + 0xAD72, 0x8A03, 0xAD73, 0x8C9E, 0xAD74, 0x8CA0, 0xAD75, 0x8D74, 0xAD76, 0x8D73, 0xAD77, 0x8DB4, 0xAD78, 0x8ECD, 0xAD79, 0x8ECC, + 0xAD7A, 0x8FF0, 0xAD7B, 0x8FE6, 0xAD7C, 0x8FE2, 0xAD7D, 0x8FEA, 0xAD7E, 0x8FE5, 0xADA1, 0x8FED, 0xADA2, 0x8FEB, 0xADA3, 0x8FE4, + 0xADA4, 0x8FE8, 0xADA5, 0x90CA, 0xADA6, 0x90CE, 0xADA7, 0x90C1, 0xADA8, 0x90C3, 0xADA9, 0x914B, 0xADAA, 0x914A, 0xADAB, 0x91CD, + 0xADAC, 0x9582, 0xADAD, 0x9650, 0xADAE, 0x964B, 0xADAF, 0x964C, 0xADB0, 0x964D, 0xADB1, 0x9762, 0xADB2, 0x9769, 0xADB3, 0x97CB, + 0xADB4, 0x97ED, 0xADB5, 0x97F3, 0xADB6, 0x9801, 0xADB7, 0x98A8, 0xADB8, 0x98DB, 0xADB9, 0x98DF, 0xADBA, 0x9996, 0xADBB, 0x9999, + 0xADBC, 0x4E58, 0xADBD, 0x4EB3, 0xADBE, 0x500C, 0xADBF, 0x500D, 0xADC0, 0x5023, 0xADC1, 0x4FEF, 0xADC2, 0x5026, 0xADC3, 0x5025, + 0xADC4, 0x4FF8, 0xADC5, 0x5029, 0xADC6, 0x5016, 0xADC7, 0x5006, 0xADC8, 0x503C, 0xADC9, 0x501F, 0xADCA, 0x501A, 0xADCB, 0x5012, + 0xADCC, 0x5011, 0xADCD, 0x4FFA, 0xADCE, 0x5000, 0xADCF, 0x5014, 0xADD0, 0x5028, 0xADD1, 0x4FF1, 0xADD2, 0x5021, 0xADD3, 0x500B, + 0xADD4, 0x5019, 0xADD5, 0x5018, 0xADD6, 0x4FF3, 0xADD7, 0x4FEE, 0xADD8, 0x502D, 0xADD9, 0x502A, 0xADDA, 0x4FFE, 0xADDB, 0x502B, + 0xADDC, 0x5009, 0xADDD, 0x517C, 0xADDE, 0x51A4, 0xADDF, 0x51A5, 0xADE0, 0x51A2, 0xADE1, 0x51CD, 0xADE2, 0x51CC, 0xADE3, 0x51C6, + 0xADE4, 0x51CB, 0xADE5, 0x5256, 0xADE6, 0x525C, 0xADE7, 0x5254, 0xADE8, 0x525B, 0xADE9, 0x525D, 0xADEA, 0x532A, 0xADEB, 0x537F, + 0xADEC, 0x539F, 0xADED, 0x539D, 0xADEE, 0x53DF, 0xADEF, 0x54E8, 0xADF0, 0x5510, 0xADF1, 0x5501, 0xADF2, 0x5537, 0xADF3, 0x54FC, + 0xADF4, 0x54E5, 0xADF5, 0x54F2, 0xADF6, 0x5506, 0xADF7, 0x54FA, 0xADF8, 0x5514, 0xADF9, 0x54E9, 0xADFA, 0x54ED, 0xADFB, 0x54E1, + 0xADFC, 0x5509, 0xADFD, 0x54EE, 0xADFE, 0x54EA, 0xAE40, 0x54E6, 0xAE41, 0x5527, 0xAE42, 0x5507, 0xAE43, 0x54FD, 0xAE44, 0x550F, + 0xAE45, 0x5703, 0xAE46, 0x5704, 0xAE47, 0x57C2, 0xAE48, 0x57D4, 0xAE49, 0x57CB, 0xAE4A, 0x57C3, 0xAE4B, 0x5809, 0xAE4C, 0x590F, + 0xAE4D, 0x5957, 0xAE4E, 0x5958, 0xAE4F, 0x595A, 0xAE50, 0x5A11, 0xAE51, 0x5A18, 0xAE52, 0x5A1C, 0xAE53, 0x5A1F, 0xAE54, 0x5A1B, + 0xAE55, 0x5A13, 0xAE56, 0x59EC, 0xAE57, 0x5A20, 0xAE58, 0x5A23, 0xAE59, 0x5A29, 0xAE5A, 0x5A25, 0xAE5B, 0x5A0C, 0xAE5C, 0x5A09, + 0xAE5D, 0x5B6B, 0xAE5E, 0x5C58, 0xAE5F, 0x5BB0, 0xAE60, 0x5BB3, 0xAE61, 0x5BB6, 0xAE62, 0x5BB4, 0xAE63, 0x5BAE, 0xAE64, 0x5BB5, + 0xAE65, 0x5BB9, 0xAE66, 0x5BB8, 0xAE67, 0x5C04, 0xAE68, 0x5C51, 0xAE69, 0x5C55, 0xAE6A, 0x5C50, 0xAE6B, 0x5CED, 0xAE6C, 0x5CFD, + 0xAE6D, 0x5CFB, 0xAE6E, 0x5CEA, 0xAE6F, 0x5CE8, 0xAE70, 0x5CF0, 0xAE71, 0x5CF6, 0xAE72, 0x5D01, 0xAE73, 0x5CF4, 0xAE74, 0x5DEE, + 0xAE75, 0x5E2D, 0xAE76, 0x5E2B, 0xAE77, 0x5EAB, 0xAE78, 0x5EAD, 0xAE79, 0x5EA7, 0xAE7A, 0x5F31, 0xAE7B, 0x5F92, 0xAE7C, 0x5F91, + 0xAE7D, 0x5F90, 0xAE7E, 0x6059, 0xAEA1, 0x6063, 0xAEA2, 0x6065, 0xAEA3, 0x6050, 0xAEA4, 0x6055, 0xAEA5, 0x606D, 0xAEA6, 0x6069, + 0xAEA7, 0x606F, 0xAEA8, 0x6084, 0xAEA9, 0x609F, 0xAEAA, 0x609A, 0xAEAB, 0x608D, 0xAEAC, 0x6094, 0xAEAD, 0x608C, 0xAEAE, 0x6085, + 0xAEAF, 0x6096, 0xAEB0, 0x6247, 0xAEB1, 0x62F3, 0xAEB2, 0x6308, 0xAEB3, 0x62FF, 0xAEB4, 0x634E, 0xAEB5, 0x633E, 0xAEB6, 0x632F, + 0xAEB7, 0x6355, 0xAEB8, 0x6342, 0xAEB9, 0x6346, 0xAEBA, 0x634F, 0xAEBB, 0x6349, 0xAEBC, 0x633A, 0xAEBD, 0x6350, 0xAEBE, 0x633D, + 0xAEBF, 0x632A, 0xAEC0, 0x632B, 0xAEC1, 0x6328, 0xAEC2, 0x634D, 0xAEC3, 0x634C, 0xAEC4, 0x6548, 0xAEC5, 0x6549, 0xAEC6, 0x6599, + 0xAEC7, 0x65C1, 0xAEC8, 0x65C5, 0xAEC9, 0x6642, 0xAECA, 0x6649, 0xAECB, 0x664F, 0xAECC, 0x6643, 0xAECD, 0x6652, 0xAECE, 0x664C, + 0xAECF, 0x6645, 0xAED0, 0x6641, 0xAED1, 0x66F8, 0xAED2, 0x6714, 0xAED3, 0x6715, 0xAED4, 0x6717, 0xAED5, 0x6821, 0xAED6, 0x6838, + 0xAED7, 0x6848, 0xAED8, 0x6846, 0xAED9, 0x6853, 0xAEDA, 0x6839, 0xAEDB, 0x6842, 0xAEDC, 0x6854, 0xAEDD, 0x6829, 0xAEDE, 0x68B3, + 0xAEDF, 0x6817, 0xAEE0, 0x684C, 0xAEE1, 0x6851, 0xAEE2, 0x683D, 0xAEE3, 0x67F4, 0xAEE4, 0x6850, 0xAEE5, 0x6840, 0xAEE6, 0x683C, + 0xAEE7, 0x6843, 0xAEE8, 0x682A, 0xAEE9, 0x6845, 0xAEEA, 0x6813, 0xAEEB, 0x6818, 0xAEEC, 0x6841, 0xAEED, 0x6B8A, 0xAEEE, 0x6B89, + 0xAEEF, 0x6BB7, 0xAEF0, 0x6C23, 0xAEF1, 0x6C27, 0xAEF2, 0x6C28, 0xAEF3, 0x6C26, 0xAEF4, 0x6C24, 0xAEF5, 0x6CF0, 0xAEF6, 0x6D6A, + 0xAEF7, 0x6D95, 0xAEF8, 0x6D88, 0xAEF9, 0x6D87, 0xAEFA, 0x6D66, 0xAEFB, 0x6D78, 0xAEFC, 0x6D77, 0xAEFD, 0x6D59, 0xAEFE, 0x6D93, + 0xAF40, 0x6D6C, 0xAF41, 0x6D89, 0xAF42, 0x6D6E, 0xAF43, 0x6D5A, 0xAF44, 0x6D74, 0xAF45, 0x6D69, 0xAF46, 0x6D8C, 0xAF47, 0x6D8A, + 0xAF48, 0x6D79, 0xAF49, 0x6D85, 0xAF4A, 0x6D65, 0xAF4B, 0x6D94, 0xAF4C, 0x70CA, 0xAF4D, 0x70D8, 0xAF4E, 0x70E4, 0xAF4F, 0x70D9, + 0xAF50, 0x70C8, 0xAF51, 0x70CF, 0xAF52, 0x7239, 0xAF53, 0x7279, 0xAF54, 0x72FC, 0xAF55, 0x72F9, 0xAF56, 0x72FD, 0xAF57, 0x72F8, + 0xAF58, 0x72F7, 0xAF59, 0x7386, 0xAF5A, 0x73ED, 0xAF5B, 0x7409, 0xAF5C, 0x73EE, 0xAF5D, 0x73E0, 0xAF5E, 0x73EA, 0xAF5F, 0x73DE, + 0xAF60, 0x7554, 0xAF61, 0x755D, 0xAF62, 0x755C, 0xAF63, 0x755A, 0xAF64, 0x7559, 0xAF65, 0x75BE, 0xAF66, 0x75C5, 0xAF67, 0x75C7, + 0xAF68, 0x75B2, 0xAF69, 0x75B3, 0xAF6A, 0x75BD, 0xAF6B, 0x75BC, 0xAF6C, 0x75B9, 0xAF6D, 0x75C2, 0xAF6E, 0x75B8, 0xAF6F, 0x768B, + 0xAF70, 0x76B0, 0xAF71, 0x76CA, 0xAF72, 0x76CD, 0xAF73, 0x76CE, 0xAF74, 0x7729, 0xAF75, 0x771F, 0xAF76, 0x7720, 0xAF77, 0x7728, + 0xAF78, 0x77E9, 0xAF79, 0x7830, 0xAF7A, 0x7827, 0xAF7B, 0x7838, 0xAF7C, 0x781D, 0xAF7D, 0x7834, 0xAF7E, 0x7837, 0xAFA1, 0x7825, + 0xAFA2, 0x782D, 0xAFA3, 0x7820, 0xAFA4, 0x781F, 0xAFA5, 0x7832, 0xAFA6, 0x7955, 0xAFA7, 0x7950, 0xAFA8, 0x7960, 0xAFA9, 0x795F, + 0xAFAA, 0x7956, 0xAFAB, 0x795E, 0xAFAC, 0x795D, 0xAFAD, 0x7957, 0xAFAE, 0x795A, 0xAFAF, 0x79E4, 0xAFB0, 0x79E3, 0xAFB1, 0x79E7, + 0xAFB2, 0x79DF, 0xAFB3, 0x79E6, 0xAFB4, 0x79E9, 0xAFB5, 0x79D8, 0xAFB6, 0x7A84, 0xAFB7, 0x7A88, 0xAFB8, 0x7AD9, 0xAFB9, 0x7B06, + 0xAFBA, 0x7B11, 0xAFBB, 0x7C89, 0xAFBC, 0x7D21, 0xAFBD, 0x7D17, 0xAFBE, 0x7D0B, 0xAFBF, 0x7D0A, 0xAFC0, 0x7D20, 0xAFC1, 0x7D22, + 0xAFC2, 0x7D14, 0xAFC3, 0x7D10, 0xAFC4, 0x7D15, 0xAFC5, 0x7D1A, 0xAFC6, 0x7D1C, 0xAFC7, 0x7D0D, 0xAFC8, 0x7D19, 0xAFC9, 0x7D1B, + 0xAFCA, 0x7F3A, 0xAFCB, 0x7F5F, 0xAFCC, 0x7F94, 0xAFCD, 0x7FC5, 0xAFCE, 0x7FC1, 0xAFCF, 0x8006, 0xAFD0, 0x8018, 0xAFD1, 0x8015, + 0xAFD2, 0x8019, 0xAFD3, 0x8017, 0xAFD4, 0x803D, 0xAFD5, 0x803F, 0xAFD6, 0x80F1, 0xAFD7, 0x8102, 0xAFD8, 0x80F0, 0xAFD9, 0x8105, + 0xAFDA, 0x80ED, 0xAFDB, 0x80F4, 0xAFDC, 0x8106, 0xAFDD, 0x80F8, 0xAFDE, 0x80F3, 0xAFDF, 0x8108, 0xAFE0, 0x80FD, 0xAFE1, 0x810A, + 0xAFE2, 0x80FC, 0xAFE3, 0x80EF, 0xAFE4, 0x81ED, 0xAFE5, 0x81EC, 0xAFE6, 0x8200, 0xAFE7, 0x8210, 0xAFE8, 0x822A, 0xAFE9, 0x822B, + 0xAFEA, 0x8228, 0xAFEB, 0x822C, 0xAFEC, 0x82BB, 0xAFED, 0x832B, 0xAFEE, 0x8352, 0xAFEF, 0x8354, 0xAFF0, 0x834A, 0xAFF1, 0x8338, + 0xAFF2, 0x8350, 0xAFF3, 0x8349, 0xAFF4, 0x8335, 0xAFF5, 0x8334, 0xAFF6, 0x834F, 0xAFF7, 0x8332, 0xAFF8, 0x8339, 0xAFF9, 0x8336, + 0xAFFA, 0x8317, 0xAFFB, 0x8340, 0xAFFC, 0x8331, 0xAFFD, 0x8328, 0xAFFE, 0x8343, 0xB040, 0x8654, 0xB041, 0x868A, 0xB042, 0x86AA, + 0xB043, 0x8693, 0xB044, 0x86A4, 0xB045, 0x86A9, 0xB046, 0x868C, 0xB047, 0x86A3, 0xB048, 0x869C, 0xB049, 0x8870, 0xB04A, 0x8877, + 0xB04B, 0x8881, 0xB04C, 0x8882, 0xB04D, 0x887D, 0xB04E, 0x8879, 0xB04F, 0x8A18, 0xB050, 0x8A10, 0xB051, 0x8A0E, 0xB052, 0x8A0C, + 0xB053, 0x8A15, 0xB054, 0x8A0A, 0xB055, 0x8A17, 0xB056, 0x8A13, 0xB057, 0x8A16, 0xB058, 0x8A0F, 0xB059, 0x8A11, 0xB05A, 0x8C48, + 0xB05B, 0x8C7A, 0xB05C, 0x8C79, 0xB05D, 0x8CA1, 0xB05E, 0x8CA2, 0xB05F, 0x8D77, 0xB060, 0x8EAC, 0xB061, 0x8ED2, 0xB062, 0x8ED4, + 0xB063, 0x8ECF, 0xB064, 0x8FB1, 0xB065, 0x9001, 0xB066, 0x9006, 0xB067, 0x8FF7, 0xB068, 0x9000, 0xB069, 0x8FFA, 0xB06A, 0x8FF4, + 0xB06B, 0x9003, 0xB06C, 0x8FFD, 0xB06D, 0x9005, 0xB06E, 0x8FF8, 0xB06F, 0x9095, 0xB070, 0x90E1, 0xB071, 0x90DD, 0xB072, 0x90E2, + 0xB073, 0x9152, 0xB074, 0x914D, 0xB075, 0x914C, 0xB076, 0x91D8, 0xB077, 0x91DD, 0xB078, 0x91D7, 0xB079, 0x91DC, 0xB07A, 0x91D9, + 0xB07B, 0x9583, 0xB07C, 0x9662, 0xB07D, 0x9663, 0xB07E, 0x9661, 0xB0A1, 0x965B, 0xB0A2, 0x965D, 0xB0A3, 0x9664, 0xB0A4, 0x9658, + 0xB0A5, 0x965E, 0xB0A6, 0x96BB, 0xB0A7, 0x98E2, 0xB0A8, 0x99AC, 0xB0A9, 0x9AA8, 0xB0AA, 0x9AD8, 0xB0AB, 0x9B25, 0xB0AC, 0x9B32, + 0xB0AD, 0x9B3C, 0xB0AE, 0x4E7E, 0xB0AF, 0x507A, 0xB0B0, 0x507D, 0xB0B1, 0x505C, 0xB0B2, 0x5047, 0xB0B3, 0x5043, 0xB0B4, 0x504C, + 0xB0B5, 0x505A, 0xB0B6, 0x5049, 0xB0B7, 0x5065, 0xB0B8, 0x5076, 0xB0B9, 0x504E, 0xB0BA, 0x5055, 0xB0BB, 0x5075, 0xB0BC, 0x5074, + 0xB0BD, 0x5077, 0xB0BE, 0x504F, 0xB0BF, 0x500F, 0xB0C0, 0x506F, 0xB0C1, 0x506D, 0xB0C2, 0x515C, 0xB0C3, 0x5195, 0xB0C4, 0x51F0, + 0xB0C5, 0x526A, 0xB0C6, 0x526F, 0xB0C7, 0x52D2, 0xB0C8, 0x52D9, 0xB0C9, 0x52D8, 0xB0CA, 0x52D5, 0xB0CB, 0x5310, 0xB0CC, 0x530F, + 0xB0CD, 0x5319, 0xB0CE, 0x533F, 0xB0CF, 0x5340, 0xB0D0, 0x533E, 0xB0D1, 0x53C3, 0xB0D2, 0x66FC, 0xB0D3, 0x5546, 0xB0D4, 0x556A, + 0xB0D5, 0x5566, 0xB0D6, 0x5544, 0xB0D7, 0x555E, 0xB0D8, 0x5561, 0xB0D9, 0x5543, 0xB0DA, 0x554A, 0xB0DB, 0x5531, 0xB0DC, 0x5556, + 0xB0DD, 0x554F, 0xB0DE, 0x5555, 0xB0DF, 0x552F, 0xB0E0, 0x5564, 0xB0E1, 0x5538, 0xB0E2, 0x552E, 0xB0E3, 0x555C, 0xB0E4, 0x552C, + 0xB0E5, 0x5563, 0xB0E6, 0x5533, 0xB0E7, 0x5541, 0xB0E8, 0x5557, 0xB0E9, 0x5708, 0xB0EA, 0x570B, 0xB0EB, 0x5709, 0xB0EC, 0x57DF, + 0xB0ED, 0x5805, 0xB0EE, 0x580A, 0xB0EF, 0x5806, 0xB0F0, 0x57E0, 0xB0F1, 0x57E4, 0xB0F2, 0x57FA, 0xB0F3, 0x5802, 0xB0F4, 0x5835, + 0xB0F5, 0x57F7, 0xB0F6, 0x57F9, 0xB0F7, 0x5920, 0xB0F8, 0x5962, 0xB0F9, 0x5A36, 0xB0FA, 0x5A41, 0xB0FB, 0x5A49, 0xB0FC, 0x5A66, + 0xB0FD, 0x5A6A, 0xB0FE, 0x5A40, 0xB140, 0x5A3C, 0xB141, 0x5A62, 0xB142, 0x5A5A, 0xB143, 0x5A46, 0xB144, 0x5A4A, 0xB145, 0x5B70, + 0xB146, 0x5BC7, 0xB147, 0x5BC5, 0xB148, 0x5BC4, 0xB149, 0x5BC2, 0xB14A, 0x5BBF, 0xB14B, 0x5BC6, 0xB14C, 0x5C09, 0xB14D, 0x5C08, + 0xB14E, 0x5C07, 0xB14F, 0x5C60, 0xB150, 0x5C5C, 0xB151, 0x5C5D, 0xB152, 0x5D07, 0xB153, 0x5D06, 0xB154, 0x5D0E, 0xB155, 0x5D1B, + 0xB156, 0x5D16, 0xB157, 0x5D22, 0xB158, 0x5D11, 0xB159, 0x5D29, 0xB15A, 0x5D14, 0xB15B, 0x5D19, 0xB15C, 0x5D24, 0xB15D, 0x5D27, + 0xB15E, 0x5D17, 0xB15F, 0x5DE2, 0xB160, 0x5E38, 0xB161, 0x5E36, 0xB162, 0x5E33, 0xB163, 0x5E37, 0xB164, 0x5EB7, 0xB165, 0x5EB8, + 0xB166, 0x5EB6, 0xB167, 0x5EB5, 0xB168, 0x5EBE, 0xB169, 0x5F35, 0xB16A, 0x5F37, 0xB16B, 0x5F57, 0xB16C, 0x5F6C, 0xB16D, 0x5F69, + 0xB16E, 0x5F6B, 0xB16F, 0x5F97, 0xB170, 0x5F99, 0xB171, 0x5F9E, 0xB172, 0x5F98, 0xB173, 0x5FA1, 0xB174, 0x5FA0, 0xB175, 0x5F9C, + 0xB176, 0x607F, 0xB177, 0x60A3, 0xB178, 0x6089, 0xB179, 0x60A0, 0xB17A, 0x60A8, 0xB17B, 0x60CB, 0xB17C, 0x60B4, 0xB17D, 0x60E6, + 0xB17E, 0x60BD, 0xB1A1, 0x60C5, 0xB1A2, 0x60BB, 0xB1A3, 0x60B5, 0xB1A4, 0x60DC, 0xB1A5, 0x60BC, 0xB1A6, 0x60D8, 0xB1A7, 0x60D5, + 0xB1A8, 0x60C6, 0xB1A9, 0x60DF, 0xB1AA, 0x60B8, 0xB1AB, 0x60DA, 0xB1AC, 0x60C7, 0xB1AD, 0x621A, 0xB1AE, 0x621B, 0xB1AF, 0x6248, + 0xB1B0, 0x63A0, 0xB1B1, 0x63A7, 0xB1B2, 0x6372, 0xB1B3, 0x6396, 0xB1B4, 0x63A2, 0xB1B5, 0x63A5, 0xB1B6, 0x6377, 0xB1B7, 0x6367, + 0xB1B8, 0x6398, 0xB1B9, 0x63AA, 0xB1BA, 0x6371, 0xB1BB, 0x63A9, 0xB1BC, 0x6389, 0xB1BD, 0x6383, 0xB1BE, 0x639B, 0xB1BF, 0x636B, + 0xB1C0, 0x63A8, 0xB1C1, 0x6384, 0xB1C2, 0x6388, 0xB1C3, 0x6399, 0xB1C4, 0x63A1, 0xB1C5, 0x63AC, 0xB1C6, 0x6392, 0xB1C7, 0x638F, + 0xB1C8, 0x6380, 0xB1C9, 0x637B, 0xB1CA, 0x6369, 0xB1CB, 0x6368, 0xB1CC, 0x637A, 0xB1CD, 0x655D, 0xB1CE, 0x6556, 0xB1CF, 0x6551, + 0xB1D0, 0x6559, 0xB1D1, 0x6557, 0xB1D2, 0x555F, 0xB1D3, 0x654F, 0xB1D4, 0x6558, 0xB1D5, 0x6555, 0xB1D6, 0x6554, 0xB1D7, 0x659C, + 0xB1D8, 0x659B, 0xB1D9, 0x65AC, 0xB1DA, 0x65CF, 0xB1DB, 0x65CB, 0xB1DC, 0x65CC, 0xB1DD, 0x65CE, 0xB1DE, 0x665D, 0xB1DF, 0x665A, + 0xB1E0, 0x6664, 0xB1E1, 0x6668, 0xB1E2, 0x6666, 0xB1E3, 0x665E, 0xB1E4, 0x66F9, 0xB1E5, 0x52D7, 0xB1E6, 0x671B, 0xB1E7, 0x6881, + 0xB1E8, 0x68AF, 0xB1E9, 0x68A2, 0xB1EA, 0x6893, 0xB1EB, 0x68B5, 0xB1EC, 0x687F, 0xB1ED, 0x6876, 0xB1EE, 0x68B1, 0xB1EF, 0x68A7, + 0xB1F0, 0x6897, 0xB1F1, 0x68B0, 0xB1F2, 0x6883, 0xB1F3, 0x68C4, 0xB1F4, 0x68AD, 0xB1F5, 0x6886, 0xB1F6, 0x6885, 0xB1F7, 0x6894, + 0xB1F8, 0x689D, 0xB1F9, 0x68A8, 0xB1FA, 0x689F, 0xB1FB, 0x68A1, 0xB1FC, 0x6882, 0xB1FD, 0x6B32, 0xB1FE, 0x6BBA, 0xB240, 0x6BEB, + 0xB241, 0x6BEC, 0xB242, 0x6C2B, 0xB243, 0x6D8E, 0xB244, 0x6DBC, 0xB245, 0x6DF3, 0xB246, 0x6DD9, 0xB247, 0x6DB2, 0xB248, 0x6DE1, + 0xB249, 0x6DCC, 0xB24A, 0x6DE4, 0xB24B, 0x6DFB, 0xB24C, 0x6DFA, 0xB24D, 0x6E05, 0xB24E, 0x6DC7, 0xB24F, 0x6DCB, 0xB250, 0x6DAF, + 0xB251, 0x6DD1, 0xB252, 0x6DAE, 0xB253, 0x6DDE, 0xB254, 0x6DF9, 0xB255, 0x6DB8, 0xB256, 0x6DF7, 0xB257, 0x6DF5, 0xB258, 0x6DC5, + 0xB259, 0x6DD2, 0xB25A, 0x6E1A, 0xB25B, 0x6DB5, 0xB25C, 0x6DDA, 0xB25D, 0x6DEB, 0xB25E, 0x6DD8, 0xB25F, 0x6DEA, 0xB260, 0x6DF1, + 0xB261, 0x6DEE, 0xB262, 0x6DE8, 0xB263, 0x6DC6, 0xB264, 0x6DC4, 0xB265, 0x6DAA, 0xB266, 0x6DEC, 0xB267, 0x6DBF, 0xB268, 0x6DE6, + 0xB269, 0x70F9, 0xB26A, 0x7109, 0xB26B, 0x710A, 0xB26C, 0x70FD, 0xB26D, 0x70EF, 0xB26E, 0x723D, 0xB26F, 0x727D, 0xB270, 0x7281, + 0xB271, 0x731C, 0xB272, 0x731B, 0xB273, 0x7316, 0xB274, 0x7313, 0xB275, 0x7319, 0xB276, 0x7387, 0xB277, 0x7405, 0xB278, 0x740A, + 0xB279, 0x7403, 0xB27A, 0x7406, 0xB27B, 0x73FE, 0xB27C, 0x740D, 0xB27D, 0x74E0, 0xB27E, 0x74F6, 0xB2A1, 0x74F7, 0xB2A2, 0x751C, + 0xB2A3, 0x7522, 0xB2A4, 0x7565, 0xB2A5, 0x7566, 0xB2A6, 0x7562, 0xB2A7, 0x7570, 0xB2A8, 0x758F, 0xB2A9, 0x75D4, 0xB2AA, 0x75D5, + 0xB2AB, 0x75B5, 0xB2AC, 0x75CA, 0xB2AD, 0x75CD, 0xB2AE, 0x768E, 0xB2AF, 0x76D4, 0xB2B0, 0x76D2, 0xB2B1, 0x76DB, 0xB2B2, 0x7737, + 0xB2B3, 0x773E, 0xB2B4, 0x773C, 0xB2B5, 0x7736, 0xB2B6, 0x7738, 0xB2B7, 0x773A, 0xB2B8, 0x786B, 0xB2B9, 0x7843, 0xB2BA, 0x784E, + 0xB2BB, 0x7965, 0xB2BC, 0x7968, 0xB2BD, 0x796D, 0xB2BE, 0x79FB, 0xB2BF, 0x7A92, 0xB2C0, 0x7A95, 0xB2C1, 0x7B20, 0xB2C2, 0x7B28, + 0xB2C3, 0x7B1B, 0xB2C4, 0x7B2C, 0xB2C5, 0x7B26, 0xB2C6, 0x7B19, 0xB2C7, 0x7B1E, 0xB2C8, 0x7B2E, 0xB2C9, 0x7C92, 0xB2CA, 0x7C97, + 0xB2CB, 0x7C95, 0xB2CC, 0x7D46, 0xB2CD, 0x7D43, 0xB2CE, 0x7D71, 0xB2CF, 0x7D2E, 0xB2D0, 0x7D39, 0xB2D1, 0x7D3C, 0xB2D2, 0x7D40, + 0xB2D3, 0x7D30, 0xB2D4, 0x7D33, 0xB2D5, 0x7D44, 0xB2D6, 0x7D2F, 0xB2D7, 0x7D42, 0xB2D8, 0x7D32, 0xB2D9, 0x7D31, 0xB2DA, 0x7F3D, + 0xB2DB, 0x7F9E, 0xB2DC, 0x7F9A, 0xB2DD, 0x7FCC, 0xB2DE, 0x7FCE, 0xB2DF, 0x7FD2, 0xB2E0, 0x801C, 0xB2E1, 0x804A, 0xB2E2, 0x8046, + 0xB2E3, 0x812F, 0xB2E4, 0x8116, 0xB2E5, 0x8123, 0xB2E6, 0x812B, 0xB2E7, 0x8129, 0xB2E8, 0x8130, 0xB2E9, 0x8124, 0xB2EA, 0x8202, + 0xB2EB, 0x8235, 0xB2EC, 0x8237, 0xB2ED, 0x8236, 0xB2EE, 0x8239, 0xB2EF, 0x838E, 0xB2F0, 0x839E, 0xB2F1, 0x8398, 0xB2F2, 0x8378, + 0xB2F3, 0x83A2, 0xB2F4, 0x8396, 0xB2F5, 0x83BD, 0xB2F6, 0x83AB, 0xB2F7, 0x8392, 0xB2F8, 0x838A, 0xB2F9, 0x8393, 0xB2FA, 0x8389, + 0xB2FB, 0x83A0, 0xB2FC, 0x8377, 0xB2FD, 0x837B, 0xB2FE, 0x837C, 0xB340, 0x8386, 0xB341, 0x83A7, 0xB342, 0x8655, 0xB343, 0x5F6A, + 0xB344, 0x86C7, 0xB345, 0x86C0, 0xB346, 0x86B6, 0xB347, 0x86C4, 0xB348, 0x86B5, 0xB349, 0x86C6, 0xB34A, 0x86CB, 0xB34B, 0x86B1, + 0xB34C, 0x86AF, 0xB34D, 0x86C9, 0xB34E, 0x8853, 0xB34F, 0x889E, 0xB350, 0x8888, 0xB351, 0x88AB, 0xB352, 0x8892, 0xB353, 0x8896, + 0xB354, 0x888D, 0xB355, 0x888B, 0xB356, 0x8993, 0xB357, 0x898F, 0xB358, 0x8A2A, 0xB359, 0x8A1D, 0xB35A, 0x8A23, 0xB35B, 0x8A25, + 0xB35C, 0x8A31, 0xB35D, 0x8A2D, 0xB35E, 0x8A1F, 0xB35F, 0x8A1B, 0xB360, 0x8A22, 0xB361, 0x8C49, 0xB362, 0x8C5A, 0xB363, 0x8CA9, + 0xB364, 0x8CAC, 0xB365, 0x8CAB, 0xB366, 0x8CA8, 0xB367, 0x8CAA, 0xB368, 0x8CA7, 0xB369, 0x8D67, 0xB36A, 0x8D66, 0xB36B, 0x8DBE, + 0xB36C, 0x8DBA, 0xB36D, 0x8EDB, 0xB36E, 0x8EDF, 0xB36F, 0x9019, 0xB370, 0x900D, 0xB371, 0x901A, 0xB372, 0x9017, 0xB373, 0x9023, + 0xB374, 0x901F, 0xB375, 0x901D, 0xB376, 0x9010, 0xB377, 0x9015, 0xB378, 0x901E, 0xB379, 0x9020, 0xB37A, 0x900F, 0xB37B, 0x9022, + 0xB37C, 0x9016, 0xB37D, 0x901B, 0xB37E, 0x9014, 0xB3A1, 0x90E8, 0xB3A2, 0x90ED, 0xB3A3, 0x90FD, 0xB3A4, 0x9157, 0xB3A5, 0x91CE, + 0xB3A6, 0x91F5, 0xB3A7, 0x91E6, 0xB3A8, 0x91E3, 0xB3A9, 0x91E7, 0xB3AA, 0x91ED, 0xB3AB, 0x91E9, 0xB3AC, 0x9589, 0xB3AD, 0x966A, + 0xB3AE, 0x9675, 0xB3AF, 0x9673, 0xB3B0, 0x9678, 0xB3B1, 0x9670, 0xB3B2, 0x9674, 0xB3B3, 0x9676, 0xB3B4, 0x9677, 0xB3B5, 0x966C, + 0xB3B6, 0x96C0, 0xB3B7, 0x96EA, 0xB3B8, 0x96E9, 0xB3B9, 0x7AE0, 0xB3BA, 0x7ADF, 0xB3BB, 0x9802, 0xB3BC, 0x9803, 0xB3BD, 0x9B5A, + 0xB3BE, 0x9CE5, 0xB3BF, 0x9E75, 0xB3C0, 0x9E7F, 0xB3C1, 0x9EA5, 0xB3C2, 0x9EBB, 0xB3C3, 0x50A2, 0xB3C4, 0x508D, 0xB3C5, 0x5085, + 0xB3C6, 0x5099, 0xB3C7, 0x5091, 0xB3C8, 0x5080, 0xB3C9, 0x5096, 0xB3CA, 0x5098, 0xB3CB, 0x509A, 0xB3CC, 0x6700, 0xB3CD, 0x51F1, + 0xB3CE, 0x5272, 0xB3CF, 0x5274, 0xB3D0, 0x5275, 0xB3D1, 0x5269, 0xB3D2, 0x52DE, 0xB3D3, 0x52DD, 0xB3D4, 0x52DB, 0xB3D5, 0x535A, + 0xB3D6, 0x53A5, 0xB3D7, 0x557B, 0xB3D8, 0x5580, 0xB3D9, 0x55A7, 0xB3DA, 0x557C, 0xB3DB, 0x558A, 0xB3DC, 0x559D, 0xB3DD, 0x5598, + 0xB3DE, 0x5582, 0xB3DF, 0x559C, 0xB3E0, 0x55AA, 0xB3E1, 0x5594, 0xB3E2, 0x5587, 0xB3E3, 0x558B, 0xB3E4, 0x5583, 0xB3E5, 0x55B3, + 0xB3E6, 0x55AE, 0xB3E7, 0x559F, 0xB3E8, 0x553E, 0xB3E9, 0x55B2, 0xB3EA, 0x559A, 0xB3EB, 0x55BB, 0xB3EC, 0x55AC, 0xB3ED, 0x55B1, + 0xB3EE, 0x557E, 0xB3EF, 0x5589, 0xB3F0, 0x55AB, 0xB3F1, 0x5599, 0xB3F2, 0x570D, 0xB3F3, 0x582F, 0xB3F4, 0x582A, 0xB3F5, 0x5834, + 0xB3F6, 0x5824, 0xB3F7, 0x5830, 0xB3F8, 0x5831, 0xB3F9, 0x5821, 0xB3FA, 0x581D, 0xB3FB, 0x5820, 0xB3FC, 0x58F9, 0xB3FD, 0x58FA, + 0xB3FE, 0x5960, 0xB440, 0x5A77, 0xB441, 0x5A9A, 0xB442, 0x5A7F, 0xB443, 0x5A92, 0xB444, 0x5A9B, 0xB445, 0x5AA7, 0xB446, 0x5B73, + 0xB447, 0x5B71, 0xB448, 0x5BD2, 0xB449, 0x5BCC, 0xB44A, 0x5BD3, 0xB44B, 0x5BD0, 0xB44C, 0x5C0A, 0xB44D, 0x5C0B, 0xB44E, 0x5C31, + 0xB44F, 0x5D4C, 0xB450, 0x5D50, 0xB451, 0x5D34, 0xB452, 0x5D47, 0xB453, 0x5DFD, 0xB454, 0x5E45, 0xB455, 0x5E3D, 0xB456, 0x5E40, + 0xB457, 0x5E43, 0xB458, 0x5E7E, 0xB459, 0x5ECA, 0xB45A, 0x5EC1, 0xB45B, 0x5EC2, 0xB45C, 0x5EC4, 0xB45D, 0x5F3C, 0xB45E, 0x5F6D, + 0xB45F, 0x5FA9, 0xB460, 0x5FAA, 0xB461, 0x5FA8, 0xB462, 0x60D1, 0xB463, 0x60E1, 0xB464, 0x60B2, 0xB465, 0x60B6, 0xB466, 0x60E0, + 0xB467, 0x611C, 0xB468, 0x6123, 0xB469, 0x60FA, 0xB46A, 0x6115, 0xB46B, 0x60F0, 0xB46C, 0x60FB, 0xB46D, 0x60F4, 0xB46E, 0x6168, + 0xB46F, 0x60F1, 0xB470, 0x610E, 0xB471, 0x60F6, 0xB472, 0x6109, 0xB473, 0x6100, 0xB474, 0x6112, 0xB475, 0x621F, 0xB476, 0x6249, + 0xB477, 0x63A3, 0xB478, 0x638C, 0xB479, 0x63CF, 0xB47A, 0x63C0, 0xB47B, 0x63E9, 0xB47C, 0x63C9, 0xB47D, 0x63C6, 0xB47E, 0x63CD, + 0xB4A1, 0x63D2, 0xB4A2, 0x63E3, 0xB4A3, 0x63D0, 0xB4A4, 0x63E1, 0xB4A5, 0x63D6, 0xB4A6, 0x63ED, 0xB4A7, 0x63EE, 0xB4A8, 0x6376, + 0xB4A9, 0x63F4, 0xB4AA, 0x63EA, 0xB4AB, 0x63DB, 0xB4AC, 0x6452, 0xB4AD, 0x63DA, 0xB4AE, 0x63F9, 0xB4AF, 0x655E, 0xB4B0, 0x6566, + 0xB4B1, 0x6562, 0xB4B2, 0x6563, 0xB4B3, 0x6591, 0xB4B4, 0x6590, 0xB4B5, 0x65AF, 0xB4B6, 0x666E, 0xB4B7, 0x6670, 0xB4B8, 0x6674, + 0xB4B9, 0x6676, 0xB4BA, 0x666F, 0xB4BB, 0x6691, 0xB4BC, 0x667A, 0xB4BD, 0x667E, 0xB4BE, 0x6677, 0xB4BF, 0x66FE, 0xB4C0, 0x66FF, + 0xB4C1, 0x671F, 0xB4C2, 0x671D, 0xB4C3, 0x68FA, 0xB4C4, 0x68D5, 0xB4C5, 0x68E0, 0xB4C6, 0x68D8, 0xB4C7, 0x68D7, 0xB4C8, 0x6905, + 0xB4C9, 0x68DF, 0xB4CA, 0x68F5, 0xB4CB, 0x68EE, 0xB4CC, 0x68E7, 0xB4CD, 0x68F9, 0xB4CE, 0x68D2, 0xB4CF, 0x68F2, 0xB4D0, 0x68E3, + 0xB4D1, 0x68CB, 0xB4D2, 0x68CD, 0xB4D3, 0x690D, 0xB4D4, 0x6912, 0xB4D5, 0x690E, 0xB4D6, 0x68C9, 0xB4D7, 0x68DA, 0xB4D8, 0x696E, + 0xB4D9, 0x68FB, 0xB4DA, 0x6B3E, 0xB4DB, 0x6B3A, 0xB4DC, 0x6B3D, 0xB4DD, 0x6B98, 0xB4DE, 0x6B96, 0xB4DF, 0x6BBC, 0xB4E0, 0x6BEF, + 0xB4E1, 0x6C2E, 0xB4E2, 0x6C2F, 0xB4E3, 0x6C2C, 0xB4E4, 0x6E2F, 0xB4E5, 0x6E38, 0xB4E6, 0x6E54, 0xB4E7, 0x6E21, 0xB4E8, 0x6E32, + 0xB4E9, 0x6E67, 0xB4EA, 0x6E4A, 0xB4EB, 0x6E20, 0xB4EC, 0x6E25, 0xB4ED, 0x6E23, 0xB4EE, 0x6E1B, 0xB4EF, 0x6E5B, 0xB4F0, 0x6E58, + 0xB4F1, 0x6E24, 0xB4F2, 0x6E56, 0xB4F3, 0x6E6E, 0xB4F4, 0x6E2D, 0xB4F5, 0x6E26, 0xB4F6, 0x6E6F, 0xB4F7, 0x6E34, 0xB4F8, 0x6E4D, + 0xB4F9, 0x6E3A, 0xB4FA, 0x6E2C, 0xB4FB, 0x6E43, 0xB4FC, 0x6E1D, 0xB4FD, 0x6E3E, 0xB4FE, 0x6ECB, 0xB540, 0x6E89, 0xB541, 0x6E19, + 0xB542, 0x6E4E, 0xB543, 0x6E63, 0xB544, 0x6E44, 0xB545, 0x6E72, 0xB546, 0x6E69, 0xB547, 0x6E5F, 0xB548, 0x7119, 0xB549, 0x711A, + 0xB54A, 0x7126, 0xB54B, 0x7130, 0xB54C, 0x7121, 0xB54D, 0x7136, 0xB54E, 0x716E, 0xB54F, 0x711C, 0xB550, 0x724C, 0xB551, 0x7284, + 0xB552, 0x7280, 0xB553, 0x7336, 0xB554, 0x7325, 0xB555, 0x7334, 0xB556, 0x7329, 0xB557, 0x743A, 0xB558, 0x742A, 0xB559, 0x7433, + 0xB55A, 0x7422, 0xB55B, 0x7425, 0xB55C, 0x7435, 0xB55D, 0x7436, 0xB55E, 0x7434, 0xB55F, 0x742F, 0xB560, 0x741B, 0xB561, 0x7426, + 0xB562, 0x7428, 0xB563, 0x7525, 0xB564, 0x7526, 0xB565, 0x756B, 0xB566, 0x756A, 0xB567, 0x75E2, 0xB568, 0x75DB, 0xB569, 0x75E3, + 0xB56A, 0x75D9, 0xB56B, 0x75D8, 0xB56C, 0x75DE, 0xB56D, 0x75E0, 0xB56E, 0x767B, 0xB56F, 0x767C, 0xB570, 0x7696, 0xB571, 0x7693, + 0xB572, 0x76B4, 0xB573, 0x76DC, 0xB574, 0x774F, 0xB575, 0x77ED, 0xB576, 0x785D, 0xB577, 0x786C, 0xB578, 0x786F, 0xB579, 0x7A0D, + 0xB57A, 0x7A08, 0xB57B, 0x7A0B, 0xB57C, 0x7A05, 0xB57D, 0x7A00, 0xB57E, 0x7A98, 0xB5A1, 0x7A97, 0xB5A2, 0x7A96, 0xB5A3, 0x7AE5, + 0xB5A4, 0x7AE3, 0xB5A5, 0x7B49, 0xB5A6, 0x7B56, 0xB5A7, 0x7B46, 0xB5A8, 0x7B50, 0xB5A9, 0x7B52, 0xB5AA, 0x7B54, 0xB5AB, 0x7B4D, + 0xB5AC, 0x7B4B, 0xB5AD, 0x7B4F, 0xB5AE, 0x7B51, 0xB5AF, 0x7C9F, 0xB5B0, 0x7CA5, 0xB5B1, 0x7D5E, 0xB5B2, 0x7D50, 0xB5B3, 0x7D68, + 0xB5B4, 0x7D55, 0xB5B5, 0x7D2B, 0xB5B6, 0x7D6E, 0xB5B7, 0x7D72, 0xB5B8, 0x7D61, 0xB5B9, 0x7D66, 0xB5BA, 0x7D62, 0xB5BB, 0x7D70, + 0xB5BC, 0x7D73, 0xB5BD, 0x5584, 0xB5BE, 0x7FD4, 0xB5BF, 0x7FD5, 0xB5C0, 0x800B, 0xB5C1, 0x8052, 0xB5C2, 0x8085, 0xB5C3, 0x8155, + 0xB5C4, 0x8154, 0xB5C5, 0x814B, 0xB5C6, 0x8151, 0xB5C7, 0x814E, 0xB5C8, 0x8139, 0xB5C9, 0x8146, 0xB5CA, 0x813E, 0xB5CB, 0x814C, + 0xB5CC, 0x8153, 0xB5CD, 0x8174, 0xB5CE, 0x8212, 0xB5CF, 0x821C, 0xB5D0, 0x83E9, 0xB5D1, 0x8403, 0xB5D2, 0x83F8, 0xB5D3, 0x840D, + 0xB5D4, 0x83E0, 0xB5D5, 0x83C5, 0xB5D6, 0x840B, 0xB5D7, 0x83C1, 0xB5D8, 0x83EF, 0xB5D9, 0x83F1, 0xB5DA, 0x83F4, 0xB5DB, 0x8457, + 0xB5DC, 0x840A, 0xB5DD, 0x83F0, 0xB5DE, 0x840C, 0xB5DF, 0x83CC, 0xB5E0, 0x83FD, 0xB5E1, 0x83F2, 0xB5E2, 0x83CA, 0xB5E3, 0x8438, + 0xB5E4, 0x840E, 0xB5E5, 0x8404, 0xB5E6, 0x83DC, 0xB5E7, 0x8407, 0xB5E8, 0x83D4, 0xB5E9, 0x83DF, 0xB5EA, 0x865B, 0xB5EB, 0x86DF, + 0xB5EC, 0x86D9, 0xB5ED, 0x86ED, 0xB5EE, 0x86D4, 0xB5EF, 0x86DB, 0xB5F0, 0x86E4, 0xB5F1, 0x86D0, 0xB5F2, 0x86DE, 0xB5F3, 0x8857, + 0xB5F4, 0x88C1, 0xB5F5, 0x88C2, 0xB5F6, 0x88B1, 0xB5F7, 0x8983, 0xB5F8, 0x8996, 0xB5F9, 0x8A3B, 0xB5FA, 0x8A60, 0xB5FB, 0x8A55, + 0xB5FC, 0x8A5E, 0xB5FD, 0x8A3C, 0xB5FE, 0x8A41, 0xB640, 0x8A54, 0xB641, 0x8A5B, 0xB642, 0x8A50, 0xB643, 0x8A46, 0xB644, 0x8A34, + 0xB645, 0x8A3A, 0xB646, 0x8A36, 0xB647, 0x8A56, 0xB648, 0x8C61, 0xB649, 0x8C82, 0xB64A, 0x8CAF, 0xB64B, 0x8CBC, 0xB64C, 0x8CB3, + 0xB64D, 0x8CBD, 0xB64E, 0x8CC1, 0xB64F, 0x8CBB, 0xB650, 0x8CC0, 0xB651, 0x8CB4, 0xB652, 0x8CB7, 0xB653, 0x8CB6, 0xB654, 0x8CBF, + 0xB655, 0x8CB8, 0xB656, 0x8D8A, 0xB657, 0x8D85, 0xB658, 0x8D81, 0xB659, 0x8DCE, 0xB65A, 0x8DDD, 0xB65B, 0x8DCB, 0xB65C, 0x8DDA, + 0xB65D, 0x8DD1, 0xB65E, 0x8DCC, 0xB65F, 0x8DDB, 0xB660, 0x8DC6, 0xB661, 0x8EFB, 0xB662, 0x8EF8, 0xB663, 0x8EFC, 0xB664, 0x8F9C, + 0xB665, 0x902E, 0xB666, 0x9035, 0xB667, 0x9031, 0xB668, 0x9038, 0xB669, 0x9032, 0xB66A, 0x9036, 0xB66B, 0x9102, 0xB66C, 0x90F5, + 0xB66D, 0x9109, 0xB66E, 0x90FE, 0xB66F, 0x9163, 0xB670, 0x9165, 0xB671, 0x91CF, 0xB672, 0x9214, 0xB673, 0x9215, 0xB674, 0x9223, + 0xB675, 0x9209, 0xB676, 0x921E, 0xB677, 0x920D, 0xB678, 0x9210, 0xB679, 0x9207, 0xB67A, 0x9211, 0xB67B, 0x9594, 0xB67C, 0x958F, + 0xB67D, 0x958B, 0xB67E, 0x9591, 0xB6A1, 0x9593, 0xB6A2, 0x9592, 0xB6A3, 0x958E, 0xB6A4, 0x968A, 0xB6A5, 0x968E, 0xB6A6, 0x968B, + 0xB6A7, 0x967D, 0xB6A8, 0x9685, 0xB6A9, 0x9686, 0xB6AA, 0x968D, 0xB6AB, 0x9672, 0xB6AC, 0x9684, 0xB6AD, 0x96C1, 0xB6AE, 0x96C5, + 0xB6AF, 0x96C4, 0xB6B0, 0x96C6, 0xB6B1, 0x96C7, 0xB6B2, 0x96EF, 0xB6B3, 0x96F2, 0xB6B4, 0x97CC, 0xB6B5, 0x9805, 0xB6B6, 0x9806, + 0xB6B7, 0x9808, 0xB6B8, 0x98E7, 0xB6B9, 0x98EA, 0xB6BA, 0x98EF, 0xB6BB, 0x98E9, 0xB6BC, 0x98F2, 0xB6BD, 0x98ED, 0xB6BE, 0x99AE, + 0xB6BF, 0x99AD, 0xB6C0, 0x9EC3, 0xB6C1, 0x9ECD, 0xB6C2, 0x9ED1, 0xB6C3, 0x4E82, 0xB6C4, 0x50AD, 0xB6C5, 0x50B5, 0xB6C6, 0x50B2, + 0xB6C7, 0x50B3, 0xB6C8, 0x50C5, 0xB6C9, 0x50BE, 0xB6CA, 0x50AC, 0xB6CB, 0x50B7, 0xB6CC, 0x50BB, 0xB6CD, 0x50AF, 0xB6CE, 0x50C7, + 0xB6CF, 0x527F, 0xB6D0, 0x5277, 0xB6D1, 0x527D, 0xB6D2, 0x52DF, 0xB6D3, 0x52E6, 0xB6D4, 0x52E4, 0xB6D5, 0x52E2, 0xB6D6, 0x52E3, + 0xB6D7, 0x532F, 0xB6D8, 0x55DF, 0xB6D9, 0x55E8, 0xB6DA, 0x55D3, 0xB6DB, 0x55E6, 0xB6DC, 0x55CE, 0xB6DD, 0x55DC, 0xB6DE, 0x55C7, + 0xB6DF, 0x55D1, 0xB6E0, 0x55E3, 0xB6E1, 0x55E4, 0xB6E2, 0x55EF, 0xB6E3, 0x55DA, 0xB6E4, 0x55E1, 0xB6E5, 0x55C5, 0xB6E6, 0x55C6, + 0xB6E7, 0x55E5, 0xB6E8, 0x55C9, 0xB6E9, 0x5712, 0xB6EA, 0x5713, 0xB6EB, 0x585E, 0xB6EC, 0x5851, 0xB6ED, 0x5858, 0xB6EE, 0x5857, + 0xB6EF, 0x585A, 0xB6F0, 0x5854, 0xB6F1, 0x586B, 0xB6F2, 0x584C, 0xB6F3, 0x586D, 0xB6F4, 0x584A, 0xB6F5, 0x5862, 0xB6F6, 0x5852, + 0xB6F7, 0x584B, 0xB6F8, 0x5967, 0xB6F9, 0x5AC1, 0xB6FA, 0x5AC9, 0xB6FB, 0x5ACC, 0xB6FC, 0x5ABE, 0xB6FD, 0x5ABD, 0xB6FE, 0x5ABC, + 0xB740, 0x5AB3, 0xB741, 0x5AC2, 0xB742, 0x5AB2, 0xB743, 0x5D69, 0xB744, 0x5D6F, 0xB745, 0x5E4C, 0xB746, 0x5E79, 0xB747, 0x5EC9, + 0xB748, 0x5EC8, 0xB749, 0x5F12, 0xB74A, 0x5F59, 0xB74B, 0x5FAC, 0xB74C, 0x5FAE, 0xB74D, 0x611A, 0xB74E, 0x610F, 0xB74F, 0x6148, + 0xB750, 0x611F, 0xB751, 0x60F3, 0xB752, 0x611B, 0xB753, 0x60F9, 0xB754, 0x6101, 0xB755, 0x6108, 0xB756, 0x614E, 0xB757, 0x614C, + 0xB758, 0x6144, 0xB759, 0x614D, 0xB75A, 0x613E, 0xB75B, 0x6134, 0xB75C, 0x6127, 0xB75D, 0x610D, 0xB75E, 0x6106, 0xB75F, 0x6137, + 0xB760, 0x6221, 0xB761, 0x6222, 0xB762, 0x6413, 0xB763, 0x643E, 0xB764, 0x641E, 0xB765, 0x642A, 0xB766, 0x642D, 0xB767, 0x643D, + 0xB768, 0x642C, 0xB769, 0x640F, 0xB76A, 0x641C, 0xB76B, 0x6414, 0xB76C, 0x640D, 0xB76D, 0x6436, 0xB76E, 0x6416, 0xB76F, 0x6417, + 0xB770, 0x6406, 0xB771, 0x656C, 0xB772, 0x659F, 0xB773, 0x65B0, 0xB774, 0x6697, 0xB775, 0x6689, 0xB776, 0x6687, 0xB777, 0x6688, + 0xB778, 0x6696, 0xB779, 0x6684, 0xB77A, 0x6698, 0xB77B, 0x668D, 0xB77C, 0x6703, 0xB77D, 0x6994, 0xB77E, 0x696D, 0xB7A1, 0x695A, + 0xB7A2, 0x6977, 0xB7A3, 0x6960, 0xB7A4, 0x6954, 0xB7A5, 0x6975, 0xB7A6, 0x6930, 0xB7A7, 0x6982, 0xB7A8, 0x694A, 0xB7A9, 0x6968, + 0xB7AA, 0x696B, 0xB7AB, 0x695E, 0xB7AC, 0x6953, 0xB7AD, 0x6979, 0xB7AE, 0x6986, 0xB7AF, 0x695D, 0xB7B0, 0x6963, 0xB7B1, 0x695B, + 0xB7B2, 0x6B47, 0xB7B3, 0x6B72, 0xB7B4, 0x6BC0, 0xB7B5, 0x6BBF, 0xB7B6, 0x6BD3, 0xB7B7, 0x6BFD, 0xB7B8, 0x6EA2, 0xB7B9, 0x6EAF, + 0xB7BA, 0x6ED3, 0xB7BB, 0x6EB6, 0xB7BC, 0x6EC2, 0xB7BD, 0x6E90, 0xB7BE, 0x6E9D, 0xB7BF, 0x6EC7, 0xB7C0, 0x6EC5, 0xB7C1, 0x6EA5, + 0xB7C2, 0x6E98, 0xB7C3, 0x6EBC, 0xB7C4, 0x6EBA, 0xB7C5, 0x6EAB, 0xB7C6, 0x6ED1, 0xB7C7, 0x6E96, 0xB7C8, 0x6E9C, 0xB7C9, 0x6EC4, + 0xB7CA, 0x6ED4, 0xB7CB, 0x6EAA, 0xB7CC, 0x6EA7, 0xB7CD, 0x6EB4, 0xB7CE, 0x714E, 0xB7CF, 0x7159, 0xB7D0, 0x7169, 0xB7D1, 0x7164, + 0xB7D2, 0x7149, 0xB7D3, 0x7167, 0xB7D4, 0x715C, 0xB7D5, 0x716C, 0xB7D6, 0x7166, 0xB7D7, 0x714C, 0xB7D8, 0x7165, 0xB7D9, 0x715E, + 0xB7DA, 0x7146, 0xB7DB, 0x7168, 0xB7DC, 0x7156, 0xB7DD, 0x723A, 0xB7DE, 0x7252, 0xB7DF, 0x7337, 0xB7E0, 0x7345, 0xB7E1, 0x733F, + 0xB7E2, 0x733E, 0xB7E3, 0x746F, 0xB7E4, 0x745A, 0xB7E5, 0x7455, 0xB7E6, 0x745F, 0xB7E7, 0x745E, 0xB7E8, 0x7441, 0xB7E9, 0x743F, + 0xB7EA, 0x7459, 0xB7EB, 0x745B, 0xB7EC, 0x745C, 0xB7ED, 0x7576, 0xB7EE, 0x7578, 0xB7EF, 0x7600, 0xB7F0, 0x75F0, 0xB7F1, 0x7601, + 0xB7F2, 0x75F2, 0xB7F3, 0x75F1, 0xB7F4, 0x75FA, 0xB7F5, 0x75FF, 0xB7F6, 0x75F4, 0xB7F7, 0x75F3, 0xB7F8, 0x76DE, 0xB7F9, 0x76DF, + 0xB7FA, 0x775B, 0xB7FB, 0x776B, 0xB7FC, 0x7766, 0xB7FD, 0x775E, 0xB7FE, 0x7763, 0xB840, 0x7779, 0xB841, 0x776A, 0xB842, 0x776C, + 0xB843, 0x775C, 0xB844, 0x7765, 0xB845, 0x7768, 0xB846, 0x7762, 0xB847, 0x77EE, 0xB848, 0x788E, 0xB849, 0x78B0, 0xB84A, 0x7897, + 0xB84B, 0x7898, 0xB84C, 0x788C, 0xB84D, 0x7889, 0xB84E, 0x787C, 0xB84F, 0x7891, 0xB850, 0x7893, 0xB851, 0x787F, 0xB852, 0x797A, + 0xB853, 0x797F, 0xB854, 0x7981, 0xB855, 0x842C, 0xB856, 0x79BD, 0xB857, 0x7A1C, 0xB858, 0x7A1A, 0xB859, 0x7A20, 0xB85A, 0x7A14, + 0xB85B, 0x7A1F, 0xB85C, 0x7A1E, 0xB85D, 0x7A9F, 0xB85E, 0x7AA0, 0xB85F, 0x7B77, 0xB860, 0x7BC0, 0xB861, 0x7B60, 0xB862, 0x7B6E, + 0xB863, 0x7B67, 0xB864, 0x7CB1, 0xB865, 0x7CB3, 0xB866, 0x7CB5, 0xB867, 0x7D93, 0xB868, 0x7D79, 0xB869, 0x7D91, 0xB86A, 0x7D81, + 0xB86B, 0x7D8F, 0xB86C, 0x7D5B, 0xB86D, 0x7F6E, 0xB86E, 0x7F69, 0xB86F, 0x7F6A, 0xB870, 0x7F72, 0xB871, 0x7FA9, 0xB872, 0x7FA8, + 0xB873, 0x7FA4, 0xB874, 0x8056, 0xB875, 0x8058, 0xB876, 0x8086, 0xB877, 0x8084, 0xB878, 0x8171, 0xB879, 0x8170, 0xB87A, 0x8178, + 0xB87B, 0x8165, 0xB87C, 0x816E, 0xB87D, 0x8173, 0xB87E, 0x816B, 0xB8A1, 0x8179, 0xB8A2, 0x817A, 0xB8A3, 0x8166, 0xB8A4, 0x8205, + 0xB8A5, 0x8247, 0xB8A6, 0x8482, 0xB8A7, 0x8477, 0xB8A8, 0x843D, 0xB8A9, 0x8431, 0xB8AA, 0x8475, 0xB8AB, 0x8466, 0xB8AC, 0x846B, + 0xB8AD, 0x8449, 0xB8AE, 0x846C, 0xB8AF, 0x845B, 0xB8B0, 0x843C, 0xB8B1, 0x8435, 0xB8B2, 0x8461, 0xB8B3, 0x8463, 0xB8B4, 0x8469, + 0xB8B5, 0x846D, 0xB8B6, 0x8446, 0xB8B7, 0x865E, 0xB8B8, 0x865C, 0xB8B9, 0x865F, 0xB8BA, 0x86F9, 0xB8BB, 0x8713, 0xB8BC, 0x8708, + 0xB8BD, 0x8707, 0xB8BE, 0x8700, 0xB8BF, 0x86FE, 0xB8C0, 0x86FB, 0xB8C1, 0x8702, 0xB8C2, 0x8703, 0xB8C3, 0x8706, 0xB8C4, 0x870A, + 0xB8C5, 0x8859, 0xB8C6, 0x88DF, 0xB8C7, 0x88D4, 0xB8C8, 0x88D9, 0xB8C9, 0x88DC, 0xB8CA, 0x88D8, 0xB8CB, 0x88DD, 0xB8CC, 0x88E1, + 0xB8CD, 0x88CA, 0xB8CE, 0x88D5, 0xB8CF, 0x88D2, 0xB8D0, 0x899C, 0xB8D1, 0x89E3, 0xB8D2, 0x8A6B, 0xB8D3, 0x8A72, 0xB8D4, 0x8A73, + 0xB8D5, 0x8A66, 0xB8D6, 0x8A69, 0xB8D7, 0x8A70, 0xB8D8, 0x8A87, 0xB8D9, 0x8A7C, 0xB8DA, 0x8A63, 0xB8DB, 0x8AA0, 0xB8DC, 0x8A71, + 0xB8DD, 0x8A85, 0xB8DE, 0x8A6D, 0xB8DF, 0x8A62, 0xB8E0, 0x8A6E, 0xB8E1, 0x8A6C, 0xB8E2, 0x8A79, 0xB8E3, 0x8A7B, 0xB8E4, 0x8A3E, + 0xB8E5, 0x8A68, 0xB8E6, 0x8C62, 0xB8E7, 0x8C8A, 0xB8E8, 0x8C89, 0xB8E9, 0x8CCA, 0xB8EA, 0x8CC7, 0xB8EB, 0x8CC8, 0xB8EC, 0x8CC4, + 0xB8ED, 0x8CB2, 0xB8EE, 0x8CC3, 0xB8EF, 0x8CC2, 0xB8F0, 0x8CC5, 0xB8F1, 0x8DE1, 0xB8F2, 0x8DDF, 0xB8F3, 0x8DE8, 0xB8F4, 0x8DEF, + 0xB8F5, 0x8DF3, 0xB8F6, 0x8DFA, 0xB8F7, 0x8DEA, 0xB8F8, 0x8DE4, 0xB8F9, 0x8DE6, 0xB8FA, 0x8EB2, 0xB8FB, 0x8F03, 0xB8FC, 0x8F09, + 0xB8FD, 0x8EFE, 0xB8FE, 0x8F0A, 0xB940, 0x8F9F, 0xB941, 0x8FB2, 0xB942, 0x904B, 0xB943, 0x904A, 0xB944, 0x9053, 0xB945, 0x9042, + 0xB946, 0x9054, 0xB947, 0x903C, 0xB948, 0x9055, 0xB949, 0x9050, 0xB94A, 0x9047, 0xB94B, 0x904F, 0xB94C, 0x904E, 0xB94D, 0x904D, + 0xB94E, 0x9051, 0xB94F, 0x903E, 0xB950, 0x9041, 0xB951, 0x9112, 0xB952, 0x9117, 0xB953, 0x916C, 0xB954, 0x916A, 0xB955, 0x9169, + 0xB956, 0x91C9, 0xB957, 0x9237, 0xB958, 0x9257, 0xB959, 0x9238, 0xB95A, 0x923D, 0xB95B, 0x9240, 0xB95C, 0x923E, 0xB95D, 0x925B, + 0xB95E, 0x924B, 0xB95F, 0x9264, 0xB960, 0x9251, 0xB961, 0x9234, 0xB962, 0x9249, 0xB963, 0x924D, 0xB964, 0x9245, 0xB965, 0x9239, + 0xB966, 0x923F, 0xB967, 0x925A, 0xB968, 0x9598, 0xB969, 0x9698, 0xB96A, 0x9694, 0xB96B, 0x9695, 0xB96C, 0x96CD, 0xB96D, 0x96CB, + 0xB96E, 0x96C9, 0xB96F, 0x96CA, 0xB970, 0x96F7, 0xB971, 0x96FB, 0xB972, 0x96F9, 0xB973, 0x96F6, 0xB974, 0x9756, 0xB975, 0x9774, + 0xB976, 0x9776, 0xB977, 0x9810, 0xB978, 0x9811, 0xB979, 0x9813, 0xB97A, 0x980A, 0xB97B, 0x9812, 0xB97C, 0x980C, 0xB97D, 0x98FC, + 0xB97E, 0x98F4, 0xB9A1, 0x98FD, 0xB9A2, 0x98FE, 0xB9A3, 0x99B3, 0xB9A4, 0x99B1, 0xB9A5, 0x99B4, 0xB9A6, 0x9AE1, 0xB9A7, 0x9CE9, + 0xB9A8, 0x9E82, 0xB9A9, 0x9F0E, 0xB9AA, 0x9F13, 0xB9AB, 0x9F20, 0xB9AC, 0x50E7, 0xB9AD, 0x50EE, 0xB9AE, 0x50E5, 0xB9AF, 0x50D6, + 0xB9B0, 0x50ED, 0xB9B1, 0x50DA, 0xB9B2, 0x50D5, 0xB9B3, 0x50CF, 0xB9B4, 0x50D1, 0xB9B5, 0x50F1, 0xB9B6, 0x50CE, 0xB9B7, 0x50E9, + 0xB9B8, 0x5162, 0xB9B9, 0x51F3, 0xB9BA, 0x5283, 0xB9BB, 0x5282, 0xB9BC, 0x5331, 0xB9BD, 0x53AD, 0xB9BE, 0x55FE, 0xB9BF, 0x5600, + 0xB9C0, 0x561B, 0xB9C1, 0x5617, 0xB9C2, 0x55FD, 0xB9C3, 0x5614, 0xB9C4, 0x5606, 0xB9C5, 0x5609, 0xB9C6, 0x560D, 0xB9C7, 0x560E, + 0xB9C8, 0x55F7, 0xB9C9, 0x5616, 0xB9CA, 0x561F, 0xB9CB, 0x5608, 0xB9CC, 0x5610, 0xB9CD, 0x55F6, 0xB9CE, 0x5718, 0xB9CF, 0x5716, + 0xB9D0, 0x5875, 0xB9D1, 0x587E, 0xB9D2, 0x5883, 0xB9D3, 0x5893, 0xB9D4, 0x588A, 0xB9D5, 0x5879, 0xB9D6, 0x5885, 0xB9D7, 0x587D, + 0xB9D8, 0x58FD, 0xB9D9, 0x5925, 0xB9DA, 0x5922, 0xB9DB, 0x5924, 0xB9DC, 0x596A, 0xB9DD, 0x5969, 0xB9DE, 0x5AE1, 0xB9DF, 0x5AE6, + 0xB9E0, 0x5AE9, 0xB9E1, 0x5AD7, 0xB9E2, 0x5AD6, 0xB9E3, 0x5AD8, 0xB9E4, 0x5AE3, 0xB9E5, 0x5B75, 0xB9E6, 0x5BDE, 0xB9E7, 0x5BE7, + 0xB9E8, 0x5BE1, 0xB9E9, 0x5BE5, 0xB9EA, 0x5BE6, 0xB9EB, 0x5BE8, 0xB9EC, 0x5BE2, 0xB9ED, 0x5BE4, 0xB9EE, 0x5BDF, 0xB9EF, 0x5C0D, + 0xB9F0, 0x5C62, 0xB9F1, 0x5D84, 0xB9F2, 0x5D87, 0xB9F3, 0x5E5B, 0xB9F4, 0x5E63, 0xB9F5, 0x5E55, 0xB9F6, 0x5E57, 0xB9F7, 0x5E54, + 0xB9F8, 0x5ED3, 0xB9F9, 0x5ED6, 0xB9FA, 0x5F0A, 0xB9FB, 0x5F46, 0xB9FC, 0x5F70, 0xB9FD, 0x5FB9, 0xB9FE, 0x6147, 0xBA40, 0x613F, + 0xBA41, 0x614B, 0xBA42, 0x6177, 0xBA43, 0x6162, 0xBA44, 0x6163, 0xBA45, 0x615F, 0xBA46, 0x615A, 0xBA47, 0x6158, 0xBA48, 0x6175, + 0xBA49, 0x622A, 0xBA4A, 0x6487, 0xBA4B, 0x6458, 0xBA4C, 0x6454, 0xBA4D, 0x64A4, 0xBA4E, 0x6478, 0xBA4F, 0x645F, 0xBA50, 0x647A, + 0xBA51, 0x6451, 0xBA52, 0x6467, 0xBA53, 0x6434, 0xBA54, 0x646D, 0xBA55, 0x647B, 0xBA56, 0x6572, 0xBA57, 0x65A1, 0xBA58, 0x65D7, + 0xBA59, 0x65D6, 0xBA5A, 0x66A2, 0xBA5B, 0x66A8, 0xBA5C, 0x669D, 0xBA5D, 0x699C, 0xBA5E, 0x69A8, 0xBA5F, 0x6995, 0xBA60, 0x69C1, + 0xBA61, 0x69AE, 0xBA62, 0x69D3, 0xBA63, 0x69CB, 0xBA64, 0x699B, 0xBA65, 0x69B7, 0xBA66, 0x69BB, 0xBA67, 0x69AB, 0xBA68, 0x69B4, + 0xBA69, 0x69D0, 0xBA6A, 0x69CD, 0xBA6B, 0x69AD, 0xBA6C, 0x69CC, 0xBA6D, 0x69A6, 0xBA6E, 0x69C3, 0xBA6F, 0x69A3, 0xBA70, 0x6B49, + 0xBA71, 0x6B4C, 0xBA72, 0x6C33, 0xBA73, 0x6F33, 0xBA74, 0x6F14, 0xBA75, 0x6EFE, 0xBA76, 0x6F13, 0xBA77, 0x6EF4, 0xBA78, 0x6F29, + 0xBA79, 0x6F3E, 0xBA7A, 0x6F20, 0xBA7B, 0x6F2C, 0xBA7C, 0x6F0F, 0xBA7D, 0x6F02, 0xBA7E, 0x6F22, 0xBAA1, 0x6EFF, 0xBAA2, 0x6EEF, + 0xBAA3, 0x6F06, 0xBAA4, 0x6F31, 0xBAA5, 0x6F38, 0xBAA6, 0x6F32, 0xBAA7, 0x6F23, 0xBAA8, 0x6F15, 0xBAA9, 0x6F2B, 0xBAAA, 0x6F2F, + 0xBAAB, 0x6F88, 0xBAAC, 0x6F2A, 0xBAAD, 0x6EEC, 0xBAAE, 0x6F01, 0xBAAF, 0x6EF2, 0xBAB0, 0x6ECC, 0xBAB1, 0x6EF7, 0xBAB2, 0x7194, + 0xBAB3, 0x7199, 0xBAB4, 0x717D, 0xBAB5, 0x718A, 0xBAB6, 0x7184, 0xBAB7, 0x7192, 0xBAB8, 0x723E, 0xBAB9, 0x7292, 0xBABA, 0x7296, + 0xBABB, 0x7344, 0xBABC, 0x7350, 0xBABD, 0x7464, 0xBABE, 0x7463, 0xBABF, 0x746A, 0xBAC0, 0x7470, 0xBAC1, 0x746D, 0xBAC2, 0x7504, + 0xBAC3, 0x7591, 0xBAC4, 0x7627, 0xBAC5, 0x760D, 0xBAC6, 0x760B, 0xBAC7, 0x7609, 0xBAC8, 0x7613, 0xBAC9, 0x76E1, 0xBACA, 0x76E3, + 0xBACB, 0x7784, 0xBACC, 0x777D, 0xBACD, 0x777F, 0xBACE, 0x7761, 0xBACF, 0x78C1, 0xBAD0, 0x789F, 0xBAD1, 0x78A7, 0xBAD2, 0x78B3, + 0xBAD3, 0x78A9, 0xBAD4, 0x78A3, 0xBAD5, 0x798E, 0xBAD6, 0x798F, 0xBAD7, 0x798D, 0xBAD8, 0x7A2E, 0xBAD9, 0x7A31, 0xBADA, 0x7AAA, + 0xBADB, 0x7AA9, 0xBADC, 0x7AED, 0xBADD, 0x7AEF, 0xBADE, 0x7BA1, 0xBADF, 0x7B95, 0xBAE0, 0x7B8B, 0xBAE1, 0x7B75, 0xBAE2, 0x7B97, + 0xBAE3, 0x7B9D, 0xBAE4, 0x7B94, 0xBAE5, 0x7B8F, 0xBAE6, 0x7BB8, 0xBAE7, 0x7B87, 0xBAE8, 0x7B84, 0xBAE9, 0x7CB9, 0xBAEA, 0x7CBD, + 0xBAEB, 0x7CBE, 0xBAEC, 0x7DBB, 0xBAED, 0x7DB0, 0xBAEE, 0x7D9C, 0xBAEF, 0x7DBD, 0xBAF0, 0x7DBE, 0xBAF1, 0x7DA0, 0xBAF2, 0x7DCA, + 0xBAF3, 0x7DB4, 0xBAF4, 0x7DB2, 0xBAF5, 0x7DB1, 0xBAF6, 0x7DBA, 0xBAF7, 0x7DA2, 0xBAF8, 0x7DBF, 0xBAF9, 0x7DB5, 0xBAFA, 0x7DB8, + 0xBAFB, 0x7DAD, 0xBAFC, 0x7DD2, 0xBAFD, 0x7DC7, 0xBAFE, 0x7DAC, 0xBB40, 0x7F70, 0xBB41, 0x7FE0, 0xBB42, 0x7FE1, 0xBB43, 0x7FDF, + 0xBB44, 0x805E, 0xBB45, 0x805A, 0xBB46, 0x8087, 0xBB47, 0x8150, 0xBB48, 0x8180, 0xBB49, 0x818F, 0xBB4A, 0x8188, 0xBB4B, 0x818A, + 0xBB4C, 0x817F, 0xBB4D, 0x8182, 0xBB4E, 0x81E7, 0xBB4F, 0x81FA, 0xBB50, 0x8207, 0xBB51, 0x8214, 0xBB52, 0x821E, 0xBB53, 0x824B, + 0xBB54, 0x84C9, 0xBB55, 0x84BF, 0xBB56, 0x84C6, 0xBB57, 0x84C4, 0xBB58, 0x8499, 0xBB59, 0x849E, 0xBB5A, 0x84B2, 0xBB5B, 0x849C, + 0xBB5C, 0x84CB, 0xBB5D, 0x84B8, 0xBB5E, 0x84C0, 0xBB5F, 0x84D3, 0xBB60, 0x8490, 0xBB61, 0x84BC, 0xBB62, 0x84D1, 0xBB63, 0x84CA, + 0xBB64, 0x873F, 0xBB65, 0x871C, 0xBB66, 0x873B, 0xBB67, 0x8722, 0xBB68, 0x8725, 0xBB69, 0x8734, 0xBB6A, 0x8718, 0xBB6B, 0x8755, + 0xBB6C, 0x8737, 0xBB6D, 0x8729, 0xBB6E, 0x88F3, 0xBB6F, 0x8902, 0xBB70, 0x88F4, 0xBB71, 0x88F9, 0xBB72, 0x88F8, 0xBB73, 0x88FD, + 0xBB74, 0x88E8, 0xBB75, 0x891A, 0xBB76, 0x88EF, 0xBB77, 0x8AA6, 0xBB78, 0x8A8C, 0xBB79, 0x8A9E, 0xBB7A, 0x8AA3, 0xBB7B, 0x8A8D, + 0xBB7C, 0x8AA1, 0xBB7D, 0x8A93, 0xBB7E, 0x8AA4, 0xBBA1, 0x8AAA, 0xBBA2, 0x8AA5, 0xBBA3, 0x8AA8, 0xBBA4, 0x8A98, 0xBBA5, 0x8A91, + 0xBBA6, 0x8A9A, 0xBBA7, 0x8AA7, 0xBBA8, 0x8C6A, 0xBBA9, 0x8C8D, 0xBBAA, 0x8C8C, 0xBBAB, 0x8CD3, 0xBBAC, 0x8CD1, 0xBBAD, 0x8CD2, + 0xBBAE, 0x8D6B, 0xBBAF, 0x8D99, 0xBBB0, 0x8D95, 0xBBB1, 0x8DFC, 0xBBB2, 0x8F14, 0xBBB3, 0x8F12, 0xBBB4, 0x8F15, 0xBBB5, 0x8F13, + 0xBBB6, 0x8FA3, 0xBBB7, 0x9060, 0xBBB8, 0x9058, 0xBBB9, 0x905C, 0xBBBA, 0x9063, 0xBBBB, 0x9059, 0xBBBC, 0x905E, 0xBBBD, 0x9062, + 0xBBBE, 0x905D, 0xBBBF, 0x905B, 0xBBC0, 0x9119, 0xBBC1, 0x9118, 0xBBC2, 0x911E, 0xBBC3, 0x9175, 0xBBC4, 0x9178, 0xBBC5, 0x9177, + 0xBBC6, 0x9174, 0xBBC7, 0x9278, 0xBBC8, 0x9280, 0xBBC9, 0x9285, 0xBBCA, 0x9298, 0xBBCB, 0x9296, 0xBBCC, 0x927B, 0xBBCD, 0x9293, + 0xBBCE, 0x929C, 0xBBCF, 0x92A8, 0xBBD0, 0x927C, 0xBBD1, 0x9291, 0xBBD2, 0x95A1, 0xBBD3, 0x95A8, 0xBBD4, 0x95A9, 0xBBD5, 0x95A3, + 0xBBD6, 0x95A5, 0xBBD7, 0x95A4, 0xBBD8, 0x9699, 0xBBD9, 0x969C, 0xBBDA, 0x969B, 0xBBDB, 0x96CC, 0xBBDC, 0x96D2, 0xBBDD, 0x9700, + 0xBBDE, 0x977C, 0xBBDF, 0x9785, 0xBBE0, 0x97F6, 0xBBE1, 0x9817, 0xBBE2, 0x9818, 0xBBE3, 0x98AF, 0xBBE4, 0x98B1, 0xBBE5, 0x9903, + 0xBBE6, 0x9905, 0xBBE7, 0x990C, 0xBBE8, 0x9909, 0xBBE9, 0x99C1, 0xBBEA, 0x9AAF, 0xBBEB, 0x9AB0, 0xBBEC, 0x9AE6, 0xBBED, 0x9B41, + 0xBBEE, 0x9B42, 0xBBEF, 0x9CF4, 0xBBF0, 0x9CF6, 0xBBF1, 0x9CF3, 0xBBF2, 0x9EBC, 0xBBF3, 0x9F3B, 0xBBF4, 0x9F4A, 0xBBF5, 0x5104, + 0xBBF6, 0x5100, 0xBBF7, 0x50FB, 0xBBF8, 0x50F5, 0xBBF9, 0x50F9, 0xBBFA, 0x5102, 0xBBFB, 0x5108, 0xBBFC, 0x5109, 0xBBFD, 0x5105, + 0xBBFE, 0x51DC, 0xBC40, 0x5287, 0xBC41, 0x5288, 0xBC42, 0x5289, 0xBC43, 0x528D, 0xBC44, 0x528A, 0xBC45, 0x52F0, 0xBC46, 0x53B2, + 0xBC47, 0x562E, 0xBC48, 0x563B, 0xBC49, 0x5639, 0xBC4A, 0x5632, 0xBC4B, 0x563F, 0xBC4C, 0x5634, 0xBC4D, 0x5629, 0xBC4E, 0x5653, + 0xBC4F, 0x564E, 0xBC50, 0x5657, 0xBC51, 0x5674, 0xBC52, 0x5636, 0xBC53, 0x562F, 0xBC54, 0x5630, 0xBC55, 0x5880, 0xBC56, 0x589F, + 0xBC57, 0x589E, 0xBC58, 0x58B3, 0xBC59, 0x589C, 0xBC5A, 0x58AE, 0xBC5B, 0x58A9, 0xBC5C, 0x58A6, 0xBC5D, 0x596D, 0xBC5E, 0x5B09, + 0xBC5F, 0x5AFB, 0xBC60, 0x5B0B, 0xBC61, 0x5AF5, 0xBC62, 0x5B0C, 0xBC63, 0x5B08, 0xBC64, 0x5BEE, 0xBC65, 0x5BEC, 0xBC66, 0x5BE9, + 0xBC67, 0x5BEB, 0xBC68, 0x5C64, 0xBC69, 0x5C65, 0xBC6A, 0x5D9D, 0xBC6B, 0x5D94, 0xBC6C, 0x5E62, 0xBC6D, 0x5E5F, 0xBC6E, 0x5E61, + 0xBC6F, 0x5EE2, 0xBC70, 0x5EDA, 0xBC71, 0x5EDF, 0xBC72, 0x5EDD, 0xBC73, 0x5EE3, 0xBC74, 0x5EE0, 0xBC75, 0x5F48, 0xBC76, 0x5F71, + 0xBC77, 0x5FB7, 0xBC78, 0x5FB5, 0xBC79, 0x6176, 0xBC7A, 0x6167, 0xBC7B, 0x616E, 0xBC7C, 0x615D, 0xBC7D, 0x6155, 0xBC7E, 0x6182, + 0xBCA1, 0x617C, 0xBCA2, 0x6170, 0xBCA3, 0x616B, 0xBCA4, 0x617E, 0xBCA5, 0x61A7, 0xBCA6, 0x6190, 0xBCA7, 0x61AB, 0xBCA8, 0x618E, + 0xBCA9, 0x61AC, 0xBCAA, 0x619A, 0xBCAB, 0x61A4, 0xBCAC, 0x6194, 0xBCAD, 0x61AE, 0xBCAE, 0x622E, 0xBCAF, 0x6469, 0xBCB0, 0x646F, + 0xBCB1, 0x6479, 0xBCB2, 0x649E, 0xBCB3, 0x64B2, 0xBCB4, 0x6488, 0xBCB5, 0x6490, 0xBCB6, 0x64B0, 0xBCB7, 0x64A5, 0xBCB8, 0x6493, + 0xBCB9, 0x6495, 0xBCBA, 0x64A9, 0xBCBB, 0x6492, 0xBCBC, 0x64AE, 0xBCBD, 0x64AD, 0xBCBE, 0x64AB, 0xBCBF, 0x649A, 0xBCC0, 0x64AC, + 0xBCC1, 0x6499, 0xBCC2, 0x64A2, 0xBCC3, 0x64B3, 0xBCC4, 0x6575, 0xBCC5, 0x6577, 0xBCC6, 0x6578, 0xBCC7, 0x66AE, 0xBCC8, 0x66AB, + 0xBCC9, 0x66B4, 0xBCCA, 0x66B1, 0xBCCB, 0x6A23, 0xBCCC, 0x6A1F, 0xBCCD, 0x69E8, 0xBCCE, 0x6A01, 0xBCCF, 0x6A1E, 0xBCD0, 0x6A19, + 0xBCD1, 0x69FD, 0xBCD2, 0x6A21, 0xBCD3, 0x6A13, 0xBCD4, 0x6A0A, 0xBCD5, 0x69F3, 0xBCD6, 0x6A02, 0xBCD7, 0x6A05, 0xBCD8, 0x69ED, + 0xBCD9, 0x6A11, 0xBCDA, 0x6B50, 0xBCDB, 0x6B4E, 0xBCDC, 0x6BA4, 0xBCDD, 0x6BC5, 0xBCDE, 0x6BC6, 0xBCDF, 0x6F3F, 0xBCE0, 0x6F7C, + 0xBCE1, 0x6F84, 0xBCE2, 0x6F51, 0xBCE3, 0x6F66, 0xBCE4, 0x6F54, 0xBCE5, 0x6F86, 0xBCE6, 0x6F6D, 0xBCE7, 0x6F5B, 0xBCE8, 0x6F78, + 0xBCE9, 0x6F6E, 0xBCEA, 0x6F8E, 0xBCEB, 0x6F7A, 0xBCEC, 0x6F70, 0xBCED, 0x6F64, 0xBCEE, 0x6F97, 0xBCEF, 0x6F58, 0xBCF0, 0x6ED5, + 0xBCF1, 0x6F6F, 0xBCF2, 0x6F60, 0xBCF3, 0x6F5F, 0xBCF4, 0x719F, 0xBCF5, 0x71AC, 0xBCF6, 0x71B1, 0xBCF7, 0x71A8, 0xBCF8, 0x7256, + 0xBCF9, 0x729B, 0xBCFA, 0x734E, 0xBCFB, 0x7357, 0xBCFC, 0x7469, 0xBCFD, 0x748B, 0xBCFE, 0x7483, 0xBD40, 0x747E, 0xBD41, 0x7480, + 0xBD42, 0x757F, 0xBD43, 0x7620, 0xBD44, 0x7629, 0xBD45, 0x761F, 0xBD46, 0x7624, 0xBD47, 0x7626, 0xBD48, 0x7621, 0xBD49, 0x7622, + 0xBD4A, 0x769A, 0xBD4B, 0x76BA, 0xBD4C, 0x76E4, 0xBD4D, 0x778E, 0xBD4E, 0x7787, 0xBD4F, 0x778C, 0xBD50, 0x7791, 0xBD51, 0x778B, + 0xBD52, 0x78CB, 0xBD53, 0x78C5, 0xBD54, 0x78BA, 0xBD55, 0x78CA, 0xBD56, 0x78BE, 0xBD57, 0x78D5, 0xBD58, 0x78BC, 0xBD59, 0x78D0, + 0xBD5A, 0x7A3F, 0xBD5B, 0x7A3C, 0xBD5C, 0x7A40, 0xBD5D, 0x7A3D, 0xBD5E, 0x7A37, 0xBD5F, 0x7A3B, 0xBD60, 0x7AAF, 0xBD61, 0x7AAE, + 0xBD62, 0x7BAD, 0xBD63, 0x7BB1, 0xBD64, 0x7BC4, 0xBD65, 0x7BB4, 0xBD66, 0x7BC6, 0xBD67, 0x7BC7, 0xBD68, 0x7BC1, 0xBD69, 0x7BA0, + 0xBD6A, 0x7BCC, 0xBD6B, 0x7CCA, 0xBD6C, 0x7DE0, 0xBD6D, 0x7DF4, 0xBD6E, 0x7DEF, 0xBD6F, 0x7DFB, 0xBD70, 0x7DD8, 0xBD71, 0x7DEC, + 0xBD72, 0x7DDD, 0xBD73, 0x7DE8, 0xBD74, 0x7DE3, 0xBD75, 0x7DDA, 0xBD76, 0x7DDE, 0xBD77, 0x7DE9, 0xBD78, 0x7D9E, 0xBD79, 0x7DD9, + 0xBD7A, 0x7DF2, 0xBD7B, 0x7DF9, 0xBD7C, 0x7F75, 0xBD7D, 0x7F77, 0xBD7E, 0x7FAF, 0xBDA1, 0x7FE9, 0xBDA2, 0x8026, 0xBDA3, 0x819B, + 0xBDA4, 0x819C, 0xBDA5, 0x819D, 0xBDA6, 0x81A0, 0xBDA7, 0x819A, 0xBDA8, 0x8198, 0xBDA9, 0x8517, 0xBDAA, 0x853D, 0xBDAB, 0x851A, + 0xBDAC, 0x84EE, 0xBDAD, 0x852C, 0xBDAE, 0x852D, 0xBDAF, 0x8513, 0xBDB0, 0x8511, 0xBDB1, 0x8523, 0xBDB2, 0x8521, 0xBDB3, 0x8514, + 0xBDB4, 0x84EC, 0xBDB5, 0x8525, 0xBDB6, 0x84FF, 0xBDB7, 0x8506, 0xBDB8, 0x8782, 0xBDB9, 0x8774, 0xBDBA, 0x8776, 0xBDBB, 0x8760, + 0xBDBC, 0x8766, 0xBDBD, 0x8778, 0xBDBE, 0x8768, 0xBDBF, 0x8759, 0xBDC0, 0x8757, 0xBDC1, 0x874C, 0xBDC2, 0x8753, 0xBDC3, 0x885B, + 0xBDC4, 0x885D, 0xBDC5, 0x8910, 0xBDC6, 0x8907, 0xBDC7, 0x8912, 0xBDC8, 0x8913, 0xBDC9, 0x8915, 0xBDCA, 0x890A, 0xBDCB, 0x8ABC, + 0xBDCC, 0x8AD2, 0xBDCD, 0x8AC7, 0xBDCE, 0x8AC4, 0xBDCF, 0x8A95, 0xBDD0, 0x8ACB, 0xBDD1, 0x8AF8, 0xBDD2, 0x8AB2, 0xBDD3, 0x8AC9, + 0xBDD4, 0x8AC2, 0xBDD5, 0x8ABF, 0xBDD6, 0x8AB0, 0xBDD7, 0x8AD6, 0xBDD8, 0x8ACD, 0xBDD9, 0x8AB6, 0xBDDA, 0x8AB9, 0xBDDB, 0x8ADB, + 0xBDDC, 0x8C4C, 0xBDDD, 0x8C4E, 0xBDDE, 0x8C6C, 0xBDDF, 0x8CE0, 0xBDE0, 0x8CDE, 0xBDE1, 0x8CE6, 0xBDE2, 0x8CE4, 0xBDE3, 0x8CEC, + 0xBDE4, 0x8CED, 0xBDE5, 0x8CE2, 0xBDE6, 0x8CE3, 0xBDE7, 0x8CDC, 0xBDE8, 0x8CEA, 0xBDE9, 0x8CE1, 0xBDEA, 0x8D6D, 0xBDEB, 0x8D9F, + 0xBDEC, 0x8DA3, 0xBDED, 0x8E2B, 0xBDEE, 0x8E10, 0xBDEF, 0x8E1D, 0xBDF0, 0x8E22, 0xBDF1, 0x8E0F, 0xBDF2, 0x8E29, 0xBDF3, 0x8E1F, + 0xBDF4, 0x8E21, 0xBDF5, 0x8E1E, 0xBDF6, 0x8EBA, 0xBDF7, 0x8F1D, 0xBDF8, 0x8F1B, 0xBDF9, 0x8F1F, 0xBDFA, 0x8F29, 0xBDFB, 0x8F26, + 0xBDFC, 0x8F2A, 0xBDFD, 0x8F1C, 0xBDFE, 0x8F1E, 0xBE40, 0x8F25, 0xBE41, 0x9069, 0xBE42, 0x906E, 0xBE43, 0x9068, 0xBE44, 0x906D, + 0xBE45, 0x9077, 0xBE46, 0x9130, 0xBE47, 0x912D, 0xBE48, 0x9127, 0xBE49, 0x9131, 0xBE4A, 0x9187, 0xBE4B, 0x9189, 0xBE4C, 0x918B, + 0xBE4D, 0x9183, 0xBE4E, 0x92C5, 0xBE4F, 0x92BB, 0xBE50, 0x92B7, 0xBE51, 0x92EA, 0xBE52, 0x92AC, 0xBE53, 0x92E4, 0xBE54, 0x92C1, + 0xBE55, 0x92B3, 0xBE56, 0x92BC, 0xBE57, 0x92D2, 0xBE58, 0x92C7, 0xBE59, 0x92F0, 0xBE5A, 0x92B2, 0xBE5B, 0x95AD, 0xBE5C, 0x95B1, + 0xBE5D, 0x9704, 0xBE5E, 0x9706, 0xBE5F, 0x9707, 0xBE60, 0x9709, 0xBE61, 0x9760, 0xBE62, 0x978D, 0xBE63, 0x978B, 0xBE64, 0x978F, + 0xBE65, 0x9821, 0xBE66, 0x982B, 0xBE67, 0x981C, 0xBE68, 0x98B3, 0xBE69, 0x990A, 0xBE6A, 0x9913, 0xBE6B, 0x9912, 0xBE6C, 0x9918, + 0xBE6D, 0x99DD, 0xBE6E, 0x99D0, 0xBE6F, 0x99DF, 0xBE70, 0x99DB, 0xBE71, 0x99D1, 0xBE72, 0x99D5, 0xBE73, 0x99D2, 0xBE74, 0x99D9, + 0xBE75, 0x9AB7, 0xBE76, 0x9AEE, 0xBE77, 0x9AEF, 0xBE78, 0x9B27, 0xBE79, 0x9B45, 0xBE7A, 0x9B44, 0xBE7B, 0x9B77, 0xBE7C, 0x9B6F, + 0xBE7D, 0x9D06, 0xBE7E, 0x9D09, 0xBEA1, 0x9D03, 0xBEA2, 0x9EA9, 0xBEA3, 0x9EBE, 0xBEA4, 0x9ECE, 0xBEA5, 0x58A8, 0xBEA6, 0x9F52, + 0xBEA7, 0x5112, 0xBEA8, 0x5118, 0xBEA9, 0x5114, 0xBEAA, 0x5110, 0xBEAB, 0x5115, 0xBEAC, 0x5180, 0xBEAD, 0x51AA, 0xBEAE, 0x51DD, + 0xBEAF, 0x5291, 0xBEB0, 0x5293, 0xBEB1, 0x52F3, 0xBEB2, 0x5659, 0xBEB3, 0x566B, 0xBEB4, 0x5679, 0xBEB5, 0x5669, 0xBEB6, 0x5664, + 0xBEB7, 0x5678, 0xBEB8, 0x566A, 0xBEB9, 0x5668, 0xBEBA, 0x5665, 0xBEBB, 0x5671, 0xBEBC, 0x566F, 0xBEBD, 0x566C, 0xBEBE, 0x5662, + 0xBEBF, 0x5676, 0xBEC0, 0x58C1, 0xBEC1, 0x58BE, 0xBEC2, 0x58C7, 0xBEC3, 0x58C5, 0xBEC4, 0x596E, 0xBEC5, 0x5B1D, 0xBEC6, 0x5B34, + 0xBEC7, 0x5B78, 0xBEC8, 0x5BF0, 0xBEC9, 0x5C0E, 0xBECA, 0x5F4A, 0xBECB, 0x61B2, 0xBECC, 0x6191, 0xBECD, 0x61A9, 0xBECE, 0x618A, + 0xBECF, 0x61CD, 0xBED0, 0x61B6, 0xBED1, 0x61BE, 0xBED2, 0x61CA, 0xBED3, 0x61C8, 0xBED4, 0x6230, 0xBED5, 0x64C5, 0xBED6, 0x64C1, + 0xBED7, 0x64CB, 0xBED8, 0x64BB, 0xBED9, 0x64BC, 0xBEDA, 0x64DA, 0xBEDB, 0x64C4, 0xBEDC, 0x64C7, 0xBEDD, 0x64C2, 0xBEDE, 0x64CD, + 0xBEDF, 0x64BF, 0xBEE0, 0x64D2, 0xBEE1, 0x64D4, 0xBEE2, 0x64BE, 0xBEE3, 0x6574, 0xBEE4, 0x66C6, 0xBEE5, 0x66C9, 0xBEE6, 0x66B9, + 0xBEE7, 0x66C4, 0xBEE8, 0x66C7, 0xBEE9, 0x66B8, 0xBEEA, 0x6A3D, 0xBEEB, 0x6A38, 0xBEEC, 0x6A3A, 0xBEED, 0x6A59, 0xBEEE, 0x6A6B, + 0xBEEF, 0x6A58, 0xBEF0, 0x6A39, 0xBEF1, 0x6A44, 0xBEF2, 0x6A62, 0xBEF3, 0x6A61, 0xBEF4, 0x6A4B, 0xBEF5, 0x6A47, 0xBEF6, 0x6A35, + 0xBEF7, 0x6A5F, 0xBEF8, 0x6A48, 0xBEF9, 0x6B59, 0xBEFA, 0x6B77, 0xBEFB, 0x6C05, 0xBEFC, 0x6FC2, 0xBEFD, 0x6FB1, 0xBEFE, 0x6FA1, + 0xBF40, 0x6FC3, 0xBF41, 0x6FA4, 0xBF42, 0x6FC1, 0xBF43, 0x6FA7, 0xBF44, 0x6FB3, 0xBF45, 0x6FC0, 0xBF46, 0x6FB9, 0xBF47, 0x6FB6, + 0xBF48, 0x6FA6, 0xBF49, 0x6FA0, 0xBF4A, 0x6FB4, 0xBF4B, 0x71BE, 0xBF4C, 0x71C9, 0xBF4D, 0x71D0, 0xBF4E, 0x71D2, 0xBF4F, 0x71C8, + 0xBF50, 0x71D5, 0xBF51, 0x71B9, 0xBF52, 0x71CE, 0xBF53, 0x71D9, 0xBF54, 0x71DC, 0xBF55, 0x71C3, 0xBF56, 0x71C4, 0xBF57, 0x7368, + 0xBF58, 0x749C, 0xBF59, 0x74A3, 0xBF5A, 0x7498, 0xBF5B, 0x749F, 0xBF5C, 0x749E, 0xBF5D, 0x74E2, 0xBF5E, 0x750C, 0xBF5F, 0x750D, + 0xBF60, 0x7634, 0xBF61, 0x7638, 0xBF62, 0x763A, 0xBF63, 0x76E7, 0xBF64, 0x76E5, 0xBF65, 0x77A0, 0xBF66, 0x779E, 0xBF67, 0x779F, + 0xBF68, 0x77A5, 0xBF69, 0x78E8, 0xBF6A, 0x78DA, 0xBF6B, 0x78EC, 0xBF6C, 0x78E7, 0xBF6D, 0x79A6, 0xBF6E, 0x7A4D, 0xBF6F, 0x7A4E, + 0xBF70, 0x7A46, 0xBF71, 0x7A4C, 0xBF72, 0x7A4B, 0xBF73, 0x7ABA, 0xBF74, 0x7BD9, 0xBF75, 0x7C11, 0xBF76, 0x7BC9, 0xBF77, 0x7BE4, + 0xBF78, 0x7BDB, 0xBF79, 0x7BE1, 0xBF7A, 0x7BE9, 0xBF7B, 0x7BE6, 0xBF7C, 0x7CD5, 0xBF7D, 0x7CD6, 0xBF7E, 0x7E0A, 0xBFA1, 0x7E11, + 0xBFA2, 0x7E08, 0xBFA3, 0x7E1B, 0xBFA4, 0x7E23, 0xBFA5, 0x7E1E, 0xBFA6, 0x7E1D, 0xBFA7, 0x7E09, 0xBFA8, 0x7E10, 0xBFA9, 0x7F79, + 0xBFAA, 0x7FB2, 0xBFAB, 0x7FF0, 0xBFAC, 0x7FF1, 0xBFAD, 0x7FEE, 0xBFAE, 0x8028, 0xBFAF, 0x81B3, 0xBFB0, 0x81A9, 0xBFB1, 0x81A8, + 0xBFB2, 0x81FB, 0xBFB3, 0x8208, 0xBFB4, 0x8258, 0xBFB5, 0x8259, 0xBFB6, 0x854A, 0xBFB7, 0x8559, 0xBFB8, 0x8548, 0xBFB9, 0x8568, + 0xBFBA, 0x8569, 0xBFBB, 0x8543, 0xBFBC, 0x8549, 0xBFBD, 0x856D, 0xBFBE, 0x856A, 0xBFBF, 0x855E, 0xBFC0, 0x8783, 0xBFC1, 0x879F, + 0xBFC2, 0x879E, 0xBFC3, 0x87A2, 0xBFC4, 0x878D, 0xBFC5, 0x8861, 0xBFC6, 0x892A, 0xBFC7, 0x8932, 0xBFC8, 0x8925, 0xBFC9, 0x892B, + 0xBFCA, 0x8921, 0xBFCB, 0x89AA, 0xBFCC, 0x89A6, 0xBFCD, 0x8AE6, 0xBFCE, 0x8AFA, 0xBFCF, 0x8AEB, 0xBFD0, 0x8AF1, 0xBFD1, 0x8B00, + 0xBFD2, 0x8ADC, 0xBFD3, 0x8AE7, 0xBFD4, 0x8AEE, 0xBFD5, 0x8AFE, 0xBFD6, 0x8B01, 0xBFD7, 0x8B02, 0xBFD8, 0x8AF7, 0xBFD9, 0x8AED, + 0xBFDA, 0x8AF3, 0xBFDB, 0x8AF6, 0xBFDC, 0x8AFC, 0xBFDD, 0x8C6B, 0xBFDE, 0x8C6D, 0xBFDF, 0x8C93, 0xBFE0, 0x8CF4, 0xBFE1, 0x8E44, + 0xBFE2, 0x8E31, 0xBFE3, 0x8E34, 0xBFE4, 0x8E42, 0xBFE5, 0x8E39, 0xBFE6, 0x8E35, 0xBFE7, 0x8F3B, 0xBFE8, 0x8F2F, 0xBFE9, 0x8F38, + 0xBFEA, 0x8F33, 0xBFEB, 0x8FA8, 0xBFEC, 0x8FA6, 0xBFED, 0x9075, 0xBFEE, 0x9074, 0xBFEF, 0x9078, 0xBFF0, 0x9072, 0xBFF1, 0x907C, + 0xBFF2, 0x907A, 0xBFF3, 0x9134, 0xBFF4, 0x9192, 0xBFF5, 0x9320, 0xBFF6, 0x9336, 0xBFF7, 0x92F8, 0xBFF8, 0x9333, 0xBFF9, 0x932F, + 0xBFFA, 0x9322, 0xBFFB, 0x92FC, 0xBFFC, 0x932B, 0xBFFD, 0x9304, 0xBFFE, 0x931A, 0xC040, 0x9310, 0xC041, 0x9326, 0xC042, 0x9321, + 0xC043, 0x9315, 0xC044, 0x932E, 0xC045, 0x9319, 0xC046, 0x95BB, 0xC047, 0x96A7, 0xC048, 0x96A8, 0xC049, 0x96AA, 0xC04A, 0x96D5, + 0xC04B, 0x970E, 0xC04C, 0x9711, 0xC04D, 0x9716, 0xC04E, 0x970D, 0xC04F, 0x9713, 0xC050, 0x970F, 0xC051, 0x975B, 0xC052, 0x975C, + 0xC053, 0x9766, 0xC054, 0x9798, 0xC055, 0x9830, 0xC056, 0x9838, 0xC057, 0x983B, 0xC058, 0x9837, 0xC059, 0x982D, 0xC05A, 0x9839, + 0xC05B, 0x9824, 0xC05C, 0x9910, 0xC05D, 0x9928, 0xC05E, 0x991E, 0xC05F, 0x991B, 0xC060, 0x9921, 0xC061, 0x991A, 0xC062, 0x99ED, + 0xC063, 0x99E2, 0xC064, 0x99F1, 0xC065, 0x9AB8, 0xC066, 0x9ABC, 0xC067, 0x9AFB, 0xC068, 0x9AED, 0xC069, 0x9B28, 0xC06A, 0x9B91, + 0xC06B, 0x9D15, 0xC06C, 0x9D23, 0xC06D, 0x9D26, 0xC06E, 0x9D28, 0xC06F, 0x9D12, 0xC070, 0x9D1B, 0xC071, 0x9ED8, 0xC072, 0x9ED4, + 0xC073, 0x9F8D, 0xC074, 0x9F9C, 0xC075, 0x512A, 0xC076, 0x511F, 0xC077, 0x5121, 0xC078, 0x5132, 0xC079, 0x52F5, 0xC07A, 0x568E, + 0xC07B, 0x5680, 0xC07C, 0x5690, 0xC07D, 0x5685, 0xC07E, 0x5687, 0xC0A1, 0x568F, 0xC0A2, 0x58D5, 0xC0A3, 0x58D3, 0xC0A4, 0x58D1, + 0xC0A5, 0x58CE, 0xC0A6, 0x5B30, 0xC0A7, 0x5B2A, 0xC0A8, 0x5B24, 0xC0A9, 0x5B7A, 0xC0AA, 0x5C37, 0xC0AB, 0x5C68, 0xC0AC, 0x5DBC, + 0xC0AD, 0x5DBA, 0xC0AE, 0x5DBD, 0xC0AF, 0x5DB8, 0xC0B0, 0x5E6B, 0xC0B1, 0x5F4C, 0xC0B2, 0x5FBD, 0xC0B3, 0x61C9, 0xC0B4, 0x61C2, + 0xC0B5, 0x61C7, 0xC0B6, 0x61E6, 0xC0B7, 0x61CB, 0xC0B8, 0x6232, 0xC0B9, 0x6234, 0xC0BA, 0x64CE, 0xC0BB, 0x64CA, 0xC0BC, 0x64D8, + 0xC0BD, 0x64E0, 0xC0BE, 0x64F0, 0xC0BF, 0x64E6, 0xC0C0, 0x64EC, 0xC0C1, 0x64F1, 0xC0C2, 0x64E2, 0xC0C3, 0x64ED, 0xC0C4, 0x6582, + 0xC0C5, 0x6583, 0xC0C6, 0x66D9, 0xC0C7, 0x66D6, 0xC0C8, 0x6A80, 0xC0C9, 0x6A94, 0xC0CA, 0x6A84, 0xC0CB, 0x6AA2, 0xC0CC, 0x6A9C, + 0xC0CD, 0x6ADB, 0xC0CE, 0x6AA3, 0xC0CF, 0x6A7E, 0xC0D0, 0x6A97, 0xC0D1, 0x6A90, 0xC0D2, 0x6AA0, 0xC0D3, 0x6B5C, 0xC0D4, 0x6BAE, + 0xC0D5, 0x6BDA, 0xC0D6, 0x6C08, 0xC0D7, 0x6FD8, 0xC0D8, 0x6FF1, 0xC0D9, 0x6FDF, 0xC0DA, 0x6FE0, 0xC0DB, 0x6FDB, 0xC0DC, 0x6FE4, + 0xC0DD, 0x6FEB, 0xC0DE, 0x6FEF, 0xC0DF, 0x6F80, 0xC0E0, 0x6FEC, 0xC0E1, 0x6FE1, 0xC0E2, 0x6FE9, 0xC0E3, 0x6FD5, 0xC0E4, 0x6FEE, + 0xC0E5, 0x6FF0, 0xC0E6, 0x71E7, 0xC0E7, 0x71DF, 0xC0E8, 0x71EE, 0xC0E9, 0x71E6, 0xC0EA, 0x71E5, 0xC0EB, 0x71ED, 0xC0EC, 0x71EC, + 0xC0ED, 0x71F4, 0xC0EE, 0x71E0, 0xC0EF, 0x7235, 0xC0F0, 0x7246, 0xC0F1, 0x7370, 0xC0F2, 0x7372, 0xC0F3, 0x74A9, 0xC0F4, 0x74B0, + 0xC0F5, 0x74A6, 0xC0F6, 0x74A8, 0xC0F7, 0x7646, 0xC0F8, 0x7642, 0xC0F9, 0x764C, 0xC0FA, 0x76EA, 0xC0FB, 0x77B3, 0xC0FC, 0x77AA, + 0xC0FD, 0x77B0, 0xC0FE, 0x77AC, 0xC140, 0x77A7, 0xC141, 0x77AD, 0xC142, 0x77EF, 0xC143, 0x78F7, 0xC144, 0x78FA, 0xC145, 0x78F4, + 0xC146, 0x78EF, 0xC147, 0x7901, 0xC148, 0x79A7, 0xC149, 0x79AA, 0xC14A, 0x7A57, 0xC14B, 0x7ABF, 0xC14C, 0x7C07, 0xC14D, 0x7C0D, + 0xC14E, 0x7BFE, 0xC14F, 0x7BF7, 0xC150, 0x7C0C, 0xC151, 0x7BE0, 0xC152, 0x7CE0, 0xC153, 0x7CDC, 0xC154, 0x7CDE, 0xC155, 0x7CE2, + 0xC156, 0x7CDF, 0xC157, 0x7CD9, 0xC158, 0x7CDD, 0xC159, 0x7E2E, 0xC15A, 0x7E3E, 0xC15B, 0x7E46, 0xC15C, 0x7E37, 0xC15D, 0x7E32, + 0xC15E, 0x7E43, 0xC15F, 0x7E2B, 0xC160, 0x7E3D, 0xC161, 0x7E31, 0xC162, 0x7E45, 0xC163, 0x7E41, 0xC164, 0x7E34, 0xC165, 0x7E39, + 0xC166, 0x7E48, 0xC167, 0x7E35, 0xC168, 0x7E3F, 0xC169, 0x7E2F, 0xC16A, 0x7F44, 0xC16B, 0x7FF3, 0xC16C, 0x7FFC, 0xC16D, 0x8071, + 0xC16E, 0x8072, 0xC16F, 0x8070, 0xC170, 0x806F, 0xC171, 0x8073, 0xC172, 0x81C6, 0xC173, 0x81C3, 0xC174, 0x81BA, 0xC175, 0x81C2, + 0xC176, 0x81C0, 0xC177, 0x81BF, 0xC178, 0x81BD, 0xC179, 0x81C9, 0xC17A, 0x81BE, 0xC17B, 0x81E8, 0xC17C, 0x8209, 0xC17D, 0x8271, + 0xC17E, 0x85AA, 0xC1A1, 0x8584, 0xC1A2, 0x857E, 0xC1A3, 0x859C, 0xC1A4, 0x8591, 0xC1A5, 0x8594, 0xC1A6, 0x85AF, 0xC1A7, 0x859B, + 0xC1A8, 0x8587, 0xC1A9, 0x85A8, 0xC1AA, 0x858A, 0xC1AB, 0x8667, 0xC1AC, 0x87C0, 0xC1AD, 0x87D1, 0xC1AE, 0x87B3, 0xC1AF, 0x87D2, + 0xC1B0, 0x87C6, 0xC1B1, 0x87AB, 0xC1B2, 0x87BB, 0xC1B3, 0x87BA, 0xC1B4, 0x87C8, 0xC1B5, 0x87CB, 0xC1B6, 0x893B, 0xC1B7, 0x8936, + 0xC1B8, 0x8944, 0xC1B9, 0x8938, 0xC1BA, 0x893D, 0xC1BB, 0x89AC, 0xC1BC, 0x8B0E, 0xC1BD, 0x8B17, 0xC1BE, 0x8B19, 0xC1BF, 0x8B1B, + 0xC1C0, 0x8B0A, 0xC1C1, 0x8B20, 0xC1C2, 0x8B1D, 0xC1C3, 0x8B04, 0xC1C4, 0x8B10, 0xC1C5, 0x8C41, 0xC1C6, 0x8C3F, 0xC1C7, 0x8C73, + 0xC1C8, 0x8CFA, 0xC1C9, 0x8CFD, 0xC1CA, 0x8CFC, 0xC1CB, 0x8CF8, 0xC1CC, 0x8CFB, 0xC1CD, 0x8DA8, 0xC1CE, 0x8E49, 0xC1CF, 0x8E4B, + 0xC1D0, 0x8E48, 0xC1D1, 0x8E4A, 0xC1D2, 0x8F44, 0xC1D3, 0x8F3E, 0xC1D4, 0x8F42, 0xC1D5, 0x8F45, 0xC1D6, 0x8F3F, 0xC1D7, 0x907F, + 0xC1D8, 0x907D, 0xC1D9, 0x9084, 0xC1DA, 0x9081, 0xC1DB, 0x9082, 0xC1DC, 0x9080, 0xC1DD, 0x9139, 0xC1DE, 0x91A3, 0xC1DF, 0x919E, + 0xC1E0, 0x919C, 0xC1E1, 0x934D, 0xC1E2, 0x9382, 0xC1E3, 0x9328, 0xC1E4, 0x9375, 0xC1E5, 0x934A, 0xC1E6, 0x9365, 0xC1E7, 0x934B, + 0xC1E8, 0x9318, 0xC1E9, 0x937E, 0xC1EA, 0x936C, 0xC1EB, 0x935B, 0xC1EC, 0x9370, 0xC1ED, 0x935A, 0xC1EE, 0x9354, 0xC1EF, 0x95CA, + 0xC1F0, 0x95CB, 0xC1F1, 0x95CC, 0xC1F2, 0x95C8, 0xC1F3, 0x95C6, 0xC1F4, 0x96B1, 0xC1F5, 0x96B8, 0xC1F6, 0x96D6, 0xC1F7, 0x971C, + 0xC1F8, 0x971E, 0xC1F9, 0x97A0, 0xC1FA, 0x97D3, 0xC1FB, 0x9846, 0xC1FC, 0x98B6, 0xC1FD, 0x9935, 0xC1FE, 0x9A01, 0xC240, 0x99FF, + 0xC241, 0x9BAE, 0xC242, 0x9BAB, 0xC243, 0x9BAA, 0xC244, 0x9BAD, 0xC245, 0x9D3B, 0xC246, 0x9D3F, 0xC247, 0x9E8B, 0xC248, 0x9ECF, + 0xC249, 0x9EDE, 0xC24A, 0x9EDC, 0xC24B, 0x9EDD, 0xC24C, 0x9EDB, 0xC24D, 0x9F3E, 0xC24E, 0x9F4B, 0xC24F, 0x53E2, 0xC250, 0x5695, + 0xC251, 0x56AE, 0xC252, 0x58D9, 0xC253, 0x58D8, 0xC254, 0x5B38, 0xC255, 0x5F5D, 0xC256, 0x61E3, 0xC257, 0x6233, 0xC258, 0x64F4, + 0xC259, 0x64F2, 0xC25A, 0x64FE, 0xC25B, 0x6506, 0xC25C, 0x64FA, 0xC25D, 0x64FB, 0xC25E, 0x64F7, 0xC25F, 0x65B7, 0xC260, 0x66DC, + 0xC261, 0x6726, 0xC262, 0x6AB3, 0xC263, 0x6AAC, 0xC264, 0x6AC3, 0xC265, 0x6ABB, 0xC266, 0x6AB8, 0xC267, 0x6AC2, 0xC268, 0x6AAE, + 0xC269, 0x6AAF, 0xC26A, 0x6B5F, 0xC26B, 0x6B78, 0xC26C, 0x6BAF, 0xC26D, 0x7009, 0xC26E, 0x700B, 0xC26F, 0x6FFE, 0xC270, 0x7006, + 0xC271, 0x6FFA, 0xC272, 0x7011, 0xC273, 0x700F, 0xC274, 0x71FB, 0xC275, 0x71FC, 0xC276, 0x71FE, 0xC277, 0x71F8, 0xC278, 0x7377, + 0xC279, 0x7375, 0xC27A, 0x74A7, 0xC27B, 0x74BF, 0xC27C, 0x7515, 0xC27D, 0x7656, 0xC27E, 0x7658, 0xC2A1, 0x7652, 0xC2A2, 0x77BD, + 0xC2A3, 0x77BF, 0xC2A4, 0x77BB, 0xC2A5, 0x77BC, 0xC2A6, 0x790E, 0xC2A7, 0x79AE, 0xC2A8, 0x7A61, 0xC2A9, 0x7A62, 0xC2AA, 0x7A60, + 0xC2AB, 0x7AC4, 0xC2AC, 0x7AC5, 0xC2AD, 0x7C2B, 0xC2AE, 0x7C27, 0xC2AF, 0x7C2A, 0xC2B0, 0x7C1E, 0xC2B1, 0x7C23, 0xC2B2, 0x7C21, + 0xC2B3, 0x7CE7, 0xC2B4, 0x7E54, 0xC2B5, 0x7E55, 0xC2B6, 0x7E5E, 0xC2B7, 0x7E5A, 0xC2B8, 0x7E61, 0xC2B9, 0x7E52, 0xC2BA, 0x7E59, + 0xC2BB, 0x7F48, 0xC2BC, 0x7FF9, 0xC2BD, 0x7FFB, 0xC2BE, 0x8077, 0xC2BF, 0x8076, 0xC2C0, 0x81CD, 0xC2C1, 0x81CF, 0xC2C2, 0x820A, + 0xC2C3, 0x85CF, 0xC2C4, 0x85A9, 0xC2C5, 0x85CD, 0xC2C6, 0x85D0, 0xC2C7, 0x85C9, 0xC2C8, 0x85B0, 0xC2C9, 0x85BA, 0xC2CA, 0x85B9, + 0xC2CB, 0x85A6, 0xC2CC, 0x87EF, 0xC2CD, 0x87EC, 0xC2CE, 0x87F2, 0xC2CF, 0x87E0, 0xC2D0, 0x8986, 0xC2D1, 0x89B2, 0xC2D2, 0x89F4, + 0xC2D3, 0x8B28, 0xC2D4, 0x8B39, 0xC2D5, 0x8B2C, 0xC2D6, 0x8B2B, 0xC2D7, 0x8C50, 0xC2D8, 0x8D05, 0xC2D9, 0x8E59, 0xC2DA, 0x8E63, + 0xC2DB, 0x8E66, 0xC2DC, 0x8E64, 0xC2DD, 0x8E5F, 0xC2DE, 0x8E55, 0xC2DF, 0x8EC0, 0xC2E0, 0x8F49, 0xC2E1, 0x8F4D, 0xC2E2, 0x9087, + 0xC2E3, 0x9083, 0xC2E4, 0x9088, 0xC2E5, 0x91AB, 0xC2E6, 0x91AC, 0xC2E7, 0x91D0, 0xC2E8, 0x9394, 0xC2E9, 0x938A, 0xC2EA, 0x9396, + 0xC2EB, 0x93A2, 0xC2EC, 0x93B3, 0xC2ED, 0x93AE, 0xC2EE, 0x93AC, 0xC2EF, 0x93B0, 0xC2F0, 0x9398, 0xC2F1, 0x939A, 0xC2F2, 0x9397, + 0xC2F3, 0x95D4, 0xC2F4, 0x95D6, 0xC2F5, 0x95D0, 0xC2F6, 0x95D5, 0xC2F7, 0x96E2, 0xC2F8, 0x96DC, 0xC2F9, 0x96D9, 0xC2FA, 0x96DB, + 0xC2FB, 0x96DE, 0xC2FC, 0x9724, 0xC2FD, 0x97A3, 0xC2FE, 0x97A6, 0xC340, 0x97AD, 0xC341, 0x97F9, 0xC342, 0x984D, 0xC343, 0x984F, + 0xC344, 0x984C, 0xC345, 0x984E, 0xC346, 0x9853, 0xC347, 0x98BA, 0xC348, 0x993E, 0xC349, 0x993F, 0xC34A, 0x993D, 0xC34B, 0x992E, + 0xC34C, 0x99A5, 0xC34D, 0x9A0E, 0xC34E, 0x9AC1, 0xC34F, 0x9B03, 0xC350, 0x9B06, 0xC351, 0x9B4F, 0xC352, 0x9B4E, 0xC353, 0x9B4D, + 0xC354, 0x9BCA, 0xC355, 0x9BC9, 0xC356, 0x9BFD, 0xC357, 0x9BC8, 0xC358, 0x9BC0, 0xC359, 0x9D51, 0xC35A, 0x9D5D, 0xC35B, 0x9D60, + 0xC35C, 0x9EE0, 0xC35D, 0x9F15, 0xC35E, 0x9F2C, 0xC35F, 0x5133, 0xC360, 0x56A5, 0xC361, 0x58DE, 0xC362, 0x58DF, 0xC363, 0x58E2, + 0xC364, 0x5BF5, 0xC365, 0x9F90, 0xC366, 0x5EEC, 0xC367, 0x61F2, 0xC368, 0x61F7, 0xC369, 0x61F6, 0xC36A, 0x61F5, 0xC36B, 0x6500, + 0xC36C, 0x650F, 0xC36D, 0x66E0, 0xC36E, 0x66DD, 0xC36F, 0x6AE5, 0xC370, 0x6ADD, 0xC371, 0x6ADA, 0xC372, 0x6AD3, 0xC373, 0x701B, + 0xC374, 0x701F, 0xC375, 0x7028, 0xC376, 0x701A, 0xC377, 0x701D, 0xC378, 0x7015, 0xC379, 0x7018, 0xC37A, 0x7206, 0xC37B, 0x720D, + 0xC37C, 0x7258, 0xC37D, 0x72A2, 0xC37E, 0x7378, 0xC3A1, 0x737A, 0xC3A2, 0x74BD, 0xC3A3, 0x74CA, 0xC3A4, 0x74E3, 0xC3A5, 0x7587, + 0xC3A6, 0x7586, 0xC3A7, 0x765F, 0xC3A8, 0x7661, 0xC3A9, 0x77C7, 0xC3AA, 0x7919, 0xC3AB, 0x79B1, 0xC3AC, 0x7A6B, 0xC3AD, 0x7A69, + 0xC3AE, 0x7C3E, 0xC3AF, 0x7C3F, 0xC3B0, 0x7C38, 0xC3B1, 0x7C3D, 0xC3B2, 0x7C37, 0xC3B3, 0x7C40, 0xC3B4, 0x7E6B, 0xC3B5, 0x7E6D, + 0xC3B6, 0x7E79, 0xC3B7, 0x7E69, 0xC3B8, 0x7E6A, 0xC3B9, 0x7F85, 0xC3BA, 0x7E73, 0xC3BB, 0x7FB6, 0xC3BC, 0x7FB9, 0xC3BD, 0x7FB8, + 0xC3BE, 0x81D8, 0xC3BF, 0x85E9, 0xC3C0, 0x85DD, 0xC3C1, 0x85EA, 0xC3C2, 0x85D5, 0xC3C3, 0x85E4, 0xC3C4, 0x85E5, 0xC3C5, 0x85F7, + 0xC3C6, 0x87FB, 0xC3C7, 0x8805, 0xC3C8, 0x880D, 0xC3C9, 0x87F9, 0xC3CA, 0x87FE, 0xC3CB, 0x8960, 0xC3CC, 0x895F, 0xC3CD, 0x8956, + 0xC3CE, 0x895E, 0xC3CF, 0x8B41, 0xC3D0, 0x8B5C, 0xC3D1, 0x8B58, 0xC3D2, 0x8B49, 0xC3D3, 0x8B5A, 0xC3D4, 0x8B4E, 0xC3D5, 0x8B4F, + 0xC3D6, 0x8B46, 0xC3D7, 0x8B59, 0xC3D8, 0x8D08, 0xC3D9, 0x8D0A, 0xC3DA, 0x8E7C, 0xC3DB, 0x8E72, 0xC3DC, 0x8E87, 0xC3DD, 0x8E76, + 0xC3DE, 0x8E6C, 0xC3DF, 0x8E7A, 0xC3E0, 0x8E74, 0xC3E1, 0x8F54, 0xC3E2, 0x8F4E, 0xC3E3, 0x8FAD, 0xC3E4, 0x908A, 0xC3E5, 0x908B, + 0xC3E6, 0x91B1, 0xC3E7, 0x91AE, 0xC3E8, 0x93E1, 0xC3E9, 0x93D1, 0xC3EA, 0x93DF, 0xC3EB, 0x93C3, 0xC3EC, 0x93C8, 0xC3ED, 0x93DC, + 0xC3EE, 0x93DD, 0xC3EF, 0x93D6, 0xC3F0, 0x93E2, 0xC3F1, 0x93CD, 0xC3F2, 0x93D8, 0xC3F3, 0x93E4, 0xC3F4, 0x93D7, 0xC3F5, 0x93E8, + 0xC3F6, 0x95DC, 0xC3F7, 0x96B4, 0xC3F8, 0x96E3, 0xC3F9, 0x972A, 0xC3FA, 0x9727, 0xC3FB, 0x9761, 0xC3FC, 0x97DC, 0xC3FD, 0x97FB, + 0xC3FE, 0x985E, 0xC440, 0x9858, 0xC441, 0x985B, 0xC442, 0x98BC, 0xC443, 0x9945, 0xC444, 0x9949, 0xC445, 0x9A16, 0xC446, 0x9A19, + 0xC447, 0x9B0D, 0xC448, 0x9BE8, 0xC449, 0x9BE7, 0xC44A, 0x9BD6, 0xC44B, 0x9BDB, 0xC44C, 0x9D89, 0xC44D, 0x9D61, 0xC44E, 0x9D72, + 0xC44F, 0x9D6A, 0xC450, 0x9D6C, 0xC451, 0x9E92, 0xC452, 0x9E97, 0xC453, 0x9E93, 0xC454, 0x9EB4, 0xC455, 0x52F8, 0xC456, 0x56A8, + 0xC457, 0x56B7, 0xC458, 0x56B6, 0xC459, 0x56B4, 0xC45A, 0x56BC, 0xC45B, 0x58E4, 0xC45C, 0x5B40, 0xC45D, 0x5B43, 0xC45E, 0x5B7D, + 0xC45F, 0x5BF6, 0xC460, 0x5DC9, 0xC461, 0x61F8, 0xC462, 0x61FA, 0xC463, 0x6518, 0xC464, 0x6514, 0xC465, 0x6519, 0xC466, 0x66E6, + 0xC467, 0x6727, 0xC468, 0x6AEC, 0xC469, 0x703E, 0xC46A, 0x7030, 0xC46B, 0x7032, 0xC46C, 0x7210, 0xC46D, 0x737B, 0xC46E, 0x74CF, + 0xC46F, 0x7662, 0xC470, 0x7665, 0xC471, 0x7926, 0xC472, 0x792A, 0xC473, 0x792C, 0xC474, 0x792B, 0xC475, 0x7AC7, 0xC476, 0x7AF6, + 0xC477, 0x7C4C, 0xC478, 0x7C43, 0xC479, 0x7C4D, 0xC47A, 0x7CEF, 0xC47B, 0x7CF0, 0xC47C, 0x8FAE, 0xC47D, 0x7E7D, 0xC47E, 0x7E7C, + 0xC4A1, 0x7E82, 0xC4A2, 0x7F4C, 0xC4A3, 0x8000, 0xC4A4, 0x81DA, 0xC4A5, 0x8266, 0xC4A6, 0x85FB, 0xC4A7, 0x85F9, 0xC4A8, 0x8611, + 0xC4A9, 0x85FA, 0xC4AA, 0x8606, 0xC4AB, 0x860B, 0xC4AC, 0x8607, 0xC4AD, 0x860A, 0xC4AE, 0x8814, 0xC4AF, 0x8815, 0xC4B0, 0x8964, + 0xC4B1, 0x89BA, 0xC4B2, 0x89F8, 0xC4B3, 0x8B70, 0xC4B4, 0x8B6C, 0xC4B5, 0x8B66, 0xC4B6, 0x8B6F, 0xC4B7, 0x8B5F, 0xC4B8, 0x8B6B, + 0xC4B9, 0x8D0F, 0xC4BA, 0x8D0D, 0xC4BB, 0x8E89, 0xC4BC, 0x8E81, 0xC4BD, 0x8E85, 0xC4BE, 0x8E82, 0xC4BF, 0x91B4, 0xC4C0, 0x91CB, + 0xC4C1, 0x9418, 0xC4C2, 0x9403, 0xC4C3, 0x93FD, 0xC4C4, 0x95E1, 0xC4C5, 0x9730, 0xC4C6, 0x98C4, 0xC4C7, 0x9952, 0xC4C8, 0x9951, + 0xC4C9, 0x99A8, 0xC4CA, 0x9A2B, 0xC4CB, 0x9A30, 0xC4CC, 0x9A37, 0xC4CD, 0x9A35, 0xC4CE, 0x9C13, 0xC4CF, 0x9C0D, 0xC4D0, 0x9E79, + 0xC4D1, 0x9EB5, 0xC4D2, 0x9EE8, 0xC4D3, 0x9F2F, 0xC4D4, 0x9F5F, 0xC4D5, 0x9F63, 0xC4D6, 0x9F61, 0xC4D7, 0x5137, 0xC4D8, 0x5138, + 0xC4D9, 0x56C1, 0xC4DA, 0x56C0, 0xC4DB, 0x56C2, 0xC4DC, 0x5914, 0xC4DD, 0x5C6C, 0xC4DE, 0x5DCD, 0xC4DF, 0x61FC, 0xC4E0, 0x61FE, + 0xC4E1, 0x651D, 0xC4E2, 0x651C, 0xC4E3, 0x6595, 0xC4E4, 0x66E9, 0xC4E5, 0x6AFB, 0xC4E6, 0x6B04, 0xC4E7, 0x6AFA, 0xC4E8, 0x6BB2, + 0xC4E9, 0x704C, 0xC4EA, 0x721B, 0xC4EB, 0x72A7, 0xC4EC, 0x74D6, 0xC4ED, 0x74D4, 0xC4EE, 0x7669, 0xC4EF, 0x77D3, 0xC4F0, 0x7C50, + 0xC4F1, 0x7E8F, 0xC4F2, 0x7E8C, 0xC4F3, 0x7FBC, 0xC4F4, 0x8617, 0xC4F5, 0x862D, 0xC4F6, 0x861A, 0xC4F7, 0x8823, 0xC4F8, 0x8822, + 0xC4F9, 0x8821, 0xC4FA, 0x881F, 0xC4FB, 0x896A, 0xC4FC, 0x896C, 0xC4FD, 0x89BD, 0xC4FE, 0x8B74, 0xC540, 0x8B77, 0xC541, 0x8B7D, + 0xC542, 0x8D13, 0xC543, 0x8E8A, 0xC544, 0x8E8D, 0xC545, 0x8E8B, 0xC546, 0x8F5F, 0xC547, 0x8FAF, 0xC548, 0x91BA, 0xC549, 0x942E, + 0xC54A, 0x9433, 0xC54B, 0x9435, 0xC54C, 0x943A, 0xC54D, 0x9438, 0xC54E, 0x9432, 0xC54F, 0x942B, 0xC550, 0x95E2, 0xC551, 0x9738, + 0xC552, 0x9739, 0xC553, 0x9732, 0xC554, 0x97FF, 0xC555, 0x9867, 0xC556, 0x9865, 0xC557, 0x9957, 0xC558, 0x9A45, 0xC559, 0x9A43, + 0xC55A, 0x9A40, 0xC55B, 0x9A3E, 0xC55C, 0x9ACF, 0xC55D, 0x9B54, 0xC55E, 0x9B51, 0xC55F, 0x9C2D, 0xC560, 0x9C25, 0xC561, 0x9DAF, + 0xC562, 0x9DB4, 0xC563, 0x9DC2, 0xC564, 0x9DB8, 0xC565, 0x9E9D, 0xC566, 0x9EEF, 0xC567, 0x9F19, 0xC568, 0x9F5C, 0xC569, 0x9F66, + 0xC56A, 0x9F67, 0xC56B, 0x513C, 0xC56C, 0x513B, 0xC56D, 0x56C8, 0xC56E, 0x56CA, 0xC56F, 0x56C9, 0xC570, 0x5B7F, 0xC571, 0x5DD4, + 0xC572, 0x5DD2, 0xC573, 0x5F4E, 0xC574, 0x61FF, 0xC575, 0x6524, 0xC576, 0x6B0A, 0xC577, 0x6B61, 0xC578, 0x7051, 0xC579, 0x7058, + 0xC57A, 0x7380, 0xC57B, 0x74E4, 0xC57C, 0x758A, 0xC57D, 0x766E, 0xC57E, 0x766C, 0xC5A1, 0x79B3, 0xC5A2, 0x7C60, 0xC5A3, 0x7C5F, + 0xC5A4, 0x807E, 0xC5A5, 0x807D, 0xC5A6, 0x81DF, 0xC5A7, 0x8972, 0xC5A8, 0x896F, 0xC5A9, 0x89FC, 0xC5AA, 0x8B80, 0xC5AB, 0x8D16, + 0xC5AC, 0x8D17, 0xC5AD, 0x8E91, 0xC5AE, 0x8E93, 0xC5AF, 0x8F61, 0xC5B0, 0x9148, 0xC5B1, 0x9444, 0xC5B2, 0x9451, 0xC5B3, 0x9452, + 0xC5B4, 0x973D, 0xC5B5, 0x973E, 0xC5B6, 0x97C3, 0xC5B7, 0x97C1, 0xC5B8, 0x986B, 0xC5B9, 0x9955, 0xC5BA, 0x9A55, 0xC5BB, 0x9A4D, + 0xC5BC, 0x9AD2, 0xC5BD, 0x9B1A, 0xC5BE, 0x9C49, 0xC5BF, 0x9C31, 0xC5C0, 0x9C3E, 0xC5C1, 0x9C3B, 0xC5C2, 0x9DD3, 0xC5C3, 0x9DD7, + 0xC5C4, 0x9F34, 0xC5C5, 0x9F6C, 0xC5C6, 0x9F6A, 0xC5C7, 0x9F94, 0xC5C8, 0x56CC, 0xC5C9, 0x5DD6, 0xC5CA, 0x6200, 0xC5CB, 0x6523, + 0xC5CC, 0x652B, 0xC5CD, 0x652A, 0xC5CE, 0x66EC, 0xC5CF, 0x6B10, 0xC5D0, 0x74DA, 0xC5D1, 0x7ACA, 0xC5D2, 0x7C64, 0xC5D3, 0x7C63, + 0xC5D4, 0x7C65, 0xC5D5, 0x7E93, 0xC5D6, 0x7E96, 0xC5D7, 0x7E94, 0xC5D8, 0x81E2, 0xC5D9, 0x8638, 0xC5DA, 0x863F, 0xC5DB, 0x8831, + 0xC5DC, 0x8B8A, 0xC5DD, 0x9090, 0xC5DE, 0x908F, 0xC5DF, 0x9463, 0xC5E0, 0x9460, 0xC5E1, 0x9464, 0xC5E2, 0x9768, 0xC5E3, 0x986F, + 0xC5E4, 0x995C, 0xC5E5, 0x9A5A, 0xC5E6, 0x9A5B, 0xC5E7, 0x9A57, 0xC5E8, 0x9AD3, 0xC5E9, 0x9AD4, 0xC5EA, 0x9AD1, 0xC5EB, 0x9C54, + 0xC5EC, 0x9C57, 0xC5ED, 0x9C56, 0xC5EE, 0x9DE5, 0xC5EF, 0x9E9F, 0xC5F0, 0x9EF4, 0xC5F1, 0x56D1, 0xC5F2, 0x58E9, 0xC5F3, 0x652C, + 0xC5F4, 0x705E, 0xC5F5, 0x7671, 0xC5F6, 0x7672, 0xC5F7, 0x77D7, 0xC5F8, 0x7F50, 0xC5F9, 0x7F88, 0xC5FA, 0x8836, 0xC5FB, 0x8839, + 0xC5FC, 0x8862, 0xC5FD, 0x8B93, 0xC5FE, 0x8B92, 0xC640, 0x8B96, 0xC641, 0x8277, 0xC642, 0x8D1B, 0xC643, 0x91C0, 0xC644, 0x946A, + 0xC645, 0x9742, 0xC646, 0x9748, 0xC647, 0x9744, 0xC648, 0x97C6, 0xC649, 0x9870, 0xC64A, 0x9A5F, 0xC64B, 0x9B22, 0xC64C, 0x9B58, + 0xC64D, 0x9C5F, 0xC64E, 0x9DF9, 0xC64F, 0x9DFA, 0xC650, 0x9E7C, 0xC651, 0x9E7D, 0xC652, 0x9F07, 0xC653, 0x9F77, 0xC654, 0x9F72, + 0xC655, 0x5EF3, 0xC656, 0x6B16, 0xC657, 0x7063, 0xC658, 0x7C6C, 0xC659, 0x7C6E, 0xC65A, 0x883B, 0xC65B, 0x89C0, 0xC65C, 0x8EA1, + 0xC65D, 0x91C1, 0xC65E, 0x9472, 0xC65F, 0x9470, 0xC660, 0x9871, 0xC661, 0x995E, 0xC662, 0x9AD6, 0xC663, 0x9B23, 0xC664, 0x9ECC, + 0xC665, 0x7064, 0xC666, 0x77DA, 0xC667, 0x8B9A, 0xC668, 0x9477, 0xC669, 0x97C9, 0xC66A, 0x9A62, 0xC66B, 0x9A65, 0xC66C, 0x7E9C, + 0xC66D, 0x8B9C, 0xC66E, 0x8EAA, 0xC66F, 0x91C5, 0xC670, 0x947D, 0xC671, 0x947E, 0xC672, 0x947C, 0xC673, 0x9C77, 0xC674, 0x9C78, + 0xC675, 0x9EF7, 0xC676, 0x8C54, 0xC677, 0x947F, 0xC678, 0x9E1A, 0xC679, 0x7228, 0xC67A, 0x9A6A, 0xC67B, 0x9B31, 0xC67C, 0x9E1B, + 0xC67D, 0x9E1E, 0xC67E, 0x7C72, 0xC940, 0x4E42, 0xC941, 0x4E5C, 0xC942, 0x51F5, 0xC943, 0x531A, 0xC944, 0x5382, 0xC945, 0x4E07, + 0xC946, 0x4E0C, 0xC947, 0x4E47, 0xC948, 0x4E8D, 0xC949, 0x56D7, 0xC94A, 0xFA0C, 0xC94B, 0x5C6E, 0xC94C, 0x5F73, 0xC94D, 0x4E0F, + 0xC94E, 0x5187, 0xC94F, 0x4E0E, 0xC950, 0x4E2E, 0xC951, 0x4E93, 0xC952, 0x4EC2, 0xC953, 0x4EC9, 0xC954, 0x4EC8, 0xC955, 0x5198, + 0xC956, 0x52FC, 0xC957, 0x536C, 0xC958, 0x53B9, 0xC959, 0x5720, 0xC95A, 0x5903, 0xC95B, 0x592C, 0xC95C, 0x5C10, 0xC95D, 0x5DFF, + 0xC95E, 0x65E1, 0xC95F, 0x6BB3, 0xC960, 0x6BCC, 0xC961, 0x6C14, 0xC962, 0x723F, 0xC963, 0x4E31, 0xC964, 0x4E3C, 0xC965, 0x4EE8, + 0xC966, 0x4EDC, 0xC967, 0x4EE9, 0xC968, 0x4EE1, 0xC969, 0x4EDD, 0xC96A, 0x4EDA, 0xC96B, 0x520C, 0xC96C, 0x531C, 0xC96D, 0x534C, + 0xC96E, 0x5722, 0xC96F, 0x5723, 0xC970, 0x5917, 0xC971, 0x592F, 0xC972, 0x5B81, 0xC973, 0x5B84, 0xC974, 0x5C12, 0xC975, 0x5C3B, + 0xC976, 0x5C74, 0xC977, 0x5C73, 0xC978, 0x5E04, 0xC979, 0x5E80, 0xC97A, 0x5E82, 0xC97B, 0x5FC9, 0xC97C, 0x6209, 0xC97D, 0x6250, + 0xC97E, 0x6C15, 0xC9A1, 0x6C36, 0xC9A2, 0x6C43, 0xC9A3, 0x6C3F, 0xC9A4, 0x6C3B, 0xC9A5, 0x72AE, 0xC9A6, 0x72B0, 0xC9A7, 0x738A, + 0xC9A8, 0x79B8, 0xC9A9, 0x808A, 0xC9AA, 0x961E, 0xC9AB, 0x4F0E, 0xC9AC, 0x4F18, 0xC9AD, 0x4F2C, 0xC9AE, 0x4EF5, 0xC9AF, 0x4F14, + 0xC9B0, 0x4EF1, 0xC9B1, 0x4F00, 0xC9B2, 0x4EF7, 0xC9B3, 0x4F08, 0xC9B4, 0x4F1D, 0xC9B5, 0x4F02, 0xC9B6, 0x4F05, 0xC9B7, 0x4F22, + 0xC9B8, 0x4F13, 0xC9B9, 0x4F04, 0xC9BA, 0x4EF4, 0xC9BB, 0x4F12, 0xC9BC, 0x51B1, 0xC9BD, 0x5213, 0xC9BE, 0x5209, 0xC9BF, 0x5210, + 0xC9C0, 0x52A6, 0xC9C1, 0x5322, 0xC9C2, 0x531F, 0xC9C3, 0x534D, 0xC9C4, 0x538A, 0xC9C5, 0x5407, 0xC9C6, 0x56E1, 0xC9C7, 0x56DF, + 0xC9C8, 0x572E, 0xC9C9, 0x572A, 0xC9CA, 0x5734, 0xC9CB, 0x593C, 0xC9CC, 0x5980, 0xC9CD, 0x597C, 0xC9CE, 0x5985, 0xC9CF, 0x597B, + 0xC9D0, 0x597E, 0xC9D1, 0x5977, 0xC9D2, 0x597F, 0xC9D3, 0x5B56, 0xC9D4, 0x5C15, 0xC9D5, 0x5C25, 0xC9D6, 0x5C7C, 0xC9D7, 0x5C7A, + 0xC9D8, 0x5C7B, 0xC9D9, 0x5C7E, 0xC9DA, 0x5DDF, 0xC9DB, 0x5E75, 0xC9DC, 0x5E84, 0xC9DD, 0x5F02, 0xC9DE, 0x5F1A, 0xC9DF, 0x5F74, + 0xC9E0, 0x5FD5, 0xC9E1, 0x5FD4, 0xC9E2, 0x5FCF, 0xC9E3, 0x625C, 0xC9E4, 0x625E, 0xC9E5, 0x6264, 0xC9E6, 0x6261, 0xC9E7, 0x6266, + 0xC9E8, 0x6262, 0xC9E9, 0x6259, 0xC9EA, 0x6260, 0xC9EB, 0x625A, 0xC9EC, 0x6265, 0xC9ED, 0x65EF, 0xC9EE, 0x65EE, 0xC9EF, 0x673E, + 0xC9F0, 0x6739, 0xC9F1, 0x6738, 0xC9F2, 0x673B, 0xC9F3, 0x673A, 0xC9F4, 0x673F, 0xC9F5, 0x673C, 0xC9F6, 0x6733, 0xC9F7, 0x6C18, + 0xC9F8, 0x6C46, 0xC9F9, 0x6C52, 0xC9FA, 0x6C5C, 0xC9FB, 0x6C4F, 0xC9FC, 0x6C4A, 0xC9FD, 0x6C54, 0xC9FE, 0x6C4B, 0xCA40, 0x6C4C, + 0xCA41, 0x7071, 0xCA42, 0x725E, 0xCA43, 0x72B4, 0xCA44, 0x72B5, 0xCA45, 0x738E, 0xCA46, 0x752A, 0xCA47, 0x767F, 0xCA48, 0x7A75, + 0xCA49, 0x7F51, 0xCA4A, 0x8278, 0xCA4B, 0x827C, 0xCA4C, 0x8280, 0xCA4D, 0x827D, 0xCA4E, 0x827F, 0xCA4F, 0x864D, 0xCA50, 0x897E, + 0xCA51, 0x9099, 0xCA52, 0x9097, 0xCA53, 0x9098, 0xCA54, 0x909B, 0xCA55, 0x9094, 0xCA56, 0x9622, 0xCA57, 0x9624, 0xCA58, 0x9620, + 0xCA59, 0x9623, 0xCA5A, 0x4F56, 0xCA5B, 0x4F3B, 0xCA5C, 0x4F62, 0xCA5D, 0x4F49, 0xCA5E, 0x4F53, 0xCA5F, 0x4F64, 0xCA60, 0x4F3E, + 0xCA61, 0x4F67, 0xCA62, 0x4F52, 0xCA63, 0x4F5F, 0xCA64, 0x4F41, 0xCA65, 0x4F58, 0xCA66, 0x4F2D, 0xCA67, 0x4F33, 0xCA68, 0x4F3F, + 0xCA69, 0x4F61, 0xCA6A, 0x518F, 0xCA6B, 0x51B9, 0xCA6C, 0x521C, 0xCA6D, 0x521E, 0xCA6E, 0x5221, 0xCA6F, 0x52AD, 0xCA70, 0x52AE, + 0xCA71, 0x5309, 0xCA72, 0x5363, 0xCA73, 0x5372, 0xCA74, 0x538E, 0xCA75, 0x538F, 0xCA76, 0x5430, 0xCA77, 0x5437, 0xCA78, 0x542A, + 0xCA79, 0x5454, 0xCA7A, 0x5445, 0xCA7B, 0x5419, 0xCA7C, 0x541C, 0xCA7D, 0x5425, 0xCA7E, 0x5418, 0xCAA1, 0x543D, 0xCAA2, 0x544F, + 0xCAA3, 0x5441, 0xCAA4, 0x5428, 0xCAA5, 0x5424, 0xCAA6, 0x5447, 0xCAA7, 0x56EE, 0xCAA8, 0x56E7, 0xCAA9, 0x56E5, 0xCAAA, 0x5741, + 0xCAAB, 0x5745, 0xCAAC, 0x574C, 0xCAAD, 0x5749, 0xCAAE, 0x574B, 0xCAAF, 0x5752, 0xCAB0, 0x5906, 0xCAB1, 0x5940, 0xCAB2, 0x59A6, + 0xCAB3, 0x5998, 0xCAB4, 0x59A0, 0xCAB5, 0x5997, 0xCAB6, 0x598E, 0xCAB7, 0x59A2, 0xCAB8, 0x5990, 0xCAB9, 0x598F, 0xCABA, 0x59A7, + 0xCABB, 0x59A1, 0xCABC, 0x5B8E, 0xCABD, 0x5B92, 0xCABE, 0x5C28, 0xCABF, 0x5C2A, 0xCAC0, 0x5C8D, 0xCAC1, 0x5C8F, 0xCAC2, 0x5C88, + 0xCAC3, 0x5C8B, 0xCAC4, 0x5C89, 0xCAC5, 0x5C92, 0xCAC6, 0x5C8A, 0xCAC7, 0x5C86, 0xCAC8, 0x5C93, 0xCAC9, 0x5C95, 0xCACA, 0x5DE0, + 0xCACB, 0x5E0A, 0xCACC, 0x5E0E, 0xCACD, 0x5E8B, 0xCACE, 0x5E89, 0xCACF, 0x5E8C, 0xCAD0, 0x5E88, 0xCAD1, 0x5E8D, 0xCAD2, 0x5F05, + 0xCAD3, 0x5F1D, 0xCAD4, 0x5F78, 0xCAD5, 0x5F76, 0xCAD6, 0x5FD2, 0xCAD7, 0x5FD1, 0xCAD8, 0x5FD0, 0xCAD9, 0x5FED, 0xCADA, 0x5FE8, + 0xCADB, 0x5FEE, 0xCADC, 0x5FF3, 0xCADD, 0x5FE1, 0xCADE, 0x5FE4, 0xCADF, 0x5FE3, 0xCAE0, 0x5FFA, 0xCAE1, 0x5FEF, 0xCAE2, 0x5FF7, + 0xCAE3, 0x5FFB, 0xCAE4, 0x6000, 0xCAE5, 0x5FF4, 0xCAE6, 0x623A, 0xCAE7, 0x6283, 0xCAE8, 0x628C, 0xCAE9, 0x628E, 0xCAEA, 0x628F, + 0xCAEB, 0x6294, 0xCAEC, 0x6287, 0xCAED, 0x6271, 0xCAEE, 0x627B, 0xCAEF, 0x627A, 0xCAF0, 0x6270, 0xCAF1, 0x6281, 0xCAF2, 0x6288, + 0xCAF3, 0x6277, 0xCAF4, 0x627D, 0xCAF5, 0x6272, 0xCAF6, 0x6274, 0xCAF7, 0x6537, 0xCAF8, 0x65F0, 0xCAF9, 0x65F4, 0xCAFA, 0x65F3, + 0xCAFB, 0x65F2, 0xCAFC, 0x65F5, 0xCAFD, 0x6745, 0xCAFE, 0x6747, 0xCB40, 0x6759, 0xCB41, 0x6755, 0xCB42, 0x674C, 0xCB43, 0x6748, + 0xCB44, 0x675D, 0xCB45, 0x674D, 0xCB46, 0x675A, 0xCB47, 0x674B, 0xCB48, 0x6BD0, 0xCB49, 0x6C19, 0xCB4A, 0x6C1A, 0xCB4B, 0x6C78, + 0xCB4C, 0x6C67, 0xCB4D, 0x6C6B, 0xCB4E, 0x6C84, 0xCB4F, 0x6C8B, 0xCB50, 0x6C8F, 0xCB51, 0x6C71, 0xCB52, 0x6C6F, 0xCB53, 0x6C69, + 0xCB54, 0x6C9A, 0xCB55, 0x6C6D, 0xCB56, 0x6C87, 0xCB57, 0x6C95, 0xCB58, 0x6C9C, 0xCB59, 0x6C66, 0xCB5A, 0x6C73, 0xCB5B, 0x6C65, + 0xCB5C, 0x6C7B, 0xCB5D, 0x6C8E, 0xCB5E, 0x7074, 0xCB5F, 0x707A, 0xCB60, 0x7263, 0xCB61, 0x72BF, 0xCB62, 0x72BD, 0xCB63, 0x72C3, + 0xCB64, 0x72C6, 0xCB65, 0x72C1, 0xCB66, 0x72BA, 0xCB67, 0x72C5, 0xCB68, 0x7395, 0xCB69, 0x7397, 0xCB6A, 0x7393, 0xCB6B, 0x7394, + 0xCB6C, 0x7392, 0xCB6D, 0x753A, 0xCB6E, 0x7539, 0xCB6F, 0x7594, 0xCB70, 0x7595, 0xCB71, 0x7681, 0xCB72, 0x793D, 0xCB73, 0x8034, + 0xCB74, 0x8095, 0xCB75, 0x8099, 0xCB76, 0x8090, 0xCB77, 0x8092, 0xCB78, 0x809C, 0xCB79, 0x8290, 0xCB7A, 0x828F, 0xCB7B, 0x8285, + 0xCB7C, 0x828E, 0xCB7D, 0x8291, 0xCB7E, 0x8293, 0xCBA1, 0x828A, 0xCBA2, 0x8283, 0xCBA3, 0x8284, 0xCBA4, 0x8C78, 0xCBA5, 0x8FC9, + 0xCBA6, 0x8FBF, 0xCBA7, 0x909F, 0xCBA8, 0x90A1, 0xCBA9, 0x90A5, 0xCBAA, 0x909E, 0xCBAB, 0x90A7, 0xCBAC, 0x90A0, 0xCBAD, 0x9630, + 0xCBAE, 0x9628, 0xCBAF, 0x962F, 0xCBB0, 0x962D, 0xCBB1, 0x4E33, 0xCBB2, 0x4F98, 0xCBB3, 0x4F7C, 0xCBB4, 0x4F85, 0xCBB5, 0x4F7D, + 0xCBB6, 0x4F80, 0xCBB7, 0x4F87, 0xCBB8, 0x4F76, 0xCBB9, 0x4F74, 0xCBBA, 0x4F89, 0xCBBB, 0x4F84, 0xCBBC, 0x4F77, 0xCBBD, 0x4F4C, + 0xCBBE, 0x4F97, 0xCBBF, 0x4F6A, 0xCBC0, 0x4F9A, 0xCBC1, 0x4F79, 0xCBC2, 0x4F81, 0xCBC3, 0x4F78, 0xCBC4, 0x4F90, 0xCBC5, 0x4F9C, + 0xCBC6, 0x4F94, 0xCBC7, 0x4F9E, 0xCBC8, 0x4F92, 0xCBC9, 0x4F82, 0xCBCA, 0x4F95, 0xCBCB, 0x4F6B, 0xCBCC, 0x4F6E, 0xCBCD, 0x519E, + 0xCBCE, 0x51BC, 0xCBCF, 0x51BE, 0xCBD0, 0x5235, 0xCBD1, 0x5232, 0xCBD2, 0x5233, 0xCBD3, 0x5246, 0xCBD4, 0x5231, 0xCBD5, 0x52BC, + 0xCBD6, 0x530A, 0xCBD7, 0x530B, 0xCBD8, 0x533C, 0xCBD9, 0x5392, 0xCBDA, 0x5394, 0xCBDB, 0x5487, 0xCBDC, 0x547F, 0xCBDD, 0x5481, + 0xCBDE, 0x5491, 0xCBDF, 0x5482, 0xCBE0, 0x5488, 0xCBE1, 0x546B, 0xCBE2, 0x547A, 0xCBE3, 0x547E, 0xCBE4, 0x5465, 0xCBE5, 0x546C, + 0xCBE6, 0x5474, 0xCBE7, 0x5466, 0xCBE8, 0x548D, 0xCBE9, 0x546F, 0xCBEA, 0x5461, 0xCBEB, 0x5460, 0xCBEC, 0x5498, 0xCBED, 0x5463, + 0xCBEE, 0x5467, 0xCBEF, 0x5464, 0xCBF0, 0x56F7, 0xCBF1, 0x56F9, 0xCBF2, 0x576F, 0xCBF3, 0x5772, 0xCBF4, 0x576D, 0xCBF5, 0x576B, + 0xCBF6, 0x5771, 0xCBF7, 0x5770, 0xCBF8, 0x5776, 0xCBF9, 0x5780, 0xCBFA, 0x5775, 0xCBFB, 0x577B, 0xCBFC, 0x5773, 0xCBFD, 0x5774, + 0xCBFE, 0x5762, 0xCC40, 0x5768, 0xCC41, 0x577D, 0xCC42, 0x590C, 0xCC43, 0x5945, 0xCC44, 0x59B5, 0xCC45, 0x59BA, 0xCC46, 0x59CF, + 0xCC47, 0x59CE, 0xCC48, 0x59B2, 0xCC49, 0x59CC, 0xCC4A, 0x59C1, 0xCC4B, 0x59B6, 0xCC4C, 0x59BC, 0xCC4D, 0x59C3, 0xCC4E, 0x59D6, + 0xCC4F, 0x59B1, 0xCC50, 0x59BD, 0xCC51, 0x59C0, 0xCC52, 0x59C8, 0xCC53, 0x59B4, 0xCC54, 0x59C7, 0xCC55, 0x5B62, 0xCC56, 0x5B65, + 0xCC57, 0x5B93, 0xCC58, 0x5B95, 0xCC59, 0x5C44, 0xCC5A, 0x5C47, 0xCC5B, 0x5CAE, 0xCC5C, 0x5CA4, 0xCC5D, 0x5CA0, 0xCC5E, 0x5CB5, + 0xCC5F, 0x5CAF, 0xCC60, 0x5CA8, 0xCC61, 0x5CAC, 0xCC62, 0x5C9F, 0xCC63, 0x5CA3, 0xCC64, 0x5CAD, 0xCC65, 0x5CA2, 0xCC66, 0x5CAA, + 0xCC67, 0x5CA7, 0xCC68, 0x5C9D, 0xCC69, 0x5CA5, 0xCC6A, 0x5CB6, 0xCC6B, 0x5CB0, 0xCC6C, 0x5CA6, 0xCC6D, 0x5E17, 0xCC6E, 0x5E14, + 0xCC6F, 0x5E19, 0xCC70, 0x5F28, 0xCC71, 0x5F22, 0xCC72, 0x5F23, 0xCC73, 0x5F24, 0xCC74, 0x5F54, 0xCC75, 0x5F82, 0xCC76, 0x5F7E, + 0xCC77, 0x5F7D, 0xCC78, 0x5FDE, 0xCC79, 0x5FE5, 0xCC7A, 0x602D, 0xCC7B, 0x6026, 0xCC7C, 0x6019, 0xCC7D, 0x6032, 0xCC7E, 0x600B, + 0xCCA1, 0x6034, 0xCCA2, 0x600A, 0xCCA3, 0x6017, 0xCCA4, 0x6033, 0xCCA5, 0x601A, 0xCCA6, 0x601E, 0xCCA7, 0x602C, 0xCCA8, 0x6022, + 0xCCA9, 0x600D, 0xCCAA, 0x6010, 0xCCAB, 0x602E, 0xCCAC, 0x6013, 0xCCAD, 0x6011, 0xCCAE, 0x600C, 0xCCAF, 0x6009, 0xCCB0, 0x601C, + 0xCCB1, 0x6214, 0xCCB2, 0x623D, 0xCCB3, 0x62AD, 0xCCB4, 0x62B4, 0xCCB5, 0x62D1, 0xCCB6, 0x62BE, 0xCCB7, 0x62AA, 0xCCB8, 0x62B6, + 0xCCB9, 0x62CA, 0xCCBA, 0x62AE, 0xCCBB, 0x62B3, 0xCCBC, 0x62AF, 0xCCBD, 0x62BB, 0xCCBE, 0x62A9, 0xCCBF, 0x62B0, 0xCCC0, 0x62B8, + 0xCCC1, 0x653D, 0xCCC2, 0x65A8, 0xCCC3, 0x65BB, 0xCCC4, 0x6609, 0xCCC5, 0x65FC, 0xCCC6, 0x6604, 0xCCC7, 0x6612, 0xCCC8, 0x6608, + 0xCCC9, 0x65FB, 0xCCCA, 0x6603, 0xCCCB, 0x660B, 0xCCCC, 0x660D, 0xCCCD, 0x6605, 0xCCCE, 0x65FD, 0xCCCF, 0x6611, 0xCCD0, 0x6610, + 0xCCD1, 0x66F6, 0xCCD2, 0x670A, 0xCCD3, 0x6785, 0xCCD4, 0x676C, 0xCCD5, 0x678E, 0xCCD6, 0x6792, 0xCCD7, 0x6776, 0xCCD8, 0x677B, + 0xCCD9, 0x6798, 0xCCDA, 0x6786, 0xCCDB, 0x6784, 0xCCDC, 0x6774, 0xCCDD, 0x678D, 0xCCDE, 0x678C, 0xCCDF, 0x677A, 0xCCE0, 0x679F, + 0xCCE1, 0x6791, 0xCCE2, 0x6799, 0xCCE3, 0x6783, 0xCCE4, 0x677D, 0xCCE5, 0x6781, 0xCCE6, 0x6778, 0xCCE7, 0x6779, 0xCCE8, 0x6794, + 0xCCE9, 0x6B25, 0xCCEA, 0x6B80, 0xCCEB, 0x6B7E, 0xCCEC, 0x6BDE, 0xCCED, 0x6C1D, 0xCCEE, 0x6C93, 0xCCEF, 0x6CEC, 0xCCF0, 0x6CEB, + 0xCCF1, 0x6CEE, 0xCCF2, 0x6CD9, 0xCCF3, 0x6CB6, 0xCCF4, 0x6CD4, 0xCCF5, 0x6CAD, 0xCCF6, 0x6CE7, 0xCCF7, 0x6CB7, 0xCCF8, 0x6CD0, + 0xCCF9, 0x6CC2, 0xCCFA, 0x6CBA, 0xCCFB, 0x6CC3, 0xCCFC, 0x6CC6, 0xCCFD, 0x6CED, 0xCCFE, 0x6CF2, 0xCD40, 0x6CD2, 0xCD41, 0x6CDD, + 0xCD42, 0x6CB4, 0xCD43, 0x6C8A, 0xCD44, 0x6C9D, 0xCD45, 0x6C80, 0xCD46, 0x6CDE, 0xCD47, 0x6CC0, 0xCD48, 0x6D30, 0xCD49, 0x6CCD, + 0xCD4A, 0x6CC7, 0xCD4B, 0x6CB0, 0xCD4C, 0x6CF9, 0xCD4D, 0x6CCF, 0xCD4E, 0x6CE9, 0xCD4F, 0x6CD1, 0xCD50, 0x7094, 0xCD51, 0x7098, + 0xCD52, 0x7085, 0xCD53, 0x7093, 0xCD54, 0x7086, 0xCD55, 0x7084, 0xCD56, 0x7091, 0xCD57, 0x7096, 0xCD58, 0x7082, 0xCD59, 0x709A, + 0xCD5A, 0x7083, 0xCD5B, 0x726A, 0xCD5C, 0x72D6, 0xCD5D, 0x72CB, 0xCD5E, 0x72D8, 0xCD5F, 0x72C9, 0xCD60, 0x72DC, 0xCD61, 0x72D2, + 0xCD62, 0x72D4, 0xCD63, 0x72DA, 0xCD64, 0x72CC, 0xCD65, 0x72D1, 0xCD66, 0x73A4, 0xCD67, 0x73A1, 0xCD68, 0x73AD, 0xCD69, 0x73A6, + 0xCD6A, 0x73A2, 0xCD6B, 0x73A0, 0xCD6C, 0x73AC, 0xCD6D, 0x739D, 0xCD6E, 0x74DD, 0xCD6F, 0x74E8, 0xCD70, 0x753F, 0xCD71, 0x7540, + 0xCD72, 0x753E, 0xCD73, 0x758C, 0xCD74, 0x7598, 0xCD75, 0x76AF, 0xCD76, 0x76F3, 0xCD77, 0x76F1, 0xCD78, 0x76F0, 0xCD79, 0x76F5, + 0xCD7A, 0x77F8, 0xCD7B, 0x77FC, 0xCD7C, 0x77F9, 0xCD7D, 0x77FB, 0xCD7E, 0x77FA, 0xCDA1, 0x77F7, 0xCDA2, 0x7942, 0xCDA3, 0x793F, + 0xCDA4, 0x79C5, 0xCDA5, 0x7A78, 0xCDA6, 0x7A7B, 0xCDA7, 0x7AFB, 0xCDA8, 0x7C75, 0xCDA9, 0x7CFD, 0xCDAA, 0x8035, 0xCDAB, 0x808F, + 0xCDAC, 0x80AE, 0xCDAD, 0x80A3, 0xCDAE, 0x80B8, 0xCDAF, 0x80B5, 0xCDB0, 0x80AD, 0xCDB1, 0x8220, 0xCDB2, 0x82A0, 0xCDB3, 0x82C0, + 0xCDB4, 0x82AB, 0xCDB5, 0x829A, 0xCDB6, 0x8298, 0xCDB7, 0x829B, 0xCDB8, 0x82B5, 0xCDB9, 0x82A7, 0xCDBA, 0x82AE, 0xCDBB, 0x82BC, + 0xCDBC, 0x829E, 0xCDBD, 0x82BA, 0xCDBE, 0x82B4, 0xCDBF, 0x82A8, 0xCDC0, 0x82A1, 0xCDC1, 0x82A9, 0xCDC2, 0x82C2, 0xCDC3, 0x82A4, + 0xCDC4, 0x82C3, 0xCDC5, 0x82B6, 0xCDC6, 0x82A2, 0xCDC7, 0x8670, 0xCDC8, 0x866F, 0xCDC9, 0x866D, 0xCDCA, 0x866E, 0xCDCB, 0x8C56, + 0xCDCC, 0x8FD2, 0xCDCD, 0x8FCB, 0xCDCE, 0x8FD3, 0xCDCF, 0x8FCD, 0xCDD0, 0x8FD6, 0xCDD1, 0x8FD5, 0xCDD2, 0x8FD7, 0xCDD3, 0x90B2, + 0xCDD4, 0x90B4, 0xCDD5, 0x90AF, 0xCDD6, 0x90B3, 0xCDD7, 0x90B0, 0xCDD8, 0x9639, 0xCDD9, 0x963D, 0xCDDA, 0x963C, 0xCDDB, 0x963A, + 0xCDDC, 0x9643, 0xCDDD, 0x4FCD, 0xCDDE, 0x4FC5, 0xCDDF, 0x4FD3, 0xCDE0, 0x4FB2, 0xCDE1, 0x4FC9, 0xCDE2, 0x4FCB, 0xCDE3, 0x4FC1, + 0xCDE4, 0x4FD4, 0xCDE5, 0x4FDC, 0xCDE6, 0x4FD9, 0xCDE7, 0x4FBB, 0xCDE8, 0x4FB3, 0xCDE9, 0x4FDB, 0xCDEA, 0x4FC7, 0xCDEB, 0x4FD6, + 0xCDEC, 0x4FBA, 0xCDED, 0x4FC0, 0xCDEE, 0x4FB9, 0xCDEF, 0x4FEC, 0xCDF0, 0x5244, 0xCDF1, 0x5249, 0xCDF2, 0x52C0, 0xCDF3, 0x52C2, + 0xCDF4, 0x533D, 0xCDF5, 0x537C, 0xCDF6, 0x5397, 0xCDF7, 0x5396, 0xCDF8, 0x5399, 0xCDF9, 0x5398, 0xCDFA, 0x54BA, 0xCDFB, 0x54A1, + 0xCDFC, 0x54AD, 0xCDFD, 0x54A5, 0xCDFE, 0x54CF, 0xCE40, 0x54C3, 0xCE41, 0x830D, 0xCE42, 0x54B7, 0xCE43, 0x54AE, 0xCE44, 0x54D6, + 0xCE45, 0x54B6, 0xCE46, 0x54C5, 0xCE47, 0x54C6, 0xCE48, 0x54A0, 0xCE49, 0x5470, 0xCE4A, 0x54BC, 0xCE4B, 0x54A2, 0xCE4C, 0x54BE, + 0xCE4D, 0x5472, 0xCE4E, 0x54DE, 0xCE4F, 0x54B0, 0xCE50, 0x57B5, 0xCE51, 0x579E, 0xCE52, 0x579F, 0xCE53, 0x57A4, 0xCE54, 0x578C, + 0xCE55, 0x5797, 0xCE56, 0x579D, 0xCE57, 0x579B, 0xCE58, 0x5794, 0xCE59, 0x5798, 0xCE5A, 0x578F, 0xCE5B, 0x5799, 0xCE5C, 0x57A5, + 0xCE5D, 0x579A, 0xCE5E, 0x5795, 0xCE5F, 0x58F4, 0xCE60, 0x590D, 0xCE61, 0x5953, 0xCE62, 0x59E1, 0xCE63, 0x59DE, 0xCE64, 0x59EE, + 0xCE65, 0x5A00, 0xCE66, 0x59F1, 0xCE67, 0x59DD, 0xCE68, 0x59FA, 0xCE69, 0x59FD, 0xCE6A, 0x59FC, 0xCE6B, 0x59F6, 0xCE6C, 0x59E4, + 0xCE6D, 0x59F2, 0xCE6E, 0x59F7, 0xCE6F, 0x59DB, 0xCE70, 0x59E9, 0xCE71, 0x59F3, 0xCE72, 0x59F5, 0xCE73, 0x59E0, 0xCE74, 0x59FE, + 0xCE75, 0x59F4, 0xCE76, 0x59ED, 0xCE77, 0x5BA8, 0xCE78, 0x5C4C, 0xCE79, 0x5CD0, 0xCE7A, 0x5CD8, 0xCE7B, 0x5CCC, 0xCE7C, 0x5CD7, + 0xCE7D, 0x5CCB, 0xCE7E, 0x5CDB, 0xCEA1, 0x5CDE, 0xCEA2, 0x5CDA, 0xCEA3, 0x5CC9, 0xCEA4, 0x5CC7, 0xCEA5, 0x5CCA, 0xCEA6, 0x5CD6, + 0xCEA7, 0x5CD3, 0xCEA8, 0x5CD4, 0xCEA9, 0x5CCF, 0xCEAA, 0x5CC8, 0xCEAB, 0x5CC6, 0xCEAC, 0x5CCE, 0xCEAD, 0x5CDF, 0xCEAE, 0x5CF8, + 0xCEAF, 0x5DF9, 0xCEB0, 0x5E21, 0xCEB1, 0x5E22, 0xCEB2, 0x5E23, 0xCEB3, 0x5E20, 0xCEB4, 0x5E24, 0xCEB5, 0x5EB0, 0xCEB6, 0x5EA4, + 0xCEB7, 0x5EA2, 0xCEB8, 0x5E9B, 0xCEB9, 0x5EA3, 0xCEBA, 0x5EA5, 0xCEBB, 0x5F07, 0xCEBC, 0x5F2E, 0xCEBD, 0x5F56, 0xCEBE, 0x5F86, + 0xCEBF, 0x6037, 0xCEC0, 0x6039, 0xCEC1, 0x6054, 0xCEC2, 0x6072, 0xCEC3, 0x605E, 0xCEC4, 0x6045, 0xCEC5, 0x6053, 0xCEC6, 0x6047, + 0xCEC7, 0x6049, 0xCEC8, 0x605B, 0xCEC9, 0x604C, 0xCECA, 0x6040, 0xCECB, 0x6042, 0xCECC, 0x605F, 0xCECD, 0x6024, 0xCECE, 0x6044, + 0xCECF, 0x6058, 0xCED0, 0x6066, 0xCED1, 0x606E, 0xCED2, 0x6242, 0xCED3, 0x6243, 0xCED4, 0x62CF, 0xCED5, 0x630D, 0xCED6, 0x630B, + 0xCED7, 0x62F5, 0xCED8, 0x630E, 0xCED9, 0x6303, 0xCEDA, 0x62EB, 0xCEDB, 0x62F9, 0xCEDC, 0x630F, 0xCEDD, 0x630C, 0xCEDE, 0x62F8, + 0xCEDF, 0x62F6, 0xCEE0, 0x6300, 0xCEE1, 0x6313, 0xCEE2, 0x6314, 0xCEE3, 0x62FA, 0xCEE4, 0x6315, 0xCEE5, 0x62FB, 0xCEE6, 0x62F0, + 0xCEE7, 0x6541, 0xCEE8, 0x6543, 0xCEE9, 0x65AA, 0xCEEA, 0x65BF, 0xCEEB, 0x6636, 0xCEEC, 0x6621, 0xCEED, 0x6632, 0xCEEE, 0x6635, + 0xCEEF, 0x661C, 0xCEF0, 0x6626, 0xCEF1, 0x6622, 0xCEF2, 0x6633, 0xCEF3, 0x662B, 0xCEF4, 0x663A, 0xCEF5, 0x661D, 0xCEF6, 0x6634, + 0xCEF7, 0x6639, 0xCEF8, 0x662E, 0xCEF9, 0x670F, 0xCEFA, 0x6710, 0xCEFB, 0x67C1, 0xCEFC, 0x67F2, 0xCEFD, 0x67C8, 0xCEFE, 0x67BA, + 0xCF40, 0x67DC, 0xCF41, 0x67BB, 0xCF42, 0x67F8, 0xCF43, 0x67D8, 0xCF44, 0x67C0, 0xCF45, 0x67B7, 0xCF46, 0x67C5, 0xCF47, 0x67EB, + 0xCF48, 0x67E4, 0xCF49, 0x67DF, 0xCF4A, 0x67B5, 0xCF4B, 0x67CD, 0xCF4C, 0x67B3, 0xCF4D, 0x67F7, 0xCF4E, 0x67F6, 0xCF4F, 0x67EE, + 0xCF50, 0x67E3, 0xCF51, 0x67C2, 0xCF52, 0x67B9, 0xCF53, 0x67CE, 0xCF54, 0x67E7, 0xCF55, 0x67F0, 0xCF56, 0x67B2, 0xCF57, 0x67FC, + 0xCF58, 0x67C6, 0xCF59, 0x67ED, 0xCF5A, 0x67CC, 0xCF5B, 0x67AE, 0xCF5C, 0x67E6, 0xCF5D, 0x67DB, 0xCF5E, 0x67FA, 0xCF5F, 0x67C9, + 0xCF60, 0x67CA, 0xCF61, 0x67C3, 0xCF62, 0x67EA, 0xCF63, 0x67CB, 0xCF64, 0x6B28, 0xCF65, 0x6B82, 0xCF66, 0x6B84, 0xCF67, 0x6BB6, + 0xCF68, 0x6BD6, 0xCF69, 0x6BD8, 0xCF6A, 0x6BE0, 0xCF6B, 0x6C20, 0xCF6C, 0x6C21, 0xCF6D, 0x6D28, 0xCF6E, 0x6D34, 0xCF6F, 0x6D2D, + 0xCF70, 0x6D1F, 0xCF71, 0x6D3C, 0xCF72, 0x6D3F, 0xCF73, 0x6D12, 0xCF74, 0x6D0A, 0xCF75, 0x6CDA, 0xCF76, 0x6D33, 0xCF77, 0x6D04, + 0xCF78, 0x6D19, 0xCF79, 0x6D3A, 0xCF7A, 0x6D1A, 0xCF7B, 0x6D11, 0xCF7C, 0x6D00, 0xCF7D, 0x6D1D, 0xCF7E, 0x6D42, 0xCFA1, 0x6D01, + 0xCFA2, 0x6D18, 0xCFA3, 0x6D37, 0xCFA4, 0x6D03, 0xCFA5, 0x6D0F, 0xCFA6, 0x6D40, 0xCFA7, 0x6D07, 0xCFA8, 0x6D20, 0xCFA9, 0x6D2C, + 0xCFAA, 0x6D08, 0xCFAB, 0x6D22, 0xCFAC, 0x6D09, 0xCFAD, 0x6D10, 0xCFAE, 0x70B7, 0xCFAF, 0x709F, 0xCFB0, 0x70BE, 0xCFB1, 0x70B1, + 0xCFB2, 0x70B0, 0xCFB3, 0x70A1, 0xCFB4, 0x70B4, 0xCFB5, 0x70B5, 0xCFB6, 0x70A9, 0xCFB7, 0x7241, 0xCFB8, 0x7249, 0xCFB9, 0x724A, + 0xCFBA, 0x726C, 0xCFBB, 0x7270, 0xCFBC, 0x7273, 0xCFBD, 0x726E, 0xCFBE, 0x72CA, 0xCFBF, 0x72E4, 0xCFC0, 0x72E8, 0xCFC1, 0x72EB, + 0xCFC2, 0x72DF, 0xCFC3, 0x72EA, 0xCFC4, 0x72E6, 0xCFC5, 0x72E3, 0xCFC6, 0x7385, 0xCFC7, 0x73CC, 0xCFC8, 0x73C2, 0xCFC9, 0x73C8, + 0xCFCA, 0x73C5, 0xCFCB, 0x73B9, 0xCFCC, 0x73B6, 0xCFCD, 0x73B5, 0xCFCE, 0x73B4, 0xCFCF, 0x73EB, 0xCFD0, 0x73BF, 0xCFD1, 0x73C7, + 0xCFD2, 0x73BE, 0xCFD3, 0x73C3, 0xCFD4, 0x73C6, 0xCFD5, 0x73B8, 0xCFD6, 0x73CB, 0xCFD7, 0x74EC, 0xCFD8, 0x74EE, 0xCFD9, 0x752E, + 0xCFDA, 0x7547, 0xCFDB, 0x7548, 0xCFDC, 0x75A7, 0xCFDD, 0x75AA, 0xCFDE, 0x7679, 0xCFDF, 0x76C4, 0xCFE0, 0x7708, 0xCFE1, 0x7703, + 0xCFE2, 0x7704, 0xCFE3, 0x7705, 0xCFE4, 0x770A, 0xCFE5, 0x76F7, 0xCFE6, 0x76FB, 0xCFE7, 0x76FA, 0xCFE8, 0x77E7, 0xCFE9, 0x77E8, + 0xCFEA, 0x7806, 0xCFEB, 0x7811, 0xCFEC, 0x7812, 0xCFED, 0x7805, 0xCFEE, 0x7810, 0xCFEF, 0x780F, 0xCFF0, 0x780E, 0xCFF1, 0x7809, + 0xCFF2, 0x7803, 0xCFF3, 0x7813, 0xCFF4, 0x794A, 0xCFF5, 0x794C, 0xCFF6, 0x794B, 0xCFF7, 0x7945, 0xCFF8, 0x7944, 0xCFF9, 0x79D5, + 0xCFFA, 0x79CD, 0xCFFB, 0x79CF, 0xCFFC, 0x79D6, 0xCFFD, 0x79CE, 0xCFFE, 0x7A80, 0xD040, 0x7A7E, 0xD041, 0x7AD1, 0xD042, 0x7B00, + 0xD043, 0x7B01, 0xD044, 0x7C7A, 0xD045, 0x7C78, 0xD046, 0x7C79, 0xD047, 0x7C7F, 0xD048, 0x7C80, 0xD049, 0x7C81, 0xD04A, 0x7D03, + 0xD04B, 0x7D08, 0xD04C, 0x7D01, 0xD04D, 0x7F58, 0xD04E, 0x7F91, 0xD04F, 0x7F8D, 0xD050, 0x7FBE, 0xD051, 0x8007, 0xD052, 0x800E, + 0xD053, 0x800F, 0xD054, 0x8014, 0xD055, 0x8037, 0xD056, 0x80D8, 0xD057, 0x80C7, 0xD058, 0x80E0, 0xD059, 0x80D1, 0xD05A, 0x80C8, + 0xD05B, 0x80C2, 0xD05C, 0x80D0, 0xD05D, 0x80C5, 0xD05E, 0x80E3, 0xD05F, 0x80D9, 0xD060, 0x80DC, 0xD061, 0x80CA, 0xD062, 0x80D5, + 0xD063, 0x80C9, 0xD064, 0x80CF, 0xD065, 0x80D7, 0xD066, 0x80E6, 0xD067, 0x80CD, 0xD068, 0x81FF, 0xD069, 0x8221, 0xD06A, 0x8294, + 0xD06B, 0x82D9, 0xD06C, 0x82FE, 0xD06D, 0x82F9, 0xD06E, 0x8307, 0xD06F, 0x82E8, 0xD070, 0x8300, 0xD071, 0x82D5, 0xD072, 0x833A, + 0xD073, 0x82EB, 0xD074, 0x82D6, 0xD075, 0x82F4, 0xD076, 0x82EC, 0xD077, 0x82E1, 0xD078, 0x82F2, 0xD079, 0x82F5, 0xD07A, 0x830C, + 0xD07B, 0x82FB, 0xD07C, 0x82F6, 0xD07D, 0x82F0, 0xD07E, 0x82EA, 0xD0A1, 0x82E4, 0xD0A2, 0x82E0, 0xD0A3, 0x82FA, 0xD0A4, 0x82F3, + 0xD0A5, 0x82ED, 0xD0A6, 0x8677, 0xD0A7, 0x8674, 0xD0A8, 0x867C, 0xD0A9, 0x8673, 0xD0AA, 0x8841, 0xD0AB, 0x884E, 0xD0AC, 0x8867, + 0xD0AD, 0x886A, 0xD0AE, 0x8869, 0xD0AF, 0x89D3, 0xD0B0, 0x8A04, 0xD0B1, 0x8A07, 0xD0B2, 0x8D72, 0xD0B3, 0x8FE3, 0xD0B4, 0x8FE1, + 0xD0B5, 0x8FEE, 0xD0B6, 0x8FE0, 0xD0B7, 0x90F1, 0xD0B8, 0x90BD, 0xD0B9, 0x90BF, 0xD0BA, 0x90D5, 0xD0BB, 0x90C5, 0xD0BC, 0x90BE, + 0xD0BD, 0x90C7, 0xD0BE, 0x90CB, 0xD0BF, 0x90C8, 0xD0C0, 0x91D4, 0xD0C1, 0x91D3, 0xD0C2, 0x9654, 0xD0C3, 0x964F, 0xD0C4, 0x9651, + 0xD0C5, 0x9653, 0xD0C6, 0x964A, 0xD0C7, 0x964E, 0xD0C8, 0x501E, 0xD0C9, 0x5005, 0xD0CA, 0x5007, 0xD0CB, 0x5013, 0xD0CC, 0x5022, + 0xD0CD, 0x5030, 0xD0CE, 0x501B, 0xD0CF, 0x4FF5, 0xD0D0, 0x4FF4, 0xD0D1, 0x5033, 0xD0D2, 0x5037, 0xD0D3, 0x502C, 0xD0D4, 0x4FF6, + 0xD0D5, 0x4FF7, 0xD0D6, 0x5017, 0xD0D7, 0x501C, 0xD0D8, 0x5020, 0xD0D9, 0x5027, 0xD0DA, 0x5035, 0xD0DB, 0x502F, 0xD0DC, 0x5031, + 0xD0DD, 0x500E, 0xD0DE, 0x515A, 0xD0DF, 0x5194, 0xD0E0, 0x5193, 0xD0E1, 0x51CA, 0xD0E2, 0x51C4, 0xD0E3, 0x51C5, 0xD0E4, 0x51C8, + 0xD0E5, 0x51CE, 0xD0E6, 0x5261, 0xD0E7, 0x525A, 0xD0E8, 0x5252, 0xD0E9, 0x525E, 0xD0EA, 0x525F, 0xD0EB, 0x5255, 0xD0EC, 0x5262, + 0xD0ED, 0x52CD, 0xD0EE, 0x530E, 0xD0EF, 0x539E, 0xD0F0, 0x5526, 0xD0F1, 0x54E2, 0xD0F2, 0x5517, 0xD0F3, 0x5512, 0xD0F4, 0x54E7, + 0xD0F5, 0x54F3, 0xD0F6, 0x54E4, 0xD0F7, 0x551A, 0xD0F8, 0x54FF, 0xD0F9, 0x5504, 0xD0FA, 0x5508, 0xD0FB, 0x54EB, 0xD0FC, 0x5511, + 0xD0FD, 0x5505, 0xD0FE, 0x54F1, 0xD140, 0x550A, 0xD141, 0x54FB, 0xD142, 0x54F7, 0xD143, 0x54F8, 0xD144, 0x54E0, 0xD145, 0x550E, + 0xD146, 0x5503, 0xD147, 0x550B, 0xD148, 0x5701, 0xD149, 0x5702, 0xD14A, 0x57CC, 0xD14B, 0x5832, 0xD14C, 0x57D5, 0xD14D, 0x57D2, + 0xD14E, 0x57BA, 0xD14F, 0x57C6, 0xD150, 0x57BD, 0xD151, 0x57BC, 0xD152, 0x57B8, 0xD153, 0x57B6, 0xD154, 0x57BF, 0xD155, 0x57C7, + 0xD156, 0x57D0, 0xD157, 0x57B9, 0xD158, 0x57C1, 0xD159, 0x590E, 0xD15A, 0x594A, 0xD15B, 0x5A19, 0xD15C, 0x5A16, 0xD15D, 0x5A2D, + 0xD15E, 0x5A2E, 0xD15F, 0x5A15, 0xD160, 0x5A0F, 0xD161, 0x5A17, 0xD162, 0x5A0A, 0xD163, 0x5A1E, 0xD164, 0x5A33, 0xD165, 0x5B6C, + 0xD166, 0x5BA7, 0xD167, 0x5BAD, 0xD168, 0x5BAC, 0xD169, 0x5C03, 0xD16A, 0x5C56, 0xD16B, 0x5C54, 0xD16C, 0x5CEC, 0xD16D, 0x5CFF, + 0xD16E, 0x5CEE, 0xD16F, 0x5CF1, 0xD170, 0x5CF7, 0xD171, 0x5D00, 0xD172, 0x5CF9, 0xD173, 0x5E29, 0xD174, 0x5E28, 0xD175, 0x5EA8, + 0xD176, 0x5EAE, 0xD177, 0x5EAA, 0xD178, 0x5EAC, 0xD179, 0x5F33, 0xD17A, 0x5F30, 0xD17B, 0x5F67, 0xD17C, 0x605D, 0xD17D, 0x605A, + 0xD17E, 0x6067, 0xD1A1, 0x6041, 0xD1A2, 0x60A2, 0xD1A3, 0x6088, 0xD1A4, 0x6080, 0xD1A5, 0x6092, 0xD1A6, 0x6081, 0xD1A7, 0x609D, + 0xD1A8, 0x6083, 0xD1A9, 0x6095, 0xD1AA, 0x609B, 0xD1AB, 0x6097, 0xD1AC, 0x6087, 0xD1AD, 0x609C, 0xD1AE, 0x608E, 0xD1AF, 0x6219, + 0xD1B0, 0x6246, 0xD1B1, 0x62F2, 0xD1B2, 0x6310, 0xD1B3, 0x6356, 0xD1B4, 0x632C, 0xD1B5, 0x6344, 0xD1B6, 0x6345, 0xD1B7, 0x6336, + 0xD1B8, 0x6343, 0xD1B9, 0x63E4, 0xD1BA, 0x6339, 0xD1BB, 0x634B, 0xD1BC, 0x634A, 0xD1BD, 0x633C, 0xD1BE, 0x6329, 0xD1BF, 0x6341, + 0xD1C0, 0x6334, 0xD1C1, 0x6358, 0xD1C2, 0x6354, 0xD1C3, 0x6359, 0xD1C4, 0x632D, 0xD1C5, 0x6347, 0xD1C6, 0x6333, 0xD1C7, 0x635A, + 0xD1C8, 0x6351, 0xD1C9, 0x6338, 0xD1CA, 0x6357, 0xD1CB, 0x6340, 0xD1CC, 0x6348, 0xD1CD, 0x654A, 0xD1CE, 0x6546, 0xD1CF, 0x65C6, + 0xD1D0, 0x65C3, 0xD1D1, 0x65C4, 0xD1D2, 0x65C2, 0xD1D3, 0x664A, 0xD1D4, 0x665F, 0xD1D5, 0x6647, 0xD1D6, 0x6651, 0xD1D7, 0x6712, + 0xD1D8, 0x6713, 0xD1D9, 0x681F, 0xD1DA, 0x681A, 0xD1DB, 0x6849, 0xD1DC, 0x6832, 0xD1DD, 0x6833, 0xD1DE, 0x683B, 0xD1DF, 0x684B, + 0xD1E0, 0x684F, 0xD1E1, 0x6816, 0xD1E2, 0x6831, 0xD1E3, 0x681C, 0xD1E4, 0x6835, 0xD1E5, 0x682B, 0xD1E6, 0x682D, 0xD1E7, 0x682F, + 0xD1E8, 0x684E, 0xD1E9, 0x6844, 0xD1EA, 0x6834, 0xD1EB, 0x681D, 0xD1EC, 0x6812, 0xD1ED, 0x6814, 0xD1EE, 0x6826, 0xD1EF, 0x6828, + 0xD1F0, 0x682E, 0xD1F1, 0x684D, 0xD1F2, 0x683A, 0xD1F3, 0x6825, 0xD1F4, 0x6820, 0xD1F5, 0x6B2C, 0xD1F6, 0x6B2F, 0xD1F7, 0x6B2D, + 0xD1F8, 0x6B31, 0xD1F9, 0x6B34, 0xD1FA, 0x6B6D, 0xD1FB, 0x8082, 0xD1FC, 0x6B88, 0xD1FD, 0x6BE6, 0xD1FE, 0x6BE4, 0xD240, 0x6BE8, + 0xD241, 0x6BE3, 0xD242, 0x6BE2, 0xD243, 0x6BE7, 0xD244, 0x6C25, 0xD245, 0x6D7A, 0xD246, 0x6D63, 0xD247, 0x6D64, 0xD248, 0x6D76, + 0xD249, 0x6D0D, 0xD24A, 0x6D61, 0xD24B, 0x6D92, 0xD24C, 0x6D58, 0xD24D, 0x6D62, 0xD24E, 0x6D6D, 0xD24F, 0x6D6F, 0xD250, 0x6D91, + 0xD251, 0x6D8D, 0xD252, 0x6DEF, 0xD253, 0x6D7F, 0xD254, 0x6D86, 0xD255, 0x6D5E, 0xD256, 0x6D67, 0xD257, 0x6D60, 0xD258, 0x6D97, + 0xD259, 0x6D70, 0xD25A, 0x6D7C, 0xD25B, 0x6D5F, 0xD25C, 0x6D82, 0xD25D, 0x6D98, 0xD25E, 0x6D2F, 0xD25F, 0x6D68, 0xD260, 0x6D8B, + 0xD261, 0x6D7E, 0xD262, 0x6D80, 0xD263, 0x6D84, 0xD264, 0x6D16, 0xD265, 0x6D83, 0xD266, 0x6D7B, 0xD267, 0x6D7D, 0xD268, 0x6D75, + 0xD269, 0x6D90, 0xD26A, 0x70DC, 0xD26B, 0x70D3, 0xD26C, 0x70D1, 0xD26D, 0x70DD, 0xD26E, 0x70CB, 0xD26F, 0x7F39, 0xD270, 0x70E2, + 0xD271, 0x70D7, 0xD272, 0x70D2, 0xD273, 0x70DE, 0xD274, 0x70E0, 0xD275, 0x70D4, 0xD276, 0x70CD, 0xD277, 0x70C5, 0xD278, 0x70C6, + 0xD279, 0x70C7, 0xD27A, 0x70DA, 0xD27B, 0x70CE, 0xD27C, 0x70E1, 0xD27D, 0x7242, 0xD27E, 0x7278, 0xD2A1, 0x7277, 0xD2A2, 0x7276, + 0xD2A3, 0x7300, 0xD2A4, 0x72FA, 0xD2A5, 0x72F4, 0xD2A6, 0x72FE, 0xD2A7, 0x72F6, 0xD2A8, 0x72F3, 0xD2A9, 0x72FB, 0xD2AA, 0x7301, + 0xD2AB, 0x73D3, 0xD2AC, 0x73D9, 0xD2AD, 0x73E5, 0xD2AE, 0x73D6, 0xD2AF, 0x73BC, 0xD2B0, 0x73E7, 0xD2B1, 0x73E3, 0xD2B2, 0x73E9, + 0xD2B3, 0x73DC, 0xD2B4, 0x73D2, 0xD2B5, 0x73DB, 0xD2B6, 0x73D4, 0xD2B7, 0x73DD, 0xD2B8, 0x73DA, 0xD2B9, 0x73D7, 0xD2BA, 0x73D8, + 0xD2BB, 0x73E8, 0xD2BC, 0x74DE, 0xD2BD, 0x74DF, 0xD2BE, 0x74F4, 0xD2BF, 0x74F5, 0xD2C0, 0x7521, 0xD2C1, 0x755B, 0xD2C2, 0x755F, + 0xD2C3, 0x75B0, 0xD2C4, 0x75C1, 0xD2C5, 0x75BB, 0xD2C6, 0x75C4, 0xD2C7, 0x75C0, 0xD2C8, 0x75BF, 0xD2C9, 0x75B6, 0xD2CA, 0x75BA, + 0xD2CB, 0x768A, 0xD2CC, 0x76C9, 0xD2CD, 0x771D, 0xD2CE, 0x771B, 0xD2CF, 0x7710, 0xD2D0, 0x7713, 0xD2D1, 0x7712, 0xD2D2, 0x7723, + 0xD2D3, 0x7711, 0xD2D4, 0x7715, 0xD2D5, 0x7719, 0xD2D6, 0x771A, 0xD2D7, 0x7722, 0xD2D8, 0x7727, 0xD2D9, 0x7823, 0xD2DA, 0x782C, + 0xD2DB, 0x7822, 0xD2DC, 0x7835, 0xD2DD, 0x782F, 0xD2DE, 0x7828, 0xD2DF, 0x782E, 0xD2E0, 0x782B, 0xD2E1, 0x7821, 0xD2E2, 0x7829, + 0xD2E3, 0x7833, 0xD2E4, 0x782A, 0xD2E5, 0x7831, 0xD2E6, 0x7954, 0xD2E7, 0x795B, 0xD2E8, 0x794F, 0xD2E9, 0x795C, 0xD2EA, 0x7953, + 0xD2EB, 0x7952, 0xD2EC, 0x7951, 0xD2ED, 0x79EB, 0xD2EE, 0x79EC, 0xD2EF, 0x79E0, 0xD2F0, 0x79EE, 0xD2F1, 0x79ED, 0xD2F2, 0x79EA, + 0xD2F3, 0x79DC, 0xD2F4, 0x79DE, 0xD2F5, 0x79DD, 0xD2F6, 0x7A86, 0xD2F7, 0x7A89, 0xD2F8, 0x7A85, 0xD2F9, 0x7A8B, 0xD2FA, 0x7A8C, + 0xD2FB, 0x7A8A, 0xD2FC, 0x7A87, 0xD2FD, 0x7AD8, 0xD2FE, 0x7B10, 0xD340, 0x7B04, 0xD341, 0x7B13, 0xD342, 0x7B05, 0xD343, 0x7B0F, + 0xD344, 0x7B08, 0xD345, 0x7B0A, 0xD346, 0x7B0E, 0xD347, 0x7B09, 0xD348, 0x7B12, 0xD349, 0x7C84, 0xD34A, 0x7C91, 0xD34B, 0x7C8A, + 0xD34C, 0x7C8C, 0xD34D, 0x7C88, 0xD34E, 0x7C8D, 0xD34F, 0x7C85, 0xD350, 0x7D1E, 0xD351, 0x7D1D, 0xD352, 0x7D11, 0xD353, 0x7D0E, + 0xD354, 0x7D18, 0xD355, 0x7D16, 0xD356, 0x7D13, 0xD357, 0x7D1F, 0xD358, 0x7D12, 0xD359, 0x7D0F, 0xD35A, 0x7D0C, 0xD35B, 0x7F5C, + 0xD35C, 0x7F61, 0xD35D, 0x7F5E, 0xD35E, 0x7F60, 0xD35F, 0x7F5D, 0xD360, 0x7F5B, 0xD361, 0x7F96, 0xD362, 0x7F92, 0xD363, 0x7FC3, + 0xD364, 0x7FC2, 0xD365, 0x7FC0, 0xD366, 0x8016, 0xD367, 0x803E, 0xD368, 0x8039, 0xD369, 0x80FA, 0xD36A, 0x80F2, 0xD36B, 0x80F9, + 0xD36C, 0x80F5, 0xD36D, 0x8101, 0xD36E, 0x80FB, 0xD36F, 0x8100, 0xD370, 0x8201, 0xD371, 0x822F, 0xD372, 0x8225, 0xD373, 0x8333, + 0xD374, 0x832D, 0xD375, 0x8344, 0xD376, 0x8319, 0xD377, 0x8351, 0xD378, 0x8325, 0xD379, 0x8356, 0xD37A, 0x833F, 0xD37B, 0x8341, + 0xD37C, 0x8326, 0xD37D, 0x831C, 0xD37E, 0x8322, 0xD3A1, 0x8342, 0xD3A2, 0x834E, 0xD3A3, 0x831B, 0xD3A4, 0x832A, 0xD3A5, 0x8308, + 0xD3A6, 0x833C, 0xD3A7, 0x834D, 0xD3A8, 0x8316, 0xD3A9, 0x8324, 0xD3AA, 0x8320, 0xD3AB, 0x8337, 0xD3AC, 0x832F, 0xD3AD, 0x8329, + 0xD3AE, 0x8347, 0xD3AF, 0x8345, 0xD3B0, 0x834C, 0xD3B1, 0x8353, 0xD3B2, 0x831E, 0xD3B3, 0x832C, 0xD3B4, 0x834B, 0xD3B5, 0x8327, + 0xD3B6, 0x8348, 0xD3B7, 0x8653, 0xD3B8, 0x8652, 0xD3B9, 0x86A2, 0xD3BA, 0x86A8, 0xD3BB, 0x8696, 0xD3BC, 0x868D, 0xD3BD, 0x8691, + 0xD3BE, 0x869E, 0xD3BF, 0x8687, 0xD3C0, 0x8697, 0xD3C1, 0x8686, 0xD3C2, 0x868B, 0xD3C3, 0x869A, 0xD3C4, 0x8685, 0xD3C5, 0x86A5, + 0xD3C6, 0x8699, 0xD3C7, 0x86A1, 0xD3C8, 0x86A7, 0xD3C9, 0x8695, 0xD3CA, 0x8698, 0xD3CB, 0x868E, 0xD3CC, 0x869D, 0xD3CD, 0x8690, + 0xD3CE, 0x8694, 0xD3CF, 0x8843, 0xD3D0, 0x8844, 0xD3D1, 0x886D, 0xD3D2, 0x8875, 0xD3D3, 0x8876, 0xD3D4, 0x8872, 0xD3D5, 0x8880, + 0xD3D6, 0x8871, 0xD3D7, 0x887F, 0xD3D8, 0x886F, 0xD3D9, 0x8883, 0xD3DA, 0x887E, 0xD3DB, 0x8874, 0xD3DC, 0x887C, 0xD3DD, 0x8A12, + 0xD3DE, 0x8C47, 0xD3DF, 0x8C57, 0xD3E0, 0x8C7B, 0xD3E1, 0x8CA4, 0xD3E2, 0x8CA3, 0xD3E3, 0x8D76, 0xD3E4, 0x8D78, 0xD3E5, 0x8DB5, + 0xD3E6, 0x8DB7, 0xD3E7, 0x8DB6, 0xD3E8, 0x8ED1, 0xD3E9, 0x8ED3, 0xD3EA, 0x8FFE, 0xD3EB, 0x8FF5, 0xD3EC, 0x9002, 0xD3ED, 0x8FFF, + 0xD3EE, 0x8FFB, 0xD3EF, 0x9004, 0xD3F0, 0x8FFC, 0xD3F1, 0x8FF6, 0xD3F2, 0x90D6, 0xD3F3, 0x90E0, 0xD3F4, 0x90D9, 0xD3F5, 0x90DA, + 0xD3F6, 0x90E3, 0xD3F7, 0x90DF, 0xD3F8, 0x90E5, 0xD3F9, 0x90D8, 0xD3FA, 0x90DB, 0xD3FB, 0x90D7, 0xD3FC, 0x90DC, 0xD3FD, 0x90E4, + 0xD3FE, 0x9150, 0xD440, 0x914E, 0xD441, 0x914F, 0xD442, 0x91D5, 0xD443, 0x91E2, 0xD444, 0x91DA, 0xD445, 0x965C, 0xD446, 0x965F, + 0xD447, 0x96BC, 0xD448, 0x98E3, 0xD449, 0x9ADF, 0xD44A, 0x9B2F, 0xD44B, 0x4E7F, 0xD44C, 0x5070, 0xD44D, 0x506A, 0xD44E, 0x5061, + 0xD44F, 0x505E, 0xD450, 0x5060, 0xD451, 0x5053, 0xD452, 0x504B, 0xD453, 0x505D, 0xD454, 0x5072, 0xD455, 0x5048, 0xD456, 0x504D, + 0xD457, 0x5041, 0xD458, 0x505B, 0xD459, 0x504A, 0xD45A, 0x5062, 0xD45B, 0x5015, 0xD45C, 0x5045, 0xD45D, 0x505F, 0xD45E, 0x5069, + 0xD45F, 0x506B, 0xD460, 0x5063, 0xD461, 0x5064, 0xD462, 0x5046, 0xD463, 0x5040, 0xD464, 0x506E, 0xD465, 0x5073, 0xD466, 0x5057, + 0xD467, 0x5051, 0xD468, 0x51D0, 0xD469, 0x526B, 0xD46A, 0x526D, 0xD46B, 0x526C, 0xD46C, 0x526E, 0xD46D, 0x52D6, 0xD46E, 0x52D3, + 0xD46F, 0x532D, 0xD470, 0x539C, 0xD471, 0x5575, 0xD472, 0x5576, 0xD473, 0x553C, 0xD474, 0x554D, 0xD475, 0x5550, 0xD476, 0x5534, + 0xD477, 0x552A, 0xD478, 0x5551, 0xD479, 0x5562, 0xD47A, 0x5536, 0xD47B, 0x5535, 0xD47C, 0x5530, 0xD47D, 0x5552, 0xD47E, 0x5545, + 0xD4A1, 0x550C, 0xD4A2, 0x5532, 0xD4A3, 0x5565, 0xD4A4, 0x554E, 0xD4A5, 0x5539, 0xD4A6, 0x5548, 0xD4A7, 0x552D, 0xD4A8, 0x553B, + 0xD4A9, 0x5540, 0xD4AA, 0x554B, 0xD4AB, 0x570A, 0xD4AC, 0x5707, 0xD4AD, 0x57FB, 0xD4AE, 0x5814, 0xD4AF, 0x57E2, 0xD4B0, 0x57F6, + 0xD4B1, 0x57DC, 0xD4B2, 0x57F4, 0xD4B3, 0x5800, 0xD4B4, 0x57ED, 0xD4B5, 0x57FD, 0xD4B6, 0x5808, 0xD4B7, 0x57F8, 0xD4B8, 0x580B, + 0xD4B9, 0x57F3, 0xD4BA, 0x57CF, 0xD4BB, 0x5807, 0xD4BC, 0x57EE, 0xD4BD, 0x57E3, 0xD4BE, 0x57F2, 0xD4BF, 0x57E5, 0xD4C0, 0x57EC, + 0xD4C1, 0x57E1, 0xD4C2, 0x580E, 0xD4C3, 0x57FC, 0xD4C4, 0x5810, 0xD4C5, 0x57E7, 0xD4C6, 0x5801, 0xD4C7, 0x580C, 0xD4C8, 0x57F1, + 0xD4C9, 0x57E9, 0xD4CA, 0x57F0, 0xD4CB, 0x580D, 0xD4CC, 0x5804, 0xD4CD, 0x595C, 0xD4CE, 0x5A60, 0xD4CF, 0x5A58, 0xD4D0, 0x5A55, + 0xD4D1, 0x5A67, 0xD4D2, 0x5A5E, 0xD4D3, 0x5A38, 0xD4D4, 0x5A35, 0xD4D5, 0x5A6D, 0xD4D6, 0x5A50, 0xD4D7, 0x5A5F, 0xD4D8, 0x5A65, + 0xD4D9, 0x5A6C, 0xD4DA, 0x5A53, 0xD4DB, 0x5A64, 0xD4DC, 0x5A57, 0xD4DD, 0x5A43, 0xD4DE, 0x5A5D, 0xD4DF, 0x5A52, 0xD4E0, 0x5A44, + 0xD4E1, 0x5A5B, 0xD4E2, 0x5A48, 0xD4E3, 0x5A8E, 0xD4E4, 0x5A3E, 0xD4E5, 0x5A4D, 0xD4E6, 0x5A39, 0xD4E7, 0x5A4C, 0xD4E8, 0x5A70, + 0xD4E9, 0x5A69, 0xD4EA, 0x5A47, 0xD4EB, 0x5A51, 0xD4EC, 0x5A56, 0xD4ED, 0x5A42, 0xD4EE, 0x5A5C, 0xD4EF, 0x5B72, 0xD4F0, 0x5B6E, + 0xD4F1, 0x5BC1, 0xD4F2, 0x5BC0, 0xD4F3, 0x5C59, 0xD4F4, 0x5D1E, 0xD4F5, 0x5D0B, 0xD4F6, 0x5D1D, 0xD4F7, 0x5D1A, 0xD4F8, 0x5D20, + 0xD4F9, 0x5D0C, 0xD4FA, 0x5D28, 0xD4FB, 0x5D0D, 0xD4FC, 0x5D26, 0xD4FD, 0x5D25, 0xD4FE, 0x5D0F, 0xD540, 0x5D30, 0xD541, 0x5D12, + 0xD542, 0x5D23, 0xD543, 0x5D1F, 0xD544, 0x5D2E, 0xD545, 0x5E3E, 0xD546, 0x5E34, 0xD547, 0x5EB1, 0xD548, 0x5EB4, 0xD549, 0x5EB9, + 0xD54A, 0x5EB2, 0xD54B, 0x5EB3, 0xD54C, 0x5F36, 0xD54D, 0x5F38, 0xD54E, 0x5F9B, 0xD54F, 0x5F96, 0xD550, 0x5F9F, 0xD551, 0x608A, + 0xD552, 0x6090, 0xD553, 0x6086, 0xD554, 0x60BE, 0xD555, 0x60B0, 0xD556, 0x60BA, 0xD557, 0x60D3, 0xD558, 0x60D4, 0xD559, 0x60CF, + 0xD55A, 0x60E4, 0xD55B, 0x60D9, 0xD55C, 0x60DD, 0xD55D, 0x60C8, 0xD55E, 0x60B1, 0xD55F, 0x60DB, 0xD560, 0x60B7, 0xD561, 0x60CA, + 0xD562, 0x60BF, 0xD563, 0x60C3, 0xD564, 0x60CD, 0xD565, 0x60C0, 0xD566, 0x6332, 0xD567, 0x6365, 0xD568, 0x638A, 0xD569, 0x6382, + 0xD56A, 0x637D, 0xD56B, 0x63BD, 0xD56C, 0x639E, 0xD56D, 0x63AD, 0xD56E, 0x639D, 0xD56F, 0x6397, 0xD570, 0x63AB, 0xD571, 0x638E, + 0xD572, 0x636F, 0xD573, 0x6387, 0xD574, 0x6390, 0xD575, 0x636E, 0xD576, 0x63AF, 0xD577, 0x6375, 0xD578, 0x639C, 0xD579, 0x636D, + 0xD57A, 0x63AE, 0xD57B, 0x637C, 0xD57C, 0x63A4, 0xD57D, 0x633B, 0xD57E, 0x639F, 0xD5A1, 0x6378, 0xD5A2, 0x6385, 0xD5A3, 0x6381, + 0xD5A4, 0x6391, 0xD5A5, 0x638D, 0xD5A6, 0x6370, 0xD5A7, 0x6553, 0xD5A8, 0x65CD, 0xD5A9, 0x6665, 0xD5AA, 0x6661, 0xD5AB, 0x665B, + 0xD5AC, 0x6659, 0xD5AD, 0x665C, 0xD5AE, 0x6662, 0xD5AF, 0x6718, 0xD5B0, 0x6879, 0xD5B1, 0x6887, 0xD5B2, 0x6890, 0xD5B3, 0x689C, + 0xD5B4, 0x686D, 0xD5B5, 0x686E, 0xD5B6, 0x68AE, 0xD5B7, 0x68AB, 0xD5B8, 0x6956, 0xD5B9, 0x686F, 0xD5BA, 0x68A3, 0xD5BB, 0x68AC, + 0xD5BC, 0x68A9, 0xD5BD, 0x6875, 0xD5BE, 0x6874, 0xD5BF, 0x68B2, 0xD5C0, 0x688F, 0xD5C1, 0x6877, 0xD5C2, 0x6892, 0xD5C3, 0x687C, + 0xD5C4, 0x686B, 0xD5C5, 0x6872, 0xD5C6, 0x68AA, 0xD5C7, 0x6880, 0xD5C8, 0x6871, 0xD5C9, 0x687E, 0xD5CA, 0x689B, 0xD5CB, 0x6896, + 0xD5CC, 0x688B, 0xD5CD, 0x68A0, 0xD5CE, 0x6889, 0xD5CF, 0x68A4, 0xD5D0, 0x6878, 0xD5D1, 0x687B, 0xD5D2, 0x6891, 0xD5D3, 0x688C, + 0xD5D4, 0x688A, 0xD5D5, 0x687D, 0xD5D6, 0x6B36, 0xD5D7, 0x6B33, 0xD5D8, 0x6B37, 0xD5D9, 0x6B38, 0xD5DA, 0x6B91, 0xD5DB, 0x6B8F, + 0xD5DC, 0x6B8D, 0xD5DD, 0x6B8E, 0xD5DE, 0x6B8C, 0xD5DF, 0x6C2A, 0xD5E0, 0x6DC0, 0xD5E1, 0x6DAB, 0xD5E2, 0x6DB4, 0xD5E3, 0x6DB3, + 0xD5E4, 0x6E74, 0xD5E5, 0x6DAC, 0xD5E6, 0x6DE9, 0xD5E7, 0x6DE2, 0xD5E8, 0x6DB7, 0xD5E9, 0x6DF6, 0xD5EA, 0x6DD4, 0xD5EB, 0x6E00, + 0xD5EC, 0x6DC8, 0xD5ED, 0x6DE0, 0xD5EE, 0x6DDF, 0xD5EF, 0x6DD6, 0xD5F0, 0x6DBE, 0xD5F1, 0x6DE5, 0xD5F2, 0x6DDC, 0xD5F3, 0x6DDD, + 0xD5F4, 0x6DDB, 0xD5F5, 0x6DF4, 0xD5F6, 0x6DCA, 0xD5F7, 0x6DBD, 0xD5F8, 0x6DED, 0xD5F9, 0x6DF0, 0xD5FA, 0x6DBA, 0xD5FB, 0x6DD5, + 0xD5FC, 0x6DC2, 0xD5FD, 0x6DCF, 0xD5FE, 0x6DC9, 0xD640, 0x6DD0, 0xD641, 0x6DF2, 0xD642, 0x6DD3, 0xD643, 0x6DFD, 0xD644, 0x6DD7, + 0xD645, 0x6DCD, 0xD646, 0x6DE3, 0xD647, 0x6DBB, 0xD648, 0x70FA, 0xD649, 0x710D, 0xD64A, 0x70F7, 0xD64B, 0x7117, 0xD64C, 0x70F4, + 0xD64D, 0x710C, 0xD64E, 0x70F0, 0xD64F, 0x7104, 0xD650, 0x70F3, 0xD651, 0x7110, 0xD652, 0x70FC, 0xD653, 0x70FF, 0xD654, 0x7106, + 0xD655, 0x7113, 0xD656, 0x7100, 0xD657, 0x70F8, 0xD658, 0x70F6, 0xD659, 0x710B, 0xD65A, 0x7102, 0xD65B, 0x710E, 0xD65C, 0x727E, + 0xD65D, 0x727B, 0xD65E, 0x727C, 0xD65F, 0x727F, 0xD660, 0x731D, 0xD661, 0x7317, 0xD662, 0x7307, 0xD663, 0x7311, 0xD664, 0x7318, + 0xD665, 0x730A, 0xD666, 0x7308, 0xD667, 0x72FF, 0xD668, 0x730F, 0xD669, 0x731E, 0xD66A, 0x7388, 0xD66B, 0x73F6, 0xD66C, 0x73F8, + 0xD66D, 0x73F5, 0xD66E, 0x7404, 0xD66F, 0x7401, 0xD670, 0x73FD, 0xD671, 0x7407, 0xD672, 0x7400, 0xD673, 0x73FA, 0xD674, 0x73FC, + 0xD675, 0x73FF, 0xD676, 0x740C, 0xD677, 0x740B, 0xD678, 0x73F4, 0xD679, 0x7408, 0xD67A, 0x7564, 0xD67B, 0x7563, 0xD67C, 0x75CE, + 0xD67D, 0x75D2, 0xD67E, 0x75CF, 0xD6A1, 0x75CB, 0xD6A2, 0x75CC, 0xD6A3, 0x75D1, 0xD6A4, 0x75D0, 0xD6A5, 0x768F, 0xD6A6, 0x7689, + 0xD6A7, 0x76D3, 0xD6A8, 0x7739, 0xD6A9, 0x772F, 0xD6AA, 0x772D, 0xD6AB, 0x7731, 0xD6AC, 0x7732, 0xD6AD, 0x7734, 0xD6AE, 0x7733, + 0xD6AF, 0x773D, 0xD6B0, 0x7725, 0xD6B1, 0x773B, 0xD6B2, 0x7735, 0xD6B3, 0x7848, 0xD6B4, 0x7852, 0xD6B5, 0x7849, 0xD6B6, 0x784D, + 0xD6B7, 0x784A, 0xD6B8, 0x784C, 0xD6B9, 0x7826, 0xD6BA, 0x7845, 0xD6BB, 0x7850, 0xD6BC, 0x7964, 0xD6BD, 0x7967, 0xD6BE, 0x7969, + 0xD6BF, 0x796A, 0xD6C0, 0x7963, 0xD6C1, 0x796B, 0xD6C2, 0x7961, 0xD6C3, 0x79BB, 0xD6C4, 0x79FA, 0xD6C5, 0x79F8, 0xD6C6, 0x79F6, + 0xD6C7, 0x79F7, 0xD6C8, 0x7A8F, 0xD6C9, 0x7A94, 0xD6CA, 0x7A90, 0xD6CB, 0x7B35, 0xD6CC, 0x7B47, 0xD6CD, 0x7B34, 0xD6CE, 0x7B25, + 0xD6CF, 0x7B30, 0xD6D0, 0x7B22, 0xD6D1, 0x7B24, 0xD6D2, 0x7B33, 0xD6D3, 0x7B18, 0xD6D4, 0x7B2A, 0xD6D5, 0x7B1D, 0xD6D6, 0x7B31, + 0xD6D7, 0x7B2B, 0xD6D8, 0x7B2D, 0xD6D9, 0x7B2F, 0xD6DA, 0x7B32, 0xD6DB, 0x7B38, 0xD6DC, 0x7B1A, 0xD6DD, 0x7B23, 0xD6DE, 0x7C94, + 0xD6DF, 0x7C98, 0xD6E0, 0x7C96, 0xD6E1, 0x7CA3, 0xD6E2, 0x7D35, 0xD6E3, 0x7D3D, 0xD6E4, 0x7D38, 0xD6E5, 0x7D36, 0xD6E6, 0x7D3A, + 0xD6E7, 0x7D45, 0xD6E8, 0x7D2C, 0xD6E9, 0x7D29, 0xD6EA, 0x7D41, 0xD6EB, 0x7D47, 0xD6EC, 0x7D3E, 0xD6ED, 0x7D3F, 0xD6EE, 0x7D4A, + 0xD6EF, 0x7D3B, 0xD6F0, 0x7D28, 0xD6F1, 0x7F63, 0xD6F2, 0x7F95, 0xD6F3, 0x7F9C, 0xD6F4, 0x7F9D, 0xD6F5, 0x7F9B, 0xD6F6, 0x7FCA, + 0xD6F7, 0x7FCB, 0xD6F8, 0x7FCD, 0xD6F9, 0x7FD0, 0xD6FA, 0x7FD1, 0xD6FB, 0x7FC7, 0xD6FC, 0x7FCF, 0xD6FD, 0x7FC9, 0xD6FE, 0x801F, + 0xD740, 0x801E, 0xD741, 0x801B, 0xD742, 0x8047, 0xD743, 0x8043, 0xD744, 0x8048, 0xD745, 0x8118, 0xD746, 0x8125, 0xD747, 0x8119, + 0xD748, 0x811B, 0xD749, 0x812D, 0xD74A, 0x811F, 0xD74B, 0x812C, 0xD74C, 0x811E, 0xD74D, 0x8121, 0xD74E, 0x8115, 0xD74F, 0x8127, + 0xD750, 0x811D, 0xD751, 0x8122, 0xD752, 0x8211, 0xD753, 0x8238, 0xD754, 0x8233, 0xD755, 0x823A, 0xD756, 0x8234, 0xD757, 0x8232, + 0xD758, 0x8274, 0xD759, 0x8390, 0xD75A, 0x83A3, 0xD75B, 0x83A8, 0xD75C, 0x838D, 0xD75D, 0x837A, 0xD75E, 0x8373, 0xD75F, 0x83A4, + 0xD760, 0x8374, 0xD761, 0x838F, 0xD762, 0x8381, 0xD763, 0x8395, 0xD764, 0x8399, 0xD765, 0x8375, 0xD766, 0x8394, 0xD767, 0x83A9, + 0xD768, 0x837D, 0xD769, 0x8383, 0xD76A, 0x838C, 0xD76B, 0x839D, 0xD76C, 0x839B, 0xD76D, 0x83AA, 0xD76E, 0x838B, 0xD76F, 0x837E, + 0xD770, 0x83A5, 0xD771, 0x83AF, 0xD772, 0x8388, 0xD773, 0x8397, 0xD774, 0x83B0, 0xD775, 0x837F, 0xD776, 0x83A6, 0xD777, 0x8387, + 0xD778, 0x83AE, 0xD779, 0x8376, 0xD77A, 0x839A, 0xD77B, 0x8659, 0xD77C, 0x8656, 0xD77D, 0x86BF, 0xD77E, 0x86B7, 0xD7A1, 0x86C2, + 0xD7A2, 0x86C1, 0xD7A3, 0x86C5, 0xD7A4, 0x86BA, 0xD7A5, 0x86B0, 0xD7A6, 0x86C8, 0xD7A7, 0x86B9, 0xD7A8, 0x86B3, 0xD7A9, 0x86B8, + 0xD7AA, 0x86CC, 0xD7AB, 0x86B4, 0xD7AC, 0x86BB, 0xD7AD, 0x86BC, 0xD7AE, 0x86C3, 0xD7AF, 0x86BD, 0xD7B0, 0x86BE, 0xD7B1, 0x8852, + 0xD7B2, 0x8889, 0xD7B3, 0x8895, 0xD7B4, 0x88A8, 0xD7B5, 0x88A2, 0xD7B6, 0x88AA, 0xD7B7, 0x889A, 0xD7B8, 0x8891, 0xD7B9, 0x88A1, + 0xD7BA, 0x889F, 0xD7BB, 0x8898, 0xD7BC, 0x88A7, 0xD7BD, 0x8899, 0xD7BE, 0x889B, 0xD7BF, 0x8897, 0xD7C0, 0x88A4, 0xD7C1, 0x88AC, + 0xD7C2, 0x888C, 0xD7C3, 0x8893, 0xD7C4, 0x888E, 0xD7C5, 0x8982, 0xD7C6, 0x89D6, 0xD7C7, 0x89D9, 0xD7C8, 0x89D5, 0xD7C9, 0x8A30, + 0xD7CA, 0x8A27, 0xD7CB, 0x8A2C, 0xD7CC, 0x8A1E, 0xD7CD, 0x8C39, 0xD7CE, 0x8C3B, 0xD7CF, 0x8C5C, 0xD7D0, 0x8C5D, 0xD7D1, 0x8C7D, + 0xD7D2, 0x8CA5, 0xD7D3, 0x8D7D, 0xD7D4, 0x8D7B, 0xD7D5, 0x8D79, 0xD7D6, 0x8DBC, 0xD7D7, 0x8DC2, 0xD7D8, 0x8DB9, 0xD7D9, 0x8DBF, + 0xD7DA, 0x8DC1, 0xD7DB, 0x8ED8, 0xD7DC, 0x8EDE, 0xD7DD, 0x8EDD, 0xD7DE, 0x8EDC, 0xD7DF, 0x8ED7, 0xD7E0, 0x8EE0, 0xD7E1, 0x8EE1, + 0xD7E2, 0x9024, 0xD7E3, 0x900B, 0xD7E4, 0x9011, 0xD7E5, 0x901C, 0xD7E6, 0x900C, 0xD7E7, 0x9021, 0xD7E8, 0x90EF, 0xD7E9, 0x90EA, + 0xD7EA, 0x90F0, 0xD7EB, 0x90F4, 0xD7EC, 0x90F2, 0xD7ED, 0x90F3, 0xD7EE, 0x90D4, 0xD7EF, 0x90EB, 0xD7F0, 0x90EC, 0xD7F1, 0x90E9, + 0xD7F2, 0x9156, 0xD7F3, 0x9158, 0xD7F4, 0x915A, 0xD7F5, 0x9153, 0xD7F6, 0x9155, 0xD7F7, 0x91EC, 0xD7F8, 0x91F4, 0xD7F9, 0x91F1, + 0xD7FA, 0x91F3, 0xD7FB, 0x91F8, 0xD7FC, 0x91E4, 0xD7FD, 0x91F9, 0xD7FE, 0x91EA, 0xD840, 0x91EB, 0xD841, 0x91F7, 0xD842, 0x91E8, + 0xD843, 0x91EE, 0xD844, 0x957A, 0xD845, 0x9586, 0xD846, 0x9588, 0xD847, 0x967C, 0xD848, 0x966D, 0xD849, 0x966B, 0xD84A, 0x9671, + 0xD84B, 0x966F, 0xD84C, 0x96BF, 0xD84D, 0x976A, 0xD84E, 0x9804, 0xD84F, 0x98E5, 0xD850, 0x9997, 0xD851, 0x509B, 0xD852, 0x5095, + 0xD853, 0x5094, 0xD854, 0x509E, 0xD855, 0x508B, 0xD856, 0x50A3, 0xD857, 0x5083, 0xD858, 0x508C, 0xD859, 0x508E, 0xD85A, 0x509D, + 0xD85B, 0x5068, 0xD85C, 0x509C, 0xD85D, 0x5092, 0xD85E, 0x5082, 0xD85F, 0x5087, 0xD860, 0x515F, 0xD861, 0x51D4, 0xD862, 0x5312, + 0xD863, 0x5311, 0xD864, 0x53A4, 0xD865, 0x53A7, 0xD866, 0x5591, 0xD867, 0x55A8, 0xD868, 0x55A5, 0xD869, 0x55AD, 0xD86A, 0x5577, + 0xD86B, 0x5645, 0xD86C, 0x55A2, 0xD86D, 0x5593, 0xD86E, 0x5588, 0xD86F, 0x558F, 0xD870, 0x55B5, 0xD871, 0x5581, 0xD872, 0x55A3, + 0xD873, 0x5592, 0xD874, 0x55A4, 0xD875, 0x557D, 0xD876, 0x558C, 0xD877, 0x55A6, 0xD878, 0x557F, 0xD879, 0x5595, 0xD87A, 0x55A1, + 0xD87B, 0x558E, 0xD87C, 0x570C, 0xD87D, 0x5829, 0xD87E, 0x5837, 0xD8A1, 0x5819, 0xD8A2, 0x581E, 0xD8A3, 0x5827, 0xD8A4, 0x5823, + 0xD8A5, 0x5828, 0xD8A6, 0x57F5, 0xD8A7, 0x5848, 0xD8A8, 0x5825, 0xD8A9, 0x581C, 0xD8AA, 0x581B, 0xD8AB, 0x5833, 0xD8AC, 0x583F, + 0xD8AD, 0x5836, 0xD8AE, 0x582E, 0xD8AF, 0x5839, 0xD8B0, 0x5838, 0xD8B1, 0x582D, 0xD8B2, 0x582C, 0xD8B3, 0x583B, 0xD8B4, 0x5961, + 0xD8B5, 0x5AAF, 0xD8B6, 0x5A94, 0xD8B7, 0x5A9F, 0xD8B8, 0x5A7A, 0xD8B9, 0x5AA2, 0xD8BA, 0x5A9E, 0xD8BB, 0x5A78, 0xD8BC, 0x5AA6, + 0xD8BD, 0x5A7C, 0xD8BE, 0x5AA5, 0xD8BF, 0x5AAC, 0xD8C0, 0x5A95, 0xD8C1, 0x5AAE, 0xD8C2, 0x5A37, 0xD8C3, 0x5A84, 0xD8C4, 0x5A8A, + 0xD8C5, 0x5A97, 0xD8C6, 0x5A83, 0xD8C7, 0x5A8B, 0xD8C8, 0x5AA9, 0xD8C9, 0x5A7B, 0xD8CA, 0x5A7D, 0xD8CB, 0x5A8C, 0xD8CC, 0x5A9C, + 0xD8CD, 0x5A8F, 0xD8CE, 0x5A93, 0xD8CF, 0x5A9D, 0xD8D0, 0x5BEA, 0xD8D1, 0x5BCD, 0xD8D2, 0x5BCB, 0xD8D3, 0x5BD4, 0xD8D4, 0x5BD1, + 0xD8D5, 0x5BCA, 0xD8D6, 0x5BCE, 0xD8D7, 0x5C0C, 0xD8D8, 0x5C30, 0xD8D9, 0x5D37, 0xD8DA, 0x5D43, 0xD8DB, 0x5D6B, 0xD8DC, 0x5D41, + 0xD8DD, 0x5D4B, 0xD8DE, 0x5D3F, 0xD8DF, 0x5D35, 0xD8E0, 0x5D51, 0xD8E1, 0x5D4E, 0xD8E2, 0x5D55, 0xD8E3, 0x5D33, 0xD8E4, 0x5D3A, + 0xD8E5, 0x5D52, 0xD8E6, 0x5D3D, 0xD8E7, 0x5D31, 0xD8E8, 0x5D59, 0xD8E9, 0x5D42, 0xD8EA, 0x5D39, 0xD8EB, 0x5D49, 0xD8EC, 0x5D38, + 0xD8ED, 0x5D3C, 0xD8EE, 0x5D32, 0xD8EF, 0x5D36, 0xD8F0, 0x5D40, 0xD8F1, 0x5D45, 0xD8F2, 0x5E44, 0xD8F3, 0x5E41, 0xD8F4, 0x5F58, + 0xD8F5, 0x5FA6, 0xD8F6, 0x5FA5, 0xD8F7, 0x5FAB, 0xD8F8, 0x60C9, 0xD8F9, 0x60B9, 0xD8FA, 0x60CC, 0xD8FB, 0x60E2, 0xD8FC, 0x60CE, + 0xD8FD, 0x60C4, 0xD8FE, 0x6114, 0xD940, 0x60F2, 0xD941, 0x610A, 0xD942, 0x6116, 0xD943, 0x6105, 0xD944, 0x60F5, 0xD945, 0x6113, + 0xD946, 0x60F8, 0xD947, 0x60FC, 0xD948, 0x60FE, 0xD949, 0x60C1, 0xD94A, 0x6103, 0xD94B, 0x6118, 0xD94C, 0x611D, 0xD94D, 0x6110, + 0xD94E, 0x60FF, 0xD94F, 0x6104, 0xD950, 0x610B, 0xD951, 0x624A, 0xD952, 0x6394, 0xD953, 0x63B1, 0xD954, 0x63B0, 0xD955, 0x63CE, + 0xD956, 0x63E5, 0xD957, 0x63E8, 0xD958, 0x63EF, 0xD959, 0x63C3, 0xD95A, 0x649D, 0xD95B, 0x63F3, 0xD95C, 0x63CA, 0xD95D, 0x63E0, + 0xD95E, 0x63F6, 0xD95F, 0x63D5, 0xD960, 0x63F2, 0xD961, 0x63F5, 0xD962, 0x6461, 0xD963, 0x63DF, 0xD964, 0x63BE, 0xD965, 0x63DD, + 0xD966, 0x63DC, 0xD967, 0x63C4, 0xD968, 0x63D8, 0xD969, 0x63D3, 0xD96A, 0x63C2, 0xD96B, 0x63C7, 0xD96C, 0x63CC, 0xD96D, 0x63CB, + 0xD96E, 0x63C8, 0xD96F, 0x63F0, 0xD970, 0x63D7, 0xD971, 0x63D9, 0xD972, 0x6532, 0xD973, 0x6567, 0xD974, 0x656A, 0xD975, 0x6564, + 0xD976, 0x655C, 0xD977, 0x6568, 0xD978, 0x6565, 0xD979, 0x658C, 0xD97A, 0x659D, 0xD97B, 0x659E, 0xD97C, 0x65AE, 0xD97D, 0x65D0, + 0xD97E, 0x65D2, 0xD9A1, 0x667C, 0xD9A2, 0x666C, 0xD9A3, 0x667B, 0xD9A4, 0x6680, 0xD9A5, 0x6671, 0xD9A6, 0x6679, 0xD9A7, 0x666A, + 0xD9A8, 0x6672, 0xD9A9, 0x6701, 0xD9AA, 0x690C, 0xD9AB, 0x68D3, 0xD9AC, 0x6904, 0xD9AD, 0x68DC, 0xD9AE, 0x692A, 0xD9AF, 0x68EC, + 0xD9B0, 0x68EA, 0xD9B1, 0x68F1, 0xD9B2, 0x690F, 0xD9B3, 0x68D6, 0xD9B4, 0x68F7, 0xD9B5, 0x68EB, 0xD9B6, 0x68E4, 0xD9B7, 0x68F6, + 0xD9B8, 0x6913, 0xD9B9, 0x6910, 0xD9BA, 0x68F3, 0xD9BB, 0x68E1, 0xD9BC, 0x6907, 0xD9BD, 0x68CC, 0xD9BE, 0x6908, 0xD9BF, 0x6970, + 0xD9C0, 0x68B4, 0xD9C1, 0x6911, 0xD9C2, 0x68EF, 0xD9C3, 0x68C6, 0xD9C4, 0x6914, 0xD9C5, 0x68F8, 0xD9C6, 0x68D0, 0xD9C7, 0x68FD, + 0xD9C8, 0x68FC, 0xD9C9, 0x68E8, 0xD9CA, 0x690B, 0xD9CB, 0x690A, 0xD9CC, 0x6917, 0xD9CD, 0x68CE, 0xD9CE, 0x68C8, 0xD9CF, 0x68DD, + 0xD9D0, 0x68DE, 0xD9D1, 0x68E6, 0xD9D2, 0x68F4, 0xD9D3, 0x68D1, 0xD9D4, 0x6906, 0xD9D5, 0x68D4, 0xD9D6, 0x68E9, 0xD9D7, 0x6915, + 0xD9D8, 0x6925, 0xD9D9, 0x68C7, 0xD9DA, 0x6B39, 0xD9DB, 0x6B3B, 0xD9DC, 0x6B3F, 0xD9DD, 0x6B3C, 0xD9DE, 0x6B94, 0xD9DF, 0x6B97, + 0xD9E0, 0x6B99, 0xD9E1, 0x6B95, 0xD9E2, 0x6BBD, 0xD9E3, 0x6BF0, 0xD9E4, 0x6BF2, 0xD9E5, 0x6BF3, 0xD9E6, 0x6C30, 0xD9E7, 0x6DFC, + 0xD9E8, 0x6E46, 0xD9E9, 0x6E47, 0xD9EA, 0x6E1F, 0xD9EB, 0x6E49, 0xD9EC, 0x6E88, 0xD9ED, 0x6E3C, 0xD9EE, 0x6E3D, 0xD9EF, 0x6E45, + 0xD9F0, 0x6E62, 0xD9F1, 0x6E2B, 0xD9F2, 0x6E3F, 0xD9F3, 0x6E41, 0xD9F4, 0x6E5D, 0xD9F5, 0x6E73, 0xD9F6, 0x6E1C, 0xD9F7, 0x6E33, + 0xD9F8, 0x6E4B, 0xD9F9, 0x6E40, 0xD9FA, 0x6E51, 0xD9FB, 0x6E3B, 0xD9FC, 0x6E03, 0xD9FD, 0x6E2E, 0xD9FE, 0x6E5E, 0xDA40, 0x6E68, + 0xDA41, 0x6E5C, 0xDA42, 0x6E61, 0xDA43, 0x6E31, 0xDA44, 0x6E28, 0xDA45, 0x6E60, 0xDA46, 0x6E71, 0xDA47, 0x6E6B, 0xDA48, 0x6E39, + 0xDA49, 0x6E22, 0xDA4A, 0x6E30, 0xDA4B, 0x6E53, 0xDA4C, 0x6E65, 0xDA4D, 0x6E27, 0xDA4E, 0x6E78, 0xDA4F, 0x6E64, 0xDA50, 0x6E77, + 0xDA51, 0x6E55, 0xDA52, 0x6E79, 0xDA53, 0x6E52, 0xDA54, 0x6E66, 0xDA55, 0x6E35, 0xDA56, 0x6E36, 0xDA57, 0x6E5A, 0xDA58, 0x7120, + 0xDA59, 0x711E, 0xDA5A, 0x712F, 0xDA5B, 0x70FB, 0xDA5C, 0x712E, 0xDA5D, 0x7131, 0xDA5E, 0x7123, 0xDA5F, 0x7125, 0xDA60, 0x7122, + 0xDA61, 0x7132, 0xDA62, 0x711F, 0xDA63, 0x7128, 0xDA64, 0x713A, 0xDA65, 0x711B, 0xDA66, 0x724B, 0xDA67, 0x725A, 0xDA68, 0x7288, + 0xDA69, 0x7289, 0xDA6A, 0x7286, 0xDA6B, 0x7285, 0xDA6C, 0x728B, 0xDA6D, 0x7312, 0xDA6E, 0x730B, 0xDA6F, 0x7330, 0xDA70, 0x7322, + 0xDA71, 0x7331, 0xDA72, 0x7333, 0xDA73, 0x7327, 0xDA74, 0x7332, 0xDA75, 0x732D, 0xDA76, 0x7326, 0xDA77, 0x7323, 0xDA78, 0x7335, + 0xDA79, 0x730C, 0xDA7A, 0x742E, 0xDA7B, 0x742C, 0xDA7C, 0x7430, 0xDA7D, 0x742B, 0xDA7E, 0x7416, 0xDAA1, 0x741A, 0xDAA2, 0x7421, + 0xDAA3, 0x742D, 0xDAA4, 0x7431, 0xDAA5, 0x7424, 0xDAA6, 0x7423, 0xDAA7, 0x741D, 0xDAA8, 0x7429, 0xDAA9, 0x7420, 0xDAAA, 0x7432, + 0xDAAB, 0x74FB, 0xDAAC, 0x752F, 0xDAAD, 0x756F, 0xDAAE, 0x756C, 0xDAAF, 0x75E7, 0xDAB0, 0x75DA, 0xDAB1, 0x75E1, 0xDAB2, 0x75E6, + 0xDAB3, 0x75DD, 0xDAB4, 0x75DF, 0xDAB5, 0x75E4, 0xDAB6, 0x75D7, 0xDAB7, 0x7695, 0xDAB8, 0x7692, 0xDAB9, 0x76DA, 0xDABA, 0x7746, + 0xDABB, 0x7747, 0xDABC, 0x7744, 0xDABD, 0x774D, 0xDABE, 0x7745, 0xDABF, 0x774A, 0xDAC0, 0x774E, 0xDAC1, 0x774B, 0xDAC2, 0x774C, + 0xDAC3, 0x77DE, 0xDAC4, 0x77EC, 0xDAC5, 0x7860, 0xDAC6, 0x7864, 0xDAC7, 0x7865, 0xDAC8, 0x785C, 0xDAC9, 0x786D, 0xDACA, 0x7871, + 0xDACB, 0x786A, 0xDACC, 0x786E, 0xDACD, 0x7870, 0xDACE, 0x7869, 0xDACF, 0x7868, 0xDAD0, 0x785E, 0xDAD1, 0x7862, 0xDAD2, 0x7974, + 0xDAD3, 0x7973, 0xDAD4, 0x7972, 0xDAD5, 0x7970, 0xDAD6, 0x7A02, 0xDAD7, 0x7A0A, 0xDAD8, 0x7A03, 0xDAD9, 0x7A0C, 0xDADA, 0x7A04, + 0xDADB, 0x7A99, 0xDADC, 0x7AE6, 0xDADD, 0x7AE4, 0xDADE, 0x7B4A, 0xDADF, 0x7B3B, 0xDAE0, 0x7B44, 0xDAE1, 0x7B48, 0xDAE2, 0x7B4C, + 0xDAE3, 0x7B4E, 0xDAE4, 0x7B40, 0xDAE5, 0x7B58, 0xDAE6, 0x7B45, 0xDAE7, 0x7CA2, 0xDAE8, 0x7C9E, 0xDAE9, 0x7CA8, 0xDAEA, 0x7CA1, + 0xDAEB, 0x7D58, 0xDAEC, 0x7D6F, 0xDAED, 0x7D63, 0xDAEE, 0x7D53, 0xDAEF, 0x7D56, 0xDAF0, 0x7D67, 0xDAF1, 0x7D6A, 0xDAF2, 0x7D4F, + 0xDAF3, 0x7D6D, 0xDAF4, 0x7D5C, 0xDAF5, 0x7D6B, 0xDAF6, 0x7D52, 0xDAF7, 0x7D54, 0xDAF8, 0x7D69, 0xDAF9, 0x7D51, 0xDAFA, 0x7D5F, + 0xDAFB, 0x7D4E, 0xDAFC, 0x7F3E, 0xDAFD, 0x7F3F, 0xDAFE, 0x7F65, 0xDB40, 0x7F66, 0xDB41, 0x7FA2, 0xDB42, 0x7FA0, 0xDB43, 0x7FA1, + 0xDB44, 0x7FD7, 0xDB45, 0x8051, 0xDB46, 0x804F, 0xDB47, 0x8050, 0xDB48, 0x80FE, 0xDB49, 0x80D4, 0xDB4A, 0x8143, 0xDB4B, 0x814A, + 0xDB4C, 0x8152, 0xDB4D, 0x814F, 0xDB4E, 0x8147, 0xDB4F, 0x813D, 0xDB50, 0x814D, 0xDB51, 0x813A, 0xDB52, 0x81E6, 0xDB53, 0x81EE, + 0xDB54, 0x81F7, 0xDB55, 0x81F8, 0xDB56, 0x81F9, 0xDB57, 0x8204, 0xDB58, 0x823C, 0xDB59, 0x823D, 0xDB5A, 0x823F, 0xDB5B, 0x8275, + 0xDB5C, 0x833B, 0xDB5D, 0x83CF, 0xDB5E, 0x83F9, 0xDB5F, 0x8423, 0xDB60, 0x83C0, 0xDB61, 0x83E8, 0xDB62, 0x8412, 0xDB63, 0x83E7, + 0xDB64, 0x83E4, 0xDB65, 0x83FC, 0xDB66, 0x83F6, 0xDB67, 0x8410, 0xDB68, 0x83C6, 0xDB69, 0x83C8, 0xDB6A, 0x83EB, 0xDB6B, 0x83E3, + 0xDB6C, 0x83BF, 0xDB6D, 0x8401, 0xDB6E, 0x83DD, 0xDB6F, 0x83E5, 0xDB70, 0x83D8, 0xDB71, 0x83FF, 0xDB72, 0x83E1, 0xDB73, 0x83CB, + 0xDB74, 0x83CE, 0xDB75, 0x83D6, 0xDB76, 0x83F5, 0xDB77, 0x83C9, 0xDB78, 0x8409, 0xDB79, 0x840F, 0xDB7A, 0x83DE, 0xDB7B, 0x8411, + 0xDB7C, 0x8406, 0xDB7D, 0x83C2, 0xDB7E, 0x83F3, 0xDBA1, 0x83D5, 0xDBA2, 0x83FA, 0xDBA3, 0x83C7, 0xDBA4, 0x83D1, 0xDBA5, 0x83EA, + 0xDBA6, 0x8413, 0xDBA7, 0x83C3, 0xDBA8, 0x83EC, 0xDBA9, 0x83EE, 0xDBAA, 0x83C4, 0xDBAB, 0x83FB, 0xDBAC, 0x83D7, 0xDBAD, 0x83E2, + 0xDBAE, 0x841B, 0xDBAF, 0x83DB, 0xDBB0, 0x83FE, 0xDBB1, 0x86D8, 0xDBB2, 0x86E2, 0xDBB3, 0x86E6, 0xDBB4, 0x86D3, 0xDBB5, 0x86E3, + 0xDBB6, 0x86DA, 0xDBB7, 0x86EA, 0xDBB8, 0x86DD, 0xDBB9, 0x86EB, 0xDBBA, 0x86DC, 0xDBBB, 0x86EC, 0xDBBC, 0x86E9, 0xDBBD, 0x86D7, + 0xDBBE, 0x86E8, 0xDBBF, 0x86D1, 0xDBC0, 0x8848, 0xDBC1, 0x8856, 0xDBC2, 0x8855, 0xDBC3, 0x88BA, 0xDBC4, 0x88D7, 0xDBC5, 0x88B9, + 0xDBC6, 0x88B8, 0xDBC7, 0x88C0, 0xDBC8, 0x88BE, 0xDBC9, 0x88B6, 0xDBCA, 0x88BC, 0xDBCB, 0x88B7, 0xDBCC, 0x88BD, 0xDBCD, 0x88B2, + 0xDBCE, 0x8901, 0xDBCF, 0x88C9, 0xDBD0, 0x8995, 0xDBD1, 0x8998, 0xDBD2, 0x8997, 0xDBD3, 0x89DD, 0xDBD4, 0x89DA, 0xDBD5, 0x89DB, + 0xDBD6, 0x8A4E, 0xDBD7, 0x8A4D, 0xDBD8, 0x8A39, 0xDBD9, 0x8A59, 0xDBDA, 0x8A40, 0xDBDB, 0x8A57, 0xDBDC, 0x8A58, 0xDBDD, 0x8A44, + 0xDBDE, 0x8A45, 0xDBDF, 0x8A52, 0xDBE0, 0x8A48, 0xDBE1, 0x8A51, 0xDBE2, 0x8A4A, 0xDBE3, 0x8A4C, 0xDBE4, 0x8A4F, 0xDBE5, 0x8C5F, + 0xDBE6, 0x8C81, 0xDBE7, 0x8C80, 0xDBE8, 0x8CBA, 0xDBE9, 0x8CBE, 0xDBEA, 0x8CB0, 0xDBEB, 0x8CB9, 0xDBEC, 0x8CB5, 0xDBED, 0x8D84, + 0xDBEE, 0x8D80, 0xDBEF, 0x8D89, 0xDBF0, 0x8DD8, 0xDBF1, 0x8DD3, 0xDBF2, 0x8DCD, 0xDBF3, 0x8DC7, 0xDBF4, 0x8DD6, 0xDBF5, 0x8DDC, + 0xDBF6, 0x8DCF, 0xDBF7, 0x8DD5, 0xDBF8, 0x8DD9, 0xDBF9, 0x8DC8, 0xDBFA, 0x8DD7, 0xDBFB, 0x8DC5, 0xDBFC, 0x8EEF, 0xDBFD, 0x8EF7, + 0xDBFE, 0x8EFA, 0xDC40, 0x8EF9, 0xDC41, 0x8EE6, 0xDC42, 0x8EEE, 0xDC43, 0x8EE5, 0xDC44, 0x8EF5, 0xDC45, 0x8EE7, 0xDC46, 0x8EE8, + 0xDC47, 0x8EF6, 0xDC48, 0x8EEB, 0xDC49, 0x8EF1, 0xDC4A, 0x8EEC, 0xDC4B, 0x8EF4, 0xDC4C, 0x8EE9, 0xDC4D, 0x902D, 0xDC4E, 0x9034, + 0xDC4F, 0x902F, 0xDC50, 0x9106, 0xDC51, 0x912C, 0xDC52, 0x9104, 0xDC53, 0x90FF, 0xDC54, 0x90FC, 0xDC55, 0x9108, 0xDC56, 0x90F9, + 0xDC57, 0x90FB, 0xDC58, 0x9101, 0xDC59, 0x9100, 0xDC5A, 0x9107, 0xDC5B, 0x9105, 0xDC5C, 0x9103, 0xDC5D, 0x9161, 0xDC5E, 0x9164, + 0xDC5F, 0x915F, 0xDC60, 0x9162, 0xDC61, 0x9160, 0xDC62, 0x9201, 0xDC63, 0x920A, 0xDC64, 0x9225, 0xDC65, 0x9203, 0xDC66, 0x921A, + 0xDC67, 0x9226, 0xDC68, 0x920F, 0xDC69, 0x920C, 0xDC6A, 0x9200, 0xDC6B, 0x9212, 0xDC6C, 0x91FF, 0xDC6D, 0x91FD, 0xDC6E, 0x9206, + 0xDC6F, 0x9204, 0xDC70, 0x9227, 0xDC71, 0x9202, 0xDC72, 0x921C, 0xDC73, 0x9224, 0xDC74, 0x9219, 0xDC75, 0x9217, 0xDC76, 0x9205, + 0xDC77, 0x9216, 0xDC78, 0x957B, 0xDC79, 0x958D, 0xDC7A, 0x958C, 0xDC7B, 0x9590, 0xDC7C, 0x9687, 0xDC7D, 0x967E, 0xDC7E, 0x9688, + 0xDCA1, 0x9689, 0xDCA2, 0x9683, 0xDCA3, 0x9680, 0xDCA4, 0x96C2, 0xDCA5, 0x96C8, 0xDCA6, 0x96C3, 0xDCA7, 0x96F1, 0xDCA8, 0x96F0, + 0xDCA9, 0x976C, 0xDCAA, 0x9770, 0xDCAB, 0x976E, 0xDCAC, 0x9807, 0xDCAD, 0x98A9, 0xDCAE, 0x98EB, 0xDCAF, 0x9CE6, 0xDCB0, 0x9EF9, + 0xDCB1, 0x4E83, 0xDCB2, 0x4E84, 0xDCB3, 0x4EB6, 0xDCB4, 0x50BD, 0xDCB5, 0x50BF, 0xDCB6, 0x50C6, 0xDCB7, 0x50AE, 0xDCB8, 0x50C4, + 0xDCB9, 0x50CA, 0xDCBA, 0x50B4, 0xDCBB, 0x50C8, 0xDCBC, 0x50C2, 0xDCBD, 0x50B0, 0xDCBE, 0x50C1, 0xDCBF, 0x50BA, 0xDCC0, 0x50B1, + 0xDCC1, 0x50CB, 0xDCC2, 0x50C9, 0xDCC3, 0x50B6, 0xDCC4, 0x50B8, 0xDCC5, 0x51D7, 0xDCC6, 0x527A, 0xDCC7, 0x5278, 0xDCC8, 0x527B, + 0xDCC9, 0x527C, 0xDCCA, 0x55C3, 0xDCCB, 0x55DB, 0xDCCC, 0x55CC, 0xDCCD, 0x55D0, 0xDCCE, 0x55CB, 0xDCCF, 0x55CA, 0xDCD0, 0x55DD, + 0xDCD1, 0x55C0, 0xDCD2, 0x55D4, 0xDCD3, 0x55C4, 0xDCD4, 0x55E9, 0xDCD5, 0x55BF, 0xDCD6, 0x55D2, 0xDCD7, 0x558D, 0xDCD8, 0x55CF, + 0xDCD9, 0x55D5, 0xDCDA, 0x55E2, 0xDCDB, 0x55D6, 0xDCDC, 0x55C8, 0xDCDD, 0x55F2, 0xDCDE, 0x55CD, 0xDCDF, 0x55D9, 0xDCE0, 0x55C2, + 0xDCE1, 0x5714, 0xDCE2, 0x5853, 0xDCE3, 0x5868, 0xDCE4, 0x5864, 0xDCE5, 0x584F, 0xDCE6, 0x584D, 0xDCE7, 0x5849, 0xDCE8, 0x586F, + 0xDCE9, 0x5855, 0xDCEA, 0x584E, 0xDCEB, 0x585D, 0xDCEC, 0x5859, 0xDCED, 0x5865, 0xDCEE, 0x585B, 0xDCEF, 0x583D, 0xDCF0, 0x5863, + 0xDCF1, 0x5871, 0xDCF2, 0x58FC, 0xDCF3, 0x5AC7, 0xDCF4, 0x5AC4, 0xDCF5, 0x5ACB, 0xDCF6, 0x5ABA, 0xDCF7, 0x5AB8, 0xDCF8, 0x5AB1, + 0xDCF9, 0x5AB5, 0xDCFA, 0x5AB0, 0xDCFB, 0x5ABF, 0xDCFC, 0x5AC8, 0xDCFD, 0x5ABB, 0xDCFE, 0x5AC6, 0xDD40, 0x5AB7, 0xDD41, 0x5AC0, + 0xDD42, 0x5ACA, 0xDD43, 0x5AB4, 0xDD44, 0x5AB6, 0xDD45, 0x5ACD, 0xDD46, 0x5AB9, 0xDD47, 0x5A90, 0xDD48, 0x5BD6, 0xDD49, 0x5BD8, + 0xDD4A, 0x5BD9, 0xDD4B, 0x5C1F, 0xDD4C, 0x5C33, 0xDD4D, 0x5D71, 0xDD4E, 0x5D63, 0xDD4F, 0x5D4A, 0xDD50, 0x5D65, 0xDD51, 0x5D72, + 0xDD52, 0x5D6C, 0xDD53, 0x5D5E, 0xDD54, 0x5D68, 0xDD55, 0x5D67, 0xDD56, 0x5D62, 0xDD57, 0x5DF0, 0xDD58, 0x5E4F, 0xDD59, 0x5E4E, + 0xDD5A, 0x5E4A, 0xDD5B, 0x5E4D, 0xDD5C, 0x5E4B, 0xDD5D, 0x5EC5, 0xDD5E, 0x5ECC, 0xDD5F, 0x5EC6, 0xDD60, 0x5ECB, 0xDD61, 0x5EC7, + 0xDD62, 0x5F40, 0xDD63, 0x5FAF, 0xDD64, 0x5FAD, 0xDD65, 0x60F7, 0xDD66, 0x6149, 0xDD67, 0x614A, 0xDD68, 0x612B, 0xDD69, 0x6145, + 0xDD6A, 0x6136, 0xDD6B, 0x6132, 0xDD6C, 0x612E, 0xDD6D, 0x6146, 0xDD6E, 0x612F, 0xDD6F, 0x614F, 0xDD70, 0x6129, 0xDD71, 0x6140, + 0xDD72, 0x6220, 0xDD73, 0x9168, 0xDD74, 0x6223, 0xDD75, 0x6225, 0xDD76, 0x6224, 0xDD77, 0x63C5, 0xDD78, 0x63F1, 0xDD79, 0x63EB, + 0xDD7A, 0x6410, 0xDD7B, 0x6412, 0xDD7C, 0x6409, 0xDD7D, 0x6420, 0xDD7E, 0x6424, 0xDDA1, 0x6433, 0xDDA2, 0x6443, 0xDDA3, 0x641F, + 0xDDA4, 0x6415, 0xDDA5, 0x6418, 0xDDA6, 0x6439, 0xDDA7, 0x6437, 0xDDA8, 0x6422, 0xDDA9, 0x6423, 0xDDAA, 0x640C, 0xDDAB, 0x6426, + 0xDDAC, 0x6430, 0xDDAD, 0x6428, 0xDDAE, 0x6441, 0xDDAF, 0x6435, 0xDDB0, 0x642F, 0xDDB1, 0x640A, 0xDDB2, 0x641A, 0xDDB3, 0x6440, + 0xDDB4, 0x6425, 0xDDB5, 0x6427, 0xDDB6, 0x640B, 0xDDB7, 0x63E7, 0xDDB8, 0x641B, 0xDDB9, 0x642E, 0xDDBA, 0x6421, 0xDDBB, 0x640E, + 0xDDBC, 0x656F, 0xDDBD, 0x6592, 0xDDBE, 0x65D3, 0xDDBF, 0x6686, 0xDDC0, 0x668C, 0xDDC1, 0x6695, 0xDDC2, 0x6690, 0xDDC3, 0x668B, + 0xDDC4, 0x668A, 0xDDC5, 0x6699, 0xDDC6, 0x6694, 0xDDC7, 0x6678, 0xDDC8, 0x6720, 0xDDC9, 0x6966, 0xDDCA, 0x695F, 0xDDCB, 0x6938, + 0xDDCC, 0x694E, 0xDDCD, 0x6962, 0xDDCE, 0x6971, 0xDDCF, 0x693F, 0xDDD0, 0x6945, 0xDDD1, 0x696A, 0xDDD2, 0x6939, 0xDDD3, 0x6942, + 0xDDD4, 0x6957, 0xDDD5, 0x6959, 0xDDD6, 0x697A, 0xDDD7, 0x6948, 0xDDD8, 0x6949, 0xDDD9, 0x6935, 0xDDDA, 0x696C, 0xDDDB, 0x6933, + 0xDDDC, 0x693D, 0xDDDD, 0x6965, 0xDDDE, 0x68F0, 0xDDDF, 0x6978, 0xDDE0, 0x6934, 0xDDE1, 0x6969, 0xDDE2, 0x6940, 0xDDE3, 0x696F, + 0xDDE4, 0x6944, 0xDDE5, 0x6976, 0xDDE6, 0x6958, 0xDDE7, 0x6941, 0xDDE8, 0x6974, 0xDDE9, 0x694C, 0xDDEA, 0x693B, 0xDDEB, 0x694B, + 0xDDEC, 0x6937, 0xDDED, 0x695C, 0xDDEE, 0x694F, 0xDDEF, 0x6951, 0xDDF0, 0x6932, 0xDDF1, 0x6952, 0xDDF2, 0x692F, 0xDDF3, 0x697B, + 0xDDF4, 0x693C, 0xDDF5, 0x6B46, 0xDDF6, 0x6B45, 0xDDF7, 0x6B43, 0xDDF8, 0x6B42, 0xDDF9, 0x6B48, 0xDDFA, 0x6B41, 0xDDFB, 0x6B9B, + 0xDDFC, 0xFA0D, 0xDDFD, 0x6BFB, 0xDDFE, 0x6BFC, 0xDE40, 0x6BF9, 0xDE41, 0x6BF7, 0xDE42, 0x6BF8, 0xDE43, 0x6E9B, 0xDE44, 0x6ED6, + 0xDE45, 0x6EC8, 0xDE46, 0x6E8F, 0xDE47, 0x6EC0, 0xDE48, 0x6E9F, 0xDE49, 0x6E93, 0xDE4A, 0x6E94, 0xDE4B, 0x6EA0, 0xDE4C, 0x6EB1, + 0xDE4D, 0x6EB9, 0xDE4E, 0x6EC6, 0xDE4F, 0x6ED2, 0xDE50, 0x6EBD, 0xDE51, 0x6EC1, 0xDE52, 0x6E9E, 0xDE53, 0x6EC9, 0xDE54, 0x6EB7, + 0xDE55, 0x6EB0, 0xDE56, 0x6ECD, 0xDE57, 0x6EA6, 0xDE58, 0x6ECF, 0xDE59, 0x6EB2, 0xDE5A, 0x6EBE, 0xDE5B, 0x6EC3, 0xDE5C, 0x6EDC, + 0xDE5D, 0x6ED8, 0xDE5E, 0x6E99, 0xDE5F, 0x6E92, 0xDE60, 0x6E8E, 0xDE61, 0x6E8D, 0xDE62, 0x6EA4, 0xDE63, 0x6EA1, 0xDE64, 0x6EBF, + 0xDE65, 0x6EB3, 0xDE66, 0x6ED0, 0xDE67, 0x6ECA, 0xDE68, 0x6E97, 0xDE69, 0x6EAE, 0xDE6A, 0x6EA3, 0xDE6B, 0x7147, 0xDE6C, 0x7154, + 0xDE6D, 0x7152, 0xDE6E, 0x7163, 0xDE6F, 0x7160, 0xDE70, 0x7141, 0xDE71, 0x715D, 0xDE72, 0x7162, 0xDE73, 0x7172, 0xDE74, 0x7178, + 0xDE75, 0x716A, 0xDE76, 0x7161, 0xDE77, 0x7142, 0xDE78, 0x7158, 0xDE79, 0x7143, 0xDE7A, 0x714B, 0xDE7B, 0x7170, 0xDE7C, 0x715F, + 0xDE7D, 0x7150, 0xDE7E, 0x7153, 0xDEA1, 0x7144, 0xDEA2, 0x714D, 0xDEA3, 0x715A, 0xDEA4, 0x724F, 0xDEA5, 0x728D, 0xDEA6, 0x728C, + 0xDEA7, 0x7291, 0xDEA8, 0x7290, 0xDEA9, 0x728E, 0xDEAA, 0x733C, 0xDEAB, 0x7342, 0xDEAC, 0x733B, 0xDEAD, 0x733A, 0xDEAE, 0x7340, + 0xDEAF, 0x734A, 0xDEB0, 0x7349, 0xDEB1, 0x7444, 0xDEB2, 0x744A, 0xDEB3, 0x744B, 0xDEB4, 0x7452, 0xDEB5, 0x7451, 0xDEB6, 0x7457, + 0xDEB7, 0x7440, 0xDEB8, 0x744F, 0xDEB9, 0x7450, 0xDEBA, 0x744E, 0xDEBB, 0x7442, 0xDEBC, 0x7446, 0xDEBD, 0x744D, 0xDEBE, 0x7454, + 0xDEBF, 0x74E1, 0xDEC0, 0x74FF, 0xDEC1, 0x74FE, 0xDEC2, 0x74FD, 0xDEC3, 0x751D, 0xDEC4, 0x7579, 0xDEC5, 0x7577, 0xDEC6, 0x6983, + 0xDEC7, 0x75EF, 0xDEC8, 0x760F, 0xDEC9, 0x7603, 0xDECA, 0x75F7, 0xDECB, 0x75FE, 0xDECC, 0x75FC, 0xDECD, 0x75F9, 0xDECE, 0x75F8, + 0xDECF, 0x7610, 0xDED0, 0x75FB, 0xDED1, 0x75F6, 0xDED2, 0x75ED, 0xDED3, 0x75F5, 0xDED4, 0x75FD, 0xDED5, 0x7699, 0xDED6, 0x76B5, + 0xDED7, 0x76DD, 0xDED8, 0x7755, 0xDED9, 0x775F, 0xDEDA, 0x7760, 0xDEDB, 0x7752, 0xDEDC, 0x7756, 0xDEDD, 0x775A, 0xDEDE, 0x7769, + 0xDEDF, 0x7767, 0xDEE0, 0x7754, 0xDEE1, 0x7759, 0xDEE2, 0x776D, 0xDEE3, 0x77E0, 0xDEE4, 0x7887, 0xDEE5, 0x789A, 0xDEE6, 0x7894, + 0xDEE7, 0x788F, 0xDEE8, 0x7884, 0xDEE9, 0x7895, 0xDEEA, 0x7885, 0xDEEB, 0x7886, 0xDEEC, 0x78A1, 0xDEED, 0x7883, 0xDEEE, 0x7879, + 0xDEEF, 0x7899, 0xDEF0, 0x7880, 0xDEF1, 0x7896, 0xDEF2, 0x787B, 0xDEF3, 0x797C, 0xDEF4, 0x7982, 0xDEF5, 0x797D, 0xDEF6, 0x7979, + 0xDEF7, 0x7A11, 0xDEF8, 0x7A18, 0xDEF9, 0x7A19, 0xDEFA, 0x7A12, 0xDEFB, 0x7A17, 0xDEFC, 0x7A15, 0xDEFD, 0x7A22, 0xDEFE, 0x7A13, + 0xDF40, 0x7A1B, 0xDF41, 0x7A10, 0xDF42, 0x7AA3, 0xDF43, 0x7AA2, 0xDF44, 0x7A9E, 0xDF45, 0x7AEB, 0xDF46, 0x7B66, 0xDF47, 0x7B64, + 0xDF48, 0x7B6D, 0xDF49, 0x7B74, 0xDF4A, 0x7B69, 0xDF4B, 0x7B72, 0xDF4C, 0x7B65, 0xDF4D, 0x7B73, 0xDF4E, 0x7B71, 0xDF4F, 0x7B70, + 0xDF50, 0x7B61, 0xDF51, 0x7B78, 0xDF52, 0x7B76, 0xDF53, 0x7B63, 0xDF54, 0x7CB2, 0xDF55, 0x7CB4, 0xDF56, 0x7CAF, 0xDF57, 0x7D88, + 0xDF58, 0x7D86, 0xDF59, 0x7D80, 0xDF5A, 0x7D8D, 0xDF5B, 0x7D7F, 0xDF5C, 0x7D85, 0xDF5D, 0x7D7A, 0xDF5E, 0x7D8E, 0xDF5F, 0x7D7B, + 0xDF60, 0x7D83, 0xDF61, 0x7D7C, 0xDF62, 0x7D8C, 0xDF63, 0x7D94, 0xDF64, 0x7D84, 0xDF65, 0x7D7D, 0xDF66, 0x7D92, 0xDF67, 0x7F6D, + 0xDF68, 0x7F6B, 0xDF69, 0x7F67, 0xDF6A, 0x7F68, 0xDF6B, 0x7F6C, 0xDF6C, 0x7FA6, 0xDF6D, 0x7FA5, 0xDF6E, 0x7FA7, 0xDF6F, 0x7FDB, + 0xDF70, 0x7FDC, 0xDF71, 0x8021, 0xDF72, 0x8164, 0xDF73, 0x8160, 0xDF74, 0x8177, 0xDF75, 0x815C, 0xDF76, 0x8169, 0xDF77, 0x815B, + 0xDF78, 0x8162, 0xDF79, 0x8172, 0xDF7A, 0x6721, 0xDF7B, 0x815E, 0xDF7C, 0x8176, 0xDF7D, 0x8167, 0xDF7E, 0x816F, 0xDFA1, 0x8144, + 0xDFA2, 0x8161, 0xDFA3, 0x821D, 0xDFA4, 0x8249, 0xDFA5, 0x8244, 0xDFA6, 0x8240, 0xDFA7, 0x8242, 0xDFA8, 0x8245, 0xDFA9, 0x84F1, + 0xDFAA, 0x843F, 0xDFAB, 0x8456, 0xDFAC, 0x8476, 0xDFAD, 0x8479, 0xDFAE, 0x848F, 0xDFAF, 0x848D, 0xDFB0, 0x8465, 0xDFB1, 0x8451, + 0xDFB2, 0x8440, 0xDFB3, 0x8486, 0xDFB4, 0x8467, 0xDFB5, 0x8430, 0xDFB6, 0x844D, 0xDFB7, 0x847D, 0xDFB8, 0x845A, 0xDFB9, 0x8459, + 0xDFBA, 0x8474, 0xDFBB, 0x8473, 0xDFBC, 0x845D, 0xDFBD, 0x8507, 0xDFBE, 0x845E, 0xDFBF, 0x8437, 0xDFC0, 0x843A, 0xDFC1, 0x8434, + 0xDFC2, 0x847A, 0xDFC3, 0x8443, 0xDFC4, 0x8478, 0xDFC5, 0x8432, 0xDFC6, 0x8445, 0xDFC7, 0x8429, 0xDFC8, 0x83D9, 0xDFC9, 0x844B, + 0xDFCA, 0x842F, 0xDFCB, 0x8442, 0xDFCC, 0x842D, 0xDFCD, 0x845F, 0xDFCE, 0x8470, 0xDFCF, 0x8439, 0xDFD0, 0x844E, 0xDFD1, 0x844C, + 0xDFD2, 0x8452, 0xDFD3, 0x846F, 0xDFD4, 0x84C5, 0xDFD5, 0x848E, 0xDFD6, 0x843B, 0xDFD7, 0x8447, 0xDFD8, 0x8436, 0xDFD9, 0x8433, + 0xDFDA, 0x8468, 0xDFDB, 0x847E, 0xDFDC, 0x8444, 0xDFDD, 0x842B, 0xDFDE, 0x8460, 0xDFDF, 0x8454, 0xDFE0, 0x846E, 0xDFE1, 0x8450, + 0xDFE2, 0x870B, 0xDFE3, 0x8704, 0xDFE4, 0x86F7, 0xDFE5, 0x870C, 0xDFE6, 0x86FA, 0xDFE7, 0x86D6, 0xDFE8, 0x86F5, 0xDFE9, 0x874D, + 0xDFEA, 0x86F8, 0xDFEB, 0x870E, 0xDFEC, 0x8709, 0xDFED, 0x8701, 0xDFEE, 0x86F6, 0xDFEF, 0x870D, 0xDFF0, 0x8705, 0xDFF1, 0x88D6, + 0xDFF2, 0x88CB, 0xDFF3, 0x88CD, 0xDFF4, 0x88CE, 0xDFF5, 0x88DE, 0xDFF6, 0x88DB, 0xDFF7, 0x88DA, 0xDFF8, 0x88CC, 0xDFF9, 0x88D0, + 0xDFFA, 0x8985, 0xDFFB, 0x899B, 0xDFFC, 0x89DF, 0xDFFD, 0x89E5, 0xDFFE, 0x89E4, 0xE040, 0x89E1, 0xE041, 0x89E0, 0xE042, 0x89E2, + 0xE043, 0x89DC, 0xE044, 0x89E6, 0xE045, 0x8A76, 0xE046, 0x8A86, 0xE047, 0x8A7F, 0xE048, 0x8A61, 0xE049, 0x8A3F, 0xE04A, 0x8A77, + 0xE04B, 0x8A82, 0xE04C, 0x8A84, 0xE04D, 0x8A75, 0xE04E, 0x8A83, 0xE04F, 0x8A81, 0xE050, 0x8A74, 0xE051, 0x8A7A, 0xE052, 0x8C3C, + 0xE053, 0x8C4B, 0xE054, 0x8C4A, 0xE055, 0x8C65, 0xE056, 0x8C64, 0xE057, 0x8C66, 0xE058, 0x8C86, 0xE059, 0x8C84, 0xE05A, 0x8C85, + 0xE05B, 0x8CCC, 0xE05C, 0x8D68, 0xE05D, 0x8D69, 0xE05E, 0x8D91, 0xE05F, 0x8D8C, 0xE060, 0x8D8E, 0xE061, 0x8D8F, 0xE062, 0x8D8D, + 0xE063, 0x8D93, 0xE064, 0x8D94, 0xE065, 0x8D90, 0xE066, 0x8D92, 0xE067, 0x8DF0, 0xE068, 0x8DE0, 0xE069, 0x8DEC, 0xE06A, 0x8DF1, + 0xE06B, 0x8DEE, 0xE06C, 0x8DD0, 0xE06D, 0x8DE9, 0xE06E, 0x8DE3, 0xE06F, 0x8DE2, 0xE070, 0x8DE7, 0xE071, 0x8DF2, 0xE072, 0x8DEB, + 0xE073, 0x8DF4, 0xE074, 0x8F06, 0xE075, 0x8EFF, 0xE076, 0x8F01, 0xE077, 0x8F00, 0xE078, 0x8F05, 0xE079, 0x8F07, 0xE07A, 0x8F08, + 0xE07B, 0x8F02, 0xE07C, 0x8F0B, 0xE07D, 0x9052, 0xE07E, 0x903F, 0xE0A1, 0x9044, 0xE0A2, 0x9049, 0xE0A3, 0x903D, 0xE0A4, 0x9110, + 0xE0A5, 0x910D, 0xE0A6, 0x910F, 0xE0A7, 0x9111, 0xE0A8, 0x9116, 0xE0A9, 0x9114, 0xE0AA, 0x910B, 0xE0AB, 0x910E, 0xE0AC, 0x916E, + 0xE0AD, 0x916F, 0xE0AE, 0x9248, 0xE0AF, 0x9252, 0xE0B0, 0x9230, 0xE0B1, 0x923A, 0xE0B2, 0x9266, 0xE0B3, 0x9233, 0xE0B4, 0x9265, + 0xE0B5, 0x925E, 0xE0B6, 0x9283, 0xE0B7, 0x922E, 0xE0B8, 0x924A, 0xE0B9, 0x9246, 0xE0BA, 0x926D, 0xE0BB, 0x926C, 0xE0BC, 0x924F, + 0xE0BD, 0x9260, 0xE0BE, 0x9267, 0xE0BF, 0x926F, 0xE0C0, 0x9236, 0xE0C1, 0x9261, 0xE0C2, 0x9270, 0xE0C3, 0x9231, 0xE0C4, 0x9254, + 0xE0C5, 0x9263, 0xE0C6, 0x9250, 0xE0C7, 0x9272, 0xE0C8, 0x924E, 0xE0C9, 0x9253, 0xE0CA, 0x924C, 0xE0CB, 0x9256, 0xE0CC, 0x9232, + 0xE0CD, 0x959F, 0xE0CE, 0x959C, 0xE0CF, 0x959E, 0xE0D0, 0x959B, 0xE0D1, 0x9692, 0xE0D2, 0x9693, 0xE0D3, 0x9691, 0xE0D4, 0x9697, + 0xE0D5, 0x96CE, 0xE0D6, 0x96FA, 0xE0D7, 0x96FD, 0xE0D8, 0x96F8, 0xE0D9, 0x96F5, 0xE0DA, 0x9773, 0xE0DB, 0x9777, 0xE0DC, 0x9778, + 0xE0DD, 0x9772, 0xE0DE, 0x980F, 0xE0DF, 0x980D, 0xE0E0, 0x980E, 0xE0E1, 0x98AC, 0xE0E2, 0x98F6, 0xE0E3, 0x98F9, 0xE0E4, 0x99AF, + 0xE0E5, 0x99B2, 0xE0E6, 0x99B0, 0xE0E7, 0x99B5, 0xE0E8, 0x9AAD, 0xE0E9, 0x9AAB, 0xE0EA, 0x9B5B, 0xE0EB, 0x9CEA, 0xE0EC, 0x9CED, + 0xE0ED, 0x9CE7, 0xE0EE, 0x9E80, 0xE0EF, 0x9EFD, 0xE0F0, 0x50E6, 0xE0F1, 0x50D4, 0xE0F2, 0x50D7, 0xE0F3, 0x50E8, 0xE0F4, 0x50F3, + 0xE0F5, 0x50DB, 0xE0F6, 0x50EA, 0xE0F7, 0x50DD, 0xE0F8, 0x50E4, 0xE0F9, 0x50D3, 0xE0FA, 0x50EC, 0xE0FB, 0x50F0, 0xE0FC, 0x50EF, + 0xE0FD, 0x50E3, 0xE0FE, 0x50E0, 0xE140, 0x51D8, 0xE141, 0x5280, 0xE142, 0x5281, 0xE143, 0x52E9, 0xE144, 0x52EB, 0xE145, 0x5330, + 0xE146, 0x53AC, 0xE147, 0x5627, 0xE148, 0x5615, 0xE149, 0x560C, 0xE14A, 0x5612, 0xE14B, 0x55FC, 0xE14C, 0x560F, 0xE14D, 0x561C, + 0xE14E, 0x5601, 0xE14F, 0x5613, 0xE150, 0x5602, 0xE151, 0x55FA, 0xE152, 0x561D, 0xE153, 0x5604, 0xE154, 0x55FF, 0xE155, 0x55F9, + 0xE156, 0x5889, 0xE157, 0x587C, 0xE158, 0x5890, 0xE159, 0x5898, 0xE15A, 0x5886, 0xE15B, 0x5881, 0xE15C, 0x587F, 0xE15D, 0x5874, + 0xE15E, 0x588B, 0xE15F, 0x587A, 0xE160, 0x5887, 0xE161, 0x5891, 0xE162, 0x588E, 0xE163, 0x5876, 0xE164, 0x5882, 0xE165, 0x5888, + 0xE166, 0x587B, 0xE167, 0x5894, 0xE168, 0x588F, 0xE169, 0x58FE, 0xE16A, 0x596B, 0xE16B, 0x5ADC, 0xE16C, 0x5AEE, 0xE16D, 0x5AE5, + 0xE16E, 0x5AD5, 0xE16F, 0x5AEA, 0xE170, 0x5ADA, 0xE171, 0x5AED, 0xE172, 0x5AEB, 0xE173, 0x5AF3, 0xE174, 0x5AE2, 0xE175, 0x5AE0, + 0xE176, 0x5ADB, 0xE177, 0x5AEC, 0xE178, 0x5ADE, 0xE179, 0x5ADD, 0xE17A, 0x5AD9, 0xE17B, 0x5AE8, 0xE17C, 0x5ADF, 0xE17D, 0x5B77, + 0xE17E, 0x5BE0, 0xE1A1, 0x5BE3, 0xE1A2, 0x5C63, 0xE1A3, 0x5D82, 0xE1A4, 0x5D80, 0xE1A5, 0x5D7D, 0xE1A6, 0x5D86, 0xE1A7, 0x5D7A, + 0xE1A8, 0x5D81, 0xE1A9, 0x5D77, 0xE1AA, 0x5D8A, 0xE1AB, 0x5D89, 0xE1AC, 0x5D88, 0xE1AD, 0x5D7E, 0xE1AE, 0x5D7C, 0xE1AF, 0x5D8D, + 0xE1B0, 0x5D79, 0xE1B1, 0x5D7F, 0xE1B2, 0x5E58, 0xE1B3, 0x5E59, 0xE1B4, 0x5E53, 0xE1B5, 0x5ED8, 0xE1B6, 0x5ED1, 0xE1B7, 0x5ED7, + 0xE1B8, 0x5ECE, 0xE1B9, 0x5EDC, 0xE1BA, 0x5ED5, 0xE1BB, 0x5ED9, 0xE1BC, 0x5ED2, 0xE1BD, 0x5ED4, 0xE1BE, 0x5F44, 0xE1BF, 0x5F43, + 0xE1C0, 0x5F6F, 0xE1C1, 0x5FB6, 0xE1C2, 0x612C, 0xE1C3, 0x6128, 0xE1C4, 0x6141, 0xE1C5, 0x615E, 0xE1C6, 0x6171, 0xE1C7, 0x6173, + 0xE1C8, 0x6152, 0xE1C9, 0x6153, 0xE1CA, 0x6172, 0xE1CB, 0x616C, 0xE1CC, 0x6180, 0xE1CD, 0x6174, 0xE1CE, 0x6154, 0xE1CF, 0x617A, + 0xE1D0, 0x615B, 0xE1D1, 0x6165, 0xE1D2, 0x613B, 0xE1D3, 0x616A, 0xE1D4, 0x6161, 0xE1D5, 0x6156, 0xE1D6, 0x6229, 0xE1D7, 0x6227, + 0xE1D8, 0x622B, 0xE1D9, 0x642B, 0xE1DA, 0x644D, 0xE1DB, 0x645B, 0xE1DC, 0x645D, 0xE1DD, 0x6474, 0xE1DE, 0x6476, 0xE1DF, 0x6472, + 0xE1E0, 0x6473, 0xE1E1, 0x647D, 0xE1E2, 0x6475, 0xE1E3, 0x6466, 0xE1E4, 0x64A6, 0xE1E5, 0x644E, 0xE1E6, 0x6482, 0xE1E7, 0x645E, + 0xE1E8, 0x645C, 0xE1E9, 0x644B, 0xE1EA, 0x6453, 0xE1EB, 0x6460, 0xE1EC, 0x6450, 0xE1ED, 0x647F, 0xE1EE, 0x643F, 0xE1EF, 0x646C, + 0xE1F0, 0x646B, 0xE1F1, 0x6459, 0xE1F2, 0x6465, 0xE1F3, 0x6477, 0xE1F4, 0x6573, 0xE1F5, 0x65A0, 0xE1F6, 0x66A1, 0xE1F7, 0x66A0, + 0xE1F8, 0x669F, 0xE1F9, 0x6705, 0xE1FA, 0x6704, 0xE1FB, 0x6722, 0xE1FC, 0x69B1, 0xE1FD, 0x69B6, 0xE1FE, 0x69C9, 0xE240, 0x69A0, + 0xE241, 0x69CE, 0xE242, 0x6996, 0xE243, 0x69B0, 0xE244, 0x69AC, 0xE245, 0x69BC, 0xE246, 0x6991, 0xE247, 0x6999, 0xE248, 0x698E, + 0xE249, 0x69A7, 0xE24A, 0x698D, 0xE24B, 0x69A9, 0xE24C, 0x69BE, 0xE24D, 0x69AF, 0xE24E, 0x69BF, 0xE24F, 0x69C4, 0xE250, 0x69BD, + 0xE251, 0x69A4, 0xE252, 0x69D4, 0xE253, 0x69B9, 0xE254, 0x69CA, 0xE255, 0x699A, 0xE256, 0x69CF, 0xE257, 0x69B3, 0xE258, 0x6993, + 0xE259, 0x69AA, 0xE25A, 0x69A1, 0xE25B, 0x699E, 0xE25C, 0x69D9, 0xE25D, 0x6997, 0xE25E, 0x6990, 0xE25F, 0x69C2, 0xE260, 0x69B5, + 0xE261, 0x69A5, 0xE262, 0x69C6, 0xE263, 0x6B4A, 0xE264, 0x6B4D, 0xE265, 0x6B4B, 0xE266, 0x6B9E, 0xE267, 0x6B9F, 0xE268, 0x6BA0, + 0xE269, 0x6BC3, 0xE26A, 0x6BC4, 0xE26B, 0x6BFE, 0xE26C, 0x6ECE, 0xE26D, 0x6EF5, 0xE26E, 0x6EF1, 0xE26F, 0x6F03, 0xE270, 0x6F25, + 0xE271, 0x6EF8, 0xE272, 0x6F37, 0xE273, 0x6EFB, 0xE274, 0x6F2E, 0xE275, 0x6F09, 0xE276, 0x6F4E, 0xE277, 0x6F19, 0xE278, 0x6F1A, + 0xE279, 0x6F27, 0xE27A, 0x6F18, 0xE27B, 0x6F3B, 0xE27C, 0x6F12, 0xE27D, 0x6EED, 0xE27E, 0x6F0A, 0xE2A1, 0x6F36, 0xE2A2, 0x6F73, + 0xE2A3, 0x6EF9, 0xE2A4, 0x6EEE, 0xE2A5, 0x6F2D, 0xE2A6, 0x6F40, 0xE2A7, 0x6F30, 0xE2A8, 0x6F3C, 0xE2A9, 0x6F35, 0xE2AA, 0x6EEB, + 0xE2AB, 0x6F07, 0xE2AC, 0x6F0E, 0xE2AD, 0x6F43, 0xE2AE, 0x6F05, 0xE2AF, 0x6EFD, 0xE2B0, 0x6EF6, 0xE2B1, 0x6F39, 0xE2B2, 0x6F1C, + 0xE2B3, 0x6EFC, 0xE2B4, 0x6F3A, 0xE2B5, 0x6F1F, 0xE2B6, 0x6F0D, 0xE2B7, 0x6F1E, 0xE2B8, 0x6F08, 0xE2B9, 0x6F21, 0xE2BA, 0x7187, + 0xE2BB, 0x7190, 0xE2BC, 0x7189, 0xE2BD, 0x7180, 0xE2BE, 0x7185, 0xE2BF, 0x7182, 0xE2C0, 0x718F, 0xE2C1, 0x717B, 0xE2C2, 0x7186, + 0xE2C3, 0x7181, 0xE2C4, 0x7197, 0xE2C5, 0x7244, 0xE2C6, 0x7253, 0xE2C7, 0x7297, 0xE2C8, 0x7295, 0xE2C9, 0x7293, 0xE2CA, 0x7343, + 0xE2CB, 0x734D, 0xE2CC, 0x7351, 0xE2CD, 0x734C, 0xE2CE, 0x7462, 0xE2CF, 0x7473, 0xE2D0, 0x7471, 0xE2D1, 0x7475, 0xE2D2, 0x7472, + 0xE2D3, 0x7467, 0xE2D4, 0x746E, 0xE2D5, 0x7500, 0xE2D6, 0x7502, 0xE2D7, 0x7503, 0xE2D8, 0x757D, 0xE2D9, 0x7590, 0xE2DA, 0x7616, + 0xE2DB, 0x7608, 0xE2DC, 0x760C, 0xE2DD, 0x7615, 0xE2DE, 0x7611, 0xE2DF, 0x760A, 0xE2E0, 0x7614, 0xE2E1, 0x76B8, 0xE2E2, 0x7781, + 0xE2E3, 0x777C, 0xE2E4, 0x7785, 0xE2E5, 0x7782, 0xE2E6, 0x776E, 0xE2E7, 0x7780, 0xE2E8, 0x776F, 0xE2E9, 0x777E, 0xE2EA, 0x7783, + 0xE2EB, 0x78B2, 0xE2EC, 0x78AA, 0xE2ED, 0x78B4, 0xE2EE, 0x78AD, 0xE2EF, 0x78A8, 0xE2F0, 0x787E, 0xE2F1, 0x78AB, 0xE2F2, 0x789E, + 0xE2F3, 0x78A5, 0xE2F4, 0x78A0, 0xE2F5, 0x78AC, 0xE2F6, 0x78A2, 0xE2F7, 0x78A4, 0xE2F8, 0x7998, 0xE2F9, 0x798A, 0xE2FA, 0x798B, + 0xE2FB, 0x7996, 0xE2FC, 0x7995, 0xE2FD, 0x7994, 0xE2FE, 0x7993, 0xE340, 0x7997, 0xE341, 0x7988, 0xE342, 0x7992, 0xE343, 0x7990, + 0xE344, 0x7A2B, 0xE345, 0x7A4A, 0xE346, 0x7A30, 0xE347, 0x7A2F, 0xE348, 0x7A28, 0xE349, 0x7A26, 0xE34A, 0x7AA8, 0xE34B, 0x7AAB, + 0xE34C, 0x7AAC, 0xE34D, 0x7AEE, 0xE34E, 0x7B88, 0xE34F, 0x7B9C, 0xE350, 0x7B8A, 0xE351, 0x7B91, 0xE352, 0x7B90, 0xE353, 0x7B96, + 0xE354, 0x7B8D, 0xE355, 0x7B8C, 0xE356, 0x7B9B, 0xE357, 0x7B8E, 0xE358, 0x7B85, 0xE359, 0x7B98, 0xE35A, 0x5284, 0xE35B, 0x7B99, + 0xE35C, 0x7BA4, 0xE35D, 0x7B82, 0xE35E, 0x7CBB, 0xE35F, 0x7CBF, 0xE360, 0x7CBC, 0xE361, 0x7CBA, 0xE362, 0x7DA7, 0xE363, 0x7DB7, + 0xE364, 0x7DC2, 0xE365, 0x7DA3, 0xE366, 0x7DAA, 0xE367, 0x7DC1, 0xE368, 0x7DC0, 0xE369, 0x7DC5, 0xE36A, 0x7D9D, 0xE36B, 0x7DCE, + 0xE36C, 0x7DC4, 0xE36D, 0x7DC6, 0xE36E, 0x7DCB, 0xE36F, 0x7DCC, 0xE370, 0x7DAF, 0xE371, 0x7DB9, 0xE372, 0x7D96, 0xE373, 0x7DBC, + 0xE374, 0x7D9F, 0xE375, 0x7DA6, 0xE376, 0x7DAE, 0xE377, 0x7DA9, 0xE378, 0x7DA1, 0xE379, 0x7DC9, 0xE37A, 0x7F73, 0xE37B, 0x7FE2, + 0xE37C, 0x7FE3, 0xE37D, 0x7FE5, 0xE37E, 0x7FDE, 0xE3A1, 0x8024, 0xE3A2, 0x805D, 0xE3A3, 0x805C, 0xE3A4, 0x8189, 0xE3A5, 0x8186, + 0xE3A6, 0x8183, 0xE3A7, 0x8187, 0xE3A8, 0x818D, 0xE3A9, 0x818C, 0xE3AA, 0x818B, 0xE3AB, 0x8215, 0xE3AC, 0x8497, 0xE3AD, 0x84A4, + 0xE3AE, 0x84A1, 0xE3AF, 0x849F, 0xE3B0, 0x84BA, 0xE3B1, 0x84CE, 0xE3B2, 0x84C2, 0xE3B3, 0x84AC, 0xE3B4, 0x84AE, 0xE3B5, 0x84AB, + 0xE3B6, 0x84B9, 0xE3B7, 0x84B4, 0xE3B8, 0x84C1, 0xE3B9, 0x84CD, 0xE3BA, 0x84AA, 0xE3BB, 0x849A, 0xE3BC, 0x84B1, 0xE3BD, 0x84D0, + 0xE3BE, 0x849D, 0xE3BF, 0x84A7, 0xE3C0, 0x84BB, 0xE3C1, 0x84A2, 0xE3C2, 0x8494, 0xE3C3, 0x84C7, 0xE3C4, 0x84CC, 0xE3C5, 0x849B, + 0xE3C6, 0x84A9, 0xE3C7, 0x84AF, 0xE3C8, 0x84A8, 0xE3C9, 0x84D6, 0xE3CA, 0x8498, 0xE3CB, 0x84B6, 0xE3CC, 0x84CF, 0xE3CD, 0x84A0, + 0xE3CE, 0x84D7, 0xE3CF, 0x84D4, 0xE3D0, 0x84D2, 0xE3D1, 0x84DB, 0xE3D2, 0x84B0, 0xE3D3, 0x8491, 0xE3D4, 0x8661, 0xE3D5, 0x8733, + 0xE3D6, 0x8723, 0xE3D7, 0x8728, 0xE3D8, 0x876B, 0xE3D9, 0x8740, 0xE3DA, 0x872E, 0xE3DB, 0x871E, 0xE3DC, 0x8721, 0xE3DD, 0x8719, + 0xE3DE, 0x871B, 0xE3DF, 0x8743, 0xE3E0, 0x872C, 0xE3E1, 0x8741, 0xE3E2, 0x873E, 0xE3E3, 0x8746, 0xE3E4, 0x8720, 0xE3E5, 0x8732, + 0xE3E6, 0x872A, 0xE3E7, 0x872D, 0xE3E8, 0x873C, 0xE3E9, 0x8712, 0xE3EA, 0x873A, 0xE3EB, 0x8731, 0xE3EC, 0x8735, 0xE3ED, 0x8742, + 0xE3EE, 0x8726, 0xE3EF, 0x8727, 0xE3F0, 0x8738, 0xE3F1, 0x8724, 0xE3F2, 0x871A, 0xE3F3, 0x8730, 0xE3F4, 0x8711, 0xE3F5, 0x88F7, + 0xE3F6, 0x88E7, 0xE3F7, 0x88F1, 0xE3F8, 0x88F2, 0xE3F9, 0x88FA, 0xE3FA, 0x88FE, 0xE3FB, 0x88EE, 0xE3FC, 0x88FC, 0xE3FD, 0x88F6, + 0xE3FE, 0x88FB, 0xE440, 0x88F0, 0xE441, 0x88EC, 0xE442, 0x88EB, 0xE443, 0x899D, 0xE444, 0x89A1, 0xE445, 0x899F, 0xE446, 0x899E, + 0xE447, 0x89E9, 0xE448, 0x89EB, 0xE449, 0x89E8, 0xE44A, 0x8AAB, 0xE44B, 0x8A99, 0xE44C, 0x8A8B, 0xE44D, 0x8A92, 0xE44E, 0x8A8F, + 0xE44F, 0x8A96, 0xE450, 0x8C3D, 0xE451, 0x8C68, 0xE452, 0x8C69, 0xE453, 0x8CD5, 0xE454, 0x8CCF, 0xE455, 0x8CD7, 0xE456, 0x8D96, + 0xE457, 0x8E09, 0xE458, 0x8E02, 0xE459, 0x8DFF, 0xE45A, 0x8E0D, 0xE45B, 0x8DFD, 0xE45C, 0x8E0A, 0xE45D, 0x8E03, 0xE45E, 0x8E07, + 0xE45F, 0x8E06, 0xE460, 0x8E05, 0xE461, 0x8DFE, 0xE462, 0x8E00, 0xE463, 0x8E04, 0xE464, 0x8F10, 0xE465, 0x8F11, 0xE466, 0x8F0E, + 0xE467, 0x8F0D, 0xE468, 0x9123, 0xE469, 0x911C, 0xE46A, 0x9120, 0xE46B, 0x9122, 0xE46C, 0x911F, 0xE46D, 0x911D, 0xE46E, 0x911A, + 0xE46F, 0x9124, 0xE470, 0x9121, 0xE471, 0x911B, 0xE472, 0x917A, 0xE473, 0x9172, 0xE474, 0x9179, 0xE475, 0x9173, 0xE476, 0x92A5, + 0xE477, 0x92A4, 0xE478, 0x9276, 0xE479, 0x929B, 0xE47A, 0x927A, 0xE47B, 0x92A0, 0xE47C, 0x9294, 0xE47D, 0x92AA, 0xE47E, 0x928D, + 0xE4A1, 0x92A6, 0xE4A2, 0x929A, 0xE4A3, 0x92AB, 0xE4A4, 0x9279, 0xE4A5, 0x9297, 0xE4A6, 0x927F, 0xE4A7, 0x92A3, 0xE4A8, 0x92EE, + 0xE4A9, 0x928E, 0xE4AA, 0x9282, 0xE4AB, 0x9295, 0xE4AC, 0x92A2, 0xE4AD, 0x927D, 0xE4AE, 0x9288, 0xE4AF, 0x92A1, 0xE4B0, 0x928A, + 0xE4B1, 0x9286, 0xE4B2, 0x928C, 0xE4B3, 0x9299, 0xE4B4, 0x92A7, 0xE4B5, 0x927E, 0xE4B6, 0x9287, 0xE4B7, 0x92A9, 0xE4B8, 0x929D, + 0xE4B9, 0x928B, 0xE4BA, 0x922D, 0xE4BB, 0x969E, 0xE4BC, 0x96A1, 0xE4BD, 0x96FF, 0xE4BE, 0x9758, 0xE4BF, 0x977D, 0xE4C0, 0x977A, + 0xE4C1, 0x977E, 0xE4C2, 0x9783, 0xE4C3, 0x9780, 0xE4C4, 0x9782, 0xE4C5, 0x977B, 0xE4C6, 0x9784, 0xE4C7, 0x9781, 0xE4C8, 0x977F, + 0xE4C9, 0x97CE, 0xE4CA, 0x97CD, 0xE4CB, 0x9816, 0xE4CC, 0x98AD, 0xE4CD, 0x98AE, 0xE4CE, 0x9902, 0xE4CF, 0x9900, 0xE4D0, 0x9907, + 0xE4D1, 0x999D, 0xE4D2, 0x999C, 0xE4D3, 0x99C3, 0xE4D4, 0x99B9, 0xE4D5, 0x99BB, 0xE4D6, 0x99BA, 0xE4D7, 0x99C2, 0xE4D8, 0x99BD, + 0xE4D9, 0x99C7, 0xE4DA, 0x9AB1, 0xE4DB, 0x9AE3, 0xE4DC, 0x9AE7, 0xE4DD, 0x9B3E, 0xE4DE, 0x9B3F, 0xE4DF, 0x9B60, 0xE4E0, 0x9B61, + 0xE4E1, 0x9B5F, 0xE4E2, 0x9CF1, 0xE4E3, 0x9CF2, 0xE4E4, 0x9CF5, 0xE4E5, 0x9EA7, 0xE4E6, 0x50FF, 0xE4E7, 0x5103, 0xE4E8, 0x5130, + 0xE4E9, 0x50F8, 0xE4EA, 0x5106, 0xE4EB, 0x5107, 0xE4EC, 0x50F6, 0xE4ED, 0x50FE, 0xE4EE, 0x510B, 0xE4EF, 0x510C, 0xE4F0, 0x50FD, + 0xE4F1, 0x510A, 0xE4F2, 0x528B, 0xE4F3, 0x528C, 0xE4F4, 0x52F1, 0xE4F5, 0x52EF, 0xE4F6, 0x5648, 0xE4F7, 0x5642, 0xE4F8, 0x564C, + 0xE4F9, 0x5635, 0xE4FA, 0x5641, 0xE4FB, 0x564A, 0xE4FC, 0x5649, 0xE4FD, 0x5646, 0xE4FE, 0x5658, 0xE540, 0x565A, 0xE541, 0x5640, + 0xE542, 0x5633, 0xE543, 0x563D, 0xE544, 0x562C, 0xE545, 0x563E, 0xE546, 0x5638, 0xE547, 0x562A, 0xE548, 0x563A, 0xE549, 0x571A, + 0xE54A, 0x58AB, 0xE54B, 0x589D, 0xE54C, 0x58B1, 0xE54D, 0x58A0, 0xE54E, 0x58A3, 0xE54F, 0x58AF, 0xE550, 0x58AC, 0xE551, 0x58A5, + 0xE552, 0x58A1, 0xE553, 0x58FF, 0xE554, 0x5AFF, 0xE555, 0x5AF4, 0xE556, 0x5AFD, 0xE557, 0x5AF7, 0xE558, 0x5AF6, 0xE559, 0x5B03, + 0xE55A, 0x5AF8, 0xE55B, 0x5B02, 0xE55C, 0x5AF9, 0xE55D, 0x5B01, 0xE55E, 0x5B07, 0xE55F, 0x5B05, 0xE560, 0x5B0F, 0xE561, 0x5C67, + 0xE562, 0x5D99, 0xE563, 0x5D97, 0xE564, 0x5D9F, 0xE565, 0x5D92, 0xE566, 0x5DA2, 0xE567, 0x5D93, 0xE568, 0x5D95, 0xE569, 0x5DA0, + 0xE56A, 0x5D9C, 0xE56B, 0x5DA1, 0xE56C, 0x5D9A, 0xE56D, 0x5D9E, 0xE56E, 0x5E69, 0xE56F, 0x5E5D, 0xE570, 0x5E60, 0xE571, 0x5E5C, + 0xE572, 0x7DF3, 0xE573, 0x5EDB, 0xE574, 0x5EDE, 0xE575, 0x5EE1, 0xE576, 0x5F49, 0xE577, 0x5FB2, 0xE578, 0x618B, 0xE579, 0x6183, + 0xE57A, 0x6179, 0xE57B, 0x61B1, 0xE57C, 0x61B0, 0xE57D, 0x61A2, 0xE57E, 0x6189, 0xE5A1, 0x619B, 0xE5A2, 0x6193, 0xE5A3, 0x61AF, + 0xE5A4, 0x61AD, 0xE5A5, 0x619F, 0xE5A6, 0x6192, 0xE5A7, 0x61AA, 0xE5A8, 0x61A1, 0xE5A9, 0x618D, 0xE5AA, 0x6166, 0xE5AB, 0x61B3, + 0xE5AC, 0x622D, 0xE5AD, 0x646E, 0xE5AE, 0x6470, 0xE5AF, 0x6496, 0xE5B0, 0x64A0, 0xE5B1, 0x6485, 0xE5B2, 0x6497, 0xE5B3, 0x649C, + 0xE5B4, 0x648F, 0xE5B5, 0x648B, 0xE5B6, 0x648A, 0xE5B7, 0x648C, 0xE5B8, 0x64A3, 0xE5B9, 0x649F, 0xE5BA, 0x6468, 0xE5BB, 0x64B1, + 0xE5BC, 0x6498, 0xE5BD, 0x6576, 0xE5BE, 0x657A, 0xE5BF, 0x6579, 0xE5C0, 0x657B, 0xE5C1, 0x65B2, 0xE5C2, 0x65B3, 0xE5C3, 0x66B5, + 0xE5C4, 0x66B0, 0xE5C5, 0x66A9, 0xE5C6, 0x66B2, 0xE5C7, 0x66B7, 0xE5C8, 0x66AA, 0xE5C9, 0x66AF, 0xE5CA, 0x6A00, 0xE5CB, 0x6A06, + 0xE5CC, 0x6A17, 0xE5CD, 0x69E5, 0xE5CE, 0x69F8, 0xE5CF, 0x6A15, 0xE5D0, 0x69F1, 0xE5D1, 0x69E4, 0xE5D2, 0x6A20, 0xE5D3, 0x69FF, + 0xE5D4, 0x69EC, 0xE5D5, 0x69E2, 0xE5D6, 0x6A1B, 0xE5D7, 0x6A1D, 0xE5D8, 0x69FE, 0xE5D9, 0x6A27, 0xE5DA, 0x69F2, 0xE5DB, 0x69EE, + 0xE5DC, 0x6A14, 0xE5DD, 0x69F7, 0xE5DE, 0x69E7, 0xE5DF, 0x6A40, 0xE5E0, 0x6A08, 0xE5E1, 0x69E6, 0xE5E2, 0x69FB, 0xE5E3, 0x6A0D, + 0xE5E4, 0x69FC, 0xE5E5, 0x69EB, 0xE5E6, 0x6A09, 0xE5E7, 0x6A04, 0xE5E8, 0x6A18, 0xE5E9, 0x6A25, 0xE5EA, 0x6A0F, 0xE5EB, 0x69F6, + 0xE5EC, 0x6A26, 0xE5ED, 0x6A07, 0xE5EE, 0x69F4, 0xE5EF, 0x6A16, 0xE5F0, 0x6B51, 0xE5F1, 0x6BA5, 0xE5F2, 0x6BA3, 0xE5F3, 0x6BA2, + 0xE5F4, 0x6BA6, 0xE5F5, 0x6C01, 0xE5F6, 0x6C00, 0xE5F7, 0x6BFF, 0xE5F8, 0x6C02, 0xE5F9, 0x6F41, 0xE5FA, 0x6F26, 0xE5FB, 0x6F7E, + 0xE5FC, 0x6F87, 0xE5FD, 0x6FC6, 0xE5FE, 0x6F92, 0xE640, 0x6F8D, 0xE641, 0x6F89, 0xE642, 0x6F8C, 0xE643, 0x6F62, 0xE644, 0x6F4F, + 0xE645, 0x6F85, 0xE646, 0x6F5A, 0xE647, 0x6F96, 0xE648, 0x6F76, 0xE649, 0x6F6C, 0xE64A, 0x6F82, 0xE64B, 0x6F55, 0xE64C, 0x6F72, + 0xE64D, 0x6F52, 0xE64E, 0x6F50, 0xE64F, 0x6F57, 0xE650, 0x6F94, 0xE651, 0x6F93, 0xE652, 0x6F5D, 0xE653, 0x6F00, 0xE654, 0x6F61, + 0xE655, 0x6F6B, 0xE656, 0x6F7D, 0xE657, 0x6F67, 0xE658, 0x6F90, 0xE659, 0x6F53, 0xE65A, 0x6F8B, 0xE65B, 0x6F69, 0xE65C, 0x6F7F, + 0xE65D, 0x6F95, 0xE65E, 0x6F63, 0xE65F, 0x6F77, 0xE660, 0x6F6A, 0xE661, 0x6F7B, 0xE662, 0x71B2, 0xE663, 0x71AF, 0xE664, 0x719B, + 0xE665, 0x71B0, 0xE666, 0x71A0, 0xE667, 0x719A, 0xE668, 0x71A9, 0xE669, 0x71B5, 0xE66A, 0x719D, 0xE66B, 0x71A5, 0xE66C, 0x719E, + 0xE66D, 0x71A4, 0xE66E, 0x71A1, 0xE66F, 0x71AA, 0xE670, 0x719C, 0xE671, 0x71A7, 0xE672, 0x71B3, 0xE673, 0x7298, 0xE674, 0x729A, + 0xE675, 0x7358, 0xE676, 0x7352, 0xE677, 0x735E, 0xE678, 0x735F, 0xE679, 0x7360, 0xE67A, 0x735D, 0xE67B, 0x735B, 0xE67C, 0x7361, + 0xE67D, 0x735A, 0xE67E, 0x7359, 0xE6A1, 0x7362, 0xE6A2, 0x7487, 0xE6A3, 0x7489, 0xE6A4, 0x748A, 0xE6A5, 0x7486, 0xE6A6, 0x7481, + 0xE6A7, 0x747D, 0xE6A8, 0x7485, 0xE6A9, 0x7488, 0xE6AA, 0x747C, 0xE6AB, 0x7479, 0xE6AC, 0x7508, 0xE6AD, 0x7507, 0xE6AE, 0x757E, + 0xE6AF, 0x7625, 0xE6B0, 0x761E, 0xE6B1, 0x7619, 0xE6B2, 0x761D, 0xE6B3, 0x761C, 0xE6B4, 0x7623, 0xE6B5, 0x761A, 0xE6B6, 0x7628, + 0xE6B7, 0x761B, 0xE6B8, 0x769C, 0xE6B9, 0x769D, 0xE6BA, 0x769E, 0xE6BB, 0x769B, 0xE6BC, 0x778D, 0xE6BD, 0x778F, 0xE6BE, 0x7789, + 0xE6BF, 0x7788, 0xE6C0, 0x78CD, 0xE6C1, 0x78BB, 0xE6C2, 0x78CF, 0xE6C3, 0x78CC, 0xE6C4, 0x78D1, 0xE6C5, 0x78CE, 0xE6C6, 0x78D4, + 0xE6C7, 0x78C8, 0xE6C8, 0x78C3, 0xE6C9, 0x78C4, 0xE6CA, 0x78C9, 0xE6CB, 0x799A, 0xE6CC, 0x79A1, 0xE6CD, 0x79A0, 0xE6CE, 0x799C, + 0xE6CF, 0x79A2, 0xE6D0, 0x799B, 0xE6D1, 0x6B76, 0xE6D2, 0x7A39, 0xE6D3, 0x7AB2, 0xE6D4, 0x7AB4, 0xE6D5, 0x7AB3, 0xE6D6, 0x7BB7, + 0xE6D7, 0x7BCB, 0xE6D8, 0x7BBE, 0xE6D9, 0x7BAC, 0xE6DA, 0x7BCE, 0xE6DB, 0x7BAF, 0xE6DC, 0x7BB9, 0xE6DD, 0x7BCA, 0xE6DE, 0x7BB5, + 0xE6DF, 0x7CC5, 0xE6E0, 0x7CC8, 0xE6E1, 0x7CCC, 0xE6E2, 0x7CCB, 0xE6E3, 0x7DF7, 0xE6E4, 0x7DDB, 0xE6E5, 0x7DEA, 0xE6E6, 0x7DE7, + 0xE6E7, 0x7DD7, 0xE6E8, 0x7DE1, 0xE6E9, 0x7E03, 0xE6EA, 0x7DFA, 0xE6EB, 0x7DE6, 0xE6EC, 0x7DF6, 0xE6ED, 0x7DF1, 0xE6EE, 0x7DF0, + 0xE6EF, 0x7DEE, 0xE6F0, 0x7DDF, 0xE6F1, 0x7F76, 0xE6F2, 0x7FAC, 0xE6F3, 0x7FB0, 0xE6F4, 0x7FAD, 0xE6F5, 0x7FED, 0xE6F6, 0x7FEB, + 0xE6F7, 0x7FEA, 0xE6F8, 0x7FEC, 0xE6F9, 0x7FE6, 0xE6FA, 0x7FE8, 0xE6FB, 0x8064, 0xE6FC, 0x8067, 0xE6FD, 0x81A3, 0xE6FE, 0x819F, + 0xE740, 0x819E, 0xE741, 0x8195, 0xE742, 0x81A2, 0xE743, 0x8199, 0xE744, 0x8197, 0xE745, 0x8216, 0xE746, 0x824F, 0xE747, 0x8253, + 0xE748, 0x8252, 0xE749, 0x8250, 0xE74A, 0x824E, 0xE74B, 0x8251, 0xE74C, 0x8524, 0xE74D, 0x853B, 0xE74E, 0x850F, 0xE74F, 0x8500, + 0xE750, 0x8529, 0xE751, 0x850E, 0xE752, 0x8509, 0xE753, 0x850D, 0xE754, 0x851F, 0xE755, 0x850A, 0xE756, 0x8527, 0xE757, 0x851C, + 0xE758, 0x84FB, 0xE759, 0x852B, 0xE75A, 0x84FA, 0xE75B, 0x8508, 0xE75C, 0x850C, 0xE75D, 0x84F4, 0xE75E, 0x852A, 0xE75F, 0x84F2, + 0xE760, 0x8515, 0xE761, 0x84F7, 0xE762, 0x84EB, 0xE763, 0x84F3, 0xE764, 0x84FC, 0xE765, 0x8512, 0xE766, 0x84EA, 0xE767, 0x84E9, + 0xE768, 0x8516, 0xE769, 0x84FE, 0xE76A, 0x8528, 0xE76B, 0x851D, 0xE76C, 0x852E, 0xE76D, 0x8502, 0xE76E, 0x84FD, 0xE76F, 0x851E, + 0xE770, 0x84F6, 0xE771, 0x8531, 0xE772, 0x8526, 0xE773, 0x84E7, 0xE774, 0x84E8, 0xE775, 0x84F0, 0xE776, 0x84EF, 0xE777, 0x84F9, + 0xE778, 0x8518, 0xE779, 0x8520, 0xE77A, 0x8530, 0xE77B, 0x850B, 0xE77C, 0x8519, 0xE77D, 0x852F, 0xE77E, 0x8662, 0xE7A1, 0x8756, + 0xE7A2, 0x8763, 0xE7A3, 0x8764, 0xE7A4, 0x8777, 0xE7A5, 0x87E1, 0xE7A6, 0x8773, 0xE7A7, 0x8758, 0xE7A8, 0x8754, 0xE7A9, 0x875B, + 0xE7AA, 0x8752, 0xE7AB, 0x8761, 0xE7AC, 0x875A, 0xE7AD, 0x8751, 0xE7AE, 0x875E, 0xE7AF, 0x876D, 0xE7B0, 0x876A, 0xE7B1, 0x8750, + 0xE7B2, 0x874E, 0xE7B3, 0x875F, 0xE7B4, 0x875D, 0xE7B5, 0x876F, 0xE7B6, 0x876C, 0xE7B7, 0x877A, 0xE7B8, 0x876E, 0xE7B9, 0x875C, + 0xE7BA, 0x8765, 0xE7BB, 0x874F, 0xE7BC, 0x877B, 0xE7BD, 0x8775, 0xE7BE, 0x8762, 0xE7BF, 0x8767, 0xE7C0, 0x8769, 0xE7C1, 0x885A, + 0xE7C2, 0x8905, 0xE7C3, 0x890C, 0xE7C4, 0x8914, 0xE7C5, 0x890B, 0xE7C6, 0x8917, 0xE7C7, 0x8918, 0xE7C8, 0x8919, 0xE7C9, 0x8906, + 0xE7CA, 0x8916, 0xE7CB, 0x8911, 0xE7CC, 0x890E, 0xE7CD, 0x8909, 0xE7CE, 0x89A2, 0xE7CF, 0x89A4, 0xE7D0, 0x89A3, 0xE7D1, 0x89ED, + 0xE7D2, 0x89F0, 0xE7D3, 0x89EC, 0xE7D4, 0x8ACF, 0xE7D5, 0x8AC6, 0xE7D6, 0x8AB8, 0xE7D7, 0x8AD3, 0xE7D8, 0x8AD1, 0xE7D9, 0x8AD4, + 0xE7DA, 0x8AD5, 0xE7DB, 0x8ABB, 0xE7DC, 0x8AD7, 0xE7DD, 0x8ABE, 0xE7DE, 0x8AC0, 0xE7DF, 0x8AC5, 0xE7E0, 0x8AD8, 0xE7E1, 0x8AC3, + 0xE7E2, 0x8ABA, 0xE7E3, 0x8ABD, 0xE7E4, 0x8AD9, 0xE7E5, 0x8C3E, 0xE7E6, 0x8C4D, 0xE7E7, 0x8C8F, 0xE7E8, 0x8CE5, 0xE7E9, 0x8CDF, + 0xE7EA, 0x8CD9, 0xE7EB, 0x8CE8, 0xE7EC, 0x8CDA, 0xE7ED, 0x8CDD, 0xE7EE, 0x8CE7, 0xE7EF, 0x8DA0, 0xE7F0, 0x8D9C, 0xE7F1, 0x8DA1, + 0xE7F2, 0x8D9B, 0xE7F3, 0x8E20, 0xE7F4, 0x8E23, 0xE7F5, 0x8E25, 0xE7F6, 0x8E24, 0xE7F7, 0x8E2E, 0xE7F8, 0x8E15, 0xE7F9, 0x8E1B, + 0xE7FA, 0x8E16, 0xE7FB, 0x8E11, 0xE7FC, 0x8E19, 0xE7FD, 0x8E26, 0xE7FE, 0x8E27, 0xE840, 0x8E14, 0xE841, 0x8E12, 0xE842, 0x8E18, + 0xE843, 0x8E13, 0xE844, 0x8E1C, 0xE845, 0x8E17, 0xE846, 0x8E1A, 0xE847, 0x8F2C, 0xE848, 0x8F24, 0xE849, 0x8F18, 0xE84A, 0x8F1A, + 0xE84B, 0x8F20, 0xE84C, 0x8F23, 0xE84D, 0x8F16, 0xE84E, 0x8F17, 0xE84F, 0x9073, 0xE850, 0x9070, 0xE851, 0x906F, 0xE852, 0x9067, + 0xE853, 0x906B, 0xE854, 0x912F, 0xE855, 0x912B, 0xE856, 0x9129, 0xE857, 0x912A, 0xE858, 0x9132, 0xE859, 0x9126, 0xE85A, 0x912E, + 0xE85B, 0x9185, 0xE85C, 0x9186, 0xE85D, 0x918A, 0xE85E, 0x9181, 0xE85F, 0x9182, 0xE860, 0x9184, 0xE861, 0x9180, 0xE862, 0x92D0, + 0xE863, 0x92C3, 0xE864, 0x92C4, 0xE865, 0x92C0, 0xE866, 0x92D9, 0xE867, 0x92B6, 0xE868, 0x92CF, 0xE869, 0x92F1, 0xE86A, 0x92DF, + 0xE86B, 0x92D8, 0xE86C, 0x92E9, 0xE86D, 0x92D7, 0xE86E, 0x92DD, 0xE86F, 0x92CC, 0xE870, 0x92EF, 0xE871, 0x92C2, 0xE872, 0x92E8, + 0xE873, 0x92CA, 0xE874, 0x92C8, 0xE875, 0x92CE, 0xE876, 0x92E6, 0xE877, 0x92CD, 0xE878, 0x92D5, 0xE879, 0x92C9, 0xE87A, 0x92E0, + 0xE87B, 0x92DE, 0xE87C, 0x92E7, 0xE87D, 0x92D1, 0xE87E, 0x92D3, 0xE8A1, 0x92B5, 0xE8A2, 0x92E1, 0xE8A3, 0x92C6, 0xE8A4, 0x92B4, + 0xE8A5, 0x957C, 0xE8A6, 0x95AC, 0xE8A7, 0x95AB, 0xE8A8, 0x95AE, 0xE8A9, 0x95B0, 0xE8AA, 0x96A4, 0xE8AB, 0x96A2, 0xE8AC, 0x96D3, + 0xE8AD, 0x9705, 0xE8AE, 0x9708, 0xE8AF, 0x9702, 0xE8B0, 0x975A, 0xE8B1, 0x978A, 0xE8B2, 0x978E, 0xE8B3, 0x9788, 0xE8B4, 0x97D0, + 0xE8B5, 0x97CF, 0xE8B6, 0x981E, 0xE8B7, 0x981D, 0xE8B8, 0x9826, 0xE8B9, 0x9829, 0xE8BA, 0x9828, 0xE8BB, 0x9820, 0xE8BC, 0x981B, + 0xE8BD, 0x9827, 0xE8BE, 0x98B2, 0xE8BF, 0x9908, 0xE8C0, 0x98FA, 0xE8C1, 0x9911, 0xE8C2, 0x9914, 0xE8C3, 0x9916, 0xE8C4, 0x9917, + 0xE8C5, 0x9915, 0xE8C6, 0x99DC, 0xE8C7, 0x99CD, 0xE8C8, 0x99CF, 0xE8C9, 0x99D3, 0xE8CA, 0x99D4, 0xE8CB, 0x99CE, 0xE8CC, 0x99C9, + 0xE8CD, 0x99D6, 0xE8CE, 0x99D8, 0xE8CF, 0x99CB, 0xE8D0, 0x99D7, 0xE8D1, 0x99CC, 0xE8D2, 0x9AB3, 0xE8D3, 0x9AEC, 0xE8D4, 0x9AEB, + 0xE8D5, 0x9AF3, 0xE8D6, 0x9AF2, 0xE8D7, 0x9AF1, 0xE8D8, 0x9B46, 0xE8D9, 0x9B43, 0xE8DA, 0x9B67, 0xE8DB, 0x9B74, 0xE8DC, 0x9B71, + 0xE8DD, 0x9B66, 0xE8DE, 0x9B76, 0xE8DF, 0x9B75, 0xE8E0, 0x9B70, 0xE8E1, 0x9B68, 0xE8E2, 0x9B64, 0xE8E3, 0x9B6C, 0xE8E4, 0x9CFC, + 0xE8E5, 0x9CFA, 0xE8E6, 0x9CFD, 0xE8E7, 0x9CFF, 0xE8E8, 0x9CF7, 0xE8E9, 0x9D07, 0xE8EA, 0x9D00, 0xE8EB, 0x9CF9, 0xE8EC, 0x9CFB, + 0xE8ED, 0x9D08, 0xE8EE, 0x9D05, 0xE8EF, 0x9D04, 0xE8F0, 0x9E83, 0xE8F1, 0x9ED3, 0xE8F2, 0x9F0F, 0xE8F3, 0x9F10, 0xE8F4, 0x511C, + 0xE8F5, 0x5113, 0xE8F6, 0x5117, 0xE8F7, 0x511A, 0xE8F8, 0x5111, 0xE8F9, 0x51DE, 0xE8FA, 0x5334, 0xE8FB, 0x53E1, 0xE8FC, 0x5670, + 0xE8FD, 0x5660, 0xE8FE, 0x566E, 0xE940, 0x5673, 0xE941, 0x5666, 0xE942, 0x5663, 0xE943, 0x566D, 0xE944, 0x5672, 0xE945, 0x565E, + 0xE946, 0x5677, 0xE947, 0x571C, 0xE948, 0x571B, 0xE949, 0x58C8, 0xE94A, 0x58BD, 0xE94B, 0x58C9, 0xE94C, 0x58BF, 0xE94D, 0x58BA, + 0xE94E, 0x58C2, 0xE94F, 0x58BC, 0xE950, 0x58C6, 0xE951, 0x5B17, 0xE952, 0x5B19, 0xE953, 0x5B1B, 0xE954, 0x5B21, 0xE955, 0x5B14, + 0xE956, 0x5B13, 0xE957, 0x5B10, 0xE958, 0x5B16, 0xE959, 0x5B28, 0xE95A, 0x5B1A, 0xE95B, 0x5B20, 0xE95C, 0x5B1E, 0xE95D, 0x5BEF, + 0xE95E, 0x5DAC, 0xE95F, 0x5DB1, 0xE960, 0x5DA9, 0xE961, 0x5DA7, 0xE962, 0x5DB5, 0xE963, 0x5DB0, 0xE964, 0x5DAE, 0xE965, 0x5DAA, + 0xE966, 0x5DA8, 0xE967, 0x5DB2, 0xE968, 0x5DAD, 0xE969, 0x5DAF, 0xE96A, 0x5DB4, 0xE96B, 0x5E67, 0xE96C, 0x5E68, 0xE96D, 0x5E66, + 0xE96E, 0x5E6F, 0xE96F, 0x5EE9, 0xE970, 0x5EE7, 0xE971, 0x5EE6, 0xE972, 0x5EE8, 0xE973, 0x5EE5, 0xE974, 0x5F4B, 0xE975, 0x5FBC, + 0xE976, 0x619D, 0xE977, 0x61A8, 0xE978, 0x6196, 0xE979, 0x61C5, 0xE97A, 0x61B4, 0xE97B, 0x61C6, 0xE97C, 0x61C1, 0xE97D, 0x61CC, + 0xE97E, 0x61BA, 0xE9A1, 0x61BF, 0xE9A2, 0x61B8, 0xE9A3, 0x618C, 0xE9A4, 0x64D7, 0xE9A5, 0x64D6, 0xE9A6, 0x64D0, 0xE9A7, 0x64CF, + 0xE9A8, 0x64C9, 0xE9A9, 0x64BD, 0xE9AA, 0x6489, 0xE9AB, 0x64C3, 0xE9AC, 0x64DB, 0xE9AD, 0x64F3, 0xE9AE, 0x64D9, 0xE9AF, 0x6533, + 0xE9B0, 0x657F, 0xE9B1, 0x657C, 0xE9B2, 0x65A2, 0xE9B3, 0x66C8, 0xE9B4, 0x66BE, 0xE9B5, 0x66C0, 0xE9B6, 0x66CA, 0xE9B7, 0x66CB, + 0xE9B8, 0x66CF, 0xE9B9, 0x66BD, 0xE9BA, 0x66BB, 0xE9BB, 0x66BA, 0xE9BC, 0x66CC, 0xE9BD, 0x6723, 0xE9BE, 0x6A34, 0xE9BF, 0x6A66, + 0xE9C0, 0x6A49, 0xE9C1, 0x6A67, 0xE9C2, 0x6A32, 0xE9C3, 0x6A68, 0xE9C4, 0x6A3E, 0xE9C5, 0x6A5D, 0xE9C6, 0x6A6D, 0xE9C7, 0x6A76, + 0xE9C8, 0x6A5B, 0xE9C9, 0x6A51, 0xE9CA, 0x6A28, 0xE9CB, 0x6A5A, 0xE9CC, 0x6A3B, 0xE9CD, 0x6A3F, 0xE9CE, 0x6A41, 0xE9CF, 0x6A6A, + 0xE9D0, 0x6A64, 0xE9D1, 0x6A50, 0xE9D2, 0x6A4F, 0xE9D3, 0x6A54, 0xE9D4, 0x6A6F, 0xE9D5, 0x6A69, 0xE9D6, 0x6A60, 0xE9D7, 0x6A3C, + 0xE9D8, 0x6A5E, 0xE9D9, 0x6A56, 0xE9DA, 0x6A55, 0xE9DB, 0x6A4D, 0xE9DC, 0x6A4E, 0xE9DD, 0x6A46, 0xE9DE, 0x6B55, 0xE9DF, 0x6B54, + 0xE9E0, 0x6B56, 0xE9E1, 0x6BA7, 0xE9E2, 0x6BAA, 0xE9E3, 0x6BAB, 0xE9E4, 0x6BC8, 0xE9E5, 0x6BC7, 0xE9E6, 0x6C04, 0xE9E7, 0x6C03, + 0xE9E8, 0x6C06, 0xE9E9, 0x6FAD, 0xE9EA, 0x6FCB, 0xE9EB, 0x6FA3, 0xE9EC, 0x6FC7, 0xE9ED, 0x6FBC, 0xE9EE, 0x6FCE, 0xE9EF, 0x6FC8, + 0xE9F0, 0x6F5E, 0xE9F1, 0x6FC4, 0xE9F2, 0x6FBD, 0xE9F3, 0x6F9E, 0xE9F4, 0x6FCA, 0xE9F5, 0x6FA8, 0xE9F6, 0x7004, 0xE9F7, 0x6FA5, + 0xE9F8, 0x6FAE, 0xE9F9, 0x6FBA, 0xE9FA, 0x6FAC, 0xE9FB, 0x6FAA, 0xE9FC, 0x6FCF, 0xE9FD, 0x6FBF, 0xE9FE, 0x6FB8, 0xEA40, 0x6FA2, + 0xEA41, 0x6FC9, 0xEA42, 0x6FAB, 0xEA43, 0x6FCD, 0xEA44, 0x6FAF, 0xEA45, 0x6FB2, 0xEA46, 0x6FB0, 0xEA47, 0x71C5, 0xEA48, 0x71C2, + 0xEA49, 0x71BF, 0xEA4A, 0x71B8, 0xEA4B, 0x71D6, 0xEA4C, 0x71C0, 0xEA4D, 0x71C1, 0xEA4E, 0x71CB, 0xEA4F, 0x71D4, 0xEA50, 0x71CA, + 0xEA51, 0x71C7, 0xEA52, 0x71CF, 0xEA53, 0x71BD, 0xEA54, 0x71D8, 0xEA55, 0x71BC, 0xEA56, 0x71C6, 0xEA57, 0x71DA, 0xEA58, 0x71DB, + 0xEA59, 0x729D, 0xEA5A, 0x729E, 0xEA5B, 0x7369, 0xEA5C, 0x7366, 0xEA5D, 0x7367, 0xEA5E, 0x736C, 0xEA5F, 0x7365, 0xEA60, 0x736B, + 0xEA61, 0x736A, 0xEA62, 0x747F, 0xEA63, 0x749A, 0xEA64, 0x74A0, 0xEA65, 0x7494, 0xEA66, 0x7492, 0xEA67, 0x7495, 0xEA68, 0x74A1, + 0xEA69, 0x750B, 0xEA6A, 0x7580, 0xEA6B, 0x762F, 0xEA6C, 0x762D, 0xEA6D, 0x7631, 0xEA6E, 0x763D, 0xEA6F, 0x7633, 0xEA70, 0x763C, + 0xEA71, 0x7635, 0xEA72, 0x7632, 0xEA73, 0x7630, 0xEA74, 0x76BB, 0xEA75, 0x76E6, 0xEA76, 0x779A, 0xEA77, 0x779D, 0xEA78, 0x77A1, + 0xEA79, 0x779C, 0xEA7A, 0x779B, 0xEA7B, 0x77A2, 0xEA7C, 0x77A3, 0xEA7D, 0x7795, 0xEA7E, 0x7799, 0xEAA1, 0x7797, 0xEAA2, 0x78DD, + 0xEAA3, 0x78E9, 0xEAA4, 0x78E5, 0xEAA5, 0x78EA, 0xEAA6, 0x78DE, 0xEAA7, 0x78E3, 0xEAA8, 0x78DB, 0xEAA9, 0x78E1, 0xEAAA, 0x78E2, + 0xEAAB, 0x78ED, 0xEAAC, 0x78DF, 0xEAAD, 0x78E0, 0xEAAE, 0x79A4, 0xEAAF, 0x7A44, 0xEAB0, 0x7A48, 0xEAB1, 0x7A47, 0xEAB2, 0x7AB6, + 0xEAB3, 0x7AB8, 0xEAB4, 0x7AB5, 0xEAB5, 0x7AB1, 0xEAB6, 0x7AB7, 0xEAB7, 0x7BDE, 0xEAB8, 0x7BE3, 0xEAB9, 0x7BE7, 0xEABA, 0x7BDD, + 0xEABB, 0x7BD5, 0xEABC, 0x7BE5, 0xEABD, 0x7BDA, 0xEABE, 0x7BE8, 0xEABF, 0x7BF9, 0xEAC0, 0x7BD4, 0xEAC1, 0x7BEA, 0xEAC2, 0x7BE2, + 0xEAC3, 0x7BDC, 0xEAC4, 0x7BEB, 0xEAC5, 0x7BD8, 0xEAC6, 0x7BDF, 0xEAC7, 0x7CD2, 0xEAC8, 0x7CD4, 0xEAC9, 0x7CD7, 0xEACA, 0x7CD0, + 0xEACB, 0x7CD1, 0xEACC, 0x7E12, 0xEACD, 0x7E21, 0xEACE, 0x7E17, 0xEACF, 0x7E0C, 0xEAD0, 0x7E1F, 0xEAD1, 0x7E20, 0xEAD2, 0x7E13, + 0xEAD3, 0x7E0E, 0xEAD4, 0x7E1C, 0xEAD5, 0x7E15, 0xEAD6, 0x7E1A, 0xEAD7, 0x7E22, 0xEAD8, 0x7E0B, 0xEAD9, 0x7E0F, 0xEADA, 0x7E16, + 0xEADB, 0x7E0D, 0xEADC, 0x7E14, 0xEADD, 0x7E25, 0xEADE, 0x7E24, 0xEADF, 0x7F43, 0xEAE0, 0x7F7B, 0xEAE1, 0x7F7C, 0xEAE2, 0x7F7A, + 0xEAE3, 0x7FB1, 0xEAE4, 0x7FEF, 0xEAE5, 0x802A, 0xEAE6, 0x8029, 0xEAE7, 0x806C, 0xEAE8, 0x81B1, 0xEAE9, 0x81A6, 0xEAEA, 0x81AE, + 0xEAEB, 0x81B9, 0xEAEC, 0x81B5, 0xEAED, 0x81AB, 0xEAEE, 0x81B0, 0xEAEF, 0x81AC, 0xEAF0, 0x81B4, 0xEAF1, 0x81B2, 0xEAF2, 0x81B7, + 0xEAF3, 0x81A7, 0xEAF4, 0x81F2, 0xEAF5, 0x8255, 0xEAF6, 0x8256, 0xEAF7, 0x8257, 0xEAF8, 0x8556, 0xEAF9, 0x8545, 0xEAFA, 0x856B, + 0xEAFB, 0x854D, 0xEAFC, 0x8553, 0xEAFD, 0x8561, 0xEAFE, 0x8558, 0xEB40, 0x8540, 0xEB41, 0x8546, 0xEB42, 0x8564, 0xEB43, 0x8541, + 0xEB44, 0x8562, 0xEB45, 0x8544, 0xEB46, 0x8551, 0xEB47, 0x8547, 0xEB48, 0x8563, 0xEB49, 0x853E, 0xEB4A, 0x855B, 0xEB4B, 0x8571, + 0xEB4C, 0x854E, 0xEB4D, 0x856E, 0xEB4E, 0x8575, 0xEB4F, 0x8555, 0xEB50, 0x8567, 0xEB51, 0x8560, 0xEB52, 0x858C, 0xEB53, 0x8566, + 0xEB54, 0x855D, 0xEB55, 0x8554, 0xEB56, 0x8565, 0xEB57, 0x856C, 0xEB58, 0x8663, 0xEB59, 0x8665, 0xEB5A, 0x8664, 0xEB5B, 0x879B, + 0xEB5C, 0x878F, 0xEB5D, 0x8797, 0xEB5E, 0x8793, 0xEB5F, 0x8792, 0xEB60, 0x8788, 0xEB61, 0x8781, 0xEB62, 0x8796, 0xEB63, 0x8798, + 0xEB64, 0x8779, 0xEB65, 0x8787, 0xEB66, 0x87A3, 0xEB67, 0x8785, 0xEB68, 0x8790, 0xEB69, 0x8791, 0xEB6A, 0x879D, 0xEB6B, 0x8784, + 0xEB6C, 0x8794, 0xEB6D, 0x879C, 0xEB6E, 0x879A, 0xEB6F, 0x8789, 0xEB70, 0x891E, 0xEB71, 0x8926, 0xEB72, 0x8930, 0xEB73, 0x892D, + 0xEB74, 0x892E, 0xEB75, 0x8927, 0xEB76, 0x8931, 0xEB77, 0x8922, 0xEB78, 0x8929, 0xEB79, 0x8923, 0xEB7A, 0x892F, 0xEB7B, 0x892C, + 0xEB7C, 0x891F, 0xEB7D, 0x89F1, 0xEB7E, 0x8AE0, 0xEBA1, 0x8AE2, 0xEBA2, 0x8AF2, 0xEBA3, 0x8AF4, 0xEBA4, 0x8AF5, 0xEBA5, 0x8ADD, + 0xEBA6, 0x8B14, 0xEBA7, 0x8AE4, 0xEBA8, 0x8ADF, 0xEBA9, 0x8AF0, 0xEBAA, 0x8AC8, 0xEBAB, 0x8ADE, 0xEBAC, 0x8AE1, 0xEBAD, 0x8AE8, + 0xEBAE, 0x8AFF, 0xEBAF, 0x8AEF, 0xEBB0, 0x8AFB, 0xEBB1, 0x8C91, 0xEBB2, 0x8C92, 0xEBB3, 0x8C90, 0xEBB4, 0x8CF5, 0xEBB5, 0x8CEE, + 0xEBB6, 0x8CF1, 0xEBB7, 0x8CF0, 0xEBB8, 0x8CF3, 0xEBB9, 0x8D6C, 0xEBBA, 0x8D6E, 0xEBBB, 0x8DA5, 0xEBBC, 0x8DA7, 0xEBBD, 0x8E33, + 0xEBBE, 0x8E3E, 0xEBBF, 0x8E38, 0xEBC0, 0x8E40, 0xEBC1, 0x8E45, 0xEBC2, 0x8E36, 0xEBC3, 0x8E3C, 0xEBC4, 0x8E3D, 0xEBC5, 0x8E41, + 0xEBC6, 0x8E30, 0xEBC7, 0x8E3F, 0xEBC8, 0x8EBD, 0xEBC9, 0x8F36, 0xEBCA, 0x8F2E, 0xEBCB, 0x8F35, 0xEBCC, 0x8F32, 0xEBCD, 0x8F39, + 0xEBCE, 0x8F37, 0xEBCF, 0x8F34, 0xEBD0, 0x9076, 0xEBD1, 0x9079, 0xEBD2, 0x907B, 0xEBD3, 0x9086, 0xEBD4, 0x90FA, 0xEBD5, 0x9133, + 0xEBD6, 0x9135, 0xEBD7, 0x9136, 0xEBD8, 0x9193, 0xEBD9, 0x9190, 0xEBDA, 0x9191, 0xEBDB, 0x918D, 0xEBDC, 0x918F, 0xEBDD, 0x9327, + 0xEBDE, 0x931E, 0xEBDF, 0x9308, 0xEBE0, 0x931F, 0xEBE1, 0x9306, 0xEBE2, 0x930F, 0xEBE3, 0x937A, 0xEBE4, 0x9338, 0xEBE5, 0x933C, + 0xEBE6, 0x931B, 0xEBE7, 0x9323, 0xEBE8, 0x9312, 0xEBE9, 0x9301, 0xEBEA, 0x9346, 0xEBEB, 0x932D, 0xEBEC, 0x930E, 0xEBED, 0x930D, + 0xEBEE, 0x92CB, 0xEBEF, 0x931D, 0xEBF0, 0x92FA, 0xEBF1, 0x9325, 0xEBF2, 0x9313, 0xEBF3, 0x92F9, 0xEBF4, 0x92F7, 0xEBF5, 0x9334, + 0xEBF6, 0x9302, 0xEBF7, 0x9324, 0xEBF8, 0x92FF, 0xEBF9, 0x9329, 0xEBFA, 0x9339, 0xEBFB, 0x9335, 0xEBFC, 0x932A, 0xEBFD, 0x9314, + 0xEBFE, 0x930C, 0xEC40, 0x930B, 0xEC41, 0x92FE, 0xEC42, 0x9309, 0xEC43, 0x9300, 0xEC44, 0x92FB, 0xEC45, 0x9316, 0xEC46, 0x95BC, + 0xEC47, 0x95CD, 0xEC48, 0x95BE, 0xEC49, 0x95B9, 0xEC4A, 0x95BA, 0xEC4B, 0x95B6, 0xEC4C, 0x95BF, 0xEC4D, 0x95B5, 0xEC4E, 0x95BD, + 0xEC4F, 0x96A9, 0xEC50, 0x96D4, 0xEC51, 0x970B, 0xEC52, 0x9712, 0xEC53, 0x9710, 0xEC54, 0x9799, 0xEC55, 0x9797, 0xEC56, 0x9794, + 0xEC57, 0x97F0, 0xEC58, 0x97F8, 0xEC59, 0x9835, 0xEC5A, 0x982F, 0xEC5B, 0x9832, 0xEC5C, 0x9924, 0xEC5D, 0x991F, 0xEC5E, 0x9927, + 0xEC5F, 0x9929, 0xEC60, 0x999E, 0xEC61, 0x99EE, 0xEC62, 0x99EC, 0xEC63, 0x99E5, 0xEC64, 0x99E4, 0xEC65, 0x99F0, 0xEC66, 0x99E3, + 0xEC67, 0x99EA, 0xEC68, 0x99E9, 0xEC69, 0x99E7, 0xEC6A, 0x9AB9, 0xEC6B, 0x9ABF, 0xEC6C, 0x9AB4, 0xEC6D, 0x9ABB, 0xEC6E, 0x9AF6, + 0xEC6F, 0x9AFA, 0xEC70, 0x9AF9, 0xEC71, 0x9AF7, 0xEC72, 0x9B33, 0xEC73, 0x9B80, 0xEC74, 0x9B85, 0xEC75, 0x9B87, 0xEC76, 0x9B7C, + 0xEC77, 0x9B7E, 0xEC78, 0x9B7B, 0xEC79, 0x9B82, 0xEC7A, 0x9B93, 0xEC7B, 0x9B92, 0xEC7C, 0x9B90, 0xEC7D, 0x9B7A, 0xEC7E, 0x9B95, + 0xECA1, 0x9B7D, 0xECA2, 0x9B88, 0xECA3, 0x9D25, 0xECA4, 0x9D17, 0xECA5, 0x9D20, 0xECA6, 0x9D1E, 0xECA7, 0x9D14, 0xECA8, 0x9D29, + 0xECA9, 0x9D1D, 0xECAA, 0x9D18, 0xECAB, 0x9D22, 0xECAC, 0x9D10, 0xECAD, 0x9D19, 0xECAE, 0x9D1F, 0xECAF, 0x9E88, 0xECB0, 0x9E86, + 0xECB1, 0x9E87, 0xECB2, 0x9EAE, 0xECB3, 0x9EAD, 0xECB4, 0x9ED5, 0xECB5, 0x9ED6, 0xECB6, 0x9EFA, 0xECB7, 0x9F12, 0xECB8, 0x9F3D, + 0xECB9, 0x5126, 0xECBA, 0x5125, 0xECBB, 0x5122, 0xECBC, 0x5124, 0xECBD, 0x5120, 0xECBE, 0x5129, 0xECBF, 0x52F4, 0xECC0, 0x5693, + 0xECC1, 0x568C, 0xECC2, 0x568D, 0xECC3, 0x5686, 0xECC4, 0x5684, 0xECC5, 0x5683, 0xECC6, 0x567E, 0xECC7, 0x5682, 0xECC8, 0x567F, + 0xECC9, 0x5681, 0xECCA, 0x58D6, 0xECCB, 0x58D4, 0xECCC, 0x58CF, 0xECCD, 0x58D2, 0xECCE, 0x5B2D, 0xECCF, 0x5B25, 0xECD0, 0x5B32, + 0xECD1, 0x5B23, 0xECD2, 0x5B2C, 0xECD3, 0x5B27, 0xECD4, 0x5B26, 0xECD5, 0x5B2F, 0xECD6, 0x5B2E, 0xECD7, 0x5B7B, 0xECD8, 0x5BF1, + 0xECD9, 0x5BF2, 0xECDA, 0x5DB7, 0xECDB, 0x5E6C, 0xECDC, 0x5E6A, 0xECDD, 0x5FBE, 0xECDE, 0x5FBB, 0xECDF, 0x61C3, 0xECE0, 0x61B5, + 0xECE1, 0x61BC, 0xECE2, 0x61E7, 0xECE3, 0x61E0, 0xECE4, 0x61E5, 0xECE5, 0x61E4, 0xECE6, 0x61E8, 0xECE7, 0x61DE, 0xECE8, 0x64EF, + 0xECE9, 0x64E9, 0xECEA, 0x64E3, 0xECEB, 0x64EB, 0xECEC, 0x64E4, 0xECED, 0x64E8, 0xECEE, 0x6581, 0xECEF, 0x6580, 0xECF0, 0x65B6, + 0xECF1, 0x65DA, 0xECF2, 0x66D2, 0xECF3, 0x6A8D, 0xECF4, 0x6A96, 0xECF5, 0x6A81, 0xECF6, 0x6AA5, 0xECF7, 0x6A89, 0xECF8, 0x6A9F, + 0xECF9, 0x6A9B, 0xECFA, 0x6AA1, 0xECFB, 0x6A9E, 0xECFC, 0x6A87, 0xECFD, 0x6A93, 0xECFE, 0x6A8E, 0xED40, 0x6A95, 0xED41, 0x6A83, + 0xED42, 0x6AA8, 0xED43, 0x6AA4, 0xED44, 0x6A91, 0xED45, 0x6A7F, 0xED46, 0x6AA6, 0xED47, 0x6A9A, 0xED48, 0x6A85, 0xED49, 0x6A8C, + 0xED4A, 0x6A92, 0xED4B, 0x6B5B, 0xED4C, 0x6BAD, 0xED4D, 0x6C09, 0xED4E, 0x6FCC, 0xED4F, 0x6FA9, 0xED50, 0x6FF4, 0xED51, 0x6FD4, + 0xED52, 0x6FE3, 0xED53, 0x6FDC, 0xED54, 0x6FED, 0xED55, 0x6FE7, 0xED56, 0x6FE6, 0xED57, 0x6FDE, 0xED58, 0x6FF2, 0xED59, 0x6FDD, + 0xED5A, 0x6FE2, 0xED5B, 0x6FE8, 0xED5C, 0x71E1, 0xED5D, 0x71F1, 0xED5E, 0x71E8, 0xED5F, 0x71F2, 0xED60, 0x71E4, 0xED61, 0x71F0, + 0xED62, 0x71E2, 0xED63, 0x7373, 0xED64, 0x736E, 0xED65, 0x736F, 0xED66, 0x7497, 0xED67, 0x74B2, 0xED68, 0x74AB, 0xED69, 0x7490, + 0xED6A, 0x74AA, 0xED6B, 0x74AD, 0xED6C, 0x74B1, 0xED6D, 0x74A5, 0xED6E, 0x74AF, 0xED6F, 0x7510, 0xED70, 0x7511, 0xED71, 0x7512, + 0xED72, 0x750F, 0xED73, 0x7584, 0xED74, 0x7643, 0xED75, 0x7648, 0xED76, 0x7649, 0xED77, 0x7647, 0xED78, 0x76A4, 0xED79, 0x76E9, + 0xED7A, 0x77B5, 0xED7B, 0x77AB, 0xED7C, 0x77B2, 0xED7D, 0x77B7, 0xED7E, 0x77B6, 0xEDA1, 0x77B4, 0xEDA2, 0x77B1, 0xEDA3, 0x77A8, + 0xEDA4, 0x77F0, 0xEDA5, 0x78F3, 0xEDA6, 0x78FD, 0xEDA7, 0x7902, 0xEDA8, 0x78FB, 0xEDA9, 0x78FC, 0xEDAA, 0x78F2, 0xEDAB, 0x7905, + 0xEDAC, 0x78F9, 0xEDAD, 0x78FE, 0xEDAE, 0x7904, 0xEDAF, 0x79AB, 0xEDB0, 0x79A8, 0xEDB1, 0x7A5C, 0xEDB2, 0x7A5B, 0xEDB3, 0x7A56, + 0xEDB4, 0x7A58, 0xEDB5, 0x7A54, 0xEDB6, 0x7A5A, 0xEDB7, 0x7ABE, 0xEDB8, 0x7AC0, 0xEDB9, 0x7AC1, 0xEDBA, 0x7C05, 0xEDBB, 0x7C0F, + 0xEDBC, 0x7BF2, 0xEDBD, 0x7C00, 0xEDBE, 0x7BFF, 0xEDBF, 0x7BFB, 0xEDC0, 0x7C0E, 0xEDC1, 0x7BF4, 0xEDC2, 0x7C0B, 0xEDC3, 0x7BF3, + 0xEDC4, 0x7C02, 0xEDC5, 0x7C09, 0xEDC6, 0x7C03, 0xEDC7, 0x7C01, 0xEDC8, 0x7BF8, 0xEDC9, 0x7BFD, 0xEDCA, 0x7C06, 0xEDCB, 0x7BF0, + 0xEDCC, 0x7BF1, 0xEDCD, 0x7C10, 0xEDCE, 0x7C0A, 0xEDCF, 0x7CE8, 0xEDD0, 0x7E2D, 0xEDD1, 0x7E3C, 0xEDD2, 0x7E42, 0xEDD3, 0x7E33, + 0xEDD4, 0x9848, 0xEDD5, 0x7E38, 0xEDD6, 0x7E2A, 0xEDD7, 0x7E49, 0xEDD8, 0x7E40, 0xEDD9, 0x7E47, 0xEDDA, 0x7E29, 0xEDDB, 0x7E4C, + 0xEDDC, 0x7E30, 0xEDDD, 0x7E3B, 0xEDDE, 0x7E36, 0xEDDF, 0x7E44, 0xEDE0, 0x7E3A, 0xEDE1, 0x7F45, 0xEDE2, 0x7F7F, 0xEDE3, 0x7F7E, + 0xEDE4, 0x7F7D, 0xEDE5, 0x7FF4, 0xEDE6, 0x7FF2, 0xEDE7, 0x802C, 0xEDE8, 0x81BB, 0xEDE9, 0x81C4, 0xEDEA, 0x81CC, 0xEDEB, 0x81CA, + 0xEDEC, 0x81C5, 0xEDED, 0x81C7, 0xEDEE, 0x81BC, 0xEDEF, 0x81E9, 0xEDF0, 0x825B, 0xEDF1, 0x825A, 0xEDF2, 0x825C, 0xEDF3, 0x8583, + 0xEDF4, 0x8580, 0xEDF5, 0x858F, 0xEDF6, 0x85A7, 0xEDF7, 0x8595, 0xEDF8, 0x85A0, 0xEDF9, 0x858B, 0xEDFA, 0x85A3, 0xEDFB, 0x857B, + 0xEDFC, 0x85A4, 0xEDFD, 0x859A, 0xEDFE, 0x859E, 0xEE40, 0x8577, 0xEE41, 0x857C, 0xEE42, 0x8589, 0xEE43, 0x85A1, 0xEE44, 0x857A, + 0xEE45, 0x8578, 0xEE46, 0x8557, 0xEE47, 0x858E, 0xEE48, 0x8596, 0xEE49, 0x8586, 0xEE4A, 0x858D, 0xEE4B, 0x8599, 0xEE4C, 0x859D, + 0xEE4D, 0x8581, 0xEE4E, 0x85A2, 0xEE4F, 0x8582, 0xEE50, 0x8588, 0xEE51, 0x8585, 0xEE52, 0x8579, 0xEE53, 0x8576, 0xEE54, 0x8598, + 0xEE55, 0x8590, 0xEE56, 0x859F, 0xEE57, 0x8668, 0xEE58, 0x87BE, 0xEE59, 0x87AA, 0xEE5A, 0x87AD, 0xEE5B, 0x87C5, 0xEE5C, 0x87B0, + 0xEE5D, 0x87AC, 0xEE5E, 0x87B9, 0xEE5F, 0x87B5, 0xEE60, 0x87BC, 0xEE61, 0x87AE, 0xEE62, 0x87C9, 0xEE63, 0x87C3, 0xEE64, 0x87C2, + 0xEE65, 0x87CC, 0xEE66, 0x87B7, 0xEE67, 0x87AF, 0xEE68, 0x87C4, 0xEE69, 0x87CA, 0xEE6A, 0x87B4, 0xEE6B, 0x87B6, 0xEE6C, 0x87BF, + 0xEE6D, 0x87B8, 0xEE6E, 0x87BD, 0xEE6F, 0x87DE, 0xEE70, 0x87B2, 0xEE71, 0x8935, 0xEE72, 0x8933, 0xEE73, 0x893C, 0xEE74, 0x893E, + 0xEE75, 0x8941, 0xEE76, 0x8952, 0xEE77, 0x8937, 0xEE78, 0x8942, 0xEE79, 0x89AD, 0xEE7A, 0x89AF, 0xEE7B, 0x89AE, 0xEE7C, 0x89F2, + 0xEE7D, 0x89F3, 0xEE7E, 0x8B1E, 0xEEA1, 0x8B18, 0xEEA2, 0x8B16, 0xEEA3, 0x8B11, 0xEEA4, 0x8B05, 0xEEA5, 0x8B0B, 0xEEA6, 0x8B22, + 0xEEA7, 0x8B0F, 0xEEA8, 0x8B12, 0xEEA9, 0x8B15, 0xEEAA, 0x8B07, 0xEEAB, 0x8B0D, 0xEEAC, 0x8B08, 0xEEAD, 0x8B06, 0xEEAE, 0x8B1C, + 0xEEAF, 0x8B13, 0xEEB0, 0x8B1A, 0xEEB1, 0x8C4F, 0xEEB2, 0x8C70, 0xEEB3, 0x8C72, 0xEEB4, 0x8C71, 0xEEB5, 0x8C6F, 0xEEB6, 0x8C95, + 0xEEB7, 0x8C94, 0xEEB8, 0x8CF9, 0xEEB9, 0x8D6F, 0xEEBA, 0x8E4E, 0xEEBB, 0x8E4D, 0xEEBC, 0x8E53, 0xEEBD, 0x8E50, 0xEEBE, 0x8E4C, + 0xEEBF, 0x8E47, 0xEEC0, 0x8F43, 0xEEC1, 0x8F40, 0xEEC2, 0x9085, 0xEEC3, 0x907E, 0xEEC4, 0x9138, 0xEEC5, 0x919A, 0xEEC6, 0x91A2, + 0xEEC7, 0x919B, 0xEEC8, 0x9199, 0xEEC9, 0x919F, 0xEECA, 0x91A1, 0xEECB, 0x919D, 0xEECC, 0x91A0, 0xEECD, 0x93A1, 0xEECE, 0x9383, + 0xEECF, 0x93AF, 0xEED0, 0x9364, 0xEED1, 0x9356, 0xEED2, 0x9347, 0xEED3, 0x937C, 0xEED4, 0x9358, 0xEED5, 0x935C, 0xEED6, 0x9376, + 0xEED7, 0x9349, 0xEED8, 0x9350, 0xEED9, 0x9351, 0xEEDA, 0x9360, 0xEEDB, 0x936D, 0xEEDC, 0x938F, 0xEEDD, 0x934C, 0xEEDE, 0x936A, + 0xEEDF, 0x9379, 0xEEE0, 0x9357, 0xEEE1, 0x9355, 0xEEE2, 0x9352, 0xEEE3, 0x934F, 0xEEE4, 0x9371, 0xEEE5, 0x9377, 0xEEE6, 0x937B, + 0xEEE7, 0x9361, 0xEEE8, 0x935E, 0xEEE9, 0x9363, 0xEEEA, 0x9367, 0xEEEB, 0x9380, 0xEEEC, 0x934E, 0xEEED, 0x9359, 0xEEEE, 0x95C7, + 0xEEEF, 0x95C0, 0xEEF0, 0x95C9, 0xEEF1, 0x95C3, 0xEEF2, 0x95C5, 0xEEF3, 0x95B7, 0xEEF4, 0x96AE, 0xEEF5, 0x96B0, 0xEEF6, 0x96AC, + 0xEEF7, 0x9720, 0xEEF8, 0x971F, 0xEEF9, 0x9718, 0xEEFA, 0x971D, 0xEEFB, 0x9719, 0xEEFC, 0x979A, 0xEEFD, 0x97A1, 0xEEFE, 0x979C, + 0xEF40, 0x979E, 0xEF41, 0x979D, 0xEF42, 0x97D5, 0xEF43, 0x97D4, 0xEF44, 0x97F1, 0xEF45, 0x9841, 0xEF46, 0x9844, 0xEF47, 0x984A, + 0xEF48, 0x9849, 0xEF49, 0x9845, 0xEF4A, 0x9843, 0xEF4B, 0x9925, 0xEF4C, 0x992B, 0xEF4D, 0x992C, 0xEF4E, 0x992A, 0xEF4F, 0x9933, + 0xEF50, 0x9932, 0xEF51, 0x992F, 0xEF52, 0x992D, 0xEF53, 0x9931, 0xEF54, 0x9930, 0xEF55, 0x9998, 0xEF56, 0x99A3, 0xEF57, 0x99A1, + 0xEF58, 0x9A02, 0xEF59, 0x99FA, 0xEF5A, 0x99F4, 0xEF5B, 0x99F7, 0xEF5C, 0x99F9, 0xEF5D, 0x99F8, 0xEF5E, 0x99F6, 0xEF5F, 0x99FB, + 0xEF60, 0x99FD, 0xEF61, 0x99FE, 0xEF62, 0x99FC, 0xEF63, 0x9A03, 0xEF64, 0x9ABE, 0xEF65, 0x9AFE, 0xEF66, 0x9AFD, 0xEF67, 0x9B01, + 0xEF68, 0x9AFC, 0xEF69, 0x9B48, 0xEF6A, 0x9B9A, 0xEF6B, 0x9BA8, 0xEF6C, 0x9B9E, 0xEF6D, 0x9B9B, 0xEF6E, 0x9BA6, 0xEF6F, 0x9BA1, + 0xEF70, 0x9BA5, 0xEF71, 0x9BA4, 0xEF72, 0x9B86, 0xEF73, 0x9BA2, 0xEF74, 0x9BA0, 0xEF75, 0x9BAF, 0xEF76, 0x9D33, 0xEF77, 0x9D41, + 0xEF78, 0x9D67, 0xEF79, 0x9D36, 0xEF7A, 0x9D2E, 0xEF7B, 0x9D2F, 0xEF7C, 0x9D31, 0xEF7D, 0x9D38, 0xEF7E, 0x9D30, 0xEFA1, 0x9D45, + 0xEFA2, 0x9D42, 0xEFA3, 0x9D43, 0xEFA4, 0x9D3E, 0xEFA5, 0x9D37, 0xEFA6, 0x9D40, 0xEFA7, 0x9D3D, 0xEFA8, 0x7FF5, 0xEFA9, 0x9D2D, + 0xEFAA, 0x9E8A, 0xEFAB, 0x9E89, 0xEFAC, 0x9E8D, 0xEFAD, 0x9EB0, 0xEFAE, 0x9EC8, 0xEFAF, 0x9EDA, 0xEFB0, 0x9EFB, 0xEFB1, 0x9EFF, + 0xEFB2, 0x9F24, 0xEFB3, 0x9F23, 0xEFB4, 0x9F22, 0xEFB5, 0x9F54, 0xEFB6, 0x9FA0, 0xEFB7, 0x5131, 0xEFB8, 0x512D, 0xEFB9, 0x512E, + 0xEFBA, 0x5698, 0xEFBB, 0x569C, 0xEFBC, 0x5697, 0xEFBD, 0x569A, 0xEFBE, 0x569D, 0xEFBF, 0x5699, 0xEFC0, 0x5970, 0xEFC1, 0x5B3C, + 0xEFC2, 0x5C69, 0xEFC3, 0x5C6A, 0xEFC4, 0x5DC0, 0xEFC5, 0x5E6D, 0xEFC6, 0x5E6E, 0xEFC7, 0x61D8, 0xEFC8, 0x61DF, 0xEFC9, 0x61ED, + 0xEFCA, 0x61EE, 0xEFCB, 0x61F1, 0xEFCC, 0x61EA, 0xEFCD, 0x61F0, 0xEFCE, 0x61EB, 0xEFCF, 0x61D6, 0xEFD0, 0x61E9, 0xEFD1, 0x64FF, + 0xEFD2, 0x6504, 0xEFD3, 0x64FD, 0xEFD4, 0x64F8, 0xEFD5, 0x6501, 0xEFD6, 0x6503, 0xEFD7, 0x64FC, 0xEFD8, 0x6594, 0xEFD9, 0x65DB, + 0xEFDA, 0x66DA, 0xEFDB, 0x66DB, 0xEFDC, 0x66D8, 0xEFDD, 0x6AC5, 0xEFDE, 0x6AB9, 0xEFDF, 0x6ABD, 0xEFE0, 0x6AE1, 0xEFE1, 0x6AC6, + 0xEFE2, 0x6ABA, 0xEFE3, 0x6AB6, 0xEFE4, 0x6AB7, 0xEFE5, 0x6AC7, 0xEFE6, 0x6AB4, 0xEFE7, 0x6AAD, 0xEFE8, 0x6B5E, 0xEFE9, 0x6BC9, + 0xEFEA, 0x6C0B, 0xEFEB, 0x7007, 0xEFEC, 0x700C, 0xEFED, 0x700D, 0xEFEE, 0x7001, 0xEFEF, 0x7005, 0xEFF0, 0x7014, 0xEFF1, 0x700E, + 0xEFF2, 0x6FFF, 0xEFF3, 0x7000, 0xEFF4, 0x6FFB, 0xEFF5, 0x7026, 0xEFF6, 0x6FFC, 0xEFF7, 0x6FF7, 0xEFF8, 0x700A, 0xEFF9, 0x7201, + 0xEFFA, 0x71FF, 0xEFFB, 0x71F9, 0xEFFC, 0x7203, 0xEFFD, 0x71FD, 0xEFFE, 0x7376, 0xF040, 0x74B8, 0xF041, 0x74C0, 0xF042, 0x74B5, + 0xF043, 0x74C1, 0xF044, 0x74BE, 0xF045, 0x74B6, 0xF046, 0x74BB, 0xF047, 0x74C2, 0xF048, 0x7514, 0xF049, 0x7513, 0xF04A, 0x765C, + 0xF04B, 0x7664, 0xF04C, 0x7659, 0xF04D, 0x7650, 0xF04E, 0x7653, 0xF04F, 0x7657, 0xF050, 0x765A, 0xF051, 0x76A6, 0xF052, 0x76BD, + 0xF053, 0x76EC, 0xF054, 0x77C2, 0xF055, 0x77BA, 0xF056, 0x78FF, 0xF057, 0x790C, 0xF058, 0x7913, 0xF059, 0x7914, 0xF05A, 0x7909, + 0xF05B, 0x7910, 0xF05C, 0x7912, 0xF05D, 0x7911, 0xF05E, 0x79AD, 0xF05F, 0x79AC, 0xF060, 0x7A5F, 0xF061, 0x7C1C, 0xF062, 0x7C29, + 0xF063, 0x7C19, 0xF064, 0x7C20, 0xF065, 0x7C1F, 0xF066, 0x7C2D, 0xF067, 0x7C1D, 0xF068, 0x7C26, 0xF069, 0x7C28, 0xF06A, 0x7C22, + 0xF06B, 0x7C25, 0xF06C, 0x7C30, 0xF06D, 0x7E5C, 0xF06E, 0x7E50, 0xF06F, 0x7E56, 0xF070, 0x7E63, 0xF071, 0x7E58, 0xF072, 0x7E62, + 0xF073, 0x7E5F, 0xF074, 0x7E51, 0xF075, 0x7E60, 0xF076, 0x7E57, 0xF077, 0x7E53, 0xF078, 0x7FB5, 0xF079, 0x7FB3, 0xF07A, 0x7FF7, + 0xF07B, 0x7FF8, 0xF07C, 0x8075, 0xF07D, 0x81D1, 0xF07E, 0x81D2, 0xF0A1, 0x81D0, 0xF0A2, 0x825F, 0xF0A3, 0x825E, 0xF0A4, 0x85B4, + 0xF0A5, 0x85C6, 0xF0A6, 0x85C0, 0xF0A7, 0x85C3, 0xF0A8, 0x85C2, 0xF0A9, 0x85B3, 0xF0AA, 0x85B5, 0xF0AB, 0x85BD, 0xF0AC, 0x85C7, + 0xF0AD, 0x85C4, 0xF0AE, 0x85BF, 0xF0AF, 0x85CB, 0xF0B0, 0x85CE, 0xF0B1, 0x85C8, 0xF0B2, 0x85C5, 0xF0B3, 0x85B1, 0xF0B4, 0x85B6, + 0xF0B5, 0x85D2, 0xF0B6, 0x8624, 0xF0B7, 0x85B8, 0xF0B8, 0x85B7, 0xF0B9, 0x85BE, 0xF0BA, 0x8669, 0xF0BB, 0x87E7, 0xF0BC, 0x87E6, + 0xF0BD, 0x87E2, 0xF0BE, 0x87DB, 0xF0BF, 0x87EB, 0xF0C0, 0x87EA, 0xF0C1, 0x87E5, 0xF0C2, 0x87DF, 0xF0C3, 0x87F3, 0xF0C4, 0x87E4, + 0xF0C5, 0x87D4, 0xF0C6, 0x87DC, 0xF0C7, 0x87D3, 0xF0C8, 0x87ED, 0xF0C9, 0x87D8, 0xF0CA, 0x87E3, 0xF0CB, 0x87A4, 0xF0CC, 0x87D7, + 0xF0CD, 0x87D9, 0xF0CE, 0x8801, 0xF0CF, 0x87F4, 0xF0D0, 0x87E8, 0xF0D1, 0x87DD, 0xF0D2, 0x8953, 0xF0D3, 0x894B, 0xF0D4, 0x894F, + 0xF0D5, 0x894C, 0xF0D6, 0x8946, 0xF0D7, 0x8950, 0xF0D8, 0x8951, 0xF0D9, 0x8949, 0xF0DA, 0x8B2A, 0xF0DB, 0x8B27, 0xF0DC, 0x8B23, + 0xF0DD, 0x8B33, 0xF0DE, 0x8B30, 0xF0DF, 0x8B35, 0xF0E0, 0x8B47, 0xF0E1, 0x8B2F, 0xF0E2, 0x8B3C, 0xF0E3, 0x8B3E, 0xF0E4, 0x8B31, + 0xF0E5, 0x8B25, 0xF0E6, 0x8B37, 0xF0E7, 0x8B26, 0xF0E8, 0x8B36, 0xF0E9, 0x8B2E, 0xF0EA, 0x8B24, 0xF0EB, 0x8B3B, 0xF0EC, 0x8B3D, + 0xF0ED, 0x8B3A, 0xF0EE, 0x8C42, 0xF0EF, 0x8C75, 0xF0F0, 0x8C99, 0xF0F1, 0x8C98, 0xF0F2, 0x8C97, 0xF0F3, 0x8CFE, 0xF0F4, 0x8D04, + 0xF0F5, 0x8D02, 0xF0F6, 0x8D00, 0xF0F7, 0x8E5C, 0xF0F8, 0x8E62, 0xF0F9, 0x8E60, 0xF0FA, 0x8E57, 0xF0FB, 0x8E56, 0xF0FC, 0x8E5E, + 0xF0FD, 0x8E65, 0xF0FE, 0x8E67, 0xF140, 0x8E5B, 0xF141, 0x8E5A, 0xF142, 0x8E61, 0xF143, 0x8E5D, 0xF144, 0x8E69, 0xF145, 0x8E54, + 0xF146, 0x8F46, 0xF147, 0x8F47, 0xF148, 0x8F48, 0xF149, 0x8F4B, 0xF14A, 0x9128, 0xF14B, 0x913A, 0xF14C, 0x913B, 0xF14D, 0x913E, + 0xF14E, 0x91A8, 0xF14F, 0x91A5, 0xF150, 0x91A7, 0xF151, 0x91AF, 0xF152, 0x91AA, 0xF153, 0x93B5, 0xF154, 0x938C, 0xF155, 0x9392, + 0xF156, 0x93B7, 0xF157, 0x939B, 0xF158, 0x939D, 0xF159, 0x9389, 0xF15A, 0x93A7, 0xF15B, 0x938E, 0xF15C, 0x93AA, 0xF15D, 0x939E, + 0xF15E, 0x93A6, 0xF15F, 0x9395, 0xF160, 0x9388, 0xF161, 0x9399, 0xF162, 0x939F, 0xF163, 0x938D, 0xF164, 0x93B1, 0xF165, 0x9391, + 0xF166, 0x93B2, 0xF167, 0x93A4, 0xF168, 0x93A8, 0xF169, 0x93B4, 0xF16A, 0x93A3, 0xF16B, 0x93A5, 0xF16C, 0x95D2, 0xF16D, 0x95D3, + 0xF16E, 0x95D1, 0xF16F, 0x96B3, 0xF170, 0x96D7, 0xF171, 0x96DA, 0xF172, 0x5DC2, 0xF173, 0x96DF, 0xF174, 0x96D8, 0xF175, 0x96DD, + 0xF176, 0x9723, 0xF177, 0x9722, 0xF178, 0x9725, 0xF179, 0x97AC, 0xF17A, 0x97AE, 0xF17B, 0x97A8, 0xF17C, 0x97AB, 0xF17D, 0x97A4, + 0xF17E, 0x97AA, 0xF1A1, 0x97A2, 0xF1A2, 0x97A5, 0xF1A3, 0x97D7, 0xF1A4, 0x97D9, 0xF1A5, 0x97D6, 0xF1A6, 0x97D8, 0xF1A7, 0x97FA, + 0xF1A8, 0x9850, 0xF1A9, 0x9851, 0xF1AA, 0x9852, 0xF1AB, 0x98B8, 0xF1AC, 0x9941, 0xF1AD, 0x993C, 0xF1AE, 0x993A, 0xF1AF, 0x9A0F, + 0xF1B0, 0x9A0B, 0xF1B1, 0x9A09, 0xF1B2, 0x9A0D, 0xF1B3, 0x9A04, 0xF1B4, 0x9A11, 0xF1B5, 0x9A0A, 0xF1B6, 0x9A05, 0xF1B7, 0x9A07, + 0xF1B8, 0x9A06, 0xF1B9, 0x9AC0, 0xF1BA, 0x9ADC, 0xF1BB, 0x9B08, 0xF1BC, 0x9B04, 0xF1BD, 0x9B05, 0xF1BE, 0x9B29, 0xF1BF, 0x9B35, + 0xF1C0, 0x9B4A, 0xF1C1, 0x9B4C, 0xF1C2, 0x9B4B, 0xF1C3, 0x9BC7, 0xF1C4, 0x9BC6, 0xF1C5, 0x9BC3, 0xF1C6, 0x9BBF, 0xF1C7, 0x9BC1, + 0xF1C8, 0x9BB5, 0xF1C9, 0x9BB8, 0xF1CA, 0x9BD3, 0xF1CB, 0x9BB6, 0xF1CC, 0x9BC4, 0xF1CD, 0x9BB9, 0xF1CE, 0x9BBD, 0xF1CF, 0x9D5C, + 0xF1D0, 0x9D53, 0xF1D1, 0x9D4F, 0xF1D2, 0x9D4A, 0xF1D3, 0x9D5B, 0xF1D4, 0x9D4B, 0xF1D5, 0x9D59, 0xF1D6, 0x9D56, 0xF1D7, 0x9D4C, + 0xF1D8, 0x9D57, 0xF1D9, 0x9D52, 0xF1DA, 0x9D54, 0xF1DB, 0x9D5F, 0xF1DC, 0x9D58, 0xF1DD, 0x9D5A, 0xF1DE, 0x9E8E, 0xF1DF, 0x9E8C, + 0xF1E0, 0x9EDF, 0xF1E1, 0x9F01, 0xF1E2, 0x9F00, 0xF1E3, 0x9F16, 0xF1E4, 0x9F25, 0xF1E5, 0x9F2B, 0xF1E6, 0x9F2A, 0xF1E7, 0x9F29, + 0xF1E8, 0x9F28, 0xF1E9, 0x9F4C, 0xF1EA, 0x9F55, 0xF1EB, 0x5134, 0xF1EC, 0x5135, 0xF1ED, 0x5296, 0xF1EE, 0x52F7, 0xF1EF, 0x53B4, + 0xF1F0, 0x56AB, 0xF1F1, 0x56AD, 0xF1F2, 0x56A6, 0xF1F3, 0x56A7, 0xF1F4, 0x56AA, 0xF1F5, 0x56AC, 0xF1F6, 0x58DA, 0xF1F7, 0x58DD, + 0xF1F8, 0x58DB, 0xF1F9, 0x5912, 0xF1FA, 0x5B3D, 0xF1FB, 0x5B3E, 0xF1FC, 0x5B3F, 0xF1FD, 0x5DC3, 0xF1FE, 0x5E70, 0xF240, 0x5FBF, + 0xF241, 0x61FB, 0xF242, 0x6507, 0xF243, 0x6510, 0xF244, 0x650D, 0xF245, 0x6509, 0xF246, 0x650C, 0xF247, 0x650E, 0xF248, 0x6584, + 0xF249, 0x65DE, 0xF24A, 0x65DD, 0xF24B, 0x66DE, 0xF24C, 0x6AE7, 0xF24D, 0x6AE0, 0xF24E, 0x6ACC, 0xF24F, 0x6AD1, 0xF250, 0x6AD9, + 0xF251, 0x6ACB, 0xF252, 0x6ADF, 0xF253, 0x6ADC, 0xF254, 0x6AD0, 0xF255, 0x6AEB, 0xF256, 0x6ACF, 0xF257, 0x6ACD, 0xF258, 0x6ADE, + 0xF259, 0x6B60, 0xF25A, 0x6BB0, 0xF25B, 0x6C0C, 0xF25C, 0x7019, 0xF25D, 0x7027, 0xF25E, 0x7020, 0xF25F, 0x7016, 0xF260, 0x702B, + 0xF261, 0x7021, 0xF262, 0x7022, 0xF263, 0x7023, 0xF264, 0x7029, 0xF265, 0x7017, 0xF266, 0x7024, 0xF267, 0x701C, 0xF268, 0x702A, + 0xF269, 0x720C, 0xF26A, 0x720A, 0xF26B, 0x7207, 0xF26C, 0x7202, 0xF26D, 0x7205, 0xF26E, 0x72A5, 0xF26F, 0x72A6, 0xF270, 0x72A4, + 0xF271, 0x72A3, 0xF272, 0x72A1, 0xF273, 0x74CB, 0xF274, 0x74C5, 0xF275, 0x74B7, 0xF276, 0x74C3, 0xF277, 0x7516, 0xF278, 0x7660, + 0xF279, 0x77C9, 0xF27A, 0x77CA, 0xF27B, 0x77C4, 0xF27C, 0x77F1, 0xF27D, 0x791D, 0xF27E, 0x791B, 0xF2A1, 0x7921, 0xF2A2, 0x791C, + 0xF2A3, 0x7917, 0xF2A4, 0x791E, 0xF2A5, 0x79B0, 0xF2A6, 0x7A67, 0xF2A7, 0x7A68, 0xF2A8, 0x7C33, 0xF2A9, 0x7C3C, 0xF2AA, 0x7C39, + 0xF2AB, 0x7C2C, 0xF2AC, 0x7C3B, 0xF2AD, 0x7CEC, 0xF2AE, 0x7CEA, 0xF2AF, 0x7E76, 0xF2B0, 0x7E75, 0xF2B1, 0x7E78, 0xF2B2, 0x7E70, + 0xF2B3, 0x7E77, 0xF2B4, 0x7E6F, 0xF2B5, 0x7E7A, 0xF2B6, 0x7E72, 0xF2B7, 0x7E74, 0xF2B8, 0x7E68, 0xF2B9, 0x7F4B, 0xF2BA, 0x7F4A, + 0xF2BB, 0x7F83, 0xF2BC, 0x7F86, 0xF2BD, 0x7FB7, 0xF2BE, 0x7FFD, 0xF2BF, 0x7FFE, 0xF2C0, 0x8078, 0xF2C1, 0x81D7, 0xF2C2, 0x81D5, + 0xF2C3, 0x8264, 0xF2C4, 0x8261, 0xF2C5, 0x8263, 0xF2C6, 0x85EB, 0xF2C7, 0x85F1, 0xF2C8, 0x85ED, 0xF2C9, 0x85D9, 0xF2CA, 0x85E1, + 0xF2CB, 0x85E8, 0xF2CC, 0x85DA, 0xF2CD, 0x85D7, 0xF2CE, 0x85EC, 0xF2CF, 0x85F2, 0xF2D0, 0x85F8, 0xF2D1, 0x85D8, 0xF2D2, 0x85DF, + 0xF2D3, 0x85E3, 0xF2D4, 0x85DC, 0xF2D5, 0x85D1, 0xF2D6, 0x85F0, 0xF2D7, 0x85E6, 0xF2D8, 0x85EF, 0xF2D9, 0x85DE, 0xF2DA, 0x85E2, + 0xF2DB, 0x8800, 0xF2DC, 0x87FA, 0xF2DD, 0x8803, 0xF2DE, 0x87F6, 0xF2DF, 0x87F7, 0xF2E0, 0x8809, 0xF2E1, 0x880C, 0xF2E2, 0x880B, + 0xF2E3, 0x8806, 0xF2E4, 0x87FC, 0xF2E5, 0x8808, 0xF2E6, 0x87FF, 0xF2E7, 0x880A, 0xF2E8, 0x8802, 0xF2E9, 0x8962, 0xF2EA, 0x895A, + 0xF2EB, 0x895B, 0xF2EC, 0x8957, 0xF2ED, 0x8961, 0xF2EE, 0x895C, 0xF2EF, 0x8958, 0xF2F0, 0x895D, 0xF2F1, 0x8959, 0xF2F2, 0x8988, + 0xF2F3, 0x89B7, 0xF2F4, 0x89B6, 0xF2F5, 0x89F6, 0xF2F6, 0x8B50, 0xF2F7, 0x8B48, 0xF2F8, 0x8B4A, 0xF2F9, 0x8B40, 0xF2FA, 0x8B53, + 0xF2FB, 0x8B56, 0xF2FC, 0x8B54, 0xF2FD, 0x8B4B, 0xF2FE, 0x8B55, 0xF340, 0x8B51, 0xF341, 0x8B42, 0xF342, 0x8B52, 0xF343, 0x8B57, + 0xF344, 0x8C43, 0xF345, 0x8C77, 0xF346, 0x8C76, 0xF347, 0x8C9A, 0xF348, 0x8D06, 0xF349, 0x8D07, 0xF34A, 0x8D09, 0xF34B, 0x8DAC, + 0xF34C, 0x8DAA, 0xF34D, 0x8DAD, 0xF34E, 0x8DAB, 0xF34F, 0x8E6D, 0xF350, 0x8E78, 0xF351, 0x8E73, 0xF352, 0x8E6A, 0xF353, 0x8E6F, + 0xF354, 0x8E7B, 0xF355, 0x8EC2, 0xF356, 0x8F52, 0xF357, 0x8F51, 0xF358, 0x8F4F, 0xF359, 0x8F50, 0xF35A, 0x8F53, 0xF35B, 0x8FB4, + 0xF35C, 0x9140, 0xF35D, 0x913F, 0xF35E, 0x91B0, 0xF35F, 0x91AD, 0xF360, 0x93DE, 0xF361, 0x93C7, 0xF362, 0x93CF, 0xF363, 0x93C2, + 0xF364, 0x93DA, 0xF365, 0x93D0, 0xF366, 0x93F9, 0xF367, 0x93EC, 0xF368, 0x93CC, 0xF369, 0x93D9, 0xF36A, 0x93A9, 0xF36B, 0x93E6, + 0xF36C, 0x93CA, 0xF36D, 0x93D4, 0xF36E, 0x93EE, 0xF36F, 0x93E3, 0xF370, 0x93D5, 0xF371, 0x93C4, 0xF372, 0x93CE, 0xF373, 0x93C0, + 0xF374, 0x93D2, 0xF375, 0x93E7, 0xF376, 0x957D, 0xF377, 0x95DA, 0xF378, 0x95DB, 0xF379, 0x96E1, 0xF37A, 0x9729, 0xF37B, 0x972B, + 0xF37C, 0x972C, 0xF37D, 0x9728, 0xF37E, 0x9726, 0xF3A1, 0x97B3, 0xF3A2, 0x97B7, 0xF3A3, 0x97B6, 0xF3A4, 0x97DD, 0xF3A5, 0x97DE, + 0xF3A6, 0x97DF, 0xF3A7, 0x985C, 0xF3A8, 0x9859, 0xF3A9, 0x985D, 0xF3AA, 0x9857, 0xF3AB, 0x98BF, 0xF3AC, 0x98BD, 0xF3AD, 0x98BB, + 0xF3AE, 0x98BE, 0xF3AF, 0x9948, 0xF3B0, 0x9947, 0xF3B1, 0x9943, 0xF3B2, 0x99A6, 0xF3B3, 0x99A7, 0xF3B4, 0x9A1A, 0xF3B5, 0x9A15, + 0xF3B6, 0x9A25, 0xF3B7, 0x9A1D, 0xF3B8, 0x9A24, 0xF3B9, 0x9A1B, 0xF3BA, 0x9A22, 0xF3BB, 0x9A20, 0xF3BC, 0x9A27, 0xF3BD, 0x9A23, + 0xF3BE, 0x9A1E, 0xF3BF, 0x9A1C, 0xF3C0, 0x9A14, 0xF3C1, 0x9AC2, 0xF3C2, 0x9B0B, 0xF3C3, 0x9B0A, 0xF3C4, 0x9B0E, 0xF3C5, 0x9B0C, + 0xF3C6, 0x9B37, 0xF3C7, 0x9BEA, 0xF3C8, 0x9BEB, 0xF3C9, 0x9BE0, 0xF3CA, 0x9BDE, 0xF3CB, 0x9BE4, 0xF3CC, 0x9BE6, 0xF3CD, 0x9BE2, + 0xF3CE, 0x9BF0, 0xF3CF, 0x9BD4, 0xF3D0, 0x9BD7, 0xF3D1, 0x9BEC, 0xF3D2, 0x9BDC, 0xF3D3, 0x9BD9, 0xF3D4, 0x9BE5, 0xF3D5, 0x9BD5, + 0xF3D6, 0x9BE1, 0xF3D7, 0x9BDA, 0xF3D8, 0x9D77, 0xF3D9, 0x9D81, 0xF3DA, 0x9D8A, 0xF3DB, 0x9D84, 0xF3DC, 0x9D88, 0xF3DD, 0x9D71, + 0xF3DE, 0x9D80, 0xF3DF, 0x9D78, 0xF3E0, 0x9D86, 0xF3E1, 0x9D8B, 0xF3E2, 0x9D8C, 0xF3E3, 0x9D7D, 0xF3E4, 0x9D6B, 0xF3E5, 0x9D74, + 0xF3E6, 0x9D75, 0xF3E7, 0x9D70, 0xF3E8, 0x9D69, 0xF3E9, 0x9D85, 0xF3EA, 0x9D73, 0xF3EB, 0x9D7B, 0xF3EC, 0x9D82, 0xF3ED, 0x9D6F, + 0xF3EE, 0x9D79, 0xF3EF, 0x9D7F, 0xF3F0, 0x9D87, 0xF3F1, 0x9D68, 0xF3F2, 0x9E94, 0xF3F3, 0x9E91, 0xF3F4, 0x9EC0, 0xF3F5, 0x9EFC, + 0xF3F6, 0x9F2D, 0xF3F7, 0x9F40, 0xF3F8, 0x9F41, 0xF3F9, 0x9F4D, 0xF3FA, 0x9F56, 0xF3FB, 0x9F57, 0xF3FC, 0x9F58, 0xF3FD, 0x5337, + 0xF3FE, 0x56B2, 0xF440, 0x56B5, 0xF441, 0x56B3, 0xF442, 0x58E3, 0xF443, 0x5B45, 0xF444, 0x5DC6, 0xF445, 0x5DC7, 0xF446, 0x5EEE, + 0xF447, 0x5EEF, 0xF448, 0x5FC0, 0xF449, 0x5FC1, 0xF44A, 0x61F9, 0xF44B, 0x6517, 0xF44C, 0x6516, 0xF44D, 0x6515, 0xF44E, 0x6513, + 0xF44F, 0x65DF, 0xF450, 0x66E8, 0xF451, 0x66E3, 0xF452, 0x66E4, 0xF453, 0x6AF3, 0xF454, 0x6AF0, 0xF455, 0x6AEA, 0xF456, 0x6AE8, + 0xF457, 0x6AF9, 0xF458, 0x6AF1, 0xF459, 0x6AEE, 0xF45A, 0x6AEF, 0xF45B, 0x703C, 0xF45C, 0x7035, 0xF45D, 0x702F, 0xF45E, 0x7037, + 0xF45F, 0x7034, 0xF460, 0x7031, 0xF461, 0x7042, 0xF462, 0x7038, 0xF463, 0x703F, 0xF464, 0x703A, 0xF465, 0x7039, 0xF466, 0x7040, + 0xF467, 0x703B, 0xF468, 0x7033, 0xF469, 0x7041, 0xF46A, 0x7213, 0xF46B, 0x7214, 0xF46C, 0x72A8, 0xF46D, 0x737D, 0xF46E, 0x737C, + 0xF46F, 0x74BA, 0xF470, 0x76AB, 0xF471, 0x76AA, 0xF472, 0x76BE, 0xF473, 0x76ED, 0xF474, 0x77CC, 0xF475, 0x77CE, 0xF476, 0x77CF, + 0xF477, 0x77CD, 0xF478, 0x77F2, 0xF479, 0x7925, 0xF47A, 0x7923, 0xF47B, 0x7927, 0xF47C, 0x7928, 0xF47D, 0x7924, 0xF47E, 0x7929, + 0xF4A1, 0x79B2, 0xF4A2, 0x7A6E, 0xF4A3, 0x7A6C, 0xF4A4, 0x7A6D, 0xF4A5, 0x7AF7, 0xF4A6, 0x7C49, 0xF4A7, 0x7C48, 0xF4A8, 0x7C4A, + 0xF4A9, 0x7C47, 0xF4AA, 0x7C45, 0xF4AB, 0x7CEE, 0xF4AC, 0x7E7B, 0xF4AD, 0x7E7E, 0xF4AE, 0x7E81, 0xF4AF, 0x7E80, 0xF4B0, 0x7FBA, + 0xF4B1, 0x7FFF, 0xF4B2, 0x8079, 0xF4B3, 0x81DB, 0xF4B4, 0x81D9, 0xF4B5, 0x820B, 0xF4B6, 0x8268, 0xF4B7, 0x8269, 0xF4B8, 0x8622, + 0xF4B9, 0x85FF, 0xF4BA, 0x8601, 0xF4BB, 0x85FE, 0xF4BC, 0x861B, 0xF4BD, 0x8600, 0xF4BE, 0x85F6, 0xF4BF, 0x8604, 0xF4C0, 0x8609, + 0xF4C1, 0x8605, 0xF4C2, 0x860C, 0xF4C3, 0x85FD, 0xF4C4, 0x8819, 0xF4C5, 0x8810, 0xF4C6, 0x8811, 0xF4C7, 0x8817, 0xF4C8, 0x8813, + 0xF4C9, 0x8816, 0xF4CA, 0x8963, 0xF4CB, 0x8966, 0xF4CC, 0x89B9, 0xF4CD, 0x89F7, 0xF4CE, 0x8B60, 0xF4CF, 0x8B6A, 0xF4D0, 0x8B5D, + 0xF4D1, 0x8B68, 0xF4D2, 0x8B63, 0xF4D3, 0x8B65, 0xF4D4, 0x8B67, 0xF4D5, 0x8B6D, 0xF4D6, 0x8DAE, 0xF4D7, 0x8E86, 0xF4D8, 0x8E88, + 0xF4D9, 0x8E84, 0xF4DA, 0x8F59, 0xF4DB, 0x8F56, 0xF4DC, 0x8F57, 0xF4DD, 0x8F55, 0xF4DE, 0x8F58, 0xF4DF, 0x8F5A, 0xF4E0, 0x908D, + 0xF4E1, 0x9143, 0xF4E2, 0x9141, 0xF4E3, 0x91B7, 0xF4E4, 0x91B5, 0xF4E5, 0x91B2, 0xF4E6, 0x91B3, 0xF4E7, 0x940B, 0xF4E8, 0x9413, + 0xF4E9, 0x93FB, 0xF4EA, 0x9420, 0xF4EB, 0x940F, 0xF4EC, 0x9414, 0xF4ED, 0x93FE, 0xF4EE, 0x9415, 0xF4EF, 0x9410, 0xF4F0, 0x9428, + 0xF4F1, 0x9419, 0xF4F2, 0x940D, 0xF4F3, 0x93F5, 0xF4F4, 0x9400, 0xF4F5, 0x93F7, 0xF4F6, 0x9407, 0xF4F7, 0x940E, 0xF4F8, 0x9416, + 0xF4F9, 0x9412, 0xF4FA, 0x93FA, 0xF4FB, 0x9409, 0xF4FC, 0x93F8, 0xF4FD, 0x940A, 0xF4FE, 0x93FF, 0xF540, 0x93FC, 0xF541, 0x940C, + 0xF542, 0x93F6, 0xF543, 0x9411, 0xF544, 0x9406, 0xF545, 0x95DE, 0xF546, 0x95E0, 0xF547, 0x95DF, 0xF548, 0x972E, 0xF549, 0x972F, + 0xF54A, 0x97B9, 0xF54B, 0x97BB, 0xF54C, 0x97FD, 0xF54D, 0x97FE, 0xF54E, 0x9860, 0xF54F, 0x9862, 0xF550, 0x9863, 0xF551, 0x985F, + 0xF552, 0x98C1, 0xF553, 0x98C2, 0xF554, 0x9950, 0xF555, 0x994E, 0xF556, 0x9959, 0xF557, 0x994C, 0xF558, 0x994B, 0xF559, 0x9953, + 0xF55A, 0x9A32, 0xF55B, 0x9A34, 0xF55C, 0x9A31, 0xF55D, 0x9A2C, 0xF55E, 0x9A2A, 0xF55F, 0x9A36, 0xF560, 0x9A29, 0xF561, 0x9A2E, + 0xF562, 0x9A38, 0xF563, 0x9A2D, 0xF564, 0x9AC7, 0xF565, 0x9ACA, 0xF566, 0x9AC6, 0xF567, 0x9B10, 0xF568, 0x9B12, 0xF569, 0x9B11, + 0xF56A, 0x9C0B, 0xF56B, 0x9C08, 0xF56C, 0x9BF7, 0xF56D, 0x9C05, 0xF56E, 0x9C12, 0xF56F, 0x9BF8, 0xF570, 0x9C40, 0xF571, 0x9C07, + 0xF572, 0x9C0E, 0xF573, 0x9C06, 0xF574, 0x9C17, 0xF575, 0x9C14, 0xF576, 0x9C09, 0xF577, 0x9D9F, 0xF578, 0x9D99, 0xF579, 0x9DA4, + 0xF57A, 0x9D9D, 0xF57B, 0x9D92, 0xF57C, 0x9D98, 0xF57D, 0x9D90, 0xF57E, 0x9D9B, 0xF5A1, 0x9DA0, 0xF5A2, 0x9D94, 0xF5A3, 0x9D9C, + 0xF5A4, 0x9DAA, 0xF5A5, 0x9D97, 0xF5A6, 0x9DA1, 0xF5A7, 0x9D9A, 0xF5A8, 0x9DA2, 0xF5A9, 0x9DA8, 0xF5AA, 0x9D9E, 0xF5AB, 0x9DA3, + 0xF5AC, 0x9DBF, 0xF5AD, 0x9DA9, 0xF5AE, 0x9D96, 0xF5AF, 0x9DA6, 0xF5B0, 0x9DA7, 0xF5B1, 0x9E99, 0xF5B2, 0x9E9B, 0xF5B3, 0x9E9A, + 0xF5B4, 0x9EE5, 0xF5B5, 0x9EE4, 0xF5B6, 0x9EE7, 0xF5B7, 0x9EE6, 0xF5B8, 0x9F30, 0xF5B9, 0x9F2E, 0xF5BA, 0x9F5B, 0xF5BB, 0x9F60, + 0xF5BC, 0x9F5E, 0xF5BD, 0x9F5D, 0xF5BE, 0x9F59, 0xF5BF, 0x9F91, 0xF5C0, 0x513A, 0xF5C1, 0x5139, 0xF5C2, 0x5298, 0xF5C3, 0x5297, + 0xF5C4, 0x56C3, 0xF5C5, 0x56BD, 0xF5C6, 0x56BE, 0xF5C7, 0x5B48, 0xF5C8, 0x5B47, 0xF5C9, 0x5DCB, 0xF5CA, 0x5DCF, 0xF5CB, 0x5EF1, + 0xF5CC, 0x61FD, 0xF5CD, 0x651B, 0xF5CE, 0x6B02, 0xF5CF, 0x6AFC, 0xF5D0, 0x6B03, 0xF5D1, 0x6AF8, 0xF5D2, 0x6B00, 0xF5D3, 0x7043, + 0xF5D4, 0x7044, 0xF5D5, 0x704A, 0xF5D6, 0x7048, 0xF5D7, 0x7049, 0xF5D8, 0x7045, 0xF5D9, 0x7046, 0xF5DA, 0x721D, 0xF5DB, 0x721A, + 0xF5DC, 0x7219, 0xF5DD, 0x737E, 0xF5DE, 0x7517, 0xF5DF, 0x766A, 0xF5E0, 0x77D0, 0xF5E1, 0x792D, 0xF5E2, 0x7931, 0xF5E3, 0x792F, + 0xF5E4, 0x7C54, 0xF5E5, 0x7C53, 0xF5E6, 0x7CF2, 0xF5E7, 0x7E8A, 0xF5E8, 0x7E87, 0xF5E9, 0x7E88, 0xF5EA, 0x7E8B, 0xF5EB, 0x7E86, + 0xF5EC, 0x7E8D, 0xF5ED, 0x7F4D, 0xF5EE, 0x7FBB, 0xF5EF, 0x8030, 0xF5F0, 0x81DD, 0xF5F1, 0x8618, 0xF5F2, 0x862A, 0xF5F3, 0x8626, + 0xF5F4, 0x861F, 0xF5F5, 0x8623, 0xF5F6, 0x861C, 0xF5F7, 0x8619, 0xF5F8, 0x8627, 0xF5F9, 0x862E, 0xF5FA, 0x8621, 0xF5FB, 0x8620, + 0xF5FC, 0x8629, 0xF5FD, 0x861E, 0xF5FE, 0x8625, 0xF640, 0x8829, 0xF641, 0x881D, 0xF642, 0x881B, 0xF643, 0x8820, 0xF644, 0x8824, + 0xF645, 0x881C, 0xF646, 0x882B, 0xF647, 0x884A, 0xF648, 0x896D, 0xF649, 0x8969, 0xF64A, 0x896E, 0xF64B, 0x896B, 0xF64C, 0x89FA, + 0xF64D, 0x8B79, 0xF64E, 0x8B78, 0xF64F, 0x8B45, 0xF650, 0x8B7A, 0xF651, 0x8B7B, 0xF652, 0x8D10, 0xF653, 0x8D14, 0xF654, 0x8DAF, + 0xF655, 0x8E8E, 0xF656, 0x8E8C, 0xF657, 0x8F5E, 0xF658, 0x8F5B, 0xF659, 0x8F5D, 0xF65A, 0x9146, 0xF65B, 0x9144, 0xF65C, 0x9145, + 0xF65D, 0x91B9, 0xF65E, 0x943F, 0xF65F, 0x943B, 0xF660, 0x9436, 0xF661, 0x9429, 0xF662, 0x943D, 0xF663, 0x943C, 0xF664, 0x9430, + 0xF665, 0x9439, 0xF666, 0x942A, 0xF667, 0x9437, 0xF668, 0x942C, 0xF669, 0x9440, 0xF66A, 0x9431, 0xF66B, 0x95E5, 0xF66C, 0x95E4, + 0xF66D, 0x95E3, 0xF66E, 0x9735, 0xF66F, 0x973A, 0xF670, 0x97BF, 0xF671, 0x97E1, 0xF672, 0x9864, 0xF673, 0x98C9, 0xF674, 0x98C6, + 0xF675, 0x98C0, 0xF676, 0x9958, 0xF677, 0x9956, 0xF678, 0x9A39, 0xF679, 0x9A3D, 0xF67A, 0x9A46, 0xF67B, 0x9A44, 0xF67C, 0x9A42, + 0xF67D, 0x9A41, 0xF67E, 0x9A3A, 0xF6A1, 0x9A3F, 0xF6A2, 0x9ACD, 0xF6A3, 0x9B15, 0xF6A4, 0x9B17, 0xF6A5, 0x9B18, 0xF6A6, 0x9B16, + 0xF6A7, 0x9B3A, 0xF6A8, 0x9B52, 0xF6A9, 0x9C2B, 0xF6AA, 0x9C1D, 0xF6AB, 0x9C1C, 0xF6AC, 0x9C2C, 0xF6AD, 0x9C23, 0xF6AE, 0x9C28, + 0xF6AF, 0x9C29, 0xF6B0, 0x9C24, 0xF6B1, 0x9C21, 0xF6B2, 0x9DB7, 0xF6B3, 0x9DB6, 0xF6B4, 0x9DBC, 0xF6B5, 0x9DC1, 0xF6B6, 0x9DC7, + 0xF6B7, 0x9DCA, 0xF6B8, 0x9DCF, 0xF6B9, 0x9DBE, 0xF6BA, 0x9DC5, 0xF6BB, 0x9DC3, 0xF6BC, 0x9DBB, 0xF6BD, 0x9DB5, 0xF6BE, 0x9DCE, + 0xF6BF, 0x9DB9, 0xF6C0, 0x9DBA, 0xF6C1, 0x9DAC, 0xF6C2, 0x9DC8, 0xF6C3, 0x9DB1, 0xF6C4, 0x9DAD, 0xF6C5, 0x9DCC, 0xF6C6, 0x9DB3, + 0xF6C7, 0x9DCD, 0xF6C8, 0x9DB2, 0xF6C9, 0x9E7A, 0xF6CA, 0x9E9C, 0xF6CB, 0x9EEB, 0xF6CC, 0x9EEE, 0xF6CD, 0x9EED, 0xF6CE, 0x9F1B, + 0xF6CF, 0x9F18, 0xF6D0, 0x9F1A, 0xF6D1, 0x9F31, 0xF6D2, 0x9F4E, 0xF6D3, 0x9F65, 0xF6D4, 0x9F64, 0xF6D5, 0x9F92, 0xF6D6, 0x4EB9, + 0xF6D7, 0x56C6, 0xF6D8, 0x56C5, 0xF6D9, 0x56CB, 0xF6DA, 0x5971, 0xF6DB, 0x5B4B, 0xF6DC, 0x5B4C, 0xF6DD, 0x5DD5, 0xF6DE, 0x5DD1, + 0xF6DF, 0x5EF2, 0xF6E0, 0x6521, 0xF6E1, 0x6520, 0xF6E2, 0x6526, 0xF6E3, 0x6522, 0xF6E4, 0x6B0B, 0xF6E5, 0x6B08, 0xF6E6, 0x6B09, + 0xF6E7, 0x6C0D, 0xF6E8, 0x7055, 0xF6E9, 0x7056, 0xF6EA, 0x7057, 0xF6EB, 0x7052, 0xF6EC, 0x721E, 0xF6ED, 0x721F, 0xF6EE, 0x72A9, + 0xF6EF, 0x737F, 0xF6F0, 0x74D8, 0xF6F1, 0x74D5, 0xF6F2, 0x74D9, 0xF6F3, 0x74D7, 0xF6F4, 0x766D, 0xF6F5, 0x76AD, 0xF6F6, 0x7935, + 0xF6F7, 0x79B4, 0xF6F8, 0x7A70, 0xF6F9, 0x7A71, 0xF6FA, 0x7C57, 0xF6FB, 0x7C5C, 0xF6FC, 0x7C59, 0xF6FD, 0x7C5B, 0xF6FE, 0x7C5A, + 0xF740, 0x7CF4, 0xF741, 0x7CF1, 0xF742, 0x7E91, 0xF743, 0x7F4F, 0xF744, 0x7F87, 0xF745, 0x81DE, 0xF746, 0x826B, 0xF747, 0x8634, + 0xF748, 0x8635, 0xF749, 0x8633, 0xF74A, 0x862C, 0xF74B, 0x8632, 0xF74C, 0x8636, 0xF74D, 0x882C, 0xF74E, 0x8828, 0xF74F, 0x8826, + 0xF750, 0x882A, 0xF751, 0x8825, 0xF752, 0x8971, 0xF753, 0x89BF, 0xF754, 0x89BE, 0xF755, 0x89FB, 0xF756, 0x8B7E, 0xF757, 0x8B84, + 0xF758, 0x8B82, 0xF759, 0x8B86, 0xF75A, 0x8B85, 0xF75B, 0x8B7F, 0xF75C, 0x8D15, 0xF75D, 0x8E95, 0xF75E, 0x8E94, 0xF75F, 0x8E9A, + 0xF760, 0x8E92, 0xF761, 0x8E90, 0xF762, 0x8E96, 0xF763, 0x8E97, 0xF764, 0x8F60, 0xF765, 0x8F62, 0xF766, 0x9147, 0xF767, 0x944C, + 0xF768, 0x9450, 0xF769, 0x944A, 0xF76A, 0x944B, 0xF76B, 0x944F, 0xF76C, 0x9447, 0xF76D, 0x9445, 0xF76E, 0x9448, 0xF76F, 0x9449, + 0xF770, 0x9446, 0xF771, 0x973F, 0xF772, 0x97E3, 0xF773, 0x986A, 0xF774, 0x9869, 0xF775, 0x98CB, 0xF776, 0x9954, 0xF777, 0x995B, + 0xF778, 0x9A4E, 0xF779, 0x9A53, 0xF77A, 0x9A54, 0xF77B, 0x9A4C, 0xF77C, 0x9A4F, 0xF77D, 0x9A48, 0xF77E, 0x9A4A, 0xF7A1, 0x9A49, + 0xF7A2, 0x9A52, 0xF7A3, 0x9A50, 0xF7A4, 0x9AD0, 0xF7A5, 0x9B19, 0xF7A6, 0x9B2B, 0xF7A7, 0x9B3B, 0xF7A8, 0x9B56, 0xF7A9, 0x9B55, + 0xF7AA, 0x9C46, 0xF7AB, 0x9C48, 0xF7AC, 0x9C3F, 0xF7AD, 0x9C44, 0xF7AE, 0x9C39, 0xF7AF, 0x9C33, 0xF7B0, 0x9C41, 0xF7B1, 0x9C3C, + 0xF7B2, 0x9C37, 0xF7B3, 0x9C34, 0xF7B4, 0x9C32, 0xF7B5, 0x9C3D, 0xF7B6, 0x9C36, 0xF7B7, 0x9DDB, 0xF7B8, 0x9DD2, 0xF7B9, 0x9DDE, + 0xF7BA, 0x9DDA, 0xF7BB, 0x9DCB, 0xF7BC, 0x9DD0, 0xF7BD, 0x9DDC, 0xF7BE, 0x9DD1, 0xF7BF, 0x9DDF, 0xF7C0, 0x9DE9, 0xF7C1, 0x9DD9, + 0xF7C2, 0x9DD8, 0xF7C3, 0x9DD6, 0xF7C4, 0x9DF5, 0xF7C5, 0x9DD5, 0xF7C6, 0x9DDD, 0xF7C7, 0x9EB6, 0xF7C8, 0x9EF0, 0xF7C9, 0x9F35, + 0xF7CA, 0x9F33, 0xF7CB, 0x9F32, 0xF7CC, 0x9F42, 0xF7CD, 0x9F6B, 0xF7CE, 0x9F95, 0xF7CF, 0x9FA2, 0xF7D0, 0x513D, 0xF7D1, 0x5299, + 0xF7D2, 0x58E8, 0xF7D3, 0x58E7, 0xF7D4, 0x5972, 0xF7D5, 0x5B4D, 0xF7D6, 0x5DD8, 0xF7D7, 0x882F, 0xF7D8, 0x5F4F, 0xF7D9, 0x6201, + 0xF7DA, 0x6203, 0xF7DB, 0x6204, 0xF7DC, 0x6529, 0xF7DD, 0x6525, 0xF7DE, 0x6596, 0xF7DF, 0x66EB, 0xF7E0, 0x6B11, 0xF7E1, 0x6B12, + 0xF7E2, 0x6B0F, 0xF7E3, 0x6BCA, 0xF7E4, 0x705B, 0xF7E5, 0x705A, 0xF7E6, 0x7222, 0xF7E7, 0x7382, 0xF7E8, 0x7381, 0xF7E9, 0x7383, + 0xF7EA, 0x7670, 0xF7EB, 0x77D4, 0xF7EC, 0x7C67, 0xF7ED, 0x7C66, 0xF7EE, 0x7E95, 0xF7EF, 0x826C, 0xF7F0, 0x863A, 0xF7F1, 0x8640, + 0xF7F2, 0x8639, 0xF7F3, 0x863C, 0xF7F4, 0x8631, 0xF7F5, 0x863B, 0xF7F6, 0x863E, 0xF7F7, 0x8830, 0xF7F8, 0x8832, 0xF7F9, 0x882E, + 0xF7FA, 0x8833, 0xF7FB, 0x8976, 0xF7FC, 0x8974, 0xF7FD, 0x8973, 0xF7FE, 0x89FE, 0xF840, 0x8B8C, 0xF841, 0x8B8E, 0xF842, 0x8B8B, + 0xF843, 0x8B88, 0xF844, 0x8C45, 0xF845, 0x8D19, 0xF846, 0x8E98, 0xF847, 0x8F64, 0xF848, 0x8F63, 0xF849, 0x91BC, 0xF84A, 0x9462, + 0xF84B, 0x9455, 0xF84C, 0x945D, 0xF84D, 0x9457, 0xF84E, 0x945E, 0xF84F, 0x97C4, 0xF850, 0x97C5, 0xF851, 0x9800, 0xF852, 0x9A56, + 0xF853, 0x9A59, 0xF854, 0x9B1E, 0xF855, 0x9B1F, 0xF856, 0x9B20, 0xF857, 0x9C52, 0xF858, 0x9C58, 0xF859, 0x9C50, 0xF85A, 0x9C4A, + 0xF85B, 0x9C4D, 0xF85C, 0x9C4B, 0xF85D, 0x9C55, 0xF85E, 0x9C59, 0xF85F, 0x9C4C, 0xF860, 0x9C4E, 0xF861, 0x9DFB, 0xF862, 0x9DF7, + 0xF863, 0x9DEF, 0xF864, 0x9DE3, 0xF865, 0x9DEB, 0xF866, 0x9DF8, 0xF867, 0x9DE4, 0xF868, 0x9DF6, 0xF869, 0x9DE1, 0xF86A, 0x9DEE, + 0xF86B, 0x9DE6, 0xF86C, 0x9DF2, 0xF86D, 0x9DF0, 0xF86E, 0x9DE2, 0xF86F, 0x9DEC, 0xF870, 0x9DF4, 0xF871, 0x9DF3, 0xF872, 0x9DE8, + 0xF873, 0x9DED, 0xF874, 0x9EC2, 0xF875, 0x9ED0, 0xF876, 0x9EF2, 0xF877, 0x9EF3, 0xF878, 0x9F06, 0xF879, 0x9F1C, 0xF87A, 0x9F38, + 0xF87B, 0x9F37, 0xF87C, 0x9F36, 0xF87D, 0x9F43, 0xF87E, 0x9F4F, 0xF8A1, 0x9F71, 0xF8A2, 0x9F70, 0xF8A3, 0x9F6E, 0xF8A4, 0x9F6F, + 0xF8A5, 0x56D3, 0xF8A6, 0x56CD, 0xF8A7, 0x5B4E, 0xF8A8, 0x5C6D, 0xF8A9, 0x652D, 0xF8AA, 0x66ED, 0xF8AB, 0x66EE, 0xF8AC, 0x6B13, + 0xF8AD, 0x705F, 0xF8AE, 0x7061, 0xF8AF, 0x705D, 0xF8B0, 0x7060, 0xF8B1, 0x7223, 0xF8B2, 0x74DB, 0xF8B3, 0x74E5, 0xF8B4, 0x77D5, + 0xF8B5, 0x7938, 0xF8B6, 0x79B7, 0xF8B7, 0x79B6, 0xF8B8, 0x7C6A, 0xF8B9, 0x7E97, 0xF8BA, 0x7F89, 0xF8BB, 0x826D, 0xF8BC, 0x8643, + 0xF8BD, 0x8838, 0xF8BE, 0x8837, 0xF8BF, 0x8835, 0xF8C0, 0x884B, 0xF8C1, 0x8B94, 0xF8C2, 0x8B95, 0xF8C3, 0x8E9E, 0xF8C4, 0x8E9F, + 0xF8C5, 0x8EA0, 0xF8C6, 0x8E9D, 0xF8C7, 0x91BE, 0xF8C8, 0x91BD, 0xF8C9, 0x91C2, 0xF8CA, 0x946B, 0xF8CB, 0x9468, 0xF8CC, 0x9469, + 0xF8CD, 0x96E5, 0xF8CE, 0x9746, 0xF8CF, 0x9743, 0xF8D0, 0x9747, 0xF8D1, 0x97C7, 0xF8D2, 0x97E5, 0xF8D3, 0x9A5E, 0xF8D4, 0x9AD5, + 0xF8D5, 0x9B59, 0xF8D6, 0x9C63, 0xF8D7, 0x9C67, 0xF8D8, 0x9C66, 0xF8D9, 0x9C62, 0xF8DA, 0x9C5E, 0xF8DB, 0x9C60, 0xF8DC, 0x9E02, + 0xF8DD, 0x9DFE, 0xF8DE, 0x9E07, 0xF8DF, 0x9E03, 0xF8E0, 0x9E06, 0xF8E1, 0x9E05, 0xF8E2, 0x9E00, 0xF8E3, 0x9E01, 0xF8E4, 0x9E09, + 0xF8E5, 0x9DFF, 0xF8E6, 0x9DFD, 0xF8E7, 0x9E04, 0xF8E8, 0x9EA0, 0xF8E9, 0x9F1E, 0xF8EA, 0x9F46, 0xF8EB, 0x9F74, 0xF8EC, 0x9F75, + 0xF8ED, 0x9F76, 0xF8EE, 0x56D4, 0xF8EF, 0x652E, 0xF8F0, 0x65B8, 0xF8F1, 0x6B18, 0xF8F2, 0x6B19, 0xF8F3, 0x6B17, 0xF8F4, 0x6B1A, + 0xF8F5, 0x7062, 0xF8F6, 0x7226, 0xF8F7, 0x72AA, 0xF8F8, 0x77D8, 0xF8F9, 0x77D9, 0xF8FA, 0x7939, 0xF8FB, 0x7C69, 0xF8FC, 0x7C6B, + 0xF8FD, 0x7CF6, 0xF8FE, 0x7E9A, 0xF940, 0x7E98, 0xF941, 0x7E9B, 0xF942, 0x7E99, 0xF943, 0x81E0, 0xF944, 0x81E1, 0xF945, 0x8646, + 0xF946, 0x8647, 0xF947, 0x8648, 0xF948, 0x8979, 0xF949, 0x897A, 0xF94A, 0x897C, 0xF94B, 0x897B, 0xF94C, 0x89FF, 0xF94D, 0x8B98, + 0xF94E, 0x8B99, 0xF94F, 0x8EA5, 0xF950, 0x8EA4, 0xF951, 0x8EA3, 0xF952, 0x946E, 0xF953, 0x946D, 0xF954, 0x946F, 0xF955, 0x9471, + 0xF956, 0x9473, 0xF957, 0x9749, 0xF958, 0x9872, 0xF959, 0x995F, 0xF95A, 0x9C68, 0xF95B, 0x9C6E, 0xF95C, 0x9C6D, 0xF95D, 0x9E0B, + 0xF95E, 0x9E0D, 0xF95F, 0x9E10, 0xF960, 0x9E0F, 0xF961, 0x9E12, 0xF962, 0x9E11, 0xF963, 0x9EA1, 0xF964, 0x9EF5, 0xF965, 0x9F09, + 0xF966, 0x9F47, 0xF967, 0x9F78, 0xF968, 0x9F7B, 0xF969, 0x9F7A, 0xF96A, 0x9F79, 0xF96B, 0x571E, 0xF96C, 0x7066, 0xF96D, 0x7C6F, + 0xF96E, 0x883C, 0xF96F, 0x8DB2, 0xF970, 0x8EA6, 0xF971, 0x91C3, 0xF972, 0x9474, 0xF973, 0x9478, 0xF974, 0x9476, 0xF975, 0x9475, + 0xF976, 0x9A60, 0xF977, 0x9C74, 0xF978, 0x9C73, 0xF979, 0x9C71, 0xF97A, 0x9C75, 0xF97B, 0x9E14, 0xF97C, 0x9E13, 0xF97D, 0x9EF6, + 0xF97E, 0x9F0A, 0xF9A1, 0x9FA4, 0xF9A2, 0x7068, 0xF9A3, 0x7065, 0xF9A4, 0x7CF7, 0xF9A5, 0x866A, 0xF9A6, 0x883E, 0xF9A7, 0x883D, + 0xF9A8, 0x883F, 0xF9A9, 0x8B9E, 0xF9AA, 0x8C9C, 0xF9AB, 0x8EA9, 0xF9AC, 0x8EC9, 0xF9AD, 0x974B, 0xF9AE, 0x9873, 0xF9AF, 0x9874, + 0xF9B0, 0x98CC, 0xF9B1, 0x9961, 0xF9B2, 0x99AB, 0xF9B3, 0x9A64, 0xF9B4, 0x9A66, 0xF9B5, 0x9A67, 0xF9B6, 0x9B24, 0xF9B7, 0x9E15, + 0xF9B8, 0x9E17, 0xF9B9, 0x9F48, 0xF9BA, 0x6207, 0xF9BB, 0x6B1E, 0xF9BC, 0x7227, 0xF9BD, 0x864C, 0xF9BE, 0x8EA8, 0xF9BF, 0x9482, + 0xF9C0, 0x9480, 0xF9C1, 0x9481, 0xF9C2, 0x9A69, 0xF9C3, 0x9A68, 0xF9C4, 0x9B2E, 0xF9C5, 0x9E19, 0xF9C6, 0x7229, 0xF9C7, 0x864B, + 0xF9C8, 0x8B9F, 0xF9C9, 0x9483, 0xF9CA, 0x9C79, 0xF9CB, 0x9EB7, 0xF9CC, 0x7675, 0xF9CD, 0x9A6B, 0xF9CE, 0x9C7A, 0xF9CF, 0x9E1D, + 0xF9D0, 0x7069, 0xF9D1, 0x706A, 0xF9D2, 0x9EA4, 0xF9D3, 0x9F7E, 0xF9D4, 0x9F49, 0xF9D5, 0x9F98, 0xF9D6, 0x7881, 0xF9D7, 0x92B9, + 0xF9D8, 0x88CF, 0xF9D9, 0x58BB, 0xF9DA, 0x6052, 0xF9DB, 0x7CA7, 0xF9DC, 0x5AFA, 0xF9DD, 0x2554, 0xF9DE, 0x2566, 0xF9DF, 0x2557, + 0xF9E0, 0x2560, 0xF9E1, 0x256C, 0xF9E2, 0x2563, 0xF9E3, 0x255A, 0xF9E4, 0x2569, 0xF9E5, 0x255D, 0xF9E6, 0x2552, 0xF9E7, 0x2564, + 0xF9E8, 0x2555, 0xF9E9, 0x255E, 0xF9EA, 0x256A, 0xF9EB, 0x2561, 0xF9EC, 0x2558, 0xF9ED, 0x2567, 0xF9EE, 0x255B, 0xF9EF, 0x2553, + 0xF9F0, 0x2565, 0xF9F1, 0x2556, 0xF9F2, 0x255F, 0xF9F3, 0x256B, 0xF9F4, 0x2562, 0xF9F5, 0x2559, 0xF9F6, 0x2568, 0xF9F7, 0x255C, + 0xF9F8, 0x2551, 0xF9F9, 0x2550, 0xF9FA, 0x256D, 0xF9FB, 0x256E, 0xF9FC, 0x2570, 0xF9FD, 0x256F, 0xF9FE, 0x2593, 0, 0 +}; +#endif + +#if FF_CODE_PAGE == 437 || FF_CODE_PAGE == 0 +static const WCHAR uc437[] = { /* CP437(U.S.) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 720 || FF_CODE_PAGE == 0 +static const WCHAR uc720[] = { /* CP720(Arabic) to Unicode conversion table */ + 0x0000, 0x0000, 0x00E9, 0x00E2, 0x0000, 0x00E0, 0x0000, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0651, 0x0652, 0x00F4, 0x00A4, 0x0640, 0x00FB, 0x00F9, 0x0621, 0x0622, 0x0623, 0x0624, 0x00A3, 0x0625, 0x0626, 0x0627, + 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x0636, 0x0637, 0x0638, 0x0639, 0x063A, 0x0641, 0x00B5, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064A, + 0x2261, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0x0650, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 737 || FF_CODE_PAGE == 0 +static const WCHAR uc737[] = { /* CP737(Greek) to Unicode conversion table */ + 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, + 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, + 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03C9, 0x03AC, 0x03AD, 0x03AE, 0x03CA, 0x03AF, 0x03CC, 0x03CD, 0x03CB, 0x03CE, 0x0386, 0x0388, 0x0389, 0x038A, 0x038C, 0x038E, + 0x038F, 0x00B1, 0x2265, 0x2264, 0x03AA, 0x03AB, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 771 || FF_CODE_PAGE == 0 +static const WCHAR uc771[] = { /* CP771(KBL) to Unicode conversion table */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x0104, 0x0105, 0x010C, 0x010D, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, + 0x0118, 0x0119, 0x0116, 0x0117, 0x012E, 0x012F, 0x0160, 0x0161, 0x0172, 0x0173, 0x016A, 0x016B, 0x017D, 0x017E, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 775 || FF_CODE_PAGE == 0 +static const WCHAR uc775[] = { /* CP775(Baltic) to Unicode conversion table */ + 0x0106, 0x00FC, 0x00E9, 0x0101, 0x00E4, 0x0123, 0x00E5, 0x0107, 0x0142, 0x0113, 0x0156, 0x0157, 0x012B, 0x0179, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x014D, 0x00F6, 0x0122, 0x00A2, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x00A4, + 0x0100, 0x012A, 0x00F3, 0x017B, 0x017C, 0x017A, 0x201D, 0x00A6, 0x00A9, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x0141, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010C, 0x0118, 0x0116, 0x2563, 0x2551, 0x2557, 0x255D, 0x012E, 0x0160, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0172, 0x016A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x017D, + 0x0105, 0x010D, 0x0119, 0x0117, 0x012F, 0x0161, 0x0173, 0x016B, 0x017E, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x00D3, 0x00DF, 0x014C, 0x0143, 0x00F5, 0x00D5, 0x00B5, 0x0144, 0x0136, 0x0137, 0x013B, 0x013C, 0x0146, 0x0112, 0x0145, 0x2019, + 0x00AD, 0x00B1, 0x201C, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x201E, 0x00B0, 0x2219, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 850 || FF_CODE_PAGE == 0 +static const WCHAR uc850[] = { /* CP850(Latin 1) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, + 0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x0131, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, + 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4, + 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 852 || FF_CODE_PAGE == 0 +static const WCHAR uc852[] = { /* CP852(Latin 2) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x016F, 0x0107, 0x00E7, 0x0142, 0x00EB, 0x0150, 0x0151, 0x00EE, 0x0179, 0x00C4, 0x0106, + 0x00C9, 0x0139, 0x013A, 0x00F4, 0x00F6, 0x013D, 0x013E, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x0164, 0x0165, 0x0141, 0x00D7, 0x010D, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x0104, 0x0105, 0x017D, 0x017E, 0x0118, 0x0119, 0x00AC, 0x017A, 0x010C, 0x015F, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x011A, 0x015E, 0x2563, 0x2551, 0x2557, 0x255D, 0x017B, 0x017C, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0102, 0x0103, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, + 0x0111, 0x0110, 0x010E, 0x00CB, 0x010F, 0x0147, 0x00CD, 0x00CE, 0x011B, 0x2518, 0x250C, 0x2588, 0x2584, 0x0162, 0x016E, 0x2580, + 0x00D3, 0x00DF, 0x00D4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161, 0x0154, 0x00DA, 0x0155, 0x0170, 0x00FD, 0x00DD, 0x0163, 0x00B4, + 0x00AD, 0x02DD, 0x02DB, 0x02C7, 0x02D8, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x02D9, 0x0171, 0x0158, 0x0159, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 855 || FF_CODE_PAGE == 0 +static const WCHAR uc855[] = { /* CP855(Cyrillic) to Unicode conversion table */ + 0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404, 0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408, + 0x0459, 0x0409, 0x045A, 0x040A, 0x045B, 0x040B, 0x045C, 0x040C, 0x045E, 0x040E, 0x045F, 0x040F, 0x044E, 0x042E, 0x044A, 0x042A, + 0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414, 0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438, 0x0418, 0x2563, 0x2551, 0x2557, 0x255D, 0x0439, 0x0419, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x043A, 0x041A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, + 0x043B, 0x041B, 0x043C, 0x041C, 0x043D, 0x041D, 0x043E, 0x041E, 0x043F, 0x2518, 0x250C, 0x2588, 0x2584, 0x041F, 0x044F, 0x2580, + 0x042F, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443, 0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044C, 0x042C, 0x2116, + 0x00AD, 0x044B, 0x042B, 0x0437, 0x0417, 0x0448, 0x0428, 0x044D, 0x042D, 0x0449, 0x0429, 0x0447, 0x0427, 0x00A7, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 857 || FF_CODE_PAGE == 0 +static const WCHAR uc857[] = { /* CP857(Turkish) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0131, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x0130, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x015E, 0x015F, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x011E, 0x011F, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, + 0x00BA, 0x00AA, 0x00CA, 0x00CB, 0x00C8, 0x0000, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, + 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x0000, 0x00D7, 0x00DA, 0x00DB, 0x00D9, 0x00EC, 0x00FF, 0x00AF, 0x00B4, + 0x00AD, 0x00B1, 0x0000, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 860 || FF_CODE_PAGE == 0 +static const WCHAR uc860[] = { /* CP860(Portuguese) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E3, 0x00E0, 0x00C1, 0x00E7, 0x00EA, 0x00CA, 0x00E8, 0x00CD, 0x00D4, 0x00EC, 0x00C3, 0x00C2, + 0x00C9, 0x00C0, 0x00C8, 0x00F4, 0x00F5, 0x00F2, 0x00DA, 0x00F9, 0x00CC, 0x00D5, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x20A7, 0x00D3, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00D2, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 861 || FF_CODE_PAGE == 0 +static const WCHAR uc861[] = { /* CP861(Icelandic) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00D0, 0x00F0, 0x00DE, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00FE, 0x00FB, 0x00DD, 0x00FD, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00C1, 0x00CD, 0x00D3, 0x00DA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 862 || FF_CODE_PAGE == 0 +static const WCHAR uc862[] = { /* CP862(Hebrew) to Unicode conversion table */ + 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, + 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 863 || FF_CODE_PAGE == 0 +static const WCHAR uc863[] = { /* CP863(Canadian French) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00C2, 0x00E0, 0x00B6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x2017, 0x00C0, + 0x00C9, 0x00C8, 0x00CA, 0x00F4, 0x00CB, 0x00CF, 0x00FB, 0x00F9, 0x00A4, 0x00D4, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x00DB, 0x0192, + 0x00A6, 0x00B4, 0x00F3, 0x00FA, 0x00A8, 0x00BB, 0x00B3, 0x00AF, 0x00CE, 0x3210, 0x00AC, 0x00BD, 0x00BC, 0x00BE, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2219, + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 864 || FF_CODE_PAGE == 0 +static const WCHAR uc864[] = { /* CP864(Arabic) to Unicode conversion table */ + 0x00B0, 0x00B7, 0x2219, 0x221A, 0x2592, 0x2500, 0x2502, 0x253C, 0x2524, 0x252C, 0x251C, 0x2534, 0x2510, 0x250C, 0x2514, 0x2518, + 0x03B2, 0x221E, 0x03C6, 0x00B1, 0x00BD, 0x00BC, 0x2248, 0x00AB, 0x00BB, 0xFEF7, 0xFEF8, 0x0000, 0x0000, 0xFEFB, 0xFEFC, 0x0000, + 0x00A0, 0x00AD, 0xFE82, 0x00A3, 0x00A4, 0xFE84, 0x0000, 0x20AC, 0xFE8E, 0xFE8F, 0xFE95, 0xFE99, 0x060C, 0xFE9D, 0xFEA1, 0xFEA5, + 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, 0x0668, 0x0669, 0xFED1, 0x061B, 0xFEB1, 0xFEB5, 0xFEB9, 0x061F, + 0x00A2, 0xFE80, 0xFE81, 0xFE83, 0xFE85, 0xFECA, 0xFE8B, 0xFE8D, 0xFE91, 0xFE93, 0xFE97, 0xFE9B, 0xFE9F, 0xFEA3, 0xFEA7, 0xFEA9, + 0xFEAB, 0xFEAD, 0xFEAF, 0xFEB3, 0xFEB7, 0xFEBB, 0xFEBF, 0xFEC1, 0xFEC5, 0xFECB, 0xFECF, 0x00A6, 0x00AC, 0x00F7, 0x00D7, 0xFEC9, + 0x0640, 0xFED3, 0xFED7, 0xFEDB, 0xFEDF, 0xFEE3, 0xFEE7, 0xFEEB, 0xFEED, 0xFEEF, 0xFEF3, 0xFEBD, 0xFECC, 0xFECE, 0xFECD, 0xFEE1, + 0xFE7D, 0x0651, 0xFEE5, 0xFEE9, 0xFEEC, 0xFEF0, 0xFEF2, 0xFED0, 0xFED5, 0xFEF5, 0xFEF6, 0xFEDD, 0xFED9, 0xFEF1, 0x25A0, 0x0000 +}; +#endif +#if FF_CODE_PAGE == 865 || FF_CODE_PAGE == 0 +static const WCHAR uc865[] = { /* CP865(Nordic) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, + 0x00C5, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00A4, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 866 || FF_CODE_PAGE == 0 +static const WCHAR uc866[] = { /* CP866(Russian) to Unicode conversion table */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, + 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 869 || FF_CODE_PAGE == 0 +static const WCHAR uc869[] = { /* CP869(Greek 2) to Unicode conversion table */ + 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x0386, 0x00B7, 0x00B7, 0x00AC, 0x00A6, 0x2018, 0x2019, 0x0388, 0x2015, 0x0389, + 0x038A, 0x03AA, 0x038C, 0x00B7, 0x00B7, 0x038E, 0x03AB, 0x00A9, 0x038F, 0x00B2, 0x00B3, 0x03AC, 0x00A3, 0x03AD, 0x03AE, 0x03AF, + 0x03CA, 0x0390, 0x03CC, 0x03CD, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x00BD, 0x0398, 0x0399, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x039A, 0x039B, 0x039C, 0x039D, 0x2563, 0x2551, 0x2557, 0x255D, 0x039E, 0x039F, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0A30, 0x03A1, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x03A3, + 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x2518, 0x250C, 0x2588, 0x2584, 0x03B4, 0x03B5, 0x2580, + 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x0384, + 0x00AD, 0x00B1, 0x03C5, 0x03C6, 0x03C7, 0x00A7, 0x03C8, 0x0385, 0x00B0, 0x00A8, 0x03C9, 0x03CB, 0x03B0, 0x03CE, 0x25A0, 0x00A0 +}; +#endif + + + + +/*------------------------------------------------------------------------*/ +/* OEM <==> Unicode conversions for static code page configuration */ +/* SBCS fixed code page */ +/*------------------------------------------------------------------------*/ + +#if FF_CODE_PAGE != 0 && FF_CODE_PAGE < 900 +WCHAR ff_uni2oem ( /* Returns OEM code character, zero on error */ + DWORD uni, /* UTF-16 encoded character to be converted */ + WORD cp /* Code page for the conversion */ +) +{ + WCHAR c = 0; + const WCHAR *p = CVTBL(uc, FF_CODE_PAGE); + + + if (uni < 0x80) { /* ASCII? */ + c = (WCHAR)uni; + + } else { /* Non-ASCII */ + if (uni < 0x10000 && cp == FF_CODE_PAGE) { /* Is it in BMP and valid code page? */ + for (c = 0; c < 0x80 && uni != p[c]; c++) ; + c = (c + 0x80) & 0xFF; + } + } + + return c; +} + +WCHAR ff_oem2uni ( /* Returns Unicode character in UTF-16, zero on error */ + WCHAR oem, /* OEM code to be converted */ + WORD cp /* Code page for the conversion */ +) +{ + WCHAR c = 0; + const WCHAR *p = CVTBL(uc, FF_CODE_PAGE); + + + if (oem < 0x80) { /* ASCII? */ + c = oem; + + } else { /* Extended char */ + if (cp == FF_CODE_PAGE) { /* Is it a valid code page? */ + if (oem < 0x100) c = p[oem - 0x80]; + } + } + + return c; +} + +#endif + + + +/*------------------------------------------------------------------------*/ +/* OEM <==> Unicode conversions for static code page configuration */ +/* DBCS fixed code page */ +/*------------------------------------------------------------------------*/ + +#if FF_CODE_PAGE >= 900 +WCHAR ff_uni2oem ( /* Returns OEM code character, zero on error */ + DWORD uni, /* UTF-16 encoded character to be converted */ + WORD cp /* Code page for the conversion */ +) +{ + const WCHAR *p; + WCHAR c = 0, uc; + UINT i = 0, n, li, hi; + + + if (uni < 0x80) { /* ASCII? */ + c = (WCHAR)uni; + + } else { /* Non-ASCII */ + if (uni < 0x10000 && cp == FF_CODE_PAGE) { /* Is it in BMP and valid code page? */ + uc = (WCHAR)uni; + p = CVTBL(uni2oem, FF_CODE_PAGE); + hi = sizeof CVTBL(uni2oem, FF_CODE_PAGE) / 4 - 1; + li = 0; + for (n = 16; n; n--) { + i = li + (hi - li) / 2; + if (uc == p[i * 2]) break; + if (uc > p[i * 2]) { + li = i; + } else { + hi = i; + } + } + if (n != 0) c = p[i * 2 + 1]; + } + } + + return c; +} + + +WCHAR ff_oem2uni ( /* Returns Unicode character in UTF-16, zero on error */ + WCHAR oem, /* OEM code to be converted */ + WORD cp /* Code page for the conversion */ +) +{ + const WCHAR *p; + WCHAR c = 0; + UINT i = 0, n, li, hi; + + + if (oem < 0x80) { /* ASCII? */ + c = oem; + + } else { /* Extended char */ + if (cp == FF_CODE_PAGE) { /* Is it valid code page? */ + p = CVTBL(oem2uni, FF_CODE_PAGE); + hi = sizeof CVTBL(oem2uni, FF_CODE_PAGE) / 4 - 1; + li = 0; + for (n = 16; n; n--) { + i = li + (hi - li) / 2; + if (oem == p[i * 2]) break; + if (oem > p[i * 2]) { + li = i; + } else { + hi = i; + } + } + if (n != 0) c = p[i * 2 + 1]; + } + } + + return c; +} +#endif + + + +/*------------------------------------------------------------------------*/ +/* OEM <==> Unicode conversions for dynamic code page configuration */ +/*------------------------------------------------------------------------*/ + +#if FF_CODE_PAGE == 0 + +static const WORD cp_code[] = { 437, 720, 737, 771, 775, 850, 852, 855, 857, 860, 861, 862, 863, 864, 865, 866, 869, 0}; +static const WCHAR* const cp_table[] = {uc437, uc720, uc737, uc771, uc775, uc850, uc852, uc855, uc857, uc860, uc861, uc862, uc863, uc864, uc865, uc866, uc869, 0}; + + +WCHAR ff_uni2oem ( /* Returns OEM code character, zero on error */ + DWORD uni, /* UTF-16 encoded character to be converted */ + WORD cp /* Code page for the conversion */ +) +{ + const WCHAR *p; + WCHAR c = 0, uc; + UINT i, n, li, hi; + + + if (uni < 0x80) { /* ASCII? */ + c = (WCHAR)uni; + + } else { /* Non-ASCII */ + if (uni < 0x10000) { /* Is it in BMP? */ + uc = (WCHAR)uni; + p = 0; + if (cp < 900) { /* SBCS */ + for (i = 0; cp_code[i] != 0 && cp_code[i] != cp; i++) ; /* Get conversion table */ + p = cp_table[i]; + if (p) { /* Is it valid code page ? */ + for (c = 0; c < 0x80 && uc != p[c]; c++) ; /* Find OEM code in the table */ + c = (c + 0x80) & 0xFF; + } + } else { /* DBCS */ + switch (cp) { /* Get conversion table */ + case 932 : p = uni2oem932; hi = sizeof uni2oem932 / 4 - 1; break; + case 936 : p = uni2oem936; hi = sizeof uni2oem936 / 4 - 1; break; + case 949 : p = uni2oem949; hi = sizeof uni2oem949 / 4 - 1; break; + case 950 : p = uni2oem950; hi = sizeof uni2oem950 / 4 - 1; break; + } + if (p) { /* Is it valid code page? */ + li = 0; + for (n = 16; n; n--) { /* Find OEM code */ + i = li + (hi - li) / 2; + if (uc == p[i * 2]) break; + if (uc > p[i * 2]) { + li = i; + } else { + hi = i; + } + } + if (n != 0) c = p[i * 2 + 1]; + } + } + } + } + + return c; +} + + +WCHAR ff_oem2uni ( /* Returns Unicode character in UTF-16, zero on error */ + WCHAR oem, /* OEM code to be converted (DBC if >=0x100) */ + WORD cp /* Code page for the conversion */ +) +{ + const WCHAR *p; + WCHAR c = 0; + UINT i, n, li, hi; + + + if (oem < 0x80) { /* ASCII? */ + c = oem; + + } else { /* Extended char */ + p = 0; + if (cp < 900) { /* SBCS */ + for (i = 0; cp_code[i] != 0 && cp_code[i] != cp; i++) ; /* Get table */ + p = cp_table[i]; + if (p) { /* Is it a valid CP ? */ + if (oem < 0x100) c = p[oem - 0x80]; + } + } else { /* DBCS */ + switch (cp) { + case 932 : p = oem2uni932; hi = sizeof oem2uni932 / 4 - 1; break; + case 936 : p = oem2uni936; hi = sizeof oem2uni936 / 4 - 1; break; + case 949 : p = oem2uni949; hi = sizeof oem2uni949 / 4 - 1; break; + case 950 : p = oem2uni950; hi = sizeof oem2uni950 / 4 - 1; break; + } + if (p) { + li = 0; + for (n = 16; n; n--) { + i = li + (hi - li) / 2; + if (oem == p[i * 2]) break; + if (oem > p[i * 2]) { + li = i; + } else { + hi = i; + } + } + if (n != 0) c = p[i * 2 + 1]; + } + } + } + + return c; +} +#endif + + + +/*------------------------------------------------------------------------*/ +/* Unicode up-case conversion */ +/*------------------------------------------------------------------------*/ + +DWORD ff_wtoupper ( /* Returns up-converted code point */ + DWORD uni /* Unicode code point to be up-converted */ +) +{ + const WORD *p; + WORD uc, bc, nc, cmd; + static const WORD cvt1[] = { /* Compressed up conversion table for U+0000 - U+0FFF */ + /* Basic Latin */ + 0x0061,0x031A, + /* Latin-1 Supplement */ + 0x00E0,0x0317, + 0x00F8,0x0307, + 0x00FF,0x0001,0x0178, + /* Latin Extended-A */ + 0x0100,0x0130, + 0x0132,0x0106, + 0x0139,0x0110, + 0x014A,0x012E, + 0x0179,0x0106, + /* Latin Extended-B */ + 0x0180,0x004D,0x0243,0x0181,0x0182,0x0182,0x0184,0x0184,0x0186,0x0187,0x0187,0x0189,0x018A,0x018B,0x018B,0x018D,0x018E,0x018F,0x0190,0x0191,0x0191,0x0193,0x0194,0x01F6,0x0196,0x0197,0x0198,0x0198,0x023D,0x019B,0x019C,0x019D,0x0220,0x019F,0x01A0,0x01A0,0x01A2,0x01A2,0x01A4,0x01A4,0x01A6,0x01A7,0x01A7,0x01A9,0x01AA,0x01AB,0x01AC,0x01AC,0x01AE,0x01AF,0x01AF,0x01B1,0x01B2,0x01B3,0x01B3,0x01B5,0x01B5,0x01B7,0x01B8,0x01B8,0x01BA,0x01BB,0x01BC,0x01BC,0x01BE,0x01F7,0x01C0,0x01C1,0x01C2,0x01C3,0x01C4,0x01C5,0x01C4,0x01C7,0x01C8,0x01C7,0x01CA,0x01CB,0x01CA, + 0x01CD,0x0110, + 0x01DD,0x0001,0x018E, + 0x01DE,0x0112, + 0x01F3,0x0003,0x01F1,0x01F4,0x01F4, + 0x01F8,0x0128, + 0x0222,0x0112, + 0x023A,0x0009,0x2C65,0x023B,0x023B,0x023D,0x2C66,0x023F,0x0240,0x0241,0x0241, + 0x0246,0x010A, + /* IPA Extensions */ + 0x0253,0x0040,0x0181,0x0186,0x0255,0x0189,0x018A,0x0258,0x018F,0x025A,0x0190,0x025C,0x025D,0x025E,0x025F,0x0193,0x0261,0x0262,0x0194,0x0264,0x0265,0x0266,0x0267,0x0197,0x0196,0x026A,0x2C62,0x026C,0x026D,0x026E,0x019C,0x0270,0x0271,0x019D,0x0273,0x0274,0x019F,0x0276,0x0277,0x0278,0x0279,0x027A,0x027B,0x027C,0x2C64,0x027E,0x027F,0x01A6,0x0281,0x0282,0x01A9,0x0284,0x0285,0x0286,0x0287,0x01AE,0x0244,0x01B1,0x01B2,0x0245,0x028D,0x028E,0x028F,0x0290,0x0291,0x01B7, + /* Greek, Coptic */ + 0x037B,0x0003,0x03FD,0x03FE,0x03FF, + 0x03AC,0x0004,0x0386,0x0388,0x0389,0x038A, + 0x03B1,0x0311, + 0x03C2,0x0002,0x03A3,0x03A3, + 0x03C4,0x0308, + 0x03CC,0x0003,0x038C,0x038E,0x038F, + 0x03D8,0x0118, + 0x03F2,0x000A,0x03F9,0x03F3,0x03F4,0x03F5,0x03F6,0x03F7,0x03F7,0x03F9,0x03FA,0x03FA, + /* Cyrillic */ + 0x0430,0x0320, + 0x0450,0x0710, + 0x0460,0x0122, + 0x048A,0x0136, + 0x04C1,0x010E, + 0x04CF,0x0001,0x04C0, + 0x04D0,0x0144, + /* Armenian */ + 0x0561,0x0426, + + 0x0000 /* EOT */ + }; + static const WORD cvt2[] = { /* Compressed up conversion table for U+1000 - U+FFFF */ + /* Phonetic Extensions */ + 0x1D7D,0x0001,0x2C63, + /* Latin Extended Additional */ + 0x1E00,0x0196, + 0x1EA0,0x015A, + /* Greek Extended */ + 0x1F00,0x0608, + 0x1F10,0x0606, + 0x1F20,0x0608, + 0x1F30,0x0608, + 0x1F40,0x0606, + 0x1F51,0x0007,0x1F59,0x1F52,0x1F5B,0x1F54,0x1F5D,0x1F56,0x1F5F, + 0x1F60,0x0608, + 0x1F70,0x000E,0x1FBA,0x1FBB,0x1FC8,0x1FC9,0x1FCA,0x1FCB,0x1FDA,0x1FDB,0x1FF8,0x1FF9,0x1FEA,0x1FEB,0x1FFA,0x1FFB, + 0x1F80,0x0608, + 0x1F90,0x0608, + 0x1FA0,0x0608, + 0x1FB0,0x0004,0x1FB8,0x1FB9,0x1FB2,0x1FBC, + 0x1FCC,0x0001,0x1FC3, + 0x1FD0,0x0602, + 0x1FE0,0x0602, + 0x1FE5,0x0001,0x1FEC, + 0x1FF3,0x0001,0x1FFC, + /* Letterlike Symbols */ + 0x214E,0x0001,0x2132, + /* Number forms */ + 0x2170,0x0210, + 0x2184,0x0001,0x2183, + /* Enclosed Alphanumerics */ + 0x24D0,0x051A, + 0x2C30,0x042F, + /* Latin Extended-C */ + 0x2C60,0x0102, + 0x2C67,0x0106, 0x2C75,0x0102, + /* Coptic */ + 0x2C80,0x0164, + /* Georgian Supplement */ + 0x2D00,0x0826, + /* Full-width */ + 0xFF41,0x031A, + + 0x0000 /* EOT */ + }; + + + if (uni < 0x10000) { /* Is it in BMP? */ + uc = (WORD)uni; + p = uc < 0x1000 ? cvt1 : cvt2; + for (;;) { + bc = *p++; /* Get the block base */ + if (bc == 0 || uc < bc) break; /* Not matched? */ + nc = *p++; cmd = nc >> 8; nc &= 0xFF; /* Get processing command and block size */ + if (uc < bc + nc) { /* In the block? */ + switch (cmd) { + case 0: uc = p[uc - bc]; break; /* Table conversion */ + case 1: uc -= (uc - bc) & 1; break; /* Case pairs */ + case 2: uc -= 16; break; /* Shift -16 */ + case 3: uc -= 32; break; /* Shift -32 */ + case 4: uc -= 48; break; /* Shift -48 */ + case 5: uc -= 26; break; /* Shift -26 */ + case 6: uc += 8; break; /* Shift +8 */ + case 7: uc -= 80; break; /* Shift -80 */ + case 8: uc -= 0x1C60; break; /* Shift -0x1C60 */ + } + break; + } + if (cmd == 0) p += nc; /* Skip table if needed */ + } + uni = uc; + } + + return uni; +} + + +#endif /* #if FF_USE_LFN */ diff --git a/MCUME_pico/FatFs_SPI/include/f_util.h b/MCUME_pico/FatFs_SPI/include/f_util.h new file mode 100755 index 0000000..bd10a1b --- /dev/null +++ b/MCUME_pico/FatFs_SPI/include/f_util.h @@ -0,0 +1,3 @@ +#pragma once +#include "ff.h" +const char *FRESULT_str(FRESULT i); \ No newline at end of file diff --git a/MCUME_pico/FatFs_SPI/include/ff_headers.h b/MCUME_pico/FatFs_SPI/include/ff_headers.h new file mode 100755 index 0000000..9c0dca2 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/include/ff_headers.h @@ -0,0 +1 @@ +// For compatibility with FreeRTOS+FAT API \ No newline at end of file diff --git a/MCUME_pico/FatFs_SPI/include/ff_stdio.h b/MCUME_pico/FatFs_SPI/include/ff_stdio.h new file mode 100755 index 0000000..7a36ddc --- /dev/null +++ b/MCUME_pico/FatFs_SPI/include/ff_stdio.h @@ -0,0 +1,64 @@ +// For compatibility with FreeRTOS+FAT API +#include +#include +#include +#include +// +#include "ff.h" +// +#include "my_debug.h" + +#define BaseType_t int +#define FF_FILE FIL + +#define ff_rewind f_rewind +#define pvPortMalloc malloc +#define vPortFree free +#define ffconfigMAX_FILENAME 250 +#define configASSERT myASSERT +#define FF_PRINTF printf +#define pdFREERTOS_ERRNO_NONE 0 +#define FF_EOF (-1) +#define FF_SEEK_SET 0 +#define FF_SEEK_CUR 1 +#define FF_SEEK_END 2 +#define pdFALSE 0 +#define pdTRUE 1 +#define ff_filelength f_size +#define ff_feof f_eof + +typedef struct FF_STAT { + uint32_t st_size; /* Size of the object in number of bytes. */ + // uint16_t st_mode; /* The mode (attribute bits) of this + // file or directory. */ +} FF_Stat_t; + +typedef struct { + DIR dir; + FILINFO fileinfo; + const char *pcFileName; + uint32_t ulFileSize; + //uint8_t ucAttributes; +} FF_FindData_t; + +FF_FILE *ff_fopen(const char *pcFile, const char *pcMode); +int ff_fclose(FF_FILE *pxStream); +int ff_stat(const char *pcFileName, FF_Stat_t *pxStatBuffer); +size_t ff_fwrite(const void *pvBuffer, size_t xSize, size_t xItems, + FF_FILE *pxStream); +size_t ff_fread(void *pvBuffer, size_t xSize, size_t xItems, FF_FILE *pxStream); +int ff_chdir(const char *pcDirectoryName); +char *ff_getcwd(char *pcBuffer, size_t xBufferLength); +int ff_mkdir(const char *pcPath); +int ff_fputc(int iChar, FF_FILE *pxStream); +int ff_fgetc(FF_FILE *pxStream); +int ff_rmdir(const char *pcDirectory); +int ff_remove(const char *pcPath); +long ff_ftell(FF_FILE *pxStream); +int ff_fseek(FF_FILE *pxStream, int iOffset, int iWhence); +int ff_findfirst(const char *pcDirectory, FF_FindData_t *pxFindData); +int ff_findnext( FF_FindData_t *pxFindData ); +FF_FILE *ff_truncate( const char * pcFileName, long lTruncateSize ); +int ff_seteof( FF_FILE *pxStream ); +int ff_rename( const char *pcOldName, const char *pcNewName, int bDeleteIfExists ); +char *ff_fgets( char *pcBuffer, size_t xCount, FF_FILE *pxStream ); \ No newline at end of file diff --git a/MCUME_pico/FatFs_SPI/include/rtc.h b/MCUME_pico/FatFs_SPI/include/rtc.h new file mode 100755 index 0000000..da950f0 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/include/rtc.h @@ -0,0 +1,19 @@ +#pragma once + +#include + +#include "hardware/rtc.h" +#include "pico/util/datetime.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern time_t epochtime; + +void time_init(); +void setrtc(datetime_t *t); + +#ifdef __cplusplus +} +#endif diff --git a/MCUME_pico/FatFs_SPI/include/util.h b/MCUME_pico/FatFs_SPI/include/util.h new file mode 100755 index 0000000..e6a4a90 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/include/util.h @@ -0,0 +1,67 @@ +/* ======================================== + * + * Copyright YOUR COMPANY, THE YEAR + * All Rights Reserved + * UNPUBLISHED, LICENSED SOFTWARE. + * + * CONFIDENTIAL AND PROPRIETARY INFORMATION + * WHICH IS THE PROPERTY OF your company. + * + * ======================================== +*/ + +#ifndef _UTIL_H_ +#define _UTIL_H_ + +#include +#include + +#include "hardware/structs/scb.h" + +// works with negative index +static inline int wrap_ix(int index, int n) +{ + return ((index % n) + n) % n; +} + +__attribute__((always_inline)) static inline uint32_t calculate_checksum(uint32_t const *p, size_t const size){ + uint32_t checksum = 0; + for (uint32_t i = 0; i < (size/sizeof(uint32_t))-1; i++){ + checksum ^= *p; + p++; + } + return checksum; +} + + +// from Google Chromium's codebase: +#ifndef COUNT_OF +#define COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x]))))) +#endif + +__attribute__((always_inline)) static inline void __DSB(void) { + __asm volatile("dsb 0xF" ::: "memory"); +} + +// Patterned after CMSIS NVIC_SystemReset +__attribute__((__noreturn__)) static inline void system_reset() { + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + scb_hw->aircr = ((0x5FAUL << 16U) | (1UL << 2U)); + __DSB(); /* Ensure completion of memory access */ + for (;;) { + __asm volatile("nop"); + } +} + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__((always_inline)) static inline void __disable_irq(void) { + __asm volatile("cpsid i" : : : "memory"); +} + +#endif +/* [] END OF FILE */ diff --git a/MCUME_pico/FatFs_SPI/sd_driver/crc.c b/MCUME_pico/FatFs_SPI/sd_driver/crc.c new file mode 100755 index 0000000..bc19239 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/sd_driver/crc.c @@ -0,0 +1,103 @@ +/* Derived from: + * SD/MMC File System Library + * Copyright (c) 2016 Neil Thiessen + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "crc.h" + +static const char m_Crc7Table[] = {0x00, 0x09, 0x12, 0x1B, 0x24, 0x2D, 0x36, + 0x3F, 0x48, 0x41, 0x5A, 0x53, 0x6C, 0x65, 0x7E, 0x77, 0x19, 0x10, 0x0B, + 0x02, 0x3D, 0x34, 0x2F, 0x26, 0x51, 0x58, 0x43, 0x4A, 0x75, 0x7C, 0x67, + 0x6E, 0x32, 0x3B, 0x20, 0x29, 0x16, 0x1F, 0x04, 0x0D, 0x7A, 0x73, 0x68, + 0x61, 0x5E, 0x57, 0x4C, 0x45, 0x2B, 0x22, 0x39, 0x30, 0x0F, 0x06, 0x1D, + 0x14, 0x63, 0x6A, 0x71, 0x78, 0x47, 0x4E, 0x55, 0x5C, 0x64, 0x6D, 0x76, + 0x7F, 0x40, 0x49, 0x52, 0x5B, 0x2C, 0x25, 0x3E, 0x37, 0x08, 0x01, 0x1A, + 0x13, 0x7D, 0x74, 0x6F, 0x66, 0x59, 0x50, 0x4B, 0x42, 0x35, 0x3C, 0x27, + 0x2E, 0x11, 0x18, 0x03, 0x0A, 0x56, 0x5F, 0x44, 0x4D, 0x72, 0x7B, 0x60, + 0x69, 0x1E, 0x17, 0x0C, 0x05, 0x3A, 0x33, 0x28, 0x21, 0x4F, 0x46, 0x5D, + 0x54, 0x6B, 0x62, 0x79, 0x70, 0x07, 0x0E, 0x15, 0x1C, 0x23, 0x2A, 0x31, + 0x38, 0x41, 0x48, 0x53, 0x5A, 0x65, 0x6C, 0x77, 0x7E, 0x09, 0x00, 0x1B, + 0x12, 0x2D, 0x24, 0x3F, 0x36, 0x58, 0x51, 0x4A, 0x43, 0x7C, 0x75, 0x6E, + 0x67, 0x10, 0x19, 0x02, 0x0B, 0x34, 0x3D, 0x26, 0x2F, 0x73, 0x7A, 0x61, + 0x68, 0x57, 0x5E, 0x45, 0x4C, 0x3B, 0x32, 0x29, 0x20, 0x1F, 0x16, 0x0D, + 0x04, 0x6A, 0x63, 0x78, 0x71, 0x4E, 0x47, 0x5C, 0x55, 0x22, 0x2B, 0x30, + 0x39, 0x06, 0x0F, 0x14, 0x1D, 0x25, 0x2C, 0x37, 0x3E, 0x01, 0x08, 0x13, + 0x1A, 0x6D, 0x64, 0x7F, 0x76, 0x49, 0x40, 0x5B, 0x52, 0x3C, 0x35, 0x2E, + 0x27, 0x18, 0x11, 0x0A, 0x03, 0x74, 0x7D, 0x66, 0x6F, 0x50, 0x59, 0x42, + 0x4B, 0x17, 0x1E, 0x05, 0x0C, 0x33, 0x3A, 0x21, 0x28, 0x5F, 0x56, 0x4D, + 0x44, 0x7B, 0x72, 0x69, 0x60, 0x0E, 0x07, 0x1C, 0x15, 0x2A, 0x23, 0x38, + 0x31, 0x46, 0x4F, 0x54, 0x5D, 0x62, 0x6B, 0x70, 0x79}; + +static const unsigned short m_Crc16Table[256] = {0x0000, 0x1021, 0x2042, + 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, 0x8108, 0x9129, 0xA14A, 0xB16B, + 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, + 0x4294, 0x72F7, 0x62D6, 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, + 0xF3FF, 0xE3DE, 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, + 0x5485, 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, 0xB75B, + 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, 0x48C4, 0x58E5, + 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, 0xC9CC, 0xD9ED, 0xE98E, + 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, + 0x1A71, 0x0A50, 0x3A33, 0x2A12, 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, + 0x8B58, 0xBB3B, 0xAB1A, 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, + 0x0C60, 0x1C41, 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, + 0x9D49, 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, + 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, 0x9188, + 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, 0x1080, 0x00A1, + 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83B9, 0x9398, 0xA3FB, + 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, 0x02B1, 0x1290, 0x22F3, 0x32D2, + 0x4235, 0x5214, 0x6277, 0x7256, 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, + 0xE54F, 0xD52C, 0xC50D, 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, + 0x5424, 0x4405, 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, + 0xD73C, 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, 0x5844, + 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, 0xCB7D, 0xDB5C, + 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, 0x4A75, 0x5A54, 0x6A37, + 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, + 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, + 0x2C83, 0x1CE0, 0x0CC1, 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, + 0x8FD9, 0x9FF8, 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, + 0x1EF0}; + +char crc7(const char* data, int length) +{ + //Calculate the CRC7 checksum for the specified data block + char crc = 0; + for (int i = 0; i < length; i++) { + crc = m_Crc7Table[(crc << 1) ^ data[i]]; + } + + //Return the calculated checksum + return crc; +} + +unsigned short crc16(const char* data, int length) +{ + //Calculate the CRC16 checksum for the specified data block + unsigned short crc = 0; + for (int i = 0; i < length; i++) { + crc = (crc << 8) ^ m_Crc16Table[((crc >> 8) ^ data[i]) & 0x00FF]; + } + + //Return the calculated checksum + return crc; +} + +void update_crc16(unsigned short *pCrc16, const char data[], size_t length) { + for (size_t i = 0; i < length; i++) { + *pCrc16 = (*pCrc16 << 8) ^ m_Crc16Table[((*pCrc16 >> 8) ^ data[i]) & 0x00FF]; + } +} +/* [] END OF FILE */ diff --git a/MCUME_pico/FatFs_SPI/sd_driver/crc.h b/MCUME_pico/FatFs_SPI/sd_driver/crc.h new file mode 100755 index 0000000..9bddbaf --- /dev/null +++ b/MCUME_pico/FatFs_SPI/sd_driver/crc.h @@ -0,0 +1,29 @@ +/* Derived from: + * SD/MMC File System Library + * Copyright (c) 2016 Neil Thiessen + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SD_CRC_H +#define SD_CRC_H + +#include + +char crc7(const char* data, int length); +unsigned short crc16(const char* data, int length); +void update_crc16(unsigned short *pCrc16, const char data[], size_t length); + +#endif + +/* [] END OF FILE */ diff --git a/MCUME_pico/FatFs_SPI/sd_driver/demo_logging.c b/MCUME_pico/FatFs_SPI/sd_driver/demo_logging.c new file mode 100755 index 0000000..16bd464 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/sd_driver/demo_logging.c @@ -0,0 +1,83 @@ +/* + FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS 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 >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS 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. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined myASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +#include +#include + +void vLoggingPrintf( const char *pcFormat, ... ) +{ + char pcBuffer[256] = {0}; + va_list xArgs; + va_start( xArgs, pcFormat ); + vsnprintf( pcBuffer, sizeof(pcBuffer), pcFormat, xArgs ); + va_end( xArgs ); + printf("%s", pcBuffer); + fflush(stdout); +} +/*-----------------------------------------------------------*/ diff --git a/MCUME_pico/FatFs_SPI/sd_driver/hw_config.c b/MCUME_pico/FatFs_SPI/sd_driver/hw_config.c new file mode 100755 index 0000000..1868f8c --- /dev/null +++ b/MCUME_pico/FatFs_SPI/sd_driver/hw_config.c @@ -0,0 +1,111 @@ +/* ======================================== + * + * Copyright YOUR COMPANY, THE YEAR + * All Rights Reserved + * UNPUBLISHED, LICENSED SOFTWARE. + * + * CONFIDENTIAL AND PROPRIETARY INFORMATION + * WHICH IS THE PROPERTY OF your company. + * + * ======================================== + */ +/* + +This file should be tailored to match the hardware design that is specified in +TopDesign.cysch and Design Wide Resources/Pins (the .cydwr file). + +There should be one element of the spi[] array for each hardware SPI used. + +There should be one element of the sd_cards[] array for each SD card slot. +The name is arbitrary. The rest of the constants will depend on the type of +socket, which SPI it is driven by, and how it is wired. + +*/ + +#include +// +#include "my_debug.h" +// +#include "hw_config.h" + +void spi0_dma_isr(); + +// Hardware Configuration of SPI "objects" +// Note: multiple SD cards can be driven by one SPI if they use different slave +// selects. +static spi_t spis[] = { // One for each SPI. + { + .hw_inst = spi0, // SPI component + .miso_gpio = 16, + .mosi_gpio = 19, + .sck_gpio = 18, + /* The choice of SD card matters! SanDisk runs at the highest speed. PNY + can only mangage 5 MHz. Those are all I've tried. */ + .baud_rate = 1000 * 1000, + //.baud_rate = 12500 * 1000, // The limitation here is SPI slew rate. + //.baud_rate = 25 * 1000 * 1000, // Actual frequency: 20833333. Has + // worked for me with SanDisk. + + // Following attributes are dynamically assigned + .dma_isr = spi0_dma_isr, + .initialized = false, // initialized flag + }}; + +// Hardware Configuration of the SD Card "objects" +static sd_card_t sd_cards[] = { // One for each SD card + { + .pcName = "0:", // Name used to mount device + .spi = &spis[0], // Pointer to the SPI driving this card + .ss_gpio = 17, // The SPI slave select GPIO for this SD card + .card_detect_gpio = 22, // Card detect + .card_detected_true = 1, // What the GPIO read returns when a card is + // present. Use -1 if there is no card detect. + // Following attributes are dynamically assigned + .m_Status = STA_NOINIT, + .sectors = 0, + .card_type = 0, + } +#if defined N_SD_CARDS && N_SD_CARDS > 1 // See CMakeLists.txt + ,{ + .pcName = "1:", // Name used to mount device + .spi = &spis[0], // Pointer to the SPI driving this card + .ss_gpio = 15, // The SPI slave select GPIO for this SD card + .card_detect_gpio = 14, // Card detect + .card_detected_true = 1, // What the GPIO read returns when a card is + // present. Use -1 if there is no card detect. + // Following attributes are dynamically assigned + .m_Status = STA_NOINIT, + .sectors = 0, + .card_type = 0, + } +#endif + }; + +void spi0_dma_isr() { spi_irq_handler(&spis[0]); } + +/* ********************************************************************** */ +size_t sd_get_num() { return count_of(sd_cards); } +sd_card_t *sd_get_by_num(size_t num) { + if (num <= sd_get_num()) { + return &sd_cards[num]; + } else { + return NULL; + } +} +sd_card_t *sd_get_by_name(const char *const name) { + size_t i; + for (i = 0; i < sd_get_num(); ++i) { + if (0 == strcmp(sd_cards[i].pcName, name)) return &sd_cards[i]; + } + DBG_PRINTF("%s: unknown name %s\n", __func__, name); + return NULL; +} +size_t spi_get_num() { return count_of(spis); } +spi_t *spi_get_by_num(size_t num) { + if (num <= sd_get_num()) { + return &spis[num]; + } else { + return NULL; + } +} +/* [] END OF FILE */ diff --git a/MCUME_pico/FatFs_SPI/sd_driver/hw_config.h b/MCUME_pico/FatFs_SPI/sd_driver/hw_config.h new file mode 100755 index 0000000..ba35805 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/sd_driver/hw_config.h @@ -0,0 +1,10 @@ +#pragma once + +#include "sd_card.h" + +size_t sd_get_num(); +sd_card_t *sd_get_by_num(size_t num); +sd_card_t *sd_get_by_name(const char *const name); +size_t spi_get_num(); +spi_t *spi_get_by_num(size_t num); +/* [] END OF FILE */ diff --git a/MCUME_pico/FatFs_SPI/sd_driver/my_debug.c b/MCUME_pico/FatFs_SPI/sd_driver/my_debug.c new file mode 100755 index 0000000..8444060 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/sd_driver/my_debug.c @@ -0,0 +1,13 @@ +#include "my_debug.h" + +void my_assert_func(const char *file, int line, const char *func, + const char *pred) { + printf("assertion \"%s\" failed: file \"%s\", line %d, function: %s\n", + pred, file, line, func); + fflush(stdout); + __asm volatile("cpsid i" : : : "memory"); /* Disable global interrupts. */ + while (1) { + __asm("bkpt #0"); + }; // Stop in GUI as if at a breakpoint (if debugging, otherwise loop + // forever) +} diff --git a/MCUME_pico/FatFs_SPI/sd_driver/my_debug.h b/MCUME_pico/FatFs_SPI/sd_driver/my_debug.h new file mode 100755 index 0000000..25ae359 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/sd_driver/my_debug.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +void my_printf(const char *pcFormat, ...) __attribute__((format(__printf__, 1, 2))); + +//#if defined(DEBUG) && !defined(NDEBUG) +#define DBG_PRINTF my_printf +//#else +//#define DBG_PRINTF(fmt, args...) /* Don't do anything in release builds*/ +//#endif + +void my_assert_func(const char *file, int line, const char *func, + const char *pred); + +#define myASSERT(__e) \ + ((__e) ? (void)0 : my_assert_func(__FILE__, __LINE__, __func__, #__e)) diff --git a/MCUME_pico/FatFs_SPI/sd_driver/sd_card.c b/MCUME_pico/FatFs_SPI/sd_driver/sd_card.c new file mode 100755 index 0000000..f1e8a26 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/sd_driver/sd_card.c @@ -0,0 +1,1118 @@ +/* + * This code borrows heavily from the Mbed SDBlockDevice: + * https://os.mbed.com/docs/mbed-os/v5.15/apis/sdblockdevice.html + * mbed-os/components/storage/blockdevice/COMPONENT_SD/SDBlockDevice.cpp + * + * Editor: Carl Kugler (carlk3@gmail.com) + * + * Remember your ABCs: "Always Be Cobbling!" + */ + +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Introduction + * ------------ + * SD and MMC cards support a number of interfaces, but common to them all + * is one based on SPI. Since we already have the mbed SPI Interface, it will + * be used for SD cards. + * + * The main reference I'm using is Chapter 7, "SPI Mode" of: + * http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf + * + * SPI Startup + * ----------- + * The SD card powers up in SD mode. The start-up procedure is complicated + * by the requirement to support older SDCards in a backwards compatible + * way with the new higher capacity variants SDHC and SDHC. + * + * The following figures from the specification with associated text describe + * the SPI mode initialisation process: + * - Figure 7-1: SD Memory Card State Diagram (SPI mode) + * - Figure 7-2: SPI Mode Initialization Flow + * + * Firstly, a low initial clock should be selected (in the range of 100- + * 400kHZ). After initialisation has been completed, the switch to a + * higher clock speed can be made (e.g. 1MHz). Newer cards will support + * higher speeds than the default _transfer_sck defined here. + * + * Next, note the following from the SDCard specification (note to + * Figure 7-1): + * + * In any of the cases CMD1 is not recommended because it may be difficult for + * the host to distinguish between MultiMediaCard and SD Memory Card + * + * Hence CMD1 is not used for the initialisation sequence. + * + * The SPI interface mode is selected by asserting CS low and sending the + * reset command (CMD0). The card will respond with a (R1) response. + * In practice many cards initially respond with 0xff or invalid data + * which is ignored. Data is read until a valid response is received + * or the number of re-reads has exceeded a maximim count. If a valid + * response is not received then the CMD0 can be retried. This + * has been found to successfully initialise cards where the SPI master + * (on MCU) has been reset but the SDCard has not, so the first + * CMD0 may be lost. + * + * CMD8 is optionally sent to determine the voltage range supported, and + * indirectly determine whether it is a version 1.x SD/non-SD card or + * version 2.x. I'll just ignore this for now. + * + * ACMD41 is repeatedly issued to initialise the card, until "in idle" + * (bit 0) of the R1 response goes to '0', indicating it is initialised. + * + * You should also indicate whether the host supports High Capicity cards, + * and check whether the card is high capacity - i'll also ignore this + * + * SPI Protocol + * ------------ + * The SD SPI protocol is based on transactions made up of 8-bit words, with + * the host starting every bus transaction by asserting the CS signal low. The + * card always responds to commands, data blocks and errors. + * + * The protocol supports a CRC, but by default it is off (except for the + * first reset CMD0, where the CRC can just be pre-calculated, and CMD8) + * I'll leave the CRC off I think! + * + * Standard capacity cards have variable data block sizes, whereas High + * Capacity cards fix the size of data block to 512 bytes. I'll therefore + * just always use the Standard Capacity cards with a block size of 512 bytes. + * This is set with CMD16. + * + * You can read and write single blocks (CMD17, CMD25) or multiple blocks + * (CMD18, CMD25). For simplicity, I'll just use single block accesses. When + * the card gets a read command, it responds with a response token, and then + * a data token or an error. + * + * SPI Command Format + * ------------------ + * Commands are 6-bytes long, containing the command, 32-bit argument, and CRC. + * + * +---------------+------------+------------+-----------+----------+--------------+ + * | 01 | cmd[5:0] | arg[31:24] | arg[23:16] | arg[15:8] | arg[7:0] | crc[6:0] | + * 1 | + * +---------------+------------+------------+-----------+----------+--------------+ + * + * As I'm not using CRC, I can fix that byte to what is needed for CMD0 (0x95) + * + * All Application Specific commands shall be preceded with APP_CMD (CMD55). + * + * SPI Response Format + * ------------------- + * The main response format (R1) is a status byte (normally zero). Key flags: + * idle - 1 if the card is in an idle state/initialising + * cmd - 1 if an illegal command code was detected + * + * +-------------------------------------------------+ + * R1 | 0 | arg | addr | seq | crc | cmd | erase | idle | + * +-------------------------------------------------+ + * + * R1b is the same, except it is followed by a busy signal (zeros) until + * the first non-zero byte when it is ready again. + * + * Data Response Token + * ------------------- + * Every data block written to the card is acknowledged by a byte + * response token + * + * +----------------------+ + * | xxx | 0 | status | 1 | + * +----------------------+ + * 010 - OK! + * 101 - CRC Error + * 110 - Write Error + * + * Single Block Read and Write + * --------------------------- + * + * Block transfers have a byte header, followed by the data, followed + * by a 16-bit CRC. In our case, the data will always be 512 bytes. + * + * +------+---------+---------+- - - -+---------+-----------+----------+ + * | 0xFE | data[0] | data[1] | | data[n] | crc[15:8] | crc[7:0] | + * +------+---------+---------+- - - -+---------+-----------+----------+ + */ + +/* Standard includes. */ +#include +#include +// +#include "my_debug.h" +#include "hw_config.h" // Hardware Configuration of the SPI and SD Card "objects" +#include "sd_spi.h" +// +#include "sd_card.h" + +#define SD_CRC_ENABLED 1 + +#if SD_CRC_ENABLED +#include "crc.h" +static bool crc_on = true; +#endif + +#define TRACE_PRINTF(fmt, args...) +//#define TRACE_PRINTF printf + +#define TRC_PR_ADD(fmt, args...) +//#define TRC_PR_ADD printf + +#define TRACE_PRINTF2(fmt, args...) +/* +#define TRACE_PRINTF2(format, ...) \ + { \ + printf(format, __VA_ARGS__); \ + fflush(stdout); \ + } +*/ + +/* Control Tokens */ +#define SPI_DATA_RESPONSE_MASK (0x1F) +#define SPI_DATA_ACCEPTED (0x05) +#define SPI_DATA_CRC_ERROR (0x0B) +#define SPI_DATA_WRITE_ERROR (0x0D) +#define SPI_START_BLOCK \ + (0xFE) /*!< For Single Block Read/Write and Multiple Block Read */ +#define SPI_START_BLK_MUL_WRITE (0xFC) /*!< Start Multi-block write */ +#define SPI_STOP_TRAN (0xFD) /*!< Stop Multi-block write */ + +#define SPI_DATA_READ_ERROR_MASK (0xF) /*!< Data Error Token: 4 LSB bits */ +#define SPI_READ_ERROR (0x1 << 0) /*!< Error */ +#define SPI_READ_ERROR_CC (0x1 << 1) /*!< CC Error*/ +#define SPI_READ_ERROR_ECC_C (0x1 << 2) /*!< Card ECC failed */ +#define SPI_READ_ERROR_OFR (0x1 << 3) /*!< Out of Range */ + +// SPI Slave Select +#define SSEL_ACTIVE (0) +#define SSEL_INACTIVE (1) + +/** Represents the different SD/MMC card types */ +// Types +#define SDCARD_NONE 0 /**< No card is present */ +#define SDCARD_V1 1 /**< v1.x Standard Capacity */ +#define SDCARD_V2 2 /**< v2.x Standard capacity SD card */ +#define SDCARD_V2HC 3 /**< v2.x High capacity SD card */ +#define CARD_UNKNOWN 4 /**< Unknown or unsupported card */ + +// Only HC block size is supported. Making this a static constant reduces code +// size. +#define BLOCK_SIZE_HC 512 /*!< Block size supported for SD card is 512 bytes */ +static const uint32_t _block_size = BLOCK_SIZE_HC; + +/* R1 Response Format */ +#define R1_NO_RESPONSE (0xFF) +#define R1_RESPONSE_RECV (0x80) +#define R1_IDLE_STATE (1 << 0) +#define R1_ERASE_RESET (1 << 1) +#define R1_ILLEGAL_COMMAND (1 << 2) +#define R1_COM_CRC_ERROR (1 << 3) +#define R1_ERASE_SEQUENCE_ERROR (1 << 4) +#define R1_ADDRESS_ERROR (1 << 5) +#define R1_PARAMETER_ERROR (1 << 6) + +// Supported SD Card Commands +typedef enum { + CMD_NOT_SUPPORTED = -1, /**< Command not supported error */ + CMD0_GO_IDLE_STATE = 0, /**< Resets the SD Memory Card */ + CMD1_SEND_OP_COND = 1, /**< Sends host capacity support */ + CMD6_SWITCH_FUNC = 6, /**< Check and Switches card function */ + CMD8_SEND_IF_COND = 8, /**< Supply voltage info */ + CMD9_SEND_CSD = 9, /**< Provides Card Specific data */ + CMD10_SEND_CID = 10, /**< Provides Card Identification */ + CMD12_STOP_TRANSMISSION = 12, /**< Forces the card to stop transmission */ + CMD13_SEND_STATUS = 13, /**< Card responds with status */ + CMD16_SET_BLOCKLEN = 16, /**< Length for SC card is set */ + CMD17_READ_SINGLE_BLOCK = 17, /**< Read single block of data */ + CMD18_READ_MULTIPLE_BLOCK = 18, /**< Card transfers data blocks to host + until interrupted by a STOP_TRANSMISSION command */ + CMD24_WRITE_BLOCK = 24, /**< Write single block of data */ + CMD25_WRITE_MULTIPLE_BLOCK = 25, /**< Continuously writes blocks of data + until 'Stop Tran' token is sent */ + CMD27_PROGRAM_CSD = 27, /**< Programming bits of CSD */ + CMD32_ERASE_WR_BLK_START_ADDR = 32, /**< Sets the address of the first write + block to be erased. */ + CMD33_ERASE_WR_BLK_END_ADDR = 33, /**< Sets the address of the last write + block of the continuous range to be erased.*/ + CMD38_ERASE = 38, /**< Erases all previously selected write blocks */ + CMD55_APP_CMD = 55, /**< Extend to Applications specific commands */ + CMD56_GEN_CMD = 56, /**< General Purpose Command */ + CMD58_READ_OCR = 58, /**< Read OCR register of card */ + CMD59_CRC_ON_OFF = 59, /**< Turns the CRC option on or off*/ + // App Commands + ACMD6_SET_BUS_WIDTH = 6, + ACMD13_SD_STATUS = 13, + ACMD22_SEND_NUM_WR_BLOCKS = 22, + ACMD23_SET_WR_BLK_ERASE_COUNT = 23, + ACMD41_SD_SEND_OP_COND = 41, + ACMD42_SET_CLR_CARD_DETECT = 42, + ACMD51_SEND_SCR = 51, +} cmdSupported; + +/* SIZE in Bytes */ +#define PACKET_SIZE 6 /*!< SD Packet size CMD+ARG+CRC */ +#define R1_RESPONSE_SIZE 1 /*!< Size of R1 response */ +#define R2_RESPONSE_SIZE 2 /*!< Size of R2 response */ +#define R3_R7_RESPONSE_SIZE 5 /*!< Size of R3/R7 response */ + +/* R3 Response : OCR Register */ +#define OCR_HCS_CCS (0x1 << 30) +#define OCR_LOW_VOLTAGE (0x01 << 24) +#define OCR_3_3V (0x1 << 20) + +#define SPI_CMD(x) (0x40 | (x & 0x3f)) + +static bool driver_initialized; + +static uint8_t sd_cmd_spi(sd_card_t *this, cmdSupported cmd, uint32_t arg) { + uint8_t response; + char cmdPacket[PACKET_SIZE]; + + // Prepare the command packet + cmdPacket[0] = SPI_CMD(cmd); + cmdPacket[1] = (arg >> 24); + cmdPacket[2] = (arg >> 16); + cmdPacket[3] = (arg >> 8); + cmdPacket[4] = (arg >> 0); + +#if SD_CRC_ENABLED + if (crc_on) { + cmdPacket[5] = (crc7(cmdPacket, 5) << 1) | 0x01; + } else +#endif + { + // CMD0 is executed in SD mode, hence should have correct CRC + // CMD8 CRC verification is always enabled + switch (cmd) { + case CMD0_GO_IDLE_STATE: + cmdPacket[5] = 0x95; + break; + case CMD8_SEND_IF_COND: + cmdPacket[5] = 0x87; + break; + default: + cmdPacket[5] = 0xFF; // Make sure bit 0-End bit is high + break; + } + } + // send a command + for (int i = 0; i < PACKET_SIZE; i++) { + TRC_PR_ADD("[0x%02hhx] ", cmdPacket[i]); + sd_spi_write(this, cmdPacket[i]); + } + // The received byte immediataly following CMD12 is a stuff byte, + // it should be discarded before receive the response of the CMD12. + if (CMD12_STOP_TRANSMISSION == cmd) { + TRC_PR_ADD("[0x%02hhx] ", cmd); + sd_spi_write(this, SPI_FILL_CHAR); + } + // Loop for response: Response is sent back within command response time + // (NCR), 0 to 8 bytes for SDC + for (int i = 0; i < 0x10; i++) { + response = sd_spi_write(this, SPI_FILL_CHAR); + // Got the response + if (!(response & R1_RESPONSE_RECV)) { + break; + } + } + return response; +} + +static bool sd_wait_ready(sd_card_t *this, int timeout) { + char resp; + + // Keep sending dummy clocks with DI held high until the card releases the + // DO line + absolute_time_t timeout_time = make_timeout_time_ms(timeout); + do { + resp = sd_spi_write(this, 0xFF); + } while (resp == 0x00 && + 0 < absolute_time_diff_us(get_absolute_time(), timeout_time)); + + if (resp == 0x00) DBG_PRINTF("%s failed\n", __FUNCTION__); + + // Return success/failure + return (resp > 0x00); +} + +// An SD card can only do one thing at a time +static void sd_lock(sd_card_t *this) { + sd_spi_acquire(this); +} +static void sd_unlock(sd_card_t *this) { + sd_spi_release(this); +} + +static const char *cmd2str(const cmdSupported cmd) { + switch (cmd) { + default: + return "CMD_NOT_SUPPORTED"; + case CMD0_GO_IDLE_STATE: + return "CMD0_GO_IDLE_STATE"; + case CMD1_SEND_OP_COND: + return "CMD1_SEND_OP_COND"; + case CMD6_SWITCH_FUNC: + return "CMD6_SWITCH_FUNC"; + case CMD8_SEND_IF_COND: + return "CMD8_SEND_IF_COND"; + case CMD9_SEND_CSD: + return "CMD9_SEND_CSD"; + case CMD10_SEND_CID: + return "CMD10_SEND_CID"; + case CMD12_STOP_TRANSMISSION: + return "CMD12_STOP_TRANSMISSION"; + case CMD13_SEND_STATUS: + return "CMD13_SEND_STATUS or ACMD6_SET_BUS_WIDTH or " + "ACMD13_SD_STATUS"; + case CMD16_SET_BLOCKLEN: + return "CMD16_SET_BLOCKLEN"; + case CMD17_READ_SINGLE_BLOCK: + return "CMD17_READ_SINGLE_BLOCK"; + case CMD18_READ_MULTIPLE_BLOCK: + return "CMD18_READ_MULTIPLE_BLOCK"; + case CMD24_WRITE_BLOCK: + return "CMD24_WRITE_BLOCK"; + case CMD25_WRITE_MULTIPLE_BLOCK: + return "CMD25_WRITE_MULTIPLE_BLOCK"; + case CMD27_PROGRAM_CSD: + return "CMD27_PROGRAM_CSD"; + case CMD32_ERASE_WR_BLK_START_ADDR: + return "CMD32_ERASE_WR_BLK_START_ADDR"; + case CMD33_ERASE_WR_BLK_END_ADDR: + return "CMD33_ERASE_WR_BLK_END_ADDR"; + case CMD38_ERASE: + return "CMD38_ERASE"; + case CMD55_APP_CMD: + return "CMD55_APP_CMD"; + case CMD56_GEN_CMD: + return "CMD56_GEN_CMD"; + case CMD58_READ_OCR: + return "CMD58_READ_OCR"; + case CMD59_CRC_ON_OFF: + return "CMD59_CRC_ON_OFF"; + // case ACMD6_SET_BUS_WIDTH: + // case ACMD13_SD_STATUS: + case ACMD22_SEND_NUM_WR_BLOCKS: + return "ACMD22_SEND_NUM_WR_BLOCKS"; + case ACMD23_SET_WR_BLK_ERASE_COUNT: + return "ACMD23_SET_WR_BLK_ERASE_COUNT"; + case ACMD41_SD_SEND_OP_COND: + return "ACMD41_SD_SEND_OP_COND"; + case ACMD42_SET_CLR_CARD_DETECT: + return "ACMD42_SET_CLR_CARD_DETECT"; + case ACMD51_SEND_SCR: + return "ACMD51_SEND_SCR"; + } +} + +#define SD_COMMAND_TIMEOUT 5000 /*!< Timeout in ms for response */ + +static int sd_cmd(sd_card_t *this, const cmdSupported cmd, uint32_t arg, + bool isAcmd, uint32_t *resp) { + TRACE_PRINTF("%s(%s(0x%08lx)): ", __FUNCTION__, cmd2str(cmd), arg); + TRACE_PRINTF2("%s(0x%08lx): ", cmd2str(cmd), arg); + + int32_t status = SD_BLOCK_DEVICE_ERROR_NONE; + uint32_t response; + + // No need to wait for card to be ready when sending the stop command + if (CMD12_STOP_TRANSMISSION != cmd) { + if (false == sd_wait_ready(this, SD_COMMAND_TIMEOUT)) { + DBG_PRINTF("%s:%d: Card not ready yet\n", __FILE__, __LINE__); + } + } + // Re-try command + for (int i = 0; i < 3; i++) { + // Send CMD55 for APP command first + if (isAcmd) { + TRACE_PRINTF("0x%02hhx ", CMD55_APP_CMD); + response = sd_cmd_spi(this, CMD55_APP_CMD, 0x0); + // Wait for card to be ready after CMD55 + if (false == sd_wait_ready(this, SD_COMMAND_TIMEOUT)) { + DBG_PRINTF("%s:%d: Card not ready yet\n", __FILE__, __LINE__); + } + } + // Send command over SPI interface + TRACE_PRINTF("0x02%hhx ", cmd); + response = sd_cmd_spi(this, cmd, arg); + if (R1_NO_RESPONSE == response) { + DBG_PRINTF("No response CMD:%d\n", cmd); + continue; + } + break; + } + TRC_PR_ADD("response=0x%08lx\n", response); + fflush(stdout); + + // Pass the response to the command call if required + if (NULL != resp) { + *resp = response; + } + // Process the response R1 : Exit on CRC/Illegal command error/No response + if (R1_NO_RESPONSE == response) { + DBG_PRINTF("No response CMD:%d response: 0x%" PRIx32 "\n", cmd, + response); + return SD_BLOCK_DEVICE_ERROR_NO_DEVICE; // No device + } + if (response & R1_COM_CRC_ERROR) { + DBG_PRINTF("CRC error CMD:%d response 0x%" PRIx32 "\n", cmd, response); + return SD_BLOCK_DEVICE_ERROR_CRC; // CRC error + } + if (response & R1_ILLEGAL_COMMAND) { + if (ACMD23_SET_WR_BLK_ERASE_COUNT != cmd) + DBG_PRINTF("Illegal command CMD:%d response 0x%" PRIx32 "\n", cmd, + response); + if (CMD8_SEND_IF_COND == cmd) { + // Illegal command is for Ver1 or not SD Card + this->card_type = CARD_UNKNOWN; + } + return SD_BLOCK_DEVICE_ERROR_UNSUPPORTED; // Command not supported + } + + // DBG_PRINTF("CMD:%d \t arg:0x%" PRIx32 " \t Response:0x%" PRIx32 "\n", + // cmd, arg, response); + // Set status for other errors + if ((response & R1_ERASE_RESET) || (response & R1_ERASE_SEQUENCE_ERROR)) { + status = SD_BLOCK_DEVICE_ERROR_ERASE; // Erase error + } else if ((response & R1_ADDRESS_ERROR) || + (response & R1_PARAMETER_ERROR)) { + // Misaligned address / invalid address block length + status = SD_BLOCK_DEVICE_ERROR_PARAMETER; + } + + // Get rest of the response part for other commands + switch (cmd) { + case CMD8_SEND_IF_COND: // Response R7 + DBG_PRINTF("V2-Version Card\n"); + this->card_type = SDCARD_V2; // fallthrough + // Note: No break here, need to read rest of the response + case CMD58_READ_OCR: // Response R3 + response = (sd_spi_write(this, SPI_FILL_CHAR) << 24); + response |= (sd_spi_write(this, SPI_FILL_CHAR) << 16); + response |= (sd_spi_write(this, SPI_FILL_CHAR) << 8); + response |= sd_spi_write(this, SPI_FILL_CHAR); + DBG_PRINTF("R3/R7: 0x%" PRIx32 "\n", response); + break; + + case CMD12_STOP_TRANSMISSION: // Response R1b + case CMD38_ERASE: + sd_wait_ready(this, SD_COMMAND_TIMEOUT); + break; + + case ACMD13_SD_STATUS: // Response R2 + response = sd_spi_write(this, SPI_FILL_CHAR); + DBG_PRINTF("R2: 0x%" PRIx32 "\n", response); + break; + + default: // Response R1 + break; + } + // Pass the updated response to the command + if (NULL != resp) { + *resp = response; + } + // Do not deselect card if read is in progress. + if (((CMD9_SEND_CSD == cmd) || (ACMD22_SEND_NUM_WR_BLOCKS == cmd) || + (CMD24_WRITE_BLOCK == cmd) || (CMD25_WRITE_MULTIPLE_BLOCK == cmd) || + (CMD17_READ_SINGLE_BLOCK == cmd) || + (CMD18_READ_MULTIPLE_BLOCK == cmd)) && + (SD_BLOCK_DEVICE_ERROR_NONE == status)) { + return SD_BLOCK_DEVICE_ERROR_NONE; + } + // Deselect card + return status; +} + +/* Return non-zero if the SD-card is present. */ +bool sd_card_detect(sd_card_t *this) { + TRACE_PRINTF("> %s\n", __FUNCTION__); + if (0 != this->card_detected_true && 1 != this->card_detected_true) { + this->m_Status &= ~STA_NODISK; + return true; + } + /*!< Check GPIO to detect SD */ + // JMH if (gpio_get(this->card_detect_gpio) == this->card_detected_true) { + if (1) { + // The socket is now occupied + this->m_Status &= ~STA_NODISK; + TRACE_PRINTF("SD card detected!\n"); + return true; + } else { + // The socket is now empty + this->m_Status |= (STA_NODISK | STA_NOINIT); + this->card_type = SDCARD_NONE; + DBG_PRINTF("No SD card detected!\n"); + return false; + } +} + +#define SD_CMD0_GO_IDLE_STATE_RETRIES \ + 10 /*!< Number of retries for sending CMDO */ + +static uint32_t sd_go_idle_state(sd_card_t *this) { + uint32_t response; + + /* Resetting the MCU SPI master may not reset the on-board SDCard, in which + * case when MCU power-on occurs the SDCard will resume operations as + * though there was no reset. In this scenario the first CMD0 will + * not be interpreted as a command and get lost. For some cards retrying + * the command overcomes this situation. */ + for (int i = 0; i < SD_CMD0_GO_IDLE_STATE_RETRIES; i++) { + sd_cmd(this, CMD0_GO_IDLE_STATE, 0x0, 0x0, &response); + if (R1_IDLE_STATE == response) { + break; + } + sd_unlock(this); + busy_wait_us(100 * 1000); + sd_lock(this); + } + return response; +} + +/* R7 response pattern for CMD8 */ +#define CMD8_PATTERN (0xAA) + +static int sd_cmd8(sd_card_t *this) { + uint32_t arg = (CMD8_PATTERN << 0); // [7:0]check pattern + uint32_t response = 0; + int32_t status = SD_BLOCK_DEVICE_ERROR_NONE; + + arg |= (0x1 << 8); // 2.7-3.6V // [11:8]supply voltage(VHS) + + status = sd_cmd(this, CMD8_SEND_IF_COND, arg, 0x0, &response); + // Verify voltage and pattern for V2 version of card + if ((SD_BLOCK_DEVICE_ERROR_NONE == status) && + (SDCARD_V2 == this->card_type)) { + // If check pattern is not matched, CMD8 communication is not valid + if ((response & 0xFFF) != arg) { + DBG_PRINTF("CMD8 Pattern mismatch 0x%" PRIx32 " : 0x%" PRIx32 "\n", + arg, response); + this->card_type = CARD_UNKNOWN; + status = SD_BLOCK_DEVICE_ERROR_UNUSABLE; + } + } + return status; +} + +static int sd_initialise_card_nolock(sd_card_t *this) { + int32_t status = SD_BLOCK_DEVICE_ERROR_NONE; + uint32_t response, arg; + + sd_spi_go_low_frequency(this); + + // The card is transitioned from SDCard mode to SPI mode by sending the CMD0 + // + CS Asserted("0") + if (sd_go_idle_state(this) != R1_IDLE_STATE) { + DBG_PRINTF("No disk, or could not put SD card in to SPI idle state\n"); + return SD_BLOCK_DEVICE_ERROR_NO_DEVICE; + } + + // Send CMD8, if the card rejects the command then it's probably using the + // legacy protocol, or is a MMC, or just flat-out broken + status = sd_cmd8(this); + if (SD_BLOCK_DEVICE_ERROR_NONE != status && + SD_BLOCK_DEVICE_ERROR_UNSUPPORTED != status) { + return status; + } + +#if SD_CRC_ENABLED + if (crc_on) { + // Enable CRC + // int sd_cmd(sd_card_t *this, cmdSupported cmd, uint32_t arg, bool + // isAcmd, uint32_t *resp) + status = sd_cmd(this, CMD59_CRC_ON_OFF, 1, 0, 0); + } +#endif + + // Read OCR - CMD58 Response contains OCR register + if (SD_BLOCK_DEVICE_ERROR_NONE != + (status = sd_cmd(this, CMD58_READ_OCR, 0x0, 0x0, &response))) { + return status; + } + + // Check if card supports voltage range: 3.3V + if (!(response & OCR_3_3V)) { + this->card_type = CARD_UNKNOWN; + status = SD_BLOCK_DEVICE_ERROR_UNUSABLE; + return status; + } + + // HCS is set 1 for HC/XC capacity cards for ACMD41, if supported + arg = 0x0; + if (SDCARD_V2 == this->card_type) { + arg |= OCR_HCS_CCS; + } + + /* Idle state bit in the R1 response of ACMD41 is used by the card to inform + * the host if initialization of ACMD41 is completed. "1" indicates that the + * card is still initializing. "0" indicates completion of initialization. + * The host repeatedly issues ACMD41 until this bit is set to "0". + */ + absolute_time_t timeout_time = make_timeout_time_ms(SD_COMMAND_TIMEOUT); + do { + status = sd_cmd(this, ACMD41_SD_SEND_OP_COND, arg, 1, &response); + } while ((response & R1_IDLE_STATE) && + 0 < absolute_time_diff_us(get_absolute_time(), timeout_time)); + + // Initialization complete: ACMD41 successful + if ((SD_BLOCK_DEVICE_ERROR_NONE != status) || (0x00 != response)) { + this->card_type = CARD_UNKNOWN; + DBG_PRINTF("Timeout waiting for card\n"); + return status; + } + + if (SDCARD_V2 == this->card_type) { + // Get the card capacity CCS: CMD58 + if (SD_BLOCK_DEVICE_ERROR_NONE == + (status = sd_cmd(this, CMD58_READ_OCR, 0x0, 0x0, &response))) { + // High Capacity card + if (response & OCR_HCS_CCS) { + this->card_type = SDCARD_V2HC; + DBG_PRINTF("Card Initialized: High Capacity Card\n"); + } else { + DBG_PRINTF( + "Card Initialized: Standard Capacity Card: Version 2.x\n"); + } + } + } else { + this->card_type = SDCARD_V1; + DBG_PRINTF("Card Initialized: Version 1.x Card\n"); + } + +#if SD_CRC_ENABLED + if (!crc_on) { + // Disable CRC + status = sd_cmd(this, CMD59_CRC_ON_OFF, 0, 0, 0); + } +#else + status = sd_cmd(this, CMD59_CRC_ON_OFF, 0, 0, 0); +#endif + + return status; +} +static int sd_initialise_card(sd_card_t *this) { + sd_lock(this); + int rc = sd_initialise_card_nolock(this); + sd_unlock(this); + return rc; +} + +static uint32_t ext_bits(unsigned char *data, int msb, int lsb) { + uint32_t bits = 0; + uint32_t size = 1 + msb - lsb; + for (uint32_t i = 0; i < size; i++) { + uint32_t position = lsb + i; + uint32_t byte = 15 - (position >> 3); + uint32_t bit = position & 0x7; + uint32_t value = (data[byte] >> bit) & 1; + bits |= value << i; + } + return bits; +} + +static int sd_read_bytes(sd_card_t *this, uint8_t *buffer, uint32_t length); + +static uint64_t sd_sectors_nolock(sd_card_t *this) { + uint32_t c_size, c_size_mult, read_bl_len; + uint32_t block_len, mult, blocknr; + uint32_t hc_c_size; + uint64_t blocks = 0, capacity = 0; + + // CMD9, Response R2 (R1 byte + 16-byte block read) + if (sd_cmd(this, CMD9_SEND_CSD, 0x0, 0, 0) != 0x0) { + DBG_PRINTF("Didn't get a response from the disk\n"); + return 0; + } + uint8_t csd[16]; + if (sd_read_bytes(this, csd, 16) != 0) { + DBG_PRINTF("Couldn't read csd response from disk\n"); + return 0; + } + // csd_structure : csd[127:126] + int csd_structure = ext_bits(csd, 127, 126); + switch (csd_structure) { + case 0: + c_size = ext_bits(csd, 73, 62); // c_size : csd[73:62] + c_size_mult = ext_bits(csd, 49, 47); // c_size_mult : csd[49:47] + read_bl_len = + ext_bits(csd, 83, 80); // read_bl_len : csd[83:80] - the + // *maximum* read block length + block_len = 1 << read_bl_len; // BLOCK_LEN = 2^READ_BL_LEN + mult = 1 << (c_size_mult + + 2); // MULT = 2^C_SIZE_MULT+2 (C_SIZE_MULT < 8) + blocknr = (c_size + 1) * mult; // BLOCKNR = (C_SIZE+1) * MULT + capacity = (uint64_t)blocknr * + block_len; // memory capacity = BLOCKNR * BLOCK_LEN + blocks = capacity / _block_size; + DBG_PRINTF("Standard Capacity: c_size: %" PRIu32 "\n", c_size); + DBG_PRINTF("Sectors: 0x%llx : %llu\n", blocks, blocks); + DBG_PRINTF("Capacity: 0x%llx : %llu MB\n", capacity, + (capacity / (1024U * 1024U))); + break; + + case 1: + hc_c_size = + ext_bits(csd, 69, 48); // device size : C_SIZE : [69:48] + blocks = (hc_c_size + 1) << 10; // block count = C_SIZE+1) * 1K + // byte (512B is block size) + DBG_PRINTF("SDHC/SDXC Card: hc_c_size: %" PRIu32 "\n", hc_c_size); + DBG_PRINTF("Sectors: %8llu\n", blocks); + DBG_PRINTF("Capacity: %8llu MB\n", (blocks / (2048U))); + break; + + default: + DBG_PRINTF("CSD struct unsupported\n"); + myASSERT(!"CSD struct unsupported\n"); + return 0; + }; + return blocks; +} +uint64_t sd_sectors(sd_card_t *this) { + sd_lock(this); + uint64_t sectors = sd_sectors_nolock(this); + sd_unlock(this); + return sectors; +} + +int sd_init_card(sd_card_t *this) { + TRACE_PRINTF("> %s\n", __FUNCTION__); + myASSERT(driver_initialized); + // STA_NOINIT = 0x01, /* Drive not initialized */ + // STA_NODISK = 0x02, /* No medium in the drive */ + // STA_PROTECT = 0x04 /* Write protected */ + + // Make sure there's a card in the socket before proceeding + sd_card_detect(this); + if (this->m_Status & STA_NODISK) { + return this->m_Status; + } + // Make sure we're not already initialized before proceeding + if (!(this->m_Status & STA_NOINIT)) { + return this->m_Status; + } + + // Initialize the member variables + this->card_type = SDCARD_NONE; + + int err = sd_initialise_card(this); + if (SD_BLOCK_DEVICE_ERROR_NONE != err) { + DBG_PRINTF("Failed to initialize card\n"); + return this->m_Status; + } + DBG_PRINTF("SD card initialized\n"); + this->sectors = sd_sectors(this); + if (0 == this->sectors) { + // CMD9 failed + return this->m_Status; + } + sd_lock(this); + // Set block length to 512 (CMD16) + if (sd_cmd(this, CMD16_SET_BLOCKLEN, _block_size, 0, 0) != 0) { + DBG_PRINTF("Set %" PRIu32 "-byte block timed out\n", _block_size); + sd_unlock(this); + return this->m_Status; + } + // Set SCK for data transfer + sd_spi_go_high_frequency(this); + + // The card is now initialized + this->m_Status &= ~STA_NOINIT; + sd_unlock(this); + + // Return the disk status + return this->m_Status; +} + +// SPI function to wait till chip is ready and sends start token +static bool sd_wait_token(sd_card_t *this, uint8_t token) { + TRACE_PRINTF("%s(0x%02hhx)\n", __FUNCTION__, token); + + const uint32_t timeout = SD_COMMAND_TIMEOUT; // Wait for start token + absolute_time_t timeout_time = make_timeout_time_ms(timeout); + do { + if (token == sd_spi_write(this, SPI_FILL_CHAR)) { + return true; + } + } while (0 < absolute_time_diff_us(get_absolute_time(), timeout_time)); + DBG_PRINTF("sd_wait_token: timeout\n"); + return false; +} + +#define SPI_START_BLOCK \ + (0xFE) /*!< For Single Block Read/Write and Multiple Block Read */ + +static int sd_read_bytes(sd_card_t *this, uint8_t *buffer, uint32_t length) { + uint16_t crc; + + // read until start byte (0xFE) + if (false == sd_wait_token(this, SPI_START_BLOCK)) { + DBG_PRINTF("%s:%d Read timeout\n", __FILE__, __LINE__); + return SD_BLOCK_DEVICE_ERROR_NO_RESPONSE; + } + // read data + for (uint32_t i = 0; i < length; i++) { + buffer[i] = sd_spi_write(this, SPI_FILL_CHAR); + } + // Read the CRC16 checksum for the data block + crc = (sd_spi_write(this, SPI_FILL_CHAR) << 8); + crc |= sd_spi_write(this, SPI_FILL_CHAR); + +#if SD_CRC_ENABLED + if (crc_on) { + uint32_t crc_result; + // Compute and verify checksum + crc_result = crc16((void *)buffer, length); + if ((uint16_t)crc_result != crc) { + DBG_PRINTF("_read_bytes: Invalid CRC received 0x%" PRIx16 + " result of computation 0x%" PRIx16 "\n", + crc, (uint16_t)crc_result); + return SD_BLOCK_DEVICE_ERROR_CRC; + } + } +#endif + + return 0; +} +static int sd_read_block(sd_card_t *this, uint8_t *buffer, uint32_t length) { + uint16_t crc; + + // read until start byte (0xFE) + if (false == sd_wait_token(this, SPI_START_BLOCK)) { + DBG_PRINTF("%s:%d Read timeout\n", __FILE__, __LINE__); + return SD_BLOCK_DEVICE_ERROR_NO_RESPONSE; + } + // read data + // bool spi_transfer(const uint8_t *tx, uint8_t *rx, size_t length) + if (!sd_spi_transfer(this, NULL, buffer, length)) { + return SD_BLOCK_DEVICE_ERROR_NO_RESPONSE; + } + // Read the CRC16 checksum for the data block + crc = (sd_spi_write(this, SPI_FILL_CHAR) << 8); + crc |= sd_spi_write(this, SPI_FILL_CHAR); + +#if SD_CRC_ENABLED + if (crc_on) { + uint32_t crc_result; + // Compute and verify checksum + crc_result = crc16((void *)buffer, length); + if ((uint16_t)crc_result != crc) { + DBG_PRINTF("%s: Invalid CRC received 0x%" PRIx16 + " result of computation 0x%" PRIx16 "\n", + __FUNCTION__, crc, (uint16_t)crc_result); + return SD_BLOCK_DEVICE_ERROR_CRC; + } + } +#endif + + return SD_BLOCK_DEVICE_ERROR_NONE; +} + +static int in_sd_read_blocks(sd_card_t *this, uint8_t *buffer, + uint64_t ulSectorNumber, uint32_t ulSectorCount) { + uint32_t blockCnt = ulSectorCount; + + if (ulSectorNumber + blockCnt > this->sectors) + return SD_BLOCK_DEVICE_ERROR_PARAMETER; + if (this->m_Status & (STA_NOINIT | STA_NODISK)) + return SD_BLOCK_DEVICE_ERROR_PARAMETER; + + int status = SD_BLOCK_DEVICE_ERROR_NONE; + + uint64_t addr; + // SDSC Card (CCS=0) uses byte unit address + // SDHC and SDXC Cards (CCS=1) use block unit address (512 Bytes unit) + if (SDCARD_V2HC == this->card_type) { + addr = ulSectorNumber; + } else { + addr = ulSectorNumber * _block_size; + } + // Write command ro receive data + if (blockCnt > 1) { + status = sd_cmd(this, CMD18_READ_MULTIPLE_BLOCK, addr, 0, 0); + } else { + status = sd_cmd(this, CMD17_READ_SINGLE_BLOCK, addr, 0, 0); + } + if (SD_BLOCK_DEVICE_ERROR_NONE != status) { + return status; + } + // receive the data : one block at a time + int rd_status = 0; + while (blockCnt) { + if (0 != sd_read_block(this, buffer, _block_size)) { + rd_status = SD_BLOCK_DEVICE_ERROR_NO_RESPONSE; + break; + } + buffer += _block_size; + --blockCnt; + } + // Send CMD12(0x00000000) to stop the transmission for multi-block transfer + if (ulSectorCount > 1) { + status = sd_cmd(this, CMD12_STOP_TRANSMISSION, 0x0, 0, 0); + } + return rd_status ? rd_status : status; +} + +int sd_read_blocks(sd_card_t *this, uint8_t *buffer, uint64_t ulSectorNumber, + uint32_t ulSectorCount) { + sd_lock(this); + TRACE_PRINTF("sd_read_blocks(0x%p, 0x%llx, 0x%lx)\n", buffer, + ulSectorNumber, ulSectorCount); + int status = in_sd_read_blocks(this, buffer, ulSectorNumber, ulSectorCount); + sd_unlock(this); + return status; +} + +static uint8_t sd_write_block(sd_card_t *this, const uint8_t *buffer, + uint8_t token, uint32_t length) { + uint16_t crc = (~0); + uint8_t response = 0xFF; + + // indicate start of block + sd_spi_write(this, token); + + // write the data + bool ret = sd_spi_transfer(this, buffer, NULL, length); + myASSERT(ret); + +#if SD_CRC_ENABLED + if (crc_on) { + // Compute CRC + crc = crc16((void *)buffer, length); + } +#endif + + // write the checksum CRC16 + sd_spi_write(this, crc >> 8); + sd_spi_write(this, crc); + + // check the response token + response = sd_spi_write(this, SPI_FILL_CHAR); + + // Wait for last block to be written + if (false == sd_wait_ready(this, SD_COMMAND_TIMEOUT)) { + DBG_PRINTF("%s:%d: Card not ready yet\n", __FILE__, __LINE__); + } + return (response & SPI_DATA_RESPONSE_MASK); +} + +/** Program blocks to a block device + * + * + * @param buffer Buffer of data to write to blocks + * @param ulSectorNumber Logical Address of block to begin writing to (LBA) + * @param blockCnt Size to write in blocks + * @return SD_BLOCK_DEVICE_ERROR_NONE(0) - success + * SD_BLOCK_DEVICE_ERROR_NO_DEVICE - device (SD card) is + * missing or not connected SD_BLOCK_DEVICE_ERROR_CRC - crc error + * SD_BLOCK_DEVICE_ERROR_PARAMETER - invalid parameter + * SD_BLOCK_DEVICE_ERROR_UNSUPPORTED - unsupported command + * SD_BLOCK_DEVICE_ERROR_NO_INIT - device is not initialized + * SD_BLOCK_DEVICE_ERROR_WRITE - SPI write error + * SD_BLOCK_DEVICE_ERROR_ERASE - erase error + */ +static int in_sd_write_blocks(sd_card_t *this, const uint8_t *buffer, + uint64_t ulSectorNumber, uint32_t blockCnt) { + if (ulSectorNumber + blockCnt > this->sectors) + return SD_BLOCK_DEVICE_ERROR_PARAMETER; + if (this->m_Status & (STA_NOINIT | STA_NODISK)) + return SD_BLOCK_DEVICE_ERROR_PARAMETER; + + int status = SD_BLOCK_DEVICE_ERROR_NONE; + uint8_t response; + uint64_t addr; + + // SDSC Card (CCS=0) uses byte unit address + // SDHC and SDXC Cards (CCS=1) use block unit address (512 Bytes unit) + if (SDCARD_V2HC == this->card_type) { + addr = ulSectorNumber; + } else { + addr = ulSectorNumber * _block_size; + } + // Send command to perform write operation + if (blockCnt == 1) { + // Single block write command + if (SD_BLOCK_DEVICE_ERROR_NONE != + (status = sd_cmd(this, CMD24_WRITE_BLOCK, addr, 0, 0))) { + return status; + } + // Write data + response = sd_write_block(this, buffer, SPI_START_BLOCK, _block_size); + + // Only CRC and general write error are communicated via response token + if (response != SPI_DATA_ACCEPTED) { + DBG_PRINTF("Single Block Write failed: 0x%x \n", response); + status = SD_BLOCK_DEVICE_ERROR_WRITE; + } + } else { + // Pre-erase setting prior to multiple block write operation + sd_cmd(this, ACMD23_SET_WR_BLK_ERASE_COUNT, blockCnt, 1, 0); + + // Multiple block write command + if (SD_BLOCK_DEVICE_ERROR_NONE != + (status = sd_cmd(this, CMD25_WRITE_MULTIPLE_BLOCK, addr, 0, 0))) { + return status; + } + // Write the data: one block at a time + do { + response = sd_write_block(this, buffer, SPI_START_BLK_MUL_WRITE, + _block_size); + if (response != SPI_DATA_ACCEPTED) { + DBG_PRINTF("Multiple Block Write failed: 0x%x\n", response); + status = SD_BLOCK_DEVICE_ERROR_WRITE; + break; + } + buffer += _block_size; + } while (--blockCnt); // Send all blocks of data + /* In a Multiple Block write operation, the stop transmission will be + * done by sending 'Stop Tran' token instead of 'Start Block' token at + * the beginning of the next block + */ + sd_spi_write(this, SPI_STOP_TRAN); + } + return status; +} + +int sd_write_blocks(sd_card_t *this, const uint8_t *buffer, + uint64_t ulSectorNumber, uint32_t blockCnt) { + sd_lock(this); + TRACE_PRINTF("sd_write_blocks(0x%p, 0x%llx, 0x%lx)\n", buffer, + ulSectorNumber, blockCnt); + int status = in_sd_write_blocks(this, buffer, ulSectorNumber, blockCnt); + sd_unlock(this); + return status; +} + +bool sd_init_driver() { + for (size_t i = 0; i < sd_get_num(); ++i) { + sd_card_t *this = sd_get_by_num(i); + // JMH + //gpio_init(this->card_detect_gpio); + //gpio_pull_up(this->card_detect_gpio); + //gpio_set_dir(this->card_detect_gpio, GPIO_IN); + // Chip select is active-low, so we'll initialise it to a driven-high + // state. + gpio_init(this->ss_gpio); + gpio_put(this->ss_gpio, 1); // Avoid any glitches when enabling output + gpio_set_dir(this->ss_gpio, GPIO_OUT); + gpio_put(this->ss_gpio, 1); // In case set_dir does anything + } + for (size_t i = 0; i < spi_get_num(); ++i) { + spi_t *this = spi_get_by_num(i); + if (!my_spi_init(this)) return false; + } + driver_initialized = true; + return true; +} + +/* [] END OF FILE */ diff --git a/MCUME_pico/FatFs_SPI/sd_driver/sd_card.h b/MCUME_pico/FatFs_SPI/sd_driver/sd_card.h new file mode 100755 index 0000000..807d0bf --- /dev/null +++ b/MCUME_pico/FatFs_SPI/sd_driver/sd_card.h @@ -0,0 +1,73 @@ +/* ======================================== + * + * Copyright YOUR COMPANY, THE YEAR + * All Rights Reserved + * UNPUBLISHED, LICENSED SOFTWARE. + * + * CONFIDENTIAL AND PROPRIETARY INFORMATION + * WHICH IS THE PROPERTY OF your company. + * + * ======================================== + */ + +#ifndef _SD_CARD_H_ +#define _SD_CARD_H_ + +#include +// +#include "hardware/gpio.h" +// +#include "spi.h" + +// "Class" representing SD Cards +typedef struct { + const char *pcName; + spi_t *const spi; + // Slave select is here in sd_card_t because multiple SDs can share an SPI + uint ss_gpio; // Slave select for this SD card + const uint card_detect_gpio; // Card detect + const uint card_detected_true; // Varies with card socket + const gpio_irq_callback_t card_detect_callback; // Port Interrupt callback + //TaskHandle_t card_detect_task; // handles card detect ISRs + int m_Status; // Card status + uint64_t sectors; // Assigned dynamically + int card_type; // Assigned dynamically +} sd_card_t; + +#define SD_BLOCK_DEVICE_ERROR_NONE 0 +#define SD_BLOCK_DEVICE_ERROR_WOULD_BLOCK -5001 /*!< operation would block */ +#define SD_BLOCK_DEVICE_ERROR_UNSUPPORTED -5002 /*!< unsupported operation */ +#define SD_BLOCK_DEVICE_ERROR_PARAMETER -5003 /*!< invalid parameter */ +#define SD_BLOCK_DEVICE_ERROR_NO_INIT -5004 /*!< uninitialized */ +#define SD_BLOCK_DEVICE_ERROR_NO_DEVICE \ + -5005 /*!< device is missing or not connected */ +#define SD_BLOCK_DEVICE_ERROR_WRITE_PROTECTED -5006 /*!< write protected */ +#define SD_BLOCK_DEVICE_ERROR_UNUSABLE -5007 /*!< unusable card */ +#define SD_BLOCK_DEVICE_ERROR_NO_RESPONSE \ + -5008 /*!< No response from device \ + */ +#define SD_BLOCK_DEVICE_ERROR_CRC -5009 /*!< CRC error */ +#define SD_BLOCK_DEVICE_ERROR_ERASE -5010 /*!< Erase error: reset/sequence */ +#define SD_BLOCK_DEVICE_ERROR_WRITE \ + -5011 /*!< SPI Write error: !SPI_DATA_ACCEPTED */ + +/* Disk Status Bits (DSTATUS) */ +#ifndef FF_DEFINED +enum { + STA_NOINIT = 0x01, /* Drive not initialized */ + STA_NODISK = 0x02, /* No medium in the drive */ + STA_PROTECT = 0x04 /* Write protected */ +}; +#endif + +bool sd_init_driver(); +int sd_init_card(sd_card_t *this); +int sd_write_blocks(sd_card_t *this, const uint8_t *buffer, + uint64_t ulSectorNumber, uint32_t blockCnt); +int sd_read_blocks(sd_card_t *this, uint8_t *buffer, uint64_t ulSectorNumber, + uint32_t ulSectorCount); +bool sd_card_detect(sd_card_t *this); +uint64_t sd_sectors(sd_card_t *this); + +#endif +/* [] END OF FILE */ diff --git a/MCUME_pico/FatFs_SPI/sd_driver/sd_spi.c b/MCUME_pico/FatFs_SPI/sd_driver/sd_spi.c new file mode 100755 index 0000000..65ed4a6 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/sd_driver/sd_spi.c @@ -0,0 +1,89 @@ +/* ======================================== + * + * Copyright YOUR COMPANY, THE YEAR + * All Rights Reserved + * UNPUBLISHED, LICENSED SOFTWARE. + * + * CONFIDENTIAL AND PROPRIETARY INFORMATION + * WHICH IS THE PROPERTY OF your company. + * + * ======================================== + */ + +/* Standard includes. */ +#include +#include +// +#include "my_debug.h" +#include "sd_card.h" +#include "sd_spi.h" +#include "spi.h" + +//#define TRACE_PRINTF(fmt, args...) +#define TRACE_PRINTF printf // task_printf + +void sd_spi_go_high_frequency(sd_card_t *this) { + uint actual = spi_set_baudrate(this->spi->hw_inst, this->spi->baud_rate); + TRACE_PRINTF("%s: Actual frequency: %lu\n", __FUNCTION__, (long)actual); +} +void sd_spi_go_low_frequency(sd_card_t *this) { + uint actual = spi_set_baudrate(this->spi->hw_inst, 100 * 1000); + TRACE_PRINTF("%s: Actual frequency: %lu\n", __FUNCTION__, (long)actual); +} + +// Would do nothing if this->ss_gpio were set to GPIO_FUNC_SPI. +void sd_spi_select(sd_card_t *this) { + uint8_t fill = SPI_FILL_CHAR; + spi_write_blocking(this->spi->hw_inst, &fill, 1); + // asm volatile("nop \n nop \n nop"); // FIXME + gpio_put(this->ss_gpio, 0); + //asm volatile("nop \n nop \n nop"); // FIXME + spi_write_blocking(this->spi->hw_inst, &fill, 1); + LED_ON(); +} + +void sd_spi_deselect(sd_card_t *this) { + uint8_t fill = SPI_FILL_CHAR; + spi_write_blocking(this->spi->hw_inst, &fill, 1); + // asm volatile("nop \n nop \n nop"); // FIXME + gpio_put(this->ss_gpio, 1); + //asm volatile("nop \n nop \n nop"); // FIXME + LED_OFF(); + /* + MMC/SDC enables/disables the DO output in synchronising to the SCLK. This + means there is a posibility of bus conflict with MMC/SDC and another SPI + slave that shares an SPI bus. Therefore to make MMC/SDC release the MISO + line, the master device needs to send a byte after the CS signal is + deasserted. + */ + spi_write_blocking(this->spi->hw_inst, &fill, 1); +} + +void sd_spi_acquire(sd_card_t *this) { + sd_spi_select(this); +} + +void sd_spi_release(sd_card_t *this) { + sd_spi_deselect(this); +} + +uint8_t sd_spi_write(sd_card_t *this, const uint8_t value) { + // TRACE_PRINTF("%s\n", __FUNCTION__); + u_int8_t received = SPI_FILL_CHAR; + int num = spi_write_read_blocking(this->spi->hw_inst, &value, &received, 1); + myASSERT(1 == num); + return received; +} + +bool sd_spi_transfer(sd_card_t *this, const uint8_t *tx, uint8_t *rx, + size_t length) { + return spi_transfer(this->spi, tx, rx, length); +} + +void sd_spi_init_pl022(sd_card_t *this) { + // Let the PL022 SPI handle it. + // the CS line is brought high between each byte during transmission. + gpio_set_function(this->ss_gpio, GPIO_FUNC_SPI); +} + +/* [] END OF FILE */ diff --git a/MCUME_pico/FatFs_SPI/sd_driver/sd_spi.h b/MCUME_pico/FatFs_SPI/sd_driver/sd_spi.h new file mode 100755 index 0000000..3fd3db2 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/sd_driver/sd_spi.h @@ -0,0 +1,33 @@ +/* ======================================== + * + * Copyright YOUR COMPANY, THE YEAR + * All Rights Reserved + * UNPUBLISHED, LICENSED SOFTWARE. + * + * CONFIDENTIAL AND PROPRIETARY INFORMATION + * WHICH IS THE PROPERTY OF your company. + * + * ======================================== +*/ + +#ifndef _SD_SPI_H_ +#define _SD_SPI_H_ + +#include +#include "sd_card.h" + +bool sd_spi_transfer(sd_card_t *this, const uint8_t *tx, uint8_t *rx, size_t length); +uint8_t sd_spi_write(sd_card_t *this, const uint8_t value); +void sd_spi_select(sd_card_t *this); +void sd_spi_deselect(sd_card_t *this); +void sd_spi_acquire(sd_card_t *this); +void sd_spi_release(sd_card_t *this); +//void sd_spi_select(sd_card_t *this); +//void sd_spi_deselect(sd_card_t *this); +void sd_spi_go_low_frequency(sd_card_t *this); +void sd_spi_go_high_frequency(sd_card_t *this); +bool sd_spi_init(sd_card_t *this); + +#endif + +/* [] END OF FILE */ diff --git a/MCUME_pico/FatFs_SPI/sd_driver/spi.c b/MCUME_pico/FatFs_SPI/sd_driver/spi.c new file mode 100755 index 0000000..7ad7055 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/sd_driver/spi.c @@ -0,0 +1,161 @@ +/* ======================================== + * + * Copyright YOUR COMPANY, THE YEAR + * All Rights Reserved + * UNPUBLISHED, LICENSED SOFTWARE. + * + * CONFIDENTIAL AND PROPRIETARY INFORMATION + * WHICH IS THE PROPERTY OF your company. + * + * ======================================== + */ +#include +// +#include "pico/stdlib.h" +#include "pico/sem.h" +// +#include "my_debug.h" +// +#include "spi.h" + +void spi_irq_handler(spi_t *this) { + // Clear the interrupt request. + dma_hw->ints0 = 1u << this->rx_dma; + myASSERT(!dma_channel_is_busy(this->rx_dma)); + sem_release(&this->sem); +} + +// SPI Transfer: Read & Write (simultaneously) on SPI bus +// If the data that will be received is not important, pass NULL as rx. +// If the data that will be transmitted is not important, +// pass NULL as tx and then the SPI_FILL_CHAR is sent out as each data +// element. + +bool spi_transfer(spi_t *this, const uint8_t *tx, uint8_t *rx, size_t length) { + myASSERT(512 == length); + myASSERT(tx || rx); + // myASSERT(!(tx && rx)); + + // tx write increment is already false + if (tx) { + channel_config_set_read_increment(&this->tx_dma_cfg, true); + } else { + static const uint8_t dummy = SPI_FILL_CHAR; + tx = &dummy; + channel_config_set_read_increment(&this->tx_dma_cfg, false); + } + // rx read increment is already false + if (rx) { + channel_config_set_write_increment(&this->rx_dma_cfg, true); + } else { + static uint8_t dummy = 0xA5; + rx = &dummy; + channel_config_set_write_increment(&this->rx_dma_cfg, false); + } + // Clear the interrupt request. + dma_hw->ints0 = 1u << this->rx_dma; + + dma_channel_configure(this->tx_dma, &this->tx_dma_cfg, + &spi_get_hw(this->hw_inst)->dr, // write address + tx, // read address + XFER_BLOCK_SIZE, // element count (each element is of + // size transfer_data_size) + false); // start + dma_channel_configure(this->rx_dma, &this->rx_dma_cfg, + rx, // write address + &spi_get_hw(this->hw_inst)->dr, // read address + XFER_BLOCK_SIZE, // element count (each element is of + // size transfer_data_size) + false); // start + + // start them exactly simultaneously to avoid races (in extreme cases + // the FIFO could overflow) + dma_start_channel_mask((1u << this->tx_dma) | (1u << this->rx_dma)); + + /* Timeout 1 sec */ + uint32_t timeOut = 1000; + /* Wait until master completes transfer or time out has occured. */ + bool rc = sem_acquire_timeout_ms(&this->sem, timeOut); // Wait for notification from ISR + if (!rc) { + // If the timeout is reached the function will return false + DBG_PRINTF("Notification wait timed out in %s\n", __FUNCTION__); + return false; + } + dma_channel_wait_for_finish_blocking(this->tx_dma); + dma_channel_wait_for_finish_blocking(this->rx_dma); + + myASSERT(!dma_channel_is_busy(this->tx_dma)); + myASSERT(!dma_channel_is_busy(this->rx_dma)); + + return true; +} + +bool my_spi_init(spi_t *this) { + // bool __atomic_test_and_set (void *ptr, int memorder) + // This built-in function performs an atomic test-and-set operation on the + // byte at *ptr. The byte is set to some implementation defined nonzero + // “set†value and the return value is true if and only if the previous + // contents were “setâ€. + if (__atomic_test_and_set(&(this->initialized), __ATOMIC_SEQ_CST)) + return true; + + // The SPI may be shared (using multiple SSs); protect it + sem_init(&this->sem, 0, 1); + /* Configure component */ + // Enable SPI at 100 kHz and connect to GPIOs + spi_init(this->hw_inst, 100 * 1000); + spi_set_format(this->hw_inst, 8, SPI_CPOL_0, SPI_CPHA_0, SPI_MSB_FIRST); + + gpio_set_function(this->miso_gpio, GPIO_FUNC_SPI); + gpio_set_function(this->mosi_gpio, GPIO_FUNC_SPI); + gpio_set_function(this->sck_gpio, GPIO_FUNC_SPI); + // ss_gpio is initialized in sd_spi_init() + + // SD cards' DO MUST be pulled up. + gpio_pull_up(this->miso_gpio); + // Grab some unused dma channels + this->tx_dma = dma_claim_unused_channel(true); + this->rx_dma = dma_claim_unused_channel(true); + + + this->tx_dma_cfg = dma_channel_get_default_config(this->tx_dma); + this->rx_dma_cfg = dma_channel_get_default_config(this->rx_dma); + channel_config_set_transfer_data_size(&this->tx_dma_cfg, DMA_SIZE_8); + channel_config_set_transfer_data_size(&this->rx_dma_cfg, DMA_SIZE_8); + + + + // We set the outbound DMA to transfer from a memory buffer to the SPI + // transmit FIFO paced by the SPI TX FIFO DREQ The default is for the + // read address to increment every element (in this case 1 byte - + // DMA_SIZE_8) and for the write address to remain unchanged. + channel_config_set_dreq(&this->tx_dma_cfg, spi_get_index(this->hw_inst) + ? DREQ_SPI1_TX + : DREQ_SPI0_TX); + channel_config_set_write_increment(&this->tx_dma_cfg, false); + + // We set the inbound DMA to transfer from the SPI receive FIFO to a + // memory buffer paced by the SPI RX FIFO DREQ We coinfigure the read + // address to remain unchanged for each element, but the write address + // to increment (so data is written throughout the buffer) + channel_config_set_dreq(&this->rx_dma_cfg, spi_get_index(this->hw_inst) + ? DREQ_SPI1_RX + : DREQ_SPI0_RX); + channel_config_set_read_increment(&this->rx_dma_cfg, false); + + /* Theory: we only need an interrupt on rx complete, + since if rx is complete, tx must also be complete. */ + + // Configure the processor to run dma_handler() when DMA IRQ 0 is + // asserted + irq_set_exclusive_handler(DMA_IRQ_1, this->dma_isr); // JMH + + // Tell the DMA to raise IRQ line 0 when the channel finishes a block + dma_channel_set_irq1_enabled(this->rx_dma, true); // JMH + irq_set_enabled(DMA_IRQ_1, true); // JMH + + LED_INIT(); + return true; +} + +/* [] END OF FILE */ diff --git a/MCUME_pico/FatFs_SPI/sd_driver/spi.h b/MCUME_pico/FatFs_SPI/sd_driver/spi.h new file mode 100755 index 0000000..645ad09 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/sd_driver/spi.h @@ -0,0 +1,69 @@ +/* ======================================== + * + * Copyright YOUR COMPANY, THE YEAR + * All Rights Reserved + * UNPUBLISHED, LICENSED SOFTWARE. + * + * CONFIDENTIAL AND PROPRIETARY INFORMATION + * WHICH IS THE PROPERTY OF your company. + * + * ======================================== + */ +#ifndef _SPI_H_ +#define _SPI_H_ + +#include +// +// Pico includes +#include "hardware/dma.h" +#include "hardware/irq.h" +#include "hardware/spi.h" +#include "pico/types.h" +#include "pico/sem.h" + +#define SPI_FILL_CHAR (0xFF) +#define XFER_BLOCK_SIZE 512 // Block size supported for SD card is 512 bytes + +// "Class" representing SPIs +typedef struct { + // SPI HW + spi_inst_t *hw_inst; + const uint miso_gpio; // SPI MISO pin number for GPIO + const uint mosi_gpio; + const uint sck_gpio; + const uint baud_rate; + // State variables: + uint tx_dma; + uint rx_dma; + dma_channel_config tx_dma_cfg; + dma_channel_config rx_dma_cfg; + irq_handler_t dma_isr; + bool initialized; // Assigned dynamically + semaphore_t sem; +} spi_t; + +// SPI DMA interrupts +void spi_irq_handler(spi_t *this); + +bool spi_transfer(spi_t *this, const uint8_t *tx, uint8_t *rx, size_t length); +bool my_spi_init(spi_t *this); + +#define USE_LED 1 +#if USE_LED +# define LED_PIN 25 +# include "hardware/gpio.h" +# define LED_INIT() \ + { \ + gpio_init(LED_PIN); \ + gpio_set_dir(LED_PIN, GPIO_OUT); \ + } +# define LED_ON() gpio_put(LED_PIN, 1) +# define LED_OFF() gpio_put(LED_PIN, 0) +#else +# define LED_ON() +# define LED_OFF() +# define LED_INIT() +#endif + +#endif +/* [] END OF FILE */ diff --git a/MCUME_pico/FatFs_SPI/src/f_util.c b/MCUME_pico/FatFs_SPI/src/f_util.c new file mode 100755 index 0000000..6dcf5a7 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/src/f_util.c @@ -0,0 +1,50 @@ +#include "ff.h" + +const char *FRESULT_str(FRESULT i) { + switch (i) { + case FR_OK: + return "Succeeded"; + case FR_DISK_ERR: + return "A hard error occurred in the low level disk I/O layer"; + case FR_INT_ERR: + return "Assertion failed"; + case FR_NOT_READY: + return "The physical drive cannot work"; + case FR_NO_FILE: + return "Could not find the file"; + case FR_NO_PATH: + return "Could not find the path"; + case FR_INVALID_NAME: + return "The path name format is invalid"; + case FR_DENIED: + return "Access denied due to prohibited access or directory full"; + case FR_EXIST: + return "Access denied due to prohibited access (exists)"; + case FR_INVALID_OBJECT: + return "The file/directory object is invalid"; + case FR_WRITE_PROTECTED: + return "The physical drive is write protected"; + case FR_INVALID_DRIVE: + return "The logical drive number is invalid"; + case FR_NOT_ENABLED: + return "The volume has no work area (mount)"; + case FR_NO_FILESYSTEM: + return "There is no valid FAT volume"; + case FR_MKFS_ABORTED: + return "The f_mkfs() aborted due to any problem"; + case FR_TIMEOUT: + return "Could not get a grant to access the volume within defined " + "period"; + case FR_LOCKED: + return "The operation is rejected according to the file sharing " + "policy"; + case FR_NOT_ENOUGH_CORE: + return "LFN working buffer could not be allocated"; + case FR_TOO_MANY_OPEN_FILES: + return "Number of open files > FF_FS_LOCK"; + case FR_INVALID_PARAMETER: + return "Given parameter is invalid"; + default: + return "Unknown"; + } +} diff --git a/MCUME_pico/FatFs_SPI/src/ff_stdio.c b/MCUME_pico/FatFs_SPI/src/ff_stdio.c new file mode 100755 index 0000000..a8e30df --- /dev/null +++ b/MCUME_pico/FatFs_SPI/src/ff_stdio.c @@ -0,0 +1,437 @@ +// For compatibility with FreeRTOS+FAT API + +#include +#include +#include +#include +#include + +#include "my_debug.h" +// +#include "f_util.h" +#include "ff_stdio.h" + +bool tracing = true; + +#define TRACE_PRINTF(fmt, args...) +//#define TRACE_PRINTF printf + +static BYTE posix2mode(const char *pcMode) { + if (0 == strcmp("r", pcMode)) return FA_READ; + if (0 == strcmp("r+", pcMode)) return FA_READ | FA_WRITE; + if (0 == strcmp("w", pcMode)) return FA_CREATE_ALWAYS | FA_WRITE; + if (0 == strcmp("w+", pcMode)) return FA_CREATE_ALWAYS | FA_WRITE | FA_READ; + if (0 == strcmp("a", pcMode)) return FA_OPEN_APPEND | FA_WRITE; + if (0 == strcmp("a+", pcMode)) return FA_OPEN_APPEND | FA_WRITE | FA_READ; + if (0 == strcmp("wx", pcMode)) return FA_CREATE_NEW | FA_WRITE; + if (0 == strcmp("w+x", pcMode)) return FA_CREATE_NEW | FA_WRITE | FA_READ; + return 0; +} + +int fresult2errno(FRESULT fr) { + switch (fr) { + case FR_OK: + return 0; + case FR_DISK_ERR: + return EIO; + case FR_INT_ERR: + return EIO; + case FR_NOT_READY: + return EIO; + case FR_NO_FILE: + return ENOENT; + case FR_NO_PATH: + return ENOENT; + case FR_INVALID_NAME: + return ENAMETOOLONG; + case FR_DENIED: + return EACCES; + case FR_EXIST: + return EEXIST; + case FR_INVALID_OBJECT: + return EIO; + case FR_WRITE_PROTECTED: + return EACCES; + case FR_INVALID_DRIVE: + return ENOENT; + case FR_NOT_ENABLED: + return ENOENT; + case FR_NO_FILESYSTEM: + return ENOENT; + case FR_MKFS_ABORTED: + return EIO; + case FR_TIMEOUT: + return EIO; + case FR_LOCKED: + return EACCES; + case FR_NOT_ENOUGH_CORE: + return ENOMEM; + case FR_TOO_MANY_OPEN_FILES: + return ENFILE; + case FR_INVALID_PARAMETER: + return ENOSYS; + default: + return -1; + } +} + +FF_FILE *ff_fopen(const char *pcFile, const char *pcMode) { + TRACE_PRINTF("%s\n", __func__); + // FRESULT f_open (FIL* fp, const TCHAR* path, BYTE mode); + // /* Open or create a file */ FRESULT f_open ( + // FIL* fp, /* [OUT] Pointer to the file object structure */ + // const TCHAR* path, /* [IN] File name */ + // BYTE mode /* [IN] Mode flags */ + //); + FIL *fp = malloc(sizeof(FIL)); + if (!fp) { + errno = ENOMEM; + return NULL; + } + FRESULT fr = f_open(fp, pcFile, posix2mode(pcMode)); + errno = fresult2errno(fr); + if (FR_OK != fr) { + if (tracing) + printf("%s error: %s (%d)\n", __func__, FRESULT_str(fr), fr); + free(fp); + fp = 0; + } + return fp; +} +int ff_fclose(FF_FILE *pxStream) { + TRACE_PRINTF("%s\n", __func__); + // FRESULT f_close ( + // FIL* fp /* [IN] Pointer to the file object */ + //); + myASSERT(pxStream); + FRESULT fr = f_close(pxStream); + if (tracing && FR_OK != fr) + printf("%s error: %s (%d)\n", __func__, FRESULT_str(fr), fr); + errno = fresult2errno(fr); + free(pxStream); + if (FR_OK == fr) + return 0; + else + return -1; +} +// Populates an ff_stat_struct with information about a file. +int ff_stat(const char *pcFileName, FF_Stat_t *pxStatBuffer) { + TRACE_PRINTF("%s\n", __func__); + // FRESULT f_stat ( + // const TCHAR* path, /* [IN] Object name */ + // FILINFO* fno /* [OUT] FILINFO structure */ + //); + myASSERT(pxStatBuffer); + FILINFO filinfo; + FRESULT fr = f_stat(pcFileName, &filinfo); + pxStatBuffer->st_size = filinfo.fsize; + if (tracing && FR_OK != fr) + printf("%s error: %s (%d)\n", __func__, FRESULT_str(fr), fr); + errno = fresult2errno(fr); + if (FR_OK == fr) + return 0; + else + return -1; +} +size_t ff_fwrite(const void *pvBuffer, size_t xSize, size_t xItems, + FF_FILE *pxStream) { + TRACE_PRINTF("%s\n", __func__); + // FRESULT f_write ( + // FIL* fp, /* [IN] Pointer to the file object structure */ + // const void* buff, /* [IN] Pointer to the data to be written */ + // UINT btw, /* [IN] Number of bytes to write */ + // UINT* bw /* [OUT] Pointer to the variable to return number of + // bytes written */ + //); + UINT bw = 0; + FRESULT fr = f_write(pxStream, pvBuffer, xSize * xItems, &bw); + if (tracing && FR_OK != fr) + printf("%s error: %s (%d)\n", __func__, FRESULT_str(fr), fr); + errno = fresult2errno(fr); + return bw / xSize; +} +size_t ff_fread(void *pvBuffer, size_t xSize, size_t xItems, + FF_FILE *pxStream) { + TRACE_PRINTF("%s\n", __func__); + // FRESULT f_read ( + // FIL* fp, /* [IN] File object */ + // void* buff, /* [OUT] Buffer to store read data */ + // UINT btr, /* [IN] Number of bytes to read */ + // UINT* br /* [OUT] Number of bytes read */ + //); + UINT br = 0; + FRESULT fr = f_read(pxStream, pvBuffer, xSize * xItems, &br); + if (tracing && FR_OK != fr) + printf("%s error: %s (%d)\n", __func__, FRESULT_str(fr), fr); + errno = fresult2errno(fr); + return br / xSize; +} +int ff_chdir(const char *pcDirectoryName) { + TRACE_PRINTF("%s\n", __func__); + // FRESULT f_chdir ( + // const TCHAR* path /* [IN] Path name */ + //); + FRESULT fr = f_chdir(pcDirectoryName); + if (tracing && FR_OK != fr) + printf("%s error: %s (%d)\n", __func__, FRESULT_str(fr), fr); + errno = fresult2errno(fr); + if (FR_OK == fr) + return 0; + else + return -1; +} +char *ff_getcwd(char *pcBuffer, size_t xBufferLength) { + TRACE_PRINTF("%s\n", __func__); + // FRESULT f_getcwd ( + // TCHAR* buff, /* [OUT] Buffer to return path name */ + // UINT len /* [IN] The length of the buffer */ + //); + char buf[xBufferLength]; + FRESULT fr = f_getcwd(buf, xBufferLength); + if (tracing && FR_OK != fr) + printf("%s error: %s (%d)\n", __func__, FRESULT_str(fr), fr); + errno = fresult2errno(fr); + // If the current working directory name was successfully written to + // pcBuffer then pcBuffer is returned. Otherwise NULL is returned. + if (FR_OK == fr) { + if ('/' != buf[0]) { + char *p = strchr(buf, '/'); + if (!p) p = buf; + strncpy(pcBuffer, p, xBufferLength); + } + return pcBuffer; + } else { + return NULL; + } +} +int ff_mkdir(const char *pcDirectoryName) { + TRACE_PRINTF("%s(pxStream=%s)\n", __func__, pcDirectoryName); + FRESULT fr = f_mkdir(pcDirectoryName); + if (tracing && FR_OK != fr && FR_EXIST != fr) + printf("%s error: %s (%d)\n", __func__, FRESULT_str(fr), fr); + errno = fresult2errno(fr); + if (FR_OK == fr || FR_EXIST == fr) + return 0; + else + return -1; +} +int ff_fputc(int iChar, FF_FILE *pxStream) { + // TRACE_PRINTF("%s(iChar=%c,pxStream=%p)\n", __func__, iChar, pxStream); + // FRESULT f_write ( + // FIL* fp, /* [IN] Pointer to the file object structure */ + // const void* buff, /* [IN] Pointer to the data to be written */ + // UINT btw, /* [IN] Number of bytes to write */ + // UINT* bw /* [OUT] Pointer to the variable to return number of + // bytes written */ + //); + UINT bw = 0; + uint8_t buff[1]; + buff[0] = iChar; + FRESULT fr = f_write(pxStream, buff, 1, &bw); + if (tracing && FR_OK != fr) + printf("%s error: %s (%d)\n", __func__, FRESULT_str(fr), fr); + errno = fresult2errno(fr); + // On success the byte written to the file is returned. If any other value + // is returned then the byte was not written to the file and the task's + // errno will be set to indicate the reason. + if (1 == bw) + return iChar; + else { + return -1; + } +} +int ff_fgetc(FF_FILE *pxStream) { + // TRACE_PRINTF("%s(pxStream=%p)\n", __func__, pxStream); + // FRESULT f_read ( + // FIL* fp, /* [IN] File object */ + // void* buff, /* [OUT] Buffer to store read data */ + // UINT btr, /* [IN] Number of bytes to read */ + // UINT* br /* [OUT] Number of bytes read */ + //); + uint8_t buff[1] = {0}; + UINT br; + FRESULT fr = f_read(pxStream, buff, 1, &br); + if (tracing && FR_OK != fr) + printf("%s error: %s (%d)\n", __func__, FRESULT_str(fr), fr); + errno = fresult2errno(fr); + // On success the byte read from the file system is returned. If a byte + // could not be read from the file because the read position is already at + // the end of the file then FF_EOF is returned. + if (1 == br) + return buff[0]; + else + return FF_EOF; +} +int ff_rmdir(const char *pcDirectory) { + TRACE_PRINTF("%s\n", __func__); + // FRESULT f_unlink ( + // const TCHAR* path /* [IN] Object name */ + //); + FRESULT fr = f_unlink(pcDirectory); + // If the directory was removed successfully then zero is returned. If the + // directory could not be removed then -1 is returned and the task's errno + // is set to indicate the reason. + errno = fresult2errno(fr); + if (FR_OK == fr) + return 0; + else + return -1; +} +int ff_remove(const char *pcPath) { + TRACE_PRINTF("%s\n", __func__); + FRESULT fr = f_unlink(pcPath); + errno = fresult2errno(fr); + if (FR_OK == fr) + return 0; + else + return -1; +} +long ff_ftell(FF_FILE *pxStream) { + TRACE_PRINTF("%s\n", __func__); + // FSIZE_t f_tell ( + // FIL* fp /* [IN] File object */ + //); + FSIZE_t pos = f_tell(pxStream); + myASSERT(pos < LONG_MAX); + return pos; +} +int ff_fseek(FF_FILE *pxStream, int iOffset, int iWhence) { + TRACE_PRINTF("%s\n", __func__); + FRESULT fr = -1; + switch (iWhence) { + case FF_SEEK_CUR: // The current file position. + fr = f_lseek(pxStream, f_tell(pxStream) + iOffset); + break; + case FF_SEEK_END: // The end of the file. + fr = f_lseek(pxStream, f_size(pxStream) + iOffset); + break; + case FF_SEEK_SET: // The beginning of the file. + fr = f_lseek(pxStream, iOffset); + break; + default: + myASSERT(!"Bad iWhence"); + } + errno = fresult2errno(fr); + if (FR_OK == fr) + return 0; + else + return -1; +} +int ff_findfirst(const char *pcDirectory, FF_FindData_t *pxFindData) { + TRACE_PRINTF("%s(%s)\n", __func__, pcDirectory); + // FRESULT f_findfirst ( + // DIR* dp, /* [OUT] Poninter to the directory object */ + // FILINFO* fno, /* [OUT] Pointer to the file information structure + // */ const TCHAR* path, /* [IN] Pointer to the directory name to be + // opened */ const TCHAR* pattern /* [IN] Pointer to the matching pattern + // string */ + //); + char buf1[ffconfigMAX_FILENAME] = {0}; + if (pcDirectory[0]) { + FRESULT fr = f_getcwd(buf1, sizeof buf1); + errno = fresult2errno(fr); + if (FR_OK != fr) return -1; + fr = f_chdir(pcDirectory); + errno = fresult2errno(fr); + if (FR_OK != fr) return -1; + } + char buf2[ffconfigMAX_FILENAME] = {0}; + FRESULT fr = f_getcwd(buf2, sizeof buf2); + TRACE_PRINTF("%s: f_findfirst(path=%s)\n", __func__, buf2); + fr = f_findfirst(&pxFindData->dir, &pxFindData->fileinfo, buf2, "*"); + errno = fresult2errno(fr); + pxFindData->pcFileName = pxFindData->fileinfo.fname; + pxFindData->ulFileSize = pxFindData->fileinfo.fsize; + if (tracing) printf("%s: fname=%s\n", __func__, pxFindData->fileinfo.fname); + if (pcDirectory[0]) { + FRESULT fr2 = f_chdir(buf1); + errno = fresult2errno(fr2); + if (FR_OK != fr2) return -1; + } + if (FR_OK == fr) + return 0; + else + return -1; +} +int ff_findnext(FF_FindData_t *pxFindData) { + TRACE_PRINTF("%s\n", __func__); + // FRESULT f_findnext ( + // DIR* dp, /* [IN] Poninter to the directory object */ + // FILINFO* fno /* [OUT] Pointer to the file information structure + // */ + //); + FRESULT fr = f_findnext(&pxFindData->dir, &pxFindData->fileinfo); + errno = fresult2errno(fr); + pxFindData->pcFileName = pxFindData->fileinfo.fname; + pxFindData->ulFileSize = pxFindData->fileinfo.fsize; + if (tracing) printf("%s: fname=%s\n", __func__, pxFindData->fileinfo.fname); + if (FR_OK == fr && pxFindData->fileinfo.fname[0]) { + return 0; + } else { + return -1; + } +} +FF_FILE *ff_truncate(const char *pcFileName, long lTruncateSize) { + TRACE_PRINTF("%s\n", __func__); + FIL *fp = malloc(sizeof(FIL)); + if (!fp) { + errno = ENOMEM; + return NULL; + } + FRESULT fr = f_open(fp, pcFileName, FA_CREATE_ALWAYS | FA_WRITE); + if (tracing && FR_OK != fr) + printf("%s: f_open error: %s (%d)\n", __func__, FRESULT_str(fr), fr); + errno = fresult2errno(fr); + if (FR_OK != fr) return NULL; + fr = f_lseek(fp, lTruncateSize); + errno = fresult2errno(fr); + if (tracing && FR_OK != fr) + printf("%s: f_lseek error: %s (%d)\n", __func__, FRESULT_str(fr), fr); + if (FR_OK != fr) return NULL; + fr = f_truncate(fp); + if (tracing && FR_OK != fr) + printf("%s: f_truncate error: %s (%d)\n", __func__, FRESULT_str(fr), fr); + errno = fresult2errno(fr); + if (FR_OK == fr) + return fp; + else + return NULL; +} +int ff_seteof(FF_FILE *pxStream) { + TRACE_PRINTF("%s\n", __func__); + FRESULT fr = f_truncate(pxStream); + errno = fresult2errno(fr); + if (FR_OK == fr) + return 0; + else + return FF_EOF; +} +int ff_rename(const char *pcOldName, const char *pcNewName, + int bDeleteIfExists) { + TRACE_PRINTF("%s\n", __func__); + // FRESULT f_rename ( + // const TCHAR* old_name, /* [IN] Old object name */ + // const TCHAR* new_name /* [IN] New object name */ + //); + // Any object with this path name except old_name must not be exist, or the + // function fails with FR_EXIST. + if (bDeleteIfExists) f_unlink(pcNewName); + FRESULT fr = f_rename(pcOldName, pcNewName); + errno = fresult2errno(fr); + if (FR_OK == fr) + return 0; + else + return -1; +} +char *ff_fgets(char *pcBuffer, size_t xCount, FF_FILE *pxStream) { + TRACE_PRINTF("%s\n", __func__); + TCHAR *p = f_gets(pcBuffer, xCount, pxStream); + // On success a pointer to pcBuffer is returned. If there is a read error + // then NULL is returned and the task's errno is set to indicate the reason. + if (p == pcBuffer) + return pcBuffer; + else { + errno = EIO; + return NULL; + } +} diff --git a/MCUME_pico/FatFs_SPI/src/glue.c b/MCUME_pico/FatFs_SPI/src/glue.c new file mode 100755 index 0000000..e8bcf5a --- /dev/null +++ b/MCUME_pico/FatFs_SPI/src/glue.c @@ -0,0 +1,149 @@ +/*-----------------------------------------------------------------------*/ +/* Low level disk I/O module SKELETON for FatFs (C)ChaN, 2019 */ +/*-----------------------------------------------------------------------*/ +/* If a working storage control module is available, it should be */ +/* attached to the FatFs via a glue function rather than modifying it. */ +/* This is an example of glue functions to attach various exsisting */ +/* storage control modules to the FatFs module with a defined API. */ +/*-----------------------------------------------------------------------*/ +#include +// +#include "ff.h" /* Obtains integer types */ +// +#include "diskio.h" /* Declarations of disk functions */ +// +#include "hw_config.h" +#include "my_debug.h" +#include "sd_card.h" + +#define TRACE_PRINTF(fmt, args...) +//#define TRACE_PRINTF printf // task_printf + +/*-----------------------------------------------------------------------*/ +/* Get Drive Status */ +/*-----------------------------------------------------------------------*/ + +DSTATUS disk_status(BYTE pdrv /* Physical drive nmuber to identify the drive */ +) { + TRACE_PRINTF(">>> %s\n", __FUNCTION__); + sd_card_t *p_sd = sd_get_by_num(pdrv); + if (!p_sd) return RES_PARERR; + return sd_init_card(p_sd); +} + +/*-----------------------------------------------------------------------*/ +/* Inidialize a Drive */ +/*-----------------------------------------------------------------------*/ + +DSTATUS disk_initialize( + BYTE pdrv /* Physical drive nmuber to identify the drive */ +) { + TRACE_PRINTF(">>> %s\n", __FUNCTION__); + sd_card_t *p_sd = sd_get_by_num(pdrv); + if (!p_sd) return RES_PARERR; + return sd_init_card(p_sd); +} + +static int sdrc2dresult(int sd_rc) { + switch (sd_rc) { + case SD_BLOCK_DEVICE_ERROR_NONE: + return RES_OK; + case SD_BLOCK_DEVICE_ERROR_UNUSABLE: + case SD_BLOCK_DEVICE_ERROR_NO_RESPONSE: + case SD_BLOCK_DEVICE_ERROR_NO_INIT: + case SD_BLOCK_DEVICE_ERROR_NO_DEVICE: + return RES_NOTRDY; + case SD_BLOCK_DEVICE_ERROR_PARAMETER: + case SD_BLOCK_DEVICE_ERROR_UNSUPPORTED: + return RES_PARERR; + case SD_BLOCK_DEVICE_ERROR_WRITE_PROTECTED: + return RES_WRPRT; + case SD_BLOCK_DEVICE_ERROR_CRC: + case SD_BLOCK_DEVICE_ERROR_WOULD_BLOCK: + case SD_BLOCK_DEVICE_ERROR_ERASE: + case SD_BLOCK_DEVICE_ERROR_WRITE: + default: + return RES_ERROR; + } +} + +/*-----------------------------------------------------------------------*/ +/* Read Sector(s) */ +/*-----------------------------------------------------------------------*/ + +DRESULT disk_read(BYTE pdrv, /* Physical drive nmuber to identify the drive */ + BYTE *buff, /* Data buffer to store read data */ + LBA_t sector, /* Start sector in LBA */ + UINT count /* Number of sectors to read */ +) { + TRACE_PRINTF(">>> %s\n", __FUNCTION__); + sd_card_t *p_sd = sd_get_by_num(pdrv); + if (!p_sd) return RES_PARERR; + int rc = sd_read_blocks(p_sd, buff, sector, count); + return sdrc2dresult(rc); +} + +/*-----------------------------------------------------------------------*/ +/* Write Sector(s) */ +/*-----------------------------------------------------------------------*/ + +#if FF_FS_READONLY == 0 + +DRESULT disk_write(BYTE pdrv, /* Physical drive nmuber to identify the drive */ + const BYTE *buff, /* Data to be written */ + LBA_t sector, /* Start sector in LBA */ + UINT count /* Number of sectors to write */ +) { + TRACE_PRINTF(">>> %s\n", __FUNCTION__); + sd_card_t *p_sd = sd_get_by_num(pdrv); + if (!p_sd) return RES_PARERR; + int rc = sd_write_blocks(p_sd, buff, sector, count); + return sdrc2dresult(rc); +} + +#endif + +/*-----------------------------------------------------------------------*/ +/* Miscellaneous Functions */ +/*-----------------------------------------------------------------------*/ + +DRESULT disk_ioctl(BYTE pdrv, /* Physical drive nmuber (0..) */ + BYTE cmd, /* Control code */ + void *buff /* Buffer to send/receive control data */ +) { + TRACE_PRINTF(">>> %s\n", __FUNCTION__); + sd_card_t *p_sd = sd_get_by_num(pdrv); + if (!p_sd) return RES_PARERR; + switch (cmd) { + case GET_SECTOR_COUNT: { // Retrieves number of available sectors, the + // largest allowable LBA + 1, on the drive + // into the LBA_t variable pointed by buff. + // This command is used by f_mkfs and f_fdisk + // function to determine the size of + // volume/partition to be created. It is + // required when FF_USE_MKFS == 1. + static LBA_t n; + n = sd_sectors(p_sd); + *(LBA_t *)buff = n; + if (!n) return RES_ERROR; + return RES_OK; + } + case GET_BLOCK_SIZE: { // Retrieves erase block size of the flash + // memory media in unit of sector into the DWORD + // variable pointed by buff. The allowable value + // is 1 to 32768 in power of 2. Return 1 if the + // erase block size is unknown or non flash + // memory media. This command is used by only + // f_mkfs function and it attempts to align data + // area on the erase block boundary. It is + // required when FF_USE_MKFS == 1. + static DWORD bs = 1; + buff = &bs; + return RES_OK; + } + case CTRL_SYNC: + return RES_OK; + default: + return RES_PARERR; + } +} diff --git a/MCUME_pico/FatFs_SPI/src/my_debug.c b/MCUME_pico/FatFs_SPI/src/my_debug.c new file mode 100755 index 0000000..27fe80f --- /dev/null +++ b/MCUME_pico/FatFs_SPI/src/my_debug.c @@ -0,0 +1,13 @@ +#include +#include +#include "my_debug.h" + +void my_printf(const char *pcFormat, ...) { + char pcBuffer[256] = {0}; + va_list xArgs; + va_start(xArgs, pcFormat); + vsnprintf(pcBuffer, sizeof(pcBuffer), pcFormat, xArgs); + va_end(xArgs); + printf("%s", pcBuffer); + fflush(stdout); +} diff --git a/MCUME_pico/FatFs_SPI/src/rtc.c b/MCUME_pico/FatFs_SPI/src/rtc.c new file mode 100755 index 0000000..6e17ea9 --- /dev/null +++ b/MCUME_pico/FatFs_SPI/src/rtc.c @@ -0,0 +1,124 @@ +#include +// +#include "pico/stdio.h" +#include "pico/stdlib.h" +// +#include "ff.h" +#include "util.h" // calculate_checksum +// +#include "rtc.h" + +time_t epochtime; + +typedef struct rtc_save { + uint32_t signature; + datetime_t datetime; + uint32_t checksum; // last, not included in checksum +} rtc_save_t; +static rtc_save_t rtc_save __attribute__((section(".uninitialized_data"))); + +static void update_epochtime() { + bool rc = rtc_get_datetime(&rtc_save.datetime); + if (rc) { + rtc_save.signature = 0xBABEBABE; + struct tm timeinfo = { + .tm_sec = rtc_save.datetime + .sec, /* Seconds. [0-60] (1 leap second) */ + .tm_min = rtc_save.datetime.min, /* Minutes. [0-59] */ + .tm_hour = rtc_save.datetime.hour, /* Hours. [0-23] */ + .tm_mday = rtc_save.datetime.day, /* Day. [1-31] */ + .tm_mon = rtc_save.datetime.month - 1, /* Month. [0-11] */ + .tm_year = rtc_save.datetime.year - 1900, /* Year - 1900. */ + .tm_wday = 0, /* Day of week. [0-6] */ + .tm_yday = 0, /* Days in year.[0-365] */ + .tm_isdst = -1 /* DST. [-1/0/1]*/ + }; + rtc_save.checksum = calculate_checksum((uint32_t *)&rtc_save, + offsetof(rtc_save_t, checksum)); + epochtime = mktime(&timeinfo); + rtc_save.datetime.dotw = timeinfo.tm_wday; + // configASSERT(-1 != epochtime); + } +} + +time_t time(time_t *pxTime) { + if (pxTime) { + *pxTime = epochtime; + } + return epochtime; +} + +static bool repeating_timer_callback(struct repeating_timer *t) { + update_epochtime(); + return true; +} + +static struct repeating_timer timer; + +void time_init() { + rtc_init(); + { + datetime_t t = {0, 0, 0, 0, 0, 0, 0}; + rtc_get_datetime(&t); + if (!t.year && rtc_save.datetime.year) { + uint32_t xor_checksum = calculate_checksum( + (uint32_t *)&rtc_save, offsetof(rtc_save_t, checksum)); + if (rtc_save.signature == 0xBABEBABE && + rtc_save.checksum == xor_checksum) { + // Set rtc + rtc_set_datetime(&rtc_save.datetime); + } + } + } + if (rtc_running()) { + // Create a repeating timer that calls repeating_timer_callback. + // If the delay is > 0 then this is the delay between the previous + // callback ending and the next starting. If the delay is negative (see + // below) then the next call to the callback will be exactly 500ms after + // the start of the call to the last callback + // Negative delay so means we will call repeating_timer_callback, and + // call it again 500ms later regardless of how long the callback took to + // execute + add_repeating_timer_ms(-1000, repeating_timer_callback, NULL, &timer); + } +} + +void setrtc(datetime_t *t) { + rtc_set_datetime(t); + if (rtc_running()) { + add_repeating_timer_ms(-1000, repeating_timer_callback, NULL, &timer); + } +} + +DWORD get_fattime(void) { + datetime_t t = {0, 0, 0, 0, 0, 0, 0}; + bool rc = rtc_get_datetime(&t); + if (!rc) return 0; + + DWORD fattime = 0; + // bit31:25 + // Year origin from the 1980 (0..127, e.g. 37 for 2017) + uint8_t yr = t.year - 1980; + fattime |= (0b01111111 & yr) << 25; + // bit24:21 + // Month (1..12) + uint8_t mo = t.month; + fattime |= (0b00001111 & mo) << 21; + // bit20:16 + // Day of the month (1..31) + uint8_t da = t.day; + fattime |= (0b00011111 & da) << 16; + // bit15:11 + // Hour (0..23) + uint8_t hr = t.hour; + fattime |= (0b00011111 & hr) << 11; + // bit10:5 + // Minute (0..59) + uint8_t mi = t.min; + fattime |= (0b00111111 & mi) << 5; + // bit4:0 + // Second / 2 (0..29, e.g. 25 for 50) + uint8_t sd = t.sec / 2; + fattime |= (0b00011111 & sd); + return fattime; +} diff --git a/MCUME_pico/bin/mcume_gfxengine.uf2 b/MCUME_pico/bin/mcume_gfxengine.uf2 new file mode 100644 index 0000000..07518ec Binary files /dev/null and b/MCUME_pico/bin/mcume_gfxengine.uf2 differ diff --git a/MCUME_pico/bin/mcume_pico5200.uf2 b/MCUME_pico/bin/mcume_pico5200.uf2 new file mode 100644 index 0000000..f2d80e0 Binary files /dev/null and b/MCUME_pico/bin/mcume_pico5200.uf2 differ diff --git a/MCUME_pico/bin/mcume_pico64.uf2 b/MCUME_pico/bin/mcume_pico64.uf2 new file mode 100644 index 0000000..a975477 Binary files /dev/null and b/MCUME_pico/bin/mcume_pico64.uf2 differ diff --git a/MCUME_pico/bin/mcume_pico800.uf2 b/MCUME_pico/bin/mcume_pico800.uf2 new file mode 100644 index 0000000..58ece01 Binary files /dev/null and b/MCUME_pico/bin/mcume_pico800.uf2 differ diff --git a/MCUME_pico/bin/mcume_pico81.uf2 b/MCUME_pico/bin/mcume_pico81.uf2 new file mode 100644 index 0000000..067dcf3 Binary files /dev/null and b/MCUME_pico/bin/mcume_pico81.uf2 differ diff --git a/MCUME_pico/bin/mcume_picocolem.uf2 b/MCUME_pico/bin/mcume_picocolem.uf2 new file mode 100644 index 0000000..1706247 Binary files /dev/null and b/MCUME_pico/bin/mcume_picocolem.uf2 differ diff --git a/MCUME_pico/bin/mcume_picoo2em.uf2 b/MCUME_pico/bin/mcume_picoo2em.uf2 new file mode 100644 index 0000000..8883afa Binary files /dev/null and b/MCUME_pico/bin/mcume_picoo2em.uf2 differ diff --git a/MCUME_pico/bin/mcume_picospeccy.uf2 b/MCUME_pico/bin/mcume_picospeccy.uf2 new file mode 100644 index 0000000..23b7e57 Binary files /dev/null and b/MCUME_pico/bin/mcume_picospeccy.uf2 differ diff --git a/MCUME_pico/bin/mcume_picovcs.uf2 b/MCUME_pico/bin/mcume_picovcs.uf2 new file mode 100644 index 0000000..544130e Binary files /dev/null and b/MCUME_pico/bin/mcume_picovcs.uf2 differ diff --git a/MCUME_pico/build/.DS_Store b/MCUME_pico/build/.DS_Store new file mode 100644 index 0000000..4544045 Binary files /dev/null and b/MCUME_pico/build/.DS_Store differ diff --git a/MCUME_pico/gfxengine/gfxengine.cpp b/MCUME_pico/gfxengine/gfxengine.cpp new file mode 100644 index 0000000..a2843ea --- /dev/null +++ b/MCUME_pico/gfxengine/gfxengine.cpp @@ -0,0 +1,323 @@ +/* + * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include + +#include "pico.h" +#include "pico/stdlib.h" + +//#include "VGA_t4.h" +#include "vga_t_dma.h" +VGA_T4 vga; + + +const vga_pixel mario[] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x24,0x24,0x24,0x24,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x24,0x24,0xe5,0xe1,0xe9,0xf9,0xe9,0x24,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x24,0xe1,0xe1,0xa1,0xa1,0xd0,0xf9,0xff,0x24,0x00,0x00,0x00,0x00, +0x00,0x00,0x24,0xa1,0xe5,0xa1,0x81,0x24,0x24,0x24,0x24,0x24,0x24,0x00,0x00,0x00, +0x00,0x24,0xa5,0xa1,0x81,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x00,0x00, +0x00,0x24,0xf6,0x24,0x24,0x44,0xe9,0x24,0xe9,0x24,0xed,0x00,0x00,0x00,0x00,0x00, +0x24,0xf6,0x8d,0xf6,0x24,0xe9,0xf6,0x24,0xf6,0x24,0xf6,0x8d,0x6c,0x00,0x00,0x00, +0x24,0xe9,0x88,0xf6,0x24,0x24,0xfa,0xf6,0xfa,0xf6,0xfa,0xf6,0xf6,0x68,0x00,0x00, +0x24,0x40,0xe9,0xf6,0x24,0xf6,0xf6,0x44,0xe9,0xed,0xe9,0xed,0xe9,0x68,0x00,0x00, +0x00,0x24,0x40,0xe9,0xed,0xf6,0x44,0x20,0x20,0x20,0x20,0x20,0x24,0x00,0x00,0x00, +0x00,0x00,0x24,0x84,0xe9,0xe9,0xe9,0xe9,0x20,0x24,0x24,0x24,0x00,0x00,0x00,0x00, +0x00,0x00,0x68,0x81,0x84,0x84,0x88,0x88,0x68,0x29,0x24,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x68,0xa5,0xa5,0xe9,0x68,0x4e,0x7a,0x7a,0x29,0x24,0x24,0x00,0x00,0x00, +0x00,0x24,0x68,0xff,0xff,0xff,0x8d,0xff,0xff,0x9b,0xff,0x49,0x24,0x24,0x00,0x00, +0x24,0x64,0x88,0xff,0xff,0x8d,0x4e,0xff,0xff,0x9b,0xff,0x24,0x88,0x88,0x24,0x00, +0x88,0x88,0x68,0xff,0xff,0x68,0x2e,0x4e,0x52,0x7a,0x29,0x20,0x88,0x88,0x24,0x00, +0x88,0x88,0x49,0x68,0x6c,0x2e,0x2e,0x2e,0x2e,0x09,0x00,0x88,0x88,0x88,0x00,0x00, +0x24,0x88,0x88,0x24,0x24,0x09,0x05,0x05,0x09,0x24,0x24,0x88,0x88,0x24,0x00,0x00, +0x00,0x24,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x24,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + +static const unsigned char tilemapL0[] = { + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, + 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, + 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05, + 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A, + 0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B, + 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C, + 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D, + 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E, + 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F, + 0x00,0x00,0x00,0x00,0x00,0x00,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,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, + 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, + 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05, + 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A, + 0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B, + 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C, + 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D, + 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E, + 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; + +static const unsigned char tilemapL1[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; + + + +// Hight of the tile map (size of 1 row above) +#define TILEMAP_H 30 + +// Only uses rows 3-11 from the TILEMAP_H above for the horizintal scroll +#define HSCR_BEG 3 +#define HSCR_END 11 + +static int fb_width, fb_height; + +static unsigned char * tilemapL0Pt; +static unsigned char * tilemapL1Pt; +static int tilemapL0Width; +static int tilemapL1Width; +static int hscrL0 = 0; +static int hscrL1 = 0; +static int hscrincL0 = 1; +static int hscrincL1 = 2; +static uint8_t spr_angle[SPRITES_MAX]; + + + +int main(void) { + stdio_init_all(); + + vga.begin(VGA_MODE_320x240); + //puts("Color bars ready, press SPACE to invert..."); + vga.clear(VGA_RGB(0x00,0x00,0x00)); + vga.get_frame_buffer_size(&fb_width, &fb_height); + // Initialize game engine + // 2 tiles layers (TILES_MAX_LAYERS) + // 32 sprites (SPRITES_MAX) + // 64 tiles + 64 sprites definitions + // Defaults or change VGA_t4.h: + // 20x15 tiles of 16x16 pixels in 256 colors + // 16x32 pixels sprites in 256 colors + vga.begin_gfxengine(2, 64, 64); + + // Init tilemaps for entire screen + tilemapL0Pt= (unsigned char *)&tilemapL0[0]; + tilemapL1Pt= (unsigned char *)&tilemapL1[0]; + for (int c=0; c< TILES_COLS; c++) { + vga.tile_draw_col(0, c,0,tilemapL0Pt,TILEMAP_H); + vga.tile_draw_col(1, c,0,tilemapL1Pt,TILEMAP_H); + tilemapL0Pt += TILEMAP_H; + tilemapL1Pt += TILEMAP_H; + } + tilemapL0Width = ((sizeof(tilemapL0)/TILEMAP_H)-TILES_COLS+1)*TILES_W; + tilemapL1Width = ((sizeof(tilemapL1)/TILEMAP_H)-TILES_COLS+1)*TILES_W; + + // Init horizontal scrolling area, mask last col (in pixels) at right to hide updates + vga.set_hscroll(0, HSCR_BEG,HSCR_END,TILES_W); + vga.set_hscroll(1, HSCR_BEG,HSCR_END,TILES_W); + + // Init sprite animation + for (int i=0; i> TILES_HBITS) % TILES_COLS; + if (hscrincL0>0) { + vga.tile_draw_col(0, (updcolL0+(TILES_COLS-1))%TILES_COLS,HSCR_BEG,tilemapL0Pt+HSCR_BEG,HSCR_END-HSCR_BEG+1); + tilemapL0Pt += TILEMAP_H; + if (hscrL0 >= tilemapL0Width) { + hscrincL0 = -hscrincL0; + vga.tile_draw_col(0, (updcolL0+(TILES_COLS-1))%TILES_COLS,HSCR_BEG,tilemapL0Pt-(TILES_COLS+1)*TILEMAP_H+HSCR_BEG,HSCR_END-HSCR_BEG+1); + } + } + else if (hscrincL0<0) { + updcolL0 -= 1; // row before !!! + if (updcolL0<0 ) updcolL0 += TILES_COLS; + if (( tilemapL0Pt-(TILES_COLS+2)*TILEMAP_H) >= tilemapL0) + vga.tile_draw_col(0, updcolL0,HSCR_BEG,tilemapL0Pt-(TILES_COLS+2)*TILEMAP_H+HSCR_BEG,HSCR_END-HSCR_BEG+1); + tilemapL0Pt -= TILEMAP_H; + if (hscrL0 <=0) { + hscrincL0 = -hscrincL0; + vga.tile_draw_col(0, updcolL0,HSCR_BEG,tilemapL0Pt-TILEMAP_H+HSCR_BEG,HSCR_END-HSCR_BEG+1); + } + } + } + vga.hscroll(0,hscrL0); + + hscrL1 = hscrL1 + hscrincL1; + if ( (hscrL1 & TILES_HMASK) == 0x0) { + int updcolL1 = (hscrL1 >> TILES_HBITS) % TILES_COLS; + if (hscrincL1 > 0) { + vga.tile_draw_col(1, (updcolL1+(TILES_COLS-1))%TILES_COLS,HSCR_BEG,tilemapL1Pt+HSCR_BEG,HSCR_END-HSCR_BEG+1); + tilemapL1Pt += TILEMAP_H; + if (hscrL1 >= tilemapL1Width) { + hscrincL1 = -hscrincL1; + vga.tile_draw_col(1, (updcolL1+(TILES_COLS-1))%TILES_COLS,HSCR_BEG,tilemapL1Pt-(TILES_COLS+1)*TILEMAP_H+HSCR_BEG,HSCR_END-HSCR_BEG+1); + } + } + else if (hscrincL1 < 0) { + updcolL1 -= 1; // row before !!! + if (updcolL1<0 ) updcolL1 += TILES_COLS; + if (( tilemapL1Pt-(TILES_COLS+2)*TILEMAP_H) >= tilemapL1) + vga.tile_draw_col(1, updcolL1,HSCR_BEG,tilemapL1Pt-(TILES_COLS+2)*TILEMAP_H+HSCR_BEG,HSCR_END-HSCR_BEG+1); + tilemapL1Pt -= TILEMAP_H; + if (hscrL1 <=0) { + hscrincL1 = -hscrincL1; + vga.tile_draw_col(1, updcolL1,HSCR_BEG,tilemapL1Pt-TILEMAP_H+HSCR_BEG,HSCR_END-HSCR_BEG+1); + } + } + } + vga.hscroll(1,hscrL1); + + + for (int i=1; i>8], 100+120*calcsi[(spr_angle[i]*360)>>8], i); + } + vga.sprite(0, 100, 100, 0); + + + //scanvideo_wait_for_vblank(); + vga.run_gfxengine(); + + + int c = getchar_timeout_us(0); + switch (c) { + case ' ': + printf("Inverted: %d\n", 1); + break; + } + } +} + + + + diff --git a/MCUME_pico/pico5200/.DS_Store b/MCUME_pico/pico5200/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/MCUME_pico/pico5200/.DS_Store differ diff --git a/MCUME_pico/pico5200/AudioPlaySystem.cpp b/MCUME_pico/pico5200/AudioPlaySystem.cpp new file mode 100644 index 0000000..aee40a1 --- /dev/null +++ b/MCUME_pico/pico5200/AudioPlaySystem.cpp @@ -0,0 +1,176 @@ +#include "emuapi.h" + +#ifdef HAS_SND + +#include "AudioPlaySystem.h" + +#define SAMPLERATE AUDIO_SAMPLE_RATE_EXACT +#define CLOCKFREQ 985248 + +#ifndef CUSTOM_SND +static const short square[]={ +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +}; + +const short noise[] { +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,-32767,-32767, +32767,-32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +}; + +#define NOISEBSIZE 0x100 + +typedef struct +{ + unsigned int spos; + unsigned int sinc; + unsigned int vol; +} Channel; + +static Channel chan[6] = { + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0} }; + +#endif + +volatile bool playing = false; + + +static void snd_Reset(void) +{ +#ifndef CUSTOM_SND + chan[0].vol = 0; + chan[1].vol = 0; + chan[2].vol = 0; + chan[3].vol = 0; + chan[4].vol = 0; + chan[5].vol = 0; + chan[0].sinc = 0; + chan[1].sinc = 0; + chan[2].sinc = 0; + chan[3].sinc = 0; + chan[4].sinc = 0; + chan[5].sinc = 0; +#endif +} + + +#ifdef CUSTOM_SND +extern "C" { +void SND_Process(void *sndbuffer, int sndn); +} +#endif + +#include +void AudioPlaySystem::snd_Mixer(short * stream, int len ) +{ + if (playing) + { +#ifdef CUSTOM_SND + //printf("s\n"); + SND_Process((void*)stream, len); +#else + int i; + long s; + len = len >> 1; + short v0=chan[0].vol; + short v1=chan[1].vol; + short v2=chan[2].vol; + short v3=chan[3].vol; + short v4=chan[4].vol; + short v5=chan[5].vol; + for (i=0;i>8)&0x3f])>>11); + s+=((v1*square[(chan[1].spos>>8)&0x3f])>>11); + s+=((v2*square[(chan[2].spos>>8)&0x3f])>>11); + s+=((v3*noise[(chan[3].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v4*noise[(chan[4].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v5*noise[(chan[5].spos>>8)&(NOISEBSIZE-1)])>>11); + *stream++ = (short)(s); + *stream++ = (short)(s); + chan[0].spos += chan[0].sinc; + chan[1].spos += chan[1].sinc; + chan[2].spos += chan[2].sinc; + chan[3].spos += chan[3].sinc; + chan[4].spos += chan[4].sinc; + chan[5].spos += chan[5].sinc; + } +#endif + } +} + +void AudioPlaySystem::begin(void) +{ + this->reset(); +} + +void AudioPlaySystem::start(void) +{ + playing = true; +} + +void AudioPlaySystem::setSampleParameters(float clockfreq, float samplerate) { +} + +void AudioPlaySystem::reset(void) +{ + snd_Reset(); +} + +void AudioPlaySystem::stop(void) +{ + playing = false; +} + +bool AudioPlaySystem::isPlaying(void) +{ + return playing; +} + + + +void AudioPlaySystem::sound(int C, int F, int V) { +#ifndef CUSTOM_SND + if (C < 6) { + chan[C].vol = V; + chan[C].sinc = F>>1; + } +#endif +} + +void AudioPlaySystem::step(void) { +} +#endif diff --git a/MCUME_pico/pico5200/AudioPlaySystem.h b/MCUME_pico/pico5200/AudioPlaySystem.h new file mode 100644 index 0000000..5d2efc0 --- /dev/null +++ b/MCUME_pico/pico5200/AudioPlaySystem.h @@ -0,0 +1,26 @@ +#ifndef audioplaysystem_h_ +#define audioplaysystem_h_ + +#ifdef HAS_SND + +#include "platform_config.h" + +class AudioPlaySystem +{ +public: + AudioPlaySystem(void) { }; + void begin(void); + void setSampleParameters(float clockfreq, float samplerate); + void reset(void); + void start(void); + void stop(void); + bool isPlaying(void); + void sound(int C, int F, int V); + void buzz(int size, int val); + void step(void); + static void snd_Mixer(short * stream, int len ); +}; + +#endif + +#endif diff --git a/MCUME_pico/pico5200/antic.c b/MCUME_pico/pico5200/antic.c new file mode 100644 index 0000000..26f1392 --- /dev/null +++ b/MCUME_pico/pico5200/antic.c @@ -0,0 +1,4151 @@ +/* + * antic.c - ANTIC chip emulation + * + * Copyright (C) 1995-1998 David Firth + * Copyright (C) 1998-2008 Atari800 development team (see DOC/CREDITS) + * + * This file is part of the Atari800 emulator project which emulates + * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. + * + * Atari800 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. + * + * Atari800 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 Atari800; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +#include + +#include "antic.h" +#include "cpu.h" +#include "gtia.h" +#include "memory.h" +#include "pokey.h" + +#ifdef NEW_CYCLE_EXACT +#include "cycle_map.h" +#endif + + +UWORD Screen_atari[ATARI_WIDTH / 2]; // = NULL; +#define scrn_line 0 //(ATARI_WIDTH / 2) + +#define DRAWLINE() \ + if ( (ANTIC_ypos > 8) && (ANTIC_ypos < 248)) { \ + emu_DrawLine((unsigned char *)&Screen_atari[32/sizeof(Screen_atari[0])], 320, 240, ANTIC_ypos-8); \ + } + + +#define LCHOP 3 /* do not build leftmost 0..3 characters in wide mode */ +#define RCHOP 3 /* do not build rightmost 0..3 characters in wide mode */ + +int ANTIC_break_ypos = 999; +#if !defined(BASIC) && !defined(CURSES_BASIC) +static int gtia_bug_active = FALSE; /* The GTIA bug mode is active */ +#endif +#ifdef NEW_CYCLE_EXACT +static void draw_partial_scanline(int l,int r); +static void update_scanline_chbase(void); +static void update_scanline_invert(void); +static void update_scanline_blank(void); +const int *ANTIC_cpu2antic_ptr; +const int *ANTIC_antic2cpu_ptr; +int ANTIC_delayed_wsync = 0; +static int dmactl_changed = 0; +static UBYTE delayed_DMACTL; +static int draw_antic_ptr_changed = 0; +static UBYTE need_load; +static int dmactl_bug_chdata; +#endif /* NEW_CYCLE_EXACT */ +#ifndef NO_SIMPLE_PAL_BLENDING +int ANTIC_pal_blending = 0; +#endif /* NO_SIMPLE_PAL_BLENDING */ + +/* Video memory access is hidden behind these macros. It allows to track dirty video memory + to improve video system performance */ +#ifdef DIRTYRECT + +static UWORD *scratchUWordPtr; +static UWORD scratchUWord; +static ULONG *scratchULongPtr; +static ULONG scratchULong; +static UBYTE *scratchUBytePtr; +static UBYTE scratchUByte; + + +#ifdef NODIRTYCOMPARE + +#define WRITE_VIDEO(ptr, val) \ + do { \ + scratchUWordPtr = (ptr); \ + Screen_dirty[((ULONG) scratchUWordPtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchUWordPtr = (val); \ + } while (0) +#define WRITE_VIDEO_LONG(ptr, val) \ + do { \ + scratchULongPtr = (ptr); \ + Screen_dirty[((ULONG) scratchULongPtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchULongPtr = (val); \ + } while (0) +#define WRITE_VIDEO_BYTE(ptr, val) \ + do { \ + scratchUBytePtr = (ptr); \ + Screen_dirty[((ULONG) scratchUBytePtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchUBytePtr = (val); \ + } while (0) +#define FILL_VIDEO(ptr, val, size) \ + do { \ + scratchUBytePtr = (UBYTE*) (ptr); \ + scratchULong = (ULONG) (size); \ + memset(Screen_dirty + (((ULONG) scratchUBytePtr - (ULONG) Screen_atari) >> 3), 1, scratchULong >> 3); \ + memset(scratchUBytePtr, (val), scratchULong); \ + } while (0) + +#else /* NODIRTYCOMPARE not defined: */ + +#define WRITE_VIDEO(ptr, val) \ + do { \ + scratchUWordPtr = (ptr); \ + scratchUWord = (val); \ + if (*scratchUWordPtr != scratchUWord) { \ + Screen_dirty[((ULONG) scratchUWordPtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchUWordPtr = scratchUWord; \ + } \ + } while (0) +#ifndef WORDS_UNALIGNED_OK +#define WRITE_VIDEO_LONG(ptr, val) \ + do { \ + scratchULongPtr = (ptr); \ + scratchULong = (val); \ + if (*scratchULongPtr != scratchULong) { \ + Screen_dirty[((ULONG) scratchULongPtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchULongPtr = scratchULong; \ + } \ + } while (0) +#else +#define WRITE_VIDEO_LONG(ptr, val) \ + do { \ + scratchULongPtr = (ptr); \ + scratchULong = (val); \ + if (*scratchULongPtr != scratchULong) { \ + Screen_dirty[((ULONG) scratchULongPtr - (ULONG) Screen_atari) >> 3] = 1; \ + Screen_dirty[((ULONG) scratchULongPtr - (ULONG) Screen_atari + 2) >> 3] = 1; \ + *scratchULongPtr = scratchULong; \ + } \ + } while (0) +#endif +#define WRITE_VIDEO_BYTE(ptr, val) \ + do { \ + scratchUBytePtr = (ptr); \ + scratchUByte = (val); \ + if (*scratchUBytePtr != scratchUByte) { \ + Screen_dirty[((ULONG) scratchUBytePtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchUBytePtr = scratchUByte; \ + } \ + } while (0) +static UBYTE *scratchFillLimit; +#define FILL_VIDEO(ptr, val, size) \ + do { \ + scratchUBytePtr = (UBYTE *) (ptr); \ + scratchUByte = (UBYTE) (val); \ + scratchFillLimit = scratchUBytePtr + (size); \ + for (; scratchUBytePtr < scratchFillLimit; scratchUBytePtr++) { \ + if (*scratchUBytePtr != scratchUByte) { \ + Screen_dirty[((ULONG) scratchUBytePtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchUBytePtr = scratchUByte; \ + } \ + } \ + } while (0) + +#endif /* NODIRTYCOMPARE */ + +#else /* DIRTYRECT not defined: */ + +#define WRITE_VIDEO(ptr, val) (*(ptr) = val) +#define WRITE_VIDEO_LONG(ptr, val) (*(ptr) = val) +#define WRITE_VIDEO_BYTE(ptr, val) (*(ptr) = val) +#define FILL_VIDEO(ptr, val, size) memset(ptr, val, size) + +#endif /* DIRTYRECT */ + +#define READ_VIDEO_LONG(ptr) (*(ptr)) + +void ANTIC_VideoMemset(UBYTE *ptr, UBYTE val, ULONG size) +{ + FILL_VIDEO(ptr, val, size); +} + +void ANTIC_VideoPutByte(UBYTE *ptr, UBYTE val) +{ + WRITE_VIDEO_BYTE(ptr, val); +} + + +/* Memory access helpers----------------------------------------------------- */ +/* Some optimizations result in unaligned 32-bit accesses. These macros have + been introduced for machines that don't allow unaligned memory accesses. */ + +#ifdef DIRTYRECT +/* STAT_UNALIGNED_WORDS doesn't work with DIRTYRECT */ +#define WRITE_VIDEO_LONG_UNALIGNED WRITE_VIDEO_LONG +#else +#define WRITE_VIDEO_LONG_UNALIGNED(ptr, val) UNALIGNED_PUT_LONG((ptr), (val), Screen_atari_write_long_stat) +#endif + +#ifdef WORDS_UNALIGNED_OK +#define IS_ZERO_ULONG(x) (! UNALIGNED_GET_LONG(x, pm_scanline_read_long_stat)) +#define DO_GTIA_BYTE(p, l, x) { \ + WRITE_VIDEO_LONG_UNALIGNED((ULONG *) (p), (l)[(x) >> 4]); \ + WRITE_VIDEO_LONG_UNALIGNED((ULONG *) (p) + 1, (l)[(x) & 0xf]); \ + } +#else /* WORDS_UNALIGNED_OK */ +#define IS_ZERO_ULONG(x) (!((const UBYTE *)(x))[0] && !((const UBYTE *)(x))[1] && !((const UBYTE *)(x))[2] && !((const UBYTE *)(x))[3]) +#define DO_GTIA_BYTE(p, l, x) { \ + WRITE_VIDEO((UWORD *) (p), (UWORD) ((l)[(x) >> 4])); \ + WRITE_VIDEO((UWORD *) (p) + 1, (UWORD) ((l)[(x) >> 4])); \ + WRITE_VIDEO((UWORD *) (p) + 2, (UWORD) ((l)[(x) & 0xf])); \ + WRITE_VIDEO((UWORD *) (p) + 3, (UWORD) ((l)[(x) & 0xf])); \ + } +#endif /* WORDS_UNALIGNED_OK */ + +/* ANTIC Registers --------------------------------------------------------- */ + +UBYTE ANTIC_DMACTL; +UBYTE ANTIC_CHACTL; +UWORD ANTIC_dlist; +UBYTE ANTIC_HSCROL; +UBYTE ANTIC_VSCROL; +UBYTE ANTIC_PMBASE; +UBYTE ANTIC_CHBASE; +UBYTE ANTIC_NMIEN; +UBYTE ANTIC_NMIST; + +/* ANTIC Memory ------------------------------------------------------------ */ + +#if !defined(BASIC) && !defined(CURSES_BASIC) +static UBYTE antic_memory[52]; +#define ANTIC_margin 4 +/* It's number of bytes in antic_memory, which are never loaded, but may be + read in wide playfield mode. These bytes are uninitialized, because on + real computer there's some kind of 'garbage'. Possibly 1 is enough, but + 4 bytes surely won't cause negative indexes. :) */ + +/* Screen ----------------------------------------------------------------- + Define screen as ULONG to ensure that it is Longword aligned. + This allows special optimisations under certain conditions. + ------------------------------------------------------------------------ */ + +static UWORD *scrn_ptr; +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + +/* Separate access to XE extended memory ----------------------------------- */ +/* It's available in 130 XE and 320 KB Compy Shop. + Note: during ANTIC access to extended memory in Compy Shop Self Test + is disabled. It is unknown if this is true for real 130 XE. If not, + then some extra code has to be added to: + - check if selftest_enabled is set + - check if the address is in range 0x5000..0x57ff + - if both conditions are true, then access memory instead of ANTIC_xe_ptr */ + +/* Pointer to 16 KB seen by ANTIC in 0x4000-0x7fff. + If it's the same what the CPU sees (and what's in MEMORY_mem[0x4000..0x7fff], + then NULL. */ +const UBYTE *ANTIC_xe_ptr = NULL; + +/* ANTIC Timing -------------------------------------------------------------- + +NOTE: this information was written before NEW_CYCLE_EXACT was introduced! + +I've introduced global variable ANTIC_xpos, which contains current number of cycle +in a line. This simplifies ANTIC/CPU timing much. The CPU_GO() function which +emulates CPU is now void and is called with ANTIC_xpos limit, below which CPU can go. + +All strange variables holding 'unused cycles', 'DMA cycles', 'allocated cycles' +etc. are removed. Simply whenever ANTIC fetches a byte, it takes single cycle, +which can be done now with ANTIC_xpos++. There's only one exception: in text modes +2-5 ANTIC takes more bytes than cycles, because it does less than ANTIC_DMAR refresh +cycles. + +Now emulation is really screenline-oriented. We do ANTIC_ypos++ after a line, +not inside it. + +This simplified diagram shows when what is done in a line: + +MDPPPPDD..............(------R/S/F------).......... +^ ^ ^ ^ ^ ^ ^ ^ ---> time/xpos +0 | NMIST_C NMI_C SCR_C WSYNC_C|LINE_C +VSCON_C VSCOF_C + +M - fetch Missiles +D - fetch DL +P - fetch Players +S - fetch Screen +F - fetch Font (in text modes) +R - refresh Memory (ANTIC_DMAR cycles) + +Only Memory Refresh happens in every line, other tasks are optional. + +Below are exact diagrams for some non-scrolled modes: + 11111111111111 + 11111111112222222222333333333344444444445555555555666666666677777777778888888888999999999900000000001111 +012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123 + /--------------------------narrow------------------------------\ + /----------------------------------normal--------------------------------------\ + /-------------------------------------------wide--------------------------------------------\ + +blank line: +MDPPPPDD.................R...R...R...R...R...R...R...R...R........................................................ + +mode 8,9: +MDPPPPDD....S.......S....R..SR...R..SR...R..SR...R..SR...R..S.......S.......S.......S.......S.......S............. + +mode a,b,c: +MDPPPPDD....S...S...S...SR..SR..SR..SR..SR..SR..SR..SR..SR..S...S...S...S...S...S...S...S...S...S...S...S......... + +mode d,e,f: +MDPPPPDD....S.S.S.S.S.S.SRS.SRS.SRS.SRS.SRS.SRS.SRS.SRS.SRS.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S......... + +Notes: +* At the beginning of a line fetched are: + - a byte of Missiles + - a byte of DL (instruction) + - four bytes of Players + - two bytes of DL argument (jump or screen address) + The emulator, however, fetches them all continuously. + +* Refresh cycles and Screen/Font fetches have been tested for some modes (see above). + This is for making the emulator more accurate, able to change colour registers, + sprite positions or GTIA modes during scanline. These modes are the most commonly used + with those effects. + Currently this isn't implemented, and all R/S/F cycles are fetched continuously in *all* modes + (however, right number of cycles is taken in every mode, basing on screen width and HSCROL). + +There are a few constants representing following events: + +* VSCON_C - in first VSC line dctr is loaded with VSCROL + +* ANTIC_NMIST_C - NMIST is updated (set to 0x9f on DLI, set to 0x5f on VBLKI) + +* ANTIC_NMI_C - If NMIEN permits, NMI interrupt is generated + +* SCR_C - We draw whole line of screen. On a real computer you can change + ANTIC/GTIA registers while displaying screen, however this emulator + isn't that accurate. + +* ANTIC_WSYNC_C - ANTIC holds CPU until this moment, when WSYNC is written + +* VSCOF_C - in last VSC line dctr is compared with VSCROL + +* ANTIC_LINE_C - simply end of line (this used to be called CPUL) + +All constants are determined by tests on real Atari computer. It is assumed, +that ANTIC registers are read with LDA, LDX, LDY and written with STA, STX, +STY, all in absolute addressing mode. All these instructions last 4 cycles +and perform read/write operation in last cycle. The CPU emulation should +correctly emulate WSYNC and add cycles for current instruction BEFORE +executing it. That's why VSCOF_C > ANTIC_LINE_C is correct. + +How WSYNC is now implemented: + +* On writing WSYNC: + - if ANTIC_xpos <= ANTIC_WSYNC_C && ANTIC_xpos_limit >= ANTIC_WSYNC_C, + we only change ANTIC_xpos to ANTIC_WSYNC_C - that's all + - otherwise we set ANTIC_wsync_halt and change ANTIC_xpos to ANTIC_xpos_limit causing CPU_GO() + to return + +* At the beginning of CPU_GO() (CPU emulation), when ANTIC_wsync_halt is set: + - if ANTIC_xpos_limit < ANTIC_WSYNC_C we return + - else we set ANTIC_xpos to ANTIC_WSYNC_C, reset ANTIC_wsync_halt and emulate some cycles + +We don't emulate ANTIC_NMIST_C, ANTIC_NMI_C and SCR_C if it is unnecessary. +These are all cases: + +* Common overscreen line + Nothing happens except that ANTIC gets ANTIC_DMAR cycles: + ANTIC_xpos += ANTIC_DMAR; GOEOL; + +* First overscreen line - start of vertical blank + - CPU goes until ANTIC_NMIST_C + - ANTIC sets NMIST to 0x5f + if (ANTIC_NMIEN & 0x40) { + - CPU goes until ANTIC_NMI_C + - ANTIC forces NMI + } + - ANTIC gets ANTIC_DMAR cycles + - CPU goes until ANTIC_LINE_C + +* Screen line without DLI + - ANTIC fetches DL and P/MG + - CPU goes until SCR_C + - ANTIC draws whole line fetching Screen/Font and refreshing memory + - CPU goes until ANTIC_LINE_C + +* Screen line with DLI + - ANTIC fetches DL and P/MG + - CPU goes until ANTIC_NMIST_C + - ANTIC sets NMIST to 0x9f + if (ANTIC_NMIEN & 0x80) { + - CPU goes until ANTIC_NMI_C + - ANTIC forces NMI + } + - CPU goes until SCR_C + - ANTIC draws line with ANTIC_DMAR + - CPU goes until ANTIC_LINE_C + + -------------------------------------------------------------------------- */ + +#define VSCON_C 1 +#define SCR_C 28 +#define VSCOF_C 112 + +unsigned int ANTIC_screenline_cpu_clock = 0; + +#ifdef NEW_CYCLE_EXACT +#define UPDATE_DMACTL do{if (dmactl_changed) { \ + dmactl_changed = 0; \ + ANTIC_PutByte(ANTIC_OFFSET_DMACTL, delayed_DMACTL); \ + } \ + if (draw_antic_ptr_changed) { \ + draw_antic_ptr_changed = 0; \ + draw_antic_ptr = saved_draw_antic_ptr; \ + }}while(0) +#else +#define UPDATE_DMACTL do{}while(0) +#endif /* NEW_CYCLE_EXACT */ +#define UPDATE_GTIA_BUG /* update GTIA if it was in bug mode */\ + do{if(gtia_bug_active) {\ + /* restore draw_antic_ptr for multi-line modes*/\ + draw_antic_ptr = draw_antic_table[GTIA_PRIOR >> 6][anticmode];\ + gtia_bug_active = FALSE;\ + }}while(0) +#define GOEOL_CYCLE_EXACT CPU_GO(ANTIC_antic2cpu_ptr[ANTIC_LINE_C]); \ + ANTIC_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; \ + ANTIC_xpos -= ANTIC_LINE_C; \ + ANTIC_screenline_cpu_clock += ANTIC_LINE_C; \ + DRAWLINE();ANTIC_ypos++; \ + GTIA_UpdatePmplColls(); +#define GOEOL CPU_GO(ANTIC_LINE_C); ANTIC_xpos -= ANTIC_LINE_C; ANTIC_screenline_cpu_clock += ANTIC_LINE_C; UPDATE_DMACTL; DRAWLINE();ANTIC_ypos++; UPDATE_GTIA_BUG +#define OVERSCREEN_LINE ANTIC_xpos += ANTIC_DMAR; GOEOL + +int ANTIC_xpos = 0; +int ANTIC_xpos_limit; +int ANTIC_wsync_halt = FALSE; + +int ANTIC_ypos; /* Line number - lines 8..247 are on screen */ + +/* Timing in first line of modes 2-5 +In these modes ANTIC takes more bytes than cycles. Despite this, it would be +possible that SCR_C + cycles_taken > ANTIC_WSYNC_C. To avoid this we must take some +cycles before SCR_C. before_cycles contains number of them, while extra_cycles +contains difference between bytes taken and cycles taken plus before_cycles. */ + +#define BEFORE_CYCLES (SCR_C - 28) +/* It's number of cycles taken before SCR_C for not scrolled, narrow playfield. + It wasn't tested, but should be ok. ;) */ + +/* Light pen support ------------------------------------------------------- */ + +static UBYTE PENH; +static UBYTE PENV; +UBYTE ANTIC_PENH_input = 0x00; +UBYTE ANTIC_PENV_input = 0xff; + +#ifndef BASIC + +/* Internal ANTIC registers ------------------------------------------------ */ + +static UWORD screenaddr; /* Screen Pointer */ +static UBYTE IR; /* Instruction Register */ +static UBYTE anticmode; /* Antic mode */ +static UBYTE dctr; /* Delta Counter */ +static UBYTE lastline; /* dctr limit */ +static UBYTE need_dl; /* boolean: fetch DL next line */ +static UBYTE vscrol_off; /* boolean: displaying line ending VSC */ + +#endif + +#if !defined(BASIC) && !defined(CURSES_BASIC) + +/* Pre-computed values for improved performance ---------------------------- */ + +#define NORMAL0 0 /* modes 2,3,4,5,0xd,0xe,0xf */ +#define NORMAL1 1 /* modes 6,7,0xa,0xb,0xc */ +#define NORMAL2 2 /* modes 8,9 */ +#define SCROLL0 3 /* modes 2,3,4,5,0xd,0xe,0xf with HSC */ +#define SCROLL1 4 /* modes 6,7,0xa,0xb,0xc with HSC */ +#define SCROLL2 5 /* modes 8,9 with HSC */ +static int md; /* current mode NORMAL0..SCROLL2 */ +/* tables for modes NORMAL0..SCROLL2 */ +static int chars_read[6]; +static int chars_displayed[6]; +static int x_min[6]; +static int ch_offset[6]; +static int load_cycles[6]; +static int font_cycles[6]; +static int before_cycles[6]; +static int extra_cycles[6]; + +/* border parameters for current display width */ +static int left_border_chars; +static int right_border_start; +#ifdef NEW_CYCLE_EXACT +static int left_border_start = LCHOP * 4; +static int right_border_end = (48 - RCHOP) * 4; +#define LBORDER_START left_border_start +#define RBORDER_END right_border_end +#else +#define LBORDER_START (LCHOP * 4) +#define RBORDER_END ((48 - RCHOP) * 4) +#endif /* NEW_CYCLE_EXACT */ + +/* set with CHBASE *and* CHACTL - bits 0..2 set if flip on */ +static UWORD chbase_20; /* CHBASE for 20 character mode */ + +/* set with CHACTL */ +static UBYTE invert_mask; +static int blank_mask; + +/* A scanline of AN0 and AN1 signals as transmitted from ANTIC to GTIA. + In every byte, bit 0 is AN0 and bit 1 is AN1 */ +static UBYTE an_scanline[ATARI_WIDTH / 2 + 8]; + +/* lookup tables */ +static UBYTE blank_lookup[256]; +static UWORD lookup2[256]; +ULONG ANTIC_lookup_gtia9[16]; +ULONG ANTIC_lookup_gtia11[16]; +static UBYTE playfield_lookup[257]; +static UBYTE mode_e_an_lookup[256]; + +/* Colour lookup table + This single table replaces 4 previously used: cl_word, cur_prior, + prior_table and pf_colls. It should be treated as a two-dimensional table, + with playfield colours in rows and PMG colours in columns: + no_PMG PM0 PM1 PM01 PM2 PM3 PM23 PM023 PM123 PM0123 PM25 PM35 PM235 colls ... ... + BAK + ... + HI2 + HI3 + PF0 + PF1 + PF2 + PF3 + The table contains word value (lsb = msb) of colour to be drawn. + The table is being updated taking current PRIOR setting into consideration. + '...' represent two unused columns and single unused row. + HI2 and HI3 are used only if colour_translation_table is being used. + They're colours of hi-res pixels on PF2 and PF3 respectively (PF2 is + default background for hi-res, PF3 is PM5). + Columns PM023, PM123 and PM0123 are used when PRIOR & 0xf equals any + of 5,7,0xc,0xd,0xe,0xf. The columns represent PM0, PM1 and PM01 respectively + covered by PM2 and/or PM3. This is to handle black colour on PF2 and PF3. + Columns PM25, PM35 and PM235 are used when PRIOR & 0x1f equals any + of 0x10,0x1a,0x1c,0x1e. The columns represent PM2, PM3 and PM23 + respectively covered by PM5. This to handle colour on PF0 and PF1: + PF3 if (PRIOR & 0x1f) == 0x10, PF0 or PF1 otherwise. + Additional column 'colls' holds collisions of playfields with PMG. */ + +UWORD ANTIC_cl[128]; + +#define C_PM0 0x01 +#define C_PM1 0x02 +#define C_PM01 0x03 +#define C_PM2 0x04 +#define C_PM3 0x05 +#define C_PM23 0x06 +#define C_PM023 0x07 +#define C_PM123 0x08 +#define C_PM0123 0x09 +#define C_PM25 0x0a +#define C_PM35 0x0b +#define C_PM235 0x0c +#define C_COLLS 0x0d +#define C_BAK 0x00 +#define C_HI2 0x20 +#define C_HI3 0x30 +#define C_PF0 0x40 +#define C_PF1 0x50 +#define C_PF2 0x60 +#define C_PF3 0x70 +#define C_BLACK (C_PF3 | C_PM25) + +/* these are byte-offsets in the table, so left shift for indexing word table + has been avoided */ +#define COLOUR(x) (*(UWORD *) ((UBYTE *) ANTIC_cl + (x) )) +#define L_PM0 (2 * C_PM0) +#define L_PM1 (2 * C_PM1) +#define L_PM01 (2 * C_PM01) +#define L_PM2 (2 * C_PM2) +#define L_PM3 (2 * C_PM3) +#define L_PM23 (2 * C_PM23) +#define L_PM023 (2 * C_PM023) +#define L_PM123 (2 * C_PM123) +#define L_PM0123 (2 * C_PM0123) +#define L_PM25 (2 * C_PM25) +#define L_PM35 (2 * C_PM35) +#define L_PM235 (2 * C_PM235) +#define L_COLLS (2 * C_COLLS) +#define L_BAK (2 * C_BAK) +#define L_HI2 (2 * C_HI2) +#define L_HI3 (2 * C_HI3) +#define L_PF0 (2 * C_PF0) +#define L_PF1 (2 * C_PF1) +#define L_PF2 (2 * C_PF2) +#define L_PF3 (2 * C_PF3) +#define L_BLACK (2 * C_BLACK) + +/* Blank areas optimizations + Routines for most graphics modes take advantage of fact, that often + large areas of screen are background colour. If it is possible, 8 pixels + of background are drawn at once - with two longs or four words, if + the platform doesn't allow unaligned long access. + Artifacting also uses unaligned long access if it's supported. */ + +#ifdef WORDS_UNALIGNED_OK + +#define INIT_BACKGROUND_6 ULONG background = ANTIC_cl[C_PF2] | (((ULONG) ANTIC_cl[C_PF2]) << 16); +#define INIT_BACKGROUND_8 ULONG background = ANTIC_lookup_gtia9[0]; +#define DRAW_BACKGROUND(colreg) { \ + WRITE_VIDEO_LONG_UNALIGNED((ULONG *) ptr, background); \ + WRITE_VIDEO_LONG_UNALIGNED(((ULONG *) ptr) + 1, background); \ + ptr += 4; \ + } +#define DRAW_ARTIF { \ + WRITE_VIDEO_LONG_UNALIGNED((ULONG *) ptr, art_curtable[(UBYTE) (screendata_tally >> 10)]); \ + WRITE_VIDEO_LONG_UNALIGNED(((ULONG *) ptr) + 1, art_curtable[(UBYTE) (screendata_tally >> 6)]); \ + ptr += 4; \ + } + +#else + +#define INIT_BACKGROUND_6 +#define INIT_BACKGROUND_8 +#define DRAW_BACKGROUND(colreg) {\ + WRITE_VIDEO(ptr, ANTIC_cl[colreg]); \ + WRITE_VIDEO(ptr + 1, ANTIC_cl[colreg]); \ + WRITE_VIDEO(ptr + 2, ANTIC_cl[colreg]); \ + WRITE_VIDEO(ptr + 3, ANTIC_cl[colreg]); \ + ptr += 4;\ + } +#define DRAW_ARTIF {\ + WRITE_VIDEO(ptr++, ((UWORD *) art_curtable)[(screendata_tally & 0x03fc00) >> 9]); \ + WRITE_VIDEO(ptr++, ((UWORD *) art_curtable)[((screendata_tally & 0x03fc00) >> 9) + 1]); \ + WRITE_VIDEO(ptr++, ((UWORD *) art_curtable)[(screendata_tally & 0x003fc0) >> 5]); \ + WRITE_VIDEO(ptr++, ((UWORD *) art_curtable)[((screendata_tally & 0x003fc0) >> 5) + 1]); \ + } + +#endif /* WORDS_UNALIGNED_OK */ + +#define DRAW_ARTIF_NEW {\ + WRITE_VIDEO(ptr++, art_lookup_new[(screendata_tally & 0x03f000) >> 12]); \ + WRITE_VIDEO(ptr++, art_lookup_new[(screendata_tally & 0x00fc00) >> 10]); \ + WRITE_VIDEO(ptr++, art_lookup_new[(screendata_tally & 0x003f00) >> 8]); \ + WRITE_VIDEO(ptr++, art_lookup_new[(screendata_tally & 0x000fc0) >> 6]); \ + } + +/* Hi-res modes optimizations + Now hi-res modes are drawn with words, not bytes. Endianess defaults + to little-endian. WORDS_BIGENDIAN should be defined when compiling on + a big-endian machine. */ + +#ifdef WORDS_BIGENDIAN +#define BYTE0_MASK 0xff00 +#define BYTE1_MASK 0x00ff +#define HIRES_MASK_01 0xfff0 +#define HIRES_MASK_10 0xf0ff +#define HIRES_LUM_01 0x000f +#define HIRES_LUM_10 0x0f00 +#else +#define BYTE0_MASK 0x00ff +#define BYTE1_MASK 0xff00 +#define HIRES_MASK_01 0xf0ff +#define HIRES_MASK_10 0xfff0 +#define HIRES_LUM_01 0x0f00 +#define HIRES_LUM_10 0x000f +#endif + +static UWORD hires_lookup_n[128]; +static UWORD hires_lookup_m[128]; +#define hires_norm(x) hires_lookup_n[(x) >> 1] +#define hires_mask(x) hires_lookup_m[(x) >> 1] + +#ifndef USE_COLOUR_TRANSLATION_TABLE +int ANTIC_artif_new = FALSE; /* New type of artifacting */ +UWORD ANTIC_hires_lookup_l[128]; /* accessed in gtia.c */ +#define hires_lum(x) ANTIC_hires_lookup_l[(x) >> 1] +#endif + +/* Player/Missile Graphics ------------------------------------------------- */ + +#define PF0PM (*(UBYTE *) &ANTIC_cl[C_PF0 | C_COLLS]) +#define PF1PM (*(UBYTE *) &ANTIC_cl[C_PF1 | C_COLLS]) +#define PF2PM (*(UBYTE *) &ANTIC_cl[C_PF2 | C_COLLS]) +#define PF3PM (*(UBYTE *) &ANTIC_cl[C_PF3 | C_COLLS]) +#define PF_COLLS(x) (((UBYTE *) &ANTIC_cl)[(x) + L_COLLS]) + +static int singleline; +int ANTIC_player_dma_enabled; +int ANTIC_player_gra_enabled; +int ANTIC_missile_dma_enabled; +int ANTIC_missile_gra_enabled; +int ANTIC_player_flickering; +int ANTIC_missile_flickering; + +static UWORD pmbase_s; +static UWORD pmbase_d; + +/* PMG lookup tables */ +static UBYTE pm_lookup_table[20][256]; +/* current PMG lookup table */ +static const UBYTE *pm_lookup_ptr; + +#define PL_00 0 /* 0x00,0x01,0x02,0x03,0x04,0x06,0x08,0x09,0x0a,0x0b */ +#define PL_05 1 /* 0x05,0x07,0x0c,0x0d,0x0e,0x0f */ +#define PL_10 2 /* 0x10,0x1a */ +#define PL_11 3 /* 0x11,0x18,0x19 */ +#define PL_12 4 /* 0x12 */ +#define PL_13 5 /* 0x13,0x1b */ +#define PL_14 6 /* 0x14,0x16 */ +#define PL_15 7 /* 0x15,0x17,0x1d,0x1f */ +#define PL_1c 8 /* 0x1c */ +#define PL_1e 9 /* 0x1e */ +#define PL_20 10 /* 0x20,0x21,0x22,0x23,0x24,0x26,0x28,0x29,0x2a,0x2b */ +#define PL_25 11 /* 0x25,0x27,0x2c,0x2d,0x2e,0x2f */ +#define PL_30 12 /* 0x30,0x3a */ +#define PL_31 13 /* 0x31,0x38,0x39 */ +#define PL_32 14 /* 0x32 */ +#define PL_33 15 /* 0x33,0x3b */ +#define PL_34 16 /* 0x34,0x36 */ +#define PL_35 17 /* 0x35,0x37,0x3d,0x3f */ +#define PL_3c 18 /* 0x3c */ +#define PL_3e 19 /* 0x3e */ + +static const UBYTE prior_to_pm_lookup[64] = { + PL_00, PL_00, PL_00, PL_00, PL_00, PL_05, PL_00, PL_05, + PL_00, PL_00, PL_00, PL_00, PL_05, PL_05, PL_05, PL_05, + PL_10, PL_11, PL_12, PL_13, PL_14, PL_15, PL_14, PL_15, + PL_11, PL_11, PL_10, PL_13, PL_1c, PL_15, PL_1e, PL_15, + PL_20, PL_20, PL_20, PL_20, PL_20, PL_25, PL_20, PL_25, + PL_20, PL_20, PL_20, PL_20, PL_25, PL_25, PL_25, PL_25, + PL_30, PL_31, PL_32, PL_33, PL_34, PL_35, PL_34, PL_35, + PL_31, PL_31, PL_30, PL_33, PL_3c, PL_35, PL_3e, PL_35 +}; + +static void init_pm_lookup(void) +{ + static const UBYTE pm_lookup_template[10][16] = { + /* PL_20 */ + { L_BAK, L_PM0, L_PM1, L_PM01, L_PM2, L_PM0, L_PM1, L_PM01, + L_PM3, L_PM0, L_PM1, L_PM01, L_PM23, L_PM0, L_PM1, L_PM01 }, + /* PL_25 */ + { L_BAK, L_PM0, L_PM1, L_PM01, L_PM2, L_PM023, L_PM123, L_PM0123, + L_PM3, L_PM023, L_PM123, L_PM0123, L_PM23, L_PM023, L_PM123, L_PM0123 }, + /* PL_30 */ + { L_PF3, L_PM0, L_PM1, L_PM01, L_PM25, L_PM0, L_PM1, L_PM01, + L_PM35, L_PM0, L_PM1, L_PM01, L_PM235, L_PM0, L_PM1, L_PM01 }, + /* PL_31 */ + { L_PF3, L_PM0, L_PM1, L_PM01, L_PM2, L_PM0, L_PM1, L_PM01, + L_PM3, L_PM0, L_PM1, L_PM01, L_PM23, L_PM0, L_PM1, L_PM01 }, + /* PL_32 */ + { L_PF3, L_PM0, L_PM1, L_PM01, L_PF3, L_PM0, L_PM1, L_PM01, + L_PF3, L_PM0, L_PM1, L_PM01, L_PF3, L_PM0, L_PM1, L_PM01 }, + /* PL_33 */ + { L_PF3, L_PM0, L_PM1, L_PM01, L_BLACK, L_PM0, L_PM1, L_PM01, + L_BLACK, L_PM0, L_PM1, L_PM01, L_BLACK, L_PM0, L_PM1, L_PM01 }, + /* PL_34 */ + { L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, + L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, L_PF3 }, + /* PL_35 */ + { L_PF3, L_PF3, L_PF3, L_PF3, L_BLACK, L_BLACK, L_BLACK, L_BLACK, + L_BLACK, L_BLACK, L_BLACK, L_BLACK, L_BLACK, L_BLACK, L_BLACK, L_BLACK }, + /* PL_3c */ + { L_PF3, L_PF3, L_PF3, L_PF3, L_PM25, L_PM25, L_PM25, L_PM25, + L_PM25, L_PM25, L_PM25, L_PM25, L_PM25, L_PM25, L_PM25, L_PM25 }, + /* PL_3e */ + { L_PF3, L_PF3, L_PF3, L_PF3, L_PM25, L_BLACK, L_BLACK, L_BLACK, + L_PM25, L_BLACK, L_BLACK, L_BLACK, L_PM25, L_BLACK, L_BLACK, L_BLACK } + }; + + static const UBYTE multi_to_normal[] = { + L_BAK, + L_PM0, L_PM1, L_PM0, + L_PM2, L_PM3, L_PM2, + L_PM023, L_PM123, L_PM023, + L_PM25, L_PM35, L_PM25 + }; + + int i; + int j; + UBYTE temp; + + for (i = 0; i <= 1; i++) + for (j = 0; j <= 255; j++) { + pm_lookup_table[i + 10][j] = temp = pm_lookup_template[i][(j & 0xf) | (j >> 4)]; + pm_lookup_table[i][j] = temp <= L_PM235 ? multi_to_normal[temp >> 1] : temp; + } + for (; i <= 9; i++) { + for (j = 0; j <= 15; j++) { + pm_lookup_table[i + 10][j] = temp = pm_lookup_template[i < 7 ? 0 : 1][j]; + pm_lookup_table[i][j] = temp <= L_PM235 ? multi_to_normal[temp >> 1] : temp; + } + for (; j <= 255; j++) { + pm_lookup_table[i + 10][j] = temp = pm_lookup_template[i][j & 0xf]; + pm_lookup_table[i][j] = temp <= L_PM235 ? multi_to_normal[temp >> 1] : temp; + } + } +} + +static const UBYTE hold_missiles_tab[16] = { + 0x00,0x03,0x0c,0x0f,0x30,0x33,0x3c,0x3f, + 0xc0,0xc3,0xcc,0xcf,0xf0,0xf3,0xfc,0xff}; + +static void pmg_dma(void) +{ + /* VDELAY bit set == GTIA ignores PMG DMA in even lines */ + if (ANTIC_player_dma_enabled) { + if (ANTIC_player_gra_enabled) { + const UBYTE *base; + if (singleline) { + if (ANTIC_xe_ptr != NULL && pmbase_s < 0x8000 && pmbase_s >= 0x4000) + base = ANTIC_xe_ptr + pmbase_s - 0x4000 + ANTIC_ypos; + else + base = memory + pmbase_s + ANTIC_ypos; + if (ANTIC_ypos & 1) { + GTIA_GRAFP0 = base[0x400]; + GTIA_GRAFP1 = base[0x500]; + GTIA_GRAFP2 = base[0x600]; + GTIA_GRAFP3 = base[0x700]; + } + else { + if ((GTIA_VDELAY & 0x10) == 0) + GTIA_GRAFP0 = base[0x400]; + if ((GTIA_VDELAY & 0x20) == 0) + GTIA_GRAFP1 = base[0x500]; + if ((GTIA_VDELAY & 0x40) == 0) + GTIA_GRAFP2 = base[0x600]; + if ((GTIA_VDELAY & 0x80) == 0) + GTIA_GRAFP3 = base[0x700]; + } + } + else { + if (ANTIC_xe_ptr != NULL && pmbase_d < 0x8000 && pmbase_d >= 0x4000) + base = ANTIC_xe_ptr + (pmbase_d - 0x4000) + (ANTIC_ypos >> 1); + else + base = memory + pmbase_d + (ANTIC_ypos >> 1); + if (ANTIC_ypos & 1) { + GTIA_GRAFP0 = base[0x200]; + GTIA_GRAFP1 = base[0x280]; + GTIA_GRAFP2 = base[0x300]; + GTIA_GRAFP3 = base[0x380]; + } + else { + if ((GTIA_VDELAY & 0x10) == 0) + GTIA_GRAFP0 = base[0x200]; + if ((GTIA_VDELAY & 0x20) == 0) + GTIA_GRAFP1 = base[0x280]; + if ((GTIA_VDELAY & 0x40) == 0) + GTIA_GRAFP2 = base[0x300]; + if ((GTIA_VDELAY & 0x80) == 0) + GTIA_GRAFP3 = base[0x380]; + } + } + } + ANTIC_xpos += 4; + } + if (ANTIC_missile_dma_enabled) { + if (ANTIC_missile_gra_enabled) { + UBYTE data; + if (ANTIC_xe_ptr != NULL && pmbase_s < 0x8000 && pmbase_s >= 0x4000) + data = ANTIC_xe_ptr[singleline ? pmbase_s + ANTIC_ypos + 0x300 - 0x4000 : pmbase_d + (ANTIC_ypos >> 1) + 0x180 - 0x4000]; + else + data = MEMORY_dGetByte(singleline ? pmbase_s + ANTIC_ypos + 0x300 : pmbase_d + (ANTIC_ypos >> 1) + 0x180); + /* in odd lines load all missiles, in even only those, for which VDELAY bit is zero */ + GTIA_GRAFM = ANTIC_ypos & 1 ? data : ((GTIA_GRAFM ^ data) & hold_missiles_tab[GTIA_VDELAY & 0xf]) ^ data; + } + ANTIC_xpos++; + } +} + +/* Artifacting ------------------------------------------------------------ */ + +int ANTIC_artif_mode; + +static UWORD art_lookup_new[64]; +static UWORD art_colour1_new; +static UWORD art_colour2_new; + +static ULONG art_lookup_normal[256]; +static ULONG art_lookup_reverse[256]; +static ULONG art_bkmask_normal[256]; +static ULONG art_lummask_normal[256]; +static ULONG art_bkmask_reverse[256]; +static ULONG art_lummask_reverse[256]; + +static ULONG *art_curtable = art_lookup_normal; +static ULONG *art_curbkmask = art_bkmask_normal; +static ULONG *art_curlummask = art_lummask_normal; + +static UWORD art_normal_colpf1_save; +static UWORD art_normal_colpf2_save; +static UWORD art_reverse_colpf1_save; +static UWORD art_reverse_colpf2_save; + +static void setup_art_colours(void) +{ + static UWORD *art_colpf1_save = &art_normal_colpf1_save; + static UWORD *art_colpf2_save = &art_normal_colpf2_save; + UWORD curlum = ANTIC_cl[C_PF1] & 0x0f0f; + + if (curlum != *art_colpf1_save || ANTIC_cl[C_PF2] != *art_colpf2_save) { + if (curlum < (ANTIC_cl[C_PF2] & 0x0f0f)) { + art_colpf1_save = &art_reverse_colpf1_save; + art_colpf2_save = &art_reverse_colpf2_save; + art_curtable = art_lookup_reverse; + art_curlummask = art_lummask_reverse; + art_curbkmask = art_bkmask_reverse; + } + else { + art_colpf1_save = &art_normal_colpf1_save; + art_colpf2_save = &art_normal_colpf2_save; + art_curtable = art_lookup_normal; + art_curlummask = art_lummask_normal; + art_curbkmask = art_bkmask_normal; + } + if (curlum ^ *art_colpf1_save) { + int i; + ULONG new_colour = curlum ^ *art_colpf1_save; + new_colour |= new_colour << 16; + *art_colpf1_save = curlum; + for (i = 0; i <= 255; i++) + art_curtable[i] ^= art_curlummask[i] & new_colour; + } + if (ANTIC_cl[C_PF2] ^ *art_colpf2_save) { + int i; + ULONG new_colour = ANTIC_cl[C_PF2] ^ *art_colpf2_save; + new_colour |= new_colour << 16; + *art_colpf2_save = ANTIC_cl[C_PF2]; + for (i = 0; i <= 255; i++) + art_curtable[i] ^= art_curbkmask[i] & new_colour; + } + + } +} + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + +/* Initialization ---------------------------------------------------------- */ + +int ANTIC_Initialise(void) +{ +#if !defined(BASIC) && !defined(CURSES_BASIC) +#if SKIP + int i, j; + + for (i = j = 1; i < *argc; i++) { + int i_a = (i + 1 < *argc); /* is argument available? */ + int a_m = FALSE; /* error, argument missing! */ + + if (strcmp(argv[i], "-artif") == 0) { + if (i_a) { + ANTIC_artif_mode = Util_sscandec(argv[++i]); + if (ANTIC_artif_mode < 0 || ANTIC_artif_mode > 4) { + Log_print("Invalid artifacting mode, using default."); + ANTIC_artif_mode = 0; + } + } + else a_m = TRUE; + } + else { + if (strcmp(argv[i], "-help") == 0) { + Log_print("\t-artif Set artifacting mode 0-4 (0 = disable)"); + } + argv[j++] = argv[i]; + } + + if (a_m) { + Log_print("Missing argument for '%s'", argv[i]); + return FALSE; + } + } + *argc = j; +#endif + ANTIC_UpdateArtifacting(); + + playfield_lookup[0x00] = L_BAK; + playfield_lookup[0x40] = L_PF0; + playfield_lookup[0x80] = L_PF1; + playfield_lookup[0xc0] = L_PF2; + playfield_lookup[0x100] = L_PF3; + blank_lookup[0x80] = blank_lookup[0xa0] = blank_lookup[0xc0] = blank_lookup[0xe0] = 0x00; + hires_mask(0x00) = 0xffff; +#ifdef USE_COLOUR_TRANSLATION_TABLE + hires_mask(0x40) = BYTE0_MASK; + hires_mask(0x80) = BYTE1_MASK; + hires_mask(0xc0) = 0; +#else + hires_mask(0x40) = HIRES_MASK_01; + hires_mask(0x80) = HIRES_MASK_10; + hires_mask(0xc0) = 0xf0f0; + hires_lum(0x00) = hires_lum(0x40) = hires_lum(0x80) = hires_lum(0xc0) = 0; +#endif + init_pm_lookup(); + mode_e_an_lookup[0] = 0; + mode_e_an_lookup[1] = mode_e_an_lookup[4] = mode_e_an_lookup[0x10] = mode_e_an_lookup[0x40] = 0; + mode_e_an_lookup[2] = mode_e_an_lookup[8] = mode_e_an_lookup[0x20] = mode_e_an_lookup[0x80] = 1; + mode_e_an_lookup[3] = mode_e_an_lookup[12] = mode_e_an_lookup[0x30] = mode_e_an_lookup[0xc0] = 2; +#ifdef NEW_CYCLE_EXACT + CYCLE_MAP_Create(); + ANTIC_cpu2antic_ptr = &CYCLE_MAP_cpu2antic[0]; + ANTIC_antic2cpu_ptr = &CYCLE_MAP_antic2cpu[0]; +#endif /* NEW_CYCLE_EXACT */ + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + + return TRUE; +} + +void ANTIC_Reset(void) +{ + ANTIC_NMIEN = 0x00; + ANTIC_NMIST = 0x1f; + ANTIC_PutByte(ANTIC_OFFSET_DMACTL, 0); +} + +#if !defined(BASIC) && !defined(CURSES_BASIC) + +/* Border ------------------------------------------------------------------ */ + +#define DO_BORDER_1 {\ + if (IS_ZERO_ULONG(pm_scanline_ptr)) {\ + ULONG *l_ptr = (ULONG *) ptr;\ + WRITE_VIDEO_LONG(l_ptr++, background); \ + WRITE_VIDEO_LONG(l_ptr++, background); \ + ptr = (UWORD *) l_ptr;\ + pm_scanline_ptr += 4;\ + }\ + else {\ + int k = 4;\ + do + +#define DO_BORDER DO_BORDER_1\ + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[*pm_scanline_ptr++]));\ + while (--k);\ + }\ +} + +#define DO_GTIA10_BORDER DO_BORDER_1\ + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[*pm_scanline_ptr++ | 1]));\ + while (--k);\ + }\ +} + +static void do_border(void) +{ + int kk; + UWORD *ptr = &scrn_ptr[LBORDER_START]; + const UBYTE *pm_scanline_ptr = >IA_pm_scanline[LBORDER_START]; + ULONG background = ANTIC_lookup_gtia9[0]; + /* left border */ + for (kk = left_border_chars; kk; kk--) + DO_BORDER + /* right border */ + ptr = &scrn_ptr[right_border_start]; + pm_scanline_ptr = >IA_pm_scanline[right_border_start]; + while (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]) + DO_BORDER +} + +static void do_border_gtia10(void) +{ + int kk; + UWORD *ptr = &scrn_ptr[LBORDER_START]; + const UBYTE *pm_scanline_ptr = >IA_pm_scanline[LBORDER_START]; + ULONG background = ANTIC_cl[C_PM0] | (ANTIC_cl[C_PM0] << 16); + /* left border */ + for (kk = left_border_chars; kk; kk--) + DO_GTIA10_BORDER + WRITE_VIDEO(ptr, COLOUR(pm_lookup_ptr[*pm_scanline_ptr | 1])); /* one extra pixel, because of the right shift of gtia10*/ + /* right border */ + pm_scanline_ptr = >IA_pm_scanline[right_border_start]; + if (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]) { + ptr = &scrn_ptr[right_border_start + 1]; /*start one pixel further right because of the right shift of gtia10*/ + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[pm_scanline_ptr[1] | 1])); + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[pm_scanline_ptr[2] | 1])); + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[pm_scanline_ptr[3] | 1])); + pm_scanline_ptr += 4; + while (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]) + DO_GTIA10_BORDER + } +} + +static void do_border_gtia11(void) +{ + int kk; + UWORD *ptr = &scrn_ptr[LBORDER_START]; + const UBYTE *pm_scanline_ptr = >IA_pm_scanline[LBORDER_START]; + ULONG background = ANTIC_lookup_gtia11[0]; +#ifdef USE_COLOUR_TRANSLATION_TABLE + ANTIC_cl[C_PF3] = colour_translation_table[GTIA_COLPF3 & 0xf0]; +#else + ANTIC_cl[C_PF3] &= 0xf0f0; +#endif + ANTIC_cl[C_BAK] = (UWORD) background; + /* left border */ + for (kk = left_border_chars; kk; kk--) + DO_BORDER + /* right border */ + ptr = &scrn_ptr[right_border_start]; + pm_scanline_ptr = >IA_pm_scanline[right_border_start]; + while (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]) + DO_BORDER + GTIA_COLOUR_TO_WORD(ANTIC_cl[C_PF3],GTIA_COLPF3) + GTIA_COLOUR_TO_WORD(ANTIC_cl[C_BAK],GTIA_COLBK) +} + +static void draw_antic_0(void) +{ + UWORD *ptr = scrn_ptr + LBORDER_START; + if (GTIA_pm_dirty) { + const UBYTE *pm_scanline_ptr = >IA_pm_scanline[LBORDER_START]; + ULONG background = ANTIC_lookup_gtia9[0]; + do + DO_BORDER + while (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]); + } + else + FILL_VIDEO(ptr, ANTIC_cl[C_BAK], (RBORDER_END - LBORDER_START) * 2); +} + +static void draw_antic_0_gtia10(void) +{ + UWORD *ptr = scrn_ptr + LBORDER_START; + if (GTIA_pm_dirty) { + const UBYTE *pm_scanline_ptr = >IA_pm_scanline[LBORDER_START]; + ULONG background = ANTIC_cl[C_PM0] | (ANTIC_cl[C_PM0] << 16); + do + DO_GTIA10_BORDER + while (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]); + } + else + FILL_VIDEO(ptr, ANTIC_cl[C_PM0], (RBORDER_END - LBORDER_START) * 2); +} + +static void draw_antic_0_gtia11(void) +{ + UWORD *ptr = scrn_ptr + LBORDER_START; + if (GTIA_pm_dirty) { + const UBYTE *pm_scanline_ptr = >IA_pm_scanline[LBORDER_START]; + ULONG background = ANTIC_lookup_gtia11[0]; +#ifdef USE_COLOUR_TRANSLATION_TABLE + ANTIC_cl[C_PF3] = colour_translation_table[GTIA_COLPF3 & 0xf0]; +#else + ANTIC_cl[C_PF3] &= 0xf0f0; +#endif + ANTIC_cl[C_BAK] = (UWORD) background; + do + DO_BORDER + while (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]); + GTIA_COLOUR_TO_WORD(ANTIC_cl[C_PF3],GTIA_COLPF3) + GTIA_COLOUR_TO_WORD(ANTIC_cl[C_BAK],GTIA_COLBK) + } + else + FILL_VIDEO(ptr, ANTIC_lookup_gtia11[0], (RBORDER_END - LBORDER_START) * 2); +} + +/* ANTIC modes ------------------------------------------------------------- */ + +static const UBYTE gtia_10_lookup[] = +{L_BAK, L_BAK, L_BAK, L_BAK, L_PF0, L_PF1, L_PF2, L_PF3, + L_BAK, L_BAK, L_BAK, L_BAK, L_PF0, L_PF1, L_PF2, L_PF3}; +static const UBYTE gtia_10_pm[] = +{1, 2, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + +static void draw_an_gtia9(const ULONG *t_pm_scanline_ptr) +{ + int i = ((const UBYTE *) t_pm_scanline_ptr - GTIA_pm_scanline) & ~1; + while (i < right_border_start) { + UWORD *ptr = scrn_ptr + i; + int pixel = (an_scanline[i] << 2) + an_scanline[i + 1]; + UBYTE pm_reg; + WRITE_VIDEO_LONG((ULONG *) ptr, ANTIC_lookup_gtia9[pixel]); + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + pm_reg = pm_lookup_ptr[pm_reg]; + if (pm_reg == L_PF3) { +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[pixel | GTIA_COLPF3]); +#else + WRITE_VIDEO(ptr, pixel | (pixel << 8) | ANTIC_cl[C_PF3]); +#endif + } + else { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + i++; + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + pm_reg = pm_lookup_ptr[pm_reg]; + if (pm_reg == L_PF3) { +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr + 1, colour_translation_table[pixel | GTIA_COLPF3]); +#else + WRITE_VIDEO(ptr + 1, pixel | (pixel << 8) | ANTIC_cl[C_PF3]); +#endif + } + else { + WRITE_VIDEO(ptr + 1, COLOUR(pm_reg)); + } + } + i++; + } + do_border(); +} + +static void draw_an_gtia10(const ULONG *t_pm_scanline_ptr) +{ + int i = ((const UBYTE *) t_pm_scanline_ptr - GTIA_pm_scanline) | 1; + UWORD lookup_gtia10[16]; + lookup_gtia10[0] = ANTIC_cl[C_PM0]; + lookup_gtia10[1] = ANTIC_cl[C_PM1]; + lookup_gtia10[2] = ANTIC_cl[C_PM2]; + lookup_gtia10[3] = ANTIC_cl[C_PM3]; + lookup_gtia10[12] = lookup_gtia10[4] = ANTIC_cl[C_PF0]; + lookup_gtia10[13] = lookup_gtia10[5] = ANTIC_cl[C_PF1]; + lookup_gtia10[14] = lookup_gtia10[6] = ANTIC_cl[C_PF2]; + lookup_gtia10[15] = lookup_gtia10[7] = ANTIC_cl[C_PF3]; + lookup_gtia10[8] = lookup_gtia10[9] = lookup_gtia10[10] = lookup_gtia10[11] = ANTIC_cl[C_BAK]; + while (i < right_border_start) { + UWORD *ptr = scrn_ptr + i; + int pixel = (an_scanline[i - 1] << 2) + an_scanline[i]; + UBYTE pm_reg; + int colreg; + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + colreg = gtia_10_lookup[pixel]; + PF_COLLS(colreg) |= pm_reg; + pm_reg |= gtia_10_pm[pixel]; + WRITE_VIDEO(ptr, COLOUR(pm_lookup_ptr[pm_reg] | colreg)); + } + else { + WRITE_VIDEO(ptr, lookup_gtia10[pixel]); + } + i++; + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + colreg = gtia_10_lookup[pixel]; + PF_COLLS(colreg) |= pm_reg; + pm_reg |= gtia_10_pm[pixel]; + WRITE_VIDEO(ptr + 1, COLOUR(pm_lookup_ptr[pm_reg] | colreg)); + } + else { + WRITE_VIDEO(ptr + 1, lookup_gtia10[pixel]); + } + i++; + } + do_border_gtia10(); +} + +static void draw_an_gtia11(const ULONG *t_pm_scanline_ptr) +{ + int i = ((const UBYTE *) t_pm_scanline_ptr - GTIA_pm_scanline) & ~1; + while (i < right_border_start) { + UWORD *ptr = scrn_ptr + i; + int pixel = (an_scanline[i] << 2) + an_scanline[i + 1]; + UBYTE pm_reg; + WRITE_VIDEO_LONG((ULONG *) ptr, ANTIC_lookup_gtia11[pixel]); + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + pm_reg = pm_lookup_ptr[pm_reg]; + if (pm_reg == L_PF3) { +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[pixel ? pixel | GTIA_COLPF3 : GTIA_COLPF3 & 0xf0]); +#else + WRITE_VIDEO(ptr, pixel ? (pixel << 4) | (pixel << 12) | ANTIC_cl[C_PF3] : ANTIC_cl[C_PF3] & 0xf0f0); +#endif + } + else { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + i++; + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + pm_reg = pm_lookup_ptr[pm_reg]; + if (pm_reg == L_PF3) { +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr + 1, colour_translation_table[pixel ? pixel | GTIA_COLPF3 : GTIA_COLPF3 & 0xf0]); +#else + WRITE_VIDEO(ptr + 1, pixel ? (pixel << 4) | (pixel << 12) | ANTIC_cl[C_PF3] : ANTIC_cl[C_PF3] & 0xf0f0); +#endif + } + else { + WRITE_VIDEO(ptr + 1, COLOUR(pm_reg)); + } + } + i++; + } + do_border_gtia11(); +} + +static void draw_an_gtia_bug(const ULONG *t_pm_scanline_ptr) +{ + static const UBYTE gtia_bug_colreg[] = {L_PF0, L_PF1, L_PF2, L_PF3}; + UWORD lookup_gtia_bug[16]; + int i; + lookup_gtia_bug[0] = ANTIC_cl[C_PF0]; + lookup_gtia_bug[1] = ANTIC_cl[C_PF1]; + lookup_gtia_bug[2] = ANTIC_cl[C_PF2]; + lookup_gtia_bug[3] = ANTIC_cl[C_PF3]; + i = ((const UBYTE *) t_pm_scanline_ptr - GTIA_pm_scanline); + while (i < right_border_start) { + UWORD *ptr = scrn_ptr + i; + int pixel = an_scanline[i]; + UBYTE pm_reg; + int colreg; + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + colreg = gtia_bug_colreg[pixel]; + PF_COLLS(colreg) |= pm_reg; + WRITE_VIDEO(ptr, COLOUR(pm_lookup_ptr[pm_reg] | colreg)); + } + else { + WRITE_VIDEO(ptr, lookup_gtia_bug[pixel]); + } + i++; + } + do_border(); +} + +#define DEFINE_DRAW_AN(anticmode) \ + static void draw_antic_ ## anticmode ## _gtia9 (int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr)\ + {\ + prepare_an_antic_ ## anticmode (nchars, antic_memptr, t_pm_scanline_ptr);\ + draw_an_gtia9(t_pm_scanline_ptr);\ + }\ + static void draw_antic_ ## anticmode ## _gtia10 (int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr)\ + {\ + prepare_an_antic_ ## anticmode (nchars, antic_memptr, t_pm_scanline_ptr);\ + draw_an_gtia10(t_pm_scanline_ptr);\ + }\ + static void draw_antic_ ## anticmode ## _gtia11 (int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr)\ + {\ + prepare_an_antic_ ## anticmode (nchars, antic_memptr, t_pm_scanline_ptr);\ + draw_an_gtia11(t_pm_scanline_ptr);\ + } + +#define CHAR_LOOP_BEGIN do { +#define CHAR_LOOP_END } while (--nchars); + +#define DO_PMG_LORES PF_COLLS(colreg) |= pm_pixel = *c_pm_scanline_ptr++;\ + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[pm_pixel] | colreg)); + +#ifdef ALTERNATE_LOOP_COUNTERS /* speeds-up pmg in hires a bit or not? try it :) */ +#define FOUR_LOOP_BEGIN(data) data |= 0x800000; do { /* data becomes negative after four data <<= 2 */ +#define FOUR_LOOP_END(data) } while (data >= 0); +#else +#define FOUR_LOOP_BEGIN(data) int k = 4; do { +#define FOUR_LOOP_END(data) } while (--k); +#endif + +#ifdef USE_COLOUR_TRANSLATION_TABLE + +#define INIT_HIRES hires_norm(0x00) = ANTIC_cl[C_PF2];\ + hires_norm(0x40) = hires_norm(0x10) = hires_norm(0x04) = (ANTIC_cl[C_PF2] & BYTE0_MASK) | (ANTIC_cl[C_HI2] & BYTE1_MASK);\ + hires_norm(0x80) = hires_norm(0x20) = hires_norm(0x08) = (ANTIC_cl[C_HI2] & BYTE0_MASK) | (ANTIC_cl[C_PF2] & BYTE1_MASK);\ + hires_norm(0xc0) = hires_norm(0x30) = hires_norm(0x0c) = ANTIC_cl[C_HI2]; + +#define DO_PMG_HIRES(data) {\ + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr;\ + int pm_pixel;\ + int mask;\ + FOUR_LOOP_BEGIN(data)\ + pm_pixel = *c_pm_scanline_ptr++;\ + if (data & 0xc0)\ + PF2PM |= pm_pixel;\ + mask = hires_mask(data & 0xc0);\ + pm_pixel = pm_lookup_ptr[pm_pixel] | L_PF2;\ + WRITE_VIDEO(ptr++, (COLOUR(pm_pixel) & mask) | (COLOUR(pm_pixel + (L_HI2 - L_PF2)) & ~mask));\ + data <<= 2;\ + FOUR_LOOP_END(data)\ +} + +#else /* USE_COLOUR_TRANSLATION_TABLE */ + +#define INIT_HIRES hires_norm(0x00) = ANTIC_cl[C_PF2];\ + hires_norm(0x40) = hires_norm(0x10) = hires_norm(0x04) = (ANTIC_cl[C_PF2] & HIRES_MASK_01) | hires_lum(0x40);\ + hires_norm(0x80) = hires_norm(0x20) = hires_norm(0x08) = (ANTIC_cl[C_PF2] & HIRES_MASK_10) | hires_lum(0x80);\ + hires_norm(0xc0) = hires_norm(0x30) = hires_norm(0x0c) = (ANTIC_cl[C_PF2] & 0xf0f0) | hires_lum(0xc0); + +#define INIT_ARTIF_NEW art_lookup_new[0] = art_lookup_new[1] = art_lookup_new[2] = art_lookup_new[3] = \ + art_lookup_new[16] = art_lookup_new[17] = art_lookup_new[18] = art_lookup_new[19] = \ + art_lookup_new[32] = art_lookup_new[33] = art_lookup_new[34] = art_lookup_new[35] = \ + art_lookup_new[48] = art_lookup_new[49] = art_lookup_new[50] = art_lookup_new[51] = ANTIC_cl[C_PF2];\ + art_lookup_new[7] = art_lookup_new[23] = art_lookup_new[39] = art_lookup_new[55] = (ANTIC_cl[C_PF2] & HIRES_MASK_01) | hires_lum(0x40);\ + art_lookup_new[56] = art_lookup_new[57] = art_lookup_new[58] = art_lookup_new[59] = (ANTIC_cl[C_PF2] & HIRES_MASK_10) | hires_lum(0x80);\ + art_lookup_new[12] = art_lookup_new[13] = art_lookup_new[14] = art_lookup_new[15] = \ + art_lookup_new[28] = art_lookup_new[29] = art_lookup_new[30] = art_lookup_new[31] = \ + art_lookup_new[44] = art_lookup_new[45] = art_lookup_new[46] = art_lookup_new[47] = \ + art_lookup_new[60] = art_lookup_new[61] = art_lookup_new[62] = art_lookup_new[63] = (ANTIC_cl[C_PF2] & 0xf0f0) | hires_lum(0xc0);\ + if ((ANTIC_cl[C_PF2] & 0x0F00) != (ANTIC_cl[C_PF1] & 0x0F00)) { \ + art_lookup_new[4] = art_lookup_new[5] = art_lookup_new[36] = art_lookup_new[37] = \ + art_lookup_new[52] = art_lookup_new[53 ]= ((art_colour1_new & BYTE1_MASK & ~(HIRES_LUM_01))) | hires_lum(0x40) | (ANTIC_cl[C_PF2] & BYTE0_MASK);\ + art_lookup_new[20] = art_lookup_new[21] = (art_colour1_new & 0xf0f0) | hires_lum(0xc0);\ + art_lookup_new[8] = art_lookup_new[9] = art_lookup_new[11] = art_lookup_new[40] = \ + art_lookup_new[43] = ((art_colour2_new & BYTE0_MASK & ~(HIRES_LUM_10))) | hires_lum(0x80) | (ANTIC_cl[C_PF2] & BYTE1_MASK);\ + art_lookup_new[10] = art_lookup_new[41] = art_lookup_new[42] = (art_colour2_new & 0xf0f0) | hires_lum(0xc0);\ + }\ + else {\ + art_lookup_new[4] = art_lookup_new[5] = art_lookup_new[36] = art_lookup_new[37] = \ + art_lookup_new[52] = art_lookup_new[53 ]= art_lookup_new[20] = art_lookup_new[21] = \ + art_lookup_new[8] = art_lookup_new[9] = art_lookup_new[11] = art_lookup_new[40] = \ + art_lookup_new[43] = art_lookup_new[10] = art_lookup_new[41] = art_lookup_new[42] = ANTIC_cl[C_PF2];\ + }\ + art_lookup_new[6] = art_lookup_new[22] = art_lookup_new[38] = art_lookup_new[54] = (ANTIC_cl[C_PF2] & HIRES_MASK_01) | hires_lum(0x40);\ + art_lookup_new[24] = art_lookup_new[25] = art_lookup_new[26] = art_lookup_new[27] = (ANTIC_cl[C_PF2] & HIRES_MASK_10) | hires_lum(0x80); + +#define DO_PMG_HIRES(data) {\ + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr;\ + int pm_pixel;\ + FOUR_LOOP_BEGIN(data)\ + pm_pixel = *c_pm_scanline_ptr++;\ + if (data & 0xc0)\ + PF2PM |= pm_pixel;\ + WRITE_VIDEO(ptr++, (COLOUR(pm_lookup_ptr[pm_pixel] | L_PF2) & hires_mask(data & 0xc0)) | hires_lum(data & 0xc0));\ + data <<= 2;\ + FOUR_LOOP_END(data)\ +} + +#define DO_PMG_HIRES_NEW(data, tally) {\ + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr;\ + int pm_pixel;\ + FOUR_LOOP_BEGIN(data)\ + pm_pixel = *c_pm_scanline_ptr++;\ + if (pm_pixel) \ + WRITE_VIDEO(ptr++, (COLOUR(pm_lookup_ptr[pm_pixel] | L_PF2)));\ + else\ + WRITE_VIDEO(ptr++, art_lookup_new[(tally & 0xfc0000) >> 18]); \ + data <<= 2;\ + tally <<= 6;\ + FOUR_LOOP_END(data)\ +} + +#endif /* USE_COLOUR_TRANSLATION_TABLE */ + +#ifdef NEW_CYCLE_EXACT +#define ADD_FONT_CYCLES +#else +#define ADD_FONT_CYCLES ANTIC_xpos += font_cycles[md] +#endif + +#ifdef PAGED_MEM + +#define INIT_ANTIC_2 int t_chbase = (dctr ^ chbase_20) & 0xfc07;\ + ADD_FONT_CYCLES;\ + blank_lookup[0x60] = (anticmode == 2 || dctr & 0xe) ? 0xff : 0;\ + blank_lookup[0x00] = blank_lookup[0x20] = blank_lookup[0x40] = (dctr & 0xe) == 8 ? 0 : 0xff; + +#define GET_CHDATA_ANTIC_2 chdata = (screendata & invert_mask) ? 0xff : 0;\ + if (blank_lookup[screendata & blank_mask])\ + chdata ^= MEMORY_dGetByte(t_chbase + ((UWORD) (screendata & 0x7f) << 3)); + +#else /* PAGED_MEM */ + +#define INIT_ANTIC_2 const UBYTE *chptr;\ + if (ANTIC_xe_ptr != NULL && chbase_20 < 0x8000 && chbase_20 >= 0x4000)\ + chptr = ANTIC_xe_ptr + ((dctr ^ chbase_20) & 0x3c07);\ + else\ + chptr = MEMORY_mem + ((dctr ^ chbase_20) & 0xfc07);\ + ADD_FONT_CYCLES;\ + blank_lookup[0x60] = (anticmode == 2 || dctr & 0xe) ? 0xff : 0;\ + blank_lookup[0x00] = blank_lookup[0x20] = blank_lookup[0x40] = (dctr & 0xe) == 8 ? 0 : 0xff; + +#define GET_CHDATA_ANTIC_2 chdata = (screendata & invert_mask) ? 0xff : 0;\ + if (blank_lookup[screendata & blank_mask])\ + chdata ^= chptr[(screendata & 0x7f) << 3]; + +#endif /* PAGED_MEM */ + +static void draw_antic_2(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_BACKGROUND_6 + INIT_ANTIC_2 + INIT_HIRES + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int chdata; + + GET_CHDATA_ANTIC_2 + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + if (chdata) { + WRITE_VIDEO(ptr++, hires_norm(chdata & 0xc0)); + WRITE_VIDEO(ptr++, hires_norm(chdata & 0x30)); + WRITE_VIDEO(ptr++, hires_norm(chdata & 0x0c)); + WRITE_VIDEO(ptr++, hires_norm((chdata & 0x03) << 2)); + } + else + DRAW_BACKGROUND(C_PF2) + } + else + DO_PMG_HIRES(chdata) + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +#ifdef NEW_CYCLE_EXACT +static void draw_antic_2_dmactl_bug(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_BACKGROUND_6 + INIT_ANTIC_2 + (void)chptr; /* suppress GCC -Wunused-but-set-variable warning */ + INIT_HIRES + + CHAR_LOOP_BEGIN + /* UBYTE screendata = *antic_memptr++; */ + +/* In this glitched mode, the output depends on the MSB of the last char */ +/* drawn in the previous line, and invert_mask. It seems to reveal that */ +/* ANTIC has a latch that is set by the MSB of the char that controls an */ +/* invert gate. */ +/* When this gate was set on the last line and the next line is glitched */ +/* it remains set and the whole line appears inverted */ +/* We'll use this modeline to draw antic f glitched as well, and set */ +/* dmactl_bug_chdata to 0 */ + int chdata = (dmactl_bug_chdata & invert_mask) ? 0xff : 0; + /* GET_CHDATA_ANTIC_2 */ + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + + if (chdata) { + WRITE_VIDEO(ptr++, hires_norm(chdata & 0xc0)); + WRITE_VIDEO(ptr++, hires_norm(chdata & 0x30)); + WRITE_VIDEO(ptr++, hires_norm(chdata & 0x0c)); + WRITE_VIDEO(ptr++, hires_norm((chdata & 0x03) << 2)); + } + else + DRAW_BACKGROUND(C_PF2) + } + else + DO_PMG_HIRES(chdata) + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} +#endif + +static void draw_antic_2_artif(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + ULONG screendata_tally; + INIT_ANTIC_2 + { + UBYTE screendata = *antic_memptr++; + UBYTE chdata; + GET_CHDATA_ANTIC_2 + screendata_tally = chdata; + } + setup_art_colours(); + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + ULONG chdata; + + GET_CHDATA_ANTIC_2 + screendata_tally <<= 8; + screendata_tally |= chdata; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + DRAW_ARTIF + else { + chdata = screendata_tally >> 8; + DO_PMG_HIRES(chdata) + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +#ifndef USE_COLOUR_TRANSLATION_TABLE +static void draw_antic_2_artif_new(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + ULONG screendata_tally; + ULONG pmtally; + UBYTE screendata = *antic_memptr++; + UBYTE chdata; + INIT_ANTIC_2 + INIT_ARTIF_NEW + GET_CHDATA_ANTIC_2 + screendata_tally = chdata; + setup_art_colours(); + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + ULONG chdata; + + GET_CHDATA_ANTIC_2 + screendata_tally <<= 8; + screendata_tally |= chdata; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + DRAW_ARTIF_NEW + else { + chdata = screendata_tally >> 8; + pmtally = ((screendata_tally & 0x03f000) << 6) | + ((screendata_tally & 0x00fc00) << 2) | + ((screendata_tally & 0x003f00) >> 2) | + ((screendata_tally & 0x000fc0) >> 6); + DO_PMG_HIRES_NEW(chdata,pmtally) + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} +#endif + +static void prepare_an_antic_2(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); +#ifdef PAGED_MEM + int t_chbase = (dctr ^ chbase_20) & 0xfc07; +#else + const UBYTE *chptr; + if (ANTIC_xe_ptr != NULL && chbase_20 < 0x8000 && chbase_20 >= 0x4000) + chptr = ANTIC_xe_ptr + ((dctr ^ chbase_20) & 0x3c07); + else + chptr = MEMORY_mem + ((dctr ^ chbase_20) & 0xfc07); +#endif + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int chdata; + GET_CHDATA_ANTIC_2 + *an_ptr++ = chdata >> 6; + *an_ptr++ = (chdata >> 4) & 3; + *an_ptr++ = (chdata >> 2) & 3; + *an_ptr++ = chdata & 3; + CHAR_LOOP_END +} + +static void draw_antic_2_gtia9(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_ANTIC_2 + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_2(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia9(t_pm_scanline_ptr); + return; + } + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int chdata; + + GET_CHDATA_ANTIC_2 + WRITE_VIDEO_LONG((ULONG *) ptr, ANTIC_lookup_gtia9[chdata >> 4]); + WRITE_VIDEO_LONG((ULONG *) ptr + 1, ANTIC_lookup_gtia9[chdata & 0xf]); + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + ptr += 4; + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int k = 4; + UBYTE pm_reg; + do { + pm_reg = pm_lookup_ptr[*c_pm_scanline_ptr++]; + if (pm_reg) { + if (pm_reg == L_PF3) { + UBYTE tmp = k > 2 ? chdata >> 4 : chdata & 0xf; +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[tmp | GTIA_COLPF3]); +#else + WRITE_VIDEO(ptr, tmp | ((UWORD)tmp << 8) | ANTIC_cl[C_PF3]); +#endif + } + else + { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + ptr++; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +static void draw_antic_2_gtia10(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ +#ifdef WORDS_UNALIGNED_OK + ULONG lookup_gtia10[16]; +#else + UWORD lookup_gtia10[16]; +#endif + INIT_ANTIC_2 + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_2(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia10(t_pm_scanline_ptr); + return; + } + +#ifdef WORDS_UNALIGNED_OK + lookup_gtia10[0] = ANTIC_cl[C_PM0] | (ANTIC_cl[C_PM0] << 16); + lookup_gtia10[1] = ANTIC_cl[C_PM1] | (ANTIC_cl[C_PM1] << 16); + lookup_gtia10[2] = ANTIC_cl[C_PM2] | (ANTIC_cl[C_PM2] << 16); + lookup_gtia10[3] = ANTIC_cl[C_PM3] | (ANTIC_cl[C_PM3] << 16); + lookup_gtia10[12] = lookup_gtia10[4] = ANTIC_cl[C_PF0] | (ANTIC_cl[C_PF0] << 16); + lookup_gtia10[13] = lookup_gtia10[5] = ANTIC_cl[C_PF1] | (ANTIC_cl[C_PF1] << 16); + lookup_gtia10[14] = lookup_gtia10[6] = ANTIC_cl[C_PF2] | (ANTIC_cl[C_PF2] << 16); + lookup_gtia10[15] = lookup_gtia10[7] = ANTIC_cl[C_PF3] | (ANTIC_cl[C_PF3] << 16); + lookup_gtia10[8] = lookup_gtia10[9] = lookup_gtia10[10] = lookup_gtia10[11] = ANTIC_lookup_gtia9[0]; +#else + lookup_gtia10[0] = ANTIC_cl[C_PM0]; + lookup_gtia10[1] = ANTIC_cl[C_PM1]; + lookup_gtia10[2] = ANTIC_cl[C_PM2]; + lookup_gtia10[3] = ANTIC_cl[C_PM3]; + lookup_gtia10[12] = lookup_gtia10[4] = ANTIC_cl[C_PF0]; + lookup_gtia10[13] = lookup_gtia10[5] = ANTIC_cl[C_PF1]; + lookup_gtia10[14] = lookup_gtia10[6] = ANTIC_cl[C_PF2]; + lookup_gtia10[15] = lookup_gtia10[7] = ANTIC_cl[C_PF3]; + lookup_gtia10[8] = lookup_gtia10[9] = lookup_gtia10[10] = lookup_gtia10[11] = ANTIC_cl[C_BAK]; +#endif + ptr++; + t_pm_scanline_ptr = (const ULONG *) (((const UBYTE *) t_pm_scanline_ptr) + 1); + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int chdata; + + GET_CHDATA_ANTIC_2 + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + DO_GTIA_BYTE(ptr, lookup_gtia10, chdata) + ptr += 4; + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + UBYTE t_screendata = chdata >> 4; + do { + colreg = gtia_10_lookup[t_screendata]; + PF_COLLS(colreg) |= pm_pixel = *c_pm_scanline_ptr++; + pm_pixel |= gtia_10_pm[t_screendata]; + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[pm_pixel] | colreg)); + if (k == 3) + t_screendata = chdata & 0x0f; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border_gtia10(); +} + +static void draw_antic_2_gtia11(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_ANTIC_2 + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_2(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia11(t_pm_scanline_ptr); + return; + } + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int chdata; + + GET_CHDATA_ANTIC_2 + WRITE_VIDEO_LONG((ULONG *) ptr, ANTIC_lookup_gtia11[chdata >> 4]); + WRITE_VIDEO_LONG((ULONG *) ptr + 1, ANTIC_lookup_gtia11[chdata & 0xf]); + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + ptr += 4; + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int k = 4; + UBYTE pm_reg; + do { + pm_reg = pm_lookup_ptr[*c_pm_scanline_ptr++]; + if (pm_reg) { + if (pm_reg == L_PF3) { + UBYTE tmp = k > 2 ? chdata & 0xf0 : chdata << 4; +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[tmp ? tmp | GTIA_COLPF3 : GTIA_COLPF3 & 0xf0]); +#else + WRITE_VIDEO(ptr, tmp ? tmp | ((UWORD)tmp << 8) | ANTIC_cl[C_PF3] : ANTIC_cl[C_PF3] & 0xf0f0); +#endif + } + else + { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + ptr++; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border_gtia11(); +} + +static void draw_antic_2_gtia_bug(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + prepare_an_antic_2(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia_bug(t_pm_scanline_ptr); + return; +} + +static void draw_antic_4(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_BACKGROUND_8 +#ifdef PAGED_MEM + UWORD t_chbase = ((anticmode == 4 ? dctr : dctr >> 1) ^ chbase_20) & 0xfc07; +#else + const UBYTE *chptr; + if (ANTIC_xe_ptr != NULL && chbase_20 < 0x8000 && chbase_20 >= 0x4000) + chptr = ANTIC_xe_ptr + (((anticmode == 4 ? dctr : dctr >> 1) ^ chbase_20) & 0x3c07); + else + chptr = MEMORY_mem + (((anticmode == 4 ? dctr : dctr >> 1) ^ chbase_20) & 0xfc07); +#endif + + ADD_FONT_CYCLES; + lookup2[0x0f] = lookup2[0x00] = ANTIC_cl[C_BAK]; + lookup2[0x4f] = lookup2[0x1f] = lookup2[0x13] = + lookup2[0x40] = lookup2[0x10] = lookup2[0x04] = lookup2[0x01] = ANTIC_cl[C_PF0]; + lookup2[0x8f] = lookup2[0x2f] = lookup2[0x17] = lookup2[0x11] = + lookup2[0x80] = lookup2[0x20] = lookup2[0x08] = lookup2[0x02] = ANTIC_cl[C_PF1]; + lookup2[0xc0] = lookup2[0x30] = lookup2[0x0c] = lookup2[0x03] = ANTIC_cl[C_PF2]; + lookup2[0xcf] = lookup2[0x3f] = lookup2[0x1b] = lookup2[0x12] = ANTIC_cl[C_PF3]; + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + const UWORD *lookup; + UBYTE chdata; + if (screendata & 0x80) + lookup = lookup2 + 0xf; + else + lookup = lookup2; +#ifdef PAGED_MEM + chdata = MEMORY_dGetByte(t_chbase + ((UWORD) (screendata & 0x7f) << 3)); +#else + chdata = chptr[(screendata & 0x7f) << 3]; +#endif + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + if (chdata) { + WRITE_VIDEO(ptr++, lookup[chdata & 0xc0]); + WRITE_VIDEO(ptr++, lookup[chdata & 0x30]); + WRITE_VIDEO(ptr++, lookup[chdata & 0x0c]); + WRITE_VIDEO(ptr++, lookup[chdata & 0x03]); + } + else + DRAW_BACKGROUND(C_BAK) + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + playfield_lookup[0xc0] = screendata & 0x80 ? L_PF3 : L_PF2; + do { + colreg = playfield_lookup[chdata & 0xc0]; + DO_PMG_LORES + chdata <<= 2; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + playfield_lookup[0xc0] = L_PF2; + do_border(); +} + +static void prepare_an_antic_4(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); +#ifdef PAGED_MEM + UWORD t_chbase = ((anticmode == 4 ? dctr : dctr >> 1) ^ chbase_20) & 0xfc07; +#else + const UBYTE *chptr; + if (ANTIC_xe_ptr != NULL && chbase_20 < 0x8000 && chbase_20 >= 0x4000) + chptr = ANTIC_xe_ptr + (((anticmode == 4 ? dctr : dctr >> 1) ^ chbase_20) & 0x3c07); + else + chptr = MEMORY_mem + (((anticmode == 4 ? dctr : dctr >> 1) ^ chbase_20) & 0xfc07); +#endif + + ADD_FONT_CYCLES; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + UBYTE an; + UBYTE chdata; +#ifdef PAGED_MEM + chdata = MEMORY_dGetByte(t_chbase + ((UWORD) (screendata & 0x7f) << 3)); +#else + chdata = chptr[(screendata & 0x7f) << 3]; +#endif + an = mode_e_an_lookup[chdata & 0xc0]; + *an_ptr++ = (an == 2 && screendata & 0x80) ? 3 : an; + an = mode_e_an_lookup[chdata & 0x30]; + *an_ptr++ = (an == 2 && screendata & 0x80) ? 3 : an; + an = mode_e_an_lookup[chdata & 0x0c]; + *an_ptr++ = (an == 2 && screendata & 0x80) ? 3 : an; + an = mode_e_an_lookup[chdata & 0x03]; + *an_ptr++ = (an == 2 && screendata & 0x80) ? 3 : an; + CHAR_LOOP_END +} + +DEFINE_DRAW_AN(4) + +static void draw_antic_6(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ +#ifdef PAGED_MEM + UWORD t_chbase = (anticmode == 6 ? dctr & 7 : dctr >> 1) ^ chbase_20; +#else + const UBYTE *chptr; + if (ANTIC_xe_ptr != NULL && chbase_20 < 0x8000 && chbase_20 >= 0x4000) + chptr = ANTIC_xe_ptr + (((anticmode == 6 ? dctr & 7 : dctr >> 1) ^ chbase_20) - 0x4000); + else + chptr = MEMORY_mem + ((anticmode == 6 ? dctr & 7 : dctr >> 1) ^ chbase_20); +#endif + + ADD_FONT_CYCLES; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + UBYTE chdata; + UWORD colour; + int kk = 2; + colour = COLOUR((playfield_lookup + 0x40)[screendata & 0xc0]); +#ifdef PAGED_MEM + chdata = MEMORY_dGetByte(t_chbase + ((UWORD) (screendata & 0x3f) << 3)); +#else + chdata = chptr[(screendata & 0x3f) << 3]; +#endif + do { + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + if (chdata & 0xf0) { + if (chdata & 0x80) { + WRITE_VIDEO(ptr++, colour); + } + else { + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + } + if (chdata & 0x40) { + WRITE_VIDEO(ptr++, colour); + } + else { + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + } + if (chdata & 0x20) { + WRITE_VIDEO(ptr++, colour); + } + else { + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + } + if (chdata & 0x10) { + WRITE_VIDEO(ptr++, colour); + } + else { + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + } + } + else { + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + } + chdata <<= 4; + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + UBYTE setcol = (playfield_lookup + 0x40)[screendata & 0xc0]; + int colreg; + int k = 4; + do { + colreg = chdata & 0x80 ? setcol : L_BAK; + DO_PMG_LORES + chdata <<= 1; + } while (--k); + + } + t_pm_scanline_ptr++; + } while (--kk); + CHAR_LOOP_END + do_border(); +} + +static void prepare_an_antic_6(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); +#ifdef PAGED_MEM + UWORD t_chbase = (anticmode == 6 ? dctr & 7 : dctr >> 1) ^ chbase_20; +#else + const UBYTE *chptr; + if (ANTIC_xe_ptr != NULL && chbase_20 < 0x8000 && chbase_20 >= 0x4000) + chptr = ANTIC_xe_ptr + (((anticmode == 6 ? dctr & 7 : dctr >> 1) ^ chbase_20) - 0x4000); + else + chptr = MEMORY_mem + ((anticmode == 6 ? dctr & 7 : dctr >> 1) ^ chbase_20); +#endif + + ADD_FONT_CYCLES; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + UBYTE an = screendata >> 6; + UBYTE chdata; +#ifdef PAGED_MEM + chdata = MEMORY_dGetByte(t_chbase + ((UWORD) (screendata & 0x3f) << 3)); +#else + chdata = chptr[(screendata & 0x3f) << 3]; +#endif + *an_ptr++ = chdata & 0x80 ? an : 0; + *an_ptr++ = chdata & 0x40 ? an : 0; + *an_ptr++ = chdata & 0x20 ? an : 0; + *an_ptr++ = chdata & 0x10 ? an : 0; + *an_ptr++ = chdata & 0x08 ? an : 0; + *an_ptr++ = chdata & 0x04 ? an : 0; + *an_ptr++ = chdata & 0x02 ? an : 0; + *an_ptr++ = chdata & 0x01 ? an : 0; + CHAR_LOOP_END +} + +DEFINE_DRAW_AN(6) + +static void draw_antic_8(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + lookup2[0x00] = ANTIC_cl[C_BAK]; + lookup2[0x40] = ANTIC_cl[C_PF0]; + lookup2[0x80] = ANTIC_cl[C_PF1]; + lookup2[0xc0] = ANTIC_cl[C_PF2]; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int kk = 4; + do { + if ((const UBYTE *) t_pm_scanline_ptr >= GTIA_pm_scanline + 4 * (48 - RCHOP)) + break; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + UWORD data = lookup2[screendata & 0xc0]; + WRITE_VIDEO(ptr++, data); + WRITE_VIDEO(ptr++, data); + WRITE_VIDEO(ptr++, data); + WRITE_VIDEO(ptr++, data); + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg = playfield_lookup[screendata & 0xc0]; + int k = 4; + do { + DO_PMG_LORES + } while (--k); + } + screendata <<= 2; + t_pm_scanline_ptr++; + } while (--kk); + CHAR_LOOP_END + do_border(); +} + +static void prepare_an_antic_8(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int kk = 4; + do { + UBYTE data = mode_e_an_lookup[screendata & 0xc0]; + *an_ptr++ = data; + *an_ptr++ = data; + *an_ptr++ = data; + *an_ptr++ = data; + screendata <<= 2; + } while (--kk); + CHAR_LOOP_END +} + +DEFINE_DRAW_AN(8) + +static void draw_antic_9(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + lookup2[0x00] = ANTIC_cl[C_BAK]; + lookup2[0x80] = lookup2[0x40] = ANTIC_cl[C_PF0]; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int kk = 4; + do { + if ((const UBYTE *) t_pm_scanline_ptr >= GTIA_pm_scanline + 4 * (48 - RCHOP)) + break; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + WRITE_VIDEO(ptr++, lookup2[screendata & 0x80]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x80]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x40]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x40]); + screendata <<= 2; + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + do { + colreg = (screendata & 0x80) ? L_PF0 : L_BAK; + DO_PMG_LORES + if (k & 0x01) + screendata <<= 1; + } while (--k); + } + t_pm_scanline_ptr++; + } while (--kk); + CHAR_LOOP_END + do_border(); +} + +/* ANTIC modes 9, b and c use BAK and PF0 colours only so they're not visible in GTIA modes */ + +static void draw_antic_9_gtia9(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + draw_antic_0(); +} + +static void draw_antic_9_gtia10(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + draw_antic_0_gtia10(); +} + +static void draw_antic_9_gtia11(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + draw_antic_0_gtia11(); +} + +static void draw_antic_a(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + lookup2[0x00] = ANTIC_cl[C_BAK]; + lookup2[0x40] = lookup2[0x10] = ANTIC_cl[C_PF0]; + lookup2[0x80] = lookup2[0x20] = ANTIC_cl[C_PF1]; + lookup2[0xc0] = lookup2[0x30] = ANTIC_cl[C_PF2]; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int kk = 2; + do { + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + WRITE_VIDEO(ptr++, lookup2[screendata & 0xc0]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0xc0]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x30]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x30]); + screendata <<= 4; + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + do { + colreg = playfield_lookup[screendata & 0xc0]; + DO_PMG_LORES + if (k & 0x01) + screendata <<= 2; + } while (--k); + } + t_pm_scanline_ptr++; + } while (--kk); + CHAR_LOOP_END + do_border(); +} + +static void prepare_an_antic_a(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + UBYTE data = mode_e_an_lookup[screendata & 0xc0]; + *an_ptr++ = data; + *an_ptr++ = data; + data = mode_e_an_lookup[screendata & 0x30]; + *an_ptr++ = data; + *an_ptr++ = data; + data = mode_e_an_lookup[screendata & 0x0c]; + *an_ptr++ = data; + *an_ptr++ = data; + data = mode_e_an_lookup[screendata & 0x03]; + *an_ptr++ = data; + *an_ptr++ = data; + CHAR_LOOP_END +} + +DEFINE_DRAW_AN(a) + +static void draw_antic_c(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + lookup2[0x00] = ANTIC_cl[C_BAK]; + lookup2[0x80] = lookup2[0x40] = lookup2[0x20] = lookup2[0x10] = ANTIC_cl[C_PF0]; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int kk = 2; + do { + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + WRITE_VIDEO(ptr++, lookup2[screendata & 0x80]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x40]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x20]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x10]); + screendata <<= 4; + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + do { + colreg = (screendata & 0x80) ? L_PF0 : L_BAK; + DO_PMG_LORES + screendata <<= 1; + } while (--k); + } + t_pm_scanline_ptr++; + } while (--kk); + CHAR_LOOP_END + do_border(); +} + +static void draw_antic_e(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_BACKGROUND_8 + lookup2[0x00] = ANTIC_cl[C_BAK]; + lookup2[0x40] = lookup2[0x10] = lookup2[0x04] = lookup2[0x01] = ANTIC_cl[C_PF0]; + lookup2[0x80] = lookup2[0x20] = lookup2[0x08] = lookup2[0x02] = ANTIC_cl[C_PF1]; + lookup2[0xc0] = lookup2[0x30] = lookup2[0x0c] = lookup2[0x03] = ANTIC_cl[C_PF2]; + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + if (screendata) { + WRITE_VIDEO(ptr++, lookup2[screendata & 0xc0]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x30]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x0c]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x03]); + } + else + DRAW_BACKGROUND(C_BAK) + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + do { + colreg = playfield_lookup[screendata & 0xc0]; + DO_PMG_LORES + screendata <<= 2; + } while (--k); + + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +static void prepare_an_antic_e(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + *an_ptr++ = mode_e_an_lookup[screendata & 0xc0]; + *an_ptr++ = mode_e_an_lookup[screendata & 0x30]; + *an_ptr++ = mode_e_an_lookup[screendata & 0x0c]; + *an_ptr++ = mode_e_an_lookup[screendata & 0x03]; + CHAR_LOOP_END +} + +static void draw_antic_e_gtia9(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + ULONG lookup[16]; + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_e(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia9(t_pm_scanline_ptr); + return; + } + lookup[0] = lookup[1] = lookup[4] = lookup[5] = ANTIC_lookup_gtia9[0]; + lookup[2] = lookup[6] = ANTIC_lookup_gtia9[1]; + lookup[3] = lookup[7] = ANTIC_lookup_gtia9[2]; + lookup[8] = lookup[9] = ANTIC_lookup_gtia9[4]; + lookup[10] = ANTIC_lookup_gtia9[5]; + lookup[11] = ANTIC_lookup_gtia9[6]; + lookup[12] = lookup[13] = ANTIC_lookup_gtia9[8]; + lookup[14] = ANTIC_lookup_gtia9[9]; + lookup[15] = ANTIC_lookup_gtia9[10]; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + WRITE_VIDEO_LONG((ULONG *) ptr, lookup[screendata >> 4]); + WRITE_VIDEO_LONG((ULONG *) ptr + 1, lookup[screendata & 0xf]); + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + ptr += 4; + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int k = 4; + UBYTE pm_reg; + do { + pm_reg = pm_lookup_ptr[*c_pm_scanline_ptr++]; + if (pm_reg) { + if (pm_reg == L_PF3) { + UBYTE tmp = k > 2 ? screendata >> 4 : screendata & 0xf; +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[tmp | GTIA_COLPF3]); +#else + WRITE_VIDEO(ptr, tmp | ((UWORD)tmp << 8) | ANTIC_cl[C_PF3]); +#endif + } + else + { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + ptr++; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +static void draw_antic_e_gtia10 (int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + prepare_an_antic_e(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia10(t_pm_scanline_ptr); +} +static void draw_antic_e_gtia11 (int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + prepare_an_antic_e(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia11(t_pm_scanline_ptr); +} + +static void draw_antic_f(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_BACKGROUND_6 + INIT_HIRES + + CHAR_LOOP_BEGIN + int screendata = *antic_memptr++; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + if (screendata) { + WRITE_VIDEO(ptr++, hires_norm(screendata & 0xc0)); + WRITE_VIDEO(ptr++, hires_norm(screendata & 0x30)); + WRITE_VIDEO(ptr++, hires_norm(screendata & 0x0c)); + WRITE_VIDEO(ptr++, hires_norm((screendata & 0x03) << 2)); + } + else + DRAW_BACKGROUND(C_PF2) + } + else + DO_PMG_HIRES(screendata) + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +static void draw_antic_f_artif(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + ULONG screendata_tally = *antic_memptr++; + + setup_art_colours(); + CHAR_LOOP_BEGIN + int screendata = *antic_memptr++; + screendata_tally <<= 8; + screendata_tally |= screendata; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + DRAW_ARTIF + else { + screendata = antic_memptr[-2]; + DO_PMG_HIRES(screendata) + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +#ifndef USE_COLOUR_TRANSLATION_TABLE +static void draw_antic_f_artif_new(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + ULONG pmtally; + ULONG screendata_tally = *antic_memptr++; + INIT_ARTIF_NEW + + setup_art_colours(); + CHAR_LOOP_BEGIN + int screendata = *antic_memptr++; + screendata_tally <<= 8; + screendata_tally |= screendata; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + DRAW_ARTIF_NEW + else { + screendata = antic_memptr[-2]; + pmtally = ((screendata_tally & 0x03f000) << 6) | + ((screendata_tally & 0x00fc00) << 2) | + ((screendata_tally & 0x003f00) >> 2) | + ((screendata_tally & 0x000fc0) >> 6); + DO_PMG_HIRES_NEW(screendata,pmtally) + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} +#endif + +static void prepare_an_antic_f(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + *an_ptr++ = screendata >> 6; + *an_ptr++ = (screendata >> 4) & 3; + *an_ptr++ = (screendata >> 2) & 3; + *an_ptr++ = screendata & 3; + CHAR_LOOP_END +} + +static void draw_antic_f_gtia9(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_f(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia9(t_pm_scanline_ptr); + return; + } + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + WRITE_VIDEO_LONG((ULONG *) ptr, ANTIC_lookup_gtia9[screendata >> 4]); + WRITE_VIDEO_LONG((ULONG *) ptr + 1, ANTIC_lookup_gtia9[screendata & 0xf]); + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + ptr += 4; + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int k = 4; + UBYTE pm_reg; + do { + pm_reg = pm_lookup_ptr[*c_pm_scanline_ptr++]; + if (pm_reg) { + if (pm_reg == L_PF3) { + UBYTE tmp = k > 2 ? screendata >> 4 : screendata & 0xf; +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[tmp | GTIA_COLPF3]); +#else + WRITE_VIDEO(ptr, tmp | ((UWORD)tmp << 8) | ANTIC_cl[C_PF3]); +#endif + } + else { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + ptr++; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +static void draw_antic_f_gtia10(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ +#ifdef WORDS_UNALIGNED_OK + ULONG lookup_gtia10[16]; +#else + UWORD lookup_gtia10[16]; +#endif + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_f(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia10(t_pm_scanline_ptr); + return; + } +#ifdef WORDS_UNALIGNED_OK + lookup_gtia10[0] = ANTIC_cl[C_PM0] | (ANTIC_cl[C_PM0] << 16); + lookup_gtia10[1] = ANTIC_cl[C_PM1] | (ANTIC_cl[C_PM1] << 16); + lookup_gtia10[2] = ANTIC_cl[C_PM2] | (ANTIC_cl[C_PM2] << 16); + lookup_gtia10[3] = ANTIC_cl[C_PM3] | (ANTIC_cl[C_PM3] << 16); + lookup_gtia10[12] = lookup_gtia10[4] = ANTIC_cl[C_PF0] | (ANTIC_cl[C_PF0] << 16); + lookup_gtia10[13] = lookup_gtia10[5] = ANTIC_cl[C_PF1] | (ANTIC_cl[C_PF1] << 16); + lookup_gtia10[14] = lookup_gtia10[6] = ANTIC_cl[C_PF2] | (ANTIC_cl[C_PF2] << 16); + lookup_gtia10[15] = lookup_gtia10[7] = ANTIC_cl[C_PF3] | (ANTIC_cl[C_PF3] << 16); + lookup_gtia10[8] = lookup_gtia10[9] = lookup_gtia10[10] = lookup_gtia10[11] = ANTIC_lookup_gtia9[0]; +#else + lookup_gtia10[0] = ANTIC_cl[C_PM0]; + lookup_gtia10[1] = ANTIC_cl[C_PM1]; + lookup_gtia10[2] = ANTIC_cl[C_PM2]; + lookup_gtia10[3] = ANTIC_cl[C_PM3]; + lookup_gtia10[12] = lookup_gtia10[4] = ANTIC_cl[C_PF0]; + lookup_gtia10[13] = lookup_gtia10[5] = ANTIC_cl[C_PF1]; + lookup_gtia10[14] = lookup_gtia10[6] = ANTIC_cl[C_PF2]; + lookup_gtia10[15] = lookup_gtia10[7] = ANTIC_cl[C_PF3]; + lookup_gtia10[8] = lookup_gtia10[9] = lookup_gtia10[10] = lookup_gtia10[11] = ANTIC_cl[C_BAK]; +#endif + ptr++; + t_pm_scanline_ptr = (const ULONG *) (((const UBYTE *) t_pm_scanline_ptr) + 1); + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + DO_GTIA_BYTE(ptr, lookup_gtia10, screendata) + ptr += 4; + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + UBYTE t_screendata = screendata >> 4; + do { + colreg = gtia_10_lookup[t_screendata]; + PF_COLLS(colreg) |= pm_pixel = *c_pm_scanline_ptr++; /*playfield colours can generate collisions*/ + pm_pixel |= gtia_10_pm[t_screendata]; /*but player colours don't*/ + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[pm_pixel] | colreg)); /*although they mix with the real players*/ + if (k == 3) + t_screendata = screendata & 0x0f; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border_gtia10(); +} + +static void draw_antic_f_gtia11(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_f(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia11(t_pm_scanline_ptr); + return; + } + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + WRITE_VIDEO_LONG((ULONG *) ptr, ANTIC_lookup_gtia11[screendata >> 4]); + WRITE_VIDEO_LONG((ULONG *) ptr + 1, ANTIC_lookup_gtia11[screendata & 0xf]); + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + ptr += 4; + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int k = 4; + UBYTE pm_reg; + do { + pm_reg = pm_lookup_ptr[*c_pm_scanline_ptr++]; + if (pm_reg) { + if (pm_reg == L_PF3) { + UBYTE tmp = k > 2 ? screendata & 0xf0 : screendata << 4; +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[tmp ? tmp | GTIA_COLPF3 : GTIA_COLPF3 & 0xf0]); +#else + WRITE_VIDEO(ptr, tmp ? tmp | ((UWORD)tmp << 8) | ANTIC_cl[C_PF3] : ANTIC_cl[C_PF3] & 0xf0f0); +#endif + } + else + { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + ptr++; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border_gtia11(); +} + +/* GTIA-switch-to-mode-00 bug +If while drawing line in hi-res mode PRIOR is changed from 0x40..0xff to +0x00..0x3f, GTIA doesn't back to hi-res, but starts generating mode similar +to ANTIC's 0xe, but with colours PF0, PF1, PF2, PF3. */ + +/* Technical explaination by perrym: + * in gtia.pdf there is a flip-flop at page 40, drawing location C3 with + * what looks like W and A on the gates + * This is set by AN2=0 AN1=1 AN0=1 durning HBLANK + * The middle input to the lower NOR gate is the inverted signal !NRM(?) + * (NRM means NORMAL?) which arrives from the top left of the page. + * This signal is defined on page 38, positions C2/B2 + * where there is a NOR gate pointing downwards with 00 written to the + * right of its output. + * !NRM is the condition that PRIOR is not set to b7=0,b6=0. + * When PRIOR is not set to NRM, the flip-flip is always reset, + * which seems necessary for the proper operation of the GTIA modes. + * If PRIOR is reset to NRM then the flip-flop remains reset, and + * since ANTIC data in hi-res modes is sent as PF0-PF3, this data is used + * by GTIA directly.*/ + +static void draw_antic_f_gtia_bug(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + lookup2[0x00] = ANTIC_cl[C_PF0]; + lookup2[0x40] = lookup2[0x10] = lookup2[0x04] = lookup2[0x01] = ANTIC_cl[C_PF1]; + lookup2[0x80] = lookup2[0x20] = lookup2[0x08] = lookup2[0x02] = ANTIC_cl[C_PF2]; + lookup2[0xc0] = lookup2[0x30] = lookup2[0x0c] = lookup2[0x03] = ANTIC_cl[C_PF3]; + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + WRITE_VIDEO(ptr++, lookup2[screendata & 0xc0]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x30]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x0c]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x03]); + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + do { + colreg = (playfield_lookup + 0x40)[screendata & 0xc0]; + DO_PMG_LORES + screendata <<= 2; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +/* pointer to a function that draws a single line of graphics */ +typedef void (*draw_antic_function)(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr); + +/* tables for all GTIA and ANTIC modes */ +static draw_antic_function draw_antic_table[4][16] = { +/* normal */ + { NULL, NULL, draw_antic_2, draw_antic_2, + draw_antic_4, draw_antic_4, draw_antic_6, draw_antic_6, + draw_antic_8, draw_antic_9, draw_antic_a, draw_antic_c, + draw_antic_c, draw_antic_e, draw_antic_e, draw_antic_f}, +/* GTIA 9 */ + { NULL, NULL, draw_antic_2_gtia9, draw_antic_2_gtia9, + draw_antic_4_gtia9, draw_antic_4_gtia9, draw_antic_6_gtia9, draw_antic_6_gtia9, + draw_antic_8_gtia9, draw_antic_9_gtia9, draw_antic_a_gtia9, draw_antic_9_gtia9, + draw_antic_9_gtia9, draw_antic_e_gtia9, draw_antic_e_gtia9, draw_antic_f_gtia9}, +/* GTIA 10 */ + { NULL, NULL, draw_antic_2_gtia10, draw_antic_2_gtia10, + draw_antic_4_gtia10, draw_antic_4_gtia10, draw_antic_6_gtia10, draw_antic_6_gtia10, + draw_antic_8_gtia10, draw_antic_9_gtia10, draw_antic_a_gtia10, draw_antic_9_gtia10, + draw_antic_9_gtia10, draw_antic_e_gtia10, draw_antic_e_gtia10, draw_antic_f_gtia10}, +/* GTIA 11 */ + { NULL, NULL, draw_antic_2_gtia11, draw_antic_2_gtia11, + draw_antic_4_gtia11, draw_antic_4_gtia11, draw_antic_6_gtia11, draw_antic_6_gtia11, + draw_antic_8_gtia11, draw_antic_9_gtia11, draw_antic_a_gtia11, draw_antic_9_gtia11, + draw_antic_9_gtia11, draw_antic_e_gtia11, draw_antic_e_gtia11, draw_antic_f_gtia11}}; + +/* pointer to current GTIA/ANTIC mode routine */ +static draw_antic_function draw_antic_ptr = draw_antic_8; +#ifdef NEW_CYCLE_EXACT +static draw_antic_function saved_draw_antic_ptr; +#endif +/* pointer to current GTIA mode blank drawing routine */ +static void (*draw_antic_0_ptr)(void) = draw_antic_0; + +#ifdef NEW_CYCLE_EXACT +/* wrapper for antic_0, for dmactl bugs */ +static void draw_antic_0_dmactl_bug(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + draw_antic_0_ptr(); +} +#endif + +/* Artifacting ------------------------------------------------------------ */ + +void ANTIC_UpdateArtifacting(void) +{ +#define ART_BROWN 0 +#define ART_BLUE 1 +#define ART_DARK_BROWN 2 +#define ART_DARK_BLUE 3 +#define ART_BRIGHT_BROWN 4 +#define ART_BRIGHT_BLUE 5 +#define ART_RED 6 +#define ART_GREEN 7 + static const UBYTE art_colour_table[4][8] = { + { 0x88, 0x14, 0x88, 0x14, 0x8f, 0x1f, 0xbb, 0x5f }, /* brownblue */ + { 0x14, 0x88, 0x14, 0x88, 0x1f, 0x8f, 0x5f, 0xbb }, /* bluebrown */ + { 0xd6, 0x46, 0xd6, 0x46, 0xdf, 0x4a, 0x4f, 0xac }, /* redgreen */ + { 0x46, 0xd6, 0x46, 0xd6, 0x4a, 0xdf, 0xac, 0x4f } /* greenred */ + }; + + int i; + int j; + int c; + const UBYTE *art_colours; + UBYTE q; + UBYTE art_white; + + if (ANTIC_artif_mode == 0) { + draw_antic_table[0][2] = draw_antic_table[0][3] = draw_antic_2; + draw_antic_table[0][0xf] = draw_antic_f; + return; + } + +#ifndef USE_COLOUR_TRANSLATION_TABLE + if (ANTIC_artif_new) { + static UWORD new_art_colour_table[4][2] = { + {0x4040, 0x8080}, + {0x8080, 0x4040}, + {0x8080, 0xd0d0}, + {0xd0d0, 0x8080} + }; + draw_antic_table[0][2] = draw_antic_table[0][3] = draw_antic_2_artif_new; + draw_antic_table[0][0xf] = draw_antic_f_artif_new; + art_colour1_new = new_art_colour_table[ANTIC_artif_mode - 1][0]; + art_colour2_new = new_art_colour_table[ANTIC_artif_mode - 1][1]; + } + else +#endif + { + draw_antic_table[0][2] = draw_antic_table[0][3] = draw_antic_2_artif; + draw_antic_table[0][0xf] = draw_antic_f_artif; + } + + art_colours = (ANTIC_artif_mode <= 4 ? art_colour_table[ANTIC_artif_mode - 1] : art_colour_table[2]); + + art_reverse_colpf1_save = art_normal_colpf1_save = ANTIC_cl[C_PF1] & 0x0f0f; + art_reverse_colpf2_save = art_normal_colpf2_save = ANTIC_cl[C_PF2]; + art_white = (ANTIC_cl[C_PF2] & 0xf0) | (ANTIC_cl[C_PF1] & 0x0f); + + for (i = 0; i <= 255; i++) { + art_bkmask_normal[i] = 0; + art_lummask_normal[i] = 0; + art_bkmask_reverse[255 - i] = 0; + art_lummask_reverse[255 - i] = 0; + + for (j = 0; j <= 3; j++) { + q = i << j; + if (!(q & 0x20)) { + if ((q & 0xf8) == 0x50) + c = ART_BLUE; /* 01010 */ + else if ((q & 0xf8) == 0xD8) + c = ART_DARK_BLUE; /* 11011 */ + else { /* xx0xx */ + ((UBYTE *) art_lookup_normal)[(i << 2) + j] = GTIA_COLPF2; + ((UBYTE *) art_lookup_reverse)[((255 - i) << 2) + j] = art_white; + ((UBYTE *) art_bkmask_normal)[(i << 2) + j] = 0xff; + ((UBYTE *) art_lummask_reverse)[((255 - i) << 2) + j] = 0x0f; + ((UBYTE *) art_bkmask_reverse)[((255 - i) << 2) + j] = 0xf0; + continue; + } + } + else if (q & 0x40) { + if (q & 0x10) + goto colpf1_pixel; /* x111x */ + else if (q & 0x80) { + if (q & 0x08) + c = ART_BRIGHT_BROWN; /* 11101 */ + else + goto colpf1_pixel; /* 11100 */ + } + else + c = ART_GREEN; /* 0110x */ + } + else if (q & 0x10) { + if (q & 0x08) { + if (q & 0x80) + c = ART_BRIGHT_BROWN; /* 00111 */ + else + goto colpf1_pixel; /* 10111 */ + } + else + c = ART_RED; /* x0110 */ + } + else + c = ART_BROWN; /* x010x */ + + ((UBYTE *) art_lookup_reverse)[((255 - i) << 2) + j] = + ((UBYTE *) art_lookup_normal)[(i << 2) + j] = art_colours[(j & 1) ^ c]; + continue; + + colpf1_pixel: + ((UBYTE *) art_lookup_normal)[(i << 2) + j] = art_white; + ((UBYTE *) art_lookup_reverse)[((255 - i) << 2) + j] = GTIA_COLPF2; + ((UBYTE *) art_bkmask_reverse)[((255 - i) << 2) + j] = 0xff; + ((UBYTE *) art_lummask_normal)[(i << 2) + j] = 0x0f; + ((UBYTE *) art_bkmask_normal)[(i << 2) + j] = 0xf0; + } + } +} + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + +/* Display List ------------------------------------------------------------ */ + +UBYTE ANTIC_GetDLByte(UWORD *paddr) +{ + int addr = *paddr; + UBYTE result; + if (ANTIC_xe_ptr != NULL && addr < 0x8000 && addr >= 0x4000) + result = ANTIC_xe_ptr[addr - 0x4000]; + else + result = MEMORY_GetByte((UWORD) addr); + addr++; + if ((addr & 0x3FF) == 0) + addr -= 0x400; + *paddr = (UWORD) addr; + return result; +} + +UWORD ANTIC_GetDLWord(UWORD *paddr) +{ + UBYTE lsb = ANTIC_GetDLByte(paddr); +#if !defined(BASIC) && !defined(CURSES_BASIC) + if (ANTIC_player_flickering && ((GTIA_VDELAY & 0x80) == 0 || ANTIC_ypos & 1)) + GTIA_GRAFP3 = lsb; +#endif + return (ANTIC_GetDLByte(paddr) << 8) + lsb; +} + +#if !defined(BASIC) && !defined(CURSES_BASIC) + +/* Real ANTIC doesn't fetch beginning bytes in HSC + nor screen+47 in wide playfield. This function does. */ +static void antic_load(void) +{ +#ifdef PAGED_MEM + UBYTE *antic_memptr = antic_memory + ANTIC_margin; + UWORD new_screenaddr = screenaddr + chars_read[md]; + if ((screenaddr ^ new_screenaddr) & 0xf000) { + do + *antic_memptr++ = MEMORY_dGetByte(screenaddr++); + while (screenaddr & 0xfff); + screenaddr -= 0x1000; + new_screenaddr -= 0x1000; + } + while (screenaddr < new_screenaddr) + *antic_memptr++ = MEMORY_dGetByte(screenaddr++); +#else + UWORD new_screenaddr = screenaddr + chars_read[md]; + if ((screenaddr ^ new_screenaddr) & 0xf000) { + int bytes = (-screenaddr) & 0xfff; + if (ANTIC_xe_ptr != NULL && screenaddr < 0x8000 && screenaddr >= 0x4000) { + memcpy(antic_memory + ANTIC_margin, ANTIC_xe_ptr + (screenaddr - 0x4000), bytes); + if (new_screenaddr & 0xfff) + memcpy(antic_memory + ANTIC_margin + bytes, ANTIC_xe_ptr + (screenaddr + bytes - 0x5000), new_screenaddr & 0xfff); + } + else if ((screenaddr & 0xf000) == 0xd000) { + MEMORY_CopyFromMem(screenaddr, antic_memory + ANTIC_margin, bytes); + if (new_screenaddr & 0xfff) + MEMORY_CopyFromMem((UWORD) (screenaddr + bytes - 0x1000), antic_memory + ANTIC_margin + bytes, new_screenaddr & 0xfff); + } + else { + MEMORY_dCopyFromMem(screenaddr, antic_memory + ANTIC_margin, bytes); + if (new_screenaddr & 0xfff) + MEMORY_dCopyFromMem(screenaddr + bytes - 0x1000, antic_memory + ANTIC_margin + bytes, new_screenaddr & 0xfff); + } + screenaddr = new_screenaddr - 0x1000; + } + else { + if (ANTIC_xe_ptr != NULL && screenaddr < 0x8000 && screenaddr >= 0x4000) + memcpy(antic_memory + ANTIC_margin, ANTIC_xe_ptr + (screenaddr - 0x4000), chars_read[md]); + else if ((screenaddr & 0xf000) == 0xd000) + MEMORY_CopyFromMem(screenaddr, antic_memory + ANTIC_margin, chars_read[md]); + else + MEMORY_dCopyFromMem(screenaddr, antic_memory + ANTIC_margin, chars_read[md]); + screenaddr = new_screenaddr; + } +#endif +} + +#ifdef NEW_CYCLE_EXACT +int ANTIC_cur_screen_pos = ANTIC_NOT_DRAWING; +#endif + +#ifdef USE_CURSES +static int scanlines_to_curses_display = 0; +#endif + +/* This function emulates one frame drawing screen at Screen_atari */ +void ANTIC_Frame(int draw_display) +{ + static const UBYTE mode_type[32] = { + NORMAL0, NORMAL0, NORMAL0, NORMAL0, NORMAL0, NORMAL0, NORMAL1, NORMAL1, + NORMAL2, NORMAL2, NORMAL1, NORMAL1, NORMAL1, NORMAL0, NORMAL0, NORMAL0, + SCROLL0, SCROLL0, SCROLL0, SCROLL0, SCROLL0, SCROLL0, SCROLL1, SCROLL1, + SCROLL2, SCROLL2, SCROLL1, SCROLL1, SCROLL1, SCROLL0, SCROLL0, SCROLL0 + }; + static const UBYTE normal_lastline[16] = + { 0, 0, 7, 9, 7, 15, 7, 15, 7, 3, 3, 1, 0, 1, 0, 0 }; + UBYTE vscrol_flag = FALSE; + UBYTE no_jvb = TRUE; +#ifndef NEW_CYCLE_EXACT + UBYTE need_load; +#endif + +#ifdef NEW_CYCLE_EXACT + int cpu2antic_index; +#endif /* NEW_CYCLE_EXACT */ + + ANTIC_ypos = 0; + do { + POKEY_Scanline(); /* check and generate IRQ */ + OVERSCREEN_LINE; + } while (ANTIC_ypos < 8); + + scrn_ptr = (UWORD *) Screen_atari; +#ifdef NEW_CYCLE_EXACT + ANTIC_cur_screen_pos = ANTIC_NOT_DRAWING; +#endif + need_dl = TRUE; + do { +#ifdef SKIP + if ((INPUT_mouse_mode == INPUT_MOUSE_PEN || INPUT_mouse_mode == INPUT_MOUSE_GUN) && (ANTIC_ypos >> 1 == ANTIC_PENV_input)) { + PENH = ANTIC_PENH_input; + PENV = ANTIC_PENV_input; + if (GTIA_GRACTL & 4) + GTIA_TRIG_latch[INPUT_mouse_port] = 0; + } +#endif + POKEY_Scanline(); /* check and generate IRQ */ + pmg_dma(); + +#ifdef USE_CURSES + if (--scanlines_to_curses_display == 0) + curses_display_line(anticmode, antic_memory + ANTIC_margin); +#endif + + need_load = FALSE; + if (need_dl) { + if (ANTIC_DMACTL & 0x20) { + IR = ANTIC_GetDLByte(&ANTIC_dlist); + anticmode = IR & 0xf; + ANTIC_xpos++; + /* PMG flickering :-) */ + if (ANTIC_missile_flickering) + GTIA_GRAFM = ANTIC_ypos & 1 ? IR : ((GTIA_GRAFM ^ IR) & hold_missiles_tab[GTIA_VDELAY & 0xf]) ^ IR; + if (ANTIC_player_flickering) + { + UBYTE hold = ANTIC_ypos & 1 ? 0 : GTIA_VDELAY; + if ((hold & 0x10) == 0) + GTIA_GRAFP0 = MEMORY_dGetByte((UWORD) (CPU_regPC - ANTIC_xpos + 8)); + if ((hold & 0x20) == 0) + GTIA_GRAFP1 = MEMORY_dGetByte((UWORD) (CPU_regPC - ANTIC_xpos + 9)); + if ((hold & 0x40) == 0) + GTIA_GRAFP2 = MEMORY_dGetByte((UWORD) (CPU_regPC - ANTIC_xpos + 10)); + if ((hold & 0x80) == 0) + GTIA_GRAFP3 = MEMORY_dGetByte((UWORD) (CPU_regPC - ANTIC_xpos + 11)); + } + } + else + IR &= 0x7f; /* repeat last instruction, but don't generate DLI */ + + dctr = 0; + need_dl = FALSE; + vscrol_off = FALSE; + + switch (anticmode) { + case 0x00: + lastline = (IR >> 4) & 7; + if (vscrol_flag) { + lastline = ANTIC_VSCROL; + vscrol_flag = FALSE; + vscrol_off = TRUE; + } + break; + case 0x01: + lastline = 0; + if (IR & 0x40 && ANTIC_DMACTL & 0x20) { + ANTIC_dlist = ANTIC_GetDLWord(&ANTIC_dlist); + ANTIC_xpos += 2; + no_jvb = FALSE; + } + else + if (vscrol_flag) { + lastline = ANTIC_VSCROL; + vscrol_flag = FALSE; + vscrol_off = TRUE; + } + break; + default: + lastline = normal_lastline[anticmode]; + if (IR & 0x20) { + if (!vscrol_flag) { + CPU_GO(VSCON_C); + dctr = ANTIC_VSCROL; + vscrol_flag = TRUE; + } + } + else if (vscrol_flag) { + lastline = ANTIC_VSCROL; + vscrol_flag = FALSE; + vscrol_off = TRUE; + } + if (IR & 0x40 && ANTIC_DMACTL & 0x20) { + screenaddr = ANTIC_GetDLWord(&ANTIC_dlist); + ANTIC_xpos += 2; + } + md = mode_type[IR & 0x1f]; + need_load = TRUE; + draw_antic_ptr = draw_antic_table[GTIA_PRIOR >> 6][anticmode]; + break; + } + } +#ifdef NEW_CYCLE_EXACT + cpu2antic_index = 0; + if (anticmode < 2 || (ANTIC_DMACTL & 3) == 0 || + (anticmode >= 8 && !need_load)) { + cpu2antic_index = 0; + } + else { +/* TODO: use a cleaner lookup table here */ + if (!(IR & 0x10) && ((ANTIC_DMACTL & 3) == 1)) + cpu2antic_index = 1; + else if ((!(IR &0x10) && ((ANTIC_DMACTL & 3) == 2)) || + ((IR & 0x10) && ((ANTIC_DMACTL & 3) == 1))) { + cpu2antic_index = 2; + } + else + cpu2antic_index = 10; + if (IR & 0x10) { + cpu2antic_index += (ANTIC_HSCROL >> 1); + } + if (anticmode >=2 && anticmode <=7 && !need_load) + cpu2antic_index += 17; + if (anticmode ==6 || anticmode ==7) + cpu2antic_index += 17 * 2; + else if (anticmode==8 || anticmode == 9) + cpu2antic_index += 17 * 6; + else if (anticmode >=0xa && anticmode <=0xc) + cpu2antic_index += 17 * 5; + else if (anticmode >=0x0d) + cpu2antic_index += 17 * 4; + } + ANTIC_cpu2antic_ptr = &CYCLE_MAP_cpu2antic[CYCLE_MAP_SIZE * cpu2antic_index]; + ANTIC_antic2cpu_ptr = &CYCLE_MAP_antic2cpu[CYCLE_MAP_SIZE * cpu2antic_index]; +#endif /* NEW_CYCLE_EXACT */ + + if ((IR & 0x4f) == 1 && (ANTIC_DMACTL & 0x20)) { + ANTIC_dlist = ANTIC_GetDLWord(&ANTIC_dlist); + ANTIC_xpos += 2; + } + +#ifdef NEW_CYCLE_EXACT + /* begin drawing here */ + if (draw_display) { + ANTIC_cur_screen_pos = LBORDER_START; + ANTIC_xpos = ANTIC_antic2cpu_ptr[ANTIC_xpos]; /* convert antic to cpu(need for WSYNC) */ + if (dctr == lastline) { + if (no_jvb) + need_dl = TRUE; + if (IR & 0x80) { + CPU_GO(ANTIC_antic2cpu_ptr[ANTIC_NMIST_C]); + ANTIC_NMIST = 0x9f; + if (ANTIC_NMIEN & 0x80) { + CPU_GO(ANTIC_antic2cpu_ptr[ANTIC_NMI_C]); + CPU_NMI(); + } + } + } + } + else /* force this to be within an else if NEW_CYCLE_EXACT */ +#endif /* NEW_CYCLE_EXACT */ + if (dctr == lastline) { + if (no_jvb) + need_dl = TRUE; + if (IR & 0x80) { + CPU_GO(ANTIC_NMIST_C); + ANTIC_NMIST = 0x9f; + if (ANTIC_NMIEN & 0x80) { + CPU_GO(ANTIC_NMI_C); + CPU_NMI(); + } + } + } + if (!draw_display) { + ANTIC_xpos += ANTIC_DMAR; + if (anticmode < 2 || (ANTIC_DMACTL & 3) == 0) { + GOEOL; + if (no_jvb) { + dctr++; + dctr &= 0xf; + } + continue; + } + if (need_load) { + ANTIC_xpos += load_cycles[md]; + if (anticmode <= 5) /* extra cycles in font modes */ + ANTIC_xpos += before_cycles[md] - extra_cycles[md]; + } + if (anticmode < 8) + ANTIC_xpos += font_cycles[md]; + GOEOL; + dctr++; + dctr &= 0xf; + continue; + } +#ifndef NO_YPOS_BREAK_FLICKER +#define YPOS_BREAK_FLICKER do{if (ANTIC_ypos == ANTIC_break_ypos - 1000) {\ + static int toggle;\ + if (toggle == 1) {\ + FILL_VIDEO(scrn_ptr + LBORDER_START, 0x0f0f, (RBORDER_END - LBORDER_START) * 2);\ + }\ + toggle = !toggle;\ + }}while(0) +#else +#define YPOS_BREAK_FLICKER do{}while(0) +#endif /* NO_YPOS_BREAK_FLICKER */ + +#ifdef NEW_CYCLE_EXACT + GTIA_NewPmScanline(); + if (anticmode < 2 || (ANTIC_DMACTL & 3) == 0) { + GOEOL_CYCLE_EXACT; + draw_partial_scanline(ANTIC_cur_screen_pos, RBORDER_END); + UPDATE_DMACTL; + UPDATE_GTIA_BUG; + ANTIC_cur_screen_pos = ANTIC_NOT_DRAWING; + YPOS_BREAK_FLICKER; + scrn_ptr += Screen_WIDTH / 2; + if (no_jvb) { + dctr++; + dctr &= 0xf; + } + continue; + } + + GOEOL_CYCLE_EXACT; + draw_partial_scanline(ANTIC_cur_screen_pos, RBORDER_END); + UPDATE_DMACTL; + UPDATE_GTIA_BUG; + ANTIC_cur_screen_pos = ANTIC_NOT_DRAWING; + +#else /* NEW_CYCLE_EXACT not defined */ + if (need_load && anticmode <= 5 && ANTIC_DMACTL & 3) + ANTIC_xpos += before_cycles[md]; + + CPU_GO(SCR_C); + GTIA_NewPmScanline(); + + ANTIC_xpos += ANTIC_DMAR; + + if (anticmode < 2 || (ANTIC_DMACTL & 3) == 0) { + draw_antic_0_ptr(); + GOEOL; + YPOS_BREAK_FLICKER; + scrn_ptr += scrn_line; + if (no_jvb) { + dctr++; + dctr &= 0xf; + } + continue; + } + + if (need_load) { + antic_load(); +#ifdef USE_CURSES + /* Normally, we would call curses_display_line here, + and not use scanlines_to_curses_display at all. + That would however cause incorrect color of the "MEMORY" + menu item in Self Test - it isn't set properly + in the first scanline. We therefore postpone + curses_display_line call to the next scanline. */ + scanlines_to_curses_display = 1; +#endif + ANTIC_xpos += load_cycles[md]; + if (anticmode <= 5) /* extra cycles in font modes */ + ANTIC_xpos -= extra_cycles[md]; + } + + draw_antic_ptr(chars_displayed[md], + antic_memory + ANTIC_margin + ch_offset[md], + scrn_ptr + x_min[md], + (ULONG *) >IA_pm_scanline[x_min[md]]); + + GOEOL; +#endif /* NEW_CYCLE_EXACT */ + YPOS_BREAK_FLICKER; + scrn_ptr += scrn_line; + dctr++; + dctr &= 0xf; + + //drawline(); + + } while (ANTIC_ypos < (ATARI_HEIGHT + 8)); + +#ifndef NO_SIMPLE_PAL_BLENDING + /* Simple PAL blending, using only the base 256 color palette. */ + if (ANTIC_pal_blending) + { + int ypos = ANTIC_ypos - 1; + /* Start at the last screen line (248). */ + ULONG *ptr = (ULONG *) (scrn_ptr - 4 * RCHOP); + do { + int k = 2 * (48 - LCHOP - RCHOP); + do { + /* For each grayscale pixel (colors $00..$0f) blend it with + chrominance of a pixel from the previous line. */ + ULONG pix = READ_VIDEO_LONG(--ptr); + ULONG mask = 0xf0f0f0f0; + /* Take advantage of the fact that chrominance can change only + every two pixels. This way we may test only two pixels in a + quadruplet instead of four. */ + if (pix & 0x0000f0f0) + /* Two LSBs are non-grayscale */ + mask &= 0xf0f00000; + if (pix & 0xf0f00000) + /* Two MSBs are non-grayscale */ + mask &= 0x0000f0f0; + + WRITE_VIDEO_LONG(ptr, (READ_VIDEO_LONG(ptr - ATARI_WIDTH / 4) & mask) | pix); + } while (--k); + ptr -= 2 * (LCHOP + RCHOP); /* Move one line up */ + } while (--ypos > 8); /* Stop after line 9 */ + + } +#endif /* NO_SIMPLE_PAL_BLENDING */ + +/* TODO: cycle-exact overscreen lines */ + POKEY_Scanline(); /* check and generate IRQ */ + CPU_GO(ANTIC_NMIST_C); + ANTIC_NMIST = 0x5f; /* Set VBLANK */ + if (ANTIC_NMIEN & 0x40) { + CPU_GO(ANTIC_NMI_C); + CPU_NMI(); + } + ANTIC_xpos += ANTIC_DMAR; + GOEOL; + + do { + POKEY_Scanline(); /* check and generate IRQ */ + OVERSCREEN_LINE; + } while (ANTIC_ypos < max_ypos); + ANTIC_ypos = 0; /* just for monitor.c */ +} + +#ifdef NEW_CYCLE_EXACT + +/* update the scanline from the last changed position to the current +position, when a change was made to a display register during drawing */ +void ANTIC_UpdateScanline(void) +{ + int actual_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; + int oldpos = ANTIC_cur_screen_pos; + ANTIC_cur_screen_pos = actual_xpos * 2 - 37; + draw_partial_scanline(oldpos, ANTIC_cur_screen_pos); +} + +/* prior needs a different adjustment and could generate small glitches +between mode changes */ +/* TODO: support glitches between mode changes (tiny areas that are neither +the new mode nor the old mode, which occur between mode changes */ +void ANTIC_UpdateScanlinePrior(UBYTE byte) +{ + int actual_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; + int prior_mode_adj = 2; + int oldpos = ANTIC_cur_screen_pos; + ANTIC_cur_screen_pos = actual_xpos * 2 - 37 + prior_mode_adj; + draw_partial_scanline(oldpos, ANTIC_cur_screen_pos); +} + +/* chbase needs a different adjustment */ +void update_scanline_chbase(void) +{ + int actual_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; + int hscrol_adj = (IR & 0x10) ? ANTIC_HSCROL : 0; + int hscrollsb_adj = (hscrol_adj & 1); + int oldpos = ANTIC_cur_screen_pos; + int fontfetch_adj; + /* antic fetches character font data every 2 or 4 cycles */ + /* we want to delay the change until the next fetch */ + /* empirically determined: */ + if (anticmode >= 2 && anticmode <= 5) { + fontfetch_adj = (((hscrol_adj >>1) - actual_xpos + 0) & 1) * 2 + 9; + } + else if (anticmode == 6 || anticmode == 7) { + fontfetch_adj = (((hscrol_adj >> 1) - actual_xpos + 2) & 3) * 2 + 9; + } + else { + fontfetch_adj = 0; + } + ANTIC_cur_screen_pos = actual_xpos * 2 - 37 + hscrollsb_adj + fontfetch_adj; + draw_partial_scanline(oldpos, ANTIC_cur_screen_pos); +} + +/* chactl invert needs a different adjustment */ +void update_scanline_invert(void) +{ + int actual_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; + int hscrol_adj = (IR & 0x10) ? ANTIC_HSCROL : 0; + int hscrollsb_adj = (hscrol_adj & 1); + int oldpos = ANTIC_cur_screen_pos; + + /* empirically determined: adjustment of 4 */ + ANTIC_cur_screen_pos = actual_xpos * 2 - 37 + hscrollsb_adj + 4; + draw_partial_scanline(oldpos, ANTIC_cur_screen_pos); +} + +/* chactl blank needs a different adjustment */ +void update_scanline_blank(void) +{ + int actual_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; + int hscrol_adj = (IR & 0x10) ? ANTIC_HSCROL : 0; + int hscrollsb_adj = (hscrol_adj & 1); + int oldpos = ANTIC_cur_screen_pos; + + /* empirically determined: adjustment of 7 */ + ANTIC_cur_screen_pos = actual_xpos * 2 - 37 + hscrollsb_adj + 7; + draw_partial_scanline(oldpos, ANTIC_cur_screen_pos); +} + +static void set_dmactl_bug(void){ + need_load = FALSE; + saved_draw_antic_ptr = draw_antic_ptr; + draw_antic_ptr_changed = 1; + if (anticmode == 2 || anticmode == 3 || anticmode == 0xf) { + draw_antic_ptr = draw_antic_2_dmactl_bug; + dmactl_bug_chdata = (anticmode == 0xf) ? 0 : antic_memory[ANTIC_margin + chars_read[md] - 1]; + } + else { + draw_antic_ptr = draw_antic_0_dmactl_bug; + } +} + +/* draw a partial scanline between point l and point r */ +/* l is the left hand word, r is the point one past the right-most word to draw */ +void draw_partial_scanline(int l, int r) +{ + /* lborder_chars: save left border chars,we restore it after */ + /* it is the number of 8pixel 'chars' in the left border */ + int lborder_chars = left_border_chars; + + /* rborder_start: save right border start, we restore it after */ + /* it is the start of the right border, in words */ + int rborder_start = right_border_start; + + /* lborder_start: start of the left border, in words */ + int lborder_start = LCHOP * 4; + /* end of the left border, in words */ + int lborder_end = LCHOP * 4 + left_border_chars * 4; + /* end of the right border, in words */ + int rborder_end = (48 - RCHOP) * 4; + /* flag: if true, don't show playfield. used if the partial scanline */ + /* does not include the playfield */ + int dont_display_playfield = 0; + /* offset of the left most drawable 8 pixel pf block */ + /* int l_pfchar = (lborder_end - x_min[md]) / 4; */ + int l_pfchar = 0; + /* offset of the right most drawable 8 pixel pf plock, *plus one* */ + int r_pfchar = 0; + /* buffer to save 0,1,2 or 3 words of the left hand portion of an 8pixel */ + /* 'char' which is going to be erased by the left hand side of the */ + /* left most 8pixel 'char' in the partial scanline and must be saved */ + /* and restored later */ + UWORD sv_buf[4]; + /* buffer to save 0 or 1 (modes 6,7,a,b,c) ,or , (0,1,2 or 3) (modes 8,9) */ + /* 8pixel 'chars' of playfield which is going to be erased by the left */ + /* hand most 8pixel 'char's of the 2(modes 67abc) or 4(modes 89) 8pixel */ + /* 'char'-sized blocks that these modes must draw. */ + UWORD sv_buf2[4 * 4]; /* for modes 6,7,8,9,a,b,c */ + /* start,size of the above buffers */ + int sv_bufstart = 0; + int sv_bufsize = 0; + int sv_bufstart2 = 0; + int sv_bufsize2 = 0; + /* number of 8,16,32pixel chars to draw in the playfield */ + int nchars = 0; + /* adjustment to ch_index , it is the number of 8,16,32pixel chars */ + /* that we do not draw on the left hand side that would usually be drawn */ + /* for this mode */ + int ch_adj = 0; + /* adjustment to x_min to skip over the left side */ + int x_min_adj = 0; + /* it's the offset of the left most drawable 8pixel pfblock which is */ + /* rounded *down* to the nearest factor of (2:mode 67abc,4:mode 89) */ + /* if it is divided by (2:mode 67abc,4:mode 89) it will give the */ + /* offset of the left most drawable (16,32)pixel 'char' */ + int l_pfactual = 0; + /* it is the offset of the right most drawable 8pixel pf block which is */ + /* rounded *up* to the nearest factor of (2,4), *plus one* */ + /* so that r_pfactual-l_pfactual / (2,4) = number of 16,32 pixel 'chars' */ + /* to be drawn */ + int r_pfactual = 0; + /* it is the offset of the 8pixel block aligned with pf which overlaps */ + /* the left border. We need this for modes 6-c, because in these modes */ + /* the code will save 8pixel blocks to the left of l_pfchar and */ + /* >= l_pfactual, which will result in portions of the left border */ + /* being saved on some occasions which should not be, unless we */ + /* use this variable to alter the number of chars saved */ + /* int l_borderpfchar=0; */ + + r_pfchar = chars_displayed[md]; + if (md == NORMAL1 || md == SCROLL1) { /* modes 6,7,a,b,c */ + r_pfchar *= 2; + } + else if (md == NORMAL2 || md == SCROLL2) { /* modes 8,9 */ + r_pfchar *= 4; + } + if (anticmode < 2 || (ANTIC_DMACTL & 3) == 0) { + lborder_end = rborder_end; + dont_display_playfield = 1; + } + if (l > rborder_end) + l = rborder_end; + if (r > rborder_end) + r = rborder_end; + if (l < lborder_start) + l = lborder_start; + if (r < lborder_start) + r = lborder_start; + if (l >= r) + return; + if (l < lborder_end) { + /* left point is within left border */ + sv_bufstart = (l & (~3)); /* high order bits give buffer start */ + sv_bufsize = l - sv_bufstart; + left_border_start = sv_bufstart; + left_border_chars = lborder_chars - (sv_bufstart - lborder_start) / 4; + if (l > x_min[md]) { + /* special case for modes 56789abc */ + /* position buffer within the reference frame */ + /* of the playfield if that */ + /* results in more pixels being saved in the buffer */ + /* needed because for modes 5789abc the overlapping part */ + /* can be more than 1 8pixel char and we only save the left */ + /* hand most 8pixel chars in the code in the later section */ + /* further down, so there is a possibility that the 8pixels */ + /* which are saved within the reference frame of the border */ + /* are not enough to ensure that everything gets saved */ + l_pfchar = (l - x_min[md]) / 4; + if (((l - x_min[md]) & 3) > sv_bufsize) { + sv_bufsize = ((l - x_min[md]) & 3); + sv_bufstart = l - sv_bufsize; + } + } + } + else if (l >= rborder_start) { + sv_bufstart = (l & (~3)); /* high order bits give buffer start */ + sv_bufsize = l - sv_bufstart; + right_border_start = sv_bufstart; + dont_display_playfield = 1; /* don't display the playfield */ + } + else { /*within screen */ + sv_bufsize = ((l - x_min[md]) & 3); /* low bits have buf size */ + sv_bufstart = l - sv_bufsize; /* difference gives start */ + l_pfchar = (sv_bufstart - x_min[md]) / 4; + left_border_chars = 0; /* don't display left border */ + } + memcpy(sv_buf, scrn_ptr + sv_bufstart, sv_bufsize * sizeof(UWORD)); /* save part of screen */ + + if (r <= lborder_end) { + /* right_end_char = (r + 3) / 4; */ + left_border_chars = (r + 3) / 4 - sv_bufstart / 4; + /* everything must be within the left border */ + dont_display_playfield = 1; /* don't display the playfield */ + } + else { /* right point is past start of playfield */ + /* now load ANTIC data: needed for ANTIC glitches */ + if (need_load) { + antic_load(); +#ifdef USE_CURSES + /* Normally, we would call curses_display_line here, + and not use scanlines_to_curses_display at all. + That would however cause incorrect color of the "MEMORY" + menu item in Self Test - it isn't set properly + in the first scanline. We therefore postpone + curses_display_line call to the next scanline. */ + scanlines_to_curses_display = 1; +#endif + need_load = FALSE; + } + + if (r > rborder_start) { + right_border_end = ((r + 3) & (~3)); /* round up to nearest 8pixel */ + } + else { + r_pfchar = (r - x_min[md] + 3) / 4; /* round up to nearest 8pixel */ + } + } + if (dont_display_playfield) { + nchars = 0; + x_min_adj = 0; + ch_adj = 0; + } + else if (md == NORMAL1 || md == SCROLL1) { /* modes 6,7,a,b,c */ + l_pfactual = (l_pfchar & (~1)); /* round down to nearest 16pixel */ + sv_bufsize2 = (l_pfchar - l_pfactual) * 4; + sv_bufstart2 = x_min[md] + l_pfactual * 4; + r_pfactual = ((r_pfchar + 1) & (~1)); /* round up to nearest 16pixel */ + nchars = (r_pfactual - l_pfactual) / 2; + x_min_adj = l_pfactual * 4; + ch_adj = l_pfactual / 2; + } + else if (md == NORMAL2 || md == SCROLL2) { /* modes 8,9 */ + l_pfactual = (l_pfchar & (~3)); + sv_bufsize2 = (l_pfchar - l_pfactual) * 4; + sv_bufstart2 = x_min[md] + l_pfactual * 4; + r_pfactual = ((r_pfchar + 3) & (~3)); + nchars = (r_pfactual - l_pfactual) / 4; + x_min_adj = l_pfactual * 4; + ch_adj = l_pfactual / 4; + } + else { + nchars = r_pfchar - l_pfchar; + x_min_adj = l_pfchar * 4; + ch_adj = l_pfchar; + } + memcpy(sv_buf2, scrn_ptr + sv_bufstart2, sv_bufsize2 * sizeof(UWORD)); /* save part of screen */ + + if (dont_display_playfield) { +/* the idea here is to use draw_antic_0_ptr() to draw just the border only, since */ +/* we can't set nchars=0. draw_antic_0_ptr will work if left_border_start and */ +/* right_border_end are set correctly */ + if (anticmode < 2 || (ANTIC_DMACTL & 3) == 0 || r <= lborder_end) { + right_border_end = left_border_start + left_border_chars * 4; + } + else if (l >= rborder_start) { + left_border_start = right_border_start; + } + draw_antic_0_ptr(); + } + else { + draw_antic_ptr(nchars, /* chars_displayed[md], */ + antic_memory + ANTIC_margin + ch_offset[md] + ch_adj, + scrn_ptr + x_min[md] + x_min_adj, + (ULONG *) >IA_pm_scanline[x_min[md] + x_min_adj]); + } + memcpy(scrn_ptr + sv_bufstart2, sv_buf2, sv_bufsize2 * sizeof(UWORD)); /* restore screen */ + memcpy(scrn_ptr + sv_bufstart, sv_buf, sv_bufsize * sizeof(UWORD)); /* restore screen */ + + /* restore border global variables */ + left_border_chars=lborder_chars; + right_border_start=rborder_start; + left_border_start = LCHOP * 4; + right_border_end = (48-RCHOP) *4; +} +#endif /* NEW_CYCLE_EXACT */ + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + +/* ANTIC registers --------------------------------------------------------- */ + +UBYTE ANTIC_GetByte(UWORD addr, int no_side_effects) +{ + switch (addr & 0xf) { + case ANTIC_OFFSET_VCOUNT: + if (ANTIC_XPOS < ANTIC_LINE_C) + return ANTIC_ypos >> 1; + if (ANTIC_ypos + 1 < max_ypos) + return (ANTIC_ypos + 1) >> 1; + return 0; + case ANTIC_OFFSET_PENH: + return PENH; + case ANTIC_OFFSET_PENV: + return PENV; + case ANTIC_OFFSET_NMIST: + return ANTIC_NMIST; + default: + return 0xff; + } +} + +#if !defined(BASIC) && !defined(CURSES_BASIC) + +/* GTIA calls it on write to PRIOR */ +void ANTIC_SetPrior(UBYTE byte) +{ + if ((byte ^ GTIA_PRIOR) & 0x0f) { +#ifdef USE_COLOUR_TRANSLATION_TABLE + UBYTE col = 0; + UBYTE col2 = 0; + UBYTE hi; + UBYTE hi2; + if ((byte & 3) == 0) { + col = GTIA_COLPF0; + col2 = GTIA_COLPF1; + } + if ((byte & 0xc) == 0) { + ANTIC_cl[C_PF0 | C_PM0] = colour_translation_table[col | GTIA_COLPM0]; + ANTIC_cl[C_PF0 | C_PM1] = colour_translation_table[col | GTIA_COLPM1]; + ANTIC_cl[C_PF0 | C_PM01] = colour_translation_table[col | GTIA_COLPM0 | GTIA_COLPM1]; + ANTIC_cl[C_PF1 | C_PM0] = colour_translation_table[col2 | GTIA_COLPM0]; + ANTIC_cl[C_PF1 | C_PM1] = colour_translation_table[col2 | GTIA_COLPM1]; + ANTIC_cl[C_PF1 | C_PM01] = colour_translation_table[col2 | GTIA_COLPM0 | GTIA_COLPM1]; + } + else { + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF0 | C_PM1] = ANTIC_cl[C_PF0 | C_PM0] = colour_translation_table[col]; + ANTIC_cl[C_PF1 | C_PM01] = ANTIC_cl[C_PF1 | C_PM1] = ANTIC_cl[C_PF1 | C_PM0] = colour_translation_table[col2]; + } + if (byte & 4) { + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PF2 | C_PM0] = ANTIC_cl[C_PF2]; + ANTIC_cl[C_PF3 | C_PM01] = ANTIC_cl[C_PF3 | C_PM1] = ANTIC_cl[C_PF3 | C_PM0] = ANTIC_cl[C_PF3]; + ANTIC_cl[C_HI2 | C_PM01] = ANTIC_cl[C_HI2 | C_PM1] = ANTIC_cl[C_HI2 | C_PM0] = ANTIC_cl[C_HI2]; + } + else { + ANTIC_cl[C_PF3 | C_PM0] = ANTIC_cl[C_PF2 | C_PM0] = ANTIC_cl[C_PM0]; + ANTIC_cl[C_PF3 | C_PM1] = ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PM1]; + ANTIC_cl[C_PF3 | C_PM01] = ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PM01]; + ANTIC_cl[C_HI2 | C_PM0] = colour_translation_table[(GTIA_COLPM0 & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM1] = colour_translation_table[(GTIA_COLPM1 & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM01] = colour_translation_table[((GTIA_COLPM0 | GTIA_COLPM1) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + } + col = col2 = 0; + hi = hi2 = GTIA_COLPF1 & 0xf; + ANTIC_cl[C_BLACK - C_PF2 + C_HI2] = colour_translation_table[hi]; + if ((byte & 9) == 0) { + col = GTIA_COLPF2; + col2 = GTIA_COLPF3; + hi |= col & 0xf0; + hi2 |= col2 & 0xf0; + } + if ((byte & 6) == 0) { + ANTIC_cl[C_PF2 | C_PM2] = colour_translation_table[col | GTIA_COLPM2]; + ANTIC_cl[C_PF2 | C_PM3] = colour_translation_table[col | GTIA_COLPM3]; + ANTIC_cl[C_PF2 | C_PM23] = colour_translation_table[col | GTIA_COLPM2 | GTIA_COLPM3]; + ANTIC_cl[C_PF3 | C_PM2] = colour_translation_table[col2 | GTIA_COLPM2]; + ANTIC_cl[C_PF3 | C_PM3] = colour_translation_table[col2 | GTIA_COLPM3]; + ANTIC_cl[C_PF3 | C_PM23] = colour_translation_table[col2 | GTIA_COLPM2 | GTIA_COLPM3]; + ANTIC_cl[C_HI2 | C_PM2] = colour_translation_table[hi | (GTIA_COLPM2 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM3] = colour_translation_table[hi | (GTIA_COLPM3 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM23] = colour_translation_table[hi | ((GTIA_COLPM2 | GTIA_COLPM3) & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM25] = colour_translation_table[hi2 | (GTIA_COLPM2 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM35] = colour_translation_table[hi2 | (GTIA_COLPM3 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM235] = colour_translation_table[hi2 | ((GTIA_COLPM2 | GTIA_COLPM3) & 0xf0)]; + } + else { + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF2 | C_PM3] = ANTIC_cl[C_PF2 | C_PM2] = colour_translation_table[col]; + ANTIC_cl[C_PF3 | C_PM23] = ANTIC_cl[C_PF3 | C_PM3] = ANTIC_cl[C_PF3 | C_PM2] = colour_translation_table[col2]; + ANTIC_cl[C_HI2 | C_PM23] = ANTIC_cl[C_HI2 | C_PM3] = ANTIC_cl[C_HI2 | C_PM2] = colour_translation_table[hi]; + } +#else /* USE_COLOUR_TRANSLATION_TABLE */ + UWORD cword = 0; + UWORD cword2 = 0; + if ((byte & 3) == 0) { + cword = ANTIC_cl[C_PF0]; + cword2 = ANTIC_cl[C_PF1]; + } + if ((byte & 0xc) == 0) { + ANTIC_cl[C_PF0 | C_PM0] = cword | ANTIC_cl[C_PM0]; + ANTIC_cl[C_PF0 | C_PM1] = cword | ANTIC_cl[C_PM1]; + ANTIC_cl[C_PF0 | C_PM01] = cword | ANTIC_cl[C_PM01]; + ANTIC_cl[C_PF1 | C_PM0] = cword2 | ANTIC_cl[C_PM0]; + ANTIC_cl[C_PF1 | C_PM1] = cword2 | ANTIC_cl[C_PM1]; + ANTIC_cl[C_PF1 | C_PM01] = cword2 | ANTIC_cl[C_PM01]; + } + else { + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF0 | C_PM1] = ANTIC_cl[C_PF0 | C_PM0] = cword; + ANTIC_cl[C_PF1 | C_PM01] = ANTIC_cl[C_PF1 | C_PM1] = ANTIC_cl[C_PF1 | C_PM0] = cword2; + } + if (byte & 4) { + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PF2 | C_PM0] = ANTIC_cl[C_PF2]; + ANTIC_cl[C_PF3 | C_PM01] = ANTIC_cl[C_PF3 | C_PM1] = ANTIC_cl[C_PF3 | C_PM0] = ANTIC_cl[C_PF3]; + } + else { + ANTIC_cl[C_PF3 | C_PM0] = ANTIC_cl[C_PF2 | C_PM0] = ANTIC_cl[C_PM0]; + ANTIC_cl[C_PF3 | C_PM1] = ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PM1]; + ANTIC_cl[C_PF3 | C_PM01] = ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PM01]; + } + cword = cword2 = 0; + if ((byte & 9) == 0) { + cword = ANTIC_cl[C_PF2]; + cword2 = ANTIC_cl[C_PF3]; + } + if ((byte & 6) == 0) { + ANTIC_cl[C_PF2 | C_PM2] = cword | ANTIC_cl[C_PM2]; + ANTIC_cl[C_PF2 | C_PM3] = cword | ANTIC_cl[C_PM3]; + ANTIC_cl[C_PF2 | C_PM23] = cword | ANTIC_cl[C_PM23]; + ANTIC_cl[C_PF3 | C_PM2] = cword2 | ANTIC_cl[C_PM2]; + ANTIC_cl[C_PF3 | C_PM3] = cword2 | ANTIC_cl[C_PM3]; + ANTIC_cl[C_PF3 | C_PM23] = cword2 | ANTIC_cl[C_PM23]; + } + else { + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF2 | C_PM3] = ANTIC_cl[C_PF2 | C_PM2] = cword; + ANTIC_cl[C_PF3 | C_PM23] = ANTIC_cl[C_PF3 | C_PM3] = ANTIC_cl[C_PF3 | C_PM2] = cword2; + } +#endif /* USE_COLOUR_TRANSLATION_TABLE */ + if (byte & 1) { + ANTIC_cl[C_PF1 | C_PM2] = ANTIC_cl[C_PF0 | C_PM2] = ANTIC_cl[C_PM2]; + ANTIC_cl[C_PF1 | C_PM3] = ANTIC_cl[C_PF0 | C_PM3] = ANTIC_cl[C_PM3]; + ANTIC_cl[C_PF1 | C_PM23] = ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PM23]; + } + else { + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF0 | C_PM3] = ANTIC_cl[C_PF0 | C_PM2] = ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM23] = ANTIC_cl[C_PF1 | C_PM3] = ANTIC_cl[C_PF1 | C_PM2] = ANTIC_cl[C_PF1]; + } + if ((byte & 0xf) == 0xc) { + ANTIC_cl[C_PF0 | C_PM0123] = ANTIC_cl[C_PF0 | C_PM123] = ANTIC_cl[C_PF0 | C_PM023] = ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM0123] = ANTIC_cl[C_PF1 | C_PM123] = ANTIC_cl[C_PF1 | C_PM023] = ANTIC_cl[C_PF1]; + } + else + ANTIC_cl[C_PF0 | C_PM0123] = ANTIC_cl[C_PF0 | C_PM123] = ANTIC_cl[C_PF0 | C_PM023] = + ANTIC_cl[C_PF1 | C_PM0123] = ANTIC_cl[C_PF1 | C_PM123] = ANTIC_cl[C_PF1 | C_PM023] = GTIA_COLOUR_BLACK; + if (byte & 0xf) { + ANTIC_cl[C_PF0 | C_PM25] = ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM25] = ANTIC_cl[C_PF1]; + ANTIC_cl[C_PF3 | C_PM25] = ANTIC_cl[C_PF2 | C_PM25] = ANTIC_cl[C_PM25] = GTIA_COLOUR_BLACK; + } + else { + ANTIC_cl[C_PF0 | C_PM235] = ANTIC_cl[C_PF0 | C_PM35] = ANTIC_cl[C_PF0 | C_PM25] = + ANTIC_cl[C_PF1 | C_PM235] = ANTIC_cl[C_PF1 | C_PM35] = ANTIC_cl[C_PF1 | C_PM25] = ANTIC_cl[C_PF3]; + ANTIC_cl[C_PF3 | C_PM25] = ANTIC_cl[C_PF2 | C_PM25] = ANTIC_cl[C_PM25] = ANTIC_cl[C_PF3 | C_PM2]; + ANTIC_cl[C_PF3 | C_PM35] = ANTIC_cl[C_PF2 | C_PM35] = ANTIC_cl[C_PM35] = ANTIC_cl[C_PF3 | C_PM3]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23]; + } + } + pm_lookup_ptr = pm_lookup_table[prior_to_pm_lookup[byte & 0x3f]]; + draw_antic_0_ptr = byte < 0x80 ? draw_antic_0 : byte < 0xc0 ? draw_antic_0_gtia10 : draw_antic_0_gtia11; + if (byte < 0x40 && (GTIA_PRIOR >= 0x40 || gtia_bug_active) && (anticmode == 2 || anticmode == 3 || anticmode == 0xf) && ANTIC_XPOS >= ((ANTIC_DMACTL & 3) == 3 ? 16 : 18)) { + /* A GTIA Mode was active, and no longer is. An ANTIC hi-res mode is being used. GTIA is no longer set in hi-res mode */ + if (anticmode == 2 || anticmode == 3) draw_antic_ptr = draw_antic_2_gtia_bug; + else if (anticmode == 0xf) draw_antic_ptr = draw_antic_f_gtia_bug; + gtia_bug_active = TRUE; + } + else + draw_antic_ptr = draw_antic_table[byte >> 6][anticmode]; +} + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + +void ANTIC_PutByte(UWORD addr, UBYTE byte) +{ + switch (addr & 0xf) { + case ANTIC_OFFSET_DLISTL: + ANTIC_dlist = (ANTIC_dlist & 0xff00) | byte; + break; + case ANTIC_OFFSET_DLISTH: + ANTIC_dlist = (ANTIC_dlist & 0x00ff) | (byte << 8); + break; + case ANTIC_OFFSET_DMACTL: +/* TODO: make this truly cycle-exact, update cpu2antic and antic2cpu, +add support for wider->narrow glitches including the interesting mode 6 +glitch */ +#ifdef NEW_CYCLE_EXACT + dmactl_changed=0; + /* has DMACTL width changed? */ + if ((byte & 3) != (ANTIC_DMACTL & 3) ){ + /* DMACTL width changed from 0 */ + if ((ANTIC_DMACTL & 3) == 0) { + int glitch_cycle = (3 + 32) - 8*(byte & 3); + int x = ANTIC_XPOS; + if((IR & 0x10) && ((byte & 3) != 3)){ + /*adjust for narrow or std HSCROL*/ + glitch_cycle -= 8; + } + /*ANTIC doesn't fetch and display data if the*/ + /*DMACTL width changes from zero after this */ + /*cycle. Instead, it displays a blank scan */ + /*line for modes other than 23F and for 23F */ + /*it displays a glitched line after the change*/ + if(x >= glitch_cycle){ + if(ANTIC_DRAWING_SCREEN){ + ANTIC_UpdateScanline(); + set_dmactl_bug(); + } + } + else { + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } + } + } + /* DMACTL width changed to 0 */ + else if ((byte & 3)==0) { + /* TODO: this is not 100% correct */ + if (ANTIC_DRAWING_SCREEN) { + int actual_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; + int antic_limit = ANTIC_cpu2antic_ptr[ANTIC_xpos_limit]; + ANTIC_UpdateScanline(); + /*fix for a minor glitch in fasteddie*/ + /*don't steal cycles after DMACTL off*/ + ANTIC_cpu2antic_ptr = &CYCLE_MAP_cpu2antic[0]; + ANTIC_antic2cpu_ptr = &CYCLE_MAP_antic2cpu[0]; + ANTIC_xpos = ANTIC_antic2cpu_ptr[actual_xpos]; + ANTIC_xpos_limit = ANTIC_antic2cpu_ptr[antic_limit]; + } + /* DMACTL width has changed and not to 0 and not from 0 */ + } + else { + /* DMACTL width has increased and no HSCROL */ + if (((byte & 3) > (ANTIC_DMACTL & 3)) && !(IR & 0x10)) { + int x; /* the change cycle */ + int left_glitch_cycle = 0; + int right_glitch_cycle = 0; + x = ANTIC_XPOS; + if (((ANTIC_DMACTL & 3) == 2) && ((byte & 3) == 3)) { /* Normal->Wide */ + left_glitch_cycle = 11; + right_glitch_cycle = 18; + } + else if (((ANTIC_DMACTL & 3) == 1) && ((byte & 3) == 3)) { /* Narrow->Wide */ + left_glitch_cycle = 11; + right_glitch_cycle = 26; + } + else if (((ANTIC_DMACTL & 3) == 1) && ((byte & 3) == 2)) { /* Narrow->Normal */ + left_glitch_cycle = 19; + right_glitch_cycle = 27; + } + /* change occurs during drawing of line */ + /* delay change till next line */ + if (x > right_glitch_cycle) { + dmactl_changed = 1; + delayed_DMACTL = byte; + break; + /* change occurs during 'glitch' region */ + } + else if (x >= left_glitch_cycle && x <= right_glitch_cycle && anticmode > 1) { + set_dmactl_bug(); + } + } + else { + /* DMACTL width has decreased or HSCROL */ + /* TODO: this is not 100% correct */ + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } + } + } + } +#endif /* NEW_CYCLE_EXACT */ + ANTIC_DMACTL = byte; +#if defined(BASIC) || defined(CURSES_BASIC) + break; +#else + switch (byte & 0x03) { + case 0x00: + /* no antic_load when screen off */ + /* chars_read[NORMAL0] = 0; + chars_read[NORMAL1] = 0; + chars_read[NORMAL2] = 0; + chars_read[SCROLL0] = 0; + chars_read[SCROLL1] = 0; + chars_read[SCROLL2] = 0; */ + /* no draw_antic_* when screen off */ + /* chars_displayed[NORMAL0] = 0; + chars_displayed[NORMAL1] = 0; + chars_displayed[NORMAL2] = 0; + chars_displayed[SCROLL0] = 0; + chars_displayed[SCROLL1] = 0; + chars_displayed[SCROLL2] = 0; + x_min[NORMAL0] = 0; + x_min[NORMAL1] = 0; + x_min[NORMAL2] = 0; + x_min[SCROLL0] = 0; + x_min[SCROLL1] = 0; + x_min[SCROLL2] = 0; + ch_offset[NORMAL0] = 0; + ch_offset[NORMAL1] = 0; + ch_offset[NORMAL2] = 0; + ch_offset[SCROLL0] = 0; + ch_offset[SCROLL1] = 0; + ch_offset[SCROLL2] = 0; */ + /* no borders when screen off, only background */ + /* left_border_chars = 48 - LCHOP - RCHOP; + right_border_start = 0; */ + break; + case 0x01: + chars_read[NORMAL0] = 32; + chars_read[NORMAL1] = 16; + chars_read[NORMAL2] = 8; + chars_read[SCROLL0] = 40; + chars_read[SCROLL1] = 20; + chars_read[SCROLL2] = 10; + chars_displayed[NORMAL0] = 32; + chars_displayed[NORMAL1] = 16; + chars_displayed[NORMAL2] = 8; + x_min[NORMAL0] = 32; + x_min[NORMAL1] = 32; + x_min[NORMAL2] = 32; + ch_offset[NORMAL0] = 0; + ch_offset[NORMAL1] = 0; + ch_offset[NORMAL2] = 0; + font_cycles[NORMAL0] = load_cycles[NORMAL0] = 32; + font_cycles[NORMAL1] = load_cycles[NORMAL1] = 16; + load_cycles[NORMAL2] = 8; + before_cycles[NORMAL0] = BEFORE_CYCLES; + before_cycles[SCROLL0] = BEFORE_CYCLES + 8; + extra_cycles[NORMAL0] = 7 + BEFORE_CYCLES; + extra_cycles[SCROLL0] = 8 + BEFORE_CYCLES + 8; + left_border_chars = 8 - LCHOP; + right_border_start = (ATARI_WIDTH - 64) / 2; + break; + case 0x02: + chars_read[NORMAL0] = 40; + chars_read[NORMAL1] = 20; + chars_read[NORMAL2] = 10; + chars_read[SCROLL0] = 48; + chars_read[SCROLL1] = 24; + chars_read[SCROLL2] = 12; + chars_displayed[NORMAL0] = 40; + chars_displayed[NORMAL1] = 20; + chars_displayed[NORMAL2] = 10; + x_min[NORMAL0] = 16; + x_min[NORMAL1] = 16; + x_min[NORMAL2] = 16; + ch_offset[NORMAL0] = 0; + ch_offset[NORMAL1] = 0; + ch_offset[NORMAL2] = 0; + font_cycles[NORMAL0] = load_cycles[NORMAL0] = 40; + font_cycles[NORMAL1] = load_cycles[NORMAL1] = 20; + load_cycles[NORMAL2] = 10; + before_cycles[NORMAL0] = BEFORE_CYCLES + 8; + before_cycles[SCROLL0] = BEFORE_CYCLES + 16; + extra_cycles[NORMAL0] = 8 + BEFORE_CYCLES + 8; + extra_cycles[SCROLL0] = 7 + BEFORE_CYCLES + 16; + left_border_chars = 4 - LCHOP; + right_border_start = (ATARI_WIDTH - 32) / 2; + break; + case 0x03: + chars_read[NORMAL0] = 48; + chars_read[NORMAL1] = 24; + chars_read[NORMAL2] = 12; + chars_read[SCROLL0] = 48; + chars_read[SCROLL1] = 24; + chars_read[SCROLL2] = 12; + chars_displayed[NORMAL0] = 42; + chars_displayed[NORMAL1] = 22; + chars_displayed[NORMAL2] = 12; + x_min[NORMAL0] = 12; + x_min[NORMAL1] = 8; + x_min[NORMAL2] = 0; + ch_offset[NORMAL0] = 3; + ch_offset[NORMAL1] = 1; + ch_offset[NORMAL2] = 0; + font_cycles[NORMAL0] = load_cycles[NORMAL0] = 47; + font_cycles[NORMAL1] = load_cycles[NORMAL1] = 24; + load_cycles[NORMAL2] = 12; + before_cycles[NORMAL0] = BEFORE_CYCLES + 16; + before_cycles[SCROLL0] = BEFORE_CYCLES + 16; + extra_cycles[NORMAL0] = 7 + BEFORE_CYCLES + 16; + extra_cycles[SCROLL0] = 7 + BEFORE_CYCLES + 16; + left_border_chars = 3 - LCHOP; + right_border_start = (ATARI_WIDTH - 8) / 2; + break; + } + + ANTIC_missile_dma_enabled = (byte & 0x0c); /* no player dma without missile */ + ANTIC_player_dma_enabled = (byte & 0x08); + singleline = (byte & 0x10); + ANTIC_player_flickering = ((ANTIC_player_dma_enabled | ANTIC_player_gra_enabled) == 0x02); + ANTIC_missile_flickering = ((ANTIC_missile_dma_enabled | ANTIC_missile_gra_enabled) == 0x01); + + byte = ANTIC_HSCROL; /* update horizontal scroll data */ +/* ******* FALLTHROUGH ******* */ + case ANTIC_OFFSET_HSCROL: +/* TODO: make this truely cycle exact, and update cpu2antic and antic2cpu */ +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + ANTIC_HSCROL = byte &= 0x0f; + if (ANTIC_DMACTL & 3) { + chars_displayed[SCROLL0] = chars_displayed[NORMAL0]; + ch_offset[SCROLL0] = 4 - (byte >> 2); + x_min[SCROLL0] = x_min[NORMAL0]; + if (byte & 3) { + x_min[SCROLL0] += (byte & 3) - 4; + chars_displayed[SCROLL0]++; + ch_offset[SCROLL0]--; + } + chars_displayed[SCROLL2] = chars_displayed[NORMAL2]; + if ((ANTIC_DMACTL & 3) == 3) { /* wide playfield */ + ch_offset[SCROLL0]--; + if (byte == 4 || byte == 12) + chars_displayed[SCROLL1] = 21; + else + chars_displayed[SCROLL1] = 22; + if (byte <= 4) { + x_min[SCROLL1] = byte + 8; + ch_offset[SCROLL1] = 1; + } + else if (byte <= 12) { + x_min[SCROLL1] = byte; + ch_offset[SCROLL1] = 0; + } + else { + x_min[SCROLL1] = byte - 8; + ch_offset[SCROLL1] = -1; + } + /* technically, the part below is wrong */ + /* scrolling in mode 8,9 with HSCROL=13,14,15 */ + /* will set x_min=13,14,15 > 4*LCHOP = 12 */ + /* so that nothing is drawn on the far left side */ + /* of the screen. We could fix this, but only */ + /* by setting x_min to be negative. */ + x_min[SCROLL2] = byte; + ch_offset[SCROLL2] = 0; + } + else { + chars_displayed[SCROLL1] = chars_displayed[NORMAL1]; + ch_offset[SCROLL1] = 2 - (byte >> 3); + x_min[SCROLL1] = x_min[NORMAL0]; + if (byte) { + if (byte & 7) { + x_min[SCROLL1] += (byte & 7) - 8; + chars_displayed[SCROLL1]++; + ch_offset[SCROLL1]--; + } + x_min[SCROLL2] = x_min[NORMAL2] + byte - 16; + chars_displayed[SCROLL2]++; + ch_offset[SCROLL2] = 0; + } + else { + x_min[SCROLL2] = x_min[NORMAL2]; + ch_offset[SCROLL2] = 1; + } + } + + if (ANTIC_DMACTL & 2) { /* normal & wide playfield */ + load_cycles[SCROLL0] = 47 - (byte >> 2); + font_cycles[SCROLL0] = (47 * 4 + 1 - byte) >> 2; + load_cycles[SCROLL1] = (24 * 8 + 3 - byte) >> 3; + font_cycles[SCROLL1] = (24 * 8 + 1 - byte) >> 3; + load_cycles[SCROLL2] = byte < 0xc ? 12 : 11; + } + else { /* narrow playfield */ + font_cycles[SCROLL0] = load_cycles[SCROLL0] = 40; + font_cycles[SCROLL1] = load_cycles[SCROLL1] = 20; + load_cycles[SCROLL2] = 16; + } + } + break; + case ANTIC_OFFSET_VSCROL: + ANTIC_VSCROL = byte & 0x0f; + if (vscrol_off) { + lastline = ANTIC_VSCROL; + if (ANTIC_XPOS < VSCOF_C) + need_dl = dctr == lastline; + } + break; + case ANTIC_OFFSET_PMBASE: + ANTIC_PMBASE = byte; + pmbase_d = (byte & 0xfc) << 8; + pmbase_s = pmbase_d & 0xf8ff; + break; + case ANTIC_OFFSET_CHACTL: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + update_scanline_invert(); + } +#endif + invert_mask = byte & 2 ? 0x80 : 0; +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + update_scanline_blank(); + } +#endif + blank_mask = byte & 1 ? 0xe0 : 0x60; + if ((ANTIC_CHACTL ^ byte) & 4) { +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + /* timing for flip is the same as chbase */ + update_scanline_chbase(); + } +#endif + chbase_20 ^= 7; + } + ANTIC_CHACTL = byte; + break; + case ANTIC_OFFSET_CHBASE: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + update_scanline_chbase(); + } +#endif + ANTIC_CHBASE = byte; + chbase_20 = (byte & 0xfe) << 8; + if (ANTIC_CHACTL & 4) + chbase_20 ^= 7; + break; +#endif /* defined(BASIC) || defined(CURSES_BASIC) */ + case ANTIC_OFFSET_WSYNC: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + if (ANTIC_xpos <= ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C] && ANTIC_xpos_limit >= ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C]) + if (ANTIC_cpu2antic_ptr[ANTIC_xpos + 1] == ANTIC_cpu2antic_ptr[ANTIC_xpos] + 1) { + /* antic does not steal the current cycle */ +/* note that if ANTIC_WSYNC_C is a stolen cycle, then ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C+1]-1 corresponds +to the last cpu cycle < ANTIC_WSYNC_C. Then the cpu will see this cycle if WSYNC +is not delayed, since it really occurred one cycle after the STA WSYNC. But if +WSYNC is "delayed" then ANTIC_xpos is the next cpu cycle after ANTIC_WSYNC_C (which was stolen +), so it is one greater than the above value. EG if ANTIC_WSYNC_C=10 and is stolen +(and let us say cycle 9,11 are also stolen, and 8,12 are not), then in the first +case we have ANTIC_cpu2antic_ptr[ANTIC_WSYNC_C+1]-1 = 8 and in the 2nd =12 */ + ANTIC_xpos = ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C + 1] - 1; + } + else { + ANTIC_xpos = ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C + 1]; + } + else { + ANTIC_wsync_halt = TRUE; + ANTIC_xpos = ANTIC_xpos_limit; + if (ANTIC_cpu2antic_ptr[ANTIC_xpos + 1] == ANTIC_cpu2antic_ptr[ANTIC_xpos] + 1) { + /* antic does not steal the current cycle */ + ANTIC_delayed_wsync = 0; + } + else { + ANTIC_delayed_wsync = 1; + } + } + } + else { + ANTIC_delayed_wsync = 0; +#endif /* NEW_CYCLE_EXACT */ + if (ANTIC_xpos <= ANTIC_WSYNC_C && ANTIC_xpos_limit >= ANTIC_WSYNC_C) + ANTIC_xpos = ANTIC_WSYNC_C; + else { + ANTIC_wsync_halt = TRUE; + ANTIC_xpos = ANTIC_xpos_limit; + } +#ifdef NEW_CYCLE_EXACT + } +#endif /* NEW_CYCLE_EXACT */ + break; + case ANTIC_OFFSET_NMIEN: + ANTIC_NMIEN = byte; + break; + case ANTIC_OFFSET_NMIRES: + ANTIC_NMIST = 0x1f; + break; + default: + break; + } +} + +/* State ------------------------------------------------------------------- */ + +#ifndef BASIC + +void ANTIC_StateSave(void) +{ + StateSav_SaveUBYTE(&ANTIC_DMACTL, 1); + StateSav_SaveUBYTE(&ANTIC_CHACTL, 1); + StateSav_SaveUBYTE(&ANTIC_HSCROL, 1); + StateSav_SaveUBYTE(&ANTIC_VSCROL, 1); + StateSav_SaveUBYTE(&ANTIC_PMBASE, 1); + StateSav_SaveUBYTE(&ANTIC_CHBASE, 1); + StateSav_SaveUBYTE(&ANTIC_NMIEN, 1); + StateSav_SaveUBYTE(&ANTIC_NMIST, 1); + StateSav_SaveUBYTE(&IR, 1); + StateSav_SaveUBYTE(&anticmode, 1); + StateSav_SaveUBYTE(&dctr, 1); + StateSav_SaveUBYTE(&lastline, 1); + StateSav_SaveUBYTE(&need_dl, 1); + StateSav_SaveUBYTE(&vscrol_off, 1); + + StateSav_SaveUWORD(&ANTIC_dlist, 1); + StateSav_SaveUWORD(&screenaddr, 1); + + StateSav_SaveINT(&ANTIC_xpos, 1); + StateSav_SaveINT(&ANTIC_xpos_limit, 1); + StateSav_SaveINT(&ANTIC_ypos, 1); +} + +void ANTIC_StateRead(void) +{ + StateSav_ReadUBYTE(&ANTIC_DMACTL, 1); + StateSav_ReadUBYTE(&ANTIC_CHACTL, 1); + StateSav_ReadUBYTE(&ANTIC_HSCROL, 1); + StateSav_ReadUBYTE(&ANTIC_VSCROL, 1); + StateSav_ReadUBYTE(&ANTIC_PMBASE, 1); + StateSav_ReadUBYTE(&ANTIC_CHBASE, 1); + StateSav_ReadUBYTE(&ANTIC_NMIEN, 1); + StateSav_ReadUBYTE(&ANTIC_NMIST, 1); + StateSav_ReadUBYTE(&IR, 1); + StateSav_ReadUBYTE(&anticmode, 1); + StateSav_ReadUBYTE(&dctr, 1); + StateSav_ReadUBYTE(&lastline, 1); + StateSav_ReadUBYTE(&need_dl, 1); + StateSav_ReadUBYTE(&vscrol_off, 1); + + StateSav_ReadUWORD(&ANTIC_dlist, 1); + StateSav_ReadUWORD(&screenaddr, 1); + + StateSav_ReadINT(&ANTIC_xpos, 1); + StateSav_ReadINT(&ANTIC_xpos_limit, 1); + StateSav_ReadINT(&ANTIC_ypos, 1); + + ANTIC_PutByte(ANTIC_OFFSET_DMACTL, ANTIC_DMACTL); + ANTIC_PutByte(ANTIC_OFFSET_CHACTL, ANTIC_CHACTL); + ANTIC_PutByte(ANTIC_OFFSET_PMBASE, ANTIC_PMBASE); + ANTIC_PutByte(ANTIC_OFFSET_CHBASE, ANTIC_CHBASE); +} + +#endif /* BASIC */ diff --git a/MCUME_pico/pico5200/antic.h b/MCUME_pico/pico5200/antic.h new file mode 100644 index 0000000..0a89e66 --- /dev/null +++ b/MCUME_pico/pico5200/antic.h @@ -0,0 +1,136 @@ +#ifndef ANTIC_H_ +#define ANTIC_H_ + +#include "atari.h" +/* + * Offset to registers in custom relative to start of antic memory addresses. + */ + +#define ANTIC_OFFSET_DMACTL 0x00 +#define ANTIC_OFFSET_CHACTL 0x01 +#define ANTIC_OFFSET_DLISTL 0x02 +#define ANTIC_OFFSET_DLISTH 0x03 +#define ANTIC_OFFSET_HSCROL 0x04 +#define ANTIC_OFFSET_VSCROL 0x05 +#define ANTIC_OFFSET_PMBASE 0x07 +#define ANTIC_OFFSET_CHBASE 0x09 +#define ANTIC_OFFSET_WSYNC 0x0a +#define ANTIC_OFFSET_VCOUNT 0x0b +#define ANTIC_OFFSET_PENH 0x0c +#define ANTIC_OFFSET_PENV 0x0d +#define ANTIC_OFFSET_NMIEN 0x0e +#define ANTIC_OFFSET_NMIRES 0x0f +#define ANTIC_OFFSET_NMIST 0x0f + +extern UBYTE ANTIC_CHACTL; +extern UBYTE ANTIC_CHBASE; +extern UWORD ANTIC_dlist; +extern UBYTE ANTIC_DMACTL; +extern UBYTE ANTIC_HSCROL; +extern UBYTE ANTIC_NMIEN; +extern UBYTE ANTIC_NMIST; +extern UBYTE ANTIC_PMBASE; +extern UBYTE ANTIC_VSCROL; + +extern int ANTIC_break_ypos; +extern int ANTIC_ypos; +extern int ANTIC_wsync_halt; + +/* Current clock cycle in a scanline. + Normally 0 <= ANTIC_xpos && ANTIC_xpos < ANTIC_LINE_C, but in some cases ANTIC_xpos >= ANTIC_LINE_C, + which means that we are already in line (ypos + 1). */ +extern int ANTIC_xpos; + +/* ANTIC_xpos limit for the currently running 6502 emulation. */ +extern int ANTIC_xpos_limit; + +/* Main clock value at the beginning of the current scanline. */ +extern unsigned int ANTIC_screenline_cpu_clock; + +/* Current main clock value. */ +#define ANTIC_CPU_CLOCK (ANTIC_screenline_cpu_clock + ANTIC_XPOS) + +#define ANTIC_NMIST_C 6 +#define ANTIC_NMI_C 12 + +/* Number of cycles per scanline. */ +#define ANTIC_LINE_C 114 + +/* STA WSYNC resumes here. */ +#define ANTIC_WSYNC_C 106 + +/* Number of memory refresh cycles per scanline. + In the first scanline of a font mode there are actually less than ANTIC_DMAR + memory refresh cycles. */ +#define ANTIC_DMAR 9 + +extern int ANTIC_artif_mode; +extern int ANTIC_artif_new; + +extern UBYTE ANTIC_PENH_input; +extern UBYTE ANTIC_PENV_input; + +int ANTIC_Initialise(void); +void ANTIC_Reset(void); +void ANTIC_Frame(int draw_display); +UBYTE ANTIC_GetByte(UWORD addr, int no_side_effects); +void ANTIC_PutByte(UWORD addr, UBYTE byte); + +UBYTE ANTIC_GetDLByte(UWORD *paddr); +UWORD ANTIC_GetDLWord(UWORD *paddr); + +/* always call ANTIC_UpdateArtifacting after changing ANTIC_artif_mode */ +void ANTIC_UpdateArtifacting(void); + +/* Video memory access */ +void ANTIC_VideoMemset(UBYTE *ptr, UBYTE val, ULONG size); +void ANTIC_VideoPutByte(UBYTE *ptr, UBYTE val); + +/* GTIA calls it on a write to PRIOR */ +void ANTIC_SetPrior(UBYTE prior); + +/* Saved states */ +void ANTIC_StateSave(void); +void ANTIC_StateRead(void); + +/* Pointer to 16 KB seen by ANTIC in 0x4000-0x7fff. + If it's the same what the CPU sees (and what's in memory[0x4000..0x7fff], + then NULL. */ +extern const UBYTE *ANTIC_xe_ptr; + +/* PM graphics for GTIA */ +extern int ANTIC_player_dma_enabled; +extern int ANTIC_missile_dma_enabled; +extern int ANTIC_player_gra_enabled; +extern int ANTIC_missile_gra_enabled; +extern int ANTIC_player_flickering; +extern int ANTIC_missile_flickering; + +/* ANTIC colour lookup tables, used by GTIA */ +extern UWORD ANTIC_cl[128]; +extern ULONG ANTIC_lookup_gtia9[16]; +extern ULONG ANTIC_lookup_gtia11[16]; +extern UWORD ANTIC_hires_lookup_l[128]; + +#ifdef NEW_CYCLE_EXACT +#define ANTIC_NOT_DRAWING -999 +#define ANTIC_DRAWING_SCREEN (ANTIC_cur_screen_pos!=ANTIC_NOT_DRAWING) +extern int ANTIC_delayed_wsync; +extern int ANTIC_cur_screen_pos; +extern const int *ANTIC_cpu2antic_ptr; +extern const int *ANTIC_antic2cpu_ptr; +void ANTIC_UpdateScanline(void); +void ANTIC_UpdateScanlinePrior(UBYTE byte); + +#define ANTIC_XPOS ( ANTIC_DRAWING_SCREEN ? ANTIC_cpu2antic_ptr[ANTIC_xpos] : ANTIC_xpos ) +#else +#define ANTIC_XPOS ANTIC_xpos +#endif /* NEW_CYCLE_EXACT */ + +#ifndef NO_SIMPLE_PAL_BLENDING +/* Set to 1 to enable simplified emulation of PAL blending, that uses only + the standard 8-bit palette. */ +extern int ANTIC_pal_blending; +#endif /* NO_SIMPLE_PAL_BLENDING */ + +#endif /* ANTIC_H_ */ diff --git a/MCUME_pico/pico5200/atari.h b/MCUME_pico/pico5200/atari.h new file mode 100644 index 0000000..f9cbd87 --- /dev/null +++ b/MCUME_pico/pico5200/atari.h @@ -0,0 +1,63 @@ +#ifndef __ATARI__ +#define __ATARI__ + +// define globals +#define MEMORY_SIZE 0xC000 //0x10000 + +#define ATARI_WIDTH 384 +#define ATARI_HEIGHT 240 +#define TV_PAL 312 +#define TV_NTSC 262 + +//#define DIRTYRECT 1 +//#define WORDS_UNALIGNED_OK 1 +//#define ALTERNATE_LOOP_COUNTERS 1 +//#define NEW_CYCLE_EXACT 1 +//#define USE_CURSES 1 +//#define WORDS_BIGENDIAN 1 +//#define SYNCHRONIZED_SOUND 1 +#define CLIP_SOUND 1 +#define STEREO_SOUND 1 +#define POKEYSND_SIGNED_SAMPLES 1 +#define PAGED_MEM 1 +#define SOUND 1 +#define NO_SIMPLE_PAL_BLENDING 1 +#define ANALOGJOY 1 + +#define max_ypos tv_mode + +extern int tv_mode; + + + +#ifndef _TYPEDEF_H +#define _TYPEDEF_H + +//data types +#define UBYTE unsigned char +#define UWORD unsigned short +#define ULONG unsigned int + +#define SBYTE signed char +#define SWORD signed short +#define SLONG signed int + +#define int8 char +#define int16 short +#define int32 int + +#define uint8 unsigned int8 +#define uint16 unsigned int16 +#define uint32 unsigned int32 +#ifndef FALSE +#define FALSE 0 +#endif +#ifndef TRUE +#define TRUE 1 +#endif + +#endif + + + +#endif diff --git a/MCUME_pico/pico5200/atari5200.c b/MCUME_pico/pico5200/atari5200.c new file mode 100644 index 0000000..473bf7a --- /dev/null +++ b/MCUME_pico/pico5200/atari5200.c @@ -0,0 +1,602 @@ +#include "atari5200.h" +#include +#include "memory.h" +#include "cpu.h" +#include "atari.h" +#include "pokey.h" +#include "rom.h" +#include "antic.h" +#include "gtia.h" +#include "colours.h" +#include "emuapi.h" +#if HAS_SND +#include "pokeysnd.h" +#endif + + +// Controllers +typedef struct +{ + // All values are 1 or 0, or perhaps not... + int left; + int right; + int up; + int down; + + unsigned char analog_h; + unsigned char analog_v; + + int trig; + int side_button; + + // These may be set to 1. The core handles clearing them. + // [BREAK] [ # ] [ 0 ] [ * ] + // [RESET] [ 9 ] [ 8 ] [ 7 ] + // [PAUSE] [ 6 ] [ 5 ] [ 4 ] + // [START] [ 3 ] [ 2 ] [ 1 ] + int key[16]; + int last_key_still_pressed; + + int lastRead; +} CONTROLLER; + + +#define POT_MAX 223 +#define POT_CENTRE 115 +#define POT_LEFT (POT_CENTRE-100) //15 +#define POT_RIGHT (POT_CENTRE+100) // 210 + +#define CONSOL 0xC01F + +#define NUM_16K_ROM_MAPS 200 + +typedef struct +{ // 80 bytes + char crc[8]; + int mapping; + char description[68]; +} Map16k_t; + + +// global variables +int tv_mode = TV_PAL; +//unsigned char mem[MEMORY_SIZE]; +unsigned char * memory=NULL; //mem; + +// local variables +static char logmsg[64]; + +static CONTROLLER cont1, cont2; +static int pot_max_left = POT_LEFT; +static int pot_max_right = POT_RIGHT; + +static int framesdrawn=0; + +/* MEMORY MAP INDEX (0 is invalid) +* 0-3FFF RAM (read/write) 1 +* 4000-BFFF ROM (ro) 2 +* C000-C0FF GTIA regs 3 +* D300-D3FF Serial??? 7 +* D400-D4FF ANTIC regs 4 +* E000 I/O expansion 5 +* E800-E8FF POKEY regs 6 +* EB00-EBFF also POKEY regs??? 6 +* F800-FFFF ROM (BIOS)(ro) 2 +*/ + + +// memory CPU read (load) handler +uint8 Atari_GetByte(uint16 addr) +{ + if (addr < 0xC000) { // MAPPER_RAM or MAPPER_ROM + return(memory[addr]); + } + else if (addr < 0xC100) { // MAPPER_GTIA + return GTIA_GetByte(addr,1); + } + else if ( (addr >= 0xD400) && (addr < 0xD500) ) { // MAPPER_ANTIC + return ANTIC_GetByte(addr,1); + } + else if ( (addr >= 0xE800) && (addr < 0xE900) ) { // MAPPER_POKEY + return POKEY_GetByte(addr,1); + } + else if ( (addr >= 0xEB00) && (addr < 0xEC00) ) { // MAPPER_POKEY mirror + return POKEY_GetByte(addr,1); + } + else if (addr >= 0xF800) { // MAPPER_ROM (bios) + return(BIOSData[addr-0xF800]); + } + + //case MAPPER_IOEXP: // I/O exp read + // return IOEXPread(addr); + + return 0xff; +} + +// memory CPU write (store) handler +void Atari_PutByte(uint16 addr, uint8 byte) +{ + if (addr < 0x4000) { // MAPPER_RAM + memory[addr] = byte; + } + else if (addr < 0xC000) { // MAPPER_ROM + } + else if (addr < 0xC100) { // MAPPER_GTIA + GTIA_PutByte(addr, byte); + } + else if ( (addr >= 0xD400) && (addr < 0xD500) ) { // MAPPER_ANTIC + ANTIC_PutByte(addr, byte); + } + else if ( (addr >= 0xE800) && (addr < 0xE900) ) { // MAPPER_POKEY + POKEY_PutByte(addr, byte); + } + else if ( (addr >= 0xEB00) && (addr < 0xEC00) ) { // MAPPER_POKEY mirror + POKEY_PutByte(addr, byte); + } + //else if (addr >= 0xF800) { // MAPPER_ROM (bios) + // POKEY_PutByte(addr, byte); + //} + + //case MAPPER_IOEXP: // I/O exp write + // IOEXPwrite(addr, byte); +} + + +// check keyboard and set kbcode on VBI +void INPUT_Scanline(void) +{ + // NB: 5200 will do a keyboard IRQ every 32 scanlines if a key is held down + CONTROLLER *which = NULL; + UBYTE consol=GTIA_GetByte(CONSOL,1); + switch (consol & 0x03) { + case 0: which = &cont1; break; + case 1: which = &cont2; break; + // 3 and 4 in the future + default: return; + } + + // "loose bit" (bit 5 of KBCODE) - fluctuates 0 or 1 randomly + uint8 loose_bit = (framesdrawn & 0x1) << 5; + + // Default to "key not pressed" + POKEY_KBCODE = loose_bit | 0x1F; + which->last_key_still_pressed = 0; + + for (int8 i = 0; i < 16; i++) + { + if (which->key[i]) + { + //emu_printi(i); +/* 2016-06-18 - commented out (reset in HostDoEvents()) + which->key[i] = 0; + which->last_key_still_pressed = 0; + + // Don't respond to the same thing twice in a row... + if (i == which->lastRead) + { + which->last_key_still_pressed = 1; // flag key still held + return; + } +*/ + if (i == which->lastRead) + which->last_key_still_pressed = 1; // flag key still held + + which->lastRead = i; + + // Write in the change + POKEY_KBCODE = (i << 1) | loose_bit | 0x1; + + // set KEY interrupt bit (bit 6) to 0 (key int req "on") + POKEY_IRQST &= 0xbf; + + // check irqen and do interrupt if bit 6 set + if(POKEY_IRQEN & 0x40) + { + CPU_GenerateIRQ(); + } + + return; + } + } + + // 2016-06-18 - Reset kbd irq if no key pressed + // NO - "POKEY_IRQST is latched, only reset by write to IRQEN" + //POKEY_IRQST |= 0x40; + + // If no keys are down at all, we can write anything again + which->lastRead = 0xFF; + + // This should in theory work but in practise breaks some games? + //POKEY_KBCODE = which->lastRead = 0xFF; +} + +uint8 INPUT_handle_trigger(uint16 POKEYreg) +{ + CONTROLLER *which; + switch (POKEYreg) + { + case 0: case 1: which = &cont1; if (which->trig) GTIA_TRIG[0]=0; else GTIA_TRIG[0]=1; break; + case 2: case 3: which = &cont2; if (which->trig) GTIA_TRIG[1]=0; else GTIA_TRIG[1]=1; break; + // 3 and 4 in the future + default: return 0x80; + } + + + // Top to bottom + if (POKEYreg & 1) + { +#if ANALOGJOY + return which->analog_v;; +#else + if (which->up) return pot_max_left; + else if (which->down) return pot_max_right; + else return POT_CENTRE; +#endif + } + else + { +#if ANALOGJOY + return which->analog_h;; +#else + if (which->left) return pot_max_left; + else if (which->right) return pot_max_right; + else return POT_CENTRE; +#endif + } +} + +uint8 INPUT_handle_skstat(uint16 POKEYreg) +{ + uint8 skstatreg = 0x0C; + UBYTE consol=GTIA_GetByte(CONSOL,1); + //emu_printi(consol&3); + switch(consol & 0x03) { + case 0 : // controller 1 + if(cont1.side_button) skstatreg &= 0x07; + if(cont1.last_key_still_pressed) skstatreg &= 0x0B; + break; + case 1 : // controller 2 + if(cont2.side_button) skstatreg &= 0x07; + if(cont2.last_key_still_pressed) skstatreg &= 0x0B; + break; + } + return skstatreg; +} + + + + + +static void load_CART(char * cartname) +{ + int i, mapnum, flen; + char sig[40]; + unsigned long crc32; + + flen = emu_FileSize(cartname); + + emu_FileOpen(cartname); + // set POT left and right values to default + pot_max_left = POT_LEFT; + pot_max_right = POT_RIGHT; + + // load cart into memory image + // Note: 5200 cartridge mapping has only a few + // variations, so this mess of code below + // works, and it avoids having a cartridge + // config file. + switch (flen) + { + case 32768: // 32k cart + for (i = 0; i < 32768; i++) memory[0x4000 + i] = emu_FileGetc(); + // get crc32 from 32k data + crc32 = calc_crc32(memory + 0x4000, 32768); + sprintf(logmsg, "32 Trying to load '%s', crc32=0x%08X\n", cartname, (unsigned int)crc32); + emu_printf(logmsg); + break; + case 16384: // 16k cart + // here we hack and load it twice (mapped like that?) + for (i = 0; i < 16384; i++) memory[0x4000 + i] = memory[0x8000 + i] = emu_FileGetc(); + + // get crc32 from 16k data + crc32 = calc_crc32(memory + 0x4000, 16384); + sprintf(logmsg, "16 Trying to load '%s', crc32=0x%08X\n", cartname, (unsigned int)crc32); + emu_printf(logmsg); + + // get cart "signature" + strncpy(sig, &memory[0xBFE8], 20); + sig[20] = 0; + //printf("Cart signature is %s\n", sig); + + // check for Moon Patrol + if (strcmp("@@@@@moon@patrol@@@@", sig) == 0) { + //printf("Mapping for Moon Patrol (16+16)\n"); + // already loaded correctly + break; + } + + // check for SW-Arcade + if (strncmp("asfilmLt", sig, 8) == 0) { + //printf("Mapping for SW-Arcade (16+16)\n"); + // already loaded correctly + break; + } + + // check for Super Pacman using start vector + if ((memory[0xBFFF] == 0x92) && (memory[0xBFFE] == 0x55)) { + //printf("Mapping for Super Pacman (16+16)\n"); + // already loaded correctly + break; + } + + // check for other carts with reset vec 8000h + // (eg: Space Shuttle) + if (memory[0xBFFF] == 0x80) { + //printf("Mapping for reset vec = 8000h (16+16)\n"); + // already loaded corectly + break; + } + + // Tempest + if (memory[0xBFFF] == 0x81) { + //printf("Mapping for reset vec = 81xxh eg: Tempest (16+16)\n"); + // already loaded corectly + break; + } + + + // PAM Diagnostics v2.0 + // NB: this seems to prevent the emu from crashing when running + // pamdiag2.bin + if ((memory[0xBFFF] == 0x9F) && (memory[0xBFFE] == 0xD0)) { + //printf("Mapping for reset vector = $9FD0 (PAM DIAG 2.0)\n"); + // move cart up by 0x1000 + break; + } + + + +#ifdef SKIP + // Notes: check for megamania cart + // 8K mirrored at 0x8000 and 0xA000, nothing from 0x4000-0x7FFF + // see if we have a 16k mapping for this cart in jum52.cfg + sprintf(sig, "%08X", crc32); + mapnum = 0; // invalid + + // initialise 16k rom maps + emu_printf("Allocating p16kMaps"); + int num16kMappings = 0; // pointer to 16k rom mappings and number of 16k rom mappings + Map16k_t * p16kMaps = (Map16k_t *)emu_TmpMemory(); //emu_Malloc(sizeof(Map16k_t) * NUM_16K_ROM_MAPS); + if (p16kMaps) memset(p16kMaps, 0, sizeof(Map16k_t) * NUM_16K_ROM_MAPS); + + for (i = 0; i < num16kMappings; i++) { + if (0 == strncmp(sig, p16kMaps[i].crc, 8)) { + mapnum = p16kMaps[i].mapping; + sprintf(logmsg, "Mapping %d found for crc=0x%s !\n", mapnum, sig); + emu_printf(logmsg); + i = num16kMappings; // exit search + } + } + //emu_printf("freeing p16kMaps"); + //emu_Free(p16kMaps); + // if the mapping was 16+16, then break, since we have loaded it 16+16 already + if (1 == mapnum) + break; +#endif + // default to 16k+8k mapping + emu_FileSeek(0); + for(i=0; i<16384; i++) memory[0x6000 + i] = emu_FileGetc(); + for(i=0; i<8192; i++) memory[0xA000 + i] = memory[0x8000 + i]; + break; + case 8192 : // 8k cart + // Load mirrored 4 times + for(i = 0; i < 8192; i++) + { + uint8 c = emu_FileGetc(); + memory[0x4000 + i] = c; + memory[0x6000 + i] = c; + memory[0x8000 + i] = c; + memory[0xA000 + i] = c; + } + // get crc32 from 8k data + crc32 = calc_crc32(memory + 0x4000, 8192); + sprintf(logmsg, "8k cart load '%s', crc32=0x%08X\n", cartname, (unsigned int)crc32); + emu_printf(logmsg); + break; + default: // oops! + // these rom dumps are strange, because some carts are 8K, yet + // all the dumps are either 16K or 32K! + sprintf(logmsg, "Cartridge ROM size not 16K or 32K. Unable to load."); + emu_printf(logmsg); + return -1; + break; + } + + // check for Pengo + if (strncmp("pengo", memory + 0xBFEF, 8) == 0) { + emu_printf("Pengo detected! Switching controller to Pengo mode."); + pot_max_left = 70; + pot_max_right = 170; + } + + // check for Centipede + if (strncmp("centipede", memory + 0xBFEF, 8) == 0) { + emu_printf("centipede detected! Switching controller to centipede mode."); + pot_max_left = (POT_CENTRE-10); + pot_max_right = (POT_CENTRE+10); + } + + // is cartridge PAL-compatible? + // (doesn't seem to work!) + //if(memory[0xBFE7] == 0x02) printf("Cart is PAL-compatible!\n"); + //else printf("Cart is *not* PAL-compatible.\n"); + + emu_FileClose(); +} + +static void Initialise(void) +{ + int i; + + emu_printf("Initialising ..."); + + // Set up memory area + memset(memory, 0, MEMORY_SIZE); + + // init controllers + memset(&cont1, 0, sizeof(CONTROLLER)); + memset(&cont2, 0, sizeof(CONTROLLER)); + + pot_max_left = POT_LEFT; + pot_max_right = POT_RIGHT; + cont1.analog_h = POT_CENTRE; + cont1.analog_v = POT_CENTRE; + cont2.analog_h = POT_CENTRE; + cont2.analog_v = POT_CENTRE; +} + +void emu_KeyboardOnDown(int keymodifer, int key) { +} + +void emu_KeyboardOnUp(int keymodifer, int key) { +} + + +void at5_Init(void) +{ + int i; + + // Palette + for (i = 0; i < PALETTE_SIZE; i++) + { + emu_SetPaletteEntry(R32(colourtable[i]), G32(colourtable[i]), B32(colourtable[i]), i); + } + +#if HAS_SND + emu_sndInit(); + POKEYSND_Init(POKEYSND_FREQ_17_EXACT, 44100, 1, POKEYSND_BIT16); +#endif + + emu_printf("Allocating RAM"); + if (memory == NULL) memory = emu_Malloc(MEMORY_SIZE); + + Initialise(); +} + +static int prevKey=-1; +static int countKey = 0; + +void at5_Step(void) +{ + //emu_printf("step"); + + int k,j; + j=emu_ReadKeys(); + k=emu_GetPad(); + + CONTROLLER * which; + + if (j & 0x8000) which=&cont2; + else which=&cont1; + + // Start + if (j & MASK_KEY_USER1) + which->key[12] = 1; + else + which->key[12] = 0; + + // 1 + if (j & MASK_KEY_USER3) + which->key[15] = 1; + else + which->key[15] = 0; + + // 2 + //if (j & MASK_KEY_USER4) + // which->key[14] = 1; + //else + // which->key[14] = 0; + + if (countKey) { + which->key[prevKey] = 1; + //emu_printi(cont1.key[prevKey]); + countKey--; + } + else { + if (prevKey>0) { + //emu_printf("resetting"); + which->key[prevKey] = 0; + prevKey=-1; + //emu_printi(cont1.key[prevKey]); + } + if (k) { + prevKey = k-1; + which->key[prevKey] = 1; + //emu_printi(cont1.key[prevKey]); + countKey = 4; + } + } + + // Joystick side button, trigger and directions + if (j & MASK_JOY2_BTN) + which->trig = 1; + else + which->trig = 0; + if (j & MASK_KEY_USER2) + which->side_button = 1; + else + which->side_button = 0; + if (j & MASK_JOY2_DOWN) + which->down = 1; + else + which->down = 0; + if (j & MASK_JOY2_UP) + which->up = 1; + else + which->up = 0; + if (j & MASK_JOY2_RIGHT) + which->left = 1; + else + which->left = 0; + if (j & MASK_JOY2_LEFT) + which->right = 1; + else + which->right = 0; + + which->analog_h = emu_ReadAnalogJoyX(0,230); + which->analog_v = emu_ReadAnalogJoyY(0,230); + + GTIA_Frame(); + ANTIC_Frame(1); + emu_DrawVsync(); + POKEY_Frame(); + //int i; + //for (i=0xC000; i< 0x10000; i++) + // if (memory[i] !=0) emu_printf("bug"); + + framesdrawn = framesdrawn +1; +} + + + +void at5_Start(char * cartname) +{ + int i; + + load_CART(cartname); + + emu_printf("antic"); + ANTIC_Initialise(); + emu_printf("gtia"); + GTIA_Initialise(); + emu_printf("pokey"); + POKEY_Initialise(); + GTIA_TRIG[0]=1; + GTIA_TRIG[1]=1; + GTIA_TRIG[2]=1; + GTIA_TRIG[3]=1; + emu_printf("6502 reset"); + CPU_Reset(); + + emu_printf("init done"); +} diff --git a/MCUME_pico/pico5200/atari5200.h b/MCUME_pico/pico5200/atari5200.h new file mode 100644 index 0000000..45088b1 --- /dev/null +++ b/MCUME_pico/pico5200/atari5200.h @@ -0,0 +1,4 @@ +extern void at5_Init(void); +extern void at5_Step(void); +extern void at5_Start(char * filename); + diff --git a/MCUME_pico/pico5200/colours.h b/MCUME_pico/pico5200/colours.h new file mode 100644 index 0000000..a31db53 --- /dev/null +++ b/MCUME_pico/pico5200/colours.h @@ -0,0 +1,68 @@ +const unsigned int colourtable[256] = +{ + 0x0, 0x1c1c1c, 0x393939, 0x595959, + 0x797979, 0x929292, 0xababab, 0xbcbcbc, + 0xcdcdcd, 0xd9d9d9, 0xe6e6e6, 0xececec, + 0xf2f2f2, 0xf8f8f8, 0xffffff, 0xffffff, + 0x391701, 0x5e2304, 0x833008, 0xa54716, + 0xc85f24, 0xe37820, 0xff911d, 0xffab1d, + 0xffc51d, 0xffce34, 0xffd84c, 0xffe651, + 0xfff456, 0xfff977, 0xffff98, 0xffff98, + 0x451904, 0x721e11, 0x9f241e, 0xb33a20, + 0xc85122, 0xe36920, 0xff811e, 0xff8c25, + 0xff982c, 0xffae38, 0xffc545, 0xffc559, + 0xffc66d, 0xffd587, 0xffe4a1, 0xffe4a1, + 0x4a1704, 0x7e1a0d, 0xb21d17, 0xc82119, + 0xdf251c, 0xec3b38, 0xfa5255, 0xfc6161, + 0xff706e, 0xff7f7e, 0xff8f8f, 0xff9d9e, + 0xffabad, 0xffb9bd, 0xffc7ce, 0xffc7ce, + 0x50568, 0x3b136d, 0x712272, 0x8b2a8c, + 0xa532a6, 0xb938ba, 0xcd3ecf, 0xdb47dd, + 0xea51eb, 0xf45ff5, 0xfe6dff, 0xfe7afd, + 0xff87fb, 0xff95fd, 0xffa4ff, 0xffa4ff, + 0x280479, 0x400984, 0x590f90, 0x70249d, + 0x8839aa, 0xa441c3, 0xc04adc, 0xd054ed, + 0xe05eff, 0xe96dff, 0xf27cff, 0xf88aff, + 0xff98ff, 0xfea1ff, 0xfeabff, 0xfeabff, + 0x35088a, 0x420aad, 0x500cd0, 0x6428d0, + 0x7945d0, 0x8d4bd4, 0xa251d9, 0xb058ec, + 0xbe60ff, 0xc56bff, 0xcc77ff, 0xd183ff, + 0xd790ff, 0xdb9dff, 0xdfaaff, 0xdfaaff, + 0x51e81, 0x626a5, 0x82fca, 0x263dd4, + 0x444cde, 0x4f5aee, 0x5a68ff, 0x6575ff, + 0x7183ff, 0x8091ff, 0x90a0ff, 0x97a9ff, + 0x9fb2ff, 0xafbeff, 0xc0cbff, 0xc0cbff, + 0xc048b, 0x2218a0, 0x382db5, 0x483ec7, + 0x584fda, 0x6159ec, 0x6b64ff, 0x7a74ff, + 0x8a84ff, 0x918eff, 0x9998ff, 0xa5a3ff, + 0xb1aeff, 0xb8b8ff, 0xc0c2ff, 0xc0c2ff, + 0x1d295a, 0x1d3876, 0x1d4892, 0x1c5cac, + 0x1c71c6, 0x3286cf, 0x489bd9, 0x4ea8ec, + 0x55b6ff, 0x70c7ff, 0x8cd8ff, 0x93dbff, + 0x9bdfff, 0xafe4ff, 0xc3e9ff, 0xc3e9ff, + 0x2f4302, 0x395202, 0x446103, 0x417a12, + 0x3e9421, 0x4a9f2e, 0x57ab3b, 0x5cbd55, + 0x61d070, 0x69e27a, 0x72f584, 0x7cfa8d, + 0x87ff97, 0x9affa6, 0xadffb6, 0xadffb6, + 0xa4108, 0xd540a, 0x10680d, 0x137d0f, + 0x169212, 0x19a514, 0x1cb917, 0x1ec919, + 0x21d91b, 0x47e42d, 0x6ef040, 0x78f74d, + 0x83ff5b, 0x9aff7a, 0xb2ff9a, 0xb2ff9a, + 0x4410b, 0x5530e, 0x66611, 0x77714, + 0x88817, 0x99b1a, 0xbaf1d, 0x48c41f, + 0x86d922, 0x8fe924, 0x99f927, 0xa8fc41, + 0xb7ff5b, 0xc9ff6e, 0xdcff81, 0xdcff81, + 0x2350f, 0x73f15, 0xc4a1c, 0x2d5f1e, + 0x4f7420, 0x598324, 0x649228, 0x82a12e, + 0xa1b034, 0xa9c13a, 0xb2d241, 0xc4d945, + 0xd6e149, 0xe4f04e, 0xf2ff53, 0xf2ff53, + 0x263001, 0x243803, 0x234005, 0x51541b, + 0x806931, 0x978135, 0xaf993a, 0xc2a73e, + 0xd5b543, 0xdbc03d, 0xe1cb38, 0xe2d836, + 0xe3e534, 0xeff258, 0xfbff7d, 0xfbff7d, + 0x401a02, 0x581f05, 0x702408, 0x8d3a13, + 0xab511f, 0xb56427, 0xbf7730, 0xd0853a, + 0xe19344, 0xeda04e, 0xf9ad58, 0xfcb75c, + 0xffc160, 0xffc671, 0xffcb83, 0xffcb83, +}; + diff --git a/MCUME_pico/pico5200/cpu.c b/MCUME_pico/pico5200/cpu.c new file mode 100644 index 0000000..cc73b28 --- /dev/null +++ b/MCUME_pico/pico5200/cpu.c @@ -0,0 +1,2444 @@ +/* + * cpu.c - 6502 CPU emulation + * + * Copyright (C) 1995-1998 David Firth + * Copyright (C) 1998-2005 Atari800 development team (see DOC/CREDITS) + * + * This file is part of the Atari800 emulator project which emulates + * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. + * + * Atari800 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. + * + * Atari800 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 Atari800; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + Configuration symbols + ===================== + + Define CPU65C02 if you don't want 6502 JMP() bug emulation. + Define CYCLES_PER_OPCODE to update ANTIC_xpos in each opcode's emulation. + Define MONITOR_BREAK if you want code breakpoints and execution history. + Define MONITOR_BREAKPOINTS if you want user-defined breakpoints. + Define MONITOR_PROFILE if you want 6502 opcode profiling. + Define MONITOR_TRACE if you want the code to be disassembled while it is executed. + Define NO_GOTO if you compile with GCC, but want switch() rather than goto *. + Define NO_V_FLAG_VARIABLE to don't use local (static) variable V for the V flag. + Define PC_PTR to emulate 6502 Program Counter using UBYTE *. + Define PREFETCH_CODE to always fetch 2 bytes after the opcode. + Define WRAP_64K to correctly emulate instructions that wrap at 64K. + Define WRAP_ZPAGE to prevent incorrect access to the address 0x0100 in zeropage + indirect mode. + + + Limitations & Known bugs + ======================== + + There is no emulation of the bug in the BRK instruction executed simultaneously + with another interrupt. + + The 6502 emulation ignores memory attributes for instruction fetch. + This is because the instruction must come from either RAM or ROM. + A program that executes instructions from within hardware addresses will fail + since there is never any usable code there. + + The 6502 emulation also ignores memory attributes for accesses to page 0 and page 1. + */ + + +#ifdef SKIP +#include "config.h" +#include +#include /* exit() */ + +#include "cpu.h" +#ifdef ASAP /* external project, see http://asap.sf.net */ +#include "asap_internal.h" +#else +#include "antic.h" +#include "atari.h" +#include "esc.h" +#include "memory.h" +#include "monitor.h" +#ifndef BASIC +#include "statesav.h" +#ifndef __PLUS +#include "ui.h" +#endif +#endif /* BASIC */ +#endif /* ASAP */ +#else + +#include +#include /* exit() */ +#include "cpu.h" +#include "antic.h" +#include "memory.h" + +#define ESC_Run(x) + +#endif + + +/* For Atari Basic loader */ +void (*CPU_rts_handler)(void) = NULL; + +/* 6502 instruction profiling */ +#ifdef MONITOR_PROFILE +int CPU_instruction_count[256]; +#endif + +/* Execution history */ +#ifdef MONITOR_BREAK +UWORD CPU_remember_PC[CPU_REMEMBER_PC_STEPS]; +UBYTE CPU_remember_op[CPU_REMEMBER_PC_STEPS][3]; +unsigned int CPU_remember_PC_curpos = 0; +int CPU_remember_xpos[CPU_REMEMBER_PC_STEPS]; +UWORD CPU_remember_JMP[CPU_REMEMBER_JMP_STEPS]; +unsigned int CPU_remember_jmp_curpos = 0; +#define INC_RET_NESTING MONITOR_ret_nesting++ +#else /* MONITOR_BREAK */ +#define INC_RET_NESTING +#endif /* MONITOR_BREAK */ + +UBYTE CPU_cim_encountered = FALSE; +UBYTE CPU_IRQ; + +#ifdef FALCON_CPUASM + +#if defined(PAGED_MEM) || defined(PAGED_ATTRIB) +#error cpu_m68k.asm cannot work with paged memory/attributes +#endif + +#if defined(MONITOR_BREAKPOINTS) +#error cpu_m68k.asm does not support user-defined breakpoints +#endif + +#if defined(MONITOR_TRACE) +#error cpu_m68k.asm does not support disassembling the code while it is executed +#endif + +#else /* FALCON_CPUASM */ + +/* Windows headers define it */ +#undef ABSOLUTE + +#ifndef __GNUC__ +#define NO_GOTO +#endif + +/* #define CYCLES_PER_OPCODE */ + +/* #define MONITOR_PROFILE */ + +/* #define NO_V_FLAG_VARIABLE */ + +/* If PC_PTR is defined, local PC is "const UBYTE *", otherwise it's UWORD. */ +/* #define PC_PTR */ + +/* If PREFETCH_CODE is defined, 2 bytes after the opcode are always fetched. */ +/* #define PREFETCH_CODE */ + + +/* 6502 stack handling */ +#define PL MEMORY_dGetByte(0x0100 + ++S) +#define PH(x) MEMORY_dPutByte(0x0100 + S--, x) +#define PHW(x) PH((x) >> 8); PH((x) & 0xff) + +/* 6502 code fetching */ +#ifdef PC_PTR +#define GET_PC() (PC - MEMORY_mem) +#define SET_PC(newpc) (PC = MEMORY_mem + (newpc)) +#define PHPC { UWORD tmp = PC - MEMORY_mem; PHW(tmp); } +#define GET_CODE_BYTE() (*PC++) +#define PEEK_CODE_BYTE() (*PC) +#if !defined(WORDS_BIGENDIAN) && defined(WORDS_UNALIGNED_OK) +#define PEEK_CODE_WORD() (*(const UWORD *) PC) +#else +#define PEEK_CODE_WORD() (*PC + (PC[1] << 8)) +#endif +#else /* PC_PTR */ +#define GET_PC() PC +#define SET_PC(newpc) (PC = (newpc)) +#define PHPC PHW(PC) +#define GET_CODE_BYTE() MEMORY_dGetByte(PC++) +#define PEEK_CODE_BYTE() MEMORY_dGetByte(PC) +#define PEEK_CODE_WORD() MEMORY_dGetWord(PC) +#endif /* PC_PTR */ + +/* Cycle-exact Read-Modify-Write instructions. + RMW instructions: ASL, LSR, ROL, ROR, INC, DEC + (+ some undocumented) write to the specified address + *twice*: first the unmodified value, then the modified value. + This can be observed only with some hardware registers. */ +/* XXX: we do this only for GTIA, because NEW_CYCLE_EXACT does not correctly + emulate INC $D400 (and INC $D40A wasn't tested) */ +#ifdef NEW_CYCLE_EXACT +#ifndef PAGED_ATTRIB +#define RMW_GetByte(x, addr) \ + if (MEMORY_attrib[addr] == MEMORY_HARDWARE) { \ + x = MEMORY_HwGetByte(addr, FALSE); \ + if ((addr & 0xef00) == 0xc000) { \ + ANTIC_xpos--; \ + MEMORY_HwPutByte(addr, x); \ + ANTIC_xpos++; \ + } \ + } else \ + x = MEMORY_dGetByte(addr); +#else /* PAGED_ATTRIB */ +#define RMW_GetByte(x, addr) \ + x = MEMORY_GetByte(addr); \ + if ((addr & 0xef00) == 0xc000) { \ + ANTIC_xpos--; \ + MEMORY_PutByte(addr, x); \ + ANTIC_xpos++; \ + } +#endif /* PAGED_ATTRIB */ +#else /* NEW_CYCLE_EXACT */ +/* Don't emulate the first write */ +#define RMW_GetByte(x, addr) x = MEMORY_GetByte(addr); +#endif /* NEW_CYCLE_EXACT */ + +/* 6502 registers. */ +UWORD CPU_regPC; +UBYTE CPU_regA; +UBYTE CPU_regX; +UBYTE CPU_regY; +UBYTE CPU_regP; /* Processor Status Byte (Partial) */ +UBYTE CPU_regS; + +/* Transfer 6502 registers between global variables and local variables inside CPU_GO() */ +#define UPDATE_GLOBAL_REGS CPU_regPC = GET_PC(); CPU_regS = S; CPU_regA = A; CPU_regX = X; CPU_regY = Y +#define UPDATE_LOCAL_REGS SET_PC(CPU_regPC); S = CPU_regS; A = CPU_regA; X = CPU_regX; Y = CPU_regY + +/* 6502 flags local to this module */ +static UBYTE N; /* bit7 set => N flag set */ +#ifndef NO_V_FLAG_VARIABLE +static UBYTE V; /* non-zero => V flag set */ +#endif +static UBYTE Z; /* zero => Z flag set */ +static UBYTE C; /* must be 0 or 1 */ +/* B, D, I are always in CPU_regP */ + +void CPU_GetStatus(void) +{ +#ifndef NO_V_FLAG_VARIABLE + CPU_regP = (N & 0x80) + (V ? 0x40 : 0) + (CPU_regP & 0x3c) + ((Z == 0) ? 0x02 : 0) + C; +#else + CPU_regP = (N & 0x80) + (CPU_regP & 0x7c) + ((Z == 0) ? 0x02 : 0) + C; +#endif +} + +void CPU_PutStatus(void) +{ + N = CPU_regP; +#ifndef NO_V_FLAG_VARIABLE + V = (CPU_regP & 0x40); +#endif + Z = (CPU_regP & 0x02) ^ 0x02; + C = (CPU_regP & 0x01); +} + +/* Addressing modes */ +#ifdef WRAP_ZPAGE +#define zGetWord(x) (MEMORY_dGetByte(x) + (MEMORY_dGetByte((UBYTE) ((x) + 1)) << 8)) +#else +#define zGetWord(x) MEMORY_dGetWord(x) +#endif +#ifdef PREFETCH_CODE +#if defined(WORDS_BIGENDIAN) || !defined(WORDS_UNALIGNED_OK) +#warning PREFETCH_CODE is efficient only on little-endian machines with WORDS_UNALIGNED_OK +#endif +#define OP_BYTE ((UBYTE) addr) +#define OP_WORD addr +#define IMMEDIATE (PC++, (UBYTE) addr) +#define ABSOLUTE PC += 2 +#define ZPAGE PC++; addr &= 0xff +#define ABSOLUTE_X addr += X; PC += 2 +#define ABSOLUTE_Y addr += Y; PC += 2 +#define INDIRECT_X PC++; addr = (UBYTE) (addr + X); addr = zGetWord(addr) +#define INDIRECT_Y PC++; addr &= 0xff; addr = zGetWord(addr) + Y +#define ZPAGE_X PC++; addr = (UBYTE) (addr + X) +#define ZPAGE_Y PC++; addr = (UBYTE) (addr + Y) +#else /* PREFETCH_CODE */ +#define OP_BYTE PEEK_CODE_BYTE() +#define OP_WORD PEEK_CODE_WORD() +#define IMMEDIATE GET_CODE_BYTE() +#define ABSOLUTE addr = PEEK_CODE_WORD(); PC += 2 +#define ZPAGE addr = GET_CODE_BYTE() +#define ABSOLUTE_X addr = PEEK_CODE_WORD() + X; PC += 2 +#define ABSOLUTE_Y addr = PEEK_CODE_WORD() + Y; PC += 2 +#define INDIRECT_X addr = (UBYTE) (GET_CODE_BYTE() + X); addr = zGetWord(addr) +#define INDIRECT_Y addr = GET_CODE_BYTE(); addr = zGetWord(addr) + Y +#define ZPAGE_X addr = (UBYTE) (GET_CODE_BYTE() + X) +#define ZPAGE_Y addr = (UBYTE) (GET_CODE_BYTE() + Y) +#endif /* PREFETCH_CODE */ + +/* Instructions */ +#define AND(t_data) Z = N = A &= t_data +#define CMP(t_data) data = t_data; Z = N = A - data; C = (A >= data) +#define CPX(t_data) data = t_data; Z = N = X - data; C = (X >= data) +#define CPY(t_data) data = t_data; Z = N = Y - data; C = (Y >= data) +#define EOR(t_data) Z = N = A ^= t_data +#define LDA(t_data) Z = N = A = t_data +#define LDX(t_data) Z = N = X = t_data +#define LDY(t_data) Z = N = Y = t_data +#define ORA(t_data) Z = N = A |= t_data +#ifndef NO_V_FLAG_VARIABLE +#define PHP(x) data = (N & 0x80) + (V ? 0x40 : 0) + (CPU_regP & (x)) + ((Z == 0) ? 0x02 : 0) + C; PH(data) +#define PHPB0 PHP(0x2c) /* push flags with B flag clear (NMI, IRQ) */ +#define PHPB1 PHP(0x3c) /* push flags with B flag set (PHP, BRK) */ +#define PLP data = PL; N = data; V = (data & 0x40); Z = (data & 0x02) ^ 0x02; C = (data & 0x01); CPU_regP = (data & 0x0c) + 0x30 +#else /* NO_V_FLAG_VARIABLE */ +#define PHP(x) data = (N & 0x80) + (CPU_regP & (x)) + ((Z == 0) ? 0x02 : 0) + C; PH(data) +#define PHPB0 PHP(0x6c) /* push flags with B flag clear (NMI, IRQ) */ +#define PHPB1 PHP(0x7c) /* push flags with B flag set (PHP, BRK) */ +#define PLP data = PL; N = data; Z = (data & 0x02) ^ 0x02; C = (data & 0x01); CPU_regP = (data & 0x4c) + 0x30 +#endif /* NO_V_FLAG_VARIABLE */ +/* 1 or 2 extra cycles for conditional jumps */ +#if 0 +/* old, less efficient version */ +#define BRANCH(cond) \ + if (cond) { \ + SWORD sdata = (SBYTE) GET_CODE_BYTE(); \ + if ((sdata + (UBYTE) GET_PC()) & 0xff00) \ + ANTIC_xpos++; \ + ANTIC_xpos++; \ + PC += sdata; \ + DONE \ + } \ + PC++; \ + DONE +#else +#define BRANCH(cond) \ + if (cond) { \ + addr = (UWORD) (SBYTE) IMMEDIATE; \ + addr += GET_PC(); \ + if ((addr ^ GET_PC()) & 0xff00) \ + ANTIC_xpos++; \ + ANTIC_xpos++; \ + SET_PC(addr); \ + DONE \ + } \ + PC++; \ + DONE +#endif + +/* 1 extra cycle for X (or Y) index overflow */ +#define NCYCLES_X if ((UBYTE) addr < X) ANTIC_xpos++ +#define NCYCLES_Y if ((UBYTE) addr < Y) ANTIC_xpos++ + +/* Triggers a Non-Maskable Interrupt */ +void CPU_NMI(void) +{ + UBYTE S = CPU_regS; + UBYTE data; + + PHW(CPU_regPC); + PHPB0; + CPU_SetI; + CPU_regPC = MEMORY_dGetWordAligned(0xfffa); + CPU_regS = S; + ANTIC_xpos += 7; /* handling an interrupt by 6502 takes 7 cycles */ + INC_RET_NESTING; +} + +/* Check pending IRQ, helps in (not only) Lucasfilm games */ +#define CPUCHECKIRQ \ + if (CPU_IRQ && !(CPU_regP & CPU_I_FLAG) && ANTIC_xpos < ANTIC_xpos_limit) { \ + PHPC; \ + PHPB0; \ + CPU_SetI; \ + SET_PC(MEMORY_dGetWordAligned(0xfffe)); \ + ANTIC_xpos += 7; \ + INC_RET_NESTING; \ + } + +/* Enter monitor */ +#ifdef __PLUS +#define ENTER_MONITOR Atari800_Exit(TRUE) +#else +#ifdef SKIP +#define ENTER_MONITOR if (!Atari800_Exit(TRUE)) exit(0) +#else +#define ENTER_MONITOR exit(0) +#endif +#endif +#define DO_BREAK \ + UPDATE_GLOBAL_REGS; \ + CPU_GetStatus(); \ + ENTER_MONITOR; \ + CPU_PutStatus(); \ + UPDATE_LOCAL_REGS; + + +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ +static const int cycles[256] = +{ + 7, 6, 2, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6, /* 0x */ + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, /* 1x */ + 6, 6, 2, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6, /* 2x */ + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, /* 3x */ + + 6, 6, 2, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6, /* 4x */ + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, /* 5x */ + 6, 6, 2, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6, /* 6x */ + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, /* 7x */ + + 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, /* 8x */ + 2, 6, 2, 6, 4, 4, 4, 4, 2, 5, 2, 5, 5, 5, 5, 5, /* 9x */ + 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, /* Ax */ + 2, 5, 2, 5, 4, 4, 4, 4, 2, 4, 2, 4, 4, 4, 4, 4, /* Bx */ + + 2, 6, 2, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6, /* Cx */ + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, /* Dx */ + 2, 6, 2, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6, /* Ex */ + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7 /* Fx */ +}; + +/* 6502 emulation routine */ +#ifndef NO_GOTO +__extension__ /* suppress -ansi -pedantic warnings */ +#endif +void CPU_GO(int limit) +{ +#ifdef NO_GOTO +#define OPCODE_ALIAS(code) case 0x##code: +#define DONE break; +#else +#define OPCODE_ALIAS(code) opcode_##code: +#define DONE goto next; + static const void *opcode[256] = + { + &&opcode_00, &&opcode_01, &&opcode_02, &&opcode_03, + &&opcode_04, &&opcode_05, &&opcode_06, &&opcode_07, + &&opcode_08, &&opcode_09, &&opcode_0a, &&opcode_0b, + &&opcode_0c, &&opcode_0d, &&opcode_0e, &&opcode_0f, + + &&opcode_10, &&opcode_11, &&opcode_12, &&opcode_13, + &&opcode_14, &&opcode_15, &&opcode_16, &&opcode_17, + &&opcode_18, &&opcode_19, &&opcode_1a, &&opcode_1b, + &&opcode_1c, &&opcode_1d, &&opcode_1e, &&opcode_1f, + + &&opcode_20, &&opcode_21, &&opcode_22, &&opcode_23, + &&opcode_24, &&opcode_25, &&opcode_26, &&opcode_27, + &&opcode_28, &&opcode_29, &&opcode_2a, &&opcode_2b, + &&opcode_2c, &&opcode_2d, &&opcode_2e, &&opcode_2f, + + &&opcode_30, &&opcode_31, &&opcode_32, &&opcode_33, + &&opcode_34, &&opcode_35, &&opcode_36, &&opcode_37, + &&opcode_38, &&opcode_39, &&opcode_3a, &&opcode_3b, + &&opcode_3c, &&opcode_3d, &&opcode_3e, &&opcode_3f, + + &&opcode_40, &&opcode_41, &&opcode_42, &&opcode_43, + &&opcode_44, &&opcode_45, &&opcode_46, &&opcode_47, + &&opcode_48, &&opcode_49, &&opcode_4a, &&opcode_4b, + &&opcode_4c, &&opcode_4d, &&opcode_4e, &&opcode_4f, + + &&opcode_50, &&opcode_51, &&opcode_52, &&opcode_53, + &&opcode_54, &&opcode_55, &&opcode_56, &&opcode_57, + &&opcode_58, &&opcode_59, &&opcode_5a, &&opcode_5b, + &&opcode_5c, &&opcode_5d, &&opcode_5e, &&opcode_5f, + + &&opcode_60, &&opcode_61, &&opcode_62, &&opcode_63, + &&opcode_64, &&opcode_65, &&opcode_66, &&opcode_67, + &&opcode_68, &&opcode_69, &&opcode_6a, &&opcode_6b, + &&opcode_6c, &&opcode_6d, &&opcode_6e, &&opcode_6f, + + &&opcode_70, &&opcode_71, &&opcode_72, &&opcode_73, + &&opcode_74, &&opcode_75, &&opcode_76, &&opcode_77, + &&opcode_78, &&opcode_79, &&opcode_7a, &&opcode_7b, + &&opcode_7c, &&opcode_7d, &&opcode_7e, &&opcode_7f, + + &&opcode_80, &&opcode_81, &&opcode_82, &&opcode_83, + &&opcode_84, &&opcode_85, &&opcode_86, &&opcode_87, + &&opcode_88, &&opcode_89, &&opcode_8a, &&opcode_8b, + &&opcode_8c, &&opcode_8d, &&opcode_8e, &&opcode_8f, + + &&opcode_90, &&opcode_91, &&opcode_92, &&opcode_93, + &&opcode_94, &&opcode_95, &&opcode_96, &&opcode_97, + &&opcode_98, &&opcode_99, &&opcode_9a, &&opcode_9b, + &&opcode_9c, &&opcode_9d, &&opcode_9e, &&opcode_9f, + + &&opcode_a0, &&opcode_a1, &&opcode_a2, &&opcode_a3, + &&opcode_a4, &&opcode_a5, &&opcode_a6, &&opcode_a7, + &&opcode_a8, &&opcode_a9, &&opcode_aa, &&opcode_ab, + &&opcode_ac, &&opcode_ad, &&opcode_ae, &&opcode_af, + + &&opcode_b0, &&opcode_b1, &&opcode_b2, &&opcode_b3, + &&opcode_b4, &&opcode_b5, &&opcode_b6, &&opcode_b7, + &&opcode_b8, &&opcode_b9, &&opcode_ba, &&opcode_bb, + &&opcode_bc, &&opcode_bd, &&opcode_be, &&opcode_bf, + + &&opcode_c0, &&opcode_c1, &&opcode_c2, &&opcode_c3, + &&opcode_c4, &&opcode_c5, &&opcode_c6, &&opcode_c7, + &&opcode_c8, &&opcode_c9, &&opcode_ca, &&opcode_cb, + &&opcode_cc, &&opcode_cd, &&opcode_ce, &&opcode_cf, + + &&opcode_d0, &&opcode_d1, &&opcode_d2, &&opcode_d3, + &&opcode_d4, &&opcode_d5, &&opcode_d6, &&opcode_d7, + &&opcode_d8, &&opcode_d9, &&opcode_da, &&opcode_db, + &&opcode_dc, &&opcode_dd, &&opcode_de, &&opcode_df, + + &&opcode_e0, &&opcode_e1, &&opcode_e2, &&opcode_e3, + &&opcode_e4, &&opcode_e5, &&opcode_e6, &&opcode_e7, + &&opcode_e8, &&opcode_e9, &&opcode_ea, &&opcode_eb, + &&opcode_ec, &&opcode_ed, &&opcode_ee, &&opcode_ef, + + &&opcode_f0, &&opcode_f1, &&opcode_f2, &&opcode_f3, + &&opcode_f4, &&opcode_f5, &&opcode_f6, &&opcode_f7, + &&opcode_f8, &&opcode_f9, &&opcode_fa, &&opcode_fb, + &&opcode_fc, &&opcode_fd, &&opcode_fe, &&opcode_ff, + }; +#endif /* NO_GOTO */ + +#ifdef CYCLES_PER_OPCODE +#define OPCODE(code) OPCODE_ALIAS(code) ANTIC_xpos += cycles[0x##code]; +#else +#define OPCODE(code) OPCODE_ALIAS(code) +#endif + +#ifdef PC_PTR + const UBYTE *PC; +#else + UWORD PC; +#endif + UBYTE A; + UBYTE X; + UBYTE Y; + UBYTE S; + + UWORD addr; + UBYTE data; +#define insn data + +/* + This used to be in the main loop but has been removed to improve + execution speed. It does not seem to have any adverse effect on + the emulation for two reasons: + + 1. NMI's will can only be raised in antic.c - there is + no way an NMI can be generated whilst in this routine. + + 2. The timing of the IRQs are not that critical. */ + + if (ANTIC_wsync_halt) { + +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { +/* if ANTIC_WSYNC_C is a stolen cycle, ANTIC_antic2cpu_ptr will convert that to the nearest + cpu cycle before that cycle. The CPU will see this cycle, if WSYNC is not + delayed. (Actually this cycle is the first cycle of the instruction after + STA WSYNC, which was really executed one cycle after STA WSYNC because + of an internal antic delay ). ANTIC_delayed_wsync is added to this cycle to form + the limit in the case that WSYNC is not early (does not allow this extra cycle) */ + + if (limit < ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C] + ANTIC_delayed_wsync) + return; + ANTIC_xpos = ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C] + ANTIC_delayed_wsync; + } + else { + if (limit < (ANTIC_WSYNC_C + ANTIC_delayed_wsync)) + return; + ANTIC_xpos = ANTIC_WSYNC_C; + } + ANTIC_delayed_wsync = 0; + +#else /* NEW_CYCLE_EXACT */ + + if (limit < ANTIC_WSYNC_C) + return; + ANTIC_xpos = ANTIC_WSYNC_C; + +#endif /* NEW_CYCLE_EXACT */ + + ANTIC_wsync_halt = 0; + } + ANTIC_xpos_limit = limit; /* needed for WSYNC store inside ANTIC */ + + UPDATE_LOCAL_REGS; + + CPUCHECKIRQ; + + while (ANTIC_xpos < ANTIC_xpos_limit) { +#ifdef MONITOR_PROFILE + int old_xpos = ANTIC_xpos; + UWORD old_PC = GET_PC(); +#endif + + +#ifdef MONITOR_BREAKPOINTS + breakpoint_return: +#endif + +#ifdef PC_PTR + /* must handle 64k wrapping */ + if (PC >= MEMORY_mem + 0xfffe) { + if (PC >= MEMORY_mem + 0x10000) + PC -= 0x10000; + else { + /* the opcode is before 0x10000, but the operand is past */ +#ifdef WORDS_UNALIGNED_OK + *(UWORD *) (MEMORY_mem + 0x10000) = *(UWORD *) MEMORY_mem; +#else + MEMORY_mem[0x10000] = MEMORY_mem[0]; + MEMORY_mem[0x10001] = MEMORY_mem[1]; +#endif /* WORDS_UNALIGNED_OK */ + } + } +#endif /* PC_PTR */ + +#ifdef MONITOR_TRACE + if (MONITOR_trace_file != NULL) { + MONITOR_ShowState(MONITOR_trace_file, GET_PC(), A, X, Y, S, + (N & 0x80) ? 'N' : '-', +#ifndef NO_V_FLAG_VARIABLE + V ? 'V' : '-', +#else + (CPU_regP & CPU_V_FLAG) ? 'V' : '-', +#endif + (Z == 0) ? 'Z' : '-', + (C != 0) ? 'C' : '-'); + } +#endif + +#ifdef MONITOR_BREAK + CPU_remember_PC[CPU_remember_PC_curpos] = GET_PC(); + CPU_remember_op[CPU_remember_PC_curpos][0] = MEMORY_dGetByte(GET_PC()); + CPU_remember_op[CPU_remember_PC_curpos][1] = MEMORY_dGetByte(GET_PC()+1); + CPU_remember_op[CPU_remember_PC_curpos][2] = MEMORY_dGetByte(GET_PC()+2); +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) + CPU_remember_xpos[CPU_remember_PC_curpos] = ANTIC_cpu2antic_ptr[ANTIC_xpos] + (ANTIC_ypos << 8); + else +#endif + CPU_remember_xpos[CPU_remember_PC_curpos] = ANTIC_xpos + (ANTIC_ypos << 8); + CPU_remember_PC_curpos = (CPU_remember_PC_curpos + 1) % CPU_REMEMBER_PC_STEPS; + + if (MONITOR_break_addr == GET_PC() || ANTIC_break_ypos == ANTIC_ypos) { + DO_BREAK; + } +#endif /* MONITOR_BREAK */ + +#if defined(WRAP_64K) && !defined(PC_PTR) + MEMORY_mem[0x10000] = MEMORY_mem[0]; +#endif + + insn = GET_CODE_BYTE(); + +#ifdef MONITOR_BREAKPOINTS +#ifdef MONITOR_BREAK + if (MONITOR_breakpoint_table_size > 0 && MONITOR_breakpoints_enabled && !MONITOR_break_step) +#else + if (MONITOR_breakpoint_table_size > 0 && MONITOR_breakpoints_enabled) +#endif + { + UBYTE optype = MONITOR_optype6502[insn]; + int i; + switch (optype >> 4) { + case 1: + addr = PEEK_CODE_WORD(); + break; + case 2: + addr = PEEK_CODE_BYTE(); + break; + case 3: + addr = PEEK_CODE_WORD() + X; + break; + case 4: + addr = PEEK_CODE_WORD() + Y; + break; + case 5: + addr = (UBYTE) (PEEK_CODE_BYTE() + X); + addr = zGetWord(addr); + break; + case 6: + addr = PEEK_CODE_BYTE(); + addr = zGetWord(addr) + Y; + break; + case 7: + addr = (UBYTE) (PEEK_CODE_BYTE() + X); + break; + case 8: + addr = (UBYTE) (PEEK_CODE_BYTE() + Y); + break; + /* XXX: case 13 */ + default: + addr = 0; + break; + } + for (i = 0; i < MONITOR_breakpoint_table_size; i++) { + int cond; + int value, m_addr; + if (!MONITOR_breakpoint_table[i].enabled) + continue; /* skip */ + cond = MONITOR_breakpoint_table[i].condition; + if (cond == MONITOR_BREAKPOINT_OR) + break; /* fire */ + value = MONITOR_breakpoint_table[i].value; + m_addr = MONITOR_breakpoint_table[i].m_addr; + if (cond == MONITOR_BREAKPOINT_FLAG_CLEAR) { + switch (value) { + case CPU_N_FLAG: + if ((N & 0x80) == 0) + continue; + break; +#ifndef NO_V_FLAG_VARIABLE + case CPU_V_FLAG: + if (V == 0) + continue; + break; +#endif + case CPU_Z_FLAG: + if (Z != 0) + continue; + break; + case CPU_C_FLAG: + if (C == 0) + continue; + break; + default: + if ((CPU_regP & value) == 0) + continue; + break; + } + } + else if (cond == MONITOR_BREAKPOINT_FLAG_SET) { + switch (value) { + case CPU_N_FLAG: + if ((N & 0x80) != 0) + continue; + break; +#ifndef NO_V_FLAG_VARIABLE + case CPU_V_FLAG: + if (V != 0) + continue; + break; +#endif + case CPU_Z_FLAG: + if (Z == 0) + continue; + break; + case CPU_C_FLAG: + if (C != 0) + continue; + break; + default: + if ((CPU_regP & value) != 0) + continue; + break; + } + } + else { + int val; + switch (cond >> 3) { + case MONITOR_BREAKPOINT_PC >> 3: + val = GET_PC() - 1; + break; + case MONITOR_BREAKPOINT_A >> 3: + val = A; + break; + case MONITOR_BREAKPOINT_X >> 3: + val = X; + break; + case MONITOR_BREAKPOINT_Y >> 3: + val = Y; + break; + case MONITOR_BREAKPOINT_S >> 3: + val = S; + break; + case MONITOR_BREAKPOINT_READ >> 3: + if ((optype & 4) == 0) + goto cond_failed; + val = addr; + break; + case MONITOR_BREAKPOINT_WRITE >> 3: + if ((optype & 8) == 0) + goto cond_failed; + val = addr; + break; + case MONITOR_BREAKPOINT_ACCESS >> 3: + if ((optype & 12) == 0) + goto cond_failed; + val = addr; + break; + case MONITOR_BREAKPOINT_MEMORY >> 3: + val = MEMORY_SafeGetByte(m_addr); + break; + default: + /* shouldn't happen */ + continue; + } + if ((cond & MONITOR_BREAKPOINT_LESS) != 0 && val < value) + continue; + if ((cond & MONITOR_BREAKPOINT_EQUAL) != 0 && val == value) + continue; + if ((cond & MONITOR_BREAKPOINT_GREATER) != 0 && val > value) + continue; + cond_failed: + ; + } + /* a condition failed */ + /* quickly skip AND-connected conditions */ + do { + if (++i >= MONITOR_breakpoint_table_size) + goto no_breakpoint; + } while (MONITOR_breakpoint_table[i].condition != MONITOR_BREAKPOINT_OR || !MONITOR_breakpoint_table[i].enabled); + } + /* fire breakpoint */ + PC--; + DO_BREAK; + goto breakpoint_return; + no_breakpoint: + ; + } +#endif /* MONITOR_BREAKPOINTS */ + +#ifndef CYCLES_PER_OPCODE + ANTIC_xpos += cycles[insn]; +#endif + +#ifdef MONITOR_PROFILE + CPU_instruction_count[insn]++; + MONITOR_coverage[old_PC = PC - 1].count++; + MONITOR_coverage_insns++; +#endif + +#ifdef PREFETCH_CODE + addr = PEEK_CODE_WORD(); +#endif + +#ifdef NO_GOTO + switch (insn) { +#else + goto *opcode[insn]; +#endif + + OPCODE(00) /* BRK */ +#ifdef MONITOR_BREAK + if (MONITOR_break_brk) { + DO_BREAK; + } + else +#endif + { + PC++; + PHPC; + PHPB1; + CPU_SetI; + SET_PC(MEMORY_dGetWordAligned(0xfffe)); + INC_RET_NESTING; + } + DONE + + OPCODE(01) /* ORA (ab,x) */ + INDIRECT_X; + ORA(MEMORY_GetByte(addr)); + DONE + + OPCODE(03) /* ASO (ab,x) [unofficial - ASL then ORA with Acc] */ + INDIRECT_X; + + aso: + RMW_GetByte(data, addr); + C = (data & 0x80) ? 1 : 0; + data <<= 1; + MEMORY_PutByte(addr, data); + Z = N = A |= data; + DONE + + OPCODE_ALIAS(04) /* NOP ab [unofficial - skip byte] */ + OPCODE_ALIAS(44) + OPCODE(64) + PC++; + DONE + + OPCODE_ALIAS(14) /* NOP ab,x [unofficial - skip byte] */ + OPCODE_ALIAS(34) + OPCODE_ALIAS(54) + OPCODE_ALIAS(74) + OPCODE_ALIAS(d4) + OPCODE(f4) + PC++; + DONE + + OPCODE_ALIAS(80) /* NOP #ab [unofficial - skip byte] */ + OPCODE_ALIAS(82) + OPCODE_ALIAS(89) + OPCODE_ALIAS(c2) + OPCODE(e2) + PC++; + DONE + + OPCODE(05) /* ORA ab */ + ZPAGE; + ORA(MEMORY_dGetByte(addr)); + DONE + + OPCODE(06) /* ASL ab */ + ZPAGE; + data = MEMORY_dGetByte(addr); + C = (data & 0x80) ? 1 : 0; + Z = N = data << 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(07) /* ASO ab [unofficial - ASL then ORA with Acc] */ + ZPAGE; + + aso_zpage: + data = MEMORY_dGetByte(addr); + C = (data & 0x80) ? 1 : 0; + data <<= 1; + MEMORY_dPutByte(addr, data); + Z = N = A |= data; + DONE + + OPCODE(08) /* PHP */ + PHPB1; + DONE + + OPCODE(09) /* ORA #ab */ + ORA(IMMEDIATE); + DONE + + OPCODE(0a) /* ASL */ + C = (A & 0x80) ? 1 : 0; + Z = N = A <<= 1; + DONE + + OPCODE_ALIAS(0b) /* ANC #ab [unofficial - AND then copy N to C (Fox) */ + OPCODE(2b) + AND(IMMEDIATE); + C = N >= 0x80; + DONE + + OPCODE(0c) /* NOP abcd [unofficial - skip word] */ + PC += 2; + DONE + + OPCODE(0d) /* ORA abcd */ + ABSOLUTE; + ORA(MEMORY_GetByte(addr)); + DONE + + OPCODE(0e) /* ASL abcd */ + ABSOLUTE; + RMW_GetByte(data, addr); + C = (data & 0x80) ? 1 : 0; + Z = N = data << 1; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(0f) /* ASO abcd [unofficial - ASL then ORA with Acc] */ + ABSOLUTE; + goto aso; + + OPCODE(10) /* BPL */ + BRANCH(!(N & 0x80)) + + OPCODE(11) /* ORA (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + ORA(MEMORY_GetByte(addr)); + DONE + + OPCODE(13) /* ASO (ab),y [unofficial - ASL then ORA with Acc] */ + INDIRECT_Y; + goto aso; + + OPCODE(15) /* ORA ab,x */ + ZPAGE_X; + ORA(MEMORY_dGetByte(addr)); + DONE + + OPCODE(16) /* ASL ab,x */ + ZPAGE_X; + data = MEMORY_dGetByte(addr); + C = (data & 0x80) ? 1 : 0; + Z = N = data << 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(17) /* ASO ab,x [unofficial - ASL then ORA with Acc] */ + ZPAGE_X; + goto aso_zpage; + + OPCODE(18) /* CLC */ + C = 0; + DONE + + OPCODE(19) /* ORA abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + ORA(MEMORY_GetByte(addr)); + DONE + + OPCODE(1b) /* ASO abcd,y [unofficial - ASL then ORA with Acc] */ + ABSOLUTE_Y; + goto aso; + + OPCODE_ALIAS(1c) /* NOP abcd,x [unofficial - skip word] */ + OPCODE_ALIAS(3c) + OPCODE_ALIAS(5c) + OPCODE_ALIAS(7c) + OPCODE_ALIAS(dc) + OPCODE(fc) + if (OP_BYTE + X >= 0x100) + ANTIC_xpos++; + PC += 2; + DONE + + OPCODE(1d) /* ORA abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + ORA(MEMORY_GetByte(addr)); + DONE + + OPCODE(1e) /* ASL abcd,x */ + ABSOLUTE_X; + RMW_GetByte(data, addr); + C = (data & 0x80) ? 1 : 0; + Z = N = data << 1; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(1f) /* ASO abcd,x [unofficial - ASL then ORA with Acc] */ + ABSOLUTE_X; + goto aso; + + OPCODE(20) /* JSR abcd */ + { + UWORD retaddr = GET_PC() + 1; +#ifdef MONITOR_BREAK + CPU_remember_JMP[CPU_remember_jmp_curpos] = GET_PC() - 1; + CPU_remember_jmp_curpos = (CPU_remember_jmp_curpos + 1) % CPU_REMEMBER_JMP_STEPS; + MONITOR_ret_nesting++; +#endif + PHW(retaddr); + } + SET_PC(OP_WORD); + DONE + + OPCODE(21) /* AND (ab,x) */ + INDIRECT_X; + AND(MEMORY_GetByte(addr)); + DONE + + OPCODE(23) /* RLA (ab,x) [unofficial - ROL Mem, then AND with A] */ + INDIRECT_X; + + rla: + RMW_GetByte(data, addr); + if (C) { + C = (data & 0x80) ? 1 : 0; + data = (data << 1) + 1; + } + else { + C = (data & 0x80) ? 1 : 0; + data = (data << 1); + } + MEMORY_PutByte(addr, data); + Z = N = A &= data; + DONE + + OPCODE(24) /* BIT ab */ + ZPAGE; + N = MEMORY_dGetByte(addr); +#ifndef NO_V_FLAG_VARIABLE + V = N & 0x40; +#else + CPU_regP = (CPU_regP & 0xbf) + (N & 0x40); +#endif + Z = (A & N); + DONE + + OPCODE(25) /* AND ab */ + ZPAGE; + AND(MEMORY_dGetByte(addr)); + DONE + + OPCODE(26) /* ROL ab */ + ZPAGE; + data = MEMORY_dGetByte(addr); + Z = N = (data << 1) + C; + C = (data & 0x80) ? 1 : 0; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(27) /* RLA ab [unofficial - ROL Mem, then AND with A] */ + ZPAGE; + + rla_zpage: + data = MEMORY_dGetByte(addr); + if (C) { + C = (data & 0x80) ? 1 : 0; + data = (data << 1) + 1; + } + else { + C = (data & 0x80) ? 1 : 0; + data = (data << 1); + } + MEMORY_dPutByte(addr, data); + Z = N = A &= data; + DONE + + OPCODE(28) /* PLP */ + PLP; + CPUCHECKIRQ; + DONE + + OPCODE(29) /* AND #ab */ + AND(IMMEDIATE); + DONE + + OPCODE(2a) /* ROL */ + Z = N = (A << 1) + C; + C = (A & 0x80) ? 1 : 0; + A = Z; + DONE + + OPCODE(2c) /* BIT abcd */ + ABSOLUTE; + N = MEMORY_GetByte(addr); +#ifndef NO_V_FLAG_VARIABLE + V = N & 0x40; +#else + CPU_regP = (CPU_regP & 0xbf) + (N & 0x40); +#endif + Z = (A & N); + DONE + + OPCODE(2d) /* AND abcd */ + ABSOLUTE; + AND(MEMORY_GetByte(addr)); + DONE + + OPCODE(2e) /* ROL abcd */ + ABSOLUTE; + RMW_GetByte(data, addr); + Z = N = (data << 1) + C; + C = (data & 0x80) ? 1 : 0; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(2f) /* RLA abcd [unofficial - ROL Mem, then AND with A] */ + ABSOLUTE; + goto rla; + + OPCODE(30) /* BMI */ + BRANCH(N & 0x80) + + OPCODE(31) /* AND (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + AND(MEMORY_GetByte(addr)); + DONE + + OPCODE(33) /* RLA (ab),y [unofficial - ROL Mem, then AND with A] */ + INDIRECT_Y; + goto rla; + + OPCODE(35) /* AND ab,x */ + ZPAGE_X; + AND(MEMORY_dGetByte(addr)); + DONE + + OPCODE(36) /* ROL ab,x */ + ZPAGE_X; + data = MEMORY_dGetByte(addr); + Z = N = (data << 1) + C; + C = (data & 0x80) ? 1 : 0; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(37) /* RLA ab,x [unofficial - ROL Mem, then AND with A] */ + ZPAGE_X; + goto rla_zpage; + + OPCODE(38) /* SEC */ + C = 1; + DONE + + OPCODE(39) /* AND abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + AND(MEMORY_GetByte(addr)); + DONE + + OPCODE(3b) /* RLA abcd,y [unofficial - ROL Mem, then AND with A] */ + ABSOLUTE_Y; + goto rla; + + OPCODE(3d) /* AND abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + AND(MEMORY_GetByte(addr)); + DONE + + OPCODE(3e) /* ROL abcd,x */ + ABSOLUTE_X; + RMW_GetByte(data, addr); + Z = N = (data << 1) + C; + C = (data & 0x80) ? 1 : 0; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(3f) /* RLA abcd,x [unofficial - ROL Mem, then AND with A] */ + ABSOLUTE_X; + goto rla; + + OPCODE(40) /* RTI */ + PLP; + data = PL; + SET_PC((PL << 8) + data); + CPUCHECKIRQ; +#ifdef MONITOR_BREAK + if (MONITOR_break_ret && --MONITOR_ret_nesting <= 0) + MONITOR_break_step = TRUE; +#endif + DONE + + OPCODE(41) /* EOR (ab,x) */ + INDIRECT_X; + EOR(MEMORY_GetByte(addr)); + DONE + + OPCODE(43) /* LSE (ab,x) [unofficial - LSR then EOR result with A] */ + INDIRECT_X; + + lse: + RMW_GetByte(data, addr); + C = data & 1; + data >>= 1; + MEMORY_PutByte(addr, data); + Z = N = A ^= data; + DONE + + OPCODE(45) /* EOR ab */ + ZPAGE; + EOR(MEMORY_dGetByte(addr)); + DONE + + OPCODE(46) /* LSR ab */ + ZPAGE; + data = MEMORY_dGetByte(addr); + C = data & 1; + Z = data >> 1; + N = 0; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(47) /* LSE ab [unofficial - LSR then EOR result with A] */ + ZPAGE; + + lse_zpage: + data = MEMORY_dGetByte(addr); + C = data & 1; + data >>= 1; + MEMORY_dPutByte(addr, data); + Z = N = A ^= data; + DONE + + OPCODE(48) /* PHA */ + PH(A); + DONE + + OPCODE(49) /* EOR #ab */ + EOR(IMMEDIATE); + DONE + + OPCODE(4a) /* LSR */ + C = A & 1; + Z = N = A >>= 1; + DONE + + OPCODE(4b) /* ALR #ab [unofficial - Acc AND Data, LSR result] */ + data = A & IMMEDIATE; + C = data & 1; + Z = N = A = (data >> 1); + DONE + + OPCODE(4c) /* JMP abcd */ +#ifdef MONITOR_BREAK + CPU_remember_JMP[CPU_remember_jmp_curpos] = GET_PC() - 1; + CPU_remember_jmp_curpos = (CPU_remember_jmp_curpos + 1) % CPU_REMEMBER_JMP_STEPS; +#endif + SET_PC(OP_WORD); + DONE + + OPCODE(4d) /* EOR abcd */ + ABSOLUTE; + EOR(MEMORY_GetByte(addr)); + DONE + + OPCODE(4e) /* LSR abcd */ + ABSOLUTE; + RMW_GetByte(data, addr); + C = data & 1; + Z = data >> 1; + N = 0; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(4f) /* LSE abcd [unofficial - LSR then EOR result with A] */ + ABSOLUTE; + goto lse; + + OPCODE(50) /* BVC */ +#ifndef NO_V_FLAG_VARIABLE + BRANCH(!V) +#else + BRANCH(!(CPU_regP & 0x40)) +#endif + + OPCODE(51) /* EOR (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + EOR(MEMORY_GetByte(addr)); + DONE + + OPCODE(53) /* LSE (ab),y [unofficial - LSR then EOR result with A] */ + INDIRECT_Y; + goto lse; + + OPCODE(55) /* EOR ab,x */ + ZPAGE_X; + EOR(MEMORY_dGetByte(addr)); + DONE + + OPCODE(56) /* LSR ab,x */ + ZPAGE_X; + data = MEMORY_dGetByte(addr); + C = data & 1; + Z = data >> 1; + N = 0; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(57) /* LSE ab,x [unofficial - LSR then EOR result with A] */ + ZPAGE_X; + goto lse_zpage; + + OPCODE(58) /* CLI */ + CPU_ClrI; + CPUCHECKIRQ; + DONE + + OPCODE(59) /* EOR abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + EOR(MEMORY_GetByte(addr)); + DONE + + OPCODE(5b) /* LSE abcd,y [unofficial - LSR then EOR result with A] */ + ABSOLUTE_Y; + goto lse; + + OPCODE(5d) /* EOR abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + EOR(MEMORY_GetByte(addr)); + DONE + + OPCODE(5e) /* LSR abcd,x */ + ABSOLUTE_X; + RMW_GetByte(data, addr); + C = data & 1; + Z = data >> 1; + N = 0; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(5f) /* LSE abcd,x [unofficial - LSR then EOR result with A] */ + ABSOLUTE_X; + goto lse; + + OPCODE(60) /* RTS */ + data = PL; + SET_PC((PL << 8) + data + 1); +#ifdef MONITOR_BREAK + if (MONITOR_break_ret && --MONITOR_ret_nesting <= 0) + MONITOR_break_step = TRUE; +#endif + if (CPU_rts_handler != NULL) { + CPU_rts_handler(); + CPU_rts_handler = NULL; + } + DONE + + OPCODE(61) /* ADC (ab,x) */ + INDIRECT_X; + data = MEMORY_GetByte(addr); + goto adc; + + OPCODE(63) /* RRA (ab,x) [unofficial - ROR Mem, then ADC to Acc] */ + INDIRECT_X; + + rra: + RMW_GetByte(data, addr); + if (C) { + C = data & 1; + data = (data >> 1) + 0x80; + } + else { + C = data & 1; + data >>= 1; + } + MEMORY_PutByte(addr, data); + goto adc; + + OPCODE(65) /* ADC ab */ + ZPAGE; + data = MEMORY_dGetByte(addr); + goto adc; + + OPCODE(66) /* ROR ab */ + ZPAGE; + data = MEMORY_dGetByte(addr); + Z = N = (C << 7) + (data >> 1); + C = data & 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(67) /* RRA ab [unofficial - ROR Mem, then ADC to Acc] */ + ZPAGE; + + rra_zpage: + data = MEMORY_dGetByte(addr); + if (C) { + C = data & 1; + data = (data >> 1) + 0x80; + } + else { + C = data & 1; + data >>= 1; + } + MEMORY_dPutByte(addr, data); + goto adc; + + OPCODE(68) /* PLA */ + Z = N = A = PL; + DONE + + OPCODE(69) /* ADC #ab */ + data = IMMEDIATE; + goto adc; + + OPCODE(6a) /* ROR */ + Z = N = (C << 7) + (A >> 1); + C = A & 1; + A = Z; + DONE + + OPCODE(6b) /* ARR #ab [unofficial - Acc AND Data, ROR result] */ + /* It does some 'BCD fixup' if D flag is set */ + /* MPC 05/24/00 */ + data = A & IMMEDIATE; + if (CPU_regP & CPU_D_FLAG) { + UBYTE temp = (data >> 1) + (C << 7); + Z = N = temp; +#ifndef NO_V_FLAG_VARIABLE + V = ((temp ^ data) & 0x40); +#else + CPU_regP = (CPU_regP & 0xbf) + ((temp ^ data) & 0x40); +#endif + if ((data & 0x0F) + (data & 0x01) > 5) + temp = (temp & 0xF0) + ((temp + 0x6) & 0x0F); + if (data + (data & 0x10) >= 0x60) { + temp += 0x60; + C = 1; + } + else + C = 0; + A = (UBYTE) temp; + } + else { + Z = N = A = (data >> 1) + (C << 7); + C = data >> 7; +#ifndef NO_V_FLAG_VARIABLE + V = C ^ ((A >> 5) & 1); +#else + CPU_regP = (CPU_regP & 0xbf) + ((A ^ data) & 0x40); +#endif + } + DONE + + OPCODE(6c) /* JMP (abcd) */ +#ifdef MONITOR_BREAK + CPU_remember_JMP[CPU_remember_jmp_curpos] = GET_PC() - 1; + CPU_remember_jmp_curpos = (CPU_remember_jmp_curpos + 1) % CPU_REMEMBER_JMP_STEPS; +#endif + ABSOLUTE; +#ifdef CPU65C02 + /* XXX: if ((UBYTE) addr == 0xff) ANTIC_xpos++; */ + SET_PC(MEMORY_dGetWord(addr)); +#else + /* original 6502 had a bug in JMP (addr) when addr crossed page boundary */ + if ((UBYTE) addr == 0xff) + SET_PC((MEMORY_dGetByte(addr - 0xff) << 8) + MEMORY_dGetByte(addr)); + else + SET_PC(MEMORY_dGetWord(addr)); +#endif + DONE + + OPCODE(6d) /* ADC abcd */ + ABSOLUTE; + data = MEMORY_GetByte(addr); + goto adc; + + OPCODE(6e) /* ROR abcd */ + ABSOLUTE; + RMW_GetByte(data, addr); + Z = N = (C << 7) + (data >> 1); + C = data & 1; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(6f) /* RRA abcd [unofficial - ROR Mem, then ADC to Acc] */ + ABSOLUTE; + goto rra; + + OPCODE(70) /* BVS */ +#ifndef NO_V_FLAG_VARIABLE + BRANCH(V) +#else + BRANCH(CPU_regP & 0x40) +#endif + + OPCODE(71) /* ADC (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + data = MEMORY_GetByte(addr); + goto adc; + + OPCODE(73) /* RRA (ab),y [unofficial - ROR Mem, then ADC to Acc] */ + INDIRECT_Y; + goto rra; + + OPCODE(75) /* ADC ab,x */ + ZPAGE_X; + data = MEMORY_dGetByte(addr); + goto adc; + + OPCODE(76) /* ROR ab,x */ + ZPAGE_X; + data = MEMORY_dGetByte(addr); + Z = N = (C << 7) + (data >> 1); + C = data & 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(77) /* RRA ab,x [unofficial - ROR Mem, then ADC to Acc] */ + ZPAGE_X; + goto rra_zpage; + + OPCODE(78) /* SEI */ + CPU_SetI; + DONE + + OPCODE(79) /* ADC abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + data = MEMORY_GetByte(addr); + goto adc; + + OPCODE(7b) /* RRA abcd,y [unofficial - ROR Mem, then ADC to Acc] */ + ABSOLUTE_Y; + goto rra; + + OPCODE(7d) /* ADC abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + data = MEMORY_GetByte(addr); + goto adc; + + OPCODE(7e) /* ROR abcd,x */ + ABSOLUTE_X; + RMW_GetByte(data, addr); + Z = N = (C << 7) + (data >> 1); + C = data & 1; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(7f) /* RRA abcd,x [unofficial - ROR Mem, then ADC to Acc] */ + ABSOLUTE_X; + goto rra; + + OPCODE(81) /* STA (ab,x) */ + INDIRECT_X; + MEMORY_PutByte(addr, A); + DONE + + /* AXS doesn't change flags and SAX is better name for it (Fox) */ + OPCODE(83) /* SAX (ab,x) [unofficial - Store result A AND X */ + INDIRECT_X; + data = A & X; + MEMORY_PutByte(addr, data); + DONE + + OPCODE(84) /* STY ab */ + ZPAGE; + MEMORY_dPutByte(addr, Y); + DONE + + OPCODE(85) /* STA ab */ + ZPAGE; + MEMORY_dPutByte(addr, A); + DONE + + OPCODE(86) /* STX ab */ + ZPAGE; + MEMORY_dPutByte(addr, X); + DONE + + OPCODE(87) /* SAX ab [unofficial - Store result A AND X] */ + ZPAGE; + data = A & X; + MEMORY_dPutByte(addr, data); + DONE + + OPCODE(88) /* DEY */ + Z = N = --Y; + DONE + + OPCODE(8a) /* TXA */ + Z = N = A = X; + DONE + + OPCODE(8b) /* ANE #ab [unofficial - A AND X AND (Mem OR $EF) to Acc] (Fox) */ + data = IMMEDIATE; + Z = N = A & X & data; + A &= X & (data | 0xef); + DONE + + OPCODE(8c) /* STY abcd */ + ABSOLUTE; + MEMORY_PutByte(addr, Y); + DONE + + OPCODE(8d) /* STA abcd */ + ABSOLUTE; + MEMORY_PutByte(addr, A); + DONE + + OPCODE(8e) /* STX abcd */ + ABSOLUTE; + MEMORY_PutByte(addr, X); + DONE + + OPCODE(8f) /* SAX abcd [unofficial - Store result A AND X] */ + ABSOLUTE; + data = A & X; + MEMORY_PutByte(addr, data); + DONE + + OPCODE(90) /* BCC */ + BRANCH(!C) + + OPCODE(91) /* STA (ab),y */ + INDIRECT_Y; + MEMORY_PutByte(addr, A); + DONE + + OPCODE(93) /* SHA (ab),y [unofficial, UNSTABLE - Store A AND X AND (H+1) ?] (Fox) */ + /* It seems previous memory value is important - also in 9f */ + ZPAGE; + addr = zGetWord(addr); + data = A & X & ((addr >> 8) + 1); + if ((addr & 0xff) + Y > 0xff) { /* if it crosses a page */ + MEMORY_PutByte(((addr + Y) & 0xff) | (data << 8), data); + } + else { + MEMORY_PutByte(addr + Y, data); + } + DONE + + OPCODE(94) /* STY ab,x */ + ZPAGE_X; + MEMORY_dPutByte(addr, Y); + DONE + + OPCODE(95) /* STA ab,x */ + ZPAGE_X; + MEMORY_dPutByte(addr, A); + DONE + + OPCODE(96) /* STX ab,y */ + ZPAGE_Y; + MEMORY_PutByte(addr, X); + DONE + + OPCODE(97) /* SAX ab,y [unofficial - Store result A AND X] */ + ZPAGE_Y; + data = A & X; + MEMORY_dPutByte(addr, data); + DONE + + OPCODE(98) /* TYA */ + Z = N = A = Y; + DONE + + OPCODE(99) /* STA abcd,y */ + ABSOLUTE_Y; + MEMORY_PutByte(addr, A); + DONE + + OPCODE(9a) /* TXS */ + S = X; + DONE + + OPCODE(9b) /* SHS abcd,y [unofficial, UNSTABLE] (Fox) */ + /* Transfer A AND X to S, then store S AND (H+1)] */ + /* S seems to be stable, only memory values vary */ + ABSOLUTE; + S = A & X; + data = S & ((addr >> 8) + 1); + if ((addr & 0xff) + Y > 0xff) { /* if it crosses a page */ + MEMORY_PutByte(((addr + Y) & 0xff) | (data << 8), data); + } + else { + MEMORY_PutByte(addr + Y, data); + } + DONE + + OPCODE(9c) /* SHY abcd,x [unofficial - Store Y and (H+1)] (Fox) */ + /* Seems to be stable */ + ABSOLUTE; + /* MPC 05/24/00 */ + data = Y & ((UBYTE) ((addr >> 8) + 1)); + if ((addr & 0xff) + X > 0xff) { /* if it crosses a page */ + MEMORY_PutByte(((addr + X) & 0xff) | (data << 8), data); + } + else { + MEMORY_PutByte(addr + X, data); + } + DONE + + OPCODE(9d) /* STA abcd,x */ + ABSOLUTE_X; + MEMORY_PutByte(addr, A); + DONE + + OPCODE(9e) /* SHX abcd,y [unofficial - Store X and (H+1)] (Fox) */ + /* Seems to be stable */ + ABSOLUTE; + /* MPC 05/24/00 */ + data = X & ((UBYTE) ((addr >> 8) + 1)); + if ((addr & 0xff) + Y > 0xff) { /* if it crosses a page */ + MEMORY_PutByte(((addr + Y) & 0xff) | (data << 8), data); + } + else { + MEMORY_PutByte(addr + Y, data); + } + DONE + + OPCODE(9f) /* SHA abcd,y [unofficial, UNSTABLE - Store A AND X AND (H+1) ?] (Fox) */ + ABSOLUTE; + data = A & X & ((addr >> 8) + 1); + if ((addr & 0xff) + Y > 0xff) { /* if it crosses a page */ + MEMORY_PutByte(((addr + Y) & 0xff) | (data << 8), data); + } + else { + MEMORY_PutByte(addr + Y, data); + } + DONE + + OPCODE(a0) /* LDY #ab */ + LDY(IMMEDIATE); + DONE + + OPCODE(a1) /* LDA (ab,x) */ + INDIRECT_X; + LDA(MEMORY_GetByte(addr)); + DONE + + OPCODE(a2) /* LDX #ab */ + LDX(IMMEDIATE); + DONE + + OPCODE(a3) /* LAX (ab,x) [unofficial] */ + INDIRECT_X; + Z = N = X = A = MEMORY_GetByte(addr); + DONE + + OPCODE(a4) /* LDY ab */ + ZPAGE; + LDY(MEMORY_dGetByte(addr)); + DONE + + OPCODE(a5) /* LDA ab */ + ZPAGE; + LDA(MEMORY_dGetByte(addr)); + DONE + + OPCODE(a6) /* LDX ab */ + ZPAGE; + LDX(MEMORY_dGetByte(addr)); + DONE + + OPCODE(a7) /* LAX ab [unofficial] */ + ZPAGE; + Z = N = X = A = MEMORY_GetByte(addr); + DONE + + OPCODE(a8) /* TAY */ + Z = N = Y = A; + DONE + + OPCODE(a9) /* LDA #ab */ + LDA(IMMEDIATE); + DONE + + OPCODE(aa) /* TAX */ + Z = N = X = A; + DONE + + OPCODE(ab) /* ANX #ab [unofficial - AND #ab, then TAX] */ + Z = N = X = A &= IMMEDIATE; + DONE + + OPCODE(ac) /* LDY abcd */ + ABSOLUTE; + LDY(MEMORY_GetByte(addr)); + DONE + + OPCODE(ad) /* LDA abcd */ + ABSOLUTE; + LDA(MEMORY_GetByte(addr)); + DONE + + OPCODE(ae) /* LDX abcd */ + ABSOLUTE; + LDX(MEMORY_GetByte(addr)); + DONE + + OPCODE(af) /* LAX abcd [unofficial] */ + ABSOLUTE; + Z = N = X = A = MEMORY_GetByte(addr); + DONE + + OPCODE(b0) /* BCS */ + BRANCH(C) + + OPCODE(b1) /* LDA (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + LDA(MEMORY_GetByte(addr)); + DONE + + OPCODE(b3) /* LAX (ab),y [unofficial] */ + INDIRECT_Y; + NCYCLES_Y; + Z = N = X = A = MEMORY_GetByte(addr); + DONE + + OPCODE(b4) /* LDY ab,x */ + ZPAGE_X; + LDY(MEMORY_dGetByte(addr)); + DONE + + OPCODE(b5) /* LDA ab,x */ + ZPAGE_X; + LDA(MEMORY_dGetByte(addr)); + DONE + + OPCODE(b6) /* LDX ab,y */ + ZPAGE_Y; + LDX(MEMORY_GetByte(addr)); + DONE + + OPCODE(b7) /* LAX ab,y [unofficial] */ + ZPAGE_Y; + Z = N = X = A = MEMORY_GetByte(addr); + DONE + + OPCODE(b8) /* CLV */ +#ifndef NO_V_FLAG_VARIABLE + V = 0; +#else + CPU_ClrV; +#endif + DONE + + OPCODE(b9) /* LDA abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + LDA(MEMORY_GetByte(addr)); + DONE + + OPCODE(ba) /* TSX */ + Z = N = X = S; + DONE + +/* AXA [unofficial - original decode by R.Sterba and R.Petruzela 15.1.1998 :-)] + AXA - this is our new imaginative name for instruction with opcode hex BB. + AXA - Store Mem AND #$FD to Acc and X, then set stackpoint to value (Acc - 4) + It's cool! :-) + LAS - this is better name for this :) (Fox) + It simply ANDs stack pointer with Mem, then transfers result to A and X + */ + + OPCODE(bb) /* LAS abcd,y [unofficial - AND S with Mem, transfer to A and X (Fox) */ + ABSOLUTE_Y; + NCYCLES_Y; + Z = N = A = X = S &= MEMORY_GetByte(addr); + DONE + + OPCODE(bc) /* LDY abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + LDY(MEMORY_GetByte(addr)); + DONE + + OPCODE(bd) /* LDA abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + LDA(MEMORY_GetByte(addr)); + DONE + + OPCODE(be) /* LDX abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + LDX(MEMORY_GetByte(addr)); + DONE + + OPCODE(bf) /* LAX abcd,y [unofficial] */ + ABSOLUTE_Y; + NCYCLES_Y; + Z = N = X = A = MEMORY_GetByte(addr); + DONE + + OPCODE(c0) /* CPY #ab */ + CPY(IMMEDIATE); + DONE + + OPCODE(c1) /* CMP (ab,x) */ + INDIRECT_X; + CMP(MEMORY_GetByte(addr)); + DONE + + OPCODE(c3) /* DCM (ab,x) [unofficial - DEC Mem then CMP with Acc] */ + INDIRECT_X; + + dcm: + RMW_GetByte(data, addr); + data--; + MEMORY_PutByte(addr, data); + CMP(data); + DONE + + OPCODE(c4) /* CPY ab */ + ZPAGE; + CPY(MEMORY_dGetByte(addr)); + DONE + + OPCODE(c5) /* CMP ab */ + ZPAGE; + CMP(MEMORY_dGetByte(addr)); + DONE + + OPCODE(c6) /* DEC ab */ + ZPAGE; + Z = N = MEMORY_dGetByte(addr) - 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(c7) /* DCM ab [unofficial - DEC Mem then CMP with Acc] */ + ZPAGE; + + dcm_zpage: + data = MEMORY_dGetByte(addr) - 1; + MEMORY_dPutByte(addr, data); + CMP(data); + DONE + + OPCODE(c8) /* INY */ + Z = N = ++Y; + DONE + + OPCODE(c9) /* CMP #ab */ + CMP(IMMEDIATE); + DONE + + OPCODE(ca) /* DEX */ + Z = N = --X; + DONE + + OPCODE(cb) /* SBX #ab [unofficial - store ((A AND X) - Mem) in X] (Fox) */ + X &= A; + data = IMMEDIATE; + C = X >= data; + /* MPC 05/24/00 */ + Z = N = X -= data; + DONE + + OPCODE(cc) /* CPY abcd */ + ABSOLUTE; + CPY(MEMORY_GetByte(addr)); + DONE + + OPCODE(cd) /* CMP abcd */ + ABSOLUTE; + CMP(MEMORY_GetByte(addr)); + DONE + + OPCODE(ce) /* DEC abcd */ + ABSOLUTE; + RMW_GetByte(Z, addr); + N = --Z; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(cf) /* DCM abcd [unofficial - DEC Mem then CMP with Acc] */ + ABSOLUTE; + goto dcm; + + OPCODE(d0) /* BNE */ + BRANCH(Z) + + OPCODE(d1) /* CMP (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + CMP(MEMORY_GetByte(addr)); + DONE + + OPCODE(d3) /* DCM (ab),y [unofficial - DEC Mem then CMP with Acc] */ + INDIRECT_Y; + goto dcm; + + OPCODE(d5) /* CMP ab,x */ + ZPAGE_X; + CMP(MEMORY_dGetByte(addr)); + DONE + + OPCODE(d6) /* DEC ab,x */ + ZPAGE_X; + Z = N = MEMORY_dGetByte(addr) - 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(d7) /* DCM ab,x [unofficial - DEC Mem then CMP with Acc] */ + ZPAGE_X; + goto dcm_zpage; + + OPCODE(d8) /* CLD */ + CPU_ClrD; + DONE + + OPCODE(d9) /* CMP abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + CMP(MEMORY_GetByte(addr)); + DONE + + OPCODE(db) /* DCM abcd,y [unofficial - DEC Mem then CMP with Acc] */ + ABSOLUTE_Y; + goto dcm; + + OPCODE(dd) /* CMP abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + CMP(MEMORY_GetByte(addr)); + DONE + + OPCODE(de) /* DEC abcd,x */ + ABSOLUTE_X; + RMW_GetByte(Z, addr); + N = --Z; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(df) /* DCM abcd,x [unofficial - DEC Mem then CMP with Acc] */ + ABSOLUTE_X; + goto dcm; + + OPCODE(e0) /* CPX #ab */ + CPX(IMMEDIATE); + DONE + + OPCODE(e1) /* SBC (ab,x) */ + INDIRECT_X; + data = MEMORY_GetByte(addr); + goto sbc; + + OPCODE(e3) /* INS (ab,x) [unofficial - INC Mem then SBC with Acc] */ + INDIRECT_X; + + ins: + RMW_GetByte(data, addr); + ++data; + MEMORY_PutByte(addr, data); + goto sbc; + + OPCODE(e4) /* CPX ab */ + ZPAGE; + CPX(MEMORY_dGetByte(addr)); + DONE + + OPCODE(e5) /* SBC ab */ + ZPAGE; + data = MEMORY_dGetByte(addr); + goto sbc; + + OPCODE(e6) /* INC ab */ + ZPAGE; + Z = N = MEMORY_dGetByte(addr) + 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(e7) /* INS ab [unofficial - INC Mem then SBC with Acc] */ + ZPAGE; + + ins_zpage: + data = MEMORY_dGetByte(addr) + 1; + MEMORY_dPutByte(addr, data); + goto sbc; + + OPCODE(e8) /* INX */ + Z = N = ++X; + DONE + + OPCODE_ALIAS(e9) /* SBC #ab */ + OPCODE(eb) /* SBC #ab [unofficial] */ + data = IMMEDIATE; + goto sbc; + + OPCODE_ALIAS(ea) /* NOP */ + OPCODE_ALIAS(1a) /* NOP [unofficial] */ + OPCODE_ALIAS(3a) + OPCODE_ALIAS(5a) + OPCODE_ALIAS(7a) + OPCODE_ALIAS(da) + OPCODE(fa) + DONE + + OPCODE(ec) /* CPX abcd */ + ABSOLUTE; + CPX(MEMORY_GetByte(addr)); + DONE + + OPCODE(ed) /* SBC abcd */ + ABSOLUTE; + data = MEMORY_GetByte(addr); + goto sbc; + + OPCODE(ee) /* INC abcd */ + ABSOLUTE; + RMW_GetByte(Z, addr); + N = ++Z; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(ef) /* INS abcd [unofficial - INC Mem then SBC with Acc] */ + ABSOLUTE; + goto ins; + + OPCODE(f0) /* BEQ */ + BRANCH(!Z) + + OPCODE(f1) /* SBC (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + data = MEMORY_GetByte(addr); + goto sbc; + + OPCODE(f3) /* INS (ab),y [unofficial - INC Mem then SBC with Acc] */ + INDIRECT_Y; + goto ins; + + OPCODE(f5) /* SBC ab,x */ + ZPAGE_X; + data = MEMORY_dGetByte(addr); + goto sbc; + + OPCODE(f6) /* INC ab,x */ + ZPAGE_X; + Z = N = MEMORY_dGetByte(addr) + 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(f7) /* INS ab,x [unofficial - INC Mem then SBC with Acc] */ + ZPAGE_X; + goto ins_zpage; + + OPCODE(f8) /* SED */ + CPU_SetD; + DONE + + OPCODE(f9) /* SBC abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + data = MEMORY_GetByte(addr); + goto sbc; + + OPCODE(fb) /* INS abcd,y [unofficial - INC Mem then SBC with Acc] */ + ABSOLUTE_Y; + goto ins; + + OPCODE(fd) /* SBC abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + data = MEMORY_GetByte(addr); + goto sbc; + + OPCODE(fe) /* INC abcd,x */ + ABSOLUTE_X; + RMW_GetByte(Z, addr); + N = ++Z; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(ff) /* INS abcd,x [unofficial - INC Mem then SBC with Acc] */ + ABSOLUTE_X; + goto ins; + +#ifdef ASAP + + OPCODE_ALIAS(d2) + OPCODE_ALIAS(f2) + +#else + + OPCODE(d2) /* ESCRTS #ab (CIM) - on Atari is here instruction CIM [unofficial] !RS! */ + data = IMMEDIATE; + UPDATE_GLOBAL_REGS; + CPU_GetStatus(); + ESC_Run(data); + CPU_PutStatus(); + UPDATE_LOCAL_REGS; + data = PL; + SET_PC((PL << 8) + data + 1); +#ifdef MONITOR_BREAK + if (MONITOR_break_ret && --MONITOR_ret_nesting <= 0) + MONITOR_break_step = TRUE; +#endif + DONE + + OPCODE(f2) /* ESC #ab (CIM) - on Atari is here instruction CIM [unofficial] !RS! */ + /* OPCODE(ff: ESC #ab - opcode FF is now used for INS [unofficial] instruction !RS! */ + data = IMMEDIATE; + UPDATE_GLOBAL_REGS; + CPU_GetStatus(); + ESC_Run(data); + CPU_PutStatus(); + UPDATE_LOCAL_REGS; + DONE + +#endif /* ASAP */ + + OPCODE_ALIAS(02) /* CIM [unofficial - crash intermediate] */ + OPCODE_ALIAS(12) + OPCODE_ALIAS(22) + OPCODE_ALIAS(32) + OPCODE_ALIAS(42) + OPCODE_ALIAS(52) + OPCODE_ALIAS(62) + OPCODE_ALIAS(72) + OPCODE_ALIAS(92) + OPCODE(b2) + +#ifdef ASAP + + ASAP_CIM(); + DONE + +#else + + /* OPCODE(d2) Used for ESCRTS #ab (CIM) */ + /* OPCODE(f2) Used for ESC #ab (CIM) */ + PC--; + UPDATE_GLOBAL_REGS; + CPU_GetStatus(); + +#ifdef CRASH_MENU + UI_crash_address = GET_PC(); + UI_crash_afterCIM = GET_PC() + 1; + UI_crash_code = insn; + UI_Run(); +#else + CPU_cim_encountered = TRUE; + ENTER_MONITOR; +#endif /* CRASH_MENU */ + + CPU_PutStatus(); + UPDATE_LOCAL_REGS; + DONE + +#endif /* ASAP */ + +/* ---------------------------------------------- */ +/* ADC and SBC routines */ + + adc: + if (!(CPU_regP & CPU_D_FLAG)) { + /* Binary mode */ + unsigned int tmp; + tmp = A + data + C; + C = tmp > 0xff; + /* C = tmp >> 8; */ +#ifndef NO_V_FLAG_VARIABLE + V = !((A ^ data) & 0x80) && ((data ^ tmp) & 0x80); +#else + CPU_ClrV; + if (!((A ^ data) & 0x80) && ((data ^ tmp) & 0x80)) + CPU_SetV; +#endif + Z = N = A = (UBYTE) tmp; + } + else { + /* Decimal mode */ + unsigned int tmp; + tmp = (A & 0x0f) + (data & 0x0f) + C; + if (tmp >= 0x0a) + tmp = ((tmp + 0x06) & 0x0f) + 0x10; + tmp += (A & 0xf0) + (data & 0xf0); + + Z = A + data + C; + N = (UBYTE) tmp; +#ifndef NO_V_FLAG_VARIABLE + V = !((A ^ data) & 0x80) && ((data ^ tmp) & 0x80); +#else + CPU_ClrV; + if (!((A ^ data) & 0x80) && ((data ^ tmp) & 0x80)) + CPU_SetV; +#endif + + if (tmp >= 0xa0) + tmp += 0x60; + C = tmp > 0xff; + A = (UBYTE) tmp; + } + DONE + + sbc: + if (!(CPU_regP & CPU_D_FLAG)) { + /* Binary mode */ + unsigned int tmp; + /* tmp = A - data - !C; */ + tmp = A - data - 1 + C; + C = tmp < 0x100; +#ifndef NO_V_FLAG_VARIABLE + V = ((A ^ data) & 0x80) && ((A ^ tmp) & 0x80); +#else + CPU_ClrV; + if (((A ^ data) & 0x80) && ((A ^ tmp) & 0x80)) + CPU_SetV; +#endif + Z = N = A = (UBYTE) tmp; + } + else { + /* Decimal mode */ + unsigned int tmp; + tmp = (A & 0x0f) - (data & 0x0f) - 1 + C; + if (tmp & 0x10) + tmp = ((tmp - 0x06) & 0x0f) - 0x10; + tmp += (A & 0xf0) - (data & 0xf0); + if (tmp & 0x100) + tmp -= 0x60; + + Z = N = A - data - 1 + C; +#ifndef NO_V_FLAG_VARIABLE + V = ((A ^ data) & 0x80) && ((A ^ Z) & 0x80); +#else + CPU_ClrV; + if (((A ^ data) & 0x80) && ((A ^ Z) & 0x80)) + CPU_SetV; +#endif + C = ((unsigned int) (A - data - 1 + C)) <= 0xff; + + A = tmp; + } + DONE + +#ifdef NO_GOTO + } +#else + next: +#endif + +#ifdef MONITOR_PROFILE + { + int cyc = ANTIC_xpos - old_xpos; + MONITOR_coverage[old_PC].cycles += cyc; + MONITOR_coverage_cycles += cyc; + } +#endif + +#ifdef MONITOR_BREAK + if (MONITOR_break_step) { + DO_BREAK; + } +#endif + /* This "continue" does nothing here. + But it is necessary because, if we're not using NO_GOTO nor MONITOR_BREAK, + gcc can complain: "error: label at end of compound statement". */ + continue; + } + + UPDATE_GLOBAL_REGS; +} + +#endif /* FALCON_CPUASM */ + +void CPU_Reset(void) +{ +#ifdef MONITOR_PROFILE + memset(CPU_instruction_count, 0, sizeof(CPU_instruction_count)); +#endif + + CPU_IRQ = 0; + + CPU_regP = 0x34; /* The unused bit is always 1, I flag set! */ + CPU_PutStatus(); /* Make sure flags are all updated */ + CPU_regS = 0xff; + CPU_regPC = MEMORY_dGetWordAligned(0xfffc); +} + +#if !defined(BASIC) && !defined(ASAP) + +void CPU_StateSave(UBYTE SaveVerbose) +{ + StateSav_SaveUBYTE(&CPU_regA, 1); + + CPU_GetStatus(); /* Make sure flags are all updated */ + StateSav_SaveUBYTE(&CPU_regP, 1); + + StateSav_SaveUBYTE(&CPU_regS, 1); + StateSav_SaveUBYTE(&CPU_regX, 1); + StateSav_SaveUBYTE(&CPU_regY, 1); + StateSav_SaveUBYTE(&CPU_IRQ, 1); + + MEMORY_StateSave(SaveVerbose); + + StateSav_SaveUWORD(&CPU_regPC, 1); +} + +void CPU_StateRead(UBYTE SaveVerbose, UBYTE StateVersion) +{ + StateSav_ReadUBYTE(&CPU_regA, 1); + + StateSav_ReadUBYTE(&CPU_regP, 1); + CPU_PutStatus(); /* Make sure flags are all updated */ + + StateSav_ReadUBYTE(&CPU_regS, 1); + StateSav_ReadUBYTE(&CPU_regX, 1); + StateSav_ReadUBYTE(&CPU_regY, 1); + StateSav_ReadUBYTE(&CPU_IRQ, 1); + + MEMORY_StateRead(SaveVerbose, StateVersion); + + StateSav_ReadUWORD(&CPU_regPC, 1); +} + +#endif diff --git a/MCUME_pico/pico5200/cpu.h b/MCUME_pico/pico5200/cpu.h new file mode 100644 index 0000000..3ee25e6 --- /dev/null +++ b/MCUME_pico/pico5200/cpu.h @@ -0,0 +1,65 @@ +#ifndef CPU_H_ +#define CPU_H_ + +#include "atari.h" + +#define CPU_N_FLAG 0x80 +#define CPU_V_FLAG 0x40 +#define CPU_B_FLAG 0x10 +#define CPU_D_FLAG 0x08 +#define CPU_I_FLAG 0x04 +#define CPU_Z_FLAG 0x02 +#define CPU_C_FLAG 0x01 + +void CPU_GetStatus(void); +void CPU_PutStatus(void); +void CPU_Reset(void); +void CPU_StateSave(UBYTE SaveVerbose); +void CPU_StateRead(UBYTE SaveVerbose, UBYTE StateVersion); +void CPU_NMI(void); +void CPU_GO(int limit); +#define CPU_GenerateIRQ() (CPU_IRQ = 1) + +extern UWORD CPU_regPC; +extern UBYTE CPU_regA; +extern UBYTE CPU_regP; +extern UBYTE CPU_regS; +extern UBYTE CPU_regY; +extern UBYTE CPU_regX; + +#define CPU_SetN CPU_regP |= CPU_N_FLAG +#define CPU_ClrN CPU_regP &= (~CPU_N_FLAG) +#define CPU_SetV CPU_regP |= CPU_V_FLAG +#define CPU_ClrV CPU_regP &= (~CPU_V_FLAG) +#define CPU_SetB CPU_regP |= CPU_B_FLAG +#define CPU_ClrB CPU_regP &= (~CPU_B_FLAG) +#define CPU_SetD CPU_regP |= CPU_D_FLAG +#define CPU_ClrD CPU_regP &= (~CPU_D_FLAG) +#define CPU_SetI CPU_regP |= CPU_I_FLAG +#define CPU_ClrI CPU_regP &= (~CPU_I_FLAG) +#define CPU_SetZ CPU_regP |= CPU_Z_FLAG +#define CPU_ClrZ CPU_regP &= (~CPU_Z_FLAG) +#define CPU_SetC CPU_regP |= CPU_C_FLAG +#define CPU_ClrC CPU_regP &= (~CPU_C_FLAG) + +extern UBYTE CPU_IRQ; + +extern void (*CPU_rts_handler)(void); + +extern UBYTE CPU_cim_encountered; + +#define CPU_REMEMBER_PC_STEPS 64 +extern UWORD CPU_remember_PC[CPU_REMEMBER_PC_STEPS]; +extern UBYTE CPU_remember_op[CPU_REMEMBER_PC_STEPS][3]; +extern unsigned int CPU_remember_PC_curpos; +extern int CPU_remember_xpos[CPU_REMEMBER_PC_STEPS]; + +#define CPU_REMEMBER_JMP_STEPS 16 +extern UWORD CPU_remember_JMP[CPU_REMEMBER_JMP_STEPS]; +extern unsigned int CPU_remember_jmp_curpos; + +#ifdef MONITOR_PROFILE +extern int CPU_instruction_count[256]; +#endif + +#endif /* CPU_H_ */ diff --git a/MCUME_pico/pico5200/crc32.c b/MCUME_pico/pico5200/crc32.c new file mode 100644 index 0000000..d22e223 --- /dev/null +++ b/MCUME_pico/pico5200/crc32.c @@ -0,0 +1,86 @@ +/* CRC32.C -- Calculates 32bit CRC checksum + */ +// modified main() (see crc32.orig) to get calc_crc32() function +// JH 2002 + +#include +#include + +const unsigned long crc32_table[256] = { /* lookup table */ +0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, +0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, +0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, +0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, +0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, +0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, +0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, +0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, +0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, +0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, +0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, +0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, +0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, +0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, +0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, +0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, +0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, +0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, +0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, +0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, +0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, +0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, +0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, +0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, +0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, +0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, +0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, +0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, +0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, +0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, +0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, +0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, +0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, +0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, +0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, +0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, +0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, +0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, +0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, +0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, +0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, +0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, +0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D}; + +unsigned long calc_crc32(unsigned char *buf, int buflen) +{ + // buf is pointer to input buffer (data to crc) + // buflen is length of input buffer + + unsigned long crc; /* CRC value */ + //size_t j; /* buffer positions*/ + int j; /* buffer positions*/ + int k; /* generic integer */ + +#ifdef DEBUG + printf("32bit Cyclic Redudancy Check\n"); +#endif + + crc = 0xFFFFFFFF; /* preconditioning sets non zero value */ + + /* loop through the buffer and calculate CRC */ + for(j=0; j> 8) & 0x00FFFFFFL) ^ crc32_table[k]; + } + + crc=~crc; /* postconditioning */ + + /* print results */ +#ifdef DEBUG + printf("CRC32 is %08lX\n", crc); +#endif + + return crc; +} + + diff --git a/MCUME_pico/pico5200/emuapi.cpp b/MCUME_pico/pico5200/emuapi.cpp new file mode 100644 index 0000000..fd63999 --- /dev/null +++ b/MCUME_pico/pico5200/emuapi.cpp @@ -0,0 +1,777 @@ +#define KEYMAP_PRESENT 1 + +#define PROGMEM + +#include "pico.h" +#include "pico/stdlib.h" +#include "hardware/adc.h" +#include +#include + +extern "C" { + #include "emuapi.h" + #include "iopins.h" +} + + +#include "vga_t_dma.h" +const uint16_t deflogo[] = { + 0,0 +}; +static const uint16_t * logo = deflogo; + +#define MAX_FILES 64 +#define MAX_FILENAME_SIZE 24 +#define MAX_MENULINES 9 +#define TEXT_HEIGHT 16 +#define TEXT_WIDTH 8 +#define MENU_FILE_XOFFSET (6*TEXT_WIDTH) +#define MENU_FILE_YOFFSET (2*TEXT_HEIGHT) +#define MENU_FILE_W (MAX_FILENAME_SIZE*TEXT_WIDTH) +#define MENU_FILE_H (MAX_MENULINES*TEXT_HEIGHT) +#define MENU_FILE_BGCOLOR RGBVAL16(0x00,0x00,0x40) +#define MENU_JOYS_YOFFSET (12*TEXT_HEIGHT) +#define MENU_VBAR_XOFFSET (0*TEXT_WIDTH) +#define MENU_VBAR_YOFFSET (MENU_FILE_YOFFSET) + +#define MENU_TFT_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_TFT_YOFFSET (MENU_VBAR_YOFFSET+32) +#define MENU_VGA_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_VGA_YOFFSET (MENU_VBAR_YOFFSET+MENU_FILE_H-32-37) + +extern TFT_T_DMA tft; + +static char romspath[64]; +static int nbFiles=0; +static int curFile=0; +static int topFile=0; +static char selection[MAX_FILENAME_SIZE+1]=""; +static char files[MAX_FILES][MAX_FILENAME_SIZE]; +static bool menuRedraw=true; + +static bool i2cKeyboardPresent = false; +static unsigned short * keys; +static int keyMap; + +static int keypadval=0; +static bool joySwapped = false; +static uint16_t bLastState; +static int xRef; +static int yRef; +static uint8_t usbnavpad=0; + +static bool menuOn=true; + + + + +void emu_printf(char * text) +{ + printf("%s\n",text); +} + +void emu_printf(int val) +{ + printf("%d\n",val); +} + +void emu_printi(int val) +{ + printf("%d\n",val); +} + +void emu_printh(int val) +{ + printf("0x%.8\n",val); +} + +static int malbufpt = 0; +static char malbuf[EXTRA_HEAP]; + +void * emu_Malloc(int size) +{ + void * retval = malloc(size); + if (!retval) { + emu_printf("failled to allocate"); + emu_printf(size); + emu_printf("fallback"); + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + } + else { + emu_printf("failure to allocate"); + } + } + else { + emu_printf("could allocate dynamic "); + emu_printf(size); + } + + return retval; +} + +void * emu_MallocI(int size) +{ + void * retval = NULL; + + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + emu_printf("could allocate static "); + emu_printf(size); + } + else { + emu_printf("failure to allocate"); + } + + return retval; +} +void emu_Free(void * pt) +{ + free(pt); +} + + + + + +int emu_ReadAnalogJoyX(int min, int max) +{ +#ifdef PIN_JOY2_A1X + adc_select_input(0); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVX + val = 4095 - val; +#endif + val = val-xRef; + val = ((val*140)/100); + if ( (val > -512) && (val < 512) ) val = 0; + val = val+2048; + return (val*(max-min))/4096; +} + +int emu_ReadAnalogJoyY(int min, int max) +{ +#ifdef PIN_JOY2_A2Y + adc_select_input(1); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVY + val = 4095 - val; +#endif + val = val-yRef; + val = ((val*120)/100); + if ( (val > -512) && (val < 512) ) val = 0; + //val = (val*(max-min))/4096; + val = val+2048; + //return val+(max-min)/2; + return (val*(max-min))/4096; +} + + +static uint16_t readAnalogJoystick(void) +{ + uint16_t joysval = 0; + + int xReading = emu_ReadAnalogJoyX(0,256); + if (xReading > 128) joysval |= MASK_JOY2_LEFT; + else if (xReading < 128) joysval |= MASK_JOY2_RIGHT; + + int yReading = emu_ReadAnalogJoyY(0,256); + if (yReading < 128) joysval |= MASK_JOY2_UP; + else if (yReading > 128) joysval |= MASK_JOY2_DOWN; + +#ifdef PIN_JOY2_BTN + joysval |= (gpio_get(PIN_JOY2_BTN) ? 0 : MASK_JOY2_BTN); +#endif + return (joysval); +} + + +int emu_SwapJoysticks(int statusOnly) { + if (!statusOnly) { + if (joySwapped) { + joySwapped = false; + } + else { + joySwapped = true; + } + } + return(joySwapped?1:0); +} + +int emu_GetPad(void) +{ + return(keypadval/*|((joySwapped?1:0)<<7)*/); +} + +int emu_ReadKeys(void) +{ + uint16_t retval; + uint16_t j1 = readAnalogJoystick(); + uint16_t j2 = 0; + + // Second joystick +#if INVY +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_DOWN; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_UP; +#endif +#else +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_UP; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_DOWN; +#endif +#endif +#if INVX +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_LEFT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_RIGHT; +#endif +#else +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_RIGHT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_LEFT; +#endif +#endif +#ifdef PIN_JOY1_BTN + if ( !gpio_get(PIN_JOY1_BTN) ) j2 |= MASK_JOY2_BTN; +#endif + if (joySwapped) { + retval = ((j1 << 8) | j2); + } + else { + retval = ((j2 << 8) | j1); + } + + if (usbnavpad & MASK_JOY2_UP) retval |= MASK_JOY2_UP; + if (usbnavpad & MASK_JOY2_DOWN) retval |= MASK_JOY2_DOWN; + if (usbnavpad & MASK_JOY2_LEFT) retval |= MASK_JOY2_LEFT; + if (usbnavpad & MASK_JOY2_RIGHT) retval |= MASK_JOY2_RIGHT; + if (usbnavpad & MASK_JOY2_BTN) retval |= MASK_JOY2_BTN; +#ifdef PIN_KEY_USER1 + if ( !gpio_get(PIN_KEY_USER1) ) retval |= MASK_KEY_USER1; +#endif +#ifdef PIN_KEY_USER2 + if ( !gpio_get(PIN_KEY_USER2) ) retval |= MASK_KEY_USER2; +#endif +#ifdef PIN_KEY_USER3 + if ( !gpio_get(PIN_KEY_USER3) ) retval |= MASK_KEY_USER3; +#endif +#ifdef PIN_KEY_USER4 + if ( !gpio_get(PIN_KEY_USER4) ) retval |= MASK_KEY_USER4; +#endif + + //Serial.println(retval,HEX); + + if ( ((retval & (MASK_KEY_USER1+MASK_KEY_USER2)) == (MASK_KEY_USER1+MASK_KEY_USER2)) + || (retval & MASK_KEY_USER4 ) ) + { + } + + return (retval); +} + +unsigned short emu_DebounceLocalKeys(void) +{ + uint16_t bCurState = emu_ReadKeys(); + uint16_t bClick = bCurState & ~bLastState; + bLastState = bCurState; + + return (bClick); +} + +int emu_ReadI2CKeyboard(void) { + int retval=0; + + return(retval); +} + +void emu_InitJoysticks(void) { + + // Second Joystick +#ifdef PIN_JOY1_1 + gpio_set_pulls(PIN_JOY1_1,true,false); + gpio_set_dir(PIN_JOY1_1,GPIO_IN); +#endif +#ifdef PIN_JOY1_2 + gpio_set_pulls(PIN_JOY1_2,true,false); + gpio_set_dir(PIN_JOY1_2,GPIO_IN); +#endif +#ifdef PIN_JOY1_3 + gpio_set_pulls(PIN_JOY1_3,true,false); + gpio_set_dir(PIN_JOY1_3,GPIO_IN); +#endif +#ifdef PIN_JOY1_4 + gpio_set_pulls(PIN_JOY1_4,true,false); + gpio_set_dir(PIN_JOY1_4,GPIO_IN); +#endif +#ifdef PIN_JOY1_BTN + gpio_set_pulls(PIN_JOY1_BTN,true,false); + gpio_set_dir(PIN_JOY1_BTN,GPIO_IN); +#endif + +#ifdef PIN_KEY_USER1 + gpio_set_pulls(PIN_KEY_USER1,true,false); + gpio_set_dir(PIN_KEY_USER1,GPIO_IN); +#endif +#ifdef PIN_KEY_USER2 + gpio_set_pulls(PIN_KEY_USER2,true,false); + gpio_set_dir(PIN_KEY_USER2,GPIO_IN); +#endif +#ifdef PIN_KEY_USER3 + gpio_set_pulls(PIN_KEY_USER3,true,false); + gpio_set_dir(PIN_KEY_USER3,GPIO_IN); +#endif +#ifdef PIN_KEY_USER4 + gpio_set_pulls(PIN_KEY_USER4,true,false); + gpio_set_dir(PIN_KEY_USER4,GPIO_IN); +#endif +#ifdef PIN_JOY2_BTN + gpio_set_pulls(PIN_JOY2_BTN,true,false); + gpio_set_dir(PIN_JOY2_BTN,GPIO_IN); +#endif + +#ifdef PIN_JOY2_A1X + adc_init(); + adc_gpio_init(PIN_JOY2_A1X); + adc_gpio_init(PIN_JOY2_A2Y); + xRef=0; yRef=0; + for (int i=0; i<10; i++) { + adc_select_input(0); + xRef += adc_read(); + adc_select_input(1); + yRef += adc_read(); + sleep_ms(20); + } +#endif + +#if INVX + xRef = 4095 -xRef/10; +#else + xRef /= 10; +#endif +#if INVY + yRef = 4095 -yRef/10; +#else + yRef /= 10; +#endif +} + + + + +int emu_setKeymap(int index) { +} + + +#include "ff.h" +static FATFS fatfs; +static FIL file; +extern "C" int sd_init_driver(void); + +static int readNbFiles(char * rootdir) { + int totalFiles = 0; + + DIR dir; + FILINFO entry; + FRESULT fr = f_findfirst(&dir, &entry, rootdir, "*"); + while ( (fr == FR_OK) && (entry.fname[0]) && (totalFiles=0) { + menuRedraw=true; + curFile -= 9; + } else if (curFile!=0) { + menuRedraw=true; + curFile--; + } + } + else if (bClick & MASK_JOY2_DOWN) { + if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_JOY2_LEFT) || (bClick & MASK_JOY1_LEFT) ) { + if ((curFile<(nbFiles-9)) && (nbFiles)) { + curFile += 9; + menuRedraw=true; + } + else if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_KEY_USER2) ) { + emu_SwapJoysticks(0); + menuRedraw=true; + } + + if (menuRedraw && nbFiles) { + int fileIndex = 0; + tft.drawRectNoDma(MENU_FILE_XOFFSET,MENU_FILE_YOFFSET, MENU_FILE_W, MENU_FILE_H, MENU_FILE_BGCOLOR); +// if (curFile <= (MAX_MENULINES/2-1)) topFile=0; +// else topFile=curFile-(MAX_MENULINES/2); + if (curFile <= (MAX_MENULINES-1)) topFile=0; + else topFile=curFile-(MAX_MENULINES/2); + + //Serial.print("curfile: "); + //Serial.println(curFile); + //Serial.print("topFile: "); + //Serial.println(topFile); + + int i=0; + while (i=nbFiles) { + // no more files + break; + } + char * filename = &files[fileIndex][0]; + if (fileIndex >= topFile) { + if ((i+topFile) < nbFiles ) { + if ((i+topFile)==curFile) { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0x00), RGBVAL16(0xff,0x00,0x00), true); + strcpy(selection,filename); + } + else { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0xff), MENU_FILE_BGCOLOR, true); + } + } + i++; + } + fileIndex++; + } + + + tft.drawTextNoDma(48,MENU_JOYS_YOFFSET+8, (emu_SwapJoysticks(1)?(char*)"SWAP=1":(char*)"SWAP=0"), RGBVAL16(0x00,0xff,0xff), RGBVAL16(0x00,0x00,0xff), false); + menuRedraw=false; + } + + return (action); +} + +bool menuActive(void) +{ + return (menuOn); +} + +void toggleMenu(bool on) { + if (on) { + menuOn = true; + backgroundMenu(); + } else { + menuOn = false; + } +} + +char * menuSelection(void) +{ + return (selection); +} + + + + + + + + + +int emu_FileOpen(char * filename) +{ + int retval = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileOpen..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + retval = 1; + } + else { + emu_printf("FileOpen failed"); + } + return (retval); +} + +int emu_FileRead(char * buf, int size) +{ + unsigned char buffer[256]; + int remaining = size; + int byteread = 0; + unsigned int retval=0; + if (size < 256) { + if( !(f_read (&file, buffer, size, &retval)) ) + if (retval>0) { + memcpy(buf,buffer,retval); + byteread += retval; + } + } + else { + while (remaining>0) { + if( !(f_read (&file, buffer, 256, &retval)) ) + //f_read (&file, buffer, 256, &retval); + if (retval>0) { + //emu_printi(retval); + memcpy(buf,buffer,retval); + buf += retval; + byteread += retval; + remaining -= retval; + } + else { + break; + } + } + } + return byteread; +} + +unsigned char emu_FileGetc(void) { + unsigned char c; + unsigned int retval=0; + if( !(f_read (&file, &c, 1, &retval)) ) + if (retval != 1) { + emu_printf("emu_FileGetc failed"); + } + return c; +} + + +void emu_FileClose(void) +{ + f_close(&file); +} + +int emu_FileSize(char * filename) +{ + int filesize=0; + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileSize..."); + emu_printf(filepath); + FILINFO entry; + f_stat(filepath, &entry); + filesize = entry.fsize; + return(filesize); +} + +int emu_FileSeek(int seek) +{ + f_lseek(&file, seek); + return (seek); +} + +#ifdef SDIO + + +int emu_FileTell(void) +{ +#ifdef USE_SDFS + return (f_tell(&file)); +#else + return (50); +#endif +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + filesize = file.size(); + emu_printf(filesize); + + if (size >= filesize) + { + if (emu_FileRead(buf, filesize) != filesize) + { + emu_printf("File read failed"); + } + } + file.close(); + } +#endif + + return(filesize); +} + +int emu_LoadFileSeek(char * filename, char * buf, int size, int seek) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFileSeek..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + f_lseek(&file, seek); + emu_printf(size); + if (size >= filesize) + { + int retval=0; + if( (!f_read (&file, buf, size, &retval)) ) + if (retval != size) + { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + file.seek(seek); + emu_printf(size); + if (file.read(buf, size) != size) { + emu_printf("File read failed"); + } + file.close(); + } +#endif + + return(filesize); +} +#endif + + + +void emu_init(void) +{ + sd_init_driver(); + FRESULT fr = f_mount(&fatfs, "0:", 1); + //emu_FileSystemInit(); + + strcpy(romspath,ROMSDIR); + nbFiles = readNbFiles(romspath); + + emu_printf("SD initialized, files found: "); + emu_printi(nbFiles); + + emu_InitJoysticks(); +#ifdef SWAP_JOYSTICK + joySwapped = true; +#else + joySwapped = false; +#endif + + toggleMenu(true); +} + + +void emu_start(void) +{ + + usbnavpad = 0; + + keys = (unsigned short *)key_map1; + keyMap = 0; +} diff --git a/MCUME_pico/pico5200/emuapi.h b/MCUME_pico/pico5200/emuapi.h new file mode 100644 index 0000000..b52c5bf --- /dev/null +++ b/MCUME_pico/pico5200/emuapi.h @@ -0,0 +1,163 @@ +#ifndef EMUAPI_H +#define EMUAPI_H + +#include "platform_config.h" + +#define CUSTOM_SND 1 +//#define TIMER_REND 1 +#define EXTRA_HEAP 0x10 + +// Title: < > +#define TITLE " Atari5200 Emulator" +#define ROMSDIR "5200" + +#define emu_Init(ROM) {at5_Init(); at5_Start(ROM);} +#define emu_Step(x) {at5_Step();} +#define emu_Input(x) {} + +#define PALETTE_SIZE 256 +#define VID_FRAME_SKIP 0x3 +#define TFT_VBUFFER_YCROP 0 +#define SINGLELINE_RENDERING 1 + +#define R32(rgb) ((rgb>>16)&0xff) +#define G32(rgb) ((rgb>>8)&0xff) +#define B32(rgb) (rgb & 0xff) + +#define ACTION_NONE 0 +#define ACTION_MAXKBDVAL 16 +#define ACTION_EXITKBD 128 +#define ACTION_RUNTFT 129 +#define ACTION_RUNVGA 130 + +#ifdef KEYMAP_PRESENT + +#define TAREA_W_DEF 32 +#define TAREA_H_DEF 32 +#define TAREA_END 255 +#define TAREA_NEW_ROW 254 +#define TAREA_NEW_COL 253 +#define TAREA_XY 252 +#define TAREA_WH 251 + +#define KEYBOARD_X 120 +#define KEYBOARD_Y 6 +#define KEYBOARD_KEY_H 23 +#define KEYBOARD_KEY_W 28 +#define KEYBOARD_HIT_COLOR RGBVAL16(0xff,0x00,0x00) + +const unsigned short keysw[] = { + TAREA_XY,KEYBOARD_X,KEYBOARD_Y, + TAREA_WH,KEYBOARD_KEY_W,KEYBOARD_KEY_H, + TAREA_NEW_ROW,28,28,28, + TAREA_NEW_COL,136, + TAREA_WH,KEYBOARD_KEY_W,KEYBOARD_KEY_H, + TAREA_NEW_ROW,28,28,28, + TAREA_NEW_ROW,28,28,28, + TAREA_NEW_ROW,28,28,28, + TAREA_NEW_ROW,28,28,28, + TAREA_END}; + + // These may be set to 1. The core handles clearing them. + // [BREAK] 0 [ # ] 1 [ 0 ] 2 [ * ] 3 + // [RESET] 4 [ 9 ] 5 [ 8 ] 6 [ 7 ] 7 + // [PAUSE] 8 [ 6 ] 9 [ 5 ] 10 [ 4 ] 11 + // [START] 12 [ 3 ] 13 [ 2 ] 14 [ 1 ] 15 + + +const unsigned short key_map1[] = { + 12+1,8+1,4+1, + 0, + 15+1,14+1,13+1, + 11+1,10+1,9+1, + 7+1,6+1,9+1, + 3+1,2+1,1+1 + }; + +#ifdef HAS_I2CKBD +const unsigned short i2ckeys[] = { + 0X0080,0X0008,0X0180,0X0108,0X0280,0X0208,0X0380,0X0308,0X0480,0X0408, + 0, 0X0040,0X0004,0X0140,0X0104,0X0240,0X0204,0X0340,0X0304,0X0440,0X0404, + 0, 0X0020,0X0002,0X0120,0X0102,0X0220,0X0202,0X0320,0X0302,0X0420,0X0402, + 0X0010,0X0001,0X0110,0X0101,0X0210,0X0201,0X0310,0X0301,0X0410,0X0401, + }; +#endif + +#endif + + + +#define MASK_JOY2_RIGHT 0x0001 +#define MASK_JOY2_LEFT 0x0002 +#define MASK_JOY2_UP 0x0004 +#define MASK_JOY2_DOWN 0x0008 +#define MASK_JOY2_BTN 0x0010 +#define MASK_KEY_USER1 0x0020 +#define MASK_KEY_USER2 0x0040 +#define MASK_KEY_USER3 0x0080 +#define MASK_JOY1_RIGHT 0x0100 +#define MASK_JOY1_LEFT 0x0200 +#define MASK_JOY1_UP 0x0400 +#define MASK_JOY1_DOWN 0x0800 +#define MASK_JOY1_BTN 0x1000 +#define MASK_KEY_USER4 0x2000 + + + +extern void emu_init(void); +extern void emu_start(void); +extern void emu_resetSD(void); + +extern void emu_printf(char * text); +extern void emu_printi(int val); +extern void * emu_Malloc(int size); +extern void emu_Free(void * pt); + +extern int emu_FileOpen(char * filename); +extern int emu_FileRead(char * buf, int size); +extern unsigned char emu_FileGetc(void); +extern int emu_FileSeek(int seek); +extern void emu_FileClose(void); +extern int emu_FileSize(char * filename); +extern int emu_LoadFile(char * filename, char * buf, int size); +extern int emu_LoadFileSeek(char * filename, char * buf, int size, int seek); +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); + +extern void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index); +extern void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride); +extern void emu_DrawLine(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line); +extern void emu_DrawVsync(void); +extern int emu_FrameSkip(void); +extern void * emu_LineBuffer(int line); + +extern void emu_InitJoysticks(void); +extern int emu_SwapJoysticks(int statusOnly); +extern unsigned short emu_DebounceLocalKeys(void); +extern int emu_ReadKeys(void); +extern int emu_GetPad(void); +extern int emu_ReadAnalogJoyX(int min, int max); +extern int emu_ReadAnalogJoyY(int min, int max); +extern int emu_ReadI2CKeyboard(void); +extern void emu_KeyboardOnUp(int keymodifer, int key); +extern void emu_KeyboardOnDown(int keymodifer, int key); + +extern void emu_sndPlaySound(int chan, int volume, int freq); +extern void emu_sndPlayBuzz(int size, int val); +extern void emu_sndInit(); +extern void emu_resetus(void); +extern int emu_us(void); + +extern int emu_setKeymap(int index); + +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); +extern void emu_printh(int val); + + + +#endif diff --git a/MCUME_pico/pico5200/font8x8.h b/MCUME_pico/pico5200/font8x8.h new file mode 100644 index 0000000..4f773da --- /dev/null +++ b/MCUME_pico/pico5200/font8x8.h @@ -0,0 +1,135 @@ + +// Font: c64_lower.64c + +const unsigned char font8x8[128][8] PROGMEM = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) + { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) + { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) + { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) + { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//) + { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) + { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) + { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) + { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F +}; + diff --git a/MCUME_pico/pico5200/gtia.c b/MCUME_pico/pico5200/gtia.c new file mode 100644 index 0000000..b5b2022 --- /dev/null +++ b/MCUME_pico/pico5200/gtia.c @@ -0,0 +1,1340 @@ +/* + * gtia.c - GTIA chip emulation + * + * Copyright (C) 1995-1998 David Firth + * Copyright (C) 1998-2015 Atari800 development team (see DOC/CREDITS) + * + * This file is part of the Atari800 emulator project which emulates + * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. + * + * Atari800 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. + * + * Atari800 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 Atari800; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +#include "antic.h" +#include "gtia.h" + +/* GTIA Registers ---------------------------------------------------------- */ + +UBYTE GTIA_M0PL; +UBYTE GTIA_M1PL; +UBYTE GTIA_M2PL; +UBYTE GTIA_M3PL; +UBYTE GTIA_P0PL; +UBYTE GTIA_P1PL; +UBYTE GTIA_P2PL; +UBYTE GTIA_P3PL; +UBYTE GTIA_HPOSP0; +UBYTE GTIA_HPOSP1; +UBYTE GTIA_HPOSP2; +UBYTE GTIA_HPOSP3; +UBYTE GTIA_HPOSM0; +UBYTE GTIA_HPOSM1; +UBYTE GTIA_HPOSM2; +UBYTE GTIA_HPOSM3; +UBYTE GTIA_SIZEP0; +UBYTE GTIA_SIZEP1; +UBYTE GTIA_SIZEP2; +UBYTE GTIA_SIZEP3; +UBYTE GTIA_SIZEM; +UBYTE GTIA_GRAFP0; +UBYTE GTIA_GRAFP1; +UBYTE GTIA_GRAFP2; +UBYTE GTIA_GRAFP3; +UBYTE GTIA_GRAFM; +UBYTE GTIA_COLPM0; +UBYTE GTIA_COLPM1; +UBYTE GTIA_COLPM2; +UBYTE GTIA_COLPM3; +UBYTE GTIA_COLPF0; +UBYTE GTIA_COLPF1; +UBYTE GTIA_COLPF2; +UBYTE GTIA_COLPF3; +UBYTE GTIA_COLBK; +UBYTE GTIA_PRIOR; +UBYTE GTIA_VDELAY; +UBYTE GTIA_GRACTL; + +/* Internal GTIA state ----------------------------------------------------- */ + +int GTIA_speaker; +int GTIA_consol_override = 0; +static UBYTE consol; +UBYTE consol_mask; +UBYTE GTIA_TRIG[4]; +UBYTE GTIA_TRIG_latch[4]; + +#if defined(BASIC) || defined(CURSES_BASIC) + +static UBYTE PF0PM = 0; +static UBYTE PF1PM = 0; +static UBYTE PF2PM = 0; +static UBYTE PF3PM = 0; +#define GTIA_collisions_mask_missile_playfield 0 +#define GTIA_collisions_mask_player_playfield 0 +#define GTIA_collisions_mask_missile_player 0 +#define GTIA_collisions_mask_player_player 0 + +#else /* defined(BASIC) || defined(CURSES_BASIC) */ + +void set_prior(UBYTE byte); /* in antic.c */ + +/* Player/Missile stuff ---------------------------------------------------- */ + +/* change to 0x00 to disable collisions */ +UBYTE GTIA_collisions_mask_missile_playfield = 0x0f; +UBYTE GTIA_collisions_mask_player_playfield = 0x0f; +UBYTE GTIA_collisions_mask_missile_player = 0x0f; +UBYTE GTIA_collisions_mask_player_player = 0x0f; + +#ifdef NEW_CYCLE_EXACT +/* temporary collision registers for the current scanline only */ +UBYTE P1PL_T; +UBYTE P2PL_T; +UBYTE P3PL_T; +UBYTE M0PL_T; +UBYTE M1PL_T; +UBYTE M2PL_T; +UBYTE M3PL_T; +/* If partial collisions have been generated during a scanline, this + * is the position of the up-to-date collision point , otherwise it is 0 + */ +int collision_curpos; +/* if hitclr has been written to during a scanline, this is the position + * within pm_scaline at which it was written to, and collisions should + * only be generated from this point on, otherwise it is 0 + */ +int hitclr_pos; +#else +#define P1PL_T GTIA_P1PL +#define P2PL_T GTIA_P2PL +#define P3PL_T GTIA_P3PL +#define M0PL_T GTIA_M0PL +#define M1PL_T GTIA_M1PL +#define M2PL_T GTIA_M2PL +#define M3PL_T GTIA_M3PL +#endif /* NEW_CYCLE_EXACT */ + +static UBYTE *hposp_ptr[4]; +static UBYTE *hposm_ptr[4]; +static ULONG hposp_mask[4]; + +static ULONG grafp_lookup[4][256]; +static ULONG *grafp_ptr[4]; +static int global_sizem[4]; + +static const int PM_Width[4] = {1, 2, 1, 4}; + +/* Meaning of bits in GTIA_pm_scanline: +bit 0 - Player 0 +bit 1 - Player 1 +bit 2 - Player 2 +bit 3 - Player 3 +bit 4 - Missile 0 +bit 5 - Missile 1 +bit 6 - Missile 2 +bit 7 - Missile 3 +*/ + +UBYTE GTIA_pm_scanline[ATARI_WIDTH / 2 + 8]; /* there's a byte for every *pair* of pixels */ +int GTIA_pm_dirty = TRUE; + +#define C_PM0 0x01 +#define C_PM1 0x02 +#define C_PM01 0x03 +#define C_PM2 0x04 +#define C_PM3 0x05 +#define C_PM23 0x06 +#define C_PM023 0x07 +#define C_PM123 0x08 +#define C_PM0123 0x09 +#define C_PM25 0x0a +#define C_PM35 0x0b +#define C_PM235 0x0c +#define C_COLLS 0x0d +#define C_BAK 0x00 +#define C_HI2 0x20 +#define C_HI3 0x30 +#define C_PF0 0x40 +#define C_PF1 0x50 +#define C_PF2 0x60 +#define C_PF3 0x70 + +#define PF0PM (*(UBYTE *) &ANTIC_cl[C_PF0 | C_COLLS]) +#define PF1PM (*(UBYTE *) &ANTIC_cl[C_PF1 | C_COLLS]) +#define PF2PM (*(UBYTE *) &ANTIC_cl[C_PF2 | C_COLLS]) +#define PF3PM (*(UBYTE *) &ANTIC_cl[C_PF3 | C_COLLS]) + +/* Colours ----------------------------------------------------------------- */ + +#ifdef USE_COLOUR_TRANSLATION_TABLE +UWORD colour_translation_table[256]; +#endif /* USE_COLOUR_TRANSLATION_TABLE */ + +static void setup_gtia9_11(void) { + int i; +#ifdef USE_COLOUR_TRANSLATION_TABLE + UWORD temp; + temp = colour_translation_table[GTIA_COLBK & 0xf0]; + ANTIC_lookup_gtia11[0] = ((ULONG) temp << 16) + temp; + for (i = 1; i < 16; i++) { + temp = colour_translation_table[GTIA_COLBK | i]; + ANTIC_lookup_gtia9[i] = ((ULONG) temp << 16) + temp; + temp = colour_translation_table[GTIA_COLBK | (i << 4)]; + ANTIC_lookup_gtia11[i] = ((ULONG) temp << 16) + temp; + } +#else + ULONG count9 = 0; + ULONG count11 = 0; + ANTIC_lookup_gtia11[0] = ANTIC_lookup_gtia9[0] & 0xf0f0f0f0; + for (i = 1; i < 16; i++) { + ANTIC_lookup_gtia9[i] = ANTIC_lookup_gtia9[0] | (count9 += 0x01010101); + ANTIC_lookup_gtia11[i] = ANTIC_lookup_gtia9[0] | (count11 += 0x10101010); + } +#endif +} + +#endif /* defined(BASIC) || defined(CURSES_BASIC) */ + +/* Initialization ---------------------------------------------------------- */ + +int GTIA_Initialise(void) +{ +#if !defined(BASIC) && !defined(CURSES_BASIC) + int i; + for (i = 0; i < 256; i++) { + int tmp = i + 0x100; + ULONG grafp1 = 0; + ULONG grafp2 = 0; + ULONG grafp4 = 0; + do { + grafp1 <<= 1; + grafp2 <<= 2; + grafp4 <<= 4; + if (tmp & 1) { + grafp1++; + grafp2 += 3; + grafp4 += 15; + } + tmp >>= 1; + } while (tmp != 1); + grafp_lookup[2][i] = grafp_lookup[0][i] = grafp1; + grafp_lookup[1][i] = grafp2; + grafp_lookup[3][i] = grafp4; + } + memset(ANTIC_cl, GTIA_COLOUR_BLACK, sizeof(ANTIC_cl)); + for (i = 0; i < 32; i++) + GTIA_PutByte((UWORD) i, 0); +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + + return TRUE; +} + +#ifdef NEW_CYCLE_EXACT + +/* generate updated PxPL and MxPL for part of a scanline */ +/* slow, but should be called rarely */ +static void generate_partial_pmpl_colls(int l, int r) +{ + int i; + if (r < 0 || l >= (int) sizeof(GTIA_pm_scanline) / (int) sizeof(GTIA_pm_scanline[0])) + return; + if (r >= (int) sizeof(GTIA_pm_scanline) / (int) sizeof(GTIA_pm_scanline[0])) { + r = (int) sizeof(GTIA_pm_scanline) / (int) sizeof(GTIA_pm_scanline[0]); + } + if (l < 0) + l = 0; + + for (i = l; i <= r; i++) { + UBYTE p = GTIA_pm_scanline[i]; +/* It is possible that some bits are set in PxPL/MxPL here, which would + * not otherwise be set ever in GTIA_NewPmScanline. This is because the + * player collisions are always generated in order in GTIA_NewPmScanline. + * However this does not cause any problem because we never use those bits + * of PxPL/MxPL in the collision reading code. + */ + GTIA_P1PL |= (p & (1 << 1)) ? p : 0; + GTIA_P2PL |= (p & (1 << 2)) ? p : 0; + GTIA_P3PL |= (p & (1 << 3)) ? p : 0; + GTIA_M0PL |= (p & (0x10 << 0)) ? p : 0; + GTIA_M1PL |= (p & (0x10 << 1)) ? p : 0; + GTIA_M2PL |= (p & (0x10 << 2)) ? p : 0; + GTIA_M3PL |= (p & (0x10 << 3)) ? p : 0; + } + +} + +/* update pm->pl collisions for a partial scanline */ +static void update_partial_pmpl_colls(void) +{ + int l = collision_curpos; + int r = ANTIC_XPOS * 2 - 37; + generate_partial_pmpl_colls(l, r); + collision_curpos = r; +} + +/* update pm-> pl collisions at the end of a scanline */ +void GTIA_UpdatePmplColls(void) +{ + if (hitclr_pos != 0){ + generate_partial_pmpl_colls(hitclr_pos, + sizeof(GTIA_pm_scanline) / sizeof(GTIA_pm_scanline[0]) - 1); +/* If hitclr was written to, then only part of GTIA_pm_scanline should be used + * for collisions */ + + } + else { +/* otherwise the whole of pm_scaline can be used for collisions. This will + * update the collision registers based on the generated collisions for the + * current line */ + GTIA_P1PL |= P1PL_T; + GTIA_P2PL |= P2PL_T; + GTIA_P3PL |= P3PL_T; + GTIA_M0PL |= M0PL_T; + GTIA_M1PL |= M1PL_T; + GTIA_M2PL |= M2PL_T; + GTIA_M3PL |= M3PL_T; + } + collision_curpos = 0; + hitclr_pos = 0; +} + +#else +#define update_partial_pmpl_colls() +#endif /* NEW_CYCLE_EXACT */ + +/* Prepare PMG scanline ---------------------------------------------------- */ + +#if !defined(BASIC) && !defined(CURSES_BASIC) + +void GTIA_NewPmScanline(void) +{ +#ifdef NEW_CYCLE_EXACT +/* reset temporary pm->pl collisions */ + P1PL_T = P2PL_T = P3PL_T = 0; + M0PL_T = M1PL_T = M2PL_T = M3PL_T = 0; +#endif /* NEW_CYCLE_EXACT */ +/* Clear if necessary */ + if (GTIA_pm_dirty) { + memset(GTIA_pm_scanline, 0, ATARI_WIDTH / 2); + GTIA_pm_dirty = FALSE; + } + +/* Draw Players */ + +#define DO_PLAYER(n) if (GTIA_GRAFP##n) { \ + ULONG grafp = grafp_ptr[n][GTIA_GRAFP##n] & hposp_mask[n]; \ + if (grafp) { \ + UBYTE *ptr = hposp_ptr[n]; \ + GTIA_pm_dirty = TRUE; \ + do { \ + if (grafp & 1) \ + P##n##PL_T |= *ptr |= 1 << n; \ + ptr++; \ + grafp >>= 1; \ + } while (grafp); \ + } \ +} + + /* optimized DO_PLAYER(0): GTIA_pm_scanline is clear and P0PL is unused */ + if (GTIA_GRAFP0) { + ULONG grafp = grafp_ptr[0][GTIA_GRAFP0] & hposp_mask[0]; + if (grafp) { + UBYTE *ptr = hposp_ptr[0]; + GTIA_pm_dirty = TRUE; + do { + if (grafp & 1) + *ptr = 1; + ptr++; + grafp >>= 1; + } while (grafp); + } + } + + DO_PLAYER(1) + DO_PLAYER(2) + DO_PLAYER(3) + +/* Draw Missiles */ + +#define DO_MISSILE(n,p,m,r,l) if (GTIA_GRAFM & m) { \ + int j = global_sizem[n]; \ + UBYTE *ptr = hposm_ptr[n]; \ + if (GTIA_GRAFM & r) { \ + if (GTIA_GRAFM & l) \ + j <<= 1; \ + } \ + else \ + ptr += j; \ + if (ptr < GTIA_pm_scanline + 2) { \ + j += ptr - GTIA_pm_scanline - 2; \ + ptr = GTIA_pm_scanline + 2; \ + } \ + else if (ptr + j > GTIA_pm_scanline + ATARI_WIDTH / 2 - 2) \ + j = GTIA_pm_scanline + ATARI_WIDTH / 2 - 2 - ptr; \ + if (j > 0) \ + do \ + M##n##PL_T |= *ptr++ |= p; \ + while (--j); \ +} + + if (GTIA_GRAFM) { + GTIA_pm_dirty = TRUE; + DO_MISSILE(3, 0x80, 0xc0, 0x80, 0x40) + DO_MISSILE(2, 0x40, 0x30, 0x20, 0x10) + DO_MISSILE(1, 0x20, 0x0c, 0x08, 0x04) + DO_MISSILE(0, 0x10, 0x03, 0x02, 0x01) + } +} + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + +/* GTIA registers ---------------------------------------------------------- */ + +void GTIA_Frame(void) +{ +#ifdef BASIC + consol = 0xf; +#else +#if SKIP + consol = INPUT_key_consol | 0x08; +#else + consol = 0xf; +#endif +#endif + + if (GTIA_GRACTL & 4) { + GTIA_TRIG_latch[0] &= GTIA_TRIG[0]; + GTIA_TRIG_latch[1] &= GTIA_TRIG[1]; + GTIA_TRIG_latch[2] &= GTIA_TRIG[2]; + GTIA_TRIG_latch[3] &= GTIA_TRIG[3]; + } +} + +UBYTE GTIA_GetByte(UWORD addr, int no_side_effects) +{ + switch (addr & 0x1f) { + case GTIA_OFFSET_M0PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x10) >> 4) + + ((PF1PM & 0x10) >> 3) + + ((PF2PM & 0x10) >> 2) + + ((PF3PM & 0x10) >> 1)) & GTIA_collisions_mask_missile_playfield; + case GTIA_OFFSET_M1PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x20) >> 5) + + ((PF1PM & 0x20) >> 4) + + ((PF2PM & 0x20) >> 3) + + ((PF3PM & 0x20) >> 2)) & GTIA_collisions_mask_missile_playfield; + case GTIA_OFFSET_M2PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x40) >> 6) + + ((PF1PM & 0x40) >> 5) + + ((PF2PM & 0x40) >> 4) + + ((PF3PM & 0x40) >> 3)) & GTIA_collisions_mask_missile_playfield; + case GTIA_OFFSET_M3PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x80) >> 7) + + ((PF1PM & 0x80) >> 6) + + ((PF2PM & 0x80) >> 5) + + ((PF3PM & 0x80) >> 4)) & GTIA_collisions_mask_missile_playfield; + case GTIA_OFFSET_P0PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return ((PF0PM & 0x01) + + ((PF1PM & 0x01) << 1) + + ((PF2PM & 0x01) << 2) + + ((PF3PM & 0x01) << 3)) & GTIA_collisions_mask_player_playfield; + case GTIA_OFFSET_P1PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x02) >> 1) + + (PF1PM & 0x02) + + ((PF2PM & 0x02) << 1) + + ((PF3PM & 0x02) << 2)) & GTIA_collisions_mask_player_playfield; + case GTIA_OFFSET_P2PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x04) >> 2) + + ((PF1PM & 0x04) >> 1) + + (PF2PM & 0x04) + + ((PF3PM & 0x04) << 1)) & GTIA_collisions_mask_player_playfield; + case GTIA_OFFSET_P3PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x08) >> 3) + + ((PF1PM & 0x08) >> 2) + + ((PF2PM & 0x08) >> 1) + + (PF3PM & 0x08)) & GTIA_collisions_mask_player_playfield; + case GTIA_OFFSET_M0PL: + update_partial_pmpl_colls(); + return GTIA_M0PL & GTIA_collisions_mask_missile_player; + case GTIA_OFFSET_M1PL: + update_partial_pmpl_colls(); + return GTIA_M1PL & GTIA_collisions_mask_missile_player; + case GTIA_OFFSET_M2PL: + update_partial_pmpl_colls(); + return GTIA_M2PL & GTIA_collisions_mask_missile_player; + case GTIA_OFFSET_M3PL: + update_partial_pmpl_colls(); + return GTIA_M3PL & GTIA_collisions_mask_missile_player; + case GTIA_OFFSET_P0PL: + update_partial_pmpl_colls(); + return (((GTIA_P1PL & 0x01) << 1) /* mask in player 1 */ + + ((GTIA_P2PL & 0x01) << 2) /* mask in player 2 */ + + ((GTIA_P3PL & 0x01) << 3)) /* mask in player 3 */ + & GTIA_collisions_mask_player_player; + case GTIA_OFFSET_P1PL: + update_partial_pmpl_colls(); + return ((GTIA_P1PL & 0x01) /* mask in player 0 */ + + ((GTIA_P2PL & 0x02) << 1) /* mask in player 2 */ + + ((GTIA_P3PL & 0x02) << 2)) /* mask in player 3 */ + & GTIA_collisions_mask_player_player; + case GTIA_OFFSET_P2PL: + update_partial_pmpl_colls(); + return ((GTIA_P2PL & 0x03) /* mask in player 0 and 1 */ + + ((GTIA_P3PL & 0x04) << 1)) /* mask in player 3 */ + & GTIA_collisions_mask_player_player; + case GTIA_OFFSET_P3PL: + update_partial_pmpl_colls(); + return (GTIA_P3PL & 0x07) /* mask in player 0,1, and 2 */ + & GTIA_collisions_mask_player_player; + case GTIA_OFFSET_TRIG0: + return GTIA_TRIG[0] & GTIA_TRIG_latch[0]; + case GTIA_OFFSET_TRIG1: + return GTIA_TRIG[1] & GTIA_TRIG_latch[1]; + case GTIA_OFFSET_TRIG2: + return GTIA_TRIG[2] & GTIA_TRIG_latch[2]; + case GTIA_OFFSET_TRIG3: + return GTIA_TRIG[3] & GTIA_TRIG_latch[3]; + case GTIA_OFFSET_PAL: + return (tv_mode == TV_PAL) ? 0x01 : 0x0f; + case GTIA_OFFSET_CONSOL: + { +#if SKIP + UBYTE byte = consol & consol_mask; + if (!no_side_effects && GTIA_consol_override > 0) { + /* Check if we're called from outside OS. This avoids sending + console keystrokes to diagnostic cartridges. */ + if (CPU_regPC < 0xc000) + /* Not from OS. Disable console override. */ + GTIA_consol_override = 0; + else { + --GTIA_consol_override; + if (Atari800_builtin_basic && Atari800_disable_basic && !BINLOAD_loading_basic) + /* Only for XL/XE - hold Option during reboot. */ + byte &= ~INPUT_CONSOL_OPTION; + if (CASSETTE_hold_start && Atari800_machine_type != Atari800_MACHINE_5200) { + /* Only for the computers - hold Start during reboot. */ + byte &= ~INPUT_CONSOL_START; + if (GTIA_consol_override == 0) { + /* press Space after Start to start cassette boot. */ + CASSETTE_press_space = 1; + CASSETTE_hold_start = CASSETTE_hold_start_on_reboot; + } + } + } + } +#else + UBYTE byte = consol_mask; +#endif + return byte; + } + default: + break; + } + + return 0xf; +} + +void GTIA_PutByte(UWORD addr, UBYTE byte) +{ +#if !defined(BASIC) && !defined(CURSES_BASIC) + UWORD cword; + UWORD cword2; + +#ifdef NEW_CYCLE_EXACT + int x; /* the cycle-exact update position in GTIA_pm_scanline */ + if (ANTIC_DRAWING_SCREEN) { + if ((addr & 0x1f) != GTIA_PRIOR) { + ANTIC_UpdateScanline(); + } else { + ANTIC_UpdateScanlinePrior(byte); + } + } +#define UPDATE_PM_CYCLE_EXACT if(ANTIC_DRAWING_SCREEN) GTIA_NewPmScanline(); +#else +#define UPDATE_PM_CYCLE_EXACT +#endif + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + + switch (addr & 0x1f) { + case GTIA_OFFSET_CONSOL: + GTIA_speaker = !(byte & 0x08); +#ifdef CONSOLE_SOUND + POKEYSND_UpdateConsol(1); +#endif +#ifdef SKIP + consol_mask = (~byte) & 0x0f; +#else + consol_mask = byte; +#endif + break; + +#if defined(BASIC) || defined(CURSES_BASIC) + + /* We use these for Antic modes 6, 7 on Curses */ + case GTIA_OFFSET_COLPF0: + GTIA_COLPF0 = byte; + break; + case GTIA_OFFSET_COLPF1: + GTIA_COLPF1 = byte; + break; + case GTIA_OFFSET_COLPF2: + GTIA_COLPF2 = byte; + break; + case GTIA_OFFSET_COLPF3: + GTIA_COLPF3 = byte; + break; + +#else + +#ifdef USE_COLOUR_TRANSLATION_TABLE + case GTIA_OFFSET_COLBK: + GTIA_COLBK = byte &= 0xfe; + ANTIC_cl[C_BAK] = cword = colour_translation_table[byte]; + if (cword != (UWORD) (ANTIC_lookup_gtia9[0]) ) { + ANTIC_lookup_gtia9[0] = cword + (cword << 16); + if (GTIA_PRIOR & 0x40) + setup_gtia9_11(); + } + break; + case GTIA_OFFSET_COLPF0: + GTIA_COLPF0 = byte &= 0xfe; + ANTIC_cl[C_PF0] = cword = GTIA_colour_translation_table[byte]; + if ((GTIA_PRIOR & 1) == 0) { + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF0 | C_PM3] = ANTIC_cl[C_PF0 | C_PM2] = cword; + if ((GTIA_PRIOR & 3) == 0) { + if (GTIA_PRIOR & 0xf) { + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF0 | C_PM1] = ANTIC_cl[C_PF0 | C_PM0] = cword; + if ((GTIA_PRIOR & 0xf) == 0xc) + ANTIC_cl[C_PF0 | C_PM0123] = ANTIC_cl[C_PF0 | C_PM123] = ANTIC_cl[C_PF0 | C_PM023] = cword; + } + else { + ANTIC_cl[C_PF0 | C_PM0] = colour_translation_table[byte | GTIA_COLPM0]; + ANTIC_cl[C_PF0 | C_PM1] = colour_translation_table[byte | GTIA_COLPM1]; + ANTIC_cl[C_PF0 | C_PM01] = colour_translation_table[byte | GTIA_COLPM0 | GTIA_COLPM1]; + } + } + if ((GTIA_PRIOR & 0xf) >= 0xa) + ANTIC_cl[C_PF0 | C_PM25] = cword; + } + break; + case GTIA_OFFSET_COLPF1: + GTIA_COLPF1 = byte &= 0xfe; + ANTIC_cl[C_PF1] = cword = GTIA_colour_translation_table[byte]; + if ((GTIA_PRIOR & 1) == 0) { + ANTIC_cl[C_PF1 | C_PM23] = ANTIC_cl[C_PF1 | C_PM3] = ANTIC_cl[C_PF1 | C_PM2] = cword; + if ((GTIA_PRIOR & 3) == 0) { + if (GTIA_PRIOR & 0xf) { + ANTIC_cl[C_PF1 | C_PM01] = ANTIC_cl[C_PF1 | C_PM1] = ANTIC_cl[C_PF1 | C_PM0] = cword; + if ((GTIA_PRIOR & 0xf) == 0xc) + ANTIC_cl[C_PF1 | C_PM0123] = ANTIC_cl[C_PF1 | C_PM123] = ANTIC_cl[C_PF1 | C_PM023] = cword; + } + else { + ANTIC_cl[C_PF1 | C_PM0] = colour_translation_table[byte | GTIA_COLPM0]; + ANTIC_cl[C_PF1 | C_PM1] = colour_translation_table[byte | GTIA_COLPM1]; + ANTIC_cl[C_PF1 | C_PM01] = colour_translation_table[byte | GTIA_COLPM0 | GTIA_COLPM1]; + } + } + } + { + UBYTE byte2 = (GTIA_COLPF2 & 0xf0) + (byte & 0xf); + ANTIC_cl[C_HI2] = cword = colour_translation_table[byte2]; + ANTIC_cl[C_HI3] = colour_translation_table[(GTIA_COLPF3 & 0xf0) | (byte & 0xf)]; + if (GTIA_PRIOR & 4) + ANTIC_cl[C_HI2 | C_PM01] = ANTIC_cl[C_HI2 | C_PM1] = ANTIC_cl[C_HI2 | C_PM0] = cword; + if ((GTIA_PRIOR & 9) == 0) { + if (GTIA_PRIOR & 0xf) + ANTIC_cl[C_HI2 | C_PM23] = ANTIC_cl[C_HI2 | C_PM3] = ANTIC_cl[C_HI2 | C_PM2] = cword; + else { + ANTIC_cl[C_HI2 | C_PM2] = colour_translation_table[byte2 | (GTIA_COLPM2 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM3] = colour_translation_table[byte2 | (GTIA_COLPM3 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM23] = colour_translation_table[byte2 | ((GTIA_COLPM2 | GTIA_COLPM3) & 0xf0)]; + } + } + } + break; + case GTIA_OFFSET_COLPF2: + GTIA_COLPF2 = byte &= 0xfe; + ANTIC_cl[C_PF2] = cword = GTIA_colour_translation_table[byte]; + { + UBYTE byte2 = (byte & 0xf0) + (GTIA_COLPF1 & 0xf); + ANTIC_cl[C_HI2] = cword2 = colour_translation_table[byte2]; + if (GTIA_PRIOR & 4) { + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PF2 | C_PM0] = cword; + ANTIC_cl[C_HI2 | C_PM01] = ANTIC_cl[C_HI2 | C_PM1] = ANTIC_cl[C_HI2 | C_PM0] = cword2; + } + if ((GTIA_PRIOR & 9) == 0) { + if (GTIA_PRIOR & 0xf) { + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF2 | C_PM3] = ANTIC_cl[C_PF2 | C_PM2] = cword; + ANTIC_cl[C_HI2 | C_PM23] = ANTIC_cl[C_HI2 | C_PM3] = ANTIC_cl[C_HI2 | C_PM2] = cword2; + } + else { + ANTIC_cl[C_PF2 | C_PM2] = colour_translation_table[byte | GTIA_COLPM2]; + ANTIC_cl[C_PF2 | C_PM3] = colour_translation_table[byte | GTIA_COLPM3]; + ANTIC_cl[C_PF2 | C_PM23] = colour_translation_table[byte | GTIA_COLPM2 | GTIA_COLPM3]; + ANTIC_cl[C_HI2 | C_PM2] = colour_translation_table[byte2 | (GTIA_COLPM2 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM3] = colour_translation_table[byte2 | (GTIA_COLPM3 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM23] = colour_translation_table[byte2 | ((GTIA_COLPM2 | GTIA_COLPM3) & 0xf0)]; + } + } + } + break; + case GTIA_OFFSET_COLPF3: + GTIA_COLPF3 = byte &= 0xfe; + ANTIC_cl[C_PF3] = cword = colour_translation_table[byte]; + ANTIC_cl[C_HI3] = cword2 = colour_translation_table[(byte & 0xf0) | (GTIA_COLPF1 & 0xf)]; + if (GTIA_PRIOR & 4) + ANTIC_cl[C_PF3 | C_PM01] = ANTIC_cl[C_PF3 | C_PM1] = ANTIC_cl[C_PF3 | C_PM0] = cword; + if ((GTIA_PRIOR & 9) == 0) { + if (GTIA_PRIOR & 0xf) + ANTIC_cl[C_PF3 | C_PM23] = ANTIC_cl[C_PF3 | C_PM3] = ANTIC_cl[C_PF3 | C_PM2] = cword; + else { + ANTIC_cl[C_PF3 | C_PM25] = ANTIC_cl[C_PF2 | C_PM25] = ANTIC_cl[C_PM25] = ANTIC_cl[C_PF3 | C_PM2] = colour_translation_table[byte | GTIA_COLPM2]; + ANTIC_cl[C_PF3 | C_PM35] = ANTIC_cl[C_PF2 | C_PM35] = ANTIC_cl[C_PM35] = ANTIC_cl[C_PF3 | C_PM3] = colour_translation_table[byte | GTIA_COLPM3]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23] = colour_translation_table[byte | GTIA_COLPM2 | GTIA_COLPM3]; + ANTIC_cl[C_PF0 | C_PM235] = ANTIC_cl[C_PF0 | C_PM35] = ANTIC_cl[C_PF0 | C_PM25] = + ANTIC_cl[C_PF1 | C_PM235] = ANTIC_cl[C_PF1 | C_PM35] = ANTIC_cl[C_PF1 | C_PM25] = cword; + } + } + break; + case GTIA_OFFSET_COLPM0: + GTIA_COLPM0 = byte &= 0xfe; + ANTIC_cl[C_PM023] = ANTIC_cl[C_PM0] = cword = colour_translation_table[byte]; + { + UBYTE byte2 = byte | GTIA_COLPM1; + ANTIC_cl[C_PM0123] = ANTIC_cl[C_PM01] = cword2 = colour_translation_table[byte2]; + if ((GTIA_PRIOR & 4) == 0) { + ANTIC_cl[C_PF2 | C_PM0] = ANTIC_cl[C_PF3 | C_PM0] = cword; + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF3 | C_PM01] = cword2; + ANTIC_cl[C_HI2 | C_PM0] = colour_translation_table[(byte & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM01] = colour_translation_table[(byte2 & 0xf0) | (GTIA_COLPF1 & 0xf)]; + if ((GTIA_PRIOR & 0xc) == 0) { + if (GTIA_PRIOR & 3) { + ANTIC_cl[C_PF0 | C_PM0] = ANTIC_cl[C_PF1 | C_PM0] = cword; + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF1 | C_PM01] = cword2; + } + else { + ANTIC_cl[C_PF0 | C_PM0] = colour_translation_table[byte | GTIA_COLPF0]; + ANTIC_cl[C_PF1 | C_PM0] = colour_translation_table[byte | GTIA_COLPF1]; + ANTIC_cl[C_PF0 | C_PM01] = colour_translation_table[byte2 | GTIA_COLPF0]; + ANTIC_cl[C_PF1 | C_PM01] = colour_translation_table[byte2 | GTIA_COLPF1]; + } + } + } + } + break; + case GTIA_OFFSET_COLPM1: + GTIA_COLPM1 = byte &= 0xfe; + ANTIC_cl[C_PM123] = ANTIC_cl[C_PM1] = cword = colour_translation_table[byte]; + { + UBYTE byte2 = byte | GTIA_COLPM0; + ANTIC_cl[C_PM0123] = ANTIC_cl[C_PM01] = cword2 = colour_translation_table[byte2]; + if ((GTIA_PRIOR & 4) == 0) { + ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PF3 | C_PM1] = cword; + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF3 | C_PM01] = cword2; + ANTIC_cl[C_HI2 | C_PM1] = colour_translation_table[(byte & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM01] = colour_translation_table[(byte2 & 0xf0) | (GTIA_COLPF1 & 0xf)]; + if ((GTIA_PRIOR & 0xc) == 0) { + if (GTIA_PRIOR & 3) { + ANTIC_cl[C_PF0 | C_PM1] = ANTIC_cl[C_PF1 | C_PM1] = cword; + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF1 | C_PM01] = cword2; + } + else { + ANTIC_cl[C_PF0 | C_PM1] = colour_translation_table[byte | GTIA_COLPF0]; + ANTIC_cl[C_PF1 | C_PM1] = colour_translation_table[byte | GTIA_COLPF1]; + ANTIC_cl[C_PF0 | C_PM01] = colour_translation_table[byte2 | GTIA_COLPF0]; + ANTIC_cl[C_PF1 | C_PM01] = colour_translation_table[byte2 | GTIA_COLPF1]; + } + } + } + } + break; + case GTIA_OFFSET_COLPM2: + GTIA_COLPM2 = byte &= 0xfe; + ANTIC_cl[C_PM2] = cword = colour_translation_table[byte]; + { + UBYTE byte2 = byte | GTIA_COLPM3; + ANTIC_cl[C_PM23] = cword2 = colour_translation_table[byte2]; + if (GTIA_PRIOR & 1) { + ANTIC_cl[C_PF0 | C_PM2] = ANTIC_cl[C_PF1 | C_PM2] = cword; + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF1 | C_PM23] = cword2; + } + if ((GTIA_PRIOR & 6) == 0) { + if (GTIA_PRIOR & 9) { + ANTIC_cl[C_PF2 | C_PM2] = ANTIC_cl[C_PF3 | C_PM2] = cword; + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF3 | C_PM23] = cword2; + ANTIC_cl[C_HI2 | C_PM2] = colour_translation_table[(byte & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM23] = colour_translation_table[(byte2 & 0xf0) | (GTIA_COLPF1 & 0xf)]; + } + else { + ANTIC_cl[C_PF2 | C_PM2] = colour_translation_table[byte | GTIA_COLPF2]; + ANTIC_cl[C_PF3 | C_PM25] = ANTIC_cl[C_PF2 | C_PM25] = ANTIC_cl[C_PM25] = ANTIC_cl[C_PF3 | C_PM2] = colour_translation_table[byte | GTIA_COLPF3]; + ANTIC_cl[C_PF2 | C_PM23] = colour_translation_table[byte2 | GTIA_COLPF2]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23] = colour_translation_table[byte2 | GTIA_COLPF3]; + ANTIC_cl[C_HI2 | C_PM2] = colour_translation_table[((byte | GTIA_COLPF2) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM25] = colour_translation_table[((byte | GTIA_COLPF3) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM23] = colour_translation_table[((byte2 | GTIA_COLPF2) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM235] = colour_translation_table[((byte2 | GTIA_COLPF3) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + } + } + } + break; + case GTIA_OFFSET_COLPM3: + GTIA_COLPM3 = byte &= 0xfe; + ANTIC_cl[C_PM3] = cword = colour_translation_table[byte]; + { + UBYTE byte2 = byte | GTIA_COLPM2; + ANTIC_cl[C_PM23] = cword2 = colour_translation_table[byte2]; + if (GTIA_PRIOR & 1) { + ANTIC_cl[C_PF0 | C_PM3] = ANTIC_cl[C_PF1 | C_PM3] = cword; + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF1 | C_PM23] = cword2; + } + if ((GTIA_PRIOR & 6) == 0) { + if (GTIA_PRIOR & 9) { + ANTIC_cl[C_PF2 | C_PM3] = ANTIC_cl[C_PF3 | C_PM3] = cword; + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF3 | C_PM23] = cword2; + } + else { + ANTIC_cl[C_PF2 | C_PM3] = colour_translation_table[byte | GTIA_COLPF2]; + ANTIC_cl[C_PF3 | C_PM35] = ANTIC_cl[C_PF2 | C_PM35] = ANTIC_cl[C_PM35] = ANTIC_cl[C_PF3 | C_PM3] = colour_translation_table[byte | GTIA_COLPF3]; + ANTIC_cl[C_PF2 | C_PM23] = colour_translation_table[byte2 | GTIA_COLPF2]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23] = colour_translation_table[byte2 | GTIA_COLPF3]; + ANTIC_cl[C_HI2 | C_PM3] = colour_translation_table[((byte | GTIA_COLPF2) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM23] = colour_translation_table[((byte2 | GTIA_COLPF2) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + } + } + } + break; +#else /* USE_COLOUR_TRANSLATION_TABLE */ + case GTIA_OFFSET_COLBK: + GTIA_COLBK = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_BAK] = cword; + if (cword != (UWORD) (ANTIC_lookup_gtia9[0]) ) { + ANTIC_lookup_gtia9[0] = cword + (cword << 16); + if (GTIA_PRIOR & 0x40) + setup_gtia9_11(); + } + break; + case GTIA_OFFSET_COLPF0: + GTIA_COLPF0 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PF0] = cword; + if ((GTIA_PRIOR & 1) == 0) { + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF0 | C_PM3] = ANTIC_cl[C_PF0 | C_PM2] = cword; + if ((GTIA_PRIOR & 3) == 0) { + if (GTIA_PRIOR & 0xf) { + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF0 | C_PM1] = ANTIC_cl[C_PF0 | C_PM0] = cword; + if ((GTIA_PRIOR & 0xf) == 0xc) + ANTIC_cl[C_PF0 | C_PM0123] = ANTIC_cl[C_PF0 | C_PM123] = ANTIC_cl[C_PF0 | C_PM023] = cword; + } + else + ANTIC_cl[C_PF0 | C_PM01] = (ANTIC_cl[C_PF0 | C_PM0] = cword | ANTIC_cl[C_PM0]) | (ANTIC_cl[C_PF0 | C_PM1] = cword | ANTIC_cl[C_PM1]); + } + if ((GTIA_PRIOR & 0xf) >= 0xa) + ANTIC_cl[C_PF0 | C_PM25] = cword; + } + break; + case GTIA_OFFSET_COLPF1: + GTIA_COLPF1 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PF1] = cword; + if ((GTIA_PRIOR & 1) == 0) { + ANTIC_cl[C_PF1 | C_PM23] = ANTIC_cl[C_PF1 | C_PM3] = ANTIC_cl[C_PF1 | C_PM2] = cword; + if ((GTIA_PRIOR & 3) == 0) { + if (GTIA_PRIOR & 0xf) { + ANTIC_cl[C_PF1 | C_PM01] = ANTIC_cl[C_PF1 | C_PM1] = ANTIC_cl[C_PF1 | C_PM0] = cword; + if ((GTIA_PRIOR & 0xf) == 0xc) + ANTIC_cl[C_PF1 | C_PM0123] = ANTIC_cl[C_PF1 | C_PM123] = ANTIC_cl[C_PF1 | C_PM023] = cword; + } + else + ANTIC_cl[C_PF1 | C_PM01] = (ANTIC_cl[C_PF1 | C_PM0] = cword | ANTIC_cl[C_PM0]) | (ANTIC_cl[C_PF1 | C_PM1] = cword | ANTIC_cl[C_PM1]); + } + } + ((UBYTE *)ANTIC_hires_lookup_l)[0x80] = ((UBYTE *)ANTIC_hires_lookup_l)[0x41] = (UBYTE) + (ANTIC_hires_lookup_l[0x60] = cword & 0xf0f); + break; + case GTIA_OFFSET_COLPF2: + GTIA_COLPF2 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PF2] = cword; + if (GTIA_PRIOR & 4) + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PF2 | C_PM0] = cword; + if ((GTIA_PRIOR & 9) == 0) { + if (GTIA_PRIOR & 0xf) + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF2 | C_PM3] = ANTIC_cl[C_PF2 | C_PM2] = cword; + else + ANTIC_cl[C_PF2 | C_PM23] = (ANTIC_cl[C_PF2 | C_PM2] = cword | ANTIC_cl[C_PM2]) | (ANTIC_cl[C_PF2 | C_PM3] = cword | ANTIC_cl[C_PM3]); + } + break; + case GTIA_OFFSET_COLPF3: + GTIA_COLPF3 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PF3] = cword; + if (GTIA_PRIOR & 4) + ANTIC_cl[C_PF3 | C_PM01] = ANTIC_cl[C_PF3 | C_PM1] = ANTIC_cl[C_PF3 | C_PM0] = cword; + if ((GTIA_PRIOR & 9) == 0) { + if (GTIA_PRIOR & 0xf) + ANTIC_cl[C_PF3 | C_PM23] = ANTIC_cl[C_PF3 | C_PM3] = ANTIC_cl[C_PF3 | C_PM2] = cword; + else { + ANTIC_cl[C_PF3 | C_PM25] = ANTIC_cl[C_PF2 | C_PM25] = ANTIC_cl[C_PM25] = ANTIC_cl[C_PF3 | C_PM2] = cword | ANTIC_cl[C_PM2]; + ANTIC_cl[C_PF3 | C_PM35] = ANTIC_cl[C_PF2 | C_PM35] = ANTIC_cl[C_PM35] = ANTIC_cl[C_PF3 | C_PM3] = cword | ANTIC_cl[C_PM3]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23] = ANTIC_cl[C_PF3 | C_PM2] | ANTIC_cl[C_PF3 | C_PM3]; + ANTIC_cl[C_PF0 | C_PM235] = ANTIC_cl[C_PF0 | C_PM35] = ANTIC_cl[C_PF0 | C_PM25] = + ANTIC_cl[C_PF1 | C_PM235] = ANTIC_cl[C_PF1 | C_PM35] = ANTIC_cl[C_PF1 | C_PM25] = cword; + } + } + break; + case GTIA_OFFSET_COLPM0: + GTIA_COLPM0 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PM023] = ANTIC_cl[C_PM0] = cword; + ANTIC_cl[C_PM0123] = ANTIC_cl[C_PM01] = cword2 = cword | ANTIC_cl[C_PM1]; + if ((GTIA_PRIOR & 4) == 0) { + ANTIC_cl[C_PF2 | C_PM0] = ANTIC_cl[C_PF3 | C_PM0] = cword; + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF3 | C_PM01] = cword2; + if ((GTIA_PRIOR & 0xc) == 0) { + if (GTIA_PRIOR & 3) { + ANTIC_cl[C_PF0 | C_PM0] = ANTIC_cl[C_PF1 | C_PM0] = cword; + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF1 | C_PM01] = cword2; + } + else { + ANTIC_cl[C_PF0 | C_PM0] = cword | ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM0] = cword | ANTIC_cl[C_PF1]; + ANTIC_cl[C_PF0 | C_PM01] = cword2 | ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM01] = cword2 | ANTIC_cl[C_PF1]; + } + } + } + break; + case GTIA_OFFSET_COLPM1: + GTIA_COLPM1 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PM123] = ANTIC_cl[C_PM1] = cword; + ANTIC_cl[C_PM0123] = ANTIC_cl[C_PM01] = cword2 = cword | ANTIC_cl[C_PM0]; + if ((GTIA_PRIOR & 4) == 0) { + ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PF3 | C_PM1] = cword; + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF3 | C_PM01] = cword2; + if ((GTIA_PRIOR & 0xc) == 0) { + if (GTIA_PRIOR & 3) { + ANTIC_cl[C_PF0 | C_PM1] = ANTIC_cl[C_PF1 | C_PM1] = cword; + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF1 | C_PM01] = cword2; + } + else { + ANTIC_cl[C_PF0 | C_PM1] = cword | ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM1] = cword | ANTIC_cl[C_PF1]; + ANTIC_cl[C_PF0 | C_PM01] = cword2 | ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM01] = cword2 | ANTIC_cl[C_PF1]; + } + } + } + break; + case GTIA_OFFSET_COLPM2: + GTIA_COLPM2 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PM2] = cword; + ANTIC_cl[C_PM23] = cword2 = cword | ANTIC_cl[C_PM3]; + if (GTIA_PRIOR & 1) { + ANTIC_cl[C_PF0 | C_PM2] = ANTIC_cl[C_PF1 | C_PM2] = cword; + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF1 | C_PM23] = cword2; + } + if ((GTIA_PRIOR & 6) == 0) { + if (GTIA_PRIOR & 9) { + ANTIC_cl[C_PF2 | C_PM2] = ANTIC_cl[C_PF3 | C_PM2] = cword; + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF3 | C_PM23] = cword2; + } + else { + ANTIC_cl[C_PF2 | C_PM2] = cword | ANTIC_cl[C_PF2]; + ANTIC_cl[C_PF3 | C_PM25] = ANTIC_cl[C_PF2 | C_PM25] = ANTIC_cl[C_PM25] = ANTIC_cl[C_PF3 | C_PM2] = cword | ANTIC_cl[C_PF3]; + ANTIC_cl[C_PF2 | C_PM23] = cword2 | ANTIC_cl[C_PF2]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23] = cword2 | ANTIC_cl[C_PF3]; + } + } + break; + case GTIA_OFFSET_COLPM3: + GTIA_COLPM3 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PM3] = cword; + ANTIC_cl[C_PM23] = cword2 = cword | ANTIC_cl[C_PM2]; + if (GTIA_PRIOR & 1) { + ANTIC_cl[C_PF0 | C_PM3] = ANTIC_cl[C_PF1 | C_PM3] = cword; + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF1 | C_PM23] = cword2; + } + if ((GTIA_PRIOR & 6) == 0) { + if (GTIA_PRIOR & 9) { + ANTIC_cl[C_PF2 | C_PM3] = ANTIC_cl[C_PF3 | C_PM3] = cword; + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF3 | C_PM23] = cword2; + } + else { + ANTIC_cl[C_PF2 | C_PM3] = cword | ANTIC_cl[C_PF2]; + ANTIC_cl[C_PF3 | C_PM35] = ANTIC_cl[C_PF2 | C_PM35] = ANTIC_cl[C_PM35] = ANTIC_cl[C_PF3 | C_PM3] = cword | ANTIC_cl[C_PF3]; + ANTIC_cl[C_PF2 | C_PM23] = cword2 | ANTIC_cl[C_PF2]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23] = cword2 | ANTIC_cl[C_PF3]; + } + } + break; +#endif /* USE_COLOUR_TRANSLATION_TABLE */ + case GTIA_OFFSET_GRAFM: + GTIA_GRAFM = byte; + UPDATE_PM_CYCLE_EXACT + break; + +#ifdef NEW_CYCLE_EXACT +#define CYCLE_EXACT_GRAFP(n) x = ANTIC_XPOS * 2 - 3;\ + if (GTIA_HPOSP##n >= x) {\ + /* hpos right of x */\ + /* redraw */ \ + UPDATE_PM_CYCLE_EXACT\ + } +#else +#define CYCLE_EXACT_GRAFP(n) +#endif /* NEW_CYCLE_EXACT */ + +#define DO_GRAFP(n) case GTIA_OFFSET_GRAFP##n:\ + GTIA_GRAFP##n = byte;\ + CYCLE_EXACT_GRAFP(n);\ + break; + + DO_GRAFP(0) + DO_GRAFP(1) + DO_GRAFP(2) + DO_GRAFP(3) + + case GTIA_OFFSET_HITCLR: + GTIA_M0PL = GTIA_M1PL = GTIA_M2PL = GTIA_M3PL = 0; + GTIA_P0PL = GTIA_P1PL = GTIA_P2PL = GTIA_P3PL = 0; + PF0PM = PF1PM = PF2PM = PF3PM = 0; +#ifdef NEW_CYCLE_EXACT + hitclr_pos = ANTIC_XPOS * 2 - 37; + collision_curpos = hitclr_pos; +#endif + break; +/* TODO: cycle-exact missile HPOS, GRAF, SIZE */ +/* this is only an approximation */ + case GTIA_OFFSET_HPOSM0: + GTIA_HPOSM0 = byte; + hposm_ptr[0] = GTIA_pm_scanline + byte - 0x20; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_HPOSM1: + GTIA_HPOSM1 = byte; + hposm_ptr[1] = GTIA_pm_scanline + byte - 0x20; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_HPOSM2: + GTIA_HPOSM2 = byte; + hposm_ptr[2] = GTIA_pm_scanline + byte - 0x20; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_HPOSM3: + GTIA_HPOSM3 = byte; + hposm_ptr[3] = GTIA_pm_scanline + byte - 0x20; + UPDATE_PM_CYCLE_EXACT + break; + +#ifdef NEW_CYCLE_EXACT +#define CYCLE_EXACT_HPOSP(n) x = ANTIC_XPOS * 2 - 1;\ + if (GTIA_HPOSP##n < x && byte < x) {\ + /* case 1: both left of x */\ + /* do nothing */\ + }\ + else if (GTIA_HPOSP##n >= x && byte >= x ) {\ + /* case 2: both right of x */\ + /* redraw, clearing first */\ + UPDATE_PM_CYCLE_EXACT\ + }\ + else if (GTIA_HPOSP##n = x) {\ + /* case 3: new value is right, old value is left */\ + /* redraw without clearing first */\ + /* note: a hack, we can get away with it unless another change occurs */\ + /* before the original copy that wasn't erased due to changing */\ + /* GTIA_pm_dirty is drawn */\ + GTIA_pm_dirty = FALSE;\ + UPDATE_PM_CYCLE_EXACT\ + GTIA_pm_dirty = TRUE; /* can't trust that it was reset correctly */\ + }\ + else {\ + /* case 4: new value is left, old value is right */\ + /* remove old player and don't draw the new one */\ + UBYTE save_graf = GTIA_GRAFP##n;\ + GTIA_GRAFP##n = 0;\ + UPDATE_PM_CYCLE_EXACT\ + GTIA_GRAFP##n = save_graf;\ + } +#else +#define CYCLE_EXACT_HPOSP(n) +#endif /* NEW_CYCLE_EXACT */ +#define DO_HPOSP(n) case GTIA_OFFSET_HPOSP##n: \ + hposp_ptr[n] = GTIA_pm_scanline + byte - 0x20; \ + if (byte >= 0x22) { \ + if (byte > 0xbe) { \ + if (byte >= 0xde) \ + hposp_mask[n] = 0; \ + else \ + hposp_mask[n] = 0xffffffff >> (byte - 0xbe); \ + } \ + else \ + hposp_mask[n] = 0xffffffff; \ + } \ + else if (byte > 2) \ + hposp_mask[n] = 0xffffffff << (0x22 - byte); \ + else \ + hposp_mask[n] = 0; \ + CYCLE_EXACT_HPOSP(n)\ + GTIA_HPOSP##n = byte; \ + break; + + DO_HPOSP(0) + DO_HPOSP(1) + DO_HPOSP(2) + DO_HPOSP(3) + +/* TODO: cycle-exact size changes */ +/* this is only an approximation */ + case GTIA_OFFSET_SIZEM: + GTIA_SIZEM = byte; + global_sizem[0] = PM_Width[byte & 0x03]; + global_sizem[1] = PM_Width[(byte & 0x0c) >> 2]; + global_sizem[2] = PM_Width[(byte & 0x30) >> 4]; + global_sizem[3] = PM_Width[(byte & 0xc0) >> 6]; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_SIZEP0: + GTIA_SIZEP0 = byte; + grafp_ptr[0] = grafp_lookup[byte & 3]; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_SIZEP1: + GTIA_SIZEP1 = byte; + grafp_ptr[1] = grafp_lookup[byte & 3]; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_SIZEP2: + GTIA_SIZEP2 = byte; + grafp_ptr[2] = grafp_lookup[byte & 3]; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_SIZEP3: + GTIA_SIZEP3 = byte; + grafp_ptr[3] = grafp_lookup[byte & 3]; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_PRIOR: + ANTIC_SetPrior(byte); + GTIA_PRIOR = byte; + if (byte & 0x40) + setup_gtia9_11(); + break; + case GTIA_OFFSET_VDELAY: + GTIA_VDELAY = byte; + break; + case GTIA_OFFSET_GRACTL: + GTIA_GRACTL = byte; + ANTIC_missile_gra_enabled = (byte & 0x01); + ANTIC_player_gra_enabled = (byte & 0x02); + ANTIC_player_flickering = ((ANTIC_player_dma_enabled | ANTIC_player_gra_enabled) == 0x02); + ANTIC_missile_flickering = ((ANTIC_missile_dma_enabled | ANTIC_missile_gra_enabled) == 0x01); + if ((byte & 4) == 0) + GTIA_TRIG_latch[0] = GTIA_TRIG_latch[1] = GTIA_TRIG_latch[2] = GTIA_TRIG_latch[3] = 1; + break; + +#endif /* defined(BASIC) || defined(CURSES_BASIC) */ + } +} + +/* State ------------------------------------------------------------------- */ + +#ifndef BASIC + +void GTIA_StateSave(void) +{ + int next_console_value = 7; + + StateSav_SaveUBYTE(>IA_HPOSP0, 1); + StateSav_SaveUBYTE(>IA_HPOSP1, 1); + StateSav_SaveUBYTE(>IA_HPOSP2, 1); + StateSav_SaveUBYTE(>IA_HPOSP3, 1); + StateSav_SaveUBYTE(>IA_HPOSM0, 1); + StateSav_SaveUBYTE(>IA_HPOSM1, 1); + StateSav_SaveUBYTE(>IA_HPOSM2, 1); + StateSav_SaveUBYTE(>IA_HPOSM3, 1); + StateSav_SaveUBYTE(&PF0PM, 1); + StateSav_SaveUBYTE(&PF1PM, 1); + StateSav_SaveUBYTE(&PF2PM, 1); + StateSav_SaveUBYTE(&PF3PM, 1); + StateSav_SaveUBYTE(>IA_M0PL, 1); + StateSav_SaveUBYTE(>IA_M1PL, 1); + StateSav_SaveUBYTE(>IA_M2PL, 1); + StateSav_SaveUBYTE(>IA_M3PL, 1); + StateSav_SaveUBYTE(>IA_P0PL, 1); + StateSav_SaveUBYTE(>IA_P1PL, 1); + StateSav_SaveUBYTE(>IA_P2PL, 1); + StateSav_SaveUBYTE(>IA_P3PL, 1); + StateSav_SaveUBYTE(>IA_SIZEP0, 1); + StateSav_SaveUBYTE(>IA_SIZEP1, 1); + StateSav_SaveUBYTE(>IA_SIZEP2, 1); + StateSav_SaveUBYTE(>IA_SIZEP3, 1); + StateSav_SaveUBYTE(>IA_SIZEM, 1); + StateSav_SaveUBYTE(>IA_GRAFP0, 1); + StateSav_SaveUBYTE(>IA_GRAFP1, 1); + StateSav_SaveUBYTE(>IA_GRAFP2, 1); + StateSav_SaveUBYTE(>IA_GRAFP3, 1); + StateSav_SaveUBYTE(>IA_GRAFM, 1); + StateSav_SaveUBYTE(>IA_COLPM0, 1); + StateSav_SaveUBYTE(>IA_COLPM1, 1); + StateSav_SaveUBYTE(>IA_COLPM2, 1); + StateSav_SaveUBYTE(>IA_COLPM3, 1); + StateSav_SaveUBYTE(>IA_COLPF0, 1); + StateSav_SaveUBYTE(>IA_COLPF1, 1); + StateSav_SaveUBYTE(>IA_COLPF2, 1); + StateSav_SaveUBYTE(>IA_COLPF3, 1); + StateSav_SaveUBYTE(>IA_COLBK, 1); + StateSav_SaveUBYTE(>IA_PRIOR, 1); + StateSav_SaveUBYTE(>IA_VDELAY, 1); + StateSav_SaveUBYTE(>IA_GRACTL, 1); + + StateSav_SaveUBYTE(&consol_mask, 1); + StateSav_SaveINT(>IA_speaker, 1); + StateSav_SaveINT(&next_console_value, 1); + StateSav_SaveUBYTE(GTIA_TRIG_latch, 4); +} + +void GTIA_StateRead(UBYTE version) +{ + int next_console_value; /* ignored */ + + StateSav_ReadUBYTE(>IA_HPOSP0, 1); + StateSav_ReadUBYTE(>IA_HPOSP1, 1); + StateSav_ReadUBYTE(>IA_HPOSP2, 1); + StateSav_ReadUBYTE(>IA_HPOSP3, 1); + StateSav_ReadUBYTE(>IA_HPOSM0, 1); + StateSav_ReadUBYTE(>IA_HPOSM1, 1); + StateSav_ReadUBYTE(>IA_HPOSM2, 1); + StateSav_ReadUBYTE(>IA_HPOSM3, 1); + StateSav_ReadUBYTE(&PF0PM, 1); + StateSav_ReadUBYTE(&PF1PM, 1); + StateSav_ReadUBYTE(&PF2PM, 1); + StateSav_ReadUBYTE(&PF3PM, 1); + StateSav_ReadUBYTE(>IA_M0PL, 1); + StateSav_ReadUBYTE(>IA_M1PL, 1); + StateSav_ReadUBYTE(>IA_M2PL, 1); + StateSav_ReadUBYTE(>IA_M3PL, 1); + StateSav_ReadUBYTE(>IA_P0PL, 1); + StateSav_ReadUBYTE(>IA_P1PL, 1); + StateSav_ReadUBYTE(>IA_P2PL, 1); + StateSav_ReadUBYTE(>IA_P3PL, 1); + StateSav_ReadUBYTE(>IA_SIZEP0, 1); + StateSav_ReadUBYTE(>IA_SIZEP1, 1); + StateSav_ReadUBYTE(>IA_SIZEP2, 1); + StateSav_ReadUBYTE(>IA_SIZEP3, 1); + StateSav_ReadUBYTE(>IA_SIZEM, 1); + StateSav_ReadUBYTE(>IA_GRAFP0, 1); + StateSav_ReadUBYTE(>IA_GRAFP1, 1); + StateSav_ReadUBYTE(>IA_GRAFP2, 1); + StateSav_ReadUBYTE(>IA_GRAFP3, 1); + StateSav_ReadUBYTE(>IA_GRAFM, 1); + StateSav_ReadUBYTE(>IA_COLPM0, 1); + StateSav_ReadUBYTE(>IA_COLPM1, 1); + StateSav_ReadUBYTE(>IA_COLPM2, 1); + StateSav_ReadUBYTE(>IA_COLPM3, 1); + StateSav_ReadUBYTE(>IA_COLPF0, 1); + StateSav_ReadUBYTE(>IA_COLPF1, 1); + StateSav_ReadUBYTE(>IA_COLPF2, 1); + StateSav_ReadUBYTE(>IA_COLPF3, 1); + StateSav_ReadUBYTE(>IA_COLBK, 1); + StateSav_ReadUBYTE(>IA_PRIOR, 1); + StateSav_ReadUBYTE(>IA_VDELAY, 1); + StateSav_ReadUBYTE(>IA_GRACTL, 1); + + StateSav_ReadUBYTE(&consol_mask, 1); + StateSav_ReadINT(>IA_speaker, 1); + StateSav_ReadINT(&next_console_value, 1); + if (version >= 7) + StateSav_ReadUBYTE(GTIA_TRIG_latch, 4); + + GTIA_PutByte(GTIA_OFFSET_HPOSP0, GTIA_HPOSP0); + GTIA_PutByte(GTIA_OFFSET_HPOSP1, GTIA_HPOSP1); + GTIA_PutByte(GTIA_OFFSET_HPOSP2, GTIA_HPOSP2); + GTIA_PutByte(GTIA_OFFSET_HPOSP3, GTIA_HPOSP3); + GTIA_PutByte(GTIA_OFFSET_HPOSM0, GTIA_HPOSM0); + GTIA_PutByte(GTIA_OFFSET_HPOSM1, GTIA_HPOSM1); + GTIA_PutByte(GTIA_OFFSET_HPOSM2, GTIA_HPOSM2); + GTIA_PutByte(GTIA_OFFSET_HPOSM3, GTIA_HPOSM3); + GTIA_PutByte(GTIA_OFFSET_SIZEP0, GTIA_SIZEP0); + GTIA_PutByte(GTIA_OFFSET_SIZEP1, GTIA_SIZEP1); + GTIA_PutByte(GTIA_OFFSET_SIZEP2, GTIA_SIZEP2); + GTIA_PutByte(GTIA_OFFSET_SIZEP3, GTIA_SIZEP3); + GTIA_PutByte(GTIA_OFFSET_SIZEM, GTIA_SIZEM); + GTIA_PutByte(GTIA_OFFSET_GRAFP0, GTIA_GRAFP0); + GTIA_PutByte(GTIA_OFFSET_GRAFP1, GTIA_GRAFP1); + GTIA_PutByte(GTIA_OFFSET_GRAFP2, GTIA_GRAFP2); + GTIA_PutByte(GTIA_OFFSET_GRAFP3, GTIA_GRAFP3); + GTIA_PutByte(GTIA_OFFSET_GRAFM, GTIA_GRAFM); + GTIA_PutByte(GTIA_OFFSET_COLPM0, GTIA_COLPM0); + GTIA_PutByte(GTIA_OFFSET_COLPM1, GTIA_COLPM1); + GTIA_PutByte(GTIA_OFFSET_COLPM2, GTIA_COLPM2); + GTIA_PutByte(GTIA_OFFSET_COLPM3, GTIA_COLPM3); + GTIA_PutByte(GTIA_OFFSET_COLPF0, GTIA_COLPF0); + GTIA_PutByte(GTIA_OFFSET_COLPF1, GTIA_COLPF1); + GTIA_PutByte(GTIA_OFFSET_COLPF2, GTIA_COLPF2); + GTIA_PutByte(GTIA_OFFSET_COLPF3, GTIA_COLPF3); + GTIA_PutByte(GTIA_OFFSET_COLBK, GTIA_COLBK); + GTIA_PutByte(GTIA_OFFSET_PRIOR, GTIA_PRIOR); + GTIA_PutByte(GTIA_OFFSET_GRACTL, GTIA_GRACTL); +} + +#endif /* BASIC */ diff --git a/MCUME_pico/pico5200/gtia.h b/MCUME_pico/pico5200/gtia.h new file mode 100644 index 0000000..865c4ae --- /dev/null +++ b/MCUME_pico/pico5200/gtia.h @@ -0,0 +1,136 @@ +#ifndef GTIA_H_ +#define GTIA_H_ + + +#define GTIA_OFFSET_HPOSP0 0x00 +#define GTIA_OFFSET_M0PF 0x00 +#define GTIA_OFFSET_HPOSP1 0x01 +#define GTIA_OFFSET_M1PF 0x01 +#define GTIA_OFFSET_HPOSP2 0x02 +#define GTIA_OFFSET_M2PF 0x02 +#define GTIA_OFFSET_HPOSP3 0x03 +#define GTIA_OFFSET_M3PF 0x03 +#define GTIA_OFFSET_HPOSM0 0x04 +#define GTIA_OFFSET_P0PF 0x04 +#define GTIA_OFFSET_HPOSM1 0x05 +#define GTIA_OFFSET_P1PF 0x05 +#define GTIA_OFFSET_HPOSM2 0x06 +#define GTIA_OFFSET_P2PF 0x06 +#define GTIA_OFFSET_HPOSM3 0x07 +#define GTIA_OFFSET_P3PF 0x07 +#define GTIA_OFFSET_SIZEP0 0x08 +#define GTIA_OFFSET_M0PL 0x08 +#define GTIA_OFFSET_SIZEP1 0x09 +#define GTIA_OFFSET_M1PL 0x09 +#define GTIA_OFFSET_SIZEP2 0x0a +#define GTIA_OFFSET_M2PL 0x0a +#define GTIA_OFFSET_SIZEP3 0x0b +#define GTIA_OFFSET_M3PL 0x0b +#define GTIA_OFFSET_SIZEM 0x0c +#define GTIA_OFFSET_P0PL 0x0c +#define GTIA_OFFSET_GRAFP0 0x0d +#define GTIA_OFFSET_P1PL 0x0d +#define GTIA_OFFSET_GRAFP1 0x0e +#define GTIA_OFFSET_P2PL 0x0e +#define GTIA_OFFSET_GRAFP2 0x0f +#define GTIA_OFFSET_P3PL 0x0f +#define GTIA_OFFSET_GRAFP3 0x10 +#define GTIA_OFFSET_TRIG0 0x10 +#define GTIA_OFFSET_GRAFM 0x11 +#define GTIA_OFFSET_TRIG1 0x11 +#define GTIA_OFFSET_COLPM0 0x12 +#define GTIA_OFFSET_TRIG2 0x12 +#define GTIA_OFFSET_COLPM1 0x13 +#define GTIA_OFFSET_TRIG3 0x13 +#define GTIA_OFFSET_COLPM2 0x14 +#define GTIA_OFFSET_PAL 0x14 +#define GTIA_OFFSET_COLPM3 0x15 +#define GTIA_OFFSET_COLPF0 0x16 +#define GTIA_OFFSET_COLPF1 0x17 +#define GTIA_OFFSET_COLPF2 0x18 +#define GTIA_OFFSET_COLPF3 0x19 +#define GTIA_OFFSET_COLBK 0x1a +#define GTIA_OFFSET_PRIOR 0x1b +#define GTIA_OFFSET_VDELAY 0x1c +#define GTIA_OFFSET_GRACTL 0x1d +#define GTIA_OFFSET_HITCLR 0x1e +#define GTIA_OFFSET_CONSOL 0x1f + +extern UBYTE GTIA_GRAFM; +extern UBYTE GTIA_GRAFP0; +extern UBYTE GTIA_GRAFP1; +extern UBYTE GTIA_GRAFP2; +extern UBYTE GTIA_GRAFP3; +extern UBYTE GTIA_HPOSP0; +extern UBYTE GTIA_HPOSP1; +extern UBYTE GTIA_HPOSP2; +extern UBYTE GTIA_HPOSP3; +extern UBYTE GTIA_HPOSM0; +extern UBYTE GTIA_HPOSM1; +extern UBYTE GTIA_HPOSM2; +extern UBYTE GTIA_HPOSM3; +extern UBYTE GTIA_SIZEP0; +extern UBYTE GTIA_SIZEP1; +extern UBYTE GTIA_SIZEP2; +extern UBYTE GTIA_SIZEP3; +extern UBYTE GTIA_SIZEM; +extern UBYTE GTIA_COLPM0; +extern UBYTE GTIA_COLPM1; +extern UBYTE GTIA_COLPM2; +extern UBYTE GTIA_COLPM3; +extern UBYTE GTIA_COLPF0; +extern UBYTE GTIA_COLPF1; +extern UBYTE GTIA_COLPF2; +extern UBYTE GTIA_COLPF3; +extern UBYTE GTIA_COLBK; +extern UBYTE GTIA_GRACTL; +extern UBYTE GTIA_M0PL; +extern UBYTE GTIA_M1PL; +extern UBYTE GTIA_M2PL; +extern UBYTE GTIA_M3PL; +extern UBYTE GTIA_P0PL; +extern UBYTE GTIA_P1PL; +extern UBYTE GTIA_P2PL; +extern UBYTE GTIA_P3PL; +extern UBYTE GTIA_PRIOR; +extern UBYTE GTIA_VDELAY; + +#ifdef USE_COLOUR_TRANSLATION_TABLE + +extern UWORD GTIA_colour_translation_table[256]; +#define GTIA_COLOUR_BLACK GTIA_colour_translation_table[0] +#define GTIA_COLOUR_TO_WORD(dest,src) dest = GTIA_colour_translation_table[src]; + +#else + +#define GTIA_COLOUR_BLACK 0 +#define GTIA_COLOUR_TO_WORD(dest,src) dest = (((UWORD) (src)) << 8) | (src); + +#endif /* USE_COLOUR_TRANSLATION_TABLE */ + +extern UBYTE GTIA_pm_scanline[ATARI_WIDTH / 2 + 8]; /* there's a byte for every *pair* of pixels */ +extern int GTIA_pm_dirty; + +extern UBYTE GTIA_collisions_mask_missile_playfield; +extern UBYTE GTIA_collisions_mask_player_playfield; +extern UBYTE GTIA_collisions_mask_missile_player; +extern UBYTE GTIA_collisions_mask_player_player; + +extern UBYTE GTIA_TRIG[4]; +extern UBYTE GTIA_TRIG_latch[4]; + +extern int GTIA_consol_override; +extern int GTIA_speaker; + +int GTIA_Initialise(void); +void GTIA_Frame(void); +void GTIA_NewPmScanline(void); +UBYTE GTIA_GetByte(UWORD addr, int no_side_effects); +void GTIA_PutByte(UWORD addr, UBYTE byte); +void GTIA_StateSave(void); +void GTIA_StateRead(UBYTE version); + +#ifdef NEW_CYCLE_EXACT +void GTIA_UpdatePmplColls(void); +#endif +#endif /* GTIA_H_ */ diff --git a/MCUME_pico/pico5200/iopins.h b/MCUME_pico/pico5200/iopins.h new file mode 100644 index 0000000..a636576 --- /dev/null +++ b/MCUME_pico/pico5200/iopins.h @@ -0,0 +1,42 @@ +#ifndef IOPINS_H +#define IOPINS_H + +#include "platform_config.h" + + +// VGA (see in code!!!) +/* +2-9 RRRGGGBB +10-11 VSYNC and HSYNC +*/ + +// SD (see SPI0 in code!!!) +/* +#define SD_SCLK 18 +#define SD_MOSI 19 +#define SD_MISO 16 +#define SD_CS 17 +*/ + +// I2C keyboard (not used) +/* +#define I2C_SCL_IO 15? +#define I2C_SDA_IO 14? +*/ + +// Analog joystick (primary) for JOY2 and 3 extra buttons +#define PIN_JOY2_A1X 26 +#define PIN_JOY2_A2Y 27 +#define PIN_JOY2_BTN 22 +#define PIN_KEY_USER1 20 +#define PIN_KEY_USER2 21 + +// Second joystick +//#define PIN_JOY1_BTN 2 +//#define PIN_JOY1_1 14 // UP +//#define PIN_JOY1_2 7 // DOWN +//#define PIN_JOY1_3 6 // RIGHT +//#define PIN_JOY1_4 5 // LEFT + + +#endif diff --git a/MCUME_pico/pico5200/keyboard_osd.h b/MCUME_pico/pico5200/keyboard_osd.h new file mode 100644 index 0000000..062eb4e --- /dev/null +++ b/MCUME_pico/pico5200/keyboard_osd.h @@ -0,0 +1,20 @@ + +#ifndef keyboard_osd_h_ +#define keyboard_osd_h_ + +extern bool virtualkeyboardIsActive(void); +extern void drawVirtualkeyboard(void); +extern void toggleVirtualkeyboard(bool keepOn); +extern void handleVirtualkeyboard(void); + +extern bool callibrationActive(void); +extern int handleCallibration(uint16_t bClick); + +extern bool menuActive(void); +extern char * menuSelection(void); +extern void toggleMenu(bool on); +extern int handleMenu(uint16_t bClick); + + +#endif + diff --git a/MCUME_pico/pico5200/memory.h b/MCUME_pico/pico5200/memory.h new file mode 100644 index 0000000..1945156 --- /dev/null +++ b/MCUME_pico/pico5200/memory.h @@ -0,0 +1,18 @@ +#ifndef __MEMORY__ +#define __MEMORY__ + +extern unsigned char * memory; + +#define MEMORY_GetByte(addr) (Atari_GetByte(addr)) +#define MEMORY_PutByte(addr,byte) Atari_PutByte(addr,byte) + +#define MEMORY_dGetByte(addr) (Atari_GetByte(addr)) +#define MEMORY_dPutByte(addr,byte) Atari_PutByte(addr,byte) +#define MEMORY_dGetWord(x) (Atari_GetByte(x) | (Atari_GetByte((x) + 1) << 8)) +#define MEMORY_dPutWord(x,y) (Atari_PutByte(x,(UBYTE) (y)) , Atari_PutByte(x + 1,(UBYTE) ((y) >> 8)) +/* faster versions of dGetWord and dPutWord for even addresses */ +/* TODO: guarantee that memory is UWORD-aligned and use UWORD access */ +#define MEMORY_dGetWordAligned(x) MEMORY_dGetWord(x) +#define MEMORY_dPutWordAligned(x,y) MEMORY_dPutWord(x,y) + +#endif diff --git a/MCUME_pico/pico5200/noise.h b/MCUME_pico/pico5200/noise.h new file mode 100644 index 0000000..c93ac89 --- /dev/null +++ b/MCUME_pico/pico5200/noise.h @@ -0,0 +1,1059 @@ +const UBYTE POKEY_poly9_lookup[] = { +255,127,63,31,15,135,195,225,240,120,188,222,239,119,59,29, +14,135,67,161,208,104,52,154,205,102,179,217,108,182,219,237, +246,123,189,94,47,23,11,133,194,225,112,56,156,206,103,51, +25,12,134,67,33,144,72,36,18,137,68,162,81,168,212,234, +117,186,93,174,215,235,245,122,61,158,79,39,147,73,164,210, +233,116,58,157,206,231,115,57,28,14,7,3,129,192,224,112, +184,220,238,119,187,93,46,151,203,229,242,121,188,94,175,87, +43,149,74,165,82,41,20,10,5,2,129,64,160,80,168,84, +170,85,170,213,234,245,250,125,190,95,175,215,107,181,90,45, +22,11,5,130,193,96,176,216,236,118,187,221,110,183,219,109, +182,91,173,214,107,53,26,13,6,131,65,160,208,232,116,186, +221,238,247,251,125,62,31,143,199,227,241,120,60,158,207,103, +179,89,44,150,203,101,178,89,172,214,235,117,58,29,142,199, +99,177,88,44,22,139,69,162,209,232,244,250,253,254,127,191, +95,47,151,75,165,210,105,52,26,141,70,163,81,40,148,202, +101,50,25,140,198,99,49,24,12,6,3,1,128,192,96,48, +152,204,102,51,153,76,166,83,169,212,106,53,154,77,38,147, +201,228,242,249,252,126,191,223,111,183,91,45,150,75,37,146, +73,36,146,201,100,178,217,236,246,251,253,126,63,159,79,167, +211,105,180,90,173,86,43,21,10,133,66,161,80,40,20,138, +69,34,145,200,228,114,185,220,110,55,155,77,166,211,233,244, +122,189,222,111,55,27,13,134,195,97,176,88,172,86,171,85, +42,149,202,229,114,57,156,78,39,19,9,132,194,97,48,24, +140,70,35,17,8,132,66,33,16,8,4,2,1,0,128,64, +32,16,136,68,34,17,136,196,98,49,152,76,38,19,137,196, +226,113,184,92,174,87,171,213,106,181,218,109,54,27,141,198, +227,113,56,28,142,71,35,145,72,164,82,169,84,42,21,138, +197,98,177,216,108,54,155,205,230,243,249,124,62,159,207,231, +243,121,60,30,143,71,163,209,104,180,218,237,118,59,157,78, +167,83,41,148,74,37,18,9,4,130,65,32,144,200,100,50, +153,204,230,115,185,92,46,23,139,197,226,241,248,124,190,223, +239,247,123,61,30,15,7,131,193,224,240,248,252,254,255,}; +const UBYTE POKEY_poly17_lookup[] = { +255,1,224,3,254,231,131,241,31,28,254,217,99,142,33,4, +1,24,130,17,28,226,25,90,146,145,61,250,216,123,12,48, +24,227,1,216,131,141,223,227,130,233,157,13,226,59,122,212, +179,149,60,226,90,106,16,210,1,185,147,73,190,119,7,152, +142,217,133,238,227,227,249,89,108,118,190,11,199,103,242,233, +123,109,32,220,130,149,93,242,158,11,132,87,112,170,71,46, +107,238,48,210,66,137,17,10,130,52,76,170,60,158,154,149, +108,226,255,58,80,118,197,187,54,28,174,217,198,222,97,160, +197,26,39,68,12,76,216,28,125,232,125,14,28,220,249,37, +172,137,194,59,57,228,49,214,0,161,17,88,162,149,30,194, +28,72,184,20,59,152,245,105,116,149,191,211,68,234,45,10, +249,132,189,209,96,174,39,38,45,158,184,181,42,192,87,252, +106,87,163,155,252,254,22,146,12,237,201,68,223,125,99,204, +0,148,65,49,151,17,55,82,77,113,142,5,68,75,60,82, +91,17,163,19,124,230,159,50,22,6,77,220,94,85,232,47, +46,189,142,145,5,122,171,67,108,67,238,98,242,227,219,121, +42,84,22,205,253,70,148,201,177,143,152,151,72,166,245,22, +132,108,192,223,124,114,222,3,129,23,122,142,19,36,102,42, +106,246,178,195,94,107,8,80,16,165,113,80,228,229,150,165, +116,1,254,226,211,251,26,88,180,245,51,212,36,229,27,116, +118,143,27,166,86,38,200,206,124,81,238,71,162,171,254,189, +34,80,71,213,218,7,200,143,108,215,175,83,101,242,236,43, +103,37,152,200,185,13,168,155,234,158,59,132,52,64,106,36, +146,106,141,3,34,39,54,44,175,170,244,31,22,94,205,105, +6,181,92,161,172,136,211,41,58,241,103,157,25,163,2,108, +197,142,102,117,155,93,239,78,48,153,243,11,88,151,197,119, +247,152,97,40,69,2,174,228,22,167,92,132,252,192,246,237, +50,245,54,133,62,226,94,42,24,214,81,177,182,9,246,115, +211,208,171,28,157,232,179,239,156,17,32,34,98,102,162,234, +238,59,99,68,128,140,200,145,141,250,179,202,204,89,5,230, +106,98,243,242,201,122,63,2,93,212,255,85,160,174,170,247, +47,16,93,241,175,29,133,106,162,243,126,8,122,176,243,91, +88,50,149,55,83,92,99,141,16,18,0,37,80,72,37,196, +8,4,81,24,39,65,92,70,221,88,55,196,45,84,25,61, +227,73,88,23,197,127,118,152,107,137,65,10,39,100,12,14, +248,156,63,192,124,76,62,124,191,15,133,79,242,187,91,204, +114,180,162,67,127,115,201,113,142,4,84,73,61,70,25,24, +179,1,125,211,205,123,39,128,76,200,29,76,250,60,59,202, +213,200,38,253,159,5,102,107,122,112,243,215,153,50,26,198, +85,208,174,77,135,239,246,177,242,72,106,53,130,73,156,87, +65,186,38,31,191,207,133,195,51,187,212,61,116,56,111,131, +232,142,63,229,44,4,27,184,183,11,212,87,213,250,7,138, +175,236,149,135,82,39,208,76,109,77,12,94,248,57,111,128, +216,136,60,217,234,31,43,142,180,84,34,140,134,112,5,182, +106,199,163,178,109,190,61,167,8,196,81,148,230,65,211,183, +219,212,250,4,186,169,239,169,65,73,23,230,79,50,187,215, +13,114,59,83,69,243,190,9,230,115,242,192,235,61,9,232, +146,254,204,50,181,54,1,126,226,219,122,26,82,21,241,59, +93,164,255,178,208,110,76,27,44,247,42,65,71,246,234,67, +235,51,232,228,158,39,68,13,92,218,29,105,170,116,30,14, +221,204,119,229,184,68,58,45,167,40,196,19,180,102,3,251, +182,153,246,90,66,144,128,41,153,193,43,63,165,45,144,89, +185,38,25,223,195,131,187,191,140,180,81,114,134,131,52,79, +154,58,157,166,83,119,210,201,57,15,128,30,232,188,30,146, +28,237,232,84,159,92,247,204,33,133,17,18,2,5,84,74, +13,64,26,36,117,26,77,229,206,36,209,91,31,66,31,112, +63,23,13,255,234,81,203,22,250,140,59,161,100,8,79,224, +154,110,220,27,5,102,106,106,114,242,195,219,59,10,212,84, +229,252,4,182,105,247,165,177,81,120,38,151,62,199,14,98, +61,18,89,181,231,17,209,50,143,150,118,68,170,44,158,187, +133,44,195,107,58,113,103,149,152,163,8,205,193,134,239,245, +129,244,75,86,243,153,121,170,84,30,76,253,76,53,205,185, +6,24,141,225,2,237,213,132,230,97,211,245,251,84,184,44, +187,235,205,9,7,99,62,32,127,178,217,255,78,16,153,177, +43,216,213,237,118,181,186,193,110,111,43,104,212,150,197,116, +199,158,98,20,131,25,158,210,21,248,170,95,175,74,244,209, +247,222,0,176,1,123,179,193,125,95,12,123,168,113,74,68, +208,140,109,193,205,94,119,200,105,12,21,72,171,36,28,139, +137,142,251,165,168,193,75,63,99,77,16,158,193,37,223,185, +35,72,197,196,198,229,209,213,254,70,146,169,189,137,224,27, +127,198,153,16,58,128,119,120,104,119,166,137,214,123,16,240, +33,255,177,225,120,77,38,254,174,19,103,86,168,41,202,241, +136,108,217,79,79,107,42,112,86,135,217,150,222,196,240,133, +190,227,70,169,25,200,178,188,174,146,119,92,40,61,130,89, +156,118,81,250,7,139,191,238,148,147,16,46,192,94,108,120, +94,23,201,191,110,148,155,145,46,202,255,104,112,215,151,211, +22,202,140,88,145,164,107,243,225,249,93,44,126,186,91,207, +66,178,161,127,185,104,249,71,141,91,162,146,110,204,27,36, +118,42,75,230,242,226,202,107,41,65,64,134,228,68,135,253, +214,148,224,32,207,179,162,76,143,109,198,189,80,112,164,167, +50,101,54,172,175,162,117,31,28,255,201,97,143,53,70,8, +8,144,16,41,176,80,107,20,144,41,185,193,105,31,37,111, +184,88,251,4,185,153,233,170,125,143,12,214,121,49,228,33, +214,33,177,81,121,54,149,63,211,76,107,45,0,88,128,181, +88,224,180,142,130,53,93,184,63,139,204,222,117,224,236,14, +55,109,189,12,177,9,249,131,205,223,103,194,233,24,93,224, +191,62,148,62,193,110,110,59,106,213,130,135,125,215,140,99, +33,209,80,175,84,20,236,233,70,189,89,225,166,172,135,35, +55,53,61,185,233,233,77,13,79,234,58,122,214,147,145,62, +202,222,120,48,246,3,211,55,219,220,123,4,176,8,235,161, +200,201,13,79,235,42,120,215,135,211,55,218,204,121,5,164, +74,226,177,218,200,56,29,162,27,254,214,147,144,46,200,223, +108,114,255,19,193,54,238,142,50,53,54,9,255,226,209,219, +30,90,156,113,33,244,0,231,113,208,228,237,23,165,126,160, +250,234,90,123,0,241,16,237,240,212,174,68,23,253,255,5, +160,11,250,183,139,212,95,84,250,13,43,171,228,28,7,72, +142,116,84,174,77,134,255,244,176,230,10,99,37,144,72,169, +5,8,139,160,30,171,140,156,209,32,174,163,102,45,27,232, +183,174,132,23,113,62,5,47,250,252,59,70,20,200,169,12, +153,137,171,171,237,141,5,67,59,50,85,55,223,157,99,2, +225,20,140,232,144,223,216,50,156,166,81,87,214,203,17,139, +146,62,204,190,116,54,142,143,228,87,183,218,197,232,7,175, +255,164,176,67,90,35,129,84,74,12,80,24,37,97,88,68, +245,220,37,228,9,86,115,153,113,43,84,20,237,249,68,188, +77,163,175,188,149,34,2,103,116,136,111,232,89,78,86,248, +41,111,161,200,200,29,77,234,62,58,222,151,193,54,239,158, +48,52,34,75,246,242,195,218,43,8,213,64,167,245,20,164, +104,194,247,248,96,254,39,131,125,222,28,113,40,101,2,236, +196,150,229,116,133,190,226,86,171,24,220,240,181,190,128,118, +105,122,116,179,223,157,98,18,227,21,152,170,153,207,202,51, +169,244,24,102,80,202,5,200,139,44,223,171,3,109,215,172, +99,99,241,208,237,124,21,174,203,230,251,115,200,96,156,7, +65,31,118,95,27,11,135,102,102,171,122,252,50,215,22,195, +28,74,152,16,57,176,113,123,84,177,189,185,224,120,79,6, +250,172,59,227,68,136,13,200,155,44,254,187,67,76,67,172, +66,114,161,243,120,104,118,182,139,215,111,82,249,49,237,176, +212,42,4,23,120,175,7,36,79,186,58,223,134,211,53,250, +200,123,45,32,88,194,149,216,162,156,143,192,23,253,254,21, +162,10,238,245,130,196,77,85,207,95,98,154,98,29,19,11, +151,102,71,187,58,221,166,215,55,210,76,105,13,4,90,168, +49,74,192,144,140,232,145,207,218,51,136,228,88,71,196,202, +36,217,219,15,74,191,96,117,151,157,247,66,192,129,156,203, +128,155,185,174,152,215,72,34,181,22,1,60,194,91,56,50, +83,87,211,155,27,142,214,116,224,238,46,51,111,149,136,163, +41,221,129,167,123,245,160,229,27,117,102,141,26,178,20,47, +216,220,125,100,188,14,147,45,255,169,97,73,85,198,207,112, +147,214,79,80,155,21,111,218,120,57,102,17,218,131,137,159, +235,134,185,149,40,162,115,126,0,251,176,249,250,92,58,28, +183,73,245,199,149,211,18,138,132,92,193,172,78,179,169,253, +137,100,91,127,67,201,18,190,196,55,245,60,37,42,232,214, +190,64,118,229,187,116,60,46,155,238,223,35,130,101,92,13, +109,202,124,88,126,85,171,31,172,254,178,210,78,72,25,4, +115,56,97,99,244,128,231,121,81,228,231,182,161,118,41,122, +240,243,223,24,50,16,103,81,216,39,205,157,70,82,169,49, +72,224,148,142,192,21,221,250,23,138,142,252,213,166,198,39, +241,93,61,110,153,74,155,33,47,177,76,169,13,136,155,168, +190,187,198,28,65,40,6,50,44,167,42,228,23,182,78,135, +233,150,189,244,48,230,2,226,37,154,233,173,13,129,11,186, +183,15,148,95,209,170,15,175,239,164,145,83,26,2,21,84, +107,29,0,59,176,117,59,92,181,237,177,197,56,7,2,46, +228,30,38,92,142,93,196,254,100,178,239,159,33,38,33,94, +160,185,218,216,56,60,178,91,223,66,147,177,63,152,252,249, +102,156,11,129,7,122,175,3,100,71,190,106,215,163,147,125, +254,28,51,8,229,64,196,197,212,199,212,195,148,203,144,155, +152,190,216,246,220,34,148,7,81,31,87,79,91,42,19,102, +71,186,42,223,167,195,117,219,92,123,12,49,8,225,0,204, +193,132,207,241,131,220,207,68,211,189,123,192,240,140,46,241, +79,29,75,139,34,62,167,15,180,95,147,138,143,237,199,165, +211,113,186,68,63,125,173,45,128,89,152,54,89,254,87,131, +154,174,220,151,196,102,229,155,116,126,14,27,172,247,34,192, +71,252,75,71,227,186,104,254,55,131,92,206,92,80,188,101, +35,253,148,181,112,96,230,166,162,103,63,57,237,161,196,9, +21,67,27,50,23,23,95,223,75,3,163,54,44,174,186,246, +30,2,28,196,121,20,180,105,243,229,185,85,40,46,178,126, +143,10,182,117,55,156,173,225,65,221,87,199,218,34,152,199, +73,19,167,87,52,234,203,106,59,99,69,144,142,201,133,207, +243,163,216,205,108,87,175,91,228,242,230,138,99,45,17,72, +163,164,12,131,41,158,177,37,56,201,227,174,41,199,33,146, +97,61,21,41,187,224,125,31,12,255,232,113,207,20,210,8, +41,129,64,10,37,68,8,12,208,24,45,224,88,78,84,216, +45,109,137,76,218,61,105,232,84,158,76,245,205,53,199,24, +2,16,4,97,24,68,113,156,37,97,89,84,247,221,49,166, +0,70,97,152,68,121,29,37,107,248,80,255,84,177,188,169, +226,121,91,68,243,188,41,226,113,218,68,249,29,45,234,248, +90,94,80,185,53,41,248,208,255,92,48,188,163,67,125,83, +205,115,166,128,70,105,25,68,115,188,33,99,113,208,229,253, +21,164,106,226,243,250,72,122,53,163,89,220,118,213,186,7, +14,239,236,16,215,80,163,148,12,224,25,94,210,153,57,170, +208,94,76,120,28,55,73,253,70,149,217,179,142,140,213,65, +182,231,23,177,62,137,238,250,115,202,64,152,5,105,155,100, +127,63,9,237,194,244,201,118,255,26,81,36,231,58,96,118, +166,139,246,127,18,216,165,237,145,197,122,39,130,108,204,31, +100,126,46,27,238,215,162,130,111,253,9,101,67,252,66,215, +241,179,220,172,116,19,222,199,193,147,191,222,148,240,32,238, +163,226,109,27,109,231,172,0,83,49,179,81,125,118,157,59, +131,68,78,109,72,92,84,253,125,37,172,136,210,57,56,240, +115,223,16,179,16,109,240,220,47,68,29,92,251,13,41,139, +224,30,47,204,156,84,112,172,39,34,109,150,188,229,34,229, +23,180,110,131,235,190,57,230,16,194,0,136,129,8,139,161, +14,169,141,136,147,41,190,177,103,24,73,161,134,40,133,3, +50,39,23,60,239,139,96,31,55,79,157,74,147,161,63,185, +236,185,71,8,11,160,22,42,140,150,112,36,166,42,230,55, +178,76,175,109,132,157,208,50,140,166,112,71,150,234,133,139, +179,47,156,157,225,34,237,151,164,102,35,251,244,185,118,24, +106,145,194,11,57,135,1,22,99,29,16,59,145,101,123,125, +33,237,144,212,104,36,151,58,135,6,102,109,26,124,245,175, +21,5,122,170,83,110,66,250,32,251,243,201,120,31,6,95, +252,123,71,128,138,168,157,139,130,63,253,172,53,3,88,134, +213,84,230,204,2,181,85,49,190,129,103,123,121,97,229,148, +132,96,1,215,114,131,210,46,72,223,100,243,255,25,96,50, +230,7,178,47,159,173,231,33,209,81,191,86,21,248,171,79, +173,75,224,147,254,206,18,177,52,41,250,240,251,94,24,56, +177,99,89,81,167,215,52,226,74,106,49,194,65,152,7,73, +159,102,87,187,27,205,230,246,163,210,109,120,93,39,207,188, +82,82,128,161,24,201,160,158,171,132,29,209,42,15,167,110, +164,155,242,30,10,156,212,113,180,164,35,115,117,177,253,185, +100,56,79,131,170,174,191,167,4,5,89,154,23,77,254,126, +19,202,135,232,135,175,247,37,176,73,251,39,137,221,202,22, +249,188,61,162,88,206,84,208,172,109,131,237,222,53,224,104, +78,55,232,237,14,53,77,185,14,153,141,235,163,233,221,13, +102,123,122,81,227,151,184,166,26,231,68,128,141,216,147,140, +238,241,195,220,75,4,211,56,43,194,116,200,110,124,27,79, +199,234,34,251,247,137,112,27,86,87,217,59,15,132,94,224, +184,78,154,57,173,160,80,75,20,210,9,57,131,65,30,103, +77,24,30,209,45,127,169,105,200,85,204,110,116,155,95,207, +74,50,177,119,25,120,179,199,29,83,10,3,36,70,42,40, +214,50,129,118,106,74,114,176,227,91,121,34,213,22,199,92, +66,156,64,49,149,49,51,80,101,245,156,37,96,73,86,246, +201,115,175,16,84,96,173,22,48,44,163,106,236,19,230,70, +162,169,222,185,32,120,195,199,250,35,202,229,200,69,205,95, +102,218,106,25,67,3,178,38,15,191,238,149,131,18,47,212, +28,101,104,76,22,252,237,39,165,29,144,58,137,230,122,99, +194,224,136,79,233,11,108,215,174,67,103,243,248,105,110,53, +138,201,140,95,225,170,108,159,47,199,45,82,121,49,229,49, +212,32,165,19,112,38,135,62,230,30,34,28,134,89,148,246, +65,242,167,155,245,110,4,155,184,191,138,212,93,116,254,15, +3,47,246,60,35,74,228,208,198,204,65,133,215,114,130,194, +44,73,203,38,250,239,11,97,7,180,78,131,169,158,185,164, +56,195,66,170,33,78,161,136,200,153,13,234,187,106,220,19, +133,118,98,202,98,184,67,75,51,162,69,30,111,205,8,22, +113,61,53,41,249,192,253,93,36,254,170,83,111,82,248,33, +239,177,192,104,13,7,106,174,50,118,6,139,188,222,146,144, +44,232,219,110,90,123,1,225,18,236,228,150,167,84,5,252, +202,87,233,58,124,182,159,151,70,70,233,24,92,240,189,63, +128,124,200,126,124,58,95,135,203,182,251,214,152,32,56,195, +67,186,35,79,181,202,193,137,31,235,142,56,149,34,3,119, +118,137,123,170,80,94,68,249,28,61,232,249,78,28,89,169, +39,40,205,130,182,109,182,189,183,0,100,65,222,102,209,219, +31,74,158,112,53,182,9,247,99,209,209,191,94,148,248,161, +238,169,67,105,19,228,103,182,169,247,41,112,81,247,215,145, +178,10,206,245,192,228,205,23,231,94,32,184,194,91,57,34, +81,86,199,217,18,158,196,117,213,188,103,2,233,148,156,224, +48,207,146,178,12,174,249,198,156,65,32,135,50,38,6,46, +236,158,54,84,46,77,142,126,244,186,71,14,107,172,16,82, +0,161,16,72,160,148,10,128,21,88,170,21,14,202,188,88, +242,148,171,144,93,248,62,31,142,223,228,242,231,154,97,44, +5,10,170,180,30,130,28,204,248,20,190,200,247,237,48,213, +50,135,22,102,76,10,60,212,59,21,36,107,250,112,251,86, +153,56,187,194,93,89,46,87,46,75,238,114,242,194,203,57, +11,192,22,236,236,22,183,92,165,236,128,215,121,50,212,39, +213,29,119,74,73,0,150,96,37,151,56,167,2,100,69,158, +110,213,139,23,111,222,56,49,98,65,210,166,201,215,239,82, +241,176,237,186,117,46,12,158,248,181,174,128,87,121,58,85, +39,223,188,115,66,192,128,140,201,129,143,251,167,136,197,73, +23,231,95,48,186,195,79,123,43,65,68,198,236,64,215,245, +243,212,168,36,27,251,135,137,151,107,150,177,53,56,232,243, +238,8,83,33,179,112,109,54,188,175,131,101,95,61,107,201, +64,158,101,101,157,28,243,8,105,129,196,74,37,193,88,14, +84,92,109,109,12,28,216,185,45,168,217,202,30,121,172,53, +2,72,132,212,64,164,197,18,167,84,4,236,200,86,253,120, +117,166,141,150,115,20,160,41,218,241,169,124,153,110,219,107, +11,97,6,164,76,130,189,220,176,180,42,194,119,248,104,127, +39,137,220,218,20,248,168,127,171,72,220,85,229,254,36,178, +107,223,33,163,113,92,36,253,154,85,108,110,62,58,223,135, +195,55,251,220,57,36,48,74,195,160,138,235,173,9,193,3, +190,231,7,177,31,153,174,219,231,202,97,137,85,74,14,112, +28,39,73,220,86,213,248,39,142,173,196,17,149,114,3,210, +38,201,223,110,82,251,17,233,178,252,174,22,55,92,173,109, +128,221,216,54,220,174,85,7,222,238,81,195,150,234,132,155, +177,46,136,223,232,50,255,150,145,52,106,202,114,184,98,91, +115,131,209,30,78,220,88,53,228,41,86,49,185,241,105,124, +21,175,219,228,250,103,138,105,140,21,64,42,36,22,42,141, +134,114,37,178,104,239,39,160,77,154,63,205,172,86,51,152, +229,105,85,133,255,242,208,234,12,27,169,167,40,197,3,182, +103,23,185,191,137,228,91,119,194,201,24,31,192,63,124,188, +63,131,76,206,125,64,252,68,183,253,181,164,32,67,115,178, +193,127,127,8,121,128,245,88,100,244,142,7,101,95,60,123, +203,65,138,39,108,141,14,242,61,59,200,245,204,36,213,27, +23,70,79,120,26,87,69,251,62,25,238,211,226,138,107,173, +1,64,3,180,70,3,185,150,25,180,114,67,210,162,137,223, +235,2,249,149,173,242,113,250,68,187,61,173,168,208,91,28, +114,25,115,3,209,22,207,220,82,148,224,33,223,177,163,88, +205,100,214,175,81,69,246,238,3,227,55,184,236,187,103,12, +9,136,146,56,172,178,114,78,2,184,132,59,177,100,41,95, +160,187,250,220,58,20,54,73,255,102,145,219,155,10,158,245, +101,180,141,179,35,92,133,237,210,245,248,100,190,47,135,45, +214,57,49,96,97,214,164,225,83,253,114,213,178,135,30,231, +76,0,157,208,51,156,164,113,83,212,227,149,153,178,26,206, +212,208,164,236,131,231,127,49,232,225,206,45,65,73,22,246, +77,51,175,149,4,98,41,82,112,161,247,56,96,114,230,131, +242,47,26,253,229,165,149,17,50,2,71,116,202,79,104,27, +102,87,186,11,207,231,226,225,219,125,106,92,18,157,245,99, +212,129,181,91,208,178,141,190,243,70,136,9,136,147,40,174, +179,102,12,11,168,150,58,132,54,96,110,38,186,238,159,35, +6,37,92,136,61,200,248,28,62,216,255,77,32,159,178,23, +30,206,221,64,182,229,55,181,60,161,106,232,83,238,66,242, +161,251,249,104,124,23,143,223,230,210,227,152,73,168,23,42, +142,182,116,38,142,174,244,23,150,78,197,201,22,255,220,49, +164,32,66,99,176,192,107,61,1,105,146,244,109,54,189,191, +129,100,75,127,98,217,82,159,80,55,212,45,117,9,125,194, +221,88,54,212,47,85,13,127,234,89,74,22,240,45,63,169, +237,136,85,73,62,118,31,27,143,199,102,227,251,120,120,118, +151,155,151,78,198,249,16,252,224,247,191,16,116,96,239,54, +176,110,139,107,174,49,70,0,136,128,24,137,160,26,235,132, +152,129,40,139,227,46,41,207,160,146,107,156,17,33,50,96, +103,182,168,231,43,113,69,181,222,129,160,11,251,167,137,213, +75,22,243,29,57,170,209,78,78,121,8,117,64,237,84,148, +236,225,199,189,83,64,162,164,14,163,45,156,153,161,42,233, +199,172,67,99,179,240,109,62,61,175,137,196,91,53,226,73, +90,55,193,125,94,28,121,169,101,8,77,192,158,108,244,159, +23,70,78,104,24,86,81,185,55,9,252,210,215,216,34,156, +135,65,23,247,95,17,170,131,110,239,43,96,85,150,207,213, +195,150,235,148,153,176,58,202,214,248,32,254,163,195,125,91, +76,115,172,33,66,97,144,196,105,21,133,123,178,208,111,92, +25,45,227,104,72,87,228,235,118,185,122,217,98,159,51,7, +20,78,201,8,30,241,45,61,137,233,138,125,205,44,86,59, +25,229,99,244,129,247,123,80,240,165,191,177,100,40,79,162, +186,238,158,51,4,36,72,202,52,216,234,29,11,138,182,124, +166,158,166,84,7,220,206,85,193,190,110,150,187,149,44,226, +123,122,80,243,149,185,178,88,238,84,146,140,237,193,197,223, +119,194,200,8,29,193,43,62,181,47,145,77,251,47,9,205, +194,182,233,246,189,50,80,102,197,154,38,92,143,77,198,255, +112,240,230,143,51,39,20,12,233,136,92,217,44,127,171,73, +204,87,228,234,102,187,123,205,32,150,35,21,21,123,155,65, +47,119,44,41,202,240,152,110,216,91,13,98,58,98,87,178, +139,223,239,66,241,145,253,250,84,186,12,191,233,229,141,21, +67,26,34,21,22,75,157,66,19,177,55,25,252,243,199,152, +3,8,135,96,6,167,124,132,190,224,118,175,26,244,116,167, +158,164,116,3,222,230,209,211,158,74,148,209,49,190,128,119, +121,120,117,167,157,148,114,0,226,32,202,227,168,73,203,39, +234,237,10,117,69,189,94,145,168,171,235,237,9,69,67,190, +98,87,179,155,221,238,86,179,152,237,232,85,143,94,246,216, +99,140,1,0,3,48,6,3,60,198,27,48,54,3,95,246, +219,83,138,2,60,197,43,54,53,63,153,237,235,101,137,93, +202,30,120,188,55,3,92,198,221,80,182,196,39,245,29,53, +106,201,66,190,97,103,181,152,225,40,77,131,174,238,183,163, +84,13,124,218,95,73,42,54,54,15,159,238,215,163,146,109, +252,29,39,74,236,80,214,196,225,149,157,242,18,202,132,216, +129,172,203,227,171,121,205,36,214,43,17,69,115,190,1,103, +115,248,97,239,53,128,104,136,87,104,42,118,54,139,223,238, +82,243,144,233,184,93,170,30,190,220,183,196,36,197,27,54, +86,15,89,142,87,100,234,110,58,123,199,129,146,43,156,149, +97,50,229,55,180,44,163,107,252,17,231,82,224,160,206,171, +33,77,145,142,203,165,203,241,139,92,223,76,115,173,49,64, +96,132,134,96,5,151,122,135,130,38,109,159,44,247,43,81, +69,247,254,1,226,35,250,229,171,117,13,60,218,219,9,42, +179,102,13,27,170,151,46,198,63,112,124,39,143,188,214,18, +128,36,72,203,36,218,235,9,73,131,166,110,167,171,244,29, +54,90,207,65,130,167,124,133,174,226,119,187,88,253,100,181, +159,145,38,74,239,96,208,199,221,83,134,194,36,201,219,46, +90,255,65,225,151,188,230,18,227,20,136,168,152,219,136,58, +185,230,25,83,2,131,52,78,138,56,156,178,17,126,194,219, +56,58,210,87,217,58,31,134,95,244,250,71,138,43,172,149, +2,2,37,84,8,45,192,88,12,116,88,111,69,136,14,248, +157,47,194,125,88,124,117,175,29,132,122,160,242,106,74,115, +160,225,90,109,96,220,6,213,93,119,206,9,0,19,48,39, +19,124,231,143,48,23,18,15,213,78,71,233,26,124,244,191, +23,4,110,232,90,126,80,251,21,169,186,248,254,30,18,28, +229,105,84,149,253,243,196,168,5,11,187,166,29,151,74,135, +225,22,173,252,144,246,72,98,181,146,65,60,71,11,58,182, +23,23,94,207,73,2,183,116,37,190,168,247,43,80,85,245, +255,21,160,42,234,247,170,64,95,117,235,93,8,62,240,127, +31,8,191,224,117,159,28,247,72,97,133,148,66,0,129,16, +10,128,20,72,168,20,26,136,181,72,224,149,158,194,20,201, +184,30,154,156,253,224,244,143,22,119,92,41,45,128,88,136, +52,88,234,21,138,138,188,221,162,150,47,212,29,117,106,77, +2,190,228,55,183,28,165,104,192,215,252,98,214,163,145,93, +250,30,27,140,247,96,224,199,190,99,70,161,152,200,184,29, +170,154,254,220,50,148,38,65,95,118,219,91,11,2,54,100, +47,62,188,191,131,68,79,125,74,93,64,191,116,53,190,137, +231,107,113,193,245,222,4,240,9,127,227,201,88,31,68,127, +124,57,111,129,200,138,61,205,168,22,59,156,181,97,112,197, +183,246,4,162,41,222,177,161,120,201,102,254,43,67,101,210, +236,105,71,165,218,224,184,79,138,59,172,180,18,66,4,192, +8,12,209,8,47,225,76,12,93,200,63,108,188,30,147,12, +239,233,64,221,85,231,222,32,176,67,91,51,131,85,94,78, +89,8,55,96,109,22,188,237,163,229,29,21,106,139,98,62, +35,79,180,218,195,136,11,169,135,40,135,35,54,37,63,184, +253,171,68,29,93,235,15,40,159,162,23,63,222,157,97,34, +229,22,164,108,130,255,252,48,246,2,195,53,218,200,57,13, +160,26,234,148,154,128,60,201,234,62,59,206,149,192,34,173, +151,32,38,35,126,164,187,242,92,42,28,150,89,181,230,1, +211,51,155,212,127,84,184,45,171,233,204,29,69,106,46,50, +126,135,139,182,127,150,152,165,104,193,199,254,99,194,225,152, +77,232,31,46,222,190,81,102,198,170,32,95,179,139,221,207, +70,243,185,121,232,116,158,14,213,77,119,239,25,64,50,164, +39,50,109,183,172,165,3,113,23,149,127,211,200,43,45,133, +8,130,49,28,160,57,218,208,185,60,184,250,219,74,26,49, +37,49,88,225,165,156,129,32,11,243,38,137,223,234,18,251, +148,185,176,120,234,86,186,8,255,225,225,221,29,102,90,106, +17,194,3,184,135,11,183,103,21,153,187,139,204,223,101,226, +237,26,117,100,173,30,176,60,171,202,252,89,102,214,170,1, +79,243,170,73,207,103,226,233,90,125,96,253,22,149,124,227, +206,40,17,67,19,178,7,31,255,207,1,131,51,62,132,63, +240,124,47,14,188,220,179,132,44,193,75,62,115,79,17,138, +131,44,207,171,34,125,151,141,247,99,208,193,189,95,128,186, +168,254,187,66,92,65,173,86,48,168,227,106,105,67,228,194, +230,233,83,237,114,244,162,199,63,115,76,33,140,128,16,9, +176,18,75,148,210,1,184,131,75,191,99,69,145,158,203,132, +219,177,170,200,223,109,98,253,18,213,116,231,158,32,52,3, +91,182,211,87,218,10,25,133,99,50,225,119,188,40,243,99, +217,81,175,86,52,232,235,110,57,75,193,130,174,237,135,165, +87,49,186,193,111,127,41,105,192,212,204,100,213,159,87,70, +202,40,24,211,1,187,179,77,188,95,131,138,174,253,135,132, +71,113,155,85,111,94,56,57,227,65,216,7,205,223,102,210, +235,25,73,162,182,46,134,63,244,60,39,10,236,212,150,196, +100,197,159,118,86,138,9,140,211,32,170,227,110,41,75,224, +146,238,204,19,165,118,32,234,226,250,107,74,113,128,229,88, +69,228,206,38,241,95,29,106,155,98,31,51,15,149,78,195, +169,26,249,164,189,147,64,46,101,14,44,220,154,21,108,234, +126,58,90,215,193,179,191,156,180,112,98,198,162,160,79,187, +43,205,133,198,99,177,209,121,62,20,63,217,237,111,37,137, +216,154,28,252,248,119,142,8,148,81,49,182,1,119,115,217, +113,175,20,20,104,169,70,56,9,227,34,232,199,174,99,103, +177,216,233,44,29,139,139,174,255,167,128,69,89,31,71,79, +122,58,83,71,211,186,11,206,247,224,224,207,63,99,76,0, +156,192,49,157,176,51,90,196,241,148,172,224,83,255,82,209, +176,175,154,245,108,36,159,186,151,14,198,125,80,252,101,167, +189,148,48,32,98,98,226,226,234,107,107,97,192,196,204,69, +197,223,118,210,202,9,9,131,34,46,167,46,164,31,178,30, +143,204,214,245,240,228,174,39,39,61,156,185,161,104,201,71, +238,107,98,241,210,205,120,23,134,79,244,219,87,202,10,56, +149,35,19,117,119,157,57,163,64,76,69,204,78,116,217,127, +79,8,26,176,53,59,216,245,237,52,149,58,131,70,110,105, +74,116,208,239,93,1,174,226,118,171,90,252,112,247,150,129, +52,75,218,50,153,246,91,82,146,129,61,219,200,59,45,164, +24,194,16,136,160,24,203,128,154,169,172,153,195,10,43,165, +4,0,9,144,18,9,180,82,67,144,130,9,157,195,3,187, +183,13,180,91,211,130,139,189,207,128,147,57,190,144,119,88, +104,53,134,9,148,83,17,178,3,95,247,203,81,139,22,126, +204,59,36,52,10,203,164,218,227,136,73,137,7,106,175,34, +116,7,159,254,215,130,130,45,221,137,39,107,253,0,245,81, +245,246,133,178,35,94,165,233,208,221,124,118,158,11,133,71, +114,171,83,108,98,254,34,211,119,219,88,59,4,53,88,233, +37,140,137,128,27,185,166,25,215,66,131,177,30,136,188,216, +242,156,42,144,87,89,58,23,7,95,254,91,67,130,162,44, +143,171,166,61,151,8,167,97,84,133,253,210,212,232,36,159, +187,135,12,199,105,18,245,117,181,188,161,98,105,83,228,227, +246,169,114,121,114,213,179,151,28,230,88,66,148,192,33,157, +145,35,26,229,101,148,141,241,3,220,199,197,211,183,218,196, +248,5,174,235,230,185,83,72,34,180,6,3,61,214,25,49, +34,65,86,230,201,82,191,80,117,244,173,55,33,124,128,255, +248,112,254,6,147,61,255,136,113,9,116,82,207,81,130,134, +108,197,143,118,119,154,73,173,71,32,139,242,62,10,222,244, +241,246,140,34,49,87,17,187,147,77,254,127,3,200,134,252, +197,166,231,55,177,124,169,110,184,91,203,2,186,165,47,177, +77,185,15,137,143,234,183,171,212,29,116,122,79,3,170,166, +62,167,14,164,93,146,158,205,228,215,183,210,68,232,13,14, +251,172,57,195,64,138,37,76,137,12,218,185,41,232,209,206, +78,113,137,117,74,76,80,156,101,97,221,20,247,88,97,164, +132,2,33,21,16,43,145,68,107,61,0,121,144,245,121,116, +180,175,147,101,126,45,43,232,212,158,68,116,205,63,102,28, +10,153,132,123,177,224,105,95,37,235,248,88,126,84,187,29, +173,234,240,219,94,90,24,49,33,113,80,229,245,148,164,96, +67,247,242,193,250,47,10,253,196,181,213,48,166,2,102,101, +154,108,253,15,5,79,250,58,91,198,211,176,170,202,255,105, +96,213,150,199,84,195,156,74,144,145,57,186,208,127,92,56, +61,163,73,220,87,197,250,38,154,239,205,1,135,115,54,128, +111,248,89,111,70,184,8,251,161,233,217,77,110,127,42,89, +198,215,240,162,206,175,97,69,149,222,195,128,139,185,143,136, +151,105,182,181,55,16,108,225,206,44,81,75,23,226,15,58, +191,135,5,87,123,27,65,39,246,44,35,107,244,144,231,88, +65,164,198,34,161,87,56,42,211,102,203,123,42,80,86,197, +249,22,156,236,241,199,156,67,0,131,48,14,130,60,204,186, +52,62,138,223,236,114,247,146,193,60,79,138,58,188,182,19, +86,70,201,24,30,208,61,125,168,125,138,92,220,124,117,174, +13,134,123,180,176,99,90,97,161,212,8,36,81,90,7,193, +30,110,220,26,21,100,107,126,48,251,211,201,58,63,134,29, +212,122,5,162,42,238,183,162,68,15,125,206,29,64,58,36, +55,58,205,167,230,37,147,121,191,4,53,89,249,39,141,157, +194,18,169,180,24,226,16,202,128,152,137,168,155,235,142,57, +133,32,2,99,52,128,107,184,81,107,22,176,45,187,233,237, +13,5,75,186,50,95,150,219,149,234,130,251,189,40,240,83, +223,82,147,144,47,216,221,109,102,189,26,209,36,239,187,96, +124,7,143,254,246,146,194,12,73,137,6,122,173,35,96,69, +150,238,197,131,183,127,148,184,161,106,233,67,236,67,230,227, +242,233,122,125,34,221,150,215,84,226,140,10,177,5,57,155, +193,47,127,173,41,192,81,156,102,81,219,23,203,158,122,148, +178,1,126,227,203,120,27,70,87,248,43,79,165,202,224,153, +95,202,26,56,180,51,83,84,227,157,24,178,16,111,208,216, +45,108,153,78,219,41,43,225,68,140,77,192,159,124,246,158, +3,4,71,120,10,87,100,235,126,56,122,211,195,155,59,142, +148,84,96,172,6,50,45,183,40,229,3,244,71,151,251,151, +136,166,121,215,132,227,49,217,240,191,30,148,124,225,238,44, +19,107,151,160,39,59,253,165,165,17,81,50,135,23,118,78, +11,40,150,50,5,54,106,207,34,178,103,31,57,175,129,68, +75,61,66,89,16,183,81,117,246,141,51,35,84,4,237,216, +84,252,108,55,175,157,132,114,33,242,96,235,119,168,104,218, +119,201,120,30,22,93,253,111,5,137,154,186,156,190,208,118, +204,42,52,23,27,159,199,71,243,187,89,236,118,182,138,199, +109,83,237,115,228,160,198,43,49,69,49,158,129,37,91,249, +35,205,149,198,66,161,145,88,170,20,30,200,189,76,176,157, +187,130,92,205,108,86,191,89,229,230,164,131,115,63,16,125, +241,237,61,5,40,138,242,60,42,218,246,217,114,158,2,21, +85,123,31,1,47,242,124,43,78,180,216,227,140,9,129,3, +58,167,7,52,79,155,42,159,167,71,53,219,217,43,14,181, +76,161,141,152,147,8,174,241,70,140,73,128,151,120,166,150, +38,68,15,124,222,31,65,46,102,62,42,223,166,211,119,218, +72,57,5,33,26,224,53,158,136,181,73,240,151,159,214,86, +192,168,12,155,169,175,169,197,9,23,99,31,48,63,147,77, +255,111,1,201,146,190,204,182,245,54,132,46,224,95,62,90, +223,65,163,183,60,164,58,226,86,170,8,222,241,161,252,137, +102,123,123,65,225,150,172,228,19,247,86,129,184,138,218,189, +104,240,215,159,82,22,192,45,92,153,45,235,233,72,93,69, +239,126,48,250,195,203,59,43,196,20,196,104,4,151,120,167, +134,36,69,27,62,215,15,83,47,83,108,99,238,32,210,99, +153,81,43,22,52,109,187,108,189,15,129,15,250,191,11,196, +87,244,234,71,171,59,236,180,150,2,4,69,88,14,85,76, +111,108,24,94,209,169,63,169,236,152,87,72,42,52,22,11, +157,198,83,177,178,73,254,119,131,216,142,92,213,236,103,167, +185,212,56,36,50,106,199,162,162,111,191,41,229,1,212,67, +149,211,19,154,134,93,213,238,71,163,187,252,188,54,18,78, +197,200,6,253,221,37,230,41,82,113,177,245,57,116,48,239, +147,224,46,47,175,172,148,19,16,38,65,94,102,217,90,31, +64,63,116,61,63,137,237,202,117,201,124,94,30,89,173,103, +32,201,210,190,72,246,245,179,212,44,100,27,126,215,139,19, +47,214,60,97,106,100,146,238,205,3,167,119,52,168,235,234, +121,75,68,210,172,105,195,229,218,101,232,77,14,127,236,57, +70,16,136,161,8,201,129,142,235,165,137,209,11,30,247,77, +49,143,145,6,74,173,64,80,133,245,82,196,224,132,143,241, +7,156,207,193,131,191,255,132,176,1,122,163,195,124,75,78, +114,184,99,75,113,130,197,92,71,204,74,52,209,123,31,0, +63,240,125,63,12,189,200,241,141,60,211,74,11,33,6,32, +12,130,56,140,178,48,110,130,250,172,58,243,70,137,25,138, +146,60,236,186,118,30,10,157,196,115,181,176,97,122,101,163, +252,140,54,113,126,5,171,186,252,190,22,22,76,237,76,20, +221,249,39,140,141,192,19,189,246,17,242,2,203,181,202,192, +153,29,234,154,122,156,50,17,118,67,219,50,155,214,95,80, +186,5,47,251,236,57,71,0,138,160,28,139,136,158,249,164, +188,131,66,47,113,76,37,204,136,20,89,184,55,11,220,214, +213,240,166,142,167,101,21,157,251,131,200,143,109,199,173,82, +113,176,229,59,117,36,173,154,240,60,46,154,254,221,34,150, +39,85,29,127,203,73,10,55,100,45,30,184,189,171,192,93, +93,110,95,42,27,230,87,178,138,207,237,67,229,211,244,234, +70,187,57,237,160,212,11,20,87,89,59,7,5,94,234,25, +74,146,176,45,186,249,239,12,17,9,179,34,77,151,238,199, +163,179,125,188,60,179,74,205,65,134,231,116,129,254,234,82, +251,16,249,176,253,186,84,62,76,191,108,181,143,145,7,90, +175,65,68,199,252,66,214,225,177,221,184,54,26,206,213,192, +166,237,151,165,118,33,250,224,251,127,8,120,144,247,89,112, +182,135,23,119,94,9,41,130,112,12,38,120,206,23,224,46, +46,191,174,149,7,82,47,81,76,103,236,8,86,113,185,117, +41,124,144,255,217,96,190,39,7,61,222,153,33,42,225,70, +172,73,194,183,248,228,190,39,6,45,220,152,53,104,232,86, +190,72,247,229,177,213,56,38,18,110,197,138,38,125,159,13, +231,107,112,209,247,223,16,178,0,111,241,200,109,77,13,78, +250,56,123,194,209,152,46,216,223,77,98,191,50,85,54,207, +159,98,22,163,29,156,250,145,234,138,123,173,32,80,67,149, +210,3,152,135,73,151,231,87,177,186,201,238,127,35,200,196, +220,69,228,207,54,243,94,9,40,146,114,13,50,58,199,7, +242,47,27,237,231,164,129,83,59,18,85,117,255,29,33,42, +224,86,174,72,214,245,241,244,172,38,51,127,149,169,179,105, +252,21,167,90,228,240,198,142,97,5,149,90,131,128,14,233, +141,12,211,41,59,225,101,156,13,225,11,124,215,143,83,39, +210,108,105,79,36,218,234,25,75,130,178,44,174,187,230,28, +3,8,134,112,4,166,104,198,183,240,100,174,47,166,61,150, +24,165,96,64,199,244,194,198,233,17,205,242,182,138,198,125, +81,236,103,166,169,214,57,48,112,99,215,176,163,90,237,96, +212,135,213,87,214,202,1,137,147,42,142,183,100,36,143,186, +182,30,134,92,196,252,68,182,237,183,165,52,1,122,162,211, +126,74,90,48,177,115,89,112,183,151,21,118,74,75,32,146, +98,13,19,42,135,38,102,47,58,252,183,135,20,71,88,10, +21,68,107,60,16,123,145,225,59,125,164,189,146,80,44,100, +26,110,213,138,7,109,223,44,115,107,81,192,167,252,133,166, +99,119,177,249,249,108,60,31,139,143,238,247,163,208,77,124, +95,15,75,174,114,118,130,203,188,91,194,146,168,172,155,227, +14,41,141,128,18,41,180,16,99,16,192,33,156,129,33,27, +241,39,157,157,227,2,233,149,140,226,49,219,208,187,28,188, +248,243,206,8,17,1,51,50,69,55,254,141,35,35,117,20, +173,249,192,252,77,38,255,190,17,102,66,234,32,218,227,137, +89,139,6,126,237,43,100,21,158,203,133,203,179,171,220,157, +100,114,239,19,224,38,174,175,166,53,23,24,175,193,68,207, +125,66,220,64,181,213,49,182,0,103,113,216,101,237,29,4, +122,168,115,106,64,210,164,233,211,237,122,117,162,205,158,119, +68,168,12,154,185,173,168,209,75,30,115,13,49,10,193,4, +206,233,0,221,209,167,222,165,224,65,223,119,195,216,10,28, +213,105,55,165,61,144,120,169,102,56,75,195,162,170,239,175, +33,69,17,158,195,5,219,187,11,204,215,228,226,231,187,113, +108,36,158,170,149,15,210,63,89,236,119,166,136,198,121,17, +228,99,246,161,243,121,120,116,183,159,149,102,66,235,48,216, +226,157,27,130,22,108,236,30,54,92,175,77,132,223,240,178, +206,142,113,5,180,74,195,161,154,233,172,29,131,10,174,245, +6,132,77,208,159,93,230,222,34,144,71,89,27,7,71,126, +106,91,98,147,242,15,26,191,197,37,215,57,51,64,101,212, +140,101,65,221,86,215,216,35,140,133,64,3,181,86,1,184, +130,91,189,98,81,211,151,219,150,218,132,248,129,238,235,99, +233,81,204,102,244,139,87,111,90,120,49,231,17,208,34,141, +151,98,6,163,60,140,186,176,126,138,90,188,112,115,214,129, +177,27,216,182,221,182,214,6,192,13,92,219,13,107,171,96, +92,7,205,222,118,208,234,13,11,171,166,60,135,10,166,117, +22,140,237,192,213,221,118,214,138,1,13,211,42,11,231,102, +160,203,250,59,74,212,208,165,252,129,230,107,115,225,241,220, +44,116,27,95,199,203,50,187,214,29,112,58,71,7,250,174, +27,231,70,160,137,218,187,8,252,209,231,222,33,160,65,90, +39,193,92,78,92,88,61,101,41,92,144,189,249,224,252,15, +6,127,252,57,103,0,200,128,156,201,160,159,187,134,28,197, +104,6,183,124,165,174,160,87,59,26,213,101,247,189,49,96, +96,198,166,224,71,191,123,197,160,134,43,181,5,49,27,209, +39,223,189,99,64,193,148,206,192,145,157,250,146,218,140,120, +145,230,75,115,163,209,92,110,92,26,29,229,107,116,145,255, +219,64,186,37,47,185,204,185,5,40,139,226,62,43,206,180, +208,98,140,3,32,7,50,46,135,46,230,63,50,92,167,205, +148,215,80,162,132,14,225,13,28,219,137,43,171,229,12,5, +73,154,54,93,190,95,135,202,166,249,215,140,98,49,211,81, +187,22,29,252,251,71,136,11,168,151,42,134,55,116,44,47, +170,252,158,22,84,108,109,14,60,220,187,5,44,203,234,58, +123,198,145,144,42,136,215,104,34,247,54,129,126,234,90,122, +16,243,17,249,178,221,190,86,22,200,173,76,145,141,251,163, +200,205,77,71,239,122,112,242,199,155,51,14,132,92,192,188, +76,178,189,191,128,116,73,126,118,155,91,143,66,54,225,127, +60,56,251,195,201,27,47,198,60,64,122,36,179,122,205,34, +182,39,23,61,255,137,97,11,117,70,141,88,146,148,109,240, +221,63,70,28,72,185,4,57,153,225,43,125,133,173,210,113, +184,100,59,127,133,169,146,121,188,52,51,90,197,225,150,173, +244,17,246,66,195,177,154,200,188,93,162,158,174,212,23,212, +110,69,139,62,254,158,19,4,102,104,74,118,240,235,95,41, +42,240,86,143,88,150,212,101,244,141,55,99,92,0,189,208, +113,188,36,51,123,213,161,183,57,244,48,231,18,224,36,142, +171,164,29,147,10,143,229,70,165,217,208,190,76,182,253,183, +132,36,65,91,54,211,95,91,10,19,36,103,58,104,247,166, +129,87,123,26,81,37,247,56,97,98,228,130,230,109,19,237, +247,164,160,67,123,51,193,117,222,12,113,9,117,66,205,80, +150,196,101,213,157,119,66,200,0,156,193,33,159,177,39,24, +205,225,134,173,213,1,182,99,87,177,187,217,236,126,55,138, +205,204,87,229,250,100,186,111,143,41,134,49,20,32,41,210, +112,169,118,56,106,211,226,139,123,175,0,84,65,189,86,17, +184,163,75,253,67,197,211,182,202,198,249,17,236,226,246,171, +82,125,112,253,55,133,60,194,90,40,48,82,67,145,146,11, +156,215,65,178,167,31,181,110,129,203,186,59,206,148,208,32, +172,131,98,47,51,108,165,142,160,21,27,154,151,77,246,255, +19,192,38,236,143,38,119,63,25,237,227,228,137,87,107,26, +112,53,183,25,245,98,197,147,182,78,134,249,148,188,224,114, +239,18,240,36,175,187,228,60,7,10,174,244,22,134,76,196, +221,84,246,204,35,165,21,16,42,129,70,106,41,66,112,128, +231,120,65,230,230,162,227,127,57,104,241,198,141,81,3,150, +102,69,155,62,223,142,83,37,242,104,107,103,160,200,202,61, +73,232,22,190,204,183,229,52,133,58,162,86,46,72,222,116, +241,254,13,34,59,246,21,179,26,205,228,214,167,208,69,252, +79,7,235,190,56,246,18,195,20,202,136,24,153,160,59,251, +196,185,21,40,170,242,126,10,90,180,241,115,220,32,181,19, +81,54,199,31,114,30,3,13,214,122,1,226,34,234,231,170, +97,79,53,202,201,8,31,225,47,60,157,171,131,109,223,45, +99,105,80,212,229,245,149,180,98,66,227,176,200,234,61,11, +200,150,252,228,182,167,22,37,124,136,127,232,120,94,22,217, +189,111,128,217,152,62,216,254,93,34,158,166,85,23,222,207, +65,131,183,126,132,186,160,126,171,74,252,81,231,214,160,160, +75,251,35,201,213,206,70,241,153,125,234,92,26,28,245,105, +117,133,189,210,80,168,36,26,235,133,136,131,41,159,161,39, +57,221,161,167,57,213,32,167,51,116,36,175,186,244,62,6, +30,236,253,6,148,77,241,143,29,199,74,34,177,86,9,56, +146,83,29,114,27,83,7,211,62,75,206,114,176,226,75,123, +35,193,84,206,76,80,157,117,99,220,0,181,81,113,182,133, +55,115,92,33,173,144,80,40,36,18,106,133,130,34,45,151, +40,167,35,116,5,191,250,213,170,6,63,253,173,37,1,89, +146,151,93,246,222,3,128,7,120,143,7,102,111,58,120,247, +135,145,23,90,142,81,4,230,104,66,247,240,225,254,45,34, +121,214,149,241,50,204,166,244,7,150,111,213,137,55,107,220, +16,181,112,97,246,164,163,115,125,48,253,179,197,60,71,10, +42,180,22,3,28,198,89,16,182,65,119,247,153,113,42,68, +22,236,237,6,181,93,177,174,137,199,107,51,225,117,156,44, +241,75,93,67,143,114,54,130,79,252,91,71,194,170,40,223, +163,131,125,223,12,115,41,113,64,229,212,132,228,65,215,247, +211,208,170,12,159,233,167,173,149,1,50,35,87,52,235,219, +104,58,119,7,153,158,219,132,250,161,234,233,75,109,67,236, +66,246,225,243,253,56,116,50,207,151,226,6,171,189,140,176, +17,122,130,211,60,106,218,114,153,114,27,82,23,209,63,95, +140,123,160,240,74,78,113,136,101,72,77,68,222,108,113,207, +21,194,10,40,149,2,3,53,86,9,57,130,81,28,102,89, +90,23,193,63,126,156,59,129,100,74,111,96,216,70,221,89, +39,198,44,64,91,52,243,91,89,34,151,54,71,30,106,157, +2,19,53,119,25,121,163,197,28,71,72,10,52,84,43,29, +132,123,176,240,107,94,49,169,241,72,108,85,142,79,228,219, +118,218,74,25,1,35,50,100,39,190,172,183,35,84,5,253, +218,85,232,46,62,191,143,133,71,115,187,81,109,118,188,43, +195,101,218,109,105,77,4,222,232,49,207,144,146,8,172,209, +66,142,97,4,133,88,130,148,76,224,157,30,210,28,105,168, +84,26,12,245,72,101,197,156,70,80,137,53,74,200,16,156, +224,49,223,144,179,24,236,240,214,142,64,21,213,123,23,128, +47,248,221,47,70,61,88,249,37,173,153,192,58,45,166,56, +198,18,160,36,10,235,164,152,195,8,11,161,6,40,141,130, +50,45,182,56,231,2,224,5,158,235,133,137,147,43,158,181, +101,48,205,179,166,12,135,105,150,181,117,48,236,163,230,45, +19,105,183,164,37,19,121,183,133,53,83,88,35,133,20,66, +8,0,16,0,33,16,64,33,148,0,33,17,80,35,149,20, +99,24,64,49,148,33,49,81,113,183,149,53,114,72,99,164, +128,66,41,17,64,35,180,4,35,57,212,49,181,48,97,114, +228,163,246,45,50,121,247,133,177,19,88,166,213,22,198,76, +64,157,84,115,156,33,33,81,80,167,213,20,230,72,66,181, +208,97,188,5,35,59,244,53,183,24,229,96,196,135,244,71, +150,235,149,137,178,59,222,148,241,48,236,162,246,47,18,125, +245,173,53,1,120,130,215,124,98,222,34,145,87,91,26,19, +5,119,122,73,99,166,160,70,43,57,196,49,148,32,33,83, +112,163,215,60,98,90,98,145,210,11,24,151,65,55,247,29, +49,42,193,70,238,105,66,245,208,229,252,5,166,107,246,177, +243,88,104,52,150,11,149,71,83,187,19,77,246,254,3,194, +39,248,205,47,103,45,24,216,177,173,184,209,106,14,51,44, +165,10,224,21,158,202,149,201,178,191,158,148,116,96,238,38, +178,111,159,41,167,33,84,1,189,210,81,184,38,27,255,199, +129,147,59,158,148,117,112,236,39,166,45,150,57,181,32,97, +83,244,227,215,185,50,88,230,213,146,134,76,197,205,86,247, +216,97,172,5,2,43,180,20,35,24,196,113,148,164,97,83, +245,243,213,184,38,26,239,197,128,135,121,151,132,103,113,217, +117,239,28,16,56,161,99,120,65,231,246,160,226,107,123,97, +225,212,140,100,81,223,87,195,154,42,156,151,65,54,231,31, +48,62,131,79,254,123,67,192,130,172,205,131,167,127,181,168, +225,75,125,67,205,82,182,192,103,253,25,101,98,236,2,246, +101,179,253,189,36,48,75,211,162,139,255,239,0,209,17,191, +210,85,248,46,31,175,207,164,211,115,154,64,61,85,41,63, +160,125,154,92,253,108,53,143,153,134,90,165,224,64,207,117, +194,204,72,21,197,123,54,144,111,217,73,47,103,44,8,218, +176,185,250,216,122,28,50,25,247,67,209,147,159,222,214,208, +160,172,139,227,47,57,205,161,134,41,149,1,51,51,85,53, +255,153,97,42,101,6,172,204,146,181,124,160,254,170,82,127, +80,249,53,173,184,208,122,12,50,56,231,3,240,7,159,255, +199,128,131,57,159,128,55,121,252,53,167,24,196,112,132,166, +96,71,183,250,197,170,39,47,189,140,177,1,120,131,199,126, +99,202,96,152,71,73,27,38,87,62,75,207,98,178,227,95, +57,42,209,70,207,121,2,212,68,229,221,20,246,72,99,165, +144,64,40,5,2,42,164,22,34,12,134,120,132,182,96,102, +167,186,228,62,39,14,172,220,146,148,108,224,223,62,82,94, +65,169,22,56,172,179,98,76,3,172,198,50,161,118,40,106, +242,242,203,90,59,0,117,80,237,117,132,172,192,83,189,114, +81,242,135,155,183,78,132,217,144,190,200,246,253,50,212,38, +197,31,118,94,11,9,134,114,36,162,106,238,51,226,68,138, +45,204,153,4,122,169,99,104,65,198,230,224,195,255,123,64, +240,132,175,241,69,188,79,131,171,190,189,166,16,71,80,138, +5,76,203,44,90,251,1,233,147,236,238,55,163,92,140,124, +208,254,77,34,191,182,21,54,74,207,96,146,231,93,17,174, +195,102,235,123,104,112,214,135,209,23,222,206,81,129,182,106, +198,179,176,108,170,127,174,24,214,80,161,180,8,226,49,218, +192,185,29,168,186,250,222,26,16,52,97,123,116,177,255,153, +96,58,103,7,184,142,155,165,110,161,203,248,27,78,214,248, +33,238,161,194,105,25,69,99,190,32,119,51,217,245,239,20, +145,56,171,194,124,73,110,118,186,75,207,99,162,225,94,45, +104,216,86,221,120,55,134,13,212,91,21,226,11,122,183,131, +85,95,94,91,9,35,34,100,6,174,236,150,183,84,36,236, +138,118,125,58,93,167,207,180,211,82,138,0,28,193,41,30, +177,45,185,201,233,15,45,207,168,18,123,148,177,49,120,224, +247,190,0,118,97,251,116,185,126,153,106,155,99,15,49,14, +129,12,202,185,8,248,145,239,218,113,168,100,26,111,197,136, +6,121,157,37,99,121,80,245,245,181,180,32,98,99,242,224, +235,127,41,104,208,214,205,112,151,150,71,84,203,29,74,154, +48,61,178,89,255,70,145,153,187,138,220,221,100,246,175,19, +101,118,172,43,226,117,154,76,253,77,37,207,184,18,90,132, +241,16,236,224,214,175,80,85,244,239,23,161,62,168,254,186, +82,94,64,185,20,57,184,241,107,92,17,173,243,96,232,71, +174,107,230,177,210,72,40,21,2,11,180,86,3,152,134,89, +149,230,67,243,179,217,252,126,22,154,141,237,195,229,219,117, +234,76,26,61,229,41,84,17,189,243,65,248,7,143,255,230, +144,195,24,11,128,22,104,172,22,50,12,167,104,196,151,244, +102,134,171,180,29,178,26,207,196,210,165,248,193,238,111,35, +233,212,156,100,112,207,23,226,14,42,189,134,17,21,114,11, +83,38,195,126,106,90,114,145,243,27,88,182,213,55,214,12, +97,9,84,82,141,113,2,196,68,196,205,84,215,220,99,132, +129,16,11,144,22,73,188,86,19,152,167,73,213,199,215,243, +146,200,172,93,131,142,238,245,131,212,79,84,219,29,107,138, +112,28,38,89,222,87,193,186,46,158,191,197,36,199,59,50, +84,39,221,156,119,64,232,4,158,233,165,141,145,3,26,167, +69,20,207,217,2,158,229,101,149,157,243,2,200,133,204,195, +165,219,241,170,76,159,109,231,173,16,81,48,167,19,116,102, +143,58,182,22,7,92,206,93,64,190,100,55,191,157,165,98, +97,211,244,235,86,185,56,249,226,221,27,6,86,108,105,78, +52,216,235,13,9,139,162,62,175,142,180,85,50,142,135,100, +71,191,122,213,162,135,63,247,12,33,9,208,18,141,244,82, +198,192,128,141,217,131,142,239,229,129,213,91,22,210,13,121, +139,69,78,111,104,88,86,213,249,55,140,172,208,83,156,98, +17,211,19,155,150,95,212,250,5,170,171,238,189,3,64,7, +244,78,7,233,158,60,244,58,71,6,234,172,26,243,4,169, +153,200,186,61,174,152,214,88,32,180,2,67,53,210,73,57, +7,1,30,226,29,26,154,149,109,242,253,59,68,52,204,171, +36,29,155,139,143,239,231,161,209,89,62,86,31,89,175,71, +36,203,250,58,90,214,209,177,190,136,246,121,114,212,163,149, +29,242,26,75,132,210,32,168,195,106,43,99,100,128,206,232, +17,207,210,178,136,238,249,67,204,67,164,195,114,171,82,124, +96,255,54,145,126,203,74,58,49,103,17,216,163,141,157,195, +2,171,181,12,160,25,218,146,153,188,250,210,218,8,56,145, +99,27,113,39,149,28,227,8,72,145,132,107,177,193,121,31, +4,127,248,121,111,4,152,136,185,137,232,155,111,206,57,0, +112,0,231,112,192,230,236,3,231,119,176,232,235,111,41,73, +192,150,236,228,151,183,86,4,232,136,94,249,40,125,131,205, +222,119,192,232,12,31,233,175,44,149,11,147,39,95,189,107, +193,193,158,111,196,153,20,122,136,115,40,96,82,230,193,210, +175,88,213,228,231,183,177,116,40,110,178,250,207,10,51,37, +53,24,233,161,204,137,5,75,187,34,93,151,207,215,227,146, +233,188,29,162,26,238,212,146,132,108,193,207,126,115,202,65, +136,7,104,143,38,118,47,27,236,247,166,128,71,121,27,69, +103,254,40,115,99,209,208,175,92,149,236,227,231,185,81,104, +38,182,46,135,47,246,61,51,72,229,196,132,197,81,151,214, +71,208,139,29,207,202,50,185,246,25,114,18,195,21,218,138, +25,141,226,50,235,214,184,32,122,227,195,248,11,78,247,232, +97,207,53,194,72,8,21,64,43,52,20,43,153,196,123,53, +160,105,218,117,233,124,28,62,217,239,79,33,139,240,30,14, +220,220,117,228,172,6,51,61,181,41,241,65,253,87,133,250, +162,218,239,72,81,133,247,114,192,226,172,11,227,39,184,205, +171,39,45,157,136,179,41,252,145,231,90,97,160,196,10,37, +69,24,14,209,12,111,233,72,92,85,237,127,36,184,202,219, +41,42,241,70,141,89,130,150,108,228,159,54,86,14,73,140, +86,112,168,103,42,105,198,180,192,98,173,19,96,38,166,46, +166,63,182,28,167,72,196,213,212,230,196,131,181,95,144,186, +137,238,251,99,200,65,140,71,96,139,118,126,10,91,164,243, +114,200,98,188,3,67,55,242,77,59,47,133,12,194,57,24, +240,49,255,144,241,56,108,178,254,143,2,55,117,61,61,169, +233,200,93,77,110,126,58,91,199,195,178,171,222,189,96,112, +199,151,242,6,138,173,204,145,133,122,163,194,108,73,79,102, +250,106,91,99,131,240,14,14,253,204,53,197,56,6,18,44, +229,10,100,85,158,79,197,203,54,251,222,25,32,50,98,71, +178,170,207,175,99,101,145,220,235,4,153,153,171,138,253,205, +36,215,59,19,68,103,252,8,119,97,249,84,189,124,177,238, +137,67,43,51,100,37,158,168,181,11,208,23,221,254,87,130, +138,172,221,131,134,111,245,137,117,75,92,82,157,113,35,212, +4,229,89,84,246,205,51,167,20,4,104,136,86,120,40,119, +34,201,214,254,64,242,165,187,241,108,44,31,170,159,174,214, +55,208,108,109,15,44,222,186,17,110,194,250,40,122,243,195, +217,27,14,214,124,97,238,36,146,107,157,1,35,51,116,37, +191,184,245,42,68,23,252,239,7,161,31,184,190,155,198,94, +97,168,68,26,45,229,8,68,81,156,103,65,217,22,223,220, +115,132,160,0,75,177,130,73,157,71,67,187,50,93,182,223, +151,194,6,233,157,12,242,57,123,192,241,156,44,240,91,95, +66,155,48,63,146,93,253,110,21,139,155,174,222,183,192,100, +205,31,102,94,42,25,198,83,176,162,75,255,99,193,209,158, +78,212,217,53,238,136,82,57,48,113,115,213,177,183,24,228, +112,198,134,224,5,159,251,135,136,135,105,151,165,119,49,248, +225,239,61,1,104,130,246,108,34,255,182,145,118,74,74,48, +144,99,25,81,35,151,52,103,26,104,181,134,1,21,83,27, +19,7,87,126,75,75,34,178,102,15,59,174,149,6,66,45, +80,88,37,229,24,68,112,140,39,96,77,22,254,205,35,167, +53,20,40,169,194,120,9,102,114,234,67,234,35,234,229,138, +101,77,29,78,219,40,59,227,69,152,15,201,143,110,247,171, +81,77,118,254,11,67,39,242,108,43,111,164,152,194,24,9, +160,18,106,132,146,32,44,131,106,174,51,102,4,138,168,156, +155,128,62,233,238,60,19,74,135,224,6,175,253,132,180,65, +114,167,147,116,110,14,58,188,183,3,84,71,221,90,23,192, +47,124,157,47,195,109,90,125,97,237,20,148,104,161,199,56, +3,66,38,224,78,46,121,206,21,192,42,44,151,42,135,39, +118,45,59,232,245,142,4,85,89,63,71,13,90,186,17,111, +210,248,41,110,177,202,201,9,15,227,46,40,223,162,147,127, +222,24,49,32,97,82,228,225,214,173,112,81,246,199,147,179, +30,140,252,208,246,204,34,181,23,17,62,195,79,122,59,67, +69,210,174,73,199,231,242,225,250,109,42,125,134,157,212,114, +132,162,32,79,179,170,205,143,103,103,185,88,249,36,189,155, +193,46,111,175,40,212,19,149,118,67,218,34,153,215,75,18, +179,21,61,250,217,107,14,49,12,161,8,200,145,140,234,177, +203,216,27,12,246,120,99,198,160,128,75,185,3,73,151,230, +71,179,187,221,172,118,51,218,197,233,23,173,254,176,242,74, +74,49,128,97,24,69,97,158,36,117,27,93,231,207,48,147, +82,15,80,30,69,109,94,60,121,235,69,136,15,232,159,46, +214,63,81,108,103,174,40,214,51,145,116,107,94,48,185,243, +73,120,23,135,95,246,218,67,136,3,40,135,34,38,39,62, +172,191,162,84,15,92,222,93,97,174,36,22,43,157,132,115, +49,240,97,255,53,161,120,200,118,252,42,87,39,219,252,123, +70,144,136,169,137,201,139,47,239,173,0,81,17,183,83,85, +242,143,27,167,70,36,201,218,62,88,254,85,163,158,172,244, +19,214,70,193,153,30,218,156,121,160,244,10,70,117,216,109, +109,13,12,218,184,57,234,208,218,12,120,153,103,75,121,2, +213,84,231,220,0,180,65,115,183,145,117,122,76,51,172,165, +2,97,21,148,107,145,193,59,63,132,61,208,120,45,38,56, +206,147,160,46,171,239,172,17,67,18,162,5,30,235,141,8, +147,33,63,177,109,185,77,169,15,168,159,170,150,63,212,60, +101,42,108,150,190,197,38,231,63,48,124,163,207,188,83,66, +130,160,12,139,169,142,185,133,40,131,99,62,33,111,176,216, +235,12,25,137,163,42,237,135,164,71,51,187,213,45,118,57, +123,193,225,158,45,228,25,86,82,137,49,10,192,20,204,232, +20,159,216,183,204,164,213,19,150,70,69,217,30,95,204,123, +36,176,74,203,33,138,225,12,13,201,138,62,253,174,21,7, +90,174,81,70,198,232,0,223,241,163,220,141,100,83,255,83, +193,178,174,142,183,101,52,141,187,162,92,143,76,214,253,113, +228,164,134,35,53,21,57,187,193,109,95,45,107,232,80,222, +68,241,157,61,226,88,74,20,208,41,61,129,105,154,117,109, +60,28,187,137,237,203,101,203,125,74,92,80,189,117,33,252, +128,247,121,112,244,167,151,53,118,8,107,160,208,74,12,81, +8,39,96,76,6,252,204,55,229,60,4,58,168,247,42,64, +87,244,235,87,169,58,248,246,159,18,22,68,109,92,28,125, +233,109,12,29,200,187,44,188,155,195,14,107,173,0,80,1, +181,82,65,176,134,11,181,71,17,155,147,15,222,255,65,224, +135,190,231,6,161,29,152,186,153,238,218,115,136,96,24,71, +65,154,38,93,159,79,199,235,50,249,246,157,50,18,70,69, +216,14,93,205,111,102,185,90,217,32,191,179,69,60,79,139, +42,190,183,7,20,79,217,10,31,229,111,52,153,251,139,72, +159,101,103,189,24,241,32,237,147,228,110,39,171,252,156,54, +80,110,69,138,46,252,159,7,70,111,120,88,119,197,185,22, +24,172,241,66,204,65,132,199,112,131,214,110,64,219,52,251, +218,89,40,54,50,79,151,234,135,171,183,45,180,25,243,2, +201,149,206,194,177,153,248,186,94,158,88,181,228,33,215,49, +179,80,109,116,156,47,193,77,94,127,73,105,6,180,76,163, +173,156,145,32,42,227,102,168,75,234,51,234,196,154,37,108, +137,78,250,57,107,192,208,140,108,209,207,95,99,138,96,28, +7,73,158,118,85,186,15,143,239,230,177,211,88,42,20,22, +73,189,70,17,153,179,11,220,215,197,242,167,154,229,108,5, +143,250,182,154,198,92,65,172,70,50,169,247,40,96,83,246, +195,211,187,26,220,244,245,182,132,38,97,95,52,251,219,73, +42,55,38,13,158,250,149,170,130,127,253,40,117,3,221,214, +215,208,162,140,143,225,7,189,223,129,162,43,255,165,161,81, +89,54,215,31,83,14,67,44,66,122,32,243,114,201,114,190, +2,87,117,251,93,41,46,176,94,139,8,158,241,37,188,137, +227,43,121,197,165,214,33,176,65,123,55,129,125,218,92,121, +44,53,10,201,132,222,225,160,205,155,39,78,173,72,208,149, +253,242,212,170,4,31,249,175,13,133,75,178,179,95,156,122, +145,226,11,123,167,129,84,75,28,82,25,49,35,81,84,231, +221,16,182,64,103,245,152,101,104,77,6,254,236,51,231,20, +128,40,136,211,40,42,243,102,137,91,170,18,126,196,187,52, +60,170,219,238,90,115,128,225,24,77,224,158,46,212,31,85, +110,79,42,58,246,23,147,30,207,204,82,181,240,97,254,37, +163,121,220,52,245,58,69,38,238,174,50,119,22,137,189,202, +208,153,60,250,218,91,8,50,48,103,19,248,167,143,181,71, +16,139,145,14,202,189,72,240,149,191,210,84,232,44,30,187, +141,173,195,97,155,117,111,28,24,185,161,105,217,69,239,127, +32,248,194,223,121,34,212,6,197,93,86,222,73,33,135,48, +6,2,44,196,26,36,116,10,79,228,218,102,216,75,13,67, +42,34,118,38,139,254,254,18,210,4,233,153,76,250,61,43, +200,212,220,100,244,143,23,103,94,40,57,194,81,152,38,89, +223,71,195,187,58,220,182,213,54,198,14,96,29,22,91,157, +99,3,241,22,141,252,210,214,200,32,157,147,3,30,231,77, +16,159,209,39,222,173,97,65,213,214,199,208,131,156,207,192, +147,189,254,144,242,8,106,177,194,73,25,7,67,62,98,95, +50,155,215,79,82,187,17,109,242,252,43,70,53,216,233,45, +13,137,138,186,189,174,144,87,88,42,21,6,75,188,82,83, +144,163,25,221,226,151,187,150,28,228,120,70,150,232,165,143, +177,7,24,143,193,6,239,253,0,244,65,247,247,145,240,42, +78,183,232,229,143,53,71,24,10,145,4,107,185,64,121,21, +165,123,240,240,239,30,49,44,161,74,232,17,206,194,176,137, +250,187,74,220,81,165,246,32,226,99,250,97,235,117,136,108, +216,95,77,106,62,50,95,151,203,151,235,150,185,180,56,226, +82,234,0,218,161,169,217,201,46,127,175,9,196,83,180,226, +67,251,51,201,244,222,6,208,13,125,203,77,74,63,96,125, +22,157,253,227,196,137,21,75,154,50,29,182,91,215,194,131, +185,159,136,182,121,246,148,163,16,77,240,158,15,196,95,116, +250,79,11,43,166,52,6,10,172,212,18,132,100,64,207,116, +210,206,73,1,135,114,38,130,110,236,27,102,86,170,9,206, +243,160,232,203,111,107,105,64,212,196,229,213,149,246,66,194, +161,152,201,168,31,171,142,188,213,34,134,39,116,13,63,234, +221,10,22,117,125,61,45,169,200,216,29,108,250,126,27,74, +151,224,39,191,189,165,32,65,83,182,195,87,251,26,89,164, +247,50,192,102,236,11,102,119,186,73,239,103,160,201,218,63, +72,252,84,183,220,165,228,1,215,115,147,208,47,92,157,109, +227,237,24,85,96,175,54,52,46,139,238,254,51,194,68,200, +13,76,219,44,123,235,65,200,7,236,207,38,243,127,25,104, +179,230,13,19,43,151,36,103,59,120,245,167,149,21,114,10, +67,36,194,106,40,83,98,131,242,46,10,255,228,177,215,24, +34,16,70,65,152,6,89,157,103,67,249,18,221,244,247,150, +128,36,73,219,38,219,255,75,64,147,180,111,146,249,189,44, +176,91,219,2,155,181,111,144,217,185,46,152,223,201,34,191, +183,5,52,75,219,34,155,247,79,16,155,145,47,218,253,105, +100,149,158,195,4,203,185,10,216,149,237,242,245,186,68,62, +109,175,44,148,27,145,38,75,255,98,209,211,159,90,150,208, +37,252,137,103,107,121,64,245,212,165,244,1,246,99,211,241, +187,92,188,124,179,206,141,65,3,183,118,5,186,170,223,175, +66,117,209,253,127,4,184,136,251,169,104,217,71,207,123,34, +208,70,205,89,6,214,108,97,207,52,210,74,9,1,2,34, +36,6,42,172,150,50,4,38,104,206,54,240,110,15,43,174, +180,22,2,12,196,88,4,244,72,103,229,152,68,120,13,39, +106,236,18,246,68,163,189,156,176,48,106,194,242,168,106,251, +99,201,81,142,70,116,201,127,110,24,90,145,161,59,249,228, +189,23,0,46,224,94,46,88,222,85,225,190,44,182,59,215, +4,227,57,88,240,181,191,144,116,104,110,54,186,207,143,99, +39,177,92,169,44,152,219,137,42,187,231,13,17,11,147,38, +79,191,106,213,131,151,127,214,152,33,40,193,66,174,97,70, +165,216,192,188,77,162,191,190,148,54,64,110,100,154,110,221, +11,7,103,126,40,123,226,209,218,14,88,157,101,99,253,16, +245,112,229,182,164,38,35,127,180,185,243,72,104,21,134,75, +180,211,83,154,2,29,213,107,23,161,63,184,252,187,70,28, +73,169,6,56,141,163,34,109,151,172,231,35,241,85,189,126, +145,234,139,107,175,33,68,1,156,194,17,153,178,27,222,214, +209,176,174,138,247,109,48,221,179,135,28,199,72,2,181,84, +33,188,128,115,57,112,113,247,149,177,50,72,230,244,130,198, +109,81,205,119,230,136,66,57,17,97,51,244,37,183,57,245, +32,229,19,244,102,135,187,182,28,166,88,198,212,192,164,205, +147,167,94,165,232,192,223,125,98,220,2,149,85,115,158,1, +37,83,120,35,199,52,194,74,40,17,66,3,176,6,11,189, +198,17,145,50,11,214,118,193,250,46,26,255,197,161,151,57, +182,16,103,80,200,37,204,137,4,91,185,35,73,213,198,199, +241,147,220,238,84,147,156,239,192,209,157,126,210,218,9,40, +147,98,15,51,46,133,14,226,61,26,216,181,237,176,213,58, +6,22,108,237,14,52,93,187,15,141,207,226,179,251,220,56, +52,50,75,215,226,131,251,191,8,244,81,247,214,129,176,11, +218,183,201,244,223,22,210,12,105,137,68,90,45,97,72,68, +212,204,101,197,157,86,82,136,33,8,193,0,142,225,4,141, +217,130,158,237,228,149,151,82,6,192,12,76,217,12,127,233, +105,76,21,204,235,36,153,219,139,10,191,229,37,149,25,179, +2,77,213,206,71,225,155,124,254,30,19,12,231,104,64,215, +244,227,214,169,48,89,242,151,155,150,94,196,248,4,190,233, +231,173,17,65,50,166,7,54,111,159,40,183,35,85,21,255, +219,65,170,39,46,173,142,176,21,58,138,215,108,98,255,50, +209,118,207,26,50,20,39,89,220,119,197,184,6,26,173,229, +0,197,81,150,198,69,209,159,95,198,218,32,184,195,75,59, +35,69,20,206,201,0,159,241,39,156,141,225,3,253,215,133, +242,35,218,229,233,85,141,126,242,218,75,8,19,32,39,50, +108,167,174,164,23,51,30,133,109,210,253,121,100,180,142,131, +37,95,185,43,201,197,206,103,225,217,92,126,92,59,13,165, +74,224,145,222,202,16,153,176,59,218,212,249,52,188,170,211, +111,90,121,33,229,16,196,96,132,135,112,7,150,110,197,139, +54,127,158,25,165,98,96,195,246,234,66,251,49,233,240,220, +46,84,31,93,239,79,32,155,242,31,26,158,213,101,246,173, +51,97,116,132,175,240,85,190,78,151,233,183,173,180,17,114, +2,195,52,202,202,56,25,226,19,250,134,155,181,110,128,219, +184,58,218,214,217,48,190,130,87,125,122,93,35,143,180,86, +2,136,132,88,129,164,74,227,161,216,201,44,95,171,11,236, +215,166,194,103,249,89,109,102,188,10,211,37,251,249,105,108, +21,142,203,164,219,243,138,72,157,69,99,191,48,117,50,205, +183,230,4,131,57,158,144,53,120,232,119,174,8,214,113,177, +244,41,118,49,251,209,233,62,61,174,153,198,90,33,160,64, +74,37,192,72,12,85,72,47,100,28,14,217,140,127,225,232, +76,31,109,239,44,16,91,145,163,27,253,230,149,147,18,14, +196,92,68,252,76,55,237,189,4,48,9,243,34,201,215,238, +66,243,177,249,248,124,62,30,159,205,231,231,177,209,120,46, +22,62,205,175,102,53,155,217,175,78,181,201,241,143,28,215, +72,35,165,20,0,40,128,82,40,32,82,98,129,210,42,8, +215,96,163,247,60,32,122,226,211,250,10,90,181,225,113,221, +52,247,26,65,36,198,42,32,87,50,139,215,110,66,251,48, +249,242,221,58,22,22,77,253,78,21,201,187,46,156,159,193, +38,239,191,32,116,3,223,246,211,210,138,8,157,193,35,191, +181,37,48,73,243,166,137,215,107,18,241,53,189,184,241,106, +76,19,172,231,34,225,87,188,106,211,227,155,121,174,20,22, +72,173,68,16,141,241,2,204,197,196,199,245,211,212,234,4, +155,185,175,136,213,73,54,247,31,17,46,195,110,106,123,98, +209,210,143,88,151,196,103,245,153,117,106,76,18,188,229,35, +245,21,181,122,193,226,174,43,231,37,144,73,185,7,9,159, +226,23,187,158,157,228,114,231,146,224,44,15,171,174,188,151, +2,6,101,92,12,125,200,125,76,60,92,187,13,173,203,224, +155,127,206,24,16,48,33,115,112,225,247,188,32,114,99,211, +240,171,94,189,104,241,199,157,83,2,130,36,76,139,44,222, +187,1,108,195,238,106,115,227,209,216,46,92,159,77,231,239, +48,209,114,143,18,54,68,47,124,156,63,193,108,78,63,104, +253,6,149,93,243,142,9,133,67,50,163,87,60,106,219,98, +155,115,15,16,30,193,45,94,185,41,233,193,204,79,101,203, +124,90,94,81,169,55,40,236,146,246,76,34,189,150,17,52, +98,75,114,178,195,95,123,10,81,4,231,120,64,246,228,163, +247,61,48,120,227,199,184,3,74,167,224,68,143,125,198,156, +64,48,133,51,50,68,39,252,140,55,97,124,4,191,248,245, +174,4,23,121,191,5,37,91,248,51,207,148,210,0,168,129, +74,171,33,76,129,140,202,177,137,248,155,78,222,121,33,228, +0,198,97,144,197,121,23,132,111,240,217,127,78,24,24,177, +33,121,209,229,255,53,160,104,202,119,232,104,94,55,201,253, +78,20,217,185,47,136,221,200,54,253,190,21,38,74,238,112, +210,198,201,17,143,210,54,200,238,124,19,206,199,224,131,255, +255,}; diff --git a/MCUME_pico/pico5200/pico5200.cpp b/MCUME_pico/pico5200/pico5200.cpp new file mode 100644 index 0000000..a951858 --- /dev/null +++ b/MCUME_pico/pico5200/pico5200.cpp @@ -0,0 +1,129 @@ +#include "pico.h" +#include "pico/stdlib.h" + +extern "C" { + #include "iopins.h" + #include "emuapi.h" +} +#include "keyboard_osd.h" +#include "vga_t_dma.h" +extern "C" { +#include "atari5200.h" +} +#include + + +TFT_T_DMA tft; +static int skip=0; + +int main(void) { + stdio_init_all(); + tft.begin(VGA_MODE_320x240); + emu_init(); + while (true) { + if (menuActive()) { + uint16_t bClick = emu_DebounceLocalKeys(); + int action = handleMenu(bClick); + char * filename = menuSelection(); + if (action == ACTION_RUNTFT) { + toggleMenu(false); + emu_start(); + emu_Init(filename); + tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) ); + tft.startDMA(); + } + tft.waitSync(); + } + else { + emu_Step(); + uint16_t bClick = emu_DebounceLocalKeys(); + emu_Input(bClick); + } + //int c = getchar_timeout_us(0); + //switch (c) { + // case ' ': + // printf("test: %d\n", 1); + // break; + //} + } +} + +static unsigned char palette8[PALETTE_SIZE]; + +void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index) +{ + if (index> 3); + i &= 7; + byte = (UBYTE) ((ptr[0] >> i) + (ptr[1] << (8 - i))); + } + } + break; + case POKEY_OFFSET_SERIN: + byte = POKEY_SERIN; +#ifdef DEBUG3 + printf("SERIO: SERIN read, bytevalue %02x\n", POKEY_SERIN); +#endif +#ifdef SERIO_SOUND + POKEYSND_UpdateSerio(0,byte); +#endif + break; + case POKEY_OFFSET_IRQST: + byte = POKEY_IRQST; + break; + case POKEY_OFFSET_SKSTAT: +#if SKIP + byte = POKEY_SKSTAT + (CASSETTE_IOLineStatus() << 4); +#else + byte = INPUT_handle_skstat(addr); +// byte = POKEY_SKSTAT; +#endif +#ifdef VOICEBOX + if (VOICEBOX_enabled) { + byte = POKEY_SKSTAT + (VOTRAXSND_busy << 4); + } +#endif + break; + } + + return byte; +} + +static void Update_Counter(int chan_mask); + +static int POKEY_siocheck(void) +{ + return (((POKEY_AUDF[POKEY_CHAN3] == 0x28 || POKEY_AUDF[POKEY_CHAN3] == 0x10 + || POKEY_AUDF[POKEY_CHAN3] == 0x08 || POKEY_AUDF[POKEY_CHAN3] == 0x0a) + && POKEY_AUDF[POKEY_CHAN4] == 0x00) /* intelligent peripherals speeds */ + || (POKEY_SKCTL & 0x78) == 0x28) /* cassette save mode */ + && (POKEY_AUDCTL[0] & 0x28) == 0x28; +} + +#ifndef SOUND_GAIN /* sound gain can be pre-defined in the configure/Makefile */ +#define SOUND_GAIN 4 +#endif + +#ifndef SOUND +#define POKEYSND_Update(addr, val, chip, gain) +#else +//#define POKEYSND_Update(addr, val, chip, gain) if (chip == 0) emu_sndPlaySound((chip*4)+addr, gain*16, val*16) +#endif + +void POKEY_PutByte(UWORD addr, UBYTE byte) +{ +#ifdef STEREO_SOUND + addr &= POKEYSND_stereo_enabled ? 0x1f : 0x0f; +#else + addr &= 0x0f; +#endif + switch (addr) { + case POKEY_OFFSET_AUDC1: + POKEY_AUDC[POKEY_CHAN1] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC1, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDC2: + POKEY_AUDC[POKEY_CHAN2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC2, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDC3: + POKEY_AUDC[POKEY_CHAN3] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC3, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDC4: + POKEY_AUDC[POKEY_CHAN4] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC4, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDCTL: + POKEY_AUDCTL[0] = byte; + + /* determine the base multiplier for the 'div by n' calculations */ + if (byte & POKEY_CLOCK_15) + POKEY_Base_mult[0] = POKEY_DIV_15; + else + POKEY_Base_mult[0] = POKEY_DIV_64; + + Update_Counter((1 << POKEY_CHAN1) | (1 << POKEY_CHAN2) | (1 << POKEY_CHAN3) | (1 << POKEY_CHAN4)); + POKEYSND_Update(POKEY_OFFSET_AUDCTL, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF1: + POKEY_AUDF[POKEY_CHAN1] = byte; + Update_Counter((POKEY_AUDCTL[0] & POKEY_CH1_CH2) ? ((1 << POKEY_CHAN2) | (1 << POKEY_CHAN1)) : (1 << POKEY_CHAN1)); + POKEYSND_Update(POKEY_OFFSET_AUDF1, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF2: + POKEY_AUDF[POKEY_CHAN2] = byte; + Update_Counter(1 << POKEY_CHAN2); + POKEYSND_Update(POKEY_OFFSET_AUDF2, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF3: + POKEY_AUDF[POKEY_CHAN3] = byte; + Update_Counter((POKEY_AUDCTL[0] & POKEY_CH3_CH4) ? ((1 << POKEY_CHAN4) | (1 << POKEY_CHAN3)) : (1 << POKEY_CHAN3)); + POKEYSND_Update(POKEY_OFFSET_AUDF3, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF4: + POKEY_AUDF[POKEY_CHAN4] = byte; + Update_Counter(1 << POKEY_CHAN4); + POKEYSND_Update(POKEY_OFFSET_AUDF4, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_IRQEN: + POKEY_IRQEN = byte; +#ifdef DEBUG1 + printf("WR: IRQEN = %x, PC = %x\n", POKEY_IRQEN, PC); +#endif + POKEY_IRQST |= ~byte & 0xf7; /* Reset disabled IRQs except XMTDONE */ +#if SKIP + if ((~POKEY_IRQST & POKEY_IRQEN) == 0 && PBI_IRQ == 0 && PIA_IRQ == 0) +#else + if ((~POKEY_IRQST & POKEY_IRQEN) == 0) +#endif + { + CPU_IRQ = 0; + } + else { + CPU_GenerateIRQ(); + } + break; + case POKEY_OFFSET_SKRES: + POKEY_SKSTAT |= 0xe0; + break; + case POKEY_OFFSET_POTGO: + if (!(POKEY_SKCTL & 4)) + pot_scanline = 0; /* slow pot mode */ + break; + case POKEY_OFFSET_SEROUT: +#ifdef VOICEBOX + VOICEBOX_SEROUTPutByte(byte); +#endif +#if SKIP + if ((POKEY_SKCTL & 0x70) == 0x20 && POKEY_siocheck()) + SIO_PutByte(byte); +#endif + /* check if cassette 2-tone mode has been enabled */ + if ((POKEY_SKCTL & 0x08) == 0x00) { + /* intelligent device */ +#if SKIP + POKEY_DELAYED_SEROUT_IRQ = SIO_SEROUT_INTERVAL; +#endif + POKEY_IRQST |= 0x08; +#if SKIP + POKEY_DELAYED_XMTDONE_IRQ = SIO_XMTDONE_INTERVAL; +#endif + } + else { + /* cassette */ + /* some savers patch the cassette baud rate, so we evaluate it here */ + /* scanlines per second*10 bit*audiofrequency/(1.79 MHz/2) */ + POKEY_DELAYED_SEROUT_IRQ = 312*50*10*(POKEY_AUDF[POKEY_CHAN3] + POKEY_AUDF[POKEY_CHAN4]*0x100)/895000; + /* safety check */ + if (POKEY_DELAYED_SEROUT_IRQ >= 3) { + POKEY_IRQST |= 0x08; + POKEY_DELAYED_XMTDONE_IRQ = 2*POKEY_DELAYED_SEROUT_IRQ - 2; + } + else { + POKEY_DELAYED_SEROUT_IRQ = 0; + POKEY_DELAYED_XMTDONE_IRQ = 0; + } + }; +#ifdef SERIO_SOUND + POKEYSND_UpdateSerio(1, byte); +#endif + break; + case POKEY_OFFSET_STIMER: + POKEY_DivNIRQ[POKEY_CHAN1] = POKEY_DivNMax[POKEY_CHAN1]; + POKEY_DivNIRQ[POKEY_CHAN2] = POKEY_DivNMax[POKEY_CHAN2]; + POKEY_DivNIRQ[POKEY_CHAN4] = POKEY_DivNMax[POKEY_CHAN4]; + POKEYSND_Update(POKEY_OFFSET_STIMER, byte, 0, SOUND_GAIN); +#ifdef DEBUG1 + printf("WR: STIMER = %x\n", byte); +#endif + break; + case POKEY_OFFSET_SKCTL: +#ifdef VOICEBOX + VOICEBOX_SKCTLPutByte(byte); +#endif + POKEY_SKCTL = byte; + POKEYSND_Update(POKEY_OFFSET_SKCTL, byte, 0, SOUND_GAIN); + if (byte & 4) + pot_scanline = 228; /* fast pot mode - return results immediately */ + if ((byte & 0x03) == 0) { + /* POKEY reset. */ + /* Stop serial IO. */ + POKEY_DELAYED_SERIN_IRQ = 0; + POKEY_DELAYED_SEROUT_IRQ = 0; + POKEY_DELAYED_XMTDONE_IRQ = 0; +#if SKIP + CASSETTE_ResetPOKEY(); +#endif + /* TODO other registers should also be reset. */ + } + break; +#ifdef STEREO_SOUND + case POKEY_OFFSET_AUDC1 + POKEY_OFFSET_POKEY2: + POKEY_AUDC[POKEY_CHAN1 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC1, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDC2 + POKEY_OFFSET_POKEY2: + POKEY_AUDC[POKEY_CHAN2 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC2, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDC3 + POKEY_OFFSET_POKEY2: + POKEY_AUDC[POKEY_CHAN3 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC3, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDC4 + POKEY_OFFSET_POKEY2: + POKEY_AUDC[POKEY_CHAN4 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC4, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDCTL + POKEY_OFFSET_POKEY2: + POKEY_AUDCTL[1] = byte; + /* determine the base multiplier for the 'div by n' calculations */ + if (byte & POKEY_CLOCK_15) + POKEY_Base_mult[1] = POKEY_DIV_15; + else + POKEY_Base_mult[1] = POKEY_DIV_64; + + POKEYSND_Update(POKEY_OFFSET_AUDCTL, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF1 + POKEY_OFFSET_POKEY2: + POKEY_AUDF[POKEY_CHAN1 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDF1, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF2 + POKEY_OFFSET_POKEY2: + POKEY_AUDF[POKEY_CHAN2 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDF2, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF3 + POKEY_OFFSET_POKEY2: + POKEY_AUDF[POKEY_CHAN3 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDF3, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF4 + POKEY_OFFSET_POKEY2: + POKEY_AUDF[POKEY_CHAN4 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDF4, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_STIMER + POKEY_OFFSET_POKEY2: + POKEYSND_Update(POKEY_OFFSET_STIMER, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_SKCTL + POKEY_OFFSET_POKEY2: + POKEYSND_Update(POKEY_OFFSET_SKCTL, byte, 1, SOUND_GAIN); + break; +#endif + } +} + +int POKEY_Initialise(void) +{ + int i; + ULONG reg; + + /* Initialise Serial Port Interrupts */ + POKEY_DELAYED_SERIN_IRQ = 0; + POKEY_DELAYED_SEROUT_IRQ = 0; + POKEY_DELAYED_XMTDONE_IRQ = 0; + + POKEY_KBCODE = 0xff; + POKEY_SERIN = 0x00; /* or 0xff ? */ + POKEY_IRQST = 0xff; + POKEY_IRQEN = 0x00; + POKEY_SKSTAT = 0xef; + POKEY_SKCTL = 0x00; + + for (i = 0; i < (POKEY_MAXPOKEYS * 4); i++) { + POKEY_AUDC[i] = 0; + POKEY_AUDF[i] = 0; + } + + for (i = 0; i < POKEY_MAXPOKEYS; i++) { + POKEY_AUDCTL[i] = 0; + POKEY_Base_mult[i] = POKEY_DIV_64; + } + + for (i = 0; i < 4; i++) + POKEY_DivNIRQ[i] = POKEY_DivNMax[i] = 0; + + pot_scanline = 0; + +#if SKIP + /* initialise poly9_lookup */ + reg = 0x1ff; + for (i = 0; i < POKEY_POLY9_SIZE; i++) { + reg = ((((reg >> 5) ^ reg) & 1) << 8) + (reg >> 1); + POKEY_poly9_lookup[i] = (UBYTE) reg; + } + /* initialise poly17_lookup */ + reg = 0x1ffff; + for (i = 0; i < POKEY_POLY17_SIZE; i++) { + reg = ((((reg >> 5) ^ reg) & 0xff) << 9) + (reg >> 8); + POKEY_poly17_lookup[i] = (UBYTE) (reg >> 1); + } +#endif + +#ifndef BASIC +#if SKIP + if (INPUT_Playingback()) { + random_scanline_counter = INPUT_PlaybackInt(); + } + else +#endif +#endif + { + random_scanline_counter = +#ifdef HAVE_WINDOWS_H + GetTickCount() % POKEY_POLY17_SIZE; +#elif defined(HAVE_TIME) + time(NULL) % POKEY_POLY17_SIZE; +#else + 0; +#endif + } +#ifndef BASIC +#if SKIP + if (INPUT_Recording()) { + INPUT_RecordInt(random_scanline_counter); + } +#endif +#endif + + return TRUE; +} + +void POKEY_Frame(void) +{ + random_scanline_counter %= (POKEY_AUDCTL[0] & POKEY_POLY9) ? POKEY_POLY9_SIZE : POKEY_POLY17_SIZE; +} + +/*************************************************************************** + ** Generate POKEY Timer IRQs if required ** + ** called on a per-scanline basis, not very precise, but good enough ** + ** for most applications ** + ***************************************************************************/ + +void POKEY_Scanline(void) +{ +#ifdef POKEY_UPDATE + pokey_update(); +#endif + +#ifdef VOL_ONLY_SOUND + POKEYSND_UpdateVolOnly(); +#endif + +#ifndef BASIC + INPUT_Scanline(); /* Handle Amiga and ST mice. */ + /* It's not a part of POKEY emulation, */ + /* but it looks to be the best place to put it. */ +#endif + + /* on nonpatched i/o-operation, enable the cassette timing */ +#if SKIP + if (!ESC_enable_sio_patch) { + if (CASSETTE_AddScanLine()) + POKEY_DELAYED_SERIN_IRQ = 1; + } +#endif + if ((POKEY_SKCTL & 0x03) == 0) + /* Don't process timers when POKEY is in reset mode. */ + return; + + if (pot_scanline < 228) + pot_scanline++; + + random_scanline_counter += ANTIC_LINE_C; + + if (POKEY_DELAYED_SERIN_IRQ > 0) { + if (--POKEY_DELAYED_SERIN_IRQ == 0) { + /* Load a byte to SERIN - even when the IRQ is disabled. */ +#if SKIP + POKEY_SERIN = SIO_GetByte(); +#else +// POKEY_SERIN = 0; +#endif + if (POKEY_IRQEN & 0x20) { + if (POKEY_IRQST & 0x20) { + POKEY_IRQST &= 0xdf; +#ifdef DEBUG2 + printf("SERIO: SERIN Interrupt triggered, bytevalue %02x\n", POKEY_SERIN); +#endif + } + else { + POKEY_SKSTAT &= 0xdf; +#ifdef DEBUG2 + printf("SERIO: SERIN Interrupt triggered, bytevalue %02x\n", POKEY_SERIN); +#endif + } + CPU_GenerateIRQ(); + } +#ifdef DEBUG2 + else { + printf("SERIO: SERIN Interrupt missed, bytevalue %02x\n", POKEY_SERIN); + } +#endif + } + } + + if (POKEY_DELAYED_SEROUT_IRQ > 0) { + if (--POKEY_DELAYED_SEROUT_IRQ == 0) { + if (POKEY_IRQEN & 0x10) { +#ifdef DEBUG2 + printf("SERIO: SEROUT Interrupt triggered\n"); +#endif + POKEY_IRQST &= 0xef; + CPU_GenerateIRQ(); + } +#ifdef DEBUG2 + else { + printf("SERIO: SEROUT Interrupt missed\n"); + } +#endif + } + } + + if (POKEY_DELAYED_XMTDONE_IRQ > 0) + if (--POKEY_DELAYED_XMTDONE_IRQ == 0) { + POKEY_IRQST &= 0xf7; + if (POKEY_IRQEN & 0x08) { +#ifdef DEBUG2 + printf("SERIO: XMTDONE Interrupt triggered\n"); +#endif + CPU_GenerateIRQ(); + } +#ifdef DEBUG2 + else + printf("SERIO: XMTDONE Interrupt missed\n"); +#endif + } + + if ((POKEY_DivNIRQ[POKEY_CHAN1] -= ANTIC_LINE_C) < 0 ) { + POKEY_DivNIRQ[POKEY_CHAN1] += POKEY_DivNMax[POKEY_CHAN1]; + if (POKEY_IRQEN & 0x01) { + POKEY_IRQST &= 0xfe; + CPU_GenerateIRQ(); + } + } + + if ((POKEY_DivNIRQ[POKEY_CHAN2] -= ANTIC_LINE_C) < 0 ) { + POKEY_DivNIRQ[POKEY_CHAN2] += POKEY_DivNMax[POKEY_CHAN2]; + if (POKEY_IRQEN & 0x02) { + POKEY_IRQST &= 0xfd; + CPU_GenerateIRQ(); + } + } + + if ((POKEY_DivNIRQ[POKEY_CHAN4] -= ANTIC_LINE_C) < 0 ) { + POKEY_DivNIRQ[POKEY_CHAN4] += POKEY_DivNMax[POKEY_CHAN4]; + if (POKEY_IRQEN & 0x04) { + POKEY_IRQST &= 0xfb; + CPU_GenerateIRQ(); + } + } +} + +/*****************************************************************************/ +/* Module: Update_Counter() */ +/* Purpose: To process the latest control values stored in the AUDF, AUDC, */ +/* and AUDCTL registers. It pre-calculates as much information as */ +/* possible for better performance. This routine has been added */ +/* here again as I need the precise frequency for the pokey timers */ +/* again. The pokey emulation is therefore somewhat sub-optimal */ +/* since the actual pokey emulation should grab the frequency values */ +/* directly from here instead of calculating them again. */ +/* */ +/* Author: Ron Fries,Thomas Richter */ +/* Date: March 27, 1998 */ +/* */ +/* Inputs: chan_mask: Channel mask, one bit per channel. */ +/* The channels that need to be updated */ +/* */ +/* Outputs: Adjusts local globals - no return value */ +/* */ +/*****************************************************************************/ + +static void Update_Counter(int chan_mask) +{ + +/************************************************************/ +/* As defined in the manual, the exact Div_n_cnt values are */ +/* different depending on the frequency and resolution: */ +/* 64 kHz or 15 kHz - AUDF + 1 */ +/* 1 MHz, 8-bit - AUDF + 4 */ +/* 1 MHz, 16-bit - AUDF[CHAN1]+256*AUDF[CHAN2] + 7 */ +/************************************************************/ + + /* only reset the channels that have changed */ + + if (chan_mask & (1 << POKEY_CHAN1)) { + /* process channel 1 frequency */ + if (POKEY_AUDCTL[0] & POKEY_CH1_179) + POKEY_DivNMax[POKEY_CHAN1] = POKEY_AUDF[POKEY_CHAN1] + 4; + else + POKEY_DivNMax[POKEY_CHAN1] = (POKEY_AUDF[POKEY_CHAN1] + 1) * POKEY_Base_mult[0]; + if (POKEY_DivNMax[POKEY_CHAN1] < ANTIC_LINE_C) + POKEY_DivNMax[POKEY_CHAN1] = ANTIC_LINE_C; + } + + if (chan_mask & (1 << POKEY_CHAN2)) { + /* process channel 2 frequency */ + if (POKEY_AUDCTL[0] & POKEY_CH1_CH2) { + if (POKEY_AUDCTL[0] & POKEY_CH1_179) + POKEY_DivNMax[POKEY_CHAN2] = POKEY_AUDF[POKEY_CHAN2] * 256 + POKEY_AUDF[POKEY_CHAN1] + 7; + else + POKEY_DivNMax[POKEY_CHAN2] = (POKEY_AUDF[POKEY_CHAN2] * 256 + POKEY_AUDF[POKEY_CHAN1] + 1) * POKEY_Base_mult[0]; + } + else + POKEY_DivNMax[POKEY_CHAN2] = (POKEY_AUDF[POKEY_CHAN2] + 1) * POKEY_Base_mult[0]; + if (POKEY_DivNMax[POKEY_CHAN2] < ANTIC_LINE_C) + POKEY_DivNMax[POKEY_CHAN2] = ANTIC_LINE_C; + } + + if (chan_mask & (1 << POKEY_CHAN4)) { + /* process channel 4 frequency */ + if (POKEY_AUDCTL[0] & POKEY_CH3_CH4) { + if (POKEY_AUDCTL[0] & POKEY_CH3_179) + POKEY_DivNMax[POKEY_CHAN4] = POKEY_AUDF[POKEY_CHAN4] * 256 + POKEY_AUDF[POKEY_CHAN3] + 7; + else + POKEY_DivNMax[POKEY_CHAN4] = (POKEY_AUDF[POKEY_CHAN4] * 256 + POKEY_AUDF[POKEY_CHAN3] + 1) * POKEY_Base_mult[0]; + } + else + POKEY_DivNMax[POKEY_CHAN4] = (POKEY_AUDF[POKEY_CHAN4] + 1) * POKEY_Base_mult[0]; + if (POKEY_DivNMax[POKEY_CHAN4] < ANTIC_LINE_C) + POKEY_DivNMax[POKEY_CHAN4] = ANTIC_LINE_C; + } +} + +#ifndef BASIC + +void POKEY_StateSave(void) +{ + int shift_key = 0; + int keypressed = 0; + + StateSav_SaveUBYTE(&POKEY_KBCODE, 1); + StateSav_SaveUBYTE(&POKEY_IRQST, 1); + StateSav_SaveUBYTE(&POKEY_IRQEN, 1); + StateSav_SaveUBYTE(&POKEY_SKCTL, 1); + + StateSav_SaveINT(&shift_key, 1); + StateSav_SaveINT(&keypressed, 1); + StateSav_SaveINT(&POKEY_DELAYED_SERIN_IRQ, 1); + StateSav_SaveINT(&POKEY_DELAYED_SEROUT_IRQ, 1); + StateSav_SaveINT(&POKEY_DELAYED_XMTDONE_IRQ, 1); + + StateSav_SaveUBYTE(&POKEY_AUDF[0], 4); + StateSav_SaveUBYTE(&POKEY_AUDC[0], 4); + StateSav_SaveUBYTE(&POKEY_AUDCTL[0], 1); + + StateSav_SaveINT(&POKEY_DivNIRQ[0], 4); + StateSav_SaveINT(&POKEY_DivNMax[0], 4); + StateSav_SaveINT(&POKEY_Base_mult[0], 1); +} + +void POKEY_StateRead(void) +{ + int i; + int shift_key; + int keypressed; + + StateSav_ReadUBYTE(&POKEY_KBCODE, 1); + StateSav_ReadUBYTE(&POKEY_IRQST, 1); + StateSav_ReadUBYTE(&POKEY_IRQEN, 1); + StateSav_ReadUBYTE(&POKEY_SKCTL, 1); + + StateSav_ReadINT(&shift_key, 1); + StateSav_ReadINT(&keypressed, 1); + StateSav_ReadINT(&POKEY_DELAYED_SERIN_IRQ, 1); + StateSav_ReadINT(&POKEY_DELAYED_SEROUT_IRQ, 1); + StateSav_ReadINT(&POKEY_DELAYED_XMTDONE_IRQ, 1); + + StateSav_ReadUBYTE(&POKEY_AUDF[0], 4); + StateSav_ReadUBYTE(&POKEY_AUDC[0], 4); + StateSav_ReadUBYTE(&POKEY_AUDCTL[0], 1); + for (i = 0; i < 4; i++) { + POKEY_PutByte((UWORD) (POKEY_OFFSET_AUDF1 + i * 2), POKEY_AUDF[i]); + POKEY_PutByte((UWORD) (POKEY_OFFSET_AUDC1 + i * 2), POKEY_AUDC[i]); + } + POKEY_PutByte(POKEY_OFFSET_AUDCTL, POKEY_AUDCTL[0]); + + StateSav_ReadINT(&POKEY_DivNIRQ[0], 4); + StateSav_ReadINT(&POKEY_DivNMax[0], 4); + StateSav_ReadINT(&POKEY_Base_mult[0], 1); +} + +#endif diff --git a/MCUME_pico/pico5200/pokey.h b/MCUME_pico/pico5200/pokey.h new file mode 100644 index 0000000..b9a0c29 --- /dev/null +++ b/MCUME_pico/pico5200/pokey.h @@ -0,0 +1,120 @@ +#ifndef POKEY_H_ +#define POKEY_H_ + + +#include "atari.h" + + +#define POKEY_OFFSET_AUDF1 0x00 +#define POKEY_OFFSET_AUDC1 0x01 +#define POKEY_OFFSET_AUDF2 0x02 +#define POKEY_OFFSET_AUDC2 0x03 +#define POKEY_OFFSET_AUDF3 0x04 +#define POKEY_OFFSET_AUDC3 0x05 +#define POKEY_OFFSET_AUDF4 0x06 +#define POKEY_OFFSET_AUDC4 0x07 +#define POKEY_OFFSET_AUDCTL 0x08 +#define POKEY_OFFSET_STIMER 0x09 +#define POKEY_OFFSET_SKRES 0x0a +#define POKEY_OFFSET_POTGO 0x0b +#define POKEY_OFFSET_SEROUT 0x0d +#define POKEY_OFFSET_IRQEN 0x0e +#define POKEY_OFFSET_SKCTL 0x0f + +#define POKEY_OFFSET_POT0 0x00 +#define POKEY_OFFSET_POT1 0x01 +#define POKEY_OFFSET_POT2 0x02 +#define POKEY_OFFSET_POT3 0x03 +#define POKEY_OFFSET_POT4 0x04 +#define POKEY_OFFSET_POT5 0x05 +#define POKEY_OFFSET_POT6 0x06 +#define POKEY_OFFSET_POT7 0x07 +#define POKEY_OFFSET_ALLPOT 0x08 +#define POKEY_OFFSET_KBCODE 0x09 +#define POKEY_OFFSET_RANDOM 0x0a +#define POKEY_OFFSET_SERIN 0x0d +#define POKEY_OFFSET_IRQST 0x0e +#define POKEY_OFFSET_SKSTAT 0x0f + +#define POKEY_OFFSET_POKEY2 0x10 /* offset to second pokey chip (STEREO expansion) */ + +#ifndef ASAP + +extern UBYTE POKEY_KBCODE; +extern UBYTE POKEY_IRQST; +extern UBYTE POKEY_IRQEN; +extern UBYTE POKEY_SKSTAT; +extern UBYTE POKEY_SKCTL; +extern int POKEY_DELAYED_SERIN_IRQ; +extern int POKEY_DELAYED_SEROUT_IRQ; +extern int POKEY_DELAYED_XMTDONE_IRQ; + +extern UBYTE POKEY_POT_input[8]; + +ULONG POKEY_GetRandomCounter(void); +void POKEY_SetRandomCounter(ULONG value); +UBYTE POKEY_GetByte(UWORD addr, int no_side_effects); +void POKEY_PutByte(UWORD addr, UBYTE byte); +int POKEY_Initialise(void); +void POKEY_Frame(void); +void POKEY_Scanline(void); +void POKEY_StateSave(void); +void POKEY_StateRead(void); + +#endif + +/* CONSTANT DEFINITIONS */ + +/* definitions for AUDCx (D201, D203, D205, D207) */ +#define POKEY_NOTPOLY5 0x80 /* selects POLY5 or direct CLOCK */ +#define POKEY_POLY4 0x40 /* selects POLY4 or POLY17 */ +#define POKEY_PURETONE 0x20 /* selects POLY4/17 or PURE tone */ +#define POKEY_VOL_ONLY 0x10 /* selects VOLUME OUTPUT ONLY */ +#define POKEY_VOLUME_MASK 0x0f /* volume mask */ + +/* definitions for AUDCTL (D208) */ +#define POKEY_POLY9 0x80 /* selects POLY9 or POLY17 */ +#define POKEY_CH1_179 0x40 /* selects 1.78979 MHz for Ch 1 */ +#define POKEY_CH3_179 0x20 /* selects 1.78979 MHz for Ch 3 */ +#define POKEY_CH1_CH2 0x10 /* clocks channel 1 w/channel 2 */ +#define POKEY_CH3_CH4 0x08 /* clocks channel 3 w/channel 4 */ +#define POKEY_CH1_FILTER 0x04 /* selects channel 1 high pass filter */ +#define POKEY_CH2_FILTER 0x02 /* selects channel 2 high pass filter */ +#define POKEY_CLOCK_15 0x01 /* selects 15.6999kHz or 63.9210kHz */ + +/* for accuracy, the 64kHz and 15kHz clocks are exact divisions of + the 1.79MHz clock */ +#define POKEY_DIV_64 28 /* divisor for 1.79MHz clock to 64 kHz */ +#define POKEY_DIV_15 114 /* divisor for 1.79MHz clock to 15 kHz */ + +/* the size (in entries) of the 4 polynomial tables */ +#define POKEY_POLY4_SIZE 0x000f +#define POKEY_POLY5_SIZE 0x001f +#define POKEY_POLY9_SIZE 511 //0x01ff +#define POKEY_POLY17_SIZE 16385//0x0001ffff + +#define POKEY_MAXPOKEYS 2 /* max number of emulated chips */ + +/* channel/chip definitions */ +#define POKEY_CHAN1 0 +#define POKEY_CHAN2 1 +#define POKEY_CHAN3 2 +#define POKEY_CHAN4 3 +#define POKEY_CHIP1 0 +#define POKEY_CHIP2 4 +#define POKEY_CHIP3 8 +#define POKEY_CHIP4 12 +#define POKEY_SAMPLE 127 + +/* structures to hold the 9 pokey control bytes */ +extern UBYTE POKEY_AUDF[4 * POKEY_MAXPOKEYS]; /* AUDFx (D200, D202, D204, D206) */ +extern UBYTE POKEY_AUDC[4 * POKEY_MAXPOKEYS]; /* AUDCx (D201, D203, D205, D207) */ +extern UBYTE POKEY_AUDCTL[POKEY_MAXPOKEYS]; /* AUDCTL (D208) */ + +extern int POKEY_DivNIRQ[4], POKEY_DivNMax[4]; +extern int POKEY_Base_mult[POKEY_MAXPOKEYS]; /* selects either 64Khz or 15Khz clock mult */ + +extern const UBYTE POKEY_poly9_lookup[POKEY_POLY9_SIZE]; +extern const UBYTE POKEY_poly17_lookup[POKEY_POLY17_SIZE]; + +#endif /* POKEY_H_ */ diff --git a/MCUME_pico/pico5200/pokeysnd.c b/MCUME_pico/pico5200/pokeysnd.c new file mode 100644 index 0000000..4b71ef2 --- /dev/null +++ b/MCUME_pico/pico5200/pokeysnd.c @@ -0,0 +1,1427 @@ +/* + * pokeysnd.c - POKEY sound chip emulation, v2.4 + * + * Copyright (C) 1996-1998 Ron Fries + * Copyright (C) 1998-2014 Atari800 development team (see DOC/CREDITS) + * + * This file is part of the Atari800 emulator project which emulates + * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. + * + * Atari800 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. + * + * Atari800 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 Atari800; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifdef skip +#include "config.h" +#include +#include + +#ifdef ASAP /* external project, see http://asap.sf.net */ +#include "asap_internal.h" +#else +#include "atari.h" +#ifndef __PLUS +#include "sndsave.h" +#else +#include "sound_win.h" +#endif +#endif +#include "mzpokeysnd.h" +#include "pokeysnd.h" +#if defined(PBI_XLD) || defined (VOICEBOX) +#include "votraxsnd.h" +#endif +#include "antic.h" +#include "gtia.h" +#include "util.h" +#endif + +#include "pokeysnd.h" +#if defined(PBI_XLD) || defined (VOICEBOX) +#include "votraxsnd.h" +#endif +#include "antic.h" +#include "gtia.h" + +#ifdef WORDS_UNALIGNED_OK +# define READ_U32(x) (*(ULONG *) (x)) +# define WRITE_U32(x, d) (*(ULONG *) (x) = (d)) +#else +# ifdef WORDS_BIGENDIAN +# define READ_U32(x) (((*(unsigned char *)(x)) << 24) | ((*((unsigned char *)(x) + 1)) << 16) | \ + ((*((unsigned char *)(x) + 2)) << 8) | ((*((unsigned char *)(x) + 3)))) +# define WRITE_U32(x, d) \ + { \ + ULONG i = d; \ + (*(unsigned char *) (x)) = (((i) >> 24) & 255); \ + (*((unsigned char *) (x) + 1)) = (((i) >> 16) & 255); \ + (*((unsigned char *) (x) + 2)) = (((i) >> 8) & 255); \ + (*((unsigned char *) (x) + 3)) = ((i) & 255); \ + } +# else +# define READ_U32(x) ((*(unsigned char *) (x)) | ((*((unsigned char *) (x) + 1)) << 8) | \ + ((*((unsigned char *) (x) + 2)) << 16) | ((*((unsigned char *) (x) + 3)) << 24)) +# define WRITE_U32(x, d) \ + { \ + ULONG i = d; \ + (*(unsigned char *)(x)) = ((i) & 255); \ + (*((unsigned char *)(x) + 1)) = (((i) >> 8) & 255); \ + (*((unsigned char *)(x) + 2)) = (((i) >> 16) & 255); \ + (*((unsigned char *)(x) + 3)) = (((i) >> 24) & 255); \ + } +# endif +#endif + +/* GLOBAL VARIABLE DEFINITIONS */ + +/* number of pokey chips currently emulated */ +static UBYTE Num_pokeys; + +static UBYTE pokeysnd_AUDV[4 * POKEY_MAXPOKEYS]; /* Channel volume - derived */ + +static UBYTE Outbit[4 * POKEY_MAXPOKEYS]; /* current state of the output (high or low) */ + +static UBYTE Outvol[4 * POKEY_MAXPOKEYS]; /* last output volume for each channel */ + +/* Initialize the bit patterns for the polynomials. */ + +/* The 4bit and 5bit patterns are the identical ones used in the pokey chip. */ +/* Though the patterns could be packed with 8 bits per byte, using only a */ +/* single bit per byte keeps the math simple, which is important for */ +/* efficient processing. */ + +static const UBYTE bit4[POKEY_POLY4_SIZE] = +#ifndef POKEY23_POLY +{1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0}; /* new table invented by Perry */ +#else +{1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0}; /* original POKEY 2.3 table */ +#endif + +static const UBYTE bit5[POKEY_POLY5_SIZE] = +#ifndef POKEY23_POLY +{1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0}; +#else +{0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1}; +#endif + +static ULONG P4 = 0, /* Global position pointer for the 4-bit POLY array */ + P5 = 0, /* Global position pointer for the 5-bit POLY array */ + P9 = 0, /* Global position pointer for the 9-bit POLY array */ + P17 = 0; /* Global position pointer for the 17-bit POLY array */ + +static ULONG Div_n_cnt[4 * POKEY_MAXPOKEYS], /* Divide by n counter. one for each channel */ + Div_n_max[4 * POKEY_MAXPOKEYS]; /* Divide by n maximum, one for each channel */ + +static ULONG Samp_n_max, /* Sample max. For accuracy, it is *256 */ + Samp_n_cnt[2]; /* Sample cnt. */ + +#ifdef INTERPOLATE_SOUND +#ifdef CLIP_SOUND +static SWORD last_val = 0; /* last output value */ +#else +static UWORD last_val = 0; +#endif +#ifdef STEREO_SOUND +#ifdef CLIP_SOUND +static SWORD last_val2 = 0; /* last output value */ +#else +static UWORD last_val2 = 0; +#endif +#endif +#endif + +/* Volume only emulations declarations */ +#ifdef VOL_ONLY_SOUND + +int POKEYSND_sampbuf_val[POKEYSND_SAMPBUF_MAX]; /* volume values */ +int POKEYSND_sampbuf_cnt[POKEYSND_SAMPBUF_MAX]; /* relative start time */ +int POKEYSND_sampbuf_ptr = 0; /* pointer to sampbuf */ +int POKEYSND_sampbuf_rptr = 0; /* pointer to read from sampbuf */ +int POKEYSND_sampbuf_last = 0; /* last absolute time */ +int POKEYSND_sampbuf_AUDV[4 * POKEY_MAXPOKEYS]; /* prev. channel volume */ +int POKEYSND_sampbuf_lastval = 0; /* last volume */ +int POKEYSND_sampout; /* last out volume */ +int POKEYSND_samp_freq; +int POKEYSND_samp_consol_val = 0; /* actual value of console sound */ +#ifdef STEREO_SOUND +static int sampbuf_val2[POKEYSND_SAMPBUF_MAX]; /* volume values */ +static int sampbuf_cnt2[POKEYSND_SAMPBUF_MAX]; /* relative start time */ +static int sampbuf_ptr2 = 0; /* pointer to sampbuf */ +static int sampbuf_rptr2 = 0; /* pointer to read from sampbuf */ +static int sampbuf_last2 = 0; /* last absolute time */ +static int sampbuf_lastval2 = 0; /* last volume */ +static int sampout2; /* last out volume */ +#endif +#endif /* VOL_ONLY_SOUND */ + +static ULONG snd_freq17 = POKEYSND_FREQ_17_EXACT; +int POKEYSND_playback_freq = 44100; +UBYTE POKEYSND_num_pokeys = 1; +int POKEYSND_snd_flags = 0; +static int mz_quality = 0; /* default quality for mzpokeysnd */ +#ifdef __PLUS +int mz_clear_regs = 0; +#endif + +int POKEYSND_enable_new_pokey = TRUE; +int POKEYSND_bienias_fix = TRUE; /* when TRUE, high frequencies get emulated: better sound but slower */ +#if defined(__PLUS) && !defined(_WX_) +#define BIENIAS_FIX (g_Sound.nBieniasFix) +#else +#define BIENIAS_FIX POKEYSND_bienias_fix +#endif +#ifndef ASAP +int POKEYSND_stereo_enabled = FALSE; +#endif + +int POKEYSND_volume = 0x100; + +/* multiple sound engine interface */ +static void pokeysnd_process_8(void *sndbuffer, int sndn); +static void pokeysnd_process_16(void *sndbuffer, int sndn); +static void null_pokey_process(void *sndbuffer, int sndn) {} +void (*POKEYSND_Process_ptr)(void *sndbuffer, int sndn) = null_pokey_process; + +static void Update_pokey_sound_rf(UWORD, UBYTE, UBYTE, UBYTE); +static void null_pokey_sound(UWORD addr, UBYTE val, UBYTE chip, UBYTE gain) {} +void (*POKEYSND_Update_ptr) (UWORD addr, UBYTE val, UBYTE chip, UBYTE gain) + = null_pokey_sound; + +#ifdef SERIO_SOUND +static void Update_serio_sound_rf(int out, UBYTE data); +static void null_serio_sound(int out, UBYTE data) {} +void (*POKEYSND_UpdateSerio)(int out, UBYTE data) = null_serio_sound; +int POKEYSND_serio_sound_enabled = 1; +#endif + +#ifdef CONSOLE_SOUND +static void Update_consol_sound_rf(int set); +static void null_consol_sound(int set) {} +void (*POKEYSND_UpdateConsol_ptr)(int set) = null_consol_sound; +int POKEYSND_console_sound_enabled = 1; +#endif + +#ifdef VOL_ONLY_SOUND +static void Update_vol_only_sound_rf(void); +static void null_vol_only_sound(void) {} +void (*POKEYSND_UpdateVolOnly)(void) = null_vol_only_sound; +#endif + +#ifdef SYNCHRONIZED_SOUND +UBYTE *POKEYSND_process_buffer = NULL; +unsigned int POKEYSND_process_buffer_length; +unsigned int POKEYSND_process_buffer_fill; +static unsigned int prev_update_tick; + +static void Generate_sync_rf(unsigned int num_ticks); +static void null_generate_sync(unsigned int num_ticks) {} +void (*POKEYSND_GenerateSync)(unsigned int num_ticks) = null_generate_sync; + +static double ticks_per_sample; +static double samp_pos; +static int speaker; +static int const CONSOLE_VOL = 32; +#endif /* SYNCHRONIZED_SOUND */ + +/*****************************************************************************/ +/* In my routines, I treat the sample output as another divide by N counter */ +/* For better accuracy, the Samp_n_cnt has a fixed binary decimal point */ +/* which has 8 binary digits to the right of the decimal point. I use a two */ +/* byte array to give me a minimum of 40 bits, and then use pointer math to */ +/* reference either the 24.8 whole/fraction combination or the 32-bit whole */ +/* only number. This is mainly used to keep the math simple for */ +/* optimization. See below: */ +/* */ +/* Representation on little-endian machines: */ +/* xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx | xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx */ +/* fraction whole whole whole whole unused unused unused */ +/* */ +/* Samp_n_cnt[0] gives me a 32-bit int 24 whole bits with 8 fractional bits, */ +/* while (ULONG *)((UBYTE *)(&Samp_n_cnt[0])+1) gives me the 32-bit whole */ +/* number only. */ +/* */ +/* Representation on big-endian machines: */ +/* xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx | xxxxxxxx xxxxxxxx xxxxxxxx.xxxxxxxx */ +/* unused unused unused whole whole whole whole fraction */ +/* */ +/* Samp_n_cnt[1] gives me a 32-bit int 24 whole bits with 8 fractional bits, */ +/* while (ULONG *)((UBYTE *)(&Samp_n_cnt[0])+3) gives me the 32-bit whole */ +/* number only. */ +/*****************************************************************************/ + + +/*****************************************************************************/ +/* Module: pokeysnd_init_rf() */ +/* Purpose: to handle the power-up initialization functions */ +/* these functions should only be executed on a cold-restart */ +/* */ +/* Author: Ron Fries */ +/* Date: January 1, 1997 */ +/* */ +/* Inputs: freq17 - the value for the '1.79MHz' Pokey audio clock */ +/* playback_freq - the playback frequency in samples per second */ +/* num_pokeys - specifies the number of pokey chips to be emulated */ +/* */ +/* Outputs: Adjusts local globals - no return value */ +/* */ +/*****************************************************************************/ + +static int pokeysnd_init_rf(ULONG freq17, int playback_freq, + UBYTE num_pokeys, int flags); + +#ifdef VOL_ONLY_SOUND +/* Initialise variables related to volume-only sound. */ +static void init_vol_only(void) +{ + POKEYSND_sampbuf_rptr = POKEYSND_sampbuf_ptr; + POKEYSND_sampbuf_last = ANTIC_CPU_CLOCK; + POKEYSND_sampbuf_lastval = 0; + POKEYSND_samp_consol_val = 0; +#ifdef STEREO_SOUND + sampbuf_rptr2 = sampbuf_ptr2; + sampbuf_last2 = ANTIC_CPU_CLOCK; + sampbuf_lastval2 = 0; +#endif /* STEREO_SOUND */ +} +#endif /* VOL_ONLY_SOUND */ + +int POKEYSND_DoInit(void) +{ +#if SKIP + SndSave_CloseSoundFile(); +#endif + +#ifdef VOL_ONLY_SOUND + init_vol_only(); +#endif /* VOL_ONLY_SOUND */ + +#if SKIP + if (POKEYSND_enable_new_pokey) + return MZPOKEYSND_Init(snd_freq17, POKEYSND_playback_freq, + POKEYSND_num_pokeys, POKEYSND_snd_flags, mz_quality +#ifdef __PLUS + , mz_clear_regs +#endif + ); + else +#endif + return pokeysnd_init_rf(snd_freq17, POKEYSND_playback_freq, + POKEYSND_num_pokeys, POKEYSND_snd_flags); +} + +int POKEYSND_Init(ULONG freq17, int playback_freq, UBYTE num_pokeys, + int flags +#ifdef __PLUS + , int clear_regs +#endif +) +{ + snd_freq17 = freq17; + POKEYSND_playback_freq = playback_freq; + POKEYSND_num_pokeys = num_pokeys; + POKEYSND_snd_flags = flags; +#ifdef __PLUS + mz_clear_regs = clear_regs; +#endif +#ifdef SYNCHRONIZED_SOUND + { + /* A single call to Atari800_Frame may emulate a bit more CPU ticks than the exact number of + ticks per frame (Atari800_tv_mode*114). So we add a few ticks to buffer size just to be safe. */ + unsigned int const surplus_ticks = 10; + double samples_per_frame = (double)POKEYSND_playback_freq/(Atari800_tv_mode == Atari800_TV_PAL ? Atari800_FPS_PAL : Atari800_FPS_NTSC); + unsigned int ticks_per_frame = Atari800_tv_mode*114; + unsigned int max_ticks_per_frame = ticks_per_frame + surplus_ticks; + double ticks_per_sample = (double)ticks_per_frame / samples_per_frame; + POKEYSND_process_buffer_length = POKEYSND_num_pokeys * (unsigned int)ceil((double)max_ticks_per_frame / ticks_per_sample) * ((POKEYSND_snd_flags & POKEYSND_BIT16) ? 2:1); + free(POKEYSND_process_buffer); + POKEYSND_process_buffer = (UBYTE *)Util_malloc(POKEYSND_process_buffer_length); + POKEYSND_process_buffer_fill = 0; + prev_update_tick = ANTIC_CPU_CLOCK; + } +#endif /* SYNCHRONIZED_SOUND */ + +#if defined(PBI_XLD) || defined (VOICEBOX) + VOTRAXSND_Init(playback_freq, num_pokeys, (flags & POKEYSND_BIT16)); +#endif + return POKEYSND_DoInit(); +} + +void POKEYSND_SetMzQuality(int quality) /* specially for win32, perhaps not needed? */ +{ + mz_quality = quality; +} + +void SND_Process(void *sndbuffer, int sndn) +{ + POKEYSND_Process_ptr(sndbuffer, sndn); +#if defined(PBI_XLD) || defined (VOICEBOX) + VOTRAXSND_Process(sndbuffer,sndn); +#endif +#if !defined(__PLUS) && !defined(ASAP) +#if SKIP + SndSave_WriteToSoundFile((const unsigned char *)sndbuffer, sndn); +#endif +#endif +} + +#ifdef SYNCHRONIZED_SOUND +static void Update_synchronized_sound(void) +{ + POKEYSND_GenerateSync(ANTIC_CPU_CLOCK - prev_update_tick); + prev_update_tick = ANTIC_CPU_CLOCK; +} + +int POKEYSND_UpdateProcessBuffer(void) +{ + int sndn; + Update_synchronized_sound(); + sndn = POKEYSND_process_buffer_fill / ((POKEYSND_snd_flags & POKEYSND_BIT16) ? 2 : 1); + POKEYSND_process_buffer_fill = 0; + +#if defined(PBI_XLD) || defined (VOICEBOX) + VOTRAXSND_Process(POKEYSND_process_buffer, sndn); +#endif +#if !defined(__PLUS) && !defined(ASAP) + SndSave_WriteToSoundFile((const unsigned char *)POKEYSND_process_buffer, sndn); +#endif + return sndn; +} +#endif /* SYNCHRONIZED_SOUND */ + +#ifdef SYNCHRONIZED_SOUND +static void init_syncsound(void) +{ + double samples_per_frame = (double)POKEYSND_playback_freq/(Atari800_tv_mode == Atari800_TV_PAL ? Atari800_FPS_PAL : Atari800_FPS_NTSC); + unsigned int ticks_per_frame = Atari800_tv_mode*114; + ticks_per_sample = (double)ticks_per_frame / samples_per_frame; + samp_pos = 0.0; + POKEYSND_GenerateSync = Generate_sync_rf; + speaker = 0; +} +#endif /* SYNCHRONIZED_SOUND */ + +static int pokeysnd_init_rf(ULONG freq17, int playback_freq, + UBYTE num_pokeys, int flags) +{ + UBYTE chan; + + POKEYSND_Update_ptr = Update_pokey_sound_rf; +#ifdef SERIO_SOUND + POKEYSND_UpdateSerio = Update_serio_sound_rf; +#endif +#ifdef CONSOLE_SOUND + POKEYSND_UpdateConsol_ptr = Update_consol_sound_rf; +#endif +#ifdef VOL_ONLY_SOUND + POKEYSND_UpdateVolOnly = Update_vol_only_sound_rf; +#endif + + POKEYSND_Process_ptr = (flags & POKEYSND_BIT16) ? pokeysnd_process_16 : pokeysnd_process_8; + +#ifdef VOL_ONLY_SOUND + POKEYSND_samp_freq = playback_freq; +#endif + + /* start all of the polynomial counters at zero */ + P4 = 0; + P5 = 0; + P9 = 0; + P17 = 0; + + /* calculate the sample 'divide by N' value based on the playback freq. */ + Samp_n_max = ((ULONG) freq17 << 8) / playback_freq; + + Samp_n_cnt[0] = 0; /* initialize all bits of the sample */ + Samp_n_cnt[1] = 0; /* 'divide by N' counter */ + + for (chan = 0; chan < (POKEY_MAXPOKEYS * 4); chan++) { + Outvol[chan] = 0; + Outbit[chan] = 0; + Div_n_cnt[chan] = 0; + Div_n_max[chan] = 0x7fffffffL; + pokeysnd_AUDV[chan] = 0; +#ifdef VOL_ONLY_SOUND + POKEYSND_sampbuf_AUDV[chan] = 0; +#endif + } + + /* set the number of pokey chips currently emulated */ + Num_pokeys = num_pokeys; + +#ifdef SYNCHRONIZED_SOUND + init_syncsound(); +#endif + return 0; /* OK */ +} + + +/*****************************************************************************/ +/* Module: Update_pokey_sound_rf() */ +/* Purpose: To process the latest control values stored in the AUDF, AUDC, */ +/* and AUDCTL registers. It pre-calculates as much information as */ +/* possible for better performance. This routine has not been */ +/* optimized. */ +/* */ +/* Author: Ron Fries */ +/* Date: January 1, 1997 */ +/* */ +/* Inputs: addr - the address of the parameter to be changed */ +/* val - the new value to be placed in the specified address */ +/* gain - specified as an 8-bit fixed point number - use 1 for no */ +/* amplification (output is multiplied by gain) */ +/* */ +/* Outputs: Adjusts local globals - no return value */ +/* */ +/*****************************************************************************/ + +void POKEYSND_Update(UWORD addr, UBYTE val, UBYTE chip, UBYTE gain) +{ +#ifdef SYNCHRONIZED_SOUND + Update_synchronized_sound(); +#endif /* SYNCHRONIZED_SOUND */ + POKEYSND_Update_ptr(addr, val, chip, gain); +} + +static void Update_pokey_sound_rf(UWORD addr, UBYTE val, UBYTE chip, + UBYTE gain) +{ + ULONG new_val = 0; + UBYTE chan; + UBYTE chan_mask; + UBYTE chip_offs; + + /* calculate the chip_offs for the channel arrays */ + chip_offs = chip << 2; + + /* determine which address was changed */ + switch (addr & 0x0f) { + case POKEY_OFFSET_AUDF1: + /* POKEY_AUDF[POKEY_CHAN1 + chip_offs] = val; */ + chan_mask = 1 << POKEY_CHAN1; + if (POKEY_AUDCTL[chip] & POKEY_CH1_CH2) /* if ch 1&2 tied together */ + chan_mask |= 1 << POKEY_CHAN2; /* then also change on ch2 */ + break; + case POKEY_OFFSET_AUDC1: + /* POKEY_AUDC[POKEY_CHAN1 + chip_offs] = val; */ + pokeysnd_AUDV[POKEY_CHAN1 + chip_offs] = (val & POKEY_VOLUME_MASK) * gain; + chan_mask = 1 << POKEY_CHAN1; + break; + case POKEY_OFFSET_AUDF2: + /* POKEY_AUDF[POKEY_CHAN2 + chip_offs] = val; */ + chan_mask = 1 << POKEY_CHAN2; + break; + case POKEY_OFFSET_AUDC2: + /* POKEY_AUDC[POKEY_CHAN2 + chip_offs] = val; */ + pokeysnd_AUDV[POKEY_CHAN2 + chip_offs] = (val & POKEY_VOLUME_MASK) * gain; + chan_mask = 1 << POKEY_CHAN2; + break; + case POKEY_OFFSET_AUDF3: + /* POKEY_AUDF[POKEY_CHAN3 + chip_offs] = val; */ + chan_mask = 1 << POKEY_CHAN3; + if (POKEY_AUDCTL[chip] & POKEY_CH3_CH4) /* if ch 3&4 tied together */ + chan_mask |= 1 << POKEY_CHAN4; /* then also change on ch4 */ + break; + case POKEY_OFFSET_AUDC3: + /* POKEY_AUDC[POKEY_CHAN3 + chip_offs] = val; */ + pokeysnd_AUDV[POKEY_CHAN3 + chip_offs] = (val & POKEY_VOLUME_MASK) * gain; + chan_mask = 1 << POKEY_CHAN3; + break; + case POKEY_OFFSET_AUDF4: + /* POKEY_AUDF[POKEY_CHAN4 + chip_offs] = val; */ + chan_mask = 1 << POKEY_CHAN4; + break; + case POKEY_OFFSET_AUDC4: + /* POKEY_AUDC[POKEY_CHAN4 + chip_offs] = val; */ + pokeysnd_AUDV[POKEY_CHAN4 + chip_offs] = (val & POKEY_VOLUME_MASK) * gain; + chan_mask = 1 << POKEY_CHAN4; + break; + case POKEY_OFFSET_AUDCTL: + /* POKEY_AUDCTL[chip] = val; */ + chan_mask = 15; /* all channels */ + break; + default: + chan_mask = 0; + break; + } + + /************************************************************/ + /* As defined in the manual, the exact Div_n_cnt values are */ + /* different depending on the frequency and resolution: */ + /* 64 kHz or 15 kHz - AUDF + 1 */ + /* 1 MHz, 8-bit - AUDF + 4 */ + /* 1 MHz, 16-bit - POKEY_AUDF[POKEY_CHAN1]+256*POKEY_AUDF[POKEY_CHAN2] + 7 */ + /************************************************************/ + + /* only reset the channels that have changed */ + + if (chan_mask & (1 << POKEY_CHAN1)) { + /* process channel 1 frequency */ + if (POKEY_AUDCTL[chip] & POKEY_CH1_179) + new_val = POKEY_AUDF[POKEY_CHAN1 + chip_offs] + 4; + else + new_val = (POKEY_AUDF[POKEY_CHAN1 + chip_offs] + 1) * POKEY_Base_mult[chip]; + + if (new_val != Div_n_max[POKEY_CHAN1 + chip_offs]) { + Div_n_max[POKEY_CHAN1 + chip_offs] = new_val; + + if (Div_n_cnt[POKEY_CHAN1 + chip_offs] > new_val) { + Div_n_cnt[POKEY_CHAN1 + chip_offs] = new_val; + } + } + } + + if (chan_mask & (1 << POKEY_CHAN2)) { + /* process channel 2 frequency */ + if (POKEY_AUDCTL[chip] & POKEY_CH1_CH2) { + if (POKEY_AUDCTL[chip] & POKEY_CH1_179) + new_val = POKEY_AUDF[POKEY_CHAN2 + chip_offs] * 256 + + POKEY_AUDF[POKEY_CHAN1 + chip_offs] + 7; + else + new_val = (POKEY_AUDF[POKEY_CHAN2 + chip_offs] * 256 + + POKEY_AUDF[POKEY_CHAN1 + chip_offs] + 1) * POKEY_Base_mult[chip]; + } + else + new_val = (POKEY_AUDF[POKEY_CHAN2 + chip_offs] + 1) * POKEY_Base_mult[chip]; + + if (new_val != Div_n_max[POKEY_CHAN2 + chip_offs]) { + Div_n_max[POKEY_CHAN2 + chip_offs] = new_val; + + if (Div_n_cnt[POKEY_CHAN2 + chip_offs] > new_val) { + Div_n_cnt[POKEY_CHAN2 + chip_offs] = new_val; + } + } + } + + if (chan_mask & (1 << POKEY_CHAN3)) { + /* process channel 3 frequency */ + if (POKEY_AUDCTL[chip] & POKEY_CH3_179) + new_val = POKEY_AUDF[POKEY_CHAN3 + chip_offs] + 4; + else + new_val = (POKEY_AUDF[POKEY_CHAN3 + chip_offs] + 1) * POKEY_Base_mult[chip]; + + if (new_val != Div_n_max[POKEY_CHAN3 + chip_offs]) { + Div_n_max[POKEY_CHAN3 + chip_offs] = new_val; + + if (Div_n_cnt[POKEY_CHAN3 + chip_offs] > new_val) { + Div_n_cnt[POKEY_CHAN3 + chip_offs] = new_val; + } + } + } + + if (chan_mask & (1 << POKEY_CHAN4)) { + /* process channel 4 frequency */ + if (POKEY_AUDCTL[chip] & POKEY_CH3_CH4) { + if (POKEY_AUDCTL[chip] & POKEY_CH3_179) + new_val = POKEY_AUDF[POKEY_CHAN4 + chip_offs] * 256 + + POKEY_AUDF[POKEY_CHAN3 + chip_offs] + 7; + else + new_val = (POKEY_AUDF[POKEY_CHAN4 + chip_offs] * 256 + + POKEY_AUDF[POKEY_CHAN3 + chip_offs] + 1) * POKEY_Base_mult[chip]; + } + else + new_val = (POKEY_AUDF[POKEY_CHAN4 + chip_offs] + 1) * POKEY_Base_mult[chip]; + + if (new_val != Div_n_max[POKEY_CHAN4 + chip_offs]) { + Div_n_max[POKEY_CHAN4 + chip_offs] = new_val; + + if (Div_n_cnt[POKEY_CHAN4 + chip_offs] > new_val) { + Div_n_cnt[POKEY_CHAN4 + chip_offs] = new_val; + } + } + } + + /* if channel is volume only, set current output */ + for (chan = POKEY_CHAN1; chan <= POKEY_CHAN4; chan++) { + if (chan_mask & (1 << chan)) { + +#ifdef VOL_ONLY_SOUND + +#ifdef __PLUS + if (g_Sound.nDigitized) +#endif + if ((POKEY_AUDC[chan + chip_offs] & POKEY_VOL_ONLY)) { + +#ifdef STEREO_SOUND + +#ifdef __PLUS + if (POKEYSND_stereo_enabled && chip & 0x01) +#else + if (chip & 0x01) +#endif + { + sampbuf_lastval2 += pokeysnd_AUDV[chan + chip_offs] + - POKEYSND_sampbuf_AUDV[chan + chip_offs]; + + sampbuf_val2[sampbuf_ptr2] = sampbuf_lastval2; + POKEYSND_sampbuf_AUDV[chan + chip_offs] = pokeysnd_AUDV[chan + chip_offs]; + sampbuf_cnt2[sampbuf_ptr2] = + (ANTIC_CPU_CLOCK - sampbuf_last2) * 128 * POKEYSND_samp_freq / 178979; + sampbuf_last2 = ANTIC_CPU_CLOCK; + sampbuf_ptr2++; + if (sampbuf_ptr2 >= POKEYSND_SAMPBUF_MAX) + sampbuf_ptr2 = 0; + if (sampbuf_ptr2 == sampbuf_rptr2) { + sampbuf_rptr2++; + if (sampbuf_rptr2 >= POKEYSND_SAMPBUF_MAX) + sampbuf_rptr2 = 0; + } + } + else +#endif /* STEREO_SOUND */ + { + POKEYSND_sampbuf_lastval += pokeysnd_AUDV[chan + chip_offs] + -POKEYSND_sampbuf_AUDV[chan + chip_offs]; + + POKEYSND_sampbuf_val[POKEYSND_sampbuf_ptr] = POKEYSND_sampbuf_lastval; + POKEYSND_sampbuf_AUDV[chan + chip_offs] = pokeysnd_AUDV[chan + chip_offs]; + POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_ptr] = + (ANTIC_CPU_CLOCK - POKEYSND_sampbuf_last) * 128 * POKEYSND_samp_freq / 178979; + POKEYSND_sampbuf_last = ANTIC_CPU_CLOCK; + POKEYSND_sampbuf_ptr++; + if (POKEYSND_sampbuf_ptr >= POKEYSND_SAMPBUF_MAX) + POKEYSND_sampbuf_ptr = 0; + if (POKEYSND_sampbuf_ptr == POKEYSND_sampbuf_rptr) { + POKEYSND_sampbuf_rptr++; + if (POKEYSND_sampbuf_rptr >= POKEYSND_SAMPBUF_MAX) + POKEYSND_sampbuf_rptr = 0; + } + } + } + +#endif /* VOL_ONLY_SOUND */ + + /* I've disabled any frequencies that exceed the sampling + frequency. There isn't much point in processing frequencies + that the hardware can't reproduce. I've also disabled + processing if the volume is zero. */ + + /* if the channel is volume only */ + /* or the channel is off (volume == 0) */ + /* or the channel freq is greater than the playback freq */ + if ( (POKEY_AUDC[chan + chip_offs] & POKEY_VOL_ONLY) || + ((POKEY_AUDC[chan + chip_offs] & POKEY_VOLUME_MASK) == 0) + || (!BIENIAS_FIX && (Div_n_max[chan + chip_offs] < (Samp_n_max >> 8))) + ) { + /* indicate the channel is 'on' */ + Outvol[chan + chip_offs] = 1; + + /* can only ignore channel if filtering off */ + if ((chan == POKEY_CHAN3 && !(POKEY_AUDCTL[chip] & POKEY_CH1_FILTER)) || + (chan == POKEY_CHAN4 && !(POKEY_AUDCTL[chip] & POKEY_CH2_FILTER)) || + (chan == POKEY_CHAN1) || + (chan == POKEY_CHAN2) + || (!BIENIAS_FIX && (Div_n_max[chan + chip_offs] < (Samp_n_max >> 8))) + ) { + /* and set channel freq to max to reduce processing */ + Div_n_max[chan + chip_offs] = 0x7fffffffL; + Div_n_cnt[chan + chip_offs] = 0x7fffffffL; + } + } + } + } + + /* _enable(); */ /* RSF - removed for portability 31-MAR-97 */ +} + + +/*****************************************************************************/ +/* Module: pokeysnd_process() */ +/* Purpose: To fill the output buffer with the sound output based on the */ +/* pokey chip parameters. */ +/* */ +/* Author: Ron Fries */ +/* Date: January 1, 1997 */ +/* */ +/* Inputs: *buffer - pointer to the buffer where the audio output will */ +/* be placed */ +/* sndn - for mono, size of the playback buffer in samples */ +/* for stereo, size of the playback buffer in left samples */ +/* plus right samples. */ +/* num_pokeys - number of currently active pokeys to process */ +/* */ +/* Outputs: the buffer will be filled with n bytes of audio - no return val */ +/* Also the buffer will be written to disk if Sound recording is ON */ +/* */ +/*****************************************************************************/ + +static void pokeysnd_process_8(void *sndbuffer, int sndn) +{ + register UBYTE *buffer = (UBYTE *) sndbuffer; + register int n = sndn; + + register ULONG *div_n_ptr; + register UBYTE *samp_cnt_w_ptr; + register ULONG event_min; + register UBYTE next_event; +#ifdef CLIP_SOUND + register SWORD cur_val; /* then we have to count as 16-bit signed */ +#ifdef STEREO_SOUND + register SWORD cur_val2; +#endif +#else /* CLIP_SOUND */ + register UBYTE cur_val; /* otherwise we'll simplify as 8-bit unsigned */ +#ifdef STEREO_SOUND + register UBYTE cur_val2; +#endif +#endif /* CLIP_SOUND */ + register UBYTE *out_ptr; + register UBYTE audc; + register UBYTE toggle; + register UBYTE count; + register UBYTE *vol_ptr; + + /* set a pointer to the whole portion of the samp_n_cnt */ +#ifdef WORDS_BIGENDIAN + samp_cnt_w_ptr = ((UBYTE *) (&Samp_n_cnt[0]) + 3); +#else + samp_cnt_w_ptr = ((UBYTE *) (&Samp_n_cnt[0]) + 1); +#endif + + /* set a pointer for optimization */ + out_ptr = Outvol; + vol_ptr = pokeysnd_AUDV; + + /* The current output is pre-determined and then adjusted based on each */ + /* output change for increased performance (less over-all math). */ + /* add the output values of all 4 channels */ + cur_val = POKEYSND_SAMP_MIN; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + cur_val2 = POKEYSND_SAMP_MIN; +#endif /* STEREO_SOUND */ + + count = Num_pokeys; + do { + if (*out_ptr++) + cur_val += *vol_ptr; + vol_ptr++; + + if (*out_ptr++) + cur_val += *vol_ptr; + vol_ptr++; + + if (*out_ptr++) + cur_val += *vol_ptr; + vol_ptr++; + + if (*out_ptr++) + cur_val += *vol_ptr; + vol_ptr++; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + { + count--; + if (count) { + if (*out_ptr++) + cur_val2 += *vol_ptr; + vol_ptr++; + + if (*out_ptr++) + cur_val2 += *vol_ptr; + vol_ptr++; + + if (*out_ptr++) + cur_val2 += *vol_ptr; + vol_ptr++; + + if (*out_ptr++) + cur_val2 += *vol_ptr; + vol_ptr++; + } + else + break; + } +#endif /* STEREO_SOUND */ + count--; + } while (count); + +#ifdef SYNCHRONIZED_SOUND + cur_val += speaker; +#endif + + /* loop until the buffer is filled */ + while (n) { + /* Normally the routine would simply decrement the 'div by N' */ + /* counters and react when they reach zero. Since we normally */ + /* won't be processing except once every 80 or so counts, */ + /* I've optimized by finding the smallest count and then */ + /* 'accelerated' time by adjusting all pointers by that amount. */ + + /* find next smallest event (either sample or chan 1-4) */ + next_event = POKEY_SAMPLE; + event_min = READ_U32(samp_cnt_w_ptr); + + div_n_ptr = Div_n_cnt; + + count = 0; + do { + /* Though I could have used a loop here, this is faster */ + if (*div_n_ptr <= event_min) { + event_min = *div_n_ptr; + next_event = POKEY_CHAN1 + (count << 2); + } + div_n_ptr++; + if (*div_n_ptr <= event_min) { + event_min = *div_n_ptr; + next_event = POKEY_CHAN2 + (count << 2); + } + div_n_ptr++; + if (*div_n_ptr <= event_min) { + event_min = *div_n_ptr; + next_event = POKEY_CHAN3 + (count << 2); + } + div_n_ptr++; + if (*div_n_ptr <= event_min) { + event_min = *div_n_ptr; + next_event = POKEY_CHAN4 + (count << 2); + } + div_n_ptr++; + + count++; + } while (count < Num_pokeys); + + /* if the next event is a channel change */ + if (next_event != POKEY_SAMPLE) { + /* shift the polynomial counters */ + + count = Num_pokeys; + do { + /* decrement all counters by the smallest count found */ + /* again, no loop for efficiency */ + div_n_ptr--; + *div_n_ptr -= event_min; + div_n_ptr--; + *div_n_ptr -= event_min; + div_n_ptr--; + *div_n_ptr -= event_min; + div_n_ptr--; + *div_n_ptr -= event_min; + + count--; + } while (count); + + + WRITE_U32(samp_cnt_w_ptr, READ_U32(samp_cnt_w_ptr) - event_min); + + /* since the polynomials require a mod (%) function which is + division, I don't adjust the polynomials on the SAMPLE events, + only the CHAN events. I have to keep track of the change, + though. */ + + P4 = (P4 + event_min) % POKEY_POLY4_SIZE; + P5 = (P5 + event_min) % POKEY_POLY5_SIZE; + P9 = (P9 + event_min) % POKEY_POLY9_SIZE; + P17 = (P17 + event_min) % POKEY_POLY17_SIZE; + + /* adjust channel counter */ + Div_n_cnt[next_event] += Div_n_max[next_event]; + + /* get the current AUDC into a register (for optimization) */ + audc = POKEY_AUDC[next_event]; + + /* set a pointer to the current output (for opt...) */ + out_ptr = &Outvol[next_event]; + + /* assume no changes to the output */ + toggle = FALSE; + + /* From here, a good understanding of the hardware is required */ + /* to understand what is happening. I won't be able to provide */ + /* much description to explain it here. */ + + /* if VOLUME only then nothing to process */ + if (!(audc & POKEY_VOL_ONLY)) { + /* if the output is pure or the output is poly5 and the poly5 bit */ + /* is set */ + if ((audc & POKEY_NOTPOLY5) || bit5[P5]) { + /* if the PURETONE bit is set */ + if (audc & POKEY_PURETONE) { + /* then simply toggle the output */ + toggle = TRUE; + } + /* otherwise if POLY4 is selected */ + else if (audc & POKEY_POLY4) { + /* then compare to the poly4 bit */ + toggle = (bit4[P4] == !(*out_ptr)); + } + else { + /* if 9-bit poly is selected on this chip */ + if (POKEY_AUDCTL[next_event >> 2] & POKEY_POLY9) { + /* compare to the poly9 bit */ + toggle = ((POKEY_poly9_lookup[P9] & 1) == !(*out_ptr)); + } + else { + /* otherwise compare to the poly17 bit */ + toggle = (((POKEY_poly17_lookup[P17 >> 3] >> (P17 & 7)) & 1) == !(*out_ptr)); + } + } + } + } + + /* check channel 1 filter (clocked by channel 3) */ + if ( POKEY_AUDCTL[next_event >> 2] & POKEY_CH1_FILTER) { + /* if we're processing channel 3 */ + if ((next_event & 0x03) == POKEY_CHAN3) { + /* check output of channel 1 on same chip */ + if (Outvol[next_event & 0xfd]) { + /* if on, turn it off */ + Outvol[next_event & 0xfd] = 0; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled && (next_event & 0x04)) +#else + if ((next_event & 0x04)) +#endif + cur_val2 -= pokeysnd_AUDV[next_event & 0xfd]; + else +#endif /* STEREO_SOUND */ + cur_val -= pokeysnd_AUDV[next_event & 0xfd]; + } + } + } + + /* check channel 2 filter (clocked by channel 4) */ + if ( POKEY_AUDCTL[next_event >> 2] & POKEY_CH2_FILTER) { + /* if we're processing channel 4 */ + if ((next_event & 0x03) == POKEY_CHAN4) { + /* check output of channel 2 on same chip */ + if (Outvol[next_event & 0xfd]) { + /* if on, turn it off */ + Outvol[next_event & 0xfd] = 0; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled && (next_event & 0x04)) +#else + if ((next_event & 0x04)) +#endif + cur_val2 -= pokeysnd_AUDV[next_event & 0xfd]; + else +#endif /* STEREO_SOUND */ + cur_val -= pokeysnd_AUDV[next_event & 0xfd]; + } + } + } + + /* if the current output bit has changed */ + if (toggle) { + if (*out_ptr) { + /* remove this channel from the signal */ +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled && (next_event & 0x04)) +#else + if ((next_event & 0x04)) +#endif + cur_val2 -= pokeysnd_AUDV[next_event]; + else +#endif /* STEREO_SOUND */ + cur_val -= pokeysnd_AUDV[next_event]; + + /* and turn the output off */ + *out_ptr = 0; + } + else { + /* turn the output on */ + *out_ptr = 1; + + /* and add it to the output signal */ +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled && (next_event & 0x04)) +#else + if ((next_event & 0x04)) +#endif + cur_val2 += pokeysnd_AUDV[next_event]; + else +#endif /* STEREO_SOUND */ + cur_val += pokeysnd_AUDV[next_event]; + } + } + } + else { /* otherwise we're processing a sample */ + /* adjust the sample counter - note we're using the 24.8 integer + which includes an 8 bit fraction for accuracy */ + + int iout; +#ifdef STEREO_SOUND + int iout2; +#endif +#ifdef INTERPOLATE_SOUND + if (cur_val != last_val) { + if (*Samp_n_cnt < Samp_n_max) { /* need interpolation */ +#ifdef CLIP_SOUND + iout = (cur_val * (SLONG)(*Samp_n_cnt) + + last_val * (SLONG)(Samp_n_max - *Samp_n_cnt)) + / (SLONG)Samp_n_max; +#else + iout = (cur_val * (*Samp_n_cnt) + + last_val * (Samp_n_max - *Samp_n_cnt)) + / Samp_n_max; +#endif + } + else + iout = cur_val; + last_val = cur_val; + } + else + iout = cur_val; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + if (cur_val2 != last_val2) { + if (*Samp_n_cnt < Samp_n_max) { /* need interpolation */ +#ifdef CLIP_SOUND + iout2 = (cur_val2 * (SLONG)(*Samp_n_cnt) + + last_val2 * (SLONG)(Samp_n_max - *Samp_n_cnt)) + / (SLONG)Samp_n_max; +#else + iout2 = (cur_val2 * (*Samp_n_cnt) + + last_val2 * (Samp_n_max - *Samp_n_cnt)) + / Samp_n_max; +#endif + } + else + iout2 = cur_val2; + last_val2 = cur_val2; + } + else + iout2 = cur_val2; +#endif /* STEREO_SOUND */ +#else /* INTERPOLATE_SOUND */ + iout = cur_val; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + iout2 = cur_val2; +#endif /* STEREO_SOUND */ +#endif /* INTERPOLATE_SOUND */ + +#ifdef VOL_ONLY_SOUND +#ifdef __PLUS + if (g_Sound.nDigitized) +#endif + { + if (POKEYSND_sampbuf_rptr != POKEYSND_sampbuf_ptr) { + int l; + if (POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_rptr] > 0) + POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_rptr] -= 1280; + while ((l = POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_rptr]) <= 0) { + POKEYSND_sampout = POKEYSND_sampbuf_val[POKEYSND_sampbuf_rptr]; + POKEYSND_sampbuf_rptr++; + if (POKEYSND_sampbuf_rptr >= POKEYSND_SAMPBUF_MAX) + POKEYSND_sampbuf_rptr = 0; + if (POKEYSND_sampbuf_rptr != POKEYSND_sampbuf_ptr) + POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_rptr] += l; + else + break; + } + } + iout += POKEYSND_sampout; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + { + if (sampbuf_rptr2 != sampbuf_ptr2) { + int l; + if (sampbuf_cnt2[sampbuf_rptr2] > 0) + sampbuf_cnt2[sampbuf_rptr2] -= 1280; + while ((l = sampbuf_cnt2[sampbuf_rptr2]) <= 0) { + sampout2 = sampbuf_val2[sampbuf_rptr2]; + sampbuf_rptr2++; + if (sampbuf_rptr2 >= POKEYSND_SAMPBUF_MAX) + sampbuf_rptr2 = 0; + if (sampbuf_rptr2 != sampbuf_ptr2) + sampbuf_cnt2[sampbuf_rptr2] += l; + else + break; + } + } + iout2 += sampout2; + } +#endif /* STEREO_SOUND */ + } +#endif /* VOL_ONLY_SOUND */ + +#ifdef CLIP_SOUND + if (iout > POKEYSND_SAMP_MAX) { /* then check high limit */ + *buffer++ = (UBYTE) POKEYSND_SAMP_MAX; /* and limit if greater */ + } + else if (iout < POKEYSND_SAMP_MIN) { /* else check low limit */ + *buffer++ = (UBYTE) POKEYSND_SAMP_MIN; /* and limit if less */ + } + else { /* otherwise use raw value */ + *buffer++ = (UBYTE) iout; + } +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) { + if (iout2 > POKEYSND_SAMP_MAX) + *buffer++ = (UBYTE) POKEYSND_SAMP_MAX; + else if (iout2 < POKEYSND_SAMP_MIN) + *buffer++ = (UBYTE) POKEYSND_SAMP_MIN; + else + *buffer++ = (UBYTE) iout2; + } +#else /* __PLUS */ + if (Num_pokeys > 1) { + if ((POKEYSND_stereo_enabled ? iout2 : iout) > POKEYSND_SAMP_MAX) { /* then check high limit */ + *buffer++ = (UBYTE) POKEYSND_SAMP_MAX; /* and limit if greater */ + } + else if ((POKEYSND_stereo_enabled ? iout2 : iout) < POKEYSND_SAMP_MIN) { /* else check low limit */ + *buffer++ = (UBYTE) POKEYSND_SAMP_MIN; /* and limit if less */ + } + else { /* otherwise use raw value */ + *buffer++ = (UBYTE) (POKEYSND_stereo_enabled ? iout2 : iout); + } + } +#endif /* __PLUS */ +#endif /* STEREO_SOUND */ +#else /* CLIP_SOUND */ + *buffer++ = (UBYTE) iout; /* clipping not selected, use value */ +#ifdef STEREO_SOUND + if (Num_pokeys > 1) +#ifdef ASAP + *buffer++ = (UBYTE) iout2; +#else + *buffer++ = (UBYTE) (POKEYSND_stereo_enabled ? iout2 : iout); +#endif +#endif /* STEREO_SOUND */ +#endif /* CLIP_SOUND */ + +#ifdef WORDS_BIGENDIAN + *(Samp_n_cnt + 1) += Samp_n_max; +#else + *Samp_n_cnt += Samp_n_max; +#endif + /* and indicate one less byte in the buffer */ + n--; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + if (Num_pokeys > 1) + n--; +#endif + } + } +#ifdef VOL_ONLY_SOUND +#ifdef __PLUS + if (g_Sound.nDigitized) +#endif + { + if (POKEYSND_sampbuf_rptr == POKEYSND_sampbuf_ptr) + POKEYSND_sampbuf_last = ANTIC_CPU_CLOCK; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + if (sampbuf_rptr2 == sampbuf_ptr2) + sampbuf_last2 = ANTIC_CPU_CLOCK; +#endif /* STEREO_SOUND */ + } +#endif /* VOL_ONLY_SOUND */ +} + +#ifdef SERIO_SOUND +static void Update_serio_sound_rf(int out, UBYTE data) +{ +#ifdef VOL_ONLY_SOUND +#ifdef __PLUS + if (g_Sound.nDigitized) { +#endif + int bits, pv, future; + if (!POKEYSND_serio_sound_enabled) return; + + pv = 0; + future = 0; + bits = (data << 1) | 0x200; + while (bits) + { + POKEYSND_sampbuf_lastval -= pv; + pv = (bits & 0x01) * pokeysnd_AUDV[3]; /* FIXME!!! - set volume from AUDV */ + POKEYSND_sampbuf_lastval += pv; + + POKEYSND_sampbuf_val[POKEYSND_sampbuf_ptr] = POKEYSND_sampbuf_lastval; + POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_ptr] = + (ANTIC_CPU_CLOCK + future-POKEYSND_sampbuf_last) * 128 * POKEYSND_samp_freq / 178979; + POKEYSND_sampbuf_last = ANTIC_CPU_CLOCK + future; + POKEYSND_sampbuf_ptr++; + if (POKEYSND_sampbuf_ptr >= POKEYSND_SAMPBUF_MAX ) + POKEYSND_sampbuf_ptr = 0; + if (POKEYSND_sampbuf_ptr == POKEYSND_sampbuf_rptr ) { + POKEYSND_sampbuf_rptr++; + if (POKEYSND_sampbuf_rptr >= POKEYSND_SAMPBUF_MAX) + POKEYSND_sampbuf_rptr = 0; + } + /* 1789790/19200 = 93 */ + future += 93; /* ~ 19200 bit/s - FIXME!!! set speed form AUDF [2] ??? */ + bits >>= 1; + } + POKEYSND_sampbuf_lastval -= pv; +#ifdef __PLUS + } +#endif +#endif /* VOL_ONLY_SOUND */ +} +#endif /* SERIO_SOUND */ + +void POKEYSND_SetVolume(int vol) +{ + if (vol > 100) + vol = 100; + if (vol < 0) + vol = 0; + + POKEYSND_volume = vol * 0x100 / 100; +} + +static void pokeysnd_process_16(void *sndbuffer, int sndn) +{ + UWORD *buffer = (UWORD *) sndbuffer; + int i; + + pokeysnd_process_8(buffer, sndn); + + for (i = sndn - 1; i >= 0; i--) { +#ifndef POKEYSND_SIGNED_SAMPLES + int smp = ((int) (((UBYTE *) buffer)[i]) - 0x80) * POKEYSND_volume; +#else + int smp = ((int) ((SBYTE *) buffer)[i]) * POKEYSND_volume; +#endif + if (smp > 32767) + smp = 32767; + else if (smp < -32768) + smp = -32768; + + buffer[i] = smp; + } +} + +#ifdef SYNCHRONIZED_SOUND +static void Generate_sync_rf(unsigned int num_ticks) +{ + double new_samp_pos; + unsigned int ticks; + UBYTE *buffer = POKEYSND_process_buffer + POKEYSND_process_buffer_fill; + UBYTE *buffer_end = POKEYSND_process_buffer + POKEYSND_process_buffer_length; + + for (;;) { + double int_part; + new_samp_pos = samp_pos + ticks_per_sample; + new_samp_pos = modf(new_samp_pos, &int_part); + ticks = (unsigned int)int_part; + if (ticks > num_ticks) { + samp_pos -= num_ticks; + break; + } + if (buffer >= buffer_end) + break; + + samp_pos = new_samp_pos; + num_ticks -= ticks; + + if (POKEYSND_snd_flags & POKEYSND_BIT16) { + pokeysnd_process_16(buffer, POKEYSND_num_pokeys); + buffer += 2 * POKEYSND_num_pokeys; + } + else { + pokeysnd_process_8(buffer, POKEYSND_num_pokeys); + buffer += POKEYSND_num_pokeys; + } + + } + + POKEYSND_process_buffer_fill = buffer - POKEYSND_process_buffer; +} +#endif /* SYNCHRONIZED_SOUND */ + +#ifdef CONSOLE_SOUND +void POKEYSND_UpdateConsol(int set) +{ + if (!POKEYSND_console_sound_enabled) + return; +#ifdef SYNCHRONIZED_SOUND + if (set) + Update_synchronized_sound(); +#endif /* SYNCHRONIZED_SOUND */ + POKEYSND_UpdateConsol_ptr(set); +} + +static void Update_consol_sound_rf(int set) +{ +#ifdef SYNCHRONIZED_SOUND + if (set) + speaker = CONSOLE_VOL * GTIA_speaker; +#elif defined(VOL_ONLY_SOUND) + static int prev_atari_speaker = 0; + static unsigned int prev_cpu_clock = 0; + int d; +#ifdef __PLUS + if (!g_Sound.nDigitized) + return; +#endif + + if (!set && POKEYSND_samp_consol_val == 0) + return; + POKEYSND_sampbuf_lastval -= POKEYSND_samp_consol_val; + if (prev_atari_speaker != GTIA_speaker) { + POKEYSND_samp_consol_val = GTIA_speaker * 8 * 4; /* gain */ + prev_cpu_clock = ANTIC_CPU_CLOCK; + } + else if (!set) { + d = ANTIC_CPU_CLOCK - prev_cpu_clock; + if (d < 114) { + POKEYSND_sampbuf_lastval += POKEYSND_samp_consol_val; + return; + } + while (d >= 114 /* CPUL */) { + POKEYSND_samp_consol_val = POKEYSND_samp_consol_val * 99 / 100; + d -= 114; + } + prev_cpu_clock = ANTIC_CPU_CLOCK - d; + } + POKEYSND_sampbuf_lastval += POKEYSND_samp_consol_val; + prev_atari_speaker = GTIA_speaker; + + POKEYSND_sampbuf_val[POKEYSND_sampbuf_ptr] = POKEYSND_sampbuf_lastval; + POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_ptr] = + (ANTIC_CPU_CLOCK - POKEYSND_sampbuf_last) * 128 * POKEYSND_samp_freq / 178979; + POKEYSND_sampbuf_last = ANTIC_CPU_CLOCK; + POKEYSND_sampbuf_ptr++; + if (POKEYSND_sampbuf_ptr >= POKEYSND_SAMPBUF_MAX) + POKEYSND_sampbuf_ptr = 0; + if (POKEYSND_sampbuf_ptr == POKEYSND_sampbuf_rptr) { + POKEYSND_sampbuf_rptr++; + if (POKEYSND_sampbuf_rptr >= POKEYSND_SAMPBUF_MAX) + POKEYSND_sampbuf_rptr = 0; + } +#endif /* !SYNCHRONIZED_SOUND && VOL_ONLY_SOUND */ +} +#endif /* CONSOLE_SOUND */ + +#ifdef VOL_ONLY_SOUND +static void Update_vol_only_sound_rf(void) +{ +#ifdef CONSOLE_SOUND + POKEYSND_UpdateConsol(0); /* mmm */ +#endif /* CONSOLE_SOUND */ +} +#endif /* VOL_ONLY_SOUND */ diff --git a/MCUME_pico/pico5200/pokeysnd.h b/MCUME_pico/pico5200/pokeysnd.h new file mode 100644 index 0000000..64f5cd6 --- /dev/null +++ b/MCUME_pico/pico5200/pokeysnd.h @@ -0,0 +1,144 @@ +/*****************************************************************************/ +/* */ +/* Module: POKEY Chip Simulator Includes, V2.3 */ +/* Purpose: To emulate the sound generation hardware of the Atari POKEY chip. */ +/* Author: Ron Fries */ +/* */ +/* Revision History: */ +/* */ +/* 09/22/96 - Ron Fries - Initial Release */ +/* 04/06/97 - Brad Oliver - Some cross-platform modifications. Added */ +/* big/little endian #defines, removed , */ +/* conditional defines for TRUE/FALSE */ +/* 01/19/98 - Ron Fries - Changed signed/unsigned sample support to a */ +/* compile-time option. Defaults to unsigned - */ +/* define SIGNED_SAMPLES to create signed. */ +/* */ +/*****************************************************************************/ +/* */ +/* License Information and Copyright Notice */ +/* ======================================== */ +/* */ +/* PokeySound is Copyright(c) 1996-1998 by Ron Fries */ +/* */ +/* This library is free software; you can redistribute it and/or modify it */ +/* under the terms of version 2 of the GNU Library General Public License */ +/* as published by the Free Software Foundation. */ +/* */ +/* This library 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 Library */ +/* General Public License for more details. */ +/* To obtain a copy of the GNU Library General Public License, write to the */ +/* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +/* */ +/* Any permitted reproduction of these routines, in whole or in part, must */ +/* bear this legend. */ +/* */ +/*****************************************************************************/ + +#ifndef POKEYSND_H_ +#define POKEYSND_H_ + +#include "atari.h" +#include "pokey.h" + +/* CONSTANT DEFINITIONS */ + +/* As an alternative to using the exact frequencies, selecting a playback + frequency that is an exact division of the main clock provides a higher + quality output due to less aliasing. For best results, a value of + 1787520 MHz is used for the main clock. With this value, both the + 64 kHz and 15 kHz clocks are evenly divisible. Selecting a playback + frequency that is also a division of the clock provides the best + results. The best options are FREQ_64 divided by either 2, 3, or 4. + The best selection is based on a trade off between performance and + sound quality. + + Of course, using a main clock frequency that is not exact will affect + the pitch of the output. With these numbers, the pitch will be low + by 0.127%. (More than likely, an actual unit will vary by this much!) */ + +#define POKEYSND_FREQ_17_EXACT 1789790 /* exact 1.79 MHz clock freq */ +#define POKEYSND_FREQ_17_APPROX 1787520 /* approximate 1.79 MHz clock freq */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef POKEYSND_SIGNED_SAMPLES /* if signed output selected */ +#define POKEYSND_SAMP_MAX 127 /* then set signed 8-bit clipping ranges */ +#define POKEYSND_SAMP_MIN -128 +#define POKEYSND_SAMP_MID 0 +#else +#define POKEYSND_SAMP_MAX 255 /* else set unsigned 8-bit clip ranges */ +#define POKEYSND_SAMP_MIN 0 +#define POKEYSND_SAMP_MID 128 +#endif + +/* init flags */ +#define POKEYSND_BIT16 1 + +extern SLONG POKEYSND_playback_freq; +extern UBYTE POKEYSND_num_pokeys; +extern int POKEYSND_snd_flags; +extern int POKEYSND_volume; + +extern int POKEYSND_enable_new_pokey; +extern int POKEYSND_stereo_enabled; +extern int POKEYSND_serio_sound_enabled; +extern int POKEYSND_console_sound_enabled; +extern int POKEYSND_bienias_fix; + +extern void (*POKEYSND_Process_ptr)(void *sndbuffer, int sndn); +extern void (*POKEYSND_Update_ptr)(UWORD addr, UBYTE val, UBYTE chip, UBYTE gain); +extern void (*POKEYSND_UpdateSerio)(int out, UBYTE data); +extern void (*POKEYSND_UpdateConsol_ptr)(int set); +extern void (*POKEYSND_UpdateVolOnly)(void); + +int POKEYSND_Init(ULONG freq17, int playback_freq, UBYTE num_pokeys, + int flags +#ifdef __PLUS + , int clear_regs +#endif + ); +void POKEYSND_Update(UWORD addr, UBYTE val, UBYTE /*chip*/, UBYTE gain); +void POKEYSND_UpdateConsol(int set); + +/* Fill sndbuffer with sndn samples of audio. Number of bytes written to + sndbuffer is sndn with 8-bit sound, and 2*sndn with 16-bit sound. sndn + must be a multiple of POKEYSND_num_pokeys. */ +void POKEYSND_Process(void *sndbuffer, int sndn); +int POKEYSND_DoInit(void); +void POKEYSND_SetMzQuality(int quality); +void POKEYSND_SetVolume(int vol); + +/* Volume only emulations declarations */ +#ifdef VOL_ONLY_SOUND + +#define POKEYSND_SAMPBUF_MAX 2000 +extern int POKEYSND_sampbuf_val[POKEYSND_SAMPBUF_MAX]; /* volume values */ +extern int POKEYSND_sampbuf_cnt[POKEYSND_SAMPBUF_MAX]; /* relative start time */ +extern int POKEYSND_sampbuf_ptr; /* pointer to sampbuf */ +extern int POKEYSND_sampbuf_rptr; /* pointer to read from sampbuf */ +extern int POKEYSND_sampbuf_last; /* last absolute time */ +extern int POKEYSND_sampbuf_AUDV[4 * POKEY_MAXPOKEYS]; /* prev. channel volume */ +extern int POKEYSND_sampbuf_lastval; /* last volume */ +extern int POKEYSND_sampout; /* last out volume */ +extern int POKEYSND_samp_freq; +extern int POKEYSND_samp_consol_val; /* actual value of console sound */ +#endif /* VOL_ONLY_SOUND */ + +#ifdef SYNCHRONIZED_SOUND +extern UBYTE *POKEYSND_process_buffer; +extern unsigned int POKEYSND_process_buffer_length; +extern unsigned int POKEYSND_process_buffer_fill; +extern void (*POKEYSND_GenerateSync)(unsigned int num_ticks); +int POKEYSND_UpdateProcessBuffer(void); +#endif /* SYNCHRONIZED_SOUND */ + +#ifdef __cplusplus +} + +#endif +#endif /* POKEYSND_H_ */ diff --git a/MCUME_pico/pico5200/rom.h b/MCUME_pico/pico5200/rom.h new file mode 100644 index 0000000..ab0dd4c --- /dev/null +++ b/MCUME_pico/pico5200/rom.h @@ -0,0 +1,131 @@ +// Atari 5200 ROM +const unsigned char BIOSData[] = { + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x18, 0x18, 0x18, 0x0, 0x18, 0x0, + 0x0, 0x66, 0x66, 0x66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x66, 0xFF, 0x66, 0x66, 0xFF, 0x66, 0x0, + 0x18, 0x3E, 0x60, 0x3C, 0x6, 0x7C, 0x18, 0x0, 0x0, 0x66, 0x6C, 0x18, 0x30, 0x66, 0x46, 0x0, + 0x1C, 0x36, 0x1C, 0x38, 0x6F, 0x66, 0x3B, 0x0, 0x0, 0x18, 0x18, 0x18, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xE, 0x1C, 0x18, 0x18, 0x1C, 0xE, 0x0, 0x0, 0x70, 0x38, 0x18, 0x18, 0x38, 0x70, 0x0, + 0x0, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x0, 0x0, 0x0, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x18, 0x30, 0x0, 0x0, 0x0, 0x7E, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x18, 0x0, 0x0, 0x6, 0xC, 0x18, 0x30, 0x60, 0x40, 0x0, + 0x0, 0x3C, 0x66, 0x6E, 0x76, 0x66, 0x3C, 0x0, 0x0, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7E, 0x0, + 0x0, 0x3C, 0x66, 0xC, 0x18, 0x30, 0x7E, 0x0, 0x0, 0x7E, 0xC, 0x18, 0xC, 0x66, 0x3C, 0x0, + 0x0, 0xC, 0x1C, 0x3C, 0x6C, 0x7E, 0xC, 0x0, 0x0, 0x7E, 0x60, 0x7C, 0x6, 0x66, 0x3C, 0x0, + 0x0, 0x3C, 0x60, 0x7C, 0x66, 0x66, 0x3C, 0x0, 0x0, 0x7E, 0x6, 0xC, 0x18, 0x30, 0x30, 0x0, + 0x0, 0x3C, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x0, 0x0, 0x3C, 0x66, 0x3E, 0x6, 0xC, 0x38, 0x0, + 0x0, 0x0, 0x18, 0x18, 0x0, 0x18, 0x18, 0x0, 0x0, 0x0, 0x18, 0x18, 0x0, 0x18, 0x18, 0x30, + 0x6, 0xC, 0x18, 0x30, 0x18, 0xC, 0x6, 0x0, 0x0, 0x0, 0x7E, 0x0, 0x0, 0x7E, 0x0, 0x0, + 0x60, 0x30, 0x18, 0xC, 0x18, 0x30, 0x60, 0x0, 0x0, 0x3C, 0x66, 0xC, 0x18, 0x0, 0x18, 0x0, + 0x0, 0x3C, 0x66, 0x6E, 0x6E, 0x60, 0x3E, 0x0, 0x0, 0x18, 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x0, + 0x0, 0x7C, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x0, 0x0, 0x3C, 0x66, 0x60, 0x60, 0x66, 0x3C, 0x0, + 0x0, 0x78, 0x6C, 0x66, 0x66, 0x6C, 0x78, 0x0, 0x0, 0x7E, 0x60, 0x7C, 0x60, 0x60, 0x7E, 0x0, + 0x0, 0x7E, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x0, 0x0, 0x3E, 0x60, 0x60, 0x6E, 0x66, 0x3E, 0x0, + 0x0, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x0, 0x0, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x0, + 0x0, 0x6, 0x6, 0x6, 0x6, 0x66, 0x3C, 0x0, 0x0, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0x0, + 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x0, 0x0, 0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x0, + 0x0, 0x66, 0x76, 0x7E, 0x7E, 0x6E, 0x66, 0x0, 0x0, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x0, + 0x0, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x0, 0x0, 0x3C, 0x66, 0x66, 0x66, 0x6C, 0x36, 0x0, + 0x0, 0x7C, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x0, 0x0, 0x3C, 0x60, 0x3C, 0x6, 0x6, 0x3C, 0x0, + 0x0, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0, 0x0, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x0, + 0x0, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x0, 0x0, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x0, + 0x0, 0x66, 0x66, 0x3C, 0x3C, 0x66, 0x66, 0x0, 0x0, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x0, + 0x0, 0x7E, 0xC, 0x18, 0x30, 0x60, 0x7E, 0x0, 0x0, 0x1E, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x0, + 0x0, 0x40, 0x60, 0x30, 0x18, 0xC, 0x6, 0x0, 0x0, 0x78, 0x18, 0x18, 0x18, 0x18, 0x78, 0x0, + 0x0, 0x8, 0x1C, 0x36, 0x63, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x0, + 0x0, 0x36, 0x7F, 0x7F, 0x3E, 0x1C, 0x8, 0x0, 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18, 0x18, + 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x0, 0x0, 0x0, + 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18, 0x0, 0x0, 0x0, 0xF8, 0xF8, 0x18, 0x18, 0x18, + 0x3, 0x7, 0xE, 0x1C, 0x38, 0x70, 0xE0, 0xC0, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0xE, 0x7, 0x3, + 0x1, 0x3, 0x7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF, 0x0, 0x0, 0x0, 0x0, 0xF, 0xF, 0xF, 0xF, + 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF, 0xF, 0xF, 0xF, 0xF, 0x0, 0x0, 0x0, 0x0, + 0xF0, 0xF0, 0xF0, 0xF0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x0, 0x0, 0x0, 0xF0, 0xF0, 0xF0, 0xF0, + 0x0, 0x1C, 0x1C, 0x77, 0x77, 0x8, 0x1C, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x1F, 0x18, 0x18, 0x18, + 0x0, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x0, 0x0, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, + 0x0, 0x0, 0x3C, 0x7E, 0x7E, 0x7E, 0x3C, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x0, 0x0, 0x0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, + 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x0, 0x0, 0x0, 0x78, 0x60, 0x78, 0x60, 0x7E, 0x18, 0x1E, 0x0, + 0x0, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x0, 0x0, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x0, + 0x0, 0x18, 0x30, 0x7E, 0x30, 0x18, 0x0, 0x0, 0x0, 0x18, 0xC, 0x7E, 0xC, 0x18, 0x0, 0x0, + 0x0, 0x18, 0x3C, 0x7E, 0x7E, 0x3C, 0x18, 0x0, 0x0, 0x0, 0x3C, 0x6, 0x3E, 0x66, 0x3E, 0x0, + 0x0, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x0, 0x0, 0x0, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x0, + 0x0, 0x6, 0x6, 0x3E, 0x66, 0x66, 0x3E, 0x0, 0x0, 0x0, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x0, + 0x0, 0xE, 0x18, 0x3E, 0x18, 0x18, 0x18, 0x0, 0x0, 0x0, 0x3E, 0x66, 0x66, 0x3E, 0x6, 0x7C, + 0x0, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x0, 0x0, 0x18, 0x0, 0x38, 0x18, 0x18, 0x3C, 0x0, + 0x0, 0x6, 0x0, 0x6, 0x6, 0x6, 0x6, 0x3C, 0x0, 0x60, 0x60, 0x6C, 0x78, 0x6C, 0x66, 0x0, + 0x0, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x0, 0x0, 0x0, 0x66, 0x7F, 0x7F, 0x6B, 0x63, 0x0, + 0x0, 0x0, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x0, 0x0, 0x0, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x0, + 0x0, 0x0, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x0, 0x0, 0x3E, 0x66, 0x66, 0x3E, 0x6, 0x6, + 0x0, 0x0, 0x7C, 0x66, 0x60, 0x60, 0x60, 0x0, 0x0, 0x0, 0x3E, 0x60, 0x3C, 0x6, 0x7C, 0x0, + 0x0, 0x18, 0x7E, 0x18, 0x18, 0x18, 0xE, 0x0, 0x0, 0x0, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x0, + 0x0, 0x0, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x0, 0x0, 0x0, 0x63, 0x6B, 0x7F, 0x3E, 0x36, 0x0, + 0x0, 0x0, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x0, 0x0, 0x0, 0x66, 0x66, 0x66, 0x3E, 0xC, 0x78, + 0x0, 0x0, 0x7E, 0xC, 0x18, 0x30, 0x7E, 0x0, 0x0, 0x18, 0x3C, 0x7E, 0x7E, 0x18, 0x3C, 0x0, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0, 0x7E, 0x78, 0x7C, 0x6E, 0x66, 0x6, 0x0, + 0x8, 0x18, 0x38, 0x78, 0x38, 0x18, 0x8, 0x0, 0x10, 0x18, 0x1C, 0x1E, 0x1C, 0x18, 0x10, 0x0, + 0x6C, 0x0, 0x2, 0x48, 0xA9, 0x20, 0x2C, 0xE, 0xE8, 0xD0, 0xD, 0xA9, 0xDF, 0x8D, 0xE, 0xE8, + 0xA5, 0x0, 0x8D, 0xE, 0xE8, 0x6C, 0x10, 0x2, 0x10, 0x6E, 0x50, 0x79, 0xA9, 0x10, 0x2D, 0xE, + 0xE8, 0xD0, 0xD, 0xA9, 0xEF, 0x8D, 0xE, 0xE8, 0xA5, 0x0, 0x8D, 0xE, 0xE8, 0x6C, 0x12, 0x2, + 0xA9, 0x8, 0x25, 0x0, 0xF0, 0x12, 0x2D, 0xE, 0xE8, 0xD0, 0xD, 0xA9, 0xF7, 0x8D, 0xE, 0xE8, + 0xA5, 0x0, 0x8D, 0xE, 0xE8, 0x6C, 0x14, 0x2, 0xAD, 0xE, 0xE8, 0x6A, 0xB0, 0xD, 0xA9, 0xFE, + 0x8D, 0xE, 0xE8, 0xA5, 0x0, 0x8D, 0xE, 0xE8, 0x6C, 0x16, 0x2, 0x6A, 0xB0, 0xD, 0xA9, 0xFD, + 0x8D, 0xE, 0xE8, 0xA5, 0x0, 0x8D, 0xE, 0xE8, 0x6C, 0x18, 0x2, 0x6A, 0xB0, 0xD, 0xA9, 0xFB, + 0x8D, 0xE, 0xE8, 0xA5, 0x0, 0x8D, 0xE, 0xE8, 0x6C, 0x1A, 0x2, 0x8A, 0x48, 0xBA, 0xBD, 0x3, + 0x1, 0x29, 0x10, 0xF0, 0x2F, 0x6C, 0xE, 0x2, 0xA9, 0x7F, 0x8D, 0xE, 0xE8, 0xA5, 0x0, 0x8D, + 0xE, 0xE8, 0x6C, 0xC, 0x2, 0xA9, 0xBF, 0x8D, 0xE, 0xE8, 0xA5, 0x0, 0x8D, 0xE, 0xE8, 0x6C, + 0x8, 0x2, 0x2C, 0xF, 0xD4, 0x8D, 0xF, 0xD4, 0x30, 0x5, 0x50, 0xB, 0x6C, 0x2, 0x2, 0x6C, + 0x6, 0x2, 0x68, 0xA8, 0x68, 0xAA, 0x68, 0x40, 0x48, 0x8A, 0x48, 0x98, 0x48, 0xE6, 0x2, 0xD0, + 0x4, 0xE6, 0x4, 0xE6, 0x1, 0xA5, 0x3, 0xD0, 0xE9, 0xA5, 0x6, 0x8D, 0x3, 0xD4, 0xA5, 0x5, + 0x8D, 0x2, 0xD4, 0xA5, 0x7, 0x8D, 0x0, 0xD4, 0xA4, 0x4, 0x10, 0x4, 0xA0, 0x80, 0x84, 0x4, + 0xA2, 0x8, 0xB5, 0x8, 0xC0, 0x80, 0x90, 0x4, 0x45, 0x1, 0x29, 0xF6, 0x9D, 0x12, 0xC0, 0xCA, + 0x10, 0xF0, 0xA2, 0x7, 0xBD, 0x0, 0xE8, 0x95, 0x11, 0xCA, 0x10, 0xF8, 0x8D, 0xB, 0xE8, 0x6C, + 0x4, 0x2, 0x8A, 0x48, 0x98, 0x48, 0xAD, 0x9, 0xE8, 0x4A, 0x29, 0xF, 0xAA, 0xBD, 0x13, 0xFD, + 0x6C, 0xA, 0x2, 0xFF, 0xB, 0x0, 0xA, 0xE, 0x9, 0x8, 0x7, 0xD, 0x6, 0x5, 0x4, 0xC, + 0x3, 0x2, 0x1, 0x78, 0xD8, 0xA2, 0xFF, 0x9A, 0xAD, 0xFD, 0xBF, 0xC9, 0xFF, 0xD0, 0x3, 0x6C, + 0xFE, 0xBF, 0xE8, 0x8A, 0x9D, 0x0, 0xE8, 0x9D, 0x0, 0xC0, 0x9D, 0x0, 0xD4, 0x95, 0x0, 0xE8, + 0xD0, 0xF2, 0xA9, 0xF8, 0x8D, 0x9, 0xD4, 0xA2, 0xB, 0xBD, 0x95, 0xFE, 0x9D, 0x0, 0x2, 0xCA, + 0x10, 0xF7, 0xA9, 0x3C, 0x85, 0x12, 0xA9, 0x0, 0x85, 0x11, 0xA2, 0xC, 0xA8, 0x91, 0x11, 0x88, + 0xD0, 0xFB, 0xC6, 0x12, 0xCA, 0x10, 0xF6, 0xA9, 0xD, 0xA2, 0x4D, 0x9D, 0x7, 0x20, 0xCA, 0x10, + 0xFA, 0xA2, 0x6, 0xBD, 0xC8, 0xFE, 0x9D, 0x0, 0x20, 0xCA, 0x10, 0xF7, 0xA2, 0x4, 0xBD, 0xCF, + 0xFE, 0x9D, 0x55, 0x20, 0xCA, 0x10, 0xF7, 0xA9, 0x0, 0x85, 0x5, 0xA9, 0x20, 0x85, 0x6, 0xA9, + 0x22, 0x85, 0x7, 0xA9, 0x30, 0xA8, 0xA9, 0x28, 0xA2, 0x36, 0x9D, 0x0, 0x11, 0x48, 0x98, 0x9D, + 0x0, 0x10, 0x68, 0xCA, 0x30, 0x8, 0x18, 0x69, 0x28, 0x90, 0xEF, 0xC8, 0xB0, 0xEC, 0xA2, 0x13, + 0x86, 0x17, 0xE8, 0x86, 0x18, 0xA9, 0x20, 0x85, 0x13, 0xA9, 0x1, 0x85, 0x15, 0xA9, 0x40, 0x85, + 0x16, 0xC6, 0x13, 0x30, 0x3E, 0xA6, 0x13, 0xBD, 0xE8, 0xFE, 0x85, 0x14, 0xBD, 0x8, 0xFF, 0xAA, + 0xE4, 0x14, 0xF0, 0x1D, 0xBD, 0x0, 0x11, 0x85, 0x11, 0xBD, 0x0, 0x10, 0x85, 0x12, 0xA4, 0x17, + 0xA5, 0x15, 0x11, 0x11, 0x91, 0x11, 0xA4, 0x18, 0xA5, 0x16, 0x11, 0x11, 0x91, 0x11, 0xE8, 0xD0, + 0xDF, 0x6, 0x15, 0x6, 0x15, 0xB0, 0x6, 0x46, 0x16, 0x46, 0x16, 0x90, 0xC4, 0xC6, 0x17, 0xE6, + 0x18, 0xB0, 0xB6, 0xA9, 0x11, 0x85, 0x11, 0xA9, 0x39, 0x85, 0x12, 0xA9, 0x13, 0x85, 0x13, 0xA9, + 0x0, 0x85, 0x15, 0xA9, 0x1, 0xA0, 0xA, 0x85, 0x18, 0xA6, 0x15, 0xE6, 0x15, 0xBD, 0x28, 0xFF, + 0xF0, 0x2A, 0xAA, 0x29, 0xF, 0x85, 0x16, 0x8A, 0x4A, 0x4A, 0x4A, 0x4A, 0xAA, 0xA5, 0x18, 0xA, + 0xA, 0x90, 0x5, 0x91, 0x11, 0xC8, 0xA9, 0x1, 0xCA, 0x10, 0xF4, 0xA6, 0x16, 0x38, 0x2A, 0xA, + 0x90, 0x5, 0x91, 0x11, 0xC8, 0xA9, 0x1, 0xCA, 0x10, 0xF3, 0x30, 0xCB, 0xA5, 0x18, 0xA, 0xA, + 0x90, 0xFC, 0x91, 0x11, 0xA5, 0x11, 0x18, 0x69, 0x28, 0x85, 0x11, 0x90, 0x2, 0xE6, 0x12, 0xC6, + 0x13, 0x10, 0xB0, 0xA2, 0x13, 0xBD, 0xD4, 0xFE, 0x9D, 0x94, 0x3C, 0xBD, 0xE8, 0xBF, 0x9D, 0x80, + 0x3C, 0xCA, 0x10, 0xF1, 0xAD, 0xFC, 0xBF, 0x8D, 0xA0, 0x3C, 0xAD, 0xFD, 0xBF, 0x8D, 0xA1, 0x3C, + 0xA9, 0xF, 0x85, 0xD, 0xA9, 0xC0, 0x8D, 0xE, 0xD4, 0xA9, 0x2, 0x8D, 0xF, 0xE8, 0xE4, 0x2, + 0xD0, 0xFC, 0x6C, 0xFE, 0xBF, 0x3, 0xFC, 0xB8, 0xFC, 0xB2, 0xFC, 0xA1, 0xFE, 0x2, 0xFD, 0xB2, + 0xFC, 0x48, 0x8A, 0x48, 0x98, 0x48, 0xA6, 0x8, 0xA0, 0x72, 0xE0, 0x10, 0xB0, 0x2, 0xA2, 0xFE, + 0x8E, 0xA, 0xD4, 0x8E, 0x16, 0xC0, 0xCA, 0xCA, 0x88, 0xD0, 0xEF, 0xE6, 0x8, 0xA0, 0x10, 0xC4, + 0x8, 0x90, 0x2, 0x84, 0x8, 0x4C, 0xB2, 0xFC, 0x70, 0x70, 0x70, 0x4D, 0x0, 0x30, 0x8D, 0x7, + 0x7, 0x41, 0x0, 0x20, 0x63, 0x6F, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x0, 0x51, 0x59, + 0x58, 0x51, 0x0, 0x61, 0x74, 0x61, 0x72, 0x69, 0x8, 0x8, 0x8, 0x9, 0x9, 0x9, 0xA, 0xA, + 0xB, 0xB, 0xC, 0xD, 0xE, 0xF, 0x10, 0x11, 0x12, 0x14, 0x16, 0x19, 0x1C, 0x1F, 0x36, 0x36, + 0x36, 0x36, 0x0, 0x0, 0x36, 0x36, 0x36, 0x36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, + 0x1, 0x2, 0x2, 0x3, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xE, 0x10, + 0x13, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x92, 0x4E, 0x42, 0x97, 0x52, 0x0, 0x84, 0x3E, + 0x34, 0x79, 0x42, 0x0, 0x76, 0x2E, 0x26, 0x5B, 0x32, 0x0, 0x76, 0x82, 0x86, 0x53, 0x43, 0x22, + 0x0, 0x63, 0x3, 0x72, 0x73, 0x3, 0x42, 0x63, 0x12, 0x0, 0x62, 0x22, 0x72, 0x72, 0x22, 0x42, + 0x72, 0x12, 0x0, 0x62, 0x22, 0x72, 0x72, 0x22, 0x42, 0x72, 0x12, 0x0, 0x52, 0x42, 0x62, 0x62, + 0x42, 0x32, 0x62, 0x22, 0x0, 0x52, 0x42, 0x62, 0x62, 0x42, 0x32, 0x52, 0x32, 0x0, 0x52, 0x42, + 0x62, 0x62, 0x42, 0x32, 0x6, 0x42, 0x0, 0x43, 0x43, 0x52, 0x53, 0x43, 0x22, 0x5, 0x52, 0x0, + 0x42, 0x62, 0x52, 0x52, 0x62, 0x22, 0x5, 0x52, 0x0, 0x42, 0x62, 0x52, 0x52, 0x62, 0x22, 0x42, + 0x42, 0x0, 0x3E, 0x42, 0x4E, 0x12, 0x42, 0x42, 0x0, 0x3E, 0x42, 0x4E, 0x12, 0x52, 0x32, 0x0, + 0x3E, 0x42, 0x4E, 0x12, 0x52, 0x32, 0x0, 0x23, 0x83, 0x32, 0x33, 0x83, 0x2, 0x62, 0x22, 0x0, + 0x22, 0xA2, 0x32, 0x32, 0xA2, 0x2, 0x62, 0x22, 0x0, 0x22, 0xA2, 0x32, 0x32, 0xA2, 0x2, 0x72, + 0x12, 0x0, 0x22, 0xA2, 0x32, 0x32, 0xA2, 0x2, 0x72, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x52, 0x4A, 0x5A, 0x20, 0x31, 0x39, 0x38, 0x32, 0x0, 0xA2, 0xFC, 0x23, 0xFD, 0x0, 0xFC +}; diff --git a/MCUME_pico/pico64/.DS_Store b/MCUME_pico/pico64/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/MCUME_pico/pico64/.DS_Store differ diff --git a/MCUME_pico/pico64/AudioPlaySystem.cpp b/MCUME_pico/pico64/AudioPlaySystem.cpp new file mode 100644 index 0000000..639ad5f --- /dev/null +++ b/MCUME_pico/pico64/AudioPlaySystem.cpp @@ -0,0 +1,176 @@ +#include "emuapi.h" + +#ifdef HAS_SND + +#include "AudioPlaySystem.h" + +#define SAMPLERATE AUDIO_SAMPLE_RATE_EXACT +#define CLOCKFREQ 985248 + +#ifndef CUSTOM_SND +static const short square[]={ +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +}; + +const short noise[] { +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,-32767,-32767, +32767,-32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +}; + +#define NOISEBSIZE 0x100 + +typedef struct +{ + unsigned int spos; + unsigned int sinc; + unsigned int vol; +} Channel; + +static Channel chan[6] = { + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0} }; + +#endif + +volatile bool playing = false; + + +static void snd_Reset(void) +{ +#ifndef CUSTOM_SND + chan[0].vol = 0; + chan[1].vol = 0; + chan[2].vol = 0; + chan[3].vol = 0; + chan[4].vol = 0; + chan[5].vol = 0; + chan[0].sinc = 0; + chan[1].sinc = 0; + chan[2].sinc = 0; + chan[3].sinc = 0; + chan[4].sinc = 0; + chan[5].sinc = 0; +#endif +} + + +#ifdef CUSTOM_SND +//extern "C" { +void SND_Process(void *sndbuffer, int sndn); +//} +#endif + +#include +void AudioPlaySystem::snd_Mixer(short * stream, int len ) +{ + if (playing) + { +#ifdef CUSTOM_SND + //printf("s\n"); + SND_Process((void*)stream, len); +#else + int i; + long s; + len = len >> 1; + short v0=chan[0].vol; + short v1=chan[1].vol; + short v2=chan[2].vol; + short v3=chan[3].vol; + short v4=chan[4].vol; + short v5=chan[5].vol; + for (i=0;i>8)&0x3f])>>11); + s+=((v1*square[(chan[1].spos>>8)&0x3f])>>11); + s+=((v2*square[(chan[2].spos>>8)&0x3f])>>11); + s+=((v3*noise[(chan[3].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v4*noise[(chan[4].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v5*noise[(chan[5].spos>>8)&(NOISEBSIZE-1)])>>11); + *stream++ = (short)(s); + *stream++ = (short)(s); + chan[0].spos += chan[0].sinc; + chan[1].spos += chan[1].sinc; + chan[2].spos += chan[2].sinc; + chan[3].spos += chan[3].sinc; + chan[4].spos += chan[4].sinc; + chan[5].spos += chan[5].sinc; + } +#endif + } +} + +void AudioPlaySystem::begin(void) +{ + this->reset(); +} + +void AudioPlaySystem::start(void) +{ + playing = true; +} + +void AudioPlaySystem::setSampleParameters(float clockfreq, float samplerate) { +} + +void AudioPlaySystem::reset(void) +{ + snd_Reset(); +} + +void AudioPlaySystem::stop(void) +{ + playing = false; +} + +bool AudioPlaySystem::isPlaying(void) +{ + return playing; +} + + + +void AudioPlaySystem::sound(int C, int F, int V) { +#ifndef CUSTOM_SND + if (C < 6) { + chan[C].vol = V; + chan[C].sinc = F>>1; + } +#endif +} + +void AudioPlaySystem::step(void) { +} +#endif diff --git a/MCUME_pico/pico64/AudioPlaySystem.h b/MCUME_pico/pico64/AudioPlaySystem.h new file mode 100644 index 0000000..5d2efc0 --- /dev/null +++ b/MCUME_pico/pico64/AudioPlaySystem.h @@ -0,0 +1,26 @@ +#ifndef audioplaysystem_h_ +#define audioplaysystem_h_ + +#ifdef HAS_SND + +#include "platform_config.h" + +class AudioPlaySystem +{ +public: + AudioPlaySystem(void) { }; + void begin(void); + void setSampleParameters(float clockfreq, float samplerate); + void reset(void); + void start(void); + void stop(void); + bool isPlaying(void); + void sound(int C, int F, int V); + void buzz(int size, int val); + void step(void); + static void snd_Mixer(short * stream, int len ); +}; + +#endif + +#endif diff --git a/MCUME_pico/pico64/IntervalTimer.h b/MCUME_pico/pico64/IntervalTimer.h new file mode 100755 index 0000000..42359dd --- /dev/null +++ b/MCUME_pico/pico64/IntervalTimer.h @@ -0,0 +1,150 @@ +/* Teensyduino Core Library + * http://www.pjrc.com/teensy/ + * Copyright (c) 2017 PJRC.COM, LLC. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * 1. The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * 2. If the Software is incorporated into a build system that allows + * selection among a list of target devices, then similar target + * devices manufactured by PJRC.COM must be included in the list of + * target devices and selectable in the same manner. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + + /* + + Added : + + - void setIntervalFast(float microseconds) + - bool setInterval(float microseconds) + + F.B. + + */ + +#ifndef __INTERVALTIMERX_H__ +#define __INTERVALTIMERX_H__ + +//#include "kinetis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +class MyIntervalTimer { +private: + static const uint32_t MAX_PERIOD = UINT32_MAX / (F_BUS / 1000000.0); +public: + MyIntervalTimer() { + //channel = NULL; + nvic_priority = 128; + } + ~MyIntervalTimer() { + end(); + } + bool begin(void (*funct)(), unsigned int microseconds) { + if (microseconds == 0 || microseconds > MAX_PERIOD) return false; + uint32_t cycles = (F_BUS / 1000000) * microseconds - 1; + if (cycles < 36) return false; + return beginCycles(funct, cycles); + } + bool begin(void (*funct)(), int microseconds) { + if (microseconds < 0) return false; + return begin(funct, (unsigned int)microseconds); + } + bool begin(void (*funct)(), unsigned long microseconds) { + return begin(funct, (unsigned int)microseconds); + } + bool begin(void (*funct)(), long microseconds) { + return begin(funct, (int)microseconds); + } + bool begin(void (*funct)(), float microseconds) { + if (microseconds <= 0 || microseconds > MAX_PERIOD) return false; + uint32_t cycles = (float)(F_BUS / 1000000) * microseconds - 0.5; + if (cycles < 36) return false; + return beginCycles(funct, cycles); + } + bool begin(void (*funct)(), double microseconds) { + return begin(funct, (float)microseconds); + } + + void setIntervalFast(float microseconds) { /*NEW*/ + uint32_t cycles = (float)(F_BUS / 1000000) * microseconds - 0.5; + //channel->LDVAL = cycles; + } + bool setInterval(float microseconds) { /*NEW*/ + //if (!channel) return false; + if (microseconds <= 0 || microseconds > MAX_PERIOD) return false; + setIntervalFast(microseconds); + return true; + } + + void end() {}; + void priority(uint8_t n) { + nvic_priority = n; + #if defined(KINETISK) + /* + if (channel) { + int index = channel - KINETISK_PIT_CHANNELS; + NVIC_SET_PRIORITY(IRQ_PIT_CH0 + index, nvic_priority); + } + */ + #elif defined(KINETISL) + /* + if (channel) { + int index = channel - KINETISK_PIT_CHANNELS; + nvic_priorites[index] = nvic_priority; + if (nvic_priorites[0] <= nvic_priorites[1]) { + NVIC_SET_PRIORITY(IRQ_PIT, nvic_priorites[0]); + } else { + NVIC_SET_PRIORITY(IRQ_PIT, nvic_priorites[1]); + } + } + */ + #endif + } + //operator IRQ_NUMBER_t() { + /* + if (channel) { + #if defined(KINETISK) + int index = channel - KINETISK_PIT_CHANNELS; + return (IRQ_NUMBER_t)(IRQ_PIT_CH0 + index); + #elif defined(KINETISL) + return IRQ_PIT; + #endif + } + */ + //return (IRQ_NUMBER_t)NVIC_NUM_INTERRUPTS; + //} +private: + //KINETISK_PIT_CHANNEL_t *channel; + uint8_t nvic_priority; + #if defined(KINETISL) + static uint8_t nvic_priorites[2]; + #endif + bool beginCycles(void (*funct)(), uint32_t cycles); + +}; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/MCUME_pico/pico64/Teensy64.h b/MCUME_pico/pico64/Teensy64.h new file mode 100644 index 0000000..ea3e085 --- /dev/null +++ b/MCUME_pico/pico64/Teensy64.h @@ -0,0 +1,120 @@ +/* + Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ +#ifndef Teensy64_h_ +#define Teensy64_h_ + +#include +#include +#include + +#include "pico/stdlib.h" + +#define F_CPU 140000000.0 +#define F_BUS 140000000.0 + + +#include "settings.h" + +#define VERSION "09" +#define NTSC (!PAL) +#define USBHOST (!PS2KEYBOARD) + + +extern "C" { + #include "emuapi.h" +} + +#include "vga_t_dma.h" +extern TFT_T_DMA tft; + +inline unsigned long millis() { + return (to_ms_since_boot(get_absolute_time ())); +} + +void initMachine(); +void resetMachine() __attribute__ ((noreturn)); +void resetExternal(); +unsigned loadFile(const char *filename); + + +#if PAL == 1 +#define CRYSTAL 17734475.0f +#define CLOCKSPEED ( CRYSTAL / 18.0f) // 985248,61 Hz +#define CYCLESPERRASTERLINE 63 +#define LINECNT 312 //Rasterlines +#define VBLANK_FIRST 300 +#define VBLANK_LAST 15 + +#else +#define CRYSTAL 14318180.0f +#define CLOCKSPEED ( CRYSTAL / 14.0f) // 1022727,14 Hz +#define CYCLESPERRASTERLINE 64 +#define LINECNT 263 //Rasterlines +#define VBLANK_FIRST 13 +#define VBLANK_LAST 40 +#endif + +#define LINEFREQ (CLOCKSPEED / CYCLESPERRASTERLINE) //Hz +#define REFRESHRATE (LINEFREQ / LINECNT) //Hz +#define LINETIMER_DEFAULT_FREQ (1000000.0f/LINEFREQ) + + +#define MCU_C64_RATIO ((float)F_CPU / CLOCKSPEED) //MCU Cycles per C64 Cycle +#define US_C64_CYCLE (1000000.0f / CLOCKSPEED) // Duration (µs) of a C64 Cycle + +#define AUDIOSAMPLERATE (LINEFREQ * 2)// (~32kHz) + +#define ISR_PRIORITY_RASTERLINE 255 + + + +#if 0 +#define WRITE_ATN_CLK_DATA(value) { \ + digitalWriteFast(PIN_SERIAL_ATN, (~value & 0x08));\//PTA13 IEC ATN 3 +digitalWriteFast(PIN_SERIAL_CLK, (~value & 0x10)); \ //PTA14 IEC CLK 4 +digitalWriteFast(PIN_SERIAL_DATA, (~value & 0x20)); \ //PTA15 IEC DATA 5 +} +#define READ_CLK_DATA() \ + ((digitalReadFast(PIN_SERIAL_CLK) << 6) | \ + (digitalReadFast(PIN_SERIAL_DATA) << 7)) + +#else +#define WRITE_ATN_CLK_DATA(value) {} +#define READ_CLK_DATA() (0) +#endif + +#include "output_dac.h" +#include "cpu.h" +#endif diff --git a/MCUME_pico/pico64/c64.cpp b/MCUME_pico/pico64/c64.cpp new file mode 100644 index 0000000..7b0c2b4 --- /dev/null +++ b/MCUME_pico/pico64/c64.cpp @@ -0,0 +1,327 @@ +#include "pico.h" +#include "pico/stdlib.h" +#include + +extern "C" { +#include "emuapi.h" +#include "platform_config.h" +} + +#include "Teensy64.h" +#include + +#ifdef HAS_SND +#include "reSID.h" +AudioPlaySID playSID; +#endif + +using namespace std; + +/* IRAM_ATTR */ +static void oneRasterLine(void) { + static unsigned short lc = 1; + + while (true) { + + cpu.lineStartTime = get_ccount(); + cpu.lineCycles = cpu.lineCyclesAbs = 0; + + if (!cpu.exactTiming) { + vic_do(); + } else { + vic_do_simple(); + } + + if (--lc == 0) { + lc = LINEFREQ / 10; // 10Hz + cia1_checkRTCAlarm(); + cia2_checkRTCAlarm(); + } + + //Switch "ExactTiming" Mode off after a while: + if (!cpu.exactTiming) break; + if (get_ccount() - cpu.exactTimingStartTime >= EXACTTIMINGDURATION * (F_CPU / 1000)) { + cpu_disableExactTiming(); + break; + } + }; + +} + +const uint32_t ascii2scan[] = { + //0 1 2 3 4 5 6 7 8 9 A B C D E F + 0,0,0,0,0,0,0,0,0,0,0,0,0,0x28,0,0, // return + // 17:down 29:right + 0x00,0x51,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4f,0x00,0x00, + //sp ! " # $ % & ' ( ) * + , - . / + 0x2c,0x201e,0x201f,0x2020,0x2021,0x2022,0x2023,0x2024,0x2025,0x2026,0x55,0x57,0x36,0x56,0x37,0x54, + //0 1 2 3 4 5 6 7 8 9 : ; < = > ? + 0x27,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x33,0x34,0x2036,0x32,0x2037,0x0238, + //@ A B C D E F G H I J K L M N O + 47,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12, + //P Q R S T U V W X Y Z [ \ ] ^ _ + 0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x2026,0x31,0x2027,0x00,0x00, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // ' a b c d e f g h i j k l m n o + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x49,0, // p q r s t u v w x y z { | } ~ DEL + //up left arr 133:f1 f2 f3 f4 f5 f6 f7 f8 + 75,78,0x00,0x00,0x00,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x00,0x00,0x00, // 128-143 + // 145:up 157:left + 0x00,0x2051,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x204f,0x00,0x00 // 144-159 +}; + +// we also use USB matrix for the moment +static const uint8_t keymatrixmap[2][256] = { + //Rows: + // 0 1 2 3 4 5 6 7 8 9 A B C D E F + { 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x04, 0x04, 0x02, 0x04, 0x08, 0x08, 0x10, 0x10, 0x10, 0x20, //0x00 + 0x10, 0x10, 0x10, 0x20, 0x80, 0x04, 0x02, 0x04, 0x08, 0x08, 0x02, 0x04, 0x08, 0x02, 0x80, 0x80, //0x10 + 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x01, 0x80, 0x01, 0x00, 0x80, 0x00, 0x00, 0x20, //0x20 + 0x00, 0x00, 0x40, 0x20, 0x40, 0x00, 0x20, 0x20, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, //0x30 + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x00, 0x00, 0x80, 0x01, //0x40 + 0x00, 0x01, 0x00, 0x00, 0x40, 0x40, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x50 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x60 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x70 + 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x90 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0xA0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0xB0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0xC0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0xD0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0xE0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x02 + }, //0xF0 + //Columns: + // 0 1 2 3 4 5 6 7 8 9 A B C D E F + { 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x10, 0x04, 0x40, 0x20, 0x04, 0x20, 0x02, 0x04, 0x20, 0x04, //0x00 + 0x10, 0x80, 0x40, 0x02, 0x40, 0x02, 0x20, 0x40, 0x40, 0x80, 0x02, 0x80, 0x02, 0x10, 0x01, 0x08, //0x10 + 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0x02, 0x80, 0x01, 0x00, 0x10, 0x00, 0x00, 0x40, //0x20 + 0x00, 0x00, 0x20, 0x20, 0x04, 0x00, 0x80, 0x10, 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, //0x30 + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x40, 0x00, 0x00, 0x02, 0x04, //0x40 + 0x00, 0x80, 0x00, 0x00, 0x80, 0x02, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x50 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x60 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x70 + 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x90 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0xA0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0xB0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0xC0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0xD0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0xE0 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x10, 0x80 + } +}; //0xF0 + +struct { + union { + uint32_t kv; + struct { + uint8_t ke, //Extratasten SHIFT, STRG, ALT... + kdummy, + k, //Erste gedrückte Taste + k2; //Zweite gedrückte Taste + }; + }; + uint32_t lastkv; + uint8_t shiftLock; +} kbdData = {0, 0, 0}; + + + + +static void setKey(uint32_t k, bool pressed) { + if (pressed) { + kbdData.kv = (k << 16); + kbdData.ke = kbdData.k2; + kbdData.k2 = 0; + } + else + { + kbdData.kv = 0; + } +} + +static void pushStringToTextEntry(char * text) { + char c; + while ((c = *text++)) { + setKey(ascii2scan[c], true); + sleep_ms(20); + setKey(ascii2scan[c], false); + sleep_ms(20); + } +} + + +uint8_t cia1PORTA(void) { + + uint8_t v; + + v = ~cpu.cia1.R[0x02] | (cpu.cia1.R[0x00] & cpu.cia1.R[0x02]); + int keys = emu_ReadKeys(); + if (!cpu.swapJoysticks) { + if (keys & MASK_JOY2_BTN) v &= 0xEF; + if (keys & MASK_JOY2_UP) v &= 0xFE; + if (keys & MASK_JOY2_DOWN) v &= 0xFD; + if (keys & MASK_JOY2_RIGHT) v &= 0xFB; + if (keys & MASK_JOY2_LEFT) v &= 0xF7; + } else { + if (keys & MASK_JOY1_BTN) v &= 0xEF; + if (keys & MASK_JOY1_UP) v &= 0xFE; + if (keys & MASK_JOY1_DOWN) v &= 0xFD; + if (keys & MASK_JOY1_RIGHT) v &= 0xFB; + if (keys & MASK_JOY1_LEFT) v &= 0xF7; + } + + + if (!kbdData.kv) return v; //Keine Taste gedrückt + + uint8_t filter = ~cpu.cia1.R[0x01] & cpu.cia1.R[0x03]; + + if (kbdData.k) { + if ( keymatrixmap[1][kbdData.k] & filter) v &= ~keymatrixmap[0][kbdData.k]; + } + + if (kbdData.ke) { + if (kbdData.ke & 0x02) { //Shift-links + if ( keymatrixmap[1][0xff] & filter) v &= ~keymatrixmap[0][0xff]; + } + if (kbdData.ke & 0x20) { //Shift-rechts + if ( keymatrixmap[1][0xfe] & filter) v &= ~keymatrixmap[0][0xfe]; + } + if (kbdData.ke & 0x11) { //Control + if ( keymatrixmap[1][0xfd] & filter) v &= ~keymatrixmap[0][0xfd]; + } + if (kbdData.ke & 0x88) { //Windows (=> Commodore) + if ( keymatrixmap[1][0xfc] & filter) v &= ~keymatrixmap[0][0xfc]; + } + } + + return v; + +} + + +uint8_t cia1PORTB(void) { + + uint8_t v; + + v = ~cpu.cia1.R[0x03] | (cpu.cia1.R[0x00] & cpu.cia1.R[0x02]) ; + + int keys = emu_ReadKeys(); + if (!cpu.swapJoysticks) { + if (keys & MASK_JOY1_BTN) v &= 0xEF; + if (keys & MASK_JOY1_UP) v &= 0xFE; + if (keys & MASK_JOY1_DOWN) v &= 0xFD; + if (keys & MASK_JOY1_RIGHT) v &= 0xFB; + if (keys & MASK_JOY1_LEFT) v &= 0xF7; + } else { + if (keys & MASK_JOY2_BTN) v &= 0xEF; + if (keys & MASK_JOY2_UP) v &= 0xFE; + if (keys & MASK_JOY2_DOWN) v &= 0xFD; + if (keys & MASK_JOY2_RIGHT) v &= 0xFB; + if (keys & MASK_JOY2_LEFT) v &= 0xF7; + } + + if (!kbdData.kv) return v; //Keine Taste gedrückt + + uint8_t filter = ~cpu.cia1.R[0x00] & cpu.cia1.R[0x02]; + + if (kbdData.k) { + if ( keymatrixmap[0][kbdData.k] & filter) v &= ~keymatrixmap[1][kbdData.k]; + } + + if (kbdData.ke) { + if (kbdData.ke & 0x02) { //Shift-links + if ( keymatrixmap[0][0xff] & filter) v &= ~keymatrixmap[1][0xff]; + } + if (kbdData.ke & 0x20) { //Shift-rechts + if ( keymatrixmap[0][0xfe] & filter) v &= ~keymatrixmap[1][0xfe]; + } + if (kbdData.ke & 0x11) { //Control + if ( keymatrixmap[0][0xfd] & filter) v &= ~keymatrixmap[1][0xfd]; + } + if (kbdData.ke & 0x88) { //Windows (=> Commodore) + if ( keymatrixmap[0][0xfc] & filter) v &= ~keymatrixmap[1][0xfc]; + } + } + + return v; +} + + +void c64_Init(void) +{ + disableEventResponder(); + resetPLA(); + resetCia1(); + resetCia2(); + resetVic(); + cpu_reset(); +#ifdef HAS_SND + emu_sndInit(); +#endif +} + + +void c64_Step(void) +{ + oneRasterLine(); +} + +void c64_Start(char * filename) +{ +} + + +static uint8_t nbkeys=0; +static uint8_t kcnt=0; +static bool toggle=true; + +static char * seq="LOAD\"\"\r RUN\r"; + +static bool res=false; + +void c64_Input(int bClick) { + if (nbkeys == 0) { + if (bClick) { + nbkeys = strlen(seq); + kcnt=0; + } + else + { + int hk = emu_ReadI2CKeyboard(); + if ( (hk != 0) && (res == false) ) { + setKey(ascii2scan[hk],true); + res = true; + } + else if (hk == 0){ + setKey(ascii2scan[hk],false); + res = false; + } + } + } + else { + char k = seq[kcnt]; + if (k != ' ') setKey(ascii2scan[k],toggle); + if (!toggle) { + kcnt++; + nbkeys--; + toggle = true; + } + else { + toggle = false; + } + } +} + +void emu_KeyboardOnDown(int keymodifer, int key) { +} + +void emu_KeyboardOnUp(int keymodifer, int key) { +} + +#ifdef HAS_SND +void SND_Process( void * stream, int len ) +{ + playSID.update(stream, len); +} +#endif diff --git a/MCUME_pico/pico64/c64.h b/MCUME_pico/pico64/c64.h new file mode 100644 index 0000000..93525f4 --- /dev/null +++ b/MCUME_pico/pico64/c64.h @@ -0,0 +1,5 @@ +extern void c64_Init(void); +extern void c64_Step(void); +extern void c64_Start(char * filename); +extern void c64_Input(int key); + diff --git a/MCUME_pico/pico64/cia1.cpp b/MCUME_pico/pico64/cia1.cpp new file mode 100755 index 0000000..9c4e749 --- /dev/null +++ b/MCUME_pico/pico64/cia1.cpp @@ -0,0 +1,401 @@ +/* + Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +#include "cpu.h" +#include "cia1.h" +#include + + +#define DEBUGCIA1 0 +#define RTCDEBUG 0 + +#define decToBcd(x) ( ( (uint8_t) (x) / 10 * 16) | ((uint8_t) (x) % 10) ) +#define bcdToDec(x) ( ( (uint8_t) (x) / 16 * 10) | ((uint8_t) (x) % 16) ) +#define tod() (cpu.cia1.TODfrozen?cpu.cia1.TODfrozenMillis:(int)((millis() - cpu.cia1.TOD) % 86400000l)) + +void cia1_setAlarmTime() { + cpu.cia1.TODAlarm = (cpu.cia1.W[0x08] + cpu.cia1.W[0x09] * 10l + cpu.cia1.W[0x0A] * 600l + cpu.cia1.W[0x0B] * 36000l); +} + +void cia1_write(uint32_t address, uint8_t value) { + + address &= 0x0F; + + switch (address) { + case 0x04 : {cpu.cia1.W[address] = value;} ;break; //Timer A LO + case 0x05 : {cpu.cia1.W[address] = value; if ((cpu.cia1.R[0x0E] & 0x01) == 0) cpu.cia1.R[address]=value; };break;//Timer A HI + case 0x06 : {cpu.cia1.W[address] = value;} ;break; //Timer B LO + case 0x07 : {cpu.cia1.W[address] = value; if ((cpu.cia1.R[0x0F] & 0x01) == 0) cpu.cia1.R[address]=value; };break; //Timer B HI + + //RTC + case 0x08 : { + if ((cpu.cia1.R[0x0f] & 0x80)>0) { + value &= 0x0f; + cpu.cia1.W[address] = value; + cia1_setAlarmTime(); + + #if RTCDEBUG + Serial.print("CIA 1 Set Alarm TENTH:"); + Serial.println(value,HEX); + #endif + + } else { + value &= 0x0f; + cpu.cia1.TODstopped=0; + //Translate set Time to TOD: + cpu.cia1.TOD = (int)(millis() % 86400000l) - (value * 100 + cpu.cia1.R[0x09] * 1000l + cpu.cia1.R[0x0A] * 60000l + cpu.cia1.R[0x0B] * 3600000l); + #if RTCDEBUG + Serial.print("CIA 1 Set TENTH:"); + Serial.println(value,HEX); + Serial.print("CIA 1 TOD (millis):"); + Serial.println(cpu.cia1.TOD); + #endif + } + }; + break; //TOD-Tenth + case 0x09 : { + if ((cpu.cia1.R[0x0f] & 0x80)>0) { + cpu.cia1.W[address] = bcdToDec(value); + cia1_setAlarmTime(); + #if RTCDEBUG + Serial.print("CIA 1 Set Alarm SEC:"); + Serial.println(value,HEX); + #endif + + } else { + cpu.cia1.R[address] = bcdToDec(value); + #if RTCDEBUG + Serial.print("CIA 1 Set SEC:"); + Serial.println(value,HEX); + #endif + + } + }; + break; //TOD-Secs + case 0x0A : { + if ((cpu.cia1.R[0x0f] & 0x80)>0) { + cpu.cia1.W[address] = bcdToDec(value); + cia1_setAlarmTime(); + #if RTCDEBUG + Serial.print("CIA 1 Set Alarm MIN:"); + Serial.println(value,HEX); + #endif + + } else { + cpu.cia1.R[address] = bcdToDec(value); + #if RTCDEBUG + Serial.print("CIA 1 Set MIN:"); + Serial.println(value,HEX); + #endif + + } + };break; //TOD-Minutes + case 0x0B : { + if ((cpu.cia1.R[0x0f] & 0x80)>0) { + cpu.cia1.W[address] = bcdToDec(value & 0x1f) + (value & 0x80?12:0); + cia1_setAlarmTime(); + #if RTCDEBUG + Serial.print("CIA 1 Set Alarm HRS:"); + Serial.println(value,HEX); + #endif + + } else { + cpu.cia1.R[address] = bcdToDec(value & 0x1f) + (value & 0x80?12:0); + cpu.cia1.TODstopped=1; + #if RTCDEBUG + Serial.print("CIA 1 Set HRS:"); + Serial.println(value,HEX); + #endif + } + };break; //TOD-Hours + + case 0x0C : { + cpu.cia1.R[address] = value; + //Fake IRQ + cpu.cia1.R[0x0d] |= 8 | ((cpu.cia1.W[0x0d] & 0x08) << 4); + } + ;break; + case 0x0D : { + if ((value & 0x80)>0) { + cpu.cia1.W[address] |= value & 0x1f; + //ggf IRQ triggern + if (cpu.cia1.R[address] & cpu.cia1.W[address] & 0x1f) { + cpu.cia1.R[address] |= 0x80; + }; + } else { + cpu.cia1.W[address] &= ~value; + } + + }; + break; + case 0x0E : {cpu.cia1.R[address] = value & ~0x10; + if ((value & 0x10)>0) { cpu.cia1.R16[0x04/2] = cpu.cia1.W16[0x04/2]; } + }; + break; + case 0x0F : {cpu.cia1.R[address] = value & ~0x10; if ((value & 0x10)>0) { cpu.cia1.R16[0x06/2] = cpu.cia1.W16[0x06/2]; }};break; + default : {cpu.cia1.R[address] = value;/*if (address ==0) {Serial.print(value);Serial.print(" ");}*/ } break; + } + +#if DEBUGCIA1 + if (cpu.pc < 0xa000) Serial.printf("%x CIA1: W %x %x\n", cpu.pc, address, value); +#endif +} + +uint8_t cia1_read(uint32_t address) { +uint8_t ret; + + address &= 0x0F; + + switch (address) { + case 0x00: {ret = cia1PORTA();};break; + case 0x01: {ret = cia1PORTB();};break; + //RTC + case 0x08: { + ret = tod() % 1000 / 10; + cpu.cia1.TODfrozen = 0; + }; + + #if RTCDEBUG + Serial.print("CIA 1 Read TENTH:"); + Serial.println(ret,HEX); + #endif + + break; //Bit 0..3: Zehntelsekunden im BCD-Format ($0-$9) Bit 4..7: immer 0 + case 0x09: { + ret = decToBcd(tod() / 1000 % 60); + }; + //Serial.println( tod() / 100); + #if RTCDEBUG + Serial.print("CIA 1 Read SEC:"); + Serial.println(ret,HEX); + #endif + + break; //Bit 0..3: Einersekunden im BCD-Format ($0-$9) Bit 4..6: Zehnersekunden im BCD-Format ($0-$5) Bit 7: immer 0 + case 0x0A: { + ret = decToBcd(tod() / (1000 * 60) % 60); + }; + #if RTCDEBUG + Serial.print("CIA 1 Read MIN:"); + Serial.println(ret,HEX); + #endif + + break; //Bit 0..3: Einerminuten im BCD-Format( $0-$9) Bit 4..6: Zehnerminuten im BCD-Format ($0-$5) Bit 7: immer 0 + case 0x0B: { + //Bit 0..3: Einerstunden im BCD-Format ($0-$9) Bit 4: Zehnerstunden im BCD-Format ($0-$1) // Bit 7: Unterscheidung AM/PM, 0=AM, 1=PM + //Lesen aus diesem Register friert alle TOD-Register ein (TOD läuft aber weiter), bis Register 8 (TOD 10THS) gelesen wird. + cpu.cia1.TODfrozen = 0; + cpu.cia1.TODfrozenMillis = tod(); + cpu.cia1.TODfrozen = 1; + #if RTCDEBUG + Serial.print("CIA 1 FrozenMillis:"); + Serial.println(cpu.cia1.TODfrozenMillis); + #endif + ret = cpu.cia1.TODfrozenMillis / (1000 * 3600) % 24; + if (ret>=12) + ret = 128 | decToBcd(ret - 12); + else + ret = decToBcd(ret); + }; + #if RTCDEBUG + Serial.print("CIA 1 Read HRS:"); + Serial.println(ret,HEX); + #endif + + break; + + case 0x0D: {ret = cpu.cia1.R[address] & 0x9f; + cpu.cia1.R[address]=0; + }; + break; + + default: ret = cpu.cia1.R[address];break; + } + +#if DEBUGCIA1 + if (cpu.pc < 0xa000) Serial.printf("%x CIA1: R %x %x\n", cpu.pc, address, ret); +#endif +return ret; +} + +#if 0 +void cia1_clock(int clk) { + + uint32_t cnta, cntb, cra, crb; + + //Timer A + cra = cpu.cia1.R[0x0e]; + crb = cpu.cia1.R[0x0f]; + + if (( cra & 0x21) == 0x01) { + cnta = cpu.cia1.R[0x04] | cpu.cia1.R[0x05] << 8; + cnta -= clk; + if (cnta > 0xffff) { //Underflow + cnta = cpu.cia1.W[0x04] | cpu.cia1.W[0x05] << 8; // Reload Timer + if (cra & 0x08) { // One Shot + cpu.cia1.R[0x0e] &= 0xfe; //Stop timer + } + + //Interrupt: + cpu.cia1.R[0x0d] |= 1 /*| (cpu.cia1.W[0x1a] & 0x01) */| ((cpu.cia1.W[0x0d] & 0x01) << 7); + + if ((crb & 0x61)== 0x41) { //Timer B counts underflows of Timer A + cntb = cpu.cia1.R[0x06] | cpu.cia1.R[0x07] << 8; + cntb--; + if (cntb > 0xffff) { //underflow + cpu.cia1.R[0x04] = cnta; + cpu.cia1.R[0x05] = cnta >> 8; + goto underflow_b; + } + } + } + + cpu.cia1.R[0x04] = cnta; + cpu.cia1.R[0x05] = cnta >> 8; + + } + + //Timer B + if (( crb & 0x61) == 0x01) { + cntb = cpu.cia1.R[0x06] | cpu.cia1.R[0x07] << 8; + cntb -= clk; + if (cntb > 0xffff) { //underflow +underflow_b: + cntb = cpu.cia1.W[0x06] | cpu.cia1.W[0x07] << 8; // Reload Timer + if (crb & 0x08) { // One Shot + cpu.cia1.R[0x0f] &= 0xfe; //Stop timer + } + + //Interrupt: + cpu.cia1.R[0x0d] |= 2 /*| (cpu.cia1.W[0x1a] & 0x02) */ | ((cpu.cia1.W[0x0d] & 0x02) << 6); + + } + + cpu.cia1.R[0x06] = cntb; + cpu.cia1.R[0x07] = cntb >> 8; + + } +} +#else + +void cia1_clock(int clk) { + + int32_t t; + uint32_t regFEDC = cpu.cia1.R32[0x0C/4]; + + // TIMER A + //if (((cpu.cia1.R[0x0E] & 0x01)>0) && ((cpu.cia1.R[0x0E] & 0x20)==0)) { + + //if ((regFEDC & 0x210000)==0x10000) { + if (((regFEDC>>16) & 0x21)==0x1) { + t = cpu.cia1.R16[0x04/2]; + + if (clk > t) { //underflow ? + t = cpu.cia1.W16[0x04/2] - (clk - t); + regFEDC |= 0x00000100; + if ((regFEDC & 0x00080000)) regFEDC &= 0xfffeffff; //One-Shot + } + else { + t-=clk; + } + + cpu.cia1.R16[0x04/2] = t; + } + + + // TIMER B + //TODO : Prüfen ob das funktioniert + if ( regFEDC & 0x01000000 ) { + //uint16_t quelle = (cpu.cia1.R[0x0F]>>5) & 0x03; + if ((regFEDC & 0x60000000) == 0x40000000) { + + if (regFEDC & 0x00000100) //unterlauf TimerA? + clk = 1; + else + goto tend; + } + + t = cpu.cia1.R16[0x06/2]; + + if (clk > t) { //underflow ? + t = cpu.cia1.W16[0x06/2] - (clk - t); + regFEDC |= 0x00000200; + if ((regFEDC & 0x08000000)) regFEDC &= 0xfeffffff; + } else { + t -= clk; + } + cpu.cia1.R16[0x06/2] = t; //One-Shot + + } + +tend: + + + // INTERRUPT ? + if ( regFEDC & cpu.cia1.W32[0x0C/4] & 0x0f00 ) { + regFEDC |= 0x8000; + cpu.cia1.R32[0x0C/4]=regFEDC; + } + else cpu.cia1.R32[0x0C/4]=regFEDC; +} + +#endif + +void cia1_checkRTCAlarm() { // call @ 1/10 sec interval minimum + + if ((int)(millis() - cpu.cia1.TOD) % 86400000l/100 == cpu.cia1.TODAlarm) { + //Serial.print("CIA1 RTC interrupt"); + cpu.cia1.R[13] |= 0x4 | ((cpu.cia1.W[13] & 4) << 5); + } +} + +void cia1FLAG(void) { + //Serial.println("CIA1 FLAG interrupt"); + cpu.cia1.R[13] |= 0x10 | ((cpu.cia1.W[13] & 0x10) << 3); +} + +void resetCia1(void) { + memset((uint8_t*)&cpu.cia1.R, 0, sizeof(cpu.cia1.R)); + cpu.cia1.W[0x04] = cpu.cia1.R[0x04] = 0xff; + cpu.cia1.W[0x05] = cpu.cia1.R[0x05] = 0xff; + cpu.cia1.W[0x06] = cpu.cia1.R[0x06] = 0xff; + cpu.cia1.W[0x07] = cpu.cia1.R[0x07] = 0xff; + + //FLAG pin CIA1 - Serial SRQ (input only) + //pinMode(PIN_SERIAL_SRQ, OUTPUT_OPENDRAIN); + //digitalWriteFast(PIN_SERIAL_SRQ, 1); + //attachInterrupt(digitalPinToInterrupt(PIN_SERIAL_SRQ), cia1FLAG, FALLING); +} + + diff --git a/MCUME_pico/pico64/cia1.h b/MCUME_pico/pico64/cia1.h new file mode 100755 index 0000000..ec69047 --- /dev/null +++ b/MCUME_pico/pico64/cia1.h @@ -0,0 +1,33 @@ +#ifndef Teensy64_cia1_h_ +#define Teensy64_cia1_h_ + +struct tcia { + union { + uint8_t R[0x10]; + uint16_t R16[0x10/2]; + uint32_t R32[0x10/4]; + }; + union { + uint8_t W[0x10]; + uint16_t W16[0x10/2]; + uint32_t W32[0x10/4]; + }; + int32_t TOD; + int32_t TODfrozenMillis; + int32_t TODAlarm; + uint8_t TODstopped; + uint8_t TODfrozen; +}; + + +void cia1_clock(int clk) __attribute__ ((hot)); +void cia1_checkRTCAlarm() __attribute__ ((hot)); +void cia1_write(uint32_t address, uint8_t value) __attribute__ ((hot)); +uint8_t cia1_read(uint32_t address) __attribute__ ((hot)); + +void resetCia1(void); + + + + +#endif diff --git a/MCUME_pico/pico64/cia2.cpp b/MCUME_pico/pico64/cia2.cpp new file mode 100755 index 0000000..db71d7d --- /dev/null +++ b/MCUME_pico/pico64/cia2.cpp @@ -0,0 +1,452 @@ +/* + Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +#include "cpu.h" +#include "cia2.h" +#include + +#define DEBUGCIA2 0 +#define RTCDEBUG 0 + +#define decToBcd(x) ( ( (uint8_t) (x) / 10 * 16) | ((uint8_t) (x) % 10) ) +#define bcdToDec(x) ( ( (uint8_t) (x) / 16 * 10) | ((uint8_t) (x) % 16) ) +#define tod() (cpu.cia2.TODfrozen?cpu.cia2.TODfrozenMillis:(int)((millis() - cpu.cia2.TOD) % 86400000l)) + +void cia2_setAlarmTime() { + cpu.cia2.TODAlarm = (cpu.cia2.W[0x08] + cpu.cia2.W[0x09] * 10l + cpu.cia2.W[0x0A] * 600l + cpu.cia2.W[0x0B] * 36000l); +} + +void cia2_write(uint32_t address, uint8_t value) { + + address &= 0x0F; + + switch (address) { + + case 0x00 : { + if ((~value & 0x38)) { + cpu_setExactTiming(); + } + + WRITE_ATN_CLK_DATA(value); + + + cpu.vic.bank = ((~value) & 0x03) * 16384; + vic_adrchange(); + cpu.cia2.R[address] = value; + } + break; + + case 0x01 : + break;//Data PORTB + + case 0x04 : { + cpu.cia2.W[address] = value; + } + break; //Timer A LO + case 0x05 : { + cpu.cia2.W[address] = value; + if ((cpu.cia2.R[0x0E] & 0x01) == 0) cpu.cia2.R[address] = value; + } + break; //Timer A HI + case 0x06 : { + cpu.cia2.W[address] = value; + } + break; //Timer B LO + case 0x07 : { + cpu.cia2.W[address] = value; + if ((cpu.cia2.R[0x0F] & 0x01) == 0) cpu.cia2.R[address] = value; + } + break; //Timer B HI + + //RTC + case 0x08 : { + if ((cpu.cia2.R[0x0f] & 0x80) > 0) { + value &= 0x0f; + cpu.cia2.W[address] = value; + cia2_setAlarmTime(); + +#if RTCDEBUG + Serial.print("CIA 2 Set Alarm TENTH:"); + Serial.println(value, HEX); +#endif + + } else { + value &= 0x0f; + cpu.cia2.TODstopped = 0; + //Translate set Time to TOD: + cpu.cia2.TOD = (int)(millis() % 86400000l) - + (value * 100 + cpu.cia2.R[0x09] * 1000l + cpu.cia2.R[0x0A] * 60000l + cpu.cia2.R[0x0B] * 3600000l); +#if RTCDEBUG + Serial.print("CIA 2 Set TENTH:"); + Serial.println(value, HEX); + Serial.print("CIA 2 TOD (millis):"); + Serial.println(cpu.cia2.TOD); +#endif + } + } + break; //TOD-Tenth + case 0x09 : { + if ((cpu.cia2.R[0x0f] & 0x80) > 0) { + cpu.cia2.W[address] = bcdToDec(value); + cia2_setAlarmTime(); +#if RTCDEBUG + Serial.print("CIA 2 Set Alarm SEC:"); + Serial.println(value, HEX); +#endif + + } else { + cpu.cia2.R[address] = bcdToDec(value); +#if RTCDEBUG + Serial.print("CIA 2 Set SEC:"); + Serial.println(value, HEX); +#endif + + } + } + break; //TOD-Secs + case 0x0A : { + if ((cpu.cia2.R[0x0f] & 0x80) > 0) { + cpu.cia2.W[address] = bcdToDec(value); + cia2_setAlarmTime(); +#if RTCDEBUG + Serial.print("CIA 2 Set Alarm MIN:"); + Serial.println(value, HEX); +#endif + + } else { + cpu.cia2.R[address] = bcdToDec(value); +#if RTCDEBUG + Serial.print("CIA 2 Set MIN:"); + Serial.println(value, HEX); +#endif + + } + } + break; //TOD-Minutes + case 0x0B : { + if ((cpu.cia2.R[0x0f] & 0x80) > 0) { + cpu.cia2.W[address] = bcdToDec(value & 0x1f) + (value & 0x80 ? 12 : 0); + cia2_setAlarmTime(); +#if RTCDEBUG + Serial.print("CIA 2 Set Alarm HRS:"); + Serial.println(value, HEX); +#endif + + } else { + cpu.cia2.R[address] = bcdToDec(value & 0x1f) + (value & 0x80 ? 12 : 0); + cpu.cia2.TODstopped = 1; +#if RTCDEBUG + Serial.print("CIA 2 Set HRS:"); + Serial.println(value, HEX); +#endif + } + } + break; //TOD-Hours + case 0x0C : { + cpu.cia2.R[address] = value; + //Fake IRQ + cpu.cia2.R[0x0d] |= 8 | ((cpu.cia2.W[0x0d] & 0x08) << 4); + cpu_nmi(); + } + break; + case 0x0D : { + if ((value & 0x80) > 0) { + cpu.cia2.W[address] |= value & 0x1f; + //ggf NMItriggern + if (cpu.cia2.R[address] & cpu.cia2.W[address] & 0x1f) { + cpu.cia2.R[address] |= 0x80; + cpu_nmi(); + }; + } else { + cpu.cia2.W[address] &= ~value; + } + } + break; + + case 0x0E : { + cpu.cia2.R[address] = value & ~0x10; + if ((value & 0x10) > 0) { + cpu.cia2.R16[0x04 / 2] = cpu.cia2.W16[0x04 / 2]; + } + } + break; + case 0x0F : { + cpu.cia2.R[address] = value & ~0x10; + if ((value & 0x10) > 0) { + cpu.cia2.R16[0x06 / 2] = cpu.cia2.W16[0x06 / 2]; + } + } + break; + default : { + cpu.cia2.R[address] = value;/*if (address ==0) {Serial.print(value);Serial.print(" ");}*/ + } + break; + } + +#if DEBUGCIA2 + Serial.printf("%x CIA2: W %x %x\n", cpu.pc, address, value); +#endif +} + +uint8_t cia2_read(uint32_t address) { + uint8_t ret; + + address &= 0x0F; + + switch (address) { + + case 0x00 : { + ret = (cpu.cia2.R[address] & 0x3f) | READ_CLK_DATA(); + if ((~ret & 0x3f)) { + cpu_setExactTiming(); + } + + break; + } + + //RTC + case 0x08: { + ret = tod() % 1000 / 10; + cpu.cia2.TODfrozen = 0; + }; + +#if RTCDEBUG + Serial.print("CIA 2 Read TENTH:"); + Serial.println(ret, HEX); +#endif + + break; //Bit 0..3: Zehntelsekunden im BCD-Format ($0-$9) Bit 4..7: immer 0 + case 0x09: { + ret = decToBcd(tod() / 1000 % 60); + }; + //Serial.println( tod() / 100); +#if RTCDEBUG + Serial.print("CIA 2 Read SEC:"); + Serial.println(ret, HEX); +#endif + + break; //Bit 0..3: Einersekunden im BCD-Format ($0-$9) Bit 4..6: Zehnersekunden im BCD-Format ($0-$5) Bit 7: immer 0 + case 0x0A: { + ret = decToBcd(tod() / (1000 * 60) % 60); + }; +#if RTCDEBUG + Serial.print("CIA 2 Read MIN:"); + Serial.println(ret, HEX); +#endif + + break; //Bit 0..3: Einerminuten im BCD-Format( $0-$9) Bit 4..6: Zehnerminuten im BCD-Format ($0-$5) Bit 7: immer 0 + case 0x0B: { + //Bit 0..3: Einerstunden im BCD-Format ($0-$9) Bit 4: Zehnerstunden im BCD-Format ($0-$1) // Bit 7: Unterscheidung AM/PM, 0=AM, 1=PM + //Lesen aus diesem Register friert alle TOD-Register ein (TOD läuft aber weiter), bis Register 8 (TOD 10THS) gelesen wird. + cpu.cia2.TODfrozen = 0; + cpu.cia2.TODfrozenMillis = tod(); + cpu.cia2.TODfrozen = 1; +#if RTCDEBUG + Serial.print("CIA 2 FrozenMillis:"); + Serial.println(cpu.cia2.TODfrozenMillis); +#endif + ret = cpu.cia2.TODfrozenMillis / (1000 * 3600) % 24; + if (ret >= 12) + ret = 128 | decToBcd(ret - 12); + else + ret = decToBcd(ret); + }; +#if RTCDEBUG + Serial.print("CIA 2 Read HRS:"); + Serial.println(ret, HEX); +#endif + + break; + + case 0x0D: { + ret = cpu.cia2.R[address] & 0x9f; + cpu.cia2.R[address] = 0; + cpu_clearNmi(); + }; break; + default: ret = cpu.cia2.R[address]; break; + } + +#if DEBUGCIA2 + Serial.printf("%x CIA2: R %x %x\n", cpu.pc, address, ret); +#endif + return ret; +} + +#if 0 +void cia2_clock(int clk) { + + uint32_t cnta, cntb, cra, crb; + + //Timer A + cra = cpu.cia2.R[0x0e]; + crb = cpu.cia2.R[0x0f]; + + if (( cra & 0x21) == 0x01) { + cnta = cpu.cia2.R[0x04] | cpu.cia2.R[0x05] << 8; + cnta -= clk; + if (cnta > 0xffff) { //Underflow + cnta = cpu.cia2.W[0x04] | cpu.cia2.W[0x05] << 8; // Reload Timer + if (cra & 0x08) { // One Shot + cpu.cia2.R[0x0e] &= 0xfe; //Stop timer + } + + //Interrupt: + cpu.cia2.R[0x0d] |= 1 | /* (cpu.cia2.W[0x0d] & 0x01) |*/ ((cpu.cia2.W[0x0d] & 0x01) << 7); + + if ((crb & 0x61) == 0x41) { //Timer B counts underflows of Timer A + cntb = cpu.cia2.R[0x06] | cpu.cia2.R[0x07] << 8; + cntb--; + if (cntb > 0xffff) { //underflow + cpu.cia2.R[0x04] = cnta & 0x0f; + cpu.cia2.R[0x05] = cnta >> 8; + goto underflow_b; + } + } + } + + cpu.cia2.R[0x04] = cnta & 0x0f; + cpu.cia2.R[0x05] = cnta >> 8; + + } + + //Timer B + if (( crb & 0x61) == 0x01) { + cntb = cpu.cia2.R[0x06] | cpu.cia2.R[0x07] << 8; + cntb -= clk; + if (cntb > 0xffff) { //underflow +underflow_b: + cntb = cpu.cia2.W[0x06] | cpu.cia2.W[0x07] << 8; // Reload Timer + if (crb & 0x08) { // One Shot + cpu.cia2.R[0x0f] &= 0xfe; //Stop timer + } + + //Interrupt: + cpu.cia2.R[0x0d] |= 2 | /*(cpu.cia2.W[0x0d] & 0x02) | */ ((cpu.cia2.W[0x0d] & 0x02) << 6); + } + + cpu.cia2.R[0x06] = cntb & 0x0f; + cpu.cia2.R[0x07] = cntb >> 8; + + } + if (cpu.cia2.R[0x0d] & 0x80) cpu_nmi(); +} + +#else + +void cia2_clock(int clk) { + + int32_t t; + uint32_t regFEDC = cpu.cia2.R32[0x0C / 4]; + + // TIMER A + //if (((cpu.cia2.R[0x0E] & 0x01)>0) && ((cpu.cia2.R[0x0E] & 0x20)==0)) { + //if ((regFEDC & 0x210000)==0x10000) { + if (((regFEDC >> 16) & 0x21) == 0x1) { + + t = cpu.cia2.R16[0x04 / 2]; + + if (clk > t) { //underflow + t = cpu.cia2.W16[0x04 / 2] - (clk - t); //neu + regFEDC |= 0x00000100; + if ((regFEDC & 0x00080000)) regFEDC &= 0xfffeffff; + } + else { + t -= clk; + } + + cpu.cia2.R16[0x04 / 2] = t; + } + + + // TIMER B + //TODO : Prüfen ob das funktioniert + if ( regFEDC & 0x01000000 ) { + //uint16_t quelle = (cpu.cia2.R[0x0F]>>5) & 0x03; + if ((regFEDC & 0x60000000) == 0x40000000) { + + if (regFEDC & 0x00000100) //unterlauf TimerA? + clk = 1; + else + goto tend; + } + + t = cpu.cia2.R16[0x06 / 2]; + + if (clk > t) { //underflow + t = cpu.cia2.W16[0x06 / 2] - (clk - t); //Neu + regFEDC |= 0x00000200; + if ((regFEDC & 0x08000000)) regFEDC &= 0xfeffffff; + } else { + t -= clk; + } + cpu.cia2.R16[0x06 / 2] = t; + + } + +tend: + + + // INTERRUPT ? + if ( regFEDC & cpu.cia2.W32[0x0C / 4] & 0x0f00 ) { + regFEDC |= 0x8000; + cpu.cia2.R32[0x0C / 4] = regFEDC; + } + cpu.cia2.R32[0x0C / 4] = regFEDC; +} +#endif + +void cia2_checkRTCAlarm() { // call every 1/10 sec minimum + if ((int)(millis() - cpu.cia2.TOD) % 86400000l / 100 == cpu.cia2.TODAlarm) { + // Serial.print("CIA2 RTC interrupt"); + // Interrupt + cpu.cia2.R[0x0d] |= 0x4 | (cpu.cia2.W[0x0d] & 4) << 5; + } +} + +void resetCia2(void) { + memset((uint8_t*)&cpu.cia2.R, 0, sizeof(cpu.cia2.R)); + cpu.cia2.R[0x04] = 0xff; + cpu.cia2.R[0x05] = 0xff; + cpu.cia2.R[0x06] = 0xff; + cpu.cia2.R[0x07] = 0xff; + + //pinMode(PIN_SERIAL_ATN, OUTPUT_OPENDRAIN); //ATN OUT (CIA2 PA3 OUT) + //pinMode(PIN_SERIAL_CLK, OUTPUT_OPENDRAIN); //CLK (CIA2 PA6:IN PA4: OUT) + //pinMode(PIN_SERIAL_DATA, OUTPUT_OPENDRAIN); //DATA (CIA2 PA7:IN PA5: OUT) + //digitalWriteFast(PIN_SERIAL_ATN, 1); + //digitalWriteFast(PIN_SERIAL_CLK, 1); + //digitalWriteFast(PIN_SERIAL_DATA, 1); + +} diff --git a/MCUME_pico/pico64/cia2.h b/MCUME_pico/pico64/cia2.h new file mode 100755 index 0000000..1c21cb5 --- /dev/null +++ b/MCUME_pico/pico64/cia2.h @@ -0,0 +1,47 @@ +/* + Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +#ifndef Teensy64_cia2_h_ +#define Teensy64_cia2_h_ + + +void cia2_clock(int clk) __attribute__ ((hot)); +void cia2_checkRTCAlarm() __attribute__ ((hot)); +void cia2_write(uint32_t address, uint8_t value) __attribute__ ((hot)); +uint8_t cia2_read(uint32_t address) __attribute__ ((hot)); + +void resetCia2(void); + +#endif diff --git a/MCUME_pico/pico64/cpu.cpp b/MCUME_pico/pico64/cpu.cpp new file mode 100755 index 0000000..82547a3 --- /dev/null +++ b/MCUME_pico/pico64/cpu.cpp @@ -0,0 +1,2717 @@ +/* + Copyright Mike Chambers, Frank Bösing, 2017 + Parts of this file are based on "Fake6502 CPU emulator core v1.1" by Mike Chambers + + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +/* Fake6502 CPU emulator core v1.1 ******************* + * (c)2011 Mike Chambers (miker00lz@gmail.com) * + ***************************************************** + * LICENSE: This source code is released into the * + * public domain, but if you use it please do give * + * credit. I put a lot of effort into writing this! * + * * + ***************************************************** +*/ + +#include "cpu.h" + +#define FLAG_CARRY 0x01 +#define FLAG_ZERO 0x02 +#define FLAG_INTERRUPT 0x04 +#define FLAG_DECIMAL 0x08 +#define FLAG_BREAK 0x10 +#define FLAG_CONSTANT 0x20 +#define FLAG_OVERFLOW 0x40 +#define FLAG_SIGN 0x80 + +//flag modifier macros +#define setcarry() cpu.cpustatus |= FLAG_CARRY +#define clearcarry() cpu.cpustatus &= (~FLAG_CARRY) +#define setzero() cpu.cpustatus |= FLAG_ZERO +#define clearzero() cpu.cpustatus &= (~FLAG_ZERO) +#define setinterrupt() cpu.cpustatus |= FLAG_INTERRUPT +#define clearinterrupt() cpu.cpustatus &= (~FLAG_INTERRUPT) +#define setdecimal() cpu.cpustatus |= FLAG_DECIMAL +#define cleardecimal() cpu.cpustatus &= (~FLAG_DECIMAL) +#define setoverflow() cpu.cpustatus |= FLAG_OVERFLOW +#define clearoverflow() cpu.cpustatus &= (~FLAG_OVERFLOW) +#define setsign() cpu.cpustatus |= FLAG_SIGN +#define clearsign() cpu.cpustatus &= (~FLAG_SIGN) + + +//flag calculation macros +#define zerocalc(n) { if ((n) & 0x00FF) clearzero(); else setzero(); } +//#define signcalc(n) { if ((n) & 0x0080) setsign(); else clearsign(); } +#define signcalc(n) { cpu.cpustatus =( cpu.cpustatus & 0x7f) | (n & 0x80); } +#define carrycalc(n) { if ((n) & 0xFF00) setcarry(); else clearcarry(); } +//#define carrycalc(n) {cpu.cpustatus =( cpu.cpustatus & 0xfe) | (n >> 8); } +#define overflowcalc(n, m, o) { if (((n) ^ (uint16_t)(m)) & ((n) ^ (o)) & 0x0080) setoverflow(); else clearoverflow(); } + +#define saveaccum(n) cpu.a = (uint8_t)((n) & 0x00FF) + +#define UNSUPPORTED { printf("Unsupported Opcode\n"); while(1){;} } + +void logAddr(const uint32_t address, const uint8_t value, const uint8_t rw) { + if (rw) printf("Write "); else printf("Read "); + printf("0x%d=0x%d\n",address,value); + +} +struct tcpu cpu; +struct tio io; + +void reset6502(); +void cpu_nmi(); +static inline void cpu_irq(); + +INLINEOP uint8_t read6502(const uint32_t address) __attribute__ ((hot)); +INLINEOP uint8_t read6502(const uint32_t address) { + return (*cpu.plamap_r)[address >> 8](address); +} + +INLINEOP uint8_t read6502ZP(const uint32_t address) __attribute__ ((hot)); //Zeropage +INLINEOP uint8_t read6502ZP(const uint32_t address) { + return cpu.RAM[address & 0xff]; +} + +/* Ein Schreibzugriff auf einen ROM-Bereich speichert das Byte im „darunterliegenden†RAM. */ +INLINEOP void write6502(const uint32_t address, const uint8_t value) __attribute__ ((hot)); +INLINEOP void write6502(const uint32_t address, const uint8_t value) { + (*cpu.plamap_w)[address>>8](address, value); +} + +//a few general functions used by various other functions +INLINEOP void push16(const uint16_t pushval) { + cpu.RAM[BASE_STACK + cpu.sp] = (pushval >> 8) & 0xFF; + cpu.RAM[BASE_STACK + ((cpu.sp - 1) & 0xFF)] = pushval & 0xFF; + cpu.sp -= 2; +} + +INLINEOP uint16_t pull16() { + uint16_t temp16; + temp16 = cpu.RAM[BASE_STACK + ((cpu.sp + 1) & 0xFF)] | ((uint16_t)cpu.RAM[BASE_STACK + ((cpu.sp + 2) & 0xFF)] << 8); + cpu.sp += 2; + return(temp16); +} + +INLINEOP void push8(uint8_t pushval) { + cpu.RAM[BASE_STACK + (cpu.sp--)] = pushval; + +} + +INLINEOP uint8_t pull8() { + return cpu.RAM[BASE_STACK + (++cpu.sp)]; +} + +/********************************************************************************************************************/ +/*addressing mode functions, calculates effective addresses */ +/********************************************************************************************************************/ + +INLINEOP void imp() { //implied +} + +INLINEOP void acc() { //accumulator +} + +INLINEOP void imm() { //immediate + cpu.ea = cpu.pc++; +} + +INLINEOP void zp() { //zero-page + cpu.ea = read6502(cpu.pc++) & 0xFF; +} + +INLINEOP void zpx() { //zero-page,X + cpu.ea = (read6502(cpu.pc++) + cpu.x) & 0xFF; //zero-page wraparound +} + +INLINEOP void zpy() { //zero-page,Y + cpu.ea = (read6502(cpu.pc++) + cpu.y) & 0xFF; //zero-page wraparound +} + +INLINEOP void rel() { //relative for branch ops (8-bit immediate value, sign-extended) + cpu.reladdr = read6502(cpu.pc++); + if (cpu.reladdr & 0x80) cpu.reladdr |= 0xFF00; +} + +INLINEOP void abso() { //absolute + cpu.ea = read6502(cpu.pc) | (read6502(cpu.pc + 1) << 8); + cpu.pc += 2; +} + +INLINEOP void absx() { //absolute,X + cpu.ea = (read6502(cpu.pc) | (read6502(cpu.pc + 1) << 8)) + cpu.x; + cpu.pc += 2; +} + +INLINEOP void absx_t() { //absolute,X with extra cycle + uint16_t h = read6502(cpu.pc) + cpu.x; + if (h & 0x100) cpu.ticks += 1; + cpu.ea = h + (read6502(cpu.pc + 1) << 8); + cpu.pc += 2; +} + +INLINEOP void absy() { //absolute,Y + cpu.ea = (read6502(cpu.pc) + (read6502(cpu.pc + 1) << 8)) + cpu.y; + cpu.pc += 2; +} + +INLINEOP void absy_t() { //absolute,Y with extra cycle + uint16_t h = read6502(cpu.pc) + cpu.y; + if (h & 0x100) cpu.ticks += 1; + cpu.ea = h + (read6502(cpu.pc + 1) << 8); + cpu.pc += 2; +} + +INLINEOP void ind() { //indirect + uint16_t eahelp, eahelp2; + eahelp = read6502(cpu.pc) | (read6502(cpu.pc + 1) << 8); + eahelp2 = (eahelp & 0xFF00) | ((eahelp + 1) & 0x00FF); //replicate 6502 page-boundary wraparound bug + cpu.ea = read6502(eahelp) | (read6502(eahelp2) << 8); + cpu.pc += 2; +} + +INLINEOP void indx() { // (indirect,X) + uint32_t eahelp; + eahelp = (read6502(cpu.pc++) + cpu.x) & 0xFF; //zero-page wraparound for table pointer + cpu.ea = read6502ZP((uint8_t)eahelp) | (read6502ZP((uint8_t)(eahelp + 1)) << 8); +} + +INLINEOP void indy() { // (zeropage indirect),Y + uint8_t zp = read6502(cpu.pc++); + cpu.ea = read6502ZP((uint16_t) zp++); + cpu.ea += (uint16_t) read6502ZP((uint16_t) zp) << 8; + cpu.ea += cpu.y; +} + +INLINEOP void indy_t() { // (zeropage indirect),Y with extra cycle + uint8_t zp = read6502(cpu.pc++); + uint16_t h; + h = read6502ZP((uint16_t) zp++); + h += (uint16_t) read6502ZP((uint16_t) zp) << 8; + if (((h + cpu.y) & 0xff) != (h & 0xff)) cpu.ticks += 1; + cpu.ea = h + cpu.y; +} + +INLINEOP uint32_t getvalue() __attribute__ ((hot)); +INLINEOP uint32_t getvalue() { + return read6502(cpu.ea); +} + +INLINEOP uint32_t getvalueZP() __attribute__ ((hot)); +INLINEOP uint32_t getvalueZP() { + return read6502ZP(cpu.ea); +} + +INLINEOP void putvalue(const uint8_t saveval) __attribute__ ((hot)); +INLINEOP void putvalue(const uint8_t saveval) { + write6502(cpu.ea, saveval); +} + + +/********************************************************************************************************************/ +/* instruction handler functions */ +/********************************************************************************************************************/ + +/* +Aliases used in other illegal opcode sources: + +SLO = ASO +SRE = LSE +ISC = ISB +ALR = ASR +SHX = A11 (A11 was a result of only having tested this one on adress $1000) +SHY = A11 +LAS = LAR +KIL = JAM, HLT +*/ + +#define SETFLAGS(data) \ +{ \ + if (!(data)) \ + cpu.cpustatus = (cpu.cpustatus & ~FLAG_SIGN) | FLAG_ZERO; \ + else \ + cpu.cpustatus = (cpu.cpustatus & ~(FLAG_SIGN|FLAG_ZERO)) | \ + ((data) & FLAG_SIGN); \ +} + + +INLINEOP void _adc(unsigned data) { + unsigned tempval = data; + unsigned temp; + if (cpu.cpustatus & FLAG_DECIMAL) { + temp = (cpu.a & 0x0f) + (tempval & 0x0f) + (cpu.cpustatus & FLAG_CARRY); + if (temp > 9) temp += 6; + if (temp <= 0x0f) + temp = (temp & 0xf) + (cpu.a & 0xf0) + (tempval & 0xf0); + else + temp = (temp & 0xf) + (cpu.a & 0xf0) + (tempval & 0xf0) + 0x10; + if (!((cpu.a + tempval + (cpu.cpustatus & FLAG_CARRY)) & 0xff)) + setzero(); + else + clearzero(); + signcalc(temp); + if (((cpu.a ^ temp) & 0x80) && !((cpu.a ^ tempval) & 0x80)) + setoverflow(); + else + clearoverflow(); + if ((temp & 0x1f0) > 0x90) temp += 0x60; + if ((temp & 0xff0) > 0xf0) + setcarry(); + else + clearcarry(); + } else { + temp = tempval + cpu.a + (cpu.cpustatus & FLAG_CARRY); + SETFLAGS(temp & 0xff); + if (!((cpu.a ^ tempval) & 0x80) && ((cpu.a ^ temp) & 0x80)) + setoverflow(); + else + clearoverflow(); + if (temp > 0xff) + setcarry(); + else + clearcarry(); + } + saveaccum(temp); +} + +INLINEOP void _sbc(unsigned data) { + unsigned tempval = data; + unsigned temp; + + temp = cpu.a - tempval - ((cpu.cpustatus & FLAG_CARRY) ^ FLAG_CARRY); + + if (cpu.cpustatus & FLAG_DECIMAL) { + unsigned tempval2; + tempval2 = (cpu.a & 0x0f) - (tempval & 0x0f) - ((cpu.cpustatus & FLAG_CARRY) ^ FLAG_CARRY); + if (tempval2 & 0x10) + tempval2 = ((tempval2 - 6) & 0xf) | ((cpu.a & 0xf0) - (tempval & 0xf0) - 0x10); + else + tempval2 = (tempval2 & 0xf) | ((cpu.a & 0xf0) - (tempval & 0xf0)); + if (tempval2 & 0x100) + tempval2 -= 0x60; + if (temp < 0x100) + setcarry(); + else + clearcarry(); + SETFLAGS(temp & 0xff); + if (((cpu.a ^ temp) & 0x80) && ((cpu.a ^ tempval) & 0x80)) + setoverflow(); + else + clearoverflow(); + saveaccum(tempval2); + } else { + SETFLAGS(temp & 0xff); + if (temp < 0x100) + setcarry(); + else + clearcarry(); + if (((cpu.a ^ temp) & 0x80) && ((cpu.a ^ tempval) & 0x80)) + setoverflow(); + else + clearoverflow(); + saveaccum(temp); + } + +} + +INLINEOP void adc() { + unsigned data = getvalue(); + _adc(data); +} + +INLINEOP void adcZP() { + unsigned data = getvalueZP(); + _adc(data); + +} + +INLINEOP void op_and() { + uint32_t result = cpu.a & getvalue(); + zerocalc(result); + signcalc(result); + saveaccum(result); +} + +INLINEOP void op_andZP() { + uint32_t result = cpu.a & getvalueZP(); + zerocalc(result); + signcalc(result); + saveaccum(result); +} + +INLINEOP void asl() { + uint32_t result = getvalue(); + result <<=1; + carrycalc(result); + zerocalc(result); + signcalc(result); + putvalue(result); +} + +INLINEOP void aslZP() { + uint32_t result = getvalueZP(); + result <<=1; + carrycalc(result); + zerocalc(result); + signcalc(result); + putvalue(result); +} + +INLINEOP void asla() { + uint32_t result = cpu.a << 1; + carrycalc(result); + zerocalc(result); + signcalc(result); + saveaccum(result); +} + +INLINEOP void bcc() { + if ((cpu.cpustatus & FLAG_CARRY) == 0) { + uint32_t oldpc = cpu.pc; + cpu.pc += cpu.reladdr; + if ((oldpc & 0xFF00) != (cpu.pc & 0xFF00)) cpu.ticks += 2; //check if jump crossed a page boundary + else cpu.ticks++; + } +} + +INLINEOP void bcs() { + if ((cpu.cpustatus & FLAG_CARRY) == FLAG_CARRY) { + uint32_t oldpc = cpu.pc; + cpu.pc += cpu.reladdr; + if ((oldpc & 0xFF00) != (cpu.pc & 0xFF00)) cpu.ticks += 2; //check if jump crossed a page boundary + else cpu.ticks++; + } +} + +INLINEOP void beq() { + if ((cpu.cpustatus & FLAG_ZERO) == FLAG_ZERO) { + uint32_t oldpc = cpu.pc; + cpu.pc += cpu.reladdr; + if ((oldpc & 0xFF00) != (cpu.pc & 0xFF00)) cpu.ticks += 2; //check if jump crossed a page boundary + else cpu.ticks++; + } +} + +INLINEOP void op_bit() { + unsigned value = getvalue(); + cpu.cpustatus = (cpu.cpustatus & ~(FLAG_SIGN|FLAG_OVERFLOW)) | (value & (FLAG_SIGN|FLAG_OVERFLOW)); + if (!(value & cpu.a)) + setzero(); + else + clearzero(); +/* + uint32_t value = getvalue(); + uint32_t result = (uint16_t)cpu.a & value; + + zerocalc(result); + cpu.cpustatus = (cpu.cpustatus & 0x3F) | (uint8_t)(value & 0xC0); +*/ +} + +INLINEOP void op_bitZP() { + unsigned value = getvalueZP(); + cpu.cpustatus = (cpu.cpustatus & ~(FLAG_SIGN|FLAG_OVERFLOW)) | (value & (FLAG_SIGN|FLAG_OVERFLOW)); + if (!(value & cpu.a)) + setzero(); + else + clearzero(); +} + +INLINEOP void bmi() { + if ((cpu.cpustatus & FLAG_SIGN) == FLAG_SIGN) { + uint32_t oldpc = cpu.pc; + cpu.pc += cpu.reladdr; + if ((oldpc & 0xFF00) != (cpu.pc & 0xFF00)) cpu.ticks += 2; //check if jump crossed a page boundary + else cpu.ticks++; + } +} + +INLINEOP void bne() { + if ((cpu.cpustatus & FLAG_ZERO) == 0) { + uint32_t oldpc = cpu.pc; + cpu.pc += cpu.reladdr; + if ((oldpc & 0xFF00) != (cpu.pc & 0xFF00)) cpu.ticks += 2; //check if jump crossed a page boundary + else cpu.ticks++; + } +} + +INLINEOP void bpl() { + if ((cpu.cpustatus & FLAG_SIGN) == 0) { + uint32_t oldpc = cpu.pc; + cpu.pc += cpu.reladdr; + if ((oldpc & 0xFF00) != (cpu.pc & 0xFF00)) cpu.ticks += 2; //check if jump crossed a page boundary + else cpu.ticks++; + } +} + +INLINEOP void brk() { + cpu.pc++; + push16(cpu.pc); //push next instruction address onto stack + push8(cpu.cpustatus | FLAG_BREAK); //push CPU cpustatus to stack + setinterrupt(); //set interrupt flag + cpu.pc = read6502(0xFFFE) | (read6502(0xFFFF) << 8); +} + +INLINEOP void bvc() { + if ((cpu.cpustatus & FLAG_OVERFLOW) == 0) { + uint32_t oldpc = cpu.pc; + cpu.pc += cpu.reladdr; + if ((oldpc & 0xFF00) != (cpu.pc & 0xFF00)) cpu.ticks += 2; //check if jump crossed a page boundary + else cpu.ticks++; + } +} + +INLINEOP void bvs() { + if ((cpu.cpustatus & FLAG_OVERFLOW) == FLAG_OVERFLOW) { + uint32_t oldpc = cpu.pc; + cpu.pc += cpu.reladdr; + if ((oldpc & 0xFF00) != (cpu.pc & 0xFF00)) cpu.ticks += 2; //check if jump crossed a page boundary + else cpu.ticks++; + } +} + +INLINEOP void clc() { + clearcarry(); +} + +INLINEOP void cld() { + cleardecimal(); +} + +INLINEOP void cli_() { + clearinterrupt(); +} + +INLINEOP void clv() { + clearoverflow(); +} + +INLINEOP void cmp() { + uint16_t value = getvalue(); + uint32_t result = (uint16_t)cpu.a - value; + + if (cpu.a >= (uint8_t)(value & 0x00FF)) setcarry(); + else clearcarry(); + if (cpu.a == (uint8_t)(value & 0x00FF)) setzero(); + else clearzero(); + signcalc(result); +} + +INLINEOP void cmpZP() { + uint16_t value = getvalueZP(); + uint32_t result = (uint16_t)cpu.a - value; + + if (cpu.a >= (uint8_t)(value & 0x00FF)) setcarry(); + else clearcarry(); + if (cpu.a == (uint8_t)(value & 0x00FF)) setzero(); + else clearzero(); + signcalc(result); +} + +INLINEOP void cpx() { + uint16_t value = getvalue(); + uint16_t result = (uint16_t)cpu.x - value; + + if (cpu.x >= (uint8_t)(value & 0x00FF)) setcarry(); + else clearcarry(); + if (cpu.x == (uint8_t)(value & 0x00FF)) setzero(); + else clearzero(); + signcalc(result); +} + +INLINEOP void cpxZP() { + uint16_t value = getvalueZP(); + uint16_t result = (uint16_t)cpu.x - value; + + if (cpu.x >= (uint8_t)(value & 0x00FF)) setcarry(); + else clearcarry(); + if (cpu.x == (uint8_t)(value & 0x00FF)) setzero(); + else clearzero(); + signcalc(result); +} + +INLINEOP void cpy() { + uint16_t value = getvalue(); + uint16_t result = (uint16_t)cpu.y - value; + + if (cpu.y >= (uint8_t)(value & 0x00FF)) setcarry(); + else clearcarry(); + if (cpu.y == (uint8_t)(value & 0x00FF)) setzero(); + else clearzero(); + signcalc(result); +} + +INLINEOP void cpyZP() { + uint16_t value = getvalueZP(); + uint16_t result = (uint16_t)cpu.y - value; + + if (cpu.y >= (uint8_t)(value & 0x00FF)) setcarry(); + else clearcarry(); + if (cpu.y == (uint8_t)(value & 0x00FF)) setzero(); + else clearzero(); + signcalc(result); +} + +INLINEOP void dec() { + uint32_t result = getvalue() - 1; + + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +INLINEOP void decZP() { + uint32_t result = getvalueZP() - 1; + + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +INLINEOP void dex() { + cpu.x--; + + zerocalc(cpu.x); + signcalc(cpu.x); +} + +INLINEOP void dey() { + cpu.y--; + + zerocalc(cpu.y); + signcalc(cpu.y); +} + +INLINEOP void eor() { + uint32_t result = cpu.a ^ getvalue(); + + zerocalc(result); + signcalc(result); + + saveaccum(result); +} + +INLINEOP void eorZP() { + uint32_t result = cpu.a ^ getvalueZP(); + + zerocalc(result); + signcalc(result); + + saveaccum(result); +} + +INLINEOP void inc() { + uint32_t result = getvalue() + 1; + + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +INLINEOP void incZP() { + uint32_t result = getvalueZP() + 1; + + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +INLINEOP void inx() { + cpu.x++; + + zerocalc(cpu.x); + signcalc(cpu.x); +} + +INLINEOP void iny() { + cpu.y++; + + zerocalc(cpu.y); + signcalc(cpu.y); +} + +INLINEOP void jmp() { + cpu.pc = cpu.ea; +} + +INLINEOP void jsr() { + push16(cpu.pc - 1); + cpu.pc = cpu.ea; +} + +INLINEOP void lda() { + cpu.a = getvalue(); + + zerocalc(cpu.a); + signcalc(cpu.a); +} + +INLINEOP void ldaZP() { + cpu.a = getvalueZP(); + + zerocalc(cpu.a); + signcalc(cpu.a); +} + +INLINEOP void ldx() { + cpu.x = getvalue(); + + zerocalc(cpu.x); + signcalc(cpu.x); +} + +INLINEOP void ldxZP() { + cpu.x = getvalue(); + + zerocalc(cpu.x); + signcalc(cpu.x); +} + +INLINEOP void ldy() { + cpu.y = getvalue(); + + zerocalc(cpu.y); + signcalc(cpu.y); +} + +INLINEOP void ldyZP() { + cpu.y = getvalueZP(); + + zerocalc(cpu.y); + signcalc(cpu.y); +} + +INLINEOP void lsr() { + uint32_t value = getvalue(); + uint32_t result = value >> 1; + + if (value & 1) setcarry(); + else clearcarry(); + zerocalc(result); + //clearsign(); + signcalc(result); + + putvalue(result); +} + +INLINEOP void lsrZP() { + uint32_t value = getvalue(); + uint32_t result = value >> 1; + + if (value & 1) setcarry(); + else clearcarry(); + zerocalc(result); + //clearsign(); + signcalc(result); + + putvalue(result); +} + +INLINEOP void lsra() { + uint8_t value = cpu.a; + uint8_t result = value >> 1; + + if (value & 1) setcarry(); + else clearcarry(); + zerocalc(result); + //clearsign(); + signcalc(result); + saveaccum(result); +} + +INLINEOP void ora() { + + uint32_t result = cpu.a | getvalue(); + + zerocalc(result); + signcalc(result); + + saveaccum(result); +} + +INLINEOP void oraZP() { + + uint32_t result = cpu.a | getvalueZP(); + + zerocalc(result); + signcalc(result); + + saveaccum(result); +} + +INLINEOP void pha() { + push8(cpu.a); +} + +INLINEOP void php() { + push8(cpu.cpustatus | FLAG_BREAK); +} + +INLINEOP void pla() { + cpu.a = pull8(); + + zerocalc(cpu.a); + signcalc(cpu.a); +} + +INLINEOP void plp() { + cpu.cpustatus = (pull8() & 0xef) | FLAG_CONSTANT; +} + +INLINEOP void rol() { + uint16_t value = getvalue(); + uint16_t result = (value << 1) | (cpu.cpustatus & FLAG_CARRY); + + carrycalc(result); + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +INLINEOP void rolZP() { + uint16_t value = getvalueZP(); + uint16_t result = (value << 1) | (cpu.cpustatus & FLAG_CARRY); + + carrycalc(result); + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +INLINEOP void rola() { + uint16_t value = cpu.a; + uint16_t result = (value << 1) | (cpu.cpustatus & FLAG_CARRY); + + carrycalc(result); + zerocalc(result); + signcalc(result); + saveaccum(result); +} + +INLINEOP void ror() { + uint32_t value = getvalue(); + uint16_t result = (value >> 1) | ((cpu.cpustatus & FLAG_CARRY) << 7); + + if (value & 1) setcarry(); + else clearcarry(); + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +INLINEOP void rorZP() { + uint32_t value = getvalueZP(); + uint16_t result = (value >> 1) | ((cpu.cpustatus & FLAG_CARRY) << 7); + + if (value & 1) setcarry(); + else clearcarry(); + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +INLINEOP void rora() { + uint32_t value = cpu.a; + uint16_t result = (value >> 1) | ((cpu.cpustatus & FLAG_CARRY) << 7); + + if (value & 1) setcarry(); + else clearcarry(); + zerocalc(result); + signcalc(result); + saveaccum(result); +} + + +INLINEOP void rti() { + cpu.cpustatus = pull8(); + cpu.pc = pull16(); +} + +INLINEOP void rts() { + cpu.pc = pull16() + 1; +} + +INLINEOP void sbc() { + unsigned data = getvalue(); + _sbc(data); +} + +INLINEOP void sbcZP() { + unsigned data = getvalueZP(); + _sbc(data); +} + + +INLINEOP void sec() { + setcarry(); +} + +INLINEOP void sed() { + setdecimal(); +} + +INLINEOP void sei_() { + setinterrupt(); +} + +INLINEOP void sta() { + putvalue(cpu.a); +} + +INLINEOP void stx() { + putvalue(cpu.x); +} + +INLINEOP void sty() { + putvalue(cpu.y); +} + +INLINEOP void tax() { + cpu.x = cpu.a; + + zerocalc(cpu.x); + signcalc(cpu.x); +} + +INLINEOP void tay() { + cpu.y = cpu.a; + + zerocalc(cpu.y); + signcalc(cpu.y); +} + +INLINEOP void tsx() { + + cpu.x = cpu.sp; + + zerocalc(cpu.x); + signcalc(cpu.x); + +} + +INLINEOP void txa() { + cpu.a = cpu.x; + + zerocalc(cpu.a); + signcalc(cpu.a); +} + +INLINEOP void txs() { + cpu.sp = cpu.x; +} + +INLINEOP void tya() { + cpu.a = cpu.y; + + zerocalc(cpu.a); + signcalc(cpu.a); +} + + +//undocumented instructions +INLINEOP void lax() { + lda(); + ldx(); +} + +INLINEOP void sax() { + sta(); + stx(); + putvalue(cpu.a & cpu.x); +} + +INLINEOP void dcp() { + dec(); + cmp(); +} + +INLINEOP void isb() { + inc(); + sbc(); +} + +INLINEOP void slo() { + asl(); + ora(); +} + +INLINEOP void rla() { + rol(); + op_and(); +} + +INLINEOP void sre() { + lsr(); + eor(); +} + +INLINEOP void rra() { + ror(); + adc(); +} + +INLINEOP void alr() { // (FB) + + uint32_t result = cpu.a & getvalue() ; + + if (result & 1) setcarry(); + else clearcarry(); + + result = result / 2; + + clearsign(); + zerocalc(result); + saveaccum(result); +} + +INLINEOP void arr() { //This one took me hours.. finally taken from VICE (FB) + uint32_t result; + result = cpu.a & getvalue(); + if (!(cpu.cpustatus & FLAG_DECIMAL)) { + result >>= 1; + result |= ((cpu.cpustatus & FLAG_CARRY) << 7); + signcalc(result); + zerocalc(result); + if (result & 0x40) setcarry(); else clearcarry(); + if ((result & 0x40) ^ ((result & 0x20)<<1)) setoverflow(); else clearoverflow(); + saveaccum(result); + } else { + uint32_t t2 = result; + t2 >>= 1; + t2 |= ((cpu.cpustatus & FLAG_CARRY) << 7); + if (cpu.cpustatus & FLAG_CARRY) setsign(); else clearsign(); + zerocalc(t2); + if ((t2 ^ result) & 0x40) setoverflow(); else clearoverflow(); + if (((result & 0xf) + (result & 0x1)) > 0x5) { + t2 = (t2 & 0xf0) | ((t2 + 0x6) & 0xf); + } + if (((result & 0xf0) + (result & 0x10)) > 0x50) { + t2 = (t2 & 0x0f) | ((t2 + 0x60) & 0xf0); + setcarry(); + } else { + clearcarry(); + } + saveaccum(t2); + } + +} + +INLINEOP void xaa() { // AKA ANE + const uint32_t val = 0xee; // VICE uses 0xff - but this results in an error in the testsuite (FB) + uint32_t result = (cpu.a | val) & cpu.x & getvalue(); + signcalc(result); + zerocalc(result); + saveaccum(result); +} + +INLINEOP void lxa() { + const uint32_t val = 0xee; + uint32_t result = (cpu.a | val) & getvalue(); + signcalc(result); + zerocalc(result); + cpu.x = result; + saveaccum(result); +} + +INLINEOP void axs() { //aka SBX + uint32_t result = getvalue(); + result = (cpu.a & cpu.x) - result; + cpu.x = result; + if (result < 0x100) setcarry(); else clearcarry(); + zerocalc(cpu.x); + signcalc(cpu.x); +} + +INLINEOP void ahx() { //todo (is unstable) + UNSUPPORTED +} + +INLINEOP void anc() { + uint32_t result = cpu.a & getvalue(); + signcalc(result) + zerocalc(result); + if (cpu.cpustatus & FLAG_SIGN) setcarry(); else clearcarry(); + saveaccum(result); +} + +INLINEOP void las() { + uint32_t result = cpu.sp & getvalue(); + signcalc(result); + zerocalc(result); + cpu.sp = result; + cpu.x = result; + saveaccum(result); +} + +/********************************************************************************************************************/ +/* OPCODES */ +/********************************************************************************************************************/ + +OPCODE void opKIL(void) { + printf("CPU JAM @ $%d\n",cpu.pc); + cpu_reset(); +} + +OPCODE void op0x0(void) { + cpu.ticks = 7; + imp(); + brk(); +} + +OPCODE void op0x1(void) { + cpu.ticks = 6; + indx(); + ora(); +} + +OPCODE void op0x3(void) { //undocumented + cpu.ticks = 8; + indx(); + slo(); +} + +OPCODE void op0x4(void) { //nop read zeropage + cpu.ticks = 3; + zp(); +} + +OPCODE void op0x5(void) { + cpu.ticks = 3; + zp(); + oraZP(); +} + +OPCODE void op0x6(void) { + cpu.ticks = 5; + zp(); + aslZP(); +} + +OPCODE void op0x7(void) { //undocumented SLO + cpu.ticks = 5; + zp(); + slo(); +} + +OPCODE void op0x8(void) { + cpu.ticks = 3; + imp(); + php(); +} + +OPCODE void op0x9(void) { + cpu.ticks = 2; + imm(); + ora(); +} + +OPCODE void op0xA(void) { + cpu.ticks = 2; + //acc(); + asla(); +} + +OPCODE void op0xB(void) { //undocumented + cpu.ticks = 2; + imm(); + anc(); +} + +OPCODE void op0xC(void) { //nop + cpu.ticks = 4; + abso(); +} + +OPCODE void op0xD(void) { + cpu.ticks = 4; + abso(); + ora(); +} + +OPCODE void op0xE(void) { + cpu.ticks = 6; + abso(); + asl(); +} + +OPCODE void op0xF(void) { //undocumented + cpu.ticks = 6; + abso(); + slo(); +} + +OPCODE void op0x10(void) { + cpu.ticks = 2; + rel(); + bpl(); +} + +OPCODE void op0x11(void) { + cpu.ticks = 5; + indy_t(); + ora(); +} + +OPCODE void op0x13(void) { //undocumented + cpu.ticks = 8; + indy(); + slo(); +} + +OPCODE void op0x14(void) { //nop + cpu.ticks = 4; + zpx(); +} + +OPCODE void op0x15(void) { + cpu.ticks = 4; + zpx(); + ora(); +} + +OPCODE void op0x16(void) { + cpu.ticks = 6; + zpx(); + asl(); +} + +OPCODE void op0x17(void) { //undocumented + cpu.ticks = 6; + //zpy(); bug + zpx(); + slo(); +} + +OPCODE void op0x18(void) { + cpu.ticks = 2; + imp(); + clc(); +} + +OPCODE void op0x19(void) { + cpu.ticks = 4; + absy_t(); + ora(); +} + +OPCODE void op0x1A(void) { //nop + cpu.ticks = 2; +} + +OPCODE void op0x1B(void) { //undocumented + cpu.ticks = 7; + absy(); + slo(); +} + +OPCODE void op0x1C(void) { //nop + cpu.ticks = 4; + //(); +} + +OPCODE void op0x1D(void) { + cpu.ticks = 4; + absx_t(); + ora(); +} + +OPCODE void op0x1E(void) { + cpu.ticks = 7; + absx(); + asl(); +} + + +OPCODE void op0x1F(void) { //undocumented + cpu.ticks = 7; + absx(); + slo(); +} + +OPCODE void op0x20(void) { + cpu.ticks = 6; + abso(); + jsr(); +} + +OPCODE void op0x21(void) { + cpu.ticks = 6; + indx(); + op_and(); +} + +OPCODE void op0x23(void) { //undocumented + cpu.ticks = 8; + indx(); + rla(); +} + +OPCODE void op0x24(void) { + cpu.ticks = 3; + zp(); + op_bitZP(); +} + +OPCODE void op0x25(void) { + cpu.ticks = 3; + zp(); + op_and(); +} + +OPCODE void op0x26(void) { + cpu.ticks = 5; + zp(); + rolZP(); +} + +OPCODE void op0x27(void) { //undocumented + cpu.ticks = 5; + zp(); + rla(); +} + +OPCODE void op0x28(void) { + cpu.ticks = 4; + imp(); + plp(); +} + +OPCODE void op0x29(void) { + cpu.ticks = 2; + imm(); + op_and(); +} + +OPCODE void op0x2A(void) { + cpu.ticks = 2; + //acc(); + rola(); +} + +OPCODE void op0x2B(void) { //undocumented + cpu.ticks = 2; + imm(); + anc(); +} + +OPCODE void op0x2C(void) { + cpu.ticks = 4; + abso(); + op_bit(); +} + +OPCODE void op0x2D(void) { + cpu.ticks = 4; + abso(); + op_and(); +} + +OPCODE void op0x2E(void) { + cpu.ticks = 6; + abso(); + rol(); +} + +OPCODE void op0x2F(void) { //undocumented + cpu.ticks = 6; + abso(); + rla(); +} + +OPCODE void op0x30(void) { + cpu.ticks = 2; + rel(); + bmi(); +} + +OPCODE void op0x31(void) { + cpu.ticks = 5; + indy_t(); + op_and(); +} + +OPCODE void op0x33(void) { //undocumented + cpu.ticks = 8; + indy(); + rla(); +} + +OPCODE void op0x34(void) { //nop + cpu.ticks = 4; + zpx(); +} + +OPCODE void op0x35(void) { + cpu.ticks = 4; + zpx(); + op_and(); +} + +OPCODE void op0x36(void) { + cpu.ticks = 6; + zpx(); + rol(); +} + +OPCODE void op0x37(void) { //undocumented + cpu.ticks = 6; + zpx(); + rla(); +} + +OPCODE void op0x38(void) { + cpu.ticks = 2; + imp(); + sec(); +} + +OPCODE void op0x39(void) { + cpu.ticks = 4; + absy_t(); + op_and(); +} + +OPCODE void op0x3A(void) { //nop + cpu.ticks = 2; +} + +OPCODE void op0x3B(void) { //undocumented + cpu.ticks = 7; + absy(); + rla(); +} + +OPCODE void op0x3C(void) { //nop + cpu.ticks = 4; + absx_t(); +} + +OPCODE void op0x3D(void) { + cpu.ticks = 4; + absx_t(); + op_and(); +} + +OPCODE void op0x3E(void) { + cpu.ticks = 7; + absx(); + rol(); +} + +OPCODE void op0x3F(void) { //undocumented + cpu.ticks = 7; + absx(); + rla(); +} + +OPCODE void op0x40(void) { + cpu.ticks = 6; + imp(); + rti(); +} + +OPCODE void op0x41(void) { + cpu.ticks = 6; + indx(); + eor(); +} + +OPCODE void op0x43(void) { //undocumented + cpu.ticks = 8; + indx(); + sre(); +} + +OPCODE void op0x44(void) { //nop + cpu.ticks = 3; + zp(); +} + +OPCODE void op0x45(void) { + cpu.ticks = 3; + zp(); + eorZP(); +} + +OPCODE void op0x46(void) { + cpu.ticks = 5; + zp(); + lsrZP(); +} + +OPCODE void op0x47(void) { //undocumented + cpu.ticks = 5; + zp(); + sre(); +} + +OPCODE void op0x48(void) { + cpu.ticks = 3; + imp(); + pha(); +} + +OPCODE void op0x49(void) { + cpu.ticks = 2; + imm(); + eor(); +} + +OPCODE void op0x4A(void) { + cpu.ticks = 2; +// acc(); + lsra(); +} + +OPCODE void op0x4B(void) { //undocumented + cpu.ticks = 2; + imm(); + alr(); +} + +OPCODE void op0x4C(void) { + cpu.ticks = 3; + abso(); + jmp(); +} + +OPCODE void op0x4D(void) { + cpu.ticks = 4; + abso(); + eor(); +} + +OPCODE void op0x4E(void) { + cpu.ticks = 6; + abso(); + lsr(); +} + +OPCODE void op0x4F(void) { //undocumented + cpu.ticks = 6; + abso(); + sre(); +} + +OPCODE void op0x50(void) { + cpu.ticks = 2; + rel(); + bvc(); +} + +OPCODE void op0x51(void) { + cpu.ticks = 5; + indy_t(); + eor(); +} + +OPCODE void op0x53(void) { //undocumented + cpu.ticks = 8; + //zp(); BUG + indy(); + sre(); +} + +OPCODE void op0x54(void) { //nop + cpu.ticks = 4; + zpx(); +} + +OPCODE void op0x55(void) { + cpu.ticks = 4; + zpx(); + eor(); +} + +OPCODE void op0x56(void) { + cpu.ticks = 6; + zpx(); + lsr(); +} + +OPCODE void op0x57(void) { //undocumented + cpu.ticks = 6; + zpx(); + sre(); +} + +OPCODE void op0x58(void) { + cpu.ticks = 2; + imp(); + cli_(); +} + +OPCODE void op0x59(void) { + cpu.ticks = 4; + absy_t(); + eor(); +} + +OPCODE void op0x5A(void) { //nop + cpu.ticks = 2; +} + +OPCODE void op0x5B(void) { //undocumented + cpu.ticks = 7; + absy(); + sre(); +} + +OPCODE void op0x5C(void) { //nop + cpu.ticks = 4; + absx_t(); +} + +OPCODE void op0x5D(void) { + cpu.ticks = 4; + absx_t(); + eor(); +} + +OPCODE void op0x5E(void) { + cpu.ticks = 7; + absx(); + lsr(); +} + +OPCODE void op0x5F(void) { //undocumented + cpu.ticks = 7; + absx(); + sre(); +} + +OPCODE void op0x60(void) { + cpu.ticks = 6; + imp(); + rts(); +} + +OPCODE void op0x61(void) { + cpu.ticks = 6; + indx(); + adc(); +} + +OPCODE void op0x63(void) { //undocumented + cpu.ticks = 8; + indx(); + rra(); +} + +OPCODE void op0x64(void) { + cpu.ticks = 3; + zp(); +} + +OPCODE void op0x65(void) { + cpu.ticks = 3; + zp(); + adcZP(); +} + +OPCODE void op0x66(void) { + cpu.ticks = 5; + zp(); + rorZP(); +} + +OPCODE void op0x67(void) { //undocumented + cpu.ticks = 5; + zp(); + rra(); +} + +OPCODE void op0x68(void) { + cpu.ticks = 4; + imp(); + pla(); +} + +OPCODE void op0x69(void) { + cpu.ticks = 2; + imm(); + adc(); +} + +OPCODE void op0x6A(void) { + cpu.ticks = 2; +// acc(); + rora(); +} + +OPCODE void op0x6B(void) { //undocumented + cpu.ticks = 2; + imm(); + arr(); +} + +OPCODE void op0x6C(void) { + cpu.ticks = 5; + ind(); + jmp(); +} + +OPCODE void op0x6D(void) { + cpu.ticks = 4; + abso(); + adc(); +} + +OPCODE void op0x6E(void) { + cpu.ticks = 6; + abso(); + ror(); +} + +OPCODE void op0x6F(void) { //undocumented + cpu.ticks = 6; + abso(); + rra(); +} + +OPCODE void op0x70(void) { + cpu.ticks = 2; + rel(); + bvs(); +} + +OPCODE void op0x71(void) { + cpu.ticks = 5; + indy_t(); + adc(); +} + +OPCODE void op0x73(void) { //undocumented + cpu.ticks = 8; + indy(); + rra(); +} + +OPCODE void op0x74(void) { //nop + cpu.ticks = 4; + zpx(); +} + +OPCODE void op0x75(void) { + cpu.ticks = 4; + zpx(); + adc(); +} + +OPCODE void op0x76(void) { + cpu.ticks = 6; + zpx(); + ror(); +} + +OPCODE void op0x77(void) { //undocumented + cpu.ticks = 6; + zpx(); + rra(); +} + +OPCODE void op0x78(void) { + cpu.ticks = 2; + imp(); + sei_(); +} + +OPCODE void op0x79(void) { + cpu.ticks = 4; + absy_t(); + adc(); +} + +OPCODE void op0x7A(void) { //nop + cpu.ticks = 2; +} + +OPCODE void op0x7B(void) { //undocumented + cpu.ticks = 7; + absy(); + rra(); +} + +OPCODE void op0x7C(void) { //nop + cpu.ticks = 4; + absx_t(); +} + +OPCODE void op0x7D(void) { + cpu.ticks = 4; + absx_t(); + adc(); +} + +OPCODE void op0x7E(void) { + cpu.ticks = 7; + absx(); + ror(); +} + +OPCODE void op0x7F(void) { //undocumented + cpu.ticks = 7; + absx(); + rra(); +} + +OPCODE void op0x80(void) { //nop + cpu.ticks = 2; + imm(); +} + +OPCODE void op0x81(void) { + cpu.ticks = 6; + indx(); + sta(); +} + +OPCODE void op0x82(void) { //nop + cpu.ticks = 2; + imm(); +} + +OPCODE void op0x83(void) { //undocumented + cpu.ticks = 6; + indx(); + sax(); +} + +OPCODE void op0x84(void) { + cpu.ticks = 3; + zp(); + sty(); +} + +OPCODE void op0x85(void) { + cpu.ticks = 3; + zp(); + sta(); +} + +OPCODE void op0x86(void) { + cpu.ticks = 3; + zp(); + stx(); +} + +OPCODE void op0x87(void) { //undocumented + cpu.ticks = 3; + zp(); + sax(); +} + +OPCODE void op0x88(void) { + cpu.ticks = 2; + imp(); + dey(); +} + +OPCODE void op0x89(void) { //nop + cpu.ticks = 2; + imm(); +} + +OPCODE void op0x8A(void) { + cpu.ticks = 2; + imp(); + txa(); +} + +OPCODE void op0x8B(void) { //undocumented + cpu.ticks = 2; + imm(); + xaa(); +} + +OPCODE void op0x8C(void) { + cpu.ticks = 4; + abso(); + sty(); +} + +OPCODE void op0x8D(void) { + cpu.ticks = 4; + abso(); + sta(); +} + +OPCODE void op0x8E(void) { + cpu.ticks = 4; + abso(); + stx(); +} + +OPCODE void op0x8F(void) { //undocumented + cpu.ticks = 4; + abso(); + sax(); +} + +OPCODE void op0x90(void) { + cpu.ticks = 2; + rel(); + bcc(); +} + +OPCODE void op0x91(void) { + cpu.ticks = 6; + indy(); + sta(); +} + +OPCODE void op0x93(void) { //undocumented + cpu.ticks = 6; + indy(); + ahx(); +} + +OPCODE void op0x94(void) { + cpu.ticks = 4; + zpx(); + sty(); +} + +OPCODE void op0x95(void) { + cpu.ticks = 4; + zpx(); + sta(); +} + +OPCODE void op0x96(void) { + cpu.ticks = 4; + zpy(); + stx(); +} + +OPCODE void op0x97(void) { //undocumented + cpu.ticks = 4; + zpy(); + sax(); +} + +OPCODE void op0x98(void) { + cpu.ticks = 2; + imp(); + tya(); +} + +OPCODE void op0x99(void) { + cpu.ticks = 5; + absy(); + sta(); +} + +OPCODE void op0x9A(void) { + cpu.ticks = 2; + imp(); + txs(); +} + +OPCODE void op0x9B(void) { //undocumented + cpu.ticks = 5; + absy(); + //tas(); + UNSUPPORTED; +} + +OPCODE void op0x9C(void) { //undocumented + cpu.ticks = 5; + absy(); + //shy(); + UNSUPPORTED; +} + +OPCODE void op0x9D(void) { + cpu.ticks = 5; + absx(); + sta(); +} + +OPCODE void op0x9E(void) { //undocumented + cpu.ticks = 5; + absx(); + //shx(); +} + +OPCODE void op0x9F(void) { //undocumented + cpu.ticks = 5; + absx(); + ahx(); +} + +OPCODE void op0xA0(void) { + cpu.ticks = 2; + imm(); + ldy(); +} + +OPCODE void op0xA1(void) { + cpu.ticks = 6; + indx(); + lda(); +} + +OPCODE void op0xA2(void) { + cpu.ticks = 2; + imm(); + ldx(); +} + +OPCODE void op0xA3(void) { //undocumented + cpu.ticks = 6; + indx(); + lax(); +} + +OPCODE void op0xA4(void) { + cpu.ticks = 3; + zp(); + ldyZP(); +} + +OPCODE void op0xA5(void) { + cpu.ticks = 3; + zp(); + ldaZP(); +} + +OPCODE void op0xA6(void) { + cpu.ticks = 3; + zp(); + ldxZP(); +} + +OPCODE void op0xA7(void) { //undocumented + cpu.ticks = 3; + zp(); + lax(); +} + +OPCODE void op0xA8(void) { + cpu.ticks = 2; + imp(); + tay(); +} + +OPCODE void op0xA9(void) { + cpu.ticks = 2; + imm(); + lda(); +} + +OPCODE void op0xAA(void) { + cpu.ticks = 2; + imp(); + tax(); +} + +OPCODE void op0xAB(void) { //undocumented + cpu.ticks = 2; + imm(); + lxa(); +} + +OPCODE void op0xAC(void) { + cpu.ticks = 4; + abso(); + ldy(); +} + +OPCODE void op0xAD(void) { + cpu.ticks = 4; + abso(); + lda(); +} + +OPCODE void op0xAE(void) { + cpu.ticks = 4; + abso(); + ldx(); +} + +OPCODE void op0xAF(void) { //undocumented + cpu.ticks = 4; + abso(); + lax(); +} + +OPCODE void op0xB0(void) { + cpu.ticks = 2; + rel(); + bcs(); +} + +OPCODE void op0xB1(void) { + cpu.ticks = 5; + indy_t(); + lda(); +} + +OPCODE void op0xB3(void) { //undocumented + cpu.ticks = 5; + indy_t(); + lax(); +} + +OPCODE void op0xB4(void) { + cpu.ticks = 4; + zpx(); + ldy(); +} + +OPCODE void op0xB5(void) { + cpu.ticks = 4; + zpx(); + lda(); +} + +OPCODE void op0xB6(void) { + cpu.ticks = 4; + zpy(); + ldx(); +} + +OPCODE void op0xB7(void) { //undocumented + cpu.ticks = 4; + zpy(); + lax(); +} + +OPCODE void op0xB8(void) { + cpu.ticks = 2; + imp(); + clv(); +} + +OPCODE void op0xB9(void) { + cpu.ticks = 4; + absy_t(); + lda(); +} + +OPCODE void op0xBA(void) { + cpu.ticks = 2; + imp(); + tsx(); +} + +OPCODE void op0xBB(void) { //undocumented + cpu.ticks = 4; + absy_t(); + las(); +} + +OPCODE void op0xBC(void) { + cpu.ticks = 4; + absx_t(); + ldy(); +} + +OPCODE void op0xBD(void) { + cpu.ticks = 4; + absx_t(); + lda(); +} + +OPCODE void op0xBE(void) { + cpu.ticks = 4; + absy_t(); + ldx(); +} + +OPCODE void op0xBF(void) { //undocumented + cpu.ticks = 4; + absy_t(); + lax(); +} + +OPCODE void op0xC0(void) { + cpu.ticks = 2; + imm(); + cpy(); +} + +OPCODE void op0xC1(void) { + cpu.ticks = 6; + indx(); + cmp(); +} + +OPCODE void op0xC2(void) { //nop + cpu.ticks = 2; + imm(); +} + +OPCODE void op0xC3(void) { //undocumented + cpu.ticks = 8; + indx(); + dcp(); +} + +OPCODE void op0xC4(void) { + cpu.ticks = 3; + zp(); + cpyZP(); +} + +OPCODE void op0xC5(void) { + cpu.ticks = 3; + zp(); + cmpZP(); +} + +OPCODE void op0xC6(void) { + cpu.ticks = 5; + zp(); + decZP(); +} + +OPCODE void op0xC7(void) { //undocumented + cpu.ticks = 5; + zp(); + dcp(); +} + +OPCODE void op0xC8(void) { + cpu.ticks = 2; + imp(); + iny(); +} + +OPCODE void op0xC9(void) { + cpu.ticks = 2; + imm(); + cmp(); +} + +OPCODE void op0xCA(void) { + cpu.ticks = 2; + imp(); + dex(); +} + +OPCODE void op0xCB(void) { //undocumented + cpu.ticks = 2; + imm(); + axs(); +} + +OPCODE void op0xCC(void) { + cpu.ticks = 4; + abso(); + cpy(); +} + +OPCODE void op0xCD(void) { + cpu.ticks = 4; + abso(); + cmp(); +} + +OPCODE void op0xCE(void) { + cpu.ticks = 6; + abso(); + dec(); +} + +OPCODE void op0xCF(void) { //undocumented + cpu.ticks = 6; + abso(); + dcp(); +} + +OPCODE void op0xD0(void) { + cpu.ticks = 2; + rel(); + bne(); +} + +OPCODE void op0xD1(void) { + cpu.ticks = 5; + indy_t(); + cmp(); +} + +OPCODE void op0xD3(void) { //undocumented + cpu.ticks = 8; + indy(); + dcp(); +} + +OPCODE void op0xD4(void) { //nop + cpu.ticks = 4; + zpx(); +} + +OPCODE void op0xD5(void) { + cpu.ticks = 4; + zpx(); + cmp(); +} + +OPCODE void op0xD6(void) { + cpu.ticks = 6; + zpx(); + dec(); +} + +OPCODE void op0xD7(void) { //undocumented + cpu.ticks = 6; + zpx(); + dcp(); +} + +OPCODE void op0xD8(void) { + cpu.ticks = 2; + imp(); + cld(); +} + +OPCODE void op0xD9(void) { + cpu.ticks = 4; + absy_t(); + cmp(); +} + +OPCODE void op0xDA(void) { //nop + cpu.ticks = 2; +} + +OPCODE void op0xDB(void) { //undocumented + cpu.ticks = 7; + absy(); + dcp(); +} + +OPCODE void op0xDC(void) { //nop + cpu.ticks = 4; + absx_t(); +} + +OPCODE void op0xDD(void) { + cpu.ticks = 4; + absx_t(); + cmp(); +} + +OPCODE void op0xDE(void) { + cpu.ticks = 7; + absx(); + dec(); +} + +OPCODE void op0xDF(void) { //undocumented + cpu.ticks = 7; + absx(); + dcp(); +} + +OPCODE void op0xE0(void) { + cpu.ticks = 2; + imm(); + cpx(); +} + +OPCODE void op0xE1(void) { + cpu.ticks = 5; + indx(); + sbc(); +} + +OPCODE void op0xE2(void) { //NOP + cpu.ticks = 2; + imm(); +} + +OPCODE void op0xE3(void) { //undocumented + cpu.ticks = 8; + indx(); + isb(); +} + +OPCODE void op0xE4(void) { + cpu.ticks = 3; + zp(); + cpxZP(); +} + +OPCODE void op0xE5(void) { + cpu.ticks = 3; + zp(); + sbcZP(); +} + +OPCODE void op0xE6(void) { + cpu.ticks = 5; + zp(); + incZP(); +} + +OPCODE void op0xE7(void) { //undocumented + cpu.ticks = 5; + zp(); + isb(); +} + +OPCODE void op0xE8(void) { + cpu.ticks = 2; + imp(); + inx(); +} + +OPCODE void op0xE9(void) { + cpu.ticks = 2; + imm(); + sbc(); +} + +OPCODE void op0xEA(void) { + cpu.ticks = 2; +} + +OPCODE void op0xEB(void) { + cpu.ticks = 2; + imm(); + sbc(); +} + +OPCODE void op0xEC(void) { + cpu.ticks = 4; + abso(); + cpx(); +} + +OPCODE void op0xED(void) { + cpu.ticks = 4; + abso(); + sbc(); +} + +OPCODE void op0xEE(void) { + cpu.ticks = 6; + abso(); + inc(); +} + +OPCODE void op0xEF(void) { //undocumented + cpu.ticks = 6; + abso(); + isb(); +} + +OPCODE void op0xF0(void) { + cpu.ticks = 2; + rel(); + beq(); +} + +OPCODE void op0xF1(void) { + cpu.ticks = 5; + indy_t(); + sbc(); +} + +OPCODE void op0xF3(void) { //undocumented + cpu.ticks = 8; + indy(); + isb(); +} + +OPCODE void op0xF4(void) { //nop + cpu.ticks = 4; + zpx(); +} + +OPCODE void op0xF5(void) { + cpu.ticks = 4; + zpx(); + sbc(); +} + +OPCODE void op0xF6(void) { + cpu.ticks = 6; + zpx(); + inc(); +} + +OPCODE void op0xF7(void) { //undocumented + cpu.ticks = 6; + zpx(); + isb(); +} + +OPCODE void op0xF8(void) { + cpu.ticks = 2; + imp(); + sed(); +} + +OPCODE void op0xF9(void) { + cpu.ticks = 4; + absy_t(); + sbc(); +} + +OPCODE void op0xFA(void) { //nop + cpu.ticks = 2; +} + +OPCODE void op0xFB(void) { //undocumented + cpu.ticks = 7; + absy(); + isb(); +} + +OPCODE void op0xFC(void) { //nop + cpu.ticks = 4; + absx_t(); +} + +OPCODE void op0xFD(void) { + cpu.ticks = 4; + absx_t(); + sbc(); +} + +OPCODE void op0xFE(void) { + cpu.ticks = 7; + absx(); + inc(); +} + +OPCODE void op0xFF(void) { //undocumented + cpu.ticks = 7; + absx(); + isb(); +} + +OPCODE void opPATCHD2(void) { +#if APPLY_PATCHES + patchLOAD(); +#else + opKIL(); +#endif +} + +OPCODE void opPATCHF2(void) { +#if APPLY_PATCHES + patchSAVE(); +#else + opKIL(); +#endif +} + +typedef void (*op_ptr_t)( void ); + +static const op_ptr_t opcodetable[256] = { + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ + /* 0 */ op0x0 , op0x1, opKIL , op0x3, op0x4 , op0x5, op0x6, op0x7, op0x8, op0x9, op0xA, op0xB , op0xC , op0xD , op0xE , op0xF, + /* 1 */ op0x10, op0x11, opKIL , op0x13, op0x14, op0x15, op0x16, op0x17, op0x18, op0x19, op0x1A, op0x1B, op0x1C, op0x1D, op0x1E, op0x1F, + /* 2 */ op0x20, op0x21, opKIL , op0x23, op0x24, op0x25, op0x26, op0x27, op0x28, op0x29, op0x2A, op0x2B, op0x2C, op0x2D, op0x2E, op0x2F, + /* 3 */ op0x30, op0x31, opKIL , op0x33, op0x34, op0x35, op0x36, op0x37, op0x38, op0x39, op0x3A, op0x3B, op0x3C, op0x3D, op0x3E, op0x3F, + /* 4 */ op0x40, op0x41, opKIL , op0x43, op0x44, op0x45, op0x46, op0x47, op0x48, op0x49, op0x4A, op0x4B, op0x4C, op0x4D, op0x4E, op0x4F, + /* 5 */ op0x50, op0x51, opKIL , op0x53, op0x54, op0x55, op0x56, op0x57, op0x58, op0x59, op0x5A, op0x5B, op0x5C, op0x5D, op0x5E, op0x5F, + /* 6 */ op0x60, op0x61, opKIL , op0x63, op0x64, op0x65, op0x66, op0x67, op0x68, op0x69, op0x6A, op0x6B, op0x6C, op0x6D, op0x6E, op0x6F, + /* 7 */ op0x70, op0x71, opKIL , op0x73, op0x74, op0x75, op0x76, op0x77, op0x78, op0x79, op0x7A, op0x7B, op0x7C, op0x7D, op0x7E, op0x7F, + /* 8 */ op0x80, op0x81, op0x82, op0x83, op0x84, op0x85, op0x86, op0x87, op0x88, op0x89, op0x8A, op0x8B, op0x8C, op0x8D, op0x8E, op0x8F, + /* 9 */ op0x90, op0x91, opKIL , op0x93, op0x94, op0x95, op0x96, op0x97, op0x98, op0x99, op0x9A, op0x9B, op0x9C, op0x9D, op0x9E, op0x9F, + /* A */ op0xA0, op0xA1, op0xA2, op0xA3, op0xA4, op0xA5, op0xA6, op0xA7, op0xA8, op0xA9, op0xAA, op0xAB, op0xAC, op0xAD, op0xAE, op0xAF, + /* B */ op0xB0, op0xB1, opKIL , op0xB3, op0xB4, op0xB5, op0xB6, op0xB7, op0xB8, op0xB9, op0xBA, op0xBB, op0xBC, op0xBD, op0xBE, op0xBF, + /* C */ op0xC0, op0xC1, op0xC2, op0xC3, op0xC4, op0xC5, op0xC6, op0xC7, op0xC8, op0xC9, op0xCA, op0xCB, op0xCC, op0xCD, op0xCE, op0xCF, + /* D */ op0xD0, op0xD1, opPATCHD2 , op0xD3, op0xD4, op0xD5, op0xD6, op0xD7, op0xD8, op0xD9, op0xDA, op0xDB, op0xDC, op0xDD, op0xDE, op0xDF, + /* E */ op0xE0, op0xE1, op0xE2, op0xE3, op0xE4, op0xE5, op0xE6, op0xE7, op0xE8, op0xE9, op0xEA, op0xEB, op0xEC, op0xED, op0xEE, op0xEF, + /* F */ op0xF0, op0xF1, opPATCHF2 , op0xF3, op0xF4, op0xF5, op0xF6, op0xF7, op0xF8, op0xF9, op0xFA, op0xFB, op0xFC, op0xFD, op0xFE, op0xFF +}; + +static const uint8_t cyclesTable[256] = +{ + 7, 6, 2, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6, // $00 + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 5, 5, 7, 7, // $10 + 6, 6, 2, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6, // $20 + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 5, 5, 7, 7, // $30 + 6, 6, 2, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6, // $40 + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 5, 5, 7, 7, // $50 + 6, 6, 2, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6, // $60 + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 5, 5, 7, 7, // $70 + 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, // $80 + 2, 6, 2, 6, 4, 4, 4, 4, 2, 5, 2, 5, 5, 5, 5, 5, // $90 + 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, // $A0 + 2, 5, 2, 5, 4, 4, 4, 4, 2, 4, 2, 5, 4, 4, 4, 4, // $B0 + 2, 6, 2, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6, // $C0 + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 5, 5, 7, 7, // $D0 + 2, 6, 2, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6, // $E0 + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 5, 5, 7, 7 // $F0 +}; + +static const uint8_t writeCycleTable[256] = +{ + 3, 0, 0, 2, 0, 0, 2, 2, 1, 0, 0, 0, 0, 0, 2, 2, // $00 + 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 2, 2, // $10 + 2, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, // $20 + 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 2, 2, // $30 + 0, 0, 0, 2, 0, 0, 2, 2, 1, 0, 0, 0, 0, 0, 2, 2, // $40 + 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 2, 2, // $50 + 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, // $60 + 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 2, 2, // $70 + 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, // $80 + 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, // $90 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // $A0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // $B0 + 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, // $C0 + 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 2, 2, // $D0 + 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, // $E0 + 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 2, 2 // $F0 +}; + + +void cpu_nmi() { + cpu.nmiLine = 1; + printf("nmiLine=1\n"); +} +void cpu_clearNmi() { + cpu.nmi = 0; +} + +void cpu_nmi_do() { + if (cpu.nmi) return; + cpu.nmi = 1; + cpu.nmiLine = 0; + push16(cpu.pc); + push8(cpu.cpustatus & ~FLAG_BREAK); + cpu.cpustatus |= FLAG_INTERRUPT; + cpu.pc = read6502(0xFFFA) | (read6502(0xFFFB) << 8); + cpu.ticks = 7; +} + +static inline void cpu_irq() { + push16(cpu.pc); + push8(cpu.cpustatus & ~FLAG_BREAK); + cpu.cpustatus |= FLAG_INTERRUPT; + cpu.pc = read6502(0xFFFE) | (read6502(0xFFFF) << 8); + cpu.ticks = 7; +} + +inline void cia_clock(void) __attribute__((always_inline)); + +void cia_clock(void) { + cia1_clock(1); + cia2_clock(1); +} + +void cia_clockt(int ticks) { + cia1_clock(ticks); + cia2_clock(ticks); +} + +void cpu_clock(int cycles) { +static int c = 0; +static int writeCycles = 0; + cpu.lineCyclesAbs += cycles; + c+=cycles; + while (c > 0) { + + uint8_t opcode ; + cpu.ticks = 0; + + //NMI + + if (!cpu.nmi && ((cpu.cia2.R[0x0D] & 0x80) | cpu.nmiLine)) { + cpu_nmi_do(); + goto noOpcode; + } + + if (!(cpu.cpustatus & FLAG_INTERRUPT)) { + if (((cpu.vic.R[0x19] | cpu.cia1.R[0x0D]) & 0x80)) { + cpu_irq(); + goto noOpcode; + } + } + + cpu.cpustatus |= FLAG_CONSTANT; + opcode = read6502(cpu.pc++); + opcodetable[opcode](); + writeCycles = writeCycleTable[opcode]; +noOpcode: + + cia_clockt(cpu.ticks); + c-= cpu.ticks; + cpu.lineCycles += cpu.ticks; + + if (cpu.exactTiming) { + uint32_t t = cpu.lineCycles * MCU_C64_RATIO; + //while (ARM_DWT_CYCCNT - cpu.lineStartTime < t){;} + } + + }; + + return; +} + +//Enable "ExactTiming" Mode +void cpu_setExactTiming() { + if (!cpu.exactTiming) { + //enable exact timing + setAudioOff(); + vic_displaySimpleModeScreen(); + + } + cpu.exactTiming = 1; + //cpu.exactTimingStartTime = ARM_DWT_CYCCNT; + cpu.exactTiming = 0; +} + +//Disable "ExactTiming" Mode +void cpu_disableExactTiming() { + cpu.exactTiming = 0; + setAudioOn(); +} + +void cpu_reset() { + enableCycleCounter(); + cpu.exactTiming = 0; + cpu.nmi = 0; + cpu.cpustatus = FLAG_CONSTANT; + cpu.pc = read6502(0xFFFC) | (read6502(0xFFFD) << 8); + cpu.sp = 0xFD; +} \ No newline at end of file diff --git a/MCUME_pico/pico64/cpu.h b/MCUME_pico/pico64/cpu.h new file mode 100755 index 0000000..1c6c602 --- /dev/null +++ b/MCUME_pico/pico64/cpu.h @@ -0,0 +1,334 @@ +/* + Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +#ifndef Teensy64_cpu_h_ +#define Teensy64_cpu_h_ + +//#include + + +#define INLINE static inline __attribute__((always_inline)) +#define INLINEOP static inline __attribute__((always_inline, flatten)) +#define OPCODE static + +#define RAMSIZE 65536 //Bytes + + +#include "Teensy64.h" +#include "roms.h" +#include "patches.h" +#include "util.h" +#include "pla.h" +#include "vic.h" +#include "keyboard.h" +#include "cia1.h" +#include "cia2.h" + + +//#include +//extern AudioPlaySID playSID; +//extern AudioOutputAnalog audioout; + +#define BASE_STACK 0x100 + +struct tio { + uint32_t gpioa, gpiob, gpioc, gpiod, gpioe; +}__attribute__((packed, aligned(4))); + +struct tcpu { + uint32_t exactTimingStartTime; + uint8_t exactTiming; + + //6502 CPU registers + uint8_t sp, a, x, y, cpustatus; + uint8_t penaltyop, penaltyaddr; + uint8_t nmi; + uint16_t pc; + + //helper variables + uint16_t reladdr; + uint16_t ea; + + uint16_t lineCyclesAbs; //for debug + unsigned ticks; + unsigned lineCycles; + unsigned long lineStartTime; + + r_rarr_ptr_t plamap_r; //Memory-Mapping read + w_rarr_ptr_t plamap_w; //Memory-Mapping write + uint8_t _exrom:1, _game:1; + uint8_t nmiLine; + uint8_t swapJoysticks; + + tvic vic; + tcia cia1; + tcia cia2; + + union { + uint8_t RAM[RAMSIZE]; + uint16_t RAM16[RAMSIZE/2]; + uint32_t RAM32[RAMSIZE/4]; + }; + + + + uint8_t cartrigeLO[1]; //TODO + uint8_t cartrigeHI[1]; //TODO + +}; + +extern struct tio io; +extern struct tcpu cpu; + +void cpu_reset(); +void cpu_nmi(); +void cpu_clearNmi(); +void cpu_clock(int cycles); +void cpu_setExactTiming(); +void cpu_disableExactTiming(); + +void cia_clockt(int ticks); + +#define CORE_PIN0_PORT io.gpiob +#define CORE_PIN1_PORT io.gpiob +#define CORE_PIN2_PORT io.gpiod +#define CORE_PIN3_PORT io.gpioa +#define CORE_PIN4_PORT io.gpioa +#define CORE_PIN5_PORT io.gpiod +#define CORE_PIN6_PORT io.gpiod +#define CORE_PIN7_PORT io.gpiod +#define CORE_PIN8_PORT io.gpiod +#define CORE_PIN9_PORT io.gpioc +#define CORE_PIN10_PORT io.gpioc +#define CORE_PIN11_PORT io.gpioc +#define CORE_PIN12_PORT io.gpioc +#define CORE_PIN13_PORT io.gpioc +#define CORE_PIN14_PORT io.gpiod +#define CORE_PIN15_PORT io.gpioc +#define CORE_PIN16_PORT io.gpiob +#define CORE_PIN17_PORT io.gpiob +#define CORE_PIN18_PORT io.gpiob +#define CORE_PIN19_PORT io.gpiob +#define CORE_PIN20_PORT io.gpiod +#define CORE_PIN21_PORT io.gpiod +#define CORE_PIN22_PORT io.gpioc +#define CORE_PIN23_PORT io.gpioc +#define CORE_PIN24_PORT io.gpioe +#define CORE_PIN25_PORT io.gpioa +#define CORE_PIN26_PORT io.gpioa +#define CORE_PIN27_PORT io.gpioa +#define CORE_PIN28_PORT io.gpioa +#define CORE_PIN29_PORT io.gpiob +#define CORE_PIN30_PORT io.gpiob +#define CORE_PIN31_PORT io.gpiob +#define CORE_PIN32_PORT io.gpiob +#define CORE_PIN33_PORT io.gpioe +#define CORE_PIN34_PORT io.gpioe +#define CORE_PIN35_PORT io.gpioc +#define CORE_PIN36_PORT io.gpioc +#define CORE_PIN37_PORT io.gpioc +#define CORE_PIN38_PORT io.gpioc +#define CORE_PIN39_PORT io.gpioa +#define CORE_PIN40_PORT io.gpioa +#define CORE_PIN41_PORT io.gpioa +#define CORE_PIN42_PORT io.gpioa +#define CORE_PIN43_PORT io.gpiob +#define CORE_PIN44_PORT io.gpiob +#define CORE_PIN45_PORT io.gpiob +#define CORE_PIN46_PORT io.gpiob +#define CORE_PIN47_PORT io.gpiod +#define CORE_PIN48_PORT io.gpiod +#define CORE_PIN49_PORT io.gpiob +#define CORE_PIN50_PORT io.gpiob +#define CORE_PIN51_PORT io.gpiod +#define CORE_PIN52_PORT io.gpiod +#define CORE_PIN53_PORT io.gpiod +#define CORE_PIN54_PORT io.gpiod +#define CORE_PIN55_PORT io.gpiod +#define CORE_PIN56_PORT io.gpioe +#define CORE_PIN57_PORT io.gpioe +#define CORE_PIN58_PORT io.gpioe +#define CORE_PIN59_PORT io.gpioe +#define CORE_PIN60_PORT io.gpioe +#define CORE_PIN61_PORT io.gpioe +#define CORE_PIN62_PORT io.gpioe +#define CORE_PIN63_PORT io.gpioe + +static inline uint8_t gpioRead(uint8_t pin) __attribute__((always_inline, unused)); +static inline uint8_t gpioRead(uint8_t pin) +{ + /* + if (__builtin_constant_p(pin)) { + if (pin == 0) { + return (CORE_PIN0_PORT & CORE_PIN0_BITMASK) ? 1 : 0; + } else if (pin == 1) { + return (CORE_PIN1_PORT & CORE_PIN1_BITMASK) ? 1 : 0; + } else if (pin == 2) { + return (CORE_PIN2_PORT & CORE_PIN2_BITMASK) ? 1 : 0; + } else if (pin == 3) { + return (CORE_PIN3_PORT & CORE_PIN3_BITMASK) ? 1 : 0; + } else if (pin == 4) { + return (CORE_PIN4_PORT & CORE_PIN4_BITMASK) ? 1 : 0; + } else if (pin == 5) { + return (CORE_PIN5_PORT & CORE_PIN5_BITMASK) ? 1 : 0; + } else if (pin == 6) { + return (CORE_PIN6_PORT & CORE_PIN6_BITMASK) ? 1 : 0; + } else if (pin == 7) { + return (CORE_PIN7_PORT & CORE_PIN7_BITMASK) ? 1 : 0; + } else if (pin == 8) { + return (CORE_PIN8_PORT & CORE_PIN8_BITMASK) ? 1 : 0; + } else if (pin == 9) { + return (CORE_PIN9_PORT & CORE_PIN9_BITMASK) ? 1 : 0; + } else if (pin == 10) { + return (CORE_PIN10_PORT & CORE_PIN10_BITMASK) ? 1 : 0; + } else if (pin == 11) { + return (CORE_PIN11_PORT & CORE_PIN11_BITMASK) ? 1 : 0; + } else if (pin == 12) { + return (CORE_PIN12_PORT & CORE_PIN12_BITMASK) ? 1 : 0; + } else if (pin == 13) { + return (CORE_PIN13_PORT & CORE_PIN13_BITMASK) ? 1 : 0; + } else if (pin == 14) { + return (CORE_PIN14_PORT & CORE_PIN14_BITMASK) ? 1 : 0; + } else if (pin == 15) { + return (CORE_PIN15_PORT & CORE_PIN15_BITMASK) ? 1 : 0; + } else if (pin == 16) { + return (CORE_PIN16_PORT & CORE_PIN16_BITMASK) ? 1 : 0; + } else if (pin == 17) { + return (CORE_PIN17_PORT & CORE_PIN17_BITMASK) ? 1 : 0; + } else if (pin == 18) { + return (CORE_PIN18_PORT & CORE_PIN18_BITMASK) ? 1 : 0; + } else if (pin == 19) { + return (CORE_PIN19_PORT & CORE_PIN19_BITMASK) ? 1 : 0; + } else if (pin == 20) { + return (CORE_PIN20_PORT & CORE_PIN20_BITMASK) ? 1 : 0; + } else if (pin == 21) { + return (CORE_PIN21_PORT & CORE_PIN21_BITMASK) ? 1 : 0; + } else if (pin == 22) { + return (CORE_PIN22_PORT & CORE_PIN22_BITMASK) ? 1 : 0; + } else if (pin == 23) { + return (CORE_PIN23_PORT & CORE_PIN23_BITMASK) ? 1 : 0; + } else if (pin == 24) { + return (CORE_PIN24_PORT & CORE_PIN24_BITMASK) ? 1 : 0; + } else if (pin == 25) { + return (CORE_PIN25_PORT & CORE_PIN25_BITMASK) ? 1 : 0; + } else if (pin == 26) { + return (CORE_PIN26_PORT & CORE_PIN26_BITMASK) ? 1 : 0; + } else if (pin == 27) { + return (CORE_PIN27_PORT & CORE_PIN27_BITMASK) ? 1 : 0; + } else if (pin == 28) { + return (CORE_PIN28_PORT & CORE_PIN28_BITMASK) ? 1 : 0; + } else if (pin == 29) { + return (CORE_PIN29_PORT & CORE_PIN29_BITMASK) ? 1 : 0; + } else if (pin == 30) { + return (CORE_PIN30_PORT & CORE_PIN30_BITMASK) ? 1 : 0; + } else if (pin == 31) { + return (CORE_PIN31_PORT & CORE_PIN31_BITMASK) ? 1 : 0; + } else if (pin == 32) { + return (CORE_PIN32_PORT & CORE_PIN32_BITMASK) ? 1 : 0; + } else if (pin == 33) { + return (CORE_PIN33_PORT & CORE_PIN33_BITMASK) ? 1 : 0; + } else if (pin == 34) { + return (CORE_PIN34_PORT & CORE_PIN34_BITMASK) ? 1 : 0; + } else if (pin == 35) { + return (CORE_PIN35_PORT & CORE_PIN35_BITMASK) ? 1 : 0; + } else if (pin == 36) { + return (CORE_PIN36_PORT & CORE_PIN36_BITMASK) ? 1 : 0; + } else if (pin == 37) { + return (CORE_PIN37_PORT & CORE_PIN37_BITMASK) ? 1 : 0; + } else if (pin == 38) { + return (CORE_PIN38_PORT & CORE_PIN38_BITMASK) ? 1 : 0; + } else if (pin == 39) { + return (CORE_PIN39_PORT & CORE_PIN39_BITMASK) ? 1 : 0; + } else if (pin == 40) { + return (CORE_PIN40_PORT & CORE_PIN40_BITMASK) ? 1 : 0; + } else if (pin == 41) { + return (CORE_PIN41_PORT & CORE_PIN41_BITMASK) ? 1 : 0; + } else if (pin == 42) { + return (CORE_PIN42_PORT & CORE_PIN42_BITMASK) ? 1 : 0; + } else if (pin == 43) { + return (CORE_PIN43_PORT & CORE_PIN43_BITMASK) ? 1 : 0; + } else if (pin == 44) { + return (CORE_PIN44_PORT & CORE_PIN44_BITMASK) ? 1 : 0; + } else if (pin == 45) { + return (CORE_PIN45_PORT & CORE_PIN45_BITMASK) ? 1 : 0; + } else if (pin == 46) { + return (CORE_PIN46_PORT & CORE_PIN46_BITMASK) ? 1 : 0; + } else if (pin == 47) { + return (CORE_PIN47_PORT & CORE_PIN47_BITMASK) ? 1 : 0; + } else if (pin == 48) { + return (CORE_PIN48_PORT & CORE_PIN48_BITMASK) ? 1 : 0; + } else if (pin == 49) { + return (CORE_PIN49_PORT & CORE_PIN49_BITMASK) ? 1 : 0; + } else if (pin == 50) { + return (CORE_PIN50_PORT & CORE_PIN50_BITMASK) ? 1 : 0; + } else if (pin == 51) { + return (CORE_PIN51_PORT & CORE_PIN51_BITMASK) ? 1 : 0; + } else if (pin == 52) { + return (CORE_PIN52_PORT & CORE_PIN52_BITMASK) ? 1 : 0; + } else if (pin == 53) { + return (CORE_PIN53_PORT & CORE_PIN53_BITMASK) ? 1 : 0; + } else if (pin == 54) { + return (CORE_PIN54_PORT & CORE_PIN54_BITMASK) ? 1 : 0; + } else if (pin == 55) { + return (CORE_PIN55_PORT & CORE_PIN55_BITMASK) ? 1 : 0; + } else if (pin == 56) { + return (CORE_PIN56_PORT & CORE_PIN56_BITMASK) ? 1 : 0; + } else if (pin == 57) { + return (CORE_PIN57_PORT & CORE_PIN57_BITMASK) ? 1 : 0; + } else if (pin == 58) { + return (CORE_PIN58_PORT & CORE_PIN58_BITMASK) ? 1 : 0; + } else if (pin == 59) { + return (CORE_PIN59_PORT & CORE_PIN59_BITMASK) ? 1 : 0; + } else if (pin == 60) { + return (CORE_PIN60_PORT & CORE_PIN60_BITMASK) ? 1 : 0; + } else if (pin == 61) { + return (CORE_PIN61_PORT & CORE_PIN61_BITMASK) ? 1 : 0; + } else if (pin == 62) { + return (CORE_PIN62_PORT & CORE_PIN62_BITMASK) ? 1 : 0; + } else if (pin == 63) { + return (CORE_PIN63_PORT & CORE_PIN63_BITMASK) ? 1 : 0; + } else { + return 0; + } + } else { + Serial.println("Warning: Pin# not constant"); + return digitalRead(pin); + } + */ + return 0; + +} + +#endif \ No newline at end of file diff --git a/MCUME_pico/pico64/emuapi.cpp b/MCUME_pico/pico64/emuapi.cpp new file mode 100644 index 0000000..d682e75 --- /dev/null +++ b/MCUME_pico/pico64/emuapi.cpp @@ -0,0 +1,773 @@ +#define KEYMAP_PRESENT 1 + +#define PROGMEM + +#include "pico.h" +#include "pico/stdlib.h" +#include "hardware/adc.h" +#include +#include + +extern "C" { + #include "emuapi.h" + #include "iopins.h" +} + + +#include "vga_t_dma.h" +const uint16_t deflogo[] = { + 0,0 +}; +static const uint16_t * logo = deflogo; + +#define MAX_FILES 64 +#define MAX_FILENAME_SIZE 24 +#define MAX_MENULINES 9 +#define TEXT_HEIGHT 16 +#define TEXT_WIDTH 8 +#define MENU_FILE_XOFFSET (6*TEXT_WIDTH) +#define MENU_FILE_YOFFSET (2*TEXT_HEIGHT) +#define MENU_FILE_W (MAX_FILENAME_SIZE*TEXT_WIDTH) +#define MENU_FILE_H (MAX_MENULINES*TEXT_HEIGHT) +#define MENU_FILE_BGCOLOR RGBVAL16(0x00,0x00,0x40) +#define MENU_JOYS_YOFFSET (12*TEXT_HEIGHT) +#define MENU_VBAR_XOFFSET (0*TEXT_WIDTH) +#define MENU_VBAR_YOFFSET (MENU_FILE_YOFFSET) + +#define MENU_TFT_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_TFT_YOFFSET (MENU_VBAR_YOFFSET+32) +#define MENU_VGA_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_VGA_YOFFSET (MENU_VBAR_YOFFSET+MENU_FILE_H-32-37) + +extern TFT_T_DMA tft; + +static char romspath[64]; +static int nbFiles=0; +static int curFile=0; +static int topFile=0; +static char selection[MAX_FILENAME_SIZE+1]=""; +static char files[MAX_FILES][MAX_FILENAME_SIZE]; +static bool menuRedraw=true; + +static bool i2cKeyboardPresent = false; +static unsigned short * keys; +static int keyMap; + +static int keypadval=0; +static bool joySwapped = false; +static uint16_t bLastState; +static int xRef; +static int yRef; +static uint8_t usbnavpad=0; + +static bool menuOn=true; + + + + +void emu_printf(char * text) +{ + printf("%s\n",text); +} + +void emu_printf(int val) +{ + printf("%d\n",val); +} + +void emu_printi(int val) +{ + printf("%d\n",val); +} + +void emu_printh(int val) +{ + printf("0x%.8\n",val); +} + +static int malbufpt = 0; +static char malbuf[EXTRA_HEAP]; + +void * emu_Malloc(int size) +{ + void * retval = malloc(size); + if (!retval) { + emu_printf("failled to allocate"); + emu_printf(size); + emu_printf("fallback"); + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + } + else { + emu_printf("failure to allocate"); + } + } + else { + emu_printf("could allocate dynamic "); + emu_printf(size); + } + + return retval; +} + +void * emu_MallocI(int size) +{ + void * retval = NULL; + + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + emu_printf("could allocate static "); + emu_printf(size); + } + else { + emu_printf("failure to allocate"); + } + + return retval; +} +void emu_Free(void * pt) +{ + free(pt); +} + + + + + +int emu_ReadAnalogJoyX(int min, int max) +{ + adc_select_input(0); + int val = adc_read(); +#if INVX + val = 4095 - val; +#endif + val = val-xRef; + val = ((val*140)/100); + if ( (val > -512) && (val < 512) ) val = 0; + val = val+2048; + return (val*(max-min))/4096; +} + +int emu_ReadAnalogJoyY(int min, int max) +{ + adc_select_input(1); + int val = adc_read(); +#if INVY + val = 4095 - val; +#endif + val = val-yRef; + val = ((val*120)/100); + if ( (val > -512) && (val < 512) ) val = 0; + //val = (val*(max-min))/4096; + val = val+2048; + //return val+(max-min)/2; + return (val*(max-min))/4096; +} + + +static uint16_t readAnalogJoystick(void) +{ + uint16_t joysval = 0; + + int xReading = emu_ReadAnalogJoyX(0,256); + if (xReading > 128) joysval |= MASK_JOY2_LEFT; + else if (xReading < 128) joysval |= MASK_JOY2_RIGHT; + + int yReading = emu_ReadAnalogJoyY(0,256); + if (yReading < 128) joysval |= MASK_JOY2_UP; + else if (yReading > 128) joysval |= MASK_JOY2_DOWN; + +#ifdef PIN_JOY2_BTN + joysval |= (gpio_get(PIN_JOY2_BTN) ? 0 : MASK_JOY2_BTN); +#endif + return (joysval); +} + + +int emu_SwapJoysticks(int statusOnly) { + if (!statusOnly) { + if (joySwapped) { + joySwapped = false; + } + else { + joySwapped = true; + } + } + return(joySwapped?1:0); +} + +int emu_GetPad(void) +{ + return(keypadval/*|((joySwapped?1:0)<<7)*/); +} + +int emu_ReadKeys(void) +{ + uint16_t retval; + uint16_t j1 = readAnalogJoystick(); + uint16_t j2 = 0; + + // Second joystick +#if INVY +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_DOWN; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_UP; +#endif +#else +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_UP; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_DOWN; +#endif +#endif +#if INVX +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_LEFT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_RIGHT; +#endif +#else +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_RIGHT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_LEFT; +#endif +#endif +#ifdef PIN_JOY1_BTN + if ( !gpio_get(PIN_JOY1_BTN) ) j2 |= MASK_JOY2_BTN; +#endif + if (joySwapped) { + retval = ((j1 << 8) | j2); + } + else { + retval = ((j2 << 8) | j1); + } + + if (usbnavpad & MASK_JOY2_UP) retval |= MASK_JOY2_UP; + if (usbnavpad & MASK_JOY2_DOWN) retval |= MASK_JOY2_DOWN; + if (usbnavpad & MASK_JOY2_LEFT) retval |= MASK_JOY2_LEFT; + if (usbnavpad & MASK_JOY2_RIGHT) retval |= MASK_JOY2_RIGHT; + if (usbnavpad & MASK_JOY2_BTN) retval |= MASK_JOY2_BTN; +#ifdef PIN_KEY_USER1 + if ( !gpio_get(PIN_KEY_USER1) ) retval |= MASK_KEY_USER1; +#endif +#ifdef PIN_KEY_USER2 + if ( !gpio_get(PIN_KEY_USER2) ) retval |= MASK_KEY_USER2; +#endif +#ifdef PIN_KEY_USER3 + if ( !gpio_get(PIN_KEY_USER3) ) retval |= MASK_KEY_USER3; +#endif +#ifdef PIN_KEY_USER4 + if ( !gpio_get(PIN_KEY_USER4) ) retval |= MASK_KEY_USER4; +#endif + + //Serial.println(retval,HEX); + + if ( ((retval & (MASK_KEY_USER1+MASK_KEY_USER2)) == (MASK_KEY_USER1+MASK_KEY_USER2)) + || (retval & MASK_KEY_USER4 ) ) + { + } + + return (retval); +} + +unsigned short emu_DebounceLocalKeys(void) +{ + uint16_t bCurState = emu_ReadKeys(); + uint16_t bClick = bCurState & ~bLastState; + bLastState = bCurState; + + return (bClick); +} + +int emu_ReadI2CKeyboard(void) { + int retval=0; + + return(retval); +} + +void emu_InitJoysticks(void) { + + // Second Joystick +#ifdef PIN_JOY1_1 + gpio_set_pulls(PIN_JOY1_1,true,false); + gpio_set_dir(PIN_JOY1_1,GPIO_IN); +#endif +#ifdef PIN_JOY1_2 + gpio_set_pulls(PIN_JOY1_2,true,false); + gpio_set_dir(PIN_JOY1_2,GPIO_IN); +#endif +#ifdef PIN_JOY1_3 + gpio_set_pulls(PIN_JOY1_3,true,false); + gpio_set_dir(PIN_JOY1_3,GPIO_IN); +#endif +#ifdef PIN_JOY1_4 + gpio_set_pulls(PIN_JOY1_4,true,false); + gpio_set_dir(PIN_JOY1_4,GPIO_IN); +#endif +#ifdef PIN_JOY1_BTN + gpio_set_pulls(PIN_JOY1_BTN,true,false); + gpio_set_dir(PIN_JOY1_BTN,GPIO_IN); +#endif + +#ifdef PIN_KEY_USER1 + gpio_set_pulls(PIN_KEY_USER1,true,false); + gpio_set_dir(PIN_KEY_USER1,GPIO_IN); +#endif +#ifdef PIN_KEY_USER2 + gpio_set_pulls(PIN_KEY_USER2,true,false); + gpio_set_dir(PIN_KEY_USER2,GPIO_IN); +#endif +#ifdef PIN_KEY_USER3 + gpio_set_pulls(PIN_KEY_USER3,true,false); + gpio_set_dir(PIN_KEY_USER3,GPIO_IN); +#endif +#ifdef PIN_KEY_USER4 + gpio_set_pulls(PIN_KEY_USER4,true,false); + gpio_set_dir(PIN_KEY_USER4,GPIO_IN); +#endif +#ifdef PIN_JOY2_BTN + gpio_set_pulls(PIN_JOY2_BTN,true,false); + gpio_set_dir(PIN_JOY2_BTN,GPIO_IN); +#endif + + adc_init(); + adc_gpio_init(PIN_JOY2_A1X); + adc_gpio_init(PIN_JOY2_A2Y); + xRef=0; yRef=0; + for (int i=0; i<10; i++) { + adc_select_input(0); + xRef += adc_read(); + adc_select_input(1); + yRef += adc_read(); + sleep_ms(20); + } + +#if INVX + xRef = 4095 -xRef/10; +#else + xRef /= 10; +#endif +#if INVY + yRef = 4095 -yRef/10; +#else + yRef /= 10; +#endif +} + + + + +int emu_setKeymap(int index) { +} + + + +#include "ff.h" +static FATFS fatfs; +static FIL file; +extern "C" int sd_init_driver(void); + +static int readNbFiles(char * rootdir) { + int totalFiles = 0; + + DIR dir; + FILINFO entry; + FRESULT fr = f_findfirst(&dir, &entry, rootdir, "*"); + while ( (fr == FR_OK) && (entry.fname[0]) && (totalFiles=0) { + menuRedraw=true; + curFile -= 9; + } else if (curFile!=0) { + menuRedraw=true; + curFile--; + } + } + else if (bClick & MASK_JOY2_DOWN) { + if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_JOY2_LEFT) || (bClick & MASK_JOY1_LEFT) ) { + if ((curFile<(nbFiles-9)) && (nbFiles)) { + curFile += 9; + menuRedraw=true; + } + else if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_KEY_USER2) ) { + emu_SwapJoysticks(0); + menuRedraw=true; + } + + if (menuRedraw && nbFiles) { + int fileIndex = 0; + tft.drawRectNoDma(MENU_FILE_XOFFSET,MENU_FILE_YOFFSET, MENU_FILE_W, MENU_FILE_H, MENU_FILE_BGCOLOR); +// if (curFile <= (MAX_MENULINES/2-1)) topFile=0; +// else topFile=curFile-(MAX_MENULINES/2); + if (curFile <= (MAX_MENULINES-1)) topFile=0; + else topFile=curFile-(MAX_MENULINES/2); + + //Serial.print("curfile: "); + //Serial.println(curFile); + //Serial.print("topFile: "); + //Serial.println(topFile); + + int i=0; + while (i=nbFiles) { + // no more files + break; + } + char * filename = &files[fileIndex][0]; + if (fileIndex >= topFile) { + if ((i+topFile) < nbFiles ) { + if ((i+topFile)==curFile) { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0x00), RGBVAL16(0xff,0x00,0x00), true); + strcpy(selection,filename); + } + else { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0xff), MENU_FILE_BGCOLOR, true); + } + } + i++; + } + fileIndex++; + } + + + tft.drawTextNoDma(48,MENU_JOYS_YOFFSET+8, (emu_SwapJoysticks(1)?(char*)"SWAP=1":(char*)"SWAP=0"), RGBVAL16(0x00,0xff,0xff), RGBVAL16(0x00,0x00,0xff), false); + menuRedraw=false; + } + + return (action); +} + +bool menuActive(void) +{ + return (menuOn); +} + +void toggleMenu(bool on) { + if (on) { + menuOn = true; + backgroundMenu(); + } else { + menuOn = false; + } +} + +char * menuSelection(void) +{ + return (selection); +} + + + + + + + + + +int emu_FileOpen(char * filename) +{ + int retval = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileOpen..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + retval = 1; + } + else { + emu_printf("FileOpen failed"); + } + return (retval); +} + +int emu_FileRead(char * buf, int size) +{ + unsigned char buffer[256]; + int remaining = size; + int byteread = 0; + unsigned int retval=0; + if (size < 256) { + if( !(f_read (&file, buffer, size, &retval)) ) + if (retval>0) { + memcpy(buf,buffer,retval); + byteread += retval; + } + } + else { + while (remaining>0) { + if( !(f_read (&file, buffer, 256, &retval)) ) + //f_read (&file, buffer, 256, &retval); + if (retval>0) { + //emu_printi(retval); + memcpy(buf,buffer,retval); + buf += retval; + byteread += retval; + remaining -= retval; + } + else { + break; + } + } + } + return byteread; +} + +unsigned char emu_FileGetc(void) { + unsigned char c; + unsigned int retval=0; + if( !(f_read (&file, &c, 1, &retval)) ) + if (retval != 1) { + emu_printf("emu_FileGetc failed"); + } + return c; +} + + +void emu_FileClose(void) +{ + f_close(&file); +} + +int emu_FileSize(char * filename) +{ + int filesize=0; + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileSize..."); + emu_printf(filepath); + FILINFO entry; + f_stat(filepath, &entry); + filesize = entry.fsize; + return(filesize); +} + + +#ifdef SDIO + +int emu_FileSeek(int seek) +{ +#ifdef USE_SDFS + f_lseek(&file, seek); +#else + file.seek(seek); +#endif + return (seek); +} + +int emu_FileTell(void) +{ +#ifdef USE_SDFS + return (f_tell(&file)); +#else + return (50); +#endif +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + filesize = file.size(); + emu_printf(filesize); + + if (size >= filesize) + { + if (emu_FileRead(buf, filesize) != filesize) + { + emu_printf("File read failed"); + } + } + file.close(); + } +#endif + + return(filesize); +} + +int emu_LoadFileSeek(char * filename, char * buf, int size, int seek) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFileSeek..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + f_lseek(&file, seek); + emu_printf(size); + if (size >= filesize) + { + int retval=0; + if( (!f_read (&file, buf, size, &retval)) ) + if (retval != size) + { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + file.seek(seek); + emu_printf(size); + if (file.read(buf, size) != size) { + emu_printf("File read failed"); + } + file.close(); + } +#endif + + return(filesize); +} +#endif + + + +void emu_init(void) +{ + sd_init_driver(); + FRESULT fr = f_mount(&fatfs, "0:", 1); + //emu_FileSystemInit(); + + strcpy(romspath,ROMSDIR); + nbFiles = readNbFiles(romspath); + + emu_printf("SD initialized, files found: "); + emu_printi(nbFiles); + + emu_InitJoysticks(); +#ifdef SWAP_JOYSTICK + joySwapped = true; +#else + joySwapped = false; +#endif + + toggleMenu(true); +} + + +void emu_start(void) +{ + + usbnavpad = 0; + + keys = (unsigned short *)key_map1; + keyMap = 0; +} diff --git a/MCUME_pico/pico64/emuapi.h b/MCUME_pico/pico64/emuapi.h new file mode 100644 index 0000000..352f9ff --- /dev/null +++ b/MCUME_pico/pico64/emuapi.h @@ -0,0 +1,136 @@ +#ifndef EMUAPI_H +#define EMUAPI_H + +#include "platform_config.h" + +#define CUSTOM_SND 1 +//#define TIMER_REND 1 + +#define EXTRA_HEAP 0x10 + +// Title: < > +#define TITLE " C64 Emulator " +#define ROMSDIR "c64" + +#define emu_Init(ROM) {c64_Start(ROM); c64_Init(); } +#define emu_Step(x) { c64_Step(); } +#define emu_Input(x) { c64_Input(x); } + +#define PALETTE_SIZE 256 +#define VID_FRAME_SKIP 0x0 +#define TFT_VBUFFER_YCROP 0 +#define SINGLELINE_RENDERING 1 + +#define ACTION_NONE 0 +#define ACTION_MAXKBDVAL 12 +#define ACTION_EXITKBD 128 +#define ACTION_RUNTFT 129 +#define ACTION_RUNVGA 130 + +#ifdef KEYMAP_PRESENT + +#define TAREA_W_DEF 32 +#define TAREA_H_DEF 32 +#define TAREA_END 255 +#define TAREA_NEW_ROW 254 +#define TAREA_NEW_COL 253 +#define TAREA_XY 252 +#define TAREA_WH 251 + +#define KEYBOARD_X 104 +#define KEYBOARD_Y 78 +#define KEYBOARD_KEY_H 30 +#define KEYBOARD_KEY_W 21 +#define KEYBOARD_HIT_COLOR RGBVAL16(0xff,0x00,0x00) + +const unsigned short keysw[] = { + TAREA_XY,KEYBOARD_X,KEYBOARD_Y, + TAREA_WH,KEYBOARD_KEY_W,KEYBOARD_KEY_H, + TAREA_NEW_ROW,40,40, + TAREA_END}; + +const unsigned short key_map1[] = { + 2,3}; + +#ifdef HAS_I2CKBD +const unsigned short i2ckeys[] = { + 0X0080,0X0008}; +#endif + +#endif + + +#define MASK_JOY2_RIGHT 0x0001 +#define MASK_JOY2_LEFT 0x0002 +#define MASK_JOY2_UP 0x0004 +#define MASK_JOY2_DOWN 0x0008 +#define MASK_JOY2_BTN 0x0010 +#define MASK_KEY_USER1 0x0020 +#define MASK_KEY_USER2 0x0040 +#define MASK_KEY_USER3 0x0080 +#define MASK_JOY1_RIGHT 0x0100 +#define MASK_JOY1_LEFT 0x0200 +#define MASK_JOY1_UP 0x0400 +#define MASK_JOY1_DOWN 0x0800 +#define MASK_JOY1_BTN 0x1000 +#define MASK_KEY_USER4 0x2000 + + + +extern void emu_init(void); +extern void emu_start(void); +extern void emu_resetSD(void); + +extern void emu_printf(char * text); +extern void emu_printi(int val); +extern void * emu_Malloc(int size); +extern void emu_Free(void * pt); + + +extern int emu_FileOpen(char * filename); +extern int emu_FileRead(char * buf, int size); +extern unsigned char emu_FileGetc(void); +extern int emu_FileSeek(int seek); +extern void emu_FileClose(void); +extern int emu_FileSize(char * filename); +extern int emu_LoadFile(char * filename, char * buf, int size); +extern int emu_LoadFileSeek(char * filename, char * buf, int size, int seek); +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); + +extern void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index); +extern void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride); +extern void emu_DrawLine(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line); +extern void emu_DrawVsync(void); +extern int emu_FrameSkip(void); +extern void * emu_LineBuffer(int line); + +extern void emu_InitJoysticks(void); +extern int emu_SwapJoysticks(int statusOnly); +extern unsigned short emu_DebounceLocalKeys(void); +extern int emu_ReadKeys(void); +extern int emu_GetPad(void); +extern int emu_ReadAnalogJoyX(int min, int max); +extern int emu_ReadAnalogJoyY(int min, int max); +extern int emu_ReadI2CKeyboard(void); +extern void emu_KeyboardOnUp(int keymodifer, int key); +extern void emu_KeyboardOnDown(int keymodifer, int key); + +extern void emu_sndPlaySound(int chan, int volume, int freq); +extern void emu_sndPlayBuzz(int size, int val); +extern void emu_sndInit(); +extern void emu_resetus(void); +extern int emu_us(void); + +extern int emu_setKeymap(int index); + +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); +extern void emu_printh(int val); + + +#endif diff --git a/MCUME_pico/pico64/font8x8.h b/MCUME_pico/pico64/font8x8.h new file mode 100644 index 0000000..4f773da --- /dev/null +++ b/MCUME_pico/pico64/font8x8.h @@ -0,0 +1,135 @@ + +// Font: c64_lower.64c + +const unsigned char font8x8[128][8] PROGMEM = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) + { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) + { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) + { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) + { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//) + { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) + { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) + { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) + { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F +}; + diff --git a/MCUME_pico/pico64/iopins.h b/MCUME_pico/pico64/iopins.h new file mode 100644 index 0000000..a636576 --- /dev/null +++ b/MCUME_pico/pico64/iopins.h @@ -0,0 +1,42 @@ +#ifndef IOPINS_H +#define IOPINS_H + +#include "platform_config.h" + + +// VGA (see in code!!!) +/* +2-9 RRRGGGBB +10-11 VSYNC and HSYNC +*/ + +// SD (see SPI0 in code!!!) +/* +#define SD_SCLK 18 +#define SD_MOSI 19 +#define SD_MISO 16 +#define SD_CS 17 +*/ + +// I2C keyboard (not used) +/* +#define I2C_SCL_IO 15? +#define I2C_SDA_IO 14? +*/ + +// Analog joystick (primary) for JOY2 and 3 extra buttons +#define PIN_JOY2_A1X 26 +#define PIN_JOY2_A2Y 27 +#define PIN_JOY2_BTN 22 +#define PIN_KEY_USER1 20 +#define PIN_KEY_USER2 21 + +// Second joystick +//#define PIN_JOY1_BTN 2 +//#define PIN_JOY1_1 14 // UP +//#define PIN_JOY1_2 7 // DOWN +//#define PIN_JOY1_3 6 // RIGHT +//#define PIN_JOY1_4 5 // LEFT + + +#endif diff --git a/MCUME_pico/pico64/keyboard.h b/MCUME_pico/pico64/keyboard.h new file mode 100755 index 0000000..2c13ef3 --- /dev/null +++ b/MCUME_pico/pico64/keyboard.h @@ -0,0 +1,49 @@ +/* + Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +#ifndef Teensy64_keyboard_h_ +#define Teensy64_keyboard_h_ + +void initKeyboard(); +void initJoysticks(); + +void sendKey(char key); +void sendString(const char * p); +void do_sendString();//call in yield() + +uint8_t cia1PORTA(void); +uint8_t cia1PORTB(void); + +#endif \ No newline at end of file diff --git a/MCUME_pico/pico64/keyboard_osd.h b/MCUME_pico/pico64/keyboard_osd.h new file mode 100644 index 0000000..062eb4e --- /dev/null +++ b/MCUME_pico/pico64/keyboard_osd.h @@ -0,0 +1,20 @@ + +#ifndef keyboard_osd_h_ +#define keyboard_osd_h_ + +extern bool virtualkeyboardIsActive(void); +extern void drawVirtualkeyboard(void); +extern void toggleVirtualkeyboard(bool keepOn); +extern void handleVirtualkeyboard(void); + +extern bool callibrationActive(void); +extern int handleCallibration(uint16_t bClick); + +extern bool menuActive(void); +extern char * menuSelection(void); +extern void toggleMenu(bool on); +extern int handleMenu(uint16_t bClick); + + +#endif + diff --git a/MCUME_pico/pico64/logo.h b/MCUME_pico/pico64/logo.h new file mode 100644 index 0000000..168c944 --- /dev/null +++ b/MCUME_pico/pico64/logo.h @@ -0,0 +1,125 @@ +const uint16_t logo[] PROGMEM = { +0x0140,0x007c,0x632c,0xbdd7,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce59,0xa514,0x2104, +0xbdf7,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xdefb,0x9cd3, +0xce79,0xce59,0xce79,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce59,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xd69a,0xbdf7, +0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xce79,0xce59,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce79,0xce59,0xce79,0xd69a,0xad75,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x9cd3,0xb596,0xce79,0xce79,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xce79,0xce79,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x738e,0x8410,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x8410,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xce79,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd6ba,0xa514,0x0000,0x10a2,0x10a2,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x10a2,0x0841,0x2124,0x9492,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0xa514,0x8c71,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x10a2,0x0000,0x18c3,0xbdd7,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd6ba,0x7bef,0x0000,0x18e3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94b2,0x9cf3,0x8430,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x1082,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18c3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x8c51,0x9cf3,0x94b2,0x9cd3,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9cd3,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9cd3,0x94b2,0x94b2,0x94b2,0x9cd3,0x94b2,0x94b2,0x9cd3,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x9cd3,0x94b2,0x94b2,0x9cd3,0x94b2,0x9cd3,0x94b2,0x94b2,0x9cd3,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x9cd3,0x9cd3,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9cd3,0x94b2,0x94b2,0x9cd3,0x94b2,0x9cf3,0x8430,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x6b4d,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0xa514,0x630c,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x630c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x1800,0x1800,0x0000,0x0000,0x0000,0x0000,0x1800,0x1800,0x0800,0x1000,0x1800,0x1800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x1800,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x1800,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x2965,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x2965,0x2965,0x3186,0x2945,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x5000,0x8041,0x7061,0x0020,0x0000,0x0000,0x2800,0x7020,0x8061,0x4041,0x6820,0x8841,0x8061,0x1020,0x0000,0x0800,0x0000,0x0000,0x1000,0x1000,0x0800,0x0000,0x0800,0x0800,0x0000,0x0000,0x0000,0x1000,0x0000,0x0000,0x0000,0x0800,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x1000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0800,0x1000,0x0000,0x8020,0xa061,0x7082,0x0000,0x0800,0x0800,0x1000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2124,0x8410,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x7bef,0x18c3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x9000,0xd000,0xd061,0x90c3,0x0000,0x0000,0x4800,0xc800,0xd861,0x7882,0x9800,0xd800,0xc082,0x2061,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x0000,0x7020,0x8861,0x3861,0x0000,0x0800,0x1000,0x0000,0x0000,0x0000,0x0800,0x1000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x1000,0x0000,0x0000,0x0000,0xb000,0xe000,0xa0a2,0x0000,0x2000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x7bcf,0xa514,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0xa514,0x73ae,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x8800,0xd000,0xc000,0xc8a2,0x68a2,0x0000,0x4800,0xc000,0xd041,0x7882,0x0000,0x3000,0x2820,0x0800,0x0800,0x0820,0x0020,0x2800,0x5820,0x5841,0x2041,0x0000,0x4800,0x8020,0xc800,0xd820,0xa0a2,0x6841,0x1820,0x0000,0x0000,0x5820,0x5021,0x0020,0x0000,0x1000,0x0800,0x0020,0x0000,0x3800,0x6020,0x5041,0x0020,0x0000,0x0800,0x0000,0x3000,0x6020,0x5020,0xa800,0xd000,0x98a2,0x0000,0x0000,0x3800,0x6020,0x5820,0x0020,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x10a2,0x8c71,0x9cf3,0x94b2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94b2,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x8800,0xd800,0xa882,0x7800,0xc8c3,0x1061,0x4000,0xc000,0xd041,0x7882,0x8800,0xc041,0xa882,0x3041,0xa820,0xc061,0x9881,0x8000,0xb820,0xd021,0xc0a2,0x4882,0x5800,0x9800,0xc000,0xc800,0xa841,0x8041,0x0020,0x7800,0xb820,0x8020,0x9021,0xb0a2,0x5082,0x4000,0xb820,0xb861,0x9061,0x8800,0xc020,0xd041,0xb0c3,0x2861,0x0000,0x9000,0xc020,0x9841,0x7020,0xb800,0xd000,0x98a2,0x0000,0xa000,0xc020,0x8821,0x9840,0xb882,0x70a2,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x8800,0xd000,0xb082,0x0020,0xa800,0xb0e3,0x0841,0xc000,0xd041,0x7082,0xa800,0xe000,0xc082,0x3061,0xc000,0xd800,0xa861,0x0000,0x3800,0xb800,0xd820,0x98c3,0x0000,0x0000,0xb800,0xd820,0x7082,0x0000,0x5800,0xd000,0xc861,0x4861,0x7000,0xd800,0xc0c3,0x5861,0xc800,0xd820,0x8861,0x0000,0x5800,0xc800,0xd861,0x70a2,0x6800,0xd800,0xc861,0x0841,0x0000,0xb000,0xd800,0x90a2,0x7800,0xe000,0xa861,0x0000,0x3000,0xc800,0xc8a2,0x4082,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x528a,0x630c,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x630c,0x4208,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x8800,0xd000,0xb082,0x0020,0x3000,0xc061,0xa082,0xc000,0xd041,0x7882,0x9800,0xd000,0xb882,0x3061,0xb800,0xd020,0x88a2,0x0000,0x0000,0xb000,0xd000,0xa082,0x0000,0x3000,0xb800,0xd820,0x80a2,0x0000,0x8800,0xd000,0xb841,0x9841,0x9000,0x8800,0x9020,0x6041,0xc000,0xd061,0x6882,0x0000,0x4000,0xc000,0xd041,0x7082,0x9800,0xd800,0xb882,0x1041,0x0000,0xa800,0xd800,0x90a2,0x9800,0xd800,0x9882,0x0020,0x3800,0xb800,0xd040,0x78a2,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2945,0xad55,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0x9cf3,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x8800,0xd000,0xb082,0x0020,0x0000,0x6000,0xd000,0xc800,0xd041,0x7882,0xa000,0xd800,0xc082,0x3061,0xb800,0xd020,0x90a2,0x0000,0x1800,0xb000,0xd800,0xa0a2,0x0000,0x2800,0xb800,0xd820,0x78a2,0x0000,0x7000,0xd800,0xb8a2,0x0020,0x0000,0x9820,0x9882,0x5020,0xc800,0xd061,0x7082,0x0000,0x4000,0xc000,0xd041,0x6882,0x8800,0xd800,0xc082,0x0061,0x0000,0xa800,0xd800,0x90a2,0x8000,0xe000,0xa0a2,0x0020,0x2800,0xc000,0xd041,0x5861,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x8c51,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xdedb,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x8800,0xd800,0xb882,0x0040,0x1800,0x0000,0x8800,0xd000,0xd041,0x7882,0xa000,0xd800,0xc082,0x3861,0xb800,0xd820,0x90a2,0x0000,0x1000,0xb000,0xd800,0xa0a2,0x0000,0x3000,0xb800,0xd820,0x80a2,0x0000,0x0000,0x9800,0xc882,0x7082,0x8800,0xd000,0x9041,0x4800,0xc800,0xd061,0x7882,0x0000,0x4800,0xc800,0xd841,0x7882,0x0000,0xb000,0xd061,0x88a2,0x6000,0xc000,0xd800,0x98a2,0x0000,0xa800,0xc082,0x6882,0x9000,0xc800,0x8820,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce59,0xce79,0xce79,0xce59,0xce59,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xce59,0xce79,0xce59,0xce59,0xce59,0xd6ba,0xa514,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x5000,0x8000,0x6820,0x0000,0x0800,0x0000,0x1000,0x7000,0x8000,0x4820,0x5800,0x8000,0x7020,0x2000,0x6800,0x8000,0x5820,0x0000,0x0800,0x6800,0x8000,0x6020,0x0000,0x1800,0x6800,0x8000,0x4820,0x0000,0x0000,0x0000,0x5000,0x7820,0x7800,0x4800,0x0000,0x3000,0x7000,0x7800,0x4020,0x0000,0x2800,0x7000,0x8000,0x4820,0x0000,0x1000,0x6800,0x8020,0x7000,0x7000,0x7800,0x6020,0x0000,0x0000,0x5800,0x8020,0x7800,0x3800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce59,0xce79,0xce79,0xce59,0xbdd7,0xa514,0x9492,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c51,0x8c51,0x9cf3,0xbdd7,0xce59,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0800,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce59,0xce79,0xd69a,0xce59,0x9492,0x528a,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x2965,0x73ae,0xb596,0xce59,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x1800,0x1000,0x0000,0x0000,0x0000,0x0000,0x1000,0x1800,0x0800,0x0800,0x1800,0x1000,0x0000,0x1000,0x1800,0x0800,0x0000,0x0000,0x1000,0x1800,0x1000,0x0000,0x0000,0x1000,0x1800,0x0800,0x0000,0x0000,0x0000,0x0800,0x1000,0x1000,0x0800,0x0000,0x0000,0x1000,0x1000,0x0800,0x0000,0x0000,0x1000,0x1800,0x0800,0x0000,0x0000,0x1000,0x1000,0x1000,0x1000,0x1000,0x0800,0x0000,0x0000,0x0800,0x1000,0x1000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce59,0xce79,0xce59,0x9492,0x0000,0x0000,0x2965,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x4a49,0x8c51,0x8c71,0x2104,0x7bef,0xc618,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xce59,0x9cd3,0x0000,0x0000,0x10a2,0x2945,0x3186,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x3186,0x3186,0x31a6,0x8430,0xc638,0x8410,0x39c7,0xb5b6,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xbdd7,0x5aeb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x4a49,0xad75,0x9492,0x18e3,0xad55,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0x9cf3,0x94b2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94b2,0x9cf3,0x8410,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad75,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x5aeb,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x528a,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x4a69,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x4a49,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0020,0x1082,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0861,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0861,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x2124,0x2945,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0841,0x39e7,0x39c7,0x2104,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x18c3,0x4a69,0x4228,0x3186,0x18e3,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x18e3,0x528a,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x528a,0x1082,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x10a2,0x52aa,0x528a,0x4208,0x2945,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x39e7,0x9492,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x8c51,0x31a6,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x4a69,0x5aeb,0x4a49,0x31a6,0x2104,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x8410,0xa514,0x94b2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94b2,0xa514,0x7bef,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x18c3,0x18e3,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x2124,0x5aeb,0x52aa,0x39e7,0x2945,0x1082,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x2124,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x18c3,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18c3,0x8c71,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9cd3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0020,0x0000,0x2965,0x4a69,0x4228,0x3186,0x18c3,0x0020,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cb3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cf3,0x8c31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x1082,0x738e,0x7bef,0x7bcf,0x7bef,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bef,0x73ae,0xad75,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0020,0x0000,0x0841,0x2124,0x2104,0x1082,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd69a,0xb596,0x738e,0x7bef,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bef,0x630c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd2,0x9cd3,0x94f3,0x94f3,0x9cf3,0x9cf3,0x94f3,0x94d3,0x94f3,0x94f3,0x9cf3,0x94f3,0x94f3,0x9cf3,0x94f3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94f3,0x94f3,0x9cf3,0x94f3,0x94f3,0x9cd3,0x94f3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cd3,0x9cf3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94f4,0x94f3,0x9cf3,0x9cf3,0x94f3,0x9cd3,0x9cf3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cf3,0x94f3,0x94f3,0x9cf3,0x94f3,0x94f3,0x9cd3,0x94f3,0x9cf3,0x9cf3,0x9cf3,0x94f3,0x9cf3,0x9cf3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cd3,0x94d3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0xa534,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd69a,0xce79,0xce59,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xce59,0xd69a,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0x94b2,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x94d3,0xa430,0xb2eb,0xb2eb,0xb2eb,0xb2aa,0xa430,0xa451,0xb2eb,0xb2eb,0xb2cb,0xb28a,0xa410,0xab8e,0xa471,0x94f3,0x9cd3,0x9cd3,0x94d3,0xabcf,0xb2cb,0xb2eb,0xb2aa,0xb2cb,0x9c92,0xabcf,0xb28a,0xb2cb,0xb2aa,0xb2eb,0x9c31,0xaaeb,0xb2aa,0xbaeb,0xb2aa,0xb2cb,0xa492,0x94d3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0xabcf,0xb2cb,0xb2eb,0xb2cb,0xb2eb,0xa430,0xaaeb,0xb2aa,0xbaeb,0xb2aa,0xb2cb,0xa471,0xab8e,0xb2cb,0xb2eb,0xb2eb,0xac30,0x9c51,0xbaab,0xb2eb,0xb2eb,0xb2eb,0xac30,0xa3ef,0xb269,0xb2eb,0xbaeb,0xb28a,0xab8e,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x632c,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xd6ba,0x528a,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cd3,0x9cd3,0x94d3,0xb104,0xba08,0xab6d,0xab2c,0xabaf,0x9492,0xb986,0xba49,0xab6d,0xa3cf,0xa3ef,0x9c51,0xb924,0xac10,0x94f3,0x9cb2,0x9cf3,0x9471,0xc000,0xb2eb,0xa36d,0xa3ef,0xa430,0x9c30,0xc061,0xabae,0x9c10,0xa3ef,0xa3f0,0x9c71,0x9c30,0x9bae,0xc000,0xab8e,0x9c10,0x9c92,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cf3,0x9471,0xc000,0xb2eb,0xab4d,0xab2c,0xa3ef,0x9c92,0x9c30,0x9bae,0xc000,0xb36d,0x9c51,0xa36d,0xc061,0xab4c,0xab6d,0xaa8a,0xc208,0xab0c,0xc081,0xab4d,0xab6d,0xaaaa,0xc186,0xa451,0x9c30,0xaa49,0xc1c7,0x9c10,0xa431,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xc638,0xc618,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xc618,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8430,0x18e3,0x9cd3,0xc618,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xc618,0xce59,0xce79,0xce79,0xce79,0xce59,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9c10,0xab0c,0xab2c,0xab2c,0xbaaa,0xabf0,0xb186,0xba8a,0xab2c,0xa4b2,0x9555,0x8cf3,0xb965,0xac71,0x9534,0x94f3,0x9534,0x9451,0xc000,0xb2ec,0xab6d,0x9cf3,0x9575,0x9430,0xc124,0x9d14,0x9534,0x9534,0x9534,0x94f3,0x9d14,0x94b2,0xb945,0xa492,0x9534,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94d3,0x9bcf,0xab0c,0xab2c,0xab0c,0xbaaa,0xa492,0x9534,0x94b2,0xb925,0xac71,0x8d55,0xa38d,0xc0a2,0xb2eb,0xb2eb,0xb269,0xc228,0xab0c,0xc124,0xb2eb,0xaacb,0xb945,0xbacb,0x9cf3,0x9554,0xa34c,0xbacb,0x9534,0x94f3,0x9cd3,0x9cd2,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xce59,0xce59,0xce59,0xbdf7,0x9cf3,0x8410,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x8410,0x8c51,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0xa514,0x94b2,0x0000,0x5aeb,0x7bef,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x738e,0x73ae,0x94b2,0xbdd7,0xce59,0xce79,0xce59,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x94d3,0xa3ae,0xb2ab,0xb2ca,0xaacb,0xb800,0xabae,0xa2ca,0xb9e7,0xaacb,0xb2cb,0xb2cb,0xa410,0xb1c7,0xba69,0xb30c,0xb2eb,0xb2ec,0xa3ef,0xb1e7,0xb269,0xaacb,0xb2cb,0xb30c,0x9c50,0xb1c7,0xba8a,0xb2eb,0xb2cb,0xb2eb,0xa492,0x9cf3,0x9471,0xb882,0xa451,0x94f3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cb2,0xab4d,0xb2aa,0xb2cb,0xaa8a,0xc000,0xa451,0x94f3,0x9471,0xb861,0xac51,0x9514,0xa36d,0xb9e8,0x94d3,0x94f3,0x9451,0xb9e7,0xaaeb,0xba28,0x94d3,0x94d3,0x9bcf,0xb9a6,0x9cb2,0x9514,0xa2ec,0xba6a,0x94f3,0x9cb2,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xce79,0xd69a,0xce79,0x9cd3,0x4228,0x2965,0x3186,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2124,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xa514,0x528a,0x31a6,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x39e7,0x4a49,0x2945,0x73ae,0xb5b6,0xce79,0xce59,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9c10,0xa3ef,0xa3ef,0xa3ef,0xa430,0x94f3,0x94b2,0x9c10,0xa3ef,0xa3ef,0xa3cf,0xa471,0x9c51,0xa3ef,0xa3ef,0xa3ef,0xa3cf,0x9c71,0x9492,0xa3ef,0xa3ef,0xa3ef,0xa3ef,0x9cb2,0x9492,0xa3ef,0xa3ef,0xa3ef,0xa3ef,0x9cb2,0x9cd3,0x9cb3,0x9c50,0x9cb2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cb2,0xa3ef,0xa3ef,0xa3ef,0xa3ef,0x9c71,0x9cd3,0x9cd3,0x94b3,0x9c30,0x9cb2,0x9cd3,0x9c92,0x9c51,0x9cd3,0x9cd3,0x9cb2,0x9c51,0x9c71,0x9c51,0x9cd3,0x9cd3,0x9cd3,0x9c30,0x9cb3,0x94d3,0x9c71,0x9c71,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce59,0xce79,0xce59,0x94b2,0x0000,0x0000,0x2124,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x2104,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0x7bcf,0x6b6d,0x4228,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39e7,0x5aeb,0xa514,0x9492,0x0861,0x8c71,0xce59,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cf3,0x94f3,0x94f3,0x94f3,0x9cf3,0x9cd3,0x9cd3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cf3,0x9cf3,0x94f3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cd3,0x94f3,0x94f3,0x94f3,0x94f3,0x9cd3,0x9cd3,0x94f3,0x94f3,0x94f3,0x94f4,0x9cd3,0x9cd2,0x9cd3,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94f3,0x94f4,0x94f3,0x94f3,0x94f3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x9cd3,0x94f3,0x9cd3,0x9cd3,0x9cd3,0x94f3,0x9cd3,0x9cd3,0x9cf3,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xce79,0xa514,0x2104,0x0000,0x10a2,0x18e3,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2104,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2124,0x2945,0x31a6,0x9cd3,0xc638,0x5acb,0x630c,0xc618,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cb3,0x9cd3,0x9cb3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xc618,0x7bcf,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0xad75,0x738e,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x8430,0xa514,0x94b2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94b2,0xa514,0x8410,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x18e3,0x10a2,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x52aa,0x9cf3,0x6b4d,0x4a49,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x4a49,0x94b2,0xa514,0x9cf3,0x9cf3,0x9cf3,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0xa4f4,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9d14,0xa513,0x9cf4,0x9cf3,0x9cf3,0x9d14,0x9d13,0x9cf3,0x9cf3,0xa514,0x9cf3,0xa513,0x9cf3,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0xa514,0x9cf3,0xa514,0x9492,0x4208,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0x2965,0x2104,0x10a2,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x3186,0x5aeb,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x5aeb,0x2945,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0x39e7,0x31a6,0x2945,0x2104,0x10a2,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x18c3,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x31a6,0x4a49,0x39e7,0x31a6,0x2945,0x2104,0x10a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x39e7,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x39e7,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x3186,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0x3186,0x18c3,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a49,0x528a,0x4228,0x39e7,0x31a6,0x2945,0x18e3,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x2965,0x2124,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x4a49,0xb596,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xbdd7,0x52aa,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x9cd3,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xc638,0x8c51,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x39c7,0x4208,0x2945,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x10a2,0x52aa,0x5acb,0x528a,0x4a49,0x39e7,0x3186,0x2124,0x18c3,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0x4228,0x31a6,0x2104,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0xad55,0xd6ba,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xdedb,0xc618,0x0861,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0xdedb,0x6b6d,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x4a49,0x4a69,0x39c7,0x2124,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0x630c,0x5aeb,0x52aa,0x528a,0x4228,0x39e7,0x3186,0x2104,0x10a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3186,0x528a,0x4208,0x3186,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x39e7,0x7bcf,0x8410,0x7bef,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x7bef,0x8410,0x7bef,0x4208,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd69a,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x94b2,0xd69a,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xd6ba,0xa514,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0020,0x0000,0x4a69,0x5acb,0x4228,0x31a6,0x18e3,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x10a2,0x630c,0x632c,0x5aeb,0x52aa,0x4a69,0x4228,0x39c7,0x2965,0x18e3,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2965,0x5aeb,0x4a69,0x39e7,0x2945,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x4228,0xb5b6,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xdedb,0xce79,0x630c,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xd679,0xd679,0xce59,0xc638,0xbdf8,0xbdf7,0xbe17,0xc638,0xce79,0xd69a,0xce79,0xce79,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xd679,0xce79,0xc638,0xbe18,0xbdf7,0xbdf7,0xc638,0xce59,0xd69a,0xd679,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0020,0x0000,0x39c7,0x630c,0x4a69,0x39e7,0x2945,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0x6b6d,0x630c,0x5aeb,0x52aa,0x4a49,0x39e7,0x3186,0x2124,0x10a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x5acb,0x5acb,0x4228,0x3186,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x8c51,0xc638,0xc638,0xb5b6,0xad55,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad55,0xb596,0xdedb,0xb5b6,0x0000,0x1082,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xb5f7,0x9534,0x8430,0x7b4d,0x7acb,0x72aa,0x6aeb,0x634d,0x7410,0x9d14,0xc618,0xd69a,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xc638,0xa575,0x8c72,0x7bae,0x7b0c,0x72aa,0x6acb,0x632c,0x6bcf,0x8cb2,0xbdd7,0xce79,0xce7a,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x4a69,0x5acb,0x4228,0x2965,0x18c3,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x738e,0x6b4d,0x630c,0x5acb,0x528a,0x4228,0x39c7,0x2945,0x18e3,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x3186,0x5aeb,0x4a69,0x39c7,0x2124,0x0861,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xd69a,0xb5b6,0x9492,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8410,0x8c51,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xc618,0x94d3,0x8aeb,0xb8e3,0xe000,0xf020,0xf124,0xf1c7,0xf249,0xe2aa,0xbacb,0x8269,0x42cb,0x94d3,0xce38,0xd67a,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xa575,0x83ae,0xa9a6,0xd800,0xf000,0xf0c3,0xf1a6,0xf228,0xea8a,0xcacb,0x9a8a,0x4a69,0x7410,0xbdd7,0xd679,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0x4228,0x31a6,0x2104,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2945,0x738e,0x6b6d,0x632c,0x5aeb,0x52aa,0x4a49,0x39e7,0x3186,0x2104,0x10a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x4a49,0x39e7,0x2965,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xd69a,0xb5b6,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0x94b2,0x7bcf,0x8410,0xc618,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xb596,0x7b4d,0xa800,0xe800,0xf800,0xf082,0xe8a2,0xd8a2,0xd0c3,0xd904,0xd9c7,0xf2cb,0xfbcf,0xdc10,0x728a,0x532c,0xbdb6,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xc618,0x8c51,0x9145,0xd000,0xf800,0xf061,0xe8a2,0xe0a2,0xd8c3,0xd104,0xd986,0xea69,0xfb8e,0xec30,0xa34d,0x3a28,0x9cf3,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x18e3,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x52aa,0x73ae,0x632c,0x630c,0x5acb,0x4a69,0x4208,0x31a6,0x2945,0x18c3,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0x10a2,0x0841,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cf3,0x632c,0x4a69,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdedb,0xd69a,0xc638,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xad55,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd69a,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xa534,0x71e7,0xb800,0xf020,0xf861,0xe820,0xd800,0xd000,0xc800,0xc000,0xb800,0xb000,0xa800,0xb820,0xeb0c,0xfcd3,0xb3ef,0x3208,0xb575,0xce79,0xce79,0xce59,0xce79,0xce59,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce59,0xce79,0xce79,0xbdd7,0x7b6d,0x9000,0xe000,0xf882,0xe841,0xd820,0xd800,0xd000,0xc000,0xb800,0xb000,0xa800,0xb000,0xda48,0xfc71,0xdcb2,0x49c7,0x8c71,0xce79,0xce79,0xce59,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x632c,0x6b6d,0x630c,0x5acb,0x528a,0x4228,0x39c7,0x2965,0x2104,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x528a,0x9cd3,0x632c,0x528a,0xbdd7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd699,0xce59,0xce79,0xce59,0xce79,0xce59,0xa534,0x5145,0xb800,0xf8a2,0xf820,0xf000,0xe800,0xe800,0xe000,0xd000,0xc800,0xc000,0xb820,0xb041,0xa800,0x9800,0xc145,0xfcf3,0xc492,0x29e7,0xb5b6,0xce79,0xce59,0xce59,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0xce79,0xce79,0xce79,0xbdd7,0x630b,0x9000,0xe882,0xf861,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc000,0xb820,0xb040,0xa820,0x9800,0xb000,0xfc0f,0xed55,0x5208,0x9492,0xce79,0xce59,0xce59,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b4d,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2104,0x632c,0x6b4d,0x5aeb,0x528a,0x4a49,0x39e7,0x3186,0x2124,0x10a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x4a69,0x8410,0x52aa,0x630c,0xbdf7,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce7a,0xce59,0xce79,0xce79,0xce79,0xad75,0x41c7,0xa800,0xf8e3,0xf841,0xf800,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc800,0xc000,0xb800,0xb000,0xa882,0x9800,0xb000,0xfd34,0xb451,0x4aca,0xc638,0xce79,0xce59,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce59,0xce79,0xc618,0x738e,0x7000,0xe8c3,0xf881,0xf820,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc800,0xc000,0xb800,0xb000,0xa861,0xa041,0xa000,0xf410,0xed75,0x31c7,0xad55,0xd69a,0xce59,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xbdd7,0x6b6d,0x10a2,0x0000,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0020,0x0000,0x0000,0x0020,0x0000,0x18c3,0x528a,0x5aeb,0x52aa,0x4a49,0x39e7,0x3186,0x2124,0x18c3,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x2104,0x31a6,0x39e7,0x8430,0xc638,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce99,0xce59,0xce59,0xce79,0xc5f8,0x632c,0x7800,0xf0e3,0xf8a2,0xf881,0xf841,0xf800,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc800,0xb800,0xb000,0xa800,0xa882,0x9800,0xb904,0xfd96,0x7b4d,0x8451,0xd679,0xce59,0xce59,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce59,0x9492,0x3800,0xd882,0xf8c3,0xf882,0xf841,0xf820,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc800,0xc000,0xb000,0xa800,0xa820,0xa082,0xa000,0xfcd3,0xc4d3,0x428a,0xc638,0xce79,0xce59,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xc618,0x8430,0x39c7,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x2965,0x4208,0x4228,0x4208,0x31a6,0x2945,0x18e3,0x1082,0x0000,0x0000,0x0000,0x0000,0x0841,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39c7,0x7bcf,0xad75,0xce59,0xce79,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xb596,0x9cd3,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9492,0x94b2,0xa514,0xc618,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xbdf7,0xa534,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9492,0x9cd3,0xb596,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd699,0xce59,0xce59,0xce59,0x94b2,0x2800,0xd082,0xf904,0xf8c3,0xf8a2,0xf881,0xf820,0xf800,0xf800,0xe800,0xe800,0xe000,0xd800,0xd000,0xc000,0xb800,0xb000,0xa800,0xa0c3,0x9000,0xdb6d,0xe555,0x3228,0xbdd7,0xce79,0xce59,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0xce79,0xb596,0x3a08,0xa000,0xf924,0xf8e3,0xf8a2,0xf882,0xf841,0xf800,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc000,0xb800,0xb000,0xa800,0xa861,0x9800,0xc104,0xfd96,0x730c,0x94b2,0xd69a,0xce59,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xce59,0xb596,0x7bef,0x5acb,0x4a49,0x4228,0x4228,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x39e7,0x2965,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x18c3,0x18c3,0x1082,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0x4a49,0x2945,0x31a6,0x4228,0x4208,0x4208,0x4208,0x4208,0x4228,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x4228,0x5acb,0x8c51,0xad55,0xb5b6,0xc638,0xce79,0xce59,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xc618,0x8430,0x4208,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x3186,0x4a49,0x528a,0x630c,0xad55,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xad55,0x630c,0x3186,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x39e7,0x528a,0x528a,0x8430,0xc638,0xce79,0xce59,0xce79,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd67a,0xce59,0xce79,0xbdd7,0x52cb,0x8000,0xf944,0xf944,0xf904,0xf8c3,0xf8a2,0xf861,0xf820,0xf800,0xf000,0xe800,0xe800,0xe000,0xd000,0xc800,0xc000,0xb000,0xa800,0xa800,0x9841,0xa000,0xf534,0x93ae,0x8471,0xd69a,0xce59,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce38,0x8c51,0x3800,0xe104,0xf945,0xf904,0xf8e3,0xf8a2,0xf861,0xf820,0xf800,0xf000,0xe800,0xe800,0xe000,0xd800,0xc800,0xc000,0xb800,0xb000,0xa800,0xa0a2,0x9000,0xec10,0xccf3,0x4acb,0xce39,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x7bcf,0xce79,0xce79,0xce79,0xce59,0xbdf7,0xad75,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xa534,0xad55,0x8c71,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x7bef,0x5aeb,0x528a,0x9cf3,0xad55,0xa534,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xbdd7,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xd69a,0x738e,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce59,0xce79,0xbdf7,0x6b6d,0x0000,0x0000,0x18c3,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2124,0x39c7,0x6b6d,0x7bcf,0x4a49,0xad75,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0x9cf3,0x2965,0x0000,0x0841,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2124,0x2965,0x528a,0x7bef,0x5aeb,0x7bcf,0xc638,0xce79,0xce59,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce7a,0xce59,0xce59,0xa514,0x10c3,0xc061,0xf986,0xf965,0xf924,0xf903,0xf8c3,0xf882,0xf841,0xf800,0xf800,0xf000,0xf000,0xe800,0xd800,0xd000,0xc800,0xb800,0xb000,0xa800,0xa082,0x9000,0xe3cf,0xccd2,0x530c,0xce59,0xce79,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xbdd7,0x52cb,0x8000,0xf986,0xf965,0xf924,0xf904,0xf8c3,0xf882,0xf861,0xf800,0xf800,0xf000,0xe800,0xe800,0xe000,0xd000,0xc800,0xc000,0xb000,0xa800,0xa841,0x9000,0xc1e7,0xf555,0x4a69,0xb596,0xd69a,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x73ae,0xce79,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xad75,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x9492,0x7bef,0x3186,0xad75,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xd6ba,0x6b6d,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xc618,0x7bcf,0x0000,0x1082,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0x8430,0x630c,0xc638,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xad55,0x3186,0x0000,0x10a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0x9492,0x5acb,0x9cd3,0xd69a,0xce59,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce7a,0xce59,0xc638,0x8c30,0x3000,0xe144,0xf9c7,0xf986,0xf965,0xf924,0xf8e3,0xf8a2,0xf861,0xf820,0xf800,0xf800,0xf000,0xf000,0xe800,0xd800,0xd000,0xc000,0xb800,0xb000,0xa841,0x9800,0xc228,0xecf3,0x528a,0xbdd7,0xce99,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xad55,0x2145,0xb082,0xf9c7,0xf986,0xf965,0xf924,0xf903,0xf8a3,0xf882,0xf820,0xf800,0xf800,0xf000,0xf000,0xe800,0xe000,0xd000,0xc800,0xb800,0xb000,0xa800,0x9820,0xa800,0xf4d3,0x936d,0x94b2,0xd69a,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x4a49,0xc618,0xd6ba,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa514,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0xce79,0xd69a,0xce79,0x39e7,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce59,0xce79,0xce79,0xa534,0x2104,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x8c71,0x5aeb,0xa534,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xc618,0x738e,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x630c,0x8430,0x6b4d,0xce59,0xce79,0xce59,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd679,0xce59,0xc618,0x738e,0x5000,0xf1a6,0xf9e7,0xf9a6,0xf986,0xf945,0xf904,0xf8c3,0xf882,0xf841,0xf800,0xf800,0xf800,0xf000,0xf000,0xe000,0xd800,0xc800,0xc000,0xb800,0xa820,0xa000,0xb0c3,0xf4b2,0x62aa,0xad75,0xd69a,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0x9cd3,0x1000,0xc925,0xfa08,0xf9c6,0xf986,0xf945,0xf924,0xf8e3,0xf8a2,0xf861,0xf800,0xf800,0xf800,0xf800,0xf000,0xe000,0xd800,0xc800,0xc000,0xb800,0xb000,0xa061,0x9800,0xf410,0xbbcf,0x7410,0xd69a,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x6b6d,0xb5b6,0xc618,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xc638,0xce79,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xce79,0xce59,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0x73ae,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce59,0xce79,0xce59,0x8430,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x6b4d,0x6b6d,0x8c71,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xb596,0x4a49,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2945,0x8410,0x5aeb,0xbdf7,0xce79,0xce59,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce99,0xce79,0xbdd7,0x5b0c,0x6800,0xf1e7,0xfa28,0xf9c7,0xf9a6,0xf965,0xf924,0xf8e3,0xf8a2,0xf841,0xf800,0xf800,0xf800,0xf800,0xf000,0xe800,0xd800,0xd000,0xc000,0xb800,0xb000,0xa020,0xa800,0xec71,0x72aa,0xa534,0xd69a,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xc638,0x8c71,0x2000,0xd986,0xfa28,0xf9e7,0xf9a6,0xf965,0xf924,0xf8e3,0xf8a2,0xf861,0xf820,0xf800,0xf800,0xf800,0xf000,0xe800,0xe000,0xd000,0xc800,0xb800,0xb000,0xa861,0x9800,0xf38e,0xc3ef,0x6bcf,0xd679,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x1082,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39e7,0x18e3,0xa514,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd69a,0xa534,0x0841,0x39e7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39e7,0x0861,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce59,0xce79,0xc638,0x7bef,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x52aa,0x5aeb,0x8c71,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xad75,0x39c7,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0x6b6d,0x5aeb,0xbdf7,0xce79,0xce59,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce79,0xbdd7,0x5aeb,0x6800,0xf228,0xfa49,0xfa07,0xf9c7,0xf986,0xf945,0xf904,0xf8a2,0xf861,0xf820,0xf800,0xf800,0xf800,0xf000,0xe800,0xe000,0xd000,0xc800,0xc000,0xb800,0xa800,0xb000,0xec10,0x7a8a,0xa534,0xd69a,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xc638,0x8c51,0x2000,0xd9a6,0xfa69,0xfa08,0xf9e7,0xf986,0xf945,0xf904,0xf8c3,0xf861,0xf820,0xf800,0xf800,0xf800,0xf000,0xe800,0xe000,0xd800,0xc800,0xc000,0xb800,0xb041,0xa000,0xf36d,0xc3ae,0x6bcf,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9cf3,0xd69a,0xce59,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce59,0xce79,0xc638,0x8c51,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a69,0x4a69,0xa514,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xb596,0x528a,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2965,0x52aa,0x6b6d,0xc638,0xce79,0xce59,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd679,0xce79,0xbdf7,0x632c,0x5800,0xf208,0xfa69,0xfa28,0xf9e7,0xf9a6,0xf965,0xf924,0xf8c3,0xf861,0xf820,0xf800,0xf800,0xf800,0xf000,0xe800,0xe000,0xd800,0xc800,0xc000,0xb800,0xb000,0xb800,0xebcf,0x7269,0xad75,0xd69a,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xc639,0x9471,0x1000,0xc9a6,0xfa8a,0xfa28,0xfa08,0xf9c7,0xf986,0xf924,0xf8e3,0xf882,0xf841,0xf820,0xf800,0xf800,0xf800,0xe800,0xe000,0xd800,0xd000,0xc800,0xb800,0xb041,0xa800,0xf34d,0xc32c,0x7410,0xd679,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0861,0x10a2,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x1082,0x18e3,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18e3,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0861,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce59,0xa534,0x39c7,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x18c3,0x3186,0x632c,0xbdf7,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xc618,0x7bcf,0x0000,0x1082,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0861,0x2945,0x39e7,0x9cd3,0xce79,0xce59,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce99,0xce59,0xc618,0x73ae,0x3800,0xe1e7,0xfa8a,0xfa49,0xfa28,0xf9e7,0xf986,0xf945,0xf904,0xf8a2,0xf841,0xf820,0xf820,0xf800,0xf800,0xe800,0xe000,0xd800,0xd000,0xc800,0xc020,0xb000,0xc925,0xf36d,0x628a,0xbdd7,0xd67a,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0x9cd3,0x0000,0xb945,0xfa8a,0xfa69,0xfa28,0xf9e7,0xf9a6,0xf965,0xf904,0xf8c2,0xf861,0xf841,0xf820,0xf800,0xf800,0xf000,0xe000,0xd800,0xd000,0xc800,0xc000,0xb820,0xb000,0xf34c,0xaaaa,0x8cb2,0xd69a,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x2965,0x2965,0x18c3,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xc618,0x8430,0x0000,0x0000,0x0861,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x0000,0x0000,0x52aa,0xad55,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xad55,0x52aa,0x0000,0x0000,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x0020,0x0000,0x18c3,0x8410,0xc618,0xce79,0xce59,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xc638,0x8c71,0x0000,0xc165,0xfaaa,0xfa69,0xfa49,0xfa08,0xf9c7,0xf986,0xf924,0xf8e3,0xf882,0xf861,0xf841,0xf820,0xf800,0xf000,0xe800,0xe000,0xd000,0xc800,0xc020,0xb800,0xe1e7,0xdacb,0x634d,0xc638,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0xad55,0x31e7,0x9000,0xfa8a,0xfa8a,0xfa49,0xfa28,0xf9e7,0xf986,0xf945,0xf8e3,0xf8a2,0xf861,0xf841,0xf820,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc800,0xb800,0xc8a2,0xfb0c,0x7249,0xad75,0xd69a,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x10a2,0x4228,0x39e7,0x2945,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce59,0xbdf7,0x8c51,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0x73ae,0xad75,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xc638,0xad55,0x632c,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x528a,0x94b2,0xc618,0xce79,0xce59,0xce79,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce9a,0xce59,0xce59,0xa534,0x29a6,0x8800,0xfa69,0xfa8a,0xfa69,0xfa28,0xf9e7,0xf9a6,0xf965,0xf904,0xf8c3,0xf882,0xf861,0xf841,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xc820,0xc000,0xf269,0xaa08,0x8492,0xd679,0xce59,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xbdd7,0x6b4d,0x4000,0xea28,0xfaaa,0xfa69,0xfa49,0xfa08,0xf9c7,0xf985,0xf924,0xf8e3,0xf8a2,0xf861,0xf841,0xf800,0xf800,0xe800,0xe000,0xd800,0xd000,0xc820,0xc000,0xe9a6,0xe269,0x634c,0xc638,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x18c3,0x52aa,0x4a49,0x39c7,0x2124,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xc638,0xad75,0x94b2,0x8430,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8430,0x94b2,0xb596,0xc638,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xbdf7,0xa514,0x8c51,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8410,0x8c51,0xa514,0xbdf7,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xad75,0x73ae,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce7a,0xce59,0xce79,0xbdd7,0x736d,0x2000,0xd9c7,0xfaaa,0xfa69,0xfa49,0xfa28,0xf9e7,0xf9a6,0xf945,0xf904,0xf8c3,0xf882,0xf841,0xf800,0xf800,0xe800,0xe000,0xd800,0xd800,0xc800,0xd8e3,0xf208,0x6a8a,0xb5d7,0xd679,0xce59,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xc638,0x94b2,0x0041,0xa924,0xfa8a,0xfa6a,0xfa49,0xfa28,0xf9e7,0xf9a6,0xf965,0xf904,0xf8c3,0xf8a2,0xf861,0xf820,0xf800,0xf000,0xe000,0xe000,0xd800,0xc800,0xd000,0xfa08,0xa1a6,0x8cd3,0xd679,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0861,0x52aa,0x52aa,0x4208,0x3186,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd679,0xce59,0xce79,0xce58,0x9cf3,0x2945,0x8000,0xfa49,0xfa8a,0xfa49,0xfa28,0xfa08,0xf9c7,0xf965,0xf924,0xf8e3,0xf8a2,0xf861,0xf820,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xf965,0xb924,0x7c92,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0xce59,0xb5b6,0x62eb,0x3800,0xe208,0xfaaa,0xfa49,0xfa49,0xfa08,0xf9c7,0xf986,0xf945,0xf903,0xf8c3,0xf882,0xf841,0xf800,0xf000,0xe800,0xe000,0xd800,0xd000,0xf124,0xe104,0x632c,0xbe18,0xce79,0xce59,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0020,0x0000,0x4208,0x630c,0x4a69,0x39c7,0x2104,0x0841,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd67a,0xce59,0xce59,0xce79,0xbdf7,0x83ef,0x0000,0xa8e4,0xfa69,0xfa89,0xfa48,0xfa08,0xf9e7,0xf9a6,0xf945,0xf904,0xf8c3,0xf882,0xf841,0xf800,0xf000,0xe800,0xe000,0xd820,0xf8c3,0xe000,0x6b6d,0xbe18,0xce79,0xce59,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce39,0x9cf3,0x3165,0x7000,0xf228,0xfa8a,0xfa49,0xfa28,0xf9e7,0xf9a6,0xf965,0xf924,0xf8e3,0xf882,0xf841,0xf800,0xf800,0xf000,0xe000,0xd800,0xf0c2,0xf800,0x89e7,0xa555,0xd679,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x4a69,0x52aa,0x4208,0x2965,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xad75,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce9a,0xce59,0xce79,0xce79,0xce59,0xb5b6,0x6b2c,0x0000,0xb104,0xfa49,0xfa69,0xfa28,0xf9e7,0xf9a6,0xf965,0xf924,0xf8e3,0xf8a2,0xf861,0xf800,0xf800,0xf000,0xe841,0xf882,0xe800,0x82cb,0xadb6,0xd679,0xce59,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xc618,0x8c51,0x1000,0x7800,0xea08,0xfa69,0xfa28,0xfa07,0xf9c7,0xf986,0xf945,0xf903,0xf8a2,0xf861,0xf820,0xf800,0xf000,0xe820,0xf082,0xf800,0xa945,0x8cd3,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x39c7,0x39e7,0x2965,0x18c3,0x0020,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xb596,0x7bcf,0x8410,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce59,0xad75,0x6b2c,0x0000,0x9000,0xe9c7,0xfa28,0xfa08,0xf9c7,0xf986,0xf945,0xf904,0xf8c3,0xf881,0xf840,0xf841,0xf882,0xe800,0xd000,0x830c,0xad96,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce59,0xbdf7,0x8c30,0x18a2,0x6000,0xd1a6,0xfa28,0xfa08,0xf9e7,0xf9a6,0xf965,0xf924,0xf8c3,0xf882,0xf841,0xf820,0xf882,0xf020,0xe000,0x99e7,0x8cd3,0xce59,0xce79,0xce59,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x94b2,0x8410,0x2104,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd6ba,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xbdf7,0x8430,0x8410,0xc638,0xc638,0x18c3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce79,0xce79,0xce59,0xce59,0xce59,0xb596,0x83cf,0x1904,0x4800,0xa8a2,0xe186,0xf9c7,0xf9a6,0xf986,0xf945,0xf904,0xf8e3,0xf082,0xe000,0xc000,0x9986,0x8410,0xb5d7,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce59,0xce59,0xce79,0xce59,0xbdf7,0x94b2,0x4a49,0x0000,0x9000,0xd165,0xf1a7,0xf9a7,0xf986,0xf945,0xf924,0xf8e3,0xf8a2,0xe800,0xc800,0xa800,0x834d,0xa555,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x3186,0x9492,0x7bef,0x2945,0xa534,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xce59,0xdedb,0xdefb,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd6ba,0xd69a,0xad75,0x9492,0xc638,0xc638,0x18e3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xbdf7,0xa4f3,0x6b4d,0x10e3,0x3800,0x7000,0x9800,0xa800,0xb000,0xa800,0x9800,0x8000,0x79a6,0x83cf,0xa575,0xc638,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xce59,0xc638,0xad75,0x83ef,0x31e7,0x1000,0x6000,0x9000,0xa800,0xb000,0xb000,0xa000,0x8800,0x7882,0x832c,0x9cf3,0xbe17,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xad55,0x4a69,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0x73ae,0x630c,0x4228,0xad75,0xce79,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xc638,0xd6ba,0xd6ba,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xce59,0xbdd7,0xce79,0xc618,0x18c3,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xbdf7,0xad34,0x8c51,0x6b6d,0x52cb,0x4a8a,0x4a8a,0x5b0c,0x7bcf,0x9cd3,0xb5b7,0xc659,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce79,0xce59,0xc618,0xb596,0x94b2,0x73ae,0x5b0c,0x4a8a,0x4a89,0x52cb,0x6b6d,0x8c71,0xad75,0xc618,0xce79,0xce79,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce59,0xad75,0x52aa,0x0861,0x0000,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0861,0x0020,0x0861,0x31a6,0x73ae,0xbdd7,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x738e,0xb5b6,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xdedb,0xa534,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xc638,0xc5f7,0xbdf7,0xbdf7,0xc638,0xce59,0xce79,0xce79,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xc638,0xc618,0xbdf7,0xbdf7,0xc618,0xce59,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce59,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce79,0xbdf7,0x7bcf,0x31a6,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a49,0x7bef,0xad55,0xc638,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x7bef,0xa534,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xb596,0xbdd7,0xad55,0x39c7,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2965,0xbdf7,0xce79,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce59,0xce59,0xd69a,0x5acb,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce79,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xd6ba,0xa514,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cf3,0xd69a,0xce59,0xce59,0xb596,0x8410,0x6b4d,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x6b4d,0x9492,0xb5b6,0xbdf7,0xc638,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x3186,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0xad75,0xd6ba,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xce79,0x39e7,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x8410,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x8c51,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x9cf3,0xd69a,0xce59,0xce79,0xce59,0xc618,0xbdd7,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xb5b6,0xbdf7,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x5acb,0xbdf7,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0x8c71,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2104,0xa534,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0xb5b6,0x10a2,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x9cd3,0xd69a,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xd6ba,0x9cf3,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x39c7,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b6d,0x6b6d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b6d,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x1082,0x630c,0x6b6d,0x6b4d,0x6b6d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b6d,0x6b4d,0x18e3,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x632c,0xce59,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0x632c,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x1041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x6b6d,0xad55,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0x7bcf,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0x10a2,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x0882,0x0082,0x0082,0x0082,0x0082,0x0082,0x00a2,0x0082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x1082,0x0082,0x0082,0x0082,0x0082,0x0082,0x0082,0x00a2,0x0041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b6d,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x9020,0xb841,0xb841,0xb841,0xb841,0xb841,0xb861,0x90a2,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x3800,0xa000,0xb841,0xb841,0xb841,0xb841,0xb861,0x98a2,0x2841,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0841,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0000,0x0841,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x6b6d,0xa514,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0x9cf3,0xa514,0x632c,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0xb800,0xc820,0x8800,0x8800,0x8800,0x8800,0x9800,0xd061,0x90c3,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0xa800,0xd000,0x9000,0x8800,0x8800,0x8800,0x9000,0xd040,0xa8c3,0x0020,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x8c71,0x9cf3,0x94b2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x94b2,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0xb000,0xb0a2,0x0041,0x0020,0x0020,0x0020,0x2000,0xc000,0xa882,0x0020,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc000,0xa8a2,0x0041,0x0020,0x0020,0x0020,0x0020,0xb000,0xc082,0x0041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb000,0xd020,0xc041,0xc820,0xc841,0xc041,0xc800,0xd021,0x6862,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb800,0xc820,0xc041,0xc040,0xc040,0xc041,0xc020,0xd000,0xb882,0x1041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18c3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0xb000,0xb841,0x6800,0x7000,0x7000,0x6800,0x7000,0xc820,0x98c3,0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb800,0xb841,0x7000,0x7800,0x7800,0x7800,0x7000,0xb800,0xb882,0x0041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18c3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb800,0xb8a2,0x3061,0x4820,0x4841,0x4041,0x6000,0xd000,0xa881,0x0000,0x1800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc000,0xb0a2,0x0020,0x0000,0x0000,0x0000,0x0000,0xb000,0xc0a2,0x0041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce59,0xce59,0xd69a,0x7bef,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x18e3,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0xa000,0xc800,0xc820,0xc820,0xc820,0xc820,0xc800,0xb000,0x4000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb000,0xa082,0x0000,0x1800,0x1800,0x1800,0x0000,0xa800,0xb061,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0xa534,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd6ba,0x8c51,0x0000,0x2124,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x1082,0x0020,0x2104,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c51,0x0861,0x0861,0x1082,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x1061,0x0062,0x3082,0x5061,0x5061,0x5061,0x5061,0x5061,0x4861,0x0061,0x0061,0x1061,0x0862,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x1061,0x0061,0x3861,0x3061,0x0062,0x1061,0x0861,0x1061,0x0061,0x3061,0x3861,0x0061,0x1062,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x10a2,0x1082,0x0000,0xad75,0xd69a,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce59,0xd69a,0xbdf7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0x9cd3,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x9cd3,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xce59,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce79,0xce59,0xd6ba,0xbdf7,0x73ae,0x5aeb,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x5aeb,0x632c,0xa514,0xad75,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad55,0xad75,0x9cf3,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x62ec,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630b,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x5b0c,0x630c,0x62ec,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x5b0c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x630c,0x5aeb,0x632c,0x9cd3,0xce59,0xce79,0xce59,0xce59,0xd69a,0xc618, +0xce79,0xce79,0xce79,0xce79,0xce59,0xd69a,0xd6ba,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xce79,0xce59,0xce79,0xce59,0xd69a,0xc618, +0xce79,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce59,0xce79,0xc618, +0xce59,0xce79,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xce59,0xd6ba,0xbdd7, +0x8c71,0xce59,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xd69a,0xce79,0x738e, +0x0000,0x632c,0x8c51,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c71,0x8c51,0x8c71,0x8c51,0x5acb,0x0000}; diff --git a/MCUME_pico/pico64/output_dac.h b/MCUME_pico/pico64/output_dac.h new file mode 100644 index 0000000..d868f94 --- /dev/null +++ b/MCUME_pico/pico64/output_dac.h @@ -0,0 +1,52 @@ +/* Audio Library for Teensy 3.X + * Copyright (c) 2014, Paul Stoffregen, paul@pjrc.com + * + * Development of this audio library was funded by PJRC.COM, LLC by sales of + * Teensy and Audio Adaptor boards. Please support PJRC's efforts to develop + * open source software by purchasing Teensy or other PJRC products. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice, development funding notice, and this permission + * notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef output_dac_h_ +#define output_dac_h_ + +#include "reSID.h" +extern AudioPlaySID playSID; + + +class AudioOutputAnalog +{ +public: + //AudioOutputAnalog(void) : AudioStream(1, inputQueueArray) { begin(); } + virtual void update(void); + void begin(void); + void analogReference(int ref); + //static DMAChannel dma; +//private: + //static audio_block_t *block_left_1st; + //static audio_block_t *block_left_2nd; + static bool update_responsibility; + //audio_block_t *inputQueueArray[1]; + static void isr(void); + static uint8_t volume; + +}; + +#endif diff --git a/MCUME_pico/pico64/patches.cpp b/MCUME_pico/pico64/patches.cpp new file mode 100644 index 0000000..877020f --- /dev/null +++ b/MCUME_pico/pico64/patches.cpp @@ -0,0 +1,300 @@ +/* + Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +#include "patches.h" +#include "emuapi.h" +#include "platform_config.h" + + +#define DIRECTORY ROMSDIR + "/\0" + +static char filename[64]; +static char buffer[2]; + +extern char * menuSelection(void); + +void patchLOAD(void) { + +int device; +int secondaryAddress; +uint16_t addr,size; + + device = cpu.RAM[0xBA]; + if (device != 1) { + //Jump to unpatched original address: + cpu.pc = rom_kernal[cpu.pc - 0xe000 + 1] * 256 + rom_kernal[cpu.pc - 0xe000]; + return; + }; + + +#if XXX + if (cpu.RAM[cpu.RAM[0xBC] * 256 + cpu.RAM[0xBB]] == '$' && cpu.RAM[0xB7] == 1) { + //Directoy listing with LOAD "$" + printf("Listing of "); + printf(DIRECTORY); + printf("\n"); + file = SD.open(DIRECTORY); + int blocks, start, len; + addr = cpu.RAM[0x2C] * 256 + cpu.RAM[0x2B]; + + /*first line of BASIC listing */ + start = addr; + cpu.RAM[addr++] = (start + 30) & 0xff; + cpu.RAM[addr++] = (start + 30) >> 8; + blocks = 0; + cpu.RAM[addr++] = blocks & 0xff; + cpu.RAM[addr++] = blocks >> 8; + + const char title[] = "\x12\"TEENSY64 \" FB " VERSION; + strcpy((char * )&cpu.RAM[addr], title); + addr = start + 30; + + while (true) { + entry = file.openNextFile(); + if (! entry) { + // no more files + break; + } + int offset; + if (!entry.isDirectory()) { + + /* Listing to BASIC-RAM */ + start = addr; + offset = 0; + + //pointer to next line: + cpu.RAM[addr++] = (start + 32) & 0xff; + cpu.RAM[addr++] = (start + 32) >> 8; + + //# of blocks + blocks = ceil((float)entry.size()/256.0f); + cpu.RAM[addr++] = blocks & 0xff; + cpu.RAM[addr++] = blocks >> 8; + + if (blocks < 100) { cpu.RAM[addr++] = ' '; offset++;} + if (blocks < 10) { cpu.RAM[addr++] = ' '; offset++; } + cpu.RAM[addr++] = ' '; + + //filename: + cpu.RAM[addr++] = '"'; + char *s = (char * )&cpu.RAM[addr]; + entry.getName(s, 17); + while(*s) {*s = toupper(*s); s++;} + //strcpy((char * )&cpu.RAM[addr], entry.name()); + len = strlen((char * )&cpu.RAM[addr]); + + if (len > 16) len = 16; + addr += len; + cpu.RAM[addr++] = '"'; + + //fill with space + while ((addr-start) < (32)) { cpu.RAM[addr++] = ' ';} + + //display "PRG" + addr = start + 23 + offset; + cpu.RAM[addr++] = ' '; + cpu.RAM[addr++] = 'P'; + cpu.RAM[addr++] = 'R'; + cpu.RAM[addr++] = 'G'; + + //line-ending + cpu.RAM[start+31] = 0; + addr = start + 32; + + /* Listing to serial console */ + itoa (blocks,filename,10); + len = strlen(filename); + while (len < 4) { strcat(filename," "); len++; }; + strcat(filename, "\""); + char nbuf[18] = {0}; + entry.getName(nbuf, 17); + strcat(filename, nbuf); + //strcat(filename, entry.getName()); + strcat(filename, "\""); + len = strlen(filename); + while (len < 18+4) { strcat(filename," "); len++; }; + strcat(filename," PRG "); + //printf(filename); + + } + entry.close(); + } + file.close(); + + /*add last line to BASIC listing*/ + start = addr; + cpu.RAM[addr++] = (start + 32) & 0xff; + cpu.RAM[addr++] = (start + 32) >> 8; + //# of blocks. todo : determine free space on sd card + blocks = 65535; + cpu.RAM[addr++] = blocks & 0xff; + cpu.RAM[addr++] = blocks >> 8; + if (blocks < 100) { cpu.RAM[addr++] = ' ';} + if (blocks < 10) { cpu.RAM[addr++] = ' ';} + const char blockfree[] = "BLOCKS FREE."; + + strcpy((char * )&cpu.RAM[addr], blockfree); + len = strlen(blockfree); + addr += len; + while ((addr-start) < (32)) { cpu.RAM[addr++] = ' ';} + cpu.RAM[start+31] = 0; + cpu.RAM[start+32] = 0; + cpu.RAM[start+33] = 0; + + cpu.y = 0x49; //Offset for "LOADING" + cpu.pc = 0xF12B; //Print and return + return; + } // end directory listing +#endif + + //$B7 : Length of file name or disk command + //$BB-$BC: Pointer to current file name or disk command + memset(filename,0,sizeof(filename)); + if ( cpu.RAM[0xB7] == 0) { + strcpy(filename,menuSelection()); + } + else { + strncpy(filename, (char*)&cpu.RAM[cpu.RAM[0xBC] * 256 + cpu.RAM[0xBB]], cpu.RAM[0xB7] ); + } + secondaryAddress = cpu.RAM[0xB9]; + + //Serial.println("loading"); + //printf("%s,%d,%d:", filename, device, secondaryAddress); +#ifdef EXTERNAL_SD + tft.stopDMA(); + //emu_resetSD(); + tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) ); +#endif + if (emu_FileOpen(filename) == 0) { + //Serial.println("not found"); + cpu.pc = 0xf530; //Jump to $F530 +#ifdef EXTERNAL_SD + tft.startDMA(); +#endif + return; + } + + size = emu_FileSize(filename); + emu_FileOpen(filename); + emu_FileRead(buffer, 2); + addr = buffer[1] * 256 + buffer[0]; + emu_FileRead((char*)&cpu.RAM[addr], size - 2); + emu_FileClose(); + + cpu.RAM[0xAF] = (addr + size - 2) & 0xff; + cpu.RAM[0xAE] = (addr + size - 2) / 256; + + cpu.y = 0x49; //Offset for "LOADING" + cpu.pc = 0xF12B; //Print and return + emu_printf("loaded"); +#ifdef EXTERNAL_SD + tft.startDMA(); +#endif + return; +} + +void patchSAVE(void) { +#ifdef XXX +int device; +int secondaryAddress; +uint16_t addr,size; + + //Serial.println("Patched SAVE"); + device = cpu.RAM[0xBA]; + if (device != 1) { + //Jump to unpatched original address: + cpu.pc = rom_kernal[cpu.pc - 0xe000 + 1] * 256 + rom_kernal[cpu.pc - 0xe000]; + return; + }; + + if (!SDinitialized) { + cpu.pc = 0xF707; //Device not present error + //Serial.println("SD Card not initialized"); + return; + } + + if( !SD.exists(DIRECTORY) && SD.mkdir(DIRECTORY) ) { + cpu.pc = 0xF707; //Device not present error + //Serial.println("SD: Could not create " DIRECTORY); + } + + //$B7 : Length of file name or disk command + //$BB-$BC: Pointer to current file name or disk command + memset(filename,0,sizeof(filename)); + strcpy(filename, DIRECTORY); + strncat(filename, (char*)&cpu.RAM[cpu.RAM[0xBC] * 256 + cpu.RAM[0xBB]], cpu.RAM[0xB7] ); + + secondaryAddress = cpu.RAM[0xB9]; + + //Serial.print(filename); + //Serial.print(","); + //Serial.print(device); + //Serial.print(","); + //Serial.print(secondaryAddress); + //Serial.print(":"); + + addr = cpu.RAM[cpu.a + 1] * 256 + cpu.RAM[cpu.a]; + size = (cpu.y * 256 + cpu.x) - addr; + + buffer[0] = addr & 0xff; + buffer[1] = addr >> 8; + + if (SD.exists(filename)) SD.remove(filename); + file = SD.open(filename, FILE_WRITE); + if (!file) { + //Serial.println ("not possible."); + cpu.pc = 0xf530; //Jump to $F530 + return; + } + file.write(buffer, 2); + file.write(&cpu.RAM[addr], size); + file.close(); + + if (cpu.RAM[0x9D] & 128) { + uint16_t pushval = 0xF68D; + cpu.RAM[BASE_STACK + cpu.sp] = (pushval >> 8) & 0xFF; + cpu.RAM[BASE_STACK + ((cpu.sp - 1) & 0xFF)] = pushval & 0xFF; + cpu.sp -= 2; + + cpu.y = 0x51; + cpu.pc = 0xF12F; + } else { + cpu.pc = 0xF68D; + } + + //Serial.println("saved."); + return; +#endif +} diff --git a/MCUME_pico/pico64/patches.h b/MCUME_pico/pico64/patches.h new file mode 100755 index 0000000..34a1646 --- /dev/null +++ b/MCUME_pico/pico64/patches.h @@ -0,0 +1,44 @@ +/* + Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ +#ifndef Teensy64_patches_h_ +#define Teensy64_patches_h_ + +#include "cpu.h" +#include "roms.h" + +void patchLOAD(void); +void patchSAVE(void); + +#endif \ No newline at end of file diff --git a/MCUME_pico/pico64/pico64.cpp b/MCUME_pico/pico64/pico64.cpp new file mode 100644 index 0000000..2a77d9b --- /dev/null +++ b/MCUME_pico/pico64/pico64.cpp @@ -0,0 +1,137 @@ +#include "pico.h" +#include "pico/stdlib.h" + +extern "C" { + #include "iopins.h" + #include "emuapi.h" +} +#include "keyboard_osd.h" +#include "vga_t_dma.h" +#include "c64.h" + +#include + + +TFT_T_DMA tft; +static int skip=0; + +bool repeating_timer_callback(struct repeating_timer *t) { + uint16_t bClick = emu_DebounceLocalKeys(); + emu_Input(bClick); + return true; +} + +int main(void) { + stdio_init_all(); + + tft.begin(VGA_MODE_320x240); + emu_init(); + while (true) { + if (menuActive()) { + uint16_t bClick = emu_DebounceLocalKeys(); + int action = handleMenu(bClick); + char * filename = menuSelection(); + if (action == ACTION_RUNTFT) { + toggleMenu(false); + emu_start(); + emu_Init(filename); + tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) ); + tft.startDMA(); + struct repeating_timer timer; + add_repeating_timer_ms(50, repeating_timer_callback, NULL, &timer); + } + tft.waitSync(); + } + else { + //uint16_t bClick = emu_DebounceLocalKeys(); + //emu_Input(bClick); + emu_Step(); + } + //int c = getchar_timeout_us(0); + //switch (c) { + // case ' ': + // printf("test: %d\n", 1); + // break; + //} + } +} + +static unsigned char palette8[PALETTE_SIZE]; + +void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index) +{ + if (index. + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +#include +#include "roms.h" +#include "cpu.h" + +#include "pla.h" +#include "vic.h" +#include "cia1.h" +#include "cia2.h" + + +extern CONSTROM rarray_t PLA_READ[8]; +extern CONSTROM warray_t PLA_WRITE[8]; + +uint8_t r_ram(uint32_t address) { return cpu.RAM[address]; } +uint8_t r_bas(uint32_t address) { return rom_basic[address & (sizeof(rom_basic)-1)]; } //BASIC ROM +uint8_t r_ker(uint32_t address) { return rom_kernal[address & (sizeof(rom_kernal)-1)]; } //KERNAL ROM +uint8_t r_chr(uint32_t address) { return rom_characters[address & (sizeof(rom_characters)-1)]; } //CHARACTER ROM +uint8_t r_vic(uint32_t address) { return vic_read(address); } +#ifdef HAS_SND +uint8_t r_sid(uint32_t address) { return playSID.getreg(address & 0x1F);} +#else +uint8_t r_sid(uint32_t address) { return 0;} +#endif +uint8_t r_col(uint32_t address) { return cpu.vic.COLORRAM[address & 0x3FF]; } +uint8_t r_cia1(uint32_t address) { return cia1_read(address); } +uint8_t r_cia2(uint32_t address) { return cia2_read(address); } +uint8_t r_crtL(uint32_t address) { return cpu.cartrigeLO[address & 0x1fff]; } //Cartrige Low ($8000) +uint8_t r_crtH(uint32_t address) { return cpu.cartrigeHI[address & 0x1fff]; } +uint8_t r_nul(uint32_t address) { return 0;} //No RAM for Ultimax-cartrige +uint8_t r_rnd(uint32_t address) { return 255;} //Random for $DE00-$DFFF + +void w_ram( uint32_t address, uint8_t value ) { + cpu.RAM[address ]=value; +} +void w_ramz( uint32_t address, uint8_t value ) { + cpu.RAM[address]=value; //zeropage + if (address==1) { //6510 Port + value &= 0x07; + cpu.plamap_r = (rarray_t*)&PLA_READ[value]; + cpu.plamap_w = (warray_t*)&PLA_WRITE[value]; + } + } +void w_vic( uint32_t address, uint8_t value ) { vic_write(address, value); } +void w_col( uint32_t address, uint8_t value ) { cpu.vic.COLORRAM[address & 0x3FF] = value & 0x0F;} +#ifdef HAS_SND +void w_sid( uint32_t address, uint8_t value ) { playSID.setreg(address & 0x1F, value); } +#else +void w_sid( uint32_t address, uint8_t value ) { } +#endif +void w_cia1( uint32_t address, uint8_t value ) { cia1_write(address, value); } +void w_cia2( uint32_t address, uint8_t value ) { cia2_write(address, value); } + +/* + LORAM (bit 0) can generally be thought of as a control line which banks + the 8K byte BASIC ROM in and out of the microprocessor address space. + Normally, this line is HIGH for BASIC operation. If this line is + programmed LOW, the BASIC ROM will disappear from the memory map and be + replaced by 8K bytes of RAM from $A000-$BFFF. + + HIRAM (bit 1) can generally be thought of as a control line which banks + the 8K byte KERNAL ROM in and out of the microprocessor address space. + Normally, this line is HIGH for BASIC operation. If this line is + programmed LOW, the KERNAL ROM will disappear from the memory map and be + replaced by 8K bytes of RAM from $E000-$FFFF. + + CHAREN (bit 2) is used only to bank the 4K byte character generator ROM + in or out of the microprocessor address space. From the processor point + of view, the character ROM occupies the same address space as the I/O + devices ($D000-$DFFF). When the CHAREN line is set to 1 (as is normal), + the I/O devices appear in the microprocessor address space, and the + character ROM is not accessable. When the CHAREN bit is cleared to 0, the + character ROM appears in the processor address space, and the I/O devices + are not accessible. (The microprocessor only needs to access the + character ROM when downloading the character set from ROM to RAM. Special + care is needed for this... see the section on PROGRAMMABLE CHARACTERS in + the GRAPHICS chapter). CHAREN can be overridden by other control lines in + certain memory configurations. CHAREN will have no effect on any memory + configuration without I/O devices. RAM will appear from $D000-$DFFF + instead. + */ + + /* + Bit+-------------+-----------+------------+ + 210| $8000-$BFFF |$D000-$DFFF|$E000-$FFFF | + +---+---+-------------+-----------+------------+ + | 7 |111| Cart.+Basic | I/O | Kernal ROM | + +---+---+-------------+-----------+------------+ + | 6 |110| RAM | I/O | Kernal ROM | + +---+---+-------------+-----------+------------+ + | 5 |101| RAM | I/O | RAM | + +---+---+-------------+-----------+------------+ + | 4 |100| RAM | RAM | RAM | + +---+---+-------------+-----------+------------+ + | 3 |011| Cart.+Basic | Char. ROM | Kernal ROM | + +---+---+-------------+-----------+------------+ + | 2 |010| RAM | Char. ROM | Kernal ROM | + +---+---+-------------+-----------+------------+ + | 1 |001| RAM | Char. ROM | RAM | + +---+---+-------------+-----------+------------+ + | 0 |000| RAM | RAM | RAM | + +---+---+-------------+-----------+------------+ + ||| + /CharEn|/LoRam + | + /HiRam + */ + +CONSTROM +rarray_t PLA_READ[8] = { + //charen hiram loram + /* 000 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* B0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* E0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* F0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram}, + + /* 001 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* A0 */ // r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + /* B0 */ // r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + + /* A0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* B0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, //chr + /* E0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* F0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram}, + + /* 010 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* B0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, //chr + /* E0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, + /* F0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker}, + + /* 011 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + /* B0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, //chr + /* E0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, + /* F0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker}, + + /* 100 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* B0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* E0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* F0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram}, + + /* 101 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* A0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* B0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_ram, r_ram, + /* E0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* F0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram}, + + /* 110 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* B0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_ram, r_ram, + /* E0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, + /* F0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker}, + + /* 111 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + /* B0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_ram, r_ram, + /* E0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, + /* F0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker} +}; + +CONSTROM +warray_t PLA_WRITE[8] = { + /* 000 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {w_ramz, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 10 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 20 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 30 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 40 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 50 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 60 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 70 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 80 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 90 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* A0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* B0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* C0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* D0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* E0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* F0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram}, + + /* 001 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {w_ramz, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 10 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 20 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 30 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 40 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 50 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 60 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 70 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 80 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 90 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* A0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* B0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* C0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* D0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* E0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* F0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram}, + + /* 010 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {w_ramz, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 10 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 20 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 30 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 40 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 50 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 60 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 70 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 80 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 90 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* A0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* B0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* C0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* D0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* E0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* F0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram,}, + + /* 011 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {w_ramz, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 10 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 20 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 30 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 40 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 50 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 60 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 70 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 80 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 90 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* A0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* B0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* C0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* D0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* E0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* F0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram,}, + + /* 100 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {w_ramz, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 10 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 20 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 30 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 40 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 50 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 60 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 70 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 80 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 90 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* A0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* B0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* C0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* D0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* E0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* F0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram}, + + /* 101 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {w_ramz, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 10 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 20 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 30 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 40 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 50 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 60 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 70 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 80 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 90 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* A0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* B0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* C0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* D0 */ w_vic, w_vic, w_vic, w_vic, w_sid, w_sid, w_sid, w_sid, w_col, w_col, w_col, w_col, w_cia1, w_cia2, w_ram, w_ram, + /* E0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* F0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram}, + + /* 110 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {w_ramz, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 10 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 20 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 30 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 40 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 50 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 60 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 70 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 80 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 90 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* A0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* B0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* C0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* D0 */ w_vic, w_vic, w_vic, w_vic, w_sid, w_sid, w_sid, w_sid, w_col, w_col, w_col, w_col, w_cia1, w_cia2, w_ram, w_ram, + /* E0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* F0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram}, + + /* 111 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {w_ramz, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 10 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 20 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 30 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 40 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 50 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 60 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 70 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* 80 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* 90 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* A0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* B0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + + /* C0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* D0 */ w_vic, w_vic, w_vic, w_vic, w_sid, w_sid, w_sid, w_sid, w_col, w_col, w_col, w_col, w_cia1, w_cia2, w_ram, w_ram, + /* E0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, + /* F0 */ w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram, w_ram} +}; + +/* +Normal 8kB cartridge at $8000 (ROML): GAME = 1, EXROM = 0 +Normal 16kB cartridge at $8000/$a000 (ROML,ROMH): GAME = 0, EXROM = 0 +Ultimax 16kB cartridge at $8000/$e000 (ROML,ROMH): GAME = 0, EXROM = 1 +*/ + +CONSTROM +rarray_t PLA_READ_CARTRIGE_10[8] = { + + //Normal 8kB cartridge at $8000 (ROML): GAME = 1, EXROM = 0 + + //charen hiram loram + /* 000 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* B0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* E0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* F0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram}, + + /* 001 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + /* B0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, //chr + /* E0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* F0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram}, + + /* 010 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* B0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, //chr + /* E0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, + /* F0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker}, + + /* 011 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* 90 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* A0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + /* B0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, //chr + /* E0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, + /* F0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker}, + + /* 100 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* B0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_ram, r_ram, + /* E0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* F0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram}, + + /* 101 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + /* B0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_ram, r_ram, + /* E0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* F0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram}, + + /* 110 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* B0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_ram, r_ram, + /* E0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, + /* F0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker}, + + /* 111 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* 90 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* A0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + /* B0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_ram, r_ram, + /* E0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, + /* F0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker} +}; + +CONSTROM +rarray_t PLA_READ_CARTRIGE_00[8] = { //GAME = 0 EXROM = 0 + + //Normal 16kB cartridge at $8000/$a000 (ROML,ROMH): GAME = 0, EXROM = 0 + + //charen hiram loram + /* 000 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* B0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* E0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* F0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram}, + + /* 001 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + /* B0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, //chr + /* E0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* F0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram}, + + /* 010 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + /* B0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, //chr + /* E0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, + /* F0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker}, + + /* 011 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* 90 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* A0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + /* B0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, r_chr, //chr + /* E0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, + /* F0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker}, + + /* 100 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* B0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_ram, r_ram, + /* E0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* F0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram}, + + /* 101 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + /* B0 */ r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, r_bas, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_ram, r_ram, + /* E0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* F0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram}, + + /* 110 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 90 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* A0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + /* B0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_ram, r_ram, + /* E0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, + /* F0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker}, + + /* 111 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 20 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 30 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 40 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 50 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 60 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 70 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + + /* 80 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* 90 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* A0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + /* B0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + + /* C0 */ r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_ram, r_ram, + /* E0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, + /* F0 */ r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker, r_ker} +}; + +CONSTROM +rarray_t PLA_READ_CARTRIGE_01[8] = { + + //Ultimax 16kB cartridge at $8000/$e000 (ROML,ROMH): GAME = 0, EXROM = 1 + + //charen hiram loram + /* 000 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 20 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 30 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 40 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 50 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 60 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 70 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 80 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* 90 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* A0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* B0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* C0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_nul/*?*/, r_nul/*?*/, + /* E0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + /* F0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH}, + + /* 001 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 20 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 30 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 40 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 50 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 60 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 70 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 80 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* 90 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* A0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* B0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* C0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_nul/*?*/, r_nul/*?*/, + /* E0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + /* F0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH}, + + /* 010 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 20 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 30 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 40 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 50 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 60 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 70 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 80 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* 90 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* A0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* B0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* C0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_nul/*?*/, r_nul/*?*/, + /* E0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + /* F0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH}, + + /* 011 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 20 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 30 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 40 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 50 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 60 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 70 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 80 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* 90 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* A0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* B0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* C0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_nul/*?*/, r_nul/*?*/, + /* E0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + /* F0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH}, + + /* 100 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 20 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 30 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 40 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 50 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 60 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 70 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 80 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* 90 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* A0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* B0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* C0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_nul/*?*/, r_nul/*?*/, + /* E0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + /* F0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH}, + + /* 101 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 20 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 30 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 40 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 50 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 60 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 70 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 80 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* 90 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* A0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* B0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* C0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_nul/*?*/, r_nul/*?*/, + /* E0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + /* F0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH}, + + /* 110 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 20 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 30 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 40 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 50 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 60 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 70 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 80 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* 90 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* A0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* B0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* C0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_nul/*?*/, r_nul/*?*/, + /* E0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + /* F0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH}, + + /* 111 */ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ + /* 00 */ {r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, r_ram, + /* 10 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 20 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 30 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 40 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 50 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 60 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* 70 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* 80 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* 90 */ r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, r_crtL, + /* A0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* B0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + + /* C0 */ r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, r_nul, + /* D0 */ r_vic, r_vic, r_vic, r_vic, r_sid, r_sid, r_sid, r_sid, r_col, r_col, r_col, r_col, r_cia1, r_cia2, r_nul/*?*/, r_nul/*?*/, + /* E0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, + /* F0 */ r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH, r_crtH}, +}; + + + +void resetPLA(void) { + + // Initialize RAM + unsigned i = 0; + const char pattern1 = 0x00; + const char pattern2 = 0xff; + const char patternLength = 0x40; + + while (i <= (sizeof(cpu.RAM) - patternLength * 2)) { + memset(&cpu.RAM[i], pattern1, patternLength); + i += patternLength; + memset(&cpu.RAM[i], pattern2, patternLength); + i += patternLength; + }; + + cpu.RAM[0] = 0x2F; + cpu.RAM[1] = 0x1F; + +/* Cartriges : +Normal 8kB cartridge at $8000 (ROML): GAME = 1, EXROM = 0 +Normal 16kB cartridge at $8000/$a000 (ROML,ROMH): GAME = 0, EXROM = 0 +Ultimax 16kB cartridge at $8000/$e000 (ROML,ROMH): GAME = 0, EXROM = 1 +*/ +#if 1 //No Cartrige + cpu._game = 1; + cpu._exrom = 1; +#else //TODO... + cpu._game = 0; + cpu._exrom = 0; +#endif + + if (cpu._game == 1 && cpu._exrom==0) { + cpu.plamap_r = (rarray_t*)&PLA_READ_CARTRIGE_10[0x07]; + cpu.plamap_w = (warray_t*)&PLA_WRITE[0x07]; + } + else + if (cpu._game == 0 && cpu._exrom==0) { + cpu.plamap_r = (rarray_t*)&PLA_READ_CARTRIGE_00[0x07]; + cpu.plamap_w = (warray_t*)&PLA_WRITE[0x07]; + } + else + if (cpu._game == 0 && cpu._exrom==1) { + cpu.plamap_r = (rarray_t*)&PLA_READ_CARTRIGE_00[0x07]; + cpu.plamap_w = (warray_t*)&PLA_WRITE[0x07]; + } + else { //C64 without Cartridge + cpu.plamap_r = (rarray_t*)&PLA_READ[0x07]; + cpu.plamap_w = (warray_t*)&PLA_WRITE[0x07]; + } +} diff --git a/MCUME_pico/pico64/pla.h b/MCUME_pico/pico64/pla.h new file mode 100755 index 0000000..2355787 --- /dev/null +++ b/MCUME_pico/pico64/pla.h @@ -0,0 +1,66 @@ +/* +Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +#ifndef Teensy64_pla_h_ +#define Teensy64_pla_h_ + +#define CONSTROM const + +#define MEM_BASIC_ROM 0xA000 +#define MEM_CHARSET_ROM 0xD000 +#define MEM_KERNAL_ROM 0xE000 + +#define MEM_VIC 0xD000 +#define MEM_VICCOLOR 0xD800 +#define MEM_SID 0xD400 +#define MEM_CIA1 0xDC00 +#define MEM_CIA2 0xDD00 + +//C64 Memory/Device access (PLA) + +/* READ */ +typedef uint8_t (*r_ptr_t)( uint32_t address ); //Funktionspointer auf uint8_t foo(uint16_t address); +typedef r_ptr_t rarray_t[256]; //Array von Funktionspointern +typedef rarray_t * r_rarr_ptr_t; //Pointer auf Array von Funktionspointern + +/* WRITE */ +typedef void (*w_ptr_t)( uint32_t address, uint8_t value ); //Funktionspointer auf void foo( uint16_t address, uint8_t value ); +typedef w_ptr_t warray_t[256]; //Array von Funktionspointern +typedef warray_t * w_rarr_ptr_t; //Pointer auf Array von Funktionspointern + + +void resetPLA(void); + +#endif diff --git a/MCUME_pico/pico64/platform_config.h b/MCUME_pico/pico64/platform_config.h new file mode 100644 index 0000000..ad84f77 --- /dev/null +++ b/MCUME_pico/pico64/platform_config.h @@ -0,0 +1,25 @@ +#ifndef _PLATFORM_CONFIG_H_ +#define _PLATFORM_CONFIG_H_ + + +#define INVX 1 +//#define INVY 1 +//#define HAS_SND 1 +//#define HAS_USBKEY 1 +//#define HAS_I2CKBD 1 + +//#define ILI9341 1 +//#define ST7789 1 +//#define SWAP_JOYSTICK 1 +//#define LOHRES 1 +//#define ROTATE_SCREEN 1 +//#define EXTERNAL_SD 1 + +//#define HAS_PSRAM 1 + +//#define USE_SDFAT 1 +//#define SD_FAT_TYPE 1 +//#define USE_SDFS 1 +//#define SDFSDEV "1:" + +#endif diff --git a/MCUME_pico/pico64/reSID.cpp b/MCUME_pico/pico64/reSID.cpp new file mode 100644 index 0000000..e8362e2 --- /dev/null +++ b/MCUME_pico/pico64/reSID.cpp @@ -0,0 +1,64 @@ +/* + Arduino SID + Copyright (c) 2015 Frank Bösing + This library 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 3 of the License, or + (at your option) any later version. + This library 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 library. If not, see . + + Diese Bibliothek ist freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + Diese Bibliothek wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + + */ +#include "reSID.h" +#include + +#define AUDIO_BLOCK_SAMPLES 443 +#define SAMPLERATE 22050 +#define CLOCKFREQ 985248 + +void AudioPlaySID::begin(void) +{ + sidptr = &sid; + this->reset(); + setSampleParameters(CLOCKFREQ, SAMPLERATE); + playing = true; +} + +void AudioPlaySID::setSampleParameters(float clockfreq, float samplerate) { + sid.set_sampling_parameters(clockfreq, SAMPLE_FAST, samplerate); + csdelta = round((float)clockfreq / ((float)samplerate / AUDIO_BLOCK_SAMPLES)); +} + +void AudioPlaySID::reset(void) +{ + sid.reset(); +} + +void AudioPlaySID::stop(void) +{ + playing = false; +} + +void AudioPlaySID::update(void * stream, int len) { + // only update if we're playing + if (!playing) return; + + cycle_count delta_t = csdelta; + + sidptr->clock(delta_t, (short int*)stream, len); +} diff --git a/MCUME_pico/pico64/reSID.h b/MCUME_pico/pico64/reSID.h new file mode 100644 index 0000000..db7021e --- /dev/null +++ b/MCUME_pico/pico64/reSID.h @@ -0,0 +1,54 @@ +/* + Arduino SID + Copyright (c) 2015 Frank Bösing + This library 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 3 of the License, or + (at your option) any later version. + This library 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 library. If not, see . + + Diese Bibliothek ist freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + Diese Bibliothek wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + + */ +#include "reSID/sid.h" +#include + +#ifndef play_sid_h_ +#define play_sid_h_ + + +class AudioPlaySID +{ +public: + AudioPlaySID(void) { begin(); } + void begin(void); + void setSampleParameters(float clockfreq, float samplerate); + inline void setreg(int ofs, int val) { sid.write(ofs, val); } + inline uint8_t getreg(int ofs) { return sid.read(ofs); } + void reset(void); + void stop(void); + void update(void * stream, int len); + inline bool isPlaying(void) { return playing; } +private: + cycle_count csdelta; + volatile bool playing; + SID sid; + SID* sidptr; +}; + + +#endif diff --git a/MCUME_pico/pico64/reSID/.DS_Store b/MCUME_pico/pico64/reSID/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/MCUME_pico/pico64/reSID/.DS_Store differ diff --git a/MCUME_pico/pico64/reSID/AUTHORS b/MCUME_pico/pico64/reSID/AUTHORS new file mode 100755 index 0000000..d22e33d --- /dev/null +++ b/MCUME_pico/pico64/reSID/AUTHORS @@ -0,0 +1,3 @@ +Authors of reSID. + +Dag Lem: Designed and programmed complete emulation engine. diff --git a/MCUME_pico/pico64/reSID/COPYING b/MCUME_pico/pico64/reSID/COPYING new file mode 100755 index 0000000..d60c31a --- /dev/null +++ b/MCUME_pico/pico64/reSID/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/MCUME_pico/pico64/reSID/ChangeLog b/MCUME_pico/pico64/reSID/ChangeLog new file mode 100755 index 0000000..1c7aa47 --- /dev/null +++ b/MCUME_pico/pico64/reSID/ChangeLog @@ -0,0 +1,313 @@ +2004-06-11 Dag Lem + + * Version 0.16 released. + + * envelope.h (EnvelopeGenerator::clock): Corrected off-by-one + error in check for ADSR delay bug in delta_t cycle interface. + + * filter.cc (Filter::set_chip_model): Initialize filter cutoff + mappings before call to set_chip_model. + + * sid.cc (SID::set_sampling_parameters): Build shifted FIR tables + with samples according to the sampling frequency. + (SID::clock_resample_interpolate): New function; factorized linear + interpolation out from filter convolutions, and made convolutions + vectorizable. + (SID::clock_resample_fast): New function; single convolution, same + accuracy as with interpolation by using more filter tables. + (SID::State, SID::read_state, SID::write_state): Read and write + rate_counter_period and exponential_counter_period. Read sustain + value. + +2003-10-20 Dag Lem + + * Version 0.15 released. + + * envelope.h (EnvelopeGenerator): Added public State enum. + (EnvelopeGenerator::clock): Rate counter is 15 bits, count + rate_period - 1 after wrapping from 0x8000 to 0 in ADSR delay bug. + + * sid.cc, sid.h (SID::State): Added envelope_state. + (SID::State::write_state): Restore register 0x18. + (SID::set_sampling_parameters): Scale resampling filter to avoid + clipping. + (SID::clock_resample): Saturated arithmetics to avoid clipping. + +2002-12-31 Dag Lem + + * Version 0.14 released. + + * envelope.h (EnvelopeGenerator::clock): Corrected one cycle error + in ADSR delay bug. Only load the exponential counter period at the + envelope counter values 255, 93, 54, 26, 14, 6, 0. + + * filter.cc (Filter::set_chip_model): Call set_w0() and set_Q() to + update filter settings. + (Filter::set_w0): Limit cutoff frequency for both 1 cycle and + delta_t cycle filter. + + * filter.h (Filter::clock): Mix in external audio input. + + * sid.cc, sid.h (SID::input): New function; accepts external audio + input sample. + + * spline.h (PointPlotter::operator ()): Clamp negative values to + zero. + + * voice.cc, voice.h: Changed misleading name wave_DC to wave_zero. + + * wave.h (WaveformGenerator::clock): Corrected bug in check for + accumulator bit 19 in noise register shift. + +2002-01-19 Dag Lem + + * Version 0.13 released. + + * configure.in: Replaced AC_TRY_COMPILER with AC_TRY_COMPILE, + removed AC_PROG_RANLIB. + + * envelope.h (EnvelopeGenerator::clock): Reset rate_step on state + change. + + * extfilt.cc (ExternalFilter::set_chip_model): New calculation of + maximum mixer DC level. + + * filter.cc (Filter::set_chip_model): Moved calculation of + voice_DC to voice.cc, corrected calculation of mixer_DC. + + * filter.h (Filter::output): Mixer output is not inverted. + + * sid.cc (SID::set_chip_model): Call voice.set_chip_model instead + of voice.wave.set_chip_model. + + * voice.cc (Voice::Voice): Call set_chip_model. + (Voice::set_chip_model): New function; model both waveform D/A + converter and envelope multiplying D/A converter DC offsets. + + * voice.h (Voice::output): Add both waveform D/A converter and + envelope multiplying D/A converter DC offsets. + + * wave.h (WaveformGenerator::output____): Reverted to output + minimum wave level when no waveform is selected. The maximum and + minimum wave output levels are interchanged in C= Hacking Issue #20. + +2001-10-20 Dag Lem + + * Version 0.12 released. + + * envelope.cc, envelope.h, filter.cc, filter.h, wave.cc, wave.h: + Removed bool usage. This avoids unnecessary conversion to 1/0. + + * filter.cc (Filter::set_chip_model): New function; selects voice + and mixer DC offsets and mapping from the FC registers to filter + cutoff frequency. The voice and mixer DC offsets for the MOS6581 are + calculated from measurements made by Hársfalvi, Levente in + C= Hacking Issue #20. + (Filter::Filter): Call set_chip_model. + (Filter::f0_6581, Filter::f0_8580): Separate FC mapping tables. + (Filter::f0_points_6581, Filter::f0_points_8580): Separate FC mapping + points. + + * extfilt.cc, extfilt.h (ExternalFilter::set_chip_model): New + function supporting separate DC correction for MOS6581 and MOS8580. + + * sid.cc, sid.h (SID::adjust_sampling_frequency): New function for + on-the-fly adjustment of sampling frequency. + (SID::clock_fast): Corrected sample calculation. + (SID::set_chip_model): Set filter chip model. + (SID::output): Added audio clipping. + (SID::clock, SID::clock_fast, SID::clock_interpolate, + SID::clock_resample): Added sample interleaving. + + * spline.h (interpolate): Generalized to accept repeated points to + introduce points of non-differentiability and discontinuity. + + * wave.h (WaveformGenerator::output____): No selected waveform + yields maximum wave output level. This was found by Hársfalvi, + Levente in C= Hacking Issue #20. + (WaveformGenerator::clock): Optimized for speed (no division). + +2001-03-10 Dag Lem + + * Version 0.11 released. + + * configure.in: Disable building of shared library by default. + Control inlining with RESID_INLINING (0 or 1) and RESID_INLINE + (blank or "inline"). + + * envelope.h, extfilt.h, filter.h, voice.h, wave.h: inline keyword + in both function declarations and function definitions. + + * samp2src.pl: Beautified Perl code. + + * sid.h, sid.cc: Replaced voice variables with array. Removed + filter variables from SID::State. + (SID::clock): New audio sample generating interface. Three + clocking methods are available; clocking at output sample + frequency, clocking at cycle frequency with linear sample + interpolation, and clocking at cycle frequency with audio + resampling. + (SID::clock_fast, SID::clock_interpolate, SID::clock_resample): + New functions called by SID::clock. + (SID::set_sampling_parameters): New function to set up SID for + sample generation. The FIR table used in SID::clock_resample is + calculated here. + (SID::I0): 0th order modified Bessel function to calculate Kaiser + window. + + * siddefs.h: Control inlining with RESID_INLINING (0 or 1) and + RESID_INLINE (blank or "inline"). Added enum sampling_method. + + * voice.h, voice.cc (Voice::set_sync_source): Moved setting of + sync source from constructor. + + * wave.h, wave.cc (WaveformGenerator::set_sync_source): Moved + setting of sync source from constructor. + +2000-11-22 Dag Lem + + * Version 0.10 released. + + * configure.in, Makefile.am: Use libtool to build library. The + hack to "disable" install is removed. + + * extfilt.h, filter.h: Moved filter stability code from sid.cc. + + * sid.cc (SID::clock): Moved filter stability code to + extfilt.h/filter.h. Don't clock the rest of the chip more + frequently than necessary. + + * wave.cc: Typecast for pedantic (and probably incorrect) + compilers. + +2000-05-18 Dag Lem + + * Version 0.9 released. + + * filter.h (Filter::output): The sum of the filter outputs is no + longer weighted. + +1999-06-24 Dag Lem + + * Version 0.8 released. + + * filter.h, filter.cc, wave.h, wave.cc: Typecasts for pedantic + compilers. + + * filter.h (Filter::clock): Voice 3 is only silenced by voice3off + if it is not routed through the filter. + + * sid.cc (SID::State): Added constructor for proper initalization. + + * spline.h: Inlined template functions to avoid problems at link + time with certain compilers. + +1999-02-25 Dag Lem + + * Version 0.7 released. + + * configure.in: Check whether compiler supports bool. + + * extfilt.h, extfilt.cc: Implementation of C64 filter, external to + the SID chip. + + * filter.h (Filter::clock): Optimized filter routing using a switch. + (Filter::output): Optimized filter mixing using a switch, avoiding + integer division. Corrected sign of filtered output, which is + inverted compared to unfiltered output. + + * filter.cc (Filter::set_w0): Removed use of M_PI and math.h + functions. Use spline table to map fc to w0. + (Filter::fc_default): Return array of FC spline interpolation points. + (Filter::fc_plotter): Return FC spline plotter object. + + * sid.h (SID::enable_external_filter): Enable/disable external + filter. + (SID::fc_default): Return array of FC spline interpolation points. + (SID::fc_plotter): Return FC spline plotter object. + (SID::State, SID::read_state, SID::write_state): Read and write + complete SID state. + + * sid.cc (SID::clock): Age bus value. Clock external filter. + (SID::enable_external_filter): Enable/disable external filter. + + * spline.h: Spline implementation. Used to specify mapping from + the FC register to filter cutoff frequency. + +1998-11-14 Dag Lem + + * Version 0.6 released. + + * configure.in: Allow compilation in a separate directory. + + * wave.h (WaveformGenerator::synchronize): Handle special case when a + sync source is synced itself on the same cycle as its MSB is set + high. + + * sid.cc (SID::clock): Only clock on MSB on/off for hard sync. + +1998-09-06 Dag Lem + + * Version 0.5 released. + + * version.cc (resid_version_string): Version string with C linkage. + + * wave.cc (WaveformGenerator::set_chip_model): Emulation of MOS8580 + combined waveforms. + +1998-08-28 Dag Lem + + * Version 0.4 released. + + * envelope.h (EnvelopeGenerator::clock): Count up to rate_period twice + during ADSR delay bug, and add one extra rate counter step. + + * filter.cc (Filter::bsd_copysign): Renamed copysign function for + compilation on platforms where copysign is implemented as a macro. + +1998-08-23 Dag Lem + + * Version 0.3 released. + + * envelope.h (EnvelopeGenerator::clock): Handle ADSR boundary bug. + + * envelope.cc (EnvelopeGenerator::rate_counter_period, + EnvelopeGenerator::exponential_counter_period): Corrected counter + periods. + + * filter.h (Filter::clock): Optimized for speed (division by shifting). + + * sid.h (SID::clock): New one-cycle optimized overload of the clock() + function. + + * wave.h (WaveformGenerator::output_P_T): Combined waveform + pulse+triangle indexing corrected. + (WaveformGenerator::output_P__): Check for test bit to handle + pulse+test bit samples. + (WaveformGenerator::output): Optimized for speed (inlining). + +1998-07-28 Dag Lem + + * Version 0.2 released. + + * envelope.h (EnvelopeGenerator::clock): Start decay cycle immediately + at envelope counter 0xff. New sustain value is zero if the sustain + level is raised above the current envelope counter value. + (EnvelopeGenerator::step_envelope): Handle ADSR delay bug. + + * envelope.cc (EnvelopeGenerator::rate_counter_period, + EnvelopeGenerator::exponential_counter_period): Corrected counter + periods. + (EnvelopeGenerator::writeCONTROL_REG): Do not modify rate counter. + + * filter.cc (Filter::set_Q): Constrain Q to keep filter stable. + + * sid.h (SID::read, SID::write, SID::bypass_filter): Simplified API + routing register access through the SID class. + + * sid.cc (SID::output): Corrected variable-bit audio output return. + (SID::read, SID::write): Allow read of write only registers. + +1998-06-09 Dag Lem + + * Version 0.1 released. diff --git a/MCUME_pico/pico64/reSID/INSTALL b/MCUME_pico/pico64/reSID/INSTALL new file mode 100755 index 0000000..54caf7c --- /dev/null +++ b/MCUME_pico/pico64/reSID/INSTALL @@ -0,0 +1,229 @@ +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/MCUME_pico/pico64/reSID/NEWS b/MCUME_pico/pico64/reSID/NEWS new file mode 100755 index 0000000..e0ff298 --- /dev/null +++ b/MCUME_pico/pico64/reSID/NEWS @@ -0,0 +1,271 @@ +Changes in reSID version 0.16 +----------------------------- + +An off-by-one error in the emulation of the ADSR delay bug has been +fixed in the fast version of the envelope clocking. + +An initialization bug in the Filter class which caused floating point +exceptions on some platforms has been fixed. + +Missing fields have been added to SID::State for correct snapshots. + +By building shifted FIR tables with samples according to the sampling +frequency, the resampling code dramatically reduces the computational +effort in the filter convolutions, without any loss of accuracy. The +filter convolutions are now also vectorizable on current hardware. The +implementation builds on ideas by Laurent Ganier. + +The resampling code has been split into two functions, one using +interpolation and a small set of shifted filter tables, and one using +direct lookup and a large set of shifted filter tables. The accuracy +is the same, the difference is that the direct lookup runs has the +potential of running at almost twice the speed (depending on cache +size and memory bandwidth) using approximately 16MB more memory. It is +now possible to run high quality resampling in real time on quite +modest hardware, provided that a vectorizing compiler is used. + + +Changes in reSID version 0.15 +----------------------------- + +An error in the emulation of the ADSR delay bug has been fixed. When +emulation of the ADSR delay bug was introduced in reSID 0.2, the delay +was one cycle too long. One cycle was subtracted from the delay in +reSID 0.4, however unfortunately one rate counter period was added as +well, thus increasing the error. At the time there was no method to +fully synchronize the CPU with envelope 3, so the measurements relied +on averaging. Because of pipelining in the envelope logic the effects +of a write are delayed, and this caused the test code to miss the +target by exactly one rate counter period on a real SID. The current +test code does achieve full synchronization with envelope 3, so this +time the delay should be 100% correct. There are still side effects +caused by pipelining which are not implemented in reSID, however these +effects are not controllable without full synchronization with the +envelope, something which is hard to achieve with envelope 3, and +impossible with envelope 1 and 2. + +The envelope state (ADSR) has been added to the SID state, and the +volume setting is now restored from the SID state. + +Filter scaling and clipping has been added to avoid sample overflows +in the resampling filter. + + +Changes in reSID version 0.14 +----------------------------- + +The SID external audio input is now emulated. This can be used e.g. to +simulate the hack of connecting a resistor from EXT IN to GND to boost +the sample volume on the MOS8580. Calling sid.input(-32768) makes the +MOS8580 sound more or less like the MOS6581 with respect to samples. +The interface could also be used to mix in an external audio signal, +but note that to do this correctly you should really resample the +audio signal to 1MHz first. + +The filter settings are now updated immediately when the chip model is +changed. Earlier the filter cutoff frequency would not change until +the FC registers were updated. + +A one cycle error in the fast version of the envelope clocking has +been fixed. This bug was introduced in reSID 0.13 and could affect the +ADSR delay emulation. + +The exponential counter period is now only loaded at the envelope +counter values 255, 93, 54, 26, 14, 6, 0. The period can be different +for the same envelope counter value, depending on whether the envelope +has been rising (attack -> release) or sinking (decay/release). + +A bug in the fast version of the noise register shift routine has been +corrected. This bug caused too low noise frequency in some cases. + +The filter cutoff frequency is limited to 16kHz to keep the filter stable. + + +Changes in reSID version 0.13 +----------------------------- + +The internal DC levels of the MOS6581 have been double checked and +corrected. The reason for the asymmetric scaling of the voice output +has been found; there is a DC offset from the waveform D/A converter +in addition to the DC offset from the envelope multiplying D/A +converter. No selected waveform (N=P=S=T=0) yields minimum wave output +level again. + +A bug in the fast version of the envelope clocking has been corrected. +This bug could incorrectly invoke the ADSR delay emulation. + + +Changes in reSID version 0.12 +----------------------------- + +A bug causing incorrect sample spacing in the new SAMPLE_FAST sample +calculation has been corrected. + +Audio clipping has been added to guard against sample overflows. + +To support multi-channel sampling, sample interleaving has been added +to the clock() interface. + +To support synchronization with an external timer, an interface for +sample rate adjustment has been added. + +The internal DC levels have been corrected. No selected waveform +(N=P=S=T=0) yields maximum wave output level. Furthermore, each voice +in the MOS6581 independently contributes to the DC level in the mixer, +and the mixer itself has a small DC offset as well. The MOS8580 has no +DC offsets. + +The spline interpolation routine has been generalized to accept +repeated points to introduce points of non-differentiability and +discontinuity. + +A separate mapping from the FC registers to filter cutoff frequency +has been included for the MOS8580, and the mapping for the MOS6581 has +been refined. + + +Changes in reSID version 0.11 +----------------------------- + +A new clock() interface has been added. This function generates audio +samples into a buffer, greatly simplifying the task of writing driver +code for reSID. It also facilitates more advanced audio sample +generation, as described below. + +Three clocking methods are available: clocking at output sample +frequency, clocking at cycle frequency with linear sample +interpolation, and clocking at cycle frequency with audio resampling. + +Clocking at output sample frequency is fast, and yields acceptable +sound quality, except for the SID combined waveforms, which have a +very high frequency content. + +Clocking at cycle frequency with linear sample interpolation is +approximately five to ten times slower at 44.1kHz sampling frequency, +but the sound quality is improved because of the linear sample +interpolation, and because some sampling noise is removed by the SID +external filter, which attenuates signals above 16kHz. + +Finally, clocking at cycle frequency with audio resampling has a work +rate which is independent of the sampling frequency; it is rather +inversely proportional to the percentage of the bandwidth allocated +to the filter transition band. This implies that e.g. with the +transition band starting at ~ 20kHz, it is faster to generate 48kHz +than 44.1kHz samples. + +Audio resampling is the theoretically correct method for sample +generation, and delivers SID sound quality previously unheard of. This +should make connoisseurs nod in appreciation, and for some time to +come it could possibly also make people tear their hair over having to +buy state of the art hardware to handle the obscene workload in real +time. By trading off passband bandwidth for speed, real time +processing is possible on current hardware. A 60% passband bandwidth +is within the reach of reasonably fast machines, while maximum sound +quality at 90% passband bandwidth, requiring four times the processing +power, is not. Yet. + + +Changes in reSID version 0.10 +----------------------------- + +Libtool is now used to build the library. + +To keep the filters stable it is necessary to clock them at above +sample rate. The chip clocking code has been modified to only +"overclock" the filters, not the whole chip. This yields a +considerable speedup without noticeably lowering sound quality. Note +that this is aimed at slow hardware, if possible the 1 cycle clock +interface should be used to eliminate sampling noise. + + +Changes in reSID version 0.9 +---------------------------- + +The sum of the filter outputs is no longer weighted. + + +Changes in reSID version 0.8 +---------------------------- + +voice3off has no effect if voice 3 is routed through the filter. + + +Changes in reSID version 0.7 +---------------------------- + +The audio output filter in the C64, external to the SID chip, has been +modeled. + +The mapping function between the FC register and filter cutoff frequency can +now be specified with spline interpolation points. This facilitates +interactive modification of the mapping function by graphical presentation of +the interpolation curve. The implementation of this novel spline design is +fast and general purpose, and should be well suited for use in other projects +as well. + +Filtered output has been inverted compared to unfiltered output. + +Aging of the bus value obtained when reading write only registers has been +partly implemented. + +To facilitate offline storage the complete state of SID can be read and +written. + + +Changes in reSID version 0.6 +---------------------------- + +A special case in synchronization has been implemented. + +The Autoconf script is cleaned up to allow compilation in a separate directory. + + +Changes in reSID version 0.5 +---------------------------- + +Emulation of MOS8580 combined waveforms. + +Version string resid_version_string provided for e.g. Autoconf tests. +The string has C linkage. + + +Changes in reSID version 0.4 +---------------------------- + +The implementation of the ADSR delay bug has been refined and should now be +cycle exact. + +The patch for VICE has been removed since VICE 0.15 will include reSID support. + + +Changes in reSID version 0.3 +---------------------------- + +The reSID library has changed name from libmos6581.a to libresid.a + +The pulse+sawtooth combined waveform has been corrected. + +Pulse+test bit samples are implemented. + +The envelope rate periods have finally been exactly determined. + +A new SID bug, the ADSR boundary bug, has been discovered and implemented. +This bug makes it possible to step from envelope level 0x00 to 0xff or from +0xff to 0x00 in one step. + +One-cycle optimized overloads of the clock() functions have been implemented +to facilitate sampling at 1MHz. + +The code has been further optimized for speed. + + +Changes in reSID version 0.2 +---------------------------- + +The implementation of the Envelope Generator has been rewritten to handle +the infamous ADSR delay bug. All known envelope related bugs have been +corrected. + +The maximum filter resonance is lowered to keep the filter stable. + +The reSID API has been simplified. Reading write only registers is allowed. diff --git a/MCUME_pico/pico64/reSID/README b/MCUME_pico/pico64/reSID/README new file mode 100755 index 0000000..79da519 --- /dev/null +++ b/MCUME_pico/pico64/reSID/README @@ -0,0 +1,26 @@ +This is reSID, a reverse engineered software emulation of the MOS6581 SID +(Sound Interface Device). This chip was used in the Commodore 64 computer. + +reSID is free software. See the file COPYING for copying permission. + +reSID is a C++ library containing a complete emulation of the SID chip. +This library can be linked into programs emulating the MOS6510 MPU to +play music made for the Commodore 64 computer. reSID has been successfully +linked into VICE, a full-fledged Commodore 64 emulator, and SIDPLAY, a +popular SID tune player. The VICE home page is: +http://www.viceteam.org/ +A patch for SIDPLAY can be found on the SIDPLAY home page: +http://www.geocities.com/SiliconValley/Lakes/5147/ + +Various SID emulators exist, however reSID should still be of great +interest to Commodore 64 nostalgics. The emulator engine is cycle-based, +emulating the internal operations of the SID chip. SID's audio filter is +modeled as an actual two-integrator-loop biquadratic filter circuit. +The engine has been developed based on available information on SID, sampling +of the OSC3 and ENV3 registers, filter theory, and meticulous testing. +In short, a scientific approach has been taken to model the SID chip as +accurately as possible. + +To our knowledge reSID is by far the most accurate SID emulator ever created. +This comes at a price; what is considered a fairly fast CPU at the time of +this writing is needed to run the emulator. diff --git a/MCUME_pico/pico64/reSID/THANKS b/MCUME_pico/pico64/reSID/THANKS new file mode 100755 index 0000000..824c682 --- /dev/null +++ b/MCUME_pico/pico64/reSID/THANKS @@ -0,0 +1,87 @@ +reSID was written by Dag Lem. + +The project was started after reading an interview with Bob Yannes, the +head engineer of the SID chip. This interview was made by Andreas Varga, +with additional questions from Linus Walleij. The interview can be found on +the SID Homepage: +http://stud1.tuwien.ac.at/~e9426444/sidpage.html +The reverse engineering of the SID chip would not have been possible without +this interview. + +Also found on the SID Homepage is an examination of the SID noise waveform +written by Asger Alstrup. This article was of great help in reverse +engineering the complete algorithm for the noise waveform. + +Lars Haugseth has been invaluable in the testing of reSID. +In a matter of hours after hearing about my project, he had completed a 6510 +disassembler in Perl. The importance of this was not evident to me until the +next day when he had disassembled the music routine for "Outrun Remix" by +Geir Tjelta, made some changes to it, reassembled, and produced a file +containing 48K of SID register values. +The first tests of reSID were run on this file. +With an exceptional memory of Commodore 64 tunes Lars Haugseth has pointed +out several errors in reSID that are now corrected. + +Morten Rollan and Kåre Gunnar Nesheim have provided interesting and insightful +information regarding digital filters. Kåre Gunnar Nesheim has also kindly +provided a 1901 monitor and a C64C from his private computer museum. His C64C +was used to measure the MOS8580 filter cutoff characteristics. + +VICE has been an inspiration for this project, and testing of reSID has +been greatly simplified by VICEs -sounddev dump option. Teemu Rantanen +has written support for reSID in VICE, making it possible to choose at runtime +between his excellent SID emulation and, given enough CPU power, the reSID +emulator engine. Tibor Biczo, Andreas Boose, and André Fachat have provided +combined waveform samples for 6581 R1, R3, R4, and 8580 R5 SID chips. +The VICE home page is found at: +http://www.viceteam.org/ + +The author of SIDPLAY, Michael Schwendt, has implemented a patch to link +libsidplay with reSID. Using his excellent tune player he has pointed out +several bugs in reSID. He has also provided invaluable information related to +the bugs as basis for further investigation. Most notably, the infamous ADSR +delay bug, of which I was previously unaware, has finally been understood and +is now correctly implemented in reSID. The SIDPLAY home page is found at: +http://www.geocities.com/SiliconValley/Lakes/5147/ + +A bug report from Daniel Lacasse led to the discovery of a previously unknown +SID bug, the ADSR boundary bug. + +Anders Ødegård has explained aspects of analog electronics and audio +equipment. + +Bob Yannes has patiently answered questions and has provided lots of +technical information on the SID filter. Thank you Bob! + +Julius O. Smith III has provided much of the theoretical basis for the +audio resampling with his "Digital Audio Resampling Home Page": +http://www-ccrma.stanford.edu/~jos/resample/ + +Hársfalvi, Levente has made a thorough investigation of the DC levels +in the MOS6581 chip. His results are available in C= Hacking Issue #20, +and form the basis of DC corrections in reSID. Levente found that each +voice independently contributes to the DC level in the mixer. Note +that some of the conclusions in the article are incorrect, as the +maximum and minimum voice output levels are interchanged. + +The author of SIDPLAY2, Simon White, has given a lot of feedback on +reSID. Most importantly he found and fixed a bug in the fast clock +version of the ADSR emulation. + +Laurent Ovaert found and fixed a bug in the fast version of the noise +register shift routine. + +Andreas Dehmel has reported all sorts of initialization and overflow +errors. + +Laurent Ganier demonstrated two crucial techniques for vectorizable +filter convolution in a patch. Firstly, he made the filter elements +correspond to the sampling frequency, allowing the linear +interpolation to be factorized out from the convolution. Secondly, he +duplicated elements in the sample ring buffer, achieving contiguous +storage of the samples. The current resampling implementation builds +on these ideas, improving on them by using shifted filter tables for +generalization and accuracy. + +Finally I would like to thank my business partner Stian W. Arnesen for +putting up with all this nonsense. diff --git a/MCUME_pico/pico64/reSID/TODO b/MCUME_pico/pico64/reSID/TODO new file mode 100755 index 0000000..4527dfa --- /dev/null +++ b/MCUME_pico/pico64/reSID/TODO @@ -0,0 +1,8 @@ +* Determine the characteristics of the SID filter integrators. Spice + may perhaps be used to simulate the filter circuit. + +* Write documentation. Possibly a paper describing how SID was reverse + engineered. + +* Implement a SID tune player. A PSID player, VSID, is partly + implemented in VICE. diff --git a/MCUME_pico/pico64/reSID/envelope.cpp b/MCUME_pico/pico64/reSID/envelope.cpp new file mode 100755 index 0000000..915c4c4 --- /dev/null +++ b/MCUME_pico/pico64/reSID/envelope.cpp @@ -0,0 +1,231 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 +// --------------------------------------------------------------------------- + +#define __ENVELOPE_CC__ +#include "envelope.h" + +RESID_NAMESPACE_START + +// ---------------------------------------------------------------------------- +// Constructor. +// ---------------------------------------------------------------------------- +EnvelopeGenerator::EnvelopeGenerator() +{ + reset(); +} + +// ---------------------------------------------------------------------------- +// SID reset. +// ---------------------------------------------------------------------------- +void EnvelopeGenerator::reset() +{ + envelope_counter = 0; + + attack = 0; + decay = 0; + sustain = 0; + release = 0; + + gate = 0; + + rate_counter = 0; + exponential_counter = 0; + exponential_counter_period = 1; + + state = RELEASE; + rate_period = rate_counter_period[release]; + hold_zero = true; +} + + +// Rate counter periods are calculated from the Envelope Rates table in +// the Programmer's Reference Guide. The rate counter period is the number of +// cycles between each increment of the envelope counter. +// The rates have been verified by sampling ENV3. +// +// The rate counter is a 16 bit register which is incremented each cycle. +// When the counter reaches a specific comparison value, the envelope counter +// is incremented (attack) or decremented (decay/release) and the +// counter is zeroed. +// +// NB! Sampling ENV3 shows that the calculated values are not exact. +// It may seem like most calculated values have been rounded (.5 is rounded +// down) and 1 has beed added to the result. A possible explanation for this +// is that the SID designers have used the calculated values directly +// as rate counter comparison values, not considering a one cycle delay to +// zero the counter. This would yield an actual period of comparison value + 1. +// +// The time of the first envelope count can not be exactly controlled, except +// possibly by resetting the chip. Because of this we cannot do cycle exact +// sampling and must devise another method to calculate the rate counter +// periods. +// +// The exact rate counter periods can be determined e.g. by counting the number +// of cycles from envelope level 1 to envelope level 129, and dividing the +// number of cycles by 128. CIA1 timer A and B in linked mode can perform +// the cycle count. This is the method used to find the rates below. +// +// To avoid the ADSR delay bug, sampling of ENV3 should be done using +// sustain = release = 0. This ensures that the attack state will not lower +// the current rate counter period. +// +// The ENV3 sampling code below yields a maximum timing error of 14 cycles. +// lda #$01 +// l1: cmp $d41c +// bne l1 +// ... +// lda #$ff +// l2: cmp $d41c +// bne l2 +// +// This yields a maximum error for the calculated rate period of 14/128 cycles. +// The described method is thus sufficient for exact calculation of the rate +// periods. +// +const reg16 EnvelopeGenerator::rate_counter_period[] = { + 9, // 2ms*1.0MHz/256 = 7.81 + 32, // 8ms*1.0MHz/256 = 31.25 + 63, // 16ms*1.0MHz/256 = 62.50 + 95, // 24ms*1.0MHz/256 = 93.75 + 149, // 38ms*1.0MHz/256 = 148.44 + 220, // 56ms*1.0MHz/256 = 218.75 + 267, // 68ms*1.0MHz/256 = 265.63 + 313, // 80ms*1.0MHz/256 = 312.50 + 392, // 100ms*1.0MHz/256 = 390.63 + 977, // 250ms*1.0MHz/256 = 976.56 + 1954, // 500ms*1.0MHz/256 = 1953.13 + 3126, // 800ms*1.0MHz/256 = 3125.00 + 3907, // 1 s*1.0MHz/256 = 3906.25 + 11720, // 3 s*1.0MHz/256 = 11718.75 + 19532, // 5 s*1.0MHz/256 = 19531.25 + 31251 // 8 s*1.0MHz/256 = 31250.00 +}; + + +// For decay and release, the clock to the envelope counter is sequentially +// divided by 1, 2, 4, 8, 16, 30, 1 to create a piece-wise linear approximation +// of an exponential. The exponential counter period is loaded at the envelope +// counter values 255, 93, 54, 26, 14, 6, 0. The period can be different for the +// same envelope counter value, depending on whether the envelope has been +// rising (attack -> release) or sinking (decay/release). +// +// Since it is not possible to reset the rate counter (the test bit has no +// influence on the envelope generator whatsoever) a method must be devised to +// do cycle exact sampling of ENV3 to do the investigation. This is possible +// with knowledge of the rate period for A=0, found above. +// +// The CPU can be synchronized with ENV3 by first synchronizing with the rate +// counter by setting A=0 and wait in a carefully timed loop for the envelope +// counter _not_ to change for 9 cycles. We can then wait for a specific value +// of ENV3 with another timed loop to fully synchronize with ENV3. +// +// At the first period when an exponential counter period larger than one +// is used (decay or relase), one extra cycle is spent before the envelope is +// decremented. The envelope output is then delayed one cycle until the state +// is changed to attack. Now one cycle less will be spent before the envelope +// is incremented, and the situation is normalized. +// The delay is probably caused by the comparison with the exponential counter, +// and does not seem to affect the rate counter. This has been verified by +// timing 256 consecutive complete envelopes with A = D = R = 1, S = 0, using +// CIA1 timer A and B in linked mode. If the rate counter is not affected the +// period of each complete envelope is +// (255 + 162*1 + 39*2 + 28*4 + 12*8 + 8*16 + 6*30)*32 = 756*32 = 32352 +// which corresponds exactly to the timed value divided by the number of +// complete envelopes. +// NB! This one cycle delay is not modeled. + + +// From the sustain levels it follows that both the low and high 4 bits of the +// envelope counter are compared to the 4-bit sustain value. +// This has been verified by sampling ENV3. +// +const reg8 EnvelopeGenerator::sustain_level[] = { + 0x00, + 0x11, + 0x22, + 0x33, + 0x44, + 0x55, + 0x66, + 0x77, + 0x88, + 0x99, + 0xaa, + 0xbb, + 0xcc, + 0xdd, + 0xee, + 0xff, +}; + + +// ---------------------------------------------------------------------------- +// Register functions. +// ---------------------------------------------------------------------------- +void EnvelopeGenerator::writeCONTROL_REG(reg8 control) +{ + reg8 gate_next = control & 0x01; + + // The rate counter is never reset, thus there will be a delay before the + // envelope counter starts counting up (attack) or down (release). + + // Gate bit on: Start attack, decay, sustain. + if (!gate && gate_next) { + state = ATTACK; + rate_period = rate_counter_period[attack]; + + // Switching to attack state unlocks the zero freeze. + hold_zero = false; + } + // Gate bit off: Start release. + else if (gate && !gate_next) { + state = RELEASE; + rate_period = rate_counter_period[release]; + } + + gate = gate_next; +} + +void EnvelopeGenerator::writeATTACK_DECAY(reg8 attack_decay) +{ + attack = (attack_decay >> 4) & 0x0f; + decay = attack_decay & 0x0f; + if (state == ATTACK) { + rate_period = rate_counter_period[attack]; + } + else if (state == DECAY_SUSTAIN) { + rate_period = rate_counter_period[decay]; + } +} + +void EnvelopeGenerator::writeSUSTAIN_RELEASE(reg8 sustain_release) +{ + sustain = (sustain_release >> 4) & 0x0f; + release = sustain_release & 0x0f; + if (state == RELEASE) { + rate_period = rate_counter_period[release]; + } +} + +reg8 EnvelopeGenerator::readENV() +{ + return output(); +} + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/envelope.h b/MCUME_pico/pico64/reSID/envelope.h new file mode 100755 index 0000000..7fd86ee --- /dev/null +++ b/MCUME_pico/pico64/reSID/envelope.h @@ -0,0 +1,309 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// --------------------------------------------------------------------------- + +#ifndef __ENVELOPE_H__ +#define __ENVELOPE_H__ + +#include "siddefs.h" + +RESID_NAMESPACE_START + +// ---------------------------------------------------------------------------- +// A 15 bit counter is used to implement the envelope rates, in effect +// dividing the clock to the envelope counter by the currently selected rate +// period. +// In addition, another counter is used to implement the exponential envelope +// decay, in effect further dividing the clock to the envelope counter. +// The period of this counter is set to 1, 2, 4, 8, 16, 30 at the envelope +// counter values 255, 93, 54, 26, 14, 6, respectively. +// ---------------------------------------------------------------------------- +class EnvelopeGenerator +{ +public: + EnvelopeGenerator(); + + enum State { ATTACK, DECAY_SUSTAIN, RELEASE }; + + RESID_INLINE void clock(); + RESID_INLINE void clock(cycle_count delta_t); + void reset(); + + void writeCONTROL_REG(reg8); + void writeATTACK_DECAY(reg8); + void writeSUSTAIN_RELEASE(reg8); + reg8 readENV(); + + // 8-bit envelope output. + RESID_INLINE reg8 output(); + +protected: + reg16 rate_counter; + reg16 rate_period; + reg8 exponential_counter; + reg8 exponential_counter_period; + reg8 envelope_counter; + bool hold_zero; + + reg4 attack; + reg4 decay; + reg4 sustain; + reg4 release; + + reg8 gate; + + State state; + + // Lookup table to convert from attack, decay, or release value to rate + // counter period. + static const reg16 rate_counter_period[]; + + // The 16 selectable sustain levels. + static const reg8 sustain_level[]; + +friend class SID; +}; + + +// ---------------------------------------------------------------------------- +// Inline functions. +// The following functions are defined inline because they are called every +// time a sample is calculated. +// ---------------------------------------------------------------------------- + +#if RESID_INLINING || defined(__ENVELOPE_CC__) + +// ---------------------------------------------------------------------------- +// SID clocking - 1 cycle. +// ---------------------------------------------------------------------------- +RESID_INLINE +void EnvelopeGenerator::clock() +{ + // Check for ADSR delay bug. + // If the rate counter comparison value is set below the current value of the + // rate counter, the counter will continue counting up until it wraps around + // to zero at 2^15 = 0x8000, and then count rate_period - 1 before the + // envelope can finally be stepped. + // This has been verified by sampling ENV3. + // + if (++rate_counter & 0x8000) { + ++rate_counter &= 0x7fff; + } + + if (rate_counter != rate_period) { + return; + } + + rate_counter = 0; + + // The first envelope step in the attack state also resets the exponential + // counter. This has been verified by sampling ENV3. + // + if (state == ATTACK || ++exponential_counter == exponential_counter_period) + { + exponential_counter = 0; + + // Check whether the envelope counter is frozen at zero. + if (hold_zero) { + return; + } + + switch (state) { + case ATTACK: + // The envelope counter can flip from 0xff to 0x00 by changing state to + // release, then to attack. The envelope counter is then frozen at + // zero; to unlock this situation the state must be changed to release, + // then to attack. This has been verified by sampling ENV3. + // + ++envelope_counter &= 0xff; + if (envelope_counter == 0xff) { + state = DECAY_SUSTAIN; + rate_period = rate_counter_period[decay]; + } + break; + case DECAY_SUSTAIN: + if (envelope_counter != sustain_level[sustain]) { + --envelope_counter; + } + break; + case RELEASE: + // The envelope counter can flip from 0x00 to 0xff by changing state to + // attack, then to release. The envelope counter will then continue + // counting down in the release state. + // This has been verified by sampling ENV3. + // NB! The operation below requires two's complement integer. + // + --envelope_counter &= 0xff; + break; + } + + // Check for change of exponential counter period. + switch (envelope_counter) { + case 0xff: + exponential_counter_period = 1; + break; + case 0x5d: + exponential_counter_period = 2; + break; + case 0x36: + exponential_counter_period = 4; + break; + case 0x1a: + exponential_counter_period = 8; + break; + case 0x0e: + exponential_counter_period = 16; + break; + case 0x06: + exponential_counter_period = 30; + break; + case 0x00: + exponential_counter_period = 1; + + // When the envelope counter is changed to zero, it is frozen at zero. + // This has been verified by sampling ENV3. + hold_zero = true; + break; + } + } +} + + +// ---------------------------------------------------------------------------- +// SID clocking - delta_t cycles. +// ---------------------------------------------------------------------------- +RESID_INLINE +void EnvelopeGenerator::clock(cycle_count delta_t) +{ + // Check for ADSR delay bug. + // If the rate counter comparison value is set below the current value of the + // rate counter, the counter will continue counting up until it wraps around + // to zero at 2^15 = 0x8000, and then count rate_period - 1 before the + // envelope can finally be stepped. + // This has been verified by sampling ENV3. + // + + // NB! This requires two's complement integer. + int rate_step = rate_period - rate_counter; + if (rate_step <= 0) { + rate_step += 0x7fff; + } + + while (delta_t) { + if (delta_t < rate_step) { + rate_counter += delta_t; + if (rate_counter & 0x8000) { + ++rate_counter &= 0x7fff; + } + return; + } + + rate_counter = 0; + delta_t -= rate_step; + + // The first envelope step in the attack state also resets the exponential + // counter. This has been verified by sampling ENV3. + // + if (state == ATTACK || ++exponential_counter == exponential_counter_period) + { + exponential_counter = 0; + + // Check whether the envelope counter is frozen at zero. + if (hold_zero) { + rate_step = rate_period; + continue; + } + + switch (state) { + case ATTACK: + // The envelope counter can flip from 0xff to 0x00 by changing state to + // release, then to attack. The envelope counter is then frozen at + // zero; to unlock this situation the state must be changed to release, + // then to attack. This has been verified by sampling ENV3. + // + ++envelope_counter &= 0xff; + if (envelope_counter == 0xff) { + state = DECAY_SUSTAIN; + rate_period = rate_counter_period[decay]; + } + break; + case DECAY_SUSTAIN: + if (envelope_counter != sustain_level[sustain]) { + --envelope_counter; + } + break; + case RELEASE: + // The envelope counter can flip from 0x00 to 0xff by changing state to + // attack, then to release. The envelope counter will then continue + // counting down in the release state. + // This has been verified by sampling ENV3. + // NB! The operation below requires two's complement integer. + // + --envelope_counter &= 0xff; + break; + } + + // Check for change of exponential counter period. + switch (envelope_counter) { + case 0xff: + exponential_counter_period = 1; + break; + case 0x5d: + exponential_counter_period = 2; + break; + case 0x36: + exponential_counter_period = 4; + break; + case 0x1a: + exponential_counter_period = 8; + break; + case 0x0e: + exponential_counter_period = 16; + break; + case 0x06: + exponential_counter_period = 30; + break; + case 0x00: + exponential_counter_period = 1; + + // When the envelope counter is changed to zero, it is frozen at zero. + // This has been verified by sampling ENV3. + hold_zero = true; + break; + } + } + + rate_step = rate_period; + } +} + + +// ---------------------------------------------------------------------------- +// Read the envelope generator output. +// ---------------------------------------------------------------------------- +RESID_INLINE +reg8 EnvelopeGenerator::output() +{ + return envelope_counter; +} + +#endif // RESID_INLINING || defined(__ENVELOPE_CC__) + +RESID_NAMESPACE_STOP + +#endif // not __ENVELOPE_H__ diff --git a/MCUME_pico/pico64/reSID/extfilt.cpp b/MCUME_pico/pico64/reSID/extfilt.cpp new file mode 100755 index 0000000..e9747f0 --- /dev/null +++ b/MCUME_pico/pico64/reSID/extfilt.cpp @@ -0,0 +1,98 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 +// --------------------------------------------------------------------------- + +#define __EXTFILT_CC__ +#include "extfilt.h" + +RESID_NAMESPACE_START + +// ---------------------------------------------------------------------------- +// Constructor. +// ---------------------------------------------------------------------------- +ExternalFilter::ExternalFilter() +{ + reset(); + enable_filter(true); + set_sampling_parameter(15915.6); + //set_chip_model(MOS6581); + {//instead: + mixer_DC = ((((0x800 - 0x380) + 0x800)*0xff*3 - 0xfff*0xff/18) >> 7)*0x0f; + } +} + + +// ---------------------------------------------------------------------------- +// Enable filter. +// ---------------------------------------------------------------------------- +void ExternalFilter::enable_filter(bool enable) +{ + enabled = enable; +} + + +// ---------------------------------------------------------------------------- +// Setup of the external filter sampling parameters. +// ---------------------------------------------------------------------------- +void ExternalFilter::set_sampling_parameter(float pass_freq) +{ + static const float pi = 3.1415926535897932385; + + // Low-pass: R = 10kOhm, C = 1000pF; w0l = 1/RC = 1/(1e4*1e-9) = 100000 + // High-pass: R = 1kOhm, C = 10uF; w0h = 1/RC = 1/(1e3*1e-5) = 100 + // Multiply with 1.048576 to facilitate division by 1 000 000 by right- + // shifting 20 times (2 ^ 20 = 1048576). + + w0hp = 105; + w0lp = (sound_sample) (pass_freq * (2.0 * pi * 1.048576)); + if (w0lp > 104858) + w0lp = 104858; +} + + +// ---------------------------------------------------------------------------- +// Set chip model. +// ---------------------------------------------------------------------------- +/* +void ExternalFilter::set_chip_model(chip_model model) +{ + if (model == MOS6581) { + // Maximum mixer DC output level; to be removed if the external + // filter is turned off: ((wave DC + voice DC)*voices + mixer DC)*volume + // See voice.cc and filter.cc for an explanation of the values. + mixer_DC = ((((0x800 - 0x380) + 0x800)*0xff*3 - 0xfff*0xff/18) >> 7)*0x0f; + } + else { + // No DC offsets in the MOS8580. + mixer_DC = 0; + } +} +*/ + +// ---------------------------------------------------------------------------- +// SID reset. +// ---------------------------------------------------------------------------- +void ExternalFilter::reset() +{ + // State of filter. + Vlp = 0; + Vhp = 0; + Vo = 0; +} + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/extfilt.h b/MCUME_pico/pico64/reSID/extfilt.h new file mode 100755 index 0000000..7b67e52 --- /dev/null +++ b/MCUME_pico/pico64/reSID/extfilt.h @@ -0,0 +1,169 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// --------------------------------------------------------------------------- + +#ifndef __EXTFILT_H__ +#define __EXTFILT_H__ + +#include "siddefs.h" + +RESID_NAMESPACE_START + +// ---------------------------------------------------------------------------- +// The audio output stage in a Commodore 64 consists of two STC networks, +// a low-pass filter with 3-dB frequency 16kHz followed by a high-pass +// filter with 3-dB frequency 16Hz (the latter provided an audio equipment +// input impedance of 1kOhm). +// The STC networks are connected with a BJT supposedly meant to act as +// a unity gain buffer, which is not really how it works. A more elaborate +// model would include the BJT, however DC circuit analysis yields BJT +// base-emitter and emitter-base impedances sufficiently low to produce +// additional low-pass and high-pass 3dB-frequencies in the order of hundreds +// of kHz. This calls for a sampling frequency of several MHz, which is far +// too high for practical use. +// ---------------------------------------------------------------------------- +class ExternalFilter +{ +public: + ExternalFilter(); + + void enable_filter(bool enable); + void set_sampling_parameter(float pass_freq); + //void set_chip_model(chip_model model); + + RESID_INLINE void clock(sound_sample Vi); + RESID_INLINE void clock(cycle_count delta_t, sound_sample Vi); + void reset(); + + // Audio output (20 bits). + RESID_INLINE sound_sample output(); + +protected: + // Filter enabled. + bool enabled; + + // Maximum mixer DC offset. + sound_sample mixer_DC; + + // State of filters. + sound_sample Vlp; // lowpass + sound_sample Vhp; // highpass + sound_sample Vo; + + // Cutoff frequencies. + sound_sample w0lp; + sound_sample w0hp; + +friend class SID; +}; + + +// ---------------------------------------------------------------------------- +// Inline functions. +// The following functions are defined inline because they are called every +// time a sample is calculated. +// ---------------------------------------------------------------------------- + +#if RESID_INLINING || defined(__EXTFILT_CC__) + +// ---------------------------------------------------------------------------- +// SID clocking - 1 cycle. +// ---------------------------------------------------------------------------- +RESID_INLINE +void ExternalFilter::clock(sound_sample Vi) +{ + // This is handy for testing. + if (!enabled) { + // Remove maximum DC level since there is no filter to do it. + Vlp = Vhp = 0; + Vo = Vi - mixer_DC; + return; + } + + // delta_t is converted to seconds given a 1MHz clock by dividing + // with 1 000 000. + + // Calculate filter outputs. + // Vo = Vlp - Vhp; + // Vlp = Vlp + w0lp*(Vi - Vlp)*delta_t; + // Vhp = Vhp + w0hp*(Vlp - Vhp)*delta_t; + + sound_sample dVlp = (w0lp >> 8)*(Vi - Vlp) >> 12; + sound_sample dVhp = w0hp*(Vlp - Vhp) >> 20; + Vo = Vlp - Vhp; + Vlp += dVlp; + Vhp += dVhp; +} + +// ---------------------------------------------------------------------------- +// SID clocking - delta_t cycles. +// ---------------------------------------------------------------------------- +RESID_INLINE +void ExternalFilter::clock(cycle_count delta_t, + sound_sample Vi) +{ + // This is handy for testing. + if (!enabled) { + // Remove maximum DC level since there is no filter to do it. + Vlp = Vhp = 0; + Vo = Vi - mixer_DC; + return; + } + + // Maximum delta cycles for the external filter to work satisfactorily + // is approximately 8. + cycle_count delta_t_flt = 8; + + while (delta_t) { + if (delta_t < delta_t_flt) { + delta_t_flt = delta_t; + } + + // delta_t is converted to seconds given a 1MHz clock by dividing + // with 1 000 000. + + // Calculate filter outputs. + // Vo = Vlp - Vhp; + // Vlp = Vlp + w0lp*(Vi - Vlp)*delta_t; + // Vhp = Vhp + w0hp*(Vlp - Vhp)*delta_t; + + sound_sample dVlp = (w0lp*delta_t_flt >> 8)*(Vi - Vlp) >> 12; + sound_sample dVhp = w0hp*delta_t_flt*(Vlp - Vhp) >> 20; + Vo = Vlp - Vhp; + Vlp += dVlp; + Vhp += dVhp; + + delta_t -= delta_t_flt; + } +} + + +// ---------------------------------------------------------------------------- +// Audio output (19.5 bits). +// ---------------------------------------------------------------------------- +RESID_INLINE +sound_sample ExternalFilter::output() +{ + return Vo; +} + +#endif // RESID_INLINING || defined(__EXTFILT_CC__) + +RESID_NAMESPACE_STOP + +#endif // not __EXTFILT_H__ diff --git a/MCUME_pico/pico64/reSID/filter.cpp b/MCUME_pico/pico64/reSID/filter.cpp new file mode 100755 index 0000000..8240b11 --- /dev/null +++ b/MCUME_pico/pico64/reSID/filter.cpp @@ -0,0 +1,325 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 +// --------------------------------------------------------------------------- + +#define __FILTER_CC__ +#include "filter.h" + +RESID_NAMESPACE_START + +// Maximum cutoff frequency is specified as +// FCmax = 2.6e-5/C = 2.6e-5/2200e-12 = 11818. +// +// Measurements indicate a cutoff frequency range of approximately +// 220Hz - 18kHz on a MOS6581 fitted with 470pF capacitors. The function +// mapping FC to cutoff frequency has the shape of the tanh function, with +// a discontinuity at FCHI = 0x80. +// In contrast, the MOS8580 almost perfectly corresponds with the +// specification of a linear mapping from 30Hz to 12kHz. +// +// The mappings have been measured by feeding the SID with an external +// signal since the chip itself is incapable of generating waveforms of +// higher fundamental frequency than 4kHz. It is best to use the bandpass +// output at full resonance to pick out the cutoff frequency at any given +// FC setting. +// +// The mapping function is specified with spline interpolation points and +// the function values are retrieved via table lookup. +// +// NB! Cutoff frequency characteristics may vary, we have modeled two +// particular Commodore 64s. +/* +const fc_point Filter::f0_points_6581[] = +{ + // FC f FCHI FCLO + // ---------------------------- + { 0, 220 }, // 0x00 - repeated end point + { 0, 220 }, // 0x00 + { 128, 230 }, // 0x10 + { 256, 250 }, // 0x20 + { 384, 300 }, // 0x30 + { 512, 420 }, // 0x40 + { 640, 780 }, // 0x50 + { 768, 1600 }, // 0x60 + { 832, 2300 }, // 0x68 + { 896, 3200 }, // 0x70 + { 960, 4300 }, // 0x78 + { 992, 5000 }, // 0x7c + { 1008, 5400 }, // 0x7e + { 1016, 5700 }, // 0x7f + { 1023, 6000 }, // 0x7f 0x07 + { 1023, 6000 }, // 0x7f 0x07 - discontinuity + { 1024, 4600 }, // 0x80 - + { 1024, 4600 }, // 0x80 + { 1032, 4800 }, // 0x81 + { 1056, 5300 }, // 0x84 + { 1088, 6000 }, // 0x88 + { 1120, 6600 }, // 0x8c + { 1152, 7200 }, // 0x90 + { 1280, 9500 }, // 0xa0 + { 1408, 12000 }, // 0xb0 + { 1536, 14500 }, // 0xc0 + { 1664, 16000 }, // 0xd0 + { 1792, 17100 }, // 0xe0 + { 1920, 17700 }, // 0xf0 + { 2047, 18000 }, // 0xff 0x07 + { 2047, 18000 } // 0xff 0x07 - repeated end point +}; +*/ +/* +const fc_point Filter::f0_points_8580[] = +{ + // FC f FCHI FCLO + // ---------------------------- + { 0, 0 }, // 0x00 - repeated end point + { 0, 0 }, // 0x00 + { 128, 800 }, // 0x10 + { 256, 1600 }, // 0x20 + { 384, 2500 }, // 0x30 + { 512, 3300 }, // 0x40 + { 640, 4100 }, // 0x50 + { 768, 4800 }, // 0x60 + { 896, 5600 }, // 0x70 + { 1024, 6500 }, // 0x80 + { 1152, 7500 }, // 0x90 + { 1280, 8400 }, // 0xa0 + { 1408, 9200 }, // 0xb0 + { 1536, 9800 }, // 0xc0 + { 1664, 10500 }, // 0xd0 + { 1792, 11000 }, // 0xe0 + { 1920, 11700 }, // 0xf0 + { 2047, 12500 }, // 0xff 0x07 + { 2047, 12500 } // 0xff 0x07 - repeated end point +}; +*/ + +// ---------------------------------------------------------------------------- +// Constructor. +// ---------------------------------------------------------------------------- +Filter::Filter() +{ + fc = 0; + + res = 0; + + filt = 0; + + voice3off = 0; + + hp_bp_lp = 0; + + vol = 0; + + // State of filter. + Vhp = 0; + Vbp = 0; + Vlp = 0; + Vnf = 0; + + enable_filter(true); +/* + // Create mappings from FC to cutoff frequency. + interpolate(f0_points_6581, f0_points_6581 + + sizeof(f0_points_6581)/sizeof(*f0_points_6581) - 1, + PointPlotter(f0_6581), 1.0); + + interpolate(f0_points_8580, f0_points_8580 + + sizeof(f0_points_8580)/sizeof(*f0_points_8580) - 1, + PointPlotter(f0_8580), 1.0); +*/ +// set_chip_model(MOS6581); +{//instead: + mixer_DC = -0xfff*0xff/18 >> 7; + + //f0 = f0_6581; + // f0_points = f0_points_6581; + // f0_count = sizeof(f0_points_6581)/sizeof(*f0_points_6581); + set_w0(); + set_Q(); +} + +} + + +// ---------------------------------------------------------------------------- +// Enable filter. +// ---------------------------------------------------------------------------- +void Filter::enable_filter(bool enable) +{ + enabled = enable; +} + + +// ---------------------------------------------------------------------------- +// Set chip model. +// ---------------------------------------------------------------------------- +/* +void Filter::set_chip_model(chip_model model) +{ + if (model == MOS6581) { + // The mixer has a small input DC offset. This is found as follows: + // + // The "zero" output level of the mixer measured on the SID audio + // output pin is 5.50V at zero volume, and 5.44 at full + // volume. This yields a DC offset of (5.44V - 5.50V) = -0.06V. + // + // The DC offset is thus -0.06V/1.05V ~ -1/18 of the dynamic range + // of one voice. See voice.cc for measurement of the dynamic + // range. + + mixer_DC = -0xfff*0xff/18 >> 7; + + f0 = f0_6581; + f0_points = f0_points_6581; + f0_count = sizeof(f0_points_6581)/sizeof(*f0_points_6581); + } + else { + // No DC offsets in the MOS8580. + mixer_DC = 0; + + f0 = f0_8580; + f0_points = f0_points_8580; + f0_count = sizeof(f0_points_8580)/sizeof(*f0_points_8580); + } + + set_w0(); + set_Q(); +} +*/ + + +// ---------------------------------------------------------------------------- +// SID reset. +// ---------------------------------------------------------------------------- +void Filter::reset() +{ + fc = 0; + + res = 0; + + filt = 0; + + voice3off = 0; + + hp_bp_lp = 0; + + vol = 0; + + // State of filter. + Vhp = 0; + Vbp = 0; + Vlp = 0; + Vnf = 0; + + set_w0(); + set_Q(); +} + + +// ---------------------------------------------------------------------------- +// Register functions. +// ---------------------------------------------------------------------------- +void Filter::writeFC_LO(reg8 fc_lo) +{ + fc = (fc & 0x7f8) | (fc_lo & 0x007); + set_w0(); +} + +void Filter::writeFC_HI(reg8 fc_hi) +{ + fc = (((unsigned int)fc_hi << 3) & 0x7f8) | (fc & 0x007); + set_w0(); +} + +void Filter::writeRES_FILT(reg8 res_filt) +{ + res = (res_filt >> 4) & 0x0f; + set_Q(); + + filt = res_filt & 0x0f; +} + +void Filter::writeMODE_VOL(reg8 mode_vol) +{ + voice3off = mode_vol & 0x80; + + hp_bp_lp = (mode_vol >> 4) & 0x07; + + vol = mode_vol & 0x0f; +} + +// Set filter cutoff frequency. +void Filter::set_w0() +{ + const float pi = 3.1415926535897932385; + + // Multiply with 1.048576 to facilitate division by 1 000 000 by right- + // shifting 20 times (2 ^ 20 = 1048576). + w0 = static_cast(2.0*pi*f0[fc]*1.048576); + + // Limit f0 to 16kHz to keep 1 cycle filter stable. + const sound_sample w0_max_1 = static_cast(2.0*pi*16000.0*1.048576); + w0_ceil_1 = w0 <= w0_max_1 ? w0 : w0_max_1; + + // Limit f0 to 4kHz to keep delta_t cycle filter stable. + const sound_sample w0_max_dt = static_cast(2.0*pi*4000.0*1.048576); + w0_ceil_dt = w0 <= w0_max_dt ? w0 : w0_max_dt; +} + +// Set filter resonance. +void Filter::set_Q() +{ + // Q is controlled linearly by res. Q has approximate range [0.707, 1.7]. + // As resonance is increased, the filter must be clocked more often to keep + // stable. + + // The coefficient 1024 is dispensed of later by right-shifting 10 times + // (2 ^ 10 = 1024). + _1024_div_Q = static_cast(1024.0/(0.707 + 1.0*res/15.0)); +} + +// ---------------------------------------------------------------------------- +// Spline functions. +// ---------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- +// Return the array of spline interpolation points used to map the FC register +// to filter cutoff frequency. +// ---------------------------------------------------------------------------- +/* +void Filter::fc_default(const fc_point*& points, int& count) +{ + points = f0_points; + count = f0_count; +} +*/ +// ---------------------------------------------------------------------------- +// Given an array of interpolation points p with n points, the following +// statement will specify a new FC mapping: +// interpolate(p, p + n - 1, filter.fc_plotter(), 1.0); +// Note that the x range of the interpolation points *must* be [0, 2047], +// and that additional end points *must* be present since the end points +// are not interpolated. +// ---------------------------------------------------------------------------- +/* +PointPlotter Filter::fc_plotter() +{ + return PointPlotter(f0); +} +*/ +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/filter.h b/MCUME_pico/pico64/reSID/filter.h new file mode 100755 index 0000000..24cc5ce --- /dev/null +++ b/MCUME_pico/pico64/reSID/filter.h @@ -0,0 +1,539 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// --------------------------------------------------------------------------- + +#ifndef __FILTER_H__ +#define __FILTER_H__ + +#include "siddefs.h" +//#include "spline.h" +#include "filter6581.h" + +RESID_NAMESPACE_START + +// ---------------------------------------------------------------------------- +// The SID filter is modeled with a two-integrator-loop biquadratic filter, +// which has been confirmed by Bob Yannes to be the actual circuit used in +// the SID chip. +// +// Measurements show that excellent emulation of the SID filter is achieved, +// except when high resonance is combined with high sustain levels. +// In this case the SID op-amps are performing less than ideally and are +// causing some peculiar behavior of the SID filter. This however seems to +// have more effect on the overall amplitude than on the color of the sound. +// +// The theory for the filter circuit can be found in "Microelectric Circuits" +// by Adel S. Sedra and Kenneth C. Smith. +// The circuit is modeled based on the explanation found there except that +// an additional inverter is used in the feedback from the bandpass output, +// allowing the summer op-amp to operate in single-ended mode. This yields +// inverted filter outputs with levels independent of Q, which corresponds with +// the results obtained from a real SID. +// +// We have been able to model the summer and the two integrators of the circuit +// to form components of an IIR filter. +// Vhp is the output of the summer, Vbp is the output of the first integrator, +// and Vlp is the output of the second integrator in the filter circuit. +// +// According to Bob Yannes, the active stages of the SID filter are not really +// op-amps. Rather, simple NMOS inverters are used. By biasing an inverter +// into its region of quasi-linear operation using a feedback resistor from +// input to output, a MOS inverter can be made to act like an op-amp for +// small signals centered around the switching threshold. +// +// Qualified guesses at SID filter schematics are depicted below. +// +// SID filter +// ---------- +// +// ----------------------------------------------- +// | | +// | ---Rq-- | +// | | | | +// | --------------|--R-----[A>--|--R-----[A>--| +// | | | | +// vi -----R1-- | | | +// +// vhp vbp vlp +// +// +// vi - input voltage +// vhp - highpass output +// vbp - bandpass output +// vlp - lowpass output +// [A> - op-amp +// R1 - summer resistor +// Rq - resistor array controlling resonance (4 resistors) +// R - NMOS FET voltage controlled resistor controlling cutoff frequency +// Rs - shunt resitor +// C - capacitor +// +// +// +// SID integrator +// -------------- +// +// V+ +// +// | +// | +// -----| +// | | +// | ||-- +// -|| +// ---C--- ||-> +// | | | +// |---Rs-----------|---- vo +// | | +// | ||-- +// vi ---- -----|------------|| +// | ^ | ||-> +// |___| | | +// ----- | | +// | | | +// |---R2-- | +// | +// R1 V- +// | +// | +// +// Vw +// +// ---------------------------------------------------------------------------- +class Filter +{ +public: + Filter(); + + void enable_filter(bool enable); + // void set_chip_model(chip_model model); + + RESID_INLINE + void clock(sound_sample voice1, sound_sample voice2, sound_sample voice3, + sound_sample ext_in); + RESID_INLINE + void clock(cycle_count delta_t, + sound_sample voice1, sound_sample voice2, sound_sample voice3, + sound_sample ext_in); + void reset(); + + // Write registers. + void writeFC_LO(reg8); + void writeFC_HI(reg8); + void writeRES_FILT(reg8); + void writeMODE_VOL(reg8); + + // SID audio output (16 bits). + sound_sample output(); + + // Spline functions. + // void fc_default(const fc_point*& points, int& count); + // PointPlotter fc_plotter(); + +protected: + void set_w0(); + void set_Q(); + + // Filter enabled. + bool enabled; + + // Filter cutoff frequency. + reg12 fc; + + // Filter resonance. + reg8 res; + + // Selects which inputs to route through filter. + reg8 filt; + + // Switch voice 3 off. + reg8 voice3off; + + // Highpass, bandpass, and lowpass filter modes. + reg8 hp_bp_lp; + + // Output master volume. + reg4 vol; + + // Mixer DC offset. + sound_sample mixer_DC; + + // State of filter. + sound_sample Vhp; // highpass + sound_sample Vbp; // bandpass + sound_sample Vlp; // lowpass + sound_sample Vnf; // not filtered + + // Cutoff frequency, resonance. + sound_sample w0, w0_ceil_1, w0_ceil_dt; + sound_sample _1024_div_Q; + + // Cutoff frequency tables. + // FC is an 11 bit register. + //sound_sample f0_6581[2048]; + //sound_sample f0_8580[2048]; + //sound_sample* f0; + //const sound_sample* f0 = filter6581; + const short* f0 = filter6581; + //const static fc_point f0_points_6581[]; + + //const static fc_point f0_points_8580[]; + //const fc_point* f0_points; + //int f0_count; + +friend class SID; +}; + + +// ---------------------------------------------------------------------------- +// Inline functions. +// The following functions are defined inline because they are called every +// time a sample is calculated. +// ---------------------------------------------------------------------------- + +#if RESID_INLINING || defined(__FILTER_CC__) + +// ---------------------------------------------------------------------------- +// SID clocking - 1 cycle. +// ---------------------------------------------------------------------------- +RESID_INLINE +void Filter::clock(sound_sample voice1, + sound_sample voice2, + sound_sample voice3, + sound_sample ext_in) +{ + // Scale each voice down from 20 to 13 bits. + voice1 >>= 7; + voice2 >>= 7; + + // NB! Voice 3 is not silenced by voice3off if it is routed through + // the filter. + if (voice3off && !(filt & 0x04)) { + voice3 = 0; + } + else { + voice3 >>= 7; + } + + ext_in >>= 7; + + // This is handy for testing. + if (!enabled) { + Vnf = voice1 + voice2 + voice3 + ext_in; + Vhp = Vbp = Vlp = 0; + return; + } + + // Route voices into or around filter. + // The code below is expanded to a switch for faster execution. + // (filt1 ? Vi : Vnf) += voice1; + // (filt2 ? Vi : Vnf) += voice2; + // (filt3 ? Vi : Vnf) += voice3; + + sound_sample Vi; + + switch (filt) { + default: + case 0x0: + Vi = 0; + Vnf = voice1 + voice2 + voice3 + ext_in; + break; + case 0x1: + Vi = voice1; + Vnf = voice2 + voice3 + ext_in; + break; + case 0x2: + Vi = voice2; + Vnf = voice1 + voice3 + ext_in; + break; + case 0x3: + Vi = voice1 + voice2; + Vnf = voice3 + ext_in; + break; + case 0x4: + Vi = voice3; + Vnf = voice1 + voice2 + ext_in; + break; + case 0x5: + Vi = voice1 + voice3; + Vnf = voice2 + ext_in; + break; + case 0x6: + Vi = voice2 + voice3; + Vnf = voice1 + ext_in; + break; + case 0x7: + Vi = voice1 + voice2 + voice3; + Vnf = ext_in; + break; + case 0x8: + Vi = ext_in; + Vnf = voice1 + voice2 + voice3; + break; + case 0x9: + Vi = voice1 + ext_in; + Vnf = voice2 + voice3; + break; + case 0xa: + Vi = voice2 + ext_in; + Vnf = voice1 + voice3; + break; + case 0xb: + Vi = voice1 + voice2 + ext_in; + Vnf = voice3; + break; + case 0xc: + Vi = voice3 + ext_in; + Vnf = voice1 + voice2; + break; + case 0xd: + Vi = voice1 + voice3 + ext_in; + Vnf = voice2; + break; + case 0xe: + Vi = voice2 + voice3 + ext_in; + Vnf = voice1; + break; + case 0xf: + Vi = voice1 + voice2 + voice3 + ext_in; + Vnf = 0; + break; + } + + // delta_t = 1 is converted to seconds given a 1MHz clock by dividing + // with 1 000 000. + + // Calculate filter outputs. + // Vhp = Vbp/Q - Vlp - Vi; + // dVbp = -w0*Vhp*dt; + // dVlp = -w0*Vbp*dt; + + sound_sample dVbp = (w0_ceil_1*Vhp >> 20); + sound_sample dVlp = (w0_ceil_1*Vbp >> 20); + Vbp -= dVbp; + Vlp -= dVlp; + Vhp = (Vbp*_1024_div_Q >> 10) - Vlp - Vi; +} + +// ---------------------------------------------------------------------------- +// SID clocking - delta_t cycles. +// ---------------------------------------------------------------------------- +RESID_INLINE +void Filter::clock(cycle_count delta_t, + sound_sample voice1, + sound_sample voice2, + sound_sample voice3, + sound_sample ext_in) +{ + // Scale each voice down from 20 to 13 bits. + voice1 >>= 7; + voice2 >>= 7; + + // NB! Voice 3 is not silenced by voice3off if it is routed through + // the filter. + if (voice3off && !(filt & 0x04)) { + voice3 = 0; + } + else { + voice3 >>= 7; + } + + ext_in >>= 7; + + // Enable filter on/off. + // This is not really part of SID, but is useful for testing. + // On slow CPUs it may be necessary to bypass the filter to lower the CPU + // load. + if (!enabled) { + Vnf = voice1 + voice2 + voice3 + ext_in; + Vhp = Vbp = Vlp = 0; + return; + } + + // Route voices into or around filter. + // The code below is expanded to a switch for faster execution. + // (filt1 ? Vi : Vnf) += voice1; + // (filt2 ? Vi : Vnf) += voice2; + // (filt3 ? Vi : Vnf) += voice3; + + sound_sample Vi; + + switch (filt) { + default: + case 0x0: + Vi = 0; + Vnf = voice1 + voice2 + voice3 + ext_in; + break; + case 0x1: + Vi = voice1; + Vnf = voice2 + voice3 + ext_in; + break; + case 0x2: + Vi = voice2; + Vnf = voice1 + voice3 + ext_in; + break; + case 0x3: + Vi = voice1 + voice2; + Vnf = voice3 + ext_in; + break; + case 0x4: + Vi = voice3; + Vnf = voice1 + voice2 + ext_in; + break; + case 0x5: + Vi = voice1 + voice3; + Vnf = voice2 + ext_in; + break; + case 0x6: + Vi = voice2 + voice3; + Vnf = voice1 + ext_in; + break; + case 0x7: + Vi = voice1 + voice2 + voice3; + Vnf = ext_in; + break; + case 0x8: + Vi = ext_in; + Vnf = voice1 + voice2 + voice3; + break; + case 0x9: + Vi = voice1 + ext_in; + Vnf = voice2 + voice3; + break; + case 0xa: + Vi = voice2 + ext_in; + Vnf = voice1 + voice3; + break; + case 0xb: + Vi = voice1 + voice2 + ext_in; + Vnf = voice3; + break; + case 0xc: + Vi = voice3 + ext_in; + Vnf = voice1 + voice2; + break; + case 0xd: + Vi = voice1 + voice3 + ext_in; + Vnf = voice2; + break; + case 0xe: + Vi = voice2 + voice3 + ext_in; + Vnf = voice1; + break; + case 0xf: + Vi = voice1 + voice2 + voice3 + ext_in; + Vnf = 0; + break; + } + + // Maximum delta cycles for the filter to work satisfactorily under current + // cutoff frequency and resonance constraints is approximately 8. + cycle_count delta_t_flt = 8; + + while (delta_t) { + if (delta_t < delta_t_flt) { + delta_t_flt = delta_t; + } + + // delta_t is converted to seconds given a 1MHz clock by dividing + // with 1 000 000. This is done in two operations to avoid integer + // multiplication overflow. + + // Calculate filter outputs. + // Vhp = Vbp/Q - Vlp - Vi; + // dVbp = -w0*Vhp*dt; + // dVlp = -w0*Vbp*dt; + sound_sample w0_delta_t = w0_ceil_dt * delta_t_flt >> 6; + + sound_sample dVbp = (w0_delta_t*Vhp >> 14); + sound_sample dVlp = (w0_delta_t*Vbp >> 14); + Vbp -= dVbp; + Vlp -= dVlp; + Vhp = (Vbp*_1024_div_Q >> 10) - Vlp - Vi; + + delta_t -= delta_t_flt; + } +} + + +// ---------------------------------------------------------------------------- +// SID audio output (20 bits). +// ---------------------------------------------------------------------------- +RESID_INLINE +sound_sample Filter::output() +{ + // This is handy for testing. + if (!enabled) { + return (Vnf + mixer_DC)*static_cast(vol); + } + + // Mix highpass, bandpass, and lowpass outputs. The sum is not + // weighted, this can be confirmed by sampling sound output for + // e.g. bandpass, lowpass, and bandpass+lowpass from a SID chip. + + // The code below is expanded to a switch for faster execution. + // if (hp) Vf += Vhp; + // if (bp) Vf += Vbp; + // if (lp) Vf += Vlp; + + sound_sample Vf; + + switch (hp_bp_lp) { + default: + case 0x0: + Vf = 0; + break; + case 0x1: + Vf = Vlp; + break; + case 0x2: + Vf = Vbp; + break; + case 0x3: + Vf = Vlp + Vbp; + break; + case 0x4: + Vf = Vhp; + break; + case 0x5: + Vf = Vlp + Vhp; + break; + case 0x6: + Vf = Vbp + Vhp; + break; + case 0x7: + Vf = Vlp + Vbp + Vhp; + break; + } + + // Sum non-filtered and filtered output. + // Multiply the sum with volume. + return (Vnf + Vf + mixer_DC)*static_cast(vol); +} + +#endif // RESID_INLINING || defined(__FILTER_CC__) + +RESID_NAMESPACE_STOP + +#endif // not __FILTER_H__ diff --git a/MCUME_pico/pico64/reSID/filter6581.h b/MCUME_pico/pico64/reSID/filter6581.h new file mode 100755 index 0000000..2f7f796 --- /dev/null +++ b/MCUME_pico/pico64/reSID/filter6581.h @@ -0,0 +1,131 @@ + +const short filter6581[] = { +0x00DC, 0x00DC, 0x00DC, 0x00DC, 0x00DC, 0x00DC, 0x00DC, 0x00DC, 0x00DC, 0x00DC, 0x00DC, 0x00DC, 0x00DC, 0x00DC, 0x00DC, 0x00DC, +0x00DC, 0x00DD, 0x00DD, 0x00DD, 0x00DD, 0x00DD, 0x00DD, 0x00DD, 0x00DD, 0x00DD, 0x00DD, 0x00DD, 0x00DD, 0x00DD, 0x00DD, 0x00DD, +0x00DD, 0x00DD, 0x00DE, 0x00DE, 0x00DE, 0x00DE, 0x00DE, 0x00DE, 0x00DE, 0x00DE, 0x00DE, 0x00DE, 0x00DE, 0x00DE, 0x00DE, 0x00DE, +0x00DE, 0x00DF, 0x00DF, 0x00DF, 0x00DF, 0x00DF, 0x00DF, 0x00DF, 0x00DF, 0x00DF, 0x00DF, 0x00DF, 0x00DF, 0x00DF, 0x00DF, 0x00DF, +0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E1, 0x00E1, 0x00E1, +0x00E1, 0x00E1, 0x00E1, 0x00E1, 0x00E1, 0x00E1, 0x00E1, 0x00E1, 0x00E1, 0x00E2, 0x00E2, 0x00E2, 0x00E2, 0x00E2, 0x00E2, 0x00E2, +0x00E2, 0x00E2, 0x00E2, 0x00E2, 0x00E3, 0x00E3, 0x00E3, 0x00E3, 0x00E3, 0x00E3, 0x00E3, 0x00E3, 0x00E3, 0x00E3, 0x00E4, 0x00E4, +0x00E4, 0x00E4, 0x00E4, 0x00E4, 0x00E4, 0x00E4, 0x00E4, 0x00E4, 0x00E5, 0x00E5, 0x00E5, 0x00E5, 0x00E5, 0x00E5, 0x00E5, 0x00E5, +0x00E6, 0x00E6, 0x00E6, 0x00E6, 0x00E6, 0x00E6, 0x00E6, 0x00E6, 0x00E6, 0x00E7, 0x00E7, 0x00E7, 0x00E7, 0x00E7, 0x00E7, 0x00E7, +0x00E7, 0x00E7, 0x00E8, 0x00E8, 0x00E8, 0x00E8, 0x00E8, 0x00E8, 0x00E8, 0x00E8, 0x00E8, 0x00E9, 0x00E9, 0x00E9, 0x00E9, 0x00E9, +0x00E9, 0x00E9, 0x00E9, 0x00E9, 0x00EA, 0x00EA, 0x00EA, 0x00EA, 0x00EA, 0x00EA, 0x00EA, 0x00EA, 0x00EA, 0x00EB, 0x00EB, 0x00EB, +0x00EB, 0x00EB, 0x00EB, 0x00EB, 0x00EB, 0x00EC, 0x00EC, 0x00EC, 0x00EC, 0x00EC, 0x00EC, 0x00EC, 0x00EC, 0x00ED, 0x00ED, 0x00ED, +0x00ED, 0x00ED, 0x00ED, 0x00ED, 0x00EE, 0x00EE, 0x00EE, 0x00EE, 0x00EE, 0x00EE, 0x00EE, 0x00EF, 0x00EF, 0x00EF, 0x00EF, 0x00EF, +0x00EF, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x00F1, 0x00F1, 0x00F1, 0x00F1, 0x00F1, 0x00F1, 0x00F2, 0x00F2, 0x00F2, +0x00F2, 0x00F2, 0x00F3, 0x00F3, 0x00F3, 0x00F3, 0x00F3, 0x00F4, 0x00F4, 0x00F4, 0x00F4, 0x00F4, 0x00F5, 0x00F5, 0x00F5, 0x00F5, +0x00F5, 0x00F6, 0x00F6, 0x00F6, 0x00F6, 0x00F7, 0x00F7, 0x00F7, 0x00F7, 0x00F8, 0x00F8, 0x00F8, 0x00F8, 0x00F9, 0x00F9, 0x00F9, +0x00FA, 0x00FA, 0x00FA, 0x00FA, 0x00FB, 0x00FB, 0x00FB, 0x00FB, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FD, 0x00FD, 0x00FD, 0x00FE, +0x00FE, 0x00FE, 0x00FE, 0x00FF, 0x00FF, 0x00FF, 0x00FF, 0x0100, 0x0100, 0x0100, 0x0101, 0x0101, 0x0101, 0x0101, 0x0102, 0x0102, +0x0102, 0x0103, 0x0103, 0x0103, 0x0103, 0x0104, 0x0104, 0x0104, 0x0105, 0x0105, 0x0105, 0x0105, 0x0106, 0x0106, 0x0106, 0x0107, +0x0107, 0x0107, 0x0108, 0x0108, 0x0108, 0x0109, 0x0109, 0x0109, 0x010A, 0x010A, 0x010A, 0x010B, 0x010B, 0x010B, 0x010C, 0x010C, +0x010C, 0x010D, 0x010D, 0x010D, 0x010E, 0x010E, 0x010E, 0x010F, 0x010F, 0x0110, 0x0110, 0x0110, 0x0111, 0x0111, 0x0111, 0x0112, +0x0112, 0x0113, 0x0113, 0x0114, 0x0114, 0x0114, 0x0115, 0x0115, 0x0116, 0x0116, 0x0117, 0x0117, 0x0117, 0x0118, 0x0118, 0x0119, +0x0119, 0x011A, 0x011A, 0x011B, 0x011B, 0x011C, 0x011C, 0x011D, 0x011D, 0x011E, 0x011E, 0x011F, 0x011F, 0x0120, 0x0121, 0x0121, +0x0122, 0x0122, 0x0123, 0x0123, 0x0124, 0x0125, 0x0125, 0x0126, 0x0126, 0x0127, 0x0128, 0x0128, 0x0129, 0x012A, 0x012A, 0x012B, +0x012C, 0x012C, 0x012D, 0x012D, 0x012E, 0x012F, 0x012F, 0x0130, 0x0131, 0x0131, 0x0132, 0x0132, 0x0133, 0x0134, 0x0134, 0x0135, +0x0136, 0x0136, 0x0137, 0x0137, 0x0138, 0x0138, 0x0139, 0x013A, 0x013A, 0x013B, 0x013B, 0x013C, 0x013D, 0x013D, 0x013E, 0x013E, +0x013F, 0x0140, 0x0140, 0x0141, 0x0141, 0x0142, 0x0143, 0x0143, 0x0144, 0x0144, 0x0145, 0x0146, 0x0146, 0x0147, 0x0148, 0x0148, +0x0149, 0x0149, 0x014A, 0x014B, 0x014B, 0x014C, 0x014D, 0x014E, 0x014E, 0x014F, 0x0150, 0x0150, 0x0151, 0x0152, 0x0153, 0x0153, +0x0154, 0x0155, 0x0156, 0x0156, 0x0157, 0x0158, 0x0159, 0x015A, 0x015B, 0x015B, 0x015C, 0x015D, 0x015E, 0x015F, 0x0160, 0x0161, +0x0162, 0x0163, 0x0164, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, 0x016A, 0x016B, 0x016C, 0x016D, 0x016E, 0x016F, 0x0171, 0x0172, +0x0173, 0x0174, 0x0175, 0x0177, 0x0178, 0x0179, 0x017A, 0x017C, 0x017D, 0x017F, 0x0180, 0x0181, 0x0183, 0x0184, 0x0186, 0x0187, +0x0189, 0x018A, 0x018C, 0x018D, 0x018F, 0x0190, 0x0192, 0x0194, 0x0195, 0x0197, 0x0199, 0x019A, 0x019C, 0x019E, 0x01A0, 0x01A2, +0x01A4, 0x01A5, 0x01A7, 0x01A9, 0x01AB, 0x01AD, 0x01AF, 0x01B1, 0x01B3, 0x01B4, 0x01B6, 0x01B8, 0x01BA, 0x01BC, 0x01BE, 0x01C0, +0x01C2, 0x01C4, 0x01C6, 0x01C8, 0x01CA, 0x01CC, 0x01CE, 0x01D0, 0x01D2, 0x01D4, 0x01D6, 0x01D8, 0x01DA, 0x01DC, 0x01DE, 0x01E0, +0x01E2, 0x01E4, 0x01E6, 0x01E8, 0x01EA, 0x01EC, 0x01EF, 0x01F1, 0x01F3, 0x01F5, 0x01F7, 0x01F9, 0x01FC, 0x01FE, 0x0200, 0x0202, +0x0205, 0x0207, 0x0209, 0x020C, 0x020E, 0x0210, 0x0213, 0x0215, 0x0218, 0x021A, 0x021D, 0x021F, 0x0222, 0x0224, 0x0227, 0x0229, +0x022C, 0x022E, 0x0231, 0x0234, 0x0236, 0x0239, 0x023C, 0x023E, 0x0241, 0x0244, 0x0247, 0x024A, 0x024D, 0x024F, 0x0252, 0x0255, +0x0258, 0x025B, 0x025E, 0x0261, 0x0264, 0x0267, 0x026B, 0x026E, 0x0271, 0x0274, 0x0277, 0x027B, 0x027E, 0x0281, 0x0285, 0x0288, +0x028C, 0x028F, 0x0292, 0x0296, 0x029A, 0x029D, 0x02A1, 0x02A4, 0x02A8, 0x02AC, 0x02B0, 0x02B3, 0x02B7, 0x02BB, 0x02BF, 0x02C3, +0x02C7, 0x02CB, 0x02CF, 0x02D3, 0x02D7, 0x02DB, 0x02DF, 0x02E4, 0x02E8, 0x02EC, 0x02F1, 0x02F5, 0x02F9, 0x02FE, 0x0302, 0x0307, +0x030C, 0x0310, 0x0315, 0x0319, 0x031E, 0x0323, 0x0328, 0x032D, 0x0331, 0x0336, 0x033B, 0x0340, 0x0345, 0x034A, 0x034F, 0x0354, +0x0359, 0x035E, 0x0364, 0x0369, 0x036E, 0x0373, 0x0379, 0x037E, 0x0383, 0x0389, 0x038E, 0x0393, 0x0399, 0x039E, 0x03A4, 0x03AA, +0x03AF, 0x03B5, 0x03BA, 0x03C0, 0x03C6, 0x03CB, 0x03D1, 0x03D7, 0x03DD, 0x03E3, 0x03E9, 0x03EE, 0x03F4, 0x03FA, 0x0400, 0x0406, +0x040C, 0x0412, 0x0418, 0x041F, 0x0425, 0x042B, 0x0431, 0x0437, 0x043E, 0x0444, 0x044A, 0x0451, 0x0457, 0x045D, 0x0464, 0x046A, +0x0471, 0x0477, 0x047E, 0x0484, 0x048B, 0x0491, 0x0498, 0x049F, 0x04A5, 0x04AC, 0x04B3, 0x04B9, 0x04C0, 0x04C7, 0x04CE, 0x04D5, +0x04DB, 0x04E2, 0x04E9, 0x04F0, 0x04F7, 0x04FE, 0x0505, 0x050C, 0x0513, 0x051A, 0x0521, 0x0529, 0x0530, 0x0537, 0x053E, 0x0545, +0x054D, 0x0554, 0x055B, 0x0562, 0x056A, 0x0571, 0x0578, 0x0580, 0x0587, 0x058F, 0x0596, 0x059E, 0x05A5, 0x05AD, 0x05B4, 0x05BC, +0x05C3, 0x05CB, 0x05D3, 0x05DA, 0x05E2, 0x05EA, 0x05F1, 0x05F9, 0x0601, 0x0609, 0x0610, 0x0618, 0x0620, 0x0628, 0x0630, 0x0638, +0x0640, 0x0647, 0x0650, 0x0658, 0x0660, 0x0669, 0x0671, 0x067A, 0x0683, 0x068C, 0x0695, 0x069F, 0x06A8, 0x06B1, 0x06BB, 0x06C5, +0x06CF, 0x06D9, 0x06E3, 0x06ED, 0x06F7, 0x0701, 0x070C, 0x0716, 0x0721, 0x072C, 0x0736, 0x0741, 0x074C, 0x0757, 0x0762, 0x076E, +0x0779, 0x0784, 0x0790, 0x079B, 0x07A7, 0x07B2, 0x07BE, 0x07CA, 0x07D5, 0x07E1, 0x07ED, 0x07F9, 0x0805, 0x0811, 0x081D, 0x0829, +0x0835, 0x0842, 0x084E, 0x085A, 0x0866, 0x0873, 0x087F, 0x088B, 0x0898, 0x08A4, 0x08B1, 0x08BD, 0x08CA, 0x08D6, 0x08E3, 0x08EF, +0x08FC, 0x0908, 0x0915, 0x0921, 0x092E, 0x093B, 0x0947, 0x0954, 0x0961, 0x096E, 0x097B, 0x0988, 0x0995, 0x09A2, 0x09AF, 0x09BC, +0x09CA, 0x09D7, 0x09E4, 0x09F2, 0x09FF, 0x0A0D, 0x0A1A, 0x0A28, 0x0A36, 0x0A43, 0x0A51, 0x0A5F, 0x0A6D, 0x0A7B, 0x0A88, 0x0A96, +0x0AA5, 0x0AB3, 0x0AC1, 0x0ACF, 0x0ADD, 0x0AEB, 0x0AFA, 0x0B08, 0x0B17, 0x0B25, 0x0B34, 0x0B42, 0x0B51, 0x0B5F, 0x0B6E, 0x0B7D, +0x0B8C, 0x0B9B, 0x0BAA, 0x0BB9, 0x0BC8, 0x0BD7, 0x0BE6, 0x0BF5, 0x0C04, 0x0C13, 0x0C23, 0x0C32, 0x0C41, 0x0C51, 0x0C60, 0x0C70, +0x0C80, 0x0C8F, 0x0C9F, 0x0CAF, 0x0CBE, 0x0CCE, 0x0CDE, 0x0CEE, 0x0CFE, 0x0D0E, 0x0D1E, 0x0D2E, 0x0D3F, 0x0D4F, 0x0D5F, 0x0D6F, +0x0D80, 0x0D90, 0x0DA1, 0x0DB1, 0x0DC2, 0x0DD2, 0x0DE3, 0x0DF4, 0x0E05, 0x0E15, 0x0E26, 0x0E37, 0x0E48, 0x0E59, 0x0E6A, 0x0E7B, +0x0E8D, 0x0E9E, 0x0EAF, 0x0EC0, 0x0ED2, 0x0EE3, 0x0EF5, 0x0F06, 0x0F18, 0x0F29, 0x0F3B, 0x0F4D, 0x0F5E, 0x0F70, 0x0F82, 0x0F94, +0x0FA6, 0x0FB8, 0x0FCA, 0x0FDC, 0x0FEE, 0x1000, 0x1012, 0x1025, 0x1037, 0x1049, 0x105C, 0x106E, 0x1081, 0x1093, 0x10A6, 0x10B9, +0x10CC, 0x10DE, 0x10F2, 0x1105, 0x1119, 0x112D, 0x1141, 0x1156, 0x116B, 0x1180, 0x1195, 0x11AB, 0x11C0, 0x11D6, 0x11EC, 0x1203, +0x1219, 0x122F, 0x1246, 0x125D, 0x1273, 0x128A, 0x12A1, 0x12B8, 0x12CF, 0x12E6, 0x12FD, 0x1314, 0x132B, 0x1343, 0x135A, 0x1371, +0x1388, 0x139E, 0x13B5, 0x13CC, 0x13E4, 0x13FB, 0x1413, 0x142B, 0x1443, 0x145C, 0x1475, 0x148E, 0x14A9, 0x14C3, 0x14DF, 0x14FB, +0x1518, 0x1536, 0x1558, 0x157C, 0x15A3, 0x15CA, 0x15F3, 0x161B, 0x1644, 0x166C, 0x1696, 0x16C0, 0x16EB, 0x1717, 0x1743, 0x1770, +0x11F8, 0x1212, 0x122C, 0x1247, 0x1260, 0x1279, 0x1292, 0x12A9, 0x12C0, 0x12D5, 0x12EB, 0x1300, 0x1315, 0x132A, 0x133F, 0x1354, +0x1369, 0x137D, 0x1392, 0x13A6, 0x13BB, 0x13CF, 0x13E4, 0x13F8, 0x140D, 0x1421, 0x1436, 0x144A, 0x145F, 0x1474, 0x1489, 0x149E, +0x14B4, 0x14C9, 0x14DF, 0x14F4, 0x150A, 0x1520, 0x1536, 0x154D, 0x1563, 0x1579, 0x158F, 0x15A6, 0x15BC, 0x15D3, 0x15E9, 0x1600, +0x1616, 0x162C, 0x1643, 0x1659, 0x166F, 0x1685, 0x169B, 0x16B1, 0x16C7, 0x16DD, 0x16F2, 0x1707, 0x171D, 0x1732, 0x1746, 0x175B, +0x1770, 0x1784, 0x1798, 0x17AC, 0x17BF, 0x17D3, 0x17E6, 0x17F9, 0x180D, 0x1820, 0x1832, 0x1845, 0x1858, 0x186A, 0x187D, 0x188F, +0x18A2, 0x18B4, 0x18C6, 0x18D9, 0x18EB, 0x18FD, 0x190F, 0x1922, 0x1934, 0x1946, 0x1958, 0x196B, 0x197D, 0x1990, 0x19A2, 0x19B5, +0x19C8, 0x19DA, 0x19ED, 0x1A00, 0x1A13, 0x1A26, 0x1A39, 0x1A4B, 0x1A5E, 0x1A71, 0x1A84, 0x1A97, 0x1AAA, 0x1ABD, 0x1AD0, 0x1AE3, +0x1AF6, 0x1B09, 0x1B1C, 0x1B2F, 0x1B41, 0x1B54, 0x1B67, 0x1B7A, 0x1B8C, 0x1B9F, 0x1BB1, 0x1BC4, 0x1BD6, 0x1BE9, 0x1BFB, 0x1C0D, +0x1C20, 0x1C32, 0x1C44, 0x1C56, 0x1C68, 0x1C7A, 0x1C8C, 0x1C9E, 0x1CB0, 0x1CC2, 0x1CD4, 0x1CE6, 0x1CF8, 0x1D0A, 0x1D1C, 0x1D2E, +0x1D40, 0x1D51, 0x1D63, 0x1D75, 0x1D87, 0x1D99, 0x1DAB, 0x1DBD, 0x1DCE, 0x1DE0, 0x1DF2, 0x1E04, 0x1E16, 0x1E27, 0x1E39, 0x1E4B, +0x1E5D, 0x1E6E, 0x1E80, 0x1E92, 0x1EA4, 0x1EB5, 0x1EC7, 0x1ED9, 0x1EEA, 0x1EFC, 0x1F0E, 0x1F20, 0x1F31, 0x1F43, 0x1F55, 0x1F66, +0x1F78, 0x1F8A, 0x1F9C, 0x1FAD, 0x1FBF, 0x1FD1, 0x1FE2, 0x1FF4, 0x2006, 0x2017, 0x2029, 0x203B, 0x204D, 0x205E, 0x2070, 0x2082, +0x2094, 0x20A5, 0x20B7, 0x20C9, 0x20DA, 0x20EC, 0x20FE, 0x2110, 0x2122, 0x2133, 0x2145, 0x2157, 0x2169, 0x217B, 0x218C, 0x219E, +0x21B0, 0x21C2, 0x21D4, 0x21E6, 0x21F8, 0x220A, 0x221B, 0x222D, 0x223F, 0x2251, 0x2263, 0x2275, 0x2287, 0x2299, 0x22AB, 0x22BD, +0x22CF, 0x22E1, 0x22F4, 0x2306, 0x2318, 0x232A, 0x233C, 0x234E, 0x2360, 0x2373, 0x2385, 0x2397, 0x23A9, 0x23BC, 0x23CE, 0x23E0, +0x23F3, 0x2405, 0x2417, 0x242A, 0x243C, 0x244F, 0x2461, 0x2474, 0x2486, 0x2499, 0x24AB, 0x24BE, 0x24D1, 0x24E3, 0x24F6, 0x2509, +0x251C, 0x252E, 0x2541, 0x2554, 0x2567, 0x257A, 0x258C, 0x259F, 0x25B2, 0x25C5, 0x25D8, 0x25EB, 0x25FE, 0x2611, 0x2624, 0x2637, +0x264A, 0x265E, 0x2671, 0x2684, 0x2697, 0x26AA, 0x26BD, 0x26D1, 0x26E4, 0x26F7, 0x270A, 0x271E, 0x2731, 0x2744, 0x2758, 0x276B, +0x277E, 0x2792, 0x27A5, 0x27B9, 0x27CC, 0x27E0, 0x27F3, 0x2806, 0x281A, 0x282D, 0x2841, 0x2855, 0x2868, 0x287C, 0x288F, 0x28A3, +0x28B6, 0x28CA, 0x28DE, 0x28F1, 0x2905, 0x2918, 0x292C, 0x2940, 0x2953, 0x2967, 0x297B, 0x298E, 0x29A2, 0x29B6, 0x29CA, 0x29DD, +0x29F1, 0x2A05, 0x2A18, 0x2A2C, 0x2A40, 0x2A54, 0x2A67, 0x2A7B, 0x2A8F, 0x2AA3, 0x2AB7, 0x2ACA, 0x2ADE, 0x2AF2, 0x2B06, 0x2B19, +0x2B2D, 0x2B41, 0x2B55, 0x2B69, 0x2B7C, 0x2B90, 0x2BA4, 0x2BB8, 0x2BCC, 0x2BDF, 0x2BF3, 0x2C07, 0x2C1B, 0x2C2E, 0x2C42, 0x2C56, +0x2C6A, 0x2C7E, 0x2C91, 0x2CA5, 0x2CB9, 0x2CCD, 0x2CE0, 0x2CF4, 0x2D08, 0x2D1C, 0x2D2F, 0x2D43, 0x2D57, 0x2D6B, 0x2D7E, 0x2D92, +0x2DA6, 0x2DB9, 0x2DCD, 0x2DE1, 0x2DF4, 0x2E08, 0x2E1C, 0x2E2F, 0x2E43, 0x2E56, 0x2E6A, 0x2E7E, 0x2E91, 0x2EA5, 0x2EB8, 0x2ECC, +0x2EE0, 0x2EF3, 0x2F07, 0x2F1A, 0x2F2E, 0x2F42, 0x2F56, 0x2F6A, 0x2F7E, 0x2F92, 0x2FA6, 0x2FBA, 0x2FCE, 0x2FE2, 0x2FF6, 0x300B, +0x301F, 0x3033, 0x3048, 0x305C, 0x3070, 0x3085, 0x3099, 0x30AE, 0x30C3, 0x30D7, 0x30EC, 0x3100, 0x3115, 0x312A, 0x313E, 0x3153, +0x3168, 0x317D, 0x3191, 0x31A6, 0x31BB, 0x31D0, 0x31E5, 0x31F9, 0x320E, 0x3223, 0x3238, 0x324D, 0x3262, 0x3276, 0x328B, 0x32A0, +0x32B5, 0x32CA, 0x32DF, 0x32F3, 0x3308, 0x331D, 0x3332, 0x3346, 0x335B, 0x3370, 0x3384, 0x3399, 0x33AE, 0x33C2, 0x33D7, 0x33EB, +0x3400, 0x3414, 0x3429, 0x343D, 0x3452, 0x3466, 0x347A, 0x348F, 0x34A3, 0x34B7, 0x34CB, 0x34DF, 0x34F3, 0x3507, 0x351B, 0x352F, +0x3543, 0x3557, 0x356B, 0x357F, 0x3592, 0x35A6, 0x35B9, 0x35CD, 0x35E0, 0x35F3, 0x3607, 0x361A, 0x362D, 0x3640, 0x3653, 0x3666, +0x3679, 0x368C, 0x369E, 0x36B1, 0x36C3, 0x36D6, 0x36E8, 0x36FA, 0x370D, 0x371F, 0x3731, 0x3743, 0x3754, 0x3766, 0x3778, 0x3789, +0x379B, 0x37AC, 0x37BD, 0x37CF, 0x37E0, 0x37F1, 0x3801, 0x3812, 0x3823, 0x3833, 0x3844, 0x3854, 0x3864, 0x3874, 0x3884, 0x3894, +0x38A4, 0x38B3, 0x38C3, 0x38D2, 0x38E1, 0x38F0, 0x3900, 0x390F, 0x391D, 0x392C, 0x393B, 0x394A, 0x3958, 0x3967, 0x3975, 0x3983, +0x3992, 0x39A0, 0x39AE, 0x39BC, 0x39CA, 0x39D7, 0x39E5, 0x39F3, 0x3A00, 0x3A0E, 0x3A1B, 0x3A29, 0x3A36, 0x3A43, 0x3A50, 0x3A5D, +0x3A6A, 0x3A77, 0x3A84, 0x3A91, 0x3A9D, 0x3AAA, 0x3AB7, 0x3AC3, 0x3AD0, 0x3ADC, 0x3AE8, 0x3AF4, 0x3B01, 0x3B0D, 0x3B19, 0x3B25, +0x3B31, 0x3B3D, 0x3B49, 0x3B54, 0x3B60, 0x3B6C, 0x3B77, 0x3B83, 0x3B8E, 0x3B9A, 0x3BA5, 0x3BB1, 0x3BBC, 0x3BC7, 0x3BD3, 0x3BDE, +0x3BE9, 0x3BF4, 0x3BFF, 0x3C0A, 0x3C15, 0x3C20, 0x3C2B, 0x3C36, 0x3C41, 0x3C4C, 0x3C56, 0x3C61, 0x3C6C, 0x3C76, 0x3C81, 0x3C8C, +0x3C96, 0x3CA1, 0x3CAB, 0x3CB6, 0x3CC0, 0x3CCB, 0x3CD5, 0x3CDF, 0x3CEA, 0x3CF4, 0x3CFF, 0x3D09, 0x3D13, 0x3D1D, 0x3D28, 0x3D32, +0x3D3C, 0x3D46, 0x3D50, 0x3D5B, 0x3D65, 0x3D6F, 0x3D79, 0x3D83, 0x3D8D, 0x3D97, 0x3DA1, 0x3DAC, 0x3DB6, 0x3DC0, 0x3DCA, 0x3DD4, +0x3DDE, 0x3DE8, 0x3DF2, 0x3DFC, 0x3E06, 0x3E10, 0x3E1A, 0x3E24, 0x3E2F, 0x3E39, 0x3E43, 0x3E4D, 0x3E57, 0x3E61, 0x3E6B, 0x3E75, +0x3E80, 0x3E8A, 0x3E94, 0x3E9E, 0x3EA8, 0x3EB2, 0x3EBC, 0x3EC6, 0x3ED0, 0x3EDA, 0x3EE4, 0x3EEE, 0x3EF8, 0x3F02, 0x3F0C, 0x3F16, +0x3F20, 0x3F29, 0x3F33, 0x3F3D, 0x3F47, 0x3F51, 0x3F5A, 0x3F64, 0x3F6E, 0x3F77, 0x3F81, 0x3F8B, 0x3F94, 0x3F9E, 0x3FA7, 0x3FB1, +0x3FBA, 0x3FC4, 0x3FCD, 0x3FD7, 0x3FE0, 0x3FEA, 0x3FF3, 0x3FFC, 0x4006, 0x400F, 0x4018, 0x4021, 0x402B, 0x4034, 0x403D, 0x4046, +0x404F, 0x4058, 0x4061, 0x406A, 0x4074, 0x407D, 0x4085, 0x408E, 0x4097, 0x40A0, 0x40A9, 0x40B2, 0x40BB, 0x40C4, 0x40CC, 0x40D5, +0x40DE, 0x40E6, 0x40EF, 0x40F8, 0x4100, 0x4109, 0x4111, 0x411A, 0x4122, 0x412B, 0x4133, 0x413C, 0x4144, 0x414C, 0x4155, 0x415D, +0x4165, 0x416D, 0x4176, 0x417E, 0x4186, 0x418E, 0x4196, 0x419E, 0x41A6, 0x41AE, 0x41B6, 0x41BE, 0x41C6, 0x41CE, 0x41D5, 0x41DD, +0x41E5, 0x41ED, 0x41F4, 0x41FC, 0x4204, 0x420B, 0x4213, 0x421A, 0x4222, 0x4229, 0x4231, 0x4238, 0x4240, 0x4247, 0x424E, 0x4255, +0x425D, 0x4264, 0x426B, 0x4272, 0x4279, 0x4280, 0x4287, 0x428E, 0x4295, 0x429C, 0x42A3, 0x42AA, 0x42B1, 0x42B7, 0x42BE, 0x42C5, +0x42CC, 0x42D2, 0x42D9, 0x42DF, 0x42E6, 0x42EC, 0x42F3, 0x42F9, 0x42FF, 0x4306, 0x430C, 0x4312, 0x4318, 0x431E, 0x4324, 0x432A, +0x4330, 0x4336, 0x433C, 0x4342, 0x4348, 0x434E, 0x4354, 0x4359, 0x435F, 0x4365, 0x436A, 0x4370, 0x4376, 0x437B, 0x4381, 0x4386, +0x438C, 0x4391, 0x4396, 0x439C, 0x43A1, 0x43A6, 0x43AC, 0x43B1, 0x43B6, 0x43BB, 0x43C0, 0x43C5, 0x43CA, 0x43CF, 0x43D4, 0x43D9, +0x43DE, 0x43E3, 0x43E8, 0x43ED, 0x43F2, 0x43F6, 0x43FB, 0x4400, 0x4405, 0x4409, 0x440E, 0x4413, 0x4417, 0x441C, 0x4420, 0x4425, +0x4429, 0x442E, 0x4432, 0x4437, 0x443B, 0x443F, 0x4444, 0x4448, 0x444C, 0x4451, 0x4455, 0x4459, 0x445D, 0x4462, 0x4466, 0x446A, +0x446E, 0x4472, 0x4476, 0x447B, 0x447F, 0x4483, 0x4487, 0x448B, 0x448F, 0x4493, 0x4497, 0x449B, 0x449F, 0x44A2, 0x44A6, 0x44AA, +0x44AE, 0x44B2, 0x44B6, 0x44BA, 0x44BD, 0x44C1, 0x44C5, 0x44C9, 0x44CC, 0x44D0, 0x44D4, 0x44D8, 0x44DB, 0x44DF, 0x44E3, 0x44E6, +0x44EA, 0x44EE, 0x44F1, 0x44F5, 0x44F9, 0x44FC, 0x4500, 0x4503, 0x4507, 0x450B, 0x450E, 0x4512, 0x4515, 0x4519, 0x451C, 0x4520, +0x4524, 0x4527, 0x452B, 0x452E, 0x4531, 0x4535, 0x4538, 0x453C, 0x453F, 0x4542, 0x4545, 0x4549, 0x454C, 0x454F, 0x4552, 0x4555, +0x4559, 0x455C, 0x455F, 0x4562, 0x4565, 0x4568, 0x456B, 0x456E, 0x4571, 0x4574, 0x4577, 0x4579, 0x457C, 0x457F, 0x4582, 0x4585, +0x4588, 0x458A, 0x458D, 0x4590, 0x4592, 0x4595, 0x4598, 0x459A, 0x459D, 0x45A0, 0x45A2, 0x45A5, 0x45A7, 0x45AA, 0x45AC, 0x45AF, +0x45B1, 0x45B4, 0x45B6, 0x45B8, 0x45BB, 0x45BD, 0x45C0, 0x45C2, 0x45C4, 0x45C7, 0x45C9, 0x45CB, 0x45CD, 0x45D0, 0x45D2, 0x45D4, +0x45D6, 0x45D9, 0x45DB, 0x45DD, 0x45DF, 0x45E1, 0x45E3, 0x45E6, 0x45E8, 0x45EA, 0x45EC, 0x45EE, 0x45F0, 0x45F2, 0x45F4, 0x45F6, +0x45F8, 0x45FA, 0x45FC, 0x45FE, 0x4600, 0x4602, 0x4604, 0x4606, 0x4608, 0x460A, 0x460C, 0x460E, 0x4610, 0x4612, 0x4614, 0x4615, +0x4617, 0x4619, 0x461B, 0x461D, 0x461F, 0x4621, 0x4622, 0x4624, 0x4626, 0x4628, 0x462A, 0x462C, 0x462D, 0x462F, 0x4631, 0x4633, +0x4635, 0x4637, 0x4638, 0x463A, 0x463C, 0x463E, 0x463F, 0x4641, 0x4643, 0x4645, 0x4647, 0x4648, 0x464A, 0x464C, 0x464E, 0x464F, +}; diff --git a/MCUME_pico/pico64/reSID/pot.cpp b/MCUME_pico/pico64/reSID/pot.cpp new file mode 100755 index 0000000..25ad24e --- /dev/null +++ b/MCUME_pico/pico64/reSID/pot.cpp @@ -0,0 +1,30 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 "pot.h" + +RESID_NAMESPACE_START + +reg8 Potentiometer::readPOT() +{ + // NB! Not modeled. + return 0xff; +} + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/pot.h b/MCUME_pico/pico64/reSID/pot.h new file mode 100755 index 0000000..5bed353 --- /dev/null +++ b/MCUME_pico/pico64/reSID/pot.h @@ -0,0 +1,35 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// --------------------------------------------------------------------------- + +#ifndef __POT_H__ +#define __POT_H__ + +#include "siddefs.h" + +RESID_NAMESPACE_START + +class Potentiometer +{ +public: + reg8 readPOT(); +}; + +RESID_NAMESPACE_STOP + +#endif diff --git a/MCUME_pico/pico64/reSID/sid.cpp b/MCUME_pico/pico64/reSID/sid.cpp new file mode 100755 index 0000000..de73cce --- /dev/null +++ b/MCUME_pico/pico64/reSID/sid.cpp @@ -0,0 +1,771 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 "sid.h" +#include + +RESID_NAMESPACE_START + +// Resampling constants. +// The error in interpolated lookup is bounded by 1.234/L^2, +// while the error in non-interpolated lookup is bounded by +// 0.7854/L + 0.4113/L^2, see +// http://www-ccrma.stanford.edu/~jos/resample/Choice_Table_Size.html +// For a resolution of 16 bits this yields L >= 285 and L >= 51473, +// respectively. +const int SID::FIR_N = 125; +const int SID::FIR_RES_INTERPOLATE = 285; +const int SID::FIR_RES_FAST = 51473; +const int SID::FIR_SHIFT = 15; +const int SID::RINGSIZE = 16384; + +// Fixpoint constants (16.16 bits). +const int SID::FIXP_SHIFT = 16; +const int SID::FIXP_MASK = 0xffff; + +// ---------------------------------------------------------------------------- +// Constructor. +// ---------------------------------------------------------------------------- +SID::SID() +{ + + voice[0].set_sync_source(&voice[2]); + voice[1].set_sync_source(&voice[0]); + voice[2].set_sync_source(&voice[1]); + + set_sampling_parameters(985248, SAMPLE_FAST, 22050); + + bus_value = 0; + bus_value_ttl = 0; + + ext_in = 0; + +} +/* +void SID::printFilter(void){ + Serial.print(filter.f0_count); + for (int i=0; i< 2048; i++) { + if (i % 16==0) Serial.println(); + Serial.printf("0x%04X, ",filter.f0_6581[i]); + } +} +*/ +// ---------------------------------------------------------------------------- +// Destructor. +// ---------------------------------------------------------------------------- +SID::~SID() +{ +} + + +// ---------------------------------------------------------------------------- +// Set chip model. +// ---------------------------------------------------------------------------- +/* +void SID::set_chip_model(chip_model model) +{ + voice[0].set_chip_model(model); + voice[1].set_chip_model(model); + voice[2].set_chip_model(model); + + filter.set_chip_model(model); + extfilt.set_chip_model(model); +} +*/ + +// ---------------------------------------------------------------------------- +// SID reset. +// ---------------------------------------------------------------------------- +void SID::reset() +{ + + voice[0].reset(); + voice[1].reset(); + voice[2].reset(); + + filter.reset(); + extfilt.reset(); + + bus_value = 0; + bus_value_ttl = 0; +} + + +// ---------------------------------------------------------------------------- +// Write 16-bit sample to audio input. +// NB! The caller is responsible for keeping the value within 16 bits. +// Note that to mix in an external audio signal, the signal should be +// resampled to 1MHz first to avoid sampling noise. +// ---------------------------------------------------------------------------- +void SID::input(int sample) +{ + // Voice outputs are 20 bits. Scale up to match three voices in order + // to facilitate simulation of the MOS8580 "digi boost" hardware hack. + ext_in = (sample << 4)*3; +} + +// ---------------------------------------------------------------------------- +// Read sample from audio output. +// ---------------------------------------------------------------------------- +int SID::output() +{ + const int range = 1 << 16; + const int half = range >> 1; + int sample = extfilt.output()/((4095*255 >> 7)*3*15*2/range); + + //asm ("ssat %0, #16, %1" : "=r" (sample) : "r" (sample)); + + if (sample >= half) { + return half - 1; + } + if (sample < -half) { + return -half; + } + + return sample; +} + + +// ---------------------------------------------------------------------------- +// Read registers. +// +// Reading a write only register returns the last byte written to any SID +// register. The individual bits in this value start to fade down towards +// zero after a few cycles. All bits reach zero within approximately +// $2000 - $4000 cycles. +// It has been claimed that this fading happens in an orderly fashion, however +// sampling of write only registers reveals that this is not the case. +// NB! This is not correctly modeled. +// The actual use of write only registers has largely been made in the belief +// that all SID registers are readable. To support this belief the read +// would have to be done immediately after a write to the same register +// (remember that an intermediate write to another register would yield that +// value instead). With this in mind we return the last value written to +// any SID register for $2000 cycles without modeling the bit fading. +// ---------------------------------------------------------------------------- +reg8 SID::read(reg8 offset) +{ + switch (offset) { + case 0x19: + return potx.readPOT(); + case 0x1a: + return poty.readPOT(); + case 0x1b: + return voice[2].wave.readOSC(); + case 0x1c: + return voice[2].envelope.readENV(); + default: + return bus_value; + } +} + + +// ---------------------------------------------------------------------------- +// Write registers. +// ---------------------------------------------------------------------------- +void SID::write(reg8 offset, reg8 value) +{ + bus_value = value; + bus_value_ttl = 0x2000; + + switch (offset) { + case 0x00: + voice[0].wave.writeFREQ_LO(value); + break; + case 0x01: + voice[0].wave.writeFREQ_HI(value); + break; + case 0x02: + voice[0].wave.writePW_LO(value); + break; + case 0x03: + voice[0].wave.writePW_HI(value); + break; + case 0x04: + voice[0].writeCONTROL_REG(value); + break; + case 0x05: + voice[0].envelope.writeATTACK_DECAY(value); + break; + case 0x06: + voice[0].envelope.writeSUSTAIN_RELEASE(value); + break; + case 0x07: + voice[1].wave.writeFREQ_LO(value); + break; + case 0x08: + voice[1].wave.writeFREQ_HI(value); + break; + case 0x09: + voice[1].wave.writePW_LO(value); + break; + case 0x0a: + voice[1].wave.writePW_HI(value); + break; + case 0x0b: + voice[1].writeCONTROL_REG(value); + break; + case 0x0c: + voice[1].envelope.writeATTACK_DECAY(value); + break; + case 0x0d: + voice[1].envelope.writeSUSTAIN_RELEASE(value); + break; + case 0x0e: + voice[2].wave.writeFREQ_LO(value); + break; + case 0x0f: + voice[2].wave.writeFREQ_HI(value); + break; + case 0x10: + voice[2].wave.writePW_LO(value); + break; + case 0x11: + voice[2].wave.writePW_HI(value); + break; + case 0x12: + voice[2].writeCONTROL_REG(value); + break; + case 0x13: + voice[2].envelope.writeATTACK_DECAY(value); + break; + case 0x14: + voice[2].envelope.writeSUSTAIN_RELEASE(value); + break; + case 0x15: + filter.writeFC_LO(value); + break; + case 0x16: + filter.writeFC_HI(value); + break; + case 0x17: + filter.writeRES_FILT(value); + break; + case 0x18: + filter.writeMODE_VOL(value); + break; + default: + break; + } +} + + +// ---------------------------------------------------------------------------- +// SID voice muting. +// ---------------------------------------------------------------------------- +void SID::mute(reg8 channel, bool enable) +{ + // Only have 3 voices! + if (channel >= 3) + return; + + voice[channel].mute (enable); +} + + +// ---------------------------------------------------------------------------- +// Constructor. +// ---------------------------------------------------------------------------- +SID::State::State() +{ + int i; + + for (i = 0; i < 0x20; i++) { + sid_register[i] = 0; + } + + bus_value = 0; + bus_value_ttl = 0; + + for (i = 0; i < 3; i++) { + accumulator[i] = 0; + shift_register[i] = 0x7ffff8; + rate_counter[i] = 0; + rate_counter_period[i] = 9; + exponential_counter[i] = 0; + exponential_counter_period[i] = 1; + envelope_counter[i] = 0; + envelope_state[i] = EnvelopeGenerator::RELEASE; + hold_zero[i] = true; + } +} + + +// ---------------------------------------------------------------------------- +// Read state. +// ---------------------------------------------------------------------------- +SID::State SID::read_state() +{ + State state; + int i, j; + + for (i = 0, j = 0; i < 3; i++, j += 7) { + WaveformGenerator& wave = voice[i].wave; + EnvelopeGenerator& envelope = voice[i].envelope; + state.sid_register[j + 0] = wave.freq & 0xff; + state.sid_register[j + 1] = wave.freq >> 8; + state.sid_register[j + 2] = wave.pw & 0xff; + state.sid_register[j + 3] = wave.pw >> 8; + state.sid_register[j + 4] = + (wave.waveform << 4) + | (wave.test ? 0x08 : 0) + | (wave.ring_mod ? 0x04 : 0) + | (wave.sync ? 0x02 : 0) + | (envelope.gate ? 0x01 : 0); + state.sid_register[j + 5] = (envelope.attack << 4) | envelope.decay; + state.sid_register[j + 6] = (envelope.sustain << 4) | envelope.release; + } + + state.sid_register[j++] = filter.fc & 0x007; + state.sid_register[j++] = filter.fc >> 3; + state.sid_register[j++] = (filter.res << 4) | filter.filt; + state.sid_register[j++] = + (filter.voice3off ? 0x80 : 0) + | (filter.hp_bp_lp << 4) + | filter.vol; + + // These registers are superfluous, but included for completeness. + for (; j < 0x1d; j++) { + state.sid_register[j] = read(j); + } + for (; j < 0x20; j++) { + state.sid_register[j] = 0; + } + + state.bus_value = bus_value; + state.bus_value_ttl = bus_value_ttl; + + for (i = 0; i < 3; i++) { + state.accumulator[i] = voice[i].wave.accumulator; + state.shift_register[i] = voice[i].wave.shift_register; + state.rate_counter[i] = voice[i].envelope.rate_counter; + state.rate_counter_period[i] = voice[i].envelope.rate_period; + state.exponential_counter[i] = voice[i].envelope.exponential_counter; + state.exponential_counter_period[i] = voice[i].envelope.exponential_counter_period; + state.envelope_counter[i] = voice[i].envelope.envelope_counter; + state.envelope_state[i] = voice[i].envelope.state; + state.hold_zero[i] = voice[i].envelope.hold_zero; + } + + return state; +} + + +// ---------------------------------------------------------------------------- +// Write state. +// ---------------------------------------------------------------------------- +void SID::write_state(const State& state) +{ + int i; + + for (i = 0; i <= 0x18; i++) { + write(i, state.sid_register[i]); + } + + bus_value = state.bus_value; + bus_value_ttl = state.bus_value_ttl; + + for (i = 0; i < 3; i++) { + voice[i].wave.accumulator = state.accumulator[i]; + voice[i].wave.shift_register = state.shift_register[i]; + voice[i].envelope.rate_counter = state.rate_counter[i]; + voice[i].envelope.rate_period = state.rate_counter_period[i]; + voice[i].envelope.exponential_counter = state.exponential_counter[i]; + voice[i].envelope.exponential_counter_period = state.exponential_counter_period[i]; + voice[i].envelope.envelope_counter = state.envelope_counter[i]; + voice[i].envelope.state = state.envelope_state[i]; + voice[i].envelope.hold_zero = state.hold_zero[i]; + } +} + + +// ---------------------------------------------------------------------------- +// Enable filter. +// ---------------------------------------------------------------------------- +void SID::enable_filter(bool enable) +{ + filter.enable_filter(enable); +} + + +// ---------------------------------------------------------------------------- +// Enable external filter. +// ---------------------------------------------------------------------------- +void SID::enable_external_filter(bool enable) +{ + extfilt.enable_filter(enable); +} + + +// ---------------------------------------------------------------------------- +// I0() computes the 0th order modified Bessel function of the first kind. +// This function is originally from resample-1.5/filterkit.c by J. O. Smith. +// ---------------------------------------------------------------------------- +/* +float SID::I0(float x) +{ + // Max error acceptable in I0. + const float I0e = 1e-6; + + float sum, u, halfx, temp; + int n; + + sum = u = n = 1; + halfx = x/2.0; + + do { + temp = halfx/n++; + u *= temp*temp; + sum += u; + } while (u >= I0e*sum); + + return sum; +} +*/ + +// ---------------------------------------------------------------------------- +// Setting of SID sampling parameters. +// +// Use a clock freqency of 985248Hz for PAL C64, 1022730Hz for NTSC C64. +// The default end of passband frequency is pass_freq = 0.9*sample_freq/2 +// for sample frequencies up to ~ 44.1kHz, and 20kHz for higher sample +// frequencies. +// +// For resampling, the ratio between the clock frequency and the sample +// frequency is limited as follows: +// 125*clock_freq/sample_freq < 16384 +// E.g. provided a clock frequency of ~ 1MHz, the sample frequency can not +// be set lower than ~ 8kHz. A lower sample frequency would make the +// resampling code overfill its 16k sample ring buffer. +// +// The end of passband frequency is also limited: +// pass_freq <= 0.9*sample_freq/2 + +// E.g. for a 44.1kHz sampling rate the end of passband frequency is limited +// to slightly below 20kHz. This constraint ensures that the FIR table is +// not overfilled. +// ---------------------------------------------------------------------------- +bool SID::set_sampling_parameters(float clock_freq, sampling_method method, + float sample_freq, float pass_freq, + float filter_scale) +{ + + // The default passband limit is 0.9*sample_freq/2 for sample + // frequencies below ~ 44.1kHz, and 20kHz for higher sample frequencies. + if (pass_freq < 0) { + pass_freq = 20000; + if (2.0*pass_freq/sample_freq >= 0.9) { + pass_freq = 0.9*sample_freq/2.0; + } + } + // Check whether the FIR table would overfill. + else if (pass_freq > 0.9*sample_freq/2.0) { + return false; + } + + // The filter scaling is only included to avoid clipping, so keep + // it sane. + if (filter_scale < 0.9 || filter_scale > 1.0) { + return false; + } + + // Set the external filter to the pass freq + extfilt.set_sampling_parameter (pass_freq); + clock_frequency = clock_freq; + sampling = method; + + cycles_per_sample = + cycle_count(clock_freq/sample_freq*(1 << FIXP_SHIFT) + 0.5); + + sample_offset = 0; + sample_prev = 0; + + return true; +} + + +// ---------------------------------------------------------------------------- +// Adjustment of SID sampling frequency. +// +// In some applications, e.g. a C64 emulator, it can be desirable to +// synchronize sound with a timer source. This is supported by adjustment of +// the SID sampling frequency. +// +// NB! Adjustment of the sampling frequency may lead to noticeable shifts in +// frequency, and should only be used for interactive applications. Note also +// that any adjustment of the sampling frequency will change the +// characteristics of the resampling filter, since the filter is not rebuilt. +// ---------------------------------------------------------------------------- +void SID::adjust_sampling_frequency(float sample_freq) +{ + cycles_per_sample = + cycle_count(clock_frequency/sample_freq*(1 << FIXP_SHIFT) + 0.5); +} + + +// ---------------------------------------------------------------------------- +// Return array of default spline interpolation points to map FC to +// filter cutoff frequency. +// ---------------------------------------------------------------------------- +/* +void SID::fc_default(const fc_point*& points, int& count) +{ + filter.fc_default(points, count); +} +*/ + +// ---------------------------------------------------------------------------- +// Return FC spline plotter object. +// ---------------------------------------------------------------------------- +/* +PointPlotter SID::fc_plotter() +{ + return filter.fc_plotter(); +} +*/ + +// ---------------------------------------------------------------------------- +// SID clocking - 1 cycle. +// ---------------------------------------------------------------------------- +void SID::clock() +{ + + // Age bus value. + if (--bus_value_ttl <= 0) { + bus_value = 0; + bus_value_ttl = 0; + } + + // Clock amplitude modulators. + voice[0].envelope.clock(); + voice[1].envelope.clock(); + voice[2].envelope.clock(); + + // Clock oscillators. + voice[0].wave.clock(); + voice[1].wave.clock(); + voice[2].wave.clock(); + + // Synchronize oscillators. + voice[0].wave.synchronize(); + voice[1].wave.synchronize(); + voice[2].wave.synchronize(); + + // Clock filter. + filter.clock(voice[0].output(), voice[1].output(), voice[2].output(), ext_in); + + // Clock external filter. + extfilt.clock(filter.output()); +} + + +// ---------------------------------------------------------------------------- +// SID clocking - delta_t cycles. +// ---------------------------------------------------------------------------- +void SID::clock(cycle_count delta_t) +{ + int i; + + if (delta_t <= 0) { + return; + } + + // Age bus value. + bus_value_ttl -= delta_t; + if (bus_value_ttl <= 0) { + bus_value = 0; + bus_value_ttl = 0; + } + + // Clock amplitude modulators. + + voice[0].envelope.clock(delta_t); + voice[1].envelope.clock(delta_t); + voice[2].envelope.clock(delta_t); + + // Clock and synchronize oscillators. + // Loop until we reach the current cycle. + cycle_count delta_t_osc = delta_t; + while (delta_t_osc) { + cycle_count delta_t_min = delta_t_osc; + + // Find minimum number of cycles to an oscillator accumulator MSB toggle. + // We have to clock on each MSB on / MSB off for hard sync to operate + // correctly. + for (i = 0; i < 3; i++) { + WaveformGenerator& wave = voice[i].wave; + + // It is only necessary to clock on the MSB of an oscillator that is + // a sync source and has freq != 0. + if (!(wave.sync_dest->sync && wave.freq)) { + continue; + } + + reg16 freq = wave.freq; + reg24 accumulator = wave.accumulator; + + // Clock on MSB off if MSB is on, clock on MSB on if MSB is off. + reg24 delta_accumulator = + (accumulator & 0x800000 ? 0x1000000 : 0x800000) - accumulator; + + cycle_count delta_t_next = delta_accumulator/freq; + if (delta_accumulator%freq) { + ++delta_t_next; + } + + if (delta_t_next < delta_t_min) { + delta_t_min = delta_t_next; + } + } + + // Clock oscillators. + voice[0].wave.clock(delta_t_min); + voice[1].wave.clock(delta_t_min); + voice[2].wave.clock(delta_t_min); + + + // Synchronize oscillators. + voice[0].wave.synchronize(); + voice[1].wave.synchronize(); + voice[2].wave.synchronize(); + + delta_t_osc -= delta_t_min; + } + + // Clock filter. + filter.clock(delta_t, + voice[0].output(), voice[1].output(), voice[2].output(), ext_in); + + // Clock external filter. + extfilt.clock(delta_t, filter.output()); +} + + +// ---------------------------------------------------------------------------- +// SID clocking with audio sampling. +// Fixpoint arithmetics is used. +// +// The example below shows how to clock the SID a specified amount of cycles +// while producing audio output: +// +// while (delta_t) { +// bufindex += sid.clock(delta_t, buf + bufindex, buflength - bufindex); +// write(dsp, buf, bufindex*2); +// bufindex = 0; +// } +// +// ---------------------------------------------------------------------------- +int SID::clock(cycle_count& delta_t, short* buf, int n) +{ + switch (sampling) { + default: + case SAMPLE_FAST: + return clock_fast(delta_t, buf, n); + case SAMPLE_INTERPOLATE: + return clock_interpolate(delta_t, buf, n); + } +} + +// ---------------------------------------------------------------------------- +// SID clocking with audio sampling - delta clocking picking nearest sample. +// ---------------------------------------------------------------------------- +RESID_INLINE +int SID::clock_fast(cycle_count& delta_t, short* buf, int n) +{ + int s = 0; + + for (;;) { + cycle_count next_sample_offset = sample_offset + cycles_per_sample + (1 << (FIXP_SHIFT - 1)); + cycle_count delta_t_sample = next_sample_offset >> FIXP_SHIFT; + if (delta_t_sample > delta_t) { + break; + } + if (s >= n) { + return s; + } + clock(delta_t_sample); + delta_t -= delta_t_sample; + sample_offset = (next_sample_offset & FIXP_MASK) - (1 << (FIXP_SHIFT - 1)); + buf[s++] = output(); + } + + clock(delta_t); + sample_offset -= delta_t << FIXP_SHIFT; + delta_t = 0; + return s; +} + + +// ---------------------------------------------------------------------------- +// SID clocking with audio sampling - cycle based with linear sample +// interpolation. +// +// Here the chip is clocked every cycle. This yields higher quality +// sound since the samples are linearly interpolated, and since the +// external filter attenuates frequencies above 16kHz, thus reducing +// sampling noise. +// ---------------------------------------------------------------------------- +RESID_INLINE +int SID::clock_interpolate(cycle_count& delta_t, short* buf, int n) +{ + + int s = 0; + int i; + + for (;;) { + cycle_count next_sample_offset = sample_offset + cycles_per_sample; + cycle_count delta_t_sample = next_sample_offset >> FIXP_SHIFT; + if (delta_t_sample > delta_t) { + break; + } + if (s >= n) { + return s; + } + for (i = 0; i < delta_t_sample - 1; i++) { + clock(); + } + if (i < delta_t_sample) { + sample_prev = output(); + clock(); + } + + delta_t -= delta_t_sample; + sample_offset = next_sample_offset & FIXP_MASK; + + short sample_now = output(); + buf[s++] = + sample_prev + (sample_offset*(sample_now - sample_prev) >> FIXP_SHIFT); + sample_prev = sample_now; + } + + for (i = 0; i < delta_t - 1; i++) { + clock(); + } + if (i < delta_t) { + sample_prev = output(); + clock(); + } + + sample_offset -= delta_t << FIXP_SHIFT; + delta_t = 0; + return s; +} + + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/sid.h b/MCUME_pico/pico64/reSID/sid.h new file mode 100755 index 0000000..3087e6f --- /dev/null +++ b/MCUME_pico/pico64/reSID/sid.h @@ -0,0 +1,133 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// This program is free float; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free float 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 float +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// --------------------------------------------------------------------------- + +#ifndef __SID_H__ +#define __SID_H__ + +#include "siddefs.h" +#include "voice.h" +#include "filter.h" +#include "extfilt.h" +#include "pot.h" + +RESID_NAMESPACE_START + +class SID +{ +public: + SID(); + ~SID(); + //void printFilter(void); + //void set_chip_model(chip_model model); + void enable_filter(bool enable); + void enable_external_filter(bool enable); + bool set_sampling_parameters(float clock_freq, sampling_method method, + float sample_freq, float pass_freq = -1, + float filter_scale = 0.97); + void adjust_sampling_frequency(float sample_freq); + + //void fc_default(const fc_point*& points, int& count); + //PointPlotter fc_plotter(); + + void clock(); + void clock(cycle_count delta_t); + int clock(cycle_count& delta_t, short* buf, int n); + void reset(); + + // Read/write registers. + reg8 read(reg8 offset); + void write(reg8 offset, reg8 value); + void mute(reg8 channel, bool enable); + + // Read/write state. + class State + { + public: + State(); + + char sid_register[0x20]; + + reg8 bus_value; + cycle_count bus_value_ttl; + + reg24 accumulator[3]; + reg24 shift_register[3]; + reg16 rate_counter[3]; + reg16 rate_counter_period[3]; + reg16 exponential_counter[3]; + reg16 exponential_counter_period[3]; + reg8 envelope_counter[3]; + EnvelopeGenerator::State envelope_state[3]; + bool hold_zero[3]; + }; + + State read_state(); + void write_state(const State& state); + + // 16-bit input (EXT IN). + void input(int sample); + + // 16-bit output (AUDIO OUT). + int output(); + + +protected: + + RESID_INLINE int clock_fast(cycle_count& delta_t, short* buf, int n); + RESID_INLINE int clock_interpolate(cycle_count& delta_t, short* buf, int n); + + Voice voice[3]; + Filter filter; + ExternalFilter extfilt; + Potentiometer potx; + Potentiometer poty; + + reg8 bus_value; + cycle_count bus_value_ttl; + + float clock_frequency; + + // External audio input. + int ext_in; + + // Resampling constants. + static const int FIR_N; + static const int FIR_RES_INTERPOLATE; + static const int FIR_RES_FAST; + static const int FIR_SHIFT; + static const int RINGSIZE; + + // Fixpoint constants. + static const int FIXP_SHIFT; + static const int FIXP_MASK; + + // Sampling variables. + sampling_method sampling; + cycle_count cycles_per_sample; + cycle_count sample_offset; + int sample_index; + short sample_prev; + int fir_N; + int fir_RES; + +}; + +RESID_NAMESPACE_STOP + +#endif // not __SID_H__ diff --git a/MCUME_pico/pico64/reSID/siddefs.h b/MCUME_pico/pico64/reSID/siddefs.h new file mode 100755 index 0000000..05604ea --- /dev/null +++ b/MCUME_pico/pico64/reSID/siddefs.h @@ -0,0 +1,86 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 1999 Dag Lem +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// --------------------------------------------------------------------------- + +#ifndef __SIDDEFS_H__ +#define __SIDDEFS_H__ + +// Define bool, true, and false for C++ compilers that lack these keywords. +#define RESID_HAVE_BOOL 1 + +// Inlining on/off. +#define RESID_INLINING 1 +#define RESID_INLINE inline + +// Support namespace + +#ifdef RESID_NAMESPACE +# define RESID_NAMESPACE_START \ + namespace RESID_NAMESPACE \ + { +# define RESID_NAMESPACE_STOP \ + } +#else +# define RESID_NAMESPACE_START +# define RESID_NAMESPACE_STOP +#endif + + +RESID_NAMESPACE_START + +#if !RESID_HAVE_BOOL +typedef int bool; +const bool true = 1; +const bool false = 0; +#endif + +// We could have used the smallest possible data type for each SID register, +// however this would give a slower engine because of data type conversions. +// An int is assumed to be at least 32 bits (necessary in the types reg24, +// cycle_count, and sound_sample). GNU does not support 16-bit machines +// (GNU Coding Standards: Portability between CPUs), so this should be +// a valid assumption. +#include +#include + +typedef uint16_t reg4; +typedef uint16_t reg8; +typedef uint16_t reg12; +typedef uint16_t reg16; +typedef unsigned int reg24; + +typedef int cycle_count; +typedef int sound_sample; +typedef sound_sample fc_point[2]; + +//enum chip_model { MOS6581, MOS8580 }; + +enum sampling_method { SAMPLE_FAST, SAMPLE_INTERPOLATE}; + +extern "C" +{ +#ifndef __VERSION_CC__ +extern const char* resid_version_string; +#else +const char* resid_version_string = VERSION; +#endif +} + +RESID_NAMESPACE_STOP + +#endif // not __SIDDEFS_H__ diff --git a/MCUME_pico/pico64/reSID/spline.h b/MCUME_pico/pico64/reSID/spline.h new file mode 100755 index 0000000..c03260c --- /dev/null +++ b/MCUME_pico/pico64/reSID/spline.h @@ -0,0 +1,275 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// --------------------------------------------------------------------------- + +#ifndef __SPLINE_H__ +#define __SPLINE_H__ + +RESID_NAMESPACE_START + +// Our objective is to construct a smooth interpolating single-valued function +// y = f(x). +// +// Catmull-Rom splines are widely used for interpolation, however these are +// parametric curves [x(t) y(t) ...] and can not be used to directly calculate +// y = f(x). +// For a discussion of Catmull-Rom splines see Catmull, E., and R. Rom, +// "A Class of Local Interpolating Splines", Computer Aided Geometric Design. +// +// Natural cubic splines are single-valued functions, and have been used in +// several applications e.g. to specify gamma curves for image display. +// These splines do not afford local control, and a set of linear equations +// including all interpolation points must be solved before any point on the +// curve can be calculated. The lack of local control makes the splines +// more difficult to handle than e.g. Catmull-Rom splines, and real-time +// interpolation of a stream of data points is not possible. +// For a discussion of natural cubic splines, see e.g. Kreyszig, E., "Advanced +// Engineering Mathematics". +// +// Our approach is to approximate the properties of Catmull-Rom splines for +// piecewice cubic polynomials f(x) = ax^3 + bx^2 + cx + d as follows: +// Each curve segment is specified by four interpolation points, +// p0, p1, p2, p3. +// The curve between p1 and p2 must interpolate both p1 and p2, and in addition +// f'(p1.x) = k1 = (p2.y - p0.y)/(p2.x - p0.x) and +// f'(p2.x) = k2 = (p3.y - p1.y)/(p3.x - p1.x). +// +// The constraints are expressed by the following system of linear equations +// +// [ 1 xi xi^2 xi^3 ] [ d ] [ yi ] +// [ 1 2*xi 3*xi^2 ] * [ c ] = [ ki ] +// [ 1 xj xj^2 xj^3 ] [ b ] [ yj ] +// [ 1 2*xj 3*xj^2 ] [ a ] [ kj ] +// +// Solving using Gaussian elimination and back substitution, setting +// dy = yj - yi, dx = xj - xi, we get +// +// a = ((ki + kj) - 2*dy/dx)/(dx*dx); +// b = ((kj - ki)/dx - 3*(xi + xj)*a)/2; +// c = ki - (3*xi*a + 2*b)*xi; +// d = yi - ((xi*a + b)*xi + c)*xi; +// +// Having calculated the coefficients of the cubic polynomial we have the +// choice of evaluation by brute force +// +// for (x = x1; x <= x2; x += res) { +// y = ((a*x + b)*x + c)*x + d; +// plot(x, y); +// } +// +// or by forward differencing +// +// y = ((a*x1 + b)*x1 + c)*x1 + d; +// dy = (3*a*(x1 + res) + 2*b)*x1*res + ((a*res + b)*res + c)*res; +// d2y = (6*a*(x1 + res) + 2*b)*res*res; +// d3y = 6*a*res*res*res; +// +// for (x = x1; x <= x2; x += res) { +// plot(x, y); +// y += dy; dy += d2y; d2y += d3y; +// } +// +// See Foley, Van Dam, Feiner, Hughes, "Computer Graphics, Principles and +// Practice" for a discussion of forward differencing. +// +// If we have a set of interpolation points p0, ..., pn, we may specify +// curve segments between p0 and p1, and between pn-1 and pn by using the +// following constraints: +// f''(p0.x) = 0 and +// f''(pn.x) = 0. +// +// Substituting the results for a and b in +// +// 2*b + 6*a*xi = 0 +// +// we get +// +// ki = (3*dy/dx - kj)/2; +// +// or by substituting the results for a and b in +// +// 2*b + 6*a*xj = 0 +// +// we get +// +// kj = (3*dy/dx - ki)/2; +// +// Finally, if we have only two interpolation points, the cubic polynomial +// will degenerate to a straight line if we set +// +// ki = kj = dy/dx; +// + + +#if SPLINE_BRUTE_FORCE +#define interpolate_segment interpolate_brute_force +#else +#define interpolate_segment interpolate_forward_difference +#endif + + +// ---------------------------------------------------------------------------- +// Calculation of coefficients. +// ---------------------------------------------------------------------------- +inline +void cubic_coefficients(double x1, double y1, double x2, double y2, + double k1, double k2, + double& a, double& b, double& c, double& d) +{ + double dx = x2 - x1, dy = y2 - y1; + + a = ((k1 + k2) - 2*dy/dx)/(dx*dx); + b = ((k2 - k1)/dx - 3*(x1 + x2)*a)/2; + c = k1 - (3*x1*a + 2*b)*x1; + d = y1 - ((x1*a + b)*x1 + c)*x1; +} + +// ---------------------------------------------------------------------------- +// Evaluation of cubic polynomial by brute force. +// ---------------------------------------------------------------------------- +template +inline +void interpolate_brute_force(double x1, double y1, double x2, double y2, + double k1, double k2, + PointPlotter plot, double res) +{ + double a, b, c, d; + cubic_coefficients(x1, y1, x2, y2, k1, k2, a, b, c, d); + + // Calculate each point. + for (double x = x1; x <= x2; x += res) { + double y = ((a*x + b)*x + c)*x + d; + plot(x, y); + } +} + +// ---------------------------------------------------------------------------- +// Evaluation of cubic polynomial by forward differencing. +// ---------------------------------------------------------------------------- +template +inline +void interpolate_forward_difference(double x1, double y1, double x2, double y2, + double k1, double k2, + PointPlotter plot, double res) +{ + double a, b, c, d; + cubic_coefficients(x1, y1, x2, y2, k1, k2, a, b, c, d); + + double y = ((a*x1 + b)*x1 + c)*x1 + d; + double dy = (3*a*(x1 + res) + 2*b)*x1*res + ((a*res + b)*res + c)*res; + double d2y = (6*a*(x1 + res) + 2*b)*res*res; + double d3y = 6*a*res*res*res; + + // Calculate each point. + for (double x = x1; x <= x2; x += res) { + plot(x, y); + y += dy; dy += d2y; d2y += d3y; + } +} + +template +inline +double x(PointIter p) +{ + return (*p)[0]; +} + +template +inline +double y(PointIter p) +{ + return (*p)[1]; +} + +// ---------------------------------------------------------------------------- +// Evaluation of complete interpolating function. +// Note that since each curve segment is controlled by four points, the +// end points will not be interpolated. If extra control points are not +// desirable, the end points can simply be repeated to ensure interpolation. +// Note also that points of non-differentiability and discontinuity can be +// introduced by repeating points. +// ---------------------------------------------------------------------------- +template +inline +void interpolate(PointIter p0, PointIter pn, PointPlotter plot, double res) +{ + double k1, k2; + + // Set up points for first curve segment. + PointIter p1 = p0; ++p1; + PointIter p2 = p1; ++p2; + PointIter p3 = p2; ++p3; + + // Draw each curve segment. + for (; p2 != pn; ++p0, ++p1, ++p2, ++p3) { + // p1 and p2 equal; single point. + if (x(p1) == x(p2)) { + continue; + } + // Both end points repeated; straight line. + if (x(p0) == x(p1) && x(p2) == x(p3)) { + k1 = k2 = (y(p2) - y(p1))/(x(p2) - x(p1)); + } + // p0 and p1 equal; use f''(x1) = 0. + else if (x(p0) == x(p1)) { + k2 = (y(p3) - y(p1))/(x(p3) - x(p1)); + k1 = (3*(y(p2) - y(p1))/(x(p2) - x(p1)) - k2)/2; + } + // p2 and p3 equal; use f''(x2) = 0. + else if (x(p2) == x(p3)) { + k1 = (y(p2) - y(p0))/(x(p2) - x(p0)); + k2 = (3*(y(p2) - y(p1))/(x(p2) - x(p1)) - k1)/2; + } + // Normal curve. + else { + k1 = (y(p2) - y(p0))/(x(p2) - x(p0)); + k2 = (y(p3) - y(p1))/(x(p3) - x(p1)); + } + + interpolate_segment(x(p1), y(p1), x(p2), y(p2), k1, k2, plot, res); + } +} + +// ---------------------------------------------------------------------------- +// Class for plotting integers into an array. +// ---------------------------------------------------------------------------- +template +class PointPlotter +{ + protected: + FN* f; + + public: + PointPlotter(FN* arr) : f(arr) + { + } + + void operator ()(double x, double y) + { + // Clamp negative values to zero. + if (y < 0) { + y = 0; + } + + f[FN(x)] = FN(y); + } +}; + +RESID_NAMESPACE_STOP + +#endif // not __SPLINE_H__ diff --git a/MCUME_pico/pico64/reSID/version.cpp b/MCUME_pico/pico64/reSID/version.cpp new file mode 100755 index 0000000..3b61afd --- /dev/null +++ b/MCUME_pico/pico64/reSID/version.cpp @@ -0,0 +1,21 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 +// --------------------------------------------------------------------------- + +#define __VERSION_CC__ +#include "siddefs.h" diff --git a/MCUME_pico/pico64/reSID/voice.cpp b/MCUME_pico/pico64/reSID/voice.cpp new file mode 100755 index 0000000..e24bcdb --- /dev/null +++ b/MCUME_pico/pico64/reSID/voice.cpp @@ -0,0 +1,152 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 +// --------------------------------------------------------------------------- + +#define __VOICE_CC__ +#include "voice.h" + +RESID_NAMESPACE_START + +// ---------------------------------------------------------------------------- +// Constructor. +// ---------------------------------------------------------------------------- +Voice::Voice() + : muted(false) +{ + //set_chip_model(MOS6581); + {//instead: + wave_zero = 0x380; + voice_DC = 0x800*0xff; + } +} + +// ---------------------------------------------------------------------------- +// Set chip model. +// ---------------------------------------------------------------------------- +/* +void Voice::set_chip_model(chip_model model) +{ + wave.set_chip_model(model); + + if (model == MOS6581) { + // The waveform D/A converter introduces a DC offset in the signal + // to the envelope multiplying D/A converter. The "zero" level of + // the waveform D/A converter can be found as follows: + // + // Measure the "zero" voltage of voice 3 on the SID audio output + // pin, routing only voice 3 to the mixer ($d417 = $0b, $d418 = + // $0f, all other registers zeroed). + // + // Then set the sustain level for voice 3 to maximum and search for + // the waveform output value yielding the same voltage as found + // above. This is done by trying out different waveform output + // values until the correct value is found, e.g. with the following + // program: + // + // lda #$08 + // sta $d412 + // lda #$0b + // sta $d417 + // lda #$0f + // sta $d418 + // lda #$f0 + // sta $d414 + // lda #$21 + // sta $d412 + // lda #$01 + // sta $d40e + // + // ldx #$00 + // lda #$38 ; Tweak this to find the "zero" level + //l cmp $d41b + // bne l + // stx $d40e ; Stop frequency counter - freeze waveform output + // brk + // + // The waveform output range is 0x000 to 0xfff, so the "zero" + // level should ideally have been 0x800. In the measured chip, the + // waveform output "zero" level was found to be 0x380 (i.e. $d41b + // = 0x38) at 5.94V. + + wave_zero = 0x380; + + // The envelope multiplying D/A converter introduces another DC + // offset. This is isolated by the following measurements: + // + // * The "zero" output level of the mixer at full volume is 5.44V. + // * Routing one voice to the mixer at full volume yields + // 6.75V at maximum voice output (wave = 0xfff, sustain = 0xf) + // 5.94V at "zero" voice output (wave = any, sustain = 0x0) + // 5.70V at minimum voice output (wave = 0x000, sustain = 0xf) + // * The DC offset of one voice is (5.94V - 5.44V) = 0.50V + // * The dynamic range of one voice is |6.75V - 5.70V| = 1.05V + // * The DC offset is thus 0.50V/1.05V ~ 1/2 of the dynamic range. + // + // Note that by removing the DC offset, we get the following ranges for + // one voice: + // y > 0: (6.75V - 5.44V) - 0.50V = 0.81V + // y < 0: (5.70V - 5.44V) - 0.50V = -0.24V + // The scaling of the voice amplitude is not symmetric about y = 0; + // this follows from the DC level in the waveform output. + + voice_DC = 0x800*0xff; + } + else { + // No DC offsets in the MOS8580. + wave_zero = 0x800; + voice_DC = 0; + } +} +*/ +// ---------------------------------------------------------------------------- +// Set sync source. +// ---------------------------------------------------------------------------- +void Voice::set_sync_source(Voice* source) +{ + wave.set_sync_source(&source->wave); +} + +// ---------------------------------------------------------------------------- +// Register functions. +// ---------------------------------------------------------------------------- +void Voice::writeCONTROL_REG(reg8 control) +{ + wave.writeCONTROL_REG(control); + envelope.writeCONTROL_REG(control); +} + +// ---------------------------------------------------------------------------- +// SID reset. +// ---------------------------------------------------------------------------- +void Voice::reset() +{ + wave.reset(); + envelope.reset(); +} + + +// ---------------------------------------------------------------------------- +// Voice mute. +// ---------------------------------------------------------------------------- +void Voice::mute(bool enable) +{ + // enable = true (means voice is muted) + muted = enable; +} + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/voice.h b/MCUME_pico/pico64/reSID/voice.h new file mode 100755 index 0000000..119d26d --- /dev/null +++ b/MCUME_pico/pico64/reSID/voice.h @@ -0,0 +1,87 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// --------------------------------------------------------------------------- + +#ifndef __VOICE_H__ +#define __VOICE_H__ + +#include "siddefs.h" +#include "wave.h" +#include "envelope.h" + +RESID_NAMESPACE_START + +class Voice +{ +public: + Voice(); + +// void set_chip_model(chip_model model); + void set_sync_source(Voice*); + void reset(); + void mute(bool enable); + + void writeCONTROL_REG(reg8); + + // Amplitude modulated waveform output. + // Range [-2048*255, 2047*255]. + RESID_INLINE sound_sample output(); + +protected: + WaveformGenerator wave; + EnvelopeGenerator envelope; + bool muted; + + // Waveform D/A zero level. + sound_sample wave_zero; + + // Multiplying D/A DC offset. + sound_sample voice_DC; + +friend class SID; +}; + + +// ---------------------------------------------------------------------------- +// Inline functions. +// The following function is defined inline because it is called every +// time a sample is calculated. +// ---------------------------------------------------------------------------- + +#if RESID_INLINING || defined(__VOICE_CC__) + +// ---------------------------------------------------------------------------- +// Amplitude modulated waveform output. +// Ideal range [-2048*255, 2047*255]. +// ---------------------------------------------------------------------------- +RESID_INLINE +sound_sample Voice::output() +{ + if (!muted) + { // Multiply oscillator output with envelope output. + return (wave.output() - wave_zero)*envelope.output() + voice_DC; + } else { + return 0; + } +} + +#endif // RESID_INLINING || defined(__VOICE_CC__) + +RESID_NAMESPACE_STOP + +#endif // not __VOICE_H__ diff --git a/MCUME_pico/pico64/reSID/wave.cpp b/MCUME_pico/pico64/reSID/wave.cpp new file mode 100755 index 0000000..9da1a58 --- /dev/null +++ b/MCUME_pico/pico64/reSID/wave.cpp @@ -0,0 +1,154 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 +// --------------------------------------------------------------------------- + +#define __WAVE_CC__ +#include "wave.h" + +RESID_NAMESPACE_START + +// ---------------------------------------------------------------------------- +// Constructor. +// ---------------------------------------------------------------------------- +WaveformGenerator::WaveformGenerator() +{ + sync_source = this; + + // set_chip_model(MOS6581); + {//instead: + wave__ST = &wave6581__ST[0]; + wave_P_T = &wave6581_P_T[0]; + wave_PS_ = &wave6581_PS_[0]; + wave_PST = &wave6581_PST[0]; + } + reset(); +} + + +// ---------------------------------------------------------------------------- +// Set sync source. +// ---------------------------------------------------------------------------- +void WaveformGenerator::set_sync_source(WaveformGenerator* source) +{ + sync_source = source; + source->sync_dest = this; +} + + +// ---------------------------------------------------------------------------- +// Set chip model. +// ---------------------------------------------------------------------------- +/* +void WaveformGenerator::set_chip_model(chip_model model) +{ + if (model == MOS6581) { + wave__ST = &wave6581__ST[0]; + wave_P_T = &wave6581_P_T[0]; + wave_PS_ = &wave6581_PS_[0]; + wave_PST = &wave6581_PST[0]; + } + else { + wave__ST = &wave8580__ST[0]; + wave_P_T = &wave8580_P_T[0]; + wave_PS_ = &wave8580_PS_[0]; + wave_PST = &wave8580_PST[0]; + } +} +*/ + +// ---------------------------------------------------------------------------- +// Register functions. +// ---------------------------------------------------------------------------- +void WaveformGenerator::writeFREQ_LO(reg8 freq_lo) +{ + freq = (freq & 0xff00) | (freq_lo & 0x00ff); +} + +void WaveformGenerator::writeFREQ_HI(reg8 freq_hi) +{ + freq = (((unsigned int) freq_hi << 8) & 0xff00) | (freq & 0x00ff); +} + +void WaveformGenerator::writePW_LO(reg8 pw_lo) +{ + pw = (pw & 0xf00) | (pw_lo & 0x0ff); +} + +void WaveformGenerator::writePW_HI(reg8 pw_hi) +{ + pw = (((unsigned int)pw_hi << 8) & 0xf00) | (pw & 0x0ff); +} + +void WaveformGenerator::writeCONTROL_REG(reg8 control) +{ + waveform = (control >> 4) & 0x0f; + ring_mod = control & 0x04; + sync = control & 0x02; + + reg8 test_next = control & 0x08; + + // Test bit set. + // The accumulator and the shift register are both cleared. + // NB! The shift register is not really cleared immediately. It seems like + // the individual bits in the shift register start to fade down towards + // zero when test is set. All bits reach zero within approximately + // $2000 - $4000 cycles. + // This is not modeled. There should fortunately be little audible output + // from this peculiar behavior. + if (test_next) { + accumulator = 0; + shift_register = 0; + } + // Test bit cleared. + // The accumulator starts counting, and the shift register is reset to + // the value 0x7ffff8. + // NB! The shift register will not actually be set to this exact value if the + // shift register bits have not had time to fade to zero. + // This is not modeled. + else if (test) { + shift_register = 0x7ffff8; + } + + test = test_next; + + // The gate bit is handled by the EnvelopeGenerator. +} + +reg8 WaveformGenerator::readOSC() +{ + return output() >> 4; +} + +// ---------------------------------------------------------------------------- +// SID reset. +// ---------------------------------------------------------------------------- +void WaveformGenerator::reset() +{ + accumulator = 0; + shift_register = 0x7ffff8; + freq = 0; + pw = 0; + + test = 0; + ring_mod = 0; + sync = 0; + + msb_rising = false; +} + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/wave.h b/MCUME_pico/pico64/reSID/wave.h new file mode 100755 index 0000000..376960d --- /dev/null +++ b/MCUME_pico/pico64/reSID/wave.h @@ -0,0 +1,514 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// --------------------------------------------------------------------------- + +#ifndef __WAVE_H__ +#define __WAVE_H__ + +#include "siddefs.h" + +RESID_NAMESPACE_START + +// ---------------------------------------------------------------------------- +// A 24 bit accumulator is the basis for waveform generation. FREQ is added to +// the lower 16 bits of the accumulator each cycle. +// The accumulator is set to zero when TEST is set, and starts counting +// when TEST is cleared. +// The noise waveform is taken from intermediate bits of a 23 bit shift +// register. This register is clocked by bit 19 of the accumulator. +// ---------------------------------------------------------------------------- +class WaveformGenerator +{ +public: + WaveformGenerator(); + + void set_sync_source(WaveformGenerator*); + //void set_chip_model(chip_model model); + + RESID_INLINE void clock(); + RESID_INLINE void clock(cycle_count delta_t); + RESID_INLINE void synchronize(); + void reset(); + + void writeFREQ_LO(reg8); + void writeFREQ_HI(reg8); + void writePW_LO(reg8); + void writePW_HI(reg8); + void writeCONTROL_REG(reg8); + reg8 readOSC(); + + // 12-bit waveform output. + RESID_INLINE reg12 output(); + +protected: + const WaveformGenerator* sync_source; + WaveformGenerator* sync_dest; + + // Tell whether the accumulator MSB was set high on this cycle. + bool msb_rising; + + reg24 accumulator; + reg24 shift_register; + + // Fout = (Fn*Fclk/16777216)Hz + reg16 freq; + // PWout = (PWn/40.95)% + reg12 pw; + + // The control register right-shifted 4 bits; used for output function + // table lookup. + reg8 waveform; + + // The remaining control register bits. + reg8 test; + reg8 ring_mod; + reg8 sync; + // The gate bit is handled by the EnvelopeGenerator. + + // 16 possible combinations of waveforms. + RESID_INLINE reg12 output____(); + RESID_INLINE reg12 output___T(); + RESID_INLINE reg12 output__S_(); + RESID_INLINE reg12 output__ST(); + RESID_INLINE reg12 output_P__(); + RESID_INLINE reg12 output_P_T(); + RESID_INLINE reg12 output_PS_(); + RESID_INLINE reg12 output_PST(); + RESID_INLINE reg12 outputN___(); + RESID_INLINE reg12 outputN__T(); + RESID_INLINE reg12 outputN_S_(); + RESID_INLINE reg12 outputN_ST(); + RESID_INLINE reg12 outputNP__(); + RESID_INLINE reg12 outputNP_T(); + RESID_INLINE reg12 outputNPS_(); + RESID_INLINE reg12 outputNPST(); + + // Sample data for combinations of waveforms. + /* + static reg8 wave6581__ST[]; + static reg8 wave6581_P_T[]; + static reg8 wave6581_PS_[]; + static reg8 wave6581_PST[]; + + static reg8 wave8580__ST[]; + static reg8 wave8580_P_T[]; + static reg8 wave8580_PS_[]; + static reg8 wave8580_PST[]; + + reg8* wave__ST; + reg8* wave_P_T; + reg8* wave_PS_; + reg8* wave_PST; +*/ + + const reg8* wave__ST; + const reg8* wave_P_T; + const reg8* wave_PS_; + const reg8* wave_PST; + +friend class Voice; +friend class SID; +}; + + +// ---------------------------------------------------------------------------- +// Inline functions. +// The following functions are defined inline because they are called every +// time a sample is calculated. +// ---------------------------------------------------------------------------- + +#if RESID_INLINING || defined(__WAVE_CC__) + +// ---------------------------------------------------------------------------- +// SID clocking - 1 cycle. +// ---------------------------------------------------------------------------- +RESID_INLINE +void WaveformGenerator::clock() +{ + // No operation if test bit is set. + if (test) { + return; + } + + reg24 accumulator_prev = accumulator; + + // Calculate new accumulator value; + accumulator += freq; + accumulator &= 0xffffff; + + // Check whether the MSB is set high. This is used for synchronization. + msb_rising = !(accumulator_prev & 0x800000) && (accumulator & 0x800000); + + // Shift noise register once for each time accumulator bit 19 is set high. + if (!(accumulator_prev & 0x080000) && (accumulator & 0x080000)) { + reg24 bit0 = ((shift_register >> 22) ^ (shift_register >> 17)) & 0x1; + shift_register <<= 1; + shift_register &= 0x7fffff; + shift_register |= bit0; + } +} + +// ---------------------------------------------------------------------------- +// SID clocking - delta_t cycles. +// ---------------------------------------------------------------------------- +RESID_INLINE +void WaveformGenerator::clock(cycle_count delta_t) +{ + // No operation if test bit is set. + if (test) { + return; + } + + reg24 accumulator_prev = accumulator; + + // Calculate new accumulator value; + reg24 delta_accumulator = delta_t*freq; + accumulator += delta_accumulator; + accumulator &= 0xffffff; + + // Check whether the MSB is set high. This is used for synchronization. + msb_rising = !(accumulator_prev & 0x800000) && (accumulator & 0x800000); + + // Shift noise register once for each time accumulator bit 19 is set high. + // Bit 19 is set high each time 2^20 (0x100000) is added to the accumulator. + reg24 shift_period = 0x100000; + + while (delta_accumulator) { + if (delta_accumulator < shift_period) { + shift_period = delta_accumulator; + // Determine whether bit 19 is set on the last period. + // NB! Requires two's complement integer. + if (shift_period <= 0x080000) { + // Check for flip from 0 to 1. + if (((accumulator - shift_period) & 0x080000) || !(accumulator & 0x080000)) + { + break; + } + } + else { + // Check for flip from 0 (to 1 or via 1 to 0) or from 1 via 0 to 1. + if (((accumulator - shift_period) & 0x080000) && !(accumulator & 0x080000)) + { + break; + } + } + } + + // Shift the noise/random register. + // NB! The shift is actually delayed 2 cycles, this is not modeled. + reg24 bit0 = ((shift_register >> 22) ^ (shift_register >> 17)) & 0x1; + shift_register <<= 1; + shift_register &= 0x7fffff; + shift_register |= bit0; + + delta_accumulator -= shift_period; + } +} + + +// ---------------------------------------------------------------------------- +// Synchronize oscillators. +// This must be done after all the oscillators have been clock()'ed since the +// oscillators operate in parallel. +// Note that the oscillators must be clocked exactly on the cycle when the +// MSB is set high for hard sync to operate correctly. See SID::clock(). +// ---------------------------------------------------------------------------- +RESID_INLINE +void WaveformGenerator::synchronize() +{ + // A special case occurs when a sync source is synced itself on the same + // cycle as when its MSB is set high. In this case the destination will + // not be synced. This has been verified by sampling OSC3. + if (msb_rising && sync_dest->sync && !(sync && sync_source->msb_rising)) { + sync_dest->accumulator = 0; + } +} + + +// ---------------------------------------------------------------------------- +// Output functions. +// NB! The output from SID 8580 is delayed one cycle compared to SID 6581, +// this is not modeled. +// ---------------------------------------------------------------------------- + +// No waveform: +// Zero output. +// +RESID_INLINE +reg12 WaveformGenerator::output____() +{ + return 0x000; +} + +// Triangle: +// The upper 12 bits of the accumulator are used. +// The MSB is used to create the falling edge of the triangle by inverting +// the lower 11 bits. The MSB is thrown away and the lower 11 bits are +// left-shifted (half the resolution, full amplitude). +// Ring modulation substitutes the MSB with MSB EOR sync_source MSB. +// +RESID_INLINE +reg12 WaveformGenerator::output___T() +{ + reg24 msb = (ring_mod ? accumulator ^ sync_source->accumulator : accumulator) + & 0x800000; + return ((msb ? ~accumulator : accumulator) >> 11) & 0xffe; +} + +// Sawtooth: +// The output is identical to the upper 12 bits of the accumulator. +// +RESID_INLINE +reg12 WaveformGenerator::output__S_() +{ + return accumulator >> 12; +} + +// Pulse: +// The upper 12 bits of the accumulator are used. +// These bits are compared to the pulse width register by a 12 bit digital +// comparator; output is either all one or all zero bits. +// NB! The output is actually delayed one cycle after the compare. +// This is not modeled. +// +// The test bit, when set to one, holds the pulse waveform output at 0xfff +// regardless of the pulse width setting. +// +RESID_INLINE +reg12 WaveformGenerator::output_P__() +{ + return (test || (accumulator >> 12) >= pw) ? 0xfff : 0x000; +} + +// Noise: +// The noise output is taken from intermediate bits of a 23-bit shift register +// which is clocked by bit 19 of the accumulator. +// NB! The output is actually delayed 2 cycles after bit 19 is set high. +// This is not modeled. +// +// Operation: Calculate EOR result, shift register, set bit 0 = result. +// +// ----------------------->--------------------- +// | | +// ----EOR---- | +// | | | +// 2 2 2 1 1 1 1 1 1 1 1 1 1 | +// Register bits: 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 <--- +// | | | | | | | | +// OSC3 bits : 7 6 5 4 3 2 1 0 +// +// Since waveform output is 12 bits the output is left-shifted 4 times. +// +RESID_INLINE +reg12 WaveformGenerator::outputN___() +{ + return + ((shift_register & 0x400000) >> 11) | + ((shift_register & 0x100000) >> 10) | + ((shift_register & 0x010000) >> 7) | + ((shift_register & 0x002000) >> 5) | + ((shift_register & 0x000800) >> 4) | + ((shift_register & 0x000080) >> 1) | + ((shift_register & 0x000010) << 1) | + ((shift_register & 0x000004) << 2); +} + +// Combined waveforms: +// By combining waveforms, the bits of each waveform are effectively short +// circuited. A zero bit in one waveform will result in a zero output bit +// (thus the infamous claim that the waveforms are AND'ed). +// However, a zero bit in one waveform will also affect the neighboring bits +// in the output. The reason for this has not been determined. +// +// Example: +// +// 1 1 +// Bit # 1 0 9 8 7 6 5 4 3 2 1 0 +// ----------------------- +// Sawtooth 0 0 0 1 1 1 1 1 1 0 0 0 +// +// Triangle 0 0 1 1 1 1 1 1 0 0 0 0 +// +// AND 0 0 0 1 1 1 1 1 0 0 0 0 +// +// Output 0 0 0 0 1 1 1 0 0 0 0 0 +// +// +// This behavior would be quite difficult to model exactly, since the SID +// in this case does not act as a digital state machine. Tests show that minor +// (1 bit) differences can actually occur in the output from otherwise +// identical samples from OSC3 when waveforms are combined. To further +// complicate the situation the output changes slightly with time (more +// neighboring bits are successively set) when the 12-bit waveform +// registers are kept unchanged. +// +// It is probably possible to come up with a valid model for the +// behavior, however this would be far too slow for practical use since it +// would have to be based on the mutual influence of individual bits. +// +// The output is instead approximated by using the upper bits of the +// accumulator as an index to look up the combined output in a table +// containing actual combined waveform samples from OSC3. +// These samples are 8 bit, so 4 bits of waveform resolution is lost. +// All OSC3 samples are taken with FREQ=0x1000, adding a 1 to the upper 12 +// bits of the accumulator each cycle for a sample period of 4096 cycles. +// +// Sawtooth+Triangle: +// The sawtooth output is used to look up an OSC3 sample. +// +// Pulse+Triangle: +// The triangle output is right-shifted and used to look up an OSC3 sample. +// The sample is output if the pulse output is on. +// The reason for using the triangle output as the index is to handle ring +// modulation. Only the first half of the sample is used, which should be OK +// since the triangle waveform has half the resolution of the accumulator. +// +// Pulse+Sawtooth: +// The sawtooth output is used to look up an OSC3 sample. +// The sample is output if the pulse output is on. +// +// Pulse+Sawtooth+Triangle: +// The sawtooth output is used to look up an OSC3 sample. +// The sample is output if the pulse output is on. +// +RESID_INLINE +reg12 WaveformGenerator::output__ST() +{ + return wave__ST[output__S_()] << 4; +} + +RESID_INLINE +reg12 WaveformGenerator::output_P_T() +{ + return (wave_P_T[output___T() >> 1] << 4) & output_P__(); +} + +RESID_INLINE +reg12 WaveformGenerator::output_PS_() +{ + return (wave_PS_[output__S_()] << 4) & output_P__(); +} + +RESID_INLINE +reg12 WaveformGenerator::output_PST() +{ + return (wave_PST[output__S_()] << 4) & output_P__(); +} + +// Combined waveforms including noise: +// All waveform combinations including noise output zero after a few cycles. +// NB! The effects of such combinations are not fully explored. It is claimed +// that the shift register may be filled with zeroes and locked up, which +// seems to be true. +// We have not attempted to model this behavior, suffice to say that +// there is very little audible output from waveform combinations including +// noise. We hope that nobody is actually using it. +// +RESID_INLINE +reg12 WaveformGenerator::outputN__T() +{ + return 0; +} + +RESID_INLINE +reg12 WaveformGenerator::outputN_S_() +{ + return 0; +} + +RESID_INLINE +reg12 WaveformGenerator::outputN_ST() +{ + return 0; +} + +RESID_INLINE +reg12 WaveformGenerator::outputNP__() +{ + return 0; +} + +RESID_INLINE +reg12 WaveformGenerator::outputNP_T() +{ + return 0; +} + +RESID_INLINE +reg12 WaveformGenerator::outputNPS_() +{ + return 0; +} + +RESID_INLINE +reg12 WaveformGenerator::outputNPST() +{ + return 0; +} + +// ---------------------------------------------------------------------------- +// Select one of 16 possible combinations of waveforms. +// ---------------------------------------------------------------------------- +RESID_INLINE +reg12 WaveformGenerator::output() +{ + // It may seem cleaner to use an array of member functions to return + // waveform output; however a switch with inline functions is faster. + + switch (waveform) { + default: + case 0x0: + return output____(); + case 0x1: + return output___T(); + case 0x2: + return output__S_(); + case 0x3: + return output__ST(); + case 0x4: + return output_P__(); + case 0x5: + return output_P_T(); + case 0x6: + return output_PS_(); + case 0x7: + return output_PST(); + case 0x8: + return outputN___(); + case 0x9: + return outputN__T(); + case 0xa: + return outputN_S_(); + case 0xb: + return outputN_ST(); + case 0xc: + return outputNP__(); + case 0xd: + return outputNP_T(); + case 0xe: + return outputNPS_(); + case 0xf: + return outputNPST(); + } +} + +#endif // RESID_INLINING || defined(__WAVE_CC__) + +RESID_NAMESPACE_STOP + +#endif // not __WAVE_H__ diff --git a/MCUME_pico/pico64/reSID/wave6581_PST.cpp b/MCUME_pico/pico64/reSID/wave6581_PST.cpp new file mode 100755 index 0000000..2198373 --- /dev/null +++ b/MCUME_pico/pico64/reSID/wave6581_PST.cpp @@ -0,0 +1,541 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 "wave.h" + +RESID_NAMESPACE_START + +//reg8 WaveformGenerator::wave6581_PST[] = +const reg8 wave6581_PST[] = +{ +/* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x378: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, +/* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x578: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x668: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x670: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x678: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x698: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x718: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x728: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x730: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x738: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x740: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x748: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x750: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x758: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x760: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x768: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x770: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x778: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x780: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x788: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x790: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x798: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, +/* 0x7f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, +/* 0x7f8: */ 0x00, 0x00, 0x00, 0x78, 0x78, 0x7e, 0x7f, 0x7f, +/* 0x800: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x808: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x810: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x818: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x820: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x828: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x830: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x838: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x840: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x848: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x850: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x858: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x860: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x868: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x870: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x878: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x880: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x888: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x890: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x898: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x900: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x908: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x910: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x918: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x920: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x928: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x930: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x938: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x940: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x948: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x950: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x958: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x960: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x968: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x970: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x980: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x988: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x990: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xab8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xac0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, +/* 0xc00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xea0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xea8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xeb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xeb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xec0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xec8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xed0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xed8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xee0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xee8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xef0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xef8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, +/* 0xff0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, +/* 0xff8: */ 0x00, 0x00, 0x00, 0x78, 0x78, 0x7e, 0x7f, 0x7f, +}; + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/wave6581_PS_.cpp b/MCUME_pico/pico64/reSID/wave6581_PS_.cpp new file mode 100755 index 0000000..08febfe --- /dev/null +++ b/MCUME_pico/pico64/reSID/wave6581_PS_.cpp @@ -0,0 +1,541 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 "wave.h" + +RESID_NAMESPACE_START + +//reg8 WaveformGenerator::wave6581_PS_[] = +const reg8 wave6581_PS_[] = +{ +/* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +/* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f, +/* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, +/* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x378: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, +/* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, +/* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, +/* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, +/* 0x3f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3f, +/* 0x3f8: */ 0x00, 0x30, 0x38, 0x3f, 0x3e, 0x3f, 0x3f, 0x3f, +/* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, +/* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x578: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, +/* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, +/* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, +/* 0x5e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, +/* 0x5f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x5f, +/* 0x5f8: */ 0x00, 0x40, 0x40, 0x5f, 0x5c, 0x5f, 0x5f, 0x5f, +/* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x668: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x670: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x678: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, +/* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x698: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6b, +/* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x6d, +/* 0x6e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0x6e8: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x6e, +/* 0x6f0: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x60, 0x6f, +/* 0x6f8: */ 0x00, 0x60, 0x60, 0x6f, 0x60, 0x6f, 0x6f, 0x6f, +/* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x718: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x728: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0x730: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0x738: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x60, 0x73, +/* 0x740: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x748: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0x750: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0x758: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x60, 0x75, +/* 0x760: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, +/* 0x768: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x76, +/* 0x770: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x77, +/* 0x778: */ 0x00, 0x70, 0x70, 0x77, 0x70, 0x77, 0x77, 0x77, +/* 0x780: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x788: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, +/* 0x790: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, +/* 0x798: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x79, +/* 0x7a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, +/* 0x7a8: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x70, 0x70, 0x7a, +/* 0x7b0: */ 0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x70, 0x7b, +/* 0x7b8: */ 0x40, 0x70, 0x70, 0x7b, 0x78, 0x7b, 0x7b, 0x7b, +/* 0x7c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, +/* 0x7c8: */ 0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x70, 0x7c, +/* 0x7d0: */ 0x00, 0x00, 0x00, 0x70, 0x40, 0x70, 0x70, 0x7d, +/* 0x7d8: */ 0x40, 0x70, 0x78, 0x7d, 0x78, 0x7d, 0x7d, 0x7d, +/* 0x7e0: */ 0x00, 0x40, 0x40, 0x78, 0x60, 0x78, 0x78, 0x7e, +/* 0x7e8: */ 0x60, 0x78, 0x78, 0x7e, 0x7c, 0x7e, 0x7e, 0x7e, +/* 0x7f0: */ 0x70, 0x7c, 0x7c, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, +/* 0x7f8: */ 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, +/* 0x800: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x808: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x810: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x818: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x820: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x828: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x830: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x838: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x840: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x848: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x850: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x858: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x860: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x868: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x870: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x878: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x880: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x888: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x890: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x898: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +/* 0x900: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x908: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x910: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x918: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x920: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x928: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x930: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x938: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x940: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x948: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x950: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x958: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x960: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x968: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x970: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0x980: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x988: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x990: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0x9c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f, +/* 0xa00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0xa80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xab8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0xac0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, +/* 0xb00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, +/* 0xb80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, +/* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, +/* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, +/* 0xbf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3f, +/* 0xbf8: */ 0x00, 0x30, 0x38, 0x3f, 0x3e, 0x3f, 0x3f, 0x3f, +/* 0xc00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0xc80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, +/* 0xd00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, +/* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, +/* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, +/* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, +/* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x5f, +/* 0xdf8: */ 0x00, 0x40, 0x40, 0x5f, 0x5c, 0x5f, 0x5f, 0x5f, +/* 0xe00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, +/* 0xe80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xea0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xea8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xeb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xeb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6b, +/* 0xec0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xec8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xed0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xed8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6d, +/* 0xee0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0xee8: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x6e, +/* 0xef0: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x60, 0x6f, +/* 0xef8: */ 0x00, 0x60, 0x60, 0x6f, 0x60, 0x6f, 0x6f, 0x6f, +/* 0xf00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0xf20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0xf30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0xf38: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x60, 0x73, +/* 0xf40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0xf50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0xf58: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x60, 0x75, +/* 0xf60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, +/* 0xf68: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x76, +/* 0xf70: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x77, +/* 0xf78: */ 0x00, 0x70, 0x70, 0x77, 0x70, 0x77, 0x77, 0x77, +/* 0xf80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, +/* 0xf90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, +/* 0xf98: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x79, +/* 0xfa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, +/* 0xfa8: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x70, 0x70, 0x7a, +/* 0xfb0: */ 0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x70, 0x7b, +/* 0xfb8: */ 0x40, 0x70, 0x70, 0x7b, 0x78, 0x7b, 0x7b, 0x7b, +/* 0xfc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, +/* 0xfc8: */ 0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x70, 0x7c, +/* 0xfd0: */ 0x00, 0x00, 0x00, 0x70, 0x40, 0x70, 0x70, 0x7d, +/* 0xfd8: */ 0x40, 0x70, 0x78, 0x7d, 0x78, 0x7d, 0x7d, 0x7d, +/* 0xfe0: */ 0x00, 0x40, 0x40, 0x78, 0x60, 0x78, 0x78, 0x7e, +/* 0xfe8: */ 0x60, 0x78, 0x78, 0x7e, 0x7c, 0x7e, 0x7e, 0x7e, +/* 0xff0: */ 0x70, 0x7c, 0x7c, 0x7f, 0x7c, 0x7f, 0x7f, 0x7f, +/* 0xff8: */ 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, +}; + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/wave6581_P_T.cpp b/MCUME_pico/pico64/reSID/wave6581_P_T.cpp new file mode 100755 index 0000000..03c770f --- /dev/null +++ b/MCUME_pico/pico64/reSID/wave6581_P_T.cpp @@ -0,0 +1,541 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 "wave.h" + +RESID_NAMESPACE_START + +//reg8 WaveformGenerator::wave6581_P_T[] = +const reg8 wave6581_P_T[] = +{ +/* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x38, 0x3f, +/* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f8: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x5f, +/* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0x378: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x6f, +/* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, +/* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, +/* 0x3b8: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x70, 0x77, +/* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, +/* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, +/* 0x3d8: */ 0x00, 0x00, 0x00, 0x70, 0x40, 0x70, 0x70, 0x7b, +/* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x70, +/* 0x3e8: */ 0x00, 0x40, 0x40, 0x70, 0x60, 0x70, 0x78, 0x7d, +/* 0x3f0: */ 0x00, 0x40, 0x60, 0x78, 0x60, 0x78, 0x78, 0x7e, +/* 0x3f8: */ 0x70, 0x7c, 0x7c, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, +/* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x4f8: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x9f, +/* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x578: */ 0x00, 0x80, 0x80, 0x80, 0x80, 0xa0, 0xa0, 0xaf, +/* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, +/* 0x5b0: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xa0, +/* 0x5b8: */ 0x00, 0x80, 0x80, 0xa0, 0x80, 0xa0, 0xb0, 0xb7, +/* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x5c8: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xa0, +/* 0x5d0: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xa0, +/* 0x5d8: */ 0x00, 0x80, 0x80, 0xa0, 0x80, 0xb0, 0xb0, 0xbb, +/* 0x5e0: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xb0, +/* 0x5e8: */ 0x80, 0x80, 0x80, 0xb0, 0x80, 0xb0, 0xb8, 0xbd, +/* 0x5f0: */ 0x80, 0x80, 0x80, 0xb8, 0xa0, 0xb8, 0xb8, 0xbe, +/* 0x5f8: */ 0xa0, 0xb8, 0xbc, 0xbf, 0xbe, 0xbf, 0xbf, 0xbf, +/* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, +/* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, +/* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x668: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0, +/* 0x670: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0, +/* 0x678: */ 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xcf, +/* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x698: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0, +/* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x6a8: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0, +/* 0x6b0: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0xc0, 0xc0, +/* 0x6b8: */ 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, 0xd7, +/* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x6c8: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xc0, 0xc0, +/* 0x6d0: */ 0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xc0, +/* 0x6d8: */ 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, 0xd0, 0xdb, +/* 0x6e0: */ 0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xd0, +/* 0x6e8: */ 0x80, 0xc0, 0xc0, 0xd0, 0xc0, 0xd0, 0xd8, 0xdd, +/* 0x6f0: */ 0xc0, 0xc0, 0xc0, 0xd0, 0xc0, 0xd8, 0xd8, 0xde, +/* 0x6f8: */ 0xc0, 0xd8, 0xdc, 0xdf, 0xdc, 0xdf, 0xdf, 0xdf, +/* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x718: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, +/* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x728: */ 0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xe0, +/* 0x730: */ 0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xe0, +/* 0x738: */ 0x80, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe7, +/* 0x740: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0, +/* 0x748: */ 0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xe0, +/* 0x750: */ 0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xe0, +/* 0x758: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xeb, +/* 0x760: */ 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, +/* 0x768: */ 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xed, +/* 0x770: */ 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe8, 0xe8, 0xee, +/* 0x778: */ 0xe0, 0xe8, 0xec, 0xef, 0xec, 0xef, 0xef, 0xef, +/* 0x780: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xc0, +/* 0x788: */ 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf0, +/* 0x790: */ 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, +/* 0x798: */ 0xc0, 0xe0, 0xe0, 0xf0, 0xe0, 0xf0, 0xf0, 0xf3, +/* 0x7a0: */ 0x80, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xf0, +/* 0x7a8: */ 0xc0, 0xe0, 0xe0, 0xf0, 0xe0, 0xf0, 0xf0, 0xf5, +/* 0x7b0: */ 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf6, +/* 0x7b8: */ 0xf0, 0xf0, 0xf4, 0xf7, 0xf4, 0xf7, 0xf7, 0xf7, +/* 0x7c0: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, +/* 0x7c8: */ 0xe0, 0xe0, 0xe0, 0xf8, 0xf0, 0xf8, 0xf8, 0xf9, +/* 0x7d0: */ 0xe0, 0xf0, 0xf0, 0xf8, 0xf0, 0xf8, 0xf8, 0xfa, +/* 0x7d8: */ 0xf0, 0xf8, 0xf8, 0xfb, 0xf8, 0xfb, 0xfb, 0xfb, +/* 0x7e0: */ 0xe0, 0xf0, 0xf0, 0xf8, 0xf0, 0xf8, 0xfc, 0xfc, +/* 0x7e8: */ 0xf8, 0xfc, 0xfc, 0xfd, 0xfc, 0xfd, 0xfd, 0xfd, +/* 0x7f0: */ 0xf8, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, +/* 0x7f8: */ 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +/* 0x800: */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, +/* 0x808: */ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfc, 0xf8, +/* 0x810: */ 0xfd, 0xfd, 0xfd, 0xfc, 0xfd, 0xfc, 0xfc, 0xf8, +/* 0x818: */ 0xfc, 0xfc, 0xfc, 0xf0, 0xf8, 0xf0, 0xf0, 0xe0, +/* 0x820: */ 0xfb, 0xfb, 0xfb, 0xf8, 0xfb, 0xf8, 0xf8, 0xf0, +/* 0x828: */ 0xfa, 0xf8, 0xf8, 0xf0, 0xf8, 0xf0, 0xf0, 0xe0, +/* 0x830: */ 0xf9, 0xf8, 0xf8, 0xf0, 0xf8, 0xf0, 0xe0, 0xe0, +/* 0x838: */ 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, +/* 0x840: */ 0xf7, 0xf7, 0xf7, 0xf4, 0xf7, 0xf4, 0xf0, 0xf0, +/* 0x848: */ 0xf6, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xe0, +/* 0x850: */ 0xf5, 0xf0, 0xf0, 0xe0, 0xf0, 0xe0, 0xe0, 0xc0, +/* 0x858: */ 0xf0, 0xe0, 0xe0, 0xc0, 0xe0, 0xc0, 0xc0, 0x80, +/* 0x860: */ 0xf3, 0xf0, 0xf0, 0xe0, 0xf0, 0xe0, 0xe0, 0xc0, +/* 0x868: */ 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, +/* 0x870: */ 0xf0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, +/* 0x878: */ 0xc0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, +/* 0x880: */ 0xef, 0xef, 0xef, 0xec, 0xef, 0xec, 0xe8, 0xe0, +/* 0x888: */ 0xee, 0xe8, 0xe8, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, +/* 0x890: */ 0xed, 0xe8, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, +/* 0x898: */ 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, +/* 0x8a0: */ 0xeb, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, +/* 0x8a8: */ 0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00, +/* 0x8b0: */ 0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00, +/* 0x8b8: */ 0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, +/* 0x8c0: */ 0xe7, 0xe0, 0xe0, 0xc0, 0xe0, 0xc0, 0xc0, 0x80, +/* 0x8c8: */ 0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00, +/* 0x8d0: */ 0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00, +/* 0x8d8: */ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8e0: */ 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, +/* 0x8e8: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f0: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x900: */ 0xdf, 0xdf, 0xdf, 0xdc, 0xdf, 0xdc, 0xd8, 0xc0, +/* 0x908: */ 0xde, 0xd8, 0xd8, 0xc0, 0xd8, 0xc0, 0xc0, 0xc0, +/* 0x910: */ 0xdd, 0xd8, 0xd0, 0xc0, 0xd0, 0xc0, 0xc0, 0x80, +/* 0x918: */ 0xd0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00, +/* 0x920: */ 0xdb, 0xd0, 0xd0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, +/* 0x928: */ 0xc0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00, +/* 0x930: */ 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, +/* 0x938: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x940: */ 0xd7, 0xd0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, +/* 0x948: */ 0xc0, 0xc0, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, +/* 0x950: */ 0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, +/* 0x958: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x960: */ 0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, +/* 0x968: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x970: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x980: */ 0xcf, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x00, +/* 0x988: */ 0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, +/* 0x990: */ 0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, +/* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a0: */ 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9c0: */ 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa00: */ 0xbf, 0xbf, 0xbf, 0xbe, 0xbf, 0xbc, 0xbc, 0xa0, +/* 0xa08: */ 0xbe, 0xbc, 0xb8, 0xa0, 0xb8, 0xa0, 0x80, 0x80, +/* 0xa10: */ 0xbd, 0xb8, 0xb0, 0x80, 0xb0, 0x80, 0x80, 0x80, +/* 0xa18: */ 0xb0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, +/* 0xa20: */ 0xbb, 0xb0, 0xb0, 0x80, 0xa0, 0x80, 0x80, 0x00, +/* 0xa28: */ 0xa0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, +/* 0xa30: */ 0xa0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, +/* 0xa38: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa40: */ 0xb7, 0xb0, 0xa0, 0x80, 0xa0, 0x80, 0x80, 0x00, +/* 0xa48: */ 0xa0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, +/* 0xa50: */ 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa60: */ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa80: */ 0xaf, 0xa0, 0xa0, 0x80, 0x80, 0x80, 0x80, 0x00, +/* 0xa88: */ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa90: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaa0: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xab8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xac0: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb00: */ 0x9f, 0x90, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, +/* 0xb08: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb10: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb20: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb40: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb80: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc00: */ 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7c, 0x7c, 0x70, +/* 0xc08: */ 0x7e, 0x7c, 0x78, 0x60, 0x78, 0x60, 0x60, 0x00, +/* 0xc10: */ 0x7d, 0x78, 0x78, 0x60, 0x70, 0x40, 0x40, 0x00, +/* 0xc18: */ 0x70, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc20: */ 0x7b, 0x78, 0x70, 0x40, 0x70, 0x40, 0x00, 0x00, +/* 0xc28: */ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc30: */ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc40: */ 0x77, 0x70, 0x70, 0x00, 0x60, 0x00, 0x00, 0x00, +/* 0xc48: */ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc50: */ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc60: */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc80: */ 0x6f, 0x60, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, +/* 0xc88: */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc90: */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd00: */ 0x5f, 0x58, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, +/* 0xd08: */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe00: */ 0x3f, 0x3c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xea0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xea8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xeb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xeb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xec0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xec8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xed0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xed8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xee0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xee8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xef0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xef8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xff0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xff8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/wave6581__ST.cpp b/MCUME_pico/pico64/reSID/wave6581__ST.cpp new file mode 100755 index 0000000..ac5f52d --- /dev/null +++ b/MCUME_pico/pico64/reSID/wave6581__ST.cpp @@ -0,0 +1,541 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 "wave.h" + +RESID_NAMESPACE_START + +//reg8 WaveformGenerator::wave6581__ST[] = +const reg8 wave6581__ST[] = +{ +/* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, +/* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x378: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3f0: */ 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, +/* 0x3f8: */ 0x1e, 0x1e, 0x1e, 0x1e, 0x1f, 0x1f, 0x3f, 0x3f, +/* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x578: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5f8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x1f, +/* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x668: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x670: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x678: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x698: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x718: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x728: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x730: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x738: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x740: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x748: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x750: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x758: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x760: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x768: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x770: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x778: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x780: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x788: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x790: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x798: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x7c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7e0: */ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, +/* 0x7e8: */ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, +/* 0x7f0: */ 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, +/* 0x7f8: */ 0x3e, 0x3e, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f, +/* 0x800: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x808: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x810: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x818: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x820: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x828: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x830: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x838: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x840: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x848: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x850: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x858: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x860: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x868: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x870: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x878: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x880: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x888: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x890: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x898: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x8c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0x900: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x908: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x910: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x918: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x920: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x928: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x930: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x938: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x940: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x948: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x950: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x958: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x960: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x968: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x970: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x980: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x988: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x990: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x9c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9f8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, +/* 0xa00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0xa80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xab8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0xac0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0xb00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0xb40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0xb80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbf0: */ 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, +/* 0xbf8: */ 0x1e, 0x1e, 0x1e, 0x1e, 0x1f, 0x1f, 0x3f, 0x3f, +/* 0xc00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0xc80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0xd00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdf8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x1f, +/* 0xe00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0xe80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xea0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xea8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xeb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xeb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0xec0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xec8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xed0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xed8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xee0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xee8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xef0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xef8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0xf00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0xf40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0xf80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0xfc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfe0: */ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, +/* 0xfe8: */ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, +/* 0xff0: */ 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, +/* 0xff8: */ 0x3e, 0x3e, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f, +}; + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/wave8580_PST.cpp b/MCUME_pico/pico64/reSID/wave8580_PST.cpp new file mode 100755 index 0000000..f43f34d --- /dev/null +++ b/MCUME_pico/pico64/reSID/wave8580_PST.cpp @@ -0,0 +1,541 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 "wave.h" + +RESID_NAMESPACE_START + +//reg8 WaveformGenerator::wave8580_PST[] = +const reg8 wave8580_PST[] = +{ +/* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x378: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, +/* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x578: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x668: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x670: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x678: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x698: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x718: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x728: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x730: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x738: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x740: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x748: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x750: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x758: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x760: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x768: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x770: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x778: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x780: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x788: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x790: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x798: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x70, +/* 0x7f0: */ 0x60, 0x20, 0x70, 0x70, 0x70, 0x70, 0x70, 0x78, +/* 0x7f8: */ 0x78, 0x78, 0x7c, 0x7c, 0x7e, 0x7e, 0x7f, 0x7f, +/* 0x800: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x808: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x810: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x818: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x820: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x828: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x830: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x838: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x840: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x848: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x850: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x858: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x860: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x868: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x870: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x878: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x880: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x888: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x890: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x898: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x900: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x908: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x910: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x918: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x920: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x928: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x930: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x938: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x940: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x948: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x950: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x958: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x960: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x968: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x970: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x980: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x988: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x990: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xab8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xac0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1e, 0x3f, +/* 0xc00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0xdf8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x8c, 0x9f, +/* 0xe00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, +/* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, +/* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, +/* 0xe68: */ 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xe70: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xe78: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xe80: */ 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, +/* 0xe88: */ 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xe90: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xe98: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xea0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xea8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xeb0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xeb8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xec0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xec8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xed0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xed8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xee0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xee8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc0, +/* 0xef0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xef8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xcf, +/* 0xf00: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf08: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf10: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf18: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf20: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf28: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf30: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf38: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf40: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf48: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf50: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf58: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf60: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf68: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, +/* 0xf70: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf78: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe3, +/* 0xf80: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf88: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf90: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf98: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xfa0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xfa8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xfb0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, +/* 0xfb8: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xfc0: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xfc8: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xfd0: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xfd8: */ 0xf0, 0xf0, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, +/* 0xfe0: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, +/* 0xfe8: */ 0xf8, 0xf8, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, +/* 0xff0: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfe, 0xfe, 0xfe, +/* 0xff8: */ 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/wave8580_PS_.cpp b/MCUME_pico/pico64/reSID/wave8580_PS_.cpp new file mode 100755 index 0000000..4b66a4b --- /dev/null +++ b/MCUME_pico/pico64/reSID/wave8580_PS_.cpp @@ -0,0 +1,541 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 "wave.h" + +RESID_NAMESPACE_START + +//reg8 WaveformGenerator::wave8580_PS_[] = +const reg8 wave8580_PS_[] = +{ +/* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, +/* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +/* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x1f, +/* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, +/* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x378: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, +/* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, +/* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, +/* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, +/* 0x3f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, +/* 0x3f8: */ 0x00, 0x0c, 0x1c, 0x3f, 0x1e, 0x3f, 0x3f, 0x3f, +/* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, +/* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x578: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +/* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, +/* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, +/* 0x5e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, +/* 0x5f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, +/* 0x5f8: */ 0x00, 0x00, 0x00, 0x5f, 0x0c, 0x5f, 0x5f, 0x5f, +/* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x668: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x670: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x678: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, +/* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x698: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, +/* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, +/* 0x6e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, +/* 0x6f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, +/* 0x6f8: */ 0x00, 0x40, 0x40, 0x6f, 0x40, 0x6f, 0x6f, 0x6f, +/* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x718: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x728: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x730: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x738: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, +/* 0x740: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x748: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x750: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x758: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x61, +/* 0x760: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0x768: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x70, +/* 0x770: */ 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x70, +/* 0x778: */ 0x40, 0x60, 0x60, 0x77, 0x60, 0x77, 0x77, 0x77, +/* 0x780: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x788: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0x790: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, +/* 0x798: */ 0x00, 0x40, 0x40, 0x60, 0x40, 0x60, 0x60, 0x79, +/* 0x7a0: */ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x60, +/* 0x7a8: */ 0x40, 0x40, 0x40, 0x60, 0x60, 0x60, 0x60, 0x78, +/* 0x7b0: */ 0x40, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, +/* 0x7b8: */ 0x60, 0x70, 0x70, 0x78, 0x70, 0x79, 0x7b, 0x7b, +/* 0x7c0: */ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, +/* 0x7c8: */ 0x60, 0x60, 0x60, 0x70, 0x60, 0x70, 0x70, 0x7c, +/* 0x7d0: */ 0x60, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x7c, +/* 0x7d8: */ 0x70, 0x78, 0x78, 0x7c, 0x78, 0x7c, 0x7c, 0x7d, +/* 0x7e0: */ 0x70, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x7c, +/* 0x7e8: */ 0x78, 0x7c, 0x7c, 0x7e, 0x7c, 0x7e, 0x7e, 0x7e, +/* 0x7f0: */ 0x7c, 0x7c, 0x7c, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, +/* 0x7f8: */ 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, +/* 0x800: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x808: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x810: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x818: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x820: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x828: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x830: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x838: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x840: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x848: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x850: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x858: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x860: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x868: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x870: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x878: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0x880: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x888: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x890: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x898: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x8c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, +/* 0x900: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x908: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x910: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x918: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x920: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x928: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x930: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x938: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x940: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x948: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x950: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x958: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x960: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x968: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x970: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, +/* 0x980: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x988: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x990: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, +/* 0x9c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x8d, +/* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x9e8: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x8e, +/* 0x9f0: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x8f, +/* 0x9f8: */ 0x80, 0x80, 0x80, 0x9f, 0x80, 0x9f, 0x9f, 0x9f, +/* 0xa00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0xa40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0xa78: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x87, +/* 0xa80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0xaa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0xab8: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x83, +/* 0xac0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, +/* 0xad8: */ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, +/* 0xae0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xae8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x84, +/* 0xaf0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x87, +/* 0xaf8: */ 0x80, 0x80, 0x80, 0x87, 0x80, 0x8f, 0xaf, 0xaf, +/* 0xb00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0xb10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0xb18: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xb20: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, +/* 0xb28: */ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xb30: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xb38: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x83, +/* 0xb40: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xb48: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xb50: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xb58: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, +/* 0xb60: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xb68: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xa0, +/* 0xb70: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xa0, +/* 0xb78: */ 0x80, 0x80, 0x80, 0xa0, 0x80, 0xa3, 0xb7, 0xb7, +/* 0xb80: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xb88: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xb90: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xb98: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xb1, +/* 0xba0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xba8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xb0, +/* 0xbb0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xb0, +/* 0xbb8: */ 0x80, 0xa0, 0xa0, 0xb0, 0xa0, 0xb8, 0xb9, 0xbb, +/* 0xbc0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xa0, +/* 0xbc8: */ 0x80, 0x80, 0x80, 0xa0, 0x80, 0xa0, 0xa0, 0xb8, +/* 0xbd0: */ 0x80, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xb8, +/* 0xbd8: */ 0xa0, 0xb0, 0xb0, 0xb8, 0xb0, 0xbc, 0xbc, 0xbd, +/* 0xbe0: */ 0xa0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb8, 0xb8, 0xbc, +/* 0xbe8: */ 0xb0, 0xb8, 0xb8, 0xbc, 0xb8, 0xbc, 0xbe, 0xbe, +/* 0xbf0: */ 0xb8, 0xbc, 0xbc, 0xbe, 0xbc, 0xbe, 0xbe, 0xbf, +/* 0xbf8: */ 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, +/* 0xc00: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, +/* 0xc08: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, +/* 0xc10: */ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc18: */ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc20: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc28: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc30: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc38: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, +/* 0xc40: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc48: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc50: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc58: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc60: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc68: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc70: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc78: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc7, +/* 0xc80: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc88: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc90: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xc98: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xca0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xca8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xcb0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xcb8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc3, +/* 0xcc0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xcc8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, +/* 0xcd0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, +/* 0xcd8: */ 0x80, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xc1, +/* 0xce0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, +/* 0xce8: */ 0x80, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xcf0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc7, +/* 0xcf8: */ 0xc0, 0xc0, 0xc0, 0xc7, 0xc0, 0xcf, 0xcf, 0xcf, +/* 0xd00: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xd08: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xd10: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xd18: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, +/* 0xd20: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xd28: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, +/* 0xd30: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc0, +/* 0xd38: */ 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc3, +/* 0xd40: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, +/* 0xd48: */ 0x80, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xc0, +/* 0xd50: */ 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xd58: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, +/* 0xd60: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xd68: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xd70: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xd78: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc7, 0xd7, +/* 0xd80: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xd88: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xd90: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xd98: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xda0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xda8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, +/* 0xdb0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, +/* 0xdb8: */ 0xc0, 0xc0, 0xc0, 0xd0, 0xc0, 0xd0, 0xd8, 0xdb, +/* 0xdc0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xdc8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd8, +/* 0xdd0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd8, +/* 0xdd8: */ 0xc0, 0xc0, 0xc0, 0xd8, 0xd0, 0xd8, 0xd8, 0xdd, +/* 0xde0: */ 0xc0, 0xc0, 0xc0, 0xd0, 0xc0, 0xd0, 0xd0, 0xdc, +/* 0xde8: */ 0xd0, 0xd8, 0xd8, 0xdc, 0xd8, 0xdc, 0xdc, 0xde, +/* 0xdf0: */ 0xd8, 0xdc, 0xdc, 0xde, 0xdc, 0xde, 0xde, 0xdf, +/* 0xdf8: */ 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, +/* 0xe00: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xe08: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xe10: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xe18: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xe20: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xe28: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xe30: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xe38: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe3, +/* 0xe40: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xe48: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xe50: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, +/* 0xe58: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe1, +/* 0xe60: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, +/* 0xe68: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xe70: */ 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xe78: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe3, 0xe7, +/* 0xe80: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, +/* 0xe88: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe0, +/* 0xe90: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe0, +/* 0xe98: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xea0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xea8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xeb0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xeb8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xeb, +/* 0xec0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xec8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xed0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xed8: */ 0xe0, 0xe0, 0xe0, 0xe8, 0xe0, 0xe8, 0xe8, 0xed, +/* 0xee0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xec, +/* 0xee8: */ 0xe0, 0xe0, 0xe0, 0xec, 0xe8, 0xec, 0xec, 0xee, +/* 0xef0: */ 0xe8, 0xe8, 0xe8, 0xec, 0xec, 0xee, 0xee, 0xef, +/* 0xef8: */ 0xec, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, +/* 0xf00: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf08: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf10: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf18: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, +/* 0xf20: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, +/* 0xf28: */ 0xe0, 0xe0, 0xe0, 0xf0, 0xe0, 0xf0, 0xf0, 0xf0, +/* 0xf30: */ 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xf38: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf3, +/* 0xf40: */ 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xf48: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xf50: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xf58: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf5, +/* 0xf60: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xf68: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf4, 0xf4, 0xf6, +/* 0xf70: */ 0xf0, 0xf0, 0xf0, 0xf4, 0xf0, 0xf4, 0xf6, 0xf7, +/* 0xf78: */ 0xf4, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, +/* 0xf80: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, +/* 0xf88: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, 0xf8, 0xf8, +/* 0xf90: */ 0xf0, 0xf0, 0xf0, 0xf8, 0xf0, 0xf8, 0xf8, 0xf8, +/* 0xf98: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, +/* 0xfa0: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, +/* 0xfa8: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xfa, +/* 0xfb0: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xfb, +/* 0xfb8: */ 0xf8, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, +/* 0xfc0: */ 0xf8, 0xf8, 0xf8, 0xfc, 0xf8, 0xfc, 0xfc, 0xfc, +/* 0xfc8: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, +/* 0xfd0: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, +/* 0xfd8: */ 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, +/* 0xfe0: */ 0xfc, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, +/* 0xfe8: */ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, +/* 0xff0: */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +/* 0xff8: */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/wave8580_P_T.cpp b/MCUME_pico/pico64/reSID/wave8580_P_T.cpp new file mode 100755 index 0000000..344e539 --- /dev/null +++ b/MCUME_pico/pico64/reSID/wave8580_P_T.cpp @@ -0,0 +1,541 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 "wave.h" + +RESID_NAMESPACE_START + +//reg8 WaveformGenerator::wave8580_P_T[] = +const reg8 wave8580_P_T[] = +{ +/* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +/* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f8: */ 0x00, 0x00, 0x00, 0x1c, 0x00, 0x3c, 0x3f, 0x3f, +/* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x5e, 0x5f, +/* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0x378: */ 0x00, 0x00, 0x00, 0x40, 0x40, 0x60, 0x60, 0x6f, +/* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, +/* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, +/* 0x3b0: */ 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x60, +/* 0x3b8: */ 0x40, 0x40, 0x60, 0x60, 0x60, 0x60, 0x70, 0x77, +/* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, +/* 0x3c8: */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x60, 0x60, 0x60, +/* 0x3d0: */ 0x40, 0x40, 0x40, 0x60, 0x60, 0x60, 0x60, 0x70, +/* 0x3d8: */ 0x60, 0x60, 0x60, 0x70, 0x70, 0x70, 0x78, 0x7b, +/* 0x3e0: */ 0x60, 0x60, 0x60, 0x70, 0x60, 0x70, 0x70, 0x70, +/* 0x3e8: */ 0x70, 0x70, 0x70, 0x78, 0x78, 0x78, 0x78, 0x7c, +/* 0x3f0: */ 0x78, 0x78, 0x78, 0x7c, 0x78, 0x7c, 0x7c, 0x7e, +/* 0x3f8: */ 0x7c, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, +/* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, +/* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x4d8: */ 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x4e0: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x4e8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x4f0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x4f8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x8e, 0x9f, +/* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +/* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x528: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, +/* 0x530: */ 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x538: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x540: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, +/* 0x548: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x550: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x558: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x560: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x568: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x570: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x578: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xaf, +/* 0x580: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x588: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x590: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x598: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x5a0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x5a8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x5b0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x5b8: */ 0x80, 0x80, 0x80, 0xa0, 0xa0, 0xa0, 0xa0, 0xb7, +/* 0x5c0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x5c8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xa0, +/* 0x5d0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xa0, 0xa0, +/* 0x5d8: */ 0xa0, 0xa0, 0xa0, 0xb0, 0xa0, 0xb0, 0xb0, 0xbb, +/* 0x5e0: */ 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xb0, 0xb0, +/* 0x5e8: */ 0xa0, 0xb0, 0xb0, 0xb8, 0xb0, 0xb8, 0xb8, 0xbc, +/* 0x5f0: */ 0xb0, 0xb8, 0xb8, 0xb8, 0xb8, 0xbc, 0xbc, 0xbe, +/* 0x5f8: */ 0xbc, 0xbc, 0xbe, 0xbf, 0xbe, 0xbf, 0xbf, 0xbf, +/* 0x600: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x608: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x610: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x618: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x620: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x628: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x630: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x638: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc0, +/* 0x640: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x648: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x650: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, +/* 0x658: */ 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x660: */ 0x80, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xc0, +/* 0x668: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x670: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x678: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xcf, +/* 0x680: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc0, +/* 0x688: */ 0xc0, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x690: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x698: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x6a0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x6a8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x6b0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x6b8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd7, +/* 0x6c0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x6c8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x6d0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x6d8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, 0xd0, 0xd9, +/* 0x6e0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, +/* 0x6e8: */ 0xc0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd8, 0xd8, 0xdc, +/* 0x6f0: */ 0xd0, 0xd0, 0xd8, 0xd8, 0xd8, 0xdc, 0xdc, 0xde, +/* 0x6f8: */ 0xdc, 0xdc, 0xde, 0xdf, 0xde, 0xdf, 0xdf, 0xdf, +/* 0x700: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x708: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x710: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x718: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe0, +/* 0x720: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, +/* 0x728: */ 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x730: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x738: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe7, +/* 0x740: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x748: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x750: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x758: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe8, +/* 0x760: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x768: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe8, 0xec, +/* 0x770: */ 0xe0, 0xe0, 0xe0, 0xe8, 0xe8, 0xe8, 0xec, 0xee, +/* 0x778: */ 0xec, 0xec, 0xec, 0xee, 0xee, 0xef, 0xef, 0xef, +/* 0x780: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x788: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, +/* 0x790: */ 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0x798: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0x7a0: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0x7a8: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf4, +/* 0x7b0: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf4, +/* 0x7b8: */ 0xf0, 0xf4, 0xf4, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, +/* 0x7c0: */ 0xf0, 0xf0, 0xf0, 0xf8, 0xf0, 0xf8, 0xf8, 0xf8, +/* 0x7c8: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, +/* 0x7d0: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, +/* 0x7d8: */ 0xf8, 0xf8, 0xf8, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, +/* 0x7e0: */ 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, +/* 0x7e8: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, +/* 0x7f0: */ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, +/* 0x7f8: */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +/* 0x800: */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +/* 0x808: */ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfc, +/* 0x810: */ 0xfd, 0xfd, 0xfd, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, +/* 0x818: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xf8, +/* 0x820: */ 0xfb, 0xfb, 0xfb, 0xfa, 0xfa, 0xf8, 0xf8, 0xf8, +/* 0x828: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, +/* 0x830: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, +/* 0x838: */ 0xf8, 0xf8, 0xf8, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0x840: */ 0xf7, 0xf7, 0xf7, 0xf6, 0xf6, 0xf4, 0xf4, 0xf0, +/* 0x848: */ 0xf4, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0x850: */ 0xf4, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0x858: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0x860: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0x868: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, +/* 0x870: */ 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x878: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x880: */ 0xef, 0xef, 0xef, 0xee, 0xee, 0xec, 0xec, 0xe8, +/* 0x888: */ 0xee, 0xec, 0xe8, 0xe8, 0xe8, 0xe0, 0xe0, 0xe0, +/* 0x890: */ 0xec, 0xe8, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x898: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x8a0: */ 0xe8, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x8a8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x8b0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x8b8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x8c0: */ 0xe7, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x8c8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0x8d0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, +/* 0x8d8: */ 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x8e0: */ 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x8e8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x8f0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x8f8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x900: */ 0xdf, 0xdf, 0xdf, 0xde, 0xdf, 0xde, 0xdc, 0xdc, +/* 0x908: */ 0xde, 0xdc, 0xdc, 0xd8, 0xd8, 0xd8, 0xd0, 0xd0, +/* 0x910: */ 0xdc, 0xd8, 0xd8, 0xd0, 0xd0, 0xd0, 0xd0, 0xc0, +/* 0x918: */ 0xd0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x920: */ 0xd9, 0xd0, 0xd0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x928: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x930: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x938: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x940: */ 0xd7, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x948: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x950: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x958: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x960: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x968: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x970: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, +/* 0x978: */ 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x980: */ 0xcf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x988: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x990: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0x998: */ 0xc0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x80, +/* 0x9a0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, +/* 0x9a8: */ 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x9b0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x9b8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x9c0: */ 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x9c8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x9d0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x9d8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x9e0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x9e8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x9f0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0x9f8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa00: */ 0xbf, 0xbf, 0xbf, 0xbe, 0xbf, 0xbe, 0xbc, 0xbc, +/* 0xa08: */ 0xbe, 0xbc, 0xbc, 0xb8, 0xb8, 0xb8, 0xb8, 0xb0, +/* 0xa10: */ 0xbc, 0xb8, 0xb8, 0xb0, 0xb8, 0xb0, 0xb0, 0xb0, +/* 0xa18: */ 0xb0, 0xb0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, +/* 0xa20: */ 0xbb, 0xb0, 0xb0, 0xa0, 0xb0, 0xa0, 0xa0, 0xa0, +/* 0xa28: */ 0xa0, 0xa0, 0xa0, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa30: */ 0xa0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa38: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa40: */ 0xb7, 0xb0, 0xa0, 0xa0, 0xa0, 0x80, 0x80, 0x80, +/* 0xa48: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa50: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa58: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa60: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa68: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa70: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa78: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa80: */ 0xaf, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa88: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa90: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xa98: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xaa0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xaa8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xab0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xab8: */ 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, +/* 0xac0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xac8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, +/* 0xad0: */ 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, +/* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae0: */ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb00: */ 0x9f, 0x9e, 0x88, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xb08: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xb10: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xb18: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, +/* 0xb20: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, +/* 0xb28: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb30: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb40: */ 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, +/* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb80: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc00: */ 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7c, +/* 0xc08: */ 0x7e, 0x7c, 0x7c, 0x78, 0x7c, 0x78, 0x78, 0x78, +/* 0xc10: */ 0x7c, 0x78, 0x78, 0x78, 0x78, 0x70, 0x70, 0x70, +/* 0xc18: */ 0x78, 0x70, 0x70, 0x60, 0x70, 0x60, 0x60, 0x60, +/* 0xc20: */ 0x7b, 0x78, 0x70, 0x70, 0x70, 0x60, 0x60, 0x60, +/* 0xc28: */ 0x70, 0x60, 0x60, 0x60, 0x60, 0x40, 0x40, 0x40, +/* 0xc30: */ 0x60, 0x60, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, +/* 0xc38: */ 0x40, 0x40, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, +/* 0xc40: */ 0x77, 0x70, 0x60, 0x60, 0x60, 0x60, 0x40, 0x40, +/* 0xc48: */ 0x60, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, +/* 0xc50: */ 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc60: */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc80: */ 0x6f, 0x64, 0x60, 0x40, 0x40, 0x00, 0x00, 0x00, +/* 0xc88: */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd00: */ 0x5f, 0x5e, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe00: */ 0x3f, 0x3f, 0x3e, 0x00, 0x1c, 0x00, 0x00, 0x00, +/* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xea0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xea8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xeb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xeb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xec0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xec8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xed0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xed8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xee0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xee8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xef0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xef8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf00: */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xf98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xfe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xff0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xff8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/reSID/wave8580__ST.cpp b/MCUME_pico/pico64/reSID/wave8580__ST.cpp new file mode 100755 index 0000000..e2ca522 --- /dev/null +++ b/MCUME_pico/pico64/reSID/wave8580__ST.cpp @@ -0,0 +1,541 @@ +// --------------------------------------------------------------------------- +// This file is part of reSID, a MOS6581 SID emulator engine. +// Copyright (C) 2004 Dag Lem +// +// 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 "wave.h" + +RESID_NAMESPACE_START + +//reg8 WaveformGenerator::wave8580__ST[] = +const reg8 wave8580__ST[] = +{ +/* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x1f8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, +/* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x378: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x3f0: */ 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, +/* 0x3f8: */ 0x1e, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, +/* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x4f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x578: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x5f8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x1f, +/* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x668: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x670: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x678: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x698: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x6f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x718: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x728: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x730: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x738: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x740: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x748: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x750: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x758: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x760: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x768: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x770: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x778: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x780: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x788: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x790: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x798: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0x7c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x7e0: */ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, +/* 0x7e8: */ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, +/* 0x7f0: */ 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3e, +/* 0x7f8: */ 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, +/* 0x800: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x808: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x810: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x818: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x820: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x828: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x830: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x838: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x840: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x848: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x850: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x858: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x860: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x868: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x870: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x878: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x880: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x888: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x890: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x898: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0x900: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x908: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x910: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x918: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x920: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x928: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x930: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x938: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x940: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x948: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x950: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x958: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x960: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x968: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x970: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0x980: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x988: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x990: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x9f8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, +/* 0xa00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0xa80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xab8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xac0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0xb00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0xb80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xbf0: */ 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, +/* 0xbf8: */ 0x1e, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f, 0x3f, 0x3f, +/* 0xc00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0xc80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, +/* 0xd00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +/* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xdf8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x1f, 0x1f, +/* 0xe00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0xe78: */ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x83, 0x83, +/* 0xe80: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xe88: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xe90: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xe98: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xea0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xea8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xeb0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xeb8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xec0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xec8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xed0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xed8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xee0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xee8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xef0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* 0xef8: */ 0x80, 0x80, 0x80, 0x80, 0x87, 0x87, 0x87, 0x8f, +/* 0xf00: */ 0xc0, 0xe0, 0xe0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, +/* 0xf08: */ 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf10: */ 0xc0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf18: */ 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/* 0xf20: */ 0xc0, 0xe0, 0xe0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, +/* 0xf28: */ 0xe0, 0xe0, 0xe0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, +/* 0xf30: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf38: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf40: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf48: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf50: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf58: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf60: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf68: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf70: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, +/* 0xf78: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe3, 0xe3, +/* 0xf80: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xf88: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xf90: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xf98: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xfa0: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xfa8: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xfb0: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* 0xfb8: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, +/* 0xfc0: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, +/* 0xfc8: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, +/* 0xfd0: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, +/* 0xfd8: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, +/* 0xfe0: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, +/* 0xfe8: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, +/* 0xff0: */ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, +/* 0xff8: */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +RESID_NAMESPACE_STOP diff --git a/MCUME_pico/pico64/roms.cpp b/MCUME_pico/pico64/roms.cpp new file mode 100644 index 0000000..8347112 --- /dev/null +++ b/MCUME_pico/pico64/roms.cpp @@ -0,0 +1,1899 @@ +#include +#include +#include "roms.h" + +#define PROGMEM +/* +bin2h basic.901226-01.bin -id=rom_basic > roms.h +bin2h kernal.901227-03.bin -id=rom_kernal >> roms.h +bin2h characters.901225-01.bin -id=rom_characters >> roms.h +*/ + +//file auto-generated from basic.901226-01.bin by bin2h.exe +const size_t rom_basic_len = 8192; +const unsigned char PROGMEM rom_basic[8192]= +{ + 0x94,0xE3,0x7B,0xE3,0x43,0x42,0x4D,0x42,0x41,0x53,0x49, + 0x43,0x30,0xA8,0x41,0xA7,0x1D,0xAD,0xF7,0xA8,0xA4,0xAB, + 0xBE,0xAB,0x80,0xB0,0x05,0xAC,0xA4,0xA9,0x9F,0xA8,0x70, + 0xA8,0x27,0xA9,0x1C,0xA8,0x82,0xA8,0xD1,0xA8,0x3A,0xA9, + 0x2E,0xA8,0x4A,0xA9,0x2C,0xB8,0x67,0xE1,0x55,0xE1,0x64, + 0xE1,0xB2,0xB3,0x23,0xB8,0x7F,0xAA,0x9F,0xAA,0x56,0xA8, + 0x9B,0xA6,0x5D,0xA6,0x85,0xAA,0x29,0xE1,0xBD,0xE1,0xC6, + 0xE1,0x7A,0xAB,0x41,0xA6,0x39,0xBC,0xCC,0xBC,0x58,0xBC, + 0x10,0x03,0x7D,0xB3,0x9E,0xB3,0x71,0xBF,0x97,0xE0,0xEA, + 0xB9,0xED,0xBF,0x64,0xE2,0x6B,0xE2,0xB4,0xE2,0x0E,0xE3, + 0x0D,0xB8,0x7C,0xB7,0x65,0xB4,0xAD,0xB7,0x8B,0xB7,0xEC, + 0xB6,0x00,0xB7,0x2C,0xB7,0x37,0xB7,0x79,0x69,0xB8,0x79, + 0x52,0xB8,0x7B,0x2A,0xBA,0x7B,0x11,0xBB,0x7F,0x7A,0xBF, + 0x50,0xE8,0xAF,0x46,0xE5,0xAF,0x7D,0xB3,0xBF,0x5A,0xD3, + 0xAE,0x64,0x15,0xB0,0x45,0x4E,0xC4,0x46,0x4F,0xD2,0x4E, + 0x45,0x58,0xD4,0x44,0x41,0x54,0xC1,0x49,0x4E,0x50,0x55, + 0x54,0xA3,0x49,0x4E,0x50,0x55,0xD4,0x44,0x49,0xCD,0x52, + 0x45,0x41,0xC4,0x4C,0x45,0xD4,0x47,0x4F,0x54,0xCF,0x52, + 0x55,0xCE,0x49,0xC6,0x52,0x45,0x53,0x54,0x4F,0x52,0xC5, + 0x47,0x4F,0x53,0x55,0xC2,0x52,0x45,0x54,0x55,0x52,0xCE, + 0x52,0x45,0xCD,0x53,0x54,0x4F,0xD0,0x4F,0xCE,0x57,0x41, + 0x49,0xD4,0x4C,0x4F,0x41,0xC4,0x53,0x41,0x56,0xC5,0x56, + 0x45,0x52,0x49,0x46,0xD9,0x44,0x45,0xC6,0x50,0x4F,0x4B, + 0xC5,0x50,0x52,0x49,0x4E,0x54,0xA3,0x50,0x52,0x49,0x4E, + 0xD4,0x43,0x4F,0x4E,0xD4,0x4C,0x49,0x53,0xD4,0x43,0x4C, + 0xD2,0x43,0x4D,0xC4,0x53,0x59,0xD3,0x4F,0x50,0x45,0xCE, + 0x43,0x4C,0x4F,0x53,0xC5,0x47,0x45,0xD4,0x4E,0x45,0xD7, + 0x54,0x41,0x42,0xA8,0x54,0xCF,0x46,0xCE,0x53,0x50,0x43, + 0xA8,0x54,0x48,0x45,0xCE,0x4E,0x4F,0xD4,0x53,0x54,0x45, + 0xD0,0xAB,0xAD,0xAA,0xAF,0xDE,0x41,0x4E,0xC4,0x4F,0xD2, + 0xBE,0xBD,0xBC,0x53,0x47,0xCE,0x49,0x4E,0xD4,0x41,0x42, + 0xD3,0x55,0x53,0xD2,0x46,0x52,0xC5,0x50,0x4F,0xD3,0x53, + 0x51,0xD2,0x52,0x4E,0xC4,0x4C,0x4F,0xC7,0x45,0x58,0xD0, + 0x43,0x4F,0xD3,0x53,0x49,0xCE,0x54,0x41,0xCE,0x41,0x54, + 0xCE,0x50,0x45,0x45,0xCB,0x4C,0x45,0xCE,0x53,0x54,0x52, + 0xA4,0x56,0x41,0xCC,0x41,0x53,0xC3,0x43,0x48,0x52,0xA4, + 0x4C,0x45,0x46,0x54,0xA4,0x52,0x49,0x47,0x48,0x54,0xA4, + 0x4D,0x49,0x44,0xA4,0x47,0xCF,0x00,0x54,0x4F,0x4F,0x20, + 0x4D,0x41,0x4E,0x59,0x20,0x46,0x49,0x4C,0x45,0xD3,0x46, + 0x49,0x4C,0x45,0x20,0x4F,0x50,0x45,0xCE,0x46,0x49,0x4C, + 0x45,0x20,0x4E,0x4F,0x54,0x20,0x4F,0x50,0x45,0xCE,0x46, + 0x49,0x4C,0x45,0x20,0x4E,0x4F,0x54,0x20,0x46,0x4F,0x55, + 0x4E,0xC4,0x44,0x45,0x56,0x49,0x43,0x45,0x20,0x4E,0x4F, + 0x54,0x20,0x50,0x52,0x45,0x53,0x45,0x4E,0xD4,0x4E,0x4F, + 0x54,0x20,0x49,0x4E,0x50,0x55,0x54,0x20,0x46,0x49,0x4C, + 0xC5,0x4E,0x4F,0x54,0x20,0x4F,0x55,0x54,0x50,0x55,0x54, + 0x20,0x46,0x49,0x4C,0xC5,0x4D,0x49,0x53,0x53,0x49,0x4E, + 0x47,0x20,0x46,0x49,0x4C,0x45,0x20,0x4E,0x41,0x4D,0xC5, + 0x49,0x4C,0x4C,0x45,0x47,0x41,0x4C,0x20,0x44,0x45,0x56, + 0x49,0x43,0x45,0x20,0x4E,0x55,0x4D,0x42,0x45,0xD2,0x4E, + 0x45,0x58,0x54,0x20,0x57,0x49,0x54,0x48,0x4F,0x55,0x54, + 0x20,0x46,0x4F,0xD2,0x53,0x59,0x4E,0x54,0x41,0xD8,0x52, + 0x45,0x54,0x55,0x52,0x4E,0x20,0x57,0x49,0x54,0x48,0x4F, + 0x55,0x54,0x20,0x47,0x4F,0x53,0x55,0xC2,0x4F,0x55,0x54, + 0x20,0x4F,0x46,0x20,0x44,0x41,0x54,0xC1,0x49,0x4C,0x4C, + 0x45,0x47,0x41,0x4C,0x20,0x51,0x55,0x41,0x4E,0x54,0x49, + 0x54,0xD9,0x4F,0x56,0x45,0x52,0x46,0x4C,0x4F,0xD7,0x4F, + 0x55,0x54,0x20,0x4F,0x46,0x20,0x4D,0x45,0x4D,0x4F,0x52, + 0xD9,0x55,0x4E,0x44,0x45,0x46,0x27,0x44,0x20,0x53,0x54, + 0x41,0x54,0x45,0x4D,0x45,0x4E,0xD4,0x42,0x41,0x44,0x20, + 0x53,0x55,0x42,0x53,0x43,0x52,0x49,0x50,0xD4,0x52,0x45, + 0x44,0x49,0x4D,0x27,0x44,0x20,0x41,0x52,0x52,0x41,0xD9, + 0x44,0x49,0x56,0x49,0x53,0x49,0x4F,0x4E,0x20,0x42,0x59, + 0x20,0x5A,0x45,0x52,0xCF,0x49,0x4C,0x4C,0x45,0x47,0x41, + 0x4C,0x20,0x44,0x49,0x52,0x45,0x43,0xD4,0x54,0x59,0x50, + 0x45,0x20,0x4D,0x49,0x53,0x4D,0x41,0x54,0x43,0xC8,0x53, + 0x54,0x52,0x49,0x4E,0x47,0x20,0x54,0x4F,0x4F,0x20,0x4C, + 0x4F,0x4E,0xC7,0x46,0x49,0x4C,0x45,0x20,0x44,0x41,0x54, + 0xC1,0x46,0x4F,0x52,0x4D,0x55,0x4C,0x41,0x20,0x54,0x4F, + 0x4F,0x20,0x43,0x4F,0x4D,0x50,0x4C,0x45,0xD8,0x43,0x41, + 0x4E,0x27,0x54,0x20,0x43,0x4F,0x4E,0x54,0x49,0x4E,0x55, + 0xC5,0x55,0x4E,0x44,0x45,0x46,0x27,0x44,0x20,0x46,0x55, + 0x4E,0x43,0x54,0x49,0x4F,0xCE,0x56,0x45,0x52,0x49,0x46, + 0xD9,0x4C,0x4F,0x41,0xC4,0x9E,0xA1,0xAC,0xA1,0xB5,0xA1, + 0xC2,0xA1,0xD0,0xA1,0xE2,0xA1,0xF0,0xA1,0xFF,0xA1,0x10, + 0xA2,0x25,0xA2,0x35,0xA2,0x3B,0xA2,0x4F,0xA2,0x5A,0xA2, + 0x6A,0xA2,0x72,0xA2,0x7F,0xA2,0x90,0xA2,0x9D,0xA2,0xAA, + 0xA2,0xBA,0xA2,0xC8,0xA2,0xD5,0xA2,0xE4,0xA2,0xED,0xA2, + 0x00,0xA3,0x0E,0xA3,0x1E,0xA3,0x24,0xA3,0x83,0xA3,0x0D, + 0x4F,0x4B,0x0D,0x00,0x20,0x20,0x45,0x52,0x52,0x4F,0x52, + 0x00,0x20,0x49,0x4E,0x20,0x00,0x0D,0x0A,0x52,0x45,0x41, + 0x44,0x59,0x2E,0x0D,0x0A,0x00,0x0D,0x0A,0x42,0x52,0x45, + 0x41,0x4B,0x00,0xA0,0xBA,0xE8,0xE8,0xE8,0xE8,0xBD,0x01, + 0x01,0xC9,0x81,0xD0,0x21,0xA5,0x4A,0xD0,0x0A,0xBD,0x02, + 0x01,0x85,0x49,0xBD,0x03,0x01,0x85,0x4A,0xDD,0x03,0x01, + 0xD0,0x07,0xA5,0x49,0xDD,0x02,0x01,0xF0,0x07,0x8A,0x18, + 0x69,0x12,0xAA,0xD0,0xD8,0x60,0x20,0x08,0xA4,0x85,0x31, + 0x84,0x32,0x38,0xA5,0x5A,0xE5,0x5F,0x85,0x22,0xA8,0xA5, + 0x5B,0xE5,0x60,0xAA,0xE8,0x98,0xF0,0x23,0xA5,0x5A,0x38, + 0xE5,0x22,0x85,0x5A,0xB0,0x03,0xC6,0x5B,0x38,0xA5,0x58, + 0xE5,0x22,0x85,0x58,0xB0,0x08,0xC6,0x59,0x90,0x04,0xB1, + 0x5A,0x91,0x58,0x88,0xD0,0xF9,0xB1,0x5A,0x91,0x58,0xC6, + 0x5B,0xC6,0x59,0xCA,0xD0,0xF2,0x60,0x0A,0x69,0x3E,0xB0, + 0x35,0x85,0x22,0xBA,0xE4,0x22,0x90,0x2E,0x60,0xC4,0x34, + 0x90,0x28,0xD0,0x04,0xC5,0x33,0x90,0x22,0x48,0xA2,0x09, + 0x98,0x48,0xB5,0x57,0xCA,0x10,0xFA,0x20,0x26,0xB5,0xA2, + 0xF7,0x68,0x95,0x61,0xE8,0x30,0xFA,0x68,0xA8,0x68,0xC4, + 0x34,0x90,0x06,0xD0,0x05,0xC5,0x33,0xB0,0x01,0x60,0xA2, + 0x10,0x6C,0x00,0x03,0x8A,0x0A,0xAA,0xBD,0x26,0xA3,0x85, + 0x22,0xBD,0x27,0xA3,0x85,0x23,0x20,0xCC,0xFF,0xA9,0x00, + 0x85,0x13,0x20,0xD7,0xAA,0x20,0x45,0xAB,0xA0,0x00,0xB1, + 0x22,0x48,0x29,0x7F,0x20,0x47,0xAB,0xC8,0x68,0x10,0xF4, + 0x20,0x7A,0xA6,0xA9,0x69,0xA0,0xA3,0x20,0x1E,0xAB,0xA4, + 0x3A,0xC8,0xF0,0x03,0x20,0xC2,0xBD,0xA9,0x76,0xA0,0xA3, + 0x20,0x1E,0xAB,0xA9,0x80,0x20,0x90,0xFF,0x6C,0x02,0x03, + 0x20,0x60,0xA5,0x86,0x7A,0x84,0x7B,0x20,0x73,0x00,0xAA, + 0xF0,0xF0,0xA2,0xFF,0x86,0x3A,0x90,0x06,0x20,0x79,0xA5, + 0x4C,0xE1,0xA7,0x20,0x6B,0xA9,0x20,0x79,0xA5,0x84,0x0B, + 0x20,0x13,0xA6,0x90,0x44,0xA0,0x01,0xB1,0x5F,0x85,0x23, + 0xA5,0x2D,0x85,0x22,0xA5,0x60,0x85,0x25,0xA5,0x5F,0x88, + 0xF1,0x5F,0x18,0x65,0x2D,0x85,0x2D,0x85,0x24,0xA5,0x2E, + 0x69,0xFF,0x85,0x2E,0xE5,0x60,0xAA,0x38,0xA5,0x5F,0xE5, + 0x2D,0xA8,0xB0,0x03,0xE8,0xC6,0x25,0x18,0x65,0x22,0x90, + 0x03,0xC6,0x23,0x18,0xB1,0x22,0x91,0x24,0xC8,0xD0,0xF9, + 0xE6,0x23,0xE6,0x25,0xCA,0xD0,0xF2,0x20,0x59,0xA6,0x20, + 0x33,0xA5,0xAD,0x00,0x02,0xF0,0x88,0x18,0xA5,0x2D,0x85, + 0x5A,0x65,0x0B,0x85,0x58,0xA4,0x2E,0x84,0x5B,0x90,0x01, + 0xC8,0x84,0x59,0x20,0xB8,0xA3,0xA5,0x14,0xA4,0x15,0x8D, + 0xFE,0x01,0x8C,0xFF,0x01,0xA5,0x31,0xA4,0x32,0x85,0x2D, + 0x84,0x2E,0xA4,0x0B,0x88,0xB9,0xFC,0x01,0x91,0x5F,0x88, + 0x10,0xF8,0x20,0x59,0xA6,0x20,0x33,0xA5,0x4C,0x80,0xA4, + 0xA5,0x2B,0xA4,0x2C,0x85,0x22,0x84,0x23,0x18,0xA0,0x01, + 0xB1,0x22,0xF0,0x1D,0xA0,0x04,0xC8,0xB1,0x22,0xD0,0xFB, + 0xC8,0x98,0x65,0x22,0xAA,0xA0,0x00,0x91,0x22,0xA5,0x23, + 0x69,0x00,0xC8,0x91,0x22,0x86,0x22,0x85,0x23,0x90,0xDD, + 0x60,0xA2,0x00,0x20,0x12,0xE1,0xC9,0x0D,0xF0,0x0D,0x9D, + 0x00,0x02,0xE8,0xE0,0x59,0x90,0xF1,0xA2,0x17,0x4C,0x37, + 0xA4,0x4C,0xCA,0xAA,0x6C,0x04,0x03,0xA6,0x7A,0xA0,0x04, + 0x84,0x0F,0xBD,0x00,0x02,0x10,0x07,0xC9,0xFF,0xF0,0x3E, + 0xE8,0xD0,0xF4,0xC9,0x20,0xF0,0x37,0x85,0x08,0xC9,0x22, + 0xF0,0x56,0x24,0x0F,0x70,0x2D,0xC9,0x3F,0xD0,0x04,0xA9, + 0x99,0xD0,0x25,0xC9,0x30,0x90,0x04,0xC9,0x3C,0x90,0x1D, + 0x84,0x71,0xA0,0x00,0x84,0x0B,0x88,0x86,0x7A,0xCA,0xC8, + 0xE8,0xBD,0x00,0x02,0x38,0xF9,0x9E,0xA0,0xF0,0xF5,0xC9, + 0x80,0xD0,0x30,0x05,0x0B,0xA4,0x71,0xE8,0xC8,0x99,0xFB, + 0x01,0xB9,0xFB,0x01,0xF0,0x36,0x38,0xE9,0x3A,0xF0,0x04, + 0xC9,0x49,0xD0,0x02,0x85,0x0F,0x38,0xE9,0x55,0xD0,0x9F, + 0x85,0x08,0xBD,0x00,0x02,0xF0,0xDF,0xC5,0x08,0xF0,0xDB, + 0xC8,0x99,0xFB,0x01,0xE8,0xD0,0xF0,0xA6,0x7A,0xE6,0x0B, + 0xC8,0xB9,0x9D,0xA0,0x10,0xFA,0xB9,0x9E,0xA0,0xD0,0xB4, + 0xBD,0x00,0x02,0x10,0xBE,0x99,0xFD,0x01,0xC6,0x7B,0xA9, + 0xFF,0x85,0x7A,0x60,0xA5,0x2B,0xA6,0x2C,0xA0,0x01,0x85, + 0x5F,0x86,0x60,0xB1,0x5F,0xF0,0x1F,0xC8,0xC8,0xA5,0x15, + 0xD1,0x5F,0x90,0x18,0xF0,0x03,0x88,0xD0,0x09,0xA5,0x14, + 0x88,0xD1,0x5F,0x90,0x0C,0xF0,0x0A,0x88,0xB1,0x5F,0xAA, + 0x88,0xB1,0x5F,0xB0,0xD7,0x18,0x60,0xD0,0xFD,0xA9,0x00, + 0xA8,0x91,0x2B,0xC8,0x91,0x2B,0xA5,0x2B,0x18,0x69,0x02, + 0x85,0x2D,0xA5,0x2C,0x69,0x00,0x85,0x2E,0x20,0x8E,0xA6, + 0xA9,0x00,0xD0,0x2D,0x20,0xE7,0xFF,0xA5,0x37,0xA4,0x38, + 0x85,0x33,0x84,0x34,0xA5,0x2D,0xA4,0x2E,0x85,0x2F,0x84, + 0x30,0x85,0x31,0x84,0x32,0x20,0x1D,0xA8,0xA2,0x19,0x86, + 0x16,0x68,0xA8,0x68,0xA2,0xFA,0x9A,0x48,0x98,0x48,0xA9, + 0x00,0x85,0x3E,0x85,0x10,0x60,0x18,0xA5,0x2B,0x69,0xFF, + 0x85,0x7A,0xA5,0x2C,0x69,0xFF,0x85,0x7B,0x60,0x90,0x06, + 0xF0,0x04,0xC9,0xAB,0xD0,0xE9,0x20,0x6B,0xA9,0x20,0x13, + 0xA6,0x20,0x79,0x00,0xF0,0x0C,0xC9,0xAB,0xD0,0x8E,0x20, + 0x73,0x00,0x20,0x6B,0xA9,0xD0,0x86,0x68,0x68,0xA5,0x14, + 0x05,0x15,0xD0,0x06,0xA9,0xFF,0x85,0x14,0x85,0x15,0xA0, + 0x01,0x84,0x0F,0xB1,0x5F,0xF0,0x43,0x20,0x2C,0xA8,0x20, + 0xD7,0xAA,0xC8,0xB1,0x5F,0xAA,0xC8,0xB1,0x5F,0xC5,0x15, + 0xD0,0x04,0xE4,0x14,0xF0,0x02,0xB0,0x2C,0x84,0x49,0x20, + 0xCD,0xBD,0xA9,0x20,0xA4,0x49,0x29,0x7F,0x20,0x47,0xAB, + 0xC9,0x22,0xD0,0x06,0xA5,0x0F,0x49,0xFF,0x85,0x0F,0xC8, + 0xF0,0x11,0xB1,0x5F,0xD0,0x10,0xA8,0xB1,0x5F,0xAA,0xC8, + 0xB1,0x5F,0x86,0x5F,0x85,0x60,0xD0,0xB5,0x4C,0x86,0xE3, + 0x6C,0x06,0x03,0x10,0xD7,0xC9,0xFF,0xF0,0xD3,0x24,0x0F, + 0x30,0xCF,0x38,0xE9,0x7F,0xAA,0x84,0x49,0xA0,0xFF,0xCA, + 0xF0,0x08,0xC8,0xB9,0x9E,0xA0,0x10,0xFA,0x30,0xF5,0xC8, + 0xB9,0x9E,0xA0,0x30,0xB2,0x20,0x47,0xAB,0xD0,0xF5,0xA9, + 0x80,0x85,0x10,0x20,0xA5,0xA9,0x20,0x8A,0xA3,0xD0,0x05, + 0x8A,0x69,0x0F,0xAA,0x9A,0x68,0x68,0xA9,0x09,0x20,0xFB, + 0xA3,0x20,0x06,0xA9,0x18,0x98,0x65,0x7A,0x48,0xA5,0x7B, + 0x69,0x00,0x48,0xA5,0x3A,0x48,0xA5,0x39,0x48,0xA9,0xA4, + 0x20,0xFF,0xAE,0x20,0x8D,0xAD,0x20,0x8A,0xAD,0xA5,0x66, + 0x09,0x7F,0x25,0x62,0x85,0x62,0xA9,0x8B,0xA0,0xA7,0x85, + 0x22,0x84,0x23,0x4C,0x43,0xAE,0xA9,0xBC,0xA0,0xB9,0x20, + 0xA2,0xBB,0x20,0x79,0x00,0xC9,0xA9,0xD0,0x06,0x20,0x73, + 0x00,0x20,0x8A,0xAD,0x20,0x2B,0xBC,0x20,0x38,0xAE,0xA5, + 0x4A,0x48,0xA5,0x49,0x48,0xA9,0x81,0x48,0x20,0x2C,0xA8, + 0xA5,0x7A,0xA4,0x7B,0xC0,0x02,0xEA,0xF0,0x04,0x85,0x3D, + 0x84,0x3E,0xA0,0x00,0xB1,0x7A,0xD0,0x43,0xA0,0x02,0xB1, + 0x7A,0x18,0xD0,0x03,0x4C,0x4B,0xA8,0xC8,0xB1,0x7A,0x85, + 0x39,0xC8,0xB1,0x7A,0x85,0x3A,0x98,0x65,0x7A,0x85,0x7A, + 0x90,0x02,0xE6,0x7B,0x6C,0x08,0x03,0x20,0x73,0x00,0x20, + 0xED,0xA7,0x4C,0xAE,0xA7,0xF0,0x3C,0xE9,0x80,0x90,0x11, + 0xC9,0x23,0xB0,0x17,0x0A,0xA8,0xB9,0x0D,0xA0,0x48,0xB9, + 0x0C,0xA0,0x48,0x4C,0x73,0x00,0x4C,0xA5,0xA9,0xC9,0x3A, + 0xF0,0xD6,0x4C,0x08,0xAF,0xC9,0x4B,0xD0,0xF9,0x20,0x73, + 0x00,0xA9,0xA4,0x20,0xFF,0xAE,0x4C,0xA0,0xA8,0x38,0xA5, + 0x2B,0xE9,0x01,0xA4,0x2C,0xB0,0x01,0x88,0x85,0x41,0x84, + 0x42,0x60,0x20,0xE1,0xFF,0xB0,0x01,0x18,0xD0,0x3C,0xA5, + 0x7A,0xA4,0x7B,0xA6,0x3A,0xE8,0xF0,0x0C,0x85,0x3D,0x84, + 0x3E,0xA5,0x39,0xA4,0x3A,0x85,0x3B,0x84,0x3C,0x68,0x68, + 0xA9,0x81,0xA0,0xA3,0x90,0x03,0x4C,0x69,0xA4,0x4C,0x86, + 0xE3,0xD0,0x17,0xA2,0x1A,0xA4,0x3E,0xD0,0x03,0x4C,0x37, + 0xA4,0xA5,0x3D,0x85,0x7A,0x84,0x7B,0xA5,0x3B,0xA4,0x3C, + 0x85,0x39,0x84,0x3A,0x60,0x08,0xA9,0x00,0x20,0x90,0xFF, + 0x28,0xD0,0x03,0x4C,0x59,0xA6,0x20,0x60,0xA6,0x4C,0x97, + 0xA8,0xA9,0x03,0x20,0xFB,0xA3,0xA5,0x7B,0x48,0xA5,0x7A, + 0x48,0xA5,0x3A,0x48,0xA5,0x39,0x48,0xA9,0x8D,0x48,0x20, + 0x79,0x00,0x20,0xA0,0xA8,0x4C,0xAE,0xA7,0x20,0x6B,0xA9, + 0x20,0x09,0xA9,0x38,0xA5,0x39,0xE5,0x14,0xA5,0x3A,0xE5, + 0x15,0xB0,0x0B,0x98,0x38,0x65,0x7A,0xA6,0x7B,0x90,0x07, + 0xE8,0xB0,0x04,0xA5,0x2B,0xA6,0x2C,0x20,0x17,0xA6,0x90, + 0x1E,0xA5,0x5F,0xE9,0x01,0x85,0x7A,0xA5,0x60,0xE9,0x00, + 0x85,0x7B,0x60,0xD0,0xFD,0xA9,0xFF,0x85,0x4A,0x20,0x8A, + 0xA3,0x9A,0xC9,0x8D,0xF0,0x0B,0xA2,0x0C,0x2C,0xA2,0x11, + 0x4C,0x37,0xA4,0x4C,0x08,0xAF,0x68,0x68,0x85,0x39,0x68, + 0x85,0x3A,0x68,0x85,0x7A,0x68,0x85,0x7B,0x20,0x06,0xA9, + 0x98,0x18,0x65,0x7A,0x85,0x7A,0x90,0x02,0xE6,0x7B,0x60, + 0xA2,0x3A,0x2C,0xA2,0x00,0x86,0x07,0xA0,0x00,0x84,0x08, + 0xA5,0x08,0xA6,0x07,0x85,0x07,0x86,0x08,0xB1,0x7A,0xF0, + 0xE8,0xC5,0x08,0xF0,0xE4,0xC8,0xC9,0x22,0xD0,0xF3,0xF0, + 0xE9,0x20,0x9E,0xAD,0x20,0x79,0x00,0xC9,0x89,0xF0,0x05, + 0xA9,0xA7,0x20,0xFF,0xAE,0xA5,0x61,0xD0,0x05,0x20,0x09, + 0xA9,0xF0,0xBB,0x20,0x79,0x00,0xB0,0x03,0x4C,0xA0,0xA8, + 0x4C,0xED,0xA7,0x20,0x9E,0xB7,0x48,0xC9,0x8D,0xF0,0x04, + 0xC9,0x89,0xD0,0x91,0xC6,0x65,0xD0,0x04,0x68,0x4C,0xEF, + 0xA7,0x20,0x73,0x00,0x20,0x6B,0xA9,0xC9,0x2C,0xF0,0xEE, + 0x68,0x60,0xA2,0x00,0x86,0x14,0x86,0x15,0xB0,0xF7,0xE9, + 0x2F,0x85,0x07,0xA5,0x15,0x85,0x22,0xC9,0x19,0xB0,0xD4, + 0xA5,0x14,0x0A,0x26,0x22,0x0A,0x26,0x22,0x65,0x14,0x85, + 0x14,0xA5,0x22,0x65,0x15,0x85,0x15,0x06,0x14,0x26,0x15, + 0xA5,0x14,0x65,0x07,0x85,0x14,0x90,0x02,0xE6,0x15,0x20, + 0x73,0x00,0x4C,0x71,0xA9,0x20,0x8B,0xB0,0x85,0x49,0x84, + 0x4A,0xA9,0xB2,0x20,0xFF,0xAE,0xA5,0x0E,0x48,0xA5,0x0D, + 0x48,0x20,0x9E,0xAD,0x68,0x2A,0x20,0x90,0xAD,0xD0,0x18, + 0x68,0x10,0x12,0x20,0x1B,0xBC,0x20,0xBF,0xB1,0xA0,0x00, + 0xA5,0x64,0x91,0x49,0xC8,0xA5,0x65,0x91,0x49,0x60,0x4C, + 0xD0,0xBB,0x68,0xA4,0x4A,0xC0,0xBF,0xD0,0x4C,0x20,0xA6, + 0xB6,0xC9,0x06,0xD0,0x3D,0xA0,0x00,0x84,0x61,0x84,0x66, + 0x84,0x71,0x20,0x1D,0xAA,0x20,0xE2,0xBA,0xE6,0x71,0xA4, + 0x71,0x20,0x1D,0xAA,0x20,0x0C,0xBC,0xAA,0xF0,0x05,0xE8, + 0x8A,0x20,0xED,0xBA,0xA4,0x71,0xC8,0xC0,0x06,0xD0,0xDF, + 0x20,0xE2,0xBA,0x20,0x9B,0xBC,0xA6,0x64,0xA4,0x63,0xA5, + 0x65,0x4C,0xDB,0xFF,0xB1,0x22,0x20,0x80,0x00,0x90,0x03, + 0x4C,0x48,0xB2,0xE9,0x2F,0x4C,0x7E,0xBD,0xA0,0x02,0xB1, + 0x64,0xC5,0x34,0x90,0x17,0xD0,0x07,0x88,0xB1,0x64,0xC5, + 0x33,0x90,0x0E,0xA4,0x65,0xC4,0x2E,0x90,0x08,0xD0,0x0D, + 0xA5,0x64,0xC5,0x2D,0xB0,0x07,0xA5,0x64,0xA4,0x65,0x4C, + 0x68,0xAA,0xA0,0x00,0xB1,0x64,0x20,0x75,0xB4,0xA5,0x50, + 0xA4,0x51,0x85,0x6F,0x84,0x70,0x20,0x7A,0xB6,0xA9,0x61, + 0xA0,0x00,0x85,0x50,0x84,0x51,0x20,0xDB,0xB6,0xA0,0x00, + 0xB1,0x50,0x91,0x49,0xC8,0xB1,0x50,0x91,0x49,0xC8,0xB1, + 0x50,0x91,0x49,0x60,0x20,0x86,0xAA,0x4C,0xB5,0xAB,0x20, + 0x9E,0xB7,0xF0,0x05,0xA9,0x2C,0x20,0xFF,0xAE,0x08,0x86, + 0x13,0x20,0x18,0xE1,0x28,0x4C,0xA0,0xAA,0x20,0x21,0xAB, + 0x20,0x79,0x00,0xF0,0x35,0xF0,0x43,0xC9,0xA3,0xF0,0x50, + 0xC9,0xA6,0x18,0xF0,0x4B,0xC9,0x2C,0xF0,0x37,0xC9,0x3B, + 0xF0,0x5E,0x20,0x9E,0xAD,0x24,0x0D,0x30,0xDE,0x20,0xDD, + 0xBD,0x20,0x87,0xB4,0x20,0x21,0xAB,0x20,0x3B,0xAB,0xD0, + 0xD3,0xA9,0x00,0x9D,0x00,0x02,0xA2,0xFF,0xA0,0x01,0xA5, + 0x13,0xD0,0x10,0xA9,0x0D,0x20,0x47,0xAB,0x24,0x13,0x10, + 0x05,0xA9,0x0A,0x20,0x47,0xAB,0x49,0xFF,0x60,0x38,0x20, + 0xF0,0xFF,0x98,0x38,0xE9,0x0A,0xB0,0xFC,0x49,0xFF,0x69, + 0x01,0xD0,0x16,0x08,0x38,0x20,0xF0,0xFF,0x84,0x09,0x20, + 0x9B,0xB7,0xC9,0x29,0xD0,0x59,0x28,0x90,0x06,0x8A,0xE5, + 0x09,0x90,0x05,0xAA,0xE8,0xCA,0xD0,0x06,0x20,0x73,0x00, + 0x4C,0xA2,0xAA,0x20,0x3B,0xAB,0xD0,0xF2,0x20,0x87,0xB4, + 0x20,0xA6,0xB6,0xAA,0xA0,0x00,0xE8,0xCA,0xF0,0xBC,0xB1, + 0x22,0x20,0x47,0xAB,0xC8,0xC9,0x0D,0xD0,0xF3,0x20,0xE5, + 0xAA,0x4C,0x28,0xAB,0xA5,0x13,0xF0,0x03,0xA9,0x20,0x2C, + 0xA9,0x1D,0x2C,0xA9,0x3F,0x20,0x0C,0xE1,0x29,0xFF,0x60, + 0xA5,0x11,0xF0,0x11,0x30,0x04,0xA0,0xFF,0xD0,0x04,0xA5, + 0x3F,0xA4,0x40,0x85,0x39,0x84,0x3A,0x4C,0x08,0xAF,0xA5, + 0x13,0xF0,0x05,0xA2,0x18,0x4C,0x37,0xA4,0xA9,0x0C,0xA0, + 0xAD,0x20,0x1E,0xAB,0xA5,0x3D,0xA4,0x3E,0x85,0x7A,0x84, + 0x7B,0x60,0x20,0xA6,0xB3,0xC9,0x23,0xD0,0x10,0x20,0x73, + 0x00,0x20,0x9E,0xB7,0xA9,0x2C,0x20,0xFF,0xAE,0x86,0x13, + 0x20,0x1E,0xE1,0xA2,0x01,0xA0,0x02,0xA9,0x00,0x8D,0x01, + 0x02,0xA9,0x40,0x20,0x0F,0xAC,0xA6,0x13,0xD0,0x13,0x60, + 0x20,0x9E,0xB7,0xA9,0x2C,0x20,0xFF,0xAE,0x86,0x13,0x20, + 0x1E,0xE1,0x20,0xCE,0xAB,0xA5,0x13,0x20,0xCC,0xFF,0xA2, + 0x00,0x86,0x13,0x60,0xC9,0x22,0xD0,0x0B,0x20,0xBD,0xAE, + 0xA9,0x3B,0x20,0xFF,0xAE,0x20,0x21,0xAB,0x20,0xA6,0xB3, + 0xA9,0x2C,0x8D,0xFF,0x01,0x20,0xF9,0xAB,0xA5,0x13,0xF0, + 0x0D,0x20,0xB7,0xFF,0x29,0x02,0xF0,0x06,0x20,0xB5,0xAB, + 0x4C,0xF8,0xA8,0xAD,0x00,0x02,0xD0,0x1E,0xA5,0x13,0xD0, + 0xE3,0x20,0x06,0xA9,0x4C,0xFB,0xA8,0xA5,0x13,0xD0,0x06, + 0x20,0x45,0xAB,0x20,0x3B,0xAB,0x4C,0x60,0xA5,0xA6,0x41, + 0xA4,0x42,0xA9,0x98,0x2C,0xA9,0x00,0x85,0x11,0x86,0x43, + 0x84,0x44,0x20,0x8B,0xB0,0x85,0x49,0x84,0x4A,0xA5,0x7A, + 0xA4,0x7B,0x85,0x4B,0x84,0x4C,0xA6,0x43,0xA4,0x44,0x86, + 0x7A,0x84,0x7B,0x20,0x79,0x00,0xD0,0x20,0x24,0x11,0x50, + 0x0C,0x20,0x24,0xE1,0x8D,0x00,0x02,0xA2,0xFF,0xA0,0x01, + 0xD0,0x0C,0x30,0x75,0xA5,0x13,0xD0,0x03,0x20,0x45,0xAB, + 0x20,0xF9,0xAB,0x86,0x7A,0x84,0x7B,0x20,0x73,0x00,0x24, + 0x0D,0x10,0x31,0x24,0x11,0x50,0x09,0xE8,0x86,0x7A,0xA9, + 0x00,0x85,0x07,0xF0,0x0C,0x85,0x07,0xC9,0x22,0xF0,0x07, + 0xA9,0x3A,0x85,0x07,0xA9,0x2C,0x18,0x85,0x08,0xA5,0x7A, + 0xA4,0x7B,0x69,0x00,0x90,0x01,0xC8,0x20,0x8D,0xB4,0x20, + 0xE2,0xB7,0x20,0xDA,0xA9,0x4C,0x91,0xAC,0x20,0xF3,0xBC, + 0xA5,0x0E,0x20,0xC2,0xA9,0x20,0x79,0x00,0xF0,0x07,0xC9, + 0x2C,0xF0,0x03,0x4C,0x4D,0xAB,0xA5,0x7A,0xA4,0x7B,0x85, + 0x43,0x84,0x44,0xA5,0x4B,0xA4,0x4C,0x85,0x7A,0x84,0x7B, + 0x20,0x79,0x00,0xF0,0x2D,0x20,0xFD,0xAE,0x4C,0x15,0xAC, + 0x20,0x06,0xA9,0xC8,0xAA,0xD0,0x12,0xA2,0x0D,0xC8,0xB1, + 0x7A,0xF0,0x6C,0xC8,0xB1,0x7A,0x85,0x3F,0xC8,0xB1,0x7A, + 0xC8,0x85,0x40,0x20,0xFB,0xA8,0x20,0x79,0x00,0xAA,0xE0, + 0x83,0xD0,0xDC,0x4C,0x51,0xAC,0xA5,0x43,0xA4,0x44,0xA6, + 0x11,0x10,0x03,0x4C,0x27,0xA8,0xA0,0x00,0xB1,0x43,0xF0, + 0x0B,0xA5,0x13,0xD0,0x07,0xA9,0xFC,0xA0,0xAC,0x4C,0x1E, + 0xAB,0x60,0x3F,0x45,0x58,0x54,0x52,0x41,0x20,0x49,0x47, + 0x4E,0x4F,0x52,0x45,0x44,0x0D,0x00,0x3F,0x52,0x45,0x44, + 0x4F,0x20,0x46,0x52,0x4F,0x4D,0x20,0x53,0x54,0x41,0x52, + 0x54,0x0D,0x00,0xD0,0x04,0xA0,0x00,0xF0,0x03,0x20,0x8B, + 0xB0,0x85,0x49,0x84,0x4A,0x20,0x8A,0xA3,0xF0,0x05,0xA2, + 0x0A,0x4C,0x37,0xA4,0x9A,0x8A,0x18,0x69,0x04,0x48,0x69, + 0x06,0x85,0x24,0x68,0xA0,0x01,0x20,0xA2,0xBB,0xBA,0xBD, + 0x09,0x01,0x85,0x66,0xA5,0x49,0xA4,0x4A,0x20,0x67,0xB8, + 0x20,0xD0,0xBB,0xA0,0x01,0x20,0x5D,0xBC,0xBA,0x38,0xFD, + 0x09,0x01,0xF0,0x17,0xBD,0x0F,0x01,0x85,0x39,0xBD,0x10, + 0x01,0x85,0x3A,0xBD,0x12,0x01,0x85,0x7A,0xBD,0x11,0x01, + 0x85,0x7B,0x4C,0xAE,0xA7,0x8A,0x69,0x11,0xAA,0x9A,0x20, + 0x79,0x00,0xC9,0x2C,0xD0,0xF1,0x20,0x73,0x00,0x20,0x24, + 0xAD,0x20,0x9E,0xAD,0x18,0x24,0x38,0x24,0x0D,0x30,0x03, + 0xB0,0x03,0x60,0xB0,0xFD,0xA2,0x16,0x4C,0x37,0xA4,0xA6, + 0x7A,0xD0,0x02,0xC6,0x7B,0xC6,0x7A,0xA2,0x00,0x24,0x48, + 0x8A,0x48,0xA9,0x01,0x20,0xFB,0xA3,0x20,0x83,0xAE,0xA9, + 0x00,0x85,0x4D,0x20,0x79,0x00,0x38,0xE9,0xB1,0x90,0x17, + 0xC9,0x03,0xB0,0x13,0xC9,0x01,0x2A,0x49,0x01,0x45,0x4D, + 0xC5,0x4D,0x90,0x61,0x85,0x4D,0x20,0x73,0x00,0x4C,0xBB, + 0xAD,0xA6,0x4D,0xD0,0x2C,0xB0,0x7B,0x69,0x07,0x90,0x77, + 0x65,0x0D,0xD0,0x03,0x4C,0x3D,0xB6,0x69,0xFF,0x85,0x22, + 0x0A,0x65,0x22,0xA8,0x68,0xD9,0x80,0xA0,0xB0,0x67,0x20, + 0x8D,0xAD,0x48,0x20,0x20,0xAE,0x68,0xA4,0x4B,0x10,0x17, + 0xAA,0xF0,0x56,0xD0,0x5F,0x46,0x0D,0x8A,0x2A,0xA6,0x7A, + 0xD0,0x02,0xC6,0x7B,0xC6,0x7A,0xA0,0x1B,0x85,0x4D,0xD0, + 0xD7,0xD9,0x80,0xA0,0xB0,0x48,0x90,0xD9,0xB9,0x82,0xA0, + 0x48,0xB9,0x81,0xA0,0x48,0x20,0x33,0xAE,0xA5,0x4D,0x4C, + 0xA9,0xAD,0x4C,0x08,0xAF,0xA5,0x66,0xBE,0x80,0xA0,0xA8, + 0x68,0x85,0x22,0xE6,0x22,0x68,0x85,0x23,0x98,0x48,0x20, + 0x1B,0xBC,0xA5,0x65,0x48,0xA5,0x64,0x48,0xA5,0x63,0x48, + 0xA5,0x62,0x48,0xA5,0x61,0x48,0x6C,0x22,0x00,0xA0,0xFF, + 0x68,0xF0,0x23,0xC9,0x64,0xF0,0x03,0x20,0x8D,0xAD,0x84, + 0x4B,0x68,0x4A,0x85,0x12,0x68,0x85,0x69,0x68,0x85,0x6A, + 0x68,0x85,0x6B,0x68,0x85,0x6C,0x68,0x85,0x6D,0x68,0x85, + 0x6E,0x45,0x66,0x85,0x6F,0xA5,0x61,0x60,0x6C,0x0A,0x03, + 0xA9,0x00,0x85,0x0D,0x20,0x73,0x00,0xB0,0x03,0x4C,0xF3, + 0xBC,0x20,0x13,0xB1,0x90,0x03,0x4C,0x28,0xAF,0xC9,0xFF, + 0xD0,0x0F,0xA9,0xA8,0xA0,0xAE,0x20,0xA2,0xBB,0x4C,0x73, + 0x00,0x82,0x49,0x0F,0xDA,0xA1,0xC9,0x2E,0xF0,0xDE,0xC9, + 0xAB,0xF0,0x58,0xC9,0xAA,0xF0,0xD1,0xC9,0x22,0xD0,0x0F, + 0xA5,0x7A,0xA4,0x7B,0x69,0x00,0x90,0x01,0xC8,0x20,0x87, + 0xB4,0x4C,0xE2,0xB7,0xC9,0xA8,0xD0,0x13,0xA0,0x18,0xD0, + 0x3B,0x20,0xBF,0xB1,0xA5,0x65,0x49,0xFF,0xA8,0xA5,0x64, + 0x49,0xFF,0x4C,0x91,0xB3,0xC9,0xA5,0xD0,0x03,0x4C,0xF4, + 0xB3,0xC9,0xB4,0x90,0x03,0x4C,0xA7,0xAF,0x20,0xFA,0xAE, + 0x20,0x9E,0xAD,0xA9,0x29,0x2C,0xA9,0x28,0x2C,0xA9,0x2C, + 0xA0,0x00,0xD1,0x7A,0xD0,0x03,0x4C,0x73,0x00,0xA2,0x0B, + 0x4C,0x37,0xA4,0xA0,0x15,0x68,0x68,0x4C,0xFA,0xAD,0x38, + 0xA5,0x64,0xE9,0x00,0xA5,0x65,0xE9,0xA0,0x90,0x08,0xA9, + 0xA2,0xE5,0x64,0xA9,0xE3,0xE5,0x65,0x60,0x20,0x8B,0xB0, + 0x85,0x64,0x84,0x65,0xA6,0x45,0xA4,0x46,0xA5,0x0D,0xF0, + 0x26,0xA9,0x00,0x85,0x70,0x20,0x14,0xAF,0x90,0x1C,0xE0, + 0x54,0xD0,0x18,0xC0,0xC9,0xD0,0x14,0x20,0x84,0xAF,0x84, + 0x5E,0x88,0x84,0x71,0xA0,0x06,0x84,0x5D,0xA0,0x24,0x20, + 0x68,0xBE,0x4C,0x6F,0xB4,0x60,0x24,0x0E,0x10,0x0D,0xA0, + 0x00,0xB1,0x64,0xAA,0xC8,0xB1,0x64,0xA8,0x8A,0x4C,0x91, + 0xB3,0x20,0x14,0xAF,0x90,0x2D,0xE0,0x54,0xD0,0x1B,0xC0, + 0x49,0xD0,0x25,0x20,0x84,0xAF,0x98,0xA2,0xA0,0x4C,0x4F, + 0xBC,0x20,0xDE,0xFF,0x86,0x64,0x84,0x63,0x85,0x65,0xA0, + 0x00,0x84,0x62,0x60,0xE0,0x53,0xD0,0x0A,0xC0,0x54,0xD0, + 0x06,0x20,0xB7,0xFF,0x4C,0x3C,0xBC,0xA5,0x64,0xA4,0x65, + 0x4C,0xA2,0xBB,0x0A,0x48,0xAA,0x20,0x73,0x00,0xE0,0x8F, + 0x90,0x20,0x20,0xFA,0xAE,0x20,0x9E,0xAD,0x20,0xFD,0xAE, + 0x20,0x8F,0xAD,0x68,0xAA,0xA5,0x65,0x48,0xA5,0x64,0x48, + 0x8A,0x48,0x20,0x9E,0xB7,0x68,0xA8,0x8A,0x48,0x4C,0xD6, + 0xAF,0x20,0xF1,0xAE,0x68,0xA8,0xB9,0xEA,0x9F,0x85,0x55, + 0xB9,0xEB,0x9F,0x85,0x56,0x20,0x54,0x00,0x4C,0x8D,0xAD, + 0xA0,0xFF,0x2C,0xA0,0x00,0x84,0x0B,0x20,0xBF,0xB1,0xA5, + 0x64,0x45,0x0B,0x85,0x07,0xA5,0x65,0x45,0x0B,0x85,0x08, + 0x20,0xFC,0xBB,0x20,0xBF,0xB1,0xA5,0x65,0x45,0x0B,0x25, + 0x08,0x45,0x0B,0xA8,0xA5,0x64,0x45,0x0B,0x25,0x07,0x45, + 0x0B,0x4C,0x91,0xB3,0x20,0x90,0xAD,0xB0,0x13,0xA5,0x6E, + 0x09,0x7F,0x25,0x6A,0x85,0x6A,0xA9,0x69,0xA0,0x00,0x20, + 0x5B,0xBC,0xAA,0x4C,0x61,0xB0,0xA9,0x00,0x85,0x0D,0xC6, + 0x4D,0x20,0xA6,0xB6,0x85,0x61,0x86,0x62,0x84,0x63,0xA5, + 0x6C,0xA4,0x6D,0x20,0xAA,0xB6,0x86,0x6C,0x84,0x6D,0xAA, + 0x38,0xE5,0x61,0xF0,0x08,0xA9,0x01,0x90,0x04,0xA6,0x61, + 0xA9,0xFF,0x85,0x66,0xA0,0xFF,0xE8,0xC8,0xCA,0xD0,0x07, + 0xA6,0x66,0x30,0x0F,0x18,0x90,0x0C,0xB1,0x6C,0xD1,0x62, + 0xF0,0xEF,0xA2,0xFF,0xB0,0x02,0xA2,0x01,0xE8,0x8A,0x2A, + 0x25,0x12,0xF0,0x02,0xA9,0xFF,0x4C,0x3C,0xBC,0x20,0xFD, + 0xAE,0xAA,0x20,0x90,0xB0,0x20,0x79,0x00,0xD0,0xF4,0x60, + 0xA2,0x00,0x20,0x79,0x00,0x86,0x0C,0x85,0x45,0x20,0x79, + 0x00,0x20,0x13,0xB1,0xB0,0x03,0x4C,0x08,0xAF,0xA2,0x00, + 0x86,0x0D,0x86,0x0E,0x20,0x73,0x00,0x90,0x05,0x20,0x13, + 0xB1,0x90,0x0B,0xAA,0x20,0x73,0x00,0x90,0xFB,0x20,0x13, + 0xB1,0xB0,0xF6,0xC9,0x24,0xD0,0x06,0xA9,0xFF,0x85,0x0D, + 0xD0,0x10,0xC9,0x25,0xD0,0x13,0xA5,0x10,0xD0,0xD0,0xA9, + 0x80,0x85,0x0E,0x05,0x45,0x85,0x45,0x8A,0x09,0x80,0xAA, + 0x20,0x73,0x00,0x86,0x46,0x38,0x05,0x10,0xE9,0x28,0xD0, + 0x03,0x4C,0xD1,0xB1,0xA0,0x00,0x84,0x10,0xA5,0x2D,0xA6, + 0x2E,0x86,0x60,0x85,0x5F,0xE4,0x30,0xD0,0x04,0xC5,0x2F, + 0xF0,0x22,0xA5,0x45,0xD1,0x5F,0xD0,0x08,0xA5,0x46,0xC8, + 0xD1,0x5F,0xF0,0x7D,0x88,0x18,0xA5,0x5F,0x69,0x07,0x90, + 0xE1,0xE8,0xD0,0xDC,0xC9,0x41,0x90,0x05,0xE9,0x5B,0x38, + 0xE9,0xA5,0x60,0x68,0x48,0xC9,0x2A,0xD0,0x05,0xA9,0x13, + 0xA0,0xBF,0x60,0xA5,0x45,0xA4,0x46,0xC9,0x54,0xD0,0x0B, + 0xC0,0xC9,0xF0,0xEF,0xC0,0x49,0xD0,0x03,0x4C,0x08,0xAF, + 0xC9,0x53,0xD0,0x04,0xC0,0x54,0xF0,0xF5,0xA5,0x2F,0xA4, + 0x30,0x85,0x5F,0x84,0x60,0xA5,0x31,0xA4,0x32,0x85,0x5A, + 0x84,0x5B,0x18,0x69,0x07,0x90,0x01,0xC8,0x85,0x58,0x84, + 0x59,0x20,0xB8,0xA3,0xA5,0x58,0xA4,0x59,0xC8,0x85,0x2F, + 0x84,0x30,0xA0,0x00,0xA5,0x45,0x91,0x5F,0xC8,0xA5,0x46, + 0x91,0x5F,0xA9,0x00,0xC8,0x91,0x5F,0xC8,0x91,0x5F,0xC8, + 0x91,0x5F,0xC8,0x91,0x5F,0xC8,0x91,0x5F,0xA5,0x5F,0x18, + 0x69,0x02,0xA4,0x60,0x90,0x01,0xC8,0x85,0x47,0x84,0x48, + 0x60,0xA5,0x0B,0x0A,0x69,0x05,0x65,0x5F,0xA4,0x60,0x90, + 0x01,0xC8,0x85,0x58,0x84,0x59,0x60,0x90,0x80,0x00,0x00, + 0x00,0x20,0xBF,0xB1,0xA5,0x64,0xA4,0x65,0x60,0x20,0x73, + 0x00,0x20,0x9E,0xAD,0x20,0x8D,0xAD,0xA5,0x66,0x30,0x0D, + 0xA5,0x61,0xC9,0x90,0x90,0x09,0xA9,0xA5,0xA0,0xB1,0x20, + 0x5B,0xBC,0xD0,0x7A,0x4C,0x9B,0xBC,0xA5,0x0C,0x05,0x0E, + 0x48,0xA5,0x0D,0x48,0xA0,0x00,0x98,0x48,0xA5,0x46,0x48, + 0xA5,0x45,0x48,0x20,0xB2,0xB1,0x68,0x85,0x45,0x68,0x85, + 0x46,0x68,0xA8,0xBA,0xBD,0x02,0x01,0x48,0xBD,0x01,0x01, + 0x48,0xA5,0x64,0x9D,0x02,0x01,0xA5,0x65,0x9D,0x01,0x01, + 0xC8,0x20,0x79,0x00,0xC9,0x2C,0xF0,0xD2,0x84,0x0B,0x20, + 0xF7,0xAE,0x68,0x85,0x0D,0x68,0x85,0x0E,0x29,0x7F,0x85, + 0x0C,0xA6,0x2F,0xA5,0x30,0x86,0x5F,0x85,0x60,0xC5,0x32, + 0xD0,0x04,0xE4,0x31,0xF0,0x39,0xA0,0x00,0xB1,0x5F,0xC8, + 0xC5,0x45,0xD0,0x06,0xA5,0x46,0xD1,0x5F,0xF0,0x16,0xC8, + 0xB1,0x5F,0x18,0x65,0x5F,0xAA,0xC8,0xB1,0x5F,0x65,0x60, + 0x90,0xD7,0xA2,0x12,0x2C,0xA2,0x0E,0x4C,0x37,0xA4,0xA2, + 0x13,0xA5,0x0C,0xD0,0xF7,0x20,0x94,0xB1,0xA5,0x0B,0xA0, + 0x04,0xD1,0x5F,0xD0,0xE7,0x4C,0xEA,0xB2,0x20,0x94,0xB1, + 0x20,0x08,0xA4,0xA0,0x00,0x84,0x72,0xA2,0x05,0xA5,0x45, + 0x91,0x5F,0x10,0x01,0xCA,0xC8,0xA5,0x46,0x91,0x5F,0x10, + 0x02,0xCA,0xCA,0x86,0x71,0xA5,0x0B,0xC8,0xC8,0xC8,0x91, + 0x5F,0xA2,0x0B,0xA9,0x00,0x24,0x0C,0x50,0x08,0x68,0x18, + 0x69,0x01,0xAA,0x68,0x69,0x00,0xC8,0x91,0x5F,0xC8,0x8A, + 0x91,0x5F,0x20,0x4C,0xB3,0x86,0x71,0x85,0x72,0xA4,0x22, + 0xC6,0x0B,0xD0,0xDC,0x65,0x59,0xB0,0x5D,0x85,0x59,0xA8, + 0x8A,0x65,0x58,0x90,0x03,0xC8,0xF0,0x52,0x20,0x08,0xA4, + 0x85,0x31,0x84,0x32,0xA9,0x00,0xE6,0x72,0xA4,0x71,0xF0, + 0x05,0x88,0x91,0x58,0xD0,0xFB,0xC6,0x59,0xC6,0x72,0xD0, + 0xF5,0xE6,0x59,0x38,0xA5,0x31,0xE5,0x5F,0xA0,0x02,0x91, + 0x5F,0xA5,0x32,0xC8,0xE5,0x60,0x91,0x5F,0xA5,0x0C,0xD0, + 0x62,0xC8,0xB1,0x5F,0x85,0x0B,0xA9,0x00,0x85,0x71,0x85, + 0x72,0xC8,0x68,0xAA,0x85,0x64,0x68,0x85,0x65,0xD1,0x5F, + 0x90,0x0E,0xD0,0x06,0xC8,0x8A,0xD1,0x5F,0x90,0x07,0x4C, + 0x45,0xB2,0x4C,0x35,0xA4,0xC8,0xA5,0x72,0x05,0x71,0x18, + 0xF0,0x0A,0x20,0x4C,0xB3,0x8A,0x65,0x64,0xAA,0x98,0xA4, + 0x22,0x65,0x65,0x86,0x71,0xC6,0x0B,0xD0,0xCA,0x85,0x72, + 0xA2,0x05,0xA5,0x45,0x10,0x01,0xCA,0xA5,0x46,0x10,0x02, + 0xCA,0xCA,0x86,0x28,0xA9,0x00,0x20,0x55,0xB3,0x8A,0x65, + 0x58,0x85,0x47,0x98,0x65,0x59,0x85,0x48,0xA8,0xA5,0x47, + 0x60,0x84,0x22,0xB1,0x5F,0x85,0x28,0x88,0xB1,0x5F,0x85, + 0x29,0xA9,0x10,0x85,0x5D,0xA2,0x00,0xA0,0x00,0x8A,0x0A, + 0xAA,0x98,0x2A,0xA8,0xB0,0xA4,0x06,0x71,0x26,0x72,0x90, + 0x0B,0x18,0x8A,0x65,0x28,0xAA,0x98,0x65,0x29,0xA8,0xB0, + 0x93,0xC6,0x5D,0xD0,0xE3,0x60,0xA5,0x0D,0xF0,0x03,0x20, + 0xA6,0xB6,0x20,0x26,0xB5,0x38,0xA5,0x33,0xE5,0x31,0xA8, + 0xA5,0x34,0xE5,0x32,0xA2,0x00,0x86,0x0D,0x85,0x62,0x84, + 0x63,0xA2,0x90,0x4C,0x44,0xBC,0x38,0x20,0xF0,0xFF,0xA9, + 0x00,0xF0,0xEB,0xA6,0x3A,0xE8,0xD0,0xA0,0xA2,0x15,0x2C, + 0xA2,0x1B,0x4C,0x37,0xA4,0x20,0xE1,0xB3,0x20,0xA6,0xB3, + 0x20,0xFA,0xAE,0xA9,0x80,0x85,0x10,0x20,0x8B,0xB0,0x20, + 0x8D,0xAD,0x20,0xF7,0xAE,0xA9,0xB2,0x20,0xFF,0xAE,0x48, + 0xA5,0x48,0x48,0xA5,0x47,0x48,0xA5,0x7B,0x48,0xA5,0x7A, + 0x48,0x20,0xF8,0xA8,0x4C,0x4F,0xB4,0xA9,0xA5,0x20,0xFF, + 0xAE,0x09,0x80,0x85,0x10,0x20,0x92,0xB0,0x85,0x4E,0x84, + 0x4F,0x4C,0x8D,0xAD,0x20,0xE1,0xB3,0xA5,0x4F,0x48,0xA5, + 0x4E,0x48,0x20,0xF1,0xAE,0x20,0x8D,0xAD,0x68,0x85,0x4E, + 0x68,0x85,0x4F,0xA0,0x02,0xB1,0x4E,0x85,0x47,0xAA,0xC8, + 0xB1,0x4E,0xF0,0x99,0x85,0x48,0xC8,0xB1,0x47,0x48,0x88, + 0x10,0xFA,0xA4,0x48,0x20,0xD4,0xBB,0xA5,0x7B,0x48,0xA5, + 0x7A,0x48,0xB1,0x4E,0x85,0x7A,0xC8,0xB1,0x4E,0x85,0x7B, + 0xA5,0x48,0x48,0xA5,0x47,0x48,0x20,0x8A,0xAD,0x68,0x85, + 0x4E,0x68,0x85,0x4F,0x20,0x79,0x00,0xF0,0x03,0x4C,0x08, + 0xAF,0x68,0x85,0x7A,0x68,0x85,0x7B,0xA0,0x00,0x68,0x91, + 0x4E,0x68,0xC8,0x91,0x4E,0x68,0xC8,0x91,0x4E,0x68,0xC8, + 0x91,0x4E,0x68,0xC8,0x91,0x4E,0x60,0x20,0x8D,0xAD,0xA0, + 0x00,0x20,0xDF,0xBD,0x68,0x68,0xA9,0xFF,0xA0,0x00,0xF0, + 0x12,0xA6,0x64,0xA4,0x65,0x86,0x50,0x84,0x51,0x20,0xF4, + 0xB4,0x86,0x62,0x84,0x63,0x85,0x61,0x60,0xA2,0x22,0x86, + 0x07,0x86,0x08,0x85,0x6F,0x84,0x70,0x85,0x62,0x84,0x63, + 0xA0,0xFF,0xC8,0xB1,0x6F,0xF0,0x0C,0xC5,0x07,0xF0,0x04, + 0xC5,0x08,0xD0,0xF3,0xC9,0x22,0xF0,0x01,0x18,0x84,0x61, + 0x98,0x65,0x6F,0x85,0x71,0xA6,0x70,0x90,0x01,0xE8,0x86, + 0x72,0xA5,0x70,0xF0,0x04,0xC9,0x02,0xD0,0x0B,0x98,0x20, + 0x75,0xB4,0xA6,0x6F,0xA4,0x70,0x20,0x88,0xB6,0xA6,0x16, + 0xE0,0x22,0xD0,0x05,0xA2,0x19,0x4C,0x37,0xA4,0xA5,0x61, + 0x95,0x00,0xA5,0x62,0x95,0x01,0xA5,0x63,0x95,0x02,0xA0, + 0x00,0x86,0x64,0x84,0x65,0x84,0x70,0x88,0x84,0x0D,0x86, + 0x17,0xE8,0xE8,0xE8,0x86,0x16,0x60,0x46,0x0F,0x48,0x49, + 0xFF,0x38,0x65,0x33,0xA4,0x34,0xB0,0x01,0x88,0xC4,0x32, + 0x90,0x11,0xD0,0x04,0xC5,0x31,0x90,0x0B,0x85,0x33,0x84, + 0x34,0x85,0x35,0x84,0x36,0xAA,0x68,0x60,0xA2,0x10,0xA5, + 0x0F,0x30,0xB6,0x20,0x26,0xB5,0xA9,0x80,0x85,0x0F,0x68, + 0xD0,0xD0,0xA6,0x37,0xA5,0x38,0x86,0x33,0x85,0x34,0xA0, + 0x00,0x84,0x4F,0x84,0x4E,0xA5,0x31,0xA6,0x32,0x85,0x5F, + 0x86,0x60,0xA9,0x19,0xA2,0x00,0x85,0x22,0x86,0x23,0xC5, + 0x16,0xF0,0x05,0x20,0xC7,0xB5,0xF0,0xF7,0xA9,0x07,0x85, + 0x53,0xA5,0x2D,0xA6,0x2E,0x85,0x22,0x86,0x23,0xE4,0x30, + 0xD0,0x04,0xC5,0x2F,0xF0,0x05,0x20,0xBD,0xB5,0xF0,0xF3, + 0x85,0x58,0x86,0x59,0xA9,0x03,0x85,0x53,0xA5,0x58,0xA6, + 0x59,0xE4,0x32,0xD0,0x07,0xC5,0x31,0xD0,0x03,0x4C,0x06, + 0xB6,0x85,0x22,0x86,0x23,0xA0,0x00,0xB1,0x22,0xAA,0xC8, + 0xB1,0x22,0x08,0xC8,0xB1,0x22,0x65,0x58,0x85,0x58,0xC8, + 0xB1,0x22,0x65,0x59,0x85,0x59,0x28,0x10,0xD3,0x8A,0x30, + 0xD0,0xC8,0xB1,0x22,0xA0,0x00,0x0A,0x69,0x05,0x65,0x22, + 0x85,0x22,0x90,0x02,0xE6,0x23,0xA6,0x23,0xE4,0x59,0xD0, + 0x04,0xC5,0x58,0xF0,0xBA,0x20,0xC7,0xB5,0xF0,0xF3,0xB1, + 0x22,0x30,0x35,0xC8,0xB1,0x22,0x10,0x30,0xC8,0xB1,0x22, + 0xF0,0x2B,0xC8,0xB1,0x22,0xAA,0xC8,0xB1,0x22,0xC5,0x34, + 0x90,0x06,0xD0,0x1E,0xE4,0x33,0xB0,0x1A,0xC5,0x60,0x90, + 0x16,0xD0,0x04,0xE4,0x5F,0x90,0x10,0x86,0x5F,0x85,0x60, + 0xA5,0x22,0xA6,0x23,0x85,0x4E,0x86,0x4F,0xA5,0x53,0x85, + 0x55,0xA5,0x53,0x18,0x65,0x22,0x85,0x22,0x90,0x02,0xE6, + 0x23,0xA6,0x23,0xA0,0x00,0x60,0xA5,0x4F,0x05,0x4E,0xF0, + 0xF5,0xA5,0x55,0x29,0x04,0x4A,0xA8,0x85,0x55,0xB1,0x4E, + 0x65,0x5F,0x85,0x5A,0xA5,0x60,0x69,0x00,0x85,0x5B,0xA5, + 0x33,0xA6,0x34,0x85,0x58,0x86,0x59,0x20,0xBF,0xA3,0xA4, + 0x55,0xC8,0xA5,0x58,0x91,0x4E,0xAA,0xE6,0x59,0xA5,0x59, + 0xC8,0x91,0x4E,0x4C,0x2A,0xB5,0xA5,0x65,0x48,0xA5,0x64, + 0x48,0x20,0x83,0xAE,0x20,0x8F,0xAD,0x68,0x85,0x6F,0x68, + 0x85,0x70,0xA0,0x00,0xB1,0x6F,0x18,0x71,0x64,0x90,0x05, + 0xA2,0x17,0x4C,0x37,0xA4,0x20,0x75,0xB4,0x20,0x7A,0xB6, + 0xA5,0x50,0xA4,0x51,0x20,0xAA,0xB6,0x20,0x8C,0xB6,0xA5, + 0x6F,0xA4,0x70,0x20,0xAA,0xB6,0x20,0xCA,0xB4,0x4C,0xB8, + 0xAD,0xA0,0x00,0xB1,0x6F,0x48,0xC8,0xB1,0x6F,0xAA,0xC8, + 0xB1,0x6F,0xA8,0x68,0x86,0x22,0x84,0x23,0xA8,0xF0,0x0A, + 0x48,0x88,0xB1,0x22,0x91,0x35,0x98,0xD0,0xF8,0x68,0x18, + 0x65,0x35,0x85,0x35,0x90,0x02,0xE6,0x36,0x60,0x20,0x8F, + 0xAD,0xA5,0x64,0xA4,0x65,0x85,0x22,0x84,0x23,0x20,0xDB, + 0xB6,0x08,0xA0,0x00,0xB1,0x22,0x48,0xC8,0xB1,0x22,0xAA, + 0xC8,0xB1,0x22,0xA8,0x68,0x28,0xD0,0x13,0xC4,0x34,0xD0, + 0x0F,0xE4,0x33,0xD0,0x0B,0x48,0x18,0x65,0x33,0x85,0x33, + 0x90,0x02,0xE6,0x34,0x68,0x86,0x22,0x84,0x23,0x60,0xC4, + 0x18,0xD0,0x0C,0xC5,0x17,0xD0,0x08,0x85,0x16,0xE9,0x03, + 0x85,0x17,0xA0,0x00,0x60,0x20,0xA1,0xB7,0x8A,0x48,0xA9, + 0x01,0x20,0x7D,0xB4,0x68,0xA0,0x00,0x91,0x62,0x68,0x68, + 0x4C,0xCA,0xB4,0x20,0x61,0xB7,0xD1,0x50,0x98,0x90,0x04, + 0xB1,0x50,0xAA,0x98,0x48,0x8A,0x48,0x20,0x7D,0xB4,0xA5, + 0x50,0xA4,0x51,0x20,0xAA,0xB6,0x68,0xA8,0x68,0x18,0x65, + 0x22,0x85,0x22,0x90,0x02,0xE6,0x23,0x98,0x20,0x8C,0xB6, + 0x4C,0xCA,0xB4,0x20,0x61,0xB7,0x18,0xF1,0x50,0x49,0xFF, + 0x4C,0x06,0xB7,0xA9,0xFF,0x85,0x65,0x20,0x79,0x00,0xC9, + 0x29,0xF0,0x06,0x20,0xFD,0xAE,0x20,0x9E,0xB7,0x20,0x61, + 0xB7,0xF0,0x4B,0xCA,0x8A,0x48,0x18,0xA2,0x00,0xF1,0x50, + 0xB0,0xB6,0x49,0xFF,0xC5,0x65,0x90,0xB1,0xA5,0x65,0xB0, + 0xAD,0x20,0xF7,0xAE,0x68,0xA8,0x68,0x85,0x55,0x68,0x68, + 0x68,0xAA,0x68,0x85,0x50,0x68,0x85,0x51,0xA5,0x55,0x48, + 0x98,0x48,0xA0,0x00,0x8A,0x60,0x20,0x82,0xB7,0x4C,0xA2, + 0xB3,0x20,0xA3,0xB6,0xA2,0x00,0x86,0x0D,0xA8,0x60,0x20, + 0x82,0xB7,0xF0,0x08,0xA0,0x00,0xB1,0x22,0xA8,0x4C,0xA2, + 0xB3,0x4C,0x48,0xB2,0x20,0x73,0x00,0x20,0x8A,0xAD,0x20, + 0xB8,0xB1,0xA6,0x64,0xD0,0xF0,0xA6,0x65,0x4C,0x79,0x00, + 0x20,0x82,0xB7,0xD0,0x03,0x4C,0xF7,0xB8,0xA6,0x7A,0xA4, + 0x7B,0x86,0x71,0x84,0x72,0xA6,0x22,0x86,0x7A,0x18,0x65, + 0x22,0x85,0x24,0xA6,0x23,0x86,0x7B,0x90,0x01,0xE8,0x86, + 0x25,0xA0,0x00,0xB1,0x24,0x48,0x98,0x91,0x24,0x20,0x79, + 0x00,0x20,0xF3,0xBC,0x68,0xA0,0x00,0x91,0x24,0xA6,0x71, + 0xA4,0x72,0x86,0x7A,0x84,0x7B,0x60,0x20,0x8A,0xAD,0x20, + 0xF7,0xB7,0x20,0xFD,0xAE,0x4C,0x9E,0xB7,0xA5,0x66,0x30, + 0x9D,0xA5,0x61,0xC9,0x91,0xB0,0x97,0x20,0x9B,0xBC,0xA5, + 0x64,0xA4,0x65,0x84,0x14,0x85,0x15,0x60,0xA5,0x15,0x48, + 0xA5,0x14,0x48,0x20,0xF7,0xB7,0xA0,0x00,0xB1,0x14,0xA8, + 0x68,0x85,0x14,0x68,0x85,0x15,0x4C,0xA2,0xB3,0x20,0xEB, + 0xB7,0x8A,0xA0,0x00,0x91,0x14,0x60,0x20,0xEB,0xB7,0x86, + 0x49,0xA2,0x00,0x20,0x79,0x00,0xF0,0x03,0x20,0xF1,0xB7, + 0x86,0x4A,0xA0,0x00,0xB1,0x14,0x45,0x4A,0x25,0x49,0xF0, + 0xF8,0x60,0xA9,0x11,0xA0,0xBF,0x4C,0x67,0xB8,0x20,0x8C, + 0xBA,0xA5,0x66,0x49,0xFF,0x85,0x66,0x45,0x6E,0x85,0x6F, + 0xA5,0x61,0x4C,0x6A,0xB8,0x20,0x99,0xB9,0x90,0x3C,0x20, + 0x8C,0xBA,0xD0,0x03,0x4C,0xFC,0xBB,0xA6,0x70,0x86,0x56, + 0xA2,0x69,0xA5,0x69,0xA8,0xF0,0xCE,0x38,0xE5,0x61,0xF0, + 0x24,0x90,0x12,0x84,0x61,0xA4,0x6E,0x84,0x66,0x49,0xFF, + 0x69,0x00,0xA0,0x00,0x84,0x56,0xA2,0x61,0xD0,0x04,0xA0, + 0x00,0x84,0x70,0xC9,0xF9,0x30,0xC7,0xA8,0xA5,0x70,0x56, + 0x01,0x20,0xB0,0xB9,0x24,0x6F,0x10,0x57,0xA0,0x61,0xE0, + 0x69,0xF0,0x02,0xA0,0x69,0x38,0x49,0xFF,0x65,0x56,0x85, + 0x70,0xB9,0x04,0x00,0xF5,0x04,0x85,0x65,0xB9,0x03,0x00, + 0xF5,0x03,0x85,0x64,0xB9,0x02,0x00,0xF5,0x02,0x85,0x63, + 0xB9,0x01,0x00,0xF5,0x01,0x85,0x62,0xB0,0x03,0x20,0x47, + 0xB9,0xA0,0x00,0x98,0x18,0xA6,0x62,0xD0,0x4A,0xA6,0x63, + 0x86,0x62,0xA6,0x64,0x86,0x63,0xA6,0x65,0x86,0x64,0xA6, + 0x70,0x86,0x65,0x84,0x70,0x69,0x08,0xC9,0x20,0xD0,0xE4, + 0xA9,0x00,0x85,0x61,0x85,0x66,0x60,0x65,0x56,0x85,0x70, + 0xA5,0x65,0x65,0x6D,0x85,0x65,0xA5,0x64,0x65,0x6C,0x85, + 0x64,0xA5,0x63,0x65,0x6B,0x85,0x63,0xA5,0x62,0x65,0x6A, + 0x85,0x62,0x4C,0x36,0xB9,0x69,0x01,0x06,0x70,0x26,0x65, + 0x26,0x64,0x26,0x63,0x26,0x62,0x10,0xF2,0x38,0xE5,0x61, + 0xB0,0xC7,0x49,0xFF,0x69,0x01,0x85,0x61,0x90,0x0E,0xE6, + 0x61,0xF0,0x42,0x66,0x62,0x66,0x63,0x66,0x64,0x66,0x65, + 0x66,0x70,0x60,0xA5,0x66,0x49,0xFF,0x85,0x66,0xA5,0x62, + 0x49,0xFF,0x85,0x62,0xA5,0x63,0x49,0xFF,0x85,0x63,0xA5, + 0x64,0x49,0xFF,0x85,0x64,0xA5,0x65,0x49,0xFF,0x85,0x65, + 0xA5,0x70,0x49,0xFF,0x85,0x70,0xE6,0x70,0xD0,0x0E,0xE6, + 0x65,0xD0,0x0A,0xE6,0x64,0xD0,0x06,0xE6,0x63,0xD0,0x02, + 0xE6,0x62,0x60,0xA2,0x0F,0x4C,0x37,0xA4,0xA2,0x25,0xB4, + 0x04,0x84,0x70,0xB4,0x03,0x94,0x04,0xB4,0x02,0x94,0x03, + 0xB4,0x01,0x94,0x02,0xA4,0x68,0x94,0x01,0x69,0x08,0x30, + 0xE8,0xF0,0xE6,0xE9,0x08,0xA8,0xA5,0x70,0xB0,0x14,0x16, + 0x01,0x90,0x02,0xF6,0x01,0x76,0x01,0x76,0x01,0x76,0x02, + 0x76,0x03,0x76,0x04,0x6A,0xC8,0xD0,0xEC,0x18,0x60,0x81, + 0x00,0x00,0x00,0x00,0x03,0x7F,0x5E,0x56,0xCB,0x79,0x80, + 0x13,0x9B,0x0B,0x64,0x80,0x76,0x38,0x93,0x16,0x82,0x38, + 0xAA,0x3B,0x20,0x80,0x35,0x04,0xF3,0x34,0x81,0x35,0x04, + 0xF3,0x34,0x80,0x80,0x00,0x00,0x00,0x80,0x31,0x72,0x17, + 0xF8,0x20,0x2B,0xBC,0xF0,0x02,0x10,0x03,0x4C,0x48,0xB2, + 0xA5,0x61,0xE9,0x7F,0x48,0xA9,0x80,0x85,0x61,0xA9,0xD6, + 0xA0,0xB9,0x20,0x67,0xB8,0xA9,0xDB,0xA0,0xB9,0x20,0x0F, + 0xBB,0xA9,0xBC,0xA0,0xB9,0x20,0x50,0xB8,0xA9,0xC1,0xA0, + 0xB9,0x20,0x43,0xE0,0xA9,0xE0,0xA0,0xB9,0x20,0x67,0xB8, + 0x68,0x20,0x7E,0xBD,0xA9,0xE5,0xA0,0xB9,0x20,0x8C,0xBA, + 0xD0,0x03,0x4C,0x8B,0xBA,0x20,0xB7,0xBA,0xA9,0x00,0x85, + 0x26,0x85,0x27,0x85,0x28,0x85,0x29,0xA5,0x70,0x20,0x59, + 0xBA,0xA5,0x65,0x20,0x59,0xBA,0xA5,0x64,0x20,0x59,0xBA, + 0xA5,0x63,0x20,0x59,0xBA,0xA5,0x62,0x20,0x5E,0xBA,0x4C, + 0x8F,0xBB,0xD0,0x03,0x4C,0x83,0xB9,0x4A,0x09,0x80,0xA8, + 0x90,0x19,0x18,0xA5,0x29,0x65,0x6D,0x85,0x29,0xA5,0x28, + 0x65,0x6C,0x85,0x28,0xA5,0x27,0x65,0x6B,0x85,0x27,0xA5, + 0x26,0x65,0x6A,0x85,0x26,0x66,0x26,0x66,0x27,0x66,0x28, + 0x66,0x29,0x66,0x70,0x98,0x4A,0xD0,0xD6,0x60,0x85,0x22, + 0x84,0x23,0xA0,0x04,0xB1,0x22,0x85,0x6D,0x88,0xB1,0x22, + 0x85,0x6C,0x88,0xB1,0x22,0x85,0x6B,0x88,0xB1,0x22,0x85, + 0x6E,0x45,0x66,0x85,0x6F,0xA5,0x6E,0x09,0x80,0x85,0x6A, + 0x88,0xB1,0x22,0x85,0x69,0xA5,0x61,0x60,0xA5,0x69,0xF0, + 0x1F,0x18,0x65,0x61,0x90,0x04,0x30,0x1D,0x18,0x2C,0x10, + 0x14,0x69,0x80,0x85,0x61,0xD0,0x03,0x4C,0xFB,0xB8,0xA5, + 0x6F,0x85,0x66,0x60,0xA5,0x66,0x49,0xFF,0x30,0x05,0x68, + 0x68,0x4C,0xF7,0xB8,0x4C,0x7E,0xB9,0x20,0x0C,0xBC,0xAA, + 0xF0,0x10,0x18,0x69,0x02,0xB0,0xF2,0xA2,0x00,0x86,0x6F, + 0x20,0x77,0xB8,0xE6,0x61,0xF0,0xE7,0x60,0x84,0x20,0x00, + 0x00,0x00,0x20,0x0C,0xBC,0xA9,0xF9,0xA0,0xBA,0xA2,0x00, + 0x86,0x6F,0x20,0xA2,0xBB,0x4C,0x12,0xBB,0x20,0x8C,0xBA, + 0xF0,0x76,0x20,0x1B,0xBC,0xA9,0x00,0x38,0xE5,0x61,0x85, + 0x61,0x20,0xB7,0xBA,0xE6,0x61,0xF0,0xBA,0xA2,0xFC,0xA9, + 0x01,0xA4,0x6A,0xC4,0x62,0xD0,0x10,0xA4,0x6B,0xC4,0x63, + 0xD0,0x0A,0xA4,0x6C,0xC4,0x64,0xD0,0x04,0xA4,0x6D,0xC4, + 0x65,0x08,0x2A,0x90,0x09,0xE8,0x95,0x29,0xF0,0x32,0x10, + 0x34,0xA9,0x01,0x28,0xB0,0x0E,0x06,0x6D,0x26,0x6C,0x26, + 0x6B,0x26,0x6A,0xB0,0xE6,0x30,0xCE,0x10,0xE2,0xA8,0xA5, + 0x6D,0xE5,0x65,0x85,0x6D,0xA5,0x6C,0xE5,0x64,0x85,0x6C, + 0xA5,0x6B,0xE5,0x63,0x85,0x6B,0xA5,0x6A,0xE5,0x62,0x85, + 0x6A,0x98,0x4C,0x4F,0xBB,0xA9,0x40,0xD0,0xCE,0x0A,0x0A, + 0x0A,0x0A,0x0A,0x0A,0x85,0x70,0x28,0x4C,0x8F,0xBB,0xA2, + 0x14,0x4C,0x37,0xA4,0xA5,0x26,0x85,0x62,0xA5,0x27,0x85, + 0x63,0xA5,0x28,0x85,0x64,0xA5,0x29,0x85,0x65,0x4C,0xD7, + 0xB8,0x85,0x22,0x84,0x23,0xA0,0x04,0xB1,0x22,0x85,0x65, + 0x88,0xB1,0x22,0x85,0x64,0x88,0xB1,0x22,0x85,0x63,0x88, + 0xB1,0x22,0x85,0x66,0x09,0x80,0x85,0x62,0x88,0xB1,0x22, + 0x85,0x61,0x84,0x70,0x60,0xA2,0x5C,0x2C,0xA2,0x57,0xA0, + 0x00,0xF0,0x04,0xA6,0x49,0xA4,0x4A,0x20,0x1B,0xBC,0x86, + 0x22,0x84,0x23,0xA0,0x04,0xA5,0x65,0x91,0x22,0x88,0xA5, + 0x64,0x91,0x22,0x88,0xA5,0x63,0x91,0x22,0x88,0xA5,0x66, + 0x09,0x7F,0x25,0x62,0x91,0x22,0x88,0xA5,0x61,0x91,0x22, + 0x84,0x70,0x60,0xA5,0x6E,0x85,0x66,0xA2,0x05,0xB5,0x68, + 0x95,0x60,0xCA,0xD0,0xF9,0x86,0x70,0x60,0x20,0x1B,0xBC, + 0xA2,0x06,0xB5,0x60,0x95,0x68,0xCA,0xD0,0xF9,0x86,0x70, + 0x60,0xA5,0x61,0xF0,0xFB,0x06,0x70,0x90,0xF7,0x20,0x6F, + 0xB9,0xD0,0xF2,0x4C,0x38,0xB9,0xA5,0x61,0xF0,0x09,0xA5, + 0x66,0x2A,0xA9,0xFF,0xB0,0x02,0xA9,0x01,0x60,0x20,0x2B, + 0xBC,0x85,0x62,0xA9,0x00,0x85,0x63,0xA2,0x88,0xA5,0x62, + 0x49,0xFF,0x2A,0xA9,0x00,0x85,0x65,0x85,0x64,0x86,0x61, + 0x85,0x70,0x85,0x66,0x4C,0xD2,0xB8,0x46,0x66,0x60,0x85, + 0x24,0x84,0x25,0xA0,0x00,0xB1,0x24,0xC8,0xAA,0xF0,0xC4, + 0xB1,0x24,0x45,0x66,0x30,0xC2,0xE4,0x61,0xD0,0x21,0xB1, + 0x24,0x09,0x80,0xC5,0x62,0xD0,0x19,0xC8,0xB1,0x24,0xC5, + 0x63,0xD0,0x12,0xC8,0xB1,0x24,0xC5,0x64,0xD0,0x0B,0xC8, + 0xA9,0x7F,0xC5,0x70,0xB1,0x24,0xE5,0x65,0xF0,0x28,0xA5, + 0x66,0x90,0x02,0x49,0xFF,0x4C,0x31,0xBC,0xA5,0x61,0xF0, + 0x4A,0x38,0xE9,0xA0,0x24,0x66,0x10,0x09,0xAA,0xA9,0xFF, + 0x85,0x68,0x20,0x4D,0xB9,0x8A,0xA2,0x61,0xC9,0xF9,0x10, + 0x06,0x20,0x99,0xB9,0x84,0x68,0x60,0xA8,0xA5,0x66,0x29, + 0x80,0x46,0x62,0x05,0x62,0x85,0x62,0x20,0xB0,0xB9,0x84, + 0x68,0x60,0xA5,0x61,0xC9,0xA0,0xB0,0x20,0x20,0x9B,0xBC, + 0x84,0x70,0xA5,0x66,0x84,0x66,0x49,0x80,0x2A,0xA9,0xA0, + 0x85,0x61,0xA5,0x65,0x85,0x07,0x4C,0xD2,0xB8,0x85,0x62, + 0x85,0x63,0x85,0x64,0x85,0x65,0xA8,0x60,0xA0,0x00,0xA2, + 0x0A,0x94,0x5D,0xCA,0x10,0xFB,0x90,0x0F,0xC9,0x2D,0xD0, + 0x04,0x86,0x67,0xF0,0x04,0xC9,0x2B,0xD0,0x05,0x20,0x73, + 0x00,0x90,0x5B,0xC9,0x2E,0xF0,0x2E,0xC9,0x45,0xD0,0x30, + 0x20,0x73,0x00,0x90,0x17,0xC9,0xAB,0xF0,0x0E,0xC9,0x2D, + 0xF0,0x0A,0xC9,0xAA,0xF0,0x08,0xC9,0x2B,0xF0,0x04,0xD0, + 0x07,0x66,0x60,0x20,0x73,0x00,0x90,0x5C,0x24,0x60,0x10, + 0x0E,0xA9,0x00,0x38,0xE5,0x5E,0x4C,0x49,0xBD,0x66,0x5F, + 0x24,0x5F,0x50,0xC3,0xA5,0x5E,0x38,0xE5,0x5D,0x85,0x5E, + 0xF0,0x12,0x10,0x09,0x20,0xFE,0xBA,0xE6,0x5E,0xD0,0xF9, + 0xF0,0x07,0x20,0xE2,0xBA,0xC6,0x5E,0xD0,0xF9,0xA5,0x67, + 0x30,0x01,0x60,0x4C,0xB4,0xBF,0x48,0x24,0x5F,0x10,0x02, + 0xE6,0x5D,0x20,0xE2,0xBA,0x68,0x38,0xE9,0x30,0x20,0x7E, + 0xBD,0x4C,0x0A,0xBD,0x48,0x20,0x0C,0xBC,0x68,0x20,0x3C, + 0xBC,0xA5,0x6E,0x45,0x66,0x85,0x6F,0xA6,0x61,0x4C,0x6A, + 0xB8,0xA5,0x5E,0xC9,0x0A,0x90,0x09,0xA9,0x64,0x24,0x60, + 0x30,0x11,0x4C,0x7E,0xB9,0x0A,0x0A,0x18,0x65,0x5E,0x0A, + 0x18,0xA0,0x00,0x71,0x7A,0x38,0xE9,0x30,0x85,0x5E,0x4C, + 0x30,0xBD,0x9B,0x3E,0xBC,0x1F,0xFD,0x9E,0x6E,0x6B,0x27, + 0xFD,0x9E,0x6E,0x6B,0x28,0x00,0xA9,0x71,0xA0,0xA3,0x20, + 0xDA,0xBD,0xA5,0x3A,0xA6,0x39,0x85,0x62,0x86,0x63,0xA2, + 0x90,0x38,0x20,0x49,0xBC,0x20,0xDF,0xBD,0x4C,0x1E,0xAB, + 0xA0,0x01,0xA9,0x20,0x24,0x66,0x10,0x02,0xA9,0x2D,0x99, + 0xFF,0x00,0x85,0x66,0x84,0x71,0xC8,0xA9,0x30,0xA6,0x61, + 0xD0,0x03,0x4C,0x04,0xBF,0xA9,0x00,0xE0,0x80,0xF0,0x02, + 0xB0,0x09,0xA9,0xBD,0xA0,0xBD,0x20,0x28,0xBA,0xA9,0xF7, + 0x85,0x5D,0xA9,0xB8,0xA0,0xBD,0x20,0x5B,0xBC,0xF0,0x1E, + 0x10,0x12,0xA9,0xB3,0xA0,0xBD,0x20,0x5B,0xBC,0xF0,0x02, + 0x10,0x0E,0x20,0xE2,0xBA,0xC6,0x5D,0xD0,0xEE,0x20,0xFE, + 0xBA,0xE6,0x5D,0xD0,0xDC,0x20,0x49,0xB8,0x20,0x9B,0xBC, + 0xA2,0x01,0xA5,0x5D,0x18,0x69,0x0A,0x30,0x09,0xC9,0x0B, + 0xB0,0x06,0x69,0xFF,0xAA,0xA9,0x02,0x38,0xE9,0x02,0x85, + 0x5E,0x86,0x5D,0x8A,0xF0,0x02,0x10,0x13,0xA4,0x71,0xA9, + 0x2E,0xC8,0x99,0xFF,0x00,0x8A,0xF0,0x06,0xA9,0x30,0xC8, + 0x99,0xFF,0x00,0x84,0x71,0xA0,0x00,0xA2,0x80,0xA5,0x65, + 0x18,0x79,0x19,0xBF,0x85,0x65,0xA5,0x64,0x79,0x18,0xBF, + 0x85,0x64,0xA5,0x63,0x79,0x17,0xBF,0x85,0x63,0xA5,0x62, + 0x79,0x16,0xBF,0x85,0x62,0xE8,0xB0,0x04,0x10,0xDE,0x30, + 0x02,0x30,0xDA,0x8A,0x90,0x04,0x49,0xFF,0x69,0x0A,0x69, + 0x2F,0xC8,0xC8,0xC8,0xC8,0x84,0x47,0xA4,0x71,0xC8,0xAA, + 0x29,0x7F,0x99,0xFF,0x00,0xC6,0x5D,0xD0,0x06,0xA9,0x2E, + 0xC8,0x99,0xFF,0x00,0x84,0x71,0xA4,0x47,0x8A,0x49,0xFF, + 0x29,0x80,0xAA,0xC0,0x24,0xF0,0x04,0xC0,0x3C,0xD0,0xA6, + 0xA4,0x71,0xB9,0xFF,0x00,0x88,0xC9,0x30,0xF0,0xF8,0xC9, + 0x2E,0xF0,0x01,0xC8,0xA9,0x2B,0xA6,0x5E,0xF0,0x2E,0x10, + 0x08,0xA9,0x00,0x38,0xE5,0x5E,0xAA,0xA9,0x2D,0x99,0x01, + 0x01,0xA9,0x45,0x99,0x00,0x01,0x8A,0xA2,0x2F,0x38,0xE8, + 0xE9,0x0A,0xB0,0xFB,0x69,0x3A,0x99,0x03,0x01,0x8A,0x99, + 0x02,0x01,0xA9,0x00,0x99,0x04,0x01,0xF0,0x08,0x99,0xFF, + 0x00,0xA9,0x00,0x99,0x00,0x01,0xA9,0x00,0xA0,0x01,0x60, + 0x80,0x00,0x00,0x00,0x00,0xFA,0x0A,0x1F,0x00,0x00,0x98, + 0x96,0x80,0xFF,0xF0,0xBD,0xC0,0x00,0x01,0x86,0xA0,0xFF, + 0xFF,0xD8,0xF0,0x00,0x00,0x03,0xE8,0xFF,0xFF,0xFF,0x9C, + 0x00,0x00,0x00,0x0A,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0x0A, + 0x80,0x00,0x03,0x4B,0xC0,0xFF,0xFF,0x73,0x60,0x00,0x00, + 0x0E,0x10,0xFF,0xFF,0xFD,0xA8,0x00,0x00,0x00,0x3C,0xEC, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x20,0x0C,0xBC, + 0xA9,0x11,0xA0,0xBF,0x20,0xA2,0xBB,0xF0,0x70,0xA5,0x69, + 0xD0,0x03,0x4C,0xF9,0xB8,0xA2,0x4E,0xA0,0x00,0x20,0xD4, + 0xBB,0xA5,0x6E,0x10,0x0F,0x20,0xCC,0xBC,0xA9,0x4E,0xA0, + 0x00,0x20,0x5B,0xBC,0xD0,0x03,0x98,0xA4,0x07,0x20,0xFE, + 0xBB,0x98,0x48,0x20,0xEA,0xB9,0xA9,0x4E,0xA0,0x00,0x20, + 0x28,0xBA,0x20,0xED,0xBF,0x68,0x4A,0x90,0x0A,0xA5,0x61, + 0xF0,0x06,0xA5,0x66,0x49,0xFF,0x85,0x66,0x60,0x81,0x38, + 0xAA,0x3B,0x29,0x07,0x71,0x34,0x58,0x3E,0x56,0x74,0x16, + 0x7E,0xB3,0x1B,0x77,0x2F,0xEE,0xE3,0x85,0x7A,0x1D,0x84, + 0x1C,0x2A,0x7C,0x63,0x59,0x58,0x0A,0x7E,0x75,0xFD,0xE7, + 0xC6,0x80,0x31,0x72,0x18,0x10,0x81,0x00,0x00,0x00,0x00, + 0xA9,0xBF,0xA0,0xBF,0x20,0x28,0xBA,0xA5,0x70,0x69,0x50, + 0x90,0x03,0x20,0x23,0xBC,0x4C,0x00,0xE0, +}; +//file auto-generated from kernal.901227-03.bin by bin2h.exe +const size_t rom_kernal_len = 8192; +const unsigned char PROGMEM rom_kernal[8192]= +{ + 0x85,0x56,0x20,0x0F,0xBC,0xA5,0x61,0xC9,0x88,0x90,0x03, + 0x20,0xD4,0xBA,0x20,0xCC,0xBC,0xA5,0x07,0x18,0x69,0x81, + 0xF0,0xF3,0x38,0xE9,0x01,0x48,0xA2,0x05,0xB5,0x69,0xB4, + 0x61,0x95,0x61,0x94,0x69,0xCA,0x10,0xF5,0xA5,0x56,0x85, + 0x70,0x20,0x53,0xB8,0x20,0xB4,0xBF,0xA9,0xC4,0xA0,0xBF, + 0x20,0x59,0xE0,0xA9,0x00,0x85,0x6F,0x68,0x20,0xB9,0xBA, + 0x60,0x85,0x71,0x84,0x72,0x20,0xCA,0xBB,0xA9,0x57,0x20, + 0x28,0xBA,0x20,0x5D,0xE0,0xA9,0x57,0xA0,0x00,0x4C,0x28, + 0xBA,0x85,0x71,0x84,0x72,0x20,0xC7,0xBB,0xB1,0x71,0x85, + 0x67,0xA4,0x71,0xC8,0x98,0xD0,0x02,0xE6,0x72,0x85,0x71, + 0xA4,0x72,0x20,0x28,0xBA,0xA5,0x71,0xA4,0x72,0x18,0x69, + 0x05,0x90,0x01,0xC8,0x85,0x71,0x84,0x72,0x20,0x67,0xB8, + 0xA9,0x5C,0xA0,0x00,0xC6,0x67,0xD0,0xE4,0x60,0x98,0x35, + 0x44,0x7A,0x00,0x68,0x28,0xB1,0x46,0x00,0x20,0x2B,0xBC, + 0x30,0x37,0xD0,0x20,0x20,0xF3,0xFF,0x86,0x22,0x84,0x23, + 0xA0,0x04,0xB1,0x22,0x85,0x62,0xC8,0xB1,0x22,0x85,0x64, + 0xA0,0x08,0xB1,0x22,0x85,0x63,0xC8,0xB1,0x22,0x85,0x65, + 0x4C,0xE3,0xE0,0xA9,0x8B,0xA0,0x00,0x20,0xA2,0xBB,0xA9, + 0x8D,0xA0,0xE0,0x20,0x28,0xBA,0xA9,0x92,0xA0,0xE0,0x20, + 0x67,0xB8,0xA6,0x65,0xA5,0x62,0x85,0x65,0x86,0x62,0xA6, + 0x63,0xA5,0x64,0x85,0x63,0x86,0x64,0xA9,0x00,0x85,0x66, + 0xA5,0x61,0x85,0x70,0xA9,0x80,0x85,0x61,0x20,0xD7,0xB8, + 0xA2,0x8B,0xA0,0x00,0x4C,0xD4,0xBB,0xC9,0xF0,0xD0,0x07, + 0x84,0x38,0x86,0x37,0x4C,0x63,0xA6,0xAA,0xD0,0x02,0xA2, + 0x1E,0x4C,0x37,0xA4,0x20,0xD2,0xFF,0xB0,0xE8,0x60,0x20, + 0xCF,0xFF,0xB0,0xE2,0x60,0x20,0xAD,0xE4,0xB0,0xDC,0x60, + 0x20,0xC6,0xFF,0xB0,0xD6,0x60,0x20,0xE4,0xFF,0xB0,0xD0, + 0x60,0x20,0x8A,0xAD,0x20,0xF7,0xB7,0xA9,0xE1,0x48,0xA9, + 0x46,0x48,0xAD,0x0F,0x03,0x48,0xAD,0x0C,0x03,0xAE,0x0D, + 0x03,0xAC,0x0E,0x03,0x28,0x6C,0x14,0x00,0x08,0x8D,0x0C, + 0x03,0x8E,0x0D,0x03,0x8C,0x0E,0x03,0x68,0x8D,0x0F,0x03, + 0x60,0x20,0xD4,0xE1,0xA6,0x2D,0xA4,0x2E,0xA9,0x2B,0x20, + 0xD8,0xFF,0xB0,0x95,0x60,0xA9,0x01,0x2C,0xA9,0x00,0x85, + 0x0A,0x20,0xD4,0xE1,0xA5,0x0A,0xA6,0x2B,0xA4,0x2C,0x20, + 0xD5,0xFF,0xB0,0x57,0xA5,0x0A,0xF0,0x17,0xA2,0x1C,0x20, + 0xB7,0xFF,0x29,0x10,0xD0,0x17,0xA5,0x7A,0xC9,0x02,0xF0, + 0x07,0xA9,0x64,0xA0,0xA3,0x4C,0x1E,0xAB,0x60,0x20,0xB7, + 0xFF,0x29,0xBF,0xF0,0x05,0xA2,0x1D,0x4C,0x37,0xA4,0xA5, + 0x7B,0xC9,0x02,0xD0,0x0E,0x86,0x2D,0x84,0x2E,0xA9,0x76, + 0xA0,0xA3,0x20,0x1E,0xAB,0x4C,0x2A,0xA5,0x20,0x8E,0xA6, + 0x20,0x33,0xA5,0x4C,0x77,0xA6,0x20,0x19,0xE2,0x20,0xC0, + 0xFF,0xB0,0x0B,0x60,0x20,0x19,0xE2,0xA5,0x49,0x20,0xC3, + 0xFF,0x90,0xC3,0x4C,0xF9,0xE0,0xA9,0x00,0x20,0xBD,0xFF, + 0xA2,0x01,0xA0,0x00,0x20,0xBA,0xFF,0x20,0x06,0xE2,0x20, + 0x57,0xE2,0x20,0x06,0xE2,0x20,0x00,0xE2,0xA0,0x00,0x86, + 0x49,0x20,0xBA,0xFF,0x20,0x06,0xE2,0x20,0x00,0xE2,0x8A, + 0xA8,0xA6,0x49,0x4C,0xBA,0xFF,0x20,0x0E,0xE2,0x4C,0x9E, + 0xB7,0x20,0x79,0x00,0xD0,0x02,0x68,0x68,0x60,0x20,0xFD, + 0xAE,0x20,0x79,0x00,0xD0,0xF7,0x4C,0x08,0xAF,0xA9,0x00, + 0x20,0xBD,0xFF,0x20,0x11,0xE2,0x20,0x9E,0xB7,0x86,0x49, + 0x8A,0xA2,0x01,0xA0,0x00,0x20,0xBA,0xFF,0x20,0x06,0xE2, + 0x20,0x00,0xE2,0x86,0x4A,0xA0,0x00,0xA5,0x49,0xE0,0x03, + 0x90,0x01,0x88,0x20,0xBA,0xFF,0x20,0x06,0xE2,0x20,0x00, + 0xE2,0x8A,0xA8,0xA6,0x4A,0xA5,0x49,0x20,0xBA,0xFF,0x20, + 0x06,0xE2,0x20,0x0E,0xE2,0x20,0x9E,0xAD,0x20,0xA3,0xB6, + 0xA6,0x22,0xA4,0x23,0x4C,0xBD,0xFF,0xA9,0xE0,0xA0,0xE2, + 0x20,0x67,0xB8,0x20,0x0C,0xBC,0xA9,0xE5,0xA0,0xE2,0xA6, + 0x6E,0x20,0x07,0xBB,0x20,0x0C,0xBC,0x20,0xCC,0xBC,0xA9, + 0x00,0x85,0x6F,0x20,0x53,0xB8,0xA9,0xEA,0xA0,0xE2,0x20, + 0x50,0xB8,0xA5,0x66,0x48,0x10,0x0D,0x20,0x49,0xB8,0xA5, + 0x66,0x30,0x09,0xA5,0x12,0x49,0xFF,0x85,0x12,0x20,0xB4, + 0xBF,0xA9,0xEA,0xA0,0xE2,0x20,0x67,0xB8,0x68,0x10,0x03, + 0x20,0xB4,0xBF,0xA9,0xEF,0xA0,0xE2,0x4C,0x43,0xE0,0x20, + 0xCA,0xBB,0xA9,0x00,0x85,0x12,0x20,0x6B,0xE2,0xA2,0x4E, + 0xA0,0x00,0x20,0xF6,0xE0,0xA9,0x57,0xA0,0x00,0x20,0xA2, + 0xBB,0xA9,0x00,0x85,0x66,0xA5,0x12,0x20,0xDC,0xE2,0xA9, + 0x4E,0xA0,0x00,0x4C,0x0F,0xBB,0x48,0x4C,0x9D,0xE2,0x81, + 0x49,0x0F,0xDA,0xA2,0x83,0x49,0x0F,0xDA,0xA2,0x7F,0x00, + 0x00,0x00,0x00,0x05,0x84,0xE6,0x1A,0x2D,0x1B,0x86,0x28, + 0x07,0xFB,0xF8,0x87,0x99,0x68,0x89,0x01,0x87,0x23,0x35, + 0xDF,0xE1,0x86,0xA5,0x5D,0xE7,0x28,0x83,0x49,0x0F,0xDA, + 0xA2,0xA5,0x66,0x48,0x10,0x03,0x20,0xB4,0xBF,0xA5,0x61, + 0x48,0xC9,0x81,0x90,0x07,0xA9,0xBC,0xA0,0xB9,0x20,0x0F, + 0xBB,0xA9,0x3E,0xA0,0xE3,0x20,0x43,0xE0,0x68,0xC9,0x81, + 0x90,0x07,0xA9,0xE0,0xA0,0xE2,0x20,0x50,0xB8,0x68,0x10, + 0x03,0x4C,0xB4,0xBF,0x60,0x0B,0x76,0xB3,0x83,0xBD,0xD3, + 0x79,0x1E,0xF4,0xA6,0xF5,0x7B,0x83,0xFC,0xB0,0x10,0x7C, + 0x0C,0x1F,0x67,0xCA,0x7C,0xDE,0x53,0xCB,0xC1,0x7D,0x14, + 0x64,0x70,0x4C,0x7D,0xB7,0xEA,0x51,0x7A,0x7D,0x63,0x30, + 0x88,0x7E,0x7E,0x92,0x44,0x99,0x3A,0x7E,0x4C,0xCC,0x91, + 0xC7,0x7F,0xAA,0xAA,0xAA,0x13,0x81,0x00,0x00,0x00,0x00, + 0x20,0xCC,0xFF,0xA9,0x00,0x85,0x13,0x20,0x7A,0xA6,0x58, + 0xA2,0x80,0x6C,0x00,0x03,0x8A,0x30,0x03,0x4C,0x3A,0xA4, + 0x4C,0x74,0xA4,0x20,0x53,0xE4,0x20,0xBF,0xE3,0x20,0x22, + 0xE4,0xA2,0xFB,0x9A,0xD0,0xE4,0xE6,0x7A,0xD0,0x02,0xE6, + 0x7B,0xAD,0x60,0xEA,0xC9,0x3A,0xB0,0x0A,0xC9,0x20,0xF0, + 0xEF,0x38,0xE9,0x30,0x38,0xE9,0xD0,0x60,0x80,0x4F,0xC7, + 0x52,0x58,0xA9,0x4C,0x85,0x54,0x8D,0x10,0x03,0xA9,0x48, + 0xA0,0xB2,0x8D,0x11,0x03,0x8C,0x12,0x03,0xA9,0x91,0xA0, + 0xB3,0x85,0x05,0x84,0x06,0xA9,0xAA,0xA0,0xB1,0x85,0x03, + 0x84,0x04,0xA2,0x1C,0xBD,0xA2,0xE3,0x95,0x73,0xCA,0x10, + 0xF8,0xA9,0x03,0x85,0x53,0xA9,0x00,0x85,0x68,0x85,0x13, + 0x85,0x18,0xA2,0x01,0x8E,0xFD,0x01,0x8E,0xFC,0x01,0xA2, + 0x19,0x86,0x16,0x38,0x20,0x9C,0xFF,0x86,0x2B,0x84,0x2C, + 0x38,0x20,0x99,0xFF,0x86,0x37,0x84,0x38,0x86,0x33,0x84, + 0x34,0xA0,0x00,0x98,0x91,0x2B,0xE6,0x2B,0xD0,0x02,0xE6, + 0x2C,0x60,0xA5,0x2B,0xA4,0x2C,0x20,0x08,0xA4,0xA9,0x73, + 0xA0,0xE4,0x20,0x1E,0xAB,0xA5,0x37,0x38,0xE5,0x2B,0xAA, + 0xA5,0x38,0xE5,0x2C,0x20,0xCD,0xBD,0xA9,0x60,0xA0,0xE4, + 0x20,0x1E,0xAB,0x4C,0x44,0xA6,0x8B,0xE3,0x83,0xA4,0x7C, + 0xA5,0x1A,0xA7,0xE4,0xA7,0x86,0xAE,0xA2,0x0B,0xBD,0x47, + 0xE4,0x9D,0x00,0x03,0xCA,0x10,0xF7,0x60,0x00,0x20,0x42, + 0x41,0x53,0x49,0x43,0x20,0x42,0x59,0x54,0x45,0x53,0x20, + 0x46,0x52,0x45,0x45,0x0D,0x00,0x93,0x0D,0x20,0x20,0x20, + 0x20,0x2A,0x2A,0x2A,0x2A,0x20,0x43,0x4F,0x4D,0x4D,0x4F, + 0x44,0x4F,0x52,0x45,0x20,0x36,0x34,0x20,0x42,0x41,0x53, + 0x49,0x43,0x20,0x56,0x32,0x20,0x2A,0x2A,0x2A,0x2A,0x0D, + 0x0D,0x20,0x36,0x34,0x4B,0x20,0x52,0x41,0x4D,0x20,0x53, + 0x59,0x53,0x54,0x45,0x4D,0x20,0x20,0x00,0x81,0x48,0x20, + 0xC9,0xFF,0xAA,0x68,0x90,0x01,0x8A,0x60,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0x85,0xA9,0xA9,0x01,0x85,0xAB,0x60,0xAD, + 0x86,0x02,0x91,0xF3,0x60,0x69,0x02,0xA4,0x91,0xC8,0xD0, + 0x04,0xC5,0xA1,0xD0,0xF7,0x60,0x19,0x26,0x44,0x19,0x1A, + 0x11,0xE8,0x0D,0x70,0x0C,0x06,0x06,0xD1,0x02,0x37,0x01, + 0xAE,0x00,0x69,0x00,0xA2,0x00,0xA0,0xDC,0x60,0xA2,0x28, + 0xA0,0x19,0x60,0xB0,0x07,0x86,0xD6,0x84,0xD3,0x20,0x6C, + 0xE5,0xA6,0xD6,0xA4,0xD3,0x60,0x20,0xA0,0xE5,0xA9,0x00, + 0x8D,0x91,0x02,0x85,0xCF,0xA9,0x48,0x8D,0x8F,0x02,0xA9, + 0xEB,0x8D,0x90,0x02,0xA9,0x0A,0x8D,0x89,0x02,0x8D,0x8C, + 0x02,0xA9,0x0E,0x8D,0x86,0x02,0xA9,0x04,0x8D,0x8B,0x02, + 0xA9,0x0C,0x85,0xCD,0x85,0xCC,0xAD,0x88,0x02,0x09,0x80, + 0xA8,0xA9,0x00,0xAA,0x94,0xD9,0x18,0x69,0x28,0x90,0x01, + 0xC8,0xE8,0xE0,0x1A,0xD0,0xF3,0xA9,0xFF,0x95,0xD9,0xA2, + 0x18,0x20,0xFF,0xE9,0xCA,0x10,0xFA,0xA0,0x00,0x84,0xD3, + 0x84,0xD6,0xA6,0xD6,0xA5,0xD3,0xB4,0xD9,0x30,0x08,0x18, + 0x69,0x28,0x85,0xD3,0xCA,0x10,0xF4,0x20,0xF0,0xE9,0xA9, + 0x27,0xE8,0xB4,0xD9,0x30,0x06,0x18,0x69,0x28,0xE8,0x10, + 0xF6,0x85,0xD5,0x4C,0x24,0xEA,0xE4,0xC9,0xF0,0x03,0x4C, + 0xED,0xE6,0x60,0xEA,0x20,0xA0,0xE5,0x4C,0x66,0xE5,0xA9, + 0x03,0x85,0x9A,0xA9,0x00,0x85,0x99,0xA2,0x2F,0xBD,0xB8, + 0xEC,0x9D,0xFF,0xCF,0xCA,0xD0,0xF7,0x60,0xAC,0x77,0x02, + 0xA2,0x00,0xBD,0x78,0x02,0x9D,0x77,0x02,0xE8,0xE4,0xC6, + 0xD0,0xF5,0xC6,0xC6,0x98,0x58,0x18,0x60,0x20,0x16,0xE7, + 0xA5,0xC6,0x85,0xCC,0x8D,0x92,0x02,0xF0,0xF7,0x78,0xA5, + 0xCF,0xF0,0x0C,0xA5,0xCE,0xAE,0x87,0x02,0xA0,0x00,0x84, + 0xCF,0x20,0x13,0xEA,0x20,0xB4,0xE5,0xC9,0x83,0xD0,0x10, + 0xA2,0x09,0x78,0x86,0xC6,0xBD,0xE6,0xEC,0x9D,0x76,0x02, + 0xCA,0xD0,0xF7,0xF0,0xCF,0xC9,0x0D,0xD0,0xC8,0xA4,0xD5, + 0x84,0xD0,0xB1,0xD1,0xC9,0x20,0xD0,0x03,0x88,0xD0,0xF7, + 0xC8,0x84,0xC8,0xA0,0x00,0x8C,0x92,0x02,0x84,0xD3,0x84, + 0xD4,0xA5,0xC9,0x30,0x1B,0xA6,0xD6,0x20,0x91,0xE5,0xE4, + 0xC9,0xD0,0x12,0xA5,0xCA,0x85,0xD3,0xC5,0xC8,0x90,0x0A, + 0xB0,0x2B,0x98,0x48,0x8A,0x48,0xA5,0xD0,0xF0,0x93,0xA4, + 0xD3,0xB1,0xD1,0x85,0xD7,0x29,0x3F,0x06,0xD7,0x24,0xD7, + 0x10,0x02,0x09,0x80,0x90,0x04,0xA6,0xD4,0xD0,0x04,0x70, + 0x02,0x09,0x40,0xE6,0xD3,0x20,0x84,0xE6,0xC4,0xC8,0xD0, + 0x17,0xA9,0x00,0x85,0xD0,0xA9,0x0D,0xA6,0x99,0xE0,0x03, + 0xF0,0x06,0xA6,0x9A,0xE0,0x03,0xF0,0x03,0x20,0x16,0xE7, + 0xA9,0x0D,0x85,0xD7,0x68,0xAA,0x68,0xA8,0xA5,0xD7,0xC9, + 0xDE,0xD0,0x02,0xA9,0xFF,0x18,0x60,0xC9,0x22,0xD0,0x08, + 0xA5,0xD4,0x49,0x01,0x85,0xD4,0xA9,0x22,0x60,0x09,0x40, + 0xA6,0xC7,0xF0,0x02,0x09,0x80,0xA6,0xD8,0xF0,0x02,0xC6, + 0xD8,0xAE,0x86,0x02,0x20,0x13,0xEA,0x20,0xB6,0xE6,0x68, + 0xA8,0xA5,0xD8,0xF0,0x02,0x46,0xD4,0x68,0xAA,0x68,0x18, + 0x58,0x60,0x20,0xB3,0xE8,0xE6,0xD3,0xA5,0xD5,0xC5,0xD3, + 0xB0,0x3F,0xC9,0x4F,0xF0,0x32,0xAD,0x92,0x02,0xF0,0x03, + 0x4C,0x67,0xE9,0xA6,0xD6,0xE0,0x19,0x90,0x07,0x20,0xEA, + 0xE8,0xC6,0xD6,0xA6,0xD6,0x16,0xD9,0x56,0xD9,0xE8,0xB5, + 0xD9,0x09,0x80,0x95,0xD9,0xCA,0xA5,0xD5,0x18,0x69,0x28, + 0x85,0xD5,0xB5,0xD9,0x30,0x03,0xCA,0xD0,0xF9,0x4C,0xF0, + 0xE9,0xC6,0xD6,0x20,0x7C,0xE8,0xA9,0x00,0x85,0xD3,0x60, + 0xA6,0xD6,0xD0,0x06,0x86,0xD3,0x68,0x68,0xD0,0x9D,0xCA, + 0x86,0xD6,0x20,0x6C,0xE5,0xA4,0xD5,0x84,0xD3,0x60,0x48, + 0x85,0xD7,0x8A,0x48,0x98,0x48,0xA9,0x00,0x85,0xD0,0xA4, + 0xD3,0xA5,0xD7,0x10,0x03,0x4C,0xD4,0xE7,0xC9,0x0D,0xD0, + 0x03,0x4C,0x91,0xE8,0xC9,0x20,0x90,0x10,0xC9,0x60,0x90, + 0x04,0x29,0xDF,0xD0,0x02,0x29,0x3F,0x20,0x84,0xE6,0x4C, + 0x93,0xE6,0xA6,0xD8,0xF0,0x03,0x4C,0x97,0xE6,0xC9,0x14, + 0xD0,0x2E,0x98,0xD0,0x06,0x20,0x01,0xE7,0x4C,0x73,0xE7, + 0x20,0xA1,0xE8,0x88,0x84,0xD3,0x20,0x24,0xEA,0xC8,0xB1, + 0xD1,0x88,0x91,0xD1,0xC8,0xB1,0xF3,0x88,0x91,0xF3,0xC8, + 0xC4,0xD5,0xD0,0xEF,0xA9,0x20,0x91,0xD1,0xAD,0x86,0x02, + 0x91,0xF3,0x10,0x4D,0xA6,0xD4,0xF0,0x03,0x4C,0x97,0xE6, + 0xC9,0x12,0xD0,0x02,0x85,0xC7,0xC9,0x13,0xD0,0x03,0x20, + 0x66,0xE5,0xC9,0x1D,0xD0,0x17,0xC8,0x20,0xB3,0xE8,0x84, + 0xD3,0x88,0xC4,0xD5,0x90,0x09,0xC6,0xD6,0x20,0x7C,0xE8, + 0xA0,0x00,0x84,0xD3,0x4C,0xA8,0xE6,0xC9,0x11,0xD0,0x1D, + 0x18,0x98,0x69,0x28,0xA8,0xE6,0xD6,0xC5,0xD5,0x90,0xEC, + 0xF0,0xEA,0xC6,0xD6,0xE9,0x28,0x90,0x04,0x85,0xD3,0xD0, + 0xF8,0x20,0x7C,0xE8,0x4C,0xA8,0xE6,0x20,0xCB,0xE8,0x4C, + 0x44,0xEC,0x29,0x7F,0xC9,0x7F,0xD0,0x02,0xA9,0x5E,0xC9, + 0x20,0x90,0x03,0x4C,0x91,0xE6,0xC9,0x0D,0xD0,0x03,0x4C, + 0x91,0xE8,0xA6,0xD4,0xD0,0x3F,0xC9,0x14,0xD0,0x37,0xA4, + 0xD5,0xB1,0xD1,0xC9,0x20,0xD0,0x04,0xC4,0xD3,0xD0,0x07, + 0xC0,0x4F,0xF0,0x24,0x20,0x65,0xE9,0xA4,0xD5,0x20,0x24, + 0xEA,0x88,0xB1,0xD1,0xC8,0x91,0xD1,0x88,0xB1,0xF3,0xC8, + 0x91,0xF3,0x88,0xC4,0xD3,0xD0,0xEF,0xA9,0x20,0x91,0xD1, + 0xAD,0x86,0x02,0x91,0xF3,0xE6,0xD8,0x4C,0xA8,0xE6,0xA6, + 0xD8,0xF0,0x05,0x09,0x40,0x4C,0x97,0xE6,0xC9,0x11,0xD0, + 0x16,0xA6,0xD6,0xF0,0x37,0xC6,0xD6,0xA5,0xD3,0x38,0xE9, + 0x28,0x90,0x04,0x85,0xD3,0x10,0x2A,0x20,0x6C,0xE5,0xD0, + 0x25,0xC9,0x12,0xD0,0x04,0xA9,0x00,0x85,0xC7,0xC9,0x1D, + 0xD0,0x12,0x98,0xF0,0x09,0x20,0xA1,0xE8,0x88,0x84,0xD3, + 0x4C,0xA8,0xE6,0x20,0x01,0xE7,0x4C,0xA8,0xE6,0xC9,0x13, + 0xD0,0x06,0x20,0x44,0xE5,0x4C,0xA8,0xE6,0x09,0x80,0x20, + 0xCB,0xE8,0x4C,0x4F,0xEC,0x46,0xC9,0xA6,0xD6,0xE8,0xE0, + 0x19,0xD0,0x03,0x20,0xEA,0xE8,0xB5,0xD9,0x10,0xF4,0x86, + 0xD6,0x4C,0x6C,0xE5,0xA2,0x00,0x86,0xD8,0x86,0xC7,0x86, + 0xD4,0x86,0xD3,0x20,0x7C,0xE8,0x4C,0xA8,0xE6,0xA2,0x02, + 0xA9,0x00,0xC5,0xD3,0xF0,0x07,0x18,0x69,0x28,0xCA,0xD0, + 0xF6,0x60,0xC6,0xD6,0x60,0xA2,0x02,0xA9,0x27,0xC5,0xD3, + 0xF0,0x07,0x18,0x69,0x28,0xCA,0xD0,0xF6,0x60,0xA6,0xD6, + 0xE0,0x19,0xF0,0x02,0xE6,0xD6,0x60,0xA2,0x0F,0xDD,0xDA, + 0xE8,0xF0,0x04,0xCA,0x10,0xF8,0x60,0x8E,0x86,0x02,0x60, + 0x90,0x05,0x1C,0x9F,0x9C,0x1E,0x1F,0x9E,0x81,0x95,0x96, + 0x97,0x98,0x99,0x9A,0x9B,0xA5,0xAC,0x48,0xA5,0xAD,0x48, + 0xA5,0xAE,0x48,0xA5,0xAF,0x48,0xA2,0xFF,0xC6,0xD6,0xC6, + 0xC9,0xCE,0xA5,0x02,0xE8,0x20,0xF0,0xE9,0xE0,0x18,0xB0, + 0x0C,0xBD,0xF1,0xEC,0x85,0xAC,0xB5,0xDA,0x20,0xC8,0xE9, + 0x30,0xEC,0x20,0xFF,0xE9,0xA2,0x00,0xB5,0xD9,0x29,0x7F, + 0xB4,0xDA,0x10,0x02,0x09,0x80,0x95,0xD9,0xE8,0xE0,0x18, + 0xD0,0xEF,0xA5,0xF1,0x09,0x80,0x85,0xF1,0xA5,0xD9,0x10, + 0xC3,0xE6,0xD6,0xEE,0xA5,0x02,0xA9,0x7F,0x8D,0x00,0xDC, + 0xAD,0x01,0xDC,0xC9,0xFB,0x08,0xA9,0x7F,0x8D,0x00,0xDC, + 0x28,0xD0,0x0B,0xA0,0x00,0xEA,0xCA,0xD0,0xFC,0x88,0xD0, + 0xF9,0x84,0xC6,0xA6,0xD6,0x68,0x85,0xAF,0x68,0x85,0xAE, + 0x68,0x85,0xAD,0x68,0x85,0xAC,0x60,0xA6,0xD6,0xE8,0xB5, + 0xD9,0x10,0xFB,0x8E,0xA5,0x02,0xE0,0x18,0xF0,0x0E,0x90, + 0x0C,0x20,0xEA,0xE8,0xAE,0xA5,0x02,0xCA,0xC6,0xD6,0x4C, + 0xDA,0xE6,0xA5,0xAC,0x48,0xA5,0xAD,0x48,0xA5,0xAE,0x48, + 0xA5,0xAF,0x48,0xA2,0x19,0xCA,0x20,0xF0,0xE9,0xEC,0xA5, + 0x02,0x90,0x0E,0xF0,0x0C,0xBD,0xEF,0xEC,0x85,0xAC,0xB5, + 0xD8,0x20,0xC8,0xE9,0x30,0xE9,0x20,0xFF,0xE9,0xA2,0x17, + 0xEC,0xA5,0x02,0x90,0x0F,0xB5,0xDA,0x29,0x7F,0xB4,0xD9, + 0x10,0x02,0x09,0x80,0x95,0xDA,0xCA,0xD0,0xEC,0xAE,0xA5, + 0x02,0x20,0xDA,0xE6,0x4C,0x58,0xE9,0x29,0x03,0x0D,0x88, + 0x02,0x85,0xAD,0x20,0xE0,0xE9,0xA0,0x27,0xB1,0xAC,0x91, + 0xD1,0xB1,0xAE,0x91,0xF3,0x88,0x10,0xF5,0x60,0x20,0x24, + 0xEA,0xA5,0xAC,0x85,0xAE,0xA5,0xAD,0x29,0x03,0x09,0xD8, + 0x85,0xAF,0x60,0xBD,0xF0,0xEC,0x85,0xD1,0xB5,0xD9,0x29, + 0x03,0x0D,0x88,0x02,0x85,0xD2,0x60,0xA0,0x27,0x20,0xF0, + 0xE9,0x20,0x24,0xEA,0x20,0xDA,0xE4,0xA9,0x20,0x91,0xD1, + 0x88,0x10,0xF6,0x60,0xEA,0xA8,0xA9,0x02,0x85,0xCD,0x20, + 0x24,0xEA,0x98,0xA4,0xD3,0x91,0xD1,0x8A,0x91,0xF3,0x60, + 0xA5,0xD1,0x85,0xF3,0xA5,0xD2,0x29,0x03,0x09,0xD8,0x85, + 0xF4,0x60,0x20,0xEA,0xFF,0xA5,0xCC,0xD0,0x29,0xC6,0xCD, + 0xD0,0x25,0xA9,0x14,0x85,0xCD,0xA4,0xD3,0x46,0xCF,0xAE, + 0x87,0x02,0xB1,0xD1,0xB0,0x11,0xE6,0xCF,0x85,0xCE,0x20, + 0x24,0xEA,0xB1,0xF3,0x8D,0x87,0x02,0xAE,0x86,0x02,0xA5, + 0xCE,0x49,0x80,0x20,0x1C,0xEA,0xA5,0x01,0x29,0x10,0xF0, + 0x0A,0xA0,0x00,0x84,0xC0,0xA5,0x01,0x09,0x20,0xD0,0x08, + 0xA5,0xC0,0xD0,0x06,0xA5,0x01,0x29,0x1F,0x85,0x01,0x20, + 0x87,0xEA,0xAD,0x0D,0xDC,0x68,0xA8,0x68,0xAA,0x68,0x40, + 0xA9,0x00,0x8D,0x8D,0x02,0xA0,0x40,0x84,0xCB,0x8D,0x00, + 0xDC,0xAE,0x01,0xDC,0xE0,0xFF,0xF0,0x61,0xA8,0xA9,0x81, + 0x85,0xF5,0xA9,0xEB,0x85,0xF6,0xA9,0xFE,0x8D,0x00,0xDC, + 0xA2,0x08,0x48,0xAD,0x01,0xDC,0xCD,0x01,0xDC,0xD0,0xF8, + 0x4A,0xB0,0x16,0x48,0xB1,0xF5,0xC9,0x05,0xB0,0x0C,0xC9, + 0x03,0xF0,0x08,0x0D,0x8D,0x02,0x8D,0x8D,0x02,0x10,0x02, + 0x84,0xCB,0x68,0xC8,0xC0,0x41,0xB0,0x0B,0xCA,0xD0,0xDF, + 0x38,0x68,0x2A,0x8D,0x00,0xDC,0xD0,0xCC,0x68,0x6C,0x8F, + 0x02,0xA4,0xCB,0xB1,0xF5,0xAA,0xC4,0xC5,0xF0,0x07,0xA0, + 0x10,0x8C,0x8C,0x02,0xD0,0x36,0x29,0x7F,0x2C,0x8A,0x02, + 0x30,0x16,0x70,0x49,0xC9,0x7F,0xF0,0x29,0xC9,0x14,0xF0, + 0x0C,0xC9,0x20,0xF0,0x08,0xC9,0x1D,0xF0,0x04,0xC9,0x11, + 0xD0,0x35,0xAC,0x8C,0x02,0xF0,0x05,0xCE,0x8C,0x02,0xD0, + 0x2B,0xCE,0x8B,0x02,0xD0,0x26,0xA0,0x04,0x8C,0x8B,0x02, + 0xA4,0xC6,0x88,0x10,0x1C,0xA4,0xCB,0x84,0xC5,0xAC,0x8D, + 0x02,0x8C,0x8E,0x02,0xE0,0xFF,0xF0,0x0E,0x8A,0xA6,0xC6, + 0xEC,0x89,0x02,0xB0,0x06,0x9D,0x77,0x02,0xE8,0x86,0xC6, + 0xA9,0x7F,0x8D,0x00,0xDC,0x60,0xAD,0x8D,0x02,0xC9,0x03, + 0xD0,0x15,0xCD,0x8E,0x02,0xF0,0xEE,0xAD,0x91,0x02,0x30, + 0x1D,0xAD,0x18,0xD0,0x49,0x02,0x8D,0x18,0xD0,0x4C,0x76, + 0xEB,0x0A,0xC9,0x08,0x90,0x02,0xA9,0x06,0xAA,0xBD,0x79, + 0xEB,0x85,0xF5,0xBD,0x7A,0xEB,0x85,0xF6,0x4C,0xE0,0xEA, + 0x81,0xEB,0xC2,0xEB,0x03,0xEC,0x78,0xEC,0x14,0x0D,0x1D, + 0x88,0x85,0x86,0x87,0x11,0x33,0x57,0x41,0x34,0x5A,0x53, + 0x45,0x01,0x35,0x52,0x44,0x36,0x43,0x46,0x54,0x58,0x37, + 0x59,0x47,0x38,0x42,0x48,0x55,0x56,0x39,0x49,0x4A,0x30, + 0x4D,0x4B,0x4F,0x4E,0x2B,0x50,0x4C,0x2D,0x2E,0x3A,0x40, + 0x2C,0x5C,0x2A,0x3B,0x13,0x01,0x3D,0x5E,0x2F,0x31,0x5F, + 0x04,0x32,0x20,0x02,0x51,0x03,0xFF,0x94,0x8D,0x9D,0x8C, + 0x89,0x8A,0x8B,0x91,0x23,0xD7,0xC1,0x24,0xDA,0xD3,0xC5, + 0x01,0x25,0xD2,0xC4,0x26,0xC3,0xC6,0xD4,0xD8,0x27,0xD9, + 0xC7,0x28,0xC2,0xC8,0xD5,0xD6,0x29,0xC9,0xCA,0x30,0xCD, + 0xCB,0xCF,0xCE,0xDB,0xD0,0xCC,0xDD,0x3E,0x5B,0xBA,0x3C, + 0xA9,0xC0,0x5D,0x93,0x01,0x3D,0xDE,0x3F,0x21,0x5F,0x04, + 0x22,0xA0,0x02,0xD1,0x83,0xFF,0x94,0x8D,0x9D,0x8C,0x89, + 0x8A,0x8B,0x91,0x96,0xB3,0xB0,0x97,0xAD,0xAE,0xB1,0x01, + 0x98,0xB2,0xAC,0x99,0xBC,0xBB,0xA3,0xBD,0x9A,0xB7,0xA5, + 0x9B,0xBF,0xB4,0xB8,0xBE,0x29,0xA2,0xB5,0x30,0xA7,0xA1, + 0xB9,0xAA,0xA6,0xAF,0xB6,0xDC,0x3E,0x5B,0xA4,0x3C,0xA8, + 0xDF,0x5D,0x93,0x01,0x3D,0xDE,0x3F,0x81,0x5F,0x04,0x95, + 0xA0,0x02,0xAB,0x83,0xFF,0xC9,0x0E,0xD0,0x07,0xAD,0x18, + 0xD0,0x09,0x02,0xD0,0x09,0xC9,0x8E,0xD0,0x0B,0xAD,0x18, + 0xD0,0x29,0xFD,0x8D,0x18,0xD0,0x4C,0xA8,0xE6,0xC9,0x08, + 0xD0,0x07,0xA9,0x80,0x0D,0x91,0x02,0x30,0x09,0xC9,0x09, + 0xD0,0xEE,0xA9,0x7F,0x2D,0x91,0x02,0x8D,0x91,0x02,0x4C, + 0xA8,0xE6,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1C, + 0x17,0x01,0x9F,0x1A,0x13,0x05,0xFF,0x9C,0x12,0x04,0x1E, + 0x03,0x06,0x14,0x18,0x1F,0x19,0x07,0x9E,0x02,0x08,0x15, + 0x16,0x12,0x09,0x0A,0x92,0x0D,0x0B,0x0F,0x0E,0xFF,0x10, + 0x0C,0xFF,0xFF,0x1B,0x00,0xFF,0x1C,0xFF,0x1D,0xFF,0xFF, + 0x1F,0x1E,0xFF,0x90,0x06,0xFF,0x05,0xFF,0xFF,0x11,0xFF, + 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9B,0x37,0x00,0x00, + 0x00,0x08,0x00,0x14,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, + 0x0E,0x06,0x01,0x02,0x03,0x04,0x00,0x01,0x02,0x03,0x04, + 0x05,0x06,0x07,0x4C,0x4F,0x41,0x44,0x0D,0x52,0x55,0x4E, + 0x0D,0x00,0x28,0x50,0x78,0xA0,0xC8,0xF0,0x18,0x40,0x68, + 0x90,0xB8,0xE0,0x08,0x30,0x58,0x80,0xA8,0xD0,0xF8,0x20, + 0x48,0x70,0x98,0xC0,0x09,0x40,0x2C,0x09,0x20,0x20,0xA4, + 0xF0,0x48,0x24,0x94,0x10,0x0A,0x38,0x66,0xA3,0x20,0x40, + 0xED,0x46,0x94,0x46,0xA3,0x68,0x85,0x95,0x78,0x20,0x97, + 0xEE,0xC9,0x3F,0xD0,0x03,0x20,0x85,0xEE,0xAD,0x00,0xDD, + 0x09,0x08,0x8D,0x00,0xDD,0x78,0x20,0x8E,0xEE,0x20,0x97, + 0xEE,0x20,0xB3,0xEE,0x78,0x20,0x97,0xEE,0x20,0xA9,0xEE, + 0xB0,0x64,0x20,0x85,0xEE,0x24,0xA3,0x10,0x0A,0x20,0xA9, + 0xEE,0x90,0xFB,0x20,0xA9,0xEE,0xB0,0xFB,0x20,0xA9,0xEE, + 0x90,0xFB,0x20,0x8E,0xEE,0xA9,0x08,0x85,0xA5,0xAD,0x00, + 0xDD,0xCD,0x00,0xDD,0xD0,0xF8,0x0A,0x90,0x3F,0x66,0x95, + 0xB0,0x05,0x20,0xA0,0xEE,0xD0,0x03,0x20,0x97,0xEE,0x20, + 0x85,0xEE,0xEA,0xEA,0xEA,0xEA,0xAD,0x00,0xDD,0x29,0xDF, + 0x09,0x10,0x8D,0x00,0xDD,0xC6,0xA5,0xD0,0xD4,0xA9,0x04, + 0x8D,0x07,0xDC,0xA9,0x19,0x8D,0x0F,0xDC,0xAD,0x0D,0xDC, + 0xAD,0x0D,0xDC,0x29,0x02,0xD0,0x0A,0x20,0xA9,0xEE,0xB0, + 0xF4,0x58,0x60,0xA9,0x80,0x2C,0xA9,0x03,0x20,0x1C,0xFE, + 0x58,0x18,0x90,0x4A,0x85,0x95,0x20,0x36,0xED,0xAD,0x00, + 0xDD,0x29,0xF7,0x8D,0x00,0xDD,0x60,0x85,0x95,0x20,0x36, + 0xED,0x78,0x20,0xA0,0xEE,0x20,0xBE,0xED,0x20,0x85,0xEE, + 0x20,0xA9,0xEE,0x30,0xFB,0x58,0x60,0x24,0x94,0x30,0x05, + 0x38,0x66,0x94,0xD0,0x05,0x48,0x20,0x40,0xED,0x68,0x85, + 0x95,0x18,0x60,0x78,0x20,0x8E,0xEE,0xAD,0x00,0xDD,0x09, + 0x08,0x8D,0x00,0xDD,0xA9,0x5F,0x2C,0xA9,0x3F,0x20,0x11, + 0xED,0x20,0xBE,0xED,0x8A,0xA2,0x0A,0xCA,0xD0,0xFD,0xAA, + 0x20,0x85,0xEE,0x4C,0x97,0xEE,0x78,0xA9,0x00,0x85,0xA5, + 0x20,0x85,0xEE,0x20,0xA9,0xEE,0x10,0xFB,0xA9,0x01,0x8D, + 0x07,0xDC,0xA9,0x19,0x8D,0x0F,0xDC,0x20,0x97,0xEE,0xAD, + 0x0D,0xDC,0xAD,0x0D,0xDC,0x29,0x02,0xD0,0x07,0x20,0xA9, + 0xEE,0x30,0xF4,0x10,0x18,0xA5,0xA5,0xF0,0x05,0xA9,0x02, + 0x4C,0xB2,0xED,0x20,0xA0,0xEE,0x20,0x85,0xEE,0xA9,0x40, + 0x20,0x1C,0xFE,0xE6,0xA5,0xD0,0xCA,0xA9,0x08,0x85,0xA5, + 0xAD,0x00,0xDD,0xCD,0x00,0xDD,0xD0,0xF8,0x0A,0x10,0xF5, + 0x66,0xA4,0xAD,0x00,0xDD,0xCD,0x00,0xDD,0xD0,0xF8,0x0A, + 0x30,0xF5,0xC6,0xA5,0xD0,0xE4,0x20,0xA0,0xEE,0x24,0x90, + 0x50,0x03,0x20,0x06,0xEE,0xA5,0xA4,0x58,0x18,0x60,0xAD, + 0x00,0xDD,0x29,0xEF,0x8D,0x00,0xDD,0x60,0xAD,0x00,0xDD, + 0x09,0x10,0x8D,0x00,0xDD,0x60,0xAD,0x00,0xDD,0x29,0xDF, + 0x8D,0x00,0xDD,0x60,0xAD,0x00,0xDD,0x09,0x20,0x8D,0x00, + 0xDD,0x60,0xAD,0x00,0xDD,0xCD,0x00,0xDD,0xD0,0xF8,0x0A, + 0x60,0x8A,0xA2,0xB8,0xCA,0xD0,0xFD,0xAA,0x60,0xA5,0xB4, + 0xF0,0x47,0x30,0x3F,0x46,0xB6,0xA2,0x00,0x90,0x01,0xCA, + 0x8A,0x45,0xBD,0x85,0xBD,0xC6,0xB4,0xF0,0x06,0x8A,0x29, + 0x04,0x85,0xB5,0x60,0xA9,0x20,0x2C,0x94,0x02,0xF0,0x14, + 0x30,0x1C,0x70,0x14,0xA5,0xBD,0xD0,0x01,0xCA,0xC6,0xB4, + 0xAD,0x93,0x02,0x10,0xE3,0xC6,0xB4,0xD0,0xDF,0xE6,0xB4, + 0xD0,0xF0,0xA5,0xBD,0xF0,0xED,0xD0,0xEA,0x70,0xE9,0x50, + 0xE6,0xE6,0xB4,0xA2,0xFF,0xD0,0xCB,0xAD,0x94,0x02,0x4A, + 0x90,0x07,0x2C,0x01,0xDD,0x10,0x1D,0x50,0x1E,0xA9,0x00, + 0x85,0xBD,0x85,0xB5,0xAE,0x98,0x02,0x86,0xB4,0xAC,0x9D, + 0x02,0xCC,0x9E,0x02,0xF0,0x13,0xB1,0xF9,0x85,0xB6,0xEE, + 0x9D,0x02,0x60,0xA9,0x40,0x2C,0xA9,0x10,0x0D,0x97,0x02, + 0x8D,0x97,0x02,0xA9,0x01,0x8D,0x0D,0xDD,0x4D,0xA1,0x02, + 0x09,0x80,0x8D,0xA1,0x02,0x8D,0x0D,0xDD,0x60,0xA2,0x09, + 0xA9,0x20,0x2C,0x93,0x02,0xF0,0x01,0xCA,0x50,0x02,0xCA, + 0xCA,0x60,0xA6,0xA9,0xD0,0x33,0xC6,0xA8,0xF0,0x36,0x30, + 0x0D,0xA5,0xA7,0x45,0xAB,0x85,0xAB,0x46,0xA7,0x66,0xAA, + 0x60,0xC6,0xA8,0xA5,0xA7,0xF0,0x67,0xAD,0x93,0x02,0x0A, + 0xA9,0x01,0x65,0xA8,0xD0,0xEF,0xA9,0x90,0x8D,0x0D,0xDD, + 0x0D,0xA1,0x02,0x8D,0xA1,0x02,0x85,0xA9,0xA9,0x02,0x4C, + 0x3B,0xEF,0xA5,0xA7,0xD0,0xEA,0x4C,0xD3,0xE4,0xAC,0x9B, + 0x02,0xC8,0xCC,0x9C,0x02,0xF0,0x2A,0x8C,0x9B,0x02,0x88, + 0xA5,0xAA,0xAE,0x98,0x02,0xE0,0x09,0xF0,0x04,0x4A,0xE8, + 0xD0,0xF8,0x91,0xF7,0xA9,0x20,0x2C,0x94,0x02,0xF0,0xB4, + 0x30,0xB1,0xA5,0xA7,0x45,0xAB,0xF0,0x03,0x70,0xA9,0x2C, + 0x50,0xA6,0xA9,0x01,0x2C,0xA9,0x04,0x2C,0xA9,0x80,0x2C, + 0xA9,0x02,0x0D,0x97,0x02,0x8D,0x97,0x02,0x4C,0x7E,0xEF, + 0xA5,0xAA,0xD0,0xF1,0xF0,0xEC,0x85,0x9A,0xAD,0x94,0x02, + 0x4A,0x90,0x29,0xA9,0x02,0x2C,0x01,0xDD,0x10,0x1D,0xD0, + 0x20,0xAD,0xA1,0x02,0x29,0x02,0xD0,0xF9,0x2C,0x01,0xDD, + 0x70,0xFB,0xAD,0x01,0xDD,0x09,0x02,0x8D,0x01,0xDD,0x2C, + 0x01,0xDD,0x70,0x07,0x30,0xF9,0xA9,0x40,0x8D,0x97,0x02, + 0x18,0x60,0x20,0x28,0xF0,0xAC,0x9E,0x02,0xC8,0xCC,0x9D, + 0x02,0xF0,0xF4,0x8C,0x9E,0x02,0x88,0xA5,0x9E,0x91,0xF9, + 0xAD,0xA1,0x02,0x4A,0xB0,0x1E,0xA9,0x10,0x8D,0x0E,0xDD, + 0xAD,0x99,0x02,0x8D,0x04,0xDD,0xAD,0x9A,0x02,0x8D,0x05, + 0xDD,0xA9,0x81,0x20,0x3B,0xEF,0x20,0x06,0xEF,0xA9,0x11, + 0x8D,0x0E,0xDD,0x60,0x85,0x99,0xAD,0x94,0x02,0x4A,0x90, + 0x28,0x29,0x08,0xF0,0x24,0xA9,0x02,0x2C,0x01,0xDD,0x10, + 0xAD,0xF0,0x22,0xAD,0xA1,0x02,0x4A,0xB0,0xFA,0xAD,0x01, + 0xDD,0x29,0xFD,0x8D,0x01,0xDD,0xAD,0x01,0xDD,0x29,0x04, + 0xF0,0xF9,0xA9,0x90,0x18,0x4C,0x3B,0xEF,0xAD,0xA1,0x02, + 0x29,0x12,0xF0,0xF3,0x18,0x60,0xAD,0x97,0x02,0xAC,0x9C, + 0x02,0xCC,0x9B,0x02,0xF0,0x0B,0x29,0xF7,0x8D,0x97,0x02, + 0xB1,0xF7,0xEE,0x9C,0x02,0x60,0x09,0x08,0x8D,0x97,0x02, + 0xA9,0x00,0x60,0x48,0xAD,0xA1,0x02,0xF0,0x11,0xAD,0xA1, + 0x02,0x29,0x03,0xD0,0xF9,0xA9,0x10,0x8D,0x0D,0xDD,0xA9, + 0x00,0x8D,0xA1,0x02,0x68,0x60,0x0D,0x49,0x2F,0x4F,0x20, + 0x45,0x52,0x52,0x4F,0x52,0x20,0xA3,0x0D,0x53,0x45,0x41, + 0x52,0x43,0x48,0x49,0x4E,0x47,0xA0,0x46,0x4F,0x52,0xA0, + 0x0D,0x50,0x52,0x45,0x53,0x53,0x20,0x50,0x4C,0x41,0x59, + 0x20,0x4F,0x4E,0x20,0x54,0x41,0x50,0xC5,0x50,0x52,0x45, + 0x53,0x53,0x20,0x52,0x45,0x43,0x4F,0x52,0x44,0x20,0x26, + 0x20,0x50,0x4C,0x41,0x59,0x20,0x4F,0x4E,0x20,0x54,0x41, + 0x50,0xC5,0x0D,0x4C,0x4F,0x41,0x44,0x49,0x4E,0xC7,0x0D, + 0x53,0x41,0x56,0x49,0x4E,0x47,0xA0,0x0D,0x56,0x45,0x52, + 0x49,0x46,0x59,0x49,0x4E,0xC7,0x0D,0x46,0x4F,0x55,0x4E, + 0x44,0xA0,0x0D,0x4F,0x4B,0x8D,0x24,0x9D,0x10,0x0D,0xB9, + 0xBD,0xF0,0x08,0x29,0x7F,0x20,0xD2,0xFF,0xC8,0x28,0x10, + 0xF3,0x18,0x60,0xA5,0x99,0xD0,0x08,0xA5,0xC6,0xF0,0x0F, + 0x78,0x4C,0xB4,0xE5,0xC9,0x02,0xD0,0x18,0x84,0x97,0x20, + 0x86,0xF0,0xA4,0x97,0x18,0x60,0xA5,0x99,0xD0,0x0B,0xA5, + 0xD3,0x85,0xCA,0xA5,0xD6,0x85,0xC9,0x4C,0x32,0xE6,0xC9, + 0x03,0xD0,0x09,0x85,0xD0,0xA5,0xD5,0x85,0xC8,0x4C,0x32, + 0xE6,0xB0,0x38,0xC9,0x02,0xF0,0x3F,0x86,0x97,0x20,0x99, + 0xF1,0xB0,0x16,0x48,0x20,0x99,0xF1,0xB0,0x0D,0xD0,0x05, + 0xA9,0x40,0x20,0x1C,0xFE,0xC6,0xA6,0xA6,0x97,0x68,0x60, + 0xAA,0x68,0x8A,0xA6,0x97,0x60,0x20,0x0D,0xF8,0xD0,0x0B, + 0x20,0x41,0xF8,0xB0,0x11,0xA9,0x00,0x85,0xA6,0xF0,0xF0, + 0xB1,0xB2,0x18,0x60,0xA5,0x90,0xF0,0x04,0xA9,0x0D,0x18, + 0x60,0x4C,0x13,0xEE,0x20,0x4E,0xF1,0xB0,0xF7,0xC9,0x00, + 0xD0,0xF2,0xAD,0x97,0x02,0x29,0x60,0xD0,0xE9,0xF0,0xEE, + 0x48,0xA5,0x9A,0xC9,0x03,0xD0,0x04,0x68,0x4C,0x16,0xE7, + 0x90,0x04,0x68,0x4C,0xDD,0xED,0x4A,0x68,0x85,0x9E,0x8A, + 0x48,0x98,0x48,0x90,0x23,0x20,0x0D,0xF8,0xD0,0x0E,0x20, + 0x64,0xF8,0xB0,0x0E,0xA9,0x02,0xA0,0x00,0x91,0xB2,0xC8, + 0x84,0xA6,0xA5,0x9E,0x91,0xB2,0x18,0x68,0xA8,0x68,0xAA, + 0xA5,0x9E,0x90,0x02,0xA9,0x00,0x60,0x20,0x17,0xF0,0x4C, + 0xFC,0xF1,0x20,0x0F,0xF3,0xF0,0x03,0x4C,0x01,0xF7,0x20, + 0x1F,0xF3,0xA5,0xBA,0xF0,0x16,0xC9,0x03,0xF0,0x12,0xB0, + 0x14,0xC9,0x02,0xD0,0x03,0x4C,0x4D,0xF0,0xA6,0xB9,0xE0, + 0x60,0xF0,0x03,0x4C,0x0A,0xF7,0x85,0x99,0x18,0x60,0xAA, + 0x20,0x09,0xED,0xA5,0xB9,0x10,0x06,0x20,0xCC,0xED,0x4C, + 0x48,0xF2,0x20,0xC7,0xED,0x8A,0x24,0x90,0x10,0xE6,0x4C, + 0x07,0xF7,0x20,0x0F,0xF3,0xF0,0x03,0x4C,0x01,0xF7,0x20, + 0x1F,0xF3,0xA5,0xBA,0xD0,0x03,0x4C,0x0D,0xF7,0xC9,0x03, + 0xF0,0x0F,0xB0,0x11,0xC9,0x02,0xD0,0x03,0x4C,0xE1,0xEF, + 0xA6,0xB9,0xE0,0x60,0xF0,0xEA,0x85,0x9A,0x18,0x60,0xAA, + 0x20,0x0C,0xED,0xA5,0xB9,0x10,0x05,0x20,0xBE,0xED,0xD0, + 0x03,0x20,0xB9,0xED,0x8A,0x24,0x90,0x10,0xE7,0x4C,0x07, + 0xF7,0x20,0x14,0xF3,0xF0,0x02,0x18,0x60,0x20,0x1F,0xF3, + 0x8A,0x48,0xA5,0xBA,0xF0,0x50,0xC9,0x03,0xF0,0x4C,0xB0, + 0x47,0xC9,0x02,0xD0,0x1D,0x68,0x20,0xF2,0xF2,0x20,0x83, + 0xF4,0x20,0x27,0xFE,0xA5,0xF8,0xF0,0x01,0xC8,0xA5,0xFA, + 0xF0,0x01,0xC8,0xA9,0x00,0x85,0xF8,0x85,0xFA,0x4C,0x7D, + 0xF4,0xA5,0xB9,0x29,0x0F,0xF0,0x23,0x20,0xD0,0xF7,0xA9, + 0x00,0x38,0x20,0xDD,0xF1,0x20,0x64,0xF8,0x90,0x04,0x68, + 0xA9,0x00,0x60,0xA5,0xB9,0xC9,0x62,0xD0,0x0B,0xA9,0x05, + 0x20,0x6A,0xF7,0x4C,0xF1,0xF2,0x20,0x42,0xF6,0x68,0xAA, + 0xC6,0x98,0xE4,0x98,0xF0,0x14,0xA4,0x98,0xB9,0x59,0x02, + 0x9D,0x59,0x02,0xB9,0x63,0x02,0x9D,0x63,0x02,0xB9,0x6D, + 0x02,0x9D,0x6D,0x02,0x18,0x60,0xA9,0x00,0x85,0x90,0x8A, + 0xA6,0x98,0xCA,0x30,0x15,0xDD,0x59,0x02,0xD0,0xF8,0x60, + 0xBD,0x59,0x02,0x85,0xB8,0xBD,0x63,0x02,0x85,0xBA,0xBD, + 0x6D,0x02,0x85,0xB9,0x60,0xA9,0x00,0x85,0x98,0xA2,0x03, + 0xE4,0x9A,0xB0,0x03,0x20,0xFE,0xED,0xE4,0x99,0xB0,0x03, + 0x20,0xEF,0xED,0x86,0x9A,0xA9,0x00,0x85,0x99,0x60,0xA6, + 0xB8,0xD0,0x03,0x4C,0x0A,0xF7,0x20,0x0F,0xF3,0xD0,0x03, + 0x4C,0xFE,0xF6,0xA6,0x98,0xE0,0x0A,0x90,0x03,0x4C,0xFB, + 0xF6,0xE6,0x98,0xA5,0xB8,0x9D,0x59,0x02,0xA5,0xB9,0x09, + 0x60,0x85,0xB9,0x9D,0x6D,0x02,0xA5,0xBA,0x9D,0x63,0x02, + 0xF0,0x5A,0xC9,0x03,0xF0,0x56,0x90,0x05,0x20,0xD5,0xF3, + 0x90,0x4F,0xC9,0x02,0xD0,0x03,0x4C,0x09,0xF4,0x20,0xD0, + 0xF7,0xB0,0x03,0x4C,0x13,0xF7,0xA5,0xB9,0x29,0x0F,0xD0, + 0x1F,0x20,0x17,0xF8,0xB0,0x36,0x20,0xAF,0xF5,0xA5,0xB7, + 0xF0,0x0A,0x20,0xEA,0xF7,0x90,0x18,0xF0,0x28,0x4C,0x04, + 0xF7,0x20,0x2C,0xF7,0xF0,0x20,0x90,0x0C,0xB0,0xF4,0x20, + 0x38,0xF8,0xB0,0x17,0xA9,0x04,0x20,0x6A,0xF7,0xA9,0xBF, + 0xA4,0xB9,0xC0,0x60,0xF0,0x07,0xA0,0x00,0xA9,0x02,0x91, + 0xB2,0x98,0x85,0xA6,0x18,0x60,0xA5,0xB9,0x30,0xFA,0xA4, + 0xB7,0xF0,0xF6,0xA9,0x00,0x85,0x90,0xA5,0xBA,0x20,0x0C, + 0xED,0xA5,0xB9,0x09,0xF0,0x20,0xB9,0xED,0xA5,0x90,0x10, + 0x05,0x68,0x68,0x4C,0x07,0xF7,0xA5,0xB7,0xF0,0x0C,0xA0, + 0x00,0xB1,0xBB,0x20,0xDD,0xED,0xC8,0xC4,0xB7,0xD0,0xF6, + 0x4C,0x54,0xF6,0x20,0x83,0xF4,0x8C,0x97,0x02,0xC4,0xB7, + 0xF0,0x0A,0xB1,0xBB,0x99,0x93,0x02,0xC8,0xC0,0x04,0xD0, + 0xF2,0x20,0x4A,0xEF,0x8E,0x98,0x02,0xAD,0x93,0x02,0x29, + 0x0F,0xF0,0x1C,0x0A,0xAA,0xAD,0xA6,0x02,0xD0,0x09,0xBC, + 0xC1,0xFE,0xBD,0xC0,0xFE,0x4C,0x40,0xF4,0xBC,0xEB,0xE4, + 0xBD,0xEA,0xE4,0x8C,0x96,0x02,0x8D,0x95,0x02,0xAD,0x95, + 0x02,0x0A,0x20,0x2E,0xFF,0xAD,0x94,0x02,0x4A,0x90,0x09, + 0xAD,0x01,0xDD,0x0A,0xB0,0x03,0x20,0x0D,0xF0,0xAD,0x9B, + 0x02,0x8D,0x9C,0x02,0xAD,0x9E,0x02,0x8D,0x9D,0x02,0x20, + 0x27,0xFE,0xA5,0xF8,0xD0,0x05,0x88,0x84,0xF8,0x86,0xF7, + 0xA5,0xFA,0xD0,0x05,0x88,0x84,0xFA,0x86,0xF9,0x38,0xA9, + 0xF0,0x4C,0x2D,0xFE,0xA9,0x7F,0x8D,0x0D,0xDD,0xA9,0x06, + 0x8D,0x03,0xDD,0x8D,0x01,0xDD,0xA9,0x04,0x0D,0x00,0xDD, + 0x8D,0x00,0xDD,0xA0,0x00,0x8C,0xA1,0x02,0x60,0x86,0xC3, + 0x84,0xC4,0x6C,0x30,0x03,0x85,0x93,0xA9,0x00,0x85,0x90, + 0xA5,0xBA,0xD0,0x03,0x4C,0x13,0xF7,0xC9,0x03,0xF0,0xF9, + 0x90,0x7B,0xA4,0xB7,0xD0,0x03,0x4C,0x10,0xF7,0xA6,0xB9, + 0x20,0xAF,0xF5,0xA9,0x60,0x85,0xB9,0x20,0xD5,0xF3,0xA5, + 0xBA,0x20,0x09,0xED,0xA5,0xB9,0x20,0xC7,0xED,0x20,0x13, + 0xEE,0x85,0xAE,0xA5,0x90,0x4A,0x4A,0xB0,0x50,0x20,0x13, + 0xEE,0x85,0xAF,0x8A,0xD0,0x08,0xA5,0xC3,0x85,0xAE,0xA5, + 0xC4,0x85,0xAF,0x20,0xD2,0xF5,0xA9,0xFD,0x25,0x90,0x85, + 0x90,0x20,0xE1,0xFF,0xD0,0x03,0x4C,0x33,0xF6,0x20,0x13, + 0xEE,0xAA,0xA5,0x90,0x4A,0x4A,0xB0,0xE8,0x8A,0xA4,0x93, + 0xF0,0x0C,0xA0,0x00,0xD1,0xAE,0xF0,0x08,0xA9,0x10,0x20, + 0x1C,0xFE,0x2C,0x91,0xAE,0xE6,0xAE,0xD0,0x02,0xE6,0xAF, + 0x24,0x90,0x50,0xCB,0x20,0xEF,0xED,0x20,0x42,0xF6,0x90, + 0x79,0x4C,0x04,0xF7,0x4A,0xB0,0x03,0x4C,0x13,0xF7,0x20, + 0xD0,0xF7,0xB0,0x03,0x4C,0x13,0xF7,0x20,0x17,0xF8,0xB0, + 0x68,0x20,0xAF,0xF5,0xA5,0xB7,0xF0,0x09,0x20,0xEA,0xF7, + 0x90,0x0B,0xF0,0x5A,0xB0,0xDA,0x20,0x2C,0xF7,0xF0,0x53, + 0xB0,0xD3,0xA5,0x90,0x29,0x10,0x38,0xD0,0x4A,0xE0,0x01, + 0xF0,0x11,0xE0,0x03,0xD0,0xDD,0xA0,0x01,0xB1,0xB2,0x85, + 0xC3,0xC8,0xB1,0xB2,0x85,0xC4,0xB0,0x04,0xA5,0xB9,0xD0, + 0xEF,0xA0,0x03,0xB1,0xB2,0xA0,0x01,0xF1,0xB2,0xAA,0xA0, + 0x04,0xB1,0xB2,0xA0,0x02,0xF1,0xB2,0xA8,0x18,0x8A,0x65, + 0xC3,0x85,0xAE,0x98,0x65,0xC4,0x85,0xAF,0xA5,0xC3,0x85, + 0xC1,0xA5,0xC4,0x85,0xC2,0x20,0xD2,0xF5,0x20,0x4A,0xF8, + 0x24,0x18,0xA6,0xAE,0xA4,0xAF,0x60,0xA5,0x9D,0x10,0x1E, + 0xA0,0x0C,0x20,0x2F,0xF1,0xA5,0xB7,0xF0,0x15,0xA0,0x17, + 0x20,0x2F,0xF1,0xA4,0xB7,0xF0,0x0C,0xA0,0x00,0xB1,0xBB, + 0x20,0xD2,0xFF,0xC8,0xC4,0xB7,0xD0,0xF6,0x60,0xA0,0x49, + 0xA5,0x93,0xF0,0x02,0xA0,0x59,0x4C,0x2B,0xF1,0x86,0xAE, + 0x84,0xAF,0xAA,0xB5,0x00,0x85,0xC1,0xB5,0x01,0x85,0xC2, + 0x6C,0x32,0x03,0xA5,0xBA,0xD0,0x03,0x4C,0x13,0xF7,0xC9, + 0x03,0xF0,0xF9,0x90,0x5F,0xA9,0x61,0x85,0xB9,0xA4,0xB7, + 0xD0,0x03,0x4C,0x10,0xF7,0x20,0xD5,0xF3,0x20,0x8F,0xF6, + 0xA5,0xBA,0x20,0x0C,0xED,0xA5,0xB9,0x20,0xB9,0xED,0xA0, + 0x00,0x20,0x8E,0xFB,0xA5,0xAC,0x20,0xDD,0xED,0xA5,0xAD, + 0x20,0xDD,0xED,0x20,0xD1,0xFC,0xB0,0x16,0xB1,0xAC,0x20, + 0xDD,0xED,0x20,0xE1,0xFF,0xD0,0x07,0x20,0x42,0xF6,0xA9, + 0x00,0x38,0x60,0x20,0xDB,0xFC,0xD0,0xE5,0x20,0xFE,0xED, + 0x24,0xB9,0x30,0x11,0xA5,0xBA,0x20,0x0C,0xED,0xA5,0xB9, + 0x29,0xEF,0x09,0xE0,0x20,0xB9,0xED,0x20,0xFE,0xED,0x18, + 0x60,0x4A,0xB0,0x03,0x4C,0x13,0xF7,0x20,0xD0,0xF7,0x90, + 0x8D,0x20,0x38,0xF8,0xB0,0x25,0x20,0x8F,0xF6,0xA2,0x03, + 0xA5,0xB9,0x29,0x01,0xD0,0x02,0xA2,0x01,0x8A,0x20,0x6A, + 0xF7,0xB0,0x12,0x20,0x67,0xF8,0xB0,0x0D,0xA5,0xB9,0x29, + 0x02,0xF0,0x06,0xA9,0x05,0x20,0x6A,0xF7,0x24,0x18,0x60, + 0xA5,0x9D,0x10,0xFB,0xA0,0x51,0x20,0x2F,0xF1,0x4C,0xC1, + 0xF5,0xA2,0x00,0xE6,0xA2,0xD0,0x06,0xE6,0xA1,0xD0,0x02, + 0xE6,0xA0,0x38,0xA5,0xA2,0xE9,0x01,0xA5,0xA1,0xE9,0x1A, + 0xA5,0xA0,0xE9,0x4F,0x90,0x06,0x86,0xA0,0x86,0xA1,0x86, + 0xA2,0xAD,0x01,0xDC,0xCD,0x01,0xDC,0xD0,0xF8,0xAA,0x30, + 0x13,0xA2,0xBD,0x8E,0x00,0xDC,0xAE,0x01,0xDC,0xEC,0x01, + 0xDC,0xD0,0xF8,0x8D,0x00,0xDC,0xE8,0xD0,0x02,0x85,0x91, + 0x60,0x78,0xA5,0xA2,0xA6,0xA1,0xA4,0xA0,0x78,0x85,0xA2, + 0x86,0xA1,0x84,0xA0,0x58,0x60,0xA5,0x91,0xC9,0x7F,0xD0, + 0x07,0x08,0x20,0xCC,0xFF,0x85,0xC6,0x28,0x60,0xA9,0x01, + 0x2C,0xA9,0x02,0x2C,0xA9,0x03,0x2C,0xA9,0x04,0x2C,0xA9, + 0x05,0x2C,0xA9,0x06,0x2C,0xA9,0x07,0x2C,0xA9,0x08,0x2C, + 0xA9,0x09,0x48,0x20,0xCC,0xFF,0xA0,0x00,0x24,0x9D,0x50, + 0x0A,0x20,0x2F,0xF1,0x68,0x48,0x09,0x30,0x20,0xD2,0xFF, + 0x68,0x38,0x60,0xA5,0x93,0x48,0x20,0x41,0xF8,0x68,0x85, + 0x93,0xB0,0x32,0xA0,0x00,0xB1,0xB2,0xC9,0x05,0xF0,0x2A, + 0xC9,0x01,0xF0,0x08,0xC9,0x03,0xF0,0x04,0xC9,0x04,0xD0, + 0xE1,0xAA,0x24,0x9D,0x10,0x17,0xA0,0x63,0x20,0x2F,0xF1, + 0xA0,0x05,0xB1,0xB2,0x20,0xD2,0xFF,0xC8,0xC0,0x15,0xD0, + 0xF6,0xA5,0xA1,0x20,0xE0,0xE4,0xEA,0x18,0x88,0x60,0x85, + 0x9E,0x20,0xD0,0xF7,0x90,0x5E,0xA5,0xC2,0x48,0xA5,0xC1, + 0x48,0xA5,0xAF,0x48,0xA5,0xAE,0x48,0xA0,0xBF,0xA9,0x20, + 0x91,0xB2,0x88,0xD0,0xFB,0xA5,0x9E,0x91,0xB2,0xC8,0xA5, + 0xC1,0x91,0xB2,0xC8,0xA5,0xC2,0x91,0xB2,0xC8,0xA5,0xAE, + 0x91,0xB2,0xC8,0xA5,0xAF,0x91,0xB2,0xC8,0x84,0x9F,0xA0, + 0x00,0x84,0x9E,0xA4,0x9E,0xC4,0xB7,0xF0,0x0C,0xB1,0xBB, + 0xA4,0x9F,0x91,0xB2,0xE6,0x9E,0xE6,0x9F,0xD0,0xEE,0x20, + 0xD7,0xF7,0xA9,0x69,0x85,0xAB,0x20,0x6B,0xF8,0xA8,0x68, + 0x85,0xAE,0x68,0x85,0xAF,0x68,0x85,0xC1,0x68,0x85,0xC2, + 0x98,0x60,0xA6,0xB2,0xA4,0xB3,0xC0,0x02,0x60,0x20,0xD0, + 0xF7,0x8A,0x85,0xC1,0x18,0x69,0xC0,0x85,0xAE,0x98,0x85, + 0xC2,0x69,0x00,0x85,0xAF,0x60,0x20,0x2C,0xF7,0xB0,0x1D, + 0xA0,0x05,0x84,0x9F,0xA0,0x00,0x84,0x9E,0xC4,0xB7,0xF0, + 0x10,0xB1,0xBB,0xA4,0x9F,0xD1,0xB2,0xD0,0xE7,0xE6,0x9E, + 0xE6,0x9F,0xA4,0x9E,0xD0,0xEC,0x18,0x60,0x20,0xD0,0xF7, + 0xE6,0xA6,0xA4,0xA6,0xC0,0xC0,0x60,0x20,0x2E,0xF8,0xF0, + 0x1A,0xA0,0x1B,0x20,0x2F,0xF1,0x20,0xD0,0xF8,0x20,0x2E, + 0xF8,0xD0,0xF8,0xA0,0x6A,0x4C,0x2F,0xF1,0xA9,0x10,0x24, + 0x01,0xD0,0x02,0x24,0x01,0x18,0x60,0x20,0x2E,0xF8,0xF0, + 0xF9,0xA0,0x2E,0xD0,0xDD,0xA9,0x00,0x85,0x90,0x85,0x93, + 0x20,0xD7,0xF7,0x20,0x17,0xF8,0xB0,0x1F,0x78,0xA9,0x00, + 0x85,0xAA,0x85,0xB4,0x85,0xB0,0x85,0x9E,0x85,0x9F,0x85, + 0x9C,0xA9,0x90,0xA2,0x0E,0xD0,0x11,0x20,0xD7,0xF7,0xA9, + 0x14,0x85,0xAB,0x20,0x38,0xF8,0xB0,0x6C,0x78,0xA9,0x82, + 0xA2,0x08,0xA0,0x7F,0x8C,0x0D,0xDC,0x8D,0x0D,0xDC,0xAD, + 0x0E,0xDC,0x09,0x19,0x8D,0x0F,0xDC,0x29,0x91,0x8D,0xA2, + 0x02,0x20,0xA4,0xF0,0xAD,0x11,0xD0,0x29,0xEF,0x8D,0x11, + 0xD0,0xAD,0x14,0x03,0x8D,0x9F,0x02,0xAD,0x15,0x03,0x8D, + 0xA0,0x02,0x20,0xBD,0xFC,0xA9,0x02,0x85,0xBE,0x20,0x97, + 0xFB,0xA5,0x01,0x29,0x1F,0x85,0x01,0x85,0xC0,0xA2,0xFF, + 0xA0,0xFF,0x88,0xD0,0xFD,0xCA,0xD0,0xF8,0x58,0xAD,0xA0, + 0x02,0xCD,0x15,0x03,0x18,0xF0,0x15,0x20,0xD0,0xF8,0x20, + 0xBC,0xF6,0x4C,0xBE,0xF8,0x20,0xE1,0xFF,0x18,0xD0,0x0B, + 0x20,0x93,0xFC,0x38,0x68,0x68,0xA9,0x00,0x8D,0xA0,0x02, + 0x60,0x86,0xB1,0xA5,0xB0,0x0A,0x0A,0x18,0x65,0xB0,0x18, + 0x65,0xB1,0x85,0xB1,0xA9,0x00,0x24,0xB0,0x30,0x01,0x2A, + 0x06,0xB1,0x2A,0x06,0xB1,0x2A,0xAA,0xAD,0x06,0xDC,0xC9, + 0x16,0x90,0xF9,0x65,0xB1,0x8D,0x04,0xDC,0x8A,0x6D,0x07, + 0xDC,0x8D,0x05,0xDC,0xAD,0xA2,0x02,0x8D,0x0E,0xDC,0x8D, + 0xA4,0x02,0xAD,0x0D,0xDC,0x29,0x10,0xF0,0x09,0xA9,0xF9, + 0x48,0xA9,0x2A,0x48,0x4C,0x43,0xFF,0x58,0x60,0xAE,0x07, + 0xDC,0xA0,0xFF,0x98,0xED,0x06,0xDC,0xEC,0x07,0xDC,0xD0, + 0xF2,0x86,0xB1,0xAA,0x8C,0x06,0xDC,0x8C,0x07,0xDC,0xA9, + 0x19,0x8D,0x0F,0xDC,0xAD,0x0D,0xDC,0x8D,0xA3,0x02,0x98, + 0xE5,0xB1,0x86,0xB1,0x4A,0x66,0xB1,0x4A,0x66,0xB1,0xA5, + 0xB0,0x18,0x69,0x3C,0xC5,0xB1,0xB0,0x4A,0xA6,0x9C,0xF0, + 0x03,0x4C,0x60,0xFA,0xA6,0xA3,0x30,0x1B,0xA2,0x00,0x69, + 0x30,0x65,0xB0,0xC5,0xB1,0xB0,0x1C,0xE8,0x69,0x26,0x65, + 0xB0,0xC5,0xB1,0xB0,0x17,0x69,0x2C,0x65,0xB0,0xC5,0xB1, + 0x90,0x03,0x4C,0x10,0xFA,0xA5,0xB4,0xF0,0x1D,0x85,0xA8, + 0xD0,0x19,0xE6,0xA9,0xB0,0x02,0xC6,0xA9,0x38,0xE9,0x13, + 0xE5,0xB1,0x65,0x92,0x85,0x92,0xA5,0xA4,0x49,0x01,0x85, + 0xA4,0xF0,0x2B,0x86,0xD7,0xA5,0xB4,0xF0,0x22,0xAD,0xA3, + 0x02,0x29,0x01,0xD0,0x05,0xAD,0xA4,0x02,0xD0,0x16,0xA9, + 0x00,0x85,0xA4,0x8D,0xA4,0x02,0xA5,0xA3,0x10,0x30,0x30, + 0xBF,0xA2,0xA6,0x20,0xE2,0xF8,0xA5,0x9B,0xD0,0xB9,0x4C, + 0xBC,0xFE,0xA5,0x92,0xF0,0x07,0x30,0x03,0xC6,0xB0,0x2C, + 0xE6,0xB0,0xA9,0x00,0x85,0x92,0xE4,0xD7,0xD0,0x0F,0x8A, + 0xD0,0xA0,0xA5,0xA9,0x30,0xBD,0xC9,0x10,0x90,0xB9,0x85, + 0x96,0xB0,0xB5,0x8A,0x45,0x9B,0x85,0x9B,0xA5,0xB4,0xF0, + 0xD2,0xC6,0xA3,0x30,0xC5,0x46,0xD7,0x66,0xBF,0xA2,0xDA, + 0x20,0xE2,0xF8,0x4C,0xBC,0xFE,0xA5,0x96,0xF0,0x04,0xA5, + 0xB4,0xF0,0x07,0xA5,0xA3,0x30,0x03,0x4C,0x97,0xF9,0x46, + 0xB1,0xA9,0x93,0x38,0xE5,0xB1,0x65,0xB0,0x0A,0xAA,0x20, + 0xE2,0xF8,0xE6,0x9C,0xA5,0xB4,0xD0,0x11,0xA5,0x96,0xF0, + 0x26,0x85,0xA8,0xA9,0x00,0x85,0x96,0xA9,0x81,0x8D,0x0D, + 0xDC,0x85,0xB4,0xA5,0x96,0x85,0xB5,0xF0,0x09,0xA9,0x00, + 0x85,0xB4,0xA9,0x01,0x8D,0x0D,0xDC,0xA5,0xBF,0x85,0xBD, + 0xA5,0xA8,0x05,0xA9,0x85,0xB6,0x4C,0xBC,0xFE,0x20,0x97, + 0xFB,0x85,0x9C,0xA2,0xDA,0x20,0xE2,0xF8,0xA5,0xBE,0xF0, + 0x02,0x85,0xA7,0xA9,0x0F,0x24,0xAA,0x10,0x17,0xA5,0xB5, + 0xD0,0x0C,0xA6,0xBE,0xCA,0xD0,0x0B,0xA9,0x08,0x20,0x1C, + 0xFE,0xD0,0x04,0xA9,0x00,0x85,0xAA,0x4C,0xBC,0xFE,0x70, + 0x31,0xD0,0x18,0xA5,0xB5,0xD0,0xF5,0xA5,0xB6,0xD0,0xF1, + 0xA5,0xA7,0x4A,0xA5,0xBD,0x30,0x03,0x90,0x18,0x18,0xB0, + 0x15,0x29,0x0F,0x85,0xAA,0xC6,0xAA,0xD0,0xDD,0xA9,0x40, + 0x85,0xAA,0x20,0x8E,0xFB,0xA9,0x00,0x85,0xAB,0xF0,0xD0, + 0xA9,0x80,0x85,0xAA,0xD0,0xCA,0xA5,0xB5,0xF0,0x0A,0xA9, + 0x04,0x20,0x1C,0xFE,0xA9,0x00,0x4C,0x4A,0xFB,0x20,0xD1, + 0xFC,0x90,0x03,0x4C,0x48,0xFB,0xA6,0xA7,0xCA,0xF0,0x2D, + 0xA5,0x93,0xF0,0x0C,0xA0,0x00,0xA5,0xBD,0xD1,0xAC,0xF0, + 0x04,0xA9,0x01,0x85,0xB6,0xA5,0xB6,0xF0,0x4B,0xA2,0x3D, + 0xE4,0x9E,0x90,0x3E,0xA6,0x9E,0xA5,0xAD,0x9D,0x01,0x01, + 0xA5,0xAC,0x9D,0x00,0x01,0xE8,0xE8,0x86,0x9E,0x4C,0x3A, + 0xFB,0xA6,0x9F,0xE4,0x9E,0xF0,0x35,0xA5,0xAC,0xDD,0x00, + 0x01,0xD0,0x2E,0xA5,0xAD,0xDD,0x01,0x01,0xD0,0x27,0xE6, + 0x9F,0xE6,0x9F,0xA5,0x93,0xF0,0x0B,0xA5,0xBD,0xA0,0x00, + 0xD1,0xAC,0xF0,0x17,0xC8,0x84,0xB6,0xA5,0xB6,0xF0,0x07, + 0xA9,0x10,0x20,0x1C,0xFE,0xD0,0x09,0xA5,0x93,0xD0,0x05, + 0xA8,0xA5,0xBD,0x91,0xAC,0x20,0xDB,0xFC,0xD0,0x43,0xA9, + 0x80,0x85,0xAA,0x78,0xA2,0x01,0x8E,0x0D,0xDC,0xAE,0x0D, + 0xDC,0xA6,0xBE,0xCA,0x30,0x02,0x86,0xBE,0xC6,0xA7,0xF0, + 0x08,0xA5,0x9E,0xD0,0x27,0x85,0xBE,0xF0,0x23,0x20,0x93, + 0xFC,0x20,0x8E,0xFB,0xA0,0x00,0x84,0xAB,0xB1,0xAC,0x45, + 0xAB,0x85,0xAB,0x20,0xDB,0xFC,0x20,0xD1,0xFC,0x90,0xF2, + 0xA5,0xAB,0x45,0xBD,0xF0,0x05,0xA9,0x20,0x20,0x1C,0xFE, + 0x4C,0xBC,0xFE,0xA5,0xC2,0x85,0xAD,0xA5,0xC1,0x85,0xAC, + 0x60,0xA9,0x08,0x85,0xA3,0xA9,0x00,0x85,0xA4,0x85,0xA8, + 0x85,0x9B,0x85,0xA9,0x60,0xA5,0xBD,0x4A,0xA9,0x60,0x90, + 0x02,0xA9,0xB0,0xA2,0x00,0x8D,0x06,0xDC,0x8E,0x07,0xDC, + 0xAD,0x0D,0xDC,0xA9,0x19,0x8D,0x0F,0xDC,0xA5,0x01,0x49, + 0x08,0x85,0x01,0x29,0x08,0x60,0x38,0x66,0xB6,0x30,0x3C, + 0xA5,0xA8,0xD0,0x12,0xA9,0x10,0xA2,0x01,0x20,0xB1,0xFB, + 0xD0,0x2F,0xE6,0xA8,0xA5,0xB6,0x10,0x29,0x4C,0x57,0xFC, + 0xA5,0xA9,0xD0,0x09,0x20,0xAD,0xFB,0xD0,0x1D,0xE6,0xA9, + 0xD0,0x19,0x20,0xA6,0xFB,0xD0,0x14,0xA5,0xA4,0x49,0x01, + 0x85,0xA4,0xF0,0x0F,0xA5,0xBD,0x49,0x01,0x85,0xBD,0x29, + 0x01,0x45,0x9B,0x85,0x9B,0x4C,0xBC,0xFE,0x46,0xBD,0xC6, + 0xA3,0xA5,0xA3,0xF0,0x3A,0x10,0xF3,0x20,0x97,0xFB,0x58, + 0xA5,0xA5,0xF0,0x12,0xA2,0x00,0x86,0xD7,0xC6,0xA5,0xA6, + 0xBE,0xE0,0x02,0xD0,0x02,0x09,0x80,0x85,0xBD,0xD0,0xD9, + 0x20,0xD1,0xFC,0x90,0x0A,0xD0,0x91,0xE6,0xAD,0xA5,0xD7, + 0x85,0xBD,0xB0,0xCA,0xA0,0x00,0xB1,0xAC,0x85,0xBD,0x45, + 0xD7,0x85,0xD7,0x20,0xDB,0xFC,0xD0,0xBB,0xA5,0x9B,0x49, + 0x01,0x85,0xBD,0x4C,0xBC,0xFE,0xC6,0xBE,0xD0,0x03,0x20, + 0xCA,0xFC,0xA9,0x50,0x85,0xA7,0xA2,0x08,0x78,0x20,0xBD, + 0xFC,0xD0,0xEA,0xA9,0x78,0x20,0xAF,0xFB,0xD0,0xE3,0xC6, + 0xA7,0xD0,0xDF,0x20,0x97,0xFB,0xC6,0xAB,0x10,0xD8,0xA2, + 0x0A,0x20,0xBD,0xFC,0x58,0xE6,0xAB,0xA5,0xBE,0xF0,0x30, + 0x20,0x8E,0xFB,0xA2,0x09,0x86,0xA5,0x86,0xB6,0xD0,0x83, + 0x08,0x78,0xAD,0x11,0xD0,0x09,0x10,0x8D,0x11,0xD0,0x20, + 0xCA,0xFC,0xA9,0x7F,0x8D,0x0D,0xDC,0x20,0xDD,0xFD,0xAD, + 0xA0,0x02,0xF0,0x09,0x8D,0x15,0x03,0xAD,0x9F,0x02,0x8D, + 0x14,0x03,0x28,0x60,0x20,0x93,0xFC,0xF0,0x97,0xBD,0x93, + 0xFD,0x8D,0x14,0x03,0xBD,0x94,0xFD,0x8D,0x15,0x03,0x60, + 0xA5,0x01,0x09,0x20,0x85,0x01,0x60,0x38,0xA5,0xAC,0xE5, + 0xAE,0xA5,0xAD,0xE5,0xAF,0x60,0xE6,0xAC,0xD0,0x02,0xE6, + 0xAD,0x60,0xA2,0xFF,0x78,0x9A,0xD8,0x20,0x02,0xFD,0xD0, + 0x03,0x6C,0x00,0x80,0x8E,0x16,0xD0,0x20,0xA3,0xFD,0x20, + 0x50,0xFD,0x20,0x15,0xFD,0x20,0x5B,0xFF,0x58,0x6C,0x00, + 0xA0,0xA2,0x05,0xBD,0x0F,0xFD,0xDD,0x03,0x80,0xD0,0x03, + 0xCA,0xD0,0xF5,0x60,0xC3,0xC2,0xCD,0x38,0x30,0xA2,0x30, + 0xA0,0xFD,0x18,0x86,0xC3,0x84,0xC4,0xA0,0x1F,0xB9,0x14, + 0x03,0xB0,0x02,0xB1,0xC3,0x91,0xC3,0x99,0x14,0x03,0x88, + 0x10,0xF1,0x60,0x31,0xEA,0x66,0xFE,0x47,0xFE,0x4A,0xF3, + 0x91,0xF2,0x0E,0xF2,0x50,0xF2,0x33,0xF3,0x57,0xF1,0xCA, + 0xF1,0xED,0xF6,0x3E,0xF1,0x2F,0xF3,0x66,0xFE,0xA5,0xF4, + 0xED,0xF5,0xA9,0x00,0xA8,0x99,0x02,0x00,0x99,0x00,0x02, + 0x99,0x00,0x03,0xC8,0xD0,0xF4,0xA2,0x3C,0xA0,0x03,0x86, + 0xB2,0x84,0xB3,0xA8,0xA9,0x03,0x85,0xC2,0xE6,0xC2,0xB1, + 0xC1,0xAA,0xA9,0x55,0x91,0xC1,0xD1,0xC1,0xD0,0x0F,0x2A, + 0x91,0xC1,0xD1,0xC1,0xD0,0x08,0x8A,0x91,0xC1,0xC8,0xD0, + 0xE8,0xF0,0xE4,0x98,0xAA,0xA4,0xC2,0x18,0x20,0x2D,0xFE, + 0xA9,0x08,0x8D,0x82,0x02,0xA9,0x04,0x8D,0x88,0x02,0x60, + 0x6A,0xFC,0xCD,0xFB,0x31,0xEA,0x2C,0xF9,0xA9,0x7F,0x8D, + 0x0D,0xDC,0x8D,0x0D,0xDD,0x8D,0x00,0xDC,0xA9,0x08,0x8D, + 0x0E,0xDC,0x8D,0x0E,0xDD,0x8D,0x0F,0xDC,0x8D,0x0F,0xDD, + 0xA2,0x00,0x8E,0x03,0xDC,0x8E,0x03,0xDD,0x8E,0x18,0xD4, + 0xCA,0x8E,0x02,0xDC,0xA9,0x07,0x8D,0x00,0xDD,0xA9,0x3F, + 0x8D,0x02,0xDD,0xA9,0xE7,0x85,0x01,0xA9,0x2F,0x85,0x00, + 0xAD,0xA6,0x02,0xF0,0x0A,0xA9,0x25,0x8D,0x04,0xDC,0xA9, + 0x40,0x4C,0xF3,0xFD,0xA9,0x95,0x8D,0x04,0xDC,0xA9,0x42, + 0x8D,0x05,0xDC,0x4C,0x6E,0xFF,0x85,0xB7,0x86,0xBB,0x84, + 0xBC,0x60,0x85,0xB8,0x86,0xBA,0x84,0xB9,0x60,0xA5,0xBA, + 0xC9,0x02,0xD0,0x0D,0xAD,0x97,0x02,0x48,0xA9,0x00,0x8D, + 0x97,0x02,0x68,0x60,0x85,0x9D,0xA5,0x90,0x05,0x90,0x85, + 0x90,0x60,0x8D,0x85,0x02,0x60,0x90,0x06,0xAE,0x83,0x02, + 0xAC,0x84,0x02,0x8E,0x83,0x02,0x8C,0x84,0x02,0x60,0x90, + 0x06,0xAE,0x81,0x02,0xAC,0x82,0x02,0x8E,0x81,0x02,0x8C, + 0x82,0x02,0x60,0x78,0x6C,0x18,0x03,0x48,0x8A,0x48,0x98, + 0x48,0xA9,0x7F,0x8D,0x0D,0xDD,0xAC,0x0D,0xDD,0x30,0x1C, + 0x20,0x02,0xFD,0xD0,0x03,0x6C,0x02,0x80,0x20,0xBC,0xF6, + 0x20,0xE1,0xFF,0xD0,0x0C,0x20,0x15,0xFD,0x20,0xA3,0xFD, + 0x20,0x18,0xE5,0x6C,0x02,0xA0,0x98,0x2D,0xA1,0x02,0xAA, + 0x29,0x01,0xF0,0x28,0xAD,0x00,0xDD,0x29,0xFB,0x05,0xB5, + 0x8D,0x00,0xDD,0xAD,0xA1,0x02,0x8D,0x0D,0xDD,0x8A,0x29, + 0x12,0xF0,0x0D,0x29,0x02,0xF0,0x06,0x20,0xD6,0xFE,0x4C, + 0x9D,0xFE,0x20,0x07,0xFF,0x20,0xBB,0xEE,0x4C,0xB6,0xFE, + 0x8A,0x29,0x02,0xF0,0x06,0x20,0xD6,0xFE,0x4C,0xB6,0xFE, + 0x8A,0x29,0x10,0xF0,0x03,0x20,0x07,0xFF,0xAD,0xA1,0x02, + 0x8D,0x0D,0xDD,0x68,0xA8,0x68,0xAA,0x68,0x40,0xC1,0x27, + 0x3E,0x1A,0xC5,0x11,0x74,0x0E,0xED,0x0C,0x45,0x06,0xF0, + 0x02,0x46,0x01,0xB8,0x00,0x71,0x00,0xAD,0x01,0xDD,0x29, + 0x01,0x85,0xA7,0xAD,0x06,0xDD,0xE9,0x1C,0x6D,0x99,0x02, + 0x8D,0x06,0xDD,0xAD,0x07,0xDD,0x6D,0x9A,0x02,0x8D,0x07, + 0xDD,0xA9,0x11,0x8D,0x0F,0xDD,0xAD,0xA1,0x02,0x8D,0x0D, + 0xDD,0xA9,0xFF,0x8D,0x06,0xDD,0x8D,0x07,0xDD,0x4C,0x59, + 0xEF,0xAD,0x95,0x02,0x8D,0x06,0xDD,0xAD,0x96,0x02,0x8D, + 0x07,0xDD,0xA9,0x11,0x8D,0x0F,0xDD,0xA9,0x12,0x4D,0xA1, + 0x02,0x8D,0xA1,0x02,0xA9,0xFF,0x8D,0x06,0xDD,0x8D,0x07, + 0xDD,0xAE,0x98,0x02,0x86,0xA8,0x60,0xAA,0xAD,0x96,0x02, + 0x2A,0xA8,0x8A,0x69,0xC8,0x8D,0x99,0x02,0x98,0x69,0x00, + 0x8D,0x9A,0x02,0x60,0xEA,0xEA,0x08,0x68,0x29,0xEF,0x48, + 0x48,0x8A,0x48,0x98,0x48,0xBA,0xBD,0x04,0x01,0x29,0x10, + 0xF0,0x03,0x6C,0x16,0x03,0x6C,0x14,0x03,0x20,0x18,0xE5, + 0xAD,0x12,0xD0,0xD0,0xFB,0xAD,0x19,0xD0,0x29,0x01,0x8D, + 0xA6,0x02,0x4C,0xDD,0xFD,0xA9,0x81,0x8D,0x0D,0xDC,0xAD, + 0x0E,0xDC,0x29,0x80,0x09,0x11,0x8D,0x0E,0xDC,0x4C,0x8E, + 0xEE,0x03,0x4C,0x5B,0xFF,0x4C,0xA3,0xFD,0x4C,0x50,0xFD, + 0x4C,0x15,0xFD,0x4C,0x1A,0xFD,0x4C,0x18,0xFE,0x4C,0xB9, + 0xED,0x4C,0xC7,0xED,0x4C,0x25,0xFE,0x4C,0x34,0xFE,0x4C, + 0x87,0xEA,0x4C,0x21,0xFE,0x4C,0x13,0xEE,0x4C,0xDD,0xED, + 0x4C,0xEF,0xED,0x4C,0xFE,0xED,0x4C,0x0C,0xED,0x4C,0x09, + 0xED,0x4C,0x07,0xFE,0x4C,0x00,0xFE,0x4C,0xF9,0xFD,0x6C, + 0x1A,0x03,0x6C,0x1C,0x03,0x6C,0x1E,0x03,0x6C,0x20,0x03, + 0x6C,0x22,0x03,0x6C,0x24,0x03,0x6C,0x26,0x03, + +#if APPLY_PATCHES + 0xD2,0x9E,0xF4, /* PATCH LOAD */ + 0XF2,0xDD,0xF5, /* PATCH SAVE */ +#else + 0x4C,0x9E,0xF4, /* LOAD */ + 0x4C,0xDD,0xF5, /* SAVE */ +#endif + + 0x4C,0xE4,0xF6,0x4C,0xDD,0xF6,0x6C, + 0x28,0x03,0x6C,0x2A,0x03,0x6C,0x2C,0x03,0x4C,0x9B,0xF6, + 0x4C,0x05,0xE5,0x4C,0x0A,0xE5,0x4C,0x00,0xE5,0x52,0x52, + 0x42,0x59,0x43,0xFE,0xE2,0xFC,0x48,0xFF, +}; + +//file auto-generated from characters.901225-01.bin by bin2h.exe +const size_t rom_characters_len = 4096; +const unsigned char PROGMEM rom_characters[4096]= +{ + 0x3C,0x66,0x6E,0x6E,0x60,0x62,0x3C,0x00,0x18,0x3C,0x66, + 0x7E,0x66,0x66,0x66,0x00,0x7C,0x66,0x66,0x7C,0x66,0x66, + 0x7C,0x00,0x3C,0x66,0x60,0x60,0x60,0x66,0x3C,0x00,0x78, + 0x6C,0x66,0x66,0x66,0x6C,0x78,0x00,0x7E,0x60,0x60,0x78, + 0x60,0x60,0x7E,0x00,0x7E,0x60,0x60,0x78,0x60,0x60,0x60, + 0x00,0x3C,0x66,0x60,0x6E,0x66,0x66,0x3C,0x00,0x66,0x66, + 0x66,0x7E,0x66,0x66,0x66,0x00,0x3C,0x18,0x18,0x18,0x18, + 0x18,0x3C,0x00,0x1E,0x0C,0x0C,0x0C,0x0C,0x6C,0x38,0x00, + 0x66,0x6C,0x78,0x70,0x78,0x6C,0x66,0x00,0x60,0x60,0x60, + 0x60,0x60,0x60,0x7E,0x00,0x63,0x77,0x7F,0x6B,0x63,0x63, + 0x63,0x00,0x66,0x76,0x7E,0x7E,0x6E,0x66,0x66,0x00,0x3C, + 0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x7C,0x66,0x66,0x7C, + 0x60,0x60,0x60,0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x0E, + 0x00,0x7C,0x66,0x66,0x7C,0x78,0x6C,0x66,0x00,0x3C,0x66, + 0x60,0x3C,0x06,0x66,0x3C,0x00,0x7E,0x18,0x18,0x18,0x18, + 0x18,0x18,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00, + 0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x63,0x63,0x63, + 0x6B,0x7F,0x77,0x63,0x00,0x66,0x66,0x3C,0x18,0x3C,0x66, + 0x66,0x00,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x00,0x7E, + 0x06,0x0C,0x18,0x30,0x60,0x7E,0x00,0x3C,0x30,0x30,0x30, + 0x30,0x30,0x3C,0x00,0x0C,0x12,0x30,0x7C,0x30,0x62,0xFC, + 0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x18, + 0x3C,0x7E,0x18,0x18,0x18,0x18,0x00,0x10,0x30,0x7F,0x7F, + 0x30,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x18,0x18,0x18,0x18,0x00,0x00,0x18,0x00,0x66,0x66,0x66, + 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0xFF,0x66,0xFF,0x66, + 0x66,0x00,0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00,0x62, + 0x66,0x0C,0x18,0x30,0x66,0x46,0x00,0x3C,0x66,0x3C,0x38, + 0x67,0x66,0x3F,0x00,0x06,0x0C,0x18,0x00,0x00,0x00,0x00, + 0x00,0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00,0x30,0x18, + 0x0C,0x0C,0x0C,0x18,0x30,0x00,0x00,0x66,0x3C,0xFF,0x3C, + 0x66,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00, + 0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18, + 0x18,0x00,0x00,0x03,0x06,0x0C,0x18,0x30,0x60,0x00,0x3C, + 0x66,0x6E,0x76,0x66,0x66,0x3C,0x00,0x18,0x18,0x38,0x18, + 0x18,0x18,0x7E,0x00,0x3C,0x66,0x06,0x0C,0x30,0x60,0x7E, + 0x00,0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00,0x06,0x0E, + 0x1E,0x66,0x7F,0x06,0x06,0x00,0x7E,0x60,0x7C,0x06,0x06, + 0x66,0x3C,0x00,0x3C,0x66,0x60,0x7C,0x66,0x66,0x3C,0x00, + 0x7E,0x66,0x0C,0x18,0x18,0x18,0x18,0x00,0x3C,0x66,0x66, + 0x3C,0x66,0x66,0x3C,0x00,0x3C,0x66,0x66,0x3E,0x06,0x66, + 0x3C,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00, + 0x00,0x18,0x00,0x00,0x18,0x18,0x30,0x0E,0x18,0x30,0x60, + 0x30,0x18,0x0E,0x00,0x00,0x00,0x7E,0x00,0x7E,0x00,0x00, + 0x00,0x70,0x18,0x0C,0x06,0x0C,0x18,0x70,0x00,0x3C,0x66, + 0x06,0x0C,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0xFF,0xFF, + 0x00,0x00,0x00,0x08,0x1C,0x3E,0x7F,0x7F,0x1C,0x3E,0x00, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00, + 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00, + 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0C,0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18, + 0x1C,0x0F,0x07,0x00,0x00,0x00,0x18,0x18,0x38,0xF0,0xE0, + 0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF, + 0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0x03,0x03,0x07,0x0E, + 0x1C,0x38,0x70,0xE0,0xC0,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0, + 0xC0,0xC0,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x00, + 0x3C,0x7E,0x7E,0x7E,0x7E,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0xFF,0xFF,0x00,0x36,0x7F,0x7F,0x7F,0x3E,0x1C,0x08, + 0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00, + 0x00,0x07,0x0F,0x1C,0x18,0x18,0xC3,0xE7,0x7E,0x3C,0x3C, + 0x7E,0xE7,0xC3,0x00,0x3C,0x7E,0x66,0x66,0x7E,0x3C,0x00, + 0x18,0x18,0x66,0x66,0x18,0x18,0x3C,0x00,0x06,0x06,0x06, + 0x06,0x06,0x06,0x06,0x06,0x08,0x1C,0x3E,0x7F,0x3E,0x1C, + 0x08,0x00,0x18,0x18,0x18,0xFF,0xFF,0x18,0x18,0x18,0xC0, + 0xC0,0x30,0x30,0xC0,0xC0,0x30,0x30,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x00,0x00,0x03,0x3E,0x76,0x36,0x36, + 0x00,0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0, + 0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, + 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0, + 0xC0,0xC0,0xCC,0xCC,0x33,0x33,0xCC,0xCC,0x33,0x33,0x03, + 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00, + 0xCC,0xCC,0x33,0x33,0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0, + 0x80,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x18,0x18, + 0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x0F, + 0x0F,0x0F,0x0F,0x18,0x18,0x18,0x1F,0x1F,0x00,0x00,0x00, + 0x00,0x00,0x00,0xF8,0xF8,0x18,0x18,0x18,0x00,0x00,0x00, + 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x1F,0x1F,0x18, + 0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0x00,0x00,0x00,0x00, + 0x00,0x00,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0xF8, + 0xF8,0x18,0x18,0x18,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0, + 0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0xFF,0xFF,0x00,0x00,0x00, + 0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03,0x03,0x03, + 0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF0,0xF0, + 0xF0,0xF0,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x18, + 0x18,0x18,0xF8,0xF8,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0, + 0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x0F,0x0F,0x0F, + 0x0F,0xC3,0x99,0x91,0x91,0x9F,0x99,0xC3,0xFF,0xE7,0xC3, + 0x99,0x81,0x99,0x99,0x99,0xFF,0x83,0x99,0x99,0x83,0x99, + 0x99,0x83,0xFF,0xC3,0x99,0x9F,0x9F,0x9F,0x99,0xC3,0xFF, + 0x87,0x93,0x99,0x99,0x99,0x93,0x87,0xFF,0x81,0x9F,0x9F, + 0x87,0x9F,0x9F,0x81,0xFF,0x81,0x9F,0x9F,0x87,0x9F,0x9F, + 0x9F,0xFF,0xC3,0x99,0x9F,0x91,0x99,0x99,0xC3,0xFF,0x99, + 0x99,0x99,0x81,0x99,0x99,0x99,0xFF,0xC3,0xE7,0xE7,0xE7, + 0xE7,0xE7,0xC3,0xFF,0xE1,0xF3,0xF3,0xF3,0xF3,0x93,0xC7, + 0xFF,0x99,0x93,0x87,0x8F,0x87,0x93,0x99,0xFF,0x9F,0x9F, + 0x9F,0x9F,0x9F,0x9F,0x81,0xFF,0x9C,0x88,0x80,0x94,0x9C, + 0x9C,0x9C,0xFF,0x99,0x89,0x81,0x81,0x91,0x99,0x99,0xFF, + 0xC3,0x99,0x99,0x99,0x99,0x99,0xC3,0xFF,0x83,0x99,0x99, + 0x83,0x9F,0x9F,0x9F,0xFF,0xC3,0x99,0x99,0x99,0x99,0xC3, + 0xF1,0xFF,0x83,0x99,0x99,0x83,0x87,0x93,0x99,0xFF,0xC3, + 0x99,0x9F,0xC3,0xF9,0x99,0xC3,0xFF,0x81,0xE7,0xE7,0xE7, + 0xE7,0xE7,0xE7,0xFF,0x99,0x99,0x99,0x99,0x99,0x99,0xC3, + 0xFF,0x99,0x99,0x99,0x99,0x99,0xC3,0xE7,0xFF,0x9C,0x9C, + 0x9C,0x94,0x80,0x88,0x9C,0xFF,0x99,0x99,0xC3,0xE7,0xC3, + 0x99,0x99,0xFF,0x99,0x99,0x99,0xC3,0xE7,0xE7,0xE7,0xFF, + 0x81,0xF9,0xF3,0xE7,0xCF,0x9F,0x81,0xFF,0xC3,0xCF,0xCF, + 0xCF,0xCF,0xCF,0xC3,0xFF,0xF3,0xED,0xCF,0x83,0xCF,0x9D, + 0x03,0xFF,0xC3,0xF3,0xF3,0xF3,0xF3,0xF3,0xC3,0xFF,0xFF, + 0xE7,0xC3,0x81,0xE7,0xE7,0xE7,0xE7,0xFF,0xEF,0xCF,0x80, + 0x80,0xCF,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xE7,0xE7,0xE7,0xE7,0xFF,0xFF,0xE7,0xFF,0x99,0x99, + 0x99,0xFF,0xFF,0xFF,0xFF,0xFF,0x99,0x99,0x00,0x99,0x00, + 0x99,0x99,0xFF,0xE7,0xC1,0x9F,0xC3,0xF9,0x83,0xE7,0xFF, + 0x9D,0x99,0xF3,0xE7,0xCF,0x99,0xB9,0xFF,0xC3,0x99,0xC3, + 0xC7,0x98,0x99,0xC0,0xFF,0xF9,0xF3,0xE7,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xF3,0xE7,0xCF,0xCF,0xCF,0xE7,0xF3,0xFF,0xCF, + 0xE7,0xF3,0xF3,0xF3,0xE7,0xCF,0xFF,0xFF,0x99,0xC3,0x00, + 0xC3,0x99,0xFF,0xFF,0xFF,0xE7,0xE7,0x81,0xE7,0xE7,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE7,0xCF,0xFF,0xFF, + 0xFF,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xE7,0xE7,0xFF,0xFF,0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0xFF, + 0xC3,0x99,0x91,0x89,0x99,0x99,0xC3,0xFF,0xE7,0xE7,0xC7, + 0xE7,0xE7,0xE7,0x81,0xFF,0xC3,0x99,0xF9,0xF3,0xCF,0x9F, + 0x81,0xFF,0xC3,0x99,0xF9,0xE3,0xF9,0x99,0xC3,0xFF,0xF9, + 0xF1,0xE1,0x99,0x80,0xF9,0xF9,0xFF,0x81,0x9F,0x83,0xF9, + 0xF9,0x99,0xC3,0xFF,0xC3,0x99,0x9F,0x83,0x99,0x99,0xC3, + 0xFF,0x81,0x99,0xF3,0xE7,0xE7,0xE7,0xE7,0xFF,0xC3,0x99, + 0x99,0xC3,0x99,0x99,0xC3,0xFF,0xC3,0x99,0x99,0xC1,0xF9, + 0x99,0xC3,0xFF,0xFF,0xFF,0xE7,0xFF,0xFF,0xE7,0xFF,0xFF, + 0xFF,0xFF,0xE7,0xFF,0xFF,0xE7,0xE7,0xCF,0xF1,0xE7,0xCF, + 0x9F,0xCF,0xE7,0xF1,0xFF,0xFF,0xFF,0x81,0xFF,0x81,0xFF, + 0xFF,0xFF,0x8F,0xE7,0xF3,0xF9,0xF3,0xE7,0x8F,0xFF,0xC3, + 0x99,0xF9,0xF3,0xE7,0xFF,0xE7,0xFF,0xFF,0xFF,0xFF,0x00, + 0x00,0xFF,0xFF,0xFF,0xF7,0xE3,0xC1,0x80,0x80,0xE3,0xC1, + 0xFF,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xFF,0xFF, + 0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF, + 0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xCF,0xCF,0xCF, + 0xCF,0xCF,0xCF,0xCF,0xCF,0xF3,0xF3,0xF3,0xF3,0xF3,0xF3, + 0xF3,0xF3,0xFF,0xFF,0xFF,0x1F,0x0F,0xC7,0xE7,0xE7,0xE7, + 0xE7,0xE3,0xF0,0xF8,0xFF,0xFF,0xFF,0xE7,0xE7,0xC7,0x0F, + 0x1F,0xFF,0xFF,0xFF,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00, + 0x00,0x3F,0x1F,0x8F,0xC7,0xE3,0xF1,0xF8,0xFC,0xFC,0xF8, + 0xF1,0xE3,0xC7,0x8F,0x1F,0x3F,0x00,0x00,0x3F,0x3F,0x3F, + 0x3F,0x3F,0x3F,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFF,0xC3,0x81,0x81,0x81,0x81,0xC3,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0x00,0x00,0xFF,0xC9,0x80,0x80,0x80,0xC1,0xE3, + 0xF7,0xFF,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xFF, + 0xFF,0xFF,0xF8,0xF0,0xE3,0xE7,0xE7,0x3C,0x18,0x81,0xC3, + 0xC3,0x81,0x18,0x3C,0xFF,0xC3,0x81,0x99,0x99,0x81,0xC3, + 0xFF,0xE7,0xE7,0x99,0x99,0xE7,0xE7,0xC3,0xFF,0xF9,0xF9, + 0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF7,0xE3,0xC1,0x80,0xC1, + 0xE3,0xF7,0xFF,0xE7,0xE7,0xE7,0x00,0x00,0xE7,0xE7,0xE7, + 0x3F,0x3F,0xCF,0xCF,0x3F,0x3F,0xCF,0xCF,0xE7,0xE7,0xE7, + 0xE7,0xE7,0xE7,0xE7,0xE7,0xFF,0xFF,0xFC,0xC1,0x89,0xC9, + 0xC9,0xFF,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F, + 0x0F,0x0F,0x0F,0x0F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, + 0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x3F,0x3F,0x3F,0x3F,0x3F, + 0x3F,0x3F,0x3F,0x33,0x33,0xCC,0xCC,0x33,0x33,0xCC,0xCC, + 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFF,0xFF,0xFF, + 0xFF,0x33,0x33,0xCC,0xCC,0x00,0x01,0x03,0x07,0x0F,0x1F, + 0x3F,0x7F,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xE7, + 0xE7,0xE7,0xE0,0xE0,0xE7,0xE7,0xE7,0xFF,0xFF,0xFF,0xFF, + 0xF0,0xF0,0xF0,0xF0,0xE7,0xE7,0xE7,0xE0,0xE0,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0x07,0x07,0xE7,0xE7,0xE7,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xE0,0xE0, + 0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0x00,0x00,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0x00,0x00,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7, + 0x07,0x07,0xE7,0xE7,0xE7,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, + 0x3F,0x3F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0xF8, + 0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFC,0xFC, + 0xFC,0xFC,0xFC,0xFC,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x0F, + 0x0F,0x0F,0x0F,0xF0,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,0xFF, + 0xE7,0xE7,0xE7,0x07,0x07,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F, + 0x0F,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0xF0,0xF0, + 0xF0,0xF0,0x3C,0x66,0x6E,0x6E,0x60,0x62,0x3C,0x00,0x00, + 0x00,0x3C,0x06,0x3E,0x66,0x3E,0x00,0x00,0x60,0x60,0x7C, + 0x66,0x66,0x7C,0x00,0x00,0x00,0x3C,0x60,0x60,0x60,0x3C, + 0x00,0x00,0x06,0x06,0x3E,0x66,0x66,0x3E,0x00,0x00,0x00, + 0x3C,0x66,0x7E,0x60,0x3C,0x00,0x00,0x0E,0x18,0x3E,0x18, + 0x18,0x18,0x00,0x00,0x00,0x3E,0x66,0x66,0x3E,0x06,0x7C, + 0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x00,0x00,0x18,0x00, + 0x38,0x18,0x18,0x3C,0x00,0x00,0x06,0x00,0x06,0x06,0x06, + 0x06,0x3C,0x00,0x60,0x60,0x6C,0x78,0x6C,0x66,0x00,0x00, + 0x38,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x66,0x7F, + 0x7F,0x6B,0x63,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66, + 0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00,0x00,0x00, + 0x7C,0x66,0x66,0x7C,0x60,0x60,0x00,0x00,0x3E,0x66,0x66, + 0x3E,0x06,0x06,0x00,0x00,0x7C,0x66,0x60,0x60,0x60,0x00, + 0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00,0x00,0x18,0x7E, + 0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x66,0x66,0x66,0x66, + 0x3E,0x00,0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00,0x00, + 0x00,0x63,0x6B,0x7F,0x3E,0x36,0x00,0x00,0x00,0x66,0x3C, + 0x18,0x3C,0x66,0x00,0x00,0x00,0x66,0x66,0x66,0x3E,0x0C, + 0x78,0x00,0x00,0x7E,0x0C,0x18,0x30,0x7E,0x00,0x3C,0x30, + 0x30,0x30,0x30,0x30,0x3C,0x00,0x0C,0x12,0x30,0x7C,0x30, + 0x62,0xFC,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00, + 0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x18,0x00,0x10,0x30, + 0x7F,0x7F,0x30,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x00,0x18,0x00,0x66, + 0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0xFF,0x66, + 0xFF,0x66,0x66,0x00,0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18, + 0x00,0x62,0x66,0x0C,0x18,0x30,0x66,0x46,0x00,0x3C,0x66, + 0x3C,0x38,0x67,0x66,0x3F,0x00,0x06,0x0C,0x18,0x00,0x00, + 0x00,0x00,0x00,0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00, + 0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00,0x00,0x66,0x3C, + 0xFF,0x3C,0x66,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30,0x00, + 0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x18,0x18,0x00,0x00,0x03,0x06,0x0C,0x18,0x30,0x60, + 0x00,0x3C,0x66,0x6E,0x76,0x66,0x66,0x3C,0x00,0x18,0x18, + 0x38,0x18,0x18,0x18,0x7E,0x00,0x3C,0x66,0x06,0x0C,0x30, + 0x60,0x7E,0x00,0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00, + 0x06,0x0E,0x1E,0x66,0x7F,0x06,0x06,0x00,0x7E,0x60,0x7C, + 0x06,0x06,0x66,0x3C,0x00,0x3C,0x66,0x60,0x7C,0x66,0x66, + 0x3C,0x00,0x7E,0x66,0x0C,0x18,0x18,0x18,0x18,0x00,0x3C, + 0x66,0x66,0x3C,0x66,0x66,0x3C,0x00,0x3C,0x66,0x66,0x3E, + 0x06,0x66,0x3C,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00, + 0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x18,0x30,0x0E,0x18, + 0x30,0x60,0x30,0x18,0x0E,0x00,0x00,0x00,0x7E,0x00,0x7E, + 0x00,0x00,0x00,0x70,0x18,0x0C,0x06,0x0C,0x18,0x70,0x00, + 0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00,0x00,0x00,0x00, + 0xFF,0xFF,0x00,0x00,0x00,0x18,0x3C,0x66,0x7E,0x66,0x66, + 0x66,0x00,0x7C,0x66,0x66,0x7C,0x66,0x66,0x7C,0x00,0x3C, + 0x66,0x60,0x60,0x60,0x66,0x3C,0x00,0x78,0x6C,0x66,0x66, + 0x66,0x6C,0x78,0x00,0x7E,0x60,0x60,0x78,0x60,0x60,0x7E, + 0x00,0x7E,0x60,0x60,0x78,0x60,0x60,0x60,0x00,0x3C,0x66, + 0x60,0x6E,0x66,0x66,0x3C,0x00,0x66,0x66,0x66,0x7E,0x66, + 0x66,0x66,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, + 0x1E,0x0C,0x0C,0x0C,0x0C,0x6C,0x38,0x00,0x66,0x6C,0x78, + 0x70,0x78,0x6C,0x66,0x00,0x60,0x60,0x60,0x60,0x60,0x60, + 0x7E,0x00,0x63,0x77,0x7F,0x6B,0x63,0x63,0x63,0x00,0x66, + 0x76,0x7E,0x7E,0x6E,0x66,0x66,0x00,0x3C,0x66,0x66,0x66, + 0x66,0x66,0x3C,0x00,0x7C,0x66,0x66,0x7C,0x60,0x60,0x60, + 0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x0E,0x00,0x7C,0x66, + 0x66,0x7C,0x78,0x6C,0x66,0x00,0x3C,0x66,0x60,0x3C,0x06, + 0x66,0x3C,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x00, + 0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x66,0x66,0x66, + 0x66,0x66,0x3C,0x18,0x00,0x63,0x63,0x63,0x6B,0x7F,0x77, + 0x63,0x00,0x66,0x66,0x3C,0x18,0x3C,0x66,0x66,0x00,0x66, + 0x66,0x66,0x3C,0x18,0x18,0x18,0x00,0x7E,0x06,0x0C,0x18, + 0x30,0x60,0x7E,0x00,0x18,0x18,0x18,0xFF,0xFF,0x18,0x18, + 0x18,0xC0,0xC0,0x30,0x30,0xC0,0xC0,0x30,0x30,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x33,0x33,0xCC,0xCC,0x33, + 0x33,0xCC,0xCC,0x33,0x99,0xCC,0x66,0x33,0x99,0xCC,0x66, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0, + 0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0xFF,0xFF, + 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0xC0,0xC0,0xC0, + 0xC0,0xC0,0xC0,0xC0,0xCC,0xCC,0x33,0x33,0xCC,0xCC,0x33, + 0x33,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00, + 0x00,0x00,0xCC,0xCC,0x33,0x33,0xCC,0x99,0x33,0x66,0xCC, + 0x99,0x33,0x66,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, + 0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00,0x00, + 0x00,0x0F,0x0F,0x0F,0x0F,0x18,0x18,0x18,0x1F,0x1F,0x00, + 0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0x18,0x18,0x18,0x00, + 0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x1F, + 0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0x00,0x00, + 0x00,0x00,0x00,0x00,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18, + 0x18,0xF8,0xF8,0x18,0x18,0x18,0xC0,0xC0,0xC0,0xC0,0xC0, + 0xC0,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0xFF,0xFF,0x00, + 0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x01, + 0x03,0x06,0x6C,0x78,0x70,0x60,0x00,0x00,0x00,0x00,0x00, + 0xF0,0xF0,0xF0,0xF0,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00, + 0x00,0x18,0x18,0x18,0xF8,0xF8,0x00,0x00,0x00,0xF0,0xF0, + 0xF0,0xF0,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x0F, + 0x0F,0x0F,0x0F,0xC3,0x99,0x91,0x91,0x9F,0x99,0xC3,0xFF, + 0xFF,0xFF,0xC3,0xF9,0xC1,0x99,0xC1,0xFF,0xFF,0x9F,0x9F, + 0x83,0x99,0x99,0x83,0xFF,0xFF,0xFF,0xC3,0x9F,0x9F,0x9F, + 0xC3,0xFF,0xFF,0xF9,0xF9,0xC1,0x99,0x99,0xC1,0xFF,0xFF, + 0xFF,0xC3,0x99,0x81,0x9F,0xC3,0xFF,0xFF,0xF1,0xE7,0xC1, + 0xE7,0xE7,0xE7,0xFF,0xFF,0xFF,0xC1,0x99,0x99,0xC1,0xF9, + 0x83,0xFF,0x9F,0x9F,0x83,0x99,0x99,0x99,0xFF,0xFF,0xE7, + 0xFF,0xC7,0xE7,0xE7,0xC3,0xFF,0xFF,0xF9,0xFF,0xF9,0xF9, + 0xF9,0xF9,0xC3,0xFF,0x9F,0x9F,0x93,0x87,0x93,0x99,0xFF, + 0xFF,0xC7,0xE7,0xE7,0xE7,0xE7,0xC3,0xFF,0xFF,0xFF,0x99, + 0x80,0x80,0x94,0x9C,0xFF,0xFF,0xFF,0x83,0x99,0x99,0x99, + 0x99,0xFF,0xFF,0xFF,0xC3,0x99,0x99,0x99,0xC3,0xFF,0xFF, + 0xFF,0x83,0x99,0x99,0x83,0x9F,0x9F,0xFF,0xFF,0xC1,0x99, + 0x99,0xC1,0xF9,0xF9,0xFF,0xFF,0x83,0x99,0x9F,0x9F,0x9F, + 0xFF,0xFF,0xFF,0xC1,0x9F,0xC3,0xF9,0x83,0xFF,0xFF,0xE7, + 0x81,0xE7,0xE7,0xE7,0xF1,0xFF,0xFF,0xFF,0x99,0x99,0x99, + 0x99,0xC1,0xFF,0xFF,0xFF,0x99,0x99,0x99,0xC3,0xE7,0xFF, + 0xFF,0xFF,0x9C,0x94,0x80,0xC1,0xC9,0xFF,0xFF,0xFF,0x99, + 0xC3,0xE7,0xC3,0x99,0xFF,0xFF,0xFF,0x99,0x99,0x99,0xC1, + 0xF3,0x87,0xFF,0xFF,0x81,0xF3,0xE7,0xCF,0x81,0xFF,0xC3, + 0xCF,0xCF,0xCF,0xCF,0xCF,0xC3,0xFF,0xF3,0xED,0xCF,0x83, + 0xCF,0x9D,0x03,0xFF,0xC3,0xF3,0xF3,0xF3,0xF3,0xF3,0xC3, + 0xFF,0xFF,0xE7,0xC3,0x81,0xE7,0xE7,0xE7,0xE7,0xFF,0xEF, + 0xCF,0x80,0x80,0xCF,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xE7,0xE7,0xE7,0xE7,0xFF,0xFF,0xE7,0xFF, + 0x99,0x99,0x99,0xFF,0xFF,0xFF,0xFF,0xFF,0x99,0x99,0x00, + 0x99,0x00,0x99,0x99,0xFF,0xE7,0xC1,0x9F,0xC3,0xF9,0x83, + 0xE7,0xFF,0x9D,0x99,0xF3,0xE7,0xCF,0x99,0xB9,0xFF,0xC3, + 0x99,0xC3,0xC7,0x98,0x99,0xC0,0xFF,0xF9,0xF3,0xE7,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xF3,0xE7,0xCF,0xCF,0xCF,0xE7,0xF3, + 0xFF,0xCF,0xE7,0xF3,0xF3,0xF3,0xE7,0xCF,0xFF,0xFF,0x99, + 0xC3,0x00,0xC3,0x99,0xFF,0xFF,0xFF,0xE7,0xE7,0x81,0xE7, + 0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE7,0xCF, + 0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFC,0xF9,0xF3,0xE7,0xCF, + 0x9F,0xFF,0xC3,0x99,0x91,0x89,0x99,0x99,0xC3,0xFF,0xE7, + 0xE7,0xC7,0xE7,0xE7,0xE7,0x81,0xFF,0xC3,0x99,0xF9,0xF3, + 0xCF,0x9F,0x81,0xFF,0xC3,0x99,0xF9,0xE3,0xF9,0x99,0xC3, + 0xFF,0xF9,0xF1,0xE1,0x99,0x80,0xF9,0xF9,0xFF,0x81,0x9F, + 0x83,0xF9,0xF9,0x99,0xC3,0xFF,0xC3,0x99,0x9F,0x83,0x99, + 0x99,0xC3,0xFF,0x81,0x99,0xF3,0xE7,0xE7,0xE7,0xE7,0xFF, + 0xC3,0x99,0x99,0xC3,0x99,0x99,0xC3,0xFF,0xC3,0x99,0x99, + 0xC1,0xF9,0x99,0xC3,0xFF,0xFF,0xFF,0xE7,0xFF,0xFF,0xE7, + 0xFF,0xFF,0xFF,0xFF,0xE7,0xFF,0xFF,0xE7,0xE7,0xCF,0xF1, + 0xE7,0xCF,0x9F,0xCF,0xE7,0xF1,0xFF,0xFF,0xFF,0x81,0xFF, + 0x81,0xFF,0xFF,0xFF,0x8F,0xE7,0xF3,0xF9,0xF3,0xE7,0x8F, + 0xFF,0xC3,0x99,0xF9,0xF3,0xE7,0xFF,0xE7,0xFF,0xFF,0xFF, + 0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xE7,0xC3,0x99,0x81,0x99, + 0x99,0x99,0xFF,0x83,0x99,0x99,0x83,0x99,0x99,0x83,0xFF, + 0xC3,0x99,0x9F,0x9F,0x9F,0x99,0xC3,0xFF,0x87,0x93,0x99, + 0x99,0x99,0x93,0x87,0xFF,0x81,0x9F,0x9F,0x87,0x9F,0x9F, + 0x81,0xFF,0x81,0x9F,0x9F,0x87,0x9F,0x9F,0x9F,0xFF,0xC3, + 0x99,0x9F,0x91,0x99,0x99,0xC3,0xFF,0x99,0x99,0x99,0x81, + 0x99,0x99,0x99,0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3, + 0xFF,0xE1,0xF3,0xF3,0xF3,0xF3,0x93,0xC7,0xFF,0x99,0x93, + 0x87,0x8F,0x87,0x93,0x99,0xFF,0x9F,0x9F,0x9F,0x9F,0x9F, + 0x9F,0x81,0xFF,0x9C,0x88,0x80,0x94,0x9C,0x9C,0x9C,0xFF, + 0x99,0x89,0x81,0x81,0x91,0x99,0x99,0xFF,0xC3,0x99,0x99, + 0x99,0x99,0x99,0xC3,0xFF,0x83,0x99,0x99,0x83,0x9F,0x9F, + 0x9F,0xFF,0xC3,0x99,0x99,0x99,0x99,0xC3,0xF1,0xFF,0x83, + 0x99,0x99,0x83,0x87,0x93,0x99,0xFF,0xC3,0x99,0x9F,0xC3, + 0xF9,0x99,0xC3,0xFF,0x81,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7, + 0xFF,0x99,0x99,0x99,0x99,0x99,0x99,0xC3,0xFF,0x99,0x99, + 0x99,0x99,0x99,0xC3,0xE7,0xFF,0x9C,0x9C,0x9C,0x94,0x80, + 0x88,0x9C,0xFF,0x99,0x99,0xC3,0xE7,0xC3,0x99,0x99,0xFF, + 0x99,0x99,0x99,0xC3,0xE7,0xE7,0xE7,0xFF,0x81,0xF9,0xF3, + 0xE7,0xCF,0x9F,0x81,0xFF,0xE7,0xE7,0xE7,0x00,0x00,0xE7, + 0xE7,0xE7,0x3F,0x3F,0xCF,0xCF,0x3F,0x3F,0xCF,0xCF,0xE7, + 0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xCC,0xCC,0x33,0x33, + 0xCC,0xCC,0x33,0x33,0xCC,0x66,0x33,0x99,0xCC,0x66,0x33, + 0x99,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F, + 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0xFF,0xFF,0xFF,0xFF,0x00, + 0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x3F,0x3F,0x3F, + 0x3F,0x3F,0x3F,0x3F,0x3F,0x33,0x33,0xCC,0xCC,0x33,0x33, + 0xCC,0xCC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFF, + 0xFF,0xFF,0xFF,0x33,0x33,0xCC,0xCC,0x33,0x66,0xCC,0x99, + 0x33,0x66,0xCC,0x99,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFC,0xE7,0xE7,0xE7,0xE0,0xE0,0xE7,0xE7,0xE7,0xFF,0xFF, + 0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,0xE7,0xE7,0xE7,0xE0,0xE0, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0xE7,0xE7,0xE7, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF, + 0xE0,0xE0,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0x00,0x00,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xE7,0xE7,0xE7,0xE7, + 0xE7,0xE7,0x07,0x07,0xE7,0xE7,0xE7,0x3F,0x3F,0x3F,0x3F, + 0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F, + 0x1F,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, + 0xFE,0xFC,0xF9,0x93,0x87,0x8F,0x9F,0xFF,0xFF,0xFF,0xFF, + 0xFF,0x0F,0x0F,0x0F,0x0F,0xF0,0xF0,0xF0,0xF0,0xFF,0xFF, + 0xFF,0xFF,0xE7,0xE7,0xE7,0x07,0x07,0xFF,0xFF,0xFF,0x0F, + 0x0F,0x0F,0x0F,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F, + 0xF0,0xF0,0xF0,0xF0, +}; diff --git a/MCUME_pico/pico64/roms.h b/MCUME_pico/pico64/roms.h new file mode 100755 index 0000000..5722277 --- /dev/null +++ b/MCUME_pico/pico64/roms.h @@ -0,0 +1,10 @@ +#ifndef Teensy64_roms_h_ +#define Teensy64_roms_h_ + +#define APPLY_PATCHES 1 + +extern const unsigned char rom_basic[8192]; +extern const unsigned char rom_kernal[8192]; +extern const unsigned char rom_characters[4096]; + +#endif \ No newline at end of file diff --git a/MCUME_pico/pico64/settings.h b/MCUME_pico/pico64/settings.h new file mode 100755 index 0000000..014f245 --- /dev/null +++ b/MCUME_pico/pico64/settings.h @@ -0,0 +1,62 @@ +/* + Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +#ifndef settings_h_ +#define settings_h_ + +#ifndef VGA +#define VGA 0 //use 0 for ILI9341 Display +#endif + +#ifndef PS2KEYBOARD +#define PS2KEYBOARD 0 //Use 0 for USB-HOST +#endif + + +//Note: PAL/NTSC are EMULATED - This is not the real videomode! +#ifndef PAL +#define PAL 1 //use 0 for NTSC +#endif + +#ifndef FASTBOOT +#define FASTBOOT 1 //0 to disable fastboot +#endif + + +#define EXACTTIMINGDURATION 600ul //ms exact timing after IEC-BUS activity + + + +#endif diff --git a/MCUME_pico/pico64/sid.cpp b/MCUME_pico/pico64/sid.cpp new file mode 100644 index 0000000..76ac568 --- /dev/null +++ b/MCUME_pico/pico64/sid.cpp @@ -0,0 +1,49 @@ +/* + Arduino SID + Copyright (c) 2015 Frank Bösing + This library 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 3 of the License, or + (at your option) any later version. + This library 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 library. If not, see . + + Diese Bibliothek ist freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + Diese Bibliothek wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + + */ + +#include "reSID/envelope.cpp" +#include "reSID/extfilt.cpp" +#include "reSID/filter.cpp" +#include "reSID/pot.cpp" +#include "reSID/version.cpp" +#include "reSID/voice.cpp" + + +#include "reSID/wave6581__ST.cpp" +#include "reSID/wave6581_P_T.cpp" +#include "reSID/wave6581_PS_.cpp" +#include "reSID/wave6581_PST.cpp" + +/* +#include "reSID/wave8580__ST.cc" +#include "reSID/wave8580_P_T.cc" +#include "reSID/wave8580_PS_.cc" +#include "reSID/wave8580_PST.cc" +*/ +#include "reSID/wave.cpp" + +#include "reSID/sid.cpp" diff --git a/MCUME_pico/pico64/util.cpp b/MCUME_pico/pico64/util.cpp new file mode 100755 index 0000000..5eaf921 --- /dev/null +++ b/MCUME_pico/pico64/util.cpp @@ -0,0 +1,71 @@ +/* +Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ +#include +#include +#include "util.h" + +//Attention, don't use WFI-instruction - the CPU does not count cycles during sleep +void enableCycleCounter(void) { + +} + +extern "C" volatile uint32_t systick_millis_count; +void mySystick_isr(void) { systick_millis_count++; } +void myUnused_isr(void) {}; + +void disableEventResponder(void) { +} + +static float setDACFreq(float freq) { + + return (float)0; +} + +float setAudioSampleFreq(float freq) { + int f=0; + return f; +} + +void setAudioOff(void) { + +} + +void setAudioOn(void) { + +} + +void listInterrupts() { + +} \ No newline at end of file diff --git a/MCUME_pico/pico64/util.h b/MCUME_pico/pico64/util.h new file mode 100755 index 0000000..134157d --- /dev/null +++ b/MCUME_pico/pico64/util.h @@ -0,0 +1,65 @@ +/* +Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +#ifndef _UTIL_C64H_ +#define _UTIL_C64H_ + +#include "Teensy64.h" + +static inline unsigned get_ccount(void) +{ + unsigned r; +// asm volatile ("rsr %0, ccount" : "=r"(r)); + return r; +} + +void disableEventResponder(void); + +void enableCycleCounter(void); +inline unsigned fbmillis(void) __attribute__((always_inline)); +inline unsigned fbmicros(void) __attribute__((always_inline)); +inline unsigned fbnanos(void) __attribute__((always_inline)); + +unsigned fbmillis(void) { return (get_ccount() * (1000.0/F_CPU)); } +unsigned fbmicros(void) { return (get_ccount() * (1000000.0/F_CPU)); } +unsigned fbnanos(void) { return (get_ccount() * (1000000000.0 / F_CPU)); } + +float setAudioSampleFreq(float freq); +void setAudioOff(void); +void setAudioOn(void); +void listInterrupts(); + + +#endif \ No newline at end of file diff --git a/MCUME_pico/pico64/vic.cpp b/MCUME_pico/pico64/vic.cpp new file mode 100644 index 0000000..5545a02 --- /dev/null +++ b/MCUME_pico/pico64/vic.cpp @@ -0,0 +1,2157 @@ +/* + Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +/* + TODOs: + - Fix Bugs.. + - FLD - (OK 08/17) test this more.. + - Sprite Stretching (requires "MOBcounter") + - BA Signal -> CPU + - xFLI + - ... + - DMA Delay (?) - needs partial rewrite (idle - > badline in middle of line. Is the 3.6 fast enough??) + - optimize more +*/ + + +#include "Teensy64.h" +#include "vic.h" +#include +#include +#include + +#define min(a, b) (((a) < (b)) ? (a) : (b)) +#define max(a, b) (((a) > (b)) ? (a) : (b)) + +#define PALETTE(r,g,b) (RGBVAL16(r,g,b)) //(((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3)) +#include "vic_palette.h" + + + +#define BORDER (240-200)/2 +#define SCREEN_HEIGHT (200+2*BORDER) +#define SCREEN_WIDTH 320 +//#define LINE_MEM_WIDTH 320 +#define FIRSTDISPLAYLINE ( 51 - BORDER ) +#define LASTDISPLAYLINE ( 250 + BORDER ) +#define BORDER_LEFT 0 +#define BORDER_RIGHT 0 + +typedef uint8_t tpixel; + +#define MAXCYCLESSPRITES0_2 3 +#define MAXCYCLESSPRITES3_7 5 +#define MAXCYCLESSPRITES (MAXCYCLESSPRITES0_2 + MAXCYCLESSPRITES3_7) + + +/*****************************************************************************************************/ +/*****************************************************************************************************/ +/*****************************************************************************************************/ + +inline __attribute__((always_inline)) +void fastFillLine(tpixel * p, const tpixel * pe, const uint16_t col, uint16_t * spl); +inline __attribute__((always_inline)) +void fastFillLineNoSprites(tpixel * p, const tpixel * pe, const uint16_t col); + + +/*****************************************************************************************************/ +/*****************************************************************************************************/ +/*****************************************************************************************************/ + +#define SPRITENUM(data) (1 << ((data >> 8) & 0x07)) +#define CHARSETPTR() cpu.vic.charsetPtr = cpu.vic.charsetPtrBase + cpu.vic.rc; +#define CYCLES(x) {if (cpu.vic.badline) {cia_clockt(x);} else {cpu_clock(x);} } + +#define BADLINE(x) {if (cpu.vic.badline) { \ + cpu.vic.lineMemChr[x] = cpu.RAM[cpu.vic.videomatrix + vc + x]; \ + cpu.vic.lineMemCol[x] = cpu.vic.COLORRAM[vc + x]; \ + cia1_clock(1); \ + cia2_clock(1); \ + } else { \ + cpu_clock(1); \ + } \ + }; + +#define SPRITEORFIXEDCOLOR() \ + sprite = *spl++; \ + if (sprite) { \ + *p++ = cpu.vic.palette[sprite & 0x0f]; \ + } else { \ + *p++ = col; \ + } + + +#if 0 +#define PRINTOVERFLOW \ + if (p>pe) { \ + Serial.print("VIC overflow Mode "); \ + Serial.println(mode); \ + } + +#define PRINTOVERFLOWS \ + if (p>pe) { \ + Serial.print("VIC overflow (Sprite) Mode "); \ + Serial.println(mode); \ + } +#else +#define PRINTOVERFLOW +#define PRINTOVERFLOWS +#endif + +/*****************************************************************************************************/ +void mode0 (tpixel *p, const tpixel *pe, uint16_t *spl, const uint16_t vc) { + // Standard-Textmodus(ECM/BMM/MCM=0/0/0) + /* + Standard-Textmodus (ECM / BMM / MCM = 0/0/0) + In diesem Modus (wie in allen Textmodi) liest der VIC aus der videomatrix 8-Bit-Zeichenzeiger, + die die Adresse der Punktmatrix des Zeichens im Zeichengenerator angibt. Damit ist ein Zeichensatz + von 256 Zeichen verfügbar, die jeweils aus 8×8 Pixeln bestehen, die in 8 aufeinanderfolgenden Bytes + im Zeichengenerator abgelegt sind. Mit den Bits VM10-13 und CB11-13 aus Register $d018 lassen sich + videomatrix und Zeichengenerator im Speicher verschieben. Im Standard-Textmodus entspricht jedes Bit + im Zeichengenerator direkt einem Pixel auf dem Bildschirm. Die Vordergrundfarbe ist für jedes Zeichen + im Farbnibble aus der videomatrix angegeben, die Hintergrundfarbe wird global durch Register $d021 festgelegt. + + +----+----+----+----+----+----+----+----+ + | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + +----+----+----+----+----+----+----+----+ + | 8 Pixel (1 Bit/Pixel) | + | | + | "0": Hintergrundfarbe 0 ($d021) | + | "1": Farbe aus Bits 8-11 der c-Daten | + +---------------------------------------+ + + */ + + uint8_t chr, pixel; + uint16_t fgcol; + uint16_t bgcol; + uint16_t x = 0; + + CHARSETPTR(); + + if (cpu.vic.lineHasSprites) { + + do { + + BADLINE(x); + + chr = cpu.vic.charsetPtr[cpu.vic.lineMemChr[x] * 8]; + fgcol = cpu.vic.lineMemCol[x]; + x++; + unsigned m = min(8, pe - p); + for (unsigned i = 0; i < m; i++) { + int sprite = *spl++; + + if (sprite) { // Sprite: Ja + int spritenum = SPRITENUM(sprite); + int spritepixel = sprite & 0x0f; + + if (sprite & 0x4000) { // Sprite: Hinter Text MDP = 1 + if (chr & 0x80) { + cpu.vic.fgcollision |= spritenum; + pixel = fgcol; + } else { + pixel = spritepixel; + } + } else { // Sprite: Vor Text //MDP = 0 + if (chr & 0x80) cpu.vic.fgcollision |= spritenum; + pixel = spritepixel; + } + } else { // Kein Sprite + pixel = (chr & 0x80) ? fgcol : cpu.vic.B0C; + } + + *p++ = cpu.vic.palette[pixel]; + chr = chr << 1; + + } + } while (p < pe); + PRINTOVERFLOWS + } else { //Keine Sprites + + while (p < pe - 8) { + + BADLINE(x) + + chr = cpu.vic.charsetPtr[cpu.vic.lineMemChr[x] * 8]; + fgcol = cpu.vic.palette[cpu.vic.lineMemCol[x]]; + bgcol = cpu.vic.colors[1]; + x++; + + *p++ = (chr & 0x80) ? fgcol : bgcol; + *p++ = (chr & 0x40) ? fgcol : bgcol; + *p++ = (chr & 0x20) ? fgcol : bgcol; + *p++ = (chr & 0x10) ? fgcol : bgcol; + *p++ = (chr & 0x08) ? fgcol : bgcol; + *p++ = (chr & 0x04) ? fgcol : bgcol; + *p++ = (chr & 0x02) ? fgcol : bgcol; + *p++ = (chr & 0x01) ? fgcol : bgcol; + + }; + + while (p < pe) { + + BADLINE(x) + + chr = cpu.vic.charsetPtr[cpu.vic.lineMemChr[x] * 8]; + fgcol = cpu.vic.palette[cpu.vic.lineMemCol[x]]; + bgcol = cpu.vic.colors[1]; + x++; + + *p++ = (chr & 0x80) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x40) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x20) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x10) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x08) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x04) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x02) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x01) ? fgcol : bgcol; + }; + PRINTOVERFLOW + } + while (x<40) {BADLINE(x); x++;} +}; + +/*****************************************************************************************************/ +void mode1 (tpixel *p, const tpixel *pe, uint16_t *spl, const uint16_t vc) { + /* + Multicolor-Textmodus (ECM/BMM/MCM=0/0/1) + Dieser Modus ermöglicht es, auf Kosten der horizontalen Auflösung vierfarbige Zeichen darzustellen. + Ist Bit 11 der c-Daten Null, wird das Zeichen wie im Standard-Textmodus dargestellt, wobei aber nur die + Farben 0-7 für den Vordergrund zur Verfügung stehen. Ist Bit 11 gesetzt, bilden jeweils zwei horizontal + benachbarte Bits der Punktmatrix ein Pixel. Dadurch ist die Auflösung des Zeichens auf 4×8 reduziert + (die Pixel sind doppelt so breit, die Gesamtbreite der Zeichen ändert sich also nicht). + Interessant ist, daß nicht nur die Bitkombination „00â€, sondern auch „01†für die Spritepriorität + und -kollisionserkennung zum "Hintergrund" gezählt wird. + + +----+----+----+----+----+----+----+----+ + | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + +----+----+----+----+----+----+----+----+ + | 8 Pixel (1 Bit/Pixel) | + | | MC-Flag = 0 + | "0": Hintergrundfarbe 0 ($d021) | + | "1": Farbe aus Bits 8-10 der c-Daten | + +---------------------------------------+ + | 4 Pixel (2 Bit/Pixel) | + | | + | "00": Hintergrundfarbe 0 ($d021) | MC-Flag = 1 + | "01": Hintergrundfarbe 1 ($d022) | + | "10": Hintergrundfarbe 2 ($d023) | + | "11": Farbe aus Bits 8-10 der c-Daten | + +---------------------------------------+ + + */ + + // POKE 53270,PEEK(53270) OR 16 + // poke 53270,peek(53270) or 16 + + uint16_t bgcol, fgcol, pixel; + uint16_t colors[4]; + uint8_t chr; + uint8_t x = 0; + + CHARSETPTR(); + + if (cpu.vic.lineHasSprites) { + + colors[0] = cpu.vic.B0C; + + do { + + if (cpu.vic.idle) { + cpu_clock(1); + fgcol = colors[1] = colors[2] = colors[3] = 0; + chr = cpu.RAM[cpu.vic.bank + 0x3fff]; + } else { + BADLINE(x); + fgcol = cpu.vic.lineMemCol[x]; + colors[1] = cpu.vic.R[0x22]; + colors[2] = cpu.vic.R[0x23]; + colors[3] = fgcol & 0x07; + chr = cpu.vic.charsetPtr[cpu.vic.lineMemChr[x] * 8]; + } + + x++; + + if ((fgcol & 0x08) == 0) { //Zeichen ist HIRES + + unsigned m = min(8, pe - p); + for (unsigned i = 0; i < m; i++) { + + int sprite = *spl++; + + if (sprite) { // Sprite: Ja + + /* + Sprite-Prioritäten (Anzeige) + MDP = 1: Grafikhintergrund, Sprite, Vordergrund + MDP = 0: Grafikhintergrund, Vordergrund, Sprite + + Kollision: + Eine Kollision zwischen Sprites und anderen Grafikdaten wird erkannt, + sobald beim Bildaufbau ein nicht transparentes Spritepixel und ein Vordergrundpixel ausgegeben wird. + + */ + int spritenum = SPRITENUM(sprite); + pixel = sprite & 0x0f; //Hintergrundgrafik + if (sprite & 0x4000) { // MDP = 1 + if (chr & 0x80) { //Vordergrundpixel ist gesetzt + cpu.vic.fgcollision |= spritenum; + pixel = colors[3]; + } + } else { // MDP = 0 + if (chr & 0x80) cpu.vic.fgcollision |= spritenum; //Vordergrundpixel ist gesetzt + } + + } else { // Kein Sprite + pixel = (chr >> 7) ? colors[3] : colors[0]; + } + + *p++ = cpu.vic.palette[pixel]; + + chr = chr << 1; + } + + } else {//Zeichen ist MULTICOLOR + + for (unsigned i = 0; i < 4; i++) { + if (p >= pe) break; + int c = (chr >> 6) & 0x03; + chr = chr << 2; + + int sprite = *spl++; + + if (sprite) { // Sprite: Ja + int spritenum = SPRITENUM(sprite); + pixel = sprite & 0x0f; //Hintergrundgrafik + if (sprite & 0x4000) { // MDP = 1 + + if (chr & 0x80) { //Vordergrundpixel ist gesetzt + cpu.vic.fgcollision |= spritenum; + pixel = colors[c]; + } + + } else { // MDP = 0 + if (chr & 0x80) cpu.vic.fgcollision |= spritenum; //Vordergrundpixel ist gesetzt + } + + } else { // Kein Sprite + pixel = colors[c]; + + } + *p++ = cpu.vic.palette[pixel]; + if (p >= pe) break; + + sprite = *spl++; + + //Das gleiche nochmal für das nächste Pixel + if (sprite) { // Sprite: Ja + int spritenum = SPRITENUM(sprite); + pixel = sprite & 0x0f; //Hintergrundgrafik + if (sprite & 0x4000) { // MDP = 1 + + if (chr & 0x80) { //Vordergrundpixel ist gesetzt + cpu.vic.fgcollision |= spritenum; + pixel = colors[c]; + } + } else { // MDP = 0 + if (chr & 0x80) cpu.vic.fgcollision |= spritenum; //Vordergrundpixel ist gesetzt + } + } else { // Kein Sprite + pixel = colors[c]; + } + *p++ = cpu.vic.palette[pixel]; + + } + + } + + } while (p < pe); + PRINTOVERFLOWS + } else { //Keine Sprites + + while (p < pe - 8) { + + int c; + + bgcol = cpu.vic.colors[1]; + colors[0] = bgcol; + + if (cpu.vic.idle) { + cpu_clock(1); + c = colors[1] = colors[2] = colors[3] = 0; + chr = cpu.RAM[cpu.vic.bank + 0x3fff]; + } else { + BADLINE(x); + + colors[1] = cpu.vic.colors[2]; + colors[2] = cpu.vic.colors[3]; + + chr = cpu.vic.charsetPtr[cpu.vic.lineMemChr[x] * 8]; + c = cpu.vic.lineMemCol[x]; + } + + x++; + + if ((c & 0x08) == 0) { //Zeichen ist HIRES + fgcol = cpu.vic.palette[c & 0x07]; + *p++ = (chr & 0x80) ? fgcol : bgcol; + *p++ = (chr & 0x40) ? fgcol : bgcol; + *p++ = (chr & 0x20) ? fgcol : bgcol; + *p++ = (chr & 0x10) ? fgcol : bgcol; + *p++ = (chr & 0x08) ? fgcol : bgcol; + *p++ = (chr & 0x04) ? fgcol : bgcol; + *p++ = (chr & 0x02) ? fgcol : bgcol; + *p++ = (chr & 0x01) ? fgcol : bgcol; + } else {//Zeichen ist MULTICOLOR + + colors[3] = cpu.vic.palette[c & 0x07]; + pixel = colors[(chr >> 6) & 0x03]; *p++ = pixel; *p++ = pixel; + pixel = colors[(chr >> 4) & 0x03]; *p++ = pixel; *p++ = pixel; + pixel = colors[(chr >> 2) & 0x03]; *p++ = pixel; *p++ = pixel; + pixel = colors[(chr ) & 0x03]; *p++ = pixel; *p++ = pixel; + } + + }; + + while (p < pe) { + + int c; + + bgcol = cpu.vic.colors[1]; + colors[0] = bgcol; + + if (cpu.vic.idle) { + cpu_clock(1); + c = colors[1] = colors[2] = colors[3] = 0; + chr = cpu.RAM[cpu.vic.bank + 0x3fff]; + } else { + BADLINE(x); + + colors[1] = cpu.vic.colors[2]; + colors[2] = cpu.vic.colors[3]; + + chr = cpu.vic.charsetPtr[cpu.vic.lineMemChr[x] * 8]; + c = cpu.vic.lineMemCol[x]; + } + + x++; + + if ((c & 0x08) == 0) { //Zeichen ist HIRES + fgcol = cpu.vic.palette[c & 0x07]; + *p++ = (chr & 0x80) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x40) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x20) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x10) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x08) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x04) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x02) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x01) ? fgcol : bgcol; + } else {//Zeichen ist MULTICOLOR + + colors[3] = cpu.vic.palette[c & 0x07]; + pixel = colors[(chr >> 6) & 0x03]; *p++ = pixel; if (p >= pe) break; *p++ = pixel; if (p >= pe) break; + pixel = colors[(chr >> 4) & 0x03]; *p++ = pixel; if (p >= pe) break; *p++ = pixel; if (p >= pe) break; + pixel = colors[(chr >> 2) & 0x03]; *p++ = pixel; if (p >= pe) break; *p++ = pixel; if (p >= pe) break; + pixel = colors[(chr ) & 0x03]; *p++ = pixel; if (p >= pe) break; *p++ = pixel; + } + + }; + PRINTOVERFLOW + } + while (x<40) {BADLINE(x); x++;} +} + +/*****************************************************************************************************/ +void mode2 (tpixel *p, const tpixel *pe, uint16_t *spl, const uint16_t vc) { + /* + Standard-Bitmap-Modus (ECM / BMM / MCM = 0/1/0) ("HIRES") + In diesem Modus (wie in allen Bitmap-Modi) liest der VIC die Grafikdaten aus einer 320×200-Bitmap, + in der jedes Bit direkt einem Punkt auf dem Bildschirm entspricht. Die Daten aus der videomatrix + werden für die Farbinformation benutzt. Da die videomatrix weiterhin nur eine 40×25-Matrix ist, + können die Farben nur für Blöcke von 8×8 Pixeln individuell bestimmt werden (also eine Art YC-8:1-Format). + Da die Entwickler des VIC-II den Bitmap-Modus mit sowenig zusätzlichem Schaltungsaufwand wie möglich realisieren wollten + (der VIC-I hatte noch keinen Bitmap-Modus), ist die Bitmap etwas ungewöhnlich im Speicher abgelegt: + Im Gegensatz zu modernen Videochips, die die Bitmap linear aus dem Speicher lesen, bilden beim VIC jeweils 8 aufeinanderfolgende Bytes einen 8×8-Pixelblock + auf dem Bildschirm. Mit den Bits VM10-13 und CB13 aus Register $d018 lassen sich videomatrix und Bitmap im Speicher verschieben. + Im Standard-Bitmap-Modus entspricht jedes Bit in der Bitmap direkt einem Pixel auf dem Bildschirm. + Für jeden 8×8-Block können Vorder- und Hintergrundfarbe beliebig eingestellt werden. + + +----+----+----+----+----+----+----+----+ + | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + +----+----+----+----+----+----+----+----+ + | 8 Pixel (1 Bit/Pixel) | + | | + | "0": Farbe aus Bits 0-3 der c-Daten | + | "1": Farbe aus Bits 4-7 der c-Daten | + +---------------------------------------+ + + + http://www.devili.iki.fi/Computers/Commodore/C64/Programmers_Reference/Chapter_3/page_127.html + */ + + uint8_t chr; + uint16_t fgcol, pixel; + uint16_t bgcol; + uint8_t x = 0; + uint8_t * bP = cpu.vic.bitmapPtr + vc * 8 + cpu.vic.rc; + + if (cpu.vic.lineHasSprites) { + do { + + BADLINE(x); + + uint8_t t = cpu.vic.lineMemChr[x]; + fgcol = t >> 4; + bgcol = t & 0x0f; + chr = bP[x * 8]; + + x++; + + unsigned m = min(8, pe - p); + for (unsigned i = 0; i < m; i++) { + + int sprite = *spl++; + + chr = chr << 1; + if (sprite) { // Sprite: Ja + /* + Sprite-Prioritäten (Anzeige) + MDP = 1: Grafikhintergrund, Sprite, Vordergrund + MDP = 0: Grafikhintergung, Vordergrund, Sprite + + Kollision: + Eine Kollision zwischen Sprites und anderen Grafikdaten wird erkannt, + sobald beim Bildaufbau ein nicht transparentes Spritepixel und ein Vordergrundpixel ausgegeben wird. + + */ + int spritenum = SPRITENUM(sprite); + pixel = sprite & 0x0f; //Hintergrundgrafik + if (sprite & 0x4000) { // MDP = 1 + if (chr & 0x80) { //Vordergrundpixel ist gesetzt + cpu.vic.fgcollision |= spritenum; + pixel = fgcol; + } + } else { // MDP = 0 + if (chr & 0x80) cpu.vic.fgcollision |= spritenum; //Vordergrundpixel ist gesetzt + } + + } else { // Kein Sprite + pixel = (chr & 0x80) ? fgcol :cpu.vic.B0C; + } + + *p++ = cpu.vic.palette[pixel]; + + } + } while (p < pe); + PRINTOVERFLOWS + } else { //Keine Sprites + + while (p < pe - 8) { + //color-ram not used! + BADLINE(x); + + uint8_t t = cpu.vic.lineMemChr[x]; + fgcol = cpu.vic.palette[t >> 4]; + bgcol = cpu.vic.palette[t & 0x0f]; + chr = bP[x * 8]; + x++; + + *p++ = (chr & 0x80) ? fgcol : bgcol; + *p++ = (chr & 0x40) ? fgcol : bgcol; + *p++ = (chr & 0x20) ? fgcol : bgcol; + *p++ = (chr & 0x10) ? fgcol : bgcol; + *p++ = (chr & 0x08) ? fgcol : bgcol; + *p++ = (chr & 0x04) ? fgcol : bgcol; + *p++ = (chr & 0x02) ? fgcol : bgcol; + *p++ = (chr & 0x01) ? fgcol : bgcol; + }; + while (p < pe) { + //color-ram not used! + BADLINE(x); + + uint8_t t = cpu.vic.lineMemChr[x]; + fgcol = cpu.vic.palette[t >> 4]; + bgcol = cpu.vic.palette[t & 0x0f]; + chr = bP[x * 8]; + + x++; + + *p++ = (chr & 0x80) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x40) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x20) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x10) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x08) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x04) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x02) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x01) ? fgcol : bgcol; + + }; + PRINTOVERFLOW + } + while (x<40) {BADLINE(x); x++;} +} +/*****************************************************************************************************/ +void mode3 (tpixel *p, const tpixel *pe, uint16_t *spl, const uint16_t vc) { + /* + Multicolor-Bitmap-Modus (ECM/BMM/MCM=0/1/1) + + Ähnlich wie beim Multicolor-Textmodus bilden auch in diesem Modus jeweils + zwei benachbarte Bits ein (doppelt so breites) Pixel. Die Auflösung + reduziert sich damit auf 160×200 Pixel. + + Genau wie beim Multicolor-Textmodus wird die Bitkombination "01" für die + Spritepriorität und -kollisionserkennung zum "Hintergrund" gezählt. + + +----+----+----+----+----+----+----+----+ + | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + +----+----+----+----+----+----+----+----+ + | 4 Pixel (2 Bit/Pixel) | + | | + | "00": Hintergrundfarbe 0 ($d021) | + | "01": Farbe aus Bits 4-7 der c-Daten | + | "10": Farbe aus Bits 0-3 der c-Daten | + | "11": Farbe aus Bits 8-11 der c-Daten | + +---------------------------------------+ + + POKE 53265,PEEK(53625)OR 32: POKE 53270,PEEK(53270)OR 16 + */ + uint8_t * bP = cpu.vic.bitmapPtr + vc * 8 + cpu.vic.rc; + uint16_t colors[4]; + uint16_t pixel; + uint8_t chr, x; + + x = 0; + + if (cpu.vic.lineHasSprites) { + colors[0] = cpu.vic.B0C; + do { + + if (cpu.vic.idle) { + cpu_clock(1); + colors[1] = colors[2] = colors[3] = 0; + chr = cpu.RAM[cpu.vic.bank + 0x3fff]; + } else { + BADLINE(x); + uint8_t t = cpu.vic.lineMemChr[x]; + colors[1] = t >> 4;//10 + colors[2] = t & 0x0f; //01 + colors[3] = cpu.vic.lineMemCol[x]; + chr = bP[x * 8]; + }; + + x++; + + for (unsigned i = 0; i < 4; i++) { + if (p >= pe) break; + uint32_t c = (chr >> 6) & 0x03; + chr = chr << 2; + + int sprite = *spl++; + + if (sprite) { // Sprite: Ja + int spritenum = SPRITENUM(sprite); + pixel = sprite & 0x0f; //Hintergrundgrafik + if (sprite & 0x4000) { // MDP = 1 + if (c & 0x02) { //Vordergrundpixel ist gesetzt + cpu.vic.fgcollision |= spritenum; + pixel = colors[c]; + } + } else { // MDP = 0 + if (c & 0x02) cpu.vic.fgcollision |= spritenum; //Vordergundpixel ist gesetzt + } + } else { // Kein Sprite + pixel = colors[c]; + } + + *p++ = cpu.vic.palette[pixel]; + if (p >= pe) break; + + sprite = *spl++; + + if (sprite) { // Sprite: Ja + int spritenum = SPRITENUM(sprite); + pixel = sprite & 0x0f; //Hintergrundgrafik + if (sprite & 0x4000) { // MDP = 1 + + if (c & 0x02) { //Vordergrundpixel ist gesetzt + cpu.vic.fgcollision |= spritenum; + pixel = colors[c]; + } + } else { // MDP = 0 + if (c & 0x02) cpu.vic.fgcollision |= spritenum; //Vordergundpixel ist gesetzt + } + } else { // Kein Sprite + pixel = colors[c]; + } + + *p++ = cpu.vic.palette[pixel]; + + } + + } while (p < pe); + PRINTOVERFLOWS + + } else { //Keine Sprites + + while (p < pe - 8) { + + colors[0] = cpu.vic.colors[1]; + + if (cpu.vic.idle) { + cpu_clock(1); + colors[1] = colors[2] = colors[3] = 0; + chr = cpu.RAM[cpu.vic.bank + 0x3fff]; + } else { + BADLINE(x); + + uint8_t t = cpu.vic.lineMemChr[x]; + colors[1] = cpu.vic.palette[t >> 4];//10 + colors[2] = cpu.vic.palette[t & 0x0f]; //01 + colors[3] = cpu.vic.palette[cpu.vic.lineMemCol[x]]; + chr = bP[x * 8]; + } + + x++; + pixel = colors[(chr >> 6) & 0x03]; *p++ = pixel; *p++ = pixel; + pixel = colors[(chr >> 4) & 0x03]; *p++ = pixel; *p++ = pixel; + pixel = colors[(chr >> 2) & 0x03]; *p++ = pixel; *p++ = pixel; + pixel = colors[chr & 0x03]; *p++ = pixel; *p++ = pixel; + + }; + while (p < pe) { + + colors[0] = cpu.vic.colors[1]; + + if (cpu.vic.idle) { + cpu_clock(1); + colors[1] = colors[2] = colors[3] = 0; + chr = cpu.RAM[cpu.vic.bank + 0x3fff]; + } else { + BADLINE(x); + + uint8_t t = cpu.vic.lineMemChr[x]; + colors[1] = cpu.vic.palette[t >> 4];//10 + colors[2] = cpu.vic.palette[t & 0x0f]; //01 + colors[3] = cpu.vic.palette[cpu.vic.lineMemCol[x]]; + chr = bP[x * 8]; + } + + x++; + pixel = colors[(chr >> 6) & 0x03]; *p++ = pixel; if (p >= pe) break; *p++ = pixel; if (p >= pe) break; + pixel = colors[(chr >> 4) & 0x03]; *p++ = pixel; if (p >= pe) break; *p++ = pixel; if (p >= pe) break; + pixel = colors[(chr >> 2) & 0x03]; *p++ = pixel; if (p >= pe) break; *p++ = pixel; if (p >= pe) break; + pixel = colors[chr & 0x03]; *p++ = pixel; if (p >= pe) break; *p++ = pixel; + + }; + PRINTOVERFLOW + } + while (x<40) {BADLINE(x); x++;} +} +/*****************************************************************************************************/ +void mode4 (tpixel *p, const tpixel *pe, uint16_t *spl, const uint16_t vc) { + //ECM-Textmodus (ECM/BMM/MCM=1/0/0) + /* + Dieser Textmodus entspricht dem Standard-Textmodus, erlaubt es aber, für + jedes einzelne Zeichen eine von vier Hintergrundfarben auszuwählen. Die + Auswahl geschieht über die oberen beiden Bits des Zeichenzeigers. Dadurch + reduziert sich der Zeichenvorrat allerdings von 256 auf 64 Zeichen. + + +----+----+----+----+----+----+----+----+ + | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + +----+----+----+----+----+----+----+----+ + | 8 Pixel (1 Bit/Pixel) | + | | + | "0": Je nach Bits 6/7 der c-Daten | + | 00: Hintergrundfarbe 0 ($d021) | + | 01: Hintergrundfarbe 1 ($d022) | + | 10: Hintergrundfarbe 2 ($d023) | + | 11: Hintergrundfarbe 3 ($d024) | + | "1": Farbe aus Bits 8-11 der c-Daten | + +---------------------------------------+ + */ + // https://www.c64-wiki.de/wiki/Hintergrundfarbe + // POKE 53265, PEEK(53265) OR 64:REM CURSOR BLINKT ROT abc + + uint8_t chr, pixel; + uint16_t fgcol; + uint16_t bgcol; + uint8_t x = 0; + + CHARSETPTR(); + if (cpu.vic.lineHasSprites) { + do { + + BADLINE(x); + + uint32_t td = cpu.vic.lineMemChr[x]; + bgcol = cpu.vic.R[0x21 + ((td >> 6) & 0x03)]; + chr = cpu.vic.charsetPtr[(td & 0x3f) * 8]; + fgcol = cpu.vic.lineMemCol[x]; + + x++; + + unsigned m = min(8, pe - p); + for (unsigned i = 0; i < m; i++) { + + int sprite = *spl++; + + if (sprite) { // Sprite: Ja + int spritenum = SPRITENUM(sprite); + if (sprite & 0x4000) { // Sprite: Hinter Text + if (chr & 0x80) { + cpu.vic.fgcollision |= spritenum; + pixel = fgcol; + } else pixel = bgcol; + } else { // Sprite: Vor Text + if (chr & 0x80) cpu.vic.fgcollision |= spritenum; + pixel = sprite & 0x0f; + } + } else { // Kein Sprite + pixel = (chr & 0x80) ? fgcol : bgcol; + } + + chr = chr << 1; + *p++ = cpu.vic.palette[pixel]; + } + } while (p < pe); + PRINTOVERFLOWS + } + else //Keine Sprites + while (p < pe - 8) { + + BADLINE(x); + + uint32_t td = cpu.vic.lineMemChr[x]; + bgcol = cpu.vic.palette[cpu.vic.R[0x21 + ((td >> 6) & 0x03)]]; + chr = cpu.vic.charsetPtr[(td & 0x3f) * 8]; + fgcol = cpu.vic.palette[cpu.vic.lineMemCol[x]]; + x++; + + *p++ = (chr & 0x80) ? fgcol : bgcol; + *p++ = (chr & 0x40) ? fgcol : bgcol; + *p++ = (chr & 0x20) ? fgcol : bgcol; + *p++ = (chr & 0x10) ? fgcol : bgcol; + *p++ = (chr & 0x08) ? fgcol : bgcol; + *p++ = (chr & 0x04) ? fgcol : bgcol; + *p++ = (chr & 0x02) ? fgcol : bgcol; + *p++ = (chr & 0x01) ? fgcol : bgcol; + + }; + while (p < pe) { + + BADLINE(x); + + uint32_t td = cpu.vic.lineMemChr[x]; + bgcol = cpu.vic.palette[cpu.vic.R[0x21 + ((td >> 6) & 0x03)]]; + chr = cpu.vic.charsetPtr[(td & 0x3f) * 8]; + fgcol = cpu.vic.palette[cpu.vic.lineMemCol[x]]; + + x++; + + *p++ = (chr & 0x80) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x40) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x20) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x10) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x08) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x04) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x02) ? fgcol : bgcol; if (p >= pe) break; + *p++ = (chr & 0x01) ? fgcol : bgcol; + + }; + PRINTOVERFLOW + while (x<40) {BADLINE(x); x++;} +} + +/*****************************************************************************************************/ +/* Ungültige Modi ************************************************************************************/ +/*****************************************************************************************************/ + +void mode5 (tpixel *p, const tpixel *pe, uint16_t *spl, const uint16_t vc) { + /* + Ungültiger Textmodus (ECM/BMM/MCM=1/0/1) + + Das gleichzeitige Setzen der ECM- und MCM-Bits wählt keinen der + "offiziellen" Grafikmodi des VIC, sondern erzeugt nur schwarze Pixel. + Nichtsdestotrotz erzeugt der Grafikdatensequenzer auch in diesem Modus + intern gültige Grafikdaten, die die Spritekollisionserkennung triggern + können. Über den Umweg der Spritekollisionen kann man die erzeugten Daten + auch auslesen (sehen kann man nichts, das Bild ist schwarz). Man kann so + allerdings nur Vordergrund- und Hintergrundpixel unterscheiden, die + Farbinformation läßt sich aus den Spritekollisionen nicht gewinnen. + + Die erzeugte Grafik entspricht der des Multicolor-Textmodus, allerdings ist + der Zeichenvorrat genau wie im ECM-Modus auf 64 Zeichen eingeschränkt. + */ + CHARSETPTR(); + + uint8_t chr, pixel; + uint16_t fgcol; + uint8_t x = 0; + + if (cpu.vic.lineHasSprites) { + + do { + + BADLINE(x); + + chr = cpu.vic.charsetPtr[(cpu.vic.lineMemChr[x] & 0x3F) * 8]; + fgcol = cpu.vic.lineMemCol[x]; + + x++; + + if ((fgcol & 0x08) == 0) { //Zeichen ist HIRES + + unsigned m = min(8, pe - p); + for (unsigned i = 0; i < m; i++) { + + int sprite = *spl; + *spl++ = 0; + + if (sprite) { // Sprite: Ja + + /* + Sprite-Prioritäten (Anzeige) + MDP = 1: Grafikhintergrund, Sprite, Vordergrund + MDP = 0: Grafikhintergrund, Vordergrund, Sprite + + Kollision: + Eine Kollision zwischen Sprites und anderen Grafikdaten wird erkannt, + sobald beim Bildaufbau ein nicht transparentes Spritepixel und ein Vordergrundpixel ausgegeben wird. + + */ + int spritenum = SPRITENUM(sprite); + pixel = sprite & 0x0f; //Hintergrundgrafik + + if (sprite & 0x4000) { // MDP = 1 + if (chr & 0x80) { //Vordergrundpixel ist gesetzt + cpu.vic.fgcollision |= spritenum; + pixel = 0; + } + } else { // MDP = 0 + if (chr & 0x80) cpu.vic.fgcollision |= spritenum; //Vordergrundpixel ist gesetzt + } + + } else { // Kein Sprite + pixel = 0; + } + + *p++ = cpu.vic.palette[pixel]; + + chr = chr << 1; + } + + } else {//Zeichen ist MULTICOLOR + + for (unsigned i = 0; i < 4; i++) { + if (p >= pe) break; + + chr = chr << 2; + + int sprite = *spl; + *spl++ = 0; + + if (sprite) { // Sprite: Ja + int spritenum = SPRITENUM(sprite); + pixel = sprite & 0x0f; //Hintergrundgrafik + if (sprite & 0x4000) { // MDP = 1 + + if (chr & 0x80) { //Vordergrundpixel ist gesetzt + cpu.vic.fgcollision |= spritenum; + pixel = 0; + } + } else { // MDP = 0 + if (chr & 0x80) cpu.vic.fgcollision |= spritenum; //Vordergrundpixel ist gesetzt + } + + } else { // Kein Sprite + pixel = 0; + + } + *p++ = cpu.vic.palette[pixel]; + if (p >= pe) break; + + sprite = *spl; + *spl++ = 0; + //Das gleiche nochmal für das nächste Pixel + if (sprite) { // Sprite: Ja + int spritenum = SPRITENUM(sprite); + pixel = sprite & 0x0f; //Hintergrundgrafik + if (sprite & 0x4000) { // MDP = 1 + if (chr & 0x80) { //Vordergrundpixel ist gesetzt + cpu.vic.fgcollision |= spritenum; + pixel = 0; + } + } else { // MDP = 0 + if (chr & 0x80) cpu.vic.fgcollision |= spritenum; //Vordergrundpixel ist gesetzt + } + } else { // Kein Sprite + pixel = 0; + } + *p++ = cpu.vic.palette[pixel]; + + } + + } + + } while (p < pe); + PRINTOVERFLOWS + + } else { //Keine Sprites + //Farbe immer schwarz + const uint16_t bgcol = palette[0]; + while (p < pe - 8) { + + BADLINE(x); + x++; + *p++ = bgcol; *p++ = bgcol; + *p++ = bgcol; *p++ = bgcol; + *p++ = bgcol; *p++ = bgcol; + *p++ = bgcol; *p++ = bgcol; + + }; + while (p < pe) { + + BADLINE(x); + x++; + *p++ = bgcol; if (p >= pe) break; *p++ = bgcol; if (p >= pe) break; + *p++ = bgcol; if (p >= pe) break; *p++ = bgcol; if (p >= pe) break; + *p++ = bgcol; if (p >= pe) break; *p++ = bgcol; if (p >= pe) break; + *p++ = bgcol; if (p >= pe) break; *p++ = bgcol; + + }; + PRINTOVERFLOW + } + while (x<40) {BADLINE(x); x++;} +} +/*****************************************************************************************************/ +void mode6 (tpixel *p, const tpixel *pe, uint16_t *spl, const uint16_t vc) { + /* + Ungültiger Bitmap-Modus 1 (ECM/BMM/MCM=1/1/0) + + Dieser Modus erzeugt nur ebenfalls nur ein schwarzes Bild, die Pixel lassen + sich allerdings auch hier mit dem Spritekollisionstrick auslesen. + + Der Aufbau der Grafik ist im Prinzip wie im Standard-Bitmap-Modus, aber die + Bits 9 und 10 der g-Adressen sind wegen dem gesetzten ECM-Bit immer Null, + entsprechend besteht auch die Grafik - grob gesagt - aus vier + "Abschnitten", die jeweils viermal wiederholt dargestellt werden. + + */ + + uint8_t chr, pixel; + uint8_t x = 0; + uint8_t * bP = cpu.vic.bitmapPtr + vc * 8 + cpu.vic.rc; + + if (cpu.vic.lineHasSprites) { + + do { + + BADLINE(x); + + chr = bP[x * 8]; + + x++; + + unsigned m = min(8, pe - p); + for (unsigned i = 0; i < m; i++) { + + int sprite = *spl; + *spl++ = 0; + + chr = chr << 1; + if (sprite) { // Sprite: Ja + /* + Sprite-Prioritäten (Anzeige) + MDP = 1: Grafikhintergrund, Sprite, Vordergrund + MDP = 0: Grafikhintergung, Vordergrund, Sprite + + Kollision: + Eine Kollision zwischen Sprites und anderen Grafikdaten wird erkannt, + sobald beim Bildaufbau ein nicht transparentes Spritepixel und ein Vordergrundpixel ausgegeben wird. + + */ + int spritenum = SPRITENUM(sprite); + pixel = sprite & 0x0f; //Hintergrundgrafik + if (sprite & 0x4000) { // MDP = 1 + if (chr & 0x80) { //Vordergrundpixel ist gesetzt + cpu.vic.fgcollision |= spritenum; + pixel = 0; + } + } else { // MDP = 0 + if (chr & 0x80) cpu.vic.fgcollision |= spritenum; //Vordergrundpixel ist gesetzt + } + + } else { // Kein Sprite + pixel = 0; + } + + *p++ = cpu.vic.palette[pixel]; + + } + + } while (p < pe); + PRINTOVERFLOWS + + } else { //Keine Sprites + //Farbe immer schwarz + const uint16_t bgcol = palette[0]; + while (p < pe - 8) { + + BADLINE(x); + x++; + *p++ = bgcol; *p++ = bgcol; + *p++ = bgcol; *p++ = bgcol; + *p++ = bgcol; *p++ = bgcol; + *p++ = bgcol; *p++ = bgcol; + + }; + while (p < pe) { + + BADLINE(x); + x++; + *p++ = bgcol; if (p >= pe) break; *p++ = bgcol; if (p >= pe) break; + *p++ = bgcol; if (p >= pe) break; *p++ = bgcol; if (p >= pe) break; + *p++ = bgcol; if (p >= pe) break; *p++ = bgcol; if (p >= pe) break; + *p++ = bgcol; if (p >= pe) break; *p++ = bgcol; + + }; + PRINTOVERFLOW + } + while (x<40) {BADLINE(x); x++;} +} +/*****************************************************************************************************/ +void mode7 (tpixel *p, const tpixel *pe, uint16_t *spl, const uint16_t vc) { + /* + Ungültiger Bitmap-Modus 2 (ECM/BMM/MCM=1/1/1) + + Der letzte ungültige Modus liefert auch ein schwarzes Bild, das sich jedoch + genauso mit Hilfe der Sprite-Grafik-Kollisionen "abtasten" läßt. + + Der Aufbau der Grafik ist im Prinzip wie im Multicolor-Bitmap-Modus, aber + die Bits 9 und 10 der g-Adressen sind wegen dem gesetzten ECM-Bit immer + Null, was sich in der Darstellung genauso wie beim ersten ungültigen + Bitmap-Modus wiederspiegelt. Die Bitkombination "01" wird wie gewohnt zum + Hintergrund gezählt. + + */ + + uint8_t chr; + uint8_t x = 0; + uint16_t pixel; + uint8_t * bP = cpu.vic.bitmapPtr + vc * 8 + cpu.vic.rc; + + if (cpu.vic.lineHasSprites) { + + do { + + BADLINE(x); + + chr = bP[x * 8]; + x++; + + for (unsigned i = 0; i < 4; i++) { + if (p >= pe) break; + + chr = chr << 2; + + int sprite = *spl; + *spl++ = 0; + + if (sprite) { // Sprite: Ja + int spritenum = SPRITENUM(sprite); + pixel = sprite & 0x0f;//Hintergrundgrafik + if (sprite & 0x4000) { // MDP = 1 + + if (chr & 0x80) { //Vordergrundpixel ist gesetzt + cpu.vic.fgcollision |= spritenum; + pixel = 0; + } + } else { // MDP = 0 + if (chr & 0x80) cpu.vic.fgcollision |= spritenum; //Vordergundpixel ist gesetzt + } + } else { // Kein Sprite + pixel = 0; + } + + *p++ = cpu.vic.palette[pixel]; + if (p >= pe) break; + + sprite = *spl; + *spl++ = 0; + + if (sprite) { // Sprite: Ja + int spritenum = SPRITENUM(sprite); + pixel = sprite & 0x0f;//Hintergrundgrafik + if (sprite & 0x4000) { // MDP = 1 + + if (chr & 0x80) { //Vordergrundpixel ist gesetzt + cpu.vic.fgcollision |= spritenum; + pixel = 0; + } + } else { // MDP = 0 + if (chr & 0x80) cpu.vic.fgcollision |= spritenum; //Vordergundpixel ist gesetzt + } + } else { // Kein Sprite + pixel = 0; + } + + *p++ = cpu.vic.palette[pixel]; + + } + + } while (p < pe); + PRINTOVERFLOWS + + } else { //Keine Sprites + + const uint16_t bgcol = palette[0]; + while (p < pe - 8) { + + BADLINE(x); + x++; + *p++ = bgcol; *p++ = bgcol; + *p++ = bgcol; *p++ = bgcol; + *p++ = bgcol; *p++ = bgcol; + *p++ = bgcol; *p++ = bgcol; + + }; + while (p < pe) { + + BADLINE(x); + x++; + *p++ = bgcol; if (p >= pe) break; *p++ = bgcol; if (p >= pe) break; + *p++ = bgcol; if (p >= pe) break; *p++ = bgcol; if (p >= pe) break; + *p++ = bgcol; if (p >= pe) break; *p++ = bgcol; if (p >= pe) break; + *p++ = bgcol; if (p >= pe) break; *p++ = bgcol; + + }; + PRINTOVERFLOW + + } + while (x<40) {BADLINE(x); x++;} +} +/*****************************************************************************************************/ +/*****************************************************************************************************/ +/*****************************************************************************************************/ + +typedef void (*modes_t)( tpixel *p, const tpixel *pe, uint16_t *spl, const uint16_t vc ); //Funktionspointer +const modes_t modes[8] = {mode0, mode1, mode2, mode3, mode4, mode5, mode6, mode7}; + + +static tpixel linebuffer[SCREEN_WIDTH]; + +void vic_do(void) { + + uint16_t vc; + uint16_t xscroll; + tpixel *pe; + tpixel *p; + uint16_t *spl; + uint8_t mode; + + /*****************************************************************************************************/ + /* Linecounter ***************************************************************************************/ + /*****************************************************************************************************/ + /* + ?PEEK(678) NTSC =0 + ?PEEK(678) PAL = 1 + */ + + if ( cpu.vic.rasterLine >= LINECNT ) { + + //reSID sound needs much time - too much to keep everything in sync and with stable refreshrate + //but it is not called very often, so most of the time, we have more time than needed. + //We can measure the time needed for a frame and calc a correction factor to speed things up. + unsigned long m = fbmicros(); + cpu.vic.neededTime = (m - cpu.vic.timeStart); + cpu.vic.timeStart = m; + cpu.vic.lineClock.setIntervalFast(LINETIMER_DEFAULT_FREQ - ((float)cpu.vic.neededTime / (float)LINECNT - LINETIMER_DEFAULT_FREQ )); + + cpu.vic.rasterLine = 0; + cpu.vic.vcbase = 0; + cpu.vic.denLatch = 0; + //if (cpu.vic.rasterLine == LINECNT) + //delay(50); + emu_DrawVsync(); + + } else cpu.vic.rasterLine++; + + int r = cpu.vic.rasterLine; + + if (r == cpu.vic.intRasterLine )//Set Rasterline-Interrupt + cpu.vic.R[0x19] |= 1 | ((cpu.vic.R[0x1a] & 1) << 7); + + /*****************************************************************************************************/ + /* Badlines ******************************************************************************************/ + /*****************************************************************************************************/ + /* + Ein Bad-Line-Zustand liegt in einem beliebigen Taktzyklus vor, wenn an der + negativen Flanke von ø0 zu Beginn des Zyklus RASTER >= $30 und RASTER <= + $f7 und die unteren drei Bits von RASTER mit YSCROLL übereinstimmen und in + einem beliebigen Zyklus von Rasterzeile $30 das DEN-Bit gesetzt war. + + (default 3) + yscroll : POKE 53265, PEEK(53265) AND 248 OR 1:POKE 1024,0 + yscroll : poke 53265, peek(53265) and 248 or 1 + + DEN : POKE 53265, PEEK(53265) AND 224 Bildschirm aus + + Die einzige Verwendung von YSCROLL ist der Vergleich mit r in der Badline + + */ + + if (r == 0x30 ) cpu.vic.denLatch |= cpu.vic.DEN; + + /* 3.7.2 + 2. In der ersten Phase von Zyklus 14 jeder Zeile wird VC mit VCBASE geladen + (VCBASE->VC) und VMLI gelöscht. Wenn zu diesem Zeitpunkt ein + Bad-Line-Zustand vorliegt, wird zusätzlich RC auf Null gesetzt. + */ + + vc = cpu.vic.vcbase; + + cpu.vic.badline = (cpu.vic.denLatch && (r >= 0x30) && (r <= 0xf7) && ( (r & 0x07) == cpu.vic.YSCROLL)); + + if (cpu.vic.badline) { + cpu.vic.idle = 0; + cpu.vic.rc = 0; + } + + /*****************************************************************************************************/ + /*****************************************************************************************************/ +#if 1 + { + int t = MAXCYCLESSPRITES3_7 - cpu.vic.spriteCycles3_7; + if (t > 0) cpu_clock(t); + if (cpu.vic.spriteCycles3_7 > 0) cia_clockt(cpu.vic.spriteCycles3_7); + } +#endif + + //HBlank: + cpu_clock(10); + +#ifdef ADDITIONALCYCLES + cpu_clock(ADDITIONALCYCLES); +#endif + + //cpu.vic.videomatrix = cpu.vic.bank + (unsigned)(cpu.vic.R[0x18] & 0xf0) * 64; + + /* Rand oben /unten **********************************************************************************/ + /* + RSEL Höhe des Anzeigefensters Erste Zeile Letzte Zeile + 0 24 Textzeilen/192 Pixel 55 ($37) 246 ($f6) = 192 sichtbare Zeilen, der Rest ist Rand oder unsichtbar + 1 25 Textzeilen/200 Pixel 51 ($33) 250 ($fa) = 200 sichtbare Zeilen, der Rest ist Rand oder unsichtbar + */ + + if (cpu.vic.borderFlag) { + int firstLine = (cpu.vic.RSEL) ? 0x33 : 0x37; + if ((cpu.vic.DEN) && (r == firstLine)) cpu.vic.borderFlag = false; + } else { + int lastLine = (cpu.vic.RSEL) ? 0xfb : 0xf7; + if (r == lastLine) cpu.vic.borderFlag = true; + } + + if (r < FIRSTDISPLAYLINE || r > LASTDISPLAYLINE ) { + if (r == 0) + cpu_clock(CYCLESPERRASTERLINE - 10 - 2 - MAXCYCLESSPRITES - 1); // (minus hblank l + r) + else + cpu_clock(CYCLESPERRASTERLINE - 10 - 2 - MAXCYCLESSPRITES ); + goto noDisplayIncRC; + } + + //max_x = (!cpu.vic.CSEL) ? 40:38; + //p = SCREENMEM + (r - FIRSTDISPLAYLINE) * LINE_MEM_WIDTH; + p = &linebuffer[0]; //tft.getLineBuffer((r - FIRSTDISPLAYLINE)); + pe = p + SCREEN_WIDTH; + //Left Screenborder: Cycle 10 + spl = &cpu.vic.spriteLine[24]; + cpu_clock(6); + + + if (cpu.vic.borderFlag) { + cpu_clock(5); + fastFillLineNoSprites(p, pe + BORDER_RIGHT, cpu.vic.colors[0]); + goto noDisplayIncRC ; + } + + + /*****************************************************************************************************/ + /* DISPLAY *******************************************************************************************/ + /*****************************************************************************************************/ + + + //max_x = (!cpu.vic.CSEL) ? 40:38; + //X-Scrolling: + + xscroll = cpu.vic.XSCROLL; + + if (xscroll > 0) { + uint16_t col = cpu.vic.colors[0]; + + if (!cpu.vic.CSEL) { + cpu_clock(1); + uint16_t sprite; + for (int i = 0; i < xscroll; i++) { + SPRITEORFIXEDCOLOR(); + } + } else { + spl += xscroll; + for (unsigned i = 0; i < xscroll; i++) { + *p++ = col; + } + + } + } + + /*****************************************************************************************************/ + /*****************************************************************************************************/ + /*****************************************************************************************************/ + + + cpu.vic.fgcollision = 0; + mode = (cpu.vic.ECM << 2) | (cpu.vic.BMM << 1) | cpu.vic.MCM; + + if ( !cpu.vic.idle) { + +#if 0 + static uint8_t omode = 99; + if (mode != omode) { + Serial.print("Graphicsmode:"); + Serial.println(mode); + omode = mode; + } +#endif + + modes[mode](p, pe, spl, vc); + vc = (vc + 40) & 0x3ff; + + } else { + /* +3.7.3.9. Idle-Zustand +--------------------- + +Im Idle-Zustand liest der VIC die Grafikdaten von Adresse $3fff (bzw. $39ff +bei gesetztem ECM-Bit) und stellt sie im ausgewählten Grafikmodus dar, +wobei aber die Videomatrix-Daten (normalerweise in den c-Zugriffen gelesen) +nur aus "0"-Bits bestehen. Es wird also immer wiederholt das Byte an +Adresse $3fff/$39ff ausgegeben. + +c-Zugriff + + Es werden keine c-Zugriffe ausgeführt. + + Daten + + +----+----+----+----+----+----+----+----+----+----+----+----+ + | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + +----+----+----+----+----+----+----+----+----+----+----+----+ + | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + +----+----+----+----+----+----+----+----+----+----+----+----+ + +g-Zugriff + + Adressen (ECM=0) + + +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ + | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ + | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | + +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ + + Adressen (ECM=1) + + +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ + | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ + | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | + +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ + + Daten + + +----+----+----+----+----+----+----+----+ + | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + +----+----+----+----+----+----+----+----+ + | 8 Pixel (1 Bit/Pixel) | Standard-Textmodus/ + | | Multicolor-Textmodus/ + | "0": Hintergrundfarbe 0 ($d021) | ECM-Textmodus + | "1": Schwarz | + +---------------------------------------+ + | 8 Pixel (1 Bit/Pixel) | Standard-Bitmap-Modus/ + | | Ungültiger Textmodus/ + | "0": Schwarz (Hintergrund) | Ungültiger Bitmap-Modus 1 + | "1": Schwarz (Vordergrund) | + +---------------------------------------+ + | 4 Pixel (2 Bit/Pixel) | Multicolor-Bitmap-Modus + | | + | "00": Hintergrundfarbe 0 ($d021) | + | "01": Schwarz (Hintergrund) | + | "10": Schwarz (Vordergrund) | + | "11": Schwarz (Vordergrund) | + +---------------------------------------+ + | 4 Pixel (2 Bit/Pixel) | Ungültiger Bitmap-Modus 2 + | | + | "00": Schwarz (Hintergrund) | + | "01": Schwarz (Hintergrund) | + | "10": Schwarz (Vordergrund) | + | "11": Schwarz (Vordergrund) | + +---------------------------------------+ +*/ + //Modes 1 & 3 + if (mode == 1 || mode == 3) { + modes[mode](p, pe, spl, vc); + } else {//TODO: all other modes + fastFillLine(p, pe, cpu.vic.palette[0], spl); + } + } + + /* + Bei den MBC- und MMC-Interrupts löst jeweils nur die erste Kollision einen + Interrupt aus (d.h. wenn die Kollisionsregister $d01e bzw. $d01f vor der + Kollision den Inhalt Null hatten). Um nach einer Kollision weitere + Interrupts auszulösen, muß das betreffende Register erst durch Auslesen + gelöscht werden. + */ + + if (cpu.vic.fgcollision) { + if (cpu.vic.MD == 0) { + cpu.vic.R[0x19] |= 2 | ( (cpu.vic.R[0x1a] & 2) << 6); + } + cpu.vic.MD |= cpu.vic.fgcollision; + } + + /*****************************************************************************************************/ + + if (!cpu.vic.CSEL) { + cpu_clock(1); + uint16_t col = cpu.vic.colors[0]; + //p = &screen[r - FIRSTDISPLAYLINE][0]; + //p = SCREENMEM + (r - FIRSTDISPLAYLINE) * LINE_MEM_WIDTH + BORDER_LEFT; + p = &linebuffer[0]; // tft.getLineBuffer((r - FIRSTDISPLAYLINE)); +#if 0 + // Sprites im Rand + uint16_t sprite; + uint16_t * spl; + spl = &cpu.vic.spriteLine[24 + xscroll]; + + SPRITEORFIXEDCOLOR() + SPRITEORFIXEDCOLOR() + SPRITEORFIXEDCOLOR() + SPRITEORFIXEDCOLOR() + SPRITEORFIXEDCOLOR() + SPRITEORFIXEDCOLOR() + SPRITEORFIXEDCOLOR() //7 +#else + //keine Sprites im Rand + *p++ = col; *p++ = col; *p++ = col; *p++ = col; + *p++ = col; *p++ = col; *p = col; + +#endif + + //Rand rechts: + //p = &screen[r - FIRSTDISPLAYLINE][SCREEN_WIDTH - 9]; + //p = SCREENMEM + (r - FIRSTDISPLAYLINE) * LINE_MEM_WIDTH + SCREEN_WIDTH - 9 + BORDER_LEFT; + p = &linebuffer[SCREEN_WIDTH - 9 + BORDER_LEFT]; //tft.getLineBuffer((r - FIRSTDISPLAYLINE)) + SCREEN_WIDTH - 9 + BORDER_LEFT; + pe = p + 9; + +#if 0 + // Sprites im Rand + spl = &cpu.vic.spriteLine[24 + SCREEN_WIDTH - 9 + xscroll]; + while (p < pe) { + SPRITEORFIXEDCOLOR(); + } +#else + //keine Sprites im Rand + //while (p < pe) { + // *p++ = col; + //} +#endif + + + + } + + emu_DrawLine8(&linebuffer[0], SCREEN_WIDTH, SCREEN_HEIGHT, (r - FIRSTDISPLAYLINE)); + + +//Rechter Rand nach CSEL, im Textbereich +cpu_clock(5); + + +noDisplayIncRC: + /* 3.7.2 + 5. In der ersten Phase von Zyklus 58 wird geprüft, ob RC=7 ist. Wenn ja, + geht die Videologik in den Idle-Zustand und VCBASE wird mit VC geladen + (VC->VCBASE). Ist die Videologik danach im Display-Zustand (liegt ein + Bad-Line-Zustand vor, ist dies immer der Fall), wird RC erhöht. + */ + + if (cpu.vic.rc == 7) { + cpu.vic.idle = 1; + cpu.vic.vcbase = vc; + } + //Ist dies richtig ?? + if ((!cpu.vic.idle) || (cpu.vic.denLatch && (r >= 0x30) && (r <= 0xf7) && ( (r & 0x07) == cpu.vic.YSCROLL))) { + cpu.vic.rc = (cpu.vic.rc + 1) & 0x07; + } + + + /*****************************************************************************************************/ + /* Sprites *******************************************************************************************/ + /*****************************************************************************************************/ + + cpu.vic.spriteCycles0_2 = 0; + cpu.vic.spriteCycles3_7 = 0; + + if (cpu.vic.lineHasSprites) { + cpu.vic.lineHasSprites = 0; + memset(cpu.vic.spriteLine, 0, sizeof(cpu.vic.spriteLine) ); + } + + uint32_t spriteYCheck = cpu.vic.R[0x15]; //Sprite enabled Register + + if (spriteYCheck) { + + unsigned short R17 = cpu.vic.R[0x17]; //Sprite-y-expansion + unsigned char collision = 0; + short lastSpriteNum = 0; + + for (unsigned short i = 0; i < 8; i++) { + if (!spriteYCheck) break; + + unsigned b = 1 << i; + + if (spriteYCheck & b ) { + spriteYCheck &= ~b; + short y = cpu.vic.R[i * 2 + 1]; + + if ( (r >= y ) && //y-Position > Sprite-y ? + (((r < y + 21) && (~R17 & b )) || // ohne y-expansion + ((r < y + 2 * 21 ) && (R17 & b ))) ) //mit y-expansion + { + + //Sprite Cycles + if (i < 3) { + if (!lastSpriteNum) cpu.vic.spriteCycles0_2 += 1; + cpu.vic.spriteCycles0_2 += 2; + } else { + if (!lastSpriteNum) cpu.vic.spriteCycles3_7 += 1; + cpu.vic.spriteCycles3_7 += 2; + } + lastSpriteNum = i; + //Sprite Cycles END + + + if (r < FIRSTDISPLAYLINE || r > LASTDISPLAYLINE ) continue; + + uint16_t x = (((cpu.vic.R[0x10] >> i) & 1) << 8) | cpu.vic.R[i * 2]; + if (x >= SPRITE_MAX_X) continue; + + unsigned short lineOfSprite = r - y; + if (R17 & b) lineOfSprite = lineOfSprite / 2; // Y-Expansion + unsigned short spriteadr = cpu.vic.bank | cpu.RAM[cpu.vic.videomatrix + (1024 - 8) + i] << 6 | (lineOfSprite * 3); + unsigned spriteData = ((unsigned)cpu.RAM[ spriteadr ] << 16) | ((unsigned)cpu.RAM[ spriteadr + 1 ] << 8) | ((unsigned)cpu.RAM[ spriteadr + 2 ]); + + if (!spriteData) continue; + cpu.vic.lineHasSprites = 1; + + uint16_t * slp = &cpu.vic.spriteLine[x]; //Sprite-Line-Pointer + unsigned short upperByte = ( 0x80 | ( (cpu.vic.MDP & b) ? 0x40 : 0 ) | i ) << 8; //Bit7 = Sprite "da", Bit 6 = Sprite-Priorität vor Grafik/Text, Bits 3..0 = Spritenummer + + //Sprite in Spritezeile schreiben: + if ((cpu.vic.MMC & b) == 0) { // NO MULTICOLOR + + uint16_t color = upperByte | cpu.vic.R[0x27 + i]; + + if ((cpu.vic.MXE & b) == 0) { // NO MULTICOLOR, NO SPRITE-EXPANSION + + for (unsigned cnt = 0; (spriteData > 0) && (cnt < 24); cnt++) { + int c = (spriteData >> 23) & 0x01; + spriteData = (spriteData << 1); + + if (c) { + if (*slp == 0) *slp = color; + else collision |= b | (1 << ((*slp >> 8) & 0x07)); + } + slp++; + + } + + } else { // NO MULTICOLOR, SPRITE-EXPANSION + + for (unsigned cnt = 0; (spriteData > 0) && (cnt < 24); cnt++) { + int c = (spriteData >> 23) & 0x01; + spriteData = (spriteData << 1); + //So wie oben, aber zwei gleiche Pixel + + if (c) { + if (*slp == 0) *slp = color; + else collision |= b | (1 << ((*slp >> 8) & 0x07)); + slp++; + if (*slp == 0) *slp = color; + else collision |= b | (1 << ((*slp >> 8) & 0x07)); + slp++; + } else { + slp += 2; + } + + } + } + + + + } else { // MULTICOLOR + /* Im Mehrfarbenmodus (Multicolor-Modus) bekommen alle Sprites zwei zusätzliche gemeinsame Farben. + Die horizontale Auflösung wird von 24 auf 12 halbiert, da bei der Sprite-Definition jeweils zwei Bits zusammengefasst werden. + */ + uint16_t colors[4]; + //colors[0] = 1; //dummy, color 0 is transparent + colors[1] = upperByte | cpu.vic.R[0x25]; + colors[2] = upperByte | cpu.vic.R[0x27 + i]; + colors[3] = upperByte | cpu.vic.R[0x26]; + + if ((cpu.vic.MXE & b) == 0) { // MULTICOLOR, NO SPRITE-EXPANSION + for (unsigned cnt = 0; (spriteData > 0) && (cnt < 24); cnt++) { + int c = (spriteData >> 22) & 0x03; + spriteData = (spriteData << 2); + + if (c) { + if (*slp == 0) *slp = colors[c]; + else collision |= b | (1 << ((*slp >> 8) & 0x07)); + slp++; + if (*slp == 0) *slp = colors[c]; + else collision |= b | (1 << ((*slp >> 8) & 0x07)); + slp++; + } else { + slp += 2; + } + + } + + } else { // MULTICOLOR, SPRITE-EXPANSION + for (unsigned cnt = 0; (spriteData > 0) && (cnt < 24); cnt++) { + int c = (spriteData >> 22) & 0x03; + spriteData = (spriteData << 2); + + //So wie oben, aber vier gleiche Pixel + if (c) { + if (*slp == 0) *slp = colors[c]; + else collision |= b | (1 << ((*slp >> 8) & 0x07)); + slp++; + if (*slp == 0) *slp = colors[c]; + else collision |= b | (1 << ((*slp >> 8) & 0x07)); + slp++; + if (*slp == 0) *slp = colors[c]; + else collision |= b | (1 << ((*slp >> 8) & 0x07)); + slp++; + if (*slp == 0) *slp = colors[c]; + else collision |= b | (1 << ((*slp >> 8) & 0x07)); + slp++; + } else { + slp += 4; + } + + } + + } + } + + } + else lastSpriteNum = 0; + } + + } + + if (collision) { + if (cpu.vic.MM == 0) { + cpu.vic.R[0x19] |= 4 | ((cpu.vic.R[0x1a] & 4) << 5 ); + } + cpu.vic.MM |= collision; + } + + } + /*****************************************************************************************************/ +#if 0 + { + int t = MAXCYCLESSPRITES0_2 - cpu.vic.spriteCycles0_2; + if (t > 0) cpu_clock(t); + if (cpu.vic.spriteCycles0_2 > 0) cia_clockt(cpu.vic.spriteCycles0_2); + } +#endif + + //HBlank: +#if PAL + cpu_clock(2); +#else + cpu_clock(3); +#endif + + +#if 0 + if (cpu.vic.idle) { + Serial.print("Cycles line "); + Serial.print(r); + Serial.print(": "); + Serial.println(cpu.lineCyclesAbs); + } +#endif + + + return; +} + +/*****************************************************************************************************/ +/*****************************************************************************************************/ +/*****************************************************************************************************/ +void fastFillLineNoSprites(tpixel * p, const tpixel * pe, const uint16_t col) { + int i = 0; + + while (p < pe) { + *p++ = col; + i = (i + 1) & 0x07; + if (!i) CYCLES(1); + } + + +} + +void fastFillLine(tpixel * p, const tpixel * pe, const uint16_t col, uint16_t * spl) { + if (spl != NULL && cpu.vic.lineHasSprites) { + int i = 0; + uint16_t sprite; + while ( p < pe ) { + SPRITEORFIXEDCOLOR(); + i = (i + 1) & 0x07; + if (!i) CYCLES(1); + }; + + } else { + + fastFillLineNoSprites(p, pe, col); + + } +} + +/*****************************************************************************************************/ +/*****************************************************************************************************/ +/*****************************************************************************************************/ + +void vic_displaySimpleModeScreen(void) { +} + + +void vic_do_simple(void) { + uint16_t vc; + int cycles = 0; + +if ( cpu.vic.rasterLine >= LINECNT ) { + + //reSID sound needs much time - too much to keep everything in sync and with stable refreshrate + //but it is not called very often, so most of the time, we have more time than needed. + //We can measure the time needed for a frame and calc a correction factor to speed things up. + unsigned long m = fbmicros(); + cpu.vic.neededTime = (m - cpu.vic.timeStart); + cpu.vic.timeStart = m; + cpu.vic.lineClock.setIntervalFast(LINETIMER_DEFAULT_FREQ - ((float)cpu.vic.neededTime / (float)LINECNT - LINETIMER_DEFAULT_FREQ )); + + cpu.vic.rasterLine = 0; + cpu.vic.vcbase = 0; + cpu.vic.denLatch = 0; + + } else { + cpu.vic.rasterLine++; + cpu_clock(1); + cycles += 1; + } + + int r = cpu.vic.rasterLine; + + if (r == cpu.vic.intRasterLine )//Set Rasterline-Interrupt + cpu.vic.R[0x19] |= 1 | ((cpu.vic.R[0x1a] & 1) << 7); + + cpu_clock(9); + cycles += 9; + + if (r == 0x30 ) cpu.vic.denLatch |= cpu.vic.DEN; + + vc = cpu.vic.vcbase; + + cpu.vic.badline = (cpu.vic.denLatch && (r >= 0x30) && (r <= 0xf7) && ( (r & 0x07) == cpu.vic.YSCROLL)); + + if (cpu.vic.badline) { + cpu.vic.idle = 0; + cpu.vic.rc = 0; + } + + + /* Rand oben /unten **********************************************************************************/ + /* + RSEL Höhe des Anzeigefensters Erste Zeile Letzte Zeile + 0 24 Textzeilen/192 Pixel 55 ($37) 246 ($f6) = 192 sichtbare Zeilen, der Rest ist Rand oder unsichtbar + 1 25 Textzeilen/200 Pixel 51 ($33) 250 ($fa) = 200 sichtbare Zeilen, der Rest ist Rand oder unsichtbar + */ + + if (cpu.vic.borderFlag) { + int firstLine = (cpu.vic.RSEL) ? 0x33 : 0x37; + if ((cpu.vic.DEN) && (r == firstLine)) cpu.vic.borderFlag = false; + } else { + int lastLine = (cpu.vic.RSEL) ? 0xfb : 0xf7; + if (r == lastLine) cpu.vic.borderFlag = true; + } + + + //left screenborder + cpu_clock(6); + cycles += 6; + + CYCLES(40); + cycles += 40; + vc += 40; + + //right screenborder + cpu_clock(4); //1 + cycles += 4; + + + if (cpu.vic.rc == 7) { + cpu.vic.idle = 1; + cpu.vic.vcbase = vc; + } + //Ist dies richtig ?? + if ((!cpu.vic.idle) || (cpu.vic.denLatch && (r >= 0x30) && (r <= 0xf7) && ( (r & 0x07) == cpu.vic.YSCROLL))) { + cpu.vic.rc = (cpu.vic.rc + 1) & 0x07; + } + + cpu_clock(3); //1 + cycles += 3; + + int cyclesleft = CYCLESPERRASTERLINE - cycles; + if (cyclesleft) cpu_clock(cyclesleft); + +} + + +/*****************************************************************************************************/ +/*****************************************************************************************************/ +/*****************************************************************************************************/ + +void installPalette(void) { + memcpy(cpu.vic.palette, (void*)palette, sizeof(cpu.vic.palette)); +} + + +/*****************************************************************************************************/ +/*****************************************************************************************************/ +/*****************************************************************************************************/ + +void vic_adrchange(void) { + uint8_t r18 = cpu.vic.R[0x18]; + cpu.vic.videomatrix = cpu.vic.bank + (unsigned)(r18 & 0xf0) * 64; + + unsigned charsetAddr = r18 & 0x0e; + if ((cpu.vic.bank & 0x4000) == 0) { + if (charsetAddr == 0x04) cpu.vic.charsetPtrBase = ((uint8_t *)&rom_characters); + else if (charsetAddr == 0x06) cpu.vic.charsetPtrBase = ((uint8_t *)&rom_characters) + 0x800; + else + cpu.vic.charsetPtrBase = &cpu.RAM[charsetAddr * 0x400 + cpu.vic.bank] ; + } else + cpu.vic.charsetPtrBase = &cpu.RAM[charsetAddr * 0x400 + cpu.vic.bank]; + + cpu.vic.bitmapPtr = (uint8_t*) &cpu.RAM[cpu.vic.bank | ((r18 & 0x08) * 0x400)]; + if ((cpu.vic.R[0x11] & 0x60) == 0x60) cpu.vic.bitmapPtr = (uint8_t*)((uintptr_t)cpu.vic.bitmapPtr & 0xf9ff); + +} +/*****************************************************************************************************/ +void vic_write(uint32_t address, uint8_t value) { + + address &= 0x3F; + + switch (address) { + case 0x11 : + cpu.vic.R[address] = value; + cpu.vic.intRasterLine = (cpu.vic.intRasterLine & 0xff) | ((((uint16_t) value) << 1) & 0x100); + if (cpu.vic.rasterLine == 0x30 ) cpu.vic.denLatch |= value & 0x10; + + cpu.vic.badline = (cpu.vic.denLatch && (cpu.vic.rasterLine >= 0x30) && (cpu.vic.rasterLine <= 0xf7) && ( (cpu.vic.rasterLine & 0x07) == (value & 0x07))); + + if (cpu.vic.badline) { + cpu.vic.idle = 0; + } + + vic_adrchange(); + + break; + case 0x12 : + cpu.vic.intRasterLine = (cpu.vic.intRasterLine & 0x100) | value; + cpu.vic.R[address] = value; + break; + case 0x18 : + cpu.vic.R[address] = value; + vic_adrchange(); + break; + case 0x19 : //IRQs + cpu.vic.R[0x19] &= (~value & 0x0f); + break; + case 0x1A : //IRQ Mask + cpu.vic.R[address] = value & 0x0f; + break; + case 0x1e: + case 0x1f: + cpu.vic.R[address] = 0; + break; + case 0x20 ... 0x2E: + cpu.vic.R[address] = value & 0x0f; + cpu.vic.colors[address - 0x20] = cpu.vic.palette[value & 0x0f]; + break; + case 0x2F ... 0x3F: + break; + default : + cpu.vic.R[address] = value; + break; + } + + //#if DEBUGVIC +#if 0 + Serial.print("VIC "); + Serial.print(address, HEX); + Serial.print("="); + Serial.println(value, HEX); + //logAddr(address, value, 1); +#endif +} + +/*****************************************************************************************************/ +/*****************************************************************************************************/ +/*****************************************************************************************************/ + +uint8_t vic_read(uint32_t address) { + uint8_t ret; + + address &= 0x3F; + switch (address) { + + case 0x11: + ret = (cpu.vic.R[address] & 0x7F) | ((cpu.vic.rasterLine & 0x100) >> 1); + break; + case 0x12: + ret = cpu.vic.rasterLine; + break; + case 0x16: + ret = cpu.vic.R[address] | 0xC0; + break; + case 0x18: + ret = cpu.vic.R[address] | 0x01; + break; + case 0x19: + ret = cpu.vic.R[address] | 0x70; + break; + case 0x1a: + ret = cpu.vic.R[address] | 0xF0; + break; + case 0x1e: + case 0x1f: + ret = cpu.vic.R[address]; + cpu.vic.R[address] = 0; + break; + case 0x20 ... 0x2E: + ret = cpu.vic.R[address] | 0xF0; + break; + case 0x2F ... 0x3F: + ret = 0xFF; + break; + default: + ret = cpu.vic.R[address]; + break; + } + +#if DEBUGVIC + Serial.print("VIC "); + logAddr(address, ret, 0); +#endif + return ret; +} + +/*****************************************************************************************************/ +/*****************************************************************************************************/ +/*****************************************************************************************************/ + +void resetVic(void) { + enableCycleCounter(); + + cpu.vic.intRasterLine = 0; + cpu.vic.rasterLine = 0; + cpu.vic.lineHasSprites = 0; + memset(&cpu.RAM[0x400], 0, 1000); + memset(&cpu.vic, 0, sizeof(cpu.vic)); + + + + installPalette(); + + //http://dustlayer.com/vic-ii/2013/4/22/when-visibility-matters + cpu.vic.R[0x11] = 0x9B; + cpu.vic.R[0x16] = 0x08; + cpu.vic.R[0x18] = 0x14; + cpu.vic.R[0x19] = 0x0f; + + for (unsigned i = 0; i < sizeof(cpu.vic.COLORRAM); i++) + cpu.vic.COLORRAM[i] = (rand() & 0x0F); + + cpu.RAM[0x39FF] = 0x0; + cpu.RAM[0x3FFF] = 0x0; + cpu.RAM[0x39FF + 16384] = 0x0; + cpu.RAM[0x3FFF + 16384] = 0x0; + cpu.RAM[0x39FF + 32768] = 0x0; + cpu.RAM[0x3FFF + 32768] = 0x0; + cpu.RAM[0x39FF + 49152] = 0x0; + cpu.RAM[0x3FFF + 49152] = 0x0; + + vic_adrchange(); +} + + +/* + ?PEEK(678) NTSC =0 + ?PEEK(678) PAL = 1 + PRINT TIME$ +*/ +/* + Raster- Takt- sichtb. sichtbare + VIC-II System zeilen zyklen Zeilen Pixel/Zeile + ------------------------------------------------------- + 6569 PAL 312 63 284 403 + 6567R8 NTSC 263 65 235 418 + 6567R56A NTSC 262 64 234 411 +*/ diff --git a/MCUME_pico/pico64/vic.h b/MCUME_pico/pico64/vic.h new file mode 100755 index 0000000..b1b03ba --- /dev/null +++ b/MCUME_pico/pico64/vic.h @@ -0,0 +1,144 @@ +/* + Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +#ifndef Teensy64_vic_h_ +#define Teensy64_vic_h_ + +#include "Teensy64.h" +#include "IntervalTimer.h" + + + +#define SPRITE_MAX_X (320 + 24) + +/* for later use +struct tsprite { + uint8_t MC; //Mob Data Counter + uint8_t MCBase; //Mob Data Counter Base + uint8_t MobYexpand; //Y-Epansion FlipFlop +}; +*/ + +struct tvic { + uint32_t timeStart, neededTime; + int intRasterLine; //Interruptsetting + int rasterLine; + uint16_t bank; + uint16_t vcbase; + uint8_t rc; + + uint8_t borderFlag; //Top-Bottom border flag + uint8_t borderFlagH; //Left-Right border flag + uint8_t idle; + uint8_t denLatch; + uint8_t badline; + uint8_t BAsignal; + uint8_t lineHasSprites; + int8_t spriteCycles0_2; + int8_t spriteCycles3_7; + int fgcollision; + + uint8_t * charsetPtrBase; + uint8_t * charsetPtr; + uint8_t * bitmapPtr; + uint16_t videomatrix; + + uint16_t colors[15]; // translated ([palette]) colors + uint16_t palette[16]; + + MyIntervalTimer lineClock; + + union { + uint8_t R[0x40]; + struct { + uint8_t M0X, M0Y, M1X, M1Y, M2X, M2Y, M3X, M3Y, M4X, M4Y, M5X, M5Y, M6X, M6Y, M7X, M7Y; + uint8_t MX8; // Sprite-X Bit 8 $D010 + uint8_t YSCROLL: 3, RSEL: 1, DEN: 1, BMM: 1, ECM: 1, RST8: 1; // $D011 + uint8_t RASTER; // Rasterline $D012 + uint8_t LPX; // Lightpen X $D013 + uint8_t LPY; // Lightpen Y $D014 + uint8_t ME; // Sprite Enable $D015 + uint8_t XSCROLL: 3, CSEL: 1, MCM: 1, RES: 1, : 2; // $D016 + uint8_t MYE; // Sprite Y-Expansion $D017 + uint8_t : 1, CB: 3, VM: 4; // $D018 + uint8_t IRST: 1, IMBC: 1, IMMC: 1, ILP: 1, : 3, IRQ: 1; // $D019 + uint8_t ERST: 1, EMBC: 1, EMMC: 1, ELP: 1, : 4; // $D01A + uint8_t MDP; // Sprite-Daten-Priority $D01B + uint8_t MMC; // Sprite Multicolor $D01C + uint8_t MXE; // Sprite X-Expansion $D01D + uint8_t MM; // Sprite-Sprite collision $D01E + uint8_t MD; // Sprite-Data collision $D01F + uint8_t EC: 4, : 4; // Bordercolor $D020 + uint8_t B0C: 4, : 4; // Backgroundcolor 0 $D021 + uint8_t B1C: 4, : 4; // Backgroundcolor 1 $D022 + uint8_t B2C: 4, : 4; // Backgroundcolor 2 $D023 + uint8_t B3C: 4, : 4; // Backgroundcolor 3 $D024 + uint8_t MM0: 4, : 4; // Sprite Multicolor 0 $D025 + uint8_t MM1: 4, : 4; // Sprite Multicolor 1 $D026 + uint8_t M0C: 4, : 4; // Spritecolor 0 $D027 + uint8_t M1C: 4, : 4; // Spritecolor 1 $D028 + uint8_t M2C: 4, : 4; // Spritecolor 2 $D029 + uint8_t M3C: 4, : 4; // Spritecolor 3 $D02A + uint8_t M4C: 4, : 4; // Spritecolor 4 $D02B + uint8_t M5C: 4, : 4; // Spritecolor 5 $D02C + uint8_t M6C: 4, : 4; // Spritecolor 6 $D02D + uint8_t M7C: 4, : 4; // Spritecolor 7 $D02E + }; + }; + + //tsprite spriteInfo[8];//todo + uint16_t spriteLine[SPRITE_MAX_X]; + + uint8_t lineMemChr[40]; + uint8_t lineMemCol[40]; + uint8_t COLORRAM[1024]; + +}; + +void vic_do(void); +void vic_do_simple(void); +void vic_displaySimpleModeScreen(void); + +void vic_write(uint32_t address, uint8_t value) ; +uint8_t vic_read(uint32_t address); + +void vic_colorwrite(uint32_t address, uint8_t value); +uint8_t vic_colorread(uint32_t address); + +void vic_adrchange(void); + +void resetVic(void); + +#endif diff --git a/MCUME_pico/pico64/vic_palette.h b/MCUME_pico/pico64/vic_palette.h new file mode 100755 index 0000000..bc7080d --- /dev/null +++ b/MCUME_pico/pico64/vic_palette.h @@ -0,0 +1,112 @@ +/* + Copyright Frank Bösing, 2017 + + This file is part of Teensy64. + + Teensy64 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 3 of the License, or + (at your option) any later version. + + Teensy64 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 Teensy64. If not, see . + + Diese Datei ist Teil von Teensy64. + + Teensy64 ist Freie Software: Sie können es unter den Bedingungen + der GNU General Public License, wie von der Free Software Foundation, + Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren + veröffentlichten Version, weiterverbreiten und/oder modifizieren. + + Teensy64 wird in der Hoffnung, dass es nützlich sein wird, aber + OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite + Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. + Siehe die GNU General Public License für weitere Details. + + Sie sollten eine Kopie der GNU General Public License zusammen mit diesem + Programm erhalten haben. Wenn nicht, siehe . + +*/ + +/* choose your "display"-type */ + +#if 1 // color display (default) + +// MACROS moved to vic implementations + +#elif 0 // B&W TV for real retro feeling. Looks great (ILI 9341 only) +#define PALETTE(r,g,b) ( ((((int)( 0.299f * r + 0.587f * g + 0.114f * b )) & 0xF8) << 8 ) | \ + ( (((int) ( 0.299f * r + 0.587f * g + 0.114f * b )) & 0xFC) << 3 ) | \ + ( (((int) ( 0.299f * r + 0.587f * g + 0.114f * b )) & 0xFF) >> 3 )) + + +#elif 0 // green display (ILI 9341 only) +#define PALETTE(r,g,b) ( ( 0 ) | \ + ( (((int) ( 0.299f * r + 0.587f * g + 0.114f * b )) & 0xFC) << 3 ) | \ + ( 0 )) +// TODO: amber display +#endif + + + +/* chose one of these palettes: + VGA is 256 colors only (rrrgggbb) , subtle differences might not be visible +*/ + +#if 1 // "Deekay" (default) +static const uint16_t palette[16] = { + PALETTE(0x00,0x00,0x00), PALETTE(0xff,0xff,0xff), PALETTE(0x88,0x20,0x00), PALETTE(0x68,0xd0,0xa8), // black, white, red, cyan, + PALETTE(0xa8,0x38,0xa0), PALETTE(0x50,0xb8,0x18), PALETTE(0x18,0x10,0x90), PALETTE(0xf0,0xe8,0x58), // purple, green, blue, yellow + PALETTE(0xa0,0x48,0x00), PALETTE(0x47,0x2b,0x1b), PALETTE(0xc8,0x78,0x70), PALETTE(0x48,0x48,0x48), // orange, brown, lightred, grey1, + PALETTE(0x80,0x80,0x80), PALETTE(0x98,0xff,0x98), PALETTE(0x50,0x90,0xd0), PALETTE(0xb8,0xb8,0xb8) // grey2, lightgreen, lightblue, grey3 +}; + +#elif 0 // VICE vice.vpl +static const uint16_t palette[16] = { + PALETTE(0x00,0x00,0x00), PALETTE(0xFD,0xFE,0xFC), PALETTE(0xBE,0x1a,0x24), PALETTE(0x30,0xe6,0xc6), // black, white, red, cyan, + PALETTE(0xb4,0x1a,0xe2), PALETTE(0x1f,0xd2,0x1e), PALETTE(0x21,0x1b,0xae), PALETTE(0xdf,0xf6,0x0a), // purple, green, blue, yellow + PALETTE(0xb8,0x41,0x04), PALETTE(0x6a,0x33,0x04), PALETTE(0xfe,0x4a,0x57), PALETTE(0x42,0x45,0x40), // orange, brown, lightred, grey1, + PALETTE(0x70,0x74,0x6f), PALETTE(0x59,0xfe,0x59), PALETTE(0x5f,0x53,0xfe), PALETTE(0xa4,0xa7,0xa2) // grey2, lightgreen, lightblue, grey3 +}; + + +#elif 0 // "PEPTO" http://www.pepto.de/projects/colorvic/2001/ +static const uint16_t palette[16] = { + 0x0000, 0xFFFF, 0x69A5, 0x7536, 0x69F0, 0x5C68, 0x314F, 0xBE2D,// black, white, red, cyan, purple, green, blue, yellow + 0x6A64, 0x41C0, 0x9B2B, 0x4228, 0x6B6D, 0x9E90, 0x6AF6, 0x94B2 // orange, brown, lightred, grey1, grey2, lightgreen, lightblue, grey3 +}; + + +#elif 0 // "GODOT" http://www.godot64.de/german/hpalet.htm +static const uint16_t palette[16] = { + PALETTE(0x00,0x00,0x00), PALETTE(0xff,0xff,0xff), PALETTE(0x88,0x00,0x00), PALETTE(0xaa,0xff,0xee), // black, white, red, cyan, + PALETTE(0xcc,0x44,0xcc), PALETTE(0x00,0xcc,0x55), PALETTE(0x00,0x00,0xaa), PALETTE(0xee,0xee,0x77), // purple, green, blue, yellow + PALETTE(0xdd,0x88,0x55), PALETTE(0x66,0x44,0x00), PALETTE(0xff,0x77,0x77), PALETTE(0x33,0x33,0x33), // orange, brown, lightred, grey1, + PALETTE(0x77,0x77,0x77), PALETTE(0xaa,0xff,0x66), PALETTE(0x00,0x88,0xff), PALETTE(0xbb,0xbb,0xbb) // grey2, lightgreen, lightblue, grey3 +}; + + +#elif 0 // "FRODO" +static const uint16_t palette[16] = { + PALETTE(0x00,0x00,0x00), PALETTE(0xff,0xff,0xff), PALETTE(0xcc,0x00,0x00), PALETTE(0x00,0xff,0xcc), // black, white, red, cyan, + PALETTE(0xff,0x00,0xff), PALETTE(0x00,0xcc,0x00), PALETTE(0x00,0x00,0xcc), PALETTE(0xff,0xff,0x00), // purple, green, blue, yellow + PALETTE(0xff,0x88,0x00), PALETTE(0x88,0x44,0x00), PALETTE(0xff,0x88,0x88), PALETTE(0x44,0x44,0x44), // orange, brown, lightred, grey1, + PALETTE(0x88,0x88,0x88), PALETTE(0x88,0xff,0x88), PALETTE(0x88,0x88,0xff), PALETTE(0xcc,0xcc,0xcc) // grey2, lightgreen, lightblue, grey3 +}; + + +#elif 0 //RGB (full saturated colors - only good for testing) +static const uint16_t palette[16] = { + PALETTE(0x00,0x00,0x00), PALETTE(0xff,0xff,0xff), PALETTE(0xff,0x00,0x00), PALETTE(0x00,0xff,0xff), // black, white, red, cyan, + PALETTE(0xff,0x00,0xff), PALETTE(0x00,0xff,0x00), PALETTE(0x00,0x00,0xff), PALETTE(0xff,0xff,0x00), // purple, green, blue, yellow + PALETTE(0xff,0x80,0x00), PALETTE(0x80,0x40,0x00), PALETTE(0xff,0x80,0x80), PALETTE(0x40,0x40,0x40), // orange, brown, lightred, grey1, + PALETTE(0x80,0x80,0x80), PALETTE(0x80,0xff,0x80), PALETTE(0x80,0x80,0xff), PALETTE(0xc0,0xc0,0xc0) // grey2, lightgreen, lightblue, grey3 +}; +#endif + +#undef BW diff --git a/MCUME_pico/pico800/.DS_Store b/MCUME_pico/pico800/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/MCUME_pico/pico800/.DS_Store differ diff --git a/MCUME_pico/pico800/AudioPlaySystem.cpp b/MCUME_pico/pico800/AudioPlaySystem.cpp new file mode 100644 index 0000000..aee40a1 --- /dev/null +++ b/MCUME_pico/pico800/AudioPlaySystem.cpp @@ -0,0 +1,176 @@ +#include "emuapi.h" + +#ifdef HAS_SND + +#include "AudioPlaySystem.h" + +#define SAMPLERATE AUDIO_SAMPLE_RATE_EXACT +#define CLOCKFREQ 985248 + +#ifndef CUSTOM_SND +static const short square[]={ +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +}; + +const short noise[] { +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,-32767,-32767, +32767,-32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +}; + +#define NOISEBSIZE 0x100 + +typedef struct +{ + unsigned int spos; + unsigned int sinc; + unsigned int vol; +} Channel; + +static Channel chan[6] = { + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0} }; + +#endif + +volatile bool playing = false; + + +static void snd_Reset(void) +{ +#ifndef CUSTOM_SND + chan[0].vol = 0; + chan[1].vol = 0; + chan[2].vol = 0; + chan[3].vol = 0; + chan[4].vol = 0; + chan[5].vol = 0; + chan[0].sinc = 0; + chan[1].sinc = 0; + chan[2].sinc = 0; + chan[3].sinc = 0; + chan[4].sinc = 0; + chan[5].sinc = 0; +#endif +} + + +#ifdef CUSTOM_SND +extern "C" { +void SND_Process(void *sndbuffer, int sndn); +} +#endif + +#include +void AudioPlaySystem::snd_Mixer(short * stream, int len ) +{ + if (playing) + { +#ifdef CUSTOM_SND + //printf("s\n"); + SND_Process((void*)stream, len); +#else + int i; + long s; + len = len >> 1; + short v0=chan[0].vol; + short v1=chan[1].vol; + short v2=chan[2].vol; + short v3=chan[3].vol; + short v4=chan[4].vol; + short v5=chan[5].vol; + for (i=0;i>8)&0x3f])>>11); + s+=((v1*square[(chan[1].spos>>8)&0x3f])>>11); + s+=((v2*square[(chan[2].spos>>8)&0x3f])>>11); + s+=((v3*noise[(chan[3].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v4*noise[(chan[4].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v5*noise[(chan[5].spos>>8)&(NOISEBSIZE-1)])>>11); + *stream++ = (short)(s); + *stream++ = (short)(s); + chan[0].spos += chan[0].sinc; + chan[1].spos += chan[1].sinc; + chan[2].spos += chan[2].sinc; + chan[3].spos += chan[3].sinc; + chan[4].spos += chan[4].sinc; + chan[5].spos += chan[5].sinc; + } +#endif + } +} + +void AudioPlaySystem::begin(void) +{ + this->reset(); +} + +void AudioPlaySystem::start(void) +{ + playing = true; +} + +void AudioPlaySystem::setSampleParameters(float clockfreq, float samplerate) { +} + +void AudioPlaySystem::reset(void) +{ + snd_Reset(); +} + +void AudioPlaySystem::stop(void) +{ + playing = false; +} + +bool AudioPlaySystem::isPlaying(void) +{ + return playing; +} + + + +void AudioPlaySystem::sound(int C, int F, int V) { +#ifndef CUSTOM_SND + if (C < 6) { + chan[C].vol = V; + chan[C].sinc = F>>1; + } +#endif +} + +void AudioPlaySystem::step(void) { +} +#endif diff --git a/MCUME_pico/pico800/AudioPlaySystem.h b/MCUME_pico/pico800/AudioPlaySystem.h new file mode 100644 index 0000000..5d2efc0 --- /dev/null +++ b/MCUME_pico/pico800/AudioPlaySystem.h @@ -0,0 +1,26 @@ +#ifndef audioplaysystem_h_ +#define audioplaysystem_h_ + +#ifdef HAS_SND + +#include "platform_config.h" + +class AudioPlaySystem +{ +public: + AudioPlaySystem(void) { }; + void begin(void); + void setSampleParameters(float clockfreq, float samplerate); + void reset(void); + void start(void); + void stop(void); + bool isPlaying(void); + void sound(int C, int F, int V); + void buzz(int size, int val); + void step(void); + static void snd_Mixer(short * stream, int len ); +}; + +#endif + +#endif diff --git a/MCUME_pico/pico800/akey.h b/MCUME_pico/pico800/akey.h new file mode 100644 index 0000000..06e4939 --- /dev/null +++ b/MCUME_pico/pico800/akey.h @@ -0,0 +1,239 @@ +#ifndef AKEY_H_ +#define AKEY_H_ +/* akey.h: Atari key codes */ + +/* INPUT_key_code values */ +#define AKEY_NONE -1 + +/* Special key codes. */ +#define AKEY_WARMSTART -2 +#define AKEY_COLDSTART -3 +#define AKEY_EXIT -4 +#define AKEY_BREAK -5 +#define AKEY_UI -7 +#define AKEY_SCREENSHOT -8 +#define AKEY_SCREENSHOT_INTERLACE -9 +#define AKEY_START -10 +#define AKEY_SELECT -11 +#define AKEY_OPTION -12 +#define AKEY_PBI_BB_MENU -13 +#define AKEY_CX85_1 -14 +#define AKEY_CX85_2 -15 +#define AKEY_CX85_3 -16 +#define AKEY_CX85_4 -17 +#define AKEY_CX85_5 -18 +#define AKEY_CX85_6 -19 +#define AKEY_CX85_7 -20 +#define AKEY_CX85_8 -21 +#define AKEY_CX85_9 -22 +#define AKEY_CX85_0 -23 +#define AKEY_CX85_PERIOD -24 +#define AKEY_CX85_MINUS -25 +#define AKEY_CX85_PLUS_ENTER -26 +#define AKEY_CX85_ESCAPE -27 +#define AKEY_CX85_NO -28 +#define AKEY_CX85_DELETE -29 +#define AKEY_CX85_YES -30 +#define AKEY_TURBO -31 +#ifdef USE_UI_BASIC_ONSCREEN_KEYBOARD +#define AKEY_KEYB -32 +#endif +#ifdef DIRECTX + /* special menu directives */ + #define AKEY32_MENU_SAVE_CONFIG -107 + #define AKEY32_UI_MOUSE_CLICK -108 +#endif + +#define AKEY_SHFT 0x40 +#define AKEY_CTRL 0x80 +#define AKEY_SHFTCTRL 0xc0 + +#define AKEY_0 0x32 +#define AKEY_1 0x1f +#define AKEY_2 0x1e +#define AKEY_3 0x1a +#define AKEY_4 0x18 +#define AKEY_5 0x1d +#define AKEY_6 0x1b +#define AKEY_7 0x33 +#define AKEY_8 0x35 +#define AKEY_9 0x30 + +#define AKEY_CTRL_0 (AKEY_CTRL | AKEY_0) +#define AKEY_CTRL_1 (AKEY_CTRL | AKEY_1) +#define AKEY_CTRL_2 (AKEY_CTRL | AKEY_2) +#define AKEY_CTRL_3 (AKEY_CTRL | AKEY_3) +#define AKEY_CTRL_4 (AKEY_CTRL | AKEY_4) +#define AKEY_CTRL_5 (AKEY_CTRL | AKEY_5) +#define AKEY_CTRL_6 (AKEY_CTRL | AKEY_6) +#define AKEY_CTRL_7 (AKEY_CTRL | AKEY_7) +#define AKEY_CTRL_8 (AKEY_CTRL | AKEY_8) +#define AKEY_CTRL_9 (AKEY_CTRL | AKEY_9) + +#define AKEY_a 0x3f +#define AKEY_b 0x15 +#define AKEY_c 0x12 +#define AKEY_d 0x3a +#define AKEY_e 0x2a +#define AKEY_f 0x38 +#define AKEY_g 0x3d +#define AKEY_h 0x39 +#define AKEY_i 0x0d +#define AKEY_j 0x01 +#define AKEY_k 0x05 +#define AKEY_l 0x00 +#define AKEY_m 0x25 +#define AKEY_n 0x23 +#define AKEY_o 0x08 +#define AKEY_p 0x0a +#define AKEY_q 0x2f +#define AKEY_r 0x28 +#define AKEY_s 0x3e +#define AKEY_t 0x2d +#define AKEY_u 0x0b +#define AKEY_v 0x10 +#define AKEY_w 0x2e +#define AKEY_x 0x16 +#define AKEY_y 0x2b +#define AKEY_z 0x17 + +#define AKEY_A (AKEY_SHFT | AKEY_a) +#define AKEY_B (AKEY_SHFT | AKEY_b) +#define AKEY_C (AKEY_SHFT | AKEY_c) +#define AKEY_D (AKEY_SHFT | AKEY_d) +#define AKEY_E (AKEY_SHFT | AKEY_e) +#define AKEY_F (AKEY_SHFT | AKEY_f) +#define AKEY_G (AKEY_SHFT | AKEY_g) +#define AKEY_H (AKEY_SHFT | AKEY_h) +#define AKEY_I (AKEY_SHFT | AKEY_i) +#define AKEY_J (AKEY_SHFT | AKEY_j) +#define AKEY_K (AKEY_SHFT | AKEY_k) +#define AKEY_L (AKEY_SHFT | AKEY_l) +#define AKEY_M (AKEY_SHFT | AKEY_m) +#define AKEY_N (AKEY_SHFT | AKEY_n) +#define AKEY_O (AKEY_SHFT | AKEY_o) +#define AKEY_P (AKEY_SHFT | AKEY_p) +#define AKEY_Q (AKEY_SHFT | AKEY_q) +#define AKEY_R (AKEY_SHFT | AKEY_r) +#define AKEY_S (AKEY_SHFT | AKEY_s) +#define AKEY_T (AKEY_SHFT | AKEY_t) +#define AKEY_U (AKEY_SHFT | AKEY_u) +#define AKEY_V (AKEY_SHFT | AKEY_v) +#define AKEY_W (AKEY_SHFT | AKEY_w) +#define AKEY_X (AKEY_SHFT | AKEY_x) +#define AKEY_Y (AKEY_SHFT | AKEY_y) +#define AKEY_Z (AKEY_SHFT | AKEY_z) + +#define AKEY_CTRL_a (AKEY_CTRL | AKEY_a) +#define AKEY_CTRL_b (AKEY_CTRL | AKEY_b) +#define AKEY_CTRL_c (AKEY_CTRL | AKEY_c) +#define AKEY_CTRL_d (AKEY_CTRL | AKEY_d) +#define AKEY_CTRL_e (AKEY_CTRL | AKEY_e) +#define AKEY_CTRL_f (AKEY_CTRL | AKEY_f) +#define AKEY_CTRL_g (AKEY_CTRL | AKEY_g) +#define AKEY_CTRL_h (AKEY_CTRL | AKEY_h) +#define AKEY_CTRL_i (AKEY_CTRL | AKEY_i) +#define AKEY_CTRL_j (AKEY_CTRL | AKEY_j) +#define AKEY_CTRL_k (AKEY_CTRL | AKEY_k) +#define AKEY_CTRL_l (AKEY_CTRL | AKEY_l) +#define AKEY_CTRL_m (AKEY_CTRL | AKEY_m) +#define AKEY_CTRL_n (AKEY_CTRL | AKEY_n) +#define AKEY_CTRL_o (AKEY_CTRL | AKEY_o) +#define AKEY_CTRL_p (AKEY_CTRL | AKEY_p) +#define AKEY_CTRL_q (AKEY_CTRL | AKEY_q) +#define AKEY_CTRL_r (AKEY_CTRL | AKEY_r) +#define AKEY_CTRL_s (AKEY_CTRL | AKEY_s) +#define AKEY_CTRL_t (AKEY_CTRL | AKEY_t) +#define AKEY_CTRL_u (AKEY_CTRL | AKEY_u) +#define AKEY_CTRL_v (AKEY_CTRL | AKEY_v) +#define AKEY_CTRL_w (AKEY_CTRL | AKEY_w) +#define AKEY_CTRL_x (AKEY_CTRL | AKEY_x) +#define AKEY_CTRL_y (AKEY_CTRL | AKEY_y) +#define AKEY_CTRL_z (AKEY_CTRL | AKEY_z) + +#define AKEY_CTRL_A (AKEY_CTRL | AKEY_A) +#define AKEY_CTRL_B (AKEY_CTRL | AKEY_B) +#define AKEY_CTRL_C (AKEY_CTRL | AKEY_C) +#define AKEY_CTRL_D (AKEY_CTRL | AKEY_D) +#define AKEY_CTRL_E (AKEY_CTRL | AKEY_E) +#define AKEY_CTRL_F (AKEY_CTRL | AKEY_F) +#define AKEY_CTRL_G (AKEY_CTRL | AKEY_G) +#define AKEY_CTRL_H (AKEY_CTRL | AKEY_H) +#define AKEY_CTRL_I (AKEY_CTRL | AKEY_I) +#define AKEY_CTRL_J (AKEY_CTRL | AKEY_J) +#define AKEY_CTRL_K (AKEY_CTRL | AKEY_K) +#define AKEY_CTRL_L (AKEY_CTRL | AKEY_L) +#define AKEY_CTRL_M (AKEY_CTRL | AKEY_M) +#define AKEY_CTRL_N (AKEY_CTRL | AKEY_N) +#define AKEY_CTRL_O (AKEY_CTRL | AKEY_O) +#define AKEY_CTRL_P (AKEY_CTRL | AKEY_P) +#define AKEY_CTRL_Q (AKEY_CTRL | AKEY_Q) +#define AKEY_CTRL_R (AKEY_CTRL | AKEY_R) +#define AKEY_CTRL_S (AKEY_CTRL | AKEY_S) +#define AKEY_CTRL_T (AKEY_CTRL | AKEY_T) +#define AKEY_CTRL_U (AKEY_CTRL | AKEY_U) +#define AKEY_CTRL_V (AKEY_CTRL | AKEY_V) +#define AKEY_CTRL_W (AKEY_CTRL | AKEY_W) +#define AKEY_CTRL_X (AKEY_CTRL | AKEY_X) +#define AKEY_CTRL_Y (AKEY_CTRL | AKEY_Y) +#define AKEY_CTRL_Z (AKEY_CTRL | AKEY_Z) + +#define AKEY_HELP 0x11 +#define AKEY_DOWN 0x8f +#define AKEY_LEFT 0x86 +#define AKEY_RIGHT 0x87 +#define AKEY_UP 0x8e +#define AKEY_BACKSPACE 0x34 +#define AKEY_DELETE_CHAR 0xb4 +#define AKEY_DELETE_LINE 0x74 +#define AKEY_INSERT_CHAR 0xb7 +#define AKEY_INSERT_LINE 0x77 +#define AKEY_ESCAPE 0x1c +#define AKEY_ATARI 0x27 +#define AKEY_CAPSLOCK 0x7c +#define AKEY_CAPSTOGGLE 0x3c +#define AKEY_TAB 0x2c +#define AKEY_SETTAB 0x6c +#define AKEY_CLRTAB 0xac +#define AKEY_RETURN 0x0c +#define AKEY_SPACE 0x21 +#define AKEY_EXCLAMATION 0x5f +#define AKEY_DBLQUOTE 0x5e +#define AKEY_HASH 0x5a +#define AKEY_DOLLAR 0x58 +#define AKEY_PERCENT 0x5d +#define AKEY_AMPERSAND 0x5b +#define AKEY_QUOTE 0x73 +#define AKEY_AT 0x75 +#define AKEY_PARENLEFT 0x70 +#define AKEY_PARENRIGHT 0x72 +#define AKEY_LESS 0x36 +#define AKEY_GREATER 0x37 +#define AKEY_EQUAL 0x0f +#define AKEY_QUESTION 0x66 +#define AKEY_MINUS 0x0e +#define AKEY_PLUS 0x06 +#define AKEY_ASTERISK 0x07 +#define AKEY_SLASH 0x26 +#define AKEY_COLON 0x42 +#define AKEY_SEMICOLON 0x02 +#define AKEY_COMMA 0x20 +#define AKEY_FULLSTOP 0x22 +#define AKEY_UNDERSCORE 0x4e +#define AKEY_BRACKETLEFT 0x60 +#define AKEY_BRACKETRIGHT 0x62 +#define AKEY_CIRCUMFLEX 0x47 +#define AKEY_BACKSLASH 0x46 +#define AKEY_BAR 0x4f +#define AKEY_CLEAR (AKEY_SHFT | AKEY_LESS) +#define AKEY_CARET (AKEY_SHFT | AKEY_ASTERISK) +#define AKEY_F1 0x03 +#define AKEY_F2 0x04 +#define AKEY_F3 0x13 +#define AKEY_F4 0x14 + +/* Following keys cannot be read with both shift and control pressed: + J K L ; + * Z X C V B F1 F2 F3 F4 HELP */ + + +#endif /* AKEY_H_ */ diff --git a/MCUME_pico/pico800/antic.c b/MCUME_pico/pico800/antic.c new file mode 100644 index 0000000..542f5fa --- /dev/null +++ b/MCUME_pico/pico800/antic.c @@ -0,0 +1,4150 @@ +/* + * antic.c - ANTIC chip emulation + * + * Copyright (C) 1995-1998 David Firth + * Copyright (C) 1998-2008 Atari800 development team (see DOC/CREDITS) + * + * This file is part of the Atari800 emulator project which emulates + * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. + * + * Atari800 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. + * + * Atari800 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 Atari800; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +#include + +#include "antic.h" +#include "cpu.h" +#include "gtia.h" +#include "memory.h" +#include "pokey.h" + +#ifdef NEW_CYCLE_EXACT +#include "cycle_map.h" +#endif + + +UWORD Screen_atari[ATARI_WIDTH / 2]; // = NULL; +#define scrn_line 0 //(ATARI_WIDTH / 2) + +#define DRAWLINE() \ + if ( (ANTIC_ypos > 8) && (ANTIC_ypos < 248)) { \ + emu_DrawLine((unsigned char *)&Screen_atari[32/sizeof(Screen_atari[0])], 320, 240, ANTIC_ypos-8); \ + } + + +#define LCHOP 3 /* do not build leftmost 0..3 characters in wide mode */ +#define RCHOP 3 /* do not build rightmost 0..3 characters in wide mode */ + +int ANTIC_break_ypos = 999; +#if !defined(BASIC) && !defined(CURSES_BASIC) +static int gtia_bug_active = FALSE; /* The GTIA bug mode is active */ +#endif +#ifdef NEW_CYCLE_EXACT +static void draw_partial_scanline(int l,int r); +static void update_scanline_chbase(void); +static void update_scanline_invert(void); +static void update_scanline_blank(void); +const int *ANTIC_cpu2antic_ptr; +const int *ANTIC_antic2cpu_ptr; +int ANTIC_delayed_wsync = 0; +static int dmactl_changed = 0; +static UBYTE delayed_DMACTL; +static int draw_antic_ptr_changed = 0; +static UBYTE need_load; +static int dmactl_bug_chdata; +#endif /* NEW_CYCLE_EXACT */ +#ifndef NO_SIMPLE_PAL_BLENDING +int ANTIC_pal_blending = 0; +#endif /* NO_SIMPLE_PAL_BLENDING */ + +/* Video memory access is hidden behind these macros. It allows to track dirty video memory + to improve video system performance */ +#ifdef DIRTYRECT + +static UWORD *scratchUWordPtr; +static UWORD scratchUWord; +static ULONG *scratchULongPtr; +static ULONG scratchULong; +static UBYTE *scratchUBytePtr; +static UBYTE scratchUByte; + + +#ifdef NODIRTYCOMPARE + +#define WRITE_VIDEO(ptr, val) \ + do { \ + scratchUWordPtr = (ptr); \ + Screen_dirty[((ULONG) scratchUWordPtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchUWordPtr = (val); \ + } while (0) +#define WRITE_VIDEO_LONG(ptr, val) \ + do { \ + scratchULongPtr = (ptr); \ + Screen_dirty[((ULONG) scratchULongPtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchULongPtr = (val); \ + } while (0) +#define WRITE_VIDEO_BYTE(ptr, val) \ + do { \ + scratchUBytePtr = (ptr); \ + Screen_dirty[((ULONG) scratchUBytePtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchUBytePtr = (val); \ + } while (0) +#define FILL_VIDEO(ptr, val, size) \ + do { \ + scratchUBytePtr = (UBYTE*) (ptr); \ + scratchULong = (ULONG) (size); \ + memset(Screen_dirty + (((ULONG) scratchUBytePtr - (ULONG) Screen_atari) >> 3), 1, scratchULong >> 3); \ + memset(scratchUBytePtr, (val), scratchULong); \ + } while (0) + +#else /* NODIRTYCOMPARE not defined: */ + +#define WRITE_VIDEO(ptr, val) \ + do { \ + scratchUWordPtr = (ptr); \ + scratchUWord = (val); \ + if (*scratchUWordPtr != scratchUWord) { \ + Screen_dirty[((ULONG) scratchUWordPtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchUWordPtr = scratchUWord; \ + } \ + } while (0) +#ifndef WORDS_UNALIGNED_OK +#define WRITE_VIDEO_LONG(ptr, val) \ + do { \ + scratchULongPtr = (ptr); \ + scratchULong = (val); \ + if (*scratchULongPtr != scratchULong) { \ + Screen_dirty[((ULONG) scratchULongPtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchULongPtr = scratchULong; \ + } \ + } while (0) +#else +#define WRITE_VIDEO_LONG(ptr, val) \ + do { \ + scratchULongPtr = (ptr); \ + scratchULong = (val); \ + if (*scratchULongPtr != scratchULong) { \ + Screen_dirty[((ULONG) scratchULongPtr - (ULONG) Screen_atari) >> 3] = 1; \ + Screen_dirty[((ULONG) scratchULongPtr - (ULONG) Screen_atari + 2) >> 3] = 1; \ + *scratchULongPtr = scratchULong; \ + } \ + } while (0) +#endif +#define WRITE_VIDEO_BYTE(ptr, val) \ + do { \ + scratchUBytePtr = (ptr); \ + scratchUByte = (val); \ + if (*scratchUBytePtr != scratchUByte) { \ + Screen_dirty[((ULONG) scratchUBytePtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchUBytePtr = scratchUByte; \ + } \ + } while (0) +static UBYTE *scratchFillLimit; +#define FILL_VIDEO(ptr, val, size) \ + do { \ + scratchUBytePtr = (UBYTE *) (ptr); \ + scratchUByte = (UBYTE) (val); \ + scratchFillLimit = scratchUBytePtr + (size); \ + for (; scratchUBytePtr < scratchFillLimit; scratchUBytePtr++) { \ + if (*scratchUBytePtr != scratchUByte) { \ + Screen_dirty[((ULONG) scratchUBytePtr - (ULONG) Screen_atari) >> 3] = 1; \ + *scratchUBytePtr = scratchUByte; \ + } \ + } \ + } while (0) + +#endif /* NODIRTYCOMPARE */ + +#else /* DIRTYRECT not defined: */ + +#define WRITE_VIDEO(ptr, val) (*(ptr) = val) +#define WRITE_VIDEO_LONG(ptr, val) (*(ptr) = val) +#define WRITE_VIDEO_BYTE(ptr, val) (*(ptr) = val) +#define FILL_VIDEO(ptr, val, size) memset(ptr, val, size) + +#endif /* DIRTYRECT */ + +#define READ_VIDEO_LONG(ptr) (*(ptr)) + +void ANTIC_VideoMemset(UBYTE *ptr, UBYTE val, ULONG size) +{ + FILL_VIDEO(ptr, val, size); +} + +void ANTIC_VideoPutByte(UBYTE *ptr, UBYTE val) +{ + WRITE_VIDEO_BYTE(ptr, val); +} + + +/* Memory access helpers----------------------------------------------------- */ +/* Some optimizations result in unaligned 32-bit accesses. These macros have + been introduced for machines that don't allow unaligned memory accesses. */ + +#ifdef DIRTYRECT +/* STAT_UNALIGNED_WORDS doesn't work with DIRTYRECT */ +#define WRITE_VIDEO_LONG_UNALIGNED WRITE_VIDEO_LONG +#else +#define WRITE_VIDEO_LONG_UNALIGNED(ptr, val) UNALIGNED_PUT_LONG((ptr), (val), Screen_atari_write_long_stat) +#endif + +#ifdef WORDS_UNALIGNED_OK +#define IS_ZERO_ULONG(x) (! UNALIGNED_GET_LONG(x, pm_scanline_read_long_stat)) +#define DO_GTIA_BYTE(p, l, x) { \ + WRITE_VIDEO_LONG_UNALIGNED((ULONG *) (p), (l)[(x) >> 4]); \ + WRITE_VIDEO_LONG_UNALIGNED((ULONG *) (p) + 1, (l)[(x) & 0xf]); \ + } +#else /* WORDS_UNALIGNED_OK */ +#define IS_ZERO_ULONG(x) (!((const UBYTE *)(x))[0] && !((const UBYTE *)(x))[1] && !((const UBYTE *)(x))[2] && !((const UBYTE *)(x))[3]) +#define DO_GTIA_BYTE(p, l, x) { \ + WRITE_VIDEO((UWORD *) (p), (UWORD) ((l)[(x) >> 4])); \ + WRITE_VIDEO((UWORD *) (p) + 1, (UWORD) ((l)[(x) >> 4])); \ + WRITE_VIDEO((UWORD *) (p) + 2, (UWORD) ((l)[(x) & 0xf])); \ + WRITE_VIDEO((UWORD *) (p) + 3, (UWORD) ((l)[(x) & 0xf])); \ + } +#endif /* WORDS_UNALIGNED_OK */ + +/* ANTIC Registers --------------------------------------------------------- */ + +UBYTE ANTIC_DMACTL; +UBYTE ANTIC_CHACTL; +UWORD ANTIC_dlist; +UBYTE ANTIC_HSCROL; +UBYTE ANTIC_VSCROL; +UBYTE ANTIC_PMBASE; +UBYTE ANTIC_CHBASE; +UBYTE ANTIC_NMIEN; +UBYTE ANTIC_NMIST; + +/* ANTIC Memory ------------------------------------------------------------ */ + +#if !defined(BASIC) && !defined(CURSES_BASIC) +static UBYTE antic_memory[52]; +#define ANTIC_margin 4 +/* It's number of bytes in antic_memory, which are never loaded, but may be + read in wide playfield mode. These bytes are uninitialized, because on + real computer there's some kind of 'garbage'. Possibly 1 is enough, but + 4 bytes surely won't cause negative indexes. :) */ + +/* Screen ----------------------------------------------------------------- + Define screen as ULONG to ensure that it is Longword aligned. + This allows special optimisations under certain conditions. + ------------------------------------------------------------------------ */ + +static UWORD *scrn_ptr; +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + +/* Separate access to XE extended memory ----------------------------------- */ +/* It's available in 130 XE and 320 KB Compy Shop. + Note: during ANTIC access to extended memory in Compy Shop Self Test + is disabled. It is unknown if this is true for real 130 XE. If not, + then some extra code has to be added to: + - check if selftest_enabled is set + - check if the address is in range 0x5000..0x57ff + - if both conditions are true, then access memory instead of ANTIC_xe_ptr */ + +/* Pointer to 16 KB seen by ANTIC in 0x4000-0x7fff. + If it's the same what the CPU sees (and what's in MEMORY_mem[0x4000..0x7fff], + then NULL. */ +const UBYTE *ANTIC_xe_ptr = NULL; + +/* ANTIC Timing -------------------------------------------------------------- + +NOTE: this information was written before NEW_CYCLE_EXACT was introduced! + +I've introduced global variable ANTIC_xpos, which contains current number of cycle +in a line. This simplifies ANTIC/CPU timing much. The CPU_GO() function which +emulates CPU is now void and is called with ANTIC_xpos limit, below which CPU can go. + +All strange variables holding 'unused cycles', 'DMA cycles', 'allocated cycles' +etc. are removed. Simply whenever ANTIC fetches a byte, it takes single cycle, +which can be done now with ANTIC_xpos++. There's only one exception: in text modes +2-5 ANTIC takes more bytes than cycles, because it does less than ANTIC_DMAR refresh +cycles. + +Now emulation is really screenline-oriented. We do ANTIC_ypos++ after a line, +not inside it. + +This simplified diagram shows when what is done in a line: + +MDPPPPDD..............(------R/S/F------).......... +^ ^ ^ ^ ^ ^ ^ ^ ---> time/xpos +0 | NMIST_C NMI_C SCR_C WSYNC_C|LINE_C +VSCON_C VSCOF_C + +M - fetch Missiles +D - fetch DL +P - fetch Players +S - fetch Screen +F - fetch Font (in text modes) +R - refresh Memory (ANTIC_DMAR cycles) + +Only Memory Refresh happens in every line, other tasks are optional. + +Below are exact diagrams for some non-scrolled modes: + 11111111111111 + 11111111112222222222333333333344444444445555555555666666666677777777778888888888999999999900000000001111 +012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123 + /--------------------------narrow------------------------------\ + /----------------------------------normal--------------------------------------\ + /-------------------------------------------wide--------------------------------------------\ + +blank line: +MDPPPPDD.................R...R...R...R...R...R...R...R...R........................................................ + +mode 8,9: +MDPPPPDD....S.......S....R..SR...R..SR...R..SR...R..SR...R..S.......S.......S.......S.......S.......S............. + +mode a,b,c: +MDPPPPDD....S...S...S...SR..SR..SR..SR..SR..SR..SR..SR..SR..S...S...S...S...S...S...S...S...S...S...S...S......... + +mode d,e,f: +MDPPPPDD....S.S.S.S.S.S.SRS.SRS.SRS.SRS.SRS.SRS.SRS.SRS.SRS.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S......... + +Notes: +* At the beginning of a line fetched are: + - a byte of Missiles + - a byte of DL (instruction) + - four bytes of Players + - two bytes of DL argument (jump or screen address) + The emulator, however, fetches them all continuously. + +* Refresh cycles and Screen/Font fetches have been tested for some modes (see above). + This is for making the emulator more accurate, able to change colour registers, + sprite positions or GTIA modes during scanline. These modes are the most commonly used + with those effects. + Currently this isn't implemented, and all R/S/F cycles are fetched continuously in *all* modes + (however, right number of cycles is taken in every mode, basing on screen width and HSCROL). + +There are a few constants representing following events: + +* VSCON_C - in first VSC line dctr is loaded with VSCROL + +* ANTIC_NMIST_C - NMIST is updated (set to 0x9f on DLI, set to 0x5f on VBLKI) + +* ANTIC_NMI_C - If NMIEN permits, NMI interrupt is generated + +* SCR_C - We draw whole line of screen. On a real computer you can change + ANTIC/GTIA registers while displaying screen, however this emulator + isn't that accurate. + +* ANTIC_WSYNC_C - ANTIC holds CPU until this moment, when WSYNC is written + +* VSCOF_C - in last VSC line dctr is compared with VSCROL + +* ANTIC_LINE_C - simply end of line (this used to be called CPUL) + +All constants are determined by tests on real Atari computer. It is assumed, +that ANTIC registers are read with LDA, LDX, LDY and written with STA, STX, +STY, all in absolute addressing mode. All these instructions last 4 cycles +and perform read/write operation in last cycle. The CPU emulation should +correctly emulate WSYNC and add cycles for current instruction BEFORE +executing it. That's why VSCOF_C > ANTIC_LINE_C is correct. + +How WSYNC is now implemented: + +* On writing WSYNC: + - if ANTIC_xpos <= ANTIC_WSYNC_C && ANTIC_xpos_limit >= ANTIC_WSYNC_C, + we only change ANTIC_xpos to ANTIC_WSYNC_C - that's all + - otherwise we set ANTIC_wsync_halt and change ANTIC_xpos to ANTIC_xpos_limit causing CPU_GO() + to return + +* At the beginning of CPU_GO() (CPU emulation), when ANTIC_wsync_halt is set: + - if ANTIC_xpos_limit < ANTIC_WSYNC_C we return + - else we set ANTIC_xpos to ANTIC_WSYNC_C, reset ANTIC_wsync_halt and emulate some cycles + +We don't emulate ANTIC_NMIST_C, ANTIC_NMI_C and SCR_C if it is unnecessary. +These are all cases: + +* Common overscreen line + Nothing happens except that ANTIC gets ANTIC_DMAR cycles: + ANTIC_xpos += ANTIC_DMAR; GOEOL; + +* First overscreen line - start of vertical blank + - CPU goes until ANTIC_NMIST_C + - ANTIC sets NMIST to 0x5f + if (ANTIC_NMIEN & 0x40) { + - CPU goes until ANTIC_NMI_C + - ANTIC forces NMI + } + - ANTIC gets ANTIC_DMAR cycles + - CPU goes until ANTIC_LINE_C + +* Screen line without DLI + - ANTIC fetches DL and P/MG + - CPU goes until SCR_C + - ANTIC draws whole line fetching Screen/Font and refreshing memory + - CPU goes until ANTIC_LINE_C + +* Screen line with DLI + - ANTIC fetches DL and P/MG + - CPU goes until ANTIC_NMIST_C + - ANTIC sets NMIST to 0x9f + if (ANTIC_NMIEN & 0x80) { + - CPU goes until ANTIC_NMI_C + - ANTIC forces NMI + } + - CPU goes until SCR_C + - ANTIC draws line with ANTIC_DMAR + - CPU goes until ANTIC_LINE_C + + -------------------------------------------------------------------------- */ + +#define VSCON_C 1 +#define SCR_C 28 +#define VSCOF_C 112 + +unsigned int ANTIC_screenline_cpu_clock = 0; + +#ifdef NEW_CYCLE_EXACT +#define UPDATE_DMACTL do{if (dmactl_changed) { \ + dmactl_changed = 0; \ + ANTIC_PutByte(ANTIC_OFFSET_DMACTL, delayed_DMACTL); \ + } \ + if (draw_antic_ptr_changed) { \ + draw_antic_ptr_changed = 0; \ + draw_antic_ptr = saved_draw_antic_ptr; \ + }}while(0) +#else +#define UPDATE_DMACTL do{}while(0) +#endif /* NEW_CYCLE_EXACT */ +#define UPDATE_GTIA_BUG /* update GTIA if it was in bug mode */\ + do{if(gtia_bug_active) {\ + /* restore draw_antic_ptr for multi-line modes*/\ + draw_antic_ptr = draw_antic_table[GTIA_PRIOR >> 6][anticmode];\ + gtia_bug_active = FALSE;\ + }}while(0) +#define GOEOL_CYCLE_EXACT CPU_GO(ANTIC_antic2cpu_ptr[ANTIC_LINE_C]); \ + ANTIC_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; \ + ANTIC_xpos -= ANTIC_LINE_C; \ + ANTIC_screenline_cpu_clock += ANTIC_LINE_C; \ + DRAWLINE();ANTIC_ypos++; \ + GTIA_UpdatePmplColls(); +#define GOEOL CPU_GO(ANTIC_LINE_C); ANTIC_xpos -= ANTIC_LINE_C; ANTIC_screenline_cpu_clock += ANTIC_LINE_C; UPDATE_DMACTL; DRAWLINE();ANTIC_ypos++; UPDATE_GTIA_BUG +#define OVERSCREEN_LINE ANTIC_xpos += ANTIC_DMAR; GOEOL + +int ANTIC_xpos = 0; +int ANTIC_xpos_limit; +int ANTIC_wsync_halt = FALSE; + +int ANTIC_ypos; /* Line number - lines 8..247 are on screen */ + +/* Timing in first line of modes 2-5 +In these modes ANTIC takes more bytes than cycles. Despite this, it would be +possible that SCR_C + cycles_taken > ANTIC_WSYNC_C. To avoid this we must take some +cycles before SCR_C. before_cycles contains number of them, while extra_cycles +contains difference between bytes taken and cycles taken plus before_cycles. */ + +#define BEFORE_CYCLES (SCR_C - 28) +/* It's number of cycles taken before SCR_C for not scrolled, narrow playfield. + It wasn't tested, but should be ok. ;) */ + +/* Light pen support ------------------------------------------------------- */ + +static UBYTE PENH; +static UBYTE PENV; +UBYTE ANTIC_PENH_input = 0x00; +UBYTE ANTIC_PENV_input = 0xff; + +#ifndef BASIC + +/* Internal ANTIC registers ------------------------------------------------ */ + +static UWORD screenaddr; /* Screen Pointer */ +static UBYTE IR; /* Instruction Register */ +static UBYTE anticmode; /* Antic mode */ +static UBYTE dctr; /* Delta Counter */ +static UBYTE lastline; /* dctr limit */ +static UBYTE need_dl; /* boolean: fetch DL next line */ +static UBYTE vscrol_off; /* boolean: displaying line ending VSC */ + +#endif + +#if !defined(BASIC) && !defined(CURSES_BASIC) + +/* Pre-computed values for improved performance ---------------------------- */ + +#define NORMAL0 0 /* modes 2,3,4,5,0xd,0xe,0xf */ +#define NORMAL1 1 /* modes 6,7,0xa,0xb,0xc */ +#define NORMAL2 2 /* modes 8,9 */ +#define SCROLL0 3 /* modes 2,3,4,5,0xd,0xe,0xf with HSC */ +#define SCROLL1 4 /* modes 6,7,0xa,0xb,0xc with HSC */ +#define SCROLL2 5 /* modes 8,9 with HSC */ +static int md; /* current mode NORMAL0..SCROLL2 */ +/* tables for modes NORMAL0..SCROLL2 */ +static int chars_read[6]; +static int chars_displayed[6]; +static int x_min[6]; +static int ch_offset[6]; +static int load_cycles[6]; +static int font_cycles[6]; +static int before_cycles[6]; +static int extra_cycles[6]; + +/* border parameters for current display width */ +static int left_border_chars; +static int right_border_start; +#ifdef NEW_CYCLE_EXACT +static int left_border_start = LCHOP * 4; +static int right_border_end = (48 - RCHOP) * 4; +#define LBORDER_START left_border_start +#define RBORDER_END right_border_end +#else +#define LBORDER_START (LCHOP * 4) +#define RBORDER_END ((48 - RCHOP) * 4) +#endif /* NEW_CYCLE_EXACT */ + +/* set with CHBASE *and* CHACTL - bits 0..2 set if flip on */ +static UWORD chbase_20; /* CHBASE for 20 character mode */ + +/* set with CHACTL */ +static UBYTE invert_mask; +static int blank_mask; + +/* A scanline of AN0 and AN1 signals as transmitted from ANTIC to GTIA. + In every byte, bit 0 is AN0 and bit 1 is AN1 */ +static UBYTE an_scanline[ATARI_WIDTH / 2 + 8]; + +/* lookup tables */ +static UBYTE blank_lookup[256]; +static UWORD lookup2[256]; +ULONG ANTIC_lookup_gtia9[16]; +ULONG ANTIC_lookup_gtia11[16]; +static UBYTE playfield_lookup[257]; +static UBYTE mode_e_an_lookup[256]; + +/* Colour lookup table + This single table replaces 4 previously used: cl_word, cur_prior, + prior_table and pf_colls. It should be treated as a two-dimensional table, + with playfield colours in rows and PMG colours in columns: + no_PMG PM0 PM1 PM01 PM2 PM3 PM23 PM023 PM123 PM0123 PM25 PM35 PM235 colls ... ... + BAK + ... + HI2 + HI3 + PF0 + PF1 + PF2 + PF3 + The table contains word value (lsb = msb) of colour to be drawn. + The table is being updated taking current PRIOR setting into consideration. + '...' represent two unused columns and single unused row. + HI2 and HI3 are used only if colour_translation_table is being used. + They're colours of hi-res pixels on PF2 and PF3 respectively (PF2 is + default background for hi-res, PF3 is PM5). + Columns PM023, PM123 and PM0123 are used when PRIOR & 0xf equals any + of 5,7,0xc,0xd,0xe,0xf. The columns represent PM0, PM1 and PM01 respectively + covered by PM2 and/or PM3. This is to handle black colour on PF2 and PF3. + Columns PM25, PM35 and PM235 are used when PRIOR & 0x1f equals any + of 0x10,0x1a,0x1c,0x1e. The columns represent PM2, PM3 and PM23 + respectively covered by PM5. This to handle colour on PF0 and PF1: + PF3 if (PRIOR & 0x1f) == 0x10, PF0 or PF1 otherwise. + Additional column 'colls' holds collisions of playfields with PMG. */ + +UWORD ANTIC_cl[128]; + +#define C_PM0 0x01 +#define C_PM1 0x02 +#define C_PM01 0x03 +#define C_PM2 0x04 +#define C_PM3 0x05 +#define C_PM23 0x06 +#define C_PM023 0x07 +#define C_PM123 0x08 +#define C_PM0123 0x09 +#define C_PM25 0x0a +#define C_PM35 0x0b +#define C_PM235 0x0c +#define C_COLLS 0x0d +#define C_BAK 0x00 +#define C_HI2 0x20 +#define C_HI3 0x30 +#define C_PF0 0x40 +#define C_PF1 0x50 +#define C_PF2 0x60 +#define C_PF3 0x70 +#define C_BLACK (C_PF3 | C_PM25) + +/* these are byte-offsets in the table, so left shift for indexing word table + has been avoided */ +#define COLOUR(x) (*(UWORD *) ((UBYTE *) ANTIC_cl + (x) )) +#define L_PM0 (2 * C_PM0) +#define L_PM1 (2 * C_PM1) +#define L_PM01 (2 * C_PM01) +#define L_PM2 (2 * C_PM2) +#define L_PM3 (2 * C_PM3) +#define L_PM23 (2 * C_PM23) +#define L_PM023 (2 * C_PM023) +#define L_PM123 (2 * C_PM123) +#define L_PM0123 (2 * C_PM0123) +#define L_PM25 (2 * C_PM25) +#define L_PM35 (2 * C_PM35) +#define L_PM235 (2 * C_PM235) +#define L_COLLS (2 * C_COLLS) +#define L_BAK (2 * C_BAK) +#define L_HI2 (2 * C_HI2) +#define L_HI3 (2 * C_HI3) +#define L_PF0 (2 * C_PF0) +#define L_PF1 (2 * C_PF1) +#define L_PF2 (2 * C_PF2) +#define L_PF3 (2 * C_PF3) +#define L_BLACK (2 * C_BLACK) + +/* Blank areas optimizations + Routines for most graphics modes take advantage of fact, that often + large areas of screen are background colour. If it is possible, 8 pixels + of background are drawn at once - with two longs or four words, if + the platform doesn't allow unaligned long access. + Artifacting also uses unaligned long access if it's supported. */ + +#ifdef WORDS_UNALIGNED_OK + +#define INIT_BACKGROUND_6 ULONG background = ANTIC_cl[C_PF2] | (((ULONG) ANTIC_cl[C_PF2]) << 16); +#define INIT_BACKGROUND_8 ULONG background = ANTIC_lookup_gtia9[0]; +#define DRAW_BACKGROUND(colreg) { \ + WRITE_VIDEO_LONG_UNALIGNED((ULONG *) ptr, background); \ + WRITE_VIDEO_LONG_UNALIGNED(((ULONG *) ptr) + 1, background); \ + ptr += 4; \ + } +#define DRAW_ARTIF { \ + WRITE_VIDEO_LONG_UNALIGNED((ULONG *) ptr, art_curtable[(UBYTE) (screendata_tally >> 10)]); \ + WRITE_VIDEO_LONG_UNALIGNED(((ULONG *) ptr) + 1, art_curtable[(UBYTE) (screendata_tally >> 6)]); \ + ptr += 4; \ + } + +#else + +#define INIT_BACKGROUND_6 +#define INIT_BACKGROUND_8 +#define DRAW_BACKGROUND(colreg) {\ + WRITE_VIDEO(ptr, ANTIC_cl[colreg]); \ + WRITE_VIDEO(ptr + 1, ANTIC_cl[colreg]); \ + WRITE_VIDEO(ptr + 2, ANTIC_cl[colreg]); \ + WRITE_VIDEO(ptr + 3, ANTIC_cl[colreg]); \ + ptr += 4;\ + } +#define DRAW_ARTIF {\ + WRITE_VIDEO(ptr++, ((UWORD *) art_curtable)[(screendata_tally & 0x03fc00) >> 9]); \ + WRITE_VIDEO(ptr++, ((UWORD *) art_curtable)[((screendata_tally & 0x03fc00) >> 9) + 1]); \ + WRITE_VIDEO(ptr++, ((UWORD *) art_curtable)[(screendata_tally & 0x003fc0) >> 5]); \ + WRITE_VIDEO(ptr++, ((UWORD *) art_curtable)[((screendata_tally & 0x003fc0) >> 5) + 1]); \ + } + +#endif /* WORDS_UNALIGNED_OK */ + +#define DRAW_ARTIF_NEW {\ + WRITE_VIDEO(ptr++, art_lookup_new[(screendata_tally & 0x03f000) >> 12]); \ + WRITE_VIDEO(ptr++, art_lookup_new[(screendata_tally & 0x00fc00) >> 10]); \ + WRITE_VIDEO(ptr++, art_lookup_new[(screendata_tally & 0x003f00) >> 8]); \ + WRITE_VIDEO(ptr++, art_lookup_new[(screendata_tally & 0x000fc0) >> 6]); \ + } + +/* Hi-res modes optimizations + Now hi-res modes are drawn with words, not bytes. Endianess defaults + to little-endian. WORDS_BIGENDIAN should be defined when compiling on + a big-endian machine. */ + +#ifdef WORDS_BIGENDIAN +#define BYTE0_MASK 0xff00 +#define BYTE1_MASK 0x00ff +#define HIRES_MASK_01 0xfff0 +#define HIRES_MASK_10 0xf0ff +#define HIRES_LUM_01 0x000f +#define HIRES_LUM_10 0x0f00 +#else +#define BYTE0_MASK 0x00ff +#define BYTE1_MASK 0xff00 +#define HIRES_MASK_01 0xf0ff +#define HIRES_MASK_10 0xfff0 +#define HIRES_LUM_01 0x0f00 +#define HIRES_LUM_10 0x000f +#endif + +static UWORD hires_lookup_n[128]; +static UWORD hires_lookup_m[128]; +#define hires_norm(x) hires_lookup_n[(x) >> 1] +#define hires_mask(x) hires_lookup_m[(x) >> 1] + +#ifndef USE_COLOUR_TRANSLATION_TABLE +int ANTIC_artif_new = FALSE; /* New type of artifacting */ +UWORD ANTIC_hires_lookup_l[128]; /* accessed in gtia.c */ +#define hires_lum(x) ANTIC_hires_lookup_l[(x) >> 1] +#endif + +/* Player/Missile Graphics ------------------------------------------------- */ + +#define PF0PM (*(UBYTE *) &ANTIC_cl[C_PF0 | C_COLLS]) +#define PF1PM (*(UBYTE *) &ANTIC_cl[C_PF1 | C_COLLS]) +#define PF2PM (*(UBYTE *) &ANTIC_cl[C_PF2 | C_COLLS]) +#define PF3PM (*(UBYTE *) &ANTIC_cl[C_PF3 | C_COLLS]) +#define PF_COLLS(x) (((UBYTE *) &ANTIC_cl)[(x) + L_COLLS]) + +static int singleline; +int ANTIC_player_dma_enabled; +int ANTIC_player_gra_enabled; +int ANTIC_missile_dma_enabled; +int ANTIC_missile_gra_enabled; +int ANTIC_player_flickering; +int ANTIC_missile_flickering; + +static UWORD pmbase_s; +static UWORD pmbase_d; + +/* PMG lookup tables */ +static UBYTE pm_lookup_table[20][256]; +/* current PMG lookup table */ +static const UBYTE *pm_lookup_ptr; + +#define PL_00 0 /* 0x00,0x01,0x02,0x03,0x04,0x06,0x08,0x09,0x0a,0x0b */ +#define PL_05 1 /* 0x05,0x07,0x0c,0x0d,0x0e,0x0f */ +#define PL_10 2 /* 0x10,0x1a */ +#define PL_11 3 /* 0x11,0x18,0x19 */ +#define PL_12 4 /* 0x12 */ +#define PL_13 5 /* 0x13,0x1b */ +#define PL_14 6 /* 0x14,0x16 */ +#define PL_15 7 /* 0x15,0x17,0x1d,0x1f */ +#define PL_1c 8 /* 0x1c */ +#define PL_1e 9 /* 0x1e */ +#define PL_20 10 /* 0x20,0x21,0x22,0x23,0x24,0x26,0x28,0x29,0x2a,0x2b */ +#define PL_25 11 /* 0x25,0x27,0x2c,0x2d,0x2e,0x2f */ +#define PL_30 12 /* 0x30,0x3a */ +#define PL_31 13 /* 0x31,0x38,0x39 */ +#define PL_32 14 /* 0x32 */ +#define PL_33 15 /* 0x33,0x3b */ +#define PL_34 16 /* 0x34,0x36 */ +#define PL_35 17 /* 0x35,0x37,0x3d,0x3f */ +#define PL_3c 18 /* 0x3c */ +#define PL_3e 19 /* 0x3e */ + +static const UBYTE prior_to_pm_lookup[64] = { + PL_00, PL_00, PL_00, PL_00, PL_00, PL_05, PL_00, PL_05, + PL_00, PL_00, PL_00, PL_00, PL_05, PL_05, PL_05, PL_05, + PL_10, PL_11, PL_12, PL_13, PL_14, PL_15, PL_14, PL_15, + PL_11, PL_11, PL_10, PL_13, PL_1c, PL_15, PL_1e, PL_15, + PL_20, PL_20, PL_20, PL_20, PL_20, PL_25, PL_20, PL_25, + PL_20, PL_20, PL_20, PL_20, PL_25, PL_25, PL_25, PL_25, + PL_30, PL_31, PL_32, PL_33, PL_34, PL_35, PL_34, PL_35, + PL_31, PL_31, PL_30, PL_33, PL_3c, PL_35, PL_3e, PL_35 +}; + +static void init_pm_lookup(void) +{ + static const UBYTE pm_lookup_template[10][16] = { + /* PL_20 */ + { L_BAK, L_PM0, L_PM1, L_PM01, L_PM2, L_PM0, L_PM1, L_PM01, + L_PM3, L_PM0, L_PM1, L_PM01, L_PM23, L_PM0, L_PM1, L_PM01 }, + /* PL_25 */ + { L_BAK, L_PM0, L_PM1, L_PM01, L_PM2, L_PM023, L_PM123, L_PM0123, + L_PM3, L_PM023, L_PM123, L_PM0123, L_PM23, L_PM023, L_PM123, L_PM0123 }, + /* PL_30 */ + { L_PF3, L_PM0, L_PM1, L_PM01, L_PM25, L_PM0, L_PM1, L_PM01, + L_PM35, L_PM0, L_PM1, L_PM01, L_PM235, L_PM0, L_PM1, L_PM01 }, + /* PL_31 */ + { L_PF3, L_PM0, L_PM1, L_PM01, L_PM2, L_PM0, L_PM1, L_PM01, + L_PM3, L_PM0, L_PM1, L_PM01, L_PM23, L_PM0, L_PM1, L_PM01 }, + /* PL_32 */ + { L_PF3, L_PM0, L_PM1, L_PM01, L_PF3, L_PM0, L_PM1, L_PM01, + L_PF3, L_PM0, L_PM1, L_PM01, L_PF3, L_PM0, L_PM1, L_PM01 }, + /* PL_33 */ + { L_PF3, L_PM0, L_PM1, L_PM01, L_BLACK, L_PM0, L_PM1, L_PM01, + L_BLACK, L_PM0, L_PM1, L_PM01, L_BLACK, L_PM0, L_PM1, L_PM01 }, + /* PL_34 */ + { L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, + L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, L_PF3, L_PF3 }, + /* PL_35 */ + { L_PF3, L_PF3, L_PF3, L_PF3, L_BLACK, L_BLACK, L_BLACK, L_BLACK, + L_BLACK, L_BLACK, L_BLACK, L_BLACK, L_BLACK, L_BLACK, L_BLACK, L_BLACK }, + /* PL_3c */ + { L_PF3, L_PF3, L_PF3, L_PF3, L_PM25, L_PM25, L_PM25, L_PM25, + L_PM25, L_PM25, L_PM25, L_PM25, L_PM25, L_PM25, L_PM25, L_PM25 }, + /* PL_3e */ + { L_PF3, L_PF3, L_PF3, L_PF3, L_PM25, L_BLACK, L_BLACK, L_BLACK, + L_PM25, L_BLACK, L_BLACK, L_BLACK, L_PM25, L_BLACK, L_BLACK, L_BLACK } + }; + + static const UBYTE multi_to_normal[] = { + L_BAK, + L_PM0, L_PM1, L_PM0, + L_PM2, L_PM3, L_PM2, + L_PM023, L_PM123, L_PM023, + L_PM25, L_PM35, L_PM25 + }; + + int i; + int j; + UBYTE temp; + + for (i = 0; i <= 1; i++) + for (j = 0; j <= 255; j++) { + pm_lookup_table[i + 10][j] = temp = pm_lookup_template[i][(j & 0xf) | (j >> 4)]; + pm_lookup_table[i][j] = temp <= L_PM235 ? multi_to_normal[temp >> 1] : temp; + } + for (; i <= 9; i++) { + for (j = 0; j <= 15; j++) { + pm_lookup_table[i + 10][j] = temp = pm_lookup_template[i < 7 ? 0 : 1][j]; + pm_lookup_table[i][j] = temp <= L_PM235 ? multi_to_normal[temp >> 1] : temp; + } + for (; j <= 255; j++) { + pm_lookup_table[i + 10][j] = temp = pm_lookup_template[i][j & 0xf]; + pm_lookup_table[i][j] = temp <= L_PM235 ? multi_to_normal[temp >> 1] : temp; + } + } +} + +static const UBYTE hold_missiles_tab[16] = { + 0x00,0x03,0x0c,0x0f,0x30,0x33,0x3c,0x3f, + 0xc0,0xc3,0xcc,0xcf,0xf0,0xf3,0xfc,0xff}; + +static void pmg_dma(void) +{ + /* VDELAY bit set == GTIA ignores PMG DMA in even lines */ + if (ANTIC_player_dma_enabled) { + if (ANTIC_player_gra_enabled) { + const UBYTE *base; + if (singleline) { + if (ANTIC_xe_ptr != NULL && pmbase_s < 0x8000 && pmbase_s >= 0x4000) + base = ANTIC_xe_ptr + pmbase_s - 0x4000 + ANTIC_ypos; + else + base = memory + pmbase_s + ANTIC_ypos; + if (ANTIC_ypos & 1) { + GTIA_GRAFP0 = base[0x400]; + GTIA_GRAFP1 = base[0x500]; + GTIA_GRAFP2 = base[0x600]; + GTIA_GRAFP3 = base[0x700]; + } + else { + if ((GTIA_VDELAY & 0x10) == 0) + GTIA_GRAFP0 = base[0x400]; + if ((GTIA_VDELAY & 0x20) == 0) + GTIA_GRAFP1 = base[0x500]; + if ((GTIA_VDELAY & 0x40) == 0) + GTIA_GRAFP2 = base[0x600]; + if ((GTIA_VDELAY & 0x80) == 0) + GTIA_GRAFP3 = base[0x700]; + } + } + else { + if (ANTIC_xe_ptr != NULL && pmbase_d < 0x8000 && pmbase_d >= 0x4000) + base = ANTIC_xe_ptr + (pmbase_d - 0x4000) + (ANTIC_ypos >> 1); + else + base = memory + pmbase_d + (ANTIC_ypos >> 1); + if (ANTIC_ypos & 1) { + GTIA_GRAFP0 = base[0x200]; + GTIA_GRAFP1 = base[0x280]; + GTIA_GRAFP2 = base[0x300]; + GTIA_GRAFP3 = base[0x380]; + } + else { + if ((GTIA_VDELAY & 0x10) == 0) + GTIA_GRAFP0 = base[0x200]; + if ((GTIA_VDELAY & 0x20) == 0) + GTIA_GRAFP1 = base[0x280]; + if ((GTIA_VDELAY & 0x40) == 0) + GTIA_GRAFP2 = base[0x300]; + if ((GTIA_VDELAY & 0x80) == 0) + GTIA_GRAFP3 = base[0x380]; + } + } + } + ANTIC_xpos += 4; + } + if (ANTIC_missile_dma_enabled) { + if (ANTIC_missile_gra_enabled) { + UBYTE data; + if (ANTIC_xe_ptr != NULL && pmbase_s < 0x8000 && pmbase_s >= 0x4000) + data = ANTIC_xe_ptr[singleline ? pmbase_s + ANTIC_ypos + 0x300 - 0x4000 : pmbase_d + (ANTIC_ypos >> 1) + 0x180 - 0x4000]; + else + data = MEMORY_dGetByte(singleline ? pmbase_s + ANTIC_ypos + 0x300 : pmbase_d + (ANTIC_ypos >> 1) + 0x180); + /* in odd lines load all missiles, in even only those, for which VDELAY bit is zero */ + GTIA_GRAFM = ANTIC_ypos & 1 ? data : ((GTIA_GRAFM ^ data) & hold_missiles_tab[GTIA_VDELAY & 0xf]) ^ data; + } + ANTIC_xpos++; + } +} + +/* Artifacting ------------------------------------------------------------ */ + +int ANTIC_artif_mode; + +static UWORD art_lookup_new[64]; +static UWORD art_colour1_new; +static UWORD art_colour2_new; + +static ULONG art_lookup_normal[256]; +static ULONG art_lookup_reverse[256]; +static ULONG art_bkmask_normal[256]; +static ULONG art_lummask_normal[256]; +static ULONG art_bkmask_reverse[256]; +static ULONG art_lummask_reverse[256]; + +static ULONG *art_curtable = art_lookup_normal; +static ULONG *art_curbkmask = art_bkmask_normal; +static ULONG *art_curlummask = art_lummask_normal; + +static UWORD art_normal_colpf1_save; +static UWORD art_normal_colpf2_save; +static UWORD art_reverse_colpf1_save; +static UWORD art_reverse_colpf2_save; + +static void setup_art_colours(void) +{ + static UWORD *art_colpf1_save = &art_normal_colpf1_save; + static UWORD *art_colpf2_save = &art_normal_colpf2_save; + UWORD curlum = ANTIC_cl[C_PF1] & 0x0f0f; + + if (curlum != *art_colpf1_save || ANTIC_cl[C_PF2] != *art_colpf2_save) { + if (curlum < (ANTIC_cl[C_PF2] & 0x0f0f)) { + art_colpf1_save = &art_reverse_colpf1_save; + art_colpf2_save = &art_reverse_colpf2_save; + art_curtable = art_lookup_reverse; + art_curlummask = art_lummask_reverse; + art_curbkmask = art_bkmask_reverse; + } + else { + art_colpf1_save = &art_normal_colpf1_save; + art_colpf2_save = &art_normal_colpf2_save; + art_curtable = art_lookup_normal; + art_curlummask = art_lummask_normal; + art_curbkmask = art_bkmask_normal; + } + if (curlum ^ *art_colpf1_save) { + int i; + ULONG new_colour = curlum ^ *art_colpf1_save; + new_colour |= new_colour << 16; + *art_colpf1_save = curlum; + for (i = 0; i <= 255; i++) + art_curtable[i] ^= art_curlummask[i] & new_colour; + } + if (ANTIC_cl[C_PF2] ^ *art_colpf2_save) { + int i; + ULONG new_colour = ANTIC_cl[C_PF2] ^ *art_colpf2_save; + new_colour |= new_colour << 16; + *art_colpf2_save = ANTIC_cl[C_PF2]; + for (i = 0; i <= 255; i++) + art_curtable[i] ^= art_curbkmask[i] & new_colour; + } + + } +} + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + +/* Initialization ---------------------------------------------------------- */ + +int ANTIC_Initialise(void) +{ +#if !defined(BASIC) && !defined(CURSES_BASIC) +#if SKIP + int i, j; + + for (i = j = 1; i < *argc; i++) { + int i_a = (i + 1 < *argc); /* is argument available? */ + int a_m = FALSE; /* error, argument missing! */ + + if (strcmp(argv[i], "-artif") == 0) { + if (i_a) { + ANTIC_artif_mode = Util_sscandec(argv[++i]); + if (ANTIC_artif_mode < 0 || ANTIC_artif_mode > 4) { + Log_print("Invalid artifacting mode, using default."); + ANTIC_artif_mode = 0; + } + } + else a_m = TRUE; + } + else { + if (strcmp(argv[i], "-help") == 0) { + Log_print("\t-artif Set artifacting mode 0-4 (0 = disable)"); + } + argv[j++] = argv[i]; + } + + if (a_m) { + Log_print("Missing argument for '%s'", argv[i]); + return FALSE; + } + } + *argc = j; +#endif + ANTIC_UpdateArtifacting(); + + playfield_lookup[0x00] = L_BAK; + playfield_lookup[0x40] = L_PF0; + playfield_lookup[0x80] = L_PF1; + playfield_lookup[0xc0] = L_PF2; + playfield_lookup[0x100] = L_PF3; + blank_lookup[0x80] = blank_lookup[0xa0] = blank_lookup[0xc0] = blank_lookup[0xe0] = 0x00; + hires_mask(0x00) = 0xffff; +#ifdef USE_COLOUR_TRANSLATION_TABLE + hires_mask(0x40) = BYTE0_MASK; + hires_mask(0x80) = BYTE1_MASK; + hires_mask(0xc0) = 0; +#else + hires_mask(0x40) = HIRES_MASK_01; + hires_mask(0x80) = HIRES_MASK_10; + hires_mask(0xc0) = 0xf0f0; + hires_lum(0x00) = hires_lum(0x40) = hires_lum(0x80) = hires_lum(0xc0) = 0; +#endif + init_pm_lookup(); + mode_e_an_lookup[0] = 0; + mode_e_an_lookup[1] = mode_e_an_lookup[4] = mode_e_an_lookup[0x10] = mode_e_an_lookup[0x40] = 0; + mode_e_an_lookup[2] = mode_e_an_lookup[8] = mode_e_an_lookup[0x20] = mode_e_an_lookup[0x80] = 1; + mode_e_an_lookup[3] = mode_e_an_lookup[12] = mode_e_an_lookup[0x30] = mode_e_an_lookup[0xc0] = 2; +#ifdef NEW_CYCLE_EXACT + CYCLE_MAP_Create(); + ANTIC_cpu2antic_ptr = &CYCLE_MAP_cpu2antic[0]; + ANTIC_antic2cpu_ptr = &CYCLE_MAP_antic2cpu[0]; +#endif /* NEW_CYCLE_EXACT */ + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + + return TRUE; +} + +void ANTIC_Reset(void) +{ + ANTIC_NMIEN = 0x00; + ANTIC_NMIST = 0x1f; + ANTIC_PutByte(ANTIC_OFFSET_DMACTL, 0); +} + +#if !defined(BASIC) && !defined(CURSES_BASIC) + +/* Border ------------------------------------------------------------------ */ + +#define DO_BORDER_1 {\ + if (IS_ZERO_ULONG(pm_scanline_ptr)) {\ + ULONG *l_ptr = (ULONG *) ptr;\ + WRITE_VIDEO_LONG(l_ptr++, background); \ + WRITE_VIDEO_LONG(l_ptr++, background); \ + ptr = (UWORD *) l_ptr;\ + pm_scanline_ptr += 4;\ + }\ + else {\ + int k = 4;\ + do + +#define DO_BORDER DO_BORDER_1\ + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[*pm_scanline_ptr++]));\ + while (--k);\ + }\ +} + +#define DO_GTIA10_BORDER DO_BORDER_1\ + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[*pm_scanline_ptr++ | 1]));\ + while (--k);\ + }\ +} + +static void do_border(void) +{ + int kk; + UWORD *ptr = &scrn_ptr[LBORDER_START]; + const UBYTE *pm_scanline_ptr = >IA_pm_scanline[LBORDER_START]; + ULONG background = ANTIC_lookup_gtia9[0]; + /* left border */ + for (kk = left_border_chars; kk; kk--) + DO_BORDER + /* right border */ + ptr = &scrn_ptr[right_border_start]; + pm_scanline_ptr = >IA_pm_scanline[right_border_start]; + while (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]) + DO_BORDER +} + +static void do_border_gtia10(void) +{ + int kk; + UWORD *ptr = &scrn_ptr[LBORDER_START]; + const UBYTE *pm_scanline_ptr = >IA_pm_scanline[LBORDER_START]; + ULONG background = ANTIC_cl[C_PM0] | (ANTIC_cl[C_PM0] << 16); + /* left border */ + for (kk = left_border_chars; kk; kk--) + DO_GTIA10_BORDER + WRITE_VIDEO(ptr, COLOUR(pm_lookup_ptr[*pm_scanline_ptr | 1])); /* one extra pixel, because of the right shift of gtia10*/ + /* right border */ + pm_scanline_ptr = >IA_pm_scanline[right_border_start]; + if (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]) { + ptr = &scrn_ptr[right_border_start + 1]; /*start one pixel further right because of the right shift of gtia10*/ + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[pm_scanline_ptr[1] | 1])); + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[pm_scanline_ptr[2] | 1])); + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[pm_scanline_ptr[3] | 1])); + pm_scanline_ptr += 4; + while (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]) + DO_GTIA10_BORDER + } +} + +static void do_border_gtia11(void) +{ + int kk; + UWORD *ptr = &scrn_ptr[LBORDER_START]; + const UBYTE *pm_scanline_ptr = >IA_pm_scanline[LBORDER_START]; + ULONG background = ANTIC_lookup_gtia11[0]; +#ifdef USE_COLOUR_TRANSLATION_TABLE + ANTIC_cl[C_PF3] = colour_translation_table[GTIA_COLPF3 & 0xf0]; +#else + ANTIC_cl[C_PF3] &= 0xf0f0; +#endif + ANTIC_cl[C_BAK] = (UWORD) background; + /* left border */ + for (kk = left_border_chars; kk; kk--) + DO_BORDER + /* right border */ + ptr = &scrn_ptr[right_border_start]; + pm_scanline_ptr = >IA_pm_scanline[right_border_start]; + while (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]) + DO_BORDER + GTIA_COLOUR_TO_WORD(ANTIC_cl[C_PF3],GTIA_COLPF3) + GTIA_COLOUR_TO_WORD(ANTIC_cl[C_BAK],GTIA_COLBK) +} + +static void draw_antic_0(void) +{ + UWORD *ptr = scrn_ptr + LBORDER_START; + if (GTIA_pm_dirty) { + const UBYTE *pm_scanline_ptr = >IA_pm_scanline[LBORDER_START]; + ULONG background = ANTIC_lookup_gtia9[0]; + do + DO_BORDER + while (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]); + } + else + FILL_VIDEO(ptr, ANTIC_cl[C_BAK], (RBORDER_END - LBORDER_START) * 2); +} + +static void draw_antic_0_gtia10(void) +{ + UWORD *ptr = scrn_ptr + LBORDER_START; + if (GTIA_pm_dirty) { + const UBYTE *pm_scanline_ptr = >IA_pm_scanline[LBORDER_START]; + ULONG background = ANTIC_cl[C_PM0] | (ANTIC_cl[C_PM0] << 16); + do + DO_GTIA10_BORDER + while (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]); + } + else + FILL_VIDEO(ptr, ANTIC_cl[C_PM0], (RBORDER_END - LBORDER_START) * 2); +} + +static void draw_antic_0_gtia11(void) +{ + UWORD *ptr = scrn_ptr + LBORDER_START; + if (GTIA_pm_dirty) { + const UBYTE *pm_scanline_ptr = >IA_pm_scanline[LBORDER_START]; + ULONG background = ANTIC_lookup_gtia11[0]; +#ifdef USE_COLOUR_TRANSLATION_TABLE + ANTIC_cl[C_PF3] = colour_translation_table[GTIA_COLPF3 & 0xf0]; +#else + ANTIC_cl[C_PF3] &= 0xf0f0; +#endif + ANTIC_cl[C_BAK] = (UWORD) background; + do + DO_BORDER + while (pm_scanline_ptr < >IA_pm_scanline[RBORDER_END]); + GTIA_COLOUR_TO_WORD(ANTIC_cl[C_PF3],GTIA_COLPF3) + GTIA_COLOUR_TO_WORD(ANTIC_cl[C_BAK],GTIA_COLBK) + } + else + FILL_VIDEO(ptr, ANTIC_lookup_gtia11[0], (RBORDER_END - LBORDER_START) * 2); +} + +/* ANTIC modes ------------------------------------------------------------- */ + +static const UBYTE gtia_10_lookup[] = +{L_BAK, L_BAK, L_BAK, L_BAK, L_PF0, L_PF1, L_PF2, L_PF3, + L_BAK, L_BAK, L_BAK, L_BAK, L_PF0, L_PF1, L_PF2, L_PF3}; +static const UBYTE gtia_10_pm[] = +{1, 2, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + +static void draw_an_gtia9(const ULONG *t_pm_scanline_ptr) +{ + int i = ((const UBYTE *) t_pm_scanline_ptr - GTIA_pm_scanline) & ~1; + while (i < right_border_start) { + UWORD *ptr = scrn_ptr + i; + int pixel = (an_scanline[i] << 2) + an_scanline[i + 1]; + UBYTE pm_reg; + WRITE_VIDEO_LONG((ULONG *) ptr, ANTIC_lookup_gtia9[pixel]); + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + pm_reg = pm_lookup_ptr[pm_reg]; + if (pm_reg == L_PF3) { +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[pixel | GTIA_COLPF3]); +#else + WRITE_VIDEO(ptr, pixel | (pixel << 8) | ANTIC_cl[C_PF3]); +#endif + } + else { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + i++; + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + pm_reg = pm_lookup_ptr[pm_reg]; + if (pm_reg == L_PF3) { +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr + 1, colour_translation_table[pixel | GTIA_COLPF3]); +#else + WRITE_VIDEO(ptr + 1, pixel | (pixel << 8) | ANTIC_cl[C_PF3]); +#endif + } + else { + WRITE_VIDEO(ptr + 1, COLOUR(pm_reg)); + } + } + i++; + } + do_border(); +} + +static void draw_an_gtia10(const ULONG *t_pm_scanline_ptr) +{ + int i = ((const UBYTE *) t_pm_scanline_ptr - GTIA_pm_scanline) | 1; + UWORD lookup_gtia10[16]; + lookup_gtia10[0] = ANTIC_cl[C_PM0]; + lookup_gtia10[1] = ANTIC_cl[C_PM1]; + lookup_gtia10[2] = ANTIC_cl[C_PM2]; + lookup_gtia10[3] = ANTIC_cl[C_PM3]; + lookup_gtia10[12] = lookup_gtia10[4] = ANTIC_cl[C_PF0]; + lookup_gtia10[13] = lookup_gtia10[5] = ANTIC_cl[C_PF1]; + lookup_gtia10[14] = lookup_gtia10[6] = ANTIC_cl[C_PF2]; + lookup_gtia10[15] = lookup_gtia10[7] = ANTIC_cl[C_PF3]; + lookup_gtia10[8] = lookup_gtia10[9] = lookup_gtia10[10] = lookup_gtia10[11] = ANTIC_cl[C_BAK]; + while (i < right_border_start) { + UWORD *ptr = scrn_ptr + i; + int pixel = (an_scanline[i - 1] << 2) + an_scanline[i]; + UBYTE pm_reg; + int colreg; + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + colreg = gtia_10_lookup[pixel]; + PF_COLLS(colreg) |= pm_reg; + pm_reg |= gtia_10_pm[pixel]; + WRITE_VIDEO(ptr, COLOUR(pm_lookup_ptr[pm_reg] | colreg)); + } + else { + WRITE_VIDEO(ptr, lookup_gtia10[pixel]); + } + i++; + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + colreg = gtia_10_lookup[pixel]; + PF_COLLS(colreg) |= pm_reg; + pm_reg |= gtia_10_pm[pixel]; + WRITE_VIDEO(ptr + 1, COLOUR(pm_lookup_ptr[pm_reg] | colreg)); + } + else { + WRITE_VIDEO(ptr + 1, lookup_gtia10[pixel]); + } + i++; + } + do_border_gtia10(); +} + +static void draw_an_gtia11(const ULONG *t_pm_scanline_ptr) +{ + int i = ((const UBYTE *) t_pm_scanline_ptr - GTIA_pm_scanline) & ~1; + while (i < right_border_start) { + UWORD *ptr = scrn_ptr + i; + int pixel = (an_scanline[i] << 2) + an_scanline[i + 1]; + UBYTE pm_reg; + WRITE_VIDEO_LONG((ULONG *) ptr, ANTIC_lookup_gtia11[pixel]); + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + pm_reg = pm_lookup_ptr[pm_reg]; + if (pm_reg == L_PF3) { +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[pixel ? pixel | GTIA_COLPF3 : GTIA_COLPF3 & 0xf0]); +#else + WRITE_VIDEO(ptr, pixel ? (pixel << 4) | (pixel << 12) | ANTIC_cl[C_PF3] : ANTIC_cl[C_PF3] & 0xf0f0); +#endif + } + else { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + i++; + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + pm_reg = pm_lookup_ptr[pm_reg]; + if (pm_reg == L_PF3) { +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr + 1, colour_translation_table[pixel ? pixel | GTIA_COLPF3 : GTIA_COLPF3 & 0xf0]); +#else + WRITE_VIDEO(ptr + 1, pixel ? (pixel << 4) | (pixel << 12) | ANTIC_cl[C_PF3] : ANTIC_cl[C_PF3] & 0xf0f0); +#endif + } + else { + WRITE_VIDEO(ptr + 1, COLOUR(pm_reg)); + } + } + i++; + } + do_border_gtia11(); +} + +static void draw_an_gtia_bug(const ULONG *t_pm_scanline_ptr) +{ + static const UBYTE gtia_bug_colreg[] = {L_PF0, L_PF1, L_PF2, L_PF3}; + UWORD lookup_gtia_bug[16]; + int i; + lookup_gtia_bug[0] = ANTIC_cl[C_PF0]; + lookup_gtia_bug[1] = ANTIC_cl[C_PF1]; + lookup_gtia_bug[2] = ANTIC_cl[C_PF2]; + lookup_gtia_bug[3] = ANTIC_cl[C_PF3]; + i = ((const UBYTE *) t_pm_scanline_ptr - GTIA_pm_scanline); + while (i < right_border_start) { + UWORD *ptr = scrn_ptr + i; + int pixel = an_scanline[i]; + UBYTE pm_reg; + int colreg; + pm_reg = GTIA_pm_scanline[i]; + if (pm_reg) { + colreg = gtia_bug_colreg[pixel]; + PF_COLLS(colreg) |= pm_reg; + WRITE_VIDEO(ptr, COLOUR(pm_lookup_ptr[pm_reg] | colreg)); + } + else { + WRITE_VIDEO(ptr, lookup_gtia_bug[pixel]); + } + i++; + } + do_border(); +} + +#define DEFINE_DRAW_AN(anticmode) \ + static void draw_antic_ ## anticmode ## _gtia9 (int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr)\ + {\ + prepare_an_antic_ ## anticmode (nchars, antic_memptr, t_pm_scanline_ptr);\ + draw_an_gtia9(t_pm_scanline_ptr);\ + }\ + static void draw_antic_ ## anticmode ## _gtia10 (int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr)\ + {\ + prepare_an_antic_ ## anticmode (nchars, antic_memptr, t_pm_scanline_ptr);\ + draw_an_gtia10(t_pm_scanline_ptr);\ + }\ + static void draw_antic_ ## anticmode ## _gtia11 (int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr)\ + {\ + prepare_an_antic_ ## anticmode (nchars, antic_memptr, t_pm_scanline_ptr);\ + draw_an_gtia11(t_pm_scanline_ptr);\ + } + +#define CHAR_LOOP_BEGIN do { +#define CHAR_LOOP_END } while (--nchars); + +#define DO_PMG_LORES PF_COLLS(colreg) |= pm_pixel = *c_pm_scanline_ptr++;\ + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[pm_pixel] | colreg)); + +#ifdef ALTERNATE_LOOP_COUNTERS /* speeds-up pmg in hires a bit or not? try it :) */ +#define FOUR_LOOP_BEGIN(data) data |= 0x800000; do { /* data becomes negative after four data <<= 2 */ +#define FOUR_LOOP_END(data) } while (data >= 0); +#else +#define FOUR_LOOP_BEGIN(data) int k = 4; do { +#define FOUR_LOOP_END(data) } while (--k); +#endif + +#ifdef USE_COLOUR_TRANSLATION_TABLE + +#define INIT_HIRES hires_norm(0x00) = ANTIC_cl[C_PF2];\ + hires_norm(0x40) = hires_norm(0x10) = hires_norm(0x04) = (ANTIC_cl[C_PF2] & BYTE0_MASK) | (ANTIC_cl[C_HI2] & BYTE1_MASK);\ + hires_norm(0x80) = hires_norm(0x20) = hires_norm(0x08) = (ANTIC_cl[C_HI2] & BYTE0_MASK) | (ANTIC_cl[C_PF2] & BYTE1_MASK);\ + hires_norm(0xc0) = hires_norm(0x30) = hires_norm(0x0c) = ANTIC_cl[C_HI2]; + +#define DO_PMG_HIRES(data) {\ + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr;\ + int pm_pixel;\ + int mask;\ + FOUR_LOOP_BEGIN(data)\ + pm_pixel = *c_pm_scanline_ptr++;\ + if (data & 0xc0)\ + PF2PM |= pm_pixel;\ + mask = hires_mask(data & 0xc0);\ + pm_pixel = pm_lookup_ptr[pm_pixel] | L_PF2;\ + WRITE_VIDEO(ptr++, (COLOUR(pm_pixel) & mask) | (COLOUR(pm_pixel + (L_HI2 - L_PF2)) & ~mask));\ + data <<= 2;\ + FOUR_LOOP_END(data)\ +} + +#else /* USE_COLOUR_TRANSLATION_TABLE */ + +#define INIT_HIRES hires_norm(0x00) = ANTIC_cl[C_PF2];\ + hires_norm(0x40) = hires_norm(0x10) = hires_norm(0x04) = (ANTIC_cl[C_PF2] & HIRES_MASK_01) | hires_lum(0x40);\ + hires_norm(0x80) = hires_norm(0x20) = hires_norm(0x08) = (ANTIC_cl[C_PF2] & HIRES_MASK_10) | hires_lum(0x80);\ + hires_norm(0xc0) = hires_norm(0x30) = hires_norm(0x0c) = (ANTIC_cl[C_PF2] & 0xf0f0) | hires_lum(0xc0); + +#define INIT_ARTIF_NEW art_lookup_new[0] = art_lookup_new[1] = art_lookup_new[2] = art_lookup_new[3] = \ + art_lookup_new[16] = art_lookup_new[17] = art_lookup_new[18] = art_lookup_new[19] = \ + art_lookup_new[32] = art_lookup_new[33] = art_lookup_new[34] = art_lookup_new[35] = \ + art_lookup_new[48] = art_lookup_new[49] = art_lookup_new[50] = art_lookup_new[51] = ANTIC_cl[C_PF2];\ + art_lookup_new[7] = art_lookup_new[23] = art_lookup_new[39] = art_lookup_new[55] = (ANTIC_cl[C_PF2] & HIRES_MASK_01) | hires_lum(0x40);\ + art_lookup_new[56] = art_lookup_new[57] = art_lookup_new[58] = art_lookup_new[59] = (ANTIC_cl[C_PF2] & HIRES_MASK_10) | hires_lum(0x80);\ + art_lookup_new[12] = art_lookup_new[13] = art_lookup_new[14] = art_lookup_new[15] = \ + art_lookup_new[28] = art_lookup_new[29] = art_lookup_new[30] = art_lookup_new[31] = \ + art_lookup_new[44] = art_lookup_new[45] = art_lookup_new[46] = art_lookup_new[47] = \ + art_lookup_new[60] = art_lookup_new[61] = art_lookup_new[62] = art_lookup_new[63] = (ANTIC_cl[C_PF2] & 0xf0f0) | hires_lum(0xc0);\ + if ((ANTIC_cl[C_PF2] & 0x0F00) != (ANTIC_cl[C_PF1] & 0x0F00)) { \ + art_lookup_new[4] = art_lookup_new[5] = art_lookup_new[36] = art_lookup_new[37] = \ + art_lookup_new[52] = art_lookup_new[53 ]= ((art_colour1_new & BYTE1_MASK & ~(HIRES_LUM_01))) | hires_lum(0x40) | (ANTIC_cl[C_PF2] & BYTE0_MASK);\ + art_lookup_new[20] = art_lookup_new[21] = (art_colour1_new & 0xf0f0) | hires_lum(0xc0);\ + art_lookup_new[8] = art_lookup_new[9] = art_lookup_new[11] = art_lookup_new[40] = \ + art_lookup_new[43] = ((art_colour2_new & BYTE0_MASK & ~(HIRES_LUM_10))) | hires_lum(0x80) | (ANTIC_cl[C_PF2] & BYTE1_MASK);\ + art_lookup_new[10] = art_lookup_new[41] = art_lookup_new[42] = (art_colour2_new & 0xf0f0) | hires_lum(0xc0);\ + }\ + else {\ + art_lookup_new[4] = art_lookup_new[5] = art_lookup_new[36] = art_lookup_new[37] = \ + art_lookup_new[52] = art_lookup_new[53 ]= art_lookup_new[20] = art_lookup_new[21] = \ + art_lookup_new[8] = art_lookup_new[9] = art_lookup_new[11] = art_lookup_new[40] = \ + art_lookup_new[43] = art_lookup_new[10] = art_lookup_new[41] = art_lookup_new[42] = ANTIC_cl[C_PF2];\ + }\ + art_lookup_new[6] = art_lookup_new[22] = art_lookup_new[38] = art_lookup_new[54] = (ANTIC_cl[C_PF2] & HIRES_MASK_01) | hires_lum(0x40);\ + art_lookup_new[24] = art_lookup_new[25] = art_lookup_new[26] = art_lookup_new[27] = (ANTIC_cl[C_PF2] & HIRES_MASK_10) | hires_lum(0x80); + +#define DO_PMG_HIRES(data) {\ + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr;\ + int pm_pixel;\ + FOUR_LOOP_BEGIN(data)\ + pm_pixel = *c_pm_scanline_ptr++;\ + if (data & 0xc0)\ + PF2PM |= pm_pixel;\ + WRITE_VIDEO(ptr++, (COLOUR(pm_lookup_ptr[pm_pixel] | L_PF2) & hires_mask(data & 0xc0)) | hires_lum(data & 0xc0));\ + data <<= 2;\ + FOUR_LOOP_END(data)\ +} + +#define DO_PMG_HIRES_NEW(data, tally) {\ + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr;\ + int pm_pixel;\ + FOUR_LOOP_BEGIN(data)\ + pm_pixel = *c_pm_scanline_ptr++;\ + if (pm_pixel) \ + WRITE_VIDEO(ptr++, (COLOUR(pm_lookup_ptr[pm_pixel] | L_PF2)));\ + else\ + WRITE_VIDEO(ptr++, art_lookup_new[(tally & 0xfc0000) >> 18]); \ + data <<= 2;\ + tally <<= 6;\ + FOUR_LOOP_END(data)\ +} + +#endif /* USE_COLOUR_TRANSLATION_TABLE */ + +#ifdef NEW_CYCLE_EXACT +#define ADD_FONT_CYCLES +#else +#define ADD_FONT_CYCLES ANTIC_xpos += font_cycles[md] +#endif + +#ifdef PAGED_MEM + +#define INIT_ANTIC_2 int t_chbase = (dctr ^ chbase_20) & 0xfc07;\ + ADD_FONT_CYCLES;\ + blank_lookup[0x60] = (anticmode == 2 || dctr & 0xe) ? 0xff : 0;\ + blank_lookup[0x00] = blank_lookup[0x20] = blank_lookup[0x40] = (dctr & 0xe) == 8 ? 0 : 0xff; + +#define GET_CHDATA_ANTIC_2 chdata = (screendata & invert_mask) ? 0xff : 0;\ + if (blank_lookup[screendata & blank_mask])\ + chdata ^= MEMORY_dGetByte(t_chbase + ((UWORD) (screendata & 0x7f) << 3)); + +#else /* PAGED_MEM */ + +#define INIT_ANTIC_2 const UBYTE *chptr;\ + if (ANTIC_xe_ptr != NULL && chbase_20 < 0x8000 && chbase_20 >= 0x4000)\ + chptr = ANTIC_xe_ptr + ((dctr ^ chbase_20) & 0x3c07);\ + else\ + chptr = MEMORY_mem + ((dctr ^ chbase_20) & 0xfc07);\ + ADD_FONT_CYCLES;\ + blank_lookup[0x60] = (anticmode == 2 || dctr & 0xe) ? 0xff : 0;\ + blank_lookup[0x00] = blank_lookup[0x20] = blank_lookup[0x40] = (dctr & 0xe) == 8 ? 0 : 0xff; + +#define GET_CHDATA_ANTIC_2 chdata = (screendata & invert_mask) ? 0xff : 0;\ + if (blank_lookup[screendata & blank_mask])\ + chdata ^= chptr[(screendata & 0x7f) << 3]; + +#endif /* PAGED_MEM */ + +static void draw_antic_2(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_BACKGROUND_6 + INIT_ANTIC_2 + INIT_HIRES + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int chdata; + + GET_CHDATA_ANTIC_2 + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + if (chdata) { + WRITE_VIDEO(ptr++, hires_norm(chdata & 0xc0)); + WRITE_VIDEO(ptr++, hires_norm(chdata & 0x30)); + WRITE_VIDEO(ptr++, hires_norm(chdata & 0x0c)); + WRITE_VIDEO(ptr++, hires_norm((chdata & 0x03) << 2)); + } + else + DRAW_BACKGROUND(C_PF2) + } + else + DO_PMG_HIRES(chdata) + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +#ifdef NEW_CYCLE_EXACT +static void draw_antic_2_dmactl_bug(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_BACKGROUND_6 + INIT_ANTIC_2 + (void)chptr; /* suppress GCC -Wunused-but-set-variable warning */ + INIT_HIRES + + CHAR_LOOP_BEGIN + /* UBYTE screendata = *antic_memptr++; */ + +/* In this glitched mode, the output depends on the MSB of the last char */ +/* drawn in the previous line, and invert_mask. It seems to reveal that */ +/* ANTIC has a latch that is set by the MSB of the char that controls an */ +/* invert gate. */ +/* When this gate was set on the last line and the next line is glitched */ +/* it remains set and the whole line appears inverted */ +/* We'll use this modeline to draw antic f glitched as well, and set */ +/* dmactl_bug_chdata to 0 */ + int chdata = (dmactl_bug_chdata & invert_mask) ? 0xff : 0; + /* GET_CHDATA_ANTIC_2 */ + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + + if (chdata) { + WRITE_VIDEO(ptr++, hires_norm(chdata & 0xc0)); + WRITE_VIDEO(ptr++, hires_norm(chdata & 0x30)); + WRITE_VIDEO(ptr++, hires_norm(chdata & 0x0c)); + WRITE_VIDEO(ptr++, hires_norm((chdata & 0x03) << 2)); + } + else + DRAW_BACKGROUND(C_PF2) + } + else + DO_PMG_HIRES(chdata) + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} +#endif + +static void draw_antic_2_artif(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + ULONG screendata_tally; + INIT_ANTIC_2 + { + UBYTE screendata = *antic_memptr++; + UBYTE chdata; + GET_CHDATA_ANTIC_2 + screendata_tally = chdata; + } + setup_art_colours(); + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + ULONG chdata; + + GET_CHDATA_ANTIC_2 + screendata_tally <<= 8; + screendata_tally |= chdata; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + DRAW_ARTIF + else { + chdata = screendata_tally >> 8; + DO_PMG_HIRES(chdata) + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +#ifndef USE_COLOUR_TRANSLATION_TABLE +static void draw_antic_2_artif_new(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + ULONG screendata_tally; + ULONG pmtally; + UBYTE screendata = *antic_memptr++; + UBYTE chdata; + INIT_ANTIC_2 + INIT_ARTIF_NEW + GET_CHDATA_ANTIC_2 + screendata_tally = chdata; + setup_art_colours(); + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + ULONG chdata; + + GET_CHDATA_ANTIC_2 + screendata_tally <<= 8; + screendata_tally |= chdata; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + DRAW_ARTIF_NEW + else { + chdata = screendata_tally >> 8; + pmtally = ((screendata_tally & 0x03f000) << 6) | + ((screendata_tally & 0x00fc00) << 2) | + ((screendata_tally & 0x003f00) >> 2) | + ((screendata_tally & 0x000fc0) >> 6); + DO_PMG_HIRES_NEW(chdata,pmtally) + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} +#endif + +static void prepare_an_antic_2(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); +#ifdef PAGED_MEM + int t_chbase = (dctr ^ chbase_20) & 0xfc07; +#else + const UBYTE *chptr; + if (ANTIC_xe_ptr != NULL && chbase_20 < 0x8000 && chbase_20 >= 0x4000) + chptr = ANTIC_xe_ptr + ((dctr ^ chbase_20) & 0x3c07); + else + chptr = MEMORY_mem + ((dctr ^ chbase_20) & 0xfc07); +#endif + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int chdata; + GET_CHDATA_ANTIC_2 + *an_ptr++ = chdata >> 6; + *an_ptr++ = (chdata >> 4) & 3; + *an_ptr++ = (chdata >> 2) & 3; + *an_ptr++ = chdata & 3; + CHAR_LOOP_END +} + +static void draw_antic_2_gtia9(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_ANTIC_2 + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_2(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia9(t_pm_scanline_ptr); + return; + } + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int chdata; + + GET_CHDATA_ANTIC_2 + WRITE_VIDEO_LONG((ULONG *) ptr, ANTIC_lookup_gtia9[chdata >> 4]); + WRITE_VIDEO_LONG((ULONG *) ptr + 1, ANTIC_lookup_gtia9[chdata & 0xf]); + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + ptr += 4; + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int k = 4; + UBYTE pm_reg; + do { + pm_reg = pm_lookup_ptr[*c_pm_scanline_ptr++]; + if (pm_reg) { + if (pm_reg == L_PF3) { + UBYTE tmp = k > 2 ? chdata >> 4 : chdata & 0xf; +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[tmp | GTIA_COLPF3]); +#else + WRITE_VIDEO(ptr, tmp | ((UWORD)tmp << 8) | ANTIC_cl[C_PF3]); +#endif + } + else + { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + ptr++; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +static void draw_antic_2_gtia10(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ +#ifdef WORDS_UNALIGNED_OK + ULONG lookup_gtia10[16]; +#else + UWORD lookup_gtia10[16]; +#endif + INIT_ANTIC_2 + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_2(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia10(t_pm_scanline_ptr); + return; + } + +#ifdef WORDS_UNALIGNED_OK + lookup_gtia10[0] = ANTIC_cl[C_PM0] | (ANTIC_cl[C_PM0] << 16); + lookup_gtia10[1] = ANTIC_cl[C_PM1] | (ANTIC_cl[C_PM1] << 16); + lookup_gtia10[2] = ANTIC_cl[C_PM2] | (ANTIC_cl[C_PM2] << 16); + lookup_gtia10[3] = ANTIC_cl[C_PM3] | (ANTIC_cl[C_PM3] << 16); + lookup_gtia10[12] = lookup_gtia10[4] = ANTIC_cl[C_PF0] | (ANTIC_cl[C_PF0] << 16); + lookup_gtia10[13] = lookup_gtia10[5] = ANTIC_cl[C_PF1] | (ANTIC_cl[C_PF1] << 16); + lookup_gtia10[14] = lookup_gtia10[6] = ANTIC_cl[C_PF2] | (ANTIC_cl[C_PF2] << 16); + lookup_gtia10[15] = lookup_gtia10[7] = ANTIC_cl[C_PF3] | (ANTIC_cl[C_PF3] << 16); + lookup_gtia10[8] = lookup_gtia10[9] = lookup_gtia10[10] = lookup_gtia10[11] = ANTIC_lookup_gtia9[0]; +#else + lookup_gtia10[0] = ANTIC_cl[C_PM0]; + lookup_gtia10[1] = ANTIC_cl[C_PM1]; + lookup_gtia10[2] = ANTIC_cl[C_PM2]; + lookup_gtia10[3] = ANTIC_cl[C_PM3]; + lookup_gtia10[12] = lookup_gtia10[4] = ANTIC_cl[C_PF0]; + lookup_gtia10[13] = lookup_gtia10[5] = ANTIC_cl[C_PF1]; + lookup_gtia10[14] = lookup_gtia10[6] = ANTIC_cl[C_PF2]; + lookup_gtia10[15] = lookup_gtia10[7] = ANTIC_cl[C_PF3]; + lookup_gtia10[8] = lookup_gtia10[9] = lookup_gtia10[10] = lookup_gtia10[11] = ANTIC_cl[C_BAK]; +#endif + ptr++; + t_pm_scanline_ptr = (const ULONG *) (((const UBYTE *) t_pm_scanline_ptr) + 1); + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int chdata; + + GET_CHDATA_ANTIC_2 + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + DO_GTIA_BYTE(ptr, lookup_gtia10, chdata) + ptr += 4; + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + UBYTE t_screendata = chdata >> 4; + do { + colreg = gtia_10_lookup[t_screendata]; + PF_COLLS(colreg) |= pm_pixel = *c_pm_scanline_ptr++; + pm_pixel |= gtia_10_pm[t_screendata]; + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[pm_pixel] | colreg)); + if (k == 3) + t_screendata = chdata & 0x0f; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border_gtia10(); +} + +static void draw_antic_2_gtia11(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_ANTIC_2 + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_2(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia11(t_pm_scanline_ptr); + return; + } + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int chdata; + + GET_CHDATA_ANTIC_2 + WRITE_VIDEO_LONG((ULONG *) ptr, ANTIC_lookup_gtia11[chdata >> 4]); + WRITE_VIDEO_LONG((ULONG *) ptr + 1, ANTIC_lookup_gtia11[chdata & 0xf]); + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + ptr += 4; + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int k = 4; + UBYTE pm_reg; + do { + pm_reg = pm_lookup_ptr[*c_pm_scanline_ptr++]; + if (pm_reg) { + if (pm_reg == L_PF3) { + UBYTE tmp = k > 2 ? chdata & 0xf0 : chdata << 4; +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[tmp ? tmp | GTIA_COLPF3 : GTIA_COLPF3 & 0xf0]); +#else + WRITE_VIDEO(ptr, tmp ? tmp | ((UWORD)tmp << 8) | ANTIC_cl[C_PF3] : ANTIC_cl[C_PF3] & 0xf0f0); +#endif + } + else + { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + ptr++; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border_gtia11(); +} + +static void draw_antic_2_gtia_bug(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + prepare_an_antic_2(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia_bug(t_pm_scanline_ptr); + return; +} + +static void draw_antic_4(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_BACKGROUND_8 +#ifdef PAGED_MEM + UWORD t_chbase = ((anticmode == 4 ? dctr : dctr >> 1) ^ chbase_20) & 0xfc07; +#else + const UBYTE *chptr; + if (ANTIC_xe_ptr != NULL && chbase_20 < 0x8000 && chbase_20 >= 0x4000) + chptr = ANTIC_xe_ptr + (((anticmode == 4 ? dctr : dctr >> 1) ^ chbase_20) & 0x3c07); + else + chptr = MEMORY_mem + (((anticmode == 4 ? dctr : dctr >> 1) ^ chbase_20) & 0xfc07); +#endif + + ADD_FONT_CYCLES; + lookup2[0x0f] = lookup2[0x00] = ANTIC_cl[C_BAK]; + lookup2[0x4f] = lookup2[0x1f] = lookup2[0x13] = + lookup2[0x40] = lookup2[0x10] = lookup2[0x04] = lookup2[0x01] = ANTIC_cl[C_PF0]; + lookup2[0x8f] = lookup2[0x2f] = lookup2[0x17] = lookup2[0x11] = + lookup2[0x80] = lookup2[0x20] = lookup2[0x08] = lookup2[0x02] = ANTIC_cl[C_PF1]; + lookup2[0xc0] = lookup2[0x30] = lookup2[0x0c] = lookup2[0x03] = ANTIC_cl[C_PF2]; + lookup2[0xcf] = lookup2[0x3f] = lookup2[0x1b] = lookup2[0x12] = ANTIC_cl[C_PF3]; + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + const UWORD *lookup; + UBYTE chdata; + if (screendata & 0x80) + lookup = lookup2 + 0xf; + else + lookup = lookup2; +#ifdef PAGED_MEM + chdata = MEMORY_dGetByte(t_chbase + ((UWORD) (screendata & 0x7f) << 3)); +#else + chdata = chptr[(screendata & 0x7f) << 3]; +#endif + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + if (chdata) { + WRITE_VIDEO(ptr++, lookup[chdata & 0xc0]); + WRITE_VIDEO(ptr++, lookup[chdata & 0x30]); + WRITE_VIDEO(ptr++, lookup[chdata & 0x0c]); + WRITE_VIDEO(ptr++, lookup[chdata & 0x03]); + } + else + DRAW_BACKGROUND(C_BAK) + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + playfield_lookup[0xc0] = screendata & 0x80 ? L_PF3 : L_PF2; + do { + colreg = playfield_lookup[chdata & 0xc0]; + DO_PMG_LORES + chdata <<= 2; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + playfield_lookup[0xc0] = L_PF2; + do_border(); +} + +static void prepare_an_antic_4(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); +#ifdef PAGED_MEM + UWORD t_chbase = ((anticmode == 4 ? dctr : dctr >> 1) ^ chbase_20) & 0xfc07; +#else + const UBYTE *chptr; + if (ANTIC_xe_ptr != NULL && chbase_20 < 0x8000 && chbase_20 >= 0x4000) + chptr = ANTIC_xe_ptr + (((anticmode == 4 ? dctr : dctr >> 1) ^ chbase_20) & 0x3c07); + else + chptr = MEMORY_mem + (((anticmode == 4 ? dctr : dctr >> 1) ^ chbase_20) & 0xfc07); +#endif + + ADD_FONT_CYCLES; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + UBYTE an; + UBYTE chdata; +#ifdef PAGED_MEM + chdata = MEMORY_dGetByte(t_chbase + ((UWORD) (screendata & 0x7f) << 3)); +#else + chdata = chptr[(screendata & 0x7f) << 3]; +#endif + an = mode_e_an_lookup[chdata & 0xc0]; + *an_ptr++ = (an == 2 && screendata & 0x80) ? 3 : an; + an = mode_e_an_lookup[chdata & 0x30]; + *an_ptr++ = (an == 2 && screendata & 0x80) ? 3 : an; + an = mode_e_an_lookup[chdata & 0x0c]; + *an_ptr++ = (an == 2 && screendata & 0x80) ? 3 : an; + an = mode_e_an_lookup[chdata & 0x03]; + *an_ptr++ = (an == 2 && screendata & 0x80) ? 3 : an; + CHAR_LOOP_END +} + +DEFINE_DRAW_AN(4) + +static void draw_antic_6(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ +#ifdef PAGED_MEM + UWORD t_chbase = (anticmode == 6 ? dctr & 7 : dctr >> 1) ^ chbase_20; +#else + const UBYTE *chptr; + if (ANTIC_xe_ptr != NULL && chbase_20 < 0x8000 && chbase_20 >= 0x4000) + chptr = ANTIC_xe_ptr + (((anticmode == 6 ? dctr & 7 : dctr >> 1) ^ chbase_20) - 0x4000); + else + chptr = MEMORY_mem + ((anticmode == 6 ? dctr & 7 : dctr >> 1) ^ chbase_20); +#endif + + ADD_FONT_CYCLES; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + UBYTE chdata; + UWORD colour; + int kk = 2; + colour = COLOUR((playfield_lookup + 0x40)[screendata & 0xc0]); +#ifdef PAGED_MEM + chdata = MEMORY_dGetByte(t_chbase + ((UWORD) (screendata & 0x3f) << 3)); +#else + chdata = chptr[(screendata & 0x3f) << 3]; +#endif + do { + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + if (chdata & 0xf0) { + if (chdata & 0x80) { + WRITE_VIDEO(ptr++, colour); + } + else { + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + } + if (chdata & 0x40) { + WRITE_VIDEO(ptr++, colour); + } + else { + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + } + if (chdata & 0x20) { + WRITE_VIDEO(ptr++, colour); + } + else { + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + } + if (chdata & 0x10) { + WRITE_VIDEO(ptr++, colour); + } + else { + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + } + } + else { + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + WRITE_VIDEO(ptr++, ANTIC_cl[C_BAK]); + } + chdata <<= 4; + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + UBYTE setcol = (playfield_lookup + 0x40)[screendata & 0xc0]; + int colreg; + int k = 4; + do { + colreg = chdata & 0x80 ? setcol : L_BAK; + DO_PMG_LORES + chdata <<= 1; + } while (--k); + + } + t_pm_scanline_ptr++; + } while (--kk); + CHAR_LOOP_END + do_border(); +} + +static void prepare_an_antic_6(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); +#ifdef PAGED_MEM + UWORD t_chbase = (anticmode == 6 ? dctr & 7 : dctr >> 1) ^ chbase_20; +#else + const UBYTE *chptr; + if (ANTIC_xe_ptr != NULL && chbase_20 < 0x8000 && chbase_20 >= 0x4000) + chptr = ANTIC_xe_ptr + (((anticmode == 6 ? dctr & 7 : dctr >> 1) ^ chbase_20) - 0x4000); + else + chptr = MEMORY_mem + ((anticmode == 6 ? dctr & 7 : dctr >> 1) ^ chbase_20); +#endif + + ADD_FONT_CYCLES; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + UBYTE an = screendata >> 6; + UBYTE chdata; +#ifdef PAGED_MEM + chdata = MEMORY_dGetByte(t_chbase + ((UWORD) (screendata & 0x3f) << 3)); +#else + chdata = chptr[(screendata & 0x3f) << 3]; +#endif + *an_ptr++ = chdata & 0x80 ? an : 0; + *an_ptr++ = chdata & 0x40 ? an : 0; + *an_ptr++ = chdata & 0x20 ? an : 0; + *an_ptr++ = chdata & 0x10 ? an : 0; + *an_ptr++ = chdata & 0x08 ? an : 0; + *an_ptr++ = chdata & 0x04 ? an : 0; + *an_ptr++ = chdata & 0x02 ? an : 0; + *an_ptr++ = chdata & 0x01 ? an : 0; + CHAR_LOOP_END +} + +DEFINE_DRAW_AN(6) + +static void draw_antic_8(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + lookup2[0x00] = ANTIC_cl[C_BAK]; + lookup2[0x40] = ANTIC_cl[C_PF0]; + lookup2[0x80] = ANTIC_cl[C_PF1]; + lookup2[0xc0] = ANTIC_cl[C_PF2]; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int kk = 4; + do { + if ((const UBYTE *) t_pm_scanline_ptr >= GTIA_pm_scanline + 4 * (48 - RCHOP)) + break; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + UWORD data = lookup2[screendata & 0xc0]; + WRITE_VIDEO(ptr++, data); + WRITE_VIDEO(ptr++, data); + WRITE_VIDEO(ptr++, data); + WRITE_VIDEO(ptr++, data); + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg = playfield_lookup[screendata & 0xc0]; + int k = 4; + do { + DO_PMG_LORES + } while (--k); + } + screendata <<= 2; + t_pm_scanline_ptr++; + } while (--kk); + CHAR_LOOP_END + do_border(); +} + +static void prepare_an_antic_8(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int kk = 4; + do { + UBYTE data = mode_e_an_lookup[screendata & 0xc0]; + *an_ptr++ = data; + *an_ptr++ = data; + *an_ptr++ = data; + *an_ptr++ = data; + screendata <<= 2; + } while (--kk); + CHAR_LOOP_END +} + +DEFINE_DRAW_AN(8) + +static void draw_antic_9(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + lookup2[0x00] = ANTIC_cl[C_BAK]; + lookup2[0x80] = lookup2[0x40] = ANTIC_cl[C_PF0]; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int kk = 4; + do { + if ((const UBYTE *) t_pm_scanline_ptr >= GTIA_pm_scanline + 4 * (48 - RCHOP)) + break; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + WRITE_VIDEO(ptr++, lookup2[screendata & 0x80]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x80]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x40]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x40]); + screendata <<= 2; + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + do { + colreg = (screendata & 0x80) ? L_PF0 : L_BAK; + DO_PMG_LORES + if (k & 0x01) + screendata <<= 1; + } while (--k); + } + t_pm_scanline_ptr++; + } while (--kk); + CHAR_LOOP_END + do_border(); +} + +/* ANTIC modes 9, b and c use BAK and PF0 colours only so they're not visible in GTIA modes */ + +static void draw_antic_9_gtia9(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + draw_antic_0(); +} + +static void draw_antic_9_gtia10(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + draw_antic_0_gtia10(); +} + +static void draw_antic_9_gtia11(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + draw_antic_0_gtia11(); +} + +static void draw_antic_a(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + lookup2[0x00] = ANTIC_cl[C_BAK]; + lookup2[0x40] = lookup2[0x10] = ANTIC_cl[C_PF0]; + lookup2[0x80] = lookup2[0x20] = ANTIC_cl[C_PF1]; + lookup2[0xc0] = lookup2[0x30] = ANTIC_cl[C_PF2]; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int kk = 2; + do { + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + WRITE_VIDEO(ptr++, lookup2[screendata & 0xc0]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0xc0]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x30]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x30]); + screendata <<= 4; + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + do { + colreg = playfield_lookup[screendata & 0xc0]; + DO_PMG_LORES + if (k & 0x01) + screendata <<= 2; + } while (--k); + } + t_pm_scanline_ptr++; + } while (--kk); + CHAR_LOOP_END + do_border(); +} + +static void prepare_an_antic_a(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + UBYTE data = mode_e_an_lookup[screendata & 0xc0]; + *an_ptr++ = data; + *an_ptr++ = data; + data = mode_e_an_lookup[screendata & 0x30]; + *an_ptr++ = data; + *an_ptr++ = data; + data = mode_e_an_lookup[screendata & 0x0c]; + *an_ptr++ = data; + *an_ptr++ = data; + data = mode_e_an_lookup[screendata & 0x03]; + *an_ptr++ = data; + *an_ptr++ = data; + CHAR_LOOP_END +} + +DEFINE_DRAW_AN(a) + +static void draw_antic_c(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + lookup2[0x00] = ANTIC_cl[C_BAK]; + lookup2[0x80] = lookup2[0x40] = lookup2[0x20] = lookup2[0x10] = ANTIC_cl[C_PF0]; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + int kk = 2; + do { + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + WRITE_VIDEO(ptr++, lookup2[screendata & 0x80]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x40]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x20]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x10]); + screendata <<= 4; + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + do { + colreg = (screendata & 0x80) ? L_PF0 : L_BAK; + DO_PMG_LORES + screendata <<= 1; + } while (--k); + } + t_pm_scanline_ptr++; + } while (--kk); + CHAR_LOOP_END + do_border(); +} + +static void draw_antic_e(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_BACKGROUND_8 + lookup2[0x00] = ANTIC_cl[C_BAK]; + lookup2[0x40] = lookup2[0x10] = lookup2[0x04] = lookup2[0x01] = ANTIC_cl[C_PF0]; + lookup2[0x80] = lookup2[0x20] = lookup2[0x08] = lookup2[0x02] = ANTIC_cl[C_PF1]; + lookup2[0xc0] = lookup2[0x30] = lookup2[0x0c] = lookup2[0x03] = ANTIC_cl[C_PF2]; + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + if (screendata) { + WRITE_VIDEO(ptr++, lookup2[screendata & 0xc0]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x30]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x0c]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x03]); + } + else + DRAW_BACKGROUND(C_BAK) + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + do { + colreg = playfield_lookup[screendata & 0xc0]; + DO_PMG_LORES + screendata <<= 2; + } while (--k); + + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +static void prepare_an_antic_e(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + *an_ptr++ = mode_e_an_lookup[screendata & 0xc0]; + *an_ptr++ = mode_e_an_lookup[screendata & 0x30]; + *an_ptr++ = mode_e_an_lookup[screendata & 0x0c]; + *an_ptr++ = mode_e_an_lookup[screendata & 0x03]; + CHAR_LOOP_END +} + +static void draw_antic_e_gtia9(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + ULONG lookup[16]; + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_e(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia9(t_pm_scanline_ptr); + return; + } + lookup[0] = lookup[1] = lookup[4] = lookup[5] = ANTIC_lookup_gtia9[0]; + lookup[2] = lookup[6] = ANTIC_lookup_gtia9[1]; + lookup[3] = lookup[7] = ANTIC_lookup_gtia9[2]; + lookup[8] = lookup[9] = ANTIC_lookup_gtia9[4]; + lookup[10] = ANTIC_lookup_gtia9[5]; + lookup[11] = ANTIC_lookup_gtia9[6]; + lookup[12] = lookup[13] = ANTIC_lookup_gtia9[8]; + lookup[14] = ANTIC_lookup_gtia9[9]; + lookup[15] = ANTIC_lookup_gtia9[10]; + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + WRITE_VIDEO_LONG((ULONG *) ptr, lookup[screendata >> 4]); + WRITE_VIDEO_LONG((ULONG *) ptr + 1, lookup[screendata & 0xf]); + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + ptr += 4; + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int k = 4; + UBYTE pm_reg; + do { + pm_reg = pm_lookup_ptr[*c_pm_scanline_ptr++]; + if (pm_reg) { + if (pm_reg == L_PF3) { + UBYTE tmp = k > 2 ? screendata >> 4 : screendata & 0xf; +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[tmp | GTIA_COLPF3]); +#else + WRITE_VIDEO(ptr, tmp | ((UWORD)tmp << 8) | ANTIC_cl[C_PF3]); +#endif + } + else + { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + ptr++; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +static void draw_antic_e_gtia10 (int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + prepare_an_antic_e(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia10(t_pm_scanline_ptr); +} +static void draw_antic_e_gtia11 (int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + prepare_an_antic_e(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia11(t_pm_scanline_ptr); +} + +static void draw_antic_f(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + INIT_BACKGROUND_6 + INIT_HIRES + + CHAR_LOOP_BEGIN + int screendata = *antic_memptr++; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + if (screendata) { + WRITE_VIDEO(ptr++, hires_norm(screendata & 0xc0)); + WRITE_VIDEO(ptr++, hires_norm(screendata & 0x30)); + WRITE_VIDEO(ptr++, hires_norm(screendata & 0x0c)); + WRITE_VIDEO(ptr++, hires_norm((screendata & 0x03) << 2)); + } + else + DRAW_BACKGROUND(C_PF2) + } + else + DO_PMG_HIRES(screendata) + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +static void draw_antic_f_artif(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + ULONG screendata_tally = *antic_memptr++; + + setup_art_colours(); + CHAR_LOOP_BEGIN + int screendata = *antic_memptr++; + screendata_tally <<= 8; + screendata_tally |= screendata; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + DRAW_ARTIF + else { + screendata = antic_memptr[-2]; + DO_PMG_HIRES(screendata) + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +#ifndef USE_COLOUR_TRANSLATION_TABLE +static void draw_antic_f_artif_new(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + ULONG pmtally; + ULONG screendata_tally = *antic_memptr++; + INIT_ARTIF_NEW + + setup_art_colours(); + CHAR_LOOP_BEGIN + int screendata = *antic_memptr++; + screendata_tally <<= 8; + screendata_tally |= screendata; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + DRAW_ARTIF_NEW + else { + screendata = antic_memptr[-2]; + pmtally = ((screendata_tally & 0x03f000) << 6) | + ((screendata_tally & 0x00fc00) << 2) | + ((screendata_tally & 0x003f00) >> 2) | + ((screendata_tally & 0x000fc0) >> 6); + DO_PMG_HIRES_NEW(screendata,pmtally) + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} +#endif + +static void prepare_an_antic_f(int nchars, const UBYTE *antic_memptr, const ULONG *t_pm_scanline_ptr) +{ + UBYTE *an_ptr = (UBYTE *) t_pm_scanline_ptr + (an_scanline - GTIA_pm_scanline); + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + *an_ptr++ = screendata >> 6; + *an_ptr++ = (screendata >> 4) & 3; + *an_ptr++ = (screendata >> 2) & 3; + *an_ptr++ = screendata & 3; + CHAR_LOOP_END +} + +static void draw_antic_f_gtia9(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_f(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia9(t_pm_scanline_ptr); + return; + } + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + WRITE_VIDEO_LONG((ULONG *) ptr, ANTIC_lookup_gtia9[screendata >> 4]); + WRITE_VIDEO_LONG((ULONG *) ptr + 1, ANTIC_lookup_gtia9[screendata & 0xf]); + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + ptr += 4; + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int k = 4; + UBYTE pm_reg; + do { + pm_reg = pm_lookup_ptr[*c_pm_scanline_ptr++]; + if (pm_reg) { + if (pm_reg == L_PF3) { + UBYTE tmp = k > 2 ? screendata >> 4 : screendata & 0xf; +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[tmp | GTIA_COLPF3]); +#else + WRITE_VIDEO(ptr, tmp | ((UWORD)tmp << 8) | ANTIC_cl[C_PF3]); +#endif + } + else { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + ptr++; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +static void draw_antic_f_gtia10(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ +#ifdef WORDS_UNALIGNED_OK + ULONG lookup_gtia10[16]; +#else + UWORD lookup_gtia10[16]; +#endif + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_f(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia10(t_pm_scanline_ptr); + return; + } +#ifdef WORDS_UNALIGNED_OK + lookup_gtia10[0] = ANTIC_cl[C_PM0] | (ANTIC_cl[C_PM0] << 16); + lookup_gtia10[1] = ANTIC_cl[C_PM1] | (ANTIC_cl[C_PM1] << 16); + lookup_gtia10[2] = ANTIC_cl[C_PM2] | (ANTIC_cl[C_PM2] << 16); + lookup_gtia10[3] = ANTIC_cl[C_PM3] | (ANTIC_cl[C_PM3] << 16); + lookup_gtia10[12] = lookup_gtia10[4] = ANTIC_cl[C_PF0] | (ANTIC_cl[C_PF0] << 16); + lookup_gtia10[13] = lookup_gtia10[5] = ANTIC_cl[C_PF1] | (ANTIC_cl[C_PF1] << 16); + lookup_gtia10[14] = lookup_gtia10[6] = ANTIC_cl[C_PF2] | (ANTIC_cl[C_PF2] << 16); + lookup_gtia10[15] = lookup_gtia10[7] = ANTIC_cl[C_PF3] | (ANTIC_cl[C_PF3] << 16); + lookup_gtia10[8] = lookup_gtia10[9] = lookup_gtia10[10] = lookup_gtia10[11] = ANTIC_lookup_gtia9[0]; +#else + lookup_gtia10[0] = ANTIC_cl[C_PM0]; + lookup_gtia10[1] = ANTIC_cl[C_PM1]; + lookup_gtia10[2] = ANTIC_cl[C_PM2]; + lookup_gtia10[3] = ANTIC_cl[C_PM3]; + lookup_gtia10[12] = lookup_gtia10[4] = ANTIC_cl[C_PF0]; + lookup_gtia10[13] = lookup_gtia10[5] = ANTIC_cl[C_PF1]; + lookup_gtia10[14] = lookup_gtia10[6] = ANTIC_cl[C_PF2]; + lookup_gtia10[15] = lookup_gtia10[7] = ANTIC_cl[C_PF3]; + lookup_gtia10[8] = lookup_gtia10[9] = lookup_gtia10[10] = lookup_gtia10[11] = ANTIC_cl[C_BAK]; +#endif + ptr++; + t_pm_scanline_ptr = (const ULONG *) (((const UBYTE *) t_pm_scanline_ptr) + 1); + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + DO_GTIA_BYTE(ptr, lookup_gtia10, screendata) + ptr += 4; + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + UBYTE t_screendata = screendata >> 4; + do { + colreg = gtia_10_lookup[t_screendata]; + PF_COLLS(colreg) |= pm_pixel = *c_pm_scanline_ptr++; /*playfield colours can generate collisions*/ + pm_pixel |= gtia_10_pm[t_screendata]; /*but player colours don't*/ + WRITE_VIDEO(ptr++, COLOUR(pm_lookup_ptr[pm_pixel] | colreg)); /*although they mix with the real players*/ + if (k == 3) + t_screendata = screendata & 0x0f; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border_gtia10(); +} + +static void draw_antic_f_gtia11(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + if ((unsigned long) ptr & 2) { /* HSCROL & 1 */ + prepare_an_antic_f(nchars, antic_memptr, t_pm_scanline_ptr); + draw_an_gtia11(t_pm_scanline_ptr); + return; + } + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + WRITE_VIDEO_LONG((ULONG *) ptr, ANTIC_lookup_gtia11[screendata >> 4]); + WRITE_VIDEO_LONG((ULONG *) ptr + 1, ANTIC_lookup_gtia11[screendata & 0xf]); + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) + ptr += 4; + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int k = 4; + UBYTE pm_reg; + do { + pm_reg = pm_lookup_ptr[*c_pm_scanline_ptr++]; + if (pm_reg) { + if (pm_reg == L_PF3) { + UBYTE tmp = k > 2 ? screendata & 0xf0 : screendata << 4; +#ifdef USE_COLOUR_TRANSLATION_TABLE + WRITE_VIDEO(ptr, colour_translation_table[tmp ? tmp | GTIA_COLPF3 : GTIA_COLPF3 & 0xf0]); +#else + WRITE_VIDEO(ptr, tmp ? tmp | ((UWORD)tmp << 8) | ANTIC_cl[C_PF3] : ANTIC_cl[C_PF3] & 0xf0f0); +#endif + } + else + { + WRITE_VIDEO(ptr, COLOUR(pm_reg)); + } + } + ptr++; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border_gtia11(); +} + +/* GTIA-switch-to-mode-00 bug +If while drawing line in hi-res mode PRIOR is changed from 0x40..0xff to +0x00..0x3f, GTIA doesn't back to hi-res, but starts generating mode similar +to ANTIC's 0xe, but with colours PF0, PF1, PF2, PF3. */ + +/* Technical explaination by perrym: + * in gtia.pdf there is a flip-flop at page 40, drawing location C3 with + * what looks like W and A on the gates + * This is set by AN2=0 AN1=1 AN0=1 durning HBLANK + * The middle input to the lower NOR gate is the inverted signal !NRM(?) + * (NRM means NORMAL?) which arrives from the top left of the page. + * This signal is defined on page 38, positions C2/B2 + * where there is a NOR gate pointing downwards with 00 written to the + * right of its output. + * !NRM is the condition that PRIOR is not set to b7=0,b6=0. + * When PRIOR is not set to NRM, the flip-flip is always reset, + * which seems necessary for the proper operation of the GTIA modes. + * If PRIOR is reset to NRM then the flip-flop remains reset, and + * since ANTIC data in hi-res modes is sent as PF0-PF3, this data is used + * by GTIA directly.*/ + +static void draw_antic_f_gtia_bug(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + lookup2[0x00] = ANTIC_cl[C_PF0]; + lookup2[0x40] = lookup2[0x10] = lookup2[0x04] = lookup2[0x01] = ANTIC_cl[C_PF1]; + lookup2[0x80] = lookup2[0x20] = lookup2[0x08] = lookup2[0x02] = ANTIC_cl[C_PF2]; + lookup2[0xc0] = lookup2[0x30] = lookup2[0x0c] = lookup2[0x03] = ANTIC_cl[C_PF3]; + + CHAR_LOOP_BEGIN + UBYTE screendata = *antic_memptr++; + if (IS_ZERO_ULONG(t_pm_scanline_ptr)) { + WRITE_VIDEO(ptr++, lookup2[screendata & 0xc0]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x30]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x0c]); + WRITE_VIDEO(ptr++, lookup2[screendata & 0x03]); + } + else { + const UBYTE *c_pm_scanline_ptr = (const UBYTE *) t_pm_scanline_ptr; + int pm_pixel; + int colreg; + int k = 4; + do { + colreg = (playfield_lookup + 0x40)[screendata & 0xc0]; + DO_PMG_LORES + screendata <<= 2; + } while (--k); + } + t_pm_scanline_ptr++; + CHAR_LOOP_END + do_border(); +} + +/* pointer to a function that draws a single line of graphics */ +typedef void (*draw_antic_function)(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr); + +/* tables for all GTIA and ANTIC modes */ +static draw_antic_function draw_antic_table[4][16] = { +/* normal */ + { NULL, NULL, draw_antic_2, draw_antic_2, + draw_antic_4, draw_antic_4, draw_antic_6, draw_antic_6, + draw_antic_8, draw_antic_9, draw_antic_a, draw_antic_c, + draw_antic_c, draw_antic_e, draw_antic_e, draw_antic_f}, +/* GTIA 9 */ + { NULL, NULL, draw_antic_2_gtia9, draw_antic_2_gtia9, + draw_antic_4_gtia9, draw_antic_4_gtia9, draw_antic_6_gtia9, draw_antic_6_gtia9, + draw_antic_8_gtia9, draw_antic_9_gtia9, draw_antic_a_gtia9, draw_antic_9_gtia9, + draw_antic_9_gtia9, draw_antic_e_gtia9, draw_antic_e_gtia9, draw_antic_f_gtia9}, +/* GTIA 10 */ + { NULL, NULL, draw_antic_2_gtia10, draw_antic_2_gtia10, + draw_antic_4_gtia10, draw_antic_4_gtia10, draw_antic_6_gtia10, draw_antic_6_gtia10, + draw_antic_8_gtia10, draw_antic_9_gtia10, draw_antic_a_gtia10, draw_antic_9_gtia10, + draw_antic_9_gtia10, draw_antic_e_gtia10, draw_antic_e_gtia10, draw_antic_f_gtia10}, +/* GTIA 11 */ + { NULL, NULL, draw_antic_2_gtia11, draw_antic_2_gtia11, + draw_antic_4_gtia11, draw_antic_4_gtia11, draw_antic_6_gtia11, draw_antic_6_gtia11, + draw_antic_8_gtia11, draw_antic_9_gtia11, draw_antic_a_gtia11, draw_antic_9_gtia11, + draw_antic_9_gtia11, draw_antic_e_gtia11, draw_antic_e_gtia11, draw_antic_f_gtia11}}; + +/* pointer to current GTIA/ANTIC mode routine */ +static draw_antic_function draw_antic_ptr = draw_antic_8; +#ifdef NEW_CYCLE_EXACT +static draw_antic_function saved_draw_antic_ptr; +#endif +/* pointer to current GTIA mode blank drawing routine */ +static void (*draw_antic_0_ptr)(void) = draw_antic_0; + +#ifdef NEW_CYCLE_EXACT +/* wrapper for antic_0, for dmactl bugs */ +static void draw_antic_0_dmactl_bug(int nchars, const UBYTE *antic_memptr, UWORD *ptr, const ULONG *t_pm_scanline_ptr) +{ + draw_antic_0_ptr(); +} +#endif + +/* Artifacting ------------------------------------------------------------ */ + +void ANTIC_UpdateArtifacting(void) +{ +#define ART_BROWN 0 +#define ART_BLUE 1 +#define ART_DARK_BROWN 2 +#define ART_DARK_BLUE 3 +#define ART_BRIGHT_BROWN 4 +#define ART_BRIGHT_BLUE 5 +#define ART_RED 6 +#define ART_GREEN 7 + static const UBYTE art_colour_table[4][8] = { + { 0x88, 0x14, 0x88, 0x14, 0x8f, 0x1f, 0xbb, 0x5f }, /* brownblue */ + { 0x14, 0x88, 0x14, 0x88, 0x1f, 0x8f, 0x5f, 0xbb }, /* bluebrown */ + { 0xd6, 0x46, 0xd6, 0x46, 0xdf, 0x4a, 0x4f, 0xac }, /* redgreen */ + { 0x46, 0xd6, 0x46, 0xd6, 0x4a, 0xdf, 0xac, 0x4f } /* greenred */ + }; + + int i; + int j; + int c; + const UBYTE *art_colours; + UBYTE q; + UBYTE art_white; + + if (ANTIC_artif_mode == 0) { + draw_antic_table[0][2] = draw_antic_table[0][3] = draw_antic_2; + draw_antic_table[0][0xf] = draw_antic_f; + return; + } + +#ifndef USE_COLOUR_TRANSLATION_TABLE + if (ANTIC_artif_new) { + static UWORD new_art_colour_table[4][2] = { + {0x4040, 0x8080}, + {0x8080, 0x4040}, + {0x8080, 0xd0d0}, + {0xd0d0, 0x8080} + }; + draw_antic_table[0][2] = draw_antic_table[0][3] = draw_antic_2_artif_new; + draw_antic_table[0][0xf] = draw_antic_f_artif_new; + art_colour1_new = new_art_colour_table[ANTIC_artif_mode - 1][0]; + art_colour2_new = new_art_colour_table[ANTIC_artif_mode - 1][1]; + } + else +#endif + { + draw_antic_table[0][2] = draw_antic_table[0][3] = draw_antic_2_artif; + draw_antic_table[0][0xf] = draw_antic_f_artif; + } + + art_colours = (ANTIC_artif_mode <= 4 ? art_colour_table[ANTIC_artif_mode - 1] : art_colour_table[2]); + + art_reverse_colpf1_save = art_normal_colpf1_save = ANTIC_cl[C_PF1] & 0x0f0f; + art_reverse_colpf2_save = art_normal_colpf2_save = ANTIC_cl[C_PF2]; + art_white = (ANTIC_cl[C_PF2] & 0xf0) | (ANTIC_cl[C_PF1] & 0x0f); + + for (i = 0; i <= 255; i++) { + art_bkmask_normal[i] = 0; + art_lummask_normal[i] = 0; + art_bkmask_reverse[255 - i] = 0; + art_lummask_reverse[255 - i] = 0; + + for (j = 0; j <= 3; j++) { + q = i << j; + if (!(q & 0x20)) { + if ((q & 0xf8) == 0x50) + c = ART_BLUE; /* 01010 */ + else if ((q & 0xf8) == 0xD8) + c = ART_DARK_BLUE; /* 11011 */ + else { /* xx0xx */ + ((UBYTE *) art_lookup_normal)[(i << 2) + j] = GTIA_COLPF2; + ((UBYTE *) art_lookup_reverse)[((255 - i) << 2) + j] = art_white; + ((UBYTE *) art_bkmask_normal)[(i << 2) + j] = 0xff; + ((UBYTE *) art_lummask_reverse)[((255 - i) << 2) + j] = 0x0f; + ((UBYTE *) art_bkmask_reverse)[((255 - i) << 2) + j] = 0xf0; + continue; + } + } + else if (q & 0x40) { + if (q & 0x10) + goto colpf1_pixel; /* x111x */ + else if (q & 0x80) { + if (q & 0x08) + c = ART_BRIGHT_BROWN; /* 11101 */ + else + goto colpf1_pixel; /* 11100 */ + } + else + c = ART_GREEN; /* 0110x */ + } + else if (q & 0x10) { + if (q & 0x08) { + if (q & 0x80) + c = ART_BRIGHT_BROWN; /* 00111 */ + else + goto colpf1_pixel; /* 10111 */ + } + else + c = ART_RED; /* x0110 */ + } + else + c = ART_BROWN; /* x010x */ + + ((UBYTE *) art_lookup_reverse)[((255 - i) << 2) + j] = + ((UBYTE *) art_lookup_normal)[(i << 2) + j] = art_colours[(j & 1) ^ c]; + continue; + + colpf1_pixel: + ((UBYTE *) art_lookup_normal)[(i << 2) + j] = art_white; + ((UBYTE *) art_lookup_reverse)[((255 - i) << 2) + j] = GTIA_COLPF2; + ((UBYTE *) art_bkmask_reverse)[((255 - i) << 2) + j] = 0xff; + ((UBYTE *) art_lummask_normal)[(i << 2) + j] = 0x0f; + ((UBYTE *) art_bkmask_normal)[(i << 2) + j] = 0xf0; + } + } +} + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + +/* Display List ------------------------------------------------------------ */ + +UBYTE ANTIC_GetDLByte(UWORD *paddr) +{ + int addr = *paddr; + UBYTE result; + if (ANTIC_xe_ptr != NULL && addr < 0x8000 && addr >= 0x4000) + result = ANTIC_xe_ptr[addr - 0x4000]; + else + result = MEMORY_GetByte((UWORD) addr); + addr++; + if ((addr & 0x3FF) == 0) + addr -= 0x400; + *paddr = (UWORD) addr; + return result; +} + +UWORD ANTIC_GetDLWord(UWORD *paddr) +{ + UBYTE lsb = ANTIC_GetDLByte(paddr); +#if !defined(BASIC) && !defined(CURSES_BASIC) + if (ANTIC_player_flickering && ((GTIA_VDELAY & 0x80) == 0 || ANTIC_ypos & 1)) + GTIA_GRAFP3 = lsb; +#endif + return (ANTIC_GetDLByte(paddr) << 8) + lsb; +} + +#if !defined(BASIC) && !defined(CURSES_BASIC) + +/* Real ANTIC doesn't fetch beginning bytes in HSC + nor screen+47 in wide playfield. This function does. */ +static void antic_load(void) +{ +#ifdef PAGED_MEM + UBYTE *antic_memptr = antic_memory + ANTIC_margin; + UWORD new_screenaddr = screenaddr + chars_read[md]; + if ((screenaddr ^ new_screenaddr) & 0xf000) { + do + *antic_memptr++ = MEMORY_dGetByte(screenaddr++); + while (screenaddr & 0xfff); + screenaddr -= 0x1000; + new_screenaddr -= 0x1000; + } + while (screenaddr < new_screenaddr) + *antic_memptr++ = MEMORY_dGetByte(screenaddr++); +#else + UWORD new_screenaddr = screenaddr + chars_read[md]; + if ((screenaddr ^ new_screenaddr) & 0xf000) { + int bytes = (-screenaddr) & 0xfff; + if (ANTIC_xe_ptr != NULL && screenaddr < 0x8000 && screenaddr >= 0x4000) { + memcpy(antic_memory + ANTIC_margin, ANTIC_xe_ptr + (screenaddr - 0x4000), bytes); + if (new_screenaddr & 0xfff) + memcpy(antic_memory + ANTIC_margin + bytes, ANTIC_xe_ptr + (screenaddr + bytes - 0x5000), new_screenaddr & 0xfff); + } + else if ((screenaddr & 0xf000) == 0xd000) { + MEMORY_CopyFromMem(screenaddr, antic_memory + ANTIC_margin, bytes); + if (new_screenaddr & 0xfff) + MEMORY_CopyFromMem((UWORD) (screenaddr + bytes - 0x1000), antic_memory + ANTIC_margin + bytes, new_screenaddr & 0xfff); + } + else { + MEMORY_dCopyFromMem(screenaddr, antic_memory + ANTIC_margin, bytes); + if (new_screenaddr & 0xfff) + MEMORY_dCopyFromMem(screenaddr + bytes - 0x1000, antic_memory + ANTIC_margin + bytes, new_screenaddr & 0xfff); + } + screenaddr = new_screenaddr - 0x1000; + } + else { + if (ANTIC_xe_ptr != NULL && screenaddr < 0x8000 && screenaddr >= 0x4000) + memcpy(antic_memory + ANTIC_margin, ANTIC_xe_ptr + (screenaddr - 0x4000), chars_read[md]); + else if ((screenaddr & 0xf000) == 0xd000) + MEMORY_CopyFromMem(screenaddr, antic_memory + ANTIC_margin, chars_read[md]); + else + MEMORY_dCopyFromMem(screenaddr, antic_memory + ANTIC_margin, chars_read[md]); + screenaddr = new_screenaddr; + } +#endif +} + +#ifdef NEW_CYCLE_EXACT +int ANTIC_cur_screen_pos = ANTIC_NOT_DRAWING; +#endif + +#ifdef USE_CURSES +static int scanlines_to_curses_display = 0; +#endif + +/* This function emulates one frame drawing screen at Screen_atari */ +void ANTIC_Frame(int draw_display) +{ + static const UBYTE mode_type[32] = { + NORMAL0, NORMAL0, NORMAL0, NORMAL0, NORMAL0, NORMAL0, NORMAL1, NORMAL1, + NORMAL2, NORMAL2, NORMAL1, NORMAL1, NORMAL1, NORMAL0, NORMAL0, NORMAL0, + SCROLL0, SCROLL0, SCROLL0, SCROLL0, SCROLL0, SCROLL0, SCROLL1, SCROLL1, + SCROLL2, SCROLL2, SCROLL1, SCROLL1, SCROLL1, SCROLL0, SCROLL0, SCROLL0 + }; + static const UBYTE normal_lastline[16] = + { 0, 0, 7, 9, 7, 15, 7, 15, 7, 3, 3, 1, 0, 1, 0, 0 }; + UBYTE vscrol_flag = FALSE; + UBYTE no_jvb = TRUE; +#ifndef NEW_CYCLE_EXACT + UBYTE need_load; +#endif + +#ifdef NEW_CYCLE_EXACT + int cpu2antic_index; +#endif /* NEW_CYCLE_EXACT */ + + ANTIC_ypos = 0; + do { + POKEY_Scanline(); /* check and generate IRQ */ + OVERSCREEN_LINE; + } while (ANTIC_ypos < 8); + + scrn_ptr = (UWORD *) Screen_atari; +#ifdef NEW_CYCLE_EXACT + ANTIC_cur_screen_pos = ANTIC_NOT_DRAWING; +#endif + need_dl = TRUE; + do { +#ifdef SKIP + if ((INPUT_mouse_mode == INPUT_MOUSE_PEN || INPUT_mouse_mode == INPUT_MOUSE_GUN) && (ANTIC_ypos >> 1 == ANTIC_PENV_input)) { + PENH = ANTIC_PENH_input; + PENV = ANTIC_PENV_input; + if (GTIA_GRACTL & 4) + GTIA_TRIG_latch[INPUT_mouse_port] = 0; + } +#endif + POKEY_Scanline(); /* check and generate IRQ */ + pmg_dma(); + +#ifdef USE_CURSES + if (--scanlines_to_curses_display == 0) + curses_display_line(anticmode, antic_memory + ANTIC_margin); +#endif + + need_load = FALSE; + if (need_dl) { + if (ANTIC_DMACTL & 0x20) { + IR = ANTIC_GetDLByte(&ANTIC_dlist); + anticmode = IR & 0xf; + ANTIC_xpos++; + /* PMG flickering :-) */ + if (ANTIC_missile_flickering) + GTIA_GRAFM = ANTIC_ypos & 1 ? IR : ((GTIA_GRAFM ^ IR) & hold_missiles_tab[GTIA_VDELAY & 0xf]) ^ IR; + if (ANTIC_player_flickering) + { + UBYTE hold = ANTIC_ypos & 1 ? 0 : GTIA_VDELAY; + if ((hold & 0x10) == 0) + GTIA_GRAFP0 = MEMORY_dGetByte((UWORD) (CPU_regPC - ANTIC_xpos + 8)); + if ((hold & 0x20) == 0) + GTIA_GRAFP1 = MEMORY_dGetByte((UWORD) (CPU_regPC - ANTIC_xpos + 9)); + if ((hold & 0x40) == 0) + GTIA_GRAFP2 = MEMORY_dGetByte((UWORD) (CPU_regPC - ANTIC_xpos + 10)); + if ((hold & 0x80) == 0) + GTIA_GRAFP3 = MEMORY_dGetByte((UWORD) (CPU_regPC - ANTIC_xpos + 11)); + } + } + else + IR &= 0x7f; /* repeat last instruction, but don't generate DLI */ + + dctr = 0; + need_dl = FALSE; + vscrol_off = FALSE; + + switch (anticmode) { + case 0x00: + lastline = (IR >> 4) & 7; + if (vscrol_flag) { + lastline = ANTIC_VSCROL; + vscrol_flag = FALSE; + vscrol_off = TRUE; + } + break; + case 0x01: + lastline = 0; + if (IR & 0x40 && ANTIC_DMACTL & 0x20) { + ANTIC_dlist = ANTIC_GetDLWord(&ANTIC_dlist); + ANTIC_xpos += 2; + no_jvb = FALSE; + } + else + if (vscrol_flag) { + lastline = ANTIC_VSCROL; + vscrol_flag = FALSE; + vscrol_off = TRUE; + } + break; + default: + lastline = normal_lastline[anticmode]; + if (IR & 0x20) { + if (!vscrol_flag) { + CPU_GO(VSCON_C); + dctr = ANTIC_VSCROL; + vscrol_flag = TRUE; + } + } + else if (vscrol_flag) { + lastline = ANTIC_VSCROL; + vscrol_flag = FALSE; + vscrol_off = TRUE; + } + if (IR & 0x40 && ANTIC_DMACTL & 0x20) { + screenaddr = ANTIC_GetDLWord(&ANTIC_dlist); + ANTIC_xpos += 2; + } + md = mode_type[IR & 0x1f]; + need_load = TRUE; + draw_antic_ptr = draw_antic_table[GTIA_PRIOR >> 6][anticmode]; + break; + } + } +#ifdef NEW_CYCLE_EXACT + cpu2antic_index = 0; + if (anticmode < 2 || (ANTIC_DMACTL & 3) == 0 || + (anticmode >= 8 && !need_load)) { + cpu2antic_index = 0; + } + else { +/* TODO: use a cleaner lookup table here */ + if (!(IR & 0x10) && ((ANTIC_DMACTL & 3) == 1)) + cpu2antic_index = 1; + else if ((!(IR &0x10) && ((ANTIC_DMACTL & 3) == 2)) || + ((IR & 0x10) && ((ANTIC_DMACTL & 3) == 1))) { + cpu2antic_index = 2; + } + else + cpu2antic_index = 10; + if (IR & 0x10) { + cpu2antic_index += (ANTIC_HSCROL >> 1); + } + if (anticmode >=2 && anticmode <=7 && !need_load) + cpu2antic_index += 17; + if (anticmode ==6 || anticmode ==7) + cpu2antic_index += 17 * 2; + else if (anticmode==8 || anticmode == 9) + cpu2antic_index += 17 * 6; + else if (anticmode >=0xa && anticmode <=0xc) + cpu2antic_index += 17 * 5; + else if (anticmode >=0x0d) + cpu2antic_index += 17 * 4; + } + ANTIC_cpu2antic_ptr = &CYCLE_MAP_cpu2antic[CYCLE_MAP_SIZE * cpu2antic_index]; + ANTIC_antic2cpu_ptr = &CYCLE_MAP_antic2cpu[CYCLE_MAP_SIZE * cpu2antic_index]; +#endif /* NEW_CYCLE_EXACT */ + + if ((IR & 0x4f) == 1 && (ANTIC_DMACTL & 0x20)) { + ANTIC_dlist = ANTIC_GetDLWord(&ANTIC_dlist); + ANTIC_xpos += 2; + } + +#ifdef NEW_CYCLE_EXACT + /* begin drawing here */ + if (draw_display) { + ANTIC_cur_screen_pos = LBORDER_START; + ANTIC_xpos = ANTIC_antic2cpu_ptr[ANTIC_xpos]; /* convert antic to cpu(need for WSYNC) */ + if (dctr == lastline) { + if (no_jvb) + need_dl = TRUE; + if (IR & 0x80) { + CPU_GO(ANTIC_antic2cpu_ptr[ANTIC_NMIST_C]); + ANTIC_NMIST = 0x9f; + if (ANTIC_NMIEN & 0x80) { + CPU_GO(ANTIC_antic2cpu_ptr[ANTIC_NMI_C]); + CPU_NMI(); + } + } + } + } + else /* force this to be within an else if NEW_CYCLE_EXACT */ +#endif /* NEW_CYCLE_EXACT */ + if (dctr == lastline) { + if (no_jvb) + need_dl = TRUE; + if (IR & 0x80) { + CPU_GO(ANTIC_NMIST_C); + ANTIC_NMIST = 0x9f; + if (ANTIC_NMIEN & 0x80) { + CPU_GO(ANTIC_NMI_C); + CPU_NMI(); + } + } + } + if (!draw_display) { + ANTIC_xpos += ANTIC_DMAR; + if (anticmode < 2 || (ANTIC_DMACTL & 3) == 0) { + GOEOL; + if (no_jvb) { + dctr++; + dctr &= 0xf; + } + continue; + } + if (need_load) { + ANTIC_xpos += load_cycles[md]; + if (anticmode <= 5) /* extra cycles in font modes */ + ANTIC_xpos += before_cycles[md] - extra_cycles[md]; + } + if (anticmode < 8) + ANTIC_xpos += font_cycles[md]; + GOEOL; + dctr++; + dctr &= 0xf; + continue; + } +#ifndef NO_YPOS_BREAK_FLICKER +#define YPOS_BREAK_FLICKER do{if (ANTIC_ypos == ANTIC_break_ypos - 1000) {\ + static int toggle;\ + if (toggle == 1) {\ + FILL_VIDEO(scrn_ptr + LBORDER_START, 0x0f0f, (RBORDER_END - LBORDER_START) * 2);\ + }\ + toggle = !toggle;\ + }}while(0) +#else +#define YPOS_BREAK_FLICKER do{}while(0) +#endif /* NO_YPOS_BREAK_FLICKER */ + +#ifdef NEW_CYCLE_EXACT + GTIA_NewPmScanline(); + if (anticmode < 2 || (ANTIC_DMACTL & 3) == 0) { + GOEOL_CYCLE_EXACT; + draw_partial_scanline(ANTIC_cur_screen_pos, RBORDER_END); + UPDATE_DMACTL; + UPDATE_GTIA_BUG; + ANTIC_cur_screen_pos = ANTIC_NOT_DRAWING; + YPOS_BREAK_FLICKER; + scrn_ptr += Screen_WIDTH / 2; + if (no_jvb) { + dctr++; + dctr &= 0xf; + } + continue; + } + + GOEOL_CYCLE_EXACT; + draw_partial_scanline(ANTIC_cur_screen_pos, RBORDER_END); + UPDATE_DMACTL; + UPDATE_GTIA_BUG; + ANTIC_cur_screen_pos = ANTIC_NOT_DRAWING; + +#else /* NEW_CYCLE_EXACT not defined */ + if (need_load && anticmode <= 5 && ANTIC_DMACTL & 3) + ANTIC_xpos += before_cycles[md]; + + CPU_GO(SCR_C); + GTIA_NewPmScanline(); + + ANTIC_xpos += ANTIC_DMAR; + + if (anticmode < 2 || (ANTIC_DMACTL & 3) == 0) { + draw_antic_0_ptr(); + GOEOL; + YPOS_BREAK_FLICKER; + scrn_ptr += scrn_line; + if (no_jvb) { + dctr++; + dctr &= 0xf; + } + continue; + } + + if (need_load) { + antic_load(); +#ifdef USE_CURSES + /* Normally, we would call curses_display_line here, + and not use scanlines_to_curses_display at all. + That would however cause incorrect color of the "MEMORY" + menu item in Self Test - it isn't set properly + in the first scanline. We therefore postpone + curses_display_line call to the next scanline. */ + scanlines_to_curses_display = 1; +#endif + ANTIC_xpos += load_cycles[md]; + if (anticmode <= 5) /* extra cycles in font modes */ + ANTIC_xpos -= extra_cycles[md]; + } + + draw_antic_ptr(chars_displayed[md], + antic_memory + ANTIC_margin + ch_offset[md], + scrn_ptr + x_min[md], + (ULONG *) >IA_pm_scanline[x_min[md]]); + + GOEOL; +#endif /* NEW_CYCLE_EXACT */ + YPOS_BREAK_FLICKER; + scrn_ptr += scrn_line; + dctr++; + dctr &= 0xf; + } while (ANTIC_ypos < (ATARI_HEIGHT + 8)); + + emu_DrawVsync(); + +#ifndef NO_SIMPLE_PAL_BLENDING + /* Simple PAL blending, using only the base 256 color palette. */ + if (ANTIC_pal_blending) + { + int ypos = ANTIC_ypos - 1; + /* Start at the last screen line (248). */ + ULONG *ptr = (ULONG *) (scrn_ptr - 4 * RCHOP); + do { + int k = 2 * (48 - LCHOP - RCHOP); + do { + /* For each grayscale pixel (colors $00..$0f) blend it with + chrominance of a pixel from the previous line. */ + ULONG pix = READ_VIDEO_LONG(--ptr); + ULONG mask = 0xf0f0f0f0; + /* Take advantage of the fact that chrominance can change only + every two pixels. This way we may test only two pixels in a + quadruplet instead of four. */ + if (pix & 0x0000f0f0) + /* Two LSBs are non-grayscale */ + mask &= 0xf0f00000; + if (pix & 0xf0f00000) + /* Two MSBs are non-grayscale */ + mask &= 0x0000f0f0; + + WRITE_VIDEO_LONG(ptr, (READ_VIDEO_LONG(ptr - ATARI_WIDTH / 4) & mask) | pix); + } while (--k); + ptr -= 2 * (LCHOP + RCHOP); /* Move one line up */ + } while (--ypos > 8); /* Stop after line 9 */ + + } +#endif /* NO_SIMPLE_PAL_BLENDING */ + +/* TODO: cycle-exact overscreen lines */ + POKEY_Scanline(); /* check and generate IRQ */ + CPU_GO(ANTIC_NMIST_C); + ANTIC_NMIST = 0x5f; /* Set VBLANK */ + if (ANTIC_NMIEN & 0x40) { + CPU_GO(ANTIC_NMI_C); + CPU_NMI(); + } + ANTIC_xpos += ANTIC_DMAR; + GOEOL; + + do { + POKEY_Scanline(); /* check and generate IRQ */ + OVERSCREEN_LINE; + } while (ANTIC_ypos < max_ypos); + ANTIC_ypos = 0; /* just for monitor.c */ +} + +#ifdef NEW_CYCLE_EXACT + +/* update the scanline from the last changed position to the current +position, when a change was made to a display register during drawing */ +void ANTIC_UpdateScanline(void) +{ + int actual_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; + int oldpos = ANTIC_cur_screen_pos; + ANTIC_cur_screen_pos = actual_xpos * 2 - 37; + draw_partial_scanline(oldpos, ANTIC_cur_screen_pos); +} + +/* prior needs a different adjustment and could generate small glitches +between mode changes */ +/* TODO: support glitches between mode changes (tiny areas that are neither +the new mode nor the old mode, which occur between mode changes */ +void ANTIC_UpdateScanlinePrior(UBYTE byte) +{ + int actual_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; + int prior_mode_adj = 2; + int oldpos = ANTIC_cur_screen_pos; + ANTIC_cur_screen_pos = actual_xpos * 2 - 37 + prior_mode_adj; + draw_partial_scanline(oldpos, ANTIC_cur_screen_pos); +} + +/* chbase needs a different adjustment */ +void update_scanline_chbase(void) +{ + int actual_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; + int hscrol_adj = (IR & 0x10) ? ANTIC_HSCROL : 0; + int hscrollsb_adj = (hscrol_adj & 1); + int oldpos = ANTIC_cur_screen_pos; + int fontfetch_adj; + /* antic fetches character font data every 2 or 4 cycles */ + /* we want to delay the change until the next fetch */ + /* empirically determined: */ + if (anticmode >= 2 && anticmode <= 5) { + fontfetch_adj = (((hscrol_adj >>1) - actual_xpos + 0) & 1) * 2 + 9; + } + else if (anticmode == 6 || anticmode == 7) { + fontfetch_adj = (((hscrol_adj >> 1) - actual_xpos + 2) & 3) * 2 + 9; + } + else { + fontfetch_adj = 0; + } + ANTIC_cur_screen_pos = actual_xpos * 2 - 37 + hscrollsb_adj + fontfetch_adj; + draw_partial_scanline(oldpos, ANTIC_cur_screen_pos); +} + +/* chactl invert needs a different adjustment */ +void update_scanline_invert(void) +{ + int actual_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; + int hscrol_adj = (IR & 0x10) ? ANTIC_HSCROL : 0; + int hscrollsb_adj = (hscrol_adj & 1); + int oldpos = ANTIC_cur_screen_pos; + + /* empirically determined: adjustment of 4 */ + ANTIC_cur_screen_pos = actual_xpos * 2 - 37 + hscrollsb_adj + 4; + draw_partial_scanline(oldpos, ANTIC_cur_screen_pos); +} + +/* chactl blank needs a different adjustment */ +void update_scanline_blank(void) +{ + int actual_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; + int hscrol_adj = (IR & 0x10) ? ANTIC_HSCROL : 0; + int hscrollsb_adj = (hscrol_adj & 1); + int oldpos = ANTIC_cur_screen_pos; + + /* empirically determined: adjustment of 7 */ + ANTIC_cur_screen_pos = actual_xpos * 2 - 37 + hscrollsb_adj + 7; + draw_partial_scanline(oldpos, ANTIC_cur_screen_pos); +} + +static void set_dmactl_bug(void){ + need_load = FALSE; + saved_draw_antic_ptr = draw_antic_ptr; + draw_antic_ptr_changed = 1; + if (anticmode == 2 || anticmode == 3 || anticmode == 0xf) { + draw_antic_ptr = draw_antic_2_dmactl_bug; + dmactl_bug_chdata = (anticmode == 0xf) ? 0 : antic_memory[ANTIC_margin + chars_read[md] - 1]; + } + else { + draw_antic_ptr = draw_antic_0_dmactl_bug; + } +} + +/* draw a partial scanline between point l and point r */ +/* l is the left hand word, r is the point one past the right-most word to draw */ +void draw_partial_scanline(int l, int r) +{ + /* lborder_chars: save left border chars,we restore it after */ + /* it is the number of 8pixel 'chars' in the left border */ + int lborder_chars = left_border_chars; + + /* rborder_start: save right border start, we restore it after */ + /* it is the start of the right border, in words */ + int rborder_start = right_border_start; + + /* lborder_start: start of the left border, in words */ + int lborder_start = LCHOP * 4; + /* end of the left border, in words */ + int lborder_end = LCHOP * 4 + left_border_chars * 4; + /* end of the right border, in words */ + int rborder_end = (48 - RCHOP) * 4; + /* flag: if true, don't show playfield. used if the partial scanline */ + /* does not include the playfield */ + int dont_display_playfield = 0; + /* offset of the left most drawable 8 pixel pf block */ + /* int l_pfchar = (lborder_end - x_min[md]) / 4; */ + int l_pfchar = 0; + /* offset of the right most drawable 8 pixel pf plock, *plus one* */ + int r_pfchar = 0; + /* buffer to save 0,1,2 or 3 words of the left hand portion of an 8pixel */ + /* 'char' which is going to be erased by the left hand side of the */ + /* left most 8pixel 'char' in the partial scanline and must be saved */ + /* and restored later */ + UWORD sv_buf[4]; + /* buffer to save 0 or 1 (modes 6,7,a,b,c) ,or , (0,1,2 or 3) (modes 8,9) */ + /* 8pixel 'chars' of playfield which is going to be erased by the left */ + /* hand most 8pixel 'char's of the 2(modes 67abc) or 4(modes 89) 8pixel */ + /* 'char'-sized blocks that these modes must draw. */ + UWORD sv_buf2[4 * 4]; /* for modes 6,7,8,9,a,b,c */ + /* start,size of the above buffers */ + int sv_bufstart = 0; + int sv_bufsize = 0; + int sv_bufstart2 = 0; + int sv_bufsize2 = 0; + /* number of 8,16,32pixel chars to draw in the playfield */ + int nchars = 0; + /* adjustment to ch_index , it is the number of 8,16,32pixel chars */ + /* that we do not draw on the left hand side that would usually be drawn */ + /* for this mode */ + int ch_adj = 0; + /* adjustment to x_min to skip over the left side */ + int x_min_adj = 0; + /* it's the offset of the left most drawable 8pixel pfblock which is */ + /* rounded *down* to the nearest factor of (2:mode 67abc,4:mode 89) */ + /* if it is divided by (2:mode 67abc,4:mode 89) it will give the */ + /* offset of the left most drawable (16,32)pixel 'char' */ + int l_pfactual = 0; + /* it is the offset of the right most drawable 8pixel pf block which is */ + /* rounded *up* to the nearest factor of (2,4), *plus one* */ + /* so that r_pfactual-l_pfactual / (2,4) = number of 16,32 pixel 'chars' */ + /* to be drawn */ + int r_pfactual = 0; + /* it is the offset of the 8pixel block aligned with pf which overlaps */ + /* the left border. We need this for modes 6-c, because in these modes */ + /* the code will save 8pixel blocks to the left of l_pfchar and */ + /* >= l_pfactual, which will result in portions of the left border */ + /* being saved on some occasions which should not be, unless we */ + /* use this variable to alter the number of chars saved */ + /* int l_borderpfchar=0; */ + + r_pfchar = chars_displayed[md]; + if (md == NORMAL1 || md == SCROLL1) { /* modes 6,7,a,b,c */ + r_pfchar *= 2; + } + else if (md == NORMAL2 || md == SCROLL2) { /* modes 8,9 */ + r_pfchar *= 4; + } + if (anticmode < 2 || (ANTIC_DMACTL & 3) == 0) { + lborder_end = rborder_end; + dont_display_playfield = 1; + } + if (l > rborder_end) + l = rborder_end; + if (r > rborder_end) + r = rborder_end; + if (l < lborder_start) + l = lborder_start; + if (r < lborder_start) + r = lborder_start; + if (l >= r) + return; + if (l < lborder_end) { + /* left point is within left border */ + sv_bufstart = (l & (~3)); /* high order bits give buffer start */ + sv_bufsize = l - sv_bufstart; + left_border_start = sv_bufstart; + left_border_chars = lborder_chars - (sv_bufstart - lborder_start) / 4; + if (l > x_min[md]) { + /* special case for modes 56789abc */ + /* position buffer within the reference frame */ + /* of the playfield if that */ + /* results in more pixels being saved in the buffer */ + /* needed because for modes 5789abc the overlapping part */ + /* can be more than 1 8pixel char and we only save the left */ + /* hand most 8pixel chars in the code in the later section */ + /* further down, so there is a possibility that the 8pixels */ + /* which are saved within the reference frame of the border */ + /* are not enough to ensure that everything gets saved */ + l_pfchar = (l - x_min[md]) / 4; + if (((l - x_min[md]) & 3) > sv_bufsize) { + sv_bufsize = ((l - x_min[md]) & 3); + sv_bufstart = l - sv_bufsize; + } + } + } + else if (l >= rborder_start) { + sv_bufstart = (l & (~3)); /* high order bits give buffer start */ + sv_bufsize = l - sv_bufstart; + right_border_start = sv_bufstart; + dont_display_playfield = 1; /* don't display the playfield */ + } + else { /*within screen */ + sv_bufsize = ((l - x_min[md]) & 3); /* low bits have buf size */ + sv_bufstart = l - sv_bufsize; /* difference gives start */ + l_pfchar = (sv_bufstart - x_min[md]) / 4; + left_border_chars = 0; /* don't display left border */ + } + memcpy(sv_buf, scrn_ptr + sv_bufstart, sv_bufsize * sizeof(UWORD)); /* save part of screen */ + + if (r <= lborder_end) { + /* right_end_char = (r + 3) / 4; */ + left_border_chars = (r + 3) / 4 - sv_bufstart / 4; + /* everything must be within the left border */ + dont_display_playfield = 1; /* don't display the playfield */ + } + else { /* right point is past start of playfield */ + /* now load ANTIC data: needed for ANTIC glitches */ + if (need_load) { + antic_load(); +#ifdef USE_CURSES + /* Normally, we would call curses_display_line here, + and not use scanlines_to_curses_display at all. + That would however cause incorrect color of the "MEMORY" + menu item in Self Test - it isn't set properly + in the first scanline. We therefore postpone + curses_display_line call to the next scanline. */ + scanlines_to_curses_display = 1; +#endif + need_load = FALSE; + } + + if (r > rborder_start) { + right_border_end = ((r + 3) & (~3)); /* round up to nearest 8pixel */ + } + else { + r_pfchar = (r - x_min[md] + 3) / 4; /* round up to nearest 8pixel */ + } + } + if (dont_display_playfield) { + nchars = 0; + x_min_adj = 0; + ch_adj = 0; + } + else if (md == NORMAL1 || md == SCROLL1) { /* modes 6,7,a,b,c */ + l_pfactual = (l_pfchar & (~1)); /* round down to nearest 16pixel */ + sv_bufsize2 = (l_pfchar - l_pfactual) * 4; + sv_bufstart2 = x_min[md] + l_pfactual * 4; + r_pfactual = ((r_pfchar + 1) & (~1)); /* round up to nearest 16pixel */ + nchars = (r_pfactual - l_pfactual) / 2; + x_min_adj = l_pfactual * 4; + ch_adj = l_pfactual / 2; + } + else if (md == NORMAL2 || md == SCROLL2) { /* modes 8,9 */ + l_pfactual = (l_pfchar & (~3)); + sv_bufsize2 = (l_pfchar - l_pfactual) * 4; + sv_bufstart2 = x_min[md] + l_pfactual * 4; + r_pfactual = ((r_pfchar + 3) & (~3)); + nchars = (r_pfactual - l_pfactual) / 4; + x_min_adj = l_pfactual * 4; + ch_adj = l_pfactual / 4; + } + else { + nchars = r_pfchar - l_pfchar; + x_min_adj = l_pfchar * 4; + ch_adj = l_pfchar; + } + memcpy(sv_buf2, scrn_ptr + sv_bufstart2, sv_bufsize2 * sizeof(UWORD)); /* save part of screen */ + + if (dont_display_playfield) { +/* the idea here is to use draw_antic_0_ptr() to draw just the border only, since */ +/* we can't set nchars=0. draw_antic_0_ptr will work if left_border_start and */ +/* right_border_end are set correctly */ + if (anticmode < 2 || (ANTIC_DMACTL & 3) == 0 || r <= lborder_end) { + right_border_end = left_border_start + left_border_chars * 4; + } + else if (l >= rborder_start) { + left_border_start = right_border_start; + } + draw_antic_0_ptr(); + } + else { + draw_antic_ptr(nchars, /* chars_displayed[md], */ + antic_memory + ANTIC_margin + ch_offset[md] + ch_adj, + scrn_ptr + x_min[md] + x_min_adj, + (ULONG *) >IA_pm_scanline[x_min[md] + x_min_adj]); + } + memcpy(scrn_ptr + sv_bufstart2, sv_buf2, sv_bufsize2 * sizeof(UWORD)); /* restore screen */ + memcpy(scrn_ptr + sv_bufstart, sv_buf, sv_bufsize * sizeof(UWORD)); /* restore screen */ + + /* restore border global variables */ + left_border_chars=lborder_chars; + right_border_start=rborder_start; + left_border_start = LCHOP * 4; + right_border_end = (48-RCHOP) *4; +} +#endif /* NEW_CYCLE_EXACT */ + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + +/* ANTIC registers --------------------------------------------------------- */ + +UBYTE ANTIC_GetByte(UWORD addr, int no_side_effects) +{ + switch (addr & 0xf) { + case ANTIC_OFFSET_VCOUNT: + if (ANTIC_XPOS < ANTIC_LINE_C) + return ANTIC_ypos >> 1; + if (ANTIC_ypos + 1 < max_ypos) + return (ANTIC_ypos + 1) >> 1; + return 0; + case ANTIC_OFFSET_PENH: + return PENH; + case ANTIC_OFFSET_PENV: + return PENV; + case ANTIC_OFFSET_NMIST: + return ANTIC_NMIST; + default: + return 0xff; + } +} + +#if !defined(BASIC) && !defined(CURSES_BASIC) + +/* GTIA calls it on write to PRIOR */ +void ANTIC_SetPrior(UBYTE byte) +{ + if ((byte ^ GTIA_PRIOR) & 0x0f) { +#ifdef USE_COLOUR_TRANSLATION_TABLE + UBYTE col = 0; + UBYTE col2 = 0; + UBYTE hi; + UBYTE hi2; + if ((byte & 3) == 0) { + col = GTIA_COLPF0; + col2 = GTIA_COLPF1; + } + if ((byte & 0xc) == 0) { + ANTIC_cl[C_PF0 | C_PM0] = colour_translation_table[col | GTIA_COLPM0]; + ANTIC_cl[C_PF0 | C_PM1] = colour_translation_table[col | GTIA_COLPM1]; + ANTIC_cl[C_PF0 | C_PM01] = colour_translation_table[col | GTIA_COLPM0 | GTIA_COLPM1]; + ANTIC_cl[C_PF1 | C_PM0] = colour_translation_table[col2 | GTIA_COLPM0]; + ANTIC_cl[C_PF1 | C_PM1] = colour_translation_table[col2 | GTIA_COLPM1]; + ANTIC_cl[C_PF1 | C_PM01] = colour_translation_table[col2 | GTIA_COLPM0 | GTIA_COLPM1]; + } + else { + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF0 | C_PM1] = ANTIC_cl[C_PF0 | C_PM0] = colour_translation_table[col]; + ANTIC_cl[C_PF1 | C_PM01] = ANTIC_cl[C_PF1 | C_PM1] = ANTIC_cl[C_PF1 | C_PM0] = colour_translation_table[col2]; + } + if (byte & 4) { + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PF2 | C_PM0] = ANTIC_cl[C_PF2]; + ANTIC_cl[C_PF3 | C_PM01] = ANTIC_cl[C_PF3 | C_PM1] = ANTIC_cl[C_PF3 | C_PM0] = ANTIC_cl[C_PF3]; + ANTIC_cl[C_HI2 | C_PM01] = ANTIC_cl[C_HI2 | C_PM1] = ANTIC_cl[C_HI2 | C_PM0] = ANTIC_cl[C_HI2]; + } + else { + ANTIC_cl[C_PF3 | C_PM0] = ANTIC_cl[C_PF2 | C_PM0] = ANTIC_cl[C_PM0]; + ANTIC_cl[C_PF3 | C_PM1] = ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PM1]; + ANTIC_cl[C_PF3 | C_PM01] = ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PM01]; + ANTIC_cl[C_HI2 | C_PM0] = colour_translation_table[(GTIA_COLPM0 & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM1] = colour_translation_table[(GTIA_COLPM1 & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM01] = colour_translation_table[((GTIA_COLPM0 | GTIA_COLPM1) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + } + col = col2 = 0; + hi = hi2 = GTIA_COLPF1 & 0xf; + ANTIC_cl[C_BLACK - C_PF2 + C_HI2] = colour_translation_table[hi]; + if ((byte & 9) == 0) { + col = GTIA_COLPF2; + col2 = GTIA_COLPF3; + hi |= col & 0xf0; + hi2 |= col2 & 0xf0; + } + if ((byte & 6) == 0) { + ANTIC_cl[C_PF2 | C_PM2] = colour_translation_table[col | GTIA_COLPM2]; + ANTIC_cl[C_PF2 | C_PM3] = colour_translation_table[col | GTIA_COLPM3]; + ANTIC_cl[C_PF2 | C_PM23] = colour_translation_table[col | GTIA_COLPM2 | GTIA_COLPM3]; + ANTIC_cl[C_PF3 | C_PM2] = colour_translation_table[col2 | GTIA_COLPM2]; + ANTIC_cl[C_PF3 | C_PM3] = colour_translation_table[col2 | GTIA_COLPM3]; + ANTIC_cl[C_PF3 | C_PM23] = colour_translation_table[col2 | GTIA_COLPM2 | GTIA_COLPM3]; + ANTIC_cl[C_HI2 | C_PM2] = colour_translation_table[hi | (GTIA_COLPM2 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM3] = colour_translation_table[hi | (GTIA_COLPM3 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM23] = colour_translation_table[hi | ((GTIA_COLPM2 | GTIA_COLPM3) & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM25] = colour_translation_table[hi2 | (GTIA_COLPM2 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM35] = colour_translation_table[hi2 | (GTIA_COLPM3 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM235] = colour_translation_table[hi2 | ((GTIA_COLPM2 | GTIA_COLPM3) & 0xf0)]; + } + else { + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF2 | C_PM3] = ANTIC_cl[C_PF2 | C_PM2] = colour_translation_table[col]; + ANTIC_cl[C_PF3 | C_PM23] = ANTIC_cl[C_PF3 | C_PM3] = ANTIC_cl[C_PF3 | C_PM2] = colour_translation_table[col2]; + ANTIC_cl[C_HI2 | C_PM23] = ANTIC_cl[C_HI2 | C_PM3] = ANTIC_cl[C_HI2 | C_PM2] = colour_translation_table[hi]; + } +#else /* USE_COLOUR_TRANSLATION_TABLE */ + UWORD cword = 0; + UWORD cword2 = 0; + if ((byte & 3) == 0) { + cword = ANTIC_cl[C_PF0]; + cword2 = ANTIC_cl[C_PF1]; + } + if ((byte & 0xc) == 0) { + ANTIC_cl[C_PF0 | C_PM0] = cword | ANTIC_cl[C_PM0]; + ANTIC_cl[C_PF0 | C_PM1] = cword | ANTIC_cl[C_PM1]; + ANTIC_cl[C_PF0 | C_PM01] = cword | ANTIC_cl[C_PM01]; + ANTIC_cl[C_PF1 | C_PM0] = cword2 | ANTIC_cl[C_PM0]; + ANTIC_cl[C_PF1 | C_PM1] = cword2 | ANTIC_cl[C_PM1]; + ANTIC_cl[C_PF1 | C_PM01] = cword2 | ANTIC_cl[C_PM01]; + } + else { + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF0 | C_PM1] = ANTIC_cl[C_PF0 | C_PM0] = cword; + ANTIC_cl[C_PF1 | C_PM01] = ANTIC_cl[C_PF1 | C_PM1] = ANTIC_cl[C_PF1 | C_PM0] = cword2; + } + if (byte & 4) { + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PF2 | C_PM0] = ANTIC_cl[C_PF2]; + ANTIC_cl[C_PF3 | C_PM01] = ANTIC_cl[C_PF3 | C_PM1] = ANTIC_cl[C_PF3 | C_PM0] = ANTIC_cl[C_PF3]; + } + else { + ANTIC_cl[C_PF3 | C_PM0] = ANTIC_cl[C_PF2 | C_PM0] = ANTIC_cl[C_PM0]; + ANTIC_cl[C_PF3 | C_PM1] = ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PM1]; + ANTIC_cl[C_PF3 | C_PM01] = ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PM01]; + } + cword = cword2 = 0; + if ((byte & 9) == 0) { + cword = ANTIC_cl[C_PF2]; + cword2 = ANTIC_cl[C_PF3]; + } + if ((byte & 6) == 0) { + ANTIC_cl[C_PF2 | C_PM2] = cword | ANTIC_cl[C_PM2]; + ANTIC_cl[C_PF2 | C_PM3] = cword | ANTIC_cl[C_PM3]; + ANTIC_cl[C_PF2 | C_PM23] = cword | ANTIC_cl[C_PM23]; + ANTIC_cl[C_PF3 | C_PM2] = cword2 | ANTIC_cl[C_PM2]; + ANTIC_cl[C_PF3 | C_PM3] = cword2 | ANTIC_cl[C_PM3]; + ANTIC_cl[C_PF3 | C_PM23] = cword2 | ANTIC_cl[C_PM23]; + } + else { + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF2 | C_PM3] = ANTIC_cl[C_PF2 | C_PM2] = cword; + ANTIC_cl[C_PF3 | C_PM23] = ANTIC_cl[C_PF3 | C_PM3] = ANTIC_cl[C_PF3 | C_PM2] = cword2; + } +#endif /* USE_COLOUR_TRANSLATION_TABLE */ + if (byte & 1) { + ANTIC_cl[C_PF1 | C_PM2] = ANTIC_cl[C_PF0 | C_PM2] = ANTIC_cl[C_PM2]; + ANTIC_cl[C_PF1 | C_PM3] = ANTIC_cl[C_PF0 | C_PM3] = ANTIC_cl[C_PM3]; + ANTIC_cl[C_PF1 | C_PM23] = ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PM23]; + } + else { + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF0 | C_PM3] = ANTIC_cl[C_PF0 | C_PM2] = ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM23] = ANTIC_cl[C_PF1 | C_PM3] = ANTIC_cl[C_PF1 | C_PM2] = ANTIC_cl[C_PF1]; + } + if ((byte & 0xf) == 0xc) { + ANTIC_cl[C_PF0 | C_PM0123] = ANTIC_cl[C_PF0 | C_PM123] = ANTIC_cl[C_PF0 | C_PM023] = ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM0123] = ANTIC_cl[C_PF1 | C_PM123] = ANTIC_cl[C_PF1 | C_PM023] = ANTIC_cl[C_PF1]; + } + else + ANTIC_cl[C_PF0 | C_PM0123] = ANTIC_cl[C_PF0 | C_PM123] = ANTIC_cl[C_PF0 | C_PM023] = + ANTIC_cl[C_PF1 | C_PM0123] = ANTIC_cl[C_PF1 | C_PM123] = ANTIC_cl[C_PF1 | C_PM023] = GTIA_COLOUR_BLACK; + if (byte & 0xf) { + ANTIC_cl[C_PF0 | C_PM25] = ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM25] = ANTIC_cl[C_PF1]; + ANTIC_cl[C_PF3 | C_PM25] = ANTIC_cl[C_PF2 | C_PM25] = ANTIC_cl[C_PM25] = GTIA_COLOUR_BLACK; + } + else { + ANTIC_cl[C_PF0 | C_PM235] = ANTIC_cl[C_PF0 | C_PM35] = ANTIC_cl[C_PF0 | C_PM25] = + ANTIC_cl[C_PF1 | C_PM235] = ANTIC_cl[C_PF1 | C_PM35] = ANTIC_cl[C_PF1 | C_PM25] = ANTIC_cl[C_PF3]; + ANTIC_cl[C_PF3 | C_PM25] = ANTIC_cl[C_PF2 | C_PM25] = ANTIC_cl[C_PM25] = ANTIC_cl[C_PF3 | C_PM2]; + ANTIC_cl[C_PF3 | C_PM35] = ANTIC_cl[C_PF2 | C_PM35] = ANTIC_cl[C_PM35] = ANTIC_cl[C_PF3 | C_PM3]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23]; + } + } + pm_lookup_ptr = pm_lookup_table[prior_to_pm_lookup[byte & 0x3f]]; + draw_antic_0_ptr = byte < 0x80 ? draw_antic_0 : byte < 0xc0 ? draw_antic_0_gtia10 : draw_antic_0_gtia11; + if (byte < 0x40 && (GTIA_PRIOR >= 0x40 || gtia_bug_active) && (anticmode == 2 || anticmode == 3 || anticmode == 0xf) && ANTIC_XPOS >= ((ANTIC_DMACTL & 3) == 3 ? 16 : 18)) { + /* A GTIA Mode was active, and no longer is. An ANTIC hi-res mode is being used. GTIA is no longer set in hi-res mode */ + if (anticmode == 2 || anticmode == 3) draw_antic_ptr = draw_antic_2_gtia_bug; + else if (anticmode == 0xf) draw_antic_ptr = draw_antic_f_gtia_bug; + gtia_bug_active = TRUE; + } + else + draw_antic_ptr = draw_antic_table[byte >> 6][anticmode]; +} + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + +void ANTIC_PutByte(UWORD addr, UBYTE byte) +{ + switch (addr & 0xf) { + case ANTIC_OFFSET_DLISTL: + ANTIC_dlist = (ANTIC_dlist & 0xff00) | byte; + break; + case ANTIC_OFFSET_DLISTH: + ANTIC_dlist = (ANTIC_dlist & 0x00ff) | (byte << 8); + break; + case ANTIC_OFFSET_DMACTL: +/* TODO: make this truly cycle-exact, update cpu2antic and antic2cpu, +add support for wider->narrow glitches including the interesting mode 6 +glitch */ +#ifdef NEW_CYCLE_EXACT + dmactl_changed=0; + /* has DMACTL width changed? */ + if ((byte & 3) != (ANTIC_DMACTL & 3) ){ + /* DMACTL width changed from 0 */ + if ((ANTIC_DMACTL & 3) == 0) { + int glitch_cycle = (3 + 32) - 8*(byte & 3); + int x = ANTIC_XPOS; + if((IR & 0x10) && ((byte & 3) != 3)){ + /*adjust for narrow or std HSCROL*/ + glitch_cycle -= 8; + } + /*ANTIC doesn't fetch and display data if the*/ + /*DMACTL width changes from zero after this */ + /*cycle. Instead, it displays a blank scan */ + /*line for modes other than 23F and for 23F */ + /*it displays a glitched line after the change*/ + if(x >= glitch_cycle){ + if(ANTIC_DRAWING_SCREEN){ + ANTIC_UpdateScanline(); + set_dmactl_bug(); + } + } + else { + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } + } + } + /* DMACTL width changed to 0 */ + else if ((byte & 3)==0) { + /* TODO: this is not 100% correct */ + if (ANTIC_DRAWING_SCREEN) { + int actual_xpos = ANTIC_cpu2antic_ptr[ANTIC_xpos]; + int antic_limit = ANTIC_cpu2antic_ptr[ANTIC_xpos_limit]; + ANTIC_UpdateScanline(); + /*fix for a minor glitch in fasteddie*/ + /*don't steal cycles after DMACTL off*/ + ANTIC_cpu2antic_ptr = &CYCLE_MAP_cpu2antic[0]; + ANTIC_antic2cpu_ptr = &CYCLE_MAP_antic2cpu[0]; + ANTIC_xpos = ANTIC_antic2cpu_ptr[actual_xpos]; + ANTIC_xpos_limit = ANTIC_antic2cpu_ptr[antic_limit]; + } + /* DMACTL width has changed and not to 0 and not from 0 */ + } + else { + /* DMACTL width has increased and no HSCROL */ + if (((byte & 3) > (ANTIC_DMACTL & 3)) && !(IR & 0x10)) { + int x; /* the change cycle */ + int left_glitch_cycle = 0; + int right_glitch_cycle = 0; + x = ANTIC_XPOS; + if (((ANTIC_DMACTL & 3) == 2) && ((byte & 3) == 3)) { /* Normal->Wide */ + left_glitch_cycle = 11; + right_glitch_cycle = 18; + } + else if (((ANTIC_DMACTL & 3) == 1) && ((byte & 3) == 3)) { /* Narrow->Wide */ + left_glitch_cycle = 11; + right_glitch_cycle = 26; + } + else if (((ANTIC_DMACTL & 3) == 1) && ((byte & 3) == 2)) { /* Narrow->Normal */ + left_glitch_cycle = 19; + right_glitch_cycle = 27; + } + /* change occurs during drawing of line */ + /* delay change till next line */ + if (x > right_glitch_cycle) { + dmactl_changed = 1; + delayed_DMACTL = byte; + break; + /* change occurs during 'glitch' region */ + } + else if (x >= left_glitch_cycle && x <= right_glitch_cycle && anticmode > 1) { + set_dmactl_bug(); + } + } + else { + /* DMACTL width has decreased or HSCROL */ + /* TODO: this is not 100% correct */ + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } + } + } + } +#endif /* NEW_CYCLE_EXACT */ + ANTIC_DMACTL = byte; +#if defined(BASIC) || defined(CURSES_BASIC) + break; +#else + switch (byte & 0x03) { + case 0x00: + /* no antic_load when screen off */ + /* chars_read[NORMAL0] = 0; + chars_read[NORMAL1] = 0; + chars_read[NORMAL2] = 0; + chars_read[SCROLL0] = 0; + chars_read[SCROLL1] = 0; + chars_read[SCROLL2] = 0; */ + /* no draw_antic_* when screen off */ + /* chars_displayed[NORMAL0] = 0; + chars_displayed[NORMAL1] = 0; + chars_displayed[NORMAL2] = 0; + chars_displayed[SCROLL0] = 0; + chars_displayed[SCROLL1] = 0; + chars_displayed[SCROLL2] = 0; + x_min[NORMAL0] = 0; + x_min[NORMAL1] = 0; + x_min[NORMAL2] = 0; + x_min[SCROLL0] = 0; + x_min[SCROLL1] = 0; + x_min[SCROLL2] = 0; + ch_offset[NORMAL0] = 0; + ch_offset[NORMAL1] = 0; + ch_offset[NORMAL2] = 0; + ch_offset[SCROLL0] = 0; + ch_offset[SCROLL1] = 0; + ch_offset[SCROLL2] = 0; */ + /* no borders when screen off, only background */ + /* left_border_chars = 48 - LCHOP - RCHOP; + right_border_start = 0; */ + break; + case 0x01: + chars_read[NORMAL0] = 32; + chars_read[NORMAL1] = 16; + chars_read[NORMAL2] = 8; + chars_read[SCROLL0] = 40; + chars_read[SCROLL1] = 20; + chars_read[SCROLL2] = 10; + chars_displayed[NORMAL0] = 32; + chars_displayed[NORMAL1] = 16; + chars_displayed[NORMAL2] = 8; + x_min[NORMAL0] = 32; + x_min[NORMAL1] = 32; + x_min[NORMAL2] = 32; + ch_offset[NORMAL0] = 0; + ch_offset[NORMAL1] = 0; + ch_offset[NORMAL2] = 0; + font_cycles[NORMAL0] = load_cycles[NORMAL0] = 32; + font_cycles[NORMAL1] = load_cycles[NORMAL1] = 16; + load_cycles[NORMAL2] = 8; + before_cycles[NORMAL0] = BEFORE_CYCLES; + before_cycles[SCROLL0] = BEFORE_CYCLES + 8; + extra_cycles[NORMAL0] = 7 + BEFORE_CYCLES; + extra_cycles[SCROLL0] = 8 + BEFORE_CYCLES + 8; + left_border_chars = 8 - LCHOP; + right_border_start = (ATARI_WIDTH - 64) / 2; + break; + case 0x02: + chars_read[NORMAL0] = 40; + chars_read[NORMAL1] = 20; + chars_read[NORMAL2] = 10; + chars_read[SCROLL0] = 48; + chars_read[SCROLL1] = 24; + chars_read[SCROLL2] = 12; + chars_displayed[NORMAL0] = 40; + chars_displayed[NORMAL1] = 20; + chars_displayed[NORMAL2] = 10; + x_min[NORMAL0] = 16; + x_min[NORMAL1] = 16; + x_min[NORMAL2] = 16; + ch_offset[NORMAL0] = 0; + ch_offset[NORMAL1] = 0; + ch_offset[NORMAL2] = 0; + font_cycles[NORMAL0] = load_cycles[NORMAL0] = 40; + font_cycles[NORMAL1] = load_cycles[NORMAL1] = 20; + load_cycles[NORMAL2] = 10; + before_cycles[NORMAL0] = BEFORE_CYCLES + 8; + before_cycles[SCROLL0] = BEFORE_CYCLES + 16; + extra_cycles[NORMAL0] = 8 + BEFORE_CYCLES + 8; + extra_cycles[SCROLL0] = 7 + BEFORE_CYCLES + 16; + left_border_chars = 4 - LCHOP; + right_border_start = (ATARI_WIDTH - 32) / 2; + break; + case 0x03: + chars_read[NORMAL0] = 48; + chars_read[NORMAL1] = 24; + chars_read[NORMAL2] = 12; + chars_read[SCROLL0] = 48; + chars_read[SCROLL1] = 24; + chars_read[SCROLL2] = 12; + chars_displayed[NORMAL0] = 42; + chars_displayed[NORMAL1] = 22; + chars_displayed[NORMAL2] = 12; + x_min[NORMAL0] = 12; + x_min[NORMAL1] = 8; + x_min[NORMAL2] = 0; + ch_offset[NORMAL0] = 3; + ch_offset[NORMAL1] = 1; + ch_offset[NORMAL2] = 0; + font_cycles[NORMAL0] = load_cycles[NORMAL0] = 47; + font_cycles[NORMAL1] = load_cycles[NORMAL1] = 24; + load_cycles[NORMAL2] = 12; + before_cycles[NORMAL0] = BEFORE_CYCLES + 16; + before_cycles[SCROLL0] = BEFORE_CYCLES + 16; + extra_cycles[NORMAL0] = 7 + BEFORE_CYCLES + 16; + extra_cycles[SCROLL0] = 7 + BEFORE_CYCLES + 16; + left_border_chars = 3 - LCHOP; + right_border_start = (ATARI_WIDTH - 8) / 2; + break; + } + + ANTIC_missile_dma_enabled = (byte & 0x0c); /* no player dma without missile */ + ANTIC_player_dma_enabled = (byte & 0x08); + singleline = (byte & 0x10); + ANTIC_player_flickering = ((ANTIC_player_dma_enabled | ANTIC_player_gra_enabled) == 0x02); + ANTIC_missile_flickering = ((ANTIC_missile_dma_enabled | ANTIC_missile_gra_enabled) == 0x01); + + byte = ANTIC_HSCROL; /* update horizontal scroll data */ +/* ******* FALLTHROUGH ******* */ + case ANTIC_OFFSET_HSCROL: +/* TODO: make this truely cycle exact, and update cpu2antic and antic2cpu */ +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + ANTIC_HSCROL = byte &= 0x0f; + if (ANTIC_DMACTL & 3) { + chars_displayed[SCROLL0] = chars_displayed[NORMAL0]; + ch_offset[SCROLL0] = 4 - (byte >> 2); + x_min[SCROLL0] = x_min[NORMAL0]; + if (byte & 3) { + x_min[SCROLL0] += (byte & 3) - 4; + chars_displayed[SCROLL0]++; + ch_offset[SCROLL0]--; + } + chars_displayed[SCROLL2] = chars_displayed[NORMAL2]; + if ((ANTIC_DMACTL & 3) == 3) { /* wide playfield */ + ch_offset[SCROLL0]--; + if (byte == 4 || byte == 12) + chars_displayed[SCROLL1] = 21; + else + chars_displayed[SCROLL1] = 22; + if (byte <= 4) { + x_min[SCROLL1] = byte + 8; + ch_offset[SCROLL1] = 1; + } + else if (byte <= 12) { + x_min[SCROLL1] = byte; + ch_offset[SCROLL1] = 0; + } + else { + x_min[SCROLL1] = byte - 8; + ch_offset[SCROLL1] = -1; + } + /* technically, the part below is wrong */ + /* scrolling in mode 8,9 with HSCROL=13,14,15 */ + /* will set x_min=13,14,15 > 4*LCHOP = 12 */ + /* so that nothing is drawn on the far left side */ + /* of the screen. We could fix this, but only */ + /* by setting x_min to be negative. */ + x_min[SCROLL2] = byte; + ch_offset[SCROLL2] = 0; + } + else { + chars_displayed[SCROLL1] = chars_displayed[NORMAL1]; + ch_offset[SCROLL1] = 2 - (byte >> 3); + x_min[SCROLL1] = x_min[NORMAL0]; + if (byte) { + if (byte & 7) { + x_min[SCROLL1] += (byte & 7) - 8; + chars_displayed[SCROLL1]++; + ch_offset[SCROLL1]--; + } + x_min[SCROLL2] = x_min[NORMAL2] + byte - 16; + chars_displayed[SCROLL2]++; + ch_offset[SCROLL2] = 0; + } + else { + x_min[SCROLL2] = x_min[NORMAL2]; + ch_offset[SCROLL2] = 1; + } + } + + if (ANTIC_DMACTL & 2) { /* normal & wide playfield */ + load_cycles[SCROLL0] = 47 - (byte >> 2); + font_cycles[SCROLL0] = (47 * 4 + 1 - byte) >> 2; + load_cycles[SCROLL1] = (24 * 8 + 3 - byte) >> 3; + font_cycles[SCROLL1] = (24 * 8 + 1 - byte) >> 3; + load_cycles[SCROLL2] = byte < 0xc ? 12 : 11; + } + else { /* narrow playfield */ + font_cycles[SCROLL0] = load_cycles[SCROLL0] = 40; + font_cycles[SCROLL1] = load_cycles[SCROLL1] = 20; + load_cycles[SCROLL2] = 16; + } + } + break; + case ANTIC_OFFSET_VSCROL: + ANTIC_VSCROL = byte & 0x0f; + if (vscrol_off) { + lastline = ANTIC_VSCROL; + if (ANTIC_XPOS < VSCOF_C) + need_dl = dctr == lastline; + } + break; + case ANTIC_OFFSET_PMBASE: + ANTIC_PMBASE = byte; + pmbase_d = (byte & 0xfc) << 8; + pmbase_s = pmbase_d & 0xf8ff; + break; + case ANTIC_OFFSET_CHACTL: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + update_scanline_invert(); + } +#endif + invert_mask = byte & 2 ? 0x80 : 0; +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + update_scanline_blank(); + } +#endif + blank_mask = byte & 1 ? 0xe0 : 0x60; + if ((ANTIC_CHACTL ^ byte) & 4) { +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + /* timing for flip is the same as chbase */ + update_scanline_chbase(); + } +#endif + chbase_20 ^= 7; + } + ANTIC_CHACTL = byte; + break; + case ANTIC_OFFSET_CHBASE: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + update_scanline_chbase(); + } +#endif + ANTIC_CHBASE = byte; + chbase_20 = (byte & 0xfe) << 8; + if (ANTIC_CHACTL & 4) + chbase_20 ^= 7; + break; +#endif /* defined(BASIC) || defined(CURSES_BASIC) */ + case ANTIC_OFFSET_WSYNC: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + if (ANTIC_xpos <= ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C] && ANTIC_xpos_limit >= ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C]) + if (ANTIC_cpu2antic_ptr[ANTIC_xpos + 1] == ANTIC_cpu2antic_ptr[ANTIC_xpos] + 1) { + /* antic does not steal the current cycle */ +/* note that if ANTIC_WSYNC_C is a stolen cycle, then ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C+1]-1 corresponds +to the last cpu cycle < ANTIC_WSYNC_C. Then the cpu will see this cycle if WSYNC +is not delayed, since it really occurred one cycle after the STA WSYNC. But if +WSYNC is "delayed" then ANTIC_xpos is the next cpu cycle after ANTIC_WSYNC_C (which was stolen +), so it is one greater than the above value. EG if ANTIC_WSYNC_C=10 and is stolen +(and let us say cycle 9,11 are also stolen, and 8,12 are not), then in the first +case we have ANTIC_cpu2antic_ptr[ANTIC_WSYNC_C+1]-1 = 8 and in the 2nd =12 */ + ANTIC_xpos = ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C + 1] - 1; + } + else { + ANTIC_xpos = ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C + 1]; + } + else { + ANTIC_wsync_halt = TRUE; + ANTIC_xpos = ANTIC_xpos_limit; + if (ANTIC_cpu2antic_ptr[ANTIC_xpos + 1] == ANTIC_cpu2antic_ptr[ANTIC_xpos] + 1) { + /* antic does not steal the current cycle */ + ANTIC_delayed_wsync = 0; + } + else { + ANTIC_delayed_wsync = 1; + } + } + } + else { + ANTIC_delayed_wsync = 0; +#endif /* NEW_CYCLE_EXACT */ + if (ANTIC_xpos <= ANTIC_WSYNC_C && ANTIC_xpos_limit >= ANTIC_WSYNC_C) + ANTIC_xpos = ANTIC_WSYNC_C; + else { + ANTIC_wsync_halt = TRUE; + ANTIC_xpos = ANTIC_xpos_limit; + } +#ifdef NEW_CYCLE_EXACT + } +#endif /* NEW_CYCLE_EXACT */ + break; + case ANTIC_OFFSET_NMIEN: + ANTIC_NMIEN = byte; + break; + case ANTIC_OFFSET_NMIRES: + ANTIC_NMIST = 0x1f; + break; + default: + break; + } +} + +/* State ------------------------------------------------------------------- */ + +#ifndef BASIC + +void ANTIC_StateSave(void) +{ + StateSav_SaveUBYTE(&ANTIC_DMACTL, 1); + StateSav_SaveUBYTE(&ANTIC_CHACTL, 1); + StateSav_SaveUBYTE(&ANTIC_HSCROL, 1); + StateSav_SaveUBYTE(&ANTIC_VSCROL, 1); + StateSav_SaveUBYTE(&ANTIC_PMBASE, 1); + StateSav_SaveUBYTE(&ANTIC_CHBASE, 1); + StateSav_SaveUBYTE(&ANTIC_NMIEN, 1); + StateSav_SaveUBYTE(&ANTIC_NMIST, 1); + StateSav_SaveUBYTE(&IR, 1); + StateSav_SaveUBYTE(&anticmode, 1); + StateSav_SaveUBYTE(&dctr, 1); + StateSav_SaveUBYTE(&lastline, 1); + StateSav_SaveUBYTE(&need_dl, 1); + StateSav_SaveUBYTE(&vscrol_off, 1); + + StateSav_SaveUWORD(&ANTIC_dlist, 1); + StateSav_SaveUWORD(&screenaddr, 1); + + StateSav_SaveINT(&ANTIC_xpos, 1); + StateSav_SaveINT(&ANTIC_xpos_limit, 1); + StateSav_SaveINT(&ANTIC_ypos, 1); +} + +void ANTIC_StateRead(void) +{ + StateSav_ReadUBYTE(&ANTIC_DMACTL, 1); + StateSav_ReadUBYTE(&ANTIC_CHACTL, 1); + StateSav_ReadUBYTE(&ANTIC_HSCROL, 1); + StateSav_ReadUBYTE(&ANTIC_VSCROL, 1); + StateSav_ReadUBYTE(&ANTIC_PMBASE, 1); + StateSav_ReadUBYTE(&ANTIC_CHBASE, 1); + StateSav_ReadUBYTE(&ANTIC_NMIEN, 1); + StateSav_ReadUBYTE(&ANTIC_NMIST, 1); + StateSav_ReadUBYTE(&IR, 1); + StateSav_ReadUBYTE(&anticmode, 1); + StateSav_ReadUBYTE(&dctr, 1); + StateSav_ReadUBYTE(&lastline, 1); + StateSav_ReadUBYTE(&need_dl, 1); + StateSav_ReadUBYTE(&vscrol_off, 1); + + StateSav_ReadUWORD(&ANTIC_dlist, 1); + StateSav_ReadUWORD(&screenaddr, 1); + + StateSav_ReadINT(&ANTIC_xpos, 1); + StateSav_ReadINT(&ANTIC_xpos_limit, 1); + StateSav_ReadINT(&ANTIC_ypos, 1); + + ANTIC_PutByte(ANTIC_OFFSET_DMACTL, ANTIC_DMACTL); + ANTIC_PutByte(ANTIC_OFFSET_CHACTL, ANTIC_CHACTL); + ANTIC_PutByte(ANTIC_OFFSET_PMBASE, ANTIC_PMBASE); + ANTIC_PutByte(ANTIC_OFFSET_CHBASE, ANTIC_CHBASE); +} + +#endif /* BASIC */ diff --git a/MCUME_pico/pico800/antic.h b/MCUME_pico/pico800/antic.h new file mode 100644 index 0000000..0a89e66 --- /dev/null +++ b/MCUME_pico/pico800/antic.h @@ -0,0 +1,136 @@ +#ifndef ANTIC_H_ +#define ANTIC_H_ + +#include "atari.h" +/* + * Offset to registers in custom relative to start of antic memory addresses. + */ + +#define ANTIC_OFFSET_DMACTL 0x00 +#define ANTIC_OFFSET_CHACTL 0x01 +#define ANTIC_OFFSET_DLISTL 0x02 +#define ANTIC_OFFSET_DLISTH 0x03 +#define ANTIC_OFFSET_HSCROL 0x04 +#define ANTIC_OFFSET_VSCROL 0x05 +#define ANTIC_OFFSET_PMBASE 0x07 +#define ANTIC_OFFSET_CHBASE 0x09 +#define ANTIC_OFFSET_WSYNC 0x0a +#define ANTIC_OFFSET_VCOUNT 0x0b +#define ANTIC_OFFSET_PENH 0x0c +#define ANTIC_OFFSET_PENV 0x0d +#define ANTIC_OFFSET_NMIEN 0x0e +#define ANTIC_OFFSET_NMIRES 0x0f +#define ANTIC_OFFSET_NMIST 0x0f + +extern UBYTE ANTIC_CHACTL; +extern UBYTE ANTIC_CHBASE; +extern UWORD ANTIC_dlist; +extern UBYTE ANTIC_DMACTL; +extern UBYTE ANTIC_HSCROL; +extern UBYTE ANTIC_NMIEN; +extern UBYTE ANTIC_NMIST; +extern UBYTE ANTIC_PMBASE; +extern UBYTE ANTIC_VSCROL; + +extern int ANTIC_break_ypos; +extern int ANTIC_ypos; +extern int ANTIC_wsync_halt; + +/* Current clock cycle in a scanline. + Normally 0 <= ANTIC_xpos && ANTIC_xpos < ANTIC_LINE_C, but in some cases ANTIC_xpos >= ANTIC_LINE_C, + which means that we are already in line (ypos + 1). */ +extern int ANTIC_xpos; + +/* ANTIC_xpos limit for the currently running 6502 emulation. */ +extern int ANTIC_xpos_limit; + +/* Main clock value at the beginning of the current scanline. */ +extern unsigned int ANTIC_screenline_cpu_clock; + +/* Current main clock value. */ +#define ANTIC_CPU_CLOCK (ANTIC_screenline_cpu_clock + ANTIC_XPOS) + +#define ANTIC_NMIST_C 6 +#define ANTIC_NMI_C 12 + +/* Number of cycles per scanline. */ +#define ANTIC_LINE_C 114 + +/* STA WSYNC resumes here. */ +#define ANTIC_WSYNC_C 106 + +/* Number of memory refresh cycles per scanline. + In the first scanline of a font mode there are actually less than ANTIC_DMAR + memory refresh cycles. */ +#define ANTIC_DMAR 9 + +extern int ANTIC_artif_mode; +extern int ANTIC_artif_new; + +extern UBYTE ANTIC_PENH_input; +extern UBYTE ANTIC_PENV_input; + +int ANTIC_Initialise(void); +void ANTIC_Reset(void); +void ANTIC_Frame(int draw_display); +UBYTE ANTIC_GetByte(UWORD addr, int no_side_effects); +void ANTIC_PutByte(UWORD addr, UBYTE byte); + +UBYTE ANTIC_GetDLByte(UWORD *paddr); +UWORD ANTIC_GetDLWord(UWORD *paddr); + +/* always call ANTIC_UpdateArtifacting after changing ANTIC_artif_mode */ +void ANTIC_UpdateArtifacting(void); + +/* Video memory access */ +void ANTIC_VideoMemset(UBYTE *ptr, UBYTE val, ULONG size); +void ANTIC_VideoPutByte(UBYTE *ptr, UBYTE val); + +/* GTIA calls it on a write to PRIOR */ +void ANTIC_SetPrior(UBYTE prior); + +/* Saved states */ +void ANTIC_StateSave(void); +void ANTIC_StateRead(void); + +/* Pointer to 16 KB seen by ANTIC in 0x4000-0x7fff. + If it's the same what the CPU sees (and what's in memory[0x4000..0x7fff], + then NULL. */ +extern const UBYTE *ANTIC_xe_ptr; + +/* PM graphics for GTIA */ +extern int ANTIC_player_dma_enabled; +extern int ANTIC_missile_dma_enabled; +extern int ANTIC_player_gra_enabled; +extern int ANTIC_missile_gra_enabled; +extern int ANTIC_player_flickering; +extern int ANTIC_missile_flickering; + +/* ANTIC colour lookup tables, used by GTIA */ +extern UWORD ANTIC_cl[128]; +extern ULONG ANTIC_lookup_gtia9[16]; +extern ULONG ANTIC_lookup_gtia11[16]; +extern UWORD ANTIC_hires_lookup_l[128]; + +#ifdef NEW_CYCLE_EXACT +#define ANTIC_NOT_DRAWING -999 +#define ANTIC_DRAWING_SCREEN (ANTIC_cur_screen_pos!=ANTIC_NOT_DRAWING) +extern int ANTIC_delayed_wsync; +extern int ANTIC_cur_screen_pos; +extern const int *ANTIC_cpu2antic_ptr; +extern const int *ANTIC_antic2cpu_ptr; +void ANTIC_UpdateScanline(void); +void ANTIC_UpdateScanlinePrior(UBYTE byte); + +#define ANTIC_XPOS ( ANTIC_DRAWING_SCREEN ? ANTIC_cpu2antic_ptr[ANTIC_xpos] : ANTIC_xpos ) +#else +#define ANTIC_XPOS ANTIC_xpos +#endif /* NEW_CYCLE_EXACT */ + +#ifndef NO_SIMPLE_PAL_BLENDING +/* Set to 1 to enable simplified emulation of PAL blending, that uses only + the standard 8-bit palette. */ +extern int ANTIC_pal_blending; +#endif /* NO_SIMPLE_PAL_BLENDING */ + +#endif /* ANTIC_H_ */ diff --git a/MCUME_pico/pico800/atari.h b/MCUME_pico/pico800/atari.h new file mode 100644 index 0000000..14891ca --- /dev/null +++ b/MCUME_pico/pico800/atari.h @@ -0,0 +1,102 @@ +#ifndef __ATARI__ +#define __ATARI__ + +// define globals +#define MEMORY_SIZE 0xC000 //0x10000 + +#define ATARI_WIDTH 384 +#define ATARI_HEIGHT 240 +#define TV_PAL 312 +#define TV_NTSC 262 + +//#define DIRTYRECT 1 +//#define WORDS_UNALIGNED_OK 1 +//#define ALTERNATE_LOOP_COUNTERS 1 +//#define NEW_CYCLE_EXACT 1 +//#define USE_CURSES 1 +//#define WORDS_BIGENDIAN 1 +//#define SYNCHRONIZED_SOUND 1 +#define CLIP_SOUND 1 +#define STEREO_SOUND 1 +#define POKEYSND_SIGNED_SAMPLES 1 +#define PAGED_MEM 1 +#define SOUND 1 +#define NO_SIMPLE_PAL_BLENDING 1 + +#define max_ypos tv_mode + +extern int tv_mode; +extern unsigned char INPUT_key_consol; + +enum ESCAPE { + ESC_SIOV, +/* + * These are special device escape codes required by the Basic version + */ + ESC_E_OPEN, + ESC_E_CLOSE, + ESC_E_READ, + ESC_E_WRITE, + ESC_E_STATUS, + ESC_E_SPECIAL, + + ESC_K_OPEN, + ESC_K_CLOSE, + ESC_K_READ, + ESC_K_WRITE, + ESC_K_STATUS, + ESC_K_SPECIAL, +/* + * These are Escape codes for the normal device handlers. + * Some are never used and some are only sometimes used. + */ + + ESC_PHOPEN = 0xb0, + ESC_PHCLOS = 0xb1, + ESC_PHREAD = 0xb2, + ESC_PHWRIT = 0xb3, + ESC_PHSTAT = 0xb4, + ESC_PHSPEC = 0xb5, + ESC_PHINIT = 0xb6, + + ESC_HHOPEN = 0xc0, + ESC_HHCLOS = 0xc1, + ESC_HHREAD = 0xc2, + ESC_HHWRIT = 0xc3, + ESC_HHSTAT = 0xc4, + ESC_HHSPEC = 0xc5, + ESC_HHINIT = 0xc6, + ESC_BREAK = 0xff +}; + +#ifndef _TYPEDEF_H +#define _TYPEDEF_H + +//data types +#define UBYTE unsigned char +#define UWORD unsigned short +#define ULONG unsigned int + +#define SBYTE signed char +#define SWORD signed short +#define SLONG signed int + +#define int8 char +#define int16 short +#define int32 int + +#define uint8 unsigned int8 +#define uint16 unsigned int16 +#define uint32 unsigned int32 +#ifndef FALSE +#define FALSE 0 +#endif +#ifndef TRUE +#define TRUE 1 +#endif + +#endif + + + +#endif diff --git a/MCUME_pico/pico800/atari800.c b/MCUME_pico/pico800/atari800.c new file mode 100644 index 0000000..54edc23 --- /dev/null +++ b/MCUME_pico/pico800/atari800.c @@ -0,0 +1,379 @@ +#define PROGMEM + +#include "atari800.h" +#include +#include "memory.h" +#include "cpu.h" +#include "atari.h" +#include "akey.h" +#include "pokey.h" +//#include "romatariosa.h" +#include "romatariosb.h" +//#include "romatarixl.h" +#include "antic.h" +#include "gtia.h" +#include "pia.h" +#include "colours.h" +#include "emuapi.h" +#if HAS_SND +#include "pokeysnd.h" +#endif + + +// Controllers +typedef struct +{ + // All values are 1 or 0, or perhaps not... + int left; + int right; + int up; + int down; + int trig; + +} CONTROLLER; + + + + + +// global variables +unsigned char mem[MEMORY_SIZE]; +unsigned char * memory=mem; +int tv_mode = TV_PAL; +UBYTE INPUT_key_consol; + + +// local variables +static CONTROLLER cont1, cont2; +static int INPUT_key_code = AKEY_NONE; +static int INPUT_key_shift = 0; + +/* MEMORY MAP INDEX (0 is invalid) +* 0-3FFF RAM (read/write) +* 4000-7FFF RAM (read/write) +* 8000-9FFF BASIC right CART 8K +* A000-BFFF BASIC left CART 8K +* D000-D0FF GTIA regs +* D200-D2FF POKEY regs +* D300-D3FF PIA regs +* D400-D4FF ANTIC regs +* D800-FFFF OS ROM (ro) +* E000 I/O expansion +*/ + + +// memory CPU read (load) handler +uint8 Atari_GetByte(uint16 addr) +{ + if (addr < MEMORY_SIZE) { // MAPPER_RAM + return(memory[addr]); + } + else if ( (addr >= 0xD000) && (addr < 0xD100) ) { // MAPPER_GTIA + return GTIA_GetByte(addr,1); + } + else if ( (addr >= 0xD200) && (addr < 0xD300) ) { // MAPPER_POKEY + return POKEY_GetByte(addr,1); + } + else if ( (addr >= 0xD300) && (addr < 0xD400) ) { // MAPPER_PIA + return PIA_GetByte(addr); + } + else if ( (addr >= 0xD400) && (addr < 0xD500) ) { // MAPPER_ANTIC + return ANTIC_GetByte(addr,1); + } + else if ((addr >= 0xD800) && (addr < 0x10000)) { // MAPPER_ROM (bios) + //return(memory[addr]); + return(romos[addr-0xD800]); + } + + //case MAPPER_IOEXP: // I/O exp read + // return IOEXPread(addr); + + return 0xff; +} + +// memory CPU write (store) handler +void Atari_PutByte(uint16 addr, uint8 byte) +{ + if (addr < 0x8000) { // MAPPER_RAM + memory[addr] = byte; + } + else if (addr < 0xC000) { // MAPPER_ROM + } + else if ( (addr >= 0xD000) && (addr < 0xD100) ) { // MAPPER_GTIA + GTIA_PutByte(addr, byte); + } + else if ( (addr >= 0xD200) && (addr < 0xD300) ) { // MAPPER_POKEY + POKEY_PutByte(addr, byte); + } + else if ( (addr >= 0xD300) && (addr < 0xD400) ) { // MAPPER_PIA + PIA_PutByte(addr, byte); + } + else if ( (addr >= 0xD400) && (addr < 0xD500) ) { // MAPPER_ANTIC + ANTIC_PutByte(addr, byte); + } + + //case MAPPER_IOEXP: // I/O exp write + // IOEXPwrite(addr, byte); +} + + +static void INPUT_Frame(void) +{ + int i; + static int last_key_code = AKEY_NONE; + static int last_key_break = 0; + + if (cont1.trig) GTIA_TRIG[0]=0; else GTIA_TRIG[0]=1; + + + i = (INPUT_key_code == AKEY_BREAK); + if (i && !last_key_break) { + if (POKEY_IRQEN & 0x80) { + POKEY_IRQST &= ~0x80; + CPU_GenerateIRQ(); + } + } + last_key_break = i; + POKEY_SKSTAT |= 0xc; + if (INPUT_key_shift) + POKEY_SKSTAT &= ~8; + + if (INPUT_key_code < 0) { + //if (CASSETTE_press_space) { + // INPUT_key_code = AKEY_SPACE; + // CASSETTE_press_space = 0; + //} + //else { + last_key_code = AKEY_NONE; + //} + } + if ((INPUT_key_code&~0x17) == AKEY_SHFTCTRL) { + INPUT_key_code = AKEY_NONE; + } + if (INPUT_key_code >= 0) { +//emu_printi(INPUT_key_code); + POKEY_SKSTAT &= ~4; + if ((INPUT_key_code ^ last_key_code) & ~AKEY_SHFTCTRL) { + /* ignore if only shift or control has changed its state */ + last_key_code = INPUT_key_code; + POKEY_KBCODE = (UBYTE) INPUT_key_code; + if (POKEY_IRQEN & 0x40) { + if (POKEY_IRQST & 0x40) { + POKEY_IRQST &= ~0x40; + CPU_GenerateIRQ(); + } + else { + /* keyboard over-run */ + POKEY_SKSTAT &= ~0x40; + /* assert(CPU_IRQ != 0); */ + } + } + } + } +} + +// check keyboard and set kbcode on VBI (not for A800) +void INPUT_Scanline(void) +{ +// if (cont1.trig) GTIA_TRIG[0]=0; else GTIA_TRIG[0]=1; +} + + +static void load_CART(char * cartname) +{ + int flen = emu_FileSize(cartname); + emu_FileOpen(cartname); + if (flen < 16384) { + emu_printf("8k"); + for(int i=0; itrig = 1; + else + which->trig = 0; + if (j & MASK_JOY2_DOWN) + which->down = 1; + else + which->down = 0; + if (j & MASK_JOY2_UP) + which->up = 1; + else + which->up = 0; + if (j & MASK_JOY2_RIGHT) + which->left = 1; + else + which->left = 0; + if (j & MASK_JOY2_LEFT) + which->right = 1; + else + which->right = 0; + + GTIA_Frame(); + ANTIC_Frame(1); + emu_DrawVsync(); + POKEY_Frame(); + + //int i; + //for (i=0xC000; i< 0x10000; i++) + // if (memory[i] !=0) emu_printf("bug"); +} + + + +void at8_Start(char * cartname) +{ + load_CART(cartname); + + emu_printf("antic"); + ANTIC_Initialise(); + emu_printf("gtia"); + GTIA_Initialise(); + emu_printf("pia"); + PIA_Initialise(); + emu_printf("pokey"); + POKEY_Initialise(); + PORTA = 0x00; + ANTIC_NMIEN = 0x00; + ANTIC_NMIST = 0x00; + memory[0x244] = 1; + GTIA_TRIG[0]=1; + GTIA_TRIG[1]=1; + GTIA_TRIG[2]=1; + GTIA_TRIG[3]=1; + emu_printf("6502 reset"); + CPU_Reset(); + + emu_printf("init done"); +} diff --git a/MCUME_pico/pico800/atari800.h b/MCUME_pico/pico800/atari800.h new file mode 100644 index 0000000..28a6c40 --- /dev/null +++ b/MCUME_pico/pico800/atari800.h @@ -0,0 +1,4 @@ +extern void at8_Init(void); +extern void at8_Step(void); +extern void at8_Start(char * filename); + diff --git a/MCUME_pico/pico800/colours.h b/MCUME_pico/pico800/colours.h new file mode 100644 index 0000000..a31db53 --- /dev/null +++ b/MCUME_pico/pico800/colours.h @@ -0,0 +1,68 @@ +const unsigned int colourtable[256] = +{ + 0x0, 0x1c1c1c, 0x393939, 0x595959, + 0x797979, 0x929292, 0xababab, 0xbcbcbc, + 0xcdcdcd, 0xd9d9d9, 0xe6e6e6, 0xececec, + 0xf2f2f2, 0xf8f8f8, 0xffffff, 0xffffff, + 0x391701, 0x5e2304, 0x833008, 0xa54716, + 0xc85f24, 0xe37820, 0xff911d, 0xffab1d, + 0xffc51d, 0xffce34, 0xffd84c, 0xffe651, + 0xfff456, 0xfff977, 0xffff98, 0xffff98, + 0x451904, 0x721e11, 0x9f241e, 0xb33a20, + 0xc85122, 0xe36920, 0xff811e, 0xff8c25, + 0xff982c, 0xffae38, 0xffc545, 0xffc559, + 0xffc66d, 0xffd587, 0xffe4a1, 0xffe4a1, + 0x4a1704, 0x7e1a0d, 0xb21d17, 0xc82119, + 0xdf251c, 0xec3b38, 0xfa5255, 0xfc6161, + 0xff706e, 0xff7f7e, 0xff8f8f, 0xff9d9e, + 0xffabad, 0xffb9bd, 0xffc7ce, 0xffc7ce, + 0x50568, 0x3b136d, 0x712272, 0x8b2a8c, + 0xa532a6, 0xb938ba, 0xcd3ecf, 0xdb47dd, + 0xea51eb, 0xf45ff5, 0xfe6dff, 0xfe7afd, + 0xff87fb, 0xff95fd, 0xffa4ff, 0xffa4ff, + 0x280479, 0x400984, 0x590f90, 0x70249d, + 0x8839aa, 0xa441c3, 0xc04adc, 0xd054ed, + 0xe05eff, 0xe96dff, 0xf27cff, 0xf88aff, + 0xff98ff, 0xfea1ff, 0xfeabff, 0xfeabff, + 0x35088a, 0x420aad, 0x500cd0, 0x6428d0, + 0x7945d0, 0x8d4bd4, 0xa251d9, 0xb058ec, + 0xbe60ff, 0xc56bff, 0xcc77ff, 0xd183ff, + 0xd790ff, 0xdb9dff, 0xdfaaff, 0xdfaaff, + 0x51e81, 0x626a5, 0x82fca, 0x263dd4, + 0x444cde, 0x4f5aee, 0x5a68ff, 0x6575ff, + 0x7183ff, 0x8091ff, 0x90a0ff, 0x97a9ff, + 0x9fb2ff, 0xafbeff, 0xc0cbff, 0xc0cbff, + 0xc048b, 0x2218a0, 0x382db5, 0x483ec7, + 0x584fda, 0x6159ec, 0x6b64ff, 0x7a74ff, + 0x8a84ff, 0x918eff, 0x9998ff, 0xa5a3ff, + 0xb1aeff, 0xb8b8ff, 0xc0c2ff, 0xc0c2ff, + 0x1d295a, 0x1d3876, 0x1d4892, 0x1c5cac, + 0x1c71c6, 0x3286cf, 0x489bd9, 0x4ea8ec, + 0x55b6ff, 0x70c7ff, 0x8cd8ff, 0x93dbff, + 0x9bdfff, 0xafe4ff, 0xc3e9ff, 0xc3e9ff, + 0x2f4302, 0x395202, 0x446103, 0x417a12, + 0x3e9421, 0x4a9f2e, 0x57ab3b, 0x5cbd55, + 0x61d070, 0x69e27a, 0x72f584, 0x7cfa8d, + 0x87ff97, 0x9affa6, 0xadffb6, 0xadffb6, + 0xa4108, 0xd540a, 0x10680d, 0x137d0f, + 0x169212, 0x19a514, 0x1cb917, 0x1ec919, + 0x21d91b, 0x47e42d, 0x6ef040, 0x78f74d, + 0x83ff5b, 0x9aff7a, 0xb2ff9a, 0xb2ff9a, + 0x4410b, 0x5530e, 0x66611, 0x77714, + 0x88817, 0x99b1a, 0xbaf1d, 0x48c41f, + 0x86d922, 0x8fe924, 0x99f927, 0xa8fc41, + 0xb7ff5b, 0xc9ff6e, 0xdcff81, 0xdcff81, + 0x2350f, 0x73f15, 0xc4a1c, 0x2d5f1e, + 0x4f7420, 0x598324, 0x649228, 0x82a12e, + 0xa1b034, 0xa9c13a, 0xb2d241, 0xc4d945, + 0xd6e149, 0xe4f04e, 0xf2ff53, 0xf2ff53, + 0x263001, 0x243803, 0x234005, 0x51541b, + 0x806931, 0x978135, 0xaf993a, 0xc2a73e, + 0xd5b543, 0xdbc03d, 0xe1cb38, 0xe2d836, + 0xe3e534, 0xeff258, 0xfbff7d, 0xfbff7d, + 0x401a02, 0x581f05, 0x702408, 0x8d3a13, + 0xab511f, 0xb56427, 0xbf7730, 0xd0853a, + 0xe19344, 0xeda04e, 0xf9ad58, 0xfcb75c, + 0xffc160, 0xffc671, 0xffcb83, 0xffcb83, +}; + diff --git a/MCUME_pico/pico800/cpu.c b/MCUME_pico/pico800/cpu.c new file mode 100644 index 0000000..cc73b28 --- /dev/null +++ b/MCUME_pico/pico800/cpu.c @@ -0,0 +1,2444 @@ +/* + * cpu.c - 6502 CPU emulation + * + * Copyright (C) 1995-1998 David Firth + * Copyright (C) 1998-2005 Atari800 development team (see DOC/CREDITS) + * + * This file is part of the Atari800 emulator project which emulates + * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. + * + * Atari800 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. + * + * Atari800 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 Atari800; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + Configuration symbols + ===================== + + Define CPU65C02 if you don't want 6502 JMP() bug emulation. + Define CYCLES_PER_OPCODE to update ANTIC_xpos in each opcode's emulation. + Define MONITOR_BREAK if you want code breakpoints and execution history. + Define MONITOR_BREAKPOINTS if you want user-defined breakpoints. + Define MONITOR_PROFILE if you want 6502 opcode profiling. + Define MONITOR_TRACE if you want the code to be disassembled while it is executed. + Define NO_GOTO if you compile with GCC, but want switch() rather than goto *. + Define NO_V_FLAG_VARIABLE to don't use local (static) variable V for the V flag. + Define PC_PTR to emulate 6502 Program Counter using UBYTE *. + Define PREFETCH_CODE to always fetch 2 bytes after the opcode. + Define WRAP_64K to correctly emulate instructions that wrap at 64K. + Define WRAP_ZPAGE to prevent incorrect access to the address 0x0100 in zeropage + indirect mode. + + + Limitations & Known bugs + ======================== + + There is no emulation of the bug in the BRK instruction executed simultaneously + with another interrupt. + + The 6502 emulation ignores memory attributes for instruction fetch. + This is because the instruction must come from either RAM or ROM. + A program that executes instructions from within hardware addresses will fail + since there is never any usable code there. + + The 6502 emulation also ignores memory attributes for accesses to page 0 and page 1. + */ + + +#ifdef SKIP +#include "config.h" +#include +#include /* exit() */ + +#include "cpu.h" +#ifdef ASAP /* external project, see http://asap.sf.net */ +#include "asap_internal.h" +#else +#include "antic.h" +#include "atari.h" +#include "esc.h" +#include "memory.h" +#include "monitor.h" +#ifndef BASIC +#include "statesav.h" +#ifndef __PLUS +#include "ui.h" +#endif +#endif /* BASIC */ +#endif /* ASAP */ +#else + +#include +#include /* exit() */ +#include "cpu.h" +#include "antic.h" +#include "memory.h" + +#define ESC_Run(x) + +#endif + + +/* For Atari Basic loader */ +void (*CPU_rts_handler)(void) = NULL; + +/* 6502 instruction profiling */ +#ifdef MONITOR_PROFILE +int CPU_instruction_count[256]; +#endif + +/* Execution history */ +#ifdef MONITOR_BREAK +UWORD CPU_remember_PC[CPU_REMEMBER_PC_STEPS]; +UBYTE CPU_remember_op[CPU_REMEMBER_PC_STEPS][3]; +unsigned int CPU_remember_PC_curpos = 0; +int CPU_remember_xpos[CPU_REMEMBER_PC_STEPS]; +UWORD CPU_remember_JMP[CPU_REMEMBER_JMP_STEPS]; +unsigned int CPU_remember_jmp_curpos = 0; +#define INC_RET_NESTING MONITOR_ret_nesting++ +#else /* MONITOR_BREAK */ +#define INC_RET_NESTING +#endif /* MONITOR_BREAK */ + +UBYTE CPU_cim_encountered = FALSE; +UBYTE CPU_IRQ; + +#ifdef FALCON_CPUASM + +#if defined(PAGED_MEM) || defined(PAGED_ATTRIB) +#error cpu_m68k.asm cannot work with paged memory/attributes +#endif + +#if defined(MONITOR_BREAKPOINTS) +#error cpu_m68k.asm does not support user-defined breakpoints +#endif + +#if defined(MONITOR_TRACE) +#error cpu_m68k.asm does not support disassembling the code while it is executed +#endif + +#else /* FALCON_CPUASM */ + +/* Windows headers define it */ +#undef ABSOLUTE + +#ifndef __GNUC__ +#define NO_GOTO +#endif + +/* #define CYCLES_PER_OPCODE */ + +/* #define MONITOR_PROFILE */ + +/* #define NO_V_FLAG_VARIABLE */ + +/* If PC_PTR is defined, local PC is "const UBYTE *", otherwise it's UWORD. */ +/* #define PC_PTR */ + +/* If PREFETCH_CODE is defined, 2 bytes after the opcode are always fetched. */ +/* #define PREFETCH_CODE */ + + +/* 6502 stack handling */ +#define PL MEMORY_dGetByte(0x0100 + ++S) +#define PH(x) MEMORY_dPutByte(0x0100 + S--, x) +#define PHW(x) PH((x) >> 8); PH((x) & 0xff) + +/* 6502 code fetching */ +#ifdef PC_PTR +#define GET_PC() (PC - MEMORY_mem) +#define SET_PC(newpc) (PC = MEMORY_mem + (newpc)) +#define PHPC { UWORD tmp = PC - MEMORY_mem; PHW(tmp); } +#define GET_CODE_BYTE() (*PC++) +#define PEEK_CODE_BYTE() (*PC) +#if !defined(WORDS_BIGENDIAN) && defined(WORDS_UNALIGNED_OK) +#define PEEK_CODE_WORD() (*(const UWORD *) PC) +#else +#define PEEK_CODE_WORD() (*PC + (PC[1] << 8)) +#endif +#else /* PC_PTR */ +#define GET_PC() PC +#define SET_PC(newpc) (PC = (newpc)) +#define PHPC PHW(PC) +#define GET_CODE_BYTE() MEMORY_dGetByte(PC++) +#define PEEK_CODE_BYTE() MEMORY_dGetByte(PC) +#define PEEK_CODE_WORD() MEMORY_dGetWord(PC) +#endif /* PC_PTR */ + +/* Cycle-exact Read-Modify-Write instructions. + RMW instructions: ASL, LSR, ROL, ROR, INC, DEC + (+ some undocumented) write to the specified address + *twice*: first the unmodified value, then the modified value. + This can be observed only with some hardware registers. */ +/* XXX: we do this only for GTIA, because NEW_CYCLE_EXACT does not correctly + emulate INC $D400 (and INC $D40A wasn't tested) */ +#ifdef NEW_CYCLE_EXACT +#ifndef PAGED_ATTRIB +#define RMW_GetByte(x, addr) \ + if (MEMORY_attrib[addr] == MEMORY_HARDWARE) { \ + x = MEMORY_HwGetByte(addr, FALSE); \ + if ((addr & 0xef00) == 0xc000) { \ + ANTIC_xpos--; \ + MEMORY_HwPutByte(addr, x); \ + ANTIC_xpos++; \ + } \ + } else \ + x = MEMORY_dGetByte(addr); +#else /* PAGED_ATTRIB */ +#define RMW_GetByte(x, addr) \ + x = MEMORY_GetByte(addr); \ + if ((addr & 0xef00) == 0xc000) { \ + ANTIC_xpos--; \ + MEMORY_PutByte(addr, x); \ + ANTIC_xpos++; \ + } +#endif /* PAGED_ATTRIB */ +#else /* NEW_CYCLE_EXACT */ +/* Don't emulate the first write */ +#define RMW_GetByte(x, addr) x = MEMORY_GetByte(addr); +#endif /* NEW_CYCLE_EXACT */ + +/* 6502 registers. */ +UWORD CPU_regPC; +UBYTE CPU_regA; +UBYTE CPU_regX; +UBYTE CPU_regY; +UBYTE CPU_regP; /* Processor Status Byte (Partial) */ +UBYTE CPU_regS; + +/* Transfer 6502 registers between global variables and local variables inside CPU_GO() */ +#define UPDATE_GLOBAL_REGS CPU_regPC = GET_PC(); CPU_regS = S; CPU_regA = A; CPU_regX = X; CPU_regY = Y +#define UPDATE_LOCAL_REGS SET_PC(CPU_regPC); S = CPU_regS; A = CPU_regA; X = CPU_regX; Y = CPU_regY + +/* 6502 flags local to this module */ +static UBYTE N; /* bit7 set => N flag set */ +#ifndef NO_V_FLAG_VARIABLE +static UBYTE V; /* non-zero => V flag set */ +#endif +static UBYTE Z; /* zero => Z flag set */ +static UBYTE C; /* must be 0 or 1 */ +/* B, D, I are always in CPU_regP */ + +void CPU_GetStatus(void) +{ +#ifndef NO_V_FLAG_VARIABLE + CPU_regP = (N & 0x80) + (V ? 0x40 : 0) + (CPU_regP & 0x3c) + ((Z == 0) ? 0x02 : 0) + C; +#else + CPU_regP = (N & 0x80) + (CPU_regP & 0x7c) + ((Z == 0) ? 0x02 : 0) + C; +#endif +} + +void CPU_PutStatus(void) +{ + N = CPU_regP; +#ifndef NO_V_FLAG_VARIABLE + V = (CPU_regP & 0x40); +#endif + Z = (CPU_regP & 0x02) ^ 0x02; + C = (CPU_regP & 0x01); +} + +/* Addressing modes */ +#ifdef WRAP_ZPAGE +#define zGetWord(x) (MEMORY_dGetByte(x) + (MEMORY_dGetByte((UBYTE) ((x) + 1)) << 8)) +#else +#define zGetWord(x) MEMORY_dGetWord(x) +#endif +#ifdef PREFETCH_CODE +#if defined(WORDS_BIGENDIAN) || !defined(WORDS_UNALIGNED_OK) +#warning PREFETCH_CODE is efficient only on little-endian machines with WORDS_UNALIGNED_OK +#endif +#define OP_BYTE ((UBYTE) addr) +#define OP_WORD addr +#define IMMEDIATE (PC++, (UBYTE) addr) +#define ABSOLUTE PC += 2 +#define ZPAGE PC++; addr &= 0xff +#define ABSOLUTE_X addr += X; PC += 2 +#define ABSOLUTE_Y addr += Y; PC += 2 +#define INDIRECT_X PC++; addr = (UBYTE) (addr + X); addr = zGetWord(addr) +#define INDIRECT_Y PC++; addr &= 0xff; addr = zGetWord(addr) + Y +#define ZPAGE_X PC++; addr = (UBYTE) (addr + X) +#define ZPAGE_Y PC++; addr = (UBYTE) (addr + Y) +#else /* PREFETCH_CODE */ +#define OP_BYTE PEEK_CODE_BYTE() +#define OP_WORD PEEK_CODE_WORD() +#define IMMEDIATE GET_CODE_BYTE() +#define ABSOLUTE addr = PEEK_CODE_WORD(); PC += 2 +#define ZPAGE addr = GET_CODE_BYTE() +#define ABSOLUTE_X addr = PEEK_CODE_WORD() + X; PC += 2 +#define ABSOLUTE_Y addr = PEEK_CODE_WORD() + Y; PC += 2 +#define INDIRECT_X addr = (UBYTE) (GET_CODE_BYTE() + X); addr = zGetWord(addr) +#define INDIRECT_Y addr = GET_CODE_BYTE(); addr = zGetWord(addr) + Y +#define ZPAGE_X addr = (UBYTE) (GET_CODE_BYTE() + X) +#define ZPAGE_Y addr = (UBYTE) (GET_CODE_BYTE() + Y) +#endif /* PREFETCH_CODE */ + +/* Instructions */ +#define AND(t_data) Z = N = A &= t_data +#define CMP(t_data) data = t_data; Z = N = A - data; C = (A >= data) +#define CPX(t_data) data = t_data; Z = N = X - data; C = (X >= data) +#define CPY(t_data) data = t_data; Z = N = Y - data; C = (Y >= data) +#define EOR(t_data) Z = N = A ^= t_data +#define LDA(t_data) Z = N = A = t_data +#define LDX(t_data) Z = N = X = t_data +#define LDY(t_data) Z = N = Y = t_data +#define ORA(t_data) Z = N = A |= t_data +#ifndef NO_V_FLAG_VARIABLE +#define PHP(x) data = (N & 0x80) + (V ? 0x40 : 0) + (CPU_regP & (x)) + ((Z == 0) ? 0x02 : 0) + C; PH(data) +#define PHPB0 PHP(0x2c) /* push flags with B flag clear (NMI, IRQ) */ +#define PHPB1 PHP(0x3c) /* push flags with B flag set (PHP, BRK) */ +#define PLP data = PL; N = data; V = (data & 0x40); Z = (data & 0x02) ^ 0x02; C = (data & 0x01); CPU_regP = (data & 0x0c) + 0x30 +#else /* NO_V_FLAG_VARIABLE */ +#define PHP(x) data = (N & 0x80) + (CPU_regP & (x)) + ((Z == 0) ? 0x02 : 0) + C; PH(data) +#define PHPB0 PHP(0x6c) /* push flags with B flag clear (NMI, IRQ) */ +#define PHPB1 PHP(0x7c) /* push flags with B flag set (PHP, BRK) */ +#define PLP data = PL; N = data; Z = (data & 0x02) ^ 0x02; C = (data & 0x01); CPU_regP = (data & 0x4c) + 0x30 +#endif /* NO_V_FLAG_VARIABLE */ +/* 1 or 2 extra cycles for conditional jumps */ +#if 0 +/* old, less efficient version */ +#define BRANCH(cond) \ + if (cond) { \ + SWORD sdata = (SBYTE) GET_CODE_BYTE(); \ + if ((sdata + (UBYTE) GET_PC()) & 0xff00) \ + ANTIC_xpos++; \ + ANTIC_xpos++; \ + PC += sdata; \ + DONE \ + } \ + PC++; \ + DONE +#else +#define BRANCH(cond) \ + if (cond) { \ + addr = (UWORD) (SBYTE) IMMEDIATE; \ + addr += GET_PC(); \ + if ((addr ^ GET_PC()) & 0xff00) \ + ANTIC_xpos++; \ + ANTIC_xpos++; \ + SET_PC(addr); \ + DONE \ + } \ + PC++; \ + DONE +#endif + +/* 1 extra cycle for X (or Y) index overflow */ +#define NCYCLES_X if ((UBYTE) addr < X) ANTIC_xpos++ +#define NCYCLES_Y if ((UBYTE) addr < Y) ANTIC_xpos++ + +/* Triggers a Non-Maskable Interrupt */ +void CPU_NMI(void) +{ + UBYTE S = CPU_regS; + UBYTE data; + + PHW(CPU_regPC); + PHPB0; + CPU_SetI; + CPU_regPC = MEMORY_dGetWordAligned(0xfffa); + CPU_regS = S; + ANTIC_xpos += 7; /* handling an interrupt by 6502 takes 7 cycles */ + INC_RET_NESTING; +} + +/* Check pending IRQ, helps in (not only) Lucasfilm games */ +#define CPUCHECKIRQ \ + if (CPU_IRQ && !(CPU_regP & CPU_I_FLAG) && ANTIC_xpos < ANTIC_xpos_limit) { \ + PHPC; \ + PHPB0; \ + CPU_SetI; \ + SET_PC(MEMORY_dGetWordAligned(0xfffe)); \ + ANTIC_xpos += 7; \ + INC_RET_NESTING; \ + } + +/* Enter monitor */ +#ifdef __PLUS +#define ENTER_MONITOR Atari800_Exit(TRUE) +#else +#ifdef SKIP +#define ENTER_MONITOR if (!Atari800_Exit(TRUE)) exit(0) +#else +#define ENTER_MONITOR exit(0) +#endif +#endif +#define DO_BREAK \ + UPDATE_GLOBAL_REGS; \ + CPU_GetStatus(); \ + ENTER_MONITOR; \ + CPU_PutStatus(); \ + UPDATE_LOCAL_REGS; + + +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ +static const int cycles[256] = +{ + 7, 6, 2, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6, /* 0x */ + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, /* 1x */ + 6, 6, 2, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6, /* 2x */ + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, /* 3x */ + + 6, 6, 2, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6, /* 4x */ + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, /* 5x */ + 6, 6, 2, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6, /* 6x */ + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, /* 7x */ + + 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, /* 8x */ + 2, 6, 2, 6, 4, 4, 4, 4, 2, 5, 2, 5, 5, 5, 5, 5, /* 9x */ + 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, /* Ax */ + 2, 5, 2, 5, 4, 4, 4, 4, 2, 4, 2, 4, 4, 4, 4, 4, /* Bx */ + + 2, 6, 2, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6, /* Cx */ + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, /* Dx */ + 2, 6, 2, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6, /* Ex */ + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7 /* Fx */ +}; + +/* 6502 emulation routine */ +#ifndef NO_GOTO +__extension__ /* suppress -ansi -pedantic warnings */ +#endif +void CPU_GO(int limit) +{ +#ifdef NO_GOTO +#define OPCODE_ALIAS(code) case 0x##code: +#define DONE break; +#else +#define OPCODE_ALIAS(code) opcode_##code: +#define DONE goto next; + static const void *opcode[256] = + { + &&opcode_00, &&opcode_01, &&opcode_02, &&opcode_03, + &&opcode_04, &&opcode_05, &&opcode_06, &&opcode_07, + &&opcode_08, &&opcode_09, &&opcode_0a, &&opcode_0b, + &&opcode_0c, &&opcode_0d, &&opcode_0e, &&opcode_0f, + + &&opcode_10, &&opcode_11, &&opcode_12, &&opcode_13, + &&opcode_14, &&opcode_15, &&opcode_16, &&opcode_17, + &&opcode_18, &&opcode_19, &&opcode_1a, &&opcode_1b, + &&opcode_1c, &&opcode_1d, &&opcode_1e, &&opcode_1f, + + &&opcode_20, &&opcode_21, &&opcode_22, &&opcode_23, + &&opcode_24, &&opcode_25, &&opcode_26, &&opcode_27, + &&opcode_28, &&opcode_29, &&opcode_2a, &&opcode_2b, + &&opcode_2c, &&opcode_2d, &&opcode_2e, &&opcode_2f, + + &&opcode_30, &&opcode_31, &&opcode_32, &&opcode_33, + &&opcode_34, &&opcode_35, &&opcode_36, &&opcode_37, + &&opcode_38, &&opcode_39, &&opcode_3a, &&opcode_3b, + &&opcode_3c, &&opcode_3d, &&opcode_3e, &&opcode_3f, + + &&opcode_40, &&opcode_41, &&opcode_42, &&opcode_43, + &&opcode_44, &&opcode_45, &&opcode_46, &&opcode_47, + &&opcode_48, &&opcode_49, &&opcode_4a, &&opcode_4b, + &&opcode_4c, &&opcode_4d, &&opcode_4e, &&opcode_4f, + + &&opcode_50, &&opcode_51, &&opcode_52, &&opcode_53, + &&opcode_54, &&opcode_55, &&opcode_56, &&opcode_57, + &&opcode_58, &&opcode_59, &&opcode_5a, &&opcode_5b, + &&opcode_5c, &&opcode_5d, &&opcode_5e, &&opcode_5f, + + &&opcode_60, &&opcode_61, &&opcode_62, &&opcode_63, + &&opcode_64, &&opcode_65, &&opcode_66, &&opcode_67, + &&opcode_68, &&opcode_69, &&opcode_6a, &&opcode_6b, + &&opcode_6c, &&opcode_6d, &&opcode_6e, &&opcode_6f, + + &&opcode_70, &&opcode_71, &&opcode_72, &&opcode_73, + &&opcode_74, &&opcode_75, &&opcode_76, &&opcode_77, + &&opcode_78, &&opcode_79, &&opcode_7a, &&opcode_7b, + &&opcode_7c, &&opcode_7d, &&opcode_7e, &&opcode_7f, + + &&opcode_80, &&opcode_81, &&opcode_82, &&opcode_83, + &&opcode_84, &&opcode_85, &&opcode_86, &&opcode_87, + &&opcode_88, &&opcode_89, &&opcode_8a, &&opcode_8b, + &&opcode_8c, &&opcode_8d, &&opcode_8e, &&opcode_8f, + + &&opcode_90, &&opcode_91, &&opcode_92, &&opcode_93, + &&opcode_94, &&opcode_95, &&opcode_96, &&opcode_97, + &&opcode_98, &&opcode_99, &&opcode_9a, &&opcode_9b, + &&opcode_9c, &&opcode_9d, &&opcode_9e, &&opcode_9f, + + &&opcode_a0, &&opcode_a1, &&opcode_a2, &&opcode_a3, + &&opcode_a4, &&opcode_a5, &&opcode_a6, &&opcode_a7, + &&opcode_a8, &&opcode_a9, &&opcode_aa, &&opcode_ab, + &&opcode_ac, &&opcode_ad, &&opcode_ae, &&opcode_af, + + &&opcode_b0, &&opcode_b1, &&opcode_b2, &&opcode_b3, + &&opcode_b4, &&opcode_b5, &&opcode_b6, &&opcode_b7, + &&opcode_b8, &&opcode_b9, &&opcode_ba, &&opcode_bb, + &&opcode_bc, &&opcode_bd, &&opcode_be, &&opcode_bf, + + &&opcode_c0, &&opcode_c1, &&opcode_c2, &&opcode_c3, + &&opcode_c4, &&opcode_c5, &&opcode_c6, &&opcode_c7, + &&opcode_c8, &&opcode_c9, &&opcode_ca, &&opcode_cb, + &&opcode_cc, &&opcode_cd, &&opcode_ce, &&opcode_cf, + + &&opcode_d0, &&opcode_d1, &&opcode_d2, &&opcode_d3, + &&opcode_d4, &&opcode_d5, &&opcode_d6, &&opcode_d7, + &&opcode_d8, &&opcode_d9, &&opcode_da, &&opcode_db, + &&opcode_dc, &&opcode_dd, &&opcode_de, &&opcode_df, + + &&opcode_e0, &&opcode_e1, &&opcode_e2, &&opcode_e3, + &&opcode_e4, &&opcode_e5, &&opcode_e6, &&opcode_e7, + &&opcode_e8, &&opcode_e9, &&opcode_ea, &&opcode_eb, + &&opcode_ec, &&opcode_ed, &&opcode_ee, &&opcode_ef, + + &&opcode_f0, &&opcode_f1, &&opcode_f2, &&opcode_f3, + &&opcode_f4, &&opcode_f5, &&opcode_f6, &&opcode_f7, + &&opcode_f8, &&opcode_f9, &&opcode_fa, &&opcode_fb, + &&opcode_fc, &&opcode_fd, &&opcode_fe, &&opcode_ff, + }; +#endif /* NO_GOTO */ + +#ifdef CYCLES_PER_OPCODE +#define OPCODE(code) OPCODE_ALIAS(code) ANTIC_xpos += cycles[0x##code]; +#else +#define OPCODE(code) OPCODE_ALIAS(code) +#endif + +#ifdef PC_PTR + const UBYTE *PC; +#else + UWORD PC; +#endif + UBYTE A; + UBYTE X; + UBYTE Y; + UBYTE S; + + UWORD addr; + UBYTE data; +#define insn data + +/* + This used to be in the main loop but has been removed to improve + execution speed. It does not seem to have any adverse effect on + the emulation for two reasons: + + 1. NMI's will can only be raised in antic.c - there is + no way an NMI can be generated whilst in this routine. + + 2. The timing of the IRQs are not that critical. */ + + if (ANTIC_wsync_halt) { + +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { +/* if ANTIC_WSYNC_C is a stolen cycle, ANTIC_antic2cpu_ptr will convert that to the nearest + cpu cycle before that cycle. The CPU will see this cycle, if WSYNC is not + delayed. (Actually this cycle is the first cycle of the instruction after + STA WSYNC, which was really executed one cycle after STA WSYNC because + of an internal antic delay ). ANTIC_delayed_wsync is added to this cycle to form + the limit in the case that WSYNC is not early (does not allow this extra cycle) */ + + if (limit < ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C] + ANTIC_delayed_wsync) + return; + ANTIC_xpos = ANTIC_antic2cpu_ptr[ANTIC_WSYNC_C] + ANTIC_delayed_wsync; + } + else { + if (limit < (ANTIC_WSYNC_C + ANTIC_delayed_wsync)) + return; + ANTIC_xpos = ANTIC_WSYNC_C; + } + ANTIC_delayed_wsync = 0; + +#else /* NEW_CYCLE_EXACT */ + + if (limit < ANTIC_WSYNC_C) + return; + ANTIC_xpos = ANTIC_WSYNC_C; + +#endif /* NEW_CYCLE_EXACT */ + + ANTIC_wsync_halt = 0; + } + ANTIC_xpos_limit = limit; /* needed for WSYNC store inside ANTIC */ + + UPDATE_LOCAL_REGS; + + CPUCHECKIRQ; + + while (ANTIC_xpos < ANTIC_xpos_limit) { +#ifdef MONITOR_PROFILE + int old_xpos = ANTIC_xpos; + UWORD old_PC = GET_PC(); +#endif + + +#ifdef MONITOR_BREAKPOINTS + breakpoint_return: +#endif + +#ifdef PC_PTR + /* must handle 64k wrapping */ + if (PC >= MEMORY_mem + 0xfffe) { + if (PC >= MEMORY_mem + 0x10000) + PC -= 0x10000; + else { + /* the opcode is before 0x10000, but the operand is past */ +#ifdef WORDS_UNALIGNED_OK + *(UWORD *) (MEMORY_mem + 0x10000) = *(UWORD *) MEMORY_mem; +#else + MEMORY_mem[0x10000] = MEMORY_mem[0]; + MEMORY_mem[0x10001] = MEMORY_mem[1]; +#endif /* WORDS_UNALIGNED_OK */ + } + } +#endif /* PC_PTR */ + +#ifdef MONITOR_TRACE + if (MONITOR_trace_file != NULL) { + MONITOR_ShowState(MONITOR_trace_file, GET_PC(), A, X, Y, S, + (N & 0x80) ? 'N' : '-', +#ifndef NO_V_FLAG_VARIABLE + V ? 'V' : '-', +#else + (CPU_regP & CPU_V_FLAG) ? 'V' : '-', +#endif + (Z == 0) ? 'Z' : '-', + (C != 0) ? 'C' : '-'); + } +#endif + +#ifdef MONITOR_BREAK + CPU_remember_PC[CPU_remember_PC_curpos] = GET_PC(); + CPU_remember_op[CPU_remember_PC_curpos][0] = MEMORY_dGetByte(GET_PC()); + CPU_remember_op[CPU_remember_PC_curpos][1] = MEMORY_dGetByte(GET_PC()+1); + CPU_remember_op[CPU_remember_PC_curpos][2] = MEMORY_dGetByte(GET_PC()+2); +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) + CPU_remember_xpos[CPU_remember_PC_curpos] = ANTIC_cpu2antic_ptr[ANTIC_xpos] + (ANTIC_ypos << 8); + else +#endif + CPU_remember_xpos[CPU_remember_PC_curpos] = ANTIC_xpos + (ANTIC_ypos << 8); + CPU_remember_PC_curpos = (CPU_remember_PC_curpos + 1) % CPU_REMEMBER_PC_STEPS; + + if (MONITOR_break_addr == GET_PC() || ANTIC_break_ypos == ANTIC_ypos) { + DO_BREAK; + } +#endif /* MONITOR_BREAK */ + +#if defined(WRAP_64K) && !defined(PC_PTR) + MEMORY_mem[0x10000] = MEMORY_mem[0]; +#endif + + insn = GET_CODE_BYTE(); + +#ifdef MONITOR_BREAKPOINTS +#ifdef MONITOR_BREAK + if (MONITOR_breakpoint_table_size > 0 && MONITOR_breakpoints_enabled && !MONITOR_break_step) +#else + if (MONITOR_breakpoint_table_size > 0 && MONITOR_breakpoints_enabled) +#endif + { + UBYTE optype = MONITOR_optype6502[insn]; + int i; + switch (optype >> 4) { + case 1: + addr = PEEK_CODE_WORD(); + break; + case 2: + addr = PEEK_CODE_BYTE(); + break; + case 3: + addr = PEEK_CODE_WORD() + X; + break; + case 4: + addr = PEEK_CODE_WORD() + Y; + break; + case 5: + addr = (UBYTE) (PEEK_CODE_BYTE() + X); + addr = zGetWord(addr); + break; + case 6: + addr = PEEK_CODE_BYTE(); + addr = zGetWord(addr) + Y; + break; + case 7: + addr = (UBYTE) (PEEK_CODE_BYTE() + X); + break; + case 8: + addr = (UBYTE) (PEEK_CODE_BYTE() + Y); + break; + /* XXX: case 13 */ + default: + addr = 0; + break; + } + for (i = 0; i < MONITOR_breakpoint_table_size; i++) { + int cond; + int value, m_addr; + if (!MONITOR_breakpoint_table[i].enabled) + continue; /* skip */ + cond = MONITOR_breakpoint_table[i].condition; + if (cond == MONITOR_BREAKPOINT_OR) + break; /* fire */ + value = MONITOR_breakpoint_table[i].value; + m_addr = MONITOR_breakpoint_table[i].m_addr; + if (cond == MONITOR_BREAKPOINT_FLAG_CLEAR) { + switch (value) { + case CPU_N_FLAG: + if ((N & 0x80) == 0) + continue; + break; +#ifndef NO_V_FLAG_VARIABLE + case CPU_V_FLAG: + if (V == 0) + continue; + break; +#endif + case CPU_Z_FLAG: + if (Z != 0) + continue; + break; + case CPU_C_FLAG: + if (C == 0) + continue; + break; + default: + if ((CPU_regP & value) == 0) + continue; + break; + } + } + else if (cond == MONITOR_BREAKPOINT_FLAG_SET) { + switch (value) { + case CPU_N_FLAG: + if ((N & 0x80) != 0) + continue; + break; +#ifndef NO_V_FLAG_VARIABLE + case CPU_V_FLAG: + if (V != 0) + continue; + break; +#endif + case CPU_Z_FLAG: + if (Z == 0) + continue; + break; + case CPU_C_FLAG: + if (C != 0) + continue; + break; + default: + if ((CPU_regP & value) != 0) + continue; + break; + } + } + else { + int val; + switch (cond >> 3) { + case MONITOR_BREAKPOINT_PC >> 3: + val = GET_PC() - 1; + break; + case MONITOR_BREAKPOINT_A >> 3: + val = A; + break; + case MONITOR_BREAKPOINT_X >> 3: + val = X; + break; + case MONITOR_BREAKPOINT_Y >> 3: + val = Y; + break; + case MONITOR_BREAKPOINT_S >> 3: + val = S; + break; + case MONITOR_BREAKPOINT_READ >> 3: + if ((optype & 4) == 0) + goto cond_failed; + val = addr; + break; + case MONITOR_BREAKPOINT_WRITE >> 3: + if ((optype & 8) == 0) + goto cond_failed; + val = addr; + break; + case MONITOR_BREAKPOINT_ACCESS >> 3: + if ((optype & 12) == 0) + goto cond_failed; + val = addr; + break; + case MONITOR_BREAKPOINT_MEMORY >> 3: + val = MEMORY_SafeGetByte(m_addr); + break; + default: + /* shouldn't happen */ + continue; + } + if ((cond & MONITOR_BREAKPOINT_LESS) != 0 && val < value) + continue; + if ((cond & MONITOR_BREAKPOINT_EQUAL) != 0 && val == value) + continue; + if ((cond & MONITOR_BREAKPOINT_GREATER) != 0 && val > value) + continue; + cond_failed: + ; + } + /* a condition failed */ + /* quickly skip AND-connected conditions */ + do { + if (++i >= MONITOR_breakpoint_table_size) + goto no_breakpoint; + } while (MONITOR_breakpoint_table[i].condition != MONITOR_BREAKPOINT_OR || !MONITOR_breakpoint_table[i].enabled); + } + /* fire breakpoint */ + PC--; + DO_BREAK; + goto breakpoint_return; + no_breakpoint: + ; + } +#endif /* MONITOR_BREAKPOINTS */ + +#ifndef CYCLES_PER_OPCODE + ANTIC_xpos += cycles[insn]; +#endif + +#ifdef MONITOR_PROFILE + CPU_instruction_count[insn]++; + MONITOR_coverage[old_PC = PC - 1].count++; + MONITOR_coverage_insns++; +#endif + +#ifdef PREFETCH_CODE + addr = PEEK_CODE_WORD(); +#endif + +#ifdef NO_GOTO + switch (insn) { +#else + goto *opcode[insn]; +#endif + + OPCODE(00) /* BRK */ +#ifdef MONITOR_BREAK + if (MONITOR_break_brk) { + DO_BREAK; + } + else +#endif + { + PC++; + PHPC; + PHPB1; + CPU_SetI; + SET_PC(MEMORY_dGetWordAligned(0xfffe)); + INC_RET_NESTING; + } + DONE + + OPCODE(01) /* ORA (ab,x) */ + INDIRECT_X; + ORA(MEMORY_GetByte(addr)); + DONE + + OPCODE(03) /* ASO (ab,x) [unofficial - ASL then ORA with Acc] */ + INDIRECT_X; + + aso: + RMW_GetByte(data, addr); + C = (data & 0x80) ? 1 : 0; + data <<= 1; + MEMORY_PutByte(addr, data); + Z = N = A |= data; + DONE + + OPCODE_ALIAS(04) /* NOP ab [unofficial - skip byte] */ + OPCODE_ALIAS(44) + OPCODE(64) + PC++; + DONE + + OPCODE_ALIAS(14) /* NOP ab,x [unofficial - skip byte] */ + OPCODE_ALIAS(34) + OPCODE_ALIAS(54) + OPCODE_ALIAS(74) + OPCODE_ALIAS(d4) + OPCODE(f4) + PC++; + DONE + + OPCODE_ALIAS(80) /* NOP #ab [unofficial - skip byte] */ + OPCODE_ALIAS(82) + OPCODE_ALIAS(89) + OPCODE_ALIAS(c2) + OPCODE(e2) + PC++; + DONE + + OPCODE(05) /* ORA ab */ + ZPAGE; + ORA(MEMORY_dGetByte(addr)); + DONE + + OPCODE(06) /* ASL ab */ + ZPAGE; + data = MEMORY_dGetByte(addr); + C = (data & 0x80) ? 1 : 0; + Z = N = data << 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(07) /* ASO ab [unofficial - ASL then ORA with Acc] */ + ZPAGE; + + aso_zpage: + data = MEMORY_dGetByte(addr); + C = (data & 0x80) ? 1 : 0; + data <<= 1; + MEMORY_dPutByte(addr, data); + Z = N = A |= data; + DONE + + OPCODE(08) /* PHP */ + PHPB1; + DONE + + OPCODE(09) /* ORA #ab */ + ORA(IMMEDIATE); + DONE + + OPCODE(0a) /* ASL */ + C = (A & 0x80) ? 1 : 0; + Z = N = A <<= 1; + DONE + + OPCODE_ALIAS(0b) /* ANC #ab [unofficial - AND then copy N to C (Fox) */ + OPCODE(2b) + AND(IMMEDIATE); + C = N >= 0x80; + DONE + + OPCODE(0c) /* NOP abcd [unofficial - skip word] */ + PC += 2; + DONE + + OPCODE(0d) /* ORA abcd */ + ABSOLUTE; + ORA(MEMORY_GetByte(addr)); + DONE + + OPCODE(0e) /* ASL abcd */ + ABSOLUTE; + RMW_GetByte(data, addr); + C = (data & 0x80) ? 1 : 0; + Z = N = data << 1; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(0f) /* ASO abcd [unofficial - ASL then ORA with Acc] */ + ABSOLUTE; + goto aso; + + OPCODE(10) /* BPL */ + BRANCH(!(N & 0x80)) + + OPCODE(11) /* ORA (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + ORA(MEMORY_GetByte(addr)); + DONE + + OPCODE(13) /* ASO (ab),y [unofficial - ASL then ORA with Acc] */ + INDIRECT_Y; + goto aso; + + OPCODE(15) /* ORA ab,x */ + ZPAGE_X; + ORA(MEMORY_dGetByte(addr)); + DONE + + OPCODE(16) /* ASL ab,x */ + ZPAGE_X; + data = MEMORY_dGetByte(addr); + C = (data & 0x80) ? 1 : 0; + Z = N = data << 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(17) /* ASO ab,x [unofficial - ASL then ORA with Acc] */ + ZPAGE_X; + goto aso_zpage; + + OPCODE(18) /* CLC */ + C = 0; + DONE + + OPCODE(19) /* ORA abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + ORA(MEMORY_GetByte(addr)); + DONE + + OPCODE(1b) /* ASO abcd,y [unofficial - ASL then ORA with Acc] */ + ABSOLUTE_Y; + goto aso; + + OPCODE_ALIAS(1c) /* NOP abcd,x [unofficial - skip word] */ + OPCODE_ALIAS(3c) + OPCODE_ALIAS(5c) + OPCODE_ALIAS(7c) + OPCODE_ALIAS(dc) + OPCODE(fc) + if (OP_BYTE + X >= 0x100) + ANTIC_xpos++; + PC += 2; + DONE + + OPCODE(1d) /* ORA abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + ORA(MEMORY_GetByte(addr)); + DONE + + OPCODE(1e) /* ASL abcd,x */ + ABSOLUTE_X; + RMW_GetByte(data, addr); + C = (data & 0x80) ? 1 : 0; + Z = N = data << 1; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(1f) /* ASO abcd,x [unofficial - ASL then ORA with Acc] */ + ABSOLUTE_X; + goto aso; + + OPCODE(20) /* JSR abcd */ + { + UWORD retaddr = GET_PC() + 1; +#ifdef MONITOR_BREAK + CPU_remember_JMP[CPU_remember_jmp_curpos] = GET_PC() - 1; + CPU_remember_jmp_curpos = (CPU_remember_jmp_curpos + 1) % CPU_REMEMBER_JMP_STEPS; + MONITOR_ret_nesting++; +#endif + PHW(retaddr); + } + SET_PC(OP_WORD); + DONE + + OPCODE(21) /* AND (ab,x) */ + INDIRECT_X; + AND(MEMORY_GetByte(addr)); + DONE + + OPCODE(23) /* RLA (ab,x) [unofficial - ROL Mem, then AND with A] */ + INDIRECT_X; + + rla: + RMW_GetByte(data, addr); + if (C) { + C = (data & 0x80) ? 1 : 0; + data = (data << 1) + 1; + } + else { + C = (data & 0x80) ? 1 : 0; + data = (data << 1); + } + MEMORY_PutByte(addr, data); + Z = N = A &= data; + DONE + + OPCODE(24) /* BIT ab */ + ZPAGE; + N = MEMORY_dGetByte(addr); +#ifndef NO_V_FLAG_VARIABLE + V = N & 0x40; +#else + CPU_regP = (CPU_regP & 0xbf) + (N & 0x40); +#endif + Z = (A & N); + DONE + + OPCODE(25) /* AND ab */ + ZPAGE; + AND(MEMORY_dGetByte(addr)); + DONE + + OPCODE(26) /* ROL ab */ + ZPAGE; + data = MEMORY_dGetByte(addr); + Z = N = (data << 1) + C; + C = (data & 0x80) ? 1 : 0; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(27) /* RLA ab [unofficial - ROL Mem, then AND with A] */ + ZPAGE; + + rla_zpage: + data = MEMORY_dGetByte(addr); + if (C) { + C = (data & 0x80) ? 1 : 0; + data = (data << 1) + 1; + } + else { + C = (data & 0x80) ? 1 : 0; + data = (data << 1); + } + MEMORY_dPutByte(addr, data); + Z = N = A &= data; + DONE + + OPCODE(28) /* PLP */ + PLP; + CPUCHECKIRQ; + DONE + + OPCODE(29) /* AND #ab */ + AND(IMMEDIATE); + DONE + + OPCODE(2a) /* ROL */ + Z = N = (A << 1) + C; + C = (A & 0x80) ? 1 : 0; + A = Z; + DONE + + OPCODE(2c) /* BIT abcd */ + ABSOLUTE; + N = MEMORY_GetByte(addr); +#ifndef NO_V_FLAG_VARIABLE + V = N & 0x40; +#else + CPU_regP = (CPU_regP & 0xbf) + (N & 0x40); +#endif + Z = (A & N); + DONE + + OPCODE(2d) /* AND abcd */ + ABSOLUTE; + AND(MEMORY_GetByte(addr)); + DONE + + OPCODE(2e) /* ROL abcd */ + ABSOLUTE; + RMW_GetByte(data, addr); + Z = N = (data << 1) + C; + C = (data & 0x80) ? 1 : 0; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(2f) /* RLA abcd [unofficial - ROL Mem, then AND with A] */ + ABSOLUTE; + goto rla; + + OPCODE(30) /* BMI */ + BRANCH(N & 0x80) + + OPCODE(31) /* AND (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + AND(MEMORY_GetByte(addr)); + DONE + + OPCODE(33) /* RLA (ab),y [unofficial - ROL Mem, then AND with A] */ + INDIRECT_Y; + goto rla; + + OPCODE(35) /* AND ab,x */ + ZPAGE_X; + AND(MEMORY_dGetByte(addr)); + DONE + + OPCODE(36) /* ROL ab,x */ + ZPAGE_X; + data = MEMORY_dGetByte(addr); + Z = N = (data << 1) + C; + C = (data & 0x80) ? 1 : 0; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(37) /* RLA ab,x [unofficial - ROL Mem, then AND with A] */ + ZPAGE_X; + goto rla_zpage; + + OPCODE(38) /* SEC */ + C = 1; + DONE + + OPCODE(39) /* AND abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + AND(MEMORY_GetByte(addr)); + DONE + + OPCODE(3b) /* RLA abcd,y [unofficial - ROL Mem, then AND with A] */ + ABSOLUTE_Y; + goto rla; + + OPCODE(3d) /* AND abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + AND(MEMORY_GetByte(addr)); + DONE + + OPCODE(3e) /* ROL abcd,x */ + ABSOLUTE_X; + RMW_GetByte(data, addr); + Z = N = (data << 1) + C; + C = (data & 0x80) ? 1 : 0; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(3f) /* RLA abcd,x [unofficial - ROL Mem, then AND with A] */ + ABSOLUTE_X; + goto rla; + + OPCODE(40) /* RTI */ + PLP; + data = PL; + SET_PC((PL << 8) + data); + CPUCHECKIRQ; +#ifdef MONITOR_BREAK + if (MONITOR_break_ret && --MONITOR_ret_nesting <= 0) + MONITOR_break_step = TRUE; +#endif + DONE + + OPCODE(41) /* EOR (ab,x) */ + INDIRECT_X; + EOR(MEMORY_GetByte(addr)); + DONE + + OPCODE(43) /* LSE (ab,x) [unofficial - LSR then EOR result with A] */ + INDIRECT_X; + + lse: + RMW_GetByte(data, addr); + C = data & 1; + data >>= 1; + MEMORY_PutByte(addr, data); + Z = N = A ^= data; + DONE + + OPCODE(45) /* EOR ab */ + ZPAGE; + EOR(MEMORY_dGetByte(addr)); + DONE + + OPCODE(46) /* LSR ab */ + ZPAGE; + data = MEMORY_dGetByte(addr); + C = data & 1; + Z = data >> 1; + N = 0; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(47) /* LSE ab [unofficial - LSR then EOR result with A] */ + ZPAGE; + + lse_zpage: + data = MEMORY_dGetByte(addr); + C = data & 1; + data >>= 1; + MEMORY_dPutByte(addr, data); + Z = N = A ^= data; + DONE + + OPCODE(48) /* PHA */ + PH(A); + DONE + + OPCODE(49) /* EOR #ab */ + EOR(IMMEDIATE); + DONE + + OPCODE(4a) /* LSR */ + C = A & 1; + Z = N = A >>= 1; + DONE + + OPCODE(4b) /* ALR #ab [unofficial - Acc AND Data, LSR result] */ + data = A & IMMEDIATE; + C = data & 1; + Z = N = A = (data >> 1); + DONE + + OPCODE(4c) /* JMP abcd */ +#ifdef MONITOR_BREAK + CPU_remember_JMP[CPU_remember_jmp_curpos] = GET_PC() - 1; + CPU_remember_jmp_curpos = (CPU_remember_jmp_curpos + 1) % CPU_REMEMBER_JMP_STEPS; +#endif + SET_PC(OP_WORD); + DONE + + OPCODE(4d) /* EOR abcd */ + ABSOLUTE; + EOR(MEMORY_GetByte(addr)); + DONE + + OPCODE(4e) /* LSR abcd */ + ABSOLUTE; + RMW_GetByte(data, addr); + C = data & 1; + Z = data >> 1; + N = 0; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(4f) /* LSE abcd [unofficial - LSR then EOR result with A] */ + ABSOLUTE; + goto lse; + + OPCODE(50) /* BVC */ +#ifndef NO_V_FLAG_VARIABLE + BRANCH(!V) +#else + BRANCH(!(CPU_regP & 0x40)) +#endif + + OPCODE(51) /* EOR (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + EOR(MEMORY_GetByte(addr)); + DONE + + OPCODE(53) /* LSE (ab),y [unofficial - LSR then EOR result with A] */ + INDIRECT_Y; + goto lse; + + OPCODE(55) /* EOR ab,x */ + ZPAGE_X; + EOR(MEMORY_dGetByte(addr)); + DONE + + OPCODE(56) /* LSR ab,x */ + ZPAGE_X; + data = MEMORY_dGetByte(addr); + C = data & 1; + Z = data >> 1; + N = 0; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(57) /* LSE ab,x [unofficial - LSR then EOR result with A] */ + ZPAGE_X; + goto lse_zpage; + + OPCODE(58) /* CLI */ + CPU_ClrI; + CPUCHECKIRQ; + DONE + + OPCODE(59) /* EOR abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + EOR(MEMORY_GetByte(addr)); + DONE + + OPCODE(5b) /* LSE abcd,y [unofficial - LSR then EOR result with A] */ + ABSOLUTE_Y; + goto lse; + + OPCODE(5d) /* EOR abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + EOR(MEMORY_GetByte(addr)); + DONE + + OPCODE(5e) /* LSR abcd,x */ + ABSOLUTE_X; + RMW_GetByte(data, addr); + C = data & 1; + Z = data >> 1; + N = 0; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(5f) /* LSE abcd,x [unofficial - LSR then EOR result with A] */ + ABSOLUTE_X; + goto lse; + + OPCODE(60) /* RTS */ + data = PL; + SET_PC((PL << 8) + data + 1); +#ifdef MONITOR_BREAK + if (MONITOR_break_ret && --MONITOR_ret_nesting <= 0) + MONITOR_break_step = TRUE; +#endif + if (CPU_rts_handler != NULL) { + CPU_rts_handler(); + CPU_rts_handler = NULL; + } + DONE + + OPCODE(61) /* ADC (ab,x) */ + INDIRECT_X; + data = MEMORY_GetByte(addr); + goto adc; + + OPCODE(63) /* RRA (ab,x) [unofficial - ROR Mem, then ADC to Acc] */ + INDIRECT_X; + + rra: + RMW_GetByte(data, addr); + if (C) { + C = data & 1; + data = (data >> 1) + 0x80; + } + else { + C = data & 1; + data >>= 1; + } + MEMORY_PutByte(addr, data); + goto adc; + + OPCODE(65) /* ADC ab */ + ZPAGE; + data = MEMORY_dGetByte(addr); + goto adc; + + OPCODE(66) /* ROR ab */ + ZPAGE; + data = MEMORY_dGetByte(addr); + Z = N = (C << 7) + (data >> 1); + C = data & 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(67) /* RRA ab [unofficial - ROR Mem, then ADC to Acc] */ + ZPAGE; + + rra_zpage: + data = MEMORY_dGetByte(addr); + if (C) { + C = data & 1; + data = (data >> 1) + 0x80; + } + else { + C = data & 1; + data >>= 1; + } + MEMORY_dPutByte(addr, data); + goto adc; + + OPCODE(68) /* PLA */ + Z = N = A = PL; + DONE + + OPCODE(69) /* ADC #ab */ + data = IMMEDIATE; + goto adc; + + OPCODE(6a) /* ROR */ + Z = N = (C << 7) + (A >> 1); + C = A & 1; + A = Z; + DONE + + OPCODE(6b) /* ARR #ab [unofficial - Acc AND Data, ROR result] */ + /* It does some 'BCD fixup' if D flag is set */ + /* MPC 05/24/00 */ + data = A & IMMEDIATE; + if (CPU_regP & CPU_D_FLAG) { + UBYTE temp = (data >> 1) + (C << 7); + Z = N = temp; +#ifndef NO_V_FLAG_VARIABLE + V = ((temp ^ data) & 0x40); +#else + CPU_regP = (CPU_regP & 0xbf) + ((temp ^ data) & 0x40); +#endif + if ((data & 0x0F) + (data & 0x01) > 5) + temp = (temp & 0xF0) + ((temp + 0x6) & 0x0F); + if (data + (data & 0x10) >= 0x60) { + temp += 0x60; + C = 1; + } + else + C = 0; + A = (UBYTE) temp; + } + else { + Z = N = A = (data >> 1) + (C << 7); + C = data >> 7; +#ifndef NO_V_FLAG_VARIABLE + V = C ^ ((A >> 5) & 1); +#else + CPU_regP = (CPU_regP & 0xbf) + ((A ^ data) & 0x40); +#endif + } + DONE + + OPCODE(6c) /* JMP (abcd) */ +#ifdef MONITOR_BREAK + CPU_remember_JMP[CPU_remember_jmp_curpos] = GET_PC() - 1; + CPU_remember_jmp_curpos = (CPU_remember_jmp_curpos + 1) % CPU_REMEMBER_JMP_STEPS; +#endif + ABSOLUTE; +#ifdef CPU65C02 + /* XXX: if ((UBYTE) addr == 0xff) ANTIC_xpos++; */ + SET_PC(MEMORY_dGetWord(addr)); +#else + /* original 6502 had a bug in JMP (addr) when addr crossed page boundary */ + if ((UBYTE) addr == 0xff) + SET_PC((MEMORY_dGetByte(addr - 0xff) << 8) + MEMORY_dGetByte(addr)); + else + SET_PC(MEMORY_dGetWord(addr)); +#endif + DONE + + OPCODE(6d) /* ADC abcd */ + ABSOLUTE; + data = MEMORY_GetByte(addr); + goto adc; + + OPCODE(6e) /* ROR abcd */ + ABSOLUTE; + RMW_GetByte(data, addr); + Z = N = (C << 7) + (data >> 1); + C = data & 1; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(6f) /* RRA abcd [unofficial - ROR Mem, then ADC to Acc] */ + ABSOLUTE; + goto rra; + + OPCODE(70) /* BVS */ +#ifndef NO_V_FLAG_VARIABLE + BRANCH(V) +#else + BRANCH(CPU_regP & 0x40) +#endif + + OPCODE(71) /* ADC (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + data = MEMORY_GetByte(addr); + goto adc; + + OPCODE(73) /* RRA (ab),y [unofficial - ROR Mem, then ADC to Acc] */ + INDIRECT_Y; + goto rra; + + OPCODE(75) /* ADC ab,x */ + ZPAGE_X; + data = MEMORY_dGetByte(addr); + goto adc; + + OPCODE(76) /* ROR ab,x */ + ZPAGE_X; + data = MEMORY_dGetByte(addr); + Z = N = (C << 7) + (data >> 1); + C = data & 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(77) /* RRA ab,x [unofficial - ROR Mem, then ADC to Acc] */ + ZPAGE_X; + goto rra_zpage; + + OPCODE(78) /* SEI */ + CPU_SetI; + DONE + + OPCODE(79) /* ADC abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + data = MEMORY_GetByte(addr); + goto adc; + + OPCODE(7b) /* RRA abcd,y [unofficial - ROR Mem, then ADC to Acc] */ + ABSOLUTE_Y; + goto rra; + + OPCODE(7d) /* ADC abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + data = MEMORY_GetByte(addr); + goto adc; + + OPCODE(7e) /* ROR abcd,x */ + ABSOLUTE_X; + RMW_GetByte(data, addr); + Z = N = (C << 7) + (data >> 1); + C = data & 1; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(7f) /* RRA abcd,x [unofficial - ROR Mem, then ADC to Acc] */ + ABSOLUTE_X; + goto rra; + + OPCODE(81) /* STA (ab,x) */ + INDIRECT_X; + MEMORY_PutByte(addr, A); + DONE + + /* AXS doesn't change flags and SAX is better name for it (Fox) */ + OPCODE(83) /* SAX (ab,x) [unofficial - Store result A AND X */ + INDIRECT_X; + data = A & X; + MEMORY_PutByte(addr, data); + DONE + + OPCODE(84) /* STY ab */ + ZPAGE; + MEMORY_dPutByte(addr, Y); + DONE + + OPCODE(85) /* STA ab */ + ZPAGE; + MEMORY_dPutByte(addr, A); + DONE + + OPCODE(86) /* STX ab */ + ZPAGE; + MEMORY_dPutByte(addr, X); + DONE + + OPCODE(87) /* SAX ab [unofficial - Store result A AND X] */ + ZPAGE; + data = A & X; + MEMORY_dPutByte(addr, data); + DONE + + OPCODE(88) /* DEY */ + Z = N = --Y; + DONE + + OPCODE(8a) /* TXA */ + Z = N = A = X; + DONE + + OPCODE(8b) /* ANE #ab [unofficial - A AND X AND (Mem OR $EF) to Acc] (Fox) */ + data = IMMEDIATE; + Z = N = A & X & data; + A &= X & (data | 0xef); + DONE + + OPCODE(8c) /* STY abcd */ + ABSOLUTE; + MEMORY_PutByte(addr, Y); + DONE + + OPCODE(8d) /* STA abcd */ + ABSOLUTE; + MEMORY_PutByte(addr, A); + DONE + + OPCODE(8e) /* STX abcd */ + ABSOLUTE; + MEMORY_PutByte(addr, X); + DONE + + OPCODE(8f) /* SAX abcd [unofficial - Store result A AND X] */ + ABSOLUTE; + data = A & X; + MEMORY_PutByte(addr, data); + DONE + + OPCODE(90) /* BCC */ + BRANCH(!C) + + OPCODE(91) /* STA (ab),y */ + INDIRECT_Y; + MEMORY_PutByte(addr, A); + DONE + + OPCODE(93) /* SHA (ab),y [unofficial, UNSTABLE - Store A AND X AND (H+1) ?] (Fox) */ + /* It seems previous memory value is important - also in 9f */ + ZPAGE; + addr = zGetWord(addr); + data = A & X & ((addr >> 8) + 1); + if ((addr & 0xff) + Y > 0xff) { /* if it crosses a page */ + MEMORY_PutByte(((addr + Y) & 0xff) | (data << 8), data); + } + else { + MEMORY_PutByte(addr + Y, data); + } + DONE + + OPCODE(94) /* STY ab,x */ + ZPAGE_X; + MEMORY_dPutByte(addr, Y); + DONE + + OPCODE(95) /* STA ab,x */ + ZPAGE_X; + MEMORY_dPutByte(addr, A); + DONE + + OPCODE(96) /* STX ab,y */ + ZPAGE_Y; + MEMORY_PutByte(addr, X); + DONE + + OPCODE(97) /* SAX ab,y [unofficial - Store result A AND X] */ + ZPAGE_Y; + data = A & X; + MEMORY_dPutByte(addr, data); + DONE + + OPCODE(98) /* TYA */ + Z = N = A = Y; + DONE + + OPCODE(99) /* STA abcd,y */ + ABSOLUTE_Y; + MEMORY_PutByte(addr, A); + DONE + + OPCODE(9a) /* TXS */ + S = X; + DONE + + OPCODE(9b) /* SHS abcd,y [unofficial, UNSTABLE] (Fox) */ + /* Transfer A AND X to S, then store S AND (H+1)] */ + /* S seems to be stable, only memory values vary */ + ABSOLUTE; + S = A & X; + data = S & ((addr >> 8) + 1); + if ((addr & 0xff) + Y > 0xff) { /* if it crosses a page */ + MEMORY_PutByte(((addr + Y) & 0xff) | (data << 8), data); + } + else { + MEMORY_PutByte(addr + Y, data); + } + DONE + + OPCODE(9c) /* SHY abcd,x [unofficial - Store Y and (H+1)] (Fox) */ + /* Seems to be stable */ + ABSOLUTE; + /* MPC 05/24/00 */ + data = Y & ((UBYTE) ((addr >> 8) + 1)); + if ((addr & 0xff) + X > 0xff) { /* if it crosses a page */ + MEMORY_PutByte(((addr + X) & 0xff) | (data << 8), data); + } + else { + MEMORY_PutByte(addr + X, data); + } + DONE + + OPCODE(9d) /* STA abcd,x */ + ABSOLUTE_X; + MEMORY_PutByte(addr, A); + DONE + + OPCODE(9e) /* SHX abcd,y [unofficial - Store X and (H+1)] (Fox) */ + /* Seems to be stable */ + ABSOLUTE; + /* MPC 05/24/00 */ + data = X & ((UBYTE) ((addr >> 8) + 1)); + if ((addr & 0xff) + Y > 0xff) { /* if it crosses a page */ + MEMORY_PutByte(((addr + Y) & 0xff) | (data << 8), data); + } + else { + MEMORY_PutByte(addr + Y, data); + } + DONE + + OPCODE(9f) /* SHA abcd,y [unofficial, UNSTABLE - Store A AND X AND (H+1) ?] (Fox) */ + ABSOLUTE; + data = A & X & ((addr >> 8) + 1); + if ((addr & 0xff) + Y > 0xff) { /* if it crosses a page */ + MEMORY_PutByte(((addr + Y) & 0xff) | (data << 8), data); + } + else { + MEMORY_PutByte(addr + Y, data); + } + DONE + + OPCODE(a0) /* LDY #ab */ + LDY(IMMEDIATE); + DONE + + OPCODE(a1) /* LDA (ab,x) */ + INDIRECT_X; + LDA(MEMORY_GetByte(addr)); + DONE + + OPCODE(a2) /* LDX #ab */ + LDX(IMMEDIATE); + DONE + + OPCODE(a3) /* LAX (ab,x) [unofficial] */ + INDIRECT_X; + Z = N = X = A = MEMORY_GetByte(addr); + DONE + + OPCODE(a4) /* LDY ab */ + ZPAGE; + LDY(MEMORY_dGetByte(addr)); + DONE + + OPCODE(a5) /* LDA ab */ + ZPAGE; + LDA(MEMORY_dGetByte(addr)); + DONE + + OPCODE(a6) /* LDX ab */ + ZPAGE; + LDX(MEMORY_dGetByte(addr)); + DONE + + OPCODE(a7) /* LAX ab [unofficial] */ + ZPAGE; + Z = N = X = A = MEMORY_GetByte(addr); + DONE + + OPCODE(a8) /* TAY */ + Z = N = Y = A; + DONE + + OPCODE(a9) /* LDA #ab */ + LDA(IMMEDIATE); + DONE + + OPCODE(aa) /* TAX */ + Z = N = X = A; + DONE + + OPCODE(ab) /* ANX #ab [unofficial - AND #ab, then TAX] */ + Z = N = X = A &= IMMEDIATE; + DONE + + OPCODE(ac) /* LDY abcd */ + ABSOLUTE; + LDY(MEMORY_GetByte(addr)); + DONE + + OPCODE(ad) /* LDA abcd */ + ABSOLUTE; + LDA(MEMORY_GetByte(addr)); + DONE + + OPCODE(ae) /* LDX abcd */ + ABSOLUTE; + LDX(MEMORY_GetByte(addr)); + DONE + + OPCODE(af) /* LAX abcd [unofficial] */ + ABSOLUTE; + Z = N = X = A = MEMORY_GetByte(addr); + DONE + + OPCODE(b0) /* BCS */ + BRANCH(C) + + OPCODE(b1) /* LDA (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + LDA(MEMORY_GetByte(addr)); + DONE + + OPCODE(b3) /* LAX (ab),y [unofficial] */ + INDIRECT_Y; + NCYCLES_Y; + Z = N = X = A = MEMORY_GetByte(addr); + DONE + + OPCODE(b4) /* LDY ab,x */ + ZPAGE_X; + LDY(MEMORY_dGetByte(addr)); + DONE + + OPCODE(b5) /* LDA ab,x */ + ZPAGE_X; + LDA(MEMORY_dGetByte(addr)); + DONE + + OPCODE(b6) /* LDX ab,y */ + ZPAGE_Y; + LDX(MEMORY_GetByte(addr)); + DONE + + OPCODE(b7) /* LAX ab,y [unofficial] */ + ZPAGE_Y; + Z = N = X = A = MEMORY_GetByte(addr); + DONE + + OPCODE(b8) /* CLV */ +#ifndef NO_V_FLAG_VARIABLE + V = 0; +#else + CPU_ClrV; +#endif + DONE + + OPCODE(b9) /* LDA abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + LDA(MEMORY_GetByte(addr)); + DONE + + OPCODE(ba) /* TSX */ + Z = N = X = S; + DONE + +/* AXA [unofficial - original decode by R.Sterba and R.Petruzela 15.1.1998 :-)] + AXA - this is our new imaginative name for instruction with opcode hex BB. + AXA - Store Mem AND #$FD to Acc and X, then set stackpoint to value (Acc - 4) + It's cool! :-) + LAS - this is better name for this :) (Fox) + It simply ANDs stack pointer with Mem, then transfers result to A and X + */ + + OPCODE(bb) /* LAS abcd,y [unofficial - AND S with Mem, transfer to A and X (Fox) */ + ABSOLUTE_Y; + NCYCLES_Y; + Z = N = A = X = S &= MEMORY_GetByte(addr); + DONE + + OPCODE(bc) /* LDY abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + LDY(MEMORY_GetByte(addr)); + DONE + + OPCODE(bd) /* LDA abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + LDA(MEMORY_GetByte(addr)); + DONE + + OPCODE(be) /* LDX abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + LDX(MEMORY_GetByte(addr)); + DONE + + OPCODE(bf) /* LAX abcd,y [unofficial] */ + ABSOLUTE_Y; + NCYCLES_Y; + Z = N = X = A = MEMORY_GetByte(addr); + DONE + + OPCODE(c0) /* CPY #ab */ + CPY(IMMEDIATE); + DONE + + OPCODE(c1) /* CMP (ab,x) */ + INDIRECT_X; + CMP(MEMORY_GetByte(addr)); + DONE + + OPCODE(c3) /* DCM (ab,x) [unofficial - DEC Mem then CMP with Acc] */ + INDIRECT_X; + + dcm: + RMW_GetByte(data, addr); + data--; + MEMORY_PutByte(addr, data); + CMP(data); + DONE + + OPCODE(c4) /* CPY ab */ + ZPAGE; + CPY(MEMORY_dGetByte(addr)); + DONE + + OPCODE(c5) /* CMP ab */ + ZPAGE; + CMP(MEMORY_dGetByte(addr)); + DONE + + OPCODE(c6) /* DEC ab */ + ZPAGE; + Z = N = MEMORY_dGetByte(addr) - 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(c7) /* DCM ab [unofficial - DEC Mem then CMP with Acc] */ + ZPAGE; + + dcm_zpage: + data = MEMORY_dGetByte(addr) - 1; + MEMORY_dPutByte(addr, data); + CMP(data); + DONE + + OPCODE(c8) /* INY */ + Z = N = ++Y; + DONE + + OPCODE(c9) /* CMP #ab */ + CMP(IMMEDIATE); + DONE + + OPCODE(ca) /* DEX */ + Z = N = --X; + DONE + + OPCODE(cb) /* SBX #ab [unofficial - store ((A AND X) - Mem) in X] (Fox) */ + X &= A; + data = IMMEDIATE; + C = X >= data; + /* MPC 05/24/00 */ + Z = N = X -= data; + DONE + + OPCODE(cc) /* CPY abcd */ + ABSOLUTE; + CPY(MEMORY_GetByte(addr)); + DONE + + OPCODE(cd) /* CMP abcd */ + ABSOLUTE; + CMP(MEMORY_GetByte(addr)); + DONE + + OPCODE(ce) /* DEC abcd */ + ABSOLUTE; + RMW_GetByte(Z, addr); + N = --Z; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(cf) /* DCM abcd [unofficial - DEC Mem then CMP with Acc] */ + ABSOLUTE; + goto dcm; + + OPCODE(d0) /* BNE */ + BRANCH(Z) + + OPCODE(d1) /* CMP (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + CMP(MEMORY_GetByte(addr)); + DONE + + OPCODE(d3) /* DCM (ab),y [unofficial - DEC Mem then CMP with Acc] */ + INDIRECT_Y; + goto dcm; + + OPCODE(d5) /* CMP ab,x */ + ZPAGE_X; + CMP(MEMORY_dGetByte(addr)); + DONE + + OPCODE(d6) /* DEC ab,x */ + ZPAGE_X; + Z = N = MEMORY_dGetByte(addr) - 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(d7) /* DCM ab,x [unofficial - DEC Mem then CMP with Acc] */ + ZPAGE_X; + goto dcm_zpage; + + OPCODE(d8) /* CLD */ + CPU_ClrD; + DONE + + OPCODE(d9) /* CMP abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + CMP(MEMORY_GetByte(addr)); + DONE + + OPCODE(db) /* DCM abcd,y [unofficial - DEC Mem then CMP with Acc] */ + ABSOLUTE_Y; + goto dcm; + + OPCODE(dd) /* CMP abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + CMP(MEMORY_GetByte(addr)); + DONE + + OPCODE(de) /* DEC abcd,x */ + ABSOLUTE_X; + RMW_GetByte(Z, addr); + N = --Z; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(df) /* DCM abcd,x [unofficial - DEC Mem then CMP with Acc] */ + ABSOLUTE_X; + goto dcm; + + OPCODE(e0) /* CPX #ab */ + CPX(IMMEDIATE); + DONE + + OPCODE(e1) /* SBC (ab,x) */ + INDIRECT_X; + data = MEMORY_GetByte(addr); + goto sbc; + + OPCODE(e3) /* INS (ab,x) [unofficial - INC Mem then SBC with Acc] */ + INDIRECT_X; + + ins: + RMW_GetByte(data, addr); + ++data; + MEMORY_PutByte(addr, data); + goto sbc; + + OPCODE(e4) /* CPX ab */ + ZPAGE; + CPX(MEMORY_dGetByte(addr)); + DONE + + OPCODE(e5) /* SBC ab */ + ZPAGE; + data = MEMORY_dGetByte(addr); + goto sbc; + + OPCODE(e6) /* INC ab */ + ZPAGE; + Z = N = MEMORY_dGetByte(addr) + 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(e7) /* INS ab [unofficial - INC Mem then SBC with Acc] */ + ZPAGE; + + ins_zpage: + data = MEMORY_dGetByte(addr) + 1; + MEMORY_dPutByte(addr, data); + goto sbc; + + OPCODE(e8) /* INX */ + Z = N = ++X; + DONE + + OPCODE_ALIAS(e9) /* SBC #ab */ + OPCODE(eb) /* SBC #ab [unofficial] */ + data = IMMEDIATE; + goto sbc; + + OPCODE_ALIAS(ea) /* NOP */ + OPCODE_ALIAS(1a) /* NOP [unofficial] */ + OPCODE_ALIAS(3a) + OPCODE_ALIAS(5a) + OPCODE_ALIAS(7a) + OPCODE_ALIAS(da) + OPCODE(fa) + DONE + + OPCODE(ec) /* CPX abcd */ + ABSOLUTE; + CPX(MEMORY_GetByte(addr)); + DONE + + OPCODE(ed) /* SBC abcd */ + ABSOLUTE; + data = MEMORY_GetByte(addr); + goto sbc; + + OPCODE(ee) /* INC abcd */ + ABSOLUTE; + RMW_GetByte(Z, addr); + N = ++Z; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(ef) /* INS abcd [unofficial - INC Mem then SBC with Acc] */ + ABSOLUTE; + goto ins; + + OPCODE(f0) /* BEQ */ + BRANCH(!Z) + + OPCODE(f1) /* SBC (ab),y */ + INDIRECT_Y; + NCYCLES_Y; + data = MEMORY_GetByte(addr); + goto sbc; + + OPCODE(f3) /* INS (ab),y [unofficial - INC Mem then SBC with Acc] */ + INDIRECT_Y; + goto ins; + + OPCODE(f5) /* SBC ab,x */ + ZPAGE_X; + data = MEMORY_dGetByte(addr); + goto sbc; + + OPCODE(f6) /* INC ab,x */ + ZPAGE_X; + Z = N = MEMORY_dGetByte(addr) + 1; + MEMORY_dPutByte(addr, Z); + DONE + + OPCODE(f7) /* INS ab,x [unofficial - INC Mem then SBC with Acc] */ + ZPAGE_X; + goto ins_zpage; + + OPCODE(f8) /* SED */ + CPU_SetD; + DONE + + OPCODE(f9) /* SBC abcd,y */ + ABSOLUTE_Y; + NCYCLES_Y; + data = MEMORY_GetByte(addr); + goto sbc; + + OPCODE(fb) /* INS abcd,y [unofficial - INC Mem then SBC with Acc] */ + ABSOLUTE_Y; + goto ins; + + OPCODE(fd) /* SBC abcd,x */ + ABSOLUTE_X; + NCYCLES_X; + data = MEMORY_GetByte(addr); + goto sbc; + + OPCODE(fe) /* INC abcd,x */ + ABSOLUTE_X; + RMW_GetByte(Z, addr); + N = ++Z; + MEMORY_PutByte(addr, Z); + DONE + + OPCODE(ff) /* INS abcd,x [unofficial - INC Mem then SBC with Acc] */ + ABSOLUTE_X; + goto ins; + +#ifdef ASAP + + OPCODE_ALIAS(d2) + OPCODE_ALIAS(f2) + +#else + + OPCODE(d2) /* ESCRTS #ab (CIM) - on Atari is here instruction CIM [unofficial] !RS! */ + data = IMMEDIATE; + UPDATE_GLOBAL_REGS; + CPU_GetStatus(); + ESC_Run(data); + CPU_PutStatus(); + UPDATE_LOCAL_REGS; + data = PL; + SET_PC((PL << 8) + data + 1); +#ifdef MONITOR_BREAK + if (MONITOR_break_ret && --MONITOR_ret_nesting <= 0) + MONITOR_break_step = TRUE; +#endif + DONE + + OPCODE(f2) /* ESC #ab (CIM) - on Atari is here instruction CIM [unofficial] !RS! */ + /* OPCODE(ff: ESC #ab - opcode FF is now used for INS [unofficial] instruction !RS! */ + data = IMMEDIATE; + UPDATE_GLOBAL_REGS; + CPU_GetStatus(); + ESC_Run(data); + CPU_PutStatus(); + UPDATE_LOCAL_REGS; + DONE + +#endif /* ASAP */ + + OPCODE_ALIAS(02) /* CIM [unofficial - crash intermediate] */ + OPCODE_ALIAS(12) + OPCODE_ALIAS(22) + OPCODE_ALIAS(32) + OPCODE_ALIAS(42) + OPCODE_ALIAS(52) + OPCODE_ALIAS(62) + OPCODE_ALIAS(72) + OPCODE_ALIAS(92) + OPCODE(b2) + +#ifdef ASAP + + ASAP_CIM(); + DONE + +#else + + /* OPCODE(d2) Used for ESCRTS #ab (CIM) */ + /* OPCODE(f2) Used for ESC #ab (CIM) */ + PC--; + UPDATE_GLOBAL_REGS; + CPU_GetStatus(); + +#ifdef CRASH_MENU + UI_crash_address = GET_PC(); + UI_crash_afterCIM = GET_PC() + 1; + UI_crash_code = insn; + UI_Run(); +#else + CPU_cim_encountered = TRUE; + ENTER_MONITOR; +#endif /* CRASH_MENU */ + + CPU_PutStatus(); + UPDATE_LOCAL_REGS; + DONE + +#endif /* ASAP */ + +/* ---------------------------------------------- */ +/* ADC and SBC routines */ + + adc: + if (!(CPU_regP & CPU_D_FLAG)) { + /* Binary mode */ + unsigned int tmp; + tmp = A + data + C; + C = tmp > 0xff; + /* C = tmp >> 8; */ +#ifndef NO_V_FLAG_VARIABLE + V = !((A ^ data) & 0x80) && ((data ^ tmp) & 0x80); +#else + CPU_ClrV; + if (!((A ^ data) & 0x80) && ((data ^ tmp) & 0x80)) + CPU_SetV; +#endif + Z = N = A = (UBYTE) tmp; + } + else { + /* Decimal mode */ + unsigned int tmp; + tmp = (A & 0x0f) + (data & 0x0f) + C; + if (tmp >= 0x0a) + tmp = ((tmp + 0x06) & 0x0f) + 0x10; + tmp += (A & 0xf0) + (data & 0xf0); + + Z = A + data + C; + N = (UBYTE) tmp; +#ifndef NO_V_FLAG_VARIABLE + V = !((A ^ data) & 0x80) && ((data ^ tmp) & 0x80); +#else + CPU_ClrV; + if (!((A ^ data) & 0x80) && ((data ^ tmp) & 0x80)) + CPU_SetV; +#endif + + if (tmp >= 0xa0) + tmp += 0x60; + C = tmp > 0xff; + A = (UBYTE) tmp; + } + DONE + + sbc: + if (!(CPU_regP & CPU_D_FLAG)) { + /* Binary mode */ + unsigned int tmp; + /* tmp = A - data - !C; */ + tmp = A - data - 1 + C; + C = tmp < 0x100; +#ifndef NO_V_FLAG_VARIABLE + V = ((A ^ data) & 0x80) && ((A ^ tmp) & 0x80); +#else + CPU_ClrV; + if (((A ^ data) & 0x80) && ((A ^ tmp) & 0x80)) + CPU_SetV; +#endif + Z = N = A = (UBYTE) tmp; + } + else { + /* Decimal mode */ + unsigned int tmp; + tmp = (A & 0x0f) - (data & 0x0f) - 1 + C; + if (tmp & 0x10) + tmp = ((tmp - 0x06) & 0x0f) - 0x10; + tmp += (A & 0xf0) - (data & 0xf0); + if (tmp & 0x100) + tmp -= 0x60; + + Z = N = A - data - 1 + C; +#ifndef NO_V_FLAG_VARIABLE + V = ((A ^ data) & 0x80) && ((A ^ Z) & 0x80); +#else + CPU_ClrV; + if (((A ^ data) & 0x80) && ((A ^ Z) & 0x80)) + CPU_SetV; +#endif + C = ((unsigned int) (A - data - 1 + C)) <= 0xff; + + A = tmp; + } + DONE + +#ifdef NO_GOTO + } +#else + next: +#endif + +#ifdef MONITOR_PROFILE + { + int cyc = ANTIC_xpos - old_xpos; + MONITOR_coverage[old_PC].cycles += cyc; + MONITOR_coverage_cycles += cyc; + } +#endif + +#ifdef MONITOR_BREAK + if (MONITOR_break_step) { + DO_BREAK; + } +#endif + /* This "continue" does nothing here. + But it is necessary because, if we're not using NO_GOTO nor MONITOR_BREAK, + gcc can complain: "error: label at end of compound statement". */ + continue; + } + + UPDATE_GLOBAL_REGS; +} + +#endif /* FALCON_CPUASM */ + +void CPU_Reset(void) +{ +#ifdef MONITOR_PROFILE + memset(CPU_instruction_count, 0, sizeof(CPU_instruction_count)); +#endif + + CPU_IRQ = 0; + + CPU_regP = 0x34; /* The unused bit is always 1, I flag set! */ + CPU_PutStatus(); /* Make sure flags are all updated */ + CPU_regS = 0xff; + CPU_regPC = MEMORY_dGetWordAligned(0xfffc); +} + +#if !defined(BASIC) && !defined(ASAP) + +void CPU_StateSave(UBYTE SaveVerbose) +{ + StateSav_SaveUBYTE(&CPU_regA, 1); + + CPU_GetStatus(); /* Make sure flags are all updated */ + StateSav_SaveUBYTE(&CPU_regP, 1); + + StateSav_SaveUBYTE(&CPU_regS, 1); + StateSav_SaveUBYTE(&CPU_regX, 1); + StateSav_SaveUBYTE(&CPU_regY, 1); + StateSav_SaveUBYTE(&CPU_IRQ, 1); + + MEMORY_StateSave(SaveVerbose); + + StateSav_SaveUWORD(&CPU_regPC, 1); +} + +void CPU_StateRead(UBYTE SaveVerbose, UBYTE StateVersion) +{ + StateSav_ReadUBYTE(&CPU_regA, 1); + + StateSav_ReadUBYTE(&CPU_regP, 1); + CPU_PutStatus(); /* Make sure flags are all updated */ + + StateSav_ReadUBYTE(&CPU_regS, 1); + StateSav_ReadUBYTE(&CPU_regX, 1); + StateSav_ReadUBYTE(&CPU_regY, 1); + StateSav_ReadUBYTE(&CPU_IRQ, 1); + + MEMORY_StateRead(SaveVerbose, StateVersion); + + StateSav_ReadUWORD(&CPU_regPC, 1); +} + +#endif diff --git a/MCUME_pico/pico800/cpu.h b/MCUME_pico/pico800/cpu.h new file mode 100644 index 0000000..3ee25e6 --- /dev/null +++ b/MCUME_pico/pico800/cpu.h @@ -0,0 +1,65 @@ +#ifndef CPU_H_ +#define CPU_H_ + +#include "atari.h" + +#define CPU_N_FLAG 0x80 +#define CPU_V_FLAG 0x40 +#define CPU_B_FLAG 0x10 +#define CPU_D_FLAG 0x08 +#define CPU_I_FLAG 0x04 +#define CPU_Z_FLAG 0x02 +#define CPU_C_FLAG 0x01 + +void CPU_GetStatus(void); +void CPU_PutStatus(void); +void CPU_Reset(void); +void CPU_StateSave(UBYTE SaveVerbose); +void CPU_StateRead(UBYTE SaveVerbose, UBYTE StateVersion); +void CPU_NMI(void); +void CPU_GO(int limit); +#define CPU_GenerateIRQ() (CPU_IRQ = 1) + +extern UWORD CPU_regPC; +extern UBYTE CPU_regA; +extern UBYTE CPU_regP; +extern UBYTE CPU_regS; +extern UBYTE CPU_regY; +extern UBYTE CPU_regX; + +#define CPU_SetN CPU_regP |= CPU_N_FLAG +#define CPU_ClrN CPU_regP &= (~CPU_N_FLAG) +#define CPU_SetV CPU_regP |= CPU_V_FLAG +#define CPU_ClrV CPU_regP &= (~CPU_V_FLAG) +#define CPU_SetB CPU_regP |= CPU_B_FLAG +#define CPU_ClrB CPU_regP &= (~CPU_B_FLAG) +#define CPU_SetD CPU_regP |= CPU_D_FLAG +#define CPU_ClrD CPU_regP &= (~CPU_D_FLAG) +#define CPU_SetI CPU_regP |= CPU_I_FLAG +#define CPU_ClrI CPU_regP &= (~CPU_I_FLAG) +#define CPU_SetZ CPU_regP |= CPU_Z_FLAG +#define CPU_ClrZ CPU_regP &= (~CPU_Z_FLAG) +#define CPU_SetC CPU_regP |= CPU_C_FLAG +#define CPU_ClrC CPU_regP &= (~CPU_C_FLAG) + +extern UBYTE CPU_IRQ; + +extern void (*CPU_rts_handler)(void); + +extern UBYTE CPU_cim_encountered; + +#define CPU_REMEMBER_PC_STEPS 64 +extern UWORD CPU_remember_PC[CPU_REMEMBER_PC_STEPS]; +extern UBYTE CPU_remember_op[CPU_REMEMBER_PC_STEPS][3]; +extern unsigned int CPU_remember_PC_curpos; +extern int CPU_remember_xpos[CPU_REMEMBER_PC_STEPS]; + +#define CPU_REMEMBER_JMP_STEPS 16 +extern UWORD CPU_remember_JMP[CPU_REMEMBER_JMP_STEPS]; +extern unsigned int CPU_remember_jmp_curpos; + +#ifdef MONITOR_PROFILE +extern int CPU_instruction_count[256]; +#endif + +#endif /* CPU_H_ */ diff --git a/MCUME_pico/pico800/crc32.c b/MCUME_pico/pico800/crc32.c new file mode 100644 index 0000000..d22e223 --- /dev/null +++ b/MCUME_pico/pico800/crc32.c @@ -0,0 +1,86 @@ +/* CRC32.C -- Calculates 32bit CRC checksum + */ +// modified main() (see crc32.orig) to get calc_crc32() function +// JH 2002 + +#include +#include + +const unsigned long crc32_table[256] = { /* lookup table */ +0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, +0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, +0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, +0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, +0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, +0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, +0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, +0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, +0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, +0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, +0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, +0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, +0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, +0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, +0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, +0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, +0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, +0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, +0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, +0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, +0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, +0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, +0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, +0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, +0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, +0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, +0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, +0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, +0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, +0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, +0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, +0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, +0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, +0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, +0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, +0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, +0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, +0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, +0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, +0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, +0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, +0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, +0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D}; + +unsigned long calc_crc32(unsigned char *buf, int buflen) +{ + // buf is pointer to input buffer (data to crc) + // buflen is length of input buffer + + unsigned long crc; /* CRC value */ + //size_t j; /* buffer positions*/ + int j; /* buffer positions*/ + int k; /* generic integer */ + +#ifdef DEBUG + printf("32bit Cyclic Redudancy Check\n"); +#endif + + crc = 0xFFFFFFFF; /* preconditioning sets non zero value */ + + /* loop through the buffer and calculate CRC */ + for(j=0; j> 8) & 0x00FFFFFFL) ^ crc32_table[k]; + } + + crc=~crc; /* postconditioning */ + + /* print results */ +#ifdef DEBUG + printf("CRC32 is %08lX\n", crc); +#endif + + return crc; +} + + diff --git a/MCUME_pico/pico800/emuapi.cpp b/MCUME_pico/pico800/emuapi.cpp new file mode 100644 index 0000000..2020f1d --- /dev/null +++ b/MCUME_pico/pico800/emuapi.cpp @@ -0,0 +1,781 @@ +#define KEYMAP_PRESENT 1 + +#define PROGMEM + +#include "pico.h" +#include "pico/stdlib.h" +#include "hardware/adc.h" +#include +#include + +extern "C" { + #include "emuapi.h" + #include "iopins.h" +} + + +#include "vga_t_dma.h" +const uint16_t deflogo[] = { + 0,0 +}; +static const uint16_t * logo = deflogo; + +#define MAX_FILES 64 +#define MAX_FILENAME_SIZE 24 +#define MAX_MENULINES 9 +#define TEXT_HEIGHT 16 +#define TEXT_WIDTH 8 +#define MENU_FILE_XOFFSET (6*TEXT_WIDTH) +#define MENU_FILE_YOFFSET (2*TEXT_HEIGHT) +#define MENU_FILE_W (MAX_FILENAME_SIZE*TEXT_WIDTH) +#define MENU_FILE_H (MAX_MENULINES*TEXT_HEIGHT) +#define MENU_FILE_BGCOLOR RGBVAL16(0x00,0x00,0x40) +#define MENU_JOYS_YOFFSET (12*TEXT_HEIGHT) +#define MENU_VBAR_XOFFSET (0*TEXT_WIDTH) +#define MENU_VBAR_YOFFSET (MENU_FILE_YOFFSET) + +#define MENU_TFT_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_TFT_YOFFSET (MENU_VBAR_YOFFSET+32) +#define MENU_VGA_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_VGA_YOFFSET (MENU_VBAR_YOFFSET+MENU_FILE_H-32-37) + +extern TFT_T_DMA tft; + +static char romspath[64]; +static int nbFiles=0; +static int curFile=0; +static int topFile=0; +static char selection[MAX_FILENAME_SIZE+1]=""; +static char files[MAX_FILES][MAX_FILENAME_SIZE]; +static bool menuRedraw=true; + +static bool i2cKeyboardPresent = false; +static unsigned short * keys; +static int keyMap; + +static int keypadval=0; +static bool joySwapped = false; +static uint16_t bLastState; +static int xRef; +static int yRef; +static uint8_t usbnavpad=0; + +static bool menuOn=true; + + + + +void emu_printf(char * text) +{ + printf("%s\n",text); +} + +void emu_printf(int val) +{ + printf("%d\n",val); +} + +void emu_printi(int val) +{ + printf("%d\n",val); +} + +void emu_printh(int val) +{ + printf("0x%.8\n",val); +} + +static int malbufpt = 0; +static char malbuf[EXTRA_HEAP]; + +void * emu_Malloc(int size) +{ + void * retval = malloc(size); + if (!retval) { + emu_printf("failled to allocate"); + emu_printf(size); + emu_printf("fallback"); + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + } + else { + emu_printf("failure to allocate"); + } + } + else { + emu_printf("could allocate dynamic "); + emu_printf(size); + } + + return retval; +} + +void * emu_MallocI(int size) +{ + void * retval = NULL; + + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + emu_printf("could allocate static "); + emu_printf(size); + } + else { + emu_printf("failure to allocate"); + } + + return retval; +} +void emu_Free(void * pt) +{ + free(pt); +} + + + + + +int emu_ReadAnalogJoyX(int min, int max) +{ +#ifdef PIN_JOY2_A1X + adc_select_input(0); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVX + val = 4095 - val; +#endif + val = val-xRef; + val = ((val*140)/100); + if ( (val > -512) && (val < 512) ) val = 0; + val = val+2048; + return (val*(max-min))/4096; +} + +int emu_ReadAnalogJoyY(int min, int max) +{ +#ifdef PIN_JOY2_A2Y + adc_select_input(1); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVY + val = 4095 - val; +#endif + val = val-yRef; + val = ((val*120)/100); + if ( (val > -512) && (val < 512) ) val = 0; + //val = (val*(max-min))/4096; + val = val+2048; + //return val+(max-min)/2; + return (val*(max-min))/4096; +} + + +static uint16_t readAnalogJoystick(void) +{ + uint16_t joysval = 0; + + int xReading = emu_ReadAnalogJoyX(0,256); + if (xReading > 128) joysval |= MASK_JOY2_LEFT; + else if (xReading < 128) joysval |= MASK_JOY2_RIGHT; + + int yReading = emu_ReadAnalogJoyY(0,256); + if (yReading < 128) joysval |= MASK_JOY2_UP; + else if (yReading > 128) joysval |= MASK_JOY2_DOWN; + +#ifdef PIN_JOY2_BTN + joysval |= (gpio_get(PIN_JOY2_BTN) ? 0 : MASK_JOY2_BTN); +#endif + return (joysval); +} + + +int emu_SwapJoysticks(int statusOnly) { + if (!statusOnly) { + if (joySwapped) { + joySwapped = false; + } + else { + joySwapped = true; + } + } + return(joySwapped?1:0); +} + +int emu_GetPad(void) +{ + return(keypadval/*|((joySwapped?1:0)<<7)*/); +} + +int emu_ReadKeys(void) +{ + uint16_t retval; + uint16_t j1 = readAnalogJoystick(); + uint16_t j2 = 0; + + // Second joystick +#if INVY +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_DOWN; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_UP; +#endif +#else +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_UP; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_DOWN; +#endif +#endif +#if INVX +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_LEFT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_RIGHT; +#endif +#else +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_RIGHT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_LEFT; +#endif +#endif +#ifdef PIN_JOY1_BTN + if ( !gpio_get(PIN_JOY1_BTN) ) j2 |= MASK_JOY2_BTN; +#endif + if (joySwapped) { + retval = ((j1 << 8) | j2); + } + else { + retval = ((j2 << 8) | j1); + } + + if (usbnavpad & MASK_JOY2_UP) retval |= MASK_JOY2_UP; + if (usbnavpad & MASK_JOY2_DOWN) retval |= MASK_JOY2_DOWN; + if (usbnavpad & MASK_JOY2_LEFT) retval |= MASK_JOY2_LEFT; + if (usbnavpad & MASK_JOY2_RIGHT) retval |= MASK_JOY2_RIGHT; + if (usbnavpad & MASK_JOY2_BTN) retval |= MASK_JOY2_BTN; +#ifdef PIN_KEY_USER1 + if ( !gpio_get(PIN_KEY_USER1) ) retval |= MASK_KEY_USER1; +#endif +#ifdef PIN_KEY_USER2 + if ( !gpio_get(PIN_KEY_USER2) ) retval |= MASK_KEY_USER2; +#endif +#ifdef PIN_KEY_USER3 + if ( !gpio_get(PIN_KEY_USER3) ) retval |= MASK_KEY_USER3; +#endif +#ifdef PIN_KEY_USER4 + if ( !gpio_get(PIN_KEY_USER4) ) retval |= MASK_KEY_USER4; +#endif + + //Serial.println(retval,HEX); + + if ( ((retval & (MASK_KEY_USER1+MASK_KEY_USER2)) == (MASK_KEY_USER1+MASK_KEY_USER2)) + || (retval & MASK_KEY_USER4 ) ) + { + } + + return (retval); +} + +unsigned short emu_DebounceLocalKeys(void) +{ + uint16_t bCurState = emu_ReadKeys(); + uint16_t bClick = bCurState & ~bLastState; + bLastState = bCurState; + + return (bClick); +} + +int emu_ReadI2CKeyboard(void) { + int retval=0; + + return(retval); +} + +void emu_InitJoysticks(void) { + + // Second Joystick +#ifdef PIN_JOY1_1 + gpio_set_pulls(PIN_JOY1_1,true,false); + gpio_set_dir(PIN_JOY1_1,GPIO_IN); +#endif +#ifdef PIN_JOY1_2 + gpio_set_pulls(PIN_JOY1_2,true,false); + gpio_set_dir(PIN_JOY1_2,GPIO_IN); +#endif +#ifdef PIN_JOY1_3 + gpio_set_pulls(PIN_JOY1_3,true,false); + gpio_set_dir(PIN_JOY1_3,GPIO_IN); +#endif +#ifdef PIN_JOY1_4 + gpio_set_pulls(PIN_JOY1_4,true,false); + gpio_set_dir(PIN_JOY1_4,GPIO_IN); +#endif +#ifdef PIN_JOY1_BTN + gpio_set_pulls(PIN_JOY1_BTN,true,false); + gpio_set_dir(PIN_JOY1_BTN,GPIO_IN); +#endif + +#ifdef PIN_KEY_USER1 + gpio_set_pulls(PIN_KEY_USER1,true,false); + gpio_set_dir(PIN_KEY_USER1,GPIO_IN); +#endif +#ifdef PIN_KEY_USER2 + gpio_set_pulls(PIN_KEY_USER2,true,false); + gpio_set_dir(PIN_KEY_USER2,GPIO_IN); +#endif +#ifdef PIN_KEY_USER3 + gpio_set_pulls(PIN_KEY_USER3,true,false); + gpio_set_dir(PIN_KEY_USER3,GPIO_IN); +#endif +#ifdef PIN_KEY_USER4 + gpio_set_pulls(PIN_KEY_USER4,true,false); + gpio_set_dir(PIN_KEY_USER4,GPIO_IN); +#endif +#ifdef PIN_JOY2_BTN + gpio_set_pulls(PIN_JOY2_BTN,true,false); + gpio_set_dir(PIN_JOY2_BTN,GPIO_IN); +#endif + +#ifdef PIN_JOY2_A1X + adc_init(); + adc_gpio_init(PIN_JOY2_A1X); + adc_gpio_init(PIN_JOY2_A2Y); + xRef=0; yRef=0; + for (int i=0; i<10; i++) { + adc_select_input(0); + xRef += adc_read(); + adc_select_input(1); + yRef += adc_read(); + sleep_ms(20); + } +#endif + +#if INVX + xRef = 4095 -xRef/10; +#else + xRef /= 10; +#endif +#if INVY + yRef = 4095 -yRef/10; +#else + yRef /= 10; +#endif +} + + + + +int emu_setKeymap(int index) { +} + + +#include "ff.h" +static FATFS fatfs; +static FIL file; +extern "C" int sd_init_driver(void); + +static int readNbFiles(char * rootdir) { + int totalFiles = 0; + + DIR dir; + FILINFO entry; + FRESULT fr = f_findfirst(&dir, &entry, rootdir, "*"); + while ( (fr == FR_OK) && (entry.fname[0]) && (totalFiles=0) { + menuRedraw=true; + curFile -= 9; + } else if (curFile!=0) { + menuRedraw=true; + curFile--; + } + } + else if (bClick & MASK_JOY2_DOWN) { + if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_JOY2_LEFT) || (bClick & MASK_JOY1_LEFT) ) { + if ((curFile<(nbFiles-9)) && (nbFiles)) { + curFile += 9; + menuRedraw=true; + } + else if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_KEY_USER2) ) { + emu_SwapJoysticks(0); + menuRedraw=true; + } + + if (menuRedraw && nbFiles) { + int fileIndex = 0; + tft.drawRectNoDma(MENU_FILE_XOFFSET,MENU_FILE_YOFFSET, MENU_FILE_W, MENU_FILE_H, MENU_FILE_BGCOLOR); +// if (curFile <= (MAX_MENULINES/2-1)) topFile=0; +// else topFile=curFile-(MAX_MENULINES/2); + if (curFile <= (MAX_MENULINES-1)) topFile=0; + else topFile=curFile-(MAX_MENULINES/2); + + //Serial.print("curfile: "); + //Serial.println(curFile); + //Serial.print("topFile: "); + //Serial.println(topFile); + + int i=0; + while (i=nbFiles) { + // no more files + break; + } + char * filename = &files[fileIndex][0]; + if (fileIndex >= topFile) { + if ((i+topFile) < nbFiles ) { + if ((i+topFile)==curFile) { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0x00), RGBVAL16(0xff,0x00,0x00), true); + strcpy(selection,filename); + } + else { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0xff), MENU_FILE_BGCOLOR, true); + } + } + i++; + } + fileIndex++; + } + + + tft.drawTextNoDma(48,MENU_JOYS_YOFFSET+8, (emu_SwapJoysticks(1)?(char*)"SWAP=1":(char*)"SWAP=0"), RGBVAL16(0x00,0xff,0xff), RGBVAL16(0x00,0x00,0xff), false); + menuRedraw=false; + } + + return (action); +} + +bool menuActive(void) +{ + return (menuOn); +} + +void toggleMenu(bool on) { + if (on) { + menuOn = true; + backgroundMenu(); + } else { + menuOn = false; + } +} + +char * menuSelection(void) +{ + return (selection); +} + + + + + + + + + +int emu_FileOpen(char * filename) +{ + int retval = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileOpen..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + retval = 1; + } + else { + emu_printf("FileOpen failed"); + } + return (retval); +} + +int emu_FileRead(char * buf, int size) +{ + unsigned char buffer[256]; + int remaining = size; + int byteread = 0; + unsigned int retval=0; + if (size < 256) { + if( !(f_read (&file, buffer, size, &retval)) ) + if (retval>0) { + memcpy(buf,buffer,retval); + byteread += retval; + } + } + else { + while (remaining>0) { + if( !(f_read (&file, buffer, 256, &retval)) ) + //f_read (&file, buffer, 256, &retval); + if (retval>0) { + //emu_printi(retval); + memcpy(buf,buffer,retval); + buf += retval; + byteread += retval; + remaining -= retval; + } + else { + break; + } + } + } + return byteread; +} + +unsigned char emu_FileGetc(void) { + unsigned char c; + unsigned int retval=0; + if( !(f_read (&file, &c, 1, &retval)) ) + if (retval != 1) { + emu_printf("emu_FileGetc failed"); + } + return c; +} + + +void emu_FileClose(void) +{ + f_close(&file); +} + +int emu_FileSize(char * filename) +{ + int filesize=0; + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileSize..."); + emu_printf(filepath); + FILINFO entry; + f_stat(filepath, &entry); + filesize = entry.fsize; + return(filesize); +} + + +#ifdef SDIO + +int emu_FileSeek(int seek) +{ +#ifdef USE_SDFS + f_lseek(&file, seek); +#else + file.seek(seek); +#endif + return (seek); +} + +int emu_FileTell(void) +{ +#ifdef USE_SDFS + return (f_tell(&file)); +#else + return (50); +#endif +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + filesize = file.size(); + emu_printf(filesize); + + if (size >= filesize) + { + if (emu_FileRead(buf, filesize) != filesize) + { + emu_printf("File read failed"); + } + } + file.close(); + } +#endif + + return(filesize); +} + +int emu_LoadFileSeek(char * filename, char * buf, int size, int seek) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFileSeek..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + f_lseek(&file, seek); + emu_printf(size); + if (size >= filesize) + { + int retval=0; + if( (!f_read (&file, buf, size, &retval)) ) + if (retval != size) + { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + file.seek(seek); + emu_printf(size); + if (file.read(buf, size) != size) { + emu_printf("File read failed"); + } + file.close(); + } +#endif + + return(filesize); +} +#endif + + + +void emu_init(void) +{ + sd_init_driver(); + FRESULT fr = f_mount(&fatfs, "0:", 1); + //emu_FileSystemInit(); + + strcpy(romspath,ROMSDIR); + nbFiles = readNbFiles(romspath); + + emu_printf("SD initialized, files found: "); + emu_printi(nbFiles); + + emu_InitJoysticks(); +#ifdef SWAP_JOYSTICK + joySwapped = true; +#else + joySwapped = false; +#endif + + toggleMenu(true); +} + + +void emu_start(void) +{ + + usbnavpad = 0; + + keys = (unsigned short *)key_map1; + keyMap = 0; +} diff --git a/MCUME_pico/pico800/emuapi.h b/MCUME_pico/pico800/emuapi.h new file mode 100644 index 0000000..26f472a --- /dev/null +++ b/MCUME_pico/pico800/emuapi.h @@ -0,0 +1,152 @@ +#ifndef EMUAPI_H +#define EMUAPI_H + +#include "platform_config.h" + +#define CUSTOM_SND 1 +//#define TIMER_REND 1 +#define EXTRA_HEAP 0x10 + +// Title: < > +#define TITLE " Atari 800 Emulator" +#define ROMSDIR "800" + +#define emu_Init(ROM) {at8_Init(); at8_Start(ROM);} +#define emu_Step(x) {at8_Step();} +#define emu_Input(x) {} + +#define PALETTE_SIZE 256 +#define VID_FRAME_SKIP 0x0 +#define TFT_VBUFFER_YCROP 0 +#define SINGLELINE_RENDERING 1 + +#define R32(rgb) ((rgb>>16)&0xff) +#define G32(rgb) ((rgb>>8)&0xff) +#define B32(rgb) (rgb & 0xff) + +#define ACTION_NONE 0 +#define ACTION_MAXKBDVAL 0X40 +#define ACTION_EXITKBD 127 +#define ACTION_RUNTFT 126 +#define ACTION_RUNVGA 125 + + +#ifdef KEYMAP_PRESENT + +#define TAREA_W_DEF 32 +#define TAREA_H_DEF 32 +#define TAREA_END 255 +#define TAREA_NEW_ROW 254 +#define TAREA_NEW_COL 253 +#define TAREA_XY 252 +#define TAREA_WH 251 + +#define KEYBOARD_X 1 +#define KEYBOARD_Y 6 +#define KEYBOARD_KEY_H 23 +#define KEYBOARD_KEY_W 21 +#define KEYBOARD_HIT_COLOR RGBVAL16(0xff,0x00,0x00) + +const unsigned short keysw[] = { + TAREA_XY,KEYBOARD_X,KEYBOARD_Y, + TAREA_WH,KEYBOARD_KEY_W,KEYBOARD_KEY_H, + TAREA_NEW_ROW,21,21,22,21,22,21,21,22,21,22,21,21,22,21,22, + TAREA_NEW_ROW,34,21,21,21,21,21,21,21,21,21,21,21,21,34, + TAREA_NEW_ROW,40,21,21,21,21,21,21,21,21,21,21,21,21,21, + TAREA_NEW_ROW,50,21,21,21,21,21,21,21,21,21,21,21,45, + TAREA_NEW_ROW,60,192, + TAREA_END}; + + +const unsigned short key_map1[] = { + 0x1C+1,0x1F+1,0x1F ,0x1A+1,0x18+1,0x1D+1,0x1B+1,0x33+1,0x35+1,0x30+1,0x32+1,0x36+1,0x37+1,0,0, + 0x2C+1,0x2F+1,0x2F ,0x2A+1,0x28+1,0x2D+1,0x2B+1,0x0B+1,0x0D+1,0x08+1,0x0A+1,0x0E,0x0F+1,0x0C+1, + 0, 0x3F+1,0x3F ,0x3A+1,0x38+1,0x3D+1,0x39+1,0x01+1,0x05+1,0x00+1,0x02+1,0x06+1,0x07+1,0, + 0x3C+1,0x17+1,0x16+1,0x12+1,0x11+1,0x15+1,0x23+1,0x25+1,0x20+1,0x22+1,0x26+1, 0,0, + 0, 0x21+1 + }; + +#ifdef HAS_I2CKBD +const unsigned short i2ckeys[] = { + 0, 0X0080,0X0008,0X0180,0X0108,0X0280,0X0208,0X0380,0X0308,0X0480,0X0408,0,0,0,0, + 0, 0X0040,0X0004,0X0140,0X0104,0X0240,0X0204,0X0340,0X0304,0X0440,0X0404,0,0,0X0402, + 0, 0X0020,0X0002,0X0120,0X0102,0X0220,0X0202,0X0320,0X0302,0X0420,0,0,0,0, + 0X0010,0X0001,0X0110,0X0101,0X0210,0X0201,0X0310,0X0301,0X0410,0,0,0,0, + 0, 0X0401}; +#endif + +#endif + +#define MASK_JOY2_RIGHT 0x0001 +#define MASK_JOY2_LEFT 0x0002 +#define MASK_JOY2_UP 0x0004 +#define MASK_JOY2_DOWN 0x0008 +#define MASK_JOY2_BTN 0x0010 +#define MASK_KEY_USER1 0x0020 +#define MASK_KEY_USER2 0x0040 +#define MASK_KEY_USER3 0x0080 +#define MASK_JOY1_RIGHT 0x0100 +#define MASK_JOY1_LEFT 0x0200 +#define MASK_JOY1_UP 0x0400 +#define MASK_JOY1_DOWN 0x0800 +#define MASK_JOY1_BTN 0x1000 +#define MASK_KEY_USER4 0x2000 + + + +extern void emu_init(void); +extern void emu_start(void); +extern void emu_resetSD(void); + +extern void emu_printf(char * text); +extern void emu_printi(int val); +extern void * emu_Malloc(int size); +extern void emu_Free(void * pt); + +extern int emu_FileOpen(char * filename); +extern int emu_FileRead(char * buf, int size); +extern unsigned char emu_FileGetc(void); +extern int emu_FileSeek(int seek); +extern void emu_FileClose(void); +extern int emu_FileSize(char * filename); +extern int emu_LoadFile(char * filename, char * buf, int size); +extern int emu_LoadFileSeek(char * filename, char * buf, int size, int seek); +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); + +extern void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index); +extern void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride); +extern void emu_DrawLine(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line); +extern void emu_DrawVsync(void); +extern int emu_FrameSkip(void); +extern void * emu_LineBuffer(int line); + +extern void emu_InitJoysticks(void); +extern int emu_SwapJoysticks(int statusOnly); +extern unsigned short emu_DebounceLocalKeys(void); +extern int emu_ReadKeys(void); +extern int emu_GetPad(void); +extern int emu_ReadAnalogJoyX(int min, int max); +extern int emu_ReadAnalogJoyY(int min, int max); +extern int emu_ReadI2CKeyboard(void); +extern void emu_KeyboardOnUp(int keymodifer, int key); +extern void emu_KeyboardOnDown(int keymodifer, int key); + +extern void emu_sndPlaySound(int chan, int volume, int freq); +extern void emu_sndPlayBuzz(int size, int val); +extern void emu_sndInit(); +extern void emu_resetus(void); +extern int emu_us(void); + +extern int emu_setKeymap(int index); + +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); +extern void emu_printh(int val); + + +#endif diff --git a/MCUME_pico/pico800/font8x8.h b/MCUME_pico/pico800/font8x8.h new file mode 100644 index 0000000..03edc95 --- /dev/null +++ b/MCUME_pico/pico800/font8x8.h @@ -0,0 +1,135 @@ + +// Font: c64_lower.64c + +const unsigned char PROGMEM font8x8[128][8] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) + { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) + { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) + { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) + { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//) + { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) + { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) + { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) + { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F +}; + diff --git a/MCUME_pico/pico800/gtia.c b/MCUME_pico/pico800/gtia.c new file mode 100644 index 0000000..1d3612c --- /dev/null +++ b/MCUME_pico/pico800/gtia.c @@ -0,0 +1,1330 @@ +/* + * gtia.c - GTIA chip emulation + * + * Copyright (C) 1995-1998 David Firth + * Copyright (C) 1998-2015 Atari800 development team (see DOC/CREDITS) + * + * This file is part of the Atari800 emulator project which emulates + * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. + * + * Atari800 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. + * + * Atari800 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 Atari800; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +#include "antic.h" +#include "gtia.h" + +/* GTIA Registers ---------------------------------------------------------- */ + +UBYTE GTIA_M0PL; +UBYTE GTIA_M1PL; +UBYTE GTIA_M2PL; +UBYTE GTIA_M3PL; +UBYTE GTIA_P0PL; +UBYTE GTIA_P1PL; +UBYTE GTIA_P2PL; +UBYTE GTIA_P3PL; +UBYTE GTIA_HPOSP0; +UBYTE GTIA_HPOSP1; +UBYTE GTIA_HPOSP2; +UBYTE GTIA_HPOSP3; +UBYTE GTIA_HPOSM0; +UBYTE GTIA_HPOSM1; +UBYTE GTIA_HPOSM2; +UBYTE GTIA_HPOSM3; +UBYTE GTIA_SIZEP0; +UBYTE GTIA_SIZEP1; +UBYTE GTIA_SIZEP2; +UBYTE GTIA_SIZEP3; +UBYTE GTIA_SIZEM; +UBYTE GTIA_GRAFP0; +UBYTE GTIA_GRAFP1; +UBYTE GTIA_GRAFP2; +UBYTE GTIA_GRAFP3; +UBYTE GTIA_GRAFM; +UBYTE GTIA_COLPM0; +UBYTE GTIA_COLPM1; +UBYTE GTIA_COLPM2; +UBYTE GTIA_COLPM3; +UBYTE GTIA_COLPF0; +UBYTE GTIA_COLPF1; +UBYTE GTIA_COLPF2; +UBYTE GTIA_COLPF3; +UBYTE GTIA_COLBK; +UBYTE GTIA_PRIOR; +UBYTE GTIA_VDELAY; +UBYTE GTIA_GRACTL; + +/* Internal GTIA state ----------------------------------------------------- */ + +int GTIA_speaker; +int GTIA_consol_override = 0; +static UBYTE consol; +UBYTE consol_mask; +UBYTE GTIA_TRIG[4]; +UBYTE GTIA_TRIG_latch[4]; + +#if defined(BASIC) || defined(CURSES_BASIC) + +static UBYTE PF0PM = 0; +static UBYTE PF1PM = 0; +static UBYTE PF2PM = 0; +static UBYTE PF3PM = 0; +#define GTIA_collisions_mask_missile_playfield 0 +#define GTIA_collisions_mask_player_playfield 0 +#define GTIA_collisions_mask_missile_player 0 +#define GTIA_collisions_mask_player_player 0 + +#else /* defined(BASIC) || defined(CURSES_BASIC) */ + +void set_prior(UBYTE byte); /* in antic.c */ + +/* Player/Missile stuff ---------------------------------------------------- */ + +/* change to 0x00 to disable collisions */ +UBYTE GTIA_collisions_mask_missile_playfield = 0x0f; +UBYTE GTIA_collisions_mask_player_playfield = 0x0f; +UBYTE GTIA_collisions_mask_missile_player = 0x0f; +UBYTE GTIA_collisions_mask_player_player = 0x0f; + +#ifdef NEW_CYCLE_EXACT +/* temporary collision registers for the current scanline only */ +UBYTE P1PL_T; +UBYTE P2PL_T; +UBYTE P3PL_T; +UBYTE M0PL_T; +UBYTE M1PL_T; +UBYTE M2PL_T; +UBYTE M3PL_T; +/* If partial collisions have been generated during a scanline, this + * is the position of the up-to-date collision point , otherwise it is 0 + */ +int collision_curpos; +/* if hitclr has been written to during a scanline, this is the position + * within pm_scaline at which it was written to, and collisions should + * only be generated from this point on, otherwise it is 0 + */ +int hitclr_pos; +#else +#define P1PL_T GTIA_P1PL +#define P2PL_T GTIA_P2PL +#define P3PL_T GTIA_P3PL +#define M0PL_T GTIA_M0PL +#define M1PL_T GTIA_M1PL +#define M2PL_T GTIA_M2PL +#define M3PL_T GTIA_M3PL +#endif /* NEW_CYCLE_EXACT */ + +static UBYTE *hposp_ptr[4]; +static UBYTE *hposm_ptr[4]; +static ULONG hposp_mask[4]; + +static ULONG grafp_lookup[4][256]; +static ULONG *grafp_ptr[4]; +static int global_sizem[4]; + +static const int PM_Width[4] = {1, 2, 1, 4}; + +/* Meaning of bits in GTIA_pm_scanline: +bit 0 - Player 0 +bit 1 - Player 1 +bit 2 - Player 2 +bit 3 - Player 3 +bit 4 - Missile 0 +bit 5 - Missile 1 +bit 6 - Missile 2 +bit 7 - Missile 3 +*/ + +UBYTE GTIA_pm_scanline[ATARI_WIDTH / 2 + 8]; /* there's a byte for every *pair* of pixels */ +int GTIA_pm_dirty = TRUE; + +#define C_PM0 0x01 +#define C_PM1 0x02 +#define C_PM01 0x03 +#define C_PM2 0x04 +#define C_PM3 0x05 +#define C_PM23 0x06 +#define C_PM023 0x07 +#define C_PM123 0x08 +#define C_PM0123 0x09 +#define C_PM25 0x0a +#define C_PM35 0x0b +#define C_PM235 0x0c +#define C_COLLS 0x0d +#define C_BAK 0x00 +#define C_HI2 0x20 +#define C_HI3 0x30 +#define C_PF0 0x40 +#define C_PF1 0x50 +#define C_PF2 0x60 +#define C_PF3 0x70 + +#define PF0PM (*(UBYTE *) &ANTIC_cl[C_PF0 | C_COLLS]) +#define PF1PM (*(UBYTE *) &ANTIC_cl[C_PF1 | C_COLLS]) +#define PF2PM (*(UBYTE *) &ANTIC_cl[C_PF2 | C_COLLS]) +#define PF3PM (*(UBYTE *) &ANTIC_cl[C_PF3 | C_COLLS]) + +/* Colours ----------------------------------------------------------------- */ + +#ifdef USE_COLOUR_TRANSLATION_TABLE +UWORD colour_translation_table[256]; +#endif /* USE_COLOUR_TRANSLATION_TABLE */ + +static void setup_gtia9_11(void) { + int i; +#ifdef USE_COLOUR_TRANSLATION_TABLE + UWORD temp; + temp = colour_translation_table[GTIA_COLBK & 0xf0]; + ANTIC_lookup_gtia11[0] = ((ULONG) temp << 16) + temp; + for (i = 1; i < 16; i++) { + temp = colour_translation_table[GTIA_COLBK | i]; + ANTIC_lookup_gtia9[i] = ((ULONG) temp << 16) + temp; + temp = colour_translation_table[GTIA_COLBK | (i << 4)]; + ANTIC_lookup_gtia11[i] = ((ULONG) temp << 16) + temp; + } +#else + ULONG count9 = 0; + ULONG count11 = 0; + ANTIC_lookup_gtia11[0] = ANTIC_lookup_gtia9[0] & 0xf0f0f0f0; + for (i = 1; i < 16; i++) { + ANTIC_lookup_gtia9[i] = ANTIC_lookup_gtia9[0] | (count9 += 0x01010101); + ANTIC_lookup_gtia11[i] = ANTIC_lookup_gtia9[0] | (count11 += 0x10101010); + } +#endif +} + +#endif /* defined(BASIC) || defined(CURSES_BASIC) */ + +/* Initialization ---------------------------------------------------------- */ + +int GTIA_Initialise(void) +{ +#if !defined(BASIC) && !defined(CURSES_BASIC) + int i; + for (i = 0; i < 256; i++) { + int tmp = i + 0x100; + ULONG grafp1 = 0; + ULONG grafp2 = 0; + ULONG grafp4 = 0; + do { + grafp1 <<= 1; + grafp2 <<= 2; + grafp4 <<= 4; + if (tmp & 1) { + grafp1++; + grafp2 += 3; + grafp4 += 15; + } + tmp >>= 1; + } while (tmp != 1); + grafp_lookup[2][i] = grafp_lookup[0][i] = grafp1; + grafp_lookup[1][i] = grafp2; + grafp_lookup[3][i] = grafp4; + } + memset(ANTIC_cl, GTIA_COLOUR_BLACK, sizeof(ANTIC_cl)); + for (i = 0; i < 32; i++) + GTIA_PutByte((UWORD) i, 0); +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + + return TRUE; +} + +#ifdef NEW_CYCLE_EXACT + +/* generate updated PxPL and MxPL for part of a scanline */ +/* slow, but should be called rarely */ +static void generate_partial_pmpl_colls(int l, int r) +{ + int i; + if (r < 0 || l >= (int) sizeof(GTIA_pm_scanline) / (int) sizeof(GTIA_pm_scanline[0])) + return; + if (r >= (int) sizeof(GTIA_pm_scanline) / (int) sizeof(GTIA_pm_scanline[0])) { + r = (int) sizeof(GTIA_pm_scanline) / (int) sizeof(GTIA_pm_scanline[0]); + } + if (l < 0) + l = 0; + + for (i = l; i <= r; i++) { + UBYTE p = GTIA_pm_scanline[i]; +/* It is possible that some bits are set in PxPL/MxPL here, which would + * not otherwise be set ever in GTIA_NewPmScanline. This is because the + * player collisions are always generated in order in GTIA_NewPmScanline. + * However this does not cause any problem because we never use those bits + * of PxPL/MxPL in the collision reading code. + */ + GTIA_P1PL |= (p & (1 << 1)) ? p : 0; + GTIA_P2PL |= (p & (1 << 2)) ? p : 0; + GTIA_P3PL |= (p & (1 << 3)) ? p : 0; + GTIA_M0PL |= (p & (0x10 << 0)) ? p : 0; + GTIA_M1PL |= (p & (0x10 << 1)) ? p : 0; + GTIA_M2PL |= (p & (0x10 << 2)) ? p : 0; + GTIA_M3PL |= (p & (0x10 << 3)) ? p : 0; + } + +} + +/* update pm->pl collisions for a partial scanline */ +static void update_partial_pmpl_colls(void) +{ + int l = collision_curpos; + int r = ANTIC_XPOS * 2 - 37; + generate_partial_pmpl_colls(l, r); + collision_curpos = r; +} + +/* update pm-> pl collisions at the end of a scanline */ +void GTIA_UpdatePmplColls(void) +{ + if (hitclr_pos != 0){ + generate_partial_pmpl_colls(hitclr_pos, + sizeof(GTIA_pm_scanline) / sizeof(GTIA_pm_scanline[0]) - 1); +/* If hitclr was written to, then only part of GTIA_pm_scanline should be used + * for collisions */ + + } + else { +/* otherwise the whole of pm_scaline can be used for collisions. This will + * update the collision registers based on the generated collisions for the + * current line */ + GTIA_P1PL |= P1PL_T; + GTIA_P2PL |= P2PL_T; + GTIA_P3PL |= P3PL_T; + GTIA_M0PL |= M0PL_T; + GTIA_M1PL |= M1PL_T; + GTIA_M2PL |= M2PL_T; + GTIA_M3PL |= M3PL_T; + } + collision_curpos = 0; + hitclr_pos = 0; +} + +#else +#define update_partial_pmpl_colls() +#endif /* NEW_CYCLE_EXACT */ + +/* Prepare PMG scanline ---------------------------------------------------- */ + +#if !defined(BASIC) && !defined(CURSES_BASIC) + +void GTIA_NewPmScanline(void) +{ +#ifdef NEW_CYCLE_EXACT +/* reset temporary pm->pl collisions */ + P1PL_T = P2PL_T = P3PL_T = 0; + M0PL_T = M1PL_T = M2PL_T = M3PL_T = 0; +#endif /* NEW_CYCLE_EXACT */ +/* Clear if necessary */ + if (GTIA_pm_dirty) { + memset(GTIA_pm_scanline, 0, ATARI_WIDTH / 2); + GTIA_pm_dirty = FALSE; + } + +/* Draw Players */ + +#define DO_PLAYER(n) if (GTIA_GRAFP##n) { \ + ULONG grafp = grafp_ptr[n][GTIA_GRAFP##n] & hposp_mask[n]; \ + if (grafp) { \ + UBYTE *ptr = hposp_ptr[n]; \ + GTIA_pm_dirty = TRUE; \ + do { \ + if (grafp & 1) \ + P##n##PL_T |= *ptr |= 1 << n; \ + ptr++; \ + grafp >>= 1; \ + } while (grafp); \ + } \ +} + + /* optimized DO_PLAYER(0): GTIA_pm_scanline is clear and P0PL is unused */ + if (GTIA_GRAFP0) { + ULONG grafp = grafp_ptr[0][GTIA_GRAFP0] & hposp_mask[0]; + if (grafp) { + UBYTE *ptr = hposp_ptr[0]; + GTIA_pm_dirty = TRUE; + do { + if (grafp & 1) + *ptr = 1; + ptr++; + grafp >>= 1; + } while (grafp); + } + } + + DO_PLAYER(1) + DO_PLAYER(2) + DO_PLAYER(3) + +/* Draw Missiles */ + +#define DO_MISSILE(n,p,m,r,l) if (GTIA_GRAFM & m) { \ + int j = global_sizem[n]; \ + UBYTE *ptr = hposm_ptr[n]; \ + if (GTIA_GRAFM & r) { \ + if (GTIA_GRAFM & l) \ + j <<= 1; \ + } \ + else \ + ptr += j; \ + if (ptr < GTIA_pm_scanline + 2) { \ + j += ptr - GTIA_pm_scanline - 2; \ + ptr = GTIA_pm_scanline + 2; \ + } \ + else if (ptr + j > GTIA_pm_scanline + ATARI_WIDTH / 2 - 2) \ + j = GTIA_pm_scanline + ATARI_WIDTH / 2 - 2 - ptr; \ + if (j > 0) \ + do \ + M##n##PL_T |= *ptr++ |= p; \ + while (--j); \ +} + + if (GTIA_GRAFM) { + GTIA_pm_dirty = TRUE; + DO_MISSILE(3, 0x80, 0xc0, 0x80, 0x40) + DO_MISSILE(2, 0x40, 0x30, 0x20, 0x10) + DO_MISSILE(1, 0x20, 0x0c, 0x08, 0x04) + DO_MISSILE(0, 0x10, 0x03, 0x02, 0x01) + } +} + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + +/* GTIA registers ---------------------------------------------------------- */ + +void GTIA_Frame(void) +{ +#ifdef BASIC + consol = 0xf; +#else + consol = INPUT_key_consol | 0x08; +#endif + + if (GTIA_GRACTL & 4) { + GTIA_TRIG_latch[0] &= GTIA_TRIG[0]; + GTIA_TRIG_latch[1] &= GTIA_TRIG[1]; + GTIA_TRIG_latch[2] &= GTIA_TRIG[2]; + GTIA_TRIG_latch[3] &= GTIA_TRIG[3]; + } +} + +UBYTE GTIA_GetByte(UWORD addr, int no_side_effects) +{ + switch (addr & 0x1f) { + case GTIA_OFFSET_M0PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x10) >> 4) + + ((PF1PM & 0x10) >> 3) + + ((PF2PM & 0x10) >> 2) + + ((PF3PM & 0x10) >> 1)) & GTIA_collisions_mask_missile_playfield; + case GTIA_OFFSET_M1PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x20) >> 5) + + ((PF1PM & 0x20) >> 4) + + ((PF2PM & 0x20) >> 3) + + ((PF3PM & 0x20) >> 2)) & GTIA_collisions_mask_missile_playfield; + case GTIA_OFFSET_M2PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x40) >> 6) + + ((PF1PM & 0x40) >> 5) + + ((PF2PM & 0x40) >> 4) + + ((PF3PM & 0x40) >> 3)) & GTIA_collisions_mask_missile_playfield; + case GTIA_OFFSET_M3PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x80) >> 7) + + ((PF1PM & 0x80) >> 6) + + ((PF2PM & 0x80) >> 5) + + ((PF3PM & 0x80) >> 4)) & GTIA_collisions_mask_missile_playfield; + case GTIA_OFFSET_P0PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return ((PF0PM & 0x01) + + ((PF1PM & 0x01) << 1) + + ((PF2PM & 0x01) << 2) + + ((PF3PM & 0x01) << 3)) & GTIA_collisions_mask_player_playfield; + case GTIA_OFFSET_P1PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x02) >> 1) + + (PF1PM & 0x02) + + ((PF2PM & 0x02) << 1) + + ((PF3PM & 0x02) << 2)) & GTIA_collisions_mask_player_playfield; + case GTIA_OFFSET_P2PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x04) >> 2) + + ((PF1PM & 0x04) >> 1) + + (PF2PM & 0x04) + + ((PF3PM & 0x04) << 1)) & GTIA_collisions_mask_player_playfield; + case GTIA_OFFSET_P3PF: +#ifdef NEW_CYCLE_EXACT + if (ANTIC_DRAWING_SCREEN) { + ANTIC_UpdateScanline(); + } +#endif + return (((PF0PM & 0x08) >> 3) + + ((PF1PM & 0x08) >> 2) + + ((PF2PM & 0x08) >> 1) + + (PF3PM & 0x08)) & GTIA_collisions_mask_player_playfield; + case GTIA_OFFSET_M0PL: + update_partial_pmpl_colls(); + return GTIA_M0PL & GTIA_collisions_mask_missile_player; + case GTIA_OFFSET_M1PL: + update_partial_pmpl_colls(); + return GTIA_M1PL & GTIA_collisions_mask_missile_player; + case GTIA_OFFSET_M2PL: + update_partial_pmpl_colls(); + return GTIA_M2PL & GTIA_collisions_mask_missile_player; + case GTIA_OFFSET_M3PL: + update_partial_pmpl_colls(); + return GTIA_M3PL & GTIA_collisions_mask_missile_player; + case GTIA_OFFSET_P0PL: + update_partial_pmpl_colls(); + return (((GTIA_P1PL & 0x01) << 1) /* mask in player 1 */ + + ((GTIA_P2PL & 0x01) << 2) /* mask in player 2 */ + + ((GTIA_P3PL & 0x01) << 3)) /* mask in player 3 */ + & GTIA_collisions_mask_player_player; + case GTIA_OFFSET_P1PL: + update_partial_pmpl_colls(); + return ((GTIA_P1PL & 0x01) /* mask in player 0 */ + + ((GTIA_P2PL & 0x02) << 1) /* mask in player 2 */ + + ((GTIA_P3PL & 0x02) << 2)) /* mask in player 3 */ + & GTIA_collisions_mask_player_player; + case GTIA_OFFSET_P2PL: + update_partial_pmpl_colls(); + return ((GTIA_P2PL & 0x03) /* mask in player 0 and 1 */ + + ((GTIA_P3PL & 0x04) << 1)) /* mask in player 3 */ + & GTIA_collisions_mask_player_player; + case GTIA_OFFSET_P3PL: + update_partial_pmpl_colls(); + return (GTIA_P3PL & 0x07) /* mask in player 0,1, and 2 */ + & GTIA_collisions_mask_player_player; + case GTIA_OFFSET_TRIG0: + return GTIA_TRIG[0] & GTIA_TRIG_latch[0]; + case GTIA_OFFSET_TRIG1: + return GTIA_TRIG[1] & GTIA_TRIG_latch[1]; + case GTIA_OFFSET_TRIG2: + return GTIA_TRIG[2] & GTIA_TRIG_latch[2]; + case GTIA_OFFSET_TRIG3: + return GTIA_TRIG[3] & GTIA_TRIG_latch[3]; + case GTIA_OFFSET_PAL: + return (tv_mode == TV_PAL) ? 0x01 : 0x0f; + case GTIA_OFFSET_CONSOL: + { + UBYTE byte = consol & consol_mask; +#if SKIP + if (!no_side_effects && GTIA_consol_override > 0) { + /* Check if we're called from outside OS. This avoids sending + console keystrokes to diagnostic cartridges. */ + if (CPU_regPC < 0xc000) + /* Not from OS. Disable console override. */ + GTIA_consol_override = 0; + else { + --GTIA_consol_override; + if (Atari800_builtin_basic && Atari800_disable_basic && !BINLOAD_loading_basic) + /* Only for XL/XE - hold Option during reboot. */ + byte &= ~INPUT_CONSOL_OPTION; + if (CASSETTE_hold_start && Atari800_machine_type != Atari800_MACHINE_5200) { + /* Only for the computers - hold Start during reboot. */ + byte &= ~INPUT_CONSOL_START; + if (GTIA_consol_override == 0) { + /* press Space after Start to start cassette boot. */ + CASSETTE_press_space = 1; + CASSETTE_hold_start = CASSETTE_hold_start_on_reboot; + } + } + } + } +#endif + return byte; + } + default: + break; + } + + return 0xf; +} + +void GTIA_PutByte(UWORD addr, UBYTE byte) +{ +#if !defined(BASIC) && !defined(CURSES_BASIC) + UWORD cword; + UWORD cword2; + +#ifdef NEW_CYCLE_EXACT + int x; /* the cycle-exact update position in GTIA_pm_scanline */ + if (ANTIC_DRAWING_SCREEN) { + if ((addr & 0x1f) != GTIA_PRIOR) { + ANTIC_UpdateScanline(); + } else { + ANTIC_UpdateScanlinePrior(byte); + } + } +#define UPDATE_PM_CYCLE_EXACT if(ANTIC_DRAWING_SCREEN) GTIA_NewPmScanline(); +#else +#define UPDATE_PM_CYCLE_EXACT +#endif + +#endif /* !defined(BASIC) && !defined(CURSES_BASIC) */ + + switch (addr & 0x1f) { + case GTIA_OFFSET_CONSOL: + GTIA_speaker = !(byte & 0x08); +#ifdef CONSOLE_SOUND + POKEYSND_UpdateConsol(1); +#endif + consol_mask = (~byte) & 0x0f; + break; + +#if defined(BASIC) || defined(CURSES_BASIC) + + /* We use these for Antic modes 6, 7 on Curses */ + case GTIA_OFFSET_COLPF0: + GTIA_COLPF0 = byte; + break; + case GTIA_OFFSET_COLPF1: + GTIA_COLPF1 = byte; + break; + case GTIA_OFFSET_COLPF2: + GTIA_COLPF2 = byte; + break; + case GTIA_OFFSET_COLPF3: + GTIA_COLPF3 = byte; + break; + +#else + +#ifdef USE_COLOUR_TRANSLATION_TABLE + case GTIA_OFFSET_COLBK: + GTIA_COLBK = byte &= 0xfe; + ANTIC_cl[C_BAK] = cword = colour_translation_table[byte]; + if (cword != (UWORD) (ANTIC_lookup_gtia9[0]) ) { + ANTIC_lookup_gtia9[0] = cword + (cword << 16); + if (GTIA_PRIOR & 0x40) + setup_gtia9_11(); + } + break; + case GTIA_OFFSET_COLPF0: + GTIA_COLPF0 = byte &= 0xfe; + ANTIC_cl[C_PF0] = cword = GTIA_colour_translation_table[byte]; + if ((GTIA_PRIOR & 1) == 0) { + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF0 | C_PM3] = ANTIC_cl[C_PF0 | C_PM2] = cword; + if ((GTIA_PRIOR & 3) == 0) { + if (GTIA_PRIOR & 0xf) { + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF0 | C_PM1] = ANTIC_cl[C_PF0 | C_PM0] = cword; + if ((GTIA_PRIOR & 0xf) == 0xc) + ANTIC_cl[C_PF0 | C_PM0123] = ANTIC_cl[C_PF0 | C_PM123] = ANTIC_cl[C_PF0 | C_PM023] = cword; + } + else { + ANTIC_cl[C_PF0 | C_PM0] = colour_translation_table[byte | GTIA_COLPM0]; + ANTIC_cl[C_PF0 | C_PM1] = colour_translation_table[byte | GTIA_COLPM1]; + ANTIC_cl[C_PF0 | C_PM01] = colour_translation_table[byte | GTIA_COLPM0 | GTIA_COLPM1]; + } + } + if ((GTIA_PRIOR & 0xf) >= 0xa) + ANTIC_cl[C_PF0 | C_PM25] = cword; + } + break; + case GTIA_OFFSET_COLPF1: + GTIA_COLPF1 = byte &= 0xfe; + ANTIC_cl[C_PF1] = cword = GTIA_colour_translation_table[byte]; + if ((GTIA_PRIOR & 1) == 0) { + ANTIC_cl[C_PF1 | C_PM23] = ANTIC_cl[C_PF1 | C_PM3] = ANTIC_cl[C_PF1 | C_PM2] = cword; + if ((GTIA_PRIOR & 3) == 0) { + if (GTIA_PRIOR & 0xf) { + ANTIC_cl[C_PF1 | C_PM01] = ANTIC_cl[C_PF1 | C_PM1] = ANTIC_cl[C_PF1 | C_PM0] = cword; + if ((GTIA_PRIOR & 0xf) == 0xc) + ANTIC_cl[C_PF1 | C_PM0123] = ANTIC_cl[C_PF1 | C_PM123] = ANTIC_cl[C_PF1 | C_PM023] = cword; + } + else { + ANTIC_cl[C_PF1 | C_PM0] = colour_translation_table[byte | GTIA_COLPM0]; + ANTIC_cl[C_PF1 | C_PM1] = colour_translation_table[byte | GTIA_COLPM1]; + ANTIC_cl[C_PF1 | C_PM01] = colour_translation_table[byte | GTIA_COLPM0 | GTIA_COLPM1]; + } + } + } + { + UBYTE byte2 = (GTIA_COLPF2 & 0xf0) + (byte & 0xf); + ANTIC_cl[C_HI2] = cword = colour_translation_table[byte2]; + ANTIC_cl[C_HI3] = colour_translation_table[(GTIA_COLPF3 & 0xf0) | (byte & 0xf)]; + if (GTIA_PRIOR & 4) + ANTIC_cl[C_HI2 | C_PM01] = ANTIC_cl[C_HI2 | C_PM1] = ANTIC_cl[C_HI2 | C_PM0] = cword; + if ((GTIA_PRIOR & 9) == 0) { + if (GTIA_PRIOR & 0xf) + ANTIC_cl[C_HI2 | C_PM23] = ANTIC_cl[C_HI2 | C_PM3] = ANTIC_cl[C_HI2 | C_PM2] = cword; + else { + ANTIC_cl[C_HI2 | C_PM2] = colour_translation_table[byte2 | (GTIA_COLPM2 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM3] = colour_translation_table[byte2 | (GTIA_COLPM3 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM23] = colour_translation_table[byte2 | ((GTIA_COLPM2 | GTIA_COLPM3) & 0xf0)]; + } + } + } + break; + case GTIA_OFFSET_COLPF2: + GTIA_COLPF2 = byte &= 0xfe; + ANTIC_cl[C_PF2] = cword = GTIA_colour_translation_table[byte]; + { + UBYTE byte2 = (byte & 0xf0) + (GTIA_COLPF1 & 0xf); + ANTIC_cl[C_HI2] = cword2 = colour_translation_table[byte2]; + if (GTIA_PRIOR & 4) { + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PF2 | C_PM0] = cword; + ANTIC_cl[C_HI2 | C_PM01] = ANTIC_cl[C_HI2 | C_PM1] = ANTIC_cl[C_HI2 | C_PM0] = cword2; + } + if ((GTIA_PRIOR & 9) == 0) { + if (GTIA_PRIOR & 0xf) { + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF2 | C_PM3] = ANTIC_cl[C_PF2 | C_PM2] = cword; + ANTIC_cl[C_HI2 | C_PM23] = ANTIC_cl[C_HI2 | C_PM3] = ANTIC_cl[C_HI2 | C_PM2] = cword2; + } + else { + ANTIC_cl[C_PF2 | C_PM2] = colour_translation_table[byte | GTIA_COLPM2]; + ANTIC_cl[C_PF2 | C_PM3] = colour_translation_table[byte | GTIA_COLPM3]; + ANTIC_cl[C_PF2 | C_PM23] = colour_translation_table[byte | GTIA_COLPM2 | GTIA_COLPM3]; + ANTIC_cl[C_HI2 | C_PM2] = colour_translation_table[byte2 | (GTIA_COLPM2 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM3] = colour_translation_table[byte2 | (GTIA_COLPM3 & 0xf0)]; + ANTIC_cl[C_HI2 | C_PM23] = colour_translation_table[byte2 | ((GTIA_COLPM2 | GTIA_COLPM3) & 0xf0)]; + } + } + } + break; + case GTIA_OFFSET_COLPF3: + GTIA_COLPF3 = byte &= 0xfe; + ANTIC_cl[C_PF3] = cword = colour_translation_table[byte]; + ANTIC_cl[C_HI3] = cword2 = colour_translation_table[(byte & 0xf0) | (GTIA_COLPF1 & 0xf)]; + if (GTIA_PRIOR & 4) + ANTIC_cl[C_PF3 | C_PM01] = ANTIC_cl[C_PF3 | C_PM1] = ANTIC_cl[C_PF3 | C_PM0] = cword; + if ((GTIA_PRIOR & 9) == 0) { + if (GTIA_PRIOR & 0xf) + ANTIC_cl[C_PF3 | C_PM23] = ANTIC_cl[C_PF3 | C_PM3] = ANTIC_cl[C_PF3 | C_PM2] = cword; + else { + ANTIC_cl[C_PF3 | C_PM25] = ANTIC_cl[C_PF2 | C_PM25] = ANTIC_cl[C_PM25] = ANTIC_cl[C_PF3 | C_PM2] = colour_translation_table[byte | GTIA_COLPM2]; + ANTIC_cl[C_PF3 | C_PM35] = ANTIC_cl[C_PF2 | C_PM35] = ANTIC_cl[C_PM35] = ANTIC_cl[C_PF3 | C_PM3] = colour_translation_table[byte | GTIA_COLPM3]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23] = colour_translation_table[byte | GTIA_COLPM2 | GTIA_COLPM3]; + ANTIC_cl[C_PF0 | C_PM235] = ANTIC_cl[C_PF0 | C_PM35] = ANTIC_cl[C_PF0 | C_PM25] = + ANTIC_cl[C_PF1 | C_PM235] = ANTIC_cl[C_PF1 | C_PM35] = ANTIC_cl[C_PF1 | C_PM25] = cword; + } + } + break; + case GTIA_OFFSET_COLPM0: + GTIA_COLPM0 = byte &= 0xfe; + ANTIC_cl[C_PM023] = ANTIC_cl[C_PM0] = cword = colour_translation_table[byte]; + { + UBYTE byte2 = byte | GTIA_COLPM1; + ANTIC_cl[C_PM0123] = ANTIC_cl[C_PM01] = cword2 = colour_translation_table[byte2]; + if ((GTIA_PRIOR & 4) == 0) { + ANTIC_cl[C_PF2 | C_PM0] = ANTIC_cl[C_PF3 | C_PM0] = cword; + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF3 | C_PM01] = cword2; + ANTIC_cl[C_HI2 | C_PM0] = colour_translation_table[(byte & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM01] = colour_translation_table[(byte2 & 0xf0) | (GTIA_COLPF1 & 0xf)]; + if ((GTIA_PRIOR & 0xc) == 0) { + if (GTIA_PRIOR & 3) { + ANTIC_cl[C_PF0 | C_PM0] = ANTIC_cl[C_PF1 | C_PM0] = cword; + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF1 | C_PM01] = cword2; + } + else { + ANTIC_cl[C_PF0 | C_PM0] = colour_translation_table[byte | GTIA_COLPF0]; + ANTIC_cl[C_PF1 | C_PM0] = colour_translation_table[byte | GTIA_COLPF1]; + ANTIC_cl[C_PF0 | C_PM01] = colour_translation_table[byte2 | GTIA_COLPF0]; + ANTIC_cl[C_PF1 | C_PM01] = colour_translation_table[byte2 | GTIA_COLPF1]; + } + } + } + } + break; + case GTIA_OFFSET_COLPM1: + GTIA_COLPM1 = byte &= 0xfe; + ANTIC_cl[C_PM123] = ANTIC_cl[C_PM1] = cword = colour_translation_table[byte]; + { + UBYTE byte2 = byte | GTIA_COLPM0; + ANTIC_cl[C_PM0123] = ANTIC_cl[C_PM01] = cword2 = colour_translation_table[byte2]; + if ((GTIA_PRIOR & 4) == 0) { + ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PF3 | C_PM1] = cword; + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF3 | C_PM01] = cword2; + ANTIC_cl[C_HI2 | C_PM1] = colour_translation_table[(byte & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM01] = colour_translation_table[(byte2 & 0xf0) | (GTIA_COLPF1 & 0xf)]; + if ((GTIA_PRIOR & 0xc) == 0) { + if (GTIA_PRIOR & 3) { + ANTIC_cl[C_PF0 | C_PM1] = ANTIC_cl[C_PF1 | C_PM1] = cword; + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF1 | C_PM01] = cword2; + } + else { + ANTIC_cl[C_PF0 | C_PM1] = colour_translation_table[byte | GTIA_COLPF0]; + ANTIC_cl[C_PF1 | C_PM1] = colour_translation_table[byte | GTIA_COLPF1]; + ANTIC_cl[C_PF0 | C_PM01] = colour_translation_table[byte2 | GTIA_COLPF0]; + ANTIC_cl[C_PF1 | C_PM01] = colour_translation_table[byte2 | GTIA_COLPF1]; + } + } + } + } + break; + case GTIA_OFFSET_COLPM2: + GTIA_COLPM2 = byte &= 0xfe; + ANTIC_cl[C_PM2] = cword = colour_translation_table[byte]; + { + UBYTE byte2 = byte | GTIA_COLPM3; + ANTIC_cl[C_PM23] = cword2 = colour_translation_table[byte2]; + if (GTIA_PRIOR & 1) { + ANTIC_cl[C_PF0 | C_PM2] = ANTIC_cl[C_PF1 | C_PM2] = cword; + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF1 | C_PM23] = cword2; + } + if ((GTIA_PRIOR & 6) == 0) { + if (GTIA_PRIOR & 9) { + ANTIC_cl[C_PF2 | C_PM2] = ANTIC_cl[C_PF3 | C_PM2] = cword; + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF3 | C_PM23] = cword2; + ANTIC_cl[C_HI2 | C_PM2] = colour_translation_table[(byte & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM23] = colour_translation_table[(byte2 & 0xf0) | (GTIA_COLPF1 & 0xf)]; + } + else { + ANTIC_cl[C_PF2 | C_PM2] = colour_translation_table[byte | GTIA_COLPF2]; + ANTIC_cl[C_PF3 | C_PM25] = ANTIC_cl[C_PF2 | C_PM25] = ANTIC_cl[C_PM25] = ANTIC_cl[C_PF3 | C_PM2] = colour_translation_table[byte | GTIA_COLPF3]; + ANTIC_cl[C_PF2 | C_PM23] = colour_translation_table[byte2 | GTIA_COLPF2]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23] = colour_translation_table[byte2 | GTIA_COLPF3]; + ANTIC_cl[C_HI2 | C_PM2] = colour_translation_table[((byte | GTIA_COLPF2) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM25] = colour_translation_table[((byte | GTIA_COLPF3) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM23] = colour_translation_table[((byte2 | GTIA_COLPF2) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM235] = colour_translation_table[((byte2 | GTIA_COLPF3) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + } + } + } + break; + case GTIA_OFFSET_COLPM3: + GTIA_COLPM3 = byte &= 0xfe; + ANTIC_cl[C_PM3] = cword = colour_translation_table[byte]; + { + UBYTE byte2 = byte | GTIA_COLPM2; + ANTIC_cl[C_PM23] = cword2 = colour_translation_table[byte2]; + if (GTIA_PRIOR & 1) { + ANTIC_cl[C_PF0 | C_PM3] = ANTIC_cl[C_PF1 | C_PM3] = cword; + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF1 | C_PM23] = cword2; + } + if ((GTIA_PRIOR & 6) == 0) { + if (GTIA_PRIOR & 9) { + ANTIC_cl[C_PF2 | C_PM3] = ANTIC_cl[C_PF3 | C_PM3] = cword; + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF3 | C_PM23] = cword2; + } + else { + ANTIC_cl[C_PF2 | C_PM3] = colour_translation_table[byte | GTIA_COLPF2]; + ANTIC_cl[C_PF3 | C_PM35] = ANTIC_cl[C_PF2 | C_PM35] = ANTIC_cl[C_PM35] = ANTIC_cl[C_PF3 | C_PM3] = colour_translation_table[byte | GTIA_COLPF3]; + ANTIC_cl[C_PF2 | C_PM23] = colour_translation_table[byte2 | GTIA_COLPF2]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23] = colour_translation_table[byte2 | GTIA_COLPF3]; + ANTIC_cl[C_HI2 | C_PM3] = colour_translation_table[((byte | GTIA_COLPF2) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + ANTIC_cl[C_HI2 | C_PM23] = colour_translation_table[((byte2 | GTIA_COLPF2) & 0xf0) | (GTIA_COLPF1 & 0xf)]; + } + } + } + break; +#else /* USE_COLOUR_TRANSLATION_TABLE */ + case GTIA_OFFSET_COLBK: + GTIA_COLBK = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_BAK] = cword; + if (cword != (UWORD) (ANTIC_lookup_gtia9[0]) ) { + ANTIC_lookup_gtia9[0] = cword + (cword << 16); + if (GTIA_PRIOR & 0x40) + setup_gtia9_11(); + } + break; + case GTIA_OFFSET_COLPF0: + GTIA_COLPF0 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PF0] = cword; + if ((GTIA_PRIOR & 1) == 0) { + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF0 | C_PM3] = ANTIC_cl[C_PF0 | C_PM2] = cword; + if ((GTIA_PRIOR & 3) == 0) { + if (GTIA_PRIOR & 0xf) { + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF0 | C_PM1] = ANTIC_cl[C_PF0 | C_PM0] = cword; + if ((GTIA_PRIOR & 0xf) == 0xc) + ANTIC_cl[C_PF0 | C_PM0123] = ANTIC_cl[C_PF0 | C_PM123] = ANTIC_cl[C_PF0 | C_PM023] = cword; + } + else + ANTIC_cl[C_PF0 | C_PM01] = (ANTIC_cl[C_PF0 | C_PM0] = cword | ANTIC_cl[C_PM0]) | (ANTIC_cl[C_PF0 | C_PM1] = cword | ANTIC_cl[C_PM1]); + } + if ((GTIA_PRIOR & 0xf) >= 0xa) + ANTIC_cl[C_PF0 | C_PM25] = cword; + } + break; + case GTIA_OFFSET_COLPF1: + GTIA_COLPF1 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PF1] = cword; + if ((GTIA_PRIOR & 1) == 0) { + ANTIC_cl[C_PF1 | C_PM23] = ANTIC_cl[C_PF1 | C_PM3] = ANTIC_cl[C_PF1 | C_PM2] = cword; + if ((GTIA_PRIOR & 3) == 0) { + if (GTIA_PRIOR & 0xf) { + ANTIC_cl[C_PF1 | C_PM01] = ANTIC_cl[C_PF1 | C_PM1] = ANTIC_cl[C_PF1 | C_PM0] = cword; + if ((GTIA_PRIOR & 0xf) == 0xc) + ANTIC_cl[C_PF1 | C_PM0123] = ANTIC_cl[C_PF1 | C_PM123] = ANTIC_cl[C_PF1 | C_PM023] = cword; + } + else + ANTIC_cl[C_PF1 | C_PM01] = (ANTIC_cl[C_PF1 | C_PM0] = cword | ANTIC_cl[C_PM0]) | (ANTIC_cl[C_PF1 | C_PM1] = cword | ANTIC_cl[C_PM1]); + } + } + ((UBYTE *)ANTIC_hires_lookup_l)[0x80] = ((UBYTE *)ANTIC_hires_lookup_l)[0x41] = (UBYTE) + (ANTIC_hires_lookup_l[0x60] = cword & 0xf0f); + break; + case GTIA_OFFSET_COLPF2: + GTIA_COLPF2 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PF2] = cword; + if (GTIA_PRIOR & 4) + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PF2 | C_PM0] = cword; + if ((GTIA_PRIOR & 9) == 0) { + if (GTIA_PRIOR & 0xf) + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF2 | C_PM3] = ANTIC_cl[C_PF2 | C_PM2] = cword; + else + ANTIC_cl[C_PF2 | C_PM23] = (ANTIC_cl[C_PF2 | C_PM2] = cword | ANTIC_cl[C_PM2]) | (ANTIC_cl[C_PF2 | C_PM3] = cword | ANTIC_cl[C_PM3]); + } + break; + case GTIA_OFFSET_COLPF3: + GTIA_COLPF3 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PF3] = cword; + if (GTIA_PRIOR & 4) + ANTIC_cl[C_PF3 | C_PM01] = ANTIC_cl[C_PF3 | C_PM1] = ANTIC_cl[C_PF3 | C_PM0] = cword; + if ((GTIA_PRIOR & 9) == 0) { + if (GTIA_PRIOR & 0xf) + ANTIC_cl[C_PF3 | C_PM23] = ANTIC_cl[C_PF3 | C_PM3] = ANTIC_cl[C_PF3 | C_PM2] = cword; + else { + ANTIC_cl[C_PF3 | C_PM25] = ANTIC_cl[C_PF2 | C_PM25] = ANTIC_cl[C_PM25] = ANTIC_cl[C_PF3 | C_PM2] = cword | ANTIC_cl[C_PM2]; + ANTIC_cl[C_PF3 | C_PM35] = ANTIC_cl[C_PF2 | C_PM35] = ANTIC_cl[C_PM35] = ANTIC_cl[C_PF3 | C_PM3] = cword | ANTIC_cl[C_PM3]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23] = ANTIC_cl[C_PF3 | C_PM2] | ANTIC_cl[C_PF3 | C_PM3]; + ANTIC_cl[C_PF0 | C_PM235] = ANTIC_cl[C_PF0 | C_PM35] = ANTIC_cl[C_PF0 | C_PM25] = + ANTIC_cl[C_PF1 | C_PM235] = ANTIC_cl[C_PF1 | C_PM35] = ANTIC_cl[C_PF1 | C_PM25] = cword; + } + } + break; + case GTIA_OFFSET_COLPM0: + GTIA_COLPM0 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PM023] = ANTIC_cl[C_PM0] = cword; + ANTIC_cl[C_PM0123] = ANTIC_cl[C_PM01] = cword2 = cword | ANTIC_cl[C_PM1]; + if ((GTIA_PRIOR & 4) == 0) { + ANTIC_cl[C_PF2 | C_PM0] = ANTIC_cl[C_PF3 | C_PM0] = cword; + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF3 | C_PM01] = cword2; + if ((GTIA_PRIOR & 0xc) == 0) { + if (GTIA_PRIOR & 3) { + ANTIC_cl[C_PF0 | C_PM0] = ANTIC_cl[C_PF1 | C_PM0] = cword; + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF1 | C_PM01] = cword2; + } + else { + ANTIC_cl[C_PF0 | C_PM0] = cword | ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM0] = cword | ANTIC_cl[C_PF1]; + ANTIC_cl[C_PF0 | C_PM01] = cword2 | ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM01] = cword2 | ANTIC_cl[C_PF1]; + } + } + } + break; + case GTIA_OFFSET_COLPM1: + GTIA_COLPM1 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PM123] = ANTIC_cl[C_PM1] = cword; + ANTIC_cl[C_PM0123] = ANTIC_cl[C_PM01] = cword2 = cword | ANTIC_cl[C_PM0]; + if ((GTIA_PRIOR & 4) == 0) { + ANTIC_cl[C_PF2 | C_PM1] = ANTIC_cl[C_PF3 | C_PM1] = cword; + ANTIC_cl[C_PF2 | C_PM01] = ANTIC_cl[C_PF3 | C_PM01] = cword2; + if ((GTIA_PRIOR & 0xc) == 0) { + if (GTIA_PRIOR & 3) { + ANTIC_cl[C_PF0 | C_PM1] = ANTIC_cl[C_PF1 | C_PM1] = cword; + ANTIC_cl[C_PF0 | C_PM01] = ANTIC_cl[C_PF1 | C_PM01] = cword2; + } + else { + ANTIC_cl[C_PF0 | C_PM1] = cword | ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM1] = cword | ANTIC_cl[C_PF1]; + ANTIC_cl[C_PF0 | C_PM01] = cword2 | ANTIC_cl[C_PF0]; + ANTIC_cl[C_PF1 | C_PM01] = cword2 | ANTIC_cl[C_PF1]; + } + } + } + break; + case GTIA_OFFSET_COLPM2: + GTIA_COLPM2 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PM2] = cword; + ANTIC_cl[C_PM23] = cword2 = cword | ANTIC_cl[C_PM3]; + if (GTIA_PRIOR & 1) { + ANTIC_cl[C_PF0 | C_PM2] = ANTIC_cl[C_PF1 | C_PM2] = cword; + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF1 | C_PM23] = cword2; + } + if ((GTIA_PRIOR & 6) == 0) { + if (GTIA_PRIOR & 9) { + ANTIC_cl[C_PF2 | C_PM2] = ANTIC_cl[C_PF3 | C_PM2] = cword; + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF3 | C_PM23] = cword2; + } + else { + ANTIC_cl[C_PF2 | C_PM2] = cword | ANTIC_cl[C_PF2]; + ANTIC_cl[C_PF3 | C_PM25] = ANTIC_cl[C_PF2 | C_PM25] = ANTIC_cl[C_PM25] = ANTIC_cl[C_PF3 | C_PM2] = cword | ANTIC_cl[C_PF3]; + ANTIC_cl[C_PF2 | C_PM23] = cword2 | ANTIC_cl[C_PF2]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23] = cword2 | ANTIC_cl[C_PF3]; + } + } + break; + case GTIA_OFFSET_COLPM3: + GTIA_COLPM3 = byte &= 0xfe; + GTIA_COLOUR_TO_WORD(cword,byte); + ANTIC_cl[C_PM3] = cword; + ANTIC_cl[C_PM23] = cword2 = cword | ANTIC_cl[C_PM2]; + if (GTIA_PRIOR & 1) { + ANTIC_cl[C_PF0 | C_PM3] = ANTIC_cl[C_PF1 | C_PM3] = cword; + ANTIC_cl[C_PF0 | C_PM23] = ANTIC_cl[C_PF1 | C_PM23] = cword2; + } + if ((GTIA_PRIOR & 6) == 0) { + if (GTIA_PRIOR & 9) { + ANTIC_cl[C_PF2 | C_PM3] = ANTIC_cl[C_PF3 | C_PM3] = cword; + ANTIC_cl[C_PF2 | C_PM23] = ANTIC_cl[C_PF3 | C_PM23] = cword2; + } + else { + ANTIC_cl[C_PF2 | C_PM3] = cword | ANTIC_cl[C_PF2]; + ANTIC_cl[C_PF3 | C_PM35] = ANTIC_cl[C_PF2 | C_PM35] = ANTIC_cl[C_PM35] = ANTIC_cl[C_PF3 | C_PM3] = cword | ANTIC_cl[C_PF3]; + ANTIC_cl[C_PF2 | C_PM23] = cword2 | ANTIC_cl[C_PF2]; + ANTIC_cl[C_PF3 | C_PM235] = ANTIC_cl[C_PF2 | C_PM235] = ANTIC_cl[C_PM235] = ANTIC_cl[C_PF3 | C_PM23] = cword2 | ANTIC_cl[C_PF3]; + } + } + break; +#endif /* USE_COLOUR_TRANSLATION_TABLE */ + case GTIA_OFFSET_GRAFM: + GTIA_GRAFM = byte; + UPDATE_PM_CYCLE_EXACT + break; + +#ifdef NEW_CYCLE_EXACT +#define CYCLE_EXACT_GRAFP(n) x = ANTIC_XPOS * 2 - 3;\ + if (GTIA_HPOSP##n >= x) {\ + /* hpos right of x */\ + /* redraw */ \ + UPDATE_PM_CYCLE_EXACT\ + } +#else +#define CYCLE_EXACT_GRAFP(n) +#endif /* NEW_CYCLE_EXACT */ + +#define DO_GRAFP(n) case GTIA_OFFSET_GRAFP##n:\ + GTIA_GRAFP##n = byte;\ + CYCLE_EXACT_GRAFP(n);\ + break; + + DO_GRAFP(0) + DO_GRAFP(1) + DO_GRAFP(2) + DO_GRAFP(3) + + case GTIA_OFFSET_HITCLR: + GTIA_M0PL = GTIA_M1PL = GTIA_M2PL = GTIA_M3PL = 0; + GTIA_P0PL = GTIA_P1PL = GTIA_P2PL = GTIA_P3PL = 0; + PF0PM = PF1PM = PF2PM = PF3PM = 0; +#ifdef NEW_CYCLE_EXACT + hitclr_pos = ANTIC_XPOS * 2 - 37; + collision_curpos = hitclr_pos; +#endif + break; +/* TODO: cycle-exact missile HPOS, GRAF, SIZE */ +/* this is only an approximation */ + case GTIA_OFFSET_HPOSM0: + GTIA_HPOSM0 = byte; + hposm_ptr[0] = GTIA_pm_scanline + byte - 0x20; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_HPOSM1: + GTIA_HPOSM1 = byte; + hposm_ptr[1] = GTIA_pm_scanline + byte - 0x20; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_HPOSM2: + GTIA_HPOSM2 = byte; + hposm_ptr[2] = GTIA_pm_scanline + byte - 0x20; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_HPOSM3: + GTIA_HPOSM3 = byte; + hposm_ptr[3] = GTIA_pm_scanline + byte - 0x20; + UPDATE_PM_CYCLE_EXACT + break; + +#ifdef NEW_CYCLE_EXACT +#define CYCLE_EXACT_HPOSP(n) x = ANTIC_XPOS * 2 - 1;\ + if (GTIA_HPOSP##n < x && byte < x) {\ + /* case 1: both left of x */\ + /* do nothing */\ + }\ + else if (GTIA_HPOSP##n >= x && byte >= x ) {\ + /* case 2: both right of x */\ + /* redraw, clearing first */\ + UPDATE_PM_CYCLE_EXACT\ + }\ + else if (GTIA_HPOSP##n = x) {\ + /* case 3: new value is right, old value is left */\ + /* redraw without clearing first */\ + /* note: a hack, we can get away with it unless another change occurs */\ + /* before the original copy that wasn't erased due to changing */\ + /* GTIA_pm_dirty is drawn */\ + GTIA_pm_dirty = FALSE;\ + UPDATE_PM_CYCLE_EXACT\ + GTIA_pm_dirty = TRUE; /* can't trust that it was reset correctly */\ + }\ + else {\ + /* case 4: new value is left, old value is right */\ + /* remove old player and don't draw the new one */\ + UBYTE save_graf = GTIA_GRAFP##n;\ + GTIA_GRAFP##n = 0;\ + UPDATE_PM_CYCLE_EXACT\ + GTIA_GRAFP##n = save_graf;\ + } +#else +#define CYCLE_EXACT_HPOSP(n) +#endif /* NEW_CYCLE_EXACT */ +#define DO_HPOSP(n) case GTIA_OFFSET_HPOSP##n: \ + hposp_ptr[n] = GTIA_pm_scanline + byte - 0x20; \ + if (byte >= 0x22) { \ + if (byte > 0xbe) { \ + if (byte >= 0xde) \ + hposp_mask[n] = 0; \ + else \ + hposp_mask[n] = 0xffffffff >> (byte - 0xbe); \ + } \ + else \ + hposp_mask[n] = 0xffffffff; \ + } \ + else if (byte > 2) \ + hposp_mask[n] = 0xffffffff << (0x22 - byte); \ + else \ + hposp_mask[n] = 0; \ + CYCLE_EXACT_HPOSP(n)\ + GTIA_HPOSP##n = byte; \ + break; + + DO_HPOSP(0) + DO_HPOSP(1) + DO_HPOSP(2) + DO_HPOSP(3) + +/* TODO: cycle-exact size changes */ +/* this is only an approximation */ + case GTIA_OFFSET_SIZEM: + GTIA_SIZEM = byte; + global_sizem[0] = PM_Width[byte & 0x03]; + global_sizem[1] = PM_Width[(byte & 0x0c) >> 2]; + global_sizem[2] = PM_Width[(byte & 0x30) >> 4]; + global_sizem[3] = PM_Width[(byte & 0xc0) >> 6]; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_SIZEP0: + GTIA_SIZEP0 = byte; + grafp_ptr[0] = grafp_lookup[byte & 3]; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_SIZEP1: + GTIA_SIZEP1 = byte; + grafp_ptr[1] = grafp_lookup[byte & 3]; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_SIZEP2: + GTIA_SIZEP2 = byte; + grafp_ptr[2] = grafp_lookup[byte & 3]; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_SIZEP3: + GTIA_SIZEP3 = byte; + grafp_ptr[3] = grafp_lookup[byte & 3]; + UPDATE_PM_CYCLE_EXACT + break; + case GTIA_OFFSET_PRIOR: + ANTIC_SetPrior(byte); + GTIA_PRIOR = byte; + if (byte & 0x40) + setup_gtia9_11(); + break; + case GTIA_OFFSET_VDELAY: + GTIA_VDELAY = byte; + break; + case GTIA_OFFSET_GRACTL: + GTIA_GRACTL = byte; + ANTIC_missile_gra_enabled = (byte & 0x01); + ANTIC_player_gra_enabled = (byte & 0x02); + ANTIC_player_flickering = ((ANTIC_player_dma_enabled | ANTIC_player_gra_enabled) == 0x02); + ANTIC_missile_flickering = ((ANTIC_missile_dma_enabled | ANTIC_missile_gra_enabled) == 0x01); + if ((byte & 4) == 0) + GTIA_TRIG_latch[0] = GTIA_TRIG_latch[1] = GTIA_TRIG_latch[2] = GTIA_TRIG_latch[3] = 1; + break; + +#endif /* defined(BASIC) || defined(CURSES_BASIC) */ + } +} + +/* State ------------------------------------------------------------------- */ + +#ifndef BASIC + +void GTIA_StateSave(void) +{ + int next_console_value = 7; + + StateSav_SaveUBYTE(>IA_HPOSP0, 1); + StateSav_SaveUBYTE(>IA_HPOSP1, 1); + StateSav_SaveUBYTE(>IA_HPOSP2, 1); + StateSav_SaveUBYTE(>IA_HPOSP3, 1); + StateSav_SaveUBYTE(>IA_HPOSM0, 1); + StateSav_SaveUBYTE(>IA_HPOSM1, 1); + StateSav_SaveUBYTE(>IA_HPOSM2, 1); + StateSav_SaveUBYTE(>IA_HPOSM3, 1); + StateSav_SaveUBYTE(&PF0PM, 1); + StateSav_SaveUBYTE(&PF1PM, 1); + StateSav_SaveUBYTE(&PF2PM, 1); + StateSav_SaveUBYTE(&PF3PM, 1); + StateSav_SaveUBYTE(>IA_M0PL, 1); + StateSav_SaveUBYTE(>IA_M1PL, 1); + StateSav_SaveUBYTE(>IA_M2PL, 1); + StateSav_SaveUBYTE(>IA_M3PL, 1); + StateSav_SaveUBYTE(>IA_P0PL, 1); + StateSav_SaveUBYTE(>IA_P1PL, 1); + StateSav_SaveUBYTE(>IA_P2PL, 1); + StateSav_SaveUBYTE(>IA_P3PL, 1); + StateSav_SaveUBYTE(>IA_SIZEP0, 1); + StateSav_SaveUBYTE(>IA_SIZEP1, 1); + StateSav_SaveUBYTE(>IA_SIZEP2, 1); + StateSav_SaveUBYTE(>IA_SIZEP3, 1); + StateSav_SaveUBYTE(>IA_SIZEM, 1); + StateSav_SaveUBYTE(>IA_GRAFP0, 1); + StateSav_SaveUBYTE(>IA_GRAFP1, 1); + StateSav_SaveUBYTE(>IA_GRAFP2, 1); + StateSav_SaveUBYTE(>IA_GRAFP3, 1); + StateSav_SaveUBYTE(>IA_GRAFM, 1); + StateSav_SaveUBYTE(>IA_COLPM0, 1); + StateSav_SaveUBYTE(>IA_COLPM1, 1); + StateSav_SaveUBYTE(>IA_COLPM2, 1); + StateSav_SaveUBYTE(>IA_COLPM3, 1); + StateSav_SaveUBYTE(>IA_COLPF0, 1); + StateSav_SaveUBYTE(>IA_COLPF1, 1); + StateSav_SaveUBYTE(>IA_COLPF2, 1); + StateSav_SaveUBYTE(>IA_COLPF3, 1); + StateSav_SaveUBYTE(>IA_COLBK, 1); + StateSav_SaveUBYTE(>IA_PRIOR, 1); + StateSav_SaveUBYTE(>IA_VDELAY, 1); + StateSav_SaveUBYTE(>IA_GRACTL, 1); + + StateSav_SaveUBYTE(&consol_mask, 1); + StateSav_SaveINT(>IA_speaker, 1); + StateSav_SaveINT(&next_console_value, 1); + StateSav_SaveUBYTE(GTIA_TRIG_latch, 4); +} + +void GTIA_StateRead(UBYTE version) +{ + int next_console_value; /* ignored */ + + StateSav_ReadUBYTE(>IA_HPOSP0, 1); + StateSav_ReadUBYTE(>IA_HPOSP1, 1); + StateSav_ReadUBYTE(>IA_HPOSP2, 1); + StateSav_ReadUBYTE(>IA_HPOSP3, 1); + StateSav_ReadUBYTE(>IA_HPOSM0, 1); + StateSav_ReadUBYTE(>IA_HPOSM1, 1); + StateSav_ReadUBYTE(>IA_HPOSM2, 1); + StateSav_ReadUBYTE(>IA_HPOSM3, 1); + StateSav_ReadUBYTE(&PF0PM, 1); + StateSav_ReadUBYTE(&PF1PM, 1); + StateSav_ReadUBYTE(&PF2PM, 1); + StateSav_ReadUBYTE(&PF3PM, 1); + StateSav_ReadUBYTE(>IA_M0PL, 1); + StateSav_ReadUBYTE(>IA_M1PL, 1); + StateSav_ReadUBYTE(>IA_M2PL, 1); + StateSav_ReadUBYTE(>IA_M3PL, 1); + StateSav_ReadUBYTE(>IA_P0PL, 1); + StateSav_ReadUBYTE(>IA_P1PL, 1); + StateSav_ReadUBYTE(>IA_P2PL, 1); + StateSav_ReadUBYTE(>IA_P3PL, 1); + StateSav_ReadUBYTE(>IA_SIZEP0, 1); + StateSav_ReadUBYTE(>IA_SIZEP1, 1); + StateSav_ReadUBYTE(>IA_SIZEP2, 1); + StateSav_ReadUBYTE(>IA_SIZEP3, 1); + StateSav_ReadUBYTE(>IA_SIZEM, 1); + StateSav_ReadUBYTE(>IA_GRAFP0, 1); + StateSav_ReadUBYTE(>IA_GRAFP1, 1); + StateSav_ReadUBYTE(>IA_GRAFP2, 1); + StateSav_ReadUBYTE(>IA_GRAFP3, 1); + StateSav_ReadUBYTE(>IA_GRAFM, 1); + StateSav_ReadUBYTE(>IA_COLPM0, 1); + StateSav_ReadUBYTE(>IA_COLPM1, 1); + StateSav_ReadUBYTE(>IA_COLPM2, 1); + StateSav_ReadUBYTE(>IA_COLPM3, 1); + StateSav_ReadUBYTE(>IA_COLPF0, 1); + StateSav_ReadUBYTE(>IA_COLPF1, 1); + StateSav_ReadUBYTE(>IA_COLPF2, 1); + StateSav_ReadUBYTE(>IA_COLPF3, 1); + StateSav_ReadUBYTE(>IA_COLBK, 1); + StateSav_ReadUBYTE(>IA_PRIOR, 1); + StateSav_ReadUBYTE(>IA_VDELAY, 1); + StateSav_ReadUBYTE(>IA_GRACTL, 1); + + StateSav_ReadUBYTE(&consol_mask, 1); + StateSav_ReadINT(>IA_speaker, 1); + StateSav_ReadINT(&next_console_value, 1); + if (version >= 7) + StateSav_ReadUBYTE(GTIA_TRIG_latch, 4); + + GTIA_PutByte(GTIA_OFFSET_HPOSP0, GTIA_HPOSP0); + GTIA_PutByte(GTIA_OFFSET_HPOSP1, GTIA_HPOSP1); + GTIA_PutByte(GTIA_OFFSET_HPOSP2, GTIA_HPOSP2); + GTIA_PutByte(GTIA_OFFSET_HPOSP3, GTIA_HPOSP3); + GTIA_PutByte(GTIA_OFFSET_HPOSM0, GTIA_HPOSM0); + GTIA_PutByte(GTIA_OFFSET_HPOSM1, GTIA_HPOSM1); + GTIA_PutByte(GTIA_OFFSET_HPOSM2, GTIA_HPOSM2); + GTIA_PutByte(GTIA_OFFSET_HPOSM3, GTIA_HPOSM3); + GTIA_PutByte(GTIA_OFFSET_SIZEP0, GTIA_SIZEP0); + GTIA_PutByte(GTIA_OFFSET_SIZEP1, GTIA_SIZEP1); + GTIA_PutByte(GTIA_OFFSET_SIZEP2, GTIA_SIZEP2); + GTIA_PutByte(GTIA_OFFSET_SIZEP3, GTIA_SIZEP3); + GTIA_PutByte(GTIA_OFFSET_SIZEM, GTIA_SIZEM); + GTIA_PutByte(GTIA_OFFSET_GRAFP0, GTIA_GRAFP0); + GTIA_PutByte(GTIA_OFFSET_GRAFP1, GTIA_GRAFP1); + GTIA_PutByte(GTIA_OFFSET_GRAFP2, GTIA_GRAFP2); + GTIA_PutByte(GTIA_OFFSET_GRAFP3, GTIA_GRAFP3); + GTIA_PutByte(GTIA_OFFSET_GRAFM, GTIA_GRAFM); + GTIA_PutByte(GTIA_OFFSET_COLPM0, GTIA_COLPM0); + GTIA_PutByte(GTIA_OFFSET_COLPM1, GTIA_COLPM1); + GTIA_PutByte(GTIA_OFFSET_COLPM2, GTIA_COLPM2); + GTIA_PutByte(GTIA_OFFSET_COLPM3, GTIA_COLPM3); + GTIA_PutByte(GTIA_OFFSET_COLPF0, GTIA_COLPF0); + GTIA_PutByte(GTIA_OFFSET_COLPF1, GTIA_COLPF1); + GTIA_PutByte(GTIA_OFFSET_COLPF2, GTIA_COLPF2); + GTIA_PutByte(GTIA_OFFSET_COLPF3, GTIA_COLPF3); + GTIA_PutByte(GTIA_OFFSET_COLBK, GTIA_COLBK); + GTIA_PutByte(GTIA_OFFSET_PRIOR, GTIA_PRIOR); + GTIA_PutByte(GTIA_OFFSET_GRACTL, GTIA_GRACTL); +} + +#endif /* BASIC */ diff --git a/MCUME_pico/pico800/gtia.h b/MCUME_pico/pico800/gtia.h new file mode 100644 index 0000000..865c4ae --- /dev/null +++ b/MCUME_pico/pico800/gtia.h @@ -0,0 +1,136 @@ +#ifndef GTIA_H_ +#define GTIA_H_ + + +#define GTIA_OFFSET_HPOSP0 0x00 +#define GTIA_OFFSET_M0PF 0x00 +#define GTIA_OFFSET_HPOSP1 0x01 +#define GTIA_OFFSET_M1PF 0x01 +#define GTIA_OFFSET_HPOSP2 0x02 +#define GTIA_OFFSET_M2PF 0x02 +#define GTIA_OFFSET_HPOSP3 0x03 +#define GTIA_OFFSET_M3PF 0x03 +#define GTIA_OFFSET_HPOSM0 0x04 +#define GTIA_OFFSET_P0PF 0x04 +#define GTIA_OFFSET_HPOSM1 0x05 +#define GTIA_OFFSET_P1PF 0x05 +#define GTIA_OFFSET_HPOSM2 0x06 +#define GTIA_OFFSET_P2PF 0x06 +#define GTIA_OFFSET_HPOSM3 0x07 +#define GTIA_OFFSET_P3PF 0x07 +#define GTIA_OFFSET_SIZEP0 0x08 +#define GTIA_OFFSET_M0PL 0x08 +#define GTIA_OFFSET_SIZEP1 0x09 +#define GTIA_OFFSET_M1PL 0x09 +#define GTIA_OFFSET_SIZEP2 0x0a +#define GTIA_OFFSET_M2PL 0x0a +#define GTIA_OFFSET_SIZEP3 0x0b +#define GTIA_OFFSET_M3PL 0x0b +#define GTIA_OFFSET_SIZEM 0x0c +#define GTIA_OFFSET_P0PL 0x0c +#define GTIA_OFFSET_GRAFP0 0x0d +#define GTIA_OFFSET_P1PL 0x0d +#define GTIA_OFFSET_GRAFP1 0x0e +#define GTIA_OFFSET_P2PL 0x0e +#define GTIA_OFFSET_GRAFP2 0x0f +#define GTIA_OFFSET_P3PL 0x0f +#define GTIA_OFFSET_GRAFP3 0x10 +#define GTIA_OFFSET_TRIG0 0x10 +#define GTIA_OFFSET_GRAFM 0x11 +#define GTIA_OFFSET_TRIG1 0x11 +#define GTIA_OFFSET_COLPM0 0x12 +#define GTIA_OFFSET_TRIG2 0x12 +#define GTIA_OFFSET_COLPM1 0x13 +#define GTIA_OFFSET_TRIG3 0x13 +#define GTIA_OFFSET_COLPM2 0x14 +#define GTIA_OFFSET_PAL 0x14 +#define GTIA_OFFSET_COLPM3 0x15 +#define GTIA_OFFSET_COLPF0 0x16 +#define GTIA_OFFSET_COLPF1 0x17 +#define GTIA_OFFSET_COLPF2 0x18 +#define GTIA_OFFSET_COLPF3 0x19 +#define GTIA_OFFSET_COLBK 0x1a +#define GTIA_OFFSET_PRIOR 0x1b +#define GTIA_OFFSET_VDELAY 0x1c +#define GTIA_OFFSET_GRACTL 0x1d +#define GTIA_OFFSET_HITCLR 0x1e +#define GTIA_OFFSET_CONSOL 0x1f + +extern UBYTE GTIA_GRAFM; +extern UBYTE GTIA_GRAFP0; +extern UBYTE GTIA_GRAFP1; +extern UBYTE GTIA_GRAFP2; +extern UBYTE GTIA_GRAFP3; +extern UBYTE GTIA_HPOSP0; +extern UBYTE GTIA_HPOSP1; +extern UBYTE GTIA_HPOSP2; +extern UBYTE GTIA_HPOSP3; +extern UBYTE GTIA_HPOSM0; +extern UBYTE GTIA_HPOSM1; +extern UBYTE GTIA_HPOSM2; +extern UBYTE GTIA_HPOSM3; +extern UBYTE GTIA_SIZEP0; +extern UBYTE GTIA_SIZEP1; +extern UBYTE GTIA_SIZEP2; +extern UBYTE GTIA_SIZEP3; +extern UBYTE GTIA_SIZEM; +extern UBYTE GTIA_COLPM0; +extern UBYTE GTIA_COLPM1; +extern UBYTE GTIA_COLPM2; +extern UBYTE GTIA_COLPM3; +extern UBYTE GTIA_COLPF0; +extern UBYTE GTIA_COLPF1; +extern UBYTE GTIA_COLPF2; +extern UBYTE GTIA_COLPF3; +extern UBYTE GTIA_COLBK; +extern UBYTE GTIA_GRACTL; +extern UBYTE GTIA_M0PL; +extern UBYTE GTIA_M1PL; +extern UBYTE GTIA_M2PL; +extern UBYTE GTIA_M3PL; +extern UBYTE GTIA_P0PL; +extern UBYTE GTIA_P1PL; +extern UBYTE GTIA_P2PL; +extern UBYTE GTIA_P3PL; +extern UBYTE GTIA_PRIOR; +extern UBYTE GTIA_VDELAY; + +#ifdef USE_COLOUR_TRANSLATION_TABLE + +extern UWORD GTIA_colour_translation_table[256]; +#define GTIA_COLOUR_BLACK GTIA_colour_translation_table[0] +#define GTIA_COLOUR_TO_WORD(dest,src) dest = GTIA_colour_translation_table[src]; + +#else + +#define GTIA_COLOUR_BLACK 0 +#define GTIA_COLOUR_TO_WORD(dest,src) dest = (((UWORD) (src)) << 8) | (src); + +#endif /* USE_COLOUR_TRANSLATION_TABLE */ + +extern UBYTE GTIA_pm_scanline[ATARI_WIDTH / 2 + 8]; /* there's a byte for every *pair* of pixels */ +extern int GTIA_pm_dirty; + +extern UBYTE GTIA_collisions_mask_missile_playfield; +extern UBYTE GTIA_collisions_mask_player_playfield; +extern UBYTE GTIA_collisions_mask_missile_player; +extern UBYTE GTIA_collisions_mask_player_player; + +extern UBYTE GTIA_TRIG[4]; +extern UBYTE GTIA_TRIG_latch[4]; + +extern int GTIA_consol_override; +extern int GTIA_speaker; + +int GTIA_Initialise(void); +void GTIA_Frame(void); +void GTIA_NewPmScanline(void); +UBYTE GTIA_GetByte(UWORD addr, int no_side_effects); +void GTIA_PutByte(UWORD addr, UBYTE byte); +void GTIA_StateSave(void); +void GTIA_StateRead(UBYTE version); + +#ifdef NEW_CYCLE_EXACT +void GTIA_UpdatePmplColls(void); +#endif +#endif /* GTIA_H_ */ diff --git a/MCUME_pico/pico800/iopins.h b/MCUME_pico/pico800/iopins.h new file mode 100644 index 0000000..a636576 --- /dev/null +++ b/MCUME_pico/pico800/iopins.h @@ -0,0 +1,42 @@ +#ifndef IOPINS_H +#define IOPINS_H + +#include "platform_config.h" + + +// VGA (see in code!!!) +/* +2-9 RRRGGGBB +10-11 VSYNC and HSYNC +*/ + +// SD (see SPI0 in code!!!) +/* +#define SD_SCLK 18 +#define SD_MOSI 19 +#define SD_MISO 16 +#define SD_CS 17 +*/ + +// I2C keyboard (not used) +/* +#define I2C_SCL_IO 15? +#define I2C_SDA_IO 14? +*/ + +// Analog joystick (primary) for JOY2 and 3 extra buttons +#define PIN_JOY2_A1X 26 +#define PIN_JOY2_A2Y 27 +#define PIN_JOY2_BTN 22 +#define PIN_KEY_USER1 20 +#define PIN_KEY_USER2 21 + +// Second joystick +//#define PIN_JOY1_BTN 2 +//#define PIN_JOY1_1 14 // UP +//#define PIN_JOY1_2 7 // DOWN +//#define PIN_JOY1_3 6 // RIGHT +//#define PIN_JOY1_4 5 // LEFT + + +#endif diff --git a/MCUME_pico/pico800/keyboard_osd.h b/MCUME_pico/pico800/keyboard_osd.h new file mode 100644 index 0000000..062eb4e --- /dev/null +++ b/MCUME_pico/pico800/keyboard_osd.h @@ -0,0 +1,20 @@ + +#ifndef keyboard_osd_h_ +#define keyboard_osd_h_ + +extern bool virtualkeyboardIsActive(void); +extern void drawVirtualkeyboard(void); +extern void toggleVirtualkeyboard(bool keepOn); +extern void handleVirtualkeyboard(void); + +extern bool callibrationActive(void); +extern int handleCallibration(uint16_t bClick); + +extern bool menuActive(void); +extern char * menuSelection(void); +extern void toggleMenu(bool on); +extern int handleMenu(uint16_t bClick); + + +#endif + diff --git a/MCUME_pico/pico800/memory.h b/MCUME_pico/pico800/memory.h new file mode 100644 index 0000000..1945156 --- /dev/null +++ b/MCUME_pico/pico800/memory.h @@ -0,0 +1,18 @@ +#ifndef __MEMORY__ +#define __MEMORY__ + +extern unsigned char * memory; + +#define MEMORY_GetByte(addr) (Atari_GetByte(addr)) +#define MEMORY_PutByte(addr,byte) Atari_PutByte(addr,byte) + +#define MEMORY_dGetByte(addr) (Atari_GetByte(addr)) +#define MEMORY_dPutByte(addr,byte) Atari_PutByte(addr,byte) +#define MEMORY_dGetWord(x) (Atari_GetByte(x) | (Atari_GetByte((x) + 1) << 8)) +#define MEMORY_dPutWord(x,y) (Atari_PutByte(x,(UBYTE) (y)) , Atari_PutByte(x + 1,(UBYTE) ((y) >> 8)) +/* faster versions of dGetWord and dPutWord for even addresses */ +/* TODO: guarantee that memory is UWORD-aligned and use UWORD access */ +#define MEMORY_dGetWordAligned(x) MEMORY_dGetWord(x) +#define MEMORY_dPutWordAligned(x,y) MEMORY_dPutWord(x,y) + +#endif diff --git a/MCUME_pico/pico800/noise.h b/MCUME_pico/pico800/noise.h new file mode 100644 index 0000000..c93ac89 --- /dev/null +++ b/MCUME_pico/pico800/noise.h @@ -0,0 +1,1059 @@ +const UBYTE POKEY_poly9_lookup[] = { +255,127,63,31,15,135,195,225,240,120,188,222,239,119,59,29, +14,135,67,161,208,104,52,154,205,102,179,217,108,182,219,237, +246,123,189,94,47,23,11,133,194,225,112,56,156,206,103,51, +25,12,134,67,33,144,72,36,18,137,68,162,81,168,212,234, +117,186,93,174,215,235,245,122,61,158,79,39,147,73,164,210, +233,116,58,157,206,231,115,57,28,14,7,3,129,192,224,112, +184,220,238,119,187,93,46,151,203,229,242,121,188,94,175,87, +43,149,74,165,82,41,20,10,5,2,129,64,160,80,168,84, +170,85,170,213,234,245,250,125,190,95,175,215,107,181,90,45, +22,11,5,130,193,96,176,216,236,118,187,221,110,183,219,109, +182,91,173,214,107,53,26,13,6,131,65,160,208,232,116,186, +221,238,247,251,125,62,31,143,199,227,241,120,60,158,207,103, +179,89,44,150,203,101,178,89,172,214,235,117,58,29,142,199, +99,177,88,44,22,139,69,162,209,232,244,250,253,254,127,191, +95,47,151,75,165,210,105,52,26,141,70,163,81,40,148,202, +101,50,25,140,198,99,49,24,12,6,3,1,128,192,96,48, +152,204,102,51,153,76,166,83,169,212,106,53,154,77,38,147, +201,228,242,249,252,126,191,223,111,183,91,45,150,75,37,146, +73,36,146,201,100,178,217,236,246,251,253,126,63,159,79,167, +211,105,180,90,173,86,43,21,10,133,66,161,80,40,20,138, +69,34,145,200,228,114,185,220,110,55,155,77,166,211,233,244, +122,189,222,111,55,27,13,134,195,97,176,88,172,86,171,85, +42,149,202,229,114,57,156,78,39,19,9,132,194,97,48,24, +140,70,35,17,8,132,66,33,16,8,4,2,1,0,128,64, +32,16,136,68,34,17,136,196,98,49,152,76,38,19,137,196, +226,113,184,92,174,87,171,213,106,181,218,109,54,27,141,198, +227,113,56,28,142,71,35,145,72,164,82,169,84,42,21,138, +197,98,177,216,108,54,155,205,230,243,249,124,62,159,207,231, +243,121,60,30,143,71,163,209,104,180,218,237,118,59,157,78, +167,83,41,148,74,37,18,9,4,130,65,32,144,200,100,50, +153,204,230,115,185,92,46,23,139,197,226,241,248,124,190,223, +239,247,123,61,30,15,7,131,193,224,240,248,252,254,255,}; +const UBYTE POKEY_poly17_lookup[] = { +255,1,224,3,254,231,131,241,31,28,254,217,99,142,33,4, +1,24,130,17,28,226,25,90,146,145,61,250,216,123,12,48, +24,227,1,216,131,141,223,227,130,233,157,13,226,59,122,212, +179,149,60,226,90,106,16,210,1,185,147,73,190,119,7,152, +142,217,133,238,227,227,249,89,108,118,190,11,199,103,242,233, +123,109,32,220,130,149,93,242,158,11,132,87,112,170,71,46, +107,238,48,210,66,137,17,10,130,52,76,170,60,158,154,149, +108,226,255,58,80,118,197,187,54,28,174,217,198,222,97,160, +197,26,39,68,12,76,216,28,125,232,125,14,28,220,249,37, +172,137,194,59,57,228,49,214,0,161,17,88,162,149,30,194, +28,72,184,20,59,152,245,105,116,149,191,211,68,234,45,10, +249,132,189,209,96,174,39,38,45,158,184,181,42,192,87,252, +106,87,163,155,252,254,22,146,12,237,201,68,223,125,99,204, +0,148,65,49,151,17,55,82,77,113,142,5,68,75,60,82, +91,17,163,19,124,230,159,50,22,6,77,220,94,85,232,47, +46,189,142,145,5,122,171,67,108,67,238,98,242,227,219,121, +42,84,22,205,253,70,148,201,177,143,152,151,72,166,245,22, +132,108,192,223,124,114,222,3,129,23,122,142,19,36,102,42, +106,246,178,195,94,107,8,80,16,165,113,80,228,229,150,165, +116,1,254,226,211,251,26,88,180,245,51,212,36,229,27,116, +118,143,27,166,86,38,200,206,124,81,238,71,162,171,254,189, +34,80,71,213,218,7,200,143,108,215,175,83,101,242,236,43, +103,37,152,200,185,13,168,155,234,158,59,132,52,64,106,36, +146,106,141,3,34,39,54,44,175,170,244,31,22,94,205,105, +6,181,92,161,172,136,211,41,58,241,103,157,25,163,2,108, +197,142,102,117,155,93,239,78,48,153,243,11,88,151,197,119, +247,152,97,40,69,2,174,228,22,167,92,132,252,192,246,237, +50,245,54,133,62,226,94,42,24,214,81,177,182,9,246,115, +211,208,171,28,157,232,179,239,156,17,32,34,98,102,162,234, +238,59,99,68,128,140,200,145,141,250,179,202,204,89,5,230, +106,98,243,242,201,122,63,2,93,212,255,85,160,174,170,247, +47,16,93,241,175,29,133,106,162,243,126,8,122,176,243,91, +88,50,149,55,83,92,99,141,16,18,0,37,80,72,37,196, +8,4,81,24,39,65,92,70,221,88,55,196,45,84,25,61, +227,73,88,23,197,127,118,152,107,137,65,10,39,100,12,14, +248,156,63,192,124,76,62,124,191,15,133,79,242,187,91,204, +114,180,162,67,127,115,201,113,142,4,84,73,61,70,25,24, +179,1,125,211,205,123,39,128,76,200,29,76,250,60,59,202, +213,200,38,253,159,5,102,107,122,112,243,215,153,50,26,198, +85,208,174,77,135,239,246,177,242,72,106,53,130,73,156,87, +65,186,38,31,191,207,133,195,51,187,212,61,116,56,111,131, +232,142,63,229,44,4,27,184,183,11,212,87,213,250,7,138, +175,236,149,135,82,39,208,76,109,77,12,94,248,57,111,128, +216,136,60,217,234,31,43,142,180,84,34,140,134,112,5,182, +106,199,163,178,109,190,61,167,8,196,81,148,230,65,211,183, +219,212,250,4,186,169,239,169,65,73,23,230,79,50,187,215, +13,114,59,83,69,243,190,9,230,115,242,192,235,61,9,232, +146,254,204,50,181,54,1,126,226,219,122,26,82,21,241,59, +93,164,255,178,208,110,76,27,44,247,42,65,71,246,234,67, +235,51,232,228,158,39,68,13,92,218,29,105,170,116,30,14, +221,204,119,229,184,68,58,45,167,40,196,19,180,102,3,251, +182,153,246,90,66,144,128,41,153,193,43,63,165,45,144,89, +185,38,25,223,195,131,187,191,140,180,81,114,134,131,52,79, +154,58,157,166,83,119,210,201,57,15,128,30,232,188,30,146, +28,237,232,84,159,92,247,204,33,133,17,18,2,5,84,74, +13,64,26,36,117,26,77,229,206,36,209,91,31,66,31,112, +63,23,13,255,234,81,203,22,250,140,59,161,100,8,79,224, +154,110,220,27,5,102,106,106,114,242,195,219,59,10,212,84, +229,252,4,182,105,247,165,177,81,120,38,151,62,199,14,98, +61,18,89,181,231,17,209,50,143,150,118,68,170,44,158,187, +133,44,195,107,58,113,103,149,152,163,8,205,193,134,239,245, +129,244,75,86,243,153,121,170,84,30,76,253,76,53,205,185, +6,24,141,225,2,237,213,132,230,97,211,245,251,84,184,44, +187,235,205,9,7,99,62,32,127,178,217,255,78,16,153,177, +43,216,213,237,118,181,186,193,110,111,43,104,212,150,197,116, +199,158,98,20,131,25,158,210,21,248,170,95,175,74,244,209, +247,222,0,176,1,123,179,193,125,95,12,123,168,113,74,68, +208,140,109,193,205,94,119,200,105,12,21,72,171,36,28,139, +137,142,251,165,168,193,75,63,99,77,16,158,193,37,223,185, +35,72,197,196,198,229,209,213,254,70,146,169,189,137,224,27, +127,198,153,16,58,128,119,120,104,119,166,137,214,123,16,240, +33,255,177,225,120,77,38,254,174,19,103,86,168,41,202,241, +136,108,217,79,79,107,42,112,86,135,217,150,222,196,240,133, +190,227,70,169,25,200,178,188,174,146,119,92,40,61,130,89, +156,118,81,250,7,139,191,238,148,147,16,46,192,94,108,120, +94,23,201,191,110,148,155,145,46,202,255,104,112,215,151,211, +22,202,140,88,145,164,107,243,225,249,93,44,126,186,91,207, +66,178,161,127,185,104,249,71,141,91,162,146,110,204,27,36, +118,42,75,230,242,226,202,107,41,65,64,134,228,68,135,253, +214,148,224,32,207,179,162,76,143,109,198,189,80,112,164,167, +50,101,54,172,175,162,117,31,28,255,201,97,143,53,70,8, +8,144,16,41,176,80,107,20,144,41,185,193,105,31,37,111, +184,88,251,4,185,153,233,170,125,143,12,214,121,49,228,33, +214,33,177,81,121,54,149,63,211,76,107,45,0,88,128,181, +88,224,180,142,130,53,93,184,63,139,204,222,117,224,236,14, +55,109,189,12,177,9,249,131,205,223,103,194,233,24,93,224, +191,62,148,62,193,110,110,59,106,213,130,135,125,215,140,99, +33,209,80,175,84,20,236,233,70,189,89,225,166,172,135,35, +55,53,61,185,233,233,77,13,79,234,58,122,214,147,145,62, +202,222,120,48,246,3,211,55,219,220,123,4,176,8,235,161, +200,201,13,79,235,42,120,215,135,211,55,218,204,121,5,164, +74,226,177,218,200,56,29,162,27,254,214,147,144,46,200,223, +108,114,255,19,193,54,238,142,50,53,54,9,255,226,209,219, +30,90,156,113,33,244,0,231,113,208,228,237,23,165,126,160, +250,234,90,123,0,241,16,237,240,212,174,68,23,253,255,5, +160,11,250,183,139,212,95,84,250,13,43,171,228,28,7,72, +142,116,84,174,77,134,255,244,176,230,10,99,37,144,72,169, +5,8,139,160,30,171,140,156,209,32,174,163,102,45,27,232, +183,174,132,23,113,62,5,47,250,252,59,70,20,200,169,12, +153,137,171,171,237,141,5,67,59,50,85,55,223,157,99,2, +225,20,140,232,144,223,216,50,156,166,81,87,214,203,17,139, +146,62,204,190,116,54,142,143,228,87,183,218,197,232,7,175, +255,164,176,67,90,35,129,84,74,12,80,24,37,97,88,68, +245,220,37,228,9,86,115,153,113,43,84,20,237,249,68,188, +77,163,175,188,149,34,2,103,116,136,111,232,89,78,86,248, +41,111,161,200,200,29,77,234,62,58,222,151,193,54,239,158, +48,52,34,75,246,242,195,218,43,8,213,64,167,245,20,164, +104,194,247,248,96,254,39,131,125,222,28,113,40,101,2,236, +196,150,229,116,133,190,226,86,171,24,220,240,181,190,128,118, +105,122,116,179,223,157,98,18,227,21,152,170,153,207,202,51, +169,244,24,102,80,202,5,200,139,44,223,171,3,109,215,172, +99,99,241,208,237,124,21,174,203,230,251,115,200,96,156,7, +65,31,118,95,27,11,135,102,102,171,122,252,50,215,22,195, +28,74,152,16,57,176,113,123,84,177,189,185,224,120,79,6, +250,172,59,227,68,136,13,200,155,44,254,187,67,76,67,172, +66,114,161,243,120,104,118,182,139,215,111,82,249,49,237,176, +212,42,4,23,120,175,7,36,79,186,58,223,134,211,53,250, +200,123,45,32,88,194,149,216,162,156,143,192,23,253,254,21, +162,10,238,245,130,196,77,85,207,95,98,154,98,29,19,11, +151,102,71,187,58,221,166,215,55,210,76,105,13,4,90,168, +49,74,192,144,140,232,145,207,218,51,136,228,88,71,196,202, +36,217,219,15,74,191,96,117,151,157,247,66,192,129,156,203, +128,155,185,174,152,215,72,34,181,22,1,60,194,91,56,50, +83,87,211,155,27,142,214,116,224,238,46,51,111,149,136,163, +41,221,129,167,123,245,160,229,27,117,102,141,26,178,20,47, +216,220,125,100,188,14,147,45,255,169,97,73,85,198,207,112, +147,214,79,80,155,21,111,218,120,57,102,17,218,131,137,159, +235,134,185,149,40,162,115,126,0,251,176,249,250,92,58,28, +183,73,245,199,149,211,18,138,132,92,193,172,78,179,169,253, +137,100,91,127,67,201,18,190,196,55,245,60,37,42,232,214, +190,64,118,229,187,116,60,46,155,238,223,35,130,101,92,13, +109,202,124,88,126,85,171,31,172,254,178,210,78,72,25,4, +115,56,97,99,244,128,231,121,81,228,231,182,161,118,41,122, +240,243,223,24,50,16,103,81,216,39,205,157,70,82,169,49, +72,224,148,142,192,21,221,250,23,138,142,252,213,166,198,39, +241,93,61,110,153,74,155,33,47,177,76,169,13,136,155,168, +190,187,198,28,65,40,6,50,44,167,42,228,23,182,78,135, +233,150,189,244,48,230,2,226,37,154,233,173,13,129,11,186, +183,15,148,95,209,170,15,175,239,164,145,83,26,2,21,84, +107,29,0,59,176,117,59,92,181,237,177,197,56,7,2,46, +228,30,38,92,142,93,196,254,100,178,239,159,33,38,33,94, +160,185,218,216,56,60,178,91,223,66,147,177,63,152,252,249, +102,156,11,129,7,122,175,3,100,71,190,106,215,163,147,125, +254,28,51,8,229,64,196,197,212,199,212,195,148,203,144,155, +152,190,216,246,220,34,148,7,81,31,87,79,91,42,19,102, +71,186,42,223,167,195,117,219,92,123,12,49,8,225,0,204, +193,132,207,241,131,220,207,68,211,189,123,192,240,140,46,241, +79,29,75,139,34,62,167,15,180,95,147,138,143,237,199,165, +211,113,186,68,63,125,173,45,128,89,152,54,89,254,87,131, +154,174,220,151,196,102,229,155,116,126,14,27,172,247,34,192, +71,252,75,71,227,186,104,254,55,131,92,206,92,80,188,101, +35,253,148,181,112,96,230,166,162,103,63,57,237,161,196,9, +21,67,27,50,23,23,95,223,75,3,163,54,44,174,186,246, +30,2,28,196,121,20,180,105,243,229,185,85,40,46,178,126, +143,10,182,117,55,156,173,225,65,221,87,199,218,34,152,199, +73,19,167,87,52,234,203,106,59,99,69,144,142,201,133,207, +243,163,216,205,108,87,175,91,228,242,230,138,99,45,17,72, +163,164,12,131,41,158,177,37,56,201,227,174,41,199,33,146, +97,61,21,41,187,224,125,31,12,255,232,113,207,20,210,8, +41,129,64,10,37,68,8,12,208,24,45,224,88,78,84,216, +45,109,137,76,218,61,105,232,84,158,76,245,205,53,199,24, +2,16,4,97,24,68,113,156,37,97,89,84,247,221,49,166, +0,70,97,152,68,121,29,37,107,248,80,255,84,177,188,169, +226,121,91,68,243,188,41,226,113,218,68,249,29,45,234,248, +90,94,80,185,53,41,248,208,255,92,48,188,163,67,125,83, +205,115,166,128,70,105,25,68,115,188,33,99,113,208,229,253, +21,164,106,226,243,250,72,122,53,163,89,220,118,213,186,7, +14,239,236,16,215,80,163,148,12,224,25,94,210,153,57,170, +208,94,76,120,28,55,73,253,70,149,217,179,142,140,213,65, +182,231,23,177,62,137,238,250,115,202,64,152,5,105,155,100, +127,63,9,237,194,244,201,118,255,26,81,36,231,58,96,118, +166,139,246,127,18,216,165,237,145,197,122,39,130,108,204,31, +100,126,46,27,238,215,162,130,111,253,9,101,67,252,66,215, +241,179,220,172,116,19,222,199,193,147,191,222,148,240,32,238, +163,226,109,27,109,231,172,0,83,49,179,81,125,118,157,59, +131,68,78,109,72,92,84,253,125,37,172,136,210,57,56,240, +115,223,16,179,16,109,240,220,47,68,29,92,251,13,41,139, +224,30,47,204,156,84,112,172,39,34,109,150,188,229,34,229, +23,180,110,131,235,190,57,230,16,194,0,136,129,8,139,161, +14,169,141,136,147,41,190,177,103,24,73,161,134,40,133,3, +50,39,23,60,239,139,96,31,55,79,157,74,147,161,63,185, +236,185,71,8,11,160,22,42,140,150,112,36,166,42,230,55, +178,76,175,109,132,157,208,50,140,166,112,71,150,234,133,139, +179,47,156,157,225,34,237,151,164,102,35,251,244,185,118,24, +106,145,194,11,57,135,1,22,99,29,16,59,145,101,123,125, +33,237,144,212,104,36,151,58,135,6,102,109,26,124,245,175, +21,5,122,170,83,110,66,250,32,251,243,201,120,31,6,95, +252,123,71,128,138,168,157,139,130,63,253,172,53,3,88,134, +213,84,230,204,2,181,85,49,190,129,103,123,121,97,229,148, +132,96,1,215,114,131,210,46,72,223,100,243,255,25,96,50, +230,7,178,47,159,173,231,33,209,81,191,86,21,248,171,79, +173,75,224,147,254,206,18,177,52,41,250,240,251,94,24,56, +177,99,89,81,167,215,52,226,74,106,49,194,65,152,7,73, +159,102,87,187,27,205,230,246,163,210,109,120,93,39,207,188, +82,82,128,161,24,201,160,158,171,132,29,209,42,15,167,110, +164,155,242,30,10,156,212,113,180,164,35,115,117,177,253,185, +100,56,79,131,170,174,191,167,4,5,89,154,23,77,254,126, +19,202,135,232,135,175,247,37,176,73,251,39,137,221,202,22, +249,188,61,162,88,206,84,208,172,109,131,237,222,53,224,104, +78,55,232,237,14,53,77,185,14,153,141,235,163,233,221,13, +102,123,122,81,227,151,184,166,26,231,68,128,141,216,147,140, +238,241,195,220,75,4,211,56,43,194,116,200,110,124,27,79, +199,234,34,251,247,137,112,27,86,87,217,59,15,132,94,224, +184,78,154,57,173,160,80,75,20,210,9,57,131,65,30,103, +77,24,30,209,45,127,169,105,200,85,204,110,116,155,95,207, +74,50,177,119,25,120,179,199,29,83,10,3,36,70,42,40, +214,50,129,118,106,74,114,176,227,91,121,34,213,22,199,92, +66,156,64,49,149,49,51,80,101,245,156,37,96,73,86,246, +201,115,175,16,84,96,173,22,48,44,163,106,236,19,230,70, +162,169,222,185,32,120,195,199,250,35,202,229,200,69,205,95, +102,218,106,25,67,3,178,38,15,191,238,149,131,18,47,212, +28,101,104,76,22,252,237,39,165,29,144,58,137,230,122,99, +194,224,136,79,233,11,108,215,174,67,103,243,248,105,110,53, +138,201,140,95,225,170,108,159,47,199,45,82,121,49,229,49, +212,32,165,19,112,38,135,62,230,30,34,28,134,89,148,246, +65,242,167,155,245,110,4,155,184,191,138,212,93,116,254,15, +3,47,246,60,35,74,228,208,198,204,65,133,215,114,130,194, +44,73,203,38,250,239,11,97,7,180,78,131,169,158,185,164, +56,195,66,170,33,78,161,136,200,153,13,234,187,106,220,19, +133,118,98,202,98,184,67,75,51,162,69,30,111,205,8,22, +113,61,53,41,249,192,253,93,36,254,170,83,111,82,248,33, +239,177,192,104,13,7,106,174,50,118,6,139,188,222,146,144, +44,232,219,110,90,123,1,225,18,236,228,150,167,84,5,252, +202,87,233,58,124,182,159,151,70,70,233,24,92,240,189,63, +128,124,200,126,124,58,95,135,203,182,251,214,152,32,56,195, +67,186,35,79,181,202,193,137,31,235,142,56,149,34,3,119, +118,137,123,170,80,94,68,249,28,61,232,249,78,28,89,169, +39,40,205,130,182,109,182,189,183,0,100,65,222,102,209,219, +31,74,158,112,53,182,9,247,99,209,209,191,94,148,248,161, +238,169,67,105,19,228,103,182,169,247,41,112,81,247,215,145, +178,10,206,245,192,228,205,23,231,94,32,184,194,91,57,34, +81,86,199,217,18,158,196,117,213,188,103,2,233,148,156,224, +48,207,146,178,12,174,249,198,156,65,32,135,50,38,6,46, +236,158,54,84,46,77,142,126,244,186,71,14,107,172,16,82, +0,161,16,72,160,148,10,128,21,88,170,21,14,202,188,88, +242,148,171,144,93,248,62,31,142,223,228,242,231,154,97,44, +5,10,170,180,30,130,28,204,248,20,190,200,247,237,48,213, +50,135,22,102,76,10,60,212,59,21,36,107,250,112,251,86, +153,56,187,194,93,89,46,87,46,75,238,114,242,194,203,57, +11,192,22,236,236,22,183,92,165,236,128,215,121,50,212,39, +213,29,119,74,73,0,150,96,37,151,56,167,2,100,69,158, +110,213,139,23,111,222,56,49,98,65,210,166,201,215,239,82, +241,176,237,186,117,46,12,158,248,181,174,128,87,121,58,85, +39,223,188,115,66,192,128,140,201,129,143,251,167,136,197,73, +23,231,95,48,186,195,79,123,43,65,68,198,236,64,215,245, +243,212,168,36,27,251,135,137,151,107,150,177,53,56,232,243, +238,8,83,33,179,112,109,54,188,175,131,101,95,61,107,201, +64,158,101,101,157,28,243,8,105,129,196,74,37,193,88,14, +84,92,109,109,12,28,216,185,45,168,217,202,30,121,172,53, +2,72,132,212,64,164,197,18,167,84,4,236,200,86,253,120, +117,166,141,150,115,20,160,41,218,241,169,124,153,110,219,107, +11,97,6,164,76,130,189,220,176,180,42,194,119,248,104,127, +39,137,220,218,20,248,168,127,171,72,220,85,229,254,36,178, +107,223,33,163,113,92,36,253,154,85,108,110,62,58,223,135, +195,55,251,220,57,36,48,74,195,160,138,235,173,9,193,3, +190,231,7,177,31,153,174,219,231,202,97,137,85,74,14,112, +28,39,73,220,86,213,248,39,142,173,196,17,149,114,3,210, +38,201,223,110,82,251,17,233,178,252,174,22,55,92,173,109, +128,221,216,54,220,174,85,7,222,238,81,195,150,234,132,155, +177,46,136,223,232,50,255,150,145,52,106,202,114,184,98,91, +115,131,209,30,78,220,88,53,228,41,86,49,185,241,105,124, +21,175,219,228,250,103,138,105,140,21,64,42,36,22,42,141, +134,114,37,178,104,239,39,160,77,154,63,205,172,86,51,152, +229,105,85,133,255,242,208,234,12,27,169,167,40,197,3,182, +103,23,185,191,137,228,91,119,194,201,24,31,192,63,124,188, +63,131,76,206,125,64,252,68,183,253,181,164,32,67,115,178, +193,127,127,8,121,128,245,88,100,244,142,7,101,95,60,123, +203,65,138,39,108,141,14,242,61,59,200,245,204,36,213,27, +23,70,79,120,26,87,69,251,62,25,238,211,226,138,107,173, +1,64,3,180,70,3,185,150,25,180,114,67,210,162,137,223, +235,2,249,149,173,242,113,250,68,187,61,173,168,208,91,28, +114,25,115,3,209,22,207,220,82,148,224,33,223,177,163,88, +205,100,214,175,81,69,246,238,3,227,55,184,236,187,103,12, +9,136,146,56,172,178,114,78,2,184,132,59,177,100,41,95, +160,187,250,220,58,20,54,73,255,102,145,219,155,10,158,245, +101,180,141,179,35,92,133,237,210,245,248,100,190,47,135,45, +214,57,49,96,97,214,164,225,83,253,114,213,178,135,30,231, +76,0,157,208,51,156,164,113,83,212,227,149,153,178,26,206, +212,208,164,236,131,231,127,49,232,225,206,45,65,73,22,246, +77,51,175,149,4,98,41,82,112,161,247,56,96,114,230,131, +242,47,26,253,229,165,149,17,50,2,71,116,202,79,104,27, +102,87,186,11,207,231,226,225,219,125,106,92,18,157,245,99, +212,129,181,91,208,178,141,190,243,70,136,9,136,147,40,174, +179,102,12,11,168,150,58,132,54,96,110,38,186,238,159,35, +6,37,92,136,61,200,248,28,62,216,255,77,32,159,178,23, +30,206,221,64,182,229,55,181,60,161,106,232,83,238,66,242, +161,251,249,104,124,23,143,223,230,210,227,152,73,168,23,42, +142,182,116,38,142,174,244,23,150,78,197,201,22,255,220,49, +164,32,66,99,176,192,107,61,1,105,146,244,109,54,189,191, +129,100,75,127,98,217,82,159,80,55,212,45,117,9,125,194, +221,88,54,212,47,85,13,127,234,89,74,22,240,45,63,169, +237,136,85,73,62,118,31,27,143,199,102,227,251,120,120,118, +151,155,151,78,198,249,16,252,224,247,191,16,116,96,239,54, +176,110,139,107,174,49,70,0,136,128,24,137,160,26,235,132, +152,129,40,139,227,46,41,207,160,146,107,156,17,33,50,96, +103,182,168,231,43,113,69,181,222,129,160,11,251,167,137,213, +75,22,243,29,57,170,209,78,78,121,8,117,64,237,84,148, +236,225,199,189,83,64,162,164,14,163,45,156,153,161,42,233, +199,172,67,99,179,240,109,62,61,175,137,196,91,53,226,73, +90,55,193,125,94,28,121,169,101,8,77,192,158,108,244,159, +23,70,78,104,24,86,81,185,55,9,252,210,215,216,34,156, +135,65,23,247,95,17,170,131,110,239,43,96,85,150,207,213, +195,150,235,148,153,176,58,202,214,248,32,254,163,195,125,91, +76,115,172,33,66,97,144,196,105,21,133,123,178,208,111,92, +25,45,227,104,72,87,228,235,118,185,122,217,98,159,51,7, +20,78,201,8,30,241,45,61,137,233,138,125,205,44,86,59, +25,229,99,244,129,247,123,80,240,165,191,177,100,40,79,162, +186,238,158,51,4,36,72,202,52,216,234,29,11,138,182,124, +166,158,166,84,7,220,206,85,193,190,110,150,187,149,44,226, +123,122,80,243,149,185,178,88,238,84,146,140,237,193,197,223, +119,194,200,8,29,193,43,62,181,47,145,77,251,47,9,205, +194,182,233,246,189,50,80,102,197,154,38,92,143,77,198,255, +112,240,230,143,51,39,20,12,233,136,92,217,44,127,171,73, +204,87,228,234,102,187,123,205,32,150,35,21,21,123,155,65, +47,119,44,41,202,240,152,110,216,91,13,98,58,98,87,178, +139,223,239,66,241,145,253,250,84,186,12,191,233,229,141,21, +67,26,34,21,22,75,157,66,19,177,55,25,252,243,199,152, +3,8,135,96,6,167,124,132,190,224,118,175,26,244,116,167, +158,164,116,3,222,230,209,211,158,74,148,209,49,190,128,119, +121,120,117,167,157,148,114,0,226,32,202,227,168,73,203,39, +234,237,10,117,69,189,94,145,168,171,235,237,9,69,67,190, +98,87,179,155,221,238,86,179,152,237,232,85,143,94,246,216, +99,140,1,0,3,48,6,3,60,198,27,48,54,3,95,246, +219,83,138,2,60,197,43,54,53,63,153,237,235,101,137,93, +202,30,120,188,55,3,92,198,221,80,182,196,39,245,29,53, +106,201,66,190,97,103,181,152,225,40,77,131,174,238,183,163, +84,13,124,218,95,73,42,54,54,15,159,238,215,163,146,109, +252,29,39,74,236,80,214,196,225,149,157,242,18,202,132,216, +129,172,203,227,171,121,205,36,214,43,17,69,115,190,1,103, +115,248,97,239,53,128,104,136,87,104,42,118,54,139,223,238, +82,243,144,233,184,93,170,30,190,220,183,196,36,197,27,54, +86,15,89,142,87,100,234,110,58,123,199,129,146,43,156,149, +97,50,229,55,180,44,163,107,252,17,231,82,224,160,206,171, +33,77,145,142,203,165,203,241,139,92,223,76,115,173,49,64, +96,132,134,96,5,151,122,135,130,38,109,159,44,247,43,81, +69,247,254,1,226,35,250,229,171,117,13,60,218,219,9,42, +179,102,13,27,170,151,46,198,63,112,124,39,143,188,214,18, +128,36,72,203,36,218,235,9,73,131,166,110,167,171,244,29, +54,90,207,65,130,167,124,133,174,226,119,187,88,253,100,181, +159,145,38,74,239,96,208,199,221,83,134,194,36,201,219,46, +90,255,65,225,151,188,230,18,227,20,136,168,152,219,136,58, +185,230,25,83,2,131,52,78,138,56,156,178,17,126,194,219, +56,58,210,87,217,58,31,134,95,244,250,71,138,43,172,149, +2,2,37,84,8,45,192,88,12,116,88,111,69,136,14,248, +157,47,194,125,88,124,117,175,29,132,122,160,242,106,74,115, +160,225,90,109,96,220,6,213,93,119,206,9,0,19,48,39, +19,124,231,143,48,23,18,15,213,78,71,233,26,124,244,191, +23,4,110,232,90,126,80,251,21,169,186,248,254,30,18,28, +229,105,84,149,253,243,196,168,5,11,187,166,29,151,74,135, +225,22,173,252,144,246,72,98,181,146,65,60,71,11,58,182, +23,23,94,207,73,2,183,116,37,190,168,247,43,80,85,245, +255,21,160,42,234,247,170,64,95,117,235,93,8,62,240,127, +31,8,191,224,117,159,28,247,72,97,133,148,66,0,129,16, +10,128,20,72,168,20,26,136,181,72,224,149,158,194,20,201, +184,30,154,156,253,224,244,143,22,119,92,41,45,128,88,136, +52,88,234,21,138,138,188,221,162,150,47,212,29,117,106,77, +2,190,228,55,183,28,165,104,192,215,252,98,214,163,145,93, +250,30,27,140,247,96,224,199,190,99,70,161,152,200,184,29, +170,154,254,220,50,148,38,65,95,118,219,91,11,2,54,100, +47,62,188,191,131,68,79,125,74,93,64,191,116,53,190,137, +231,107,113,193,245,222,4,240,9,127,227,201,88,31,68,127, +124,57,111,129,200,138,61,205,168,22,59,156,181,97,112,197, +183,246,4,162,41,222,177,161,120,201,102,254,43,67,101,210, +236,105,71,165,218,224,184,79,138,59,172,180,18,66,4,192, +8,12,209,8,47,225,76,12,93,200,63,108,188,30,147,12, +239,233,64,221,85,231,222,32,176,67,91,51,131,85,94,78, +89,8,55,96,109,22,188,237,163,229,29,21,106,139,98,62, +35,79,180,218,195,136,11,169,135,40,135,35,54,37,63,184, +253,171,68,29,93,235,15,40,159,162,23,63,222,157,97,34, +229,22,164,108,130,255,252,48,246,2,195,53,218,200,57,13, +160,26,234,148,154,128,60,201,234,62,59,206,149,192,34,173, +151,32,38,35,126,164,187,242,92,42,28,150,89,181,230,1, +211,51,155,212,127,84,184,45,171,233,204,29,69,106,46,50, +126,135,139,182,127,150,152,165,104,193,199,254,99,194,225,152, +77,232,31,46,222,190,81,102,198,170,32,95,179,139,221,207, +70,243,185,121,232,116,158,14,213,77,119,239,25,64,50,164, +39,50,109,183,172,165,3,113,23,149,127,211,200,43,45,133, +8,130,49,28,160,57,218,208,185,60,184,250,219,74,26,49, +37,49,88,225,165,156,129,32,11,243,38,137,223,234,18,251, +148,185,176,120,234,86,186,8,255,225,225,221,29,102,90,106, +17,194,3,184,135,11,183,103,21,153,187,139,204,223,101,226, +237,26,117,100,173,30,176,60,171,202,252,89,102,214,170,1, +79,243,170,73,207,103,226,233,90,125,96,253,22,149,124,227, +206,40,17,67,19,178,7,31,255,207,1,131,51,62,132,63, +240,124,47,14,188,220,179,132,44,193,75,62,115,79,17,138, +131,44,207,171,34,125,151,141,247,99,208,193,189,95,128,186, +168,254,187,66,92,65,173,86,48,168,227,106,105,67,228,194, +230,233,83,237,114,244,162,199,63,115,76,33,140,128,16,9, +176,18,75,148,210,1,184,131,75,191,99,69,145,158,203,132, +219,177,170,200,223,109,98,253,18,213,116,231,158,32,52,3, +91,182,211,87,218,10,25,133,99,50,225,119,188,40,243,99, +217,81,175,86,52,232,235,110,57,75,193,130,174,237,135,165, +87,49,186,193,111,127,41,105,192,212,204,100,213,159,87,70, +202,40,24,211,1,187,179,77,188,95,131,138,174,253,135,132, +71,113,155,85,111,94,56,57,227,65,216,7,205,223,102,210, +235,25,73,162,182,46,134,63,244,60,39,10,236,212,150,196, +100,197,159,118,86,138,9,140,211,32,170,227,110,41,75,224, +146,238,204,19,165,118,32,234,226,250,107,74,113,128,229,88, +69,228,206,38,241,95,29,106,155,98,31,51,15,149,78,195, +169,26,249,164,189,147,64,46,101,14,44,220,154,21,108,234, +126,58,90,215,193,179,191,156,180,112,98,198,162,160,79,187, +43,205,133,198,99,177,209,121,62,20,63,217,237,111,37,137, +216,154,28,252,248,119,142,8,148,81,49,182,1,119,115,217, +113,175,20,20,104,169,70,56,9,227,34,232,199,174,99,103, +177,216,233,44,29,139,139,174,255,167,128,69,89,31,71,79, +122,58,83,71,211,186,11,206,247,224,224,207,63,99,76,0, +156,192,49,157,176,51,90,196,241,148,172,224,83,255,82,209, +176,175,154,245,108,36,159,186,151,14,198,125,80,252,101,167, +189,148,48,32,98,98,226,226,234,107,107,97,192,196,204,69, +197,223,118,210,202,9,9,131,34,46,167,46,164,31,178,30, +143,204,214,245,240,228,174,39,39,61,156,185,161,104,201,71, +238,107,98,241,210,205,120,23,134,79,244,219,87,202,10,56, +149,35,19,117,119,157,57,163,64,76,69,204,78,116,217,127, +79,8,26,176,53,59,216,245,237,52,149,58,131,70,110,105, +74,116,208,239,93,1,174,226,118,171,90,252,112,247,150,129, +52,75,218,50,153,246,91,82,146,129,61,219,200,59,45,164, +24,194,16,136,160,24,203,128,154,169,172,153,195,10,43,165, +4,0,9,144,18,9,180,82,67,144,130,9,157,195,3,187, +183,13,180,91,211,130,139,189,207,128,147,57,190,144,119,88, +104,53,134,9,148,83,17,178,3,95,247,203,81,139,22,126, +204,59,36,52,10,203,164,218,227,136,73,137,7,106,175,34, +116,7,159,254,215,130,130,45,221,137,39,107,253,0,245,81, +245,246,133,178,35,94,165,233,208,221,124,118,158,11,133,71, +114,171,83,108,98,254,34,211,119,219,88,59,4,53,88,233, +37,140,137,128,27,185,166,25,215,66,131,177,30,136,188,216, +242,156,42,144,87,89,58,23,7,95,254,91,67,130,162,44, +143,171,166,61,151,8,167,97,84,133,253,210,212,232,36,159, +187,135,12,199,105,18,245,117,181,188,161,98,105,83,228,227, +246,169,114,121,114,213,179,151,28,230,88,66,148,192,33,157, +145,35,26,229,101,148,141,241,3,220,199,197,211,183,218,196, +248,5,174,235,230,185,83,72,34,180,6,3,61,214,25,49, +34,65,86,230,201,82,191,80,117,244,173,55,33,124,128,255, +248,112,254,6,147,61,255,136,113,9,116,82,207,81,130,134, +108,197,143,118,119,154,73,173,71,32,139,242,62,10,222,244, +241,246,140,34,49,87,17,187,147,77,254,127,3,200,134,252, +197,166,231,55,177,124,169,110,184,91,203,2,186,165,47,177, +77,185,15,137,143,234,183,171,212,29,116,122,79,3,170,166, +62,167,14,164,93,146,158,205,228,215,183,210,68,232,13,14, +251,172,57,195,64,138,37,76,137,12,218,185,41,232,209,206, +78,113,137,117,74,76,80,156,101,97,221,20,247,88,97,164, +132,2,33,21,16,43,145,68,107,61,0,121,144,245,121,116, +180,175,147,101,126,45,43,232,212,158,68,116,205,63,102,28, +10,153,132,123,177,224,105,95,37,235,248,88,126,84,187,29, +173,234,240,219,94,90,24,49,33,113,80,229,245,148,164,96, +67,247,242,193,250,47,10,253,196,181,213,48,166,2,102,101, +154,108,253,15,5,79,250,58,91,198,211,176,170,202,255,105, +96,213,150,199,84,195,156,74,144,145,57,186,208,127,92,56, +61,163,73,220,87,197,250,38,154,239,205,1,135,115,54,128, +111,248,89,111,70,184,8,251,161,233,217,77,110,127,42,89, +198,215,240,162,206,175,97,69,149,222,195,128,139,185,143,136, +151,105,182,181,55,16,108,225,206,44,81,75,23,226,15,58, +191,135,5,87,123,27,65,39,246,44,35,107,244,144,231,88, +65,164,198,34,161,87,56,42,211,102,203,123,42,80,86,197, +249,22,156,236,241,199,156,67,0,131,48,14,130,60,204,186, +52,62,138,223,236,114,247,146,193,60,79,138,58,188,182,19, +86,70,201,24,30,208,61,125,168,125,138,92,220,124,117,174, +13,134,123,180,176,99,90,97,161,212,8,36,81,90,7,193, +30,110,220,26,21,100,107,126,48,251,211,201,58,63,134,29, +212,122,5,162,42,238,183,162,68,15,125,206,29,64,58,36, +55,58,205,167,230,37,147,121,191,4,53,89,249,39,141,157, +194,18,169,180,24,226,16,202,128,152,137,168,155,235,142,57, +133,32,2,99,52,128,107,184,81,107,22,176,45,187,233,237, +13,5,75,186,50,95,150,219,149,234,130,251,189,40,240,83, +223,82,147,144,47,216,221,109,102,189,26,209,36,239,187,96, +124,7,143,254,246,146,194,12,73,137,6,122,173,35,96,69, +150,238,197,131,183,127,148,184,161,106,233,67,236,67,230,227, +242,233,122,125,34,221,150,215,84,226,140,10,177,5,57,155, +193,47,127,173,41,192,81,156,102,81,219,23,203,158,122,148, +178,1,126,227,203,120,27,70,87,248,43,79,165,202,224,153, +95,202,26,56,180,51,83,84,227,157,24,178,16,111,208,216, +45,108,153,78,219,41,43,225,68,140,77,192,159,124,246,158, +3,4,71,120,10,87,100,235,126,56,122,211,195,155,59,142, +148,84,96,172,6,50,45,183,40,229,3,244,71,151,251,151, +136,166,121,215,132,227,49,217,240,191,30,148,124,225,238,44, +19,107,151,160,39,59,253,165,165,17,81,50,135,23,118,78, +11,40,150,50,5,54,106,207,34,178,103,31,57,175,129,68, +75,61,66,89,16,183,81,117,246,141,51,35,84,4,237,216, +84,252,108,55,175,157,132,114,33,242,96,235,119,168,104,218, +119,201,120,30,22,93,253,111,5,137,154,186,156,190,208,118, +204,42,52,23,27,159,199,71,243,187,89,236,118,182,138,199, +109,83,237,115,228,160,198,43,49,69,49,158,129,37,91,249, +35,205,149,198,66,161,145,88,170,20,30,200,189,76,176,157, +187,130,92,205,108,86,191,89,229,230,164,131,115,63,16,125, +241,237,61,5,40,138,242,60,42,218,246,217,114,158,2,21, +85,123,31,1,47,242,124,43,78,180,216,227,140,9,129,3, +58,167,7,52,79,155,42,159,167,71,53,219,217,43,14,181, +76,161,141,152,147,8,174,241,70,140,73,128,151,120,166,150, +38,68,15,124,222,31,65,46,102,62,42,223,166,211,119,218, +72,57,5,33,26,224,53,158,136,181,73,240,151,159,214,86, +192,168,12,155,169,175,169,197,9,23,99,31,48,63,147,77, +255,111,1,201,146,190,204,182,245,54,132,46,224,95,62,90, +223,65,163,183,60,164,58,226,86,170,8,222,241,161,252,137, +102,123,123,65,225,150,172,228,19,247,86,129,184,138,218,189, +104,240,215,159,82,22,192,45,92,153,45,235,233,72,93,69, +239,126,48,250,195,203,59,43,196,20,196,104,4,151,120,167, +134,36,69,27,62,215,15,83,47,83,108,99,238,32,210,99, +153,81,43,22,52,109,187,108,189,15,129,15,250,191,11,196, +87,244,234,71,171,59,236,180,150,2,4,69,88,14,85,76, +111,108,24,94,209,169,63,169,236,152,87,72,42,52,22,11, +157,198,83,177,178,73,254,119,131,216,142,92,213,236,103,167, +185,212,56,36,50,106,199,162,162,111,191,41,229,1,212,67, +149,211,19,154,134,93,213,238,71,163,187,252,188,54,18,78, +197,200,6,253,221,37,230,41,82,113,177,245,57,116,48,239, +147,224,46,47,175,172,148,19,16,38,65,94,102,217,90,31, +64,63,116,61,63,137,237,202,117,201,124,94,30,89,173,103, +32,201,210,190,72,246,245,179,212,44,100,27,126,215,139,19, +47,214,60,97,106,100,146,238,205,3,167,119,52,168,235,234, +121,75,68,210,172,105,195,229,218,101,232,77,14,127,236,57, +70,16,136,161,8,201,129,142,235,165,137,209,11,30,247,77, +49,143,145,6,74,173,64,80,133,245,82,196,224,132,143,241, +7,156,207,193,131,191,255,132,176,1,122,163,195,124,75,78, +114,184,99,75,113,130,197,92,71,204,74,52,209,123,31,0, +63,240,125,63,12,189,200,241,141,60,211,74,11,33,6,32, +12,130,56,140,178,48,110,130,250,172,58,243,70,137,25,138, +146,60,236,186,118,30,10,157,196,115,181,176,97,122,101,163, +252,140,54,113,126,5,171,186,252,190,22,22,76,237,76,20, +221,249,39,140,141,192,19,189,246,17,242,2,203,181,202,192, +153,29,234,154,122,156,50,17,118,67,219,50,155,214,95,80, +186,5,47,251,236,57,71,0,138,160,28,139,136,158,249,164, +188,131,66,47,113,76,37,204,136,20,89,184,55,11,220,214, +213,240,166,142,167,101,21,157,251,131,200,143,109,199,173,82, +113,176,229,59,117,36,173,154,240,60,46,154,254,221,34,150, +39,85,29,127,203,73,10,55,100,45,30,184,189,171,192,93, +93,110,95,42,27,230,87,178,138,207,237,67,229,211,244,234, +70,187,57,237,160,212,11,20,87,89,59,7,5,94,234,25, +74,146,176,45,186,249,239,12,17,9,179,34,77,151,238,199, +163,179,125,188,60,179,74,205,65,134,231,116,129,254,234,82, +251,16,249,176,253,186,84,62,76,191,108,181,143,145,7,90, +175,65,68,199,252,66,214,225,177,221,184,54,26,206,213,192, +166,237,151,165,118,33,250,224,251,127,8,120,144,247,89,112, +182,135,23,119,94,9,41,130,112,12,38,120,206,23,224,46, +46,191,174,149,7,82,47,81,76,103,236,8,86,113,185,117, +41,124,144,255,217,96,190,39,7,61,222,153,33,42,225,70, +172,73,194,183,248,228,190,39,6,45,220,152,53,104,232,86, +190,72,247,229,177,213,56,38,18,110,197,138,38,125,159,13, +231,107,112,209,247,223,16,178,0,111,241,200,109,77,13,78, +250,56,123,194,209,152,46,216,223,77,98,191,50,85,54,207, +159,98,22,163,29,156,250,145,234,138,123,173,32,80,67,149, +210,3,152,135,73,151,231,87,177,186,201,238,127,35,200,196, +220,69,228,207,54,243,94,9,40,146,114,13,50,58,199,7, +242,47,27,237,231,164,129,83,59,18,85,117,255,29,33,42, +224,86,174,72,214,245,241,244,172,38,51,127,149,169,179,105, +252,21,167,90,228,240,198,142,97,5,149,90,131,128,14,233, +141,12,211,41,59,225,101,156,13,225,11,124,215,143,83,39, +210,108,105,79,36,218,234,25,75,130,178,44,174,187,230,28, +3,8,134,112,4,166,104,198,183,240,100,174,47,166,61,150, +24,165,96,64,199,244,194,198,233,17,205,242,182,138,198,125, +81,236,103,166,169,214,57,48,112,99,215,176,163,90,237,96, +212,135,213,87,214,202,1,137,147,42,142,183,100,36,143,186, +182,30,134,92,196,252,68,182,237,183,165,52,1,122,162,211, +126,74,90,48,177,115,89,112,183,151,21,118,74,75,32,146, +98,13,19,42,135,38,102,47,58,252,183,135,20,71,88,10, +21,68,107,60,16,123,145,225,59,125,164,189,146,80,44,100, +26,110,213,138,7,109,223,44,115,107,81,192,167,252,133,166, +99,119,177,249,249,108,60,31,139,143,238,247,163,208,77,124, +95,15,75,174,114,118,130,203,188,91,194,146,168,172,155,227, +14,41,141,128,18,41,180,16,99,16,192,33,156,129,33,27, +241,39,157,157,227,2,233,149,140,226,49,219,208,187,28,188, +248,243,206,8,17,1,51,50,69,55,254,141,35,35,117,20, +173,249,192,252,77,38,255,190,17,102,66,234,32,218,227,137, +89,139,6,126,237,43,100,21,158,203,133,203,179,171,220,157, +100,114,239,19,224,38,174,175,166,53,23,24,175,193,68,207, +125,66,220,64,181,213,49,182,0,103,113,216,101,237,29,4, +122,168,115,106,64,210,164,233,211,237,122,117,162,205,158,119, +68,168,12,154,185,173,168,209,75,30,115,13,49,10,193,4, +206,233,0,221,209,167,222,165,224,65,223,119,195,216,10,28, +213,105,55,165,61,144,120,169,102,56,75,195,162,170,239,175, +33,69,17,158,195,5,219,187,11,204,215,228,226,231,187,113, +108,36,158,170,149,15,210,63,89,236,119,166,136,198,121,17, +228,99,246,161,243,121,120,116,183,159,149,102,66,235,48,216, +226,157,27,130,22,108,236,30,54,92,175,77,132,223,240,178, +206,142,113,5,180,74,195,161,154,233,172,29,131,10,174,245, +6,132,77,208,159,93,230,222,34,144,71,89,27,7,71,126, +106,91,98,147,242,15,26,191,197,37,215,57,51,64,101,212, +140,101,65,221,86,215,216,35,140,133,64,3,181,86,1,184, +130,91,189,98,81,211,151,219,150,218,132,248,129,238,235,99, +233,81,204,102,244,139,87,111,90,120,49,231,17,208,34,141, +151,98,6,163,60,140,186,176,126,138,90,188,112,115,214,129, +177,27,216,182,221,182,214,6,192,13,92,219,13,107,171,96, +92,7,205,222,118,208,234,13,11,171,166,60,135,10,166,117, +22,140,237,192,213,221,118,214,138,1,13,211,42,11,231,102, +160,203,250,59,74,212,208,165,252,129,230,107,115,225,241,220, +44,116,27,95,199,203,50,187,214,29,112,58,71,7,250,174, +27,231,70,160,137,218,187,8,252,209,231,222,33,160,65,90, +39,193,92,78,92,88,61,101,41,92,144,189,249,224,252,15, +6,127,252,57,103,0,200,128,156,201,160,159,187,134,28,197, +104,6,183,124,165,174,160,87,59,26,213,101,247,189,49,96, +96,198,166,224,71,191,123,197,160,134,43,181,5,49,27,209, +39,223,189,99,64,193,148,206,192,145,157,250,146,218,140,120, +145,230,75,115,163,209,92,110,92,26,29,229,107,116,145,255, +219,64,186,37,47,185,204,185,5,40,139,226,62,43,206,180, +208,98,140,3,32,7,50,46,135,46,230,63,50,92,167,205, +148,215,80,162,132,14,225,13,28,219,137,43,171,229,12,5, +73,154,54,93,190,95,135,202,166,249,215,140,98,49,211,81, +187,22,29,252,251,71,136,11,168,151,42,134,55,116,44,47, +170,252,158,22,84,108,109,14,60,220,187,5,44,203,234,58, +123,198,145,144,42,136,215,104,34,247,54,129,126,234,90,122, +16,243,17,249,178,221,190,86,22,200,173,76,145,141,251,163, +200,205,77,71,239,122,112,242,199,155,51,14,132,92,192,188, +76,178,189,191,128,116,73,126,118,155,91,143,66,54,225,127, +60,56,251,195,201,27,47,198,60,64,122,36,179,122,205,34, +182,39,23,61,255,137,97,11,117,70,141,88,146,148,109,240, +221,63,70,28,72,185,4,57,153,225,43,125,133,173,210,113, +184,100,59,127,133,169,146,121,188,52,51,90,197,225,150,173, +244,17,246,66,195,177,154,200,188,93,162,158,174,212,23,212, +110,69,139,62,254,158,19,4,102,104,74,118,240,235,95,41, +42,240,86,143,88,150,212,101,244,141,55,99,92,0,189,208, +113,188,36,51,123,213,161,183,57,244,48,231,18,224,36,142, +171,164,29,147,10,143,229,70,165,217,208,190,76,182,253,183, +132,36,65,91,54,211,95,91,10,19,36,103,58,104,247,166, +129,87,123,26,81,37,247,56,97,98,228,130,230,109,19,237, +247,164,160,67,123,51,193,117,222,12,113,9,117,66,205,80, +150,196,101,213,157,119,66,200,0,156,193,33,159,177,39,24, +205,225,134,173,213,1,182,99,87,177,187,217,236,126,55,138, +205,204,87,229,250,100,186,111,143,41,134,49,20,32,41,210, +112,169,118,56,106,211,226,139,123,175,0,84,65,189,86,17, +184,163,75,253,67,197,211,182,202,198,249,17,236,226,246,171, +82,125,112,253,55,133,60,194,90,40,48,82,67,145,146,11, +156,215,65,178,167,31,181,110,129,203,186,59,206,148,208,32, +172,131,98,47,51,108,165,142,160,21,27,154,151,77,246,255, +19,192,38,236,143,38,119,63,25,237,227,228,137,87,107,26, +112,53,183,25,245,98,197,147,182,78,134,249,148,188,224,114, +239,18,240,36,175,187,228,60,7,10,174,244,22,134,76,196, +221,84,246,204,35,165,21,16,42,129,70,106,41,66,112,128, +231,120,65,230,230,162,227,127,57,104,241,198,141,81,3,150, +102,69,155,62,223,142,83,37,242,104,107,103,160,200,202,61, +73,232,22,190,204,183,229,52,133,58,162,86,46,72,222,116, +241,254,13,34,59,246,21,179,26,205,228,214,167,208,69,252, +79,7,235,190,56,246,18,195,20,202,136,24,153,160,59,251, +196,185,21,40,170,242,126,10,90,180,241,115,220,32,181,19, +81,54,199,31,114,30,3,13,214,122,1,226,34,234,231,170, +97,79,53,202,201,8,31,225,47,60,157,171,131,109,223,45, +99,105,80,212,229,245,149,180,98,66,227,176,200,234,61,11, +200,150,252,228,182,167,22,37,124,136,127,232,120,94,22,217, +189,111,128,217,152,62,216,254,93,34,158,166,85,23,222,207, +65,131,183,126,132,186,160,126,171,74,252,81,231,214,160,160, +75,251,35,201,213,206,70,241,153,125,234,92,26,28,245,105, +117,133,189,210,80,168,36,26,235,133,136,131,41,159,161,39, +57,221,161,167,57,213,32,167,51,116,36,175,186,244,62,6, +30,236,253,6,148,77,241,143,29,199,74,34,177,86,9,56, +146,83,29,114,27,83,7,211,62,75,206,114,176,226,75,123, +35,193,84,206,76,80,157,117,99,220,0,181,81,113,182,133, +55,115,92,33,173,144,80,40,36,18,106,133,130,34,45,151, +40,167,35,116,5,191,250,213,170,6,63,253,173,37,1,89, +146,151,93,246,222,3,128,7,120,143,7,102,111,58,120,247, +135,145,23,90,142,81,4,230,104,66,247,240,225,254,45,34, +121,214,149,241,50,204,166,244,7,150,111,213,137,55,107,220, +16,181,112,97,246,164,163,115,125,48,253,179,197,60,71,10, +42,180,22,3,28,198,89,16,182,65,119,247,153,113,42,68, +22,236,237,6,181,93,177,174,137,199,107,51,225,117,156,44, +241,75,93,67,143,114,54,130,79,252,91,71,194,170,40,223, +163,131,125,223,12,115,41,113,64,229,212,132,228,65,215,247, +211,208,170,12,159,233,167,173,149,1,50,35,87,52,235,219, +104,58,119,7,153,158,219,132,250,161,234,233,75,109,67,236, +66,246,225,243,253,56,116,50,207,151,226,6,171,189,140,176, +17,122,130,211,60,106,218,114,153,114,27,82,23,209,63,95, +140,123,160,240,74,78,113,136,101,72,77,68,222,108,113,207, +21,194,10,40,149,2,3,53,86,9,57,130,81,28,102,89, +90,23,193,63,126,156,59,129,100,74,111,96,216,70,221,89, +39,198,44,64,91,52,243,91,89,34,151,54,71,30,106,157, +2,19,53,119,25,121,163,197,28,71,72,10,52,84,43,29, +132,123,176,240,107,94,49,169,241,72,108,85,142,79,228,219, +118,218,74,25,1,35,50,100,39,190,172,183,35,84,5,253, +218,85,232,46,62,191,143,133,71,115,187,81,109,118,188,43, +195,101,218,109,105,77,4,222,232,49,207,144,146,8,172,209, +66,142,97,4,133,88,130,148,76,224,157,30,210,28,105,168, +84,26,12,245,72,101,197,156,70,80,137,53,74,200,16,156, +224,49,223,144,179,24,236,240,214,142,64,21,213,123,23,128, +47,248,221,47,70,61,88,249,37,173,153,192,58,45,166,56, +198,18,160,36,10,235,164,152,195,8,11,161,6,40,141,130, +50,45,182,56,231,2,224,5,158,235,133,137,147,43,158,181, +101,48,205,179,166,12,135,105,150,181,117,48,236,163,230,45, +19,105,183,164,37,19,121,183,133,53,83,88,35,133,20,66, +8,0,16,0,33,16,64,33,148,0,33,17,80,35,149,20, +99,24,64,49,148,33,49,81,113,183,149,53,114,72,99,164, +128,66,41,17,64,35,180,4,35,57,212,49,181,48,97,114, +228,163,246,45,50,121,247,133,177,19,88,166,213,22,198,76, +64,157,84,115,156,33,33,81,80,167,213,20,230,72,66,181, +208,97,188,5,35,59,244,53,183,24,229,96,196,135,244,71, +150,235,149,137,178,59,222,148,241,48,236,162,246,47,18,125, +245,173,53,1,120,130,215,124,98,222,34,145,87,91,26,19, +5,119,122,73,99,166,160,70,43,57,196,49,148,32,33,83, +112,163,215,60,98,90,98,145,210,11,24,151,65,55,247,29, +49,42,193,70,238,105,66,245,208,229,252,5,166,107,246,177, +243,88,104,52,150,11,149,71,83,187,19,77,246,254,3,194, +39,248,205,47,103,45,24,216,177,173,184,209,106,14,51,44, +165,10,224,21,158,202,149,201,178,191,158,148,116,96,238,38, +178,111,159,41,167,33,84,1,189,210,81,184,38,27,255,199, +129,147,59,158,148,117,112,236,39,166,45,150,57,181,32,97, +83,244,227,215,185,50,88,230,213,146,134,76,197,205,86,247, +216,97,172,5,2,43,180,20,35,24,196,113,148,164,97,83, +245,243,213,184,38,26,239,197,128,135,121,151,132,103,113,217, +117,239,28,16,56,161,99,120,65,231,246,160,226,107,123,97, +225,212,140,100,81,223,87,195,154,42,156,151,65,54,231,31, +48,62,131,79,254,123,67,192,130,172,205,131,167,127,181,168, +225,75,125,67,205,82,182,192,103,253,25,101,98,236,2,246, +101,179,253,189,36,48,75,211,162,139,255,239,0,209,17,191, +210,85,248,46,31,175,207,164,211,115,154,64,61,85,41,63, +160,125,154,92,253,108,53,143,153,134,90,165,224,64,207,117, +194,204,72,21,197,123,54,144,111,217,73,47,103,44,8,218, +176,185,250,216,122,28,50,25,247,67,209,147,159,222,214,208, +160,172,139,227,47,57,205,161,134,41,149,1,51,51,85,53, +255,153,97,42,101,6,172,204,146,181,124,160,254,170,82,127, +80,249,53,173,184,208,122,12,50,56,231,3,240,7,159,255, +199,128,131,57,159,128,55,121,252,53,167,24,196,112,132,166, +96,71,183,250,197,170,39,47,189,140,177,1,120,131,199,126, +99,202,96,152,71,73,27,38,87,62,75,207,98,178,227,95, +57,42,209,70,207,121,2,212,68,229,221,20,246,72,99,165, +144,64,40,5,2,42,164,22,34,12,134,120,132,182,96,102, +167,186,228,62,39,14,172,220,146,148,108,224,223,62,82,94, +65,169,22,56,172,179,98,76,3,172,198,50,161,118,40,106, +242,242,203,90,59,0,117,80,237,117,132,172,192,83,189,114, +81,242,135,155,183,78,132,217,144,190,200,246,253,50,212,38, +197,31,118,94,11,9,134,114,36,162,106,238,51,226,68,138, +45,204,153,4,122,169,99,104,65,198,230,224,195,255,123,64, +240,132,175,241,69,188,79,131,171,190,189,166,16,71,80,138, +5,76,203,44,90,251,1,233,147,236,238,55,163,92,140,124, +208,254,77,34,191,182,21,54,74,207,96,146,231,93,17,174, +195,102,235,123,104,112,214,135,209,23,222,206,81,129,182,106, +198,179,176,108,170,127,174,24,214,80,161,180,8,226,49,218, +192,185,29,168,186,250,222,26,16,52,97,123,116,177,255,153, +96,58,103,7,184,142,155,165,110,161,203,248,27,78,214,248, +33,238,161,194,105,25,69,99,190,32,119,51,217,245,239,20, +145,56,171,194,124,73,110,118,186,75,207,99,162,225,94,45, +104,216,86,221,120,55,134,13,212,91,21,226,11,122,183,131, +85,95,94,91,9,35,34,100,6,174,236,150,183,84,36,236, +138,118,125,58,93,167,207,180,211,82,138,0,28,193,41,30, +177,45,185,201,233,15,45,207,168,18,123,148,177,49,120,224, +247,190,0,118,97,251,116,185,126,153,106,155,99,15,49,14, +129,12,202,185,8,248,145,239,218,113,168,100,26,111,197,136, +6,121,157,37,99,121,80,245,245,181,180,32,98,99,242,224, +235,127,41,104,208,214,205,112,151,150,71,84,203,29,74,154, +48,61,178,89,255,70,145,153,187,138,220,221,100,246,175,19, +101,118,172,43,226,117,154,76,253,77,37,207,184,18,90,132, +241,16,236,224,214,175,80,85,244,239,23,161,62,168,254,186, +82,94,64,185,20,57,184,241,107,92,17,173,243,96,232,71, +174,107,230,177,210,72,40,21,2,11,180,86,3,152,134,89, +149,230,67,243,179,217,252,126,22,154,141,237,195,229,219,117, +234,76,26,61,229,41,84,17,189,243,65,248,7,143,255,230, +144,195,24,11,128,22,104,172,22,50,12,167,104,196,151,244, +102,134,171,180,29,178,26,207,196,210,165,248,193,238,111,35, +233,212,156,100,112,207,23,226,14,42,189,134,17,21,114,11, +83,38,195,126,106,90,114,145,243,27,88,182,213,55,214,12, +97,9,84,82,141,113,2,196,68,196,205,84,215,220,99,132, +129,16,11,144,22,73,188,86,19,152,167,73,213,199,215,243, +146,200,172,93,131,142,238,245,131,212,79,84,219,29,107,138, +112,28,38,89,222,87,193,186,46,158,191,197,36,199,59,50, +84,39,221,156,119,64,232,4,158,233,165,141,145,3,26,167, +69,20,207,217,2,158,229,101,149,157,243,2,200,133,204,195, +165,219,241,170,76,159,109,231,173,16,81,48,167,19,116,102, +143,58,182,22,7,92,206,93,64,190,100,55,191,157,165,98, +97,211,244,235,86,185,56,249,226,221,27,6,86,108,105,78, +52,216,235,13,9,139,162,62,175,142,180,85,50,142,135,100, +71,191,122,213,162,135,63,247,12,33,9,208,18,141,244,82, +198,192,128,141,217,131,142,239,229,129,213,91,22,210,13,121, +139,69,78,111,104,88,86,213,249,55,140,172,208,83,156,98, +17,211,19,155,150,95,212,250,5,170,171,238,189,3,64,7, +244,78,7,233,158,60,244,58,71,6,234,172,26,243,4,169, +153,200,186,61,174,152,214,88,32,180,2,67,53,210,73,57, +7,1,30,226,29,26,154,149,109,242,253,59,68,52,204,171, +36,29,155,139,143,239,231,161,209,89,62,86,31,89,175,71, +36,203,250,58,90,214,209,177,190,136,246,121,114,212,163,149, +29,242,26,75,132,210,32,168,195,106,43,99,100,128,206,232, +17,207,210,178,136,238,249,67,204,67,164,195,114,171,82,124, +96,255,54,145,126,203,74,58,49,103,17,216,163,141,157,195, +2,171,181,12,160,25,218,146,153,188,250,210,218,8,56,145, +99,27,113,39,149,28,227,8,72,145,132,107,177,193,121,31, +4,127,248,121,111,4,152,136,185,137,232,155,111,206,57,0, +112,0,231,112,192,230,236,3,231,119,176,232,235,111,41,73, +192,150,236,228,151,183,86,4,232,136,94,249,40,125,131,205, +222,119,192,232,12,31,233,175,44,149,11,147,39,95,189,107, +193,193,158,111,196,153,20,122,136,115,40,96,82,230,193,210, +175,88,213,228,231,183,177,116,40,110,178,250,207,10,51,37, +53,24,233,161,204,137,5,75,187,34,93,151,207,215,227,146, +233,188,29,162,26,238,212,146,132,108,193,207,126,115,202,65, +136,7,104,143,38,118,47,27,236,247,166,128,71,121,27,69, +103,254,40,115,99,209,208,175,92,149,236,227,231,185,81,104, +38,182,46,135,47,246,61,51,72,229,196,132,197,81,151,214, +71,208,139,29,207,202,50,185,246,25,114,18,195,21,218,138, +25,141,226,50,235,214,184,32,122,227,195,248,11,78,247,232, +97,207,53,194,72,8,21,64,43,52,20,43,153,196,123,53, +160,105,218,117,233,124,28,62,217,239,79,33,139,240,30,14, +220,220,117,228,172,6,51,61,181,41,241,65,253,87,133,250, +162,218,239,72,81,133,247,114,192,226,172,11,227,39,184,205, +171,39,45,157,136,179,41,252,145,231,90,97,160,196,10,37, +69,24,14,209,12,111,233,72,92,85,237,127,36,184,202,219, +41,42,241,70,141,89,130,150,108,228,159,54,86,14,73,140, +86,112,168,103,42,105,198,180,192,98,173,19,96,38,166,46, +166,63,182,28,167,72,196,213,212,230,196,131,181,95,144,186, +137,238,251,99,200,65,140,71,96,139,118,126,10,91,164,243, +114,200,98,188,3,67,55,242,77,59,47,133,12,194,57,24, +240,49,255,144,241,56,108,178,254,143,2,55,117,61,61,169, +233,200,93,77,110,126,58,91,199,195,178,171,222,189,96,112, +199,151,242,6,138,173,204,145,133,122,163,194,108,73,79,102, +250,106,91,99,131,240,14,14,253,204,53,197,56,6,18,44, +229,10,100,85,158,79,197,203,54,251,222,25,32,50,98,71, +178,170,207,175,99,101,145,220,235,4,153,153,171,138,253,205, +36,215,59,19,68,103,252,8,119,97,249,84,189,124,177,238, +137,67,43,51,100,37,158,168,181,11,208,23,221,254,87,130, +138,172,221,131,134,111,245,137,117,75,92,82,157,113,35,212, +4,229,89,84,246,205,51,167,20,4,104,136,86,120,40,119, +34,201,214,254,64,242,165,187,241,108,44,31,170,159,174,214, +55,208,108,109,15,44,222,186,17,110,194,250,40,122,243,195, +217,27,14,214,124,97,238,36,146,107,157,1,35,51,116,37, +191,184,245,42,68,23,252,239,7,161,31,184,190,155,198,94, +97,168,68,26,45,229,8,68,81,156,103,65,217,22,223,220, +115,132,160,0,75,177,130,73,157,71,67,187,50,93,182,223, +151,194,6,233,157,12,242,57,123,192,241,156,44,240,91,95, +66,155,48,63,146,93,253,110,21,139,155,174,222,183,192,100, +205,31,102,94,42,25,198,83,176,162,75,255,99,193,209,158, +78,212,217,53,238,136,82,57,48,113,115,213,177,183,24,228, +112,198,134,224,5,159,251,135,136,135,105,151,165,119,49,248, +225,239,61,1,104,130,246,108,34,255,182,145,118,74,74,48, +144,99,25,81,35,151,52,103,26,104,181,134,1,21,83,27, +19,7,87,126,75,75,34,178,102,15,59,174,149,6,66,45, +80,88,37,229,24,68,112,140,39,96,77,22,254,205,35,167, +53,20,40,169,194,120,9,102,114,234,67,234,35,234,229,138, +101,77,29,78,219,40,59,227,69,152,15,201,143,110,247,171, +81,77,118,254,11,67,39,242,108,43,111,164,152,194,24,9, +160,18,106,132,146,32,44,131,106,174,51,102,4,138,168,156, +155,128,62,233,238,60,19,74,135,224,6,175,253,132,180,65, +114,167,147,116,110,14,58,188,183,3,84,71,221,90,23,192, +47,124,157,47,195,109,90,125,97,237,20,148,104,161,199,56, +3,66,38,224,78,46,121,206,21,192,42,44,151,42,135,39, +118,45,59,232,245,142,4,85,89,63,71,13,90,186,17,111, +210,248,41,110,177,202,201,9,15,227,46,40,223,162,147,127, +222,24,49,32,97,82,228,225,214,173,112,81,246,199,147,179, +30,140,252,208,246,204,34,181,23,17,62,195,79,122,59,67, +69,210,174,73,199,231,242,225,250,109,42,125,134,157,212,114, +132,162,32,79,179,170,205,143,103,103,185,88,249,36,189,155, +193,46,111,175,40,212,19,149,118,67,218,34,153,215,75,18, +179,21,61,250,217,107,14,49,12,161,8,200,145,140,234,177, +203,216,27,12,246,120,99,198,160,128,75,185,3,73,151,230, +71,179,187,221,172,118,51,218,197,233,23,173,254,176,242,74, +74,49,128,97,24,69,97,158,36,117,27,93,231,207,48,147, +82,15,80,30,69,109,94,60,121,235,69,136,15,232,159,46, +214,63,81,108,103,174,40,214,51,145,116,107,94,48,185,243, +73,120,23,135,95,246,218,67,136,3,40,135,34,38,39,62, +172,191,162,84,15,92,222,93,97,174,36,22,43,157,132,115, +49,240,97,255,53,161,120,200,118,252,42,87,39,219,252,123, +70,144,136,169,137,201,139,47,239,173,0,81,17,183,83,85, +242,143,27,167,70,36,201,218,62,88,254,85,163,158,172,244, +19,214,70,193,153,30,218,156,121,160,244,10,70,117,216,109, +109,13,12,218,184,57,234,208,218,12,120,153,103,75,121,2, +213,84,231,220,0,180,65,115,183,145,117,122,76,51,172,165, +2,97,21,148,107,145,193,59,63,132,61,208,120,45,38,56, +206,147,160,46,171,239,172,17,67,18,162,5,30,235,141,8, +147,33,63,177,109,185,77,169,15,168,159,170,150,63,212,60, +101,42,108,150,190,197,38,231,63,48,124,163,207,188,83,66, +130,160,12,139,169,142,185,133,40,131,99,62,33,111,176,216, +235,12,25,137,163,42,237,135,164,71,51,187,213,45,118,57, +123,193,225,158,45,228,25,86,82,137,49,10,192,20,204,232, +20,159,216,183,204,164,213,19,150,70,69,217,30,95,204,123, +36,176,74,203,33,138,225,12,13,201,138,62,253,174,21,7, +90,174,81,70,198,232,0,223,241,163,220,141,100,83,255,83, +193,178,174,142,183,101,52,141,187,162,92,143,76,214,253,113, +228,164,134,35,53,21,57,187,193,109,95,45,107,232,80,222, +68,241,157,61,226,88,74,20,208,41,61,129,105,154,117,109, +60,28,187,137,237,203,101,203,125,74,92,80,189,117,33,252, +128,247,121,112,244,167,151,53,118,8,107,160,208,74,12,81, +8,39,96,76,6,252,204,55,229,60,4,58,168,247,42,64, +87,244,235,87,169,58,248,246,159,18,22,68,109,92,28,125, +233,109,12,29,200,187,44,188,155,195,14,107,173,0,80,1, +181,82,65,176,134,11,181,71,17,155,147,15,222,255,65,224, +135,190,231,6,161,29,152,186,153,238,218,115,136,96,24,71, +65,154,38,93,159,79,199,235,50,249,246,157,50,18,70,69, +216,14,93,205,111,102,185,90,217,32,191,179,69,60,79,139, +42,190,183,7,20,79,217,10,31,229,111,52,153,251,139,72, +159,101,103,189,24,241,32,237,147,228,110,39,171,252,156,54, +80,110,69,138,46,252,159,7,70,111,120,88,119,197,185,22, +24,172,241,66,204,65,132,199,112,131,214,110,64,219,52,251, +218,89,40,54,50,79,151,234,135,171,183,45,180,25,243,2, +201,149,206,194,177,153,248,186,94,158,88,181,228,33,215,49, +179,80,109,116,156,47,193,77,94,127,73,105,6,180,76,163, +173,156,145,32,42,227,102,168,75,234,51,234,196,154,37,108, +137,78,250,57,107,192,208,140,108,209,207,95,99,138,96,28, +7,73,158,118,85,186,15,143,239,230,177,211,88,42,20,22, +73,189,70,17,153,179,11,220,215,197,242,167,154,229,108,5, +143,250,182,154,198,92,65,172,70,50,169,247,40,96,83,246, +195,211,187,26,220,244,245,182,132,38,97,95,52,251,219,73, +42,55,38,13,158,250,149,170,130,127,253,40,117,3,221,214, +215,208,162,140,143,225,7,189,223,129,162,43,255,165,161,81, +89,54,215,31,83,14,67,44,66,122,32,243,114,201,114,190, +2,87,117,251,93,41,46,176,94,139,8,158,241,37,188,137, +227,43,121,197,165,214,33,176,65,123,55,129,125,218,92,121, +44,53,10,201,132,222,225,160,205,155,39,78,173,72,208,149, +253,242,212,170,4,31,249,175,13,133,75,178,179,95,156,122, +145,226,11,123,167,129,84,75,28,82,25,49,35,81,84,231, +221,16,182,64,103,245,152,101,104,77,6,254,236,51,231,20, +128,40,136,211,40,42,243,102,137,91,170,18,126,196,187,52, +60,170,219,238,90,115,128,225,24,77,224,158,46,212,31,85, +110,79,42,58,246,23,147,30,207,204,82,181,240,97,254,37, +163,121,220,52,245,58,69,38,238,174,50,119,22,137,189,202, +208,153,60,250,218,91,8,50,48,103,19,248,167,143,181,71, +16,139,145,14,202,189,72,240,149,191,210,84,232,44,30,187, +141,173,195,97,155,117,111,28,24,185,161,105,217,69,239,127, +32,248,194,223,121,34,212,6,197,93,86,222,73,33,135,48, +6,2,44,196,26,36,116,10,79,228,218,102,216,75,13,67, +42,34,118,38,139,254,254,18,210,4,233,153,76,250,61,43, +200,212,220,100,244,143,23,103,94,40,57,194,81,152,38,89, +223,71,195,187,58,220,182,213,54,198,14,96,29,22,91,157, +99,3,241,22,141,252,210,214,200,32,157,147,3,30,231,77, +16,159,209,39,222,173,97,65,213,214,199,208,131,156,207,192, +147,189,254,144,242,8,106,177,194,73,25,7,67,62,98,95, +50,155,215,79,82,187,17,109,242,252,43,70,53,216,233,45, +13,137,138,186,189,174,144,87,88,42,21,6,75,188,82,83, +144,163,25,221,226,151,187,150,28,228,120,70,150,232,165,143, +177,7,24,143,193,6,239,253,0,244,65,247,247,145,240,42, +78,183,232,229,143,53,71,24,10,145,4,107,185,64,121,21, +165,123,240,240,239,30,49,44,161,74,232,17,206,194,176,137, +250,187,74,220,81,165,246,32,226,99,250,97,235,117,136,108, +216,95,77,106,62,50,95,151,203,151,235,150,185,180,56,226, +82,234,0,218,161,169,217,201,46,127,175,9,196,83,180,226, +67,251,51,201,244,222,6,208,13,125,203,77,74,63,96,125, +22,157,253,227,196,137,21,75,154,50,29,182,91,215,194,131, +185,159,136,182,121,246,148,163,16,77,240,158,15,196,95,116, +250,79,11,43,166,52,6,10,172,212,18,132,100,64,207,116, +210,206,73,1,135,114,38,130,110,236,27,102,86,170,9,206, +243,160,232,203,111,107,105,64,212,196,229,213,149,246,66,194, +161,152,201,168,31,171,142,188,213,34,134,39,116,13,63,234, +221,10,22,117,125,61,45,169,200,216,29,108,250,126,27,74, +151,224,39,191,189,165,32,65,83,182,195,87,251,26,89,164, +247,50,192,102,236,11,102,119,186,73,239,103,160,201,218,63, +72,252,84,183,220,165,228,1,215,115,147,208,47,92,157,109, +227,237,24,85,96,175,54,52,46,139,238,254,51,194,68,200, +13,76,219,44,123,235,65,200,7,236,207,38,243,127,25,104, +179,230,13,19,43,151,36,103,59,120,245,167,149,21,114,10, +67,36,194,106,40,83,98,131,242,46,10,255,228,177,215,24, +34,16,70,65,152,6,89,157,103,67,249,18,221,244,247,150, +128,36,73,219,38,219,255,75,64,147,180,111,146,249,189,44, +176,91,219,2,155,181,111,144,217,185,46,152,223,201,34,191, +183,5,52,75,219,34,155,247,79,16,155,145,47,218,253,105, +100,149,158,195,4,203,185,10,216,149,237,242,245,186,68,62, +109,175,44,148,27,145,38,75,255,98,209,211,159,90,150,208, +37,252,137,103,107,121,64,245,212,165,244,1,246,99,211,241, +187,92,188,124,179,206,141,65,3,183,118,5,186,170,223,175, +66,117,209,253,127,4,184,136,251,169,104,217,71,207,123,34, +208,70,205,89,6,214,108,97,207,52,210,74,9,1,2,34, +36,6,42,172,150,50,4,38,104,206,54,240,110,15,43,174, +180,22,2,12,196,88,4,244,72,103,229,152,68,120,13,39, +106,236,18,246,68,163,189,156,176,48,106,194,242,168,106,251, +99,201,81,142,70,116,201,127,110,24,90,145,161,59,249,228, +189,23,0,46,224,94,46,88,222,85,225,190,44,182,59,215, +4,227,57,88,240,181,191,144,116,104,110,54,186,207,143,99, +39,177,92,169,44,152,219,137,42,187,231,13,17,11,147,38, +79,191,106,213,131,151,127,214,152,33,40,193,66,174,97,70, +165,216,192,188,77,162,191,190,148,54,64,110,100,154,110,221, +11,7,103,126,40,123,226,209,218,14,88,157,101,99,253,16, +245,112,229,182,164,38,35,127,180,185,243,72,104,21,134,75, +180,211,83,154,2,29,213,107,23,161,63,184,252,187,70,28, +73,169,6,56,141,163,34,109,151,172,231,35,241,85,189,126, +145,234,139,107,175,33,68,1,156,194,17,153,178,27,222,214, +209,176,174,138,247,109,48,221,179,135,28,199,72,2,181,84, +33,188,128,115,57,112,113,247,149,177,50,72,230,244,130,198, +109,81,205,119,230,136,66,57,17,97,51,244,37,183,57,245, +32,229,19,244,102,135,187,182,28,166,88,198,212,192,164,205, +147,167,94,165,232,192,223,125,98,220,2,149,85,115,158,1, +37,83,120,35,199,52,194,74,40,17,66,3,176,6,11,189, +198,17,145,50,11,214,118,193,250,46,26,255,197,161,151,57, +182,16,103,80,200,37,204,137,4,91,185,35,73,213,198,199, +241,147,220,238,84,147,156,239,192,209,157,126,210,218,9,40, +147,98,15,51,46,133,14,226,61,26,216,181,237,176,213,58, +6,22,108,237,14,52,93,187,15,141,207,226,179,251,220,56, +52,50,75,215,226,131,251,191,8,244,81,247,214,129,176,11, +218,183,201,244,223,22,210,12,105,137,68,90,45,97,72,68, +212,204,101,197,157,86,82,136,33,8,193,0,142,225,4,141, +217,130,158,237,228,149,151,82,6,192,12,76,217,12,127,233, +105,76,21,204,235,36,153,219,139,10,191,229,37,149,25,179, +2,77,213,206,71,225,155,124,254,30,19,12,231,104,64,215, +244,227,214,169,48,89,242,151,155,150,94,196,248,4,190,233, +231,173,17,65,50,166,7,54,111,159,40,183,35,85,21,255, +219,65,170,39,46,173,142,176,21,58,138,215,108,98,255,50, +209,118,207,26,50,20,39,89,220,119,197,184,6,26,173,229, +0,197,81,150,198,69,209,159,95,198,218,32,184,195,75,59, +35,69,20,206,201,0,159,241,39,156,141,225,3,253,215,133, +242,35,218,229,233,85,141,126,242,218,75,8,19,32,39,50, +108,167,174,164,23,51,30,133,109,210,253,121,100,180,142,131, +37,95,185,43,201,197,206,103,225,217,92,126,92,59,13,165, +74,224,145,222,202,16,153,176,59,218,212,249,52,188,170,211, +111,90,121,33,229,16,196,96,132,135,112,7,150,110,197,139, +54,127,158,25,165,98,96,195,246,234,66,251,49,233,240,220, +46,84,31,93,239,79,32,155,242,31,26,158,213,101,246,173, +51,97,116,132,175,240,85,190,78,151,233,183,173,180,17,114, +2,195,52,202,202,56,25,226,19,250,134,155,181,110,128,219, +184,58,218,214,217,48,190,130,87,125,122,93,35,143,180,86, +2,136,132,88,129,164,74,227,161,216,201,44,95,171,11,236, +215,166,194,103,249,89,109,102,188,10,211,37,251,249,105,108, +21,142,203,164,219,243,138,72,157,69,99,191,48,117,50,205, +183,230,4,131,57,158,144,53,120,232,119,174,8,214,113,177, +244,41,118,49,251,209,233,62,61,174,153,198,90,33,160,64, +74,37,192,72,12,85,72,47,100,28,14,217,140,127,225,232, +76,31,109,239,44,16,91,145,163,27,253,230,149,147,18,14, +196,92,68,252,76,55,237,189,4,48,9,243,34,201,215,238, +66,243,177,249,248,124,62,30,159,205,231,231,177,209,120,46, +22,62,205,175,102,53,155,217,175,78,181,201,241,143,28,215, +72,35,165,20,0,40,128,82,40,32,82,98,129,210,42,8, +215,96,163,247,60,32,122,226,211,250,10,90,181,225,113,221, +52,247,26,65,36,198,42,32,87,50,139,215,110,66,251,48, +249,242,221,58,22,22,77,253,78,21,201,187,46,156,159,193, +38,239,191,32,116,3,223,246,211,210,138,8,157,193,35,191, +181,37,48,73,243,166,137,215,107,18,241,53,189,184,241,106, +76,19,172,231,34,225,87,188,106,211,227,155,121,174,20,22, +72,173,68,16,141,241,2,204,197,196,199,245,211,212,234,4, +155,185,175,136,213,73,54,247,31,17,46,195,110,106,123,98, +209,210,143,88,151,196,103,245,153,117,106,76,18,188,229,35, +245,21,181,122,193,226,174,43,231,37,144,73,185,7,9,159, +226,23,187,158,157,228,114,231,146,224,44,15,171,174,188,151, +2,6,101,92,12,125,200,125,76,60,92,187,13,173,203,224, +155,127,206,24,16,48,33,115,112,225,247,188,32,114,99,211, +240,171,94,189,104,241,199,157,83,2,130,36,76,139,44,222, +187,1,108,195,238,106,115,227,209,216,46,92,159,77,231,239, +48,209,114,143,18,54,68,47,124,156,63,193,108,78,63,104, +253,6,149,93,243,142,9,133,67,50,163,87,60,106,219,98, +155,115,15,16,30,193,45,94,185,41,233,193,204,79,101,203, +124,90,94,81,169,55,40,236,146,246,76,34,189,150,17,52, +98,75,114,178,195,95,123,10,81,4,231,120,64,246,228,163, +247,61,48,120,227,199,184,3,74,167,224,68,143,125,198,156, +64,48,133,51,50,68,39,252,140,55,97,124,4,191,248,245, +174,4,23,121,191,5,37,91,248,51,207,148,210,0,168,129, +74,171,33,76,129,140,202,177,137,248,155,78,222,121,33,228, +0,198,97,144,197,121,23,132,111,240,217,127,78,24,24,177, +33,121,209,229,255,53,160,104,202,119,232,104,94,55,201,253, +78,20,217,185,47,136,221,200,54,253,190,21,38,74,238,112, +210,198,201,17,143,210,54,200,238,124,19,206,199,224,131,255, +255,}; diff --git a/MCUME_pico/pico800/pia.c b/MCUME_pico/pico800/pia.c new file mode 100644 index 0000000..9dfd9ce --- /dev/null +++ b/MCUME_pico/pico800/pia.c @@ -0,0 +1,71 @@ +#include + +#include "atari.h" +#include "cpu.h" +#include "pia.h" + +UBYTE PACTL; +UBYTE PBCTL; +UBYTE PORTA; +UBYTE PORTB; + + +static UBYTE PORTA_mask = 0xff; +static UBYTE PORTB_mask = 0xff; + +void PIA_Initialise(void) +{ + PORTA = 0xff; + PORTB = 0xff; +} + +UBYTE PIA_GetByte(UWORD addr) +{ + UBYTE byte; + + addr &= 0x03; + switch (addr) { + case _PACTL: + byte = PACTL; + break; + case _PBCTL: + byte = PBCTL; + break; + case _PORTA: + byte = Atari_PORT(0); + byte &= PORTA_mask; + break; + case _PORTB: + byte = Atari_PORT(1); + byte &= PORTB_mask; + break; + } + + return byte; +} + +int PIA_PutByte(UWORD addr, UBYTE byte) +{ + addr &= 0xff03; + + switch (addr) { + case _PACTL: + PACTL = byte; + break; + case _PBCTL: + PBCTL = byte; + break; + case _PORTA: + if (!(PACTL & 0x04)) + PORTA_mask = ~byte; + break; + case _PORTB: + // if ((byte == 0) && (machine == AtariXL || machine == AtariXE)) + // break; /* special hack for old Atari800 games like is Tapper, for example */ + if (!(PBCTL & 0x04)) + PORTB_mask = ~byte; + break; + } + + return FALSE; +} diff --git a/MCUME_pico/pico800/pia.h b/MCUME_pico/pico800/pia.h new file mode 100644 index 0000000..24080a5 --- /dev/null +++ b/MCUME_pico/pico800/pia.h @@ -0,0 +1,22 @@ +#ifndef __PIA__ +#define __PIA__ + +#include "atari.h" + +#define _PORTA 0x00 +#define _PORTB 0x01 +#define _PACTL 0x02 +#define _PBCTL 0x03 + +extern UBYTE PACTL; +extern UBYTE PBCTL; +extern UBYTE PORTA; +extern UBYTE PORTB; + +extern int xe_bank; + +void PIA_Initialise(void); +UBYTE PIA_GetByte(UWORD addr); +int PIA_PutByte(UWORD addr, UBYTE byte); + +#endif diff --git a/MCUME_pico/pico800/pico800.cpp b/MCUME_pico/pico800/pico800.cpp new file mode 100644 index 0000000..37daeb5 --- /dev/null +++ b/MCUME_pico/pico800/pico800.cpp @@ -0,0 +1,129 @@ +#include "pico.h" +#include "pico/stdlib.h" + +extern "C" { + #include "iopins.h" + #include "emuapi.h" +} +#include "keyboard_osd.h" +#include "vga_t_dma.h" +extern "C" { +#include "atari800.h" +} +#include + + +TFT_T_DMA tft; +static int skip=0; + +int main(void) { + stdio_init_all(); + tft.begin(VGA_MODE_320x240); + emu_init(); + while (true) { + if (menuActive()) { + uint16_t bClick = emu_DebounceLocalKeys(); + int action = handleMenu(bClick); + char * filename = menuSelection(); + if (action == ACTION_RUNTFT) { + toggleMenu(false); + emu_start(); + emu_Init(filename); + tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) ); + tft.startDMA(); + } + tft.waitSync(); + } + else { + emu_Step(); + uint16_t bClick = emu_DebounceLocalKeys(); + emu_Input(bClick); + } + //int c = getchar_timeout_us(0); + //switch (c) { + // case ' ': + // printf("test: %d\n", 1); + // break; + //} + } +} + +static unsigned char palette8[PALETTE_SIZE]; + +void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index) +{ + if (index> 3); + i &= 7; + byte = (UBYTE) ((ptr[0] >> i) + (ptr[1] << (8 - i))); + } + } + break; + case POKEY_OFFSET_SERIN: + byte = POKEY_SERIN; +#ifdef DEBUG3 + printf("SERIO: SERIN read, bytevalue %02x\n", POKEY_SERIN); +#endif +#ifdef SERIO_SOUND + POKEYSND_UpdateSerio(0,byte); +#endif + break; + case POKEY_OFFSET_IRQST: + byte = POKEY_IRQST; + break; + case POKEY_OFFSET_SKSTAT: +#if SKIP + byte = POKEY_SKSTAT + (CASSETTE_IOLineStatus() << 4); +#else + byte = POKEY_SKSTAT; +#endif +#ifdef VOICEBOX + if (VOICEBOX_enabled) { + byte = POKEY_SKSTAT + (VOTRAXSND_busy << 4); + } +#endif + break; + } + + return byte; +} + +static void Update_Counter(int chan_mask); + +static int POKEY_siocheck(void) +{ + return (((POKEY_AUDF[POKEY_CHAN3] == 0x28 || POKEY_AUDF[POKEY_CHAN3] == 0x10 + || POKEY_AUDF[POKEY_CHAN3] == 0x08 || POKEY_AUDF[POKEY_CHAN3] == 0x0a) + && POKEY_AUDF[POKEY_CHAN4] == 0x00) /* intelligent peripherals speeds */ + || (POKEY_SKCTL & 0x78) == 0x28) /* cassette save mode */ + && (POKEY_AUDCTL[0] & 0x28) == 0x28; +} + +#ifndef SOUND_GAIN /* sound gain can be pre-defined in the configure/Makefile */ +#define SOUND_GAIN 4 +#endif + +#ifndef SOUND +#define POKEYSND_Update(addr, val, chip, gain) +#else +//#define POKEYSND_Update(addr, val, chip, gain) if (chip == 0) emu_sndPlaySound((chip*4)+addr, gain*16, val*16) +#endif + +void POKEY_PutByte(UWORD addr, UBYTE byte) +{ +#ifdef STEREO_SOUND + addr &= POKEYSND_stereo_enabled ? 0x1f : 0x0f; +#else + addr &= 0x0f; +#endif + switch (addr) { + case POKEY_OFFSET_AUDC1: + POKEY_AUDC[POKEY_CHAN1] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC1, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDC2: + POKEY_AUDC[POKEY_CHAN2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC2, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDC3: + POKEY_AUDC[POKEY_CHAN3] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC3, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDC4: + POKEY_AUDC[POKEY_CHAN4] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC4, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDCTL: + POKEY_AUDCTL[0] = byte; + + /* determine the base multiplier for the 'div by n' calculations */ + if (byte & POKEY_CLOCK_15) + POKEY_Base_mult[0] = POKEY_DIV_15; + else + POKEY_Base_mult[0] = POKEY_DIV_64; + + Update_Counter((1 << POKEY_CHAN1) | (1 << POKEY_CHAN2) | (1 << POKEY_CHAN3) | (1 << POKEY_CHAN4)); + POKEYSND_Update(POKEY_OFFSET_AUDCTL, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF1: + POKEY_AUDF[POKEY_CHAN1] = byte; + Update_Counter((POKEY_AUDCTL[0] & POKEY_CH1_CH2) ? ((1 << POKEY_CHAN2) | (1 << POKEY_CHAN1)) : (1 << POKEY_CHAN1)); + POKEYSND_Update(POKEY_OFFSET_AUDF1, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF2: + POKEY_AUDF[POKEY_CHAN2] = byte; + Update_Counter(1 << POKEY_CHAN2); + POKEYSND_Update(POKEY_OFFSET_AUDF2, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF3: + POKEY_AUDF[POKEY_CHAN3] = byte; + Update_Counter((POKEY_AUDCTL[0] & POKEY_CH3_CH4) ? ((1 << POKEY_CHAN4) | (1 << POKEY_CHAN3)) : (1 << POKEY_CHAN3)); + POKEYSND_Update(POKEY_OFFSET_AUDF3, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF4: + POKEY_AUDF[POKEY_CHAN4] = byte; + Update_Counter(1 << POKEY_CHAN4); + POKEYSND_Update(POKEY_OFFSET_AUDF4, byte, 0, SOUND_GAIN); + break; + case POKEY_OFFSET_IRQEN: + POKEY_IRQEN = byte; +#ifdef DEBUG1 + printf("WR: IRQEN = %x, PC = %x\n", POKEY_IRQEN, PC); +#endif + POKEY_IRQST |= ~byte & 0xf7; /* Reset disabled IRQs except XMTDONE */ +#if SKIP + if ((~POKEY_IRQST & POKEY_IRQEN) == 0 && PBI_IRQ == 0 && PIA_IRQ == 0) +#else + if ((~POKEY_IRQST & POKEY_IRQEN) == 0) +#endif + { + CPU_IRQ = 0; + } + else { + CPU_GenerateIRQ(); + } + break; + case POKEY_OFFSET_SKRES: + POKEY_SKSTAT |= 0xe0; + break; + case POKEY_OFFSET_POTGO: + if (!(POKEY_SKCTL & 4)) + pot_scanline = 0; /* slow pot mode */ + break; + case POKEY_OFFSET_SEROUT: +#ifdef VOICEBOX + VOICEBOX_SEROUTPutByte(byte); +#endif + if ((POKEY_SKCTL & 0x70) == 0x20 && POKEY_siocheck()) + SIO_PutByte(byte); + /* check if cassette 2-tone mode has been enabled */ + if ((POKEY_SKCTL & 0x08) == 0x00) { + /* intelligent device */ + POKEY_DELAYED_SEROUT_IRQ = SIO_SEROUT_INTERVAL; + POKEY_IRQST |= 0x08; + POKEY_DELAYED_XMTDONE_IRQ = SIO_XMTDONE_INTERVAL; + } + else { + /* cassette */ + /* some savers patch the cassette baud rate, so we evaluate it here */ + /* scanlines per second*10 bit*audiofrequency/(1.79 MHz/2) */ + POKEY_DELAYED_SEROUT_IRQ = 312*50*10*(POKEY_AUDF[POKEY_CHAN3] + POKEY_AUDF[POKEY_CHAN4]*0x100)/895000; + /* safety check */ + if (POKEY_DELAYED_SEROUT_IRQ >= 3) { + POKEY_IRQST |= 0x08; + POKEY_DELAYED_XMTDONE_IRQ = 2*POKEY_DELAYED_SEROUT_IRQ - 2; + } + else { + POKEY_DELAYED_SEROUT_IRQ = 0; + POKEY_DELAYED_XMTDONE_IRQ = 0; + } + }; +#ifdef SERIO_SOUND + POKEYSND_UpdateSerio(1, byte); +#endif + break; + case POKEY_OFFSET_STIMER: + POKEY_DivNIRQ[POKEY_CHAN1] = POKEY_DivNMax[POKEY_CHAN1]; + POKEY_DivNIRQ[POKEY_CHAN2] = POKEY_DivNMax[POKEY_CHAN2]; + POKEY_DivNIRQ[POKEY_CHAN4] = POKEY_DivNMax[POKEY_CHAN4]; + POKEYSND_Update(POKEY_OFFSET_STIMER, byte, 0, SOUND_GAIN); +#ifdef DEBUG1 + printf("WR: STIMER = %x\n", byte); +#endif + break; + case POKEY_OFFSET_SKCTL: +#ifdef VOICEBOX + VOICEBOX_SKCTLPutByte(byte); +#endif + POKEY_SKCTL = byte; + POKEYSND_Update(POKEY_OFFSET_SKCTL, byte, 0, SOUND_GAIN); + if (byte & 4) + pot_scanline = 228; /* fast pot mode - return results immediately */ + if ((byte & 0x03) == 0) { + /* POKEY reset. */ + /* Stop serial IO. */ + POKEY_DELAYED_SERIN_IRQ = 0; + POKEY_DELAYED_SEROUT_IRQ = 0; + POKEY_DELAYED_XMTDONE_IRQ = 0; +#if SKIP + CASSETTE_ResetPOKEY(); +#endif + /* TODO other registers should also be reset. */ + } + break; +#ifdef STEREO_SOUND + case POKEY_OFFSET_AUDC1 + POKEY_OFFSET_POKEY2: + POKEY_AUDC[POKEY_CHAN1 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC1, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDC2 + POKEY_OFFSET_POKEY2: + POKEY_AUDC[POKEY_CHAN2 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC2, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDC3 + POKEY_OFFSET_POKEY2: + POKEY_AUDC[POKEY_CHAN3 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC3, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDC4 + POKEY_OFFSET_POKEY2: + POKEY_AUDC[POKEY_CHAN4 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDC4, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDCTL + POKEY_OFFSET_POKEY2: + POKEY_AUDCTL[1] = byte; + /* determine the base multiplier for the 'div by n' calculations */ + if (byte & POKEY_CLOCK_15) + POKEY_Base_mult[1] = POKEY_DIV_15; + else + POKEY_Base_mult[1] = POKEY_DIV_64; + + POKEYSND_Update(POKEY_OFFSET_AUDCTL, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF1 + POKEY_OFFSET_POKEY2: + POKEY_AUDF[POKEY_CHAN1 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDF1, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF2 + POKEY_OFFSET_POKEY2: + POKEY_AUDF[POKEY_CHAN2 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDF2, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF3 + POKEY_OFFSET_POKEY2: + POKEY_AUDF[POKEY_CHAN3 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDF3, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_AUDF4 + POKEY_OFFSET_POKEY2: + POKEY_AUDF[POKEY_CHAN4 + POKEY_CHIP2] = byte; + POKEYSND_Update(POKEY_OFFSET_AUDF4, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_STIMER + POKEY_OFFSET_POKEY2: + POKEYSND_Update(POKEY_OFFSET_STIMER, byte, 1, SOUND_GAIN); + break; + case POKEY_OFFSET_SKCTL + POKEY_OFFSET_POKEY2: + POKEYSND_Update(POKEY_OFFSET_SKCTL, byte, 1, SOUND_GAIN); + break; +#endif + } +} + +int POKEY_Initialise(void) +{ + int i; + ULONG reg; + + /* Initialise Serial Port Interrupts */ + POKEY_DELAYED_SERIN_IRQ = 0; + POKEY_DELAYED_SEROUT_IRQ = 0; + POKEY_DELAYED_XMTDONE_IRQ = 0; + + POKEY_KBCODE = 0xff; + POKEY_SERIN = 0x00; /* or 0xff ? */ + POKEY_IRQST = 0xff; + POKEY_IRQEN = 0x00; + POKEY_SKSTAT = 0xef; + POKEY_SKCTL = 0x00; + + for (i = 0; i < (POKEY_MAXPOKEYS * 4); i++) { + POKEY_AUDC[i] = 0; + POKEY_AUDF[i] = 0; + } + + for (i = 0; i < POKEY_MAXPOKEYS; i++) { + POKEY_AUDCTL[i] = 0; + POKEY_Base_mult[i] = POKEY_DIV_64; + } + + for (i = 0; i < 4; i++) + POKEY_DivNIRQ[i] = POKEY_DivNMax[i] = 0; + + pot_scanline = 0; + +#if SKIP + /* initialise poly9_lookup */ + reg = 0x1ff; + for (i = 0; i < POKEY_POLY9_SIZE; i++) { + reg = ((((reg >> 5) ^ reg) & 1) << 8) + (reg >> 1); + POKEY_poly9_lookup[i] = (UBYTE) reg; + } + /* initialise poly17_lookup */ + reg = 0x1ffff; + for (i = 0; i < POKEY_POLY17_SIZE; i++) { + reg = ((((reg >> 5) ^ reg) & 0xff) << 9) + (reg >> 8); + POKEY_poly17_lookup[i] = (UBYTE) (reg >> 1); + } +#endif + +#ifndef BASIC +#if SKIP + if (INPUT_Playingback()) { + random_scanline_counter = INPUT_PlaybackInt(); + } + else +#endif +#endif + { + random_scanline_counter = +#ifdef HAVE_WINDOWS_H + GetTickCount() % POKEY_POLY17_SIZE; +#elif defined(HAVE_TIME) + time(NULL) % POKEY_POLY17_SIZE; +#else + 0; +#endif + } +#ifndef BASIC +#if SKIP + if (INPUT_Recording()) { + INPUT_RecordInt(random_scanline_counter); + } +#endif +#endif + + return TRUE; +} + +void POKEY_Frame(void) +{ + random_scanline_counter %= (POKEY_AUDCTL[0] & POKEY_POLY9) ? POKEY_POLY9_SIZE : POKEY_POLY17_SIZE; +} + +/*************************************************************************** + ** Generate POKEY Timer IRQs if required ** + ** called on a per-scanline basis, not very precise, but good enough ** + ** for most applications ** + ***************************************************************************/ + +void POKEY_Scanline(void) +{ +#ifdef POKEY_UPDATE + pokey_update(); +#endif + +#ifdef VOL_ONLY_SOUND + POKEYSND_UpdateVolOnly(); +#endif + +#ifndef BASIC + INPUT_Scanline(); /* Handle Amiga and ST mice. */ + /* It's not a part of POKEY emulation, */ + /* but it looks to be the best place to put it. */ +#endif + + /* on nonpatched i/o-operation, enable the cassette timing */ +#if SKIP + if (!ESC_enable_sio_patch) { + if (CASSETTE_AddScanLine()) + POKEY_DELAYED_SERIN_IRQ = 1; + } +#endif + if ((POKEY_SKCTL & 0x03) == 0) + /* Don't process timers when POKEY is in reset mode. */ + return; + + if (pot_scanline < 228) + pot_scanline++; + + random_scanline_counter += ANTIC_LINE_C; + + if (POKEY_DELAYED_SERIN_IRQ > 0) { + if (--POKEY_DELAYED_SERIN_IRQ == 0) { + /* Load a byte to SERIN - even when the IRQ is disabled. */ + POKEY_SERIN = SIO_GetByte(); + if (POKEY_IRQEN & 0x20) { + if (POKEY_IRQST & 0x20) { + POKEY_IRQST &= 0xdf; +#ifdef DEBUG2 + printf("SERIO: SERIN Interrupt triggered, bytevalue %02x\n", POKEY_SERIN); +#endif + } + else { + POKEY_SKSTAT &= 0xdf; +#ifdef DEBUG2 + printf("SERIO: SERIN Interrupt triggered, bytevalue %02x\n", POKEY_SERIN); +#endif + } + CPU_GenerateIRQ(); + } +#ifdef DEBUG2 + else { + printf("SERIO: SERIN Interrupt missed, bytevalue %02x\n", POKEY_SERIN); + } +#endif + } + } + + if (POKEY_DELAYED_SEROUT_IRQ > 0) { + if (--POKEY_DELAYED_SEROUT_IRQ == 0) { + if (POKEY_IRQEN & 0x10) { +#ifdef DEBUG2 + printf("SERIO: SEROUT Interrupt triggered\n"); +#endif + POKEY_IRQST &= 0xef; + CPU_GenerateIRQ(); + } +#ifdef DEBUG2 + else { + printf("SERIO: SEROUT Interrupt missed\n"); + } +#endif + } + } + + if (POKEY_DELAYED_XMTDONE_IRQ > 0) + if (--POKEY_DELAYED_XMTDONE_IRQ == 0) { + POKEY_IRQST &= 0xf7; + if (POKEY_IRQEN & 0x08) { +#ifdef DEBUG2 + printf("SERIO: XMTDONE Interrupt triggered\n"); +#endif + CPU_GenerateIRQ(); + } +#ifdef DEBUG2 + else + printf("SERIO: XMTDONE Interrupt missed\n"); +#endif + } + + if ((POKEY_DivNIRQ[POKEY_CHAN1] -= ANTIC_LINE_C) < 0 ) { + POKEY_DivNIRQ[POKEY_CHAN1] += POKEY_DivNMax[POKEY_CHAN1]; + if (POKEY_IRQEN & 0x01) { + POKEY_IRQST &= 0xfe; + CPU_GenerateIRQ(); + } + } + + if ((POKEY_DivNIRQ[POKEY_CHAN2] -= ANTIC_LINE_C) < 0 ) { + POKEY_DivNIRQ[POKEY_CHAN2] += POKEY_DivNMax[POKEY_CHAN2]; + if (POKEY_IRQEN & 0x02) { + POKEY_IRQST &= 0xfd; + CPU_GenerateIRQ(); + } + } + + if ((POKEY_DivNIRQ[POKEY_CHAN4] -= ANTIC_LINE_C) < 0 ) { + POKEY_DivNIRQ[POKEY_CHAN4] += POKEY_DivNMax[POKEY_CHAN4]; + if (POKEY_IRQEN & 0x04) { + POKEY_IRQST &= 0xfb; + CPU_GenerateIRQ(); + } + } +} + +/*****************************************************************************/ +/* Module: Update_Counter() */ +/* Purpose: To process the latest control values stored in the AUDF, AUDC, */ +/* and AUDCTL registers. It pre-calculates as much information as */ +/* possible for better performance. This routine has been added */ +/* here again as I need the precise frequency for the pokey timers */ +/* again. The pokey emulation is therefore somewhat sub-optimal */ +/* since the actual pokey emulation should grab the frequency values */ +/* directly from here instead of calculating them again. */ +/* */ +/* Author: Ron Fries,Thomas Richter */ +/* Date: March 27, 1998 */ +/* */ +/* Inputs: chan_mask: Channel mask, one bit per channel. */ +/* The channels that need to be updated */ +/* */ +/* Outputs: Adjusts local globals - no return value */ +/* */ +/*****************************************************************************/ + +static void Update_Counter(int chan_mask) +{ + +/************************************************************/ +/* As defined in the manual, the exact Div_n_cnt values are */ +/* different depending on the frequency and resolution: */ +/* 64 kHz or 15 kHz - AUDF + 1 */ +/* 1 MHz, 8-bit - AUDF + 4 */ +/* 1 MHz, 16-bit - AUDF[CHAN1]+256*AUDF[CHAN2] + 7 */ +/************************************************************/ + + /* only reset the channels that have changed */ + + if (chan_mask & (1 << POKEY_CHAN1)) { + /* process channel 1 frequency */ + if (POKEY_AUDCTL[0] & POKEY_CH1_179) + POKEY_DivNMax[POKEY_CHAN1] = POKEY_AUDF[POKEY_CHAN1] + 4; + else + POKEY_DivNMax[POKEY_CHAN1] = (POKEY_AUDF[POKEY_CHAN1] + 1) * POKEY_Base_mult[0]; + if (POKEY_DivNMax[POKEY_CHAN1] < ANTIC_LINE_C) + POKEY_DivNMax[POKEY_CHAN1] = ANTIC_LINE_C; + } + + if (chan_mask & (1 << POKEY_CHAN2)) { + /* process channel 2 frequency */ + if (POKEY_AUDCTL[0] & POKEY_CH1_CH2) { + if (POKEY_AUDCTL[0] & POKEY_CH1_179) + POKEY_DivNMax[POKEY_CHAN2] = POKEY_AUDF[POKEY_CHAN2] * 256 + POKEY_AUDF[POKEY_CHAN1] + 7; + else + POKEY_DivNMax[POKEY_CHAN2] = (POKEY_AUDF[POKEY_CHAN2] * 256 + POKEY_AUDF[POKEY_CHAN1] + 1) * POKEY_Base_mult[0]; + } + else + POKEY_DivNMax[POKEY_CHAN2] = (POKEY_AUDF[POKEY_CHAN2] + 1) * POKEY_Base_mult[0]; + if (POKEY_DivNMax[POKEY_CHAN2] < ANTIC_LINE_C) + POKEY_DivNMax[POKEY_CHAN2] = ANTIC_LINE_C; + } + + if (chan_mask & (1 << POKEY_CHAN4)) { + /* process channel 4 frequency */ + if (POKEY_AUDCTL[0] & POKEY_CH3_CH4) { + if (POKEY_AUDCTL[0] & POKEY_CH3_179) + POKEY_DivNMax[POKEY_CHAN4] = POKEY_AUDF[POKEY_CHAN4] * 256 + POKEY_AUDF[POKEY_CHAN3] + 7; + else + POKEY_DivNMax[POKEY_CHAN4] = (POKEY_AUDF[POKEY_CHAN4] * 256 + POKEY_AUDF[POKEY_CHAN3] + 1) * POKEY_Base_mult[0]; + } + else + POKEY_DivNMax[POKEY_CHAN4] = (POKEY_AUDF[POKEY_CHAN4] + 1) * POKEY_Base_mult[0]; + if (POKEY_DivNMax[POKEY_CHAN4] < ANTIC_LINE_C) + POKEY_DivNMax[POKEY_CHAN4] = ANTIC_LINE_C; + } +} + +#ifndef BASIC + +void POKEY_StateSave(void) +{ + int shift_key = 0; + int keypressed = 0; + + StateSav_SaveUBYTE(&POKEY_KBCODE, 1); + StateSav_SaveUBYTE(&POKEY_IRQST, 1); + StateSav_SaveUBYTE(&POKEY_IRQEN, 1); + StateSav_SaveUBYTE(&POKEY_SKCTL, 1); + + StateSav_SaveINT(&shift_key, 1); + StateSav_SaveINT(&keypressed, 1); + StateSav_SaveINT(&POKEY_DELAYED_SERIN_IRQ, 1); + StateSav_SaveINT(&POKEY_DELAYED_SEROUT_IRQ, 1); + StateSav_SaveINT(&POKEY_DELAYED_XMTDONE_IRQ, 1); + + StateSav_SaveUBYTE(&POKEY_AUDF[0], 4); + StateSav_SaveUBYTE(&POKEY_AUDC[0], 4); + StateSav_SaveUBYTE(&POKEY_AUDCTL[0], 1); + + StateSav_SaveINT(&POKEY_DivNIRQ[0], 4); + StateSav_SaveINT(&POKEY_DivNMax[0], 4); + StateSav_SaveINT(&POKEY_Base_mult[0], 1); +} + +void POKEY_StateRead(void) +{ + int i; + int shift_key; + int keypressed; + + StateSav_ReadUBYTE(&POKEY_KBCODE, 1); + StateSav_ReadUBYTE(&POKEY_IRQST, 1); + StateSav_ReadUBYTE(&POKEY_IRQEN, 1); + StateSav_ReadUBYTE(&POKEY_SKCTL, 1); + + StateSav_ReadINT(&shift_key, 1); + StateSav_ReadINT(&keypressed, 1); + StateSav_ReadINT(&POKEY_DELAYED_SERIN_IRQ, 1); + StateSav_ReadINT(&POKEY_DELAYED_SEROUT_IRQ, 1); + StateSav_ReadINT(&POKEY_DELAYED_XMTDONE_IRQ, 1); + + StateSav_ReadUBYTE(&POKEY_AUDF[0], 4); + StateSav_ReadUBYTE(&POKEY_AUDC[0], 4); + StateSav_ReadUBYTE(&POKEY_AUDCTL[0], 1); + for (i = 0; i < 4; i++) { + POKEY_PutByte((UWORD) (POKEY_OFFSET_AUDF1 + i * 2), POKEY_AUDF[i]); + POKEY_PutByte((UWORD) (POKEY_OFFSET_AUDC1 + i * 2), POKEY_AUDC[i]); + } + POKEY_PutByte(POKEY_OFFSET_AUDCTL, POKEY_AUDCTL[0]); + + StateSav_ReadINT(&POKEY_DivNIRQ[0], 4); + StateSav_ReadINT(&POKEY_DivNMax[0], 4); + StateSav_ReadINT(&POKEY_Base_mult[0], 1); +} + +#endif diff --git a/MCUME_pico/pico800/pokey.h b/MCUME_pico/pico800/pokey.h new file mode 100644 index 0000000..b9a0c29 --- /dev/null +++ b/MCUME_pico/pico800/pokey.h @@ -0,0 +1,120 @@ +#ifndef POKEY_H_ +#define POKEY_H_ + + +#include "atari.h" + + +#define POKEY_OFFSET_AUDF1 0x00 +#define POKEY_OFFSET_AUDC1 0x01 +#define POKEY_OFFSET_AUDF2 0x02 +#define POKEY_OFFSET_AUDC2 0x03 +#define POKEY_OFFSET_AUDF3 0x04 +#define POKEY_OFFSET_AUDC3 0x05 +#define POKEY_OFFSET_AUDF4 0x06 +#define POKEY_OFFSET_AUDC4 0x07 +#define POKEY_OFFSET_AUDCTL 0x08 +#define POKEY_OFFSET_STIMER 0x09 +#define POKEY_OFFSET_SKRES 0x0a +#define POKEY_OFFSET_POTGO 0x0b +#define POKEY_OFFSET_SEROUT 0x0d +#define POKEY_OFFSET_IRQEN 0x0e +#define POKEY_OFFSET_SKCTL 0x0f + +#define POKEY_OFFSET_POT0 0x00 +#define POKEY_OFFSET_POT1 0x01 +#define POKEY_OFFSET_POT2 0x02 +#define POKEY_OFFSET_POT3 0x03 +#define POKEY_OFFSET_POT4 0x04 +#define POKEY_OFFSET_POT5 0x05 +#define POKEY_OFFSET_POT6 0x06 +#define POKEY_OFFSET_POT7 0x07 +#define POKEY_OFFSET_ALLPOT 0x08 +#define POKEY_OFFSET_KBCODE 0x09 +#define POKEY_OFFSET_RANDOM 0x0a +#define POKEY_OFFSET_SERIN 0x0d +#define POKEY_OFFSET_IRQST 0x0e +#define POKEY_OFFSET_SKSTAT 0x0f + +#define POKEY_OFFSET_POKEY2 0x10 /* offset to second pokey chip (STEREO expansion) */ + +#ifndef ASAP + +extern UBYTE POKEY_KBCODE; +extern UBYTE POKEY_IRQST; +extern UBYTE POKEY_IRQEN; +extern UBYTE POKEY_SKSTAT; +extern UBYTE POKEY_SKCTL; +extern int POKEY_DELAYED_SERIN_IRQ; +extern int POKEY_DELAYED_SEROUT_IRQ; +extern int POKEY_DELAYED_XMTDONE_IRQ; + +extern UBYTE POKEY_POT_input[8]; + +ULONG POKEY_GetRandomCounter(void); +void POKEY_SetRandomCounter(ULONG value); +UBYTE POKEY_GetByte(UWORD addr, int no_side_effects); +void POKEY_PutByte(UWORD addr, UBYTE byte); +int POKEY_Initialise(void); +void POKEY_Frame(void); +void POKEY_Scanline(void); +void POKEY_StateSave(void); +void POKEY_StateRead(void); + +#endif + +/* CONSTANT DEFINITIONS */ + +/* definitions for AUDCx (D201, D203, D205, D207) */ +#define POKEY_NOTPOLY5 0x80 /* selects POLY5 or direct CLOCK */ +#define POKEY_POLY4 0x40 /* selects POLY4 or POLY17 */ +#define POKEY_PURETONE 0x20 /* selects POLY4/17 or PURE tone */ +#define POKEY_VOL_ONLY 0x10 /* selects VOLUME OUTPUT ONLY */ +#define POKEY_VOLUME_MASK 0x0f /* volume mask */ + +/* definitions for AUDCTL (D208) */ +#define POKEY_POLY9 0x80 /* selects POLY9 or POLY17 */ +#define POKEY_CH1_179 0x40 /* selects 1.78979 MHz for Ch 1 */ +#define POKEY_CH3_179 0x20 /* selects 1.78979 MHz for Ch 3 */ +#define POKEY_CH1_CH2 0x10 /* clocks channel 1 w/channel 2 */ +#define POKEY_CH3_CH4 0x08 /* clocks channel 3 w/channel 4 */ +#define POKEY_CH1_FILTER 0x04 /* selects channel 1 high pass filter */ +#define POKEY_CH2_FILTER 0x02 /* selects channel 2 high pass filter */ +#define POKEY_CLOCK_15 0x01 /* selects 15.6999kHz or 63.9210kHz */ + +/* for accuracy, the 64kHz and 15kHz clocks are exact divisions of + the 1.79MHz clock */ +#define POKEY_DIV_64 28 /* divisor for 1.79MHz clock to 64 kHz */ +#define POKEY_DIV_15 114 /* divisor for 1.79MHz clock to 15 kHz */ + +/* the size (in entries) of the 4 polynomial tables */ +#define POKEY_POLY4_SIZE 0x000f +#define POKEY_POLY5_SIZE 0x001f +#define POKEY_POLY9_SIZE 511 //0x01ff +#define POKEY_POLY17_SIZE 16385//0x0001ffff + +#define POKEY_MAXPOKEYS 2 /* max number of emulated chips */ + +/* channel/chip definitions */ +#define POKEY_CHAN1 0 +#define POKEY_CHAN2 1 +#define POKEY_CHAN3 2 +#define POKEY_CHAN4 3 +#define POKEY_CHIP1 0 +#define POKEY_CHIP2 4 +#define POKEY_CHIP3 8 +#define POKEY_CHIP4 12 +#define POKEY_SAMPLE 127 + +/* structures to hold the 9 pokey control bytes */ +extern UBYTE POKEY_AUDF[4 * POKEY_MAXPOKEYS]; /* AUDFx (D200, D202, D204, D206) */ +extern UBYTE POKEY_AUDC[4 * POKEY_MAXPOKEYS]; /* AUDCx (D201, D203, D205, D207) */ +extern UBYTE POKEY_AUDCTL[POKEY_MAXPOKEYS]; /* AUDCTL (D208) */ + +extern int POKEY_DivNIRQ[4], POKEY_DivNMax[4]; +extern int POKEY_Base_mult[POKEY_MAXPOKEYS]; /* selects either 64Khz or 15Khz clock mult */ + +extern const UBYTE POKEY_poly9_lookup[POKEY_POLY9_SIZE]; +extern const UBYTE POKEY_poly17_lookup[POKEY_POLY17_SIZE]; + +#endif /* POKEY_H_ */ diff --git a/MCUME_pico/pico800/pokeysnd.c b/MCUME_pico/pico800/pokeysnd.c new file mode 100644 index 0000000..7545f7a --- /dev/null +++ b/MCUME_pico/pico800/pokeysnd.c @@ -0,0 +1,1428 @@ +/* + * pokeysnd.c - POKEY sound chip emulation, v2.4 + * + * Copyright (C) 1996-1998 Ron Fries + * Copyright (C) 1998-2014 Atari800 development team (see DOC/CREDITS) + * + * This file is part of the Atari800 emulator project which emulates + * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. + * + * Atari800 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. + * + * Atari800 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 Atari800; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifdef skip +#include "config.h" +#include +#include + +#ifdef ASAP /* external project, see http://asap.sf.net */ +#include "asap_internal.h" +#else +#include "atari.h" +#ifndef __PLUS +#include "sndsave.h" +#else +#include "sound_win.h" +#endif +#endif +#include "mzpokeysnd.h" +#include "pokeysnd.h" +#if defined(PBI_XLD) || defined (VOICEBOX) +#include "votraxsnd.h" +#endif +#include "antic.h" +#include "gtia.h" +#include "util.h" +#endif + +#include "pokeysnd.h" +#if defined(PBI_XLD) || defined (VOICEBOX) +#include "votraxsnd.h" +#endif +#include "antic.h" +#include "gtia.h" + +#ifdef WORDS_UNALIGNED_OK +# define READ_U32(x) (*(ULONG *) (x)) +# define WRITE_U32(x, d) (*(ULONG *) (x) = (d)) +#else +# ifdef WORDS_BIGENDIAN +# define READ_U32(x) (((*(unsigned char *)(x)) << 24) | ((*((unsigned char *)(x) + 1)) << 16) | \ + ((*((unsigned char *)(x) + 2)) << 8) | ((*((unsigned char *)(x) + 3)))) +# define WRITE_U32(x, d) \ + { \ + ULONG i = d; \ + (*(unsigned char *) (x)) = (((i) >> 24) & 255); \ + (*((unsigned char *) (x) + 1)) = (((i) >> 16) & 255); \ + (*((unsigned char *) (x) + 2)) = (((i) >> 8) & 255); \ + (*((unsigned char *) (x) + 3)) = ((i) & 255); \ + } +# else +# define READ_U32(x) ((*(unsigned char *) (x)) | ((*((unsigned char *) (x) + 1)) << 8) | \ + ((*((unsigned char *) (x) + 2)) << 16) | ((*((unsigned char *) (x) + 3)) << 24)) +# define WRITE_U32(x, d) \ + { \ + ULONG i = d; \ + (*(unsigned char *)(x)) = ((i) & 255); \ + (*((unsigned char *)(x) + 1)) = (((i) >> 8) & 255); \ + (*((unsigned char *)(x) + 2)) = (((i) >> 16) & 255); \ + (*((unsigned char *)(x) + 3)) = (((i) >> 24) & 255); \ + } +# endif +#endif + +/* GLOBAL VARIABLE DEFINITIONS */ + +/* number of pokey chips currently emulated */ +static UBYTE Num_pokeys; + +static UBYTE pokeysnd_AUDV[4 * POKEY_MAXPOKEYS]; /* Channel volume - derived */ + +static UBYTE Outbit[4 * POKEY_MAXPOKEYS]; /* current state of the output (high or low) */ + +static UBYTE Outvol[4 * POKEY_MAXPOKEYS]; /* last output volume for each channel */ + +/* Initialize the bit patterns for the polynomials. */ + +/* The 4bit and 5bit patterns are the identical ones used in the pokey chip. */ +/* Though the patterns could be packed with 8 bits per byte, using only a */ +/* single bit per byte keeps the math simple, which is important for */ +/* efficient processing. */ + +static const UBYTE bit4[POKEY_POLY4_SIZE] = +#ifndef POKEY23_POLY +{1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0}; /* new table invented by Perry */ +#else +{1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0}; /* original POKEY 2.3 table */ +#endif + +static const UBYTE bit5[POKEY_POLY5_SIZE] = +#ifndef POKEY23_POLY +{1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0}; +#else +{0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1}; +#endif + +static ULONG P4 = 0, /* Global position pointer for the 4-bit POLY array */ + P5 = 0, /* Global position pointer for the 5-bit POLY array */ + P9 = 0, /* Global position pointer for the 9-bit POLY array */ + P17 = 0; /* Global position pointer for the 17-bit POLY array */ + +static ULONG Div_n_cnt[4 * POKEY_MAXPOKEYS], /* Divide by n counter. one for each channel */ + Div_n_max[4 * POKEY_MAXPOKEYS]; /* Divide by n maximum, one for each channel */ + +static ULONG Samp_n_max, /* Sample max. For accuracy, it is *256 */ + Samp_n_cnt[2]; /* Sample cnt. */ + +#ifdef INTERPOLATE_SOUND +#ifdef CLIP_SOUND +static SWORD last_val = 0; /* last output value */ +#else +static UWORD last_val = 0; +#endif +#ifdef STEREO_SOUND +#ifdef CLIP_SOUND +static SWORD last_val2 = 0; /* last output value */ +#else +static UWORD last_val2 = 0; +#endif +#endif +#endif + +/* Volume only emulations declarations */ +#ifdef VOL_ONLY_SOUND + +int POKEYSND_sampbuf_val[POKEYSND_SAMPBUF_MAX]; /* volume values */ +int POKEYSND_sampbuf_cnt[POKEYSND_SAMPBUF_MAX]; /* relative start time */ +int POKEYSND_sampbuf_ptr = 0; /* pointer to sampbuf */ +int POKEYSND_sampbuf_rptr = 0; /* pointer to read from sampbuf */ +int POKEYSND_sampbuf_last = 0; /* last absolute time */ +int POKEYSND_sampbuf_AUDV[4 * POKEY_MAXPOKEYS]; /* prev. channel volume */ +int POKEYSND_sampbuf_lastval = 0; /* last volume */ +int POKEYSND_sampout; /* last out volume */ +int POKEYSND_samp_freq; +int POKEYSND_samp_consol_val = 0; /* actual value of console sound */ +#ifdef STEREO_SOUND +static int sampbuf_val2[POKEYSND_SAMPBUF_MAX]; /* volume values */ +static int sampbuf_cnt2[POKEYSND_SAMPBUF_MAX]; /* relative start time */ +static int sampbuf_ptr2 = 0; /* pointer to sampbuf */ +static int sampbuf_rptr2 = 0; /* pointer to read from sampbuf */ +static int sampbuf_last2 = 0; /* last absolute time */ +static int sampbuf_lastval2 = 0; /* last volume */ +static int sampout2; /* last out volume */ +#endif +#endif /* VOL_ONLY_SOUND */ + +static ULONG snd_freq17 = POKEYSND_FREQ_17_EXACT; +int POKEYSND_playback_freq = 44100; +UBYTE POKEYSND_num_pokeys = 1; +int POKEYSND_snd_flags = 0; +static int mz_quality = 0; /* default quality for mzpokeysnd */ +#ifdef __PLUS +int mz_clear_regs = 0; +#endif + +int POKEYSND_enable_new_pokey = TRUE; +int POKEYSND_bienias_fix = TRUE; /* when TRUE, high frequencies get emulated: better sound but slower */ +#if defined(__PLUS) && !defined(_WX_) +#define BIENIAS_FIX (g_Sound.nBieniasFix) +#else +#define BIENIAS_FIX POKEYSND_bienias_fix +#endif +#ifndef ASAP +int POKEYSND_stereo_enabled = FALSE; +#endif + +int POKEYSND_volume = 0x100; + +/* multiple sound engine interface */ +static void pokeysnd_process_8(void *sndbuffer, int sndn); +static void pokeysnd_process_16(void *sndbuffer, int sndn); +static void null_pokey_process(void *sndbuffer, int sndn) {} +void (*POKEYSND_Process_ptr)(void *sndbuffer, int sndn) = null_pokey_process; + +static void Update_pokey_sound_rf(UWORD, UBYTE, UBYTE, UBYTE); +static void null_pokey_sound(UWORD addr, UBYTE val, UBYTE chip, UBYTE gain) {} +void (*POKEYSND_Update_ptr) (UWORD addr, UBYTE val, UBYTE chip, UBYTE gain) + = null_pokey_sound; + +#ifdef SERIO_SOUND +static void Update_serio_sound_rf(int out, UBYTE data); +static void null_serio_sound(int out, UBYTE data) {} +void (*POKEYSND_UpdateSerio)(int out, UBYTE data) = null_serio_sound; +int POKEYSND_serio_sound_enabled = 1; +#endif + +#ifdef CONSOLE_SOUND +static void Update_consol_sound_rf(int set); +static void null_consol_sound(int set) {} +void (*POKEYSND_UpdateConsol_ptr)(int set) = null_consol_sound; +int POKEYSND_console_sound_enabled = 1; +#endif + +#ifdef VOL_ONLY_SOUND +static void Update_vol_only_sound_rf(void); +static void null_vol_only_sound(void) {} +void (*POKEYSND_UpdateVolOnly)(void) = null_vol_only_sound; +#endif + +#ifdef SYNCHRONIZED_SOUND +UBYTE *POKEYSND_process_buffer = NULL; +unsigned int POKEYSND_process_buffer_length; +unsigned int POKEYSND_process_buffer_fill; +static unsigned int prev_update_tick; + +static void Generate_sync_rf(unsigned int num_ticks); +static void null_generate_sync(unsigned int num_ticks) {} +void (*POKEYSND_GenerateSync)(unsigned int num_ticks) = null_generate_sync; + +static double ticks_per_sample; +static double samp_pos; +static int speaker; +static int const CONSOLE_VOL = 32; +#endif /* SYNCHRONIZED_SOUND */ + +/*****************************************************************************/ +/* In my routines, I treat the sample output as another divide by N counter */ +/* For better accuracy, the Samp_n_cnt has a fixed binary decimal point */ +/* which has 8 binary digits to the right of the decimal point. I use a two */ +/* byte array to give me a minimum of 40 bits, and then use pointer math to */ +/* reference either the 24.8 whole/fraction combination or the 32-bit whole */ +/* only number. This is mainly used to keep the math simple for */ +/* optimization. See below: */ +/* */ +/* Representation on little-endian machines: */ +/* xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx | xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx */ +/* fraction whole whole whole whole unused unused unused */ +/* */ +/* Samp_n_cnt[0] gives me a 32-bit int 24 whole bits with 8 fractional bits, */ +/* while (ULONG *)((UBYTE *)(&Samp_n_cnt[0])+1) gives me the 32-bit whole */ +/* number only. */ +/* */ +/* Representation on big-endian machines: */ +/* xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx | xxxxxxxx xxxxxxxx xxxxxxxx.xxxxxxxx */ +/* unused unused unused whole whole whole whole fraction */ +/* */ +/* Samp_n_cnt[1] gives me a 32-bit int 24 whole bits with 8 fractional bits, */ +/* while (ULONG *)((UBYTE *)(&Samp_n_cnt[0])+3) gives me the 32-bit whole */ +/* number only. */ +/*****************************************************************************/ + + +/*****************************************************************************/ +/* Module: pokeysnd_init_rf() */ +/* Purpose: to handle the power-up initialization functions */ +/* these functions should only be executed on a cold-restart */ +/* */ +/* Author: Ron Fries */ +/* Date: January 1, 1997 */ +/* */ +/* Inputs: freq17 - the value for the '1.79MHz' Pokey audio clock */ +/* playback_freq - the playback frequency in samples per second */ +/* num_pokeys - specifies the number of pokey chips to be emulated */ +/* */ +/* Outputs: Adjusts local globals - no return value */ +/* */ +/*****************************************************************************/ + +static int pokeysnd_init_rf(ULONG freq17, int playback_freq, + UBYTE num_pokeys, int flags); + +#ifdef VOL_ONLY_SOUND +/* Initialise variables related to volume-only sound. */ +static void init_vol_only(void) +{ + POKEYSND_sampbuf_rptr = POKEYSND_sampbuf_ptr; + POKEYSND_sampbuf_last = ANTIC_CPU_CLOCK; + POKEYSND_sampbuf_lastval = 0; + POKEYSND_samp_consol_val = 0; +#ifdef STEREO_SOUND + sampbuf_rptr2 = sampbuf_ptr2; + sampbuf_last2 = ANTIC_CPU_CLOCK; + sampbuf_lastval2 = 0; +#endif /* STEREO_SOUND */ +} +#endif /* VOL_ONLY_SOUND */ + +int POKEYSND_DoInit(void) +{ +#if SKIP + SndSave_CloseSoundFile(); +#endif + +#ifdef VOL_ONLY_SOUND + init_vol_only(); +#endif /* VOL_ONLY_SOUND */ + +#if SKIP + if (POKEYSND_enable_new_pokey) + return MZPOKEYSND_Init(snd_freq17, POKEYSND_playback_freq, + POKEYSND_num_pokeys, POKEYSND_snd_flags, mz_quality +#ifdef __PLUS + , mz_clear_regs +#endif + ); + else +#endif + return pokeysnd_init_rf(snd_freq17, POKEYSND_playback_freq, + POKEYSND_num_pokeys, POKEYSND_snd_flags); +} + +int POKEYSND_Init(ULONG freq17, int playback_freq, UBYTE num_pokeys, + int flags +#ifdef __PLUS + , int clear_regs +#endif +) +{ + snd_freq17 = freq17; + POKEYSND_playback_freq = playback_freq; + POKEYSND_num_pokeys = num_pokeys; + POKEYSND_snd_flags = flags; +#ifdef __PLUS + mz_clear_regs = clear_regs; +#endif +#ifdef SYNCHRONIZED_SOUND + { + /* A single call to Atari800_Frame may emulate a bit more CPU ticks than the exact number of + ticks per frame (Atari800_tv_mode*114). So we add a few ticks to buffer size just to be safe. */ + unsigned int const surplus_ticks = 10; + double samples_per_frame = (double)POKEYSND_playback_freq/(Atari800_tv_mode == Atari800_TV_PAL ? Atari800_FPS_PAL : Atari800_FPS_NTSC); + unsigned int ticks_per_frame = Atari800_tv_mode*114; + unsigned int max_ticks_per_frame = ticks_per_frame + surplus_ticks; + double ticks_per_sample = (double)ticks_per_frame / samples_per_frame; + POKEYSND_process_buffer_length = POKEYSND_num_pokeys * (unsigned int)ceil((double)max_ticks_per_frame / ticks_per_sample) * ((POKEYSND_snd_flags & POKEYSND_BIT16) ? 2:1); + free(POKEYSND_process_buffer); + POKEYSND_process_buffer = (UBYTE *)Util_malloc(POKEYSND_process_buffer_length); + POKEYSND_process_buffer_fill = 0; + prev_update_tick = ANTIC_CPU_CLOCK; + } +#endif /* SYNCHRONIZED_SOUND */ + +#if defined(PBI_XLD) || defined (VOICEBOX) + VOTRAXSND_Init(playback_freq, num_pokeys, (flags & POKEYSND_BIT16)); +#endif + return POKEYSND_DoInit(); +} + +void POKEYSND_SetMzQuality(int quality) /* specially for win32, perhaps not needed? */ +{ + mz_quality = quality; +} + +void SND_Process(void *sndbuffer, int sndn) +{ + POKEYSND_Process_ptr(sndbuffer, sndn); +#if defined(PBI_XLD) || defined (VOICEBOX) + VOTRAXSND_Process(sndbuffer,sndn); +#endif +#if !defined(__PLUS) && !defined(ASAP) +#if SKIP + SndSave_WriteToSoundFile((const unsigned char *)sndbuffer, sndn); +#endif +#endif +} + +#ifdef SYNCHRONIZED_SOUND +static void Update_synchronized_sound(void) +{ + POKEYSND_GenerateSync(ANTIC_CPU_CLOCK - prev_update_tick); + prev_update_tick = ANTIC_CPU_CLOCK; +} + +int POKEYSND_UpdateProcessBuffer(void) +{ + int sndn; + Update_synchronized_sound(); + sndn = POKEYSND_process_buffer_fill / ((POKEYSND_snd_flags & POKEYSND_BIT16) ? 2 : 1); + POKEYSND_process_buffer_fill = 0; + +#if defined(PBI_XLD) || defined (VOICEBOX) + VOTRAXSND_Process(POKEYSND_process_buffer, sndn); +#endif +#if !defined(__PLUS) && !defined(ASAP) + SndSave_WriteToSoundFile((const unsigned char *)POKEYSND_process_buffer, sndn); +#endif + return sndn; +} +#endif /* SYNCHRONIZED_SOUND */ + +#ifdef SYNCHRONIZED_SOUND +static void init_syncsound(void) +{ + double samples_per_frame = (double)POKEYSND_playback_freq/(Atari800_tv_mode == Atari800_TV_PAL ? Atari800_FPS_PAL : Atari800_FPS_NTSC); + unsigned int ticks_per_frame = Atari800_tv_mode*114; + ticks_per_sample = (double)ticks_per_frame / samples_per_frame; + samp_pos = 0.0; + POKEYSND_GenerateSync = Generate_sync_rf; + speaker = 0; +} +#endif /* SYNCHRONIZED_SOUND */ + +static int pokeysnd_init_rf(ULONG freq17, int playback_freq, + UBYTE num_pokeys, int flags) +{ + UBYTE chan; + + POKEYSND_Update_ptr = Update_pokey_sound_rf; +#ifdef SERIO_SOUND + POKEYSND_UpdateSerio = Update_serio_sound_rf; +#endif +#ifdef CONSOLE_SOUND + POKEYSND_UpdateConsol_ptr = Update_consol_sound_rf; +#endif +#ifdef VOL_ONLY_SOUND + POKEYSND_UpdateVolOnly = Update_vol_only_sound_rf; +#endif + + POKEYSND_Process_ptr = (flags & POKEYSND_BIT16) ? pokeysnd_process_16 : pokeysnd_process_8; + +#ifdef VOL_ONLY_SOUND + POKEYSND_samp_freq = playback_freq; +#endif + + /* start all of the polynomial counters at zero */ + P4 = 0; + P5 = 0; + P9 = 0; + P17 = 0; + + /* calculate the sample 'divide by N' value based on the playback freq. */ + Samp_n_max = ((ULONG) freq17 << 8) / playback_freq; + + Samp_n_cnt[0] = 0; /* initialize all bits of the sample */ + Samp_n_cnt[1] = 0; /* 'divide by N' counter */ + + for (chan = 0; chan < (POKEY_MAXPOKEYS * 4); chan++) { + Outvol[chan] = 0; + Outbit[chan] = 0; + Div_n_cnt[chan] = 0; + Div_n_max[chan] = 0x7fffffffL; + pokeysnd_AUDV[chan] = 0; +#ifdef VOL_ONLY_SOUND + POKEYSND_sampbuf_AUDV[chan] = 0; +#endif + } + + /* set the number of pokey chips currently emulated */ + Num_pokeys = num_pokeys; + +#ifdef SYNCHRONIZED_SOUND + init_syncsound(); +#endif + return 0; /* OK */ +} + + +/*****************************************************************************/ +/* Module: Update_pokey_sound_rf() */ +/* Purpose: To process the latest control values stored in the AUDF, AUDC, */ +/* and AUDCTL registers. It pre-calculates as much information as */ +/* possible for better performance. This routine has not been */ +/* optimized. */ +/* */ +/* Author: Ron Fries */ +/* Date: January 1, 1997 */ +/* */ +/* Inputs: addr - the address of the parameter to be changed */ +/* val - the new value to be placed in the specified address */ +/* gain - specified as an 8-bit fixed point number - use 1 for no */ +/* amplification (output is multiplied by gain) */ +/* */ +/* Outputs: Adjusts local globals - no return value */ +/* */ +/*****************************************************************************/ + +void POKEYSND_Update(UWORD addr, UBYTE val, UBYTE chip, UBYTE gain) +{ +#ifdef SYNCHRONIZED_SOUND + Update_synchronized_sound(); +#endif /* SYNCHRONIZED_SOUND */ + POKEYSND_Update_ptr(addr, val, chip, gain); +} + +static void Update_pokey_sound_rf(UWORD addr, UBYTE val, UBYTE chip, + UBYTE gain) +{ + ULONG new_val = 0; + UBYTE chan; + UBYTE chan_mask; + UBYTE chip_offs; + + /* calculate the chip_offs for the channel arrays */ + chip_offs = chip << 2; + + /* determine which address was changed */ + switch (addr & 0x0f) { + case POKEY_OFFSET_AUDF1: + /* POKEY_AUDF[POKEY_CHAN1 + chip_offs] = val; */ + chan_mask = 1 << POKEY_CHAN1; + if (POKEY_AUDCTL[chip] & POKEY_CH1_CH2) /* if ch 1&2 tied together */ + chan_mask |= 1 << POKEY_CHAN2; /* then also change on ch2 */ + break; + case POKEY_OFFSET_AUDC1: + /* POKEY_AUDC[POKEY_CHAN1 + chip_offs] = val; */ + pokeysnd_AUDV[POKEY_CHAN1 + chip_offs] = (val & POKEY_VOLUME_MASK) * gain; + chan_mask = 1 << POKEY_CHAN1; + break; + case POKEY_OFFSET_AUDF2: + /* POKEY_AUDF[POKEY_CHAN2 + chip_offs] = val; */ + chan_mask = 1 << POKEY_CHAN2; + break; + case POKEY_OFFSET_AUDC2: + /* POKEY_AUDC[POKEY_CHAN2 + chip_offs] = val; */ + pokeysnd_AUDV[POKEY_CHAN2 + chip_offs] = (val & POKEY_VOLUME_MASK) * gain; + chan_mask = 1 << POKEY_CHAN2; + break; + case POKEY_OFFSET_AUDF3: + /* POKEY_AUDF[POKEY_CHAN3 + chip_offs] = val; */ + chan_mask = 1 << POKEY_CHAN3; + if (POKEY_AUDCTL[chip] & POKEY_CH3_CH4) /* if ch 3&4 tied together */ + chan_mask |= 1 << POKEY_CHAN4; /* then also change on ch4 */ + break; + case POKEY_OFFSET_AUDC3: + /* POKEY_AUDC[POKEY_CHAN3 + chip_offs] = val; */ + pokeysnd_AUDV[POKEY_CHAN3 + chip_offs] = (val & POKEY_VOLUME_MASK) * gain; + chan_mask = 1 << POKEY_CHAN3; + break; + case POKEY_OFFSET_AUDF4: + /* POKEY_AUDF[POKEY_CHAN4 + chip_offs] = val; */ + chan_mask = 1 << POKEY_CHAN4; + break; + case POKEY_OFFSET_AUDC4: + /* POKEY_AUDC[POKEY_CHAN4 + chip_offs] = val; */ + pokeysnd_AUDV[POKEY_CHAN4 + chip_offs] = (val & POKEY_VOLUME_MASK) * gain; + chan_mask = 1 << POKEY_CHAN4; + break; + case POKEY_OFFSET_AUDCTL: + /* POKEY_AUDCTL[chip] = val; */ + chan_mask = 15; /* all channels */ + break; + default: + chan_mask = 0; + break; + } + + /************************************************************/ + /* As defined in the manual, the exact Div_n_cnt values are */ + /* different depending on the frequency and resolution: */ + /* 64 kHz or 15 kHz - AUDF + 1 */ + /* 1 MHz, 8-bit - AUDF + 4 */ + /* 1 MHz, 16-bit - POKEY_AUDF[POKEY_CHAN1]+256*POKEY_AUDF[POKEY_CHAN2] + 7 */ + /************************************************************/ + + /* only reset the channels that have changed */ + + if (chan_mask & (1 << POKEY_CHAN1)) { + /* process channel 1 frequency */ + if (POKEY_AUDCTL[chip] & POKEY_CH1_179) + new_val = POKEY_AUDF[POKEY_CHAN1 + chip_offs] + 4; + else + new_val = (POKEY_AUDF[POKEY_CHAN1 + chip_offs] + 1) * POKEY_Base_mult[chip]; + + if (new_val != Div_n_max[POKEY_CHAN1 + chip_offs]) { + Div_n_max[POKEY_CHAN1 + chip_offs] = new_val; + + if (Div_n_cnt[POKEY_CHAN1 + chip_offs] > new_val) { + Div_n_cnt[POKEY_CHAN1 + chip_offs] = new_val; + } + } + } + + if (chan_mask & (1 << POKEY_CHAN2)) { + /* process channel 2 frequency */ + if (POKEY_AUDCTL[chip] & POKEY_CH1_CH2) { + if (POKEY_AUDCTL[chip] & POKEY_CH1_179) + new_val = POKEY_AUDF[POKEY_CHAN2 + chip_offs] * 256 + + POKEY_AUDF[POKEY_CHAN1 + chip_offs] + 7; + else + new_val = (POKEY_AUDF[POKEY_CHAN2 + chip_offs] * 256 + + POKEY_AUDF[POKEY_CHAN1 + chip_offs] + 1) * POKEY_Base_mult[chip]; + } + else + new_val = (POKEY_AUDF[POKEY_CHAN2 + chip_offs] + 1) * POKEY_Base_mult[chip]; + + if (new_val != Div_n_max[POKEY_CHAN2 + chip_offs]) { + Div_n_max[POKEY_CHAN2 + chip_offs] = new_val; + + if (Div_n_cnt[POKEY_CHAN2 + chip_offs] > new_val) { + Div_n_cnt[POKEY_CHAN2 + chip_offs] = new_val; + } + } + } + + if (chan_mask & (1 << POKEY_CHAN3)) { + /* process channel 3 frequency */ + if (POKEY_AUDCTL[chip] & POKEY_CH3_179) + new_val = POKEY_AUDF[POKEY_CHAN3 + chip_offs] + 4; + else + new_val = (POKEY_AUDF[POKEY_CHAN3 + chip_offs] + 1) * POKEY_Base_mult[chip]; + + if (new_val != Div_n_max[POKEY_CHAN3 + chip_offs]) { + Div_n_max[POKEY_CHAN3 + chip_offs] = new_val; + + if (Div_n_cnt[POKEY_CHAN3 + chip_offs] > new_val) { + Div_n_cnt[POKEY_CHAN3 + chip_offs] = new_val; + } + } + } + + if (chan_mask & (1 << POKEY_CHAN4)) { + /* process channel 4 frequency */ + if (POKEY_AUDCTL[chip] & POKEY_CH3_CH4) { + if (POKEY_AUDCTL[chip] & POKEY_CH3_179) + new_val = POKEY_AUDF[POKEY_CHAN4 + chip_offs] * 256 + + POKEY_AUDF[POKEY_CHAN3 + chip_offs] + 7; + else + new_val = (POKEY_AUDF[POKEY_CHAN4 + chip_offs] * 256 + + POKEY_AUDF[POKEY_CHAN3 + chip_offs] + 1) * POKEY_Base_mult[chip]; + } + else + new_val = (POKEY_AUDF[POKEY_CHAN4 + chip_offs] + 1) * POKEY_Base_mult[chip]; + + if (new_val != Div_n_max[POKEY_CHAN4 + chip_offs]) { + Div_n_max[POKEY_CHAN4 + chip_offs] = new_val; + + if (Div_n_cnt[POKEY_CHAN4 + chip_offs] > new_val) { + Div_n_cnt[POKEY_CHAN4 + chip_offs] = new_val; + } + } + } + + /* if channel is volume only, set current output */ + for (chan = POKEY_CHAN1; chan <= POKEY_CHAN4; chan++) { + if (chan_mask & (1 << chan)) { + +#ifdef VOL_ONLY_SOUND + +#ifdef __PLUS + if (g_Sound.nDigitized) +#endif + if ((POKEY_AUDC[chan + chip_offs] & POKEY_VOL_ONLY)) { + +#ifdef STEREO_SOUND + +#ifdef __PLUS + if (POKEYSND_stereo_enabled && chip & 0x01) +#else + if (chip & 0x01) +#endif + { + sampbuf_lastval2 += pokeysnd_AUDV[chan + chip_offs] + - POKEYSND_sampbuf_AUDV[chan + chip_offs]; + + sampbuf_val2[sampbuf_ptr2] = sampbuf_lastval2; + POKEYSND_sampbuf_AUDV[chan + chip_offs] = pokeysnd_AUDV[chan + chip_offs]; + sampbuf_cnt2[sampbuf_ptr2] = + (ANTIC_CPU_CLOCK - sampbuf_last2) * 128 * POKEYSND_samp_freq / 178979; + sampbuf_last2 = ANTIC_CPU_CLOCK; + sampbuf_ptr2++; + if (sampbuf_ptr2 >= POKEYSND_SAMPBUF_MAX) + sampbuf_ptr2 = 0; + if (sampbuf_ptr2 == sampbuf_rptr2) { + sampbuf_rptr2++; + if (sampbuf_rptr2 >= POKEYSND_SAMPBUF_MAX) + sampbuf_rptr2 = 0; + } + } + else +#endif /* STEREO_SOUND */ + { + POKEYSND_sampbuf_lastval += pokeysnd_AUDV[chan + chip_offs] + -POKEYSND_sampbuf_AUDV[chan + chip_offs]; + + POKEYSND_sampbuf_val[POKEYSND_sampbuf_ptr] = POKEYSND_sampbuf_lastval; + POKEYSND_sampbuf_AUDV[chan + chip_offs] = pokeysnd_AUDV[chan + chip_offs]; + POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_ptr] = + (ANTIC_CPU_CLOCK - POKEYSND_sampbuf_last) * 128 * POKEYSND_samp_freq / 178979; + POKEYSND_sampbuf_last = ANTIC_CPU_CLOCK; + POKEYSND_sampbuf_ptr++; + if (POKEYSND_sampbuf_ptr >= POKEYSND_SAMPBUF_MAX) + POKEYSND_sampbuf_ptr = 0; + if (POKEYSND_sampbuf_ptr == POKEYSND_sampbuf_rptr) { + POKEYSND_sampbuf_rptr++; + if (POKEYSND_sampbuf_rptr >= POKEYSND_SAMPBUF_MAX) + POKEYSND_sampbuf_rptr = 0; + } + } + } + +#endif /* VOL_ONLY_SOUND */ + + /* I've disabled any frequencies that exceed the sampling + frequency. There isn't much point in processing frequencies + that the hardware can't reproduce. I've also disabled + processing if the volume is zero. */ + + /* if the channel is volume only */ + /* or the channel is off (volume == 0) */ + /* or the channel freq is greater than the playback freq */ + if ( (POKEY_AUDC[chan + chip_offs] & POKEY_VOL_ONLY) || + ((POKEY_AUDC[chan + chip_offs] & POKEY_VOLUME_MASK) == 0) + || (!BIENIAS_FIX && (Div_n_max[chan + chip_offs] < (Samp_n_max >> 8))) + ) { + /* indicate the channel is 'on' */ + Outvol[chan + chip_offs] = 1; + + /* can only ignore channel if filtering off */ + if ((chan == POKEY_CHAN3 && !(POKEY_AUDCTL[chip] & POKEY_CH1_FILTER)) || + (chan == POKEY_CHAN4 && !(POKEY_AUDCTL[chip] & POKEY_CH2_FILTER)) || + (chan == POKEY_CHAN1) || + (chan == POKEY_CHAN2) + || (!BIENIAS_FIX && (Div_n_max[chan + chip_offs] < (Samp_n_max >> 8))) + ) { + /* and set channel freq to max to reduce processing */ + Div_n_max[chan + chip_offs] = 0x7fffffffL; + Div_n_cnt[chan + chip_offs] = 0x7fffffffL; + } + } + } + } + + /* _enable(); */ /* RSF - removed for portability 31-MAR-97 */ +} + + +/*****************************************************************************/ +/* Module: pokeysnd_process() */ +/* Purpose: To fill the output buffer with the sound output based on the */ +/* pokey chip parameters. */ +/* */ +/* Author: Ron Fries */ +/* Date: January 1, 1997 */ +/* */ +/* Inputs: *buffer - pointer to the buffer where the audio output will */ +/* be placed */ +/* sndn - for mono, size of the playback buffer in samples */ +/* for stereo, size of the playback buffer in left samples */ +/* plus right samples. */ +/* num_pokeys - number of currently active pokeys to process */ +/* */ +/* Outputs: the buffer will be filled with n bytes of audio - no return val */ +/* Also the buffer will be written to disk if Sound recording is ON */ +/* */ +/*****************************************************************************/ + +static void pokeysnd_process_8(void *sndbuffer, int sndn) +{ + register UBYTE *buffer = (UBYTE *) sndbuffer; + register int n = sndn; + + register ULONG *div_n_ptr; + register UBYTE *samp_cnt_w_ptr; + register ULONG event_min; + register UBYTE next_event; +#ifdef CLIP_SOUND + register SWORD cur_val; /* then we have to count as 16-bit signed */ +#ifdef STEREO_SOUND + register SWORD cur_val2; +#endif +#else /* CLIP_SOUND */ + register UBYTE cur_val; /* otherwise we'll simplify as 8-bit unsigned */ +#ifdef STEREO_SOUND + register UBYTE cur_val2; +#endif +#endif /* CLIP_SOUND */ + register UBYTE *out_ptr; + register UBYTE audc; + register UBYTE toggle; + register UBYTE count; + register UBYTE *vol_ptr; + + /* set a pointer to the whole portion of the samp_n_cnt */ +#ifdef WORDS_BIGENDIAN + samp_cnt_w_ptr = ((UBYTE *) (&Samp_n_cnt[0]) + 3); +#else + samp_cnt_w_ptr = ((UBYTE *) (&Samp_n_cnt[0]) + 1); +#endif + + /* set a pointer for optimization */ + out_ptr = Outvol; + vol_ptr = pokeysnd_AUDV; + + /* The current output is pre-determined and then adjusted based on each */ + /* output change for increased performance (less over-all math). */ + /* add the output values of all 4 channels */ + cur_val = POKEYSND_SAMP_MIN; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + cur_val2 = POKEYSND_SAMP_MIN; +#endif /* STEREO_SOUND */ + + count = Num_pokeys; + do { + if (*out_ptr++) + cur_val += *vol_ptr; + vol_ptr++; + + if (*out_ptr++) + cur_val += *vol_ptr; + vol_ptr++; + + if (*out_ptr++) + cur_val += *vol_ptr; + vol_ptr++; + + if (*out_ptr++) + cur_val += *vol_ptr; + vol_ptr++; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + { + count--; + if (count) { + if (*out_ptr++) + cur_val2 += *vol_ptr; + vol_ptr++; + + if (*out_ptr++) + cur_val2 += *vol_ptr; + vol_ptr++; + + if (*out_ptr++) + cur_val2 += *vol_ptr; + vol_ptr++; + + if (*out_ptr++) + cur_val2 += *vol_ptr; + vol_ptr++; + } + else + break; + } +#endif /* STEREO_SOUND */ + count--; + } while (count); + +#ifdef SYNCHRONIZED_SOUND + cur_val += speaker; +#endif + + /* loop until the buffer is filled */ + while (n) { + /* Normally the routine would simply decrement the 'div by N' */ + /* counters and react when they reach zero. Since we normally */ + /* won't be processing except once every 80 or so counts, */ + /* I've optimized by finding the smallest count and then */ + /* 'accelerated' time by adjusting all pointers by that amount. */ + + /* find next smallest event (either sample or chan 1-4) */ + next_event = POKEY_SAMPLE; + event_min = READ_U32(samp_cnt_w_ptr); + + div_n_ptr = Div_n_cnt; + + count = 0; + do { + /* Though I could have used a loop here, this is faster */ + if (*div_n_ptr <= event_min) { + event_min = *div_n_ptr; + next_event = POKEY_CHAN1 + (count << 2); + } + div_n_ptr++; + if (*div_n_ptr <= event_min) { + event_min = *div_n_ptr; + next_event = POKEY_CHAN2 + (count << 2); + } + div_n_ptr++; + if (*div_n_ptr <= event_min) { + event_min = *div_n_ptr; + next_event = POKEY_CHAN3 + (count << 2); + } + div_n_ptr++; + if (*div_n_ptr <= event_min) { + event_min = *div_n_ptr; + next_event = POKEY_CHAN4 + (count << 2); + } + div_n_ptr++; + + count++; + } while (count < Num_pokeys); + + /* if the next event is a channel change */ + if (next_event != POKEY_SAMPLE) { + /* shift the polynomial counters */ + + count = Num_pokeys; + do { + /* decrement all counters by the smallest count found */ + /* again, no loop for efficiency */ + div_n_ptr--; + *div_n_ptr -= event_min; + div_n_ptr--; + *div_n_ptr -= event_min; + div_n_ptr--; + *div_n_ptr -= event_min; + div_n_ptr--; + *div_n_ptr -= event_min; + + count--; + } while (count); + + + WRITE_U32(samp_cnt_w_ptr, READ_U32(samp_cnt_w_ptr) - event_min); + + /* since the polynomials require a mod (%) function which is + division, I don't adjust the polynomials on the SAMPLE events, + only the CHAN events. I have to keep track of the change, + though. */ + + P4 = (P4 + event_min) % POKEY_POLY4_SIZE; + P5 = (P5 + event_min) % POKEY_POLY5_SIZE; + P9 = (P9 + event_min) % POKEY_POLY9_SIZE; + P17 = (P17 + event_min) % POKEY_POLY17_SIZE; + + /* adjust channel counter */ + Div_n_cnt[next_event] += Div_n_max[next_event]; + + /* get the current AUDC into a register (for optimization) */ + audc = POKEY_AUDC[next_event]; + + /* set a pointer to the current output (for opt...) */ + out_ptr = &Outvol[next_event]; + + /* assume no changes to the output */ + toggle = FALSE; + + /* From here, a good understanding of the hardware is required */ + /* to understand what is happening. I won't be able to provide */ + /* much description to explain it here. */ + + /* if VOLUME only then nothing to process */ + if (!(audc & POKEY_VOL_ONLY)) { + /* if the output is pure or the output is poly5 and the poly5 bit */ + /* is set */ + if ((audc & POKEY_NOTPOLY5) || bit5[P5]) { + /* if the PURETONE bit is set */ + if (audc & POKEY_PURETONE) { + /* then simply toggle the output */ + toggle = TRUE; + } + /* otherwise if POLY4 is selected */ + else if (audc & POKEY_POLY4) { + /* then compare to the poly4 bit */ + toggle = (bit4[P4] == !(*out_ptr)); + } + else { + /* if 9-bit poly is selected on this chip */ + if (POKEY_AUDCTL[next_event >> 2] & POKEY_POLY9) { + /* compare to the poly9 bit */ + toggle = ((POKEY_poly9_lookup[P9] & 1) == !(*out_ptr)); + } + else { + /* otherwise compare to the poly17 bit */ + toggle = (((POKEY_poly17_lookup[P17 >> 3] >> (P17 & 7)) & 1) == !(*out_ptr)); + } + } + } + } + + /* check channel 1 filter (clocked by channel 3) */ + if ( POKEY_AUDCTL[next_event >> 2] & POKEY_CH1_FILTER) { + /* if we're processing channel 3 */ + if ((next_event & 0x03) == POKEY_CHAN3) { + /* check output of channel 1 on same chip */ + if (Outvol[next_event & 0xfd]) { + /* if on, turn it off */ + Outvol[next_event & 0xfd] = 0; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled && (next_event & 0x04)) +#else + if ((next_event & 0x04)) +#endif + cur_val2 -= pokeysnd_AUDV[next_event & 0xfd]; + else +#endif /* STEREO_SOUND */ + cur_val -= pokeysnd_AUDV[next_event & 0xfd]; + } + } + } + + /* check channel 2 filter (clocked by channel 4) */ + if ( POKEY_AUDCTL[next_event >> 2] & POKEY_CH2_FILTER) { + /* if we're processing channel 4 */ + if ((next_event & 0x03) == POKEY_CHAN4) { + /* check output of channel 2 on same chip */ + if (Outvol[next_event & 0xfd]) { + /* if on, turn it off */ + Outvol[next_event & 0xfd] = 0; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled && (next_event & 0x04)) +#else + if ((next_event & 0x04)) +#endif + cur_val2 -= pokeysnd_AUDV[next_event & 0xfd]; + else +#endif /* STEREO_SOUND */ + cur_val -= pokeysnd_AUDV[next_event & 0xfd]; + } + } + } + + /* if the current output bit has changed */ + if (toggle) { + if (*out_ptr) { + /* remove this channel from the signal */ +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled && (next_event & 0x04)) +#else + if ((next_event & 0x04)) +#endif + cur_val2 -= pokeysnd_AUDV[next_event]; + else +#endif /* STEREO_SOUND */ + cur_val -= pokeysnd_AUDV[next_event]; + + /* and turn the output off */ + *out_ptr = 0; + } + else { + /* turn the output on */ + *out_ptr = 1; + + /* and add it to the output signal */ +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled && (next_event & 0x04)) +#else + if ((next_event & 0x04)) +#endif + cur_val2 += pokeysnd_AUDV[next_event]; + else +#endif /* STEREO_SOUND */ + cur_val += pokeysnd_AUDV[next_event]; + } + } + } + else { /* otherwise we're processing a sample */ + /* adjust the sample counter - note we're using the 24.8 integer + which includes an 8 bit fraction for accuracy */ + + int iout; +#ifdef STEREO_SOUND + int iout2; +#endif +#ifdef INTERPOLATE_SOUND + if (cur_val != last_val) { + if (*Samp_n_cnt < Samp_n_max) { /* need interpolation */ +#ifdef CLIP_SOUND + iout = (cur_val * (SLONG)(*Samp_n_cnt) + + last_val * (SLONG)(Samp_n_max - *Samp_n_cnt)) + / (SLONG)Samp_n_max; +#else + iout = (cur_val * (*Samp_n_cnt) + + last_val * (Samp_n_max - *Samp_n_cnt)) + / Samp_n_max; +#endif + } + else + iout = cur_val; + last_val = cur_val; + } + else + iout = cur_val; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + if (cur_val2 != last_val2) { + if (*Samp_n_cnt < Samp_n_max) { /* need interpolation */ +#ifdef CLIP_SOUND + iout2 = (cur_val2 * (SLONG)(*Samp_n_cnt) + + last_val2 * (SLONG)(Samp_n_max - *Samp_n_cnt)) + / (SLONG)Samp_n_max; +#else + iout2 = (cur_val2 * (*Samp_n_cnt) + + last_val2 * (Samp_n_max - *Samp_n_cnt)) + / Samp_n_max; +#endif + } + else + iout2 = cur_val2; + last_val2 = cur_val2; + } + else + iout2 = cur_val2; +#endif /* STEREO_SOUND */ +#else /* INTERPOLATE_SOUND */ + iout = cur_val; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + iout2 = cur_val2; +#endif /* STEREO_SOUND */ +#endif /* INTERPOLATE_SOUND */ + +#ifdef VOL_ONLY_SOUND +#ifdef __PLUS + if (g_Sound.nDigitized) +#endif + { + if (POKEYSND_sampbuf_rptr != POKEYSND_sampbuf_ptr) { + int l; + if (POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_rptr] > 0) + POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_rptr] -= 1280; + while ((l = POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_rptr]) <= 0) { + POKEYSND_sampout = POKEYSND_sampbuf_val[POKEYSND_sampbuf_rptr]; + POKEYSND_sampbuf_rptr++; + if (POKEYSND_sampbuf_rptr >= POKEYSND_SAMPBUF_MAX) + POKEYSND_sampbuf_rptr = 0; + if (POKEYSND_sampbuf_rptr != POKEYSND_sampbuf_ptr) + POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_rptr] += l; + else + break; + } + } + iout += POKEYSND_sampout; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + { + if (sampbuf_rptr2 != sampbuf_ptr2) { + int l; + if (sampbuf_cnt2[sampbuf_rptr2] > 0) + sampbuf_cnt2[sampbuf_rptr2] -= 1280; + while ((l = sampbuf_cnt2[sampbuf_rptr2]) <= 0) { + sampout2 = sampbuf_val2[sampbuf_rptr2]; + sampbuf_rptr2++; + if (sampbuf_rptr2 >= POKEYSND_SAMPBUF_MAX) + sampbuf_rptr2 = 0; + if (sampbuf_rptr2 != sampbuf_ptr2) + sampbuf_cnt2[sampbuf_rptr2] += l; + else + break; + } + } + iout2 += sampout2; + } +#endif /* STEREO_SOUND */ + } +#endif /* VOL_ONLY_SOUND */ + +#ifdef CLIP_SOUND + if (iout > POKEYSND_SAMP_MAX) { /* then check high limit */ + *buffer++ = (UBYTE) POKEYSND_SAMP_MAX; /* and limit if greater */ + } + else if (iout < POKEYSND_SAMP_MIN) { /* else check low limit */ + *buffer++ = (UBYTE) POKEYSND_SAMP_MIN; /* and limit if less */ + } + else { /* otherwise use raw value */ + *buffer++ = (UBYTE) iout; + } +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) { + if (iout2 > POKEYSND_SAMP_MAX) + *buffer++ = (UBYTE) POKEYSND_SAMP_MAX; + else if (iout2 < POKEYSND_SAMP_MIN) + *buffer++ = (UBYTE) POKEYSND_SAMP_MIN; + else + *buffer++ = (UBYTE) iout2; + } +#else /* __PLUS */ + if (Num_pokeys > 1) { + if ((POKEYSND_stereo_enabled ? iout2 : iout) > POKEYSND_SAMP_MAX) { /* then check high limit */ + *buffer++ = (UBYTE) POKEYSND_SAMP_MAX; /* and limit if greater */ + } + else if ((POKEYSND_stereo_enabled ? iout2 : iout) < POKEYSND_SAMP_MIN) { /* else check low limit */ + *buffer++ = (UBYTE) POKEYSND_SAMP_MIN; /* and limit if less */ + } + else { /* otherwise use raw value */ + *buffer++ = (UBYTE) (POKEYSND_stereo_enabled ? iout2 : iout); + } + } +#endif /* __PLUS */ +#endif /* STEREO_SOUND */ +#else /* CLIP_SOUND */ + *buffer++ = (UBYTE) iout; /* clipping not selected, use value */ +#ifdef STEREO_SOUND + if (Num_pokeys > 1) +#ifdef ASAP + *buffer++ = (UBYTE) iout2; +#else + *buffer++ = (UBYTE) (POKEYSND_stereo_enabled ? iout2 : iout); +#endif +#endif /* STEREO_SOUND */ +#endif /* CLIP_SOUND */ + +#ifdef WORDS_BIGENDIAN + *(Samp_n_cnt + 1) += Samp_n_max; +#else + *Samp_n_cnt += Samp_n_max; +#endif + /* and indicate one less byte in the buffer */ + n--; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + if (Num_pokeys > 1) + n--; +#endif + } + } +#ifdef VOL_ONLY_SOUND +#ifdef __PLUS + if (g_Sound.nDigitized) +#endif + { + if (POKEYSND_sampbuf_rptr == POKEYSND_sampbuf_ptr) + POKEYSND_sampbuf_last = ANTIC_CPU_CLOCK; +#ifdef STEREO_SOUND +#ifdef __PLUS + if (POKEYSND_stereo_enabled) +#endif + if (sampbuf_rptr2 == sampbuf_ptr2) + sampbuf_last2 = ANTIC_CPU_CLOCK; +#endif /* STEREO_SOUND */ + } +#endif /* VOL_ONLY_SOUND */ +} + +#ifdef SERIO_SOUND +static void Update_serio_sound_rf(int out, UBYTE data) +{ +#ifdef VOL_ONLY_SOUND +#ifdef __PLUS + if (g_Sound.nDigitized) { +#endif + int bits, pv, future; + if (!POKEYSND_serio_sound_enabled) return; + + pv = 0; + future = 0; + bits = (data << 1) | 0x200; + while (bits) + { + POKEYSND_sampbuf_lastval -= pv; + pv = (bits & 0x01) * pokeysnd_AUDV[3]; /* FIXME!!! - set volume from AUDV */ + POKEYSND_sampbuf_lastval += pv; + + POKEYSND_sampbuf_val[POKEYSND_sampbuf_ptr] = POKEYSND_sampbuf_lastval; + POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_ptr] = + (ANTIC_CPU_CLOCK + future-POKEYSND_sampbuf_last) * 128 * POKEYSND_samp_freq / 178979; + POKEYSND_sampbuf_last = ANTIC_CPU_CLOCK + future; + POKEYSND_sampbuf_ptr++; + if (POKEYSND_sampbuf_ptr >= POKEYSND_SAMPBUF_MAX ) + POKEYSND_sampbuf_ptr = 0; + if (POKEYSND_sampbuf_ptr == POKEYSND_sampbuf_rptr ) { + POKEYSND_sampbuf_rptr++; + if (POKEYSND_sampbuf_rptr >= POKEYSND_SAMPBUF_MAX) + POKEYSND_sampbuf_rptr = 0; + } + /* 1789790/19200 = 93 */ + future += 93; /* ~ 19200 bit/s - FIXME!!! set speed form AUDF [2] ??? */ + bits >>= 1; + } + POKEYSND_sampbuf_lastval -= pv; +#ifdef __PLUS + } +#endif +#endif /* VOL_ONLY_SOUND */ +} +#endif /* SERIO_SOUND */ + +void POKEYSND_SetVolume(int vol) +{ + if (vol > 100) + vol = 100; + if (vol < 0) + vol = 0; + + POKEYSND_volume = vol * 0x100 / 100; +} + +static void pokeysnd_process_16(void *sndbuffer, int sndn) +{ + short *buffer = (UWORD *) sndbuffer; + int i; + + pokeysnd_process_8(buffer, sndn); + + for (i = sndn - 1; i >= 0; i--) { +#ifndef POKEYSND_SIGNED_SAMPLES + int smp = ((int) (((UBYTE *) buffer)[i]) - 0x80) * POKEYSND_volume; +#else + int smp = ((int) ((SBYTE *) buffer)[i]) * POKEYSND_volume; +#endif + if (smp > 32767) + smp = 32767; + else if (smp < -32768) + smp = -32768; + + buffer[i] = smp; + } + +} + +#ifdef SYNCHRONIZED_SOUND +static void Generate_sync_rf(unsigned int num_ticks) +{ + double new_samp_pos; + unsigned int ticks; + UBYTE *buffer = POKEYSND_process_buffer + POKEYSND_process_buffer_fill; + UBYTE *buffer_end = POKEYSND_process_buffer + POKEYSND_process_buffer_length; + + for (;;) { + double int_part; + new_samp_pos = samp_pos + ticks_per_sample; + new_samp_pos = modf(new_samp_pos, &int_part); + ticks = (unsigned int)int_part; + if (ticks > num_ticks) { + samp_pos -= num_ticks; + break; + } + if (buffer >= buffer_end) + break; + + samp_pos = new_samp_pos; + num_ticks -= ticks; + + if (POKEYSND_snd_flags & POKEYSND_BIT16) { + pokeysnd_process_16(buffer, POKEYSND_num_pokeys); + buffer += 2 * POKEYSND_num_pokeys; + } + else { + pokeysnd_process_8(buffer, POKEYSND_num_pokeys); + buffer += POKEYSND_num_pokeys; + } + + } + + POKEYSND_process_buffer_fill = buffer - POKEYSND_process_buffer; +} +#endif /* SYNCHRONIZED_SOUND */ + +#ifdef CONSOLE_SOUND +void POKEYSND_UpdateConsol(int set) +{ + if (!POKEYSND_console_sound_enabled) + return; +#ifdef SYNCHRONIZED_SOUND + if (set) + Update_synchronized_sound(); +#endif /* SYNCHRONIZED_SOUND */ + POKEYSND_UpdateConsol_ptr(set); +} + +static void Update_consol_sound_rf(int set) +{ +#ifdef SYNCHRONIZED_SOUND + if (set) + speaker = CONSOLE_VOL * GTIA_speaker; +#elif defined(VOL_ONLY_SOUND) + static int prev_atari_speaker = 0; + static unsigned int prev_cpu_clock = 0; + int d; +#ifdef __PLUS + if (!g_Sound.nDigitized) + return; +#endif + + if (!set && POKEYSND_samp_consol_val == 0) + return; + POKEYSND_sampbuf_lastval -= POKEYSND_samp_consol_val; + if (prev_atari_speaker != GTIA_speaker) { + POKEYSND_samp_consol_val = GTIA_speaker * 8 * 4; /* gain */ + prev_cpu_clock = ANTIC_CPU_CLOCK; + } + else if (!set) { + d = ANTIC_CPU_CLOCK - prev_cpu_clock; + if (d < 114) { + POKEYSND_sampbuf_lastval += POKEYSND_samp_consol_val; + return; + } + while (d >= 114 /* CPUL */) { + POKEYSND_samp_consol_val = POKEYSND_samp_consol_val * 99 / 100; + d -= 114; + } + prev_cpu_clock = ANTIC_CPU_CLOCK - d; + } + POKEYSND_sampbuf_lastval += POKEYSND_samp_consol_val; + prev_atari_speaker = GTIA_speaker; + + POKEYSND_sampbuf_val[POKEYSND_sampbuf_ptr] = POKEYSND_sampbuf_lastval; + POKEYSND_sampbuf_cnt[POKEYSND_sampbuf_ptr] = + (ANTIC_CPU_CLOCK - POKEYSND_sampbuf_last) * 128 * POKEYSND_samp_freq / 178979; + POKEYSND_sampbuf_last = ANTIC_CPU_CLOCK; + POKEYSND_sampbuf_ptr++; + if (POKEYSND_sampbuf_ptr >= POKEYSND_SAMPBUF_MAX) + POKEYSND_sampbuf_ptr = 0; + if (POKEYSND_sampbuf_ptr == POKEYSND_sampbuf_rptr) { + POKEYSND_sampbuf_rptr++; + if (POKEYSND_sampbuf_rptr >= POKEYSND_SAMPBUF_MAX) + POKEYSND_sampbuf_rptr = 0; + } +#endif /* !SYNCHRONIZED_SOUND && VOL_ONLY_SOUND */ +} +#endif /* CONSOLE_SOUND */ + +#ifdef VOL_ONLY_SOUND +static void Update_vol_only_sound_rf(void) +{ +#ifdef CONSOLE_SOUND + POKEYSND_UpdateConsol(0); /* mmm */ +#endif /* CONSOLE_SOUND */ +} +#endif /* VOL_ONLY_SOUND */ diff --git a/MCUME_pico/pico800/pokeysnd.h b/MCUME_pico/pico800/pokeysnd.h new file mode 100644 index 0000000..64f5cd6 --- /dev/null +++ b/MCUME_pico/pico800/pokeysnd.h @@ -0,0 +1,144 @@ +/*****************************************************************************/ +/* */ +/* Module: POKEY Chip Simulator Includes, V2.3 */ +/* Purpose: To emulate the sound generation hardware of the Atari POKEY chip. */ +/* Author: Ron Fries */ +/* */ +/* Revision History: */ +/* */ +/* 09/22/96 - Ron Fries - Initial Release */ +/* 04/06/97 - Brad Oliver - Some cross-platform modifications. Added */ +/* big/little endian #defines, removed , */ +/* conditional defines for TRUE/FALSE */ +/* 01/19/98 - Ron Fries - Changed signed/unsigned sample support to a */ +/* compile-time option. Defaults to unsigned - */ +/* define SIGNED_SAMPLES to create signed. */ +/* */ +/*****************************************************************************/ +/* */ +/* License Information and Copyright Notice */ +/* ======================================== */ +/* */ +/* PokeySound is Copyright(c) 1996-1998 by Ron Fries */ +/* */ +/* This library is free software; you can redistribute it and/or modify it */ +/* under the terms of version 2 of the GNU Library General Public License */ +/* as published by the Free Software Foundation. */ +/* */ +/* This library 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 Library */ +/* General Public License for more details. */ +/* To obtain a copy of the GNU Library General Public License, write to the */ +/* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +/* */ +/* Any permitted reproduction of these routines, in whole or in part, must */ +/* bear this legend. */ +/* */ +/*****************************************************************************/ + +#ifndef POKEYSND_H_ +#define POKEYSND_H_ + +#include "atari.h" +#include "pokey.h" + +/* CONSTANT DEFINITIONS */ + +/* As an alternative to using the exact frequencies, selecting a playback + frequency that is an exact division of the main clock provides a higher + quality output due to less aliasing. For best results, a value of + 1787520 MHz is used for the main clock. With this value, both the + 64 kHz and 15 kHz clocks are evenly divisible. Selecting a playback + frequency that is also a division of the clock provides the best + results. The best options are FREQ_64 divided by either 2, 3, or 4. + The best selection is based on a trade off between performance and + sound quality. + + Of course, using a main clock frequency that is not exact will affect + the pitch of the output. With these numbers, the pitch will be low + by 0.127%. (More than likely, an actual unit will vary by this much!) */ + +#define POKEYSND_FREQ_17_EXACT 1789790 /* exact 1.79 MHz clock freq */ +#define POKEYSND_FREQ_17_APPROX 1787520 /* approximate 1.79 MHz clock freq */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef POKEYSND_SIGNED_SAMPLES /* if signed output selected */ +#define POKEYSND_SAMP_MAX 127 /* then set signed 8-bit clipping ranges */ +#define POKEYSND_SAMP_MIN -128 +#define POKEYSND_SAMP_MID 0 +#else +#define POKEYSND_SAMP_MAX 255 /* else set unsigned 8-bit clip ranges */ +#define POKEYSND_SAMP_MIN 0 +#define POKEYSND_SAMP_MID 128 +#endif + +/* init flags */ +#define POKEYSND_BIT16 1 + +extern SLONG POKEYSND_playback_freq; +extern UBYTE POKEYSND_num_pokeys; +extern int POKEYSND_snd_flags; +extern int POKEYSND_volume; + +extern int POKEYSND_enable_new_pokey; +extern int POKEYSND_stereo_enabled; +extern int POKEYSND_serio_sound_enabled; +extern int POKEYSND_console_sound_enabled; +extern int POKEYSND_bienias_fix; + +extern void (*POKEYSND_Process_ptr)(void *sndbuffer, int sndn); +extern void (*POKEYSND_Update_ptr)(UWORD addr, UBYTE val, UBYTE chip, UBYTE gain); +extern void (*POKEYSND_UpdateSerio)(int out, UBYTE data); +extern void (*POKEYSND_UpdateConsol_ptr)(int set); +extern void (*POKEYSND_UpdateVolOnly)(void); + +int POKEYSND_Init(ULONG freq17, int playback_freq, UBYTE num_pokeys, + int flags +#ifdef __PLUS + , int clear_regs +#endif + ); +void POKEYSND_Update(UWORD addr, UBYTE val, UBYTE /*chip*/, UBYTE gain); +void POKEYSND_UpdateConsol(int set); + +/* Fill sndbuffer with sndn samples of audio. Number of bytes written to + sndbuffer is sndn with 8-bit sound, and 2*sndn with 16-bit sound. sndn + must be a multiple of POKEYSND_num_pokeys. */ +void POKEYSND_Process(void *sndbuffer, int sndn); +int POKEYSND_DoInit(void); +void POKEYSND_SetMzQuality(int quality); +void POKEYSND_SetVolume(int vol); + +/* Volume only emulations declarations */ +#ifdef VOL_ONLY_SOUND + +#define POKEYSND_SAMPBUF_MAX 2000 +extern int POKEYSND_sampbuf_val[POKEYSND_SAMPBUF_MAX]; /* volume values */ +extern int POKEYSND_sampbuf_cnt[POKEYSND_SAMPBUF_MAX]; /* relative start time */ +extern int POKEYSND_sampbuf_ptr; /* pointer to sampbuf */ +extern int POKEYSND_sampbuf_rptr; /* pointer to read from sampbuf */ +extern int POKEYSND_sampbuf_last; /* last absolute time */ +extern int POKEYSND_sampbuf_AUDV[4 * POKEY_MAXPOKEYS]; /* prev. channel volume */ +extern int POKEYSND_sampbuf_lastval; /* last volume */ +extern int POKEYSND_sampout; /* last out volume */ +extern int POKEYSND_samp_freq; +extern int POKEYSND_samp_consol_val; /* actual value of console sound */ +#endif /* VOL_ONLY_SOUND */ + +#ifdef SYNCHRONIZED_SOUND +extern UBYTE *POKEYSND_process_buffer; +extern unsigned int POKEYSND_process_buffer_length; +extern unsigned int POKEYSND_process_buffer_fill; +extern void (*POKEYSND_GenerateSync)(unsigned int num_ticks); +int POKEYSND_UpdateProcessBuffer(void); +#endif /* SYNCHRONIZED_SOUND */ + +#ifdef __cplusplus +} + +#endif +#endif /* POKEYSND_H_ */ diff --git a/MCUME_pico/pico800/romatariosa.h b/MCUME_pico/pico800/romatariosa.h new file mode 100644 index 0000000..207cb1a --- /dev/null +++ b/MCUME_pico/pico800/romatariosa.h @@ -0,0 +1,642 @@ +const UBYTE PROGMEM romos[10240] = { +0x20,0xA1,0xDB,0x20,0xBB,0xDB,0xB0,0x39,0xA2,0xED,0xA0,0x04,0x20,0x48,0xDA,0xA2, +0xFF,0x86,0xF1,0x20,0x44,0xDA,0xF0,0x04,0xA9,0xFF,0x85,0xF0,0x20,0x94,0xDB,0xB0, +0x21,0x48,0xA6,0xD5,0xD0,0x11,0x20,0xEB,0xDB,0x68,0x05,0xD9,0x85,0xD9,0xA6,0xF1, +0x30,0xE6,0xE8,0x86,0xF1,0xD0,0xE1,0x68,0xA6,0xF1,0x10,0x02,0xE6,0xED,0x4C,0x18, +0xD8,0x60,0xC9,0x2E,0xF0,0x14,0xC9,0x45,0xF0,0x19,0xA6,0xF0,0xD0,0x68,0xC9,0x2B, +0xF0,0xC6,0xC9,0x2D,0xF0,0x00,0x85,0xEE,0xF0,0xBE,0xA6,0xF1,0x10,0x58,0xE8,0x86, +0xF1,0xF0,0xB5,0xA5,0xF2,0x85,0xEC,0x20,0x94,0xDB,0xB0,0x37,0xAA,0xA5,0xED,0x48, +0x86,0xED,0x20,0x94,0xDB,0xB0,0x17,0x48,0xA5,0xED,0x0A,0x85,0xED,0x0A,0x0A,0x65, +0xED,0x85,0xED,0x68,0x18,0x65,0xED,0x85,0xED,0xA4,0xF2,0x20,0x9D,0xDB,0xA5,0xEF, +0xF0,0x09,0xA5,0xED,0x49,0xFF,0x18,0x69,0x01,0x85,0xED,0x68,0x18,0x65,0xED,0x85, +0xED,0xD0,0x13,0xC9,0x2B,0xF0,0x06,0xC9,0x2D,0xD0,0x07,0x85,0xEF,0x20,0x94,0xDB, +0x90,0xBA,0xA5,0xEC,0x85,0xF2,0xC6,0xF2,0xA5,0xED,0xA6,0xF1,0x30,0x05,0xF0,0x03, +0x38,0xE5,0xF1,0x48,0x2A,0x68,0x6A,0x85,0xED,0x90,0x03,0x20,0xEB,0xDB,0xA5,0xED, +0x18,0x69,0x44,0x85,0xD4,0x20,0x00,0xDC,0xB0,0x0B,0xA6,0xEE,0xF0,0x06,0xA5,0xD4, +0x09,0x80,0x85,0xD4,0x18,0x60,0x20,0x51,0xDA,0xA9,0x30,0x8D,0x7F,0x05,0xA5,0xD4, +0xF0,0x28,0x29,0x7F,0xC9,0x3F,0x90,0x28,0xC9,0x45,0xB0,0x24,0x38,0xE9,0x3F,0x20, +0x70,0xDC,0x20,0xA4,0xDC,0x09,0x80,0x9D,0x80,0x05,0xAD,0x80,0x05,0xC9,0x2E,0xF0, +0x03,0x4C,0x88,0xD9,0x20,0xC1,0xDC,0x4C,0x9C,0xD9,0xA9,0xB0,0x8D,0x80,0x05,0x60, +0xA9,0x01,0x20,0x70,0xDC,0x20,0xA4,0xDC,0xE8,0x86,0xF2,0xA5,0xD4,0x0A,0x38,0xE9, +0x80,0xAE,0x80,0x05,0xE0,0x30,0xF0,0x17,0xAE,0x81,0x05,0xAC,0x82,0x05,0x8E,0x82, +0x05,0x8C,0x81,0x05,0xA6,0xF2,0xE0,0x02,0xD0,0x02,0xE6,0xF2,0x18,0x69,0x01,0x85, +0xED,0xA9,0x45,0xA4,0xF2,0x20,0x9F,0xDC,0x84,0xF2,0xA5,0xED,0x10,0x0B,0xA9,0x00, +0x38,0xE5,0xED,0x85,0xED,0xA9,0x2D,0xD0,0x02,0xA9,0x2B,0x20,0x9F,0xDC,0xA2,0x00, +0xA5,0xED,0x38,0xE9,0x0A,0x90,0x03,0xE8,0xD0,0xF8,0x18,0x69,0x0A,0x48,0x8A,0x20, +0x9D,0xDC,0x68,0x09,0x80,0x20,0x9D,0xDC,0xAD,0x80,0x05,0xC9,0x30,0xD0,0x0D,0x18, +0xA5,0xF3,0x69,0x01,0x85,0xF3,0xA5,0xF4,0x69,0x00,0x85,0xF4,0xA5,0xD4,0x10,0x09, +0x20,0xC1,0xDC,0xA0,0x00,0xA9,0x2D,0x91,0xF3,0x60,0xA5,0xD4,0x85,0xF8,0xA5,0xD5, +0x85,0xF7,0x20,0x44,0xDA,0xF8,0xA0,0x10,0x06,0xF8,0x26,0xF7,0xA2,0x03,0xB5,0xD4, +0x75,0xD4,0x95,0xD4,0xCA,0xD0,0xF7,0x88,0xD0,0xEE,0xD8,0xA9,0x42,0x85,0xD4,0x4C, +0x00,0xDC,0xA9,0x00,0x85,0xF7,0x85,0xF8,0xA5,0xD4,0x30,0x66,0xC9,0x43,0xB0,0x62, +0x38,0xE9,0x40,0x90,0x3F,0x69,0x00,0x0A,0x85,0xF5,0x20,0x5A,0xDA,0xB0,0x53,0xA5, +0xF7,0x85,0xF9,0xA5,0xF8,0x85,0xFA,0x20,0x5A,0xDA,0xB0,0x46,0x20,0x5A,0xDA,0xB0, +0x41,0x18,0xA5,0xF8,0x65,0xFA,0x85,0xF8,0xA5,0xF7,0x65,0xF9,0x85,0xF7,0xB0,0x32, +0x20,0xB9,0xDC,0x18,0x65,0xF8,0x85,0xF8,0xA5,0xF7,0x69,0x00,0xB0,0x24,0x85,0xF7, +0xC6,0xF5,0xD0,0xC6,0x20,0xB9,0xDC,0xC9,0x05,0x90,0x0D,0x18,0xA5,0xF8,0x69,0x01, +0x85,0xF8,0xA5,0xF7,0x69,0x00,0x85,0xF7,0xA5,0xF8,0x85,0xD4,0xA5,0xF7,0x85,0xD5, +0x18,0x60,0x38,0x60,0xA2,0xD4,0xA0,0x06,0xA9,0x00,0x95,0x00,0xE8,0x88,0xD0,0xFA, +0x60,0xA9,0x05,0x85,0xF4,0xA9,0x80,0x85,0xF3,0x60,0x18,0x26,0xF8,0x26,0xF7,0x60, +0xA5,0xE0,0x49,0x80,0x85,0xE0,0xA5,0xE0,0x29,0x7F,0x85,0xF7,0xA5,0xD4,0x29,0x7F, +0x38,0xE5,0xF7,0x10,0x10,0xA2,0x05,0xB5,0xD4,0xB4,0xE0,0x95,0xE0,0x98,0x95,0xD4, +0xCA,0x10,0xF4,0x30,0xE1,0xF0,0x07,0xC9,0x05,0xB0,0x19,0x20,0x3E,0xDC,0xF8,0xA5, +0xD4,0x45,0xE0,0x30,0x1E,0xA2,0x04,0x18,0xB5,0xD5,0x75,0xE1,0x95,0xD5,0xCA,0x10, +0xF7,0xD8,0xB0,0x03,0x4C,0x00,0xDC,0xA9,0x01,0x20,0x3A,0xDC,0xA9,0x01,0x85,0xD5, +0x4C,0x00,0xDC,0xA2,0x04,0x38,0xB5,0xD5,0xF5,0xE1,0x95,0xD5,0xCA,0x10,0xF7,0x90, +0x04,0xD8,0x4C,0x00,0xDC,0xA5,0xD4,0x49,0x80,0x85,0xD4,0x38,0xA2,0x04,0xA9,0x00, +0xF5,0xD5,0x95,0xD5,0xCA,0x10,0xF7,0xD8,0x4C,0x00,0xDC,0xA5,0xD4,0xF0,0x45,0xA5, +0xE0,0xF0,0x3E,0x20,0xCF,0xDC,0x38,0xE9,0x40,0x38,0x65,0xE0,0x30,0x38,0x20,0xE0, +0xDC,0xA5,0xDF,0x29,0x0F,0x85,0xF6,0xC6,0xF6,0x30,0x06,0x20,0x01,0xDD,0x4C,0xF7, +0xDA,0xA5,0xDF,0x4A,0x4A,0x4A,0x4A,0x85,0xF6,0xC6,0xF6,0x30,0x06,0x20,0x05,0xDD, +0x4C,0x09,0xDB,0x20,0x62,0xDC,0xC6,0xF5,0xD0,0xD7,0xA5,0xED,0x85,0xD4,0x4C,0x04, +0xDC,0x20,0x44,0xDA,0x18,0x60,0x38,0x60,0xA5,0xE0,0xF0,0xFA,0xA5,0xD4,0xF0,0xF4, +0x20,0xCF,0xDC,0x38,0xE5,0xE0,0x18,0x69,0x40,0x30,0xEB,0x20,0xE0,0xDC,0xE6,0xF5, +0x4C,0x4E,0xDB,0xA2,0x00,0xB5,0xD5,0x95,0xD4,0xE8,0xE0,0x0C,0xD0,0xF7,0xA0,0x05, +0x38,0xF8,0xB9,0xDA,0x00,0xF9,0xE6,0x00,0x99,0xDA,0x00,0x88,0x10,0xF4,0xD8,0x90, +0x04,0xE6,0xD9,0xD0,0xE9,0x20,0x0F,0xDD,0x06,0xD9,0x06,0xD9,0x06,0xD9,0x06,0xD9, +0xA0,0x05,0x38,0xF8,0xB9,0xDA,0x00,0xF9,0xE0,0x00,0x99,0xDA,0x00,0x88,0x10,0xF4, +0xD8,0x90,0x04,0xE6,0xD9,0xD0,0xE9,0x20,0x09,0xDD,0xC6,0xF5,0xD0,0xB5,0x20,0x62, +0xDC,0x4C,0x1A,0xDB,0x20,0xAF,0xDB,0xA4,0xF2,0x90,0x02,0xB1,0xF3,0xC8,0x84,0xF2, +0x60,0xA4,0xF2,0xA9,0x20,0xD1,0xF3,0xD0,0x03,0xC8,0xD0,0xF9,0x84,0xF2,0x60,0xA4, +0xF2,0xB1,0xF3,0x38,0xE9,0x30,0x90,0x18,0xC9,0x0A,0x60,0xA5,0xF2,0x48,0x20,0x94, +0xDB,0x90,0x1F,0xC9,0x2E,0xF0,0x14,0xC9,0x2B,0xF0,0x07,0xC9,0x2D,0xF0,0x03,0x68, +0x38,0x60,0x20,0x94,0xDB,0x90,0x0B,0xC9,0x2E,0xD0,0xF4,0x20,0x94,0xDB,0x90,0x02, +0xB0,0xED,0x68,0x85,0xF2,0x18,0x60,0xA2,0xE7,0xD0,0x02,0xA2,0xD5,0xA0,0x04,0x18, +0x36,0x04,0x36,0x03,0x36,0x02,0x36,0x01,0x36,0x00,0x26,0xEC,0x88,0xD0,0xF0,0x60, +0xA2,0x00,0x86,0xDA,0xA2,0x04,0xA5,0xD4,0xF0,0x2E,0xA5,0xD5,0xD0,0x1A,0xA0,0x00, +0xB9,0xD6,0x00,0x99,0xD5,0x00,0xC8,0xC0,0x05,0x90,0xF5,0xC6,0xD4,0xCA,0xD0,0xEA, +0xA5,0xD5,0xD0,0x04,0x85,0xD4,0x18,0x60,0xA5,0xD4,0x29,0x7F,0xC9,0x71,0x90,0x01, +0x60,0xC9,0x0F,0xB0,0x03,0x20,0x44,0xDA,0x18,0x60,0xA2,0xD4,0xD0,0x02,0xA2,0xE0, +0x86,0xF9,0x85,0xF7,0x85,0xF8,0xA0,0x04,0xB5,0x04,0x95,0x05,0xCA,0x88,0xD0,0xF8, +0xA9,0x00,0x95,0x05,0xA6,0xF9,0xC6,0xF7,0xD0,0xEC,0xB5,0x00,0x18,0x65,0xF8,0x95, +0x00,0x60,0xA2,0x0A,0xB5,0xD4,0x95,0xD5,0xCA,0x10,0xF9,0xA9,0x00,0x85,0xD4,0x60, +0x85,0xF7,0xA2,0x00,0xA0,0x00,0x20,0x93,0xDC,0x38,0xE9,0x01,0x85,0xF7,0xB5,0xD5, +0x4A,0x4A,0x4A,0x4A,0x20,0x9D,0xDC,0xB5,0xD5,0x29,0x0F,0x20,0x9D,0xDC,0xE8,0xE0, +0x05,0x90,0xE3,0xA5,0xF7,0xD0,0x05,0xA9,0x2E,0x20,0x9F,0xDC,0x60,0x09,0x30,0x99, +0x80,0x05,0xC8,0x60,0xA2,0x0A,0xBD,0x80,0x05,0xC9,0x2E,0xF0,0x07,0xC9,0x30,0xD0, +0x07,0xCA,0xD0,0xF2,0xCA,0xBD,0x80,0x05,0x60,0x20,0xEB,0xDB,0xA5,0xEC,0x29,0x0F, +0x60,0x38,0xA5,0xF3,0xE9,0x01,0x85,0xF3,0xA5,0xF4,0xE9,0x00,0x85,0xF4,0x60,0xA5, +0xD4,0x45,0xE0,0x29,0x80,0x85,0xEE,0x06,0xE0,0x46,0xE0,0xA5,0xD4,0x29,0x7F,0x60, +0x05,0xEE,0x85,0xED,0xA9,0x00,0x85,0xD4,0x85,0xE0,0x20,0x28,0xDD,0x20,0xE7,0xDB, +0xA5,0xEC,0x29,0x0F,0x85,0xE6,0xA9,0x05,0x85,0xF5,0x20,0x34,0xDD,0x20,0x44,0xDA, +0x60,0xA2,0xD9,0xD0,0x06,0xA2,0xD9,0xD0,0x08,0xA2,0xDF,0xA0,0xE5,0xD0,0x04,0xA2, +0xDF,0xA0,0xEB,0xA9,0x05,0x85,0xF7,0x18,0xF8,0xB5,0x00,0x79,0x00,0x00,0x95,0x00, +0xCA,0x88,0xC6,0xF7,0x10,0xF3,0xD8,0x60,0xA0,0x05,0xB9,0xE0,0x00,0x99,0xE6,0x00, +0x88,0x10,0xF7,0x60,0xA0,0x05,0xB9,0xD4,0x00,0x99,0xDA,0x00,0x88,0x10,0xF7,0x60, +0x86,0xFE,0x84,0xFF,0x85,0xEF,0xA2,0xE0,0xA0,0x05,0x20,0xA7,0xDD,0x20,0xB6,0xDD, +0xA6,0xFE,0xA4,0xFF,0x20,0x89,0xDD,0xC6,0xEF,0xF0,0x2D,0x20,0xDB,0xDA,0xB0,0x28, +0x18,0xA5,0xFE,0x69,0x06,0x85,0xFE,0x90,0x06,0xA5,0xFF,0x69,0x00,0x85,0xFF,0xA6, +0xFE,0xA4,0xFF,0x20,0x98,0xDD,0x20,0x66,0xDA,0xB0,0x0D,0xC6,0xEF,0xF0,0x09,0xA2, +0xE0,0xA0,0x05,0x20,0x98,0xDD,0x30,0xD3,0x60,0x86,0xFC,0x84,0xFD,0xA0,0x05,0xB1, +0xFC,0x99,0xD4,0x00,0x88,0x10,0xF8,0x60,0x86,0xFC,0x84,0xFD,0xA0,0x05,0xB1,0xFC, +0x99,0xE0,0x00,0x88,0x10,0xF8,0x60,0x86,0xFC,0x84,0xFD,0xA0,0x05,0xB9,0xD4,0x00, +0x91,0xFC,0x88,0x10,0xF8,0x60,0xA2,0x05,0xB5,0xD4,0x95,0xE0,0xCA,0x10,0xF9,0x60, +0xA2,0x89,0xA0,0xDE,0x20,0x98,0xDD,0x20,0xDB,0xDA,0xB0,0x7F,0xA9,0x00,0x85,0xF1, +0xA5,0xD4,0x85,0xF0,0x29,0x7F,0x85,0xD4,0x38,0xE9,0x40,0x30,0x26,0xC9,0x04,0x10, +0x6A,0xA2,0xE6,0xA0,0x05,0x20,0xA7,0xDD,0x20,0xD2,0xD9,0xA5,0xD4,0x85,0xF1,0xA5, +0xD5,0xD0,0x58,0x20,0xAA,0xD9,0x20,0xB6,0xDD,0xA2,0xE6,0xA0,0x05,0x20,0x89,0xDD, +0x20,0x60,0xDA,0xA9,0x0A,0xA2,0x4D,0xA0,0xDE,0x20,0x40,0xDD,0x20,0xB6,0xDD,0x20, +0xDB,0xDA,0xA5,0xF1,0xF0,0x23,0x18,0x6A,0x85,0xE0,0xA9,0x01,0x90,0x02,0xA9,0x10, +0x85,0xE1,0xA2,0x04,0xA9,0x00,0x95,0xE2,0xCA,0x10,0xFB,0xA5,0xE0,0x18,0x69,0x40, +0xB0,0x19,0x30,0x17,0x85,0xE0,0x20,0xDB,0xDA,0xA5,0xF0,0x10,0x0D,0x20,0xB6,0xDD, +0xA2,0x8F,0xA0,0xDE,0x20,0x89,0xDD,0x20,0x28,0xDB,0x60,0x38,0x60,0x3D,0x17,0x94, +0x19,0x00,0x00,0x3D,0x57,0x33,0x05,0x00,0x00,0x3E,0x05,0x54,0x76,0x62,0x00,0x3E, +0x32,0x19,0x62,0x27,0x00,0x3F,0x01,0x68,0x60,0x30,0x36,0x3F,0x07,0x32,0x03,0x27, +0x41,0x3F,0x25,0x43,0x34,0x56,0x75,0x3F,0x66,0x27,0x37,0x30,0x50,0x40,0x01,0x15, +0x12,0x92,0x55,0x3F,0x99,0x99,0x99,0x99,0x99,0x3F,0x43,0x42,0x94,0x48,0x19,0x40, +0x01,0x00,0x00,0x00,0x00,0x86,0xFE,0x84,0xFF,0xA2,0xE0,0xA0,0x05,0x20,0xA7,0xDD, +0xA6,0xFE,0xA4,0xFF,0x20,0x98,0xDD,0x20,0x66,0xDA,0xA2,0xE6,0xA0,0x05,0x20,0xA7, +0xDD,0xA2,0xE0,0xA0,0x05,0x20,0x89,0xDD,0xA6,0xFE,0xA4,0xFF,0x20,0x98,0xDD,0x20, +0x60,0xDA,0xA2,0xE6,0xA0,0x05,0x20,0x98,0xDD,0x20,0x28,0xDB,0x60,0xA9,0x01,0xD0, +0x02,0xA9,0x00,0x85,0xF0,0xA5,0xD4,0x10,0x02,0x38,0x60,0xA5,0xD4,0x85,0xE0,0x38, +0xE9,0x40,0x0A,0x85,0xF1,0xA5,0xD5,0x29,0xF0,0xD0,0x04,0xA9,0x01,0xD0,0x04,0xE6, +0xF1,0xA9,0x10,0x85,0xE1,0xA2,0x04,0xA9,0x00,0x95,0xE2,0xCA,0x10,0xFB,0x20,0x28, +0xDB,0xA2,0x66,0xA0,0xDF,0x20,0x95,0xDE,0xA2,0xE6,0xA0,0x05,0x20,0xA7,0xDD,0x20, +0xB6,0xDD,0x20,0xDB,0xDA,0xA9,0x0A,0xA2,0x72,0xA0,0xDF,0x20,0x40,0xDD,0xA2,0xE6, +0xA0,0x05,0x20,0x98,0xDD,0x20,0xDB,0xDA,0xA2,0x6C,0xA0,0xDF,0x20,0x98,0xDD,0x20, +0x66,0xDA,0x20,0xB6,0xDD,0xA9,0x00,0x85,0xD5,0xA5,0xF1,0x85,0xD4,0x10,0x07,0x49, +0xFF,0x18,0x69,0x01,0x85,0xD4,0x20,0xAA,0xD9,0x24,0xF1,0x10,0x06,0xA9,0x80,0x05, +0xD4,0x85,0xD4,0x20,0x66,0xDA,0xA5,0xF0,0xF0,0x0A,0xA2,0x89,0xA0,0xDE,0x20,0x98, +0xDD,0x20,0x28,0xDB,0x18,0x60,0x40,0x03,0x16,0x22,0x77,0x66,0x3F,0x50,0x00,0x00, +0x00,0x00,0x3F,0x49,0x15,0x57,0x11,0x08,0xBF,0x51,0x70,0x49,0x47,0x08,0x3F,0x39, +0x20,0x57,0x61,0x95,0xBF,0x04,0x39,0x63,0x03,0x55,0x3F,0x10,0x09,0x30,0x12,0x64, +0x3F,0x09,0x39,0x08,0x04,0x60,0x3F,0x12,0x42,0x58,0x47,0x42,0x3F,0x17,0x37,0x12, +0x06,0x08,0x3F,0x28,0x95,0x29,0x71,0x17,0x3F,0x86,0x85,0x88,0x96,0x44,0x3E,0x16, +0x05,0x44,0x49,0x00,0xBE,0x95,0x68,0x38,0x45,0x00,0x3F,0x02,0x68,0x79,0x94,0x16, +0xBF,0x04,0x92,0x78,0x90,0x80,0x3F,0x07,0x03,0x15,0x20,0x00,0xBF,0x08,0x92,0x29, +0x12,0x44,0x3F,0x11,0x08,0x40,0x09,0x11,0xBF,0x14,0x28,0x31,0x56,0x04,0x3F,0x19, +0x99,0x98,0x77,0x44,0xBF,0x33,0x33,0x33,0x31,0x13,0x3F,0x99,0x99,0x99,0x99,0x99, +0x3F,0x78,0x53,0x98,0x16,0x34,0x98,0x16,0x34,0xFC,0xE0,0x32,0x50,0xD9,0x68,0x11, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18,0x00, +0x00,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x66,0xFF,0x66,0x66,0xFF,0x66,0x00, +0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00,0x00,0x66,0x6C,0x18,0x30,0x66,0x46,0x00, +0x1C,0x36,0x1C,0x38,0x6F,0x66,0x3B,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00, +0x00,0x0E,0x1C,0x18,0x18,0x1C,0x0E,0x00,0x00,0x70,0x38,0x18,0x18,0x38,0x70,0x00, +0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x40,0x00, +0x00,0x3C,0x66,0x6E,0x76,0x66,0x3C,0x00,0x00,0x18,0x38,0x18,0x18,0x18,0x7E,0x00, +0x00,0x3C,0x66,0x0C,0x18,0x30,0x7E,0x00,0x00,0x7E,0x0C,0x18,0x0C,0x66,0x3C,0x00, +0x00,0x0C,0x1C,0x3C,0x6C,0x7E,0x0C,0x00,0x00,0x7E,0x60,0x7C,0x06,0x66,0x3C,0x00, +0x00,0x3C,0x60,0x7C,0x66,0x66,0x3C,0x00,0x00,0x7E,0x06,0x0C,0x18,0x30,0x30,0x00, +0x00,0x3C,0x66,0x3C,0x66,0x66,0x3C,0x00,0x00,0x3C,0x66,0x3E,0x06,0x0C,0x38,0x00, +0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x30, +0x06,0x0C,0x18,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00, +0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00,0x00,0x3C,0x66,0x0C,0x18,0x00,0x18,0x00, +0x00,0x3C,0x66,0x6E,0x6E,0x60,0x3E,0x00,0x00,0x18,0x3C,0x66,0x66,0x7E,0x66,0x00, +0x00,0x7C,0x66,0x7C,0x66,0x66,0x7C,0x00,0x00,0x3C,0x66,0x60,0x60,0x66,0x3C,0x00, +0x00,0x78,0x6C,0x66,0x66,0x6C,0x78,0x00,0x00,0x7E,0x60,0x7C,0x60,0x60,0x7E,0x00, +0x00,0x7E,0x60,0x7C,0x60,0x60,0x60,0x00,0x00,0x3E,0x60,0x60,0x6E,0x66,0x3E,0x00, +0x00,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x7E,0x00, +0x00,0x06,0x06,0x06,0x06,0x66,0x3C,0x00,0x00,0x66,0x6C,0x78,0x78,0x6C,0x66,0x00, +0x00,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0x00,0x63,0x77,0x7F,0x6B,0x63,0x63,0x00, +0x00,0x66,0x76,0x7E,0x7E,0x6E,0x66,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x00, +0x00,0x7C,0x66,0x66,0x7C,0x60,0x60,0x00,0x00,0x3C,0x66,0x66,0x66,0x6C,0x36,0x00, +0x00,0x7C,0x66,0x66,0x7C,0x6C,0x66,0x00,0x00,0x3C,0x60,0x3C,0x06,0x06,0x3C,0x00, +0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x7E,0x00, +0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00, +0x00,0x66,0x66,0x3C,0x3C,0x66,0x66,0x00,0x00,0x66,0x66,0x3C,0x18,0x18,0x18,0x00, +0x00,0x7E,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x1E,0x18,0x18,0x18,0x18,0x1E,0x00, +0x00,0x40,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x78,0x00, +0x00,0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00, +0x00,0x36,0x7F,0x7F,0x3E,0x1C,0x08,0x00,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18, +0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x18,0x18,0x18,0xF8,0xF8,0x00,0x00,0x00, +0x18,0x18,0x18,0xF8,0xF8,0x18,0x18,0x18,0x00,0x00,0x00,0xF8,0xF8,0x18,0x18,0x18, +0x03,0x07,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0x03, +0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F, +0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00, +0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0, +0x00,0x1C,0x1C,0x77,0x77,0x08,0x1C,0x00,0x00,0x00,0x00,0x1F,0x1F,0x18,0x18,0x18, +0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x18,0x18,0x18,0xFF,0xFF,0x18,0x18,0x18, +0x00,0x00,0x3C,0x7E,0x7E,0x7E,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, +0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0xFF,0xFF,0x18,0x18,0x18, +0x18,0x18,0x18,0xFF,0xFF,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0, +0x18,0x18,0x18,0x1F,0x1F,0x00,0x00,0x00,0x78,0x60,0x78,0x60,0x7E,0x18,0x1E,0x00, +0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x00,0x00,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00, +0x00,0x18,0x30,0x7E,0x30,0x18,0x00,0x00,0x00,0x18,0x0C,0x7E,0x0C,0x18,0x00,0x00, +0x00,0x18,0x3C,0x7E,0x7E,0x3C,0x18,0x00,0x00,0x00,0x3C,0x06,0x3E,0x66,0x3E,0x00, +0x00,0x60,0x60,0x7C,0x66,0x66,0x7C,0x00,0x00,0x00,0x3C,0x60,0x60,0x60,0x3C,0x00, +0x00,0x06,0x06,0x3E,0x66,0x66,0x3E,0x00,0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00, +0x00,0x0E,0x18,0x3E,0x18,0x18,0x18,0x00,0x00,0x00,0x3E,0x66,0x66,0x3E,0x06,0x7C, +0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x00,0x00,0x18,0x00,0x38,0x18,0x18,0x3C,0x00, +0x00,0x06,0x00,0x06,0x06,0x06,0x06,0x3C,0x00,0x60,0x60,0x6C,0x78,0x6C,0x66,0x00, +0x00,0x38,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00, +0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00, +0x00,0x00,0x7C,0x66,0x66,0x7C,0x60,0x60,0x00,0x00,0x3E,0x66,0x66,0x3E,0x06,0x06, +0x00,0x00,0x7C,0x66,0x60,0x60,0x60,0x00,0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00, +0x00,0x18,0x7E,0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3E,0x00, +0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x63,0x6B,0x7F,0x3E,0x36,0x00, +0x00,0x00,0x66,0x3C,0x18,0x3C,0x66,0x00,0x00,0x00,0x66,0x66,0x66,0x3E,0x0C,0x78, +0x00,0x00,0x7E,0x0C,0x18,0x30,0x7E,0x00,0x00,0x18,0x3C,0x7E,0x7E,0x18,0x3C,0x00, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x7E,0x78,0x7C,0x6E,0x66,0x06,0x00, +0x08,0x18,0x38,0x78,0x38,0x18,0x08,0x00,0x10,0x18,0x1C,0x1E,0x1C,0x18,0x10,0x00, +0xFB,0xF3,0x33,0xF6,0x3D,0xF6,0xA3,0xF6,0x33,0xF6,0x3C,0xF6,0x4C,0xE4,0xF3,0xF9, +0xF5,0xF3,0x33,0xF6,0x92,0xF5,0xB6,0xF5,0x33,0xF6,0xFB,0xFC,0x4C,0xE4,0xF3,0xF6, +0x33,0xF6,0x33,0xF6,0xE1,0xF6,0x3C,0xF6,0x33,0xF6,0x3C,0xF6,0x4C,0xE4,0xF3,0x00, +0x9E,0xEE,0xDB,0xEE,0x9D,0xEE,0xA6,0xEE,0x80,0xEE,0x9D,0xEE,0x4C,0x78,0xEE,0x00, +0x4B,0xEF,0x2A,0xF0,0xD5,0xEF,0x0F,0xF0,0x27,0xF0,0x4A,0xEF,0x4C,0x41,0xEF,0x00, +0x4C,0xEA,0xED,0x4C,0xF0,0xED,0x4C,0xC4,0xE4,0x4C,0x59,0xE9,0x4C,0x12,0xE9,0x4C, +0xD1,0xE7,0x4C,0x3E,0xE9,0x4C,0x44,0xE9,0x4C,0xF6,0xEB,0x4C,0xD5,0xE6,0x4C,0xA6, +0xE4,0x4C,0x23,0xF2,0x4C,0x1B,0xF1,0x4C,0x25,0xF1,0x4C,0xE9,0xEF,0x4C,0x5D,0xEF, +0xB3,0xE7,0xB2,0xE7,0xB2,0xE7,0xB2,0xE7,0xBE,0xFF,0x11,0xEB,0x90,0xEA,0xD1,0xEA, +0xB2,0xE7,0xB2,0xE7,0xB2,0xE7,0xF6,0xE6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xD1,0xE7,0x3E,0xE9,0xA2,0x00,0xA9,0xFF,0x9D,0x40,0x03,0xA9,0xC0,0x9D, +0x46,0x03,0xA9,0xE4,0x9D,0x47,0x03,0x8A,0x18,0x69,0x10,0xAA,0xC9,0x80,0x90,0xE8, +0x60,0xA0,0x85,0x60,0x85,0x2F,0x86,0x2E,0x8A,0x29,0x0F,0xD0,0x04,0xE0,0x80,0x90, +0x05,0xA0,0x86,0x4C,0x1B,0xE6,0xA0,0x00,0xBD,0x40,0x03,0x99,0x20,0x00,0xE8,0xC8, +0xC0,0x0C,0x90,0xF4,0xA0,0x84,0xA5,0x22,0xC9,0x03,0x90,0x25,0xA8,0xC0,0x0E,0x90, +0x02,0xA0,0x0E,0x84,0x17,0xB9,0xC6,0xE6,0xF0,0x0F,0xC9,0x02,0xF0,0x35,0xC9,0x08, +0xB0,0x4C,0xC9,0x04,0xF0,0x63,0x4C,0xC9,0xE5,0xA5,0x20,0xC9,0xFF,0xF0,0x05,0xA0, +0x81,0x4C,0x1B,0xE6,0x20,0x9E,0xE6,0xB0,0xF8,0x20,0x3D,0xE6,0xB0,0xF3,0x20,0x89, +0xE6,0xA9,0x0B,0x85,0x17,0x20,0x3D,0xE6,0xA5,0x2C,0x85,0x26,0xA5,0x2D,0x85,0x27, +0x4C,0x1D,0xE6,0xA0,0x01,0x84,0x23,0x20,0x3D,0xE6,0xB0,0x03,0x20,0x89,0xE6,0xA9, +0xFF,0x85,0x20,0xA9,0xE4,0x85,0x27,0xA9,0xC0,0x85,0x26,0x4C,0x1D,0xE6,0xA5,0x20, +0xC9,0xFF,0xD0,0x05,0x20,0x9E,0xE6,0xB0,0xB8,0x20,0x3D,0xE6,0x20,0x89,0xE6,0xA6, +0x2E,0xBD,0x40,0x03,0x85,0x20,0x4C,0x1D,0xE6,0xA5,0x22,0x25,0x2A,0xD0,0x05,0xA0, +0x83,0x4C,0x1B,0xE6,0x20,0x3D,0xE6,0xB0,0xF8,0xA5,0x28,0x05,0x29,0xD0,0x08,0x20, +0x89,0xE6,0x85,0x2F,0x4C,0x1D,0xE6,0x20,0x89,0xE6,0x85,0x2F,0x30,0x35,0xA0,0x00, +0x91,0x24,0x20,0x70,0xE6,0xA5,0x22,0x29,0x02,0xD0,0x0C,0xA5,0x2F,0xC9,0x9B,0xD0, +0x06,0x20,0x63,0xE6,0x4C,0xC3,0xE5,0x20,0x63,0xE6,0xD0,0xDB,0xA5,0x22,0x29,0x02, +0xD0,0x11,0x20,0x89,0xE6,0x85,0x2F,0x30,0x0A,0xA5,0x2F,0xC9,0x9B,0xD0,0xF3,0xA9, +0x89,0x85,0x23,0x20,0x77,0xE6,0x4C,0x1D,0xE6,0xA5,0x22,0x25,0x2A,0xD0,0x05,0xA0, +0x87,0x4C,0x1B,0xE6,0x20,0x3D,0xE6,0xB0,0xF8,0xA5,0x28,0x05,0x29,0xD0,0x06,0xA5, +0x2F,0xE6,0x28,0xD0,0x06,0xA0,0x00,0xB1,0x24,0x85,0x2F,0x20,0x89,0xE6,0x30,0x25, +0x20,0x70,0xE6,0xA5,0x22,0x29,0x02,0xD0,0x0C,0xA5,0x2F,0xC9,0x9B,0xD0,0x06,0x20, +0x63,0xE6,0x4C,0x15,0xE6,0x20,0x63,0xE6,0xD0,0xDB,0xA5,0x22,0x29,0x02,0xD0,0x05, +0xA9,0x9B,0x20,0x89,0xE6,0x20,0x77,0xE6,0x4C,0x1D,0xE6,0x84,0x23,0xA4,0x2E,0xB9, +0x44,0x03,0x85,0x24,0xB9,0x45,0x03,0x85,0x25,0xA2,0x00,0xB5,0x20,0x99,0x40,0x03, +0xE8,0xC8,0xE0,0x0C,0x90,0xF5,0xA5,0x2F,0xA6,0x2E,0xA4,0x23,0x60,0xA4,0x20,0xC0, +0x22,0x90,0x04,0xA0,0x85,0xB0,0x1B,0xB9,0x1B,0x03,0x85,0x2C,0xB9,0x1C,0x03,0x85, +0x2D,0xA4,0x17,0xB9,0xC6,0xE6,0xA8,0xB1,0x2C,0xAA,0xC8,0xB1,0x2C,0x85,0x2D,0x86, +0x2C,0x18,0x60,0xC6,0x28,0xA5,0x28,0xC9,0xFF,0xD0,0x02,0xC6,0x29,0x05,0x29,0x60, +0xE6,0x24,0xD0,0x02,0xE6,0x25,0x60,0xA6,0x2E,0x38,0xBD,0x48,0x03,0xE5,0x28,0x85, +0x28,0xBD,0x49,0x03,0xE5,0x29,0x85,0x29,0x60,0xA0,0x92,0x20,0x93,0xE6,0x84,0x23, +0xC0,0x00,0x60,0xAA,0xA5,0x2D,0x48,0xA5,0x2C,0x48,0x8A,0xA6,0x2E,0x60,0xA0,0x00, +0xB1,0x24,0xF0,0x0C,0xA0,0x21,0xD9,0x1A,0x03,0xF0,0x0A,0x88,0x88,0x88,0x10,0xF6, +0xA0,0x82,0x38,0xB0,0x13,0x98,0x85,0x20,0x38,0xA0,0x01,0xB1,0x24,0xE9,0x30,0xC9, +0x0A,0x90,0x02,0xA9,0x01,0x85,0x21,0x18,0x60,0x00,0x04,0x04,0x04,0x04,0x06,0x06, +0x06,0x06,0x02,0x08,0x0A,0xA9,0x40,0x8D,0x0E,0xD4,0xA9,0x38,0x8D,0x02,0xD3,0x8D, +0x03,0xD3,0xA9,0x00,0x8D,0x00,0xD3,0x8D,0x01,0xD3,0xA9,0x3C,0x8D,0x02,0xD3,0x8D, +0x03,0xD3,0x60,0x6C,0x16,0x02,0x48,0xA9,0x10,0x2C,0x0E,0xD2,0xD0,0x0D,0xA9,0xEF, +0x8D,0x0E,0xD2,0xA5,0x10,0x8D,0x0E,0xD2,0x6C,0x0C,0x02,0xA9,0x20,0x2C,0x0E,0xD2, +0xD0,0x0D,0xA9,0xDF,0x8D,0x0E,0xD2,0xA5,0x10,0x8D,0x0E,0xD2,0x6C,0x0A,0x02,0xA9, +0x08,0x24,0x10,0xF0,0x12,0x2C,0x0E,0xD2,0xD0,0x0D,0xA9,0xF7,0x8D,0x0E,0xD2,0xA5, +0x10,0x8D,0x0E,0xD2,0x6C,0x0E,0x02,0xAD,0x0E,0xD2,0x6A,0xB0,0x0D,0xA9,0xFE,0x8D, +0x0E,0xD2,0xA5,0x10,0x8D,0x0E,0xD2,0x6C,0x10,0x02,0x6A,0xB0,0x0D,0xA9,0xFD,0x8D, +0x0E,0xD2,0xA5,0x10,0x8D,0x0E,0xD2,0x6C,0x12,0x02,0x6A,0xB0,0x0A,0xA9,0xFB,0x8D, +0x0E,0xD2,0xA5,0x10,0x8D,0x0E,0xD2,0x2C,0x0E,0xD2,0x70,0x0D,0xA9,0xBF,0x8D,0x0E, +0xD2,0xA5,0x10,0x8D,0x0E,0xD2,0x6C,0x08,0x02,0x30,0x18,0xA9,0x7F,0x8D,0x0E,0xD2, +0xA5,0x10,0x8D,0x0E,0xD2,0xA9,0x00,0x85,0x11,0x8D,0xFF,0x02,0x8D,0xF0,0x02,0x85, +0x4D,0x68,0x40,0x2C,0x02,0xD3,0x10,0x06,0xAD,0x00,0xD3,0x6C,0x02,0x02,0x2C,0x03, +0xD3,0x10,0x06,0xAD,0x01,0xD3,0x6C,0x04,0x02,0x08,0x68,0x29,0x10,0xF0,0x03,0x6C, +0x06,0x02,0x68,0x40,0x2C,0x0F,0xD4,0x10,0x03,0x6C,0x00,0x02,0x48,0xAD,0x0F,0xD4, +0x29,0x20,0xF0,0x03,0x4C,0x74,0xE4,0x8A,0x48,0x98,0x48,0x8D,0x0F,0xD4,0x6C,0x22, +0x02,0xE6,0x14,0xD0,0x08,0xE6,0x4D,0xE6,0x13,0xD0,0x02,0xE6,0x12,0xA9,0xFE,0xA2, +0x00,0xA4,0x4D,0x10,0x06,0x85,0x4D,0xA6,0x13,0xA9,0xF6,0x85,0x4E,0x86,0x4F,0xA2, +0x00,0x20,0xF5,0xE8,0xD0,0x03,0x20,0xEF,0xE8,0xA5,0x42,0xD0,0x08,0xBA,0xBD,0x04, +0x01,0x29,0x04,0xF0,0x03,0x4C,0x3E,0xE9,0x58,0xAD,0x0D,0xD4,0x8D,0x35,0x02,0xAD, +0x0C,0xD4,0x8D,0x34,0x02,0xAD,0x31,0x02,0x8D,0x03,0xD4,0xAD,0x30,0x02,0x8D,0x02, +0xD4,0xAD,0x2F,0x02,0x8D,0x00,0xD4,0xAD,0x6F,0x02,0x8D,0x1B,0xD0,0xA9,0x08,0x8D, +0x1F,0xD0,0xA2,0x08,0xBD,0xC0,0x02,0x45,0x4F,0x25,0x4E,0x9D,0x12,0xD0,0xCA,0x10, +0xF3,0xAD,0xF4,0x02,0x8D,0x09,0xD4,0xAD,0xF3,0x02,0x8D,0x01,0xD4,0xA2,0x02,0x20, +0xF5,0xE8,0xD0,0x03,0x20,0xF2,0xE8,0xA2,0x02,0xE8,0xE8,0xBD,0x18,0x02,0x1D,0x19, +0x02,0xF0,0x06,0x20,0xF5,0xE8,0x9D,0x26,0x02,0xE0,0x08,0xD0,0xEC,0xAD,0x0F,0xD2, +0x29,0x04,0xF0,0x08,0xAD,0xF1,0x02,0xF0,0x03,0xCE,0xF1,0x02,0xAD,0x2B,0x02,0xF0, +0x17,0xAD,0x0F,0xD2,0x29,0x04,0xD0,0x60,0xCE,0x2B,0x02,0xD0,0x0B,0xA9,0x06,0x8D, +0x2B,0x02,0xAD,0x09,0xD2,0x8D,0xFC,0x02,0xA0,0x01,0xA2,0x03,0xB9,0x00,0xD3,0x4A, +0x4A,0x4A,0x4A,0x9D,0x78,0x02,0xCA,0xB9,0x00,0xD3,0x29,0x0F,0x9D,0x78,0x02,0xCA, +0x88,0x10,0xE9,0xA2,0x03,0xBD,0x10,0xD0,0x9D,0x84,0x02,0xBD,0x00,0xD2,0x9D,0x70, +0x02,0xBD,0x04,0xD2,0x9D,0x74,0x02,0xCA,0x10,0xEB,0x8D,0x0B,0xD2,0xA2,0x06,0xA0, +0x03,0xB9,0x78,0x02,0x4A,0x4A,0x4A,0x9D,0x7D,0x02,0xA9,0x00,0x2A,0x9D,0x7C,0x02, +0xCA,0xCA,0x88,0x10,0xEC,0x6C,0x24,0x02,0xA9,0x00,0x8D,0x2B,0x02,0xF0,0xA9,0x6C, +0x26,0x02,0x6C,0x28,0x02,0xBC,0x18,0x02,0xD0,0x08,0xBC,0x19,0x02,0xF0,0x10,0xDE, +0x19,0x02,0xDE,0x18,0x02,0xD0,0x08,0xBC,0x19,0x02,0xD0,0x03,0xA9,0x00,0x60,0xA9, +0xFF,0x60,0x0A,0x8D,0x2D,0x02,0xA9,0x00,0x8D,0x0E,0xD4,0x8A,0xAE,0x2D,0x02,0x9D, +0x17,0x02,0x98,0x9D,0x16,0x02,0xA9,0x40,0x8D,0x0E,0xD4,0x2C,0x0F,0xD4,0x50,0x0D, +0xA9,0xE9,0x48,0xA9,0x3D,0x48,0x08,0x48,0x48,0x48,0x6C,0x22,0x02,0x60,0x68,0xA8, +0x68,0xAA,0x68,0x40,0xA9,0x3C,0x8D,0x02,0xD3,0xA9,0x3C,0x8D,0x03,0xD3,0xA9,0x03, +0x8D,0x32,0x02,0x85,0x41,0x8D,0x0F,0xD2,0x60,0xBA,0x8E,0x18,0x03,0xA9,0x01,0x85, +0x42,0xAD,0x00,0x03,0xC9,0x60,0xD0,0x03,0x4C,0x84,0xEB,0xA9,0x00,0x8D,0x0F,0x03, +0xA9,0x01,0x85,0x37,0xA9,0x0D,0x85,0x36,0xA9,0x28,0x8D,0x04,0xD2,0xA9,0x00,0x8D, +0x06,0xD2,0x18,0xAD,0x00,0x03,0x6D,0x01,0x03,0x69,0xFF,0x8D,0x3A,0x02,0xAD,0x02, +0x03,0x8D,0x3B,0x02,0xAD,0x0A,0x03,0x8D,0x3C,0x02,0xAD,0x0B,0x03,0x8D,0x3D,0x02, +0x18,0xA9,0x3A,0x85,0x32,0x69,0x04,0x85,0x34,0xA9,0x02,0x85,0x33,0x85,0x35,0xA9, +0x34,0x8D,0x03,0xD3,0x20,0x8E,0xEC,0xAD,0x3F,0x02,0xD0,0x03,0x98,0xD0,0x07,0xC6, +0x36,0x10,0xB5,0x4C,0x06,0xEA,0xAD,0x03,0x03,0x10,0x0C,0xA9,0x0D,0x85,0x36,0x20, +0x6E,0xEB,0x20,0x8E,0xEC,0xF0,0xE8,0x20,0x79,0xEC,0xA9,0x00,0x8D,0x3F,0x02,0x20, +0x9F,0xEC,0xF0,0x12,0x2C,0x03,0x03,0x70,0x07,0xAD,0x3F,0x02,0xD0,0x18,0xF0,0x1D, +0x20,0x6E,0xEB,0x20,0xE2,0xEA,0xAD,0x3F,0x02,0xF0,0x05,0xAD,0x19,0x03,0x85,0x30, +0xA5,0x30,0xC9,0x01,0xF0,0x07,0xC6,0x37,0x30,0x03,0x4C,0x74,0xE9,0x20,0x63,0xEC, +0xA9,0x00,0x85,0x42,0xA4,0x30,0x8C,0x03,0x03,0x60,0xA9,0x00,0x8D,0x3F,0x02,0x18, +0xA9,0x3E,0x85,0x32,0x69,0x01,0x85,0x34,0xA9,0x02,0x85,0x33,0x85,0x35,0xA9,0xFF, +0x85,0x3C,0x20,0xE2,0xEA,0xA0,0xFF,0xA5,0x30,0xC9,0x01,0xD0,0x19,0xAD,0x3E,0x02, +0xC9,0x41,0xF0,0x21,0xC9,0x43,0xF0,0x1D,0xC9,0x45,0xD0,0x06,0xA9,0x90,0x85,0x30, +0xD0,0x04,0xA9,0x8B,0x85,0x30,0xA5,0x30,0xC9,0x8A,0xF0,0x07,0xA9,0xFF,0x8D,0x3F, +0x02,0xD0,0x02,0xA0,0x00,0xA5,0x30,0x8D,0x19,0x03,0x60,0xA9,0x01,0x85,0x30,0x20, +0xF6,0xEB,0xA0,0x00,0x84,0x31,0x84,0x3B,0x84,0x3A,0xB1,0x32,0x8D,0x0D,0xD2,0x85, +0x31,0xA5,0x11,0xD0,0x03,0x4C,0xA4,0xED,0xA5,0x3A,0xF0,0xF5,0x20,0x63,0xEC,0x60, +0x98,0x48,0xE6,0x32,0xD0,0x02,0xE6,0x33,0xA5,0x33,0xC5,0x35,0x90,0x22,0xA5,0x32, +0xC5,0x34,0x90,0x1C,0xA5,0x3B,0xD0,0x0B,0xA5,0x31,0x8D,0x0D,0xD2,0xA9,0xFF,0x85, +0x3B,0xD0,0x09,0xA5,0x10,0x09,0x08,0x85,0x10,0x8D,0x0E,0xD2,0x68,0xA8,0x68,0x40, +0xA0,0x00,0xB1,0x32,0x8D,0x0D,0xD2,0x18,0x65,0x31,0x69,0x00,0x85,0x31,0x4C,0xBC, +0xEA,0xA5,0x3B,0xF0,0x0B,0x85,0x3A,0xA5,0x10,0x29,0xF7,0x85,0x10,0x8D,0x0E,0xD2, +0x68,0x40,0xA9,0x00,0xAC,0x0F,0x03,0xD0,0x02,0x85,0x31,0x85,0x38,0x85,0x39,0xA9, +0x01,0x85,0x30,0x20,0x1F,0xEC,0xA9,0x3C,0x8D,0x03,0xD3,0xA5,0x11,0xD0,0x03,0x4C, +0xA4,0xED,0xAD,0x17,0x03,0xF0,0x05,0xA5,0x39,0xF0,0xF0,0x60,0xA9,0x8A,0x85,0x30, +0x60,0x98,0x48,0xAD,0x0F,0xD2,0x8D,0x0A,0xD2,0x30,0x04,0xA0,0x8C,0x84,0x30,0x29, +0x20,0xD0,0x04,0xA0,0x8E,0x84,0x30,0xA5,0x38,0xF0,0x13,0xAD,0x0D,0xD2,0xC5,0x31, +0xF0,0x04,0xA0,0x8F,0x84,0x30,0xA9,0xFF,0x85,0x39,0x68,0xA8,0x68,0x40,0xAD,0x0D, +0xD2,0xA0,0x00,0x91,0x32,0x18,0x65,0x31,0x69,0x00,0x85,0x31,0xE6,0x32,0xD0,0x02, +0xE6,0x33,0xA5,0x33,0xC5,0x35,0x90,0xE2,0xA5,0x32,0xC5,0x34,0x90,0xDC,0xA5,0x3C, +0xF0,0x06,0xA9,0x00,0x85,0x3C,0xF0,0xCE,0xA9,0xFF,0x85,0x38,0xD0,0xCC,0x18,0xAD, +0x04,0x03,0x85,0x32,0x6D,0x08,0x03,0x85,0x34,0xAD,0x05,0x03,0x85,0x33,0x6D,0x09, +0x03,0x85,0x35,0x60,0xAD,0x03,0x03,0x10,0x2E,0xA9,0xCC,0x8D,0x04,0xD2,0xA9,0x05, +0x8D,0x06,0xD2,0x20,0xF6,0xEB,0xA0,0x0D,0xAD,0x0B,0x03,0x30,0x02,0xA0,0x96,0xA2, +0x00,0x20,0xBD,0xED,0xA9,0x34,0x8D,0x02,0xD3,0xAD,0x17,0x03,0xD0,0xFB,0x20,0x6E, +0xEB,0x20,0x6B,0xEA,0x4C,0xE3,0xEB,0xA9,0xFF,0x8D,0x0F,0x03,0xA0,0x08,0xAD,0x0B, +0x03,0x30,0x02,0xA0,0x64,0xA2,0x00,0x20,0xBD,0xED,0xA9,0x34,0x8D,0x02,0xD3,0xAD, +0x17,0x03,0xD0,0xFB,0x20,0x6E,0xEB,0x20,0x79,0xEC,0x20,0xBD,0xED,0x20,0x14,0xED, +0x20,0xE2,0xEA,0xAD,0x0B,0x03,0x30,0x05,0xA9,0x3C,0x8D,0x02,0xD3,0x4C,0x0D,0xEA, +0xA9,0x00,0x8D,0x17,0x03,0x60,0xA9,0x07,0x2D,0x32,0x02,0x09,0x20,0xAC,0x00,0x03, +0xC0,0x60,0xD0,0x0C,0x09,0x08,0xA0,0x07,0x8C,0x02,0xD2,0xA0,0x05,0x8C,0x00,0xD2, +0x8D,0x32,0x02,0x8D,0x0F,0xD2,0xA9,0xC7,0x25,0x10,0x09,0x10,0x4C,0x35,0xEC,0xA9, +0x07,0x2D,0x32,0x02,0x09,0x10,0x8D,0x32,0x02,0x8D,0x0F,0xD2,0x8D,0x0A,0xD2,0xA9, +0xC7,0x25,0x10,0x09,0x20,0x85,0x10,0x8D,0x0E,0xD2,0xA9,0x28,0x8D,0x08,0xD2,0xA2, +0x06,0xA9,0xA8,0xA4,0x41,0xD0,0x02,0xA9,0xA0,0x9D,0x01,0xD2,0xCA,0xCA,0x10,0xF9, +0xA9,0xA0,0x8D,0x05,0xD2,0xAC,0x00,0x03,0xC0,0x60,0xF0,0x06,0x8D,0x01,0xD2,0x8D, +0x03,0xD2,0x60,0xEA,0xA9,0xC7,0x25,0x10,0x85,0x10,0x8D,0x0E,0xD2,0xA2,0x06,0xA9, +0x00,0x9D,0x01,0xD2,0xCA,0xCA,0x10,0xF9,0x60,0xAD,0x06,0x03,0x6A,0x6A,0xA8,0x29, +0x3F,0xAA,0x98,0x6A,0x29,0xC0,0xA8,0x60,0x11,0xEB,0x90,0xEA,0xD1,0xEA,0xA2,0x01, +0xA0,0xFF,0x88,0xD0,0xFD,0xCA,0xD0,0xF8,0x20,0x6B,0xEA,0xA0,0x02,0xA2,0x00,0x20, +0xBD,0xED,0x20,0x1A,0xEA,0x98,0x60,0x8D,0x10,0x03,0x8C,0x11,0x03,0x20,0x08,0xED, +0x8D,0x10,0x03,0xAD,0x0C,0x03,0x20,0x08,0xED,0x8D,0x0C,0x03,0xAD,0x10,0x03,0x38, +0xED,0x0C,0x03,0x8D,0x12,0x03,0xAD,0x11,0x03,0x38,0xED,0x0D,0x03,0xA8,0xA9,0x64, +0x18,0x69,0x9C,0x88,0x10,0xFA,0x18,0x6D,0x12,0x03,0xA8,0x4A,0x4A,0x4A,0x0A,0x38, +0xE9,0x16,0xAA,0x98,0x29,0x07,0xA8,0xA9,0xF5,0x18,0x69,0x0B,0x88,0x10,0xFA,0xA0, +0x00,0x8C,0x0E,0x03,0x38,0xE9,0x07,0x10,0x03,0xCE,0x0E,0x03,0x18,0x7D,0xD2,0xED, +0xA8,0xAD,0x0E,0x03,0x7D,0xD3,0xED,0x60,0xC9,0x7C,0x30,0x04,0x38,0xE9,0x7C,0x60, +0x18,0x69,0x20,0x60,0xA5,0x11,0xD0,0x03,0x4C,0xA4,0xED,0x78,0xAD,0x17,0x03,0xD0, +0x02,0xF0,0x25,0xAD,0x0F,0xD2,0x29,0x10,0xD0,0xEA,0x8D,0x16,0x03,0xAE,0x0B,0xD4, +0xA4,0x14,0x8E,0x0C,0x03,0x8C,0x0D,0x03,0xA2,0x01,0x8E,0x15,0x03,0xA0,0x0A,0xA5, +0x11,0xF0,0x61,0xAD,0x17,0x03,0xD0,0x04,0x58,0x4C,0x0C,0xEB,0xAD,0x0F,0xD2,0x29, +0x10,0xCD,0x16,0x03,0xF0,0xE9,0x8D,0x16,0x03,0x88,0xD0,0xE3,0xCE,0x15,0x03,0x30, +0x12,0xAD,0x0B,0xD4,0xA4,0x14,0x20,0xA7,0xEC,0x8C,0xEE,0x02,0x8D,0xEF,0x02,0xA0, +0x09,0xD0,0xCC,0xAD,0xEE,0x02,0x8D,0x04,0xD2,0xAD,0xEF,0x02,0x8D,0x06,0xD2,0xA9, +0x00,0x8D,0x0F,0xD2,0xAD,0x32,0x02,0x8D,0x0F,0xD2,0xA9,0x55,0x91,0x32,0xC8,0x91, +0x32,0xA9,0xAA,0x85,0x31,0x18,0xA5,0x32,0x69,0x02,0x85,0x32,0xA5,0x33,0x69,0x00, +0x85,0x33,0x58,0x60,0x20,0x63,0xEC,0xA9,0x3C,0x8D,0x02,0xD3,0x8D,0x03,0xD3,0xA9, +0x80,0x85,0x30,0xAE,0x18,0x03,0x9A,0xC6,0x11,0x58,0x4C,0x0D,0xEA,0xA9,0xF0,0x8D, +0x26,0x02,0xA9,0xEB,0x8D,0x27,0x02,0xA9,0x01,0x8D,0x17,0x03,0x78,0x20,0x5C,0xE4, +0x58,0x60,0xE8,0x03,0x43,0x04,0x9E,0x04,0xF9,0x04,0x54,0x05,0xAF,0x05,0x0A,0x06, +0x65,0x06,0xC0,0x06,0x1A,0x07,0x75,0x07,0xD0,0x07,0xA9,0xA0,0x8D,0x46,0x02,0x60, +0xA9,0x31,0x8D,0x00,0x03,0xAD,0x46,0x02,0xAE,0x02,0x03,0xE0,0x21,0xF0,0x02,0xA9, +0x07,0x8D,0x06,0x03,0xA2,0x40,0xA0,0x80,0xAD,0x02,0x03,0xC9,0x57,0xD0,0x02,0xA2, +0x80,0xC9,0x53,0xD0,0x0C,0xA9,0xEA,0x8D,0x04,0x03,0xA9,0x02,0x8D,0x05,0x03,0xA0, +0x04,0x8E,0x03,0x03,0x8C,0x08,0x03,0xA9,0x00,0x8D,0x09,0x03,0x20,0x59,0xE4,0x10, +0x01,0x60,0xAD,0x02,0x03,0xC9,0x53,0xD0,0x0A,0x20,0x6D,0xEE,0xA0,0x02,0xB1,0x15, +0x8D,0x46,0x02,0xAD,0x02,0x03,0xC9,0x21,0xD0,0x1F,0x20,0x6D,0xEE,0xA0,0xFE,0xC8, +0xC8,0xB1,0x15,0xC9,0xFF,0xD0,0xF8,0xC8,0xB1,0x15,0xC8,0xC9,0xFF,0xD0,0xF2,0x88, +0x88,0x8C,0x08,0x03,0xA9,0x00,0x8D,0x09,0x03,0xAC,0x03,0x03,0x60,0xAD,0x04,0x03, +0x85,0x15,0xAD,0x05,0x03,0x85,0x16,0x60,0xA9,0x1E,0x85,0x1C,0x60,0xEA,0x02,0xC0, +0x03,0xA9,0x04,0x85,0x1E,0xAE,0x7D,0xEE,0xAC,0x7E,0xEE,0xA9,0x53,0x8D,0x02,0x03, +0x8D,0x0A,0x03,0x20,0xE6,0xEE,0x20,0x59,0xE4,0x30,0x03,0x20,0x14,0xEF,0x60,0x20, +0x81,0xEE,0xA9,0x00,0x85,0x1D,0x60,0x85,0x1F,0x20,0x1A,0xEF,0xA6,0x1D,0xA5,0x1F, +0x9D,0xC0,0x03,0xE8,0xE4,0x1E,0xF0,0x13,0x86,0x1D,0xC9,0x9B,0xF0,0x03,0xA0,0x01, +0x60,0xA9,0x20,0x9D,0xC0,0x03,0xE8,0xE4,0x1E,0xD0,0xF8,0xA9,0x00,0x85,0x1D,0xAE, +0x7F,0xEE,0xAC,0x80,0xEE,0x20,0xE6,0xEE,0x20,0x59,0xE4,0x60,0x20,0x1A,0xEF,0xA6, +0x1D,0xD0,0xDE,0xA0,0x01,0x60,0x8E,0x04,0x03,0x8C,0x05,0x03,0xA9,0x40,0x8D,0x00, +0x03,0xA9,0x01,0x8D,0x01,0x03,0xA9,0x80,0xAE,0x02,0x03,0xE0,0x53,0xD0,0x02,0xA9, +0x40,0x8D,0x03,0x03,0xA5,0x1E,0x8D,0x08,0x03,0xA9,0x00,0x8D,0x09,0x03,0xA5,0x1C, +0x8D,0x06,0x03,0x60,0xAD,0xEC,0x02,0x85,0x1C,0x60,0xA0,0x57,0xA5,0x2B,0xC9,0x4E, +0xD0,0x04,0xA2,0x28,0xD0,0x0E,0xC9,0x44,0xD0,0x04,0xA2,0x14,0xD0,0x06,0xC9,0x53, +0xD0,0x0B,0xA2,0x1D,0x86,0x1E,0x8C,0x02,0x03,0x8D,0x0A,0x03,0x60,0xA9,0x4E,0xD0, +0xDD,0xA9,0xCC,0x8D,0xEE,0x02,0xA9,0x05,0x8D,0xEF,0x02,0x60,0xA5,0x2B,0x85,0x3E, +0xA5,0x2A,0x29,0x0C,0xC9,0x04,0xF0,0x05,0xC9,0x08,0xF0,0x39,0x60,0xA9,0x00,0x8D, +0x89,0x02,0x85,0x3F,0xA9,0x01,0x20,0x58,0xF0,0x30,0x24,0xA9,0x34,0x8D,0x02,0xD3, +0xA0,0xE0,0xA2,0x01,0xA9,0x03,0x8D,0x2A,0x02,0x20,0x5C,0xE4,0xAD,0x2A,0x02,0xD0, +0xFB,0xA9,0x80,0x85,0x3D,0x8D,0x8A,0x02,0x4C,0xD3,0xEF,0xA0,0x80,0xC6,0x11,0xA9, +0x00,0x8D,0x89,0x02,0x60,0xA9,0x80,0x8D,0x89,0x02,0xA9,0x02,0x20,0x58,0xF0,0x30, +0xEE,0xA9,0xCC,0x8D,0x04,0xD2,0xA9,0x05,0x8D,0x06,0xD2,0xA9,0x60,0x8D,0x00,0x03, +0x20,0x68,0xE4,0xA9,0x34,0x8D,0x02,0xD3,0xA9,0x03,0xA2,0x03,0xA0,0xC0,0x20,0x5C, +0xE4,0xA9,0xFF,0x8D,0x2A,0x02,0xA5,0x11,0xF0,0xC1,0xAD,0x2A,0x02,0xD0,0xF7,0xA9, +0x00,0x85,0x3D,0xA0,0x01,0x60,0xA5,0x3F,0x30,0x33,0xA6,0x3D,0xEC,0x8A,0x02,0xF0, +0x08,0xBD,0x00,0x04,0xE6,0x3D,0xA0,0x01,0x60,0xA9,0x52,0x20,0x95,0xF0,0x98,0x30, +0xF7,0xA9,0x00,0x85,0x3D,0xA2,0x80,0xAD,0xFF,0x03,0xC9,0xFE,0xF0,0x0D,0xC9,0xFA, +0xD0,0x03,0xAE,0x7F,0x04,0x8E,0x8A,0x02,0x4C,0xD6,0xEF,0xC6,0x3F,0xA0,0x88,0x60, +0xA6,0x3D,0x9D,0x00,0x04,0xE6,0x3D,0xA0,0x01,0xE0,0x7F,0xF0,0x01,0x60,0xA9,0xFC, +0x20,0xD2,0xF0,0xA9,0x00,0x85,0x3D,0x60,0xA0,0x01,0x60,0xAD,0x89,0x02,0x30,0x08, +0xA0,0x01,0xA9,0x3C,0x8D,0x02,0xD3,0x60,0xA6,0x3D,0xF0,0x0A,0x8E,0x7F,0x04,0xA9, +0xFA,0x20,0xD2,0xF0,0x30,0xEC,0xA2,0x7F,0xA9,0x00,0x9D,0x00,0x04,0xCA,0x10,0xFA, +0xA9,0xFE,0x20,0xD2,0xF0,0x4C,0x32,0xF0,0x85,0x40,0xA5,0x14,0x18,0x69,0x19,0xAA, +0xA9,0xFF,0x8D,0x1F,0xD0,0xA9,0x00,0xA0,0xF0,0x88,0xD0,0xFD,0x8D,0x1F,0xD0,0xA0, +0xF0,0x88,0xD0,0xFD,0xE4,0x14,0xD0,0xE8,0xC6,0x40,0xF0,0x0B,0x8A,0x18,0x69,0x08, +0xAA,0xE4,0x14,0xD0,0xFC,0xF0,0xD3,0x20,0x8C,0xF0,0x98,0x60,0xAD,0x25,0xE4,0x48, +0xAD,0x24,0xE4,0x48,0x60,0x8D,0x02,0x03,0xA9,0x00,0x8D,0x09,0x03,0xA9,0x83,0x8D, +0x08,0x03,0xA9,0x03,0x8D,0x05,0x03,0xA9,0xFD,0x8D,0x04,0x03,0xA9,0x60,0x8D,0x00, +0x03,0xA9,0x00,0x8D,0x01,0x03,0xA9,0x23,0x8D,0x06,0x03,0xAD,0x02,0x03,0xA0,0x40, +0xC9,0x52,0xF0,0x02,0xA0,0x80,0x8C,0x03,0x03,0xA5,0x3E,0x8D,0x0B,0x03,0x20,0x59, +0xE4,0x60,0x8D,0xFF,0x03,0xA9,0x55,0x8D,0xFD,0x03,0x8D,0xFE,0x03,0xA9,0x57,0x20, +0x95,0xF0,0x60,0x50,0x30,0xE4,0x43,0x40,0xE4,0x45,0x00,0xE4,0x53,0x10,0xE4,0x4B, +0x20,0xE4,0x7D,0x41,0x54,0x41,0x52,0x49,0x20,0x43,0x4F,0x4D,0x50,0x55,0x54,0x45, +0x52,0x20,0x2D,0x20,0x4D,0x45,0x4D,0x4F,0x20,0x50,0x41,0x44,0x9B,0x42,0x4F,0x4F, +0x54,0x20,0x45,0x52,0x52,0x4F,0x52,0x9B,0x45,0x3A,0x9B,0x78,0xAD,0x44,0x02,0xD0, +0x04,0xA9,0xFF,0xD0,0x03,0x78,0xA9,0x00,0x85,0x08,0xD8,0xA2,0xFF,0x9A,0x20,0x3F, +0xF2,0x20,0x81,0xF2,0xA5,0x08,0xD0,0x28,0xA9,0x00,0xA0,0x08,0x85,0x04,0x85,0x05, +0x91,0x04,0xC8,0xC0,0x00,0xD0,0xF9,0xE6,0x05,0xA6,0x05,0xE4,0x06,0xD0,0xF1,0xAD, +0x72,0xE4,0x85,0x0A,0xAD,0x73,0xE4,0x85,0x0B,0xA9,0xFF,0x8D,0x44,0x02,0xD0,0x13, +0xA2,0x00,0x8A,0x9D,0x00,0x02,0x9D,0x00,0x03,0xCA,0xD0,0xF7,0xA2,0x10,0x95,0x00, +0xE8,0x10,0xFB,0xA9,0x02,0x85,0x52,0xA9,0x27,0x85,0x53,0xA2,0x25,0xBD,0x80,0xE4, +0x9D,0x00,0x02,0xCA,0x10,0xF7,0x20,0x94,0xF2,0x58,0xA2,0x0E,0xBD,0xE3,0xF0,0x9D, +0x1A,0x03,0xCA,0x10,0xF7,0xA2,0x00,0x86,0x07,0x86,0x06,0xAE,0xE4,0x02,0xE0,0x90, +0xB0,0x0A,0xAD,0xFC,0x9F,0xD0,0x05,0xE6,0x07,0x20,0x3C,0xF2,0xAE,0xE4,0x02,0xE0, +0xB0,0xB0,0x0A,0xAE,0xFC,0xBF,0xD0,0x05,0xE6,0x06,0x20,0x39,0xF2,0xA9,0x03,0xA2, +0x00,0x9D,0x42,0x03,0xA9,0x18,0x9D,0x44,0x03,0xA9,0xF1,0x9D,0x45,0x03,0xA9,0x0C, +0x9D,0x4A,0x03,0x20,0x56,0xE4,0x10,0x03,0x4C,0x25,0xF1,0xE8,0xD0,0xFD,0xC8,0x10, +0xFA,0x20,0xB2,0xF3,0xA5,0x06,0x05,0x07,0xF0,0x12,0xA5,0x06,0xF0,0x03,0xAD,0xFD, +0xBF,0xA6,0x07,0xF0,0x03,0x0D,0xFD,0x9F,0x29,0x01,0xF0,0x03,0x20,0xCF,0xF2,0xA9, +0x00,0x8D,0x44,0x02,0xA5,0x06,0xF0,0x0A,0xAD,0xFD,0xBF,0x29,0x04,0xF0,0x03,0x6C, +0xFA,0xBF,0xA5,0x07,0xF0,0x0A,0xAD,0xFD,0x9F,0x29,0x04,0xF0,0xDF,0x6C,0xFA,0x9F, +0x6C,0x0A,0x00,0xA2,0xF2,0xA0,0xF0,0x20,0x85,0xF3,0x20,0x30,0xF2,0x4C,0x2A,0xF2, +0xAD,0x05,0xE4,0x48,0xAD,0x04,0xE4,0x48,0x60,0x6C,0xFE,0xBF,0x6C,0xFE,0x9F,0xAD, +0xFC,0xBF,0xD0,0x12,0xEE,0xFC,0xBF,0xAD,0xFC,0xBF,0xD0,0x0A,0xAD,0xFD,0xBF,0x29, +0x80,0xF0,0x03,0x6C,0xFE,0xBF,0xCE,0xFC,0xBF,0xA9,0x00,0x85,0x05,0xA9,0x10,0x85, +0x06,0xA0,0x00,0xB1,0x05,0x85,0x07,0x49,0xFF,0x85,0x04,0x91,0x05,0xB1,0x05,0xC5, +0x04,0xD0,0x0D,0xA5,0x07,0x91,0x05,0xA5,0x06,0x18,0x69,0x10,0x85,0x06,0xD0,0xE3, +0x60,0xA9,0x00,0xAA,0x9D,0x00,0xD0,0x9D,0x00,0xD4,0x9D,0x00,0xD2,0x9D,0x00,0xD3, +0xE8,0xD0,0xF1,0x60,0xC6,0x11,0xA5,0x06,0x8D,0xE4,0x02,0x8D,0xE6,0x02,0xA9,0x00, +0x8D,0xE5,0x02,0xA9,0x00,0x8D,0xE7,0x02,0xA9,0x07,0x8D,0xE8,0x02,0x20,0x0C,0xE4, +0x20,0x1C,0xE4,0x20,0x2C,0xE4,0x20,0x3C,0xE4,0x20,0x4C,0xE4,0x20,0x6E,0xE4,0x20, +0x65,0xE4,0x20,0x6B,0xE4,0xAD,0x1F,0xD0,0x29,0x01,0xD0,0x02,0xE6,0x4A,0x60,0xA5, +0x08,0xF0,0x0A,0xA5,0x09,0x29,0x01,0xF0,0x03,0x20,0x7E,0xF3,0x60,0xA9,0x01,0x8D, +0x01,0x03,0xA9,0x53,0x8D,0x02,0x03,0x20,0x53,0xE4,0x10,0x01,0x60,0xA9,0x00,0x8D, +0x0B,0x03,0xA9,0x01,0x8D,0x0A,0x03,0xA9,0x00,0x8D,0x04,0x03,0xA9,0x04,0x8D,0x05, +0x03,0x20,0x9D,0xF3,0x10,0x08,0x20,0x81,0xF3,0xA5,0x4B,0xF0,0xE0,0x60,0xA2,0x03, +0xBD,0x00,0x04,0x9D,0x40,0x02,0xCA,0x10,0xF7,0xAD,0x42,0x02,0x85,0x04,0xAD,0x43, +0x02,0x85,0x05,0xAD,0x04,0x04,0x85,0x0C,0xAD,0x05,0x04,0x85,0x0D,0xA0,0x7F,0xB9, +0x00,0x04,0x91,0x04,0x88,0x10,0xF8,0x18,0xA5,0x04,0x69,0x80,0x85,0x04,0xA5,0x05, +0x69,0x00,0x85,0x05,0xCE,0x41,0x02,0xF0,0x11,0xEE,0x0A,0x03,0x20,0x9D,0xF3,0x10, +0xDC,0x20,0x81,0xF3,0xA5,0x4B,0xD0,0xAE,0xF0,0xF2,0xA5,0x4B,0xF0,0x03,0x20,0x9D, +0xF3,0x20,0x6C,0xF3,0xB0,0xA0,0x20,0x7E,0xF3,0xE6,0x09,0x60,0x18,0xAD,0x42,0x02, +0x69,0x06,0x85,0x04,0xAD,0x43,0x02,0x69,0x00,0x85,0x05,0x6C,0x04,0x00,0x6C,0x0C, +0x00,0xA2,0x0D,0xA0,0xF1,0x8A,0xA2,0x00,0x9D,0x44,0x03,0x98,0x9D,0x45,0x03,0xA9, +0x09,0x9D,0x42,0x03,0xA9,0xFF,0x9D,0x48,0x03,0x20,0x56,0xE4,0x60,0xA5,0x4B,0xF0, +0x03,0x4C,0x7A,0xE4,0xA9,0x52,0x8D,0x02,0x03,0xA9,0x01,0x8D,0x01,0x03,0x20,0x53, +0xE4,0x60,0xA5,0x08,0xF0,0x0A,0xA5,0x09,0x29,0x02,0xF0,0x03,0x20,0xE1,0xF3,0x60, +0xA5,0x4A,0xF0,0x1C,0xA9,0x80,0x85,0x3E,0xE6,0x4B,0x20,0x7D,0xE4,0x20,0x01,0xF3, +0xA9,0x00,0x85,0x4B,0x85,0x4A,0x06,0x09,0xA5,0x0C,0x85,0x02,0xA5,0x0D,0x85,0x03, +0x60,0x6C,0x02,0x00,0xA9,0xFF,0x8D,0xFC,0x02,0xAD,0xE6,0x02,0x29,0xF0,0x85,0x6A, +0xA9,0x40,0x8D,0xBE,0x02,0x60,0xA5,0x2B,0x29,0x0F,0xD0,0x08,0xA5,0x2A,0x29,0x0F, +0x85,0x2A,0xA9,0x00,0x85,0x57,0xA9,0xE0,0x8D,0xF4,0x02,0xA9,0x02,0x8D,0xF3,0x02, +0x8D,0x2F,0x02,0xA9,0x01,0x85,0x4C,0xA9,0xC0,0x05,0x10,0x85,0x10,0x8D,0x0E,0xD2, +0xA9,0x00,0x8D,0x93,0x02,0x85,0x64,0x85,0x7B,0x8D,0xF0,0x02,0xA0,0x0E,0xA9,0x01, +0x99,0xA3,0x02,0x88,0x10,0xFA,0xA2,0x04,0xBD,0xC1,0xFE,0x9D,0xC4,0x02,0xCA,0x10, +0xF7,0xA4,0x6A,0x88,0x8C,0x95,0x02,0xA9,0x60,0x8D,0x94,0x02,0xA6,0x57,0xBD,0x69, +0xFE,0xD0,0x04,0xA9,0x91,0x85,0x4C,0x85,0x51,0xA5,0x6A,0x85,0x65,0xBC,0x45,0xFE, +0xA9,0x28,0x20,0x21,0xF9,0x88,0xD0,0xF8,0xAD,0x6F,0x02,0x29,0x3F,0x85,0x67,0xA8, +0xE0,0x08,0x90,0x17,0x8A,0x6A,0x6A,0x6A,0x29,0xC0,0x05,0x67,0xA8,0xA9,0x10,0x20, +0x21,0xF9,0xE0,0x0B,0xD0,0x05,0xA9,0x06,0x8D,0xC8,0x02,0x8C,0x6F,0x02,0xA5,0x64, +0x85,0x58,0xA5,0x65,0x85,0x59,0xAD,0x0B,0xD4,0xC9,0x7A,0xD0,0xF9,0x20,0x1F,0xF9, +0xBD,0x75,0xFE,0xF0,0x06,0xA9,0xFF,0x85,0x64,0xC6,0x65,0xA5,0x64,0x85,0x68,0xA5, +0x65,0x85,0x69,0x20,0x13,0xF9,0xA9,0x41,0x20,0x17,0xF9,0x86,0x66,0xA9,0x18,0x8D, +0xBF,0x02,0xA5,0x57,0xC9,0x09,0xB0,0x2D,0xA5,0x2A,0x29,0x10,0xF0,0x27,0xA9,0x04, +0x8D,0xBF,0x02,0xA2,0x02,0xA9,0x02,0x20,0x17,0xF9,0xCA,0x10,0xF8,0xA4,0x6A,0x88, +0x98,0x20,0x17,0xF9,0xA9,0x60,0x20,0x17,0xF9,0xA9,0x42,0x20,0x17,0xF9,0x18,0xA9, +0x0C,0x65,0x66,0x85,0x66,0xA4,0x66,0xBE,0x51,0xFE,0xA5,0x51,0x20,0x17,0xF9,0xCA, +0xD0,0xF8,0xA5,0x57,0xC9,0x08,0x90,0x1C,0xA2,0x5D,0xA5,0x6A,0x38,0xE9,0x10,0x20, +0x17,0xF9,0xA9,0x00,0x20,0x17,0xF9,0xA9,0x4F,0x20,0x17,0xF9,0xA5,0x51,0x20,0x17, +0xF9,0xCA,0xD0,0xF8,0xA5,0x59,0x20,0x17,0xF9,0xA5,0x58,0x20,0x17,0xF9,0xA5,0x51, +0x09,0x40,0x20,0x17,0xF9,0xA9,0x70,0x20,0x17,0xF9,0xA9,0x70,0x20,0x17,0xF9,0xA5, +0x64,0x8D,0x30,0x02,0xA5,0x65,0x8D,0x31,0x02,0xA9,0x70,0x20,0x17,0xF9,0xA5,0x64, +0x8D,0xE5,0x02,0xA5,0x65,0x8D,0xE6,0x02,0xA5,0x68,0x85,0x64,0xA5,0x69,0x85,0x65, +0xAD,0x31,0x02,0x20,0x17,0xF9,0xAD,0x30,0x02,0x20,0x17,0xF9,0xA5,0x4C,0x10,0x07, +0x48,0x20,0xFC,0xF3,0x68,0xA8,0x60,0xA5,0x2A,0x29,0x20,0xD0,0x0B,0x20,0xB9,0xF7, +0x8D,0x90,0x02,0xA5,0x52,0x8D,0x91,0x02,0xA9,0x22,0x0D,0x2F,0x02,0x8D,0x2F,0x02, +0x4C,0x21,0xF6,0x20,0x96,0xFA,0x20,0xA2,0xF5,0x20,0x32,0xFB,0x20,0xD4,0xF9,0x4C, +0x34,0xF6,0x20,0x47,0xF9,0xB1,0x64,0x2D,0xA0,0x02,0x46,0x6F,0xB0,0x03,0x4A,0x10, +0xF9,0x8D,0xFA,0x02,0xC9,0x00,0x60,0x8D,0xFB,0x02,0x20,0x96,0xFA,0xAD,0xFB,0x02, +0xC9,0x7D,0xD0,0x06,0x20,0xB9,0xF7,0x4C,0x21,0xF6,0xAD,0xFB,0x02,0xC9,0x9B,0xD0, +0x06,0x20,0x30,0xFA,0x4C,0x21,0xF6,0x20,0xE0,0xF5,0x20,0xD8,0xF9,0x4C,0x21,0xF6, +0xAD,0xFF,0x02,0xD0,0xFB,0xA2,0x02,0xB5,0x54,0x95,0x5A,0xCA,0x10,0xF9,0xAD,0xFB, +0x02,0xA8,0x2A,0x2A,0x2A,0x2A,0x29,0x03,0xAA,0x98,0x29,0x9F,0x1D,0xF6,0xFE,0x8D, +0xFA,0x02,0x20,0x47,0xF9,0xAD,0xFA,0x02,0x46,0x6F,0xB0,0x04,0x0A,0x4C,0x08,0xF6, +0x2D,0xA0,0x02,0x85,0x50,0xAD,0xA0,0x02,0x49,0xFF,0x31,0x64,0x05,0x50,0x91,0x64, +0x60,0x20,0xA2,0xF5,0x85,0x5D,0xA6,0x57,0xD0,0x0A,0xAE,0xF0,0x02,0xD0,0x05,0x49, +0x80,0x20,0xFF,0xF5,0xA4,0x4C,0xA9,0x01,0x85,0x4C,0xAD,0xFB,0x02,0x60,0x20,0xB3, +0xFC,0x20,0x88,0xFA,0xA5,0x6B,0xD0,0x34,0xA5,0x54,0x85,0x6C,0xA5,0x55,0x85,0x6D, +0x20,0xE2,0xF6,0x84,0x4C,0xAD,0xFB,0x02,0xC9,0x9B,0xF0,0x12,0x20,0xAD,0xF6,0x20, +0xB3,0xFC,0xA5,0x63,0xC9,0x71,0xD0,0x03,0x20,0x0A,0xF9,0x4C,0x50,0xF6,0x20,0xE4, +0xFA,0x20,0x00,0xFC,0xA5,0x6C,0x85,0x54,0xA5,0x6D,0x85,0x55,0xA5,0x6B,0xF0,0x11, +0xC6,0x6B,0xF0,0x0D,0xA5,0x4C,0x30,0xF8,0x20,0x93,0xF5,0x8D,0xFB,0x02,0x4C,0xB3, +0xFC,0x20,0x30,0xFA,0xA9,0x9B,0x8D,0xFB,0x02,0x20,0x21,0xF6,0x84,0x4C,0x4C,0xB3, +0xFC,0x6C,0x64,0x00,0x8D,0xFB,0x02,0x20,0xB3,0xFC,0x20,0x88,0xFA,0x20,0xE4,0xFA, +0x20,0x8D,0xFC,0xF0,0x09,0x0E,0xA2,0x02,0x20,0xCA,0xF5,0x4C,0xB3,0xFC,0xAD,0xFE, +0x02,0x0D,0xA2,0x02,0xD0,0xEF,0x0E,0xA2,0x02,0xE8,0xBD,0xC6,0xFE,0x85,0x64,0xBD, +0xC7,0xFE,0x85,0x65,0x20,0xA1,0xF6,0x20,0x21,0xF6,0x4C,0xB3,0xFC,0xA9,0xFF,0x8D, +0xFC,0x02,0xA5,0x2A,0x4A,0xB0,0x62,0xA9,0x80,0xA6,0x11,0xF0,0x58,0xAD,0xFC,0x02, +0xC9,0xFF,0xF0,0xEE,0x85,0x7C,0xA2,0xFF,0x8E,0xFC,0x02,0x20,0xD8,0xFC,0xAA,0xE0, +0xC0,0x90,0x02,0xA2,0x03,0xBD,0xFE,0xFE,0x8D,0xFB,0x02,0xC9,0x80,0xF0,0xCE,0xC9, +0x81,0xD0,0x0B,0xAD,0xB6,0x02,0x49,0x80,0x8D,0xB6,0x02,0x4C,0xDD,0xF6,0xC9,0x82, +0xD0,0x07,0xA9,0x00,0x8D,0xBE,0x02,0xF0,0xB4,0xC9,0x83,0xD0,0x07,0xA9,0x40,0x8D, +0xBE,0x02,0xD0,0xA9,0xC9,0x84,0xD0,0x07,0xA9,0x80,0x8D,0xBE,0x02,0xD0,0x9E,0xC9, +0x85,0xD0,0x0A,0xA9,0x88,0x85,0x4C,0x85,0x11,0xA9,0x9B,0xD0,0x26,0xA5,0x7C,0xC9, +0x40,0xB0,0x15,0xAD,0xFB,0x02,0xC9,0x61,0x90,0x0E,0xC9,0x7B,0xB0,0x0A,0xAD,0xBE, +0x02,0xF0,0x05,0x05,0x7C,0x4C,0xFE,0xF6,0x20,0x8D,0xFC,0xF0,0x09,0xAD,0xFB,0x02, +0x4D,0xB6,0x02,0x8D,0xFB,0x02,0x4C,0x34,0xF6,0xA9,0x80,0x8D,0xA2,0x02,0x60,0xC6, +0x54,0x10,0x06,0xAE,0xBF,0x02,0xCA,0x86,0x54,0x4C,0x5C,0xFC,0xE6,0x54,0xA5,0x54, +0xCD,0xBF,0x02,0x90,0xF4,0xA2,0x00,0xF0,0xEE,0xC6,0x55,0xA5,0x55,0x30,0x04,0xC5, +0x52,0xB0,0x04,0xA5,0x53,0x85,0x55,0x4C,0xDD,0xFB,0xE6,0x55,0xA5,0x55,0xC5,0x53, +0x90,0xF5,0xF0,0xF3,0xA5,0x52,0x4C,0xA5,0xF7,0x20,0xF3,0xFC,0xA0,0x00,0x98,0x91, +0x64,0xC8,0xD0,0xFB,0xE6,0x65,0xA6,0x65,0xE4,0x6A,0x90,0xF3,0xA9,0xFF,0x99,0xB2, +0x02,0xC8,0xC0,0x04,0x90,0xF8,0x20,0xE4,0xFC,0x85,0x63,0x85,0x6D,0xA9,0x00,0x85, +0x54,0x85,0x56,0x85,0x6C,0x60,0xA5,0x63,0xC5,0x52,0xF0,0x21,0xA5,0x55,0xC5,0x52, +0xD0,0x03,0x20,0x73,0xFC,0x20,0x99,0xF7,0xA5,0x55,0xC5,0x53,0xD0,0x07,0xA5,0x54, +0xF0,0x03,0x20,0x7F,0xF7,0xA9,0x20,0x8D,0xFB,0x02,0x20,0xE0,0xF5,0x4C,0xDD,0xFB, +0x20,0xAA,0xF7,0xA5,0x55,0xC5,0x52,0xD0,0x0A,0x20,0x34,0xFA,0x20,0x20,0xFB,0x90, +0x02,0xB0,0x07,0xA5,0x63,0x20,0x25,0xFB,0x90,0xE6,0x4C,0xDD,0xFB,0xA5,0x63,0x4C, +0x06,0xFB,0xA5,0x63,0x4C,0x12,0xFB,0x20,0x9D,0xFC,0x20,0xA2,0xF5,0x85,0x7D,0xA9, +0x00,0x8D,0xBB,0x02,0x20,0xFF,0xF5,0xA5,0x63,0x48,0x20,0xDC,0xF9,0x68,0xC5,0x63, +0xB0,0x0C,0xA5,0x7D,0x48,0x20,0xA2,0xF5,0x85,0x7D,0x68,0x4C,0x44,0xF8,0x20,0xA8, +0xFC,0xCE,0xBB,0x02,0x30,0x04,0xC6,0x54,0xD0,0xF7,0x4C,0xDD,0xFB,0x20,0x9D,0xFC, +0x20,0x47,0xF9,0xA5,0x64,0x85,0x68,0xA5,0x65,0x85,0x69,0xA5,0x63,0x48,0x20,0xD4, +0xF9,0x68,0xC5,0x63,0xB0,0x10,0xA5,0x54,0xCD,0xBF,0x02,0xB0,0x09,0x20,0xA2,0xF5, +0xA0,0x00,0x91,0x68,0xF0,0xDA,0xA0,0x00,0x98,0x91,0x68,0x20,0x68,0xFC,0x20,0xA8, +0xFC,0x4C,0xDD,0xFB,0x38,0x20,0x7B,0xFB,0xA5,0x52,0x85,0x55,0x20,0x47,0xF9,0xA5, +0x64,0x85,0x68,0x18,0x69,0x28,0x85,0x66,0xA5,0x65,0x85,0x69,0x69,0x00,0x85,0x67, +0xA6,0x54,0xE0,0x17,0xF0,0x08,0x20,0x4E,0xFB,0xE8,0xE0,0x17,0xD0,0xF8,0x20,0x9B, +0xFB,0x4C,0xDD,0xFB,0x20,0xDD,0xFB,0xA4,0x51,0x84,0x54,0xA4,0x54,0x98,0x38,0x20, +0x23,0xFB,0x08,0x98,0x18,0x69,0x78,0x28,0x20,0x04,0xFB,0xC8,0xC0,0x18,0xD0,0xED, +0xAD,0xB4,0x02,0x09,0x01,0x8D,0xB4,0x02,0xA5,0x52,0x85,0x55,0x20,0x47,0xF9,0x20, +0xB7,0xFB,0x20,0x20,0xFB,0x90,0xD4,0x4C,0xDD,0xFB,0xA0,0x20,0x20,0xD8,0xFC,0x88, +0x10,0xFA,0x60,0xA9,0x02,0xD0,0x0A,0xA4,0x4C,0x30,0x2B,0xA0,0x00,0x91,0x64,0xA9, +0x01,0x8D,0x9E,0x02,0xA5,0x4C,0x30,0x1E,0xA5,0x64,0x38,0xED,0x9E,0x02,0x85,0x64, +0xB0,0x02,0xC6,0x65,0xA5,0x0F,0xC5,0x65,0x90,0x0C,0xD0,0x06,0xA5,0x0E,0xC5,0x64, +0x90,0x04,0xA9,0x93,0x85,0x4C,0x60,0xA5,0x54,0x48,0xA5,0x55,0x48,0xA5,0x56,0x48, +0x20,0xF3,0xFC,0xA5,0x54,0x85,0x66,0xA9,0x00,0x85,0x67,0xA5,0x66,0x0A,0x26,0x67, +0x85,0x51,0xA4,0x67,0x8C,0x9F,0x02,0x0A,0x26,0x67,0x0A,0x26,0x67,0x18,0x65,0x51, +0x85,0x66,0xA5,0x67,0x6D,0x9F,0x02,0x85,0x67,0xA6,0x57,0xBC,0x81,0xFE,0x88,0x30, +0x07,0x06,0x66,0x26,0x67,0x4C,0x7E,0xF9,0xBC,0xA5,0xFE,0xA5,0x55,0xA2,0x07,0x88, +0x30,0x0A,0xCA,0x46,0x56,0x6A,0x6E,0xA1,0x02,0x4C,0x8F,0xF9,0xC8,0x18,0x65,0x66, +0x85,0x66,0x90,0x02,0xE6,0x67,0x38,0x6E,0xA1,0x02,0x18,0xCA,0x10,0xF9,0xAE,0xA1, +0x02,0xA5,0x66,0x18,0x65,0x64,0x85,0x64,0x85,0x5E,0xA5,0x67,0x65,0x65,0x85,0x65, +0x85,0x5F,0xBD,0xB1,0xFE,0x8D,0xA0,0x02,0x85,0x6F,0x68,0x85,0x56,0x68,0x85,0x55, +0x68,0x85,0x54,0x60,0xA9,0x00,0xF0,0x02,0xA9,0x9B,0x85,0x7D,0xE6,0x63,0xE6,0x55, +0xD0,0x02,0xE6,0x56,0xA5,0x55,0xA6,0x57,0xDD,0x8D,0xFE,0xF0,0x0B,0xE0,0x00,0xD0, +0x06,0xC5,0x53,0xF0,0x02,0xB0,0x01,0x60,0xE0,0x08,0x90,0x04,0xA5,0x56,0xF0,0xF7, +0xA5,0x57,0xD0,0x30,0xA5,0x63,0xC9,0x51,0x90,0x0A,0xA5,0x7D,0xF0,0x26,0x20,0x30, +0xFA,0x4C,0x77,0xFA,0x20,0x34,0xFA,0xA5,0x54,0x18,0x69,0x78,0x20,0x25,0xFB,0x90, +0x08,0xA5,0x7D,0xF0,0x04,0x18,0x20,0xA5,0xF8,0x4C,0xDD,0xFB,0xA9,0x00,0xF0,0x02, +0xA9,0x9B,0x85,0x7D,0x20,0xE4,0xFC,0xA9,0x00,0x85,0x56,0xE6,0x54,0xA6,0x57,0xA0, +0x18,0x24,0x7B,0x10,0x05,0xA0,0x04,0x98,0xD0,0x03,0xBD,0x99,0xFE,0xC5,0x54,0xD0, +0x26,0x8C,0x9D,0x02,0x8A,0xD0,0x20,0xA5,0x7D,0xF0,0x1C,0xC9,0x9B,0x38,0xF0,0x01, +0x18,0x20,0xAC,0xFB,0xEE,0xBB,0x02,0xC6,0x6C,0xCE,0x9D,0x02,0xAD,0xB2,0x02,0x38, +0x10,0xEF,0xAD,0x9D,0x02,0x85,0x54,0x4C,0xDD,0xFB,0x38,0xB5,0x70,0xE5,0x74,0x95, +0x70,0xB5,0x71,0xE5,0x75,0x95,0x71,0x60,0xAD,0xBF,0x02,0xC9,0x04,0xF0,0x07,0xA5, +0x57,0xF0,0x03,0x20,0xFC,0xF3,0xA9,0x27,0xC5,0x53,0xB0,0x02,0x85,0x53,0xA6,0x57, +0xBD,0x99,0xFE,0xC5,0x54,0x90,0x2A,0xF0,0x28,0xE0,0x08,0xD0,0x0A,0xA5,0x56,0xF0, +0x13,0xC9,0x01,0xD0,0x1C,0xF0,0x04,0xA5,0x56,0xD0,0x16,0xBD,0x8D,0xFE,0xC5,0x55, +0x90,0x0F,0xF0,0x0D,0xA9,0x01,0x85,0x4C,0xA9,0x80,0xA6,0x11,0x85,0x11,0xF0,0x06, +0x60,0x20,0xD6,0xF7,0xA9,0x8D,0x85,0x4C,0x68,0x68,0xA5,0x7B,0x10,0x03,0x20,0xB9, +0xFC,0x4C,0x34,0xF6,0xA0,0x00,0xA5,0x5D,0x91,0x5E,0x60,0x48,0x29,0x07,0xAA,0xBD, +0xB9,0xFE,0x85,0x6E,0x68,0x4A,0x4A,0x4A,0xAA,0x60,0x2E,0xB4,0x02,0x2E,0xB3,0x02, +0x2E,0xB2,0x02,0x60,0x90,0x0C,0x20,0xEB,0xFA,0xBD,0xA3,0x02,0x05,0x6E,0x9D,0xA3, +0x02,0x60,0x20,0xEB,0xFA,0xA5,0x6E,0x49,0xFF,0x3D,0xA3,0x02,0x9D,0xA3,0x02,0x60, +0xA5,0x54,0x18,0x69,0x78,0x20,0xEB,0xFA,0x18,0xBD,0xA3,0x02,0x25,0x6E,0xF0,0x01, +0x38,0x60,0xAD,0xFA,0x02,0xA4,0x57,0xC0,0x03,0xB0,0x0F,0x2A,0x2A,0x2A,0x2A,0x29, +0x03,0xAA,0xAD,0xFA,0x02,0x29,0x9F,0x1D,0xFA,0xFE,0x8D,0xFB,0x02,0x60,0xA9,0x02, +0x85,0x65,0xA9,0x47,0x85,0x64,0xA0,0x27,0xB1,0x66,0x85,0x50,0xB1,0x68,0x91,0x66, +0xA5,0x50,0x91,0x64,0x88,0x10,0xF1,0xA5,0x65,0x85,0x69,0xA5,0x64,0x85,0x68,0x18, +0xA5,0x66,0x69,0x28,0x85,0x66,0x90,0x02,0xE6,0x67,0x60,0x08,0xA0,0x17,0x98,0x20, +0x22,0xFB,0x08,0x98,0x18,0x69,0x79,0x28,0x20,0x04,0xFB,0x88,0x30,0x04,0xC4,0x54, +0xB0,0xEC,0xA5,0x54,0x18,0x69,0x78,0x28,0x4C,0x04,0xFB,0xA5,0x52,0x85,0x55,0x20, +0x47,0xF9,0xA0,0x27,0xA9,0x00,0x91,0x64,0x88,0x10,0xFB,0x60,0x20,0xFA,0xFA,0xA5, +0x58,0x85,0x64,0xA5,0x59,0x85,0x65,0xA0,0x28,0xB1,0x64,0xA6,0x6A,0xCA,0xE4,0x65, +0xD0,0x08,0xA2,0xD7,0xE4,0x64,0xB0,0x02,0xA9,0x00,0xA0,0x00,0x91,0x64,0xE6,0x64, +0xD0,0xE5,0xE6,0x65,0xA5,0x65,0xC5,0x6A,0xD0,0xDD,0x4C,0xDD,0xFB,0xA9,0x00,0x85, +0x63,0xA5,0x54,0x85,0x51,0xA5,0x51,0x20,0x22,0xFB,0xB0,0x0C,0xA5,0x63,0x18,0x69, +0x28,0x85,0x63,0xC6,0x51,0x4C,0xE5,0xFB,0x18,0xA5,0x63,0x65,0x55,0x85,0x63,0x60, +0x20,0x9D,0xFC,0xA5,0x63,0x48,0xA5,0x6C,0x85,0x54,0xA5,0x6D,0x85,0x55,0xA9,0x01, +0x85,0x6B,0xA2,0x17,0xA5,0x7B,0x10,0x02,0xA2,0x03,0xE4,0x54,0xD0,0x0B,0xA5,0x55, +0xC5,0x53,0xD0,0x05,0xE6,0x6B,0x4C,0x39,0xFC,0x20,0xD4,0xF9,0xE6,0x6B,0xA5,0x63, +0xC5,0x52,0xD0,0xDE,0xC6,0x54,0x20,0x99,0xF7,0x20,0xA2,0xF5,0xD0,0x17,0xC6,0x6B, +0xA5,0x63,0xC5,0x52,0xF0,0x0F,0x20,0x99,0xF7,0xA5,0x55,0xC5,0x53,0xD0,0x02,0xC6, +0x54,0xA5,0x6B,0xD0,0xE4,0x68,0x85,0x63,0x20,0xA8,0xFC,0x60,0x20,0xDD,0xFB,0xA5, +0x51,0x85,0x6C,0xA5,0x52,0x85,0x6D,0x60,0xA5,0x63,0xC5,0x52,0xD0,0x02,0xC6,0x54, +0x20,0xDD,0xFB,0xA5,0x63,0xC5,0x52,0xF0,0x13,0x20,0x47,0xF9,0xA5,0x53,0x38,0xE5, +0x52,0xA8,0xB1,0x64,0xD0,0x06,0x88,0x10,0xF9,0x4C,0xDB,0xF8,0x60,0xA2,0x2D,0xBD, +0xC6,0xFE,0xCD,0xFB,0x02,0xF0,0x05,0xCA,0xCA,0xCA,0x10,0xF3,0x60,0xA2,0x02,0xB5, +0x54,0x9D,0xB8,0x02,0xCA,0x10,0xF8,0x60,0xA2,0x02,0xBD,0xB8,0x02,0x95,0x54,0xCA, +0x10,0xF8,0x60,0x20,0xB9,0xFC,0x4C,0x34,0xF6,0xAD,0xBF,0x02,0xC9,0x18,0xF0,0x17, +0xA2,0x0B,0xB5,0x54,0x48,0xBD,0x90,0x02,0x95,0x54,0x68,0x9D,0x90,0x02,0xCA,0x10, +0xF1,0xA5,0x7B,0x49,0xFF,0x85,0x7B,0x60,0xA2,0x7F,0x8E,0x1F,0xD0,0x8E,0x0A,0xD4, +0xCA,0x10,0xF7,0x60,0xA9,0x00,0xA6,0x7B,0xD0,0x04,0xA6,0x57,0xD0,0x02,0xA5,0x52, +0x85,0x55,0x60,0xA5,0x58,0x85,0x64,0xA5,0x59,0x85,0x65,0x60,0xA2,0x00,0xA5,0x22, +0xC9,0x11,0xF0,0x08,0xC9,0x12,0xF0,0x03,0xA0,0x84,0x60,0xE8,0x8E,0xB7,0x02,0xA5, +0x54,0x85,0x60,0xA5,0x55,0x85,0x61,0xA5,0x56,0x85,0x62,0xA9,0x01,0x85,0x79,0x85, +0x7A,0x38,0xA5,0x60,0xE5,0x5A,0x85,0x76,0xB0,0x0D,0xA9,0xFF,0x85,0x79,0xA5,0x76, +0x49,0xFF,0x18,0x69,0x01,0x85,0x76,0x38,0xA5,0x61,0xE5,0x5B,0x85,0x77,0xA5,0x62, +0xE5,0x5C,0x85,0x78,0xB0,0x16,0xA9,0xFF,0x85,0x7A,0xA5,0x77,0x49,0xFF,0x85,0x77, +0xA5,0x78,0x49,0xFF,0x85,0x78,0xE6,0x77,0xD0,0x02,0xE6,0x78,0xA2,0x02,0xA0,0x00, +0x84,0x73,0x98,0x95,0x70,0xB5,0x5A,0x95,0x54,0xCA,0x10,0xF6,0xA5,0x77,0xE8,0xA8, +0xA5,0x78,0x85,0x7F,0x85,0x75,0xD0,0x0B,0xA5,0x77,0xC5,0x76,0xB0,0x05,0xA5,0x76, +0xA2,0x02,0xA8,0x98,0x85,0x7E,0x85,0x74,0x48,0xA5,0x75,0x4A,0x68,0x6A,0x95,0x70, +0xA5,0x7E,0x05,0x7F,0xD0,0x03,0x4C,0x42,0xFE,0x18,0xA5,0x70,0x65,0x76,0x85,0x70, +0x90,0x02,0xE6,0x71,0xA5,0x71,0xC5,0x75,0x90,0x14,0xD0,0x06,0xA5,0x70,0xC5,0x74, +0x90,0x0C,0x18,0xA5,0x54,0x65,0x79,0x85,0x54,0xA2,0x00,0x20,0x7A,0xFA,0x18,0xA5, +0x72,0x65,0x77,0x85,0x72,0xA5,0x73,0x65,0x78,0x85,0x73,0xC5,0x75,0x90,0x27,0xD0, +0x06,0xA5,0x72,0xC5,0x74,0x90,0x1F,0x24,0x7A,0x10,0x10,0xC6,0x55,0xA5,0x55,0xC9, +0xFF,0xD0,0x0E,0xA5,0x56,0xF0,0x0A,0xC6,0x56,0x10,0x06,0xE6,0x55,0xD0,0x02,0xE6, +0x56,0xA2,0x02,0x20,0x7A,0xFA,0x20,0x96,0xFA,0x20,0xE0,0xF5,0xAD,0xB7,0x02,0xF0, +0x2F,0x20,0x9D,0xFC,0xAD,0xFB,0x02,0x8D,0xBC,0x02,0xA5,0x54,0x48,0x20,0xDC,0xF9, +0x68,0x85,0x54,0x20,0x96,0xFA,0x20,0xA2,0xF5,0xD0,0x0C,0xAD,0xFD,0x02,0x8D,0xFB, +0x02,0x20,0xE0,0xF5,0x4C,0x0A,0xFE,0xAD,0xBC,0x02,0x8D,0xFB,0x02,0x20,0xA8,0xFC, +0x38,0xA5,0x7E,0xE9,0x01,0x85,0x7E,0xA5,0x7F,0xE9,0x00,0x85,0x7F,0x30,0x03,0x4C, +0x90,0xFD,0x4C,0x34,0xF6,0x18,0x10,0x0A,0x0A,0x10,0x1C,0x34,0x64,0xC4,0xC4,0xC4, +0xC4,0x17,0x17,0x0B,0x17,0x2F,0x2F,0x5F,0x5F,0x61,0x61,0x61,0x61,0x13,0x13,0x09, +0x13,0x27,0x27,0x4F,0x4F,0x41,0x41,0x41,0x41,0x02,0x06,0x07,0x08,0x09,0x0A,0x0B, +0x0D,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01, +0x01,0x02,0x01,0x01,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x28,0x14,0x14, +0x28,0x50,0x50,0xA0,0xA0,0x40,0x50,0x50,0x50,0x18,0x18,0x0C,0x18,0x30,0x30,0x60, +0x60,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x02,0x03,0x02,0x03,0x02,0x03,0x01,0x01, +0x01,0x00,0xFF,0xF0,0x0F,0xC0,0x30,0x0C,0x03,0x80,0x40,0x20,0x10,0x08,0x04,0x02, +0x01,0x28,0xCA,0x94,0x46,0x00,0x1B,0x79,0xF7,0x1C,0x7F,0xF7,0x1D,0x8C,0xF7,0x1E, +0x99,0xF7,0x1F,0xAA,0xF7,0x7D,0xB9,0xF7,0x7E,0xE6,0xF7,0x7F,0x10,0xF8,0x9B,0x30, +0xFA,0x9C,0xD4,0xF8,0x9D,0xA4,0xF8,0x9E,0x32,0xF8,0x9F,0x2D,0xF8,0xFD,0x0A,0xF9, +0xFE,0x6D,0xF8,0xFF,0x37,0xF8,0x40,0x00,0x20,0x60,0x20,0x40,0x00,0x60,0x6C,0x6A, +0x3B,0x80,0x80,0x6B,0x2B,0x2A,0x6F,0x80,0x70,0x75,0x9B,0x69,0x2D,0x3D,0x76,0x80, +0x63,0x80,0x80,0x62,0x78,0x7A,0x34,0x80,0x33,0x36,0x1B,0x35,0x32,0x31,0x2C,0x20, +0x2E,0x6E,0x80,0x6D,0x2F,0x81,0x72,0x80,0x65,0x79,0x7F,0x74,0x77,0x71,0x39,0x80, +0x30,0x37,0x7E,0x38,0x3C,0x3E,0x66,0x68,0x64,0x80,0x82,0x67,0x73,0x61,0x4C,0x4A, +0x3A,0x80,0x80,0x4B,0x5C,0x5E,0x4F,0x80,0x50,0x55,0x9B,0x49,0x5F,0x7C,0x56,0x80, +0x43,0x80,0x80,0x42,0x58,0x5A,0x24,0x80,0x23,0x26,0x1B,0x25,0x22,0x21,0x5B,0x20, +0x5D,0x4E,0x80,0x4D,0x3F,0x81,0x52,0x80,0x45,0x59,0x9F,0x54,0x57,0x51,0x28,0x80, +0x29,0x27,0x9C,0x40,0x7D,0x9D,0x46,0x48,0x44,0x80,0x83,0x47,0x53,0x41,0x0C,0x0A, +0x7B,0x80,0x80,0x0B,0x1E,0x1F,0x0F,0x80,0x10,0x15,0x9B,0x09,0x1C,0x1D,0x16,0x80, +0x03,0x80,0x80,0x02,0x18,0x1A,0x80,0x80,0x85,0x80,0x1B,0x80,0xFD,0x80,0x00,0x20, +0x60,0x0E,0x80,0x0D,0x80,0x81,0x12,0x80,0x05,0x19,0x9E,0x14,0x17,0x11,0x80,0x80, +0x80,0x80,0xFE,0x80,0x7D,0xFF,0x06,0x08,0x04,0x80,0x84,0x07,0x13,0x01,0xAD,0x09, +0xD2,0xCD,0xF2,0x02,0xD0,0x05,0xAD,0xF1,0x02,0xD0,0x20,0xAD,0x09,0xD2,0xC9,0x9F, +0xD0,0x0A,0xAD,0xFF,0x02,0x49,0xFF,0x8D,0xFF,0x02,0xB0,0x0F,0x8D,0xFC,0x02,0x8D, +0xF2,0x02,0xA9,0x03,0x8D,0xF1,0x02,0xA9,0x00,0x85,0x4D,0xA9,0x30,0x8D,0x2B,0x02, +0x68,0x40,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xD6,0x57,0xB4,0xE7,0x77,0xE4,0xF3,0xE6, +}; diff --git a/MCUME_pico/pico800/romatariosb.h b/MCUME_pico/pico800/romatariosb.h new file mode 100644 index 0000000..c0691f9 --- /dev/null +++ b/MCUME_pico/pico800/romatariosb.h @@ -0,0 +1,642 @@ +const UBYTE PROGMEM romos[10240] = { +0x20,0xA1,0xDB,0x20,0xBB,0xDB,0xB0,0x39,0xA2,0xED,0xA0,0x04,0x20,0x48,0xDA,0xA2, +0xFF,0x86,0xF1,0x20,0x44,0xDA,0xF0,0x04,0xA9,0xFF,0x85,0xF0,0x20,0x94,0xDB,0xB0, +0x21,0x48,0xA6,0xD5,0xD0,0x11,0x20,0xEB,0xDB,0x68,0x05,0xD9,0x85,0xD9,0xA6,0xF1, +0x30,0xE6,0xE8,0x86,0xF1,0xD0,0xE1,0x68,0xA6,0xF1,0x10,0x02,0xE6,0xED,0x4C,0x18, +0xD8,0x60,0xC9,0x2E,0xF0,0x14,0xC9,0x45,0xF0,0x19,0xA6,0xF0,0xD0,0x68,0xC9,0x2B, +0xF0,0xC6,0xC9,0x2D,0xF0,0x00,0x85,0xEE,0xF0,0xBE,0xA6,0xF1,0x10,0x58,0xE8,0x86, +0xF1,0xF0,0xB5,0xA5,0xF2,0x85,0xEC,0x20,0x94,0xDB,0xB0,0x37,0xAA,0xA5,0xED,0x48, +0x86,0xED,0x20,0x94,0xDB,0xB0,0x17,0x48,0xA5,0xED,0x0A,0x85,0xED,0x0A,0x0A,0x65, +0xED,0x85,0xED,0x68,0x18,0x65,0xED,0x85,0xED,0xA4,0xF2,0x20,0x9D,0xDB,0xA5,0xEF, +0xF0,0x09,0xA5,0xED,0x49,0xFF,0x18,0x69,0x01,0x85,0xED,0x68,0x18,0x65,0xED,0x85, +0xED,0xD0,0x13,0xC9,0x2B,0xF0,0x06,0xC9,0x2D,0xD0,0x07,0x85,0xEF,0x20,0x94,0xDB, +0x90,0xBA,0xA5,0xEC,0x85,0xF2,0xC6,0xF2,0xA5,0xED,0xA6,0xF1,0x30,0x05,0xF0,0x03, +0x38,0xE5,0xF1,0x48,0x2A,0x68,0x6A,0x85,0xED,0x90,0x03,0x20,0xEB,0xDB,0xA5,0xED, +0x18,0x69,0x44,0x85,0xD4,0x20,0x00,0xDC,0xB0,0x0B,0xA6,0xEE,0xF0,0x06,0xA5,0xD4, +0x09,0x80,0x85,0xD4,0x18,0x60,0x20,0x51,0xDA,0xA9,0x30,0x8D,0x7F,0x05,0xA5,0xD4, +0xF0,0x28,0x29,0x7F,0xC9,0x3F,0x90,0x28,0xC9,0x45,0xB0,0x24,0x38,0xE9,0x3F,0x20, +0x70,0xDC,0x20,0xA4,0xDC,0x09,0x80,0x9D,0x80,0x05,0xAD,0x80,0x05,0xC9,0x2E,0xF0, +0x03,0x4C,0x88,0xD9,0x20,0xC1,0xDC,0x4C,0x9C,0xD9,0xA9,0xB0,0x8D,0x80,0x05,0x60, +0xA9,0x01,0x20,0x70,0xDC,0x20,0xA4,0xDC,0xE8,0x86,0xF2,0xA5,0xD4,0x0A,0x38,0xE9, +0x80,0xAE,0x80,0x05,0xE0,0x30,0xF0,0x17,0xAE,0x81,0x05,0xAC,0x82,0x05,0x8E,0x82, +0x05,0x8C,0x81,0x05,0xA6,0xF2,0xE0,0x02,0xD0,0x02,0xE6,0xF2,0x18,0x69,0x01,0x85, +0xED,0xA9,0x45,0xA4,0xF2,0x20,0x9F,0xDC,0x84,0xF2,0xA5,0xED,0x10,0x0B,0xA9,0x00, +0x38,0xE5,0xED,0x85,0xED,0xA9,0x2D,0xD0,0x02,0xA9,0x2B,0x20,0x9F,0xDC,0xA2,0x00, +0xA5,0xED,0x38,0xE9,0x0A,0x90,0x03,0xE8,0xD0,0xF8,0x18,0x69,0x0A,0x48,0x8A,0x20, +0x9D,0xDC,0x68,0x09,0x80,0x20,0x9D,0xDC,0xAD,0x80,0x05,0xC9,0x30,0xD0,0x0D,0x18, +0xA5,0xF3,0x69,0x01,0x85,0xF3,0xA5,0xF4,0x69,0x00,0x85,0xF4,0xA5,0xD4,0x10,0x09, +0x20,0xC1,0xDC,0xA0,0x00,0xA9,0x2D,0x91,0xF3,0x60,0xA5,0xD4,0x85,0xF8,0xA5,0xD5, +0x85,0xF7,0x20,0x44,0xDA,0xF8,0xA0,0x10,0x06,0xF8,0x26,0xF7,0xA2,0x03,0xB5,0xD4, +0x75,0xD4,0x95,0xD4,0xCA,0xD0,0xF7,0x88,0xD0,0xEE,0xD8,0xA9,0x42,0x85,0xD4,0x4C, +0x00,0xDC,0xA9,0x00,0x85,0xF7,0x85,0xF8,0xA5,0xD4,0x30,0x66,0xC9,0x43,0xB0,0x62, +0x38,0xE9,0x40,0x90,0x3F,0x69,0x00,0x0A,0x85,0xF5,0x20,0x5A,0xDA,0xB0,0x53,0xA5, +0xF7,0x85,0xF9,0xA5,0xF8,0x85,0xFA,0x20,0x5A,0xDA,0xB0,0x46,0x20,0x5A,0xDA,0xB0, +0x41,0x18,0xA5,0xF8,0x65,0xFA,0x85,0xF8,0xA5,0xF7,0x65,0xF9,0x85,0xF7,0xB0,0x32, +0x20,0xB9,0xDC,0x18,0x65,0xF8,0x85,0xF8,0xA5,0xF7,0x69,0x00,0xB0,0x24,0x85,0xF7, +0xC6,0xF5,0xD0,0xC6,0x20,0xB9,0xDC,0xC9,0x05,0x90,0x0D,0x18,0xA5,0xF8,0x69,0x01, +0x85,0xF8,0xA5,0xF7,0x69,0x00,0x85,0xF7,0xA5,0xF8,0x85,0xD4,0xA5,0xF7,0x85,0xD5, +0x18,0x60,0x38,0x60,0xA2,0xD4,0xA0,0x06,0xA9,0x00,0x95,0x00,0xE8,0x88,0xD0,0xFA, +0x60,0xA9,0x05,0x85,0xF4,0xA9,0x80,0x85,0xF3,0x60,0x18,0x26,0xF8,0x26,0xF7,0x60, +0xA5,0xE0,0x49,0x80,0x85,0xE0,0xA5,0xE0,0x29,0x7F,0x85,0xF7,0xA5,0xD4,0x29,0x7F, +0x38,0xE5,0xF7,0x10,0x10,0xA2,0x05,0xB5,0xD4,0xB4,0xE0,0x95,0xE0,0x98,0x95,0xD4, +0xCA,0x10,0xF4,0x30,0xE1,0xF0,0x07,0xC9,0x05,0xB0,0x19,0x20,0x3E,0xDC,0xF8,0xA5, +0xD4,0x45,0xE0,0x30,0x1E,0xA2,0x04,0x18,0xB5,0xD5,0x75,0xE1,0x95,0xD5,0xCA,0x10, +0xF7,0xD8,0xB0,0x03,0x4C,0x00,0xDC,0xA9,0x01,0x20,0x3A,0xDC,0xA9,0x01,0x85,0xD5, +0x4C,0x00,0xDC,0xA2,0x04,0x38,0xB5,0xD5,0xF5,0xE1,0x95,0xD5,0xCA,0x10,0xF7,0x90, +0x04,0xD8,0x4C,0x00,0xDC,0xA5,0xD4,0x49,0x80,0x85,0xD4,0x38,0xA2,0x04,0xA9,0x00, +0xF5,0xD5,0x95,0xD5,0xCA,0x10,0xF7,0xD8,0x4C,0x00,0xDC,0xA5,0xD4,0xF0,0x45,0xA5, +0xE0,0xF0,0x3E,0x20,0xCF,0xDC,0x38,0xE9,0x40,0x38,0x65,0xE0,0x30,0x38,0x20,0xE0, +0xDC,0xA5,0xDF,0x29,0x0F,0x85,0xF6,0xC6,0xF6,0x30,0x06,0x20,0x01,0xDD,0x4C,0xF7, +0xDA,0xA5,0xDF,0x4A,0x4A,0x4A,0x4A,0x85,0xF6,0xC6,0xF6,0x30,0x06,0x20,0x05,0xDD, +0x4C,0x09,0xDB,0x20,0x62,0xDC,0xC6,0xF5,0xD0,0xD7,0xA5,0xED,0x85,0xD4,0x4C,0x04, +0xDC,0x20,0x44,0xDA,0x18,0x60,0x38,0x60,0xA5,0xE0,0xF0,0xFA,0xA5,0xD4,0xF0,0xF4, +0x20,0xCF,0xDC,0x38,0xE5,0xE0,0x18,0x69,0x40,0x30,0xEB,0x20,0xE0,0xDC,0xE6,0xF5, +0x4C,0x4E,0xDB,0xA2,0x00,0xB5,0xD5,0x95,0xD4,0xE8,0xE0,0x0C,0xD0,0xF7,0xA0,0x05, +0x38,0xF8,0xB9,0xDA,0x00,0xF9,0xE6,0x00,0x99,0xDA,0x00,0x88,0x10,0xF4,0xD8,0x90, +0x04,0xE6,0xD9,0xD0,0xE9,0x20,0x0F,0xDD,0x06,0xD9,0x06,0xD9,0x06,0xD9,0x06,0xD9, +0xA0,0x05,0x38,0xF8,0xB9,0xDA,0x00,0xF9,0xE0,0x00,0x99,0xDA,0x00,0x88,0x10,0xF4, +0xD8,0x90,0x04,0xE6,0xD9,0xD0,0xE9,0x20,0x09,0xDD,0xC6,0xF5,0xD0,0xB5,0x20,0x62, +0xDC,0x4C,0x1A,0xDB,0x20,0xAF,0xDB,0xA4,0xF2,0x90,0x02,0xB1,0xF3,0xC8,0x84,0xF2, +0x60,0xA4,0xF2,0xA9,0x20,0xD1,0xF3,0xD0,0x03,0xC8,0xD0,0xF9,0x84,0xF2,0x60,0xA4, +0xF2,0xB1,0xF3,0x38,0xE9,0x30,0x90,0x18,0xC9,0x0A,0x60,0xA5,0xF2,0x48,0x20,0x94, +0xDB,0x90,0x1F,0xC9,0x2E,0xF0,0x14,0xC9,0x2B,0xF0,0x07,0xC9,0x2D,0xF0,0x03,0x68, +0x38,0x60,0x20,0x94,0xDB,0x90,0x0B,0xC9,0x2E,0xD0,0xF4,0x20,0x94,0xDB,0x90,0x02, +0xB0,0xED,0x68,0x85,0xF2,0x18,0x60,0xA2,0xE7,0xD0,0x02,0xA2,0xD5,0xA0,0x04,0x18, +0x36,0x04,0x36,0x03,0x36,0x02,0x36,0x01,0x36,0x00,0x26,0xEC,0x88,0xD0,0xF0,0x60, +0xA2,0x00,0x86,0xDA,0xA2,0x04,0xA5,0xD4,0xF0,0x2E,0xA5,0xD5,0xD0,0x1A,0xA0,0x00, +0xB9,0xD6,0x00,0x99,0xD5,0x00,0xC8,0xC0,0x05,0x90,0xF5,0xC6,0xD4,0xCA,0xD0,0xEA, +0xA5,0xD5,0xD0,0x04,0x85,0xD4,0x18,0x60,0xA5,0xD4,0x29,0x7F,0xC9,0x71,0x90,0x01, +0x60,0xC9,0x0F,0xB0,0x03,0x20,0x44,0xDA,0x18,0x60,0xA2,0xD4,0xD0,0x02,0xA2,0xE0, +0x86,0xF9,0x85,0xF7,0x85,0xF8,0xA0,0x04,0xB5,0x04,0x95,0x05,0xCA,0x88,0xD0,0xF8, +0xA9,0x00,0x95,0x05,0xA6,0xF9,0xC6,0xF7,0xD0,0xEC,0xB5,0x00,0x18,0x65,0xF8,0x95, +0x00,0x60,0xA2,0x0A,0xB5,0xD4,0x95,0xD5,0xCA,0x10,0xF9,0xA9,0x00,0x85,0xD4,0x60, +0x85,0xF7,0xA2,0x00,0xA0,0x00,0x20,0x93,0xDC,0x38,0xE9,0x01,0x85,0xF7,0xB5,0xD5, +0x4A,0x4A,0x4A,0x4A,0x20,0x9D,0xDC,0xB5,0xD5,0x29,0x0F,0x20,0x9D,0xDC,0xE8,0xE0, +0x05,0x90,0xE3,0xA5,0xF7,0xD0,0x05,0xA9,0x2E,0x20,0x9F,0xDC,0x60,0x09,0x30,0x99, +0x80,0x05,0xC8,0x60,0xA2,0x0A,0xBD,0x80,0x05,0xC9,0x2E,0xF0,0x07,0xC9,0x30,0xD0, +0x07,0xCA,0xD0,0xF2,0xCA,0xBD,0x80,0x05,0x60,0x20,0xEB,0xDB,0xA5,0xEC,0x29,0x0F, +0x60,0x38,0xA5,0xF3,0xE9,0x01,0x85,0xF3,0xA5,0xF4,0xE9,0x00,0x85,0xF4,0x60,0xA5, +0xD4,0x45,0xE0,0x29,0x80,0x85,0xEE,0x06,0xE0,0x46,0xE0,0xA5,0xD4,0x29,0x7F,0x60, +0x05,0xEE,0x85,0xED,0xA9,0x00,0x85,0xD4,0x85,0xE0,0x20,0x28,0xDD,0x20,0xE7,0xDB, +0xA5,0xEC,0x29,0x0F,0x85,0xE6,0xA9,0x05,0x85,0xF5,0x20,0x34,0xDD,0x20,0x44,0xDA, +0x60,0xA2,0xD9,0xD0,0x06,0xA2,0xD9,0xD0,0x08,0xA2,0xDF,0xA0,0xE5,0xD0,0x04,0xA2, +0xDF,0xA0,0xEB,0xA9,0x05,0x85,0xF7,0x18,0xF8,0xB5,0x00,0x79,0x00,0x00,0x95,0x00, +0xCA,0x88,0xC6,0xF7,0x10,0xF3,0xD8,0x60,0xA0,0x05,0xB9,0xE0,0x00,0x99,0xE6,0x00, +0x88,0x10,0xF7,0x60,0xA0,0x05,0xB9,0xD4,0x00,0x99,0xDA,0x00,0x88,0x10,0xF7,0x60, +0x86,0xFE,0x84,0xFF,0x85,0xEF,0xA2,0xE0,0xA0,0x05,0x20,0xA7,0xDD,0x20,0xB6,0xDD, +0xA6,0xFE,0xA4,0xFF,0x20,0x89,0xDD,0xC6,0xEF,0xF0,0x2D,0x20,0xDB,0xDA,0xB0,0x28, +0x18,0xA5,0xFE,0x69,0x06,0x85,0xFE,0x90,0x06,0xA5,0xFF,0x69,0x00,0x85,0xFF,0xA6, +0xFE,0xA4,0xFF,0x20,0x98,0xDD,0x20,0x66,0xDA,0xB0,0x0D,0xC6,0xEF,0xF0,0x09,0xA2, +0xE0,0xA0,0x05,0x20,0x98,0xDD,0x30,0xD3,0x60,0x86,0xFC,0x84,0xFD,0xA0,0x05,0xB1, +0xFC,0x99,0xD4,0x00,0x88,0x10,0xF8,0x60,0x86,0xFC,0x84,0xFD,0xA0,0x05,0xB1,0xFC, +0x99,0xE0,0x00,0x88,0x10,0xF8,0x60,0x86,0xFC,0x84,0xFD,0xA0,0x05,0xB9,0xD4,0x00, +0x91,0xFC,0x88,0x10,0xF8,0x60,0xA2,0x05,0xB5,0xD4,0x95,0xE0,0xCA,0x10,0xF9,0x60, +0xA2,0x89,0xA0,0xDE,0x20,0x98,0xDD,0x20,0xDB,0xDA,0xB0,0x7F,0xA9,0x00,0x85,0xF1, +0xA5,0xD4,0x85,0xF0,0x29,0x7F,0x85,0xD4,0x38,0xE9,0x40,0x30,0x26,0xC9,0x04,0x10, +0x6A,0xA2,0xE6,0xA0,0x05,0x20,0xA7,0xDD,0x20,0xD2,0xD9,0xA5,0xD4,0x85,0xF1,0xA5, +0xD5,0xD0,0x58,0x20,0xAA,0xD9,0x20,0xB6,0xDD,0xA2,0xE6,0xA0,0x05,0x20,0x89,0xDD, +0x20,0x60,0xDA,0xA9,0x0A,0xA2,0x4D,0xA0,0xDE,0x20,0x40,0xDD,0x20,0xB6,0xDD,0x20, +0xDB,0xDA,0xA5,0xF1,0xF0,0x23,0x18,0x6A,0x85,0xE0,0xA9,0x01,0x90,0x02,0xA9,0x10, +0x85,0xE1,0xA2,0x04,0xA9,0x00,0x95,0xE2,0xCA,0x10,0xFB,0xA5,0xE0,0x18,0x69,0x40, +0xB0,0x19,0x30,0x17,0x85,0xE0,0x20,0xDB,0xDA,0xA5,0xF0,0x10,0x0D,0x20,0xB6,0xDD, +0xA2,0x8F,0xA0,0xDE,0x20,0x89,0xDD,0x20,0x28,0xDB,0x60,0x38,0x60,0x3D,0x17,0x94, +0x19,0x00,0x00,0x3D,0x57,0x33,0x05,0x00,0x00,0x3E,0x05,0x54,0x76,0x62,0x00,0x3E, +0x32,0x19,0x62,0x27,0x00,0x3F,0x01,0x68,0x60,0x30,0x36,0x3F,0x07,0x32,0x03,0x27, +0x41,0x3F,0x25,0x43,0x34,0x56,0x75,0x3F,0x66,0x27,0x37,0x30,0x50,0x40,0x01,0x15, +0x12,0x92,0x55,0x3F,0x99,0x99,0x99,0x99,0x99,0x3F,0x43,0x42,0x94,0x48,0x19,0x40, +0x01,0x00,0x00,0x00,0x00,0x86,0xFE,0x84,0xFF,0xA2,0xE0,0xA0,0x05,0x20,0xA7,0xDD, +0xA6,0xFE,0xA4,0xFF,0x20,0x98,0xDD,0x20,0x66,0xDA,0xA2,0xE6,0xA0,0x05,0x20,0xA7, +0xDD,0xA2,0xE0,0xA0,0x05,0x20,0x89,0xDD,0xA6,0xFE,0xA4,0xFF,0x20,0x98,0xDD,0x20, +0x60,0xDA,0xA2,0xE6,0xA0,0x05,0x20,0x98,0xDD,0x20,0x28,0xDB,0x60,0xA9,0x01,0xD0, +0x02,0xA9,0x00,0x85,0xF0,0xA5,0xD4,0x10,0x02,0x38,0x60,0xA5,0xD4,0x85,0xE0,0x38, +0xE9,0x40,0x0A,0x85,0xF1,0xA5,0xD5,0x29,0xF0,0xD0,0x04,0xA9,0x01,0xD0,0x04,0xE6, +0xF1,0xA9,0x10,0x85,0xE1,0xA2,0x04,0xA9,0x00,0x95,0xE2,0xCA,0x10,0xFB,0x20,0x28, +0xDB,0xA2,0x66,0xA0,0xDF,0x20,0x95,0xDE,0xA2,0xE6,0xA0,0x05,0x20,0xA7,0xDD,0x20, +0xB6,0xDD,0x20,0xDB,0xDA,0xA9,0x0A,0xA2,0x72,0xA0,0xDF,0x20,0x40,0xDD,0xA2,0xE6, +0xA0,0x05,0x20,0x98,0xDD,0x20,0xDB,0xDA,0xA2,0x6C,0xA0,0xDF,0x20,0x98,0xDD,0x20, +0x66,0xDA,0x20,0xB6,0xDD,0xA9,0x00,0x85,0xD5,0xA5,0xF1,0x85,0xD4,0x10,0x07,0x49, +0xFF,0x18,0x69,0x01,0x85,0xD4,0x20,0xAA,0xD9,0x24,0xF1,0x10,0x06,0xA9,0x80,0x05, +0xD4,0x85,0xD4,0x20,0x66,0xDA,0xA5,0xF0,0xF0,0x0A,0xA2,0x89,0xA0,0xDE,0x20,0x98, +0xDD,0x20,0x28,0xDB,0x18,0x60,0x40,0x03,0x16,0x22,0x77,0x66,0x3F,0x50,0x00,0x00, +0x00,0x00,0x3F,0x49,0x15,0x57,0x11,0x08,0xBF,0x51,0x70,0x49,0x47,0x08,0x3F,0x39, +0x20,0x57,0x61,0x95,0xBF,0x04,0x39,0x63,0x03,0x55,0x3F,0x10,0x09,0x30,0x12,0x64, +0x3F,0x09,0x39,0x08,0x04,0x60,0x3F,0x12,0x42,0x58,0x47,0x42,0x3F,0x17,0x37,0x12, +0x06,0x08,0x3F,0x28,0x95,0x29,0x71,0x17,0x3F,0x86,0x85,0x88,0x96,0x44,0x3E,0x16, +0x05,0x44,0x49,0x00,0xBE,0x95,0x68,0x38,0x45,0x00,0x3F,0x02,0x68,0x79,0x94,0x16, +0xBF,0x04,0x92,0x78,0x90,0x80,0x3F,0x07,0x03,0x15,0x20,0x00,0xBF,0x08,0x92,0x29, +0x12,0x44,0x3F,0x11,0x08,0x40,0x09,0x11,0xBF,0x14,0x28,0x31,0x56,0x04,0x3F,0x19, +0x99,0x98,0x77,0x44,0xBF,0x33,0x33,0x33,0x31,0x13,0x3F,0x99,0x99,0x99,0x99,0x99, +0x3F,0x78,0x53,0x98,0x16,0x34,0x98,0x16,0x34,0xFC,0xE0,0x32,0x50,0xD9,0x68,0x11, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18,0x00, +0x00,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x66,0xFF,0x66,0x66,0xFF,0x66,0x00, +0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00,0x00,0x66,0x6C,0x18,0x30,0x66,0x46,0x00, +0x1C,0x36,0x1C,0x38,0x6F,0x66,0x3B,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00, +0x00,0x0E,0x1C,0x18,0x18,0x1C,0x0E,0x00,0x00,0x70,0x38,0x18,0x18,0x38,0x70,0x00, +0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x40,0x00, +0x00,0x3C,0x66,0x6E,0x76,0x66,0x3C,0x00,0x00,0x18,0x38,0x18,0x18,0x18,0x7E,0x00, +0x00,0x3C,0x66,0x0C,0x18,0x30,0x7E,0x00,0x00,0x7E,0x0C,0x18,0x0C,0x66,0x3C,0x00, +0x00,0x0C,0x1C,0x3C,0x6C,0x7E,0x0C,0x00,0x00,0x7E,0x60,0x7C,0x06,0x66,0x3C,0x00, +0x00,0x3C,0x60,0x7C,0x66,0x66,0x3C,0x00,0x00,0x7E,0x06,0x0C,0x18,0x30,0x30,0x00, +0x00,0x3C,0x66,0x3C,0x66,0x66,0x3C,0x00,0x00,0x3C,0x66,0x3E,0x06,0x0C,0x38,0x00, +0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x30, +0x06,0x0C,0x18,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00, +0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00,0x00,0x3C,0x66,0x0C,0x18,0x00,0x18,0x00, +0x00,0x3C,0x66,0x6E,0x6E,0x60,0x3E,0x00,0x00,0x18,0x3C,0x66,0x66,0x7E,0x66,0x00, +0x00,0x7C,0x66,0x7C,0x66,0x66,0x7C,0x00,0x00,0x3C,0x66,0x60,0x60,0x66,0x3C,0x00, +0x00,0x78,0x6C,0x66,0x66,0x6C,0x78,0x00,0x00,0x7E,0x60,0x7C,0x60,0x60,0x7E,0x00, +0x00,0x7E,0x60,0x7C,0x60,0x60,0x60,0x00,0x00,0x3E,0x60,0x60,0x6E,0x66,0x3E,0x00, +0x00,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x7E,0x00, +0x00,0x06,0x06,0x06,0x06,0x66,0x3C,0x00,0x00,0x66,0x6C,0x78,0x78,0x6C,0x66,0x00, +0x00,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0x00,0x63,0x77,0x7F,0x6B,0x63,0x63,0x00, +0x00,0x66,0x76,0x7E,0x7E,0x6E,0x66,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x00, +0x00,0x7C,0x66,0x66,0x7C,0x60,0x60,0x00,0x00,0x3C,0x66,0x66,0x66,0x6C,0x36,0x00, +0x00,0x7C,0x66,0x66,0x7C,0x6C,0x66,0x00,0x00,0x3C,0x60,0x3C,0x06,0x06,0x3C,0x00, +0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x7E,0x00, +0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00, +0x00,0x66,0x66,0x3C,0x3C,0x66,0x66,0x00,0x00,0x66,0x66,0x3C,0x18,0x18,0x18,0x00, +0x00,0x7E,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x1E,0x18,0x18,0x18,0x18,0x1E,0x00, +0x00,0x40,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x78,0x00, +0x00,0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00, +0x00,0x36,0x7F,0x7F,0x3E,0x1C,0x08,0x00,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18, +0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x18,0x18,0x18,0xF8,0xF8,0x00,0x00,0x00, +0x18,0x18,0x18,0xF8,0xF8,0x18,0x18,0x18,0x00,0x00,0x00,0xF8,0xF8,0x18,0x18,0x18, +0x03,0x07,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0x03, +0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F, +0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00, +0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0, +0x00,0x1C,0x1C,0x77,0x77,0x08,0x1C,0x00,0x00,0x00,0x00,0x1F,0x1F,0x18,0x18,0x18, +0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x18,0x18,0x18,0xFF,0xFF,0x18,0x18,0x18, +0x00,0x00,0x3C,0x7E,0x7E,0x7E,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, +0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0xFF,0xFF,0x18,0x18,0x18, +0x18,0x18,0x18,0xFF,0xFF,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0, +0x18,0x18,0x18,0x1F,0x1F,0x00,0x00,0x00,0x78,0x60,0x78,0x60,0x7E,0x18,0x1E,0x00, +0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x00,0x00,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00, +0x00,0x18,0x30,0x7E,0x30,0x18,0x00,0x00,0x00,0x18,0x0C,0x7E,0x0C,0x18,0x00,0x00, +0x00,0x18,0x3C,0x7E,0x7E,0x3C,0x18,0x00,0x00,0x00,0x3C,0x06,0x3E,0x66,0x3E,0x00, +0x00,0x60,0x60,0x7C,0x66,0x66,0x7C,0x00,0x00,0x00,0x3C,0x60,0x60,0x60,0x3C,0x00, +0x00,0x06,0x06,0x3E,0x66,0x66,0x3E,0x00,0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00, +0x00,0x0E,0x18,0x3E,0x18,0x18,0x18,0x00,0x00,0x00,0x3E,0x66,0x66,0x3E,0x06,0x7C, +0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x00,0x00,0x18,0x00,0x38,0x18,0x18,0x3C,0x00, +0x00,0x06,0x00,0x06,0x06,0x06,0x06,0x3C,0x00,0x60,0x60,0x6C,0x78,0x6C,0x66,0x00, +0x00,0x38,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00, +0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00, +0x00,0x00,0x7C,0x66,0x66,0x7C,0x60,0x60,0x00,0x00,0x3E,0x66,0x66,0x3E,0x06,0x06, +0x00,0x00,0x7C,0x66,0x60,0x60,0x60,0x00,0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00, +0x00,0x18,0x7E,0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3E,0x00, +0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x63,0x6B,0x7F,0x3E,0x36,0x00, +0x00,0x00,0x66,0x3C,0x18,0x3C,0x66,0x00,0x00,0x00,0x66,0x66,0x66,0x3E,0x0C,0x78, +0x00,0x00,0x7E,0x0C,0x18,0x30,0x7E,0x00,0x00,0x18,0x3C,0x7E,0x7E,0x18,0x3C,0x00, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x7E,0x78,0x7C,0x6E,0x66,0x06,0x00, +0x08,0x18,0x38,0x78,0x38,0x18,0x08,0x00,0x10,0x18,0x1C,0x1E,0x1C,0x18,0x10,0x00, +0xFB,0xF3,0x33,0xF6,0x3D,0xF6,0xA3,0xF6,0x33,0xF6,0x3C,0xF6,0x4C,0xE4,0xF3,0x00, +0xF5,0xF3,0x33,0xF6,0x92,0xF5,0xB6,0xF5,0x33,0xF6,0xFB,0xFC,0x4C,0xE4,0xF3,0x00, +0x33,0xF6,0x33,0xF6,0xE1,0xF6,0x3C,0xF6,0x33,0xF6,0x3C,0xF6,0x4C,0xE4,0xF3,0x00, +0x9E,0xEE,0xDB,0xEE,0x9D,0xEE,0xA6,0xEE,0x80,0xEE,0x9D,0xEE,0x4C,0x78,0xEE,0x00, +0x4B,0xEF,0x2A,0xF0,0xD5,0xEF,0x0F,0xF0,0x27,0xF0,0x4A,0xEF,0x4C,0x41,0xEF,0x00, +0x4C,0xEA,0xED,0x4C,0xF0,0xED,0x4C,0xC4,0xE4,0x4C,0x59,0xE9,0x4C,0xED,0xE8,0x4C, +0xAE,0xE7,0x4C,0x05,0xE9,0x4C,0x44,0xE9,0x4C,0xF2,0xEB,0x4C,0xD5,0xE6,0x4C,0xA6, +0xE4,0x4C,0x23,0xF2,0x4C,0x1B,0xF1,0x4C,0x25,0xF1,0x4C,0xE9,0xEF,0x4C,0x5D,0xEF, +0x90,0xE7,0x8F,0xE7,0x8F,0xE7,0x8F,0xE7,0xBE,0xFF,0x0F,0xEB,0x90,0xEA,0xCF,0xEA, +0x8F,0xE7,0x8F,0xE7,0x8F,0xE7,0x06,0xE7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xAE,0xE7,0x05,0xE9,0xA2,0x00,0xA9,0xFF,0x9D,0x40,0x03,0xA9,0xC0,0x9D, +0x46,0x03,0xA9,0xE4,0x9D,0x47,0x03,0x8A,0x18,0x69,0x10,0xAA,0xC9,0x80,0x90,0xE8, +0x60,0xA0,0x85,0x60,0x85,0x2F,0x86,0x2E,0x8A,0x29,0x0F,0xD0,0x04,0xE0,0x80,0x90, +0x05,0xA0,0x86,0x4C,0x1B,0xE6,0xA0,0x00,0xBD,0x40,0x03,0x99,0x20,0x00,0xE8,0xC8, +0xC0,0x0C,0x90,0xF4,0xA0,0x84,0xA5,0x22,0xC9,0x03,0x90,0x25,0xA8,0xC0,0x0E,0x90, +0x02,0xA0,0x0E,0x84,0x17,0xB9,0xC6,0xE6,0xF0,0x0F,0xC9,0x02,0xF0,0x35,0xC9,0x08, +0xB0,0x4C,0xC9,0x04,0xF0,0x63,0x4C,0xC9,0xE5,0xA5,0x20,0xC9,0xFF,0xF0,0x05,0xA0, +0x81,0x4C,0x1B,0xE6,0x20,0x9E,0xE6,0xB0,0xF8,0x20,0x3D,0xE6,0xB0,0xF3,0x20,0x89, +0xE6,0xA9,0x0B,0x85,0x17,0x20,0x3D,0xE6,0xA5,0x2C,0x85,0x26,0xA5,0x2D,0x85,0x27, +0x4C,0x1D,0xE6,0xA0,0x01,0x84,0x23,0x20,0x3D,0xE6,0xB0,0x03,0x20,0x89,0xE6,0xA9, +0xFF,0x85,0x20,0xA9,0xE4,0x85,0x27,0xA9,0xC0,0x85,0x26,0x4C,0x1D,0xE6,0xA5,0x20, +0xC9,0xFF,0xD0,0x05,0x20,0x9E,0xE6,0xB0,0xB8,0x20,0x3D,0xE6,0x20,0x89,0xE6,0xA6, +0x2E,0xBD,0x40,0x03,0x85,0x20,0x4C,0x1D,0xE6,0xA5,0x22,0x25,0x2A,0xD0,0x05,0xA0, +0x83,0x4C,0x1B,0xE6,0x20,0x3D,0xE6,0xB0,0xF8,0xA5,0x28,0x05,0x29,0xD0,0x08,0x20, +0x89,0xE6,0x85,0x2F,0x4C,0x1D,0xE6,0x20,0x89,0xE6,0x85,0x2F,0x30,0x35,0xA0,0x00, +0x91,0x24,0x20,0x70,0xE6,0xA5,0x22,0x29,0x02,0xD0,0x0C,0xA5,0x2F,0xC9,0x9B,0xD0, +0x06,0x20,0x63,0xE6,0x4C,0xC3,0xE5,0x20,0x63,0xE6,0xD0,0xDB,0xA5,0x22,0x29,0x02, +0xD0,0x11,0x20,0x89,0xE6,0x85,0x2F,0x30,0x0A,0xA5,0x2F,0xC9,0x9B,0xD0,0xF3,0xA9, +0x89,0x85,0x23,0x20,0x77,0xE6,0x4C,0x1D,0xE6,0xA5,0x22,0x25,0x2A,0xD0,0x05,0xA0, +0x87,0x4C,0x1B,0xE6,0x20,0x3D,0xE6,0xB0,0xF8,0xA5,0x28,0x05,0x29,0xD0,0x06,0xA5, +0x2F,0xE6,0x28,0xD0,0x06,0xA0,0x00,0xB1,0x24,0x85,0x2F,0x20,0x89,0xE6,0x30,0x25, +0x20,0x70,0xE6,0xA5,0x22,0x29,0x02,0xD0,0x0C,0xA5,0x2F,0xC9,0x9B,0xD0,0x06,0x20, +0x63,0xE6,0x4C,0x15,0xE6,0x20,0x63,0xE6,0xD0,0xDB,0xA5,0x22,0x29,0x02,0xD0,0x05, +0xA9,0x9B,0x20,0x89,0xE6,0x20,0x77,0xE6,0x4C,0x1D,0xE6,0x84,0x23,0xA4,0x2E,0xB9, +0x44,0x03,0x85,0x24,0xB9,0x45,0x03,0x85,0x25,0xA2,0x00,0xB5,0x20,0x99,0x40,0x03, +0xE8,0xC8,0xE0,0x0C,0x90,0xF5,0xA5,0x2F,0xA6,0x2E,0xA4,0x23,0x60,0xA4,0x20,0xC0, +0x22,0x90,0x04,0xA0,0x85,0xB0,0x1B,0xB9,0x1B,0x03,0x85,0x2C,0xB9,0x1C,0x03,0x85, +0x2D,0xA4,0x17,0xB9,0xC6,0xE6,0xA8,0xB1,0x2C,0xAA,0xC8,0xB1,0x2C,0x85,0x2D,0x86, +0x2C,0x18,0x60,0xC6,0x28,0xA5,0x28,0xC9,0xFF,0xD0,0x02,0xC6,0x29,0x05,0x29,0x60, +0xE6,0x24,0xD0,0x02,0xE6,0x25,0x60,0xA6,0x2E,0x38,0xBD,0x48,0x03,0xE5,0x28,0x85, +0x28,0xBD,0x49,0x03,0xE5,0x29,0x85,0x29,0x60,0xA0,0x92,0x20,0x93,0xE6,0x84,0x23, +0xC0,0x00,0x60,0xAA,0xA5,0x2D,0x48,0xA5,0x2C,0x48,0x8A,0xA6,0x2E,0x60,0xA0,0x00, +0xB1,0x24,0xF0,0x0C,0xA0,0x21,0xD9,0x1A,0x03,0xF0,0x0A,0x88,0x88,0x88,0x10,0xF6, +0xA0,0x82,0x38,0xB0,0x13,0x98,0x85,0x20,0x38,0xA0,0x01,0xB1,0x24,0xE9,0x30,0xC9, +0x0A,0x90,0x02,0xA9,0x01,0x85,0x21,0x18,0x60,0x00,0x04,0x04,0x04,0x04,0x06,0x06, +0x06,0x06,0x02,0x08,0x0A,0xA9,0x40,0x8D,0x0E,0xD4,0xA9,0x38,0x8D,0x02,0xD3,0x8D, +0x03,0xD3,0xA9,0x00,0x8D,0x00,0xD3,0xEA,0xEA,0xEA,0xA9,0x3C,0x8D,0x02,0xD3,0x8D, +0x03,0xD3,0x60,0x6C,0x16,0x02,0x80,0x40,0x04,0x02,0x01,0x08,0x10,0x20,0x36,0x08, +0x14,0x12,0x10,0x0E,0x0C,0x0A,0x48,0xAD,0x0E,0xD2,0x29,0x20,0xD0,0x0D,0xA9,0xDF, +0x8D,0x0E,0xD2,0xA5,0x10,0x8D,0x0E,0xD2,0x6C,0x0A,0x02,0x8A,0x48,0xA2,0x06,0xBD, +0xF6,0xE6,0xE0,0x05,0xD0,0x04,0x25,0x10,0xF0,0x05,0x2C,0x0E,0xD2,0xF0,0x06,0xCA, +0x10,0xED,0x4C,0x62,0xE7,0x49,0xFF,0x8D,0x0E,0xD2,0xA5,0x10,0x8D,0x0E,0xD2,0xBD, +0xFE,0xE6,0xAA,0xBD,0x00,0x02,0x8D,0x8C,0x02,0xBD,0x01,0x02,0x8D,0x8D,0x02,0x68, +0xAA,0x6C,0x8C,0x02,0xA9,0x00,0x85,0x11,0x8D,0xFF,0x02,0x8D,0xF0,0x02,0x85,0x4D, +0x68,0x40,0x68,0xAA,0x2C,0x02,0xD3,0x10,0x06,0xAD,0x00,0xD3,0x6C,0x02,0x02,0x2C, +0x03,0xD3,0x10,0x06,0xAD,0x01,0xD3,0x6C,0x04,0x02,0x68,0x8D,0x8C,0x02,0x68,0x48, +0x29,0x10,0xF0,0x07,0xAD,0x8C,0x02,0x48,0x6C,0x06,0x02,0xAD,0x8C,0x02,0x48,0x68, +0x40,0x2C,0x0F,0xD4,0x10,0x03,0x6C,0x00,0x02,0x48,0xAD,0x0F,0xD4,0x29,0x20,0xF0, +0x03,0x4C,0x74,0xE4,0x8A,0x48,0x98,0x48,0x8D,0x0F,0xD4,0x6C,0x22,0x02,0xE6,0x14, +0xD0,0x08,0xE6,0x4D,0xE6,0x13,0xD0,0x02,0xE6,0x12,0xA9,0xFE,0xA2,0x00,0xA4,0x4D, +0x10,0x06,0x85,0x4D,0xA6,0x13,0xA9,0xF6,0x85,0x4E,0x86,0x4F,0xA2,0x00,0x20,0xD0, +0xE8,0xD0,0x03,0x20,0xCA,0xE8,0xA5,0x42,0xD0,0x08,0xBA,0xBD,0x04,0x01,0x29,0x04, +0xF0,0x03,0x4C,0x05,0xE9,0xAD,0x0D,0xD4,0x8D,0x35,0x02,0xAD,0x0C,0xD4,0x8D,0x34, +0x02,0xAD,0x31,0x02,0x8D,0x03,0xD4,0xAD,0x30,0x02,0x8D,0x02,0xD4,0xAD,0x2F,0x02, +0x8D,0x00,0xD4,0xAD,0x6F,0x02,0x8D,0x1B,0xD0,0xA2,0x08,0x8E,0x1F,0xD0,0x58,0xBD, +0xC0,0x02,0x45,0x4F,0x25,0x4E,0x9D,0x12,0xD0,0xCA,0x10,0xF2,0xAD,0xF4,0x02,0x8D, +0x09,0xD4,0xAD,0xF3,0x02,0x8D,0x01,0xD4,0xA2,0x02,0x20,0xD0,0xE8,0xD0,0x03,0x20, +0xCD,0xE8,0xA2,0x02,0xE8,0xE8,0xBD,0x18,0x02,0x1D,0x19,0x02,0xF0,0x06,0x20,0xD0, +0xE8,0x9D,0x26,0x02,0xE0,0x08,0xD0,0xEC,0xAD,0x0F,0xD2,0x29,0x04,0xF0,0x08,0xAD, +0xF1,0x02,0xF0,0x03,0xCE,0xF1,0x02,0xAD,0x2B,0x02,0xF0,0x17,0xAD,0x0F,0xD2,0x29, +0x04,0xD0,0x60,0xCE,0x2B,0x02,0xD0,0x0B,0xA9,0x06,0x8D,0x2B,0x02,0xAD,0x09,0xD2, +0x8D,0xFC,0x02,0xA0,0x01,0xA2,0x03,0xB9,0x00,0xD3,0x4A,0x4A,0x4A,0x4A,0x9D,0x78, +0x02,0xCA,0xB9,0x00,0xD3,0x29,0x0F,0x9D,0x78,0x02,0xCA,0x88,0x10,0xE9,0xA2,0x03, +0xBD,0x10,0xD0,0x9D,0x84,0x02,0xBD,0x00,0xD2,0x9D,0x70,0x02,0xBD,0x04,0xD2,0x9D, +0x74,0x02,0xCA,0x10,0xEB,0x8D,0x0B,0xD2,0xA2,0x06,0xA0,0x03,0xB9,0x78,0x02,0x4A, +0x4A,0x4A,0x9D,0x7D,0x02,0xA9,0x00,0x2A,0x9D,0x7C,0x02,0xCA,0xCA,0x88,0x10,0xEC, +0x6C,0x24,0x02,0xA9,0x00,0x8D,0x2B,0x02,0xF0,0xA9,0x6C,0x26,0x02,0x6C,0x28,0x02, +0xBC,0x18,0x02,0xD0,0x08,0xBC,0x19,0x02,0xF0,0x10,0xDE,0x19,0x02,0xDE,0x18,0x02, +0xD0,0x08,0xBC,0x19,0x02,0xD0,0x03,0xA9,0x00,0x60,0xA9,0xFF,0x60,0x0A,0x8D,0x2D, +0x02,0x8A,0xA2,0x05,0x8D,0x0A,0xD4,0xCA,0xD0,0xFD,0xAE,0x2D,0x02,0x9D,0x17,0x02, +0x98,0x9D,0x16,0x02,0x60,0x68,0xA8,0x68,0xAA,0x68,0x40,0x66,0x66,0x7E,0x66,0x00, +0x00,0x7C,0x4C,0xED,0xE8,0x66,0x7C,0x00,0x00,0x3C,0x66,0x60,0x60,0x66,0x3C,0x00, +0x00,0x78,0x6C,0x66,0x66,0x6C,0x78,0x00,0x00,0x7E,0x60,0x7C,0x60,0x60,0x7E,0x00, +0x00,0x7E,0x60,0x7C,0x60,0x60,0x60,0x00,0x00,0x3E,0x60,0x60,0x6E,0x66,0x3E,0x00, +0x00,0x66,0x66,0x7E,0xA9,0x3C,0x8D,0x02,0xD3,0xA9,0x3C,0x8D,0x03,0xD3,0xA9,0x03, +0x8D,0x32,0x02,0x85,0x41,0x8D,0x0F,0xD2,0x60,0xBA,0x8E,0x18,0x03,0xA9,0x01,0x85, +0x42,0xAD,0x00,0x03,0xC9,0x60,0xD0,0x03,0x4C,0x80,0xEB,0xA9,0x00,0x8D,0x0F,0x03, +0xA9,0x01,0x85,0x37,0xA9,0x0D,0x85,0x36,0xA9,0x28,0x8D,0x04,0xD2,0xA9,0x00,0x8D, +0x06,0xD2,0x18,0xAD,0x00,0x03,0x6D,0x01,0x03,0x69,0xFF,0x8D,0x3A,0x02,0xAD,0x02, +0x03,0x8D,0x3B,0x02,0xAD,0x0A,0x03,0x8D,0x3C,0x02,0xAD,0x0B,0x03,0x8D,0x3D,0x02, +0x18,0xA9,0x3A,0x85,0x32,0x69,0x04,0x85,0x34,0xA9,0x02,0x85,0x33,0x85,0x35,0xA9, +0x34,0x8D,0x03,0xD3,0x20,0x8A,0xEC,0xAD,0x3F,0x02,0xD0,0x03,0x98,0xD0,0x07,0xC6, +0x36,0x10,0xB5,0x4C,0x06,0xEA,0xAD,0x03,0x03,0x10,0x0C,0xA9,0x0D,0x85,0x36,0x20, +0x6A,0xEB,0x20,0x8A,0xEC,0xF0,0xE8,0x20,0x75,0xEC,0xA9,0x00,0x8D,0x3F,0x02,0x20, +0x9B,0xEC,0xF0,0x12,0x2C,0x03,0x03,0x70,0x07,0xAD,0x3F,0x02,0xD0,0x18,0xF0,0x1D, +0x20,0x6A,0xEB,0x20,0xE0,0xEA,0xAD,0x3F,0x02,0xF0,0x05,0xAD,0x19,0x03,0x85,0x30, +0xA5,0x30,0xC9,0x01,0xF0,0x07,0xC6,0x37,0x30,0x03,0x4C,0x74,0xE9,0x20,0x5F,0xEC, +0xA9,0x00,0x85,0x42,0xA4,0x30,0x8C,0x03,0x03,0x60,0xA9,0x00,0x8D,0x3F,0x02,0x18, +0xA9,0x3E,0x85,0x32,0x69,0x01,0x85,0x34,0xA9,0x02,0x85,0x33,0x85,0x35,0xA9,0xFF, +0x85,0x3C,0x20,0xE0,0xEA,0xA0,0xFF,0xA5,0x30,0xC9,0x01,0xD0,0x19,0xAD,0x3E,0x02, +0xC9,0x41,0xF0,0x21,0xC9,0x43,0xF0,0x1D,0xC9,0x45,0xD0,0x06,0xA9,0x90,0x85,0x30, +0xD0,0x04,0xA9,0x8B,0x85,0x30,0xA5,0x30,0xC9,0x8A,0xF0,0x07,0xA9,0xFF,0x8D,0x3F, +0x02,0xD0,0x02,0xA0,0x00,0xA5,0x30,0x8D,0x19,0x03,0x60,0xA9,0x01,0x85,0x30,0x20, +0xF2,0xEB,0xA0,0x00,0x84,0x31,0x84,0x3B,0x84,0x3A,0xB1,0x32,0x8D,0x0D,0xD2,0x85, +0x31,0xA5,0x11,0xD0,0x03,0x4C,0xA0,0xED,0xA5,0x3A,0xF0,0xF5,0x20,0x5F,0xEC,0x60, +0x98,0x48,0xE6,0x32,0xD0,0x02,0xE6,0x33,0xA5,0x32,0xC5,0x34,0xA5,0x33,0xE5,0x35, +0x90,0x1C,0xA5,0x3B,0xD0,0x0B,0xA5,0x31,0x8D,0x0D,0xD2,0xA9,0xFF,0x85,0x3B,0xD0, +0x09,0xA5,0x10,0x09,0x08,0x85,0x10,0x8D,0x0E,0xD2,0x68,0xA8,0x68,0x40,0xA0,0x00, +0xB1,0x32,0x8D,0x0D,0xD2,0x18,0x65,0x31,0x69,0x00,0x85,0x31,0x4C,0xBA,0xEA,0xA5, +0x3B,0xF0,0x0B,0x85,0x3A,0xA5,0x10,0x29,0xF7,0x85,0x10,0x8D,0x0E,0xD2,0x68,0x40, +0xA9,0x00,0xAC,0x0F,0x03,0xD0,0x02,0x85,0x31,0x85,0x38,0x85,0x39,0xA9,0x01,0x85, +0x30,0x20,0x1B,0xEC,0xA9,0x3C,0x8D,0x03,0xD3,0xA5,0x11,0xD0,0x03,0x4C,0xA0,0xED, +0xAD,0x17,0x03,0xF0,0x05,0xA5,0x39,0xF0,0xF0,0x60,0xA9,0x8A,0x85,0x30,0x60,0x98, +0x48,0xAD,0x0F,0xD2,0x8D,0x0A,0xD2,0x30,0x04,0xA0,0x8C,0x84,0x30,0x29,0x20,0xD0, +0x04,0xA0,0x8E,0x84,0x30,0xA5,0x38,0xF0,0x13,0xAD,0x0D,0xD2,0xC5,0x31,0xF0,0x04, +0xA0,0x8F,0x84,0x30,0xA9,0xFF,0x85,0x39,0x68,0xA8,0x68,0x40,0xAD,0x0D,0xD2,0xA0, +0x00,0x91,0x32,0x18,0x65,0x31,0x69,0x00,0x85,0x31,0xE6,0x32,0xD0,0x02,0xE6,0x33, +0xA5,0x32,0xC5,0x34,0xA5,0x33,0xE5,0x35,0x90,0xDE,0xA5,0x3C,0xF0,0x06,0xA9,0x00, +0x85,0x3C,0xF0,0xD0,0xA9,0xFF,0x85,0x38,0xD0,0xCE,0x18,0xAD,0x04,0x03,0x85,0x32, +0x6D,0x08,0x03,0x85,0x34,0xAD,0x05,0x03,0x85,0x33,0x6D,0x09,0x03,0x85,0x35,0x60, +0xAD,0x03,0x03,0x10,0x2E,0xA9,0xCC,0x8D,0x04,0xD2,0xA9,0x05,0x8D,0x06,0xD2,0x20, +0xF2,0xEB,0xA0,0x0F,0xAD,0x0B,0x03,0x30,0x02,0xA0,0xB4,0xA2,0x00,0x20,0xB9,0xED, +0xA9,0x34,0x8D,0x02,0xD3,0xAD,0x17,0x03,0xD0,0xFB,0x20,0x6A,0xEB,0x20,0x6B,0xEA, +0x4C,0xDF,0xEB,0xA9,0xFF,0x8D,0x0F,0x03,0xA0,0x0A,0xAD,0x0B,0x03,0x30,0x02,0xA0, +0x78,0xA2,0x00,0x20,0xB9,0xED,0xA9,0x34,0x8D,0x02,0xD3,0xAD,0x17,0x03,0xD0,0xFB, +0x20,0x6A,0xEB,0x20,0x75,0xEC,0x20,0xB9,0xED,0x20,0x10,0xED,0x20,0xE0,0xEA,0xAD, +0x0B,0x03,0x30,0x05,0xA9,0x3C,0x8D,0x02,0xD3,0x4C,0x0D,0xEA,0xA9,0x00,0x8D,0x17, +0x03,0x60,0xA9,0x07,0x2D,0x32,0x02,0x09,0x20,0xAC,0x00,0x03,0xC0,0x60,0xD0,0x0C, +0x09,0x08,0xA0,0x07,0x8C,0x02,0xD2,0xA0,0x05,0x8C,0x00,0xD2,0x8D,0x32,0x02,0x8D, +0x0F,0xD2,0xA9,0xC7,0x25,0x10,0x09,0x10,0x4C,0x31,0xEC,0xA9,0x07,0x2D,0x32,0x02, +0x09,0x10,0x8D,0x32,0x02,0x8D,0x0F,0xD2,0x8D,0x0A,0xD2,0xA9,0xC7,0x25,0x10,0x09, +0x20,0x85,0x10,0x8D,0x0E,0xD2,0xA9,0x28,0x8D,0x08,0xD2,0xA2,0x06,0xA9,0xA8,0xA4, +0x41,0xD0,0x02,0xA9,0xA0,0x9D,0x01,0xD2,0xCA,0xCA,0x10,0xF9,0xA9,0xA0,0x8D,0x05, +0xD2,0xAC,0x00,0x03,0xC0,0x60,0xF0,0x06,0x8D,0x01,0xD2,0x8D,0x03,0xD2,0x60,0xEA, +0xA9,0xC7,0x25,0x10,0x85,0x10,0x8D,0x0E,0xD2,0xA2,0x06,0xA9,0x00,0x9D,0x01,0xD2, +0xCA,0xCA,0x10,0xF9,0x60,0xAD,0x06,0x03,0x6A,0x6A,0xA8,0x29,0x3F,0xAA,0x98,0x6A, +0x29,0xC0,0xA8,0x60,0x0F,0xEB,0x90,0xEA,0xCF,0xEA,0xA2,0x01,0xA0,0xFF,0x88,0xD0, +0xFD,0xCA,0xD0,0xF8,0x20,0x6B,0xEA,0xA0,0x02,0xA2,0x00,0x20,0xB9,0xED,0x20,0x1A, +0xEA,0x98,0x60,0x8D,0x10,0x03,0x8C,0x11,0x03,0x20,0x04,0xED,0x8D,0x10,0x03,0xAD, +0x0C,0x03,0x20,0x04,0xED,0x8D,0x0C,0x03,0xAD,0x10,0x03,0x38,0xED,0x0C,0x03,0x8D, +0x12,0x03,0xAD,0x11,0x03,0x38,0xED,0x0D,0x03,0xA8,0xA9,0x7D,0x18,0x69,0x83,0x88, +0x10,0xFA,0x18,0x6D,0x12,0x03,0xA8,0x4A,0x4A,0x4A,0x0A,0x38,0xE9,0x16,0xAA,0x98, +0x29,0x07,0xA8,0xA9,0xF5,0x18,0x69,0x0B,0x88,0x10,0xFA,0xA0,0x00,0x8C,0x0E,0x03, +0x38,0xE9,0x07,0x10,0x03,0xCE,0x0E,0x03,0x18,0x7D,0xD0,0xED,0xA8,0xAD,0x0E,0x03, +0x7D,0xD1,0xED,0x60,0xC9,0x7C,0x30,0x04,0x38,0xE9,0x7C,0x60,0x18,0x69,0x07,0x60, +0xA5,0x11,0xD0,0x03,0x4C,0xA0,0xED,0x78,0xAD,0x17,0x03,0xD0,0x02,0xF0,0x25,0xAD, +0x0F,0xD2,0x29,0x10,0xD0,0xEA,0x8D,0x16,0x03,0xAE,0x0B,0xD4,0xA4,0x14,0x8E,0x0C, +0x03,0x8C,0x0D,0x03,0xA2,0x01,0x8E,0x15,0x03,0xA0,0x0A,0xA5,0x11,0xF0,0x61,0xAD, +0x17,0x03,0xD0,0x04,0x58,0x4C,0x0A,0xEB,0xAD,0x0F,0xD2,0x29,0x10,0xCD,0x16,0x03, +0xF0,0xE9,0x8D,0x16,0x03,0x88,0xD0,0xE3,0xCE,0x15,0x03,0x30,0x12,0xAD,0x0B,0xD4, +0xA4,0x14,0x20,0xA3,0xEC,0x8C,0xEE,0x02,0x8D,0xEF,0x02,0xA0,0x09,0xD0,0xCC,0xAD, +0xEE,0x02,0x8D,0x04,0xD2,0xAD,0xEF,0x02,0x8D,0x06,0xD2,0xA9,0x00,0x8D,0x0F,0xD2, +0xAD,0x32,0x02,0x8D,0x0F,0xD2,0xA9,0x55,0x91,0x32,0xC8,0x91,0x32,0xA9,0xAA,0x85, +0x31,0x18,0xA5,0x32,0x69,0x02,0x85,0x32,0xA5,0x33,0x69,0x00,0x85,0x33,0x58,0x60, +0x20,0x5F,0xEC,0xA9,0x3C,0x8D,0x02,0xD3,0x8D,0x03,0xD3,0xA9,0x80,0x85,0x30,0xAE, +0x18,0x03,0x9A,0xC6,0x11,0x58,0x4C,0x0D,0xEA,0xA9,0xEC,0x8D,0x26,0x02,0xA9,0xEB, +0x8D,0x27,0x02,0xA9,0x01,0x78,0x20,0x5C,0xE4,0xA9,0x01,0x8D,0x17,0x03,0x58,0x60, +0xE8,0x03,0x43,0x04,0x9E,0x04,0xF9,0x04,0x54,0x05,0xAF,0x05,0x0A,0x06,0x65,0x06, +0xC0,0x06,0x1A,0x07,0x75,0x07,0xD0,0x07,0x24,0x85,0xA9,0xA0,0x8D,0x46,0x02,0x60, +0xA9,0x31,0x8D,0x00,0x03,0xAD,0x46,0x02,0xAE,0x02,0x03,0xE0,0x21,0xF0,0x02,0xA9, +0x07,0x8D,0x06,0x03,0xA2,0x40,0xA0,0x80,0xAD,0x02,0x03,0xC9,0x57,0xD0,0x02,0xA2, +0x80,0xC9,0x53,0xD0,0x0C,0xA9,0xEA,0x8D,0x04,0x03,0xA9,0x02,0x8D,0x05,0x03,0xA0, +0x04,0x8E,0x03,0x03,0x8C,0x08,0x03,0xA9,0x00,0x8D,0x09,0x03,0x20,0x59,0xE4,0x10, +0x01,0x60,0xAD,0x02,0x03,0xC9,0x53,0xD0,0x0A,0x20,0x6D,0xEE,0xA0,0x02,0xB1,0x15, +0x8D,0x46,0x02,0xAD,0x02,0x03,0xC9,0x21,0xD0,0x1F,0x20,0x6D,0xEE,0xA0,0xFE,0xC8, +0xC8,0xB1,0x15,0xC9,0xFF,0xD0,0xF8,0xC8,0xB1,0x15,0xC8,0xC9,0xFF,0xD0,0xF2,0x88, +0x88,0x8C,0x08,0x03,0xA9,0x00,0x8D,0x09,0x03,0xAC,0x03,0x03,0x60,0xAD,0x04,0x03, +0x85,0x15,0xAD,0x05,0x03,0x85,0x16,0x60,0xA9,0x1E,0x85,0x1C,0x60,0xEA,0x02,0xC0, +0x03,0xA9,0x04,0x85,0x1E,0xAE,0x7D,0xEE,0xAC,0x7E,0xEE,0xA9,0x53,0x8D,0x02,0x03, +0x8D,0x0A,0x03,0x20,0xE6,0xEE,0x20,0x59,0xE4,0x30,0x03,0x20,0x14,0xEF,0x60,0x20, +0x81,0xEE,0xA9,0x00,0x85,0x1D,0x60,0x85,0x1F,0x20,0x1A,0xEF,0xA6,0x1D,0xA5,0x1F, +0x9D,0xC0,0x03,0xE8,0xE4,0x1E,0xF0,0x13,0x86,0x1D,0xC9,0x9B,0xF0,0x03,0xA0,0x01, +0x60,0xA9,0x20,0x9D,0xC0,0x03,0xE8,0xE4,0x1E,0xD0,0xF8,0xA9,0x00,0x85,0x1D,0xAE, +0x7F,0xEE,0xAC,0x80,0xEE,0x20,0xE6,0xEE,0x20,0x59,0xE4,0x60,0x20,0x1A,0xEF,0xA6, +0x1D,0xD0,0xDE,0xA0,0x01,0x60,0x8E,0x04,0x03,0x8C,0x05,0x03,0xA9,0x40,0x8D,0x00, +0x03,0xA9,0x01,0x8D,0x01,0x03,0xA9,0x80,0xAE,0x02,0x03,0xE0,0x53,0xD0,0x02,0xA9, +0x40,0x8D,0x03,0x03,0xA5,0x1E,0x8D,0x08,0x03,0xA9,0x00,0x8D,0x09,0x03,0xA5,0x1C, +0x8D,0x06,0x03,0x60,0xAD,0xEC,0x02,0x85,0x1C,0x60,0xA0,0x57,0xA5,0x2B,0xC9,0x4E, +0xD0,0x04,0xA2,0x28,0xD0,0x0E,0xC9,0x44,0xD0,0x04,0xA2,0x14,0xD0,0x06,0xC9,0x53, +0xD0,0x0B,0xA2,0x1D,0x86,0x1E,0x8C,0x02,0x03,0x8D,0x0A,0x03,0x60,0xA9,0x4E,0xD0, +0xDD,0xA9,0xCC,0x8D,0xEE,0x02,0xA9,0x05,0x8D,0xEF,0x02,0x60,0xA5,0x2B,0x85,0x3E, +0xA5,0x2A,0x29,0x0C,0xC9,0x04,0xF0,0x05,0xC9,0x08,0xF0,0x39,0x60,0xA9,0x00,0x8D, +0x89,0x02,0x85,0x3F,0xA9,0x01,0x20,0x58,0xF0,0x30,0x24,0xA9,0x34,0x8D,0x02,0xD3, +0xA0,0x40,0xA2,0x02,0xA9,0x03,0x8D,0x2A,0x02,0x20,0x5C,0xE4,0xAD,0x2A,0x02,0xD0, +0xFB,0xA9,0x80,0x85,0x3D,0x8D,0x8A,0x02,0x4C,0xD3,0xEF,0xA0,0x80,0xC6,0x11,0xA9, +0x00,0x8D,0x89,0x02,0x60,0xA9,0x80,0x8D,0x89,0x02,0xA9,0x02,0x20,0x58,0xF0,0x30, +0xEE,0xA9,0xCC,0x8D,0x04,0xD2,0xA9,0x05,0x8D,0x06,0xD2,0xA9,0x60,0x8D,0x00,0x03, +0x20,0x68,0xE4,0xA9,0x34,0x8D,0x02,0xD3,0xA9,0x03,0xA2,0x04,0xA0,0x80,0x20,0x5C, +0xE4,0xA9,0xFF,0x8D,0x2A,0x02,0xA5,0x11,0xF0,0xC1,0xAD,0x2A,0x02,0xD0,0xF7,0xA9, +0x00,0x85,0x3D,0xA0,0x01,0x60,0xA5,0x3F,0x30,0x33,0xA6,0x3D,0xEC,0x8A,0x02,0xF0, +0x08,0xBD,0x00,0x04,0xE6,0x3D,0xA0,0x01,0x60,0xA9,0x52,0x20,0x95,0xF0,0x98,0x30, +0xF7,0xA9,0x00,0x85,0x3D,0xA2,0x80,0xAD,0xFF,0x03,0xC9,0xFE,0xF0,0x0D,0xC9,0xFA, +0xD0,0x03,0xAE,0x7F,0x04,0x8E,0x8A,0x02,0x4C,0xD6,0xEF,0xC6,0x3F,0xA0,0x88,0x60, +0xA6,0x3D,0x9D,0x00,0x04,0xE6,0x3D,0xA0,0x01,0xE0,0x7F,0xF0,0x01,0x60,0xA9,0xFC, +0x20,0xD2,0xF0,0xA9,0x00,0x85,0x3D,0x60,0xA0,0x01,0x60,0xAD,0x89,0x02,0x30,0x08, +0xA0,0x01,0xA9,0x3C,0x8D,0x02,0xD3,0x60,0xA6,0x3D,0xF0,0x0A,0x8E,0x7F,0x04,0xA9, +0xFA,0x20,0xD2,0xF0,0x30,0xEC,0xA2,0x7F,0xA9,0x00,0x9D,0x00,0x04,0xCA,0x10,0xFA, +0xA9,0xFE,0x20,0xD2,0xF0,0x4C,0x32,0xF0,0x85,0x40,0xA5,0x14,0x18,0x69,0x1E,0xAA, +0xA9,0xFF,0x8D,0x1F,0xD0,0xA9,0x00,0xA0,0xF0,0x88,0xD0,0xFD,0x8D,0x1F,0xD0,0xA0, +0xF0,0x88,0xD0,0xFD,0xE4,0x14,0xD0,0xE8,0xC6,0x40,0xF0,0x0B,0x8A,0x18,0x69,0x0A, +0xAA,0xE4,0x14,0xD0,0xFC,0xF0,0xD3,0x20,0x8C,0xF0,0x98,0x60,0xAD,0x25,0xE4,0x48, +0xAD,0x24,0xE4,0x48,0x60,0x8D,0x02,0x03,0xA9,0x00,0x8D,0x09,0x03,0xA9,0x83,0x8D, +0x08,0x03,0xA9,0x03,0x8D,0x05,0x03,0xA9,0xFD,0x8D,0x04,0x03,0xA9,0x60,0x8D,0x00, +0x03,0xA9,0x00,0x8D,0x01,0x03,0xA9,0x23,0x8D,0x06,0x03,0xAD,0x02,0x03,0xA0,0x40, +0xC9,0x52,0xF0,0x02,0xA0,0x80,0x8C,0x03,0x03,0xA5,0x3E,0x8D,0x0B,0x03,0x20,0x59, +0xE4,0x60,0x8D,0xFF,0x03,0xA9,0x55,0x8D,0xFD,0x03,0x8D,0xFE,0x03,0xA9,0x57,0x20, +0x95,0xF0,0x60,0x50,0x30,0xE4,0x43,0x40,0xE4,0x45,0x00,0xE4,0x53,0x10,0xE4,0x4B, +0x20,0xE4,0x7D,0x41,0x54,0x41,0x52,0x49,0x20,0x43,0x4F,0x4D,0x50,0x55,0x54,0x45, +0x52,0x20,0x2D,0x20,0x4D,0x45,0x4D,0x4F,0x20,0x50,0x41,0x44,0x9B,0x42,0x4F,0x4F, +0x54,0x20,0x45,0x52,0x52,0x4F,0x52,0x9B,0x45,0x3A,0x9B,0x78,0xAD,0x44,0x02,0xD0, +0x04,0xA9,0xFF,0xD0,0x03,0x78,0xA9,0x00,0x85,0x08,0xD8,0xA2,0xFF,0x9A,0x20,0x44, +0xF2,0x20,0x77,0xF2,0xA5,0x08,0xD0,0x28,0xA9,0x00,0xA0,0x08,0x85,0x04,0x85,0x05, +0x91,0x04,0xC8,0xC0,0x00,0xD0,0xF9,0xE6,0x05,0xA6,0x05,0xE4,0x06,0xD0,0xF1,0xAD, +0x72,0xE4,0x85,0x0A,0xAD,0x73,0xE4,0x85,0x0B,0xA9,0xFF,0x8D,0x44,0x02,0xD0,0x13, +0xA2,0x00,0x8A,0x9D,0x00,0x02,0x9D,0x00,0x03,0xCA,0xD0,0xF7,0xA2,0x10,0x95,0x00, +0xE8,0x10,0xFB,0xA9,0x02,0x85,0x52,0xA9,0x27,0x85,0x53,0xA2,0x25,0xBD,0x80,0xE4, +0x9D,0x00,0x02,0xCA,0x10,0xF7,0x20,0x8A,0xF2,0x58,0xA2,0x0E,0xBD,0xE3,0xF0,0x9D, +0x1A,0x03,0xCA,0x10,0xF7,0xA2,0x00,0x86,0x07,0x86,0x06,0xAE,0xE4,0x02,0xE0,0x90, +0xB0,0x0A,0xAD,0xFC,0x9F,0xD0,0x05,0xE6,0x07,0x20,0x3C,0xF2,0xAE,0xE4,0x02,0xE0, +0xB0,0xB0,0x0A,0xAE,0xFC,0xBF,0xD0,0x05,0xE6,0x06,0x20,0x39,0xF2,0xA9,0x03,0xA2, +0x00,0x9D,0x42,0x03,0xA9,0x18,0x9D,0x44,0x03,0xA9,0xF1,0x9D,0x45,0x03,0xA9,0x0C, +0x9D,0x4A,0x03,0x20,0x56,0xE4,0x10,0x03,0x4C,0x25,0xF1,0xE8,0xD0,0xFD,0xC8,0x10, +0xFA,0x20,0xB2,0xF3,0xA5,0x06,0x05,0x07,0xF0,0x12,0xA5,0x06,0xF0,0x03,0xAD,0xFD, +0xBF,0xA6,0x07,0xF0,0x03,0x0D,0xFD,0x9F,0x29,0x01,0xF0,0x03,0x20,0xCF,0xF2,0xA9, +0x00,0x8D,0x44,0x02,0xA5,0x06,0xF0,0x0A,0xAD,0xFD,0xBF,0x29,0x04,0xF0,0x03,0x6C, +0xFA,0xBF,0xA5,0x07,0xF0,0x0A,0xAD,0xFD,0x9F,0x29,0x04,0xF0,0xDF,0x6C,0xFA,0x9F, +0x6C,0x0A,0x00,0xA2,0xF2,0xA0,0xF0,0x20,0x85,0xF3,0x20,0x30,0xF2,0x4C,0x2A,0xF2, +0xAD,0x05,0xE4,0x48,0xAD,0x04,0xE4,0x48,0x60,0x6C,0xFE,0xBF,0x6C,0xFE,0x9F,0xC9, +0xD0,0xD0,0x1C,0x60,0xEE,0xFC,0xBF,0xAD,0xFC,0xBF,0xD0,0x08,0xAD,0xFD,0xBF,0x10, +0x03,0x6C,0xFE,0xBF,0xCE,0xFC,0xBF,0xA0,0x00,0x84,0x05,0xA9,0x10,0x85,0x06,0xB1, +0x05,0x49,0xFF,0x91,0x05,0xD1,0x05,0xD0,0xDA,0x49,0xFF,0x91,0x05,0xA5,0x06,0x18, +0x69,0x10,0x85,0x06,0x4C,0x3F,0xF2,0xA9,0x00,0xAA,0x9D,0x00,0xD0,0x9D,0x00,0xD4, +0x9D,0x00,0xD2,0xEA,0xEA,0xEA,0xE8,0xD0,0xF1,0x60,0xC6,0x11,0xA9,0x54,0x8D,0x36, +0x02,0xA9,0xE7,0x8D,0x37,0x02,0xA5,0x06,0x8D,0xE4,0x02,0x8D,0xE6,0x02,0xA9,0x00, +0x8D,0xE5,0x02,0xA9,0x00,0x8D,0xE7,0x02,0xA9,0x07,0x8D,0xE8,0x02,0x20,0x0C,0xE4, +0x20,0x1C,0xE4,0x20,0x2C,0xE4,0x20,0x3C,0xE4,0x20,0x4C,0xE4,0x20,0x6E,0xE4,0x20, +0x65,0xE4,0x20,0x6B,0xE4,0xAD,0x1F,0xD0,0x29,0x01,0xD0,0x02,0xE6,0x4A,0x60,0xA5, +0x08,0xF0,0x0A,0xA5,0x09,0x29,0x01,0xF0,0x03,0x20,0x7E,0xF3,0x60,0xA9,0x01,0x8D, +0x01,0x03,0xA9,0x53,0x8D,0x02,0x03,0x20,0x53,0xE4,0x10,0x01,0x60,0xA9,0x00,0x8D, +0x0B,0x03,0xA9,0x01,0x8D,0x0A,0x03,0xA9,0x00,0x8D,0x04,0x03,0xA9,0x04,0x8D,0x05, +0x03,0x20,0x9D,0xF3,0x10,0x08,0x20,0x81,0xF3,0xA5,0x4B,0xF0,0xE0,0x60,0xA2,0x03, +0xBD,0x00,0x04,0x9D,0x40,0x02,0xCA,0x10,0xF7,0xAD,0x42,0x02,0x85,0x04,0xAD,0x43, +0x02,0x85,0x05,0xAD,0x04,0x04,0x85,0x0C,0xAD,0x05,0x04,0x85,0x0D,0xA0,0x7F,0xB9, +0x00,0x04,0x91,0x04,0x88,0x10,0xF8,0x18,0xA5,0x04,0x69,0x80,0x85,0x04,0xA5,0x05, +0x69,0x00,0x85,0x05,0xCE,0x41,0x02,0xF0,0x11,0xEE,0x0A,0x03,0x20,0x9D,0xF3,0x10, +0xDC,0x20,0x81,0xF3,0xA5,0x4B,0xD0,0xAE,0xF0,0xF2,0xA5,0x4B,0xF0,0x03,0x20,0x9D, +0xF3,0x20,0x6C,0xF3,0xB0,0xA0,0x20,0x7E,0xF3,0xE6,0x09,0x60,0x18,0xAD,0x42,0x02, +0x69,0x06,0x85,0x04,0xAD,0x43,0x02,0x69,0x00,0x85,0x05,0x6C,0x04,0x00,0x6C,0x0C, +0x00,0xA2,0x0D,0xA0,0xF1,0x8A,0xA2,0x00,0x9D,0x44,0x03,0x98,0x9D,0x45,0x03,0xA9, +0x09,0x9D,0x42,0x03,0xA9,0xFF,0x9D,0x48,0x03,0x20,0x56,0xE4,0x60,0xA5,0x4B,0xF0, +0x03,0x4C,0x7A,0xE4,0xA9,0x52,0x8D,0x02,0x03,0xA9,0x01,0x8D,0x01,0x03,0x20,0x53, +0xE4,0x60,0xA5,0x08,0xF0,0x0A,0xA5,0x09,0x29,0x02,0xF0,0x03,0x20,0xE1,0xF3,0x60, +0xA5,0x4A,0xF0,0x1C,0xA9,0x80,0x85,0x3E,0xE6,0x4B,0x20,0x7D,0xE4,0x20,0x01,0xF3, +0xA9,0x00,0x85,0x4B,0x85,0x4A,0x06,0x09,0xA5,0x0C,0x85,0x02,0xA5,0x0D,0x85,0x03, +0x60,0x6C,0x02,0x00,0xA9,0xFF,0x8D,0xFC,0x02,0xAD,0xE6,0x02,0x29,0xF0,0x85,0x6A, +0xA9,0x40,0x8D,0xBE,0x02,0x60,0xA5,0x2B,0x29,0x0F,0xD0,0x08,0xA5,0x2A,0x29,0x0F, +0x85,0x2A,0xA9,0x00,0x85,0x57,0xA9,0xE0,0x8D,0xF4,0x02,0xA9,0x02,0x8D,0xF3,0x02, +0x8D,0x2F,0x02,0xA9,0x01,0x85,0x4C,0xA9,0xC0,0x05,0x10,0x85,0x10,0x8D,0x0E,0xD2, +0xA9,0x00,0x8D,0x93,0x02,0x85,0x64,0x85,0x7B,0x8D,0xF0,0x02,0xA0,0x0E,0xA9,0x01, +0x99,0xA3,0x02,0x88,0x10,0xFA,0xA2,0x04,0xBD,0xC1,0xFE,0x9D,0xC4,0x02,0xCA,0x10, +0xF7,0xA4,0x6A,0x88,0x8C,0x95,0x02,0xA9,0x60,0x8D,0x94,0x02,0xA6,0x57,0xBD,0x69, +0xFE,0xD0,0x04,0xA9,0x91,0x85,0x4C,0x85,0x51,0xA5,0x6A,0x85,0x65,0xBC,0x45,0xFE, +0xA9,0x28,0x20,0x21,0xF9,0x88,0xD0,0xF8,0xAD,0x6F,0x02,0x29,0x3F,0x85,0x67,0xA8, +0xE0,0x08,0x90,0x17,0x8A,0x6A,0x6A,0x6A,0x29,0xC0,0x05,0x67,0xA8,0xA9,0x10,0x20, +0x21,0xF9,0xE0,0x0B,0xD0,0x05,0xA9,0x06,0x8D,0xC8,0x02,0x8C,0x6F,0x02,0xA5,0x64, +0x85,0x58,0xA5,0x65,0x85,0x59,0xAD,0x0B,0xD4,0xC9,0x7A,0xD0,0xF9,0x20,0x1F,0xF9, +0xBD,0x75,0xFE,0xF0,0x06,0xA9,0xFF,0x85,0x64,0xC6,0x65,0xA5,0x64,0x85,0x68,0xA5, +0x65,0x85,0x69,0x20,0x13,0xF9,0xA9,0x41,0x20,0x17,0xF9,0x86,0x66,0xA9,0x18,0x8D, +0xBF,0x02,0xA5,0x57,0xC9,0x09,0xB0,0x2D,0xA5,0x2A,0x29,0x10,0xF0,0x27,0xA9,0x04, +0x8D,0xBF,0x02,0xA2,0x02,0xA9,0x02,0x20,0x17,0xF9,0xCA,0x10,0xF8,0xA4,0x6A,0x88, +0x98,0x20,0x17,0xF9,0xA9,0x60,0x20,0x17,0xF9,0xA9,0x42,0x20,0x17,0xF9,0x18,0xA9, +0x0C,0x65,0x66,0x85,0x66,0xA4,0x66,0xBE,0x51,0xFE,0xA5,0x51,0x20,0x17,0xF9,0xCA, +0xD0,0xF8,0xA5,0x57,0xC9,0x08,0x90,0x1C,0xA2,0x5D,0xA5,0x6A,0x38,0xE9,0x10,0x20, +0x17,0xF9,0xA9,0x00,0x20,0x17,0xF9,0xA9,0x4F,0x20,0x17,0xF9,0xA5,0x51,0x20,0x17, +0xF9,0xCA,0xD0,0xF8,0xA5,0x59,0x20,0x17,0xF9,0xA5,0x58,0x20,0x17,0xF9,0xA5,0x51, +0x09,0x40,0x20,0x17,0xF9,0xA9,0x70,0x20,0x17,0xF9,0xA9,0x70,0x20,0x17,0xF9,0xA5, +0x64,0x8D,0x30,0x02,0xA5,0x65,0x8D,0x31,0x02,0xA9,0x70,0x20,0x17,0xF9,0xA5,0x64, +0x8D,0xE5,0x02,0xA5,0x65,0x8D,0xE6,0x02,0xA5,0x68,0x85,0x64,0xA5,0x69,0x85,0x65, +0xAD,0x31,0x02,0x20,0x17,0xF9,0xAD,0x30,0x02,0x20,0x17,0xF9,0xA5,0x4C,0x10,0x07, +0x48,0x20,0xFC,0xF3,0x68,0xA8,0x60,0xA5,0x2A,0x29,0x20,0xD0,0x0B,0x20,0xB9,0xF7, +0x8D,0x90,0x02,0xA5,0x52,0x8D,0x91,0x02,0xA9,0x22,0x0D,0x2F,0x02,0x8D,0x2F,0x02, +0x4C,0x21,0xF6,0x20,0x96,0xFA,0x20,0xA2,0xF5,0x20,0x32,0xFB,0x20,0xD4,0xF9,0x4C, +0x34,0xF6,0x20,0x47,0xF9,0xB1,0x64,0x2D,0xA0,0x02,0x46,0x6F,0xB0,0x03,0x4A,0x10, +0xF9,0x8D,0xFA,0x02,0xC9,0x00,0x60,0x8D,0xFB,0x02,0x20,0x96,0xFA,0xAD,0xFB,0x02, +0xC9,0x7D,0xD0,0x06,0x20,0xB9,0xF7,0x4C,0x21,0xF6,0xAD,0xFB,0x02,0xC9,0x9B,0xD0, +0x06,0x20,0x30,0xFA,0x4C,0x21,0xF6,0x20,0xE0,0xF5,0x20,0xD8,0xF9,0x4C,0x21,0xF6, +0xAD,0xFF,0x02,0xD0,0xFB,0xA2,0x02,0xB5,0x54,0x95,0x5A,0xCA,0x10,0xF9,0xAD,0xFB, +0x02,0xA8,0x2A,0x2A,0x2A,0x2A,0x29,0x03,0xAA,0x98,0x29,0x9F,0x1D,0xF6,0xFE,0x8D, +0xFA,0x02,0x20,0x47,0xF9,0xAD,0xFA,0x02,0x46,0x6F,0xB0,0x04,0x0A,0x4C,0x08,0xF6, +0x2D,0xA0,0x02,0x85,0x50,0xAD,0xA0,0x02,0x49,0xFF,0x31,0x64,0x05,0x50,0x91,0x64, +0x60,0x20,0xA2,0xF5,0x85,0x5D,0xA6,0x57,0xD0,0x0A,0xAE,0xF0,0x02,0xD0,0x05,0x49, +0x80,0x20,0xFF,0xF5,0xA4,0x4C,0xA9,0x01,0x85,0x4C,0xAD,0xFB,0x02,0x60,0x20,0xB3, +0xFC,0x20,0x88,0xFA,0xA5,0x6B,0xD0,0x34,0xA5,0x54,0x85,0x6C,0xA5,0x55,0x85,0x6D, +0x20,0xE2,0xF6,0x84,0x4C,0xAD,0xFB,0x02,0xC9,0x9B,0xF0,0x12,0x20,0xAD,0xF6,0x20, +0xB3,0xFC,0xA5,0x63,0xC9,0x71,0xD0,0x03,0x20,0x0A,0xF9,0x4C,0x50,0xF6,0x20,0xE4, +0xFA,0x20,0x00,0xFC,0xA5,0x6C,0x85,0x54,0xA5,0x6D,0x85,0x55,0xA5,0x6B,0xF0,0x11, +0xC6,0x6B,0xF0,0x0D,0xA5,0x4C,0x30,0xF8,0x20,0x93,0xF5,0x8D,0xFB,0x02,0x4C,0xB3, +0xFC,0x20,0x30,0xFA,0xA9,0x9B,0x8D,0xFB,0x02,0x20,0x21,0xF6,0x84,0x4C,0x4C,0xB3, +0xFC,0x6C,0x64,0x00,0x8D,0xFB,0x02,0x20,0xB3,0xFC,0x20,0x88,0xFA,0x20,0xE4,0xFA, +0x20,0x8D,0xFC,0xF0,0x09,0x0E,0xA2,0x02,0x20,0xCA,0xF5,0x4C,0xB3,0xFC,0xAD,0xFE, +0x02,0x0D,0xA2,0x02,0xD0,0xEF,0x0E,0xA2,0x02,0xE8,0xBD,0xC6,0xFE,0x85,0x64,0xBD, +0xC7,0xFE,0x85,0x65,0x20,0xA1,0xF6,0x20,0x21,0xF6,0x4C,0xB3,0xFC,0xA9,0xFF,0x8D, +0xFC,0x02,0xA5,0x2A,0x4A,0xB0,0x62,0xA9,0x80,0xA6,0x11,0xF0,0x58,0xAD,0xFC,0x02, +0xC9,0xFF,0xF0,0xEE,0x85,0x7C,0xA2,0xFF,0x8E,0xFC,0x02,0x20,0xD8,0xFC,0xAA,0xE0, +0xC0,0x90,0x02,0xA2,0x03,0xBD,0xFE,0xFE,0x8D,0xFB,0x02,0xC9,0x80,0xF0,0xCE,0xC9, +0x81,0xD0,0x0B,0xAD,0xB6,0x02,0x49,0x80,0x8D,0xB6,0x02,0x4C,0xDD,0xF6,0xC9,0x82, +0xD0,0x07,0xA9,0x00,0x8D,0xBE,0x02,0xF0,0xB4,0xC9,0x83,0xD0,0x07,0xA9,0x40,0x8D, +0xBE,0x02,0xD0,0xA9,0xC9,0x84,0xD0,0x07,0xA9,0x80,0x8D,0xBE,0x02,0xD0,0x9E,0xC9, +0x85,0xD0,0x0A,0xA9,0x88,0x85,0x4C,0x85,0x11,0xA9,0x9B,0xD0,0x26,0xA5,0x7C,0xC9, +0x40,0xB0,0x15,0xAD,0xFB,0x02,0xC9,0x61,0x90,0x0E,0xC9,0x7B,0xB0,0x0A,0xAD,0xBE, +0x02,0xF0,0x05,0x05,0x7C,0x4C,0xFE,0xF6,0x20,0x8D,0xFC,0xF0,0x09,0xAD,0xFB,0x02, +0x4D,0xB6,0x02,0x8D,0xFB,0x02,0x4C,0x34,0xF6,0xA9,0x80,0x8D,0xA2,0x02,0x60,0xC6, +0x54,0x10,0x06,0xAE,0xBF,0x02,0xCA,0x86,0x54,0x4C,0x5C,0xFC,0xE6,0x54,0xA5,0x54, +0xCD,0xBF,0x02,0x90,0xF4,0xA2,0x00,0xF0,0xEE,0xC6,0x55,0xA5,0x55,0x30,0x04,0xC5, +0x52,0xB0,0x04,0xA5,0x53,0x85,0x55,0x4C,0xDD,0xFB,0xE6,0x55,0xA5,0x55,0xC5,0x53, +0x90,0xF5,0xF0,0xF3,0xA5,0x52,0x4C,0xA5,0xF7,0x20,0xF3,0xFC,0xA0,0x00,0x98,0x91, +0x64,0xC8,0xD0,0xFB,0xE6,0x65,0xA6,0x65,0xE4,0x6A,0x90,0xF3,0xA9,0xFF,0x99,0xB2, +0x02,0xC8,0xC0,0x04,0x90,0xF8,0x20,0xE4,0xFC,0x85,0x63,0x85,0x6D,0xA9,0x00,0x85, +0x54,0x85,0x56,0x85,0x6C,0x60,0xA5,0x63,0xC5,0x52,0xF0,0x21,0xA5,0x55,0xC5,0x52, +0xD0,0x03,0x20,0x73,0xFC,0x20,0x99,0xF7,0xA5,0x55,0xC5,0x53,0xD0,0x07,0xA5,0x54, +0xF0,0x03,0x20,0x7F,0xF7,0xA9,0x20,0x8D,0xFB,0x02,0x20,0xE0,0xF5,0x4C,0xDD,0xFB, +0x20,0xAA,0xF7,0xA5,0x55,0xC5,0x52,0xD0,0x0A,0x20,0x34,0xFA,0x20,0x20,0xFB,0x90, +0x02,0xB0,0x07,0xA5,0x63,0x20,0x25,0xFB,0x90,0xE6,0x4C,0xDD,0xFB,0xA5,0x63,0x4C, +0x06,0xFB,0xA5,0x63,0x4C,0x12,0xFB,0x20,0x9D,0xFC,0x20,0xA2,0xF5,0x85,0x7D,0xA9, +0x00,0x8D,0xBB,0x02,0x20,0xFF,0xF5,0xA5,0x63,0x48,0x20,0xDC,0xF9,0x68,0xC5,0x63, +0xB0,0x0C,0xA5,0x7D,0x48,0x20,0xA2,0xF5,0x85,0x7D,0x68,0x4C,0x44,0xF8,0x20,0xA8, +0xFC,0xCE,0xBB,0x02,0x30,0x04,0xC6,0x54,0xD0,0xF7,0x4C,0xDD,0xFB,0x20,0x9D,0xFC, +0x20,0x47,0xF9,0xA5,0x64,0x85,0x68,0xA5,0x65,0x85,0x69,0xA5,0x63,0x48,0x20,0xD4, +0xF9,0x68,0xC5,0x63,0xB0,0x10,0xA5,0x54,0xCD,0xBF,0x02,0xB0,0x09,0x20,0xA2,0xF5, +0xA0,0x00,0x91,0x68,0xF0,0xDA,0xA0,0x00,0x98,0x91,0x68,0x20,0x68,0xFC,0x20,0xA8, +0xFC,0x4C,0xDD,0xFB,0x38,0x20,0x7B,0xFB,0xA5,0x52,0x85,0x55,0x20,0x47,0xF9,0xA5, +0x64,0x85,0x68,0x18,0x69,0x28,0x85,0x66,0xA5,0x65,0x85,0x69,0x69,0x00,0x85,0x67, +0xA6,0x54,0xE0,0x17,0xF0,0x08,0x20,0x4E,0xFB,0xE8,0xE0,0x17,0xD0,0xF8,0x20,0x9B, +0xFB,0x4C,0xDD,0xFB,0x20,0xDD,0xFB,0xA4,0x51,0x84,0x54,0xA4,0x54,0x98,0x38,0x20, +0x23,0xFB,0x08,0x98,0x18,0x69,0x78,0x28,0x20,0x04,0xFB,0xC8,0xC0,0x18,0xD0,0xED, +0xAD,0xB4,0x02,0x09,0x01,0x8D,0xB4,0x02,0xA5,0x52,0x85,0x55,0x20,0x47,0xF9,0x20, +0xB7,0xFB,0x20,0x20,0xFB,0x90,0xD4,0x4C,0xDD,0xFB,0x60,0x20,0x20,0xD8,0xFC,0x88, +0x10,0xFA,0x60,0xA9,0x02,0xD0,0x0A,0xA4,0x4C,0x30,0x2B,0xA0,0x00,0x91,0x64,0xA9, +0x01,0x8D,0x9E,0x02,0xA5,0x4C,0x30,0x1E,0xA5,0x64,0x38,0xED,0x9E,0x02,0x85,0x64, +0xB0,0x02,0xC6,0x65,0xA5,0x0F,0xC5,0x65,0x90,0x0C,0xD0,0x06,0xA5,0x0E,0xC5,0x64, +0x90,0x04,0xA9,0x93,0x85,0x4C,0x60,0xA5,0x54,0x48,0xA5,0x55,0x48,0xA5,0x56,0x48, +0x20,0xF3,0xFC,0xA5,0x54,0x85,0x66,0xA9,0x00,0x85,0x67,0xA5,0x66,0x0A,0x26,0x67, +0x85,0x51,0xA4,0x67,0x8C,0x9F,0x02,0x0A,0x26,0x67,0x0A,0x26,0x67,0x18,0x65,0x51, +0x85,0x66,0xA5,0x67,0x6D,0x9F,0x02,0x85,0x67,0xA6,0x57,0xBC,0x81,0xFE,0x88,0x30, +0x07,0x06,0x66,0x26,0x67,0x4C,0x7E,0xF9,0xBC,0xA5,0xFE,0xA5,0x55,0xA2,0x07,0x88, +0x30,0x0A,0xCA,0x46,0x56,0x6A,0x6E,0xA1,0x02,0x4C,0x8F,0xF9,0xC8,0x18,0x65,0x66, +0x85,0x66,0x90,0x02,0xE6,0x67,0x38,0x6E,0xA1,0x02,0x18,0xCA,0x10,0xF9,0xAE,0xA1, +0x02,0xA5,0x66,0x18,0x65,0x64,0x85,0x64,0x85,0x5E,0xA5,0x67,0x65,0x65,0x85,0x65, +0x85,0x5F,0xBD,0xB1,0xFE,0x8D,0xA0,0x02,0x85,0x6F,0x68,0x85,0x56,0x68,0x85,0x55, +0x68,0x85,0x54,0x60,0xA9,0x00,0xF0,0x02,0xA9,0x9B,0x85,0x7D,0xE6,0x63,0xE6,0x55, +0xD0,0x02,0xE6,0x56,0xA5,0x55,0xA6,0x57,0xDD,0x8D,0xFE,0xF0,0x0B,0xE0,0x00,0xD0, +0x06,0xC5,0x53,0xF0,0x02,0xB0,0x01,0x60,0xE0,0x08,0x90,0x04,0xA5,0x56,0xF0,0xF7, +0xA5,0x57,0xD0,0x30,0xA5,0x63,0xC9,0x51,0x90,0x0A,0xA5,0x7D,0xF0,0x26,0x20,0x30, +0xFA,0x4C,0x77,0xFA,0x20,0x34,0xFA,0xA5,0x54,0x18,0x69,0x78,0x20,0x25,0xFB,0x90, +0x08,0xA5,0x7D,0xF0,0x04,0x18,0x20,0xA5,0xF8,0x4C,0xDD,0xFB,0xA9,0x00,0xF0,0x02, +0xA9,0x9B,0x85,0x7D,0x20,0xE4,0xFC,0xA9,0x00,0x85,0x56,0xE6,0x54,0xA6,0x57,0xA0, +0x18,0x24,0x7B,0x10,0x05,0xA0,0x04,0x98,0xD0,0x03,0xBD,0x99,0xFE,0xC5,0x54,0xD0, +0x26,0x8C,0x9D,0x02,0x8A,0xD0,0x20,0xA5,0x7D,0xF0,0x1C,0xC9,0x9B,0x38,0xF0,0x01, +0x18,0x20,0xAC,0xFB,0xEE,0xBB,0x02,0xC6,0x6C,0xCE,0x9D,0x02,0xAD,0xB2,0x02,0x38, +0x10,0xEF,0xAD,0x9D,0x02,0x85,0x54,0x4C,0xDD,0xFB,0x38,0xB5,0x70,0xE5,0x74,0x95, +0x70,0xB5,0x71,0xE5,0x75,0x95,0x71,0x60,0xAD,0xBF,0x02,0xC9,0x04,0xF0,0x07,0xA5, +0x57,0xF0,0x03,0x20,0xFC,0xF3,0xA9,0x27,0xC5,0x53,0xB0,0x02,0x85,0x53,0xA6,0x57, +0xBD,0x99,0xFE,0xC5,0x54,0x90,0x2A,0xF0,0x28,0xE0,0x08,0xD0,0x0A,0xA5,0x56,0xF0, +0x13,0xC9,0x01,0xD0,0x1C,0xF0,0x04,0xA5,0x56,0xD0,0x16,0xBD,0x8D,0xFE,0xC5,0x55, +0x90,0x0F,0xF0,0x0D,0xA9,0x01,0x85,0x4C,0xA9,0x80,0xA6,0x11,0x85,0x11,0xF0,0x06, +0x60,0x20,0xD6,0xF7,0xA9,0x8D,0x85,0x4C,0x68,0x68,0xA5,0x7B,0x10,0x03,0x20,0xB9, +0xFC,0x4C,0x34,0xF6,0xA0,0x00,0xA5,0x5D,0x91,0x5E,0x60,0x48,0x29,0x07,0xAA,0xBD, +0xB9,0xFE,0x85,0x6E,0x68,0x4A,0x4A,0x4A,0xAA,0x60,0x2E,0xB4,0x02,0x2E,0xB3,0x02, +0x2E,0xB2,0x02,0x60,0x90,0x0C,0x20,0xEB,0xFA,0xBD,0xA3,0x02,0x05,0x6E,0x9D,0xA3, +0x02,0x60,0x20,0xEB,0xFA,0xA5,0x6E,0x49,0xFF,0x3D,0xA3,0x02,0x9D,0xA3,0x02,0x60, +0xA5,0x54,0x18,0x69,0x78,0x20,0xEB,0xFA,0x18,0xBD,0xA3,0x02,0x25,0x6E,0xF0,0x01, +0x38,0x60,0xAD,0xFA,0x02,0xA4,0x57,0xC0,0x03,0xB0,0x0F,0x2A,0x2A,0x2A,0x2A,0x29, +0x03,0xAA,0xAD,0xFA,0x02,0x29,0x9F,0x1D,0xFA,0xFE,0x8D,0xFB,0x02,0x60,0xA9,0x02, +0x85,0x65,0xA9,0x47,0x85,0x64,0xA0,0x27,0xB1,0x66,0x85,0x50,0xB1,0x68,0x91,0x66, +0xA5,0x50,0x91,0x64,0x88,0x10,0xF1,0xA5,0x65,0x85,0x69,0xA5,0x64,0x85,0x68,0x18, +0xA5,0x66,0x69,0x28,0x85,0x66,0x90,0x02,0xE6,0x67,0x60,0x08,0xA0,0x17,0x98,0x20, +0x22,0xFB,0x08,0x98,0x18,0x69,0x79,0x28,0x20,0x04,0xFB,0x88,0x30,0x04,0xC4,0x54, +0xB0,0xEC,0xA5,0x54,0x18,0x69,0x78,0x28,0x4C,0x04,0xFB,0xA5,0x52,0x85,0x55,0x20, +0x47,0xF9,0xA0,0x27,0xA9,0x00,0x91,0x64,0x88,0x10,0xFB,0x60,0x20,0xFA,0xFA,0xA5, +0x58,0x85,0x64,0xA5,0x59,0x85,0x65,0xA0,0x28,0xB1,0x64,0xA6,0x6A,0xCA,0xE4,0x65, +0xD0,0x08,0xA2,0xD7,0xE4,0x64,0xB0,0x02,0xA9,0x00,0xA0,0x00,0x91,0x64,0xE6,0x64, +0xD0,0xE5,0xE6,0x65,0xA5,0x65,0xC5,0x6A,0xD0,0xDD,0x4C,0xDD,0xFB,0xA9,0x00,0x85, +0x63,0xA5,0x54,0x85,0x51,0xA5,0x51,0x20,0x22,0xFB,0xB0,0x0C,0xA5,0x63,0x18,0x69, +0x28,0x85,0x63,0xC6,0x51,0x4C,0xE5,0xFB,0x18,0xA5,0x63,0x65,0x55,0x85,0x63,0x60, +0x20,0x9D,0xFC,0xA5,0x63,0x48,0xA5,0x6C,0x85,0x54,0xA5,0x6D,0x85,0x55,0xA9,0x01, +0x85,0x6B,0xA2,0x17,0xA5,0x7B,0x10,0x02,0xA2,0x03,0xE4,0x54,0xD0,0x0B,0xA5,0x55, +0xC5,0x53,0xD0,0x05,0xE6,0x6B,0x4C,0x39,0xFC,0x20,0xD4,0xF9,0xE6,0x6B,0xA5,0x63, +0xC5,0x52,0xD0,0xDE,0xC6,0x54,0x20,0x99,0xF7,0x20,0xA2,0xF5,0xD0,0x17,0xC6,0x6B, +0xA5,0x63,0xC5,0x52,0xF0,0x0F,0x20,0x99,0xF7,0xA5,0x55,0xC5,0x53,0xD0,0x02,0xC6, +0x54,0xA5,0x6B,0xD0,0xE4,0x68,0x85,0x63,0x20,0xA8,0xFC,0x60,0x20,0xDD,0xFB,0xA5, +0x51,0x85,0x6C,0xA5,0x52,0x85,0x6D,0x60,0xA5,0x63,0xC5,0x52,0xD0,0x02,0xC6,0x54, +0x20,0xDD,0xFB,0xA5,0x63,0xC5,0x52,0xF0,0x13,0x20,0x47,0xF9,0xA5,0x53,0x38,0xE5, +0x52,0xA8,0xB1,0x64,0xD0,0x06,0x88,0x10,0xF9,0x4C,0xDB,0xF8,0x60,0xA2,0x2D,0xBD, +0xC6,0xFE,0xCD,0xFB,0x02,0xF0,0x05,0xCA,0xCA,0xCA,0x10,0xF3,0x60,0xA2,0x02,0xB5, +0x54,0x9D,0xB8,0x02,0xCA,0x10,0xF8,0x60,0xA2,0x02,0xBD,0xB8,0x02,0x95,0x54,0xCA, +0x10,0xF8,0x60,0x20,0xB9,0xFC,0x4C,0x34,0xF6,0xAD,0xBF,0x02,0xC9,0x18,0xF0,0x17, +0xA2,0x0B,0xB5,0x54,0x48,0xBD,0x90,0x02,0x95,0x54,0x68,0x9D,0x90,0x02,0xCA,0x10, +0xF1,0xA5,0x7B,0x49,0xFF,0x85,0x7B,0x60,0xA2,0x7F,0x8E,0x1F,0xD0,0x8E,0x0A,0xD4, +0xCA,0x10,0xF7,0x60,0xA9,0x00,0xA6,0x7B,0xD0,0x04,0xA6,0x57,0xD0,0x02,0xA5,0x52, +0x85,0x55,0x60,0xA5,0x58,0x85,0x64,0xA5,0x59,0x85,0x65,0x60,0xA2,0x00,0xA5,0x22, +0xC9,0x11,0xF0,0x08,0xC9,0x12,0xF0,0x03,0xA0,0x84,0x60,0xE8,0x8E,0xB7,0x02,0xA5, +0x54,0x85,0x60,0xA5,0x55,0x85,0x61,0xA5,0x56,0x85,0x62,0xA9,0x01,0x85,0x79,0x85, +0x7A,0x38,0xA5,0x60,0xE5,0x5A,0x85,0x76,0xB0,0x0D,0xA9,0xFF,0x85,0x79,0xA5,0x76, +0x49,0xFF,0x18,0x69,0x01,0x85,0x76,0x38,0xA5,0x61,0xE5,0x5B,0x85,0x77,0xA5,0x62, +0xE5,0x5C,0x85,0x78,0xB0,0x16,0xA9,0xFF,0x85,0x7A,0xA5,0x77,0x49,0xFF,0x85,0x77, +0xA5,0x78,0x49,0xFF,0x85,0x78,0xE6,0x77,0xD0,0x02,0xE6,0x78,0xA2,0x02,0xA0,0x00, +0x84,0x73,0x98,0x95,0x70,0xB5,0x5A,0x95,0x54,0xCA,0x10,0xF6,0xA5,0x77,0xE8,0xA8, +0xA5,0x78,0x85,0x7F,0x85,0x75,0xD0,0x0B,0xA5,0x77,0xC5,0x76,0xB0,0x05,0xA5,0x76, +0xA2,0x02,0xA8,0x98,0x85,0x7E,0x85,0x74,0x48,0xA5,0x75,0x4A,0x68,0x6A,0x95,0x70, +0xA5,0x7E,0x05,0x7F,0xD0,0x03,0x4C,0x42,0xFE,0x18,0xA5,0x70,0x65,0x76,0x85,0x70, +0x90,0x02,0xE6,0x71,0xA5,0x71,0xC5,0x75,0x90,0x14,0xD0,0x06,0xA5,0x70,0xC5,0x74, +0x90,0x0C,0x18,0xA5,0x54,0x65,0x79,0x85,0x54,0xA2,0x00,0x20,0x7A,0xFA,0x18,0xA5, +0x72,0x65,0x77,0x85,0x72,0xA5,0x73,0x65,0x78,0x85,0x73,0xC5,0x75,0x90,0x27,0xD0, +0x06,0xA5,0x72,0xC5,0x74,0x90,0x1F,0x24,0x7A,0x10,0x10,0xC6,0x55,0xA5,0x55,0xC9, +0xFF,0xD0,0x0E,0xA5,0x56,0xF0,0x0A,0xC6,0x56,0x10,0x06,0xE6,0x55,0xD0,0x02,0xE6, +0x56,0xA2,0x02,0x20,0x7A,0xFA,0x20,0x96,0xFA,0x20,0xE0,0xF5,0xAD,0xB7,0x02,0xF0, +0x2F,0x20,0x9D,0xFC,0xAD,0xFB,0x02,0x8D,0xBC,0x02,0xA5,0x54,0x48,0x20,0xDC,0xF9, +0x68,0x85,0x54,0x20,0x96,0xFA,0x20,0xA2,0xF5,0xD0,0x0C,0xAD,0xFD,0x02,0x8D,0xFB, +0x02,0x20,0xE0,0xF5,0x4C,0x0A,0xFE,0xAD,0xBC,0x02,0x8D,0xFB,0x02,0x20,0xA8,0xFC, +0x38,0xA5,0x7E,0xE9,0x01,0x85,0x7E,0xA5,0x7F,0xE9,0x00,0x85,0x7F,0x30,0x03,0x4C, +0x90,0xFD,0x4C,0x34,0xF6,0x18,0x10,0x0A,0x0A,0x10,0x1C,0x34,0x64,0xC4,0xC4,0xC4, +0xC4,0x17,0x17,0x0B,0x17,0x2F,0x2F,0x5F,0x5F,0x61,0x61,0x61,0x61,0x13,0x13,0x09, +0x13,0x27,0x27,0x4F,0x4F,0x41,0x41,0x41,0x41,0x02,0x06,0x07,0x08,0x09,0x0A,0x0B, +0x0D,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01, +0x01,0x02,0x01,0x01,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x28,0x14,0x14, +0x28,0x50,0x50,0xA0,0xA0,0x40,0x50,0x50,0x50,0x18,0x18,0x0C,0x18,0x30,0x30,0x60, +0x60,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x02,0x03,0x02,0x03,0x02,0x03,0x01,0x01, +0x01,0x00,0xFF,0xF0,0x0F,0xC0,0x30,0x0C,0x03,0x80,0x40,0x20,0x10,0x08,0x04,0x02, +0x01,0x28,0xCA,0x94,0x46,0x00,0x1B,0x79,0xF7,0x1C,0x7F,0xF7,0x1D,0x8C,0xF7,0x1E, +0x99,0xF7,0x1F,0xAA,0xF7,0x7D,0xB9,0xF7,0x7E,0xE6,0xF7,0x7F,0x10,0xF8,0x9B,0x30, +0xFA,0x9C,0xD4,0xF8,0x9D,0xA4,0xF8,0x9E,0x32,0xF8,0x9F,0x2D,0xF8,0xFD,0x0A,0xF9, +0xFE,0x6D,0xF8,0xFF,0x37,0xF8,0x40,0x00,0x20,0x60,0x20,0x40,0x00,0x60,0x6C,0x6A, +0x3B,0x80,0x80,0x6B,0x2B,0x2A,0x6F,0x80,0x70,0x75,0x9B,0x69,0x2D,0x3D,0x76,0x80, +0x63,0x80,0x80,0x62,0x78,0x7A,0x34,0x80,0x33,0x36,0x1B,0x35,0x32,0x31,0x2C,0x20, +0x2E,0x6E,0x80,0x6D,0x2F,0x81,0x72,0x80,0x65,0x79,0x7F,0x74,0x77,0x71,0x39,0x80, +0x30,0x37,0x7E,0x38,0x3C,0x3E,0x66,0x68,0x64,0x80,0x82,0x67,0x73,0x61,0x4C,0x4A, +0x3A,0x80,0x80,0x4B,0x5C,0x5E,0x4F,0x80,0x50,0x55,0x9B,0x49,0x5F,0x7C,0x56,0x80, +0x43,0x80,0x80,0x42,0x58,0x5A,0x24,0x80,0x23,0x26,0x1B,0x25,0x22,0x21,0x5B,0x20, +0x5D,0x4E,0x80,0x4D,0x3F,0x81,0x52,0x80,0x45,0x59,0x9F,0x54,0x57,0x51,0x28,0x80, +0x29,0x27,0x9C,0x40,0x7D,0x9D,0x46,0x48,0x44,0x80,0x83,0x47,0x53,0x41,0x0C,0x0A, +0x7B,0x80,0x80,0x0B,0x1E,0x1F,0x0F,0x80,0x10,0x15,0x9B,0x09,0x1C,0x1D,0x16,0x80, +0x03,0x80,0x80,0x02,0x18,0x1A,0x80,0x80,0x85,0x80,0x1B,0x80,0xFD,0x80,0x00,0x20, +0x60,0x0E,0x80,0x0D,0x80,0x81,0x12,0x80,0x05,0x19,0x9E,0x14,0x17,0x11,0x80,0x80, +0x80,0x80,0xFE,0x80,0x7D,0xFF,0x06,0x08,0x04,0x80,0x84,0x07,0x13,0x01,0xAD,0x09, +0xD2,0xCD,0xF2,0x02,0xD0,0x05,0xAD,0xF1,0x02,0xD0,0x20,0xAD,0x09,0xD2,0xC9,0x9F, +0xD0,0x0A,0xAD,0xFF,0x02,0x49,0xFF,0x8D,0xFF,0x02,0xB0,0x0F,0x8D,0xFC,0x02,0x8D, +0xF2,0x02,0xA9,0x03,0x8D,0xF1,0x02,0xA9,0x00,0x85,0x4D,0xA9,0x30,0x8D,0x2B,0x02, +0x68,0x40,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE6,0x91,0xE7,0x25,0xF1,0xF3,0xE6, +}; diff --git a/MCUME_pico/pico800/romatarixl.h b/MCUME_pico/pico800/romatarixl.h new file mode 100644 index 0000000..2582bee --- /dev/null +++ b/MCUME_pico/pico800/romatarixl.h @@ -0,0 +1,1026 @@ +const UBYTE romos[16384] = { +0x11,0x92,0x10,0x05,0x83,0x00,0x42,0x42,0x00,0x00,0x01,0x02,0xA9,0x40,0x8D,0x0E, +0xD4,0xAD,0x13,0xD0,0x8D,0xFA,0x03,0x60,0x2C,0x0F,0xD4,0x10,0x03,0x6C,0x00,0x02, +0xD8,0x48,0x8A,0x48,0x98,0x48,0x8D,0x0F,0xD4,0x6C,0x22,0x02,0xD8,0x6C,0x16,0x02, +0x48,0xAD,0x0E,0xD2,0x29,0x20,0xD0,0x0D,0xA9,0xDF,0x8D,0x0E,0xD2,0xA5,0x10,0x8D, +0x0E,0xD2,0x6C,0x0A,0x02,0x8A,0x48,0xAD,0xFF,0xD1,0x2D,0x49,0x02,0xF0,0x03,0x6C, +0x38,0x02,0xA2,0x06,0xBD,0xCF,0xC0,0xE0,0x05,0xD0,0x04,0x25,0x10,0xF0,0x05,0x2C, +0x0E,0xD2,0xF0,0x06,0xCA,0x10,0xED,0x4C,0xA0,0xC0,0x49,0xFF,0x8D,0x0E,0xD2,0xA5, +0x10,0x8D,0x0E,0xD2,0xE0,0x00,0xD0,0x05,0xAD,0x6D,0x02,0xD0,0x23,0xBD,0xD7,0xC0, +0xAA,0xBD,0x00,0x02,0x8D,0x8C,0x02,0xBD,0x01,0x02,0x8D,0x8D,0x02,0x68,0xAA,0x6C, +0x8C,0x02,0xA9,0x00,0x85,0x11,0x8D,0xFF,0x02,0x8D,0xF0,0x02,0x85,0x4D,0x68,0x40, +0x68,0xAA,0x2C,0x02,0xD3,0x10,0x06,0xAD,0x00,0xD3,0x6C,0x02,0x02,0x2C,0x03,0xD3, +0x10,0x06,0xAD,0x01,0xD3,0x6C,0x04,0x02,0x68,0x8D,0x8C,0x02,0x68,0x48,0x29,0x10, +0xF0,0x07,0xAD,0x8C,0x02,0x48,0x6C,0x06,0x02,0xAD,0x8C,0x02,0x48,0x68,0x40,0x80, +0x40,0x04,0x02,0x01,0x08,0x10,0x20,0x36,0x08,0x14,0x12,0x10,0x0E,0x0C,0x0A,0x4C, +0xDF,0xC0,0xE6,0x14,0xD0,0x08,0xE6,0x4D,0xE6,0x13,0xD0,0x02,0xE6,0x12,0xA9,0xFE, +0xA2,0x00,0xA4,0x4D,0x10,0x06,0x85,0x4D,0xA6,0x13,0xA9,0xF6,0x85,0x4E,0x86,0x4F, +0xAD,0xC5,0x02,0x45,0x4F,0x25,0x4E,0x8D,0x17,0xD0,0xA2,0x00,0x20,0x55,0xC2,0xD0, +0x03,0x20,0x4F,0xC2,0xA5,0x42,0xD0,0x08,0xBA,0xBD,0x04,0x01,0x29,0x04,0xF0,0x03, +0x4C,0x8A,0xC2,0xAD,0x13,0xD0,0xCD,0xFA,0x03,0xD0,0xB4,0xAD,0x0D,0xD4,0x8D,0x35, +0x02,0xAD,0x0C,0xD4,0x8D,0x34,0x02,0xAD,0x31,0x02,0x8D,0x03,0xD4,0xAD,0x30,0x02, +0x8D,0x02,0xD4,0xAD,0x2F,0x02,0x8D,0x00,0xD4,0xAD,0x6F,0x02,0x8D,0x1B,0xD0,0xAD, +0x6C,0x02,0xF0,0x0E,0xCE,0x6C,0x02,0xA9,0x08,0x38,0xED,0x6C,0x02,0x29,0x07,0x8D, +0x05,0xD4,0xA2,0x08,0x8E,0x1F,0xD0,0x58,0xBD,0xC0,0x02,0x45,0x4F,0x25,0x4E,0x9D, +0x12,0xD0,0xCA,0x10,0xF2,0xAD,0xF4,0x02,0x8D,0x09,0xD4,0xAD,0xF3,0x02,0x8D,0x01, +0xD4,0xA2,0x02,0x20,0x55,0xC2,0xD0,0x03,0x20,0x52,0xC2,0xA2,0x02,0xE8,0xE8,0xBD, +0x18,0x02,0x1D,0x19,0x02,0xF0,0x06,0x20,0x55,0xC2,0x9D,0x26,0x02,0xE0,0x08,0xD0, +0xEC,0xAD,0x0F,0xD2,0x29,0x04,0xF0,0x08,0xAD,0xF1,0x02,0xF0,0x03,0xCE,0xF1,0x02, +0xAD,0x2B,0x02,0xF0,0x3E,0xAD,0x0F,0xD2,0x29,0x04,0xD0,0x32,0xCE,0x2B,0x02,0xD0, +0x32,0xAD,0x6D,0x02,0xD0,0x2D,0xAD,0xDA,0x02,0x8D,0x2B,0x02,0xAD,0x09,0xD2,0xC9, +0x9F,0xF0,0x20,0xC9,0x83,0xF0,0x1C,0xC9,0x84,0xF0,0x18,0xC9,0x94,0xF0,0x14,0x29, +0x3F,0xC9,0x11,0xF0,0x0E,0xAD,0x09,0xD2,0x8D,0xFC,0x02,0x4C,0xF3,0xC1,0xA9,0x00, +0x8D,0x2B,0x02,0xAD,0x00,0xD3,0x4A,0x4A,0x4A,0x4A,0x8D,0x79,0x02,0x8D,0x7B,0x02, +0xAD,0x00,0xD3,0x29,0x0F,0x8D,0x78,0x02,0x8D,0x7A,0x02,0xAD,0x10,0xD0,0x8D,0x84, +0x02,0x8D,0x86,0x02,0xAD,0x11,0xD0,0x8D,0x85,0x02,0x8D,0x87,0x02,0xA2,0x03,0xBD, +0x00,0xD2,0x9D,0x70,0x02,0x9D,0x74,0x02,0xCA,0x10,0xF4,0x8D,0x0B,0xD2,0xA2,0x02, +0xA0,0x01,0xB9,0x78,0x02,0x4A,0x4A,0x4A,0x9D,0x7D,0x02,0x9D,0x81,0x02,0xA9,0x00, +0x2A,0x9D,0x7C,0x02,0x9D,0x80,0x02,0xCA,0xCA,0x88,0x10,0xE6,0x6C,0x24,0x02,0x6C, +0x26,0x02,0x6C,0x28,0x02,0xBC,0x18,0x02,0xD0,0x08,0xBC,0x19,0x02,0xF0,0x10,0xDE, +0x19,0x02,0xDE,0x18,0x02,0xD0,0x08,0xBC,0x19,0x02,0xD0,0x03,0xA9,0x00,0x60,0xA9, +0xFF,0x60,0x0A,0x8D,0x2D,0x02,0x8A,0xA2,0x05,0x8D,0x0A,0xD4,0xCA,0xD0,0xFD,0xAE, +0x2D,0x02,0x9D,0x17,0x02,0x98,0x9D,0x16,0x02,0x60,0x68,0xA8,0x68,0xAA,0x68,0x40, +0x78,0xAD,0x13,0xD0,0xCD,0xFA,0x03,0xD0,0x2F,0x6A,0x90,0x05,0x20,0xC9,0xC4,0xD0, +0x27,0xAD,0x44,0x02,0xD0,0x22,0xA9,0xFF,0xD0,0x20,0x78,0xA2,0x8C,0x88,0xD0,0xFD, +0xCA,0xD0,0xFA,0xAD,0x3D,0x03,0xC9,0x5C,0xD0,0x0E,0xAD,0x3E,0x03,0xC9,0x93,0xD0, +0x07,0xAD,0x3F,0x03,0xC9,0x25,0xF0,0xC8,0xA9,0x00,0x85,0x08,0x78,0xD8,0xA2,0xFF, +0x9A,0x20,0x71,0xC4,0xA9,0x01,0x85,0x01,0xA5,0x08,0xD0,0x52,0xA9,0x00,0xA0,0x08, +0x85,0x04,0x85,0x05,0xA9,0xFF,0x91,0x04,0xD1,0x04,0xF0,0x02,0x46,0x01,0xA9,0x00, +0x91,0x04,0xD1,0x04,0xF0,0x02,0x46,0x01,0xC8,0xD0,0xE9,0xE6,0x05,0xA6,0x05,0xE4, +0x06,0xD0,0xE1,0xA9,0x23,0x85,0x0A,0xA9,0xF2,0x85,0x0B,0xAD,0x01,0xD3,0x29,0x7F, +0x8D,0x01,0xD3,0x20,0x73,0xFF,0xB0,0x05,0x20,0x92,0xFF,0x90,0x02,0x46,0x01,0xAD, +0x01,0xD3,0x09,0x80,0x8D,0x01,0xD3,0xA9,0xFF,0x8D,0x44,0x02,0xD0,0x22,0xA2,0x00, +0xAD,0xEC,0x03,0xF0,0x07,0x8E,0x0E,0x00,0x8E,0x0F,0x00,0x8A,0x9D,0x00,0x02,0xE0, +0xED,0xB0,0x03,0x9D,0x00,0x03,0xCA,0xD0,0xF3,0xA2,0x10,0x95,0x00,0xE8,0x10,0xFB, +0xA2,0x00,0xAD,0x01,0xD3,0x29,0x02,0xF0,0x01,0xE8,0x8E,0xF8,0x03,0xA9,0x5C,0x8D, +0x3D,0x03,0xA9,0x93,0x8D,0x3E,0x03,0xA9,0x25,0x8D,0x3F,0x03,0xA9,0x02,0x85,0x52, +0xA9,0x27,0x85,0x53,0xAD,0x14,0xD0,0x29,0x0E,0xD0,0x08,0xA9,0x05,0xA2,0x01,0xA0, +0x28,0xD0,0x06,0xA9,0x06,0xA2,0x00,0xA0,0x30,0x8D,0xDA,0x02,0x86,0x62,0x8C,0xD9, +0x02,0xA2,0x25,0xBD,0x4B,0xC4,0x9D,0x00,0x02,0xCA,0x10,0xF7,0xA2,0x0E,0xBD,0x2E, +0xC4,0x9D,0x1A,0x03,0xCA,0x10,0xF7,0x20,0x35,0xC5,0x58,0xA5,0x01,0xD0,0x15,0xAD, +0x01,0xD3,0x29,0x7F,0x8D,0x01,0xD3,0xA9,0x02,0x8D,0xF3,0x02,0xA9,0xE0,0x8D,0xF4, +0x02,0x4C,0x03,0x50,0xA2,0x00,0x86,0x06,0xAE,0xE4,0x02,0xE0,0xB0,0xB0,0x0D,0xAE, +0xFC,0xBF,0xD0,0x08,0xE6,0x06,0x20,0xC9,0xC4,0x20,0x29,0xC4,0xA9,0x03,0xA2,0x00, +0x9D,0x42,0x03,0xA9,0x48,0x9D,0x44,0x03,0xA9,0xC4,0x9D,0x45,0x03,0xA9,0x0C,0x9D, +0x4A,0x03,0x20,0x56,0xE4,0x10,0x03,0x4C,0xAA,0xC2,0xE8,0xD0,0xFD,0xC8,0x10,0xFA, +0x20,0x6E,0xC6,0xA5,0x06,0xF0,0x06,0xAD,0xFD,0xBF,0x6A,0x90,0x06,0x20,0x8B,0xC5, +0x20,0x39,0xE7,0xA9,0x00,0x8D,0x44,0x02,0xA5,0x06,0xF0,0x0A,0xAD,0xFD,0xBF,0x29, +0x04,0xF0,0x03,0x6C,0xFA,0xBF,0x6C,0x0A,0x00,0x6C,0xFE,0xBF,0x18,0x60,0x50,0x30, +0xE4,0x43,0x40,0xE4,0x45,0x00,0xE4,0x53,0x10,0xE4,0x4B,0x20,0xE4,0x42,0x4F,0x4F, +0x54,0x20,0x45,0x52,0x52,0x4F,0x52,0x9B,0x45,0x3A,0x9B,0xCE,0xC0,0xCD,0xC0,0xCD, +0xC0,0xCD,0xC0,0x19,0xFC,0x2C,0xEB,0xAD,0xEA,0xEC,0xEA,0xCD,0xC0,0xCD,0xC0,0xCD, +0xC0,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE2,0xC0,0x8A, +0xC2,0xAD,0x13,0xD0,0x6A,0x90,0x0D,0xAD,0xFC,0xBF,0xD0,0x08,0xAD,0xFD,0xBF,0x10, +0x03,0x6C,0xFE,0xBF,0x20,0xDA,0xC4,0xAD,0x01,0xD3,0x09,0x02,0x8D,0x01,0xD3,0xA5, +0x08,0xF0,0x07,0xAD,0xF8,0x03,0xD0,0x11,0xF0,0x07,0xAD,0x1F,0xD0,0x29,0x04,0xF0, +0x08,0xAD,0x01,0xD3,0x29,0xFD,0x8D,0x01,0xD3,0xA9,0x00,0xA8,0x85,0x05,0xA9,0x28, +0x85,0x06,0xB1,0x05,0x49,0xFF,0x91,0x05,0xD1,0x05,0xD0,0x0C,0x49,0xFF,0x91,0x05, +0xD1,0x05,0xD0,0x04,0xE6,0x06,0xD0,0xEA,0x60,0xA9,0x00,0xAA,0x18,0x7D,0xF0,0xBF, +0xE8,0xD0,0xFA,0xCD,0xEB,0x03,0x8D,0xEB,0x03,0x60,0xA9,0x00,0xAA,0x8D,0x03,0xD3, +0x9D,0x00,0xD0,0x9D,0x00,0xD4,0x9D,0x00,0xD2,0xE0,0x01,0xF0,0x03,0x9D,0x00,0xD3, +0xE8,0xD0,0xED,0xA9,0x3C,0x8D,0x03,0xD3,0xA9,0xFF,0x8D,0x01,0xD3,0xA9,0x38,0x8D, +0x02,0xD3,0x8D,0x03,0xD3,0xA9,0x00,0x8D,0x00,0xD3,0xA9,0xFF,0x8D,0x01,0xD3,0xA9, +0x3C,0x8D,0x02,0xD3,0x8D,0x03,0xD3,0xAD,0x01,0xD3,0xAD,0x00,0xD3,0xA9,0x22,0x8D, +0x0F,0xD2,0xA9,0xA0,0x8D,0x05,0xD2,0x8D,0x07,0xD2,0xA9,0x28,0x8D,0x08,0xD2,0xA9, +0xFF,0x8D,0x0D,0xD2,0x60,0xC6,0x11,0xA9,0x92,0x8D,0x36,0x02,0xA9,0xC0,0x8D,0x37, +0x02,0xA5,0x06,0x8D,0xE4,0x02,0x8D,0xE6,0x02,0xA9,0x00,0x8D,0xE5,0x02,0xA9,0x00, +0x8D,0xE7,0x02,0xA9,0x07,0x8D,0xE8,0x02,0x20,0x0C,0xE4,0x20,0x1C,0xE4,0x20,0x2C, +0xE4,0x20,0x3C,0xE4,0x20,0x4C,0xE4,0x20,0x6E,0xE4,0x20,0x65,0xE4,0x20,0x6B,0xE4, +0x20,0x50,0xE4,0xA9,0x6E,0x8D,0x38,0x02,0xA9,0xC9,0x8D,0x39,0x02,0x20,0x9B,0xE4, +0xAD,0x1F,0xD0,0x29,0x01,0x49,0x01,0x8D,0xE9,0x03,0x60,0xA5,0x08,0xF0,0x09,0xA5, +0x09,0x29,0x01,0xF0,0x33,0x4C,0x3B,0xC6,0xA9,0x01,0x8D,0x01,0x03,0xA9,0x53,0x8D, +0x02,0x03,0x20,0x53,0xE4,0x30,0x21,0xA9,0x00,0x8D,0x0B,0x03,0xA9,0x01,0x8D,0x0A, +0x03,0xA9,0x00,0x8D,0x04,0x03,0xA9,0x04,0x8D,0x05,0x03,0x20,0x59,0xC6,0x10,0x09, +0x20,0x3E,0xC6,0xAD,0xEA,0x03,0xF0,0xDF,0x60,0xA2,0x03,0xBD,0x00,0x04,0x9D,0x40, +0x02,0xCA,0x10,0xF7,0xAD,0x42,0x02,0x85,0x04,0xAD,0x43,0x02,0x85,0x05,0xAD,0x04, +0x04,0x85,0x0C,0xAD,0x05,0x04,0x85,0x0D,0xA0,0x7F,0xB9,0x00,0x04,0x91,0x04,0x88, +0x10,0xF8,0x18,0xA5,0x04,0x69,0x80,0x85,0x04,0xA5,0x05,0x69,0x00,0x85,0x05,0xCE, +0x41,0x02,0xF0,0x12,0xEE,0x0A,0x03,0x20,0x59,0xC6,0x10,0xDC,0x20,0x3E,0xC6,0xAD, +0xEA,0x03,0xD0,0xAC,0xF0,0xF1,0xAD,0xEA,0x03,0xF0,0x03,0x20,0x59,0xC6,0x20,0x29, +0xC6,0xB0,0x9D,0x20,0x3B,0xC6,0xE6,0x09,0x60,0x18,0xAD,0x42,0x02,0x69,0x06,0x85, +0x04,0xAD,0x43,0x02,0x69,0x00,0x85,0x05,0x6C,0x04,0x00,0x6C,0x0C,0x00,0xA2,0x3D, +0xA0,0xC4,0x8A,0xA2,0x00,0x9D,0x44,0x03,0x98,0x9D,0x45,0x03,0xA9,0x09,0x9D,0x42, +0x03,0xA9,0xFF,0x9D,0x48,0x03,0x4C,0x56,0xE4,0xAD,0xEA,0x03,0xF0,0x03,0x4C,0x7A, +0xE4,0xA9,0x52,0x8D,0x02,0x03,0xA9,0x01,0x8D,0x01,0x03,0x4C,0x53,0xE4,0xA5,0x08, +0xF0,0x09,0xA5,0x09,0x29,0x02,0xF0,0x27,0x4C,0xA0,0xC6,0xAD,0xE9,0x03,0xF0,0x1F, +0xA9,0x80,0x85,0x3E,0xEE,0xEA,0x03,0x20,0x7D,0xE4,0x20,0xBB,0xC5,0xA9,0x00,0x8D, +0xEA,0x03,0x8D,0xE9,0x03,0x06,0x09,0xA5,0x0C,0x85,0x02,0xA5,0x0D,0x85,0x03,0x60, +0x6C,0x02,0x00,0xA9,0xA0,0x8D,0x46,0x02,0xA9,0x80,0x8D,0xD5,0x02,0xA9,0x00,0x8D, +0xD6,0x02,0x60,0xA9,0x31,0x8D,0x00,0x03,0xAD,0x46,0x02,0xAE,0x02,0x03,0xE0,0x21, +0xF0,0x02,0xA9,0x07,0x8D,0x06,0x03,0xA2,0x40,0xAD,0x02,0x03,0xC9,0x50,0xF0,0x04, +0xC9,0x57,0xD0,0x02,0xA2,0x80,0xC9,0x53,0xD0,0x10,0xA9,0xEA,0x8D,0x04,0x03,0xA9, +0x02,0x8D,0x05,0x03,0xA0,0x04,0xA9,0x00,0xF0,0x06,0xAC,0xD5,0x02,0xAD,0xD6,0x02, +0x8E,0x03,0x03,0x8C,0x08,0x03,0x8D,0x09,0x03,0x20,0x59,0xE4,0x10,0x01,0x60,0xAD, +0x02,0x03,0xC9,0x53,0xD0,0x0A,0x20,0x3A,0xC7,0xA0,0x02,0xB1,0x15,0x8D,0x46,0x02, +0xAD,0x02,0x03,0xC9,0x21,0xD0,0x1F,0x20,0x3A,0xC7,0xA0,0xFE,0xC8,0xC8,0xB1,0x15, +0xC9,0xFF,0xD0,0xF8,0xC8,0xB1,0x15,0xC8,0xC9,0xFF,0xD0,0xF2,0x88,0x88,0x8C,0x08, +0x03,0xA9,0x00,0x8D,0x09,0x03,0xAC,0x03,0x03,0x60,0xAD,0x04,0x03,0x85,0x15,0xAD, +0x05,0x03,0x85,0x16,0x60,0xA2,0x05,0xA9,0x00,0x9D,0xC9,0x02,0xCA,0x10,0xF8,0xA9, +0x00,0x8D,0x33,0x02,0x20,0xCF,0xC7,0xA0,0x9C,0xB0,0x39,0x8D,0x88,0x02,0x20,0xCF, +0xC7,0xA0,0x9C,0xB0,0x2F,0x8D,0x45,0x02,0xAD,0x88,0x02,0xC9,0x0B,0xF0,0x26,0x2A, +0xAA,0xBD,0xE4,0xC8,0x8D,0xC9,0x02,0xBD,0xE5,0xC8,0x8D,0xCA,0x02,0xAD,0x45,0x02, +0xCD,0x33,0x02,0xF0,0xCA,0x20,0xCF,0xC7,0xA0,0x9C,0xB0,0x08,0x20,0xD2,0xC7,0xEE, +0x33,0x02,0xD0,0xE9,0x60,0x20,0xCF,0xC7,0xA0,0x9C,0xB0,0x2C,0x8D,0xC9,0x02,0x20, +0xCF,0xC7,0xA0,0x9C,0xB0,0x22,0x8D,0xCA,0x02,0xAD,0x45,0x02,0xC9,0x01,0xF0,0x16, +0x90,0x17,0x18,0xAD,0xC9,0x02,0x6D,0xD1,0x02,0xA8,0xAD,0xCA,0x02,0x6D,0xD2,0x02, +0x8C,0xC9,0x02,0x8D,0xCA,0x02,0xA0,0x01,0x60,0xA0,0x00,0xA9,0x00,0xF0,0xF1,0x6C, +0xCF,0x02,0x6C,0xC9,0x02,0xAC,0x33,0x02,0xC0,0x01,0xF0,0x0A,0xB0,0x73,0x8D,0x4A, +0x02,0x8D,0x8E,0x02,0x90,0x6A,0x8D,0x4B,0x02,0x8D,0x8F,0x02,0xA2,0x00,0xAD,0x88, +0x02,0xF0,0x06,0xC9,0x0A,0xF0,0x15,0xA2,0x02,0x18,0xAD,0x4A,0x02,0x7D,0xD1,0x02, +0x8D,0x8E,0x02,0xAD,0x4B,0x02,0x7D,0xD2,0x02,0x8D,0x8F,0x02,0x18,0xAD,0x8E,0x02, +0x6D,0x45,0x02,0x48,0xA9,0x00,0x6D,0x8F,0x02,0xA8,0x68,0x38,0xE9,0x02,0xB0,0x01, +0x88,0x48,0x98,0xDD,0xCC,0x02,0x68,0x90,0x10,0xD0,0x05,0xDD,0xCB,0x02,0x90,0x09, +0x9D,0xCB,0x02,0x48,0x98,0x9D,0xCC,0x02,0x68,0xAE,0x88,0x02,0xE0,0x01,0xF0,0x10, +0xCC,0xE6,0x02,0x90,0x0B,0xD0,0x05,0xCD,0xE5,0x02,0x90,0x04,0x68,0x68,0xA0,0x9D, +0x60,0x38,0x48,0xAD,0x33,0x02,0xE9,0x02,0x18,0x6D,0x8E,0x02,0x85,0x36,0xA9,0x00, +0x6D,0x8F,0x02,0x85,0x37,0x68,0xA0,0x00,0x91,0x36,0x4C,0x50,0xC8,0x18,0x6D,0x8E, +0x02,0x85,0x36,0xA9,0x00,0x6D,0x8F,0x02,0x85,0x37,0xA0,0x00,0xB1,0x36,0x18,0x6D, +0xD1,0x02,0x91,0x36,0xE6,0x36,0xD0,0x02,0xE6,0x37,0xB1,0x36,0x6D,0xD2,0x02,0x91, +0x36,0x60,0xA2,0x00,0xAC,0x88,0x02,0xC0,0x04,0x90,0x02,0xA2,0x02,0x18,0x6D,0x8E, +0x02,0x85,0x36,0xA9,0x00,0x6D,0x8F,0x02,0x85,0x37,0xA0,0x00,0xB1,0x36,0x18,0x7D, +0xD1,0x02,0x91,0x36,0x60,0x48,0xAD,0x33,0x02,0x6A,0x68,0xB0,0x15,0x18,0x6D,0x8E, +0x02,0x85,0x36,0xA9,0x00,0x6D,0x8F,0x02,0x85,0x37,0xA0,0x00,0xB1,0x36,0x8D,0x88, +0x02,0x60,0x18,0x6D,0xD1,0x02,0xA9,0x00,0x6D,0xD2,0x02,0x6D,0x88,0x02,0xA0,0x00, +0x91,0x36,0xF0,0xED,0xD5,0xC7,0xD5,0xC7,0x92,0xC8,0x92,0xC8,0x92,0xC8,0x92,0xC8, +0x6D,0xC8,0x6D,0xC8,0xB5,0xC8,0xB5,0xC8,0xD5,0xC7,0x95,0xC7,0xA9,0xFF,0x8D,0x44, +0x02,0xAD,0x01,0xD3,0x29,0x7F,0x8D,0x01,0xD3,0x4C,0x83,0xE4,0xA9,0x01,0x8D,0x48, +0x02,0xAD,0x48,0x02,0x8D,0xFF,0xD1,0xAD,0x03,0xD8,0xC9,0x80,0xD0,0x0A,0xAD,0x0B, +0xD8,0xC9,0x91,0xD0,0x03,0x20,0x19,0xD8,0x0E,0x48,0x02,0xD0,0xE4,0xA9,0x00,0x8D, +0xFF,0xD1,0x60,0xA9,0x01,0x8D,0x42,0x00,0xAD,0x01,0x03,0x48,0xAD,0x47,0x02,0xF0, +0x1A,0xA2,0x08,0x20,0xAF,0xC9,0xF0,0x13,0x8A,0x48,0x20,0x05,0xD8,0x68,0xAA,0x90, +0xF2,0xA9,0x00,0x8D,0x48,0x02,0x8D,0xFF,0xD1,0xF0,0x03,0x20,0x71,0xE9,0x68,0x8D, +0x01,0x03,0xA9,0x00,0x8D,0x42,0x00,0x8C,0x03,0x03,0xAC,0x03,0x03,0x60,0xA2,0x08, +0x6A,0xB0,0x03,0xCA,0xD0,0xFA,0xAD,0x48,0x02,0x48,0xBD,0x20,0xCA,0x8D,0x48,0x02, +0x8D,0xFF,0xD1,0x20,0x08,0xD8,0x68,0x8D,0x48,0x02,0x8D,0xFF,0xD1,0x68,0xAA,0x68, +0x40,0xA0,0x01,0x4C,0xDC,0xC9,0xA0,0x03,0x4C,0xDC,0xC9,0xA0,0x05,0x4C,0xDC,0xC9, +0xA0,0x07,0x4C,0xDC,0xC9,0xA0,0x09,0x4C,0xDC,0xC9,0xA0,0x0B,0x4C,0xDC,0xC9,0xCA, +0x10,0x09,0xA9,0x00,0x8D,0x48,0x02,0x8D,0xFF,0xD1,0x60,0xAD,0x47,0x02,0x3D,0x21, +0xCA,0xF0,0xEC,0x8D,0x48,0x02,0x8D,0xFF,0xD1,0x60,0xB9,0x0D,0xD8,0x48,0x88,0xB9, +0x0D,0xD8,0x48,0xAD,0x4C,0x02,0xAE,0x4D,0x02,0xA0,0x92,0x60,0x8D,0x4C,0x02,0x8E, +0x4D,0x02,0xAD,0x42,0x00,0x48,0xA9,0x01,0x8D,0x42,0x00,0xA2,0x08,0x20,0xAF,0xC9, +0xF0,0x11,0x8A,0x48,0x98,0x48,0x20,0xCA,0xC9,0x90,0x20,0x8D,0x4C,0x02,0x68,0x68, +0x4C,0x05,0xCA,0xA0,0x82,0xA9,0x00,0x8D,0x48,0x02,0x8D,0xFF,0xD1,0x68,0x8D,0x42, +0x00,0xAD,0x4C,0x02,0x8C,0x4D,0x02,0xAC,0x4D,0x02,0x60,0x68,0xA8,0x68,0xAA,0x90, +0xCC,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0xAE,0x2E,0x00,0xBD,0x4D,0x03,0x20, +0xDE,0xE7,0xB0,0x20,0x18,0x20,0x9E,0xE8,0xB0,0x1A,0xAE,0x2E,0x00,0xBD,0x4C,0x03, +0x20,0x16,0xE7,0xB0,0x0F,0xAE,0x2E,0x00,0x9D,0x40,0x03,0x85,0x20,0xA9,0x03,0x85, +0x17,0x4C,0x5C,0xE5,0x4C,0x10,0xE5,0x00,0x13,0x16,0xD1,0xE4,0xE4,0xE8,0x29,0xEB, +0xEE,0x00,0x00,0x2D,0x25,0x2D,0x2F,0x32,0x39,0x00,0x34,0x25,0x33,0x34,0x00,0x00, +0x00,0x32,0x2F,0x2D,0x32,0x21,0x2D,0x00,0x00,0x2B,0x25,0x39,0x22,0x2F,0x21,0x32, +0x24,0x00,0x34,0x25,0x33,0x34,0x00,0x00,0x00,0xB2,0x91,0x00,0x92,0x00,0x93,0x00, +0x94,0x00,0xA8,0x00,0xA1,0x00,0xA2,0x00,0x00,0x00,0x5B,0x00,0x11,0x00,0x12,0x00, +0x13,0x00,0x14,0x00,0x15,0x00,0x16,0x00,0x17,0x00,0x18,0x00,0x19,0x00,0x10,0x00, +0x1C,0x00,0x1E,0x00,0xA2,0x80,0xB3,0x00,0x00,0x00,0xFF,0xFF,0x00,0x31,0x00,0x37, +0x00,0x25,0x00,0x32,0x00,0x34,0x00,0x39,0x00,0x35,0x00,0x29,0x00,0x2F,0x00,0x30, +0x00,0x0D,0x00,0x1D,0x00,0xB2,0xB4,0x00,0x00,0x00,0x80,0xDC,0x80,0x00,0x21,0x00, +0x33,0x00,0x24,0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x2A,0x00,0x2B,0x00,0x2C,0x00, +0x1B,0x00,0x0B,0x00,0x0A,0x00,0xA3,0x00,0x00,0x00,0x80,0xB3,0xA8,0x80,0x00,0x3A, +0x00,0x38,0x00,0x23,0x00,0x36,0x00,0x22,0x00,0x2E,0x00,0x2D,0x00,0x0C,0x00,0x0E, +0x00,0x0F,0x00,0x80,0xB3,0xA8,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, +0xB3,0x80,0xB0,0x80,0xA1,0x80,0xA3,0x80,0xA5,0x80,0x80,0x80,0xA2,0x80,0xA1,0x80, +0xB2,0x80,0x00,0x33,0x00,0x30,0x00,0x21,0x00,0x23,0x00,0x25,0x00,0x00,0x00,0x22, +0x00,0x21,0x00,0x32,0x00,0x00,0x33,0x28,0x00,0x22,0x00,0x33,0x00,0x5C,0x00,0x36, +0x2F,0x29,0x23,0x25,0x00,0x03,0xA0,0x11,0xA9,0x00,0x18,0x71,0x4A,0x88,0x10,0xFB, +0x69,0x00,0x49,0xFF,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,0x18,0x18,0x18,0x18,0x00,0x18,0x00, +0x00,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x66,0xFF,0x66,0x66,0xFF,0x66,0x00, +0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00,0x00,0x66,0x6C,0x18,0x30,0x66,0x46,0x00, +0x1C,0x36,0x1C,0x38,0x6F,0x66,0x3B,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00, +0x00,0x0E,0x1C,0x18,0x18,0x1C,0x0E,0x00,0x00,0x70,0x38,0x18,0x18,0x38,0x70,0x00, +0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x40,0x00, +0x00,0x3C,0x66,0x6E,0x76,0x66,0x3C,0x00,0x00,0x18,0x38,0x18,0x18,0x18,0x7E,0x00, +0x00,0x3C,0x66,0x0C,0x18,0x30,0x7E,0x00,0x00,0x7E,0x0C,0x18,0x0C,0x66,0x3C,0x00, +0x00,0x0C,0x1C,0x3C,0x6C,0x7E,0x0C,0x00,0x00,0x7E,0x60,0x7C,0x06,0x66,0x3C,0x00, +0x00,0x3C,0x60,0x7C,0x66,0x66,0x3C,0x00,0x00,0x7E,0x06,0x0C,0x18,0x30,0x30,0x00, +0x00,0x3C,0x66,0x3C,0x66,0x66,0x3C,0x00,0x00,0x3C,0x66,0x3E,0x06,0x0C,0x38,0x00, +0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x30, +0x06,0x0C,0x18,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00, +0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00,0x00,0x3C,0x66,0x0C,0x18,0x00,0x18,0x00, +0x00,0x3C,0x66,0x6E,0x6E,0x60,0x3E,0x00,0x00,0x18,0x3C,0x66,0x66,0x7E,0x66,0x00, +0x00,0x7C,0x66,0x7C,0x66,0x66,0x7C,0x00,0x00,0x3C,0x66,0x60,0x60,0x66,0x3C,0x00, +0x00,0x78,0x6C,0x66,0x66,0x6C,0x78,0x00,0x00,0x7E,0x60,0x7C,0x60,0x60,0x7E,0x00, +0x00,0x7E,0x60,0x7C,0x60,0x60,0x60,0x00,0x00,0x3E,0x60,0x60,0x6E,0x66,0x3E,0x00, +0x00,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x7E,0x00, +0x00,0x06,0x06,0x06,0x06,0x66,0x3C,0x00,0x00,0x66,0x6C,0x78,0x78,0x6C,0x66,0x00, +0x00,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0x00,0x63,0x77,0x7F,0x6B,0x63,0x63,0x00, +0x00,0x66,0x76,0x7E,0x7E,0x6E,0x66,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x00, +0x00,0x7C,0x66,0x66,0x7C,0x60,0x60,0x00,0x00,0x3C,0x66,0x66,0x66,0x6C,0x36,0x00, +0x00,0x7C,0x66,0x66,0x7C,0x6C,0x66,0x00,0x00,0x3C,0x60,0x3C,0x06,0x06,0x3C,0x00, +0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x7E,0x00, +0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00, +0x00,0x66,0x66,0x3C,0x3C,0x66,0x66,0x00,0x00,0x66,0x66,0x3C,0x18,0x18,0x18,0x00, +0x00,0x7E,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x1E,0x18,0x18,0x18,0x18,0x1E,0x00, +0x00,0x40,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x78,0x00, +0x00,0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00, +0x0C,0x18,0x3C,0x06,0x3E,0x66,0x3E,0x00,0x30,0x18,0x00,0x66,0x66,0x66,0x3E,0x00, +0x36,0x6C,0x00,0x76,0x76,0x7E,0x6E,0x00,0x0C,0x18,0x7E,0x60,0x7C,0x60,0x7E,0x00, +0x00,0x00,0x3C,0x60,0x60,0x3C,0x18,0x30,0x3C,0x66,0x00,0x3C,0x66,0x66,0x3C,0x00, +0x30,0x18,0x00,0x3C,0x66,0x66,0x3C,0x00,0x30,0x18,0x00,0x38,0x18,0x18,0x3C,0x00, +0x1C,0x30,0x30,0x78,0x30,0x30,0x7E,0x00,0x00,0x66,0x00,0x38,0x18,0x18,0x3C,0x00, +0x00,0x66,0x00,0x66,0x66,0x66,0x3E,0x00,0x36,0x00,0x3C,0x06,0x3E,0x66,0x3E,0x00, +0x66,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00,0x0C,0x18,0x00,0x66,0x66,0x66,0x3E,0x00, +0x0C,0x18,0x00,0x3C,0x66,0x66,0x3C,0x00,0x00,0x66,0x00,0x3C,0x66,0x66,0x3C,0x00, +0x66,0x00,0x66,0x66,0x66,0x66,0x7E,0x00,0x3C,0x66,0x1C,0x06,0x3E,0x66,0x3E,0x00, +0x3C,0x66,0x00,0x66,0x66,0x66,0x3E,0x00,0x3C,0x66,0x00,0x38,0x18,0x18,0x3C,0x00, +0x0C,0x18,0x3C,0x66,0x7E,0x60,0x3C,0x00,0x30,0x18,0x3C,0x66,0x7E,0x60,0x3C,0x00, +0x36,0x6C,0x00,0x7C,0x66,0x66,0x66,0x00,0x3C,0xC3,0x3C,0x66,0x7E,0x60,0x3C,0x00, +0x18,0x00,0x3C,0x06,0x3E,0x66,0x3E,0x00,0x30,0x18,0x3C,0x06,0x3E,0x66,0x3E,0x00, +0x18,0x00,0x18,0x3C,0x66,0x7E,0x66,0x00,0x78,0x60,0x78,0x60,0x7E,0x18,0x1E,0x00, +0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x00,0x00,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00, +0x00,0x18,0x30,0x7E,0x30,0x18,0x00,0x00,0x00,0x18,0x0C,0x7E,0x0C,0x18,0x00,0x00, +0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x3C,0x06,0x3E,0x66,0x3E,0x00, +0x00,0x60,0x60,0x7C,0x66,0x66,0x7C,0x00,0x00,0x00,0x3C,0x60,0x60,0x60,0x3C,0x00, +0x00,0x06,0x06,0x3E,0x66,0x66,0x3E,0x00,0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00, +0x00,0x0E,0x18,0x3E,0x18,0x18,0x18,0x00,0x00,0x00,0x3E,0x66,0x66,0x3E,0x06,0x7C, +0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x00,0x00,0x18,0x00,0x38,0x18,0x18,0x3C,0x00, +0x00,0x06,0x00,0x06,0x06,0x06,0x06,0x3C,0x00,0x60,0x60,0x6C,0x78,0x6C,0x66,0x00, +0x00,0x38,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00, +0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00, +0x00,0x00,0x7C,0x66,0x66,0x7C,0x60,0x60,0x00,0x00,0x3E,0x66,0x66,0x3E,0x06,0x06, +0x00,0x00,0x7C,0x66,0x60,0x60,0x60,0x00,0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00, +0x00,0x18,0x7E,0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3E,0x00, +0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x63,0x6B,0x7F,0x3E,0x36,0x00, +0x00,0x00,0x66,0x3C,0x18,0x3C,0x66,0x00,0x00,0x00,0x66,0x66,0x66,0x3E,0x0C,0x78, +0x00,0x00,0x7E,0x0C,0x18,0x30,0x7E,0x00,0x66,0x66,0x18,0x3C,0x66,0x7E,0x66,0x00, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x7E,0x78,0x7C,0x6E,0x66,0x06,0x00, +0x08,0x18,0x38,0x78,0x38,0x18,0x08,0x00,0x10,0x18,0x1C,0x1E,0x1C,0x18,0x10,0x00, +0x4C,0x09,0x50,0x20,0x86,0x50,0x4C,0x91,0x52,0x20,0x86,0x50,0xA9,0x00,0x85,0x80, +0x85,0x81,0x85,0x82,0x8D,0x08,0xD2,0xA9,0x03,0x8D,0x0F,0xD2,0x20,0x10,0x55,0xA9, +0x40,0x8D,0x0E,0xD4,0xA2,0x00,0x20,0x73,0x57,0xA2,0x3A,0xA0,0x51,0x20,0x9E,0x50, +0xA9,0xD0,0x8D,0x00,0x02,0xA9,0x50,0x8D,0x01,0x02,0xA2,0x0C,0xA9,0xAA,0x20,0x2A, +0x57,0xA2,0x00,0x8E,0x0A,0xD4,0xE8,0xD0,0xFA,0xAD,0x0B,0xD4,0xC9,0x18,0xB0,0xF9, +0xA9,0x10,0x85,0x87,0xA9,0xC0,0x8D,0x0E,0xD4,0xAD,0x1F,0xD0,0x29,0x01,0xD0,0xF9, +0xA9,0xFF,0x8D,0xFC,0x02,0xA5,0x86,0x29,0x0F,0xC9,0x01,0xF0,0x10,0xC9,0x02,0xF0, +0x0F,0xC9,0x04,0xF0,0x0E,0xA9,0x88,0x85,0x86,0xA9,0xFF,0x85,0x82,0x4C,0x91,0x52, +0x4C,0x57,0x55,0x4C,0x50,0x54,0xA9,0x11,0x85,0x86,0xA9,0x21,0x8D,0x2F,0x02,0xA9, +0xC0,0x8D,0x0E,0xD4,0xA9,0x41,0x85,0x83,0xA9,0xFF,0x8D,0xFC,0x02,0x60,0x85,0x8A, +0x98,0x48,0x8A,0x48,0xA9,0x00,0x8D,0x2F,0x02,0x8D,0xDC,0x02,0xA9,0xDA,0x8D,0x00, +0x02,0xA9,0x53,0x8D,0x01,0x02,0xA2,0x00,0x8A,0x20,0x2A,0x57,0x68,0xAA,0x68,0xA8, +0x8E,0x30,0x02,0x86,0x84,0x8C,0x31,0x02,0x84,0x85,0xA9,0x21,0x8D,0x2F,0x02,0x60, +0x48,0x8A,0x48,0xA2,0x7A,0xA5,0x87,0xC9,0x01,0xF0,0x1F,0x29,0x01,0xF0,0x0A,0xE6, +0xA2,0xA5,0xA2,0x29,0x20,0xF0,0x02,0xA2,0x2C,0x8E,0x0A,0xD4,0x8E,0x16,0xD0,0x18, +0x66,0x87,0xA9,0x00,0x85,0x4D,0x68,0xAA,0x68,0x40,0xA5,0x88,0xD0,0x16,0xAD,0x1F, +0xD0,0x29,0x02,0xD0,0x1A,0xA5,0x86,0x2A,0x26,0x86,0xA9,0x20,0x85,0xA2,0xA9,0xFF, +0x85,0x88,0xD0,0x0B,0xAD,0x1F,0xD0,0x29,0x02,0xF0,0x04,0xA9,0x00,0x85,0x88,0xA5, +0x86,0x29,0x0F,0x09,0x10,0x85,0x87,0xE6,0x80,0xD0,0x02,0xE6,0x81,0xA5,0x81,0xC9, +0xFA,0xD0,0x04,0x58,0x4C,0x75,0x50,0x4C,0xD3,0x50,0x70,0x70,0x70,0x70,0x70,0x47, +0x61,0x51,0x70,0x70,0x70,0x4E,0x00,0x30,0x70,0xF0,0xC6,0x71,0x51,0x70,0x86,0x70, +0x86,0x70,0x06,0x70,0x70,0x4E,0x00,0x30,0x70,0x70,0x70,0x42,0xB1,0x51,0x41,0x3A, +0x51,0x00,0x00,0x00,0x00,0x33,0x25,0x2C,0x26,0x00,0x34,0x25,0x33,0x34,0x00,0x00, +0x00,0x00,0x00,0x2D,0x25,0x2D,0x2F,0x32,0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x21,0x35,0x24,0x29,0x2F,0x0D,0x36,0x29,0x33,0x35,0x21,0x2C,0x00, +0x00,0x00,0x00,0x2B,0x25,0x39,0x22,0x2F,0x21,0x32,0x24,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x21,0x2C,0x2C,0x00,0x34,0x25,0x33,0x34,0x33,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x42,0xB3,0xA5,0xAC,0xA5,0xA3,0xB4,0x56,0x0C,0x42,0xB3, +0xB4,0xA1,0xB2,0xB4,0x56,0x2F,0x32,0x42,0xB2,0xA5,0xB3,0xA5,0xB4,0x56,0x00,0x00, +0x00,0x70,0x70,0x70,0x46,0x00,0x30,0x70,0x70,0x06,0x70,0x08,0x70,0x70,0x06,0x70, +0x08,0x70,0x08,0x70,0x08,0x70,0x08,0x70,0x70,0x70,0x01,0xED,0x51,0xA0,0x40,0x42, +0xF5,0x51,0x01,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0xB2,0xA5,0xB3,0xA5,0xB4, +0x56,0x2F,0x32,0x42,0xA8,0xA5,0xAC,0xB0,0x56,0x34,0x2F,0x00,0x25,0x38,0x29,0x34, +0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x70,0x46,0x00,0x30,0x70,0x70,0x70,0x70, +0x02,0x70,0x70,0x02,0x70,0x02,0x70,0x02,0x70,0x02,0x70,0x02,0x70,0x70,0x01,0xED, +0x51,0x70,0x70,0x70,0x70,0x46,0x71,0x52,0x70,0x06,0x70,0x70,0x4B,0x00,0x31,0x0B, +0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B, +0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B, +0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x70,0x46,0x00,0x30,0x70,0x01,0xED, +0x51,0x00,0x00,0x21,0x35,0x24,0x29,0x2F,0x0D,0x36,0x29,0x33,0x35,0x21,0x2C,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x25,0x33,0x34,0x00,0x00,0x00,0x00,0x00, +0x00,0xA2,0xD1,0xA0,0x51,0xA9,0x00,0x20,0x9E,0x50,0xA2,0x01,0x20,0x73,0x57,0xA2, +0x00,0x20,0x59,0x57,0xA2,0x01,0x20,0x59,0x57,0xAD,0x20,0x30,0xC9,0xAA,0xF0,0x17, +0xA9,0x55,0x20,0x8E,0x53,0x20,0xB1,0x53,0x20,0x73,0xFF,0xB0,0x05,0xA9,0xFF,0x4C, +0xC4,0x52,0xA9,0xAA,0x20,0x8E,0x53,0xAD,0x24,0x30,0xC9,0xAA,0xF0,0x17,0xA9,0x55, +0x20,0x99,0x53,0x20,0xB1,0x53,0x20,0x92,0xFF,0xB0,0x05,0xA9,0xFF,0x4C,0xE2,0x52, +0xA9,0xAA,0x20,0x99,0x53,0xA9,0xC0,0x85,0x8D,0xA9,0x04,0x85,0xA4,0xA9,0x00,0x85, +0x8E,0x85,0x90,0x85,0x91,0x85,0x8F,0xA6,0x8E,0xBD,0x38,0x30,0x25,0x8D,0xC9,0x80, +0xF0,0x5C,0xC9,0x08,0xF0,0x58,0xA9,0x44,0x20,0xC3,0x53,0xA5,0xA4,0x20,0xA4,0x53, +0xA5,0xA4,0x49,0x0C,0x85,0xA4,0xA2,0x07,0xBD,0x4A,0x54,0xC5,0x91,0xF0,0x37,0xCA, +0x10,0xF6,0xA9,0x04,0x85,0x92,0xA2,0x00,0xA0,0x00,0x8A,0x91,0x90,0xE8,0xC8,0xD0, +0xF9,0x86,0x93,0xA0,0x00,0xB1,0x90,0xC5,0x93,0xD0,0x10,0xE6,0x93,0xC8,0xD0,0xF5, +0xE8,0xD0,0xE5,0xE6,0x91,0xC6,0x92,0xD0,0xDD,0xF0,0x0E,0x20,0xB1,0x53,0xA9,0x88, +0x20,0xC3,0x53,0x4C,0x5E,0x53,0x20,0xB5,0x53,0xA9,0xCC,0x20,0xC3,0x53,0xA5,0x8D, +0x30,0x26,0xA9,0xC0,0x85,0x8D,0xE6,0x8E,0x18,0xA5,0x8F,0x69,0x04,0x85,0x91,0x85, +0x8F,0xCD,0xE4,0x02,0xD0,0x81,0xA5,0x82,0xD0,0x03,0x4C,0xA9,0x52,0xA9,0x0C,0x20, +0xA4,0x53,0x20,0xB5,0x53,0x4C,0x57,0x55,0xA9,0x0C,0x85,0x8D,0xD0,0xDA,0xA2,0x04, +0x20,0x2A,0x57,0x29,0xFC,0x8D,0x23,0x30,0x60,0xA2,0x08,0x20,0x2A,0x57,0x29,0xFC, +0x8D,0x27,0x30,0x60,0x85,0xA5,0xAD,0x01,0xD3,0x29,0xF3,0x05,0xA5,0x8D,0x01,0xD3, +0x60,0xA2,0x3C,0xD0,0x02,0xA2,0x96,0xA0,0xFF,0x8C,0x0A,0xD4,0x88,0xD0,0xFA,0xCA, +0xD0,0xF5,0x60,0x48,0xA6,0x8E,0xA5,0x8D,0x49,0xFF,0x3D,0x38,0x30,0x9D,0x38,0x30, +0x68,0x25,0x8D,0x1D,0x38,0x30,0x9D,0x38,0x30,0x60,0x48,0xA9,0x0C,0x8D,0x17,0xD0, +0xAD,0xC8,0x02,0x8D,0x18,0xD0,0xA9,0x00,0x85,0x4D,0xAD,0xDC,0x02,0xF0,0x0E,0xA9, +0x00,0x8D,0xDC,0x02,0xA9,0x0C,0x20,0xA4,0x53,0x58,0x4C,0x0C,0x50,0xA5,0x8A,0xF0, +0x47,0xAD,0x1F,0xD0,0x29,0x01,0xF0,0x04,0xA9,0xB3,0xD0,0x02,0xA9,0x33,0x8D,0x1C, +0x30,0xAD,0x1F,0xD0,0x29,0x02,0xF0,0x04,0xA9,0xF3,0xD0,0x02,0xA9,0x73,0x8D,0x1E, +0x30,0xAD,0x1F,0xD0,0x29,0x04,0xF0,0x04,0xA9,0xAF,0xD0,0x02,0xA9,0x2F,0x8D,0x20, +0x30,0xAD,0x1F,0xD0,0x29,0x07,0xC9,0x07,0xF0,0x09,0xA9,0x64,0x8D,0x02,0xD2,0xA9, +0xA8,0xD0,0x02,0xA9,0x00,0x8D,0x03,0xD2,0x68,0x40,0x00,0x50,0x54,0x30,0x30,0x30, +0xA2,0x00,0x86,0x94,0xA2,0x03,0x20,0x73,0x57,0xA2,0x15,0xA0,0x52,0xA9,0xFF,0x20, +0x9E,0x50,0xA2,0x02,0x20,0x59,0x57,0xA2,0x07,0x20,0x59,0x57,0xA5,0x82,0xF0,0x13, +0xA6,0x94,0xBD,0x45,0x55,0xE6,0x94,0xA6,0x94,0xE0,0x13,0xD0,0x14,0x20,0xB5,0x53, +0x4C,0x91,0x52,0xAD,0xFC,0x02,0xC9,0xFF,0xF0,0xF9,0xC9,0xC0,0xB0,0xF5,0xAD,0xFC, +0x02,0xA2,0xFF,0x8E,0xFC,0x02,0x48,0x29,0x80,0xF0,0x05,0xA2,0x08,0x20,0x59,0x57, +0x68,0x48,0x29,0x40,0xF0,0x0A,0xA2,0x05,0x20,0x59,0x57,0xA2,0x04,0x20,0x59,0x57, +0x68,0x29,0x3F,0xC9,0x21,0xF0,0x68,0xC9,0x2C,0xF0,0x74,0xC9,0x34,0xF0,0x68,0xC9, +0x0C,0xF0,0x76,0xAA,0xBD,0x9C,0x57,0x48,0xA9,0x21,0x85,0x95,0xA9,0x30,0x85,0x96, +0x68,0xA0,0xFF,0xC8,0xD1,0x95,0xD0,0xFB,0xB1,0x95,0x49,0x80,0x91,0x95,0xA5,0x82, +0xF0,0x13,0x20,0x05,0x55,0xA2,0x14,0x20,0xB7,0x53,0x20,0x10,0x55,0xA2,0x0A,0x20, +0xB7,0x53,0x4C,0x62,0x54,0x20,0x05,0x55,0xAD,0x0F,0xD2,0x29,0x04,0xF0,0xF9,0x20, +0x10,0x55,0x4C,0x62,0x54,0xA9,0x64,0x8D,0x00,0xD2,0xA9,0xA8,0x8D,0x01,0xD2,0x60, +0xA9,0x00,0x8D,0x01,0xD2,0x8D,0x03,0xD2,0x8D,0x05,0xD2,0x8D,0x07,0xD2,0x60,0xA2, +0x03,0x20,0x59,0x57,0x4C,0xDE,0x54,0xA2,0x06,0x20,0x59,0x57,0x4C,0xDE,0x54,0xA9, +0x7F,0x8D,0x52,0x30,0x8D,0x53,0x30,0xD0,0xA5,0xA9,0x32,0x8D,0x6D,0x30,0xA9,0x34, +0x8D,0x6E,0x30,0xD0,0x99,0x52,0x08,0x0A,0x2B,0x28,0x0D,0x3D,0x39,0x2D,0x1F,0x30, +0x35,0x1A,0x7F,0x2D,0x3F,0x28,0x0D,0xA2,0x02,0x20,0x73,0x57,0xA9,0x00,0x85,0x97, +0xA9,0x00,0x85,0x98,0xA2,0x31,0xA0,0x52,0xA9,0x00,0x20,0x9E,0x50,0xA2,0x09,0x20, +0x59,0x57,0xA5,0x97,0x4A,0x18,0x69,0x11,0x8D,0x0B,0x30,0xA2,0x0F,0xA9,0xFF,0x9D, +0x50,0x31,0x9D,0xB0,0x31,0x9D,0x10,0x32,0x9D,0x70,0x32,0x9D,0xD0,0x32,0xCA,0x10, +0xEC,0xA9,0x00,0x85,0x99,0xA9,0x0C,0x85,0x9A,0xA6,0x99,0xBD,0x17,0x57,0xA8,0xBD, +0x16,0x57,0xAA,0xA5,0x9A,0x20,0x85,0x56,0x18,0xA5,0x9A,0x69,0x06,0x85,0x9A,0xE6, +0x99,0xE6,0x99,0xA5,0x99,0xC9,0x14,0xD0,0xE0,0x20,0xB1,0x53,0xA2,0x54,0xA0,0x31, +0xA9,0x00,0x20,0x85,0x56,0xA9,0x51,0x20,0x6C,0x56,0xA2,0x86,0xA0,0x31,0xA9,0x00, +0x20,0x85,0x56,0xA9,0x5B,0x20,0x6C,0x56,0xA2,0xF8,0xA0,0x30,0xA9,0x48,0x20,0x85, +0x56,0xA2,0xC7,0xA0,0x30,0xA9,0x54,0x20,0x85,0x56,0xA2,0x48,0xA0,0x32,0xA9,0x4E, +0x20,0x85,0x56,0xA9,0x44,0x20,0x6C,0x56,0xA2,0xCA,0xA0,0x30,0xA9,0x48,0x20,0x85, +0x56,0xA2,0x1A,0xA0,0x32,0xA9,0x4E,0x20,0x85,0x56,0xA2,0xCA,0xA0,0x31,0xA9,0x06, +0x20,0x85,0x56,0xA9,0x3C,0x20,0x6C,0x56,0xA2,0x3C,0xA0,0x30,0xA9,0x48,0x20,0x85, +0x56,0xA2,0x8C,0xA0,0x31,0xA9,0x4E,0x20,0x85,0x56,0xA2,0x3C,0xA0,0x31,0xA9,0x06, +0x20,0x85,0x56,0xA9,0x2D,0x20,0x6C,0x56,0xA2,0x9E,0xA0,0x30,0xA9,0x48,0x20,0x85, +0x56,0xA2,0xEE,0xA0,0x31,0xA9,0x4E,0x20,0x85,0x56,0xA9,0x35,0x20,0x6C,0x56,0x20, +0xB5,0x53,0xE6,0x97,0xE6,0x97,0xA5,0x97,0xC9,0x08,0xD0,0x07,0xA5,0x82,0xD0,0x06, +0x4C,0x5C,0x55,0x4C,0x60,0x55,0x20,0xB5,0x53,0x4C,0x50,0x54,0xA4,0x97,0x99,0x00, +0xD2,0xA9,0xA8,0x99,0x01,0xD2,0xA6,0x98,0xBD,0xB6,0x56,0xAA,0x20,0xB7,0x53,0xE6, +0x98,0x20,0x10,0x55,0x60,0x86,0x9B,0x84,0x9C,0xAA,0xA0,0x00,0xA9,0x10,0x85,0x9D, +0xA9,0x06,0x85,0xA3,0xBD,0xBC,0x56,0x11,0x9B,0x91,0x9B,0x20,0xAA,0x56,0xC6,0x9D, +0xD0,0xF2,0xE6,0x9D,0xE8,0xC6,0xA3,0xD0,0xEB,0x60,0x18,0xA5,0x9B,0x69,0x10,0x85, +0x9B,0x90,0x02,0xE6,0x9C,0x60,0x20,0x20,0x20,0x10,0x10,0x20,0x01,0x1F,0x3F,0x7F, +0x3E,0x1C,0x00,0x41,0x42,0x4C,0x70,0x40,0x00,0x01,0x02,0x04,0x08,0x10,0x00,0x43, +0x44,0x48,0x48,0x48,0x00,0x44,0x22,0x10,0x08,0x07,0x00,0x04,0x08,0x05,0x02,0x00, +0x00,0x30,0x48,0x88,0x84,0x84,0x00,0x88,0x88,0x90,0xA0,0xC0,0x00,0xF0,0x88,0x84, +0x82,0x82,0x00,0x82,0x82,0x84,0x88,0xF0,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80, +0x80,0x80,0x80,0x80,0x00,0x1C,0x3E,0x7F,0x7E,0x7C,0x40,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0x04,0x06,0x05,0x06,0xC1,0x30,0x21,0x31,0x81,0x31,0xF1,0x31,0x02,0x30, +0x62,0x30,0x22,0x31,0x82,0x31,0xC2,0x30,0xC2,0x31,0x48,0xBD,0xDC,0x57,0x85,0x9E, +0xBD,0xDD,0x57,0x85,0x9F,0xBD,0xDE,0x57,0x85,0xA0,0xBD,0xDF,0x57,0x85,0xA1,0xA0, +0x00,0x68,0x91,0x9E,0xE6,0x9E,0xD0,0x02,0xE6,0x9F,0x48,0xA5,0x9E,0xC5,0xA0,0xD0, +0xF0,0xA5,0x9F,0xC5,0xA1,0xD0,0xEA,0x68,0x60,0xBD,0x57,0xCA,0xA8,0xBD,0xEC,0x57, +0x85,0x9E,0xBD,0xF6,0x57,0xAA,0xB9,0x61,0xCA,0x9D,0x00,0x30,0xC8,0xE8,0xC6,0x9E, +0xD0,0xF4,0x60,0xBD,0x8C,0x57,0x8D,0xC4,0x02,0xBD,0x90,0x57,0x8D,0xC5,0x02,0xBD, +0x94,0x57,0x8D,0xC6,0x02,0xBD,0x98,0x57,0x8D,0xC8,0x02,0x60,0x2C,0x0C,0x2A,0x18, +0x0F,0x32,0x0C,0x0E,0xD2,0xD6,0x00,0xB4,0xD2,0xA0,0x30,0xB4,0x2C,0x2A,0x1B,0x91, +0x92,0x2B,0x0B,0x0A,0x2F,0x00,0x30,0x35,0xB2,0x29,0x0D,0x1D,0x36,0xA8,0x23,0x93, +0x94,0x22,0x38,0x3A,0x14,0x00,0x13,0x16,0x5B,0x15,0x12,0x11,0x0C,0x00,0x0E,0x2E, +0x00,0x2D,0x0F,0xA1,0x32,0x00,0x25,0x39,0xFF,0x34,0x37,0x31,0x19,0x00,0x10,0x17, +0xA2,0x18,0x1C,0x1E,0x26,0x28,0x24,0x00,0xA3,0x27,0x33,0x21,0x00,0x30,0xFF,0x3E, +0x20,0x30,0x24,0x30,0x24,0x30,0x28,0x30,0x00,0x30,0x20,0x30,0x13,0x03,0x13,0x13, +0x04,0x04,0x03,0xA8,0x03,0x07,0x00,0x28,0x00,0xB7,0x92,0xAB,0x4C,0x22,0x72,0x04, +0x20,0xA1,0xDB,0x20,0xBB,0xDB,0xB0,0x39,0xA2,0xED,0xA0,0x04,0x20,0x48,0xDA,0xA2, +0xFF,0x86,0xF1,0x20,0x44,0xDA,0xF0,0x04,0xA9,0xFF,0x85,0xF0,0x20,0x94,0xDB,0xB0, +0x21,0x48,0xA6,0xD5,0xD0,0x11,0x20,0xEB,0xDB,0x68,0x05,0xD9,0x85,0xD9,0xA6,0xF1, +0x30,0xE6,0xE8,0x86,0xF1,0xD0,0xE1,0x68,0xA6,0xF1,0x10,0x02,0xE6,0xED,0x4C,0x18, +0xD8,0x60,0xC9,0x2E,0xF0,0x14,0xC9,0x45,0xF0,0x19,0xA6,0xF0,0xD0,0x68,0xC9,0x2B, +0xF0,0xC6,0xC9,0x2D,0xF0,0x00,0x85,0xEE,0xF0,0xBE,0xA6,0xF1,0x10,0x58,0xE8,0x86, +0xF1,0xF0,0xB5,0xA5,0xF2,0x85,0xEC,0x20,0x94,0xDB,0xB0,0x37,0xAA,0xA5,0xED,0x48, +0x86,0xED,0x20,0x94,0xDB,0xB0,0x17,0x48,0xA5,0xED,0x0A,0x85,0xED,0x0A,0x0A,0x65, +0xED,0x85,0xED,0x68,0x18,0x65,0xED,0x85,0xED,0xA4,0xF2,0x20,0x9D,0xDB,0xA5,0xEF, +0xF0,0x09,0xA5,0xED,0x49,0xFF,0x18,0x69,0x01,0x85,0xED,0x68,0x18,0x65,0xED,0x85, +0xED,0xD0,0x13,0xC9,0x2B,0xF0,0x06,0xC9,0x2D,0xD0,0x07,0x85,0xEF,0x20,0x94,0xDB, +0x90,0xBA,0xA5,0xEC,0x85,0xF2,0xC6,0xF2,0xA5,0xED,0xA6,0xF1,0x30,0x05,0xF0,0x03, +0x38,0xE5,0xF1,0x48,0x2A,0x68,0x6A,0x85,0xED,0x90,0x03,0x20,0xEB,0xDB,0xA5,0xED, +0x18,0x69,0x44,0x85,0xD4,0x20,0x00,0xDC,0xB0,0x0B,0xA6,0xEE,0xF0,0x06,0xA5,0xD4, +0x09,0x80,0x85,0xD4,0x18,0x60,0x20,0x51,0xDA,0xA9,0x30,0x8D,0x7F,0x05,0xA5,0xD4, +0xF0,0x28,0x29,0x7F,0xC9,0x3F,0x90,0x28,0xC9,0x45,0xB0,0x24,0x38,0xE9,0x3F,0x20, +0x70,0xDC,0x20,0xA4,0xDC,0x09,0x80,0x9D,0x80,0x05,0xAD,0x80,0x05,0xC9,0x2E,0xF0, +0x03,0x4C,0x88,0xD9,0x20,0xC1,0xDC,0x4C,0x9C,0xD9,0xA9,0xB0,0x8D,0x80,0x05,0x60, +0xA9,0x01,0x20,0x70,0xDC,0x20,0xA4,0xDC,0xE8,0x86,0xF2,0xA5,0xD4,0x0A,0x38,0xE9, +0x80,0xAE,0x80,0x05,0xE0,0x30,0xF0,0x17,0xAE,0x81,0x05,0xAC,0x82,0x05,0x8E,0x82, +0x05,0x8C,0x81,0x05,0xA6,0xF2,0xE0,0x02,0xD0,0x02,0xE6,0xF2,0x18,0x69,0x01,0x85, +0xED,0xA9,0x45,0xA4,0xF2,0x20,0x9F,0xDC,0x84,0xF2,0xA5,0xED,0x10,0x0B,0xA9,0x00, +0x38,0xE5,0xED,0x85,0xED,0xA9,0x2D,0xD0,0x02,0xA9,0x2B,0x20,0x9F,0xDC,0xA2,0x00, +0xA5,0xED,0x38,0xE9,0x0A,0x90,0x03,0xE8,0xD0,0xF8,0x18,0x69,0x0A,0x48,0x8A,0x20, +0x9D,0xDC,0x68,0x09,0x80,0x20,0x9D,0xDC,0xAD,0x80,0x05,0xC9,0x30,0xD0,0x0D,0x18, +0xA5,0xF3,0x69,0x01,0x85,0xF3,0xA5,0xF4,0x69,0x00,0x85,0xF4,0xA5,0xD4,0x10,0x09, +0x20,0xC1,0xDC,0xA0,0x00,0xA9,0x2D,0x91,0xF3,0x60,0xA5,0xD4,0x85,0xF8,0xA5,0xD5, +0x85,0xF7,0x20,0x44,0xDA,0xF8,0xA0,0x10,0x06,0xF8,0x26,0xF7,0xA2,0x03,0xB5,0xD4, +0x75,0xD4,0x95,0xD4,0xCA,0xD0,0xF7,0x88,0xD0,0xEE,0xD8,0xA9,0x42,0x85,0xD4,0x4C, +0x00,0xDC,0xA9,0x00,0x85,0xF7,0x85,0xF8,0xA5,0xD4,0x30,0x66,0xC9,0x43,0xB0,0x62, +0x38,0xE9,0x40,0x90,0x3F,0x69,0x00,0x0A,0x85,0xF5,0x20,0x5A,0xDA,0xB0,0x53,0xA5, +0xF7,0x85,0xF9,0xA5,0xF8,0x85,0xFA,0x20,0x5A,0xDA,0xB0,0x46,0x20,0x5A,0xDA,0xB0, +0x41,0x18,0xA5,0xF8,0x65,0xFA,0x85,0xF8,0xA5,0xF7,0x65,0xF9,0x85,0xF7,0xB0,0x32, +0x20,0xB9,0xDC,0x18,0x65,0xF8,0x85,0xF8,0xA5,0xF7,0x69,0x00,0xB0,0x24,0x85,0xF7, +0xC6,0xF5,0xD0,0xC6,0x20,0xB9,0xDC,0xC9,0x05,0x90,0x0D,0x18,0xA5,0xF8,0x69,0x01, +0x85,0xF8,0xA5,0xF7,0x69,0x00,0x85,0xF7,0xA5,0xF8,0x85,0xD4,0xA5,0xF7,0x85,0xD5, +0x18,0x60,0x38,0x60,0xA2,0xD4,0xA0,0x06,0xA9,0x00,0x95,0x00,0xE8,0x88,0xD0,0xFA, +0x60,0xA9,0x05,0x85,0xF4,0xA9,0x80,0x85,0xF3,0x60,0x18,0x26,0xF8,0x26,0xF7,0x60, +0xA5,0xE0,0x49,0x80,0x85,0xE0,0xA5,0xE0,0x29,0x7F,0x85,0xF7,0xA5,0xD4,0x29,0x7F, +0x38,0xE5,0xF7,0x10,0x10,0xA2,0x05,0xB5,0xD4,0xB4,0xE0,0x95,0xE0,0x98,0x95,0xD4, +0xCA,0x10,0xF4,0x30,0xE1,0xF0,0x07,0xC9,0x05,0xB0,0x19,0x20,0x3E,0xDC,0xF8,0xA5, +0xD4,0x45,0xE0,0x30,0x1E,0xA2,0x04,0x18,0xB5,0xD5,0x75,0xE1,0x95,0xD5,0xCA,0x10, +0xF7,0xD8,0xB0,0x03,0x4C,0x00,0xDC,0xA9,0x01,0x20,0x3A,0xDC,0xA9,0x01,0x85,0xD5, +0x4C,0x00,0xDC,0xA2,0x04,0x38,0xB5,0xD5,0xF5,0xE1,0x95,0xD5,0xCA,0x10,0xF7,0x90, +0x04,0xD8,0x4C,0x00,0xDC,0xA5,0xD4,0x49,0x80,0x85,0xD4,0x38,0xA2,0x04,0xA9,0x00, +0xF5,0xD5,0x95,0xD5,0xCA,0x10,0xF7,0xD8,0x4C,0x00,0xDC,0xA5,0xD4,0xF0,0x45,0xA5, +0xE0,0xF0,0x3E,0x20,0xCF,0xDC,0x38,0xE9,0x40,0x38,0x65,0xE0,0x30,0x38,0x20,0xE0, +0xDC,0xA5,0xDF,0x29,0x0F,0x85,0xF6,0xC6,0xF6,0x30,0x06,0x20,0x01,0xDD,0x4C,0xF7, +0xDA,0xA5,0xDF,0x4A,0x4A,0x4A,0x4A,0x85,0xF6,0xC6,0xF6,0x30,0x06,0x20,0x05,0xDD, +0x4C,0x09,0xDB,0x20,0x62,0xDC,0xC6,0xF5,0xD0,0xD7,0xA5,0xED,0x85,0xD4,0x4C,0x04, +0xDC,0x20,0x44,0xDA,0x18,0x60,0x38,0x60,0xA5,0xE0,0xF0,0xFA,0xA5,0xD4,0xF0,0xF4, +0x20,0xCF,0xDC,0x38,0xE5,0xE0,0x18,0x69,0x40,0x30,0xEB,0x20,0xE0,0xDC,0xE6,0xF5, +0x4C,0x4E,0xDB,0xA2,0x00,0xB5,0xD5,0x95,0xD4,0xE8,0xE0,0x0C,0xD0,0xF7,0xA0,0x05, +0x38,0xF8,0xB9,0xDA,0x00,0xF9,0xE6,0x00,0x99,0xDA,0x00,0x88,0x10,0xF4,0xD8,0x90, +0x04,0xE6,0xD9,0xD0,0xE9,0x20,0x0F,0xDD,0x06,0xD9,0x06,0xD9,0x06,0xD9,0x06,0xD9, +0xA0,0x05,0x38,0xF8,0xB9,0xDA,0x00,0xF9,0xE0,0x00,0x99,0xDA,0x00,0x88,0x10,0xF4, +0xD8,0x90,0x04,0xE6,0xD9,0xD0,0xE9,0x20,0x09,0xDD,0xC6,0xF5,0xD0,0xB5,0x20,0x62, +0xDC,0x4C,0x1A,0xDB,0x20,0xAF,0xDB,0xA4,0xF2,0x90,0x02,0xB1,0xF3,0xC8,0x84,0xF2, +0x60,0xA4,0xF2,0xA9,0x20,0xD1,0xF3,0xD0,0x03,0xC8,0xD0,0xF9,0x84,0xF2,0x60,0xA4, +0xF2,0xB1,0xF3,0x38,0xE9,0x30,0x90,0x18,0xC9,0x0A,0x60,0xA5,0xF2,0x48,0x20,0x94, +0xDB,0x90,0x1F,0xC9,0x2E,0xF0,0x14,0xC9,0x2B,0xF0,0x07,0xC9,0x2D,0xF0,0x03,0x68, +0x38,0x60,0x20,0x94,0xDB,0x90,0x0B,0xC9,0x2E,0xD0,0xF4,0x20,0x94,0xDB,0x90,0x02, +0xB0,0xED,0x68,0x85,0xF2,0x18,0x60,0xA2,0xE7,0xD0,0x02,0xA2,0xD5,0xA0,0x04,0x18, +0x36,0x04,0x36,0x03,0x36,0x02,0x36,0x01,0x36,0x00,0x26,0xEC,0x88,0xD0,0xF0,0x60, +0xA2,0x00,0x86,0xDA,0xA2,0x04,0xA5,0xD4,0xF0,0x2E,0xA5,0xD5,0xD0,0x1A,0xA0,0x00, +0xB9,0xD6,0x00,0x99,0xD5,0x00,0xC8,0xC0,0x05,0x90,0xF5,0xC6,0xD4,0xCA,0xD0,0xEA, +0xA5,0xD5,0xD0,0x04,0x85,0xD4,0x18,0x60,0xA5,0xD4,0x29,0x7F,0xC9,0x71,0x90,0x01, +0x60,0xC9,0x0F,0xB0,0x03,0x20,0x44,0xDA,0x18,0x60,0xA2,0xD4,0xD0,0x02,0xA2,0xE0, +0x86,0xF9,0x85,0xF7,0x85,0xF8,0xA0,0x04,0xB5,0x04,0x95,0x05,0xCA,0x88,0xD0,0xF8, +0xA9,0x00,0x95,0x05,0xA6,0xF9,0xC6,0xF7,0xD0,0xEC,0xB5,0x00,0x18,0x65,0xF8,0x95, +0x00,0x60,0xA2,0x0A,0xB5,0xD4,0x95,0xD5,0xCA,0x10,0xF9,0xA9,0x00,0x85,0xD4,0x60, +0x85,0xF7,0xA2,0x00,0xA0,0x00,0x20,0x93,0xDC,0x38,0xE9,0x01,0x85,0xF7,0xB5,0xD5, +0x4A,0x4A,0x4A,0x4A,0x20,0x9D,0xDC,0xB5,0xD5,0x29,0x0F,0x20,0x9D,0xDC,0xE8,0xE0, +0x05,0x90,0xE3,0xA5,0xF7,0xD0,0x05,0xA9,0x2E,0x20,0x9F,0xDC,0x60,0x09,0x30,0x99, +0x80,0x05,0xC8,0x60,0xA2,0x0A,0xBD,0x80,0x05,0xC9,0x2E,0xF0,0x07,0xC9,0x30,0xD0, +0x07,0xCA,0xD0,0xF2,0xCA,0xBD,0x80,0x05,0x60,0x20,0xEB,0xDB,0xA5,0xEC,0x29,0x0F, +0x60,0x38,0xA5,0xF3,0xE9,0x01,0x85,0xF3,0xA5,0xF4,0xE9,0x00,0x85,0xF4,0x60,0xA5, +0xD4,0x45,0xE0,0x29,0x80,0x85,0xEE,0x06,0xE0,0x46,0xE0,0xA5,0xD4,0x29,0x7F,0x60, +0x05,0xEE,0x85,0xED,0xA9,0x00,0x85,0xD4,0x85,0xE0,0x20,0x28,0xDD,0x20,0xE7,0xDB, +0xA5,0xEC,0x29,0x0F,0x85,0xE6,0xA9,0x05,0x85,0xF5,0x20,0x34,0xDD,0x20,0x44,0xDA, +0x60,0xA2,0xD9,0xD0,0x06,0xA2,0xD9,0xD0,0x08,0xA2,0xDF,0xA0,0xE5,0xD0,0x04,0xA2, +0xDF,0xA0,0xEB,0xA9,0x05,0x85,0xF7,0x18,0xF8,0xB5,0x00,0x79,0x00,0x00,0x95,0x00, +0xCA,0x88,0xC6,0xF7,0x10,0xF3,0xD8,0x60,0xA0,0x05,0xB9,0xE0,0x00,0x99,0xE6,0x00, +0x88,0x10,0xF7,0x60,0xA0,0x05,0xB9,0xD4,0x00,0x99,0xDA,0x00,0x88,0x10,0xF7,0x60, +0x86,0xFE,0x84,0xFF,0x85,0xEF,0xA2,0xE0,0xA0,0x05,0x20,0xA7,0xDD,0x20,0xB6,0xDD, +0xA6,0xFE,0xA4,0xFF,0x20,0x89,0xDD,0xC6,0xEF,0xF0,0x2D,0x20,0xDB,0xDA,0xB0,0x28, +0x18,0xA5,0xFE,0x69,0x06,0x85,0xFE,0x90,0x06,0xA5,0xFF,0x69,0x00,0x85,0xFF,0xA6, +0xFE,0xA4,0xFF,0x20,0x98,0xDD,0x20,0x66,0xDA,0xB0,0x0D,0xC6,0xEF,0xF0,0x09,0xA2, +0xE0,0xA0,0x05,0x20,0x98,0xDD,0x30,0xD3,0x60,0x86,0xFC,0x84,0xFD,0xA0,0x05,0xB1, +0xFC,0x99,0xD4,0x00,0x88,0x10,0xF8,0x60,0x86,0xFC,0x84,0xFD,0xA0,0x05,0xB1,0xFC, +0x99,0xE0,0x00,0x88,0x10,0xF8,0x60,0x86,0xFC,0x84,0xFD,0xA0,0x05,0xB9,0xD4,0x00, +0x91,0xFC,0x88,0x10,0xF8,0x60,0xA2,0x05,0xB5,0xD4,0x95,0xE0,0xCA,0x10,0xF9,0x60, +0xA2,0x89,0xA0,0xDE,0x20,0x98,0xDD,0x20,0xDB,0xDA,0xB0,0x7F,0xA9,0x00,0x85,0xF1, +0xA5,0xD4,0x85,0xF0,0x29,0x7F,0x85,0xD4,0x38,0xE9,0x40,0x30,0x26,0xC9,0x04,0x10, +0x6A,0xA2,0xE6,0xA0,0x05,0x20,0xA7,0xDD,0x20,0xD2,0xD9,0xA5,0xD4,0x85,0xF1,0xA5, +0xD5,0xD0,0x58,0x20,0xAA,0xD9,0x20,0xB6,0xDD,0xA2,0xE6,0xA0,0x05,0x20,0x89,0xDD, +0x20,0x60,0xDA,0xA9,0x0A,0xA2,0x4D,0xA0,0xDE,0x20,0x40,0xDD,0x20,0xB6,0xDD,0x20, +0xDB,0xDA,0xA5,0xF1,0xF0,0x23,0x18,0x6A,0x85,0xE0,0xA9,0x01,0x90,0x02,0xA9,0x10, +0x85,0xE1,0xA2,0x04,0xA9,0x00,0x95,0xE2,0xCA,0x10,0xFB,0xA5,0xE0,0x18,0x69,0x40, +0xB0,0x19,0x30,0x17,0x85,0xE0,0x20,0xDB,0xDA,0xA5,0xF0,0x10,0x0D,0x20,0xB6,0xDD, +0xA2,0x8F,0xA0,0xDE,0x20,0x89,0xDD,0x20,0x28,0xDB,0x60,0x38,0x60,0x3D,0x17,0x94, +0x19,0x00,0x00,0x3D,0x57,0x33,0x05,0x00,0x00,0x3E,0x05,0x54,0x76,0x62,0x00,0x3E, +0x32,0x19,0x62,0x27,0x00,0x3F,0x01,0x68,0x60,0x30,0x36,0x3F,0x07,0x32,0x03,0x27, +0x41,0x3F,0x25,0x43,0x34,0x56,0x75,0x3F,0x66,0x27,0x37,0x30,0x50,0x40,0x01,0x15, +0x12,0x92,0x55,0x3F,0x99,0x99,0x99,0x99,0x99,0x3F,0x43,0x42,0x94,0x48,0x19,0x40, +0x01,0x00,0x00,0x00,0x00,0x86,0xFE,0x84,0xFF,0xA2,0xE0,0xA0,0x05,0x20,0xA7,0xDD, +0xA6,0xFE,0xA4,0xFF,0x20,0x98,0xDD,0x20,0x66,0xDA,0xA2,0xE6,0xA0,0x05,0x20,0xA7, +0xDD,0xA2,0xE0,0xA0,0x05,0x20,0x89,0xDD,0xA6,0xFE,0xA4,0xFF,0x20,0x98,0xDD,0x20, +0x60,0xDA,0xA2,0xE6,0xA0,0x05,0x20,0x98,0xDD,0x20,0x28,0xDB,0x60,0xA9,0x01,0xD0, +0x02,0xA9,0x00,0x85,0xF0,0xA5,0xD4,0xF0,0x05,0x30,0x03,0x4C,0xF6,0xDF,0x38,0x60, +0xE9,0x40,0x0A,0x85,0xF1,0xA5,0xD5,0x29,0xF0,0xD0,0x04,0xA9,0x01,0xD0,0x04,0xE6, +0xF1,0xA9,0x10,0x85,0xE1,0xA2,0x04,0xA9,0x00,0x95,0xE2,0xCA,0x10,0xFB,0x20,0x28, +0xDB,0xA2,0x66,0xA0,0xDF,0x20,0x95,0xDE,0xA2,0xE6,0xA0,0x05,0x20,0xA7,0xDD,0x20, +0xB6,0xDD,0x20,0xDB,0xDA,0xA9,0x0A,0xA2,0x72,0xA0,0xDF,0x20,0x40,0xDD,0xA2,0xE6, +0xA0,0x05,0x20,0x98,0xDD,0x20,0xDB,0xDA,0xA2,0x6C,0xA0,0xDF,0x20,0x98,0xDD,0x20, +0x66,0xDA,0x20,0xB6,0xDD,0xA9,0x00,0x85,0xD5,0xA5,0xF1,0x85,0xD4,0x10,0x07,0x49, +0xFF,0x18,0x69,0x01,0x85,0xD4,0x20,0xAA,0xD9,0x24,0xF1,0x10,0x06,0xA9,0x80,0x05, +0xD4,0x85,0xD4,0x20,0x66,0xDA,0xA5,0xF0,0xF0,0x0A,0xA2,0x89,0xA0,0xDE,0x20,0x98, +0xDD,0x20,0x28,0xDB,0x18,0x60,0x40,0x03,0x16,0x22,0x77,0x66,0x3F,0x50,0x00,0x00, +0x00,0x00,0x3F,0x49,0x15,0x57,0x11,0x08,0xBF,0x51,0x70,0x49,0x47,0x08,0x3F,0x39, +0x20,0x57,0x61,0x95,0xBF,0x04,0x39,0x63,0x03,0x55,0x3F,0x10,0x09,0x30,0x12,0x64, +0x3F,0x09,0x39,0x08,0x04,0x60,0x3F,0x12,0x42,0x58,0x47,0x42,0x3F,0x17,0x37,0x12, +0x06,0x08,0x3F,0x28,0x95,0x29,0x71,0x17,0x3F,0x86,0x85,0x88,0x96,0x44,0x3E,0x16, +0x05,0x44,0x49,0x00,0xBE,0x95,0x68,0x38,0x45,0x00,0x3F,0x02,0x68,0x79,0x94,0x16, +0xBF,0x04,0x92,0x78,0x90,0x80,0x3F,0x07,0x03,0x15,0x20,0x00,0xBF,0x08,0x92,0x29, +0x12,0x44,0x3F,0x11,0x08,0x40,0x09,0x11,0xBF,0x14,0x28,0x31,0x56,0x04,0x3F,0x19, +0x99,0x98,0x77,0x44,0xBF,0x33,0x33,0x33,0x31,0x13,0x3F,0x99,0x99,0x99,0x99,0x99, +0x3F,0x78,0x53,0x98,0x16,0x34,0xA5,0xD4,0x85,0xE0,0x38,0x4C,0xE0,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18,0x00, +0x00,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x66,0xFF,0x66,0x66,0xFF,0x66,0x00, +0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00,0x00,0x66,0x6C,0x18,0x30,0x66,0x46,0x00, +0x1C,0x36,0x1C,0x38,0x6F,0x66,0x3B,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00, +0x00,0x0E,0x1C,0x18,0x18,0x1C,0x0E,0x00,0x00,0x70,0x38,0x18,0x18,0x38,0x70,0x00, +0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x40,0x00, +0x00,0x3C,0x66,0x6E,0x76,0x66,0x3C,0x00,0x00,0x18,0x38,0x18,0x18,0x18,0x7E,0x00, +0x00,0x3C,0x66,0x0C,0x18,0x30,0x7E,0x00,0x00,0x7E,0x0C,0x18,0x0C,0x66,0x3C,0x00, +0x00,0x0C,0x1C,0x3C,0x6C,0x7E,0x0C,0x00,0x00,0x7E,0x60,0x7C,0x06,0x66,0x3C,0x00, +0x00,0x3C,0x60,0x7C,0x66,0x66,0x3C,0x00,0x00,0x7E,0x06,0x0C,0x18,0x30,0x30,0x00, +0x00,0x3C,0x66,0x3C,0x66,0x66,0x3C,0x00,0x00,0x3C,0x66,0x3E,0x06,0x0C,0x38,0x00, +0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x30, +0x06,0x0C,0x18,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00, +0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00,0x00,0x3C,0x66,0x0C,0x18,0x00,0x18,0x00, +0x00,0x3C,0x66,0x6E,0x6E,0x60,0x3E,0x00,0x00,0x18,0x3C,0x66,0x66,0x7E,0x66,0x00, +0x00,0x7C,0x66,0x7C,0x66,0x66,0x7C,0x00,0x00,0x3C,0x66,0x60,0x60,0x66,0x3C,0x00, +0x00,0x78,0x6C,0x66,0x66,0x6C,0x78,0x00,0x00,0x7E,0x60,0x7C,0x60,0x60,0x7E,0x00, +0x00,0x7E,0x60,0x7C,0x60,0x60,0x60,0x00,0x00,0x3E,0x60,0x60,0x6E,0x66,0x3E,0x00, +0x00,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x7E,0x00, +0x00,0x06,0x06,0x06,0x06,0x66,0x3C,0x00,0x00,0x66,0x6C,0x78,0x78,0x6C,0x66,0x00, +0x00,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0x00,0x63,0x77,0x7F,0x6B,0x63,0x63,0x00, +0x00,0x66,0x76,0x7E,0x7E,0x6E,0x66,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x00, +0x00,0x7C,0x66,0x66,0x7C,0x60,0x60,0x00,0x00,0x3C,0x66,0x66,0x66,0x6C,0x36,0x00, +0x00,0x7C,0x66,0x66,0x7C,0x6C,0x66,0x00,0x00,0x3C,0x60,0x3C,0x06,0x06,0x3C,0x00, +0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x7E,0x00, +0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00, +0x00,0x66,0x66,0x3C,0x3C,0x66,0x66,0x00,0x00,0x66,0x66,0x3C,0x18,0x18,0x18,0x00, +0x00,0x7E,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x1E,0x18,0x18,0x18,0x18,0x1E,0x00, +0x00,0x40,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x78,0x00, +0x00,0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00, +0x00,0x36,0x7F,0x7F,0x3E,0x1C,0x08,0x00,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18, +0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x18,0x18,0x18,0xF8,0xF8,0x00,0x00,0x00, +0x18,0x18,0x18,0xF8,0xF8,0x18,0x18,0x18,0x00,0x00,0x00,0xF8,0xF8,0x18,0x18,0x18, +0x03,0x07,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0x03, +0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F, +0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00, +0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0, +0x00,0x1C,0x1C,0x77,0x77,0x08,0x1C,0x00,0x00,0x00,0x00,0x1F,0x1F,0x18,0x18,0x18, +0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x18,0x18,0x18,0xFF,0xFF,0x18,0x18,0x18, +0x00,0x00,0x3C,0x7E,0x7E,0x7E,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, +0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0xFF,0xFF,0x18,0x18,0x18, +0x18,0x18,0x18,0xFF,0xFF,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0, +0x18,0x18,0x18,0x1F,0x1F,0x00,0x00,0x00,0x78,0x60,0x78,0x60,0x7E,0x18,0x1E,0x00, +0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x00,0x00,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00, +0x00,0x18,0x30,0x7E,0x30,0x18,0x00,0x00,0x00,0x18,0x0C,0x7E,0x0C,0x18,0x00,0x00, +0x00,0x18,0x3C,0x7E,0x7E,0x3C,0x18,0x00,0x00,0x00,0x3C,0x06,0x3E,0x66,0x3E,0x00, +0x00,0x60,0x60,0x7C,0x66,0x66,0x7C,0x00,0x00,0x00,0x3C,0x60,0x60,0x60,0x3C,0x00, +0x00,0x06,0x06,0x3E,0x66,0x66,0x3E,0x00,0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00, +0x00,0x0E,0x18,0x3E,0x18,0x18,0x18,0x00,0x00,0x00,0x3E,0x66,0x66,0x3E,0x06,0x7C, +0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x00,0x00,0x18,0x00,0x38,0x18,0x18,0x3C,0x00, +0x00,0x06,0x00,0x06,0x06,0x06,0x06,0x3C,0x00,0x60,0x60,0x6C,0x78,0x6C,0x66,0x00, +0x00,0x38,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00, +0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00, +0x00,0x00,0x7C,0x66,0x66,0x7C,0x60,0x60,0x00,0x00,0x3E,0x66,0x66,0x3E,0x06,0x06, +0x00,0x00,0x7C,0x66,0x60,0x60,0x60,0x00,0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00, +0x00,0x18,0x7E,0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3E,0x00, +0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x63,0x6B,0x7F,0x3E,0x36,0x00, +0x00,0x00,0x66,0x3C,0x18,0x3C,0x66,0x00,0x00,0x00,0x66,0x66,0x66,0x3E,0x0C,0x78, +0x00,0x00,0x7E,0x0C,0x18,0x30,0x7E,0x00,0x00,0x18,0x3C,0x7E,0x7E,0x18,0x3C,0x00, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x7E,0x78,0x7C,0x6E,0x66,0x06,0x00, +0x08,0x18,0x38,0x78,0x38,0x18,0x08,0x00,0x10,0x18,0x1C,0x1E,0x1C,0x18,0x10,0x00, +0x93,0xEF,0x2D,0xF2,0x49,0xF2,0xAF,0xF2,0x1D,0xF2,0x2C,0xF2,0x4C,0x6E,0xEF,0x00, +0x8D,0xEF,0x2D,0xF2,0x7F,0xF1,0xA3,0xF1,0x1D,0xF2,0xAE,0xF9,0x4C,0x6E,0xEF,0x00, +0x1D,0xF2,0x1D,0xF2,0xFC,0xF2,0x2C,0xF2,0x1D,0xF2,0x2C,0xF2,0x4C,0x6E,0xEF,0x00, +0xC1,0xFE,0x06,0xFF,0xC0,0xFE,0xCA,0xFE,0xA2,0xFE,0xC0,0xFE,0x4C,0x99,0xFE,0x00, +0xE5,0xFC,0xCE,0xFD,0x79,0xFD,0xB3,0xFD,0xCB,0xFD,0xE4,0xFC,0x4C,0xDB,0xFC,0x00, +0x4C,0xA3,0xC6,0x4C,0xB3,0xC6,0x4C,0xDF,0xE4,0x4C,0x33,0xC9,0x4C,0x72,0xC2,0x4C, +0xE2,0xC0,0x4C,0x8A,0xC2,0x4C,0x5C,0xE9,0x4C,0x17,0xEC,0x4C,0x0C,0xC0,0x4C,0xC1, +0xE4,0x4C,0x23,0xF2,0x4C,0x90,0xC2,0x4C,0xC8,0xC2,0x4C,0x8D,0xFD,0x4C,0xF7,0xFC, +0x4C,0x23,0xF2,0x4C,0x00,0x50,0x4C,0xBC,0xEE,0x4C,0x15,0xE9,0x4C,0x98,0xE8,0x90, +0xC9,0x95,0xC9,0x9A,0xC9,0x9F,0xC9,0xA4,0xC9,0xA9,0xC9,0x4C,0x0C,0xC9,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x60,0xA2,0x00,0xA9,0xFF,0x9D,0x40,0x03,0xA9,0xDB,0x9D,0x46,0x03,0xA9,0xE4,0x9D, +0x47,0x03,0x8A,0x18,0x69,0x10,0xAA,0xC9,0x80,0x90,0xE8,0x60,0xA0,0x85,0x60,0x85, +0x2F,0x86,0x2E,0x8A,0x29,0x0F,0xD0,0x04,0xE0,0x80,0x90,0x05,0xA0,0x86,0x4C,0x70, +0xE6,0xA0,0x00,0xBD,0x40,0x03,0x99,0x20,0x00,0xE8,0xC8,0xC0,0x0C,0x90,0xF4,0xA5, +0x20,0xC9,0x7F,0xD0,0x15,0xA5,0x22,0xC9,0x0C,0xF0,0x71,0xAD,0xE9,0x02,0xD0,0x05, +0xA0,0x82,0x4C,0x70,0xE6,0x20,0x29,0xCA,0x30,0xF8,0xA0,0x84,0xA5,0x22,0xC9,0x03, +0x90,0x25,0xA8,0xC0,0x0E,0x90,0x02,0xA0,0x0E,0x84,0x17,0xB9,0x2A,0xE7,0xF0,0x0F, +0xC9,0x02,0xF0,0x48,0xC9,0x08,0xB0,0x5F,0xC9,0x04,0xF0,0x76,0x4C,0x1E,0xE6,0xA5, +0x20,0xC9,0xFF,0xF0,0x05,0xA0,0x81,0x4C,0x70,0xE6,0xAD,0xE9,0x02,0xD0,0x27,0x20, +0xFF,0xE6,0xB0,0x22,0xA9,0x00,0x8D,0xEA,0x02,0x8D,0xEB,0x02,0x20,0x95,0xE6,0xB0, +0xE6,0x20,0xEA,0xE6,0xA9,0x0B,0x85,0x17,0x20,0x95,0xE6,0xA5,0x2C,0x85,0x26,0xA5, +0x2D,0x85,0x27,0x4C,0x72,0xE6,0x20,0xF9,0xEE,0x4C,0x70,0xE6,0xA0,0x01,0x84,0x23, +0x20,0x95,0xE6,0xB0,0x03,0x20,0xEA,0xE6,0xA9,0xFF,0x85,0x20,0xA9,0xE4,0x85,0x27, +0xA9,0xDB,0x85,0x26,0x4C,0x72,0xE6,0xA5,0x20,0xC9,0xFF,0xD0,0x05,0x20,0xFF,0xE6, +0xB0,0xA5,0x20,0x95,0xE6,0x20,0xEA,0xE6,0xA6,0x2E,0xBD,0x40,0x03,0x85,0x20,0x4C, +0x72,0xE6,0xA5,0x22,0x25,0x2A,0xD0,0x05,0xA0,0x83,0x4C,0x70,0xE6,0x20,0x95,0xE6, +0xB0,0xF8,0xA5,0x28,0x05,0x29,0xD0,0x08,0x20,0xEA,0xE6,0x85,0x2F,0x4C,0x72,0xE6, +0x20,0xEA,0xE6,0x85,0x2F,0x30,0x41,0xA0,0x00,0x91,0x24,0x20,0xD1,0xE6,0xA5,0x22, +0x29,0x02,0xD0,0x0C,0xA5,0x2F,0xC9,0x9B,0xD0,0x06,0x20,0xBB,0xE6,0x4C,0x18,0xE6, +0x20,0xBB,0xE6,0xD0,0xDB,0xA5,0x22,0x29,0x02,0xD0,0x1D,0x20,0xEA,0xE6,0x85,0x2F, +0x30,0x0A,0xA5,0x2F,0xC9,0x9B,0xD0,0xF3,0xA9,0x89,0x85,0x23,0x20,0xC8,0xE6,0xA0, +0x00,0xA9,0x9B,0x91,0x24,0x20,0xD1,0xE6,0x20,0xD8,0xE6,0x4C,0x72,0xE6,0xA5,0x22, +0x25,0x2A,0xD0,0x05,0xA0,0x87,0x4C,0x70,0xE6,0x20,0x95,0xE6,0xB0,0xF8,0xA5,0x28, +0x05,0x29,0xD0,0x06,0xA5,0x2F,0xE6,0x28,0xD0,0x06,0xA0,0x00,0xB1,0x24,0x85,0x2F, +0x20,0xEA,0xE6,0x08,0x20,0xD1,0xE6,0x20,0xBB,0xE6,0x28,0x30,0x1D,0xA5,0x22,0x29, +0x02,0xD0,0x06,0xA5,0x2F,0xC9,0x9B,0xF0,0x11,0xA5,0x28,0x05,0x29,0xD0,0xDB,0xA5, +0x22,0x29,0x02,0xD0,0x05,0xA9,0x9B,0x20,0xEA,0xE6,0x20,0xD8,0xE6,0x4C,0x72,0xE6, +0x84,0x23,0xA4,0x2E,0xB9,0x44,0x03,0x85,0x24,0xB9,0x45,0x03,0x85,0x25,0xA2,0x00, +0x8E,0xE9,0x02,0xB5,0x20,0x99,0x40,0x03,0xE8,0xC8,0xE0,0x0C,0x90,0xF5,0xA5,0x2F, +0xA6,0x2E,0xA4,0x23,0x60,0xA4,0x20,0xC0,0x22,0x90,0x04,0xA0,0x85,0xB0,0x1B,0xB9, +0x1B,0x03,0x85,0x2C,0xB9,0x1C,0x03,0x85,0x2D,0xA4,0x17,0xB9,0x2A,0xE7,0xA8,0xB1, +0x2C,0xAA,0xC8,0xB1,0x2C,0x85,0x2D,0x86,0x2C,0x18,0x60,0xA5,0x28,0xD0,0x02,0xC6, +0x29,0xC6,0x28,0xA5,0x28,0x05,0x29,0x60,0xA5,0x24,0xD0,0x02,0xC6,0x25,0xC6,0x24, +0x60,0xE6,0x24,0xD0,0x02,0xE6,0x25,0x60,0xA6,0x2E,0x38,0xBD,0x48,0x03,0xE5,0x28, +0x85,0x28,0xBD,0x49,0x03,0xE5,0x29,0x85,0x29,0x60,0xA0,0x92,0x20,0xF4,0xE6,0x84, +0x23,0xC0,0x00,0x60,0xAA,0xA5,0x2D,0x48,0xA5,0x2C,0x48,0x8A,0xA6,0x2E,0x60,0x38, +0xA0,0x01,0xB1,0x24,0xE9,0x31,0x30,0x04,0xC9,0x09,0x90,0x02,0xA9,0x00,0x85,0x21, +0xE6,0x21,0xA0,0x00,0xB1,0x24,0xF0,0x0C,0xA0,0x21,0xD9,0x1A,0x03,0xF0,0x09,0x88, +0x88,0x88,0x10,0xF6,0xA0,0x82,0x38,0x60,0x98,0x85,0x20,0x18,0x60,0x00,0x04,0x04, +0x04,0x04,0x06,0x06,0x06,0x06,0x02,0x08,0x0A,0xA5,0x08,0xF0,0x25,0xA9,0xE9,0x85, +0x4A,0xA9,0x03,0x85,0x4B,0xA0,0x12,0x18,0xB1,0x4A,0xAA,0xC8,0x71,0x4A,0xF0,0x26, +0xB1,0x4A,0x85,0x4B,0x86,0x4A,0x20,0x56,0xCB,0xD0,0x1B,0x20,0x94,0xE8,0xB0,0x16, +0x90,0xE3,0xA9,0x00,0x8D,0xFB,0x03,0x8D,0xFC,0x03,0xA9,0x4F,0xD0,0x2D,0xA9,0x00, +0xA8,0x20,0xBE,0xE7,0x10,0x01,0x60,0x18,0xAD,0xE7,0x02,0x6D,0xEA,0x02,0x8D,0x12, +0x03,0xAD,0xE8,0x02,0x6D,0xEB,0x02,0x8D,0x13,0x03,0x38,0xAD,0xE5,0x02,0xED,0x12, +0x03,0xAD,0xE6,0x02,0xED,0x13,0x03,0xB0,0x09,0xA9,0x4E,0xA8,0x20,0xBE,0xE7,0x4C, +0x6E,0xE7,0xAD,0xEC,0x02,0xAE,0xE7,0x02,0x8E,0xEC,0x02,0xAE,0xE8,0x02,0x8E,0xED, +0x02,0x20,0xDE,0xE7,0x30,0xE3,0x38,0x20,0x9E,0xE8,0xB0,0xDD,0x90,0xB0,0x48,0xA2, +0x09,0xBD,0xD4,0xE7,0x9D,0x00,0x03,0xCA,0x10,0xF7,0x8C,0x0B,0x03,0x68,0x8D,0x0A, +0x03,0x4C,0x59,0xE4,0x4F,0x01,0x40,0x40,0xEA,0x02,0x1E,0x00,0x04,0x00,0x8D,0x13, +0x03,0xA2,0x00,0x8E,0x12,0x03,0xCA,0x8E,0x15,0x03,0xAD,0xEC,0x02,0x6A,0x90,0x08, +0xEE,0xEC,0x02,0xD0,0x03,0xEE,0xED,0x02,0xAD,0xEC,0x02,0x8D,0xD1,0x02,0xAD,0xED, +0x02,0x8D,0xD2,0x02,0xA9,0x16,0x8D,0xCF,0x02,0xA9,0xE8,0x8D,0xD0,0x02,0xA9,0x80, +0x8D,0xD3,0x02,0x4C,0x45,0xC7,0xAE,0x15,0x03,0xE8,0x8E,0x15,0x03,0xF0,0x08,0xAE, +0x15,0x03,0xBD,0x7D,0x03,0x18,0x60,0xA9,0x80,0x8D,0x15,0x03,0x20,0x33,0xE8,0x10, +0xEE,0x38,0x60,0xA2,0x0B,0xBD,0x51,0xE8,0x9D,0x00,0x03,0xCA,0x10,0xF7,0xAE,0x12, +0x03,0x8E,0x0A,0x03,0xE8,0x8E,0x12,0x03,0xAD,0x13,0x03,0x8D,0x00,0x03,0x4C,0x59, +0xE4,0x00,0x01,0x26,0x40,0xFD,0x03,0x1E,0x00,0x80,0x00,0x00,0x00,0x8C,0x12,0x03, +0x8D,0x13,0x03,0xA9,0xE9,0x85,0x4A,0xA9,0x03,0x85,0x4B,0xA0,0x12,0xB1,0x4A,0xAA, +0xC8,0xB1,0x4A,0xCD,0x13,0x03,0xD0,0x07,0xEC,0x12,0x03,0xD0,0x02,0x18,0x60,0xC9, +0x00,0xD0,0x06,0xE0,0x00,0xD0,0x02,0x38,0x60,0x86,0x4A,0x85,0x4B,0x20,0x56,0xCB, +0xD0,0xF5,0xF0,0xD7,0x38,0x08,0xB0,0x28,0x8D,0xED,0x02,0x8C,0xEC,0x02,0x08,0xA9, +0x00,0xA8,0x20,0x5D,0xE8,0xB0,0x27,0xA0,0x12,0xAD,0xEC,0x02,0x91,0x4A,0xAA,0xC8, +0xAD,0xED,0x02,0x91,0x4A,0x86,0x4A,0x85,0x4B,0xA9,0x00,0x91,0x4A,0x88,0x91,0x4A, +0x20,0x00,0xE9,0x90,0x0C,0xAD,0xED,0x02,0xAC,0xEC,0x02,0x20,0x15,0xE9,0x28,0x38, +0x60,0x28,0xB0,0x09,0xA9,0x00,0xA0,0x10,0x91,0x4A,0xC8,0x91,0x4A,0x18,0xA0,0x10, +0xAD,0xE7,0x02,0x71,0x4A,0x8D,0xE7,0x02,0xC8,0xAD,0xE8,0x02,0x71,0x4A,0x8D,0xE8, +0x02,0xA0,0x0F,0xA9,0x00,0x91,0x4A,0x20,0x56,0xCB,0xA0,0x0F,0x91,0x4A,0x18,0x60, +0x18,0xA5,0x4A,0x69,0x0C,0x8D,0x12,0x03,0xA5,0x4B,0x69,0x00,0x8D,0x13,0x03,0x6C, +0x12,0x03,0x4C,0x72,0xC2,0x20,0x5D,0xE8,0xB0,0x3B,0xA8,0xA5,0x4A,0x48,0xA5,0x4B, +0x48,0x86,0x4A,0x84,0x4B,0xAD,0x44,0x02,0xD0,0x0F,0xA0,0x10,0x18,0xB1,0x4A,0xC8, +0x71,0x4A,0xD0,0x1F,0x20,0x56,0xCB,0xD0,0x1A,0xA0,0x12,0xB1,0x4A,0xAA,0xC8,0xB1, +0x4A,0xA8,0x68,0x85,0x4B,0x68,0x85,0x4A,0x98,0xA0,0x13,0x91,0x4A,0x88,0x8A,0x91, +0x4A,0x18,0x60,0x68,0x68,0x38,0x60,0x00,0x00,0x4C,0x33,0xC9,0xA9,0x3C,0x8D,0x02, +0xD3,0xA9,0x3C,0x8D,0x03,0xD3,0xA9,0x03,0x8D,0x32,0x02,0x85,0x41,0x8D,0x0F,0xD2, +0x60,0xBA,0x8E,0x18,0x03,0xA9,0x01,0x85,0x42,0xAD,0x00,0x03,0xC9,0x60,0xD0,0x03, +0x4C,0x9D,0xEB,0xA9,0x00,0x8D,0x0F,0x03,0xA9,0x01,0x8D,0xBD,0x02,0xA9,0x0D,0x8D, +0x9C,0x02,0xA9,0x28,0x8D,0x04,0xD2,0xA9,0x00,0x8D,0x06,0xD2,0x18,0xAD,0x00,0x03, +0x6D,0x01,0x03,0x69,0xFF,0x8D,0x3A,0x02,0xAD,0x02,0x03,0x8D,0x3B,0x02,0xAD,0x0A, +0x03,0x8D,0x3C,0x02,0xAD,0x0B,0x03,0x8D,0x3D,0x02,0x18,0xA9,0x3A,0x85,0x32,0x69, +0x04,0x85,0x34,0xA9,0x02,0x85,0x33,0x85,0x35,0xA9,0x34,0x8D,0x03,0xD3,0x20,0xAF, +0xEC,0xAD,0x3F,0x02,0xD0,0x03,0x98,0xD0,0x08,0xCE,0x9C,0x02,0x10,0xB4,0x4C,0x22, +0xEA,0xAD,0x03,0x03,0x10,0x0D,0xA9,0x0D,0x8D,0x9C,0x02,0x20,0x87,0xEB,0x20,0xAF, +0xEC,0xF0,0x2F,0x20,0x9A,0xEC,0xA9,0x00,0x8D,0x3F,0x02,0x20,0xC0,0xEC,0xF0,0x12, +0x2C,0x03,0x03,0x70,0x07,0xAD,0x3F,0x02,0xD0,0x18,0xF0,0x1E,0x20,0x87,0xEB,0x20, +0xFD,0xEA,0xAD,0x3F,0x02,0xF0,0x05,0xAD,0x19,0x03,0x85,0x30,0xA5,0x30,0xC9,0x01, +0xF0,0x08,0xCE,0xBD,0x02,0x30,0x03,0x4C,0x8D,0xE9,0x20,0x84,0xEC,0xA9,0x00,0x85, +0x42,0xA4,0x30,0x8C,0x03,0x03,0x60,0xA9,0x00,0x8D,0x3F,0x02,0x18,0xA9,0x3E,0x85, +0x32,0x69,0x01,0x85,0x34,0xA9,0x02,0x85,0x33,0x85,0x35,0xA9,0xFF,0x85,0x3C,0x20, +0xFD,0xEA,0xA0,0xFF,0xA5,0x30,0xC9,0x01,0xD0,0x19,0xAD,0x3E,0x02,0xC9,0x41,0xF0, +0x21,0xC9,0x43,0xF0,0x1D,0xC9,0x45,0xD0,0x06,0xA9,0x90,0x85,0x30,0xD0,0x04,0xA9, +0x8B,0x85,0x30,0xA5,0x30,0xC9,0x8A,0xF0,0x07,0xA9,0xFF,0x8D,0x3F,0x02,0xD0,0x02, +0xA0,0x00,0xA5,0x30,0x8D,0x19,0x03,0x60,0xA9,0x01,0x85,0x30,0x20,0x17,0xEC,0xA0, +0x00,0x84,0x31,0x84,0x3B,0x84,0x3A,0xB1,0x32,0x8D,0x0D,0xD2,0x85,0x31,0xA5,0x11, +0xD0,0x03,0x4C,0xC7,0xED,0xA5,0x3A,0xF0,0xF5,0x20,0x84,0xEC,0x60,0x98,0x48,0xE6, +0x32,0xD0,0x02,0xE6,0x33,0xA5,0x32,0xC5,0x34,0xA5,0x33,0xE5,0x35,0x90,0x1C,0xA5, +0x3B,0xD0,0x0B,0xA5,0x31,0x8D,0x0D,0xD2,0xA9,0xFF,0x85,0x3B,0xD0,0x09,0xA5,0x10, +0x09,0x08,0x85,0x10,0x8D,0x0E,0xD2,0x68,0xA8,0x68,0x40,0xA0,0x00,0xB1,0x32,0x8D, +0x0D,0xD2,0x18,0x65,0x31,0x69,0x00,0x85,0x31,0x4C,0xD7,0xEA,0xA5,0x3B,0xF0,0x0B, +0x85,0x3A,0xA5,0x10,0x29,0xF7,0x85,0x10,0x8D,0x0E,0xD2,0x68,0x40,0xA9,0x00,0xAC, +0x0F,0x03,0xD0,0x02,0x85,0x31,0x85,0x38,0x85,0x39,0xA9,0x01,0x85,0x30,0x20,0x40, +0xEC,0xA9,0x3C,0x8D,0x03,0xD3,0xA5,0x11,0xD0,0x03,0x4C,0xC7,0xED,0xAD,0x17,0x03, +0xF0,0x05,0xA5,0x39,0xF0,0xF0,0x60,0xA9,0x8A,0x85,0x30,0x60,0x98,0x48,0xAD,0x0F, +0xD2,0x8D,0x0A,0xD2,0x30,0x04,0xA0,0x8C,0x84,0x30,0x29,0x20,0xD0,0x04,0xA0,0x8E, +0x84,0x30,0xA5,0x38,0xF0,0x13,0xAD,0x0D,0xD2,0xC5,0x31,0xF0,0x04,0xA0,0x8F,0x84, +0x30,0xA9,0xFF,0x85,0x39,0x68,0xA8,0x68,0x40,0xAD,0x0D,0xD2,0xA0,0x00,0x91,0x32, +0x18,0x65,0x31,0x69,0x00,0x85,0x31,0xE6,0x32,0xD0,0x02,0xE6,0x33,0xA5,0x32,0xC5, +0x34,0xA5,0x33,0xE5,0x35,0x90,0xDE,0xA5,0x3C,0xF0,0x06,0xA9,0x00,0x85,0x3C,0xF0, +0xD0,0xA9,0xFF,0x85,0x38,0xD0,0xCE,0x18,0xAD,0x04,0x03,0x85,0x32,0x6D,0x08,0x03, +0x85,0x34,0xAD,0x05,0x03,0x85,0x33,0x6D,0x09,0x03,0x85,0x35,0x60,0xAD,0x03,0x03, +0x10,0x32,0xA9,0xCC,0x8D,0x04,0xD2,0xA9,0x05,0x8D,0x06,0xD2,0x20,0x17,0xEC,0xA6, +0x62,0xBC,0x15,0xEE,0xAD,0x0B,0x03,0x30,0x03,0xBC,0x11,0xEE,0xA2,0x00,0x20,0xE2, +0xED,0xA9,0x34,0x8D,0x02,0xD3,0xAD,0x17,0x03,0xD0,0xFB,0x20,0x87,0xEB,0x20,0x88, +0xEA,0x4C,0x04,0xEC,0xA9,0xFF,0x8D,0x0F,0x03,0xA6,0x62,0xBC,0x17,0xEE,0xAD,0x0B, +0x03,0x30,0x03,0xBC,0x13,0xEE,0xA2,0x00,0x20,0xE2,0xED,0xA9,0x34,0x8D,0x02,0xD3, +0xAD,0x17,0x03,0xD0,0xFB,0x20,0x87,0xEB,0x20,0x9A,0xEC,0x20,0xE2,0xED,0x20,0x3D, +0xED,0x20,0xFD,0xEA,0xAD,0x0B,0x03,0x30,0x05,0xA9,0x3C,0x8D,0x02,0xD3,0x4C,0x2A, +0xEA,0xA9,0x00,0x8D,0x17,0x03,0x60,0xA9,0x07,0x2D,0x32,0x02,0x09,0x20,0xAC,0x00, +0x03,0xC0,0x60,0xD0,0x0C,0x09,0x08,0xA0,0x07,0x8C,0x02,0xD2,0xA0,0x05,0x8C,0x00, +0xD2,0x8D,0x32,0x02,0x8D,0x0F,0xD2,0xA9,0xC7,0x25,0x10,0x09,0x10,0x4C,0x56,0xEC, +0xA9,0x07,0x2D,0x32,0x02,0x09,0x10,0x8D,0x32,0x02,0x8D,0x0F,0xD2,0x8D,0x0A,0xD2, +0xA9,0xC7,0x25,0x10,0x09,0x20,0x85,0x10,0x8D,0x0E,0xD2,0xA9,0x28,0x8D,0x08,0xD2, +0xA2,0x06,0xA9,0xA8,0xA4,0x41,0xD0,0x02,0xA9,0xA0,0x9D,0x01,0xD2,0xCA,0xCA,0x10, +0xF9,0xA9,0xA0,0x8D,0x05,0xD2,0xAC,0x00,0x03,0xC0,0x60,0xF0,0x06,0x8D,0x01,0xD2, +0x8D,0x03,0xD2,0x60,0xEA,0xA9,0xC7,0x25,0x10,0x85,0x10,0x8D,0x0E,0xD2,0xA2,0x06, +0xA9,0x00,0x9D,0x01,0xD2,0xCA,0xCA,0x10,0xF9,0x60,0xAD,0x06,0x03,0x6A,0x6A,0xA8, +0x29,0x3F,0xAA,0x98,0x6A,0x29,0xC0,0xA8,0x60,0x2C,0xEB,0xAD,0xEA,0xEC,0xEA,0xA2, +0x01,0xA0,0xFF,0x88,0xD0,0xFD,0xCA,0xD0,0xF8,0x20,0x88,0xEA,0xA0,0x02,0xA2,0x00, +0x20,0xE2,0xED,0x20,0x37,0xEA,0x98,0x60,0x8D,0x10,0x03,0x8C,0x11,0x03,0x20,0x2E, +0xED,0x8D,0x10,0x03,0xAD,0x0C,0x03,0x20,0x2E,0xED,0x8D,0x0C,0x03,0xAD,0x10,0x03, +0x38,0xED,0x0C,0x03,0x8D,0x12,0x03,0xAD,0x11,0x03,0x38,0xED,0x0D,0x03,0xA8,0xA6, +0x62,0xA9,0x00,0x38,0xFD,0x19,0xEE,0x18,0x7D,0x19,0xEE,0x88,0x10,0xF9,0x18,0x6D, +0x12,0x03,0xA8,0x4A,0x4A,0x4A,0x0A,0x38,0xE9,0x16,0xAA,0x98,0x29,0x07,0xA8,0xA9, +0xF5,0x18,0x69,0x0B,0x88,0x10,0xFA,0xA0,0x00,0x38,0xE9,0x07,0x10,0x01,0x88,0x18, +0x7D,0xF9,0xED,0x8D,0xEE,0x02,0x98,0x7D,0xFA,0xED,0x8D,0xEF,0x02,0x60,0xC9,0x7C, +0x30,0x04,0x38,0xE9,0x7C,0x60,0x18,0xA6,0x62,0x7D,0x1B,0xEE,0x60,0xA5,0x11,0xD0, +0x03,0x4C,0xC7,0xED,0x78,0xAD,0x17,0x03,0xD0,0x02,0xF0,0x25,0xAD,0x0F,0xD2,0x29, +0x10,0xD0,0xEA,0x8D,0x16,0x03,0xAE,0x0B,0xD4,0xA4,0x14,0x8E,0x0C,0x03,0x8C,0x0D, +0x03,0xA2,0x01,0x8E,0x15,0x03,0xA0,0x0A,0xA5,0x11,0xF0,0x5B,0xAD,0x17,0x03,0xD0, +0x04,0x58,0x4C,0x27,0xEB,0xAD,0x0F,0xD2,0x29,0x10,0xCD,0x16,0x03,0xF0,0xE9,0x8D, +0x16,0x03,0x88,0xD0,0xE3,0xCE,0x15,0x03,0x30,0x0C,0xAD,0x0B,0xD4,0xA4,0x14,0x20, +0xC8,0xEC,0xA0,0x09,0xD0,0xD2,0xAD,0xEE,0x02,0x8D,0x04,0xD2,0xAD,0xEF,0x02,0x8D, +0x06,0xD2,0xA9,0x00,0x8D,0x0F,0xD2,0xAD,0x32,0x02,0x8D,0x0F,0xD2,0xA9,0x55,0x91, +0x32,0xC8,0x91,0x32,0xA9,0xAA,0x85,0x31,0x18,0xA5,0x32,0x69,0x02,0x85,0x32,0xA5, +0x33,0x69,0x00,0x85,0x33,0x58,0x60,0x20,0x84,0xEC,0xA9,0x3C,0x8D,0x02,0xD3,0xA9, +0x3C,0x8D,0x03,0xD3,0xA9,0x80,0x85,0x30,0xAE,0x18,0x03,0x9A,0xC6,0x11,0x58,0x4C, +0x2A,0xEA,0xA9,0x11,0x8D,0x26,0x02,0xA9,0xEC,0x8D,0x27,0x02,0xA9,0x01,0x78,0x20, +0x5C,0xE4,0xA9,0x01,0x8D,0x17,0x03,0x58,0x60,0xE8,0x03,0x43,0x04,0x9E,0x04,0xF9, +0x04,0x54,0x05,0xAF,0x05,0x0A,0x06,0x65,0x06,0xC0,0x06,0x1A,0x07,0x75,0x07,0xD0, +0x07,0xB4,0x96,0x78,0x64,0x0F,0x0D,0x0A,0x08,0x83,0x9C,0x07,0x20,0x18,0x10,0x0A, +0x0A,0x10,0x1C,0x34,0x64,0xC4,0xC4,0xC4,0xC4,0x1C,0x10,0x64,0xC4,0x17,0x17,0x0B, +0x17,0x2F,0x2F,0x5F,0x5F,0x61,0x61,0x61,0x61,0x17,0x0B,0xBF,0x61,0x13,0x13,0x09, +0x13,0x27,0x27,0x4F,0x4F,0x41,0x41,0x41,0x41,0x13,0x09,0x9F,0x41,0x02,0x06,0x07, +0x08,0x09,0x0A,0x0B,0x0D,0x0F,0x0F,0x0F,0x0F,0x04,0x05,0x0C,0x0E,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x03,0x02,0x02, +0x01,0x01,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x02,0x03,0x28,0x14,0x14, +0x28,0x50,0x50,0xA0,0xA0,0x40,0x50,0x50,0x50,0x28,0x28,0xA0,0xA0,0x18,0x18,0x0C, +0x18,0x30,0x30,0x60,0x60,0xC0,0xC0,0xC0,0xC0,0x18,0x0C,0xC0,0xC0,0x00,0x00,0x00, +0x02,0x03,0x02,0x03,0x02,0x03,0x01,0x01,0x01,0x00,0x00,0x03,0x02,0xFF,0xF0,0x0F, +0xC0,0x30,0x0C,0x03,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x48,0x98,0x48,0x8A, +0xA2,0x00,0xDD,0x1A,0x03,0xF0,0x1E,0xE8,0xE8,0xE8,0xE0,0x22,0x30,0xF4,0xA2,0x00, +0xA8,0xA9,0x00,0xDD,0x1A,0x03,0xF0,0x13,0xE8,0xE8,0xE8,0xE0,0x22,0x30,0xF4,0x68, +0x68,0xA0,0xFF,0x38,0x60,0x68,0xA8,0x68,0xE8,0x38,0x60,0x98,0x9D,0x1A,0x03,0x68, +0x9D,0x1B,0x03,0x68,0x9D,0x1C,0x03,0x18,0x60,0xA0,0x00,0xB1,0x24,0xA4,0x21,0x20, +0xBE,0xE7,0x10,0x03,0xA0,0x82,0x60,0xA9,0x7F,0x85,0x20,0xA9,0x25,0x85,0x26,0xA9, +0xEF,0x85,0x27,0xAD,0xEC,0x02,0xAE,0x2E,0x00,0x9D,0x4D,0x03,0xA0,0x00,0xB1,0x24, +0x9D,0x4C,0x03,0xA0,0x01,0x60,0x48,0x8A,0x48,0x29,0x0F,0xD0,0x10,0xE0,0x80,0x10, +0x0C,0xAD,0xE9,0x02,0xD0,0x0B,0xA0,0x82,0x68,0x68,0xC0,0x00,0x60,0xA0,0x86,0x30, +0xF7,0x8E,0x2E,0x00,0xA0,0x00,0xBD,0x40,0x03,0x99,0x20,0x00,0xE8,0xC8,0xC0,0x0C, +0x30,0xF4,0x20,0x29,0xCA,0x30,0xE1,0x68,0xAA,0x68,0xA8,0xA5,0x27,0x48,0xA5,0x26, +0x48,0x98,0xA0,0x92,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x05,0xFD,0xA9,0xFF, +0x8D,0xFC,0x02,0xAD,0xE4,0x02,0x85,0x6A,0xA9,0x40,0x8D,0xBE,0x02,0xA9,0x51,0x85, +0x79,0xA9,0xFB,0x85,0x7A,0xA9,0x11,0x85,0x60,0xA9,0xFC,0x85,0x61,0x60,0xA5,0x2B, +0x29,0x0F,0xD0,0x08,0xA5,0x2A,0x29,0x0F,0x85,0x2A,0xA9,0x00,0x85,0x57,0xC9,0x10, +0x90,0x05,0xA9,0x91,0x4C,0x54,0xF1,0xA9,0xE0,0x8D,0xF4,0x02,0xA9,0xCC,0x8D,0x6B, +0x02,0xA9,0x02,0x8D,0xF3,0x02,0x8D,0x2F,0x02,0xA9,0x01,0x85,0x4C,0xA9,0xC0,0x05, +0x10,0x85,0x10,0x8D,0x0E,0xD2,0xA9,0x40,0x8D,0x0E,0xD4,0x2C,0x6E,0x02,0x10,0x0C, +0xA9,0xC4,0x8D,0x00,0x02,0xA9,0xFC,0x8D,0x01,0x02,0xA9,0xC0,0x8D,0x0E,0xD4,0xA9, +0x00,0x8D,0x93,0x02,0x85,0x64,0x85,0x7B,0x8D,0xF0,0x02,0xA0,0x0E,0xA9,0x01,0x99, +0xA3,0x02,0x88,0x10,0xFA,0xA2,0x04,0xBD,0x08,0xFB,0x9D,0xC4,0x02,0xCA,0x10,0xF7, +0xA4,0x6A,0x88,0x8C,0x95,0x02,0xA9,0x60,0x8D,0x94,0x02,0xA6,0x57,0xBD,0x4D,0xEE, +0x85,0x51,0xA5,0x6A,0x85,0x65,0xBC,0x1D,0xEE,0xA9,0x28,0x20,0x7A,0xF5,0x88,0xD0, +0xF8,0xAD,0x6F,0x02,0x29,0x3F,0x85,0x67,0xA8,0xE0,0x08,0x90,0x1F,0xE0,0x0F,0xF0, +0x0D,0xE0,0x0C,0xB0,0x17,0x8A,0x6A,0x6A,0x6A,0x29,0xC0,0x05,0x67,0xA8,0xA9,0x10, +0x20,0x7A,0xF5,0xE0,0x0B,0xD0,0x05,0xA9,0x06,0x8D,0xC8,0x02,0x8C,0x6F,0x02,0xA5, +0x64,0x85,0x58,0xA5,0x65,0x85,0x59,0xAD,0x0B,0xD4,0xC9,0x7A,0xD0,0xF9,0x20,0x78, +0xF5,0xBD,0x5D,0xEE,0xF0,0x06,0xA9,0xFF,0x85,0x64,0xC6,0x65,0x20,0x65,0xF5,0xA5, +0x64,0x85,0x68,0xA5,0x65,0x85,0x69,0xA9,0x41,0x20,0x70,0xF5,0x86,0x66,0xA9,0x18, +0x8D,0xBF,0x02,0xA5,0x57,0xC9,0x0C,0xB0,0x04,0xC9,0x09,0xB0,0x39,0xA5,0x2A,0x29, +0x10,0xF0,0x33,0xA9,0x04,0x8D,0xBF,0x02,0xA2,0x02,0xAD,0x6E,0x02,0xF0,0x03,0x20, +0xA0,0xF5,0xA9,0x02,0x20,0x69,0xF5,0xCA,0x10,0xF8,0xA4,0x6A,0x88,0x98,0x20,0x70, +0xF5,0xA9,0x60,0x20,0x70,0xF5,0xA9,0x42,0x20,0x69,0xF5,0x18,0xA9,0x10,0x65,0x66, +0xA8,0xBE,0x2D,0xEE,0xD0,0x15,0xA4,0x66,0xBE,0x2D,0xEE,0xA5,0x57,0xD0,0x0C,0xAD, +0x6E,0x02,0xF0,0x07,0x20,0xA0,0xF5,0xA9,0x22,0x85,0x51,0xA5,0x51,0x20,0x70,0xF5, +0xCA,0xD0,0xF8,0xA5,0x57,0xC9,0x08,0x90,0x26,0xC9,0x0F,0xF0,0x04,0xC9,0x0C,0xB0, +0x1E,0xA2,0x5D,0xA5,0x6A,0x38,0xE9,0x10,0x20,0x70,0xF5,0xA9,0x00,0x20,0x70,0xF5, +0xA5,0x51,0x09,0x40,0x20,0x70,0xF5,0xA5,0x51,0x20,0x70,0xF5,0xCA,0xD0,0xF8,0xA5, +0x59,0x20,0x70,0xF5,0xA5,0x58,0x20,0x70,0xF5,0xA5,0x51,0x09,0x40,0x20,0x70,0xF5, +0xA9,0x70,0x20,0x70,0xF5,0xA9,0x70,0x20,0x70,0xF5,0xA5,0x64,0x8D,0x30,0x02,0xA5, +0x65,0x8D,0x31,0x02,0xA9,0x70,0x20,0x70,0xF5,0xA5,0x64,0x8D,0xE5,0x02,0xA5,0x65, +0x8D,0xE6,0x02,0xA0,0x01,0xAD,0x30,0x02,0x91,0x68,0xC8,0xAD,0x31,0x02,0x91,0x68, +0xA5,0x4C,0x10,0x10,0x8D,0xEC,0x03,0x20,0x94,0xEF,0xAD,0xEC,0x03,0xA0,0x00,0x8C, +0xEC,0x03,0xA8,0x60,0xA5,0x2A,0x29,0x20,0xD0,0x0B,0x20,0x20,0xF4,0x8D,0x90,0x02, +0xA5,0x52,0x8D,0x91,0x02,0xA9,0x22,0x0D,0x2F,0x02,0x8D,0x2F,0x02,0x4C,0x0B,0xF2, +0x20,0xCA,0xF6,0x20,0x8F,0xF1,0x20,0x6A,0xF7,0x20,0x0A,0xF6,0x4C,0x1E,0xF2,0x20, +0xAC,0xF5,0xB1,0x64,0x2D,0xA0,0x02,0x46,0x6F,0xB0,0x03,0x4A,0x10,0xF9,0x8D,0xFA, +0x02,0xC9,0x00,0x60,0x8D,0xFB,0x02,0xC9,0x7D,0xD0,0x06,0x20,0x20,0xF4,0x4C,0x0B, +0xF2,0x20,0xCA,0xF6,0xAD,0xFB,0x02,0xC9,0x9B,0xD0,0x06,0x20,0x61,0xF6,0x4C,0x0B, +0xF2,0x20,0xCA,0xF1,0x20,0x0E,0xF6,0x4C,0x0B,0xF2,0xAD,0xFF,0x02,0xD0,0xFB,0xA2, +0x02,0xB5,0x54,0x95,0x5A,0xCA,0x10,0xF9,0xAD,0xFB,0x02,0xA8,0x2A,0x2A,0x2A,0x2A, +0x29,0x03,0xAA,0x98,0x29,0x9F,0x1D,0x49,0xFB,0x8D,0xFA,0x02,0x20,0xAC,0xF5,0xAD, +0xFA,0x02,0x46,0x6F,0xB0,0x04,0x0A,0x4C,0xF2,0xF1,0x2D,0xA0,0x02,0x85,0x50,0xAD, +0xA0,0x02,0x49,0xFF,0x31,0x64,0x05,0x50,0x91,0x64,0x60,0x20,0x8F,0xF1,0x85,0x5D, +0xA6,0x57,0xD0,0x0A,0xAE,0xF0,0x02,0xD0,0x05,0x49,0x80,0x20,0xE9,0xF1,0xA4,0x4C, +0x4C,0x26,0xF2,0x4C,0xFC,0xC8,0xA9,0x01,0x85,0x4C,0xAD,0xFB,0x02,0x60,0x2C,0x6E, +0x02,0x10,0xEB,0xA9,0x40,0x8D,0x0E,0xD4,0xA9,0x00,0x8D,0x6E,0x02,0xA9,0xCE,0x8D, +0x00,0x02,0xA9,0xC0,0x8D,0x01,0x02,0x4C,0x94,0xEF,0x20,0x62,0xF9,0x20,0xBC,0xF6, +0xA5,0x6B,0xD0,0x34,0xA5,0x54,0x85,0x6C,0xA5,0x55,0x85,0x6D,0x20,0xFD,0xF2,0x84, +0x4C,0xAD,0xFB,0x02,0xC9,0x9B,0xF0,0x12,0x20,0xBE,0xF2,0x20,0x62,0xF9,0xA5,0x63, +0xC9,0x71,0xD0,0x03,0x20,0x56,0xF5,0x4C,0x5C,0xF2,0x20,0x18,0xF7,0x20,0xB1,0xF8, +0xA5,0x6C,0x85,0x54,0xA5,0x6D,0x85,0x55,0xA5,0x6B,0xF0,0x11,0xC6,0x6B,0xF0,0x0D, +0xA5,0x4C,0x30,0xF8,0x20,0x80,0xF1,0x8D,0xFB,0x02,0x4C,0x62,0xF9,0x20,0x61,0xF6, +0xA9,0x9B,0x8D,0xFB,0x02,0x20,0x0B,0xF2,0x84,0x4C,0x4C,0x62,0xF9,0x6C,0x64,0x00, +0x8D,0xFB,0x02,0x20,0x62,0xF9,0x20,0xBC,0xF6,0xA9,0x00,0x8D,0xE8,0x03,0x20,0x18, +0xF7,0x20,0x3C,0xF9,0xF0,0x09,0x0E,0xA2,0x02,0x20,0xB4,0xF1,0x4C,0x62,0xF9,0xAD, +0xFE,0x02,0x0D,0xA2,0x02,0xD0,0xEF,0x0E,0xA2,0x02,0xE8,0xAD,0xE8,0x03,0xF0,0x05, +0x8A,0x18,0x69,0x2D,0xAA,0xBD,0x0D,0xFB,0x85,0x64,0xBD,0x0E,0xFB,0x85,0x65,0x20, +0xAD,0xF2,0x20,0x0B,0xF2,0x4C,0x62,0xF9,0xA9,0xFF,0x8D,0xFC,0x02,0xA9,0x00,0x8D, +0xE8,0x03,0xA5,0x2A,0x4A,0xB0,0x6F,0xA9,0x80,0xA6,0x11,0xF0,0x65,0xAD,0xFC,0x02, +0xC9,0xFF,0xF0,0xE9,0x85,0x7C,0xA2,0xFF,0x8E,0xFC,0x02,0xAE,0xDB,0x02,0xD0,0x03, +0x20,0x83,0xF9,0xA8,0xC0,0xC0,0xB0,0xD0,0xB1,0x79,0x8D,0xFB,0x02,0xAA,0x30,0x03, +0x4C,0xB4,0xF3,0xC9,0x80,0xF0,0xC1,0xC9,0x81,0xD0,0x0A,0xAD,0xB6,0x02,0x49,0x80, +0x8D,0xB6,0x02,0xB0,0xB3,0xC9,0x82,0xD0,0x0C,0xAD,0xBE,0x02,0xF0,0x0B,0xA9,0x00, +0x8D,0xBE,0x02,0xF0,0xA3,0xC9,0x83,0xD0,0x07,0xA9,0x40,0x8D,0xBE,0x02,0xD0,0x98, +0xC9,0x84,0xD0,0x08,0xA9,0x80,0x8D,0xBE,0x02,0x4C,0xF8,0xF2,0xC9,0x85,0xD0,0x0B, +0xA9,0x88,0x85,0x4C,0x85,0x11,0xA9,0x9B,0x4C,0xDA,0xF3,0xC9,0x89,0xD0,0x10,0xAD, +0xDB,0x02,0x49,0xFF,0x8D,0xDB,0x02,0xD0,0x03,0x20,0x83,0xF9,0x4C,0xF8,0xF2,0xC9, +0x8E,0xB0,0x12,0xC9,0x8A,0x90,0xF5,0xE9,0x8A,0x06,0x7C,0x10,0x02,0x09,0x04,0xA8, +0xB1,0x60,0x4C,0x2A,0xF3,0xC9,0x92,0xB0,0x0B,0xC9,0x8E,0x90,0xDF,0xE9,0x72,0xEE, +0xE8,0x03,0xD0,0x26,0xA5,0x7C,0xC9,0x40,0xB0,0x15,0xAD,0xFB,0x02,0xC9,0x61,0x90, +0x0E,0xC9,0x7B,0xB0,0x0A,0xAD,0xBE,0x02,0xF0,0x05,0x05,0x7C,0x4C,0x23,0xF3,0x20, +0x3C,0xF9,0xF0,0x09,0xAD,0xFB,0x02,0x4D,0xB6,0x02,0x8D,0xFB,0x02,0x4C,0x1E,0xF2, +0xA9,0x80,0x8D,0xA2,0x02,0x60,0xC6,0x54,0x10,0x06,0xAE,0xBF,0x02,0xCA,0x86,0x54, +0x4C,0x0C,0xF9,0xE6,0x54,0xA5,0x54,0xCD,0xBF,0x02,0x90,0xF4,0xA2,0x00,0xF0,0xEE, +0xC6,0x55,0xA5,0x55,0x30,0x04,0xC5,0x52,0xB0,0x04,0xA5,0x53,0x85,0x55,0x4C,0x8E, +0xF8,0xE6,0x55,0xA5,0x55,0xC5,0x53,0x90,0xF5,0xF0,0xF3,0xA5,0x52,0x4C,0x0C,0xF4, +0x20,0xA6,0xF9,0xA4,0x64,0xA9,0x00,0x85,0x64,0x91,0x64,0xC8,0xD0,0xFB,0xE6,0x65, +0xA6,0x65,0xE4,0x6A,0x90,0xF3,0xA9,0xFF,0x99,0xB2,0x02,0xC8,0xC0,0x04,0x90,0xF8, +0x20,0x97,0xF9,0x85,0x63,0x85,0x6D,0xA9,0x00,0x85,0x54,0x85,0x56,0x85,0x6C,0x60, +0xA5,0x63,0xC5,0x52,0xF0,0x21,0xA5,0x55,0xC5,0x52,0xD0,0x03,0x20,0x23,0xF9,0x20, +0x00,0xF4,0xA5,0x55,0xC5,0x53,0xD0,0x07,0xA5,0x54,0xF0,0x03,0x20,0xE6,0xF3,0xA9, +0x20,0x8D,0xFB,0x02,0x20,0xCA,0xF1,0x4C,0x8E,0xF8,0x20,0x11,0xF4,0xA5,0x55,0xC5, +0x52,0xD0,0x08,0x20,0x65,0xF6,0x20,0x58,0xF7,0xB0,0x07,0xA5,0x63,0x20,0x5D,0xF7, +0x90,0xE8,0x4C,0x8E,0xF8,0xA5,0x63,0x4C,0x3E,0xF7,0xA5,0x63,0x4C,0x4A,0xF7,0x20, +0x4C,0xF9,0x20,0x8F,0xF1,0x85,0x7D,0xA9,0x00,0x8D,0xBB,0x02,0x20,0xE9,0xF1,0xA5, +0x63,0x48,0x20,0x12,0xF6,0x68,0xC5,0x63,0xB0,0x0C,0xA5,0x7D,0x48,0x20,0x8F,0xF1, +0x85,0x7D,0x68,0x4C,0xAC,0xF4,0x20,0x57,0xF9,0xCE,0xBB,0x02,0x30,0x04,0xC6,0x54, +0xD0,0xF7,0x4C,0x8E,0xF8,0x20,0x4C,0xF9,0x20,0xAC,0xF5,0xA5,0x64,0x85,0x68,0xA5, +0x65,0x85,0x69,0xA5,0x63,0x48,0x20,0x0A,0xF6,0x68,0xC5,0x63,0xB0,0x10,0xA5,0x54, +0xCD,0xBF,0x02,0xB0,0x09,0x20,0x8F,0xF1,0xA0,0x00,0x91,0x68,0xF0,0xDA,0xA0,0x00, +0x98,0x91,0x68,0x20,0x18,0xF9,0x20,0x57,0xF9,0x4C,0x8E,0xF8,0x38,0x20,0xC2,0xF7, +0xA5,0x52,0x85,0x55,0x20,0xAC,0xF5,0x20,0x8E,0xF7,0x20,0xE2,0xF7,0x4C,0x8E,0xF8, +0x20,0x8E,0xF8,0xA4,0x51,0x84,0x54,0xA4,0x54,0x98,0x38,0x20,0x5B,0xF7,0x08,0x98, +0x18,0x69,0x78,0x28,0x20,0x3C,0xF7,0xC8,0xC0,0x18,0xD0,0xED,0xAD,0xB4,0x02,0x09, +0x01,0x8D,0xB4,0x02,0xA9,0x00,0x85,0x55,0x20,0xAC,0xF5,0x20,0x2A,0xF8,0x20,0x58, +0xF7,0x90,0xD4,0x4C,0x1B,0xF4,0xA0,0x20,0x20,0x83,0xF9,0x88,0x10,0xFA,0x60,0x20, +0x40,0xF4,0x4C,0xE6,0xF3,0xA9,0x02,0xD0,0x11,0xAC,0x6E,0x02,0xF0,0x02,0x09,0x20, +0xA4,0x4C,0x30,0x2B,0xA0,0x00,0x91,0x64,0xA9,0x01,0x8D,0x9E,0x02,0xA5,0x4C,0x30, +0x1E,0xA5,0x64,0x38,0xED,0x9E,0x02,0x85,0x64,0xB0,0x02,0xC6,0x65,0xA5,0x0F,0xC5, +0x65,0x90,0x0C,0xD0,0x06,0xA5,0x0E,0xC5,0x64,0x90,0x04,0xA9,0x93,0x85,0x4C,0x60, +0xA9,0x02,0x20,0x70,0xF5,0xA9,0xA2,0x20,0x70,0xF5,0xCA,0x60,0xA2,0x01,0x86,0x66, +0xCA,0x86,0x65,0xA5,0x54,0x0A,0x26,0x65,0x0A,0x26,0x65,0x65,0x54,0x85,0x64,0x90, +0x02,0xE6,0x65,0xA4,0x57,0xBE,0x6D,0xEE,0x06,0x64,0x26,0x65,0xCA,0xD0,0xF9,0xA5, +0x56,0x4A,0xA5,0x55,0xBE,0x9D,0xEE,0xF0,0x06,0x6A,0x06,0x66,0xCA,0xD0,0xFA,0x65, +0x64,0x90,0x02,0xE6,0x65,0x18,0x65,0x58,0x85,0x64,0x85,0x5E,0xA5,0x65,0x65,0x59, +0x85,0x65,0x85,0x5F,0xBE,0x9D,0xEE,0xBD,0x04,0xFB,0x25,0x55,0x65,0x66,0xA8,0xB9, +0xAC,0xEE,0x8D,0xA0,0x02,0x85,0x6F,0xA0,0x00,0x60,0xA9,0x00,0xF0,0x02,0xA9,0x9B, +0x85,0x7D,0xE6,0x63,0xE6,0x55,0xD0,0x02,0xE6,0x56,0xA5,0x55,0xA6,0x57,0xDD,0x7D, +0xEE,0xF0,0x0A,0xE0,0x00,0xD0,0xE2,0xC5,0x53,0xF0,0xDE,0x90,0xDC,0xE0,0x08,0xD0, +0x04,0xA5,0x56,0xF0,0xD4,0xA5,0x57,0xD0,0x2C,0xA5,0x63,0xC9,0x51,0x90,0x0A,0xA5, +0x7D,0xF0,0x22,0x20,0x61,0xF6,0x4C,0xAB,0xF6,0x20,0x65,0xF6,0xA5,0x54,0x18,0x69, +0x78,0x20,0x5D,0xF7,0x90,0x08,0xA5,0x7D,0xF0,0x04,0x18,0x20,0x0D,0xF5,0x4C,0x8E, +0xF8,0xA9,0x9B,0x85,0x7D,0x20,0x97,0xF9,0xA9,0x00,0x85,0x56,0xE6,0x54,0xA6,0x57, +0xA0,0x18,0x24,0x7B,0x10,0x05,0xA0,0x04,0x98,0xD0,0x03,0xBD,0x8D,0xEE,0xC5,0x54, +0xD0,0x29,0x8C,0x9D,0x02,0x8A,0xD0,0x23,0xA5,0x7D,0xF0,0x1F,0xC9,0x9B,0xF0,0x01, +0x18,0x20,0xF7,0xF7,0xEE,0xBB,0x02,0xC6,0x6C,0x10,0x02,0xE6,0x6C,0xCE,0x9D,0x02, +0xAD,0xB2,0x02,0x38,0x10,0xEB,0xAD,0x9D,0x02,0x85,0x54,0x4C,0x8E,0xF8,0x38,0xB5, +0x70,0xE5,0x74,0x95,0x70,0xB5,0x71,0xE5,0x75,0x95,0x71,0x60,0xAD,0xBF,0x02,0xC9, +0x04,0xF0,0x07,0xA5,0x57,0xF0,0x03,0x20,0x94,0xEF,0xA9,0x27,0xC5,0x53,0xB0,0x02, +0x85,0x53,0xA6,0x57,0xBD,0x8D,0xEE,0xC5,0x54,0x90,0x2A,0xF0,0x28,0xE0,0x08,0xD0, +0x0A,0xA5,0x56,0xF0,0x13,0xC9,0x01,0xD0,0x1C,0xF0,0x04,0xA5,0x56,0xD0,0x16,0xBD, +0x7D,0xEE,0xC5,0x55,0x90,0x0F,0xF0,0x0D,0xA9,0x01,0x85,0x4C,0xA9,0x80,0xA6,0x11, +0x85,0x11,0xF0,0x06,0x60,0x20,0x40,0xF4,0xA9,0x8D,0x85,0x4C,0x68,0x68,0xA5,0x7B, +0x10,0x03,0x4C,0x62,0xF9,0x4C,0x1E,0xF2,0xA0,0x00,0xA5,0x5F,0xF0,0x04,0xA5,0x5D, +0x91,0x5E,0x60,0x48,0x29,0x07,0xAA,0xBD,0xB4,0xEE,0x85,0x6E,0x68,0x4A,0x4A,0x4A, +0xAA,0x60,0x2E,0xB4,0x02,0x2E,0xB3,0x02,0x2E,0xB2,0x02,0x60,0x90,0x0C,0x20,0x23, +0xF7,0xBD,0xA3,0x02,0x05,0x6E,0x9D,0xA3,0x02,0x60,0x20,0x23,0xF7,0xA5,0x6E,0x49, +0xFF,0x3D,0xA3,0x02,0x9D,0xA3,0x02,0x60,0xA5,0x54,0x18,0x69,0x78,0x20,0x23,0xF7, +0x18,0xBD,0xA3,0x02,0x25,0x6E,0xF0,0x01,0x38,0x60,0xAD,0xFA,0x02,0xA4,0x57,0xC0, +0x0E,0xB0,0x17,0xC0,0x0C,0xB0,0x04,0xC0,0x03,0xB0,0x0F,0x2A,0x2A,0x2A,0x2A,0x29, +0x03,0xAA,0xAD,0xFA,0x02,0x29,0x9F,0x1D,0x4D,0xFB,0x8D,0xFB,0x02,0x60,0xA6,0x6A, +0xCA,0x86,0x69,0x86,0x67,0xA9,0xB0,0x85,0x68,0xA9,0xD8,0x85,0x66,0xA6,0x54,0xE8, +0xEC,0xBF,0x02,0xF0,0xE8,0xA0,0x27,0xB1,0x68,0x91,0x66,0x88,0x10,0xF9,0x38,0xA5, +0x68,0x85,0x66,0xE9,0x28,0x85,0x68,0xA5,0x69,0x85,0x67,0xE9,0x00,0x85,0x69,0x4C, +0x9F,0xF7,0x08,0xA0,0x16,0x98,0x20,0x5A,0xF7,0x08,0x98,0x18,0x69,0x79,0x28,0x20, +0x3C,0xF7,0x88,0x30,0x04,0xC4,0x54,0xB0,0xEC,0xA5,0x54,0x18,0x69,0x78,0x28,0x4C, +0x3C,0xF7,0xA5,0x52,0x85,0x55,0x20,0xAC,0xF5,0x38,0xA5,0x53,0xE5,0x52,0xA8,0xA9, +0x00,0x91,0x64,0x88,0x10,0xFB,0x60,0x20,0x32,0xF7,0xAD,0x6E,0x02,0xF0,0x28,0xAD, +0x6C,0x02,0xD0,0xFB,0xA9,0x08,0x8D,0x6C,0x02,0xAD,0x6C,0x02,0xC9,0x01,0xD0,0xF9, +0xAD,0x0B,0xD4,0xC9,0x40,0xB0,0xF9,0xA2,0x0D,0xAD,0xBF,0x02,0xC9,0x04,0xD0,0x02, +0xA2,0x70,0xEC,0x0B,0xD4,0xB0,0xFB,0x20,0xA6,0xF9,0xA5,0x64,0xA6,0x65,0xE8,0xE4, +0x6A,0xF0,0x06,0x38,0xE9,0x10,0x4C,0x2E,0xF8,0x69,0x27,0xD0,0x0A,0xA6,0x65,0xE8, +0xE4,0x6A,0xF0,0x38,0x18,0x69,0x10,0xA8,0x85,0x7E,0x38,0xA5,0x64,0xE5,0x7E,0x85, +0x64,0xB0,0x02,0xC6,0x65,0xA5,0x64,0x18,0x69,0x28,0x85,0x7E,0xA5,0x65,0x69,0x00, +0x85,0x7F,0xB1,0x7E,0x91,0x64,0xC8,0xD0,0xF9,0xA0,0x10,0xA5,0x64,0xC9,0xD8,0xF0, +0x0B,0x18,0x69,0xF0,0x85,0x64,0x90,0xDD,0xE6,0x65,0xD0,0xD9,0xA6,0x6A,0xCA,0x86, +0x7F,0xA2,0xD8,0x86,0x7E,0xA9,0x00,0xA0,0x27,0x91,0x7E,0x88,0x10,0xFB,0xA9,0x00, +0x85,0x63,0xA5,0x54,0x85,0x51,0xA5,0x51,0x20,0x5A,0xF7,0xB0,0x0C,0xA5,0x63,0x18, +0x69,0x28,0x85,0x63,0xC6,0x51,0x4C,0x96,0xF8,0x18,0xA5,0x63,0x65,0x55,0x85,0x63, +0x60,0x20,0x4C,0xF9,0xA5,0x63,0x48,0xA5,0x6C,0x85,0x54,0xA5,0x6D,0x85,0x55,0xA9, +0x01,0x85,0x6B,0xA2,0x17,0xA5,0x7B,0x10,0x02,0xA2,0x03,0xE4,0x54,0xD0,0x0B,0xA5, +0x55,0xC5,0x53,0xD0,0x05,0xE6,0x6B,0x4C,0xEA,0xF8,0x20,0x0A,0xF6,0xE6,0x6B,0xA5, +0x63,0xC5,0x52,0xD0,0xDE,0xC6,0x54,0x20,0x00,0xF4,0x20,0x8F,0xF1,0xD0,0x17,0xC6, +0x6B,0xA5,0x63,0xC5,0x52,0xF0,0x0F,0x20,0x00,0xF4,0xA5,0x55,0xC5,0x53,0xD0,0x02, +0xC6,0x54,0xA5,0x6B,0xD0,0xE4,0x68,0x85,0x63,0x4C,0x57,0xF9,0x20,0x8E,0xF8,0xA5, +0x51,0x85,0x6C,0xA5,0x52,0x85,0x6D,0x60,0xA5,0x63,0xC5,0x52,0xD0,0x02,0xC6,0x54, +0x20,0x8E,0xF8,0xA5,0x63,0xC5,0x52,0xF0,0xEE,0x20,0xAC,0xF5,0xA5,0x53,0x38,0xE5, +0x52,0xA8,0xB1,0x64,0xD0,0xE1,0x88,0x10,0xF9,0x4C,0x27,0xF5,0xA2,0x2D,0xBD,0x0D, +0xFB,0xCD,0xFB,0x02,0xF0,0x05,0xCA,0xCA,0xCA,0x10,0xF3,0x60,0xA2,0x02,0xB5,0x54, +0x9D,0xB8,0x02,0xCA,0x10,0xF8,0x60,0xA2,0x02,0xBD,0xB8,0x02,0x95,0x54,0xCA,0x10, +0xF8,0x60,0xAD,0xBF,0x02,0xC9,0x18,0xF0,0x17,0xA2,0x0B,0xB5,0x54,0x48,0xBD,0x90, +0x02,0x95,0x54,0x68,0x9D,0x90,0x02,0xCA,0x10,0xF1,0xA5,0x7B,0x49,0xFF,0x85,0x7B, +0x4C,0x1E,0xF2,0xA2,0x7E,0x48,0x8E,0x1F,0xD0,0xAD,0x0B,0xD4,0xCD,0x0B,0xD4,0xF0, +0xFB,0xCA,0xCA,0x10,0xF1,0x68,0x60,0xA9,0x00,0xA6,0x7B,0xD0,0x04,0xA6,0x57,0xD0, +0x02,0xA5,0x52,0x85,0x55,0x60,0xA5,0x58,0x85,0x64,0xA5,0x59,0x85,0x65,0x60,0xA2, +0x00,0xA5,0x22,0xC9,0x11,0xF0,0x08,0xC9,0x12,0xF0,0x03,0xA0,0x84,0x60,0xE8,0x8E, +0xB7,0x02,0xA5,0x54,0x8D,0xF5,0x02,0xA5,0x55,0x8D,0xF6,0x02,0xA5,0x56,0x8D,0xF7, +0x02,0xA9,0x01,0x8D,0xF8,0x02,0x8D,0xF9,0x02,0x38,0xAD,0xF5,0x02,0xE5,0x5A,0x85, +0x76,0xB0,0x0E,0xA9,0xFF,0x8D,0xF8,0x02,0xA5,0x76,0x49,0xFF,0x18,0x69,0x01,0x85, +0x76,0x38,0xAD,0xF6,0x02,0xE5,0x5B,0x85,0x77,0xAD,0xF7,0x02,0xE5,0x5C,0x85,0x78, +0xB0,0x17,0xA9,0xFF,0x8D,0xF9,0x02,0xA5,0x77,0x49,0xFF,0x85,0x77,0xA5,0x78,0x49, +0xFF,0x85,0x78,0xE6,0x77,0xD0,0x02,0xE6,0x78,0xA2,0x02,0xA0,0x00,0x84,0x73,0x98, +0x95,0x70,0xB5,0x5A,0x95,0x54,0xCA,0x10,0xF6,0xA5,0x77,0xE8,0xA8,0xA5,0x78,0x85, +0x7F,0x85,0x75,0xD0,0x0B,0xA5,0x77,0xC5,0x76,0xB0,0x05,0xA5,0x76,0xA2,0x02,0xA8, +0x98,0x85,0x7E,0x85,0x74,0x48,0xA5,0x75,0x4A,0x68,0x6A,0x95,0x70,0xA5,0x7E,0x05, +0x7F,0xD0,0x03,0x4C,0x01,0xFB,0x18,0xA5,0x70,0x65,0x76,0x85,0x70,0x90,0x02,0xE6, +0x71,0xA5,0x71,0xC5,0x75,0x90,0x15,0xD0,0x06,0xA5,0x70,0xC5,0x74,0x90,0x0D,0x18, +0xA5,0x54,0x6D,0xF8,0x02,0x85,0x54,0xA2,0x00,0x20,0xAE,0xF6,0x18,0xA5,0x72,0x65, +0x77,0x85,0x72,0xA5,0x73,0x65,0x78,0x85,0x73,0xC5,0x75,0x90,0x28,0xD0,0x06,0xA5, +0x72,0xC5,0x74,0x90,0x20,0x2C,0xF9,0x02,0x10,0x10,0xC6,0x55,0xA5,0x55,0xC9,0xFF, +0xD0,0x0E,0xA5,0x56,0xF0,0x0A,0xC6,0x56,0x10,0x06,0xE6,0x55,0xD0,0x02,0xE6,0x56, +0xA2,0x02,0x20,0xAE,0xF6,0x20,0xCA,0xF6,0x20,0xCA,0xF1,0xAD,0xB7,0x02,0xF0,0x2F, +0x20,0x4C,0xF9,0xAD,0xFB,0x02,0x8D,0xBC,0x02,0xA5,0x54,0x48,0x20,0x12,0xF6,0x68, +0x85,0x54,0x20,0xCA,0xF6,0x20,0x8F,0xF1,0xD0,0x0C,0xAD,0xFD,0x02,0x8D,0xFB,0x02, +0x20,0xCA,0xF1,0x4C,0xC9,0xFA,0xAD,0xBC,0x02,0x8D,0xFB,0x02,0x20,0x57,0xF9,0x38, +0xA5,0x7E,0xE9,0x01,0x85,0x7E,0xA5,0x7F,0xE9,0x00,0x85,0x7F,0x30,0x03,0x4C,0x4D, +0xFA,0x4C,0x1E,0xF2,0x00,0x01,0x03,0x07,0x28,0xCA,0x94,0x46,0x00,0x1B,0xE0,0xF3, +0x1C,0xE6,0xF3,0x1D,0xF3,0xF3,0x1E,0x00,0xF4,0x1F,0x11,0xF4,0x7D,0x20,0xF4,0x7E, +0x50,0xF4,0x7F,0x7A,0xF4,0x9B,0x61,0xF6,0x9C,0x20,0xF5,0x9D,0x0C,0xF5,0x9E,0x9A, +0xF4,0x9F,0x95,0xF4,0xFD,0x56,0xF5,0xFE,0xD5,0xF4,0xFF,0x9F,0xF4,0x1C,0x40,0xF4, +0x1D,0x5F,0xF5,0x1E,0x1B,0xF4,0x1F,0x0A,0xF4,0x40,0x00,0x20,0x60,0x20,0x40,0x00, +0x60,0x6C,0x6A,0x3B,0x8A,0x8B,0x6B,0x2B,0x2A,0x6F,0x80,0x70,0x75,0x9B,0x69,0x2D, +0x3D,0x76,0x80,0x63,0x8C,0x8D,0x62,0x78,0x7A,0x34,0x80,0x33,0x36,0x1B,0x35,0x32, +0x31,0x2C,0x20,0x2E,0x6E,0x80,0x6D,0x2F,0x81,0x72,0x80,0x65,0x79,0x7F,0x74,0x77, +0x71,0x39,0x80,0x30,0x37,0x7E,0x38,0x3C,0x3E,0x66,0x68,0x64,0x80,0x82,0x67,0x73, +0x61,0x4C,0x4A,0x3A,0x8A,0x8B,0x4B,0x5C,0x5E,0x4F,0x80,0x50,0x55,0x9B,0x49,0x5F, +0x7C,0x56,0x80,0x43,0x8C,0x8D,0x42,0x58,0x5A,0x24,0x80,0x23,0x26,0x1B,0x25,0x22, +0x21,0x5B,0x20,0x5D,0x4E,0x80,0x4D,0x3F,0x81,0x52,0x80,0x45,0x59,0x9F,0x54,0x57, +0x51,0x28,0x80,0x29,0x27,0x9C,0x40,0x7D,0x9D,0x46,0x48,0x44,0x80,0x83,0x47,0x53, +0x41,0x0C,0x0A,0x7B,0x80,0x80,0x0B,0x1E,0x1F,0x0F,0x80,0x10,0x15,0x9B,0x09,0x1C, +0x1D,0x16,0x80,0x03,0x89,0x80,0x02,0x18,0x1A,0x80,0x80,0x85,0x80,0x1B,0x80,0xFD, +0x80,0x00,0x20,0x60,0x0E,0x80,0x0D,0x80,0x81,0x12,0x80,0x05,0x19,0x9E,0x14,0x17, +0x11,0x80,0x80,0x80,0x80,0xFE,0x80,0x7D,0xFF,0x06,0x08,0x04,0x80,0x84,0x07,0x13, +0x01,0x1C,0x1D,0x1E,0x1F,0x8E,0x8F,0x90,0x91,0x8A,0x48,0x98,0x48,0xAC,0x01,0xD3, +0xAD,0x09,0xD2,0xCD,0xF2,0x02,0xD0,0x05,0xAE,0xF1,0x02,0xD0,0x49,0xAE,0x6D,0x02, +0xC9,0x83,0xD0,0x13,0x8A,0x49,0xFF,0x8D,0x6D,0x02,0xD0,0x05,0x98,0x09,0x04,0xD0, +0x03,0x98,0x29,0xFB,0xA8,0xB0,0x26,0x8A,0xD0,0x3D,0xAD,0x09,0xD2,0xAA,0xC9,0x9F, +0xD0,0x0A,0xAD,0xFF,0x02,0x49,0xFF,0x8D,0xFF,0x02,0xB0,0x11,0x29,0x3F,0xC9,0x11, +0xD0,0x2E,0x8E,0xDC,0x02,0xF0,0x06,0x8E,0xFC,0x02,0x8E,0xF2,0x02,0xA9,0x03,0x8D, +0xF1,0x02,0xA9,0x00,0x85,0x4D,0xAD,0xD9,0x02,0x8D,0x2B,0x02,0xAD,0x2F,0x02,0xD0, +0x06,0xAD,0xDD,0x02,0x8D,0x2F,0x02,0x8C,0x01,0xD3,0x68,0xA8,0x68,0xAA,0x68,0x40, +0xE0,0x84,0xF0,0x21,0xE0,0x94,0xD0,0xCF,0xAD,0xF4,0x02,0xAE,0x6B,0x02,0x8D,0x6B, +0x02,0x8E,0xF4,0x02,0xE0,0xCC,0xF0,0x06,0x98,0x09,0x08,0xA8,0xD0,0xBF,0x98,0x29, +0xF7,0xA8,0x4C,0x6D,0xFC,0xAD,0x2F,0x02,0xF0,0xCD,0x8D,0xDD,0x02,0xA9,0x00,0x8D, +0x2F,0x02,0xF0,0xC3,0x48,0xAD,0xC6,0x02,0x4D,0x4F,0x00,0x2D,0x4E,0x00,0x8D,0x0A, +0xD4,0x8D,0x17,0xD0,0x68,0x40,0x00,0x00,0x4C,0x83,0xF9,0xA9,0xCC,0x8D,0xEE,0x02, +0xA9,0x05,0x8D,0xEF,0x02,0x60,0xA5,0x2B,0x85,0x3E,0xA5,0x2A,0x29,0x0C,0xC9,0x04, +0xF0,0x05,0xC9,0x08,0xF0,0x3E,0x60,0xA9,0x00,0x8D,0x89,0x02,0x85,0x3F,0xA9,0x01, +0x20,0xFC,0xFD,0x30,0x29,0xA9,0x34,0x8D,0x02,0xD3,0xA6,0x62,0xBC,0x93,0xFE,0xBD, +0x91,0xFE,0xAA,0xA9,0x03,0x8D,0x2A,0x02,0x20,0x5C,0xE4,0xAD,0x2A,0x02,0xD0,0xFB, +0xA9,0x80,0x85,0x3D,0x8D,0x8A,0x02,0x4C,0x77,0xFD,0xA0,0x80,0xC6,0x11,0xA9,0x00, +0x8D,0x89,0x02,0x60,0xA9,0x80,0x8D,0x89,0x02,0xA9,0x02,0x20,0xFC,0xFD,0x30,0xEE, +0xA9,0xCC,0x8D,0x04,0xD2,0xA9,0x05,0x8D,0x06,0xD2,0xA9,0x60,0x8D,0x00,0x03,0x20, +0x68,0xE4,0xA9,0x34,0x8D,0x02,0xD3,0xA6,0x62,0xBC,0x8F,0xFE,0xBD,0x8D,0xFE,0xAA, +0xA9,0x03,0x20,0x5C,0xE4,0xA9,0xFF,0x8D,0x2A,0x02,0xA5,0x11,0xF0,0xBC,0xAD,0x2A, +0x02,0xD0,0xF7,0xA9,0x00,0x85,0x3D,0xA0,0x01,0x60,0xA5,0x3F,0x30,0x33,0xA6,0x3D, +0xEC,0x8A,0x02,0xF0,0x08,0xBD,0x00,0x04,0xE6,0x3D,0xA0,0x01,0x60,0xA9,0x52,0x20, +0x3F,0xFE,0x98,0x30,0xF7,0xA9,0x00,0x85,0x3D,0xA2,0x80,0xAD,0xFF,0x03,0xC9,0xFE, +0xF0,0x0D,0xC9,0xFA,0xD0,0x03,0xAE,0x7F,0x04,0x8E,0x8A,0x02,0x4C,0x7A,0xFD,0xC6, +0x3F,0xA0,0x88,0x60,0xA6,0x3D,0x9D,0x00,0x04,0xE6,0x3D,0xA0,0x01,0xE0,0x7F,0xF0, +0x01,0x60,0xA9,0xFC,0x20,0x7C,0xFE,0xA9,0x00,0x85,0x3D,0x60,0xA0,0x01,0x60,0xAD, +0x89,0x02,0x30,0x08,0xA0,0x01,0xA9,0x3C,0x8D,0x02,0xD3,0x60,0xA6,0x3D,0xF0,0x0A, +0x8E,0x7F,0x04,0xA9,0xFA,0x20,0x7C,0xFE,0x30,0xEC,0xA2,0x7F,0xA9,0x00,0x9D,0x00, +0x04,0xCA,0x10,0xFA,0xA9,0xFE,0x20,0x7C,0xFE,0x4C,0xD6,0xFD,0x85,0x40,0xA5,0x14, +0x18,0xA6,0x62,0x7D,0x95,0xFE,0xAA,0xA9,0xFF,0x8D,0x1F,0xD0,0xA9,0x00,0xA0,0xF0, +0x88,0xD0,0xFD,0x8D,0x1F,0xD0,0xA0,0xF0,0x88,0xD0,0xFD,0xE4,0x14,0xD0,0xE8,0xC6, +0x40,0xF0,0x0E,0x8A,0x18,0xA6,0x62,0x7D,0x97,0xFE,0xAA,0xE4,0x14,0xD0,0xFC,0xF0, +0xCD,0x20,0x36,0xFE,0x98,0x60,0xAD,0x25,0xE4,0x48,0xAD,0x24,0xE4,0x48,0x60,0x8D, +0x02,0x03,0xA9,0x00,0x8D,0x09,0x03,0xA9,0x83,0x8D,0x08,0x03,0xA9,0x03,0x8D,0x05, +0x03,0xA9,0xFD,0x8D,0x04,0x03,0xA9,0x60,0x8D,0x00,0x03,0xA9,0x00,0x8D,0x01,0x03, +0xA9,0x23,0x8D,0x06,0x03,0xAD,0x02,0x03,0xA0,0x40,0xC9,0x52,0xF0,0x02,0xA0,0x80, +0x8C,0x03,0x03,0xA5,0x3E,0x8D,0x0B,0x03,0x20,0x59,0xE4,0x60,0x8D,0xFF,0x03,0xA9, +0x55,0x8D,0xFD,0x03,0x8D,0xFE,0x03,0xA9,0x57,0x20,0x3F,0xFE,0x60,0x04,0x03,0x80, +0xC0,0x02,0x01,0x40,0xE0,0x1E,0x19,0x0A,0x08,0xA9,0x1E,0x8D,0x14,0x03,0x60,0xEA, +0x02,0xC0,0x03,0xA9,0x04,0x8D,0xDF,0x02,0xAE,0x9F,0xFE,0xAC,0xA0,0xFE,0xA9,0x53, +0x8D,0x02,0x03,0x8D,0x0A,0x03,0x20,0x14,0xFF,0x20,0x59,0xE4,0x30,0x03,0x20,0x44, +0xFF,0x60,0x20,0xA3,0xFE,0xA9,0x00,0x8D,0xDE,0x02,0x60,0x48,0xBD,0x41,0x03,0x85, +0x21,0x20,0x4B,0xFF,0xAE,0xDE,0x02,0x68,0x9D,0xC0,0x03,0xE8,0xEC,0xDF,0x02,0xF0, +0x15,0x8E,0xDE,0x02,0xC9,0x9B,0xF0,0x03,0xA0,0x01,0x60,0xA9,0x20,0x9D,0xC0,0x03, +0xE8,0xEC,0xDF,0x02,0xD0,0xF7,0xA9,0x00,0x8D,0xDE,0x02,0xAE,0xA1,0xFE,0xAC,0xA2, +0xFE,0x20,0x14,0xFF,0x4C,0x59,0xE4,0x20,0x4B,0xFF,0xA9,0x9B,0xAE,0xDE,0x02,0xD0, +0xDC,0xA0,0x01,0x60,0x8E,0x04,0x03,0x8C,0x05,0x03,0xA9,0x40,0x8D,0x00,0x03,0xA5, +0x21,0x8D,0x01,0x03,0xA9,0x80,0xAE,0x02,0x03,0xE0,0x53,0xD0,0x02,0xA9,0x40,0x8D, +0x03,0x03,0xAD,0xDF,0x02,0x8D,0x08,0x03,0xA9,0x00,0x8D,0x09,0x03,0xAD,0x14,0x03, +0x8D,0x06,0x03,0x60,0xAD,0xEC,0x02,0x8D,0x14,0x03,0x60,0xA0,0x57,0xA5,0x2B,0xC9, +0x4E,0xD0,0x04,0xA2,0x28,0xD0,0x0E,0xC9,0x44,0xD0,0x04,0xA2,0x14,0xD0,0x06,0xC9, +0x53,0xD0,0x0C,0xA2,0x1D,0x8E,0xDF,0x02,0x8C,0x02,0x03,0x8D,0x0A,0x03,0x60,0xA9, +0x4E,0xD0,0xDC,0xA2,0x00,0x86,0x8B,0x86,0x8C,0x20,0xA9,0xFF,0xE0,0x0C,0xD0,0xF9, +0xAD,0x00,0xC0,0xAE,0x01,0xC0,0xC5,0x8B,0xD0,0x06,0xE4,0x8C,0xD0,0x02,0x18,0x60, +0x38,0x60,0xA2,0x00,0x86,0x8B,0x86,0x8C,0xA2,0x0C,0x20,0xA9,0xFF,0x20,0xA9,0xFF, +0xAD,0xF8,0xFF,0xAE,0xF9,0xFF,0x4C,0x86,0xFF,0xA0,0x00,0xBD,0xD7,0xFF,0x99,0x9E, +0x00,0xE8,0xC8,0xC0,0x04,0xD0,0xF4,0xA0,0x00,0x18,0xB1,0x9E,0x65,0x8B,0x85,0x8B, +0x90,0x02,0xE6,0x8C,0xE6,0x9E,0xD0,0x02,0xE6,0x9F,0xA5,0x9E,0xC5,0xA0,0xD0,0xE9, +0xA5,0x9F,0xC5,0xA1,0xD0,0xE3,0x60,0x02,0xC0,0x00,0xD0,0x00,0x50,0x00,0x58,0x00, +0xD8,0x00,0xE0,0x00,0xE0,0xF8,0xFF,0xFA,0xFF,0x00,0x00,0x00,0x00,0x00,0x10,0x05, +0x83,0x02,0x42,0x42,0x00,0x00,0x01,0x02,0x8C,0x6C,0x18,0xC0,0xAA,0xC2,0x2C,0xC0, +}; diff --git a/MCUME_pico/pico800/sio.c b/MCUME_pico/pico800/sio.c new file mode 100644 index 0000000..575c914 --- /dev/null +++ b/MCUME_pico/pico800/sio.c @@ -0,0 +1,55 @@ +/* + * sio.c - Serial I/O emulation + * + * Copyright (C) 1995-1998 David Firth + * Copyright (C) 1998-2010 Atari800 development team (see DOC/CREDITS) + * + * This file is part of the Atari800 emulator project which emulates + * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. + * + * Atari800 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. + * + * Atari800 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 Atari800; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#define _POSIX_C_SOURCE 200112L /* for snprintf */ + +#include +#include +#include +#include + +#include "antic.h" /* ANTIC_ypos */ +#include "atari.h" +#include "cpu.h" +#include "memory.h" +#include "pokey.h" +#include "pokeysnd.h" +#include "sio.h" + + + + +/* Put a byte that comes out of POKEY. So get it here... */ +void SIO_PutByte(int byte) +{ +} + +/* Get a byte from the floppy to the pokey. */ +int SIO_GetByte(void) +{ + int byte = 0; + + return byte; +} + diff --git a/MCUME_pico/pico800/sio.h b/MCUME_pico/pico800/sio.h new file mode 100644 index 0000000..8a182f9 --- /dev/null +++ b/MCUME_pico/pico800/sio.h @@ -0,0 +1,61 @@ +#ifndef SIO_H_ +#define SIO_H_ + + +#include /* FILENAME_MAX */ + +#include "atari.h" + +#define SIO_MAX_DRIVES 8 + +typedef enum SIO_tagUnitStatus { + SIO_OFF, + SIO_NO_DISK, + SIO_READ_ONLY, + SIO_READ_WRITE +} SIO_UnitStatus; + +extern char SIO_status[256]; +extern SIO_UnitStatus SIO_drive_status[SIO_MAX_DRIVES]; +extern char SIO_filename[SIO_MAX_DRIVES][FILENAME_MAX]; + +#define SIO_LAST_READ 0 +#define SIO_LAST_WRITE 1 +extern int SIO_last_op; +extern int SIO_last_op_time; +extern int SIO_last_drive; /* 1 .. 8 */ +extern int SIO_last_sector; + +int SIO_Mount(int diskno, const char *filename, int b_open_readonly); +void SIO_Dismount(int diskno); +void SIO_DisableDrive(int diskno); +int SIO_RotateDisks(void); +void SIO_Handler(void); + +UBYTE SIO_ChkSum(const UBYTE *buffer, int length); +void SIO_SwitchCommandFrame(int onoff); +void SIO_PutByte(int byte); +int SIO_GetByte(void); +int SIO_Initialise(int *argc, char *argv[]); +void SIO_Exit(void); + +/* Some defines about the serial I/O timing. Currently fixed! */ +#define SIO_XMTDONE_INTERVAL 15 +#define SIO_SERIN_INTERVAL 8 +#define SIO_SEROUT_INTERVAL 8 +#define SIO_ACK_INTERVAL 36 + +/* These functions are also used by the 1450XLD Parallel disk device */ +extern int SIO_format_sectorcount[SIO_MAX_DRIVES]; +extern int SIO_format_sectorsize[SIO_MAX_DRIVES]; +int SIO_ReadStatusBlock(int unit, UBYTE *buffer); +int SIO_FormatDisk(int unit, UBYTE *buffer, int sectsize, int sectcount); +void SIO_SizeOfSector(UBYTE unit, int sector, int *sz, ULONG *ofs); +int SIO_ReadSector(int unit, int sector, UBYTE *buffer); +int SIO_DriveStatus(int unit, UBYTE *buffer); +int SIO_WriteStatusBlock(int unit, const UBYTE *buffer); +int SIO_WriteSector(int unit, int sector, const UBYTE *buffer); +void SIO_StateSave(void); +void SIO_StateRead(void); + +#endif /* SIO_H_ */ diff --git a/MCUME_pico/pico81/.DS_Store b/MCUME_pico/pico81/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/MCUME_pico/pico81/.DS_Store differ diff --git a/MCUME_pico/pico81/AY8910.c b/MCUME_pico/pico81/AY8910.c new file mode 100644 index 0000000..189e358 --- /dev/null +++ b/MCUME_pico/pico81/AY8910.c @@ -0,0 +1,316 @@ +/** EMULib Emulation Library *********************************/ +/** **/ +/** AY8910.c **/ +/** **/ +/** This file contains emulation for the AY8910 sound chip **/ +/** produced by General Instruments, Yamaha, etc. See **/ +/** AY8910.h for declarations. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1996-2014 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +#include "AY8910.h" +#include "emuapi.h" +#include + +static const unsigned char Envelopes[16][32] = +{ + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } +}; + +static const int Volumes[16] = +{ 0,1,2,4,6,8,11,16,23,32,45,64,90,128,180,255 }; +//{ 0,16,33,50,67,84,101,118,135,152,169,186,203,220,237,254 }; + +/** Reset8910() **********************************************/ +/** Reset the sound chip and use sound channels from the **/ +/** one given in First. **/ +/*************************************************************/ +void Reset8910(register AY8910 *D,int ClockHz,int First) +{ + static byte RegInit[16] = + { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFD, + 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00 + }; + int J; + + /* Reset state */ + memcpy(D->R,RegInit,sizeof(D->R)); + D->EPhase = 0; + D->Clock = ClockHz>>4; + D->First = First; + D->Sync = AY8910_ASYNC; + D->Changed = 0x00; + D->EPeriod = 0; + D->ECount = 0; + D->Latch = 0x00; + + /* Set sound types */ + //SetSound(0+First,SND_MELODIC); + //SetSound(1+First,SND_MELODIC); + //SetSound(2+First,SND_MELODIC); + //SetSound(3+First,SND_NOISE); + //SetSound(4+First,SND_NOISE); + //SetSound(5+First,SND_NOISE); + + /* Silence all channels */ + for(J=0;JFreq[J]=D->Volume[J]=0; +#if HAS_SND + emu_sndPlaySound(J+First, 0, 0); +#endif + //Sound(J+First,0,0); + } +} + +/** WrCtrl8910() *********************************************/ +/** Write a value V to the PSG Control Port. **/ +/*************************************************************/ +void WrCtrl8910(AY8910 *D,byte V) +{ + D->Latch=V&0x0F; +} + +/** WrData8910() *********************************************/ +/** Write a value V to the PSG Data Port. **/ +/*************************************************************/ +void WrData8910(AY8910 *D,byte V) +{ + Write8910(D,D->Latch,V); +} + +/** RdData8910() *********************************************/ +/** Read a value from the PSG Data Port. **/ +/*************************************************************/ +byte RdData8910(AY8910 *D) +{ + return(D->R[D->Latch]); +} + +/** Write8910() **********************************************/ +/** Call this function to output a value V into the sound **/ +/** chip. **/ +/*************************************************************/ +void Write8910(register AY8910 *D,register byte R,register byte V) +{ + register int J,I; + + switch(R) + { + case 1: + case 3: + case 5: + V&=0x0F; + /* Fall through */ + case 0: + case 2: + case 4: + /* Write value */ + D->R[R]=V; + /* Exit if the channel is silenced */ + if(D->R[7]&(1<<(R>>1))) return; + /* Go to the first register in the pair */ + R&=0xFE; + /* Compute frequency */ + J=((int)(D->R[R+1]&0x0F)<<8)+D->R[R]; + /* Compute channel number */ + R>>=1; + /* Assign frequency */ + D->Freq[R]=D->Clock/(J? J:0x1000); + /* Compute changed channels mask */ + D->Changed|=1<R[6]=V&=0x1F; + /* Exit if noise channels are silenced */ + if(!(~D->R[7]&0x38)) return; + /* Compute and assign noise frequency */ + /* Shouldn't do <<2, but need to keep frequency down */ + J=D->Clock/((V&0x1F? (V&0x1F):0x20)<<2); + if(!(D->R[7]&0x08)) D->Freq[3]=J; + if(!(D->R[7]&0x10)) D->Freq[4]=J; + if(!(D->R[7]&0x20)) D->Freq[5]=J; + /* Compute changed channels mask */ + D->Changed|=0x38&~D->R[7]; + break; + + case 7: + /* Find changed channels */ + R=(V^D->R[7])&0x3F; + D->Changed|=R; + /* Write value */ + D->R[7]=V; + /* Update frequencies */ + for(J=0;R&&(J>=1,V>>=1) + if(R&1) + { + if(V&1) D->Freq[J]=0; + else if(J<3) + { + I=((int)(D->R[J*2+1]&0x0F)<<8)+D->R[J*2]; + D->Freq[J]=D->Clock/(I? I:0x1000); + } + else + { + /* Shouldn't do <<2, but need to keep frequency down */ + I=D->R[6]&0x1F; + D->Freq[J]=D->Clock/((I? I:0x20)<<2); + } + } + break; + + case 8: + case 9: + case 10: + /* Write value */ + D->R[R]=V&=0x1F; + /* Compute channel number */ + R-=8; + /* Compute and assign new volume */ + J=Volumes[V&0x10? Envelopes[D->R[13]&0x0F][D->EPhase]:(V&0x0F)]; + D->Volume[R]=J; + D->Volume[R+3]=(J+1)>>1; + /* Compute changed channels mask */ + D->Changed|=(0x09<R[7]; + break; + + case 11: + case 12: + /* Write value */ + D->R[R]=V; + /* Compute envelope period (why not <<4?) */ + J=((int)D->R[12]<<8)+D->R[11]; + D->EPeriod=1000*(J? J:0x10000)/D->Clock; + /* No channels changed */ + return; + + case 13: + /* Write value */ + D->R[R]=V&=0x0F; + /* Reset envelope */ + D->ECount = 0; + D->EPhase = 0; + for(J=0;JR[J+8]&0x10) + { + I = Volumes[Envelopes[V][0]]; + D->Volume[J] = I; + D->Volume[J+3] = (I+1)>>1; + D->Changed |= (0x09<R[7]; + } + break; + + case 14: + case 15: + /* Write value */ + D->R[R]=V; + /* No channels changed */ + return; + + default: + /* Wrong register, do nothing */ + return; + } + + /* For asynchronous mode, make Sound() calls right away */ + if(!D->Sync&&D->Changed) Sync8910(D,AY8910_FLUSH); +} + +/** Loop8910() ***********************************************/ +/** Call this function periodically to update volume **/ +/** envelopes. Use mS to pass the time since the last call **/ +/** of Loop8910() in milliseconds. **/ +/*************************************************************/ +void Loop8910(register AY8910 *D,int mS) +{ + register int J,I; + + /* Exit if no envelope running */ + if(!D->EPeriod) return; + + /* Count milliseconds */ + D->ECount += mS; + if(D->ECountEPeriod) return; + + /* Count steps */ + J = D->ECount/D->EPeriod; + D->ECount -= J*D->EPeriod; + + /* Count phases */ + D->EPhase += J; + if(D->EPhase>31) + D->EPhase = (D->R[13]&0x09)==0x08? (D->EPhase&0x1F):31; + + /* Set envelope volumes for relevant channels */ + for(I=0;I<3;++I) + if(D->R[I+8]&0x10) + { + J = Volumes[Envelopes[D->R[13]&0x0F][D->EPhase]]; + D->Volume[I] = J; + D->Volume[I+3] = (J+1)>>1; + D->Changed |= (0x09<R[7]; + } + + /* For asynchronous mode, make Sound() calls right away */ + if(!D->Sync&&D->Changed) Sync8910(D,AY8910_FLUSH); +} + +/** Sync8910() ***********************************************/ +/** Flush all accumulated changes by issuing Sound() calls **/ +/** and set the synchronization on/off. The second argument **/ +/** should be AY8910_SYNC/AY8910_ASYNC to set/reset sync, **/ +/** or AY8910_FLUSH to leave sync mode as it is. To emulate **/ +/** noise channels with MIDI drums, OR second argument with **/ +/** AY8910_DRUMS. **/ +/*************************************************************/ +void Sync8910(register AY8910 *D,register byte Sync) +{ + register int J,I; + + /* Hit MIDI drums for noise channels, if requested */ + if(Sync&AY8910_DRUMS) + { + Sync&=~AY8910_DRUMS; + J = (D->Freq[3]? D->Volume[3]:0) + + (D->Freq[4]? D->Volume[4]:0) + + (D->Freq[5]? D->Volume[5]:0); + if(J) { + //Drum(DRM_MIDI|28,(J+2)/3); + } + } + + if(Sync!=AY8910_FLUSH) D->Sync=Sync; + + for(J=0,I=D->Changed;I&&(J>=1) + if(I&1) { +#if HAS_SND + emu_sndPlaySound(J+D->First, D->Volume[J], D->Freq[J]); +#endif + //Sound(J+D->First,D->Freq[J],D->Volume[J]); + } + + D->Changed=0x00; +} + diff --git a/MCUME_pico/pico81/AY8910.h b/MCUME_pico/pico81/AY8910.h new file mode 100644 index 0000000..3c8e7fb --- /dev/null +++ b/MCUME_pico/pico81/AY8910.h @@ -0,0 +1,98 @@ +/** EMULib Emulation Library *********************************/ +/** **/ +/** AY8910.h **/ +/** **/ +/** This file contains emulation for the AY8910 sound chip **/ +/** produced by General Instruments, Yamaha, etc. See **/ +/** AY8910.c for the actual code. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1996-2014 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ +#ifndef AY8910_H +#define AY8910_H +#ifdef __cplusplus +extern "C" { +#endif + +#define AY8910_CHANNELS 6 /* 3 melodic + 3 noise chanls */ + +#define AY8910_ASYNC 0 /* Asynchronous emulation */ +#define AY8910_SYNC 1 /* Synchronous emulation */ +#define AY8910_FLUSH 2 /* Flush buffers only */ +#define AY8910_DRUMS 0x80 /* Hit drums for noise chnls */ + +#ifndef BYTE_TYPE_DEFINED +#define BYTE_TYPE_DEFINED +typedef unsigned char byte; +#endif + +/** AY8910 ***************************************************/ +/** This data structure stores AY8910 state. **/ +/*************************************************************/ +typedef struct +{ + byte R[16]; /* PSG registers contents */ + int Freq[AY8910_CHANNELS]; /* Frequencies (0 for off) */ + int Volume[AY8910_CHANNELS]; /* Volumes (0..255) */ + int Clock; /* Base clock used by PSG */ + int First; /* First used Sound() channel */ + byte Changed; /* Bitmap of changed channels */ + byte Sync; /* AY8910_SYNC/AY8910_ASYNC */ + byte Latch; /* Latch for the register num */ + int EPeriod; /* Envelope step in msecs */ + int ECount; /* Envelope step counter */ + int EPhase; /* Envelope phase */ +} AY8910; + +/** Reset8910() **********************************************/ +/** Reset the sound chip and use sound channels from the **/ +/** one given in First. **/ +/*************************************************************/ +void Reset8910(register AY8910 *D,int ClockHz,int First); + +/** Write8910() **********************************************/ +/** Call this function to output a value V into the sound **/ +/** chip. **/ +/*************************************************************/ +void Write8910(register AY8910 *D,register byte R,register byte V); + +/** WrCtrl8910() *********************************************/ +/** Write a value V to the PSG Control Port. **/ +/*************************************************************/ +void WrCtrl8910(AY8910 *D,byte V); + +/** WrData8910() *********************************************/ +/** Write a value V to the PSG Data Port. **/ +/*************************************************************/ +void WrData8910(AY8910 *D,byte V); + +/** RdData8910() *********************************************/ +/** Read a value from the PSG Data Port. **/ +/*************************************************************/ +byte RdData8910(AY8910 *D); + +/** Sync8910() ***********************************************/ +/** Flush all accumulated changes by issuing Sound() calls **/ +/** and set the synchronization on/off. The second argument **/ +/** should be AY8910_SYNC/AY8910_ASYNC to set/reset sync, **/ +/** or AY8910_FLUSH to leave sync mode as it is. To emulate **/ +/** noise channels with MIDI drums, OR second argument with **/ +/** AY8910_DRUMS. **/ +/*************************************************************/ +void Sync8910(register AY8910 *D,register byte Sync); + +/** Loop8910() ***********************************************/ +/** Call this function periodically to update volume **/ +/** envelopes. Use mS to pass the time since the last call **/ +/** of Loop8910() in milliseconds. **/ +/*************************************************************/ +void Loop8910(register AY8910 *D,int mS); + +#ifdef __cplusplus +} +#endif +#endif /* AY8910_H */ + diff --git a/MCUME_pico/pico81/AudioPlaySystem.cpp b/MCUME_pico/pico81/AudioPlaySystem.cpp new file mode 100644 index 0000000..aee40a1 --- /dev/null +++ b/MCUME_pico/pico81/AudioPlaySystem.cpp @@ -0,0 +1,176 @@ +#include "emuapi.h" + +#ifdef HAS_SND + +#include "AudioPlaySystem.h" + +#define SAMPLERATE AUDIO_SAMPLE_RATE_EXACT +#define CLOCKFREQ 985248 + +#ifndef CUSTOM_SND +static const short square[]={ +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +}; + +const short noise[] { +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,-32767,-32767, +32767,-32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +}; + +#define NOISEBSIZE 0x100 + +typedef struct +{ + unsigned int spos; + unsigned int sinc; + unsigned int vol; +} Channel; + +static Channel chan[6] = { + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0} }; + +#endif + +volatile bool playing = false; + + +static void snd_Reset(void) +{ +#ifndef CUSTOM_SND + chan[0].vol = 0; + chan[1].vol = 0; + chan[2].vol = 0; + chan[3].vol = 0; + chan[4].vol = 0; + chan[5].vol = 0; + chan[0].sinc = 0; + chan[1].sinc = 0; + chan[2].sinc = 0; + chan[3].sinc = 0; + chan[4].sinc = 0; + chan[5].sinc = 0; +#endif +} + + +#ifdef CUSTOM_SND +extern "C" { +void SND_Process(void *sndbuffer, int sndn); +} +#endif + +#include +void AudioPlaySystem::snd_Mixer(short * stream, int len ) +{ + if (playing) + { +#ifdef CUSTOM_SND + //printf("s\n"); + SND_Process((void*)stream, len); +#else + int i; + long s; + len = len >> 1; + short v0=chan[0].vol; + short v1=chan[1].vol; + short v2=chan[2].vol; + short v3=chan[3].vol; + short v4=chan[4].vol; + short v5=chan[5].vol; + for (i=0;i>8)&0x3f])>>11); + s+=((v1*square[(chan[1].spos>>8)&0x3f])>>11); + s+=((v2*square[(chan[2].spos>>8)&0x3f])>>11); + s+=((v3*noise[(chan[3].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v4*noise[(chan[4].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v5*noise[(chan[5].spos>>8)&(NOISEBSIZE-1)])>>11); + *stream++ = (short)(s); + *stream++ = (short)(s); + chan[0].spos += chan[0].sinc; + chan[1].spos += chan[1].sinc; + chan[2].spos += chan[2].sinc; + chan[3].spos += chan[3].sinc; + chan[4].spos += chan[4].sinc; + chan[5].spos += chan[5].sinc; + } +#endif + } +} + +void AudioPlaySystem::begin(void) +{ + this->reset(); +} + +void AudioPlaySystem::start(void) +{ + playing = true; +} + +void AudioPlaySystem::setSampleParameters(float clockfreq, float samplerate) { +} + +void AudioPlaySystem::reset(void) +{ + snd_Reset(); +} + +void AudioPlaySystem::stop(void) +{ + playing = false; +} + +bool AudioPlaySystem::isPlaying(void) +{ + return playing; +} + + + +void AudioPlaySystem::sound(int C, int F, int V) { +#ifndef CUSTOM_SND + if (C < 6) { + chan[C].vol = V; + chan[C].sinc = F>>1; + } +#endif +} + +void AudioPlaySystem::step(void) { +} +#endif diff --git a/MCUME_pico/pico81/AudioPlaySystem.h b/MCUME_pico/pico81/AudioPlaySystem.h new file mode 100644 index 0000000..5d2efc0 --- /dev/null +++ b/MCUME_pico/pico81/AudioPlaySystem.h @@ -0,0 +1,26 @@ +#ifndef audioplaysystem_h_ +#define audioplaysystem_h_ + +#ifdef HAS_SND + +#include "platform_config.h" + +class AudioPlaySystem +{ +public: + AudioPlaySystem(void) { }; + void begin(void); + void setSampleParameters(float clockfreq, float samplerate); + void reset(void); + void start(void); + void stop(void); + bool isPlaying(void); + void sound(int C, int F, int V); + void buzz(int size, int val); + void step(void); + static void snd_Mixer(short * stream, int len ); +}; + +#endif + +#endif diff --git a/MCUME_pico/pico81/Z80.c b/MCUME_pico/pico81/Z80.c new file mode 100644 index 0000000..130a2ce --- /dev/null +++ b/MCUME_pico/pico81/Z80.c @@ -0,0 +1,462 @@ +/* Emulation of the Z80 CPU with hooks into the other parts of z81. + * Copyright (C) 1994 Ian Collier. + * z81 changes (C) 1995-2001 Russell Marks. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +#include /* for memset/memcpy */ +#include "z80.h" + +#define parity(a) (partable[a]) + +unsigned char partable[256]={ + 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4, + 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0, + 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0, + 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4, + 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0, + 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4, + 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4, + 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0, + 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0, + 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4, + 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4, + 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0, + 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4, + 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0, + 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0, + 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4 + }; + + +unsigned long tstates=0,tsmax=65000,frames=0; + +/* odd place to have this, but the display does work in an odd way :-) */ +unsigned char scrnbmp_new[ZX_VID_FULLWIDTH*ZX_VID_FULLHEIGHT/8]; /* written */ + +/* checked against for diffs */ +int liney=0, lineyi=0; +int vsy=0; +unsigned long linestart=0; +int vsync_toggle=0,vsync_lasttoggle=0; + +static int linestate=0, linex=0, nrmvideo=1; + +#define LINEX ((tstates-linestart)>>2) + + + +/* for vsync off -> on */ +void vsync_raise(void) +{ + /* save current pos */ + vsy=liney; +} + + +/* for vsync on -> off */ +void vsync_lower(void) +{ + int ny=liney,y; + + vsync_toggle++; + + /* we don't emulate this stuff by default; if nothing else, + * it can be fscking annoying when you're typing in a program. + */ + if(!vsync_visuals) + return; + + /* even when we do emulate it, we don't bother with x timing, + * just the y. It gives reasonable results without being too + * complicated, I think. + */ + if(vsy<0) vsy=0; + if(vsy>=ZX_VID_FULLHEIGHT) vsy=ZX_VID_FULLHEIGHT-1; + if(ny<0) ny=0; + if(ny>=ZX_VID_FULLHEIGHT) ny=ZX_VID_FULLHEIGHT-1; + + /* XXX both of these could/should be made into single memset calls */ + if(ny=1) { + if (op&64) { + linestate = 0; + linex = ZX_VID_FULLWIDTH/8; + if (ramsize>=4 && !zx80) { + liney++; + lineyi=1; + } + } else { + linestate++; + linex++; + } + } + + if (!nrmvideo) ulacharline = 0; + + if((pc&0x8000) && !(op&64)) + { + int x,y,v; + + /* do the ULA's char-generating stuff */ + x=linex; + y=liney; + /* printf("ULA %3d,%3d = %02X\n",x,y,op);*/ + if(y>=0 && y=0 && x=tsmax) + { + retval=1; + tstates-=tsmax; + linestart-=tsmax; + nextlinetime-=tsmax; + lastvsyncpend-=tsmax; + vsync_lasttoggle=vsync_toggle; + vsync_toggle=0; + + frames++; + frame_pause(); + } + + /* the vsync length test is pretty arbitrary, because + * the timing isn't very accurate (more or less an instruction + * count) - but it's good enough in practice. + * + * the vsync_toggle test is fairly arbitrary too; + * there has to have been `not too many' for a TV to get + * confused. In practice, more than one would screw it up, + * but since we could be looking at over a frames' worth + * given where vsync_toggle is zeroed, we play it safe. + * also, we use a copy of the previous chunk's worth, + * since we need a full frame(-plus) to decide this. + */ + if(vsynclen && !vsync) + { + if(vsynclen>=10) + { + if(vsync_lasttoggle<=2) + { + vsyncpend=1; /* start of frame */ + /* FAST mode screws up without this, but it's a bit + * unpleasant... :-/ + */ + tstates=nextlinetime; + } + } + else + { + /* independent timing for this would be awkward, so + * anywhere on the line is good enough. Also, + * don't count it as a toggle. + */ + vsync_toggle--; + hsyncskip=1; + } + } + + /* should do this all the time vsync is set */ + if(vsync) + { + ulacharline=0; + vsynclen++; + } + else { + vsynclen=0; + } + + if(tstates>=nextlinetime) /* new line */ + { + /* generate fake sync if we haven't had one for a while; + * but if we just loaded/saved, wait for the first real frame instead + * to avoid jumpiness. + */ + if(!vsync && tstates-lastvsyncpend>=tsmax && !framewait) + vsyncpend=1; + + /* but that won't ever happen if we always have vsync on - + * i.e., if we're grinding away in FAST mode. So for that + * case, we check for vsync being held for a full frame. + */ + if(vsync_visuals && vsynclen>=tsmax) + { + vsyncpend=1; + vsynclen=1; + goto postcopy; /* skip the usual copying */ + } + + if(!vsyncpend) + { + if (!lineyi) liney++; + + if(hsyncgen && !hsyncskip) + { + ulacharline++; + ulacharline&=7; + } + } + else + { + bitbufBlit(scrnbmp_new); + postcopy: + memset(scrnbmp_new,0,sizeof(scrnbmp_new)); + lastvsyncpend=tstates; + vsyncpend=0; + framewait=0; + liney=-1; /* XXX might be something up here */ + } + + if(nmigen) + nmipend=1; + + hsyncskip=0; + linestart=nextlinetime; + nextlinetime+=linegap; + } + + if(intsample && nmipend) + { + nmipend=0; + + if(nmigen) + { + iff2=iff1; + iff1=0; + /* hardware syncs tstates to falling of NMI pulse (?), + * so a slight kludge here... + */ + if(fetch(pc&0x7fff)==0x76) + { + pc++; + tstates=linestart; + } + else + { + /* this seems curiously long, but equally, seems + * to be just about right. :-) + */ + tstates+=27; + } + push2(pc); + pc=0x66; + } + } + + if(intsample && intpend) + { + intpend=0; + if(iff1) + { + if(fetch(pc&0x7fff)==0x76)pc++; + iff1=iff2=0; + tstates+=5; /* accompanied by an input from the data bus */ + switch(im) + { + case 0: /* IM 0 */ + case 1: /* undocumented */ + case 2: /* IM 1 */ + /* there is little to distinguish between these cases */ + tstates+=9; /* perhaps */ + push2(pc); + pc=0x38; + break; + case 3: /* IM 2 */ + /* (seems unlikely it'd ever be used on the '81, but...) */ + tstates+=13; /* perhaps */ + { + int addr=fetch2((i<<8)|0xff); + push2(pc); + pc=addr; + } + } + } + } + + /* this isn't used for any sort of Z80 interrupts, + * purely for the emulator's UI. + */ + if(interrupted) + { + if(interrupted==1) + { + do_interrupt(); /* also zeroes it */ + } + else /* must be 2 */ + { + /* a kludge to let us do a reset */ + interrupted=0; + a=f=b=c=d=e=h=l=a1=f1=b1=c1=d1=e1=h1=l1=i=iff1=iff2=im=r=0; + ixoriy=new_ixoriy=0; + ix=iy=sp=pc=0; + tstates=radjust=0; + nextlinetime=linegap; + vsyncpend=vsynclen=0; + hsyncskip=0; + } + } + + if (retval) break; + } + +} + +void ResetZ80(void) +{ + a=f=b=c=d=e=h=l=a1=f1=b1=c1=d1=e1=h1=l1=i=iff1=iff2=im=r=0; + ixoriy=new_ixoriy=0; + ix=iy=sp=pc=0; + tstates=radjust=0; + nextlinetime=linegap; + tstates=0; + frames=0; + liney=0; + vsy=0; + linestart=0; + vsync_toggle=0; + vsync_lasttoggle=0; + + /* we load a snapshot, in effect.This does the registers. + */ + if(autoload) + { + if (zx80) { + /* Registers (common values) */ + a = 0x00; f = 0x44; b = 0x00; c = 0x00; + d = 0x07; e = 0xae; h = 0x40; l = 0x2a; + pc = 0x0283; + ix = 0x0000; iy = 0x4000; i = 0x0e; r = 0xdd; + a1 = 0x00; f1 = 0x00; b1 = 0x00; c1 = 0x21; + d1 = 0xd8; e1 = 0xf0; h1 = 0xd8; l1 = 0xf0; + iff1 = 0x00; iff2 = 0x00; im = 0x02; + radjust = 0x6a; + /* Machine Stack (common values) */ + if (ramsize >= 16) { + sp = 0x8000 - 4; + } else { + sp = 0x4000 - 4 + ramsize * 1024; + } + mem[sp + 0] = 0x47; + mem[sp + 1] = 0x04; + mem[sp + 2] = 0xba; + mem[sp + 3] = 0x3f; + /* Now override if RAM configuration changes things + * (there's a possibility these changes are unimportant) */ + if (ramsize == 16) { + mem[sp + 2] = 0x22; + } + } else { + static unsigned char bit1[9]={0xFF,0x80,0xFC,0x7F,0x00,0x80,0x00,0xFE,0xFF}; + static unsigned char bit2[4]={0x76,0x06,0x00,0x3e}; + + /* memory will already be zeroed at this point */ + + memcpy(mem+0x4000,bit1,9); + memcpy(mem+0x7ffc,bit2,4); + + a=0x0B; f=0x85; b=0x00; c=0xFF; + d=0x43; e=0x99; h=0xC3; l=0x99; + a1=0xE2; f1=0xA1; b1=0x81; c1=0x02; + d1=0x00; e1=0x2B; h1=0x00; l1=0x00; + i=0x1E; iff1=iff2=0; + im=2; + r=0xDD; radjust=0xCA; + ix=0x281; iy=0x4000; + sp=0x7FFC; + pc=0x207; + } + + + /* finally, load. It'll reset (via reset81) if it fails. */ + load_p(32768); + + /* wait for a real frame, to avoid an annoying frame `jump'. */ + framewait=1; + } +} + + diff --git a/MCUME_pico/pico81/Z80.h b/MCUME_pico/pico81/Z80.h new file mode 100644 index 0000000..5a20dd8 --- /dev/null +++ b/MCUME_pico/pico81/Z80.h @@ -0,0 +1,79 @@ +/* z81/xz81, Linux console and X ZX81/ZX80 emulators. + * Copyright (C) 1994 Ian Collier. z81 changes (C) 1995-2001 Russell Marks. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "common.h" + +#define Z80_quit 1 +#define Z80_NMI 2 +#define Z80_reset 3 +#define Z80_load 4 +#define Z80_save 5 +#define Z80_log 6 + +extern int interrupted; +extern unsigned long tstates,tsmax,frames; + +extern void setzx80mode(void); +extern void vsync_raise(void); +extern void vsync_lower(void); +extern void ResetZ80(void); +extern void ExecZ80(void); + +#define fetch(x) (memptr[(unsigned short)(x)>>10][(x)&1023]) +#define fetch2(x) ((fetch((x)+1)<<8)|fetch(x)) + + +#define store(x,y) do {\ + unsigned short off=(x)&1023;\ + unsigned char page=(unsigned short)(x)>>10;\ + int attr=memattr[page];\ + if(attr){\ + memptr[page][off]=(y);\ + }\ + } while(0) + +#define store2b(x,hi,lo) do {\ + unsigned short off=(x)&1023;\ + unsigned char page=(unsigned short)(x)>>10;\ + int attr=memattr[page];\ + if(attr) { \ + memptr[page][off]=(lo);\ + memptr[page][off+1]=(hi);\ + }\ + } while(0) + +#define store2(x,y) store2b(x,(y)>>8,(y)&255) + +#ifdef __GNUC__ +static void inline storefunc(unsigned short ad,unsigned char b){ + store(ad,b); +} +#undef store +#define store(x,y) storefunc(x,y) + +static void inline store2func(unsigned short ad,unsigned char b1,unsigned char b2){ + store2b(ad,b1,b2); +} +#undef store2b +#define store2b(x,hi,lo) store2func(x,hi,lo) +#endif + +#define bc ((b<<8)|c) +#define de ((d<<8)|e) +#define hl ((h<<8)|l) + diff --git a/MCUME_pico/pico81/cbops.h b/MCUME_pico/pico81/cbops.h new file mode 100644 index 0000000..b5148ba --- /dev/null +++ b/MCUME_pico/pico81/cbops.h @@ -0,0 +1,177 @@ +/* Emulations of the CB operations of the Z80 instruction set. + * Copyright (C) 1994 Ian Collier. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#define var_t unsigned char t +#define rlc(x) (x=(x<<1)|(x>>7),rflags(x,x&1)) +#define rrc(x) do{var_t=x&1;x=(x>>1)|(t<<7);rflags(x,t);}while(0) +#define rl(x) do{var_t=x>>7;x=(x<<1)|(f&1);rflags(x,t);}while(0) +#define rr(x) do{var_t=x&1;x=(x>>1)|(f<<7);rflags(x,t);}while(0) +#define sla(x) do{var_t=x>>7;x<<=1;rflags(x,t);}while(0) +#define sra(x) do{var_t=x&1;x=((signed char)x)>>1;rflags(x,t);}while(0) +#define sll(x) do{var_t=x>>7;x=(x<<1)|1;rflags(x,t);}while(0) +#define srl(x) do{var_t=x&1;x>>=1;rflags(x,t);}while(0) + +#define rflags(x,c) (f=(c)|(x&0xa8)|((!x)<<6)|parity(x)) + +#define bit(n,x) (f=(f&1)|((x&(1<>3)&7; + switch(op&0xc7){ + case 0x40: bit(n,b); break; + case 0x41: bit(n,c); break; + case 0x42: bit(n,d); break; + case 0x43: bit(n,e); break; + case 0x44: bit(n,h); break; + case 0x45: bit(n,l); break; + case 0x46: tstates+=4;val=fetch(addr);bit(n,val);store(addr,val);break; + case 0x47: bit(n,a); break; + case 0x80: res(n,b); break; + case 0x81: res(n,c); break; + case 0x82: res(n,d); break; + case 0x83: res(n,e); break; + case 0x84: res(n,h); break; + case 0x85: res(n,l); break; + case 0x86: tstates+=4;val=fetch(addr);res(n,val);store(addr,val);break; + case 0x87: res(n,a); break; + case 0xc0: set(n,b); break; + case 0xc1: set(n,c); break; + case 0xc2: set(n,d); break; + case 0xc3: set(n,e); break; + case 0xc4: set(n,h); break; + case 0xc5: set(n,l); break; + case 0xc6: tstates+=4;val=fetch(addr);set(n,val);store(addr,val);break; + case 0xc7: set(n,a); break; + } + } + if(ixoriy)switch(reg){ + case 0:b=val; break; + case 1:c=val; break; + case 2:d=val; break; + case 3:e=val; break; + case 4:h=val; break; + case 5:l=val; break; + case 7:a=val; break; + } +} + +#undef var_t +#undef rlc +#undef rrc +#undef rl +#undef rr +#undef sla +#undef sra +#undef sll +#undef srl +#undef rflags +#undef bit +#undef set +#undef res + diff --git a/MCUME_pico/pico81/common.h b/MCUME_pico/pico81/common.h new file mode 100644 index 0000000..1fd420d --- /dev/null +++ b/MCUME_pico/pico81/common.h @@ -0,0 +1,46 @@ + +typedef unsigned char byte; +//typedef unsigned short word; + +#define WIDTH 320 +#define HEIGHT 192 +#define BORDER 32 + +#define CYCLES_PER_FRAME 65000//3500000/50 + + +/* full internal image with overscan (but not hsync/vsync areas) */ +#define ZX_VID_MARGIN 55 +#define ZX_VID_HMARGIN (8*8) +#define ZX_VID_FULLWIDTH (2*ZX_VID_HMARGIN+32*8) /* sic */ +#define ZX_VID_FULLHEIGHT (2*ZX_VID_MARGIN+192) + + +/* AY board types */ +#define AY_TYPE_NONE 0 +#define AY_TYPE_QUICKSILVA 1 +#define AY_TYPE_ZONX 2 + + +extern unsigned char * mem; +extern unsigned char *memptr[64]; +extern int memattr[64]; +extern unsigned long tstates,tsmax; +extern int vsync_visuals; +extern int ramsize; +extern int interrupted; +extern int nmigen,hsyncgen,vsync; +extern int autoload; +extern int zx80; + +extern void sighandler(int a); +extern unsigned int in(int h,int l); +extern unsigned int out(int h,int l,int a); +extern void do_interrupt(); +extern void save_p(int a); +extern void load_p(int a); +extern void do_interrupt(); +extern void reset81(); +extern void frame_pause(void); +extern void bitbufBlit(unsigned char * buf); + diff --git a/MCUME_pico/pico81/edops.h b/MCUME_pico/pico81/edops.h new file mode 100644 index 0000000..c68237e --- /dev/null +++ b/MCUME_pico/pico81/edops.h @@ -0,0 +1,545 @@ +/* Emulations of the ED operations of the Z80 instruction set. + * Copyright (C) 1994 Ian Collier. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#define input(var) { unsigned short u;\ + var=u=in(b,c);\ + tstates+=u>>8;\ + f=(f&1)|(var&0xa8)|((!var)<<6)|parity(var);\ + } +#define sbchl(x) { unsigned short z=(x);\ + unsigned long t=(hl-z-cy)&0x1ffff;\ + f=((t>>8)&0xa8)|(t>>16)|2|\ + (((hl&0xfff)<(z&0xfff)+cy)<<4)|\ + (((hl^z)&(hl^t)&0x8000)>>13)|\ + ((!(t&0xffff))<<6)|2;\ + l=t;\ + h=t>>8;\ + } + +#define adchl(x) { unsigned short z=(x);\ + unsigned long t=hl+z+cy;\ + f=((t>>8)&0xa8)|(t>>16)|\ + (((hl&0xfff)+(z&0xfff)+cy>0xfff)<<4)|\ + (((~hl^z)&(hl^t)&0x8000)>>13)|\ + ((!(t&0xffff))<<6)|2;\ + l=t;\ + h=t>>8;\ + } + +#define neg (a=-a,\ + f=(a&0xa8)|((!a)<<6)|(((a&15)>0)<<4)|((a==128)<<2)|2|(a>0)) + +{ + unsigned char op=fetch(pc&0x7fff); + pc++; + radjust++; + switch(op){ +instr(0x40,8); + input(b); +endinstr; + +instr(0x41,8); + tstates+=out(b,c,b); +endinstr; + +instr(0x42,11); + sbchl(bc); +endinstr; + +instr(0x43,16); + {unsigned short addr=fetch2(pc); + pc+=2; + store2b(addr,b,c); + } +endinstr; + +instr(0x44,4); + neg; +endinstr; + +instr(0x45,4); + iff1=iff2; + ret; +endinstr; + +instr(0x46,4); + im=0; +endinstr; + +instr(0x47,5); + i=a; +endinstr; + +instr(0x48,8); + input(c); +endinstr; + +instr(0x49,8); + tstates+=out(b,c,c); +endinstr; + +instr(0x4a,11); + adchl(bc); +endinstr; + +instr(0x4b,16); + {unsigned short addr=fetch2(pc); + pc+=2; + c=fetch(addr); + b=fetch(addr+1); + } +endinstr; + +instr(0x4c,4); + neg; +endinstr; + +instr(0x4d,4); + ret; +endinstr; + +instr(0x4e,4); + im=1; +endinstr; + +instr(0x4f,5); + r=a; + radjust=r; +endinstr; + +instr(0x50,8); + input(d); +endinstr; + +instr(0x51,8); + tstates+=out(b,c,d); +endinstr; + +instr(0x52,11); + sbchl(de); +endinstr; + +instr(0x53,16); + {unsigned short addr=fetch2(pc); + pc+=2; + store2b(addr,d,e); + } +endinstr; + +instr(0x54,4); + neg; +endinstr; + +instr(0x55,4); + ret; +endinstr; + +instr(0x56,4); + im=2; +endinstr; + +instr(0x57,5); + a=i; + f=(f&1)|(a&0xa8)|((!a)<<6)|(iff2<<2); +endinstr; + +instr(0x58,8); + input(e); +endinstr; + +instr(0x59,8); + tstates+=out(b,c,e); +endinstr; + +instr(0x5a,11); + adchl(de); +endinstr; + +instr(0x5b,16); + {unsigned short addr=fetch2(pc); + pc+=2; + e=fetch(addr); + d=fetch(addr+1); + } +endinstr; + +instr(0x5c,4); + neg; +endinstr; + +instr(0x5d,4); + ret; +endinstr; + +instr(0x5e,4); + im=3; +endinstr; + +instr(0x5f,5); + r=(r&0x80)|(radjust&0x7f); + a=r; + f=(f&1)|(a&0xa8)|((!a)<<6)|(iff2<<2); +endinstr; + +instr(0x60,8); + input(h); +endinstr; + +instr(0x61,8); + tstates+=out(b,c,h); +endinstr; + +instr(0x62,11); + sbchl(hl); +endinstr; + +instr(0x63,16); + {unsigned short addr=fetch2(pc); + pc+=2; + store2b(addr,h,l); + } +endinstr; + +instr(0x64,4); + neg; +endinstr; + +instr(0x65,4); + ret; +endinstr; + +instr(0x66,4); + im=0; +endinstr; + +instr(0x67,14); + {unsigned char t=fetch(hl); + unsigned char u=(a<<4)|(t>>4); + a=(a&0xf0)|(t&0x0f); + store(hl,u); + f=(f&1)|(a&0xa8)|((!a)<<6)|parity(a); + } +endinstr; + +instr(0x68,8); + input(l); +endinstr; + +instr(0x69,8); + tstates+=out(b,c,l); +endinstr; + +instr(0x6a,11); + adchl(hl); +endinstr; + +instr(0x6b,16); + {unsigned short addr=fetch2(pc); + pc+=2; + l=fetch(addr); + h=fetch(addr+1); + } +endinstr; + +instr(0x6c,4); + neg; +endinstr; + +instr(0x6d,4); + ret; +endinstr; + +instr(0x6e,4); + im=1; +endinstr; + +instr(0x6f,5); + {unsigned char t=fetch(hl); + unsigned char u=(a&0x0f)|(t<<4); + a=(a&0xf0)|(t>>4); + store(hl,u); + f=(f&1)|(a&0xa8)|((!a)<<6)|parity(a); + } +endinstr; + +instr(0x70,8); + {unsigned char x;input(x);} +endinstr; + +instr(0x71,8); + tstates+=out(b,c,0); +endinstr; + +instr(0x72,11); + sbchl(sp); +endinstr; + +instr(0x73,16); + {unsigned short addr=fetch2(pc); + pc+=2; + store2(addr,sp); + } +endinstr; + +instr(0x74,4); + neg; +endinstr; + +instr(0x75,4); + ret; +endinstr; + +instr(0x76,4); + im=2; +endinstr; + +instr(0x78,8); + input(a); +endinstr; + +instr(0x79,8); + tstates+=out(b,c,a); +endinstr; + +instr(0x7a,11); + adchl(sp); +endinstr; + +instr(0x7b,16); + {unsigned short addr=fetch2(pc); + pc+=2; + sp=fetch2(addr); + } +endinstr; + +instr(0x7c,4); + neg; +endinstr; + +instr(0x7d,4); + ret; +endinstr; + +instr(0x7e,4); + im=3; +endinstr; + +instr(0xa0,12); + {unsigned char x=fetch(hl); + store(de,x); + if(!++l)h++; + if(!++e)d++; + if(!c--)b--; + f=(f&0xc1)|(x&0x28)|(((b|c)>0)<<2); + } +endinstr; + +instr(0xa1,12); + {unsigned char carry=cy; + cpa(fetch(hl)); + if(!++l)h++; + if(!c--)b--; + f=(f&0xfa)|carry|(((b|c)>0)<<2); + } +endinstr; + +instr(0xa2,12); + {unsigned short t=in(b,c); + store(hl,t); + tstates+=t>>8; + if(!++l)h++; + b--; + f=(b&0xa8)|((b>0)<<6)|2|((parity(b)^c)&4); + } +endinstr; + +instr(0xa3,12); /* I can't determine the correct flags outcome for the + block OUT instructions. Spec says that the carry + flag is left unchanged and N is set to 1, but that + doesn't seem to be the case... */ + {unsigned char x=fetch(hl); + tstates+=out(b,c,x); + if(!++l)h++; + b--; + f=(f&1)|0x12|(b&0xa8)|((b==0)<<6); + } +endinstr; + +instr(0xa8,12); + {unsigned char x=fetch(hl); + store(de,x); + if(!l--)h--; + if(!e--)d--; + if(!c--)b--; + f=(f&0xc1)|(x&0x28)|(((b|c)>0)<<2); + } +endinstr; + +instr(0xa9,12); + {unsigned char carry=cy; + cpa(fetch(hl)); + if(!l--)h--; + if(!c--)b--; + f=(f&0xfa)|carry|(((b|c)>0)<<2); + } +endinstr; + +instr(0xaa,12); + {unsigned short t=in(b,c); + store(hl,t); + tstates+=t>>8; + if(!l--)h--; + b--; + f=(b&0xa8)|((b>0)<<6)|2|((parity(b)^c^4)&4); + } +endinstr; + +instr(0xab,12); + {unsigned char x=fetch(hl); + tstates+=out(b,c,x); + if(!l--)h--; + b--; + f=(f&1)|0x12|(b&0xa8)|((b==0)<<6); + } +endinstr; + +/* Note: the Z80 implements "*R" as "*" followed by JR -2. No reason + to change this... */ + +instr(0xb0,12); + {unsigned char x=fetch(hl); + store(de,x); + if(!++l)h++; + if(!++e)d++; + if(!c--)b--; + f=(f&0xc1)|(x&0x28)|(((b|c)>0)<<2); + if(b|c)pc-=2,tstates+=5; + } +endinstr; + +instr(0xb1,12); + {unsigned char carry=cy; + cpa(fetch(hl)); + if(!++l)h++; + if(!c--)b--; + f=(f&0xfa)|carry|(((b|c)>0)<<2); + if((f&0x44)==4)pc-=2,tstates+=5; + } +endinstr; + +instr(0xb2,12); + {unsigned short t=in(b,c); + store(hl,t); + tstates+=t>>8; + if(!++l)h++; + b--; + f=(b&0xa8)|((b>0)<<6)|2|((parity(b)^c)&4); + if(b)pc-=2,tstates+=5; + } +endinstr; + +instr(0xb3,12); + {unsigned char x=fetch(hl); + tstates+=out(b,c,x); + if(!++l)h++; + b--; + f=(f&1)|0x12|(b&0xa8)|((b==0)<<6); + if(b)pc-=2,tstates+=5; + } +endinstr; + +instr(0xb8,12); + {unsigned char x=fetch(hl); + store(de,x); + if(!l--)h--; + if(!e--)d--; + if(!c--)b--; + f=(f&0xc1)|(x&0x28)|(((b|c)>0)<<2); + if(b|c)pc-=2,tstates+=5; + } +endinstr; + +instr(0xb9,12); + {unsigned char carry=cy; + cpa(fetch(hl)); + if(!l--)h--; + if(!c--)b--; + f=(f&0xfa)|carry|(((b|c)>0)<<2); + if((f&0x44)==4)pc-=2,tstates+=5; + } +endinstr; + +instr(0xba,12); + {unsigned short t=in(b,c); + store(hl,t); + tstates+=t>>8; + if(!l--)h--; + b--; + f=(b&0xa8)|((b>0)<<6)|2|((parity(b)^c^4)&4); + if(b)pc-=2,tstates+=5; + } +endinstr; + +instr(0xbb,12); + {unsigned char x=fetch(hl); + tstates+=out(b,c,x); + if(!l--)h--; + b--; + f=(f&1)|0x12|(b&0xa8)|((b==0)<<6); + if(b)pc-=2,tstates+=5; + } +endinstr; + +/* save/load patches */ + +instr(0xfc,4); +#ifdef SZ81 /* Added by Thunor */ + if(!zx80 && hl < 0x8000) + { + sdl_load_file(hl,LOAD_FILE_METHOD_NAMEDLOAD); + } + else /* if((!zx80 && hl >= 0x8000) || zx80) */ + { + sdl_load_file(hl,LOAD_FILE_METHOD_SELECTLOAD); + } +#else + load_p(hl); +#endif + framewait=1; +endinstr; + +instr(0xfd,4); +#ifdef SZ81 /* Added by Thunor */ + if(zx80) + { + sdl_save_file(hl,SAVE_FILE_METHOD_UNNAMEDSAVE); + } + else + { + sdl_save_file(hl,SAVE_FILE_METHOD_NAMEDSAVE); + } +#else + save_p(hl); +#endif + framewait=1; +endinstr; + +default: tstates+=4; + +}} + diff --git a/MCUME_pico/pico81/emuapi.cpp b/MCUME_pico/pico81/emuapi.cpp new file mode 100644 index 0000000..febb361 --- /dev/null +++ b/MCUME_pico/pico81/emuapi.cpp @@ -0,0 +1,779 @@ +#define KEYMAP_PRESENT 1 + +#define PROGMEM + +#include "pico.h" +#include "pico/stdlib.h" +#include "hardware/adc.h" +#include +#include + +extern "C" { + #include "emuapi.h" + #include "iopins.h" +} + + +#include "vga_t_dma.h" +const uint16_t deflogo[] = { + 0,0 +}; +static const uint16_t * logo = deflogo; +static const unsigned short * keysw = keyswzx80; + +#define MAX_FILES 64 +#define MAX_FILENAME_SIZE 24 +#define MAX_MENULINES 9 +#define TEXT_HEIGHT 16 +#define TEXT_WIDTH 8 +#define MENU_FILE_XOFFSET (6*TEXT_WIDTH) +#define MENU_FILE_YOFFSET (2*TEXT_HEIGHT) +#define MENU_FILE_W (MAX_FILENAME_SIZE*TEXT_WIDTH) +#define MENU_FILE_H (MAX_MENULINES*TEXT_HEIGHT) +#define MENU_FILE_BGCOLOR RGBVAL16(0x00,0x00,0x40) +#define MENU_JOYS_YOFFSET (12*TEXT_HEIGHT) +#define MENU_VBAR_XOFFSET (0*TEXT_WIDTH) +#define MENU_VBAR_YOFFSET (MENU_FILE_YOFFSET) + +#define MENU_TFT_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_TFT_YOFFSET (MENU_VBAR_YOFFSET+32) +#define MENU_VGA_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_VGA_YOFFSET (MENU_VBAR_YOFFSET+MENU_FILE_H-32-37) + +extern TFT_T_DMA tft; + +static char romspath[64]; +static int nbFiles=0; +static int curFile=0; +static int topFile=0; +static char selection[MAX_FILENAME_SIZE+1]=""; +static char files[MAX_FILES][MAX_FILENAME_SIZE]; +static bool menuRedraw=true; + +static bool i2cKeyboardPresent = false; +static unsigned short * keys; +static int keyMap; + +static int keypadval=0; +static bool joySwapped = false; +static uint16_t bLastState; +static int xRef; +static int yRef; +static uint8_t usbnavpad=0; + +static bool menuOn=true; + + + + +void emu_printf(char * text) +{ + printf("%s\n",text); +} + +void emu_printf(int val) +{ + printf("%d\n",val); +} + +void emu_printi(int val) +{ + printf("%d\n",val); +} + +void emu_printh(int val) +{ + printf("0x%.8\n",val); +} + +static int malbufpt = 0; +static char malbuf[EXTRA_HEAP]; + +void * emu_Malloc(int size) +{ + void * retval = malloc(size); + if (!retval) { + emu_printf("failled to allocate"); + emu_printf(size); + emu_printf("fallback"); + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + } + else { + emu_printf("failure to allocate"); + } + } + else { + emu_printf("could allocate dynamic "); + emu_printf(size); + } + + return retval; +} + +void * emu_MallocI(int size) +{ + void * retval = NULL; + + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + emu_printf("could allocate static "); + emu_printf(size); + } + else { + emu_printf("failure to allocate"); + } + + return retval; +} +void emu_Free(void * pt) +{ + free(pt); +} + + + + + +int emu_ReadAnalogJoyX(int min, int max) +{ + adc_select_input(0); + int val = adc_read(); +#if INVX + val = 4095 - val; +#endif + val = val-xRef; + val = ((val*140)/100); + if ( (val > -512) && (val < 512) ) val = 0; + val = val+2048; + return (val*(max-min))/4096; +} + +int emu_ReadAnalogJoyY(int min, int max) +{ + adc_select_input(1); + int val = adc_read(); +#if INVY + val = 4095 - val; +#endif + val = val-yRef; + val = ((val*120)/100); + if ( (val > -512) && (val < 512) ) val = 0; + //val = (val*(max-min))/4096; + val = val+2048; + //return val+(max-min)/2; + return (val*(max-min))/4096; +} + + +static uint16_t readAnalogJoystick(void) +{ + uint16_t joysval = 0; + + int xReading = emu_ReadAnalogJoyX(0,256); + if (xReading > 128) joysval |= MASK_JOY2_LEFT; + else if (xReading < 128) joysval |= MASK_JOY2_RIGHT; + + int yReading = emu_ReadAnalogJoyY(0,256); + if (yReading < 128) joysval |= MASK_JOY2_UP; + else if (yReading > 128) joysval |= MASK_JOY2_DOWN; + +#ifdef PIN_JOY2_BTN + joysval |= (gpio_get(PIN_JOY2_BTN) ? 0 : MASK_JOY2_BTN); +#endif + return (joysval); +} + + +int emu_SwapJoysticks(int statusOnly) { + if (!statusOnly) { + if (joySwapped) { + joySwapped = false; + } + else { + joySwapped = true; + } + } + return(joySwapped?1:0); +} + +int emu_GetPad(void) +{ + return(keypadval/*|((joySwapped?1:0)<<7)*/); +} + +int emu_ReadKeys(void) +{ + uint16_t retval; + uint16_t j1 = readAnalogJoystick(); + uint16_t j2 = 0; + + // Second joystick +#if INVY +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_DOWN; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_UP; +#endif +#else +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_UP; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_DOWN; +#endif +#endif +#if INVX +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_LEFT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_RIGHT; +#endif +#else +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_RIGHT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_LEFT; +#endif +#endif +#ifdef PIN_JOY1_BTN + if ( !gpio_get(PIN_JOY1_BTN) ) j2 |= MASK_JOY2_BTN; +#endif + if (joySwapped) { + retval = ((j1 << 8) | j2); + } + else { + retval = ((j2 << 8) | j1); + } + + if (usbnavpad & MASK_JOY2_UP) retval |= MASK_JOY2_UP; + if (usbnavpad & MASK_JOY2_DOWN) retval |= MASK_JOY2_DOWN; + if (usbnavpad & MASK_JOY2_LEFT) retval |= MASK_JOY2_LEFT; + if (usbnavpad & MASK_JOY2_RIGHT) retval |= MASK_JOY2_RIGHT; + if (usbnavpad & MASK_JOY2_BTN) retval |= MASK_JOY2_BTN; +#ifdef PIN_KEY_USER1 + if ( !gpio_get(PIN_KEY_USER1) ) retval |= MASK_KEY_USER1; +#endif +#ifdef PIN_KEY_USER2 + if ( !gpio_get(PIN_KEY_USER2) ) retval |= MASK_KEY_USER2; +#endif +#ifdef PIN_KEY_USER3 + if ( !gpio_get(PIN_KEY_USER3) ) retval |= MASK_KEY_USER3; +#endif +#ifdef PIN_KEY_USER4 + if ( !gpio_get(PIN_KEY_USER4) ) retval |= MASK_KEY_USER4; +#endif + + //Serial.println(retval,HEX); + + if ( ((retval & (MASK_KEY_USER1+MASK_KEY_USER2)) == (MASK_KEY_USER1+MASK_KEY_USER2)) + || (retval & MASK_KEY_USER4 ) ) + { + } + + return (retval); +} + +unsigned short emu_DebounceLocalKeys(void) +{ + uint16_t bCurState = emu_ReadKeys(); + uint16_t bClick = bCurState & ~bLastState; + bLastState = bCurState; + + return (bClick); +} + +int emu_ReadI2CKeyboard(void) { + int retval=0; + + return(retval); +} + +void emu_InitJoysticks(void) { + + // Second Joystick +#ifdef PIN_JOY1_1 + gpio_set_pulls(PIN_JOY1_1,true,false); + gpio_set_dir(PIN_JOY1_1,GPIO_IN); +#endif +#ifdef PIN_JOY1_2 + gpio_set_pulls(PIN_JOY1_2,true,false); + gpio_set_dir(PIN_JOY1_2,GPIO_IN); +#endif +#ifdef PIN_JOY1_3 + gpio_set_pulls(PIN_JOY1_3,true,false); + gpio_set_dir(PIN_JOY1_3,GPIO_IN); +#endif +#ifdef PIN_JOY1_4 + gpio_set_pulls(PIN_JOY1_4,true,false); + gpio_set_dir(PIN_JOY1_4,GPIO_IN); +#endif +#ifdef PIN_JOY1_BTN + gpio_set_pulls(PIN_JOY1_BTN,true,false); + gpio_set_dir(PIN_JOY1_BTN,GPIO_IN); +#endif + +#ifdef PIN_KEY_USER1 + gpio_set_pulls(PIN_KEY_USER1,true,false); + gpio_set_dir(PIN_KEY_USER1,GPIO_IN); +#endif +#ifdef PIN_KEY_USER2 + gpio_set_pulls(PIN_KEY_USER2,true,false); + gpio_set_dir(PIN_KEY_USER2,GPIO_IN); +#endif +#ifdef PIN_KEY_USER3 + gpio_set_pulls(PIN_KEY_USER3,true,false); + gpio_set_dir(PIN_KEY_USER3,GPIO_IN); +#endif +#ifdef PIN_KEY_USER4 + gpio_set_pulls(PIN_KEY_USER4,true,false); + gpio_set_dir(PIN_KEY_USER4,GPIO_IN); +#endif +#ifdef PIN_JOY2_BTN + gpio_set_pulls(PIN_JOY2_BTN,true,false); + gpio_set_dir(PIN_JOY2_BTN,GPIO_IN); +#endif + + adc_init(); + adc_gpio_init(PIN_JOY2_A1X); + adc_gpio_init(PIN_JOY2_A2Y); + xRef=0; yRef=0; + for (int i=0; i<10; i++) { + adc_select_input(0); + xRef += adc_read(); + adc_select_input(1); + yRef += adc_read(); + sleep_ms(20); + } + +#if INVX + xRef = 4095 -xRef/10; +#else + xRef /= 10; +#endif +#if INVY + yRef = 4095 -yRef/10; +#else + yRef /= 10; +#endif +} + + + + +int emu_setKeymap(int index) { + if (index) { + keysw = keyswzx81; + } + else { + keysw = keyswzx80; + } +} + + + +#include "ff.h" +static FATFS fatfs; +static FIL file; +extern "C" int sd_init_driver(void); + +static int readNbFiles(char * rootdir) { + int totalFiles = 0; + + DIR dir; + FILINFO entry; + FRESULT fr = f_findfirst(&dir, &entry, rootdir, "*"); + while ( (fr == FR_OK) && (entry.fname[0]) && (totalFiles=0) { + menuRedraw=true; + curFile -= 9; + } else if (curFile!=0) { + menuRedraw=true; + curFile--; + } + } + else if (bClick & MASK_JOY2_DOWN) { + if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_JOY2_LEFT) || (bClick & MASK_JOY1_LEFT) ) { + if ((curFile<(nbFiles-9)) && (nbFiles)) { + curFile += 9; + menuRedraw=true; + } + else if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_KEY_USER2) ) { + emu_SwapJoysticks(0); + menuRedraw=true; + } + + if (menuRedraw && nbFiles) { + int fileIndex = 0; + tft.drawRectNoDma(MENU_FILE_XOFFSET,MENU_FILE_YOFFSET, MENU_FILE_W, MENU_FILE_H, MENU_FILE_BGCOLOR); +// if (curFile <= (MAX_MENULINES/2-1)) topFile=0; +// else topFile=curFile-(MAX_MENULINES/2); + if (curFile <= (MAX_MENULINES-1)) topFile=0; + else topFile=curFile-(MAX_MENULINES/2); + + //Serial.print("curfile: "); + //Serial.println(curFile); + //Serial.print("topFile: "); + //Serial.println(topFile); + + int i=0; + while (i=nbFiles) { + // no more files + break; + } + char * filename = &files[fileIndex][0]; + if (fileIndex >= topFile) { + if ((i+topFile) < nbFiles ) { + if ((i+topFile)==curFile) { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0x00), RGBVAL16(0xff,0x00,0x00), true); + strcpy(selection,filename); + } + else { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0xff), MENU_FILE_BGCOLOR, true); + } + } + i++; + } + fileIndex++; + } + + + tft.drawTextNoDma(48,MENU_JOYS_YOFFSET+8, (emu_SwapJoysticks(1)?(char*)"SWAP=1":(char*)"SWAP=0"), RGBVAL16(0x00,0xff,0xff), RGBVAL16(0x00,0x00,0xff), false); + menuRedraw=false; + } + + return (action); +} + +bool menuActive(void) +{ + return (menuOn); +} + +void toggleMenu(bool on) { + if (on) { + menuOn = true; + backgroundMenu(); + } else { + menuOn = false; + } +} + +char * menuSelection(void) +{ + return (selection); +} + + + + + + + + + +int emu_FileOpen(char * filename) +{ + int retval = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileOpen..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + retval = 1; + } + else { + emu_printf("FileOpen failed"); + } + return (retval); +} + +int emu_FileRead(char * buf, int size) +{ + unsigned char buffer[256]; + int remaining = size; + int byteread = 0; + unsigned int retval=0; + if (size < 256) { + if( !(f_read (&file, buffer, size, &retval)) ) + if (retval>0) { + memcpy(buf,buffer,retval); + byteread += retval; + } + } + else { + while (remaining>0) { + if( !(f_read (&file, buffer, 256, &retval)) ) + //f_read (&file, buffer, 256, &retval); + if (retval>0) { + //emu_printi(retval); + memcpy(buf,buffer,retval); + buf += retval; + byteread += retval; + remaining -= retval; + } + else { + break; + } + } + } + return byteread; +} + +unsigned char emu_FileGetc(void) { + unsigned char c; + unsigned int retval=0; + if( !(f_read (&file, &c, 1, &retval)) ) + if (retval != 1) { + emu_printf("emu_FileGetc failed"); + } + return c; +} + + +void emu_FileClose(void) +{ + f_close(&file); +} + +int emu_FileSize(char * filename) +{ + int filesize=0; + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileSize..."); + emu_printf(filepath); + FILINFO entry; + f_stat(filepath, &entry); + filesize = entry.fsize; + return(filesize); +} + + +#ifdef SDIO + +int emu_FileSeek(int seek) +{ +#ifdef USE_SDFS + f_lseek(&file, seek); +#else + file.seek(seek); +#endif + return (seek); +} + +int emu_FileTell(void) +{ +#ifdef USE_SDFS + return (f_tell(&file)); +#else + return (50); +#endif +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + filesize = file.size(); + emu_printf(filesize); + + if (size >= filesize) + { + if (emu_FileRead(buf, filesize) != filesize) + { + emu_printf("File read failed"); + } + } + file.close(); + } +#endif + + return(filesize); +} + +int emu_LoadFileSeek(char * filename, char * buf, int size, int seek) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFileSeek..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + f_lseek(&file, seek); + emu_printf(size); + if (size >= filesize) + { + int retval=0; + if( (!f_read (&file, buf, size, &retval)) ) + if (retval != size) + { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + file.seek(seek); + emu_printf(size); + if (file.read(buf, size) != size) { + emu_printf("File read failed"); + } + file.close(); + } +#endif + + return(filesize); +} +#endif + + + +void emu_init(void) +{ + sd_init_driver(); + FRESULT fr = f_mount(&fatfs, "0:", 1); + //emu_FileSystemInit(); + + strcpy(romspath,ROMSDIR); + nbFiles = readNbFiles(romspath); + + emu_printf("SD initialized, files found: "); + emu_printi(nbFiles); + + emu_InitJoysticks(); +#ifdef SWAP_JOYSTICK + joySwapped = true; +#else + joySwapped = false; +#endif + + toggleMenu(true); +} + + +void emu_start(void) +{ + + usbnavpad = 0; + + keys = (unsigned short *)key_map1; + keyMap = 0; +} diff --git a/MCUME_pico/pico81/emuapi.h b/MCUME_pico/pico81/emuapi.h new file mode 100644 index 0000000..f0e2bbf --- /dev/null +++ b/MCUME_pico/pico81/emuapi.h @@ -0,0 +1,151 @@ +#ifndef EMUAPI_H +#define EMUAPI_H + +#include "platform_config.h" + +//#define TIMER_REND 1 +#define EXTRA_HEAP 0x10 + +// Title: < > +#define TITLE " ZX81/ZX80 Emulator" +#define ROMSDIR "z81" + +#define emu_Init(ROM) {z81_Start(ROM); z81_Init(); } +#define emu_Step(x) {z81_Step();} +#define emu_Input(x) {} + +#define PALETTE_SIZE 2 +#define VID_FRAME_SKIP 0x3 +#define TFT_VBUFFER_YCROP 0 +#define SINGLELINE_RENDERING 1 + +#define ACTION_NONE 0 +#define ACTION_MAXKBDVAL 225 +#define ACTION_EXITKBD 128 +#define ACTION_RUNTFT 129 +#define ACTION_RUNVGA 130 + +#ifdef KEYMAP_PRESENT + +#define TAREA_W_DEF 32 +#define TAREA_H_DEF 32 +#define TAREA_END 255 +#define TAREA_NEW_ROW 254 +#define TAREA_NEW_COL 253 +#define TAREA_XY 252 +#define TAREA_WH 251 + +#define KEYBOARD_X 10 +#define KEYBOARD_Y 8 +#define KEYBOARD_KEY_H 40 +#define KEYBOARD_KEY_W 30 +#define KEYBOARD_HIT_COLOR RGBVAL16(0xff,0x00,0x00) + +const unsigned short keyswzx80[] = { + TAREA_XY,KEYBOARD_X,KEYBOARD_Y+16, + TAREA_WH,KEYBOARD_KEY_W,KEYBOARD_KEY_H-6, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_END}; + +const unsigned short keyswzx81[] = { + TAREA_XY,KEYBOARD_X,KEYBOARD_Y, + TAREA_WH,KEYBOARD_KEY_W,KEYBOARD_KEY_H, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_END}; + +const unsigned short key_map1[] = { + 30,31,32,33,34,35,36,37,38,39, + 20,26, 8,21,23,28,25,12,18,19, + 4, 9, 7,22, 4,11,13,14,15,40, + 25, 6,27,29,224,5,17,16,225,44 + }; + +#ifdef HAS_I2CKBD +const unsigned short i2ckeys[] = { + 0X0080,0X0008,0X0180,0X0108,0X0280,0X0208,0X0380,0X0308,0X0480,0X0408, + 0X0040,0X0004,0X0140,0X0104,0X0240,0X0204,0X0340,0X0304,0X0440,0X0404, + 0X0020,0X0002,0X0120,0X0102,0X0220,0X0202,0X0320,0X0302,0X0420,0X0402, + 0X0010,0X0001,0X0110,0X0101,0X0210,0X0201,0X0310,0X0301,0X0410,0X0401, + }; +#endif + +#endif + +#define MASK_JOY2_RIGHT 0x0001 +#define MASK_JOY2_LEFT 0x0002 +#define MASK_JOY2_UP 0x0004 +#define MASK_JOY2_DOWN 0x0008 +#define MASK_JOY2_BTN 0x0010 +#define MASK_KEY_USER1 0x0020 +#define MASK_KEY_USER2 0x0040 +#define MASK_KEY_USER3 0x0080 +#define MASK_JOY1_RIGHT 0x0100 +#define MASK_JOY1_LEFT 0x0200 +#define MASK_JOY1_UP 0x0400 +#define MASK_JOY1_DOWN 0x0800 +#define MASK_JOY1_BTN 0x1000 +#define MASK_KEY_USER4 0x2000 + + +extern void emu_init(void); +extern void emu_start(void); +extern void emu_resetSD(void); + +extern void emu_printf(char * text); +extern void emu_printi(int val); +extern void * emu_Malloc(int size); +extern void emu_Free(void * pt); + +extern int emu_FileOpen(char * filename); +extern int emu_FileRead(char * buf, int size); +extern unsigned char emu_FileGetc(void); +extern int emu_FileSeek(int seek); +extern void emu_FileClose(void); +extern int emu_FileSize(char * filename); +extern int emu_LoadFile(char * filename, char * buf, int size); +extern int emu_LoadFileSeek(char * filename, char * buf, int size, int seek); +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); + +extern void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index); +extern void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride); +extern void emu_DrawLine(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line); +extern void emu_DrawVsync(void); +extern int emu_FrameSkip(void); +extern void * emu_LineBuffer(int line); + +extern void emu_InitJoysticks(void); +extern int emu_SwapJoysticks(int statusOnly); +extern unsigned short emu_DebounceLocalKeys(void); +extern int emu_ReadKeys(void); +extern int emu_GetPad(void); +extern int emu_ReadAnalogJoyX(int min, int max); +extern int emu_ReadAnalogJoyY(int min, int max); +extern int emu_ReadI2CKeyboard(void); +extern void emu_KeyboardOnUp(int keymodifer, int key); +extern void emu_KeyboardOnDown(int keymodifer, int key); + +extern void emu_sndPlaySound(int chan, int volume, int freq); +extern void emu_sndPlayBuzz(int size, int val); +extern void emu_sndInit(); +extern void emu_resetus(void); +extern int emu_us(void); + +extern int emu_setKeymap(int index); + +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); +extern void emu_printh(int val); + + +#endif diff --git a/MCUME_pico/pico81/font8x8.h b/MCUME_pico/pico81/font8x8.h new file mode 100644 index 0000000..4f773da --- /dev/null +++ b/MCUME_pico/pico81/font8x8.h @@ -0,0 +1,135 @@ + +// Font: c64_lower.64c + +const unsigned char font8x8[128][8] PROGMEM = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) + { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) + { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) + { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) + { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//) + { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) + { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) + { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) + { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F +}; + diff --git a/MCUME_pico/pico81/iopins.h b/MCUME_pico/pico81/iopins.h new file mode 100644 index 0000000..a636576 --- /dev/null +++ b/MCUME_pico/pico81/iopins.h @@ -0,0 +1,42 @@ +#ifndef IOPINS_H +#define IOPINS_H + +#include "platform_config.h" + + +// VGA (see in code!!!) +/* +2-9 RRRGGGBB +10-11 VSYNC and HSYNC +*/ + +// SD (see SPI0 in code!!!) +/* +#define SD_SCLK 18 +#define SD_MOSI 19 +#define SD_MISO 16 +#define SD_CS 17 +*/ + +// I2C keyboard (not used) +/* +#define I2C_SCL_IO 15? +#define I2C_SDA_IO 14? +*/ + +// Analog joystick (primary) for JOY2 and 3 extra buttons +#define PIN_JOY2_A1X 26 +#define PIN_JOY2_A2Y 27 +#define PIN_JOY2_BTN 22 +#define PIN_KEY_USER1 20 +#define PIN_KEY_USER2 21 + +// Second joystick +//#define PIN_JOY1_BTN 2 +//#define PIN_JOY1_1 14 // UP +//#define PIN_JOY1_2 7 // DOWN +//#define PIN_JOY1_3 6 // RIGHT +//#define PIN_JOY1_4 5 // LEFT + + +#endif diff --git a/MCUME_pico/pico81/keyboard_osd.h b/MCUME_pico/pico81/keyboard_osd.h new file mode 100644 index 0000000..081bcdd --- /dev/null +++ b/MCUME_pico/pico81/keyboard_osd.h @@ -0,0 +1,21 @@ + +#ifndef keyboard_osd_h_ +#define keyboard_osd_h_ + +extern bool virtualkeyboardIsActive(void); +extern void drawVirtualkeyboard(void); +extern void toggleVirtualkeyboard(bool keepOn); +extern void handleVirtualkeyboard(void); + +extern bool callibrationActive(void); +extern int handleCallibration(uint16_t bClick); + +extern bool menuActive(void); +extern char * menuSelection(void); +extern void toggleMenu(bool on); +extern int handleMenu(uint16_t bClick); + + +#endif + + diff --git a/MCUME_pico/pico81/logozx80kbd.h b/MCUME_pico/pico81/logozx80kbd.h new file mode 100644 index 0000000..1405415 --- /dev/null +++ b/MCUME_pico/pico81/logozx80kbd.h @@ -0,0 +1,172 @@ +const uint16_t PROGMEM logozx80kbd[] = { +0x0140,0x00aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0841,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0841,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0841,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0841,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0820,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0820,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0820,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x31a6,0xdedb,0xdefb,0xe73c,0xbdf7,0x10a2,0xce79,0xef7d,0x9492,0x0000,0x39c7,0xdedb,0xdefb,0xe73c,0xbdf7,0x10a2,0xce79,0xe71c,0xef7d,0xbdf7,0x10a2,0xce79,0xef7d,0x9492,0x0000,0x31a6,0xce79,0xef7d,0x9492,0x0000,0x0000,0x0000,0xce59,0x9cf3,0x0000,0x31a6,0xd69a,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3186,0xce79,0xe71c,0xef7d,0xbdf7,0x18c3,0xd69a,0x5acb,0x9492,0xbdf7,0x18c3,0xce79,0xef7d,0x9492,0x0000,0x0000,0x0000,0xce59,0x9cf3,0x0000,0x39c7,0xdedb,0xdefb,0xe73c,0xbdf7,0x18e3,0xdedb,0xdefb,0xe73c,0xc618,0x0000,0x0000,0xce59,0x9cf3,0x0000,0x31a6,0xce79,0xef7d,0x9492,0x0000,0x0000,0x0000,0xbdd7,0xf7be,0xbdf7,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0xc4e0,0x9bc0,0x0000,0x3140,0xd520,0x5a20,0x9380,0xbc80,0x18a0,0xcd00,0xedc1,0x9380,0x0000,0x0840,0x0000,0xc4a0,0x9380,0x0000,0x0840,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0xbc80,0xf5e1,0xbc80,0x18a0,0xdd41,0xdd61,0xe581,0xbca0,0x1080,0xcd00,0xedc1,0x9380,0x0000,0x0840,0x0000,0xc4a0,0x9380,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x3140,0xdd61,0xdd61,0xe581,0xbca0,0x1080,0xd520,0x6aa0,0x0000,0x0000,0x0000,0x0000,0xc4a0,0x9380,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x3140,0xd520,0x5a20,0x9380,0xbca0,0x0000,0x0000,0xbc80,0xf5e1,0xbc80,0x1080,0xcd00,0xedc1,0x9380,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0xad75,0xffff,0xef7d,0x8c71,0x3186,0xffff,0xd6ba,0xb596,0x8c71,0x18c3,0xad75,0xffff,0xef7d,0x8c71,0x3186,0xffff,0xce79,0xb596,0x94b2,0x3186,0xffff,0xce79,0xb596,0x94b2,0x3186,0xffff,0xd6ba,0xb596,0x8c71,0x10a2,0xa534,0xb596,0xb596,0x8c71,0x3186,0xffff,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0xce79,0xb596,0x94b2,0x3186,0xffff,0x6b6d,0xb596,0xe73c,0x2104,0xffff,0xd6ba,0xb596,0x8c71,0x10a2,0xa534,0xbdd7,0xc618,0x9cd3,0x10a2,0xad75,0xffff,0xef7d,0x8c71,0x10a2,0xad75,0xffff,0xef7d,0x9492,0x1082,0xa534,0xbdd7,0xbdd7,0x8c51,0x3186,0xffff,0xd6ba,0xb596,0x8c71,0x18c3,0xb596,0xb596,0xbdd7,0x9cf3,0x0000,0x0000,0x0000,0x0000,0x0000,0x2900,0xa400,0xbc80,0xbca0,0x93a0,0x3120,0xfe61,0x5a40,0xac20,0xe5a1,0x20c0,0xfe41,0xcd00,0xb460,0x9bc0,0x0000,0x0000,0xe581,0xf5e1,0x9380,0x0000,0x0000,0x0000,0x0000,0x0000,0x2900,0xb460,0xb460,0xbc80,0x9bc0,0x1080,0xac20,0xfe21,0xedc1,0x8b60,0x3120,0xfe41,0xcd00,0xb460,0x9bc0,0x0000,0x0000,0xe581,0xf5e1,0x9380,0x0000,0x0000,0x0000,0x0000,0x0000,0x2900,0xac20,0xfe21,0xedc1,0x8b60,0x3120,0xfe61,0x8340,0x0000,0x0020,0x0000,0x0000,0xe581,0xf5e1,0x9380,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe61,0x6aa0,0xb460,0xeda1,0x0000,0xb440,0xb460,0xbc80,0x93a0,0x3120,0xfe41,0xcd00,0xb460,0x9bc0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0xe71c,0xb596,0x0000,0x39e7,0xffff,0x528a,0xad75,0xf79e,0x0000,0x0000,0xe71c,0xb596,0x0000,0x39e7,0xffdf,0xad55,0x1082,0x0000,0x39e7,0xffdf,0x9cd3,0xad75,0xc618,0x2945,0xffff,0x528a,0xad75,0xef5d,0x2104,0xffff,0x9cd3,0xce59,0xef5d,0x18e3,0xffdf,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffdf,0xad55,0x1082,0x0000,0x39e7,0xffff,0x6b4d,0xad75,0xe71c,0x2104,0xffff,0x528a,0xad75,0xef5d,0x2104,0xffff,0x630c,0x8c51,0xce59,0x0000,0x0000,0xe71c,0xb596,0x0000,0x0000,0x0000,0xe71c,0xb596,0x0000,0x4208,0xffff,0x5acb,0xad75,0xef5d,0x18e3,0xffff,0x528a,0xad75,0xef7d,0x0861,0xdefb,0x9cf3,0x0861,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe61,0x6260,0x8b60,0xc4c0,0x20e0,0xfe01,0xa400,0xcce0,0xdd61,0x20c0,0xfe21,0x9bc0,0xac40,0xc4c0,0x0000,0x72c0,0xe5a1,0xfe21,0xbc80,0x0000,0x0000,0x0000,0x0000,0x0000,0x3140,0xdd61,0x9bc0,0x0840,0x0000,0x0000,0x0000,0xe581,0xb440,0x0000,0x3980,0xfe21,0x9bc0,0xac40,0xc4c0,0x0000,0x72c0,0xe5a1,0xfe21,0xbc80,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0xe581,0xb440,0x0000,0x3980,0xfe21,0x8320,0x0000,0x0000,0x18a0,0x72c0,0xe5a1,0xfe21,0xbc80,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0x6aa0,0xac40,0xdd81,0x1080,0xdd61,0x9bc0,0x0840,0x0000,0x3980,0xfe21,0x9bc0,0xac40,0xc4c0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe71c,0xbdd7,0x0000,0x39e7,0xffff,0x6b4d,0xad75,0xe73c,0x0000,0x0000,0xe73c,0xbdd7,0x0000,0x39e7,0xf7be,0xffff,0xad55,0x0000,0x39e7,0xf7be,0xffff,0xad75,0x0000,0x39e7,0xffff,0x6b4d,0xad75,0xe71c,0x18e3,0xf7be,0xffff,0xffff,0xd69a,0x2104,0xffdf,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xf7be,0xffff,0xad55,0x0000,0x39e7,0xffff,0x6b4d,0xad75,0xe71c,0x2104,0xffdf,0x6b4d,0xad75,0xe71c,0x2104,0xffff,0x8410,0x0000,0x18e3,0x0000,0x0000,0xe73c,0xbdd7,0x0000,0x0000,0x0000,0xe71c,0xbdd7,0x0000,0x39e7,0xffff,0x6b4d,0xad75,0xe71c,0x2104,0xffdf,0x6b4d,0xad75,0xe73c,0x0000,0x0000,0xdefb,0xbdf7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0x8320,0x0000,0x0000,0x3960,0xf5e1,0xfe41,0xfe61,0xd520,0x18c0,0xf5e1,0xfe81,0xac40,0x0000,0x3960,0xede1,0xfe81,0xb440,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0xdd61,0xbca0,0x0000,0x0000,0x0000,0xe581,0xbc80,0x0000,0x3960,0xf5e1,0xfe81,0xac40,0x0000,0x3960,0xf5e1,0xfe81,0xb440,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe581,0xbc80,0x0000,0x3980,0xfe21,0x8320,0x0000,0x0000,0x3960,0xf5e1,0xfe81,0xb440,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0x6a80,0xac40,0xe581,0x0000,0x0000,0xdd61,0xbca0,0x0000,0x3960,0xf601,0xfe81,0xac40,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0xe71c,0xb5b6,0x0000,0x39e7,0xffff,0x6b4d,0xad75,0xe73c,0x0000,0x0000,0xe73c,0xbdd7,0x0000,0x39e7,0xffdf,0x8430,0x0000,0x0000,0x39e7,0xffdf,0x7bef,0xad75,0xd6ba,0x2104,0xffdf,0x6b4d,0xad75,0xe71c,0x2104,0xffdf,0x7bcf,0xb5b6,0xdefb,0x2104,0xffff,0x7bcf,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffdf,0x8c92,0x0000,0x0000,0x39e7,0xffff,0x5aeb,0xad55,0xe71c,0x2104,0xffdf,0x6b4d,0xad75,0xdf1c,0x2104,0xffff,0x632c,0xa534,0xe71c,0x0000,0x0000,0xe73c,0xbdd7,0x0000,0x0000,0x0000,0xe71c,0xb5b6,0x0000,0x4208,0xffff,0x630c,0xad75,0xe73c,0x18e3,0xffdf,0x6b4d,0xad75,0xe73c,0x0000,0x0000,0x0000,0xbdd7,0xe71c,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe41,0x6260,0xa400,0xdd61,0x20c0,0xfe21,0x7b00,0xb460,0xdd61,0x20c0,0xfe21,0x7b00,0xac40,0xdd40,0x0000,0x0000,0xd540,0xfea1,0xd520,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0xbc80,0xdd81,0x0000,0x0000,0xe581,0xbc80,0x0000,0x3980,0xfe21,0x7b00,0xac40,0xdd40,0x0000,0x0000,0xd540,0xfea1,0xd520,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe581,0xbc80,0x0000,0x3980,0xfe21,0x72e0,0x0000,0x0000,0x0820,0x0000,0xd540,0xfea1,0xd520,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0x5a40,0xa420,0xe581,0x0000,0x0000,0x0000,0xbc80,0xdd61,0x20c0,0xfe21,0x7b00,0xac40,0xdd40,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x31a6,0xdedb,0xffff,0xffff,0xb5b6,0x2945,0xffff,0x738e,0xb5b6,0xef7d,0x0000,0x0000,0xef7d,0xc618,0x0000,0x39e7,0xffff,0xf79e,0xe73c,0xbdd7,0x2945,0xffff,0x6b4d,0xb5b6,0xef7d,0x2104,0xffff,0x738e,0xb5b6,0xef5d,0x2104,0xffff,0x6b4d,0xb596,0xef5d,0x2104,0xffff,0xf79e,0xef5d,0xbdf7,0x0000,0x0000,0x0000,0x0000,0x0000,0x4208,0xffff,0x8410,0x0000,0x0000,0x39e7,0xffff,0xef7d,0xffff,0xdefb,0x2104,0xffff,0x738e,0xb5b6,0xef7d,0x0000,0x6b6d,0xd6ba,0xc618,0x5aeb,0x0000,0x0000,0xef7d,0xc618,0x0000,0x31a6,0xdedb,0xffff,0xffff,0xbdd7,0x0000,0x6b6d,0xd6ba,0xbdf7,0x4a69,0x39c7,0xffff,0x738e,0xb5b6,0xef5d,0x0861,0xdedb,0xef5d,0xbdd7,0x630c,0x0000,0x0000,0x0000,0x0000,0x0000,0x18a0,0x6aa0,0xd520,0xc4c0,0x5220,0x3960,0xfe61,0x6a80,0xb460,0xedc1,0x20c0,0xfe61,0x6a80,0xb460,0xedc1,0x0000,0xd520,0xfe81,0xd520,0x5a20,0x0000,0x0000,0x0000,0x0000,0x0000,0x3140,0xdd41,0xedc1,0xbc80,0x6240,0x0000,0x0000,0xedc1,0xc4c0,0x0000,0x3980,0xfe61,0x6a80,0xb460,0xedc1,0x0000,0xd520,0xfe81,0xd520,0x5a20,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedc1,0xc4c0,0x0000,0x3980,0xfe41,0xf5e1,0xeda1,0xbc80,0x18a0,0xd520,0xfe81,0xd520,0x5a20,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe41,0xede1,0xfe41,0xdd81,0x0840,0xdd40,0xedc1,0xbc80,0x5220,0x3960,0xfe61,0x6a80,0xb460,0xf5e1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2965,0xb596,0xb596,0xbdd7,0x9cd3,0x1082,0xad55,0x4a49,0x73ae,0x9cd3,0x0000,0x0000,0x9cd3,0x7bef,0x0000,0x2945,0xa534,0xbdd7,0xc618,0x9cd3,0x1082,0xad55,0x4a49,0x73ae,0x9cd3,0x10a2,0xad55,0x4a49,0x73ae,0x9cd3,0x10a2,0xad55,0x4a49,0x73ae,0x9cd3,0x10a2,0xa534,0xbdd7,0xc618,0x9cf3,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0xad55,0x5acb,0x0000,0x0000,0x2945,0xa534,0xbdd7,0xbdd7,0x8c71,0x10a2,0xad55,0x4a49,0x73ae,0x9cd3,0x0000,0x0000,0xa514,0x7bef,0x0000,0x0841,0x0000,0x9cd3,0x7bef,0x0000,0x2965,0xb596,0xb596,0xbdd7,0x9cf3,0x0000,0x0000,0xa514,0x7bef,0x0000,0x2945,0xad55,0x4a49,0x73ae,0x9cd3,0x18c3,0xb596,0xc638,0x73ae,0x0000,0x0841,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x93a0,0x72e0,0x0000,0x2900,0x9be0,0x2900,0x6260,0x8b80,0x1080,0x9be0,0x2900,0x6260,0x8b60,0x1880,0xa400,0xbc80,0x6260,0x0000,0x0860,0x0000,0x0000,0x0000,0x0000,0x2900,0xb460,0xbca0,0x6aa0,0x0000,0x0820,0x0000,0x8b80,0x72e0,0x0000,0x20e0,0x9be0,0x20e0,0x6aa0,0x9bc0,0x1080,0xa400,0xac40,0x5220,0x0000,0x0860,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x8b60,0x72e0,0x0000,0x20e0,0x9bc0,0xac20,0xbc80,0x9bc0,0x1060,0xa400,0xac40,0x6260,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x2900,0xa400,0xac40,0xb460,0x8b80,0x1080,0xa400,0xbc80,0x6aa0,0x0000,0x2900,0xac20,0x3140,0x6260,0x9380,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0861,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0861,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0861,0x0000,0x0000,0x1082,0x0000,0x0861,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0861,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x18a0,0x72e0,0x72e0,0x4180,0x0000,0x1880,0x5a40,0x7b00,0x7b00,0x5200,0x0820,0x5a40,0x7b00,0x7b00,0x5200,0x0840,0x6260,0x0000,0x41a0,0x6ac0,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x5200,0x49c0,0x0000,0x0000,0x0000,0x5a40,0x49c0,0x0000,0x1880,0x5a40,0x8320,0x41a0,0x0000,0x18a0,0x5a40,0x6a80,0x7b00,0x6aa0,0x0000,0x0000,0x0000,0x0000,0x0000,0x18a0,0x72e0,0x72e0,0x4180,0x0000,0x1880,0x5a40,0x72c0,0x2900,0x0000,0x18a0,0x5a40,0x6ac0,0x41a0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x5a20,0x3140,0x0000,0x18a0,0x5a40,0x6ac0,0x41a0,0x0000,0x0000,0x0000,0x6260,0x8320,0x5220,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0xfe81,0xb460,0x0000,0x3960,0xfe21,0xfe41,0xfe41,0xcd00,0x20c0,0xfe21,0xfe41,0xfe41,0xcd00,0x20e0,0xfe41,0x6aa0,0xb460,0xedc1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18c0,0xe581,0xbca0,0x0000,0x0000,0x18c0,0xe581,0xbca0,0x0000,0x3960,0xfe21,0xfe81,0xb460,0x0000,0x3960,0xfe21,0xfe41,0xfe41,0xd520,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0xfe81,0xb460,0x0000,0x3960,0xfe21,0xfe81,0xb460,0x0000,0x3960,0xfe21,0xfe81,0xb460,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18c0,0xe581,0xbca0,0x0000,0x3960,0xfe21,0xfe81,0xb460,0x0000,0x0000,0x20c0,0xd540,0xfe81,0xd520,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0x72c0,0xac40,0xdd61,0x20c0,0xfe21,0x8340,0x0000,0x20e0,0x3960,0xfe21,0x8340,0x0000,0x20e0,0x3960,0xfe21,0x5a40,0xac40,0xedc1,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xede1,0x72e0,0xb460,0xdd61,0x18a0,0xede1,0x72e0,0xac40,0xd520,0x20e0,0xfe21,0x7b00,0xac40,0xd520,0x20e0,0xfe21,0x8340,0x0000,0x3140,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0x72c0,0xac40,0xdd61,0x20c0,0xfe21,0x7b00,0xac40,0xd520,0x20e0,0xfe21,0x7b00,0xac40,0xdd40,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf5e1,0x6aa0,0xac20,0xd540,0x20e0,0xfe21,0x72c0,0xac40,0xdd61,0x20c0,0xf601,0x8320,0x0000,0x3140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf601,0xf5e1,0xb460,0x5a20,0x3140,0xf601,0xf601,0x9380,0x0000,0x3980,0xf601,0xf601,0x9380,0x0000,0x3980,0xf601,0xf601,0xac40,0x3980,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe41,0x7ae0,0x2900,0x5220,0x3960,0xfe41,0x6280,0xac40,0xe581,0x20c0,0xfe21,0x6260,0xac40,0xe581,0x18c0,0xf601,0xf601,0x9380,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf601,0xf5e1,0xac40,0x3980,0x3960,0xfe21,0x6260,0xac40,0xe581,0x20c0,0xfe21,0x6260,0xac40,0xe5a1,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0xedc1,0xfe01,0xd540,0x18c0,0xf601,0xf5e1,0xac40,0x41a0,0x1080,0x72e0,0xd540,0x9380,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf601,0xdd41,0x6aa0,0x0000,0x3980,0xf601,0xd520,0x6260,0x0000,0x3980,0xf601,0xd520,0x6260,0x0000,0x3980,0xf601,0xd520,0xac40,0x8340,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe61,0x6aa0,0x6260,0x93a0,0x3140,0xfe61,0x5a40,0xac20,0xe5a1,0x18c0,0xfe21,0x5a20,0xac40,0xe5a1,0x18a0,0xf601,0xd520,0x6260,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x3960,0xf601,0xd520,0xac40,0x7b00,0x3120,0xfe21,0x6aa0,0xac40,0xdd61,0x20c0,0xfe21,0x5a20,0xac40,0xedc1,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf601,0xcd00,0xe581,0xd540,0x20c0,0xf601,0xcce0,0xac40,0x9380,0x0000,0x0000,0x8340,0xc4a0,0x9bc0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe41,0x72c0,0x0000,0x0000,0x3980,0xfe21,0xa400,0x6aa0,0x6280,0x3140,0xfe21,0xa400,0x6aa0,0x6280,0x3140,0xfe41,0x5200,0xac40,0xf5e1,0x0000,0x0000,0x0000,0x0000,0x0000,0x3140,0xd520,0x93a0,0xbca0,0xc4c0,0x1080,0xd500,0x93a0,0xb460,0xb460,0x2900,0xfe21,0xac20,0xac40,0xb460,0x2900,0xfe21,0xa400,0x6aa0,0x6aa0,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe41,0x5200,0xac40,0xedc1,0x18a0,0xfe41,0x6aa0,0xac40,0xe581,0x20c0,0xfe21,0xac20,0xac40,0xbc80,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe41,0x5220,0xa400,0xe581,0x20c0,0xfe21,0x9bc0,0xac40,0xc4e0,0x0000,0x7b00,0x6260,0xbc80,0xc4e0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf5e1,0x7b00,0x0000,0x0000,0x3960,0xeda1,0xfe21,0xfe61,0xcd00,0x18a0,0xeda1,0xfe21,0xfe61,0xcd00,0x18a0,0xf5e1,0x6280,0xa400,0xdd40,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdd61,0xb460,0x0000,0x0000,0x0000,0xdd61,0xb460,0x0000,0x3960,0xeda1,0xfe81,0xa400,0x0000,0x3960,0xeda1,0xfe21,0xfe61,0xd520,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf5e1,0x6280,0xa400,0xd540,0x18c0,0xf5e1,0x6280,0xa400,0xd540,0x18c0,0xeda1,0xfe81,0xa400,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x3960,0xf5e1,0x6280,0xa400,0xd540,0x18c0,0xeda1,0xfe81,0xa400,0x0000,0x3960,0xf5e1,0xfe81,0xa400,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x3960,0x18c0,0x0000,0x0000,0x0840,0x3960,0x3980,0x3980,0x3120,0x0020,0x3960,0x3980,0x3980,0x3120,0x0020,0x3960,0x18a0,0x2900,0x3140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3140,0x2900,0x0000,0x0000,0x0000,0x3140,0x2900,0x0000,0x0840,0x3960,0x4180,0x2900,0x0000,0x0840,0x3960,0x3980,0x3980,0x3140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x3960,0x18a0,0x2900,0x3140,0x0020,0x3960,0x18a0,0x2900,0x3140,0x0020,0x3960,0x4180,0x2900,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x3960,0x18a0,0x2900,0x3140,0x0020,0x3960,0x4180,0x2900,0x0000,0x0840,0x3960,0x4180,0x2900,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0840,0x0020,0x0000,0x0000,0x0000,0x1060,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x1060,0x0000,0x0000,0x0000,0x0000,0x1060,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0840,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0840,0x0000,0x0000,0x1060,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x1060,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0840,0x0000,0x0000,0x1060,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0x7b00,0x8340,0x3140,0x0000,0x0000,0x0000,0x7b20,0x3960,0x0000,0x3980,0x8340,0x7b00,0x8340,0x5a20,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x3960,0x7b20,0x0000,0x0000,0x5200,0x8340,0x7b00,0x0000,0x0000,0x5200,0x8340,0x7b00,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c0,0x7b00,0x7b00,0x8320,0x6aa0,0x0840,0x7ae0,0x3140,0x5200,0x6aa0,0x0860,0x72e0,0x8320,0x8340,0x6aa0,0x0840,0x72e0,0x8340,0x5200,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c0,0x7b00,0x7b00,0x8320,0x6aa0,0x0000,0x0000,0x72c0,0x5a20,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5200,0x8b60,0x7b00,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6280,0x8320,0x8320,0x8320,0x8320,0x8320,0x5200,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0x7b20,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x5200,0x8b60,0x7b00,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18a0,0x7ae0,0x3140,0x5200,0x6aa0,0x0000,0x0000,0x72c0,0x5a20,0x0000,0x18c0,0x72e0,0x7b00,0x7b20,0x6260,0x0860,0x72e0,0x8320,0x8340,0x6aa0,0x0000,0x0000,0x0000,0x0000,0x0000,0x18a0,0x72e0,0x8340,0x5200,0x0000,0x18c0,0x7ae0,0x3140,0x5200,0x6aa0,0x0860,0x72e0,0x8340,0x5200,0x0000,0x0000,0x0000,0x72c0,0x5a20,0x0000,0x18c0,0x7ae0,0x3140,0x5200,0x6aa0,0x1060,0x7b00,0x7b00,0x8320,0x6aa0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7b00,0xfe81,0xfe41,0x8340,0x0000,0x0000,0x5220,0xfe01,0x8b60,0x0000,0x72e0,0xfe41,0xfe61,0xfe81,0xac20,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8b60,0xf601,0x5220,0x0000,0xb460,0xfea1,0xf5e1,0x5220,0x0000,0xb460,0xfea1,0xf5e1,0x5220,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xede1,0xfe61,0xfe81,0xcd00,0x20e0,0xfe41,0x6aa0,0xb460,0xe5a1,0x20c0,0xfe21,0xfe41,0xfe41,0xcd00,0x20c0,0xfe21,0xfe81,0xb460,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xede1,0xfe61,0xfe81,0xd520,0x0000,0x18a0,0xe581,0xbca0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x3960,0x0020,0xb460,0xfe81,0xf5e1,0x5220,0x3120,0x3980,0x3980,0x3960,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdd61,0xfe81,0xfe21,0xfe21,0xfe21,0xfea1,0xb460,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3140,0x20c0,0x8b60,0xf601,0x5220,0x3140,0x2900,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2900,0x3980,0x3980,0x3980,0x0000,0xb460,0xfe81,0xf5e1,0x5220,0x3140,0x2900,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe41,0x6aa0,0xb460,0xeda1,0x0000,0x18a0,0xe581,0xbca0,0x0000,0x3960,0xfe21,0xfe81,0xfea1,0xd540,0x20c0,0xfe21,0xfe41,0xfe41,0xd520,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0xfe81,0xb460,0x0000,0x3980,0xfe41,0x6aa0,0xb460,0xe5a1,0x20c0,0xfe21,0xfe81,0xb460,0x0000,0x0000,0x18c0,0xe581,0xbca0,0x0000,0x3980,0xfe41,0x6aa0,0xb460,0xe5a1,0x18a0,0xede1,0xfe61,0xfe81,0xd520,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8320,0xfe21,0x49c0,0xdd40,0xa400,0x6280,0xf5e1,0x41a0,0xdd40,0xac40,0x0000,0x5a20,0xfe21,0x8b80,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb440,0xd540,0x2920,0xf5e1,0x6260,0xac40,0xe581,0x41a0,0xf5e1,0x6260,0xac40,0xe581,0x41a0,0xf5e1,0x7b00,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x20c0,0xe5a1,0xbca0,0x0000,0x3960,0xfe21,0x5a40,0xa420,0xe581,0x20c0,0xfe21,0x8340,0x0000,0x20e0,0x3960,0xfe21,0x7b00,0xac40,0xdd40,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x20c0,0xe5a1,0xbca0,0x0000,0x3960,0xede1,0x72e0,0xac40,0xdd40,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x20c0,0xf5e1,0xfe81,0xb460,0x0000,0x5220,0xf5e1,0xfe41,0xfe21,0xfe21,0xeda1,0x3960,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0xe5a1,0xc4c0,0x0000,0x3960,0x20c0,0xedc1,0xbc80,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0xd520,0xfe81,0xd520,0x41a0,0xf5e1,0xfe81,0xa400,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa400,0xfe41,0xfe21,0xfe21,0xfe61,0xb460,0x0000,0x5220,0xf5e1,0xfe81,0xa400,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0x5a40,0xa420,0xe581,0x18a0,0xede1,0x72e0,0xac40,0xd520,0x20c0,0xf5e1,0xfe41,0xfe61,0xd520,0x20c0,0xfe21,0x8340,0x0000,0x3140,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0x72c0,0xac40,0xdd61,0x20c0,0xfe21,0x6aa0,0xac40,0xdd81,0x20c0,0xfe21,0x72c0,0xac40,0xdd61,0x18a0,0xede1,0x72e0,0xac40,0xd520,0x20e0,0xfe21,0x6aa0,0xac40,0xe581,0x0000,0x18a0,0xe5a1,0xbca0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8320,0xfe21,0x0000,0xe581,0xac40,0x6aa0,0xfe21,0x0020,0xe581,0xbca0,0x0000,0x3120,0xfe21,0x7b00,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb460,0xfe61,0xe581,0xfe61,0x6280,0xac40,0xdd61,0x0820,0xfe21,0x6aa0,0xac40,0xdd61,0x0820,0xfe21,0x8320,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe581,0xb460,0x0000,0x3980,0xf601,0xedc1,0xfe01,0xd520,0x18c0,0xf601,0xf601,0x9380,0x0000,0x3980,0xfe21,0x6260,0xac40,0xe5a1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe581,0xb460,0x0000,0x3980,0xfe41,0x6280,0xac40,0xe5a1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9bc0,0xf5e1,0xdd61,0x72e0,0x6aa0,0x41a0,0x0000,0x0000,0x6280,0x6aa0,0x5a20,0xa400,0xfe21,0x3980,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6aa0,0xedc1,0xeda1,0x93a0,0x0000,0x0000,0x0000,0x0000,0x2920,0xb440,0xedc1,0xdd40,0x3140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6aa0,0xedc1,0xeda1,0x9380,0x72c0,0x6a80,0x0000,0x7b00,0x6260,0xac40,0xedc1,0xdd40,0x3140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbc80,0xede1,0x5a40,0x6a80,0x72c0,0x41a0,0x0000,0x0000,0x6280,0x5a40,0xac40,0xedc1,0xdd40,0x3140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf601,0xedc1,0xfe01,0xd520,0x20c0,0xfe41,0x6280,0xac40,0xe581,0x18c0,0xf5e1,0xfe81,0xfea1,0xd520,0x18c0,0xf601,0xf601,0x9380,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf601,0xf5e1,0xac40,0x3980,0x3960,0xfe21,0x6aa0,0xac40,0xdd61,0x18c0,0xf601,0xf5e1,0xac40,0x3980,0x3960,0xfe41,0x6280,0xac40,0xe581,0x20c0,0xfe21,0x6aa0,0xac40,0xe581,0x0000,0x0000,0xe581,0xb460,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8320,0xfe21,0x20c0,0xdd61,0xac20,0x72c0,0xfe41,0x0000,0xe581,0xbca0,0x0000,0x3980,0xfe21,0x8320,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb460,0xfe01,0xbc80,0xfe41,0x6280,0xac40,0xdd61,0x20c0,0xfe21,0x6aa0,0xac40,0xdd61,0x0000,0xfe41,0x8340,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe581,0xbc80,0x0000,0x3960,0xf601,0xcd00,0xe581,0xd540,0x20c0,0xf601,0xd520,0x6260,0x0000,0x3980,0xfe21,0x6aa0,0xac40,0xe581,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe581,0xbc80,0x0000,0x3980,0xfe61,0x5a40,0xac20,0xedc1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7b00,0xc4c0,0xbc80,0xac40,0xb460,0x6aa0,0x0000,0x0000,0xa400,0xac40,0xa400,0xcd00,0xfe41,0x3980,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5a20,0xbca0,0xbc80,0xac40,0xbc80,0x93a0,0x0000,0xb440,0xb460,0xb460,0xbca0,0xb440,0x2900,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5a20,0xbca0,0xbc80,0xb440,0x5220,0x0000,0x0000,0x0000,0x7b00,0xb460,0xbca0,0xb440,0x2900,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbc80,0xfe41,0xa400,0xac40,0xb460,0x6aa0,0x0000,0x0000,0xa400,0xac40,0xb460,0xbca0,0xb440,0x2900,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf601,0xcd00,0xe581,0xd540,0x20e0,0xfe61,0x5a40,0xac20,0xe5a1,0x18a0,0xf601,0xc4c0,0xdd61,0xdd40,0x20c0,0xf601,0xd520,0x6260,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x3960,0xf601,0xd520,0xac40,0x7b00,0x3120,0xfe21,0x5a40,0xa400,0xe581,0x20c0,0xf601,0xcce0,0xac40,0x8b60,0x3140,0xfe61,0x5a40,0xac20,0xe5a1,0x18c0,0xfe21,0x5a40,0xa400,0xe581,0x0000,0x0000,0xe581,0xbc80,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8320,0xfe41,0x20c0,0xe581,0xb460,0x49e0,0xd540,0x8320,0xcce0,0x93a0,0x0000,0x3980,0xfe41,0x8320,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbca0,0xdd61,0x0000,0xfe21,0x6aa0,0xac40,0xe581,0x20c0,0xfe41,0x6aa0,0xac20,0xf5e1,0x8320,0xd540,0x6a80,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5a1,0xbc80,0x0000,0x3980,0xfe41,0x5220,0xa400,0xe581,0x20c0,0xfe21,0xa400,0x6aa0,0x6280,0x3140,0xfe41,0x6aa0,0xac40,0xe5a1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5a1,0xbc80,0x0000,0x3140,0xd520,0x93a0,0xb460,0xbc80,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1060,0x0000,0x0000,0x0000,0xdd40,0xedc1,0xb480,0x72c0,0x8b60,0xdd61,0xe5a1,0xe581,0xe581,0xcd00,0x3120,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0xbc80,0xf5e1,0xcce0,0x8320,0xdd61,0xf5e1,0x9380,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0xedc1,0xdd61,0x6aa0,0x8320,0x72e0,0xfe21,0xbc80,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9380,0xe581,0xe581,0xe581,0xedc1,0xb480,0x72c0,0x8b60,0xdd61,0xf5e1,0x9380,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe41,0x5220,0xa400,0xe5a1,0x0820,0xd500,0x93a0,0xb460,0xb460,0x2900,0xfe41,0x5220,0xa400,0xe581,0x20c0,0xfe21,0xa400,0x6aa0,0x6aa0,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe41,0x5200,0xac40,0xedc1,0x18a0,0xfe21,0xa400,0xcd00,0xdd61,0x20c0,0xfe21,0x9bc0,0xac40,0xc4c0,0x1080,0xd520,0x93a0,0xb460,0xb460,0x2900,0xfe21,0xa400,0xcd00,0xe581,0x0000,0x0000,0xe5a1,0xbc80,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7b00,0xf5e0,0x20c0,0xd540,0xb460,0x0000,0x20c0,0xf600,0x72e0,0x0000,0x0000,0x3960,0xf5e0,0x7b00,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb440,0xd540,0x18c0,0xf5e0,0x6280,0xa400,0xd540,0x18c0,0xf5e0,0x6280,0x9bc0,0xfe60,0xf5e0,0x18c0,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdd40,0xb440,0x0000,0x3960,0xf5e0,0x6280,0xa400,0xd540,0x18a0,0xeda0,0xfe20,0xfe60,0xcd00,0x18a0,0xf5e0,0x6280,0xa400,0xdd40,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdd40,0xb440,0x0000,0x0000,0x0000,0xdd60,0xb460,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa400,0xfe80,0xede0,0x20c0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x72e0,0xf600,0x20c0,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcd00,0xfe40,0xfe20,0xfe20,0xfe20,0xfe40,0xa400,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0xa400,0xfe80,0xede0,0x20c0,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf5e0,0x6280,0xa400,0xdd40,0x0000,0x0000,0xdd60,0xb440,0x0000,0x3960,0xf5e0,0x6280,0xa400,0xd540,0x18a0,0xeda0,0xfe20,0xfe60,0xd520,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf5e1,0x6280,0xa400,0xd540,0x18a0,0xeda0,0xfe20,0xfe40,0xcce0,0x18a0,0xeda0,0xfe80,0xa400,0x0000,0x0000,0x0000,0xdd60,0xb440,0x0000,0x3960,0xeda0,0xfe20,0xfe40,0xcd00,0x0000,0x0000,0xdd40,0xb440,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1840,0x3920,0x0000,0x3100,0x28c0,0x0000,0x0800,0x3940,0x1820,0x0000,0x0000,0x0800,0x3920,0x1840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x28c0,0x3100,0x0000,0x3920,0x1800,0x28a0,0x3100,0x0000,0x3920,0x1800,0x2080,0x4140,0x3920,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x3100,0x28c0,0x0000,0x0800,0x3920,0x1800,0x28a0,0x3100,0x0000,0x3920,0x3940,0x3940,0x30e0,0x0000,0x3920,0x1800,0x28a0,0x3100,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3100,0x28c0,0x0000,0x0000,0x0000,0x3100,0x28c0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x28a0,0x4160,0x3920,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1820,0x3940,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x30e0,0x3940,0x3940,0x3940,0x3940,0x3940,0x28a0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x28a0,0x4160,0x3920,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0800,0x3920,0x1800,0x28a0,0x3100,0x0000,0x0000,0x3100,0x28c0,0x0000,0x0800,0x3920,0x1800,0x28a0,0x3100,0x0000,0x3920,0x3940,0x3940,0x3100,0x0000,0x0000,0x0000,0x0000,0x0001,0x0840,0x3960,0x18a1,0x28c0,0x3100,0x0000,0x3920,0x3940,0x3940,0x30e0,0x0000,0x3920,0x4160,0x28a0,0x0000,0x0000,0x0000,0x3100,0x28c0,0x0000,0x0800,0x3920,0x3940,0x3940,0x30e0,0x0000,0x0000,0x3100,0x28e0,0x0001,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x02f4,0x02f4,0x0b14,0x02f4,0x02f4,0x1314,0x0b14,0x02f4,0x02f4,0x0b14,0x0b14,0x0b14,0x02f4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x02f4,0x02f4,0x0b14,0x02f4,0x0314,0x02f4,0x02f4,0x0b14,0x02f4,0x0314,0x02f4,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x02f4,0x02f4,0x1314,0x0b14,0x02f4,0x0314,0x02f4,0x02f4,0x0b14,0x02f4,0x02d4,0x02d4,0x02f4,0x0b14,0x02f4,0x0314,0x02f4,0x02f4,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x02f4,0x02f4,0x0b14,0x0b14,0x0b14,0x02f4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x02f4,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x02f4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x02f4,0x02d4,0x02d4,0x02d4,0x02d4,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x02f4,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x02f4,0x0314,0x02f4,0x02f4,0x0b14,0x0b14,0x02f4,0x02f4,0x1314,0x0b14,0x02f4,0x0314,0x02f4,0x02f4,0x0b14,0x02f4,0x02d4,0x02d4,0x02f4,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0001,0x0001,0x0000,0x01cd,0x0315,0x0b14,0x02f4,0x02d4,0x02d4,0x02f4,0x0b14,0x02f4,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x02f4,0x02f4,0x1314,0x0b14,0x02f4,0x02d4,0x02d4,0x02f4,0x0b14,0x0b14,0x0315,0x01cd,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b36,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b36,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b36,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b36,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b36,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b36,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b36,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b36,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b36,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b36,0x01ed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0318,0x02f7,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0358,0x02f7,0x0317,0x0317,0x0317,0x02f7,0x0338,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0358,0x02f7,0x0317,0x0317,0x0317,0x02f7,0x0338,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0318,0x02f7,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0338,0x02f7,0x0317,0x0317,0x0317,0x0317,0x0317,0x0317,0x0318,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0358,0x02f7,0x0317,0x0317,0x0317,0x02f7,0x0338,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0338,0x02f7,0x0317,0x0317,0x0317,0x0317,0x0317,0x0317,0x0318,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0358,0x02f7,0x0317,0x0317,0x0317,0x02f7,0x0338,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0358,0x02f7,0x0317,0x0317,0x0317,0x02f7,0x0338,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0378,0x02f7,0x0317,0x02f7,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0378,0x0378,0xb63c,0xbe7d,0x74fa,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x02f7,0x74fa,0xc69d,0xbe7c,0xbe5c,0xbe7c,0xc69d,0x9dbb,0x02f7,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x02f7,0x74fa,0xc69d,0xbe7c,0xbe7c,0xbe5c,0xc69d,0x9dbb,0x02f7,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0378,0x0378,0xb63c,0xbe7d,0x74fa,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x959b,0xbe7c,0xbe7c,0xbe7c,0xbe7c,0xbe5c,0xbe7c,0xbe7d,0xb63c,0x2bd8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x02f7,0x74fa,0xc69d,0xbe7c,0xbe5c,0xbe7c,0xc69d,0x9dbb,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x9dbb,0xc69d,0xbe5c,0xbe5c,0xbe5c,0xbe7c,0xbe7c,0xbe5c,0xa5fc,0x2bd8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x02f7,0x74fa,0xc69d,0xbe7c,0xbe7c,0xbe7c,0xc69d,0x9dbb,0x02f7,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x02f7,0x74fa,0xc69d,0xbe7c,0xbe7c,0xbe7c,0xc69d,0x9dbb,0x02f7,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0338,0x4c39,0xbe9d,0xbe7c,0xc69d,0x74fa,0x02f7,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x3c19,0x8d7b,0xdf3e,0xffff,0xbe5c,0x02f7,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x649a,0xbe7c,0xef7e,0xe75e,0xe75e,0xe75e,0xef7e,0xcedd,0x6cda,0x23b8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x649a,0xbe7c,0xef7e,0xe75e,0xe75e,0xe75e,0xe75e,0xcedd,0x74fa,0x23b8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0378,0x33f9,0x8d7b,0xdf3e,0xffff,0xbe5c,0x02f7,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0xe75e,0xffff,0xdf3e,0xe73e,0xe73e,0xe73e,0xdf3e,0xe75e,0xdf1e,0x3bf9,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x5c79,0xb65c,0xe77e,0xe73e,0xe73e,0xe73e,0xef7e,0xbe7d,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xc69d,0xef9f,0xe75e,0xe75e,0xe75e,0xe75e,0xdf3e,0xf7bf,0xffff,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x649a,0xbe5c,0xe77e,0xe73e,0xe73e,0xe73e,0xe75e,0xcedd,0x74fa,0x23b8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x5c79,0xbe5c,0xef9f,0xe75e,0xe75e,0xe75e,0xef7e,0xcedd,0x6cda,0x23b8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0358,0x4c39,0xa5fc,0xef7e,0xe75e,0xef7e,0xbe7d,0x5c99,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0x853a,0xf7df,0x0378,0xdf3e,0xbe7c,0x0317,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xe75e,0xb63c,0x0297,0x0358,0x0358,0x0358,0x02b7,0x7d1a,0xffff,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xe75e,0xb63c,0x0297,0x0358,0x0338,0x13b8,0x0378,0x855b,0xffdf,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x0378,0x8d7b,0xf7df,0x0378,0xdf3e,0xbe7c,0x0317,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xe75e,0xbe7d,0x0338,0x23d8,0x23d8,0x23d8,0x2bd8,0x13b8,0x0358,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xef7e,0xc69d,0x0338,0x23d8,0x23d8,0x23d8,0x23d8,0x1bb8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0358,0x0358,0x0358,0x0358,0x0358,0x0338,0x0338,0x853a,0xf7bf,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xe75e,0xbe5c,0x0338,0x23d8,0x23d8,0x23d8,0x0378,0x855b,0xffdf,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xef9f,0xbe7c,0x0297,0x0358,0x0358,0x0358,0x02b7,0x7d1a,0xffff,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x0378,0xbe9d,0xdf3e,0x02f7,0x0358,0x0297,0xb63c,0xe75e,0x23b8,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x23b8,0x3c19,0x0358,0xe75e,0xbe7c,0x0317,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x3c19,0x1bb8,0x0338,0x0358,0x0358,0x0358,0x02b7,0x7d1a,0xffff,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x3bf9,0x2bd9,0x0398,0x0b98,0x0358,0xd6fd,0xffff,0xd6fe,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x02b7,0xb63c,0xe75e,0x23b8,0x0358,0xe75e,0xbe7c,0x0317,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xdf3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6fd,0x02f7,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xd71e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6fd,0x02f7,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x02b7,0xb63c,0xe75e,0x23b8,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0xae1c,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6fe,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xef9f,0xbe7c,0x0297,0x0358,0x0358,0x0358,0x02d7,0x7d1a,0xffff,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xdf1e,0xbe7c,0x0378,0x0398,0x0b98,0x0398,0x0378,0x8d7b,0xf7bf,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0378,0x0358,0xe75e,0xbe7c,0x0317,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0277,0x8d7b,0xf79f,0xe75e,0xe75e,0xe75e,0xef7e,0xcedd,0x6cda,0x23b8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x02f7,0x0338,0x1bb8,0x0b98,0x0398,0x6cda,0x853a,0x9ddb,0xcedd,0x33f9,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xbe7d,0xb65c,0x4419,0x02b7,0x0297,0xe75e,0xb63c,0x0257,0x0318,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x5459,0x74fa,0x853b,0x853a,0x853a,0x853a,0x7d1a,0xa5db,0xd6fd,0x33f9,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xe73e,0xd6fd,0x74fa,0x853a,0x853a,0x853a,0x7d1a,0xa5db,0xd6fd,0x33f9,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x02b7,0xc69d,0xc6bd,0x5c99,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xb65c,0xb65c,0x7d1a,0x853a,0x853a,0x853a,0x7d1a,0x9ddb,0xcedd,0x33f9,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x5c79,0xbe5c,0xef9f,0xe75e,0xe75e,0xe75e,0xe75e,0xef9f,0xf7df,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0xf7bf,0xbe7c,0x0237,0x13b8,0x0b98,0x1bb8,0x02b7,0x74fa,0xffff,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0378,0x0338,0x02d7,0xe75e,0xb63c,0x02b7,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x959b,0xb63c,0xae1c,0xae1c,0xae1c,0xae1c,0xb65c,0x8d5b,0x0297,0x0398,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0xa5fc,0x853a,0x02d7,0x0338,0x0338,0x02d7,0x01f6,0x74fa,0xffff,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0xef9f,0xef9f,0xa5fc,0xbe7c,0xb65c,0xf7bf,0xe75e,0xb65c,0xb63c,0x2bd8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x9ddb,0x6cda,0x0257,0x02b7,0x02b7,0x02b7,0x01f6,0x74fa,0xffff,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0xef9f,0xb65c,0x01d6,0x02b7,0x02b7,0x02b7,0x01f6,0x74fa,0xffff,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x2bd8,0xa5fc,0xc69d,0x74fa,0x02f7,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0xf7bf,0xbe7c,0x01b6,0x02b7,0x02b7,0x02b7,0x01f6,0x74fa,0xffff,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x02f7,0x6cda,0xb65c,0xae1c,0xae1c,0xae1c,0xa5fc,0xcedd,0xffff,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x959b,0xc69d,0x9dbb,0x02f7,0x0338,0x02d7,0x7d1a,0xc69d,0xa5fc,0x2bd8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x4419,0x855b,0x7d1a,0xef9f,0xd71e,0x5c79,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0xef9f,0xd71e,0x5479,0x6cda,0x6cda,0x6cda,0x6cda,0x74fa,0x7d1a,0x23b8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xc6bd,0xc69d,0x74fa,0x853a,0x853a,0x853a,0x7d1a,0xa5db,0xd6fd,0x33f9,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xb63c,0xe75e,0xe75e,0xe75e,0xe75e,0xffff,0xf7df,0xe75e,0xdf1e,0x3bf9,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xc6bd,0xc69d,0x74fa,0x853a,0x853a,0x853a,0x7d1a,0xa5db,0xd6fd,0x33f9,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xbe7c,0xbe5c,0x7d1a,0x853a,0x853a,0x853a,0x7d1a,0xa5db,0xd6fd,0x33f9,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x4419,0xffff,0x7d1a,0x02d7,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xbe7c,0xbe5c,0x7d1a,0x853a,0x853a,0x853a,0x7d1a,0xa5db,0xd6fd,0x33f9,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x4c39,0x74fa,0x6cda,0x6cda,0x6cda,0x649a,0x959b,0xd6fd,0x33f9,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0297,0x9dbb,0xdf1e,0x7d1a,0x853a,0x74fa,0xc69d,0xc69d,0x02b7,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0x7d1a,0xffff,0xffff,0xf7df,0xffff,0xd6fe,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xcedd,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x02b7,0xa5fc,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6fd,0x02f7,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0358,0x0358,0x0358,0x0358,0x02f7,0xdf1e,0xae1c,0x02b7,0x0358,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x02b7,0xa5fc,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6fd,0x02f7,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x02b7,0xa5fc,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6fd,0x02f7,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x3c19,0xf7bf,0x7d1a,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x02b7,0xa5fc,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6fd,0x02f7,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0317,0xae1c,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6fd,0x02f7,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x02f7,0x6cda,0xffff,0xffff,0xffff,0xa5fc,0x02b7,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x23b8,0x4419,0x3c19,0x3c19,0x4419,0x33f9,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x33f9,0x4419,0x3c19,0x3c19,0x3c19,0x3c19,0x3c19,0x4419,0x3c19,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x2bd8,0x4419,0x3c19,0x3c19,0x3c19,0x4419,0x33f9,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x3bf9,0x2bd9,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x2bd8,0x4419,0x3c19,0x3c19,0x3c19,0x4419,0x33f9,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x2bd8,0x4419,0x3c19,0x3c19,0x3c19,0x4419,0x33f9,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x3c19,0x23b8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x2bd8,0x4419,0x3c19,0x3c19,0x3c19,0x4419,0x33f9,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x2bd8,0x4419,0x3c19,0x3c19,0x3c19,0x4419,0x33f9,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x23b8,0x4419,0x3c19,0x4419,0x2bd8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0378,0x0378,0x0378,0x0378,0x0378,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0378,0x0378,0x0378,0x0378,0x0378,0x0378,0x0378,0x0378,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0378,0x0378,0x0378,0x0378,0x0378,0x0378,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0378,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0378,0x0378,0x0378,0x0378,0x0378,0x0378,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0378,0x0378,0x0378,0x0378,0x0378,0x0378,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0378,0x0378,0x0378,0x0378,0x0378,0x0378,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0378,0x0378,0x0378,0x0378,0x0378,0x0378,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0378,0x0378,0x0378,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0841,0x0000,0x0000,0x0861,0x0000,0x0841,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0841,0x0841,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0861,0x0000,0x0841,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xe73c,0xdedb,0x0000,0x0000,0x9492,0xe73c,0xe73c,0xef5d,0x5acb,0x9492,0xbdf7,0x18c3,0xd69a,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3186,0xd69a,0x6b6d,0x0000,0x0841,0x0000,0x0000,0xce59,0x9cf3,0x0000,0x0000,0x0000,0xce59,0x9cf3,0x0000,0x31a6,0xce79,0xef7d,0x9492,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0xbdd7,0xf7be,0xbe18,0x0000,0x0000,0xce59,0x9cf3,0x0000,0x31a6,0xd69a,0x5acb,0x9492,0xbdf7,0x18c3,0xce79,0xe71c,0xef7d,0xbdf7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xe73c,0xdedb,0x0000,0x0000,0x9cf3,0xbdf7,0x18c3,0xd69a,0x5acb,0x8430,0xe73c,0xdedb,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0xce59,0x9cf3,0x0000,0x0000,0x0000,0xce59,0x9cf3,0x0000,0x31a6,0xce79,0xef7d,0x9492,0x0000,0x39c7,0xdedb,0xdefb,0xe73c,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xe73c,0xdedb,0x0000,0x0000,0x9492,0xe73c,0xe73c,0xef5d,0x5acb,0x8430,0xe71c,0xd6ba,0xdefb,0x632c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x31a6,0xdedb,0xdefb,0xe73c,0xbdf7,0x10a2,0xce79,0xe71c,0xef7d,0xbdf7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9cf3,0xef5d,0xd6ba,0xef5d,0x5aeb,0x8430,0xe73c,0xdedb,0x0000,0x0000,0x9492,0xe73c,0xdedb,0x0000,0x0000,0x9cf3,0xbdf7,0x18c3,0xd69a,0x52aa,0x9492,0xef5d,0xd6ba,0xef5d,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xe73c,0xdedb,0x0000,0x0000,0x9492,0xe73c,0xdedb,0x0000,0x0000,0x9cf3,0xef5d,0xd6ba,0xef5d,0x5aeb,0x8430,0xe73c,0xdedb,0x0000,0x0000,0x9cf3,0xef5d,0xd6ba,0xef5d,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xffff,0xb5b6,0xb596,0x2965,0xb5b6,0xffff,0xad55,0xbdf7,0x31a6,0xbdd7,0xe73c,0x0000,0xffff,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x8430,0x0000,0x0000,0x2945,0xa534,0xbdd7,0xbdd7,0x8c71,0x10a2,0xa534,0xb596,0xb596,0x8c71,0x3186,0xffff,0xd6ba,0xb596,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2965,0xb596,0xb596,0xbdd7,0x9cd3,0x1082,0xa534,0xb596,0xb596,0x8c71,0x3186,0xffff,0x6b6d,0xb596,0xe73c,0x2104,0xffff,0xce79,0xb596,0x9cf3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xffff,0xad55,0xbdf7,0x31a6,0xbdd7,0xe75d,0x2104,0xffff,0x6b6d,0xad75,0xffff,0xb5b6,0xb596,0x528a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0xa534,0xbdd7,0xc618,0x9cd3,0x1082,0xa534,0xbdd7,0xbdd7,0x8c51,0x3186,0xffff,0xd6ba,0xb596,0x8c71,0x18c3,0xad75,0xffff,0xef7d,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xffff,0xad55,0xbdf7,0x31a6,0xb596,0xffff,0xad55,0xbdf7,0x31a6,0xad75,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0xad75,0xffff,0xef7d,0x8c71,0x3186,0xffff,0xce79,0xb596,0x9cf3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xdedb,0xffff,0xc638,0x2965,0xb596,0xffff,0xb5b6,0xb596,0x2965,0xb5b6,0xffff,0xad55,0xbdf7,0x31a6,0xbdd7,0xe75d,0x2104,0xffff,0x7bcf,0x630c,0xdedb,0xffff,0xc638,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xffff,0xad55,0xbdf7,0x31a6,0xb596,0xffff,0xad55,0xbdf7,0x4a49,0x6b6d,0xdedb,0xffff,0xc638,0x2965,0xb596,0xffff,0xb5b6,0xb596,0x4208,0x6b6d,0xdedb,0xffff,0xc638,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xdedb,0x0000,0xffff,0x738e,0xad55,0xef7d,0x5acb,0x0000,0x0000,0xb5b6,0xef7d,0x7bef,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x8410,0x0000,0x0000,0x4208,0xffff,0x5acb,0xad75,0xef5d,0x2104,0xffff,0x9cd3,0xce59,0xef5d,0x18e3,0xffff,0x528a,0xad75,0xef7d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x31a6,0xdefb,0x9cf3,0x0861,0x0000,0x4208,0xffff,0x9cd3,0xce59,0xef5d,0x18e3,0xffdf,0x632c,0xad55,0xe71c,0x2104,0xffdf,0xad55,0x1082,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb5b6,0xef5d,0x6b6d,0xdefb,0x52aa,0xb596,0xe71c,0x2104,0xffdf,0x6b4d,0xad75,0xdedb,0x0000,0xffff,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4208,0xffff,0x630c,0x8c51,0xc638,0x2965,0xffff,0x5acb,0xad75,0xef5d,0x18e3,0xffff,0x528a,0xad75,0xf79e,0x0000,0x0000,0xe71c,0xb596,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb5b6,0xef5d,0x6b6d,0xdefb,0x52aa,0xad75,0xef7d,0x5acb,0x0000,0x0000,0xad75,0xffff,0xffff,0xffff,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0xe71c,0xb596,0x0000,0x39e7,0xffdf,0xad55,0x1082,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x738e,0xffdf,0x0000,0x0000,0xbdd7,0xdefb,0x0000,0xffff,0x738e,0xad55,0xef5d,0x6b6d,0xe71c,0x5acb,0xb596,0xe71c,0x2104,0xffdf,0x8410,0x0000,0x738e,0xffdf,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0xb5b6,0xef5d,0x6b6d,0xe71c,0x5acb,0xad75,0xef5d,0x6b6d,0xdefb,0x738e,0x0000,0x738e,0xffdf,0x0000,0x0000,0xbdd7,0xdefb,0x0000,0xffff,0x8c51,0x0000,0x738e,0xffdf,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe71c,0x2104,0xffdf,0x6b4d,0xa514,0xffff,0xf79e,0x39c7,0x0000,0xad75,0xffff,0xffff,0xffff,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x8410,0x0000,0x0000,0x39e7,0xffff,0x6b4d,0xad75,0xe71c,0x18e3,0xf7be,0xffff,0xffff,0xd69a,0x2104,0xffdf,0x6b4d,0xad75,0xe73c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0xdefb,0xbdf7,0x0000,0x39c7,0xf7be,0xffff,0xffff,0xd69a,0x2104,0xffdf,0x7bcf,0xb5b6,0xdefb,0x18e3,0xf7be,0xffff,0xad55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xffff,0xf79e,0x4228,0x0000,0xbdd7,0xe71c,0x18e3,0xffdf,0x6b4d,0xad75,0xe71c,0x2104,0xffdf,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x8410,0x0000,0x0000,0x39e7,0xffff,0x6b4d,0xad75,0xe71c,0x2104,0xffdf,0x6b4d,0xad75,0xe73c,0x0000,0x0000,0xe73c,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xffff,0xf79e,0x4228,0x0000,0xad75,0xffff,0xf79e,0x39c7,0x0000,0xad75,0xffff,0xf7be,0xffff,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe71c,0xbdd7,0x0000,0x39e7,0xf7be,0xffff,0xad55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8410,0xffff,0x39e7,0x0000,0xbdd7,0xe71c,0x2104,0xffdf,0x6b4d,0xa514,0xffff,0xf79e,0x18e3,0x0000,0xbdd7,0xdf1c,0x18e3,0xffdf,0x8410,0x0000,0x8410,0xffff,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xffff,0xf79e,0x18e3,0x0000,0xad75,0xffff,0xf79e,0x4228,0x0000,0x0000,0x8410,0xffff,0x39e7,0x0000,0xbdd7,0xe71c,0x2104,0xffdf,0x8410,0x0000,0x8410,0xffff,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe71c,0x2104,0xffdf,0x6b4d,0xad75,0xe73c,0x0000,0x0000,0x0000,0xb596,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x7bcf,0x0000,0x0000,0x4208,0xffff,0x630c,0xad75,0xe73c,0x18e3,0xffdf,0x7bcf,0xb5b6,0xdefb,0x2104,0xffff,0x5aeb,0xad75,0xef5d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0xbdd7,0xdefb,0x2104,0xffdf,0x7bcf,0xb5b6,0xdefb,0x2104,0xffff,0xffdf,0xffff,0xdedb,0x18e3,0xffdf,0x8430,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe71c,0x4228,0xf79e,0x632c,0xad75,0xdefb,0x0000,0xffdf,0x6b4d,0xad75,0xe71c,0x2104,0xffdf,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x632c,0xa534,0xdefb,0x2124,0xffff,0x630c,0xad75,0xe73c,0x18e3,0xffdf,0x6b4d,0xad75,0xe73c,0x0000,0x0000,0xe73c,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe71c,0x4228,0xf79e,0x632c,0xad75,0xe73c,0x0000,0x0000,0x0000,0xbdd7,0xe71c,0x4228,0xffff,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0xe71c,0xb5b6,0x0000,0x39e7,0xffdf,0x8c92,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x73ae,0xffdf,0x2104,0x0000,0xbdd7,0xe71c,0x2104,0xffdf,0x6b4d,0xad75,0xe73c,0x18e3,0x0020,0x0000,0xbdd7,0xdefb,0x0000,0xffdf,0x8410,0x0000,0x8410,0xffff,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0x18e3,0x0020,0x0000,0xbdd7,0xe71c,0x4228,0xf79e,0x7bef,0x0000,0x73ae,0xffdf,0x2104,0x0000,0xbdd7,0xe71c,0x2104,0xffdf,0x8410,0x0000,0x8410,0xffff,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xef5d,0x2104,0xffff,0x738e,0xad75,0xffff,0xdefb,0xef5d,0x632c,0x2124,0xb596,0xffff,0x8c71,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0xf79e,0xef5d,0xbdf7,0x0000,0x6b6d,0xd6ba,0xbdf7,0x4a69,0x39c7,0xffff,0x6b4d,0xb596,0xef5d,0x2104,0xffff,0xffdf,0xb5b6,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x31a6,0xdedb,0xef5d,0xbdd7,0x52aa,0x39c7,0xffff,0x6b4d,0xb596,0xef7d,0x0000,0x6b4d,0xffdf,0xdedb,0x4228,0x39c7,0xffff,0xf79e,0xe73c,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xef5d,0x0861,0xffff,0x738e,0xad55,0xffff,0xe73c,0xffff,0x6b4d,0xb5b6,0xef5d,0x2104,0xffff,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0x6b6d,0xd6ba,0xc618,0x5aeb,0x0861,0x6b6d,0xd6ba,0xbdf7,0x4a69,0x39c7,0xffff,0x738e,0xb5b6,0xef7d,0x0000,0x0000,0xef7d,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xef5d,0x0861,0xffff,0x738e,0xad75,0xffff,0xdefb,0xef5d,0x528a,0xbdd7,0xef5d,0x0841,0xffff,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x31a6,0xdedb,0xffff,0xffff,0xb5b6,0x2945,0xffff,0x8410,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xffdf,0xffff,0xef7d,0x4a69,0xbdd7,0xef5d,0x2104,0xffff,0x738e,0xb5b6,0xef7d,0x0000,0x0000,0x0000,0xbdd7,0xffff,0xe73c,0xffff,0x8410,0x0000,0x8430,0xffff,0x4208,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xef7d,0x0000,0x0000,0x0000,0xc618,0xef5d,0x0861,0xffff,0x7bcf,0x8430,0xffdf,0xffff,0xef7d,0x4a69,0xbdd7,0xef5d,0x2104,0xffff,0x8430,0x0000,0x8430,0xffff,0x4208,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bce,0x9cb2,0x1000,0xad54,0x4a07,0x6b4c,0xbdb6,0xbdb6,0xbdf6,0x5aa9,0x0000,0x41e6,0xad54,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x28e0,0xa513,0xbdb6,0xc5f7,0x9cd2,0x0000,0x0000,0xa513,0x7bce,0x0000,0x2900,0xad54,0x4a07,0x738d,0x9cb1,0x1000,0xa513,0xc5f7,0x738d,0x0000,0x0800,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x2901,0xb575,0xc617,0x738d,0x0000,0x2900,0xad54,0x4a07,0x738d,0x9cd2,0x0000,0x0000,0x9cb1,0x738d,0x0000,0x2900,0xa513,0xbdb6,0xc5f7,0x9cd2,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bce,0x9cb2,0x1000,0xad54,0x4a07,0x6b4c,0xbdb6,0xbdb6,0xb595,0x41e6,0x738d,0x9cb2,0x1000,0xad54,0x5a89,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0xa513,0x7bce,0x0000,0x0000,0x0000,0xa513,0x7bce,0x0000,0x2900,0xad54,0x4a07,0x738d,0x9cd2,0x0000,0x0000,0x9cd2,0x7bce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bce,0x9cb2,0x1000,0xad54,0x4a07,0x6b4c,0xbdb6,0xbdb6,0xbdf6,0x4a27,0x738d,0x9cb2,0x1000,0xad54,0x5a89,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2901,0xb575,0xb575,0xbdb6,0x9cb2,0x1000,0xad54,0x5a89,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x7bef,0xbdf6,0xad54,0xbdd6,0x4a27,0x738d,0x9cb2,0x1000,0xad54,0x4a07,0x738d,0x9cd2,0x0000,0x0000,0x0000,0x738d,0xbdb6,0xbdb6,0xb595,0x5268,0x0000,0x5a89,0xad54,0x28e0,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x7bef,0x9cb2,0x0000,0x0000,0x0000,0x7bce,0x9cb2,0x1000,0xad54,0x4206,0x738d,0xbdf6,0xad54,0xbdd6,0x4a27,0x738d,0x9cb2,0x1000,0xad54,0x5a89,0x0000,0x5a89,0xad54,0x28e0,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x11cc,0x00c9,0x0008,0x01ab,0x0008,0x016b,0x010a,0x0007,0x0008,0x0007,0x014a,0x11ec,0x014a,0x0008,0x01ab,0x09cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x09cc,0x01ab,0x0008,0x0007,0x0007,0x0049,0x09cc,0x09cc,0x0008,0x00c9,0x11ec,0x01ab,0x0008,0x016b,0x00ea,0x0008,0x01ab,0x0008,0x0007,0x00ea,0x11cc,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x09cc,0x01ab,0x0008,0x0007,0x00ea,0x11ec,0x01ab,0x0008,0x016b,0x00ea,0x0008,0x09cc,0x09cc,0x0008,0x00c9,0x11ec,0x01ab,0x0008,0x0007,0x0007,0x0049,0x09cc,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x11cc,0x00c9,0x0008,0x01ab,0x0008,0x016b,0x010a,0x0007,0x0008,0x0007,0x016b,0x00ea,0x0008,0x01ab,0x0008,0x014a,0x11cc,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x09cc,0x0008,0x00c9,0x11cc,0x01ab,0x09cc,0x0008,0x00c9,0x11ec,0x01ab,0x0008,0x016b,0x00ea,0x0008,0x09cc,0x09cc,0x0008,0x00c9,0x11cc,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x11cc,0x00c9,0x0008,0x01ab,0x0008,0x016b,0x010a,0x0007,0x0008,0x0007,0x016b,0x00ea,0x0008,0x01ab,0x0008,0x014a,0x11cc,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x09cc,0x01ab,0x0008,0x0007,0x0007,0x0069,0x01ab,0x0008,0x014a,0x11cc,0x01ab,0x01ab,0x01ab,0x01ab,0x09cb,0x01ac,0x018c,0x01ab,0x09cc,0x0107,0x0000,0x0000,0x0000,0x1000,0x0004,0x0008,0x0008,0x0007,0x016b,0x00ea,0x0009,0x01ab,0x0008,0x016b,0x00ea,0x0008,0x09cc,0x01ab,0x11cc,0x00ea,0x0007,0x0008,0x0007,0x014a,0x19ec,0x014b,0x0008,0x01ab,0x09cc,0x0107,0x0000,0x0000,0x0000,0x1000,0x0004,0x0009,0x09cc,0x01ab,0x11cc,0x00c9,0x0009,0x01ab,0x0008,0x016b,0x010a,0x0007,0x0008,0x0007,0x016b,0x00ea,0x0009,0x01ab,0x0008,0x014a,0x19ec,0x014b,0x0008,0x01ab,0x09cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x09cb,0x01ac,0x018c,0x01ab,0x018c,0x01cc,0x0927,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x03b9,0x23d9,0x3bf8,0x13b9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x03b9,0x23d9,0x3bf8,0x13b9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x03b9,0x23d9,0x3bf8,0x13b9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x03b9,0x2bd8,0x33f8,0x0bb9,0x3bf8,0x23fa,0x0292,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0398,0x13b8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0398,0x13b8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0398,0x13b8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0398,0x13b8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0398,0x13b8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0399,0x0379,0x0b98,0x0379,0x0398,0x13b8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x7c74,0xee07,0x23b8,0x0379,0x13b8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0359,0x7475,0xfe24,0x3bd7,0x0399,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x8494,0xf624,0x23b8,0x0379,0x13b8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xb52f,0xddab,0x0399,0xf625,0x8494,0x0379,0x0af3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xb530,0xddca,0xd5ab,0xd5ab,0xd5ac,0xddca,0xe5c9,0xe5c9,0xe5c9,0xddaa,0x6435,0x039a,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xb530,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xddaa,0x6435,0x039a,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xb530,0xddca,0xd5ab,0xd5ab,0xd5ac,0xddca,0xe5c9,0xe5c9,0xe5c9,0xddaa,0x6435,0x039a,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xb530,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xddab,0xd5ac,0xd5ab,0xd5ab,0xddab,0x6c35,0x039a,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xb530,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xddaa,0x6435,0x039a,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x9cd2,0xbd4f,0x23b8,0xd58c,0x6c55,0x039a,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x033a,0x6c55,0xfe60,0xede7,0x6c55,0x039a,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x9cd2,0xcd8d,0x7475,0x23b8,0x0398,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x3bd7,0x8cb3,0xd5ab,0x6c55,0x039a,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x3bd7,0x94d2,0xd58c,0x7c74,0x2bb8,0x03b9,0x0b15,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddca,0xfe80,0xfe60,0xfe60,0xfe60,0xd58c,0xb530,0xb52f,0xc54e,0xfe60,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xede7,0xb530,0xbd2f,0xbd2f,0xbd2f,0xbd2f,0xb52f,0xc54e,0xfe60,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddca,0xfe80,0xfe60,0xfe60,0xfe60,0xd58c,0xb530,0xb52f,0xc54e,0xfe60,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xede7,0xb530,0xbd2f,0xb530,0xf605,0xfe60,0xfe60,0xfe60,0xfe80,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xede7,0xb530,0xbd2f,0xbd2f,0xbd2f,0xbd2f,0xb52f,0xc54e,0xfe60,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xc56e,0xee07,0x23b8,0xfe60,0x8c93,0x037a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x7474,0xd5ab,0xfe22,0xbd2f,0x5416,0x0399,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xc54e,0xede8,0x033a,0x0398,0x1398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x23b8,0xfe40,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x6c55,0xd58c,0xfe40,0xbd2f,0x53f6,0x0399,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xd5ab,0xfe60,0xfe41,0xfe40,0xfe60,0x6c55,0x031a,0x033a,0x0b98,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xb530,0x02fa,0x0359,0x0359,0x0359,0x0359,0x033a,0x0b98,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xd5ab,0xfe60,0xfe41,0xfe40,0xfe60,0x6c55,0x031a,0x033a,0x0b98,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xb530,0x02fa,0x0359,0x031a,0xd58c,0xfe60,0xfe41,0xfe40,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xb530,0x02fa,0x0359,0x0359,0x0359,0x0359,0x033a,0x0b98,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x9cd2,0xbd4f,0x23b8,0xd58c,0x6c55,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0x94d2,0xf605,0xf624,0x7c74,0x2bb8,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xbd4f,0xe5e9,0x0359,0x0398,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x33d7,0xfe41,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0x94d2,0xf605,0xfe40,0xede8,0x6c55,0x039a,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xd5ab,0xfe60,0xfe41,0xfe40,0xfe40,0x7c74,0x0379,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xbd2f,0x0359,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xd5ab,0xfe60,0xfe40,0xfe40,0xfe40,0x7c74,0x0379,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xbd2f,0x0359,0x0b98,0x0379,0xd5ab,0xfe60,0xfe40,0xfe40,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xbd2f,0x0359,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0399,0x0379,0x0b98,0x0379,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x8494,0xfe40,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xb510,0xddca,0x23b8,0x1398,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x0b98,0x5c16,0xf606,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x8494,0xf606,0x43f7,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xd5ab,0xfe60,0xfe41,0xfe40,0xfe40,0x7c74,0x0379,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xb530,0x031a,0x0379,0x0379,0x0379,0x0379,0x0359,0x23b8,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xd5ac,0xfe60,0xfe60,0xfe60,0xfe60,0x7c74,0x0379,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xbd2f,0x0359,0x0b98,0x0379,0xddab,0xfe80,0xfe60,0xfe40,0xfe60,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xb530,0x033a,0x0b98,0x0379,0x0398,0x0399,0x0359,0x43d7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xad11,0xfe60,0xfe22,0x5c16,0x0398,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x0398,0x8cb3,0xf624,0x3bd7,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x7c74,0xfe24,0x5c16,0x0b98,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xb530,0xddca,0x43f7,0xfe24,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xd5ab,0xfe60,0xfe41,0xfe40,0xfe40,0x7c74,0x0379,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddab,0xf605,0xd58c,0xd5ab,0xd5ab,0xd5ab,0xd5ab,0xd5ac,0xddab,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddca,0xd58c,0x6c55,0x7c74,0x7c74,0x3bd7,0x0398,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xbd2f,0x0359,0x0b98,0x0398,0x6c35,0x7c74,0x7475,0x8c93,0xfe41,0x8474,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddab,0xfe40,0xb530,0x0379,0xddca,0x4bf7,0x94b3,0xc56e,0x0379,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0x5c16,0x8493,0x7475,0x0398,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x3bd7,0x8494,0x23b8,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x43f7,0x7c74,0x0b98,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0x5c36,0x7455,0x0398,0x7c74,0x43f7,0x03b9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x13b8,0x0358,0x0338,0x0338,0x0338,0x0338,0x0338,0x0378,0x13b8,0x0b98,0x0379,0xd5ab,0xfe60,0xfe41,0xfe40,0xfe40,0x7c74,0x0379,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x13b8,0x0358,0x0358,0x1398,0x0379,0xd5ac,0xfe60,0xfe60,0xfe60,0xfe60,0xfe60,0xfe60,0xfe60,0xfe60,0xfe60,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0358,0x1398,0x0379,0xe5c9,0xb530,0x031a,0x0379,0x0359,0x0398,0x1398,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0378,0x13b8,0x0b98,0x0379,0xe5c9,0xbd2f,0x0359,0x0b98,0x1398,0x0379,0x0359,0x0359,0x1bb8,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0358,0x1398,0x0379,0xddaa,0xe5c9,0xad11,0xbd2f,0xad10,0xb52f,0xb530,0xad10,0xbd4e,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x13b8,0x0358,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x13b8,0x0358,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0379,0x0359,0x0379,0x0398,0x1398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x13b8,0x0358,0x0338,0x0338,0x0338,0x0338,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0379,0x0398,0x1398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x13b8,0x0358,0x0338,0x0338,0x0338,0x0338,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0379,0x0398,0x1398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0379,0x0379,0x0b98,0x0379,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0358,0x6cda,0x855b,0x853a,0x853a,0x853a,0x8d5b,0x5479,0x0358,0x0b98,0x0379,0xd5ab,0xfe60,0xfe41,0xfe40,0xfe40,0x7475,0x0359,0x0379,0x33d7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x7d1a,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0378,0x5c79,0x6cda,0x0398,0x0379,0xd5ab,0xfe60,0xfe41,0xfe41,0xfe41,0xfe41,0xfe41,0xfe41,0xfe40,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x74fa,0x853a,0x853a,0x853a,0x853a,0x853a,0x853a,0x855b,0x6cda,0x0398,0x0379,0xe5c9,0xb52f,0x033a,0x0399,0x0398,0x0398,0x0399,0x0379,0x33d7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x74fa,0x853a,0x853a,0x853a,0x853a,0x853a,0x8d5b,0x5479,0x0358,0x0b98,0x0379,0xe5c9,0xb52f,0x033a,0x0398,0x0398,0x0398,0x0399,0x0379,0x33d7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x7d1a,0x853b,0x853a,0x853a,0x7d1a,0x853a,0x853a,0x855b,0x6cda,0x0398,0x0379,0xe5ca,0xc54e,0x8494,0xddca,0x6c35,0xcd6d,0xad11,0x8494,0xe5e9,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x853a,0x3c19,0x0378,0x1398,0x0b98,0x1398,0x0358,0x5c79,0x74fa,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x7d1a,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0378,0x5c79,0x6cda,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0398,0x6cda,0x855b,0x853a,0x7d1a,0x853a,0x8d5b,0x5c79,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0358,0x6cda,0x855b,0x853a,0x853a,0x853a,0x8d5b,0x5479,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x74fa,0x853a,0x853a,0x853a,0x853a,0x853a,0x8d5b,0x5479,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x13b8,0x23b8,0xd71e,0xffff,0xffff,0xffff,0xffff,0xffff,0xb63c,0x0378,0x0398,0x0379,0xd5ab,0xfe60,0xfe40,0xfe40,0xfe40,0x8c93,0x1bb8,0x33d7,0x5c16,0xfe22,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x855b,0x0338,0x0b98,0x0b98,0x0b98,0x02f7,0xbe7d,0xef7e,0x0338,0x0379,0xd5ab,0xfe60,0xfe40,0xfe40,0xfe40,0xfe40,0xfe40,0xfe40,0xfe40,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0xffff,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6fd,0x0358,0x0379,0xe5c9,0xc54e,0x0b98,0x3bd7,0x3bd7,0x3bd7,0x3bd7,0x33d7,0x5c16,0xfe22,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb63c,0x0378,0x0398,0x0379,0xe5c9,0xc54e,0x0b98,0x3bd7,0x3bd7,0x3bd7,0x3bd7,0x33d7,0x5c16,0xfe22,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6fd,0x0358,0x0379,0xd5ac,0xfe80,0xddab,0x33d7,0xfe40,0x7455,0xb530,0xe5e9,0x33d8,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffdf,0x8d7b,0x0378,0x0398,0x0b98,0x0398,0x0378,0xbe7d,0xe73e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x855b,0x0338,0x0b98,0x0b98,0x0b98,0x02f7,0xbe7d,0xef7e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0358,0xd6fd,0xffff,0xffff,0xffff,0xffff,0xffff,0xae1c,0x0317,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x13b8,0x23b8,0xd71e,0xffff,0xffff,0xffff,0xffff,0xffff,0xb63c,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb63c,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0x8d5b,0x23b8,0x3c19,0x3c19,0x3c19,0x13b8,0xbe5c,0xdf1e,0x0358,0x0379,0xddab,0xfe80,0xfe40,0xfe40,0xfe60,0xfe41,0xfe23,0xfe23,0xfe22,0xfe60,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0b98,0x0b98,0x0b98,0x0317,0xbe7c,0xe75e,0x0358,0x0379,0xddab,0xfe80,0xfe40,0xfe40,0xfe40,0xfe40,0xfe40,0xfe40,0xfe60,0xfe60,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x855b,0x0358,0x23d8,0x23d8,0x23b8,0x3bf9,0x4419,0x33f9,0x0398,0x0379,0xddca,0xfe60,0xfe23,0xfe23,0xfe23,0xfe23,0xfe23,0xfe23,0xfe22,0xfe60,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x8d7b,0x1bb8,0x3c19,0x3c19,0x3c19,0x13b8,0xbe5c,0xdf1e,0x0358,0x0379,0xddca,0xfe60,0xfe23,0xfe23,0xfe23,0xfe23,0xfe23,0xfe23,0xfe22,0xfe60,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x13b8,0x3c19,0x4419,0x1bb8,0x8d7b,0xffff,0x5c79,0x33f9,0x4419,0x33f9,0x0398,0x0379,0xddab,0xfe80,0xfe40,0xfe23,0xfe40,0xfe22,0xfe40,0xfe40,0xfe23,0xfe60,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x13b8,0x23d8,0xe75e,0xb63c,0x0297,0x0358,0x02f7,0xdf3e,0xbe9d,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0b98,0x0b98,0x0b98,0x0317,0xbe7c,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0398,0x33f9,0x23b8,0x8d7b,0xffff,0x5c79,0x33f9,0x2bd8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0x8d5b,0x23b8,0x3c19,0x3c19,0x3c19,0x13b8,0xbe5c,0xdf1e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x8d7b,0x1bb8,0x3c19,0x3c19,0x3c19,0x13b8,0xbe5c,0xdf1e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x7d3a,0x0317,0x0358,0x02d7,0x0378,0x02d7,0xbe7c,0xe77e,0x0358,0x0398,0x6c35,0x7c74,0x7c74,0x7c74,0x7c74,0x8474,0x8494,0x8494,0x8494,0x7c74,0x3bd7,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0378,0x0317,0x0398,0x0317,0xbe5c,0xe75e,0x0358,0x0398,0x6c35,0x7c74,0x7c74,0x7c74,0x7c74,0x7c74,0x7c74,0x7c74,0x7c74,0x7c74,0x3bd7,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7df,0xef9f,0xdf3e,0xe73e,0xe75e,0xe77e,0x6cba,0x0318,0x0378,0x0b98,0x0398,0x6435,0x8494,0x8494,0x8494,0x8494,0x8494,0x8494,0x8494,0x8494,0x7c74,0x3bd7,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x6cda,0x0237,0x02d7,0x02d7,0x02d7,0x01f6,0xbe7c,0xf7bf,0x0338,0x0398,0x6435,0x8494,0x8494,0x8494,0x8494,0x8494,0x8494,0x8494,0x8494,0x7c74,0x3bd7,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0378,0x0378,0x02f7,0x7d1a,0xffff,0x33f9,0x0358,0x0378,0x0378,0x0b98,0x0398,0x6c35,0x7c74,0x7c74,0x8494,0x7c74,0x8494,0x7c74,0x7c74,0x8494,0x7c74,0x3bd7,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0358,0x5c99,0xbe7d,0xe77e,0xd71e,0xe77e,0xa5fc,0x4c39,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0b98,0x0b98,0x0b98,0x0317,0xbe7c,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x1398,0x0378,0x02f7,0x7d1a,0xffff,0x33f9,0x0358,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x7d3a,0x02f7,0x0378,0x0378,0x0378,0x02d7,0xbe7c,0xe77e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x6cda,0x0237,0x02d7,0x02d7,0x02d7,0x01f6,0xbe7c,0xf7bf,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x02f7,0x6499,0xb65c,0x0378,0x02d7,0xbe7c,0xe75e,0x0358,0x0b98,0x0379,0x0359,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0359,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853b,0x02b7,0x4c59,0xb65c,0x0378,0x02d7,0xbe7c,0xe75e,0x0358,0x0b98,0x0379,0x0359,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0359,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7df,0xd6fd,0xb65c,0xbe5c,0xbe7c,0xbe7d,0x5c79,0x0378,0x0b98,0x0b98,0x1398,0x0379,0x0359,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0359,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7df,0xd6fd,0xb65c,0xbe7c,0xbe5c,0xae1c,0xb65c,0xbe7c,0x959b,0x0378,0x1398,0x0379,0x0359,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0359,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0x853a,0xffff,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x0359,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0359,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x13b8,0x02f7,0x6cda,0xdf3e,0xffff,0xc6bd,0x4439,0x0338,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0b98,0x0b98,0x0b98,0x0317,0xbe7c,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0x853a,0xffff,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0b98,0x0b98,0x0b98,0x0317,0xbe7c,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7df,0xd6fd,0xb65c,0xbe7c,0xbe7c,0xbe7c,0xbe7c,0xbe5c,0x959b,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x7d3a,0x0297,0x6cda,0xe75e,0x8d5b,0x0358,0xb65c,0xe77e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x7d1a,0x2bd8,0xae1c,0xe75e,0x8d7b,0x0358,0xb65c,0xe77e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x6cda,0x0237,0x02d7,0x02d7,0x02d7,0x0358,0x0378,0x0378,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7df,0xef9f,0xe75e,0xe75e,0xe77e,0xffff,0xffdf,0x8d5b,0x0297,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0x853a,0xffff,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x13b8,0x02d7,0x74fa,0xffff,0x0398,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x7d3a,0x02f7,0x0378,0x0378,0x0378,0x02d7,0xbe7c,0xe77e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x1398,0x0378,0x02f7,0x7d1a,0xffff,0x33f9,0x0358,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x7d3a,0x02f7,0x0378,0x0378,0x0378,0x02d7,0xbe7c,0xe77e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7df,0xef9f,0xe75e,0xe75e,0xe75e,0xe75e,0xef9f,0x959b,0x0297,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0x8d5b,0x23d8,0x2bd8,0x4c39,0xffff,0x853a,0xae1c,0xdf1e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0x74fa,0xb65c,0xdf1e,0x0378,0xf7df,0x7d1a,0xae3c,0xdf1e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x8d7b,0x1bb8,0x3c19,0x3c19,0x3c19,0x3c19,0x4419,0x33f9,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x7d1a,0x02d7,0x0318,0x23d8,0xf7bf,0x853a,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0x853a,0xffff,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0x853a,0xffff,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0x8d5b,0x23b8,0x3c19,0x3c19,0x3c19,0x13b8,0xbe5c,0xdf1e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0398,0x33f9,0x23b8,0x8d7b,0xffff,0x5c79,0x33f9,0x2bd8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0x8d5b,0x23b8,0x3c19,0x3c19,0x3c19,0x13b8,0xbe5c,0xdf1e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x7d1a,0x02d7,0x0358,0x0358,0x0358,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x13b8,0x23d8,0xd71e,0xffff,0xffff,0xffff,0xffff,0xffff,0xb63c,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x13b8,0x23d8,0xe75e,0xbe7d,0x0378,0x0b98,0x23d8,0xe75e,0xbe7d,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6fd,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x855b,0x0338,0x0398,0x1398,0x23d8,0xe75e,0xb65c,0x0317,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0x855b,0xffff,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0x855b,0xffff,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x13b8,0x23d8,0xd71e,0xffff,0xffff,0xffff,0xffff,0xffff,0xb63c,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0358,0xd6fd,0xffff,0xffff,0xffff,0xffff,0xffff,0xae1c,0x0317,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x13b8,0x23d8,0xd71e,0xffff,0xffff,0xffff,0xffff,0xffff,0xb63c,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x855b,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0358,0x6cda,0x855b,0x853a,0x853a,0x7d1a,0x855b,0x5479,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0358,0x74fa,0x5c79,0x0358,0x0b98,0x0358,0x74fa,0x5c79,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0398,0x23b8,0x74fa,0x853a,0x853a,0x853a,0x853a,0x853a,0x853a,0x855b,0x6cda,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0398,0x23b8,0x7d1a,0x4419,0x0378,0x0b98,0x0b98,0x0358,0x74fa,0x6499,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x4419,0x7d1a,0x23b8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x4419,0x7d1a,0x23b8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0358,0x6cda,0x855b,0x853a,0x853a,0x853a,0x8d5b,0x5479,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0398,0x6cda,0x855b,0x853a,0x7d1a,0x853a,0x8d5b,0x5c79,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0358,0x6cda,0x855b,0x853a,0x853a,0x853a,0x8d5b,0x5479,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0398,0x23b8,0x7d1a,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x13d9,0x0379,0x0358,0x0359,0x0358,0x0359,0x0358,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x13b9,0x0379,0x0399,0x13d9,0x0bb9,0x13b9,0x0379,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x13da,0x03b9,0x0359,0x0358,0x0358,0x0358,0x0359,0x0358,0x0358,0x0358,0x0379,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x13da,0x03b9,0x0359,0x0399,0x13d9,0x0bb9,0x0bb9,0x13b9,0x0379,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x13d9,0x0399,0x0359,0x03b9,0x13b9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x13d9,0x0399,0x0359,0x03b9,0x13b9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x13b9,0x0379,0x0358,0x0358,0x0358,0x0358,0x0358,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x13b9,0x0379,0x0358,0x0358,0x0358,0x0358,0x0358,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x13b9,0x0379,0x0358,0x0358,0x0358,0x0358,0x0358,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x13da,0x03b9,0x0359,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0861,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0841,0x0841,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0861,0x0000,0x0841,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0841,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0841,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0841,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0841,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1060,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b6d,0x5acb,0x0000,0x0000,0x0000,0x6b6d,0x8410,0x7bef,0x7bef,0x18e3,0x0000,0x528a,0x8c51,0x7bef,0x1082,0x6b4d,0x8410,0x7bef,0x7bef,0x18e3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x528a,0x8c51,0x7bef,0x1082,0x6b4d,0x8410,0x7bef,0x7bef,0x18e3,0x0000,0x5acb,0x738e,0x0000,0x0000,0x632c,0x8430,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x528a,0x8430,0x7bef,0x0000,0x0000,0x5acb,0x8430,0x7bcf,0x8430,0x31a6,0x4a69,0x8410,0x7bcf,0x7bef,0x39c7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x528a,0x8410,0x8410,0x8430,0x39e7,0x0000,0x39c7,0x7bef,0x0000,0x0000,0x528a,0x8430,0x7bef,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x738e,0x5aeb,0x0000,0x0000,0x0000,0x738e,0x5acb,0x0000,0x18e3,0x7bef,0x7bef,0x8410,0x6b6d,0x0000,0x0000,0x738e,0x5acb,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0x73ae,0x8451,0x52aa,0x0000,0x0000,0x0000,0x738e,0x5acb,0x0000,0x18e3,0x7bcf,0x3186,0x52aa,0x6b6d,0x0861,0x73ae,0x8410,0x8430,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0x73ae,0x8451,0x52aa,0x0000,0x0000,0x0000,0x738e,0x5acb,0x0000,0x18e3,0x73ae,0x8451,0x52aa,0x0000,0x18e3,0x73ae,0x8451,0x52aa,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0x6b6d,0x0000,0x0000,0x0000,0x528a,0x8410,0x8410,0x8430,0x3186,0x528a,0x8430,0x7bcf,0x8430,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18a0,0x72e0,0x8320,0x8340,0x6aa0,0x0840,0x72e0,0x8340,0x5200,0x0000,0x18c0,0x7b00,0x7b00,0x8320,0x6aa0,0x1060,0x7b00,0x7b00,0x8320,0x6aa0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xef5d,0xbdf7,0x0000,0x0000,0x0000,0xd69a,0xffff,0xffff,0xf79e,0x39c7,0x0000,0xb596,0xffff,0xf79e,0x18e3,0xce79,0xffff,0xffff,0xf79e,0x39c7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xffff,0xf79e,0x18e3,0xce79,0xffff,0xffff,0xf79e,0x39c7,0x0000,0xbdf7,0xe71c,0x18e3,0x0000,0xdefb,0xffff,0xd6ba,0x2104,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xffff,0xf79e,0x52aa,0x0000,0xad55,0xffff,0xffff,0xffff,0x630c,0xa534,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xffff,0xffdf,0xffff,0x73cf,0x0000,0x8c71,0xffdf,0x52aa,0x0000,0xb596,0xffff,0xf79e,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x18e3,0xe73c,0xb5b6,0x0000,0x0861,0x18e3,0xe71c,0xbdf7,0x0000,0x39c7,0xf79e,0xffff,0xffff,0xd69a,0x0000,0x18e3,0xe71c,0xbdf7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0xffff,0xb596,0x0000,0x0000,0x18e3,0xe71c,0xbdf7,0x0000,0x39e7,0xffff,0x6b6d,0xb596,0xe73c,0x2104,0xffdf,0xffff,0xffff,0xd69a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0xffff,0xb596,0x0000,0x0000,0x18e3,0xe71c,0xbdf7,0x0000,0x39e7,0xffff,0xffff,0xb596,0x0000,0x39e7,0xffff,0xffff,0xb596,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdf7,0xef5d,0x0000,0x0000,0x0000,0xb596,0xffff,0xffdf,0xffff,0x630c,0x9cf3,0xffff,0xffff,0xffff,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0xfe41,0xfe41,0xcd00,0x20c0,0xfe21,0xfe81,0xb460,0x0000,0x3960,0xf5e1,0xfe61,0xfe81,0xcd00,0x18c0,0xede1,0xfe61,0xfe81,0xd520,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe73c,0xbdd7,0x0000,0x0000,0x0000,0x0000,0xc618,0xe73c,0x18e3,0x0000,0xe71c,0xbdd7,0x0000,0x39c7,0x0841,0x0000,0xc618,0xe73c,0x18e3,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe71c,0xbdd7,0x0000,0x39c7,0x0841,0x0000,0xc618,0xe73c,0x18e3,0x0000,0xdedb,0xad75,0x73ae,0xf79e,0x18e3,0xe71c,0xb596,0x6b6d,0xffdf,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0x4228,0xf79e,0x7bcf,0x0000,0x8c71,0xffff,0x5acb,0x0000,0xad75,0xffff,0xffff,0xffff,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0x0000,0x39e7,0x0000,0xad96,0xdedb,0x4228,0xf79e,0x632c,0xad75,0xe71c,0x2965,0xffdf,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39c7,0xf79e,0x8c71,0x0000,0x0000,0x39c7,0xf79e,0x73ae,0xad75,0xdedb,0x0000,0x18e3,0xe73c,0xc618,0x0000,0x39c7,0xf79e,0x73ae,0xad75,0xdedb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x738e,0xad75,0xdefb,0x18e3,0xf79e,0x73ae,0xad75,0xd6ba,0x2124,0xffff,0x5aeb,0xad75,0xe73c,0x18e3,0xffdf,0x8430,0x0000,0x31a6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x738e,0xad75,0xdefb,0x18e3,0xf79e,0x6b6d,0xad55,0xd6ba,0x2104,0xffdf,0x7bef,0xad75,0xd6ba,0x2104,0xffdf,0x7bef,0xad75,0xdedb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0x0000,0x39e7,0x18c3,0x0000,0x8c71,0xffff,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0x8340,0x0000,0x20e0,0x3960,0xfe21,0x7b00,0xac40,0xdd40,0x0000,0x18c0,0xe5a1,0xbca0,0x0000,0x0000,0x20c0,0xe5a1,0xbca0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe73c,0xbdd7,0x0000,0x0000,0x0020,0x0000,0xb5b6,0xe71c,0x0000,0x0000,0x630c,0xc618,0xbdf7,0x0000,0x0000,0x0000,0xb5b6,0xe71c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630c,0xc618,0xbdf7,0x0000,0x0000,0x0000,0xb5b6,0xe71c,0x0000,0x0000,0xe73c,0xad75,0x632c,0xffff,0x2104,0xd6ba,0xffff,0xce59,0x73ae,0x18e3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xdefb,0x0841,0xffff,0x8410,0x0000,0x7bef,0xffff,0x3186,0x0000,0xad75,0xffff,0xffff,0xffff,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xffff,0xd6ba,0x2124,0x0000,0xbdf7,0xe71c,0x0000,0xffff,0x6b6d,0xa514,0xffff,0xd6ba,0x7bcf,0x2945,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x6b6d,0x8c51,0xbdd7,0x2945,0xffff,0x632c,0xad75,0xe73c,0x0000,0x0000,0xe71c,0xb5b6,0x0000,0x39e7,0xffff,0x632c,0xad75,0xe73c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xf7be,0xf79e,0xb5b6,0x5acb,0x31a6,0xffff,0x632c,0xad75,0xe71c,0x18e3,0xf7be,0xf7be,0xad75,0x3186,0x39c7,0xf7be,0xf7be,0x9492,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xf7be,0xf7be,0xad75,0x39e7,0x39c7,0xffdf,0xef5d,0xffdf,0xdedb,0x2104,0xffdf,0x632c,0xad75,0xe71c,0x2104,0xffdf,0x632c,0xad75,0xe73c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0x0000,0x0000,0x0000,0xb596,0xffff,0xd6ba,0x2124,0x0000,0x0000,0x7bef,0xffdf,0x3186,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf601,0xf601,0x9380,0x0000,0x3980,0xfe21,0x6260,0xac40,0xe5a1,0x0000,0x0000,0xe581,0xb460,0x0000,0x0000,0x0000,0xe581,0xb460,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe73c,0xb596,0x0000,0x0000,0x0000,0x0000,0xb596,0xe71c,0x0000,0x0000,0x0000,0x630c,0xbdf7,0xb596,0x2965,0x0000,0xbdd7,0xe73c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x630c,0xbdf7,0xb596,0x2965,0x0000,0xbdd7,0xe73c,0x0000,0x0000,0xef7d,0xad75,0x5aeb,0xffff,0x2124,0xdedb,0xef7d,0x8c71,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xdefb,0x0000,0xffff,0x8430,0x0000,0x73ae,0xffdf,0x18c3,0x0000,0xb5b6,0xf7be,0xb596,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xffff,0xad75,0x2945,0x0000,0xc618,0xe73c,0x0000,0xffff,0x738e,0xa534,0xffdf,0xb596,0xa534,0x4a69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x5aeb,0xb596,0xf79e,0x18e3,0xffff,0x5aeb,0xad75,0xef7d,0x0000,0x0000,0xe73c,0xbdd7,0x0000,0x39e7,0xffff,0x5aeb,0xad75,0xef7d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xf7be,0xdedb,0x6b6d,0x0000,0x4208,0xffff,0x5b0c,0xad75,0xef5d,0x18e3,0xf7be,0xd6ba,0xad75,0x7bef,0x3186,0xffdf,0xd69a,0x630c,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xf7be,0xd6ba,0xad75,0x7bef,0x3186,0xf7be,0xce79,0xe73c,0xdedb,0x2104,0xffdf,0x6b4d,0xad75,0xe71c,0x2104,0xffff,0x5acb,0xad75,0xef7d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe71c,0x0000,0x0000,0x0000,0xb5b6,0xffdf,0xa514,0x0000,0x0000,0x0000,0x8410,0xffff,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xf601,0xd520,0x6260,0x0000,0x3980,0xfe21,0x5a20,0xac40,0xedc1,0x0000,0x0000,0xe581,0xb460,0x0000,0x0020,0x0000,0xe581,0xbc80,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe71c,0xd6ba,0x738e,0x7bef,0x1082,0x52aa,0xd6ba,0xf79e,0x738e,0x0861,0x6b6d,0x738e,0x94b2,0xdefb,0x31a6,0x0000,0xbdf7,0xe73c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b6d,0x738e,0x94b2,0xdefb,0x31a6,0x0000,0xbdf7,0xe73c,0x0000,0x0000,0xbdd7,0xb596,0x9cd3,0xd69a,0x0841,0xe73c,0xb596,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xf79e,0x8410,0xd6ba,0x630c,0x3186,0xb5b6,0xffff,0x9492,0x0000,0xbdd7,0xdefb,0x0000,0xffff,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdf7,0xe71c,0x0000,0x0000,0x0000,0x9cd3,0xce59,0x8430,0xd6ba,0x4a69,0xb5b6,0xdefb,0x0000,0xffff,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3186,0xd69a,0x9cd3,0xb596,0xb5b6,0x18c3,0xd69a,0x9cd3,0xb596,0xbdd7,0x0000,0x0000,0xe73c,0xbdf7,0x0000,0x3186,0xd69a,0x9cd3,0xb596,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x738e,0x0000,0x0000,0x3186,0xd69a,0x9cd3,0xb596,0xb5b6,0x2945,0xffff,0x52aa,0xb596,0xef7d,0x18e3,0xffff,0xa514,0x6b6d,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x52aa,0xb596,0xef7d,0x18e3,0xffff,0x52aa,0xa534,0xe73c,0x2104,0xffff,0x6b6d,0xb596,0xe71c,0x2104,0xffff,0xad55,0xb596,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xf79e,0x7bcf,0x8430,0x0000,0xb5b6,0xef7d,0x630c,0x8410,0x39e7,0x0000,0x8410,0xffff,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3980,0xfe21,0xa400,0x6aa0,0x6280,0x3140,0xfe21,0xac20,0xac40,0xbc80,0x0000,0x72c0,0xede1,0xd520,0x5a20,0x0000,0x0000,0xe5a1,0xbc80,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce79,0xffff,0xffff,0xf79e,0x18e3,0xd69a,0xffff,0xffdf,0xf79e,0x18e3,0xce79,0xffff,0xd69a,0x0000,0x0000,0x0000,0xb596,0xdedb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd69a,0xffff,0xd69a,0x0000,0x0000,0x0000,0xb596,0xdedb,0x0000,0x0000,0x0000,0xb596,0xdefb,0x0000,0x0000,0xdedb,0xb596,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa534,0xffff,0xf79e,0x18e3,0x0000,0xad75,0xffff,0xf7be,0xffff,0x632c,0xa534,0xd6ba,0x18e3,0xf79e,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xdedb,0x0000,0x0000,0x0841,0x0000,0x73ae,0xffdf,0x2104,0x0000,0xb596,0xd6ba,0x18e3,0xf79e,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdefb,0xb596,0x0000,0x0000,0x0000,0xdefb,0xb596,0x0000,0x0000,0x0000,0xdedb,0xb596,0x0000,0x0000,0x0000,0xdefb,0xb596,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39c7,0xf79e,0x7bef,0x0000,0x0000,0x0000,0x0000,0xdefb,0xb596,0x0000,0x39c7,0xf79e,0x632c,0xa534,0xd6ba,0x18e3,0xef5d,0xffff,0xffff,0xd69a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39c7,0xf79e,0x632c,0xa534,0xd6ba,0x18e3,0xf79e,0x632c,0xa534,0xd6ba,0x18e3,0xf79e,0x632c,0xa534,0xd6ba,0x18e3,0xef5d,0xffff,0xa534,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa534,0xffff,0xffff,0xffff,0x630c,0x9cd3,0xffff,0xffff,0xffff,0x7bcf,0x0000,0x7bef,0xf79e,0x39c7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3960,0xeda0,0xfe20,0xfe60,0xcd00,0x18a0,0xeda0,0xfe80,0xa400,0x0000,0x3960,0xf5e0,0xfe00,0xfe40,0xd520,0x0000,0x0000,0xdd40,0xb440,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x3163,0x39c5,0x39c5,0x39a5,0x0000,0x3163,0x39c5,0x39a5,0x39a5,0x0000,0x3143,0x41e6,0x3163,0x0000,0x0000,0x0000,0x2922,0x3164,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x3164,0x41e6,0x3163,0x0000,0x0000,0x0000,0x2922,0x3164,0x0000,0x0000,0x0000,0x2922,0x3184,0x0000,0x0000,0x3164,0x2922,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x2901,0x41c6,0x39a5,0x0800,0x0000,0x2901,0x39c6,0x39a5,0x39c5,0x1840,0x2901,0x3164,0x0000,0x39a5,0x1880,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x2922,0x3164,0x0000,0x0000,0x0000,0x0000,0x1880,0x39a5,0x0800,0x0000,0x2922,0x3164,0x0000,0x39a5,0x1880,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x3184,0x2922,0x0000,0x0000,0x0000,0x3184,0x2922,0x0000,0x0000,0x0000,0x3164,0x2922,0x0000,0x0000,0x0000,0x3184,0x2922,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0800,0x39a5,0x1880,0x0000,0x0000,0x0000,0x0000,0x3184,0x2922,0x0000,0x0800,0x39a5,0x1840,0x2901,0x3164,0x0000,0x39a5,0x39c5,0x39c6,0x3164,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0800,0x39a5,0x1840,0x2901,0x3164,0x0000,0x39a5,0x1840,0x2901,0x3164,0x0000,0x39a5,0x1840,0x2901,0x3164,0x0000,0x39a5,0x41c6,0x2901,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x2901,0x39c6,0x39a5,0x39c5,0x1840,0x20e0,0x39c6,0x39a5,0x39c5,0x1880,0x0000,0x1880,0x39a5,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0800,0x3920,0x3940,0x3940,0x30e0,0x0000,0x3920,0x4160,0x28a0,0x0000,0x0800,0x3920,0x3940,0x3940,0x3100,0x0000,0x0000,0x3100,0x28c0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x02d4,0x02d4,0x02d4,0x02d4,0x0b14,0x02d4,0x02d4,0x02d4,0x02d4,0x0b14,0x02d4,0x02b4,0x02d4,0x0b14,0x0b14,0x0b14,0x02f4,0x02d4,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x02d4,0x02b4,0x02d4,0x0b14,0x0b14,0x0b14,0x02f4,0x02d4,0x0b14,0x0b14,0x0b14,0x02f4,0x02d4,0x0b14,0x0b14,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x02f4,0x02d4,0x02d4,0x0b14,0x1314,0x02f4,0x02d4,0x02d4,0x02d4,0x02f4,0x02f4,0x02d4,0x0b14,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x02f4,0x02d4,0x0b14,0x0b14,0x0b14,0x0b14,0x02f4,0x02d4,0x0b14,0x1314,0x02f4,0x02d4,0x0b14,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b14,0x02d4,0x02f4,0x1314,0x0b14,0x02d4,0x0b14,0x02b5,0x0295,0x0314,0x0275,0x02b4,0x0294,0x0295,0x0b14,0x02b6,0x0316,0x11ec,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x02d4,0x02f4,0x02f4,0x02d4,0x0b14,0x02d4,0x02f4,0x02f4,0x02d4,0x0b14,0x02d4,0x02f4,0x02f4,0x02d4,0x0b14,0x02d4,0x02d4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x02f4,0x02d4,0x02d4,0x02d4,0x02f4,0x02f4,0x02d4,0x02d4,0x02d4,0x02f4,0x1314,0x02f4,0x02d4,0x0b14,0x0b14,0x1314,0x02f5,0x02b6,0x0314,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x02f4,0x02d4,0x02d4,0x02f4,0x0b14,0x02f4,0x02d4,0x02f4,0x1314,0x0b14,0x02f4,0x02d4,0x02d4,0x02f4,0x0b14,0x0b14,0x02f4,0x02f4,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x13b9,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x03da,0x1335,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x13b9,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x03da,0x1335,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x13b9,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x03da,0x1335,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x13b9,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x03da,0x1335,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x13b9,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x039a,0x03da,0x1335,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x039a,0x8cb4,0x9cf3,0x039a,0xb551,0x5417,0x8495,0x9cf3,0x039a,0xb551,0x6457,0x0316,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b36,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0399,0x5c37,0xad32,0x2bd9,0x03da,0x0b36,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x13b9,0x0399,0x039a,0x039a,0x039a,0x03da,0x1335,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x13d9,0x0399,0x0358,0x0359,0x03b9,0x13d9,0x0399,0x0358,0x0359,0x0358,0x03b9,0x0399,0x0379,0x0bb9,0x0359,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b36,0x01ed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x6c35,0x7c74,0x7c74,0x8494,0x7c74,0x8494,0x7c74,0x7c74,0x8494,0x7c74,0x3bd7,0x03da,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x6435,0x8494,0x8494,0x8494,0x8494,0x7c74,0x7c74,0x7c74,0x7c74,0x7c74,0x3bd7,0x03da,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x6435,0x8494,0x8494,0x8494,0x8494,0x8494,0x8494,0x8494,0x8494,0x7c74,0x3bd7,0x03da,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x6435,0x8494,0x8494,0x8494,0x8494,0x8494,0x8494,0x8494,0x8494,0x7c74,0x3bd7,0x03da,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x6c35,0x7c74,0x7c74,0x8494,0x7c74,0x8494,0x7c74,0x7c74,0x8494,0x7c74,0x3bd7,0x03da,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0x9cf2,0xd58c,0x7c74,0xddca,0x5c16,0x94d2,0xd58c,0x7c74,0xddca,0x7455,0x03ba,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0399,0x0399,0x0399,0x0398,0x13da,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0359,0x8494,0xfe60,0x33d7,0x0379,0x13da,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0x5c16,0x8493,0x8494,0x8494,0x43d7,0x03da,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0378,0x5479,0x855b,0x7d1a,0x0b98,0x0358,0x5479,0x853b,0x853a,0x855b,0x33f9,0x5479,0x6cda,0x13b8,0x7d1a,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddab,0xfe80,0xfe40,0xfe23,0xfe40,0xfe22,0xfe40,0xfe40,0xfe23,0xfe60,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddaa,0xfe60,0xfe23,0xfe23,0xfe23,0xfe40,0xfe60,0xfe40,0xfe40,0xfe60,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddaa,0xfe60,0xfe23,0xfe23,0xfe23,0xfe23,0xfe23,0xfe23,0xfe22,0xfe60,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddaa,0xfe60,0xfe23,0xfe23,0xfe23,0xfe23,0xfe23,0xfe23,0xfe22,0xfe60,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddab,0xfe80,0xfe40,0xfe23,0xfe40,0xfe22,0xfe40,0xfe40,0xfe23,0xfe60,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x8c93,0xfe40,0x4bf7,0x0398,0x0379,0x8c93,0xfe40,0x4bf7,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x2bb8,0x43f7,0x3bd7,0x43d7,0x23b8,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x0398,0x8cb3,0xfe23,0x5c16,0x0b98,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xad11,0xfe60,0xfe23,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x02f7,0xb63c,0xffff,0xf7bf,0x5c79,0x02f7,0xb63c,0xffff,0xffff,0xffff,0x649a,0xb63c,0xe77e,0x23d8,0xffff,0x855b,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xd5ac,0xfe80,0xddab,0x33d7,0xfe40,0x7455,0xb530,0xe5e9,0x33d8,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xc54e,0x0b98,0x3bd7,0x23b8,0xddab,0xfe60,0xfe40,0xfe40,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xc54e,0x0b98,0x3bd7,0x3bd7,0x3bd7,0x3bd7,0x33d7,0x5c16,0xfe22,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xc54e,0x0b98,0x3bd7,0x3bd7,0x3bd7,0x3bd7,0x33d7,0x5c16,0xfe22,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xd5ac,0xfe80,0xddab,0x33d7,0xfe40,0x7455,0xb530,0xe5e9,0x33d8,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xad11,0xfe60,0xfe40,0xfe40,0x6436,0x9cf2,0xfe60,0xfe40,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xad11,0xfe60,0xfe23,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xad11,0xfe60,0xfe40,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1bb8,0x23b8,0x23b8,0x23b8,0x13b8,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0317,0xbe5c,0xe75e,0x4439,0xf7bf,0x64ba,0xae3c,0xe75e,0x0378,0x3c19,0x0338,0xbe5c,0xdf3e,0x0378,0xffff,0x853a,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5ca,0xc54e,0x8494,0xddca,0x6c35,0xcd6d,0xad11,0x8494,0xe5e9,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xb52f,0x033a,0x0399,0x0359,0xd5ac,0xfe60,0xfe41,0xfe40,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xb52f,0x033a,0x0399,0x0398,0x0398,0x0399,0x0379,0x33d7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xb52f,0x033a,0x0398,0x0399,0x0399,0x0399,0x0379,0x33d7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5ca,0xc54e,0x8494,0xddca,0x6c35,0xcd6d,0xad11,0x8494,0xe5e9,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x33d7,0xad11,0xfe60,0x7c74,0x1bb8,0x2bb8,0xad11,0xfe60,0x7c74,0x2bb8,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0x5c16,0x8493,0x8494,0x8494,0x43d7,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0x4bf7,0xb530,0xfe22,0x94b3,0x3bd7,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0x9cd2,0xede8,0xddca,0xe5e9,0x6c55,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0317,0xbe7c,0xdf3e,0x1398,0xffff,0x6cda,0xa5fc,0xffff,0xd6fe,0x2bd8,0x02d7,0xb63c,0xffff,0xdf1e,0xffff,0x7d1a,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddaa,0xe5c9,0xa4f1,0xad10,0xad10,0xad10,0xad10,0xad11,0xb530,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xb530,0x031a,0x0379,0x033a,0xddab,0xfe80,0xfe60,0xfe60,0xfe60,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xb530,0x031a,0x0379,0x0359,0x0398,0x1398,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xbd2f,0x0359,0x0b98,0x1398,0x0379,0x0359,0x0359,0x1bb8,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddaa,0xe5c9,0xad11,0xbd2f,0xad10,0xb52f,0xb530,0xad10,0xbd4e,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x7475,0xb530,0xad10,0xb530,0x43f7,0x6c55,0xb530,0xad10,0xb530,0x5416,0x0399,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x0359,0x0379,0x0359,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x033a,0x7c74,0xfe40,0x23b8,0x0379,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x7c74,0xc54e,0xbd2f,0xbd4f,0x5c16,0x0399,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0317,0xbe7c,0xe73e,0x23d8,0xffff,0x6cda,0xadfc,0xffdf,0xa5db,0x0378,0x02b7,0xb65c,0xffff,0xffff,0xffff,0x853a,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddab,0xfe21,0xc54e,0x7455,0xddca,0x8c93,0xad10,0xcd6d,0x7455,0xfe22,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddca,0xd58c,0x6c55,0x7c74,0x7455,0xc54e,0xddab,0xd5ac,0xddab,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddca,0xd58c,0x6c55,0x7c74,0x7c74,0x3bd7,0x0398,0x0398,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xbd2f,0x0359,0x0b98,0x0398,0x6c35,0x7c74,0x7475,0x8c93,0xfe21,0x8474,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xddab,0xfe40,0xb530,0x0379,0xddca,0x4bf7,0x94b3,0xc56e,0x0379,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xa4f1,0xc56e,0x0379,0xddca,0x6436,0x9cd2,0xc56e,0x0379,0xddca,0x7455,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x6c55,0xd58c,0x33d7,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0379,0x0359,0x0359,0x0359,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0317,0xbe7d,0xe75e,0x23d8,0xffff,0x6cda,0xae1c,0xef9f,0x649a,0x853b,0x23b8,0x8d5b,0xef9f,0xffff,0xe73e,0x64ba,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xb510,0x6c55,0xf624,0x33d7,0xddca,0xad10,0x6c35,0xfe40,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xd5ac,0xfe60,0xfe60,0xfe40,0xfe60,0x7475,0x033a,0x0359,0x23b8,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xd5ac,0xfe60,0xfe60,0xfe40,0xfe60,0x7c74,0x0379,0x0398,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xbd2f,0x0359,0x0b98,0x0379,0xddab,0xfe80,0xfe40,0xfe40,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0xe5c9,0xb530,0x033a,0x0b98,0x0379,0x0398,0x0399,0x0359,0x43d7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0399,0x0379,0x0b98,0x0379,0x0398,0x0399,0x0379,0x0b98,0x0379,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0379,0x0398,0x1398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0318,0xb63c,0xd71e,0x23b8,0xf7bf,0x6cba,0x9dbb,0xffff,0xffff,0xffff,0x7d1a,0x0297,0x74fa,0xf7bf,0x23b8,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x1398,0x0358,0x0338,0x0358,0x0358,0x0358,0x0338,0x0378,0x13b8,0x0b98,0x0379,0xd5ab,0xfe60,0xcd8c,0x33d7,0xf624,0x7455,0xad10,0xddca,0x33d7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x1398,0x0358,0x0338,0x0358,0x0358,0x0358,0x0338,0x0378,0x13b8,0x0b98,0x0379,0xd5ab,0xfe60,0xfe40,0xfe40,0xfe40,0x7c74,0x0379,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0358,0x0358,0x0358,0x0358,0x0358,0x0338,0x0398,0x13b8,0x0b98,0x0b98,0x0379,0xd5ab,0xfe60,0xfe40,0xfe40,0xfe40,0x7c74,0x0379,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0358,0x0358,0x0358,0x0358,0x0358,0x0358,0x0358,0x0338,0x0358,0x0b98,0x0379,0xe5c9,0xbd2f,0x0359,0x0b98,0x0379,0xd5ab,0xfe60,0xfe40,0xfe40,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x13b8,0x0378,0x0338,0x0358,0x0358,0x0338,0x0378,0x13b8,0x0b98,0x0379,0xe5c9,0xbd2f,0x0359,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0x3bd7,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0358,0x0398,0x13b8,0x0b98,0x0b98,0x0b98,0x13b8,0x0378,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0358,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0358,0x0398,0x13b8,0x0b98,0x0b98,0x1398,0x0358,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0358,0x0398,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0398,0x2bd8,0x33f9,0x1398,0x3c19,0x1bb8,0x2bd8,0x4419,0x3c19,0x4419,0x23b8,0x0398,0x23b8,0x3c19,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x02b7,0xbe7c,0xef9f,0xe75e,0xe75e,0xe75e,0xef9f,0x959b,0x0297,0x13b8,0x0379,0xe5ca,0xc56e,0x8474,0xcd8c,0x6c55,0xc54e,0xa4f1,0x8494,0xddab,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x02b7,0xbe7c,0xef9f,0xe75e,0xe75e,0xe75e,0xef9f,0x9dbb,0x0338,0x0b98,0x0379,0xd5ab,0xfe60,0xfe41,0xfe40,0xfe60,0x6c55,0x031a,0x033a,0x0b98,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x33f9,0xcedd,0xe75e,0xe75e,0xe75e,0xe75e,0xef7e,0x5c79,0x02f7,0x13b8,0x0b98,0x0379,0xd5ab,0xfe60,0xfe41,0xfe40,0xfe60,0x6c55,0x031a,0x033a,0x0b98,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x33f9,0xcedd,0xe75e,0xe75e,0xe75e,0xe75e,0xe75e,0xe75e,0xef9f,0xc69d,0x0358,0x0379,0xe5c9,0xb530,0x02fa,0x0359,0x031a,0xd58c,0xfe60,0xfe41,0xfe40,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x13b8,0x0297,0x959b,0xef9f,0xe75e,0xe75e,0xef9f,0x959b,0x0297,0x13b8,0x0379,0xe5c9,0xb530,0x02fa,0x0359,0x0359,0x0359,0x0359,0x033a,0x0b98,0xfe23,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x33f9,0xd6fd,0x6cda,0x0358,0x0b98,0x0b98,0x0b98,0x0338,0x9dbb,0xc69d,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0358,0xc69d,0x9dbb,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x33f9,0xd6fd,0x6cda,0x0358,0x1398,0x0398,0x02b7,0xc6bd,0xa5fc,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x33f9,0xd6fd,0x6cda,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x13b8,0x0338,0x0338,0x0398,0x0b98,0x0378,0x0318,0x0358,0x0358,0x02d7,0x02d7,0x0378,0x1bb8,0x0378,0x02d7,0x0317,0x02f7,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x2bd8,0xa5fc,0xbe5c,0xbe7c,0xbe7c,0xbe5c,0xbe7c,0xbe7c,0xbe7c,0x959b,0x0378,0x0379,0xe5c9,0xe5c9,0xc56e,0xfe80,0xb510,0xfe41,0xe5c9,0xc54e,0xfe80,0xfe80,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x2bd9,0xb63c,0xb63c,0xae1c,0xae1c,0xae1c,0xae1c,0xb65c,0x74fa,0x0358,0x0b98,0x0379,0xddca,0xfe80,0xfe60,0xfe60,0xfe60,0xd58c,0xb530,0xb52f,0xc54e,0xfe60,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0xd71e,0xb63c,0xbe5c,0xbe7c,0xbe5c,0xc69d,0x74fa,0x02f7,0x1398,0x0379,0xddca,0xfe80,0xfe60,0xfe60,0xfe60,0xd58c,0xb530,0xb52f,0xc54e,0xfe60,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0xcedd,0xa5fc,0xae1c,0xae1c,0xae1c,0xb65c,0xc69d,0x9dbb,0x0378,0x0379,0xe5c9,0xede7,0xb510,0xbd2f,0xb530,0xf605,0xfe60,0xfe60,0xfe60,0xfe80,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x02f7,0x9dbb,0xc69d,0xbe5c,0xbe5c,0xbe5c,0xbe5c,0xc69d,0x9dbb,0x0378,0x0379,0xe5c9,0xede7,0xb510,0xbd2f,0xbd2f,0xbd2f,0xbd2f,0xb52f,0xc54e,0xfe60,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x7d1a,0x02b7,0x0338,0x0338,0x0338,0x0277,0xbe7c,0xef9f,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0xef9f,0xc69d,0x02f7,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x7d1a,0x02b7,0x0318,0x0398,0xb63c,0xc6bd,0x7d3a,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x855b,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0378,0x9dbb,0x7d3a,0x0358,0x0b98,0x0378,0x9dbb,0x74fa,0x4439,0xb63c,0xbe7d,0x4c39,0x02f7,0x5479,0xb63c,0xbe5c,0xc69d,0x7d3a,0x0358,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x74fa,0x0237,0x02d7,0x02d7,0x02d7,0x01f6,0xbe5c,0xf79f,0x0338,0x0379,0xb530,0xe5c9,0xe5ca,0xd5ab,0xe5c9,0xddab,0xddaa,0xe5ca,0xd5ac,0xddab,0x6c35,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3bf9,0xdf3e,0x9dbb,0x649a,0x6cda,0x6cda,0x6cda,0x74fa,0x4439,0x0358,0x0b98,0x0379,0xb530,0xddca,0xd5ab,0xd5ab,0xd5ac,0xddca,0xe5c9,0xe5c9,0xe5c9,0xddaa,0x6435,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x74fa,0x0277,0x0317,0x0317,0x02b7,0xc69d,0xc69d,0x5c79,0x0398,0x0379,0xb530,0xddca,0xd5ab,0xd5ab,0xd5ac,0xddca,0xe5c9,0xe5c9,0xe5c9,0xddaa,0x6435,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffdf,0xa5fc,0x5c99,0x6cda,0x6cda,0x74da,0x0398,0x02d7,0x0338,0x13b8,0x0379,0xb530,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xddab,0xd5ac,0xd5ab,0xd5ab,0xddab,0x6c35,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x6cda,0xdf1e,0x9dbb,0x0277,0x0317,0x02d7,0x0237,0x9dbb,0xcebd,0x0358,0x0379,0xb530,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xe5c9,0xddaa,0x6435,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffdf,0xb63c,0x74fa,0x853a,0x853a,0x853a,0x74fa,0xd6fd,0xe73e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0378,0x0398,0x1398,0x0b98,0x0b98,0x0358,0xe75e,0xbe5c,0x0317,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffdf,0xb63c,0x74fa,0x7d3a,0x8d7b,0xe75e,0x5c99,0x02f7,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0338,0xef9f,0xc69d,0x02f7,0x0b98,0x0338,0xef9f,0xb65c,0x6cda,0xffff,0xef9f,0xa5db,0x2bd8,0x7d1a,0xffff,0xe75e,0xef9f,0x9dbb,0x0338,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x8d7b,0x23b8,0x3c19,0x3c19,0x3c19,0x0b98,0xc69d,0xe75e,0x0358,0x0b98,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x02f7,0xd6fd,0xffff,0xffff,0xffff,0xffff,0xffff,0xb63c,0x0378,0x0398,0x1398,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0b98,0x0b98,0x1398,0x02b7,0xbe5c,0xef9f,0x0338,0x0b98,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0x7d1a,0x0338,0x0b98,0x0b98,0x1398,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x7d1a,0x02f7,0x1398,0x13b8,0x3c19,0x4419,0x33f9,0x1bb8,0x0b98,0x1398,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0379,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd71e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x13b8,0x3c19,0x23b8,0x0398,0x0b98,0x0b98,0x0358,0xe75e,0xbe7c,0x0317,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0xffff,0xffff,0xffff,0xf7bf,0x4c39,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0358,0xe75e,0xbe7c,0x0317,0x0b98,0x0358,0xe75e,0xae1c,0x6cda,0xffff,0x0378,0xe75e,0xb63c,0x6cda,0xffff,0x4c39,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd71e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x2bd8,0x4419,0x3c19,0x3c19,0x3c19,0x13b8,0xbe5c,0xdf1e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0b98,0x0b98,0x1398,0x02b7,0xbe5c,0xef9f,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x8d7b,0x23b8,0x3c19,0x3c19,0x4419,0x23b8,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x7d1a,0x02f7,0x0378,0x3c19,0xf7bf,0xffff,0xffff,0xcedd,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x8d7b,0x23b8,0x3c19,0x3c19,0x3c19,0x0b98,0xc69d,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffdf,0x74fa,0x02f7,0x13b8,0x0b98,0x0358,0xe75e,0xbe5c,0x0317,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x8d7b,0x23b8,0x33f9,0x5c79,0xffdf,0x74fa,0x02f7,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0358,0xe75e,0xbe5c,0x0317,0x0b98,0x0358,0xe75e,0xae1c,0x6cda,0xffff,0x23d8,0xe75e,0xae1c,0x64ba,0xffff,0xffff,0x7d1a,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffdf,0xb63c,0x74fa,0x853a,0x853a,0x853a,0x74fa,0xd6fd,0xe73e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3bf9,0xe75e,0x5c99,0x0257,0x02d7,0x02d7,0x02d7,0x01f6,0xbe7c,0xf7bf,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x74fa,0x0277,0x0317,0x0317,0x02b7,0xc69d,0xc69d,0x5c79,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x7d1a,0x02f7,0x0378,0x0378,0x0378,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x6cda,0xdf1e,0x9dbb,0x0257,0x0338,0x64ba,0x5479,0xd71e,0xef9f,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x7d1a,0x02f7,0x0378,0x0378,0x0378,0x02d7,0xb65c,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x74fa,0xdf3e,0x9dbb,0x0277,0x0317,0x0297,0xef9f,0xc69d,0x02f7,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x7d1a,0x02f7,0x0378,0x0b98,0x74fa,0xdf3e,0x9dbb,0x0297,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x74fa,0x0277,0x0317,0x0317,0x0317,0x0317,0x02f7,0x0338,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0358,0xe75e,0xb63c,0x0257,0x0317,0x0338,0xe75e,0xae1c,0x6cda,0xffff,0x23d8,0xe73e,0xae1c,0x6cda,0xffff,0x853a,0x0378,0x0338,0x13b8,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x7d1a,0x02b7,0x0338,0x0338,0x0338,0x0277,0xbe7c,0xef9f,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x2bd8,0xb63c,0xbe7d,0xbe5c,0xbe5c,0xbe7c,0xbe5c,0xbe7c,0xbe5c,0x959b,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0xd6fe,0xb63c,0xbe5c,0xbe7c,0xbe5c,0xc69d,0x74fa,0x02f7,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x855b,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x02f7,0x9dbb,0xc69d,0xbe7c,0xbe5c,0xae3c,0xae1c,0xb63c,0x959b,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x855b,0x0338,0x0b98,0x0b98,0x0b98,0x02f7,0xc69d,0xef9f,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x02f7,0x9dbb,0xc69d,0xbe5c,0xbe5c,0xbe7c,0xbe5c,0x74fa,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x855b,0x0338,0x1398,0x0398,0x02f7,0x9dbb,0xc6bd,0x9dbb,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0xd6fe,0xb63c,0xbe7c,0xbe7c,0xbe7c,0xbe7c,0xc69d,0x9dbb,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0338,0xe75e,0xef9f,0xb65c,0xb63c,0x0398,0xef7e,0xb63c,0x74da,0xffff,0x23d8,0xe77e,0xb63c,0x6cda,0xffff,0xb65c,0xbe7d,0x853a,0x0358,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b15,0x0bd9,0x0378,0x33f9,0xd6fd,0x6cda,0x0358,0x0b98,0x0b98,0x0b98,0x0338,0x9dbb,0xc69d,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x1398,0x0398,0x02b7,0xbe7c,0xef9f,0xe75e,0xe75e,0xe75e,0xef9f,0x959b,0x0297,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0378,0x33f9,0xcedd,0xe75e,0xe75e,0xe75e,0xe75e,0xef7f,0x5c79,0x02f7,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0378,0x33f9,0xd6fd,0x6cda,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x13b8,0x0297,0x959b,0xef9f,0xe75e,0xe75e,0xef9f,0x959b,0x0297,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0378,0x33f9,0xd6fd,0x6cda,0x0358,0x0b98,0x0b98,0x0b98,0x0338,0x9dbb,0xc69d,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x13b8,0x0297,0x959b,0xef9f,0xe75e,0xef9f,0x5c79,0x02f7,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0378,0x33f9,0xd6fd,0x6cda,0x0358,0x0b98,0x0b98,0x13b8,0x0297,0x9dbb,0xcedd,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0378,0x33f9,0xcedd,0xe75e,0xe75e,0xe75e,0xe75e,0xe75e,0xe75e,0xef9f,0xc69d,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0358,0xb63c,0xe75e,0xef7e,0xdf1e,0x23b8,0xbe7d,0x959b,0x5c79,0xd6fd,0x23b8,0xbe7d,0x959b,0x5479,0xdf3e,0xe75e,0xef9f,0x9dbb,0x0338,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0af3,0x0bb8,0x13b8,0x0398,0x0358,0x0398,0x13b8,0x0b98,0x0b98,0x0b98,0x13b8,0x0378,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x1398,0x0358,0x0358,0x0358,0x0358,0x0358,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x13b8,0x0398,0x0358,0x0358,0x0358,0x0358,0x0358,0x0358,0x0398,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x13b8,0x0398,0x0358,0x0398,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x13b8,0x0378,0x0338,0x0358,0x0358,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x13b8,0x0398,0x0358,0x0398,0x13b8,0x0b98,0x0b98,0x0b98,0x13b8,0x0378,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x13b8,0x0378,0x0338,0x0358,0x0358,0x0398,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x13b8,0x0398,0x0358,0x0398,0x13b8,0x0b98,0x0b98,0x0b98,0x13b8,0x0378,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x13b8,0x0398,0x0358,0x0358,0x0358,0x0358,0x0358,0x0358,0x0358,0x0358,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x13b8,0x0358,0x0358,0x0358,0x0358,0x0b98,0x0358,0x0378,0x0398,0x0358,0x0b98,0x0358,0x0378,0x0398,0x0358,0x0358,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0841,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0841,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0020,0x0841,0x0000,0x0000,0x0000,0x0020,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0001,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x630c,0xe71c,0x0000,0x0000,0x9cf3,0xbdf7,0x0000,0x0000,0x0000,0x9492,0xe73c,0xe73c,0xef5d,0x738e,0x0000,0x630c,0xe71c,0x0000,0x0000,0x9492,0xe73c,0xdedb,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x630c,0xe71c,0x0000,0x0000,0x9cf3,0xbdf7,0x0000,0x0000,0x1082,0x0000,0x5acb,0xef5d,0xef5d,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x5aeb,0xe71c,0x31a6,0x0000,0x0000,0x630c,0xe71c,0x0000,0x0000,0x0000,0x5acb,0xef5d,0xef5d,0x5acb,0x9492,0xbdf7,0x18c3,0xd69a,0x5acb,0x8430,0xe73c,0xdedb,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xe73c,0xdedb,0x0000,0x0000,0x9492,0xe73c,0xe73c,0xef5d,0x5acb,0x9492,0xef5d,0xd6ba,0xef5d,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3186,0xce79,0xef7d,0x9492,0x0000,0x31a6,0xce79,0xe71c,0xef7d,0xbdf7,0x18c3,0xd69a,0x5acb,0x9492,0xbdf7,0x2104,0xdedb,0xdefb,0xe73c,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0a0e,0x0b56,0x0b15,0x0000,0x0000,0x0a0e,0x0b56,0x0b15,0x0000,0x0000,0x0a0e,0x0b36,0x0b36,0x0b56,0x018a,0x0000,0x0149,0x0b35,0x0000,0x0000,0x0a2f,0x0ab2,0x0062,0x0af4,0x018a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xbdd7,0xbdd7,0xbdf7,0x31a6,0xbdd7,0xef5d,0x0000,0x0000,0x0000,0xbdd7,0xffff,0xad55,0xbdf7,0x4a49,0x6b6d,0xb5b6,0xad75,0xb596,0x2965,0xb5b6,0xffff,0xad55,0xbdf7,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xbdd7,0xbdd7,0xbdf7,0x31a6,0xbdd7,0xef7d,0x0000,0x0000,0x0000,0x7bef,0xbdf7,0xad75,0xbdf7,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xbdd7,0xb596,0x0000,0x0000,0x73ae,0xbdd7,0xbdd7,0xb596,0x4208,0x73ae,0xbdf7,0xad75,0xbdf7,0x31a6,0xbdd7,0xe73c,0x2104,0xffff,0x6b6d,0xad75,0xffff,0xad55,0xbdf7,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xffff,0xad55,0xbdf7,0x31a6,0xb596,0xffff,0xad55,0xbdf7,0x4a49,0x6b6d,0xdedb,0xffff,0xc638,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0xd6ba,0xb596,0x8c51,0x3186,0xffff,0xce79,0xb596,0x94b2,0x31a6,0xffff,0x630c,0xb596,0xf79e,0x0000,0xad75,0xffff,0xef7d,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0ab2,0x0b98,0x0a70,0x0ab2,0x00c5,0x0a91,0x0b98,0x0a70,0x0ab2,0x00c5,0x0a91,0x0b98,0x0a70,0x0ab2,0x0107,0x018a,0x0a91,0x0a70,0x0a91,0x00a4,0x0ab2,0x0b36,0x0000,0x0bd9,0x01ed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xe73c,0x0000,0xdedb,0x5acb,0xb596,0xe73c,0x0000,0x0000,0x0000,0xb5b6,0xef7d,0x5acb,0x0000,0x0000,0xc618,0xf79e,0x738e,0xffff,0x738e,0xad55,0xef5d,0x6b6d,0xdefb,0x738e,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xe73c,0x0000,0xdedb,0x5acb,0xb596,0xe73c,0x0000,0x0000,0x0000,0xa514,0xd6ba,0x5acb,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xef5d,0x0000,0x73ae,0x0000,0xc618,0xe73c,0x0000,0xffff,0x73ae,0x94b2,0xd6ba,0x5acb,0x0000,0x0000,0xbdd7,0xe71c,0x2104,0xffdf,0x6b4d,0xad55,0xef5d,0x6b6d,0xdefb,0x738e,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb5b6,0xef5d,0x6b6d,0xdefb,0x52aa,0xad75,0xef7d,0x5acb,0x0000,0x0000,0x0000,0x738e,0xffdf,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x528a,0xad75,0xef7d,0x18e3,0xffdf,0xad55,0x1082,0x0000,0x31a6,0xce79,0x94b2,0xb596,0xb5b6,0x0000,0x0000,0xe71c,0xb596,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0a91,0x0b56,0x018a,0x0b35,0x0128,0x0a70,0x0b56,0x018a,0x0b35,0x0128,0x0a70,0x0b56,0x0148,0x0000,0x0000,0x0ab2,0x0b77,0x018a,0x0bb9,0x018a,0x0a70,0x0b57,0x01cc,0x0af4,0x016a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0x0000,0x18e3,0x0000,0xbdd7,0xe71c,0x0000,0x0000,0x0000,0xad75,0xffff,0xf79e,0x39c7,0x0000,0xad75,0xffff,0xffff,0xffff,0x632c,0xa514,0xffff,0xf79e,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0x0000,0x18e3,0x0000,0xbdd7,0xe71c,0x0000,0x0000,0x0861,0x0000,0x73ae,0xffdf,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe71c,0x2104,0xffff,0x6b6d,0xad75,0xe71c,0x18e3,0xffff,0x8410,0x0000,0x73ae,0xffdf,0x5acb,0x0000,0xbdd7,0xdf1c,0x18e3,0xffdf,0x6b4d,0xa514,0xffff,0xf79e,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xffff,0xf79e,0x4228,0x0000,0xad75,0xffff,0xf79e,0x39c7,0x0000,0x0000,0x8410,0xffff,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x6b4d,0xad75,0xe71c,0x18e3,0xf7be,0xffff,0xad55,0x0000,0x0000,0x0000,0xe71c,0xbdd7,0x0000,0x0000,0x0000,0xe73c,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0a70,0x0bda,0x0b77,0x00e6,0x0000,0x0a70,0x0bda,0x0b77,0x00e6,0x0000,0x0a70,0x0bda,0x0b77,0x00c5,0x0000,0x0a70,0x0bd9,0x0b98,0x0bb9,0x0169,0x0a4f,0x0bda,0x0b77,0x00e6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdf7,0xe73c,0x0000,0xf7be,0x6b4d,0xad75,0xe71c,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0x0000,0x0000,0x0000,0xbdd7,0xe71c,0x4228,0xffff,0x6b4d,0xad75,0xe71c,0x4228,0xf79e,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdf7,0xe73c,0x0000,0xf7be,0x6b4d,0xad75,0xe71c,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0xffdf,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdf7,0xe73c,0x0000,0xffff,0x6b6d,0xb596,0xe73c,0x0000,0xffff,0x8430,0x0000,0x0000,0x4228,0xffdf,0x6b4d,0xad75,0xdefb,0x0000,0xffdf,0x6b4d,0xad75,0xe71c,0x2965,0xffdf,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe71c,0x4228,0xf79e,0x632c,0xad75,0xe73c,0x0000,0x0000,0x0000,0x0000,0x8410,0xffff,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xffff,0x6b4d,0xad75,0xe71c,0x2104,0xffdf,0x8430,0x0000,0x0000,0x39c7,0xf79e,0x73ae,0xad75,0xdedb,0x0000,0x0000,0xe73c,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0a91,0x0b35,0x00a4,0x0b98,0x016a,0x0a70,0x0b36,0x00e6,0x0b77,0x0169,0x0a70,0x0b36,0x0000,0x0000,0x0000,0x0a91,0x0b35,0x0106,0x0b98,0x018a,0x0a70,0x0b36,0x00e6,0x0b77,0x01ab,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0xa534,0xe71c,0x8c71,0x0000,0xb5b6,0xffff,0xe71c,0xef5d,0x528a,0xad75,0xffff,0xdefb,0xef5d,0x528a,0xbdd7,0xef5d,0x0841,0xffff,0x738e,0xb5b6,0xef5d,0x0861,0xffff,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0xa534,0xe71c,0x8c71,0x0000,0xb5b6,0xffff,0xe71c,0xef5d,0x5acb,0x9492,0xef7d,0xdedb,0x8c71,0x39c7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0xa534,0xe71c,0x8c51,0x2945,0x4208,0xa534,0xe71c,0x8c51,0x0000,0x9cd3,0xef7d,0xdedb,0x8c71,0x0000,0xb5b6,0xffff,0xe73c,0xffff,0x6b4d,0xad75,0xffff,0xdedb,0x8c71,0x39c7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xef5d,0x0861,0xffff,0x738e,0xad75,0xffff,0xdefb,0xef5d,0x6b6d,0x0000,0x8430,0xffff,0x4208,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4208,0xffff,0x738e,0xb5b6,0xef5d,0x2104,0xffff,0xf79e,0xe73c,0xbdd7,0x2965,0xffff,0x6b4d,0xb5b6,0xf79e,0x0000,0x0000,0xef7d,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0a91,0x0bda,0x0b14,0x0a0d,0x0000,0x0ab2,0x0b56,0x0021,0x0bd9,0x018b,0x0a70,0x0bd9,0x0b35,0x0b56,0x0127,0x0a91,0x0b56,0x0000,0x0bb9,0x018a,0x0a91,0x0b56,0x0021,0x0bd9,0x01ed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0882,0x0000,0x4a27,0xb5b5,0x0000,0x0000,0x738d,0xbdb6,0xbdb6,0xbdf6,0x4a27,0x6b2b,0xbdb6,0xbdb6,0xbdf6,0x4a27,0x738d,0x9cb1,0x1000,0xad54,0x4a07,0x738d,0x9cb1,0x1000,0xad54,0x5a89,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x4a27,0xb5b5,0x0000,0x0000,0x738d,0xbdb6,0xbdb6,0xbdf6,0x4a06,0x738d,0xc617,0xb575,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0882,0x0000,0x4a27,0xb5b5,0x0000,0x0000,0x0000,0x4a27,0xb5b5,0x0000,0x0000,0x7bce,0xc617,0xb575,0x0000,0x0000,0x738d,0xbdb6,0xbdb6,0xb595,0x41e6,0x6b4c,0xbdd6,0xb575,0x0000,0x0000,0x0800,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bce,0x9cb1,0x1000,0xad54,0x4a07,0x6b4c,0xbdb6,0xbdb6,0xbdf6,0x5aa9,0x0000,0x5a89,0xad54,0x28e0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x28e0,0xad54,0x4a07,0x738d,0x9cb1,0x1000,0xa513,0xbdb6,0xc5f7,0x9cb2,0x1000,0xad54,0x4a07,0x738d,0x9cd2,0x0000,0x0000,0x9cd2,0x7bce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x018a,0x0a70,0x0a4f,0x0000,0x0000,0x018a,0x01ed,0x0000,0x0a2f,0x00a4,0x0148,0x0a70,0x0a70,0x0a91,0x00a4,0x0169,0x01ed,0x0000,0x0a2f,0x00a4,0x0169,0x01ed,0x0000,0x0a2f,0x00e6,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0927,0x016b,0x0008,0x01ab,0x11ec,0x00ea,0x0007,0x0008,0x0007,0x016b,0x010a,0x0007,0x0008,0x0007,0x016b,0x00ea,0x0008,0x01ab,0x0008,0x016b,0x00ea,0x0009,0x01ab,0x0008,0x016b,0x0927,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x11cc,0x014a,0x0008,0x01ab,0x11ec,0x00ea,0x0007,0x0008,0x0007,0x016b,0x010a,0x0007,0x0008,0x01ab,0x09cb,0x01ac,0x018c,0x018c,0x01ab,0x09cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0927,0x016b,0x0008,0x01ab,0x09cc,0x11cc,0x014a,0x0008,0x01ab,0x11ec,0x00ea,0x0007,0x0008,0x01ab,0x11ec,0x00ea,0x0007,0x0008,0x0007,0x016b,0x010a,0x0007,0x0008,0x016c,0x01cc,0x0927,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x11cc,0x00c9,0x0009,0x01ab,0x0008,0x016b,0x010a,0x0007,0x0008,0x0007,0x014a,0x19ec,0x014b,0x0008,0x01ab,0x09cb,0x01ac,0x018c,0x018c,0x01ab,0x09cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x09cc,0x01ab,0x0008,0x016b,0x00ea,0x0009,0x01ab,0x0008,0x0007,0x0007,0x0069,0x01ab,0x0008,0x016b,0x00ea,0x0008,0x09cc,0x09cc,0x0008,0x00c9,0x11cc,0x01ab,0x018c,0x01cc,0x0927,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x09cb,0x01ac,0x018c,0x09cb,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x0107,0x01cc,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01ab,0x01cc,0x0107,0x0000,0x0000,0x0000,0x0000,0x00e6,0x016a,0x0169,0x01ab,0x01cc,0x018a,0x016a,0x01ab,0x0169,0x01ab,0x018a,0x0169,0x0169,0x0169,0x01ab,0x018a,0x016a,0x01ab,0x0169,0x09ab,0x018b,0x014a,0x018c,0x0169,0x09ab,0x0127,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x03b9,0x2bd8,0x43f8,0x3bf8,0x13b9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x13b9,0x3bf8,0x23fa,0x0292,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x03b9,0x23d9,0x3bf8,0x13b9,0x03b9,0x2bd8,0x43f8,0x3bf8,0x13b9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x13b9,0x3bf8,0x23fa,0x0292,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x03b9,0x2bd8,0x3bf8,0x03b9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0ab1,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x03b9,0x2bd8,0x43f8,0x3bf8,0x13b9,0x0bda,0x0ab2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0379,0x0398,0x13b8,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0379,0x0398,0x13b8,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xad11,0xfe60,0xf607,0x23b8,0x0379,0x13b8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x3bd7,0xf606,0x7c74,0x0379,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0359,0x7475,0xf624,0x23b8,0x033a,0xa4f1,0xfe40,0xf606,0x23b8,0x0379,0x13b8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x23b8,0xf624,0x8494,0x0379,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xb52f,0xddca,0x035a,0x0398,0x13b8,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb8,0x0af3,0x0000,0x0000,0x0af3,0x0bb8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x033a,0xa4f1,0xfe60,0xf607,0x23b8,0x0379,0x13b8,0x0af3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x7455,0xe5ca,0x3bd7,0x0398,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x7455,0xe5ca,0x3bd7,0x0398,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0x5c16,0x7c74,0x7475,0xe5c9,0x7455,0x039a,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x1398,0xfe60,0x8c93,0x039a,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x9cd2,0xcd6d,0x8494,0xd5ab,0x5416,0xb510,0xede7,0x6c55,0xe5c9,0x7455,0x039a,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0359,0x5c36,0xe5c9,0x8cb3,0x3bd7,0x03b9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0x4bf7,0xad11,0xddca,0x0398,0x0379,0x13d9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bd9,0x0b15,0x0000,0x0000,0x0b15,0x0bd9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x033a,0xb52f,0xb510,0x6436,0x8cb3,0xe5c9,0x7455,0x039a,0x0b15,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x5c16,0xad11,0x2bb8,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x5c16,0xad11,0x2bb8,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0359,0x43d7,0xb530,0xbd4f,0x5c16,0x0399,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x5416,0xb530,0xb530,0x5416,0x0399,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xc54e,0xe5c9,0x0379,0xfe40,0x7455,0xa4f1,0xf624,0xad11,0xb530,0x5416,0x0399,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x7c74,0xc54e,0xa4f1,0x0399,0x0379,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0359,0x43d7,0xb530,0xbd4f,0x5c16,0x0399,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0379,0x0398,0x1398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x2bb8,0xad10,0xfe22,0xede8,0x7c74,0x0379,0xb530,0x5c36,0x0399,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0398,0x0399,0x0398,0x0398,0x0398,0x0b98,0x0398,0x0398,0x0398,0x0398,0x0b98,0x0398,0x0399,0x0399,0x0398,0x0b98,0x0398,0x0399,0x0399,0x0398,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x3bd7,0x6c55,0x1bb8,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0399,0x2bb8,0x6c55,0x1bb8,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x7455,0xddab,0x0398,0x0379,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0359,0x8494,0xfe60,0x1398,0x0379,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xbd4f,0xe5ca,0x0b98,0xfe41,0x6c55,0xa4f1,0xfe40,0xddab,0x7455,0x2bb8,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xa4f1,0xd5ac,0x5c16,0x0398,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0399,0x23b8,0x7c74,0xe5c9,0x7455,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x3bd7,0x8494,0x23b8,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x33d7,0xd5ac,0xfe23,0xfe24,0xbd2f,0x0359,0x033a,0x0379,0x13d9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x1398,0x3bd7,0x43f7,0x2bb8,0x1bb8,0x3bd7,0x1398,0x33d7,0x2bb8,0x1bb8,0x3bd7,0x1398,0x33d7,0x43d7,0x43d7,0x3bd7,0x1398,0x33d7,0x43d7,0x3bd7,0x3bd7,0x13b8,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x8474,0xf624,0x3bd7,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x0398,0x8cb3,0xf624,0x3bd7,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x23b8,0x1398,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x0398,0x8cb3,0xf606,0x3bd7,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xb510,0xddab,0x43f7,0xf606,0x6436,0xad10,0xddca,0x0398,0xfe40,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0359,0x7455,0xfe24,0x5c16,0x0b98,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x0398,0x8cb3,0xf625,0x23b8,0x0379,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x0398,0x8cb3,0xf624,0x3bd7,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0xe5c9,0xbd4f,0x0379,0x43d7,0x43d7,0x23b8,0x03b9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x13b9,0x0379,0x23b8,0xf606,0xfe60,0x9cf2,0x6435,0xf606,0x23b8,0xd5ab,0xa4f1,0x6435,0xf606,0x23b8,0xcd6d,0xfe40,0xfe40,0xf606,0x23b8,0xcd8c,0xfe40,0xfe24,0xf606,0x3bd7,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x23b8,0x3bd7,0x13b8,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xb52f,0xe5c9,0x23b8,0x1398,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0379,0x8474,0xf624,0x3bd7,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xb52f,0xe5c9,0x23b8,0x1398,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x0398,0x8cb3,0xfe24,0x5c16,0x0359,0xbd4f,0xe5e9,0x23b8,0xfe40,0x8494,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x0398,0x5c16,0xfe24,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xb52f,0xe5c9,0x23b8,0x1398,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0359,0xb52f,0xe5c9,0x23b8,0x1398,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x3bd7,0xee07,0xfe60,0xfe40,0xfe23,0xfe23,0xfe40,0x7c74,0x039a,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x039a,0x7455,0xe5c9,0x7475,0x7c74,0x43f7,0x7c74,0xfe22,0x0379,0xddca,0xb510,0x6c55,0xfe41,0x23b8,0xddca,0xcd8d,0x6436,0x7c74,0x13b8,0x5c16,0xd5ac,0xee07,0x7455,0x23b8,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0398,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0x5c36,0x7455,0x0379,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x43f7,0x8474,0x23b8,0x0398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x5c36,0x7455,0x0379,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x3bd7,0x8474,0x0b98,0x0379,0x5c16,0x6c55,0x13b8,0x7c74,0x43d7,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0b98,0x7c74,0x43f7,0x03b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0x5c36,0x7455,0x0379,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0399,0x5c36,0x7455,0x0379,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0398,0x23b8,0x7c74,0x7c74,0x7c74,0x8494,0x8494,0x8494,0x43d7,0x03b9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0399,0x5c16,0xbd4f,0xb530,0x23b8,0x02fa,0x8494,0xfe40,0xbd4f,0xfe24,0xa4f1,0x6c55,0xfe23,0x23b8,0xddab,0xede8,0x8494,0x0359,0x0b98,0x031a,0xb530,0xe5ca,0x033a,0x0398,0x1398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x13b8,0x0358,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x0379,0x1398,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x13b8,0x0378,0x0338,0x0338,0x0338,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0379,0x0398,0x1398,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x13b8,0x0358,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x0379,0x1398,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0379,0x0398,0x13b8,0x0379,0x0379,0x0b98,0x0379,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x13b8,0x0358,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0379,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x13b8,0x0358,0x0358,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x0379,0x1398,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0379,0x0379,0x1398,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x1398,0x0398,0x0379,0x0379,0x0379,0x0379,0x0379,0x0359,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x13d9,0x0379,0x0379,0xddab,0xad11,0x33d7,0x7475,0xfe40,0xe5c9,0xfe40,0xa4f1,0x6c55,0xfe23,0x23b8,0xd5ac,0xfe40,0xbd4f,0x0379,0x0b98,0x0359,0xbd2f,0xe5c9,0x0379,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x7d1a,0x853b,0x853a,0x853a,0x853a,0x853a,0x7d1a,0x853b,0x6cda,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x853a,0x3c19,0x0378,0x1398,0x0b98,0x0358,0x74fa,0x6499,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x1398,0x0358,0x5479,0x8d5b,0x853a,0x853a,0x8d5b,0x5479,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x7d1a,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0378,0x5c79,0x6cda,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x74fa,0x853a,0x853a,0x853a,0x853a,0x853a,0x8d5b,0x5479,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x74fa,0x8d5b,0x5479,0x0358,0x1398,0x0b98,0x0378,0x5c79,0x6cda,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x23b8,0x7d1a,0x33f9,0x0378,0x1398,0x0b98,0x1398,0x0358,0x5479,0x6cda,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x13b9,0x0398,0x0378,0x0378,0x0398,0x0398,0x0378,0x0378,0x0b98,0x0b98,0x1398,0x0398,0x0378,0x0b98,0x0b98,0x1398,0x0398,0x0378,0x0b98,0x1398,0x0398,0x0378,0x0378,0x0378,0x0398,0x13b9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x03b9,0x23b8,0x3bd7,0x0398,0xe5ca,0xad11,0x6c55,0xfe23,0x0398,0xddca,0xad10,0x6c55,0xfe23,0x23b8,0xe5ca,0xb530,0x033a,0x1398,0x0b98,0x0359,0xbd2f,0xe5c9,0x0379,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6fd,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffdf,0x8d7b,0x0378,0x0398,0x1398,0x23d8,0xe75e,0xb65c,0x0317,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0398,0x0378,0xb63c,0xffff,0xffff,0xffff,0xffff,0xb63c,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x855b,0x0338,0x0b98,0x0b98,0x0b98,0x02f7,0xbe7d,0xef7e,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb63c,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0xffff,0xb63c,0x0378,0x0398,0x0b98,0x02f7,0xbe7d,0xef7e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x959b,0x0378,0x0398,0x0b98,0x0398,0x0378,0xc6bd,0xef7e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x03b9,0x23b8,0x4419,0x4419,0x1bb8,0x2bd8,0x4419,0x3c19,0x13b8,0x0b98,0x0398,0x23b8,0x3c19,0x13b8,0x0b98,0x0398,0x23b8,0x3c19,0x13b8,0x0398,0x2bd8,0x4419,0x3c19,0x4419,0x23b8,0x03b9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x039a,0x7c74,0xfe40,0xfe40,0x8c93,0x0359,0x8494,0xfe40,0x23b8,0xe5e9,0xb530,0x6c55,0xfe40,0x23b8,0xe5e9,0xbd4f,0x0359,0x0b98,0x0b98,0x0359,0xbd4f,0xede8,0x0379,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x13b8,0x3c19,0x4419,0x3c19,0x4419,0x3c19,0x0378,0xef7e,0xc6bd,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x13b8,0x23d8,0xe75e,0xb63c,0x0277,0x23d8,0xf7df,0x8d7b,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x02f7,0xdf3e,0xbe7d,0x0b98,0x3c19,0x3c19,0x0b98,0xbe7d,0xe73e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0b98,0x0b98,0x0b98,0x0317,0xbe7c,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x855b,0x0358,0x23d8,0x23d8,0x23d8,0x0338,0xbe7c,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x7d1a,0xb65c,0xdf3e,0x02f7,0x0398,0x0317,0xbe7c,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0xffff,0xa5fc,0x02b7,0x0b98,0x02f7,0xd6fd,0xffff,0xd71e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x1314,0x0318,0x6cda,0xffff,0xffff,0x64ba,0x9dbb,0xffff,0xf7bf,0x23b8,0x0358,0x0317,0x74fa,0xffdf,0x23d8,0x0358,0x0317,0x74fa,0xffdf,0x23d8,0x02d7,0xa5fc,0xffff,0xffff,0xffff,0x7d1a,0x0359,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x03b9,0x43d7,0x8494,0x8494,0x33d7,0x0379,0x43d7,0x7c74,0x13b8,0x6c55,0x5416,0x33d7,0x7c74,0x13b8,0x6c55,0x5c16,0x0398,0x0b98,0x0b98,0x0398,0x5c16,0x6c55,0x0398,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0378,0x0378,0x0378,0x0338,0x0358,0xdf1e,0xa5fc,0x4439,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0358,0x649a,0xb63c,0xdf3e,0xd6fd,0x8d7b,0x33f9,0x0378,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x33f9,0xd6fd,0xa5fc,0x4c39,0x0358,0x0378,0x0378,0x0358,0x5c79,0x74fa,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x74fa,0x02d7,0x13b8,0x0b98,0x13b8,0x0277,0xbe7c,0xef9f,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7df,0xef9f,0xdf3e,0xe73e,0xe73e,0xe73e,0xe77e,0xb63c,0x4c39,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x74fa,0x2bd8,0xae1c,0xdf3e,0x0378,0x02b7,0xbe7c,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffdf,0xa5fc,0xbe7c,0xbe9d,0x0338,0xdf3e,0x9dbb,0xcedd,0xe73e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0274,0xa5fc,0xd6fe,0x64ba,0x853b,0x0398,0xb65c,0xef9f,0x6cda,0xe75e,0x649a,0x8d7b,0xc6bd,0x74da,0xd71e,0x5c79,0x8d7b,0xcedd,0x855b,0xe75e,0x5c79,0xb63c,0xef9f,0x649a,0x853b,0x4419,0x0399,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x13b9,0x0398,0x0359,0x0359,0x0398,0x13b8,0x0398,0x0379,0x0b98,0x0379,0x0379,0x0398,0x0379,0x0b98,0x0379,0x0379,0x13b8,0x0b98,0x0b98,0x13b8,0x0379,0x0379,0x1398,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x13b8,0x0338,0x4c39,0xbe9d,0xbe9d,0x4c39,0x0338,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x13b8,0x0217,0xae1c,0xffff,0xffff,0x0358,0x0338,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x74fa,0x0297,0x1bb8,0x0b98,0x0b98,0x1bb8,0x0338,0x02f7,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0398,0x2bd8,0xa5fc,0xc69d,0x74fa,0x02f7,0x0b98,0x02f7,0x9dbb,0xc69d,0x959b,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7df,0xd6fd,0xb65c,0xbe7c,0xbe7c,0xbe7c,0xbe7d,0xb63c,0x855b,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853b,0x02b7,0x4c39,0xbe9d,0xbe9d,0x1bb8,0xae1c,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x6cba,0x64ba,0xc69d,0xbe7c,0xbe9d,0x1bb8,0xae1c,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x13b8,0x0378,0x0338,0x0338,0x0378,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x02b4,0x855b,0xc69d,0xa5fc,0x0317,0x02b7,0xb65c,0xffdf,0xae1c,0xbe7d,0x3bf9,0xb63c,0xffff,0xb63c,0xffff,0x6cda,0xb65c,0xe77e,0x0318,0xae1c,0x3bf9,0xae1c,0xffdf,0xa5db,0x0378,0x0378,0x13d9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0378,0x0358,0x4439,0xa5fc,0xdf1e,0x0358,0x0338,0x0378,0x0378,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0358,0x649a,0xb63c,0xdf3e,0xd6fd,0x8d7b,0x33f9,0x0378,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x33f9,0xd6fd,0xa5fc,0x4c39,0x0358,0x0378,0x0378,0x0358,0x5c79,0x74fa,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x02b7,0xc69d,0xc6bd,0x5c99,0x0378,0x74fa,0xdf3e,0x9dbb,0x0297,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x6cda,0x0237,0x02d7,0x02d7,0x02d7,0x01f6,0xbe7c,0xf7bf,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0358,0x0378,0xdf3e,0x9dbb,0xcedd,0xe73e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853b,0x0277,0x649a,0xe75e,0x0378,0x02b7,0xbe7c,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x3c19,0x7d3a,0x7d3a,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x1314,0x02f8,0x5479,0xe75e,0x8d7b,0x0378,0xae1c,0xffff,0xdf1e,0x0378,0x02b7,0xb63c,0xffff,0xe75e,0xffff,0x64ba,0xb63c,0xe75e,0x0338,0x6cba,0x0378,0xae1c,0xffff,0xd6fe,0x2bd8,0x0378,0x13b9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x13b8,0x3c19,0x0398,0xc6bd,0xef7e,0x0378,0x3c19,0x4419,0x4419,0x33f9,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x13b8,0x23d8,0xe75e,0xb63c,0x0277,0x23d8,0xf7df,0x8d7b,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x1398,0x0398,0x02f7,0xdf3e,0xbe7d,0x0b98,0x3c19,0x3c19,0x0b98,0xbe7d,0xe73e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x1398,0x02b7,0xb63c,0xe75e,0x4c39,0xffdf,0x74fa,0x02f7,0x13b8,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x8d7b,0x1bb8,0x3c19,0x3c19,0x3c19,0x13b8,0xbe5c,0xdf1e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x1398,0x0398,0x02f7,0xd6fd,0xffff,0xd71e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffff,0x853a,0x0338,0x0398,0x0358,0x0398,0x0317,0xbe7c,0xe75e,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0x7d3a,0xffff,0xffff,0x7d3a,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x02f4,0x2bf9,0x33f9,0x4439,0xffdf,0x6cba,0xae3c,0xe75e,0x02f7,0x0398,0x0317,0xbe7c,0xdf3e,0x0378,0xffff,0x6cda,0xa5fc,0xdf1e,0x4c39,0xffdf,0x6cba,0xae1c,0xe75e,0x0378,0x3c19,0x23b8,0x03b9,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6fd,0x0358,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x3c19,0xffdf,0x8d7b,0x0378,0x0398,0x1398,0x23d8,0xe75e,0xb65c,0x0317,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0398,0x0378,0xb63c,0xffff,0xffff,0xffff,0xffff,0xb63c,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0398,0x0378,0x8d7b,0xffdf,0x5c79,0x0398,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb63c,0x0378,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x855b,0x0338,0x0b98,0x0b98,0x0398,0x0378,0xc6bd,0xef7e,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0378,0x4419,0xffff,0x855b,0x0338,0x0b98,0x0b98,0x0b98,0x02f7,0xbe7d,0xef7e,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0b14,0x0bb9,0x0b98,0x0b98,0x0b98,0x0b98,0x0338,0x7d3a,0xffff,0xffff,0x7d3a,0x0338,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bb9,0x0b14,0x0000,0x0000,0x0253,0xae3d,0xffff,0xf7bf,0x5c79,0x02f7,0xbe7d,0xef7e,0x0338,0x0b98,0x02f7,0xbe7d,0xe77e,0x23d8,0xffff,0x853b,0x0317,0x8d7b,0xffdf,0x5c79,0x02f7,0xb63c,0xffff,0xffff,0xffff,0x7d1a,0x0359,0x0b14,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0398,0x23b8,0x7d1a,0x853b,0x7d3a,0x7d1a,0x853a,0x853a,0x853a,0x855b,0x6cda,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0398,0x23b8,0x853a,0x3c19,0x0378,0x1398,0x0b98,0x0358,0x74fa,0x6499,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x1398,0x0358,0x5479,0x8d5b,0x853a,0x853a,0x8d5b,0x5479,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x1398,0x0378,0x3c19,0x853a,0x0b98,0x0398,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0398,0x23b8,0x74fa,0x853a,0x853a,0x853a,0x853a,0x853a,0x8d5b,0x5479,0x0358,0x1398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0398,0x23b8,0x7d1a,0x4419,0x0378,0x0b98,0x0b98,0x1398,0x0358,0x5479,0x6cda,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0398,0x23b8,0x7d1a,0x4419,0x0378,0x0b98,0x0b98,0x0b98,0x0378,0x5c79,0x6cda,0x0398,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0b35,0x0bda,0x0b98,0x0b98,0x0b98,0x0b98,0x0378,0x3c19,0x7d3a,0x7d3a,0x3c19,0x0378,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0b98,0x0bda,0x0b35,0x0000,0x0000,0x0315,0x5cbb,0x8d5b,0x7d1a,0x0b98,0x0358,0x5c79,0x6cda,0x0398,0x0b98,0x0378,0x5c79,0x6cda,0x13b8,0x7d1a,0x4419,0x0358,0x3c19,0x853a,0x0b98,0x0358,0x5479,0x853b,0x853a,0x855b,0x4419,0x03ba,0x0b35,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x13da,0x03b9,0x0359,0x0358,0x0359,0x0358,0x0358,0x0359,0x0359,0x0358,0x0379,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x13da,0x03b9,0x0359,0x0399,0x13d9,0x0bb9,0x0bb9,0x13d9,0x0379,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x13d9,0x0399,0x0358,0x0358,0x0359,0x0358,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x13d9,0x0399,0x0359,0x03b9,0x13b9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x13da,0x03b9,0x0359,0x0358,0x0359,0x0359,0x0359,0x0359,0x0358,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x13da,0x03b9,0x0359,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x13d9,0x0399,0x0379,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x13da,0x03b9,0x0359,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x13d9,0x0399,0x0379,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x01ed,0x0b35,0x0bda,0x0bb9,0x0bb9,0x0bb9,0x13d9,0x0399,0x0358,0x0358,0x0399,0x13d9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bb9,0x0bda,0x0b35,0x01ed,0x0000,0x0000,0x11ed,0x02f5,0x0359,0x0359,0x03b9,0x13d9,0x0399,0x0379,0x13d9,0x0bb9,0x13d9,0x0399,0x0379,0x0bb9,0x0359,0x0399,0x1bd9,0x0399,0x0359,0x03b9,0x13d9,0x0399,0x0358,0x0359,0x0358,0x03ba,0x1336,0x01ed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0021,0x0000,0x01ed,0x0b35,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b14,0x0b35,0x01ed,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000}; + diff --git a/MCUME_pico/pico81/logozx81kbd.h b/MCUME_pico/pico81/logozx81kbd.h new file mode 100644 index 0000000..e9b2deb --- /dev/null +++ b/MCUME_pico/pico81/logozx81kbd.h @@ -0,0 +1,174 @@ +const uint16_t PROGMEM logozx81kbd[] = { +0x0140,0x00ac,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020, +0x0000,0x9cf3,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0x9cf3,0x0000, +0x0000,0xc638,0xc618,0x8c71,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x8c71,0xc618,0xc638,0x0000, +0x0000,0xc638,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x3186,0x94b2,0x9492,0x9492,0x9492,0x94b2,0x94f3,0x94d3,0x94f3,0x94b2,0x94b2,0x94f3,0x94d3,0x9492,0x9492,0x94b2,0x94f3,0x94d3,0x94f3,0x9492,0x94b2,0x94f3,0x94d3,0x94d3,0x9cd3,0x4a49,0x0000,0x0861,0x0000,0x0000,0x738e,0x94b2,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x94d3,0x94d3,0x9492,0x9492,0x94d3,0x94f3,0x94b2,0x9492,0x9492,0x94d3,0x94f3,0x94b2,0x9492,0x8430,0x0000,0x0000,0x0861,0x0000,0x2104,0x9492,0x9492,0x9492,0x9492,0x94b2,0x94f3,0x94d3,0x94f3,0x94b2,0x94b2,0x94d3,0x9492,0x94d3,0x94b2,0x94b2,0x94f3,0x94d3,0x94f3,0x9492,0x94b2,0x94f3,0x94d3,0x9492,0x9cd3,0x52aa,0x0000,0x0841,0x0020,0x0000,0x6b4d,0x9cd3,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x94d3,0x94d3,0x94d3,0x94d3,0x9492,0x9492,0x94d3,0x94b2,0x9492,0x8c51,0x0000,0x0000,0x0861,0x0000,0x0841,0x8c71,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x94d3,0x94f3,0x94b2,0x9492,0x9492,0x9492,0x9492,0x9cd3,0x630c,0x0000,0x0841,0x0841,0x0000,0x630c,0x9cd3,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x94d3,0x94f3,0x94d3,0x94d3,0x94d3,0x94f3,0x94b2,0x9492,0x9492,0x8c71,0x0020,0x0000,0x0861,0x0000,0x0000,0x8c51,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x94d3,0x94b2,0x9492,0x9492,0x9492,0x9492,0x9cd3,0x6b4d,0x0000,0x0020,0x0841,0x0000,0x52aa,0x9cd3,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x94b2,0x94f3,0x94d3,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x2104,0x0000,0x0861,0x0000,0x0000,0x8430,0x9492,0x94b2,0x94d3,0x9492,0x9492,0x94d3,0x94f3,0x94d3,0x9492,0x9492,0x9492,0x94d3,0x94d3,0x9492,0x9492,0x94d3,0x94f3,0x94b2,0x9492,0x9492,0x94d3,0x9492,0x94f3,0x73cf,0x0000,0x0000,0x0861,0x0000,0x4a49,0x9cd3,0x94d3,0x94f3,0x94b2,0x9492,0x94b2,0x94d3,0x9492,0x94d3,0x94b2,0x9492,0x94f3,0x94d3,0x9492,0x9492,0x9492,0x9492,0x94d3,0x9492,0x9492,0x94b2,0x94d3,0x9492,0x94f3,0x31c7,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x31a6,0x9492,0xe73c,0xe71c,0xe71c,0xe73c,0xe6db,0xe5f7,0xe5f7,0xe5d7,0xe6ba,0xe6db,0xe5f7,0xe5f7,0xe71c,0xe75c,0xe69a,0xe5d7,0xe618,0xe5d7,0xe6fb,0xe69a,0xe5d7,0xe618,0xe5f7,0xef1c,0xa534,0x39e7,0x0000,0x0861,0x52aa,0xc638,0xef5d,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe75d,0xe659,0xe659,0xe75d,0xe71c,0xe638,0xe5d7,0xe69a,0xe75d,0xe71c,0xe618,0xe5d7,0xe69a,0xe75d,0xd6ba,0x6b6d,0x2124,0x0000,0x3186,0x8c51,0xe73c,0xe71c,0xe71c,0xe73c,0xe6db,0xe5d7,0xe618,0xe5d7,0xe6ba,0xe6db,0xe618,0xe71c,0xe638,0xe6ba,0xe6db,0xe5f7,0xe5f7,0xe5d7,0xe6db,0xe6ba,0xe5d7,0xe618,0xe71c,0xef7d,0xad75,0x4208,0x0000,0x0000,0x4a69,0xbdf7,0xef5d,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe638,0xe5f7,0xe5f7,0xe638,0xe71c,0xe75d,0xe639,0xe679,0xe75d,0xdefb,0x73ae,0x2945,0x0000,0x2965,0x8410,0xe71c,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xe73c,0xe71c,0xe5f7,0xe5d7,0xe6ba,0xe75d,0xe73c,0xe73c,0xe73c,0xef5d,0xb5b6,0x4228,0x0000,0x0000,0x4228,0xb5b6,0xef5d,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xe659,0xe5f7,0xe5f7,0xe5f7,0xe5f7,0xe5f7,0xe6ba,0xe73c,0xe73c,0xe71c,0x8410,0x2965,0x0000,0x2945,0x73ae,0xdefb,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xe73c,0xe638,0xe69a,0xe75d,0xe73c,0xe71c,0xe71c,0xef5d,0xbdf7,0x4a69,0x0000,0x0000,0x4208,0xad75,0xef5d,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xe73c,0xe73c,0xe73c,0xe75d,0xe69a,0xe5d7,0xe618,0xe71c,0xe73c,0xe73c,0xe71c,0xe71c,0xe73c,0x8c51,0x3186,0x0000,0x2124,0x6b6d,0xd6ba,0xe75d,0xe69a,0xe618,0xe73c,0xe73c,0xe659,0xe5d7,0xe659,0xe75d,0xe71c,0xe75d,0xe659,0xe659,0xe75d,0xe71c,0xe638,0xe5d7,0xe69a,0xe75d,0xe71c,0xe618,0xe6fb,0xeebb,0xc534,0x52cb,0x0861,0x0000,0x39e7,0xa534,0xef3c,0xe5f8,0xe5d7,0xe6db,0xe75d,0xe6db,0xe618,0xe71c,0xe638,0xe69a,0xe6db,0xe5f7,0xe5f7,0xe6fb,0xe73c,0xe73c,0xe6fb,0xe5f7,0xe71c,0xe73c,0xe69a,0xe638,0xe71c,0xe638,0x9430,0x31c7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xef5d,0xdedb,0xdedb,0xdedb,0xdf1c,0xd555,0xd000,0xd084,0xd000,0xdd96,0xd555,0xd000,0xd105,0xddf7,0xdf1c,0xd4f3,0xd000,0xd000,0xd000,0xde38,0xd4d3,0xd000,0xd000,0xd002,0xd618,0xe75d,0xad55,0x0000,0x18c3,0xd69a,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd36e,0xd36e,0xdedb,0xdeba,0xd146,0xd000,0xd431,0xdefb,0xde9a,0xd002,0xd000,0xd492,0xdedb,0xdedb,0xe71c,0x52aa,0x0000,0x8430,0xef5d,0xdedb,0xdedb,0xdedb,0xdefb,0xddd7,0xd000,0xd000,0xd000,0xd534,0xdd96,0xd002,0xdedb,0xd146,0xd534,0xd575,0xd000,0xd0a4,0xd000,0xddf7,0xd4f3,0xd000,0xd1a7,0xde38,0xdedb,0xe73c,0xb5b6,0x0000,0x0000,0xce59,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd2cb,0xd000,0xd000,0xd2cb,0xdedb,0xdeba,0xd2ec,0xd3cf,0xdedb,0xdedb,0xe73c,0x632c,0x0000,0x73ae,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde9a,0xde9a,0xddf7,0xd0e5,0xd000,0xd4f3,0xdeba,0xde79,0xde79,0xde79,0xdeba,0xe71c,0xbdf7,0x0000,0x0000,0xbdf7,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd2ab,0xd000,0xd0c4,0xd084,0xd084,0xd000,0xd4f4,0xdf1c,0xdedb,0xdedb,0xe73c,0x73ae,0x0000,0x632c,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xde79,0xde9a,0xd26a,0xd451,0xdeba,0xde79,0xdedb,0xdedb,0xdedb,0xe71c,0xce59,0x0000,0x0000,0xb5b6,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xde79,0xde79,0xde79,0xdeba,0xd492,0xd000,0xd187,0xde38,0xde79,0xde9a,0xdedb,0xdedb,0xdedb,0xef5d,0x8430,0x0000,0x52aa,0xe71c,0xdedb,0xdedb,0xd451,0xd2ab,0xdefb,0xdefb,0xd2ab,0xd000,0xd36e,0xdeba,0xdedb,0xdedb,0xd36e,0xd36e,0xdedb,0xdeba,0xd146,0xd000,0xd431,0xdefb,0xde9a,0xd000,0xddf8,0xd410,0xdaec,0xd6db,0x18c3,0x0000,0xad55,0xe77d,0xd5f7,0xd000,0xd000,0xd534,0xdf1c,0xddb6,0xd000,0xdeba,0xd209,0xd4b2,0xddd7,0xd000,0xd002,0xddb7,0xdedb,0xdedb,0xddb6,0xd0a4,0xddf7,0xdf1c,0xd451,0xd209,0xdeba,0xd000,0xe638,0x94f3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdf1c,0xd555,0xd105,0xdeba,0xdeba,0xdefb,0xd4f3,0xd1c7,0xde9a,0xd1a7,0xdd75,0xdf3c,0xdd76,0xd003,0xde59,0xdedb,0xdefb,0xd534,0xd105,0xde7a,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd229,0xd555,0xd555,0xd249,0xdedb,0xd125,0xdd76,0xd4d3,0xd2ec,0xdeba,0xd043,0xddd7,0xd451,0xd32d,0xdf1c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde59,0xd003,0xdd76,0xdf3c,0xd555,0xd126,0xdefb,0xd1e8,0xd555,0xd555,0xd1a7,0xdedb,0xde9a,0xdf1c,0xd472,0xd26a,0xde9a,0xd146,0xddb7,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd34d,0xd34d,0xdefb,0xdeba,0xd1c7,0xdd96,0xd4d3,0xd2ab,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdf3c,0xd472,0xd000,0xd1e8,0xde9a,0xdefb,0xd3ef,0xd000,0xd002,0xd002,0xd000,0xd596,0xdf3c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdf1c,0xd229,0xd430,0xdefb,0xde9a,0xdeba,0xd105,0xd4f3,0xdf3c,0xdefb,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdf3c,0xddf7,0xd000,0xd000,0xddf7,0xd492,0xd000,0xd209,0xdedb,0xdefb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd535,0xd000,0xd002,0xd002,0xd000,0xd451,0xdefb,0xde59,0xd166,0xd000,0xd4f3,0xdf3c,0xdefb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdf1c,0xd32d,0xd3f0,0xdefb,0xdefb,0xdefb,0xd249,0xd4d3,0xddb6,0xd146,0xdedb,0xd249,0xd555,0xd555,0xd249,0xdedb,0xd125,0xddb6,0xd4d3,0xd28b,0xdeba,0xd003,0xde38,0xd471,0xdb2c,0xce9a,0x18c3,0x0000,0xa534,0xe73c,0xddf8,0xd001,0xde79,0xd32d,0xd451,0xde18,0xd023,0xdeba,0xd28a,0xd4d3,0xddb6,0xd125,0xdeba,0xd1e8,0xd555,0xd575,0xd229,0xde9a,0xd1a7,0xddd7,0xd4d3,0xd28a,0xdeba,0xd023,0xe618,0x8cb2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdf1c,0xd575,0xd000,0xd209,0xde38,0xdf3c,0xd4f3,0xd1e8,0xdedb,0xd0e5,0xd555,0xdf5d,0xddb7,0xd003,0xde9a,0xdefb,0xdf1c,0xd555,0xd105,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd249,0xd105,0xd105,0xd26a,0xdedb,0xd125,0xddb7,0xd4d3,0xd26a,0xdeba,0xd023,0xde18,0xd451,0xd2cb,0xdf1c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde9a,0xd003,0xddb7,0xdf5d,0xd575,0xd000,0xd209,0xd000,0xdd75,0xdd75,0xd000,0xd26a,0xde79,0xdf3c,0xd472,0xd28a,0xdedb,0xd001,0xddb6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf3c,0xd38e,0xd38e,0xdf3c,0xdeba,0xd0a4,0xddb6,0xd4d3,0xd229,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde9a,0xd2ab,0xd125,0xd4b2,0xde79,0xde39,0xdedb,0xdefb,0xde79,0xde18,0xde38,0xde18,0xd003,0xd555,0xdf3c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xddf7,0xd1a7,0xd1a7,0xd555,0xdefb,0xdf3c,0xdedb,0xdf3c,0xdeba,0xd410,0xd0c4,0xd34d,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd410,0xd0c4,0xd36e,0xde59,0xddd7,0xdeba,0xde59,0xddf7,0xddd7,0xd229,0xd125,0xd555,0xdf3c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd4f3,0xd125,0xde38,0xde38,0xde18,0xde79,0xdefb,0xdedb,0xde38,0xde79,0xd471,0xd0e5,0xd2ec,0xdeba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdf1c,0xd2cb,0xd431,0xde59,0xd2ec,0xdebb,0xd30c,0xd000,0xd3ef,0xde79,0xdedb,0xd249,0xd105,0xd105,0xd26a,0xdedb,0xd1e8,0xd043,0xd431,0xde59,0xde9a,0xd125,0xd187,0xd001,0xdbae,0xce9a,0x18c3,0x0000,0xa534,0xe73c,0xde18,0xd000,0xd166,0xd534,0xdedb,0xddb7,0xd023,0xdeba,0xd28a,0xd4d3,0xddd7,0xd000,0xd209,0xd596,0xdefb,0xd4f3,0xd1a7,0xdedb,0xd0e5,0xddb6,0xd4d3,0xd28a,0xdeba,0xd043,0xe618,0x8cb2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdf1c,0xd555,0xd001,0xd4f3,0xdedb,0xdf5c,0xd4d3,0xd208,0xdf1c,0xd001,0xd534,0xdf7d,0xddf7,0xd023,0xdedb,0xdefb,0xdf1c,0xd555,0xd105,0xdeba,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd229,0xd36e,0xd36e,0xd249,0xdedb,0xd125,0xddb6,0xd4d3,0xd28a,0xdeba,0xd003,0xde59,0xd451,0xd26a,0xdf1c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde9a,0xd003,0xddb6,0xdf3c,0xd575,0xd000,0xd4b2,0xd023,0xd575,0xd555,0xd023,0xd514,0xdedb,0xdf3c,0xd471,0xd28a,0xdeba,0xd043,0xddb6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd36e,0xd36e,0xdf3c,0xdeba,0xd000,0xddd7,0xd4d3,0xd1a7,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xd4d3,0xd4b2,0xd451,0xd3ef,0xd492,0xdefb,0xdf5d,0xd575,0xd3cf,0xd410,0xd410,0xd000,0xd555,0xdf5d,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde59,0xd492,0xd4b2,0xd431,0xd38e,0xd514,0xdefb,0xd3cf,0xd3ef,0xd472,0xd492,0xd514,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd575,0xd472,0xd492,0xd4b3,0xdf1c,0xdf3c,0xdf5d,0xde79,0xd451,0xd4b2,0xd472,0xde18,0xdf1c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd4f3,0xd000,0xd410,0xd410,0xd3af,0xdd96,0xdf5d,0xdefb,0xd451,0xd3f0,0xd471,0xd492,0xd4f3,0xdeba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdf1c,0xd26a,0xd451,0xde38,0xd000,0xdeba,0xd2ec,0xd2cb,0xd4b3,0xd4d3,0xdedb,0xd229,0xd36e,0xd36e,0xd249,0xdedb,0xd1a7,0xd32d,0xddf7,0xdf3c,0xde7a,0xd0c4,0xd410,0xd2ab,0xdb6e,0xce9a,0x18c3,0x0000,0xa534,0xe73c,0xde18,0xd000,0xd451,0xd471,0xddf7,0xddd7,0xd063,0xdefb,0xd2ab,0xd4d3,0xddb7,0xd001,0xd4f4,0xd410,0xde38,0xd4f3,0xd146,0xdf1c,0xd001,0xdd96,0xd4d3,0xd2ab,0xdefb,0xd063,0xe618,0x8cb2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdf1c,0xd555,0xd000,0xd575,0xd514,0xde79,0xd514,0xd000,0xd534,0xd3ae,0xde18,0xde79,0xd410,0xd000,0xd4d3,0xde79,0xdf3c,0xd535,0xd003,0xdeba,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd125,0xd575,0xdd75,0xd166,0xdedb,0xd063,0xddb6,0xd4b3,0xd249,0xdeba,0xd001,0xd451,0xd451,0xd4b3,0xdefb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde79,0xd000,0xdd96,0xdf5d,0xd535,0xd0a4,0xdf1c,0xd1a7,0xd534,0xd555,0xd002,0xdd96,0xd514,0xdeba,0xd472,0xd249,0xdeba,0xd000,0xdd96,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd34d,0xd34d,0xdf1c,0xdeba,0xd410,0xd4b3,0xd471,0xd492,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdf5d,0xd555,0xd28a,0xd36e,0xd514,0xd555,0xd410,0xd2ec,0xd32d,0xd32d,0xd34d,0xddf7,0xdf3c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdf3c,0xd471,0xd2ab,0xd3f0,0xd514,0xd32d,0xd2ab,0xddd7,0xdf5d,0xdf1c,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdf5d,0xddd7,0xd000,0xd4d3,0xd534,0xd555,0xd3ae,0xd000,0xdefb,0xdf3c,0xdefb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xddd7,0xd34d,0xd32d,0xd32d,0xd2ec,0xd430,0xd555,0xd514,0xd34d,0xd28a,0xdd96,0xdf5d,0xdf1c,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdefb,0xd4b3,0xd431,0xd4d3,0xd3ef,0xdedb,0xd209,0xd514,0xddd7,0xd000,0xdedb,0xd166,0xdd76,0xdd75,0xd166,0xdedb,0xd003,0xdd96,0xdf3c,0xdedb,0xde79,0xd000,0xde59,0xd471,0xdaec,0xce9a,0x18c3,0x0000,0xa534,0xe73c,0xddf7,0xd000,0xdedb,0xd2ab,0xd3cf,0xde18,0xd000,0xd514,0xd0e5,0xd4d3,0xddb6,0xd000,0xdd76,0xd34d,0xddb7,0xddf7,0xd3af,0xd514,0xd3ae,0xde59,0xd4b3,0xd0e5,0xd514,0xd000,0xe618,0x8cb2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xd5b6,0xd166,0xd166,0xd001,0xdd96,0xddb7,0xd105,0xd1a7,0xde9a,0xdf5d,0xdcf3,0xd063,0xd249,0xd0e5,0xddf7,0xdf3c,0xdd96,0xd2ab,0xdeba,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd2ec,0xd596,0xdd96,0xd30c,0xdedb,0xd2cb,0xddf7,0xdd34,0xdb8e,0xdeba,0xd2cb,0xd000,0xdd34,0xdf5d,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde9a,0xd26a,0xddd7,0xdf3c,0xd596,0xd2ab,0xdedb,0xd30c,0xdd96,0xddd7,0xd166,0xd186,0xd023,0xddf7,0xdd35,0xd38e,0xdeba,0xd26a,0xddd7,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdc30,0xdc30,0xdf1c,0xdedb,0xdf5d,0xd38e,0xdc72,0xdf5d,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdf3c,0xdeba,0xd1c7,0xd000,0xdd96,0xdf7d,0xdf1c,0xdf1c,0xdf1c,0xdefb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdf5d,0xddb6,0xd209,0xdf1c,0xdf3c,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xddf7,0xd1c8,0xd187,0xd166,0xd166,0xd166,0xd32d,0xdeba,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdf1c,0xdf1c,0xdf1c,0xdf7d,0xdd34,0xd000,0xd249,0xdedb,0xdf3c,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdf5d,0xd4f3,0xd2ec,0xdf3c,0xdefb,0xd34d,0xd534,0xddd7,0xd2ab,0xdedb,0xd30c,0xdd96,0xdd96,0xd30c,0xdedb,0xd2ab,0xdd96,0xdefb,0xdedb,0xde9a,0xd26a,0xde38,0xd4b3,0xdbef,0xce9a,0x18c3,0x0000,0xa534,0xe73c,0xde18,0xd229,0xde9a,0xd3ef,0xd4b3,0xde38,0xd1a7,0xd166,0xd125,0xd575,0xddf8,0xd166,0xd125,0xde59,0xdf1c,0xdf1c,0xde59,0xd166,0xde9a,0xdf5c,0xd514,0xd125,0xd166,0xd1c7,0xe659,0x8cb2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x8430,0x39c7,0x4a69,0x4a69,0x4a69,0x39c7,0x3186,0x31a6,0x31c7,0x4228,0xc638,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xc638,0x4228,0x31c7,0x31a6,0x31a6,0x39e7,0x4a69,0x4a69,0x4a69,0x39c7,0x8430,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x9492,0x2965,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x3a08,0xbdf7,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce79,0x528a,0x31a6,0x31a6,0x31a6,0x3186,0x31a6,0x3186,0x31a6,0x2986,0x7bef,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xe71c,0x9cd3,0x31a6,0x4a69,0x4a69,0x4a8a,0x39e7,0x3186,0x3186,0x31a6,0x31a6,0xb5b6,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xd69a,0x5aeb,0x31a6,0x3186,0x31a6,0x31a6,0x31a6,0x31a6,0x3186,0x3186,0x738e,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xe71c,0xa534,0x31a6,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x31a6,0xad75,0xe73c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0x632c,0x3186,0x3186,0x31a6,0x31c7,0x4a49,0x4a69,0x4a69,0x4228,0x632c,0xd6ba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xe73c,0xc618,0x5aeb,0x73ae,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x8c51,0xad55,0xad55,0x94b2,0x0000,0xbdf7,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdefb,0xdefb,0x73ae,0x632c,0x6b4d,0x630c,0x7bef,0xe71c,0xdefb,0xdedb,0xdefb,0xbdf7,0x0000,0x94b2,0xad55,0xad55,0x8c51,0x0000,0x0000,0x0000,0x0000,0x6b6d,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xe73c,0xb596,0x5acb,0x6b4d,0x6b4d,0x5acb,0xb596,0xe73c,0xdedb,0xdedb,0xe71c,0x738e,0x4228,0xad75,0xa534,0xa534,0xa534,0xa534,0xa534,0x9cf3,0x0000,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xe73c,0xb596,0x8c51,0xdefb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x0000,0x9492,0xad55,0xa534,0xa534,0xa534,0xa534,0xad75,0x632c,0x4a69,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdefb,0xa534,0x6b4d,0x632c,0x6b4d,0x6b4d,0x6b4d,0x5aeb,0x8c51,0xdefb,0xdedb,0xe71c,0x8c51,0x0000,0x0000,0x0000,0x0000,0x7bcf,0xad75,0xa534,0xa514,0x0000,0xad55,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xe73c,0x8430,0x630c,0x6b4d,0x632c,0x6b6d,0xce79,0xdedb,0xdedb,0xdedb,0xce79,0x0000,0x8430,0xad55,0xa534,0xa534,0xa534,0xa534,0xad75,0x738e,0x39e7,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0xa534,0x5acb,0x6b4d,0x6b4d,0x6b4d,0x632c,0x6b4d,0x8c71,0xdedb,0xdedb,0xe71c,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa514,0xe73c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xe73c,0x8c71,0x5aeb,0x6b4d,0x632c,0x632c,0xd69a,0xe71c,0xdedb,0xdedb,0xd6ba,0x2124,0x7bef,0xad55,0xa534,0x9cf3,0x0861,0x0000,0x0000,0x0000,0x39c7,0xd6ba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xe71c,0xce59,0x5aeb,0x6b4d,0x6b4d,0x5acb,0x9cd3,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xe73c,0x9cd3,0x5aeb,0x6b4d,0x6b4d,0x738e,0xce79,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdefb,0xbdd7,0x8c51,0x6b6d,0x0000,0xbdf7,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x0000,0x0000,0x0000,0xc618,0xef5d,0xe73c,0xd69a,0x0841,0xbdf7,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdefb,0xce59,0x9492,0x7bef,0x7bcf,0x7bcf,0x7bcf,0x7bef,0x9cf3,0xce79,0xdedb,0xdefb,0xbdf7,0x0841,0xd69a,0xe73c,0xef5d,0xc618,0x0000,0x0000,0x0000,0x0000,0x738e,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdefb,0xad75,0x8430,0x7bcf,0x7bcf,0x8410,0x8410,0x8c51,0xad75,0xdefb,0xdedb,0xe71c,0x738e,0x73ae,0xef5d,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xdedb,0x18e3,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0xb5b6,0x4a49,0x4a49,0xdefb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x0000,0xc638,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xef5d,0x94b2,0x4a69,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x738e,0x2104,0x8c51,0x8430,0x8430,0x8430,0x7bcf,0x94b2,0xdefb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0xad55,0xef5d,0xe71c,0xdefb,0x2965,0xad55,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xd69a,0xa514,0x8c51,0x8410,0x8430,0x8410,0x8430,0xd69a,0xdedb,0xdedb,0xdedb,0xd69a,0x10a2,0xbdf7,0xef5d,0xe71c,0xe71c,0xe71c,0xe71c,0xef5d,0xa534,0x39c7,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdefb,0xad55,0x738e,0x7bcf,0x7bcf,0x7bcf,0x8c51,0x4a69,0x2104,0xdedb,0xdedb,0xe71c,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa534,0xe73c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd6ba,0x9cf3,0x8430,0x8410,0x8430,0x8430,0x8410,0x8c71,0xc618,0xdefb,0xdedb,0xd6ba,0x2945,0xb596,0xef5d,0xe73c,0xdedb,0x3186,0x0000,0x0000,0x0000,0x4228,0xd6ba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdefb,0xc618,0x9492,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x8430,0xad55,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0xad55,0x8430,0x73ae,0x7bef,0x7bef,0x0000,0x7bcf,0xc638,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xe71c,0x8c71,0x8410,0xdedb,0x0841,0xbdf7,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x0020,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdefb,0xbdd7,0x4a69,0xdefb,0xe73c,0xe73c,0xef5d,0xd69a,0x0000,0xbdf7,0xdefb,0xdefb,0xc618,0x0020,0xce59,0xdefb,0xdefb,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x738e,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdefb,0x73ae,0x94b2,0xef7d,0xe71c,0xc638,0xce79,0x8430,0x7bef,0xdefb,0xdedb,0xe71c,0x738e,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd69a,0x18c3,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xc638,0x73ae,0x0000,0x630c,0xdefb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x0020,0xc618,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x9492,0x4a69,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x738e,0x630c,0xce79,0xc638,0xc638,0xc618,0xd6ba,0xe73c,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x2945,0xad55,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xc638,0x0000,0xad75,0xce59,0xc638,0xc638,0xc638,0xdedb,0xdedb,0xdedb,0xdedb,0xd69a,0x18c3,0xbdd7,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xe73c,0x9cf3,0x39e7,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xd6ba,0xdefb,0xe71c,0xe71c,0xe71c,0xe73c,0xdedb,0x9cd3,0x738e,0xdedb,0xdedb,0xe71c,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa534,0xe73c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x52aa,0xad55,0xce59,0xc638,0xc638,0xc638,0x5aeb,0xad55,0xe71c,0xdedb,0xd6ba,0x2945,0xad55,0xe71c,0xdedb,0xd69a,0x3186,0x0000,0x0000,0x0000,0x4228,0xd6ba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0x8430,0x39e7,0xef5d,0xe73c,0xe73c,0xef7d,0xb596,0x0000,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x0000,0xad75,0xef7d,0xdefb,0xbdf7,0x6b4d,0x0000,0x9492,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xce59,0x0020,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x2945,0x2945,0x0841,0xbdd7,0xdefb,0xdefb,0xce59,0x0020,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdefb,0xd69a,0xd69a,0xd69a,0xd6ba,0xc618,0x2945,0xc618,0xdefb,0xdefb,0xc618,0x0020,0xce59,0xdefb,0xdefb,0xbdd7,0x0841,0x2945,0x2945,0x0000,0x738e,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdefb,0xdedb,0xdedb,0xd69a,0x31a6,0x0000,0x9cd3,0xe71c,0xdedb,0xdedb,0xe71c,0x738e,0x738e,0xe71c,0xdedb,0xdedb,0xd6ba,0xd69a,0xd6ba,0xce59,0x10a2,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xd69a,0x2965,0xbdd7,0x9cf3,0x4a69,0xdefb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x0841,0xbdd7,0xdedb,0xd69a,0xd6ba,0xdedb,0xdedb,0xe71c,0x9492,0x4a69,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x8430,0x0000,0x0861,0x1082,0x1082,0x0000,0x8c51,0xdefb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x2945,0xad55,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x18c3,0x0000,0x1082,0x1082,0x0000,0x2104,0xc618,0xdedb,0xdedb,0xdedb,0xd69a,0x18c3,0xb596,0xdedb,0xd69a,0xd69a,0xd69a,0xd69a,0xdedb,0x9cd3,0x39e7,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x6b6d,0x73ae,0xe73c,0xdedb,0xdedb,0xe71c,0x9cd3,0x0000,0x2945,0x2945,0x2945,0x2945,0x2945,0x2945,0x2945,0x0000,0xa534,0xe73c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdefb,0x632c,0x0000,0x1082,0x0861,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xd6ba,0x2945,0xad55,0xe71c,0xdedb,0xd69a,0x3186,0x0000,0x0000,0x0000,0x4228,0xd6ba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0x94b2,0x52aa,0xdedb,0xd69a,0xd69a,0xdedb,0xa534,0x2965,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x2945,0xad55,0xe73c,0xb596,0x2104,0xdedb,0x52aa,0x9492,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x0020,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x630c,0x7bcf,0xd6ba,0xce79,0xce79,0xd6ba,0xdedb,0xdefb,0xce59,0x0020,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdefb,0xd6ba,0x39e7,0x0861,0x18e3,0x0020,0x4a49,0xce59,0xdedb,0xdedb,0xdefb,0xc618,0x0020,0xce59,0xdefb,0xdedb,0xd6ba,0xce79,0xce79,0xd6ba,0x7bcf,0x630c,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xce79,0xd6ba,0x8410,0x738e,0xe71c,0xdedb,0xe71c,0x738e,0x738e,0xe71c,0xdedb,0xe71c,0x7bef,0x18e3,0x39c7,0x31a6,0x0000,0xbdd7,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xc618,0x39c7,0xc638,0xef5d,0x94b2,0x528a,0xe73c,0xe71c,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x2965,0x39c7,0x2124,0x632c,0xdedb,0xdedb,0xe71c,0x9492,0x4a69,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xd6ba,0xd69a,0xce79,0xce79,0xce79,0xd6ba,0x8c71,0x630c,0xdefb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x2945,0xad55,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x0841,0xb5b6,0xd69a,0xce79,0xce79,0xce59,0x4228,0xad75,0xe71c,0xdedb,0xd69a,0x2965,0x2124,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x39c7,0x0861,0x528a,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x4a49,0x94b2,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x9492,0x4a49,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0x39c7,0x9cf3,0xe73c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x4208,0xb575,0xd69a,0xce79,0xce79,0xce79,0x528a,0xa534,0xe71c,0xdedb,0xd6ba,0x2945,0xad55,0xe71c,0xdedb,0xd69a,0x3186,0x0000,0x0000,0x0000,0x4228,0xd6ba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xad75,0x0000,0x18e3,0x18e3,0x2104,0x0000,0x4208,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x2945,0xbdf7,0xa514,0x4a69,0xd6ba,0xdefb,0x528a,0x9492,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xe73c,0xd69a,0x0841,0xce59,0xef5d,0xdefb,0xdedb,0xdedb,0xe71c,0x630c,0x8410,0xe73c,0xdefb,0xdefb,0xdedb,0xdedb,0xdefb,0xce59,0x0020,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdefb,0xc618,0x6b4d,0xbdd7,0xbdf7,0xbdf7,0xbdf7,0xc618,0xe73c,0xdedb,0xdedb,0xdefb,0xc618,0x0020,0xce59,0xdefb,0xdedb,0xdedb,0xdefb,0xdefb,0xe73c,0x8410,0x630c,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdefb,0x7bef,0x9cd3,0xef5d,0xe71c,0xe73c,0xf79e,0x7bef,0x4a49,0xe71c,0xdedb,0xe71c,0x738e,0x738e,0xe71c,0xdedb,0xe71c,0x6b6d,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xbdf7,0x0000,0x528a,0x5aeb,0x39c7,0x18e3,0x52aa,0x4a49,0xbdf7,0xdefb,0xdefb,0xce59,0x18c3,0x0000,0x0000,0x0000,0x4a69,0xdedb,0xdedb,0xe71c,0x9492,0x4a69,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x8c51,0x9492,0xef7d,0xe73c,0xe73c,0xf79e,0x9492,0x2965,0xdefb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x2945,0xad55,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xc638,0x0000,0xce59,0xef7d,0xe73c,0xe73c,0xe71c,0x0000,0xa534,0xe71c,0xdedb,0xd69a,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xce79,0x6b4d,0xa514,0xce79,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x9492,0x528a,0xe71c,0xdefb,0xdedb,0xdefb,0xdefb,0xdefb,0xdefb,0x39e7,0x9cf3,0xe73c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xce79,0x0000,0xbdf7,0xef7d,0xe73c,0xe73c,0xef5d,0x18c3,0x94b2,0xe71c,0xdedb,0xd6ba,0x2945,0xad55,0xe71c,0xdedb,0xd69a,0x3186,0x0000,0x0000,0x0000,0x4228,0xd6ba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdefb,0xd6ba,0xbdf7,0xbdf7,0xbdf7,0xc638,0x8c71,0x0000,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x18c3,0x31a6,0x94b2,0xce79,0xe73c,0xef5d,0x4208,0x8430,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdefb,0xb596,0x8410,0x7bcf,0x0000,0x73ae,0x8410,0xad55,0xdefb,0xdedb,0xe71c,0x5aeb,0x8430,0xef5d,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xd69a,0x0841,0xbdf7,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xe71c,0xb596,0x0000,0x8c51,0x9492,0x9492,0x9492,0x8c71,0x8430,0xce59,0xdefb,0xdefb,0xbdf7,0x0841,0xd69a,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xef5d,0x8430,0x5aeb,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdefb,0xa534,0x8410,0x8430,0x8430,0x8430,0x8430,0x8c51,0xad75,0xdefb,0xdedb,0xe71c,0x738e,0x73ae,0xef5d,0xe71c,0xef5d,0x73ae,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xce79,0x94b2,0x8c71,0x9492,0x52aa,0x18c3,0x8c71,0x8430,0xce59,0xdefb,0xdefb,0xce59,0x18c3,0x0000,0x0000,0x0000,0x52aa,0xe71c,0xe71c,0xef5d,0x94b2,0x4a69,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdefb,0xad75,0x8410,0x8430,0x8430,0x8430,0x8430,0x8c51,0xad55,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0xad55,0xef5d,0xe71c,0xdefb,0x2965,0xad55,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xd69a,0x94b2,0x8c51,0x8430,0x8430,0x8430,0x8430,0x8c71,0xc638,0xdefb,0xdedb,0xd69a,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdefb,0xc638,0x0000,0xc638,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x528a,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0x4208,0x9cf3,0xe73c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd6ba,0x9cf3,0x8c51,0x8430,0x8430,0x8430,0x8430,0x8c71,0xc618,0xdefb,0xdedb,0xd6ba,0x2945,0xb596,0xef5d,0xe71c,0xd6ba,0x3186,0x0000,0x0000,0x0000,0x4228,0xd6ba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x8c71,0x9492,0x9492,0x9492,0x8c71,0x9cf3,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0xa534,0x1082,0x4208,0x94b2,0x8430,0x8430,0x8c51,0xbdf7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xe73c,0xdedb,0xdedb,0xe71c,0x9cf3,0x4a49,0x5aeb,0x6b6d,0x5aeb,0x4a49,0x94b2,0xe71c,0xdedb,0xe71c,0x630c,0x5aeb,0xb5b6,0xad75,0xad75,0xad75,0xad75,0xb596,0xa514,0x0000,0xbdf7,0xef5d,0xad55,0x0000,0x18c3,0xce79,0xdefb,0xdefb,0xc618,0x632c,0x5aeb,0x5acb,0x5aeb,0x5acb,0x5acb,0x5acb,0xc638,0xdefb,0xdefb,0xbdf7,0x0000,0xa514,0xb596,0xad75,0xad75,0xad75,0xad75,0xb5b6,0x5aeb,0x630c,0xe71c,0xdefb,0x52aa,0x0000,0x8410,0xe73c,0xdedb,0xdedb,0xef5d,0xb596,0x4a49,0x5aeb,0x5aeb,0x4a49,0xb596,0xef5d,0xdedb,0xdedb,0xe71c,0x738e,0x4a69,0xb5b6,0xad75,0xb5b6,0x52aa,0x0000,0x0000,0x0000,0x0000,0xb5b6,0xef5d,0xb596,0x0000,0x0000,0xc638,0xdefb,0xdedb,0xdedb,0xe71c,0xe71c,0xef5d,0xad75,0x8430,0xe73c,0xe71c,0xdedb,0xdedb,0xdefb,0xce59,0x0000,0x0000,0x0000,0x0000,0x39e7,0xad75,0xad75,0xb5b6,0x6b6d,0x528a,0xdefb,0xe71c,0x632c,0x0000,0x73ae,0xe73c,0xdedb,0xdedb,0xe73c,0xbdd7,0x4a49,0x5aeb,0x5aeb,0x4a49,0xa534,0xef5d,0xdedb,0xdedb,0xe71c,0x8c51,0x0000,0x0000,0x0000,0x0000,0x8410,0xb5b6,0xad75,0xad55,0x0000,0xad55,0xef5d,0xbdf7,0x0000,0x0000,0xbdf7,0xe71c,0xdedb,0xdedb,0xe73c,0x7bef,0x528a,0x5aeb,0x5acb,0x630c,0xd6ba,0xdefb,0xdedb,0xdedb,0xd69a,0x2124,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a69,0xdedb,0xe73c,0x73ae,0x0000,0x632c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xce79,0x6b6d,0xc638,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x9492,0x2965,0xb596,0xad75,0xad75,0xad75,0xad75,0xad75,0xad75,0x10a2,0x9cf3,0xef5d,0xc638,0x0000,0x0000,0xb596,0xe71c,0xdedb,0xdedb,0xe73c,0x8430,0x4a69,0x5aeb,0x5acb,0x5acb,0xd69a,0xe71c,0xdedb,0xdedb,0xd6ba,0x2945,0x8430,0xb5b6,0xb596,0xa534,0x10a2,0x0000,0x0000,0x0000,0x39c7,0xd6ba,0xe73c,0x8410,0x0000,0x52aa,0xdefb,0xdedb,0xdedb,0xdefb,0xc618,0x528a,0x5acb,0x5aeb,0x4a69,0x9492,0xef5d,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce79,0x18c3,0x0000,0xa534,0xe73c,0xdedb,0xdedb,0xe73c,0x9cf3,0x5acb,0x5acb,0x5acb,0x528a,0xce59,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe73c,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8410,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xe71c,0x8410,0x18c3,0x2124,0x2945,0x2945,0x2945,0x2945,0x2945,0x2945,0x39c7,0xc638,0xdefb,0x9cd3,0x0000,0x18c3,0xbdf7,0xdedb,0xdedb,0xdedb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdefb,0xc638,0x39c7,0x2945,0x2945,0x2945,0x2945,0x2945,0x2945,0x2124,0x18c3,0x8410,0xdefb,0xce79,0x4a69,0x0000,0x73ae,0xd6ba,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x18c3,0x2124,0x2945,0x2124,0x39c7,0x4208,0x4208,0x4208,0x3186,0xbdf7,0xdefb,0xa514,0x0000,0x0000,0xb5b6,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x4228,0x39e7,0x4208,0x4208,0x39e7,0x2945,0x2945,0x2124,0x18e3,0x73ae,0xdefb,0xd69a,0x5aeb,0x0000,0x6b4d,0xd6ba,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x94b2,0x2104,0x4208,0x4208,0x4208,0x3186,0x2124,0x2945,0x2945,0x2124,0xb5b6,0xe71c,0xad75,0x0000,0x0000,0xad75,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xd69a,0x528a,0x39c7,0x4208,0x4208,0x4208,0x4208,0x4208,0x4208,0x3186,0x6b4d,0xdedb,0xd6ba,0x6b4d,0x0000,0x5aeb,0xd69a,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xa514,0x18c3,0x2124,0x2945,0x2945,0x2945,0x2945,0x2945,0x2945,0x18e3,0xad75,0xe71c,0xb5b6,0x0000,0x0000,0xa514,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0x5aeb,0x2124,0x2124,0x2945,0x2945,0x39e7,0x4208,0x4208,0x31a6,0x5aeb,0xd6ba,0xdedb,0x73ae,0x0000,0x4a69,0xce79,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xe71c,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xbdf7,0x18c3,0x0000,0x9cd3,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xe71c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe73c,0x8430,0x0000,0x0000,0x0000,0x0000,0xb596,0xe73c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0xdefb,0xce79,0x2945,0x0000,0x0000,0x0000,0x5aeb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe73c,0x9492,0x0000,0x0000,0x0000,0x0000,0xad55,0xe73c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0x39e7,0x0000,0x0000,0x0000,0x4a69,0xdedb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe73c,0x9cf3,0x0000,0x0000,0x0000,0x0000,0x9cf3,0xe73c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x4a69,0x0000,0x0000,0x0000,0x39e7,0xd69a,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad55,0x0000,0x0000,0x0000,0x0000,0x9492,0xe73c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x5aeb,0x0000,0x0000,0x0000,0x2945,0xce79,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xe73c,0xb596,0x0000,0x0000,0x0000,0x0000,0x8430,0xe73c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xe71c,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2104,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x3186,0x0000,0x0020,0x0000,0x0000,0x4228,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x5aeb,0x528a,0x0000,0x0000,0x0020,0x0000,0x18c3,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x5aeb,0x31a6,0x0000,0x0000,0x0000,0x0000,0x4208,0x5aeb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x5aeb,0x52aa,0x0000,0x0000,0x0020,0x0000,0x1082,0x52aa,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x5aeb,0x39c7,0x0000,0x0000,0x0000,0x0000,0x39e7,0x5aeb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x5acb,0x52aa,0x1082,0x0000,0x0020,0x0000,0x0000,0x52aa,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x5aeb,0x4208,0x0000,0x0000,0x0000,0x0000,0x31a6,0x5aeb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x5acb,0x5acb,0x18c3,0x0000,0x0020,0x0000,0x0000,0x528a,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x4228,0x0000,0x0000,0x0020,0x0000,0x3186,0x5aeb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x2104,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0861,0x0000,0x0000,0x0861,0x0000,0x0000,0x0020,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0841,0x0841,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0841,0x0841,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0861,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0020,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0861,0x0020,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0020,0x0861,0x0000,0x0000,0x0000,0x0841,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630c,0xa534,0x9cf3,0x0000,0x0000,0x73ae,0x8430,0x0000,0x0000,0x0861,0x0000,0x5aeb,0x9cd3,0x0000,0x0000,0x8430,0xa534,0x9cf3,0x9cf3,0x2124,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x94b2,0x4a49,0x630c,0x8c51,0x1082,0x9492,0xad75,0x630c,0x0000,0x3186,0x9cd3,0xad75,0x52aa,0x0000,0x4208,0x9cd3,0x3186,0x0000,0x0000,0x39e7,0xa514,0x0000,0x0000,0x73ae,0xad55,0x9cd3,0xa534,0x4208,0x0000,0x5acb,0xa534,0xa514,0x1082,0x0000,0x632c,0xa534,0xa534,0xad55,0x39e7,0x632c,0xa514,0x9cd3,0x9cf3,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xad75,0x7bcf,0x0000,0x1082,0x94b2,0x4a49,0x630c,0x8c51,0x1082,0x9492,0xad75,0x630c,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x528a,0xa514,0xa534,0x2945,0x0000,0x0000,0x2965,0xa534,0x10a2,0x0000,0x632c,0xa534,0x9cf3,0x0000,0x0000,0x6b6d,0xad55,0x9cd3,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8410,0xad55,0x8410,0x0000,0x0000,0x8c51,0xad55,0x7bcf,0x2965,0xa534,0x9cd3,0xa514,0xa534,0x8410,0x1082,0x9cd3,0x39e7,0x632c,0xad55,0x9cd3,0x0000,0x0000,0x73ae,0xad55,0x9492,0x0000,0x0000,0x0020,0x0000,0x4a69,0xad55,0x9cd3,0xad55,0x632c,0x4208,0xa514,0xa534,0xad75,0x630c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8430,0xa534,0x9cf3,0x9cf3,0x10a2,0x8410,0xad55,0x8410,0x0000,0x0000,0x8c51,0xad75,0x7bcf,0x0000,0x1082,0x94b2,0x4a49,0x630c,0x8c51,0x10a2,0x9cf3,0x9cf3,0xa534,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0x9cf3,0xad55,0x4a49,0x0000,0x0000,0x0000,0xa514,0x39e7,0x0000,0x52aa,0x94b2,0x0020,0x9492,0x52aa,0x528a,0xa514,0xa534,0xad55,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xad55,0x9492,0x0000,0x0000,0x7bef,0xad55,0x8c51,0x0000,0x0000,0x8c71,0xa514,0x9cf3,0x9cd3,0x0841,0x8430,0xad75,0x7bcf,0x0000,0x10a2,0x9cd3,0x9cf3,0xa514,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xe73c,0xad75,0x8410,0x0000,0xad55,0xc618,0x0000,0x0000,0x0000,0x4a69,0x9cd3,0xb5b6,0x738e,0x0000,0x9492,0xd6ba,0xdefb,0xb596,0x2945,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xdedb,0x6b6d,0x9492,0xce59,0x18c3,0xdedb,0xce79,0x9cd3,0x4a49,0x4208,0xe71c,0xc638,0x94b2,0x4a49,0x52aa,0xe71c,0x4a49,0x0000,0x4228,0x8c71,0xbdd7,0x7bef,0x0861,0x7bef,0xd69a,0xe71c,0xbdf7,0x4228,0x0000,0x8c51,0xe73c,0xb596,0x8430,0x1082,0x9492,0xe71c,0xb596,0xbdf7,0x39c7,0x9cd3,0xef7d,0xe71c,0xe73c,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce79,0xd69a,0x9cf3,0x632c,0x10a2,0xdedb,0x6b6d,0x9492,0xce59,0x18c3,0xdedb,0xce79,0x9cd3,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bcf,0xe73c,0xb5b6,0x8c51,0x39c7,0x31a6,0x8430,0xb5b6,0x8410,0x0000,0x9492,0xe73c,0xb5b6,0x7bef,0x0000,0xa514,0xe71c,0xad75,0x73ae,0x2945,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0xd6ba,0xa514,0x6b4d,0x0000,0xce79,0xd6ba,0x7bef,0x31a6,0xbdf7,0xe71c,0xc638,0xd69a,0xc618,0x18c3,0xdefb,0x5acb,0x9cd3,0xe71c,0xad55,0x7bef,0x0000,0xad75,0xe71c,0xad55,0x738e,0x2104,0x0000,0x0000,0x52aa,0xc618,0xe71c,0xce79,0x632c,0x6b6d,0xe73c,0xb5b6,0xc618,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xd6ba,0xdefb,0xb596,0x0000,0xc618,0xdedb,0xa534,0x630c,0x0000,0xce79,0xd69a,0x9cf3,0x632c,0x10a2,0xdedb,0x6b6d,0x9492,0xce59,0x0000,0xb596,0xdefb,0xd6ba,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xe73c,0xbdf7,0x9492,0x4a49,0x2124,0x7bef,0xbdd7,0x8c71,0x2945,0x7bcf,0xdedb,0x0000,0xd6ba,0x8410,0x7bcf,0xe73c,0xb5b6,0xc618,0x630c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xdefb,0xad55,0x73ae,0x0000,0xbdd7,0xdedb,0xa534,0x738e,0x0000,0x9cd3,0xdedb,0xdefb,0xad55,0x0000,0xce79,0xd6ba,0xa514,0x5aeb,0x1082,0xad55,0xdefb,0xdedb,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x31a6,0xce79,0x528a,0x9cf3,0xbdd7,0x0000,0x0000,0x0000,0xb5b6,0xad55,0x2965,0xe71c,0x4a49,0x0000,0x9492,0xc618,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xd69a,0x6b4d,0x8c51,0xc618,0x18c3,0xd6ba,0x4208,0x9cf3,0xbdf7,0x2945,0xdedb,0x528a,0xad55,0xa514,0x4208,0xdedb,0x4228,0x0000,0x9cf3,0xc638,0x0000,0xdefb,0x6b6d,0x0000,0x6b6d,0xd69a,0x0000,0x0000,0x0000,0x8c51,0xce79,0x3186,0xce59,0x630c,0x8c51,0xc638,0x1082,0x0000,0x0000,0x9cd3,0xe71c,0xdedb,0xdedb,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce59,0x8410,0x7bef,0xc618,0x0841,0xd69a,0x6b4d,0x8c51,0xc618,0x18c3,0xd6ba,0x4208,0x9cf3,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bcf,0xd69a,0x3186,0xc638,0x738e,0x8410,0xd69a,0x3186,0xdedb,0x6b6d,0x8c51,0xbdf7,0x0000,0xdefb,0x5acb,0x9cd3,0xb596,0x0841,0xe71c,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0x9492,0x6b6d,0xce59,0x0000,0xce59,0x9492,0x0000,0x0000,0x0000,0xd69a,0x5aeb,0x8430,0xc618,0x18c3,0xd6ba,0x52aa,0x9cd3,0xbdd7,0x4208,0xd69a,0x39e7,0xad55,0xa534,0x3186,0xe71c,0x4a49,0x0000,0x0841,0x0000,0x0020,0xd6ba,0x5aeb,0x0000,0x7bcf,0xd69a,0x39c7,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x9492,0xc618,0x0000,0x0000,0xc638,0x8410,0x630c,0xdedb,0x0841,0xce59,0x8410,0x7bef,0xc618,0x0841,0xd69a,0x6b4d,0x8c51,0xc638,0x0000,0x0000,0xc618,0x9492,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x52aa,0xdedb,0x4228,0xb596,0x94b2,0x5acb,0xdefb,0x0000,0xc638,0x9492,0x632c,0xd69a,0x4a49,0xbdf7,0x6b6d,0x7bef,0xce79,0x2124,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xad75,0x4a69,0xd69a,0x2945,0xb5b6,0xa514,0x5aeb,0xce79,0x3186,0x0000,0x9cf3,0xbdd7,0x0000,0x0000,0xce79,0x6b6d,0x73ae,0xd6ba,0x0000,0x0000,0xbdd7,0x9cf3,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe73c,0xd69a,0x31a6,0x0000,0xa534,0xbdd7,0x0000,0x0000,0x0000,0xb596,0xad55,0x4208,0xdedb,0x4228,0x0000,0x94b2,0xc638,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xd69a,0x6b4d,0x8c51,0xc618,0x18c3,0xd6ba,0x52aa,0x9cd3,0xb5b6,0x2945,0xd6ba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0x4228,0x0000,0x94b2,0xc618,0x18c3,0xd6ba,0x6b4d,0x0000,0x7bcf,0xd69a,0x18c3,0x0000,0x0000,0x8410,0xe71c,0xd6ba,0x4228,0x0000,0x8c71,0xe73c,0xd69a,0x3186,0x0000,0x9cd3,0xe71c,0xdedb,0xdedb,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xd69a,0x6b4d,0x8c51,0xc618,0x18c3,0xd6ba,0x52aa,0x9cd3,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x738e,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x630c,0x8c51,0xc618,0x18c3,0xd6ba,0x52aa,0x9cd3,0xb5b6,0x2965,0xdedb,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0xad75,0x0000,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xd69a,0x6b4d,0x8c51,0xc618,0x18c3,0xd6ba,0x52aa,0x9492,0xe73c,0xce59,0x18c3,0x0000,0xb596,0xad55,0x4208,0xdedb,0x4228,0x0000,0x0000,0x0000,0x3186,0xd6ba,0x6b4d,0x0000,0x738e,0xe71c,0xdedb,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000,0x0000,0xc638,0x8c51,0x6b4d,0xd69a,0x0841,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xd69a,0x6b4d,0x8c51,0xc638,0x0000,0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0xdedb,0xe71c,0x73ae,0x0000,0x6b4d,0xd6ba,0x18c3,0xc618,0x8c51,0x630c,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xd6ba,0x4208,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa534,0xe73c,0xc618,0x0000,0x0000,0xad75,0xe73c,0xbdd7,0x0000,0x0000,0x0000,0xa534,0xbdd7,0x0000,0x0000,0xce79,0x7bcf,0x7bcf,0xce79,0x0000,0x0000,0xbdd7,0xa534,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xce59,0x4228,0x0000,0x0000,0xa534,0xb5b6,0x0000,0x0000,0x0000,0xbdd7,0xad75,0x2945,0xe71c,0x4a49,0x0000,0x94b2,0xc638,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xd69a,0x5acb,0x8410,0xc618,0x18c3,0xd6ba,0x52aa,0x9cd3,0xb5b6,0x2965,0xdedb,0x7bcf,0x18e3,0x0000,0x5acb,0xdedb,0x2945,0x0000,0x9cf3,0xc638,0x0000,0xdefb,0x6b6d,0x0000,0x7bcf,0xd69a,0x18c3,0x0000,0x0000,0x8430,0xce79,0x52aa,0xbdf7,0x52aa,0x8c71,0xce59,0x2945,0x0000,0x0000,0xa514,0xbdf7,0x5aeb,0xdedb,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce59,0x9492,0x8410,0xb596,0x0861,0xd69a,0x5acb,0x8410,0xc618,0x18c3,0xd6ba,0x52aa,0x9cd3,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bcf,0xd6ba,0x52aa,0xbdd7,0x6b4d,0x7bcf,0xce79,0x52aa,0xd6ba,0x632c,0x8c51,0xc618,0x18c3,0xd6ba,0x52aa,0x9cf3,0xb596,0x0000,0xe71c,0x5aeb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0x9cf3,0x7bcf,0xbdd7,0x0000,0xce59,0x94b2,0x0000,0x0000,0x18c3,0xd69a,0x6b4d,0x8c71,0xbdf7,0x0000,0xd6ba,0x52aa,0x9cd3,0xc618,0x5acb,0xc618,0x31a6,0xad55,0xad55,0x4208,0xdedb,0x4228,0x0000,0x0841,0x0000,0x0000,0xd6ba,0x5acb,0x0000,0x7bcf,0xd6ba,0x5acb,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x8c71,0xc618,0x0000,0x0000,0xc638,0x8c51,0x6b4d,0xd69a,0x0841,0xce59,0x9cf3,0x2124,0x0000,0x18c3,0xd69a,0x5acb,0x8410,0xc638,0x0000,0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0xdedb,0x738e,0x18c3,0x0000,0x6b6d,0xdefb,0x0000,0xc638,0x9492,0x632c,0xd6ba,0x52aa,0xbdd7,0x6b4d,0x7bef,0xce79,0x31a6,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xbdd7,0x31a6,0x0000,0x0000,0xbdd7,0xad55,0x6b6d,0xbdf7,0x2965,0x0000,0x9cf3,0xbdd7,0x0000,0x0000,0xce79,0x7bcf,0x7bcf,0xce79,0x0000,0x0000,0xbdd7,0xa534,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9cf3,0xce59,0x0000,0x0000,0x0000,0xa534,0xdefb,0xad75,0xb5b6,0x39e7,0x528a,0x9cd3,0xad75,0x7bcf,0x2124,0x0000,0x9cf3,0xce79,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xd6ba,0xc618,0xce79,0xc618,0x18c3,0xdefb,0x5acb,0xa514,0xbdf7,0x2965,0xe71c,0x528a,0x0000,0x0000,0x5acb,0xe71c,0xc618,0x528a,0x39e7,0x9492,0xb596,0x8430,0x31a6,0x0000,0x7bef,0xdedb,0x18c3,0x0000,0x0000,0x8c71,0xd69a,0x0000,0xdefb,0x738e,0x8c51,0xe71c,0xad55,0xb5b6,0x31a6,0xa534,0xbdf7,0x18c3,0xe71c,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6ba,0x7bcf,0x7bef,0xdedb,0x0020,0xd6ba,0xc618,0xce79,0xc618,0x18c3,0xdefb,0x5acb,0xa514,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bef,0xdedb,0x0000,0xd6ba,0x8410,0x7bef,0xd69a,0x0000,0xdedb,0x6b6d,0x9492,0xce59,0x18c3,0xdefb,0x5acb,0x9cd3,0xe71c,0xad55,0x8410,0x2965,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce79,0x8c71,0x6b4d,0xdefb,0x0841,0xce79,0xce79,0x7bef,0x0000,0x18c3,0xdedb,0x6b6d,0x8c51,0xe71c,0xb596,0xe73c,0x52aa,0xa514,0xbdf7,0x18e3,0xe73c,0x4228,0xb596,0xb596,0x4228,0xe71c,0x4a49,0x0000,0x0000,0x528a,0xbdd7,0xe71c,0xc638,0x630c,0x738e,0xdedb,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xd69a,0xdefb,0xad55,0x0000,0xce59,0x9492,0x6b6d,0xdedb,0x0841,0xd69a,0x8c51,0x0000,0x0000,0x18c3,0xd6ba,0xc618,0xce79,0xc638,0x0000,0x0000,0xce79,0x9cf3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xe71c,0x39e7,0x0000,0x0000,0x31a6,0x8430,0xb596,0x9492,0x31a6,0x7bcf,0xdedb,0x0000,0xd6ba,0x8410,0x7bcf,0xe71c,0xad55,0xb5b6,0x5aeb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xb5b6,0x0000,0x0000,0x0000,0xc618,0x9cf3,0x528a,0xe73c,0x2124,0x8c71,0xd6ba,0xdedb,0xa514,0x0000,0xd69a,0x7bef,0x7bef,0xd6ba,0x0000,0x0000,0xc618,0xad55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x738e,0x9492,0x0000,0x0000,0x0000,0x6b4d,0xa534,0xad55,0xad55,0x31a6,0x0000,0x52aa,0x9cd3,0x0000,0x0000,0x0000,0x632c,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x1082,0x94b2,0xad55,0xa534,0x7bef,0x0000,0x9cd3,0x2965,0x6b4d,0x8410,0x0000,0x9cd3,0x3186,0x0000,0x0000,0x2965,0x9cf3,0xad75,0x528a,0x0000,0x3186,0xa534,0x0000,0x0000,0x0000,0x4a69,0x94b2,0x1082,0x0000,0x0000,0x632c,0x94b2,0x0000,0x94b2,0x4208,0x52aa,0xa534,0xa534,0xad55,0x3186,0x6b4d,0x8410,0x0000,0x9cd3,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x9cd3,0x52aa,0x4a69,0x9492,0x0000,0x8c71,0xa534,0xa534,0x7bef,0x0000,0x9cd3,0x2965,0x6b4d,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0x9cf3,0x0000,0x9492,0x528a,0x528a,0x9492,0x0000,0x94b2,0x4208,0x5aeb,0x8c51,0x0000,0x9cd3,0x2965,0x630c,0xad55,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x94b2,0x630c,0x39e7,0x94b2,0x0000,0x8430,0xad75,0x7bef,0x0000,0x0000,0x94b2,0x4208,0x52aa,0xa534,0xa534,0xa514,0x2945,0x6b4d,0x8410,0x0000,0x9cd3,0x18c3,0x73ae,0x73ae,0x18c3,0x9cd3,0x3186,0x0000,0x0000,0x528a,0xb596,0x9cf3,0xad75,0x5aeb,0x39e7,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x8c71,0xad55,0x9cf3,0xa514,0x0000,0x8c51,0x5aeb,0x4208,0x94b2,0x0000,0x9492,0x5acb,0x0000,0x0000,0x0000,0x8c71,0xa534,0xa534,0x8410,0x0000,0x0000,0x8c51,0x632c,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x4208,0xa514,0x2104,0x0000,0x0000,0x0000,0x0000,0xa534,0x3186,0x0000,0x528a,0x94b2,0x0000,0x9492,0x528a,0x4228,0xa534,0xa534,0xad75,0x528a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x8430,0x8410,0x0000,0x0000,0x0000,0x8430,0x6b4d,0x2965,0x9cd3,0x0000,0x8c51,0xa534,0xa514,0x9cd3,0x0000,0x9492,0x528a,0x528a,0x9492,0x0000,0x0000,0x8430,0x738e,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x5acb,0x5acb,0x5acb,0x4a69,0x39e7,0x4208,0x4208,0x52aa,0x5acb,0x4a69,0x4228,0x5acb,0x5acb,0x5acb,0x4a69,0x4249,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x3186,0x0000,0x0020,0x0000,0x0000,0x2124,0x4228,0x4a49,0x52aa,0x4208,0x52aa,0x4a69,0x4a49,0x52aa,0x4208,0x52aa,0x5acb,0x5acb,0x52aa,0x4208,0x39e7,0x52aa,0x5aeb,0x528a,0x4208,0x52cb,0x5aeb,0x5acb,0x528a,0x39c7,0x0000,0x0000,0x0861,0x0000,0x0000,0x5acb,0x4208,0x528a,0x4a69,0x39e7,0x4208,0x4228,0x52cb,0x4a69,0x4a49,0x52cb,0x4228,0x52cb,0x5acb,0x5acb,0x5aeb,0x5aeb,0x5aeb,0x5acb,0x5acb,0x5aeb,0x5acb,0x5acb,0x5aeb,0x31a6,0x0000,0x0020,0x0020,0x0000,0x31a6,0x52aa,0x4228,0x5acb,0x4228,0x4208,0x4208,0x4a49,0x52aa,0x4208,0x52aa,0x4a69,0x4228,0x5acb,0x5acb,0x5acb,0x5aaa,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x52aa,0x0000,0x0000,0x0861,0x0000,0x0000,0x52aa,0x4228,0x528a,0x528a,0x4228,0x5acb,0x4208,0x528a,0x4a69,0x4228,0x52aa,0x4208,0x52aa,0x4a69,0x39e7,0x4228,0x52aa,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x39e7,0x0000,0x0000,0x0841,0x0000,0x2965,0x52aa,0x4208,0x5acb,0x4228,0x39e7,0x4a49,0x5acb,0x52aa,0x4208,0x528a,0x4a69,0x39e7,0x4208,0x4208,0x52ca,0x4a69,0x4a28,0x52aa,0x4208,0x52aa,0x4a49,0x4a49,0x52aa,0x4208,0x0000,0x0000,0x0861,0x0000,0x0000,0x39e7,0x4208,0x4a69,0x528a,0x4208,0x52aa,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x4208,0x0000,0x0000,0x0861,0x0000,0x0000,0x4228,0x4208,0x52aa,0x4228,0x4a69,0x528a,0x4208,0x5acb,0x4228,0x4a69,0x5acb,0x5acb,0x52aa,0x4228,0x4208,0x4208,0x4228,0x5acb,0x5acb,0x4228,0x4a69,0x5aeb,0x5acb,0x5acb,0x18c3,0x0000,0x0861,0x0000,0x0000,0x4a69,0x5acb,0x5acb,0x5acb,0x52aa,0x4208,0x528a,0x5acb,0x528a,0x4208,0x5acb,0x4228,0x528a,0x528a,0x39e7,0x4208,0x39e7,0x528a,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x5acb,0x4228,0x0000,0x0000,0x0861,0x0000,0x1082,0x5aeb,0x5acb,0x5acb,0x4228,0x4a69,0x52aa,0x4208,0x52aa,0x4a49,0x4208,0x4208,0x4228,0x5acb,0x4228,0x528a,0x528a,0x4228,0x5acb,0x5acb,0x4249,0x4a69,0x5acb,0x5acb,0x5acb,0x2104,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xe71c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdedb,0xe73c,0x8430,0x0000,0x0000,0x0000,0x0000,0xb596,0xe73c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdefb,0xdedb,0xdedb,0xdeba,0xdedb,0xdf1c,0xce79,0x2945,0x0000,0x0000,0x0000,0x5aeb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdeba,0xdedb,0xdedb,0xdebb,0xdedb,0xdeba,0xdedb,0xdedb,0xdebb,0xdedb,0xdebb,0xdedb,0xdedb,0xdeba,0xdedb,0xdedb,0xe73c,0x9492,0x0000,0x0000,0x0000,0x0000,0xad55,0xe73c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xd69a,0x39e7,0x0000,0x0000,0x0000,0x4a69,0xdedb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xe73c,0x9cf3,0x0000,0x0000,0x0000,0x0000,0x9cf3,0xe73c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0x4a69,0x0000,0x0000,0x0000,0x39e7,0xd69a,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xe73c,0xad55,0x0000,0x0000,0x0000,0x0000,0x9492,0xe73c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdefb,0xdefb,0x5aeb,0x0000,0x0000,0x0000,0x2945,0xce79,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xe73c,0xb596,0x0000,0x0000,0x0000,0x0000,0x8430,0xe73c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8410,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdcd3,0xd32d,0xdeba,0xd208,0xde38,0xd4b2,0xd3af,0xde9a,0xd1c8,0xde38,0xdefb,0x9cd3,0x0000,0x18c3,0xbdf7,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf5c,0xd34d,0xd451,0xdf5d,0xde9a,0xd26a,0xd000,0xdd14,0xdf5d,0xdeba,0xce79,0x4a69,0x0000,0x73ae,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdedb,0xd1e8,0xd000,0xdd34,0xddf7,0xd000,0xd1c8,0xd000,0xdd96,0xddb6,0xd083,0xd0e5,0xd000,0xddd7,0xdd55,0xd000,0xd1c8,0xdedb,0xdefb,0xdedb,0xa514,0x0000,0x0000,0xb5b6,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf3c,0xdd35,0xd229,0xdedb,0xdf1c,0xdf1c,0xdf1c,0xdefb,0xdedb,0xd69a,0x5aeb,0x0000,0x6b4d,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd249,0xdd55,0xdd55,0xd249,0xdf1c,0xdedb,0xdedb,0xdedb,0xad75,0x0000,0x0000,0xad75,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd2ab,0xdcd3,0xdf5d,0xdedb,0xdedb,0xdefb,0xdf1c,0xdf1c,0xdefb,0xdedb,0xd6ba,0x6b4d,0x0000,0x5aeb,0xd69a,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde59,0xd1c8,0xde59,0xdf1c,0xdedb,0xb5b6,0x0000,0x0000,0xa514,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf5d,0xd451,0xd32d,0xdf1c,0xdedb,0xd6ba,0x73ae,0x0000,0x4a69,0xce79,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde9a,0xd126,0xddf7,0xdf3c,0xdedb,0xbdf7,0x18c3,0x0000,0x9cd3,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd38e,0xdcb2,0xde38,0xd208,0xde9a,0xdedb,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf3c,0xd430,0xd187,0xdeba,0xd000,0xddf7,0xd3f0,0xd28a,0xde9a,0xd000,0xddf7,0xe75d,0xad55,0x0000,0x18c3,0xce79,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xd3cf,0xd4f3,0xd472,0xd451,0xdeba,0xd001,0xd4f4,0xd451,0xd410,0xdf1c,0xdefb,0x52aa,0x0000,0x8410,0xe73c,0xdedb,0xdedb,0xdedb,0xdefb,0xddf7,0xd2cb,0xddb6,0xdd75,0xde39,0xde9a,0xd4d3,0xd000,0xd492,0xdeba,0xd514,0xd0a4,0xddd7,0xd575,0xdeba,0xd492,0xd187,0xddd7,0xd2cb,0xddf7,0xe75d,0xb596,0x0000,0x0000,0xc638,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf5d,0xd4b2,0xd36e,0xddf7,0xdeba,0xd36e,0xd28a,0xd24a,0xd410,0xdefb,0xe71c,0x632c,0x0000,0x73ae,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdeba,0xd2cb,0xd4d3,0xde79,0xde79,0xd4d3,0xd2cb,0xdeba,0xdefb,0xe71c,0xbdf7,0x0000,0x0000,0xbdf7,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xddf7,0xd3af,0xd451,0xdf5d,0xdedb,0xd3af,0xd26a,0xd26a,0xd3af,0xdedb,0xe73c,0x73ae,0x0000,0x632c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xde9a,0xd000,0xd187,0xd596,0xdf3c,0xc638,0x0000,0x0000,0xb596,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd431,0xd431,0xde18,0xdedb,0xdedb,0xe73c,0x8410,0x0000,0x52aa,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xdd96,0xd38e,0xd555,0xdf3c,0xce79,0x18c3,0x0000,0xa534,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd229,0xd3f0,0xddf7,0xd000,0xde79,0xe75d,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xddb6,0xd4f4,0xdeba,0xd492,0xde79,0xdd96,0xd534,0xdeba,0xd492,0xde79,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xd000,0xddd7,0xd4d3,0xd1e8,0xdeba,0xd0e5,0xd3cf,0xd492,0xd555,0xdefb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xde38,0xd410,0xd472,0xdeba,0xdf1c,0xdefb,0xde9a,0xd001,0xde38,0xdf5d,0xd4f4,0xd002,0xd4d3,0xdedb,0xdf3c,0xd492,0xd0e5,0xd4d3,0xd410,0xde38,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd4d3,0xd410,0xdd96,0xdf3c,0xdeba,0xd4d3,0xd451,0xd451,0xd514,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde18,0xd410,0xd471,0xdeba,0xdefb,0xdefb,0xdeba,0xd471,0xd410,0xde18,0xdf3c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf3c,0xddd7,0xd410,0xd4b2,0xdedb,0xd4f4,0xd451,0xd451,0xd4f3,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde38,0xd3af,0xd000,0xd3af,0xde18,0xdf1c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd1a7,0xd472,0xdf5d,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf3c,0xd1e8,0xd431,0xdf3c,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd514,0xdd96,0xde79,0xd492,0xdeba,0xe73c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdf1c,0xdedb,0xdf1c,0xdedb,0xdefb,0xdf1c,0xdedb,0xdf1c,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xd083,0xddb7,0xd4d3,0xd249,0xdeba,0xd125,0xd126,0xd4b2,0xde79,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xd30c,0xd4d3,0xde59,0xdefb,0xde59,0xd001,0xddf8,0xdf3c,0xd514,0xd000,0xd2ec,0xde7a,0xdf3c,0xd4b2,0xd000,0xd30c,0xdefb,0xdefb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd34d,0xd492,0xde7a,0xdefb,0xdedb,0xde18,0xddf7,0xddd7,0xde38,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xddb6,0xd2ab,0xddd7,0xdeba,0xdedb,0xdedb,0xdeba,0xddd7,0xd2ab,0xd5b6,0xdf3c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde9a,0xd4d3,0xd30c,0xdeba,0xde38,0xddf7,0xddf7,0xde18,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xddd7,0xd1e8,0xd000,0xd534,0xde9a,0xdf1c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd209,0xd472,0xdf3c,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd229,0xd471,0xdf3c,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdefb,0xdedb,0xdf1c,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xd229,0xdd76,0xd4b3,0xd32d,0xdeba,0xd002,0xde39,0xd451,0xd28a,0xdf1c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xde79,0xdedb,0xd28a,0xd492,0xdf3c,0xde59,0xd000,0xddf7,0xdf3c,0xd4f3,0xd1a7,0xdeba,0xde79,0xdefb,0xd472,0xd26a,0xdf3c,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf5c,0xd3cf,0xd34d,0xdedb,0xdeba,0xd229,0xd000,0xd000,0xd32d,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde9a,0xd0a4,0xddb6,0xdedb,0xdedb,0xddb6,0xd0a4,0xde7a,0xdefb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd3cf,0xd34d,0xdf3c,0xdedb,0xd2ab,0xd000,0xd000,0xd2ab,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde38,0xd002,0xd000,0xd534,0xdf3c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd2ec,0xd471,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde9a,0xd2cb,0xd4b3,0xdf3c,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd2ec,0xd3ef,0xdf1c,0xde9a,0xd000,0xde18,0xd431,0xd2ab,0xdf1c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xddd7,0xd000,0xd000,0xdd96,0xdefb,0xdefb,0xde39,0xd000,0xddf7,0xdf5c,0xd514,0xd000,0xd002,0xd000,0xddd7,0xd4b3,0xd208,0xdefb,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd4b3,0xd1e8,0xdedb,0xdeba,0xde9a,0xde9a,0xdeba,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xd1a7,0xd555,0xd555,0xd1a7,0xdeba,0xdedb,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd26a,0xd451,0xdefb,0xdedb,0xdedb,0xde9a,0xde9a,0xde9a,0xde9a,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd576,0xd000,0xd000,0xddd7,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd3cf,0xd30c,0xdf1c,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde9a,0xd0a4,0xdd76,0xdefb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xe73c,0xe679,0xe69a,0xe73c,0xe71c,0xe639,0xe6fb,0xe6ba,0xde59,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xde9a,0xddd7,0xddb7,0xde9a,0xdedb,0xdedb,0xdeba,0xddf7,0xd69a,0xdf1c,0xe6db,0xe638,0xe638,0xe618,0xe6fb,0xe6ba,0xe659,0xe73c,0xe71c,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xe71c,0xe73c,0xe6bb,0xe639,0xe71c,0xe73c,0xe73c,0xe73c,0xe71c,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe73c,0xe659,0xe6db,0xe6db,0xe659,0xe73c,0xe71c,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xe659,0xe6ba,0xe73c,0xe71c,0xe71c,0xe73c,0xe73c,0xe73c,0xe71c,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde79,0xddb7,0xddd7,0xdeba,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde38,0xde18,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xddd7,0xde9a,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xdefb,0xa534,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x8430,0x8c51,0x8430,0x8430,0x8430,0xce79,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xdedb,0xdedb,0xdefb,0xce59,0x8430,0x8430,0x8c71,0x8c71,0x8410,0x7bcf,0x7c30,0x7bcf,0x7c10,0xa575,0xdefb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe73c,0xe73c,0xe71c,0xe71c,0xdefb,0xdedb,0xdefb,0xdefb,0xad55,0x8410,0x8c92,0x8c92,0x8c92,0x8c51,0x8c71,0x8c71,0x8430,0x8410,0xc638,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xd69a,0x8c51,0x8430,0x8430,0x8c71,0x8c92,0x8430,0x8430,0x8430,0x8410,0x9cf3,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdefb,0xb596,0x7bcf,0x7bcf,0x7bcf,0x7c10,0x8430,0x8c71,0x8c92,0x8430,0x8410,0xc618,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xd6ba,0x8c71,0x8471,0x8c71,0x8c30,0x8430,0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x9cd3,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xe71c,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xe71c,0xc618,0x9cf3,0xa534,0xa534,0xa514,0xce59,0xdefb,0xdedb,0xdedb,0xe71c,0x630c,0x0861,0x6b6d,0x6b4d,0x6b6d,0x0861,0x0000,0x0000,0x0000,0x0000,0xbdf7,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xce79,0xad55,0xd6ba,0xdedb,0xdedb,0xdedb,0xd69a,0xad55,0xd69a,0xdedb,0xdefb,0xbdf7,0x0000,0x0000,0x0000,0x0000,0x0861,0x6b6d,0x6b4d,0x6b6d,0x0861,0x630c,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xbdd7,0xa534,0xa534,0xa534,0xa534,0xa534,0xa514,0xb5b6,0xdefb,0xdedb,0xe71c,0x73ae,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb5b6,0xef5d,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xd69a,0xad55,0xa534,0xa534,0xa534,0xa514,0xad55,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdefb,0xbdd7,0xa514,0xa534,0xa534,0xad55,0xa534,0xa534,0xa514,0xad55,0xd6ba,0xe73c,0x8410,0x0000,0x6b6d,0x6b4d,0x6b6d,0x2945,0x0000,0x0000,0x0000,0x0000,0xad55,0xef5d,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xd69a,0xa534,0xd69a,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0xb5b6,0xbdd7,0xdefb,0xce79,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0x6b4d,0x6b6d,0x31a6,0x39c7,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdefb,0xbdf7,0xb5b6,0xdedb,0xdedb,0xdedb,0xdefb,0xc638,0xad75,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xb596,0xa514,0xa534,0xad55,0xa534,0xa514,0xc638,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdefb,0xd69a,0xa514,0xa534,0xa534,0xa514,0xbdd7,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xb596,0xa534,0xa534,0xa534,0xa534,0xa514,0xd69a,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xd69a,0x8430,0x1082,0x31a6,0x31a6,0x10a2,0x9cd3,0xd6ba,0xdedb,0xdedb,0xe71c,0x5aeb,0x8430,0xef7d,0xe71c,0xe73c,0x6b4d,0x0000,0x0000,0x0000,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xe71c,0xb596,0x0000,0xce79,0xdedb,0xdedb,0xdefb,0xc638,0x0000,0xbdf7,0xdefb,0xdefb,0xc618,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xe73c,0xe71c,0xef7d,0x8430,0x5aeb,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x632c,0x0000,0x39e7,0x31a6,0x31a6,0x31a6,0x10a2,0x7bef,0xe71c,0xdedb,0xe71c,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xbdf7,0x0000,0x2945,0x31a6,0x31a6,0x2965,0x4228,0xbdf7,0xd6ba,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x8c51,0x0841,0x31a6,0x3186,0x0000,0x18c3,0x31a6,0x2945,0x4a49,0xd69a,0xe73c,0x8410,0x632c,0xef5d,0xe71c,0xef5d,0x8430,0x0000,0x0000,0x0000,0x0000,0xad75,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x31a6,0xad75,0xd6ba,0xdedb,0xdedb,0xdedb,0xce79,0x630c,0x8c51,0xe73c,0xd69a,0x3186,0x0000,0x0000,0x0000,0x4228,0xdefb,0xe71c,0xef5d,0xa534,0x39c7,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x7bcf,0x528a,0xe71c,0xdedb,0xdedb,0xe71c,0x9cd3,0x2104,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdefb,0x738e,0x2104,0x18c3,0x0000,0x3186,0x0841,0xad55,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xd6ba,0xad55,0x2104,0x3186,0x31a6,0x18c3,0x738e,0xce79,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x2124,0x0000,0x31a6,0x31a6,0x3186,0x2124,0xad55,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdefb,0x4a69,0x9492,0xe71c,0xdedb,0xdedb,0xe71c,0x738e,0x738e,0xe71c,0xdedb,0xe71c,0x630c,0x8410,0xe71c,0xdedb,0xdefb,0x632c,0x0000,0x0000,0x0000,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdefb,0xb5b6,0x18c3,0xd69a,0xdedb,0xdedb,0xdefb,0xce59,0x0020,0xc618,0xdefb,0xdefb,0xc618,0x0000,0x0000,0x0000,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x8410,0x630c,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x630c,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xbdf7,0x0020,0xce59,0xdefb,0xdedb,0xdedb,0xd69a,0x18c3,0xb5b6,0xdefb,0xdefb,0xce59,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0x2945,0xad55,0xe71c,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x630c,0xe71c,0xdedb,0xe71c,0x8410,0x0000,0x0000,0x0000,0x0000,0xad75,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0x39e7,0x9cf3,0xe71c,0xdedb,0xd6ba,0x2945,0xad55,0xe71c,0xdedb,0xd69a,0x3186,0x0000,0x0000,0x0000,0x4228,0xd6ba,0xdedb,0xe71c,0x9cf3,0x39e7,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x8410,0x630c,0xe71c,0xdedb,0xdedb,0xe71c,0x9cf3,0x39e7,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad55,0x2945,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0x9492,0x4a69,0xdefb,0xdedb,0xdedb,0xe71c,0xad55,0x2945,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x2945,0xad55,0xe71c,0xdedb,0xdedb,0xdefb,0x4a69,0x9492,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdefb,0x4a69,0x8c71,0xe73c,0xe71c,0xdedb,0xe71c,0x738e,0x738e,0xe71c,0xdedb,0xe71c,0x5aeb,0x8430,0xef7d,0xe71c,0xe73c,0x6b4d,0x0000,0x0000,0x0000,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdefb,0xb5b6,0x18c3,0xd69a,0xdedb,0xdedb,0xdefb,0xce59,0x0020,0xc618,0xdefb,0xdefb,0xc618,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xe73c,0xe71c,0xef7d,0x8430,0x5aeb,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x738e,0x0000,0x39c7,0x31a6,0x31a6,0x0861,0xa514,0xe71c,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xbdf7,0x0841,0xd69a,0xe73c,0xe71c,0xe73c,0xdedb,0x0000,0xb596,0xe71c,0xdefb,0xce59,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x632c,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0x2945,0xad55,0xe71c,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x632c,0xef5d,0xe71c,0xef7d,0x7bef,0x0000,0x0000,0x0000,0x0000,0xad75,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xd69a,0x6b6d,0x8c51,0xd6ba,0x3186,0xb5b6,0xd6ba,0xdedb,0xdedb,0xd69a,0x3186,0x0000,0x0000,0x0000,0x3186,0xdefb,0xe71c,0xef5d,0xa534,0x39c7,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x8410,0x630c,0xe71c,0xdedb,0xdedb,0xe71c,0x9cf3,0x39e7,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad55,0x2945,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0x8c71,0x4a69,0xdefb,0xdedb,0xdedb,0xe71c,0xad55,0x2124,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x2945,0xb596,0xef5d,0xe71c,0xe71c,0xef5d,0x4208,0x8430,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdefb,0x4a69,0x9cd3,0xc618,0x738e,0xe71c,0xe73c,0x738e,0x738e,0xe71c,0xdedb,0xe71c,0x6b6d,0x39c7,0x7bef,0x7bcf,0x7bef,0x39c7,0x0000,0x0000,0x0000,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdefb,0xb5b6,0x18c3,0xce79,0xe71c,0xe71c,0xe71c,0xce59,0x0020,0xc618,0xdefb,0xdefb,0xc618,0x0000,0x0000,0x0000,0x0000,0x39c7,0x7bef,0x7bcf,0x7bef,0x39c7,0x6b6d,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x6b4d,0x5aeb,0xad75,0xa534,0xa534,0xa514,0xc618,0xdefb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x0000,0x0000,0x0000,0x8c51,0xb596,0xad75,0xa534,0x0000,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xc618,0x0000,0x5aeb,0x6b4d,0x632c,0x6b4d,0x7bef,0xa534,0xce79,0xdedb,0xdefb,0xce59,0x1082,0x94b2,0xad75,0xad75,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x632c,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0x2945,0xad55,0xe71c,0xdedb,0xdedb,0xdedb,0xe71c,0x8c51,0x18e3,0x7bef,0x7bcf,0x73ae,0x9cd3,0xad75,0xad75,0xad55,0x1082,0xad75,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0xbdf7,0x8c71,0x7bef,0xa534,0xd6ba,0xdefb,0xdedb,0xdedb,0xd69a,0x2104,0x8c71,0xb596,0xad75,0xa534,0x7bcf,0x7bcf,0x7bef,0x528a,0x4a69,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x8410,0x630c,0xe71c,0xdedb,0xdedb,0xe71c,0x9cf3,0x39e7,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad55,0x2945,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0x9492,0x4a69,0xdefb,0xdedb,0xdedb,0xe71c,0xad55,0x2945,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x39e7,0x4a49,0x6b6d,0x6b4d,0x6b4d,0x632c,0x94b2,0xc638,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdefb,0x4208,0x94b2,0xd69a,0x7bef,0x9cf3,0xdefb,0x738e,0x6b4d,0xe71c,0xdedb,0xe71c,0x73ae,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xe71c,0xb596,0x0000,0xdedb,0xad75,0x8c51,0xb5b6,0xd69a,0x0000,0xbdf7,0xdefb,0xdefb,0xc618,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x5aeb,0x8c51,0xf79e,0xe73c,0xe73c,0xef5d,0xe71c,0xdefb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x0000,0x0000,0x0000,0xb5b6,0xef5d,0xe73c,0xdedb,0x18e3,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xc618,0x0000,0x738e,0x7bef,0x8410,0x5acb,0x0000,0xdefb,0xdefb,0xdedb,0xdefb,0xce59,0x0000,0xc638,0xe73c,0xe73c,0xce59,0x0000,0x0000,0x0000,0x0000,0x632c,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0x2945,0xad55,0xe71c,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0xa534,0xef5d,0xe71c,0xdefb,0x2965,0xad55,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xef5d,0xa514,0x2124,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xd69a,0x10a2,0xbdf7,0xef5d,0xe73c,0xd69a,0x0000,0x0000,0x0000,0x0000,0x52aa,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x7bcf,0x5acb,0xe73c,0xdefb,0xdefb,0xef5d,0x9cf3,0x2945,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xe73c,0xad75,0x2965,0xdefb,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0x8c51,0x4228,0xe73c,0xdefb,0xdefb,0xe73c,0xad75,0x0020,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x39e7,0x5acb,0x7bef,0x7bcf,0x7bcf,0x73ae,0xce79,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdefb,0x7bef,0x8c71,0xc638,0xb5b6,0x0000,0xad55,0x8430,0x9492,0xe71c,0xdedb,0xe71c,0x738e,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdefb,0xbdf7,0x5aeb,0xbdd7,0x738e,0x2965,0x7bcf,0xb5b6,0x5aeb,0xc638,0xdefb,0xdefb,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x738e,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x630c,0x6b4d,0xc618,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xc638,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x0000,0x0000,0x0000,0xb596,0xe71c,0xdefb,0xd69a,0x18c3,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xbdf7,0x0000,0xd69a,0xe73c,0xef5d,0xc638,0x5aeb,0xb596,0xd69a,0xdedb,0xdefb,0xce59,0x0020,0xc618,0xe71c,0xe71c,0xc618,0x0000,0x0000,0x0000,0x0000,0x632c,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0x2104,0xad55,0xe71c,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0xa534,0xe73c,0xdefb,0xdedb,0x2965,0xad55,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x9cf3,0x39c7,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd69a,0x18c3,0xbdd7,0xe71c,0xdefb,0xce59,0x18c3,0x0000,0x0000,0x0000,0x52aa,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x9cd3,0x73ae,0xbdf7,0xbdd7,0xbdd7,0xbdf7,0x94b2,0x738e,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xc618,0xbdf7,0x9492,0x18c3,0xbdd7,0xbdd7,0xce79,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0xa534,0x6b6d,0xbdf7,0xbdd7,0xbdd7,0xbdf7,0x9cf3,0x6b4d,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x2104,0xb596,0xef5d,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xe73c,0x9492,0x0000,0x10a2,0x2945,0x0000,0xad55,0xe73c,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdefb,0xd6ba,0x2104,0xbdd7,0xef7d,0xad75,0x3186,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x738e,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x7bcf,0x0000,0x0861,0x1082,0x1082,0x1082,0x0000,0x73ae,0xe71c,0xdedb,0xe71c,0x8410,0x0000,0x0000,0x0000,0x0000,0xad55,0xdedb,0xd6ba,0xce59,0x10a2,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xc618,0x2945,0xce59,0xdefb,0xdedb,0xdefb,0xd6ba,0x2104,0xb5b6,0xdefb,0xdefb,0xce59,0x0020,0xbdd7,0xd6ba,0xdedb,0xbdf7,0x0000,0x0000,0x0000,0x0000,0x632c,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0x39e7,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0xa514,0xdedb,0xd6ba,0xd69a,0x2945,0xad55,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xa514,0x4a49,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd69a,0x18c3,0xb596,0xdedb,0xd6ba,0xc618,0x18c3,0x0000,0x0000,0x0000,0x52aa,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xe71c,0xb5b6,0x0000,0x1082,0x1082,0x0000,0x8430,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdefb,0x632c,0x0000,0x18e3,0x2945,0x1082,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xe71c,0xbdf7,0x0000,0x1082,0x1082,0x0000,0x73ae,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xd6ba,0x39e7,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xef5d,0xdedb,0xdedb,0xdedb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xd6ba,0xdedb,0xdedb,0xdedb,0xe71c,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdf7,0xef7d,0xad55,0x0000,0x18c3,0xd69a,0xdefb,0xdedb,0xdedb,0xdedb,0xce79,0xd6ba,0xdedb,0xd6ba,0xce79,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xe71c,0xe71c,0x52aa,0x0000,0x8430,0xef5d,0xdedb,0xdedb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd69a,0xdedb,0xdedb,0xe71c,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0841,0x2104,0x2104,0x18c3,0x0000,0xb5b6,0xef5d,0xb5b6,0x0000,0x0000,0xce59,0xe71c,0xdedb,0xd6ba,0xce79,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xce79,0xd6ba,0xdedb,0xdefb,0xce59,0x0000,0x0000,0x2104,0x2104,0x10a2,0x0000,0x0000,0x0000,0x0000,0x5acb,0xdefb,0xe73c,0x632c,0x0000,0x73ae,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xce79,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0x2104,0x18e3,0x0000,0xad55,0xef5d,0xbdf7,0x0000,0x0000,0xbdf7,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0xce79,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xce79,0x1082,0x0000,0x2104,0x2104,0x18c3,0x0000,0x0000,0x0000,0x0000,0x4228,0xdedb,0xe73c,0x73ae,0x0000,0x632c,0xe73c,0xdedb,0xdedb,0xdedb,0xd6ba,0xce79,0xce79,0xce79,0xce79,0xd69a,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xce59,0x0000,0x0000,0xb5b6,0xe73c,0xdedb,0xdedb,0xdedb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xce79,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xef5d,0x8430,0x0000,0x52aa,0xe71c,0xdedb,0xdedb,0xdedb,0xd6ba,0xce79,0xce79,0xce79,0xce79,0xd69a,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd69a,0x18c3,0x0000,0xad55,0xe73c,0xdedb,0xdedb,0xce79,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xef5d,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x31a6,0x9492,0xe73c,0xe71c,0xe71c,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xe71c,0xe71c,0xe71c,0xe73c,0xce79,0xbdf7,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xe73c,0xa534,0x39e7,0x0000,0x0861,0x52aa,0xc638,0xef5d,0xe71c,0xe71c,0xe73c,0xe71c,0xe71c,0xe71c,0xe73c,0xe71c,0xe71c,0xe71c,0xe73c,0xdefb,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xbdf7,0xce79,0xdedb,0x6b6d,0x2124,0x0000,0x3186,0x8c51,0xe73c,0xe71c,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xe71c,0xe71c,0xe73c,0xce79,0xbdf7,0xc618,0xc618,0xc618,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xe71c,0xad75,0x4208,0x0000,0x0000,0x4a69,0xbdf7,0xef5d,0xe71c,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xe71c,0xe71c,0xe71c,0xdefb,0xc618,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xc618,0xc618,0xc618,0xbdf7,0xce79,0xdefb,0x73ae,0x2945,0x0000,0x2965,0x8410,0xe71c,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xd69a,0xbdf7,0xc618,0xc618,0xc618,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xe71c,0xb5b6,0x4228,0x0000,0x0000,0x4228,0xb5b6,0xef5d,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xc638,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xc618,0xc618,0xc618,0xbdf7,0xce59,0xe71c,0x8410,0x2965,0x0000,0x2945,0x73ae,0xdefb,0xe73c,0xe71c,0xe71c,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xef5d,0xbdf7,0x4a69,0x0000,0x0000,0x4208,0xad75,0xef5d,0xe71c,0xe71c,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0x8c51,0x3186,0x0000,0x2124,0x6b6d,0xd6ba,0xe73c,0xe71c,0xe71c,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xef5d,0xc638,0x52aa,0x0861,0x0000,0x39e7,0xa534,0xef5d,0xe71c,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0x9492,0x31a6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x2945,0x8c51,0x8430,0x8c71,0x8c71,0x8430,0x8430,0x8430,0x9492,0x8c51,0x8430,0x8c51,0x9492,0x9492,0x9cd3,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x4a49,0x0000,0x0861,0x0000,0x0000,0x632c,0x9492,0x9492,0x9492,0x9492,0x8c51,0x8c51,0x9492,0x9492,0x9492,0x8c51,0x8430,0x8c51,0x94b2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x9cd3,0x8430,0x0000,0x0000,0x1082,0x0000,0x0000,0x8c51,0x8430,0x8c71,0x9492,0x8c71,0x8430,0x9492,0x9492,0x8c51,0x8430,0x8430,0x9492,0x9492,0x94b2,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x52aa,0x0000,0x0841,0x0020,0x0000,0x5acb,0x8c71,0x8c51,0x9492,0x8430,0x8430,0x8c51,0x9492,0x9492,0x8430,0x8430,0x8430,0x8c51,0x9492,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x8c51,0x0000,0x0000,0x1082,0x0000,0x0000,0x8410,0x9492,0x9492,0x8c71,0x8430,0x8430,0x9492,0x9492,0x8c71,0x8430,0x8430,0x9492,0x9492,0x94b2,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x9cd3,0x5aeb,0x0000,0x0841,0x0841,0x0000,0x52aa,0x8c71,0x8430,0x9492,0x8c51,0x8430,0x8430,0x8c51,0x9492,0x8430,0x8430,0x8c51,0x9492,0x9492,0x9cd3,0x9492,0x94b2,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x8c71,0x0000,0x0000,0x0861,0x0000,0x0000,0x7bef,0x9492,0x9492,0x8c71,0x8430,0x9492,0x8430,0x8c71,0x8c71,0x8430,0x8430,0x9492,0x9492,0x9492,0x8c71,0x8430,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9cd3,0x6b4d,0x0000,0x0020,0x0841,0x0000,0x4a69,0x9492,0x9492,0x9492,0x9492,0x8c51,0x8c51,0x9492,0x9492,0x8c51,0x8430,0x8c51,0x9492,0x9492,0x8430,0x8430,0x8430,0x8c51,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x2104,0x0000,0x1082,0x0000,0x0000,0x7bcf,0x9492,0x9492,0x8c71,0x8430,0x8430,0x8430,0x8c71,0x8c71,0x8430,0x8430,0x8430,0x8c71,0x8c71,0x8430,0x9492,0x8430,0x8c71,0x9492,0x9492,0x9492,0x9492,0x9492,0x94b2,0x738e,0x0000,0x0000,0x1082,0x0000,0x31a6,0x8c71,0x8430,0x9492,0x9492,0x8c51,0x8c51,0x9492,0x9492,0x8c51,0x8430,0x8c51,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x94b2,0x3186,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x2104,0x632c,0x632c,0x0000,0x3186,0x632c,0x5aeb,0x632c,0x0000,0x31a6,0x632c,0x528a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x52aa,0x39c7,0x0000,0x0000,0x0000,0x52aa,0x3186,0x0000,0x0000,0x0000,0x528a,0x6b4d,0x4208,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0x73ae,0x5acb,0x632c,0x18c3,0x0000,0x0000,0x630c,0x0000,0x0000,0x3186,0x632c,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x6b4d,0x6b4d,0x630c,0x52aa,0x0000,0x528a,0x6b4d,0x31a6,0x0000,0x0000,0x5aeb,0x5aeb,0x632c,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x39c7,0x738e,0x632c,0x0000,0x0000,0x2104,0x630c,0x630c,0x0000,0x0000,0x2945,0x632c,0x5aeb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0020,0x0000,0x4208,0x6b4d,0x5acb,0x0000,0x52aa,0x630c,0x630c,0x52aa,0x0000,0x528a,0x6b4d,0x31a6,0x0000,0x0000,0x0000,0x528a,0x2945,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0020,0x0000,0x0000,0x630c,0x0000,0x0000,0x18c3,0x52aa,0x0000,0x528a,0x18c3,0x0861,0x630c,0x630c,0x0000,0x0000,0x0000,0x0000,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0020,0x0000,0x4208,0x528a,0x0000,0x0000,0x0000,0x39e7,0x4a69,0x0000,0x0000,0x4a69,0x6b4d,0x39e7,0x0000,0x0000,0x528a,0x630c,0x632c,0x4a69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x2945,0x6b6d,0x6b4d,0x0000,0x0000,0x0000,0x5aeb,0x630c,0x6b4d,0x2124,0x0000,0x630c,0x630c,0x6b4d,0x18c3,0x18c3,0x528a,0x0000,0x52aa,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x5acb,0x738e,0x5aeb,0x630c,0x0000,0x0000,0x3186,0x52aa,0x0000,0x0000,0x4a49,0x6b4d,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x73ae,0xdedb,0xdedb,0x4a69,0x8c51,0xe71c,0xe71c,0xd6ba,0x39c7,0xa534,0xef5d,0xbdf7,0x39c7,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x2104,0xbdd7,0xa534,0x1082,0x0000,0x2965,0xc618,0x9cf3,0x0000,0x0020,0x39c7,0xbdf7,0xe71c,0xa514,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bef,0xdefb,0xe71c,0xdefb,0x6b6d,0x0000,0x7bcf,0xd69a,0x528a,0x0000,0x9cf3,0xef5d,0xc638,0x4228,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe71c,0xe71c,0xbdd7,0x0841,0xd69a,0xe73c,0x9cf3,0x0000,0x2965,0xce59,0xe71c,0xe71c,0xad55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xe73c,0xd6ba,0x6b4d,0x0000,0x8430,0xef5d,0xd69a,0x5aeb,0x0000,0x9492,0xef5d,0xce59,0x528a,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x10a2,0x9cf3,0xdefb,0xc618,0x0020,0xbdd7,0xe71c,0xe71c,0xbdd7,0x0841,0xd69a,0xe71c,0x9cf3,0x10a2,0x0000,0x0000,0xce59,0xa534,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x528a,0xd69a,0x7bcf,0x0000,0x7bcf,0xdedb,0x0000,0xd69a,0x7bef,0x73ae,0xef5d,0xd69a,0x5aeb,0x0861,0x0000,0x6b4d,0xdefb,0x52aa,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x9cf3,0xc618,0x2965,0x0000,0x0861,0xa534,0xbdd7,0x18e3,0x0000,0xce59,0xe73c,0xa534,0x0861,0x18c3,0xd69a,0xdedb,0xdedb,0xb5b6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xe71c,0xdefb,0x7bef,0x0000,0x632c,0xe73c,0xd6ba,0xdefb,0x7bef,0x632c,0xe73c,0xd69a,0xdefb,0x6b6d,0x8410,0xd69a,0x0000,0xdedb,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9cf3,0xe71c,0xe71c,0xd69a,0x39e7,0x0000,0x9cf3,0xc618,0x2965,0x0000,0xc618,0xe73c,0xad75,0x2124,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc618,0x0000,0x18e3,0x0861,0x0000,0x7bef,0xd69a,0x2945,0x0000,0xad75,0xad75,0x4a49,0xd6ba,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xce79,0x6b4d,0x8c71,0xc618,0x18c3,0xd69a,0x5acb,0x9cd3,0xb596,0x2965,0xdedb,0x5acb,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0xdedb,0x4a69,0x0000,0x9492,0xbdf7,0x18e3,0xd69a,0x528a,0x9cd3,0xbdd7,0x39c7,0xd6ba,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xb596,0x0000,0x18c3,0xd69a,0x6b6d,0x8c71,0xc618,0x0000,0x0000,0xc638,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bcf,0xd69a,0x0861,0xce59,0x7bcf,0x7bcf,0xce59,0x2104,0xce79,0x632c,0x8c51,0xc618,0x2945,0xd69a,0x632c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0x94b2,0x0000,0x18e3,0x0000,0x0000,0xb596,0xb596,0x0000,0x18c3,0xd69a,0x6b4d,0x8c51,0xc618,0x0000,0x0000,0xbdd7,0xe73c,0xad75,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0xd69a,0x2945,0xc618,0x8c51,0x6b4d,0xd69a,0x0000,0xce59,0x7bcf,0x7bcf,0xce59,0x0861,0xd69a,0x7bcf,0x0000,0x5aeb,0xdefb,0xdefb,0x630c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb5b6,0x9cd3,0x5aeb,0xd6ba,0x18c3,0xbdf7,0x8c71,0x6b4d,0xce79,0x0020,0xce59,0x7bef,0x7bef,0xc638,0x0841,0xd69a,0x7bcf,0x0000,0x18e3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xdedb,0x3186,0xb5b6,0x9cd3,0x52aa,0xd6ba,0x3186,0x0861,0x0000,0x7bcf,0xd69a,0x18e3,0x10a2,0x0000,0x8c51,0xce59,0x0000,0xd6ba,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xce79,0x10a2,0x0000,0xb5b6,0x9cd3,0x52aa,0xd69a,0x18c3,0xc618,0x8c71,0x6b4d,0xd69a,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2965,0x8430,0xc638,0x0000,0x0000,0x0000,0x73ae,0xd69a,0x0861,0x0000,0xb596,0xad55,0x39e7,0xdedb,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xd6ba,0x73ae,0x0000,0x39c7,0x3186,0xdedb,0x528a,0x9cd3,0xbdd7,0x0000,0x52aa,0xc618,0x6b6d,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0xdedb,0x4208,0x0000,0x9492,0xe71c,0xce59,0xdefb,0x528a,0x9cd3,0xb5b6,0x2945,0xdedb,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xad75,0x0000,0x18c3,0xd69a,0x632c,0x8c51,0xc638,0x0000,0x0000,0xc618,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x738e,0xdefb,0xce59,0x6b4d,0x0000,0x8430,0xce59,0x0000,0xd69a,0x6b4d,0x8c51,0xc618,0x0861,0xd6ba,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xad55,0xa534,0x0000,0x0000,0x0000,0xad75,0xad75,0x0000,0x18c3,0xce59,0xdedb,0x9cd3,0x10a2,0x2945,0xc618,0xe71c,0x9cd3,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xdedb,0x2945,0x31a6,0x0000,0x738e,0xdefb,0xce59,0xdefb,0x738e,0x738e,0xe71c,0xc638,0x5aeb,0x0000,0x8410,0xdedb,0xd69a,0x52aa,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdf7,0xa514,0x0000,0x4228,0x0000,0xc638,0x8c51,0x632c,0xd69a,0x0841,0xce59,0x7bcf,0x7bcf,0xce79,0x0020,0xce59,0xdedb,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0xdedb,0xd69a,0x8c51,0x1082,0x630c,0xdefb,0xce79,0x5acb,0x0000,0x738e,0xdefb,0xce59,0x4a49,0x0000,0x8410,0xe71c,0xce59,0x5aeb,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x8430,0xce59,0x0000,0x0000,0xb596,0xdedb,0xce79,0xd69a,0x18c3,0xb5b6,0xdefb,0xa534,0x2965,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x8430,0xad75,0x528a,0x0000,0x6b6d,0xd69a,0x0000,0x0000,0xb596,0xad55,0x4208,0xdedb,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xdedb,0x6b4d,0x5acb,0x94b2,0x2124,0xdefb,0x4228,0x9cd3,0xc638,0x0000,0x0000,0x632c,0xad55,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xdedb,0x4228,0x0000,0x9492,0xd69a,0x8c71,0xdedb,0x528a,0x9cd3,0xb5b6,0x2965,0xdedb,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0xad75,0xad75,0x0000,0x18c3,0xd69a,0x6b4d,0x8c51,0xc638,0x0000,0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xdedb,0x8c71,0x9cf3,0x4a49,0x8410,0xce59,0x0841,0xd69a,0x6b4d,0x8c71,0xbdf7,0x0000,0xdefb,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x4208,0x9cd3,0xa534,0x10a2,0x0000,0xb596,0xb596,0x0000,0x18c3,0xce79,0xad55,0x9492,0x8430,0x0000,0x738e,0xce59,0xce59,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b6d,0xdefb,0x0000,0x9492,0x632c,0x6b4d,0xdedb,0x8c51,0xd6ba,0x73ae,0x73ae,0xd6ba,0x8c51,0x9cf3,0x4a49,0x39e7,0x9cf3,0xdedb,0xad75,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0x9cf3,0x10a2,0xa534,0x0000,0xce59,0x8c51,0x5aeb,0xdedb,0x0841,0xce59,0x6b6d,0x73ae,0xd69a,0x0000,0xce79,0xad55,0x4208,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0xdedb,0x9cf3,0x39c7,0x0000,0x6b4d,0xdedb,0x8c51,0x10a2,0x0000,0x7bcf,0xdedb,0x8410,0x0000,0x0000,0x8430,0xd6ba,0x8c51,0x9cf3,0x528a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xce79,0x0000,0x0000,0xb5b6,0xbdf7,0x9cf3,0xd69a,0x18c3,0xbdf7,0xb596,0x8430,0x9cf3,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0x8430,0x7bcf,0xb596,0x4a49,0x4a49,0xad75,0xdedb,0x8c51,0x0000,0xb596,0xad75,0x4208,0xdefb,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x10a2,0x9cf3,0x9492,0x9cf3,0x9cd3,0x1082,0xa514,0x8c71,0x9cf3,0x8430,0x1082,0x8430,0x73ae,0xa534,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xdefb,0x4228,0x0000,0x9cd3,0xc618,0x0000,0xdedb,0x52aa,0x9cf3,0xbdd7,0x2965,0xdefb,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b6d,0xce59,0xce59,0x6b4d,0x10a2,0xd6ba,0x6b4d,0x8c71,0xce59,0x0000,0x0000,0xce59,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bef,0xd6ba,0x0000,0xd6ba,0x8430,0x7bef,0xce79,0x0841,0xd6ba,0x6b4d,0x8c51,0xd6ba,0x8410,0xad55,0x4a69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x738e,0x7bef,0x8c71,0xad55,0x10a2,0x0000,0xb5b6,0xb5b6,0x0000,0x18c3,0xd6ba,0x5acb,0x8c71,0xd69a,0x0000,0x6b4d,0xce79,0xd69a,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a69,0xad55,0x8430,0xb596,0x6b4d,0x738e,0xd6ba,0x0000,0xce79,0x7bef,0x7bef,0xce79,0x0000,0xdefb,0x7bef,0x2124,0x9cf3,0xdefb,0xbdd7,0x528a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0x9cf3,0x9492,0xad75,0x18c3,0x8c71,0x9cd3,0x9492,0x9cf3,0x0000,0xce59,0xb596,0x9492,0x94b2,0x1082,0xd69a,0xa514,0x7bcf,0x738e,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xdefb,0x2965,0x0000,0x0000,0x6b4d,0xdefb,0x8410,0x8430,0x4228,0x738e,0xdefb,0x7bcf,0x8430,0x31a6,0x8430,0xce79,0x0000,0xdefb,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xd69a,0x0000,0x0000,0xc618,0x9cd3,0x4228,0xdedb,0x18c3,0xc618,0xb596,0x8430,0xad55,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8430,0xdedb,0xc638,0x0000,0x0000,0x9492,0xd69a,0xc638,0xce79,0x39e7,0x9cd3,0x9cd3,0x39c7,0xc618,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0x94b2,0x0000,0x0000,0x0000,0xb5b6,0x8430,0x0000,0x4208,0xce59,0xdedb,0x6b6d,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a69,0xc618,0x39e7,0x0000,0x8430,0xad75,0x10a2,0xc618,0x4a69,0x8c51,0xa534,0x2945,0xc618,0x4a69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xce59,0xce59,0xb5b6,0x0000,0xbdf7,0x5aeb,0x7bef,0xb596,0x0000,0x0000,0xb596,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b6d,0xbdf7,0x0020,0xb5b6,0x6b6d,0x6b6d,0xb5b6,0x0020,0xbdf7,0x5aeb,0x738e,0xd69a,0xc638,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xdedb,0xa514,0x0000,0x0000,0x0000,0x9cf3,0x9cf3,0x0000,0x10a2,0xbdf7,0x5aeb,0x7bef,0xad75,0x18c3,0xc638,0xd69a,0x73ae,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0xce59,0x52aa,0x0000,0x6b6d,0xbdf7,0x0020,0xb5b6,0x6b6d,0x6b6d,0xb5b6,0x0020,0xbdf7,0x5aeb,0x7bef,0xd6ba,0xbdd7,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x8430,0xb5b6,0x0000,0x0000,0x0000,0x94b2,0xad75,0x0000,0x0000,0xad75,0xd6ba,0x94b2,0x0000,0x18c3,0xb5b6,0xce79,0xd6ba,0xad75,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a69,0xc618,0x39e7,0x0000,0x0000,0x5acb,0xce59,0xce79,0xd6ba,0x7bcf,0x52aa,0xce59,0xce79,0xd6ba,0x6b6d,0x6b6d,0xb5b6,0x0020,0xbdf7,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bcf,0xb5b6,0x0000,0x0000,0xad55,0x8c51,0x4a69,0xc618,0x18c3,0xa514,0xd6ba,0xa514,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0841,0x0841,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0841,0x0841,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0841,0x0000,0x0841,0x0000,0x0000,0x0841,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0020,0x0000,0x0020,0x0000,0x0000,0x0000,0x0841,0x0841,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0841,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0020,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4208,0x6b4d,0x632c,0x0000,0x0000,0x4228,0x6b4d,0x6b4d,0x6b4d,0x18e3,0x4a69,0x4a69,0x18e3,0x630c,0x2104,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x528a,0x738e,0x5acb,0x0000,0x0000,0x5aeb,0x4228,0x0000,0x2104,0x630c,0x18e3,0x4a69,0x4a69,0x18e3,0x632c,0x6b4d,0x6b6d,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39c7,0x6b4d,0x632c,0x1082,0x0000,0x4228,0x6b6d,0x630c,0x6b4d,0x2124,0x4208,0x6b4d,0x632c,0x632c,0x2124,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0x6b4d,0x6b4d,0x5aeb,0x0000,0x0000,0x5acb,0x4a69,0x0000,0x10a2,0x5aeb,0x6b6d,0x4208,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x10a2,0x6b4d,0x2945,0x0000,0x0000,0x2104,0x6b4d,0x10a2,0x0000,0x4228,0x6b6d,0x630c,0x6b4d,0x3186,0x0000,0x31a6,0x632c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a69,0x5acb,0x0000,0x0000,0x0000,0x528a,0x528a,0x0000,0x0000,0x0000,0x528a,0x738e,0x52aa,0x0841,0x630c,0x2124,0x4228,0x528a,0x10a2,0x630c,0x6b6d,0x39c7,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x3186,0x630c,0x10a2,0x0000,0x0020,0x0000,0x10a2,0x6b4d,0x2104,0x0000,0x0000,0x2104,0x6b4d,0x10a2,0x0000,0x4208,0x6b4d,0x632c,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0x4a49,0x0000,0x0000,0x0000,0x5acb,0x6b4d,0x632c,0x630c,0x0861,0x0000,0x4a69,0x6b6d,0x5aeb,0x0000,0x630c,0x632c,0x6b4d,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0x630c,0x2104,0x0000,0x0000,0x2965,0x632c,0x6b4d,0x6b6d,0x39e7,0x2965,0x6b4d,0x630c,0x6b6d,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xef5d,0xce79,0x4228,0x0000,0x9cf3,0xe73c,0xd6ba,0xdedb,0x39c7,0xad75,0xad75,0x4208,0xdefb,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0xb596,0xe73c,0xb5b6,0x0000,0x10a2,0xc618,0x9cd3,0x0000,0x4228,0xdefb,0x4208,0xad75,0xad75,0x39e7,0xe71c,0xdedb,0xdefb,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8430,0xef5d,0xd69a,0x52aa,0x0000,0x8c51,0xe71c,0xdefb,0xdefb,0x4a69,0x94b2,0xef5d,0xdefb,0xe71c,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0xdefb,0xdedb,0xbdf7,0x0000,0x0000,0xbdd7,0xa534,0x0000,0x3186,0xd6ba,0xe73c,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0xd6ba,0x52aa,0x0000,0x0000,0x632c,0xd6ba,0x52aa,0x0000,0x8c51,0xe71c,0xdefb,0xdefb,0x630c,0x0000,0x8410,0xd69a,0x39c7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa534,0xbdd7,0x0000,0x0000,0x0000,0xb596,0xb596,0x0000,0x0000,0x0000,0xb596,0xe73c,0xb596,0x18e3,0xdedb,0x52aa,0x9cf3,0xbdd7,0x2965,0xdefb,0xe71c,0x8430,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xdefb,0x3186,0x0000,0x0000,0x0000,0x52aa,0xd6ba,0x632c,0x0000,0x0000,0x632c,0xd6ba,0x52aa,0x0000,0x9492,0xef5d,0xce79,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdf7,0xad55,0x0000,0x0000,0x0000,0xb5b6,0xe71c,0xe71c,0xc638,0x18c3,0x0000,0xa534,0xe71c,0xbdf7,0x0020,0xc638,0xe71c,0xe71c,0xb5b6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xdefb,0x4228,0x0000,0x0000,0x632c,0xe71c,0xd6ba,0xe71c,0x8410,0x5aeb,0xdefb,0xdefb,0xe71c,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x31a6,0xce79,0x528a,0x9cf3,0xbdd7,0x0000,0x3186,0x0000,0xb596,0xa534,0x3186,0xdedb,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xce79,0x7bcf,0x0000,0x2104,0x2965,0xce79,0x52aa,0x94b2,0xad75,0x2965,0xdedb,0x4208,0xad55,0xad55,0x4208,0xdedb,0x4a49,0x18e3,0x2124,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xce79,0x3186,0xce59,0x738e,0x0000,0x73ae,0xd6ba,0x4a49,0x0000,0x9cd3,0xe71c,0xdedb,0xdedb,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce79,0x8c51,0x0000,0x2945,0x18c3,0xce59,0x6b6d,0x8c71,0xbdd7,0x18e3,0xd6ba,0x5acb,0x9cd3,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xce59,0x39c7,0x0000,0x0000,0x8410,0xc638,0x3186,0xce59,0x738e,0x0000,0x73ae,0xd6ba,0x4a49,0x0000,0x9cf3,0xb596,0x4208,0xd69a,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdf7,0x9cd3,0x0000,0x0000,0x0000,0xc618,0x7bef,0x7bef,0xc618,0x0841,0xce79,0x7bcf,0x0000,0x2104,0x3186,0xd6ba,0x52aa,0x9cd3,0xb5b6,0x2965,0xdedb,0x4a49,0xad55,0xad75,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xd6ba,0x3186,0x0000,0x0000,0x73ae,0xce59,0x3186,0xc638,0x73ae,0x73ae,0xc618,0x18c3,0xce59,0x630c,0x8c51,0xc638,0x31a6,0xce79,0x632c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xa534,0x0000,0x0000,0x0000,0x0000,0xad55,0xbdf7,0x0000,0x0000,0xce59,0x8c51,0x0000,0x2965,0x0000,0x0000,0xbdf7,0xad55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xdedb,0x4228,0x0000,0x0000,0x6b4d,0xd6ba,0x39c7,0x2124,0x18e3,0x0000,0x52aa,0xdedb,0x632c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc618,0x0020,0xdedb,0x52aa,0x9492,0xdefb,0xb596,0x0000,0x0000,0xa534,0xd6ba,0xbdf7,0xd6ba,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x5acb,0xb5b6,0x8430,0x0000,0x31a6,0xd6ba,0xce59,0xd6ba,0xad75,0x2965,0xdedb,0x2124,0xa534,0xad55,0x39e7,0xdedb,0xce79,0x630c,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xce59,0x0000,0xd69a,0x7bcf,0x0000,0x632c,0xd6ba,0x2945,0x0000,0x9cd3,0xe73c,0xe71c,0xdedb,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xdedb,0x8c71,0x0000,0x18c3,0xd6ba,0x632c,0x8c51,0xc638,0x18c3,0xd69a,0xd69a,0x9492,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bcf,0xd69a,0x0000,0xad75,0x632c,0x8410,0xce79,0x0000,0xd69a,0x7bcf,0x0000,0x632c,0xd6ba,0x2945,0x0000,0xa534,0xb5b6,0x2124,0xdedb,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0x8c71,0x4a69,0xb596,0x0000,0xce79,0x7bcf,0x7bcf,0xce79,0x0000,0x52aa,0xb5b6,0x8430,0x0000,0x31a6,0xd6ba,0x52aa,0x9cd3,0xb5b6,0x2945,0xd6ba,0xce79,0x8c51,0x2965,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xd6ba,0x3186,0x0000,0x0000,0x7bcf,0xd69a,0x0000,0xce79,0x7bef,0x73ae,0xe71c,0xc618,0xe71c,0x632c,0x8c51,0xc618,0x0020,0xdedb,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xa534,0x0000,0x0000,0x0000,0x0000,0xa514,0xbdd7,0x0000,0x0000,0x528a,0xb596,0x9492,0x0000,0x0020,0x0000,0xbdd7,0xa514,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xdedb,0x4228,0x0000,0x0000,0x632c,0xdefb,0xce59,0x52aa,0x0000,0x0000,0x39e7,0xdedb,0x528a,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc618,0x18c3,0xd6ba,0x52aa,0x94b2,0xce79,0x7bcf,0x0000,0x0000,0xad55,0xef5d,0xe71c,0xdefb,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x630c,0xa514,0x8c51,0x2124,0xd69a,0xa534,0xc618,0xb596,0x3186,0xdefb,0xa534,0xce79,0xad55,0x39e7,0xdedb,0x9cf3,0x3186,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xce59,0x0000,0xdedb,0x7bef,0x0000,0x5aeb,0xd6ba,0x0841,0x0000,0x9cf3,0xce59,0x9492,0xdedb,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0xbdf7,0x6b4d,0x0000,0x18c3,0xdedb,0x630c,0x8c51,0xce59,0x10a2,0xd69a,0xad75,0x94b2,0x73ae,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bef,0xdedb,0x0000,0xd6ba,0x8430,0x7bef,0xd69a,0x0000,0xdedb,0x7bef,0x0000,0x6b4d,0xd6ba,0x3186,0x0000,0xad55,0xbdd7,0x0000,0xe71c,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce79,0x8c51,0x632c,0xe71c,0x0841,0xd69a,0x73ae,0x73ae,0xd6ba,0x0000,0x0000,0x630c,0xa514,0x8c51,0x2124,0xd6ba,0x4228,0x94b2,0xb5b6,0x2965,0xd6ba,0x9cf3,0x9cd3,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xd6ba,0x0861,0x0000,0x0000,0x7bef,0xdedb,0x0000,0xd69a,0x8410,0x73ae,0xd6ba,0x94b2,0xdedb,0x632c,0x8c71,0xbdf7,0x0000,0xdefb,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0x9cf3,0x0000,0x0000,0x0000,0x0000,0x9cf3,0xbdd7,0x0000,0x0000,0x0000,0x5acb,0xa514,0x94b2,0x0000,0x0000,0xbdd7,0xa534,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xdedb,0x3186,0x0000,0x0000,0x6b4d,0xdedb,0x94b2,0x2124,0x0000,0x0000,0x4228,0xdedb,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9cd3,0xc638,0x18c3,0xdedb,0x52aa,0x9cd3,0xce59,0x630c,0x7bcf,0x1082,0x7bef,0xce59,0xdedb,0xad55,0x31a6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x738e,0x6b4d,0x9cd3,0xa514,0x2104,0xdedb,0x4208,0x94b2,0xbdf7,0x1082,0xad55,0xe71c,0xce79,0x73ae,0x4a49,0xdefb,0x7bef,0x73ae,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xd6ba,0x7bcf,0xad75,0x52aa,0x31a6,0x9cf3,0xdedb,0x8430,0x0000,0xa534,0xb5b6,0x0000,0xdefb,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd69a,0x8410,0x0000,0x0000,0x10a2,0xa534,0x8c71,0x94b2,0x94b2,0x2124,0xdedb,0x4208,0x9cf3,0xc638,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0xad75,0x7bcf,0xad75,0x5aeb,0x5aeb,0xad75,0x7bcf,0xad75,0x5aeb,0x0000,0x6b4d,0xdedb,0x3186,0x0000,0x7bef,0xa534,0x7bef,0xad75,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9cd3,0x94b2,0x8c71,0xa534,0x0020,0x9cf3,0x9492,0x9492,0x9cf3,0x0000,0x738e,0x6b4d,0x9cd3,0xa514,0x2104,0xdedb,0x9492,0xbdd7,0xb5b6,0x2965,0xdefb,0x8410,0xa514,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xdefb,0x8410,0x7bef,0x4208,0x52aa,0xad75,0x7bcf,0xad75,0x5acb,0x8410,0xce79,0x0000,0xd6ba,0x6b4d,0x8c51,0xd69a,0x7bcf,0xad75,0x528a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xbdf7,0x738e,0x73ae,0x0861,0x5acb,0xbdf7,0xce59,0x632c,0x0000,0x6b6d,0x6b6d,0x9492,0xad75,0x0000,0x0000,0xbdf7,0xa534,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xdefb,0x8c51,0x7bef,0x4228,0x630c,0xdefb,0x73ae,0x7bcf,0x528a,0x0000,0x4228,0xdefb,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xb596,0x1082,0xc638,0x4a69,0x8410,0xd69a,0xd69a,0xd69a,0x528a,0x0000,0x73ae,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xc618,0xdefb,0x8c71,0x0000,0x2965,0xc638,0x4a69,0x8c71,0xad75,0x0000,0x0000,0xbdd7,0x73ae,0x0000,0x4a69,0xce59,0xd69a,0xdedb,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xd6ba,0xce79,0x2124,0x0000,0x8c51,0xdedb,0xce59,0xd6ba,0x4a69,0x8c71,0xad55,0x2124,0xc638,0x4a69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdf7,0x7bef,0x0000,0x0000,0x0000,0x0000,0xb596,0x9cd3,0x0000,0x2965,0xc638,0x4a69,0x8c71,0xad75,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x2945,0xd69a,0x4208,0x0000,0x0000,0x4208,0xd69a,0x2945,0x0000,0x0000,0x5aeb,0xc638,0x2945,0x0000,0x0000,0x6b4d,0xce59,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x9cd3,0xb596,0x0000,0x0000,0x0000,0xa534,0xa534,0x0000,0x10a2,0xc618,0xdefb,0x8c71,0x0000,0x2965,0xbdf7,0xd69a,0xd6ba,0x9cf3,0x2124,0xc638,0xdedb,0x738e,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0xce79,0xd69a,0xdedb,0x8c51,0x0000,0x2945,0xd69a,0x4208,0x0000,0x7bef,0xbdd7,0x0000,0xc618,0x5aeb,0x73ae,0xd6ba,0xce59,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa514,0xd6ba,0xd6ba,0xce59,0x1082,0xad75,0xd69a,0xce79,0xc618,0x0000,0xbdd7,0xdefb,0x9cd3,0x0000,0x0000,0x0000,0xad75,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a69,0xce59,0xd69a,0xdedb,0x8c51,0x4228,0xce79,0xd69a,0xdedb,0x8430,0x0000,0x39e7,0xc638,0x4a69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x1082,0x0000,0x0000,0x0000,0x0000,0x0841,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x10a2,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0841,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0020,0x0841,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x10a2,0x0841,0x0841,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x1082,0x1082,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x10a2,0x0841,0x0020,0x0000,0x0000,0x0020,0x0020,0x0841,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x4228,0xce59,0xc618,0xc618,0xc618,0xc618,0xc618,0xc659,0xc679,0xc638,0xc638,0xc679,0xc679,0xc679,0xc638,0xc618,0xc638,0xc679,0xc618,0xc618,0xc659,0xc679,0xc679,0xc618,0xce79,0x6b4d,0x0000,0x0861,0x0000,0x0000,0x9514,0xce9a,0xc618,0xc618,0xc659,0xc679,0xc638,0xc618,0xc638,0xc679,0xc679,0xc638,0xc618,0xc638,0xc659,0xc618,0xc659,0xc679,0xc659,0xc618,0xc618,0xc659,0xc679,0xc69a,0xb5f7,0x0000,0x0000,0x1082,0x0000,0x3186,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc659,0xc679,0xc638,0xc638,0xc679,0xc618,0xc618,0xc618,0xc618,0xc638,0xc679,0xc638,0xc618,0xc659,0xc659,0xc618,0xc679,0xce79,0x73ae,0x0000,0x0861,0x0020,0x0000,0x8c71,0xce79,0xc618,0xc618,0xc618,0xc659,0xc679,0xc679,0xc679,0xc618,0xc618,0xc659,0xc659,0xc618,0xc618,0xc618,0xc659,0xc679,0xc659,0xc618,0xc679,0xc679,0xc679,0xc679,0xbdd7,0x0000,0x0000,0x1082,0x0000,0x18e3,0xbdf7,0xc679,0xc638,0xc618,0xc618,0xc618,0xc679,0xc638,0xc618,0xc618,0xc618,0xc679,0xc679,0xc679,0xc659,0xc618,0xc618,0xc659,0xc679,0xc659,0xc638,0xc679,0xc679,0xceba,0x8451,0x0000,0x0841,0x0841,0x0000,0x8410,0xce59,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc659,0xc638,0xc638,0xc679,0xc618,0xc659,0xc638,0xc638,0xc679,0xc618,0x18e3,0x0000,0x1082,0x0000,0x0000,0xbdd7,0xc638,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xce79,0x8c71,0x0000,0x0020,0x0861,0x0000,0x738e,0xce59,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc659,0xc659,0xc618,0xc638,0x31a6,0x0000,0x1082,0x0000,0x0000,0xb596,0xc638,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xc618,0xce59,0x9cd3,0x0000,0x0000,0x0861,0x0000,0x6b2c,0xce79,0xc679,0xc679,0xc679,0xc659,0xc638,0xc679,0xc618,0xc659,0xc638,0xc638,0xc679,0xc679,0xc638,0xc618,0xc618,0xc638,0xc679,0xc638,0xc618,0xc638,0xc679,0xc679,0xce59,0x4a49,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0xbdf7,0xe71c,0xdefb,0xdefb,0xdefb,0xdf3c,0xdefb,0xdbcf,0xdb2d,0xde18,0xde18,0xdb6d,0xdc10,0xdb6e,0xde18,0xdf7d,0xde79,0xdbaf,0xdf1c,0xdf5d,0xdd96,0xdb6e,0xdc31,0xdf3c,0xe73c,0xc618,0x7bcf,0x0000,0x10a2,0x94f3,0xcc51,0xe596,0xdf3c,0xdedb,0xdc71,0xdb2d,0xddd7,0xdf7d,0xde9a,0xdc31,0xdb4d,0xde18,0xdf7d,0xde79,0xdc30,0xdedb,0xdd55,0xdb4d,0xdcb3,0xdf5d,0xdf1c,0xdc92,0xdbaf,0xdbf0,0xd3cf,0xad34,0x3a08,0x0000,0x5aeb,0xbdd7,0xdefb,0xdefb,0xdefb,0xdefb,0xdf1c,0xdf1c,0xdbf0,0xdb2d,0xddd7,0xde59,0xdc51,0xdefb,0xdefb,0xdefb,0xdf3c,0xdeba,0xdbaf,0xdefb,0xdf5d,0xdd96,0xdcb3,0xdefb,0xdc31,0xe679,0xc679,0x8410,0x0000,0x0000,0x8c71,0xce79,0xe71c,0xdefb,0xdefb,0xdf1c,0xdd34,0xdbae,0xdb8e,0xdbf0,0xdeba,0xdf7d,0xdd55,0xdcb3,0xdf7d,0xdefb,0xdf7d,0xdd55,0xdb0c,0xdc72,0xdefb,0xdc30,0xdbcf,0xdbaf,0xdcb2,0xdefb,0xad75,0x4a49,0x0000,0x52aa,0xb5b6,0xdefb,0xdc92,0xddd7,0xdf1c,0xdefb,0xdefb,0xdc51,0xde18,0xdf1c,0xdefb,0xdedb,0xdbf0,0xdbf0,0xdb8e,0xdcd3,0xdf3c,0xdf5d,0xdc72,0xdb0c,0xdd55,0xdeba,0xdb8e,0xdc10,0xdbaf,0xcc92,0x8c92,0x0000,0x0000,0x8c51,0xce59,0xe71c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdf1c,0xdc51,0xddd7,0xde79,0xdbef,0xdefb,0xdc10,0xde38,0xde38,0xdc10,0xdefb,0xb5b6,0x52aa,0x0000,0x4a49,0xad75,0xdedb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xe71c,0xce79,0x8c71,0x0000,0x0000,0x8410,0xc638,0xe71c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdf3c,0xdd55,0xdcf3,0xdf1c,0xdefb,0xbdd7,0x5aeb,0x0000,0x39e7,0xad55,0xdedb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdf1c,0xdf3c,0xdf3c,0xdf5c,0xe73c,0xd679,0x94b2,0x10a2,0x0000,0x7bcf,0xc658,0xe6ba,0xdc10,0xdbaf,0xdb2d,0xdd96,0xde9a,0xdc31,0xdefb,0xdcb3,0xddd7,0xde79,0xdbcf,0xdb8e,0xdeba,0xdf3c,0xdf3c,0xdeba,0xdbaf,0xdefb,0xdf5d,0xddd7,0xdb8e,0xdbf0,0xe71c,0xbe18,0x632c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xef5d,0xdedb,0xdedb,0xdedb,0xdefb,0xde38,0xd492,0xd3ef,0xd34d,0xddf7,0xde18,0xd28a,0xd000,0xd2ec,0xde18,0xde59,0xd492,0xd38e,0xd4d3,0xdedb,0xd410,0xd000,0xd430,0xd4d3,0xd679,0xef5d,0xad75,0x0000,0x18c3,0xd6db,0xdaec,0xd3af,0xdf3c,0xde79,0xd000,0xd2cb,0xd451,0xddb6,0xde59,0xd000,0xd32d,0xd471,0xddf7,0xde18,0xd000,0xde9a,0xd32d,0xd023,0xd410,0xd535,0xdedb,0xd4d3,0xd0e4,0xd000,0xdc51,0xe71c,0x5acb,0x0000,0x8430,0xef5d,0xdedb,0xdedb,0xdedb,0xdefb,0xde59,0xd4b2,0xd3f0,0xd32d,0xddd7,0xd575,0xd000,0xdeba,0xdedb,0xdefb,0xde38,0xd492,0xd38e,0xd4b3,0xdeba,0xd471,0xd209,0xdedb,0xd000,0xd596,0xe77d,0xb5b6,0x0000,0x0000,0xce59,0xe71c,0xdedb,0xdedb,0xdedb,0xdf1c,0xd2cb,0xd125,0xd3f0,0xd3cf,0xdeba,0xddb6,0xd431,0xd410,0xd555,0xdedb,0xd555,0xd430,0xd36e,0xd451,0xdedb,0xd431,0xd000,0xd0e4,0xd4b3,0xdefb,0xe73c,0x6b4d,0x0000,0x7bcf,0xef5d,0xdedb,0xd0a4,0xd4b3,0xdf1c,0xdedb,0xdeba,0xd000,0xd534,0xdf1c,0xdedb,0xde9a,0xd3f0,0xd000,0xd146,0xd514,0xdeba,0xd4f3,0xd410,0xd34d,0xd534,0xde9a,0xd36e,0xd000,0xd1e8,0xe5d7,0xc659,0x0000,0x0000,0xc618,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd4b2,0xd471,0xd4b2,0xd431,0xdedb,0xd472,0xd492,0xd492,0xd471,0xdedb,0xef5d,0x7bcf,0x0000,0x6b4d,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdefb,0xdedb,0xe71c,0xce59,0x0000,0x0000,0xb5b6,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf5d,0xd3cf,0xd28a,0xdf3c,0xdedb,0xef5d,0x8430,0x0000,0x5acb,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde59,0xd4b3,0xd4d3,0xd492,0xd5f7,0xdf3c,0xd69a,0x18c3,0x0000,0xad75,0xef7d,0xd5f7,0xd000,0xd36e,0xd36d,0xdd96,0xddd7,0xd000,0xdeba,0xd1e8,0xd4b2,0xddb6,0xd000,0xd36e,0xd4b2,0xde59,0xde59,0xd492,0xd38e,0xd492,0xde9a,0xd492,0xd000,0xd3cf,0xd4d3,0xeefb,0x94d2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdf1c,0xd596,0xd229,0xde38,0xdf1c,0xdefb,0xdf1c,0xde59,0xd001,0xde9a,0xdf5d,0xd430,0xd229,0xdefb,0xd000,0xddf7,0xd471,0xd2cb,0xde18,0xd1c8,0xde18,0xe73c,0xa534,0x0000,0x18c3,0xce9a,0xdb2d,0xd3f0,0xdf3c,0xde9a,0xd063,0xdd96,0xd451,0xd3cf,0xde9a,0xd001,0xddd7,0xd3f0,0xd451,0xde59,0xd001,0xde9a,0xd30c,0xd492,0xde38,0xd000,0xde79,0xdf7d,0xd431,0xd30c,0xdf5d,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xddd7,0xd1e8,0xddf8,0xdf1c,0xdf5c,0xd555,0xd105,0xdeba,0xdedb,0xdf1c,0xd4b3,0xd125,0xdf1c,0xd000,0xdd96,0xd4f3,0xd208,0xddf7,0xd002,0xddb6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd30c,0xd38e,0xdedb,0xdf1c,0xdefb,0xd1c7,0xd431,0xd514,0xd000,0xdedb,0xd2ec,0xd4b2,0xdedb,0xdf3c,0xdedb,0xdf5d,0xd30c,0xd431,0xdf5d,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xd1a7,0xd4f3,0xdf1c,0xdedb,0xdeba,0xd105,0xd555,0xdf1c,0xdedb,0xdedb,0xdf5c,0xd26a,0xd4b2,0xdf7d,0xde59,0xd1e8,0xdd96,0xdefb,0xdf1c,0xdedb,0xdf1b,0xd125,0xdd96,0xe77d,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xd34d,0xd209,0xde9a,0xdedb,0xdeba,0xd2ab,0xd2ab,0xdeba,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde9a,0xddd7,0xddf7,0xddd7,0xde79,0xdf1c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde79,0xd36d,0xd26a,0xde59,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xddf7,0xd187,0xd208,0xd105,0xd514,0xdf3c,0xce59,0x18c3,0x0000,0xa534,0xe73c,0xddf8,0xd000,0xddb6,0xdefb,0xdf3c,0xd5b6,0xd023,0xdeba,0xd28a,0xd4d3,0xddb6,0xd146,0xdf1c,0xd125,0xd514,0xd514,0xd105,0xdf1c,0xd28b,0xddd7,0xd4b3,0xd2ab,0xdefb,0xd000,0xe5f7,0x8cb2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde59,0xd002,0xddd7,0xdefb,0xdefb,0xddf8,0xd001,0xde59,0xdf3c,0xd472,0xd28a,0xdeba,0xd023,0xde18,0xd4b2,0xd000,0xd208,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce9a,0xdb2d,0xd3f0,0xdf3c,0xde9a,0xd146,0xd000,0xd4d3,0xdf5d,0xde59,0xd023,0xd000,0xd514,0xdf3c,0xddf8,0xd001,0xde9a,0xd32d,0xd451,0xde18,0xd003,0xde9a,0xdf3c,0xd3f0,0xd2ec,0xdf1c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde9a,0xd083,0xdd96,0xdf3c,0xd555,0xd105,0xdeba,0xdedb,0xdf1c,0xd4f3,0xd1c8,0xdedb,0xd125,0xddb6,0xd514,0xd000,0xd000,0xd000,0xddd7,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd38e,0xd000,0xd30c,0xdefb,0xdefb,0xd30c,0xd000,0xd000,0xd1e8,0xdeba,0xdf3c,0xd38e,0xd36d,0xdefb,0xdedb,0xdf1c,0xd2ec,0xd3f0,0xdf1c,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xd1a7,0xd4f3,0xdf1c,0xdedb,0xdeba,0xd105,0xd555,0xdf1c,0xdedb,0xdedb,0xdefb,0xd24a,0xd472,0xdf1c,0xdedb,0xdefb,0xd1e8,0xd4d3,0xdefb,0xdedb,0xdeba,0xd105,0xd555,0xdf3c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd30c,0xd000,0xd000,0xd208,0xdedb,0xd2ab,0xd000,0xd000,0xd28a,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdd75,0xd000,0xd001,0xd000,0xd534,0xdf3c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd30c,0xd000,0xd000,0xd208,0xdeba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe73c,0xde18,0xd000,0xd000,0xdd75,0xdf3c,0xddb6,0xd023,0xdeba,0xd28a,0xd4d3,0xddb6,0xd125,0xdedb,0xd1e8,0xd555,0xd555,0xd1a7,0xdedb,0xdedb,0xdf1c,0xd472,0xd28a,0xdeba,0xd043,0xe618,0x8cb2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdeba,0xd208,0xd514,0xdf3c,0xddf8,0xd001,0xde59,0xdf3c,0xd451,0xd229,0xdefb,0xd000,0xddf7,0xd451,0xd28a,0xdeba,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce9a,0xdb0c,0xd430,0xdf5d,0xde79,0xd063,0xd535,0xdedb,0xdefb,0xde59,0xd001,0xddd7,0xd3ef,0xd451,0xde59,0xd001,0xde9a,0xd32d,0xd451,0xde18,0xd003,0xde9a,0xdf3c,0xd3f0,0xd2ec,0xdf1c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdedb,0xd28a,0xd4f3,0xddb6,0xd125,0xdefb,0xdf1c,0xdf3c,0xd4b3,0xd146,0xdf1c,0xd002,0xdd96,0xd4f3,0xd000,0xd000,0xd000,0xddb6,0xe75c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd2ec,0xd38e,0xdeba,0xdedb,0xdefb,0xd26a,0xd472,0xd555,0xd125,0xdeba,0xdf1c,0xdf1c,0xd4d3,0xd229,0xdedb,0xdf1c,0xd2ec,0xd3f0,0xdf1c,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xd1a7,0xd514,0xdf5d,0xdf1c,0xdeba,0xd0e5,0xd596,0xdf5d,0xdefb,0xdedb,0xdf3c,0xd26a,0xd4b2,0xdf5d,0xdedb,0xdf1c,0xdefb,0xd38e,0xd3af,0xdf1c,0xdeba,0xd105,0xd555,0xdf3c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd38e,0xd26a,0xdefb,0xdedb,0xdefb,0xd30c,0xd30c,0xdefb,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xde59,0xde59,0xde59,0xde9a,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xd3af,0xd2ab,0xdeba,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xddd7,0xd001,0xd0e5,0xd000,0xd4d3,0xdf3c,0xce59,0x18c3,0x0000,0xa534,0xe73c,0xddf8,0xd000,0xddd7,0xdedb,0xdf1c,0xddb6,0xd063,0xdefb,0xd2ab,0xd4d3,0xddb6,0xd125,0xdedb,0xd1e8,0xd555,0xd534,0xd146,0xdf1c,0xd1c8,0xddb7,0xd4d3,0xd28a,0xdeba,0xd043,0xe618,0x8cb2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xddd7,0xd249,0xd2ec,0xd4f3,0xde59,0xdf1c,0xddf7,0xd000,0xde38,0xdf1c,0xde59,0xd4d3,0xd2cb,0xd555,0xdefb,0xd3cf,0xd26a,0xdf3c,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce9a,0xdb2d,0xd000,0xd451,0xdeba,0xd000,0xddb6,0xdf1c,0xdefb,0xde38,0xd000,0xde79,0xd34d,0xd34d,0xde59,0xd000,0xde9a,0xd2ab,0xd410,0xddf7,0xd000,0xde79,0xdf3c,0xd3af,0xd26a,0xdf1c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xddf8,0xd26a,0xd2cb,0xd4d3,0xde9a,0xd575,0xd000,0xd2ab,0xd249,0xdd96,0xdeba,0xd4f4,0xd2cb,0xd534,0xde9a,0xde7a,0xd471,0xd000,0xd535,0xde9a,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd24a,0xd3cf,0xdf3c,0xdedb,0xdefb,0xd187,0xd4b3,0xddb6,0xd000,0xdeba,0xd3cf,0xd249,0xd3f0,0xddd7,0xdedb,0xdf1c,0xd26a,0xd3af,0xdf1c,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xd187,0xd0e5,0xd2ab,0xd3cf,0xdeba,0xd0a4,0xd166,0xd28a,0xd430,0xdeba,0xd34d,0xd000,0xd001,0xd4b2,0xde9a,0xd2ec,0xd28a,0xd472,0xde18,0xdefb,0xdeba,0xd000,0xd534,0xdf5d,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd3f0,0xd472,0xd4f3,0xd36e,0xdedb,0xd3af,0xd4b2,0xd4b2,0xd3af,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdefb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf3c,0xd3af,0xd26a,0xdf3c,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde79,0xd555,0xd575,0xd555,0xde38,0xdf1b,0xce59,0x18c3,0x0000,0xa534,0xe73c,0xddf7,0xd000,0xde59,0xdefb,0xdf1c,0xddb6,0xd000,0xd2ab,0xd000,0xd4d3,0xdd96,0xd000,0xdedb,0xd0c4,0xd4d3,0xdeba,0xd4f4,0xd2cb,0xd514,0xdedb,0xd451,0xd1e8,0xdeba,0xd000,0xe5f7,0x8cb2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xde18,0xd3ef,0xd410,0xde9a,0xdefb,0xdedb,0xde79,0xd492,0xde9a,0xdefb,0xe75d,0xde9a,0xdc92,0xe71c,0xe75d,0xddb7,0xdd75,0xe73c,0xe71c,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce79,0xdd76,0xd3f0,0xd4f3,0xdeba,0xd492,0xde38,0xdefb,0xdedb,0xde9a,0xd492,0xde9a,0xd575,0xd575,0xde9a,0xdcd3,0xe6fb,0xdd75,0xddf7,0xdeba,0xdcd3,0xdedb,0xe73c,0xddd7,0xdd55,0xdefb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xde38,0xd3f0,0xd3f0,0xde79,0xdf3c,0xde18,0xd451,0xd430,0xd3cf,0xddf8,0xe77d,0xdedb,0xdc72,0xdefb,0xe73c,0xe73c,0xdeba,0xdcd3,0xe71c,0xdefb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdefb,0xd514,0xd576,0xdefb,0xdedb,0xdedb,0xd4f3,0xddd7,0xde38,0xdcb3,0xdefb,0xdd14,0xdc10,0xddb6,0xe77d,0xe6fb,0xe73c,0xdd75,0xddd7,0xdf1c,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xd4f4,0xd430,0xd3f0,0xd4b3,0xdedb,0xd4d3,0xd430,0xd3ef,0xd4f3,0xdeba,0xd451,0xd451,0xdc51,0xdd75,0xdefb,0xdc92,0xdc30,0xde59,0xe75d,0xdf1c,0xdefb,0xdcf4,0xde38,0xdf1c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdcf3,0xde38,0xde9a,0xdc92,0xe6fb,0xdcd3,0xde79,0xde79,0xdcb2,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdd76,0xd514,0xdefb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdf1c,0xdf1c,0xdefb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe73c,0xde79,0xd492,0xde9a,0xdedb,0xdefb,0xde59,0xd451,0xd430,0xd430,0xddf7,0xde38,0xd4b2,0xdedb,0xd4d3,0xddd7,0xdf3c,0xde9a,0xd430,0xdeba,0xdf1c,0xddb6,0xd4f4,0xdeba,0xd492,0xe69a,0x8c92,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdf3c,0xdf3c,0xdefb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdefb,0xc618,0xb596,0xb5d7,0xb5f7,0xb5b6,0xb596,0xb5d7,0xb5f7,0xb596,0xb5b6,0xd69a,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdf1c,0xdf3c,0xdf1c,0xdedb,0xdf3c,0xdefb,0xdedb,0xdedb,0xdefb,0xdf1c,0xdedb,0xdefb,0xdf1c,0xd6ba,0xb618,0xb5b6,0xb5f7,0xb5d7,0xb5b6,0xb5f7,0xb5b6,0xb596,0xb5d7,0xc659,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdf3c,0xdf3c,0xdefb,0xdeba,0xdefb,0xdf1c,0xdf1c,0xdf3c,0xc659,0xb596,0xb5b6,0xb5f7,0xb596,0xb596,0xb596,0xb5b6,0xb5f7,0xb5b6,0xd69a,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdefb,0xdedb,0xdf1c,0xdf1c,0xdedb,0xdefb,0xdedb,0xdf1c,0xdefb,0xdefb,0xd6fb,0xb5b6,0xb5d7,0xb618,0xb5f7,0xb596,0xb5b6,0xb596,0xb5f7,0xb5d7,0xbdf7,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdf1c,0xdf1c,0xdf3c,0xdf3c,0xdedb,0xdf3c,0xdf3c,0xdf3c,0xdf1b,0xdedb,0xdf1c,0xdf3c,0xc69a,0xb5d7,0xb5b6,0xb618,0xb618,0xb5d7,0xb5b6,0xb5b6,0xb5b6,0xb5f7,0xce9a,0xe71c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0xbdd7,0xb5f7,0xb5d7,0xb5d7,0xb5f7,0xb5b6,0xb5f7,0xb5d7,0xb5d7,0xbe38,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdf1c,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdf1c,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdf1c,0xdf1c,0xdefb,0xdedb,0xdf1c,0xdedb,0xdf1c,0xdefb,0xdeba,0xdedb,0xdf1c,0xdedb,0xdeba,0xdefb,0xdf1c,0xdedb,0xdf1c,0xe73c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xd6ba,0xdedb,0xdedb,0xdedb,0xe71c,0x6b4d,0x0000,0x0000,0x2104,0x0000,0x10a2,0x0000,0x0000,0x18c3,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xce79,0xce79,0xce79,0xce79,0xce79,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0x1082,0x0000,0x0000,0x2104,0x0000,0x10a2,0x0000,0x6b4d,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xd69a,0xce79,0xce79,0xce79,0xce79,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x7bcf,0x0000,0x2104,0x18e3,0x18e3,0x18e3,0x18e3,0x2104,0x18c3,0x0000,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xd6ba,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xce79,0xd6ba,0xdedb,0xdefb,0xce59,0x0000,0x1082,0x0000,0x0000,0x18c3,0x0000,0x18e3,0x0000,0x0000,0x5acb,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xd6ba,0xce79,0xce79,0xce79,0xce79,0xd69a,0xdedb,0xdedb,0xdedb,0xe71c,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xef5d,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xd6ba,0xce79,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xce79,0xd6ba,0xdedb,0xdedb,0xce79,0x1082,0x0000,0x0000,0x0000,0x18e3,0x0000,0x18c3,0x0000,0x0000,0x4a49,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0xce79,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xce79,0xd6ba,0xdedb,0xdedb,0xd6ba,0xce79,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xd69a,0xce79,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xe73c,0x9492,0x0000,0x1082,0x1082,0x0000,0xad55,0xe73c,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x630c,0xd6ba,0x0000,0xbdf7,0x8430,0x630c,0xd69a,0x0020,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdefb,0xd6ba,0x31a6,0x0000,0x1082,0x0000,0x4228,0xd6ba,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xbdd7,0x94b2,0x4a69,0xd6ba,0x0000,0xbdf7,0x8c51,0x630c,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x7bcf,0x0000,0x0861,0x1082,0x0000,0xbdf7,0xe71c,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x6b6d,0xdedb,0xd69a,0xd69a,0xd69a,0xd69a,0xd6ba,0xce59,0x10a2,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xc618,0x18e3,0x1082,0x1082,0x1082,0x1082,0x1082,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x0020,0xce59,0x73ae,0x73ae,0xce59,0x0000,0xce79,0x738e,0x0000,0x632c,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xe73c,0xad55,0x0000,0x1082,0x1082,0x0000,0x9492,0xe73c,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x2945,0xc618,0xdefb,0xdedb,0xdedb,0xd6ba,0x39e7,0xad75,0xe71c,0xdedb,0xd69a,0x18c3,0xc618,0x8430,0x630c,0xce79,0x0000,0xce59,0x8410,0x0000,0x52aa,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xa514,0x4a49,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x3186,0xb5b6,0xdefb,0xdefb,0xce79,0x10a2,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0x94b2,0x5acb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdefb,0xdedb,0xdedb,0xdefb,0xdedb,0xdefb,0xdedb,0xdedb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdefb,0x7bef,0x8c71,0xc618,0xbdd7,0xbdd7,0xc618,0x7bef,0x9492,0xe71c,0xdedb,0xe71c,0x630c,0x7bef,0xbdd7,0x528a,0xc638,0x6b6d,0x9cd3,0xb596,0x31a6,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdefb,0xbdd7,0x4a49,0xbdf7,0xc638,0xc638,0xc638,0xc638,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0xbdf7,0x7bcf,0x8c71,0xb5b6,0x528a,0xc638,0x7bcf,0x0000,0x738e,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x630c,0x6b4d,0xc618,0xbdd7,0xbdf7,0x5acb,0xa534,0xef5d,0xdedb,0xdedb,0xe71c,0x738e,0x738e,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd69a,0x18c3,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xbdf7,0x0000,0xb5b6,0xce59,0xc638,0xc638,0xc638,0xbdd7,0xd69a,0xdedb,0xdefb,0xce59,0x10a2,0x2965,0xad55,0xa534,0x630c,0xc638,0x5acb,0xb596,0x8c71,0x528a,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x9492,0x7bef,0xc618,0xbdd7,0xbdd7,0xc618,0x8430,0x6b6d,0xdefb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x0000,0xce59,0xef5d,0xe71c,0xe73c,0xe71c,0x2945,0xad55,0xe71c,0xdedb,0xd69a,0x2965,0x2104,0xa514,0xad75,0x5acb,0xc638,0x630c,0xa534,0x9cd3,0x4208,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x9cf3,0x39c7,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x0000,0xbdf7,0xf79e,0xbdd7,0x4a49,0xb5b6,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0x8c71,0x4a49,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe73c,0xc638,0x5acb,0x31a6,0xbdf7,0xef5d,0xbdf7,0x528a,0x4a49,0x2965,0xad55,0xbdf7,0x6b4d,0xdedb,0x738e,0xb5b6,0xb5b6,0x6b6d,0xdedb,0xdedb,0xe71c,0xad55,0x4208,0x5acb,0xdedb,0xe73c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdefb,0x39e7,0x94b2,0xf79e,0xe73c,0xe73c,0xf79e,0x73ae,0x6b4d,0xe71c,0xdedb,0xe71c,0x6b4d,0x4208,0x9492,0xa514,0x8430,0x9cf3,0x9492,0x8c71,0x94b2,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdefb,0xce59,0x9492,0x8430,0x8430,0x8430,0x8410,0x9492,0xdefb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x7bcf,0x94b2,0x8c71,0x8430,0x94b2,0x8430,0x9cd3,0x528a,0x6b4d,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x630c,0x8430,0xef5d,0xdefb,0xe71c,0xad55,0x8410,0xa514,0xdefb,0xdedb,0xe71c,0x738e,0x738e,0xe71c,0xe71c,0xdedb,0xdefb,0xdefb,0xdefb,0xdedb,0x18e3,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xc618,0x0000,0x7bcf,0x8430,0x8430,0x8410,0x8c71,0xdedb,0xdefb,0xdedb,0xdefb,0xce59,0x1082,0x8c71,0x9cd3,0x94b2,0x9cf3,0x9492,0xa514,0x9cf3,0x52aa,0x5acb,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x6b4d,0x6b6d,0xef5d,0xdefb,0xe73c,0xef7d,0xc638,0xad55,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x10a2,0x6b4d,0x7bef,0x7bcf,0x7bcf,0x7bcf,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x2124,0x8c51,0x94b2,0x8c71,0xa514,0x8430,0x9cf3,0x94b2,0x52aa,0x4a69,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x9cf3,0x39e7,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x2945,0x632c,0x7bcf,0x8430,0xad75,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0x9492,0x4a69,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe73c,0xbdf7,0x0000,0x8c51,0x8430,0xbdd7,0xbdd7,0x0000,0x9cd3,0x94b2,0xc638,0xad75,0x18c3,0xe71c,0x31a6,0xa534,0xa534,0x2945,0xdedb,0xdedb,0xe71c,0x9492,0x0020,0x9cd3,0x8430,0xd69a,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdefb,0x5acb,0x6b4d,0xad75,0xa534,0xa534,0xad75,0x4a69,0x73ae,0xe71c,0xdedb,0xe71c,0x6b6d,0x2945,0x8c51,0xad75,0x738e,0xa534,0x9492,0x8430,0xa534,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdefb,0xe71c,0x73ae,0x632c,0x6b4d,0x632c,0x738e,0xad55,0xd69a,0xdedb,0xdefb,0xc618,0x0000,0x528a,0xce79,0xb596,0x8430,0xe71c,0x6b6d,0xd69a,0x9492,0x5aeb,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x630c,0x8410,0xe71c,0xdedb,0xdedb,0xef7d,0x7bef,0x4228,0xe71c,0xdedb,0xe71c,0x738e,0x7bcf,0xdefb,0xa534,0xdedb,0xb5b6,0xc618,0xd6ba,0x9cd3,0x0000,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xc618,0x0000,0x5aeb,0x6b4d,0x6b4d,0x632c,0x738e,0xd69a,0xdedb,0xdedb,0xdefb,0xce59,0x0861,0xad55,0x5acb,0x5acb,0xad55,0x0000,0xad75,0x5acb,0x0000,0x632c,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x738e,0x738e,0xe71c,0xd6ba,0xad75,0xa514,0xad55,0xc618,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x10a2,0x8410,0x1082,0x630c,0x630c,0x1082,0x8410,0x0000,0xad75,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x10a2,0x5acb,0x6b4d,0x6b4d,0x6b4d,0x632c,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x2104,0x9cd3,0x9492,0x8430,0xad75,0x738e,0xad55,0x9492,0x4208,0x4a69,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdefb,0xbdf7,0xb5b6,0xdedb,0xdedb,0xdedb,0xe71c,0x9cf3,0x39e7,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x2945,0x528a,0x632c,0x8410,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0x9492,0x4a69,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe73c,0xbdf7,0x0841,0xdedb,0x630c,0x8410,0xc618,0x0000,0xa534,0xdedb,0xe73c,0xad55,0x10a2,0xad55,0x2945,0xad75,0xad55,0x39e7,0xdedb,0xdedb,0xe71c,0x8c71,0x5acb,0xdefb,0x0000,0xbdf7,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdefb,0x630c,0x0000,0x31a6,0x31a6,0x31a6,0x31a6,0x0000,0x7bef,0xe71c,0xdedb,0xe71c,0x630c,0x8410,0xbdd7,0x39e7,0xce79,0x630c,0x9cd3,0xb5b6,0x1082,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xd69a,0xc638,0xe71c,0xe71c,0xe71c,0xe73c,0xd69a,0x0000,0xbdf7,0xdefb,0xdefb,0xbdf7,0x0841,0xd69a,0xdefb,0xdefb,0xe71c,0xdedb,0xe71c,0xe73c,0x8410,0x630c,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x630c,0x8410,0xe71c,0xdedb,0xdedb,0xd69a,0x8410,0x7bcf,0xdefb,0xdedb,0xe71c,0x73ae,0x6b4d,0xbdd7,0x39c7,0xbdf7,0x6b6d,0x8430,0xb5b6,0x2124,0x0000,0xbdd7,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xbdf7,0x0841,0xd69a,0xe73c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x738e,0x738e,0xe73c,0xd6ba,0x5acb,0x3186,0x0000,0x528a,0xdefb,0xdedb,0xe71c,0x8c51,0x0000,0x6b4d,0xce79,0x632c,0xad55,0xad55,0x632c,0xce79,0x2945,0xad55,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x0000,0xce59,0xe73c,0xe71c,0xe71c,0xdefb,0x2965,0xad55,0xe71c,0xdedb,0xd69a,0x2965,0x0000,0xa514,0xb596,0x4228,0xce79,0x52aa,0xa534,0x9cf3,0x39e7,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x73ae,0x528a,0xe71c,0xdedb,0xdedb,0xe71c,0x9cf3,0x39c7,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x10a2,0xbdf7,0xf79e,0xb5b6,0x39e7,0xc618,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0x9492,0x528a,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe73c,0xc618,0x0841,0xd69a,0x6b4d,0x8c51,0xc638,0x0000,0x2104,0xbdf7,0xe73c,0xad75,0x0000,0x0000,0x0000,0xb596,0xad55,0x39e7,0xdefb,0xdedb,0xe71c,0x9492,0x52aa,0xd6ba,0x18c3,0xc618,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdefb,0x4a69,0x9492,0xe71c,0xdedb,0xdedb,0xe71c,0x738e,0x738e,0xe71c,0xdedb,0xe71c,0x738e,0x0000,0x6b4d,0xd6ba,0x18c3,0xc618,0x8c51,0x6b4d,0xd69a,0x0841,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdefb,0xb5b6,0x18c3,0xd69a,0xdedb,0xdedb,0xdefb,0xce59,0x0020,0xc618,0xdefb,0xdefb,0xc5f7,0x0020,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x630c,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x630c,0x8410,0xe71c,0xdedb,0xdefb,0x4a69,0x9492,0xe71c,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x5acb,0xdedb,0x2965,0xb5b6,0x9cd3,0x52aa,0xd6ba,0x18c3,0xb5b6,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xc5f7,0x0020,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x738e,0x738e,0xe71c,0xdedb,0xdedb,0xe71c,0x9492,0x4a69,0xdefb,0xdedb,0xe71c,0x8410,0x6b4d,0xd69a,0x0841,0xce59,0x7bcf,0x7bcf,0xce79,0x0000,0x0000,0xad75,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x0020,0xc618,0xdefb,0xdedb,0xdedb,0xd6ba,0x2945,0xad55,0xe71c,0xdedb,0xd69a,0x18c3,0xc618,0x8c51,0x6b4d,0xd69a,0x0841,0xce59,0x8c51,0x0000,0x52aa,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x8410,0x630c,0xe71c,0xdedb,0xdedb,0xe71c,0x9cf3,0x39e7,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x18c3,0xb5b6,0xdefb,0xdefb,0xce59,0x0020,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0x9492,0x4a69,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe73c,0xc618,0x0841,0xd69a,0x6b4d,0x8c51,0xc618,0x18c3,0xd69a,0xdedb,0xe71c,0xad75,0x0000,0x0000,0x0000,0xb596,0xad55,0x39e7,0xdedb,0xdedb,0xe71c,0x9492,0x52aa,0xd6ba,0x18c3,0xc618,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdefb,0x39e7,0x8c51,0xe73c,0xdedb,0xdedb,0xe73c,0x632c,0x632c,0xe71c,0xdedb,0xe71c,0x630c,0x8410,0xbdf7,0x528a,0xce79,0x6b6d,0x9cf3,0xbdd7,0x31a6,0x0000,0xc618,0xe73c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xd6ba,0xbdf7,0x4228,0x2965,0x31a6,0x2945,0x528a,0xc618,0xd6ba,0xdedb,0xdefb,0xbdf7,0x0841,0xd69a,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xef7d,0x8430,0x5aeb,0xe71c,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xe71c,0x632c,0x0000,0x39c7,0x3186,0x2124,0xad55,0xd6ba,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x738e,0xc638,0x4a69,0xce59,0x7bcf,0x9492,0xbdf7,0x4208,0x0000,0xbdd7,0xe73c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xbdf7,0x0000,0xc638,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xd6ba,0x9cd3,0x10a2,0x31a6,0x31a6,0x18c3,0x8430,0xd69a,0xdedb,0xdedb,0xe71c,0x8c51,0x0000,0x6b4d,0xce79,0x632c,0xad55,0xad55,0x632c,0xce79,0x2945,0xad55,0xe73c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xc638,0x0000,0xbdf7,0xdefb,0xdedb,0xdedb,0xd6ba,0x0000,0xa534,0xe71c,0xdedb,0xd69a,0x2965,0x2104,0xa534,0xb596,0x5acb,0xce79,0x632c,0xad75,0x9cf3,0x39e7,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xd6ba,0xa514,0x18c3,0x31a6,0x31a6,0x10a2,0x7bef,0xd69a,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xce79,0x0000,0xb596,0xdefb,0xdedb,0xdedb,0xc638,0x4a49,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xe71c,0x9492,0x0000,0x31a6,0x31a6,0x31a6,0x31a6,0x2124,0x52aa,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe73c,0xbdf7,0x0000,0xd69a,0x5acb,0x8430,0xc618,0x0000,0x3186,0x0841,0xa514,0xdefb,0xb5b6,0x0000,0xad55,0xe71c,0xa514,0x0000,0x31a6,0x10a2,0xbdf7,0x94b2,0x4228,0xd6ba,0x0000,0xbdf7,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xef5d,0xdedb,0xdedb,0xb596,0xc618,0xdefb,0xdedb,0xdedb,0xdefb,0xbdd7,0xbdd7,0xdefb,0xdedb,0xe71c,0x630c,0x2945,0x5aeb,0x0000,0x6b6d,0x0000,0x4208,0x5acb,0x0000,0x0000,0xbdf7,0xef7d,0xad75,0x0000,0x18c3,0xd69a,0xe71c,0xdedb,0xdedb,0xdedb,0xad55,0xa514,0xa534,0xa514,0xad75,0xdefb,0xdedb,0xdedb,0xdefb,0xbdf7,0x0000,0x5aeb,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b6d,0x0861,0x630c,0xe71c,0xe73c,0x5acb,0x0000,0x8430,0xef5d,0xdedb,0xdedb,0xbdd7,0xa534,0xa534,0xa534,0xa514,0xd69a,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0861,0x632c,0x0000,0x6b4d,0x0000,0x3186,0x630c,0x0000,0x0000,0xb5b6,0xef7d,0xbdd7,0x0000,0x0000,0xce59,0xe71c,0xdedb,0xd69a,0xad55,0xd69a,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0xdefb,0xef5d,0x6b4d,0x0000,0x7bcf,0xef5d,0xdedb,0xdedb,0xdefb,0xce59,0x9cf3,0xa534,0xa534,0x9cf3,0xc618,0xe71c,0xdedb,0xdedb,0xe71c,0x8430,0x0000,0x0000,0x738e,0x0000,0x4a69,0x4a69,0x0000,0x738e,0x0000,0xad55,0xef7d,0xc618,0x0000,0x0000,0xc618,0xe73c,0xdedb,0xd69a,0xad55,0xd69a,0xdedb,0xdedb,0xdedb,0xdedb,0xad75,0xce59,0xdedb,0xdedb,0xce79,0x0000,0x0000,0x4a49,0x52aa,0x0000,0x738e,0x0000,0x4a69,0x4a49,0x31a6,0xdedb,0xef5d,0x7bcf,0x0000,0x6b4d,0xe73c,0xdedb,0xdedb,0xdefb,0xce79,0xa514,0xa534,0xa534,0xa514,0xbdf7,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xce59,0x0000,0x0000,0xbdd7,0xe73c,0xdedb,0xd6ba,0xad55,0xce79,0xdedb,0xdedb,0xdedb,0xdefb,0xad75,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xef5d,0x8430,0x0000,0x5acb,0xe73c,0xdedb,0xdefb,0xc638,0xa534,0xa534,0xa534,0xa534,0xa534,0xa514,0xad75,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xd69a,0x18c3,0x0000,0xad75,0xef5d,0xce79,0xad55,0xd6ba,0xbdd7,0xc618,0xd69a,0xad55,0xa534,0xa514,0xc618,0xdefb,0xd6ba,0xad55,0xd6ba,0xdefb,0xc638,0xa534,0xa534,0xa514,0xce79,0xc638,0xb596,0xd6ba,0xad55,0xdefb,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630c,0xb5b6,0xe71c,0xdefb,0xe73c,0xe71c,0xdefb,0xdefb,0xdefb,0xdefb,0xe73c,0xe73c,0xdefb,0xdefb,0xe71c,0xad75,0x8410,0x8430,0x9492,0x8430,0x8c71,0x8c51,0x8430,0x9492,0x8c71,0xd6ba,0xc618,0x738e,0x0000,0x1082,0x8c71,0xce79,0xe71c,0xdefb,0xdefb,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xdefb,0xdefb,0xdefb,0xe71c,0xd69a,0x8c71,0x8430,0x8410,0x8430,0x8430,0x8430,0x8430,0x8410,0x8430,0xad75,0xdefb,0xa514,0x39c7,0x0000,0x5acb,0xb596,0xe71c,0xdefb,0xe73c,0xef5d,0xe73c,0xe73c,0xe73c,0xe71c,0xdefb,0xdefb,0xdefb,0xdefb,0xe73c,0xb596,0x8410,0x8430,0x9492,0x8430,0x8c71,0x8c51,0x8430,0x9492,0x8c71,0xd69a,0xc638,0x7bcf,0x0000,0x0000,0x8430,0xce59,0xe71c,0xe71c,0xe73c,0xe71c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xe71c,0xd6ba,0x9492,0x8c71,0x9492,0x9492,0x9492,0x9492,0x9492,0x9492,0x8c51,0xad55,0xdefb,0xa534,0x4228,0x0000,0x4a69,0xad75,0xdefb,0xdefb,0xdefb,0xe71c,0xef5d,0xe73c,0xe73c,0xef5d,0xe71c,0xdefb,0xdefb,0xdefb,0xe73c,0xbdd7,0x8c51,0x8c71,0x8430,0x8c71,0x8c51,0x8c51,0x8c71,0x8430,0x8c51,0xce79,0xce79,0x8410,0x0000,0x0000,0x8410,0xc638,0xe71c,0xe71c,0xe73c,0xe71c,0xdefb,0xdefb,0xdefb,0xdefb,0xe73c,0xe71c,0xdefb,0xe71c,0xdedb,0x94b2,0x8c71,0x8c51,0x8430,0x9492,0x8430,0x8c71,0x8c51,0x8410,0xa514,0xdefb,0xad75,0x4a69,0x0000,0x4228,0xa534,0xdedb,0xe71c,0xdefb,0xe71c,0xef5d,0xe73c,0xe73c,0xef5d,0xe73c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xe71c,0xce59,0x8430,0x0000,0x0000,0x7bcf,0xc618,0xe71c,0xdefb,0xe73c,0xe71c,0xdefb,0xdefb,0xdefb,0xdefb,0xe73c,0xe71c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xe71c,0xb596,0x5acb,0x0000,0x39e7,0xa514,0xdedb,0xe71c,0xe71c,0xef5d,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xe73c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xe71c,0xce79,0x8c71,0x1082,0x0000,0x738e,0xbdf7,0xe73c,0xe73c,0xdefb,0xe73c,0xe71c,0xe71c,0xe73c,0xe73c,0xef5d,0xe71c,0xdefb,0xe71c,0xe73c,0xe71c,0xdefb,0xe71c,0xef5d,0xe73c,0xef5d,0xe71c,0xe71c,0xe73c,0xdefb,0xef5d,0xbdd7,0x630c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x4208,0xbdf7,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xce59,0xce59,0xc638,0x630c,0x0000,0x0861,0x0000,0x0000,0x9492,0xc618,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xce59,0xad75,0x0000,0x0000,0x1082,0x0000,0x2965,0xbdf7,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xc618,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xce59,0xce59,0x738e,0x0000,0x0861,0x0020,0x0000,0x8430,0xc618,0xbdd7,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xce59,0xc638,0xb5b6,0x0000,0x0000,0x1082,0x0000,0x10a2,0xb5b6,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdd7,0xc618,0xce59,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xce59,0xce59,0x7bef,0x0000,0x0841,0x0841,0x0000,0x7bef,0xc618,0xbdd7,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xc638,0xce59,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xce59,0xc638,0xbdd7,0x10a2,0x0000,0x1082,0x0000,0x0000,0xb5b6,0xbdf7,0xbdd7,0xbdf7,0xbdf7,0xbdd7,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xc638,0x8c51,0x0000,0x0020,0x0861,0x0000,0x6b6d,0xc638,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdf7,0xbdd7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0x3186,0x0000,0x1082,0x0000,0x0000,0xad75,0xbdf7,0xbdd7,0xbdf7,0xbdf7,0xbdd7,0xbdd7,0xbdd7,0xbdf7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xc638,0x94b2,0x0000,0x0000,0x0861,0x0000,0x630c,0xc638,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xbdf7,0xc618,0x4228,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x1082,0x0000,0x0000,0x0000,0x10a2,0x0861,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x10a2,0x1082,0x0000,0x0000,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0861,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x1082,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x1082,0x0000,0x0000,0x0000,0x10a2,0x1082,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x10a2,0x1082,0x1082,0x0000,0x0000,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0861,0x10a2,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x10a2,0x0000,0x0000,0x0000,0x10a2,0x1082,0x0000,0x0000,0x0000,0x0000,0x10a2,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0861,0x10a2,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x10a2,0x2124,0x0000,0x0020,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x2124,0x1082,0x0000,0x0000,0x0000,0x0000,0x10a2,0x10a2,0x0861,0x0000,0x0020,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x1082,0x2945,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x10a2,0x0000,0x0000,0x10a2,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x5aeb,0xd69a,0x1082,0x0000,0x9492,0xdefb,0xc638,0x0000,0x0000,0x0000,0x7bef,0xc638,0x0000,0x0000,0x0000,0x8430,0xe71c,0xce79,0x18c3,0xad55,0xe71c,0xad55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb5b6,0x9cf3,0x0000,0x2965,0xc638,0xdefb,0x8430,0x0000,0x0000,0x0000,0xc638,0x7bef,0x0000,0x0000,0x0000,0xce79,0x6b6d,0x0000,0x0000,0x0861,0xce79,0xe71c,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x4a49,0xd6ba,0x3186,0x0000,0x8430,0xdedb,0xce79,0x0861,0x0000,0x0000,0x6b6d,0xce79,0x0000,0x0000,0xa514,0xdedb,0xd69a,0xd69a,0x2945,0xa514,0xdefb,0xb5b6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9cf3,0xe71c,0xbdf7,0x0000,0x0000,0xb5b6,0xa514,0x0000,0x2965,0xc638,0xdefb,0x8430,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x3186,0xd6ba,0x4a49,0x0000,0x7bcf,0xdedb,0xd69a,0x2965,0x0000,0x0000,0x52aa,0xdedb,0xdedb,0x630c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x9492,0xe71c,0xc638,0x18c3,0x0000,0xad55,0xad55,0x0000,0x10a2,0xbdf7,0xe71c,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630c,0xce59,0x10a2,0xb5b6,0x8c71,0x0000,0x3186,0xd6ba,0x4a49,0x0000,0x8410,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0x9cd3,0x0000,0x0000,0x0000,0xad75,0xd6ba,0xdedb,0xc638,0x0000,0xb5b6,0xe71c,0x9cf3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x528a,0xce79,0x2945,0xad75,0x9cf3,0x0000,0x0861,0xce59,0xe71c,0x7bef,0x5acb,0xd6ba,0xd6ba,0x4228,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bef,0xad55,0x5aeb,0xb5b6,0x39e7,0x9cf3,0xc618,0x630c,0xc618,0x39e7,0x8c51,0xa514,0x7bef,0xc618,0x2945,0xa514,0xa514,0x52aa,0x6b4d,0x0000,0xc618,0xad75,0x8410,0xad75,0x10a2,0x0000,0x0000,0x0000,0x0000,0x10a2,0xad75,0x7bcf,0x8c71,0x9cf3,0x2104,0xd6ba,0x7bef,0x9cd3,0xa514,0x2104,0xb5b6,0x7bcf,0xad55,0x94b2,0x3186,0xb5b6,0x738e,0xb596,0x8430,0x4a49,0xc618,0x632c,0x6b6d,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x738e,0xb575,0x5aeb,0xb596,0x4a69,0x8c71,0xce79,0x5aeb,0xc618,0x4a69,0x7bef,0xad55,0x73ae,0xc618,0x4228,0x39c7,0xad55,0xd69a,0x6b4d,0x0000,0xbdd7,0xb5b6,0x7bcf,0xb596,0x2945,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0x8c71,0x5acb,0x630c,0x1082,0xad75,0x9492,0x31a6,0x0000,0x31a6,0xd6ba,0x8c71,0x9cd3,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0xb596,0x5aeb,0xad75,0x5aeb,0x7bef,0xd69a,0x5acb,0xbdf7,0x5acb,0x7bcf,0xb5b6,0x52aa,0x738e,0x31a6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0x9cd3,0x5acb,0x632c,0x0000,0xa534,0x8c71,0x8c71,0xa534,0x0861,0xd69a,0x8c51,0x9492,0xad75,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xdedb,0x18c3,0xc638,0x9492,0x4a69,0xb596,0x5aeb,0xad75,0x5aeb,0x8410,0xce79,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdf7,0xa534,0x0000,0x0000,0x0000,0xc638,0xad55,0x52aa,0x632c,0x0000,0xce59,0xa514,0x8c51,0xa534,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xdedb,0x2965,0xbdd7,0x9cf3,0x4228,0xc618,0x632c,0x6b6d,0x3186,0x73ae,0xdedb,0x5aeb,0xbdd7,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xdedb,0x9cd3,0xe71c,0x52aa,0x94b2,0xd69a,0x9492,0x9492,0x0841,0xb596,0xad75,0x0000,0x9492,0x18e3,0x7bcf,0xa534,0x7bcf,0x0000,0x0000,0xc638,0x8430,0x630c,0xdedb,0x18c3,0x0000,0x0000,0x0000,0x0000,0x18c3,0xd6ba,0xad75,0xbdf7,0xc618,0x10a2,0xd69a,0xad75,0x94b2,0x6b6d,0x39e7,0xe71c,0x4208,0x632c,0x6b6d,0x528a,0xdefb,0x2124,0x738e,0x632c,0x39c7,0x9cf3,0x9cf3,0x18c3,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x8c51,0xdefb,0x94b2,0xe71c,0x6b4d,0x8430,0xd6ba,0x9492,0x94b2,0x18e3,0xa534,0xbdf7,0x0000,0x9492,0x39e7,0x0000,0x8410,0xce59,0x0000,0x0000,0xbdf7,0x94b2,0x4a69,0xdefb,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xa514,0x632c,0x0000,0x18e3,0xdedb,0x6b4d,0x4a69,0x8430,0x2124,0xd6ba,0x4228,0x9cf3,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bcf,0xe71c,0x94b2,0xdefb,0x7bcf,0x73ae,0xdedb,0x94b2,0x94b2,0x39e7,0x5aeb,0xa514,0x8c71,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8430,0xa534,0x738e,0x0000,0x0000,0xd6ba,0x6b6d,0x6b6d,0xd69a,0x0020,0xce79,0xb596,0x9492,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xd6ba,0x0000,0xbdf7,0x8c51,0x6b4d,0xe71c,0x94b2,0xdefb,0x7bcf,0x7bcf,0xce79,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xa534,0x0000,0x0000,0x0000,0xbdf7,0xc638,0x6b6d,0x0000,0x0000,0xce79,0x738e,0x73ae,0xd69a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xdedb,0x2965,0xb5b6,0x9cf3,0x2945,0x9cf3,0x9cf3,0x18c3,0x0000,0x7bcf,0xdedb,0x9cd3,0x94b2,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xdefb,0xbdf7,0xdefb,0x528a,0x9492,0xdefb,0xb596,0x5aeb,0x0000,0xb596,0xad75,0x0000,0x630c,0x2124,0x0000,0x738e,0xb5b6,0x6b4d,0x0000,0xc618,0x8c51,0x6b4d,0xd69a,0x18c3,0x0000,0x0000,0x0000,0x0000,0x18c3,0xce59,0xce59,0xd69a,0xbdd7,0x18c3,0xd69a,0xce79,0x9492,0x2965,0x4208,0xdefb,0x4a69,0x39e7,0x4208,0x52aa,0xdefb,0x39c7,0x4a49,0x4a69,0x0000,0x0000,0xb5b6,0x9492,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x8410,0xdefb,0xbdf7,0xdefb,0x630c,0x8410,0xdefb,0xb5b6,0x632c,0x0000,0xa534,0xbdd7,0x0000,0x630c,0x2945,0x0000,0x8c51,0xce79,0x0000,0x0000,0xbdd7,0x9cd3,0x52aa,0xd6ba,0x3186,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x8c51,0xad75,0x5aeb,0x10a2,0xd6ba,0x630c,0x9492,0xce79,0x10a2,0xd6ba,0x52aa,0x9cd3,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xdefb,0xbdf7,0xdefb,0x738e,0x738e,0xdefb,0xb5b6,0x738e,0x3186,0x0000,0x39e7,0xbdd7,0x7bef,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x7bef,0xb596,0x632c,0x0000,0xce59,0x9cf3,0x9cf3,0xc638,0x0020,0xce59,0xd69a,0x94b2,0x4208,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xdefb,0x738e,0xce79,0x8c51,0x630c,0xdefb,0xbdf7,0xdefb,0x738e,0x7bcf,0xce59,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xa514,0x0000,0x0000,0x0000,0xbdf7,0xd6ba,0x9492,0x0000,0x0000,0xce79,0x7bcf,0x7bcf,0xce79,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xdedb,0x2104,0xb5b6,0xa534,0x0000,0x0000,0xb5b6,0x9492,0x2965,0x6b6d,0xdefb,0xc618,0x73ae,0x2965,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9cd3,0xbdf7,0x0000,0xd6ba,0x52aa,0x9cf3,0xb596,0x0861,0xe71c,0x4a49,0x9cf3,0xa534,0x5aeb,0xd69a,0x4208,0x2945,0x2104,0x6b6d,0xd69a,0x18c3,0xc618,0x8c51,0x6b4d,0xd69a,0x18c3,0x0000,0x0000,0x0000,0x0000,0x18c3,0xd69a,0x5aeb,0x8430,0xc618,0x18c3,0xd6ba,0x4228,0x9cf3,0xbdf7,0x2124,0xce59,0x5acb,0xad75,0xa534,0x39c7,0xce59,0x4a69,0xb5b6,0x9cf3,0x0000,0x4208,0x1082,0xc618,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xce59,0x0000,0xd69a,0x6b4d,0x8c71,0xbdf7,0x0000,0xdefb,0x5aeb,0x8c71,0xb596,0x528a,0xd69a,0x52aa,0x0000,0x8c51,0xce79,0x0000,0x0000,0xbdd7,0x9cd3,0x52aa,0xd6ba,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x39c7,0x0861,0x8c51,0xc638,0x0000,0xc618,0x73ae,0x8c71,0xb5b6,0x18e3,0xd6ba,0x52aa,0x9cf3,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bcf,0xd69a,0x0000,0xce59,0x7bcf,0x7bcf,0xce79,0x2945,0xce79,0x73ae,0x0000,0x31a6,0x39e7,0xd69a,0x632c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39c7,0x18c3,0x7bcf,0xce79,0x0841,0xb596,0xdefb,0xe73c,0xbdf7,0x0841,0xd69a,0x5aeb,0x8c51,0xce79,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0xd69a,0xe71c,0xdedb,0x73ae,0x6b4d,0xd69a,0x0000,0xce59,0x7bcf,0x7bcf,0xce79,0x39c7,0x4208,0x2104,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xad75,0x2124,0x39e7,0x0000,0xc638,0x9cd3,0x0000,0x39c7,0x0000,0xce79,0x7bcf,0x7bcf,0xce79,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0xdedb,0x528a,0xbdf7,0xa514,0x0000,0x4208,0x1082,0xc618,0x8430,0x6b4d,0xd69a,0x0000,0xd69a,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9cd3,0xc638,0x18c3,0xdedb,0x52aa,0x9cf3,0xbdd7,0x2965,0xdedb,0x5acb,0x0000,0x8c51,0xce79,0x10a2,0x0000,0xad75,0xe73c,0xbdd7,0x0000,0x0000,0xc638,0x8c71,0x6b4d,0xd6ba,0x18c3,0x0000,0x0000,0x0000,0x0000,0x18c3,0xd6ba,0x6b4d,0x8c71,0xc638,0x18c3,0xdedb,0x52aa,0x9cf3,0xbdf7,0x0000,0x1082,0xce79,0x8c51,0x0000,0x0000,0x2945,0xd69a,0x7bef,0x0000,0x630c,0xdefb,0xdefb,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xce79,0x0020,0xd6ba,0x6b4d,0x8c71,0xc638,0x18c3,0xdedb,0x6b4d,0x0000,0x7bef,0xd69a,0x2945,0x0000,0x0000,0x8c51,0xce79,0x0000,0x0000,0xbdf7,0x9cf3,0x52aa,0xdedb,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xe73c,0xa534,0x0000,0x0000,0x0000,0xbdd7,0xa534,0x0000,0x3186,0xdedb,0x52aa,0x9cf3,0xbdf7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bcf,0xd6ba,0x0020,0xce79,0x7bef,0x738e,0xe73c,0xd6ba,0x4a69,0x0000,0x8c71,0xe73c,0xd69a,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xe73c,0xb596,0x0000,0x0000,0x0000,0xad55,0xef5d,0xc618,0x0841,0xd6ba,0x6b4d,0x8c71,0xc638,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0xdedb,0x738e,0x0000,0x7bcf,0xd6ba,0x0020,0xce79,0x7bef,0x738e,0xe73c,0xdedb,0xe71c,0x738e,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xe71c,0xdedb,0xce79,0x18c3,0xbdd7,0xe71c,0xdedb,0xce59,0x0020,0xce79,0x7bef,0x7bef,0xce79,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0xdefb,0xdedb,0xe73c,0x9492,0x4a69,0xdefb,0xdefb,0x6b4d,0x0000,0x7bcf,0xd6ba,0x0020,0xce79,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0x4a69,0x0841,0x52aa,0x2104,0x39e7,0x4a49,0x1082,0x5acb,0x2124,0x0000,0x31a6,0x52aa,0x0000,0x0000,0x4a49,0x630c,0x4a69,0x0000,0x0000,0x528a,0x39c7,0x2945,0x52aa,0x0841,0x0000,0x0000,0x0000,0x0000,0x0841,0x52aa,0x2945,0x39c7,0x4a69,0x0841,0x52aa,0x2104,0x39e7,0x4a69,0x0000,0x0000,0x52aa,0x31a6,0x0000,0x0000,0x0000,0x5acb,0x2965,0x0000,0x2945,0x5aeb,0x5aeb,0x2124,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x31a6,0x528a,0x0000,0x52aa,0x2945,0x39c7,0x4a69,0x0841,0x52aa,0x2945,0x0000,0x2965,0x5acb,0x0000,0x0000,0x0000,0x31a6,0x528a,0x0000,0x0000,0x4a69,0x39e7,0x2104,0x52aa,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x528a,0x630c,0x4228,0x0000,0x0000,0x0000,0x4a69,0x4208,0x0000,0x10a2,0x52aa,0x2104,0x39e7,0x4a69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3186,0x52aa,0x0000,0x528a,0x3186,0x2965,0x5aeb,0x5acb,0x1082,0x0000,0x39e7,0x630c,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a69,0x630c,0x4a49,0x0000,0x0000,0x0000,0x4208,0x5aeb,0x4a69,0x0000,0x52aa,0x2945,0x39c7,0x528a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0x2124,0x0000,0x3186,0x52aa,0x0000,0x528a,0x3186,0x2965,0x5aeb,0x5acb,0x5aeb,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0x5aeb,0x5aeb,0x5acb,0x0841,0x4a49,0x5aeb,0x5aeb,0x52aa,0x0000,0x528a,0x3186,0x3186,0x528a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0x5acb,0x5aeb,0x5aeb,0x39c7,0x2104,0x5aeb,0x5aeb,0x2124,0x0000,0x3186,0x52aa,0x0000,0x528a,0x31a6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0841,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0841,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x1082,0x0000,0x0000,0x0000,0x10a2,0x0861,0x0000,0x0020,0x10a2,0x10a2,0x0861,0x0000,0x0841,0x10a2,0x0000,0x1082,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x10a2,0x0020,0x0000,0x0861,0x10a2,0x0000,0x0000,0x0000,0x0861,0x10a2,0x10a2,0x10a2,0x0841,0x0000,0x0861,0x10a2,0x0000,0x0000,0x1082,0x10a2,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x1082,0x0000,0x0000,0x0000,0x1082,0x1082,0x0000,0x0000,0x10a2,0x10a2,0x0861,0x0000,0x0020,0x10a2,0x10a2,0x10a2,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x10a2,0x0841,0x0000,0x0861,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0841,0x10a2,0x10a2,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x10a2,0x10a2,0x0000,0x0000,0x1082,0x1082,0x0000,0x0000,0x10a2,0x10a2,0x0861,0x0000,0x0000,0x0000,0x10a2,0x0861,0x0000,0x0020,0x10a2,0x0841,0x0000,0x0861,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0841,0x10a2,0x10a2,0x0841,0x0000,0x0841,0x10a2,0x10a2,0x10a2,0x0841,0x0861,0x10a2,0x0000,0x10a2,0x0841,0x0861,0x10a2,0x10a2,0x10a2,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x10a2,0x1082,0x0000,0x0000,0x0000,0x1082,0x1082,0x0000,0x0000,0x10a2,0x0861,0x0861,0x10a2,0x0000,0x0000,0x1082,0x10a2,0x1082,0x0000,0x10a2,0x10a2,0x10a2,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x10a2,0x1082,0x0000,0x0000,0x1082,0x10a2,0x1082,0x0000,0x0000,0x1082,0x10a2,0x10a2,0x10a2,0x0000,0x0000,0x1082,0x1082,0x0000,0x0000,0x10a2,0x0841,0x0861,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0x9cd3,0x0000,0x0000,0x0000,0xbdf7,0x8c51,0x0000,0x4208,0xc638,0xdedb,0x738e,0x0000,0x528a,0xce59,0x2945,0xad55,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x4208,0xd69a,0x2945,0x0000,0x8c71,0xb5b6,0x0000,0x0000,0x0000,0x8c71,0xd6ba,0xd69a,0xd69a,0x528a,0x0000,0x7bcf,0xc638,0x0000,0x0000,0xa514,0xdedb,0xb596,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0020,0x0000,0xa534,0xa534,0x0000,0x0000,0x0000,0xb596,0x9cd3,0x0000,0x2965,0xc618,0xdefb,0x8410,0x0000,0x4208,0xce79,0xce59,0xd6ba,0xa514,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x2945,0xd69a,0x4208,0x0000,0x7bef,0xbdf7,0x0000,0x0000,0x0861,0x0000,0x528a,0xd6ba,0xd6ba,0x630c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x8c71,0xdefb,0xc618,0x18c3,0x0000,0xa534,0xa534,0x0000,0x18c3,0xbdd7,0xdefb,0x8c71,0x0000,0x0000,0x0000,0xbdf7,0x8c51,0x0000,0x4208,0xce59,0x528a,0x0000,0x7bef,0xbdf7,0x0000,0x0000,0x0000,0x0000,0x5aeb,0xce79,0xd6ba,0x528a,0x0000,0x6b4d,0xd69a,0xd69a,0xdedb,0x6b6d,0x738e,0xbdd7,0x0020,0xc618,0x5aeb,0x7bef,0xdedb,0xce59,0xd6ba,0x630c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa514,0xdedb,0xb596,0x0000,0x0000,0x0000,0x9cd3,0xb596,0x0000,0x0000,0xbdf7,0x738e,0x738e,0xbdf7,0x0000,0x0000,0xa534,0xe71c,0xb596,0x10a2,0xc618,0xd69a,0xdedb,0xad55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xdedb,0xbdd7,0x0000,0x0000,0xa514,0xdedb,0xb596,0x0000,0x0000,0xad55,0xd69a,0xd6ba,0xc618,0x18c3,0x0000,0xa534,0xa534,0x0000,0x18c3,0xc618,0x630c,0x8410,0xb5b6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x10a2,0xa534,0x8c51,0x9cf3,0xa514,0x1082,0xad55,0x8430,0x9cf3,0x8c71,0x31a6,0xdefb,0x8410,0xa514,0x8c51,0x4a69,0xe73c,0x0000,0xbdf7,0xad75,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xad75,0x7bcf,0xbdd7,0x528a,0x9492,0xce59,0x0000,0x0000,0x0000,0xa534,0xce59,0x630c,0x7bcf,0x1082,0x8430,0x9cf3,0x73ae,0xad75,0x10a2,0xbdd7,0xb5b6,0x7bcf,0xb5b6,0x2945,0x0000,0x0000,0x0000,0x0000,0x0000,0xa514,0x9492,0x94b2,0xad55,0x0000,0xa534,0x8c71,0x94b2,0x94b2,0x2124,0xdedb,0x94b2,0x9cd3,0x8c71,0x0000,0x73ae,0xd6ba,0xad75,0x528a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0xad75,0x7bcf,0xbdb6,0x630c,0x8410,0xce79,0x0000,0x0000,0x0000,0x7bef,0xb596,0x632c,0x7bef,0x39c7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa534,0x9cd3,0x6b4d,0x738e,0x0000,0x9cf3,0x9492,0x94b2,0xad55,0x0861,0xd69a,0x94b2,0x9492,0xa514,0x1082,0xad55,0x8430,0x9cf3,0x8c71,0x39c7,0xdefb,0x5acb,0x0000,0x8c51,0xd69a,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xdefb,0x8410,0xad55,0x632c,0x6b6d,0xdedb,0x6b6d,0x7bcf,0x2945,0x8c71,0xd6ba,0x0000,0xdefb,0x7bef,0x2945,0x9cf3,0xdedb,0x8430,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xb5b6,0x7bcf,0xb5b6,0x18c3,0x94b2,0x8c71,0x8410,0xa534,0x0000,0xce79,0x7bef,0x7bef,0xce79,0x0000,0xb596,0x8c51,0x6b6d,0x632c,0x2945,0xdedb,0x9492,0x6b6d,0x632c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xbdf7,0x738e,0xbdd7,0x18e3,0xbdd7,0xb5b6,0x7bcf,0xb5b6,0x0841,0xc618,0xad75,0x632c,0x738e,0x0000,0xa514,0x8430,0x8430,0x9cf3,0x1082,0xd6ba,0x5acb,0x8c71,0xd69a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xdedb,0x6b4d,0x528a,0x8c51,0x2945,0xdefb,0x4a49,0x9cd3,0xbdf7,0x2945,0xd6ba,0x9cd3,0x9cf3,0x7bcf,0x2945,0x9cd3,0x8c71,0x9cf3,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xd69a,0x0000,0x94b2,0x4208,0x9492,0xc638,0x0000,0x0000,0x0000,0x9cf3,0xce79,0x73ae,0x0000,0x0000,0xb596,0xce59,0x94b2,0xdefb,0x3186,0xb596,0xc618,0x8c51,0x94b2,0x2104,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6ba,0x7bef,0x39e7,0x9492,0x1082,0xdedb,0x630c,0x8c51,0xce59,0x18c3,0xd6ba,0x4208,0x9cf3,0xc618,0x0000,0x0000,0xce59,0x8410,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bef,0xdedb,0x0000,0x8c71,0x528a,0x8410,0xce79,0x0000,0x0000,0x0000,0x6b6d,0xad55,0x8410,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xa514,0x630c,0x0000,0x0000,0xd6ba,0x7bef,0x39e7,0x9492,0x1082,0xce79,0xad55,0x9492,0x8410,0x2945,0xdefb,0x4a49,0x9cd3,0xbdf7,0x2945,0xdedb,0x5acb,0x0000,0x8c51,0xce79,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xd6ba,0x0000,0xc638,0x9492,0x630c,0xdedb,0x8c71,0x1082,0x0000,0x52aa,0x9cd3,0x94b2,0x94b2,0x4a69,0x0000,0x5aeb,0xd6ba,0x0841,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb5b6,0xbdf7,0x8c51,0x9cf3,0x0000,0xc638,0xbdd7,0xa534,0xd6ba,0x0841,0xce59,0x7bcf,0x7bcf,0xce59,0x0000,0x9cd3,0x9cf3,0x4a69,0x0000,0x31a6,0xd69a,0xad55,0x4228,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad55,0xc638,0x8430,0x9cd3,0x0000,0xb596,0xc618,0x8c51,0x94b2,0x0000,0xbdf7,0xbdf7,0x630c,0x0000,0x0000,0xce79,0xb596,0xb596,0xce79,0x0000,0xce79,0xb596,0x9492,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xd6ba,0x73ae,0x1082,0x4228,0x2965,0xdedb,0x528a,0x9cd3,0xbdd7,0x2945,0xd6ba,0xd69a,0x632c,0x0000,0x0000,0x0000,0xdedb,0x738e,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xce79,0x0000,0x4a69,0x0000,0x94b2,0xc618,0x0000,0x0000,0x0000,0x9cd3,0xdefb,0xb596,0x0000,0x0000,0xa534,0xdedb,0xce59,0xd6ba,0x2945,0xad75,0xdefb,0xad75,0x4208,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0xce79,0x8430,0x0000,0x4a69,0x18c3,0xd6ba,0x632c,0x8c51,0xc638,0x18c3,0xd6ba,0x52aa,0x9cd3,0xbdd7,0x0000,0x0000,0xce79,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bcf,0xd6ba,0x0000,0x4a49,0x0020,0x8430,0xce59,0x0000,0x0000,0x0020,0x0000,0x4228,0xc618,0x738e,0x2945,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x8430,0xb5b6,0x52aa,0x0000,0xce79,0x8430,0x0000,0x4a69,0x10a2,0xce59,0xd6ba,0x94b2,0x2124,0x2965,0xdedb,0x528a,0x9cd3,0xbdd7,0x2965,0xdedb,0x528a,0x0000,0x8c51,0xce59,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xd6ba,0x18c3,0xc618,0x8c51,0x630c,0xdefb,0xc638,0x4228,0x0000,0x2104,0x738e,0xc638,0x632c,0x18e3,0x0000,0x6b4d,0xd6ba,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xdefb,0xa514,0x0000,0x0000,0xbdd7,0xd69a,0xce79,0xce59,0x0020,0xce59,0x73ae,0x73ae,0xce79,0x0000,0x0000,0x9cf3,0xad55,0x4228,0x2965,0xd69a,0xd69a,0x7bcf,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa534,0xdefb,0xb596,0x528a,0x0000,0xb596,0xdefb,0xad75,0x4208,0x0000,0xbdd7,0xdedb,0x9cd3,0x0000,0x0000,0xc618,0xd69a,0xd69a,0xc618,0x0020,0xce59,0xd6ba,0x94b2,0x2965,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xce59,0x6b6d,0x9492,0xbdf7,0x10a2,0xce79,0x630c,0x9cd3,0xad75,0x3186,0xdedb,0x4a69,0x0000,0x0841,0x0000,0x18c3,0xd69a,0x7bcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8410,0xc638,0x3186,0xd69a,0x632c,0x8c51,0xc638,0x18e3,0x3186,0x0000,0xa514,0xbdf7,0x0000,0x3186,0x0000,0xb596,0xa534,0x3186,0xdedb,0x2965,0xb5b6,0x94b2,0x4a69,0xdefb,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0x7bef,0x8410,0xc638,0x0020,0xce59,0x6b6d,0x8c71,0xbdd7,0x18e3,0xd6ba,0x52aa,0x9cd3,0xbdd7,0x0000,0x0000,0xce79,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0xce59,0x3186,0xce59,0x7bcf,0x7bcf,0xce79,0x2945,0x3186,0x10a2,0x18e3,0x2124,0x39c7,0xd6ba,0x632c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2965,0x0000,0x7bcf,0xce79,0x0841,0xc618,0x7bef,0x8410,0xc638,0x0841,0xd69a,0x5aeb,0x8c51,0xc638,0x10a2,0xce79,0x630c,0x9cd3,0xad75,0x2965,0xdedb,0x632c,0x0000,0x8430,0xce79,0x2945,0x0841,0x0000,0x0000,0x6b4d,0xd6ba,0x18c3,0xc618,0x8c51,0x6b4d,0xd69a,0x2124,0x2945,0x0000,0x8c51,0xce79,0x0000,0xd6ba,0x7bef,0x0000,0x6b4d,0xd6ba,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xa514,0x0000,0x0000,0x0000,0xc638,0x8430,0x630c,0xd69a,0x0841,0xce59,0x8410,0x8410,0xce59,0x0000,0x2965,0x0000,0x94b2,0xbdf7,0x18c3,0xd6ba,0x6b6d,0x0000,0x2945,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xad55,0x4228,0xd6ba,0x2965,0xb5b6,0x94b2,0x4a69,0xdefb,0x18e3,0xc618,0x9cd3,0x0000,0x2965,0x0000,0xce79,0x73ae,0x73ae,0xce59,0x0841,0xd69a,0x5aeb,0x8c51,0xce59,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0xbdd7,0xa534,0x0000,0x0000,0x18c3,0xc618,0x9cd3,0x0000,0x4228,0xdefb,0x5acb,0x0000,0x0000,0x0000,0x18c3,0xd6ba,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0xd6ba,0x52aa,0x0000,0x9492,0xe73c,0xd6ba,0xdefb,0x4a69,0x94b2,0xe73c,0xd6ba,0xdedb,0x39c7,0xad75,0xad75,0x4208,0xdefb,0x2965,0xbdd7,0x9cf3,0x52aa,0xdefb,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xb596,0x0000,0x0000,0x0000,0xbdd7,0xa534,0x0000,0x3186,0xdefb,0x52aa,0x9cf3,0xbdf7,0x0000,0x0000,0xd69a,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0xd6ba,0x632c,0x0000,0x8410,0xe73c,0xd6ba,0xdefb,0x5aeb,0x8410,0xe71c,0xce79,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb5b6,0xe73c,0xb596,0x0000,0x0000,0x0000,0xb596,0xb596,0x0000,0x18c3,0xd6ba,0x6b4d,0x8c71,0xce59,0x0000,0x10a2,0xc618,0x9cd3,0x0000,0x4228,0xdefb,0xe71c,0x6b6d,0x73ae,0xef5d,0xd69a,0x4208,0x0000,0x0000,0x6b6d,0xdefb,0x18c3,0xc638,0x8c71,0x632c,0xe73c,0xd6ba,0xdefb,0x6b6d,0x7bef,0xce79,0x0020,0xd6ba,0x7bef,0x0000,0x6b6d,0xdefb,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xad55,0x0000,0x0000,0x0000,0xce59,0x8c71,0x6b4d,0xd6ba,0x0841,0xc638,0xdefb,0xdefb,0xc638,0x0000,0xc638,0xe71c,0x9cf3,0x0000,0x3186,0xd6ba,0xdedb,0xdefb,0xad75,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad55,0xef5d,0xc618,0x2945,0x0000,0xbdf7,0x9cf3,0x52aa,0xdefb,0x18c3,0xbdd7,0xe71c,0xdedb,0xc638,0x0000,0xce79,0x7bef,0x7bef,0xce79,0x0841,0xd6ba,0x6b4d,0x8c71,0xce59,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x4a49,0x2965,0x0000,0x0000,0x0000,0x4228,0x2124,0x0000,0x0000,0x4a69,0x0000,0x0000,0x0000,0x0000,0x0000,0x4a49,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x10a2,0x52aa,0x0000,0x0000,0x18e3,0x52aa,0x52aa,0x52aa,0x0000,0x18e3,0x52aa,0x52aa,0x52aa,0x0000,0x3186,0x3186,0x0000,0x4a69,0x0000,0x39c7,0x2945,0x0000,0x4a69,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x4228,0x31a6,0x0000,0x0000,0x0000,0x4208,0x3186,0x0000,0x0000,0x4a69,0x0000,0x2945,0x39e7,0x0000,0x0000,0x4228,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0841,0x52aa,0x0000,0x0000,0x1082,0x52aa,0x52aa,0x5acb,0x0000,0x18c3,0x5acb,0x4a69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x5acb,0x632c,0x31a6,0x0000,0x0000,0x0000,0x39c7,0x39c7,0x0000,0x0000,0x4a49,0x0000,0x18e3,0x4208,0x0000,0x0000,0x4228,0x2124,0x0000,0x0000,0x4a69,0x5acb,0x0000,0x0000,0x52aa,0x528a,0x18c3,0x0000,0x0000,0x3186,0x630c,0x0000,0x4208,0x18e3,0x0000,0x52aa,0x52aa,0x5acb,0x0000,0x0020,0x4228,0x0000,0x4a49,0x0020,0x0000,0x0000,0x4a69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x52aa,0x39e7,0x0000,0x0000,0x0000,0x4208,0x18e3,0x0000,0x4a49,0x0000,0x4208,0x52aa,0x52aa,0x4208,0x0000,0x4a49,0x5aeb,0x2945,0x0000,0x0000,0x4a49,0x52aa,0x5acb,0x39c7,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x4a69,0x632c,0x4228,0x0000,0x0000,0x39e7,0x2945,0x0000,0x4a69,0x0000,0x39c7,0x52aa,0x52aa,0x4a49,0x0000,0x4228,0x0841,0x0841,0x4228,0x0000,0x4a49,0x0000,0x18e3,0x4208,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x31a6,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0xa514,0x4a69,0x0000,0x0861,0x0000,0x0000,0x6b6d,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9492,0x94b2,0x9cd3,0x9cd3,0x9492,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9492,0x94b2,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x8c71,0x0000,0x0000,0x0861,0x0000,0x18e3,0x9492,0x9cd3,0x9cd3,0x94b2,0x9492,0x9492,0x9492,0x9cd3,0x94b2,0x9492,0x9492,0x9492,0x9cd3,0x94b2,0x94b2,0x9cd3,0x9492,0x9cd3,0x9492,0x94b2,0x9cd3,0x9492,0x9cd3,0xa514,0x5acb,0x0000,0x0861,0x0020,0x0000,0x632c,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9492,0x94b2,0x9cd3,0x9cd3,0x9492,0x9cd3,0x94b2,0x9492,0x9cd3,0x9cd3,0x9492,0x94b2,0x9cd3,0x9cd3,0x9cd3,0x9d14,0x9d34,0x9d14,0x9cd3,0x9492,0x0000,0x0000,0x0861,0x0000,0x0000,0x8c71,0x9cd3,0x9cd3,0x94b2,0x9492,0x9492,0x9492,0x9cd3,0x94b2,0x9492,0x9492,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9d34,0xa534,0x632c,0x0000,0x0841,0x0861,0x0000,0x52aa,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x94b2,0x94b2,0x9cd3,0x9cd3,0x9492,0x9cd3,0x94b2,0x9492,0x9cd3,0x9cd3,0x9492,0x94b2,0x9cd3,0x9cd3,0x9492,0x94d3,0x94d3,0x94d3,0x94d3,0x8c71,0x0000,0x0000,0x1082,0x0000,0x0000,0x9492,0x94b2,0x94b2,0x9cd3,0x9492,0x9492,0x9492,0x94b2,0x94b2,0x9492,0x9cd3,0x9492,0x94b2,0x9cd3,0x9cd3,0x9492,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9d34,0xa534,0x6b6d,0x0000,0x0020,0x1082,0x0000,0x528a,0xa514,0x9cd3,0x9cd3,0x9492,0x94b2,0x9cd3,0x9492,0x9cd3,0x9492,0x9492,0x9492,0x9492,0x9cd3,0x9492,0x9492,0x94b2,0x9cd3,0x9cd3,0x9492,0x94d3,0x94b2,0x9492,0x9cd3,0x9cf3,0x2104,0x0000,0x0861,0x0000,0x0000,0x8c71,0x9cf3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cd3,0xa514,0x7bcf,0x0000,0x0000,0x1082,0x0000,0x39e7,0x9cd3,0x9cd3,0x9cd3,0x9492,0x94b2,0x9cd3,0x9492,0x9cd3,0x9492,0x9492,0x9492,0x9492,0x9cd3,0x9492,0x94b2,0x94b2,0x9492,0x9cd3,0x9492,0x9cf3,0x9514,0x94d3,0x9cd3,0x9cf3,0x31a6,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39e7,0x9cd3,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xef5d,0xad55,0x4a49,0x0000,0x0861,0x630c,0xc638,0xef5d,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xe73c,0xe73c,0xd6ba,0x7bcf,0x2945,0x0000,0x39c7,0x9492,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xe71c,0xef5d,0xb596,0x4a69,0x0000,0x0000,0x5acb,0xbdf7,0xef5d,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe5d7,0xe575,0xe679,0xe75d,0xdefb,0x8410,0x2965,0x0000,0x31a6,0x8c51,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe5d7,0xeefb,0xbdf7,0x528a,0x0000,0x0000,0x528a,0xbdd7,0xef5d,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe5d7,0xe6ba,0xe6ba,0xe5d7,0xe71c,0x8c51,0x31a6,0x0000,0x2965,0x8410,0xdefb,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xe5d7,0xeeba,0xbe18,0x5acb,0x0000,0x0000,0x4a69,0xb596,0xef5d,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xe5f7,0xe679,0xe75d,0xe71c,0xe73c,0x9492,0x39c7,0x0000,0x2945,0x7bcf,0xd6ba,0xe73c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xef5d,0xc638,0x630c,0x0861,0x0000,0x4a49,0xad55,0xef5d,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe75d,0xe638,0xe575,0xe618,0xe75d,0xe73c,0x9cd3,0x39e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xef5d,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe73c,0xad75,0x0000,0x18c3,0xd69a,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde59,0xde9a,0xdedb,0xdedb,0xe71c,0x5acb,0x0000,0x8430,0xef5d,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xde59,0xdeba,0xdedb,0xe73c,0xb5b6,0x0000,0x0000,0xce59,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xd26a,0xd000,0xd430,0xdeba,0xdedb,0xe73c,0x6b4d,0x0000,0x73ae,0xef5d,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xd000,0xd534,0xe77d,0xc618,0x0000,0x0000,0xc618,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd26a,0xd4f4,0xd4f4,0xd26a,0xdedb,0xef5d,0x73ae,0x0000,0x6b4d,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde59,0xd208,0xd514,0xe75d,0xce59,0x0000,0x0000,0xb5b6,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd2cb,0xd430,0xdeba,0xdedb,0xdedb,0xef5d,0x8430,0x0000,0x5acb,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd69a,0x18c3,0x0000,0xad55,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde9a,0xd38e,0xd000,0xd30c,0xde79,0xdeba,0xef5d,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd24a,0xd472,0xdf1c,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd5b6,0xd023,0xde9a,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xdf1c,0xd472,0xd24a,0xdefb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd0c4,0xd555,0xdf3c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd38e,0xd38e,0xdf1c,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde59,0xd001,0xddf7,0xdefb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd3f0,0xd2ec,0xdf1c,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd146,0xd555,0xdf3c,0xd596,0xd043,0xde9a,0xe73c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde79,0xde9a,0xdedb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdeba,0xde59,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd38e,0xd3cf,0xde79,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde38,0xd26a,0xddb6,0xdeba,0xdf1c,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd32d,0xd000,0xd000,0xd34d,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdd76,0xd208,0xde59,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd514,0xd229,0xdeba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde18,0xd166,0xd000,0xd000,0xd4d3,0xdefb,0xde18,0xdeba,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdf1b,0xdf1c,0xdefb,0xdedb,0xdf1c,0xdedb,0xdefb,0xdefb,0xdedb,0xdf1c,0xdedb,0xdefb,0xdf1c,0xdf1c,0xdf1c,0xdedb,0xdefb,0xdf1c,0xdf1c,0xdf1c,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd451,0xd555,0xdefb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xde59,0xd3af,0xde9a,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xddb6,0xde18,0xdf1c,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xde38,0xd000,0xde59,0xdefb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xddf7,0xd209,0xd209,0xddf7,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde59,0xd4b2,0xd38e,0xde9a,0xdf1c,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf3c,0xd575,0xd3ae,0xd555,0xdeba,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xd38e,0xde18,0xdefb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde9a,0xd555,0xd0a4,0xd3f0,0xde59,0xdf5c,0xdf3c,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdf1c,0xdd75,0xd492,0xd596,0xdeba,0xd514,0xde9a,0xddb6,0xddb6,0xde9a,0xd514,0xdeba,0xddb6,0xd4d3,0xd4b3,0xd4f4,0xdeba,0xd575,0xd4d3,0xd4f3,0xd514,0xdeba,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd431,0xd555,0xdefb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xddf8,0xd431,0xd3cf,0xde9a,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdd96,0xddd7,0xdefb,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde18,0xd472,0xd410,0xde79,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdd96,0xd451,0xd451,0xdd96,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdeba,0xd3ae,0xd451,0xde18,0xdf1c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdd75,0xd3af,0xd4d3,0xdf3c,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde59,0xd492,0xd36e,0xde18,0xdefb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xde9a,0xd514,0xd000,0xd3f0,0xd535,0xd4b3,0xd4f4,0xdeba,0xe73c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdeba,0xde18,0xd34d,0xd043,0xd431,0xde79,0xd000,0xde59,0xd36e,0xd36e,0xde59,0xd000,0xde9a,0xd34d,0xd000,0xd1e8,0xd26a,0xdeba,0xd3cf,0xd000,0xd000,0xd2ec,0xdeba,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xdefb,0xdedb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd4b3,0xd34d,0xdf3c,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1b,0xd38e,0xd451,0xdf1c,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf1c,0xd514,0xd2cb,0xdf3c,0xdedb,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd2ab,0xddb6,0xddb6,0xd2ab,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdf3c,0xd2cb,0xd514,0xdf3c,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xd30c,0xd514,0xdf5d,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xddd7,0xd209,0xdedb,0xdefb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xde18,0xd1a7,0xd28a,0xd229,0xd1c8,0xd1a7,0xd26a,0xde9a,0xe73c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe73c,0xde9a,0xd063,0xddb6,0xdf1c,0xdefb,0xde59,0xd001,0xde38,0xd3ae,0xd3cf,0xde59,0xd001,0xde9a,0xd32d,0xd3f0,0xdf1c,0xdefb,0xdedb,0xdf3c,0xd410,0xd2ec,0xdf3c,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xde9a,0xd26a,0xd4d3,0xdf7d,0xde59,0xd003,0xd063,0xd000,0xd431,0xde59,0xd001,0xde9a,0xd3af,0xd000,0xd34d,0xdefb,0xdedb,0xdf1c,0xd3f0,0xd2ec,0xdf1c,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xdedb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdf3c,0xde59,0xd3f0,0xd451,0xde79,0xd002,0xd514,0xd2cb,0xd3ef,0xde59,0xd001,0xde9a,0xd34d,0xd2cb,0xde18,0xdedb,0xdedb,0xdf1c,0xd3f0,0xd2ec,0xdf1c,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdefb,0xc618,0x528a,0x5acb,0x5aeb,0x5acb,0x630c,0x6b6d,0x5acb,0xc638,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdefb,0x8410,0x9cf3,0xef5d,0xdedb,0xdedb,0xef5d,0x9cf3,0x8410,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xdefb,0xe71c,0x738e,0x52aa,0x5aeb,0x52aa,0x6b4d,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdefb,0x94b2,0x94b2,0xdefb,0xdedb,0xdedb,0xdefb,0xad55,0x8430,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdedb,0xce79,0x738e,0x5aeb,0x5acb,0x5acb,0x5acb,0x630c,0xd6ba,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xdefb,0x9cf3,0x9492,0xe73c,0xdedb,0xdedb,0xdefb,0xb596,0x7bef,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x738e,0xce59,0xe71c,0xd6ba,0xdedb,0xe73c,0x8410,0xb596,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe71c,0xdedb,0xe71c,0xe71c,0xdedb,0xdefb,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xdedb,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe73c,0xdeba,0xd472,0xd492,0xd430,0xd535,0xde79,0xd000,0xde9a,0xd3af,0xd36e,0xde59,0xd000,0xde9a,0xd2cb,0xd3f0,0xdf5d,0xdedb,0xdedb,0xdf1c,0xd3cf,0xd28a,0xdf1c,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdefb,0xc638,0x8410,0x8430,0x8430,0x9492,0x6b4d,0x0000,0x8410,0xce79,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdefb,0xa514,0x7bcf,0xa534,0xe71c,0xe71c,0xa534,0x7bcf,0xa514,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xce79,0x94b2,0x8430,0x8430,0x8430,0x8430,0x8430,0x8430,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x6b4d,0x6b4d,0xe71c,0xdedb,0xdedb,0xe71c,0x8c51,0x39e7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x0000,0x7bef,0x94b2,0x9492,0x9492,0x9492,0x8430,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x8410,0x0000,0x9cf3,0xdefb,0xdedb,0xe71c,0x9cd3,0x2124,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xce79,0x0000,0x632c,0xc618,0xef5d,0xd6ba,0x8c71,0x0000,0x9cf3,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe73c,0xd69a,0x8c51,0x8430,0xce59,0xc618,0x8c51,0x9492,0xdedb,0xdedb,0xe71c,0xc638,0x9492,0xdefb,0xdedb,0xe71c,0xbdf7,0x94b2,0xe71c,0xdefb,0xad75,0x8c51,0x8c51,0x9492,0xd6ba,0xe73c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe73c,0xde9a,0xd2ec,0xd187,0xd575,0xdf5d,0xde79,0xd32d,0xde79,0xd4b3,0xd4b3,0xde79,0xd32d,0xde9a,0xd471,0xd4d3,0xdf1c,0xdedb,0xdedb,0xdf1c,0xd4d3,0xd431,0xdefb,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xe71c,0xe71c,0xef5d,0xd6ba,0x9cf3,0x73ae,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xef5d,0xad55,0x630c,0xbdd7,0xbdd7,0x630c,0xad55,0xef5d,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xbdf7,0x0000,0xd69a,0xe73c,0xe71c,0xe73c,0xdedb,0x5acb,0xbdf7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x738e,0x738e,0xe71c,0xdedb,0xdedb,0xe71c,0x9492,0x4a69,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x0861,0xa534,0xc618,0xbdf7,0xbdf7,0xbdf7,0x5aeb,0xb5b6,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x8c51,0x0000,0x632c,0xb575,0xd6ba,0xe73c,0x9cf3,0x39e7,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x2965,0x3186,0x8c71,0xbdd7,0xad55,0x5acb,0x0000,0xa514,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xad55,0xd6ba,0xa514,0x5acb,0x4228,0xc618,0x9cd3,0x0000,0x632c,0xad55,0xd6ba,0xce79,0x94b2,0x630c,0xb596,0xd6ba,0xce59,0x8c71,0x630c,0xb5b6,0xdefb,0x630c,0x0000,0x5aeb,0x630c,0xd69a,0xe73c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdefb,0xdf1c,0xdefb,0xdedb,0xdedb,0xdefb,0xdedb,0xdefb,0xdefb,0xdedb,0xdefb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x7bcf,0x6b6d,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xe71c,0xbdf7,0x0000,0x0000,0xbdf7,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xc618,0x0020,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x738e,0x738e,0xe71c,0xdedb,0xdedb,0xe71c,0x9492,0x4a69,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x18c3,0x1082,0x2104,0x18e3,0x18c3,0x2945,0xc638,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x8410,0x6b6d,0xdedb,0x2104,0xb5b6,0xe71c,0x9cf3,0x39e7,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x10a2,0xc638,0x9cf3,0x0000,0x4a69,0xdefb,0x4228,0x9cf3,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xad75,0xad55,0x4228,0xd6ba,0xdefb,0xe73c,0x9492,0x528a,0xd69a,0x2945,0xc618,0x8430,0x5aeb,0xce79,0x0000,0xce59,0x738e,0x73ae,0xd69a,0x2104,0xd69a,0x6b4d,0x7bef,0xe71c,0xdefb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xe71c,0x52aa,0x8c51,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xe71c,0xbdf7,0x0000,0x0000,0xbdf7,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xc618,0x0020,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xe71c,0x6b4d,0x6b6d,0xe73c,0xdedb,0xdedb,0xe73c,0x9492,0x4228,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x0841,0xbdd7,0xd6ba,0xd69a,0xd6ba,0xd69a,0x39c7,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x8410,0x630c,0xe71c,0xd6ba,0x39e7,0xad75,0xad75,0x39e7,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x18c3,0xb5b6,0xdefb,0xd69a,0xd6ba,0xdedb,0x39e7,0x9cf3,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa534,0xe73c,0xbdd7,0x10a2,0xce79,0xef5d,0x9cd3,0x0000,0x31a6,0xce59,0xe71c,0x8c71,0x0000,0x0861,0x0000,0xce79,0x7bcf,0x738e,0xe71c,0xd6ba,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdefb,0xdefb,0x632c,0xad55,0xdedb,0xe73c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xef5d,0xa534,0x5aeb,0xc618,0xc618,0x5aeb,0xa534,0xef5d,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xbdf7,0x0000,0xd69a,0xe73c,0xe71c,0xe73c,0xdedb,0x4a69,0xbdd7,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xce79,0x8c71,0x632c,0xe73c,0xef5d,0x7bef,0x7bcf,0xce59,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x0000,0xce59,0xef5d,0xe73c,0xe73c,0xe71c,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x8410,0x630c,0xe71c,0xdedb,0xc638,0x7bef,0x0000,0x528a,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xd69a,0x18c3,0xb5b6,0xe71c,0xdedb,0xdedb,0xdedb,0x39e7,0x9cf3,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd69a,0x6b4d,0x4a49,0xad55,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xa514,0xe73c,0xe71c,0xc618,0x4a69,0xbdf7,0x9cf3,0x39e7,0xc618,0xdedb,0xe73c,0x8430,0x52aa,0xb596,0x0000,0xce59,0x6b6d,0x73ae,0xdedb,0x4a69,0xd69a,0x6b4d,0x738e,0xd6ba,0xe71c,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x18c3,0xce59,0xdefb,0xdefb,0xc638,0x6b6d,0x0000,0x6b4d,0x8430,0x7bcf,0x7bcf,0x7bcf,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x52aa,0x0000,0x8410,0xe71c,0xdedb,0xdefb,0x9cd3,0x7bcf,0xad75,0xe71c,0xe71c,0xad75,0x7bcf,0x9cd3,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0xc618,0xdefb,0xdedb,0xce79,0x9cf3,0x7bef,0x7bcf,0x7bcf,0x7bcf,0x7bef,0x9492,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x632c,0x0000,0x738e,0xe71c,0xdedb,0xdedb,0xe71c,0xc638,0x8c51,0x7bcf,0x7bcf,0x8430,0xbdf7,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xbdd7,0x0000,0x0000,0xbdd7,0xdefb,0xdefb,0xce59,0x0000,0x632c,0x7bef,0x7bcf,0x7bcf,0x7bcf,0x94b2,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x738e,0x0000,0x632c,0xdefb,0xdedb,0xe71c,0x7bcf,0x528a,0xe71c,0xdedb,0xe71c,0xbdf7,0x5acb,0x31a6,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xc618,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xce79,0x0000,0xb596,0xe71c,0xdedb,0xdedb,0xdedb,0x2104,0x9cd3,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xce79,0x0000,0x0000,0x9492,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0xad75,0xc618,0x738e,0x8430,0x8c71,0xd69a,0x8c71,0x4208,0xe73c,0xdedb,0xe71c,0x7bcf,0x630c,0xd6ba,0x0000,0xc618,0xbdf7,0x8c51,0x7bcf,0x9cd3,0xdedb,0x630c,0x31a6,0x8430,0x8410,0xd69a,0xe73c,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9492,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe73c,0xad55,0x0000,0x18c3,0xce79,0xdefb,0xdefb,0xc618,0x630c,0x7bcf,0x6b6d,0x632c,0x6b4d,0x632c,0x632c,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x52aa,0x0000,0x8410,0xe73c,0xdedb,0xdefb,0x8c51,0xa514,0xef5d,0xdedb,0xdedb,0xef5d,0xa514,0x8c51,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xb596,0x0000,0x0000,0xc638,0xe71c,0xdedb,0xdefb,0xe71c,0x7bef,0x630c,0x6b4d,0x632c,0x73ae,0xdefb,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x632c,0x0000,0x73ae,0xe73c,0xdedb,0xdedb,0xdedb,0xe71c,0xd69a,0x632c,0x5acb,0xc618,0xe73c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xbdf7,0x0000,0x0000,0xbdf7,0xe71c,0xdedb,0xce79,0x7bef,0x6b4d,0x632c,0x6b4d,0x632c,0x6b6d,0xd6ba,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe73c,0x73ae,0x0000,0x632c,0xe71c,0xdedb,0xdefb,0xa534,0x94b2,0xdefb,0xdedb,0xdedb,0xe73c,0xbdf7,0x8430,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xc638,0x0000,0x0000,0xb596,0xe71c,0xdedb,0xd69a,0x7bcf,0xc618,0xdefb,0xdedb,0xdedb,0xdedb,0x8430,0xb5b6,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe73c,0x8410,0x0000,0x52aa,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xd69a,0x8410,0x6b4d,0xb596,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce79,0x18c3,0x0000,0xb596,0xc618,0x5acb,0x6b6d,0xd6ba,0xe73c,0xad55,0x8c71,0xdefb,0xdedb,0xdefb,0xa534,0x94b2,0xd6ba,0x7bcf,0xce59,0xef5d,0xb5b6,0x7bcf,0xe73c,0xdefb,0x9cf3,0x6b4d,0x630c,0x738e,0xd69a,0xef5d,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bef,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0x94b2,0x0000,0x10a2,0xb5b6,0xd6ba,0xdedb,0xdefb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xce59,0x4a69,0x0000,0x73ae,0xd69a,0xdedb,0xdedb,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0x9cf3,0x0000,0x0000,0xad75,0xd6ba,0xdedb,0xdedb,0xdedb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xce79,0x5acb,0x0000,0x632c,0xd69a,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0xa534,0x0000,0x0000,0xa534,0xd6ba,0xdedb,0xdedb,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xce79,0x632c,0x0000,0x5acb,0xce79,0xdedb,0xdedb,0xdefb,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0xad75,0x0000,0x0000,0x9cf3,0xd6ba,0xdedb,0xdedb,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd69a,0x73ae,0x0000,0x4a69,0xce59,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xe71c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0xb5b6,0x10a2,0x0000,0x9492,0xdedb,0xe73c,0xe71c,0xdedb,0xdedb,0xdefb,0xe71c,0xdedb,0xdedb,0xdedb,0xdefb,0xe71c,0xdedb,0xe71c,0xdedb,0xdedb,0xdefb,0xe71c,0xdedb,0xdedb,0xe71c,0xe71c,0xe71c,0xe71c,0xdedb,0xd69a,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8410,0x0000,0x0000,0x0000,0x0000,0xad75,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xce59,0x18c3,0x0000,0x0000,0x0000,0x52aa,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x8c71,0x0000,0x0000,0x0000,0x0000,0xa534,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd69a,0x3186,0x0000,0x0000,0x0000,0x4228,0xd6ba,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x9cd3,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xd6ba,0x4208,0x0000,0x0000,0x0000,0x3186,0xd69a,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xa534,0x0000,0x0000,0x0000,0x0000,0x8c71,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0x52aa,0x0000,0x0000,0x0000,0x18c3,0xce59,0xdefb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xe71c,0xad75,0x0000,0x0000,0x0000,0x0000,0x8410,0xe71c,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0x632c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x2945,0x0000,0x0020,0x0000,0x0000,0x3186,0x528a,0x4a69,0x4a49,0x31a6,0x3186,0x4208,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4228,0x0000,0x0000,0x0861,0x0000,0x0000,0x31a6,0x3186,0x4228,0x4208,0x39c7,0x4a49,0x31a6,0x4a49,0x4208,0x3186,0x31a6,0x4a49,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x528a,0x2965,0x0000,0x0000,0x0000,0x0000,0x2104,0x4208,0x4a69,0x4a49,0x31a6,0x3186,0x3186,0x39c7,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a49,0x0020,0x0000,0x0000,0x0000,0x1082,0x4a49,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x31a6,0x0000,0x0000,0x0841,0x0000,0x2124,0x4a49,0x3186,0x3186,0x4a49,0x4a69,0x4208,0x31a6,0x4a69,0x31a6,0x4228,0x4208,0x3186,0x31a6,0x3186,0x4a49,0x4208,0x39c7,0x4a49,0x31a6,0x4a49,0x4a69,0x4208,0x31a6,0x4a49,0x1082,0x0000,0x0861,0x0000,0x0000,0x2965,0x4228,0x4a69,0x4a69,0x4a49,0x31a6,0x4a49,0x4a69,0x4208,0x3186,0x31a6,0x3186,0x4228,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x39c7,0x0000,0x0000,0x0861,0x0000,0x0000,0x39e7,0x4a69,0x4a69,0x39c7,0x3186,0x3186,0x31a6,0x4a49,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x18c3,0x0000,0x0000,0x0000,0x0000,0x4228,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x39e7,0x0000,0x0000,0x0000,0x0000,0x2945,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x18e3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x10a2,0xa534,0x5acb,0x0000,0x0000,0x0861,0x9cf3,0xbdd7,0x632c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x632c,0xb596,0xb596,0xb5b6,0x4a49,0x632c,0x9492,0x0000,0xa514,0x31a6,0x6b4d,0xb5b6,0xa514,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0020,0x0000,0x8c51,0x8c51,0x0000,0x0000,0xa534,0xad55,0xb575,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x9cd3,0x6b4d,0x39e7,0xad75,0xb596,0x18c3,0x0000,0x632c,0x9cd3,0x0000,0x9cf3,0x4228,0x5aeb,0xb596,0xb596,0xb5b6,0x39c7,0x738e,0x8c51,0x0000,0xa534,0x39c7,0x0000,0x632c,0x9cd3,0x0000,0x0000,0x0841,0x0000,0x4a69,0xb575,0xb5b6,0x31a6,0x0000,0x0000,0x0000,0xb596,0x2104,0x0000,0x632c,0xb5b6,0xa534,0xb5b6,0x5acb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x8c51,0xbdd7,0x9492,0x0000,0x0000,0x94b2,0xad75,0xad55,0xa534,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xdedb,0x7bef,0x0000,0x0000,0x3186,0xdedb,0xbdf7,0x9cd3,0x6b4d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xe71c,0xa514,0xad75,0x4208,0x9cd3,0xce79,0x0000,0xe73c,0x5aeb,0x9cd3,0xdedb,0x9cd3,0x9492,0x39c7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73ae,0x9cf3,0x9cf3,0x73ae,0x0861,0x9cd3,0xdedb,0xd69a,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce79,0x9492,0x632c,0xe73c,0xad55,0x9492,0x3186,0x8c51,0xd69a,0x0000,0xdefb,0x738e,0x8c51,0xdefb,0x9cf3,0xad75,0x2965,0xad55,0xc618,0x18c3,0xe73c,0x5aeb,0x0000,0x8430,0xe71c,0x8c71,0x2945,0x0000,0x0000,0x6b4d,0xe73c,0xad75,0x94b2,0x4a69,0x39c7,0x9492,0xad55,0x94b2,0x39e7,0x5acb,0xbdf7,0xe71c,0xb5b6,0x52aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdf7,0xd69a,0x9cd3,0x8c51,0x0020,0x8c51,0xd69a,0xdedb,0x9cd3,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xd69a,0x7bcf,0x0000,0x0000,0x3186,0xd6ba,0x39e7,0x9cf3,0xc638,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8430,0xd69a,0x4228,0x0000,0x0000,0x8410,0xad75,0x632c,0xbdd7,0x4208,0x9cf3,0xbdf7,0x52aa,0xc638,0x528a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd69a,0x9492,0x9492,0xd6ba,0x0000,0x0000,0xbdd7,0x9cf3,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0x8c51,0x6b4d,0xd69a,0x0000,0xd69a,0x8410,0x73ae,0xd69a,0x630c,0xb5b6,0x528a,0x8c71,0xce59,0x39e7,0x0000,0x0000,0x8c71,0xad55,0x632c,0xbdf7,0x4228,0x2945,0x9cf3,0xdefb,0xc618,0x39e7,0x0000,0x0000,0x6b4d,0xd6ba,0x0000,0xc638,0x9492,0x6b6d,0xdedb,0x0000,0xd69a,0x9492,0x0000,0x4208,0xdedb,0x2945,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xad55,0x6b4d,0xc638,0x2965,0x0000,0x9cf3,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xd69a,0x7bcf,0x0000,0x0000,0x3186,0xd6ba,0x52aa,0x9cd3,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8410,0xe71c,0xd6ba,0x4208,0x0000,0x0000,0x6b4d,0xd6ba,0x31a6,0x0000,0x9cd3,0xe73c,0xc638,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc618,0xdefb,0xdefb,0xc618,0x0000,0x0000,0xbdd7,0xa534,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0x8c51,0x6b4d,0xd69a,0x0841,0xce59,0x7bcf,0x738e,0xe71c,0xd6ba,0x4228,0x0000,0x8c71,0xe73c,0xce79,0x3186,0x0000,0x0000,0x73ae,0xd6ba,0x0000,0x0000,0xa514,0xe73c,0xc618,0x0000,0x0000,0x0000,0x0000,0x6b4d,0xd6ba,0x18c3,0xc618,0x8c51,0x6b4d,0xd69a,0x0020,0xce59,0x8c51,0x0000,0x5acb,0xdedb,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xe73c,0xb5b6,0x0000,0x0000,0x0000,0xa534,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xd69a,0x738e,0x0000,0x0000,0x3186,0xd6ba,0x52aa,0x9cd3,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xce79,0x10a2,0x0000,0x0000,0x8c71,0xbdd7,0x39e7,0xce59,0x4a69,0x9cd3,0xbdf7,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce59,0x8430,0x8430,0xce59,0x0000,0x0000,0xbdd7,0xa534,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0x8c51,0x6b4d,0xd69a,0x0841,0xce59,0x7bcf,0x7bcf,0xce79,0x39c7,0xce59,0x630c,0x8c71,0xc638,0x0000,0x0000,0x0000,0x0000,0x7bcf,0xd69a,0x18c3,0x0000,0x0000,0x8430,0xe71c,0xd69a,0x4208,0x0000,0x0000,0x6b4d,0xd6ba,0x18c3,0xc618,0x8c51,0x6b6d,0xd6ba,0x0000,0xce79,0x8c71,0x0000,0x5acb,0xdedb,0x4228,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbdd7,0xad55,0x0000,0x0000,0x0020,0x0000,0xa514,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xd6ba,0xd69a,0xc638,0xa514,0x2104,0xe71c,0x5acb,0xa514,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xe73c,0xbdf7,0xc638,0x528a,0x94b2,0xce79,0x0000,0xe71c,0x5acb,0xa514,0xc618,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6ba,0x7bef,0x7bef,0xd6ba,0x0000,0x0000,0xc618,0xad55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce79,0x9492,0x6b6d,0xdedb,0x0841,0xd69a,0x8410,0x8410,0xd69a,0x0000,0xdefb,0x6b6d,0x8c51,0xe73c,0xbdf7,0xc638,0x5acb,0x0000,0x7bef,0xdefb,0x18c3,0x0000,0x8c71,0xdedb,0xd6ba,0x6b4d,0x2104,0x0000,0x0000,0x6b6d,0xe71c,0x18c3,0xce59,0x9cd3,0x0000,0x7bcf,0xc618,0x8410,0x31a6,0x0000,0x5aeb,0xe71c,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0xad55,0x0000,0x0000,0x0000,0xa514,0xdedb,0xdefb,0xb596,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x8430,0x9cd3,0xa514,0x8410,0x0861,0x8c71,0x39c7,0x6b4d,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52aa,0x9cd3,0x9cd3,0xa514,0x4228,0x5aeb,0x8410,0x1082,0x8c71,0x39c7,0x6b4d,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0x528a,0x528a,0x8c51,0x0000,0x0000,0x7bef,0x6b6d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8410,0x5aeb,0x4228,0x8c71,0x0020,0x8430,0x528a,0x528a,0x8430,0x0020,0x8c71,0x4228,0x52aa,0x9cd3,0x9cd3,0x9cf3,0x4228,0x0000,0x528a,0x8c71,0x1082,0x0000,0x73ae,0xa514,0x7bef,0x0000,0x0000,0x0020,0x0000,0x4228,0x8c71,0x1082,0x8410,0x632c,0x0000,0x1082,0x9cd3,0x2945,0x0000,0x0000,0x39c7,0x9492,0x2965,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bef,0x6b6d,0x0000,0x0000,0x0000,0x8430,0x9cd3,0x94b2,0x9492,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0861,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0841,0x0841,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0861,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94b2,0xc638,0x0000, +0x0000,0xc638,0x8c71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c71,0xc638,0x0000, +0x0000,0xc638,0xc618,0x8c71,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x94b2,0x8c71,0xc618,0xc638,0x0000, +0x0000,0x9cf3,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0x9cf3,0x0000, +0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020}; + diff --git a/MCUME_pico/pico81/pico81.cpp b/MCUME_pico/pico81/pico81.cpp new file mode 100644 index 0000000..b640f0b --- /dev/null +++ b/MCUME_pico/pico81/pico81.cpp @@ -0,0 +1,128 @@ +#include "pico.h" +#include "pico/stdlib.h" + +extern "C" { + #include "iopins.h" + #include "emuapi.h" +} +#include "keyboard_osd.h" +#include "vga_t_dma.h" +extern "C" { +#include "zx81.h" +} +#include + + +TFT_T_DMA tft; +static int skip=0; + +int main(void) { + stdio_init_all(); + tft.begin(VGA_MODE_320x240); + emu_init(); + while (true) { + if (menuActive()) { + uint16_t bClick = emu_DebounceLocalKeys(); + int action = handleMenu(bClick); + char * filename = menuSelection(); + if (action == ACTION_RUNTFT) { + toggleMenu(false); + emu_start(); + emu_Init(filename); + tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) ); + tft.startDMA(); + } + tft.waitSync(); + } + else { + emu_Step(); + uint16_t bClick = emu_DebounceLocalKeys(); + emu_Input(bClick); + } + //int c = getchar_timeout_us(0); + //switch (c) { + // case ' ': + // printf("test: %d\n", 1); + // break; + //} + } +} + +static unsigned char palette8[PALETTE_SIZE]; + +void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index) +{ + if (index>8):(iy>>8)) +#define xl (ixoriy==0?l:ixoriy==1?(ix&0xff):(iy&0xff)) + +#define setxh(x) (ixoriy==0?(h=(x)):ixoriy==1?(ix=(ix&0xff)|((x)<<8)):\ + (iy=(iy&0xff)|((x)<<8))) +#define setxl(x) (ixoriy==0?(l=(x)):ixoriy==1?(ix=(ix&0xff00)|(x)):\ + (iy=(iy&0xff00)|(x))) + +#define inc(var) /* 8-bit increment */ ( var++,\ + f=(f&1)|(var&0xa8)|\ + ((!(var&15))<<4)|((!var)<<6)|\ + ((var==128)<<2)\ + ) +#define dec(var) /* 8-bit decrement */ ( f=(f&1)|((!(var&15))<<4)|2,\ + --var,\ + f|=(var&0xa8)|((var==127)<<2)|\ + ((!var)<<6)\ + ) +#define swap(x,y) {unsigned char t=x; x=y; y=t;} +#define addhl(hi,lo) /* 16-bit add */ if(!ixoriy){\ + unsigned short t;\ + l=t=l+(lo);\ + f=(f&0xc4)|(((t>>=8)+(h&0x0f)+((hi)&0x0f)>15)<<4);\ + h=t+=h+(hi);\ + f|=(h&0x28)|(t>>8);\ + }\ + else do{unsigned long t=(ixoriy==1?ix:iy);\ + f=(f&0xc4)|(((t&0xfff)+((hi<<8)|lo)>0xfff)<<4);\ + t+=(hi<<8)|lo;\ + if(ixoriy==1)ix=t; else iy=t;\ + f|=((t>>8)&0x28)|(t>>16);\ + } while(0) +#define adda(x,c) /* 8-bit add */ do{unsigned short y;\ + unsigned char z=(x);\ + y=a+z+(c);\ + f=(y&0xa8)|(y>>8)|(((a&0x0f)+(z&0x0f)+(c)>15)<<4)|\ + (((~a^z)&0x80&(y^a))>>5);\ + f|=(!(a=y))<<6;\ + } while(0) +#define suba(x,c) /* 8-bit subtract */ do{unsigned short y;\ + unsigned char z=(x);\ + y=(a-z-(c))&0x1ff;\ + f=(y&0xa8)|(y>>8)|(((a&0x0f)<(z&0x0f)+(c))<<4)|\ + (((a^z)&0x80&(y^a))>>5)|2;\ + f|=(!(a=y))<<6;\ + } while(0) +#define cpa(x) /* 8-bit compare */ do{unsigned short y;\ + unsigned char z=(x);\ + y=(a-z)&0x1ff;\ + f=(y&0xa8)|(y>>8)|(((a&0x0f)<(z&0x0f))<<4)|\ + (((a^z)&0x80&(y^a))>>5)|2|((!y)<<6);\ + } while(0) +#define anda(x) /* logical and */ do{\ + a&=(x);\ + f=(a&0xa8)|((!a)<<6)|0x10|parity(a);\ + } while(0) +#define xora(x) /* logical xor */ do{\ + a^=(x);\ + f=(a&0xa8)|((!a)<<6)|parity(a);\ + } while(0) +#define ora(x) /* logical or */ do{\ + a|=(x);\ + f=(a&0xa8)|((!a)<<6)|parity(a);\ + } while(0) + +#define jr /* execute relative jump */ do{int j=(signed char)fetch(pc);\ + pc+=j+1;\ + tstates+=5;\ + } while(0) +#define jp /* execute jump */ (pc=fetch2(pc)) +#define call /* execute call */ do{\ + tstates+=7;\ + push2(pc+2);\ + jp;\ + } while(0) +#define ret /* execute return */ do{\ + tstates+=6;\ + pop2(pc);\ + } while(0) +#define pop2(var) /* pop 16-bit register */ (var=fetch2(sp),sp+=2) +#define pop1(v1,v2) /* pop register pair */ (v2=fetch(sp),\ + v1=fetch(sp+1),sp+=2) +#define push2(val) /* push 16-bit register */ do{sp-=2;store2(sp,(val));}\ + while(0) +#define push1(v1,v2) /* push register pair */ do{sp-=2;\ + store2b(sp,v1,v2);\ + }while(0) + +instr(0,4); + /* nop */ +endinstr; + +instr(1,10); + c=fetch(pc),pc++; + b=fetch(pc),pc++; +endinstr; + +instr(2,7); + store(bc,a); +endinstr; + +instr(3,6); + if(!++c)b++; +endinstr; + +instr(4,4); + inc(b); +endinstr; + +instr(5,4); + dec(b); +endinstr; + +instr(6,7); + b=fetch(pc),pc++; +endinstr; + +instr(7,4); + a=(a<<1)|(a>>7); + f=(f&0xc4)|(a&0x29); +endinstr; + +instr(8,4); + swap(a,a1); + swap(f,f1); +endinstr; + +instr(9,11); + addhl(b,c); +endinstr; + +instr(10,7); + a=fetch(bc); +endinstr; + +instr(11,6); + if(!c--)b--; +endinstr; + +instr(12,4); + inc(c); +endinstr; + +instr(13,4); + dec(c); +endinstr; + +instr(14,4); + c=fetch(pc),pc++; +endinstr; + +instr(15,4); + f=(f&0xc4)|(a&1); + a=(a>>1)|(a<<7); + f|=a&0x28; +endinstr; + +instr(16,8); + if(!--b)pc++; + else jr; +endinstr; + +instr(17,10); + e=fetch(pc),pc++; + d=fetch(pc),pc++; +endinstr; + +instr(18,7); + store(de,a); +endinstr; + +instr(19,6); + if(!++e)d++; +endinstr; + +instr(20,4); + inc(d); +endinstr; + +instr(21,4); + dec(d); +endinstr; + +instr(22,7); + d=fetch(pc),pc++; +endinstr; + +instr(23,4); + {int t=a>>7; + a=(a<<1)|(f&1); + f=(f&0xc4)|(a&0x28)|t; + } +endinstr; + +instr(24,7); + jr; +endinstr; + +instr(25,11); + addhl(d,e); +endinstr; + +instr(26,7); + a=fetch(de); +endinstr; + +instr(27,6); + if(!e--)d--; +endinstr; + +instr(28,4); + inc(e); +endinstr; + +instr(29,4); + dec(e); +endinstr; + +instr(30,4); + e=fetch(pc),pc++; +endinstr; + +instr(31,4); + {int t=a&1; + a=(a>>1)|(f<<7); + f=(f&0xc4)|(a&0x28)|t; + } +endinstr; + +instr(32,7); + if(f&0x40)pc++; + else jr; +endinstr; + +instr(33,10); + if(!ixoriy){ + l=fetch(pc),pc++; + h=fetch(pc),pc++; + } + else { + if(ixoriy==1) + ix=fetch2(pc); + else iy=fetch2(pc); + pc+=2; + } +endinstr; + +instr(34,16); + {unsigned short addr=fetch2(pc); + pc+=2; + if(!ixoriy)store2b(addr,h,l); + else if(ixoriy==1)store2(addr,ix); + else store2(addr,iy); + } +endinstr; + +instr(35,6); + if(!ixoriy){if(!++l)h++;} + else if(ixoriy==1)ix++; + else iy++; +endinstr; + +instr(36,4); + if(ixoriy==0)inc(h); + else{unsigned char t; + t=(ixoriy==1?ix:iy)>>8; + inc(t); + if(ixoriy==1)ix=(ix&0xff)|(t<<8); + else iy=(iy&0xff)|(t<<8); + } +endinstr; + +instr(37,4); + if(ixoriy==0)dec(h); + else{unsigned char t; + t=(ixoriy==1?ix:iy)>>8; + dec(t); + if(ixoriy==1)ix=(ix&0xff)|(t<<8); + else iy=(iy&0xff)|(t<<8); + } +endinstr; + +instr(38,7); + setxh(fetch(pc)); + pc++; +endinstr; + +instr(39,4); + { + unsigned char incr=0, carry=cy; + if((f&0x10) || (a&0x0f)>9) incr=6; + if((f&1) || (a>>4)>9) incr|=0x60; + if(f&2)suba(incr,0); + else { + if(a>0x90 && (a&15)>9)incr|=0x60; + adda(incr,0); + } + f=((f|carry)&0xfb)|parity(a); + } +endinstr; + +instr(40,7); + if(f&0x40)jr; + else pc++; +endinstr; + +instr(41,11); + if(!ixoriy)addhl(h,l); + else if(ixoriy==1)addhl((ix>>8),(ix&0xff)); + else addhl((iy>>8),(iy&0xff)); +endinstr; + +instr(42,16); + {unsigned short addr=fetch2(pc); + pc+=2; + if(!ixoriy){ + l=fetch(addr); + h=fetch(addr+1); + } + else if(ixoriy==1)ix=fetch2(addr); + else iy=fetch2(addr); + } +endinstr; + +instr(43,6); + if(!ixoriy){if(!l--)h--;} + else if(ixoriy==1)ix--; + else iy--; +endinstr; + +instr(44,4); + if(!ixoriy)inc(l); + else {unsigned char t; + t=(ixoriy==1?ix:iy); + inc(t); + if(ixoriy==1)ix=(ix&0xff00)|t; + else iy=(iy&0xff00)|t; + } +endinstr; + +instr(45,4); + if(!ixoriy)dec(l); + else {unsigned char t; + t=(ixoriy==1?ix:iy); + dec(t); + if(ixoriy==1)ix=(ix&0xff00)|t; + else iy=(iy&0xff00)|t; + } +endinstr; + +instr(46,4); + setxl(fetch(pc)); + pc++; +endinstr; + +instr(47,4); + a=~a; + f=(f&0xc5)|(a&0x28)|0x12; +endinstr; + +instr(48,7); + if(f&1)pc++; + else jr; +endinstr; + +instr(49,10); + sp=fetch2(pc); + pc+=2; +endinstr; + +instr(50,13); + {unsigned short addr=fetch2(pc); + pc+=2; + store(addr,a); + } +endinstr; + +instr(51,6); + sp++; +endinstr; + +HLinstr(52,11,8); + {unsigned char t=fetch(addr); + inc(t); + store(addr,t); + } +endinstr; + +HLinstr(53,11,8); + {unsigned char t=fetch(addr); + dec(t); + store(addr,t); + } +endinstr; + +HLinstr(54,10,5); + store(addr,fetch(pc)); + pc++; +endinstr; + +instr(55,4); + f=(f&0xc4)|1|(a&0x28); +endinstr; + +instr(56,7); + if(f&1)jr; + else pc++; +endinstr; + +instr(57,11); + addhl((sp>>8),(sp&0xff)); +endinstr; + +instr(58,13); + {unsigned short addr=fetch2(pc); + pc+=2; + a=fetch(addr); + } +endinstr; + +instr(59,6); + sp--; +endinstr; + +instr(60,4); + inc(a); +endinstr; + +instr(61,4); + dec(a); +endinstr; + +instr(62,4); + a=fetch(pc),pc++; +endinstr; + +instr(63,4); + f=(f&0xc4)|(cy^1)|(cy<<4)|(a&0x28); +endinstr; + +instr(0x40,4); + /* ld b,b */ +endinstr; + +instr(0x41,4); + b=c; +endinstr; + +instr(0x42,4); + b=d; +endinstr; + +instr(0x43,4); + b=e; +endinstr; + +instr(0x44,4); + b=xh; +endinstr; + +instr(0x45,4); + b=xl; +endinstr; + +HLinstr(0x46,7,8); + b=fetch(addr); +endinstr; + +instr(0x47,4); + b=a; +endinstr; + +instr(0x48,4); + c=b; +endinstr; + +instr(0x49,4); + /* ld c,c */ +endinstr; + +instr(0x4a,4); + c=d; +endinstr; + +instr(0x4b,4); + c=e; +endinstr; + +instr(0x4c,4); + c=xh; +endinstr; + +instr(0x4d,4); + c=xl; +endinstr; + +HLinstr(0x4e,7,8); + c=fetch(addr); +endinstr; + +instr(0x4f,4); + c=a; +endinstr; + +instr(0x50,4); + d=b; +endinstr; + +instr(0x51,4); + d=c; +endinstr; + +instr(0x52,4); + /* ld d,d */ +endinstr; + +instr(0x53,4); + d=e; +endinstr; + +instr(0x54,4); + d=xh; +endinstr; + +instr(0x55,4); + d=xl; +endinstr; + +HLinstr(0x56,7,8); + d=fetch(addr); +endinstr; + +instr(0x57,4); + d=a; +endinstr; + +instr(0x58,4); + e=b; +endinstr; + +instr(0x59,4); + e=c; +endinstr; + +instr(0x5a,4); + e=d; +endinstr; + +instr(0x5b,4); + /* ld e,e */ +endinstr; + +instr(0x5c,4); + e=xh; +endinstr; + +instr(0x5d,4); + e=xl; +endinstr; + +HLinstr(0x5e,7,8); + e=fetch(addr); +endinstr; + +instr(0x5f,4); + e=a; +endinstr; + +instr(0x60,4); + setxh(b); +endinstr; + +instr(0x61,4); + setxh(c); +endinstr; + +instr(0x62,4); + setxh(d); +endinstr; + +instr(0x63,4); + setxh(e); +endinstr; + +instr(0x64,4); + /* ld h,h */ +endinstr; + +instr(0x65,4); + setxh(xl); +endinstr; + +HLinstr(0x66,7,8); + h=fetch(addr); +endinstr; + +instr(0x67,4); + setxh(a); +endinstr; + +instr(0x68,4); + setxl(b); +endinstr; + +instr(0x69,4); + setxl(c); +endinstr; + +instr(0x6a,4); + setxl(d); +endinstr; + +instr(0x6b,4); + setxl(e); +endinstr; + +instr(0x6c,4); + setxl(xh); +endinstr; + +instr(0x6d,4); + /* ld l,l */ +endinstr; + +HLinstr(0x6e,7,8); + l=fetch(addr); +endinstr; + +instr(0x6f,4); + setxl(a); +endinstr; + +HLinstr(0x70,7,8); + store(addr,b); +endinstr; + +HLinstr(0x71,7,8); + store(addr,c); +endinstr; + +HLinstr(0x72,7,8); + store(addr,d); +endinstr; + +HLinstr(0x73,7,8); + store(addr,e); +endinstr; + +HLinstr(0x74,7,8); + store(addr,h); +endinstr; + +HLinstr(0x75,7,8); + store(addr,l); +endinstr; + +instr(0x76,4); +pc--; /* keep nopping until int */ +endinstr; + +HLinstr(0x77,7,8); + store(addr,a); +endinstr; + +instr(0x78,4); + a=b; +endinstr; + +instr(0x79,4); + a=c; +endinstr; + +instr(0x7a,4); + a=d; +endinstr; + +instr(0x7b,4); + a=e; +endinstr; + +instr(0x7c,4); + a=xh; +endinstr; + +instr(0x7d,4); + a=xl; +endinstr; + +HLinstr(0x7e,7,8); + a=fetch(addr); +endinstr; + +instr(0x7f,4); + /* ld a,a */ +endinstr; + +instr(0x80,4); + adda(b,0); +endinstr; + +instr(0x81,4); + adda(c,0); +endinstr; + +instr(0x82,4); + adda(d,0); +endinstr; + +instr(0x83,4); + adda(e,0); +endinstr; + +instr(0x84,4); + adda(xh,0); +endinstr; + +instr(0x85,4); + adda(xl,0); +endinstr; + +HLinstr(0x86,7,8); + adda(fetch(addr),0); +endinstr; + +instr(0x87,4); + adda(a,0); +endinstr; + +instr(0x88,4); + adda(b,cy); +endinstr; + +instr(0x89,4); + adda(c,cy); +endinstr; + +instr(0x8a,4); + adda(d,cy); +endinstr; + +instr(0x8b,4); + adda(e,cy); +endinstr; + +instr(0x8c,4); + adda(xh,cy); +endinstr; + +instr(0x8d,4); + adda(xl,cy); +endinstr; + +HLinstr(0x8e,7,8); + adda(fetch(addr),cy); +endinstr; + +instr(0x8f,4); + adda(a,cy); +endinstr; + +instr(0x90,4); + suba(b,0); +endinstr; + +instr(0x91,4); + suba(c,0); +endinstr; + +instr(0x92,4); + suba(d,0); +endinstr; + +instr(0x93,4); + suba(e,0); +endinstr; + +instr(0x94,4); + suba(xh,0); +endinstr; + +instr(0x95,4); + suba(xl,0); +endinstr; + +HLinstr(0x96,7,8); + suba(fetch(addr),0); +endinstr; + +instr(0x97,4); + suba(a,0); +endinstr; + +instr(0x98,4); + suba(b,cy); +endinstr; + +instr(0x99,4); + suba(c,cy); +endinstr; + +instr(0x9a,4); + suba(d,cy); +endinstr; + +instr(0x9b,4); + suba(e,cy); +endinstr; + +instr(0x9c,4); + suba(xh,cy); +endinstr; + +instr(0x9d,4); + suba(xl,cy); +endinstr; + +HLinstr(0x9e,7,8); + suba(fetch(addr),cy); +endinstr; + +instr(0x9f,4); + suba(a,cy); +endinstr; + +instr(0xa0,4); + anda(b); +endinstr; + +instr(0xa1,4); + anda(c); +endinstr; + +instr(0xa2,4); + anda(d); +endinstr; + +instr(0xa3,4); + anda(e); +endinstr; + +instr(0xa4,4); + anda(xh); +endinstr; + +instr(0xa5,4); + anda(xl); +endinstr; + +HLinstr(0xa6,7,8); + anda(fetch(addr)); +endinstr; + +instr(0xa7,4); + anda(a); +endinstr; + +instr(0xa8,4); + xora(b); +endinstr; + +instr(0xa9,4); + xora(c); +endinstr; + +instr(0xaa,4); + xora(d); +endinstr; + +instr(0xab,4); + xora(e); +endinstr; + +instr(0xac,4); + xora(xh); +endinstr; + +instr(0xad,4); + xora(xl); +endinstr; + +HLinstr(0xae,7,8); + xora(fetch(addr)); +endinstr; + +instr(0xaf,4); + xora(a); +endinstr; + +instr(0xb0,4); + ora(b); +endinstr; + +instr(0xb1,4); + ora(c); +endinstr; + +instr(0xb2,4); + ora(d); +endinstr; + +instr(0xb3,4); + ora(e); +endinstr; + +instr(0xb4,4); + ora(xh); +endinstr; + +instr(0xb5,4); + ora(xl); +endinstr; + +HLinstr(0xb6,7,8); + ora(fetch(addr)); +endinstr; + +instr(0xb7,4); + ora(a); +endinstr; + +instr(0xb8,4); + cpa(b); +endinstr; + +instr(0xb9,4); + cpa(c); +endinstr; + +instr(0xba,4); + cpa(d); +endinstr; + +instr(0xbb,4); + cpa(e); +endinstr; + +instr(0xbc,4); + cpa(xh); +endinstr; + +instr(0xbd,4); + cpa(xl); +endinstr; + +HLinstr(0xbe,7,8); + cpa(fetch(addr)); +endinstr; + +instr(0xbf,4); + cpa(a); +endinstr; + +instr(0xc0,5); + if(!(f&0x40))ret; +endinstr; + +instr(0xc1,10); + pop1(b,c); +endinstr; + +instr(0xc2,10); + if(!(f&0x40))jp; + else pc+=2; +endinstr; + +instr(0xc3,10); + jp; +endinstr; + +instr(0xc4,10); + if(!(f&0x40))call; + else pc+=2; +endinstr; + +instr(0xc5,11); + push1(b,c); +endinstr; + +instr(0xc6,7); + adda(fetch(pc),0); + pc++; +endinstr; + +instr(0xc7,11); + push2(pc); + pc=0; +endinstr; + +instr(0xc8,5); + if(f&0x40)ret; +endinstr; + +instr(0xc9,4); + ret; +endinstr; + +instr(0xca,10); + if(f&0x40)jp; + else pc+=2; +endinstr; + +instr(0xcb,4); +#include "cbops.h" +endinstr; + +instr(0xcc,10); + if(f&0x40)call; + else pc+=2; +endinstr; + +instr(0xcd,10); + call; +endinstr; + +instr(0xce,7); + adda(fetch(pc),cy); + pc++; +endinstr; + +instr(0xcf,11); + push2(pc); + pc=8; +endinstr; + +instr(0xd0,5); + if(!cy)ret; +endinstr; + +instr(0xd1,10); + pop1(d,e); +endinstr; + +instr(0xd2,10); + if(!cy)jp; + else pc+=2; +endinstr; + +instr(0xd3,11); + tstates+=out(a,fetch(pc),a); + pc++; +endinstr; + +instr(0xd4,10); + if(!cy)call; + else pc+=2; +endinstr; + +instr(0xd5,11); + push1(d,e); +endinstr; + +instr(0xd6,7); + suba(fetch(pc),0); + pc++; +endinstr; + +instr(0xd7,11); + push2(pc); + pc=16; +endinstr; + +instr(0xd8,5); + if(cy)ret; +endinstr; + +instr(0xd9,4); + swap(b,b1); + swap(c,c1); + swap(d,d1); + swap(e,e1); + swap(h,h1); + swap(l,l1); +endinstr; + +instr(0xda,10); + if(cy)jp; + else pc+=2; +endinstr; + +instr(0xdb,11); + {unsigned short t; + a=t=in(a,fetch(pc)); + tstates+=t>>8; + pc++; + } +endinstr; + +instr(0xdc,10); + if(cy)call; + else pc+=2; +endinstr; + +instr(0xdd,4); + new_ixoriy=1; + intsample=0; +endinstr; + +instr(0xde,7); + suba(fetch(pc),cy); + pc++; +endinstr; + +instr(0xdf,11); + push2(pc); + pc=24; +endinstr; + +instr(0xe0,5); + if(!(f&4))ret; +endinstr; + +instr(0xe1,10); + if(!ixoriy)pop1(h,l); + else if(ixoriy==1)pop2(ix); + else pop2(iy); +endinstr; + +instr(0xe2,10); + if(!(f&4))jp; + else pc+=2; +endinstr; + +instr(0xe3,19); + if(!ixoriy){ + unsigned short t=fetch2(sp); + store2b(sp,h,l); + l=t; + h=t>>8; + } + else if(ixoriy==1){ + unsigned short t=fetch2(sp); + store2(sp,ix); + ix=t; + } + else{ + unsigned short t=fetch2(sp); + store2(sp,iy); + iy=t; + } +endinstr; + +instr(0xe4,10); + if(!(f&4))call; + else pc+=2; +endinstr; + +instr(0xe5,11); + if(!ixoriy)push1(h,l); + else if(ixoriy==1)push2(ix); + else push2(iy); +endinstr; + +instr(0xe6,7); + anda(fetch(pc)); + pc++; +endinstr; + +instr(0xe7,11); + push2(pc); + pc=32; +endinstr; + +instr(0xe8,5); + if(f&4)ret; +endinstr; + +instr(0xe9,4); + pc=!ixoriy?hl:ixoriy==1?ix:iy; +endinstr; + +instr(0xea,10); + if(f&4)jp; + else pc+=2; +endinstr; + +instr(0xeb,4); + swap(h,d); + swap(e,l); +endinstr; + +instr(0xec,10); + if(f&4)call; + else pc+=2; +endinstr; + +instr(0xed,4); +#include"edops.h" +endinstr; + +instr(0xee,7); + xora(fetch(pc)); + pc++; +endinstr; + +instr(0xef,11); + push2(pc); + pc=40; +endinstr; + +instr(0xf0,5); + if(!(f&0x80))ret; +endinstr; + +instr(0xf1,10); + pop1(a,f); +endinstr; + +instr(0xf2,10); + if(!(f&0x80))jp; + else pc+=2; +endinstr; + +instr(0xf3,4); + iff1=iff2=0; + intsample=0; +endinstr; + +instr(0xf4,10); + if(!(f&0x80))call; + else pc+=2; +endinstr; + +instr(0xf5,11); + push1(a,f); +endinstr; + +instr(0xf6,7); + ora(fetch(pc)); + pc++; +endinstr; + +instr(0xf7,11); + push2(pc); + pc=48; +endinstr; + +instr(0xf8,5); + if(f&0x80)ret; +endinstr; + +instr(0xf9,6); + sp=!ixoriy?hl:ixoriy==1?ix:iy; +endinstr; + +instr(0xfa,10); + if(f&0x80)jp; + else pc+=2; +endinstr; + +instr(0xfb,4); + iff1=iff2=1; + intsample=0; +endinstr; + +instr(0xfc,10); + if(f&0x80)call; + else pc+=2; +endinstr; + +instr(0xfd,4); + new_ixoriy=2; + intsample=0; +endinstr; + +instr(0xfe,7); + cpa(fetch(pc)); + pc++; +endinstr; + +instr(0xff,11); + push2(pc); + pc=56; +endinstr; + + diff --git a/MCUME_pico/pico81/zx80rom.h b/MCUME_pico/pico81/zx80rom.h new file mode 100644 index 0000000..7b35247 --- /dev/null +++ b/MCUME_pico/pico81/zx80rom.h @@ -0,0 +1,259 @@ +const unsigned char PROGMEM zx80rom[] = { + 0x21, 0xff, 0x7f, 0x3e, 0x3f, 0xc3, 0x61, 0x02, 0xe1, 0x6e, 0xfd, 0xcb, 0x00, 0x7e, 0x18, 0x03, + 0xc3, 0x60, 0x05, 0xc8, 0xfd, 0x75, 0x00, 0xc9, 0x18, 0x38, 0x2a, 0x26, 0x40, 0x7e, 0xa7, 0xc0, + 0xcd, 0x52, 0x00, 0x18, 0xf9, 0xcd, 0x55, 0x00, 0xcd, 0x1a, 0x00, 0x06, 0x00, 0xc3, 0xe1, 0x09, + 0xcd, 0x4f, 0x09, 0xd0, 0xc5, 0xc3, 0xf3, 0x0c, 0x0d, 0xc2, 0x45, 0x00, 0xe1, 0x05, 0xc8, 0xcb, + 0xd9, 0xed, 0x4f, 0xfb, 0xe9, 0xd1, 0xc8, 0x18, 0xf8, 0xcd, 0x25, 0x00, 0x7e, 0xfe, 0xd9, 0xc2, + 0xae, 0x08, 0x2a, 0x26, 0x40, 0x23, 0x22, 0x26, 0x40, 0x7e, 0xfe, 0xb0, 0xc0, 0x22, 0x04, 0x40, + 0xfd, 0xcb, 0x19, 0x7e, 0x28, 0xef, 0xfd, 0xcb, 0x01, 0xd6, 0x18, 0xe9, 0x3f, 0x3d, 0x28, 0x3b, + 0x26, 0x38, 0x29, 0x2b, 0x2c, 0x36, 0x3c, 0x2a, 0x37, 0x39, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x1c, + 0x25, 0x24, 0x23, 0x22, 0x35, 0x34, 0x2e, 0x3a, 0x3e, 0x76, 0x31, 0x30, 0x2f, 0x2d, 0x00, 0x1b, + 0x32, 0x33, 0x27, 0x0e, 0xd7, 0x0f, 0xdf, 0x09, 0x08, 0x06, 0x07, 0x0b, 0x02, 0x03, 0x04, 0x05, + 0x0a, 0xdb, 0xe0, 0xd5, 0xd6, 0x72, 0x77, 0x74, 0x73, 0x70, 0x71, 0xde, 0xd9, 0xda, 0x0d, 0x01, + 0x75, 0xe3, 0xdd, 0xdc, 0xe2, 0x0c, 0xd8, 0xe4, 0xe5, 0xe1, 0xd4, 0x8f, 0x81, 0x39, 0x2d, 0x2a, + 0xb3, 0x39, 0xb4, 0x99, 0x9a, 0x91, 0x90, 0x33, 0x34, 0xb9, 0x92, 0x93, 0x94, 0x95, 0x26, 0x33, + 0xa9, 0x34, 0xb7, 0x14, 0x94, 0x96, 0x97, 0x98, 0x31, 0x2e, 0x38, 0xb9, 0x37, 0x2a, 0x39, 0x3a, + 0x37, 0xb3, 0x28, 0x31, 0xb8, 0x29, 0x2e, 0xb2, 0x38, 0x26, 0x3b, 0xaa, 0x2b, 0x34, 0xb7, 0x2c, + 0x34, 0x00, 0x39, 0xb4, 0x35, 0x34, 0x30, 0xaa, 0x2e, 0x33, 0x35, 0x3a, 0xb9, 0x37, 0x26, 0x33, + 0x29, 0x34, 0x32, 0x2e, 0x38, 0xaa, 0x31, 0x2a, 0xb9, 0x8f, 0x8f, 0x33, 0x2a, 0x3d, 0xb9, 0x35, + 0x37, 0x2e, 0x33, 0xb9, 0x8f, 0x33, 0x2a, 0xbc, 0x37, 0x3a, 0xb3, 0x38, 0x39, 0x34, 0xb5, 0x28, + 0x34, 0x33, 0x39, 0x2e, 0x33, 0x3a, 0xaa, 0x2e, 0xab, 0x2c, 0x34, 0x00, 0x38, 0x3a, 0xa7, 0x31, + 0x34, 0x26, 0xa9, 0x28, 0x31, 0x2a, 0x26, 0xb7, 0x37, 0x2a, 0xb2, 0x8f, 0xcd, 0xad, 0x01, 0x06, + 0x08, 0x10, 0xfe, 0x2a, 0x1e, 0x40, 0x23, 0x22, 0x1e, 0x40, 0x21, 0xff, 0xff, 0x06, 0xfe, 0x48, + 0xed, 0x78, 0xf6, 0x01, 0xf6, 0xe0, 0x57, 0x2f, 0xfe, 0x01, 0x9f, 0xb0, 0xa5, 0x6f, 0x7c, 0xa2, + 0x67, 0xcb, 0x00, 0xed, 0x78, 0x38, 0xed, 0x1f, 0xcb, 0x14, 0x17, 0x17, 0x17, 0x9f, 0xe6, 0x18, + 0xc6, 0x20, 0x32, 0x23, 0x40, 0xed, 0x4b, 0x26, 0x40, 0x22, 0x26, 0x40, 0x78, 0xc6, 0x02, 0xed, + 0x42, 0xeb, 0x21, 0x22, 0x40, 0x7e, 0xb2, 0xb3, 0xc8, 0x78, 0xfe, 0xfe, 0x9f, 0x06, 0x1f, 0xb6, + 0xa0, 0x1f, 0x77, 0x05, 0x10, 0xfe, 0xd3, 0xff, 0x3e, 0xec, 0x06, 0x19, 0x2a, 0x0c, 0x40, 0xcb, + 0xfc, 0xcd, 0xad, 0x01, 0x3e, 0xf3, 0x04, 0x2b, 0xfd, 0x35, 0x23, 0x18, 0x8f, 0xfd, 0x4e, 0x23, + 0xed, 0x4f, 0x3e, 0xdd, 0xfb, 0xe9, 0xd1, 0x11, 0xcb, 0x12, 0x3e, 0x7f, 0xdb, 0xfe, 0x1f, 0x30, + 0x42, 0x10, 0xfe, 0x1b, 0x7a, 0xb3, 0x20, 0xf2, 0x21, 0x00, 0x40, 0x11, 0x08, 0xf8, 0xcb, 0x06, + 0x9f, 0xe6, 0x05, 0xc6, 0x04, 0x4f, 0xd3, 0xff, 0x06, 0x24, 0x10, 0xfe, 0x3e, 0x7f, 0xdb, 0xfe, + 0x06, 0x23, 0x10, 0xfe, 0x0d, 0x20, 0xef, 0x42, 0x00, 0x10, 0xfd, 0x16, 0xfe, 0x1d, 0x20, 0xde, + 0x1f, 0x30, 0x10, 0xcd, 0xf8, 0x01, 0x18, 0xd3, 0x23, 0xeb, 0x2a, 0x0a, 0x40, 0x37, 0xed, 0x52, + 0xeb, 0xd0, 0xe1, 0xc3, 0x83, 0x02, 0xd1, 0x11, 0x12, 0x57, 0x3e, 0x7f, 0xdb, 0xfe, 0x1f, 0x30, + 0xf2, 0x17, 0x17, 0x38, 0xf2, 0x1b, 0x7a, 0xb3, 0x20, 0xf0, 0xfd, 0x34, 0x0b, 0x21, 0x00, 0x40, + 0x1e, 0x08, 0x3e, 0x7f, 0xdb, 0xfe, 0x1f, 0x30, 0x24, 0x17, 0x17, 0x30, 0xf5, 0x0e, 0x94, 0x06, + 0x1a, 0x0d, 0xdb, 0xfe, 0x17, 0xcb, 0x79, 0x79, 0x38, 0xf5, 0x10, 0xf5, 0x20, 0x04, 0xfe, 0x56, + 0x30, 0xe0, 0x3f, 0xcb, 0x16, 0x1d, 0x20, 0xda, 0xcd, 0xf8, 0x01, 0x18, 0xd3, 0x15, 0xf2, 0x00, + 0x00, 0xfd, 0x35, 0x0b, 0x18, 0xad, 0xcb, 0xb8, 0xcb, 0xb0, 0xed, 0x43, 0x06, 0x40, 0xc1, 0x18, + 0x22, 0x36, 0x01, 0x2b, 0xbc, 0x20, 0xfa, 0x23, 0x35, 0x28, 0xfc, 0xf9, 0xf5, 0x3e, 0x0e, 0xed, + 0x47, 0xed, 0x56, 0xfd, 0x21, 0x00, 0x40, 0x21, 0x28, 0x40, 0x22, 0x08, 0x40, 0x36, 0x80, 0x23, + 0x22, 0x0a, 0x40, 0x2a, 0x0a, 0x40, 0x36, 0xb0, 0x23, 0x36, 0x76, 0x23, 0x22, 0x0c, 0x40, 0xfd, + 0x36, 0x12, 0x02, 0xcd, 0x47, 0x07, 0xeb, 0x78, 0xfd, 0x96, 0x12, 0x38, 0x5a, 0x3c, 0x47, 0xd9, + 0x2a, 0x06, 0x40, 0xed, 0x5b, 0x13, 0x40, 0xed, 0x52, 0xeb, 0x30, 0x04, 0x19, 0x22, 0x13, 0x40, + 0xcd, 0x0a, 0x06, 0x1e, 0x00, 0xcd, 0xf7, 0x04, 0x38, 0xfb, 0x1d, 0x20, 0x33, 0xe5, 0x2a, 0x06, + 0x40, 0xcd, 0x0a, 0x06, 0xe1, 0xa7, 0xed, 0x52, 0x21, 0x13, 0x40, 0x30, 0x0b, 0xeb, 0x7e, 0x23, + 0xed, 0xa0, 0x12, 0x18, 0xbe, 0x21, 0x06, 0x40, 0x5e, 0x23, 0x56, 0xe5, 0xeb, 0x23, 0xcd, 0x0a, + 0x06, 0xcd, 0xc2, 0x03, 0xe1, 0xfd, 0xcb, 0x19, 0x6e, 0x20, 0x0c, 0x72, 0x2b, 0x73, 0x18, 0xa3, + 0xcd, 0xc2, 0x05, 0xed, 0x53, 0x0e, 0x40, 0xfd, 0x36, 0x01, 0x01, 0x2a, 0x0a, 0x40, 0xcd, 0xbe, + 0x07, 0xed, 0x5b, 0x0e, 0x40, 0xfd, 0x46, 0x12, 0x0e, 0x01, 0xd9, 0x2a, 0x0a, 0x40, 0xcd, 0x12, + 0x05, 0x38, 0x0a, 0x21, 0x12, 0x40, 0x34, 0x3e, 0x18, 0xbe, 0x30, 0xb7, 0x77, 0xcd, 0xc2, 0x05, + 0xcd, 0x3f, 0x01, 0xcb, 0x28, 0x9f, 0xf6, 0x26, 0x2e, 0x05, 0x95, 0x85, 0x37, 0xcb, 0x19, 0x38, + 0xfa, 0x0c, 0x20, 0xc3, 0x48, 0x2d, 0x2e, 0x01, 0x20, 0xf1, 0x21, 0x6b, 0x00, 0x5f, 0x19, 0x7e, + 0xfd, 0xcb, 0x01, 0x56, 0x28, 0x07, 0xc6, 0xc0, 0xfe, 0xe6, 0x30, 0x01, 0x7e, 0xfe, 0xc0, 0xea, + 0x5e, 0x03, 0x2a, 0x04, 0x40, 0x01, 0x01, 0x00, 0xcd, 0xd5, 0x05, 0x12, 0x18, 0x99, 0x5f, 0x21, + 0x92, 0x02, 0x19, 0x19, 0x4e, 0x23, 0x46, 0xc5, 0x2a, 0x04, 0x40, 0xc9, 0x01, 0x01, 0x00, 0xc3, + 0x66, 0x06, 0xa9, 0x03, 0xd5, 0x02, 0x82, 0x03, 0x87, 0x03, 0xb9, 0x03, 0xcb, 0x03, 0x08, 0x04, + 0x95, 0x03, 0xcd, 0x9e, 0x03, 0x2b, 0x2b, 0x23, 0x7e, 0xfe, 0x76, 0x28, 0x1a, 0x36, 0xb0, 0x2a, + 0x04, 0x40, 0x77, 0x18, 0xc7, 0xcd, 0x9e, 0x03, 0x2b, 0xcd, 0x6c, 0x03, 0x18, 0xbe, 0xed, 0x5b, + 0x0a, 0x40, 0x1a, 0xfe, 0xb0, 0xc0, 0xd1, 0x18, 0xb3, 0x2a, 0x06, 0x40, 0xcd, 0x0a, 0x06, 0xeb, + 0xcd, 0xc2, 0x03, 0x21, 0x07, 0x40, 0xc3, 0xe5, 0x02, 0x11, 0x00, 0x00, 0x18, 0xf5, 0xeb, 0x11, + 0xba, 0x03, 0x7e, 0xe6, 0xc0, 0x20, 0xf7, 0x56, 0x23, 0x5e, 0xc9, 0x0e, 0x00, 0xed, 0x5b, 0x0a, + 0x40, 0xd9, 0x2a, 0x06, 0x40, 0xcd, 0x0a, 0x06, 0xcd, 0xc2, 0x03, 0x7a, 0xb3, 0xca, 0x83, 0x02, + 0x2b, 0xcd, 0xbf, 0x06, 0x2b, 0xcd, 0x24, 0x06, 0x23, 0x23, 0x0b, 0x0b, 0xd9, 0xd5, 0xd9, 0xd1, + 0x3e, 0xb0, 0x12, 0x13, 0xe5, 0x21, 0x22, 0x00, 0x19, 0x09, 0xed, 0x72, 0x30, 0xa9, 0xe1, 0xed, + 0xb0, 0xed, 0x53, 0x0c, 0x40, 0xc3, 0x93, 0x02, 0x2a, 0x15, 0x40, 0x7c, 0xb5, 0x20, 0x98, 0x2a, + 0x04, 0x40, 0xcd, 0x6c, 0x03, 0x2a, 0x0a, 0x40, 0x22, 0x26, 0x40, 0xcd, 0x1a, 0x00, 0xfd, 0xcb, + 0x19, 0x6e, 0x20, 0x18, 0xcd, 0x79, 0x06, 0xd9, 0x7c, 0xb5, 0xc2, 0xba, 0x04, 0x2b, 0x2b, 0x22, + 0x02, 0x40, 0xcd, 0x47, 0x07, 0xd9, 0x7e, 0xfe, 0x76, 0xca, 0x83, 0x02, 0xfd, 0x36, 0x00, 0xff, + 0xfd, 0x36, 0x01, 0x88, 0xcd, 0xbe, 0x07, 0xcd, 0x0a, 0x0d, 0xed, 0x5b, 0x02, 0x40, 0x21, 0x19, + 0x40, 0xcb, 0x6e, 0x28, 0x03, 0xcb, 0xae, 0x13, 0xfd, 0xcb, 0x00, 0x7e, 0x28, 0x2a, 0x21, 0x01, + 0x40, 0xcb, 0x5e, 0xcb, 0x9e, 0x2a, 0x26, 0x40, 0x23, 0x28, 0x09, 0xeb, 0x7c, 0xe6, 0xc0, 0x20, + 0x17, 0xcd, 0x0a, 0x06, 0x7e, 0xe6, 0xc0, 0x20, 0x0f, 0x56, 0x23, 0x5e, 0xed, 0x53, 0x02, 0x40, + 0x23, 0x3e, 0x7f, 0xdb, 0xfe, 0x1f, 0x38, 0xbc, 0xcd, 0xe0, 0x06, 0xcd, 0xc2, 0x05, 0x01, 0x20, + 0x01, 0xd9, 0x3a, 0x00, 0x40, 0xed, 0x4b, 0x02, 0x40, 0x3c, 0x28, 0x0c, 0xfe, 0x09, 0x20, 0x01, + 0x03, 0xed, 0x43, 0x17, 0x40, 0x20, 0x01, 0x0b, 0xcd, 0x56, 0x05, 0x3e, 0x15, 0xd7, 0xcd, 0xa1, + 0x06, 0xcd, 0xc2, 0x05, 0xcd, 0x3f, 0x01, 0xc3, 0x83, 0x02, 0x22, 0x06, 0x40, 0xd9, 0xeb, 0xcd, + 0x47, 0x07, 0xed, 0x52, 0xd9, 0xcd, 0x0a, 0x06, 0xe5, 0x20, 0x06, 0xcd, 0x24, 0x06, 0xcd, 0x66, + 0x06, 0xd9, 0x23, 0x44, 0x4d, 0x7d, 0xd6, 0x03, 0xb4, 0xc4, 0x4f, 0x09, 0xe1, 0x30, 0x15, 0xc5, + 0x2b, 0xcd, 0xd5, 0x05, 0x13, 0x2a, 0x0c, 0x40, 0x2b, 0xc1, 0x0b, 0xed, 0xb8, 0x2a, 0x06, 0x40, + 0xeb, 0x72, 0x23, 0x73, 0xc3, 0x83, 0x02, 0xed, 0x4b, 0x06, 0x40, 0xcd, 0x1c, 0x06, 0x16, 0x97, + 0x28, 0x05, 0x11, 0x00, 0x00, 0xcb, 0x13, 0x7e, 0xfe, 0x40, 0xdc, 0xbf, 0x06, 0xd0, 0x23, 0x7a, + 0xd7, 0xd0, 0xfd, 0xcb, 0x01, 0xc6, 0xed, 0x4b, 0x15, 0x40, 0xa7, 0xed, 0x42, 0x20, 0x04, 0x3e, + 0xb8, 0xd7, 0xc8, 0x09, 0x7e, 0x23, 0xfe, 0xb0, 0x28, 0x12, 0xfe, 0xc0, 0xea, 0x59, 0x05, 0x38, + 0x05, 0xcd, 0x84, 0x05, 0x18, 0x03, 0xcd, 0x59, 0x05, 0xd0, 0x18, 0xda, 0xfd, 0xcb, 0x01, 0x56, + 0x20, 0x01, 0x3c, 0xd7, 0x18, 0xf3, 0x7b, 0x07, 0x0f, 0xd8, 0x18, 0x10, 0xaf, 0x09, 0x3c, 0x38, + 0xfc, 0xed, 0x42, 0x3d, 0x28, 0xf0, 0x1e, 0x1c, 0x83, 0xa7, 0x28, 0x04, 0xfd, 0xcb, 0x01, 0x86, + 0xd9, 0x67, 0x17, 0x17, 0x0d, 0x30, 0x02, 0x0e, 0x00, 0xfa, 0x74, 0x05, 0x38, 0x0e, 0x20, 0x0c, + 0x3e, 0x76, 0x12, 0x13, 0x38, 0x02, 0x0e, 0x20, 0xa7, 0x05, 0x28, 0x06, 0x68, 0xcd, 0x58, 0x09, + 0x12, 0x13, 0xd9, 0xc9, 0xcd, 0xa8, 0x05, 0x30, 0x09, 0xfd, 0xcb, 0x01, 0x46, 0x20, 0x03, 0xaf, + 0xd7, 0xd0, 0x0a, 0xe6, 0x3f, 0xcd, 0x59, 0x05, 0xd0, 0x0a, 0x03, 0x87, 0x30, 0xf4, 0xfe, 0x38, + 0xd8, 0xaf, 0xfd, 0xcb, 0x01, 0xc6, 0x18, 0xb8, 0xe5, 0x21, 0xba, 0x00, 0x96, 0x23, 0x38, 0x09, + 0x3c, 0x47, 0xcb, 0x7e, 0x23, 0x28, 0xfb, 0x10, 0xf9, 0x44, 0x4d, 0xe1, 0x0a, 0xe6, 0x3f, 0xc6, + 0xe4, 0xc9, 0xd9, 0xaf, 0xb8, 0x28, 0x09, 0xb9, 0x3e, 0x76, 0x28, 0x02, 0x12, 0x13, 0x10, 0xfc, + 0xed, 0x53, 0x10, 0x40, 0xc9, 0xcd, 0xdf, 0x05, 0x2a, 0x10, 0x40, 0xeb, 0xed, 0xb8, 0xc9, 0xf5, + 0xe5, 0x21, 0x08, 0x40, 0x3e, 0x05, 0x5e, 0x23, 0x56, 0xe3, 0xa7, 0xed, 0x52, 0x19, 0xe3, 0x30, + 0x09, 0xd5, 0xeb, 0x09, 0xeb, 0x72, 0x2b, 0x73, 0x23, 0xd1, 0x23, 0x3d, 0x20, 0xe8, 0xeb, 0xd1, + 0xf1, 0xa7, 0xed, 0x52, 0x44, 0x4d, 0x03, 0x19, 0xeb, 0xc9, 0xe5, 0x21, 0x28, 0x40, 0x54, 0x5d, + 0xc1, 0xeb, 0xcd, 0x1c, 0x06, 0xd0, 0xc5, 0xcd, 0x24, 0x06, 0x18, 0xf4, 0x7e, 0xb8, 0xc0, 0x23, + 0x7e, 0x2b, 0xb9, 0xc9, 0xe5, 0x7e, 0x87, 0xfa, 0x35, 0x06, 0x38, 0x17, 0x23, 0x3e, 0x76, 0x23, + 0x47, 0xed, 0xb1, 0x18, 0x1d, 0x01, 0x02, 0x00, 0x38, 0x01, 0x48, 0x17, 0x17, 0x23, 0x7e, 0x30, + 0xfb, 0x18, 0x0c, 0xe6, 0x40, 0x3e, 0x01, 0x28, 0xe6, 0x23, 0x7e, 0x23, 0x06, 0x00, 0x4f, 0x03, + 0x09, 0x09, 0xd1, 0xa7, 0xed, 0x52, 0x44, 0x4d, 0x19, 0xeb, 0xc9, 0x2a, 0x0a, 0x40, 0x2b, 0xed, + 0x5b, 0x08, 0x40, 0xcd, 0x53, 0x06, 0xc5, 0x78, 0x2f, 0x47, 0x79, 0x2f, 0x4f, 0x03, 0xcd, 0xdf, + 0x05, 0xeb, 0xe1, 0x19, 0xd5, 0xed, 0xb0, 0xe1, 0xc9, 0x7e, 0xd9, 0x21, 0x00, 0x00, 0x44, 0xd6, + 0x1c, 0x38, 0x17, 0xfe, 0x0a, 0x30, 0x13, 0x4f, 0x3e, 0x0d, 0xbc, 0x30, 0x01, 0x67, 0x54, 0x5d, + 0x29, 0x29, 0x19, 0x29, 0x09, 0xd9, 0xdf, 0xd9, 0x18, 0xe5, 0x7c, 0x22, 0x22, 0x40, 0xd9, 0x17, + 0xc9, 0xd5, 0xe5, 0x60, 0x69, 0xcb, 0x78, 0x28, 0x0c, 0x3e, 0x12, 0xcd, 0x59, 0x05, 0x30, 0x2d, + 0x21, 0x01, 0x00, 0xed, 0x42, 0x1e, 0xff, 0x01, 0xf0, 0xd8, 0xcd, 0x4c, 0x05, 0x18, 0x09, 0xd5, + 0x56, 0x23, 0x5e, 0xe5, 0xeb, 0x1e, 0x00, 0x37, 0x01, 0x18, 0xfc, 0xdc, 0x4c, 0x05, 0x01, 0x9c, + 0xff, 0xdc, 0x4c, 0x05, 0x0e, 0xf6, 0xdc, 0x4c, 0x05, 0x7d, 0xdc, 0x56, 0x05, 0xe1, 0xd1, 0xc9, + 0xfd, 0xcb, 0x01, 0x7e, 0xe1, 0xc8, 0xd9, 0xed, 0x5b, 0x0e, 0x40, 0xed, 0x4b, 0x24, 0x40, 0xd9, + 0xe9, 0xfd, 0xcb, 0x00, 0x7e, 0xc8, 0xcd, 0xe0, 0x06, 0x2a, 0x22, 0x40, 0xfd, 0xcb, 0x01, 0x76, + 0x28, 0x0a, 0x44, 0x4d, 0xcd, 0xa1, 0x06, 0x18, 0x1a, 0xd7, 0x30, 0x19, 0x7e, 0x23, 0xfe, 0x01, + 0x28, 0x28, 0xcb, 0x77, 0x28, 0xf3, 0xcd, 0x84, 0x05, 0x18, 0xef, 0xcd, 0xe0, 0x06, 0x3e, 0x76, + 0xcd, 0x59, 0x05, 0x38, 0x15, 0xcf, 0x04, 0xcd, 0xe0, 0x06, 0xfd, 0xcb, 0x01, 0xc6, 0xaf, 0xd7, + 0x30, 0xf3, 0xd9, 0x79, 0xd9, 0x3d, 0xe6, 0x07, 0x20, 0xf4, 0xd9, 0xeb, 0xed, 0x43, 0x24, 0x40, + 0x22, 0x0e, 0x40, 0x22, 0x10, 0x40, 0xc9, 0x2a, 0x0c, 0x40, 0x36, 0x76, 0x23, 0x01, 0x21, 0x17, + 0x18, 0xea, 0x4f, 0x2c, 0x64, 0x3f, 0x59, 0x2b, 0x17, 0x4b, 0x36, 0x4e, 0x10, 0x5e, 0x5d, 0x2a, + 0x2d, 0x5a, 0x61, 0x3b, 0x18, 0x4d, 0x0d, 0x11, 0x44, 0x4c, 0x31, 0x50, 0x01, 0xe3, 0x02, 0x06, + 0x00, 0x34, 0x09, 0x06, 0xd5, 0x05, 0xb9, 0x08, 0x06, 0x00, 0x43, 0x09, 0x00, 0x2e, 0x09, 0x00, + 0x65, 0x09, 0x04, 0xe3, 0x06, 0xd6, 0x05, 0xc4, 0x08, 0x04, 0x00, 0xf9, 0x08, 0x05, 0x72, 0x09, + 0x01, 0x00, 0x9a, 0x09, 0x04, 0xda, 0x06, 0xd9, 0x00, 0xd3, 0x0c, 0x05, 0x4a, 0x08, 0x03, 0x3d, + 0x09, 0x03, 0x56, 0x02, 0x06, 0xd8, 0x05, 0xd1, 0x09, 0x03, 0x23, 0x09, 0x00, 0x06, 0x02, 0x00, + 0xb6, 0x01, 0x00, 0x30, 0x09, 0x00, 0x5b, 0x06, 0x00, 0x47, 0x07, 0x05, 0x44, 0x08, 0x2b, 0x22, + 0x26, 0x40, 0x21, 0x00, 0x00, 0x00, 0x22, 0x15, 0x40, 0x21, 0x19, 0x40, 0xcb, 0x6e, 0x28, 0x07, + 0xcb, 0xbe, 0x46, 0xdf, 0xc3, 0x89, 0x08, 0xcb, 0xfe, 0xe7, 0xcd, 0x79, 0x06, 0x38, 0x06, 0xd9, + 0x11, 0xf0, 0xd8, 0x19, 0xd9, 0xdc, 0xae, 0x08, 0xcd, 0x1a, 0x00, 0xfd, 0xcb, 0x19, 0xbe, 0x01, + 0x00, 0x00, 0xed, 0x43, 0x22, 0x40, 0xfe, 0x76, 0xc8, 0x4f, 0xe7, 0x79, 0xd6, 0xe6, 0x38, 0xe5, + 0x4f, 0x21, 0x52, 0x07, 0x09, 0x4e, 0x09, 0x18, 0x03, 0x2a, 0x1a, 0x40, 0x7e, 0x23, 0x22, 0x1a, + 0x40, 0x01, 0x09, 0x08, 0xc5, 0x4f, 0x17, 0x38, 0x0d, 0x21, 0x36, 0x08, 0x06, 0x00, 0x09, 0x4e, + 0x09, 0xe5, 0xcd, 0x1a, 0x00, 0xc9, 0xcd, 0x1a, 0x00, 0xfe, 0xd5, 0x20, 0x04, 0xfd, 0xcb, 0x19, + 0xfe, 0xb9, 0x20, 0x7a, 0xe7, 0xc9, 0x1f, 0x33, 0x4d, 0x17, 0x64, 0x1b, 0x6c, 0xfd, 0xcb, 0x01, + 0x7e, 0xc0, 0xc1, 0x7e, 0xfe, 0x76, 0xc4, 0xae, 0x08, 0x7e, 0xfe, 0x76, 0xc8, 0xe7, 0x18, 0xfa, + 0xfe, 0x76, 0xc4, 0xa8, 0x08, 0xbf, 0xc1, 0xcc, 0x3d, 0x08, 0xeb, 0x2a, 0x1a, 0x40, 0x4e, 0x23, + 0x46, 0xeb, 0xc5, 0xed, 0x4b, 0x22, 0x40, 0x78, 0xb1, 0xc9, 0xcd, 0x14, 0x0d, 0x30, 0x3f, 0xfd, + 0xcb, 0x01, 0x7e, 0xca, 0xad, 0x0a, 0x22, 0x20, 0x40, 0xfd, 0xcb, 0x01, 0xbe, 0xcd, 0xad, 0x0a, + 0xfd, 0xcb, 0x01, 0xfe, 0xc9, 0xc1, 0xfd, 0x46, 0x01, 0xc5, 0xef, 0xd1, 0x01, 0x3d, 0x0c, 0x3a, + 0x01, 0x40, 0xcb, 0x7f, 0x20, 0xcc, 0xaa, 0xe6, 0x40, 0xc4, 0xae, 0x08, 0x18, 0xa5, 0x22, 0x20, + 0x40, 0xcd, 0x14, 0x0d, 0x30, 0x08, 0xdf, 0xc9, 0xef, 0xfd, 0xcb, 0x01, 0x76, 0xc0, 0x3a, 0x15, + 0x40, 0xfd, 0xb6, 0x16, 0xc0, 0x22, 0x15, 0x40, 0xc9, 0x20, 0x06, 0xfd, 0xcb, 0x01, 0x7e, 0x20, + 0x89, 0xc3, 0xe8, 0x07, 0xc5, 0xcd, 0xa8, 0x08, 0xc1, 0xcd, 0x3d, 0x08, 0x2a, 0x22, 0x40, 0xe5, + 0xcd, 0x3d, 0x0c, 0xc1, 0xfd, 0xcb, 0x00, 0x7e, 0xc8, 0xc5, 0x2b, 0xcb, 0x7e, 0xcb, 0xfe, 0x23, + 0x23, 0x20, 0x07, 0x01, 0x04, 0x00, 0x23, 0xcd, 0xd5, 0x05, 0x23, 0xd1, 0x73, 0x23, 0x72, 0x23, + 0xed, 0x5b, 0x02, 0x40, 0x13, 0x73, 0x23, 0x72, 0xc9, 0x2a, 0x20, 0x40, 0xcd, 0x3b, 0x0b, 0xfd, + 0xcb, 0x00, 0x7e, 0xc8, 0xeb, 0x2b, 0x2b, 0xcb, 0x7e, 0x28, 0x16, 0x13, 0x23, 0x73, 0x23, 0x72, + 0x23, 0x4e, 0x23, 0x46, 0xc5, 0xe3, 0xcd, 0xcd, 0x0d, 0xe1, 0xd8, 0x23, 0x4e, 0x23, 0x46, 0x18, + 0x13, 0xcf, 0x00, 0x20, 0x04, 0xed, 0x4b, 0x1e, 0x40, 0xed, 0x43, 0x1c, 0x40, 0xc9, 0xcf, 0x08, + 0xed, 0x4b, 0x17, 0x40, 0xed, 0x43, 0x02, 0x40, 0xfd, 0xcb, 0x01, 0xde, 0xc9, 0xcd, 0x34, 0x09, + 0xc3, 0x5b, 0x06, 0x2a, 0x02, 0x40, 0x23, 0xe3, 0xe5, 0xcd, 0x34, 0x09, 0x01, 0x06, 0x00, 0x2a, + 0x10, 0x40, 0x09, 0xeb, 0x2a, 0x25, 0x40, 0x67, 0x3e, 0x13, 0x85, 0x6f, 0x7c, 0x26, 0x00, 0x19, + 0xed, 0x72, 0xd8, 0xcf, 0x03, 0xe1, 0xc1, 0xe5, 0x78, 0xfe, 0x3f, 0x20, 0xc7, 0xe1, 0xc5, 0xe5, + 0xcf, 0x06, 0x7e, 0xfe, 0x76, 0xca, 0x1b, 0x07, 0xd6, 0xd8, 0xce, 0x00, 0x28, 0x13, 0xef, 0xcd, + 0xf1, 0x06, 0xcd, 0x1a, 0x00, 0xd6, 0xd8, 0xce, 0x00, 0x28, 0x06, 0xcd, 0x3d, 0x08, 0xc3, 0x1b, + 0x07, 0xd4, 0x27, 0x07, 0xe7, 0xfe, 0x76, 0xc8, 0x18, 0xde, 0xfd, 0xcb, 0x03, 0x7e, 0x20, 0x2f, + 0xe1, 0x21, 0x19, 0x40, 0xcb, 0xee, 0xcb, 0xb6, 0x3a, 0x01, 0x40, 0xe6, 0x40, 0x01, 0x02, 0x00, + 0x20, 0x02, 0x0e, 0x04, 0xb6, 0x77, 0xf7, 0xd0, 0x36, 0x76, 0x79, 0x0f, 0x0f, 0x38, 0x03, 0x12, + 0x2b, 0x77, 0x2b, 0x36, 0xb0, 0x3a, 0x25, 0x40, 0x3c, 0x32, 0x12, 0x40, 0xc3, 0xf7, 0x02, 0xcf, + 0x07, 0xc5, 0xef, 0xd1, 0xcd, 0x3d, 0x08, 0x3a, 0x22, 0x40, 0xfd, 0xcb, 0x00, 0x7e, 0xc8, 0x12, + 0xc9, 0x48, 0xc5, 0xcd, 0x18, 0x0d, 0x38, 0x3c, 0x01, 0x00, 0x09, 0x51, 0x59, 0xd6, 0xdc, 0x28, + 0x26, 0x1b, 0x06, 0x04, 0x3c, 0x28, 0x20, 0x3c, 0x28, 0x22, 0xfe, 0x27, 0x20, 0x10, 0xfd, 0xcb, + 0x01, 0xb6, 0x23, 0x22, 0x22, 0x40, 0xdf, 0x3d, 0x28, 0x17, 0xfe, 0x75, 0x20, 0xf8, 0xcd, 0xae, + 0x08, 0xd9, 0x01, 0x00, 0x00, 0x18, 0x35, 0xd5, 0xc5, 0xe7, 0x18, 0xc7, 0xcd, 0x49, 0x00, 0x18, + 0x16, 0xdf, 0x18, 0x13, 0xfe, 0x26, 0x38, 0x05, 0xcd, 0xad, 0x0a, 0x18, 0x0a, 0xcd, 0x79, 0x06, + 0xdc, 0xae, 0x08, 0xfd, 0xcb, 0x01, 0xf6, 0xcd, 0x1a, 0x00, 0xd9, 0x01, 0x00, 0x00, 0xd6, 0xdc, + 0x38, 0x0a, 0xfe, 0x0a, 0x30, 0x06, 0x4f, 0x21, 0xa3, 0x0a, 0x09, 0x46, 0xd1, 0x7a, 0xb8, 0x38, + 0x37, 0xa7, 0xd9, 0xc8, 0xd9, 0xfd, 0xcb, 0x01, 0x7e, 0x28, 0x14, 0x16, 0x00, 0x21, 0x1f, 0x0d, + 0x19, 0x19, 0x5e, 0x23, 0x56, 0x21, 0x7f, 0x0a, 0xe3, 0xd5, 0xed, 0x5b, 0x22, 0x40, 0xc9, 0x7b, + 0xfe, 0x0a, 0x1f, 0x1f, 0xfd, 0xae, 0x01, 0xe6, 0x40, 0xd9, 0xc4, 0xae, 0x08, 0xd9, 0xe1, 0x22, + 0x22, 0x40, 0xfd, 0xcb, 0x01, 0xf6, 0x18, 0xc4, 0xd5, 0x79, 0xfd, 0xcb, 0x01, 0x76, 0x20, 0x0a, + 0xc6, 0x03, 0x4f, 0xfe, 0x0a, 0xd9, 0xdc, 0xae, 0x08, 0xd9, 0x2a, 0x22, 0x40, 0xe5, 0xc5, 0xd9, + 0xc3, 0x19, 0x0a, 0x06, 0x06, 0x08, 0x07, 0x03, 0x02, 0x0a, 0x05, 0x05, 0x05, 0xe5, 0x21, 0x01, + 0x40, 0xcb, 0xae, 0xcb, 0xf6, 0xdf, 0xfe, 0x0d, 0xca, 0x30, 0x0b, 0xfe, 0xda, 0xca, 0x2b, 0x0b, + 0xcd, 0x18, 0x0d, 0x30, 0x03, 0xdf, 0x18, 0xf8, 0xfe, 0xda, 0x28, 0x0a, 0xfe, 0x0d, 0xc2, 0x35, + 0x0b, 0xdf, 0xfe, 0xda, 0x20, 0x51, 0x11, 0xbf, 0x0b, 0xe1, 0xe5, 0x4e, 0xcd, 0x55, 0x00, 0x13, + 0x1a, 0xb9, 0x28, 0xf7, 0xe6, 0x3f, 0xb9, 0x20, 0x05, 0x3e, 0xda, 0xbe, 0x28, 0x0b, 0x1a, 0xa7, + 0x28, 0x35, 0x13, 0x17, 0x30, 0xf8, 0x13, 0x18, 0xe0, 0xd5, 0xcd, 0x49, 0x00, 0xd1, 0xe3, 0x21, + 0x01, 0x40, 0x1a, 0xae, 0xe6, 0x40, 0x20, 0x1f, 0xcb, 0xee, 0xcb, 0xf6, 0x1a, 0xe6, 0x3f, 0xfe, + 0x0d, 0x20, 0x02, 0xcb, 0xb6, 0xcb, 0x7e, 0xe1, 0xc8, 0x21, 0xba, 0x0b, 0xe5, 0xeb, 0x23, 0x5e, + 0x23, 0x56, 0xd5, 0x2a, 0x22, 0x40, 0xc9, 0xe1, 0xc3, 0xae, 0x08, 0xcd, 0x49, 0x00, 0x18, 0x05, + 0xfd, 0xcb, 0x01, 0xb6, 0xdf, 0xe1, 0xfd, 0xcb, 0x01, 0x7e, 0xc8, 0x4e, 0x23, 0x7e, 0xe5, 0xfe, + 0xda, 0x20, 0x19, 0xc5, 0xed, 0x4b, 0x26, 0x40, 0xc5, 0xcd, 0x25, 0x00, 0xe1, 0x22, 0x26, 0x40, + 0xc1, 0x21, 0x00, 0x40, 0xcb, 0x7e, 0x20, 0x13, 0x36, 0x02, 0xe1, 0xc9, 0xcb, 0xa9, 0xfe, 0x0d, + 0x28, 0x09, 0xcb, 0xf1, 0xcd, 0x18, 0x0d, 0x38, 0x02, 0xcb, 0xe9, 0x2a, 0x08, 0x40, 0x7e, 0xe6, + 0x7f, 0xca, 0xd0, 0x0c, 0xb9, 0x20, 0x1c, 0x17, 0x87, 0xfa, 0xa4, 0x0b, 0x30, 0x3a, 0xd1, 0xd5, + 0xe5, 0x23, 0x1a, 0x13, 0xbe, 0x28, 0xfa, 0xf6, 0x80, 0xbe, 0x20, 0x06, 0x1a, 0xcd, 0x18, 0x0d, + 0x30, 0x09, 0xe1, 0xc5, 0xcd, 0x24, 0x06, 0xeb, 0xc1, 0x18, 0xd3, 0xd1, 0xd1, 0x23, 0x5e, 0x23, + 0x56, 0xeb, 0x18, 0x16, 0x38, 0xf6, 0xe3, 0x2a, 0x22, 0x40, 0xcb, 0x04, 0xd1, 0x20, 0x0f, 0x13, + 0x1a, 0xbd, 0x38, 0x0a, 0x29, 0x19, 0x18, 0xe5, 0xd1, 0x23, 0x22, 0x22, 0x40, 0xc9, 0xcf, 0x02, + 0x35, 0x2a, 0x2a, 0xf0, 0x24, 0x0c, 0x28, 0x2d, 0x37, 0xcd, 0x28, 0x0c, 0x28, 0x34, 0x29, 0xaa, + 0x24, 0x0c, 0x37, 0x33, 0xe9, 0xed, 0x0b, 0x39, 0x31, 0x8d, 0x38, 0x0c, 0x3a, 0x38, 0xf7, 0xf0, + 0x06, 0x38, 0x39, 0x37, 0xcd, 0x10, 0x0c, 0x26, 0x27, 0xf8, 0xf2, 0x0d, 0x00, 0xe5, 0x2a, 0x1c, + 0x40, 0x11, 0x4d, 0x00, 0x7c, 0xb5, 0x28, 0x0b, 0xcd, 0x55, 0x0d, 0xa7, 0xed, 0x42, 0x30, 0x05, + 0x23, 0x18, 0x02, 0xed, 0x52, 0x22, 0x1c, 0x40, 0xd1, 0xcd, 0x55, 0x0d, 0x60, 0x69, 0x23, 0xc9, + 0xd9, 0x01, 0x07, 0x00, 0xf7, 0x30, 0x1d, 0xd5, 0xd9, 0x44, 0x4d, 0xcd, 0xa1, 0x06, 0xd9, 0x3e, + 0x01, 0x12, 0xe1, 0xc9, 0x6e, 0x26, 0x00, 0xc9, 0x01, 0x02, 0x00, 0x7d, 0xf7, 0x30, 0x05, 0x36, + 0x01, 0x2b, 0x77, 0xc9, 0x21, 0x30, 0x0c, 0xc9, 0x7e, 0x3d, 0xc8, 0x23, 0xc9, 0xfd, 0xcb, 0x00, + 0x7e, 0xc8, 0xc5, 0x2a, 0x20, 0x40, 0xcd, 0x3b, 0x0b, 0x21, 0x00, 0x40, 0x7e, 0xfe, 0x02, 0x28, + 0xd1, 0x17, 0xfd, 0xcb, 0x01, 0x76, 0x38, 0x3b, 0x36, 0xff, 0x28, 0x47, 0x2a, 0x20, 0x40, 0x01, + 0x02, 0x00, 0x03, 0x23, 0x7e, 0xcd, 0x18, 0x0d, 0x38, 0xf8, 0xfe, 0xda, 0x28, 0x62, 0xf7, 0x30, + 0xb1, 0xd5, 0x2a, 0x20, 0x40, 0x0b, 0x0b, 0x0b, 0x1b, 0x78, 0xb1, 0x3e, 0x40, 0x28, 0x08, 0xed, + 0xb0, 0x7e, 0xf6, 0x80, 0x12, 0x3e, 0x60, 0xe1, 0xcd, 0xb9, 0x0c, 0xeb, 0x1b, 0xe1, 0xeb, 0x72, + 0x2b, 0x73, 0xc9, 0x20, 0xf8, 0xe1, 0xcd, 0xa4, 0x0c, 0x2a, 0x22, 0x40, 0x2b, 0xcd, 0x24, 0x06, + 0xc3, 0x66, 0x06, 0xe1, 0x3e, 0x01, 0x01, 0x01, 0x00, 0xbe, 0x23, 0x03, 0x20, 0xfb, 0xe5, 0xf7, + 0xeb, 0xe1, 0xd0, 0xed, 0xb8, 0xeb, 0x23, 0x3e, 0xa0, 0xeb, 0x2a, 0x20, 0x40, 0xae, 0xeb, 0xf5, + 0xcd, 0x0d, 0x0d, 0xf1, 0x2b, 0x77, 0x2a, 0x0c, 0x40, 0x22, 0x0a, 0x40, 0x2b, 0x36, 0x80, 0xc9, + 0xe1, 0xcf, 0x01, 0xa0, 0xc2, 0xbe, 0x0b, 0xc5, 0x60, 0x69, 0x23, 0x23, 0x29, 0x44, 0x4d, 0xf7, + 0xd2, 0x22, 0x0c, 0x2b, 0x54, 0x5d, 0x1b, 0x0b, 0x0b, 0x36, 0x00, 0xed, 0xb8, 0xc1, 0x71, 0x3e, + 0x80, 0x18, 0xc6, 0x2a, 0x0a, 0x40, 0xe5, 0x2a, 0x0c, 0x40, 0x2b, 0xcd, 0xd5, 0x05, 0x23, 0x23, + 0xc1, 0xed, 0x43, 0x0a, 0x40, 0xc1, 0xeb, 0x23, 0x37, 0xc9, 0x2a, 0x0c, 0x40, 0xed, 0x5b, 0x0a, + 0x40, 0xc3, 0x63, 0x06, 0xfe, 0x26, 0x18, 0x02, 0xfe, 0x1c, 0x3f, 0xd0, 0xfe, 0x40, 0xc9, 0x39, + 0x0d, 0x3e, 0x0d, 0x44, 0x0d, 0x90, 0x0d, 0xb5, 0x0d, 0xbc, 0x0d, 0x70, 0x0d, 0xc3, 0x0d, 0xcc, + 0x0d, 0xcd, 0x0d, 0xd9, 0x0d, 0xdf, 0x0d, 0xde, 0x0d, 0xa7, 0xed, 0x52, 0x18, 0x03, 0xa7, 0xed, + 0x5a, 0xe0, 0xcf, 0x05, 0xcd, 0xed, 0x0d, 0xc5, 0x08, 0xcd, 0x55, 0x0d, 0x20, 0x3f, 0xc1, 0x08, + 0x1f, 0xd0, 0xc3, 0xf6, 0x0d, 0x44, 0x4d, 0x3e, 0x10, 0x21, 0x00, 0x00, 0x29, 0xcb, 0x11, 0xcb, + 0x10, 0x30, 0x04, 0x19, 0x30, 0x01, 0x03, 0x3d, 0x20, 0xf2, 0x7c, 0xe6, 0x80, 0xb0, 0xb1, 0xc9, + 0xcb, 0x7a, 0x20, 0xce, 0xaf, 0xcd, 0xf2, 0x0d, 0xa3, 0x08, 0xc5, 0x42, 0x4b, 0xeb, 0x21, 0x01, + 0x00, 0x0b, 0xcb, 0x78, 0x20, 0xc8, 0xc5, 0xcd, 0x55, 0x0d, 0xc1, 0x28, 0xf4, 0xc1, 0x18, 0xb2, + 0x7a, 0xb3, 0x28, 0xae, 0xcd, 0xed, 0x0d, 0xc5, 0x1f, 0xed, 0x6a, 0x7c, 0x4d, 0x21, 0x00, 0x00, + 0x06, 0x10, 0xed, 0x6a, 0xed, 0x52, 0x30, 0x01, 0x19, 0xcb, 0x11, 0x17, 0x10, 0xf4, 0x67, 0x69, + 0x23, 0xc1, 0xd8, 0x18, 0x41, 0x7c, 0xa2, 0x67, 0x7d, 0xa3, 0x6f, 0xc9, 0x7c, 0xb2, 0x67, 0x7d, + 0xb3, 0x6f, 0xc9, 0xa7, 0xed, 0x52, 0x21, 0xff, 0xff, 0xc8, 0x23, 0xc9, 0xeb, 0xa7, 0xed, 0x52, + 0x7c, 0x17, 0xe2, 0xd6, 0x0d, 0x3f, 0xed, 0x62, 0xc9, 0xcd, 0xe4, 0x0d, 0x18, 0xe8, 0xeb, 0xcd, + 0xe4, 0x0d, 0x18, 0xf2, 0x1a, 0xbe, 0xc0, 0x3d, 0xc8, 0x13, 0x23, 0x18, 0xf7, 0xaf, 0xcd, 0xf1, + 0x0d, 0xeb, 0xcb, 0x7c, 0xc8, 0x3c, 0x08, 0x7c, 0x2f, 0x67, 0x7d, 0x2f, 0x6f, 0x23, 0x08, 0xc9, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, + 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, + 0x00, 0x00, 0x00, 0x00, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1e, 0x21, 0x78, 0x20, 0x20, 0x7f, 0x00, 0x00, 0x08, 0x3e, 0x48, 0x3e, 0x09, 0x3e, 0x08, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x3e, 0x41, 0x06, 0x08, 0x00, 0x08, 0x00, + 0x00, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x00, 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x3e, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x2a, 0x1c, 0x08, 0x1c, 0x2a, 0x00, 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x3e, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x04, 0x08, 0x10, 0x00, + 0x00, 0x00, 0x04, 0x08, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x08, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, + 0x00, 0x1c, 0x22, 0x41, 0x41, 0x22, 0x1c, 0x00, 0x00, 0x0c, 0x14, 0x04, 0x04, 0x04, 0x1e, 0x00, + 0x00, 0x3e, 0x41, 0x01, 0x3e, 0x40, 0x7f, 0x00, 0x00, 0x3e, 0x41, 0x06, 0x01, 0x41, 0x3e, 0x00, + 0x00, 0x0c, 0x14, 0x24, 0x44, 0x7f, 0x04, 0x00, 0x00, 0x7f, 0x40, 0x7e, 0x01, 0x41, 0x3e, 0x00, + 0x00, 0x3e, 0x40, 0x7e, 0x41, 0x41, 0x3e, 0x00, 0x00, 0x7f, 0x01, 0x02, 0x04, 0x08, 0x08, 0x00, + 0x00, 0x3e, 0x41, 0x3e, 0x41, 0x41, 0x3e, 0x00, 0x00, 0x3e, 0x41, 0x41, 0x3f, 0x01, 0x3e, 0x00, + 0x00, 0x3e, 0x41, 0x41, 0x7f, 0x41, 0x41, 0x00, 0x00, 0x7e, 0x41, 0x7e, 0x41, 0x41, 0x7e, 0x00, + 0x00, 0x1e, 0x21, 0x40, 0x40, 0x21, 0x1e, 0x00, 0x00, 0x7c, 0x42, 0x41, 0x41, 0x42, 0x7c, 0x00, + 0x00, 0x7f, 0x40, 0x7c, 0x40, 0x40, 0x7f, 0x00, 0x00, 0x7f, 0x40, 0x7c, 0x40, 0x40, 0x40, 0x00, + 0x00, 0x1e, 0x21, 0x40, 0x47, 0x21, 0x1e, 0x00, 0x00, 0x41, 0x41, 0x7f, 0x41, 0x41, 0x41, 0x00, + 0x00, 0x3e, 0x08, 0x08, 0x08, 0x08, 0x3e, 0x00, 0x00, 0x02, 0x02, 0x02, 0x42, 0x22, 0x1c, 0x00, + 0x00, 0x42, 0x44, 0x78, 0x44, 0x42, 0x41, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7f, 0x00, + 0x00, 0x41, 0x63, 0x55, 0x49, 0x41, 0x41, 0x00, 0x00, 0x61, 0x51, 0x49, 0x45, 0x43, 0x41, 0x00, + 0x00, 0x3e, 0x41, 0x41, 0x41, 0x41, 0x3e, 0x00, 0x00, 0x7e, 0x41, 0x41, 0x7e, 0x40, 0x40, 0x00, + 0x00, 0x3e, 0x41, 0x41, 0x49, 0x45, 0x3e, 0x00, 0x00, 0x7e, 0x41, 0x41, 0x7e, 0x44, 0x42, 0x00, + 0x00, 0x3e, 0x40, 0x3e, 0x01, 0x41, 0x3e, 0x00, 0x00, 0x7f, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, + 0x00, 0x41, 0x41, 0x41, 0x41, 0x41, 0x3e, 0x00, 0x00, 0x41, 0x41, 0x41, 0x22, 0x14, 0x08, 0x00, + 0x00, 0x41, 0x41, 0x41, 0x49, 0x55, 0x22, 0x00, 0x00, 0x21, 0x12, 0x0c, 0x0c, 0x12, 0x21, 0x00, + 0x00, 0x41, 0x22, 0x1c, 0x08, 0x08, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x04, 0x08, 0x10, 0x7f, 0x00, +}; + diff --git a/MCUME_pico/pico81/zx81.c b/MCUME_pico/pico81/zx81.c new file mode 100644 index 0000000..9bc52ae --- /dev/null +++ b/MCUME_pico/pico81/zx81.c @@ -0,0 +1,568 @@ + +#define PROGMEM +#include "z80.h" +//#include "Arduino.h" +#include "zx80rom.h" +#include "zx81rom.h" +#include "emuapi.h" +#include "common.h" +#include "AY8910.h" + +#define MEMORYRAM_SIZE 0x10000 + +static AY8910 ay; +//byte memo[ MEMORYRAM_SIZE ]; +byte * mem = 0; +unsigned char *memptr[64]; +int memattr[64]; +int unexpanded=0; +int nmigen=0,hsyncgen=0,vsync=0; +int vsync_visuals=0; +int signal_int_flag=0; +int interrupted=0; +int ramsize=32; //32; + +/* the keyboard state and other */ +static byte keyboard[ 9 ] = {0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff};; +static byte * XBuf=0; +int zx80=0; +int autoload=1; + + +struct { unsigned char R,G,B; } Palette[16] = { + { 0, 0, 0}, + { 255, 255, 255} +}; + +const byte map_qw[8][5] = { + {224,29,27,6,25}, // vcxz + {10,22, 7, 9, 4}, // gfdsa + {23,21, 8,26,20}, // trewq + {34,33,32,31,30}, // 54321 + {35,36,37,38,39}, // 67890 + {28,24,12,18,19}, // yuiop + {11,13,14,15,40}, // hjkl + { 5,17,16,225,44}, // bnm +}; + +static char tapename[64]={0}; +static const int kBuf[]={13,25,19,25,19,40}; //,21,40}; // LOAD "" (J shift p shift p, R ENTER) +static const int tBuf[]={2,0,2,0,2,2};//200!,2,2}; +static int kcount=0; +static int timeout=100; + + + +unsigned int in(int h, int l) +{ + + int ts=0; /* additional cycles*256 */ + int tapezeromask=0x80; /* = 0x80 if no tape noise (?) */ + + if(!(l&4)) l=0xfb; + if(!(l&1)) l=0xfe; + + switch(l) + { + //case 0xfb: + // return(printer_inout(0,0)); + + case 0xfe: + /* also disables hsync/vsync if nmi off + * (yes, vsync requires nmi off too, Flight Simulation confirms this) + */ + if(!nmigen) + { + hsyncgen=0; + + /* if vsync was on before, record position */ + if(!vsync) + vsync_raise(); + vsync=1; + + } + + switch(h) + { + case 0xfe: return(ts|(keyboard[0]^tapezeromask)); + case 0xfd: return(ts|(keyboard[1]^tapezeromask)); + case 0xfb: return(ts|(keyboard[2]^tapezeromask)); + case 0xf7: return(ts|(keyboard[3]^tapezeromask)); + case 0xef: return(ts|(keyboard[4]^tapezeromask)); + case 0xdf: return(ts|(keyboard[5]^tapezeromask)); + case 0xbf: return(ts|(keyboard[6]^tapezeromask)); + case 0x7f: return(ts|(keyboard[7]^tapezeromask)); + default: + { + int i,mask,retval=0xff; + + /* some games (e.g. ZX Galaxians) do smart-arse things + * like zero more than one bit. What we have to do to + * support this is AND together any for which the corresponding + * bit is zero. + */ + for(i=0,mask=1;i<8;i++,mask<<=1) + if(!(h&mask)) + retval&=keyboard[i]; + return(ts|(retval^tapezeromask)); + } + } + break; + } + + return(ts|255); +} + +unsigned int out(int h,int l,int a) + +{ + /* either in from fe or out to ff takes one extra cycle; + * experimentation strongly suggests not only that out to + * ff takes one extra, but that *all* outs do. + */ + int ts=1; /* additional cycles */ + + + + /* the examples in the manual (using DF/0F) and the + * documented ports (CF/0F) don't match, so decode is + * important for that. + */ + if(!(l&0xf0)) /* not sure how many needed, so assume all 4 */ + l=0x0f; + else + if(!(l&0x20)) /* bit 5 low is common to DF and CF */ + l=0xdf; + + + if(!(l&4)) l=0xfb; + if(!(l&2)) l=0xfd; + if(!(l&1)) l=0xfe; + + + switch(l) + { + case 0x0f: /* Zon X data */ + WrData8910(&ay,a); + break; + case 0xdf: /* Zon X reg. select */ + WrCtrl8910(&ay,(a &0x0F)); + break; + + case 0xfb: + return(ts/*|printer_inout(1,a)*/); + case 0xfd: + nmigen=0; + if(vsync) + vsync_lower(); + vsync=0; + hsyncgen=1; + break; + case 0xfe: + if(!zx80) + { + nmigen=1; + break; + } + /* falls through, if zx80 */ + case 0xff: /* XXX should *any* out turn off vsync? */ + /* fill screen gap since last raising of vsync */ + if(vsync) + vsync_lower(); + vsync=0; + hsyncgen=1; + break; + } + + return(ts); +} + + + +void sighandler(int a) +{ + signal_int_flag=1; +} + +void frame_pause(void) +{ + signal_int_flag=0; + + if(interrupted<2) + interrupted=1; +} + +void do_interrupt() +{ + /* being careful here not to screw up any pending reset... */ + if(interrupted==1) + interrupted=0; +} + +void bitbufBlit(unsigned char * buf) +{ +emu_DrawVsync(); + memset( XBuf, 1, WIDTH*8 ); + buf = buf + (ZX_VID_MARGIN*(ZX_VID_FULLWIDTH/8)); + int y,x,i; + byte d; + for(y=0;y<192;y++) + { + byte * src = buf + 4; + for(x=0;x<32;x++) + { + byte * dst=&XBuf[(x<<3)+BORDER]; + d = *src++; + for (i=0;i<8;i++) + { + if ( d & 128 ) + { + *dst++=0; + } + else + { + *dst++=1; + } + d <<= 1; + } + } + emu_DrawLine(&XBuf[0], WIDTH, HEIGHT, y); + buf += (ZX_VID_FULLWIDTH/8); + } +} + +static void updateKeyboard (void) +{ + int nb_keys=0; + int k = emu_GetPad(); + int hk = emu_ReadI2CKeyboard(); + if ( (k == 0) && (hk == 0) ) { + memset(keyboard, 0xff, sizeof(keyboard)); + } + else { + // scan all possibilities + for (int j=0;j<8;j++) { + for(int i=0;i<5;i++){ + if ( (k == map_qw[j][i]) || (hk == map_qw[j][i]) ) { + keyboard[j] &= ~ (1<<(4-i)); + nb_keys++; + } + } + } + } +} + +static void handleKeyBuf(void) +{ + if (timeout) { + timeout--; + if (timeout==0) { + memset(keyboard, 0xff, sizeof(keyboard)); + emu_printf("key up"); + } + } + else { + if (!(kcount == (sizeof(kBuf)/sizeof(int)))) { + emu_printf("key dw"); + timeout=tBuf[kcount]; + int k=kBuf[kcount++]; + // scan all possibilities + for (int j=0;j<8;j++) { + for(int i=0;i<5;i++){ + if ( (k == map_qw[j][i]) ) { + keyboard[j] &= ~ (1<<(4-i)); + } + } + } + if (timeout == 0) { + timeout=tBuf[kcount]; + int k=kBuf[kcount++]; + // scan all possibilities + for (int j=0;j<8;j++) { + for(int i=0;i<5;i++){ + if ( (k == map_qw[j][i]) ) { + keyboard[j] &= ~ (1<<(4-i)); + } + } + } + } + } + } +} + +/* despite the name, this also works for the ZX80 :-) */ +void reset81() +{ + interrupted=2; /* will cause a reset */ + memset(mem+0x4000,0,0xc000); +} + +void load_p(int a) +{ + emu_printf("loading..."); +/* + int got_ascii_already=0; + if(zx80) { + } + else + { + if(a>=32768) + { + got_ascii_already=1; + emu_printf("got ascii"); + } + if(!got_ascii_already) + { + } + } +*/ + emu_printf(tapename); + int size = emu_FileSize(tapename); + if ( !emu_FileOpen(tapename) ) { + /* the partial snap will crash without a file, so reset */ + if(autoload) + reset81(),autoload=0; + return; + + } + + autoload=0; + emu_FileRead(mem + (zx80?0x4000:0x4009), size); + emu_FileClose(); + + if(zx80) + store(0x400b,fetch(0x400b)+1); +} + +void save_p(int a) +{ + +} + + + +void zx81hacks() +{ + /* patch save routine */ + mem[0x2fc]=0xed; mem[0x2fd]=0xfd; + mem[0x2fe]=0xc3; mem[0x2ff]=0x07; mem[0x300]=0x02; + + /* patch load routine */ + mem[0x347]=0xeb; + mem[0x348]=0xed; mem[0x349]=0xfc; + mem[0x34a]=0xc3; mem[0x34b]=0x07; mem[0x34c]=0x02; +} + +void zx80hacks() +{ + /* patch save routine */ + mem[0x1b6]=0xed; mem[0x1b7]=0xfd; + mem[0x1b8]=0xc3; mem[0x1b9]=0x83; mem[0x1ba]=0x02; + + /* patch load routine */ + mem[0x206]=0xed; mem[0x207]=0xfc; + mem[0x208]=0xc3; mem[0x209]=0x83; mem[0x20a]=0x02; +} + +static void initmem() +{ + int f; + int count; + + if(zx80) + { + memset(mem+0x1000,0,0xf000); + } + else + { + memset(mem+0x2000,0,0xe000); + } + + + /* ROM setup */ + count=0; + for(f=0;f<16;f++) + { + memattr[f]=memattr[32+f]=0; + memptr[f]=memptr[32+f]=mem+1024*count; + count++; + if(count>=(zx80?4:8)) count=0; + } + + /* RAM setup */ + if(unexpanded) + ramsize=1; + count=0; + for(f=16;f<32;f++) + { + memattr[f]=memattr[32+f]=1; + memptr[f]=memptr[32+f]=mem+1024*(16+count); + count++; + if(count>=ramsize) count=0; + } + + +/* z81's ROM and RAM initialisation code is OK for <= 16K RAM but beyond + * that it requires a little tweaking. + * + * The following diagram shows the ZX81 + 8K ROM. The ZX80 version is + * the same except that each 8K ROM region will contain two copies of + * the 4K ROM. + * + * RAM less than 16K is mirrored throughout the 16K region. + * + * The ROM will only detect up to 8000h when setting RAMTOP, therefore + * having more than 16K RAM will require RAMTOP to be set by the user + * (or user program) to either 49152 for 32K or 65535 for 48/56K. + * + * 1K to 16K 32K 48K 56K Extra Info. + * + * 65535 +----------+ +----------+ +----------+ +----------+ + * (FFFFh) | 16K RAM | | 16K RAM | | 16K RAM | | 16K RAM | DFILE can be + * | mirrored | | mirrored | | | | | wholly here. + * | | | | | | | | + * | | | | | | | | BASIC variables + * | | | | | | | | can go here. + * 49152 +----------+ +----------+ +----------+ +----------+ + * (C000h) | 8K ROM | | 16K RAM | | 16K RAM | | 16K RAM | BASIC program + * | mirrored | | | | | | | is restricted + * 40960 +----------+ | | | | | | to here. + * (A000h) | 8K ROM | | | | | | | + * | mirrored | | | | | | | + * 32768 +----------+ +----------+ +----------+ +----------+ + * (8000h) | 16K RAM | | 16K RAM | | 16K RAM | | 16K RAM | No machine code + * | | | | | | | | beyond here. + * | | | | | | | | + * | | | | | | | | DFILE can be + * | | | | | | | | wholly here. + * 16384 +----------+ +----------+ +----------+ +----------+ + * (4000h) | 8K ROM | | 8K ROM | | 8K ROM | | 8K RAM | + * | mirrored | | mirrored | | mirrored | | | + * 8192 +----------+ +----------+ +----------+ +----------+ + * (2000h) | 8K ROM | | 8K ROM | | 8K ROM | | 8K ROM | + * | | | | | | | | + * 0 +----------+ +----------+ +----------+ +----------+ + */ + + switch(ramsize) + { + case 56: + for(f=8;f<16;f++) + { + memattr[f]=1; /* It's now writable */ + memptr[f]=mem+1024*f; + } + case 48: + for(f=48;f<64;f++) + { + memattr[f]=1; + memptr[f]=mem+1024*f; + } + case 32: + for(f=32;f<48;f++) + { + memattr[f]=1; + memptr[f]=mem+1024*f; + } + break; + } + + if(zx80) + zx80hacks(); + else + zx81hacks(); +} + + +void emu_KeyboardOnDown(int keymodifer, int key) { +} + +void emu_KeyboardOnUp(int keymodifer, int key) { +} + + +void z81_Init(void) +{ +#if HAS_SND + emu_sndInit(); +#endif + + if (XBuf == 0) XBuf = (byte *)emu_Malloc(WIDTH*8); + /* Set up the palette */ + int J; + for(J=0;J<2;J++) + emu_SetPaletteEntry(Palette[J].R,Palette[J].G,Palette[J].B, J); + + emu_printf("Allocating RAM"); + if (mem == 0) mem = emu_Malloc(MEMORYRAM_SIZE); + + Reset8910(&ay,3500000,0); + + /* load rom with ghosting at 0x2000 */ + int siz=(zx80?4096:8192); + if(zx80) + { + memcpy( mem + 0x0000, zx80rom, siz ); + } + else + { + memcpy( mem + 0x0000, zx81rom, siz ); + } + memcpy(mem+siz,mem,siz); + if(zx80) + memcpy(mem+siz*2,mem,siz*2); + + initmem(); + + /* reset the keyboard state */ + memset( keyboard, 255, sizeof( keyboard ) ); + + ResetZ80(); + } + + +void z81_Step(void) +{ + ExecZ80(); + sighandler(0); + //if (strlen(tapename)) handleKeyBuf(); + updateKeyboard(); + Loop8910(&ay,20); +} + +static int endsWith(const char * s, const char * suffix) +{ + int retval = 0; + int len = strlen(s); + int slen = strlen(suffix); + if (len > slen ) { + if (!strcmp(&s[len-slen], suffix)) { + retval = 1; + } + } + return (retval); +} + +void z81_Start(char * filename) +{ + char c; + strncpy(tapename,filename,64); + if ( emu_FileOpen(tapename) ) { + int fsize = emu_FileRead(&c, 1); + if ( fsize == 0) { + autoload = 0; + emu_printf("no autoload"); + } + emu_FileClose(); + } + + emu_setKeymap(1); + if ( (endsWith(filename, ".80")) || (endsWith(filename, ".o")) || (endsWith(filename, ".O"))) { + zx80=1; + ramsize=48; + emu_setKeymap(0); + } + else if (endsWith(filename, ".56") ) { + ramsize = 56; + } +} diff --git a/MCUME_pico/pico81/zx81.h b/MCUME_pico/pico81/zx81.h new file mode 100644 index 0000000..df383f5 --- /dev/null +++ b/MCUME_pico/pico81/zx81.h @@ -0,0 +1,4 @@ +extern void z81_Init(void); +extern void z81_Step(void); +extern void z81_Start(char * filename); + diff --git a/MCUME_pico/pico81/zx81rom.h b/MCUME_pico/pico81/zx81rom.h new file mode 100644 index 0000000..49ac42c --- /dev/null +++ b/MCUME_pico/pico81/zx81rom.h @@ -0,0 +1,515 @@ +const unsigned char PROGMEM zx81rom[] = { + 0xd3, 0xfd, 0x01, 0xff, 0x7f, 0xc3, 0xcb, 0x03, 0x2a, 0x16, 0x40, 0x22, 0x18, 0x40, 0x18, 0x46, + 0xa7, 0xc2, 0xf1, 0x07, 0xc3, 0xf5, 0x07, 0xff, 0x2a, 0x16, 0x40, 0x7e, 0xa7, 0xc0, 0x00, 0x00, + 0xcd, 0x49, 0x00, 0x18, 0xf7, 0xff, 0xff, 0xff, 0xc3, 0x9d, 0x19, 0xf1, 0xd9, 0xe3, 0xd9, 0xc9, + 0xc5, 0x2a, 0x14, 0x40, 0xe5, 0xc3, 0x88, 0x14, 0x0d, 0xc2, 0x45, 0x00, 0xe1, 0x05, 0xc8, 0xcb, + 0xd9, 0xed, 0x4f, 0xfb, 0xe9, 0xd1, 0xc8, 0x18, 0xf8, 0x2a, 0x16, 0x40, 0x23, 0x22, 0x16, 0x40, + 0x7e, 0xfe, 0x7f, 0xc0, 0x18, 0xf6, 0xe1, 0x6e, 0xfd, 0x75, 0x00, 0xed, 0x7b, 0x02, 0x40, 0xcd, + 0x07, 0x02, 0xc3, 0xbc, 0x14, 0xff, 0x08, 0x3c, 0xfa, 0x6d, 0x00, 0x28, 0x02, 0x08, 0xc9, 0x08, + 0xf5, 0xc5, 0xd5, 0xe5, 0x2a, 0x0c, 0x40, 0xcb, 0xfc, 0x76, 0xd3, 0xfd, 0xdd, 0xe9, 0x3f, 0x3d, + 0x28, 0x3b, 0x26, 0x38, 0x29, 0x2b, 0x2c, 0x36, 0x3c, 0x2a, 0x37, 0x39, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x1c, 0x25, 0x24, 0x23, 0x22, 0x35, 0x34, 0x2e, 0x3a, 0x3e, 0x76, 0x31, 0x30, 0x2f, 0x2d, + 0x00, 0x1b, 0x32, 0x33, 0x27, 0x0e, 0x19, 0x0f, 0x18, 0xe3, 0xe1, 0xe4, 0xe5, 0xe2, 0xc0, 0xd9, + 0xe0, 0xdb, 0xdd, 0x75, 0xda, 0xde, 0xdf, 0x72, 0x77, 0x74, 0x73, 0x70, 0x71, 0x0b, 0x11, 0x10, + 0x0d, 0xdc, 0x79, 0x14, 0x15, 0x16, 0xd8, 0x0c, 0x1a, 0x12, 0x13, 0x17, 0xcd, 0xce, 0xc1, 0x78, + 0xca, 0xcb, 0xcc, 0xd1, 0xd2, 0xc7, 0xc8, 0xc9, 0xcf, 0x40, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0x78, 0x78, 0x78, 0x78, 0xc2, 0xd3, 0xc4, 0xd6, 0xd5, 0x78, 0xd4, 0xc6, 0xc5, 0xd0, 0x78, 0x78, + 0x42, 0xd7, 0x41, 0x08, 0x0a, 0x09, 0x8a, 0x89, 0x81, 0x82, 0x07, 0x84, 0x06, 0x01, 0x02, 0x87, + 0x04, 0x05, 0x77, 0x78, 0x85, 0x03, 0x83, 0x8b, 0x91, 0x90, 0x8d, 0x86, 0x78, 0x92, 0x95, 0x96, + 0x88, 0x8f, 0x0b, 0x8b, 0x26, 0xb9, 0x39, 0x26, 0xa7, 0x8f, 0x28, 0x34, 0x29, 0xaa, 0x3b, 0x26, + 0xb1, 0x31, 0x2a, 0xb3, 0x38, 0x2e, 0xb3, 0x28, 0x34, 0xb8, 0x39, 0x26, 0xb3, 0x26, 0x38, 0xb3, + 0x26, 0x28, 0xb8, 0x26, 0x39, 0xb3, 0x31, 0xb3, 0x2a, 0x3d, 0xb5, 0x2e, 0x33, 0xb9, 0x38, 0x36, + 0xb7, 0x38, 0x2c, 0xb3, 0x26, 0x27, 0xb8, 0x35, 0x2a, 0x2a, 0xb0, 0x3a, 0x38, 0xb7, 0x38, 0x39, + 0x37, 0x8d, 0x28, 0x2d, 0x37, 0x8d, 0x33, 0x34, 0xb9, 0x17, 0x97, 0x34, 0xb7, 0x26, 0x33, 0xa9, + 0x13, 0x94, 0x12, 0x94, 0x13, 0x92, 0x39, 0x2d, 0x2a, 0xb3, 0x39, 0xb4, 0x38, 0x39, 0x2a, 0xb5, + 0x31, 0x35, 0x37, 0x2e, 0x33, 0xb9, 0x31, 0x31, 0x2e, 0x38, 0xb9, 0x38, 0x39, 0x34, 0xb5, 0x38, + 0x31, 0x34, 0xbc, 0x2b, 0x26, 0x38, 0xb9, 0x33, 0x2a, 0xbc, 0x38, 0x28, 0x37, 0x34, 0x31, 0xb1, + 0x28, 0x34, 0x33, 0xb9, 0x29, 0x2e, 0xb2, 0x37, 0x2a, 0xb2, 0x2b, 0x34, 0xb7, 0x2c, 0x34, 0x39, + 0xb4, 0x2c, 0x34, 0x38, 0x3a, 0xa7, 0x2e, 0x33, 0x35, 0x3a, 0xb9, 0x31, 0x34, 0x26, 0xa9, 0x31, + 0x2e, 0x38, 0xb9, 0x31, 0x2a, 0xb9, 0x35, 0x26, 0x3a, 0x38, 0xaa, 0x33, 0x2a, 0x3d, 0xb9, 0x35, + 0x34, 0x30, 0xaa, 0x35, 0x37, 0x2e, 0x33, 0xb9, 0x35, 0x31, 0x34, 0xb9, 0x37, 0x3a, 0xb3, 0x38, + 0x26, 0x3b, 0xaa, 0x37, 0x26, 0x33, 0xa9, 0x2e, 0xab, 0x28, 0x31, 0xb8, 0x3a, 0x33, 0x35, 0x31, + 0x34, 0xb9, 0x28, 0x31, 0x2a, 0x26, 0xb7, 0x37, 0x2a, 0x39, 0x3a, 0x37, 0xb3, 0x28, 0x34, 0x35, + 0xbe, 0x37, 0x33, 0xa9, 0x2e, 0x33, 0x30, 0x2a, 0x3e, 0x8d, 0x35, 0xae, 0x23, 0xeb, 0x2a, 0x14, + 0x40, 0x37, 0xed, 0x52, 0xeb, 0xd0, 0xe1, 0x21, 0x3b, 0x40, 0x7e, 0x17, 0xae, 0x17, 0xd0, 0x3e, + 0x7f, 0x08, 0x06, 0x11, 0xd3, 0xfe, 0x10, 0xfe, 0xd3, 0xfd, 0x08, 0x17, 0x30, 0x08, 0xcb, 0xfe, + 0xf5, 0xc5, 0xd5, 0xe5, 0x18, 0x03, 0xcb, 0xb6, 0xc9, 0x2a, 0x34, 0x40, 0x2b, 0x3e, 0x7f, 0xa4, + 0xb5, 0x7c, 0x20, 0x03, 0x17, 0x18, 0x02, 0x46, 0x37, 0x67, 0x22, 0x34, 0x40, 0xd0, 0xcd, 0xbb, + 0x02, 0xed, 0x4b, 0x25, 0x40, 0x22, 0x25, 0x40, 0x78, 0xc6, 0x02, 0xed, 0x42, 0x3a, 0x27, 0x40, + 0xb4, 0xb5, 0x58, 0x06, 0x0b, 0x21, 0x3b, 0x40, 0xcb, 0x86, 0x20, 0x08, 0xcb, 0x7e, 0xcb, 0xc6, + 0xc8, 0x05, 0x00, 0x37, 0x21, 0x27, 0x40, 0x3f, 0xcb, 0x10, 0x10, 0xfe, 0x46, 0x7b, 0xfe, 0xfe, + 0x9f, 0x06, 0x1f, 0xb6, 0xa0, 0x1f, 0x77, 0xd3, 0xff, 0x2a, 0x0c, 0x40, 0xcb, 0xfc, 0xcd, 0x92, + 0x02, 0xed, 0x5f, 0x01, 0x01, 0x19, 0x3e, 0xf5, 0xcd, 0xb5, 0x02, 0x2b, 0xcd, 0x92, 0x02, 0xc3, + 0x29, 0x02, 0xdd, 0xe1, 0xfd, 0x4e, 0x28, 0xfd, 0xcb, 0x3b, 0x7e, 0x28, 0x0c, 0x79, 0xed, 0x44, + 0x3c, 0x08, 0xd3, 0xfe, 0xe1, 0xd1, 0xc1, 0xf1, 0xc9, 0x3e, 0xfc, 0x06, 0x01, 0xcd, 0xb5, 0x02, + 0x2b, 0xe3, 0xe3, 0xdd, 0xe9, 0xed, 0x4f, 0x3e, 0xdd, 0xfb, 0xe9, 0x21, 0xff, 0xff, 0x01, 0xfe, + 0xfe, 0xed, 0x78, 0xf6, 0x01, 0xf6, 0xe0, 0x57, 0x2f, 0xfe, 0x01, 0x9f, 0xb0, 0xa5, 0x6f, 0x7c, + 0xa2, 0x67, 0xcb, 0x00, 0xed, 0x78, 0x38, 0xed, 0x1f, 0xcb, 0x14, 0x17, 0x17, 0x17, 0x9f, 0xe6, + 0x18, 0xc6, 0x1f, 0x32, 0x28, 0x40, 0xc9, 0xfd, 0xcb, 0x3b, 0x7e, 0xc8, 0x76, 0xd3, 0xfd, 0xfd, + 0xcb, 0x3b, 0xbe, 0xc9, 0xcf, 0x0e, 0xcd, 0xa8, 0x03, 0x38, 0xf9, 0xeb, 0x11, 0xcb, 0x12, 0xcd, + 0x46, 0x0f, 0x30, 0x2e, 0x10, 0xfe, 0x1b, 0x7a, 0xb3, 0x20, 0xf4, 0xcd, 0x1e, 0x03, 0xcb, 0x7e, + 0x23, 0x28, 0xf8, 0x21, 0x09, 0x40, 0xcd, 0x1e, 0x03, 0xcd, 0xfc, 0x01, 0x18, 0xf8, 0x5e, 0x37, + 0xcb, 0x13, 0xc8, 0x9f, 0xe6, 0x05, 0xc6, 0x04, 0x4f, 0xd3, 0xff, 0x06, 0x23, 0x10, 0xfe, 0xcd, + 0x46, 0x0f, 0x30, 0x72, 0x06, 0x1e, 0x10, 0xfe, 0x0d, 0x20, 0xee, 0xa7, 0x10, 0xfd, 0x18, 0xe0, + 0xcd, 0xa8, 0x03, 0xcb, 0x12, 0xcb, 0x0a, 0xcd, 0x4c, 0x03, 0x18, 0xfb, 0x0e, 0x01, 0x06, 0x00, + 0x3e, 0x7f, 0xdb, 0xfe, 0xd3, 0xff, 0x1f, 0x30, 0x49, 0x17, 0x17, 0x38, 0x28, 0x10, 0xf1, 0xf1, + 0xba, 0xd2, 0xe5, 0x03, 0x62, 0x6b, 0xcd, 0x4c, 0x03, 0xcb, 0x7a, 0x79, 0x20, 0x03, 0xbe, 0x20, + 0xd6, 0x23, 0x17, 0x30, 0xf1, 0xfd, 0x34, 0x15, 0x21, 0x09, 0x40, 0x50, 0xcd, 0x4c, 0x03, 0x71, + 0xcd, 0xfc, 0x01, 0x18, 0xf6, 0xd5, 0x1e, 0x94, 0x06, 0x1a, 0x1d, 0xdb, 0xfe, 0x17, 0xcb, 0x7b, + 0x7b, 0x38, 0xf5, 0x10, 0xf5, 0xd1, 0x20, 0x04, 0xfe, 0x56, 0x30, 0xb2, 0x3f, 0xcb, 0x11, 0x30, + 0xad, 0xc9, 0x7a, 0xa7, 0x28, 0xbb, 0xcf, 0x0c, 0xcd, 0x55, 0x0f, 0x3a, 0x01, 0x40, 0x87, 0xfa, + 0x9a, 0x0d, 0xe1, 0xd0, 0xe5, 0xcd, 0xe7, 0x02, 0xcd, 0xf8, 0x13, 0x62, 0x6b, 0x0d, 0xf8, 0x09, + 0xcb, 0xfe, 0xc9, 0xcd, 0xe7, 0x02, 0xed, 0x4b, 0x04, 0x40, 0x0b, 0x60, 0x69, 0x3e, 0x3f, 0x36, + 0x02, 0x2b, 0xbc, 0x20, 0xfa, 0xa7, 0xed, 0x42, 0x09, 0x23, 0x30, 0x06, 0x35, 0x28, 0x03, 0x35, + 0x28, 0xf3, 0x22, 0x04, 0x40, 0x2a, 0x04, 0x40, 0x2b, 0x36, 0x3e, 0x2b, 0xf9, 0x2b, 0x2b, 0x22, + 0x02, 0x40, 0x3e, 0x1e, 0xed, 0x47, 0xed, 0x56, 0xfd, 0x21, 0x00, 0x40, 0xfd, 0x36, 0x3b, 0x40, + 0x21, 0x7d, 0x40, 0x22, 0x0c, 0x40, 0x06, 0x19, 0x36, 0x76, 0x23, 0x10, 0xfb, 0x22, 0x10, 0x40, + 0xcd, 0x9a, 0x14, 0xcd, 0xad, 0x14, 0xcd, 0x07, 0x02, 0xcd, 0x2a, 0x0a, 0x2a, 0x0a, 0x40, 0xed, + 0x5b, 0x23, 0x40, 0xa7, 0xed, 0x52, 0xeb, 0x30, 0x04, 0x19, 0x22, 0x23, 0x40, 0xcd, 0xd8, 0x09, + 0x28, 0x01, 0xeb, 0xcd, 0x3e, 0x07, 0xfd, 0x35, 0x1e, 0x20, 0x37, 0x2a, 0x0a, 0x40, 0xcd, 0xd8, + 0x09, 0x2a, 0x16, 0x40, 0x37, 0xed, 0x52, 0x21, 0x23, 0x40, 0x30, 0x0b, 0xeb, 0x7e, 0x23, 0xed, + 0xa0, 0x12, 0x18, 0xc5, 0x21, 0x0a, 0x40, 0x5e, 0x23, 0x56, 0xe5, 0xeb, 0x23, 0xcd, 0xd8, 0x09, + 0xcd, 0xbb, 0x05, 0xe1, 0xfd, 0xcb, 0x2d, 0x6e, 0x20, 0x08, 0x72, 0x2b, 0x73, 0x18, 0xaa, 0xcd, + 0xad, 0x14, 0x2a, 0x14, 0x40, 0x7e, 0xfe, 0x7e, 0x20, 0x08, 0x01, 0x06, 0x00, 0xcd, 0x60, 0x0a, + 0x18, 0xf3, 0xfe, 0x76, 0x23, 0x20, 0xee, 0xcd, 0x37, 0x05, 0xcd, 0x1f, 0x0a, 0x2a, 0x14, 0x40, + 0xfd, 0x36, 0x00, 0xff, 0xcd, 0x66, 0x07, 0xfd, 0xcb, 0x00, 0x7e, 0x20, 0x24, 0x3a, 0x22, 0x40, + 0xfe, 0x18, 0x30, 0x1d, 0x3c, 0x32, 0x22, 0x40, 0x47, 0x0e, 0x01, 0xcd, 0x18, 0x09, 0x54, 0x5d, + 0x7e, 0x2b, 0xbe, 0x20, 0xfc, 0x23, 0xeb, 0x3a, 0x05, 0x40, 0xfe, 0x4d, 0xdc, 0x5d, 0x0a, 0x18, + 0xc9, 0x21, 0x00, 0x00, 0x22, 0x18, 0x40, 0x21, 0x3b, 0x40, 0xcb, 0x7e, 0xcc, 0x29, 0x02, 0xcb, + 0x46, 0x28, 0xfc, 0xed, 0x4b, 0x25, 0x40, 0xcd, 0x4b, 0x0f, 0xcd, 0xbd, 0x07, 0x30, 0x93, 0x3a, + 0x06, 0x40, 0x3d, 0xfa, 0x08, 0x05, 0x20, 0x0f, 0x32, 0x06, 0x40, 0x1d, 0x7b, 0xd6, 0x27, 0x38, + 0x01, 0x5f, 0x21, 0xcc, 0x00, 0x18, 0x0e, 0x7e, 0xfe, 0x76, 0x28, 0x2f, 0xfe, 0x40, 0xcb, 0xff, + 0x38, 0x19, 0x21, 0xc7, 0x00, 0x19, 0x18, 0x0d, 0x7e, 0xfd, 0xcb, 0x01, 0x56, 0x20, 0x07, 0xc6, + 0xc0, 0xfe, 0xe6, 0x30, 0x01, 0x7e, 0xfe, 0xf0, 0xea, 0x2d, 0x05, 0x5f, 0xcd, 0x37, 0x05, 0x7b, + 0xcd, 0x26, 0x05, 0xc3, 0x72, 0x04, 0xcd, 0x9b, 0x09, 0x12, 0xc9, 0x3e, 0x78, 0x5f, 0x21, 0x82, + 0x04, 0x19, 0x19, 0x4e, 0x23, 0x46, 0xc5, 0x2a, 0x14, 0x40, 0xfd, 0xcb, 0x2d, 0x6e, 0x20, 0x16, + 0xfd, 0xcb, 0x01, 0x96, 0x7e, 0xfe, 0x7f, 0xc8, 0x23, 0xcd, 0xb4, 0x07, 0x28, 0xf6, 0xfe, 0x26, + 0x38, 0xf2, 0xfe, 0xde, 0x28, 0xea, 0xfd, 0xcb, 0x01, 0xd6, 0x18, 0xe8, 0x01, 0x01, 0x00, 0xc3, + 0x60, 0x0a, 0x9f, 0x05, 0x54, 0x04, 0x76, 0x05, 0x7f, 0x05, 0xaf, 0x05, 0xc4, 0x05, 0x0c, 0x06, + 0x8b, 0x05, 0xaf, 0x05, 0xaf, 0x05, 0xcd, 0x93, 0x05, 0x7e, 0x36, 0x7f, 0x23, 0x18, 0x09, 0x23, + 0x7e, 0xfe, 0x76, 0x28, 0x18, 0x36, 0x7f, 0x2b, 0x77, 0x18, 0x98, 0xcd, 0x93, 0x05, 0xcd, 0x5c, + 0x05, 0x18, 0xf6, 0x2b, 0xed, 0x5b, 0x14, 0x40, 0x1a, 0xfe, 0x7f, 0xc0, 0xd1, 0x18, 0xea, 0x2a, + 0x0a, 0x40, 0xcd, 0xd8, 0x09, 0xeb, 0xcd, 0xbb, 0x05, 0x21, 0x0b, 0x40, 0xc3, 0x64, 0x04, 0x7b, + 0xe6, 0x07, 0x32, 0x06, 0x40, 0x18, 0xe6, 0xeb, 0x11, 0xc2, 0x04, 0x7e, 0xe6, 0xc0, 0x20, 0xf7, + 0x56, 0x23, 0x5e, 0xc9, 0xcd, 0x1f, 0x0a, 0x21, 0x6f, 0x04, 0xe5, 0xfd, 0xcb, 0x2d, 0x6e, 0xc0, + 0x2a, 0x14, 0x40, 0x22, 0x0e, 0x40, 0x21, 0x21, 0x18, 0x22, 0x39, 0x40, 0x2a, 0x0a, 0x40, 0xcd, + 0xd8, 0x09, 0xcd, 0xbb, 0x05, 0x7a, 0xb3, 0xc8, 0x2b, 0xcd, 0xa5, 0x0a, 0x23, 0x4e, 0x23, 0x46, + 0x23, 0xed, 0x5b, 0x0e, 0x40, 0x3e, 0x7f, 0x12, 0x13, 0xe5, 0x21, 0x1d, 0x00, 0x19, 0x09, 0xed, + 0x72, 0xe1, 0xd0, 0xed, 0xb0, 0xeb, 0xd1, 0xcd, 0xa6, 0x14, 0x18, 0x91, 0xcd, 0x1f, 0x0a, 0x21, + 0x72, 0x04, 0xfd, 0xcb, 0x2d, 0x6e, 0x20, 0x11, 0x2a, 0x14, 0x40, 0x7e, 0xfe, 0xff, 0x28, 0x06, + 0xcd, 0xe2, 0x08, 0xcd, 0x2a, 0x0a, 0x21, 0x19, 0x04, 0xe5, 0xcd, 0xba, 0x0c, 0xe1, 0xcd, 0x37, + 0x05, 0xcd, 0x5c, 0x05, 0xcd, 0x73, 0x0a, 0x20, 0x15, 0x78, 0xb1, 0xc2, 0xe0, 0x06, 0x0b, 0x0b, + 0xed, 0x43, 0x07, 0x40, 0xfd, 0x36, 0x22, 0x02, 0xed, 0x5b, 0x0c, 0x40, 0x18, 0x13, 0xfe, 0x76, + 0x28, 0x12, 0xed, 0x4b, 0x30, 0x40, 0xcd, 0x18, 0x09, 0xed, 0x5b, 0x29, 0x40, 0xfd, 0x36, 0x22, + 0x02, 0xdf, 0xfe, 0x76, 0xca, 0x13, 0x04, 0xfd, 0x36, 0x01, 0x80, 0xeb, 0x22, 0x29, 0x40, 0xeb, + 0xcd, 0x4d, 0x00, 0xcd, 0xc1, 0x0c, 0xfd, 0xcb, 0x01, 0x8e, 0x3e, 0xc0, 0xfd, 0x77, 0x19, 0xcd, + 0xa3, 0x14, 0xfd, 0xcb, 0x2d, 0xae, 0xfd, 0xcb, 0x00, 0x7e, 0x28, 0x22, 0x2a, 0x29, 0x40, 0xa6, + 0x20, 0x1c, 0x56, 0x23, 0x5e, 0xed, 0x53, 0x07, 0x40, 0x23, 0x5e, 0x23, 0x56, 0x23, 0xeb, 0x19, + 0xcd, 0x46, 0x0f, 0x38, 0xc7, 0x21, 0x00, 0x40, 0xcb, 0x7e, 0x28, 0x02, 0x36, 0x0c, 0xfd, 0xcb, + 0x38, 0x7e, 0xcc, 0x71, 0x08, 0x01, 0x21, 0x01, 0xcd, 0x18, 0x09, 0x3a, 0x00, 0x40, 0xed, 0x4b, + 0x07, 0x40, 0x3c, 0x28, 0x0c, 0xfe, 0x09, 0x20, 0x01, 0x03, 0xed, 0x43, 0x2b, 0x40, 0x20, 0x01, + 0x0b, 0xcd, 0xeb, 0x07, 0x3e, 0x18, 0xd7, 0xcd, 0x98, 0x0a, 0xcd, 0xad, 0x14, 0xc3, 0xc1, 0x04, + 0xed, 0x43, 0x0a, 0x40, 0x2a, 0x16, 0x40, 0xeb, 0x21, 0x13, 0x04, 0xe5, 0x2a, 0x1a, 0x40, 0xed, + 0x52, 0xe5, 0xc5, 0xcd, 0xe7, 0x02, 0xcd, 0x2a, 0x0a, 0xe1, 0xcd, 0xd8, 0x09, 0x20, 0x06, 0xcd, + 0xf2, 0x09, 0xcd, 0x60, 0x0a, 0xc1, 0x79, 0x3d, 0xb0, 0xc8, 0xc5, 0x03, 0x03, 0x03, 0x03, 0x2b, + 0xcd, 0x9e, 0x09, 0xcd, 0x07, 0x02, 0xc1, 0xc5, 0x13, 0x2a, 0x1a, 0x40, 0x2b, 0xed, 0xb8, 0x2a, + 0x0a, 0x40, 0xeb, 0xc1, 0x70, 0x2b, 0x71, 0x2b, 0x73, 0x2b, 0x72, 0xc9, 0xfd, 0xcb, 0x01, 0xce, + 0xcd, 0xa7, 0x0e, 0x78, 0xe6, 0x3f, 0x67, 0x69, 0x22, 0x0a, 0x40, 0xcd, 0xd8, 0x09, 0x1e, 0x00, + 0xcd, 0x45, 0x07, 0x18, 0xfb, 0xed, 0x4b, 0x0a, 0x40, 0xcd, 0xea, 0x09, 0x16, 0x92, 0x28, 0x05, + 0x11, 0x00, 0x00, 0xcb, 0x13, 0xfd, 0x73, 0x1e, 0x7e, 0xfe, 0x40, 0xc1, 0xd0, 0xc5, 0xcd, 0xa5, + 0x0a, 0x23, 0x7a, 0xd7, 0x23, 0x23, 0x22, 0x16, 0x40, 0xfd, 0xcb, 0x01, 0xc6, 0xed, 0x4b, 0x18, + 0x40, 0x2a, 0x16, 0x40, 0xa7, 0xed, 0x42, 0x20, 0x03, 0x3e, 0xb8, 0xd7, 0x2a, 0x16, 0x40, 0x7e, + 0x23, 0xcd, 0xb4, 0x07, 0x22, 0x16, 0x40, 0x28, 0xe4, 0xfe, 0x7f, 0x28, 0x10, 0xfe, 0x76, 0x28, + 0x5d, 0xcb, 0x77, 0x28, 0x05, 0xcd, 0x4b, 0x09, 0x18, 0xd3, 0xd7, 0x18, 0xd0, 0x3a, 0x06, 0x40, + 0x06, 0xab, 0xa7, 0x20, 0x05, 0x3a, 0x01, 0x40, 0x06, 0xb0, 0x1f, 0x1f, 0xe6, 0x01, 0x80, 0xcd, + 0xf5, 0x07, 0x18, 0xb9, 0xfe, 0x7e, 0xc0, 0x23, 0x23, 0x23, 0x23, 0x23, 0xc9, 0x16, 0x00, 0xcb, + 0x28, 0x9f, 0xf6, 0x26, 0x2e, 0x05, 0x95, 0x85, 0x37, 0xcb, 0x19, 0x38, 0xfa, 0x0c, 0xc0, 0x48, + 0x2d, 0x2e, 0x01, 0x20, 0xf2, 0x21, 0x7d, 0x00, 0x5f, 0x19, 0x37, 0xc9, 0x7b, 0xa7, 0xf8, 0x18, + 0x10, 0xaf, 0x09, 0x3c, 0x38, 0xfc, 0xed, 0x42, 0x3d, 0x28, 0xf1, 0x1e, 0x1c, 0x83, 0xa7, 0x28, + 0x04, 0xfd, 0xcb, 0x01, 0x86, 0xd9, 0xe5, 0xfd, 0xcb, 0x01, 0x4e, 0x20, 0x05, 0xcd, 0x08, 0x08, + 0x18, 0x03, 0xcd, 0x51, 0x08, 0xe1, 0xd9, 0xc9, 0x57, 0xed, 0x4b, 0x39, 0x40, 0x79, 0xfe, 0x21, + 0x28, 0x1a, 0x3e, 0x76, 0xba, 0x28, 0x30, 0x2a, 0x0e, 0x40, 0xbe, 0x7a, 0x20, 0x20, 0x0d, 0x20, + 0x19, 0x23, 0x22, 0x0e, 0x40, 0x0e, 0x21, 0x05, 0xed, 0x43, 0x39, 0x40, 0x78, 0xfd, 0xbe, 0x22, + 0x28, 0x03, 0xa7, 0x20, 0xdd, 0x2e, 0x04, 0xc3, 0x58, 0x00, 0xcd, 0x9b, 0x09, 0xeb, 0x77, 0x23, + 0x22, 0x0e, 0x40, 0xfd, 0x35, 0x39, 0xc9, 0x0e, 0x21, 0x05, 0xfd, 0xcb, 0x01, 0xc6, 0xc3, 0x18, + 0x09, 0xfe, 0x76, 0x28, 0x1c, 0x4f, 0x3a, 0x38, 0x40, 0xe6, 0x7f, 0xfe, 0x5c, 0x6f, 0x26, 0x40, + 0xcc, 0x71, 0x08, 0x71, 0x2c, 0xfd, 0x75, 0x38, 0xc9, 0x16, 0x16, 0x2a, 0x0c, 0x40, 0x23, 0x18, + 0x05, 0x16, 0x01, 0x21, 0x3c, 0x40, 0xcd, 0xe7, 0x02, 0xc5, 0xe5, 0xaf, 0x5f, 0xd3, 0xfb, 0xe1, + 0xcd, 0x46, 0x0f, 0x38, 0x05, 0x1f, 0xd3, 0xfb, 0xcf, 0x0c, 0xdb, 0xfb, 0x87, 0xfa, 0xde, 0x08, + 0x30, 0xee, 0xe5, 0xd5, 0x7a, 0xfe, 0x02, 0x9f, 0xa3, 0x07, 0xa3, 0x57, 0x4e, 0x79, 0x23, 0xfe, + 0x76, 0x28, 0x24, 0xe5, 0xcb, 0x27, 0x87, 0x87, 0x26, 0x0f, 0xcb, 0x14, 0x83, 0x6f, 0xcb, 0x11, + 0x9f, 0xae, 0x4f, 0x06, 0x08, 0x7a, 0xcb, 0x01, 0x1f, 0x67, 0xdb, 0xfb, 0x1f, 0x30, 0xfb, 0x7c, + 0xd3, 0xfb, 0x10, 0xf1, 0xe1, 0x18, 0xd5, 0xdb, 0xfb, 0x1f, 0x30, 0xfb, 0x7a, 0x0f, 0xd3, 0xfb, + 0xd1, 0x1c, 0xcb, 0x5b, 0x28, 0xa7, 0xc1, 0x15, 0x20, 0xa0, 0x3e, 0x04, 0xd3, 0xfb, 0xcd, 0x07, + 0x02, 0xc1, 0x21, 0x5c, 0x40, 0x36, 0x76, 0x06, 0x20, 0x2b, 0x36, 0x00, 0x10, 0xfb, 0x7d, 0xcb, + 0xff, 0x32, 0x38, 0x40, 0xc9, 0x3e, 0x17, 0x90, 0x38, 0x0b, 0xfd, 0xbe, 0x22, 0xda, 0x35, 0x08, + 0x3c, 0x47, 0x3e, 0x1f, 0x91, 0xda, 0xad, 0x0e, 0xc6, 0x02, 0x4f, 0xfd, 0xcb, 0x01, 0x4e, 0x28, + 0x07, 0x3e, 0x5d, 0x91, 0x32, 0x38, 0x40, 0xc9, 0xed, 0x43, 0x39, 0x40, 0x2a, 0x10, 0x40, 0x51, + 0x3e, 0x22, 0x91, 0x4f, 0x3e, 0x76, 0x04, 0x2b, 0xbe, 0x20, 0xfc, 0x10, 0xfa, 0x23, 0xed, 0xb1, + 0x2b, 0x22, 0x0e, 0x40, 0x37, 0xe0, 0x15, 0xc8, 0xc5, 0xcd, 0x9e, 0x09, 0xc1, 0x41, 0x62, 0x6b, + 0x36, 0x00, 0x2b, 0x10, 0xfb, 0xeb, 0x23, 0x22, 0x0e, 0x40, 0xc9, 0xf5, 0xcd, 0x75, 0x09, 0x30, + 0x08, 0xfd, 0xcb, 0x01, 0x46, 0x20, 0x02, 0xaf, 0xd7, 0x0a, 0xe6, 0x3f, 0xd7, 0x0a, 0x03, 0x87, + 0x30, 0xf7, 0xc1, 0xcb, 0x78, 0xc8, 0xfe, 0x1a, 0x28, 0x03, 0xfe, 0x38, 0xd8, 0xaf, 0xfd, 0xcb, + 0x01, 0xc6, 0xc3, 0xf5, 0x07, 0xe5, 0x21, 0x11, 0x01, 0xcb, 0x7f, 0x28, 0x02, 0xe6, 0x3f, 0xfe, + 0x43, 0x30, 0x10, 0x47, 0x04, 0xcb, 0x7e, 0x23, 0x28, 0xfb, 0x10, 0xf9, 0xcb, 0x77, 0x20, 0x02, + 0xfe, 0x18, 0x3f, 0x44, 0x4d, 0xe1, 0xd0, 0x0a, 0xc6, 0xe4, 0xc9, 0x01, 0x01, 0x00, 0xe5, 0xcd, + 0xc5, 0x0e, 0xe1, 0xcd, 0xad, 0x09, 0x2a, 0x1c, 0x40, 0xeb, 0xed, 0xb8, 0xc9, 0xf5, 0xe5, 0x21, + 0x0c, 0x40, 0x3e, 0x09, 0x5e, 0x23, 0x56, 0xe3, 0xa7, 0xed, 0x52, 0x19, 0xe3, 0x30, 0x09, 0xd5, + 0xeb, 0x09, 0xeb, 0x72, 0x2b, 0x73, 0x23, 0xd1, 0x23, 0x3d, 0x20, 0xe8, 0xeb, 0xd1, 0xf1, 0xa7, + 0xed, 0x52, 0x44, 0x4d, 0x03, 0x19, 0xeb, 0xc9, 0xe5, 0x21, 0x7d, 0x40, 0x54, 0x5d, 0xc1, 0xcd, + 0xea, 0x09, 0xd0, 0xc5, 0xcd, 0xf2, 0x09, 0xeb, 0x18, 0xf4, 0x7e, 0xb8, 0xc0, 0x23, 0x7e, 0x2b, + 0xb9, 0xc9, 0xe5, 0x7e, 0xfe, 0x40, 0x38, 0x17, 0xcb, 0x6f, 0x28, 0x14, 0x87, 0xfa, 0x01, 0x0a, + 0x3f, 0x01, 0x05, 0x00, 0x30, 0x02, 0x0e, 0x11, 0x17, 0x23, 0x7e, 0x30, 0xfb, 0x18, 0x06, 0x23, + 0x23, 0x4e, 0x23, 0x46, 0x23, 0x09, 0xd1, 0xa7, 0xed, 0x52, 0x44, 0x4d, 0x19, 0xeb, 0xc9, 0xfd, + 0x46, 0x22, 0xc5, 0xcd, 0x2c, 0x0a, 0xc1, 0x05, 0x18, 0x02, 0x06, 0x18, 0xfd, 0xcb, 0x01, 0x8e, + 0x0e, 0x21, 0xc5, 0xcd, 0x18, 0x09, 0xc1, 0x3a, 0x05, 0x40, 0xfe, 0x4d, 0x38, 0x14, 0xfd, 0xcb, + 0x3a, 0xfe, 0xaf, 0xcd, 0xf5, 0x07, 0x2a, 0x39, 0x40, 0x7d, 0xb4, 0xe6, 0x7e, 0x20, 0xf3, 0xc3, + 0x18, 0x09, 0x54, 0x5d, 0x2b, 0x48, 0x06, 0x00, 0xed, 0xb0, 0x2a, 0x10, 0x40, 0xcd, 0x17, 0x0a, + 0xc5, 0x78, 0x2f, 0x47, 0x79, 0x2f, 0x4f, 0x03, 0xcd, 0xad, 0x09, 0xeb, 0xe1, 0x19, 0xd5, 0xed, + 0xb0, 0xe1, 0xc9, 0x2a, 0x14, 0x40, 0xcd, 0x4d, 0x00, 0xdf, 0xfd, 0xcb, 0x2d, 0x6e, 0xc0, 0x21, + 0x5d, 0x40, 0x22, 0x1c, 0x40, 0xcd, 0x48, 0x15, 0xcd, 0x8a, 0x15, 0x38, 0x04, 0x21, 0xf0, 0xd8, + 0x09, 0xda, 0x9a, 0x0d, 0xbf, 0xc3, 0xbc, 0x14, 0xd5, 0xe5, 0xaf, 0xcb, 0x78, 0x20, 0x20, 0x60, + 0x69, 0x1e, 0xff, 0x18, 0x08, 0xd5, 0x56, 0x23, 0x5e, 0xe5, 0xeb, 0x1e, 0x00, 0x01, 0x18, 0xfc, + 0xcd, 0xe1, 0x07, 0x01, 0x9c, 0xff, 0xcd, 0xe1, 0x07, 0x0e, 0xf6, 0xcd, 0xe1, 0x07, 0x7d, 0xcd, + 0xeb, 0x07, 0xe1, 0xd1, 0xc9, 0xcd, 0xa6, 0x0d, 0xe1, 0xc8, 0xe9, 0xfd, 0xcb, 0x01, 0xce, 0x7e, + 0xfe, 0x76, 0xca, 0x84, 0x0b, 0xd6, 0x1a, 0xce, 0x00, 0x28, 0x69, 0xfe, 0xa7, 0x20, 0x1b, 0xe7, + 0xcd, 0x92, 0x0d, 0xfe, 0x1a, 0xc2, 0x9a, 0x0d, 0xe7, 0xcd, 0x92, 0x0d, 0xcd, 0x4e, 0x0b, 0xef, + 0x01, 0x34, 0xcd, 0xf5, 0x0b, 0xcd, 0xf5, 0x08, 0x18, 0x3d, 0xfe, 0xa8, 0x20, 0x33, 0xe7, 0xcd, + 0x92, 0x0d, 0xcd, 0x4e, 0x0b, 0xcd, 0x02, 0x0c, 0xc2, 0xad, 0x0e, 0xe6, 0x1f, 0x4f, 0xfd, 0xcb, + 0x01, 0x4e, 0x28, 0x0a, 0xfd, 0x96, 0x38, 0xcb, 0xff, 0xc6, 0x3c, 0xd4, 0x71, 0x08, 0xfd, 0x86, + 0x39, 0xfe, 0x21, 0x3a, 0x3a, 0x40, 0xde, 0x01, 0xcd, 0xfa, 0x08, 0xfd, 0xcb, 0x01, 0xc6, 0x18, + 0x06, 0xcd, 0x55, 0x0f, 0xcd, 0x55, 0x0b, 0xdf, 0xd6, 0x1a, 0xce, 0x00, 0x28, 0x06, 0xcd, 0x1d, + 0x0d, 0xc3, 0x84, 0x0b, 0xd4, 0x8b, 0x0b, 0xe7, 0xfe, 0x76, 0xc8, 0xc3, 0xd5, 0x0a, 0xcd, 0xa6, + 0x0d, 0xc0, 0xe1, 0x18, 0xe2, 0xcd, 0xc5, 0x0a, 0xfd, 0xcb, 0x01, 0x76, 0xcc, 0xf8, 0x13, 0x28, + 0x0a, 0xc3, 0xdb, 0x15, 0x3e, 0x0b, 0xd7, 0xed, 0x5b, 0x18, 0x40, 0x78, 0xb1, 0x0b, 0xc8, 0x1a, + 0x13, 0xed, 0x53, 0x18, 0x40, 0xcb, 0x77, 0x28, 0xed, 0xfe, 0xc0, 0x28, 0xe7, 0xc5, 0xcd, 0x4b, + 0x09, 0xc1, 0x18, 0xe3, 0xcd, 0xc5, 0x0a, 0x3e, 0x76, 0xd7, 0xc9, 0xcd, 0xc5, 0x0a, 0xfd, 0xcb, + 0x01, 0xc6, 0xaf, 0xd7, 0xed, 0x4b, 0x39, 0x40, 0x79, 0xfd, 0xcb, 0x01, 0x4e, 0x28, 0x05, 0x3e, + 0x5d, 0xfd, 0x96, 0x38, 0x0e, 0x11, 0xb9, 0x30, 0x02, 0x0e, 0x01, 0xcd, 0x0b, 0x09, 0xc9, 0xcd, + 0xf5, 0x0b, 0xed, 0x43, 0x36, 0x40, 0x3e, 0x2b, 0x90, 0xda, 0xad, 0x0e, 0x47, 0x3e, 0x01, 0xcb, + 0x28, 0x30, 0x02, 0x3e, 0x04, 0xcb, 0x29, 0x30, 0x01, 0x07, 0xf5, 0xcd, 0xf5, 0x08, 0x7e, 0x07, + 0xfe, 0x10, 0x30, 0x06, 0x0f, 0x30, 0x02, 0xee, 0x8f, 0x47, 0x11, 0x9e, 0x0c, 0x3a, 0x30, 0x40, + 0x93, 0xfa, 0xe9, 0x0b, 0xf1, 0x2f, 0xa0, 0x18, 0x02, 0xf1, 0xb0, 0xfe, 0x08, 0x38, 0x02, 0xee, + 0x8f, 0xd9, 0xd7, 0xd9, 0xc9, 0xcd, 0x02, 0x0c, 0x47, 0xc5, 0xcd, 0x02, 0x0c, 0x59, 0xc1, 0x51, + 0x4f, 0xc9, 0xcd, 0xcd, 0x15, 0xda, 0xad, 0x0e, 0x0e, 0x01, 0xc8, 0x0e, 0xff, 0xc9, 0xfd, 0x46, + 0x22, 0x0e, 0x21, 0xcd, 0x18, 0x09, 0xcd, 0x9b, 0x09, 0x7e, 0x12, 0xfd, 0x34, 0x3a, 0x2a, 0x0c, + 0x40, 0x23, 0x54, 0x5d, 0xed, 0xb1, 0xc3, 0x5d, 0x0a, 0x8b, 0x8d, 0x2d, 0x7f, 0x81, 0x49, 0x75, + 0x5f, 0x40, 0x42, 0x2b, 0x17, 0x1f, 0x37, 0x52, 0x45, 0x0f, 0x6d, 0x2b, 0x44, 0x2d, 0x5a, 0x3b, + 0x4c, 0x45, 0x0d, 0x52, 0x5a, 0x4d, 0x15, 0x6a, 0x01, 0x14, 0x02, 0x06, 0x00, 0x81, 0x0e, 0x06, + 0xde, 0x05, 0xab, 0x0d, 0x06, 0x00, 0xb5, 0x0e, 0x00, 0xdc, 0x0c, 0x00, 0xd8, 0x0e, 0x04, 0x14, + 0x06, 0xdf, 0x06, 0x05, 0xb9, 0x0d, 0x04, 0x00, 0x2e, 0x0e, 0x05, 0xcf, 0x0a, 0x01, 0x00, 0xe9, + 0x0e, 0x05, 0x09, 0x14, 0x05, 0x6a, 0x0d, 0x00, 0xc3, 0x03, 0x03, 0xaf, 0x0e, 0x03, 0x30, 0x07, + 0x06, 0x1a, 0x06, 0x00, 0x92, 0x0e, 0x03, 0x6c, 0x0e, 0x05, 0x40, 0x03, 0x05, 0xf6, 0x02, 0x00, + 0x7c, 0x0e, 0x00, 0x9a, 0x14, 0x00, 0x2a, 0x0a, 0x06, 0x1a, 0x06, 0x00, 0xaf, 0x0b, 0x06, 0x1a, + 0x06, 0x00, 0xaf, 0x0b, 0x00, 0x0e, 0x0c, 0x06, 0x00, 0x32, 0x0f, 0x00, 0x2b, 0x0f, 0x00, 0x23, + 0x0f, 0x00, 0x69, 0x08, 0x05, 0xcb, 0x0a, 0x03, 0x2c, 0x07, 0xfd, 0x36, 0x01, 0x01, 0xcd, 0x73, + 0x0a, 0xcd, 0xbc, 0x14, 0x21, 0x00, 0x40, 0x36, 0xff, 0x21, 0x2d, 0x40, 0xcb, 0x6e, 0x28, 0x0e, + 0xfe, 0xe3, 0x7e, 0xc2, 0x6f, 0x0d, 0xcd, 0xa6, 0x0d, 0xc8, 0xcf, 0x0c, 0xcf, 0x08, 0xdf, 0x06, + 0x00, 0xfe, 0x76, 0xc8, 0x4f, 0xe7, 0x79, 0xd6, 0xe1, 0x38, 0x3b, 0x4f, 0x21, 0x29, 0x0c, 0x09, + 0x4e, 0x09, 0x18, 0x03, 0x2a, 0x30, 0x40, 0x7e, 0x23, 0x22, 0x30, 0x40, 0x01, 0xf4, 0x0c, 0xc5, + 0x4f, 0xfe, 0x0b, 0x30, 0x0b, 0x21, 0x16, 0x0d, 0x06, 0x00, 0x09, 0x4e, 0x09, 0xe5, 0xdf, 0xc9, + 0xdf, 0xb9, 0x20, 0x12, 0xe7, 0xc9, 0x17, 0x25, 0x53, 0x0f, 0x6b, 0x13, 0x76, 0xcd, 0xa6, 0x0d, + 0xc0, 0xc1, 0x7e, 0xfe, 0x76, 0xc8, 0x18, 0x72, 0xfe, 0x76, 0xcd, 0x9c, 0x0d, 0xbf, 0xc1, 0xcc, + 0x1d, 0x0d, 0xeb, 0x2a, 0x30, 0x40, 0x4e, 0x23, 0x46, 0xeb, 0xc5, 0xc9, 0xcd, 0x1c, 0x11, 0xfd, + 0x36, 0x2d, 0x00, 0x30, 0x08, 0xfd, 0xcb, 0x2d, 0xce, 0x20, 0x18, 0xcf, 0x01, 0xcc, 0xa7, 0x11, + 0xfd, 0xcb, 0x01, 0x76, 0x20, 0x0d, 0xaf, 0xcd, 0xa6, 0x0d, 0xc4, 0xf8, 0x13, 0x21, 0x2d, 0x40, + 0xb6, 0x77, 0xeb, 0xed, 0x43, 0x2e, 0x40, 0x22, 0x12, 0x40, 0xc9, 0xc1, 0x3a, 0x01, 0x40, 0xf5, + 0xcd, 0x55, 0x0f, 0xf1, 0x01, 0x21, 0x13, 0xfd, 0x56, 0x01, 0xaa, 0xe6, 0x40, 0x20, 0x1b, 0xcb, + 0x7a, 0x20, 0xb7, 0x18, 0x9d, 0xcd, 0x1c, 0x11, 0xf5, 0x79, 0xf6, 0x9f, 0x3c, 0x20, 0x0b, 0xf1, + 0x18, 0xad, 0xcd, 0x55, 0x0f, 0xfd, 0xcb, 0x01, 0x76, 0xc0, 0xcf, 0x0b, 0x20, 0xf4, 0xcd, 0xa6, + 0x0d, 0xc8, 0xef, 0xa0, 0x34, 0xc9, 0xfd, 0xcb, 0x01, 0x7e, 0xc9, 0xcd, 0xa6, 0x0d, 0x28, 0x06, + 0xef, 0x02, 0x34, 0x1a, 0xa7, 0xc8, 0xc3, 0xde, 0x0c, 0xfe, 0xe0, 0x20, 0x09, 0xe7, 0xcd, 0x92, + 0x0d, 0xcd, 0x1d, 0x0d, 0x18, 0x06, 0xcd, 0x1d, 0x0d, 0xef, 0xa1, 0x34, 0xef, 0xc0, 0x02, 0x01, + 0xe0, 0x01, 0x34, 0xcd, 0x21, 0x13, 0x22, 0x1f, 0x40, 0x2b, 0x7e, 0xcb, 0xfe, 0x01, 0x06, 0x00, + 0x09, 0x07, 0x38, 0x06, 0xcb, 0x21, 0xcd, 0x9e, 0x09, 0x23, 0xe5, 0xef, 0x02, 0x02, 0x34, 0xe1, + 0xeb, 0x0e, 0x0a, 0xed, 0xb0, 0x2a, 0x07, 0x40, 0xeb, 0x13, 0x73, 0x23, 0x72, 0xcd, 0x5a, 0x0e, + 0xd0, 0xfd, 0xcb, 0x08, 0x7e, 0xc0, 0xfd, 0x46, 0x2e, 0xcb, 0xb0, 0x2a, 0x29, 0x40, 0x7e, 0xe6, + 0xc0, 0x20, 0x17, 0xc5, 0xcd, 0xf2, 0x09, 0xc1, 0x23, 0x23, 0x23, 0xcd, 0x4c, 0x00, 0xdf, 0xfe, + 0xf3, 0xeb, 0x20, 0xea, 0xeb, 0xe7, 0xeb, 0xb8, 0x20, 0xe4, 0x22, 0x29, 0x40, 0xc9, 0xfd, 0xcb, + 0x2d, 0x4e, 0xc2, 0x4b, 0x0d, 0x2a, 0x12, 0x40, 0xcb, 0x7e, 0x28, 0x1c, 0x23, 0x22, 0x1f, 0x40, + 0xef, 0xe0, 0xe2, 0x0f, 0xc0, 0x02, 0x34, 0xcd, 0x5a, 0x0e, 0xd8, 0x2a, 0x1f, 0x40, 0x11, 0x0f, + 0x00, 0x19, 0x5e, 0x23, 0x56, 0xeb, 0x18, 0x2e, 0xcf, 0x00, 0xef, 0xe1, 0xe0, 0xe2, 0x32, 0x00, + 0x02, 0x01, 0x03, 0x33, 0x00, 0x04, 0x34, 0xa7, 0xc9, 0x34, 0x37, 0xc9, 0xcd, 0xa7, 0x0e, 0x78, + 0xb1, 0x20, 0x04, 0xed, 0x4b, 0x34, 0x40, 0xed, 0x43, 0x32, 0x40, 0xc9, 0x2a, 0x2b, 0x40, 0x18, + 0x05, 0xcd, 0xa7, 0x0e, 0x60, 0x69, 0x7c, 0xfe, 0xf0, 0x30, 0x22, 0xcd, 0xd8, 0x09, 0x22, 0x29, + 0x40, 0xc9, 0xcd, 0xcd, 0x15, 0x38, 0x16, 0x28, 0x02, 0xed, 0x44, 0xf5, 0xcd, 0xa7, 0x0e, 0xf1, + 0xfd, 0xcb, 0x00, 0x7e, 0xc8, 0x02, 0xc9, 0xcd, 0x8a, 0x15, 0x38, 0x01, 0xc8, 0xcf, 0x0a, 0xcd, + 0x81, 0x0e, 0xc3, 0x9a, 0x14, 0x2a, 0x07, 0x40, 0x23, 0xe3, 0xe5, 0xed, 0x73, 0x02, 0x40, 0xcd, + 0x81, 0x0e, 0x01, 0x06, 0x00, 0x2a, 0x1c, 0x40, 0x09, 0x38, 0x08, 0xeb, 0x21, 0x24, 0x00, 0x19, + 0xed, 0x72, 0xd8, 0x2e, 0x03, 0xc3, 0x58, 0x00, 0xe1, 0xe3, 0x7c, 0xfe, 0x3e, 0x28, 0x06, 0xed, + 0x73, 0x02, 0x40, 0x18, 0xa1, 0xe3, 0xe5, 0xcf, 0x06, 0xfd, 0xcb, 0x08, 0x7e, 0x20, 0x32, 0xcd, + 0xa3, 0x14, 0x21, 0x2d, 0x40, 0xcb, 0xee, 0xcb, 0xb6, 0x3a, 0x01, 0x40, 0xe6, 0x40, 0x01, 0x02, + 0x00, 0x20, 0x02, 0x0e, 0x04, 0xb6, 0x77, 0xf7, 0x36, 0x76, 0x79, 0x0f, 0x0f, 0x38, 0x05, 0x3e, + 0x0b, 0x12, 0x2b, 0x77, 0x2b, 0x36, 0x7f, 0x2a, 0x39, 0x40, 0x22, 0x30, 0x40, 0xe1, 0xc3, 0x72, + 0x04, 0xcf, 0x07, 0xcd, 0xe7, 0x02, 0xfd, 0xcb, 0x3b, 0xb6, 0xc9, 0xfd, 0xcb, 0x3b, 0xf6, 0xc3, + 0x07, 0x02, 0xcd, 0xa7, 0x0e, 0xcd, 0xe7, 0x02, 0x60, 0x69, 0xcd, 0x2d, 0x02, 0xfd, 0x36, 0x35, + 0xff, 0xcd, 0x07, 0x02, 0x18, 0x05, 0x3e, 0x7f, 0xdb, 0xfe, 0x1f, 0xfd, 0xcb, 0x3b, 0x86, 0x3e, + 0xff, 0x32, 0x27, 0x40, 0xc9, 0xdf, 0x06, 0x00, 0xc5, 0xfe, 0x40, 0x20, 0x2f, 0xcd, 0xa6, 0x0d, + 0x28, 0x28, 0xed, 0x4b, 0x32, 0x40, 0xcd, 0x20, 0x15, 0xef, 0xa1, 0x0f, 0x30, 0x37, 0x16, 0x04, + 0x30, 0x80, 0x41, 0x00, 0x00, 0x80, 0x2e, 0x02, 0xa1, 0x03, 0x2d, 0x34, 0xcd, 0x8a, 0x15, 0xed, + 0x43, 0x32, 0x40, 0x7e, 0xa7, 0x28, 0x03, 0xd6, 0x10, 0x77, 0x18, 0x0d, 0xfe, 0x42, 0x20, 0x0d, + 0xcd, 0xa6, 0x0d, 0x28, 0x04, 0xef, 0xa3, 0x34, 0x34, 0xe7, 0xc3, 0x83, 0x10, 0xfe, 0x41, 0x20, + 0x11, 0xcd, 0xbb, 0x02, 0x44, 0x4d, 0x51, 0x14, 0xc4, 0xbd, 0x07, 0x7a, 0x8a, 0x42, 0x4f, 0xeb, + 0x18, 0x3b, 0xcd, 0xd2, 0x14, 0x38, 0x6e, 0xfe, 0x1b, 0xca, 0x47, 0x10, 0x01, 0xd8, 0x09, 0xfe, + 0x16, 0x28, 0x5d, 0xfe, 0x10, 0x20, 0x0f, 0xcd, 0x49, 0x00, 0xcd, 0x55, 0x0f, 0xfe, 0x11, 0x20, + 0x2e, 0xcd, 0x49, 0x00, 0x18, 0x22, 0xfe, 0x0b, 0x20, 0x28, 0xcd, 0x49, 0x00, 0xe5, 0x18, 0x03, + 0xcd, 0x49, 0x00, 0xfe, 0x0b, 0x20, 0x14, 0xd1, 0xa7, 0xed, 0x52, 0x44, 0x4d, 0x21, 0x01, 0x40, + 0xcb, 0xb6, 0xcb, 0x7e, 0xc4, 0xc3, 0x12, 0xe7, 0xc3, 0x88, 0x10, 0xfe, 0x76, 0x20, 0xe1, 0xc3, + 0x9a, 0x0d, 0xd6, 0xc4, 0x38, 0xf9, 0x01, 0xec, 0x04, 0xfe, 0x13, 0x28, 0x13, 0x30, 0xf0, 0x06, + 0x10, 0xc6, 0xd9, 0x4f, 0xfe, 0xdc, 0x30, 0x02, 0xcb, 0xb1, 0xfe, 0xea, 0x38, 0x02, 0xcb, 0xb9, + 0xc5, 0xe7, 0xc3, 0x59, 0x0f, 0xfe, 0x26, 0x38, 0x1e, 0xcd, 0x1c, 0x11, 0xda, 0x4b, 0x0d, 0xcc, + 0xa7, 0x11, 0x3a, 0x01, 0x40, 0xfe, 0xc0, 0x38, 0x4e, 0x23, 0xed, 0x5b, 0x1c, 0x40, 0xcd, 0xf6, + 0x19, 0xeb, 0x22, 0x1c, 0x40, 0x18, 0x40, 0xcd, 0xa6, 0x0d, 0x20, 0x23, 0xcd, 0xd9, 0x14, 0xdf, + 0x01, 0x06, 0x00, 0xcd, 0x9e, 0x09, 0x23, 0x36, 0x7e, 0x23, 0xeb, 0x2a, 0x1c, 0x40, 0x0e, 0x05, + 0xa7, 0xed, 0x42, 0x22, 0x1c, 0x40, 0xed, 0xb0, 0xeb, 0x2b, 0xcd, 0x4c, 0x00, 0x18, 0x14, 0xe7, + 0xfe, 0x7e, 0x20, 0xfb, 0x23, 0xed, 0x5b, 0x1c, 0x40, 0xcd, 0xf6, 0x19, 0xed, 0x53, 0x1c, 0x40, + 0x22, 0x16, 0x40, 0xfd, 0xcb, 0x01, 0xf6, 0xdf, 0xfe, 0x10, 0x20, 0x0c, 0xfd, 0xcb, 0x01, 0x76, + 0x20, 0x2a, 0xcd, 0x63, 0x12, 0xe7, 0x18, 0xf0, 0x01, 0xc3, 0x00, 0xfe, 0x12, 0x38, 0x1d, 0xd6, + 0x16, 0x30, 0x04, 0xc6, 0x0d, 0x18, 0x0e, 0xfe, 0x03, 0x38, 0x0a, 0xd6, 0xc2, 0x38, 0x0d, 0xfe, + 0x06, 0x30, 0x09, 0xc6, 0x03, 0x81, 0x4f, 0x21, 0x4c, 0x10, 0x09, 0x46, 0xd1, 0x7a, 0xb8, 0x38, + 0x2c, 0xa7, 0xca, 0x18, 0x00, 0xc5, 0xd5, 0xcd, 0xa6, 0x0d, 0x28, 0x09, 0x7b, 0xe6, 0x3f, 0x47, + 0xef, 0x37, 0x34, 0x18, 0x09, 0x7b, 0xfd, 0xae, 0x01, 0xe6, 0x40, 0xc2, 0x9a, 0x0d, 0xd1, 0x21, + 0x01, 0x40, 0xcb, 0xf6, 0xcb, 0x7b, 0x20, 0x02, 0xcb, 0xb6, 0xc1, 0x18, 0xcf, 0xd5, 0x79, 0xfd, + 0xcb, 0x01, 0x76, 0x20, 0x15, 0xe6, 0x3f, 0xc6, 0x08, 0x4f, 0xfe, 0x10, 0x20, 0x04, 0xcb, 0xf1, + 0x18, 0x08, 0x38, 0xd7, 0xfe, 0x17, 0x28, 0x02, 0xcb, 0xf9, 0xc5, 0xe7, 0xc3, 0x59, 0x0f, 0x06, + 0x08, 0x08, 0x0a, 0x02, 0x03, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0xfd, 0xcb, 0x01, 0xf6, + 0xdf, 0xcd, 0xce, 0x14, 0xd2, 0x9a, 0x0d, 0xe5, 0x4f, 0xe7, 0xe5, 0xcb, 0xa9, 0xfe, 0x10, 0x28, + 0x17, 0xcb, 0xf1, 0xfe, 0x0d, 0x28, 0x0c, 0xcb, 0xe9, 0xcd, 0xd2, 0x14, 0x30, 0x0a, 0xcb, 0xb1, + 0xe7, 0x18, 0xf6, 0xe7, 0xfd, 0xcb, 0x01, 0xb6, 0x41, 0xcd, 0xa6, 0x0d, 0x20, 0x08, 0x79, 0xe6, + 0xe0, 0xcb, 0xff, 0x4f, 0x18, 0x34, 0x2a, 0x10, 0x40, 0x7e, 0xe6, 0x7f, 0x28, 0x2a, 0xb9, 0x20, + 0x1f, 0x17, 0x87, 0xf2, 0x95, 0x11, 0x38, 0x2d, 0xd1, 0xd5, 0xe5, 0x23, 0x1a, 0x13, 0xa7, 0x28, + 0xfb, 0xbe, 0x28, 0xf7, 0xf6, 0x80, 0xbe, 0x20, 0x06, 0x1a, 0xcd, 0xd2, 0x14, 0x30, 0x15, 0xe1, + 0xc5, 0xcd, 0xf2, 0x09, 0xeb, 0xc1, 0x18, 0xd1, 0xcb, 0xf8, 0xd1, 0xdf, 0xfe, 0x10, 0x28, 0x09, + 0xcb, 0xe8, 0x18, 0x0d, 0xd1, 0xd1, 0xd1, 0xe5, 0xdf, 0xcd, 0xd2, 0x14, 0x30, 0x03, 0xe7, 0x18, + 0xf8, 0xe1, 0xcb, 0x10, 0xcb, 0x70, 0xc9, 0xaf, 0x47, 0xcb, 0x79, 0x20, 0x4b, 0xcb, 0x7e, 0x20, + 0x0e, 0x3c, 0x23, 0x4e, 0x23, 0x46, 0x23, 0xeb, 0xcd, 0xc3, 0x12, 0xdf, 0xc3, 0x5a, 0x12, 0x23, + 0x23, 0x23, 0x46, 0xcb, 0x71, 0x28, 0x0a, 0x05, 0x28, 0xe8, 0xeb, 0xdf, 0xfe, 0x10, 0x20, 0x61, + 0xeb, 0xeb, 0x18, 0x24, 0xe5, 0xdf, 0xe1, 0xfe, 0x1a, 0x28, 0x20, 0xcb, 0x79, 0x28, 0x52, 0xcb, + 0x71, 0x20, 0x06, 0xfe, 0x11, 0x20, 0x3c, 0xe7, 0xc9, 0xfe, 0x11, 0x28, 0x6c, 0xfe, 0xdf, 0x20, + 0x32, 0xdf, 0x2b, 0x22, 0x16, 0x40, 0x18, 0x5e, 0x21, 0x00, 0x00, 0xe5, 0xe7, 0xe1, 0x79, 0xfe, + 0xc0, 0x20, 0x09, 0xdf, 0xfe, 0x11, 0x28, 0x51, 0xfe, 0xdf, 0x28, 0xe5, 0xc5, 0xe5, 0xcd, 0xff, + 0x12, 0xe3, 0xeb, 0xcd, 0xdd, 0x12, 0x38, 0x19, 0x0b, 0xcd, 0x05, 0x13, 0x09, 0xd1, 0xc1, 0x10, + 0xb3, 0xcb, 0x79, 0x20, 0x66, 0xe5, 0xcb, 0x71, 0x20, 0x13, 0x42, 0x4b, 0xdf, 0xfe, 0x11, 0x28, + 0x02, 0xcf, 0x02, 0xe7, 0xe1, 0x11, 0x05, 0x00, 0xcd, 0x05, 0x13, 0x09, 0xc9, 0xcd, 0xff, 0x12, + 0xe3, 0xcd, 0x05, 0x13, 0xc1, 0x09, 0x23, 0x42, 0x4b, 0xeb, 0xcd, 0xc2, 0x12, 0xdf, 0xfe, 0x11, + 0x28, 0x07, 0xfe, 0x1a, 0x20, 0xdb, 0xcd, 0x63, 0x12, 0xe7, 0xfe, 0x10, 0x28, 0xf8, 0xfd, 0xcb, + 0x01, 0xb6, 0xc9, 0xcd, 0xa6, 0x0d, 0xc4, 0xf8, 0x13, 0xe7, 0xfe, 0x11, 0x28, 0x50, 0xd5, 0xaf, + 0xf5, 0xc5, 0x11, 0x01, 0x00, 0xdf, 0xe1, 0xfe, 0xdf, 0x28, 0x17, 0xf1, 0xcd, 0xde, 0x12, 0xf5, + 0x50, 0x59, 0xe5, 0xdf, 0xe1, 0xfe, 0xdf, 0x28, 0x09, 0xfe, 0x11, 0xc2, 0x9a, 0x0d, 0x62, 0x6b, + 0x18, 0x13, 0xe5, 0xe7, 0xe1, 0xfe, 0x11, 0x28, 0x0c, 0xf1, 0xcd, 0xde, 0x12, 0xf5, 0xdf, 0x60, + 0x69, 0xfe, 0x11, 0x20, 0xe6, 0xf1, 0xe3, 0x19, 0x2b, 0xe3, 0xa7, 0xed, 0x52, 0x01, 0x00, 0x00, + 0x38, 0x07, 0x23, 0xa7, 0xfa, 0x31, 0x12, 0x44, 0x4d, 0xd1, 0xfd, 0xcb, 0x01, 0xb6, 0xcd, 0xa6, + 0x0d, 0xc8, 0xaf, 0xc5, 0xcd, 0xeb, 0x19, 0xc1, 0x2a, 0x1c, 0x40, 0x77, 0x23, 0x73, 0x23, 0x72, + 0x23, 0x71, 0x23, 0x70, 0x23, 0x22, 0x1c, 0x40, 0xfd, 0xcb, 0x01, 0xb6, 0xc9, 0xaf, 0xd5, 0xe5, + 0xf5, 0xcd, 0x92, 0x0d, 0xf1, 0xcd, 0xa6, 0x0d, 0x28, 0x12, 0xf5, 0xcd, 0xa7, 0x0e, 0xd1, 0x78, + 0xb1, 0x37, 0x28, 0x05, 0xe1, 0xe5, 0xa7, 0xed, 0x42, 0x7a, 0xde, 0x00, 0xe1, 0xd1, 0xc9, 0xeb, + 0x23, 0x5e, 0x23, 0x56, 0xc9, 0xcd, 0xa6, 0x0d, 0xc8, 0xc5, 0x06, 0x10, 0x7c, 0x4d, 0x21, 0x00, + 0x00, 0x29, 0x38, 0x06, 0xcb, 0x11, 0x17, 0x30, 0x04, 0x19, 0xda, 0xd3, 0x0e, 0x10, 0xf2, 0xc1, + 0xc9, 0x2a, 0x12, 0x40, 0xfd, 0xcb, 0x2d, 0x4e, 0x28, 0x44, 0x01, 0x05, 0x00, 0x03, 0x23, 0x7e, + 0xa7, 0x28, 0xfb, 0xcd, 0xd2, 0x14, 0x38, 0xf5, 0xfe, 0x0d, 0xca, 0xc8, 0x13, 0xf7, 0xd5, 0x2a, + 0x12, 0x40, 0x1b, 0x79, 0xd6, 0x06, 0x47, 0x3e, 0x40, 0x28, 0x0e, 0x23, 0x7e, 0xa7, 0x28, 0xfb, + 0x13, 0x12, 0x10, 0xf7, 0xf6, 0x80, 0x12, 0x3e, 0x80, 0x2a, 0x12, 0x40, 0xae, 0xe1, 0xcd, 0xe7, + 0x13, 0xe5, 0xef, 0x02, 0x34, 0xe1, 0x01, 0x05, 0x00, 0xa7, 0xed, 0x42, 0x18, 0x40, 0xfd, 0xcb, + 0x01, 0x76, 0x28, 0x06, 0x11, 0x06, 0x00, 0x19, 0x18, 0xe7, 0x2a, 0x12, 0x40, 0xed, 0x4b, 0x2e, + 0x40, 0xfd, 0xcb, 0x2d, 0x46, 0x20, 0x30, 0x78, 0xb1, 0xc8, 0xe5, 0xf7, 0xd5, 0xc5, 0x54, 0x5d, + 0x23, 0x36, 0x00, 0xed, 0xb8, 0xe5, 0xcd, 0xf8, 0x13, 0xe1, 0xe3, 0xa7, 0xed, 0x42, 0x09, 0x30, + 0x02, 0x44, 0x4d, 0xe3, 0xeb, 0x78, 0xb1, 0x28, 0x02, 0xed, 0xb0, 0xc1, 0xd1, 0xe1, 0xeb, 0x78, + 0xb1, 0xc8, 0xd5, 0xed, 0xb0, 0xe1, 0xc9, 0x2b, 0x2b, 0x2b, 0x7e, 0xe5, 0xc5, 0xcd, 0xce, 0x13, + 0xc1, 0xe1, 0x03, 0x03, 0x03, 0xc3, 0x60, 0x0a, 0x3e, 0x60, 0x2a, 0x12, 0x40, 0xae, 0xf5, 0xcd, + 0xf8, 0x13, 0xeb, 0x09, 0xe5, 0x03, 0x03, 0x03, 0xf7, 0xeb, 0xe1, 0x0b, 0x0b, 0xc5, 0xed, 0xb8, + 0xeb, 0xc1, 0x0b, 0x70, 0x2b, 0x71, 0xf1, 0xf5, 0xcd, 0xc7, 0x14, 0xf1, 0x2b, 0x77, 0x2a, 0x1a, + 0x40, 0x22, 0x14, 0x40, 0x2b, 0x36, 0x80, 0xc9, 0x2a, 0x1c, 0x40, 0x2b, 0x46, 0x2b, 0x4e, 0x2b, + 0x56, 0x2b, 0x5e, 0x2b, 0x7e, 0x22, 0x1c, 0x40, 0xc9, 0xcd, 0x1c, 0x11, 0xc2, 0x9a, 0x0d, 0xcd, + 0xa6, 0x0d, 0x20, 0x08, 0xcb, 0xb1, 0xcd, 0xa7, 0x11, 0xcd, 0x1d, 0x0d, 0x38, 0x08, 0xc5, 0xcd, + 0xf2, 0x09, 0xcd, 0x60, 0x0a, 0xc1, 0xcb, 0xf9, 0x06, 0x00, 0xc5, 0x21, 0x01, 0x00, 0xcb, 0x71, + 0x20, 0x02, 0x2e, 0x05, 0xeb, 0xe7, 0x26, 0x40, 0xcd, 0xdd, 0x12, 0xda, 0x31, 0x12, 0xe1, 0xc5, + 0x24, 0xe5, 0x60, 0x69, 0xcd, 0x05, 0x13, 0xeb, 0xdf, 0xfe, 0x1a, 0x28, 0xe8, 0xfe, 0x11, 0x20, + 0xbb, 0xe7, 0xc1, 0x79, 0x68, 0x26, 0x00, 0x23, 0x23, 0x29, 0x19, 0xda, 0xd3, 0x0e, 0xd5, 0xc5, + 0xe5, 0x44, 0x4d, 0x2a, 0x14, 0x40, 0x2b, 0xcd, 0x9e, 0x09, 0x23, 0x77, 0xc1, 0x0b, 0x0b, 0x0b, + 0x23, 0x71, 0x23, 0x70, 0xf1, 0x23, 0x77, 0x62, 0x6b, 0x1b, 0x36, 0x00, 0xc1, 0xed, 0xb8, 0xc1, + 0x70, 0x2b, 0x71, 0x2b, 0x3d, 0x20, 0xf8, 0xc9, 0x2a, 0x1a, 0x40, 0x2b, 0xcd, 0x9e, 0x09, 0x23, + 0x23, 0xc1, 0xed, 0x43, 0x14, 0x40, 0xc1, 0xeb, 0x23, 0xc9, 0x2a, 0x10, 0x40, 0x36, 0x80, 0x23, + 0x22, 0x14, 0x40, 0x2a, 0x14, 0x40, 0x22, 0x1a, 0x40, 0x22, 0x1c, 0x40, 0xc9, 0x2a, 0x14, 0x40, + 0x36, 0x7f, 0x23, 0x36, 0x76, 0x23, 0xfd, 0x36, 0x22, 0x02, 0x18, 0xea, 0x21, 0x5d, 0x40, 0x22, + 0x1f, 0x40, 0x2a, 0x1a, 0x40, 0x18, 0xe2, 0xed, 0x5b, 0x14, 0x40, 0xc3, 0x5d, 0x0a, 0xfe, 0x26, + 0x18, 0x02, 0xfe, 0x1c, 0x3f, 0xd0, 0xfe, 0x40, 0xc9, 0xcd, 0x48, 0x15, 0xfe, 0x1b, 0x20, 0x15, + 0xef, 0xa1, 0xc0, 0x02, 0x34, 0xe7, 0xcd, 0x14, 0x15, 0x38, 0x0a, 0xef, 0xe0, 0xa4, 0x05, 0xc0, + 0x04, 0x0f, 0x34, 0x18, 0xf0, 0xfe, 0x2a, 0xc0, 0xfd, 0x36, 0x5d, 0xff, 0xe7, 0xfe, 0x15, 0x28, + 0x07, 0xfe, 0x16, 0x20, 0x04, 0xfd, 0x34, 0x5d, 0xe7, 0xcd, 0x48, 0x15, 0xef, 0xe0, 0x00, 0x02, + 0x18, 0x38, 0x34, 0xc9, 0xfe, 0x1c, 0xd8, 0xfe, 0x26, 0x3f, 0xd8, 0xd6, 0x1c, 0x4f, 0x06, 0x00, + 0xfd, 0x21, 0x00, 0x40, 0xc5, 0xef, 0xa0, 0x34, 0xc1, 0x36, 0x91, 0x78, 0xa7, 0x20, 0x07, 0x77, + 0xb1, 0xc8, 0x41, 0x4e, 0x36, 0x89, 0x35, 0xcb, 0x21, 0xcb, 0x10, 0x30, 0xf9, 0xcb, 0x38, 0xcb, + 0x19, 0x23, 0x70, 0x23, 0x71, 0x2b, 0x2b, 0xc9, 0xf5, 0xef, 0xa0, 0x34, 0xf1, 0xcd, 0x14, 0x15, + 0xd8, 0xef, 0x01, 0xa4, 0x04, 0x0f, 0x34, 0xe7, 0x18, 0xf3, 0xef, 0x2d, 0x32, 0xc0, 0x02, 0x27, + 0xa1, 0x03, 0x2d, 0x32, 0x00, 0x22, 0x2d, 0x30, 0x33, 0x40, 0x03, 0x2d, 0x32, 0x00, 0x0c, 0x01, + 0x02, 0x01, 0x30, 0x80, 0x48, 0x18, 0x96, 0x80, 0x2f, 0x04, 0x02, 0x01, 0xa4, 0xe0, 0x00, 0x04, + 0x04, 0x2f, 0x02, 0x05, 0x01, 0x2f, 0xda, 0x02, 0x34, 0xc9, 0xcd, 0xf8, 0x13, 0xa7, 0x20, 0x05, + 0x47, 0x4f, 0xf5, 0x18, 0x31, 0x43, 0x59, 0x4a, 0xd6, 0x91, 0x3f, 0xcb, 0x78, 0xf5, 0xcb, 0xf8, + 0x38, 0x24, 0x3c, 0xed, 0x44, 0xfe, 0x08, 0x38, 0x06, 0x59, 0x48, 0x06, 0x00, 0xd6, 0x08, 0xa7, + 0x57, 0x7b, 0x07, 0x28, 0x07, 0xcb, 0x38, 0xcb, 0x19, 0x15, 0x20, 0xf9, 0x30, 0x08, 0x03, 0x78, + 0xb1, 0x20, 0x03, 0xf1, 0x37, 0xf5, 0xc5, 0xef, 0x34, 0xc1, 0xf1, 0x79, 0xc9, 0xcd, 0x8a, 0x15, + 0xd8, 0xf5, 0x05, 0x04, 0x28, 0x03, 0xf1, 0x37, 0xc9, 0xf1, 0xc9, 0xef, 0x2d, 0x32, 0x00, 0x0b, + 0x2d, 0x33, 0x00, 0x0d, 0x02, 0x34, 0x3e, 0x1c, 0xd7, 0xc9, 0x27, 0x34, 0x3e, 0x16, 0xd7, 0xef, + 0x34, 0x7e, 0xcd, 0x1d, 0x15, 0xef, 0x30, 0x78, 0x00, 0x80, 0x03, 0x30, 0xef, 0x1a, 0x20, 0x9a, + 0x85, 0x04, 0x24, 0xc1, 0x30, 0x34, 0x00, 0x03, 0x18, 0x38, 0xa2, 0x0f, 0x24, 0x34, 0x21, 0x6b, + 0x40, 0x36, 0x90, 0x06, 0x0a, 0x23, 0xe5, 0xc5, 0xef, 0xa4, 0x2e, 0x01, 0x34, 0xcd, 0xcd, 0x15, + 0xf6, 0x90, 0xc1, 0xe1, 0x77, 0x10, 0xee, 0x23, 0x01, 0x08, 0x00, 0xe5, 0x2b, 0x7e, 0xfe, 0x90, + 0x28, 0xfa, 0xed, 0x42, 0xe5, 0x7e, 0xc6, 0x6b, 0xf5, 0xf1, 0x23, 0x7e, 0xce, 0x00, 0x27, 0xf5, + 0xe6, 0x0f, 0x77, 0xcb, 0xfe, 0x28, 0xf2, 0xf1, 0xe1, 0x06, 0x06, 0x36, 0x80, 0x2b, 0x10, 0xfb, + 0xef, 0x02, 0xe1, 0x34, 0xcd, 0xcd, 0x15, 0x28, 0x02, 0xed, 0x44, 0x5f, 0x1c, 0x1c, 0xe1, 0x2b, + 0x1d, 0x7e, 0xe6, 0x0f, 0x28, 0xf9, 0x7b, 0xd6, 0x05, 0xfe, 0x08, 0xf2, 0x82, 0x16, 0xfe, 0xf6, + 0xfa, 0x82, 0x16, 0xc6, 0x06, 0x28, 0x48, 0xfa, 0xb2, 0x16, 0x47, 0xcd, 0xd0, 0x16, 0x10, 0xfb, + 0x18, 0x40, 0x43, 0xcd, 0xd0, 0x16, 0xcd, 0xc2, 0x16, 0x3e, 0x2a, 0xd7, 0x78, 0xa7, 0xf2, 0x98, + 0x16, 0xed, 0x44, 0x47, 0x3e, 0x16, 0x18, 0x02, 0x3e, 0x15, 0xd7, 0x78, 0x06, 0xff, 0x04, 0xd6, + 0x0a, 0x30, 0xfb, 0xc6, 0x0a, 0x4f, 0x78, 0xa7, 0x28, 0x03, 0xcd, 0xeb, 0x07, 0x79, 0xcd, 0xeb, + 0x07, 0xc9, 0xed, 0x44, 0x47, 0x3e, 0x1b, 0xd7, 0x3e, 0x1c, 0xd7, 0x10, 0xfd, 0x18, 0x09, 0x3e, + 0x1c, 0xd7, 0x35, 0x34, 0xe8, 0x3e, 0x1b, 0xd7, 0x35, 0x34, 0xe8, 0xcd, 0xd0, 0x16, 0x18, 0xf8, + 0x7e, 0xe6, 0x0f, 0xcd, 0xeb, 0x07, 0x2b, 0xc9, 0x7e, 0x36, 0x00, 0xa7, 0xc8, 0x23, 0xcb, 0x7e, + 0xcb, 0xfe, 0x2b, 0xc8, 0xc5, 0x01, 0x05, 0x00, 0x09, 0x41, 0x4f, 0x37, 0x2b, 0x7e, 0x2f, 0xce, + 0x00, 0x77, 0x10, 0xf8, 0x79, 0xc1, 0xc9, 0xe5, 0xf5, 0x4e, 0x23, 0x46, 0x77, 0x23, 0x79, 0x4e, + 0xc5, 0x23, 0x4e, 0x23, 0x46, 0xeb, 0x57, 0x5e, 0xd5, 0x23, 0x56, 0x23, 0x5e, 0xd5, 0xd9, 0xd1, + 0xe1, 0xc1, 0xd9, 0x23, 0x56, 0x23, 0x5e, 0xf1, 0xe1, 0xc9, 0xa7, 0xc8, 0xfe, 0x21, 0x30, 0x16, + 0xc5, 0x47, 0xd9, 0xcb, 0x2d, 0xcb, 0x1a, 0xcb, 0x1b, 0xd9, 0xcb, 0x1a, 0xcb, 0x1b, 0x10, 0xf2, + 0xc1, 0xd0, 0xcd, 0x41, 0x17, 0xc0, 0xd9, 0xaf, 0x2e, 0x00, 0x57, 0x5d, 0xd9, 0x11, 0x00, 0x00, + 0xc9, 0x1c, 0xc0, 0x14, 0xc0, 0xd9, 0x1c, 0x20, 0x01, 0x14, 0xd9, 0xc9, 0x1a, 0xa7, 0xc8, 0x13, + 0x1a, 0xee, 0x80, 0x12, 0x1b, 0xd9, 0xe5, 0xd9, 0xd5, 0xe5, 0xcd, 0xd8, 0x16, 0x47, 0xeb, 0xcd, + 0xd8, 0x16, 0x4f, 0xb8, 0x30, 0x03, 0x78, 0x41, 0xeb, 0xf5, 0x90, 0xcd, 0xf7, 0x16, 0xcd, 0x1a, + 0x17, 0xf1, 0xe1, 0x77, 0xe5, 0x68, 0x61, 0x19, 0xd9, 0xeb, 0xed, 0x4a, 0xeb, 0x7c, 0x8d, 0x6f, + 0x1f, 0xad, 0xd9, 0xeb, 0xe1, 0x1f, 0x30, 0x08, 0x3e, 0x01, 0xcd, 0x1a, 0x17, 0x34, 0x28, 0x23, + 0xd9, 0x7d, 0xe6, 0x80, 0xd9, 0x23, 0x77, 0x2b, 0x28, 0x1f, 0x7b, 0xed, 0x44, 0x3f, 0x5f, 0x7a, + 0x2f, 0xce, 0x00, 0x57, 0xd9, 0x7b, 0x2f, 0xce, 0x00, 0x5f, 0x7a, 0x2f, 0xce, 0x00, 0x30, 0x07, + 0x1f, 0xd9, 0x34, 0xca, 0x80, 0x18, 0xd9, 0x57, 0xd9, 0xaf, 0x18, 0x6c, 0x37, 0x35, 0x34, 0xc8, + 0x23, 0xae, 0xcb, 0xfe, 0x2b, 0xc9, 0xaf, 0xcd, 0xbc, 0x17, 0xd8, 0xd9, 0xe5, 0xd9, 0xd5, 0xeb, + 0xcd, 0xbc, 0x17, 0xeb, 0x38, 0x5a, 0xe5, 0xcd, 0xf7, 0x16, 0x78, 0xa7, 0xed, 0x62, 0xd9, 0xe5, + 0xed, 0x62, 0xd9, 0x06, 0x21, 0x18, 0x11, 0x30, 0x05, 0x19, 0xd9, 0xed, 0x5a, 0xd9, 0xd9, 0xcb, + 0x1c, 0xcb, 0x1d, 0xd9, 0xcb, 0x1c, 0xcb, 0x1d, 0xd9, 0xcb, 0x18, 0xcb, 0x19, 0xd9, 0xcb, 0x19, + 0x1f, 0x10, 0xe4, 0xeb, 0xd9, 0xeb, 0xd9, 0xc1, 0xe1, 0x78, 0x81, 0x20, 0x01, 0xa7, 0x3d, 0x3f, + 0x17, 0x3f, 0x1f, 0xf2, 0x19, 0x18, 0x30, 0x68, 0xa7, 0x3c, 0x20, 0x08, 0x38, 0x06, 0xd9, 0xcb, + 0x7a, 0xd9, 0x20, 0x5c, 0x77, 0xd9, 0x78, 0xd9, 0x30, 0x15, 0x7e, 0xa7, 0x3e, 0x80, 0x28, 0x01, + 0xaf, 0xd9, 0xa2, 0xcd, 0x38, 0x17, 0x07, 0x77, 0x38, 0x2e, 0x23, 0x77, 0x2b, 0x18, 0x29, 0x06, + 0x20, 0xd9, 0xcb, 0x7a, 0xd9, 0x20, 0x12, 0x07, 0xcb, 0x13, 0xcb, 0x12, 0xd9, 0xcb, 0x13, 0xcb, + 0x12, 0xd9, 0x35, 0x28, 0xd7, 0x10, 0xea, 0x18, 0xd7, 0x17, 0x30, 0x0c, 0xcd, 0x41, 0x17, 0x20, + 0x07, 0xd9, 0x16, 0x80, 0xd9, 0x34, 0x28, 0x18, 0xe5, 0x23, 0xd9, 0xd5, 0xd9, 0xc1, 0x78, 0x17, + 0xcb, 0x16, 0x1f, 0x77, 0x23, 0x71, 0x23, 0x72, 0x23, 0x73, 0xe1, 0xd1, 0xd9, 0xe1, 0xd9, 0xc9, + 0xcf, 0x05, 0xeb, 0xaf, 0xcd, 0xbc, 0x17, 0x38, 0xf7, 0xeb, 0xcd, 0xbc, 0x17, 0xd8, 0xd9, 0xe5, + 0xd9, 0xd5, 0xe5, 0xcd, 0xf7, 0x16, 0xd9, 0xe5, 0x60, 0x69, 0xd9, 0x61, 0x68, 0xaf, 0x06, 0xdf, + 0x18, 0x10, 0x17, 0xcb, 0x11, 0xd9, 0xcb, 0x11, 0xcb, 0x10, 0xd9, 0x29, 0xd9, 0xed, 0x6a, 0xd9, + 0x38, 0x10, 0xed, 0x52, 0xd9, 0xed, 0x52, 0xd9, 0x30, 0x0f, 0x19, 0xd9, 0xed, 0x5a, 0xd9, 0xa7, + 0x18, 0x08, 0xa7, 0xed, 0x52, 0xd9, 0xed, 0x52, 0xd9, 0x37, 0x04, 0xfa, 0xa2, 0x18, 0xf5, 0x28, + 0xe1, 0x5f, 0x51, 0xd9, 0x59, 0x50, 0xf1, 0xcb, 0x18, 0xf1, 0xcb, 0x18, 0xd9, 0xc1, 0xe1, 0x78, + 0x91, 0xc3, 0x10, 0x18, 0x7e, 0xfe, 0x81, 0x30, 0x06, 0x36, 0x00, 0x3e, 0x20, 0x18, 0x05, 0xd6, + 0xa0, 0xf0, 0xed, 0x44, 0xd5, 0xeb, 0x2b, 0x47, 0xcb, 0x38, 0xcb, 0x38, 0xcb, 0x38, 0x28, 0x05, + 0x36, 0x00, 0x2b, 0x10, 0xfb, 0xe6, 0x07, 0x28, 0x09, 0x47, 0x3e, 0xff, 0xcb, 0x27, 0x10, 0xfc, + 0xa6, 0x77, 0xeb, 0xd1, 0xc9, 0x00, 0xb0, 0x00, 0x31, 0x00, 0x30, 0x00, 0xf1, 0x49, 0x0f, 0xda, + 0xa2, 0x34, 0x20, 0x2f, 0x1c, 0x72, 0x1a, 0xe3, 0x19, 0x4c, 0x17, 0xc6, 0x17, 0x82, 0x18, 0xe2, + 0x1d, 0xed, 0x1a, 0xf3, 0x1a, 0x03, 0x1b, 0x03, 0x1b, 0x03, 0x1b, 0x03, 0x1b, 0x03, 0x1b, 0x03, + 0x1b, 0x55, 0x17, 0xf8, 0x1a, 0x03, 0x1b, 0x03, 0x1b, 0x03, 0x1b, 0x03, 0x1b, 0x03, 0x1b, 0x03, + 0x1b, 0x62, 0x1b, 0xa0, 0x1a, 0x06, 0x1c, 0xa4, 0x1b, 0x11, 0x1c, 0x49, 0x1d, 0x3e, 0x1d, 0x6e, + 0x1d, 0xc4, 0x1d, 0xd4, 0x1d, 0x76, 0x1d, 0xa9, 0x1c, 0x5b, 0x1c, 0x46, 0x1c, 0xdb, 0x1d, 0xaf, + 0x1a, 0xaa, 0x1a, 0xbe, 0x1a, 0xc5, 0x1a, 0xd5, 0x1b, 0x8f, 0x1b, 0xd5, 0x1a, 0xf6, 0x19, 0x37, + 0x1c, 0x23, 0x1c, 0xfc, 0x19, 0x17, 0x1c, 0xdb, 0x1a, 0xce, 0x1a, 0x2b, 0x00, 0x18, 0x1d, 0xe4, + 0x18, 0xe4, 0x19, 0x5a, 0x15, 0x7f, 0x1a, 0x51, 0x1a, 0x63, 0x1a, 0x45, 0x1a, 0xcd, 0x85, 0x1b, + 0x78, 0x32, 0x1e, 0x40, 0xd9, 0xe3, 0xd9, 0xed, 0x53, 0x1c, 0x40, 0xd9, 0x7e, 0x23, 0xe5, 0xa7, + 0xf2, 0xc2, 0x19, 0x57, 0xe6, 0x60, 0x0f, 0x0f, 0x0f, 0x0f, 0xc6, 0x72, 0x6f, 0x7a, 0xe6, 0x1f, + 0x18, 0x0e, 0xfe, 0x18, 0x30, 0x08, 0xd9, 0x01, 0xfb, 0xff, 0x54, 0x5d, 0x09, 0xd9, 0x07, 0x6f, + 0x11, 0x23, 0x19, 0x26, 0x00, 0x19, 0x5e, 0x23, 0x56, 0x21, 0xa7, 0x19, 0xe3, 0xd5, 0xd9, 0xed, + 0x4b, 0x1d, 0x40, 0xc9, 0xf1, 0x3a, 0x1e, 0x40, 0xd9, 0x18, 0xc3, 0xd5, 0xe5, 0x01, 0x05, 0x00, + 0xcd, 0xc5, 0x0e, 0xe1, 0xd1, 0xc9, 0xcd, 0xeb, 0x19, 0xed, 0xb0, 0xc9, 0x62, 0x6b, 0xcd, 0xeb, + 0x19, 0xd9, 0xe5, 0xd9, 0xe3, 0xc5, 0x7e, 0xe6, 0xc0, 0x07, 0x07, 0x4f, 0x0c, 0x7e, 0xe6, 0x3f, + 0x20, 0x02, 0x23, 0x7e, 0xc6, 0x50, 0x12, 0x3e, 0x05, 0x91, 0x23, 0x13, 0x06, 0x00, 0xed, 0xb0, + 0xc1, 0xe3, 0xd9, 0xe1, 0xd9, 0x47, 0xaf, 0x05, 0xc8, 0x12, 0x13, 0x18, 0xfa, 0xa7, 0xc8, 0xf5, + 0xd5, 0x11, 0x00, 0x00, 0xcd, 0xfe, 0x19, 0xd1, 0xf1, 0x3d, 0x18, 0xf2, 0x4f, 0x07, 0x07, 0x81, + 0x4f, 0x06, 0x00, 0x09, 0xc9, 0xd5, 0x2a, 0x1f, 0x40, 0xcd, 0x3c, 0x1a, 0xcd, 0xf6, 0x19, 0xe1, + 0xc9, 0x62, 0x6b, 0xd9, 0xe5, 0x21, 0x15, 0x19, 0xd9, 0xcd, 0x2d, 0x1a, 0xcd, 0xfe, 0x19, 0xd9, + 0xe1, 0xd9, 0xc9, 0xe5, 0xeb, 0x2a, 0x1f, 0x40, 0xcd, 0x3c, 0x1a, 0xeb, 0xcd, 0xf6, 0x19, 0xeb, + 0xe1, 0xc9, 0x06, 0x05, 0x1a, 0x4e, 0xeb, 0x12, 0x71, 0x23, 0x13, 0x10, 0xf7, 0xeb, 0xc9, 0x47, + 0xcd, 0xa0, 0x19, 0x2d, 0x0f, 0xc0, 0x02, 0xa0, 0xc2, 0x2d, 0xe0, 0x04, 0xe2, 0xc1, 0x03, 0x34, + 0xcd, 0xfc, 0x19, 0xcd, 0xa4, 0x19, 0x0f, 0x01, 0xc2, 0x02, 0x31, 0xee, 0xe1, 0x03, 0x34, 0xc9, + 0x7e, 0xa7, 0xc8, 0x23, 0x7e, 0xee, 0x80, 0x77, 0x2b, 0xc9, 0x23, 0xcb, 0xbe, 0x2b, 0xc9, 0x23, + 0x7e, 0x2b, 0x35, 0x34, 0x37, 0xc4, 0xe0, 0x1a, 0x23, 0x07, 0xcb, 0x1e, 0x2b, 0xc9, 0xcd, 0xa7, + 0x0e, 0x0a, 0xc3, 0x1d, 0x15, 0xcd, 0xa7, 0x0e, 0x21, 0x20, 0x15, 0xe5, 0xc5, 0xc9, 0x7e, 0xa7, + 0xc8, 0x3e, 0xff, 0x18, 0x07, 0x7e, 0xed, 0x44, 0x3f, 0x18, 0x05, 0xaf, 0x23, 0xae, 0x2b, 0x07, + 0xe5, 0x06, 0x05, 0x36, 0x00, 0x23, 0x10, 0xfb, 0xe1, 0xd0, 0x36, 0x81, 0xc9, 0x1a, 0xa7, 0xc8, + 0x37, 0x18, 0xed, 0x1a, 0xa7, 0xc0, 0x18, 0xe8, 0x1a, 0xa7, 0xc0, 0xd5, 0x1b, 0xaf, 0x12, 0x1b, + 0x12, 0xd1, 0xc9, 0x78, 0xd6, 0x08, 0xcb, 0x57, 0x20, 0x01, 0x3d, 0x0f, 0x30, 0x08, 0xf5, 0xe5, + 0xcd, 0x72, 0x1a, 0xd1, 0xeb, 0xf1, 0xcb, 0x57, 0x20, 0x07, 0x0f, 0xf5, 0xcd, 0x4c, 0x17, 0x18, + 0x33, 0x0f, 0xf5, 0xcd, 0xf8, 0x13, 0xd5, 0xc5, 0xcd, 0xf8, 0x13, 0xe1, 0x7c, 0xb5, 0xe3, 0x78, + 0x20, 0x0b, 0xb1, 0xc1, 0x28, 0x04, 0xf1, 0x3f, 0x18, 0x16, 0xf1, 0x18, 0x13, 0xb1, 0x28, 0x0d, + 0x1a, 0x96, 0x38, 0x09, 0x20, 0xed, 0x0b, 0x13, 0x23, 0xe3, 0x2b, 0x18, 0xdf, 0xc1, 0xf1, 0xa7, + 0xf5, 0xef, 0xa0, 0x34, 0xf1, 0xf5, 0xdc, 0xd5, 0x1a, 0xcd, 0xce, 0x1a, 0xf1, 0x0f, 0xd4, 0xd5, + 0x1a, 0xc9, 0xcd, 0xf8, 0x13, 0xd5, 0xc5, 0xcd, 0xf8, 0x13, 0xe1, 0xe5, 0xd5, 0xc5, 0x09, 0x44, + 0x4d, 0xf7, 0xcd, 0xc3, 0x12, 0xc1, 0xe1, 0x78, 0xb1, 0x28, 0x02, 0xed, 0xb0, 0xc1, 0xe1, 0x78, + 0xb1, 0x28, 0x02, 0xed, 0xb0, 0x2a, 0x1c, 0x40, 0x11, 0xfb, 0xff, 0xe5, 0x19, 0xd1, 0xc9, 0xcd, + 0xcd, 0x15, 0x38, 0x0e, 0x20, 0x0c, 0xf5, 0x01, 0x01, 0x00, 0xf7, 0xf1, 0x12, 0xcd, 0xc3, 0x12, + 0xeb, 0xc9, 0xcf, 0x0a, 0x2a, 0x16, 0x40, 0xe5, 0xcd, 0xf8, 0x13, 0xd5, 0x03, 0xf7, 0xe1, 0xed, + 0x53, 0x16, 0x40, 0xd5, 0xed, 0xb0, 0xeb, 0x2b, 0x36, 0x76, 0xfd, 0xcb, 0x01, 0xbe, 0xcd, 0x92, + 0x0d, 0xcd, 0x22, 0x0d, 0xe1, 0x22, 0x16, 0x40, 0xfd, 0xcb, 0x01, 0xfe, 0xcd, 0x55, 0x0f, 0xe1, + 0x22, 0x16, 0x40, 0x18, 0xb0, 0x01, 0x01, 0x00, 0xf7, 0x36, 0x76, 0x2a, 0x39, 0x40, 0xe5, 0x2e, + 0xff, 0x22, 0x39, 0x40, 0x2a, 0x0e, 0x40, 0xe5, 0xed, 0x53, 0x0e, 0x40, 0xd5, 0xcd, 0xdb, 0x15, + 0xd1, 0x2a, 0x0e, 0x40, 0xa7, 0xed, 0x52, 0x44, 0x4d, 0xe1, 0x22, 0x0e, 0x40, 0xe1, 0x22, 0x39, + 0x40, 0xcd, 0xc3, 0x12, 0xeb, 0xc9, 0xcd, 0xf8, 0x13, 0x78, 0xb1, 0x28, 0x01, 0x1a, 0xc3, 0x1d, + 0x15, 0xcd, 0xf8, 0x13, 0xc3, 0x20, 0x15, 0xd9, 0xe5, 0x21, 0x1e, 0x40, 0x35, 0xe1, 0x20, 0x04, + 0x23, 0xd9, 0xc9, 0xd9, 0x5e, 0xaf, 0xcb, 0x7b, 0x28, 0x01, 0x2f, 0x57, 0x19, 0xd9, 0xc9, 0x1a, + 0xa7, 0x20, 0xf0, 0xd9, 0x23, 0xd9, 0xc9, 0xef, 0xc0, 0x02, 0x2d, 0xe0, 0x05, 0x24, 0xe0, 0x01, + 0xc0, 0x04, 0x03, 0xe0, 0x34, 0xc9, 0xef, 0x2d, 0x32, 0x00, 0x04, 0x36, 0x34, 0xc9, 0x2d, 0x36, + 0xc0, 0x03, 0xe0, 0x01, 0x2c, 0x00, 0x03, 0xa1, 0x03, 0x34, 0xc9, 0xef, 0x30, 0xf1, 0x38, 0xaa, + 0x3b, 0x29, 0x04, 0x2d, 0x24, 0xc3, 0x03, 0x2d, 0x0f, 0xa1, 0x03, 0x88, 0x13, 0x36, 0x58, 0x65, + 0x66, 0x9d, 0x78, 0x65, 0x40, 0xa2, 0x60, 0x32, 0xc9, 0xe7, 0x21, 0xf7, 0xaf, 0x24, 0xeb, 0x2f, + 0xb0, 0xb0, 0x14, 0xee, 0x7e, 0xbb, 0x94, 0x58, 0xf1, 0x3a, 0x7e, 0xf8, 0xcf, 0xe3, 0x34, 0xcd, + 0xcd, 0x15, 0x20, 0x07, 0x38, 0x03, 0x86, 0x30, 0x09, 0xcf, 0x05, 0x38, 0x07, 0x96, 0x30, 0x04, + 0xed, 0x44, 0x77, 0xc9, 0xef, 0x02, 0xa0, 0x34, 0xc9, 0xef, 0x2d, 0x33, 0x00, 0x04, 0x34, 0xcf, + 0x09, 0xa0, 0x02, 0x34, 0x7e, 0x36, 0x80, 0xcd, 0x1d, 0x15, 0xef, 0x30, 0x38, 0x00, 0x03, 0x01, + 0x2d, 0x30, 0xf0, 0x4c, 0xcc, 0xcc, 0xcd, 0x03, 0x33, 0x00, 0x08, 0x01, 0xa1, 0x03, 0x01, 0x34, + 0x34, 0xef, 0x01, 0x30, 0xf0, 0x31, 0x72, 0x17, 0xf8, 0x04, 0x01, 0xa2, 0x03, 0xa2, 0x03, 0x2d, + 0x30, 0x32, 0x20, 0x04, 0xa2, 0x03, 0x8c, 0x11, 0xac, 0x14, 0x09, 0x56, 0xda, 0xa5, 0x59, 0x30, + 0xc5, 0x5c, 0x90, 0xaa, 0x9e, 0x70, 0x6f, 0x61, 0xa1, 0xcb, 0xda, 0x96, 0xa4, 0x31, 0x9f, 0xb4, + 0xe7, 0xa0, 0xfe, 0x5c, 0xfc, 0xea, 0x1b, 0x43, 0xca, 0x36, 0xed, 0xa7, 0x9c, 0x7e, 0x5e, 0xf0, + 0x6e, 0x23, 0x80, 0x93, 0x04, 0x0f, 0x34, 0xc9, 0xef, 0x30, 0xee, 0x22, 0xf9, 0x83, 0x6e, 0x04, + 0x2d, 0xa2, 0x0f, 0x24, 0x03, 0x2d, 0x0f, 0x2d, 0x0f, 0x2d, 0x27, 0xa1, 0x03, 0x2d, 0x33, 0xc0, + 0x00, 0x04, 0x02, 0x34, 0xc9, 0xa1, 0x03, 0x01, 0x32, 0x00, 0x02, 0x18, 0x34, 0xc9, 0xef, 0x35, + 0x27, 0xa1, 0x03, 0xe0, 0x00, 0x06, 0x18, 0x2f, 0x03, 0xef, 0x35, 0x2d, 0x2d, 0x04, 0x2d, 0x0f, + 0xa1, 0x03, 0x86, 0x14, 0xe6, 0x5c, 0x1f, 0x0b, 0xa3, 0x8f, 0x38, 0xee, 0xe9, 0x15, 0x63, 0xbb, + 0x23, 0xee, 0x92, 0x0d, 0xcd, 0xed, 0xf1, 0x23, 0x5d, 0x1b, 0xea, 0x04, 0x34, 0xc9, 0xef, 0x2d, + 0x1c, 0x01, 0x1d, 0x05, 0x34, 0xc9, 0x7e, 0xfe, 0x81, 0x38, 0x0e, 0xef, 0xa1, 0x18, 0x01, 0x05, + 0x2d, 0x32, 0xa3, 0x01, 0x00, 0x06, 0x18, 0x2f, 0x03, 0xef, 0xa0, 0x01, 0x2d, 0x2d, 0x04, 0x2d, + 0x0f, 0xa1, 0x03, 0x8c, 0x10, 0xb2, 0x13, 0x0e, 0x55, 0xe4, 0x8d, 0x58, 0x39, 0xbc, 0x5b, 0x98, + 0xfd, 0x9e, 0x00, 0x36, 0x75, 0xa0, 0xdb, 0xe8, 0xb4, 0x63, 0x42, 0xc4, 0xe6, 0xb5, 0x09, 0x36, + 0xbe, 0xe9, 0x36, 0x73, 0x1b, 0x5d, 0xec, 0xd8, 0xde, 0x63, 0xbe, 0xf0, 0x61, 0xa1, 0xb3, 0x0c, + 0x04, 0x0f, 0x34, 0xc9, 0xef, 0x2d, 0x2d, 0x04, 0xa1, 0x03, 0x18, 0x25, 0xa1, 0x0f, 0x05, 0x21, + 0x2d, 0x0f, 0x34, 0xc9, 0xef, 0x1f, 0xa3, 0x03, 0x18, 0x34, 0xc9, 0xef, 0x2d, 0x2c, 0x00, 0x1e, + 0xa2, 0x34, 0xef, 0x01, 0x2d, 0x2c, 0x00, 0x07, 0x22, 0x04, 0x34, 0xc3, 0x5b, 0x1c, 0x02, 0x2d, + 0x2c, 0x00, 0x09, 0xa0, 0x01, 0x33, 0x00, 0x06, 0xa1, 0x01, 0x05, 0x02, 0xa1, 0x34, 0xc9, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, + 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x55, 0xaa, 0x55, + 0xaa, 0x55, 0xaa, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x22, 0x78, 0x20, 0x20, 0x7e, 0x00, 0x00, 0x08, 0x3e, 0x28, 0x3e, 0x0a, 0x3e, 0x08, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x3c, 0x42, 0x04, 0x08, 0x00, 0x08, 0x00, + 0x00, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x00, 0x00, 0x20, 0x10, 0x10, 0x10, 0x10, 0x20, 0x00, + 0x00, 0x00, 0x10, 0x08, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00, 0x04, 0x08, 0x10, 0x08, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x3e, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x3e, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x08, 0x3e, 0x08, 0x14, 0x00, + 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x3c, 0x46, 0x4a, 0x52, 0x62, 0x3c, 0x00, 0x00, 0x18, 0x28, 0x08, 0x08, 0x08, 0x3e, 0x00, + 0x00, 0x3c, 0x42, 0x02, 0x3c, 0x40, 0x7e, 0x00, 0x00, 0x3c, 0x42, 0x0c, 0x02, 0x42, 0x3c, 0x00, + 0x00, 0x08, 0x18, 0x28, 0x48, 0x7e, 0x08, 0x00, 0x00, 0x7e, 0x40, 0x7c, 0x02, 0x42, 0x3c, 0x00, + 0x00, 0x3c, 0x40, 0x7c, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x7e, 0x02, 0x04, 0x08, 0x10, 0x10, 0x00, + 0x00, 0x3c, 0x42, 0x3c, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x3e, 0x02, 0x3c, 0x00, + 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x00, 0x00, 0x7c, 0x42, 0x7c, 0x42, 0x42, 0x7c, 0x00, + 0x00, 0x3c, 0x42, 0x40, 0x40, 0x42, 0x3c, 0x00, 0x00, 0x78, 0x44, 0x42, 0x42, 0x44, 0x78, 0x00, + 0x00, 0x7e, 0x40, 0x7c, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x7e, 0x40, 0x7c, 0x40, 0x40, 0x40, 0x00, + 0x00, 0x3c, 0x42, 0x40, 0x4e, 0x42, 0x3c, 0x00, 0x00, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x00, + 0x00, 0x3e, 0x08, 0x08, 0x08, 0x08, 0x3e, 0x00, 0x00, 0x02, 0x02, 0x02, 0x42, 0x42, 0x3c, 0x00, + 0x00, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7e, 0x00, + 0x00, 0x42, 0x66, 0x5a, 0x42, 0x42, 0x42, 0x00, 0x00, 0x42, 0x62, 0x52, 0x4a, 0x46, 0x42, 0x00, + 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x7c, 0x42, 0x42, 0x7c, 0x40, 0x40, 0x00, + 0x00, 0x3c, 0x42, 0x42, 0x52, 0x4a, 0x3c, 0x00, 0x00, 0x7c, 0x42, 0x42, 0x7c, 0x44, 0x42, 0x00, + 0x00, 0x3c, 0x40, 0x3c, 0x02, 0x42, 0x3c, 0x00, 0x00, 0xfe, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, + 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, + 0x00, 0x42, 0x42, 0x42, 0x42, 0x5a, 0x24, 0x00, 0x00, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x00, + 0x00, 0x82, 0x44, 0x28, 0x10, 0x10, 0x10, 0x00, 0x00, 0x7e, 0x04, 0x08, 0x10, 0x20, 0x7e, 0x00, +}; + diff --git a/MCUME_pico/pico_sdk_import.cmake b/MCUME_pico/pico_sdk_import.cmake new file mode 100644 index 0000000..28efe9e --- /dev/null +++ b/MCUME_pico/pico_sdk_import.cmake @@ -0,0 +1,62 @@ +# This is a copy of /external/pico_sdk_import.cmake + +# This can be dropped into an external project to help locate this SDK +# It should be include()ed prior to project() + +if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH)) + set(PICO_SDK_PATH $ENV{PICO_SDK_PATH}) + message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')") +endif () + +if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT)) + set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT}) + message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')") +endif () + +if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH)) + set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH}) + message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')") +endif () + +set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK") +set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable") +set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK") + +if (NOT PICO_SDK_PATH) + if (PICO_SDK_FETCH_FROM_GIT) + include(FetchContent) + set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR}) + if (PICO_SDK_FETCH_FROM_GIT_PATH) + get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}") + endif () + FetchContent_Declare( + pico_sdk + GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk + GIT_TAG master + ) + if (NOT pico_sdk) + message("Downloading Raspberry Pi Pico SDK") + FetchContent_Populate(pico_sdk) + set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR}) + endif () + set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE}) + else () + message(FATAL_ERROR + "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git." + ) + endif () +endif () + +get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") +if (NOT EXISTS ${PICO_SDK_PATH}) + message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found") +endif () + +set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake) +if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE}) + message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK") +endif () + +set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE) + +include(${PICO_SDK_INIT_CMAKE_FILE}) diff --git a/MCUME_pico/picocolem/.DS_Store b/MCUME_pico/picocolem/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/MCUME_pico/picocolem/.DS_Store differ diff --git a/MCUME_pico/picocolem/AudioPlaySystem.cpp b/MCUME_pico/picocolem/AudioPlaySystem.cpp new file mode 100644 index 0000000..36b764d --- /dev/null +++ b/MCUME_pico/picocolem/AudioPlaySystem.cpp @@ -0,0 +1,179 @@ +#include "emuapi.h" + +#ifdef HAS_SND + +#include "AudioPlaySystem.h" + +#define SAMPLERATE AUDIO_SAMPLE_RATE_EXACT +#define CLOCKFREQ 985248 + +#ifndef CUSTOM_SND +static const short square[]={ +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +}; + +const short noise[] { +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,-32767,-32767, +32767,-32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +}; + +#define NOISEBSIZE 0x100 + +typedef struct +{ + unsigned int spos; + unsigned int sinc; + unsigned int vol; +} Channel; + +static Channel chan[6] = { + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0} }; + +#endif + +volatile bool playing = false; + + +static void snd_Reset(void) +{ +#ifndef CUSTOM_SND + chan[0].vol = 0; + chan[1].vol = 0; + chan[2].vol = 0; + chan[3].vol = 0; + chan[4].vol = 0; + chan[5].vol = 0; + chan[0].sinc = 0; + chan[1].sinc = 0; + chan[2].sinc = 0; + chan[3].sinc = 0; + chan[4].sinc = 0; + chan[5].sinc = 0; +#endif +} + + +#ifdef CUSTOM_SND +extern "C" { +void SND_Process(void *sndbuffer, int sndn); +} +#endif + +#include +void AudioPlaySystem::snd_Mixer(short * stream, int len ) +{ + if (playing) + { +#ifdef CUSTOM_SND + //printf("s\n"); + SND_Process((void*)stream, len); +#else + int i; + long s; + len = len >> 1; + short v0=chan[0].vol; + short v1=chan[1].vol; + short v2=chan[2].vol; + short v3=chan[3].vol; + short v4=chan[4].vol; + short v5=chan[5].vol; + for (i=0;i>8)&0x3f])>>11); + s+=((v1*square[(chan[1].spos>>8)&0x3f])>>11); + s+=((v2*square[(chan[2].spos>>8)&0x3f])>>11); + s+=((v3*noise[(chan[3].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v4*noise[(chan[4].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v5*noise[(chan[5].spos>>8)&(NOISEBSIZE-1)])>>11); + *stream++ = (short)(s); + *stream++ = (short)(s); + chan[0].spos += chan[0].sinc; + chan[1].spos += chan[1].sinc; + chan[2].spos += chan[2].sinc; + chan[3].spos += chan[3].sinc; + chan[4].spos += chan[4].sinc; + chan[5].spos += chan[5].sinc; + } +#endif + } +} + +void AudioPlaySystem::begin(void) +{ + this->reset(); +} + +void AudioPlaySystem::start(void) +{ + playing = true; +} + +void AudioPlaySystem::setSampleParameters(float clockfreq, float samplerate) { +} + +void AudioPlaySystem::reset(void) +{ + snd_Reset(); +} + +void AudioPlaySystem::stop(void) +{ + playing = false; +} + +bool AudioPlaySystem::isPlaying(void) +{ + return playing; +} + + + +void AudioPlaySystem::sound(int C, int F, int V) { +#ifndef CUSTOM_SND + if (C < 6) { + chan[C].vol = V; + chan[C].sinc = F>>1; + } +#endif +} + +void AudioPlaySystem::step(void) { +} + +void AudioPlaySystem::buzz(int size, int val) { +} +#endif diff --git a/MCUME_pico/picocolem/AudioPlaySystem.h b/MCUME_pico/picocolem/AudioPlaySystem.h new file mode 100644 index 0000000..5d2efc0 --- /dev/null +++ b/MCUME_pico/picocolem/AudioPlaySystem.h @@ -0,0 +1,26 @@ +#ifndef audioplaysystem_h_ +#define audioplaysystem_h_ + +#ifdef HAS_SND + +#include "platform_config.h" + +class AudioPlaySystem +{ +public: + AudioPlaySystem(void) { }; + void begin(void); + void setSampleParameters(float clockfreq, float samplerate); + void reset(void); + void start(void); + void stop(void); + bool isPlaying(void); + void sound(int C, int F, int V); + void buzz(int size, int val); + void step(void); + static void snd_Mixer(short * stream, int len ); +}; + +#endif + +#endif diff --git a/MCUME_pico/picocolem/Codes.h b/MCUME_pico/picocolem/Codes.h new file mode 100644 index 0000000..28f1d1b --- /dev/null +++ b/MCUME_pico/picocolem/Codes.h @@ -0,0 +1,378 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** Codes.h **/ +/** **/ +/** This file contains implementation for the main table of **/ +/** Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-1998 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +case JR_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W++; else { R->ICount-=5;M_JR; } break; +case JR_NC: if(R->AF.B.l&C_FLAG) R->PC.W++; else { R->ICount-=5;M_JR; } break; +case JR_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=5;M_JR; } else R->PC.W++; break; +case JR_C: if(R->AF.B.l&C_FLAG) { R->ICount-=5;M_JR; } else R->PC.W++; break; + +case JP_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_Z: if(R->AF.B.l&Z_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_C: if(R->AF.B.l&C_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_PE: if(R->AF.B.l&P_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_M: if(R->AF.B.l&S_FLAG) { M_JP; } else R->PC.W+=2; break; + +case RET_NZ: if(!(R->AF.B.l&Z_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_NC: if(!(R->AF.B.l&C_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_PO: if(!(R->AF.B.l&P_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_P: if(!(R->AF.B.l&S_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=6;M_RET; } break; +case RET_C: if(R->AF.B.l&C_FLAG) { R->ICount-=6;M_RET; } break; +case RET_PE: if(R->AF.B.l&P_FLAG) { R->ICount-=6;M_RET; } break; +case RET_M: if(R->AF.B.l&S_FLAG) { R->ICount-=6;M_RET; } break; + +case CALL_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_C: if(R->AF.B.l&C_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_PE: if(R->AF.B.l&P_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_M: if(R->AF.B.l&S_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; + +case ADD_B: M_ADD(R->BC.B.h);break; +case ADD_C: M_ADD(R->BC.B.l);break; +case ADD_D: M_ADD(R->DE.B.h);break; +case ADD_E: M_ADD(R->DE.B.l);break; +case ADD_H: M_ADD(R->HL.B.h);break; +case ADD_L: M_ADD(R->HL.B.l);break; +case ADD_A: M_ADD(R->AF.B.h);break; +case ADD_xHL: I=RdZ80(R->HL.W);M_ADD(I);break; +case ADD_BYTE: I=RdZ80(R->PC.W++);M_ADD(I);break; + +case SUB_B: M_SUB(R->BC.B.h);break; +case SUB_C: M_SUB(R->BC.B.l);break; +case SUB_D: M_SUB(R->DE.B.h);break; +case SUB_E: M_SUB(R->DE.B.l);break; +case SUB_H: M_SUB(R->HL.B.h);break; +case SUB_L: M_SUB(R->HL.B.l);break; +case SUB_A: R->AF.B.h=0;R->AF.B.l=N_FLAG|Z_FLAG;break; +case SUB_xHL: I=RdZ80(R->HL.W);M_SUB(I);break; +case SUB_BYTE: I=RdZ80(R->PC.W++);M_SUB(I);break; + +case AND_B: M_AND(R->BC.B.h);break; +case AND_C: M_AND(R->BC.B.l);break; +case AND_D: M_AND(R->DE.B.h);break; +case AND_E: M_AND(R->DE.B.l);break; +case AND_H: M_AND(R->HL.B.h);break; +case AND_L: M_AND(R->HL.B.l);break; +case AND_A: M_AND(R->AF.B.h);break; +case AND_xHL: I=RdZ80(R->HL.W);M_AND(I);break; +case AND_BYTE: I=RdZ80(R->PC.W++);M_AND(I);break; + +case OR_B: M_OR(R->BC.B.h);break; +case OR_C: M_OR(R->BC.B.l);break; +case OR_D: M_OR(R->DE.B.h);break; +case OR_E: M_OR(R->DE.B.l);break; +case OR_H: M_OR(R->HL.B.h);break; +case OR_L: M_OR(R->HL.B.l);break; +case OR_A: M_OR(R->AF.B.h);break; +case OR_xHL: I=RdZ80(R->HL.W);M_OR(I);break; +case OR_BYTE: I=RdZ80(R->PC.W++);M_OR(I);break; + +case ADC_B: M_ADC(R->BC.B.h);break; +case ADC_C: M_ADC(R->BC.B.l);break; +case ADC_D: M_ADC(R->DE.B.h);break; +case ADC_E: M_ADC(R->DE.B.l);break; +case ADC_H: M_ADC(R->HL.B.h);break; +case ADC_L: M_ADC(R->HL.B.l);break; +case ADC_A: M_ADC(R->AF.B.h);break; +case ADC_xHL: I=RdZ80(R->HL.W);M_ADC(I);break; +case ADC_BYTE: I=RdZ80(R->PC.W++);M_ADC(I);break; + +case SBC_B: M_SBC(R->BC.B.h);break; +case SBC_C: M_SBC(R->BC.B.l);break; +case SBC_D: M_SBC(R->DE.B.h);break; +case SBC_E: M_SBC(R->DE.B.l);break; +case SBC_H: M_SBC(R->HL.B.h);break; +case SBC_L: M_SBC(R->HL.B.l);break; +case SBC_A: M_SBC(R->AF.B.h);break; +case SBC_xHL: I=RdZ80(R->HL.W);M_SBC(I);break; +case SBC_BYTE: I=RdZ80(R->PC.W++);M_SBC(I);break; + +case XOR_B: M_XOR(R->BC.B.h);break; +case XOR_C: M_XOR(R->BC.B.l);break; +case XOR_D: M_XOR(R->DE.B.h);break; +case XOR_E: M_XOR(R->DE.B.l);break; +case XOR_H: M_XOR(R->HL.B.h);break; +case XOR_L: M_XOR(R->HL.B.l);break; +case XOR_A: R->AF.B.h=0;R->AF.B.l=P_FLAG|Z_FLAG;break; +case XOR_xHL: I=RdZ80(R->HL.W);M_XOR(I);break; +case XOR_BYTE: I=RdZ80(R->PC.W++);M_XOR(I);break; + +case CP_B: M_CP(R->BC.B.h);break; +case CP_C: M_CP(R->BC.B.l);break; +case CP_D: M_CP(R->DE.B.h);break; +case CP_E: M_CP(R->DE.B.l);break; +case CP_H: M_CP(R->HL.B.h);break; +case CP_L: M_CP(R->HL.B.l);break; +case CP_A: R->AF.B.l=N_FLAG|Z_FLAG;break; +case CP_xHL: I=RdZ80(R->HL.W);M_CP(I);break; +case CP_BYTE: I=RdZ80(R->PC.W++);M_CP(I);break; + +case LD_BC_WORD: M_LDWORD(BC);break; +case LD_DE_WORD: M_LDWORD(DE);break; +case LD_HL_WORD: M_LDWORD(HL);break; +case LD_SP_WORD: M_LDWORD(SP);break; + +case LD_PC_HL: R->PC.W=R->HL.W;break; +case LD_SP_HL: R->SP.W=R->HL.W;break; +case LD_A_xBC: R->AF.B.h=RdZ80(R->BC.W);break; +case LD_A_xDE: R->AF.B.h=RdZ80(R->DE.W);break; + +case ADD_HL_BC: M_ADDW(HL,BC);break; +case ADD_HL_DE: M_ADDW(HL,DE);break; +case ADD_HL_HL: M_ADDW(HL,HL);break; +case ADD_HL_SP: M_ADDW(HL,SP);break; + +case DEC_BC: R->BC.W--;break; +case DEC_DE: R->DE.W--;break; +case DEC_HL: R->HL.W--;break; +case DEC_SP: R->SP.W--;break; + +case INC_BC: R->BC.W++;break; +case INC_DE: R->DE.W++;break; +case INC_HL: R->HL.W++;break; +case INC_SP: R->SP.W++;break; + +case DEC_B: M_DEC(R->BC.B.h);break; +case DEC_C: M_DEC(R->BC.B.l);break; +case DEC_D: M_DEC(R->DE.B.h);break; +case DEC_E: M_DEC(R->DE.B.l);break; +case DEC_H: M_DEC(R->HL.B.h);break; +case DEC_L: M_DEC(R->HL.B.l);break; +case DEC_A: M_DEC(R->AF.B.h);break; +case DEC_xHL: I=RdZ80(R->HL.W);M_DEC(I);WrZ80(R->HL.W,I);break; + +case INC_B: M_INC(R->BC.B.h);break; +case INC_C: M_INC(R->BC.B.l);break; +case INC_D: M_INC(R->DE.B.h);break; +case INC_E: M_INC(R->DE.B.l);break; +case INC_H: M_INC(R->HL.B.h);break; +case INC_L: M_INC(R->HL.B.l);break; +case INC_A: M_INC(R->AF.B.h);break; +case INC_xHL: I=RdZ80(R->HL.W);M_INC(I);WrZ80(R->HL.W,I);break; + +case RLCA: + I=R->AF.B.h&0x80? C_FLAG:0; + R->AF.B.h=(R->AF.B.h<<1)|I; + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RLA: + I=R->AF.B.h&0x80? C_FLAG:0; + R->AF.B.h=(R->AF.B.h<<1)|(R->AF.B.l&C_FLAG); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RRCA: + I=R->AF.B.h&0x01; + R->AF.B.h=(R->AF.B.h>>1)|(I? 0x80:0); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RRA: + I=R->AF.B.h&0x01; + R->AF.B.h=(R->AF.B.h>>1)|(R->AF.B.l&C_FLAG? 0x80:0); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; + +case RST00: M_RST(0x0000);break; +case RST08: M_RST(0x0008);break; +case RST10: M_RST(0x0010);break; +case RST18: M_RST(0x0018);break; +case RST20: M_RST(0x0020);break; +case RST28: M_RST(0x0028);break; +case RST30: M_RST(0x0030);break; +case RST38: M_RST(0x0038);break; + +case PUSH_BC: M_PUSH(BC);break; +case PUSH_DE: M_PUSH(DE);break; +case PUSH_HL: M_PUSH(HL);break; +case PUSH_AF: M_PUSH(AF);break; + +case POP_BC: M_POP(BC);break; +case POP_DE: M_POP(DE);break; +case POP_HL: M_POP(HL);break; +case POP_AF: M_POP(AF);break; + +case DJNZ: if(--R->BC.B.h) { M_JR; } else R->PC.W++;break; +case JP: M_JP;break; +case JR: M_JR;break; +case CALL: M_CALL;break; +case RET: M_RET;break; +case SCF: S(C_FLAG);R(N_FLAG|H_FLAG);break; +case CPL: R->AF.B.h=~R->AF.B.h;S(N_FLAG|H_FLAG);break; +case NOP: break; +case OUTA: OutZ80(RdZ80(R->PC.W++),R->AF.B.h);break; +case INA: R->AF.B.h=InZ80(RdZ80(R->PC.W++));break; +case HALT: R->PC.W--;R->IFF|=0x80;R->ICount=0;break; + +case DI: + R->IFF&=0xFE; + break; +case EI: + R->IFF|=0x01; + if(R->IRequest!=INT_NONE) + { + R->IFF|=0x20; + R->IBackup=R->ICount; + R->ICount=1; + } + break; + +case CCF: + R->AF.B.l^=C_FLAG;R(N_FLAG|H_FLAG); + R->AF.B.l|=R->AF.B.l&C_FLAG? 0:H_FLAG; + break; + +case EXX: + J.W=R->BC.W;R->BC.W=R->BC1.W;R->BC1.W=J.W; + J.W=R->DE.W;R->DE.W=R->DE1.W;R->DE1.W=J.W; + J.W=R->HL.W;R->HL.W=R->HL1.W;R->HL1.W=J.W; + break; + +case EX_DE_HL: J.W=R->DE.W;R->DE.W=R->HL.W;R->HL.W=J.W;break; +case EX_AF_AF: J.W=R->AF.W;R->AF.W=R->AF1.W;R->AF1.W=J.W;break; + +case LD_B_B: R->BC.B.h=R->BC.B.h;break; +case LD_C_B: R->BC.B.l=R->BC.B.h;break; +case LD_D_B: R->DE.B.h=R->BC.B.h;break; +case LD_E_B: R->DE.B.l=R->BC.B.h;break; +case LD_H_B: R->HL.B.h=R->BC.B.h;break; +case LD_L_B: R->HL.B.l=R->BC.B.h;break; +case LD_A_B: R->AF.B.h=R->BC.B.h;break; +case LD_xHL_B: WrZ80(R->HL.W,R->BC.B.h);break; + +case LD_B_C: R->BC.B.h=R->BC.B.l;break; +case LD_C_C: R->BC.B.l=R->BC.B.l;break; +case LD_D_C: R->DE.B.h=R->BC.B.l;break; +case LD_E_C: R->DE.B.l=R->BC.B.l;break; +case LD_H_C: R->HL.B.h=R->BC.B.l;break; +case LD_L_C: R->HL.B.l=R->BC.B.l;break; +case LD_A_C: R->AF.B.h=R->BC.B.l;break; +case LD_xHL_C: WrZ80(R->HL.W,R->BC.B.l);break; + +case LD_B_D: R->BC.B.h=R->DE.B.h;break; +case LD_C_D: R->BC.B.l=R->DE.B.h;break; +case LD_D_D: R->DE.B.h=R->DE.B.h;break; +case LD_E_D: R->DE.B.l=R->DE.B.h;break; +case LD_H_D: R->HL.B.h=R->DE.B.h;break; +case LD_L_D: R->HL.B.l=R->DE.B.h;break; +case LD_A_D: R->AF.B.h=R->DE.B.h;break; +case LD_xHL_D: WrZ80(R->HL.W,R->DE.B.h);break; + +case LD_B_E: R->BC.B.h=R->DE.B.l;break; +case LD_C_E: R->BC.B.l=R->DE.B.l;break; +case LD_D_E: R->DE.B.h=R->DE.B.l;break; +case LD_E_E: R->DE.B.l=R->DE.B.l;break; +case LD_H_E: R->HL.B.h=R->DE.B.l;break; +case LD_L_E: R->HL.B.l=R->DE.B.l;break; +case LD_A_E: R->AF.B.h=R->DE.B.l;break; +case LD_xHL_E: WrZ80(R->HL.W,R->DE.B.l);break; + +case LD_B_H: R->BC.B.h=R->HL.B.h;break; +case LD_C_H: R->BC.B.l=R->HL.B.h;break; +case LD_D_H: R->DE.B.h=R->HL.B.h;break; +case LD_E_H: R->DE.B.l=R->HL.B.h;break; +case LD_H_H: R->HL.B.h=R->HL.B.h;break; +case LD_L_H: R->HL.B.l=R->HL.B.h;break; +case LD_A_H: R->AF.B.h=R->HL.B.h;break; +case LD_xHL_H: WrZ80(R->HL.W,R->HL.B.h);break; + +case LD_B_L: R->BC.B.h=R->HL.B.l;break; +case LD_C_L: R->BC.B.l=R->HL.B.l;break; +case LD_D_L: R->DE.B.h=R->HL.B.l;break; +case LD_E_L: R->DE.B.l=R->HL.B.l;break; +case LD_H_L: R->HL.B.h=R->HL.B.l;break; +case LD_L_L: R->HL.B.l=R->HL.B.l;break; +case LD_A_L: R->AF.B.h=R->HL.B.l;break; +case LD_xHL_L: WrZ80(R->HL.W,R->HL.B.l);break; + +case LD_B_A: R->BC.B.h=R->AF.B.h;break; +case LD_C_A: R->BC.B.l=R->AF.B.h;break; +case LD_D_A: R->DE.B.h=R->AF.B.h;break; +case LD_E_A: R->DE.B.l=R->AF.B.h;break; +case LD_H_A: R->HL.B.h=R->AF.B.h;break; +case LD_L_A: R->HL.B.l=R->AF.B.h;break; +case LD_A_A: R->AF.B.h=R->AF.B.h;break; +case LD_xHL_A: WrZ80(R->HL.W,R->AF.B.h);break; + +case LD_xBC_A: WrZ80(R->BC.W,R->AF.B.h);break; +case LD_xDE_A: WrZ80(R->DE.W,R->AF.B.h);break; + +case LD_B_xHL: R->BC.B.h=RdZ80(R->HL.W);break; +case LD_C_xHL: R->BC.B.l=RdZ80(R->HL.W);break; +case LD_D_xHL: R->DE.B.h=RdZ80(R->HL.W);break; +case LD_E_xHL: R->DE.B.l=RdZ80(R->HL.W);break; +case LD_H_xHL: R->HL.B.h=RdZ80(R->HL.W);break; +case LD_L_xHL: R->HL.B.l=RdZ80(R->HL.W);break; +case LD_A_xHL: R->AF.B.h=RdZ80(R->HL.W);break; + +case LD_B_BYTE: R->BC.B.h=RdZ80(R->PC.W++);break; +case LD_C_BYTE: R->BC.B.l=RdZ80(R->PC.W++);break; +case LD_D_BYTE: R->DE.B.h=RdZ80(R->PC.W++);break; +case LD_E_BYTE: R->DE.B.l=RdZ80(R->PC.W++);break; +case LD_H_BYTE: R->HL.B.h=RdZ80(R->PC.W++);break; +case LD_L_BYTE: R->HL.B.l=RdZ80(R->PC.W++);break; +case LD_A_BYTE: R->AF.B.h=RdZ80(R->PC.W++);break; +case LD_xHL_BYTE: WrZ80(R->HL.W,RdZ80(R->PC.W++));break; + +case LD_xWORD_HL: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + WrZ80(J.W++,R->HL.B.l); + WrZ80(J.W,R->HL.B.h); + break; + +case LD_HL_xWORD: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + R->HL.B.l=RdZ80(J.W++); + R->HL.B.h=RdZ80(J.W); + break; + +case LD_A_xWORD: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + R->AF.B.h=RdZ80(J.W); + break; + +case LD_xWORD_A: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + WrZ80(J.W,R->AF.B.h); + break; + +case EX_HL_xSP: + J.B.l=RdZ80(R->SP.W);WrZ80(R->SP.W++,R->HL.B.l); + J.B.h=RdZ80(R->SP.W);WrZ80(R->SP.W--,R->HL.B.h); + R->HL.W=J.W; + break; + +case DAA: + J.W=R->AF.B.h; + if(R->AF.B.l&C_FLAG) J.W|=256; + if(R->AF.B.l&H_FLAG) J.W|=512; + if(R->AF.B.l&N_FLAG) J.W|=1024; + R->AF.W=DAATable[J.W]; + break; + +default: + if(R->TrapBadOps) + printf + ( + "[Z80 %lX] Unrecognized instruction: %02X at PC=%04X\n", + (long)R->User,RdZ80(R->PC.W-1),R->PC.W-1 + ); + break; diff --git a/MCUME_pico/picocolem/CodesCB.h b/MCUME_pico/picocolem/CodesCB.h new file mode 100644 index 0000000..c8a5f91 --- /dev/null +++ b/MCUME_pico/picocolem/CodesCB.h @@ -0,0 +1,204 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** CodesCB.h **/ +/** **/ +/** This file contains implementation for the CB table of **/ +/** Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-1998 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +case RLC_B: M_RLC(R->BC.B.h);break; case RLC_C: M_RLC(R->BC.B.l);break; +case RLC_D: M_RLC(R->DE.B.h);break; case RLC_E: M_RLC(R->DE.B.l);break; +case RLC_H: M_RLC(R->HL.B.h);break; case RLC_L: M_RLC(R->HL.B.l);break; +case RLC_xHL: I=RdZ80(R->HL.W);M_RLC(I);WrZ80(R->HL.W,I);break; +case RLC_A: M_RLC(R->AF.B.h);break; + +case RRC_B: M_RRC(R->BC.B.h);break; case RRC_C: M_RRC(R->BC.B.l);break; +case RRC_D: M_RRC(R->DE.B.h);break; case RRC_E: M_RRC(R->DE.B.l);break; +case RRC_H: M_RRC(R->HL.B.h);break; case RRC_L: M_RRC(R->HL.B.l);break; +case RRC_xHL: I=RdZ80(R->HL.W);M_RRC(I);WrZ80(R->HL.W,I);break; +case RRC_A: M_RRC(R->AF.B.h);break; + +case RL_B: M_RL(R->BC.B.h);break; case RL_C: M_RL(R->BC.B.l);break; +case RL_D: M_RL(R->DE.B.h);break; case RL_E: M_RL(R->DE.B.l);break; +case RL_H: M_RL(R->HL.B.h);break; case RL_L: M_RL(R->HL.B.l);break; +case RL_xHL: I=RdZ80(R->HL.W);M_RL(I);WrZ80(R->HL.W,I);break; +case RL_A: M_RL(R->AF.B.h);break; + +case RR_B: M_RR(R->BC.B.h);break; case RR_C: M_RR(R->BC.B.l);break; +case RR_D: M_RR(R->DE.B.h);break; case RR_E: M_RR(R->DE.B.l);break; +case RR_H: M_RR(R->HL.B.h);break; case RR_L: M_RR(R->HL.B.l);break; +case RR_xHL: I=RdZ80(R->HL.W);M_RR(I);WrZ80(R->HL.W,I);break; +case RR_A: M_RR(R->AF.B.h);break; + +case SLA_B: M_SLA(R->BC.B.h);break; case SLA_C: M_SLA(R->BC.B.l);break; +case SLA_D: M_SLA(R->DE.B.h);break; case SLA_E: M_SLA(R->DE.B.l);break; +case SLA_H: M_SLA(R->HL.B.h);break; case SLA_L: M_SLA(R->HL.B.l);break; +case SLA_xHL: I=RdZ80(R->HL.W);M_SLA(I);WrZ80(R->HL.W,I);break; +case SLA_A: M_SLA(R->AF.B.h);break; + +case SRA_B: M_SRA(R->BC.B.h);break; case SRA_C: M_SRA(R->BC.B.l);break; +case SRA_D: M_SRA(R->DE.B.h);break; case SRA_E: M_SRA(R->DE.B.l);break; +case SRA_H: M_SRA(R->HL.B.h);break; case SRA_L: M_SRA(R->HL.B.l);break; +case SRA_xHL: I=RdZ80(R->HL.W);M_SRA(I);WrZ80(R->HL.W,I);break; +case SRA_A: M_SRA(R->AF.B.h);break; + +case SLL_B: M_SLL(R->BC.B.h);break; case SLL_C: M_SLL(R->BC.B.l);break; +case SLL_D: M_SLL(R->DE.B.h);break; case SLL_E: M_SLL(R->DE.B.l);break; +case SLL_H: M_SLL(R->HL.B.h);break; case SLL_L: M_SLL(R->HL.B.l);break; +case SLL_xHL: I=RdZ80(R->HL.W);M_SLL(I);WrZ80(R->HL.W,I);break; +case SLL_A: M_SLL(R->AF.B.h);break; + +case SRL_B: M_SRL(R->BC.B.h);break; case SRL_C: M_SRL(R->BC.B.l);break; +case SRL_D: M_SRL(R->DE.B.h);break; case SRL_E: M_SRL(R->DE.B.l);break; +case SRL_H: M_SRL(R->HL.B.h);break; case SRL_L: M_SRL(R->HL.B.l);break; +case SRL_xHL: I=RdZ80(R->HL.W);M_SRL(I);WrZ80(R->HL.W,I);break; +case SRL_A: M_SRL(R->AF.B.h);break; + +case BIT0_B: M_BIT(0,R->BC.B.h);break; case BIT0_C: M_BIT(0,R->BC.B.l);break; +case BIT0_D: M_BIT(0,R->DE.B.h);break; case BIT0_E: M_BIT(0,R->DE.B.l);break; +case BIT0_H: M_BIT(0,R->HL.B.h);break; case BIT0_L: M_BIT(0,R->HL.B.l);break; +case BIT0_xHL: I=RdZ80(R->HL.W);M_BIT(0,I);break; +case BIT0_A: M_BIT(0,R->AF.B.h);break; + +case BIT1_B: M_BIT(1,R->BC.B.h);break; case BIT1_C: M_BIT(1,R->BC.B.l);break; +case BIT1_D: M_BIT(1,R->DE.B.h);break; case BIT1_E: M_BIT(1,R->DE.B.l);break; +case BIT1_H: M_BIT(1,R->HL.B.h);break; case BIT1_L: M_BIT(1,R->HL.B.l);break; +case BIT1_xHL: I=RdZ80(R->HL.W);M_BIT(1,I);break; +case BIT1_A: M_BIT(1,R->AF.B.h);break; + +case BIT2_B: M_BIT(2,R->BC.B.h);break; case BIT2_C: M_BIT(2,R->BC.B.l);break; +case BIT2_D: M_BIT(2,R->DE.B.h);break; case BIT2_E: M_BIT(2,R->DE.B.l);break; +case BIT2_H: M_BIT(2,R->HL.B.h);break; case BIT2_L: M_BIT(2,R->HL.B.l);break; +case BIT2_xHL: I=RdZ80(R->HL.W);M_BIT(2,I);break; +case BIT2_A: M_BIT(2,R->AF.B.h);break; + +case BIT3_B: M_BIT(3,R->BC.B.h);break; case BIT3_C: M_BIT(3,R->BC.B.l);break; +case BIT3_D: M_BIT(3,R->DE.B.h);break; case BIT3_E: M_BIT(3,R->DE.B.l);break; +case BIT3_H: M_BIT(3,R->HL.B.h);break; case BIT3_L: M_BIT(3,R->HL.B.l);break; +case BIT3_xHL: I=RdZ80(R->HL.W);M_BIT(3,I);break; +case BIT3_A: M_BIT(3,R->AF.B.h);break; + +case BIT4_B: M_BIT(4,R->BC.B.h);break; case BIT4_C: M_BIT(4,R->BC.B.l);break; +case BIT4_D: M_BIT(4,R->DE.B.h);break; case BIT4_E: M_BIT(4,R->DE.B.l);break; +case BIT4_H: M_BIT(4,R->HL.B.h);break; case BIT4_L: M_BIT(4,R->HL.B.l);break; +case BIT4_xHL: I=RdZ80(R->HL.W);M_BIT(4,I);break; +case BIT4_A: M_BIT(4,R->AF.B.h);break; + +case BIT5_B: M_BIT(5,R->BC.B.h);break; case BIT5_C: M_BIT(5,R->BC.B.l);break; +case BIT5_D: M_BIT(5,R->DE.B.h);break; case BIT5_E: M_BIT(5,R->DE.B.l);break; +case BIT5_H: M_BIT(5,R->HL.B.h);break; case BIT5_L: M_BIT(5,R->HL.B.l);break; +case BIT5_xHL: I=RdZ80(R->HL.W);M_BIT(5,I);break; +case BIT5_A: M_BIT(5,R->AF.B.h);break; + +case BIT6_B: M_BIT(6,R->BC.B.h);break; case BIT6_C: M_BIT(6,R->BC.B.l);break; +case BIT6_D: M_BIT(6,R->DE.B.h);break; case BIT6_E: M_BIT(6,R->DE.B.l);break; +case BIT6_H: M_BIT(6,R->HL.B.h);break; case BIT6_L: M_BIT(6,R->HL.B.l);break; +case BIT6_xHL: I=RdZ80(R->HL.W);M_BIT(6,I);break; +case BIT6_A: M_BIT(6,R->AF.B.h);break; + +case BIT7_B: M_BIT(7,R->BC.B.h);break; case BIT7_C: M_BIT(7,R->BC.B.l);break; +case BIT7_D: M_BIT(7,R->DE.B.h);break; case BIT7_E: M_BIT(7,R->DE.B.l);break; +case BIT7_H: M_BIT(7,R->HL.B.h);break; case BIT7_L: M_BIT(7,R->HL.B.l);break; +case BIT7_xHL: I=RdZ80(R->HL.W);M_BIT(7,I);break; +case BIT7_A: M_BIT(7,R->AF.B.h);break; + +case RES0_B: M_RES(0,R->BC.B.h);break; case RES0_C: M_RES(0,R->BC.B.l);break; +case RES0_D: M_RES(0,R->DE.B.h);break; case RES0_E: M_RES(0,R->DE.B.l);break; +case RES0_H: M_RES(0,R->HL.B.h);break; case RES0_L: M_RES(0,R->HL.B.l);break; +case RES0_xHL: I=RdZ80(R->HL.W);M_RES(0,I);WrZ80(R->HL.W,I);break; +case RES0_A: M_RES(0,R->AF.B.h);break; + +case RES1_B: M_RES(1,R->BC.B.h);break; case RES1_C: M_RES(1,R->BC.B.l);break; +case RES1_D: M_RES(1,R->DE.B.h);break; case RES1_E: M_RES(1,R->DE.B.l);break; +case RES1_H: M_RES(1,R->HL.B.h);break; case RES1_L: M_RES(1,R->HL.B.l);break; +case RES1_xHL: I=RdZ80(R->HL.W);M_RES(1,I);WrZ80(R->HL.W,I);break; +case RES1_A: M_RES(1,R->AF.B.h);break; + +case RES2_B: M_RES(2,R->BC.B.h);break; case RES2_C: M_RES(2,R->BC.B.l);break; +case RES2_D: M_RES(2,R->DE.B.h);break; case RES2_E: M_RES(2,R->DE.B.l);break; +case RES2_H: M_RES(2,R->HL.B.h);break; case RES2_L: M_RES(2,R->HL.B.l);break; +case RES2_xHL: I=RdZ80(R->HL.W);M_RES(2,I);WrZ80(R->HL.W,I);break; +case RES2_A: M_RES(2,R->AF.B.h);break; + +case RES3_B: M_RES(3,R->BC.B.h);break; case RES3_C: M_RES(3,R->BC.B.l);break; +case RES3_D: M_RES(3,R->DE.B.h);break; case RES3_E: M_RES(3,R->DE.B.l);break; +case RES3_H: M_RES(3,R->HL.B.h);break; case RES3_L: M_RES(3,R->HL.B.l);break; +case RES3_xHL: I=RdZ80(R->HL.W);M_RES(3,I);WrZ80(R->HL.W,I);break; +case RES3_A: M_RES(3,R->AF.B.h);break; + +case RES4_B: M_RES(4,R->BC.B.h);break; case RES4_C: M_RES(4,R->BC.B.l);break; +case RES4_D: M_RES(4,R->DE.B.h);break; case RES4_E: M_RES(4,R->DE.B.l);break; +case RES4_H: M_RES(4,R->HL.B.h);break; case RES4_L: M_RES(4,R->HL.B.l);break; +case RES4_xHL: I=RdZ80(R->HL.W);M_RES(4,I);WrZ80(R->HL.W,I);break; +case RES4_A: M_RES(4,R->AF.B.h);break; + +case RES5_B: M_RES(5,R->BC.B.h);break; case RES5_C: M_RES(5,R->BC.B.l);break; +case RES5_D: M_RES(5,R->DE.B.h);break; case RES5_E: M_RES(5,R->DE.B.l);break; +case RES5_H: M_RES(5,R->HL.B.h);break; case RES5_L: M_RES(5,R->HL.B.l);break; +case RES5_xHL: I=RdZ80(R->HL.W);M_RES(5,I);WrZ80(R->HL.W,I);break; +case RES5_A: M_RES(5,R->AF.B.h);break; + +case RES6_B: M_RES(6,R->BC.B.h);break; case RES6_C: M_RES(6,R->BC.B.l);break; +case RES6_D: M_RES(6,R->DE.B.h);break; case RES6_E: M_RES(6,R->DE.B.l);break; +case RES6_H: M_RES(6,R->HL.B.h);break; case RES6_L: M_RES(6,R->HL.B.l);break; +case RES6_xHL: I=RdZ80(R->HL.W);M_RES(6,I);WrZ80(R->HL.W,I);break; +case RES6_A: M_RES(6,R->AF.B.h);break; + +case RES7_B: M_RES(7,R->BC.B.h);break; case RES7_C: M_RES(7,R->BC.B.l);break; +case RES7_D: M_RES(7,R->DE.B.h);break; case RES7_E: M_RES(7,R->DE.B.l);break; +case RES7_H: M_RES(7,R->HL.B.h);break; case RES7_L: M_RES(7,R->HL.B.l);break; +case RES7_xHL: I=RdZ80(R->HL.W);M_RES(7,I);WrZ80(R->HL.W,I);break; +case RES7_A: M_RES(7,R->AF.B.h);break; + +case SET0_B: M_SET(0,R->BC.B.h);break; case SET0_C: M_SET(0,R->BC.B.l);break; +case SET0_D: M_SET(0,R->DE.B.h);break; case SET0_E: M_SET(0,R->DE.B.l);break; +case SET0_H: M_SET(0,R->HL.B.h);break; case SET0_L: M_SET(0,R->HL.B.l);break; +case SET0_xHL: I=RdZ80(R->HL.W);M_SET(0,I);WrZ80(R->HL.W,I);break; +case SET0_A: M_SET(0,R->AF.B.h);break; + +case SET1_B: M_SET(1,R->BC.B.h);break; case SET1_C: M_SET(1,R->BC.B.l);break; +case SET1_D: M_SET(1,R->DE.B.h);break; case SET1_E: M_SET(1,R->DE.B.l);break; +case SET1_H: M_SET(1,R->HL.B.h);break; case SET1_L: M_SET(1,R->HL.B.l);break; +case SET1_xHL: I=RdZ80(R->HL.W);M_SET(1,I);WrZ80(R->HL.W,I);break; +case SET1_A: M_SET(1,R->AF.B.h);break; + +case SET2_B: M_SET(2,R->BC.B.h);break; case SET2_C: M_SET(2,R->BC.B.l);break; +case SET2_D: M_SET(2,R->DE.B.h);break; case SET2_E: M_SET(2,R->DE.B.l);break; +case SET2_H: M_SET(2,R->HL.B.h);break; case SET2_L: M_SET(2,R->HL.B.l);break; +case SET2_xHL: I=RdZ80(R->HL.W);M_SET(2,I);WrZ80(R->HL.W,I);break; +case SET2_A: M_SET(2,R->AF.B.h);break; + +case SET3_B: M_SET(3,R->BC.B.h);break; case SET3_C: M_SET(3,R->BC.B.l);break; +case SET3_D: M_SET(3,R->DE.B.h);break; case SET3_E: M_SET(3,R->DE.B.l);break; +case SET3_H: M_SET(3,R->HL.B.h);break; case SET3_L: M_SET(3,R->HL.B.l);break; +case SET3_xHL: I=RdZ80(R->HL.W);M_SET(3,I);WrZ80(R->HL.W,I);break; +case SET3_A: M_SET(3,R->AF.B.h);break; + +case SET4_B: M_SET(4,R->BC.B.h);break; case SET4_C: M_SET(4,R->BC.B.l);break; +case SET4_D: M_SET(4,R->DE.B.h);break; case SET4_E: M_SET(4,R->DE.B.l);break; +case SET4_H: M_SET(4,R->HL.B.h);break; case SET4_L: M_SET(4,R->HL.B.l);break; +case SET4_xHL: I=RdZ80(R->HL.W);M_SET(4,I);WrZ80(R->HL.W,I);break; +case SET4_A: M_SET(4,R->AF.B.h);break; + +case SET5_B: M_SET(5,R->BC.B.h);break; case SET5_C: M_SET(5,R->BC.B.l);break; +case SET5_D: M_SET(5,R->DE.B.h);break; case SET5_E: M_SET(5,R->DE.B.l);break; +case SET5_H: M_SET(5,R->HL.B.h);break; case SET5_L: M_SET(5,R->HL.B.l);break; +case SET5_xHL: I=RdZ80(R->HL.W);M_SET(5,I);WrZ80(R->HL.W,I);break; +case SET5_A: M_SET(5,R->AF.B.h);break; + +case SET6_B: M_SET(6,R->BC.B.h);break; case SET6_C: M_SET(6,R->BC.B.l);break; +case SET6_D: M_SET(6,R->DE.B.h);break; case SET6_E: M_SET(6,R->DE.B.l);break; +case SET6_H: M_SET(6,R->HL.B.h);break; case SET6_L: M_SET(6,R->HL.B.l);break; +case SET6_xHL: I=RdZ80(R->HL.W);M_SET(6,I);WrZ80(R->HL.W,I);break; +case SET6_A: M_SET(6,R->AF.B.h);break; + +case SET7_B: M_SET(7,R->BC.B.h);break; case SET7_C: M_SET(7,R->BC.B.l);break; +case SET7_D: M_SET(7,R->DE.B.h);break; case SET7_E: M_SET(7,R->DE.B.l);break; +case SET7_H: M_SET(7,R->HL.B.h);break; case SET7_L: M_SET(7,R->HL.B.l);break; +case SET7_xHL: I=RdZ80(R->HL.W);M_SET(7,I);WrZ80(R->HL.W,I);break; +case SET7_A: M_SET(7,R->AF.B.h);break; diff --git a/MCUME_pico/picocolem/CodesED.h b/MCUME_pico/picocolem/CodesED.h new file mode 100644 index 0000000..56a7c69 --- /dev/null +++ b/MCUME_pico/picocolem/CodesED.h @@ -0,0 +1,282 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** CodesED.h **/ +/** **/ +/** This file contains implementation for the ED table of **/ +/** Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-1998 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +/** This is a special patch for emulating BIOS calls: ********/ +case DB_FE: PatchZ80(R);break; +/*************************************************************/ + +case ADC_HL_BC: M_ADCW(BC);break; +case ADC_HL_DE: M_ADCW(DE);break; +case ADC_HL_HL: M_ADCW(HL);break; +case ADC_HL_SP: M_ADCW(SP);break; + +case SBC_HL_BC: M_SBCW(BC);break; +case SBC_HL_DE: M_SBCW(DE);break; +case SBC_HL_HL: M_SBCW(HL);break; +case SBC_HL_SP: M_SBCW(SP);break; + +case LD_xWORDe_HL: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + WrZ80(J.W++,R->HL.B.l); + WrZ80(J.W,R->HL.B.h); + break; +case LD_xWORDe_DE: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + WrZ80(J.W++,R->DE.B.l); + WrZ80(J.W,R->DE.B.h); + break; +case LD_xWORDe_BC: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + WrZ80(J.W++,R->BC.B.l); + WrZ80(J.W,R->BC.B.h); + break; +case LD_xWORDe_SP: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + WrZ80(J.W++,R->SP.B.l); + WrZ80(J.W,R->SP.B.h); + break; + +case LD_HL_xWORDe: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + R->HL.B.l=RdZ80(J.W++); + R->HL.B.h=RdZ80(J.W); + break; +case LD_DE_xWORDe: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + R->DE.B.l=RdZ80(J.W++); + R->DE.B.h=RdZ80(J.W); + break; +case LD_BC_xWORDe: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + R->BC.B.l=RdZ80(J.W++); + R->BC.B.h=RdZ80(J.W); + break; +case LD_SP_xWORDe: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + R->SP.B.l=RdZ80(J.W++); + R->SP.B.h=RdZ80(J.W); + break; + +case RRD: + I=RdZ80(R->HL.W); + J.B.l=(I>>4)|(R->AF.B.h<<4); + WrZ80(R->HL.W,J.B.l); + R->AF.B.h=(I&0x0F)|(R->AF.B.h&0xF0); + R->AF.B.l=PZSTable[R->AF.B.h]|(R->AF.B.l&C_FLAG); + break; +case RLD: + I=RdZ80(R->HL.W); + J.B.l=(I<<4)|(R->AF.B.h&0x0F); + WrZ80(R->HL.W,J.B.l); + R->AF.B.h=(I>>4)|(R->AF.B.h&0xF0); + R->AF.B.l=PZSTable[R->AF.B.h]|(R->AF.B.l&C_FLAG); + break; + +case LD_A_I: + R->AF.B.h=R->I; + R->AF.B.l=(R->AF.B.l&C_FLAG)|(R->IFF&1? P_FLAG:0)|ZSTable[R->AF.B.h]; + break; + +case LD_A_R: + R->R++; + R->AF.B.h=(byte)(R->R-R->ICount); + R->AF.B.l=(R->AF.B.l&C_FLAG)|(R->IFF&1? P_FLAG:0)|ZSTable[R->AF.B.h]; + break; + +case LD_I_A: R->I=R->AF.B.h;break; +case LD_R_A: break; + +case IM_0: R->IFF&=0xF9;break; +case IM_1: R->IFF=(R->IFF&0xF9)|2;break; +case IM_2: R->IFF=(R->IFF&0xF9)|4;break; + +case RETI: M_RET;break; +case RETN: if(R->IFF&0x40) R->IFF|=0x01; else R->IFF&=0xFE; + M_RET;break; + +case NEG: I=R->AF.B.h;R->AF.B.h=0;M_SUB(I);break; + +case IN_B_xC: M_IN(R->BC.B.h);break; +case IN_C_xC: M_IN(R->BC.B.l);break; +case IN_D_xC: M_IN(R->DE.B.h);break; +case IN_E_xC: M_IN(R->DE.B.l);break; +case IN_H_xC: M_IN(R->HL.B.h);break; +case IN_L_xC: M_IN(R->HL.B.l);break; +case IN_A_xC: M_IN(R->AF.B.h);break; +case IN_F_xC: M_IN(J.B.l);break; + +case OUT_xC_B: OutZ80(R->BC.B.l,R->BC.B.h);break; +case OUT_xC_C: OutZ80(R->BC.B.l,R->BC.B.l);break; +case OUT_xC_D: OutZ80(R->BC.B.l,R->DE.B.h);break; +case OUT_xC_E: OutZ80(R->BC.B.l,R->DE.B.l);break; +case OUT_xC_H: OutZ80(R->BC.B.l,R->HL.B.h);break; +case OUT_xC_L: OutZ80(R->BC.B.l,R->HL.B.l);break; +case OUT_xC_A: OutZ80(R->BC.B.l,R->AF.B.h);break; + +case INI: + WrZ80(R->HL.W++,InZ80(R->BC.B.l)); + R->BC.B.h--; + R->AF.B.l=N_FLAG|(R->BC.B.h? 0:Z_FLAG); + break; + +case INIR: + do + { + WrZ80(R->HL.W++,InZ80(R->BC.B.l)); + R->BC.B.h--;R->ICount-=21; + } + while(R->BC.B.h&&(R->ICount>0)); + if(R->BC.B.h) { R->AF.B.l=N_FLAG;R->PC.W-=2; } + else { R->AF.B.l=Z_FLAG|N_FLAG;R->ICount+=5; } + break; + +case IND: + WrZ80(R->HL.W--,InZ80(R->BC.B.l)); + R->BC.B.h--; + R->AF.B.l=N_FLAG|(R->BC.B.h? 0:Z_FLAG); + break; + +case INDR: + do + { + WrZ80(R->HL.W--,InZ80(R->BC.B.l)); + R->BC.B.h--;R->ICount-=21; + } + while(R->BC.B.h&&(R->ICount>0)); + if(R->BC.B.h) { R->AF.B.l=N_FLAG;R->PC.W-=2; } + else { R->AF.B.l=Z_FLAG|N_FLAG;R->ICount+=5; } + break; + +case OUTI: + OutZ80(R->BC.B.l,RdZ80(R->HL.W++)); + R->BC.B.h--; + R->AF.B.l=N_FLAG|(R->BC.B.h? 0:Z_FLAG); + break; + +case OTIR: + do + { + OutZ80(R->BC.B.l,RdZ80(R->HL.W++)); + R->BC.B.h--;R->ICount-=21; + } + while(R->BC.B.h&&(R->ICount>0)); + if(R->BC.B.h) { R->AF.B.l=N_FLAG;R->PC.W-=2; } + else { R->AF.B.l=Z_FLAG|N_FLAG;R->ICount+=5; } + break; + +case OUTD: + OutZ80(R->BC.B.l,RdZ80(R->HL.W--)); + R->BC.B.h--; + R->AF.B.l=N_FLAG|(R->BC.B.h? 0:Z_FLAG); + break; + +case OTDR: + do + { + OutZ80(R->BC.B.l,RdZ80(R->HL.W--)); + R->BC.B.h--;R->ICount-=21; + } + while(R->BC.B.h&&(R->ICount>0)); + if(R->BC.B.h) { R->AF.B.l=N_FLAG;R->PC.W-=2; } + else { R->AF.B.l=Z_FLAG|N_FLAG;R->ICount+=5; } + break; + +case LDI: + WrZ80(R->DE.W++,RdZ80(R->HL.W++)); + R->BC.W--; + R->AF.B.l=(R->AF.B.l&~(N_FLAG|H_FLAG|P_FLAG))|(R->BC.W? P_FLAG:0); + break; + +case LDIR: + do + { + WrZ80(R->DE.W++,RdZ80(R->HL.W++)); + R->BC.W--;R->ICount-=21; + } + while(R->BC.W&&(R->ICount>0)); + R->AF.B.l&=~(N_FLAG|H_FLAG|P_FLAG); + if(R->BC.W) { R->AF.B.l|=N_FLAG;R->PC.W-=2; } + else R->ICount+=5; + break; + +case LDD: + WrZ80(R->DE.W--,RdZ80(R->HL.W--)); + R->BC.W--; + R->AF.B.l=(R->AF.B.l&~(N_FLAG|H_FLAG|P_FLAG))|(R->BC.W? P_FLAG:0); + break; + +case LDDR: + do + { + WrZ80(R->DE.W--,RdZ80(R->HL.W--)); + R->BC.W--;R->ICount-=21; + } + while(R->BC.W&&(R->ICount>0)); + R->AF.B.l&=~(N_FLAG|H_FLAG|P_FLAG); + if(R->BC.W) { R->AF.B.l|=N_FLAG;R->PC.W-=2; } + else R->ICount+=5; + break; + +case CPI: + I=RdZ80(R->HL.W++); + J.B.l=R->AF.B.h-I; + R->BC.W--; + R->AF.B.l = + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[J.B.l]| + ((R->AF.B.h^I^J.B.l)&H_FLAG)|(R->BC.W? P_FLAG:0); + break; + +case CPIR: + do + { + I=RdZ80(R->HL.W++); + J.B.l=R->AF.B.h-I; + R->BC.W--;R->ICount-=21; + } + while(R->BC.W&&J.B.l&&(R->ICount>0)); + R->AF.B.l = + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[J.B.l]| + ((R->AF.B.h^I^J.B.l)&H_FLAG)|(R->BC.W? P_FLAG:0); + if(R->BC.W&&J.B.l) R->PC.W-=2; else R->ICount+=5; + break; + +case CPD: + I=RdZ80(R->HL.W--); + J.B.l=R->AF.B.h-I; + R->BC.W--; + R->AF.B.l = + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[J.B.l]| + ((R->AF.B.h^I^J.B.l)&H_FLAG)|(R->BC.W? P_FLAG:0); + break; + +case CPDR: + do + { + I=RdZ80(R->HL.W--); + J.B.l=R->AF.B.h-I; + R->BC.W--;R->ICount-=21; + } + while(R->BC.W&&J.B.l); + R->AF.B.l = + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[J.B.l]| + ((R->AF.B.h^I^J.B.l)&H_FLAG)|(R->BC.W? P_FLAG:0); + if(R->BC.W&&J.B.l) R->PC.W-=2; else R->ICount+=5; + break; diff --git a/MCUME_pico/picocolem/CodesXCB.h b/MCUME_pico/picocolem/CodesXCB.h new file mode 100644 index 0000000..0b84ca2 --- /dev/null +++ b/MCUME_pico/picocolem/CodesXCB.h @@ -0,0 +1,64 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** CodesXCB.h **/ +/** **/ +/** This file contains implementation for FD/DD-CB tables **/ +/** of Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-1998 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +case RLC_xHL: I=RdZ80(J.W);M_RLC(I);WrZ80(J.W,I);break; +case RRC_xHL: I=RdZ80(J.W);M_RRC(I);WrZ80(J.W,I);break; +case RL_xHL: I=RdZ80(J.W);M_RL(I);WrZ80(J.W,I);break; +case RR_xHL: I=RdZ80(J.W);M_RR(I);WrZ80(J.W,I);break; +case SLA_xHL: I=RdZ80(J.W);M_SLA(I);WrZ80(J.W,I);break; +case SRA_xHL: I=RdZ80(J.W);M_SRA(I);WrZ80(J.W,I);break; +case SLL_xHL: I=RdZ80(J.W);M_SLL(I);WrZ80(J.W,I);break; +case SRL_xHL: I=RdZ80(J.W);M_SRL(I);WrZ80(J.W,I);break; + +case BIT0_B: case BIT0_C: case BIT0_D: case BIT0_E: +case BIT0_H: case BIT0_L: case BIT0_A: +case BIT0_xHL: I=RdZ80(J.W);M_BIT(0,I);break; +case BIT1_B: case BIT1_C: case BIT1_D: case BIT1_E: +case BIT1_H: case BIT1_L: case BIT1_A: +case BIT1_xHL: I=RdZ80(J.W);M_BIT(1,I);break; +case BIT2_B: case BIT2_C: case BIT2_D: case BIT2_E: +case BIT2_H: case BIT2_L: case BIT2_A: +case BIT2_xHL: I=RdZ80(J.W);M_BIT(2,I);break; +case BIT3_B: case BIT3_C: case BIT3_D: case BIT3_E: +case BIT3_H: case BIT3_L: case BIT3_A: +case BIT3_xHL: I=RdZ80(J.W);M_BIT(3,I);break; +case BIT4_B: case BIT4_C: case BIT4_D: case BIT4_E: +case BIT4_H: case BIT4_L: case BIT4_A: +case BIT4_xHL: I=RdZ80(J.W);M_BIT(4,I);break; +case BIT5_B: case BIT5_C: case BIT5_D: case BIT5_E: +case BIT5_H: case BIT5_L: case BIT5_A: +case BIT5_xHL: I=RdZ80(J.W);M_BIT(5,I);break; +case BIT6_B: case BIT6_C: case BIT6_D: case BIT6_E: +case BIT6_H: case BIT6_L: case BIT6_A: +case BIT6_xHL: I=RdZ80(J.W);M_BIT(6,I);break; +case BIT7_B: case BIT7_C: case BIT7_D: case BIT7_E: +case BIT7_H: case BIT7_L: case BIT7_A: +case BIT7_xHL: I=RdZ80(J.W);M_BIT(7,I);break; + +case RES0_xHL: I=RdZ80(J.W);M_RES(0,I);WrZ80(J.W,I);break; +case RES1_xHL: I=RdZ80(J.W);M_RES(1,I);WrZ80(J.W,I);break; +case RES2_xHL: I=RdZ80(J.W);M_RES(2,I);WrZ80(J.W,I);break; +case RES3_xHL: I=RdZ80(J.W);M_RES(3,I);WrZ80(J.W,I);break; +case RES4_xHL: I=RdZ80(J.W);M_RES(4,I);WrZ80(J.W,I);break; +case RES5_xHL: I=RdZ80(J.W);M_RES(5,I);WrZ80(J.W,I);break; +case RES6_xHL: I=RdZ80(J.W);M_RES(6,I);WrZ80(J.W,I);break; +case RES7_xHL: I=RdZ80(J.W);M_RES(7,I);WrZ80(J.W,I);break; + +case SET0_xHL: I=RdZ80(J.W);M_SET(0,I);WrZ80(J.W,I);break; +case SET1_xHL: I=RdZ80(J.W);M_SET(1,I);WrZ80(J.W,I);break; +case SET2_xHL: I=RdZ80(J.W);M_SET(2,I);WrZ80(J.W,I);break; +case SET3_xHL: I=RdZ80(J.W);M_SET(3,I);WrZ80(J.W,I);break; +case SET4_xHL: I=RdZ80(J.W);M_SET(4,I);WrZ80(J.W,I);break; +case SET5_xHL: I=RdZ80(J.W);M_SET(5,I);WrZ80(J.W,I);break; +case SET6_xHL: I=RdZ80(J.W);M_SET(6,I);WrZ80(J.W,I);break; +case SET7_xHL: I=RdZ80(J.W);M_SET(7,I);WrZ80(J.W,I);break; diff --git a/MCUME_pico/picocolem/CodesXX.h b/MCUME_pico/picocolem/CodesXX.h new file mode 100644 index 0000000..98733cd --- /dev/null +++ b/MCUME_pico/picocolem/CodesXX.h @@ -0,0 +1,388 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** CodesXX.h **/ +/** **/ +/** This file contains implementation for FD/DD tables of **/ +/** Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-1998 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +case JR_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W++; else { M_JR; } break; +case JR_NC: if(R->AF.B.l&C_FLAG) R->PC.W++; else { M_JR; } break; +case JR_Z: if(R->AF.B.l&Z_FLAG) { M_JR; } else R->PC.W++; break; +case JR_C: if(R->AF.B.l&C_FLAG) { M_JR; } else R->PC.W++; break; + +case JP_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_Z: if(R->AF.B.l&Z_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_C: if(R->AF.B.l&C_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_PE: if(R->AF.B.l&P_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_M: if(R->AF.B.l&S_FLAG) { M_JP; } else R->PC.W+=2; break; + +case RET_NZ: if(!(R->AF.B.l&Z_FLAG)) { M_RET; } break; +case RET_NC: if(!(R->AF.B.l&C_FLAG)) { M_RET; } break; +case RET_PO: if(!(R->AF.B.l&P_FLAG)) { M_RET; } break; +case RET_P: if(!(R->AF.B.l&S_FLAG)) { M_RET; } break; +case RET_Z: if(R->AF.B.l&Z_FLAG) { M_RET; } break; +case RET_C: if(R->AF.B.l&C_FLAG) { M_RET; } break; +case RET_PE: if(R->AF.B.l&P_FLAG) { M_RET; } break; +case RET_M: if(R->AF.B.l&S_FLAG) { M_RET; } break; + +case CALL_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { M_CALL; } break; +case CALL_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { M_CALL; } break; +case CALL_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { M_CALL; } break; +case CALL_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { M_CALL; } break; +case CALL_Z: if(R->AF.B.l&Z_FLAG) { M_CALL; } else R->PC.W+=2; break; +case CALL_C: if(R->AF.B.l&C_FLAG) { M_CALL; } else R->PC.W+=2; break; +case CALL_PE: if(R->AF.B.l&P_FLAG) { M_CALL; } else R->PC.W+=2; break; +case CALL_M: if(R->AF.B.l&S_FLAG) { M_CALL; } else R->PC.W+=2; break; + +case ADD_B: M_ADD(R->BC.B.h);break; +case ADD_C: M_ADD(R->BC.B.l);break; +case ADD_D: M_ADD(R->DE.B.h);break; +case ADD_E: M_ADD(R->DE.B.l);break; +case ADD_H: M_ADD(R->XX.B.h);break; +case ADD_L: M_ADD(R->XX.B.l);break; +case ADD_A: M_ADD(R->AF.B.h);break; +case ADD_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); + M_ADD(I);break; +case ADD_BYTE: I=RdZ80(R->PC.W++);M_ADD(I);break; + +case SUB_B: M_SUB(R->BC.B.h);break; +case SUB_C: M_SUB(R->BC.B.l);break; +case SUB_D: M_SUB(R->DE.B.h);break; +case SUB_E: M_SUB(R->DE.B.l);break; +case SUB_H: M_SUB(R->XX.B.h);break; +case SUB_L: M_SUB(R->XX.B.l);break; +case SUB_A: R->AF.B.h=0;R->AF.B.l=N_FLAG|Z_FLAG;break; +case SUB_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); + M_SUB(I);break; +case SUB_BYTE: I=RdZ80(R->PC.W++);M_SUB(I);break; + +case AND_B: M_AND(R->BC.B.h);break; +case AND_C: M_AND(R->BC.B.l);break; +case AND_D: M_AND(R->DE.B.h);break; +case AND_E: M_AND(R->DE.B.l);break; +case AND_H: M_AND(R->XX.B.h);break; +case AND_L: M_AND(R->XX.B.l);break; +case AND_A: M_AND(R->AF.B.h);break; +case AND_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); + M_AND(I);break; +case AND_BYTE: I=RdZ80(R->PC.W++);M_AND(I);break; + +case OR_B: M_OR(R->BC.B.h);break; +case OR_C: M_OR(R->BC.B.l);break; +case OR_D: M_OR(R->DE.B.h);break; +case OR_E: M_OR(R->DE.B.l);break; +case OR_H: M_OR(R->XX.B.h);break; +case OR_L: M_OR(R->XX.B.l);break; +case OR_A: M_OR(R->AF.B.h);break; +case OR_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); + M_OR(I);break; +case OR_BYTE: I=RdZ80(R->PC.W++);M_OR(I);break; + +case ADC_B: M_ADC(R->BC.B.h);break; +case ADC_C: M_ADC(R->BC.B.l);break; +case ADC_D: M_ADC(R->DE.B.h);break; +case ADC_E: M_ADC(R->DE.B.l);break; +case ADC_H: M_ADC(R->XX.B.h);break; +case ADC_L: M_ADC(R->XX.B.l);break; +case ADC_A: M_ADC(R->AF.B.h);break; +case ADC_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); + M_ADC(I);break; +case ADC_BYTE: I=RdZ80(R->PC.W++);M_ADC(I);break; + +case SBC_B: M_SBC(R->BC.B.h);break; +case SBC_C: M_SBC(R->BC.B.l);break; +case SBC_D: M_SBC(R->DE.B.h);break; +case SBC_E: M_SBC(R->DE.B.l);break; +case SBC_H: M_SBC(R->XX.B.h);break; +case SBC_L: M_SBC(R->XX.B.l);break; +case SBC_A: M_SBC(R->AF.B.h);break; +case SBC_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); + M_SBC(I);break; +case SBC_BYTE: I=RdZ80(R->PC.W++);M_SBC(I);break; + +case XOR_B: M_XOR(R->BC.B.h);break; +case XOR_C: M_XOR(R->BC.B.l);break; +case XOR_D: M_XOR(R->DE.B.h);break; +case XOR_E: M_XOR(R->DE.B.l);break; +case XOR_H: M_XOR(R->XX.B.h);break; +case XOR_L: M_XOR(R->XX.B.l);break; +case XOR_A: R->AF.B.h=0;R->AF.B.l=P_FLAG|Z_FLAG;break; +case XOR_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); + M_XOR(I);break; +case XOR_BYTE: I=RdZ80(R->PC.W++);M_XOR(I);break; + +case CP_B: M_CP(R->BC.B.h);break; +case CP_C: M_CP(R->BC.B.l);break; +case CP_D: M_CP(R->DE.B.h);break; +case CP_E: M_CP(R->DE.B.l);break; +case CP_H: M_CP(R->XX.B.h);break; +case CP_L: M_CP(R->XX.B.l);break; +case CP_A: R->AF.B.l=N_FLAG|Z_FLAG;break; +case CP_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++)); + M_CP(I);break; +case CP_BYTE: I=RdZ80(R->PC.W++);M_CP(I);break; + +case LD_BC_WORD: M_LDWORD(BC);break; +case LD_DE_WORD: M_LDWORD(DE);break; +case LD_HL_WORD: M_LDWORD(XX);break; +case LD_SP_WORD: M_LDWORD(SP);break; + +case LD_PC_HL: R->PC.W=R->XX.W;break; +case LD_SP_HL: R->SP.W=R->XX.W;break; +case LD_A_xBC: R->AF.B.h=RdZ80(R->BC.W);break; +case LD_A_xDE: R->AF.B.h=RdZ80(R->DE.W);break; + +case ADD_HL_BC: M_ADDW(XX,BC);break; +case ADD_HL_DE: M_ADDW(XX,DE);break; +case ADD_HL_HL: M_ADDW(XX,XX);break; +case ADD_HL_SP: M_ADDW(XX,SP);break; + +case DEC_BC: R->BC.W--;break; +case DEC_DE: R->DE.W--;break; +case DEC_HL: R->XX.W--;break; +case DEC_SP: R->SP.W--;break; + +case INC_BC: R->BC.W++;break; +case INC_DE: R->DE.W++;break; +case INC_HL: R->XX.W++;break; +case INC_SP: R->SP.W++;break; + +case DEC_B: M_DEC(R->BC.B.h);break; +case DEC_C: M_DEC(R->BC.B.l);break; +case DEC_D: M_DEC(R->DE.B.h);break; +case DEC_E: M_DEC(R->DE.B.l);break; +case DEC_H: M_DEC(R->XX.B.h);break; +case DEC_L: M_DEC(R->XX.B.l);break; +case DEC_A: M_DEC(R->AF.B.h);break; +case DEC_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W));M_DEC(I); + WrZ80(R->XX.W+(offset)RdZ80(R->PC.W++),I); + break; + +case INC_B: M_INC(R->BC.B.h);break; +case INC_C: M_INC(R->BC.B.l);break; +case INC_D: M_INC(R->DE.B.h);break; +case INC_E: M_INC(R->DE.B.l);break; +case INC_H: M_INC(R->XX.B.h);break; +case INC_L: M_INC(R->XX.B.l);break; +case INC_A: M_INC(R->AF.B.h);break; +case INC_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W));M_INC(I); + WrZ80(R->XX.W+(offset)RdZ80(R->PC.W++),I); + break; + +case RLCA: + I=(R->AF.B.h&0x80? C_FLAG:0); + R->AF.B.h=(R->AF.B.h<<1)|I; + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RLA: + I=(R->AF.B.h&0x80? C_FLAG:0); + R->AF.B.h=(R->AF.B.h<<1)|(R->AF.B.l&C_FLAG); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RRCA: + I=R->AF.B.h&0x01; + R->AF.B.h=(R->AF.B.h>>1)|(I? 0x80:0); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RRA: + I=R->AF.B.h&0x01; + R->AF.B.h=(R->AF.B.h>>1)|(R->AF.B.l&C_FLAG? 0x80:0); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; + +case RST00: M_RST(0x0000);break; +case RST08: M_RST(0x0008);break; +case RST10: M_RST(0x0010);break; +case RST18: M_RST(0x0018);break; +case RST20: M_RST(0x0020);break; +case RST28: M_RST(0x0028);break; +case RST30: M_RST(0x0030);break; +case RST38: M_RST(0x0038);break; + +case PUSH_BC: M_PUSH(BC);break; +case PUSH_DE: M_PUSH(DE);break; +case PUSH_HL: M_PUSH(XX);break; +case PUSH_AF: M_PUSH(AF);break; + +case POP_BC: M_POP(BC);break; +case POP_DE: M_POP(DE);break; +case POP_HL: M_POP(XX);break; +case POP_AF: M_POP(AF);break; + +case DJNZ: if(--R->BC.B.h) { M_JR; } else R->PC.W++;break; +case JP: M_JP;break; +case JR: M_JR;break; +case CALL: M_CALL;break; +case RET: M_RET;break; +case SCF: S(C_FLAG);R(N_FLAG|H_FLAG);break; +case CPL: R->AF.B.h=~R->AF.B.h;S(N_FLAG|H_FLAG);break; +case NOP: break; +case OUTA: OutZ80(RdZ80(R->PC.W++),R->AF.B.h);break; +case INA: R->AF.B.h=InZ80(RdZ80(R->PC.W++));break; + +case DI: + R->IFF&=0xFE; + break; +case EI: + R->IFF|=0x01; + if(R->IRequest!=INT_NONE) + { + R->IFF|=0x20; + R->IBackup=R->ICount; + R->ICount=1; + } + break; + +case CCF: + R->AF.B.l^=C_FLAG;R(N_FLAG|H_FLAG); + R->AF.B.l|=R->AF.B.l&C_FLAG? 0:H_FLAG; + break; + +case EXX: + J.W=R->BC.W;R->BC.W=R->BC1.W;R->BC1.W=J.W; + J.W=R->DE.W;R->DE.W=R->DE1.W;R->DE1.W=J.W; + J.W=R->HL.W;R->HL.W=R->HL1.W;R->HL1.W=J.W; + break; + +case EX_DE_HL: J.W=R->DE.W;R->DE.W=R->HL.W;R->HL.W=J.W;break; +case EX_AF_AF: J.W=R->AF.W;R->AF.W=R->AF1.W;R->AF1.W=J.W;break; + +case LD_B_B: R->BC.B.h=R->BC.B.h;break; +case LD_C_B: R->BC.B.l=R->BC.B.h;break; +case LD_D_B: R->DE.B.h=R->BC.B.h;break; +case LD_E_B: R->DE.B.l=R->BC.B.h;break; +case LD_H_B: R->XX.B.h=R->BC.B.h;break; +case LD_L_B: R->XX.B.l=R->BC.B.h;break; +case LD_A_B: R->AF.B.h=R->BC.B.h;break; +case LD_xHL_B: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); + WrZ80(J.W,R->BC.B.h);break; + +case LD_B_C: R->BC.B.h=R->BC.B.l;break; +case LD_C_C: R->BC.B.l=R->BC.B.l;break; +case LD_D_C: R->DE.B.h=R->BC.B.l;break; +case LD_E_C: R->DE.B.l=R->BC.B.l;break; +case LD_H_C: R->XX.B.h=R->BC.B.l;break; +case LD_L_C: R->XX.B.l=R->BC.B.l;break; +case LD_A_C: R->AF.B.h=R->BC.B.l;break; +case LD_xHL_C: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); + WrZ80(J.W,R->BC.B.l);break; + +case LD_B_D: R->BC.B.h=R->DE.B.h;break; +case LD_C_D: R->BC.B.l=R->DE.B.h;break; +case LD_D_D: R->DE.B.h=R->DE.B.h;break; +case LD_E_D: R->DE.B.l=R->DE.B.h;break; +case LD_H_D: R->XX.B.h=R->DE.B.h;break; +case LD_L_D: R->XX.B.l=R->DE.B.h;break; +case LD_A_D: R->AF.B.h=R->DE.B.h;break; +case LD_xHL_D: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); + WrZ80(J.W,R->DE.B.h);break; + +case LD_B_E: R->BC.B.h=R->DE.B.l;break; +case LD_C_E: R->BC.B.l=R->DE.B.l;break; +case LD_D_E: R->DE.B.h=R->DE.B.l;break; +case LD_E_E: R->DE.B.l=R->DE.B.l;break; +case LD_H_E: R->XX.B.h=R->DE.B.l;break; +case LD_L_E: R->XX.B.l=R->DE.B.l;break; +case LD_A_E: R->AF.B.h=R->DE.B.l;break; +case LD_xHL_E: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); + WrZ80(J.W,R->DE.B.l);break; + +case LD_B_H: R->BC.B.h=R->XX.B.h;break; +case LD_C_H: R->BC.B.l=R->XX.B.h;break; +case LD_D_H: R->DE.B.h=R->XX.B.h;break; +case LD_E_H: R->DE.B.l=R->XX.B.h;break; +case LD_H_H: R->XX.B.h=R->XX.B.h;break; +case LD_L_H: R->XX.B.l=R->XX.B.h;break; +case LD_A_H: R->AF.B.h=R->XX.B.h;break; +case LD_xHL_H: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); + WrZ80(J.W,R->HL.B.h);break; + +case LD_B_L: R->BC.B.h=R->XX.B.l;break; +case LD_C_L: R->BC.B.l=R->XX.B.l;break; +case LD_D_L: R->DE.B.h=R->XX.B.l;break; +case LD_E_L: R->DE.B.l=R->XX.B.l;break; +case LD_H_L: R->XX.B.h=R->XX.B.l;break; +case LD_L_L: R->XX.B.l=R->XX.B.l;break; +case LD_A_L: R->AF.B.h=R->XX.B.l;break; +case LD_xHL_L: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); + WrZ80(J.W,R->HL.B.l);break; + +case LD_B_A: R->BC.B.h=R->AF.B.h;break; +case LD_C_A: R->BC.B.l=R->AF.B.h;break; +case LD_D_A: R->DE.B.h=R->AF.B.h;break; +case LD_E_A: R->DE.B.l=R->AF.B.h;break; +case LD_H_A: R->XX.B.h=R->AF.B.h;break; +case LD_L_A: R->XX.B.l=R->AF.B.h;break; +case LD_A_A: R->AF.B.h=R->AF.B.h;break; +case LD_xHL_A: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); + WrZ80(J.W,R->AF.B.h);break; + +case LD_xBC_A: WrZ80(R->BC.W,R->AF.B.h);break; +case LD_xDE_A: WrZ80(R->DE.W,R->AF.B.h);break; + +case LD_B_xHL: R->BC.B.h=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; +case LD_C_xHL: R->BC.B.l=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; +case LD_D_xHL: R->DE.B.h=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; +case LD_E_xHL: R->DE.B.l=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; +case LD_H_xHL: R->HL.B.h=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; +case LD_L_xHL: R->HL.B.l=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; +case LD_A_xHL: R->AF.B.h=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break; + +case LD_B_BYTE: R->BC.B.h=RdZ80(R->PC.W++);break; +case LD_C_BYTE: R->BC.B.l=RdZ80(R->PC.W++);break; +case LD_D_BYTE: R->DE.B.h=RdZ80(R->PC.W++);break; +case LD_E_BYTE: R->DE.B.l=RdZ80(R->PC.W++);break; +case LD_H_BYTE: R->XX.B.h=RdZ80(R->PC.W++);break; +case LD_L_BYTE: R->XX.B.l=RdZ80(R->PC.W++);break; +case LD_A_BYTE: R->AF.B.h=RdZ80(R->PC.W++);break; +case LD_xHL_BYTE: J.W=R->XX.W+(offset)RdZ80(R->PC.W++); + WrZ80(J.W,RdZ80(R->PC.W++));break; + +case LD_xWORD_HL: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + WrZ80(J.W++,R->XX.B.l); + WrZ80(J.W,R->XX.B.h); + break; + +case LD_HL_xWORD: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + R->XX.B.l=RdZ80(J.W++); + R->XX.B.h=RdZ80(J.W); + break; + +case LD_A_xWORD: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + R->AF.B.h=RdZ80(J.W); + break; + +case LD_xWORD_A: + J.B.l=RdZ80(R->PC.W++); + J.B.h=RdZ80(R->PC.W++); + WrZ80(J.W,R->AF.B.h); + break; + +case EX_HL_xSP: + J.B.l=RdZ80(R->SP.W);WrZ80(R->SP.W++,R->XX.B.l); + J.B.h=RdZ80(R->SP.W);WrZ80(R->SP.W--,R->XX.B.h); + R->XX.W=J.W; + break; + +case DAA: + J.W=R->AF.B.h; + if(R->AF.B.l&C_FLAG) J.W|=256; + if(R->AF.B.l&H_FLAG) J.W|=512; + if(R->AF.B.l&N_FLAG) J.W|=1024; + R->AF.W=DAATable[J.W]; + break; diff --git a/MCUME_pico/picocolem/Colem.c b/MCUME_pico/picocolem/Colem.c new file mode 100644 index 0000000..191c7c9 --- /dev/null +++ b/MCUME_pico/picocolem/Colem.c @@ -0,0 +1,902 @@ +#include "options.h" + +#include "Z80.h" /* Z80 CPU emulation */ +#include "SN76489.h" /* SN76489 PSG emulation */ +#include +#include + +#include "emuapi.h" + + +/************************************** +* Local macros/typedef +**************************************/ +#define WIDTH 256 +#define HEIGHT 192 + +#define MAXSCREEN 3 /* Highest screen mode supported */ +#define NORAM 0xFF /* Byte to be returned from */ + /* non-existing pages and ports */ + +/***** Following are macros to be used in screen drivers *****/ +#define BigSprites (VDP[1]&0x01) /* Zoomed sprites */ +#define Sprites16x16 (VDP[1]&0x02) /* 16x16/8x8 sprites */ +#define ScreenON (VDP[1]&0x40) /* Show screen */ + +/*************************************** +* Local procedures definition +***************************************/ +static void snd_Reset(void); +static void snd_Sound(int C, int F, int V); +static void SetColor(byte N,byte R,byte G,byte B); +static void RefreshSprites(byte Y); +static void RefreshBorder(byte Y); +static void RefreshLine0(byte Y); +static void RefreshLine1(byte Y); +static void RefreshLine2(byte Y); +static void RefreshLine3(byte Y); +static void RefreshScreen(void); +static void VDPOut(byte Reg,byte Value); /* Write value into VDP */ +static void CheckSprites(void); /* Collisions/5th spr. */ +static void Play(int C,int F,int V); /* Log and play sound */ + +/*************************************** +* Local data +***************************************/ +static byte * XBuf=0; // = (byte *)XBuf32; +static byte XPal[16],XPal0; + + +/*** TMS9918/9928 Palette *******************************************/ +struct { byte R,G,B; } Palette[16] = +{ + {0x00,0x00,0x00},{0x00,0x00,0x00},{0x20,0xC0,0x20},{0x60,0xE0,0x60}, + {0x20,0x20,0xE0},{0x40,0x60,0xE0},{0xA0,0x20,0x20},{0x40,0xC0,0xE0}, + {0xE0,0x20,0x20},{0xE0,0x60,0x60},{0xC0,0xC0,0x20},{0xC0,0xC0,0x80}, + {0x20,0x80,0x20},{0xC0,0x40,0xA0},{0xA0,0xA0,0xA0},{0xE0,0xE0,0xE0} +}; + +byte Verbose = 1; /* Debug msgs ON/OFF */ +byte UPeriod = 2; /* Interrupts/scr. update */ +int VPeriod = 60000; /* Number of cycles per VBlank */ +int HPeriod = 215; /* Number of cycles per HBlank */ +byte AutoA=0,AutoB=0; /* 1: Autofire for A,B buttons */ +byte Adam = 0; /* 1: Emulate Coleco Adam */ + +#define MEMRELOC -0x4000 + +#define VRAMSIZE 0x4000 +#define RAMSIZE 0xC000 + + +/* Main and Video RAMs */ +//static byte * VRAM=0; //[VRAMSIZE]; +//static byte * RAM=0; //RAM[RAMSIZE]; +static byte VRAM[VRAMSIZE]; +static byte RAM[RAMSIZE]; + +Z80 ccpu; /* Z80 CPU registers and state */ +SN76489 PSG; /* SN76489 PSG state */ + +byte *ChrGen,*ChrTab,*ColTab; /* VDP tables (screens) */ +byte *SprGen,*SprTab; /* VDP tables (sprites) */ +pair WVAddr,RVAddr; /* Storage for VRAM addresses */ +byte VKey; /* VDP address latch key */ +byte FGColor,BGColor; /* Colors */ +byte ScrMode; /* Current screen mode */ +byte CurLine; /* Current scanline */ +byte VDP[8],VDPStatus; /* VDP registers */ + +byte JoyMode; /* Joystick controller mode */ +word JoyState[2]; /* Joystick states */ + +/*** Screen handlers and masks for VDP table address registers ******/ +struct +{ + void (*Refresh)(byte Y); + byte R2,R3,R4,R5; +} SCR[MAXSCREEN+1] = +{ + { RefreshLine0,0x7F,0x00,0x3F,0x00 }, /* SCREEN 0:TEXT 40x24 */ + { RefreshLine1,0x7F,0xFF,0x3F,0xFF }, /* SCREEN 1:TEXT 32x24 */ + { RefreshLine2,0x7F,0x80,0x3C,0xFF }, /* SCREEN 2:BLOCK 256x192 */ + { RefreshLine3,0x7F,0x00,0x3F,0xFF } /* SCREEN 3:GFX 64x48x16 */ +}; + +/*************************************** +* Global data +***************************************/ + +/*************************************** +* Exported procedures +***************************************/ +void emu_KeyboardOnDown(int keymodifer, int key) { +} + +void emu_KeyboardOnUp(int keymodifer, int key) { +} + +void coc_Init(void) +{ + int J; + + /* Set up the palette */ + for(J=0;J<16;J++) + SetColor(J,Palette[J].R,Palette[J].G,Palette[J].B); + + //if (VRAM == 0) VRAM = (byte *)emu_Malloc(VRAMSIZE); + //if (RAM == 0) RAM = (byte *)emu_Malloc(RAMSIZE); +#if SINGLELINE_RENDERING + if (XBuf == 0) XBuf = (byte *)emu_Malloc(WIDTH); +#else + if (XBuf == 0) XBuf = (byte *)emu_Malloc(WIDTH*HEIGHT); +#endif + +} + +int coc_Start(char * Cartridge) +{ + int *T,I,J; + char *P; + + /*** VDP control register states: ***/ + static byte VDPInit[8] = + { 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00 }; + + /*** STARTUP CODE starts here: ***/ + T=(int *)"\01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; +#ifdef LSB_FIRST + if(*T!=1) + { + emu_printf("********** This machine is high-endian. **********\n"); + emu_printf("Take #define LSB_FIRST out and compile ColEm again.\n"); + return(0); + } +#else + if(*T==1) + { + emu_printf("********** This machine is low-endian. **********\n"); + emu_printf("Insert #define LSB_FIRST and compile ColEm again.\n"); + return(0); + } +#endif + + /* Calculate IPeriod from VPeriod */ + if(UPeriod<1) UPeriod=1; + if(VPeriod/HPeriod<256) VPeriod=256*HPeriod; + ccpu.IPeriod=HPeriod; + ccpu.TrapBadOps=Verbose&0x04; + ccpu.IAutoReset=0; + + memset(RAM,NORAM,RAMSIZE); + memset(VRAM,NORAM,VRAMSIZE); + + if(Verbose) emu_printf("OK\nLoading ROMs:\nOpening COLECO.ROM..."); + P=NULL; + if (emu_LoadFile("coleco.rom", (unsigned char *)RAM, 0x2000) != 0x2000) + P="NOT FOUND OR SHORT FILE"; + + //if(P) { if(Verbose) puts(P);return(0); } + if(Verbose) emu_printf("OK\nOpening ROM"); + if(Verbose) emu_printf(Cartridge); + + P=NULL; + J= emu_LoadFile(Cartridge, (unsigned char *)RAM+0x8000+MEMRELOC, 0x8000); + + if(J<0x1000) P="SHORT FILE"; + I=RAM[0x8000+MEMRELOC];J=RAM[0x8001+MEMRELOC]; + if( !( ((I==0x55)&&(J==0xAA))||((I==0xAA)&&(J==0x55)) ) ) + P="INVALID IMAGE"; + + //if(P) { if(Verbose) puts(P);return(0); } + if(Verbose) emu_printf("bytes loaded\n"); + + if(Verbose) + { + emu_printf("Initializing CPU and System Hardware:\n"); + //emu_printf(" VBlank = %d cycles\n HBlank = %d cycles\n",VPeriod,HPeriod); + } + +#ifdef HAS_SND + snd_Reset(); +#endif +#ifdef SOUND_PRESENT + snd_Open(44100/*22050*/, 2, 4096/*16384*/,(void*)snd_Mixer); +#endif + + /* Initialize VDP registers */ + memcpy(VDP,VDPInit,sizeof(VDP)); + + /* Initialize internal variables */ + VKey=1; /* VDP address latch key */ + VDPStatus=0x9F; /* VDP status register */ + FGColor=BGColor=0; /* Fore/Background color */ + ScrMode=0; /* Current screenmode */ + CurLine=0; /* Current scanline */ + ChrTab=ColTab=ChrGen=VRAM; /* VDP tables (screen) */ + SprTab=SprGen=VRAM; /* VDP tables (sprites) */ + JoyMode=0; /* Joystick mode key */ + JoyState[0]=JoyState[1]=0xFFFF; /* Joystick states */ + Reset76489(&PSG,Play); /* Reset SN76489 PSG */ + Sync76489(&PSG,PSG_SYNC); /* Make it synchronous */ + ResetZ80(&ccpu); /* Reset Z80 registers */ + + if(Verbose) emu_printf("RUNNING ROM CODE...\n"); + return(1); +} + +void coc_Step(void) +{ + //emu_printf("s"); + RunZ80(&ccpu); + RunZ80(&ccpu); +} + +void coc_Stop(void) +{ +} + + +#ifdef HAS_SND + +static void snd_Reset(void) +{ + emu_sndInit(); +} + +static void snd_Sound(int C, int F, int V) +{ + emu_sndPlaySound(C, V, F); +} +#endif + +/** Joysticks ************************************************/ +/** Check for keyboard events, parse them, and modify **/ +/** joystick controller status **/ +/*************************************************************/ + +void SetColor(byte N,byte R,byte G,byte B) +{ + unsigned char val = R; + XPal[N] = N; //(R&0xe0) | ((G>>3) & 0x1c) | ((B>>6) & 0x3); // RGBVAL(R,G,B); //(byte)lld_SetPaletteEntry(-1, R,G,B,0); + emu_SetPaletteEntry(R,G,B,N); +} + +void Joysticks(void) +{ + int k; + int j; + int ij; + int N=0; + word JS[2] = { 0xFFFF,0xFFFF }; + + k=emu_ReadKeys(); + j=emu_GetPad(); + ij=emu_ReadI2CKeyboard(); + + if (j & 0x8000) N = 1; + else N = 0; + + if(j) + JS[N]=(JS[N]&0xFFF0)|(j-1); + if(ij) + JS[N]=(JS[N]&0xFFF0)|(ij-1); + + if (k & MASK_JOY2_BTN) + { + JS[N]&=0xBFFF; //Fire 1 + } + if (k & MASK_KEY_USER1) + { + JS[N]&=0xFFBF; //Fire 2 + } + if (k & MASK_KEY_USER2) + { + JS[0]=(JS[0]&0xFFF0)|(2); //1 + } + // JS[0]=(JS[0]&0xFFF0)|(12); + // JS[0]=(JS[0]&0xFFF0)|(13); + + if (k & MASK_JOY2_DOWN) + JS[N]&=0xFBFF; //Down + if (k & MASK_JOY2_UP) + JS[N]&=0xFEFF; //Up + if (k & MASK_JOY2_RIGHT) + JS[N]&=0xF7FF; //Right + if (k & MASK_JOY2_LEFT) + JS[N]&=0xFDFF; //Left + + JoyState[0]=JS[0];JoyState[1]=JS[1]; +} + +/** WrZ80() **************************************************/ +/** Z80 emulation calls this function to write byte V to **/ +/** address A of Z80 address space. **/ +/*************************************************************/ +void WrZ80(register word A,register byte V) +{ + if((A>0x5FFF)&&(A<0x8000)) + { + A&=0x03FF; + RAM[0x6000+A+MEMRELOC]=RAM[0x6400+A+MEMRELOC]=RAM[0x6800+A+MEMRELOC]=RAM[0x6C00+A+MEMRELOC]= + RAM[0x7000+A+MEMRELOC]=RAM[0x7400+A+MEMRELOC]=RAM[0x7800+A+MEMRELOC]=RAM[0x7C00+A+MEMRELOC]=V; + } +} + +/** RdZ80() **************************************************/ +/** Z80 emulation calls this function to read a byte from **/ +/** address A of Z80 address space. Now moved to z80.c and **/ +/** made inlined to speed things up. **/ +/*************************************************************/ + +byte RdZ80(register word A) { + if ( (A>=0x6000) && (A<0x10000) ) + return(RAM[A+MEMRELOC]); + else + return(RAM[A]); +} + + +/** PatchZ80() ***********************************************/ +/** Z80 emulation calls this function when it encounters a **/ +/** special patch command (ED FE) provided for user needs. **/ +/*************************************************************/ +void PatchZ80(Z80 *R) {} + +/** InZ80() **************************************************/ +/** Z80 emulation calls this function to read a byte from **/ +/** a given I/O port. **/ +/*************************************************************/ +byte InZ80(register word Port) +{ + static byte KeyCodes[16] = + { + 0x0A,0x0D,0x07,0x0C,0x02,0x03,0x0E,0x05, + 0x01,0x0B,0x06,0x09,0x08,0x04,0x0F,0x0F, + }; + + switch(Port&0xE0) + { + +case 0x40: /* Printer Status */ + if(Adam&&(Port==0x40)) return(0xFF); + break; + +case 0xE0: /* Joysticks Data */ + Port=(Port>>1)&0x01; + Port=JoyMode? + (JoyState[Port]>>8): + (JoyState[Port]&0xF0)|KeyCodes[JoyState[Port]&0x0F]; + return((Port|0xB0)&0x7F); + +case 0xA0: /* VDP Status/Data */ + if(Port&0x01) { Port=VDPStatus;VDPStatus&=0x5F;VKey=1; } + else { Port=VRAM[RVAddr.W];RVAddr.W=(RVAddr.W+1)&0x3FFF; } + return(Port); + } + + /* No such port */ + return(NORAM); +} + +/** OutZ80() *************************************************/ +/** Z80 emulation calls this function to write a byte to a **/ +/** given I/O port. **/ +/*************************************************************/ +void OutZ80(register word Port,register byte Value) +{ + static byte SR,VR; /* Sound and VDP register storage */ + + switch(Port&0xE0) + { + +case 0x80: JoyMode=0;return; +case 0xC0: JoyMode=1;return; +case 0xE0: Write76489(&PSG,Value);return; + +case 0x40: +// if(Adam&&(Port==0x40)) fputc(Value,PrnStream); + return; + +case 0xA0: + if(Port&0x01) + if(VKey) { VR=Value;VKey--; } + else + { + VKey++; + switch(Value&0xC0) + { + case 0x80: VDPOut(Value&0x07,VR);break; + case 0x40: WVAddr.B.l=VR;WVAddr.B.h=Value&0x3F;break; + case 0x00: RVAddr.B.l=VR;RVAddr.B.h=Value; + } + } + else + if(VKey) + { VRAM[WVAddr.W]=Value;WVAddr.W=(WVAddr.W+1)&0x3FFF; } + return; + + } +} + +/** LoopZ80() ************************************************/ +/** Z80 emulation calls this function periodically to check **/ +/** if the system hardware requires any interrupts. **/ +/*************************************************************/ +word LoopZ80(Z80 *R, int * ras) +{ + static byte UCount=0; + static byte ACount=0; + + /* Next scanline */ + CurLine=(CurLine+1)%193; + + /* Refresh scanline if needed */ + if(CurLine<192) + { + if(!UCount) { + (SCR[ScrMode].Refresh)(CurLine); +#if SINGLELINE_RENDERING + emu_DrawLine(XBuf, WIDTH, HEIGHT, CurLine); +#else +#endif + } + R->IPeriod=HPeriod; + return(INT_NONE); + } + + /* End of screen reached... */ + + /* Set IPeriod to the beginning of next screen */ + R->IPeriod=VPeriod-HPeriod*192; + + /* Check joysticks */ + Joysticks(); + + /* Autofire emulation */ + ACount=(ACount+1)&0x07; + if(ACount>3) + { + if(AutoA) { JoyState[0]|=0x0040;JoyState[1]|=0x0040; } + if(AutoB) { JoyState[0]|=0x4000;JoyState[1]|=0x4000; } + } + + + /* Flush any accumulated sound changes */ + Sync76489(&PSG,PSG_FLUSH); + + /* Refresh screen if needed */ + if(UCount) + UCount--; + else + { + UCount=UPeriod-1; + RefreshScreen(); + } + + /* Setting VDPStatus flags */ + VDPStatus=(VDPStatus&0xDF)|0x80; + + /* Checking sprites: */ + if(ScrMode) CheckSprites(); + + /* If exit requested, return INT_QUIT */ +// if(ExitNow) return(INT_QUIT); + *ras = 1; + /* Generate VDP interrupt */ + return(VKey&&(VDP[1]&0x20)? INT_NMI:INT_NONE); +} + +/** VDPOut() *************************************************/ +/** Emulator calls this function to write byte V into a VDP **/ +/** register R. **/ +/*************************************************************/ +void VDPOut(register byte R,register byte V) +{ + register byte J; + + switch(R) + { + case 0: switch(((V&0x0E)>>1)|(VDP[1]&0x18)) + { + case 0x10: J=0;break; + case 0x00: J=1;break; + case 0x01: J=2;break; + case 0x08: J=3;break; + default: J=ScrMode; + } + if(J!=ScrMode) + { + ChrTab=VRAM+((long)(VDP[2]&SCR[J].R2)<<10); + ChrGen=VRAM+((long)(VDP[4]&SCR[J].R4)<<11); + ColTab=VRAM+((long)(VDP[3]&SCR[J].R3)<<6); + SprTab=VRAM+((long)(VDP[5]&SCR[J].R5)<<7); + SprGen=VRAM+((long)VDP[6]<<11); + ScrMode=J; + } + break; + case 1: switch(((VDP[0]&0x0E)>>1)|(V&0x18)) + { + case 0x10: J=0;break; + case 0x00: J=1;break; + case 0x01: J=2;break; + case 0x08: J=3;break; + default: J=ScrMode; + } + if(J!=ScrMode) + { + ChrTab=VRAM+((long)(VDP[2]&SCR[J].R2)<<10); + ChrGen=VRAM+((long)(VDP[4]&SCR[J].R4)<<11); + ColTab=VRAM+((long)(VDP[3]&SCR[J].R3)<<6); + SprTab=VRAM+((long)(VDP[5]&SCR[J].R5)<<7); + SprGen=VRAM+((long)VDP[6]<<11); + ScrMode=J; + } + break; + case 2: ChrTab=VRAM+((long)(V&SCR[ScrMode].R2)<<10);break; + case 3: ColTab=VRAM+((long)(V&SCR[ScrMode].R3)<<6);break; + case 4: ChrGen=VRAM+((long)(V&SCR[ScrMode].R4)<<11);break; + case 5: SprTab=VRAM+((long)(V&SCR[ScrMode].R5)<<7);break; + case 6: V&=0x3F;SprGen=VRAM+((long)V<<11);break; + case 7: FGColor=V>>4;BGColor=V&0x0F;break; + + } + VDP[R]=V;return; +} + +/** CheckSprites() *******************************************/ +/** This function is periodically called to check for the **/ +/** sprite collisions and 5th sprite, and set appropriate **/ +/** bits in the VDP status register. **/ +/*************************************************************/ +void CheckSprites(void) +{ + register word LS,LD; + register byte DH,DV,*PS,*PD,*T; + byte I,J,N,*S,*D; + + VDPStatus=(VDPStatus&0x9F)|0x1F; + for(N=0,S=SprTab;(N<32)&&(S[0]!=208);N++,S+=4); + + if(Sprites16x16) + { + for(J=0,S=SprTab;J240)) + { + DH=S[1]-D[1]; + if((DH<16)||(DH>240)) + { + PS=SprGen+((long)(S[2]&0xFC)<<3); + PD=SprGen+((long)(D[2]&0xFC)<<3); + if(DV<16) PD+=DV; else { DV=256-DV;PS+=DV; } + if(DH>240) { DH=256-DH;T=PS;PS=PD;PD=T; } + while(DV<16) + { + LS=((word)*PS<<8)+*(PS+16); + LD=((word)*PD<<8)+*(PD+16); + if(LD&(LS>>DH)) break; + else { DV++;PS++;PD++; } + } + if(DV<16) { VDPStatus|=0x20;return; } + } + } + } + } + else + { + for(J=0,S=SprTab;J248)) + { + DH=S[1]-D[1]; + if((DH<8)||(DH>248)) + { + PS=SprGen+((long)S[2]<<3); + PD=SprGen+((long)D[2]<<3); + if(DV<8) PD+=DV; else { DV=256-DV;PS+=DV; } + if(DH>248) { DH=256-DH;T=PS;PS=PD;PD=T; } + while((DV<8)&&!(*PD&(*PS>>DH))) { DV++;PS++;PD++; } + if(DV<8) { VDPStatus|=0x20;return; } + } + } + } + } +} + + +/** Play() ***************************************************/ +/** Log and play sound of given frequency (Hz) and volume **/ +/** (0..255) via given channel (0..3). **/ +/*************************************************************/ +void Play(int C,int F,int V) +{ + /* Play actual sound */ +#ifdef HAS_SND + snd_Sound(C,F,V); +#endif +} + + +/** RefreshScreen() ******************************************/ +/** Refresh screen. This function is called in the end of **/ +/** refresh cycle to show the entire screen. **/ +/*************************************************************/ +void RefreshScreen(void) +{ +#if SINGLELINE_RENDERING +#else + emu_DrawScreen(XBuf, WIDTH, HEIGHT, WIDTH); +#endif + emu_DrawVsync(); +} + +/** RefreshBorder() ******************************************/ +/** This function is called from RefreshLine#() to refresh **/ +/** the screen border. **/ +/*************************************************************/ +void RefreshBorder(register byte Y) +{ +// if(!Y) +// memset(XBuf,XPal[BGColor],WIDTH*(HEIGHT-192)/2); +// if(Y==191) +// memset(XBuf+WIDTH*(HEIGHT+192)/2,XPal[BGColor],WIDTH*(HEIGHT-192)/2); +} + +/** RefreshSprites() *****************************************/ +/** This function is called from RefreshLine#() to refresh **/ +/** sprites. **/ +/*************************************************************/ +void RefreshSprites(register byte Y) +{ + register byte C,H; + register byte *P,*PT,*AT; + register int L,K; + register unsigned int M; + + H=Sprites16x16? 16:8; + C=0;M=0;L=0;AT=SprTab-4; + do + { + M<<=1;AT+=4;L++; /* Iterating through SprTab */ + K=AT[0]; /* K = sprite Y coordinate */ + if(K==208) break; /* Iteration terminates if Y=208 */ + if(K>256-H) K-=256; /* Y coordinate may be negative */ + + /* Mark all valid sprites with 1s, break at 4 sprites */ + if((Y>K)&&(Y<=K+H)) { M|=1;if(++C==4) break; } + } + while(L<32); + + for(;M;M>>=1,AT-=4) + if(M&1) + { + C=AT[3]; /* C = sprite attributes */ + L=C&0x80? AT[1]-32:AT[1]; /* Sprite may be shifted left by 32 */ + C&=0x0F; /* C = sprite color */ + + if((L<256)&&(L>-H)&&C) + { + K=AT[0]; /* K = sprite Y coordinate */ + if(K>256-H) K-=256; /* Y coordinate may be negative */ + +#if SINGLELINE_RENDERING + P=XBuf+L; +#else + P=XBuf+WIDTH*(HEIGHT-192)/2+(WIDTH-256)/2+WIDTH*Y+L; +#endif + PT=SprGen+((int)(H>8? AT[2]&0xFC:AT[2])<<3)+Y-K-1; + C=XPal[C]; + + /* Mask 1: clip left sprite boundary */ + K=L>=0? 0x0FFFF:(0x10000>>-L)-1; + /* Mask 2: clip right sprite boundary */ + if(L>256-H) K^=((0x00200>>(H-8))<<(L-257+H))-1; + /* Get and clip the sprite data */ + K&=((int)PT[0]<<8)|(H>8? PT[16]:0x00); + + /* Draw left 8 pixels of the sprite */ + if(K&0xFF00) + { + if(K&0x8000) P[0]=C;if(K&0x4000) P[1]=C; + if(K&0x2000) P[2]=C;if(K&0x1000) P[3]=C; + if(K&0x0800) P[4]=C;if(K&0x0400) P[5]=C; + if(K&0x0200) P[6]=C;if(K&0x0100) P[7]=C; + } + + /* Draw right 8 pixels of the sprite */ + if(K&0x00FF) + { + if(K&0x0080) P[8]=C; if(K&0x0040) P[9]=C; + if(K&0x0020) P[10]=C;if(K&0x0010) P[11]=C; + if(K&0x0008) P[12]=C;if(K&0x0004) P[13]=C; + if(K&0x0002) P[14]=C;if(K&0x0001) P[15]=C; + } + } + } +} + +/** RefreshLine0() *******************************************/ +/** Refresh line Y (0..191) of SCREEN0, including sprites **/ +/** in this line. **/ +/*************************************************************/ +void RefreshLine0(register byte Y) +{ + register byte X,K,Offset,FC,BC; + register byte *P,*T; +#if SINGLELINE_RENDERING + P=XBuf; +#else + P=XBuf+WIDTH*(HEIGHT-192)/2+WIDTH*Y; +#endif + XPal[0]=BGColor? XPal[BGColor]:XPal0; + + if(!ScreenON) memset(P,XPal[BGColor],WIDTH); + else + { + BC=XPal[BGColor]; + FC=XPal[FGColor]; + T=ChrTab+(Y>>3)*40; + Offset=Y&0x07; + + //memset(P,BC,(WIDTH-240)/2); + //P+=(WIDTH-240)/2; + + for(X=0;X<40;X++) + { + K=ChrGen[((int)*T<<3)+Offset]; + P[0]=K&0x80? FC:BC;P[1]=K&0x40? FC:BC; + P[2]=K&0x20? FC:BC;P[3]=K&0x10? FC:BC; + P[4]=K&0x08? FC:BC;P[5]=K&0x04? FC:BC; + P+=6;T++; + } + + //memset(P,BC,(WIDTH-240)/2); + } + + //RefreshBorder(Y); +} + +/** RefreshLine1() *******************************************/ +/** Refresh line Y (0..191) of SCREEN1, including sprites **/ +/** in this line. **/ +/*************************************************************/ +void RefreshLine1(register byte Y) +{ + register byte X,K,Offset,FC,BC; + register byte *P,*T; + +#if SINGLELINE_RENDERING + P=XBuf; +#else + P=XBuf+WIDTH*(HEIGHT-192)/2+WIDTH*Y; +#endif + XPal[0]=BGColor? XPal[BGColor]:XPal0; + + if(!ScreenON) memset(P,XPal[BGColor],WIDTH); + else + { + T=ChrTab+(Y>>3)*32; + Offset=Y&0x07; + + //memset(P,XPal[BGColor],(WIDTH-256)/2); + //P+=(WIDTH-256)/2; + + for(X=0;X<32;X++) + { + K=*T; + BC=ColTab[K>>3]; + K=ChrGen[((int)K<<3)+Offset]; + FC=XPal[BC>>4]; + BC=XPal[BC&0x0F]; + P[0]=K&0x80? FC:BC;P[1]=K&0x40? FC:BC; + P[2]=K&0x20? FC:BC;P[3]=K&0x10? FC:BC; + P[4]=K&0x08? FC:BC;P[5]=K&0x04? FC:BC; + P[6]=K&0x02? FC:BC;P[7]=K&0x01? FC:BC; + P+=8;T++; + } + + //memset(P,XPal[BGColor],(WIDTH-256)/2); + RefreshSprites(Y); + } + + RefreshBorder(Y); +} + +/** RefreshLine2() *******************************************/ +/** Refresh line Y (0..191) of SCREEN2, including sprites **/ +/** in this line. **/ +/*************************************************************/ +void RefreshLine2(register byte Y) +{ + register byte X,K,FC,BC,Offset; + register byte *P,*T,*PGT,*CLT; + register int I; + +#if SINGLELINE_RENDERING + P=XBuf; +#else + P=XBuf+WIDTH*(HEIGHT-192)/2+WIDTH*Y; +#endif + XPal[0]=BGColor? XPal[BGColor]:XPal0; + + if(!ScreenON) memset(P,XPal[BGColor],WIDTH); + else + { + I=(int)(Y&0xC0)<<5; + PGT=ChrGen+I; + CLT=ColTab+I; + T=ChrTab+(Y>>3)*32; + Offset=Y&0x07; + + //memset(P,XPal[BGColor],(WIDTH-256)/2); + //P+=(WIDTH-256)/2; + + for(X=0;X<32;X++) + { + I=((int)*T<<3)+Offset; + K=PGT[I]; + BC=CLT[I]; + FC=XPal[BC>>4]; + BC=XPal[BC&0x0F]; + P[0]=K&0x80? FC:BC;P[1]=K&0x40? FC:BC; + P[2]=K&0x20? FC:BC;P[3]=K&0x10? FC:BC; + P[4]=K&0x08? FC:BC;P[5]=K&0x04? FC:BC; + P[6]=K&0x02? FC:BC;P[7]=K&0x01? FC:BC; + P+=8;T++; + } + + //memset(P,XPal[BGColor],(WIDTH-256)/2); + RefreshSprites(Y); + } + + RefreshBorder(Y); +} + +/** RefreshLine3() *******************************************/ +/** Refresh line Y (0..191) of SCREEN3, including sprites **/ +/** in this line. **/ +/*************************************************************/ +void RefreshLine3(register byte Y) +{ + register byte X,K,Offset; + register byte *P,*T; + +#if SINGLELINE_RENDERING + P=XBuf; +#else + P=XBuf+WIDTH*(HEIGHT-192)/2+WIDTH*Y; +#endif + XPal[0]=BGColor? XPal[BGColor]:XPal0; + + if(!ScreenON) memset(P,XPal[BGColor],WIDTH); + else + { + T=ChrTab+(Y>>3)*32; + Offset=(Y&0x1C)>>2; + + //memset(P,XPal[BGColor],(WIDTH-256)/2); + //P+=(WIDTH-256)/2; + + for(X=0;X<32;X++) + { + K=ChrGen[((int)*T<<3)+Offset]; + P[0]=P[1]=P[2]=P[3]=XPal[K>>4]; + P[4]=P[5]=P[6]=P[7]=XPal[K&0x0F]; + P+=8;T++; + } + + //memset(P,XPal[BGColor],(WIDTH-256)/2); + RefreshSprites(Y); + } + + RefreshBorder(Y); +} diff --git a/MCUME_pico/picocolem/Colem.h b/MCUME_pico/picocolem/Colem.h new file mode 100644 index 0000000..24898aa --- /dev/null +++ b/MCUME_pico/picocolem/Colem.h @@ -0,0 +1,4 @@ +extern void coc_Init(void); +extern void coc_Start(char * CartName); +extern void coc_Step(void); +extern void coc_Stop(void); diff --git a/MCUME_pico/picocolem/SN76489.c b/MCUME_pico/picocolem/SN76489.c new file mode 100644 index 0000000..d359590 --- /dev/null +++ b/MCUME_pico/picocolem/SN76489.c @@ -0,0 +1,98 @@ +/** EMULib Emulation Library *********************************/ +/** **/ +/** SN76489.c **/ +/** **/ +/** This file contains emulation for the SN76489 sound chip **/ +/** produced by Intel. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1996-1998 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +#include "SN76489.h" + +/** Reset76489() *********************************************/ +/** Reset the sound chip. The user has to provide a pointer **/ +/** to a function Sound(Channel,Freq,Volume) used to make **/ +/** actual sound. **/ +/*************************************************************/ +void Reset76489(SN76489 *D,void (*Sound)(int,int,int)) +{ + register int J; + + for(J=0;J<4;J++) D->Volume[J]=D->Freq[J]=0; + D->NoiseMode=D->Buf=D->Changed=0x00; + D->Sync=PSG_ASYNC;D->Sound=Sound; +} + +/** Sync76489() **********************************************/ +/** Flush all accumulated changes by issuing Sound() calls, **/ +/** and set the synchronization on/off. The second argument **/ +/** should be PSG_SYNC, PSG_ASYNC to set/reset sync, or **/ +/** PSG_FLUSH to leave sync mode as it is. **/ +/*************************************************************/ +void Sync76489(SN76489 *D,unsigned char Sync) +{ + register int J,I; + + if(D->Sync&&D->Changed) + { + for(J=0,I=1;J<4;J++,I<<=1) + if(D->Changed&I) + D->Sound(J,D->Freq[J],D->Volume[J]); + } + D->Changed=0x00; + if(Sync!=PSG_FLUSH) D->Sync=Sync; +} + +/** Write76489() *********************************************/ +/** Call this function to output a value V into the sound **/ +/** chip. **/ +/*************************************************************/ +void Write76489(SN76489 *D,unsigned char V) +{ + register unsigned char N,J; + register long L; + + switch(V&0xF0) + { + case 0xE0: + J=V&0x03; + if(J==D->NoiseMode) return; + switch(J) + { + case 0: D->Freq[3]=20000;break; + case 1: D->Freq[3]=10000;break; + case 2: D->Freq[3]=5000;break; + case 3: D->Freq[3]=D->Freq[2];break; + } + N=3;break; + case 0x80: case 0xA0: case 0xC0: + D->Buf=V;return; + case 0x90: case 0xB0: case 0xD0: case 0xF0: + N=(V-0x90)>>5; + J=(~V&0x0F)*16; + if(J==D->Volume[N]) return; + D->Volume[N]=J; + break; + default: + if(!(D->Buf&0xC0)) return; + N=(D->Buf-0x80)>>5; + L=PSG_BASE/((V&0x3F)*16+(D->Buf&0x0F)+1); + if(L>15000) L=0; + if(L==D->Freq[N]) return; + if((N==2)&&(D->NoiseMode==3)) + { + D->Freq[3]=L; + if(D->Sync) D->Changed|=0x08; + else D->Sound(3,D->Freq[3],D->Volume[3]); + } + D->Freq[N]=L; + break; + } + + if(D->Sync) D->Changed|=1<Sound(N,D->Freq[N],D->Volume[N]); +} diff --git a/MCUME_pico/picocolem/SN76489.h b/MCUME_pico/picocolem/SN76489.h new file mode 100644 index 0000000..552fc15 --- /dev/null +++ b/MCUME_pico/picocolem/SN76489.h @@ -0,0 +1,50 @@ +/** EMULib Emulation Library *********************************/ +/** **/ +/** SN76489.c **/ +/** **/ +/** This file contains emulation for the SN76489 sound chip **/ +/** produced by Intel. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1996-1998 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ +#ifndef SN76489_H +#define SN76489_H + +#define PSG_BASE 131072 /* Base frequency for SN76489 */ + +#define PSG_ASYNC 0 /* Asynchronous emulation */ +#define PSG_SYNC 1 /* Synchronous emulation mode */ +#define PSG_FLUSH 2 /* Flush buffers only */ + +typedef struct +{ + int Channel,Freq[4],Volume[4],Sync; + unsigned char NoiseMode,Buf,Changed; + void (*Sound)(int,int,int); +} SN76489; + +/** Reset76489() *********************************************/ +/** Reset the sound chip. The user has to provide a pointer **/ +/** to a function Sound(Channel,Freq,Volume) used to make **/ +/** actual sound. **/ +/*************************************************************/ +void Reset76489(register SN76489 *D,void (*Sound)(int,int,int)); + +/** Sync76489() **********************************************/ +/** Flush all accumulated changes by issuing Sound() calls, **/ +/** and set the synchronization on/off. The second argument **/ +/** should be PSG_SYNC, PSG_ASYNC to set/reset sync, or **/ +/** PSG_FLUSH to leave sync mode as it is. **/ +/*************************************************************/ +void Sync76489(register SN76489 *D,register unsigned char Sync); + +/** Write76489() *********************************************/ +/** Call this function to output a value V into the sound **/ +/** chip. **/ +/*************************************************************/ +void Write76489(register SN76489 *D,register unsigned char V); + +#endif /* SN76489_H */ diff --git a/MCUME_pico/picocolem/Tables.h b/MCUME_pico/picocolem/Tables.h new file mode 100644 index 0000000..3373adf --- /dev/null +++ b/MCUME_pico/picocolem/Tables.h @@ -0,0 +1,447 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** Tables.h **/ +/** **/ +/** This file contains tables of used by Z80 emulation to **/ +/** compute SIGN,ZERO, PARITY flags, and decimal correction **/ +/** There are also timing tables for Z80 opcodes. This file **/ +/** is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-1998 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +static byte Cycles[256] = +{ + 4,10, 7, 6, 4, 4, 7, 4, 4,11, 7, 6, 4, 4, 7, 4, + 8,10, 7, 6, 4, 4, 7, 4,12,11, 7, 6, 4, 4, 7, 4, + 7,10,16, 6, 4, 4, 7, 4, 7,11,16, 6, 4, 4, 7, 4, + 7,10,13, 6,11,11,10, 4, 7,11,13, 6, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 7, 7, 7, 7, 7, 7, 4, 7, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 5,10,10,10,10,11, 7,11, 5,10,10, 0,10,17, 7,11, + 5,10,10,11,10,11, 7,11, 5, 4,10,11,10, 0, 7,11, + 5,10,10,19,10,11, 7,11, 5, 4,10, 4,10, 0, 7,11, + 5,10,10, 4,10,11, 7,11, 5, 6,10, 4,10, 0, 7,11 +}; + +static byte CyclesCB[256] = +{ + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8 +}; + +static byte CyclesED[256] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12,12,15,20, 8,14, 8, 9,12,12,15,20, 0,14, 0, 9, + 12,12,15,20, 0, 0, 8, 9,12,12,15,20, 0, 0, 8, 9, + 12,12,15,20, 0, 0, 0,18,12,12,15,20, 0, 0, 0,18, + 12, 0,15,20, 0, 0, 0, 0,12,12,15,20, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16,16,16,16, 0, 0, 0, 0,16,16,16,16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static byte CyclesXX[256] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 0, 0, 0, 0, 0, 0, + 0,14,20,10, 9, 9, 9, 0, 0,15,20,10, 9, 9, 9, 0, + 0, 0, 0, 0,23,23,19, 0, 0,15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 19,19,19,19,19,19,19,19, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,14, 0,23, 0,15, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0 +}; + +static byte CyclesXXCB[256] = +{ + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0 +}; + +static byte ZSTable[256] = +{ + Z_FLAG,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG +}; + +static byte PZSTable[256] = +{ + Z_FLAG|P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG,P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG,P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0,0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG,P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0,0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG, + P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0,0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG,P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG +}; + +static word DAATable[2048] = +{ + 0x0044,0x0100,0x0200,0x0304,0x0400,0x0504,0x0604,0x0700, + 0x0808,0x090C,0x1010,0x1114,0x1214,0x1310,0x1414,0x1510, + 0x1000,0x1104,0x1204,0x1300,0x1404,0x1500,0x1600,0x1704, + 0x180C,0x1908,0x2030,0x2134,0x2234,0x2330,0x2434,0x2530, + 0x2020,0x2124,0x2224,0x2320,0x2424,0x2520,0x2620,0x2724, + 0x282C,0x2928,0x3034,0x3130,0x3230,0x3334,0x3430,0x3534, + 0x3024,0x3120,0x3220,0x3324,0x3420,0x3524,0x3624,0x3720, + 0x3828,0x392C,0x4010,0x4114,0x4214,0x4310,0x4414,0x4510, + 0x4000,0x4104,0x4204,0x4300,0x4404,0x4500,0x4600,0x4704, + 0x480C,0x4908,0x5014,0x5110,0x5210,0x5314,0x5410,0x5514, + 0x5004,0x5100,0x5200,0x5304,0x5400,0x5504,0x5604,0x5700, + 0x5808,0x590C,0x6034,0x6130,0x6230,0x6334,0x6430,0x6534, + 0x6024,0x6120,0x6220,0x6324,0x6420,0x6524,0x6624,0x6720, + 0x6828,0x692C,0x7030,0x7134,0x7234,0x7330,0x7434,0x7530, + 0x7020,0x7124,0x7224,0x7320,0x7424,0x7520,0x7620,0x7724, + 0x782C,0x7928,0x8090,0x8194,0x8294,0x8390,0x8494,0x8590, + 0x8080,0x8184,0x8284,0x8380,0x8484,0x8580,0x8680,0x8784, + 0x888C,0x8988,0x9094,0x9190,0x9290,0x9394,0x9490,0x9594, + 0x9084,0x9180,0x9280,0x9384,0x9480,0x9584,0x9684,0x9780, + 0x9888,0x998C,0x0055,0x0111,0x0211,0x0315,0x0411,0x0515, + 0x0045,0x0101,0x0201,0x0305,0x0401,0x0505,0x0605,0x0701, + 0x0809,0x090D,0x1011,0x1115,0x1215,0x1311,0x1415,0x1511, + 0x1001,0x1105,0x1205,0x1301,0x1405,0x1501,0x1601,0x1705, + 0x180D,0x1909,0x2031,0x2135,0x2235,0x2331,0x2435,0x2531, + 0x2021,0x2125,0x2225,0x2321,0x2425,0x2521,0x2621,0x2725, + 0x282D,0x2929,0x3035,0x3131,0x3231,0x3335,0x3431,0x3535, + 0x3025,0x3121,0x3221,0x3325,0x3421,0x3525,0x3625,0x3721, + 0x3829,0x392D,0x4011,0x4115,0x4215,0x4311,0x4415,0x4511, + 0x4001,0x4105,0x4205,0x4301,0x4405,0x4501,0x4601,0x4705, + 0x480D,0x4909,0x5015,0x5111,0x5211,0x5315,0x5411,0x5515, + 0x5005,0x5101,0x5201,0x5305,0x5401,0x5505,0x5605,0x5701, + 0x5809,0x590D,0x6035,0x6131,0x6231,0x6335,0x6431,0x6535, + 0x6025,0x6121,0x6221,0x6325,0x6421,0x6525,0x6625,0x6721, + 0x6829,0x692D,0x7031,0x7135,0x7235,0x7331,0x7435,0x7531, + 0x7021,0x7125,0x7225,0x7321,0x7425,0x7521,0x7621,0x7725, + 0x782D,0x7929,0x8091,0x8195,0x8295,0x8391,0x8495,0x8591, + 0x8081,0x8185,0x8285,0x8381,0x8485,0x8581,0x8681,0x8785, + 0x888D,0x8989,0x9095,0x9191,0x9291,0x9395,0x9491,0x9595, + 0x9085,0x9181,0x9281,0x9385,0x9481,0x9585,0x9685,0x9781, + 0x9889,0x998D,0xA0B5,0xA1B1,0xA2B1,0xA3B5,0xA4B1,0xA5B5, + 0xA0A5,0xA1A1,0xA2A1,0xA3A5,0xA4A1,0xA5A5,0xA6A5,0xA7A1, + 0xA8A9,0xA9AD,0xB0B1,0xB1B5,0xB2B5,0xB3B1,0xB4B5,0xB5B1, + 0xB0A1,0xB1A5,0xB2A5,0xB3A1,0xB4A5,0xB5A1,0xB6A1,0xB7A5, + 0xB8AD,0xB9A9,0xC095,0xC191,0xC291,0xC395,0xC491,0xC595, + 0xC085,0xC181,0xC281,0xC385,0xC481,0xC585,0xC685,0xC781, + 0xC889,0xC98D,0xD091,0xD195,0xD295,0xD391,0xD495,0xD591, + 0xD081,0xD185,0xD285,0xD381,0xD485,0xD581,0xD681,0xD785, + 0xD88D,0xD989,0xE0B1,0xE1B5,0xE2B5,0xE3B1,0xE4B5,0xE5B1, + 0xE0A1,0xE1A5,0xE2A5,0xE3A1,0xE4A5,0xE5A1,0xE6A1,0xE7A5, + 0xE8AD,0xE9A9,0xF0B5,0xF1B1,0xF2B1,0xF3B5,0xF4B1,0xF5B5, + 0xF0A5,0xF1A1,0xF2A1,0xF3A5,0xF4A1,0xF5A5,0xF6A5,0xF7A1, + 0xF8A9,0xF9AD,0x0055,0x0111,0x0211,0x0315,0x0411,0x0515, + 0x0045,0x0101,0x0201,0x0305,0x0401,0x0505,0x0605,0x0701, + 0x0809,0x090D,0x1011,0x1115,0x1215,0x1311,0x1415,0x1511, + 0x1001,0x1105,0x1205,0x1301,0x1405,0x1501,0x1601,0x1705, + 0x180D,0x1909,0x2031,0x2135,0x2235,0x2331,0x2435,0x2531, + 0x2021,0x2125,0x2225,0x2321,0x2425,0x2521,0x2621,0x2725, + 0x282D,0x2929,0x3035,0x3131,0x3231,0x3335,0x3431,0x3535, + 0x3025,0x3121,0x3221,0x3325,0x3421,0x3525,0x3625,0x3721, + 0x3829,0x392D,0x4011,0x4115,0x4215,0x4311,0x4415,0x4511, + 0x4001,0x4105,0x4205,0x4301,0x4405,0x4501,0x4601,0x4705, + 0x480D,0x4909,0x5015,0x5111,0x5211,0x5315,0x5411,0x5515, + 0x5005,0x5101,0x5201,0x5305,0x5401,0x5505,0x5605,0x5701, + 0x5809,0x590D,0x6035,0x6131,0x6231,0x6335,0x6431,0x6535, + 0x0604,0x0700,0x0808,0x090C,0x0A0C,0x0B08,0x0C0C,0x0D08, + 0x0E08,0x0F0C,0x1010,0x1114,0x1214,0x1310,0x1414,0x1510, + 0x1600,0x1704,0x180C,0x1908,0x1A08,0x1B0C,0x1C08,0x1D0C, + 0x1E0C,0x1F08,0x2030,0x2134,0x2234,0x2330,0x2434,0x2530, + 0x2620,0x2724,0x282C,0x2928,0x2A28,0x2B2C,0x2C28,0x2D2C, + 0x2E2C,0x2F28,0x3034,0x3130,0x3230,0x3334,0x3430,0x3534, + 0x3624,0x3720,0x3828,0x392C,0x3A2C,0x3B28,0x3C2C,0x3D28, + 0x3E28,0x3F2C,0x4010,0x4114,0x4214,0x4310,0x4414,0x4510, + 0x4600,0x4704,0x480C,0x4908,0x4A08,0x4B0C,0x4C08,0x4D0C, + 0x4E0C,0x4F08,0x5014,0x5110,0x5210,0x5314,0x5410,0x5514, + 0x5604,0x5700,0x5808,0x590C,0x5A0C,0x5B08,0x5C0C,0x5D08, + 0x5E08,0x5F0C,0x6034,0x6130,0x6230,0x6334,0x6430,0x6534, + 0x6624,0x6720,0x6828,0x692C,0x6A2C,0x6B28,0x6C2C,0x6D28, + 0x6E28,0x6F2C,0x7030,0x7134,0x7234,0x7330,0x7434,0x7530, + 0x7620,0x7724,0x782C,0x7928,0x7A28,0x7B2C,0x7C28,0x7D2C, + 0x7E2C,0x7F28,0x8090,0x8194,0x8294,0x8390,0x8494,0x8590, + 0x8680,0x8784,0x888C,0x8988,0x8A88,0x8B8C,0x8C88,0x8D8C, + 0x8E8C,0x8F88,0x9094,0x9190,0x9290,0x9394,0x9490,0x9594, + 0x9684,0x9780,0x9888,0x998C,0x9A8C,0x9B88,0x9C8C,0x9D88, + 0x9E88,0x9F8C,0x0055,0x0111,0x0211,0x0315,0x0411,0x0515, + 0x0605,0x0701,0x0809,0x090D,0x0A0D,0x0B09,0x0C0D,0x0D09, + 0x0E09,0x0F0D,0x1011,0x1115,0x1215,0x1311,0x1415,0x1511, + 0x1601,0x1705,0x180D,0x1909,0x1A09,0x1B0D,0x1C09,0x1D0D, + 0x1E0D,0x1F09,0x2031,0x2135,0x2235,0x2331,0x2435,0x2531, + 0x2621,0x2725,0x282D,0x2929,0x2A29,0x2B2D,0x2C29,0x2D2D, + 0x2E2D,0x2F29,0x3035,0x3131,0x3231,0x3335,0x3431,0x3535, + 0x3625,0x3721,0x3829,0x392D,0x3A2D,0x3B29,0x3C2D,0x3D29, + 0x3E29,0x3F2D,0x4011,0x4115,0x4215,0x4311,0x4415,0x4511, + 0x4601,0x4705,0x480D,0x4909,0x4A09,0x4B0D,0x4C09,0x4D0D, + 0x4E0D,0x4F09,0x5015,0x5111,0x5211,0x5315,0x5411,0x5515, + 0x5605,0x5701,0x5809,0x590D,0x5A0D,0x5B09,0x5C0D,0x5D09, + 0x5E09,0x5F0D,0x6035,0x6131,0x6231,0x6335,0x6431,0x6535, + 0x6625,0x6721,0x6829,0x692D,0x6A2D,0x6B29,0x6C2D,0x6D29, + 0x6E29,0x6F2D,0x7031,0x7135,0x7235,0x7331,0x7435,0x7531, + 0x7621,0x7725,0x782D,0x7929,0x7A29,0x7B2D,0x7C29,0x7D2D, + 0x7E2D,0x7F29,0x8091,0x8195,0x8295,0x8391,0x8495,0x8591, + 0x8681,0x8785,0x888D,0x8989,0x8A89,0x8B8D,0x8C89,0x8D8D, + 0x8E8D,0x8F89,0x9095,0x9191,0x9291,0x9395,0x9491,0x9595, + 0x9685,0x9781,0x9889,0x998D,0x9A8D,0x9B89,0x9C8D,0x9D89, + 0x9E89,0x9F8D,0xA0B5,0xA1B1,0xA2B1,0xA3B5,0xA4B1,0xA5B5, + 0xA6A5,0xA7A1,0xA8A9,0xA9AD,0xAAAD,0xABA9,0xACAD,0xADA9, + 0xAEA9,0xAFAD,0xB0B1,0xB1B5,0xB2B5,0xB3B1,0xB4B5,0xB5B1, + 0xB6A1,0xB7A5,0xB8AD,0xB9A9,0xBAA9,0xBBAD,0xBCA9,0xBDAD, + 0xBEAD,0xBFA9,0xC095,0xC191,0xC291,0xC395,0xC491,0xC595, + 0xC685,0xC781,0xC889,0xC98D,0xCA8D,0xCB89,0xCC8D,0xCD89, + 0xCE89,0xCF8D,0xD091,0xD195,0xD295,0xD391,0xD495,0xD591, + 0xD681,0xD785,0xD88D,0xD989,0xDA89,0xDB8D,0xDC89,0xDD8D, + 0xDE8D,0xDF89,0xE0B1,0xE1B5,0xE2B5,0xE3B1,0xE4B5,0xE5B1, + 0xE6A1,0xE7A5,0xE8AD,0xE9A9,0xEAA9,0xEBAD,0xECA9,0xEDAD, + 0xEEAD,0xEFA9,0xF0B5,0xF1B1,0xF2B1,0xF3B5,0xF4B1,0xF5B5, + 0xF6A5,0xF7A1,0xF8A9,0xF9AD,0xFAAD,0xFBA9,0xFCAD,0xFDA9, + 0xFEA9,0xFFAD,0x0055,0x0111,0x0211,0x0315,0x0411,0x0515, + 0x0605,0x0701,0x0809,0x090D,0x0A0D,0x0B09,0x0C0D,0x0D09, + 0x0E09,0x0F0D,0x1011,0x1115,0x1215,0x1311,0x1415,0x1511, + 0x1601,0x1705,0x180D,0x1909,0x1A09,0x1B0D,0x1C09,0x1D0D, + 0x1E0D,0x1F09,0x2031,0x2135,0x2235,0x2331,0x2435,0x2531, + 0x2621,0x2725,0x282D,0x2929,0x2A29,0x2B2D,0x2C29,0x2D2D, + 0x2E2D,0x2F29,0x3035,0x3131,0x3231,0x3335,0x3431,0x3535, + 0x3625,0x3721,0x3829,0x392D,0x3A2D,0x3B29,0x3C2D,0x3D29, + 0x3E29,0x3F2D,0x4011,0x4115,0x4215,0x4311,0x4415,0x4511, + 0x4601,0x4705,0x480D,0x4909,0x4A09,0x4B0D,0x4C09,0x4D0D, + 0x4E0D,0x4F09,0x5015,0x5111,0x5211,0x5315,0x5411,0x5515, + 0x5605,0x5701,0x5809,0x590D,0x5A0D,0x5B09,0x5C0D,0x5D09, + 0x5E09,0x5F0D,0x6035,0x6131,0x6231,0x6335,0x6431,0x6535, + 0x0046,0x0102,0x0202,0x0306,0x0402,0x0506,0x0606,0x0702, + 0x080A,0x090E,0x0402,0x0506,0x0606,0x0702,0x080A,0x090E, + 0x1002,0x1106,0x1206,0x1302,0x1406,0x1502,0x1602,0x1706, + 0x180E,0x190A,0x1406,0x1502,0x1602,0x1706,0x180E,0x190A, + 0x2022,0x2126,0x2226,0x2322,0x2426,0x2522,0x2622,0x2726, + 0x282E,0x292A,0x2426,0x2522,0x2622,0x2726,0x282E,0x292A, + 0x3026,0x3122,0x3222,0x3326,0x3422,0x3526,0x3626,0x3722, + 0x382A,0x392E,0x3422,0x3526,0x3626,0x3722,0x382A,0x392E, + 0x4002,0x4106,0x4206,0x4302,0x4406,0x4502,0x4602,0x4706, + 0x480E,0x490A,0x4406,0x4502,0x4602,0x4706,0x480E,0x490A, + 0x5006,0x5102,0x5202,0x5306,0x5402,0x5506,0x5606,0x5702, + 0x580A,0x590E,0x5402,0x5506,0x5606,0x5702,0x580A,0x590E, + 0x6026,0x6122,0x6222,0x6326,0x6422,0x6526,0x6626,0x6722, + 0x682A,0x692E,0x6422,0x6526,0x6626,0x6722,0x682A,0x692E, + 0x7022,0x7126,0x7226,0x7322,0x7426,0x7522,0x7622,0x7726, + 0x782E,0x792A,0x7426,0x7522,0x7622,0x7726,0x782E,0x792A, + 0x8082,0x8186,0x8286,0x8382,0x8486,0x8582,0x8682,0x8786, + 0x888E,0x898A,0x8486,0x8582,0x8682,0x8786,0x888E,0x898A, + 0x9086,0x9182,0x9282,0x9386,0x9482,0x9586,0x9686,0x9782, + 0x988A,0x998E,0x3423,0x3527,0x3627,0x3723,0x382B,0x392F, + 0x4003,0x4107,0x4207,0x4303,0x4407,0x4503,0x4603,0x4707, + 0x480F,0x490B,0x4407,0x4503,0x4603,0x4707,0x480F,0x490B, + 0x5007,0x5103,0x5203,0x5307,0x5403,0x5507,0x5607,0x5703, + 0x580B,0x590F,0x5403,0x5507,0x5607,0x5703,0x580B,0x590F, + 0x6027,0x6123,0x6223,0x6327,0x6423,0x6527,0x6627,0x6723, + 0x682B,0x692F,0x6423,0x6527,0x6627,0x6723,0x682B,0x692F, + 0x7023,0x7127,0x7227,0x7323,0x7427,0x7523,0x7623,0x7727, + 0x782F,0x792B,0x7427,0x7523,0x7623,0x7727,0x782F,0x792B, + 0x8083,0x8187,0x8287,0x8383,0x8487,0x8583,0x8683,0x8787, + 0x888F,0x898B,0x8487,0x8583,0x8683,0x8787,0x888F,0x898B, + 0x9087,0x9183,0x9283,0x9387,0x9483,0x9587,0x9687,0x9783, + 0x988B,0x998F,0x9483,0x9587,0x9687,0x9783,0x988B,0x998F, + 0xA0A7,0xA1A3,0xA2A3,0xA3A7,0xA4A3,0xA5A7,0xA6A7,0xA7A3, + 0xA8AB,0xA9AF,0xA4A3,0xA5A7,0xA6A7,0xA7A3,0xA8AB,0xA9AF, + 0xB0A3,0xB1A7,0xB2A7,0xB3A3,0xB4A7,0xB5A3,0xB6A3,0xB7A7, + 0xB8AF,0xB9AB,0xB4A7,0xB5A3,0xB6A3,0xB7A7,0xB8AF,0xB9AB, + 0xC087,0xC183,0xC283,0xC387,0xC483,0xC587,0xC687,0xC783, + 0xC88B,0xC98F,0xC483,0xC587,0xC687,0xC783,0xC88B,0xC98F, + 0xD083,0xD187,0xD287,0xD383,0xD487,0xD583,0xD683,0xD787, + 0xD88F,0xD98B,0xD487,0xD583,0xD683,0xD787,0xD88F,0xD98B, + 0xE0A3,0xE1A7,0xE2A7,0xE3A3,0xE4A7,0xE5A3,0xE6A3,0xE7A7, + 0xE8AF,0xE9AB,0xE4A7,0xE5A3,0xE6A3,0xE7A7,0xE8AF,0xE9AB, + 0xF0A7,0xF1A3,0xF2A3,0xF3A7,0xF4A3,0xF5A7,0xF6A7,0xF7A3, + 0xF8AB,0xF9AF,0xF4A3,0xF5A7,0xF6A7,0xF7A3,0xF8AB,0xF9AF, + 0x0047,0x0103,0x0203,0x0307,0x0403,0x0507,0x0607,0x0703, + 0x080B,0x090F,0x0403,0x0507,0x0607,0x0703,0x080B,0x090F, + 0x1003,0x1107,0x1207,0x1303,0x1407,0x1503,0x1603,0x1707, + 0x180F,0x190B,0x1407,0x1503,0x1603,0x1707,0x180F,0x190B, + 0x2023,0x2127,0x2227,0x2323,0x2427,0x2523,0x2623,0x2727, + 0x282F,0x292B,0x2427,0x2523,0x2623,0x2727,0x282F,0x292B, + 0x3027,0x3123,0x3223,0x3327,0x3423,0x3527,0x3627,0x3723, + 0x382B,0x392F,0x3423,0x3527,0x3627,0x3723,0x382B,0x392F, + 0x4003,0x4107,0x4207,0x4303,0x4407,0x4503,0x4603,0x4707, + 0x480F,0x490B,0x4407,0x4503,0x4603,0x4707,0x480F,0x490B, + 0x5007,0x5103,0x5203,0x5307,0x5403,0x5507,0x5607,0x5703, + 0x580B,0x590F,0x5403,0x5507,0x5607,0x5703,0x580B,0x590F, + 0x6027,0x6123,0x6223,0x6327,0x6423,0x6527,0x6627,0x6723, + 0x682B,0x692F,0x6423,0x6527,0x6627,0x6723,0x682B,0x692F, + 0x7023,0x7127,0x7227,0x7323,0x7427,0x7523,0x7623,0x7727, + 0x782F,0x792B,0x7427,0x7523,0x7623,0x7727,0x782F,0x792B, + 0x8083,0x8187,0x8287,0x8383,0x8487,0x8583,0x8683,0x8787, + 0x888F,0x898B,0x8487,0x8583,0x8683,0x8787,0x888F,0x898B, + 0x9087,0x9183,0x9283,0x9387,0x9483,0x9587,0x9687,0x9783, + 0x988B,0x998F,0x9483,0x9587,0x9687,0x9783,0x988B,0x998F, + 0xFABE,0xFBBA,0xFCBE,0xFDBA,0xFEBA,0xFFBE,0x0046,0x0102, + 0x0202,0x0306,0x0402,0x0506,0x0606,0x0702,0x080A,0x090E, + 0x0A1E,0x0B1A,0x0C1E,0x0D1A,0x0E1A,0x0F1E,0x1002,0x1106, + 0x1206,0x1302,0x1406,0x1502,0x1602,0x1706,0x180E,0x190A, + 0x1A1A,0x1B1E,0x1C1A,0x1D1E,0x1E1E,0x1F1A,0x2022,0x2126, + 0x2226,0x2322,0x2426,0x2522,0x2622,0x2726,0x282E,0x292A, + 0x2A3A,0x2B3E,0x2C3A,0x2D3E,0x2E3E,0x2F3A,0x3026,0x3122, + 0x3222,0x3326,0x3422,0x3526,0x3626,0x3722,0x382A,0x392E, + 0x3A3E,0x3B3A,0x3C3E,0x3D3A,0x3E3A,0x3F3E,0x4002,0x4106, + 0x4206,0x4302,0x4406,0x4502,0x4602,0x4706,0x480E,0x490A, + 0x4A1A,0x4B1E,0x4C1A,0x4D1E,0x4E1E,0x4F1A,0x5006,0x5102, + 0x5202,0x5306,0x5402,0x5506,0x5606,0x5702,0x580A,0x590E, + 0x5A1E,0x5B1A,0x5C1E,0x5D1A,0x5E1A,0x5F1E,0x6026,0x6122, + 0x6222,0x6326,0x6422,0x6526,0x6626,0x6722,0x682A,0x692E, + 0x6A3E,0x6B3A,0x6C3E,0x6D3A,0x6E3A,0x6F3E,0x7022,0x7126, + 0x7226,0x7322,0x7426,0x7522,0x7622,0x7726,0x782E,0x792A, + 0x7A3A,0x7B3E,0x7C3A,0x7D3E,0x7E3E,0x7F3A,0x8082,0x8186, + 0x8286,0x8382,0x8486,0x8582,0x8682,0x8786,0x888E,0x898A, + 0x8A9A,0x8B9E,0x8C9A,0x8D9E,0x8E9E,0x8F9A,0x9086,0x9182, + 0x9282,0x9386,0x3423,0x3527,0x3627,0x3723,0x382B,0x392F, + 0x3A3F,0x3B3B,0x3C3F,0x3D3B,0x3E3B,0x3F3F,0x4003,0x4107, + 0x4207,0x4303,0x4407,0x4503,0x4603,0x4707,0x480F,0x490B, + 0x4A1B,0x4B1F,0x4C1B,0x4D1F,0x4E1F,0x4F1B,0x5007,0x5103, + 0x5203,0x5307,0x5403,0x5507,0x5607,0x5703,0x580B,0x590F, + 0x5A1F,0x5B1B,0x5C1F,0x5D1B,0x5E1B,0x5F1F,0x6027,0x6123, + 0x6223,0x6327,0x6423,0x6527,0x6627,0x6723,0x682B,0x692F, + 0x6A3F,0x6B3B,0x6C3F,0x6D3B,0x6E3B,0x6F3F,0x7023,0x7127, + 0x7227,0x7323,0x7427,0x7523,0x7623,0x7727,0x782F,0x792B, + 0x7A3B,0x7B3F,0x7C3B,0x7D3F,0x7E3F,0x7F3B,0x8083,0x8187, + 0x8287,0x8383,0x8487,0x8583,0x8683,0x8787,0x888F,0x898B, + 0x8A9B,0x8B9F,0x8C9B,0x8D9F,0x8E9F,0x8F9B,0x9087,0x9183, + 0x9283,0x9387,0x9483,0x9587,0x9687,0x9783,0x988B,0x998F, + 0x9A9F,0x9B9B,0x9C9F,0x9D9B,0x9E9B,0x9F9F,0xA0A7,0xA1A3, + 0xA2A3,0xA3A7,0xA4A3,0xA5A7,0xA6A7,0xA7A3,0xA8AB,0xA9AF, + 0xAABF,0xABBB,0xACBF,0xADBB,0xAEBB,0xAFBF,0xB0A3,0xB1A7, + 0xB2A7,0xB3A3,0xB4A7,0xB5A3,0xB6A3,0xB7A7,0xB8AF,0xB9AB, + 0xBABB,0xBBBF,0xBCBB,0xBDBF,0xBEBF,0xBFBB,0xC087,0xC183, + 0xC283,0xC387,0xC483,0xC587,0xC687,0xC783,0xC88B,0xC98F, + 0xCA9F,0xCB9B,0xCC9F,0xCD9B,0xCE9B,0xCF9F,0xD083,0xD187, + 0xD287,0xD383,0xD487,0xD583,0xD683,0xD787,0xD88F,0xD98B, + 0xDA9B,0xDB9F,0xDC9B,0xDD9F,0xDE9F,0xDF9B,0xE0A3,0xE1A7, + 0xE2A7,0xE3A3,0xE4A7,0xE5A3,0xE6A3,0xE7A7,0xE8AF,0xE9AB, + 0xEABB,0xEBBF,0xECBB,0xEDBF,0xEEBF,0xEFBB,0xF0A7,0xF1A3, + 0xF2A3,0xF3A7,0xF4A3,0xF5A7,0xF6A7,0xF7A3,0xF8AB,0xF9AF, + 0xFABF,0xFBBB,0xFCBF,0xFDBB,0xFEBB,0xFFBF,0x0047,0x0103, + 0x0203,0x0307,0x0403,0x0507,0x0607,0x0703,0x080B,0x090F, + 0x0A1F,0x0B1B,0x0C1F,0x0D1B,0x0E1B,0x0F1F,0x1003,0x1107, + 0x1207,0x1303,0x1407,0x1503,0x1603,0x1707,0x180F,0x190B, + 0x1A1B,0x1B1F,0x1C1B,0x1D1F,0x1E1F,0x1F1B,0x2023,0x2127, + 0x2227,0x2323,0x2427,0x2523,0x2623,0x2727,0x282F,0x292B, + 0x2A3B,0x2B3F,0x2C3B,0x2D3F,0x2E3F,0x2F3B,0x3027,0x3123, + 0x3223,0x3327,0x3423,0x3527,0x3627,0x3723,0x382B,0x392F, + 0x3A3F,0x3B3B,0x3C3F,0x3D3B,0x3E3B,0x3F3F,0x4003,0x4107, + 0x4207,0x4303,0x4407,0x4503,0x4603,0x4707,0x480F,0x490B, + 0x4A1B,0x4B1F,0x4C1B,0x4D1F,0x4E1F,0x4F1B,0x5007,0x5103, + 0x5203,0x5307,0x5403,0x5507,0x5607,0x5703,0x580B,0x590F, + 0x5A1F,0x5B1B,0x5C1F,0x5D1B,0x5E1B,0x5F1F,0x6027,0x6123, + 0x6223,0x6327,0x6423,0x6527,0x6627,0x6723,0x682B,0x692F, + 0x6A3F,0x6B3B,0x6C3F,0x6D3B,0x6E3B,0x6F3F,0x7023,0x7127, + 0x7227,0x7323,0x7427,0x7523,0x7623,0x7727,0x782F,0x792B, + 0x7A3B,0x7B3F,0x7C3B,0x7D3F,0x7E3F,0x7F3B,0x8083,0x8187, + 0x8287,0x8383,0x8487,0x8583,0x8683,0x8787,0x888F,0x898B, + 0x8A9B,0x8B9F,0x8C9B,0x8D9F,0x8E9F,0x8F9B,0x9087,0x9183, + 0x9283,0x9387,0x9483,0x9587,0x9687,0x9783,0x988B,0x998F +}; diff --git a/MCUME_pico/picocolem/Z80.c b/MCUME_pico/picocolem/Z80.c new file mode 100644 index 0000000..7da58db --- /dev/null +++ b/MCUME_pico/picocolem/Z80.c @@ -0,0 +1,583 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** Z80.c **/ +/** **/ +/** This file contains implementation for Z80 CPU. Don't **/ +/** forget to provide RdZ80(), WrZ80(), InZ80(), OutZ80(), **/ +/** LoopZ80(), and PatchZ80() functions to accomodate the **/ +/** emulated machine's architecture. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-1998 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ +#include "options.h" +#include "Z80.h" +#include "Tables.h" +//#include +#define printf(...) + +/** INLINE ***************************************************/ +/** Different compilers inline C functions differently. **/ +/*************************************************************/ +#ifdef __GNUC__ +#define INLINE inline +#else +#define INLINE static +#endif + +/** System-Dependent Stuff ***********************************/ +/** This is system-dependent code put here to speed things **/ +/** up. It has to stay inlined to be fast. **/ +/*************************************************************/ +#ifdef COLEM +extern byte *RAM; +INLINE byte RdZ80(word A) { return(RAM[A]); } +#endif +#ifdef MG +extern byte *Page[]; +INLINE byte RdZ80(word A) { return(Page[A>>13][A&0x1FFF]); } +#endif +#ifdef FMSX +extern byte *RAM[],PSL[],SSLReg; +INLINE byte RdZ80(word A) +{ + if(A!=0xFFFF) return(RAM[A>>13][A&0x1FFF]); + else return((PSL[3]==3)? ~SSLReg:RAM[7][0x1FFF]); +} +#endif + +#define S(Fl) R->AF.B.l|=Fl +#define R(Fl) R->AF.B.l&=~(Fl) +#define FLAGS(Rg,Fl) R->AF.B.l=Fl|ZSTable[Rg] + +#define M_RLC(Rg) \ + R->AF.B.l=Rg>>7;Rg=(Rg<<1)|R->AF.B.l;R->AF.B.l|=PZSTable[Rg] +#define M_RRC(Rg) \ + R->AF.B.l=Rg&0x01;Rg=(Rg>>1)|(R->AF.B.l<<7);R->AF.B.l|=PZSTable[Rg] +#define M_RL(Rg) \ + if(Rg&0x80) \ + { \ + Rg=(Rg<<1)|(R->AF.B.l&C_FLAG); \ + R->AF.B.l=PZSTable[Rg]|C_FLAG; \ + } \ + else \ + { \ + Rg=(Rg<<1)|(R->AF.B.l&C_FLAG); \ + R->AF.B.l=PZSTable[Rg]; \ + } +#define M_RR(Rg) \ + if(Rg&0x01) \ + { \ + Rg=(Rg>>1)|(R->AF.B.l<<7); \ + R->AF.B.l=PZSTable[Rg]|C_FLAG; \ + } \ + else \ + { \ + Rg=(Rg>>1)|(R->AF.B.l<<7); \ + R->AF.B.l=PZSTable[Rg]; \ + } + +#define M_SLA(Rg) \ + R->AF.B.l=Rg>>7;Rg<<=1;R->AF.B.l|=PZSTable[Rg] +#define M_SRA(Rg) \ + R->AF.B.l=Rg&C_FLAG;Rg=(Rg>>1)|(Rg&0x80);R->AF.B.l|=PZSTable[Rg] + +#define M_SLL(Rg) \ + R->AF.B.l=Rg>>7;Rg=(Rg<<1)|0x01;R->AF.B.l|=PZSTable[Rg] +#define M_SRL(Rg) \ + R->AF.B.l=Rg&0x01;Rg>>=1;R->AF.B.l|=PZSTable[Rg] + +#define M_BIT(Bit,Rg) \ + R->AF.B.l=(R->AF.B.l&~(N_FLAG|Z_FLAG))|H_FLAG|(Rg&(1<Rg.B.l=RdZ80(R->SP.W++);R->Rg.B.h=RdZ80(R->SP.W++) +#define M_PUSH(Rg) \ + WrZ80(--R->SP.W,R->Rg.B.h);WrZ80(--R->SP.W,R->Rg.B.l) + +#define M_CALL \ + J.B.l=RdZ80(R->PC.W++);J.B.h=RdZ80(R->PC.W++); \ + WrZ80(--R->SP.W,R->PC.B.h);WrZ80(--R->SP.W,R->PC.B.l); \ + R->PC.W=J.W + +#define M_JP J.B.l=RdZ80(R->PC.W++);J.B.h=RdZ80(R->PC.W);R->PC.W=J.W +#define M_JR R->PC.W+=(offset)RdZ80(R->PC.W)+1 +#define M_RET R->PC.B.l=RdZ80(R->SP.W++);R->PC.B.h=RdZ80(R->SP.W++) + +#define M_RST(Ad) \ + WrZ80(--R->SP.W,R->PC.B.h);WrZ80(--R->SP.W,R->PC.B.l);R->PC.W=Ad + +#define M_LDWORD(Rg) \ + R->Rg.B.l=RdZ80(R->PC.W++);R->Rg.B.h=RdZ80(R->PC.W++) + +#define M_ADD(Rg) \ + J.W=R->AF.B.h+Rg; \ + R->AF.B.l= \ + (~(R->AF.B.h^Rg)&(Rg^J.B.l)&0x80? V_FLAG:0)| \ + J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG); \ + R->AF.B.h=J.B.l + +#define M_SUB(Rg) \ + J.W=R->AF.B.h-Rg; \ + R->AF.B.l= \ + ((R->AF.B.h^Rg)&(R->AF.B.h^J.B.l)&0x80? V_FLAG:0)| \ + N_FLAG|-J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG); \ + R->AF.B.h=J.B.l + +#define M_ADC(Rg) \ + J.W=R->AF.B.h+Rg+(R->AF.B.l&C_FLAG); \ + R->AF.B.l= \ + (~(R->AF.B.h^Rg)&(Rg^J.B.l)&0x80? V_FLAG:0)| \ + J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG); \ + R->AF.B.h=J.B.l + +#define M_SBC(Rg) \ + J.W=R->AF.B.h-Rg-(R->AF.B.l&C_FLAG); \ + R->AF.B.l= \ + ((R->AF.B.h^Rg)&(R->AF.B.h^J.B.l)&0x80? V_FLAG:0)| \ + N_FLAG|-J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG); \ + R->AF.B.h=J.B.l + +#define M_CP(Rg) \ + J.W=R->AF.B.h-Rg; \ + R->AF.B.l= \ + ((R->AF.B.h^Rg)&(R->AF.B.h^J.B.l)&0x80? V_FLAG:0)| \ + N_FLAG|-J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG) + +#define M_AND(Rg) R->AF.B.h&=Rg;R->AF.B.l=H_FLAG|PZSTable[R->AF.B.h] +#define M_OR(Rg) R->AF.B.h|=Rg;R->AF.B.l=PZSTable[R->AF.B.h] +#define M_XOR(Rg) R->AF.B.h^=Rg;R->AF.B.l=PZSTable[R->AF.B.h] +#define M_IN(Rg) Rg=InZ80(R->BC.B.l);R->AF.B.l=PZSTable[Rg]|(R->AF.B.l&C_FLAG) + +#define M_INC(Rg) \ + Rg++; \ + R->AF.B.l= \ + (R->AF.B.l&C_FLAG)|ZSTable[Rg]| \ + (Rg==0x80? V_FLAG:0)|(Rg&0x0F? 0:H_FLAG) + +#define M_DEC(Rg) \ + Rg--; \ + R->AF.B.l= \ + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[Rg]| \ + (Rg==0x7F? V_FLAG:0)|((Rg&0x0F)==0x0F? H_FLAG:0) + +#define M_ADDW(Rg1,Rg2) \ + J.W=(R->Rg1.W+R->Rg2.W)&0xFFFF; \ + R->AF.B.l= \ + (R->AF.B.l&~(H_FLAG|N_FLAG|C_FLAG))| \ + ((R->Rg1.W^R->Rg2.W^J.W)&0x1000? H_FLAG:0)| \ + (((long)R->Rg1.W+(long)R->Rg2.W)&0x10000? C_FLAG:0); \ + R->Rg1.W=J.W + +#define M_ADCW(Rg) \ + I=R->AF.B.l&C_FLAG;J.W=(R->HL.W+R->Rg.W+I)&0xFFFF; \ + R->AF.B.l= \ + (((long)R->HL.W+(long)R->Rg.W+(long)I)&0x10000? C_FLAG:0)| \ + (~(R->HL.W^R->Rg.W)&(R->Rg.W^J.W)&0x8000? V_FLAG:0)| \ + ((R->HL.W^R->Rg.W^J.W)&0x1000? H_FLAG:0)| \ + (J.W? 0:Z_FLAG)|(J.B.h&S_FLAG); \ + R->HL.W=J.W + +#define M_SBCW(Rg) \ + I=R->AF.B.l&C_FLAG;J.W=(R->HL.W-R->Rg.W-I)&0xFFFF; \ + R->AF.B.l= \ + N_FLAG| \ + (((long)R->HL.W-(long)R->Rg.W-(long)I)&0x10000? C_FLAG:0)| \ + ((R->HL.W^R->Rg.W)&(R->HL.W^J.W)&0x8000? V_FLAG:0)| \ + ((R->HL.W^R->Rg.W^J.W)&0x1000? H_FLAG:0)| \ + (J.W? 0:Z_FLAG)|(J.B.h&S_FLAG); \ + R->HL.W=J.W + +enum Codes +{ + NOP,LD_BC_WORD,LD_xBC_A,INC_BC,INC_B,DEC_B,LD_B_BYTE,RLCA, + EX_AF_AF,ADD_HL_BC,LD_A_xBC,DEC_BC,INC_C,DEC_C,LD_C_BYTE,RRCA, + DJNZ,LD_DE_WORD,LD_xDE_A,INC_DE,INC_D,DEC_D,LD_D_BYTE,RLA, + JR,ADD_HL_DE,LD_A_xDE,DEC_DE,INC_E,DEC_E,LD_E_BYTE,RRA, + JR_NZ,LD_HL_WORD,LD_xWORD_HL,INC_HL,INC_H,DEC_H,LD_H_BYTE,DAA, + JR_Z,ADD_HL_HL,LD_HL_xWORD,DEC_HL,INC_L,DEC_L,LD_L_BYTE,CPL, + JR_NC,LD_SP_WORD,LD_xWORD_A,INC_SP,INC_xHL,DEC_xHL,LD_xHL_BYTE,SCF, + JR_C,ADD_HL_SP,LD_A_xWORD,DEC_SP,INC_A,DEC_A,LD_A_BYTE,CCF, + LD_B_B,LD_B_C,LD_B_D,LD_B_E,LD_B_H,LD_B_L,LD_B_xHL,LD_B_A, + LD_C_B,LD_C_C,LD_C_D,LD_C_E,LD_C_H,LD_C_L,LD_C_xHL,LD_C_A, + LD_D_B,LD_D_C,LD_D_D,LD_D_E,LD_D_H,LD_D_L,LD_D_xHL,LD_D_A, + LD_E_B,LD_E_C,LD_E_D,LD_E_E,LD_E_H,LD_E_L,LD_E_xHL,LD_E_A, + LD_H_B,LD_H_C,LD_H_D,LD_H_E,LD_H_H,LD_H_L,LD_H_xHL,LD_H_A, + LD_L_B,LD_L_C,LD_L_D,LD_L_E,LD_L_H,LD_L_L,LD_L_xHL,LD_L_A, + LD_xHL_B,LD_xHL_C,LD_xHL_D,LD_xHL_E,LD_xHL_H,LD_xHL_L,HALT,LD_xHL_A, + LD_A_B,LD_A_C,LD_A_D,LD_A_E,LD_A_H,LD_A_L,LD_A_xHL,LD_A_A, + ADD_B,ADD_C,ADD_D,ADD_E,ADD_H,ADD_L,ADD_xHL,ADD_A, + ADC_B,ADC_C,ADC_D,ADC_E,ADC_H,ADC_L,ADC_xHL,ADC_A, + SUB_B,SUB_C,SUB_D,SUB_E,SUB_H,SUB_L,SUB_xHL,SUB_A, + SBC_B,SBC_C,SBC_D,SBC_E,SBC_H,SBC_L,SBC_xHL,SBC_A, + AND_B,AND_C,AND_D,AND_E,AND_H,AND_L,AND_xHL,AND_A, + XOR_B,XOR_C,XOR_D,XOR_E,XOR_H,XOR_L,XOR_xHL,XOR_A, + OR_B,OR_C,OR_D,OR_E,OR_H,OR_L,OR_xHL,OR_A, + CP_B,CP_C,CP_D,CP_E,CP_H,CP_L,CP_xHL,CP_A, + RET_NZ,POP_BC,JP_NZ,JP,CALL_NZ,PUSH_BC,ADD_BYTE,RST00, + RET_Z,RET,JP_Z,PFX_CB,CALL_Z,CALL,ADC_BYTE,RST08, + RET_NC,POP_DE,JP_NC,OUTA,CALL_NC,PUSH_DE,SUB_BYTE,RST10, + RET_C,EXX,JP_C,INA,CALL_C,PFX_DD,SBC_BYTE,RST18, + RET_PO,POP_HL,JP_PO,EX_HL_xSP,CALL_PO,PUSH_HL,AND_BYTE,RST20, + RET_PE,LD_PC_HL,JP_PE,EX_DE_HL,CALL_PE,PFX_ED,XOR_BYTE,RST28, + RET_P,POP_AF,JP_P,DI,CALL_P,PUSH_AF,OR_BYTE,RST30, + RET_M,LD_SP_HL,JP_M,EI,CALL_M,PFX_FD,CP_BYTE,RST38 +}; + +enum CodesCB +{ + RLC_B,RLC_C,RLC_D,RLC_E,RLC_H,RLC_L,RLC_xHL,RLC_A, + RRC_B,RRC_C,RRC_D,RRC_E,RRC_H,RRC_L,RRC_xHL,RRC_A, + RL_B,RL_C,RL_D,RL_E,RL_H,RL_L,RL_xHL,RL_A, + RR_B,RR_C,RR_D,RR_E,RR_H,RR_L,RR_xHL,RR_A, + SLA_B,SLA_C,SLA_D,SLA_E,SLA_H,SLA_L,SLA_xHL,SLA_A, + SRA_B,SRA_C,SRA_D,SRA_E,SRA_H,SRA_L,SRA_xHL,SRA_A, + SLL_B,SLL_C,SLL_D,SLL_E,SLL_H,SLL_L,SLL_xHL,SLL_A, + SRL_B,SRL_C,SRL_D,SRL_E,SRL_H,SRL_L,SRL_xHL,SRL_A, + BIT0_B,BIT0_C,BIT0_D,BIT0_E,BIT0_H,BIT0_L,BIT0_xHL,BIT0_A, + BIT1_B,BIT1_C,BIT1_D,BIT1_E,BIT1_H,BIT1_L,BIT1_xHL,BIT1_A, + BIT2_B,BIT2_C,BIT2_D,BIT2_E,BIT2_H,BIT2_L,BIT2_xHL,BIT2_A, + BIT3_B,BIT3_C,BIT3_D,BIT3_E,BIT3_H,BIT3_L,BIT3_xHL,BIT3_A, + BIT4_B,BIT4_C,BIT4_D,BIT4_E,BIT4_H,BIT4_L,BIT4_xHL,BIT4_A, + BIT5_B,BIT5_C,BIT5_D,BIT5_E,BIT5_H,BIT5_L,BIT5_xHL,BIT5_A, + BIT6_B,BIT6_C,BIT6_D,BIT6_E,BIT6_H,BIT6_L,BIT6_xHL,BIT6_A, + BIT7_B,BIT7_C,BIT7_D,BIT7_E,BIT7_H,BIT7_L,BIT7_xHL,BIT7_A, + RES0_B,RES0_C,RES0_D,RES0_E,RES0_H,RES0_L,RES0_xHL,RES0_A, + RES1_B,RES1_C,RES1_D,RES1_E,RES1_H,RES1_L,RES1_xHL,RES1_A, + RES2_B,RES2_C,RES2_D,RES2_E,RES2_H,RES2_L,RES2_xHL,RES2_A, + RES3_B,RES3_C,RES3_D,RES3_E,RES3_H,RES3_L,RES3_xHL,RES3_A, + RES4_B,RES4_C,RES4_D,RES4_E,RES4_H,RES4_L,RES4_xHL,RES4_A, + RES5_B,RES5_C,RES5_D,RES5_E,RES5_H,RES5_L,RES5_xHL,RES5_A, + RES6_B,RES6_C,RES6_D,RES6_E,RES6_H,RES6_L,RES6_xHL,RES6_A, + RES7_B,RES7_C,RES7_D,RES7_E,RES7_H,RES7_L,RES7_xHL,RES7_A, + SET0_B,SET0_C,SET0_D,SET0_E,SET0_H,SET0_L,SET0_xHL,SET0_A, + SET1_B,SET1_C,SET1_D,SET1_E,SET1_H,SET1_L,SET1_xHL,SET1_A, + SET2_B,SET2_C,SET2_D,SET2_E,SET2_H,SET2_L,SET2_xHL,SET2_A, + SET3_B,SET3_C,SET3_D,SET3_E,SET3_H,SET3_L,SET3_xHL,SET3_A, + SET4_B,SET4_C,SET4_D,SET4_E,SET4_H,SET4_L,SET4_xHL,SET4_A, + SET5_B,SET5_C,SET5_D,SET5_E,SET5_H,SET5_L,SET5_xHL,SET5_A, + SET6_B,SET6_C,SET6_D,SET6_E,SET6_H,SET6_L,SET6_xHL,SET6_A, + SET7_B,SET7_C,SET7_D,SET7_E,SET7_H,SET7_L,SET7_xHL,SET7_A +}; + +enum CodesED +{ + DB_00,DB_01,DB_02,DB_03,DB_04,DB_05,DB_06,DB_07, + DB_08,DB_09,DB_0A,DB_0B,DB_0C,DB_0D,DB_0E,DB_0F, + DB_10,DB_11,DB_12,DB_13,DB_14,DB_15,DB_16,DB_17, + DB_18,DB_19,DB_1A,DB_1B,DB_1C,DB_1D,DB_1E,DB_1F, + DB_20,DB_21,DB_22,DB_23,DB_24,DB_25,DB_26,DB_27, + DB_28,DB_29,DB_2A,DB_2B,DB_2C,DB_2D,DB_2E,DB_2F, + DB_30,DB_31,DB_32,DB_33,DB_34,DB_35,DB_36,DB_37, + DB_38,DB_39,DB_3A,DB_3B,DB_3C,DB_3D,DB_3E,DB_3F, + IN_B_xC,OUT_xC_B,SBC_HL_BC,LD_xWORDe_BC,NEG,RETN,IM_0,LD_I_A, + IN_C_xC,OUT_xC_C,ADC_HL_BC,LD_BC_xWORDe,DB_4C,RETI,DB_,LD_R_A, + IN_D_xC,OUT_xC_D,SBC_HL_DE,LD_xWORDe_DE,DB_54,DB_55,IM_1,LD_A_I, + IN_E_xC,OUT_xC_E,ADC_HL_DE,LD_DE_xWORDe,DB_5C,DB_5D,IM_2,LD_A_R, + IN_H_xC,OUT_xC_H,SBC_HL_HL,LD_xWORDe_HL,DB_64,DB_65,DB_66,RRD, + IN_L_xC,OUT_xC_L,ADC_HL_HL,LD_HL_xWORDe,DB_6C,DB_6D,DB_6E,RLD, + IN_F_xC,DB_71,SBC_HL_SP,LD_xWORDe_SP,DB_74,DB_75,DB_76,DB_77, + IN_A_xC,OUT_xC_A,ADC_HL_SP,LD_SP_xWORDe,DB_7C,DB_7D,DB_7E,DB_7F, + DB_80,DB_81,DB_82,DB_83,DB_84,DB_85,DB_86,DB_87, + DB_88,DB_89,DB_8A,DB_8B,DB_8C,DB_8D,DB_8E,DB_8F, + DB_90,DB_91,DB_92,DB_93,DB_94,DB_95,DB_96,DB_97, + DB_98,DB_99,DB_9A,DB_9B,DB_9C,DB_9D,DB_9E,DB_9F, + LDI,CPI,INI,OUTI,DB_A4,DB_A5,DB_A6,DB_A7, + LDD,CPD,IND,OUTD,DB_AC,DB_AD,DB_AE,DB_AF, + LDIR,CPIR,INIR,OTIR,DB_B4,DB_B5,DB_B6,DB_B7, + LDDR,CPDR,INDR,OTDR,DB_BC,DB_BD,DB_BE,DB_BF, + DB_C0,DB_C1,DB_C2,DB_C3,DB_C4,DB_C5,DB_C6,DB_C7, + DB_C8,DB_C9,DB_CA,DB_CB,DB_CC,DB_CD,DB_CE,DB_CF, + DB_D0,DB_D1,DB_D2,DB_D3,DB_D4,DB_D5,DB_D6,DB_D7, + DB_D8,DB_D9,DB_DA,DB_DB,DB_DC,DB_DD,DB_DE,DB_DF, + DB_E0,DB_E1,DB_E2,DB_E3,DB_E4,DB_E5,DB_E6,DB_E7, + DB_E8,DB_E9,DB_EA,DB_EB,DB_EC,DB_ED,DB_EE,DB_EF, + DB_F0,DB_F1,DB_F2,DB_F3,DB_F4,DB_F5,DB_F6,DB_F7, + DB_F8,DB_F9,DB_FA,DB_FB,DB_FC,DB_FD,DB_FE,DB_FF +}; + +static void CodesCB(register Z80 *R) +{ + register byte I; + + I=RdZ80(R->PC.W++); + R->ICount-=CyclesCB[I]; + switch(I) + { +#include "CodesCB.h" + default: + if(R->TrapBadOps) + printf + ( + "[Z80 %lX] Unrecognized instruction: CB %02X at PC=%04X\n", + (long)(R->User),RdZ80(R->PC.W-1),R->PC.W-2 + ); + } +} + +static void CodesDDCB(register Z80 *R) +{ + register pair J; + register byte I; + +#define XX IX + J.W=R->XX.W+(offset)RdZ80(R->PC.W++); + I=RdZ80(R->PC.W++); + R->ICount-=CyclesXXCB[I]; + switch(I) + { +#include "CodesXCB.h" + default: + if(R->TrapBadOps) + printf + ( + "[Z80 %lX] Unrecognized instruction: DD CB %02X %02X at PC=%04X\n", + (long)(R->User),RdZ80(R->PC.W-2),RdZ80(R->PC.W-1),R->PC.W-4 + ); + } +#undef XX +} + +static void CodesFDCB(register Z80 *R) +{ + register pair J; + register byte I; + +#define XX IY + J.W=R->XX.W+(offset)RdZ80(R->PC.W++); + I=RdZ80(R->PC.W++); + R->ICount-=CyclesXXCB[I]; + switch(I) + { +#include "CodesXCB.h" + default: + if(R->TrapBadOps) + printf + ( + "[Z80 %lX] Unrecognized instruction: FD CB %02X %02X at PC=%04X\n", + (long)R->User,RdZ80(R->PC.W-2),RdZ80(R->PC.W-1),R->PC.W-4 + ); + } +#undef XX +} + +static void CodesED(register Z80 *R) +{ + register byte I; + register pair J; + + I=RdZ80(R->PC.W++); + R->ICount-=CyclesED[I]; + switch(I) + { +#include "CodesED.h" + case PFX_ED: + R->PC.W--;break; + default: + if(R->TrapBadOps) + printf + ( + "[Z80 %lX] Unrecognized instruction: ED %02X at PC=%04X\n", + (long)R->User,RdZ80(R->PC.W-1),R->PC.W-2 + ); + } +} + +static void CodesDD(register Z80 *R) +{ + register byte I; + register pair J; + +#define XX IX + I=RdZ80(R->PC.W++); + R->ICount-=CyclesXX[I]; + switch(I) + { +#include "CodesXX.h" + case PFX_FD: + case PFX_DD: + R->PC.W--;break; + case PFX_CB: + CodesDDCB(R);break; + case HALT: + R->PC.W--;R->IFF|=0x80;R->ICount=0;break; + default: + if(R->TrapBadOps) + printf + ( + "[Z80 %lX] Unrecognized instruction: DD %02X at PC=%04X\n", + (long)R->User,RdZ80(R->PC.W-1),R->PC.W-2 + ); + } +#undef XX +} + +static void CodesFD(register Z80 *R) +{ + register byte I; + register pair J; + +#define XX IY + I=RdZ80(R->PC.W++); + R->ICount-=CyclesXX[I]; + switch(I) + { +#include "CodesXX.h" + case PFX_FD: + case PFX_DD: + R->PC.W--;break; + case PFX_CB: + CodesFDCB(R);break; + case HALT: + R->PC.W--;R->IFF|=0x80;R->ICount=0;break; + default: + printf + ( + "Unrecognized instruction: FD %02X at PC=%04X\n", + RdZ80(R->PC.W-1),R->PC.W-2 + ); + } +#undef XX +} + +/** ResetZ80() ***********************************************/ +/** This function can be used to reset the register struct **/ +/** before starting execution with Z80(). It sets the **/ +/** registers to their supposed initial values. **/ +/*************************************************************/ +void ResetZ80(Z80 *R) +{ + R->PC.W=0x0000;R->SP.W=0xF000; + R->AF.W=R->BC.W=R->DE.W=R->HL.W=0x0000; + R->AF1.W=R->BC1.W=R->DE1.W=R->HL1.W=0x0000; + R->IX.W=R->IY.W=0x0000; + R->I=0x00;R->IFF=0x00; + R->ICount=R->IPeriod; + R->IRequest=INT_NONE; +} + +/** ExecZ80() ************************************************/ +/** This function will execute a single Z80 opcode. It will **/ +/** then return next PC, and current register values in R. **/ +/*************************************************************/ +word ExecZ80(Z80 *R) +{ + register byte I; + register pair J; + + I=RdZ80(R->PC.W++); + R->ICount-=Cycles[I]; + switch(I) + { +#include "Codes.h" + case PFX_CB: CodesCB(R);break; + case PFX_ED: CodesED(R);break; + case PFX_FD: CodesFD(R);break; + case PFX_DD: CodesDD(R);break; + } + + /* We are done */ + return(R->PC.W); +} + +/** IntZ80() *************************************************/ +/** This function will generate interrupt of given vector. **/ +/*************************************************************/ +void IntZ80(Z80 *R,word Vector) +{ + if((R->IFF&0x01)||(Vector==INT_NMI)) + { + /* Experimental V Shouldn't disable all interrupts? */ + R->IFF=(R->IFF&0x9E)|((R->IFF&0x01)<<6); + if(R->IFF&0x80) { R->PC.W++;R->IFF&=0x7F; } + M_PUSH(PC); + + /* Automatically reset IRequest if needed */ + if(R->IAutoReset&&(Vector==R->IRequest)) R->IRequest=INT_NONE; + + if(Vector==INT_NMI) R->PC.W=INT_NMI; + else + if(R->IFF&0x04) + { + Vector=(Vector&0xFF)|((word)(R->I)<<8); + R->PC.B.l=RdZ80(Vector++); + R->PC.B.h=RdZ80(Vector); + } + else + if(R->IFF&0x02) R->PC.W=INT_IRQ; + else R->PC.W=Vector; + } +} + +/** RunZ80() *************************************************/ +/** This function will run Z80 code until an LoopZ80() call **/ +/** returns INT_QUIT. It will return the PC at which **/ +/** emulation stopped, and current register values in R. **/ +/*************************************************************/ +static byte I; +static pair J; + +word RunZ80(Z80 *R) +{ +// register byte I; +// register pair J; + int ras=0; + + for(;;) + { +//#ifdef DEBUG +// /* Turn tracing on when reached trap address */ +// if(R->PC.W==R->Trap) R->Trace=1; +// /* Call single-step debugger, exit if requested */ +// if(R->Trace) +// if(!DebugZ80(R)) return(R->PC.W); +//#endif + + I=RdZ80(R->PC.W++); + R->ICount-=Cycles[I]; + switch(I) + { +#include "Codes.h" + case PFX_CB: CodesCB(R);break; + case PFX_ED: CodesED(R);break; + case PFX_FD: CodesFD(R);break; + case PFX_DD: CodesDD(R);break; + } + + /* If cycle counter expired... */ + if(R->ICount<=0) + { + /* If we have come after EI, get address from IRequest */ + /* Otherwise, get it from the loop handler */ + if(R->IFF&0x20) + { + J.W=R->IRequest; /* Get pending interrupt */ + R->ICount+=R->IBackup-1; /* Restore the ICount */ + R->IFF&=0xDF; /* Done with AfterEI state */ + } + else + { + J.W=LoopZ80(R, &ras); /* Call periodic handler */ + R->ICount=R->IPeriod; /* Reset the cycle counter */ + if(J.W==INT_NONE) I=R->IRequest; /* Pending int-rupt */ + } + + if(J.W==INT_QUIT) return(R->PC.W); /* Exit if INT_QUIT */ + if(J.W!=INT_NONE) IntZ80(R,J.W); /* Int-pt if needed */ + } + if (ras == 1) break; + } + + /* Execution stopped */ + return(R->PC.W); +} diff --git a/MCUME_pico/picocolem/Z80.h b/MCUME_pico/picocolem/Z80.h new file mode 100644 index 0000000..2f222e4 --- /dev/null +++ b/MCUME_pico/picocolem/Z80.h @@ -0,0 +1,141 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** Z80.h **/ +/** **/ +/** This file contains declarations relevant to emulation **/ +/** of Z80 CPU. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-1998 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ +#ifndef Z80_H +#define Z80_H + + /* Compilation options: */ +/* #define DEBUG */ /* Compile debugging version */ +/* #define LSB_FIRST */ /* Compile for low-endian CPU */ +/* #define MSB_FIRST */ /* Compile for hi-endian CPU */ + + /* LoopZ80() may return: */ +#define INT_IRQ 0x0038 /* Standard RST 38h interrupt */ +#define INT_NMI 0x0066 /* Non-maskable interrupt */ +#define INT_NONE 0xFFFF /* No interrupt required */ +#define INT_QUIT 0xFFFE /* Exit the emulation */ + + /* Bits in Z80 F register: */ +#define S_FLAG 0x80 /* 1: Result negative */ +#define Z_FLAG 0x40 /* 1: Result is zero */ +#define H_FLAG 0x10 /* 1: Halfcarry/Halfborrow */ +#define P_FLAG 0x04 /* 1: Result is even */ +#define V_FLAG 0x04 /* 1: Overflow occured */ +#define N_FLAG 0x02 /* 1: Subtraction occured */ +#define C_FLAG 0x01 /* 1: Carry/Borrow occured */ + +/** Simple Datatypes *****************************************/ +/** NOTICE: sizeof(byte)=1 and sizeof(word)=2 **/ +/*************************************************************/ +typedef unsigned char byte; +typedef unsigned short word; +typedef signed char offset; + +/** Structured Datatypes *************************************/ +/** NOTICE: #define LSB_FIRST for machines where least **/ +/** signifcant byte goes first. **/ +/*************************************************************/ +typedef union +{ +#ifdef LSB_FIRST + struct { byte l,h; } B; +#else + struct { byte h,l; } B; +#endif + word W; +} pair; + +typedef struct +{ + pair AF,BC,DE,HL,IX,IY,PC,SP; /* Main registers */ + pair AF1,BC1,DE1,HL1; /* Shadow registers */ + byte IFF,I; /* Interrupt registers */ + byte R; /* Refresh register */ + + int IPeriod,ICount; /* Set IPeriod to number of CPU cycles */ + /* between calls to LoopZ80() */ + int IBackup; /* Private, don't touch */ + word IRequest; /* Set to address of pending IRQ */ + byte IAutoReset; /* Set to 1 to autom. reset IRequest */ + byte TrapBadOps; /* Set to 1 to warn of illegal opcodes */ + word Trap; /* Set Trap to address to trace from */ + byte Trace; /* Set Trace=1 to start tracing */ + void *User; /* Arbitrary user data (ID,RAM*,etc.) */ +} Z80; + +/** ResetZ80() ***********************************************/ +/** This function can be used to reset the registers before **/ +/** starting execution with RunZ80(). It sets registers to **/ +/** their initial values. **/ +/*************************************************************/ +void ResetZ80(register Z80 *R); + +/** ExecZ80() ************************************************/ +/** This function will execute a single Z80 opcode. It will **/ +/** then return next PC, and current register values in R. **/ +/*************************************************************/ +word ExecZ80(register Z80 *R); + +/** IntZ80() *************************************************/ +/** This function will generate interrupt of given vector. **/ +/*************************************************************/ +void IntZ80(register Z80 *R,register word Vector); + +/** RunZ80() *************************************************/ +/** This function will run Z80 code until an LoopZ80() call **/ +/** returns INT_QUIT. It will return the PC at which **/ +/** emulation stopped, and current register values in R. **/ +/*************************************************************/ +word RunZ80(register Z80 *R); + +/** RdZ80()/WrZ80() ******************************************/ +/** These functions are called when access to RAM occurs. **/ +/** They allow to control memory access. **/ +/************************************ TO BE WRITTEN BY USER **/ +void WrZ80(register word Addr,register byte Value); +byte RdZ80(register word Addr); + +/** InZ80()/OutZ80() *****************************************/ +/** Z80 emulation calls these functions to read/write from **/ +/** I/O ports. There can be 65536 I/O ports, but only first **/ +/** 256 are usually used **/ +/************************************ TO BE WRITTEN BY USER **/ +void OutZ80(register word Port,register byte Value); +byte InZ80(register word Port); + +/** PatchZ80() ***********************************************/ +/** Z80 emulation calls this function when it encounters a **/ +/** special patch command (ED FE) provided for user needs. **/ +/** For example, it can be called to emulate BIOS calls, **/ +/** such as disk and tape access. Replace it with an empty **/ +/** macro for no patching. **/ +/************************************ TO BE WRITTEN BY USER **/ +void PatchZ80(register Z80 *R); + +/** DebugZ80() ***********************************************/ +/** This function should exist if DEBUG is #defined. When **/ +/** Trace!=0, it is called after each command executed by **/ +/** the CPU, and given the Z80 registers. Emulation exits **/ +/** if DebugZ80() returns 0. **/ +/*************************************************************/ +byte DebugZ80(register Z80 *R); + +/** LoopZ80() ************************************************/ +/** Z80 emulation calls this function periodically to check **/ +/** if the system hardware requires any interrupts. This **/ +/** function must return an address of the interrupt vector **/ +/** (0x0038, 0x0066, etc.) or INT_NONE for no interrupt. **/ +/** Return INT_QUIT to exit the emulation loop. **/ +/************************************ TO BE WRITTEN BY USER **/ +word LoopZ80(register Z80 *R, int * ras); + +#endif /* Z80_H */ diff --git a/MCUME_pico/picocolem/emuapi.cpp b/MCUME_pico/picocolem/emuapi.cpp new file mode 100644 index 0000000..75f32fd --- /dev/null +++ b/MCUME_pico/picocolem/emuapi.cpp @@ -0,0 +1,804 @@ +#define KEYMAP_PRESENT 1 + +#define PROGMEM + +#include "pico.h" +#include "pico/stdlib.h" +#include "hardware/adc.h" +#include +#include + +extern "C" { + #include "emuapi.h" + #include "iopins.h" +} + + +#include "vga_t_dma.h" +const uint16_t deflogo[] = { + 0,0 +}; +static const uint16_t * logo = deflogo; + +#define MAX_FILES 64 +#define MAX_FILENAME_SIZE 24 +#define MAX_MENULINES 9 +#define TEXT_HEIGHT 16 +#define TEXT_WIDTH 8 +#define MENU_FILE_XOFFSET (6*TEXT_WIDTH) +#define MENU_FILE_YOFFSET (2*TEXT_HEIGHT) +#define MENU_FILE_W (MAX_FILENAME_SIZE*TEXT_WIDTH) +#define MENU_FILE_H (MAX_MENULINES*TEXT_HEIGHT) +#define MENU_FILE_BGCOLOR RGBVAL16(0x00,0x00,0x40) +#define MENU_JOYS_YOFFSET (12*TEXT_HEIGHT) +#define MENU_VBAR_XOFFSET (0*TEXT_WIDTH) +#define MENU_VBAR_YOFFSET (MENU_FILE_YOFFSET) + +#define MENU_TFT_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_TFT_YOFFSET (MENU_VBAR_YOFFSET+32) +#define MENU_VGA_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_VGA_YOFFSET (MENU_VBAR_YOFFSET+MENU_FILE_H-32-37) + +extern TFT_T_DMA tft; + +static char romspath[64]; +static int nbFiles=0; +static int curFile=0; +static int topFile=0; +static char selection[MAX_FILENAME_SIZE+1]=""; +static char files[MAX_FILES][MAX_FILENAME_SIZE]; +static bool menuRedraw=true; + +static bool i2cKeyboardPresent = false; +static unsigned short * keys; +static int keyMap; + +static int keypadval=0; +static bool joySwapped = false; +static uint16_t bLastState; +static int xRef; +static int yRef; +static uint8_t usbnavpad=0; + +static bool menuOn=true; + + + + +void emu_printf(char * text) +{ + printf("%s\n",text); +} + +void emu_printf(int val) +{ + printf("%d\n",val); +} + +void emu_printi(int val) +{ + printf("%d\n",val); +} + +void emu_printh(int val) +{ + printf("0x%.8\n",val); +} + +static int malbufpt = 0; +static char malbuf[EXTRA_HEAP]; + +void * emu_Malloc(int size) +{ + void * retval = malloc(size); + if (!retval) { + emu_printf("failled to allocate"); + emu_printf(size); + emu_printf("fallback"); + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + } + else { + emu_printf("failure to allocate"); + } + } + else { + emu_printf("could allocate dynamic "); + emu_printf(size); + } + + return retval; +} + +void * emu_MallocI(int size) +{ + void * retval = NULL; + + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + emu_printf("could allocate static "); + emu_printf(size); + } + else { + emu_printf("failure to allocate"); + } + + return retval; +} +void emu_Free(void * pt) +{ + free(pt); +} + + + + + +int emu_ReadAnalogJoyX(int min, int max) +{ +#ifdef PIN_JOY2_A1X + adc_select_input(0); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVX + val = 4095 - val; +#endif + val = val-xRef; + val = ((val*140)/100); + if ( (val > -512) && (val < 512) ) val = 0; + val = val+2048; + return (val*(max-min))/4096; +} + +int emu_ReadAnalogJoyY(int min, int max) +{ +#ifdef PIN_JOY2_A2Y + adc_select_input(1); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVY + val = 4095 - val; +#endif + val = val-yRef; + val = ((val*120)/100); + if ( (val > -512) && (val < 512) ) val = 0; + //val = (val*(max-min))/4096; + val = val+2048; + //return val+(max-min)/2; + return (val*(max-min))/4096; +} + + +static uint16_t readAnalogJoystick(void) +{ + uint16_t joysval = 0; + + int xReading = emu_ReadAnalogJoyX(0,256); + if (xReading > 128) joysval |= MASK_JOY2_LEFT; + else if (xReading < 128) joysval |= MASK_JOY2_RIGHT; + + int yReading = emu_ReadAnalogJoyY(0,256); + if (yReading < 128) joysval |= MASK_JOY2_UP; + else if (yReading > 128) joysval |= MASK_JOY2_DOWN; + +#ifdef PIN_JOY2_BTN + joysval |= (gpio_get(PIN_JOY2_BTN) ? 0 : MASK_JOY2_BTN); +#endif + return (joysval); +} + + +int emu_SwapJoysticks(int statusOnly) { + if (!statusOnly) { + if (joySwapped) { + joySwapped = false; + } + else { + joySwapped = true; + } + } + return(joySwapped?1:0); +} + +int emu_GetPad(void) +{ + return(keypadval/*|((joySwapped?1:0)<<7)*/); +} + +int emu_ReadKeys(void) +{ + uint16_t retval; + uint16_t j1 = readAnalogJoystick(); + uint16_t j2 = 0; + + // Second joystick +#if INVY +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_DOWN; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_UP; +#endif +#else +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_UP; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_DOWN; +#endif +#endif +#if INVX +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_LEFT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_RIGHT; +#endif +#else +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_RIGHT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_LEFT; +#endif +#endif +#ifdef PIN_JOY1_BTN + if ( !gpio_get(PIN_JOY1_BTN) ) j2 |= MASK_JOY2_BTN; +#endif + if (joySwapped) { + retval = ((j1 << 8) | j2); + } + else { + retval = ((j2 << 8) | j1); + } + + if (usbnavpad & MASK_JOY2_UP) retval |= MASK_JOY2_UP; + if (usbnavpad & MASK_JOY2_DOWN) retval |= MASK_JOY2_DOWN; + if (usbnavpad & MASK_JOY2_LEFT) retval |= MASK_JOY2_LEFT; + if (usbnavpad & MASK_JOY2_RIGHT) retval |= MASK_JOY2_RIGHT; + if (usbnavpad & MASK_JOY2_BTN) retval |= MASK_JOY2_BTN; +#ifdef PIN_KEY_USER1 + if ( !gpio_get(PIN_KEY_USER1) ) retval |= MASK_KEY_USER1; +#endif +#ifdef PIN_KEY_USER2 + if ( !gpio_get(PIN_KEY_USER2) ) retval |= MASK_KEY_USER2; +#endif +#ifdef PIN_KEY_USER3 + if ( !gpio_get(PIN_KEY_USER3) ) retval |= MASK_KEY_USER3; +#endif +#ifdef PIN_KEY_USER4 + if ( !gpio_get(PIN_KEY_USER4) ) retval |= MASK_KEY_USER4; +#endif + + //Serial.println(retval,HEX); + + if ( ((retval & (MASK_KEY_USER1+MASK_KEY_USER2)) == (MASK_KEY_USER1+MASK_KEY_USER2)) + || (retval & MASK_KEY_USER4 ) ) + { + } + + return (retval); +} + +unsigned short emu_DebounceLocalKeys(void) +{ + uint16_t bCurState = emu_ReadKeys(); + uint16_t bClick = bCurState & ~bLastState; + bLastState = bCurState; + + return (bClick); +} + +int emu_ReadI2CKeyboard(void) { + int retval=0; + + return(retval); +} + +void emu_InitJoysticks(void) { + + // Second Joystick +#ifdef PIN_JOY1_1 + gpio_set_pulls(PIN_JOY1_1,true,false); + gpio_set_dir(PIN_JOY1_1,GPIO_IN); +#endif +#ifdef PIN_JOY1_2 + gpio_set_pulls(PIN_JOY1_2,true,false); + gpio_set_dir(PIN_JOY1_2,GPIO_IN); +#endif +#ifdef PIN_JOY1_3 + gpio_set_pulls(PIN_JOY1_3,true,false); + gpio_set_dir(PIN_JOY1_3,GPIO_IN); +#endif +#ifdef PIN_JOY1_4 + gpio_set_pulls(PIN_JOY1_4,true,false); + gpio_set_dir(PIN_JOY1_4,GPIO_IN); +#endif +#ifdef PIN_JOY1_BTN + gpio_set_pulls(PIN_JOY1_BTN,true,false); + gpio_set_dir(PIN_JOY1_BTN,GPIO_IN); +#endif + +#ifdef PIN_KEY_USER1 + gpio_set_pulls(PIN_KEY_USER1,true,false); + gpio_set_dir(PIN_KEY_USER1,GPIO_IN); +#endif +#ifdef PIN_KEY_USER2 + gpio_set_pulls(PIN_KEY_USER2,true,false); + gpio_set_dir(PIN_KEY_USER2,GPIO_IN); +#endif +#ifdef PIN_KEY_USER3 + gpio_set_pulls(PIN_KEY_USER3,true,false); + gpio_set_dir(PIN_KEY_USER3,GPIO_IN); +#endif +#ifdef PIN_KEY_USER4 + gpio_set_pulls(PIN_KEY_USER4,true,false); + gpio_set_dir(PIN_KEY_USER4,GPIO_IN); +#endif +#ifdef PIN_JOY2_BTN + gpio_set_pulls(PIN_JOY2_BTN,true,false); + gpio_set_dir(PIN_JOY2_BTN,GPIO_IN); +#endif + +#ifdef PIN_JOY2_A1X + adc_init(); + adc_gpio_init(PIN_JOY2_A1X); + adc_gpio_init(PIN_JOY2_A2Y); + xRef=0; yRef=0; + for (int i=0; i<10; i++) { + adc_select_input(0); + xRef += adc_read(); + adc_select_input(1); + yRef += adc_read(); + sleep_ms(20); + } +#endif + +#if INVX + xRef = 4095 -xRef/10; +#else + xRef /= 10; +#endif +#if INVY + yRef = 4095 -yRef/10; +#else + yRef /= 10; +#endif +} + + + + +int emu_setKeymap(int index) { +} + + +#include "ff.h" +static FATFS fatfs; +static FIL file; +extern "C" int sd_init_driver(void); + +static int readNbFiles(char * rootdir) { + int totalFiles = 0; + + DIR dir; + FILINFO entry; + FRESULT fr = f_findfirst(&dir, &entry, rootdir, "*"); + while ( (fr == FR_OK) && (entry.fname[0]) && (totalFiles=0) { + menuRedraw=true; + curFile -= 9; + } else if (curFile!=0) { + menuRedraw=true; + curFile--; + } + } + else if (bClick & MASK_JOY2_DOWN) { + if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_JOY2_LEFT) || (bClick & MASK_JOY1_LEFT) ) { + if ((curFile<(nbFiles-9)) && (nbFiles)) { + curFile += 9; + menuRedraw=true; + } + else if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_KEY_USER2) ) { + emu_SwapJoysticks(0); + menuRedraw=true; + } + + if (menuRedraw && nbFiles) { + int fileIndex = 0; + tft.drawRectNoDma(MENU_FILE_XOFFSET,MENU_FILE_YOFFSET, MENU_FILE_W, MENU_FILE_H, MENU_FILE_BGCOLOR); +// if (curFile <= (MAX_MENULINES/2-1)) topFile=0; +// else topFile=curFile-(MAX_MENULINES/2); + if (curFile <= (MAX_MENULINES-1)) topFile=0; + else topFile=curFile-(MAX_MENULINES/2); + + //Serial.print("curfile: "); + //Serial.println(curFile); + //Serial.print("topFile: "); + //Serial.println(topFile); + + int i=0; + while (i=nbFiles) { + // no more files + break; + } + char * filename = &files[fileIndex][0]; + if (fileIndex >= topFile) { + if ((i+topFile) < nbFiles ) { + if ((i+topFile)==curFile) { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0x00), RGBVAL16(0xff,0x00,0x00), true); + strcpy(selection,filename); + } + else { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0xff), MENU_FILE_BGCOLOR, true); + } + } + i++; + } + fileIndex++; + } + + + tft.drawTextNoDma(48,MENU_JOYS_YOFFSET+8, (emu_SwapJoysticks(1)?(char*)"SWAP=1":(char*)"SWAP=0"), RGBVAL16(0x00,0xff,0xff), RGBVAL16(0x00,0x00,0xff), false); + menuRedraw=false; + } + + return (action); +} + +bool menuActive(void) +{ + return (menuOn); +} + +void toggleMenu(bool on) { + if (on) { + menuOn = true; + backgroundMenu(); + } else { + menuOn = false; + } +} + +char * menuSelection(void) +{ + return (selection); +} + + + + + + + + + +int emu_FileOpen(char * filename) +{ + int retval = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileOpen..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + retval = 1; + } + else { + emu_printf("FileOpen failed"); + } + return (retval); +} + +int emu_FileRead(char * buf, int size) +{ + unsigned char buffer[256]; + int remaining = size; + int byteread = 0; + unsigned int retval=0; + if (size < 256) { + if( !(f_read (&file, buffer, size, &retval)) ) + if (retval>0) { + memcpy(buf,buffer,retval); + byteread += retval; + } + } + else { + while (remaining>0) { + if( !(f_read (&file, buffer, 256, &retval)) ) + //f_read (&file, buffer, 256, &retval); + if (retval>0) { + //emu_printi(retval); + memcpy(buf,buffer,retval); + buf += retval; + byteread += retval; + remaining -= retval; + } + else { + break; + } + } + } + return byteread; +} + +unsigned char emu_FileGetc(void) { + unsigned char c; + unsigned int retval=0; + if( !(f_read (&file, &c, 1, &retval)) ) + if (retval != 1) { + emu_printf("emu_FileGetc failed"); + } + return c; +} + + +void emu_FileClose(void) +{ + f_close(&file); +} + +int emu_FileSize(char * filename) +{ + int filesize=0; + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileSize..."); + emu_printf(filepath); + FILINFO entry; + f_stat(filepath, &entry); + filesize = entry.fsize; + return(filesize); +} + +int emu_FileSeek(int seek) +{ + f_lseek(&file, seek); + return (seek); +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + unsigned int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } + + return(filesize); +} + +#ifdef SDIO + + +int emu_FileTell(void) +{ +#ifdef USE_SDFS + return (f_tell(&file)); +#else + return (50); +#endif +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + filesize = file.size(); + emu_printf(filesize); + + if (size >= filesize) + { + if (emu_FileRead(buf, filesize) != filesize) + { + emu_printf("File read failed"); + } + } + file.close(); + } +#endif + + return(filesize); +} + +int emu_LoadFileSeek(char * filename, char * buf, int size, int seek) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFileSeek..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + f_lseek(&file, seek); + emu_printf(size); + if (size >= filesize) + { + int retval=0; + if( (!f_read (&file, buf, size, &retval)) ) + if (retval != size) + { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + file.seek(seek); + emu_printf(size); + if (file.read(buf, size) != size) { + emu_printf("File read failed"); + } + file.close(); + } +#endif + + return(filesize); +} +#endif + + + +void emu_init(void) +{ + sd_init_driver(); + FRESULT fr = f_mount(&fatfs, "0:", 1); + //emu_FileSystemInit(); + + strcpy(romspath,ROMSDIR); + nbFiles = readNbFiles(romspath); + + emu_printf("SD initialized, files found: "); + emu_printi(nbFiles); + + emu_InitJoysticks(); +#ifdef SWAP_JOYSTICK + joySwapped = true; +#else + joySwapped = false; +#endif + + toggleMenu(true); +} + + +void emu_start(void) +{ + + usbnavpad = 0; + + keys = (unsigned short *)key_map1; + keyMap = 0; +} diff --git a/MCUME_pico/picocolem/emuapi.h b/MCUME_pico/picocolem/emuapi.h new file mode 100644 index 0000000..c42eddd --- /dev/null +++ b/MCUME_pico/picocolem/emuapi.h @@ -0,0 +1,142 @@ +#ifndef EMUAPI_H +#define EMUAPI_H + +#include "platform_config.h" + +//#define TIMER_REND 1 +#define EXTRA_HEAP 0x10 + +// Title: < > +#define TITLE " Coleco Emulator" +#define ROMSDIR "coleco" + +#define emu_Init(ROM) {coc_Init();coc_Start(ROM);} +#define emu_Step() {coc_Step();} +#define emu_Input(x) {} + +#define PALETTE_SIZE 16 +#define VID_FRAME_SKIP 0x0 +#define TFT_VBUFFER_YCROP 0 +#define SINGLELINE_RENDERING 1 + +#define ACTION_NONE 0 +#define ACTION_MAXKBDVAL 12 +#define ACTION_EXITKBD 128 +#define ACTION_RUNTFT 129 +#define ACTION_RUNVGA 130 + +#ifdef KEYMAP_PRESENT + +#define TAREA_W_DEF 32 +#define TAREA_H_DEF 32 +#define TAREA_END 255 +#define TAREA_NEW_ROW 254 +#define TAREA_NEW_COL 253 +#define TAREA_XY 252 +#define TAREA_WH 251 + +#define KEYBOARD_X 128 +#define KEYBOARD_Y 84 +#define KEYBOARD_KEY_H 21 +#define KEYBOARD_KEY_W 21 +#define KEYBOARD_HIT_COLOR RGBVAL16(0xff,0x00,0x00) + +const unsigned short keysw[] = { + TAREA_XY,KEYBOARD_X,KEYBOARD_Y, + TAREA_WH,KEYBOARD_KEY_W,KEYBOARD_KEY_H, + TAREA_NEW_ROW,20,20,20, + TAREA_NEW_ROW,20,20,20, + TAREA_NEW_ROW,20,20,20, + TAREA_NEW_ROW,20,20,20, + TAREA_END}; + +const unsigned short key_map1[] = { + 2,3,4, + 5,6,7, + 8,9,10, + 11,1,12}; + +#ifdef HAS_I2CKBD +const unsigned short i2ckeys[] = { + 0X0080,0X0008,0X0180, + 0X0108,0X0280,0X0208, + 0X0380,0X0308,0X0480, + 0X0040,0X0408,0X0004}; +#endif + +#endif + + +#define MASK_JOY2_RIGHT 0x0001 +#define MASK_JOY2_LEFT 0x0002 +#define MASK_JOY2_UP 0x0004 +#define MASK_JOY2_DOWN 0x0008 +#define MASK_JOY2_BTN 0x0010 +#define MASK_KEY_USER1 0x0020 +#define MASK_KEY_USER2 0x0040 +#define MASK_KEY_USER3 0x0080 +#define MASK_JOY1_RIGHT 0x0100 +#define MASK_JOY1_LEFT 0x0200 +#define MASK_JOY1_UP 0x0400 +#define MASK_JOY1_DOWN 0x0800 +#define MASK_JOY1_BTN 0x1000 +#define MASK_KEY_USER4 0x2000 + + +extern void emu_init(void); +extern void emu_start(void); +extern void emu_resetSD(void); + +extern void emu_printf(char * text); +extern void emu_printi(int val); +extern void * emu_Malloc(int size); +extern void emu_Free(void * pt); + +extern int emu_FileOpen(char * filename); +extern int emu_FileRead(char * buf, int size); +extern unsigned char emu_FileGetc(void); +extern int emu_FileSeek(int seek); +extern void emu_FileClose(void); +extern int emu_FileSize(char * filename); +extern int emu_LoadFile(char * filename, char * buf, int size); +extern int emu_LoadFileSeek(char * filename, char * buf, int size, int seek); +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); + +extern void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index); +extern void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride); +extern void emu_DrawLine(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line); +extern void emu_DrawVsync(void); +extern int emu_FrameSkip(void); +extern void * emu_LineBuffer(int line); + +extern void emu_InitJoysticks(void); +extern int emu_SwapJoysticks(int statusOnly); +extern unsigned short emu_DebounceLocalKeys(void); +extern int emu_ReadKeys(void); +extern int emu_GetPad(void); +extern int emu_ReadAnalogJoyX(int min, int max); +extern int emu_ReadAnalogJoyY(int min, int max); +extern int emu_ReadI2CKeyboard(void); +extern void emu_KeyboardOnUp(int keymodifer, int key); +extern void emu_KeyboardOnDown(int keymodifer, int key); + +extern void emu_sndPlaySound(int chan, int volume, int freq); +extern void emu_sndPlayBuzz(int size, int val); +extern void emu_sndInit(); +extern void emu_resetus(void); +extern int emu_us(void); + +extern int emu_setKeymap(int index); + +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); +extern void emu_printh(int val); + + + +#endif diff --git a/MCUME_pico/picocolem/font8x8.h b/MCUME_pico/picocolem/font8x8.h new file mode 100644 index 0000000..4f773da --- /dev/null +++ b/MCUME_pico/picocolem/font8x8.h @@ -0,0 +1,135 @@ + +// Font: c64_lower.64c + +const unsigned char font8x8[128][8] PROGMEM = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) + { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) + { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) + { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) + { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//) + { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) + { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) + { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) + { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F +}; + diff --git a/MCUME_pico/picocolem/iopins.h b/MCUME_pico/picocolem/iopins.h new file mode 100644 index 0000000..a636576 --- /dev/null +++ b/MCUME_pico/picocolem/iopins.h @@ -0,0 +1,42 @@ +#ifndef IOPINS_H +#define IOPINS_H + +#include "platform_config.h" + + +// VGA (see in code!!!) +/* +2-9 RRRGGGBB +10-11 VSYNC and HSYNC +*/ + +// SD (see SPI0 in code!!!) +/* +#define SD_SCLK 18 +#define SD_MOSI 19 +#define SD_MISO 16 +#define SD_CS 17 +*/ + +// I2C keyboard (not used) +/* +#define I2C_SCL_IO 15? +#define I2C_SDA_IO 14? +*/ + +// Analog joystick (primary) for JOY2 and 3 extra buttons +#define PIN_JOY2_A1X 26 +#define PIN_JOY2_A2Y 27 +#define PIN_JOY2_BTN 22 +#define PIN_KEY_USER1 20 +#define PIN_KEY_USER2 21 + +// Second joystick +//#define PIN_JOY1_BTN 2 +//#define PIN_JOY1_1 14 // UP +//#define PIN_JOY1_2 7 // DOWN +//#define PIN_JOY1_3 6 // RIGHT +//#define PIN_JOY1_4 5 // LEFT + + +#endif diff --git a/MCUME_pico/picocolem/keyboard.h b/MCUME_pico/picocolem/keyboard.h new file mode 100644 index 0000000..7f8dac3 --- /dev/null +++ b/MCUME_pico/picocolem/keyboard.h @@ -0,0 +1,132 @@ +/**************************************************************************** +* Purpose : Keyboard input driver. +* Module : Keyboard +* Author : J-M Harvengt +* History : 10/08/97 Creation +****************************************************************************/ +#ifndef _KEYBOARD +#define _KEYBOARD + +/**************************************************************************** +* Macros / typedefs +****************************************************************************/ +#define SOURCE_REM 0x01 +#define SOURCE_PAD 0x02 +#define SOURCE_KEYB 0x03 + +/* keys id */ +#define KEY_UNKNOWN 0x00 +#define KEY_LEFT 0x01 +#define KEY_RIGHT 0x02 +#define KEY_UP 0x03 +#define KEY_DOWN 0x04 +#define KEY_SPACE 0x05 + +#define KEY_FONE 0x06 +#define KEY_FTWO 0x07 +#define KEY_FTHREE 0x08 +#define KEY_FFOUR 0x09 +#define KEY_FFIVE 0x0a +#define KEY_FSIX 0x0b +#define KEY_FSEVEN 0x0c +#define KEY_FEIGHT 0x0d +#define KEY_FNINE 0x0e +#define KEY_FZERO 0x0f + +#define KEY_ONE 0x10 +#define KEY_TWO 0x11 +#define KEY_THREE 0x12 +#define KEY_FOUR 0x13 +#define KEY_FIVE 0x14 +#define KEY_SIX 0x15 +#define KEY_SEVEN 0x16 +#define KEY_EIGHT 0x17 +#define KEY_NINE 0x18 +#define KEY_ZERO 0x19 + +#define KEY_OK KEY_SPACE +#define KEY_BUT KEY_SPACE +#define KEY_BACK KEY_FONE +#define KEY_MENU KEY_FTWO +#define KEY_TELEWEB KEY_FTHREE +#define KEY_TELETEXT KEY_FFOUR +#define KEY_COIN KEY_FTHREE +#define KEY_ONEUP KEY_FFOUR + +/* Bit mask for pad keys */ +#define JKEY_PLEFT 0x0001 +#define JKEY_PRIGHT 0x0002 +#define JKEY_PUP 0x0004 +#define JKEY_PDOWN 0x0008 +#define JKEY_PSPACE 0x0010 +#define JKEY_PONE 0x0020 +#define JKEY_PTWO 0x0040 +#define JKEY_PTHREE 0x0080 +#define JKEY_PFOUR 0x0100 +#define JKEY_PFIVE 0x0200 +#define JKEY_PSIX 0x0400 +#define JKEY_PSEVEN 0x0800 +#define JKEY_PEIGHT 0x1000 +#define JKEY_PNINE 0x2000 +#define JKEY_PZERO 0x4000 + +#define JKEY_LEFT 0x00010000 +#define JKEY_RIGHT 0x00020000 +#define JKEY_UP 0x00040000 +#define JKEY_DOWN 0x00080000 +#define JKEY_SPACE 0x00100000 +#define JKEY_ONE 0x00200000 +#define JKEY_TWO 0x00400000 +#define JKEY_THREE 0x00800000 +#define JKEY_FOUR 0x01000000 +#define JKEY_FIVE 0x02000000 +#define JKEY_SIX 0x04000000 +#define JKEY_SEVEN 0x08000000 +#define JKEY_EIGHT 0x10000000 +#define JKEY_NINE 0x20000000 +#define JKEY_ZERO 0x40000000 + +#define JKEY_OK JKEY_SPACE +#define JKEY_BUT JKEY_SPACE +#define JKEY_BACK JKEY_ONE +#define JKEY_MENU JKEY_TWO +#define JKEY_TELEWEB JKEY_THREE +#define JKEY_TELETEXT JKEY_FOUR +#define JKEY_COIN JKEY_THREE +#define JKEY_ONEUP JKEY_FOUR +#define JKEY_PPLUS JKEY_EIGHT +#define JKEY_PMINUS JKEY_NINE + +#define JKEY_POK JKEY_PSPACE +#define JKEY_PBUT JKEY_PSPACE +#define JKEY_PBACK JKEY_PONE +#define JKEY_PMENU JKEY_PTWO +#define JKEY_PTELEWEB JKEY_PTHREE +#define JKEY_PTELETEXT JKEY_PFOUR +#define JKEY_PEPG JKEY_PFIVE +#define JKEY_PCOIN JKEY_PTHREE +#define JKEY_PONEUP JKEY_PFOUR +#define JKEY_PPPLUS JKEY_PEIGHT +#define JKEY_PPMINUS JKEY_PNINE + +/* Bit mask for mouse button */ +#define LMOUSEDOWN 0x40 +#define LMOUSEUP 0x80 + +/**************************************************************************** +* Exported procedures +****************************************************************************/ +extern void key_Init(void); +extern void key_TurnOn(void); +extern void key_TurnOff(void); + +extern void key_OnKeyDown(int aSource, int aKey); +extern void key_OnKeyUp(int aSource, int aKey); +extern void key_SubscribeKeyUp(void * callback); +extern void key_SubscribeKeyDown(void * callback); +extern void key_OnKeyTimer(void); +extern int key_GetKeyPad(void); + +extern void key_OnMouseMove(int x, int y, int b); +extern void key_GetMouseMove(int *x, int *y, int *b); +#endif diff --git a/MCUME_pico/picocolem/keyboard_osd.h b/MCUME_pico/picocolem/keyboard_osd.h new file mode 100644 index 0000000..4c31e6f --- /dev/null +++ b/MCUME_pico/picocolem/keyboard_osd.h @@ -0,0 +1,19 @@ + +#ifndef keyboard_osd_h_ +#define keyboard_osd_h_ + +extern bool virtualkeyboardIsActive(void); +extern void drawVirtualkeyboard(void); +extern void toggleVirtualkeyboard(bool keepOn); +extern void handleVirtualkeyboard(void); + +extern bool callibrationActive(void); +extern int handleCallibration(uint16_t bClick); + +extern bool menuActive(void); +extern char * menuSelection(void); +extern void toggleMenu(bool on); +extern int handleMenu(uint16_t bClick); + + +#endif diff --git a/MCUME_pico/picocolem/options.h b/MCUME_pico/picocolem/options.h new file mode 100644 index 0000000..36c1ef8 --- /dev/null +++ b/MCUME_pico/picocolem/options.h @@ -0,0 +1 @@ +#define LSB_FIRST 1 diff --git a/MCUME_pico/picocolem/picocolem.cpp b/MCUME_pico/picocolem/picocolem.cpp new file mode 100644 index 0000000..7c21950 --- /dev/null +++ b/MCUME_pico/picocolem/picocolem.cpp @@ -0,0 +1,129 @@ +#include "pico.h" +#include "pico/stdlib.h" + +extern "C" { + #include "iopins.h" + #include "emuapi.h" +} +#include "keyboard_osd.h" +#include "vga_t_dma.h" +extern "C" { +#include "Colem.h" +} +#include + + +TFT_T_DMA tft; +static int skip=0; + +int main(void) { + stdio_init_all(); + tft.begin(VGA_MODE_320x240); + emu_init(); + while (true) { + if (menuActive()) { + uint16_t bClick = emu_DebounceLocalKeys(); + int action = handleMenu(bClick); + char * filename = menuSelection(); + if (action == ACTION_RUNTFT) { + toggleMenu(false); + emu_start(); + emu_Init(filename); + tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) ); + tft.startDMA(); + } + tft.waitSync(); + } + else { + emu_Step(); + uint16_t bClick = emu_DebounceLocalKeys(); + emu_Input(bClick); + } + //int c = getchar_timeout_us(0); + //switch (c) { + // case ' ': + // printf("test: %d\n", 1); + // break; + //} + } +} + +static unsigned char palette8[PALETTE_SIZE]; + +void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index) +{ + if (index +void AudioPlaySystem::snd_Mixer(short * stream, int len ) +{ + if (playing) + { +#ifdef CUSTOM_SND + //printf("s\n"); + SND_Process((void*)stream, len); +#else + int i; + long s; + len = len >> 1; + short v0=chan[0].vol; + short v1=chan[1].vol; + short v2=chan[2].vol; + short v3=chan[3].vol; + short v4=chan[4].vol; + short v5=chan[5].vol; + for (i=0;i>8)&0x3f])>>11); + s+=((v1*square[(chan[1].spos>>8)&0x3f])>>11); + s+=((v2*square[(chan[2].spos>>8)&0x3f])>>11); + s+=((v3*noise[(chan[3].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v4*noise[(chan[4].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v5*noise[(chan[5].spos>>8)&(NOISEBSIZE-1)])>>11); + *stream++ = (short)(s); + *stream++ = (short)(s); + chan[0].spos += chan[0].sinc; + chan[1].spos += chan[1].sinc; + chan[2].spos += chan[2].sinc; + chan[3].spos += chan[3].sinc; + chan[4].spos += chan[4].sinc; + chan[5].spos += chan[5].sinc; + } +#endif + } +} + +void AudioPlaySystem::begin(void) +{ + this->reset(); +} + +void AudioPlaySystem::start(void) +{ + playing = true; +} + +void AudioPlaySystem::setSampleParameters(float clockfreq, float samplerate) { +} + +void AudioPlaySystem::reset(void) +{ + snd_Reset(); +} + +void AudioPlaySystem::stop(void) +{ + playing = false; +} + +bool AudioPlaySystem::isPlaying(void) +{ + return playing; +} + + + +void AudioPlaySystem::sound(int C, int F, int V) { +#ifndef CUSTOM_SND + if (C < 6) { + chan[C].vol = V; + chan[C].sinc = F>>1; + } +#endif +} + +void AudioPlaySystem::step(void) { +} + +void AudioPlaySystem::buzz(int size, int val) { +} +#endif diff --git a/MCUME_pico/piconofrendo/AudioPlaySystem.h b/MCUME_pico/piconofrendo/AudioPlaySystem.h new file mode 100644 index 0000000..5d2efc0 --- /dev/null +++ b/MCUME_pico/piconofrendo/AudioPlaySystem.h @@ -0,0 +1,26 @@ +#ifndef audioplaysystem_h_ +#define audioplaysystem_h_ + +#ifdef HAS_SND + +#include "platform_config.h" + +class AudioPlaySystem +{ +public: + AudioPlaySystem(void) { }; + void begin(void); + void setSampleParameters(float clockfreq, float samplerate); + void reset(void); + void start(void); + void stop(void); + bool isPlaying(void); + void sound(int C, int F, int V); + void buzz(int size, int val); + void step(void); + static void snd_Mixer(short * stream, int len ); +}; + +#endif + +#endif diff --git a/MCUME_pico/piconofrendo/bitmap.c b/MCUME_pico/piconofrendo/bitmap.c new file mode 100644 index 0000000..f26a775 --- /dev/null +++ b/MCUME_pico/piconofrendo/bitmap.c @@ -0,0 +1,152 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** bitmap.c +** +** Bitmap object manipulation routines +** $Id: bitmap.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include +#include +#include "noftypes.h" +#include "bitmap.h" + +// JMH this file had to be adapted for the ESP + + +#include "emuapi.h" + +void bmp_clear(const bitmap_t *bitmap, uint8 color) +{ + // + //memset(bitmap->data, color, bitmap->pitch * bitmap->height); +} + +static bitmap_t *_make_bitmap(uint8 *data_addr, bool hw, int width, + int height, int pitch, int overdraw) +{ + bitmap_t *bitmap; + int i; + + /* quick safety check */ + if (NULL == data_addr) + return NULL; + + /* Make sure to add in space for line pointers */ + bitmap = emu_Malloc(sizeof(bitmap_t) + (sizeof(uint8 *) * height)); + if (NULL == bitmap) + { + return NULL; + } + bitmap->hardware = hw; + bitmap->height = height; + bitmap->width = width; + bitmap->data = data_addr; + bitmap->pitch = pitch + (overdraw * 2); + + /* Set up line pointers */ + /* we want to make some 32-bit aligned adjustment + ** if we haven't been given a hardware bitmap + */ + //printf("setting up bitmap %d\n",(int)bitmap); + for (i = 0; i < height; i++) { + bitmap->line[i] = emu_LineBuffer(i); + } + + return bitmap; +} + +static char fb[1]; +/* Allocate and initialize a bitmap structure */ +bitmap_t *bmp_create(int width, int height, int overdraw) +{ +// uint8 *addr; +// int pitch; +// +// pitch = width + (overdraw * 2); /* left and right */ +// addr = malloc((pitch * height) + 3); /* add max 32-bit aligned adjustment */ +// if (NULL == addr) +// return NULL; +//printf("bmp_create\n"); + return _make_bitmap((uint8*)fb, false, width, height, width, overdraw); +} + + +/* allocate and initialize a hardware bitmap */ +bitmap_t *bmp_createhw(uint8 *addr, int width, int height, int pitch) +{ + return _make_bitmap(addr, true, width, height, pitch, 0); /* zero overdraw */ +} + +/* Deallocate space for a bitmap structure */ +void bmp_destroy(bitmap_t **bitmap) +{ + if (*bitmap) + { + free(*bitmap); + *bitmap = NULL; + } +} + +/* +** $Log: bitmap.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.16 2000/11/05 16:37:18 matt +** rolled rgb.h into bitmap.h +** +** Revision 1.15 2000/10/10 13:58:13 matt +** stroustrup squeezing his way in the door +** +** Revision 1.14 2000/09/18 02:06:48 matt +** -pedantic is your friend +** +** Revision 1.13 2000/08/13 13:16:30 matt +** bugfix for alignment adjustment +** +** Revision 1.12 2000/07/24 04:31:43 matt +** pitch/data area on non-hw bitmaps get padded to 32-bit boundaries +** +** Revision 1.11 2000/07/17 01:52:27 matt +** made sure last line of all source files is a newline +** +** Revision 1.10 2000/07/09 14:43:01 matt +** pitch is now configurable for bmp_createhw() +** +** Revision 1.9 2000/07/06 17:55:57 matt +** two big bugs fixed +** +** Revision 1.8 2000/07/06 17:38:11 matt +** replaced missing string.h include +** +** Revision 1.7 2000/07/06 16:46:57 matt +** added bmp_clear() routine +** +** Revision 1.6 2000/06/26 04:56:24 matt +** minor cleanup +** +** Revision 1.5 2000/06/09 15:12:25 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/bitmap.h b/MCUME_pico/piconofrendo/bitmap.h new file mode 100644 index 0000000..4e3ce7a --- /dev/null +++ b/MCUME_pico/piconofrendo/bitmap.h @@ -0,0 +1,93 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** bitmap.h +** +** Bitmap object defines / prototypes +** $Id: bitmap.h,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#ifndef _BITMAP_H_ +#define _BITMAP_H_ + +#include "noftypes.h" + +/* a bitmap rectangle */ +typedef struct rect_s +{ + int16 x, y; + uint16 w, h; +} rect_t; + +typedef struct rgb_s +{ + int r, g, b; +} rgb_t; + +typedef struct bitmap_s +{ + int width, height, pitch; + bool hardware; /* is data a hardware region? */ + uint8 *data; /* protected */ + uint8 *line[ZERO_LENGTH]; /* will hold line pointers */ +} bitmap_t; + +extern void bmp_clear(const bitmap_t *bitmap, uint8 color); +extern bitmap_t *bmp_create(int width, int height, int overdraw); +extern bitmap_t *bmp_createhw(uint8 *addr, int width, int height, int pitch); +extern void bmp_destroy(bitmap_t **bitmap); + +#endif /* _BITMAP_H_ */ + +/* +** $Log: bitmap.h,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.12 2000/11/05 16:37:18 matt +** rolled rgb.h into bitmap.h +** +** Revision 1.11 2000/10/10 13:58:13 matt +** stroustrup squeezing his way in the door +** +** Revision 1.10 2000/09/18 02:06:48 matt +** -pedantic is your friend +** +** Revision 1.9 2000/07/31 04:28:46 matt +** one million cleanups +** +** Revision 1.8 2000/07/24 04:31:43 matt +** pitch/data area on non-hw bitmaps get padded to 32-bit boundaries +** +** Revision 1.7 2000/07/17 01:52:27 matt +** made sure last line of all source files is a newline +** +** Revision 1.6 2000/07/09 14:43:01 matt +** pitch is now configurable for bmp_createhw() +** +** Revision 1.5 2000/07/06 16:46:57 matt +** added bmp_clear() routine +** +** Revision 1.4 2000/06/09 15:12:25 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/config.c b/MCUME_pico/piconofrendo/config.c new file mode 100644 index 0000000..806d41b --- /dev/null +++ b/MCUME_pico/piconofrendo/config.c @@ -0,0 +1,75 @@ +/* Nofrendo Configuration Braindead Sample Implementation +** +** $Id: config.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include +#include +#include +#include + +#include "noftypes.h" +#include "log.h" +#include "osd.h" +#include "nofconfig.h" +#include "version.h" + + +/* interface */ +config_t config = +{ + CONFIG_FILE +}; + +/* +** $Log: config.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.14 2000/11/05 06:23:10 matt +** realloc was incompatible with memguard +** +** Revision 1.13 2000/10/10 13:58:13 matt +** stroustrup squeezing his way in the door +** +** Revision 1.12 2000/09/20 01:13:28 matt +** damn tabs +** +** Revision 1.11 2000/08/04 12:41:04 neil +** current not a bug +** +** Revision 1.10 2000/07/31 04:28:46 matt +** one million cleanups +** +** Revision 1.9 2000/07/24 04:30:42 matt +** slight cleanup +** +** Revision 1.8 2000/07/23 15:16:08 matt +** changed strcasecmp to stricmp +** +** Revision 1.7 2000/07/19 15:58:55 neil +** config file now configurable (ha) +** +** Revision 1.6 2000/07/18 03:28:32 matt +** help me! I'm a complete mess! +** +** Revision 1.5 2000/07/12 11:03:08 neil +** Always write a config, even if no defaults are changed +** +** Revision 1.4 2000/07/11 15:09:30 matt +** suppressed all warnings +** +** Revision 1.3 2000/07/11 14:59:27 matt +** minor cosmetics.. =) +** +** Revision 1.2 2000/07/11 13:35:38 bsittler +** Changed the config API, implemented config file "nofrendo.cfg". The +** GGI drivers use the group [GGI]. Visual= and Mode= keys are understood. +** +** Revision 1.1 2000/07/11 09:21:10 bsittler +** This is a skeletal configuration system. +** +*/ diff --git a/MCUME_pico/piconofrendo/emuapi.cpp b/MCUME_pico/piconofrendo/emuapi.cpp new file mode 100644 index 0000000..75f32fd --- /dev/null +++ b/MCUME_pico/piconofrendo/emuapi.cpp @@ -0,0 +1,804 @@ +#define KEYMAP_PRESENT 1 + +#define PROGMEM + +#include "pico.h" +#include "pico/stdlib.h" +#include "hardware/adc.h" +#include +#include + +extern "C" { + #include "emuapi.h" + #include "iopins.h" +} + + +#include "vga_t_dma.h" +const uint16_t deflogo[] = { + 0,0 +}; +static const uint16_t * logo = deflogo; + +#define MAX_FILES 64 +#define MAX_FILENAME_SIZE 24 +#define MAX_MENULINES 9 +#define TEXT_HEIGHT 16 +#define TEXT_WIDTH 8 +#define MENU_FILE_XOFFSET (6*TEXT_WIDTH) +#define MENU_FILE_YOFFSET (2*TEXT_HEIGHT) +#define MENU_FILE_W (MAX_FILENAME_SIZE*TEXT_WIDTH) +#define MENU_FILE_H (MAX_MENULINES*TEXT_HEIGHT) +#define MENU_FILE_BGCOLOR RGBVAL16(0x00,0x00,0x40) +#define MENU_JOYS_YOFFSET (12*TEXT_HEIGHT) +#define MENU_VBAR_XOFFSET (0*TEXT_WIDTH) +#define MENU_VBAR_YOFFSET (MENU_FILE_YOFFSET) + +#define MENU_TFT_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_TFT_YOFFSET (MENU_VBAR_YOFFSET+32) +#define MENU_VGA_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_VGA_YOFFSET (MENU_VBAR_YOFFSET+MENU_FILE_H-32-37) + +extern TFT_T_DMA tft; + +static char romspath[64]; +static int nbFiles=0; +static int curFile=0; +static int topFile=0; +static char selection[MAX_FILENAME_SIZE+1]=""; +static char files[MAX_FILES][MAX_FILENAME_SIZE]; +static bool menuRedraw=true; + +static bool i2cKeyboardPresent = false; +static unsigned short * keys; +static int keyMap; + +static int keypadval=0; +static bool joySwapped = false; +static uint16_t bLastState; +static int xRef; +static int yRef; +static uint8_t usbnavpad=0; + +static bool menuOn=true; + + + + +void emu_printf(char * text) +{ + printf("%s\n",text); +} + +void emu_printf(int val) +{ + printf("%d\n",val); +} + +void emu_printi(int val) +{ + printf("%d\n",val); +} + +void emu_printh(int val) +{ + printf("0x%.8\n",val); +} + +static int malbufpt = 0; +static char malbuf[EXTRA_HEAP]; + +void * emu_Malloc(int size) +{ + void * retval = malloc(size); + if (!retval) { + emu_printf("failled to allocate"); + emu_printf(size); + emu_printf("fallback"); + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + } + else { + emu_printf("failure to allocate"); + } + } + else { + emu_printf("could allocate dynamic "); + emu_printf(size); + } + + return retval; +} + +void * emu_MallocI(int size) +{ + void * retval = NULL; + + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + emu_printf("could allocate static "); + emu_printf(size); + } + else { + emu_printf("failure to allocate"); + } + + return retval; +} +void emu_Free(void * pt) +{ + free(pt); +} + + + + + +int emu_ReadAnalogJoyX(int min, int max) +{ +#ifdef PIN_JOY2_A1X + adc_select_input(0); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVX + val = 4095 - val; +#endif + val = val-xRef; + val = ((val*140)/100); + if ( (val > -512) && (val < 512) ) val = 0; + val = val+2048; + return (val*(max-min))/4096; +} + +int emu_ReadAnalogJoyY(int min, int max) +{ +#ifdef PIN_JOY2_A2Y + adc_select_input(1); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVY + val = 4095 - val; +#endif + val = val-yRef; + val = ((val*120)/100); + if ( (val > -512) && (val < 512) ) val = 0; + //val = (val*(max-min))/4096; + val = val+2048; + //return val+(max-min)/2; + return (val*(max-min))/4096; +} + + +static uint16_t readAnalogJoystick(void) +{ + uint16_t joysval = 0; + + int xReading = emu_ReadAnalogJoyX(0,256); + if (xReading > 128) joysval |= MASK_JOY2_LEFT; + else if (xReading < 128) joysval |= MASK_JOY2_RIGHT; + + int yReading = emu_ReadAnalogJoyY(0,256); + if (yReading < 128) joysval |= MASK_JOY2_UP; + else if (yReading > 128) joysval |= MASK_JOY2_DOWN; + +#ifdef PIN_JOY2_BTN + joysval |= (gpio_get(PIN_JOY2_BTN) ? 0 : MASK_JOY2_BTN); +#endif + return (joysval); +} + + +int emu_SwapJoysticks(int statusOnly) { + if (!statusOnly) { + if (joySwapped) { + joySwapped = false; + } + else { + joySwapped = true; + } + } + return(joySwapped?1:0); +} + +int emu_GetPad(void) +{ + return(keypadval/*|((joySwapped?1:0)<<7)*/); +} + +int emu_ReadKeys(void) +{ + uint16_t retval; + uint16_t j1 = readAnalogJoystick(); + uint16_t j2 = 0; + + // Second joystick +#if INVY +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_DOWN; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_UP; +#endif +#else +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_UP; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_DOWN; +#endif +#endif +#if INVX +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_LEFT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_RIGHT; +#endif +#else +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_RIGHT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_LEFT; +#endif +#endif +#ifdef PIN_JOY1_BTN + if ( !gpio_get(PIN_JOY1_BTN) ) j2 |= MASK_JOY2_BTN; +#endif + if (joySwapped) { + retval = ((j1 << 8) | j2); + } + else { + retval = ((j2 << 8) | j1); + } + + if (usbnavpad & MASK_JOY2_UP) retval |= MASK_JOY2_UP; + if (usbnavpad & MASK_JOY2_DOWN) retval |= MASK_JOY2_DOWN; + if (usbnavpad & MASK_JOY2_LEFT) retval |= MASK_JOY2_LEFT; + if (usbnavpad & MASK_JOY2_RIGHT) retval |= MASK_JOY2_RIGHT; + if (usbnavpad & MASK_JOY2_BTN) retval |= MASK_JOY2_BTN; +#ifdef PIN_KEY_USER1 + if ( !gpio_get(PIN_KEY_USER1) ) retval |= MASK_KEY_USER1; +#endif +#ifdef PIN_KEY_USER2 + if ( !gpio_get(PIN_KEY_USER2) ) retval |= MASK_KEY_USER2; +#endif +#ifdef PIN_KEY_USER3 + if ( !gpio_get(PIN_KEY_USER3) ) retval |= MASK_KEY_USER3; +#endif +#ifdef PIN_KEY_USER4 + if ( !gpio_get(PIN_KEY_USER4) ) retval |= MASK_KEY_USER4; +#endif + + //Serial.println(retval,HEX); + + if ( ((retval & (MASK_KEY_USER1+MASK_KEY_USER2)) == (MASK_KEY_USER1+MASK_KEY_USER2)) + || (retval & MASK_KEY_USER4 ) ) + { + } + + return (retval); +} + +unsigned short emu_DebounceLocalKeys(void) +{ + uint16_t bCurState = emu_ReadKeys(); + uint16_t bClick = bCurState & ~bLastState; + bLastState = bCurState; + + return (bClick); +} + +int emu_ReadI2CKeyboard(void) { + int retval=0; + + return(retval); +} + +void emu_InitJoysticks(void) { + + // Second Joystick +#ifdef PIN_JOY1_1 + gpio_set_pulls(PIN_JOY1_1,true,false); + gpio_set_dir(PIN_JOY1_1,GPIO_IN); +#endif +#ifdef PIN_JOY1_2 + gpio_set_pulls(PIN_JOY1_2,true,false); + gpio_set_dir(PIN_JOY1_2,GPIO_IN); +#endif +#ifdef PIN_JOY1_3 + gpio_set_pulls(PIN_JOY1_3,true,false); + gpio_set_dir(PIN_JOY1_3,GPIO_IN); +#endif +#ifdef PIN_JOY1_4 + gpio_set_pulls(PIN_JOY1_4,true,false); + gpio_set_dir(PIN_JOY1_4,GPIO_IN); +#endif +#ifdef PIN_JOY1_BTN + gpio_set_pulls(PIN_JOY1_BTN,true,false); + gpio_set_dir(PIN_JOY1_BTN,GPIO_IN); +#endif + +#ifdef PIN_KEY_USER1 + gpio_set_pulls(PIN_KEY_USER1,true,false); + gpio_set_dir(PIN_KEY_USER1,GPIO_IN); +#endif +#ifdef PIN_KEY_USER2 + gpio_set_pulls(PIN_KEY_USER2,true,false); + gpio_set_dir(PIN_KEY_USER2,GPIO_IN); +#endif +#ifdef PIN_KEY_USER3 + gpio_set_pulls(PIN_KEY_USER3,true,false); + gpio_set_dir(PIN_KEY_USER3,GPIO_IN); +#endif +#ifdef PIN_KEY_USER4 + gpio_set_pulls(PIN_KEY_USER4,true,false); + gpio_set_dir(PIN_KEY_USER4,GPIO_IN); +#endif +#ifdef PIN_JOY2_BTN + gpio_set_pulls(PIN_JOY2_BTN,true,false); + gpio_set_dir(PIN_JOY2_BTN,GPIO_IN); +#endif + +#ifdef PIN_JOY2_A1X + adc_init(); + adc_gpio_init(PIN_JOY2_A1X); + adc_gpio_init(PIN_JOY2_A2Y); + xRef=0; yRef=0; + for (int i=0; i<10; i++) { + adc_select_input(0); + xRef += adc_read(); + adc_select_input(1); + yRef += adc_read(); + sleep_ms(20); + } +#endif + +#if INVX + xRef = 4095 -xRef/10; +#else + xRef /= 10; +#endif +#if INVY + yRef = 4095 -yRef/10; +#else + yRef /= 10; +#endif +} + + + + +int emu_setKeymap(int index) { +} + + +#include "ff.h" +static FATFS fatfs; +static FIL file; +extern "C" int sd_init_driver(void); + +static int readNbFiles(char * rootdir) { + int totalFiles = 0; + + DIR dir; + FILINFO entry; + FRESULT fr = f_findfirst(&dir, &entry, rootdir, "*"); + while ( (fr == FR_OK) && (entry.fname[0]) && (totalFiles=0) { + menuRedraw=true; + curFile -= 9; + } else if (curFile!=0) { + menuRedraw=true; + curFile--; + } + } + else if (bClick & MASK_JOY2_DOWN) { + if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_JOY2_LEFT) || (bClick & MASK_JOY1_LEFT) ) { + if ((curFile<(nbFiles-9)) && (nbFiles)) { + curFile += 9; + menuRedraw=true; + } + else if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_KEY_USER2) ) { + emu_SwapJoysticks(0); + menuRedraw=true; + } + + if (menuRedraw && nbFiles) { + int fileIndex = 0; + tft.drawRectNoDma(MENU_FILE_XOFFSET,MENU_FILE_YOFFSET, MENU_FILE_W, MENU_FILE_H, MENU_FILE_BGCOLOR); +// if (curFile <= (MAX_MENULINES/2-1)) topFile=0; +// else topFile=curFile-(MAX_MENULINES/2); + if (curFile <= (MAX_MENULINES-1)) topFile=0; + else topFile=curFile-(MAX_MENULINES/2); + + //Serial.print("curfile: "); + //Serial.println(curFile); + //Serial.print("topFile: "); + //Serial.println(topFile); + + int i=0; + while (i=nbFiles) { + // no more files + break; + } + char * filename = &files[fileIndex][0]; + if (fileIndex >= topFile) { + if ((i+topFile) < nbFiles ) { + if ((i+topFile)==curFile) { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0x00), RGBVAL16(0xff,0x00,0x00), true); + strcpy(selection,filename); + } + else { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0xff), MENU_FILE_BGCOLOR, true); + } + } + i++; + } + fileIndex++; + } + + + tft.drawTextNoDma(48,MENU_JOYS_YOFFSET+8, (emu_SwapJoysticks(1)?(char*)"SWAP=1":(char*)"SWAP=0"), RGBVAL16(0x00,0xff,0xff), RGBVAL16(0x00,0x00,0xff), false); + menuRedraw=false; + } + + return (action); +} + +bool menuActive(void) +{ + return (menuOn); +} + +void toggleMenu(bool on) { + if (on) { + menuOn = true; + backgroundMenu(); + } else { + menuOn = false; + } +} + +char * menuSelection(void) +{ + return (selection); +} + + + + + + + + + +int emu_FileOpen(char * filename) +{ + int retval = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileOpen..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + retval = 1; + } + else { + emu_printf("FileOpen failed"); + } + return (retval); +} + +int emu_FileRead(char * buf, int size) +{ + unsigned char buffer[256]; + int remaining = size; + int byteread = 0; + unsigned int retval=0; + if (size < 256) { + if( !(f_read (&file, buffer, size, &retval)) ) + if (retval>0) { + memcpy(buf,buffer,retval); + byteread += retval; + } + } + else { + while (remaining>0) { + if( !(f_read (&file, buffer, 256, &retval)) ) + //f_read (&file, buffer, 256, &retval); + if (retval>0) { + //emu_printi(retval); + memcpy(buf,buffer,retval); + buf += retval; + byteread += retval; + remaining -= retval; + } + else { + break; + } + } + } + return byteread; +} + +unsigned char emu_FileGetc(void) { + unsigned char c; + unsigned int retval=0; + if( !(f_read (&file, &c, 1, &retval)) ) + if (retval != 1) { + emu_printf("emu_FileGetc failed"); + } + return c; +} + + +void emu_FileClose(void) +{ + f_close(&file); +} + +int emu_FileSize(char * filename) +{ + int filesize=0; + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileSize..."); + emu_printf(filepath); + FILINFO entry; + f_stat(filepath, &entry); + filesize = entry.fsize; + return(filesize); +} + +int emu_FileSeek(int seek) +{ + f_lseek(&file, seek); + return (seek); +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + unsigned int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } + + return(filesize); +} + +#ifdef SDIO + + +int emu_FileTell(void) +{ +#ifdef USE_SDFS + return (f_tell(&file)); +#else + return (50); +#endif +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + filesize = file.size(); + emu_printf(filesize); + + if (size >= filesize) + { + if (emu_FileRead(buf, filesize) != filesize) + { + emu_printf("File read failed"); + } + } + file.close(); + } +#endif + + return(filesize); +} + +int emu_LoadFileSeek(char * filename, char * buf, int size, int seek) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFileSeek..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + f_lseek(&file, seek); + emu_printf(size); + if (size >= filesize) + { + int retval=0; + if( (!f_read (&file, buf, size, &retval)) ) + if (retval != size) + { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + file.seek(seek); + emu_printf(size); + if (file.read(buf, size) != size) { + emu_printf("File read failed"); + } + file.close(); + } +#endif + + return(filesize); +} +#endif + + + +void emu_init(void) +{ + sd_init_driver(); + FRESULT fr = f_mount(&fatfs, "0:", 1); + //emu_FileSystemInit(); + + strcpy(romspath,ROMSDIR); + nbFiles = readNbFiles(romspath); + + emu_printf("SD initialized, files found: "); + emu_printi(nbFiles); + + emu_InitJoysticks(); +#ifdef SWAP_JOYSTICK + joySwapped = true; +#else + joySwapped = false; +#endif + + toggleMenu(true); +} + + +void emu_start(void) +{ + + usbnavpad = 0; + + keys = (unsigned short *)key_map1; + keyMap = 0; +} diff --git a/MCUME_pico/piconofrendo/emuapi.h b/MCUME_pico/piconofrendo/emuapi.h new file mode 100644 index 0000000..6c1ee75 --- /dev/null +++ b/MCUME_pico/piconofrendo/emuapi.h @@ -0,0 +1,136 @@ +#ifndef EMUAPI_H +#define EMUAPI_H + +#include "platform_config.h" + +#define CUSTOM_SND 1 +//#define TIMER_REND 1 + +#define EXTRA_HEAP 0x10 + +// Title: < > +#define TITLE " NES Emulator" +#define ROMSDIR "nes" + +#define emu_Init(ROM) {nes_Start(ROM); nes_Init(); } +#define emu_Step(x) { nes_Step(); } +#define emu_Input(x) {} + +#define PALETTE_SIZE 256 +#define VID_FRAME_SKIP 0x0 +#define TFT_VBUFFER_YCROP 0 +#define SINGLELINE_RENDERING 1 + +#define ACTION_NONE 0 +#define ACTION_MAXKBDVAL 12 +#define ACTION_EXITKBD 128 +#define ACTION_RUNTFT 129 +#define ACTION_RUNVGA 130 + +#ifdef KEYMAP_PRESENT + +#define TAREA_W_DEF 32 +#define TAREA_H_DEF 32 +#define TAREA_END 255 +#define TAREA_NEW_ROW 254 +#define TAREA_NEW_COL 253 +#define TAREA_XY 252 +#define TAREA_WH 251 + +#define KEYBOARD_X 104 +#define KEYBOARD_Y 78 +#define KEYBOARD_KEY_H 30 +#define KEYBOARD_KEY_W 21 +#define KEYBOARD_HIT_COLOR RGBVAL16(0xff,0x00,0x00) + +const unsigned short keysw[] = { + TAREA_XY,KEYBOARD_X,KEYBOARD_Y, + TAREA_WH,KEYBOARD_KEY_W,KEYBOARD_KEY_H, + TAREA_NEW_ROW,40,40, + TAREA_END}; + +const unsigned short key_map1[] = { + 2,3}; + +#ifdef HAS_I2CKBD +const unsigned short i2ckeys[] = { + 0X0080,0X0008}; +#endif + +#endif + + +#define MASK_JOY2_RIGHT 0x0001 +#define MASK_JOY2_LEFT 0x0002 +#define MASK_JOY2_UP 0x0004 +#define MASK_JOY2_DOWN 0x0008 +#define MASK_JOY2_BTN 0x0010 +#define MASK_KEY_USER1 0x0020 +#define MASK_KEY_USER2 0x0040 +#define MASK_KEY_USER3 0x0080 +#define MASK_JOY1_RIGHT 0x0100 +#define MASK_JOY1_LEFT 0x0200 +#define MASK_JOY1_UP 0x0400 +#define MASK_JOY1_DOWN 0x0800 +#define MASK_JOY1_BTN 0x1000 +#define MASK_KEY_USER4 0x2000 + + + +extern void emu_init(void); +extern void emu_start(void); +extern void emu_resetSD(void); + +extern void emu_printf(char * text); +extern void emu_printi(int val); +extern void * emu_Malloc(int size); +extern void emu_Free(void * pt); + +extern int emu_FileOpen(char * filename); +extern int emu_FileRead(char * buf, int size); +extern unsigned char emu_FileGetc(void); +extern int emu_FileSeek(int seek); +extern void emu_FileClose(void); +extern int emu_FileSize(char * filename); +extern int emu_LoadFile(char * filename, char * buf, int size); +extern int emu_LoadFileSeek(char * filename, char * buf, int size, int seek); +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); + +extern void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index); +extern void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride); +extern void emu_DrawLine(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line); +extern void emu_DrawVsync(void); +extern int emu_FrameSkip(void); +extern void * emu_LineBuffer(int line); + +extern void emu_InitJoysticks(void); +extern int emu_SwapJoysticks(int statusOnly); +extern unsigned short emu_DebounceLocalKeys(void); +extern int emu_ReadKeys(void); +extern int emu_GetPad(void); +extern int emu_ReadAnalogJoyX(int min, int max); +extern int emu_ReadAnalogJoyY(int min, int max); +extern int emu_ReadI2CKeyboard(void); +extern void emu_KeyboardOnUp(int keymodifer, int key); +extern void emu_KeyboardOnDown(int keymodifer, int key); + +extern void emu_sndPlaySound(int chan, int volume, int freq); +extern void emu_sndPlayBuzz(int size, int val); +extern void emu_sndInit(); +extern void emu_resetus(void); +extern int emu_us(void); + +extern int emu_setKeymap(int index); + +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); +extern void emu_printh(int val); + + + +#endif diff --git a/MCUME_pico/piconofrendo/event.c b/MCUME_pico/piconofrendo/event.c new file mode 100644 index 0000000..a6f8dcb --- /dev/null +++ b/MCUME_pico/piconofrendo/event.c @@ -0,0 +1,324 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** event.c +** +** OS-independent event handling +** $Id: event.c,v 1.3 2001/04/27 14:37:11 neil Exp $ +*/ + +#include +#include "noftypes.h" +#include "event.h" +#include "nesinput.h" + + + +/* pointer to our current system's event handler table */ +static event_t *system_events = NULL; + +/* standard keyboard input */ +static nesinput_t kb_input = { INP_JOYPAD0, 0 }; +static nesinput_t kb_alt_input = { INP_JOYPAD1, 0 }; + + + +static void func_event_joypad1_a(int code) +{ + input_event(&kb_input, code, INP_PAD_A); +} + +static void func_event_joypad1_b(int code) +{ + input_event(&kb_input, code, INP_PAD_B); +} + +static void func_event_joypad1_start(int code) +{ + input_event(&kb_input, code, INP_PAD_START); +} + +static void func_event_joypad1_select(int code) +{ + input_event(&kb_input, code, INP_PAD_SELECT); +} + +static void func_event_joypad1_up(int code) +{ + input_event(&kb_input, code, INP_PAD_UP); +} + +static void func_event_joypad1_down(int code) +{ + input_event(&kb_input, code, INP_PAD_DOWN); +} + +static void func_event_joypad1_left(int code) +{ + input_event(&kb_input, code, INP_PAD_LEFT); +} + +static void func_event_joypad1_right(int code) +{ + input_event(&kb_input, code, INP_PAD_RIGHT); +} + +static void func_event_joypad2_a(int code) +{ + input_event(&kb_alt_input, code, INP_PAD_A); +} + +static void func_event_joypad2_b(int code) +{ + input_event(&kb_alt_input, code, INP_PAD_B); +} + +static void func_event_joypad2_start(int code) +{ + input_event(&kb_alt_input, code, INP_PAD_START); +} + +static void func_event_joypad2_select(int code) +{ + input_event(&kb_alt_input, code, INP_PAD_SELECT); +} + +static void func_event_joypad2_up(int code) +{ + input_event(&kb_alt_input, code, INP_PAD_UP); +} + +static void func_event_joypad2_down(int code) +{ + input_event(&kb_alt_input, code, INP_PAD_DOWN); +} + +static void func_event_joypad2_left(int code) +{ + input_event(&kb_alt_input, code, INP_PAD_LEFT); +} + +static void func_event_joypad2_right(int code) +{ + input_event(&kb_alt_input, code, INP_PAD_RIGHT); +} + + + +/* NES events */ +static const event_t nes_events[] = +{ + NULL, /* 0 */ + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + /* saves */ + NULL, + NULL, /* 10 */ + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, /* 20 */ + /* GUI */ + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + /* sound */ + NULL, + NULL, /* 30 */ + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + /* picture */ + NULL, + NULL, + NULL, + NULL, /* 40 */ + NULL, + NULL, + NULL, + /* joypad 1 */ + func_event_joypad1_a, + func_event_joypad1_b, + func_event_joypad1_start, + func_event_joypad1_select, + func_event_joypad1_up, + func_event_joypad1_down, + func_event_joypad1_left, /* 50 */ + func_event_joypad1_right, + /* joypad 2 */ + func_event_joypad2_a, + func_event_joypad2_b, + func_event_joypad2_start, + func_event_joypad2_select, + func_event_joypad2_up, + func_event_joypad2_down, + func_event_joypad2_left, + func_event_joypad2_right, + /* NSF control */ + NULL, /* 60 */ + NULL, + NULL, + /* OS-specific */ + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, /* 70 */ + NULL, + /* last */ + NULL +}; +static event_t *event_system_table[NUM_SUPPORTED_SYSTEMS] = +{ + NULL, /* unknown */ + NULL, /* autodetect */ + nes_events, /* nes */ +}; + + + +void event_init(void) +{ + input_register(&kb_input); + input_register(&kb_alt_input); +} + +/* set up the event system for a certain console/system type */ +void event_set_system(system_t type) +{ + ASSERT(type < NUM_SUPPORTED_SYSTEMS); + + system_events = event_system_table[type]; +} + +void event_set(int index, event_t handler) +{ + /* now, event_set is used to set osd-specific events. We should assume + ** (for now, at least) that these events should be used across all + ** emulated systems, so let's loop through all system event handler + ** tables and add this event... + */ + int i; + + for (i = 0; i < NUM_SUPPORTED_SYSTEMS; i++) + { + if(event_system_table[i]) + { + event_system_table[i][index] = handler; + } + } +} + + +event_t event_get(int index) +{ + return system_events[index]; +} + + +/* +** $Log: event.c,v $ +** Revision 1.3 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.2 2001/04/27 11:10:08 neil +** compile +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.18 2000/11/25 20:26:05 matt +** removed fds "system" +** +** Revision 1.17 2000/11/09 14:05:42 matt +** state load fixed, state save mostly fixed +** +** Revision 1.16 2000/11/05 16:37:18 matt +** rolled rgb.h into bitmap.h +** +** Revision 1.15 2000/11/01 17:33:26 neil +** little crash bugs fixed +** +** Revision 1.14 2000/11/01 14:15:35 matt +** multi-system event system, or whatever +** +** Revision 1.13 2000/10/27 12:59:48 matt +** api change for ppu palette functions +** +** Revision 1.12 2000/10/26 22:48:05 matt +** no need for extern +** +** Revision 1.11 2000/10/25 00:23:16 matt +** makefiles updated for new directory structure +** +** Revision 1.10 2000/10/23 17:50:46 matt +** adding fds support +** +** Revision 1.9 2000/10/23 15:52:04 matt +** better system handling +** +** Revision 1.8 2000/10/22 15:01:51 matt +** prevented palette changing in VS unisystem games +** +** Revision 1.7 2000/10/10 13:03:54 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.6 2000/08/16 02:58:34 matt +** random cleanups +** +** Revision 1.5 2000/07/27 01:15:33 matt +** name changes +** +** Revision 1.4 2000/07/26 21:36:13 neil +** Big honkin' change -- see the mailing list +** +** Revision 1.3 2000/07/23 15:17:19 matt +** non-osd calls moved from osd.c to gui.c +** +** Revision 1.2 2000/07/21 12:07:40 neil +** added room in event_array for all osd events +** +** Revision 1.1 2000/07/21 04:26:38 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/event.h b/MCUME_pico/piconofrendo/event.h new file mode 100755 index 0000000..9710412 --- /dev/null +++ b/MCUME_pico/piconofrendo/event.h @@ -0,0 +1,154 @@ +/* vim: set tabstop=3 expandtab: +** +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** event.h +** +** OS-independent event handling +** $Id: event.h,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#ifndef _EVENT_H_ +#define _EVENT_H_ + +#include "nofrendo.h" + +enum +{ + event_none = 0, + event_quit, + event_insert, + event_eject, + event_togglepause, + event_soft_reset, + event_hard_reset, + event_snapshot, + event_toggle_frameskip, + /* saves */ + event_state_save, + event_state_load, + event_state_slot_0, + event_state_slot_1, + event_state_slot_2, + event_state_slot_3, + event_state_slot_4, + event_state_slot_5, + event_state_slot_6, + event_state_slot_7, + event_state_slot_8, + event_state_slot_9, + /* GUI */ + event_gui_toggle_oam, + event_gui_toggle_wave, + event_gui_toggle_pattern, + event_gui_pattern_color_up, + event_gui_pattern_color_down, + event_gui_toggle_fps, + event_gui_display_info, + event_gui_toggle, + /* sound */ + event_toggle_channel_0, + event_toggle_channel_1, + event_toggle_channel_2, + event_toggle_channel_3, + event_toggle_channel_4, + event_toggle_channel_5, + event_set_filter_0, + event_set_filter_1, + event_set_filter_2, + /* picture */ + event_toggle_sprites, + event_palette_hue_up, + event_palette_hue_down, + event_palette_tint_up, + event_palette_tint_down, + event_palette_set_default, + event_palette_set_shady, + /* joypad 1 */ + event_joypad1_a, + event_joypad1_b, + event_joypad1_start, + event_joypad1_select, + event_joypad1_up, + event_joypad1_down, + event_joypad1_left, + event_joypad1_right, + /* joypad 2 */ + event_joypad2_a, + event_joypad2_b, + event_joypad2_start, + event_joypad2_select, + event_joypad2_up, + event_joypad2_down, + event_joypad2_left, + event_joypad2_right, + /* NSF control */ + event_songup, + event_songdown, + event_startsong, + /* OS specific */ + event_osd_1, + event_osd_2, + event_osd_3, + event_osd_4, + event_osd_5, + event_osd_6, + event_osd_7, + event_osd_8, + event_osd_9, + /* last */ + event_last +}; + +typedef void (*event_t)(int code); + +extern void event_init(void); +extern void event_set(int index, event_t handler); +extern event_t event_get(int index); +extern void event_set_system(system_t type); + +#endif /* !_EVENT_H_ */ + +/* +** $Log: event.h,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.6 2000/11/01 14:15:35 matt +** multi-system event system, or whatever +** +** Revision 1.5 2000/10/10 13:03:54 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.4 2000/07/31 04:28:46 matt +** one million cleanups +** +** Revision 1.3 2000/07/26 21:36:13 neil +** Big honkin' change -- see the mailing list +** +** Revision 1.2 2000/07/21 04:27:40 matt +** don't mind me... +** +** Revision 1.1 2000/07/21 04:26:38 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/font8x8.h b/MCUME_pico/piconofrendo/font8x8.h new file mode 100644 index 0000000..4f773da --- /dev/null +++ b/MCUME_pico/piconofrendo/font8x8.h @@ -0,0 +1,135 @@ + +// Font: c64_lower.64c + +const unsigned char font8x8[128][8] PROGMEM = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) + { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) + { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) + { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) + { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//) + { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) + { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) + { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) + { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F +}; + diff --git a/MCUME_pico/piconofrendo/iopins.h b/MCUME_pico/piconofrendo/iopins.h new file mode 100644 index 0000000..a636576 --- /dev/null +++ b/MCUME_pico/piconofrendo/iopins.h @@ -0,0 +1,42 @@ +#ifndef IOPINS_H +#define IOPINS_H + +#include "platform_config.h" + + +// VGA (see in code!!!) +/* +2-9 RRRGGGBB +10-11 VSYNC and HSYNC +*/ + +// SD (see SPI0 in code!!!) +/* +#define SD_SCLK 18 +#define SD_MOSI 19 +#define SD_MISO 16 +#define SD_CS 17 +*/ + +// I2C keyboard (not used) +/* +#define I2C_SCL_IO 15? +#define I2C_SDA_IO 14? +*/ + +// Analog joystick (primary) for JOY2 and 3 extra buttons +#define PIN_JOY2_A1X 26 +#define PIN_JOY2_A2Y 27 +#define PIN_JOY2_BTN 22 +#define PIN_KEY_USER1 20 +#define PIN_KEY_USER2 21 + +// Second joystick +//#define PIN_JOY1_BTN 2 +//#define PIN_JOY1_1 14 // UP +//#define PIN_JOY1_2 7 // DOWN +//#define PIN_JOY1_3 6 // RIGHT +//#define PIN_JOY1_4 5 // LEFT + + +#endif diff --git a/MCUME_pico/piconofrendo/keyboard_osd.h b/MCUME_pico/piconofrendo/keyboard_osd.h new file mode 100644 index 0000000..062eb4e --- /dev/null +++ b/MCUME_pico/piconofrendo/keyboard_osd.h @@ -0,0 +1,20 @@ + +#ifndef keyboard_osd_h_ +#define keyboard_osd_h_ + +extern bool virtualkeyboardIsActive(void); +extern void drawVirtualkeyboard(void); +extern void toggleVirtualkeyboard(bool keepOn); +extern void handleVirtualkeyboard(void); + +extern bool callibrationActive(void); +extern int handleCallibration(uint16_t bClick); + +extern bool menuActive(void); +extern char * menuSelection(void); +extern void toggleMenu(bool on); +extern int handleMenu(uint16_t bClick); + + +#endif + diff --git a/MCUME_pico/piconofrendo/libsnss.h b/MCUME_pico/piconofrendo/libsnss.h new file mode 100755 index 0000000..576227c --- /dev/null +++ b/MCUME_pico/piconofrendo/libsnss.h @@ -0,0 +1,397 @@ +/**************************************************************************/ +/* + libsnss.h + + (C) 2000 The SNSS Group + See README.TXT file for license and terms of use. + + $Id: libsnss.h,v 1.1 2001/04/27 12:54:40 neil Exp $ +*/ +/**************************************************************************/ + +#ifndef _LIBSNSS_H_ +#define _LIBSNSS_H_ + +#include + +/**************************************************************************/ +/* endian customization */ +/**************************************************************************/ +/* + Endian-ness quick reference: + the number is: + $12345678 + the little-endian representation (e.g.: 6502, Intel x86) is: + 78 56 34 12 + the big-endian representation (e.g.: Motorola 68000) is: + 12 34 56 78 + the SNSS file format uses big-endian representation +*/ + +/* comment/uncomment depending on your processor architecture */ +/* commenting this out implies BIG ENDIAN */ +#define USE_LITTLE_ENDIAN + +/**************************************************************************/ +/* SNSS constants */ +/**************************************************************************/ + +typedef enum _SNSS_OPEN_MODES +{ + SNSS_OPEN_READ, + SNSS_OPEN_WRITE +} SNSS_OPEN_MODE; + +/* block types */ +typedef enum _SNSS_BLOCK_TYPES +{ + SNSS_BASR, + SNSS_VRAM, + SNSS_SRAM, + SNSS_MPRD, + SNSS_CNTR, + SNSS_SOUN, + SNSS_UNKNOWN_BLOCK +} SNSS_BLOCK_TYPE; + +/* function return types */ +typedef enum _SNSS_RETURN_CODES +{ + SNSS_OK, + SNSS_BAD_FILE_TAG, + SNSS_OPEN_FAILED, + SNSS_CLOSE_FAILED, + SNSS_READ_FAILED, + SNSS_WRITE_FAILED, + SNSS_OUT_OF_MEMORY, + SNSS_UNSUPPORTED_BLOCK +} SNSS_RETURN_CODE; + + +#define TAG_LENGTH 4 +#define SNSS_BLOCK_VERSION 1 + +/**************************************************************************/ +/* SNSS data structures */ +/**************************************************************************/ + +struct mapper1Data +{ + unsigned char registers[4]; + unsigned char latch; + unsigned char numberOfBits; +}; + +struct mapper4Data +{ + unsigned char irqCounter; + unsigned char irqLatchCounter; + unsigned char irqCounterEnabled; + unsigned char last8000Write; +}; + +struct mapper5Data +{ + unsigned char dummy; /* needed for some compilers; remove if any members are added */ +}; + +struct mapper6Data +{ + unsigned char irqCounter; + unsigned char irqLatchCounter; + unsigned char irqCounterEnabled; + unsigned char last43FEWrite; + unsigned char last4500Write; +}; + +struct mapper9Data +{ + unsigned char latch[2]; + unsigned char lastB000Write; + unsigned char lastC000Write; + unsigned char lastD000Write; + unsigned char lastE000Write; +}; + +struct mapper10Data +{ + unsigned char latch[2]; + unsigned char lastB000Write; + unsigned char lastC000Write; + unsigned char lastD000Write; + unsigned char lastE000Write; +}; + +struct mapper16Data +{ + unsigned char irqCounterLowByte; + unsigned char irqCounterHighByte; + unsigned char irqCounterEnabled; +}; + +struct mapper17Data +{ + unsigned char irqCounterLowByte; + unsigned char irqCounterHighByte; + unsigned char irqCounterEnabled; +}; + +struct mapper18Data +{ + unsigned char irqCounterLowByte; + unsigned char irqCounterHighByte; + unsigned char irqCounterEnabled; +}; + +struct mapper19Data +{ + unsigned char irqCounterLowByte; + unsigned char irqCounterHighByte; + unsigned char irqCounterEnabled; +}; + +struct mapper21Data +{ + unsigned char irqCounter; + unsigned char irqCounterEnabled; +}; + +struct mapper24Data +{ + unsigned char irqCounter; + unsigned char irqCounterEnabled; +}; + +struct mapper40Data +{ + unsigned char irqCounter; + unsigned char irqCounterEnabled; +}; + +struct mapper69Data +{ + unsigned char irqCounterLowByte; + unsigned char irqCounterHighByte; + unsigned char irqCounterEnabled; +}; + +struct mapper90Data +{ + unsigned char irqCounter; + unsigned char irqLatchCounter; + unsigned char irqCounterEnabled; +}; + +struct mapper224Data +{ + unsigned char chrRamWriteable; +}; + +struct mapper225Data +{ + unsigned char prgSize; + unsigned char registers[4]; +}; + +struct mapper226Data +{ + unsigned char chrRamWriteable; +}; + +struct mapper228Data +{ + unsigned char prgChipSelected; +}; + +struct mapper230Data +{ + unsigned char numberOfResets; +}; + +typedef struct _SnssFileHeader +{ + char tag[TAG_LENGTH + 1]; + unsigned int numberOfBlocks; +} SnssFileHeader; + +/* this block appears before every block in the SNSS file */ +typedef struct _SnssBlockHeader +{ + char tag[TAG_LENGTH + 1]; + unsigned int blockVersion; + unsigned int blockLength; +} SnssBlockHeader; + +#define BASE_BLOCK_LENGTH 0x1931 +typedef struct _SnssBaseBlock +{ + unsigned char regA; + unsigned char regX; + unsigned char regY; + unsigned char regFlags; + unsigned char regStack; + unsigned short regPc; + unsigned char reg2000; + unsigned char reg2001; + unsigned char cpuRam[0x800]; + unsigned char spriteRam[0x100]; + unsigned char ppuRam[0x1000]; + unsigned char palette[0x20]; + unsigned char mirrorState[4]; + unsigned short vramAddress; + unsigned char spriteRamAddress; + unsigned char tileXOffset; +} SnssBaseBlock; + +#define VRAM_8K 0x2000 +#define VRAM_16K 0x4000 +typedef struct _SnssVramBlock +{ + unsigned short vramSize; + unsigned char vram[VRAM_16K]; +} SnssVramBlock; + +#define SRAM_1K 0x0400 +#define SRAM_2K 0x0800 +#define SRAM_3K 0x0C00 +#define SRAM_4K 0x1000 +#define SRAM_5K 0x1400 +#define SRAM_6K 0x1800 +#define SRAM_7K 0x1C00 +#define SRAM_8K 0x2000 +typedef struct _SnssSramBlock +{ + unsigned short sramSize; + unsigned char sramEnabled; + unsigned char sram[SRAM_8K]; +} SnssSramBlock; + +#define MAPPER_BLOCK_LENGTH 0x98 +typedef struct _SnssMapperBlock +{ + unsigned short prgPages[4]; + unsigned short chrPages[8]; + + union _extraData + { + unsigned char mapperData[128]; + struct mapper1Data mapper1; + struct mapper4Data mapper4; + struct mapper5Data mapper5; + struct mapper6Data mapper6; + struct mapper9Data mapper9; + struct mapper10Data mapper10; + struct mapper16Data mapper16; + struct mapper17Data mapper17; + struct mapper18Data mapper18; + struct mapper19Data mapper19; + struct mapper21Data mapper21; + struct mapper24Data mapper24; + struct mapper40Data mapper40; + struct mapper69Data mapper69; + struct mapper90Data mapper90; + struct mapper224Data mapper224; + struct mapper225Data mapper225; + struct mapper226Data mapper226; + struct mapper228Data mapper228; + struct mapper230Data mapper230; + } extraData; +} SnssMapperBlock; + +typedef struct _SnssControllersBlock +{ + unsigned char dummy; /* needed for some compilers; remove if any members are added */ +} SnssControllersBlock; + +#define SOUND_BLOCK_LENGTH 0x16 +typedef struct _SnssSoundBlock +{ + unsigned char soundRegisters[0x16]; +} SnssSoundBlock; + +/**************************************************************************/ +/* SNSS file manipulation functions */ +/**************************************************************************/ + +typedef struct _SNSS_FILE +{ + FILE *fp; + SNSS_OPEN_MODE mode; + SnssFileHeader headerBlock; + SnssBaseBlock baseBlock; + SnssVramBlock vramBlock; + SnssSramBlock sramBlock; + SnssMapperBlock mapperBlock; + SnssControllersBlock contBlock; + SnssSoundBlock soundBlock; +} SNSS_FILE; + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* general file manipulation routines */ +SNSS_RETURN_CODE SNSS_OpenFile (SNSS_FILE **snssFile, const char *filename, + SNSS_OPEN_MODE mode); +SNSS_RETURN_CODE SNSS_CloseFile (SNSS_FILE **snssFile); + +/* block traversal */ +SNSS_RETURN_CODE SNSS_GetNextBlockType (SNSS_BLOCK_TYPE *blockType, + SNSS_FILE *snssFile); +SNSS_RETURN_CODE SNSS_SkipNextBlock (SNSS_FILE *snssFile); + +/* functions to read/write SNSS blocks */ +SNSS_RETURN_CODE SNSS_ReadBlock (SNSS_FILE *snssFile, SNSS_BLOCK_TYPE blockType); +SNSS_RETURN_CODE SNSS_WriteBlock (SNSS_FILE *snssFile, SNSS_BLOCK_TYPE blockType); + +/* support functions */ +const char *SNSS_GetErrorString (SNSS_RETURN_CODE code); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _LIBSNSS_H_ */ + +/* +** $Log: libsnss.h,v $ +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.2 2000/11/09 14:07:41 matt +** minor update +** +** Revision 1.1 2000/10/24 12:19:01 matt +** changed directory structure +** +** Revision 1.9 2000/09/18 02:06:48 matt +** -pedantic is your friend +** +** Revision 1.8 2000/07/17 01:52:27 matt +** made sure last line of all source files is a newline +** +** Revision 1.7 2000/07/15 23:49:14 matt +** fixed some typos in the mapper-specific data +** +** Revision 1.6 2000/07/09 15:37:21 matt +** all block read/write calls now pass through a common handler +** +** Revision 1.5 2000/07/09 03:39:06 matt +** minor modifications +** +** Revision 1.4 2000/07/08 16:01:39 matt +** added bald's changes, made error checking more robust +** +** Revision 1.3 2000/07/05 22:46:52 matt +** cleaned up header +** +** Revision 1.2 2000/07/04 04:46:06 matt +** simplified handling of SNSS states +** +** Revision 1.1 2000/06/29 14:13:28 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/log.c b/MCUME_pico/piconofrendo/log.c new file mode 100755 index 0000000..c75d482 --- /dev/null +++ b/MCUME_pico/piconofrendo/log.c @@ -0,0 +1,121 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** log.c +** +** Error logging functions +** $Id: log.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include +#include +#include +#include "noftypes.h" +#include "log.h" + + +//static FILE *errorlog = NULL; +static int (*log_func)(const char *string) = NULL; + + +int log_init(void) +{ + return 0; +} + +void log_shutdown(void) +{ +} + +int log_print(const char *string) +{ + UNUSED(string); + + return 0; +} + +int log_printf(const char *format, ... ) +{ + UNUSED(format); + + return 0; /* should be number of chars written */ +} + +void log_chain_logfunc(int (*func)(const char *string)) +{ + log_func = func; +} + +void log_assert(int expr, int line, const char *file, char *msg) +{ + if (expr) + return; + + if (NULL != msg) + log_printf("ASSERT: line %d of %s, %s\n", line, file, msg); + else + log_printf("ASSERT: line %d of %s\n", line, file); + + //asm("break.n 1"); +// exit(-1); +} + + +/* +** $Log: log.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.14 2000/11/13 00:56:17 matt +** doesn't look as nasty now +** +** Revision 1.13 2000/11/06 02:15:07 matt +** more robust logging routines +** +** Revision 1.12 2000/10/15 13:28:12 matt +** need stdlib.h for exit() +** +** Revision 1.11 2000/10/10 13:13:13 matt +** dumb bug in log_chain_logfunc +** +** Revision 1.10 2000/10/10 13:03:54 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.9 2000/08/28 01:47:10 matt +** quelled fricking compiler complaints +** +** Revision 1.8 2000/07/31 04:28:46 matt +** one million cleanups +** +** Revision 1.7 2000/07/17 01:52:27 matt +** made sure last line of all source files is a newline +** +** Revision 1.6 2000/07/06 17:20:52 matt +** block manager space itself wasn't being freed - d'oh! +** +** Revision 1.5 2000/06/26 04:55:33 matt +** minor change +** +** Revision 1.4 2000/06/09 15:12:25 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/log.h b/MCUME_pico/piconofrendo/log.h new file mode 100755 index 0000000..58d93c7 --- /dev/null +++ b/MCUME_pico/piconofrendo/log.h @@ -0,0 +1,57 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** log.h +** +** Error logging header file +** $Id: log.h,v 1.1.1.1 2001/04/27 07:03:54 neil Exp $ +*/ + +#ifndef _LOG_H_ +#define _LOG_H_ + +#include + +extern int log_init(void); +extern void log_shutdown(void); +extern int log_print(const char *string); +extern int log_printf(const char *format, ...); +extern void log_chain_logfunc(int (*logfunc)(const char *string)); +extern void log_assert(int expr, int line, const char *file, char *msg); + +#endif /* _LOG_H_ */ + +/* +** $Log: log.h,v $ +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.7 2000/11/06 02:15:07 matt +** more robust logging routines +** +** Revision 1.6 2000/10/10 13:03:54 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.5 2000/07/17 01:52:27 matt +** made sure last line of all source files is a newline +** +** Revision 1.4 2000/06/09 15:12:25 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map000.c b/MCUME_pico/piconofrendo/map000.c new file mode 100644 index 0000000..f5ab3cc --- /dev/null +++ b/MCUME_pico/piconofrendo/map000.c @@ -0,0 +1,63 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map0.c +** +** mapper 0 interface +** $Id: map000.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" + +const mapintf_t map0_intf = +{ + 0, /* mapper number */ + "None", /* mapper name */ + NULL, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + NULL, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map000.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:32 matt +** changed directory structure +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/04 23:11:45 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map001.c b/MCUME_pico/piconofrendo/map001.c new file mode 100644 index 0000000..af6be33 --- /dev/null +++ b/MCUME_pico/piconofrendo/map001.c @@ -0,0 +1,242 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map1.c +** +** mapper 1 interface +** $Id: map001.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" + +/* TODO: WRAM enable ala Mark Knibbs: + ================================== +The SNROM board uses 8K CHR-RAM. The CHR-RAM is paged (i.e. it can be split +into two 4Kbyte pages). + +The CRA16 line of the MMC1 is connected to the /CS1 pin of the WRAM. THIS MEANS +THAT THE WRAM CAN BE ENABLED OR DISABLED ACCORDING TO THE STATE OF THE CRA16 +LINE. The CRA16 line corresponds to bit 4 of MMC1 registers 1 & 2. + +The WRAM is enabled when the CRA16 line is low, and disabled when CRA16 is +high. This has implications when CHR page size is 4K, if the two page numbers +set have different CRA16 states (e.g. reg 1 bit 4 = 0, reg 2 bit 4 = 1). Then +the WRAM will be enabled and disabled depending on what CHR address is being +accessed. + +When CHR page size is 8K, bit 4 of MMC1 register 1 (and not register 2, because +page size is 8K) controls whether the WRAM is enabled or not. It must be low +to be enabled. When the WRAM is disabled, reading from and writing to it will +not be possible. +*/ + +/* TODO: roll this into something... */ +static int bitcount = 0; +static uint8 latch = 0; +static uint8 regs[4]; +static int bank_select; +static uint8 lastreg; + +static void map1_write(uint32 address, uint8 value) +{ + int regnum = (address >> 13) - 4; + + if (value & 0x80) + { + regs[0] |= 0x0C; + bitcount = 0; + latch = 0; + return; + } + + if (lastreg != regnum) + { + bitcount = 0; + latch = 0; + lastreg = regnum; + } + //lastreg = regnum; + + latch |= ((value & 1) << bitcount++); + + /* 5 bit registers */ + if (5 != bitcount) + return; + + regs[regnum] = latch; + value = latch; + bitcount = 0; + latch = 0; + + switch (regnum) + { + case 0: + { + if (0 == (value & 2)) + { + int mirror = value & 1; + ppu_mirror(mirror, mirror, mirror, mirror); + } + else + { + if (value & 1) + ppu_mirror(0, 0, 1, 1); + else + ppu_mirror(0, 1, 0, 1); + } + } + break; + + case 1: + if (regs[0] & 0x10) + mmc_bankvrom(4, 0x0000, value); + else + mmc_bankvrom(8, 0x0000, value >> 1); + break; + + case 2: + if (regs[0] & 0x10) + mmc_bankvrom(4, 0x1000, value); + break; + + case 3: + if (mmc_getinfo()->rom_banks == 0x20) + { + bank_select = (regs[1] & 0x10) ? 0 : 0x10; + } + else if (mmc_getinfo()->rom_banks == 0x40) + { + if (regs[0] & 0x10) + bank_select = (regs[1] & 0x10) | ((regs[2] & 0x10) << 1); + else + bank_select = (regs[1] & 0x10) << 1; + } + else + { + bank_select = 0; + } + + if (0 == (regs[0] & 0x08)) + mmc_bankrom(32, 0x8000, ((regs[3] >> 1) + (bank_select >> 1))); + else if (regs[0] & 0x04) + mmc_bankrom(16, 0x8000, ((regs[3] & 0xF) + bank_select)); + else + mmc_bankrom(16, 0xC000, ((regs[3] & 0xF) + bank_select)); + + default: + break; + } +} + +static void map1_init(void) +{ + bitcount = 0; + latch = 0; + + memset(regs, 0, sizeof(regs)); + + if (mmc_getinfo()->rom_banks == 0x20) + mmc_bankrom(16, 0xC000, 0x0F); + + map1_write(0x8000, 0x80); +} + +static void map1_getstate(SnssMapperBlock *state) +{ + state->extraData.mapper1.registers[0] = regs[0]; + state->extraData.mapper1.registers[1] = regs[1]; + state->extraData.mapper1.registers[2] = regs[2]; + state->extraData.mapper1.registers[3] = regs[3]; + state->extraData.mapper1.latch = latch; + state->extraData.mapper1.numberOfBits = bitcount; +} + + +static void map1_setstate(SnssMapperBlock *state) +{ + regs[1] = state->extraData.mapper1.registers[0]; + regs[1] = state->extraData.mapper1.registers[1]; + regs[2] = state->extraData.mapper1.registers[2]; + regs[3] = state->extraData.mapper1.registers[3]; + latch = state->extraData.mapper1.latch; + bitcount = state->extraData.mapper1.numberOfBits; +} + +static map_memwrite map1_memwrite[] = +{ + { 0x8000, 0xFFFF, map1_write }, + { -1, -1, NULL } +}; + +const mapintf_t map1_intf = +{ + 1, /* mapper number */ + "MMC1", /* mapper name */ + map1_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + map1_getstate, /* get state (snss) */ + map1_setstate, /* set state (snss) */ + NULL, /* memory read structure */ + map1_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map001.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:32 matt +** changed directory structure +** +** Revision 1.8 2000/10/22 19:46:50 matt +** mirroring bugfix +** +** Revision 1.7 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.6 2000/10/22 15:03:13 matt +** simplified mirroring +** +** Revision 1.5 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.4 2000/07/15 23:52:19 matt +** rounded out a bunch more mapper interfaces +** +** Revision 1.3 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/04 23:11:45 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map002.c b/MCUME_pico/piconofrendo/map002.c new file mode 100644 index 0000000..73f9dfd --- /dev/null +++ b/MCUME_pico/piconofrendo/map002.c @@ -0,0 +1,86 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map2.c +** +** mapper 2 interface +** $Id: map002.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" + +/* mapper 2: UNROM */ +static void map2_write(uint32 address, uint8 value) +{ + UNUSED(address); + + mmc_bankrom(16, 0x8000, value); +} + +static const map_memwrite map2_memwrite[] = +{ + { 0x8000, 0xFFFF, map2_write }, + { -1, -1, NULL } +}; + +const mapintf_t map2_intf = +{ + 2, /* mapper number */ + "UNROM", /* mapper name */ + NULL, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map2_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map002.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:32 matt +** changed directory structure +** +** Revision 1.5 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.4 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.3 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/04 23:11:45 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map003.c b/MCUME_pico/piconofrendo/map003.c new file mode 100644 index 0000000..2a37c57 --- /dev/null +++ b/MCUME_pico/piconofrendo/map003.c @@ -0,0 +1,85 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map3.c +** +** mapper 3 interface +** $Id: map003.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ +#include "noftypes.h" +#include "nes_mmc.h" + +/* mapper 3: CNROM */ +static void map3_write(uint32 address, uint8 value) +{ + UNUSED(address); + + mmc_bankvrom(8, 0x0000, value); +} + +static const map_memwrite map3_memwrite[] = +{ + { 0x8000, 0xFFFF, map3_write }, + { -1, -1, NULL } +}; + +const mapintf_t map3_intf = +{ + 3, /* mapper number */ + "CNROM", /* mapper name */ + NULL, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map3_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map003.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:32 matt +** changed directory structure +** +** Revision 1.5 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.4 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.3 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/04 23:11:45 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map004.c b/MCUME_pico/piconofrendo/map004.c new file mode 100644 index 0000000..6587b91 --- /dev/null +++ b/MCUME_pico/piconofrendo/map004.c @@ -0,0 +1,269 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map4.c +** +** mapper 4 interface +** $Id: map004.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "libsnss.h" + +static struct +{ + int counter, latch; + bool enabled, reset; +} irq; + +static uint8 reg; +static uint8 command; +static uint16 vrombase; + +/* mapper 4: MMC3 */ +static void map4_write(uint32 address, uint8 value) +{ + switch (address & 0xE001) + { + case 0x8000: + command = value; + vrombase = (command & 0x80) ? 0x1000 : 0x0000; + + if (reg != (value & 0x40)) + { + if (value & 0x40) + mmc_bankrom(8, 0x8000, (mmc_getinfo()->rom_banks * 2) - 2); + else + mmc_bankrom(8, 0xC000, (mmc_getinfo()->rom_banks * 2) - 2); + } + reg = value & 0x40; + break; + + case 0x8001: + switch (command & 0x07) + { + case 0: + value &= 0xFE; + mmc_bankvrom(1, vrombase ^ 0x0000, value); + mmc_bankvrom(1, vrombase ^ 0x0400, value + 1); + break; + + case 1: + value &= 0xFE; + mmc_bankvrom(1, vrombase ^ 0x0800, value); + mmc_bankvrom(1, vrombase ^ 0x0C00, value + 1); + break; + + case 2: + mmc_bankvrom(1, vrombase ^ 0x1000, value); + break; + + case 3: + mmc_bankvrom(1, vrombase ^ 0x1400, value); + break; + + case 4: + mmc_bankvrom(1, vrombase ^ 0x1800, value); + break; + + case 5: + mmc_bankvrom(1, vrombase ^ 0x1C00, value); + break; + + case 6: + mmc_bankrom(8, (command & 0x40) ? 0xC000 : 0x8000, value); + break; + + case 7: + mmc_bankrom(8, 0xA000, value); + break; + } + break; + + case 0xA000: + /* four screen mirroring crap */ + if (0 == (mmc_getinfo()->flags & ROM_FLAG_FOURSCREEN)) + { + if (value & 1) + ppu_mirror(0, 0, 1, 1); /* horizontal */ + else + ppu_mirror(0, 1, 0, 1); /* vertical */ + } + break; + + case 0xA001: + /* Save RAM enable / disable */ + /* Messes up Startropics I/II if implemented -- bah */ + break; + + case 0xC000: + irq.latch = value; +// if (irq.reset) +// irq.counter = irq.latch; + break; + + case 0xC001: + irq.reset = true; + irq.counter = irq.latch; + break; + + case 0xE000: + irq.enabled = false; +// if (irq.reset) +// irq.counter = irq.latch; + break; + + case 0xE001: + irq.enabled = true; +// if (irq.reset) +// irq.counter = irq.latch; + break; + + default: + break; + } + + if (true == irq.reset) + irq.counter = irq.latch; +} + +static void map4_hblank(int vblank) +{ + if (vblank) + return; + + if (ppu_enabled()) + { + if (irq.counter >= 0) + { + irq.reset = false; + irq.counter--; + + if (irq.counter < 0) + { + if (irq.enabled) + { + irq.reset = true; + nes_irq(); + } + } + } + } +} + +static void map4_getstate(SnssMapperBlock *state) +{ + state->extraData.mapper4.irqCounter = irq.counter; + state->extraData.mapper4.irqLatchCounter = irq.latch; + state->extraData.mapper4.irqCounterEnabled = irq.enabled; + state->extraData.mapper4.last8000Write = command; +} + +static void map4_setstate(SnssMapperBlock *state) +{ + irq.counter = state->extraData.mapper4.irqCounter; + irq.latch = state->extraData.mapper4.irqLatchCounter; + irq.enabled = state->extraData.mapper4.irqCounterEnabled; + command = state->extraData.mapper4.last8000Write; +} + +static void map4_init(void) +{ + irq.counter = irq.latch = 0; + irq.enabled = irq.reset = false; + reg = command = 0; + vrombase = 0x0000; +} + +static const map_memwrite map4_memwrite[] = +{ + { 0x8000, 0xFFFF, map4_write }, + { -1, -1, NULL } +}; + +const mapintf_t map4_intf = +{ + 4, /* mapper number */ + "MMC3", /* mapper name */ + map4_init, /* init routine */ + NULL, /* vblank callback */ + map4_hblank, /* hblank callback */ + map4_getstate, /* get state (snss) */ + map4_setstate, /* set state (snss) */ + NULL, /* memory read structure */ + map4_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map004.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.2 2000/11/26 15:40:49 matt +** hey, it actually works now +** +** Revision 1.1 2000/10/24 12:19:32 matt +** changed directory structure +** +** Revision 1.12 2000/10/23 15:53:27 matt +** suppressed warnings +** +** Revision 1.11 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.10 2000/10/22 15:03:13 matt +** simplified mirroring +** +** Revision 1.9 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.8 2000/10/10 13:58:17 matt +** stroustrup squeezing his way in the door +** +** Revision 1.7 2000/10/08 18:05:44 matt +** kept old version around, just in case.... +** +** Revision 1.6 2000/07/15 23:52:19 matt +** rounded out a bunch more mapper interfaces +** +** Revision 1.5 2000/07/10 13:51:25 matt +** using generic nes_irq() routine now +** +** Revision 1.4 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.3 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.2 2000/07/05 05:04:39 matt +** minor modifications +** +** Revision 1.1 2000/07/04 23:11:45 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map005.c b/MCUME_pico/piconofrendo/map005.c new file mode 100755 index 0000000..16a8347 --- /dev/null +++ b/MCUME_pico/piconofrendo/map005.c @@ -0,0 +1,326 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map5.c +** +** mapper 5 interface +** $Id: map005.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "log.h" +#include "mmc5_snd.h" + +/* TODO: there's lots of info about this mapper now; +** let's implement it correctly/completely +*/ + +static struct +{ + int counter, enabled; + int reset, latch; +} irq; + +/* MMC5 - Castlevania III, etc */ +static void map5_hblank(int vblank) +{ + UNUSED(vblank); + + if (irq.counter == nes_getcontextptr()->scanline) + { + if (true == irq.enabled) + { + nes_irq(); + irq.reset = true; + } + //else + // irq.reset = false; + irq.counter = irq.latch; + } +} + +static void map5_write(uint32 address, uint8 value) +{ + static int page_size = 8; + + /* ex-ram memory-- bleh! */ + if (address >= 0x5C00 && address <= 0x5FFF) + return; + + switch (address) + { + case 0x5100: + /* PRG page size setting */ + /* 0:32k 1:16k 2,3:8k */ + switch (value & 3) + { + case 0: + page_size = 32; + break; + + case 1: + page_size = 16; + break; + + case 2: + case 3: + page_size = 8; + break; + } + break; + + case 0x5101: + /* CHR page size setting */ + /* 0:8k 1:4k 2:2k 3:1k */ + break; + + case 0x5104: + /* GFX mode setting */ + /* + 00:split mode + 01:split & exgraffix + 10:ex-ram + 11:exram + write protect + */ + break; + + case 0x5105: + /* TODO: exram needs to fill in nametables 2-3 */ + ppu_mirror(value & 3, (value >> 2) & 3, (value >> 4) & 3, value >> 6); + break; + + case 0x5106: + case 0x5107: + /* ex-ram fill mode stuff */ + break; + + case 0x5113: + /* ram page for $6000-7FFF? bit 2*/ + break; + + case 0x5114: + mmc_bankrom(8, 0x8000, value); + //if (page_size == 8) + // mmc_bankrom(8, 0x8000, value); + break; + + case 0x5115: + mmc_bankrom(8, 0x8000, value); + mmc_bankrom(8, 0xA000, value + 1); + //if (page_size == 8) + // mmc_bankrom(8, 0xA000, value); + //else if (page_size == 16) + // mmc_bankrom(16, 0x8000, value >> 1); + //mmc_bankrom(16, 0x8000, value & 0xFE); + break; + + case 0x5116: + mmc_bankrom(8, 0xC000, value); + //if (page_size == 8) + // mmc_bankrom(8, 0xC000, value); + break; + + case 0x5117: + //if (page_size == 8) + // mmc_bankrom(8, 0xE000, value); + //else if (page_size == 16) + // mmc_bankrom(16, 0xC000, value >> 1); + //mmc_bankrom(16, 0xC000, value & 0xFE); + //else if (page_size == 32) + // mmc_bankrom(32, 0x8000, value >> 2); + //mmc_bankrom(32, 0x8000, value & 0xFC); + break; + + case 0x5120: + mmc_bankvrom(1, 0x0000, value); + break; + + case 0x5121: + mmc_bankvrom(1, 0x0400, value); + break; + + case 0x5122: + mmc_bankvrom(1, 0x0800, value); + break; + + case 0x5123: + mmc_bankvrom(1, 0x0C00, value); + break; + + case 0x5124: + case 0x5125: + case 0x5126: + case 0x5127: + /* more VROM shit? */ + break; + + case 0x5128: + mmc_bankvrom(1, 0x1000, value); + break; + + case 0x5129: + mmc_bankvrom(1, 0x1400, value); + break; + + case 0x512A: + mmc_bankvrom(1, 0x1800, value); + break; + + case 0x512B: + mmc_bankvrom(1, 0x1C00, value); + break; + + case 0x5203: + irq.counter = value; + irq.latch = value; +// irq.reset = false; + break; + + case 0x5204: + irq.enabled = (value & 0x80) ? true : false; +// irq.reset = false; + break; + + default: +#ifdef NOFRENDO_DEBUG + log_printf("unknown mmc5 write: $%02X to $%04X\n", value, address); +#endif /* NOFRENDO_DEBUG */ + break; + } +} + +static uint8 map5_read(uint32 address) +{ + /* Castlevania 3 IRQ counter */ + if (address == 0x5204) + { + /* if reset == 1, we've hit scanline */ + return (irq.reset ? 0x40 : 0x00); + } + else + { +#ifdef NOFRENDO_DEBUG + log_printf("invalid MMC5 read: $%04X", address); +#endif + return 0xFF; + } +} + +static void map5_init(void) +{ + mmc_bankrom(8, 0x8000, MMC_LASTBANK); + mmc_bankrom(8, 0xA000, MMC_LASTBANK); + mmc_bankrom(8, 0xC000, MMC_LASTBANK); + mmc_bankrom(8, 0xE000, MMC_LASTBANK); + + irq.counter = irq.enabled = 0; + irq.reset = irq.latch = 0; +} + +/* incomplete SNSS definition */ +static void map5_getstate(SnssMapperBlock *state) +{ + state->extraData.mapper5.dummy = 0; +} + +static void map5_setstate(SnssMapperBlock *state) +{ + UNUSED(state); +} + +static map_memwrite map5_memwrite[] = +{ + /* $5000 - $5015 handled by sound */ + { 0x5016, 0x5FFF, map5_write }, + { 0x8000, 0xFFFF, map5_write }, + { -1, -1, NULL } +}; + +static map_memread map5_memread[] = +{ + { 0x5204, 0x5204, map5_read }, + { -1, -1, NULL } +}; + +mapintf_t map5_intf = +{ + 5, /* mapper number */ + "MMC5", /* mapper name */ + map5_init, /* init routine */ + NULL, /* vblank callback */ + map5_hblank, /* hblank callback */ + map5_getstate, /* get state (snss) */ + map5_setstate, /* set state (snss) */ + map5_memread, /* memory read structure */ + map5_memwrite, /* memory write structure */ + &mmc5_ext /* external sound device */ +}; +/* +** $Log: map005.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.2 2000/11/25 20:32:33 matt +** scanline interface change +** +** Revision 1.1 2000/10/24 12:19:32 matt +** changed directory structure +** +** Revision 1.11 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.10 2000/10/21 19:33:37 matt +** many more cleanups +** +** Revision 1.9 2000/10/17 03:23:16 matt +** added mmc5 sound interface +** +** Revision 1.8 2000/10/10 13:58:17 matt +** stroustrup squeezing his way in the door +** +** Revision 1.7 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.6 2000/07/15 23:52:19 matt +** rounded out a bunch more mapper interfaces +** +** Revision 1.5 2000/07/10 13:51:25 matt +** using generic nes_irq() routine now +** +** Revision 1.4 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.3 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.2 2000/07/05 05:04:51 matt +** fixed h-blank callback +** +** Revision 1.1 2000/07/04 23:11:45 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map007.c b/MCUME_pico/piconofrendo/map007.c new file mode 100644 index 0000000..f1530f1 --- /dev/null +++ b/MCUME_pico/piconofrendo/map007.c @@ -0,0 +1,99 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map7.c +** +** mapper 7 interface +** $Id: map007.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" +#include "log.h" + +/* mapper 7: AOROM */ +static void map7_write(uint32 address, uint8 value) +{ + int mirror; + UNUSED(address); + + mmc_bankrom(32, 0x8000, value); + mirror = (value & 0x10) >> 4; + ppu_mirror(mirror, mirror, mirror, mirror); +} + +static void map7_init(void) +{ + mmc_bankrom(32, 0x8000, 0); +} + +static const map_memwrite map7_memwrite[] = +{ + { 0x8000, 0xFFFF, map7_write }, + { -1, -1, NULL } +}; + +const mapintf_t map7_intf = +{ + 7, /* mapper number */ + "AOROM", /* mapper name */ + map7_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map7_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map007.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:32 matt +** changed directory structure +** +** Revision 1.6 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.5 2000/10/22 15:03:13 matt +** simplified mirroring +** +** Revision 1.4 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.3 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/04 23:11:45 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map008.c b/MCUME_pico/piconofrendo/map008.c new file mode 100644 index 0000000..5b7ad2b --- /dev/null +++ b/MCUME_pico/piconofrendo/map008.c @@ -0,0 +1,94 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map8.c +** +** mapper 8 interface +** $Id: map008.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" + +/* mapper 8: FFE F3xxx -- what the hell uses this? */ +static void map8_write(uint32 address, uint8 value) +{ + UNUSED(address); + + mmc_bankrom(16, 0x8000, value >> 3); + mmc_bankvrom(8, 0x0000, value & 7); +} + +static void map8_init(void) +{ + mmc_bankrom(16, 0x8000, 0); + mmc_bankrom(16, 0xC000, 1); + mmc_bankvrom(8, 0x0000, 0); +} + +static const map_memwrite map8_memwrite[] = +{ + { 0x8000, 0xFFFF, map8_write }, + { -1, -1, NULL } +}; + +const mapintf_t map8_intf = +{ + 8, /* mapper number */ + "FFE F3xxx", /* mapper name */ + map8_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map8_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map008.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:32 matt +** changed directory structure +** +** Revision 1.5 2000/10/22 19:17:47 matt +** mapper cleanups galore +** +** Revision 1.4 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.3 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/04 23:11:45 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map009.c b/MCUME_pico/piconofrendo/map009.c new file mode 100644 index 0000000..c01c44e --- /dev/null +++ b/MCUME_pico/piconofrendo/map009.c @@ -0,0 +1,199 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map9.c +** +** mapper 9 interface +** $Id: map009.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" +#include "libsnss.h" + +static uint8 latch[2]; +static uint8 regs[4]; + +/* Used when tile $FD/$FE is accessed */ +static void mmc9_latchfunc(uint32 address, uint8 value) +{ + if (0xFD == value || 0xFE == value) + { + int reg; + + if (address) + { + latch[1] = value; + reg = 2 + (value - 0xFD); + } + else + { + latch[0] = value; + reg = value - 0xFD; + } + + mmc_bankvrom(4, address, regs[reg]); + } +} + +/* mapper 9: MMC2 */ +/* MMC2: Punch-Out! */ +static void map9_write(uint32 address, uint8 value) +{ + switch ((address & 0xF000) >> 12) + { + case 0xA: + mmc_bankrom(8, 0x8000, value); + break; + + case 0xB: + regs[0] = value; + if (0xFD == latch[0]) + mmc_bankvrom(4, 0x0000, value); + break; + + case 0xC: + regs[1] = value; + if (0xFE == latch[0]) + mmc_bankvrom(4, 0x0000, value); + break; + + case 0xD: + regs[2] = value; + if (0xFD == latch[1]) + mmc_bankvrom(4, 0x1000, value); + break; + + case 0xE: + regs[3] = value; + if (0xFE == latch[1]) + mmc_bankvrom(4, 0x1000, value); + break; + + case 0xF: + if (value & 1) + ppu_mirror(0, 0, 1, 1); /* horizontal */ + else + ppu_mirror(0, 1, 0, 1); /* vertical */ + break; + + default: + break; + } +} + +static void map9_init(void) +{ + memset(regs, 0, sizeof(regs)); + + mmc_bankrom(8, 0x8000, 0); + mmc_bankrom(8, 0xA000, (mmc_getinfo()->rom_banks * 2) - 3); + mmc_bankrom(8, 0xC000, (mmc_getinfo()->rom_banks * 2) - 2); + mmc_bankrom(8, 0xE000, (mmc_getinfo()->rom_banks * 2) - 1); + + latch[0] = 0xFE; + latch[1] = 0xFE; + + ppu_setlatchfunc(mmc9_latchfunc); +} + +static void map9_getstate(SnssMapperBlock *state) +{ + state->extraData.mapper9.latch[0] = latch[0]; + state->extraData.mapper9.latch[1] = latch[1]; + state->extraData.mapper9.lastB000Write = regs[0]; + state->extraData.mapper9.lastC000Write = regs[1]; + state->extraData.mapper9.lastD000Write = regs[2]; + state->extraData.mapper9.lastE000Write = regs[3]; +} + +static void map9_setstate(SnssMapperBlock *state) +{ + latch[0] = state->extraData.mapper9.latch[0]; + latch[1] = state->extraData.mapper9.latch[1]; + regs[0] = state->extraData.mapper9.lastB000Write; + regs[1] = state->extraData.mapper9.lastC000Write; + regs[2] = state->extraData.mapper9.lastD000Write; + regs[3] = state->extraData.mapper9.lastE000Write; +} + +static map_memwrite map9_memwrite[] = +{ + { 0x8000, 0xFFFF, map9_write }, + { -1, -1, NULL } +}; + +const mapintf_t map9_intf = +{ + 9, /* mapper number */ + "MMC2", /* mapper name */ + map9_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + map9_getstate, /* get state (snss) */ + map9_setstate, /* set state (snss) */ + NULL, /* memory read structure */ + map9_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map009.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.9 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.8 2000/10/22 15:03:14 matt +** simplified mirroring +** +** Revision 1.7 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.6 2000/07/17 05:11:35 matt +** minor update from making PPU code less filthy +** +** Revision 1.5 2000/07/15 23:52:19 matt +** rounded out a bunch more mapper interfaces +** +** Revision 1.4 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.3 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.2 2000/07/05 22:50:33 matt +** fixed punchout -- works 100% now +** +** Revision 1.1 2000/07/05 05:05:18 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map011.c b/MCUME_pico/piconofrendo/map011.c new file mode 100644 index 0000000..f253945 --- /dev/null +++ b/MCUME_pico/piconofrendo/map011.c @@ -0,0 +1,94 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map11.c +** +** mapper 11 interface +** $Id: map011.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" + + +/* mapper 11: Color Dreams, Wisdom Tree */ +static void map11_write(uint32 address, uint8 value) +{ + UNUSED(address); + + mmc_bankrom(32, 0x8000, value & 0x0F); + mmc_bankvrom(8, 0x0000, value >> 4); +} + +static void map11_init(void) +{ + mmc_bankrom(32, 0x8000, 0); + mmc_bankvrom(8, 0x0000, 0); +} + +static const map_memwrite map11_memwrite[] = +{ + { 0x8000, 0xFFFF, map11_write }, + { -1, -1, NULL } +}; + +const mapintf_t map11_intf = +{ + 11, /* mapper number */ + "Color Dreams", /* mapper name */ + map11_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map11_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map011.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.5 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.4 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.3 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/04 23:11:45 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map015.c b/MCUME_pico/piconofrendo/map015.c new file mode 100644 index 0000000..d1b3b63 --- /dev/null +++ b/MCUME_pico/piconofrendo/map015.c @@ -0,0 +1,144 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map15.c +** +** mapper 15 interface +** $Id: map015.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" + +/* mapper 15: Contra 100-in-1 */ +static void map15_write(uint32 address, uint8 value) +{ + int bank = value & 0x3F; + uint8 swap = (value & 0x80) >> 7; + + switch (address & 0x3) + { + case 0: + mmc_bankrom(8, 0x8000, (bank << 1) + swap); + mmc_bankrom(8, 0xA000, (bank << 1) + (swap ^ 1)); + mmc_bankrom(8, 0xC000, ((bank + 1) << 1) + swap); + mmc_bankrom(8, 0xE000, ((bank + 1) << 1) + (swap ^ 1)); + + if (value & 0x40) + ppu_mirror(0, 0, 1, 1); /* horizontal */ + else + ppu_mirror(0, 1, 0, 1); /* vertical */ + break; + + case 1: + mmc_bankrom(8, 0xC000, (bank << 1) + swap); + mmc_bankrom(8, 0xE000, (bank << 1) + (swap ^ 1)); + break; + + case 2: + if (swap) + { + mmc_bankrom(8, 0x8000, (bank << 1) + 1); + mmc_bankrom(8, 0xA000, (bank << 1) + 1); + mmc_bankrom(8, 0xC000, (bank << 1) + 1); + mmc_bankrom(8, 0xE000, (bank << 1) + 1); + } + else + { + mmc_bankrom(8, 0x8000, (bank << 1)); + mmc_bankrom(8, 0xA000, (bank << 1)); + mmc_bankrom(8, 0xC000, (bank << 1)); + mmc_bankrom(8, 0xE000, (bank << 1)); + } + break; + + case 3: + mmc_bankrom(8, 0xC000, (bank << 1) + swap); + mmc_bankrom(8, 0xE000, (bank << 1) + (swap ^ 1)); + + if (value & 0x40) + ppu_mirror(0, 0, 1, 1); /* horizontal */ + else + ppu_mirror(0, 1, 0, 1); /* vertical */ + break; + + default: + break; + } +} + +static void map15_init(void) +{ + mmc_bankrom(32, 0x8000, 0); +} + +static const map_memwrite map15_memwrite[] = +{ + { 0x8000, 0xFFFF, map15_write }, + { -1, -1, NULL } +}; + +const mapintf_t map15_intf = +{ + 15, /* mapper number */ + "Contra 100-in-1", /* mapper name */ + map15_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map15_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map015.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.6 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.5 2000/10/22 15:03:13 matt +** simplified mirroring +** +** Revision 1.4 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.3 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/05 05:05:18 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map016.c b/MCUME_pico/piconofrendo/map016.c new file mode 100755 index 0000000..3d193b1 --- /dev/null +++ b/MCUME_pico/piconofrendo/map016.c @@ -0,0 +1,192 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map16.c +** +** mapper 16 interface +** $Id: map016.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" +#include "nes.h" + +static struct +{ + int counter; + bool enabled; +} irq; + +/* mapper 16: Bandai */ + +static void map16_init(void) +{ + mmc_bankrom(16, 0x8000, 0); + mmc_bankrom(16, 0xC000, MMC_LASTBANK); + irq.counter = 0; + irq.enabled = false; +} + +static void map16_write(uint32 address, uint8 value) +{ + int reg = address & 0xF; + + if (reg < 8) + { + mmc_bankvrom(1, reg << 10, value); + } + else + { + switch (address & 0x000F) + { + case 0x8: + mmc_bankrom(16, 0x8000, value); + break; + + case 0x9: + switch (value & 3) + { + case 0: + ppu_mirror(0, 0, 1, 1); /* horizontal */ + break; + + case 1: + ppu_mirror(0, 1, 0, 1); /* vertical */ + break; + + case 2: + ppu_mirror(0, 0, 0, 0); + break; + + case 3: + ppu_mirror(1, 1, 1, 1); + break; + } + break; + + case 0xA: + irq.enabled = (value & 1) ? true : false; + break; + + case 0xB: + irq.counter = (irq.counter & 0xFF00) | value; + break; + + case 0xC: + irq.counter = (value << 8) | (irq.counter & 0xFF); + break; + + case 0xD: + /* eeprom I/O port? */ + break; + } + } +} + +static void map16_hblank(int vblank) +{ + UNUSED(vblank); + + if (irq.enabled) + { + if (irq.counter) + { + if (0 == --irq.counter) + nes_irq(); + } + } +} + +static void map16_getstate(SnssMapperBlock *state) +{ + state->extraData.mapper16.irqCounterLowByte = irq.counter & 0xFF; + state->extraData.mapper16.irqCounterHighByte = irq.counter >> 8; + state->extraData.mapper16.irqCounterEnabled = irq.enabled; +} + +static void map16_setstate(SnssMapperBlock *state) +{ + irq.counter = (state->extraData.mapper16.irqCounterHighByte << 8) + | state->extraData.mapper16.irqCounterLowByte; + irq.enabled = state->extraData.mapper16.irqCounterEnabled; +} + +static const map_memwrite map16_memwrite[] = +{ + { 0x6000, 0x600D, map16_write }, + { 0x7FF0, 0x7FFD, map16_write }, + { 0x8000, 0x800D, map16_write }, + { -1, -1, NULL } +}; + +const mapintf_t map16_intf = +{ + 16, /* mapper number */ + "Bandai", /* mapper name */ + map16_init, /* init routine */ + NULL, /* vblank callback */ + map16_hblank, /* hblank callback */ + map16_getstate, /* get state (snss) */ + map16_setstate, /* set state (snss) */ + NULL, /* memory read structure */ + map16_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map016.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.8 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.7 2000/10/22 15:03:13 matt +** simplified mirroring +** +** Revision 1.6 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.5 2000/10/10 13:58:16 matt +** stroustrup squeezing his way in the door +** +** Revision 1.4 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.3 2000/07/15 23:52:20 matt +** rounded out a bunch more mapper interfaces +** +** Revision 1.2 2000/07/11 05:03:49 matt +** value masking isn't necessary for the banking routines +** +** Revision 1.1 2000/07/11 03:14:18 melanson +** Initial commit for mappers 16, 34, and 231 +** +** +*/ diff --git a/MCUME_pico/piconofrendo/map018.c b/MCUME_pico/piconofrendo/map018.c new file mode 100755 index 0000000..6f182ef --- /dev/null +++ b/MCUME_pico/piconofrendo/map018.c @@ -0,0 +1,215 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map18.c +** +** mapper 18 interface +** $Id: map018.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" + +/* mapper 18: Jaleco SS8806 */ +#define VRC_PBANK(bank, value, high) \ +do { \ + if ((high)) \ + highprgnybbles[(bank)] = (value) & 0x0F; \ + else \ + lowprgnybbles[(bank)] = (value) & 0x0F; \ + mmc_bankrom(8, 0x8000 + ((bank) << 13), (highprgnybbles[(bank)] << 4)+lowprgnybbles[(bank)]); \ +} while (0) + +#define VRC_VBANK(bank, value, high) \ +{ \ + if ((high)) \ + highnybbles[(bank)] = (value) & 0x0F; \ + else \ + lownybbles[(bank)] = (value) & 0x0F; \ + mmc_bankvrom(1, (bank) << 10, (highnybbles[(bank)] << 4)+lownybbles[(bank)]); \ +} + +static struct +{ + int counter, enabled; + uint8 nybbles[4]; + int clockticks; +} irq; + +static void map18_init(void) +{ + irq.counter = irq.enabled = 0; +} + +static uint8 lownybbles[8]; +static uint8 highnybbles[8]; +static uint8 lowprgnybbles[3]; +static uint8 highprgnybbles[3]; + + +static void map18_write(uint32 address, uint8 value) +{ + switch (address) + { + case 0x8000: VRC_PBANK(0, value, 0); break; + case 0x8001: VRC_PBANK(0, value, 1); break; + case 0x8002: VRC_PBANK(1, value, 0); break; + case 0x8003: VRC_PBANK(1, value, 1); break; + case 0x9000: VRC_PBANK(2, value, 0); break; + case 0x9001: VRC_PBANK(2, value, 1); break; + case 0xA000: VRC_VBANK(0, value, 0); break; + case 0xA001: VRC_VBANK(0, value, 1); break; + case 0xA002: VRC_VBANK(1, value, 0); break; + case 0xA003: VRC_VBANK(1, value, 1); break; + case 0xB000: VRC_VBANK(2, value, 0); break; + case 0xB001: VRC_VBANK(2, value, 1); break; + case 0xB002: VRC_VBANK(3, value, 0); break; + case 0xB003: VRC_VBANK(3, value, 1); break; + case 0xC000: VRC_VBANK(4, value, 0); break; + case 0xC001: VRC_VBANK(4, value, 1); break; + case 0xC002: VRC_VBANK(5, value, 0); break; + case 0xC003: VRC_VBANK(5, value, 1); break; + case 0xD000: VRC_VBANK(6, value, 0); break; + case 0xD001: VRC_VBANK(6, value, 1); break; + case 0xD002: VRC_VBANK(7, value, 0); break; + case 0xD003: VRC_VBANK(7, value, 1); break; + case 0xE000: + irq.nybbles[0]=value&0x0F; + irq.clockticks= (irq.nybbles[0]) | (irq.nybbles[1]<<4) | + (irq.nybbles[2]<<8) | (irq.nybbles[3]<<12); + irq.counter=(uint8)(irq.clockticks/114); + if(irq.counter>15) irq.counter-=16; + break; + case 0xE001: + irq.nybbles[1]=value&0x0F; + irq.clockticks= (irq.nybbles[0]) | (irq.nybbles[1]<<4) | + (irq.nybbles[2]<<8) | (irq.nybbles[3]<<12); + irq.counter=(uint8)(irq.clockticks/114); + if(irq.counter>15) irq.counter-=16; + break; + case 0xE002: + irq.nybbles[2]=value&0x0F; + irq.clockticks= (irq.nybbles[0]) | (irq.nybbles[1]<<4) | + (irq.nybbles[2]<<8) | (irq.nybbles[3]<<12); + irq.counter=(uint8)(irq.clockticks/114); + if(irq.counter>15) irq.counter-=16; + break; + case 0xE003: + irq.nybbles[3]=value&0x0F; + irq.clockticks= (irq.nybbles[0]) | (irq.nybbles[1]<<4) | + (irq.nybbles[2]<<8) | (irq.nybbles[3]<<12); + irq.counter=(uint8)(irq.clockticks/114); + if(irq.counter>15) irq.counter-=16; + break; + case 0xF000: + if(value&0x01) irq.enabled=true; + break; + case 0xF001: + irq.enabled=value&0x01; + break; + case 0xF002: + switch(value&0x03) + { + case 0: ppu_mirror(0, 0, 1, 1); break; + case 1: ppu_mirror(0, 1, 0, 1); break; + case 2: ppu_mirror(1,1,1,1);break; + case 3: ppu_mirror(1,1,1,1);break; // should this be zero? + default: break; + } + break; + default: + break; + } +} + + +static const map_memwrite map18_memwrite[] = +{ + { 0x8000, 0xFFFF, map18_write }, + { -1, -1, NULL } +}; + +static void map18_getstate(SnssMapperBlock *state) +{ + state->extraData.mapper18.irqCounterLowByte = irq.counter & 0xFF; + state->extraData.mapper18.irqCounterHighByte = irq.counter >> 8; + state->extraData.mapper18.irqCounterEnabled = irq.enabled; +} + +static void map18_setstate(SnssMapperBlock *state) +{ + irq.counter = (state->extraData.mapper18.irqCounterHighByte << 8) + | state->extraData.mapper18.irqCounterLowByte; + irq.enabled = state->extraData.mapper18.irqCounterEnabled; +} + +const mapintf_t map18_intf = +{ + 18, /* mapper number */ + "Jaleco SS8806", /* mapper name */ + map18_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + map18_getstate, /* get state (snss) */ + map18_setstate, /* set state (snss) */ + NULL, /* memory read structure */ + map18_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map018.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.8 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.7 2000/10/22 15:03:13 matt +** simplified mirroring +** +** Revision 1.6 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.5 2000/10/10 13:58:17 matt +** stroustrup squeezing his way in the door +** +** Revision 1.4 2000/07/15 23:52:19 matt +** rounded out a bunch more mapper interfaces +** +** Revision 1.3 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.2 2000/07/06 02:48:42 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/06 01:01:56 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map019.c b/MCUME_pico/piconofrendo/map019.c new file mode 100755 index 0000000..e5f6f1c --- /dev/null +++ b/MCUME_pico/piconofrendo/map019.c @@ -0,0 +1,170 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map19.c +** +** mapper 19 interface +** $Id: map019.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" + +/* TODO: shouldn't there be an h-blank IRQ handler??? */ + +/* Special mirroring macro for mapper 19 */ +#define N_BANK1(table, value) \ +{ \ + if ((value) < 0xE0) \ + ppu_setpage(1, (table) + 8, &mmc_getinfo()->vrom[((value) % (mmc_getinfo()->vrom_banks * 8)) << 10] - (0x2000 + ((table) << 10))); \ + else \ + ppu_setpage(1, (table) + 8, &mmc_getinfo()->vram[((value) & 7) << 10] - (0x2000 + ((table) << 10))); \ + ppu_mirrorhipages(); \ +} + +static struct +{ + int counter, enabled; +} irq; + +static void map19_init(void) +{ + irq.counter = irq.enabled = 0; +} + +/* mapper 19: Namcot 106 */ +static void map19_write(uint32 address, uint8 value) +{ + int reg = address >> 11; + switch (reg) + { + case 0xA: + irq.counter &= ~0xFF; + irq.counter |= value; + break; + + case 0xB: + irq.counter = ((value & 0x7F) << 8) | (irq.counter & 0xFF); + irq.enabled = (value & 0x80) ? true : false; + break; + + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + mmc_bankvrom(1, (reg & 7) << 10, value); + break; + + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + N_BANK1(reg & 3, value); + break; + + case 0x1C: + mmc_bankrom(8, 0x8000, value); + break; + + case 0x1D: + mmc_bankrom(8, 0xA000, value); + break; + + case 0x1E: + mmc_bankrom(8, 0xC000, value); + break; + + default: + break; + } +} + +static void map19_getstate(SnssMapperBlock *state) +{ + state->extraData.mapper19.irqCounterLowByte = irq.counter & 0xFF; + state->extraData.mapper19.irqCounterHighByte = irq.counter >> 8; + state->extraData.mapper19.irqCounterEnabled = irq.enabled; +} + +static void map19_setstate(SnssMapperBlock *state) +{ + irq.counter = (state->extraData.mapper19.irqCounterHighByte << 8) + | state->extraData.mapper19.irqCounterLowByte; + irq.enabled = state->extraData.mapper19.irqCounterEnabled; +} + +static const map_memwrite map19_memwrite[] = +{ + { 0x5000, 0x5FFF, map19_write }, + { 0x8000, 0xFFFF, map19_write }, + { -1, -1, NULL } +}; + +const mapintf_t map19_intf = +{ + 19, /* mapper number */ + "Namcot 106", /* mapper name */ + map19_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + map19_getstate, /* get state (snss) */ + map19_setstate, /* set state (snss) */ + NULL, /* memory read structure */ + map19_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map019.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.6 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.5 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.4 2000/10/10 13:58:17 matt +** stroustrup squeezing his way in the door +** +** Revision 1.3 2000/07/15 23:52:20 matt +** rounded out a bunch more mapper interfaces +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/06 01:01:56 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map024.c b/MCUME_pico/piconofrendo/map024.c new file mode 100755 index 0000000..785e215 --- /dev/null +++ b/MCUME_pico/piconofrendo/map024.c @@ -0,0 +1,235 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map24.c +** +** mapper 24 interface +** $Id: map024.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "log.h" +#include "vrcvisnd.h" + +static struct +{ + int counter, enabled; + int latch, wait_state; +} irq; + +static void map24_init(void) +{ + irq.counter = irq.enabled = 0; + irq.latch = irq.wait_state = 0; +} + +static void map24_hblank(int vblank) +{ + UNUSED(vblank); + + if (irq.enabled) + { + if (256 == ++irq.counter) + { + irq.counter = irq.latch; + nes_irq(); + //irq.enabled = false; + irq.enabled = irq.wait_state; + } + } +} + +static void map24_write(uint32 address, uint8 value) +{ + switch (address & 0xF003) + { + case 0x8000: + mmc_bankrom(16, 0x8000, value); + break; + + case 0x9003: + /* ??? */ + break; + + case 0xB003: + switch (value & 0x0C) + { + case 0x00: + ppu_mirror(0, 1, 0, 1); /* vertical */ + break; + + case 0x04: + ppu_mirror(0, 0, 1, 1); /* horizontal */ + break; + + case 0x08: + ppu_mirror(0, 0, 0, 0); + break; + + case 0x0C: + ppu_mirror(1, 1, 1, 1); + break; + + default: + break; + } + break; + + + case 0xC000: + mmc_bankrom(8, 0xC000, value); + break; + + case 0xD000: + mmc_bankvrom(1, 0x0000, value); + break; + + case 0xD001: + mmc_bankvrom(1, 0x0400, value); + break; + + case 0xD002: + mmc_bankvrom(1, 0x0800, value); + break; + + case 0xD003: + mmc_bankvrom(1, 0x0C00, value); + break; + + case 0xE000: + mmc_bankvrom(1, 0x1000, value); + break; + + case 0xE001: + mmc_bankvrom(1, 0x1400, value); + break; + + case 0xE002: + mmc_bankvrom(1, 0x1800, value); + break; + + case 0xE003: + mmc_bankvrom(1, 0x1C00, value); + break; + + case 0xF000: + irq.latch = value; + break; + + case 0xF001: + irq.enabled = (value >> 1) & 0x01; + irq.wait_state = value & 0x01; + if (irq.enabled) + irq.counter = irq.latch; + break; + + case 0xF002: + irq.enabled = irq.wait_state; + break; + + default: +#ifdef NOFRENDO_DEBUG + log_printf("invalid VRC6 write: $%02X to $%04X", value, address); +#endif + break; + } +} + +static void map24_getstate(SnssMapperBlock *state) +{ + state->extraData.mapper24.irqCounter = irq.counter; + state->extraData.mapper24.irqCounterEnabled = irq.enabled; +} + +static void map24_setstate(SnssMapperBlock *state) +{ + irq.counter = state->extraData.mapper24.irqCounter; + irq.enabled = state->extraData.mapper24.irqCounterEnabled; +} + +static const map_memwrite map24_memwrite[] = +{ + { 0x8000, 0xF002, map24_write }, + { -1, -1, NULL } +}; + +mapintf_t const map24_intf = +{ + 24, /* mapper number */ + "Konami VRC6", /* mapper name */ + map24_init, /* init routine */ + NULL, /* vblank callback */ + map24_hblank, /* hblank callback */ + map24_getstate, /* get state (snss) */ + map24_setstate, /* set state (snss) */ + NULL, /* memory read structure */ + map24_memwrite, /* memory write structure */ + &vrcvi_ext /* external sound device */ +}; + +/* +** $Log: map024.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.11 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.10 2000/10/22 15:03:13 matt +** simplified mirroring +** +** Revision 1.9 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.8 2000/10/10 13:58:17 matt +** stroustrup squeezing his way in the door +** +** Revision 1.7 2000/10/09 12:00:53 matt +** removed old code +** +** Revision 1.6 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.5 2000/07/15 23:52:19 matt +** rounded out a bunch more mapper interfaces +** +** Revision 1.4 2000/07/10 13:51:25 matt +** using generic nes_irq() routine now +** +** Revision 1.3 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/04 23:11:45 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map032.c b/MCUME_pico/piconofrendo/map032.c new file mode 100755 index 0000000..6719678 --- /dev/null +++ b/MCUME_pico/piconofrendo/map032.c @@ -0,0 +1,121 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map32.c +** +** mapper 32 interface +** $Id: map032.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" + +static int select_c000 = 0; + +/* mapper 32: Irem G-101 */ +static void map32_write(uint32 address, uint8 value) +{ + switch (address >> 12) + { + case 0x08: + if (select_c000) + mmc_bankrom(8, 0xC000, value); + else + mmc_bankrom(8, 0x8000, value); + break; + + case 0x09: + if (value & 1) + ppu_mirror(0, 0, 1, 1); /* horizontal */ + else + ppu_mirror(0, 1, 0, 1); /* vertical */ + + select_c000 = (value & 0x02); + break; + + case 0x0A: + mmc_bankrom(8, 0xA000, value); + break; + + case 0x0B: + { + int loc = (address & 0x07) << 10; + mmc_bankvrom(1, loc, value); + } + break; + + default: + break; + } +} + +static const map_memwrite map32_memwrite[] = +{ + { 0x8000, 0xFFFF, map32_write }, + { -1, -1, NULL } +}; + +const mapintf_t map32_intf = +{ + 32, /* mapper number */ + "Irem G-101", /* mapper name */ + NULL, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map32_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map032.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.6 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.5 2000/10/22 15:03:13 matt +** simplified mirroring +** +** Revision 1.4 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.3 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/06 01:01:56 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map033.c b/MCUME_pico/piconofrendo/map033.c new file mode 100755 index 0000000..fb70233 --- /dev/null +++ b/MCUME_pico/piconofrendo/map033.c @@ -0,0 +1,145 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map33.c +** +** mapper 33 interface +** $Id: map033.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" + +/* mapper 33: Taito TC0190*/ +static void map33_write(uint32 address, uint8 value) +{ + int page = (address >> 13) & 3; + int reg = address & 3; + + switch (page) + { + case 0: /* $800X */ + switch (reg) + { + case 0: + mmc_bankrom(8, 0x8000, value); + break; + + case 1: + mmc_bankrom(8, 0xA000, value); + break; + + case 2: + mmc_bankvrom(2, 0x0000, value); + break; + + case 3: + mmc_bankvrom(2, 0x0800, value); + break; + } + break; + + case 1: /* $A00X */ + { + int loc = 0x1000 + (reg << 10); + mmc_bankvrom(1, loc, value); + } + break; + + case 2: /* $C00X */ + case 3: /* $E00X */ + switch (reg) + { + case 0: + /* irqs maybe ? */ + //break; + + case 1: + /* this doesn't seem to work just right */ + if (value & 1) + ppu_mirror(0, 0, 1, 1); /* horizontal */ + else + ppu_mirror(0, 1, 0, 1); + break; + + default: + break; + } + break; + } +} + + +static const map_memwrite map33_memwrite[] = +{ + { 0x8000, 0xFFFF, map33_write }, + { -1, -1, NULL } +}; + +const mapintf_t map33_intf = +{ + 33, /* mapper number */ + "Taito TC0190", /* mapper name */ + NULL, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map33_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map033.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.7 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.6 2000/10/22 15:03:13 matt +** simplified mirroring +** +** Revision 1.5 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.4 2000/07/15 23:52:19 matt +** rounded out a bunch more mapper interfaces +** +** Revision 1.3 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/06 01:01:56 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map034.c b/MCUME_pico/piconofrendo/map034.c new file mode 100755 index 0000000..b8cadc0 --- /dev/null +++ b/MCUME_pico/piconofrendo/map034.c @@ -0,0 +1,100 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map34.c +** +** mapper 34 interface +** $Id: map034.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" + +static void map34_init(void) +{ + mmc_bankrom(32, 0x8000, MMC_LASTBANK); +} + +static void map34_write(uint32 address, uint8 value) +{ + if ((address & 0x8000) || (0x7FFD == address)) + { + mmc_bankrom(32, 0x8000, value); + } + else if (0x7FFE == address) + { + mmc_bankvrom(4, 0x0000, value); + } + else if (0x7FFF == address) + { + mmc_bankvrom(4, 0x1000, value); + } +} + +static const map_memwrite map34_memwrite[] = +{ + { 0x7FFD, 0xFFFF, map34_write }, + { -1, -1, NULL } +}; + +const mapintf_t map34_intf = +{ + 34, /* mapper number */ + "Nina-1", /* mapper name */ + map34_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map34_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map034.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.5 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.4 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.3 2000/07/11 05:03:49 matt +** value masking isn't necessary for the banking routines +** +** Revision 1.2 2000/07/11 03:35:08 bsittler +** Fixes to make mikes new mappers compile. +** +** Revision 1.1 2000/07/11 03:14:18 melanson +** Initial commit for mappers 16, 34, and 231 +** +** +*/ diff --git a/MCUME_pico/piconofrendo/map040.c b/MCUME_pico/piconofrendo/map040.c new file mode 100755 index 0000000..0d744fe --- /dev/null +++ b/MCUME_pico/piconofrendo/map040.c @@ -0,0 +1,163 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map40.c +** +** mapper 40 interface +** $Id: map040.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "libsnss.h" +#include "log.h" + +#define MAP40_IRQ_PERIOD (4096 / 113.666666) + +static struct +{ + int enabled, counter; +} irq; + +/* mapper 40: SMB 2j (hack) */ +static void map40_init(void) +{ + mmc_bankrom(8, 0x6000, 6); + mmc_bankrom(8, 0x8000, 4); + mmc_bankrom(8, 0xA000, 5); + mmc_bankrom(8, 0xE000, 7); + + irq.enabled = false; + irq.counter = (int) MAP40_IRQ_PERIOD; +} + +static void map40_hblank(int vblank) +{ + UNUSED(vblank); + + if (irq.enabled && irq.counter) + { + irq.counter--; + if (0 == irq.counter) + { + nes_irq(); + irq.enabled = false; + } + } +} + +static void map40_write(uint32 address, uint8 value) +{ + int range = (address >> 13) - 4; + + switch (range) + { + case 0: /* 0x8000-0x9FFF */ + irq.enabled = false; + irq.counter = (int) MAP40_IRQ_PERIOD; + break; + + case 1: /* 0xA000-0xBFFF */ + irq.enabled = true; + break; + + case 3: /* 0xE000-0xFFFF */ + mmc_bankrom(8, 0xC000, value & 7); + break; + + default: + break; + } +} + +static void map40_getstate(SnssMapperBlock *state) +{ + state->extraData.mapper40.irqCounter = irq.counter; + state->extraData.mapper40.irqCounterEnabled = irq.enabled; +} + +static void map40_setstate(SnssMapperBlock *state) +{ + irq.counter = state->extraData.mapper40.irqCounter; + irq.enabled = state->extraData.mapper40.irqCounterEnabled; +} + +static const map_memwrite map40_memwrite[] = +{ + { 0x8000, 0xFFFF, map40_write }, + { -1, -1, NULL } +}; + +const mapintf_t map40_intf = +{ + 40, /* mapper number */ + "SMB 2j (pirate)", /* mapper name */ + map40_init, /* init routine */ + NULL, /* vblank callback */ + map40_hblank, /* hblank callback */ + map40_getstate, /* get state (snss) */ + map40_setstate, /* set state (snss) */ + NULL, /* memory read structure */ + map40_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map040.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.9 2000/10/23 15:53:27 matt +** suppressed warnings +** +** Revision 1.8 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.7 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.6 2000/10/10 13:58:17 matt +** stroustrup squeezing his way in the door +** +** Revision 1.5 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.4 2000/07/15 23:52:19 matt +** rounded out a bunch more mapper interfaces +** +** Revision 1.3 2000/07/10 13:51:25 matt +** using generic nes_irq() routine now +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/05 05:05:18 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map041.c b/MCUME_pico/piconofrendo/map041.c new file mode 100755 index 0000000..f823ff2 --- /dev/null +++ b/MCUME_pico/piconofrendo/map041.c @@ -0,0 +1,167 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map041.c +** +** Mapper #41 (Caltron 6 in 1) +** Implementation by Firebug +** Mapper information courtesy of Kevin Horton +** $Id: map041.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +** +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "libsnss.h" +#include "log.h" + +static uint8 register_low; +static uint8 register_high; + +/*****************************************************/ +/* Set 8K CHR bank from the combined register values */ +/*****************************************************/ +static void map41_set_chr (void) +{ + /* Set the CHR bank from the appropriate register bits */ + mmc_bankvrom (8, 0x0000, ((register_low >> 1) & 0x0C) | (register_high)); + + /* Done */ + return; +} + +/******************************/ +/* Mapper #41: Caltron 6 in 1 */ +/******************************/ +static void map41_init (void) +{ + /* Both registers set to zero at power on */ + /* TODO: Registers should also be cleared on a soft reset */ + register_low = 0x00; + register_high = 0x00; + mmc_bankrom (32, 0x8000, 0x00); + map41_set_chr (); + + /* Done */ + return; +} + +/******************************************/ +/* Mapper #41 write handler ($6000-$67FF) */ +/******************************************/ +static void map41_low_write (uint32 address, uint8 value) +{ + /* Within this range the value written is irrelevant */ + UNUSED (value); + + /* $6000-$67FF: A5 = mirroring (1=horizontal, 0=vertical) */ + /* A4-A3 = high two bits of 8K CHR bank */ + /* A2 = register 1 enable (0=disabled, 1=enabled) */ + /* A2-A0 = 32K PRG bank */ + register_low = (uint8) (address & 0x3F); + mmc_bankrom (32, 0x8000, register_low & 0x07); + map41_set_chr (); + if (register_low & 0x20) ppu_mirror(0, 0, 1, 1); /* horizontal */ + else ppu_mirror(0, 1, 0, 1); /* vertical */ + + /* Done */ + return; +} + +/******************************************/ +/* Mapper #41 write handler ($8000-$FFFF) */ +/******************************************/ +static void map41_high_write (uint32 address, uint8 value) +{ + /* Address doesn't matter within this range */ + UNUSED (address); + + /* $8000-$FFFF: D1-D0 = low two bits of 8K CHR bank */ + if (register_low & 0x04) + { + register_high = value & 0x03; + map41_set_chr (); + } + + /* Done */ + return; +} + +/****************************************************/ +/* Shove extra mapper information into a SNSS block */ +/****************************************************/ +static void map41_setstate (SnssMapperBlock *state) +{ + /* TODO: Store SNSS information */ + UNUSED (state); + + /* Done */ + return; +} + +/*****************************************************/ +/* Pull extra mapper information out of a SNSS block */ +/*****************************************************/ +static void map41_getstate (SnssMapperBlock *state) +{ + /* TODO: Retrieve SNSS information */ + UNUSED (state); + + /* Done */ + return; +} + +static const map_memwrite map41_memwrite [] = +{ + { 0x6000, 0x67FF, map41_low_write }, + { 0x8000, 0xFFFF, map41_high_write }, + { -1, -1, NULL } +}; + +const mapintf_t map41_intf = +{ + 41, /* Mapper number */ + "Caltron 6 in 1", /* Mapper name */ + map41_init, /* Initialization routine */ + NULL, /* VBlank callback */ + NULL, /* HBlank callback */ + map41_getstate, /* Get state (SNSS) */ + map41_setstate, /* Set state (SNSS) */ + NULL, /* Memory read structure */ + map41_memwrite, /* Memory write structure */ + NULL /* External sound device */ +}; + +/* +** $Log: map041.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1 2001/04/27 10:57:41 neil +** wheee +** +** Revision 1.1 2000/12/30 00:33:15 firebug +** initial revision +** +** +*/ diff --git a/MCUME_pico/piconofrendo/map042.c b/MCUME_pico/piconofrendo/map042.c new file mode 100755 index 0000000..1ca5af1 --- /dev/null +++ b/MCUME_pico/piconofrendo/map042.c @@ -0,0 +1,188 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map042.c +** +** Mapper #42 (Baby Mario bootleg) +** Implementation by Firebug +** Mapper information courtesy of Kevin Horton +** $Id: map042.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +** +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "libsnss.h" +#include "log.h" + +static struct +{ + bool enabled; + uint32 counter; +} irq; + +/********************************/ +/* Mapper #42 IRQ reset routine */ +/********************************/ +static void map42_irq_reset (void) +{ + /* Turn off IRQs */ + irq.enabled = false; + irq.counter = 0x0000; + + /* Done */ + return; +} + +/********************************************/ +/* Mapper #42: Baby Mario bootleg cartridge */ +/********************************************/ +static void map42_init (void) +{ + /* Set the hardwired pages */ + mmc_bankrom (8, 0x8000, 0x0C); + mmc_bankrom (8, 0xA000, 0x0D); + mmc_bankrom (8, 0xC000, 0x0E); + mmc_bankrom (8, 0xE000, 0x0F); + + /* Reset the IRQ counter */ + map42_irq_reset (); + + /* Done */ + return; +} + +/****************************************/ +/* Mapper #42 callback for IRQ handling */ +/****************************************/ +static void map42_hblank (int vblank) +{ + /* Counter is M2 based so it doesn't matter whether */ + /* the PPU is in its VBlank period or not */ + UNUSED(vblank); + + /* Increment the counter if it is enabled and check for strike */ + if (irq.enabled) + { + /* Is there a constant for cycles per scanline? */ + /* If so, someone ought to substitute it here */ + irq.counter = irq.counter + 114; + + /* IRQ is triggered after 24576 M2 cycles */ + if (irq.counter >= 0x6000) + { + /* Trigger the IRQ */ + nes_irq (); + + /* Reset the counter */ + map42_irq_reset (); + } + } +} + +/******************************************/ +/* Mapper #42 write handler ($E000-$FFFF) */ +/******************************************/ +static void map42_write (uint32 address, uint8 value) +{ + switch (address & 0x03) + { + /* Register 0: Select ROM page at $6000-$7FFF */ + case 0x00: mmc_bankrom (8, 0x6000, value & 0x0F); + break; + + /* Register 1: mirroring */ + case 0x01: if (value & 0x08) ppu_mirror(0, 0, 1, 1); /* horizontal */ + else ppu_mirror(0, 1, 0, 1); /* vertical */ + break; + + /* Register 2: IRQ */ + case 0x02: if (value & 0x02) irq.enabled = true; + else map42_irq_reset (); + break; + + /* Register 3: unused */ + default: break; + } + + /* Done */ + return; +} + +/****************************************************/ +/* Shove extra mapper information into a SNSS block */ +/****************************************************/ +static void map42_setstate (SnssMapperBlock *state) +{ + /* TODO: Store SNSS information */ + UNUSED (state); + + /* Done */ + return; +} + +/*****************************************************/ +/* Pull extra mapper information out of a SNSS block */ +/*****************************************************/ +static void map42_getstate (SnssMapperBlock *state) +{ + /* TODO: Retrieve SNSS information */ + UNUSED (state); + + /* Done */ + return; +} + +static const map_memwrite map42_memwrite [] = +{ + { 0xE000, 0xFFFF, map42_write }, + { -1, -1, NULL } +}; + +const mapintf_t map42_intf = +{ + 42, /* Mapper number */ + "Baby Mario (bootleg)", /* Mapper name */ + map42_init, /* Initialization routine */ + NULL, /* VBlank callback */ + map42_hblank, /* HBlank callback */ + map42_getstate, /* Get state (SNSS) */ + map42_setstate, /* Set state (SNSS) */ + NULL, /* Memory read structure */ + map42_memwrite, /* Memory write structure */ + NULL /* External sound device */ +}; + +/* +** $Log: map042.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1 2001/04/27 10:57:41 neil +** wheee +** +** Revision 1.1 2000/12/27 19:23:30 firebug +** initial revision +** +** +*/ diff --git a/MCUME_pico/piconofrendo/map046.c b/MCUME_pico/piconofrendo/map046.c new file mode 100755 index 0000000..9bd9f5c --- /dev/null +++ b/MCUME_pico/piconofrendo/map046.c @@ -0,0 +1,152 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map046.c +** +** Mapper #46 (Pelican Game Station) +** Implementation by Firebug +** Mapper information courtesy of Kevin Horton +** $Id: map046.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +** +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "libsnss.h" +#include "log.h" + +static uint8 prg_low_bank; +static uint8 chr_low_bank; +static uint8 prg_high_bank; +static uint8 chr_high_bank; + +/*************************************************/ +/* Set banks from the combined register values */ +/*************************************************/ +static void map46_set_banks (void) +{ + /* Set the PRG and CHR pages */ + mmc_bankrom (32, 0x8000, (prg_high_bank << 1) | (prg_low_bank)); + mmc_bankvrom (8, 0x0000, (chr_high_bank << 3) | (chr_low_bank)); + + /* Done */ + return; +} + +/*********************************************************/ +/* Mapper #46: Pelican Game Station (aka Rumble Station) */ +/*********************************************************/ +static void map46_init (void) +{ + /* High bank switch register is set to zero on reset */ + prg_high_bank = 0x00; + chr_high_bank = 0x00; + map46_set_banks (); + + /* Done */ + return; +} + +/******************************************/ +/* Mapper #46 write handler ($6000-$FFFF) */ +/******************************************/ +static void map46_write (uint32 address, uint8 value) +{ + /* $8000-$FFFF: D6-D4 = lower three bits of CHR bank */ + /* D0 = low bit of PRG bank */ + /* $6000-$7FFF: D7-D4 = high four bits of CHR bank */ + /* D3-D0 = high four bits of PRG bank */ + if (address & 0x8000) + { + prg_low_bank = value & 0x01; + chr_low_bank = (value >> 4) & 0x07; + map46_set_banks (); + } + else + { + prg_high_bank = value & 0x0F; + chr_high_bank = (value >> 4) & 0x0F; + map46_set_banks (); + } + + /* Done */ + return; +} + +/****************************************************/ +/* Shove extra mapper information into a SNSS block */ +/****************************************************/ +static void map46_setstate (SnssMapperBlock *state) +{ + /* TODO: Store SNSS information */ + UNUSED (state); + + /* Done */ + return; +} + +/*****************************************************/ +/* Pull extra mapper information out of a SNSS block */ +/*****************************************************/ +static void map46_getstate (SnssMapperBlock *state) +{ + /* TODO: Retrieve SNSS information */ + UNUSED (state); + + /* Done */ + return; +} + +static const map_memwrite map46_memwrite [] = +{ + { 0x6000, 0xFFFF, map46_write }, + { -1, -1, NULL } +}; + +const mapintf_t map46_intf = +{ + 46, /* Mapper number */ + "Pelican Game Station", /* Mapper name */ + map46_init, /* Initialization routine */ + NULL, /* VBlank callback */ + NULL, /* HBlank callback */ + map46_getstate, /* Get state (SNSS) */ + map46_setstate, /* Set state (SNSS) */ + NULL, /* Memory read structure */ + map46_memwrite, /* Memory write structure */ + NULL /* External sound device */ +}; + +/* +** $Log: map046.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1 2001/04/27 10:57:41 neil +** wheee +** +** Revision 1.1 2000/12/27 19:23:05 firebug +** initial revision +** +** +*/ diff --git a/MCUME_pico/piconofrendo/map050.c b/MCUME_pico/piconofrendo/map050.c new file mode 100755 index 0000000..89d8578 --- /dev/null +++ b/MCUME_pico/piconofrendo/map050.c @@ -0,0 +1,192 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map050.c +** +** Mapper #50 (SMB2j - 3rd discovered variation) +** Implementation by Firebug +** Mapper information courtesy of Kevin Horton +** $Id: map050.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +** +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "libsnss.h" +#include "log.h" + +static struct +{ + bool enabled; + uint32 counter; +} irq; + +/********************************/ +/* Mapper #50 IRQ reset routine */ +/********************************/ +static void map50_irq_reset (void) +{ + /* Turn off IRQs */ + irq.enabled = false; + irq.counter = 0x0000; + + /* Done */ + return; +} + +/**************************************************************/ +/* Mapper #50: 3rd discovered variation of SMB2j cart bootleg */ +/**************************************************************/ +static void map50_init (void) +{ + /* Set the hardwired pages */ + mmc_bankrom (8, 0x6000, 0x0F); + mmc_bankrom (8, 0x8000, 0x08); + mmc_bankrom (8, 0xA000, 0x09); + mmc_bankrom (8, 0xE000, 0x0B); + + /* Reset the IRQ counter */ + map50_irq_reset (); + + /* Done */ + return; +} + +/****************************************/ +/* Mapper #50 callback for IRQ handling */ +/****************************************/ +static void map50_hblank (int vblank) +{ + /* Counter is M2 based so it doesn't matter whether */ + /* the PPU is in its VBlank period or not */ + UNUSED(vblank); + + /* Increment the counter if it is enabled and check for strike */ + if (irq.enabled) + { + /* Is there a constant for cycles per scanline? */ + /* If so, someone ought to substitute it here */ + irq.counter = irq.counter + 114; + + /* IRQ line is hooked to Q12 of the counter */ + if (irq.counter & 0x1000) + { + /* Trigger the IRQ */ + nes_irq (); + + /* Reset the counter */ + map50_irq_reset (); + } + } +} + +/******************************************/ +/* Mapper #50 write handler ($4000-$5FFF) */ +/******************************************/ +static void map50_write (uint32 address, uint8 value) +{ + uint8 selectable_bank; + + /* For address to be decoded, A5 must be high and A6 low */ + if ((address & 0x60) != 0x20) return; + + /* A8 low = $C000-$DFFF page selection */ + /* A8 high = IRQ timer toggle */ + if (address & 0x100) + { + /* IRQ settings */ + if (value & 0x01) irq.enabled = true; + else map50_irq_reset (); + } + else + { + /* Stupid data line swapping */ + selectable_bank = 0x00; + if (value & 0x08) selectable_bank |= 0x08; + if (value & 0x04) selectable_bank |= 0x02; + if (value & 0x02) selectable_bank |= 0x01; + if (value & 0x01) selectable_bank |= 0x04; + mmc_bankrom (8, 0xC000, selectable_bank); + } + + /* Done */ + return; +} + +/****************************************************/ +/* Shove extra mapper information into a SNSS block */ +/****************************************************/ +static void map50_setstate (SnssMapperBlock *state) +{ + /* TODO: Store SNSS information */ + UNUSED (state); + + /* Done */ + return; +} + +/*****************************************************/ +/* Pull extra mapper information out of a SNSS block */ +/*****************************************************/ +static void map50_getstate (SnssMapperBlock *state) +{ + /* TODO: Retrieve SNSS information */ + UNUSED (state); + + /* Done */ + return; +} + +static const map_memwrite map50_memwrite [] = +{ + { 0x4000, 0x5FFF, map50_write }, + { -1, -1, NULL } +}; + +const mapintf_t map50_intf = +{ + 50, /* Mapper number */ + "SMB2j (3rd discovered variant)", /* Mapper name */ + map50_init, /* Initialization routine */ + NULL, /* VBlank callback */ + map50_hblank, /* HBlank callback */ + map50_getstate, /* Get state (SNSS) */ + map50_setstate, /* Set state (SNSS) */ + NULL, /* Memory read structure */ + map50_memwrite, /* Memory write structure */ + NULL /* External sound device */ +}; + +/* +** $Log: map050.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1 2001/04/27 10:57:41 neil +** wheee +** +** Revision 1.1 2000/12/27 19:22:13 firebug +** initial revision +** +** +*/ diff --git a/MCUME_pico/piconofrendo/map064.c b/MCUME_pico/piconofrendo/map064.c new file mode 100755 index 0000000..59b668f --- /dev/null +++ b/MCUME_pico/piconofrendo/map064.c @@ -0,0 +1,234 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map64.c +** +** mapper 64 interface +** $Id: map064.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "log.h" + +static struct +{ + int counter, latch; + bool enabled, reset; +} irq; + +static uint8 command = 0; +static uint16 vrombase = 0x0000; + +static void map64_hblank(int vblank) +{ + if (vblank) + return; + + irq.reset = false; + + if (ppu_enabled()) + { + if (0 == irq.counter--) + { + irq.counter = irq.latch; + + if (true == irq.enabled) + nes_irq(); + + irq.reset = true; + } + } +} + +/* mapper 64: Tengen RAMBO-1 */ +static void map64_write(uint32 address, uint8 value) +{ + switch (address & 0xE001) + { + case 0x8000: + command = value; + vrombase = (value & 0x80) ? 0x1000 : 0x0000; + break; + + case 0x8001: + switch (command & 0xF) + { + case 0: + mmc_bankvrom(1, 0x0000 ^ vrombase, value); + mmc_bankvrom(1, 0x0400 ^ vrombase, value); + break; + + case 1: + mmc_bankvrom(1, 0x0800 ^ vrombase, value); + mmc_bankvrom(1, 0x0C00 ^ vrombase, value); + break; + + case 2: + mmc_bankvrom(1, 0x1000 ^ vrombase, value); + break; + + case 3: + mmc_bankvrom(1, 0x1400 ^ vrombase, value); + break; + + case 4: + mmc_bankvrom(1, 0x1800 ^ vrombase, value); + break; + + case 5: + mmc_bankvrom(1, 0x1C00 ^ vrombase, value); + break; + + case 6: + mmc_bankrom(8, (command & 0x40) ? 0xA000 : 0x8000, value); + break; + + case 7: + mmc_bankrom(8, (command & 0x40) ? 0xC000 : 0xA000, value); + break; + + case 8: + mmc_bankvrom(1, 0x0400, value); + break; + + case 9: + mmc_bankvrom(1, 0x0C00, value); + break; + + case 15: + mmc_bankrom(8, (command & 0x40) ? 0x8000 : 0xC000, value); + break; + + default: +#ifdef NOFRENDO_DEBUG + log_printf("mapper 64: unknown command #%d", command & 0xF); +#endif + break; + } + break; + + case 0xA000: + if (value & 1) + ppu_mirror(0, 0, 1, 1); + else + ppu_mirror(0, 1, 0, 1); + break; + + case 0xC000: + //irq.counter = value; + irq.latch = value; + break; + + case 0xC001: + //irq.latch = value; + irq.reset = true; + break; + + case 0xE000: + //irq.counter = irq.latch; + irq.enabled = false; + break; + + case 0xE001: + irq.enabled = true; + break; + + default: +#ifdef NOFRENDO_DEBUG + log_printf("mapper 64: Wrote $%02X to $%04X", value, address); +#endif + break; + } + + if (true == irq.reset) + irq.counter = irq.latch; +} + +static void map64_init(void) +{ + mmc_bankrom(8, 0x8000, MMC_LASTBANK); + mmc_bankrom(8, 0xA000, MMC_LASTBANK); + mmc_bankrom(8, 0xC000, MMC_LASTBANK); + mmc_bankrom(8, 0xE000, MMC_LASTBANK); + + irq.counter = irq.latch = 0; + irq.reset = irq.enabled = false; +} + +static const map_memwrite map64_memwrite[] = +{ + { 0x8000, 0xFFFF, map64_write }, + { -1, -1, NULL } +}; + +const mapintf_t map64_intf = +{ + 64, /* mapper number */ + "Tengen RAMBO-1", /* mapper name */ + map64_init, /* init routine */ + NULL, /* vblank callback */ + map64_hblank, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map64_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map064.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.8 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.7 2000/10/22 15:03:13 matt +** simplified mirroring +** +** Revision 1.6 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.5 2000/10/10 13:58:17 matt +** stroustrup squeezing his way in the door +** +** Revision 1.4 2000/07/10 13:51:25 matt +** using generic nes_irq() routine now +** +** Revision 1.3 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/05 05:05:18 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map065.c b/MCUME_pico/piconofrendo/map065.c new file mode 100755 index 0000000..a152ee3 --- /dev/null +++ b/MCUME_pico/piconofrendo/map065.c @@ -0,0 +1,144 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map65.c +** +** mapper 65 interface +** $Id: map065.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" + +static struct +{ + int counter; + bool enabled; + int cycles; + uint8 low, high; +} irq; + +static void map65_init(void) +{ + irq.counter = 0; + irq.enabled = false; + irq.low = irq.high = 0; + irq.cycles = 0; +} + +/* TODO: shouldn't there be some kind of HBlank callback??? */ + +/* mapper 65: Irem H-3001*/ +static void map65_write(uint32 address, uint8 value) +{ + int range = address & 0xF000; + int reg = address & 7; + + switch (range) + { + case 0x8000: + case 0xA000: + case 0xC000: + mmc_bankrom(8, range, value); + break; + + case 0xB000: + mmc_bankvrom(1, reg << 10, value); + break; + + case 0x9000: + switch (reg) + { + case 4: + irq.enabled = (value & 0x01) ? false : true; + break; + + case 5: + irq.high = value; + irq.cycles = (irq.high << 8) | irq.low; + irq.counter = (uint8)(irq.cycles / 128); + break; + + case 6: + irq.low = value; + irq.cycles = (irq.high << 8) | irq.low; + irq.counter = (uint8)(irq.cycles / 128); + break; + + default: + break; + } + break; + + default: + break; + } +} + +static const map_memwrite map65_memwrite[] = +{ + { 0x8000, 0xFFFF, map65_write }, + { -1, -1, NULL } +}; + +const mapintf_t map65_intf = +{ + 65, /* mapper number */ + "Irem H-3001", /* mapper name */ + map65_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map65_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map065.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.5 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.4 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.3 2000/10/10 13:58:17 matt +** stroustrup squeezing his way in the door +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/06 01:01:56 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map066.c b/MCUME_pico/piconofrendo/map066.c new file mode 100755 index 0000000..1e789a7 --- /dev/null +++ b/MCUME_pico/piconofrendo/map066.c @@ -0,0 +1,94 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map66.c +** +** mapper 66 interface +** $Id: map066.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" + +/* mapper 66: GNROM */ +static void map66_write(uint32 address, uint8 value) +{ + UNUSED(address); + + mmc_bankrom(32, 0x8000, (value >> 4) & 3); + mmc_bankvrom(8, 0x0000, value & 3); +} + +static void map66_init(void) +{ + mmc_bankrom(32, 0x8000, 0); + mmc_bankvrom(8, 0x0000, 0); +} + + +static const map_memwrite map66_memwrite[] = +{ + { 0x8000, 0xFFFF, map66_write }, + { -1, -1, NULL } +}; + +const mapintf_t map66_intf = +{ + 66, /* mapper number */ + "GNROM", /* mapper name */ + map66_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map66_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map066.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.5 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.4 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.3 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/05 05:05:18 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map070.c b/MCUME_pico/piconofrendo/map070.c new file mode 100755 index 0000000..2299b8a --- /dev/null +++ b/MCUME_pico/piconofrendo/map070.c @@ -0,0 +1,115 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map70.c +** +** mapper 70 interface +** $Id: map070.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" + +/* mapper 70: Arkanoid II, Kamen Rider Club, etc. */ +/* ($8000-$FFFF) D6-D4 = switch $8000-$BFFF */ +/* ($8000-$FFFF) D3-D0 = switch PPU $0000-$1FFF */ +/* ($8000-$FFFF) D7 = switch mirroring */ +static void map70_write(uint32 address, uint8 value) +{ + UNUSED(address); + + mmc_bankrom(16, 0x8000, (value >> 4) & 0x07); + mmc_bankvrom(8, 0x0000, value & 0x0F); + + /* Argh! FanWen used the 4-screen bit to determine + ** whether the game uses D7 to switch between + ** horizontal and vertical mirroring, or between + ** one-screen mirroring from $2000 or $2400. + */ + if (mmc_getinfo()->flags & ROM_FLAG_FOURSCREEN) + { + if (value & 0x80) + ppu_mirror(0, 0, 1, 1); /* horiz */ + else + ppu_mirror(0, 1, 0, 1); /* vert */ + } + else + { + int mirror = (value & 0x80) >> 7; + ppu_mirror(mirror, mirror, mirror, mirror); + } +} + +static const map_memwrite map70_memwrite[] = +{ + { 0x8000, 0xFFFF, map70_write }, + { -1, -1, NULL } +}; + +const mapintf_t map70_intf = +{ + 70, /* mapper number */ + "Mapper 70", /* mapper name */ + NULL, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map70_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map070.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.7 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.6 2000/10/22 15:03:13 matt +** simplified mirroring +** +** Revision 1.5 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.4 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.3 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/06 01:01:56 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map073.c b/MCUME_pico/piconofrendo/map073.c new file mode 100755 index 0000000..619ad60 --- /dev/null +++ b/MCUME_pico/piconofrendo/map073.c @@ -0,0 +1,173 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map073.c +** +** Mapper #73 (Konami VRC3) +** Implementation by Firebug +** $Id: map073.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +** +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "libsnss.h" +#include "log.h" + +static struct +{ + bool enabled; + uint32 counter; +} irq; + +/**************************/ +/* Mapper #73: Salamander */ +/**************************/ +static void map73_init (void) +{ + /* Turn off IRQs */ + irq.enabled = false; + irq.counter = 0x0000; + + /* Done */ + return; +} + +/****************************************/ +/* Mapper #73 callback for IRQ handling */ +/****************************************/ +static void map73_hblank (int vblank) +{ + /* Counter is M2 based so it doesn't matter whether */ + /* the PPU is in its VBlank period or not */ + UNUSED (vblank); + + /* Increment the counter if it is enabled and check for strike */ + if (irq.enabled) + { + /* Is there a constant for cycles per scanline? */ + /* If so, someone ought to substitute it here */ + irq.counter = irq.counter + 114; + + /* Counter triggered on overflow into Q16 */ + if (irq.counter & 0x10000) + { + /* Clip to sixteen-bit word */ + irq.counter &= 0xFFFF; + + /* Trigger the IRQ */ + nes_irq (); + + /* Shut off IRQ counter */ + irq.enabled = false; + } + } +} + +/******************************************/ +/* Mapper #73 write handler ($8000-$FFFF) */ +/******************************************/ +static void map73_write (uint32 address, uint8 value) +{ + switch (address & 0xF000) + { + case 0x8000: irq.counter &= 0xFFF0; + irq.counter |= (uint32) (value); + break; + case 0x9000: irq.counter &= 0xFF0F; + irq.counter |= (uint32) (value << 4); + break; + case 0xA000: irq.counter &= 0xF0FF; + irq.counter |= (uint32) (value << 8); + break; + case 0xB000: irq.counter &= 0x0FFF; + irq.counter |= (uint32) (value << 12); + break; + case 0xC000: if (value & 0x02) irq.enabled = true; + else irq.enabled = false; + break; + case 0xF000: mmc_bankrom (16, 0x8000, value); + default: break; + } + + /* Done */ + return; +} + +/****************************************************/ +/* Shove extra mapper information into a SNSS block */ +/****************************************************/ +static void map73_setstate (SnssMapperBlock *state) +{ + /* TODO: Store SNSS information */ + UNUSED (state); + + /* Done */ + return; +} + +/*****************************************************/ +/* Pull extra mapper information out of a SNSS block */ +/*****************************************************/ +static void map73_getstate (SnssMapperBlock *state) +{ + /* TODO: Retrieve SNSS information */ + UNUSED (state); + + /* Done */ + return; +} + +static const map_memwrite map73_memwrite [] = +{ + { 0x8000, 0xFFFF, map73_write }, + { -1, -1, NULL } +}; + +const mapintf_t map73_intf = +{ + 73, /* Mapper number */ + "Konami VRC3", /* Mapper name */ + map73_init, /* Initialization routine */ + NULL, /* VBlank callback */ + map73_hblank, /* HBlank callback */ + map73_getstate, /* Get state (SNSS) */ + map73_setstate, /* Set state (SNSS) */ + NULL, /* Memory read structure */ + map73_memwrite, /* Memory write structure */ + NULL /* External sound device */ +}; + +/* +** $Log: map073.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1 2001/04/27 10:57:41 neil +** wheee +** +** Revision 1.1 2000/12/30 06:35:05 firebug +** Initial revision +** +** +*/ diff --git a/MCUME_pico/piconofrendo/map075.c b/MCUME_pico/piconofrendo/map075.c new file mode 100755 index 0000000..5622e2d --- /dev/null +++ b/MCUME_pico/piconofrendo/map075.c @@ -0,0 +1,131 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map75.c +** +** mapper 75 interface +** $Id: map075.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" + + +static uint8 latch[2]; +static uint8 hibits; + +/* mapper 75: Konami VRC1 */ +static void map75_write(uint32 address, uint8 value) +{ + switch ((address & 0xF000) >> 12) + { + case 0x8: + mmc_bankrom(8, 0x8000, value); + break; + + case 0x9: + hibits = (value & 0x06); + + mmc_bankvrom(4, 0x0000, ((hibits & 0x02) << 3) | latch[0]); + mmc_bankvrom(4, 0x1000, ((hibits & 0x04) << 2) | latch[1]); + + if (value & 1) + ppu_mirror(0, 1, 0, 1); /* vert */ + else + ppu_mirror(0, 0, 1, 1); /* horiz */ + + break; + + case 0xA: + mmc_bankrom(8, 0xA000, value); + break; + + case 0xC: + mmc_bankrom(8, 0xC000, value); + break; + + case 0xE: + latch[0] = (value & 0x0F); + mmc_bankvrom(4, 0x0000, ((hibits & 0x02) << 3) | latch[0]); + break; + + case 0xF: + latch[1] = (value & 0x0F); + mmc_bankvrom(4, 0x1000, ((hibits & 0x04) << 2) | latch[1]); + break; + + default: + break; + } +} + +static const map_memwrite map75_memwrite[] = +{ + { 0x8000, 0xFFFF, map75_write }, + { -1, -1, NULL } +}; + +const mapintf_t map75_intf = +{ + 75, /* mapper number */ + "Konami VRC1", /* mapper name */ + NULL, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map75_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map075.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.6 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.5 2000/10/22 15:03:14 matt +** simplified mirroring +** +** Revision 1.4 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.3 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/06 01:01:56 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map078.c b/MCUME_pico/piconofrendo/map078.c new file mode 100755 index 0000000..306da78 --- /dev/null +++ b/MCUME_pico/piconofrendo/map078.c @@ -0,0 +1,111 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map78.c +** +** mapper 78 interface +** $Id: map078.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" + +/* mapper 78: Holy Diver, Cosmo Carrier */ +/* ($8000-$FFFF) D2-D0 = switch $8000-$BFFF */ +/* ($8000-$FFFF) D7-D4 = switch PPU $0000-$1FFF */ +/* ($8000-$FFFF) D3 = switch mirroring */ +static void map78_write(uint32 address, uint8 value) +{ + UNUSED(address); + + mmc_bankrom(16, 0x8000, value & 7); + mmc_bankvrom(8, 0x0000, (value >> 4) & 0x0F); + + /* Ugh! Same abuse of the 4-screen bit as with Mapper #70 */ + if (mmc_getinfo()->flags & ROM_FLAG_FOURSCREEN) + { + if (value & 0x08) + ppu_mirror(0, 1, 0, 1); /* vert */ + else + ppu_mirror(0, 0, 1, 1); /* horiz */ + } + else + { + int mirror = (value >> 3) & 1; + ppu_mirror(mirror, mirror, mirror, mirror); + } +} + +static const map_memwrite map78_memwrite[] = +{ + { 0x8000, 0xFFFF, map78_write }, + { -1, -1, NULL } +}; + +const mapintf_t map78_intf = +{ + 78, /* mapper number */ + "Mapper 78", /* mapper name */ + NULL, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map78_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map078.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.7 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.6 2000/10/22 15:03:14 matt +** simplified mirroring +** +** Revision 1.5 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.4 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.3 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/06 01:01:56 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map079.c b/MCUME_pico/piconofrendo/map079.c new file mode 100755 index 0000000..3f92f6e --- /dev/null +++ b/MCUME_pico/piconofrendo/map079.c @@ -0,0 +1,92 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map78.c +** +** mapper 78 interface +** $Id: map079.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" + + +/* mapper 79: NINA-03/06 */ +static void map79_write(uint32 address, uint8 value) +{ + if ((address & 0x5100) == 0x4100) + { + mmc_bankrom(32, 0x8000, (value >> 3) & 1); + mmc_bankvrom(8, 0x0000, value & 7); + } +} + +static void map79_init(void) +{ + mmc_bankrom(32, 0x8000, 0); + mmc_bankvrom(8, 0x0000, 0); +} + +static const map_memwrite map79_memwrite[] = +{ + { 0x4100, 0x5FFF, map79_write }, /* ????? incorrect range ??? */ + { -1, -1, NULL } +}; + +const mapintf_t map79_intf = +{ + 79, /* mapper number */ + "NINA-03/06", /* mapper name */ + map79_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map79_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map079.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.4 2000/10/22 19:17:47 matt +** mapper cleanups galore +** +** Revision 1.3 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/06 01:01:56 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map085.c b/MCUME_pico/piconofrendo/map085.c new file mode 100755 index 0000000..a1252d0 --- /dev/null +++ b/MCUME_pico/piconofrendo/map085.c @@ -0,0 +1,232 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map85.c +** +** mapper 85 interface +** $Id: map085.c,v 1.3 2001/05/06 01:42:03 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "log.h" + +static struct +{ + int counter, latch; + int wait_state; + bool enabled; +} irq; + +/* mapper 85: Konami VRC7 */ +static void map85_write(uint32 address, uint8 value) +{ + uint8 bank = address >> 12; + uint8 reg = (address & 0x10) | ((address & 0x08) << 1); + + switch (bank) + { + case 0x08: + if (0x10 == reg) + mmc_bankrom(8, 0xA000, value); + else + mmc_bankrom(8, 0x8000, value); + break; + + case 0x09: + /* 0x10 & 0x30 should be trapped by sound emulation */ + mmc_bankrom(8, 0xC000, value); + break; + + case 0x0A: + if (0x10 == reg) + mmc_bankvrom(1, 0x0400, value); + else + mmc_bankvrom(1, 0x0000, value); + break; + + case 0x0B: + if (0x10 == reg) + mmc_bankvrom(1, 0x0C00, value); + else + mmc_bankvrom(1, 0x0800, value); + break; + + case 0x0C: + if (0x10 == reg) + mmc_bankvrom(1, 0x1400, value); + else + mmc_bankvrom(1, 0x1000, value); + break; + + case 0x0D: + if (0x10 == reg) + mmc_bankvrom(1, 0x1C00, value); + else + mmc_bankvrom(1, 0x1800, value); + break; + + case 0x0E: + if (0x10 == reg) + { + irq.latch = value; + } + else + { + switch (value & 3) + { + case 0: + ppu_mirror(0, 1, 0, 1); /* vertical */ + break; + + case 1: + ppu_mirror(0, 0, 1, 1); /* horizontal */ + break; + + case 2: + ppu_mirror(0, 0, 0, 0); + break; + + case 3: + ppu_mirror(1, 1, 1, 1); + break; + } + } + break; + + case 0x0F: + if (0x10 == reg) + { + irq.enabled = irq.wait_state; + } + else + { + irq.wait_state = value & 0x01; + irq.enabled = (value & 0x02) ? true : false; + if (true == irq.enabled) + irq.counter = irq.latch; + } + break; + + default: +#ifdef NOFRENDO_DEBUG + log_printf("unhandled vrc7 write: $%02X to $%04X\n", value, address); +#endif /* NOFRENDO_DEBUG */ + break; + } +} + +static void map85_hblank(int vblank) +{ + UNUSED(vblank); + + if (irq.enabled) + { + if (++irq.counter > 0xFF) + { + irq.counter = irq.latch; + nes_irq(); + + //return; + } + //irq.counter++; + } +} + +static const map_memwrite map85_memwrite[] = +{ + { 0x8000, 0xFFFF, map85_write }, + { -1, -1, NULL } +}; + +static void map85_init(void) +{ + mmc_bankrom(16, 0x8000, 0); + mmc_bankrom(16, 0xC000, MMC_LASTBANK); + + mmc_bankvrom(8, 0x0000, 0); + + irq.counter = irq.latch = 0; + irq.wait_state = 0; + irq.enabled = false; +} + +const mapintf_t map85_intf = +{ + 85, /* mapper number */ + "Konami VRC7", /* mapper name */ + map85_init, /* init routine */ + NULL, /* vblank callback */ + map85_hblank, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map85_memwrite, /* memory write structure */ + NULL +}; + +/* +** $Log: map085.c,v $ +** Revision 1.3 2001/05/06 01:42:03 neil +** boooo +** +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.10 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.9 2000/10/22 15:03:14 matt +** simplified mirroring +** +** Revision 1.8 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.7 2000/10/10 13:58:17 matt +** stroustrup squeezing his way in the door +** +** Revision 1.6 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.5 2000/07/23 14:37:21 matt +** added a break statement +** +** Revision 1.4 2000/07/15 23:52:19 matt +** rounded out a bunch more mapper interfaces +** +** Revision 1.3 2000/07/10 13:51:25 matt +** using generic nes_irq() routine now +** +** Revision 1.2 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.1 2000/07/06 02:47:47 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map087.c b/MCUME_pico/piconofrendo/map087.c new file mode 100755 index 0000000..4941167 --- /dev/null +++ b/MCUME_pico/piconofrendo/map087.c @@ -0,0 +1,85 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map087.c +** +** Mapper #87 (16K VROM switch) +** Implementation by Firebug +** $Id: map087.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +** +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "libsnss.h" +#include "log.h" + +/******************************************/ +/* Mapper #87 write handler ($6000-$7FFF) */ +/******************************************/ +static void map87_write (uint32 address, uint8 value) +{ + /* Within range, address written to is irrelevant */ + UNUSED (address); + + /* Very simple: 8K CHR page is selected by D1 */ + if (value & 0x02) mmc_bankvrom (8, 0x0000, 0x01); + else mmc_bankvrom (8, 0x0000, 0x00); + + /* Done */ + return; +} + +static const map_memwrite map87_memwrite [] = +{ + { 0x6000, 0x7FFF, map87_write }, + { -1, -1, NULL } +}; + +const mapintf_t map87_intf = +{ + 87, /* Mapper number */ + "16K VROM switch", /* Mapper name */ + NULL, /* Initialization routine */ + NULL, /* VBlank callback */ + NULL, /* HBlank callback */ + NULL, /* Get state (SNSS) */ + NULL, /* Set state (SNSS) */ + NULL, /* Memory read structure */ + map87_memwrite, /* Memory write structure */ + NULL /* External sound device */ +}; + +/* +** $Log: map087.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1 2001/04/27 10:57:41 neil +** wheee +** +** Revision 1.1 2000/12/30 06:34:44 firebug +** Initial revision +** +** +*/ diff --git a/MCUME_pico/piconofrendo/map093.c b/MCUME_pico/piconofrendo/map093.c new file mode 100755 index 0000000..80b9be5 --- /dev/null +++ b/MCUME_pico/piconofrendo/map093.c @@ -0,0 +1,77 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map93.c +** +** mapper 93 interface +** $Id: map093.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" + +static void map93_write(uint32 address, uint8 value) +{ + UNUSED(address); + + /* ($8000-$FFFF) D7-D4 = switch $8000-$BFFF D0: mirror */ + mmc_bankrom(16, 0x8000, value >> 4); + + if (value & 1) + ppu_mirror(0, 1, 0, 1); /* vert */ + else + ppu_mirror(0, 0, 1, 1); /* horiz */ +} + +static const map_memwrite map93_memwrite[] = +{ + { 0x8000, 0xFFFF, map93_write }, + { -1, -1, NULL } +}; + +const mapintf_t map93_intf = +{ + 93, /* mapper number */ + "Mapper 93", /* mapper name */ + NULL, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map93_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map093.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/12/11 12:33:48 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map094.c b/MCUME_pico/piconofrendo/map094.c new file mode 100755 index 0000000..04f3922 --- /dev/null +++ b/MCUME_pico/piconofrendo/map094.c @@ -0,0 +1,87 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map94.c +** +** mapper 94 interface +** $Id: map094.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" + +/* mapper 94: Senjou no Ookami */ +static void map94_write(uint32 address, uint8 value) +{ + UNUSED(address); + + /* ($8000-$FFFF) D7-D2 = switch $8000-$BFFF */ + mmc_bankrom(16, 0x8000, value >> 2); +} + +static const map_memwrite map94_memwrite[] = +{ + { 0x8000, 0xFFFF, map94_write }, + { -1, -1, NULL } +}; + +const mapintf_t map94_intf = +{ + 94, /* mapper number */ + "Mapper 94", /* mapper name */ + NULL, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map94_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map094.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.5 2000/10/22 19:17:47 matt +** mapper cleanups galore +** +** Revision 1.4 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.3 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/06 01:01:56 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map099.c b/MCUME_pico/piconofrendo/map099.c new file mode 100755 index 0000000..01ceec4 --- /dev/null +++ b/MCUME_pico/piconofrendo/map099.c @@ -0,0 +1,90 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map99.c +** +** mapper 99 interface +** $Id: map099.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" + +/* Switch VROM for VS games */ +static void map99_vromswitch(uint8 value) +{ + int bank = (value & 0x04) >> 2; + mmc_bankvrom(8, 0x0000, bank); +} + +/* mapper 99: VS. System */ +static const void map99_init(void) +{ + ppu_mirror(0, 1, 2, 3); + ppu_setvromswitch(map99_vromswitch); +} + +const mapintf_t map99_intf = +{ + 99, /* mapper number */ + "VS. System", /* mapper name */ + map99_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + NULL, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map099.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.6 2000/10/22 19:17:47 matt +** mapper cleanups galore +** +** Revision 1.5 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.4 2000/10/10 13:58:17 matt +** stroustrup squeezing his way in the door +** +** Revision 1.3 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/05 05:05:18 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map160.c b/MCUME_pico/piconofrendo/map160.c new file mode 100755 index 0000000..9b53339 --- /dev/null +++ b/MCUME_pico/piconofrendo/map160.c @@ -0,0 +1,140 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map160.c +** +** mapper 160 interface +** $Id: map160.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes_ppu.h" +#include "nes.h" + +static struct +{ + bool enabled, expired; + int counter; + int latch_c005, latch_c003; +} irq; + +static void map160_write(uint32 address, uint8 value) +{ + if (address >= 0x8000 && address <= 0x8003) + { + mmc_bankrom(8, 0x8000 + 0x2000 * (address & 3), value); + } + else if (address >= 0x9000 && address <= 0x9007) + { + mmc_bankvrom(1, 0x400 * (address & 7), value); + } + else if (0xC002 == address) + { + irq.enabled = false; + irq.latch_c005 = irq.latch_c003; + } + else if (0xC003 == address) + { + if (false == irq.expired) + { + irq.counter = value; + } + else + { + irq.expired = false; + irq.enabled = true; + irq.counter = irq.latch_c005; + } + } + else if (0xC005 == address) + { + irq.latch_c005 = value; + irq.counter = value; + } +#ifdef NOFRENDO_DEBUG + else + { + log_printf("mapper 160: untrapped write $%02X to $%04X\n", value, address); + } +#endif /* NOFRENDO_DEBUG */ +} + +static void map160_hblank(int vblank) +{ + if (!vblank) + { + if (ppu_enabled() && irq.enabled) + { + if (0 == irq.counter && false == irq.expired) + { + irq.expired = true; + nes_irq(); + } + else + { + irq.counter--; + } + } + } +} + +static void map160_init(void) +{ + irq.enabled = false; + irq.expired = false; + irq.counter = 0; + irq.latch_c003 = irq.latch_c005 = 0; +} + +static const map_memwrite map160_memwrite[] = +{ + { 0x8000, 0xFFFF, map160_write }, + { -1, -1, NULL } +}; + +const mapintf_t map160_intf = +{ + 160, /* mapper number */ + "Aladdin (pirate)", /* mapper name */ + map160_init, /* init routine */ + NULL, /* vblank callback */ + map160_hblank, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map160_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map160.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1 2001/04/27 10:57:41 neil +** wheee +** +** Revision 1.1 2000/12/27 04:24:46 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/map229.c b/MCUME_pico/piconofrendo/map229.c new file mode 100755 index 0000000..f3114fa --- /dev/null +++ b/MCUME_pico/piconofrendo/map229.c @@ -0,0 +1,114 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map229.c +** +** Mapper #229 (31 in 1) +** Implementation by Firebug +** Mapper information courtesy of Mark Knibbs +** $Id: map229.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +** +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "libsnss.h" +#include "log.h" + +/************************/ +/* Mapper #229: 31 in 1 */ +/************************/ +static void map229_init (void) +{ + /* On reset, PRG is set to first 32K and CHR to first 8K */ + mmc_bankrom (32, 0x8000, 0x00); + mmc_bankvrom (8, 0x0000, 0x00); + + /* Done */ + return; +} + +/*******************************************/ +/* Mapper #229 write handler ($8000-$FFFF) */ +/*******************************************/ +static void map229_write (uint32 address, uint8 value) +{ + /* Value written is irrelevant */ + UNUSED (value); + + /* A4-A0 sets 8K CHR page */ + mmc_bankvrom (8, 0x0000, (uint8) (address & 0x1F)); + + /* If A4-A1 are all low then select the first 32K, */ + /* otherwise select a 16K bank at both $8000 and $C000 */ + if ((address & 0x1E) == 0x00) + { + mmc_bankrom (32, 0x8000, 0x00); + } + else + { + mmc_bankrom (16, 0x8000, (uint8) (address & 0x1F)); + mmc_bankrom (16, 0xC000, (uint8) (address & 0x1F)); + } + + /* A5: mirroring (low = vertical, high = horizontal) */ + if (address & 0x20) ppu_mirror(0, 0, 1, 1); + else ppu_mirror(0, 1, 0, 1); + + /* Done */ + return; +} + +static const map_memwrite map229_memwrite [] = +{ + { 0x8000, 0xFFFF, map229_write }, + { -1, -1, NULL } +}; + +const mapintf_t map229_intf = +{ + 229, /* Mapper number */ + "31 in 1 (bootleg)", /* Mapper name */ + map229_init, /* Initialization routine */ + NULL, /* VBlank callback */ + NULL, /* HBlank callback */ + NULL, /* Get state (SNSS) */ + NULL, /* Set state (SNSS) */ + NULL, /* Memory read structure */ + map229_memwrite, /* Memory write structure */ + NULL /* External sound device */ +}; + +/* +** $Log: map229.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1 2001/04/27 10:57:41 neil +** wheee +** +** Revision 1.1 2000/12/30 06:34:31 firebug +** Initial revision +** +** +*/ diff --git a/MCUME_pico/piconofrendo/map231.c b/MCUME_pico/piconofrendo/map231.c new file mode 100755 index 0000000..5946b2b --- /dev/null +++ b/MCUME_pico/piconofrendo/map231.c @@ -0,0 +1,95 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map231.c +** +** mapper 231 interface +** $Id: map231.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" + +/* mapper 231: NINA-07, used in Wally Bear and the NO! Gang */ + +static void map231_init(void) +{ + mmc_bankrom(32, 0x8000, MMC_LASTBANK); +} + +static void map231_write(uint32 address, uint8 value) +{ + int bank, vbank; + UNUSED(address); + + bank = ((value & 0x80) >> 5) | (value & 0x03); + vbank = (value >> 4) & 0x07; + + mmc_bankrom(32, 0x8000, bank); + mmc_bankvrom(8, 0x0000, vbank); +} + +static const map_memwrite map231_memwrite[] = +{ + { 0x8000, 0xFFFF, map231_write }, + { -1, -1, NULL } +}; + +const mapintf_t map231_intf = +{ + 231, /* mapper number */ + "NINA-07", /* mapper name */ + map231_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map231_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: map231.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.4 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.3 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.2 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.1 2000/07/11 03:14:18 melanson +** Initial commit for mappers 16, 34, and 231 +** +** +*/ diff --git a/MCUME_pico/piconofrendo/mapvrc.c b/MCUME_pico/piconofrendo/mapvrc.c new file mode 100755 index 0000000..67124f2 --- /dev/null +++ b/MCUME_pico/piconofrendo/mapvrc.c @@ -0,0 +1,452 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** map_vrc.c +** +** VRC mapper interface +** $Id: mapvrc.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" +#include "nes.h" +#include "log.h" + +#define VRC_VBANK(bank, value, high) \ +{ \ + if ((high)) \ + highnybbles[(bank)] = (value) & 0x0F; \ + else \ + lownybbles[(bank)] = (value) & 0x0F; \ + mmc_bankvrom(1, (bank) << 10, (highnybbles[(bank)] << 4)+lownybbles[(bank)]); \ +} + +static struct +{ + int counter, enabled; + int latch, wait_state; +} irq; + +static int select_c000 = 0; +static uint8 lownybbles[8]; +static uint8 highnybbles[8]; + +static void vrc_init(void) +{ + irq.counter = irq.enabled = 0; + irq.latch = irq.wait_state = 0; +} + +static void map21_write(uint32 address, uint8 value) +{ + switch (address) + { + case 0x8000: + if (select_c000) + mmc_bankrom(8, 0xC000,value); + else + mmc_bankrom(8, 0x8000,value); + break; + + case 0x9000: + switch (value & 3) + { + case 0: + ppu_mirror(0, 1, 0, 1); /* vertical */ + break; + + case 1: + ppu_mirror(0, 0, 1, 1); /* horizontal */ + break; + + case 2: + ppu_mirror(0, 0, 0, 0); + break; + + case 3: + ppu_mirror(1, 1, 1, 1); + break; + + default: + break; + } + break; + case 0x9002: select_c000=(value&0x02)>>1; break; + case 0xA000: mmc_bankrom(8, 0xA000,value); break; + + case 0xB000: VRC_VBANK(0,value,0); break; + case 0xB002: + case 0xB040: VRC_VBANK(0,value,1); break; + case 0xB001: + case 0xB004: + case 0xB080: VRC_VBANK(1,value,0); break; + case 0xB003: + case 0xB006: + case 0xB0C0: VRC_VBANK(1,value,1); break; + case 0xC000: VRC_VBANK(2,value,0); break; + case 0xC002: + case 0xC040: VRC_VBANK(2,value,1); break; + case 0xC001: + case 0xC004: + case 0xC080: VRC_VBANK(3,value,0); break; + case 0xC003: + case 0xC006: + case 0xC0C0: VRC_VBANK(3,value,1); break; + case 0xD000: VRC_VBANK(4,value,0); break; + case 0xD002: + case 0xD040: VRC_VBANK(4,value,1); break; + case 0xD001: + case 0xD004: + case 0xD080: VRC_VBANK(5,value,0); break; + case 0xD003: + case 0xD006: + case 0xD0C0: VRC_VBANK(5,value,1); break; + case 0xE000: VRC_VBANK(6,value,0); break; + case 0xE002: + case 0xE040: VRC_VBANK(6,value,1); break; + case 0xE001: + case 0xE004: + case 0xE080: VRC_VBANK(7,value,0); break; + case 0xE003: + case 0xE006: + case 0xE0C0: VRC_VBANK(7,value,1); break; + + case 0xF000: + irq.latch &= 0xF0; + irq.latch |= (value & 0x0F); + break; + case 0xF002: + case 0xF040: + irq.latch &= 0x0F; + irq.latch |= ((value & 0x0F) << 4); + break; + case 0xF004: + case 0xF001: + case 0xF080: + irq.enabled = (value >> 1) & 0x01; + irq.wait_state = value & 0x01; + irq.counter = irq.latch; + break; + case 0xF006: + case 0xF003: + case 0xF0C0: + irq.enabled = irq.wait_state; + break; + + default: +#ifdef NOFRENDO_DEBUG + log_printf("wrote $%02X to $%04X", value, address); +#endif + break; + } +} + +static void map22_write(uint32 address, uint8 value) +{ + int reg = address >> 12; + + switch (reg) + { + case 0x8: + mmc_bankrom(8, 0x8000, value); + break; + + case 0xA: + mmc_bankrom(8, 0xA000, value); + break; + + case 0x9: + switch (value & 3) + { + case 0: + ppu_mirror(0, 1, 0, 1); /* vertical */ + break; + + case 1: + ppu_mirror(0, 0, 1, 1); /* horizontal */ + break; + + case 2: + ppu_mirror(1, 1, 1, 1); + break; + + case 3: + ppu_mirror(0, 0, 0, 0); + break; + } + break; + + case 0xB: + case 0xC: + case 0xD: + case 0xE: + { + int loc = (((reg - 0xB) << 1) + (address & 1)) << 10; + mmc_bankvrom(1, loc, value >> 1); + } + break; + + default: + break; + } +} + +static void map23_write(uint32 address, uint8 value) +{ + switch (address) + { + case 0x8000: + case 0x8FFF: + mmc_bankrom(8, 0x8000, value); + break; + + case 0xA000: + case 0xAFFF: + mmc_bankrom(8, 0xA000, value); + break; + + case 0x9000: + case 0x9004: + case 0x9008: + switch(value & 3) + { + case 0: + ppu_mirror(0, 1, 0, 1); /* vertical */ + break; + + case 1: + ppu_mirror(0, 0, 1, 1); /* horizontal */ + break; + + case 2: + ppu_mirror(0, 0, 0, 0); + break; + + case 3: + ppu_mirror(1, 1, 1, 1); + break; + } + break; + + case 0xB000: VRC_VBANK(0,value,0); break; + case 0xB001: + case 0xB004: VRC_VBANK(0,value,1); break; + case 0xB002: + case 0xB008: VRC_VBANK(1,value,0); break; + case 0xB003: + case 0xB00C: VRC_VBANK(1,value,1); break; + case 0xC000: VRC_VBANK(2,value,0); break; + case 0xC001: + case 0xC004: VRC_VBANK(2,value,1); break; + case 0xC002: + case 0xC008: VRC_VBANK(3,value,0); break; + case 0xC003: + case 0xC00C: VRC_VBANK(3,value,1); break; + case 0xD000: VRC_VBANK(4,value,0); break; + case 0xD001: + case 0xD004: VRC_VBANK(4,value,1); break; + case 0xD002: + case 0xD008: VRC_VBANK(5,value,0); break; + case 0xD003: + case 0xD00C: VRC_VBANK(5,value,1); break; + case 0xE000: VRC_VBANK(6,value,0); break; + case 0xE001: + case 0xE004: VRC_VBANK(6,value,1); break; + case 0xE002: + case 0xE008: VRC_VBANK(7,value,0); break; + case 0xE003: + case 0xE00C: VRC_VBANK(7,value,1); break; + + case 0xF000: + irq.latch &= 0xF0; + irq.latch |= (value & 0x0F); + break; + + case 0xF004: + irq.latch &= 0x0F; + irq.latch |= ((value & 0x0F) << 4); + break; + + case 0xF008: + irq.enabled = (value >> 1) & 0x01; + irq.wait_state = value & 0x01; + irq.counter = irq.latch; + break; + + case 0xF00C: + irq.enabled = irq.wait_state; + break; + + default: +#ifdef NOFRENDO_DEBUG + log_printf("wrote $%02X to $%04X",value,address); +#endif + break; + } +} + +static void vrc_hblank(int vblank) +{ + UNUSED(vblank); + + if (irq.enabled) + { + if (256 == ++irq.counter) + { + irq.counter = irq.latch; + nes_irq(); + //irq.enabled = false; + irq.enabled = irq.wait_state; + } + } +} + + + +static map_memwrite map21_memwrite[] = +{ + { 0x8000, 0xFFFF, map21_write }, + { -1, -1, NULL } +}; + +static map_memwrite map22_memwrite[] = +{ + { 0x8000, 0xFFFF, map22_write }, + { -1, -1, NULL } +}; + +static map_memwrite map23_memwrite[] = +{ + { 0x8000, 0xFFFF, map23_write }, + { -1, -1, NULL } +}; + +static void map21_getstate(SnssMapperBlock *state) +{ + state->extraData.mapper21.irqCounter = irq.counter; + state->extraData.mapper21.irqCounterEnabled = irq.enabled; +} + +static void map21_setstate(SnssMapperBlock *state) +{ + irq.counter = state->extraData.mapper21.irqCounter; + irq.enabled = state->extraData.mapper21.irqCounterEnabled; +} + +const mapintf_t map21_intf = +{ + 21, /* mapper number */ + "Konami VRC4 A", /* mapper name */ + vrc_init, /* init routine */ + NULL, /* vblank callback */ + vrc_hblank, /* hblank callback */ + map21_getstate, /* get state (snss) */ + map21_setstate, /* set state (snss) */ + NULL, /* memory read structure */ + map21_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +const mapintf_t map22_intf = +{ + 22, /* mapper number */ + "Konami VRC2 A", /* mapper name */ + vrc_init, /* init routine */ + NULL, /* vblank callback */ + NULL, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map22_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +const mapintf_t map23_intf = +{ + 23, /* mapper number */ + "Konami VRC2 B", /* mapper name */ + vrc_init, /* init routine */ + NULL, /* vblank callback */ + vrc_hblank, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map23_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +const mapintf_t map25_intf = +{ + 25, /* mapper number */ + "Konami VRC4 B", /* mapper name */ + NULL, /* init routine */ + NULL, /* vblank callback */ + vrc_hblank, /* hblank callback */ + NULL, /* get state (snss) */ + NULL, /* set state (snss) */ + NULL, /* memory read structure */ + map21_memwrite, /* memory write structure */ + NULL /* external sound device */ +}; + +/* +** $Log: mapvrc.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:19:33 matt +** changed directory structure +** +** Revision 1.10 2000/10/22 19:17:46 matt +** mapper cleanups galore +** +** Revision 1.9 2000/10/22 15:03:14 matt +** simplified mirroring +** +** Revision 1.8 2000/10/21 19:33:38 matt +** many more cleanups +** +** Revision 1.7 2000/10/10 13:58:17 matt +** stroustrup squeezing his way in the door +** +** Revision 1.6 2000/08/16 02:50:11 matt +** random mapper cleanups +** +** Revision 1.5 2000/07/15 23:52:20 matt +** rounded out a bunch more mapper interfaces +** +** Revision 1.4 2000/07/10 13:51:25 matt +** using generic nes_irq() routine now +** +** Revision 1.3 2000/07/10 05:29:03 matt +** cleaned up some mirroring issues +** +** Revision 1.2 2000/07/06 02:48:43 matt +** clearly labelled structure members +** +** Revision 1.1 2000/07/06 01:01:56 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/mmc5_snd.c b/MCUME_pico/piconofrendo/mmc5_snd.c new file mode 100755 index 0000000..29fb00e --- /dev/null +++ b/MCUME_pico/piconofrendo/mmc5_snd.c @@ -0,0 +1,447 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** mmc5_snd.c +** +** Nintendo MMC5 sound emulation +** $Id: mmc5_snd.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include +#include "noftypes.h" +#include "mmc5_snd.h" +#include "nes_apu.h" + +/* TODO: encapsulate apu/mmc5 rectangle */ + +#define APU_OVERSAMPLE +#define APU_VOLUME_DECAY(x) ((x) -= ((x) >> 7)) + +/* look up table madness */ +static int32 decay_lut[16]; +static int vbl_lut[32]; + +/* various sound constants for sound emulation */ +/* vblank length table used for rectangles, triangle, noise */ +static const uint8 vbl_length[32] = +{ + 5, 127, 10, 1, 19, 2, 40, 3, 80, 4, 30, 5, 7, 6, 13, 7, + 6, 8, 12, 9, 24, 10, 48, 11, 96, 12, 36, 13, 8, 14, 16, 15 +}; + +/* ratios of pos/neg pulse for rectangle waves +** 2/16 = 12.5%, 4/16 = 25%, 8/16 = 50%, 12/16 = 75% +** (4-bit adder in rectangles, hence the 16) +*/ +static const int duty_lut[4] = +{ + 2, 4, 8, 12 +}; + + +#define MMC5_WRA0 0x5000 +#define MMC5_WRA1 0x5001 +#define MMC5_WRA2 0x5002 +#define MMC5_WRA3 0x5003 +#define MMC5_WRB0 0x5004 +#define MMC5_WRB1 0x5005 +#define MMC5_WRB2 0x5006 +#define MMC5_WRB3 0x5007 +#define MMC5_SMASK 0x5015 + +typedef struct mmc5rectangle_s +{ + uint8 regs[4]; + + bool enabled; + + float accum; + int32 freq; + int32 output_vol; + bool fixed_envelope; + bool holdnote; + uint8 volume; + + int32 env_phase; + int32 env_delay; + uint8 env_vol; + + int vbl_length; + uint8 adder; + int duty_flip; +} mmc5rectangle_t; + +typedef struct mmc5dac_s +{ + int32 output; + bool enabled; +} mmc5dac_t; + + +static struct +{ + float incsize; + uint8 mul[2]; + mmc5rectangle_t rect[2]; + mmc5dac_t dac; +} mmc5; + + +#define MMC5_RECTANGLE_OUTPUT chan->output_vol +static int32 mmc5_rectangle(mmc5rectangle_t *chan) +{ + int32 output; + +#ifdef APU_OVERSAMPLE + int num_times; + int32 total; +#endif /* APU_OVERSAMPLE */ + + /* reg0: 0-3=volume, 4=envelope, 5=hold, 6-7=duty cycle + ** reg1: 0-2=sweep shifts, 3=sweep inc/dec, 4-6=sweep length, 7=sweep on + ** reg2: 8 bits of freq + ** reg3: 0-2=high freq, 7-4=vbl length counter + */ + + APU_VOLUME_DECAY(chan->output_vol); + + if (false == chan->enabled || 0 == chan->vbl_length) + return MMC5_RECTANGLE_OUTPUT; + + /* vbl length counter */ + if (false == chan->holdnote) + chan->vbl_length--; + + /* envelope decay at a rate of (env_delay + 1) / 240 secs */ + chan->env_phase -= 4; /* 240/60 */ + while (chan->env_phase < 0) + { + chan->env_phase += chan->env_delay; + + if (chan->holdnote) + chan->env_vol = (chan->env_vol + 1) & 0x0F; + else if (chan->env_vol < 0x0F) + chan->env_vol++; + } + + if (chan->freq < 4) + return MMC5_RECTANGLE_OUTPUT; + + chan->accum -= mmc5.incsize; /* # of cycles per sample */ + if (chan->accum >= 0) + return MMC5_RECTANGLE_OUTPUT; + +#ifdef APU_OVERSAMPLE + num_times = total = 0; + + if (chan->fixed_envelope) + output = chan->volume << 8; /* fixed volume */ + else + output = (chan->env_vol ^ 0x0F) << 8; +#endif + + while (chan->accum < 0) + { + chan->accum += chan->freq; + chan->adder = (chan->adder + 1) & 0x0F; + +#ifdef APU_OVERSAMPLE + if (chan->adder < chan->duty_flip) + total += output; + else + total -= output; + + num_times++; +#endif + } + +#ifdef APU_OVERSAMPLE + chan->output_vol = total / num_times; +#else + if (chan->fixed_envelope) + output = chan->volume << 8; /* fixed volume */ + else + output = (chan->env_vol ^ 0x0F) << 8; + + if (0 == chan->adder) + chan->output_vol = output; + else if (chan->adder == chan->duty_flip) + chan->output_vol = -output; +#endif + + return MMC5_RECTANGLE_OUTPUT; +} + +static uint8 mmc5_read(uint32 address) +{ + uint32 retval; + + retval = (uint32) (mmc5.mul[0] * mmc5.mul[1]); + + switch (address) + { + case 0x5205: + return (uint8) retval; + + case 0x5206: + return (uint8) (retval >> 8); + + default: + return 0xFF; + } +} + +/* mix vrcvi sound channels together */ +static int32 mmc5_process(void) +{ + int32 accum; + + accum = mmc5_rectangle(&mmc5.rect[0]); + accum += mmc5_rectangle(&mmc5.rect[1]); + if (mmc5.dac.enabled) + accum += mmc5.dac.output; + + return accum; +} + +/* write to registers */ +static void mmc5_write(uint32 address, uint8 value) +{ + int chan; + + switch (address) + { + /* rectangles */ + case MMC5_WRA0: + case MMC5_WRB0: + chan = (address & 4) ? 1 : 0; + mmc5.rect[chan].regs[0] = value; + + mmc5.rect[chan].volume = value & 0x0F; + mmc5.rect[chan].env_delay = decay_lut[value & 0x0F]; + mmc5.rect[chan].holdnote = (value & 0x20) ? true : false; + mmc5.rect[chan].fixed_envelope = (value & 0x10) ? true : false; + mmc5.rect[chan].duty_flip = duty_lut[value >> 6]; + break; + + case MMC5_WRA1: + case MMC5_WRB1: + break; + + case MMC5_WRA2: + case MMC5_WRB2: + chan = (address & 4) ? 1 : 0; + mmc5.rect[chan].regs[2] = value; + if (mmc5.rect[chan].enabled) + mmc5.rect[chan].freq = (((mmc5.rect[chan].regs[3] & 7) << 8) + value) + 1; + break; + + case MMC5_WRA3: + case MMC5_WRB3: + chan = (address & 4) ? 1 : 0; + mmc5.rect[chan].regs[3] = value; + + if (mmc5.rect[chan].enabled) + { + mmc5.rect[chan].vbl_length = vbl_lut[value >> 3]; + mmc5.rect[chan].env_vol = 0; + mmc5.rect[chan].freq = (((value & 7) << 8) + mmc5.rect[chan].regs[2]) + 1; + mmc5.rect[chan].adder = 0; + } + break; + + case MMC5_SMASK: + if (value & 0x01) + { + mmc5.rect[0].enabled = true; + } + else + { + mmc5.rect[0].enabled = false; + mmc5.rect[0].vbl_length = 0; + } + + if (value & 0x02) + { + mmc5.rect[1].enabled = true; + } + else + { + mmc5.rect[1].enabled = false; + mmc5.rect[1].vbl_length = 0; + } + + break; + + case 0x5010: + if (value & 0x01) + mmc5.dac.enabled = true; + else + mmc5.dac.enabled = false; + break; + + case 0x5011: + mmc5.dac.output = (value ^ 0x80) << 8; + break; + + case 0x5205: + mmc5.mul[0] = value; + break; + + case 0x5206: + mmc5.mul[1] = value; + break; + + case 0x5114: + case 0x5115: + /* ???? */ + break; + + default: + break; + } +} + +/* reset state of vrcvi sound channels */ +static void mmc5_reset(void) +{ + int i; + apu_t apu; + + + /* get the phase period from the apu */ + apu_getcontext(&apu); + mmc5.incsize = apu.cycle_rate; + + for (i = 0x5000; i < 0x5008; i++) + mmc5_write(i, 0); + + mmc5_write(0x5010, 0); + mmc5_write(0x5011, 0); +} + +static int mmc5_init(void) +{ + int i, num_samples; + apu_t apu; + + apu_getcontext(&apu); + num_samples = apu.num_samples; + + /* lut used for enveloping and frequency sweeps */ + for (i = 0; i < 16; i++) + decay_lut[i] = num_samples * (i + 1); + + /* used for note length, based on vblanks and size of audio buffer */ + for (i = 0; i < 32; i++) + vbl_lut[i] = vbl_length[i] * num_samples; + + return 0; +} + +static const apu_memread mmc5_memread[] = +{ + { 0x5205, 0x5206, mmc5_read }, + { -1, -1, NULL } +}; + +static const apu_memwrite mmc5_memwrite[] = +{ + { 0x5000, 0x5015, mmc5_write }, + { 0x5114, 0x5115, mmc5_write }, + { 0x5205, 0x5206, mmc5_write }, + { -1, -1, NULL } +}; + +const apuext_t mmc5_ext = +{ + mmc5_init, + NULL, /* no shutdown */ + mmc5_reset, + mmc5_process, + mmc5_memread, + mmc5_memwrite +}; + +/* +** $Log: mmc5_snd.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.2 2000/11/13 00:57:08 matt +** doesn't look as nasty now +** +** Revision 1.1 2000/10/24 12:19:59 matt +** changed directory structure +** +** Revision 1.16 2000/10/17 11:56:42 matt +** selectable apu base frequency +** +** Revision 1.15 2000/10/10 14:04:29 matt +** make way for bjarne +** +** Revision 1.14 2000/10/10 13:58:18 matt +** stroustrup squeezing his way in the door +** +** Revision 1.13 2000/10/08 17:50:18 matt +** appears $5114/$5115 do something +** +** Revision 1.12 2000/10/03 11:56:20 matt +** better support for optional sound ext routines +** +** Revision 1.11 2000/09/27 12:26:03 matt +** changed sound accumulators back to floats +** +** Revision 1.10 2000/09/15 13:38:40 matt +** changes for optimized apu core +** +** Revision 1.9 2000/09/15 04:58:07 matt +** simplifying and optimizing APU core +** +** Revision 1.8 2000/07/30 04:32:59 matt +** no more apu_getcyclerate hack +** +** Revision 1.7 2000/07/17 01:52:31 matt +** made sure last line of all source files is a newline +** +** Revision 1.6 2000/07/04 04:51:41 matt +** cleanups +** +** Revision 1.5 2000/07/03 02:18:53 matt +** much better external module exporting +** +** Revision 1.4 2000/06/28 22:03:51 matt +** fixed stupid oversight +** +** Revision 1.3 2000/06/20 20:46:58 matt +** minor cleanups +** +** Revision 1.2 2000/06/20 04:06:16 matt +** migrated external sound definition to apu module +** +** Revision 1.1 2000/06/20 00:06:47 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/mmc5_snd.h b/MCUME_pico/piconofrendo/mmc5_snd.h new file mode 100644 index 0000000..1681611 --- /dev/null +++ b/MCUME_pico/piconofrendo/mmc5_snd.h @@ -0,0 +1,70 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** mmc5_snd.h +** +** Nintendo MMC5 sound emulation header +** $Id: mmc5_snd.h,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#ifndef _MMC5_SND_H_ +#define _MMC5_SND_H_ + +#include "nes_apu.h" + +extern const apuext_t mmc5_ext; + +#endif /* !_MMC5_SND_H_ */ + +/* +** $Log: mmc5_snd.h,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.2 2000/11/13 00:57:08 matt +** doesn't look as nasty now +** +** Revision 1.1 2000/10/24 12:19:59 matt +** changed directory structure +** +** Revision 1.6 2000/10/10 13:58:18 matt +** stroustrup squeezing his way in the door +** +** Revision 1.5 2000/09/27 12:26:03 matt +** changed sound accumulators back to floats +** +** Revision 1.4 2000/09/15 13:38:40 matt +** changes for optimized apu core +** +** Revision 1.3 2000/07/17 01:52:31 matt +** made sure last line of all source files is a newline +** +** Revision 1.2 2000/06/20 04:06:16 matt +** migrated external sound definition to apu module +** +** Revision 1.1 2000/06/20 00:06:47 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/mmclist.c b/MCUME_pico/piconofrendo/mmclist.c new file mode 100755 index 0000000..3e0d5e7 --- /dev/null +++ b/MCUME_pico/piconofrendo/mmclist.c @@ -0,0 +1,122 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** mmclist.c +** +** list of all mapper interfaces +** $Id: mmclist.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nes_mmc.h" + +/* mapper interfaces */ +extern mapintf_t map0_intf; +extern mapintf_t map1_intf; +extern mapintf_t map2_intf; +extern mapintf_t map3_intf; +extern mapintf_t map4_intf; +extern mapintf_t map5_intf; +extern mapintf_t map7_intf; +extern mapintf_t map8_intf; +extern mapintf_t map9_intf; +extern mapintf_t map11_intf; +extern mapintf_t map15_intf; +extern mapintf_t map16_intf; +extern mapintf_t map18_intf; +extern mapintf_t map19_intf; +extern mapintf_t map21_intf; +extern mapintf_t map22_intf; +extern mapintf_t map23_intf; +extern mapintf_t map24_intf; +extern mapintf_t map25_intf; +extern mapintf_t map32_intf; +extern mapintf_t map33_intf; +extern mapintf_t map34_intf; +extern mapintf_t map40_intf; +extern mapintf_t map64_intf; +extern mapintf_t map65_intf; +extern mapintf_t map66_intf; +extern mapintf_t map70_intf; +extern mapintf_t map75_intf; +extern mapintf_t map78_intf; +extern mapintf_t map79_intf; +extern mapintf_t map85_intf; +extern mapintf_t map94_intf; +extern mapintf_t map99_intf; +extern mapintf_t map231_intf; + +/* implemented mapper interfaces */ +const mapintf_t *mappers[] = +{ + &map0_intf, + &map1_intf, + &map2_intf, + &map3_intf, + &map4_intf, + &map5_intf, + &map7_intf, + &map8_intf, + &map9_intf, + &map11_intf, + &map15_intf, + &map16_intf, + &map18_intf, + &map19_intf, + &map21_intf, + &map22_intf, + &map23_intf, + &map24_intf, + &map25_intf, + &map32_intf, + &map33_intf, + &map34_intf, + &map40_intf, + &map64_intf, + &map65_intf, + &map66_intf, + &map70_intf, + &map75_intf, + &map78_intf, + &map79_intf, + &map85_intf, + &map94_intf, + &map99_intf, + &map231_intf, + NULL +}; + +/* +** $Log: mmclist.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.2 2000/10/10 13:05:30 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.1 2000/07/31 04:27:39 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/mmclist.h b/MCUME_pico/piconofrendo/mmclist.h new file mode 100755 index 0000000..da2ac93 --- /dev/null +++ b/MCUME_pico/piconofrendo/mmclist.h @@ -0,0 +1,49 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** mmclist.h +** +** list of all mapper interfaces +** $Id: mmclist.h,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#ifndef _MMCLIST_H_ +#define _MMCLIST_H_ + +#include "nes_mmc.h" + +extern mapintf_t *mappers[]; + +#endif /* !_MMCLIST_H_ */ + +/* +** $Log: mmclist.h,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.1 2000/07/31 04:27:40 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes.c b/MCUME_pico/piconofrendo/nes.c new file mode 100644 index 0000000..c707cf8 --- /dev/null +++ b/MCUME_pico/piconofrendo/nes.c @@ -0,0 +1,762 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes.c +** +** NES hardware related routines +** $Id: nes.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include +#include +#include +#include "noftypes.h" +#include "nes6502.h" +#include "log.h" +#include "osd.h" +#include "nes.h" +#include "nes_apu.h" +#include "nes_ppu.h" +#include "nes_rom.h" +#include "nes_mmc.h" +#include "vid_drv.h" +#include "nofrendo.h" + + +#define NES_CLOCK_DIVIDER 12 +//#define NES_MASTER_CLOCK 21477272.727272727272 +#define NES_MASTER_CLOCK (236250000 / 11) +#define NES_SCANLINE_CYCLES (1364.0 / NES_CLOCK_DIVIDER) +#define NES_FIQ_PERIOD (NES_MASTER_CLOCK / NES_CLOCK_DIVIDER / 60) + +#define NES_RAMSIZE 0x800 + +#define NES_SKIP_LIMIT (NES_REFRESH_RATE / 5) /* 12 or 10, depending on PAL/NTSC */ + +static nes_t nes; + +/* find out if a file is ours */ +int nes_isourfile(const char *filename) +{ + return rom_checkmagic(filename); +} + +/* TODO: just asking for problems -- please remove */ +nes_t *nes_getcontextptr(void) +{ + return &nes; +} + +void nes_getcontext(nes_t *machine) +{ + apu_getcontext(nes.apu); + ppu_getcontext(nes.ppu); + nes6502_getcontext(nes.cpu); + mmc_getcontext(nes.mmc); + + *machine = nes; +} + +void nes_setcontext(nes_t *machine) +{ + ASSERT(machine); + + apu_setcontext(machine->apu); + ppu_setcontext(machine->ppu); + nes6502_setcontext(machine->cpu); + mmc_setcontext(machine->mmc); + + nes = *machine; +} + +static uint8 ram_read(uint32 address) +{ + return nes.cpu->mem_page[0][address & (NES_RAMSIZE - 1)]; +} + +static void ram_write(uint32 address, uint8 value) +{ + nes.cpu->mem_page[0][address & (NES_RAMSIZE - 1)] = value; +} + +static void write_protect(uint32 address, uint8 value) +{ + /* don't allow write to go through */ + UNUSED(address); + UNUSED(value); +} + +static uint8 read_protect(uint32 address) +{ + /* don't allow read to go through */ + UNUSED(address); + + return 0xFF; +} + +#define LAST_MEMORY_HANDLER { -1, -1, NULL } +/* read/write handlers for standard NES */ +static const nes6502_memread default_readhandler[] = +{ + { 0x0800, 0x1FFF, ram_read }, + { 0x2000, 0x3FFF, ppu_read }, + { 0x4000, 0x4015, apu_read }, + { 0x4016, 0x4017, ppu_readhigh }, + LAST_MEMORY_HANDLER +}; + +static const nes6502_memwrite default_writehandler[] = +{ + { 0x0800, 0x1FFF, ram_write }, + { 0x2000, 0x3FFF, ppu_write }, + { 0x4000, 0x4013, apu_write }, + { 0x4015, 0x4015, apu_write }, + { 0x4014, 0x4017, ppu_writehigh }, + LAST_MEMORY_HANDLER +}; + +/* this big nasty boy sets up the address handlers that the CPU uses */ +static void build_address_handlers(nes_t *machine) +{ + int count, num_handlers = 0; + mapintf_t *intf; + + ASSERT(machine); + intf = machine->mmc->intf; + + memset(machine->readhandler, 0, sizeof(machine->readhandler)); + memset(machine->writehandler, 0, sizeof(machine->writehandler)); + + for (count = 0; num_handlers < MAX_MEM_HANDLERS; count++, num_handlers++) + { + if (NULL == default_readhandler[count].read_func) + break; + + memcpy(&machine->readhandler[num_handlers], &default_readhandler[count], + sizeof(nes6502_memread)); + } + + if (intf->sound_ext) + { + if (NULL != intf->sound_ext->mem_read) + { + for (count = 0; num_handlers < MAX_MEM_HANDLERS; count++, num_handlers++) + { + if (NULL == intf->sound_ext->mem_read[count].read_func) + break; + + memcpy(&machine->readhandler[num_handlers], &intf->sound_ext->mem_read[count], + sizeof(nes6502_memread)); + } + } + } + + if (NULL != intf->mem_read) + { + for (count = 0; num_handlers < MAX_MEM_HANDLERS; count++, num_handlers++) + { + if (NULL == intf->mem_read[count].read_func) + break; + + memcpy(&machine->readhandler[num_handlers], &intf->mem_read[count], + sizeof(nes6502_memread)); + } + } + + /* TODO: poof! numbers */ + machine->readhandler[num_handlers].min_range = 0x4018; + machine->readhandler[num_handlers].max_range = 0x5FFF; + machine->readhandler[num_handlers].read_func = read_protect; + num_handlers++; + machine->readhandler[num_handlers].min_range = -1; + machine->readhandler[num_handlers].max_range = -1; + machine->readhandler[num_handlers].read_func = NULL; + num_handlers++; + ASSERT(num_handlers <= MAX_MEM_HANDLERS); + + num_handlers = 0; + + for (count = 0; num_handlers < MAX_MEM_HANDLERS; count++, num_handlers++) + { + if (NULL == default_writehandler[count].write_func) + break; + + memcpy(&machine->writehandler[num_handlers], &default_writehandler[count], + sizeof(nes6502_memwrite)); + } + + if (intf->sound_ext) + { + if (NULL != intf->sound_ext->mem_write) + { + for (count = 0; num_handlers < MAX_MEM_HANDLERS; count++, num_handlers++) + { + if (NULL == intf->sound_ext->mem_write[count].write_func) + break; + + memcpy(&machine->writehandler[num_handlers], &intf->sound_ext->mem_write[count], + sizeof(nes6502_memwrite)); + } + } + } + + if (NULL != intf->mem_write) + { + for (count = 0; num_handlers < MAX_MEM_HANDLERS; count++, num_handlers++) + { + if (NULL == intf->mem_write[count].write_func) + break; + + memcpy(&machine->writehandler[num_handlers], &intf->mem_write[count], + sizeof(nes6502_memwrite)); + } + } + + /* catch-all for bad writes */ + /* TODO: poof! numbers */ + machine->writehandler[num_handlers].min_range = 0x4018; + machine->writehandler[num_handlers].max_range = 0x5FFF; + machine->writehandler[num_handlers].write_func = write_protect; + num_handlers++; + machine->writehandler[num_handlers].min_range = 0x8000; + machine->writehandler[num_handlers].max_range = 0xFFFF; + machine->writehandler[num_handlers].write_func = write_protect; + num_handlers++; + machine->writehandler[num_handlers].min_range = -1; + machine->writehandler[num_handlers].max_range = -1; + machine->writehandler[num_handlers].write_func = NULL; + num_handlers++; + ASSERT(num_handlers <= MAX_MEM_HANDLERS); +} + +/* raise an IRQ */ +void nes_irq(void) +{ + nes6502_irq(); +} + +static uint8 nes_clearfiq(void) +{ + if (nes.fiq_occurred) + { + nes.fiq_occurred = false; + return 0x40; + } + + return 0; +} + +void nes_setfiq(uint8 value) +{ + nes.fiq_state = value; + nes.fiq_cycles = (int) NES_FIQ_PERIOD; +} + +static void nes_checkfiq(int cycles) +{ + nes.fiq_cycles -= cycles; + if (nes.fiq_cycles <= 0) + { + nes.fiq_cycles += (int) NES_FIQ_PERIOD; + if (0 == (nes.fiq_state & 0xC0)) + { + nes.fiq_occurred = true; + nes6502_irq(); + } + } +} + +void nes_nmi(void) +{ + nes6502_nmi(); +} + +static void nes_renderframe(bool draw_flag) +{ + int elapsed_cycles; + mapintf_t *mapintf = nes.mmc->intf; + int in_vblank = 0; + + while (262 != nes.scanline) + { +// ppu_scanline(nes.vidbuf, nes.scanline, draw_flag); + ppu_scanline(vid_getbuffer(), nes.scanline, draw_flag); + + if (241 == nes.scanline) + { + /* 7-9 cycle delay between when VINT flag goes up and NMI is taken */ + elapsed_cycles = nes6502_execute(7); + nes.scanline_cycles -= elapsed_cycles; + nes_checkfiq(elapsed_cycles); + + ppu_checknmi(); + + if (mapintf->vblank) + mapintf->vblank(); + in_vblank = 1; + } + + if (mapintf->hblank) + mapintf->hblank(in_vblank); + + nes.scanline_cycles += (float) NES_SCANLINE_CYCLES; + elapsed_cycles = nes6502_execute((int) nes.scanline_cycles); + nes.scanline_cycles -= (float) elapsed_cycles; + nes_checkfiq(elapsed_cycles); + + ppu_endscanline(nes.scanline); + nes.scanline++; + } + + nes.scanline = 0; +} + +static void system_video(bool draw) +{ + +#ifdef NOLOOP +#else +#endif + /* blit to screen */ + vid_flush(); + + /* grab input */ + osd_getinput(); +} + +/* main emulation loop */ +static int last_ticks, frames_to_render; +void nes_emulate(void) +{ + osd_setsound(nes.apu->process); + + last_ticks = nofrendo_ticks; + frames_to_render = 0; + nes.scanline_cycles = 0; + nes.fiq_cycles = (int) NES_FIQ_PERIOD; +#ifdef NOLOOP +#else + while (false == nes.poweroff) + { + if (nofrendo_ticks != last_ticks) + { + int tick_diff = nofrendo_ticks - last_ticks; + + frames_to_render += tick_diff; + last_ticks = nofrendo_ticks; + } + + if (true == nes.pause) + { + /* TODO: dim the screen, and pause/silence the apu */ + system_video(true); + frames_to_render = 0; + } + else if (frames_to_render > 1) + { + frames_to_render--; + nes_renderframe(false); + system_video(false); + } + else if ((1 == frames_to_render && true == nes.autoframeskip) + || false == nes.autoframeskip) + { + frames_to_render = 0; + nes_renderframe(true); + system_video(true); + } + } +#endif +} + +//ADD ON +#ifdef NOLOOP +void nes_step(int skip) +{ + if (skip) { + nes_renderframe(false); + system_video(false); + } + else { + nes_renderframe(true); + system_video(true); + } + +} +#endif + +static void mem_trash(uint8 *buffer, int length) +{ + int i; + + for (i = 0; i < length; i++) + buffer[i] = (uint8) rand(); +} + +/* Reset NES hardware */ +void nes_reset(int reset_type) +{ + if (HARD_RESET == reset_type) + { + memset(nes.cpu->mem_page[0], 0, NES_RAMSIZE); + if (nes.rominfo->vram) + mem_trash(nes.rominfo->vram, 0x2000 * nes.rominfo->vram_banks); + } + + apu_reset(); + ppu_reset(reset_type); + mmc_reset(); + nes6502_reset(); + + nes.scanline = 241; +} + +void nes_destroy(nes_t **machine) +{ + if (*machine) + { + rom_free(&(*machine)->rominfo); + mmc_destroy(&(*machine)->mmc); + ppu_destroy(&(*machine)->ppu); + apu_destroy(&(*machine)->apu); +// bmp_destroy(&(*machine)->vidbuf); + if ((*machine)->cpu) + { + if ((*machine)->cpu->mem_page[0]) + free((*machine)->cpu->mem_page[0]); + free((*machine)->cpu); + } + + free(*machine); + *machine = NULL; + } +} + +void nes_poweroff(void) +{ + nes.poweroff = true; +} + +void nes_togglepause(void) +{ + nes.pause ^= true; +} + +/* insert a cart into the NES */ +int nes_insertcart(const char *filename, nes_t *machine) +{ + nes6502_setcontext(machine->cpu); + /* rom file */ + machine->rominfo = rom_load(filename); + if (NULL == machine->rominfo) + goto _fail; + /* map cart's SRAM to CPU $6000-$7FFF */ + if (machine->rominfo->sram) + { + machine->cpu->mem_page[6] = machine->rominfo->sram; + machine->cpu->mem_page[7] = machine->rominfo->sram + 0x1000; + } + /* mapper */ + machine->mmc = mmc_create(machine->rominfo); + if (NULL == machine->mmc) + goto _fail; + + /* if there's VRAM, let the PPU know */ + if (NULL != machine->rominfo->vram) + machine->ppu->vram_present = true; + apu_setext(machine->apu, machine->mmc->intf->sound_ext); + build_address_handlers(machine); + nes_setcontext(machine); + nes_reset(HARD_RESET); + + return 0; + +_fail: + nes_destroy(&machine); + return -1; +} + + +/* Initialize NES CPU, hardware, etc. */ +nes_t *nes_create(void) +{ + nes_t *machine; + sndinfo_t osd_sound; + int i; + + machine = malloc(sizeof(nes_t)); + if (NULL == machine) + return NULL; + + memset(machine, 0, sizeof(nes_t)); + + /* bitmap */ + /* 8 pixel overdraw */ +// machine->vidbuf = bmp_create(NES_SCREEN_WIDTH, NES_SCREEN_HEIGHT, 8); +// if (NULL == machine->vidbuf) +// goto _fail; + + machine->autoframeskip = true; + + /* cpu */ + machine->cpu = malloc(sizeof(nes6502_context)); + if (NULL == machine->cpu) + goto _fail; + + memset(machine->cpu, 0, sizeof(nes6502_context)); + + /* allocate 2kB RAM */ + machine->cpu->mem_page[0] = malloc(NES_RAMSIZE); + if (NULL == machine->cpu->mem_page[0]) + goto _fail; + + /* point all pages at NULL for now */ + for (i = 1; i < NES6502_NUMBANKS; i++) + machine->cpu->mem_page[i] = NULL; + + machine->cpu->read_handler = machine->readhandler; + machine->cpu->write_handler = machine->writehandler; + + /* apu */ + osd_getsoundinfo(&osd_sound); + machine->apu = apu_create(0, osd_sound.sample_rate, NES_REFRESH_RATE, osd_sound.bps); + + if (NULL == machine->apu) + goto _fail; + + /* set the IRQ routines */ + machine->apu->irq_callback = nes_irq; + machine->apu->irqclear_callback = nes_clearfiq; + + /* ppu */ + machine->ppu = ppu_create(); + if (NULL == machine->ppu) + goto _fail; + + machine->poweroff = false; + machine->pause = false; + + return machine; + +_fail: + nes_destroy(&machine); + return NULL; +} + +/* +** $Log: nes.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.18 2000/11/29 12:58:23 matt +** timing/fiq fixes +** +** Revision 1.17 2000/11/27 19:36:15 matt +** more timing fixes +** +** Revision 1.16 2000/11/26 16:13:13 matt +** slight fix (?) to nes_fiq +** +** Revision 1.15 2000/11/26 15:51:13 matt +** frame IRQ emulation +** +** Revision 1.14 2000/11/25 20:30:39 matt +** scanline emulation simplifications/timing fixes +** +** Revision 1.13 2000/11/25 01:53:42 matt +** bool stinks sometimes +** +** Revision 1.12 2000/11/21 13:28:40 matt +** take care to zero allocated mem +** +** Revision 1.11 2000/11/20 13:23:32 matt +** nofrendo.c now handles timer +** +** Revision 1.10 2000/11/09 14:07:27 matt +** state load fixed, state save mostly fixed +** +** Revision 1.9 2000/11/05 22:19:37 matt +** pause buglet fixed +** +** Revision 1.8 2000/11/05 06:27:09 matt +** thinlib spawns changes +** +** Revision 1.7 2000/10/29 14:36:45 matt +** nes_clearframeirq is static +** +** Revision 1.6 2000/10/28 15:20:41 matt +** irq callbacks in nes_apu +** +** Revision 1.5 2000/10/27 12:55:58 matt +** nes6502 now uses 4kB banks across the boards +** +** Revision 1.4 2000/10/25 13:44:02 matt +** no more silly define names +** +** Revision 1.3 2000/10/25 01:23:08 matt +** basic system autodetection +** +** Revision 1.2 2000/10/25 00:23:16 matt +** makefiles updated for new directory structure +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.50 2000/10/23 17:51:09 matt +** adding fds support +** +** Revision 1.49 2000/10/23 15:53:08 matt +** better system handling +** +** Revision 1.48 2000/10/22 20:02:29 matt +** autoframeskip bugfix +** +** Revision 1.47 2000/10/22 19:16:15 matt +** more sane timer ISR / autoframeskip +** +** Revision 1.46 2000/10/21 19:26:59 matt +** many more cleanups +** +** Revision 1.45 2000/10/17 12:00:56 matt +** selectable apu base frequency +** +** Revision 1.44 2000/10/10 13:58:14 matt +** stroustrup squeezing his way in the door +** +** Revision 1.43 2000/10/10 13:05:30 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.42 2000/10/08 17:53:37 matt +** minor accuracy changes +** +** Revision 1.41 2000/09/18 02:09:12 matt +** -pedantic is your friend +** +** Revision 1.40 2000/09/15 13:38:39 matt +** changes for optimized apu core +** +** Revision 1.39 2000/09/15 04:58:07 matt +** simplifying and optimizing APU core +** +** Revision 1.38 2000/09/08 11:57:29 matt +** no more nes_fiq +** +** Revision 1.37 2000/08/31 02:39:01 matt +** moved dos stuff in here (temp) +** +** Revision 1.36 2000/08/16 02:51:55 matt +** random cleanups +** +** Revision 1.35 2000/08/11 02:43:50 matt +** moved frame irq stuff out of APU into here +** +** Revision 1.34 2000/08/11 01:42:43 matt +** change to OSD sound info interface +** +** Revision 1.33 2000/07/31 04:27:59 matt +** one million cleanups +** +** Revision 1.32 2000/07/30 04:32:32 matt +** emulation of the NES frame IRQ +** +** Revision 1.31 2000/07/27 04:07:14 matt +** cleaned up the neighborhood lawns +** +** Revision 1.30 2000/07/27 03:59:52 neil +** pausing tweaks, during fullscreen toggles +** +** Revision 1.29 2000/07/27 03:19:22 matt +** just a little cleaner, that's all +** +** Revision 1.28 2000/07/27 02:55:23 matt +** nes_emulate went through detox +** +** Revision 1.27 2000/07/27 02:49:18 matt +** cleaner flow in nes_emulate +** +** Revision 1.26 2000/07/27 01:17:09 matt +** nes_insertrom -> nes_insertcart +** +** Revision 1.25 2000/07/26 21:36:14 neil +** Big honkin' change -- see the mailing list +** +** Revision 1.24 2000/07/25 02:25:53 matt +** safer xxx_destroy calls +** +** Revision 1.23 2000/07/24 04:32:40 matt +** autoframeskip bugfix +** +** Revision 1.22 2000/07/23 15:13:48 matt +** apu API change, autoframeskip part of nes_t struct +** +** Revision 1.21 2000/07/21 02:44:41 matt +** merged osd_getinput and osd_gethostinput +** +** Revision 1.20 2000/07/17 05:12:55 matt +** nes_ppu.c is no longer a scary place to be-- cleaner & faster +** +** Revision 1.19 2000/07/17 01:52:28 matt +** made sure last line of all source files is a newline +** +** Revision 1.18 2000/07/15 23:51:23 matt +** hack for certain filthy NES titles +** +** Revision 1.17 2000/07/11 04:31:54 matt +** less magic number nastiness for screen dimensions +** +** Revision 1.16 2000/07/11 02:38:25 matt +** encapsulated memory address handlers into nes/nsf +** +** Revision 1.15 2000/07/10 13:50:49 matt +** added function nes_irq() +** +** Revision 1.14 2000/07/10 05:27:55 matt +** cleaned up mapper-specific callbacks +** +** Revision 1.13 2000/07/09 03:43:26 matt +** minor changes to gui handling +** +** Revision 1.12 2000/07/06 16:42:23 matt +** updated for new video driver +** +** Revision 1.11 2000/07/05 19:57:36 neil +** __GNUC -> __DJGPP in nes.c +** +** Revision 1.10 2000/07/05 12:23:03 matt +** removed unnecessary references +** +** Revision 1.9 2000/07/04 23:12:34 matt +** memory protection handlers +** +** Revision 1.8 2000/07/04 04:58:29 matt +** dynamic memory range handlers +** +** Revision 1.7 2000/06/26 04:58:51 matt +** minor bugfix +** +** Revision 1.6 2000/06/20 20:42:12 matt +** fixed some NULL pointer problems +** +** Revision 1.5 2000/06/09 15:12:26 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes.h b/MCUME_pico/piconofrendo/nes.h new file mode 100755 index 0000000..dca6d69 --- /dev/null +++ b/MCUME_pico/piconofrendo/nes.h @@ -0,0 +1,221 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes.h +** +** NES hardware related definitions / prototypes +** $Id: nes.h,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#ifndef _NES_H_ +#define _NES_H_ + +#include "noftypes.h" +#include "nes_apu.h" +#include "nes_mmc.h" +#include "nes_ppu.h" +#include "nes_rom.h" +#include "nes6502.h" +#include "bitmap.h" + +/* Visible (NTSC) screen height */ +#ifndef NES_VISIBLE_HEIGHT +#define NES_VISIBLE_HEIGHT 224 +#endif /* !NES_VISIBLE_HEIGHT */ +#define NES_SCREEN_WIDTH 256 +#define NES_SCREEN_HEIGHT 240 + +/* NTSC = 60Hz, PAL = 50Hz */ +#ifdef PAL +#define NES_REFRESH_RATE 50 +#else /* !PAL */ +#define NES_REFRESH_RATE 60 +#endif /* !PAL */ + +#define MAX_MEM_HANDLERS 32 + +enum +{ + SOFT_RESET, + HARD_RESET +}; + + +typedef struct nes_s +{ + /* hardware things */ + nes6502_context *cpu; + nes6502_memread readhandler[MAX_MEM_HANDLERS]; + nes6502_memwrite writehandler[MAX_MEM_HANDLERS]; + + ppu_t *ppu; + apu_t *apu; + mmc_t *mmc; + rominfo_t *rominfo; + + /* video buffer */ + /* For the ESP32, it costs too much memory to render to a separate buffer and blit that to the main buffer. + Instead, the code has been modified to directly grab the primary buffer from the video subsystem and render + there, saving us about 64K of memory. */ +// bitmap_t *vidbuf; + + bool fiq_occurred; + uint8 fiq_state; + int fiq_cycles; + + int scanline; + + /* Timing stuff */ + float scanline_cycles; + bool autoframeskip; + + /* control */ + bool poweroff; + bool pause; + +} nes_t; + + +extern int nes_isourfile(const char *filename); + +/* temp hack */ +extern nes_t *nes_getcontextptr(void); + +/* Function prototypes */ +extern void nes_getcontext(nes_t *machine); +extern void nes_setcontext(nes_t *machine); + +extern nes_t *nes_create(void); +extern void nes_destroy(nes_t **machine); +extern int nes_insertcart(const char *filename, nes_t *machine); + +extern void nes_setfiq(uint8 state); +extern void nes_nmi(void); +extern void nes_irq(void); +extern void nes_emulate(void); + +extern void nes_reset(int reset_type); + +extern void nes_poweroff(void); +extern void nes_togglepause(void); + +#endif /* _NES_H_ */ + +/* +** $Log: nes.h,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.8 2000/11/26 15:51:13 matt +** frame IRQ emulation +** +** Revision 1.7 2000/11/25 20:30:39 matt +** scanline emulation simplifications/timing fixes +** +** Revision 1.6 2000/11/25 01:52:17 matt +** bool stinks sometimes +** +** Revision 1.5 2000/11/09 14:07:28 matt +** state load fixed, state save mostly fixed +** +** Revision 1.4 2000/10/29 14:36:45 matt +** nes_clearframeirq is static +** +** Revision 1.3 2000/10/25 01:23:08 matt +** basic system autodetection +** +** Revision 1.2 2000/10/25 00:23:16 matt +** makefiles updated for new directory structure +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.26 2000/10/23 17:51:10 matt +** adding fds support +** +** Revision 1.25 2000/10/23 15:53:08 matt +** better system handling +** +** Revision 1.24 2000/10/22 19:16:15 matt +** more sane timer ISR / autoframeskip +** +** Revision 1.23 2000/10/21 19:26:59 matt +** many more cleanups +** +** Revision 1.22 2000/10/10 13:58:15 matt +** stroustrup squeezing his way in the door +** +** Revision 1.21 2000/10/08 17:53:36 matt +** minor accuracy changes +** +** Revision 1.20 2000/09/15 04:58:07 matt +** simplifying and optimizing APU core +** +** Revision 1.19 2000/09/08 11:57:29 matt +** no more nes_fiq +** +** Revision 1.18 2000/08/11 02:43:50 matt +** moved frame irq stuff out of APU into here +** +** Revision 1.17 2000/07/31 04:27:59 matt +** one million cleanups +** +** Revision 1.16 2000/07/30 04:32:32 matt +** emulation of the NES frame IRQ +** +** Revision 1.15 2000/07/27 01:17:09 matt +** nes_insertrom -> nes_insertcart +** +** Revision 1.14 2000/07/26 21:36:16 neil +** Big honkin' change -- see the mailing list +** +** Revision 1.13 2000/07/25 02:25:53 matt +** safer xxx_destroy calls +** +** Revision 1.12 2000/07/23 15:13:13 matt +** autoframeskip is now a member variable of nes_t +** +** Revision 1.11 2000/07/17 05:12:55 matt +** nes_ppu.c is no longer a scary place to be-- cleaner & faster +** +** Revision 1.10 2000/07/17 01:52:28 matt +** made sure last line of all source files is a newline +** +** Revision 1.9 2000/07/16 09:48:58 neil +** Make visible height compile-time configurable in the Makefile +** +** Revision 1.8 2000/07/11 04:31:55 matt +** less magic number nastiness for screen dimensions +** +** Revision 1.7 2000/07/11 02:40:36 matt +** forgot to remove framecounter +** +** Revision 1.6 2000/07/11 02:38:25 matt +** encapsulated memory address handlers into nes/nsf +** +** Revision 1.5 2000/07/10 13:50:50 matt +** added function nes_irq() +** +** Revision 1.4 2000/06/09 15:12:26 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes6502.c b/MCUME_pico/piconofrendo/nes6502.c new file mode 100644 index 0000000..db2ee64 --- /dev/null +++ b/MCUME_pico/piconofrendo/nes6502.c @@ -0,0 +1,2573 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes6502.c +** +** NES custom 6502 (2A03) CPU implementation +** $Id: nes6502.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + + +#include "noftypes.h" +#include "nes6502.h" +//#include "dis6502.h" + +//#define NES6502_DISASM + +#ifdef __GNUC__ +#define NES6502_JUMPTABLE +#endif /* __GNUC__ */ + + +#define ADD_CYCLES(x) \ +{ \ + remaining_cycles -= (x); \ + cpu.total_cycles += (x); \ +} + +/* +** Check to see if an index reg addition overflowed to next page +*/ +#define PAGE_CROSS_CHECK(addr, reg) \ +{ \ + if ((reg) > (uint8) (addr)) \ + ADD_CYCLES(1); \ +} + +#define EMPTY_READ(value) /* empty */ + +/* +** Addressing mode macros +*/ + +/* Immediate */ +#define IMMEDIATE_BYTE(value) \ +{ \ + value = bank_readbyte(PC++); \ +} + +/* Absolute */ +#define ABSOLUTE_ADDR(address) \ +{ \ + address = bank_readword(PC); \ + PC += 2; \ +} + +#define ABSOLUTE(address, value) \ +{ \ + ABSOLUTE_ADDR(address); \ + value = mem_readbyte(address); \ +} + +#define ABSOLUTE_BYTE(value) \ +{ \ + ABSOLUTE(temp, value); \ +} + +/* Absolute indexed X */ +#define ABS_IND_X_ADDR(address) \ +{ \ + ABSOLUTE_ADDR(address); \ + address = (address + X) & 0xFFFF; \ +} + +#define ABS_IND_X(address, value) \ +{ \ + ABS_IND_X_ADDR(address); \ + value = mem_readbyte(address); \ +} + +#define ABS_IND_X_BYTE(value) \ +{ \ + ABS_IND_X(temp, value); \ +} + +/* special page-cross check version for read instructions */ +#define ABS_IND_X_BYTE_READ(value) \ +{ \ + ABS_IND_X_ADDR(temp); \ + PAGE_CROSS_CHECK(temp, X); \ + value = mem_readbyte(temp); \ +} + +/* Absolute indexed Y */ +#define ABS_IND_Y_ADDR(address) \ +{ \ + ABSOLUTE_ADDR(address); \ + address = (address + Y) & 0xFFFF; \ +} + +#define ABS_IND_Y(address, value) \ +{ \ + ABS_IND_Y_ADDR(address); \ + value = mem_readbyte(address); \ +} + +#define ABS_IND_Y_BYTE(value) \ +{ \ + ABS_IND_Y(temp, value); \ +} + +/* special page-cross check version for read instructions */ +#define ABS_IND_Y_BYTE_READ(value) \ +{ \ + ABS_IND_Y_ADDR(temp); \ + PAGE_CROSS_CHECK(temp, Y); \ + value = mem_readbyte(temp); \ +} + +/* Zero-page */ +#define ZERO_PAGE_ADDR(address) \ +{ \ + IMMEDIATE_BYTE(address); \ +} + +#define ZERO_PAGE(address, value) \ +{ \ + ZERO_PAGE_ADDR(address); \ + value = ZP_READBYTE(address); \ +} + +#define ZERO_PAGE_BYTE(value) \ +{ \ + ZERO_PAGE(btemp, value); \ +} + +/* Zero-page indexed X */ +#define ZP_IND_X_ADDR(address) \ +{ \ + ZERO_PAGE_ADDR(address); \ + address += X; \ +} + +#define ZP_IND_X(address, value) \ +{ \ + ZP_IND_X_ADDR(address); \ + value = ZP_READBYTE(address); \ +} + +#define ZP_IND_X_BYTE(value) \ +{ \ + ZP_IND_X(btemp, value); \ +} + +/* Zero-page indexed Y */ +/* Not really an adressing mode, just for LDx/STx */ +#define ZP_IND_Y_ADDR(address) \ +{ \ + ZERO_PAGE_ADDR(address); \ + address += Y; \ +} + +#define ZP_IND_Y_BYTE(value) \ +{ \ + ZP_IND_Y_ADDR(btemp); \ + value = ZP_READBYTE(btemp); \ +} + +/* Indexed indirect */ +#define INDIR_X_ADDR(address) \ +{ \ + ZERO_PAGE_ADDR(btemp); \ + btemp += X; \ + address = zp_readword(btemp); \ +} + +#define INDIR_X(address, value) \ +{ \ + INDIR_X_ADDR(address); \ + value = mem_readbyte(address); \ +} + +#define INDIR_X_BYTE(value) \ +{ \ + INDIR_X(temp, value); \ +} + +/* Indirect indexed */ +#define INDIR_Y_ADDR(address) \ +{ \ + ZERO_PAGE_ADDR(btemp); \ + address = (zp_readword(btemp) + Y) & 0xFFFF; \ +} + +#define INDIR_Y(address, value) \ +{ \ + INDIR_Y_ADDR(address); \ + value = mem_readbyte(address); \ +} + +#define INDIR_Y_BYTE(value) \ +{ \ + INDIR_Y(temp, value); \ +} + +/* special page-cross check version for read instructions */ +#define INDIR_Y_BYTE_READ(value) \ +{ \ + INDIR_Y_ADDR(temp); \ + PAGE_CROSS_CHECK(temp, Y); \ + value = mem_readbyte(temp); \ +} + + + +/* Stack push/pull */ +#define PUSH(value) stack[S--] = (uint8) (value) +#define PULL() stack[++S] + + +/* +** flag register helper macros +*/ + +/* Theory: Z and N flags are set in just about every +** instruction, so we will just store the value in those +** flag variables, and mask out the irrelevant data when +** we need to check them (branches, etc). This makes the +** zero flag only really be 'set' when z_flag == 0. +** The rest of the flags are stored as true booleans. +*/ + +/* Scatter flags to separate variables */ +#define SCATTER_FLAGS(value) \ +{ \ + n_flag = (value) & N_FLAG; \ + v_flag = (value) & V_FLAG; \ + b_flag = (value) & B_FLAG; \ + d_flag = (value) & D_FLAG; \ + i_flag = (value) & I_FLAG; \ + z_flag = (0 == ((value) & Z_FLAG)); \ + c_flag = (value) & C_FLAG; \ +} + +/* Combine flags into flag register */ +#define COMBINE_FLAGS() \ +( \ + (n_flag & N_FLAG) \ + | (v_flag ? V_FLAG : 0) \ + | R_FLAG \ + | (b_flag ? B_FLAG : 0) \ + | (d_flag ? D_FLAG : 0) \ + | (i_flag ? I_FLAG : 0) \ + | (z_flag ? 0 : Z_FLAG) \ + | c_flag \ +) + +/* Set N and Z flags based on given value */ +#define SET_NZ_FLAGS(value) n_flag = z_flag = (value); + +/* For BCC, BCS, BEQ, BMI, BNE, BPL, BVC, BVS */ +#define RELATIVE_BRANCH(condition) \ +{ \ + if (condition) \ + { \ + IMMEDIATE_BYTE(btemp); \ + if (((int8) btemp + (PC & 0x00FF)) & 0x100) \ + ADD_CYCLES(1); \ + ADD_CYCLES(3); \ + PC += (int8) btemp; \ + } \ + else \ + { \ + PC++; \ + ADD_CYCLES(2); \ + } \ +} + +#define JUMP(address) \ +{ \ + PC = bank_readword((address)); \ +} + +/* +** Interrupt macros +*/ +#define NMI_PROC() \ +{ \ + PUSH(PC >> 8); \ + PUSH(PC & 0xFF); \ + b_flag = 0; \ + PUSH(COMBINE_FLAGS()); \ + i_flag = 1; \ + JUMP(NMI_VECTOR); \ +} + +#define IRQ_PROC() \ +{ \ + PUSH(PC >> 8); \ + PUSH(PC & 0xFF); \ + b_flag = 0; \ + PUSH(COMBINE_FLAGS()); \ + i_flag = 1; \ + JUMP(IRQ_VECTOR); \ +} + +/* +** Instruction macros +*/ + +/* Warning! NES CPU has no decimal mode, so by default this does no BCD! */ +#ifdef NES6502_DECIMAL +#define ADC(cycles, read_func) \ +{ \ + read_func(data); \ + if (d_flag) \ + { \ + temp = (A & 0x0F) + (data & 0x0F) + c_flag; \ + if (temp >= 10) \ + temp = (temp - 10) | 0x10; \ + temp += (A & 0xF0) + (data & 0xF0); \ + z_flag = (A + data + c_flag) & 0xFF; \ + n_flag = temp; \ + v_flag = ((~(A ^ data)) & (A ^ temp) & 0x80); \ + if (temp > 0x90) \ + { \ + temp += 0x60; \ + c_flag = 1; \ + } \ + else \ + { \ + c_flag = 0; \ + } \ + A = (uint8) temp; \ + } \ + else \ + { \ + temp = A + data + c_flag; \ + c_flag = (temp >> 8) & 1; \ + v_flag = ((~(A ^ data)) & (A ^ temp) & 0x80); \ + A = (uint8) temp; \ + SET_NZ_FLAGS(A); \ + }\ + ADD_CYCLES(cycles); \ +} +#else +#define ADC(cycles, read_func) \ +{ \ + read_func(data); \ + temp = A + data + c_flag; \ + c_flag = (temp >> 8) & 1; \ + v_flag = ((~(A ^ data)) & (A ^ temp) & 0x80); \ + A = (uint8) temp; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} +#endif /* NES6502_DECIMAL */ + +/* undocumented */ +#define ANC(cycles, read_func) \ +{ \ + read_func(data); \ + A &= data; \ + c_flag = (n_flag & N_FLAG) >> 7; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} + +#define AND(cycles, read_func) \ +{ \ + read_func(data); \ + A &= data; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} + +/* undocumented */ +#define ANE(cycles, read_func) \ +{ \ + read_func(data); \ + A = (A | 0xEE) & X & data; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} + +/* undocumented */ +#ifdef NES6502_DECIMAL +#define ARR(cycles, read_func) \ +{ \ + read_func(data); \ + data &= A; \ + if (d_flag) \ + { \ + temp = (data >> 1) | (c_flag << 7); \ + SET_NZ_FLAGS(temp); \ + v_flag = (temp ^ data) & 0x40; \ + if (((data & 0x0F) + (data & 0x01)) > 5) \ + temp = (temp & 0xF0) | ((temp + 0x6) & 0x0F); \ + if (((data & 0xF0) + (data & 0x10)) > 0x50) \ + { \ + temp = (temp & 0x0F) | ((temp + 0x60) & 0xF0); \ + c_flag = 1; \ + } \ + else \ + { \ + c_flag = 0; \ + } \ + A = (uint8) temp; \ + } \ + else \ + { \ + A = (data >> 1) | (c_flag << 7); \ + SET_NZ_FLAGS(A); \ + c_flag = (A & 0x40) >> 6; \ + v_flag = ((A >> 6) ^ (A >> 5)) & 1; \ + }\ + ADD_CYCLES(cycles); \ +} +#else +#define ARR(cycles, read_func) \ +{ \ + read_func(data); \ + data &= A; \ + A = (data >> 1) | (c_flag << 7); \ + SET_NZ_FLAGS(A); \ + c_flag = (A & 0x40) >> 6; \ + v_flag = ((A >> 6) ^ (A >> 5)) & 1; \ + ADD_CYCLES(cycles); \ +} +#endif /* NES6502_DECIMAL */ + +#define ASL(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr, data); \ + c_flag = data >> 7; \ + data <<= 1; \ + write_func(addr, data); \ + SET_NZ_FLAGS(data); \ + ADD_CYCLES(cycles); \ +} + +#define ASL_A() \ +{ \ + c_flag = A >> 7; \ + A <<= 1; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(2); \ +} + +/* undocumented */ +#define ASR(cycles, read_func) \ +{ \ + read_func(data); \ + data &= A; \ + c_flag = data & 1; \ + A = data >> 1; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} + +#define BCC() \ +{ \ + RELATIVE_BRANCH(0 == c_flag); \ +} + +#define BCS() \ +{ \ + RELATIVE_BRANCH(0 != c_flag); \ +} + +#define BEQ() \ +{ \ + RELATIVE_BRANCH(0 == z_flag); \ +} + +/* bit 7/6 of data move into N/V flags */ +#define BIT(cycles, read_func) \ +{ \ + read_func(data); \ + n_flag = data; \ + v_flag = data & V_FLAG; \ + z_flag = data & A; \ + ADD_CYCLES(cycles); \ +} + +#define BMI() \ +{ \ + RELATIVE_BRANCH(n_flag & N_FLAG); \ +} + +#define BNE() \ +{ \ + RELATIVE_BRANCH(0 != z_flag); \ +} + +#define BPL() \ +{ \ + RELATIVE_BRANCH(0 == (n_flag & N_FLAG)); \ +} + +/* Software interrupt type thang */ +#define BRK() \ +{ \ + PC++; \ + PUSH(PC >> 8); \ + PUSH(PC & 0xFF); \ + b_flag = 1; \ + PUSH(COMBINE_FLAGS()); \ + i_flag = 1; \ + JUMP(IRQ_VECTOR); \ + ADD_CYCLES(7); \ +} + +#define BVC() \ +{ \ + RELATIVE_BRANCH(0 == v_flag); \ +} + +#define BVS() \ +{ \ + RELATIVE_BRANCH(0 != v_flag); \ +} + +#define CLC() \ +{ \ + c_flag = 0; \ + ADD_CYCLES(2); \ +} + +#define CLD() \ +{ \ + d_flag = 0; \ + ADD_CYCLES(2); \ +} + +#define CLI() \ +{ \ + i_flag = 0; \ + ADD_CYCLES(2); \ + if (cpu.int_pending && remaining_cycles > 0) \ + { \ + cpu.int_pending = 0; \ + IRQ_PROC(); \ + ADD_CYCLES(INT_CYCLES); \ + } \ +} + +#define CLV() \ +{ \ + v_flag = 0; \ + ADD_CYCLES(2); \ +} + +/* C is clear when data > A */ +#define _COMPARE(reg, value) \ +{ \ + temp = (reg) - (value); \ + c_flag = ((temp & 0x100) >> 8) ^ 1; \ + SET_NZ_FLAGS((uint8) temp); \ +} + +#define CMP(cycles, read_func) \ +{ \ + read_func(data); \ + _COMPARE(A, data); \ + ADD_CYCLES(cycles); \ +} + +#define CPX(cycles, read_func) \ +{ \ + read_func(data); \ + _COMPARE(X, data); \ + ADD_CYCLES(cycles); \ +} + +#define CPY(cycles, read_func) \ +{ \ + read_func(data); \ + _COMPARE(Y, data); \ + ADD_CYCLES(cycles); \ +} + +/* undocumented */ +#define DCP(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr, data); \ + data--; \ + write_func(addr, data); \ + CMP(cycles, EMPTY_READ); \ +} + +#define DEC(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr, data); \ + data--; \ + write_func(addr, data); \ + SET_NZ_FLAGS(data); \ + ADD_CYCLES(cycles); \ +} + +#define DEX() \ +{ \ + X--; \ + SET_NZ_FLAGS(X); \ + ADD_CYCLES(2); \ +} + +#define DEY() \ +{ \ + Y--; \ + SET_NZ_FLAGS(Y); \ + ADD_CYCLES(2); \ +} + +/* undocumented (double-NOP) */ +#define DOP(cycles) \ +{ \ + PC++; \ + ADD_CYCLES(cycles); \ +} + +#define EOR(cycles, read_func) \ +{ \ + read_func(data); \ + A ^= data; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} + +#define INC(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr, data); \ + data++; \ + write_func(addr, data); \ + SET_NZ_FLAGS(data); \ + ADD_CYCLES(cycles); \ +} + +#define INX() \ +{ \ + X++; \ + SET_NZ_FLAGS(X); \ + ADD_CYCLES(2); \ +} + +#define INY() \ +{ \ + Y++; \ + SET_NZ_FLAGS(Y); \ + ADD_CYCLES(2); \ +} + +/* undocumented */ +#define ISB(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr, data); \ + data++; \ + write_func(addr, data); \ + SBC(cycles, EMPTY_READ); \ +} + +/* TODO: make this a function callback */ +#ifdef NES6502_TESTOPS +#define JAM() \ +{ \ + cpu_Jam(); \ +} +#else /* !NES6502_TESTOPS */ +#define JAM() \ +{ \ + PC--; \ + cpu.jammed = true; \ + cpu.int_pending = 0; \ + ADD_CYCLES(2); \ +} +#endif /* !NES6502_TESTOPS */ + +#define JMP_INDIRECT() \ +{ \ + temp = bank_readword(PC); \ + /* bug in crossing page boundaries */ \ + if (0xFF == (temp & 0xFF)) \ + PC = (bank_readbyte(temp & 0xFF00) << 8) | bank_readbyte(temp); \ + else \ + JUMP(temp); \ + ADD_CYCLES(5); \ +} + +#define JMP_ABSOLUTE() \ +{ \ + JUMP(PC); \ + ADD_CYCLES(3); \ +} + +#define JSR() \ +{ \ + PC++; \ + PUSH(PC >> 8); \ + PUSH(PC & 0xFF); \ + JUMP(PC - 1); \ + ADD_CYCLES(6); \ +} + +/* undocumented */ +#define LAS(cycles, read_func) \ +{ \ + read_func(data); \ + A = X = S = (S & data); \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} + +/* undocumented */ +#define LAX(cycles, read_func) \ +{ \ + read_func(A); \ + X = A; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} + +#define LDA(cycles, read_func) \ +{ \ + read_func(A); \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} + +#define LDX(cycles, read_func) \ +{ \ + read_func(X); \ + SET_NZ_FLAGS(X);\ + ADD_CYCLES(cycles); \ +} + +#define LDY(cycles, read_func) \ +{ \ + read_func(Y); \ + SET_NZ_FLAGS(Y);\ + ADD_CYCLES(cycles); \ +} + +#define LSR(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr, data); \ + c_flag = data & 1; \ + data >>= 1; \ + write_func(addr, data); \ + SET_NZ_FLAGS(data); \ + ADD_CYCLES(cycles); \ +} + +#define LSR_A() \ +{ \ + c_flag = A & 1; \ + A >>= 1; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(2); \ +} + +/* undocumented */ +#define LXA(cycles, read_func) \ +{ \ + read_func(data); \ + A = X = ((A | 0xEE) & data); \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} + +#define NOP() \ +{ \ + ADD_CYCLES(2); \ +} + +#define ORA(cycles, read_func) \ +{ \ + read_func(data); \ + A |= data; \ + SET_NZ_FLAGS(A);\ + ADD_CYCLES(cycles); \ +} + +#define PHA() \ +{ \ + PUSH(A); \ + ADD_CYCLES(3); \ +} + +#define PHP() \ +{ \ + /* B flag is pushed on stack as well */ \ + PUSH(COMBINE_FLAGS() | B_FLAG); \ + ADD_CYCLES(3); \ +} + +#define PLA() \ +{ \ + A = PULL(); \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(4); \ +} + +#define PLP() \ +{ \ + btemp = PULL(); \ + SCATTER_FLAGS(btemp); \ + ADD_CYCLES(4); \ +} + +/* undocumented */ +#define RLA(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr, data); \ + btemp = c_flag; \ + c_flag = data >> 7; \ + data = (data << 1) | btemp; \ + write_func(addr, data); \ + A &= data; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} + +/* 9-bit rotation (carry flag used for rollover) */ +#define ROL(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr, data); \ + btemp = c_flag; \ + c_flag = data >> 7; \ + data = (data << 1) | btemp; \ + write_func(addr, data); \ + SET_NZ_FLAGS(data); \ + ADD_CYCLES(cycles); \ +} + +#define ROL_A() \ +{ \ + btemp = c_flag; \ + c_flag = A >> 7; \ + A = (A << 1) | btemp; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(2); \ +} + +#define ROR(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr, data); \ + btemp = c_flag << 7; \ + c_flag = data & 1; \ + data = (data >> 1) | btemp; \ + write_func(addr, data); \ + SET_NZ_FLAGS(data); \ + ADD_CYCLES(cycles); \ +} + +#define ROR_A() \ +{ \ + btemp = c_flag << 7; \ + c_flag = A & 1; \ + A = (A >> 1) | btemp; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(2); \ +} + +/* undocumented */ +#define RRA(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr, data); \ + btemp = c_flag << 7; \ + c_flag = data & 1; \ + data = (data >> 1) | btemp; \ + write_func(addr, data); \ + ADC(cycles, EMPTY_READ); \ +} + +#define RTI() \ +{ \ + btemp = PULL(); \ + SCATTER_FLAGS(btemp); \ + PC = PULL(); \ + PC |= PULL() << 8; \ + ADD_CYCLES(6); \ + if (0 == i_flag && cpu.int_pending && remaining_cycles > 0) \ + { \ + cpu.int_pending = 0; \ + IRQ_PROC(); \ + ADD_CYCLES(INT_CYCLES); \ + } \ +} + +#define RTS() \ +{ \ + PC = PULL(); \ + PC = (PC | (PULL() << 8)) + 1; \ + ADD_CYCLES(6); \ +} + +/* undocumented */ +#define SAX(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr); \ + data = A & X; \ + write_func(addr, data); \ + ADD_CYCLES(cycles); \ +} + +/* Warning! NES CPU has no decimal mode, so by default this does no BCD! */ +#ifdef NES6502_DECIMAL +#define SBC(cycles, read_func) \ +{ \ + read_func(data); \ + temp = A - data - (c_flag ^ 1); \ + if (d_flag) \ + { \ + uint8 al, ah; \ + al = (A & 0x0F) - (data & 0x0F) - (c_flag ^ 1); \ + ah = (A >> 4) - (data >> 4); \ + if (al & 0x10) \ + { \ + al -= 6; \ + ah--; \ + } \ + if (ah & 0x10) \ + { \ + ah -= 6; \ + c_flag = 0; \ + } \ + else \ + { \ + c_flag = 1; \ + } \ + v_flag = (A ^ temp) & (A ^ data) & 0x80; \ + SET_NZ_FLAGS(temp & 0xFF); \ + A = (ah << 4) | (al & 0x0F); \ + } \ + else \ + { \ + v_flag = (A ^ temp) & (A ^ data) & 0x80; \ + c_flag = ((temp & 0x100) >> 8) ^ 1; \ + A = (uint8) temp; \ + SET_NZ_FLAGS(A & 0xFF); \ + } \ + ADD_CYCLES(cycles); \ +} +#else +#define SBC(cycles, read_func) \ +{ \ + read_func(data); \ + temp = A - data - (c_flag ^ 1); \ + v_flag = (A ^ data) & (A ^ temp) & 0x80; \ + c_flag = ((temp >> 8) & 1) ^ 1; \ + A = (uint8) temp; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} +#endif /* NES6502_DECIMAL */ + +/* undocumented */ +#define SBX(cycles, read_func) \ +{ \ + read_func(data); \ + temp = (A & X) - data; \ + c_flag = ((temp >> 8) & 1) ^ 1; \ + X = temp & 0xFF; \ + SET_NZ_FLAGS(X); \ + ADD_CYCLES(cycles); \ +} + +#define SEC() \ +{ \ + c_flag = 1; \ + ADD_CYCLES(2); \ +} + +#define SED() \ +{ \ + d_flag = 1; \ + ADD_CYCLES(2); \ +} + +#define SEI() \ +{ \ + i_flag = 1; \ + ADD_CYCLES(2); \ +} + +/* undocumented */ +#define SHA(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr); \ + data = A & X & ((uint8) ((addr >> 8) + 1)); \ + write_func(addr, data); \ + ADD_CYCLES(cycles); \ +} + +/* undocumented */ +#define SHS(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr); \ + S = A & X; \ + data = S & ((uint8) ((addr >> 8) + 1)); \ + write_func(addr, data); \ + ADD_CYCLES(cycles); \ +} + +/* undocumented */ +#define SHX(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr); \ + data = X & ((uint8) ((addr >> 8) + 1)); \ + write_func(addr, data); \ + ADD_CYCLES(cycles); \ +} + +/* undocumented */ +#define SHY(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr); \ + data = Y & ((uint8) ((addr >> 8 ) + 1)); \ + write_func(addr, data); \ + ADD_CYCLES(cycles); \ +} + +/* undocumented */ +#define SLO(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr, data); \ + c_flag = data >> 7; \ + data <<= 1; \ + write_func(addr, data); \ + A |= data; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} + +/* undocumented */ +#define SRE(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr, data); \ + c_flag = data & 1; \ + data >>= 1; \ + write_func(addr, data); \ + A ^= data; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(cycles); \ +} + +#define STA(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr); \ + write_func(addr, A); \ + ADD_CYCLES(cycles); \ +} + +#define STX(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr); \ + write_func(addr, X); \ + ADD_CYCLES(cycles); \ +} + +#define STY(cycles, read_func, write_func, addr) \ +{ \ + read_func(addr); \ + write_func(addr, Y); \ + ADD_CYCLES(cycles); \ +} + +#define TAX() \ +{ \ + X = A; \ + SET_NZ_FLAGS(X);\ + ADD_CYCLES(2); \ +} + +#define TAY() \ +{ \ + Y = A; \ + SET_NZ_FLAGS(Y);\ + ADD_CYCLES(2); \ +} + +/* undocumented (triple-NOP) */ +#define TOP() \ +{ \ + PC += 2; \ + ADD_CYCLES(4); \ +} + +#define TSX() \ +{ \ + X = S; \ + SET_NZ_FLAGS(X);\ + ADD_CYCLES(2); \ +} + +#define TXA() \ +{ \ + A = X; \ + SET_NZ_FLAGS(A);\ + ADD_CYCLES(2); \ +} + +#define TXS() \ +{ \ + S = X; \ + ADD_CYCLES(2); \ +} + +#define TYA() \ +{ \ + A = Y; \ + SET_NZ_FLAGS(A); \ + ADD_CYCLES(2); \ +} + + + +/* internal CPU context */ +static nes6502_context cpu; +static int remaining_cycles = 0; /* so we can release timeslice */ +/* memory region pointers */ +static uint8 *ram = NULL, *stack = NULL; +static uint8 null_page[NES6502_BANKSIZE]; + + +/* +** Zero-page helper macros +*/ + +#define ZP_READBYTE(addr) ram[(addr)] +#define ZP_WRITEBYTE(addr, value) ram[(addr)] = (uint8) (value) + +#ifdef HOST_LITTLE_ENDIAN + +/* NOTE: following two functions will fail on architectures +** which do not support byte alignment +*/ +INLINE uint32 zp_readword(register uint8 address) +{ + return (uint32) (*(uint16 *)(ram + address)); +} + +INLINE uint32 bank_readword(register uint32 address) +{ + /* technically, this should fail if the address is $xFFF, but + ** any code that does this would be suspect anyway, as it would + ** be fetching a word across page boundaries, which only would + ** make sense if the banks were physically consecutive. + */ + return (uint32) (*(uint16 *)(cpu.mem_page[address >> NES6502_BANKSHIFT] + (address & NES6502_BANKMASK))); +} + +#else /* !HOST_LITTLE_ENDIAN */ + +INLINE uint32 zp_readword(register uint8 address) +{ +#ifdef TARGET_CPU_PPC + return __lhbrx(ram, address); +#else /* !TARGET_CPU_PPC */ + uint32 x = (uint32) *(uint16 *)(ram + address); + return (x << 8) | (x >> 8); +#endif /* !TARGET_CPU_PPC */ +} + +INLINE uint32 bank_readword(register uint32 address) +{ +#ifdef TARGET_CPU_PPC + return __lhbrx(cpu.mem_page[address >> NES6502_BANKSHIFT], address & NES6502_BANKMASK); +#else /* !TARGET_CPU_PPC */ + uint32 x = (uint32) *(uint16 *)(cpu.mem_page[address >> NES6502_BANKSHIFT] + (address & NES6502_BANKMASK)); + return (x << 8) | (x >> 8); +#endif /* !TARGET_CPU_PPC */ +} + +#endif /* !HOST_LITTLE_ENDIAN */ + +INLINE uint8 bank_readbyte(register uint32 address) +{ + return cpu.mem_page[address >> NES6502_BANKSHIFT][address & NES6502_BANKMASK]; +} + +INLINE void bank_writebyte(register uint32 address, register uint8 value) +{ + cpu.mem_page[address >> NES6502_BANKSHIFT][address & NES6502_BANKMASK] = value; +} + +/* read a byte of 6502 memory */ +static uint8 mem_readbyte(uint32 address) +{ + nes6502_memread *mr; + + /* TODO: following 2 cases are N2A03-specific */ + if (address < 0x800) + { + /* RAM */ + return ram[address]; + } + else if (address >= 0x8000) + { + /* always paged memory */ + return bank_readbyte(address); + } + /* check memory range handlers */ + else + { + for (mr = cpu.read_handler; mr->min_range != 0xFFFFFFFF; mr++) + { + if (address >= mr->min_range && address <= mr->max_range) + return mr->read_func(address); + } + } + + /* return paged memory */ + return bank_readbyte(address); +} + +/* write a byte of data to 6502 memory */ +static void mem_writebyte(uint32 address, uint8 value) +{ + nes6502_memwrite *mw; + + /* RAM */ + if (address < 0x800) + { + ram[address] = value; + return; + } + /* check memory range handlers */ + else + { + for (mw = cpu.write_handler; mw->min_range != 0xFFFFFFFF; mw++) + { + if (address >= mw->min_range && address <= mw->max_range) + { + mw->write_func(address, value); + return; + } + } + } + + /* write to paged memory */ + bank_writebyte(address, value); +} + +/* set the current context */ +void nes6502_setcontext(nes6502_context *context) +{ + int loop; + + ASSERT(context); + + cpu = *context; + + /* set dead page for all pages not pointed at anything */ + for (loop = 0; loop < NES6502_NUMBANKS; loop++) + { + if (NULL == cpu.mem_page[loop]) + cpu.mem_page[loop] = null_page; + } + + ram = cpu.mem_page[0]; /* quick zero-page/RAM references */ + stack = ram + STACK_OFFSET; +} + +/* get the current context */ +void nes6502_getcontext(nes6502_context *context) +{ + int loop; + + ASSERT(context); + + *context = cpu; + + /* reset dead pages to null */ + for (loop = 0; loop < NES6502_NUMBANKS; loop++) + { + if (null_page == context->mem_page[loop]) + context->mem_page[loop] = NULL; + } +} + +/* DMA a byte of data from ROM */ +uint8 nes6502_getbyte(uint32 address) +{ + return bank_readbyte(address); +} + +/* get number of elapsed cycles */ +uint32 nes6502_getcycles(bool reset_flag) +{ + uint32 cycles = cpu.total_cycles; + + if (reset_flag) + cpu.total_cycles = 0; + + return cycles; +} + +#define GET_GLOBAL_REGS() \ +{ \ + PC = cpu.pc_reg; \ + A = cpu.a_reg; \ + X = cpu.x_reg; \ + Y = cpu.y_reg; \ + SCATTER_FLAGS(cpu.p_reg); \ + S = cpu.s_reg; \ +} + +#define STORE_LOCAL_REGS() \ +{ \ + cpu.pc_reg = PC; \ + cpu.a_reg = A; \ + cpu.x_reg = X; \ + cpu.y_reg = Y; \ + cpu.p_reg = COMBINE_FLAGS(); \ + cpu.s_reg = S; \ +} + +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) + +#ifdef NES6502_JUMPTABLE + +#define OPCODE_BEGIN(xx) op##xx: +#ifdef NES6502_DISASM + +#define OPCODE_END \ + if (remaining_cycles <= 0) \ + goto end_execute; \ + log_printf(nes6502_disasm(PC, COMBINE_FLAGS(), A, X, Y, S)); \ + goto *opcode_table[bank_readbyte(PC++)]; + +#else /* !NES6520_DISASM */ + +#define OPCODE_END \ + if (remaining_cycles <= 0) \ + goto end_execute; \ + goto *opcode_table[bank_readbyte(PC++)]; + +#endif /* !NES6502_DISASM */ + +#else /* !NES6502_JUMPTABLE */ +#define OPCODE_BEGIN(xx) case 0x##xx: +#define OPCODE_END break; +#endif /* !NES6502_JUMPTABLE */ + + +/* Execute instructions until count expires +** +** Returns the number of cycles *actually* executed, which will be +** anywhere from zero to timeslice_cycles + 6 +*/ +int nes6502_execute(int timeslice_cycles) +{ + int old_cycles = cpu.total_cycles; + + uint32 temp, addr; /* for macros */ + uint8 btemp, baddr; /* for macros */ + uint8 data; + + /* flags */ + uint8 n_flag, v_flag, b_flag; + uint8 d_flag, i_flag, z_flag, c_flag; + + /* local copies of regs */ + uint32 PC; + uint8 A, X, Y, S; + +#ifdef NES6502_JUMPTABLE + + static const void *opcode_table[256] = + { + &&op00, &&op01, &&op02, &&op03, &&op04, &&op05, &&op06, &&op07, + &&op08, &&op09, &&op0A, &&op0B, &&op0C, &&op0D, &&op0E, &&op0F, + &&op10, &&op11, &&op12, &&op13, &&op14, &&op15, &&op16, &&op17, + &&op18, &&op19, &&op1A, &&op1B, &&op1C, &&op1D, &&op1E, &&op1F, + &&op20, &&op21, &&op22, &&op23, &&op24, &&op25, &&op26, &&op27, + &&op28, &&op29, &&op2A, &&op2B, &&op2C, &&op2D, &&op2E, &&op2F, + &&op30, &&op31, &&op32, &&op33, &&op34, &&op35, &&op36, &&op37, + &&op38, &&op39, &&op3A, &&op3B, &&op3C, &&op3D, &&op3E, &&op3F, + &&op40, &&op41, &&op42, &&op43, &&op44, &&op45, &&op46, &&op47, + &&op48, &&op49, &&op4A, &&op4B, &&op4C, &&op4D, &&op4E, &&op4F, + &&op50, &&op51, &&op52, &&op53, &&op54, &&op55, &&op56, &&op57, + &&op58, &&op59, &&op5A, &&op5B, &&op5C, &&op5D, &&op5E, &&op5F, + &&op60, &&op61, &&op62, &&op63, &&op64, &&op65, &&op66, &&op67, + &&op68, &&op69, &&op6A, &&op6B, &&op6C, &&op6D, &&op6E, &&op6F, + &&op70, &&op71, &&op72, &&op73, &&op74, &&op75, &&op76, &&op77, + &&op78, &&op79, &&op7A, &&op7B, &&op7C, &&op7D, &&op7E, &&op7F, + &&op80, &&op81, &&op82, &&op83, &&op84, &&op85, &&op86, &&op87, + &&op88, &&op89, &&op8A, &&op8B, &&op8C, &&op8D, &&op8E, &&op8F, + &&op90, &&op91, &&op92, &&op93, &&op94, &&op95, &&op96, &&op97, + &&op98, &&op99, &&op9A, &&op9B, &&op9C, &&op9D, &&op9E, &&op9F, + &&opA0, &&opA1, &&opA2, &&opA3, &&opA4, &&opA5, &&opA6, &&opA7, + &&opA8, &&opA9, &&opAA, &&opAB, &&opAC, &&opAD, &&opAE, &&opAF, + &&opB0, &&opB1, &&opB2, &&opB3, &&opB4, &&opB5, &&opB6, &&opB7, + &&opB8, &&opB9, &&opBA, &&opBB, &&opBC, &&opBD, &&opBE, &&opBF, + &&opC0, &&opC1, &&opC2, &&opC3, &&opC4, &&opC5, &&opC6, &&opC7, + &&opC8, &&opC9, &&opCA, &&opCB, &&opCC, &&opCD, &&opCE, &&opCF, + &&opD0, &&opD1, &&opD2, &&opD3, &&opD4, &&opD5, &&opD6, &&opD7, + &&opD8, &&opD9, &&opDA, &&opDB, &&opDC, &&opDD, &&opDE, &&opDF, + &&opE0, &&opE1, &&opE2, &&opE3, &&opE4, &&opE5, &&opE6, &&opE7, + &&opE8, &&opE9, &&opEA, &&opEB, &&opEC, &&opED, &&opEE, &&opEF, + &&opF0, &&opF1, &&opF2, &&opF3, &&opF4, &&opF5, &&opF6, &&opF7, + &&opF8, &&opF9, &&opFA, &&opFB, &&opFC, &&opFD, &&opFE, &&opFF + }; + +#endif /* NES6502_JUMPTABLE */ + + remaining_cycles = timeslice_cycles; + + GET_GLOBAL_REGS(); + + /* check for DMA cycle burning */ + if (cpu.burn_cycles && remaining_cycles > 0) + { + int burn_for; + + burn_for = MIN(remaining_cycles, cpu.burn_cycles); + ADD_CYCLES(burn_for); + cpu.burn_cycles -= burn_for; + } + + if (0 == i_flag && cpu.int_pending && remaining_cycles > 0) + { + cpu.int_pending = 0; + IRQ_PROC(); + ADD_CYCLES(INT_CYCLES); + } + +#ifdef NES6502_JUMPTABLE + /* fetch first instruction */ + OPCODE_END + +#else /* !NES6502_JUMPTABLE */ + + /* Continue until we run out of cycles */ + while (remaining_cycles > 0) + { +#ifdef NES6502_DISASM + log_printf(nes6502_disasm(PC, COMBINE_FLAGS(), A, X, Y, S)); +#endif /* NES6502_DISASM */ + + /* Fetch and execute instruction */ + switch (bank_readbyte(PC++)) + { +#endif /* !NES6502_JUMPTABLE */ + + OPCODE_BEGIN(00) /* BRK */ + BRK(); + OPCODE_END + + OPCODE_BEGIN(01) /* ORA ($nn,X) */ + ORA(6, INDIR_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(02) /* JAM */ + OPCODE_BEGIN(12) /* JAM */ + OPCODE_BEGIN(22) /* JAM */ + OPCODE_BEGIN(32) /* JAM */ + OPCODE_BEGIN(42) /* JAM */ + OPCODE_BEGIN(52) /* JAM */ + OPCODE_BEGIN(62) /* JAM */ + OPCODE_BEGIN(72) /* JAM */ + OPCODE_BEGIN(92) /* JAM */ + OPCODE_BEGIN(B2) /* JAM */ + OPCODE_BEGIN(D2) /* JAM */ + OPCODE_BEGIN(F2) /* JAM */ + JAM(); + /* kill the CPU */ + remaining_cycles = 0; + OPCODE_END + + OPCODE_BEGIN(03) /* SLO ($nn,X) */ + SLO(8, INDIR_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(04) /* NOP $nn */ + OPCODE_BEGIN(44) /* NOP $nn */ + OPCODE_BEGIN(64) /* NOP $nn */ + DOP(3); + OPCODE_END + + OPCODE_BEGIN(05) /* ORA $nn */ + ORA(3, ZERO_PAGE_BYTE); + OPCODE_END + + OPCODE_BEGIN(06) /* ASL $nn */ + ASL(5, ZERO_PAGE, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(07) /* SLO $nn */ + SLO(5, ZERO_PAGE, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(08) /* PHP */ + PHP(); + OPCODE_END + + OPCODE_BEGIN(09) /* ORA #$nn */ + ORA(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(0A) /* ASL A */ + ASL_A(); + OPCODE_END + + OPCODE_BEGIN(0B) /* ANC #$nn */ + ANC(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(0C) /* NOP $nnnn */ + TOP(); + OPCODE_END + + OPCODE_BEGIN(0D) /* ORA $nnnn */ + ORA(4, ABSOLUTE_BYTE); + OPCODE_END + + OPCODE_BEGIN(0E) /* ASL $nnnn */ + ASL(6, ABSOLUTE, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(0F) /* SLO $nnnn */ + SLO(6, ABSOLUTE, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(10) /* BPL $nnnn */ + BPL(); + OPCODE_END + + OPCODE_BEGIN(11) /* ORA ($nn),Y */ + ORA(5, INDIR_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(13) /* SLO ($nn),Y */ + SLO(8, INDIR_Y, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(14) /* NOP $nn,X */ + OPCODE_BEGIN(34) /* NOP */ + OPCODE_BEGIN(54) /* NOP $nn,X */ + OPCODE_BEGIN(74) /* NOP $nn,X */ + OPCODE_BEGIN(D4) /* NOP $nn,X */ + OPCODE_BEGIN(F4) /* NOP ($nn,X) */ + DOP(4); + OPCODE_END + + OPCODE_BEGIN(15) /* ORA $nn,X */ + ORA(4, ZP_IND_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(16) /* ASL $nn,X */ + ASL(6, ZP_IND_X, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(17) /* SLO $nn,X */ + SLO(6, ZP_IND_X, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(18) /* CLC */ + CLC(); + OPCODE_END + + OPCODE_BEGIN(19) /* ORA $nnnn,Y */ + ORA(4, ABS_IND_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(1A) /* NOP */ + OPCODE_BEGIN(3A) /* NOP */ + OPCODE_BEGIN(5A) /* NOP */ + OPCODE_BEGIN(7A) /* NOP */ + OPCODE_BEGIN(DA) /* NOP */ + OPCODE_BEGIN(FA) /* NOP */ + NOP(); + OPCODE_END + + OPCODE_BEGIN(1B) /* SLO $nnnn,Y */ + SLO(7, ABS_IND_Y, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(1C) /* NOP $nnnn,X */ + OPCODE_BEGIN(3C) /* NOP $nnnn,X */ + OPCODE_BEGIN(5C) /* NOP $nnnn,X */ + OPCODE_BEGIN(7C) /* NOP $nnnn,X */ + OPCODE_BEGIN(DC) /* NOP $nnnn,X */ + OPCODE_BEGIN(FC) /* NOP $nnnn,X */ + TOP(); + OPCODE_END + + OPCODE_BEGIN(1D) /* ORA $nnnn,X */ + ORA(4, ABS_IND_X_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(1E) /* ASL $nnnn,X */ + ASL(7, ABS_IND_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(1F) /* SLO $nnnn,X */ + SLO(7, ABS_IND_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(20) /* JSR $nnnn */ + JSR(); + OPCODE_END + + OPCODE_BEGIN(21) /* AND ($nn,X) */ + AND(6, INDIR_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(23) /* RLA ($nn,X) */ + RLA(8, INDIR_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(24) /* BIT $nn */ + BIT(3, ZERO_PAGE_BYTE); + OPCODE_END + + OPCODE_BEGIN(25) /* AND $nn */ + AND(3, ZERO_PAGE_BYTE); + OPCODE_END + + OPCODE_BEGIN(26) /* ROL $nn */ + ROL(5, ZERO_PAGE, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(27) /* RLA $nn */ + RLA(5, ZERO_PAGE, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(28) /* PLP */ + PLP(); + OPCODE_END + + OPCODE_BEGIN(29) /* AND #$nn */ + AND(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(2A) /* ROL A */ + ROL_A(); + OPCODE_END + + OPCODE_BEGIN(2B) /* ANC #$nn */ + ANC(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(2C) /* BIT $nnnn */ + BIT(4, ABSOLUTE_BYTE); + OPCODE_END + + OPCODE_BEGIN(2D) /* AND $nnnn */ + AND(4, ABSOLUTE_BYTE); + OPCODE_END + + OPCODE_BEGIN(2E) /* ROL $nnnn */ + ROL(6, ABSOLUTE, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(2F) /* RLA $nnnn */ + RLA(6, ABSOLUTE, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(30) /* BMI $nnnn */ + BMI(); + OPCODE_END + + OPCODE_BEGIN(31) /* AND ($nn),Y */ + AND(5, INDIR_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(33) /* RLA ($nn),Y */ + RLA(8, INDIR_Y, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(35) /* AND $nn,X */ + AND(4, ZP_IND_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(36) /* ROL $nn,X */ + ROL(6, ZP_IND_X, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(37) /* RLA $nn,X */ + RLA(6, ZP_IND_X, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(38) /* SEC */ + SEC(); + OPCODE_END + + OPCODE_BEGIN(39) /* AND $nnnn,Y */ + AND(4, ABS_IND_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(3B) /* RLA $nnnn,Y */ + RLA(7, ABS_IND_Y, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(3D) /* AND $nnnn,X */ + AND(4, ABS_IND_X_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(3E) /* ROL $nnnn,X */ + ROL(7, ABS_IND_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(3F) /* RLA $nnnn,X */ + RLA(7, ABS_IND_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(40) /* RTI */ + RTI(); + OPCODE_END + + OPCODE_BEGIN(41) /* EOR ($nn,X) */ + EOR(6, INDIR_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(43) /* SRE ($nn,X) */ + SRE(8, INDIR_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(45) /* EOR $nn */ + EOR(3, ZERO_PAGE_BYTE); + OPCODE_END + + OPCODE_BEGIN(46) /* LSR $nn */ + LSR(5, ZERO_PAGE, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(47) /* SRE $nn */ + SRE(5, ZERO_PAGE, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(48) /* PHA */ + PHA(); + OPCODE_END + + OPCODE_BEGIN(49) /* EOR #$nn */ + EOR(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(4A) /* LSR A */ + LSR_A(); + OPCODE_END + + OPCODE_BEGIN(4B) /* ASR #$nn */ + ASR(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(4C) /* JMP $nnnn */ + JMP_ABSOLUTE(); + OPCODE_END + + OPCODE_BEGIN(4D) /* EOR $nnnn */ + EOR(4, ABSOLUTE_BYTE); + OPCODE_END + + OPCODE_BEGIN(4E) /* LSR $nnnn */ + LSR(6, ABSOLUTE, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(4F) /* SRE $nnnn */ + SRE(6, ABSOLUTE, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(50) /* BVC $nnnn */ + BVC(); + OPCODE_END + + OPCODE_BEGIN(51) /* EOR ($nn),Y */ + EOR(5, INDIR_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(53) /* SRE ($nn),Y */ + SRE(8, INDIR_Y, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(55) /* EOR $nn,X */ + EOR(4, ZP_IND_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(56) /* LSR $nn,X */ + LSR(6, ZP_IND_X, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(57) /* SRE $nn,X */ + SRE(6, ZP_IND_X, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(58) /* CLI */ + CLI(); + OPCODE_END + + OPCODE_BEGIN(59) /* EOR $nnnn,Y */ + EOR(4, ABS_IND_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(5B) /* SRE $nnnn,Y */ + SRE(7, ABS_IND_Y, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(5D) /* EOR $nnnn,X */ + EOR(4, ABS_IND_X_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(5E) /* LSR $nnnn,X */ + LSR(7, ABS_IND_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(5F) /* SRE $nnnn,X */ + SRE(7, ABS_IND_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(60) /* RTS */ + RTS(); + OPCODE_END + + OPCODE_BEGIN(61) /* ADC ($nn,X) */ + ADC(6, INDIR_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(63) /* RRA ($nn,X) */ + RRA(8, INDIR_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(65) /* ADC $nn */ + ADC(3, ZERO_PAGE_BYTE); + OPCODE_END + + OPCODE_BEGIN(66) /* ROR $nn */ + ROR(5, ZERO_PAGE, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(67) /* RRA $nn */ + RRA(5, ZERO_PAGE, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(68) /* PLA */ + PLA(); + OPCODE_END + + OPCODE_BEGIN(69) /* ADC #$nn */ + ADC(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(6A) /* ROR A */ + ROR_A(); + OPCODE_END + + OPCODE_BEGIN(6B) /* ARR #$nn */ + ARR(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(6C) /* JMP ($nnnn) */ + JMP_INDIRECT(); + OPCODE_END + + OPCODE_BEGIN(6D) /* ADC $nnnn */ + ADC(4, ABSOLUTE_BYTE); + OPCODE_END + + OPCODE_BEGIN(6E) /* ROR $nnnn */ + ROR(6, ABSOLUTE, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(6F) /* RRA $nnnn */ + RRA(6, ABSOLUTE, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(70) /* BVS $nnnn */ + BVS(); + OPCODE_END + + OPCODE_BEGIN(71) /* ADC ($nn),Y */ + ADC(5, INDIR_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(73) /* RRA ($nn),Y */ + RRA(8, INDIR_Y, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(75) /* ADC $nn,X */ + ADC(4, ZP_IND_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(76) /* ROR $nn,X */ + ROR(6, ZP_IND_X, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(77) /* RRA $nn,X */ + RRA(6, ZP_IND_X, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(78) /* SEI */ + SEI(); + OPCODE_END + + OPCODE_BEGIN(79) /* ADC $nnnn,Y */ + ADC(4, ABS_IND_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(7B) /* RRA $nnnn,Y */ + RRA(7, ABS_IND_Y, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(7D) /* ADC $nnnn,X */ + ADC(4, ABS_IND_X_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(7E) /* ROR $nnnn,X */ + ROR(7, ABS_IND_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(7F) /* RRA $nnnn,X */ + RRA(7, ABS_IND_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(80) /* NOP #$nn */ + OPCODE_BEGIN(82) /* NOP #$nn */ + OPCODE_BEGIN(89) /* NOP #$nn */ + OPCODE_BEGIN(C2) /* NOP #$nn */ + OPCODE_BEGIN(E2) /* NOP #$nn */ + DOP(2); + OPCODE_END + + OPCODE_BEGIN(81) /* STA ($nn,X) */ + STA(6, INDIR_X_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(83) /* SAX ($nn,X) */ + SAX(6, INDIR_X_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(84) /* STY $nn */ + STY(3, ZERO_PAGE_ADDR, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(85) /* STA $nn */ + STA(3, ZERO_PAGE_ADDR, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(86) /* STX $nn */ + STX(3, ZERO_PAGE_ADDR, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(87) /* SAX $nn */ + SAX(3, ZERO_PAGE_ADDR, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(88) /* DEY */ + DEY(); + OPCODE_END + + OPCODE_BEGIN(8A) /* TXA */ + TXA(); + OPCODE_END + + OPCODE_BEGIN(8B) /* ANE #$nn */ + ANE(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(8C) /* STY $nnnn */ + STY(4, ABSOLUTE_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(8D) /* STA $nnnn */ + STA(4, ABSOLUTE_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(8E) /* STX $nnnn */ + STX(4, ABSOLUTE_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(8F) /* SAX $nnnn */ + SAX(4, ABSOLUTE_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(90) /* BCC $nnnn */ + BCC(); + OPCODE_END + + OPCODE_BEGIN(91) /* STA ($nn),Y */ + STA(6, INDIR_Y_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(93) /* SHA ($nn),Y */ + SHA(6, INDIR_Y_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(94) /* STY $nn,X */ + STY(4, ZP_IND_X_ADDR, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(95) /* STA $nn,X */ + STA(4, ZP_IND_X_ADDR, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(96) /* STX $nn,Y */ + STX(4, ZP_IND_Y_ADDR, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(97) /* SAX $nn,Y */ + SAX(4, ZP_IND_Y_ADDR, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(98) /* TYA */ + TYA(); + OPCODE_END + + OPCODE_BEGIN(99) /* STA $nnnn,Y */ + STA(5, ABS_IND_Y_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(9A) /* TXS */ + TXS(); + OPCODE_END + + OPCODE_BEGIN(9B) /* SHS $nnnn,Y */ + SHS(5, ABS_IND_Y_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(9C) /* SHY $nnnn,X */ + SHY(5, ABS_IND_X_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(9D) /* STA $nnnn,X */ + STA(5, ABS_IND_X_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(9E) /* SHX $nnnn,Y */ + SHX(5, ABS_IND_Y_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(9F) /* SHA $nnnn,Y */ + SHA(5, ABS_IND_Y_ADDR, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(A0) /* LDY #$nn */ + LDY(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(A1) /* LDA ($nn,X) */ + LDA(6, INDIR_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(A2) /* LDX #$nn */ + LDX(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(A3) /* LAX ($nn,X) */ + LAX(6, INDIR_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(A4) /* LDY $nn */ + LDY(3, ZERO_PAGE_BYTE); + OPCODE_END + + OPCODE_BEGIN(A5) /* LDA $nn */ + LDA(3, ZERO_PAGE_BYTE); + OPCODE_END + + OPCODE_BEGIN(A6) /* LDX $nn */ + LDX(3, ZERO_PAGE_BYTE); + OPCODE_END + + OPCODE_BEGIN(A7) /* LAX $nn */ + LAX(3, ZERO_PAGE_BYTE); + OPCODE_END + + OPCODE_BEGIN(A8) /* TAY */ + TAY(); + OPCODE_END + + OPCODE_BEGIN(A9) /* LDA #$nn */ + LDA(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(AA) /* TAX */ + TAX(); + OPCODE_END + + OPCODE_BEGIN(AB) /* LXA #$nn */ + LXA(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(AC) /* LDY $nnnn */ + LDY(4, ABSOLUTE_BYTE); + OPCODE_END + + OPCODE_BEGIN(AD) /* LDA $nnnn */ + LDA(4, ABSOLUTE_BYTE); + OPCODE_END + + OPCODE_BEGIN(AE) /* LDX $nnnn */ + LDX(4, ABSOLUTE_BYTE); + OPCODE_END + + OPCODE_BEGIN(AF) /* LAX $nnnn */ + LAX(4, ABSOLUTE_BYTE); + OPCODE_END + + OPCODE_BEGIN(B0) /* BCS $nnnn */ + BCS(); + OPCODE_END + + OPCODE_BEGIN(B1) /* LDA ($nn),Y */ + LDA(5, INDIR_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(B3) /* LAX ($nn),Y */ + LAX(5, INDIR_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(B4) /* LDY $nn,X */ + LDY(4, ZP_IND_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(B5) /* LDA $nn,X */ + LDA(4, ZP_IND_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(B6) /* LDX $nn,Y */ + LDX(4, ZP_IND_Y_BYTE); + OPCODE_END + + OPCODE_BEGIN(B7) /* LAX $nn,Y */ + LAX(4, ZP_IND_Y_BYTE); + OPCODE_END + + OPCODE_BEGIN(B8) /* CLV */ + CLV(); + OPCODE_END + + OPCODE_BEGIN(B9) /* LDA $nnnn,Y */ + LDA(4, ABS_IND_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(BA) /* TSX */ + TSX(); + OPCODE_END + + OPCODE_BEGIN(BB) /* LAS $nnnn,Y */ + LAS(4, ABS_IND_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(BC) /* LDY $nnnn,X */ + LDY(4, ABS_IND_X_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(BD) /* LDA $nnnn,X */ + LDA(4, ABS_IND_X_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(BE) /* LDX $nnnn,Y */ + LDX(4, ABS_IND_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(BF) /* LAX $nnnn,Y */ + LAX(4, ABS_IND_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(C0) /* CPY #$nn */ + CPY(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(C1) /* CMP ($nn,X) */ + CMP(6, INDIR_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(C3) /* DCP ($nn,X) */ + DCP(8, INDIR_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(C4) /* CPY $nn */ + CPY(3, ZERO_PAGE_BYTE); + OPCODE_END + + OPCODE_BEGIN(C5) /* CMP $nn */ + CMP(3, ZERO_PAGE_BYTE); + OPCODE_END + + OPCODE_BEGIN(C6) /* DEC $nn */ + DEC(5, ZERO_PAGE, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(C7) /* DCP $nn */ + DCP(5, ZERO_PAGE, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(C8) /* INY */ + INY(); + OPCODE_END + + OPCODE_BEGIN(C9) /* CMP #$nn */ + CMP(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(CA) /* DEX */ + DEX(); + OPCODE_END + + OPCODE_BEGIN(CB) /* SBX #$nn */ + SBX(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(CC) /* CPY $nnnn */ + CPY(4, ABSOLUTE_BYTE); + OPCODE_END + + OPCODE_BEGIN(CD) /* CMP $nnnn */ + CMP(4, ABSOLUTE_BYTE); + OPCODE_END + + OPCODE_BEGIN(CE) /* DEC $nnnn */ + DEC(6, ABSOLUTE, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(CF) /* DCP $nnnn */ + DCP(6, ABSOLUTE, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(D0) /* BNE $nnnn */ + BNE(); + OPCODE_END + + OPCODE_BEGIN(D1) /* CMP ($nn),Y */ + CMP(5, INDIR_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(D3) /* DCP ($nn),Y */ + DCP(8, INDIR_Y, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(D5) /* CMP $nn,X */ + CMP(4, ZP_IND_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(D6) /* DEC $nn,X */ + DEC(6, ZP_IND_X, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(D7) /* DCP $nn,X */ + DCP(6, ZP_IND_X, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(D8) /* CLD */ + CLD(); + OPCODE_END + + OPCODE_BEGIN(D9) /* CMP $nnnn,Y */ + CMP(4, ABS_IND_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(DB) /* DCP $nnnn,Y */ + DCP(7, ABS_IND_Y, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(DD) /* CMP $nnnn,X */ + CMP(4, ABS_IND_X_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(DE) /* DEC $nnnn,X */ + DEC(7, ABS_IND_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(DF) /* DCP $nnnn,X */ + DCP(7, ABS_IND_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(E0) /* CPX #$nn */ + CPX(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(E1) /* SBC ($nn,X) */ + SBC(6, INDIR_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(E3) /* ISB ($nn,X) */ + ISB(8, INDIR_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(E4) /* CPX $nn */ + CPX(3, ZERO_PAGE_BYTE); + OPCODE_END + + OPCODE_BEGIN(E5) /* SBC $nn */ + SBC(3, ZERO_PAGE_BYTE); + OPCODE_END + + OPCODE_BEGIN(E6) /* INC $nn */ + INC(5, ZERO_PAGE, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(E7) /* ISB $nn */ + ISB(5, ZERO_PAGE, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(E8) /* INX */ + INX(); + OPCODE_END + + OPCODE_BEGIN(E9) /* SBC #$nn */ + OPCODE_BEGIN(EB) /* USBC #$nn */ + SBC(2, IMMEDIATE_BYTE); + OPCODE_END + + OPCODE_BEGIN(EA) /* NOP */ + NOP(); + OPCODE_END + + OPCODE_BEGIN(EC) /* CPX $nnnn */ + CPX(4, ABSOLUTE_BYTE); + OPCODE_END + + OPCODE_BEGIN(ED) /* SBC $nnnn */ + SBC(4, ABSOLUTE_BYTE); + OPCODE_END + + OPCODE_BEGIN(EE) /* INC $nnnn */ + INC(6, ABSOLUTE, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(EF) /* ISB $nnnn */ + ISB(6, ABSOLUTE, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(F0) /* BEQ $nnnn */ + BEQ(); + OPCODE_END + + OPCODE_BEGIN(F1) /* SBC ($nn),Y */ + SBC(5, INDIR_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(F3) /* ISB ($nn),Y */ + ISB(8, INDIR_Y, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(F5) /* SBC $nn,X */ + SBC(4, ZP_IND_X_BYTE); + OPCODE_END + + OPCODE_BEGIN(F6) /* INC $nn,X */ + INC(6, ZP_IND_X, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(F7) /* ISB $nn,X */ + ISB(6, ZP_IND_X, ZP_WRITEBYTE, baddr); + OPCODE_END + + OPCODE_BEGIN(F8) /* SED */ + SED(); + OPCODE_END + + OPCODE_BEGIN(F9) /* SBC $nnnn,Y */ + SBC(4, ABS_IND_Y_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(FB) /* ISB $nnnn,Y */ + ISB(7, ABS_IND_Y, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(FD) /* SBC $nnnn,X */ + SBC(4, ABS_IND_X_BYTE_READ); + OPCODE_END + + OPCODE_BEGIN(FE) /* INC $nnnn,X */ + INC(7, ABS_IND_X, mem_writebyte, addr); + OPCODE_END + + OPCODE_BEGIN(FF) /* ISB $nnnn,X */ + ISB(7, ABS_IND_X, mem_writebyte, addr); + OPCODE_END + +#ifdef NES6502_JUMPTABLE +end_execute: + +#else /* !NES6502_JUMPTABLE */ + } + } +#endif /* !NES6502_JUMPTABLE */ + + /* store local copy of regs */ + STORE_LOCAL_REGS(); + + /* Return our actual amount of executed cycles */ + return (cpu.total_cycles - old_cycles); +} + +/* Issue a CPU Reset */ +void nes6502_reset(void) +{ + cpu.p_reg = Z_FLAG | R_FLAG | I_FLAG; /* Reserved bit always 1 */ + cpu.int_pending = 0; /* No pending interrupts */ + cpu.int_latency = 0; /* No latent interrupts */ + cpu.pc_reg = bank_readword(RESET_VECTOR); /* Fetch reset vector */ + cpu.burn_cycles = RESET_CYCLES; + cpu.jammed = false; +} + +/* following macro is used for below 2 functions */ +#define DECLARE_LOCAL_REGS \ + uint32 PC; \ + uint8 A, X, Y, S; \ + uint8 n_flag, v_flag, b_flag; \ + uint8 d_flag, i_flag, z_flag, c_flag; + +/* Non-maskable interrupt */ +void nes6502_nmi(void) +{ + DECLARE_LOCAL_REGS + + if (false == cpu.jammed) + { + GET_GLOBAL_REGS(); + NMI_PROC(); + cpu.burn_cycles += INT_CYCLES; + STORE_LOCAL_REGS(); + } +} + +/* Interrupt request */ +void nes6502_irq(void) +{ + DECLARE_LOCAL_REGS + + if (false == cpu.jammed) + { + GET_GLOBAL_REGS(); + if (0 == i_flag) + { + IRQ_PROC(); + cpu.burn_cycles += INT_CYCLES; + } + else + { + cpu.int_pending = 1; + } + STORE_LOCAL_REGS(); + } +} + +/* Set dead cycle period */ +void nes6502_burn(int cycles) +{ + cpu.burn_cycles += cycles; +} + +/* Release our timeslice */ +void nes6502_release(void) +{ + remaining_cycles = 0; +} + +/* +** $Log: nes6502.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:39 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.34 2000/11/27 19:33:07 matt +** concise interrupts +** +** Revision 1.33 2000/11/26 15:39:54 matt +** timing fixes +** +** Revision 1.32 2000/11/20 13:22:51 matt +** added note about word fetches across page boundaries +** +** Revision 1.31 2000/11/13 00:57:39 matt +** trying to add 1-instruction interrupt latency... and failing. +** +** Revision 1.30 2000/10/10 13:58:14 matt +** stroustrup squeezing his way in the door +** +** Revision 1.29 2000/10/10 13:05:05 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.28 2000/10/08 17:55:41 matt +** check burn cycles before ints +** +** Revision 1.27 2000/09/15 03:42:32 matt +** nes6502_release to release current timeslice +** +** Revision 1.26 2000/09/15 03:16:17 matt +** optimized C flag handling, and ADC/SBC/ROL/ROR macros +** +** Revision 1.25 2000/09/14 02:12:03 matt +** disassembling now works with goto table, and removed memcpy from context get/set +** +** Revision 1.24 2000/09/11 03:55:57 matt +** cosmetics +** +** Revision 1.23 2000/09/11 01:45:45 matt +** flag optimizations. this thing is fast! +** +** Revision 1.22 2000/09/08 13:29:25 matt +** added switch()-less execution for gcc +** +** Revision 1.21 2000/09/08 11:54:48 matt +** optimize +** +** Revision 1.20 2000/09/07 21:58:18 matt +** api change for nes6502_burn, optimized core +** +** Revision 1.19 2000/09/07 13:39:01 matt +** resolved a few conflicts +** +** Revision 1.18 2000/09/07 01:34:55 matt +** nes6502_init deprecated, moved flag regs to separate vars +** +** Revision 1.17 2000/08/31 13:26:35 matt +** added DISASM flag, to sync with asm version +** +** Revision 1.16 2000/08/29 05:38:00 matt +** removed faulty failure note +** +** Revision 1.15 2000/08/28 12:53:44 matt +** fixes for disassembler +** +** Revision 1.14 2000/08/28 04:32:28 matt +** naming convention changes +** +** Revision 1.13 2000/08/28 01:46:15 matt +** moved some of them defines around, cleaned up jamming code +** +** Revision 1.12 2000/08/16 04:56:37 matt +** accurate CPU jamming, added dead page emulation +** +** Revision 1.11 2000/07/30 04:32:00 matt +** now emulates the NES frame IRQ +** +** Revision 1.10 2000/07/17 01:52:28 matt +** made sure last line of all source files is a newline +** +** Revision 1.9 2000/07/11 04:27:18 matt +** new disassembler calling convention +** +** Revision 1.8 2000/07/10 05:26:38 matt +** cosmetic +** +** Revision 1.7 2000/07/06 17:10:51 matt +** minor (er, spelling) error fixed +** +** Revision 1.6 2000/07/04 04:50:07 matt +** minor change to includes +** +** Revision 1.5 2000/07/03 02:18:16 matt +** added a few notes about potential failure cases +** +** Revision 1.4 2000/06/09 15:12:25 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes6502.h b/MCUME_pico/piconofrendo/nes6502.h new file mode 100755 index 0000000..7a2d040 --- /dev/null +++ b/MCUME_pico/piconofrendo/nes6502.h @@ -0,0 +1,175 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes6502.h +** +** NES custom 6502 CPU definitions / prototypes +** $Id: nes6502.h,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +/* NOTE: 16-bit addresses avoided like the plague: use 32-bit values +** wherever humanly possible +*/ +#ifndef _NES6502_H_ +#define _NES6502_H_ + +#include "noftypes.h" + +/* Define this to enable decimal mode in ADC / SBC (not needed in NES) */ +/*#define NES6502_DECIMAL*/ + +#define NES6502_NUMBANKS 16 +#define NES6502_BANKSHIFT 12 +#define NES6502_BANKSIZE (0x10000 / NES6502_NUMBANKS) +#define NES6502_BANKMASK (NES6502_BANKSIZE - 1) + +/* P (flag) register bitmasks */ +#define N_FLAG 0x80 +#define V_FLAG 0x40 +#define R_FLAG 0x20 /* Reserved, always 1 */ +#define B_FLAG 0x10 +#define D_FLAG 0x08 +#define I_FLAG 0x04 +#define Z_FLAG 0x02 +#define C_FLAG 0x01 + +/* Vector addresses */ +#define NMI_VECTOR 0xFFFA +#define RESET_VECTOR 0xFFFC +#define IRQ_VECTOR 0xFFFE + +/* cycle counts for interrupts */ +#define INT_CYCLES 7 +#define RESET_CYCLES 6 + +#define NMI_MASK 0x01 +#define IRQ_MASK 0x02 + +/* Stack is located on 6502 page 1 */ +#define STACK_OFFSET 0x0100 + +typedef struct +{ + uint32 min_range, max_range; + uint8 (*read_func)(uint32 address); +} nes6502_memread; + +typedef struct +{ + uint32 min_range, max_range; + void (*write_func)(uint32 address, uint8 value); +} nes6502_memwrite; + +typedef struct +{ + uint8 *mem_page[NES6502_NUMBANKS]; /* memory page pointers */ + + nes6502_memread *read_handler; + nes6502_memwrite *write_handler; + + uint32 pc_reg; + uint8 a_reg, p_reg; + uint8 x_reg, y_reg; + uint8 s_reg; + + uint8 jammed; /* is processor jammed? */ + + uint8 int_pending, int_latency; + + int32 total_cycles, burn_cycles; +} nes6502_context; + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* Functions which govern the 6502's execution */ +extern void nes6502_reset(void); +extern int nes6502_execute(int total_cycles); +extern void nes6502_nmi(void); +extern void nes6502_irq(void); +extern uint8 nes6502_getbyte(uint32 address); +extern uint32 nes6502_getcycles(bool reset_flag); +extern void nes6502_burn(int cycles); +extern void nes6502_release(void); + +/* Context get/set */ +extern void nes6502_setcontext(nes6502_context *cpu); +extern void nes6502_getcontext(nes6502_context *cpu); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _NES6502_H_ */ + +/* +** $Log: nes6502.h,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:39 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.17 2000/11/13 00:57:39 matt +** trying to add 1-instruction interrupt latency... and failing. +** +** Revision 1.16 2000/10/27 12:53:36 matt +** banks are always 4kB now +** +** Revision 1.15 2000/10/10 13:58:14 matt +** stroustrup squeezing his way in the door +** +** Revision 1.14 2000/09/15 03:42:32 matt +** nes6502_release to release current timeslice +** +** Revision 1.13 2000/09/11 03:55:32 matt +** cosmetics +** +** Revision 1.12 2000/09/08 11:54:48 matt +** optimize +** +** Revision 1.11 2000/09/07 21:58:18 matt +** api change for nes6502_burn, optimized core +** +** Revision 1.10 2000/09/07 01:34:55 matt +** nes6502_init deprecated, moved flag regs to separate vars +** +** Revision 1.9 2000/08/28 12:53:44 matt +** fixes for disassembler +** +** Revision 1.8 2000/08/28 01:46:15 matt +** moved some of them defines around, cleaned up jamming code +** +** Revision 1.7 2000/08/16 04:56:37 matt +** accurate CPU jamming, added dead page emulation +** +** Revision 1.6 2000/07/30 04:32:00 matt +** now emulates the NES frame IRQ +** +** Revision 1.5 2000/07/17 01:52:28 matt +** made sure last line of all source files is a newline +** +** Revision 1.4 2000/06/09 15:12:25 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes_apu.c b/MCUME_pico/piconofrendo/nes_apu.c new file mode 100755 index 0000000..9707411 --- /dev/null +++ b/MCUME_pico/piconofrendo/nes_apu.c @@ -0,0 +1,1195 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes_apu.c +** +** NES APU emulation +** $Id: nes_apu.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include +#include "noftypes.h" +#include "log.h" +#include "nes_apu.h" +#include "nes6502.h" + + +#define APU_OVERSAMPLE +#define APU_VOLUME_DECAY(x) ((x) -= ((x) >> 7)) + +/* the following seem to be the correct (empirically determined) +** relative volumes between the sound channels +*/ +#define APU_RECTANGLE_OUTPUT(channel) (apu.rectangle[channel].output_vol) +#define APU_TRIANGLE_OUTPUT (apu.triangle.output_vol + (apu.triangle.output_vol >> 2)) +#define APU_NOISE_OUTPUT ((apu.noise.output_vol + apu.noise.output_vol + apu.noise.output_vol) >> 2) +#define APU_DMC_OUTPUT ((apu.dmc.output_vol + apu.dmc.output_vol + apu.dmc.output_vol) >> 2) + +/* active APU */ +static apu_t apu; + +/* look up table madness */ +static int32 decay_lut[16]; +static int vbl_lut[32]; +static int trilength_lut[128]; + +/* noise lookups for both modes */ +#ifndef REALTIME_NOISE +static int8 noise_long_lut[APU_NOISE_32K]; +static int8 noise_short_lut[APU_NOISE_93]; +#endif /* !REALTIME_NOISE */ + + +/* vblank length table used for rectangles, triangle, noise */ +static const uint8 vbl_length[32] = +{ + 5, 127, + 10, 1, + 19, 2, + 40, 3, + 80, 4, + 30, 5, + 7, 6, + 13, 7, + 6, 8, + 12, 9, + 24, 10, + 48, 11, + 96, 12, + 36, 13, + 8, 14, + 16, 15 +}; + +/* frequency limit of rectangle channels */ +static const int freq_limit[8] = +{ + 0x3FF, 0x555, 0x666, 0x71C, 0x787, 0x7C1, 0x7E0, 0x7F0 +}; + +/* noise frequency lookup table */ +static const int noise_freq[16] = +{ + 4, 8, 16, 32, 64, 96, 128, 160, + 202, 254, 380, 508, 762, 1016, 2034, 4068 +}; + +/* DMC transfer freqs */ +const int dmc_clocks[16] = +{ + 428, 380, 340, 320, 286, 254, 226, 214, + 190, 160, 142, 128, 106, 85, 72, 54 +}; + +/* ratios of pos/neg pulse for rectangle waves */ +static const int duty_flip[4] = { 2, 4, 8, 12 }; + + +void apu_setcontext(apu_t *src_apu) +{ + apu = *src_apu; +} + +void apu_getcontext(apu_t *dest_apu) +{ + *dest_apu = apu; +} + +void apu_setchan(int chan, bool enabled) +{ + if (enabled) + apu.mix_enable |= (1 << chan); + else + apu.mix_enable &= ~(1 << chan); +} + +/* emulation of the 15-bit shift register the +** NES uses to generate pseudo-random series +** for the white noise channel +*/ +#ifdef REALTIME_NOISE +INLINE int8 shift_register15(uint8 xor_tap) +{ + static int sreg = 0x4000; + int bit0, tap, bit14; + + bit0 = sreg & 1; + tap = (sreg & xor_tap) ? 1 : 0; + bit14 = (bit0 ^ tap); + sreg >>= 1; + sreg |= (bit14 << 14); + return (bit0 ^ 1); +} +#else /* !REALTIME_NOISE */ +static void shift_register15(int8 *buf, int count) +{ + static int sreg = 0x4000; + int bit0, bit1, bit6, bit14; + + if (count == APU_NOISE_93) + { + while (count--) + { + bit0 = sreg & 1; + bit6 = (sreg & 0x40) >> 6; + bit14 = (bit0 ^ bit6); + sreg >>= 1; + sreg |= (bit14 << 14); + *buf++ = bit0 ^ 1; + } + } + else /* 32K noise */ + { + while (count--) + { + bit0 = sreg & 1; + bit1 = (sreg & 2) >> 1; + bit14 = (bit0 ^ bit1); + sreg >>= 1; + sreg |= (bit14 << 14); + *buf++ = bit0 ^ 1; + } + } +} +#endif /* !REALTIME_NOISE */ + +/* RECTANGLE WAVE +** ============== +** reg0: 0-3=volume, 4=envelope, 5=hold, 6-7=duty cycle +** reg1: 0-2=sweep shifts, 3=sweep inc/dec, 4-6=sweep length, 7=sweep on +** reg2: 8 bits of freq +** reg3: 0-2=high freq, 7-4=vbl length counter +*/ +#ifdef APU_OVERSAMPLE + +#define APU_MAKE_RECTANGLE(ch) \ +static int32 apu_rectangle_##ch(void) \ +{ \ + int32 output, total; \ + int num_times; \ +\ + APU_VOLUME_DECAY(apu.rectangle[ch].output_vol); \ +\ + if (false == apu.rectangle[ch].enabled || 0 == apu.rectangle[ch].vbl_length) \ + return APU_RECTANGLE_OUTPUT(ch); \ +\ + /* vbl length counter */ \ + if (false == apu.rectangle[ch].holdnote) \ + apu.rectangle[ch].vbl_length--; \ +\ + /* envelope decay at a rate of (env_delay + 1) / 240 secs */ \ + apu.rectangle[ch].env_phase -= 4; /* 240/60 */ \ + while (apu.rectangle[ch].env_phase < 0) \ + { \ + apu.rectangle[ch].env_phase += apu.rectangle[ch].env_delay; \ +\ + if (apu.rectangle[ch].holdnote) \ + apu.rectangle[ch].env_vol = (apu.rectangle[ch].env_vol + 1) & 0x0F; \ + else if (apu.rectangle[ch].env_vol < 0x0F) \ + apu.rectangle[ch].env_vol++; \ + } \ +\ + /* TODO: find true relation of freq_limit to register values */ \ + if (apu.rectangle[ch].freq < 8 \ + || (false == apu.rectangle[ch].sweep_inc \ + && apu.rectangle[ch].freq > apu.rectangle[ch].freq_limit)) \ + return APU_RECTANGLE_OUTPUT(ch); \ +\ + /* frequency sweeping at a rate of (sweep_delay + 1) / 120 secs */ \ + if (apu.rectangle[ch].sweep_on && apu.rectangle[ch].sweep_shifts) \ + { \ + apu.rectangle[ch].sweep_phase -= 2; /* 120/60 */ \ + while (apu.rectangle[ch].sweep_phase < 0) \ + { \ + apu.rectangle[ch].sweep_phase += apu.rectangle[ch].sweep_delay; \ +\ + if (apu.rectangle[ch].sweep_inc) /* ramp up */ \ + { \ + if (0 == ch) \ + apu.rectangle[ch].freq += ~(apu.rectangle[ch].freq >> apu.rectangle[ch].sweep_shifts); \ + else \ + apu.rectangle[ch].freq -= (apu.rectangle[ch].freq >> apu.rectangle[ch].sweep_shifts); \ + } \ + else /* ramp down */ \ + { \ + apu.rectangle[ch].freq += (apu.rectangle[ch].freq >> apu.rectangle[ch].sweep_shifts); \ + } \ + } \ + } \ +\ + apu.rectangle[ch].accum -= apu.cycle_rate; \ + if (apu.rectangle[ch].accum >= 0) \ + return APU_RECTANGLE_OUTPUT(ch); \ +\ + if (apu.rectangle[ch].fixed_envelope) \ + output = apu.rectangle[ch].volume << 8; /* fixed volume */ \ + else \ + output = (apu.rectangle[ch].env_vol ^ 0x0F) << 8; \ +\ + num_times = total = 0; \ +\ + while (apu.rectangle[ch].accum < 0) \ + { \ + apu.rectangle[ch].accum += apu.rectangle[ch].freq + 1; \ + apu.rectangle[ch].adder = (apu.rectangle[ch].adder + 1) & 0x0F; \ +\ + if (apu.rectangle[ch].adder < apu.rectangle[ch].duty_flip) \ + total += output; \ + else \ + total -= output; \ +\ + num_times++; \ + } \ +\ + apu.rectangle[ch].output_vol = total / num_times; \ + return APU_RECTANGLE_OUTPUT(ch); \ +} + +#else /* !APU_OVERSAMPLE */ +#define APU_MAKE_RECTANGLE(ch) \ +static int32 apu_rectangle_##ch(void) \ +{ \ + int32 output; \ +\ + APU_VOLUME_DECAY(apu.rectangle[ch].output_vol); \ +\ + if (false == apu.rectangle[ch].enabled || 0 == apu.rectangle[ch].vbl_length) \ + return APU_RECTANGLE_OUTPUT(ch); \ +\ + /* vbl length counter */ \ + if (false == apu.rectangle[ch].holdnote) \ + apu.rectangle[ch].vbl_length--; \ +\ + /* envelope decay at a rate of (env_delay + 1) / 240 secs */ \ + apu.rectangle[ch].env_phase -= 4; /* 240/60 */ \ + while (apu.rectangle[ch].env_phase < 0) \ + { \ + apu.rectangle[ch].env_phase += apu.rectangle[ch].env_delay; \ +\ + if (apu.rectangle[ch].holdnote) \ + apu.rectangle[ch].env_vol = (apu.rectangle[ch].env_vol + 1) & 0x0F; \ + else if (apu.rectangle[ch].env_vol < 0x0F) \ + apu.rectangle[ch].env_vol++; \ + } \ +\ + /* TODO: find true relation of freq_limit to register values */ \ + if (apu.rectangle[ch].freq < 8 || (false == apu.rectangle[ch].sweep_inc && apu.rectangle[ch].freq > apu.rectangle[ch].freq_limit)) \ + return APU_RECTANGLE_OUTPUT(ch); \ +\ + /* frequency sweeping at a rate of (sweep_delay + 1) / 120 secs */ \ + if (apu.rectangle[ch].sweep_on && apu.rectangle[ch].sweep_shifts) \ + { \ + apu.rectangle[ch].sweep_phase -= 2; /* 120/60 */ \ + while (apu.rectangle[ch].sweep_phase < 0) \ + { \ + apu.rectangle[ch].sweep_phase += apu.rectangle[ch].sweep_delay; \ +\ + if (apu.rectangle[ch].sweep_inc) /* ramp up */ \ + { \ + if (0 == ch) \ + apu.rectangle[ch].freq += ~(apu.rectangle[ch].freq >> apu.rectangle[ch].sweep_shifts); \ + else \ + apu.rectangle[ch].freq -= (apu.rectangle[ch].freq >> apu.rectangle[ch].sweep_shifts); \ + } \ + else /* ramp down */ \ + { \ + apu.rectangle[ch].freq += (apu.rectangle[ch].freq >> apu.rectangle[ch].sweep_shifts); \ + } \ + } \ + } \ +\ + apu.rectangle[ch].accum -= apu.cycle_rate; \ + if (apu.rectangle[ch].accum >= 0) \ + return APU_RECTANGLE_OUTPUT(ch); \ +\ + while (apu.rectangle[ch].accum < 0) \ + { \ + apu.rectangle[ch].accum += (apu.rectangle[ch].freq + 1); \ + apu.rectangle[ch].adder = (apu.rectangle[ch].adder + 1) & 0x0F; \ + } \ +\ + if (apu.rectangle[ch].fixed_envelope) \ + output = apu.rectangle[ch].volume << 8; /* fixed volume */ \ + else \ + output = (apu.rectangle[ch].env_vol ^ 0x0F) << 8; \ +\ + if (0 == apu.rectangle[ch].adder) \ + apu.rectangle[ch].output_vol = output; \ + else if (apu.rectangle[ch].adder == apu.rectangle[ch].duty_flip) \ + apu.rectangle[ch].output_vol = -output; \ +\ + return APU_RECTANGLE_OUTPUT(ch); \ +} + +#endif /* !APU_OVERSAMPLE */ + +/* generate the functions */ +APU_MAKE_RECTANGLE(0) +APU_MAKE_RECTANGLE(1) + + +/* TRIANGLE WAVE +** ============= +** reg0: 7=holdnote, 6-0=linear length counter +** reg2: low 8 bits of frequency +** reg3: 7-3=length counter, 2-0=high 3 bits of frequency +*/ +static int32 apu_triangle(void) +{ + APU_VOLUME_DECAY(apu.triangle.output_vol); + + if (false == apu.triangle.enabled || 0 == apu.triangle.vbl_length) + return APU_TRIANGLE_OUTPUT; + + if (apu.triangle.counter_started) + { + if (apu.triangle.linear_length > 0) + apu.triangle.linear_length--; + if (apu.triangle.vbl_length && false == apu.triangle.holdnote) + apu.triangle.vbl_length--; + } + else if (false == apu.triangle.holdnote && apu.triangle.write_latency) + { + if (--apu.triangle.write_latency == 0) + apu.triangle.counter_started = true; + } + + if (0 == apu.triangle.linear_length || apu.triangle.freq < 4) /* inaudible */ + return APU_TRIANGLE_OUTPUT; + + apu.triangle.accum -= apu.cycle_rate; \ + while (apu.triangle.accum < 0) + { + apu.triangle.accum += apu.triangle.freq; + apu.triangle.adder = (apu.triangle.adder + 1) & 0x1F; + + if (apu.triangle.adder & 0x10) + apu.triangle.output_vol -= (2 << 8); + else + apu.triangle.output_vol += (2 << 8); + } + + return APU_TRIANGLE_OUTPUT; +} + + +/* WHITE NOISE CHANNEL +** =================== +** reg0: 0-3=volume, 4=envelope, 5=hold +** reg2: 7=small(93 byte) sample,3-0=freq lookup +** reg3: 7-4=vbl length counter +*/ +/* TODO: AAAAAAAAAAAAAAAAAAAAAAAA! #ifdef MADNESS! */ +static int32 apu_noise(void) +{ + int32 outvol; + +#if defined(APU_OVERSAMPLE) && defined(REALTIME_NOISE) +#else /* !(APU_OVERSAMPLE && REALTIME_NOISE) */ + int32 noise_bit; +#endif /* !(APU_OVERSAMPLE && REALTIME_NOISE) */ +#ifdef APU_OVERSAMPLE + int num_times; + int32 total; +#endif /* APU_OVERSAMPLE */ + + APU_VOLUME_DECAY(apu.noise.output_vol); + + if (false == apu.noise.enabled || 0 == apu.noise.vbl_length) + return APU_NOISE_OUTPUT; + + /* vbl length counter */ + if (false == apu.noise.holdnote) + apu.noise.vbl_length--; + + /* envelope decay at a rate of (env_delay + 1) / 240 secs */ + apu.noise.env_phase -= 4; /* 240/60 */ + while (apu.noise.env_phase < 0) + { + apu.noise.env_phase += apu.noise.env_delay; + + if (apu.noise.holdnote) + apu.noise.env_vol = (apu.noise.env_vol + 1) & 0x0F; + else if (apu.noise.env_vol < 0x0F) + apu.noise.env_vol++; + } + + apu.noise.accum -= apu.cycle_rate; + if (apu.noise.accum >= 0) + return APU_NOISE_OUTPUT; + +#ifdef APU_OVERSAMPLE + if (apu.noise.fixed_envelope) + outvol = apu.noise.volume << 8; /* fixed volume */ + else + outvol = (apu.noise.env_vol ^ 0x0F) << 8; + + num_times = total = 0; +#endif /* APU_OVERSAMPLE */ + + while (apu.noise.accum < 0) + { + apu.noise.accum += apu.noise.freq; + +#ifdef REALTIME_NOISE + +#ifdef APU_OVERSAMPLE + if (shift_register15(apu.noise.xor_tap)) + total += outvol; + else + total -= outvol; + + num_times++; +#else /* !APU_OVERSAMPLE */ + noise_bit = shift_register15(apu.noise.xor_tap); +#endif /* !APU_OVERSAMPLE */ + +#else /* !REALTIME_NOISE */ + apu.noise.cur_pos++; + + if (apu.noise.short_sample) + { + if (APU_NOISE_93 == apu.noise.cur_pos) + apu.noise.cur_pos = 0; + } + else + { + if (APU_NOISE_32K == apu.noise.cur_pos) + apu.noise.cur_pos = 0; + } + +#ifdef APU_OVERSAMPLE + if (apu.noise.short_sample) + noise_bit = noise_short_lut[apu.noise.cur_pos]; + else + noise_bit = noise_long_lut[apu.noise.cur_pos]; + + if (noise_bit) + total += outvol; + else + total -= outvol; + + num_times++; +#endif /* APU_OVERSAMPLE */ +#endif /* !REALTIME_NOISE */ + } + +#ifdef APU_OVERSAMPLE + apu.noise.output_vol = total / num_times; +#else /* !APU_OVERSAMPLE */ + if (apu.noise.fixed_envelope) + outvol = apu.noise.volume << 8; /* fixed volume */ + else + outvol = (apu.noise.env_vol ^ 0x0F) << 8; + +#ifndef REALTIME_NOISE + if (apu.noise.short_sample) + noise_bit = noise_short_lut[apu.noise.cur_pos]; + else + noise_bit = noise_long_lut[apu.noise.cur_pos]; +#endif /* !REALTIME_NOISE */ + + if (noise_bit) + apu.noise.output_vol = outvol; + else + apu.noise.output_vol = -outvol; +#endif /* !APU_OVERSAMPLE */ + + return APU_NOISE_OUTPUT; +} + + +INLINE void apu_dmcreload(void) +{ + apu.dmc.address = apu.dmc.cached_addr; + apu.dmc.dma_length = apu.dmc.cached_dmalength; + apu.dmc.irq_occurred = false; +} + +/* DELTA MODULATION CHANNEL +** ========================= +** reg0: 7=irq gen, 6=looping, 3-0=pointer to clock table +** reg1: output dc level, 6 bits unsigned +** reg2: 8 bits of 64-byte aligned address offset : $C000 + (value * 64) +** reg3: length, (value * 16) + 1 +*/ +static int32 apu_dmc(void) +{ + int delta_bit; + + APU_VOLUME_DECAY(apu.dmc.output_vol); + + /* only process when channel is alive */ + if (apu.dmc.dma_length) + { + apu.dmc.accum -= apu.cycle_rate; + + while (apu.dmc.accum < 0) + { + apu.dmc.accum += apu.dmc.freq; + + delta_bit = (apu.dmc.dma_length & 7) ^ 7; + + if (7 == delta_bit) + { + apu.dmc.cur_byte = nes6502_getbyte(apu.dmc.address); + + /* steal a cycle from CPU*/ + nes6502_burn(1); + + /* prevent wraparound */ + if (0xFFFF == apu.dmc.address) + apu.dmc.address = 0x8000; + else + apu.dmc.address++; + } + + if (--apu.dmc.dma_length == 0) + { + /* if loop bit set, we're cool to retrigger sample */ + if (apu.dmc.looping) + { + apu_dmcreload(); + } + else + { + /* check to see if we should generate an irq */ + if (apu.dmc.irq_gen) + { + apu.dmc.irq_occurred = true; + if (apu.irq_callback) + apu.irq_callback(); + } + + /* bodge for timestamp queue */ + apu.dmc.enabled = false; + break; + } + } + + /* positive delta */ + if (apu.dmc.cur_byte & (1 << delta_bit)) + { + if (apu.dmc.regs[1] < 0x7D) + { + apu.dmc.regs[1] += 2; + apu.dmc.output_vol += (2 << 8); + } + } + /* negative delta */ + else + { + if (apu.dmc.regs[1] > 1) + { + apu.dmc.regs[1] -= 2; + apu.dmc.output_vol -= (2 << 8); + } + } + } + } + + return APU_DMC_OUTPUT; +} + + +void apu_write(uint32 address, uint8 value) +{ + int chan; + + switch (address) + { + /* rectangles */ + case APU_WRA0: + case APU_WRB0: + chan = (address & 4) >> 2; + apu.rectangle[chan].regs[0] = value; + apu.rectangle[chan].volume = value & 0x0F; + apu.rectangle[chan].env_delay = decay_lut[value & 0x0F]; + apu.rectangle[chan].holdnote = (value & 0x20) ? true : false; + apu.rectangle[chan].fixed_envelope = (value & 0x10) ? true : false; + apu.rectangle[chan].duty_flip = duty_flip[value >> 6]; + break; + + case APU_WRA1: + case APU_WRB1: + chan = (address & 4) >> 2; + apu.rectangle[chan].regs[1] = value; + apu.rectangle[chan].sweep_on = (value & 0x80) ? true : false; + apu.rectangle[chan].sweep_shifts = value & 7; + apu.rectangle[chan].sweep_delay = decay_lut[(value >> 4) & 7]; + apu.rectangle[chan].sweep_inc = (value & 0x08) ? true : false; + apu.rectangle[chan].freq_limit = freq_limit[value & 7]; + break; + + case APU_WRA2: + case APU_WRB2: + chan = (address & 4) >> 2; + apu.rectangle[chan].regs[2] = value; + apu.rectangle[chan].freq = (apu.rectangle[chan].freq & ~0xFF) | value; + break; + + case APU_WRA3: + case APU_WRB3: + chan = (address & 4) >> 2; + apu.rectangle[chan].regs[3] = value; + apu.rectangle[chan].vbl_length = vbl_lut[value >> 3]; + apu.rectangle[chan].env_vol = 0; + apu.rectangle[chan].freq = ((value & 7) << 8) | (apu.rectangle[chan].freq & 0xFF); + apu.rectangle[chan].adder = 0; + break; + + /* triangle */ + case APU_WRC0: + apu.triangle.regs[0] = value; + apu.triangle.holdnote = (value & 0x80) ? true : false; + + if (false == apu.triangle.counter_started && apu.triangle.vbl_length) + apu.triangle.linear_length = trilength_lut[value & 0x7F]; + + break; + + case APU_WRC2: + apu.triangle.regs[1] = value; + apu.triangle.freq = (((apu.triangle.regs[2] & 7) << 8) + value) + 1; + break; + + case APU_WRC3: + + apu.triangle.regs[2] = value; + + /* this is somewhat of a hack. there appears to be some latency on + ** the Real Thing between when trireg0 is written to and when the + ** linear length counter actually begins its countdown. we want to + ** prevent the case where the program writes to the freq regs first, + ** then to reg 0, and the counter accidentally starts running because + ** of the sound queue's timestamp processing. + ** + ** set latency to a couple hundred cycles -- should be plenty of time + ** for the 6502 code to do a couple of table dereferences and load up + ** the other triregs + */ + apu.triangle.write_latency = (int) (228 / apu.cycle_rate); + apu.triangle.freq = (((value & 7) << 8) + apu.triangle.regs[1]) + 1; + apu.triangle.vbl_length = vbl_lut[value >> 3]; + apu.triangle.counter_started = false; + apu.triangle.linear_length = trilength_lut[apu.triangle.regs[0] & 0x7F]; + break; + + /* noise */ + case APU_WRD0: + apu.noise.regs[0] = value; + apu.noise.env_delay = decay_lut[value & 0x0F]; + apu.noise.holdnote = (value & 0x20) ? true : false; + apu.noise.fixed_envelope = (value & 0x10) ? true : false; + apu.noise.volume = value & 0x0F; + break; + + case APU_WRD2: + apu.noise.regs[1] = value; + apu.noise.freq = noise_freq[value & 0x0F]; + +#ifdef REALTIME_NOISE + apu.noise.xor_tap = (value & 0x80) ? 0x40: 0x02; +#else /* !REALTIME_NOISE */ + /* detect transition from long->short sample */ + if ((value & 0x80) && false == apu.noise.short_sample) + { + /* recalculate short noise buffer */ + shift_register15(noise_short_lut, APU_NOISE_93); + apu.noise.cur_pos = 0; + } + apu.noise.short_sample = (value & 0x80) ? true : false; +#endif /* !REALTIME_NOISE */ + break; + + case APU_WRD3: + apu.noise.regs[2] = value; + apu.noise.vbl_length = vbl_lut[value >> 3]; + apu.noise.env_vol = 0; /* reset envelope */ + break; + + /* DMC */ + case APU_WRE0: + apu.dmc.regs[0] = value; + apu.dmc.freq = dmc_clocks[value & 0x0F]; + apu.dmc.looping = (value & 0x40) ? true : false; + + if (value & 0x80) + { + apu.dmc.irq_gen = true; + } + else + { + apu.dmc.irq_gen = false; + apu.dmc.irq_occurred = false; + } + break; + + case APU_WRE1: /* 7-bit DAC */ + /* add the _delta_ between written value and + ** current output level of the volume reg + */ + value &= 0x7F; /* bit 7 ignored */ + apu.dmc.output_vol += ((value - apu.dmc.regs[1]) << 8); + apu.dmc.regs[1] = value; + break; + + case APU_WRE2: + apu.dmc.regs[2] = value; + apu.dmc.cached_addr = 0xC000 + (uint16) (value << 6); + break; + + case APU_WRE3: + apu.dmc.regs[3] = value; + apu.dmc.cached_dmalength = ((value << 4) + 1) << 3; + break; + + case APU_SMASK: + /* bodge for timestamp queue */ + apu.dmc.enabled = (value & 0x10) ? true : false; + apu.enable_reg = value; + + for (chan = 0; chan < 2; chan++) + { + if (value & (1 << chan)) + { + apu.rectangle[chan].enabled = true; + } + else + { + apu.rectangle[chan].enabled = false; + apu.rectangle[chan].vbl_length = 0; + } + } + + if (value & 0x04) + { + apu.triangle.enabled = true; + } + else + { + apu.triangle.enabled = false; + apu.triangle.vbl_length = 0; + apu.triangle.linear_length = 0; + apu.triangle.counter_started = false; + apu.triangle.write_latency = 0; + } + + if (value & 0x08) + { + apu.noise.enabled = true; + } + else + { + apu.noise.enabled = false; + apu.noise.vbl_length = 0; + } + + if (value & 0x10) + { + if (0 == apu.dmc.dma_length) + apu_dmcreload(); + } + else + { + apu.dmc.dma_length = 0; + } + + apu.dmc.irq_occurred = false; + break; + + /* unused, but they get hit in some mem-clear loops */ + case 0x4009: + case 0x400D: + break; + + default: + break; + } +} + +/* Read from $4000-$4017 */ +uint8 apu_read(uint32 address) +{ + uint8 value; + + switch (address) + { + case APU_SMASK: + value = 0; + /* Return 1 in 0-5 bit pos if a channel is playing */ + if (apu.rectangle[0].enabled && apu.rectangle[0].vbl_length) + value |= 0x01; + if (apu.rectangle[1].enabled && apu.rectangle[1].vbl_length) + value |= 0x02; + if (apu.triangle.enabled && apu.triangle.vbl_length) + value |= 0x04; + if (apu.noise.enabled && apu.noise.vbl_length) + value |= 0x08; + + /* bodge for timestamp queue */ + if (apu.dmc.enabled) + value |= 0x10; + + if (apu.dmc.irq_occurred) + value |= 0x80; + + if (apu.irqclear_callback) + value |= apu.irqclear_callback(); + + break; + + default: + value = (address >> 8); /* heavy capacitance on data bus */ + break; + } + + return value; +} + +#define CLIP_OUTPUT16(out) \ +{ \ + /*out <<= 1;*/ \ + if (out > 0x7FFF) \ + out = 0x7FFF; \ + else if (out < -0x8000) \ + out = -0x8000; \ +} + +void apu_process(void *buffer, int num_samples) +{ + static int32 prev_sample = 0; + + int16 *buf16; + uint8 *buf8; + + if (NULL != buffer) + { + /* bleh */ + apu.buffer = buffer; + + buf16 = (int16 *) buffer; + buf8 = (uint8 *) buffer; + + while (num_samples--) + { + int32 next_sample, accum = 0; + + if (apu.mix_enable & 0x01) + accum += apu_rectangle_0(); + if (apu.mix_enable & 0x02) + accum += apu_rectangle_1(); + if (apu.mix_enable & 0x04) + accum += apu_triangle(); + if (apu.mix_enable & 0x08) + accum += apu_noise(); + if (apu.mix_enable & 0x10) + accum += apu_dmc(); + if (apu.ext && (apu.mix_enable & 0x20)) + accum += apu.ext->process(); + + /* do any filtering */ + if (APU_FILTER_NONE != apu.filter_type) + { + next_sample = accum; + + if (APU_FILTER_LOWPASS == apu.filter_type) + { + accum += prev_sample; + accum >>= 1; + } + else + accum = (accum + accum + accum + prev_sample) >> 2; + + prev_sample = next_sample; + } + + /* do clipping */ + CLIP_OUTPUT16(accum); + + /* signed 16-bit output, unsigned 8-bit */ + if (16 == apu.sample_bits) + *buf16++ = (int16) accum; + else + *buf8++ = (accum >> 8) ^ 0x80; + } + } +} + +/* set the filter type */ +void apu_setfilter(int filter_type) +{ + apu.filter_type = filter_type; +} + +void apu_reset(void) +{ + uint32 address; + + /* initialize all channel members */ + for (address = 0x4000; address <= 0x4013; address++) + apu_write(address, 0); + + apu_write(0x4015, 0); + + if (apu.ext && NULL != apu.ext->reset) + apu.ext->reset(); +} + +void apu_build_luts(int num_samples) +{ + int i; + + /* lut used for enveloping and frequency sweeps */ + for (i = 0; i < 16; i++) + decay_lut[i] = num_samples * (i + 1); + + /* used for note length, based on vblanks and size of audio buffer */ + for (i = 0; i < 32; i++) + vbl_lut[i] = vbl_length[i] * num_samples; + + /* triangle wave channel's linear length table */ + for (i = 0; i < 128; i++) + trilength_lut[i] = (int) (0.25 * i * num_samples); + +#ifndef REALTIME_NOISE + /* generate noise samples */ + shift_register15(noise_long_lut, APU_NOISE_32K); + shift_register15(noise_short_lut, APU_NOISE_93); +#endif /* !REALTIME_NOISE */ +} + +void apu_setparams(double base_freq, int sample_rate, int refresh_rate, int sample_bits) +{ + apu.sample_rate = sample_rate; + apu.refresh_rate = refresh_rate; + apu.sample_bits = sample_bits; + apu.num_samples = sample_rate / refresh_rate; + if (0 == base_freq) + apu.base_freq = APU_BASEFREQ; + else + apu.base_freq = base_freq; + apu.cycle_rate = (float) (apu.base_freq / sample_rate); + + /* build various lookup tables for apu */ + apu_build_luts(apu.num_samples); + + apu_reset(); +} + +/* Initializes emulated sound hardware, creates waveforms/voices */ +apu_t *apu_create(double base_freq, int sample_rate, int refresh_rate, int sample_bits) +{ + apu_t *temp_apu; + int channel; + + temp_apu = malloc(sizeof(apu_t)); + if (NULL == temp_apu) + return NULL; + + memset(temp_apu, 0, sizeof(apu_t)); + + /* set the update routine */ + temp_apu->process = apu_process; + temp_apu->ext = NULL; + + /* clear the callbacks */ + temp_apu->irq_callback = NULL; + temp_apu->irqclear_callback = NULL; + + apu_setcontext(temp_apu); + + apu_setparams(base_freq, sample_rate, refresh_rate, sample_bits); + + for (channel = 0; channel < 6; channel++) + apu_setchan(channel, true); + + apu_setfilter(APU_FILTER_WEIGHTED); + + apu_getcontext(temp_apu); + + return temp_apu; +} + +void apu_destroy(apu_t **src_apu) +{ + if (*src_apu) + { + if ((*src_apu)->ext && NULL != (*src_apu)->ext->shutdown) + (*src_apu)->ext->shutdown(); + free(*src_apu); + *src_apu = NULL; + } +} + +void apu_setext(apu_t *src_apu, apuext_t *ext) +{ + ASSERT(src_apu); + + src_apu->ext = ext; + + /* initialize it */ + if (src_apu->ext && NULL != src_apu->ext->init) + src_apu->ext->init(); +} + +/* +** $Log: nes_apu.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.6 2000/12/08 02:36:14 matt +** bye bye apu queue (for now) +** +** Revision 1.5 2000/11/27 19:33:53 matt +** no special treatment for nsf +** +** Revision 1.4 2000/11/25 20:29:17 matt +** weighted filter is now default +** +** Revision 1.3 2000/11/21 13:28:19 matt +** take care to zero allocated mem +** +** Revision 1.2 2000/10/28 15:20:59 matt +** irq callbacks in nes_apu +** +** Revision 1.1 2000/10/24 12:19:59 matt +** changed directory structure +** +** Revision 1.44 2000/10/23 17:53:06 matt +** set ptr to NULL after freeing +** +** Revision 1.43 2000/10/17 11:56:42 matt +** selectable apu base frequency +** +** Revision 1.42 2000/10/13 12:16:01 matt +** macro-ized the stuff that should be removed +** +** Revision 1.41 2000/10/10 13:58:18 matt +** stroustrup squeezing his way in the door +** +** Revision 1.40 2000/10/03 11:56:20 matt +** better support for optional sound ext routines +** +** Revision 1.39 2000/09/27 12:26:03 matt +** changed sound accumulators back to floats +** +** Revision 1.38 2000/09/18 02:12:55 matt +** more optimizations +** +** Revision 1.37 2000/09/15 13:38:40 matt +** changes for optimized apu core +** +** Revision 1.36 2000/09/15 04:58:07 matt +** simplifying and optimizing APU core +** +** Revision 1.35 2000/09/07 21:57:14 matt +** api change +** +** Revision 1.34 2000/08/16 05:01:01 matt +** small buglet fixed +** +** Revision 1.33 2000/08/15 12:38:04 matt +** removed debug output +** +** Revision 1.32 2000/08/15 12:36:51 matt +** calling apu_process with buffer=NULL causes silent emulation of APU +** +** Revision 1.31 2000/08/11 02:27:21 matt +** general cleanups, plus apu_setparams routine +** +** Revision 1.30 2000/07/31 04:32:52 matt +** fragsize problem fixed, perhaps +** +** Revision 1.29 2000/07/30 04:32:59 matt +** no more apu_getcyclerate hack +** +** Revision 1.28 2000/07/28 03:15:46 matt +** accuracy changes for rectangle frequency sweeps +** +** Revision 1.27 2000/07/27 02:49:50 matt +** eccentricity in sweeping hardware now emulated correctly +** +** Revision 1.26 2000/07/25 02:25:14 matt +** safer apu_destroy +** +** Revision 1.25 2000/07/23 15:10:54 matt +** hacks for win32 +** +** Revision 1.24 2000/07/17 01:52:31 matt +** made sure last line of all source files is a newline +** +** Revision 1.23 2000/07/10 19:24:55 matt +** irqs are not supported in NSF playing mode +** +** Revision 1.22 2000/07/10 13:54:32 matt +** using generic nes_irq() now +** +** Revision 1.21 2000/07/10 05:29:34 matt +** moved joypad/oam dma from apu to ppu +** +** Revision 1.20 2000/07/09 03:49:31 matt +** apu irqs now draw an irq line (bleh) +** +** Revision 1.19 2000/07/04 04:53:26 matt +** minor changes, sound amplification +** +** Revision 1.18 2000/07/03 02:18:53 matt +** much better external module exporting +** +** Revision 1.17 2000/06/26 11:01:55 matt +** made triangle a tad quieter +** +** Revision 1.16 2000/06/26 05:10:33 matt +** fixed cycle rate generation accuracy +** +** Revision 1.15 2000/06/26 05:00:37 matt +** cleanups +** +** Revision 1.14 2000/06/23 11:06:24 matt +** more faithful mixing of channels +** +** Revision 1.13 2000/06/23 03:29:27 matt +** cleaned up external sound inteface +** +** Revision 1.12 2000/06/20 00:08:39 matt +** bugfix to rectangle wave +** +** Revision 1.11 2000/06/13 13:48:58 matt +** fixed triangle write latency for fixed point apu cycle rate +** +** Revision 1.10 2000/06/12 01:14:36 matt +** minor change to clipping extents +** +** Revision 1.9 2000/06/09 20:00:56 matt +** fixed noise hiccup in NSF player mode +** +** Revision 1.8 2000/06/09 16:49:02 matt +** removed all floating point from sound generation +** +** Revision 1.7 2000/06/09 15:12:28 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes_apu.h b/MCUME_pico/piconofrendo/nes_apu.h new file mode 100755 index 0000000..523c969 --- /dev/null +++ b/MCUME_pico/piconofrendo/nes_apu.h @@ -0,0 +1,349 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes_apu.h +** +** NES APU emulation header file +** $Id: nes_apu.h,v 1.1 2001/04/27 12:54:40 neil Exp $ +*/ + +#ifndef _NES_APU_H_ +#define _NES_APU_H_ + + +/* define this for realtime generated noise */ +#define REALTIME_NOISE + +#define APU_WRA0 0x4000 +#define APU_WRA1 0x4001 +#define APU_WRA2 0x4002 +#define APU_WRA3 0x4003 +#define APU_WRB0 0x4004 +#define APU_WRB1 0x4005 +#define APU_WRB2 0x4006 +#define APU_WRB3 0x4007 +#define APU_WRC0 0x4008 +#define APU_WRC2 0x400A +#define APU_WRC3 0x400B +#define APU_WRD0 0x400C +#define APU_WRD2 0x400E +#define APU_WRD3 0x400F +#define APU_WRE0 0x4010 +#define APU_WRE1 0x4011 +#define APU_WRE2 0x4012 +#define APU_WRE3 0x4013 + +#define APU_SMASK 0x4015 + +/* length of generated noise */ +#define APU_NOISE_32K 0x7FFF +#define APU_NOISE_93 93 + +#define APU_BASEFREQ 1789772.7272727272727272 + + +/* channel structures */ +/* As much data as possible is precalculated, +** to keep the sample processing as lean as possible +*/ + +typedef struct rectangle_s +{ + uint8 regs[4]; + + bool enabled; + + float accum; + int32 freq; + int32 output_vol; + bool fixed_envelope; + bool holdnote; + uint8 volume; + + int32 sweep_phase; + int32 sweep_delay; + bool sweep_on; + uint8 sweep_shifts; + uint8 sweep_length; + bool sweep_inc; + + /* this may not be necessary in the future */ + int32 freq_limit; + int32 env_phase; + int32 env_delay; + uint8 env_vol; + + int vbl_length; + uint8 adder; + int duty_flip; +} rectangle_t; + +typedef struct triangle_s +{ + uint8 regs[3]; + + bool enabled; + + float accum; + int32 freq; + int32 output_vol; + + uint8 adder; + + bool holdnote; + bool counter_started; + /* quasi-hack */ + int write_latency; + + int vbl_length; + int linear_length; +} triangle_t; + + +typedef struct noise_s +{ + uint8 regs[3]; + + bool enabled; + + float accum; + int32 freq; + int32 output_vol; + + int32 env_phase; + int32 env_delay; + uint8 env_vol; + bool fixed_envelope; + bool holdnote; + + uint8 volume; + + int vbl_length; + +#ifdef REALTIME_NOISE + uint8 xor_tap; +#else + bool short_sample; + int cur_pos; +#endif /* REALTIME_NOISE */ +} noise_t; + +typedef struct dmc_s +{ + uint8 regs[4]; + + /* bodge for timestamp queue */ + bool enabled; + + float accum; + int32 freq; + int32 output_vol; + + uint32 address; + uint32 cached_addr; + int dma_length; + int cached_dmalength; + uint8 cur_byte; + + bool looping; + bool irq_gen; + bool irq_occurred; + +} dmc_t; + +enum +{ + APU_FILTER_NONE, + APU_FILTER_LOWPASS, + APU_FILTER_WEIGHTED +}; + +typedef struct +{ + uint32 min_range, max_range; + uint8 (*read_func)(uint32 address); +} apu_memread; + +typedef struct +{ + uint32 min_range, max_range; + void (*write_func)(uint32 address, uint8 value); +} apu_memwrite; + +/* external sound chip stuff */ +typedef struct apuext_s +{ + int (*init)(void); + void (*shutdown)(void); + void (*reset)(void); + int32 (*process)(void); + apu_memread *mem_read; + apu_memwrite *mem_write; +} apuext_t; + + +typedef struct apu_s +{ + rectangle_t rectangle[2]; + triangle_t triangle; + noise_t noise; + dmc_t dmc; + uint8 enable_reg; + + void *buffer; /* pointer to output buffer */ + int num_samples; + + uint8 mix_enable; + int filter_type; + + double base_freq; + float cycle_rate; + + int sample_rate; + int sample_bits; + int refresh_rate; + + void (*process)(void *buffer, int num_samples); + void (*irq_callback)(void); + uint8 (*irqclear_callback)(void); + + /* external sound chip */ + apuext_t *ext; +} apu_t; + + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* Function prototypes */ +extern void apu_setcontext(apu_t *src_apu); +extern void apu_getcontext(apu_t *dest_apu); + +extern void apu_setparams(double base_freq, int sample_rate, int refresh_rate, int sample_bits); +extern apu_t *apu_create(double base_freq, int sample_rate, int refresh_rate, int sample_bits); +extern void apu_destroy(apu_t **apu); + +extern void apu_process(void *buffer, int num_samples); +extern void apu_reset(void); + +extern void apu_setext(apu_t *apu, apuext_t *ext); +extern void apu_setfilter(int filter_type); +extern void apu_setchan(int chan, bool enabled); + +extern uint8 apu_read(uint32 address); +extern void apu_write(uint32 address, uint8 value); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _NES_APU_H_ */ + +/* +** $Log: nes_apu.h,v $ +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.3 2000/12/08 02:36:14 matt +** bye bye apu queue (for now) +** +** Revision 1.2 2000/10/28 15:20:59 matt +** irq callbacks in nes_apu +** +** Revision 1.1 2000/10/24 12:19:59 matt +** changed directory structure +** +** Revision 1.28 2000/10/17 11:56:42 matt +** selectable apu base frequency +** +** Revision 1.27 2000/10/10 13:58:18 matt +** stroustrup squeezing his way in the door +** +** Revision 1.26 2000/09/28 23:20:58 matt +** bye bye, fixed point +** +** Revision 1.25 2000/09/27 12:26:03 matt +** changed sound accumulators back to floats +** +** Revision 1.24 2000/09/18 02:12:55 matt +** more optimizations +** +** Revision 1.23 2000/09/15 13:38:40 matt +** changes for optimized apu core +** +** Revision 1.22 2000/09/15 04:58:07 matt +** simplifying and optimizing APU core +** +** Revision 1.21 2000/08/11 02:27:21 matt +** general cleanups, plus apu_setparams routine +** +** Revision 1.20 2000/07/30 04:32:59 matt +** no more apu_getcyclerate hack +** +** Revision 1.19 2000/07/27 02:49:50 matt +** eccentricity in sweeping hardware now emulated correctly +** +** Revision 1.18 2000/07/25 02:25:15 matt +** safer apu_destroy +** +** Revision 1.17 2000/07/23 15:10:54 matt +** hacks for win32 +** +** Revision 1.16 2000/07/23 00:48:15 neil +** Win32 SDL +** +** Revision 1.15 2000/07/17 01:52:31 matt +** made sure last line of all source files is a newline +** +** Revision 1.14 2000/07/11 02:39:26 matt +** added setcontext() routine +** +** Revision 1.13 2000/07/10 05:29:34 matt +** moved joypad/oam dma from apu to ppu +** +** Revision 1.12 2000/07/04 04:54:48 matt +** minor changes that helped with MAME +** +** Revision 1.11 2000/07/03 02:18:53 matt +** much better external module exporting +** +** Revision 1.10 2000/06/26 05:00:37 matt +** cleanups +** +** Revision 1.9 2000/06/23 03:29:28 matt +** cleaned up external sound inteface +** +** Revision 1.8 2000/06/20 04:06:16 matt +** migrated external sound definition to apu module +** +** Revision 1.7 2000/06/20 00:07:35 matt +** added convenience members to apu_t struct +** +** Revision 1.6 2000/06/09 16:49:02 matt +** removed all floating point from sound generation +** +** Revision 1.5 2000/06/09 15:12:28 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes_emu.c b/MCUME_pico/piconofrendo/nes_emu.c new file mode 100644 index 0000000..0b9106b --- /dev/null +++ b/MCUME_pico/piconofrendo/nes_emu.c @@ -0,0 +1,288 @@ + +#include "emuapi.h" + +#include +#include +#include + +//Nes stuff wants to define this as well... +#undef false +#undef true +#undef bool + +#include "noftypes.h" + + +#include "nes.h" +#include "nofrendo.h" +#include "osd.h" +#include "nesinput.h" +#include "event.h" +#include "nofconfig.h" + +#define DEFAULT_WIDTH 256 +#define DEFAULT_HEIGHT NES_VISIBLE_HEIGHT + + +char configfilename[]="na"; +char romname[64]; + +/* This is os-specific part of main() */ +int osd_main(int argc, char *argv[]) +{ + config.filename = configfilename; + + return main_loop(romname, system_autodetect); +} + +/* File system interface */ +void osd_fullname(char *fullname, const char *shortname) +{ + strncpy(fullname, shortname, 64); +} + +/* This gives filenames for storage of saves */ +char *osd_newextension(char *string, char *ext) +{ + return string; +} + +/* This gives filenames for storage of PCX snapshots */ +int osd_makesnapname(char *filename, int len) +{ + return -1; +} + +#if HAS_SND +static void (*audio_callback)(void *buffer, int length) = NULL; + +void SND_Process( void * stream, int len ) +{ + if (audio_callback != NULL) { + audio_callback(stream,len); + } +} +#endif + +void osd_setsound(void (*playfunc)(void *buffer, int length)) +{ + //Indicates we should call playfunc() to get more data. +#if HAS_SND + audio_callback = playfunc; +#endif +} + +static void osd_stopsound(void) +{ +#if HAS_SND + audio_callback = NULL; +#endif +} + + +static int osd_init_sound(void) +{ +#if HAS_SND + audio_callback = NULL; +#endif + + return 0; +} + +void osd_getsoundinfo(sndinfo_t *info) +{ + info->sample_rate = 22050; + info->bps = 16; +} + + +void osd_getinput(void) +{ + const int ev[16]={ + event_joypad1_select,0,0,event_joypad1_start,event_joypad1_up,event_joypad1_right,event_joypad1_down,event_joypad1_left, + 0,0,0,0,event_soft_reset,event_joypad1_a,event_joypad1_b,event_hard_reset + }; + + int j=emu_ReadKeys(); + int hk = emu_ReadI2CKeyboard(); + int b=0xffff; + + if ( (j & MASK_KEY_USER2) ) // B + b &= ~0x4000; + if ( (j & MASK_KEY_USER3) || (hk == 2) ) // SELECT + b &= ~0x0001; + if ( (j & MASK_KEY_USER1) || (hk == 3) ) // START + b &= ~0x0008; + if (j & MASK_JOY2_UP) + b &= ~0x0010; + if (j & MASK_JOY2_LEFT) + b &= ~0x0020; + if (j & MASK_JOY2_DOWN) + b &= ~0x0040; + if (j & MASK_JOY2_RIGHT) + b &= ~0x0080; + if (j & MASK_JOY2_BTN) // A + b &= ~0x2000; + + + static int oldb=0xffff; + + int chg=b^oldb; + int x; + oldb=b; + event_t evh; + for (x=0; x<16; x++) { + if (chg&1) { + evh=event_get(ev[x]); + if (evh) evh((b&1)?INP_STATE_BREAK:INP_STATE_MAKE); + } + chg>>=1; + b>>=1; + } +} + + +void osd_getmouse(int *x, int *y, int *button) +{ +} + +/* this is at the bottom, to eliminate warnings */ +void osd_shutdown() +{ +} + +int osd_init() +{ + return 0; +} + + +/* +** Video +*/ +static int init(int width, int height) +{ + return 0; +} + +static void shutdown(void) +{ +} + +static int set_mode(int width, int height) +{ + return 0; +} + +static bitmap_t *myBitmap=NULL; +static void set_palette(rgb_t *pal) +{ + int i; + for (i = 0; i < PALETTE_SIZE; i++) + { + emu_SetPaletteEntry(pal[i].r, pal[i].g, pal[i].b,i); + } + +} + +/* clear all frames to a particular color */ +static void clear(uint8 color) +{ +} + +/* acquire the directbuffer for writing */ +static char fb[1]; //dummy +static bitmap_t *lock_write(void) +{ + if (myBitmap == NULL) + myBitmap = bmp_createhw((uint8*)fb, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_WIDTH*2); + + return myBitmap; +} + +/* release the resource */ +static void free_write(int num_dirties, rect_t *dirty_rects) +{ + //bmp_destroy(&myBitmap); +} + + +static void custom_blit(bitmap_t *bmp, int num_dirties, rect_t *dirty_rects) { +} + +static viddriver_t sdlDriver = +{ + "Simple DirectMedia Layer", /* name */ + init, /* init */ + shutdown, /* shutdown */ + set_mode, /* set_mode */ + set_palette, /* set_palette */ + clear, /* clear */ + lock_write, /* lock_write */ + free_write, /* free_write */ + custom_blit, /* custom_blit */ + false /* invalidate flag */ +}; + +void osd_getvideoinfo(vidinfo_t *info) +{ + info->default_width = DEFAULT_WIDTH; + info->default_height = DEFAULT_HEIGHT; + info->driver = &sdlDriver; +} + +void osd_togglefullscreen(int code) +{ +} + +//Seemingly, this will be called only once. Should call func with a freq of frequency, +int osd_installtimer(int frequency, void *func, int funcsize, void *counter, int countersize) +{ + return 0; +} + +char* romdata=NULL; + +char *osd_getromdata() { + + return (char*)romdata; +} + +void emu_KeyboardOnDown(int keymodifer, int key) { +} + +void emu_KeyboardOnUp(int keymodifer, int key) { +} + +void nes_Init(void) +{ +#if HAS_SND + emu_sndInit(); +#endif + nofrendo_main(0, NULL); +} + +void nes_Step(void) +{ + nes_step(emu_FrameSkip()); + //delay(20); + emu_DrawVsync(); +} + +void nes_Start(char * filename) +{ + strcpy(romname,filename); + int romsize = emu_FileSize(filename); + romdata = (char*)emu_Malloc(romsize); + if (romdata) + { + if (emu_FileOpen(filename)) { + if (emu_FileRead((char*)romdata, romsize) != romsize ) { + romdata = NULL; + } + emu_FileClose(); + } else { + romdata = NULL; + } + } +} diff --git a/MCUME_pico/piconofrendo/nes_emu.h b/MCUME_pico/piconofrendo/nes_emu.h new file mode 100644 index 0000000..2ece48c --- /dev/null +++ b/MCUME_pico/piconofrendo/nes_emu.h @@ -0,0 +1,4 @@ +extern void nes_Init(void); +extern void nes_Step(void); +extern void nes_Start(char * filename); + diff --git a/MCUME_pico/piconofrendo/nes_mmc.c b/MCUME_pico/piconofrendo/nes_mmc.c new file mode 100755 index 0000000..b6bad5c --- /dev/null +++ b/MCUME_pico/piconofrendo/nes_mmc.c @@ -0,0 +1,353 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes_mmc.c +** +** NES Memory Management Controller (mapper) emulation +** $Id: nes_mmc.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include +#include "noftypes.h" +#include "nes6502.h" +#include "nes_mmc.h" +#include "nes_ppu.h" +#include "libsnss.h" +#include "log.h" +#include "mmclist.h" +#include "nes_rom.h" + +#define MMC_8KROM (mmc.cart->rom_banks * 2) +#define MMC_16KROM (mmc.cart->rom_banks) +#define MMC_32KROM (mmc.cart->rom_banks / 2) +#define MMC_8KVROM (mmc.cart->vrom_banks) +#define MMC_4KVROM (mmc.cart->vrom_banks * 2) +#define MMC_2KVROM (mmc.cart->vrom_banks * 4) +#define MMC_1KVROM (mmc.cart->vrom_banks * 8) + +#define MMC_LAST8KROM (MMC_8KROM - 1) +#define MMC_LAST16KROM (MMC_16KROM - 1) +#define MMC_LAST32KROM (MMC_32KROM - 1) +#define MMC_LAST8KVROM (MMC_8KVROM - 1) +#define MMC_LAST4KVROM (MMC_4KVROM - 1) +#define MMC_LAST2KVROM (MMC_2KVROM - 1) +#define MMC_LAST1KVROM (MMC_1KVROM - 1) + +static mmc_t mmc; + +rominfo_t *mmc_getinfo(void) +{ + return mmc.cart; +} + +void mmc_setcontext(mmc_t *src_mmc) +{ + ASSERT(src_mmc); + + mmc = *src_mmc; +} + +void mmc_getcontext(mmc_t *dest_mmc) +{ + *dest_mmc = mmc; +} + +/* VROM bankswitching */ +void mmc_bankvrom(int size, uint32 address, int bank) +{ + if (0 == mmc.cart->vrom_banks) + return; + + switch (size) + { + case 1: + if (bank == MMC_LASTBANK) + bank = MMC_LAST1KVROM; + ppu_setpage(1, address >> 10, &mmc.cart->vrom[(bank % MMC_1KVROM) << 10] - address); + break; + + case 2: + if (bank == MMC_LASTBANK) + bank = MMC_LAST2KVROM; + ppu_setpage(2, address >> 10, &mmc.cart->vrom[(bank % MMC_2KVROM) << 11] - address); + break; + + case 4: + if (bank == MMC_LASTBANK) + bank = MMC_LAST4KVROM; + ppu_setpage(4, address >> 10, &mmc.cart->vrom[(bank % MMC_4KVROM) << 12] - address); + break; + + case 8: + if (bank == MMC_LASTBANK) + bank = MMC_LAST8KVROM; + ppu_setpage(8, 0, &mmc.cart->vrom[(bank % MMC_8KVROM) << 13]); + break; + + default: + log_printf("invalid VROM bank size %d\n", size); + } +} + +/* ROM bankswitching */ +void mmc_bankrom(int size, uint32 address, int bank) +{ + nes6502_context mmc_cpu; + + nes6502_getcontext(&mmc_cpu); + + switch (size) + { + case 8: + if (bank == MMC_LASTBANK) + bank = MMC_LAST8KROM; + { + int page = address >> NES6502_BANKSHIFT; + mmc_cpu.mem_page[page] = &mmc.cart->rom[(bank % MMC_8KROM) << 13]; + mmc_cpu.mem_page[page + 1] = mmc_cpu.mem_page[page] + 0x1000; + } + + break; + + case 16: + if (bank == MMC_LASTBANK) + bank = MMC_LAST16KROM; + { + int page = address >> NES6502_BANKSHIFT; + mmc_cpu.mem_page[page] = &mmc.cart->rom[(bank % MMC_16KROM) << 14]; + mmc_cpu.mem_page[page + 1] = mmc_cpu.mem_page[page] + 0x1000; + mmc_cpu.mem_page[page + 2] = mmc_cpu.mem_page[page] + 0x2000; + mmc_cpu.mem_page[page + 3] = mmc_cpu.mem_page[page] + 0x3000; + } + break; + + case 32: + if (bank == MMC_LASTBANK) + bank = MMC_LAST32KROM; + + mmc_cpu.mem_page[8] = &mmc.cart->rom[(bank % MMC_32KROM) << 15]; + mmc_cpu.mem_page[9] = mmc_cpu.mem_page[8] + 0x1000; + mmc_cpu.mem_page[10] = mmc_cpu.mem_page[8] + 0x2000; + mmc_cpu.mem_page[11] = mmc_cpu.mem_page[8] + 0x3000; + mmc_cpu.mem_page[12] = mmc_cpu.mem_page[8] + 0x4000; + mmc_cpu.mem_page[13] = mmc_cpu.mem_page[8] + 0x5000; + mmc_cpu.mem_page[14] = mmc_cpu.mem_page[8] + 0x6000; + mmc_cpu.mem_page[15] = mmc_cpu.mem_page[8] + 0x7000; + break; + + default: + log_printf("invalid ROM bank size %d\n", size); + break; + } + + nes6502_setcontext(&mmc_cpu); +} + +/* Check to see if this mapper is supported */ +bool mmc_peek(int map_num) +{ + mapintf_t **map_ptr = mappers; + + while (NULL != *map_ptr) + { + if ((*map_ptr)->number == map_num) + return true; + map_ptr++; + } + + return false; +} + +static void mmc_setpages(void) +{ + log_printf("setting up mapper %d\n", mmc.intf->number); + + /* Switch ROM into CPU space, set VROM/VRAM (done for ALL ROMs) */ + mmc_bankrom(16, 0x8000, 0); + mmc_bankrom(16, 0xC000, MMC_LASTBANK); + mmc_bankvrom(8, 0x0000, 0); + + if (mmc.cart->flags & ROM_FLAG_FOURSCREEN) + { + ppu_mirror(0, 1, 2, 3); + } + else + { + if (MIRROR_VERT == mmc.cart->mirror) + ppu_mirror(0, 1, 0, 1); + else + ppu_mirror(0, 0, 1, 1); + } + + /* if we have no VROM, switch in VRAM */ + /* TODO: fix this hack implementation */ + if (0 == mmc.cart->vrom_banks) + { + ASSERT(mmc.cart->vram); + + ppu_setpage(8, 0, mmc.cart->vram); + ppu_mirrorhipages(); + } +} + +/* Mapper initialization routine */ +void mmc_reset(void) +{ + mmc_setpages(); + + ppu_setlatchfunc(NULL); + ppu_setvromswitch(NULL); + + if (mmc.intf->init) + mmc.intf->init(); + + log_printf("reset memory mapper\n"); +} + + +void mmc_destroy(mmc_t **nes_mmc) +{ + if (*nes_mmc) + free(*nes_mmc); +} + +mmc_t *mmc_create(rominfo_t *rominfo) +{ + mmc_t *temp; + mapintf_t **map_ptr; + + for (map_ptr = mappers; (*map_ptr)->number != rominfo->mapper_number; map_ptr++) + { + if (NULL == *map_ptr) + return NULL; /* Should *never* happen */ + } + + temp = malloc(sizeof(mmc_t)); + if (NULL == temp) + return NULL; + + memset(temp, 0, sizeof(mmc_t)); + + temp->intf = *map_ptr; + temp->cart = rominfo; + + mmc_setcontext(temp); + + log_printf("created memory mapper: %s\n", (*map_ptr)->name); + + return temp; +} + + +/* +** $Log: nes_mmc.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.4 2000/11/21 13:28:40 matt +** take care to zero allocated mem +** +** Revision 1.3 2000/10/27 12:55:58 matt +** nes6502 now uses 4kB banks across the boards +** +** Revision 1.2 2000/10/25 00:23:16 matt +** makefiles updated for new directory structure +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.28 2000/10/22 19:17:24 matt +** mapper cleanups galore +** +** Revision 1.27 2000/10/22 15:02:32 matt +** simplified mirroring +** +** Revision 1.26 2000/10/21 19:38:56 matt +** that two year old crap code *was* flushed +** +** Revision 1.25 2000/10/21 19:26:59 matt +** many more cleanups +** +** Revision 1.24 2000/10/17 03:22:57 matt +** cleaning up rom module +** +** Revision 1.23 2000/10/10 13:58:15 matt +** stroustrup squeezing his way in the door +** +** Revision 1.22 2000/08/16 02:51:55 matt +** random cleanups +** +** Revision 1.21 2000/07/31 04:27:59 matt +** one million cleanups +** +** Revision 1.20 2000/07/25 02:25:53 matt +** safer xxx_destroy calls +** +** Revision 1.19 2000/07/23 15:11:45 matt +** removed unused variables +** +** Revision 1.18 2000/07/15 23:50:03 matt +** migrated state get/set from nes_mmc.c to state.c +** +** Revision 1.17 2000/07/11 03:15:09 melanson +** Added support for mappers 16, 34, and 231 +** +** Revision 1.16 2000/07/10 05:27:41 matt +** cleaned up mapper-specific callbacks +** +** Revision 1.15 2000/07/10 03:02:49 matt +** minor change on loading state +** +** Revision 1.14 2000/07/06 17:38:49 matt +** replaced missing string.h include +** +** Revision 1.13 2000/07/06 02:47:11 matt +** mapper addition madness +** +** Revision 1.12 2000/07/05 05:04:15 matt +** added more mappers +** +** Revision 1.11 2000/07/04 23:12:58 matt +** brand spankin' new mapper interface implemented +** +** Revision 1.10 2000/07/04 04:56:36 matt +** modifications for new SNSS +** +** Revision 1.9 2000/06/29 14:17:18 matt +** uses snsslib now +** +** Revision 1.8 2000/06/29 03:09:24 matt +** modified to support new snss code +** +** Revision 1.7 2000/06/26 04:57:54 matt +** bugfix - irqs/mmcstate not cleared on reset +** +** Revision 1.6 2000/06/23 11:01:10 matt +** updated for new external sound interface +** +** Revision 1.5 2000/06/20 04:04:57 matt +** hacked to use new external soundchip struct +** +** Revision 1.4 2000/06/09 15:12:26 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes_mmc.h b/MCUME_pico/piconofrendo/nes_mmc.h new file mode 100755 index 0000000..97205d3 --- /dev/null +++ b/MCUME_pico/piconofrendo/nes_mmc.h @@ -0,0 +1,146 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes_mmc.h +** +** NES Memory Management Controller (mapper) defines / prototypes +** $Id: nes_mmc.h,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#ifndef _NES_MMC_H_ +#define _NES_MMC_H_ + +#include "libsnss.h" +#include "nes_apu.h" + +#define MMC_LASTBANK -1 + +typedef struct +{ + uint32 min_range, max_range; + uint8 (*read_func)(uint32 address); +} map_memread; + +typedef struct +{ + uint32 min_range, max_range; + void (*write_func)(uint32 address, uint8 value); +} map_memwrite; + + +typedef struct mapintf_s +{ + int number; + char *name; + void (*init)(void); + void (*vblank)(void); + void (*hblank)(int vblank); + void (*get_state)(SnssMapperBlock *state); + void (*set_state)(SnssMapperBlock *state); + map_memread *mem_read; + map_memwrite *mem_write; + apuext_t *sound_ext; +} mapintf_t; + + +#include "nes_rom.h" +typedef struct mmc_s +{ + mapintf_t *intf; + rominfo_t *cart; /* link it back to the cart */ +} mmc_t; + +extern rominfo_t *mmc_getinfo(void); + +extern void mmc_bankvrom(int size, uint32 address, int bank); +extern void mmc_bankrom(int size, uint32 address, int bank); + +/* Prototypes */ +extern mmc_t *mmc_create(rominfo_t *rominfo); +extern void mmc_destroy(mmc_t **nes_mmc); + +extern void mmc_getcontext(mmc_t *dest_mmc); +extern void mmc_setcontext(mmc_t *src_mmc); + +extern bool mmc_peek(int map_num); + +extern void mmc_reset(void); + +#endif /* _NES_MMC_H_ */ + +/* +** $Log: nes_mmc.h,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.2 2000/10/25 00:23:16 matt +** makefiles updated for new directory structure +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.18 2000/10/22 19:17:24 matt +** mapper cleanups galore +** +** Revision 1.17 2000/10/21 19:26:59 matt +** many more cleanups +** +** Revision 1.16 2000/10/17 03:22:58 matt +** cleaning up rom module +** +** Revision 1.15 2000/10/10 13:58:15 matt +** stroustrup squeezing his way in the door +** +** Revision 1.14 2000/07/31 04:27:59 matt +** one million cleanups +** +** Revision 1.13 2000/07/25 02:25:53 matt +** safer xxx_destroy calls +** +** Revision 1.12 2000/07/17 01:52:28 matt +** made sure last line of all source files is a newline +** +** Revision 1.11 2000/07/15 23:50:03 matt +** migrated state get/set from nes_mmc.c to state.c +** +** Revision 1.10 2000/07/11 02:38:01 matt +** added setcontext() routine +** +** Revision 1.9 2000/07/10 05:27:41 matt +** cleaned up mapper-specific callbacks +** +** Revision 1.8 2000/07/04 23:12:58 matt +** brand spankin' new mapper interface implemented +** +** Revision 1.7 2000/07/04 04:56:36 matt +** modifications for new SNSS +** +** Revision 1.6 2000/06/29 14:17:18 matt +** uses snsslib now +** +** Revision 1.5 2000/06/29 03:09:24 matt +** modified to support new snss code +** +** Revision 1.4 2000/06/09 15:12:26 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes_pal.c b/MCUME_pico/piconofrendo/nes_pal.c new file mode 100644 index 0000000..9d44570 --- /dev/null +++ b/MCUME_pico/piconofrendo/nes_pal.c @@ -0,0 +1,185 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes_pal.c +** +** NES RGB palette +** $Id: nes_pal.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include +#include "noftypes.h" +#include "bitmap.h" +#include "nes_pal.h" + +#ifndef PI +#define PI 3.1415926535897932384626433832795 +#endif + +/* my NES palette, converted to RGB */ +const rgb_t shady_palette[] = +{ + {0x80,0x80,0x80}, {0x00,0x00,0xBB}, {0x37,0x00,0xBF}, {0x84,0x00,0xA6}, + {0xBB,0x00,0x6A}, {0xB7,0x00,0x1E}, {0xB3,0x00,0x00}, {0x91,0x26,0x00}, + {0x7B,0x2B,0x00}, {0x00,0x3E,0x00}, {0x00,0x48,0x0D}, {0x00,0x3C,0x22}, + {0x00,0x2F,0x66}, {0x00,0x00,0x00}, {0x05,0x05,0x05}, {0x05,0x05,0x05}, + + {0xC8,0xC8,0xC8}, {0x00,0x59,0xFF}, {0x44,0x3C,0xFF}, {0xB7,0x33,0xCC}, + {0xFF,0x33,0xAA}, {0xFF,0x37,0x5E}, {0xFF,0x37,0x1A}, {0xD5,0x4B,0x00}, + {0xC4,0x62,0x00}, {0x3C,0x7B,0x00}, {0x1E,0x84,0x15}, {0x00,0x95,0x66}, + {0x00,0x84,0xC4}, {0x11,0x11,0x11}, {0x09,0x09,0x09}, {0x09,0x09,0x09}, + + {0xFF,0xFF,0xFF}, {0x00,0x95,0xFF}, {0x6F,0x84,0xFF}, {0xD5,0x6F,0xFF}, + {0xFF,0x77,0xCC}, {0xFF,0x6F,0x99}, {0xFF,0x7B,0x59}, {0xFF,0x91,0x5F}, + {0xFF,0xA2,0x33}, {0xA6,0xBF,0x00}, {0x51,0xD9,0x6A}, {0x4D,0xD5,0xAE}, + {0x00,0xD9,0xFF}, {0x66,0x66,0x66}, {0x0D,0x0D,0x0D}, {0x0D,0x0D,0x0D}, + + {0xFF,0xFF,0xFF}, {0x84,0xBF,0xFF}, {0xBB,0xBB,0xFF}, {0xD0,0xBB,0xFF}, + {0xFF,0xBF,0xEA}, {0xFF,0xBF,0xCC}, {0xFF,0xC4,0xB7}, {0xFF,0xCC,0xAE}, + {0xFF,0xD9,0xA2}, {0xCC,0xE1,0x99}, {0xAE,0xEE,0xB7}, {0xAA,0xF7,0xEE}, + {0xB3,0xEE,0xFF}, {0xDD,0xDD,0xDD}, {0x11,0x11,0x11}, {0x11,0x11,0x11} +}; + +/* dynamic palette building routines, +** care of Kevin Horton (khorton@iquest.net) +*/ + +/* our global palette */ +rgb_t nes_palette[64]; + + +static float hue = 334.0f; +static float tint = 0.4f; + + +static const float brightness[4][4] = +{ + { 0.50f, 0.75f, 1.00f, 1.00f }, + { 0.29f, 0.45f, 0.73f, 0.90f }, + { 0.00f, 0.24f, 0.47f, 0.77f }, + { 0.02f, 0.04f, 0.05f, 0.07f } +}; + +static const int col_angles[16] = +{ + 0, 240, 210, 180, 150, 120, 90, 60, 30, 0, 330, 300, 270, 0, 0, 0 +}; + +void pal_generate(void) +{ + int x, z; + float s, y, theta; + int r, g, b; + + for (x = 0; x < 4; x++) + { + for (z = 0; z < 16; z++) + { + switch (z) + { + case 0: + /* is color $x0? If so, get luma */ + s = 0; + y = brightness[0][x]; + break; + + case 13: + /* is color $xD? If so, get luma */ + s = 0; + y = brightness[2][x]; + break; + + case 14: + case 15: + /* is color $xE/F? If so, set to black */ + s = 0; + y = brightness[3][x]; + + break; + + default: + s = tint; /* grab tint */ + y = brightness[1][x]; /* grab default luminance */ + break; + } + + theta = (float) (PI * ((col_angles[z] + hue) / 180.0)); + + r = (int) (256.0 * (y + s * sin(theta))); + g = (int) (256.0 * (y - ((27 / 53.0) * s * sin(theta)) + ((10 / 53.0) * s * cos(theta)))); + b = (int) (256.0 * (y - (s * cos(theta)))); + + if (r > 255) + r = 255; + else if (r < 0) + r = 0; + + if (g > 255) + g = 255; + else if (g < 0) + g = 0; + + if (b > 255) + b = 255; + else if (b < 0) + b = 0; + + nes_palette[(x << 4) + z].r = r; + nes_palette[(x << 4) + z].g = g; + nes_palette[(x << 4) + z].b = b; + } + } +} + +/* +** $Log: nes_pal.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.3 2000/11/06 02:17:18 matt +** no more double->float warnings +** +** Revision 1.2 2000/11/05 16:35:41 matt +** rolled rgb.h into bitmap.h +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.9 2000/07/17 01:52:28 matt +** made sure last line of all source files is a newline +** +** Revision 1.8 2000/07/10 13:49:31 matt +** renamed my palette and extern'ed it +** +** Revision 1.7 2000/06/26 04:59:13 matt +** selectable tint/hue hack (just for the time being) +** +** Revision 1.6 2000/06/21 21:48:19 matt +** changed range multiplier from 255.0 to 256.0 +** +** Revision 1.5 2000/06/20 20:42:47 matt +** accuracy changes +** +** Revision 1.4 2000/06/09 15:12:26 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes_pal.h b/MCUME_pico/piconofrendo/nes_pal.h new file mode 100644 index 0000000..eb4828e --- /dev/null +++ b/MCUME_pico/piconofrendo/nes_pal.h @@ -0,0 +1,65 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes_pal.h +** +** NES palette definition +** $Id: nes_pal.h,v 1.1.1.1 2001/04/27 07:03:54 neil Exp $ +*/ + +#ifndef _NESPAL_H_ +#define _NESPAL_H_ + +extern rgb_t nes_palette[]; +extern const rgb_t shady_palette[]; + +extern void pal_generate(void); + +/* TODO: these are temporary hacks */ +extern void pal_dechue(void); +extern void pal_inchue(void); +extern void pal_dectint(void); +extern void pal_inctint(void); + +#endif /* _NESPAL_H_ */ + +/* +** $Log: nes_pal.h,v $ +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.8 2000/07/31 04:27:59 matt +** one million cleanups +** +** Revision 1.7 2000/07/21 04:20:35 matt +** added some nasty externs +** +** Revision 1.6 2000/07/10 13:49:32 matt +** renamed my palette and extern'ed it +** +** Revision 1.5 2000/07/05 17:14:34 neil +** Linux: Act Two, Scene One +** +** Revision 1.4 2000/06/09 15:12:26 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes_ppu.c b/MCUME_pico/piconofrendo/nes_ppu.c new file mode 100644 index 0000000..ac884ca --- /dev/null +++ b/MCUME_pico/piconofrendo/nes_ppu.c @@ -0,0 +1,1340 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes_ppu.c +** +** NES PPU emulation +** $Id: nes_ppu.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include +#include +#include "noftypes.h" +#include "nes_ppu.h" +#include "nes.h" +#include "nes6502.h" +#include "log.h" +#include "nes_mmc.h" + +#include "bitmap.h" +#include "vid_drv.h" +#include "nes_pal.h" +#include "nesinput.h" + + +/* PPU access */ +#define PPU_MEM(x) ppu.page[(x) >> 10][(x)] + +/* Background (color 0) and solid sprite pixel flags */ +#define BG_TRANS 0x80 +#define SP_PIXEL 0x40 +#define BG_CLEAR(V) ((V) & BG_TRANS) +#define BG_SOLID(V) (0 == BG_CLEAR(V)) +#define SP_CLEAR(V) (0 == ((V) & SP_PIXEL)) + +/* Full BG color */ +#define FULLBG (ppu.palette[0] | BG_TRANS) + +/* the NES PPU */ +static ppu_t ppu; + + +void ppu_displaysprites(bool display) +{ + ppu.drawsprites = display; +} + +void ppu_setcontext(ppu_t *src_ppu) +{ + int nametab[4]; + ASSERT(src_ppu); + ppu = *src_ppu; + + /* we can't just copy contexts here, because more than likely, + ** the top 8 pages of the ppu are pointing to internal PPU memory, + ** which means we need to recalculate the page pointers. + ** TODO: we can either get rid of the page pointing in the code, + ** or add more robust checks to make sure that pages 8-15 are + ** definitely pointing to internal PPU RAM, not just something + ** that some crazy mapper paged in. + */ + nametab[0] = (src_ppu->page[8] - src_ppu->nametab + 0x2000) >> 10; + nametab[1] = (src_ppu->page[9] - src_ppu->nametab + 0x2400) >> 10; + nametab[2] = (src_ppu->page[10] - src_ppu->nametab + 0x2800) >> 10; + nametab[3] = (src_ppu->page[11] - src_ppu->nametab + 0x2C00) >> 10; + + ppu.page[8] = ppu.nametab + (nametab[0] << 10) - 0x2000; + ppu.page[9] = ppu.nametab + (nametab[1] << 10) - 0x2400; + ppu.page[10] = ppu.nametab + (nametab[2] << 10) - 0x2800; + ppu.page[11] = ppu.nametab + (nametab[3] << 10) - 0x2C00; + ppu.page[12] = ppu.page[8] - 0x1000; + ppu.page[13] = ppu.page[9] - 0x1000; + ppu.page[14] = ppu.page[10] - 0x1000; + ppu.page[15] = ppu.page[11] - 0x1000; +} + +void ppu_getcontext(ppu_t *dest_ppu) +{ + int nametab[4]; + + ASSERT(dest_ppu); + *dest_ppu = ppu; + + /* we can't just copy contexts here, because more than likely, + ** the top 8 pages of the ppu are pointing to internal PPU memory, + ** which means we need to recalculate the page pointers. + ** TODO: we can either get rid of the page pointing in the code, + ** or add more robust checks to make sure that pages 8-15 are + ** definitely pointing to internal PPU RAM, not just something + ** that some crazy mapper paged in. + */ + nametab[0] = (ppu.page[8] - ppu.nametab + 0x2000) >> 10; + nametab[1] = (ppu.page[9] - ppu.nametab + 0x2400) >> 10; + nametab[2] = (ppu.page[10] - ppu.nametab + 0x2800) >> 10; + nametab[3] = (ppu.page[11] - ppu.nametab + 0x2C00) >> 10; + + dest_ppu->page[8] = dest_ppu->nametab + (nametab[0] << 10) - 0x2000; + dest_ppu->page[9] = dest_ppu->nametab + (nametab[1] << 10) - 0x2400; + dest_ppu->page[10] = dest_ppu->nametab + (nametab[2] << 10) - 0x2800; + dest_ppu->page[11] = dest_ppu->nametab + (nametab[3] << 10) - 0x2C00; + dest_ppu->page[12] = dest_ppu->page[8] - 0x1000; + dest_ppu->page[13] = dest_ppu->page[9] - 0x1000; + dest_ppu->page[14] = dest_ppu->page[10] - 0x1000; + dest_ppu->page[15] = dest_ppu->page[11] - 0x1000; +} + +ppu_t *ppu_create(void) +{ + static bool pal_generated = false; + ppu_t *temp; + + temp = malloc(sizeof(ppu_t)); + if (NULL == temp) + return NULL; + + memset(temp, 0, sizeof(ppu_t)); + + temp->latchfunc = NULL; + temp->vromswitch = NULL; + temp->vram_present = false; + temp->drawsprites = true; + + /* TODO: probably a better way to do this... */ + if (false == pal_generated) + { + pal_generate(); + pal_generated = true; + } + + ppu_setdefaultpal(temp); + + return temp; +} + +void ppu_destroy(ppu_t **src_ppu) +{ + if (*src_ppu) + { + free(*src_ppu); + *src_ppu = NULL; + } +} + +void ppu_setpage(int size, int page_num, uint8 *location) +{ + /* deliberately fall through */ + switch (size) + { + case 8: + ppu.page[page_num++] = location; + ppu.page[page_num++] = location; + ppu.page[page_num++] = location; + ppu.page[page_num++] = location; + case 4: + ppu.page[page_num++] = location; + ppu.page[page_num++] = location; + case 2: + ppu.page[page_num++] = location; + case 1: + ppu.page[page_num++] = location; + break; + } +} + +/* make sure $3000-$3F00 mirrors $2000-$2F00 */ +void ppu_mirrorhipages(void) +{ + ppu.page[12] = ppu.page[8] - 0x1000; + ppu.page[13] = ppu.page[9] - 0x1000; + ppu.page[14] = ppu.page[10] - 0x1000; + ppu.page[15] = ppu.page[11] - 0x1000; +} + +void ppu_mirror(int nt1, int nt2, int nt3, int nt4) +{ + ppu.page[8] = ppu.nametab + (nt1 << 10) - 0x2000; + ppu.page[9] = ppu.nametab + (nt2 << 10) - 0x2400; + ppu.page[10] = ppu.nametab + (nt3 << 10) - 0x2800; + ppu.page[11] = ppu.nametab + (nt4 << 10) - 0x2C00; + ppu.page[12] = ppu.page[8] - 0x1000; + ppu.page[13] = ppu.page[9] - 0x1000; + ppu.page[14] = ppu.page[10] - 0x1000; + ppu.page[15] = ppu.page[11] - 0x1000; +} + +/* bleh, for snss */ +uint8 *ppu_getpage(int page) +{ + return ppu.page[page]; +} + +static void mem_trash(uint8 *buffer, int length) +{ + int i; + + for (i = 0; i < length; i++) + buffer[i] = (uint8) rand(); +} + +/* reset state of ppu */ +void ppu_reset(int reset_type) +{ + if (HARD_RESET == reset_type) + mem_trash(ppu.oam, 256); + + ppu.ctrl0 = 0; + ppu.ctrl1 = PPU_CTRL1F_OBJON | PPU_CTRL1F_BGON; + ppu.stat = 0; + ppu.flipflop = 0; + ppu.vaddr = ppu.vaddr_latch = 0x2000; + ppu.oam_addr = 0; + ppu.tile_xofs = 0; + + ppu.latch = 0; + ppu.vram_accessible = true; +} + +/* we render a scanline of graphics first so we know exactly +** where the sprite 0 strike is going to occur (in terms of +** cpu cycles), using the relation that 3 pixels == 1 cpu cycle +*/ +static void ppu_setstrike(int x_loc) +{ + if (false == ppu.strikeflag) + { + ppu.strikeflag = true; + + /* 3 pixels per cpu cycle */ + ppu.strike_cycle = nes6502_getcycles(false) + (x_loc / 3); + } +} + +static void ppu_oamdma(uint8 value) +{ + uint32 cpu_address; + uint8 oam_loc; + + cpu_address = (uint32) (value << 8); + + /* Sprite DMA starts at the current SPRRAM address */ + oam_loc = ppu.oam_addr; + do + { + ppu.oam[oam_loc++] = nes6502_getbyte(cpu_address++); + } + while (oam_loc != ppu.oam_addr); + + /* TODO: enough with houdini */ + cpu_address -= 256; + /* Odd address in $2003 */ + if ((ppu.oam_addr >> 2) & 1) + { + for (oam_loc = 4; oam_loc < 8; oam_loc++) + ppu.oam[oam_loc] = nes6502_getbyte(cpu_address++); + cpu_address += 248; + for (oam_loc = 0; oam_loc < 4; oam_loc++) + ppu.oam[oam_loc] = nes6502_getbyte(cpu_address++); + } + /* Even address in $2003 */ + else + { + for (oam_loc = 0; oam_loc < 8; oam_loc++) + ppu.oam[oam_loc] = nes6502_getbyte(cpu_address++); + } + + /* make the CPU spin for DMA cycles */ + nes6502_burn(513); + nes6502_release(); +} + +/* TODO: this isn't the PPU! */ +void ppu_writehigh(uint32 address, uint8 value) +{ + switch (address) + { + case PPU_OAMDMA: + ppu_oamdma(value); + break; + + case PPU_JOY0: + /* VS system VROM switching - bleh!*/ + if (ppu.vromswitch) + ppu.vromswitch(value); + + /* see if we need to strobe them joypads */ + value &= 1; + + if (0 == value && ppu.strobe) + input_strobe(); + + ppu.strobe = value; + break; + + case PPU_JOY1: /* frame IRQ control */ + nes_setfiq(value); + break; + + default: + break; + } +} + +/* TODO: this isn't the PPU! */ +uint8 ppu_readhigh(uint32 address) +{ + uint8 value; + + switch (address) + { + case PPU_JOY0: + value = input_get(INP_JOYPAD0); + break; + + case PPU_JOY1: + /* TODO: better input handling */ + value = input_get(INP_ZAPPER | INP_JOYPAD1 + /*| INP_ARKANOID*/ + /*| INP_POWERPAD*/); + break; + + default: + value = 0xFF; + break; + } + + return value; +} + +/* Read from $2000-$2007 */ +uint8 ppu_read(uint32 address) +{ + uint8 value; + + /* handle mirrored reads up to $3FFF */ + switch (address & 0x2007) + { + case PPU_STAT: + value = (ppu.stat & 0xE0) | (ppu.latch & 0x1F); + + if (ppu.strikeflag) + { + if (nes6502_getcycles(false) >= ppu.strike_cycle) + value |= PPU_STATF_STRIKE; + } + + /* clear both vblank flag and vram address flipflop */ + ppu.stat &= ~PPU_STATF_VBLANK; + ppu.flipflop = 0; + break; + + case PPU_VDATA: + /* buffered VRAM reads */ + value = ppu.latch = ppu.vdata_latch; + + /* VRAM only accessible during VBL */ + if ((ppu.bg_on || ppu.obj_on) && !ppu.vram_accessible) + { + ppu.vdata_latch = 0xFF; + log_printf("VRAM read at $%04X, scanline %d\n", + ppu.vaddr, nes_getcontextptr()->scanline); + } + else + { + uint32 addr = ppu.vaddr; + if (addr >= 0x3000) + addr -= 0x1000; + ppu.vdata_latch = PPU_MEM(addr); + } + + ppu.vaddr += ppu.vaddr_inc; + ppu.vaddr &= 0x3FFF; + break; + + case PPU_OAMDATA: + case PPU_CTRL0: + case PPU_CTRL1: + case PPU_OAMADDR: + case PPU_SCROLL: + case PPU_VADDR: + default: + value = ppu.latch; + break; + } + + return value; +} + +/* Write to $2000-$2007 */ +void ppu_write(uint32 address, uint8 value) +{ + /* write goes into ppu latch... */ + ppu.latch = value; + + switch (address & 0x2007) + { + case PPU_CTRL0: + ppu.ctrl0 = value; + + ppu.obj_height = (value & PPU_CTRL0F_OBJ16) ? 16 : 8; + ppu.bg_base = (value & PPU_CTRL0F_BGADDR) ? 0x1000 : 0; + ppu.obj_base = (value & PPU_CTRL0F_OBJADDR) ? 0x1000 : 0; + ppu.vaddr_inc = (value & PPU_CTRL0F_ADDRINC) ? 32 : 1; + ppu.tile_nametab = value & PPU_CTRL0F_NAMETAB; + + /* Mask out bits 10 & 11 in the ppu latch */ + ppu.vaddr_latch &= ~0x0C00; + ppu.vaddr_latch |= ((value & 3) << 10); + break; + + case PPU_CTRL1: + ppu.ctrl1 = value; + + ppu.obj_on = (value & PPU_CTRL1F_OBJON) ? true : false; + ppu.bg_on = (value & PPU_CTRL1F_BGON) ? true : false; + ppu.obj_mask = (value & PPU_CTRL1F_OBJMASK) ? false : true; + ppu.bg_mask = (value & PPU_CTRL1F_BGMASK) ? false : true; + break; + + case PPU_OAMADDR: + ppu.oam_addr = value; + break; + + case PPU_OAMDATA: + ppu.oam[ppu.oam_addr++] = value; + break; + + case PPU_SCROLL: + if (0 == ppu.flipflop) + { + /* Mask out bits 4 - 0 in the ppu latch */ + ppu.vaddr_latch &= ~0x001F; + ppu.vaddr_latch |= (value >> 3); /* Tile number */ + ppu.tile_xofs = (value & 7); /* Tile offset (0-7 pix) */ + } + else + { + /* Mask out bits 14-12 and 9-5 in the ppu latch */ + ppu.vaddr_latch &= ~0x73E0; + ppu.vaddr_latch |= ((value & 0xF8) << 2); /* Tile number */ + ppu.vaddr_latch |= ((value & 7) << 12); /* Tile offset (0-7 pix) */ + } + + ppu.flipflop ^= 1; + + break; + + case PPU_VADDR: + if (0 == ppu.flipflop) + { + /* Mask out bits 15-8 in ppu latch */ + ppu.vaddr_latch &= ~0xFF00; + ppu.vaddr_latch |= ((value & 0x3F) << 8); + } + else + { + /* Mask out bits 7-0 in ppu latch */ + ppu.vaddr_latch &= ~0x00FF; + ppu.vaddr_latch |= value; + ppu.vaddr = ppu.vaddr_latch; + } + + ppu.flipflop ^= 1; + + break; + + case PPU_VDATA: + if (ppu.vaddr < 0x3F00) + { + /* VRAM only accessible during scanlines 241-260 */ + if ((ppu.bg_on || ppu.obj_on) && !ppu.vram_accessible) + { + log_printf("VRAM write to $%04X, scanline %d\n", + ppu.vaddr, nes_getcontextptr()->scanline); + PPU_MEM(ppu.vaddr) = 0xFF; /* corrupt */ + } + else + { + uint32 addr = ppu.vaddr; + + if (false == ppu.vram_present && addr >= 0x3000) + ppu.vaddr -= 0x1000; + + PPU_MEM(addr) = value; + } + } + else + { + if (0 == (ppu.vaddr & 0x0F)) + { + int i; + + for (i = 0; i < 8; i ++) + ppu.palette[i << 2] = (value & 0x3F) | BG_TRANS; + } + else if (ppu.vaddr & 3) + { + ppu.palette[ppu.vaddr & 0x1F] = value & 0x3F; + } + } + + ppu.vaddr += ppu.vaddr_inc; + ppu.vaddr &= 0x3FFF; + break; + + default: + break; + } +} + +/* Builds a 256 color 8-bit palette based on a 64-color NES palette +** Note that we set it up 3 times so that we flip bits on the primary +** NES buffer for priorities +*/ +static void ppu_buildpalette(ppu_t *src_ppu, rgb_t *pal) +{ + int i; + + /* Set it up 3 times, for sprite priority/BG transparency trickery */ + for (i = 0; i < 64; i++) + { + src_ppu->curpal[i].r = src_ppu->curpal[i + 64].r + = src_ppu->curpal[i + 128].r = pal[i].r; + src_ppu->curpal[i].g = src_ppu->curpal[i + 64].g + = src_ppu->curpal[i + 128].g = pal[i].g; + src_ppu->curpal[i].b = src_ppu->curpal[i + 64].b + = src_ppu->curpal[i + 128].b = pal[i].b; + } +} + +/* build the emulator specific palette based on a 64-entry palette +** input palette can be either nes_palette or a 64-entry RGB palette +** read in from disk (i.e. for VS games) +*/ +void ppu_setpal(ppu_t *src_ppu, rgb_t *pal) +{ + ppu_buildpalette(src_ppu, pal); + vid_setpalette(src_ppu->curpal); +} + +void ppu_setdefaultpal(ppu_t *src_ppu) +{ + ppu_setpal(src_ppu, nes_palette); +} + +void ppu_setlatchfunc(ppulatchfunc_t func) +{ + ppu.latchfunc = func; +} + +void ppu_setvromswitch(ppuvromswitch_t func) +{ + ppu.vromswitch = func; +} + +/* rendering routines */ +INLINE void draw_bgtile(uint8 *surface, uint8 pat1, uint8 pat2, + const uint8 *colors) +{ + uint32 pattern = ((pat2 & 0xAA) << 8) | ((pat2 & 0x55) << 1) + | ((pat1 & 0xAA) << 7) | (pat1 & 0x55); + + *surface++ = colors[(pattern >> 14) & 3]; + *surface++ = colors[(pattern >> 6) & 3]; + *surface++ = colors[(pattern >> 12) & 3]; + *surface++ = colors[(pattern >> 4) & 3]; + *surface++ = colors[(pattern >> 10) & 3]; + *surface++ = colors[(pattern >> 2) & 3]; + *surface++ = colors[(pattern >> 8) & 3]; + *surface = colors[pattern & 3]; +} + +INLINE int draw_oamtile(uint8 *surface, uint8 attrib, uint8 pat1, + uint8 pat2, const uint8 *col_tbl, bool check_strike) +{ + int strike_pixel = -1; + uint32 color = ((pat2 & 0xAA) << 8) | ((pat2 & 0x55) << 1) + | ((pat1 & 0xAA) << 7) | (pat1 & 0x55); + + /* sprite is not 100% transparent */ + if (color) + { + uint8 colors[8]; + + /* swap pixels around if our tile is flipped */ + if (0 == (attrib & OAMF_HFLIP)) + { + colors[0] = (color >> 14) & 3; + colors[1] = (color >> 6) & 3; + colors[2] = (color >> 12) & 3; + colors[3] = (color >> 4) & 3; + colors[4] = (color >> 10) & 3; + colors[5] = (color >> 2) & 3; + colors[6] = (color >> 8) & 3; + colors[7] = color & 3; + } + else + { + colors[7] = (color >> 14) & 3; + colors[6] = (color >> 6) & 3; + colors[5] = (color >> 12) & 3; + colors[4] = (color >> 4) & 3; + colors[3] = (color >> 10) & 3; + colors[2] = (color >> 2) & 3; + colors[1] = (color >> 8) & 3; + colors[0] = color & 3; + } + + /* check for solid sprite pixel overlapping solid bg pixel */ + if (check_strike) + { + if (colors[0] && BG_SOLID(surface[0])) + strike_pixel = 0; + else if (colors[1] && BG_SOLID(surface[1])) + strike_pixel = 1; + else if (colors[2] && BG_SOLID(surface[2])) + strike_pixel = 2; + else if (colors[3] && BG_SOLID(surface[3])) + strike_pixel = 3; + else if (colors[4] && BG_SOLID(surface[4])) + strike_pixel = 4; + else if (colors[5] && BG_SOLID(surface[5])) + strike_pixel = 5; + else if (colors[6] && BG_SOLID(surface[6])) + strike_pixel = 6; + else if (colors[7] && BG_SOLID(surface[7])) + strike_pixel = 7; + } + + /* draw the character */ + if (attrib & OAMF_BEHIND) + { + if (colors[0]) + surface[0] = SP_PIXEL | (BG_CLEAR(surface[0]) ? col_tbl[colors[0]] : surface[0]); + if (colors[1]) + surface[1] = SP_PIXEL | (BG_CLEAR(surface[1]) ? col_tbl[colors[1]] : surface[1]); + if (colors[2]) + surface[2] = SP_PIXEL | (BG_CLEAR(surface[2]) ? col_tbl[colors[2]] : surface[2]); + if (colors[3]) + surface[3] = SP_PIXEL | (BG_CLEAR(surface[3]) ? col_tbl[colors[3]] : surface[3]); + if (colors[4]) + surface[4] = SP_PIXEL | (BG_CLEAR(surface[4]) ? col_tbl[colors[4]] : surface[4]); + if (colors[5]) + surface[5] = SP_PIXEL | (BG_CLEAR(surface[5]) ? col_tbl[colors[5]] : surface[5]); + if (colors[6]) + surface[6] = SP_PIXEL | (BG_CLEAR(surface[6]) ? col_tbl[colors[6]] : surface[6]); + if (colors[7]) + surface[7] = SP_PIXEL | (BG_CLEAR(surface[7]) ? col_tbl[colors[7]] : surface[7]); + } + else + { + if (colors[0] && SP_CLEAR(surface[0])) + surface[0] = SP_PIXEL | col_tbl[colors[0]]; + if (colors[1] && SP_CLEAR(surface[1])) + surface[1] = SP_PIXEL | col_tbl[colors[1]]; + if (colors[2] && SP_CLEAR(surface[2])) + surface[2] = SP_PIXEL | col_tbl[colors[2]]; + if (colors[3] && SP_CLEAR(surface[3])) + surface[3] = SP_PIXEL | col_tbl[colors[3]]; + if (colors[4] && SP_CLEAR(surface[4])) + surface[4] = SP_PIXEL | col_tbl[colors[4]]; + if (colors[5] && SP_CLEAR(surface[5])) + surface[5] = SP_PIXEL | col_tbl[colors[5]]; + if (colors[6] && SP_CLEAR(surface[6])) + surface[6] = SP_PIXEL | col_tbl[colors[6]]; + if (colors[7] && SP_CLEAR(surface[7])) + surface[7] = SP_PIXEL | col_tbl[colors[7]]; + } + } + + return strike_pixel; +} + +static void ppu_renderbg(uint8 *vidbuf) +{ + uint8 *bmp_ptr, *data_ptr, *tile_ptr, *attrib_ptr; + uint32 refresh_vaddr, bg_offset, attrib_base; + int tile_count; + uint8 tile_index, x_tile, y_tile; + uint8 col_high, attrib, attrib_shift; + + /* draw a line of transparent background color if bg is disabled */ + if (false == ppu.bg_on) + { + memset(vidbuf, FULLBG, NES_SCREEN_WIDTH); + return; + } + + bmp_ptr = vidbuf - ppu.tile_xofs; /* scroll x */ + refresh_vaddr = 0x2000 + (ppu.vaddr & 0x0FE0); /* mask out x tile */ + x_tile = ppu.vaddr & 0x1F; + y_tile = (ppu.vaddr >> 5) & 0x1F; /* to simplify calculations */ + bg_offset = ((ppu.vaddr >> 12) & 7) + ppu.bg_base; /* offset in y tile */ + + /* calculate initial values */ + tile_ptr = &PPU_MEM(refresh_vaddr + x_tile); /* pointer to tile index */ + attrib_base = (refresh_vaddr & 0x2C00) + 0x3C0 + ((y_tile & 0x1C) << 1); + attrib_ptr = &PPU_MEM(attrib_base + (x_tile >> 2)); + attrib = *attrib_ptr++; + attrib_shift = (x_tile & 2) + ((y_tile & 2) << 1); + col_high = ((attrib >> attrib_shift) & 3) << 2; + + /* ppu fetches 33 tiles */ + tile_count = 33; + while (tile_count--) + { + /* Tile number from nametable */ + tile_index = *tile_ptr++; + data_ptr = &PPU_MEM(bg_offset + (tile_index << 4)); + + /* Handle $FD/$FE tile VROM switching (PunchOut) */ + if (ppu.latchfunc) + ppu.latchfunc(ppu.bg_base, tile_index); + + draw_bgtile(bmp_ptr, data_ptr[0], data_ptr[8], ppu.palette + col_high); + bmp_ptr += 8; + + x_tile++; + + if (0 == (x_tile & 1)) /* check every 2 tiles */ + { + if (0 == (x_tile & 3)) /* check every 4 tiles */ + { + if (32 == x_tile) /* check every 32 tiles */ + { + x_tile = 0; + refresh_vaddr ^= (1 << 10); /* switch nametable */ + attrib_base ^= (1 << 10); + + /* recalculate pointers */ + tile_ptr = &PPU_MEM(refresh_vaddr); + attrib_ptr = &PPU_MEM(attrib_base); + } + + /* Get the attribute byte */ + attrib = *attrib_ptr++; + } + + attrib_shift ^= 2; + col_high = ((attrib >> attrib_shift) & 3) << 2; + } + } + + /* Blank left hand column if need be */ + if (ppu.bg_mask) + { + uint32 *buf_ptr = (uint32 *) vidbuf; + uint32 bg_clear = FULLBG | FULLBG << 8 | FULLBG << 16 | FULLBG << 24; + + ((uint32 *) buf_ptr)[0] = bg_clear; + ((uint32 *) buf_ptr)[1] = bg_clear; + } +} + +/* OAM entry */ +typedef struct obj_s +{ + uint8 y_loc; + uint8 tile; + uint8 atr; + uint8 x_loc; +} obj_t; + +/* TODO: fetch valid OAM a scanline before, like the Real Thing */ +static void ppu_renderoam(uint8 *vidbuf, int scanline) +{ + uint8 *buf_ptr; + uint32 vram_offset, savecol[2]; + int sprite_num, spritecount; + obj_t *sprite_ptr; + uint8 sprite_height; + + if (false == ppu.obj_on) + return; + + /* Get our buffer pointer */ + buf_ptr = vidbuf; + + /* Save left hand column? */ + if (ppu.obj_mask) + { + savecol[0] = ((uint32 *) buf_ptr)[0]; + savecol[1] = ((uint32 *) buf_ptr)[1]; + } + + sprite_height = ppu.obj_height; + vram_offset = ppu.obj_base; + spritecount = 0; + + sprite_ptr = (obj_t *) ppu.oam; + + for (sprite_num = 0; sprite_num < 64; sprite_num++, sprite_ptr++) + { + uint8 *data_ptr, *bmp_ptr; + uint32 vram_adr; + int y_offset; + uint8 tile_index, attrib, col_high; + uint8 sprite_y, sprite_x; + bool check_strike; + int strike_pixel; + + sprite_y = sprite_ptr->y_loc + 1; + + /* Check to see if sprite is out of range */ + if ((sprite_y > scanline) || (sprite_y <= (scanline - sprite_height)) + || (0 == sprite_y) || (sprite_y >= 240)) + continue; + + sprite_x = sprite_ptr->x_loc; + tile_index = sprite_ptr->tile; + attrib = sprite_ptr->atr; + + bmp_ptr = buf_ptr + sprite_x; + + /* Handle $FD/$FE tile VROM switching (PunchOut) */ + if (ppu.latchfunc) + ppu.latchfunc(vram_offset, tile_index); + + /* Get upper two bits of color */ + col_high = ((attrib & 3) << 2); + + /* 8x16 even sprites use $0000, odd use $1000 */ + if (16 == ppu.obj_height) + vram_adr = ((tile_index & 1) << 12) | ((tile_index & 0xFE) << 4); + else + vram_adr = vram_offset + (tile_index << 4); + + /* Get the address of the tile */ + data_ptr = &PPU_MEM(vram_adr); + + /* Calculate offset (line within the sprite) */ + y_offset = scanline - sprite_y; + if (y_offset > 7) + y_offset += 8; + + /* Account for vertical flippage */ + if (attrib & OAMF_VFLIP) + { + if (16 == ppu.obj_height) + y_offset -= 23; + else + y_offset -= 7; + + data_ptr -= y_offset; + } + else + { + data_ptr += y_offset; + } + + /* if we're on sprite 0 and sprite 0 strike flag isn't set, + ** check for a strike + */ + check_strike = (0 == sprite_num) && (false == ppu.strikeflag); + strike_pixel = draw_oamtile(bmp_ptr, attrib, data_ptr[0], data_ptr[8], ppu.palette + 16 + col_high, check_strike); + if (strike_pixel >= 0) + ppu_setstrike(strike_pixel); + + /* maximum of 8 sprites per scanline */ + if (++spritecount == PPU_MAXSPRITE) + { + ppu.stat |= PPU_STATF_MAXSPRITE; + break; + } + } + + /* Restore lefthand column */ + if (ppu.obj_mask) + { + ((uint32 *) buf_ptr)[0] = savecol[0]; + ((uint32 *) buf_ptr)[1] = savecol[1]; + } +} + +/* Fake rendering a line */ +/* This is needed for sprite 0 hits when we're skipping drawing a frame */ +static void ppu_fakeoam(int scanline) +{ + uint8 *data_ptr; + obj_t *sprite_ptr; + uint32 vram_adr, color; + int y_offset; + uint8 pat1, pat2; + uint8 tile_index, attrib; + uint8 sprite_height, sprite_y, sprite_x; + + /* we don't need to be here if strike flag is set */ + + if (false == ppu.obj_on || ppu.strikeflag) + return; + + sprite_height = ppu.obj_height; + sprite_ptr = (obj_t *) ppu.oam; + sprite_y = sprite_ptr->y_loc + 1; + + /* Check to see if sprite is out of range */ + if ((sprite_y > scanline) || (sprite_y <= (scanline - sprite_height)) + || (0 == sprite_y) || (sprite_y > 240)) + return; + + sprite_x = sprite_ptr->x_loc; + tile_index = sprite_ptr->tile; + attrib = sprite_ptr->atr; + + /* 8x16 even sprites use $0000, odd use $1000 */ + if (16 == ppu.obj_height) + vram_adr = ((tile_index & 1) << 12) | ((tile_index & 0xFE) << 4); + else + vram_adr = ppu.obj_base + (tile_index << 4); + + data_ptr = &PPU_MEM(vram_adr); + + /* Calculate offset (line within the sprite) */ + y_offset = scanline - sprite_y; + if (y_offset > 7) + y_offset += 8; + + /* Account for vertical flippage */ + if (attrib & OAMF_VFLIP) + { + if (16 == ppu.obj_height) + y_offset -= 23; + else + y_offset -= 7; + data_ptr -= y_offset; + } + else + { + data_ptr += y_offset; + } + + /* check for a solid sprite 0 pixel */ + pat1 = data_ptr[0]; + pat2 = data_ptr[8]; + color = ((pat2 & 0xAA) << 8) | ((pat2 & 0x55) << 1) + | ((pat1 & 0xAA) << 7) | (pat1 & 0x55); + + if (color) + { + uint8 colors[8]; + + /* buckle up, it's going to get ugly... */ + if (0 == (attrib & OAMF_HFLIP)) + { + colors[0] = (color >> 14) & 3; + colors[1] = (color >> 6) & 3; + colors[2] = (color >> 12) & 3; + colors[3] = (color >> 4) & 3; + colors[4] = (color >> 10) & 3; + colors[5] = (color >> 2) & 3; + colors[6] = (color >> 8) & 3; + colors[7] = color & 3; + } + else + { + colors[7] = (color >> 14) & 3; + colors[6] = (color >> 6) & 3; + colors[5] = (color >> 12) & 3; + colors[4] = (color >> 4) & 3; + colors[3] = (color >> 10) & 3; + colors[2] = (color >> 2) & 3; + colors[1] = (color >> 8) & 3; + colors[0] = color & 3; + } + + if (colors[0]) + ppu_setstrike(sprite_x + 0); + else if (colors[1]) + ppu_setstrike(sprite_x + 1); + else if (colors[2]) + ppu_setstrike(sprite_x + 2); + else if (colors[3]) + ppu_setstrike(sprite_x + 3); + else if (colors[4]) + ppu_setstrike(sprite_x + 4); + else if (colors[5]) + ppu_setstrike(sprite_x + 5); + else if (colors[6]) + ppu_setstrike(sprite_x + 6); + else if (colors[7]) + ppu_setstrike(sprite_x + 7); + } +} + +bool ppu_enabled(void) +{ + return (ppu.bg_on || ppu.obj_on); +} + +static uint8 line[320]; + +static void ppu_renderscanline(bitmap_t *bmp, int scanline, bool draw_flag) +{ + uint8 *buf = &line[0]; //bmp->line[scanline]; + + /* start scanline - transfer ppu latch into vaddr */ + if (ppu.bg_on || ppu.obj_on) + { + if (0 == scanline) + { + ppu.vaddr = ppu.vaddr_latch; + } + else + { + ppu.vaddr &= ~0x041F; + ppu.vaddr |= (ppu.vaddr_latch & 0x041F); + } + } + + if (draw_flag) + ppu_renderbg(buf); + + /* TODO: fetch obj data 1 scanline before */ + if (true == ppu.drawsprites && true == draw_flag) + ppu_renderoam(buf, scanline); + else + ppu_fakeoam(scanline); + + if (draw_flag) + emu_DrawLine(buf, 256, 240, scanline); +} + + +void ppu_endscanline(int scanline) +{ + /* modify vram address at end of scanline */ + if (scanline < 240 && (ppu.bg_on || ppu.obj_on)) + { + int ytile; + + /* check for max 3 bit y tile offset */ + if (7 == (ppu.vaddr >> 12)) + { + ppu.vaddr &= ~0x7000; /* clear y tile offset */ + ytile = (ppu.vaddr >> 5) & 0x1F; + + if (29 == ytile) + { + ppu.vaddr &= ~0x03E0; /* clear y tile */ + ppu.vaddr ^= 0x0800; /* toggle nametable */ + } + else if (31 == ytile) + { + ppu.vaddr &= ~0x03E0; /* clear y tile */ + } + else + { + ppu.vaddr += 0x20; /* increment y tile */ + } + } + else + { + ppu.vaddr += 0x1000; /* increment tile y offset */ + } + } +} + +void ppu_checknmi(void) +{ + if (ppu.ctrl0 & PPU_CTRL0F_NMI) + nes_nmi(); +} + +void ppu_scanline(bitmap_t *bmp, int scanline, bool draw_flag) +{ + if (scanline < 240) + { + /* Lower the Max Sprite per scanline flag */ + ppu.stat &= ~PPU_STATF_MAXSPRITE; + ppu_renderscanline(bmp, scanline, draw_flag); + } + else if (241 == scanline) + { + ppu.stat |= PPU_STATF_VBLANK; + ppu.vram_accessible = true; + } + else if (261 == scanline) + { + ppu.stat &= ~PPU_STATF_VBLANK; + ppu.strikeflag = false; + ppu.strike_cycle = (uint32) -1; + + ppu.vram_accessible = false; + } +} + + + +/* Stuff for the OAM viewer */ +static void draw_sprite(bitmap_t *bmp, int x, int y, uint8 tile_num, uint8 attrib) +{ + int line, height; + int col_high, vram_adr; + uint8 *vid, *data_ptr; + + vid = bmp->line[y] + x; + + /* Get upper two bits of color */ + col_high = ((attrib & 3) << 2); + + /* 8x16 even sprites use $0000, odd use $1000 */ + height = ppu.obj_height; + if (16 == height) + vram_adr = ((tile_num & 1) << 12) | ((tile_num & 0xFE) << 4); + /* else just use the offset from $2000 */ + else + vram_adr = ppu.obj_base + (tile_num << 4); + + data_ptr = &PPU_MEM(vram_adr); + + for (line = 0; line < height; line++) + { + if (line == 8) + data_ptr += 8; + + draw_bgtile(vid, data_ptr[0], data_ptr[8], ppu.palette + 16 + col_high); + //draw_oamtile(vid, attrib, data_ptr[0], data_ptr[8], ppu.palette + 16 + col_high); + + data_ptr++; + vid += bmp->pitch; + } +} + +void ppu_dumpoam(bitmap_t *bmp, int x_loc, int y_loc) +{ + int sprite, x_pos, y_pos, height; + obj_t *spr_ptr; + + spr_ptr = (obj_t *) ppu.oam; + height = ppu.obj_height; + + for (sprite = 0; sprite < 64; sprite++) + { + x_pos = ((sprite & 0x0F) << 3) + (sprite & 0x0F) + x_loc; + if (height == 16) + y_pos = (sprite & 0xF0) + (sprite >> 4) + y_loc; + else + y_pos = ((sprite & 0xF0) >> 1) + (sprite >> 4) + y_loc; + + draw_box(bmp, x_pos, y_pos, height); + + if (spr_ptr->y_loc && spr_ptr->y_loc < 240) + draw_sprite(bmp, x_pos + 1, y_pos + 1, spr_ptr->tile, spr_ptr->atr); + else + draw_deadsprite(bmp, x_pos + 1, y_pos + 1, height); + + spr_ptr++; + } +} + +/* More of a debugging thing than anything else */ +void ppu_dumppattern(bitmap_t *bmp, int table_num, int x_loc, int y_loc, int col) +{ + int x_tile, y_tile; + uint8 *bmp_ptr, *data_ptr, *ptr; + int tile_num, line; + uint8 col_high; + + tile_num = 0; + col_high = col << 2; + + for (y_tile = 0; y_tile < 16; y_tile++) + { + /* Get our pointer to the bitmap */ + bmp_ptr = bmp->line[y_loc] + x_loc; + + for (x_tile = 0; x_tile < 16; x_tile++) + { + data_ptr = &PPU_MEM((table_num << 12) + (tile_num << 4)); + ptr = bmp_ptr; + + for (line = 0; line < 8; line ++) + { + draw_bgtile(ptr, data_ptr[0], data_ptr[8], ppu.palette + col_high); + data_ptr++; + ptr += bmp->pitch; + } + + bmp_ptr += 8; + tile_num++; + } + y_loc += 8; + } +} + +/* +** $Log: nes_ppu.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.14 2000/11/29 12:58:23 matt +** timing/fiq fixes +** +** Revision 1.13 2000/11/27 19:36:15 matt +** more timing fixes +** +** Revision 1.12 2000/11/26 15:51:13 matt +** frame IRQ emulation +** +** Revision 1.11 2000/11/25 20:30:39 matt +** scanline emulation simplifications/timing fixes +** +** Revision 1.10 2000/11/24 14:56:02 matt +** fixed a long-standing sprite 0 strike bug +** +** Revision 1.9 2000/11/20 13:23:17 matt +** PPU fixes +** +** Revision 1.8 2000/11/19 13:47:30 matt +** problem with frame irqs fixed +** +** Revision 1.7 2000/11/19 13:40:19 matt +** more accurate ppu behavior +** +** Revision 1.6 2000/11/14 12:09:37 matt +** only generate the palette once, please +** +** Revision 1.5 2000/11/11 14:51:43 matt +** context get/set fixed +** +** Revision 1.4 2000/11/09 12:35:50 matt +** fixed timing problem with VRAM reads/writes +** +** Revision 1.3 2000/11/05 16:35:41 matt +** rolled rgb.h into bitmap.h +** +** Revision 1.2 2000/10/27 12:55:03 matt +** palette generating functions now take *this pointers +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.33 2000/10/23 15:53:08 matt +** better system handling +** +** Revision 1.32 2000/10/22 15:02:32 matt +** simplified mirroring +** +** Revision 1.31 2000/10/21 21:36:04 matt +** ppu cleanups / fixes +** +** Revision 1.30 2000/10/21 19:26:59 matt +** many more cleanups +** +** Revision 1.29 2000/10/10 13:58:15 matt +** stroustrup squeezing his way in the door +** +** Revision 1.28 2000/10/08 17:54:32 matt +** reject VRAM access out of VINT period +** +** Revision 1.27 2000/09/15 04:58:07 matt +** simplifying and optimizing APU core +** +** Revision 1.26 2000/09/08 11:57:29 matt +** no more nes_fiq +** +** Revision 1.25 2000/09/07 21:57:31 matt +** api change +** +** Revision 1.24 2000/07/31 04:27:59 matt +** one million cleanups +** +** Revision 1.23 2000/07/30 06:13:12 matt +** default to no FIQs on startup +** +** Revision 1.22 2000/07/30 04:32:32 matt +** emulation of the NES frame IRQ +** +** Revision 1.21 2000/07/25 02:25:53 matt +** safer xxx_destroy calls +** +** Revision 1.20 2000/07/23 15:12:43 matt +** removed unused variables, changed INLINE +** +** Revision 1.19 2000/07/21 04:50:39 matt +** moved palette calls out of nofrendo.c and into ppu_create +** +** Revision 1.18 2000/07/17 05:12:55 matt +** nes_ppu.c is no longer a scary place to be-- cleaner & faster +** +** Revision 1.17 2000/07/17 01:52:28 matt +** made sure last line of all source files is a newline +** +** Revision 1.16 2000/07/11 04:42:39 matt +** updated for new screen dimension defines +** +** Revision 1.15 2000/07/10 19:10:16 matt +** should bomb out now if a game tries to write to VROM +** +** Revision 1.14 2000/07/10 05:28:30 matt +** moved joypad/oam dma from apu to ppu +** +** Revision 1.13 2000/07/10 03:03:16 matt +** added ppu_getcontext() routine +** +** Revision 1.12 2000/07/09 03:46:05 matt +** using pitch instead of width... +** +** Revision 1.11 2000/07/06 16:42:40 matt +** better palette setting interface +** +** Revision 1.10 2000/07/05 22:49:25 matt +** changed mmc2 (punchout) tile-access switching +** +** Revision 1.9 2000/07/04 23:13:26 matt +** added an irq line drawing debug feature hack +** +** Revision 1.8 2000/06/26 04:58:08 matt +** accuracy changes +** +** Revision 1.7 2000/06/22 02:13:49 matt +** more accurate emulation of $2002 +** +** Revision 1.6 2000/06/20 20:42:47 matt +** accuracy changes +** +** Revision 1.5 2000/06/20 00:05:12 matt +** tested and verified STAT quirk, added code +** +** Revision 1.4 2000/06/09 15:12:26 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes_ppu.h b/MCUME_pico/piconofrendo/nes_ppu.h new file mode 100755 index 0000000..46a9813 --- /dev/null +++ b/MCUME_pico/piconofrendo/nes_ppu.h @@ -0,0 +1,241 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes_ppu.h +** +** NES Picture Processing Unit (PPU) emulation header file +** $Id: nes_ppu.h,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#ifndef _NES_PPU_H_ +#define _NES_PPU_H_ + +#include "bitmap.h" + +/* PPU register defines */ +#define PPU_CTRL0 0x2000 +#define PPU_CTRL1 0x2001 +#define PPU_STAT 0x2002 +#define PPU_OAMADDR 0x2003 +#define PPU_OAMDATA 0x2004 +#define PPU_SCROLL 0x2005 +#define PPU_VADDR 0x2006 +#define PPU_VDATA 0x2007 + +#define PPU_OAMDMA 0x4014 +#define PPU_JOY0 0x4016 +#define PPU_JOY1 0x4017 + +/* $2000 */ +#define PPU_CTRL0F_NMI 0x80 +#define PPU_CTRL0F_OBJ16 0x20 +#define PPU_CTRL0F_BGADDR 0x10 +#define PPU_CTRL0F_OBJADDR 0x08 +#define PPU_CTRL0F_ADDRINC 0x04 +#define PPU_CTRL0F_NAMETAB 0x03 + +/* $2001 */ +#define PPU_CTRL1F_OBJON 0x10 +#define PPU_CTRL1F_BGON 0x08 +#define PPU_CTRL1F_OBJMASK 0x04 +#define PPU_CTRL1F_BGMASK 0x02 + +/* $2002 */ +#define PPU_STATF_VBLANK 0x80 +#define PPU_STATF_STRIKE 0x40 +#define PPU_STATF_MAXSPRITE 0x20 + +/* Sprite attribute byte bitmasks */ +#define OAMF_VFLIP 0x80 +#define OAMF_HFLIP 0x40 +#define OAMF_BEHIND 0x20 + +/* Maximum number of sprites per horizontal scanline */ +#define PPU_MAXSPRITE 8 + +/* some mappers do *dumb* things */ +typedef void (*ppulatchfunc_t)(uint32 address, uint8 value); +typedef void (*ppuvromswitch_t)(uint8 value); + +typedef struct ppu_s +{ + /* big nasty memory chunks */ + uint8 nametab[0x1000]; + uint8 oam[256]; + uint8 palette[32]; + uint8 *page[16]; + + /* hardware registers */ + uint8 ctrl0, ctrl1, stat, oam_addr; + uint32 vaddr, vaddr_latch; + int tile_xofs, flipflop; + int vaddr_inc; + uint32 tile_nametab; + + uint8 obj_height; + uint32 obj_base, bg_base; + + bool bg_on, obj_on; + bool obj_mask, bg_mask; + + uint8 latch, vdata_latch; + uint8 strobe; + + bool strikeflag; + uint32 strike_cycle; + + /* callbacks for naughty mappers */ + ppulatchfunc_t latchfunc; + ppuvromswitch_t vromswitch; + + /* copy of our current palette */ + rgb_t curpal[256]; + + bool vram_accessible; + + bool vram_present; + bool drawsprites; +} ppu_t; + + +/* TODO: should use this pointers */ +extern void ppu_setlatchfunc(ppulatchfunc_t func); +extern void ppu_setvromswitch(ppuvromswitch_t func); + +extern void ppu_getcontext(ppu_t *dest_ppu); +extern void ppu_setcontext(ppu_t *src_ppu); + +/* Mirroring */ +/* TODO: this is only used bloody once */ +extern void ppu_mirrorhipages(void); + +extern void ppu_mirror(int nt1, int nt2, int nt3, int nt4); + +extern void ppu_setpage(int size, int page_num, uint8 *location); +extern uint8 *ppu_getpage(int page); + + +/* control */ +extern void ppu_reset(int reset_type); +extern bool ppu_enabled(void); +extern void ppu_scanline(bitmap_t *bmp, int scanline, bool draw_flag); +extern void ppu_endscanline(int scanline); +extern void ppu_checknmi(); + +extern ppu_t *ppu_create(void); +extern void ppu_destroy(ppu_t **ppu); + +/* IO */ +extern uint8 ppu_read(uint32 address); +extern void ppu_write(uint32 address, uint8 value); +extern uint8 ppu_readhigh(uint32 address); +extern void ppu_writehigh(uint32 address, uint8 value); + +/* rendering */ +extern void ppu_setpal(ppu_t *src_ppu, rgb_t *pal); +extern void ppu_setdefaultpal(ppu_t *src_ppu); + +/* bleh */ +extern void ppu_dumppattern(bitmap_t *bmp, int table_num, int x_loc, int y_loc, int col); +extern void ppu_dumpoam(bitmap_t *bmp, int x_loc, int y_loc); +extern void ppu_displaysprites(bool display); + +#endif /* _NES_PPU_H_ */ + +/* +** $Log: nes_ppu.h,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.8 2000/11/29 12:58:23 matt +** timing/fiq fixes +** +** Revision 1.7 2000/11/27 19:36:16 matt +** more timing fixes +** +** Revision 1.6 2000/11/26 15:51:13 matt +** frame IRQ emulation +** +** Revision 1.5 2000/11/25 20:30:39 matt +** scanline emulation simplifications/timing fixes +** +** Revision 1.4 2000/11/19 13:40:19 matt +** more accurate ppu behavior +** +** Revision 1.3 2000/11/05 16:35:41 matt +** rolled rgb.h into bitmap.h +** +** Revision 1.2 2000/10/27 12:55:03 matt +** palette generating functions now take *this pointers +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.19 2000/10/22 15:02:32 matt +** simplified mirroring +** +** Revision 1.18 2000/10/21 21:36:04 matt +** ppu cleanups / fixes +** +** Revision 1.17 2000/10/21 19:26:59 matt +** many more cleanups +** +** Revision 1.16 2000/10/10 13:58:15 matt +** stroustrup squeezing his way in the door +** +** Revision 1.15 2000/07/31 04:27:59 matt +** one million cleanups +** +** Revision 1.14 2000/07/30 04:32:33 matt +** emulation of the NES frame IRQ +** +** Revision 1.13 2000/07/25 02:25:53 matt +** safer xxx_destroy calls +** +** Revision 1.12 2000/07/17 05:12:56 matt +** nes_ppu.c is no longer a scary place to be-- cleaner & faster +** +** Revision 1.11 2000/07/17 01:52:28 matt +** made sure last line of all source files is a newline +** +** Revision 1.10 2000/07/10 05:28:30 matt +** moved joypad/oam dma from apu to ppu +** +** Revision 1.9 2000/07/10 03:03:16 matt +** added ppu_getcontext() routine +** +** Revision 1.8 2000/07/06 16:42:40 matt +** better palette setting interface +** +** Revision 1.7 2000/07/04 23:13:26 matt +** added an irq line drawing debug feature hack +** +** Revision 1.6 2000/06/26 04:58:08 matt +** accuracy changes +** +** Revision 1.5 2000/06/20 00:04:35 matt +** removed STATQUIRK macro +** +** Revision 1.4 2000/06/09 15:12:26 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes_rom.h b/MCUME_pico/piconofrendo/nes_rom.h new file mode 100755 index 0000000..f6c17a2 --- /dev/null +++ b/MCUME_pico/piconofrendo/nes_rom.h @@ -0,0 +1,110 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes_rom.h +** +** NES ROM loading/saving related defines / prototypes +** $Id: nes_rom.h,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#ifndef _NES_ROM_H_ +#define _NES_ROM_H_ + +#include +#include "osd.h" + +typedef enum +{ + MIRROR_HORIZ = 0, + MIRROR_VERT = 1 +} mirror_t; + +#define ROM_FLAG_BATTERY 0x01 +#define ROM_FLAG_TRAINER 0x02 +#define ROM_FLAG_FOURSCREEN 0x04 +#define ROM_FLAG_VERSUS 0x08 + +typedef struct rominfo_s +{ + /* pointers to ROM and VROM */ + uint8 *rom, *vrom; + + /* pointers to SRAM and VRAM */ + uint8 *sram, *vram; + + /* number of banks */ + int rom_banks, vrom_banks; + int sram_banks, vram_banks; + + int mapper_number; + mirror_t mirror; + + uint8 flags; + + char filename[PATH_MAX + 1]; +} rominfo_t; + + +extern int rom_checkmagic(const char *filename); +extern rominfo_t *rom_load(const char *filename); +extern void rom_free(rominfo_t **rominfo); +extern char *rom_getinfo(rominfo_t *rominfo); + + +#endif /* _NES_ROM_H_ */ + +/* +** $Log: nes_rom.h,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.2 2000/10/25 01:23:08 matt +** basic system autodetection +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.11 2000/10/22 15:01:29 matt +** irrelevant mirroring modes removed +** +** Revision 1.10 2000/10/17 03:22:38 matt +** cleaning up rom module +** +** Revision 1.9 2000/10/10 13:58:13 matt +** stroustrup squeezing his way in the door +** +** Revision 1.8 2000/10/10 13:03:54 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.7 2000/07/25 02:20:58 matt +** cleanups +** +** Revision 1.6 2000/07/19 15:59:39 neil +** PATH_MAX, strncpy, snprintf, and strncat are our friends +** +** Revision 1.5 2000/07/17 01:52:27 matt +** made sure last line of all source files is a newline +** +** Revision 1.4 2000/06/09 15:12:25 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nes_rom_light.c b/MCUME_pico/piconofrendo/nes_rom_light.c new file mode 100644 index 0000000..b3bffd3 --- /dev/null +++ b/MCUME_pico/piconofrendo/nes_rom_light.c @@ -0,0 +1,411 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nes_rom.c +** +** NES ROM loading/saving related functions +** $Id: nes_rom.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +/* TODO: make this a generic ROM loading routine */ + +#include +#include +#include "noftypes.h" +#include "nes_rom.h" +#include "nes_mmc.h" +#include "nes_ppu.h" +#include "nes.h" +#include "log.h" +#include "osd.h" + +extern char *osd_getromdata(); + +/* Max length for displayed filename */ +#define ROM_DISP_MAXLEN 20 + + +#define ROM_FOURSCREEN 0x08 +#define ROM_TRAINER 0x04 +#define ROM_BATTERY 0x02 +#define ROM_MIRRORTYPE 0x01 +#define ROM_INES_MAGIC "NES\x1A" + +//ToDo: packed - JD +typedef struct inesheader_s +{ + uint8 ines_magic[4] ; + uint8 rom_banks ; + uint8 vrom_banks ; + uint8 rom_type ; + uint8 mapper_hinybble ; + uint8 reserved[8] ; +} inesheader_t; + + +#define TRAINER_OFFSET 0x1000 +#define TRAINER_LENGTH 0x200 +#define VRAM_LENGTH 0x2000 + +#define ROM_BANK_LENGTH 0x4000 +#define VROM_BANK_LENGTH 0x2000 + +#define SRAM_BANK_LENGTH 0x0400 +#define VRAM_BANK_LENGTH 0x2000 + + + + + +static int rom_loadrom(unsigned char **rom, rominfo_t *rominfo) +{ + ASSERT(rom); + ASSERT(rominfo); + /* Allocate ROM space, and load it up! */ + rominfo->rom=*rom; + *rom+=ROM_BANK_LENGTH*rominfo->rom_banks; + + /* If there's VROM, allocate and stuff it in */ + if (rominfo->vrom_banks) + { + rominfo->vrom=*rom; + *rom+=VROM_BANK_LENGTH*rominfo->vrom_banks; + } + else + { + rominfo->vram = emu_Malloc(VRAM_LENGTH); + if (NULL == rominfo->vram) + { + return -1; + } + memset(rominfo->vram, 0, VRAM_LENGTH); + } + return 0; +} + + +static int *rom_findrom(const char *filename, rominfo_t *rominfo) +{ + int fp; + + ASSERT(rominfo); + + if (NULL == filename) + return NULL; + + /* Make a copy of the name so we can extend it */ + osd_fullname(rominfo->filename, filename); + + fp = emu_FileOpen(rominfo->filename); + if (!fp) + { + /* Didn't find the file? Maybe the .NES extension was omitted */ + if (NULL == strrchr(rominfo->filename, '.')) + strncat(rominfo->filename, ".nes", PATH_MAX - strlen(rominfo->filename)); + + /* this will either return NULL or a valid file pointer */ + fp = emu_FileOpen(rominfo->filename); + } + + return fp; +} + +/* Add ROM name to a list with dirty headers */ +static int rom_adddirty(char *filename) +{ + return 0; +} + +/* return 0 if this *is* an iNES file */ +int rom_checkmagic(const char *filename) +{ + inesheader_t head; + rominfo_t rominfo; + int fp; + + fp = rom_findrom(filename, &rominfo); + if (0 == fp) + return -1; + + emu_FileRead(&head, 1*sizeof(head)); + + emu_FileClose(); + + if (0 == memcmp(head.ines_magic, ROM_INES_MAGIC, 4)) + /* not an iNES file */ + return 0; + + return -1; +} + + + +static int rom_getheader(unsigned char **rom, rominfo_t *rominfo) +{ +#define RESERVED_LENGTH 8 + inesheader_t head; + uint8 reserved[RESERVED_LENGTH]; + bool header_dirty; + + ASSERT(rom); + ASSERT(*rom); + ASSERT(rominfo); + + /* Read in the header */ +// _fread(&head, 1, sizeof(head), fp); + log_printf("Head: %p (%x %x %x %x)\n", *rom, (*rom)[0], (*rom)[1], (*rom)[2], (*rom)[3]); + memcpy(&head, *rom, sizeof(head)); + *rom+=sizeof(head); + + if (memcmp(head.ines_magic, ROM_INES_MAGIC, 4)) + { + return -1; + } + + rominfo->rom_banks = head.rom_banks; + rominfo->vrom_banks = head.vrom_banks; + /* iNES assumptions */ + rominfo->sram_banks = 8; /* 1kB banks, so 8KB */ + rominfo->vram_banks = 1; /* 8kB banks, so 8KB */ + rominfo->mirror = (head.rom_type & ROM_MIRRORTYPE) ? MIRROR_VERT : MIRROR_HORIZ; + rominfo->flags = 0; + if (head.rom_type & ROM_BATTERY) + rominfo->flags |= ROM_FLAG_BATTERY; + if (head.rom_type & ROM_TRAINER) + rominfo->flags |= ROM_FLAG_TRAINER; + if (head.rom_type & ROM_FOURSCREEN) + rominfo->flags |= ROM_FLAG_FOURSCREEN; + /* TODO: fourscreen a mirroring type? */ + rominfo->mapper_number = head.rom_type >> 4; + + /* Do a compare - see if we've got a clean extended header */ + memset(reserved, 0, RESERVED_LENGTH); + if (0 == memcmp(head.reserved, reserved, RESERVED_LENGTH)) + { + /* We were clean */ + header_dirty = false; + rominfo->mapper_number |= (head.mapper_hinybble & 0xF0); + } + else + { + header_dirty = true; + + /* @!?#@! DiskDude. */ + if (('D' == head.mapper_hinybble) && (0 == memcmp(head.reserved, "iskDude!", 8))) + log_printf("`DiskDude!' found in ROM header, ignoring high mapper nybble\n"); + else + { + log_printf("ROM header dirty, possible problem\n"); + rominfo->mapper_number |= (head.mapper_hinybble & 0xF0); + } + + rom_adddirty(rominfo->filename); + } + + /* TODO: this is an ugly hack, but necessary, I guess */ + /* Check for VS unisystem mapper */ + if (99 == rominfo->mapper_number) + rominfo->flags |= ROM_FLAG_VERSUS; + + return 0; +} + +/* Build the info string for ROM display */ +char *rom_getinfo(rominfo_t *rominfo) +{ + static char info[PATH_MAX + 1]; + char romname[PATH_MAX + 1], temp[PATH_MAX + 1]; + + /* Look to see if we were given a path along with filename */ + /* TODO: strip extensions */ + if (strrchr(rominfo->filename, PATH_SEP)) + strncpy(romname, strrchr(rominfo->filename, PATH_SEP) + 1, PATH_MAX); + else + strncpy(romname, rominfo->filename, PATH_MAX); + + /* If our filename is too long, truncate our displayed filename */ + if (strlen(romname) > ROM_DISP_MAXLEN) + { + strncpy(info, romname, ROM_DISP_MAXLEN - 3); + strcpy(info + (ROM_DISP_MAXLEN - 3), "..."); + } + else + { + strcpy(info, romname); + } + + sprintf(temp, " [%d] %dk/%dk %c", rominfo->mapper_number, + rominfo->rom_banks * 16, rominfo->vrom_banks * 8, + (rominfo->mirror == MIRROR_VERT) ? 'V' : 'H'); + + /* Stick it on there! */ + strncat(info, temp, PATH_MAX - strlen(info)); + + if (rominfo->flags & ROM_FLAG_BATTERY) + strncat(info, "B", PATH_MAX - strlen(info)); + if (rominfo->flags & ROM_FLAG_TRAINER) + strncat(info, "T", PATH_MAX - strlen(info)); + if (rominfo->flags & ROM_FLAG_FOURSCREEN) + strncat(info, "4", PATH_MAX - strlen(info)); + + return info; +} + +/* Load a ROM image into memory */ +rominfo_t *rom_load(const char *filename) +{ + unsigned char *rom=(unsigned char*)osd_getromdata(); + rominfo_t *rominfo; + + rominfo = emu_Malloc(sizeof(rominfo_t)); + if (NULL == rominfo) + return NULL; + + memset(rominfo, 0, sizeof(rominfo_t)); + + /* Get the header and stick it into rominfo struct */ + if (rom_getheader(&rom, rominfo)) + goto _fail; + + /* Make sure we really support the mapper */ + if (false == mmc_peek(rominfo->mapper_number)) + { + goto _fail; + } + + if (rom_loadrom(&rom, rominfo)) + goto _fail; + + return rominfo; + +_fail: + rom_free(&rominfo); + return NULL; +} + +/* Free a ROM */ +void rom_free(rominfo_t **rominfo) +{ + if (NULL == *rominfo) + { + return; + } + + /* Restore palette if we loaded in a VS jobber */ + if ((*rominfo)->flags & ROM_FLAG_VERSUS) + { + /* TODO: bad idea calling nes_getcontextptr... */ + ppu_setdefaultpal(nes_getcontextptr()->ppu); + log_printf("Default NES palette restored\n"); + } + + + if ((*rominfo)->sram) + free((*rominfo)->sram); + if ((*rominfo)->rom) + free((*rominfo)->rom); + if ((*rominfo)->vrom) + free((*rominfo)->vrom); + if ((*rominfo)->vram) + free((*rominfo)->vram); + + free(*rominfo); +} + +/* +** $Log: nes_rom.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.8 2000/11/21 13:28:40 matt +** take care to zero allocated mem +** +** Revision 1.7 2000/11/09 14:07:28 matt +** state load fixed, state save mostly fixed +** +** Revision 1.6 2000/10/28 14:24:54 matt +** where did I put that underscore? +** +** Revision 1.5 2000/10/27 12:56:35 matt +** api change for ppu palette functions +** +** Revision 1.4 2000/10/26 22:51:44 matt +** correct NULL filename handling +** +** Revision 1.3 2000/10/25 01:23:08 matt +** basic system autodetection +** +** Revision 1.2 2000/10/25 00:23:16 matt +** makefiles updated for new directory structure +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.19 2000/10/21 14:35:58 matt +** typo +** +** Revision 1.18 2000/10/17 03:22:37 matt +** cleaning up rom module +** +** Revision 1.17 2000/10/10 13:58:13 matt +** stroustrup squeezing his way in the door +** +** Revision 1.16 2000/10/10 13:03:54 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.15 2000/07/31 04:28:46 matt +** one million cleanups +** +** Revision 1.14 2000/07/30 04:31:26 matt +** automagic loading of the nofrendo intro +** +** Revision 1.13 2000/07/25 02:20:58 matt +** cleanups +** +** Revision 1.12 2000/07/20 01:53:27 matt +** snprintf() ain't no standard function, eh? +** +** Revision 1.11 2000/07/19 16:06:54 neil +** little error fixed (tempinfo vs rominfo->info) +** +** Revision 1.10 2000/07/19 15:59:39 neil +** PATH_MAX, strncpy, snprintf, and strncat are our friends +** +** Revision 1.9 2000/07/17 01:52:27 matt +** made sure last line of all source files is a newline +** +** Revision 1.8 2000/07/06 16:47:50 matt +** new ppu palette setting calls +** +** Revision 1.7 2000/07/05 23:21:54 neil +** fclose(fp) should not be done if fp == NULL +** +** Revision 1.6 2000/07/04 04:45:14 matt +** changed include +** +** Revision 1.5 2000/06/26 04:56:10 matt +** minor cleanup +** +** Revision 1.4 2000/06/09 15:12:25 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nesinput.c b/MCUME_pico/piconofrendo/nesinput.c new file mode 100755 index 0000000..f881070 --- /dev/null +++ b/MCUME_pico/piconofrendo/nesinput.c @@ -0,0 +1,212 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nesinput.c +** +** Event handling system routines +** $Id: nesinput.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "nesinput.h" +#include "log.h" + +/* TODO: make a linked list of inputs sources, so they +** can be removed if need be +*/ + +static nesinput_t *nes_input[MAX_CONTROLLERS]; +static int active_entries = 0; + +/* read counters */ +static int pad0_readcount, pad1_readcount, ppad_readcount, ark_readcount; + + +static int retrieve_type(int type) +{ + int i, value = 0; + + for (i = 0; i < active_entries; i++) + { + ASSERT(nes_input[i]); + + if (type == nes_input[i]->type) + value |= nes_input[i]->data; + } + + return value; +} + +static uint8 get_pad0(void) +{ + uint8 value; + + value = (uint8) retrieve_type(INP_JOYPAD0); + + /* mask out left/right simultaneous keypresses */ + if ((value & INP_PAD_UP) && (value & INP_PAD_DOWN)) + value &= ~(INP_PAD_UP | INP_PAD_DOWN); + + if ((value & INP_PAD_LEFT) && (value & INP_PAD_RIGHT)) + value &= ~(INP_PAD_LEFT | INP_PAD_RIGHT); + + /* return (0x40 | value) due to bus conflicts */ + return (0x40 | ((value >> pad0_readcount++) & 1)); +} + +static uint8 get_pad1(void) +{ + uint8 value; + + value = (uint8) retrieve_type(INP_JOYPAD1); + + /* mask out left/right simultaneous keypresses */ + if ((value & INP_PAD_UP) && (value & INP_PAD_DOWN)) + value &= ~(INP_PAD_UP | INP_PAD_DOWN); + + if ((value & INP_PAD_LEFT) && (value & INP_PAD_RIGHT)) + value &= ~(INP_PAD_LEFT | INP_PAD_RIGHT); + + /* return (0x40 | value) due to bus conflicts */ + return (0x40 | ((value >> pad1_readcount++) & 1)); +} + +static uint8 get_zapper(void) +{ + return (uint8) (retrieve_type(INP_ZAPPER)); +} + +static uint8 get_powerpad(void) +{ + int value; + uint8 ret_val = 0; + + value = retrieve_type(INP_POWERPAD); + + if (((value >> 8) >> ppad_readcount) & 1) + ret_val |= 0x10; + if (((value & 0xFF) >> ppad_readcount) & 1) + ret_val |= 0x08; + + ppad_readcount++; + + return ret_val; +} + +static uint8 get_vsdips0(void) +{ + return (retrieve_type(INP_VSDIPSW0)); +} + +static uint8 get_vsdips1(void) +{ + return (retrieve_type(INP_VSDIPSW1)); +} + +static uint8 get_arkanoid(void) +{ + uint8 value = retrieve_type(INP_ARKANOID); + + if ((value >> (7 - ark_readcount++)) & 1) + return 0x02; + else + return 0; +} + +/* return input state for all types indicated (can be ORed together) */ +uint8 input_get(int types) +{ + uint8 value = 0; + + if (types & INP_JOYPAD0) + value |= get_pad0(); + if (types & INP_JOYPAD1) + value |= get_pad1(); + if (types & INP_ZAPPER) + value |= get_zapper(); + if (types & INP_POWERPAD) + value |= get_powerpad(); + if (types & INP_VSDIPSW0) + value |= get_vsdips0(); + if (types & INP_VSDIPSW1) + value |= get_vsdips1(); + if (types & INP_ARKANOID) + value |= get_arkanoid(); + + return value; +} + +/* register an input type */ +void input_register(nesinput_t *input) +{ + if (NULL == input) + return; + + nes_input[active_entries] = input; + active_entries++; +} + +void input_event(nesinput_t *input, int state, int value) +{ + ASSERT(input); + + if (state == INP_STATE_MAKE) + input->data |= value; /* OR it in */ + else /* break state */ + input->data &= ~value; /* mask it out */ +} + +void input_strobe(void) +{ + pad0_readcount = 0; + pad1_readcount = 0; + ppad_readcount = 0; + ark_readcount = 0; +} + +/* +** $Log: nesinput.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.9 2000/09/10 23:25:03 matt +** minor changes +** +** Revision 1.8 2000/07/31 04:27:59 matt +** one million cleanups +** +** Revision 1.7 2000/07/23 15:11:45 matt +** removed unused variables +** +** Revision 1.6 2000/07/17 01:52:28 matt +** made sure last line of all source files is a newline +** +** Revision 1.5 2000/07/04 04:56:50 matt +** include changes +** +** Revision 1.4 2000/06/09 15:12:26 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nesinput.h b/MCUME_pico/piconofrendo/nesinput.h new file mode 100755 index 0000000..49871dc --- /dev/null +++ b/MCUME_pico/piconofrendo/nesinput.h @@ -0,0 +1,104 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nesinput.h +** +** Platform independent input definitions +** $Id: nesinput.h,v 1.1.1.1 2001/04/27 07:03:54 neil Exp $ +*/ + +#ifndef _NESINPUT_H_ +#define _NESINPUT_H_ + +/* NES control pad bitmasks */ +#define INP_PAD_A 0x01 +#define INP_PAD_B 0x02 +#define INP_PAD_SELECT 0x04 +#define INP_PAD_START 0x08 +#define INP_PAD_UP 0x10 +#define INP_PAD_DOWN 0x20 +#define INP_PAD_LEFT 0x40 +#define INP_PAD_RIGHT 0x80 + +#define INP_ZAPPER_HIT 0x00 +#define INP_ZAPPER_MISS 0x08 +#define INP_ZAPPER_TRIG 0x10 + +#define INP_JOYPAD0 0x0001 +#define INP_JOYPAD1 0x0002 +#define INP_ZAPPER 0x0004 +#define INP_POWERPAD 0x0008 +#define INP_ARKANOID 0x0010 +#define INP_VSDIPSW0 0x0020 +#define INP_VSDIPSW1 0x0040 + +/* upper byte is what's returned in D4, lower is D3 */ +#define INP_PPAD_1 0x0002 +#define INP_PPAD_2 0x0001 +#define INP_PPAD_3 0x0200 +#define INP_PPAD_4 0x0100 +#define INP_PPAD_5 0x0004 +#define INP_PPAD_6 0x0010 +#define INP_PPAD_7 0x0080 +#define INP_PPAD_8 0x0800 +#define INP_PPAD_9 0x0008 +#define INP_PPAD_10 0x0020 +#define INP_PPAD_11 0x0040 +#define INP_PPAD_12 0x0400 + + +enum +{ + INP_STATE_BREAK, + INP_STATE_MAKE +}; + +typedef struct nesinput_s +{ + int type; + int data; +} nesinput_t; + +#define MAX_CONTROLLERS 32 + +extern uint8 input_get(int type); +extern void input_register(nesinput_t *input); +extern void input_event(nesinput_t *input, int state, int value); +extern void input_strobe(void); + +#endif /* _NESINPUT_H_ */ + +/* +** $Log: nesinput.h,v $ +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:20:28 matt +** changed directory structure +** +** Revision 1.6 2000/09/10 23:25:02 matt +** minor changes +** +** Revision 1.5 2000/07/17 01:52:29 matt +** made sure last line of all source files is a newline +** +** Revision 1.4 2000/06/09 15:12:26 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nofconfig.h b/MCUME_pico/piconofrendo/nofconfig.h new file mode 100755 index 0000000..44005ff --- /dev/null +++ b/MCUME_pico/piconofrendo/nofconfig.h @@ -0,0 +1,49 @@ +/* Nofrendo Configuration API +** +** This file is in the public domain. +** +** $Id: nofconfig.h,v 1.1 2001/04/27 14:37:11 neil Exp $ +*/ + +#ifndef _CONFIG_H_ +#define _CONFIG_H_ + +#ifndef CONFIG_FILE +#define CONFIG_FILE "nofrendo.cfg" +#endif + +typedef struct config_s +{ + char *filename; +} config_t; + +extern config_t config; + +#endif /* !_CONFIG_H_ */ + +/* +** $Log: nofconfig.h,v $ +** Revision 1.1 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.5 2000/10/10 13:58:13 matt +** stroustrup squeezing his way in the door +** +** Revision 1.4 2000/07/19 15:58:55 neil +** config file now configurable (ha) +** +** Revision 1.3 2000/07/11 14:59:27 matt +** minor cosmetics.. =) +** +** Revision 1.2 2000/07/11 13:35:38 bsittler +** Changed the config API, implemented config file "nofrendo.cfg". The +** GGI drivers use the group [GGI]. Visual= and Mode= keys are understood. +** +** Revision 1.1 2000/07/11 07:46:11 neil +** Initial commit +** +** +*/ diff --git a/MCUME_pico/piconofrendo/nofrendo.c b/MCUME_pico/piconofrendo/nofrendo.c new file mode 100644 index 0000000..123ba5d --- /dev/null +++ b/MCUME_pico/piconofrendo/nofrendo.c @@ -0,0 +1,394 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nofrendo.c +** +** Entry point of program +** Note: all architectures should call these functions +** $Id: nofrendo.c,v 1.3 2001/04/27 14:37:11 neil Exp $ +*/ + +#include +#include +#include "noftypes.h" +#include "nofrendo.h" +#include "event.h" +#include "nofconfig.h" +#include "log.h" +#include "osd.h" +#include "vid_drv.h" + +/* emulated system includes */ +#include "nes.h" + +/* our global machine structure */ +static struct +{ + char *filename, *nextfilename; + system_t type, nexttype; + + union + { + nes_t *nes; + } machine; + + int refresh_rate; + + bool quit; +} console; + +/* our happy little timer ISR */ +volatile int nofrendo_ticks = 0; +static void timer_isr(void) +{ + nofrendo_ticks++; +} + +static void timer_isr_end(void) {} /* code marker for djgpp */ + +static void shutdown_everything(void) +{ + if (console.filename) + { + free(console.filename); + console.filename = NULL; + } + if (console.nextfilename) + { + free(console.nextfilename); + console.nextfilename = NULL; + } + + //config.close(); JMH + osd_shutdown(); + vid_shutdown(); + log_shutdown(); +} + +/* End the current context */ +void main_eject(void) +{ + switch (console.type) + { + case system_nes: + nes_poweroff(); + nes_destroy(&(console.machine.nes)); + break; + + default: + break; + } + + if (NULL != console.filename) + { + free(console.filename); + console.filename = NULL; + } + console.type = system_unknown; +} + +/* Act on the user's quit requests */ +void main_quit(void) +{ + console.quit = true; + + main_eject(); + + /* if there's a pending filename / system, clear */ + if (NULL != console.nextfilename) + { + free(console.nextfilename); + console.nextfilename = NULL; + } + console.nexttype = system_unknown; +} + +/* brute force system autodetection */ +static system_t detect_systemtype(const char *filename) +{ + if (NULL == filename) + return system_unknown; + + if (0 == nes_isourfile(filename)) + return system_nes; + + /* can't figure out what this thing is */ + return system_unknown; +} + +static int install_timer(int hertz) +{ + return osd_installtimer(hertz, (void *) timer_isr, + (int) timer_isr_end - (int) timer_isr, + (void *) &nofrendo_ticks, + sizeof(nofrendo_ticks)); +} + +/* This assumes there is no current context */ +static int internal_insert(const char *filename, system_t type) +{ + /* autodetect system type? */ + if (system_autodetect == type) + type = detect_systemtype(filename); + + console.filename = strdup(filename); + console.type = type; + + /* set up the event system for this system type */ + event_set_system(type); + + switch (console.type) + { + case system_nes: + console.machine.nes = nes_create(); + if (NULL == console.machine.nes) + { + log_printf("Failed to create NES instance.\n"); + return -1; + } + if (nes_insertcart(console.filename, console.machine.nes)) + return -1; + vid_setmode(NES_SCREEN_WIDTH, NES_VISIBLE_HEIGHT); + if (install_timer(NES_REFRESH_RATE)) + return -1; + + nes_emulate(); + break; + + case system_unknown: + default: + log_printf("system type unknown, playing nofrendo NES intro.\n"); + if (NULL != console.filename) + free(console.filename); + + /* oooh, recursion */ + return internal_insert(filename, system_nes); + } + + return 0; +} + +/* This tells main_loop to load this next image */ +void main_insert(const char *filename, system_t type) +{ + console.nextfilename = strdup(filename); + console.nexttype = type; + + main_eject(); +} + +int nofrendo_main(int argc, char *argv[]) +{ + /* initialize our system structure */ + console.filename = NULL; + console.nextfilename = NULL; + console.type = system_unknown; + console.nexttype = system_unknown; + console.refresh_rate = 0; + console.quit = false; + + if (log_init()) + return -1; + + event_init(); + + return osd_main(argc, argv); +} + +/* This is the final leg of main() */ +int main_loop(const char *filename, system_t type) +{ + vidinfo_t video; + + /* register shutdown, in case of assertions, etc. */ +// atexit(shutdown_everything); + + //if (config.open()) // JMH + // return -1; + + if (osd_init()) + return -1; + + osd_getvideoinfo(&video); + if (vid_init(video.default_width, video.default_height, video.driver)) + return -1; + //log printf("vid_init done\n"); + + console.nextfilename = strdup(filename); + console.nexttype = type; + +// while (false == console.quit) +// { +//emu_printf("internal_insert in loop\n"); + if (internal_insert(console.nextfilename, console.nexttype)) + return 1; +// } + + return 0; +} + + +/* +** $Log: nofrendo.c,v $ +** Revision 1.3 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.2 2001/04/27 11:10:08 neil +** compile +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.48 2000/11/27 12:47:08 matt +** free them strings +** +** Revision 1.47 2000/11/25 20:26:05 matt +** removed fds "system" +** +** Revision 1.46 2000/11/25 01:51:53 matt +** bool stinks sometimes +** +** Revision 1.45 2000/11/20 13:22:12 matt +** standardized timer ISR, added nofrendo_ticks +** +** Revision 1.44 2000/11/05 22:53:13 matt +** only one video driver per system, please +** +** Revision 1.43 2000/11/01 14:15:35 matt +** multi-system event system, or whatever +** +** Revision 1.42 2000/10/28 15:16:24 matt +** removed nsf_init +** +** Revision 1.41 2000/10/27 12:58:44 matt +** gui_init can now fail +** +** Revision 1.40 2000/10/26 22:48:57 matt +** prelim NSF support +** +** Revision 1.39 2000/10/25 13:42:02 matt +** strdup - giddyap! +** +** Revision 1.38 2000/10/25 01:23:08 matt +** basic system autodetection +** +** Revision 1.37 2000/10/23 17:50:47 matt +** adding fds support +** +** Revision 1.36 2000/10/23 15:52:04 matt +** better system handling +** +** Revision 1.35 2000/10/21 19:25:59 matt +** many more cleanups +** +** Revision 1.34 2000/10/10 13:58:13 matt +** stroustrup squeezing his way in the door +** +** Revision 1.33 2000/10/10 13:03:54 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.32 2000/09/15 04:58:06 matt +** simplifying and optimizing APU core +** +** Revision 1.31 2000/09/10 23:19:14 matt +** i'm a sloppy coder +** +** Revision 1.30 2000/09/07 01:30:57 matt +** nes6502_init deprecated +** +** Revision 1.29 2000/08/16 03:17:49 matt +** bpb +** +** Revision 1.28 2000/08/16 02:58:19 matt +** changed video interface a wee bit +** +** Revision 1.27 2000/07/31 04:28:46 matt +** one million cleanups +** +** Revision 1.26 2000/07/30 04:31:26 matt +** automagic loading of the nofrendo intro +** +** Revision 1.25 2000/07/27 01:16:36 matt +** sorted out the video problems +** +** Revision 1.24 2000/07/26 21:54:53 neil +** eject has to clear the nextfilename and nextsystem +** +** Revision 1.23 2000/07/26 21:36:13 neil +** Big honkin' change -- see the mailing list +** +** Revision 1.22 2000/07/25 02:21:36 matt +** safer xxx_destroy calls +** +** Revision 1.21 2000/07/23 16:46:47 matt +** fixed crash in win32 by reodering shutdown calls +** +** Revision 1.20 2000/07/23 15:18:23 matt +** removed unistd.h from includes +** +** Revision 1.19 2000/07/23 00:48:15 neil +** Win32 SDL +** +** Revision 1.18 2000/07/21 13:42:06 neil +** get_options removed, as it should be handled by osd_main +** +** Revision 1.17 2000/07/21 04:53:48 matt +** moved palette calls out of nofrendo.c and into ppu_create +** +** Revision 1.16 2000/07/21 02:40:43 neil +** more main fixes +** +** Revision 1.15 2000/07/21 02:09:07 neil +** new main structure? +** +** Revision 1.14 2000/07/20 17:05:12 neil +** Moved osd_init before setup_video +** +** Revision 1.13 2000/07/11 15:01:05 matt +** moved config.close() into registered atexit() routine +** +** Revision 1.12 2000/07/11 13:35:38 bsittler +** Changed the config API, implemented config file "nofrendo.cfg". The +** GGI drivers use the group [GGI]. Visual= and Mode= keys are understood. +** +** Revision 1.11 2000/07/11 04:32:21 matt +** less magic number nastiness for screen dimensions +** +** Revision 1.10 2000/07/10 03:04:15 matt +** removed scanlines, backbuffer from custom blit +** +** Revision 1.9 2000/07/07 04:39:54 matt +** removed garbage dpp shite +** +** Revision 1.8 2000/07/06 16:48:25 matt +** new video driver +** +** Revision 1.7 2000/07/05 17:26:16 neil +** Moved the externs in nofrendo.c to osd.h +** +** Revision 1.6 2000/06/26 04:55:44 matt +** cleaned up main() +** +** Revision 1.5 2000/06/20 20:41:21 matt +** moved include to top (duh) +** +** Revision 1.4 2000/06/09 15:12:25 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/nofrendo.h b/MCUME_pico/piconofrendo/nofrendo.h new file mode 100755 index 0000000..01075a8 --- /dev/null +++ b/MCUME_pico/piconofrendo/nofrendo.h @@ -0,0 +1,98 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** nofrendo.h (c) 1998-2000 Matthew Conte (matt@conte.com) +** (c) 2000 Neil Stevens (multivac@fcmail.com) +** +** Note: all architectures should call these functions +** +** $Id: nofrendo.h,v 1.2 2001/04/27 11:10:08 neil Exp $ +*/ + +#ifndef _NOFRENDO_H_ +#define _NOFRENDO_H_ + +#define NOLOOP 1 + +typedef enum +{ + system_unknown, + system_autodetect, + system_nes, + NUM_SUPPORTED_SYSTEMS +} system_t; + +int nofrendo_main(int argc, char *argv[]); + + +extern volatile int nofrendo_ticks; /* system timer ticks */ + +/* osd_main should end with a call to main_loop(). +** Pass filename = NULL if you want to start with the demo rom +*/ +extern int main_loop(const char *filename, system_t type); + +/* These should not be called directly. Use the event interface */ +extern void main_insert(const char *filename, system_t type); +extern void main_eject(void); +extern void main_quit(void); + +#ifdef NOLOOP +extern void nes_step(int skip); +#endif + +#endif /* !_NOFRENDO_H_ */ + +/* +** $Log: nofrendo.h,v $ +** Revision 1.2 2001/04/27 11:10:08 neil +** compile +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.9 2000/11/25 20:26:05 matt +** removed fds "system" +** +** Revision 1.8 2000/11/20 13:22:12 matt +** standardized timer ISR, added nofrendo_ticks +** +** Revision 1.7 2000/11/01 14:15:35 matt +** multi-system event system, or whatever +** +** Revision 1.6 2000/10/25 13:42:02 matt +** strdup - giddyap! +** +** Revision 1.5 2000/10/25 01:23:08 matt +** basic system autodetection +** +** Revision 1.4 2000/10/23 15:52:04 matt +** better system handling +** +** Revision 1.3 2000/07/31 04:28:46 matt +** one million cleanups +** +** Revision 1.2 2000/07/27 01:16:36 matt +** sorted out the video problems +** +** Revision 1.1 2000/07/26 21:36:13 neil +** Big honkin' change -- see the mailing list +** +** +*/ diff --git a/MCUME_pico/piconofrendo/noftypes.h b/MCUME_pico/piconofrendo/noftypes.h new file mode 100644 index 0000000..7e3c67c --- /dev/null +++ b/MCUME_pico/piconofrendo/noftypes.h @@ -0,0 +1,121 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** types.h +** +** Data type definitions +** $Id: noftypes.h,v 1.1 2001/04/27 14:37:11 neil Exp $ +*/ + +#ifndef _TYPES_H_ +#define _TYPES_H_ + + + +/* Define this if running on little-endian (x86) systems */ +#define HOST_LITTLE_ENDIAN + +#ifdef __GNUC__ +#define INLINE static inline +#define ZERO_LENGTH 0 +#elif defined(WIN32) +#define INLINE static __inline +#define ZERO_LENGTH 0 +#else /* crapintosh? */ +#define INLINE static +#define ZERO_LENGTH 1 +#endif + +/* quell stupid compiler warnings */ +#define UNUSED(x) ((x) = (x)) + +typedef signed char int8; +typedef signed short int16; +typedef signed int int32; +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef unsigned int uint32; + +#ifndef __cplusplus +typedef enum +{ + false = 0, + true = 1 +} bool; + +#ifndef NULL +#define NULL ((void *) 0) +#endif +#endif /* !__cplusplus */ + +#include "log.h" + +#ifdef NOFRENDO_DEBUG + +#define ASSERT(expr) log_assert((int) (expr), __LINE__, __FILE__, NULL) +#define ASSERT_MSG(msg) log_assert(false, __LINE__, __FILE__, (msg)) + +#else /* !NOFRENDO_DEBUG */ + +#define ASSERT(expr) +#define ASSERT_MSG(msg) + +#endif /* !NOFRENDO_DEBUG */ + +#endif /* _TYPES_H_ */ + +/* +** $Log: noftypes.h,v $ +** Revision 1.1 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.15 2000/11/05 16:37:18 matt +** rolled rgb.h into bitmap.h +** +** Revision 1.14 2000/10/17 03:22:16 matt +** safe UNUSED +** +** Revision 1.13 2000/10/10 13:58:14 matt +** stroustrup squeezing his way in the door +** +** Revision 1.12 2000/10/10 13:03:54 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.11 2000/08/11 01:44:05 matt +** cosmeses +** +** Revision 1.10 2000/07/31 04:28:47 matt +** one million cleanups +** +** Revision 1.9 2000/07/24 04:30:17 matt +** ASSERTs should have been calling log_shutdown +** +** Revision 1.8 2000/07/17 01:52:28 matt +** made sure last line of all source files is a newline +** +** Revision 1.7 2000/07/04 04:46:44 matt +** moved INLINE define from osd.h +** +** Revision 1.6 2000/06/09 15:12:25 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/osd.h b/MCUME_pico/piconofrendo/osd.h new file mode 100755 index 0000000..06d2677 --- /dev/null +++ b/MCUME_pico/piconofrendo/osd.h @@ -0,0 +1,188 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** osd.h +** +** O/S dependent routine defintions (must be customized) +** $Id: osd.h,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#ifndef _OSD_H_ +#define _OSD_H_ + +#include +#ifndef PATH_MAX +#define PATH_MAX 512 +#endif /* PATH_MAX */ + +#ifdef __GNUC__ +#define __PACKED__ __attribute__ ((packed)) + +#ifdef __DJGPP__ +#define PATH_SEP '\\' +#else /* !__DJGPP__ */ +#define PATH_SEP '/' +#endif /* !__DJGPP__ */ + +#elif defined(WIN32) +#define __PACKED__ +#define PATH_SEP '\\' +#else /* !defined(WIN32) && !__GNUC__ */ +#define __PACKED__ +#define PATH_SEP ':' +#endif /* !defined(WIN32) && !__GNUC__ */ + +#if !defined(WIN32) && !defined(__DJGPP__) +#define stricmp strcasecmp +#endif /* !WIN32 && !__DJGPP__ */ + + +extern void osd_setsound(void (*playfunc)(void *buffer, int size)); + + +#ifndef NSF_PLAYER +#include "noftypes.h" +#include "vid_drv.h" + +typedef struct vidinfo_s +{ + int default_width, default_height; + viddriver_t *driver; +} vidinfo_t; + +typedef struct sndinfo_s +{ + int sample_rate; + int bps; +} sndinfo_t; + +/* get info */ +extern void osd_getvideoinfo(vidinfo_t *info); +extern void osd_getsoundinfo(sndinfo_t *info); + +/* init / shutdown */ +extern int osd_init(void); +extern void osd_shutdown(void); +extern int osd_main(int argc, char *argv[]); + +extern int osd_installtimer(int frequency, void *func, int funcsize, + void *counter, int countersize); + +/* filename manipulation */ +extern void osd_fullname(char *fullname, const char *shortname); +extern char *osd_newextension(char *string, char *ext); + +/* input */ +extern void osd_getinput(void); +extern void osd_getmouse(int *x, int *y, int *button); + +/* build a filename for a snapshot, return -ve for error */ +extern int osd_makesnapname(char *filename, int len); + +#endif /* !NSF_PLAYER */ + +#endif /* _OSD_H_ */ + +/* +** $Log: osd.h,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.30 2000/11/05 22:53:13 matt +** only one video driver per system, please +** +** Revision 1.29 2000/11/05 06:23:41 matt +** thinlib spawns changes +** +** Revision 1.28 2000/10/22 19:15:39 matt +** more sane timer ISR / autoframeskip +** +** Revision 1.27 2000/10/21 19:25:59 matt +** many more cleanups +** +** Revision 1.26 2000/10/10 13:03:53 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.25 2000/10/02 15:01:12 matt +** frag size has been removed +** +** Revision 1.24 2000/08/31 02:40:18 matt +** fixed some crap +** +** Revision 1.23 2000/08/16 02:57:14 matt +** changed video interface a wee bit +** +** Revision 1.22 2000/08/11 01:46:30 matt +** new OSD sound information interface +** +** Revision 1.21 2000/08/04 15:01:32 neil +** BeOS cleanups +** +** Revision 1.20 2000/08/04 14:36:14 neil +** BeOS is working.. kinda +** +** Revision 1.19 2000/07/26 21:36:13 neil +** Big honkin' change -- see the mailing list +** +** Revision 1.18 2000/07/23 16:21:35 neil +** neither stricmp nor strcasecmp works everywhere +** +** Revision 1.17 2000/07/23 15:17:40 matt +** osd_getfragsize +** +** Revision 1.16 2000/07/21 13:37:20 neil +** snap filenames are OS-dependent +** +** Revision 1.15 2000/07/21 04:58:37 matt +** new osd_main structure +** +** Revision 1.14 2000/07/21 04:26:15 matt +** added some nasty externs +** +** Revision 1.13 2000/07/21 02:42:45 matt +** merged osd_getinput and osd_gethostinput +** +** Revision 1.12 2000/07/19 13:10:35 neil +** PATH_MAX +** +** Revision 1.11 2000/07/10 03:04:15 matt +** removed scanlines, backbuffer from custom blit +** +** Revision 1.10 2000/07/06 16:48:25 matt +** new video driver +** +** Revision 1.9 2000/07/05 17:26:16 neil +** Moved the externs in nofrendo.c to osd.h +** +** Revision 1.8 2000/07/04 23:07:06 matt +** djgpp path separator bugfix +** +** Revision 1.7 2000/07/04 04:45:33 matt +** moved INLINE define into types.h +** +** Revision 1.6 2000/06/29 16:06:18 neil +** Wrapped DOS-specific headers in an ifdef +** +** Revision 1.5 2000/06/09 15:12:25 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/piconofrendo.cpp b/MCUME_pico/piconofrendo/piconofrendo.cpp new file mode 100644 index 0000000..17d148f --- /dev/null +++ b/MCUME_pico/piconofrendo/piconofrendo.cpp @@ -0,0 +1,129 @@ +#include "pico.h" +#include "pico/stdlib.h" + +extern "C" { + #include "iopins.h" + #include "emuapi.h" +} +#include "keyboard_osd.h" +#include "vga_t_dma.h" +extern "C" { +#include "nes_emu.h" +} +#include + + +TFT_T_DMA tft; +static int skip=0; + +int main(void) { + stdio_init_all(); + tft.begin(VGA_MODE_320x240); + emu_init(); + while (true) { + if (menuActive()) { + uint16_t bClick = emu_DebounceLocalKeys(); + int action = handleMenu(bClick); + char * filename = menuSelection(); + if (action == ACTION_RUNTFT) { + toggleMenu(false); + emu_start(); + emu_Init(filename); + tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) ); + tft.startDMA(); + } + tft.waitSync(); + } + else { + emu_Step(); + uint16_t bClick = emu_DebounceLocalKeys(); + emu_Input(bClick); + } + //int c = getchar_timeout_us(0); + //switch (c) { + // case ' ': + // printf("test: %d\n", 1); + // break; + //} + } +} + +static unsigned char palette8[PALETTE_SIZE]; + +void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index) +{ + if (index +#include "noftypes.h" +#include "log.h" +#include "bitmap.h" +#include "vid_drv.h" +#include "osd.h" + +/* hardware surface */ +static bitmap_t *screen = NULL; + +/* primary / backbuffer surfaces */ +static bitmap_t *primary_buffer = NULL; //, *back_buffer = NULL; + +static viddriver_t *driver = NULL; + +/* fast automagic loop unrolling */ +#define DUFFS_DEVICE(transfer, count) \ +{ \ + register int n = (count + 7) / 8; \ + switch (count % 8) \ + { \ + case 0: do { { transfer; } \ + case 7: { transfer; } \ + case 6: { transfer; } \ + case 5: { transfer; } \ + case 4: { transfer; } \ + case 3: { transfer; } \ + case 2: { transfer; } \ + case 1: { transfer; } \ + } while (--n > 0); \ + } \ +} + +/* some system dependent replacement routines (for speed) */ +INLINE int vid_memcmp(const void *p1, const void *p2, int len) +{ + /* check for 32-bit aligned data */ + if (0 == (((uint32) p1 & 3) | ((uint32) p2 & 3))) + { + uint32 *dw1 = (uint32 *) p1; + uint32 *dw2 = (uint32 *) p2; + + len >>= 2; + + DUFFS_DEVICE(if (*dw1++ != *dw2++) return -1, len); + } + else + /* fall back to 8-bit compares */ + { + uint8 *b1 = (uint8 *) p1; + uint8 *b2 = (uint8 *) p2; + + DUFFS_DEVICE(if (*b1++ != *b2++) return -1, len); + } + + return 0; +} + +/* super-dooper assembly memcpy (thanks, SDL!) */ +#if defined(__GNUC__) && defined(i386) +#define vid_memcpy(dest, src, len) \ +{ \ + int u0, u1, u2; \ + __asm__ __volatile__ ( \ + " cld \n" \ + " rep \n" \ + " movsl \n" \ + " testb $2,%b4 \n" \ + " je 1f \n" \ + " movsw \n" \ + "1: \n" \ + " testb $1,%b4 \n" \ + " je 2f \n" \ + " movsb \n" \ + "2: \n" \ + : "=&c" (u0), "=&D" (u1), "=&S" (u2) \ + : "0" ((len)/4), "q" (len), "1" (dest), "2" (src) \ + : "memory"); \ +} +#else /* !(defined(__GNUC__) && defined(i386)) */ +INLINE void vid_memcpy(void *dest, const void *src, int len) +{ + uint32 *s = (uint32 *) src; + uint32 *d = (uint32 *) dest; + + ASSERT(0 == ((len & 3) | ((uint32) src & 3) | ((uint32) dest & 3))); + len >>= 2; + + DUFFS_DEVICE(*d++ = *s++, len); +} +#endif /* !(defined(__GNUC__) && defined(i386)) */ + + +extern bitmap_t *lock_write(void); +/* TODO: any way to remove this filth (GUI needs it)? */ +bitmap_t *vid_getbuffer(void) +{ + return primary_buffer; +} + +void vid_setpalette(rgb_t *p) +{ + ASSERT(driver); + ASSERT(p); + + driver->set_palette(p); +} + +/* blits a bitmap onto primary buffer */ +void vid_blit(bitmap_t *bitmap, int src_x, int src_y, int dest_x, int dest_y, + int width, int height) +{ + int bitmap_pitch, primary_pitch; + uint8 *dest_ptr, *src_ptr; + + ASSERT(bitmap); + + /* clip to source */ + if (src_y >= bitmap->height) + return; + if (src_y + height > bitmap->height) + height = bitmap->height - src_y; + + if (src_x >= bitmap->width) + return; + if (src_x + width > bitmap->width) + width = bitmap->width - src_x; + + /* clip to dest */ + if (dest_y + height <= 0) + { + return; + } + else if (dest_y < 0) + { + height += dest_y; + src_y -= dest_y; + dest_y = 0; + } + + if (dest_y >= primary_buffer->height) + return; + if (dest_y + height > primary_buffer->height) + height = primary_buffer->height - dest_y; + + if (dest_x + width <= 0) + { + return; + } + else if (dest_x < 0) + { + width += dest_x; + src_x -= dest_x; + dest_x = 0; + } + + if (dest_x >= primary_buffer->width) + return; + if (dest_x + width > primary_buffer->width) + width = primary_buffer->width - dest_x; + + src_ptr = bitmap->line[src_y] + src_x; + dest_ptr = primary_buffer->line[dest_y] + dest_x; + + /* Avoid doing unnecessary indexed lookups */ + bitmap_pitch = bitmap->pitch; + primary_pitch = primary_buffer->pitch; + + /* do the copy */ + while (height--) + { + vid_memcpy(dest_ptr, src_ptr, width); + src_ptr += bitmap_pitch; + dest_ptr += primary_pitch; + } +} + +static void vid_blitscreen(int num_dirties, rect_t *dirty_rects) +{ + int src_x, src_y, dest_x, dest_y; + int blit_width, blit_height; + + screen = driver->lock_write(); + + /* center in y direction */ + if (primary_buffer->height <= screen->height) + { + src_y = 0; + blit_height = primary_buffer->height; + dest_y = (screen->height - blit_height) >> 1; + } + else + { + src_y = (primary_buffer->height - screen->height) >> 1; + blit_height = screen->height; + dest_y = 0; + } + + /* and in x */ + if (primary_buffer->width <= screen->width) + { + src_x = 0; + blit_width = primary_buffer->width; + dest_x = (screen->width - blit_width) >> 1; + } + else + { + src_x = (primary_buffer->width - screen->width) >> 1; + blit_width = screen->width; + dest_x = 0; + } + + /* should we just copy the entire screen? */ + if (-1 == num_dirties) + { + uint8 *dest, *src; + + src = primary_buffer->line[src_y] + src_x; + dest = screen->line[dest_y] + dest_x; + + while (blit_height--) + { + vid_memcpy(dest, src, primary_buffer->width); + src += primary_buffer->pitch; + dest += screen->pitch; + } + } + else + { + /* we need to blit just a bunch of dirties */ + int i, j, height; + rect_t *rects = dirty_rects; + + for (i = 0; i < num_dirties && blit_height; i++) + { + height = rects->h; + if (blit_height < height) + height = blit_height; + + j = 0; + DUFFS_DEVICE( + { + vid_memcpy(screen->line[dest_y + rects->y + j] + rects->x + dest_x, + primary_buffer->line[src_y + rects->y + j] + rects->x + src_x, + rects->w); + j++; + blit_height--; + }, height); + + rects++; + } + } + + if (driver->free_write) + driver->free_write(num_dirties, dirty_rects); +} + +/* TODO: this code is sickly */ + +#define CHUNK_WIDTH 256 +#define CHUNK_HEIGHT 16 +#define MAX_DIRTIES ((256 / CHUNK_WIDTH) * (240 / CHUNK_HEIGHT)) +#define DIRTY_CUTOFF ((3 * MAX_DIRTIES) / 4) + +#if 0 +INLINE int calc_dirties(rect_t *list) +{ + bool dirty; + int num_dirties = 0; + int i = 0, j, line_offset = 0; + int iterations = primary_buffer->height / CHUNK_HEIGHT; + + for (i = 0; i < iterations; i++) + { + dirty = false; + + j = line_offset; + DUFFS_DEVICE( + { + if (vid_memcmp(back_buffer->line[j], primary_buffer->line[j], + CHUNK_WIDTH)) + { + dirty = true; + break; + } + + j++; + }, CHUNK_HEIGHT); + + if (true == dirty) + { + list->h = CHUNK_HEIGHT; + list->w = CHUNK_WIDTH; + list->x = 0; + list->y = line_offset; + list++; + + /* totally arbitrary at this point */ + if (++num_dirties > DIRTY_CUTOFF) + return -1; + } + + line_offset += CHUNK_HEIGHT; + } + + return num_dirties; +} +#endif + +void vid_flush(void) +{ + bitmap_t *temp; + int num_dirties; + rect_t dirty_rects[MAX_DIRTIES]; + + ASSERT(driver); + + if (true == driver->invalidate) + { + driver->invalidate = false; + num_dirties = -1; + } + else + { + //num_dirties = calc_dirties(dirty_rects); + num_dirties = -1; + } + + if (driver->custom_blit) + driver->custom_blit(primary_buffer, num_dirties, dirty_rects); + else + vid_blitscreen(num_dirties, dirty_rects); + + /* Swap pointers to the main/back buffers */ +// temp = back_buffer; +// back_buffer = primary_buffer; +// primary_buffer = temp; +} + +/* emulated machine tells us which resolution it wants */ +int vid_setmode(int width, int height) +{ + if (NULL != primary_buffer) + bmp_destroy(&primary_buffer); +// if (NULL != back_buffer) +// bmp_destroy(&back_buffer); + primary_buffer = bmp_create(width, height, 0); /* no overdraw */ + if (NULL == primary_buffer) + return -1; + + return 0; +} + +static int vid_findmode(int width, int height, viddriver_t *osd_driver) +{ + if (osd_driver->init(width, height)) + { + driver = NULL; + return -1; /* mode not available! */ + } + + /* we got our driver */ + driver = osd_driver; + + /* re-assert dimensions, clear the surface */ + screen = driver->lock_write(); + + /* release surface */ + if (driver->free_write) + driver->free_write(-1, NULL); + + log_printf("video driver: %s at %dx%d\n", driver->name, + screen->width, screen->height); + + return 0; +} + +/* This is the interface to the drivers, used in nofrendo.c */ +int vid_init(int width, int height, viddriver_t *osd_driver) +{ + if (vid_findmode(width, height, osd_driver)) + { + log_printf("video initialization failed for %s at %dx%d\n", + osd_driver->name, width, height); + return -1; + } + log_printf("vid_init done\n"); + + return 0; +} + +void vid_shutdown(void) +{ + if (NULL == driver) + return; + + if (NULL != primary_buffer) + bmp_destroy(&primary_buffer); +#if 0 + if (NULL != back_buffer) + bmp_destroy(&back_buffer); +#endif + + if (driver && driver->shutdown) + driver->shutdown(); +} + + +/* +** $Log: vid_drv.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.40 2000/11/25 20:26:42 matt +** not much +** +** Revision 1.39 2000/11/16 14:27:27 matt +** even more crash-proofness +** +** Revision 1.38 2000/11/16 14:11:18 neil +** Better *not* to crash in case of catastrophic failure in the driver +** +** Revision 1.37 2000/11/13 00:55:16 matt +** no dirties seems to be faster (!?!?) +** +** Revision 1.36 2000/11/06 05:16:18 matt +** minor clipping bug +** +** Revision 1.35 2000/11/06 02:16:26 matt +** cleanups +** +** Revision 1.34 2000/11/05 22:53:13 matt +** only one video driver per system, please +** +** Revision 1.33 2000/11/05 16:37:18 matt +** rolled rgb.h into bitmap.h +** +** Revision 1.32 2000/11/05 06:23:41 matt +** thinlib spawns changes +** +** Revision 1.31 2000/10/10 13:58:14 matt +** stroustrup squeezing his way in the door +** +** Revision 1.30 2000/10/10 13:03:53 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.29 2000/10/08 17:58:23 matt +** lock_read() should not allow us to clear the bitmap +** +** Revision 1.28 2000/09/18 02:06:48 matt +** -pedantic is your friend +** +** Revision 1.27 2000/08/16 02:53:05 matt +** changed init() interface a wee bit +** +** Revision 1.26 2000/08/14 02:45:59 matt +** fixed nasty bug in vid_blitscreen +** +** Revision 1.24 2000/08/11 01:44:37 matt +** clipping bugfix +** +** Revision 1.23 2000/07/31 04:28:47 matt +** one million cleanups +** +** Revision 1.22 2000/07/28 07:25:49 neil +** Video driver has an invalidate flag, telling vid_drv not to calculate dirties for the next frame +** +** Revision 1.21 2000/07/28 03:51:45 matt +** lock_read used instead of lock_write in some places +** +** Revision 1.20 2000/07/28 01:24:05 matt +** dirty rectangle support +** +** Revision 1.19 2000/07/27 23:49:52 matt +** no more getmode +** +** Revision 1.18 2000/07/27 04:30:37 matt +** change to get_mode api +** +** Revision 1.17 2000/07/27 04:05:58 matt +** changed place where name goes +** +** Revision 1.16 2000/07/27 01:16:22 matt +** api changes for new main and dirty rects +** +** Revision 1.15 2000/07/26 21:36:13 neil +** Big honkin' change -- see the mailing list +** +** Revision 1.14 2000/07/24 04:33:57 matt +** skeleton of dirty rectangle code in place +** +** Revision 1.13 2000/07/23 14:35:39 matt +** cleanups +** +** Revision 1.12 2000/07/18 19:41:26 neil +** use screen->pitch in blitscreen, not screen_width +** +** Revision 1.11 2000/07/11 04:30:16 matt +** overdraw unnecessary! +** +** Revision 1.10 2000/07/10 19:07:57 matt +** added custom clear() member call to video driver +** +** Revision 1.9 2000/07/10 03:06:49 matt +** my dependency file is broken... *snif* +** +** Revision 1.8 2000/07/10 03:04:15 matt +** removed scanlines, backbuffer from custom blit +** +** Revision 1.7 2000/07/10 01:03:20 neil +** New video scheme allows for custom blitters to be determined by the driver at runtime +** +** Revision 1.6 2000/07/09 03:34:46 matt +** temporary cleanup +** +** Revision 1.5 2000/07/08 23:48:29 neil +** Another assumption GGI kills: pitch == width for hardware bitmaps +** +** Revision 1.4 2000/07/07 20:18:03 matt +** added overdraw, fixed some bugs in blitters +** +** Revision 1.3 2000/07/07 18:33:55 neil +** no need to lock for reading just to get the dimensions +** +** Revision 1.2 2000/07/07 18:11:37 neil +** Generalizing the video driver +** +** Revision 1.1 2000/07/06 16:48:47 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/vid_drv.h b/MCUME_pico/piconofrendo/vid_drv.h new file mode 100755 index 0000000..e97ed03 --- /dev/null +++ b/MCUME_pico/piconofrendo/vid_drv.h @@ -0,0 +1,145 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** vid_drv.h +** +** Video driver +** $Id: vid_drv.h,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#ifndef _VID_DRV_H_ +#define _VID_DRV_H_ + +#include "bitmap.h" + +typedef struct viddriver_s +{ + /* name of driver */ + const char *name; + /* init function - return 0 on success, nonzero on failure */ + int (*init)(int width, int height); + /* clean up after driver (can be NULL) */ + void (*shutdown)(void); + /* set a video mode - return 0 on success, nonzero on failure */ + int (*set_mode)(int width, int height); + /* set up a palette */ + void (*set_palette)(rgb_t *palette); + /* custom bitmap clear (can be NULL) */ + void (*clear)(uint8 color); + /* lock surface for writing (required) */ + bitmap_t *(*lock_write)(void); + /* free a locked surface (can be NULL) */ + void (*free_write)(int num_dirties, rect_t *dirty_rects); + /* custom blitter - num_dirties == -1 if full blit required */ + void (*custom_blit)(bitmap_t *primary, int num_dirties, + rect_t *dirty_rects); + /* immediately invalidate the buffer, i.e. full redraw */ + bool invalidate; +} viddriver_t; + +/* TODO: filth */ +extern bitmap_t *vid_getbuffer(void); + +extern int vid_init(int width, int height, viddriver_t *osd_driver); +extern void vid_shutdown(void); + +extern int vid_setmode(int width, int height); +extern void vid_setpalette(rgb_t *pal); + +extern void vid_blit(bitmap_t *bitmap, int src_x, int src_y, int dest_x, + int dest_y, int blit_width, int blit_height); +extern void vid_flush(void); + +#endif /* _VID_DRV_H_ */ + +/* +** $Log: vid_drv.h,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.22 2000/11/05 22:53:13 matt +** only one video driver per system, please +** +** Revision 1.21 2000/11/05 16:37:18 matt +** rolled rgb.h into bitmap.h +** +** Revision 1.20 2000/11/05 06:23:41 matt +** thinlib spawns changes +** +** Revision 1.19 2000/10/10 13:58:14 matt +** stroustrup squeezing his way in the door +** +** Revision 1.18 2000/10/10 13:03:54 matt +** Mr. Clean makes a guest appearance +** +** Revision 1.17 2000/08/16 02:53:04 matt +** changed init() interface a wee bit +** +** Revision 1.16 2000/07/31 04:28:47 matt +** one million cleanups +** +** Revision 1.15 2000/07/28 07:25:49 neil +** Video driver has an invalidate flag, telling vid_drv not to calculate dirties for the next frame +** +** Revision 1.14 2000/07/27 23:49:52 matt +** no more getmode +** +** Revision 1.13 2000/07/27 04:30:37 matt +** change to get_mode api +** +** Revision 1.12 2000/07/27 04:08:04 matt +** char * -> const char * +** +** Revision 1.11 2000/07/27 04:05:58 matt +** changed place where name goes +** +** Revision 1.10 2000/07/27 01:16:22 matt +** api changes for new main and dirty rects +** +** Revision 1.9 2000/07/26 21:36:14 neil +** Big honkin' change -- see the mailing list +** +** Revision 1.8 2000/07/24 04:33:57 matt +** skeleton of dirty rectangle code in place +** +** Revision 1.7 2000/07/10 19:07:57 matt +** added custom clear() member call to video driver +** +** Revision 1.6 2000/07/10 03:04:15 matt +** removed scanlines, backbuffer from custom blit +** +** Revision 1.5 2000/07/10 01:03:20 neil +** New video scheme allows for custom blitters to be determined by the driver at runtime +** +** Revision 1.4 2000/07/09 03:34:47 matt +** temporary cleanup +** +** Revision 1.3 2000/07/07 20:17:35 matt +** better custom blitting support +** +** Revision 1.2 2000/07/07 18:11:38 neil +** Generalizing the video driver +** +** Revision 1.1 2000/07/06 16:48:47 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/vrcvisnd.c b/MCUME_pico/piconofrendo/vrcvisnd.c new file mode 100755 index 0000000..ca3d95c --- /dev/null +++ b/MCUME_pico/piconofrendo/vrcvisnd.c @@ -0,0 +1,278 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** vrcvisnd.c +** +** VRCVI sound hardware emulation +** $Id: vrcvisnd.c,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#include "noftypes.h" +#include "vrcvisnd.h" +#include "nes_apu.h" + +typedef struct vrcvirectangle_s +{ + bool enabled; + + uint8 reg[3]; + + float accum; + uint8 adder; + + int32 freq; + int32 volume; + uint8 duty_flip; +} vrcvirectangle_t; + +typedef struct vrcvisawtooth_s +{ + bool enabled; + + uint8 reg[3]; + + float accum; + uint8 adder; + uint8 output_acc; + + int32 freq; + uint8 volume; +} vrcvisawtooth_t; + +typedef struct vrcvisnd_s +{ + vrcvirectangle_t rectangle[2]; + vrcvisawtooth_t saw; + float incsize; +} vrcvisnd_t; + + +static vrcvisnd_t vrcvi; + +/* VRCVI rectangle wave generation */ +static int32 vrcvi_rectangle(vrcvirectangle_t *chan) +{ + /* reg0: 0-3=volume, 4-6=duty cycle + ** reg1: 8 bits of freq + ** reg2: 0-3=high freq, 7=enable + */ + + chan->accum -= vrcvi.incsize; /* # of clocks per wave cycle */ + while (chan->accum < 0) + { + chan->accum += chan->freq; + chan->adder = (chan->adder + 1) & 0x0F; + } + + /* return if not enabled */ + if (false == chan->enabled) + return 0; + + if (chan->adder < chan->duty_flip) + return -(chan->volume); + else + return chan->volume; +} + +/* VRCVI sawtooth wave generation */ +static int32 vrcvi_sawtooth(vrcvisawtooth_t *chan) +{ + /* reg0: 0-5=phase accumulator bits + ** reg1: 8 bits of freq + ** reg2: 0-3=high freq, 7=enable + */ + + chan->accum -= vrcvi.incsize; /* # of clocks per wav cycle */ + while (chan->accum < 0) + { + chan->accum += chan->freq; + chan->output_acc += chan->volume; + + chan->adder++; + if (7 == chan->adder) + { + chan->adder = 0; + chan->output_acc = 0; + } + } + + /* return if not enabled */ + if (false == chan->enabled) + return 0; + + return (chan->output_acc >> 3) << 9; +} + +/* mix vrcvi sound channels together */ +static int32 vrcvi_process(void) +{ + int32 output; + + output = vrcvi_rectangle(&vrcvi.rectangle[0]); + output += vrcvi_rectangle(&vrcvi.rectangle[1]); + output += vrcvi_sawtooth(&vrcvi.saw); + + return output; +} + +/* write to registers */ +static void vrcvi_write(uint32 address, uint8 value) +{ + int chan = (address >> 12) - 9; + + switch (address & 0xB003) + { + case 0x9000: + case 0xA000: + vrcvi.rectangle[chan].reg[0] = value; + vrcvi.rectangle[chan].volume = (value & 0x0F) << 8; + vrcvi.rectangle[chan].duty_flip = (value >> 4) + 1; + break; + + case 0x9001: + case 0xA001: + vrcvi.rectangle[chan].reg[1] = value; + vrcvi.rectangle[chan].freq = ((vrcvi.rectangle[chan].reg[2] & 0x0F) << 8) + value + 1; + break; + + case 0x9002: + case 0xA002: + vrcvi.rectangle[chan].reg[2] = value; + vrcvi.rectangle[chan].freq = ((value & 0x0F) << 8) + vrcvi.rectangle[chan].reg[1] + 1; + vrcvi.rectangle[chan].enabled = (value & 0x80) ? true : false; + break; + + case 0xB000: + vrcvi.saw.reg[0] = value; + vrcvi.saw.volume = value & 0x3F; + break; + + case 0xB001: + vrcvi.saw.reg[1] = value; + vrcvi.saw.freq = (((vrcvi.saw.reg[2] & 0x0F) << 8) + value + 1) << 1; + break; + + case 0xB002: + vrcvi.saw.reg[2] = value; + vrcvi.saw.freq = (((value & 0x0F) << 8) + vrcvi.saw.reg[1] + 1) << 1; + vrcvi.saw.enabled = (value & 0x80) ? true : false; + break; + + default: + break; + } +} + +/* reset state of vrcvi sound channels */ +static void vrcvi_reset(void) +{ + int i; + apu_t apu; + + /* get the phase period from the apu */ + apu_getcontext(&apu); + vrcvi.incsize = apu.cycle_rate; + + /* preload regs */ + for (i = 0; i < 3; i++) + { + vrcvi_write(0x9000 + i, 0); + vrcvi_write(0xA000 + i, 0); + vrcvi_write(0xB000 + i, 0); + } +} + +static apu_memwrite vrcvi_memwrite[] = +{ + { 0x9000, 0x9002, vrcvi_write }, /* vrc6 */ + { 0xA000, 0xA002, vrcvi_write }, + { 0xB000, 0xB002, vrcvi_write }, + { -1, -1, NULL } +}; + +apuext_t vrcvi_ext = +{ + NULL, /* no init */ + NULL, /* no shutdown */ + vrcvi_reset, + vrcvi_process, + NULL, /* no reads */ + vrcvi_memwrite +}; + +/* +** $Log: vrcvisnd.c,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.2 2000/11/05 22:21:00 matt +** help me! +** +** Revision 1.1 2000/10/24 12:20:00 matt +** changed directory structure +** +** Revision 1.17 2000/10/10 13:58:18 matt +** stroustrup squeezing his way in the door +** +** Revision 1.16 2000/10/03 11:56:20 matt +** better support for optional sound ext routines +** +** Revision 1.15 2000/09/27 12:26:03 matt +** changed sound accumulators back to floats +** +** Revision 1.14 2000/09/15 13:38:40 matt +** changes for optimized apu core +** +** Revision 1.13 2000/09/15 04:58:07 matt +** simplifying and optimizing APU core +** +** Revision 1.12 2000/07/30 04:32:59 matt +** no more apu_getcyclerate hack +** +** Revision 1.11 2000/07/17 01:52:31 matt +** made sure last line of all source files is a newline +** +** Revision 1.10 2000/07/06 11:42:41 matt +** forgot to remove FDS register range +** +** Revision 1.9 2000/07/04 04:51:41 matt +** cleanups +** +** Revision 1.8 2000/07/03 02:18:53 matt +** much better external module exporting +** +** Revision 1.7 2000/06/20 04:06:16 matt +** migrated external sound definition to apu module +** +** Revision 1.6 2000/06/20 00:08:58 matt +** changed to driver based API +** +** Revision 1.5 2000/06/09 16:49:02 matt +** removed all floating point from sound generation +** +** Revision 1.4 2000/06/09 15:12:28 matt +** initial revision +** +*/ diff --git a/MCUME_pico/piconofrendo/vrcvisnd.h b/MCUME_pico/piconofrendo/vrcvisnd.h new file mode 100755 index 0000000..136cbc2 --- /dev/null +++ b/MCUME_pico/piconofrendo/vrcvisnd.h @@ -0,0 +1,70 @@ +/* +** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com) +** +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of version 2 of the GNU Library General +** Public License as published by the Free Software Foundation. +** +** 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 +** Library General Public License for more details. To obtain a +** copy of the GNU Library General Public License, write to the Free +** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** Any permitted reproduction of these routines, in whole or in part, +** must bear this legend. +** +** +** vrcvisnd.h +** +** VRCVI (Konami MMC) sound hardware emulation header +** $Id: vrcvisnd.h,v 1.2 2001/04/27 14:37:11 neil Exp $ +*/ + +#ifndef _VRCVISND_H_ +#define _VRCVISND_H_ + +#include "nes_apu.h" + +extern apuext_t vrcvi_ext; + +#endif /* _VRCVISND_H_ */ + +/* +** $Log: vrcvisnd.h,v $ +** Revision 1.2 2001/04/27 14:37:11 neil +** wheeee +** +** Revision 1.1 2001/04/27 12:54:40 neil +** blah +** +** Revision 1.1.1.1 2001/04/27 07:03:54 neil +** initial +** +** Revision 1.1 2000/10/24 12:20:00 matt +** changed directory structure +** +** Revision 1.10 2000/09/27 12:26:03 matt +** changed sound accumulators back to floats +** +** Revision 1.9 2000/09/15 13:38:40 matt +** changes for optimized apu core +** +** Revision 1.8 2000/07/17 01:52:31 matt +** made sure last line of all source files is a newline +** +** Revision 1.7 2000/06/20 04:06:16 matt +** migrated external sound definition to apu module +** +** Revision 1.6 2000/06/20 00:08:58 matt +** changed to driver based API +** +** Revision 1.5 2000/06/09 16:49:02 matt +** removed all floating point from sound generation +** +** Revision 1.4 2000/06/09 15:12:28 matt +** initial revision +** +*/ diff --git a/MCUME_pico/picoo2em/.DS_Store b/MCUME_pico/picoo2em/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/MCUME_pico/picoo2em/.DS_Store differ diff --git a/MCUME_pico/picoo2em/AudioPlaySystem.cpp b/MCUME_pico/picoo2em/AudioPlaySystem.cpp new file mode 100644 index 0000000..36b764d --- /dev/null +++ b/MCUME_pico/picoo2em/AudioPlaySystem.cpp @@ -0,0 +1,179 @@ +#include "emuapi.h" + +#ifdef HAS_SND + +#include "AudioPlaySystem.h" + +#define SAMPLERATE AUDIO_SAMPLE_RATE_EXACT +#define CLOCKFREQ 985248 + +#ifndef CUSTOM_SND +static const short square[]={ +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +}; + +const short noise[] { +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,-32767,-32767, +32767,-32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +}; + +#define NOISEBSIZE 0x100 + +typedef struct +{ + unsigned int spos; + unsigned int sinc; + unsigned int vol; +} Channel; + +static Channel chan[6] = { + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0} }; + +#endif + +volatile bool playing = false; + + +static void snd_Reset(void) +{ +#ifndef CUSTOM_SND + chan[0].vol = 0; + chan[1].vol = 0; + chan[2].vol = 0; + chan[3].vol = 0; + chan[4].vol = 0; + chan[5].vol = 0; + chan[0].sinc = 0; + chan[1].sinc = 0; + chan[2].sinc = 0; + chan[3].sinc = 0; + chan[4].sinc = 0; + chan[5].sinc = 0; +#endif +} + + +#ifdef CUSTOM_SND +extern "C" { +void SND_Process(void *sndbuffer, int sndn); +} +#endif + +#include +void AudioPlaySystem::snd_Mixer(short * stream, int len ) +{ + if (playing) + { +#ifdef CUSTOM_SND + //printf("s\n"); + SND_Process((void*)stream, len); +#else + int i; + long s; + len = len >> 1; + short v0=chan[0].vol; + short v1=chan[1].vol; + short v2=chan[2].vol; + short v3=chan[3].vol; + short v4=chan[4].vol; + short v5=chan[5].vol; + for (i=0;i>8)&0x3f])>>11); + s+=((v1*square[(chan[1].spos>>8)&0x3f])>>11); + s+=((v2*square[(chan[2].spos>>8)&0x3f])>>11); + s+=((v3*noise[(chan[3].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v4*noise[(chan[4].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v5*noise[(chan[5].spos>>8)&(NOISEBSIZE-1)])>>11); + *stream++ = (short)(s); + *stream++ = (short)(s); + chan[0].spos += chan[0].sinc; + chan[1].spos += chan[1].sinc; + chan[2].spos += chan[2].sinc; + chan[3].spos += chan[3].sinc; + chan[4].spos += chan[4].sinc; + chan[5].spos += chan[5].sinc; + } +#endif + } +} + +void AudioPlaySystem::begin(void) +{ + this->reset(); +} + +void AudioPlaySystem::start(void) +{ + playing = true; +} + +void AudioPlaySystem::setSampleParameters(float clockfreq, float samplerate) { +} + +void AudioPlaySystem::reset(void) +{ + snd_Reset(); +} + +void AudioPlaySystem::stop(void) +{ + playing = false; +} + +bool AudioPlaySystem::isPlaying(void) +{ + return playing; +} + + + +void AudioPlaySystem::sound(int C, int F, int V) { +#ifndef CUSTOM_SND + if (C < 6) { + chan[C].vol = V; + chan[C].sinc = F>>1; + } +#endif +} + +void AudioPlaySystem::step(void) { +} + +void AudioPlaySystem::buzz(int size, int val) { +} +#endif diff --git a/MCUME_pico/picoo2em/AudioPlaySystem.h b/MCUME_pico/picoo2em/AudioPlaySystem.h new file mode 100644 index 0000000..5d2efc0 --- /dev/null +++ b/MCUME_pico/picoo2em/AudioPlaySystem.h @@ -0,0 +1,26 @@ +#ifndef audioplaysystem_h_ +#define audioplaysystem_h_ + +#ifdef HAS_SND + +#include "platform_config.h" + +class AudioPlaySystem +{ +public: + AudioPlaySystem(void) { }; + void begin(void); + void setSampleParameters(float clockfreq, float samplerate); + void reset(void); + void start(void); + void stop(void); + bool isPlaying(void); + void sound(int C, int F, int V); + void buzz(int size, int val); + void step(void); + static void snd_Mixer(short * stream, int len ); +}; + +#endif + +#endif diff --git a/MCUME_pico/picoo2em/Oddemu.c b/MCUME_pico/picoo2em/Oddemu.c new file mode 100644 index 0000000..b796545 --- /dev/null +++ b/MCUME_pico/picoo2em/Oddemu.c @@ -0,0 +1,208 @@ + +/**************************************************************************** +* Module name : oddemu +* Description : Library SMSEMU +* Author : J-M Harvengt +* History : 14-07-97 Creation +****************************************************************************/ +#include "vmachine.h" +#include "vdc.h" +#include "oddemu.h" + +#include "emuapi.h" + +/**************************************************************************** +* Local macros / typedefs +****************************************************************************/ +#define MAX_ROM_SIZE 8192 //16384 + +/**************************************************************************** +* Local procedures definition +****************************************************************************/ + + +/**************************************************************************** +* Local data +****************************************************************************/ +#define MAXC 1024 +static char * bios=0; //[MAXC]; +static char * scshot=0; //[MAXC]; +static char * lorom=0; //[MAX_ROM_SIZE]; + + +/**************************************************************************** +* Global data +****************************************************************************/ + +/**************************************************************************** +* Local procedures +****************************************************************************/ + +/**************************************************************************** +* Exported procedures +****************************************************************************/ +void emu_KeyboardOnDown(int keymodifer, int key) { +} + +void emu_KeyboardOnUp(int keymodifer, int key) { +} + +void odd_Init(void) +{ + if (bios == 0) bios = (char *)emu_Malloc(MAXC); + if (scshot == 0) scshot = (char *)emu_Malloc(MAXC); + if (lorom == 0) lorom = (char *)emu_Malloc(MAX_ROM_SIZE); + + app_data.debug = 0; + app_data.stick[0] = 0; + app_data.stick[1] = 1; + app_data.bank = 0; + app_data.limit = 1; + app_data.sound_en = 1; + app_data.speed = 100; + app_data.wsize = 1; + app_data.fullscreen = 0; + app_data.scanlines = 0; + app_data.voice = 1; + app_data.window_title = "O2EM v"; + app_data.svolume = 200; + app_data.vvolume = 100; + app_data.filter = 0; + app_data.exrom = 0; + app_data.crc = 0; + app_data.scshot = scshot; + app_data.euro = 0; + app_data.openb = 0; +} + + +static void load_bios( char *biosname) +{ + static char s[MAXC+10]; + unsigned long crc; + + emu_LoadFile(biosname,&rom1[0],1024); + + memcpy(&rom2[0],&rom1[0],1024); + memcpy(&rom3[0],&rom1[0],1024); + memcpy(&rom4[0],&rom1[0],1024); + + crc = crc32_buf(rom1,1024); + + if (crc==0x8016A315) + emu_printf("Odyssey2 bios ROM loaded\n"); + else if (crc==0xE20A9F41) + emu_printf("Videopac+ G7400 bios ROM loaded\n"); + else + emu_printf("Bios ROM loaded (unknown version)\n"); +} + + +static void load_cart(char *file) +{ + long l; + + l = emu_LoadFile(file,&lorom[0],MAX_ROM_SIZE); + + app_data.crc = crc32_buf(lorom, l); // crc32_file(file); + + if (app_data.crc == 0xAFB23F89) app_data.exrom = 1; /* Musician */ + if (app_data.crc == 0x3BFEF56B) app_data.exrom = 1; /* Four in 1 Row! */ + + if (((app_data.crc == 0x975AB8DA) || (app_data.crc == 0xE246A812)) && (!app_data.debug)) { + emu_printf("Error: file is an incomplete ROM dump\n"); + } + + if (l < 2049) { + app_data.bank=1; + memcpy(&rom1[1024],&lorom[0],l); + memcpy(&rom1[3072],&rom1[2048],1024); /* simulate missing A10 */ + rom=rom1; + emu_printf("2K"); + } else if (l == 3072) { + app_data.bank=1; + memcpy(&rom1[1024],&lorom[0],3072); + rom=rom1; + emu_printf("3K"); + } else if (l == 4096) { + if (app_data.exrom) { + app_data.bank=1; + memcpy(&extROM[0],&lorom[0],1024); + memcpy(&rom1[1024],&lorom[1024],3072); + rom=rom1; + emu_printf("3K EXROM"); + } else { + app_data.bank=2; + memcpy(&rom1[1024],&lorom[0],2048); + memcpy(&rom2[1024],&lorom[2048],2048); + memcpy(&rom1[3072],&rom1[2048],1024); /* simulate missing A10 */ + memcpy(&rom2[3072],&rom2[2048],1024); /* simulate missing A10 */ + rom=rom2; + emu_printf("4K"); + } + } else if (l == 6144) { + app_data.bank=2; + memcpy(&rom1[1024],&lorom[0],3072); + memcpy(&rom2[1024],&lorom[3072],3072); + rom=rom2; + emu_printf("6K"); + } else if (l == 8192) { + app_data.bank=3; + memcpy(&rom1[1024],&lorom[0],2048); + memcpy(&rom2[1024],&lorom[2048],2048); + memcpy(&rom3[1024],&lorom[2*2048],2048); + memcpy(&rom4[1024],&lorom[3*2048],2048); + memcpy(&rom1[3072],&rom1[2048],1024); /* simulate missing A10 */ + memcpy(&rom2[3072],&rom2[2048],1024); /* simulate missing A10 */ + memcpy(&rom3[3072],&rom3[2048],1024); /* simulate missing A10 */ + memcpy(&rom4[3072],&rom4[2048],1024); /* simulate missing A10 */ + rom=rom4; + emu_printf("8K"); + } else if (l == 12288) { + app_data.bank=3; + memcpy(&rom1[1024],&lorom[0],3072); + memcpy(&rom2[1024],&lorom[3072],3072); + memcpy(&rom3[1024],&lorom[2*3072],3072); + memcpy(&rom4[1024],&lorom[3*3072],3072); + rom=rom4; + emu_printf("12K"); + } else { + emu_printf("Invalid ROM size"); + } + if ((rom1[1024+12]=='O') && (rom1[1024+13]=='P') && (rom1[1024+14]=='N') && (rom1[1024+15]=='B')) app_data.openb=1; + orom=rom; + //printf("CRC: %08lX\n",app_data.crc); +} + +void odd_Start(char * filename) +{ + load_bios("o2rom.bin"); + load_cart(filename); + init_display(); + init_cpu(); + init_system(); +} + + +//static void snd_Mixer(short * stream, int len ) +//{ +// audio_process(stream, len>>2); +//} + +void odd_Stop(void) +{ + close_audio(); + close_display(); +} + + + + +void odd_Step(void) +{ + run(); + +//emu_printf("s"); + emu_DrawScreen((unsigned char *)getGBuf()+BORDERW/2, BMPW-BORDERW, BMPH, BMPW); + emu_DrawVsync(); +} diff --git a/MCUME_pico/picoo2em/Oddemu.h b/MCUME_pico/picoo2em/Oddemu.h new file mode 100644 index 0000000..62f975f --- /dev/null +++ b/MCUME_pico/picoo2em/Oddemu.h @@ -0,0 +1,9 @@ +extern void odd_Init(void); +extern void odd_Start(char * filename); +extern void odd_Stop(void); +extern void odd_Step(void); + + + + + diff --git a/MCUME_pico/picoo2em/audio.c b/MCUME_pico/picoo2em/audio.c new file mode 100644 index 0000000..0a7a84a --- /dev/null +++ b/MCUME_pico/picoo2em/audio.c @@ -0,0 +1,183 @@ + +/* + * O2EM Freeware Odyssey2 / Videopac+ Emulator + * + * Created by Daniel Boris (c) 1997,1998 + * + * Developed by Andre de la Rocha + * + * http://o2em.sourceforge.net + * + * + * + * O2 audio emulation + */ + + +#include +#include +#include +#include "cpu.h" +#include "types.h" +#include "config.h" +#include "vmachine.h" +#include "audio.h" + +//#define SAMPLE_RATE 44100 +#define PERIOD1 11 //11 +#define PERIOD2 44 //44 + +#define SOUND_BUFFER_LEN 1056 + +#define AUD_CTRL 0xAA +#define AUD_D0 0xA7 +#define AUD_D1 0xA8 +#define AUD_D2 0xA9 + + +int sound_IRQ; +//static short *stream=NULL; +//static AUDIOSTREAM *stream=NULL; +//FILE *sndlog=NULL; + +static double flt_a=0.0, flt_b=0.0; +static unsigned char flt_prv = 0; + + +static void filter(unsigned char *buf, unsigned long len); + + +//void audio_process(unsigned char *buffer){ +#ifdef GP32 +void audio_process(unsigned short *buffer, int len) +#else +void audio_process(short *buffer, int len) +#endif +{ + unsigned long aud_data; +#ifdef GP32 + unsigned short s; +#else + short s; +#endif + int volume, re_circ, noise, enabled, intena, period, pnt, cnt, rndbit, pos; + + aud_data = (VDCwrite[AUD_D2] | (VDCwrite[AUD_D1] << 8) | (VDCwrite[AUD_D0] << 16)); + + intena = VDCwrite[0xA0] & 0x04; + + pnt = cnt = 0; + + noise = VDCwrite[AUD_CTRL] & 0x10; + enabled = VDCwrite[AUD_CTRL] & 0x80; + rndbit = (enabled && noise) ? (rand()%2) : 0; + + while (pnt < len/*SOUND_BUFFER_LEN*/) { + pos = (tweakedaudio) ? (pnt/3) : (MAXLINES-1); + volume = AudioVector[pos] & 0x0F; + enabled = AudioVector[pos] & 0x80; + period = (AudioVector[pos] & 0x20) ? PERIOD1 : PERIOD2; + re_circ = AudioVector[pos] & 0x40; + +#ifdef GP32 + s= ( (enabled) ? ((aud_data & 0x01)^rndbit) * (0x10 * volume) : 0) << 8; +#else + s= (( (enabled) ? ((aud_data & 0x01)^rndbit) * (0x10 * volume) : 0) - 128) << 8 ; +#endif + *buffer++ = s; + *buffer++ = s; + pnt++; + cnt++; + + if (cnt >= period) { + cnt=0; + aud_data = (re_circ) ? ((aud_data >> 1) | ((aud_data & 1) << 23)) : (aud_data >>= 1); + rndbit = (enabled && noise) ? (rand()%2) : 0; + + if (enabled && intena && (!sound_IRQ)) { + sound_IRQ = 1; + ext_IRQ(); + } + } + } + +// if (app_data.filter) filter(buffer, SOUND_BUFFER_LEN); +} + + +void update_audio(void) { +// unsigned char *p; + if (app_data.sound_en) { +// p = (unsigned char *)get_audio_stream_buffer(stream); +// if (p) { +// audio_process(p); +// if (sndlog) fwrite(p,1,SOUND_BUFFER_LEN,sndlog); +// free_audio_stream_buffer(stream); +// } + } +} + + +void init_audio(void) { +// int i; + + sound_IRQ=0; +// set_volume(255,255); + init_sound_stream(); + +// sndlog = NULL; +} + + +void init_sound_stream(void){ + int vol; + if (app_data.sound_en){ + if (app_data.filter) + vol = (255*app_data.svolume)/100; + else + vol = (255*app_data.svolume)/200; +// stream = play_audio_stream(SOUND_BUFFER_LEN,8,0,SAMPLE_RATE,vol,128); +// if (!stream) { +// printf("Error creating audio stream!\n"); +// app_data.sound_en=0; +// } + flt_a = flt_b = 0.0; + flt_prv = 0; + } +} + + +void mute_audio(void){ + if (app_data.sound_en /*&& stream*/){ +// stop_audio_stream(stream); +// stream=NULL; + } +} + + +void close_audio(void) { + if (app_data.sound_en /*&& stream*/) { +// stop_audio_stream(stream); + } + app_data.sound_en=0; +} + + +static void filter(unsigned char *buffer, unsigned long len){ + static unsigned char buf[SOUND_BUFFER_LEN]; + int t; + unsigned long i; + if (len>SOUND_BUFFER_LEN) return; + memcpy(buf,buffer,len); + for (i=0; i255.0)||(flt_a<-255.0)) flt_a=0.0; + buffer[i] = (unsigned char)((flt_a+255.0)/2.0); + } + flt_prv = buf[len-1]; +} + + diff --git a/MCUME_pico/picoo2em/audio.h b/MCUME_pico/picoo2em/audio.h new file mode 100644 index 0000000..ee52fa6 --- /dev/null +++ b/MCUME_pico/picoo2em/audio.h @@ -0,0 +1,18 @@ +#ifndef __AUDIO_H +#define __AUDIO_H + +void update_audio(void); +void init_audio(void); +void close_audio(void); +void init_sound_stream(void); +void mute_audio(void); +#ifdef GP32 +void audio_process(unsigned short *buffer, int len); +#else +void audio_process(short *buffer, int len); +#endif +extern int sound_IRQ; + +#endif + + diff --git a/MCUME_pico/picoo2em/config.h b/MCUME_pico/picoo2em/config.h new file mode 100644 index 0000000..1c7168c --- /dev/null +++ b/MCUME_pico/picoo2em/config.h @@ -0,0 +1,8 @@ +#ifndef __CONFIG_H +#define __CONFIG_H + +#define O2EM_VERSION "1.01" +#define RELEASE_DATE "(October/2002)" + +#endif + diff --git a/MCUME_pico/picoo2em/cpu.c b/MCUME_pico/picoo2em/cpu.c new file mode 100644 index 0000000..477f95f --- /dev/null +++ b/MCUME_pico/picoo2em/cpu.c @@ -0,0 +1,1596 @@ + +/* + * O2EM Freeware Odyssey2 / Videopac+ Emulator + * + * Created by Daniel Boris (c) 1997,1998 + * + * Developed by Andre de la Rocha + * + * http://o2em.sourceforge.net + * + * + * + * 8048 microcontroller emulation + */ + + +#include +#include "types.h" +#include "vmachine.h" +//#include "voice.h" +#include "vdc.h" +//#include "vpp.h" +#include "cpu.h" + + +Byte acc; /* Accumulator */ +ADDRESS pc; /* Program counter */ +long clk; /* clock */ + +Byte itimer; /* Internal timer */ +Byte reg_pnt; /* pointer to register bank */ +Byte timer_on; /* 0=timer off/1=timer on */ +Byte count_on; /* 0=count off/1=count on */ +Byte psw; /* Processor status word */ +Byte sp; /* Stack pointer (part of psw) */ + +Byte p1; /* I/O port 1 */ +Byte p2; /* I/O port 2 */ +Byte xirq_pend; /* external IRQ pending */ +Byte tirq_pend; /* timer IRQ pending */ +Byte t_flag; /* Timer flag */ + +static ADDRESS lastpc; +static ADDRESS A11; /* PC bit 11 */ +static ADDRESS A11ff; +static Byte bs; /* Register Bank (part of psw) */ +static Byte f0; /* Flag Bit (part of psw) */ +static Byte f1; /* Flag Bit 1 */ +static Byte ac; /* Aux Carry (part of psw) */ +static Byte cy; /* Carry flag (part of psw) */ +static Byte xirq_en; /* external IRQ's enabled */ +static Byte tirq_en; /* Timer IRQ enabled */ +static Byte irq_ex; /* IRQ executing */ + +static int master_count; + + +#define push(d) {intRAM[sp++] = (d); if (sp > 23) sp = 8;} +#define pull() (sp--, (sp < 8)?(sp=23):0, intRAM[sp]) +#define make_psw() {psw = (cy << 7) | ac | f0 | bs | 0x08; psw = psw | ((sp - 8) >> 1);} +#define illegal(o) {} +#define undef(i) {printf("** unimplemented instruction %x, %x**\n",i,pc);} + + +void init_cpu(void){ + pc=0; + sp=8; + bs=0; + p1=p2=0xFF; + ac=cy=f0=0; + A11=A11ff=0; + timer_on=0; + count_on=0; + reg_pnt=0; + tirq_en=xirq_en=irq_ex=xirq_pend=tirq_pend=0; +} + + +void ext_IRQ(void){ + int_clk = 5; /* length of pulse on /INT */ + if (xirq_en && !irq_ex) { + irq_ex=1; + xirq_pend=0; + clk+=2; + make_psw(); + push(pc & 0xFF); + push(((pc & 0xF00) >> 8) | (psw & 0xF0)); + pc = 0x03; + A11ff=A11; + A11=0; + } + if (pendirq && (!xirq_en)) xirq_pend=1; +} + + +void tim_IRQ(void){ + if (tirq_en && !irq_ex) { + irq_ex=2; + tirq_pend=0; + clk+=2; + make_psw(); + push(pc & 0xFF); + push(((pc & 0xF00) >> 8) | (psw & 0xF0)); + pc = 0x07; + A11ff=A11; + A11=0; + } + if (pendirq && (!tirq_en)) tirq_pend=1; +} + + +void make_psw_debug(void){ + make_psw(); +} + + + +void cpu_exec(void) { + Byte op; + ADDRESS adr; + Byte dat; + int temp; + + for (;;) { + + clk=0; + + lastpc=pc; + op=rom[pc++]; + switch (op) { + case 0x00: /* NOP */ + clk++; + break; + case 0x01: /* ILL */ + illegal(op); + clk++; + break; + case 0x02: /* OUTL BUS,A */ + clk+=2; + undef(0x02); + break; + case 0x03: /* ADD A,#data */ + clk+=2; + cy=ac=0; + dat=rom[pc++]; + if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f) ac=0x40; + temp=acc+dat; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x04: /* JMP */ + pc=rom[pc] | A11; + clk+=2; + break; + case 0x05: /* EN I */ + xirq_en=1; + clk++; + break; + case 0x06: /* ILL */ + clk++; + illegal(op); + break; + case 0x07: /* DEC A */ + acc--; + clk++; + break; + case 0x08: /* INS A,BUS*/ + clk+=2; + acc=in_bus(); + break; + case 0x09: /* IN A,Pp */ + acc=p1; + clk+=2; + break; + case 0x0A: /* IN A,Pp */ + acc=read_P2(); + clk+=2; + break; + case 0x0B: /* ILL */ + clk++; + illegal(op); + case 0x0C: /* MOVD A,P4 */ + clk+=2; + //acc=read_PB(0); + break; + case 0x0D: /* MOVD A,P5 */ + clk+=2; + //acc=read_PB(1); + break; + case 0x0E: /* MOVD A,P6 */ + clk+=2; + //acc=read_PB(2); + break; + case 0x0F: /* MOVD A,P7 */ + clk+=2; + //acc=read_PB(3); + break; + case 0x10: /* INC @Ri */ + intRAM[intRAM[reg_pnt] & 0x3F]++; + clk++; + break; + case 0x11: /* INC @Ri */ + intRAM[intRAM[reg_pnt+1] & 0x3F]++; + clk++; + break; + case 0x12: /* JBb address */ + clk+=2; + dat = rom[pc]; + if (acc & 0x01) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0x13: /* ADDC A,#data */ + clk+=2; + dat=rom[pc++]; + ac=0; + if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f) ac=0x40; + temp=acc+dat+cy; + cy=0; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + + case 0x14: /* CALL */ + make_psw(); + adr = rom[pc] | A11; + pc++; + clk+=2; + push(pc & 0xFF); + push(((pc & 0xF00) >> 8) | (psw & 0xF0)); + pc = adr; + break; + case 0x15: /* DIS I */ + xirq_en=0; + clk++; + break; + case 0x16: /* JTF */ + clk+=2; + dat = rom[pc]; + if (t_flag) + pc=(pc & 0xF00) | dat; + else + pc++; + t_flag=0; + break; + case 0x17: /* INC A */ + acc++; + clk++; + break; + case 0x18: /* INC Rr */ + intRAM[reg_pnt]++; + clk++; + break; + case 0x19: /* INC Rr */ + intRAM[reg_pnt+1]++; + clk++; + break; + case 0x1A: /* INC Rr */ + intRAM[reg_pnt+2]++; + clk++; + break; + case 0x1B: /* INC Rr */ + intRAM[reg_pnt+3]++; + clk++; + break; + case 0x1C: /* INC Rr */ + intRAM[reg_pnt+4]++; + clk++; + break; + case 0x1D: /* INC Rr */ + intRAM[reg_pnt+5]++; + clk++; + break; + case 0x1E: /* INC Rr */ + intRAM[reg_pnt+6]++; + clk++; + break; + case 0x1F: /* INC Rr */ + intRAM[reg_pnt+7]++; + clk++; + break; + case 0x20: /* XCH A,@Ri */ + clk++; + dat=acc; + acc=intRAM[intRAM[reg_pnt] & 0x3F]; + intRAM[intRAM[reg_pnt] & 0x3F] = dat; + break; + case 0x21: /* XCH A,@Ri */ + clk++; + dat=acc; + acc=intRAM[intRAM[reg_pnt+1] & 0x3F]; + intRAM[intRAM[reg_pnt+1] & 0x3F] = dat; + break; + case 0x22: /* ILL */ + illegal(op); + break; + case 0x23: /* MOV a,#data */ + clk+=2; + acc = rom[pc++]; + break; + + case 0x24: /* JMP */ + pc=rom[pc] | 0x100 | A11; + clk+=2; + break; + case 0x25: /* EN TCNTI */ + tirq_en=1; + clk++; + break; + case 0x26: /* JNT0 */ + clk+=2; + dat = rom[pc]; +//JMH if (!get_voice_status()) +// pc=(pc & 0xF00) | dat; +// else + pc++; + break; + case 0x27: /* CLR A */ + clk++; + acc=0; + break; + case 0x28: /* XCH A,Rr */ + dat=acc; + acc=intRAM[reg_pnt]; + intRAM[reg_pnt]=dat; + clk++; + break; + case 0x29: /* XCH A,Rr */ + dat=acc; + acc=intRAM[reg_pnt+1]; + intRAM[reg_pnt+1]=dat; + clk++; + break; + case 0x2A: /* XCH A,Rr */ + dat=acc; + acc=intRAM[reg_pnt+2]; + intRAM[reg_pnt+2]=dat; + clk++; + break; + case 0x2B: /* XCH A,Rr */ + dat=acc; + acc=intRAM[reg_pnt+3]; + intRAM[reg_pnt+3]=dat; + clk++; + break; + case 0x2C: /* XCH A,Rr */ + dat=acc; + acc=intRAM[reg_pnt+4]; + intRAM[reg_pnt+4]=dat; + clk++; + break; + case 0x2D: /* XCH A,Rr */ + dat=acc; + acc=intRAM[reg_pnt+5]; + intRAM[reg_pnt+5]=dat; + clk++; + break; + case 0x2E: /* XCH A,Rr */ + dat=acc; + acc=intRAM[reg_pnt+6]; + intRAM[reg_pnt+6]=dat; + clk++; + break; + case 0x2F: /* XCH A,Rr */ + dat=acc; + acc=intRAM[reg_pnt+7]; + intRAM[reg_pnt+7]=dat; + clk++; + break; + case 0x30: /* XCHD A,@Ri */ + clk++; + adr=intRAM[reg_pnt] & 0x3F; + dat=acc & 0x0F; + acc=acc & 0xF0; + acc=acc | (intRAM[adr] & 0x0F); + intRAM[adr] &= 0xF0; + intRAM[adr] |= dat; + break; + case 0x31: /* XCHD A,@Ri */ + clk++; + adr=intRAM[reg_pnt+1] & 0x3F; + dat=acc & 0x0F; + acc=acc & 0xF0; + acc=acc | (intRAM[adr] & 0x0F); + intRAM[adr] &= 0xF0; + intRAM[adr] |= dat; + break; + case 0x32: /* JBb address */ + clk+=2; + dat=rom[pc]; + if (acc & 0x02) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0x33: /* ILL */ + clk++; + illegal(op); + break; + case 0x34: /* CALL */ + make_psw(); + adr = rom[pc] | 0x100 | A11; + pc++; + clk+=2; + push(pc & 0xFF); + push(((pc & 0xF00) >> 8) | (psw & 0xF0)); + pc = adr; + break; + case 0x35: /* DIS TCNTI */ + tirq_en=0; + tirq_pend=0; + clk++; + break; + case 0x36: /* JT0 */ + clk+=2; + dat=rom[pc]; +// JMH if (get_voice_status()) +// pc=(pc & 0xF00) | dat; +// else + pc++; + break; + case 0x37: /* CPL A */ + acc = acc ^ 0xFF; + clk++; + break; + case 0x38: /* ILL */ + clk++; + illegal(op); + break; + case 0x39: /* OUTL P1,A */ + clk+=2; + write_p1(acc); + break; + case 0x3A: /* OUTL P2,A */ + clk+=2; + p2=acc; + break; + case 0x3B: /* ILL */ + clk++; + illegal(op); + break; + case 0x3C: /* MOVD P4,A */ + clk+=2; + //write_PB(0,acc); + break; + case 0x3D: /* MOVD P5,A */ + clk+=2; + //write_PB(1,acc); + break; + case 0x3E: /* MOVD P6,A */ + clk+=2; + //write_PB(2,acc); + break; + case 0x3F: /* MOVD P7,A */ + clk+=2; + //write_PB(3,acc); + break; + case 0x40: /* ORL A,@Ri */ + clk++; + acc = acc | intRAM[intRAM[reg_pnt] & 0x3F]; + break; + case 0x41: /* ORL A,@Ri */ + clk++; + acc = acc | intRAM[intRAM[reg_pnt+1] & 0x3F]; + break; + case 0x42: /* MOV A,T */ + clk++; + acc = itimer; + break; + case 0x43: /* ORL A,#data */ + clk+=2; + acc = acc | rom[pc++]; + break; + case 0x44: /* JMP */ + pc=rom[pc] | 0x200 | A11; + clk+=2; + break; + case 0x45: /* STRT CNT */ + /* printf("START: %d=%d\n",master_clk/22,itimer); */ + count_on=1; + clk++; + break; + case 0x46: /* JNT1 */ + clk+=2; + dat = rom[pc]; + if (!read_t1()) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0x47: /* SWAP A */ + clk++; + dat=(acc & 0xF0) >> 4; + acc = acc << 4; + acc = acc | dat; + break; + case 0x48: /* ORL A,Rr */ + clk++; + acc = acc | intRAM[reg_pnt]; + break; + case 0x49: /* ORL A,Rr */ + clk++; + acc = acc | intRAM[reg_pnt+1]; + break; + case 0x4A: /* ORL A,Rr */ + clk++; + acc = acc | intRAM[reg_pnt+2]; + break; + case 0x4B: /* ORL A,Rr */ + clk++; + acc = acc | intRAM[reg_pnt+3]; + break; + case 0x4C: /* ORL A,Rr */ + clk++; + acc = acc | intRAM[reg_pnt+4]; + break; + case 0x4D: /* ORL A,Rr */ + clk++; + acc = acc | intRAM[reg_pnt+5]; + break; + case 0x4E: /* ORL A,Rr */ + clk++; + acc = acc | intRAM[reg_pnt+6]; + break; + case 0x4F: /* ORL A,Rr */ + clk++; + acc = acc | intRAM[reg_pnt+7]; + break; + + case 0x50: /* ANL A,@Ri */ + acc = acc & intRAM[intRAM[reg_pnt] & 0x3F]; + clk++; + break; + case 0x51: /* ANL A,@Ri */ + acc = acc & intRAM[intRAM[reg_pnt+1] & 0x3F]; + clk++; + break; + case 0x52: /* JBb address */ + clk+=2; + dat=rom[pc]; + if (acc & 0x04) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0x53: /* ANL A,#data */ + clk+=2; + acc = acc & rom[pc++]; + break; + case 0x54: /* CALL */ + make_psw(); + adr = rom[pc] | 0x200 | A11; + pc++; + clk+=2; + push(pc & 0xFF); + push(((pc & 0xF00) >> 8) | (psw & 0xF0)); + pc = adr; + break; + case 0x55: /* STRT T */ + timer_on=1; + clk++; + break; + case 0x56: /* JT1 */ + clk+=2; + dat = rom[pc]; + if (read_t1()) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0x57: /* DA A */ + clk++; + if (((acc & 0x0F) > 0x09) || ac) acc+=6; + dat = (acc & 0xF0) >> 4; + if ((dat > 9) || cy) { + dat+=6; + cy=1; + } + else { + cy=0; + } + /* if (dat > 0x0F) cy=1; */ + acc = (acc & 0x0F) | (dat << 4); + break; + case 0x58: /* ANL A,Rr */ + clk++; + acc = acc & intRAM[reg_pnt]; + break; + case 0x59: /* ANL A,Rr */ + clk++; + acc = acc & intRAM[reg_pnt+1]; + break; + case 0x5A: /* ANL A,Rr */ + clk++; + acc = acc & intRAM[reg_pnt+2]; + break; + case 0x5B: /* ANL A,Rr */ + clk++; + acc = acc & intRAM[reg_pnt+3]; + break; + case 0x5C: /* ANL A,Rr */ + clk++; + acc = acc & intRAM[reg_pnt+4]; + break; + case 0x5D: /* ANL A,Rr */ + clk++; + acc = acc & intRAM[reg_pnt+5]; + break; + case 0x5E: /* ANL A,Rr */ + clk++; + acc = acc & intRAM[reg_pnt+6]; + break; + case 0x5F: /* ANL A,Rr */ + clk++; + acc = acc & intRAM[reg_pnt+7]; + break; + + case 0x60: /* ADD A,@Ri */ + clk++; + cy=ac=0; + dat=intRAM[intRAM[reg_pnt] & 0x3F]; + if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f) ac=0x40; + temp=acc+dat; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x61: /* ADD A,@Ri */ + clk++; + cy=ac=0; + dat=intRAM[intRAM[reg_pnt+1] & 0x3F]; + if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f) ac=0x40; + temp=acc+dat; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x62: /* MOV T,A */ + clk++; + itimer=acc; + break; + case 0x63: /* ILL */ + clk++; + illegal(op); + break; + case 0x64: /* JMP */ + pc=rom[pc] | 0x300 | A11; + clk+=2; + break; + case 0x65: /* STOP TCNT */ + clk++; + /* printf("STOP %d\n",master_clk/22); */ + count_on=timer_on=0; + break; + case 0x66: /* ILL */ + clk++; + illegal(op); + break; + case 0x67: /* RRC A */ + dat=cy; + cy=acc & 0x01; + acc = acc >> 1; + if (dat) + acc = acc | 0x80; + else + acc = acc & 0x7F; + clk++; + break; + case 0x68: /* ADD A,Rr */ + clk++; + cy=ac=0; + dat=intRAM[reg_pnt]; + if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f) ac=0x40; + temp=acc+dat; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x69: /* ADD A,Rr */ + clk++; + cy=ac=0; + dat=intRAM[reg_pnt+1]; + if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f) ac=0x40; + temp=acc+dat; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x6A: /* ADD A,Rr */ + clk++; + cy=ac=0; + dat=intRAM[reg_pnt+2]; + if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f) ac=0x40; + temp=acc+dat; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x6B: /* ADD A,Rr */ + clk++; + cy=ac=0; + dat=intRAM[reg_pnt+3]; + if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f) ac=0x40; + temp=acc+dat; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x6C: /* ADD A,Rr */ + clk++; + cy=ac=0; + dat=intRAM[reg_pnt+4]; + if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f) ac=0x40; + temp=acc+dat; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x6D: /* ADD A,Rr */ + clk++; + cy=ac=0; + dat=intRAM[reg_pnt+5]; + if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f) ac=0x40; + temp=acc+dat; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x6E: /* ADD A,Rr */ + clk++; + cy=ac=0; + dat=intRAM[reg_pnt+6]; + if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f) ac=0x40; + temp=acc+dat; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x6F: /* ADD A,Rr */ + clk++; + cy=ac=0; + dat=intRAM[reg_pnt+7]; + if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f) ac=0x40; + temp=acc+dat; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x70: /* ADDC A,@Ri */ + clk++; + ac=0; + dat=intRAM[intRAM[reg_pnt] & 0x3F]; + if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f) ac=0x40; + temp=acc+dat+cy; + cy=0; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x71: /* ADDC A,@Ri */ + clk++; + ac=0; + dat=intRAM[intRAM[reg_pnt+1] & 0x3F]; + if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f) ac=0x40; + temp=acc+dat+cy; + cy=0; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + + case 0x72: /* JBb address */ + clk+=2; + dat=rom[pc]; + if (acc & 0x08) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0x73: /* ILL */ + clk++; + illegal(op); + break; + case 0x74: /* CALL */ + make_psw(); + adr = rom[pc] | 0x300 | A11; + pc++; + clk+=2; + push(pc & 0xFF); + push(((pc & 0xF00) >> 8) | (psw & 0xF0)); + pc = adr; + break; + case 0x75: /* EN CLK */ + clk++; + undef(op); + break; + case 0x76: /* JF1 address */ + clk+=2; + dat=rom[pc]; + if (f1) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0x77: /* RR A */ + clk++; + dat=acc & 0x01; + acc = acc >> 1; + if (dat) + acc = acc | 0x80; + else + acc = acc & 0x7f; + break; + + case 0x78: /* ADDC A,Rr */ + clk++; + ac=0; + dat=intRAM[reg_pnt]; + if (((acc & 0x0f) + (dat & 0x0f)+cy) > 0x0f) ac=0x40; + temp=acc+dat+cy; + cy=0; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x79: /* ADDC A,Rr */ + clk++; + ac=0; + dat=intRAM[reg_pnt+1]; + if (((acc & 0x0f) + (dat & 0x0f)+cy) > 0x0f) ac=0x40; + temp=acc+dat+cy; + cy=0; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x7A: /* ADDC A,Rr */ + clk++; + ac=0; + dat=intRAM[reg_pnt+2]; + if (((acc & 0x0f) + (dat & 0x0f)+cy) > 0x0f) ac=0x40; + temp=acc+dat+cy; + cy=0; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x7B: /* ADDC A,Rr */ + clk++; + ac=0; + dat=intRAM[reg_pnt+3]; + if (((acc & 0x0f) + (dat & 0x0f)+cy) > 0x0f) ac=0x40; + temp=acc+dat+cy; + cy=0; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x7C: /* ADDC A,Rr */ + clk++; + ac=0; + dat=intRAM[reg_pnt+4]; + if (((acc & 0x0f) + (dat & 0x0f)+cy) > 0x0f) ac=0x40; + temp=acc+dat+cy; + cy=0; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x7D: /* ADDC A,Rr */ + clk++; + ac=0; + dat=intRAM[reg_pnt+5]; + if (((acc & 0x0f) + (dat & 0x0f)+cy) > 0x0f) ac=0x40; + temp=acc+dat+cy; + cy=0; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x7E: /* ADDC A,Rr */ + clk++; + ac=0; + dat=intRAM[reg_pnt+6]; + if (((acc & 0x0f) + (dat & 0x0f)+cy) > 0x0f) ac=0x40; + temp=acc+dat+cy; + cy=0; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + case 0x7F: /* ADDC A,Rr */ + clk++; + ac=0; + dat=intRAM[reg_pnt+7]; + if (((acc & 0x0f) + (dat & 0x0f)+cy) > 0x0f) ac=0x40; + temp=acc+dat+cy; + cy=0; + if (temp > 0xFF) cy=1; + acc=(temp & 0xFF); + break; + + case 0x80: /* MOVX A,@Ri */ + acc=ext_read(intRAM[reg_pnt]); + clk+=2; + break; + case 0x81: /* MOVX A,@Ri */ + acc=ext_read(intRAM[reg_pnt+1]); + clk+=2; + break; + case 0x82: /* ILL */ + clk++; + illegal(op); + break; + case 0x83: /* RET */ + pc = ((pull() & 0x0F) << 8); + pc = pc | pull(); + break; + + case 0x84: /* JMP */ + pc=rom[pc] | 0x400 | A11; + clk+=2; + break; + case 0x85: /* CLR F0 */ + clk++; + f0=0; + break; + case 0x86: /* JNI address */ + clk+=2; + dat=rom[pc]; + if (int_clk > 0) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + break; + case 0x87: /* ILL */ + illegal(op); + clk++; + break; + case 0x88: /* BUS,#data */ + clk+=2; + undef(op); + break; + case 0x89: /* ORL Pp,#data */ + write_p1(p1 | rom[pc++]); + clk+=2; + break; + case 0x8A: /* ORL Pp,#data */ + p2 = p2 | rom[pc++]; + clk+=2; + break; + case 0x8B: /* ILL */ + illegal(op); + clk++; + break; + case 0x8C: /* ORLD P4,A */ + //write_PB(0,read_PB(0)|acc); + clk+=2; + break; + case 0x8D: /* ORLD P5,A */ + //write_PB(1,read_PB(1)|acc); + clk+=2; + break; + case 0x8E: /* ORLD P6,A */ + //write_PB(2,read_PB(2)|acc); + clk+=2; + break; + case 0x8F: /* ORLD P7,A */ + //write_PB(3,read_PB(3)|acc); + clk+=2; + break; + case 0x90: /* MOVX @Ri,A */ + ext_write(acc,intRAM[reg_pnt]); + clk+=2; + break; + case 0x91: /* MOVX @Ri,A */ + ext_write(acc,intRAM[reg_pnt+1]); + clk+=2; + break; + case 0x92: /* JBb address */ + clk+=2; + dat=rom[pc]; + if (acc & 0x10) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0x93: /* RETR*/ + /* printf("RETR %d\n",master_clk/22); */ + clk+=2; + dat=pull(); + pc = (dat & 0x0F) << 8; + cy = (dat & 0x80) >> 7; + ac = dat & 0x40; + f0 = dat & 0x20; + bs = dat & 0x10; + if (bs) + reg_pnt=24; + else + reg_pnt=0; + pc = pc | pull(); + irq_ex=0; + A11=A11ff; + break; + case 0x94: /* CALL */ + make_psw(); + adr = rom[pc] | 0x400 | A11; + pc++; + clk+=2; + push(pc & 0xFF); + push(((pc & 0xF00) >> 8) | (psw & 0xF0)); + pc = adr; + break; + case 0x95: /* CPL F0 */ + f0 = f0 ^ 0x20; + clk++; + break; + case 0x96: /* JNZ address */ + clk+=2; + dat=rom[pc]; + if (acc != 0) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0x97: /* CLR C */ + cy=0; + clk++; + break; + case 0x98: /* ANL BUS,#data */ + clk+=2; + undef(op); + break; + case 0x99: /* ANL Pp,#data */ + write_p1(p1 & rom[pc++]); + clk+=2; + break; + case 0x9A: /* ANL Pp,#data */ + p2 = p2 & rom[pc++]; + clk+=2; + break; + case 0x9B: /* ILL */ + illegal(op); + clk++; + break; + case 0x9C: /* ANLD P4,A */ + //write_PB(0,read_PB(0)&acc); + clk+=2; + break; + case 0x9D: /* ANLD P5,A */ + //write_PB(1,read_PB(1)&acc); + clk+=2; + break; + case 0x9E: /* ANLD P6,A */ + //write_PB(2,read_PB(2)&acc); + clk+=2; + break; + case 0x9F: /* ANLD P7,A */ + //write_PB(3,read_PB(3)&acc); + clk+=2; + break; + case 0xA0: /* MOV @Ri,A */ + intRAM[intRAM[reg_pnt] & 0x3F]=acc; + clk++; + break; + case 0xA1: /* MOV @Ri,A */ + intRAM[intRAM[reg_pnt+1] & 0x3F]=acc; + clk++; + break; + case 0xA2: /* ILL */ + clk++; + illegal(op); + break; + case 0xA3: /* MOVP A,@A */ + acc=rom[(pc & 0xF00) | acc]; + clk+=2; + break; + case 0xA4: /* JMP */ + pc=rom[pc] | 0x500 | A11; + clk+=2; + break; + case 0xA5: /* CLR F1 */ + clk++; + f1=0; + break; + case 0xA6: /* ILL */ + illegal(op); + clk++; + break; + case 0xA7: /* CPL C */ + cy = cy ^ 0x01; + clk++; + break; + case 0xA8: /* MOV Rr,A */ + intRAM[reg_pnt] = acc; + break; + case 0xA9: /* MOV Rr,A */ + intRAM[reg_pnt+1] = acc; + break; + case 0xAA: /* MOV Rr,A */ + intRAM[reg_pnt+2] = acc; + break; + case 0xAB: /* MOV Rr,A */ + intRAM[reg_pnt+3] = acc; + break; + case 0xAC: /* MOV Rr,A */ + intRAM[reg_pnt+4] = acc; + break; + case 0xAD: /* MOV Rr,A */ + intRAM[reg_pnt+5] = acc; + break; + case 0xAE: /* MOV Rr,A */ + intRAM[reg_pnt+6] = acc; + break; + case 0xAF: /* MOV Rr,A */ + intRAM[reg_pnt+7] = acc; + break; + case 0xB0: /* MOV @Ri,#data */ + intRAM[intRAM[reg_pnt] & 0x3F]=rom[pc++]; + clk+=2; + break; + case 0xB1: /* MOV @Ri,#data */ + intRAM[intRAM[reg_pnt+1] & 0x3F]=rom[pc++]; + clk+=2; + break; + case 0xB2: /* JBb address */ + clk+=2; + dat=rom[pc]; + if (acc & 0x20) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0xB3: /* JMPP @A */ + adr = (pc & 0xF00) | acc; + pc=(pc & 0xF00) | rom[adr]; + clk+=2; + break; + case 0xB4: /* CALL */ + make_psw(); + adr = rom[pc] | 0x500 | A11; + pc++; + clk+=2; + push(pc & 0xFF); + push(((pc & 0xF00) >> 8) | (psw & 0xF0)); + pc = adr; + break; + case 0xB5: /* CPL F1 */ + f1 = f1 ^ 0x01; + clk++; + break; + case 0xB6: /* JF0 address */ + clk+=2; + dat=rom[pc]; + if (f0) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0xB7: /* ILL */ + clk++; + illegal(op); + break; + case 0xB8: /* MOV Rr,#data */ + intRAM[reg_pnt]=rom[pc++]; + clk+=2; + break; + case 0xB9: /* MOV Rr,#data */ + intRAM[reg_pnt+1]=rom[pc++]; + clk+=2; + break; + case 0xBA: /* MOV Rr,#data */ + intRAM[reg_pnt+2]=rom[pc++]; + clk+=2; + break; + case 0xBB: /* MOV Rr,#data */ + intRAM[reg_pnt+3]=rom[pc++]; + clk+=2; + break; + case 0xBC: /* MOV Rr,#data */ + intRAM[reg_pnt+4]=rom[pc++]; + clk+=2; + break; + case 0xBD: /* MOV Rr,#data */ + intRAM[reg_pnt+5]=rom[pc++]; + clk+=2; + break; + case 0xBE: /* MOV Rr,#data */ + intRAM[reg_pnt+6]=rom[pc++]; + clk+=2; + break; + case 0xBF: /* MOV Rr,#data */ + intRAM[reg_pnt+7]=rom[pc++]; + clk+=2; + break; + case 0xC0: /* ILL */ + illegal(op); + clk++; + break; + case 0xC1: /* ILL */ + illegal(op); + clk++; + break; + case 0xC2: /* ILL */ + illegal(op); + clk++; + break; + case 0xC3: /* ILL */ + illegal(op); + clk++; + break; + case 0xC4: /* JMP */ + pc=rom[pc] | 0x600 | A11; + clk+=2; + break; + case 0xC5: /* SEL RB0 */ + bs=reg_pnt=0; + clk++; + break; + case 0xC6: /* JZ address */ + clk+=2; + dat=rom[pc]; + if (acc == 0) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0xC7: /* MOV A,PSW */ + clk++; + make_psw(); + acc=psw; + break; + case 0xC8: /* DEC Rr */ + intRAM[reg_pnt]--; + clk++; + break; + case 0xC9: /* DEC Rr */ + intRAM[reg_pnt+1]--; + clk++; + break; + case 0xCA: /* DEC Rr */ + intRAM[reg_pnt+2]--; + clk++; + break; + case 0xCB: /* DEC Rr */ + intRAM[reg_pnt+3]--; + clk++; + break; + case 0xCC: /* DEC Rr */ + intRAM[reg_pnt+4]--; + clk++; + break; + case 0xCD: /* DEC Rr */ + intRAM[reg_pnt+5]--; + clk++; + break; + case 0xCE: /* DEC Rr */ + intRAM[reg_pnt+6]--; + clk++; + break; + case 0xCF: /* DEC Rr */ + intRAM[reg_pnt+7]--; + clk++; + break; + case 0xD0: /* XRL A,@Ri */ + acc = acc ^ intRAM[intRAM[reg_pnt] & 0x3F]; + clk++; + break; + case 0xD1: /* XRL A,@Ri */ + acc = acc ^ intRAM[intRAM[reg_pnt+1] & 0x3F]; + clk++; + break; + case 0xD2: /* JBb address */ + clk+=2; + dat = rom[pc]; + if (acc & 0x40) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0xD3: /* XRL A,#data */ + clk+=2; + acc = acc ^ rom[pc++]; + break; + case 0xD4: /* CALL */ + make_psw(); + adr = rom[pc] | 0x600 | A11; + pc++; + clk+=2; + push(pc & 0xFF); + push(((pc & 0xF00) >> 8) | (psw & 0xF0)); + pc = adr; + break; + case 0xD5: /* SEL RB1 */ + bs=0x10; + reg_pnt=24; + clk++; + break; + case 0xD6: /* ILL */ + illegal(op); + clk++; + break; + case 0xD7: /* MOV PSW,A */ + psw=acc; + clk++; + cy = (psw & 0x80) >> 7; + ac = psw & 0x40; + f0 = psw & 0x20; + bs = psw & 0x10; + if (bs) + reg_pnt = 24; + else + reg_pnt = 0; + sp = (psw & 0x07) << 1; + sp+=8; + break; + case 0xD8: /* XRL A,Rr */ + acc = acc ^ intRAM[reg_pnt]; + clk++; + break; + case 0xD9: /* XRL A,Rr */ + acc = acc ^ intRAM[reg_pnt+1]; + clk++; + break; + case 0xDA: /* XRL A,Rr */ + acc = acc ^ intRAM[reg_pnt+2]; + clk++; + break; + case 0xDB: /* XRL A,Rr */ + acc = acc ^ intRAM[reg_pnt+3]; + clk++; + break; + case 0xDC: /* XRL A,Rr */ + acc = acc ^ intRAM[reg_pnt+4]; + clk++; + break; + case 0xDD: /* XRL A,Rr */ + acc = acc ^ intRAM[reg_pnt+5]; + clk++; + break; + case 0xDE: /* XRL A,Rr */ + acc = acc ^ intRAM[reg_pnt+6]; + clk++; + break; + case 0xDF: /* XRL A,Rr */ + acc = acc ^ intRAM[reg_pnt+7]; + clk++; + break; + case 0xE0: /* ILL */ + clk++; + illegal(op); + break; + case 0xE1: /* ILL */ + clk++; + illegal(op); + break; + case 0xE2: /* ILL */ + clk++; + illegal(op); + break; + case 0xE3: /* MOVP3 A,@A */ + + adr = 0x300 | acc; + acc=rom[adr]; + clk+=2; + break; + case 0xE4: /* JMP */ + pc=rom[pc] | 0x700 | A11; + clk+=2; + break; + case 0xE5: /* SEL MB0 */ + A11=0; + A11ff = 0; + clk++; + break; + case 0xE6: /* JNC address */ + clk+=2; + dat=rom[pc]; + if (!cy) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0xE7: /* RL A */ + clk++; + dat=acc & 0x80; + acc = acc << 1; + if (dat) + acc = acc | 0x01; + else + acc = acc & 0xFE; + break; + case 0xE8: /* DJNZ Rr,address */ + clk+=2; + intRAM[reg_pnt]--; + dat=rom[pc]; + if (intRAM[reg_pnt] != 0) { + pc = pc & 0xF00; + pc = pc | dat; + } else pc++; + break; + case 0xE9: /* DJNZ Rr,address */ + clk+=2; + intRAM[reg_pnt+1]--; + dat=rom[pc]; + if (intRAM[reg_pnt+1] != 0) { + pc = pc & 0xF00; + pc = pc | dat; + } else pc++; + break; + case 0xEA: /* DJNZ Rr,address */ + clk+=2; + intRAM[reg_pnt+2]--; + dat=rom[pc]; + if (intRAM[reg_pnt+2] != 0) { + pc = pc & 0xF00; + pc = pc | dat; + } else pc++; + break; + case 0xEB: /* DJNZ Rr,address */ + clk+=2; + intRAM[reg_pnt+3]--; + dat=rom[pc]; + if (intRAM[reg_pnt+3] != 0) { + pc = pc & 0xF00; + pc = pc | dat; + } else pc++; + break; + case 0xEC: /* DJNZ Rr,address */ + clk+=2; + intRAM[reg_pnt+4]--; + dat=rom[pc]; + if (intRAM[reg_pnt+4] != 0) { + pc = pc & 0xF00; + pc = pc | dat; + } else pc++; + break; + case 0xED: /* DJNZ Rr,address */ + clk+=2; + intRAM[reg_pnt+5]--; + dat=rom[pc]; + if (intRAM[reg_pnt+5] != 0) { + pc = pc & 0xF00; + pc = pc | dat; + } else pc++; + break; + case 0xEE: /* DJNZ Rr,address */ + clk+=2; + intRAM[reg_pnt+6]--; + dat=rom[pc]; + if (intRAM[reg_pnt+6] != 0) { + pc = pc & 0xF00; + pc = pc | dat; + } else pc++; + break; + case 0xEF: /* DJNZ Rr,address */ + clk+=2; + intRAM[reg_pnt+7]--; + dat=rom[pc]; + if (intRAM[reg_pnt+7] != 0) { + pc = pc & 0xF00; + pc = pc | dat; + } else pc++; + break; + case 0xF0: /* MOV A,@Ri */ + clk++; + acc=intRAM[intRAM[reg_pnt] & 0x3F]; + break; + case 0xF1: /* MOV A,@Ri */ + clk++; + acc=intRAM[intRAM[reg_pnt + 1] & 0x3F]; + break; + case 0xF2: /* JBb address */ + clk+=2; + dat=rom[pc]; + if (acc & 0x80) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0xF3: /* ILL */ + illegal(op); + clk++; + break; + case 0xF4: /* CALL */ + clk+=2; + make_psw(); + adr = rom[pc] | 0x700 | A11; + pc++; + push(pc & 0xFF); + push(((pc & 0xF00) >> 8) | (psw & 0xF0)); + pc = adr; + break; + case 0xF5: /* SEL MB1 */ + if (irq_ex) { + A11ff = 0x800; + } + else + { + A11=0x800; + A11ff = 0x800; + } + clk++; + break; + case 0xF6: /* JC address */ + clk+=2; + dat=rom[pc]; + if (cy) + pc=(pc & 0xF00) | dat; + else + pc++; + break; + case 0xF7: /* RLC A */ + dat=cy; + cy=(acc & 0x80) >> 7; + acc = acc << 1; + if (dat) + acc = acc | 0x01; + else + acc = acc & 0xFE; + clk++; + break; + case 0xF8: /* MOV A,Rr */ + clk++; + acc = intRAM[reg_pnt]; + break; + case 0xF9: /* MOV A,Rr */ + clk++; + acc = intRAM[reg_pnt + 1]; + break; + case 0xFA: /* MOV A,Rr */ + clk++; + acc = intRAM[reg_pnt + 2]; + break; + case 0xFB: /* MOV A,Rr */ + clk++; + acc = intRAM[reg_pnt + 3]; + break; + case 0xFC: /* MOV A,Rr */ + clk++; + acc = intRAM[reg_pnt + 4]; + break; + case 0xFD: /* MOV A,Rr */ + clk++; + acc = intRAM[reg_pnt + 5]; + break; + case 0xFE: /* MOV A,Rr */ + clk++; + acc = intRAM[reg_pnt + 6]; + break; + case 0xFF: /* MOV A,Rr */ + clk++; + acc = intRAM[reg_pnt + 7]; + break; + } + + + master_clk+=clk; + h_clk+=clk; + clk_counter+=clk; + + /* flag for JNI */ + if (int_clk > clk) + int_clk -= clk; + else + int_clk = 0; + + /* pending IRQs */ + if (xirq_pend) ext_IRQ(); + if (tirq_pend) tim_IRQ(); + + if (h_clk > LINECNT-1) { + h_clk-=LINECNT; + if (enahirq && (VDCwrite[0xA0] & 0x01)) ext_IRQ(); + if (count_on && mstate == 0) { + itimer++; + if (itimer == 0) { + t_flag=1; + tim_IRQ(); + if (!ccolflag) { + clear_collision(); + ccolflag=1; + } + draw_region(); + } + } + } + + if (timer_on) { + master_count+=clk; + if (master_count > 31) { + master_count-=31; + itimer++; + if (itimer == 0) { + t_flag=1; + tim_IRQ(); + } + } + } + + if ((mstate==0) && (master_clk > VBLCLK)) + handle_vbl(); + + if ((mstate==1) && (master_clk > evblclk)) { + handle_evbl(); + break; + } + + if (app_data.debug) break; + } + +} + diff --git a/MCUME_pico/picoo2em/cpu.h b/MCUME_pico/picoo2em/cpu.h new file mode 100644 index 0000000..c7d9380 --- /dev/null +++ b/MCUME_pico/picoo2em/cpu.h @@ -0,0 +1,34 @@ +#ifndef CPU_H +#define CPU_H + +#include "types.h" + +extern Byte acc; /* Accumulator */ +extern ADDRESS pc; /* Program counter */ +extern long clk; /* clock */ + +extern Byte itimer; /* Internal timer */ +extern Byte reg_pnt; /* pointer to register bank */ +extern Byte timer_on; /* 0=timer off/1=timer on */ +extern Byte count_on; /* 0=count off/1=count on */ + +extern Byte t_flag; /* Timer flag */ + +extern Byte psw; /* Processor status word */ +extern Byte sp; /* Stack pointer (part of psw) */ + +extern Byte p1; /* I/O port 1 */ +extern Byte p2; /* I/O port 2 */ + +extern Byte xirq_pend; +extern Byte tirq_pend; + +void init_cpu(void); +void cpu_exec(void); +void ext_IRQ(void); +void tim_IRQ(void); +void make_psw_debug(void); + + +#endif /* CPU_H */ + diff --git a/MCUME_pico/picoo2em/crc32.c b/MCUME_pico/picoo2em/crc32.c new file mode 100644 index 0000000..b38b4e3 --- /dev/null +++ b/MCUME_pico/picoo2em/crc32.c @@ -0,0 +1,111 @@ + +/* + * O2EM Freeware Odyssey2 / Videopac+ Emulator + * + * Created by Daniel Boris (c) 1997,1998 + * + * Developed by Andre de la Rocha + * + * http://o2em.sourceforge.net + * + * + * + * CRC32 functions used to identify files + */ + + +#include +#include +#include "crc32.h" +//#include "pgmspace.h" + +static const unsigned long crc32tab[256] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, + 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, + 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, + 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, + 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, + 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, + 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, + 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, + 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, + 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, + 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, + 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, + 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, + 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, + 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, + 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, + 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, + 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, + 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, + 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, + 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, + 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, + 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, + 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, + 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, + 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, + 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, + 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, + 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, + 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, + 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, + 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, + 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, + 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, + 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, +}; + + +unsigned long crc32_buf(const void *buf, long len){ + unsigned long crc = ~0; + unsigned char *p = (unsigned char*)buf; + + while (len--) crc = (crc >> 8) ^ crc32tab[(crc ^ (*p++)) & 0xff]; + return ~crc; +} + + +unsigned long crc32_file(const char *filename){ + unsigned long crc = ~0; + FILE *f; + int c; + + f = fopen(filename,"rb"); + if (f){ + while ((c=fgetc(f)) != EOF) crc = (crc >> 8) ^ crc32tab[(crc ^ c) & 0xff]; + fclose(f); + } + return ~crc; +} + diff --git a/MCUME_pico/picoo2em/crc32.h b/MCUME_pico/picoo2em/crc32.h new file mode 100644 index 0000000..e00c9a2 --- /dev/null +++ b/MCUME_pico/picoo2em/crc32.h @@ -0,0 +1,7 @@ +#ifndef __CRC32_H +#define __CRC32_H + +unsigned long crc32_buf(const void *buf, long len); +unsigned long crc32_file(const char *filename); + +#endif diff --git a/MCUME_pico/picoo2em/cset.c b/MCUME_pico/picoo2em/cset.c new file mode 100644 index 0000000..3adbcb8 --- /dev/null +++ b/MCUME_pico/picoo2em/cset.c @@ -0,0 +1,86 @@ + +/* + * O2EM Freeware Odyssey2 / Videopac+ Emulator + * + * Created by Daniel Boris (c) 1997,1998 + * + * Developed by Andre de la Rocha + * + * http://o2em.sourceforge.net + * + * + * + * O2 character table + */ + + +#include "types.h" +#include "cset.h" + + +const Byte cset[512]= { +0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00, +0x18,0x38,0x18,0x18,0x18,0x18,0x3C,0x00, +0x3C,0x66,0x0C,0x18,0x30,0x60,0x7E,0x00, +0x7C,0xC6,0x06,0x3C,0x06,0xC6,0x7C,0x00, +0xCC,0xCC,0xCC,0xFE,0x0C,0x0C,0x0C,0x00, +0xFE,0xC0,0xC0,0x7C,0x06,0xC6,0x7C,0x00, +0x7C,0xC6,0xC0,0xFC,0xC6,0xC6,0x7C,0x00, +0xFE,0x06,0x0C,0x18,0x30,0x60,0xC0,0x00, +0x7C,0xC6,0xC6,0x7C,0xC6,0xC6,0x7C,0x00, +0x7C,0xC6,0xC6,0x7E,0x06,0xC6,0x7C,0x00, +0x00,0x18,0x18,0x00,0x18,0x18,0x00,0x00, +0x18,0x7E,0x58,0x7E,0x1A,0x7E,0x18,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x3C,0x66,0x0C,0x18,0x18,0x00,0x18,0x00, +0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFE,0x00, +0xFC,0xC6,0xC6,0xFC,0xC0,0xC0,0xC0,0x00, +0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00, +0xC6,0xC6,0xC6,0xD6,0xFE,0xEE,0xC6,0x00, +0xFE,0xC0,0xC0,0xF8,0xC0,0xC0,0xFE,0x00, +0xFC,0xC6,0xC6,0xFC,0xD8,0xCC,0xC6,0x00, +0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x00, +0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00, +0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, +0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00, +0x7C,0xC6,0xC6,0xC6,0xDE,0xCC,0x76,0x00, +0x7C,0xC6,0xC0,0x7C,0x06,0xC6,0x7C,0x00, +0xFC,0xC6,0xC6,0xC6,0xC6,0xC6,0xFC,0x00, +0xFE,0xC0,0xC0,0xF8,0xC0,0xC0,0xC0,0x00, +0x7C,0xC6,0xC0,0xC0,0xCE,0xC6,0x7E,0x00, +0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0x00, +0x06,0x06,0x06,0x06,0x06,0xC6,0x7C,0x00, +0xC6,0xCC,0xD8,0xF0,0xD8,0xCC,0xC6,0x00, +0x38,0x6C,0xC6,0xC6,0xFE,0xC6,0xC6,0x00, +0x7E,0x06,0x0C,0x18,0x30,0x60,0x7E,0x00, +0xC6,0xC6,0x6C,0x38,0x6C,0xC6,0xC6,0x00, +0x7C,0xC6,0xC0,0xC0,0xC0,0xC6,0x7C,0x00, +0xC6,0xC6,0xC6,0xC6,0xC6,0x6C,0x38,0x00, +0xFC,0xC6,0xC6,0xFC,0xC6,0xC6,0xFC,0x00, +0xC6,0xEE,0xFE,0xD6,0xC6,0xC6,0xC6,0x00, +0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00, +0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, +0x00,0x66,0x3C,0x18,0x3C,0x66,0x00,0x00, +0x00,0x18,0x00,0x7E,0x00,0x18,0x00,0x00, +0x00,0x00,0x7E,0x00,0x7E,0x00,0x00,0x00, +0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x00, +0xC6,0xE6,0xF6,0xFE,0xDE,0xCE,0xC6,0x00, +0x03,0x06,0x0C,0x18,0x30,0x60,0xC0,0x00, +0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00, +0xCE,0xDB,0xDB,0xDB,0xDB,0xDB,0xCE,0x00, +0x00,0x00,0x3C,0x7E,0x7E,0x7E,0x3C,0x00, +0x1C,0x1C,0x18,0x1E,0x18,0x18,0x1C,0x00, +0x1C,0x1C,0x18,0x1E,0x18,0x34,0x26,0x00, +0x38,0x38,0x18,0x78,0x18,0x2C,0x64,0x00, +0x38,0x38,0x18,0x78,0x18,0x18,0x38,0x00, +0x00,0x18,0x0C,0xFE,0x0C,0x18,0x00,0x00, +0x18,0x3C,0x7E,0xFF,0xFF,0x18,0x18,0x00, +0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0x00, +0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,0x00, +0x38,0x38,0x12,0xFE,0xB8,0x28,0x6C,0x00, +0xC0,0x60,0x30,0x18,0x0C,0x06,0x03,0x00, +0x00,0x00,0x0C,0x08,0x08,0x7F,0x3E,0x00, +0x00,0x03,0x63,0xFF,0xFF,0x18,0x08,0x00, +0x00,0x00,0x00,0x10,0x38,0xFF,0x7E,0x00, +0x00,0x00,0x00,0x06,0x6E,0xFF,0x7E,0x00}; + diff --git a/MCUME_pico/picoo2em/cset.h b/MCUME_pico/picoo2em/cset.h new file mode 100644 index 0000000..49f7ecf --- /dev/null +++ b/MCUME_pico/picoo2em/cset.h @@ -0,0 +1,6 @@ +#ifndef __CSET_H +#define __CSET_H + +extern const Byte cset[512]; + +#endif diff --git a/MCUME_pico/picoo2em/emuapi.cpp b/MCUME_pico/picoo2em/emuapi.cpp new file mode 100644 index 0000000..75f32fd --- /dev/null +++ b/MCUME_pico/picoo2em/emuapi.cpp @@ -0,0 +1,804 @@ +#define KEYMAP_PRESENT 1 + +#define PROGMEM + +#include "pico.h" +#include "pico/stdlib.h" +#include "hardware/adc.h" +#include +#include + +extern "C" { + #include "emuapi.h" + #include "iopins.h" +} + + +#include "vga_t_dma.h" +const uint16_t deflogo[] = { + 0,0 +}; +static const uint16_t * logo = deflogo; + +#define MAX_FILES 64 +#define MAX_FILENAME_SIZE 24 +#define MAX_MENULINES 9 +#define TEXT_HEIGHT 16 +#define TEXT_WIDTH 8 +#define MENU_FILE_XOFFSET (6*TEXT_WIDTH) +#define MENU_FILE_YOFFSET (2*TEXT_HEIGHT) +#define MENU_FILE_W (MAX_FILENAME_SIZE*TEXT_WIDTH) +#define MENU_FILE_H (MAX_MENULINES*TEXT_HEIGHT) +#define MENU_FILE_BGCOLOR RGBVAL16(0x00,0x00,0x40) +#define MENU_JOYS_YOFFSET (12*TEXT_HEIGHT) +#define MENU_VBAR_XOFFSET (0*TEXT_WIDTH) +#define MENU_VBAR_YOFFSET (MENU_FILE_YOFFSET) + +#define MENU_TFT_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_TFT_YOFFSET (MENU_VBAR_YOFFSET+32) +#define MENU_VGA_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_VGA_YOFFSET (MENU_VBAR_YOFFSET+MENU_FILE_H-32-37) + +extern TFT_T_DMA tft; + +static char romspath[64]; +static int nbFiles=0; +static int curFile=0; +static int topFile=0; +static char selection[MAX_FILENAME_SIZE+1]=""; +static char files[MAX_FILES][MAX_FILENAME_SIZE]; +static bool menuRedraw=true; + +static bool i2cKeyboardPresent = false; +static unsigned short * keys; +static int keyMap; + +static int keypadval=0; +static bool joySwapped = false; +static uint16_t bLastState; +static int xRef; +static int yRef; +static uint8_t usbnavpad=0; + +static bool menuOn=true; + + + + +void emu_printf(char * text) +{ + printf("%s\n",text); +} + +void emu_printf(int val) +{ + printf("%d\n",val); +} + +void emu_printi(int val) +{ + printf("%d\n",val); +} + +void emu_printh(int val) +{ + printf("0x%.8\n",val); +} + +static int malbufpt = 0; +static char malbuf[EXTRA_HEAP]; + +void * emu_Malloc(int size) +{ + void * retval = malloc(size); + if (!retval) { + emu_printf("failled to allocate"); + emu_printf(size); + emu_printf("fallback"); + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + } + else { + emu_printf("failure to allocate"); + } + } + else { + emu_printf("could allocate dynamic "); + emu_printf(size); + } + + return retval; +} + +void * emu_MallocI(int size) +{ + void * retval = NULL; + + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + emu_printf("could allocate static "); + emu_printf(size); + } + else { + emu_printf("failure to allocate"); + } + + return retval; +} +void emu_Free(void * pt) +{ + free(pt); +} + + + + + +int emu_ReadAnalogJoyX(int min, int max) +{ +#ifdef PIN_JOY2_A1X + adc_select_input(0); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVX + val = 4095 - val; +#endif + val = val-xRef; + val = ((val*140)/100); + if ( (val > -512) && (val < 512) ) val = 0; + val = val+2048; + return (val*(max-min))/4096; +} + +int emu_ReadAnalogJoyY(int min, int max) +{ +#ifdef PIN_JOY2_A2Y + adc_select_input(1); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVY + val = 4095 - val; +#endif + val = val-yRef; + val = ((val*120)/100); + if ( (val > -512) && (val < 512) ) val = 0; + //val = (val*(max-min))/4096; + val = val+2048; + //return val+(max-min)/2; + return (val*(max-min))/4096; +} + + +static uint16_t readAnalogJoystick(void) +{ + uint16_t joysval = 0; + + int xReading = emu_ReadAnalogJoyX(0,256); + if (xReading > 128) joysval |= MASK_JOY2_LEFT; + else if (xReading < 128) joysval |= MASK_JOY2_RIGHT; + + int yReading = emu_ReadAnalogJoyY(0,256); + if (yReading < 128) joysval |= MASK_JOY2_UP; + else if (yReading > 128) joysval |= MASK_JOY2_DOWN; + +#ifdef PIN_JOY2_BTN + joysval |= (gpio_get(PIN_JOY2_BTN) ? 0 : MASK_JOY2_BTN); +#endif + return (joysval); +} + + +int emu_SwapJoysticks(int statusOnly) { + if (!statusOnly) { + if (joySwapped) { + joySwapped = false; + } + else { + joySwapped = true; + } + } + return(joySwapped?1:0); +} + +int emu_GetPad(void) +{ + return(keypadval/*|((joySwapped?1:0)<<7)*/); +} + +int emu_ReadKeys(void) +{ + uint16_t retval; + uint16_t j1 = readAnalogJoystick(); + uint16_t j2 = 0; + + // Second joystick +#if INVY +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_DOWN; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_UP; +#endif +#else +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_UP; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_DOWN; +#endif +#endif +#if INVX +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_LEFT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_RIGHT; +#endif +#else +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_RIGHT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_LEFT; +#endif +#endif +#ifdef PIN_JOY1_BTN + if ( !gpio_get(PIN_JOY1_BTN) ) j2 |= MASK_JOY2_BTN; +#endif + if (joySwapped) { + retval = ((j1 << 8) | j2); + } + else { + retval = ((j2 << 8) | j1); + } + + if (usbnavpad & MASK_JOY2_UP) retval |= MASK_JOY2_UP; + if (usbnavpad & MASK_JOY2_DOWN) retval |= MASK_JOY2_DOWN; + if (usbnavpad & MASK_JOY2_LEFT) retval |= MASK_JOY2_LEFT; + if (usbnavpad & MASK_JOY2_RIGHT) retval |= MASK_JOY2_RIGHT; + if (usbnavpad & MASK_JOY2_BTN) retval |= MASK_JOY2_BTN; +#ifdef PIN_KEY_USER1 + if ( !gpio_get(PIN_KEY_USER1) ) retval |= MASK_KEY_USER1; +#endif +#ifdef PIN_KEY_USER2 + if ( !gpio_get(PIN_KEY_USER2) ) retval |= MASK_KEY_USER2; +#endif +#ifdef PIN_KEY_USER3 + if ( !gpio_get(PIN_KEY_USER3) ) retval |= MASK_KEY_USER3; +#endif +#ifdef PIN_KEY_USER4 + if ( !gpio_get(PIN_KEY_USER4) ) retval |= MASK_KEY_USER4; +#endif + + //Serial.println(retval,HEX); + + if ( ((retval & (MASK_KEY_USER1+MASK_KEY_USER2)) == (MASK_KEY_USER1+MASK_KEY_USER2)) + || (retval & MASK_KEY_USER4 ) ) + { + } + + return (retval); +} + +unsigned short emu_DebounceLocalKeys(void) +{ + uint16_t bCurState = emu_ReadKeys(); + uint16_t bClick = bCurState & ~bLastState; + bLastState = bCurState; + + return (bClick); +} + +int emu_ReadI2CKeyboard(void) { + int retval=0; + + return(retval); +} + +void emu_InitJoysticks(void) { + + // Second Joystick +#ifdef PIN_JOY1_1 + gpio_set_pulls(PIN_JOY1_1,true,false); + gpio_set_dir(PIN_JOY1_1,GPIO_IN); +#endif +#ifdef PIN_JOY1_2 + gpio_set_pulls(PIN_JOY1_2,true,false); + gpio_set_dir(PIN_JOY1_2,GPIO_IN); +#endif +#ifdef PIN_JOY1_3 + gpio_set_pulls(PIN_JOY1_3,true,false); + gpio_set_dir(PIN_JOY1_3,GPIO_IN); +#endif +#ifdef PIN_JOY1_4 + gpio_set_pulls(PIN_JOY1_4,true,false); + gpio_set_dir(PIN_JOY1_4,GPIO_IN); +#endif +#ifdef PIN_JOY1_BTN + gpio_set_pulls(PIN_JOY1_BTN,true,false); + gpio_set_dir(PIN_JOY1_BTN,GPIO_IN); +#endif + +#ifdef PIN_KEY_USER1 + gpio_set_pulls(PIN_KEY_USER1,true,false); + gpio_set_dir(PIN_KEY_USER1,GPIO_IN); +#endif +#ifdef PIN_KEY_USER2 + gpio_set_pulls(PIN_KEY_USER2,true,false); + gpio_set_dir(PIN_KEY_USER2,GPIO_IN); +#endif +#ifdef PIN_KEY_USER3 + gpio_set_pulls(PIN_KEY_USER3,true,false); + gpio_set_dir(PIN_KEY_USER3,GPIO_IN); +#endif +#ifdef PIN_KEY_USER4 + gpio_set_pulls(PIN_KEY_USER4,true,false); + gpio_set_dir(PIN_KEY_USER4,GPIO_IN); +#endif +#ifdef PIN_JOY2_BTN + gpio_set_pulls(PIN_JOY2_BTN,true,false); + gpio_set_dir(PIN_JOY2_BTN,GPIO_IN); +#endif + +#ifdef PIN_JOY2_A1X + adc_init(); + adc_gpio_init(PIN_JOY2_A1X); + adc_gpio_init(PIN_JOY2_A2Y); + xRef=0; yRef=0; + for (int i=0; i<10; i++) { + adc_select_input(0); + xRef += adc_read(); + adc_select_input(1); + yRef += adc_read(); + sleep_ms(20); + } +#endif + +#if INVX + xRef = 4095 -xRef/10; +#else + xRef /= 10; +#endif +#if INVY + yRef = 4095 -yRef/10; +#else + yRef /= 10; +#endif +} + + + + +int emu_setKeymap(int index) { +} + + +#include "ff.h" +static FATFS fatfs; +static FIL file; +extern "C" int sd_init_driver(void); + +static int readNbFiles(char * rootdir) { + int totalFiles = 0; + + DIR dir; + FILINFO entry; + FRESULT fr = f_findfirst(&dir, &entry, rootdir, "*"); + while ( (fr == FR_OK) && (entry.fname[0]) && (totalFiles=0) { + menuRedraw=true; + curFile -= 9; + } else if (curFile!=0) { + menuRedraw=true; + curFile--; + } + } + else if (bClick & MASK_JOY2_DOWN) { + if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_JOY2_LEFT) || (bClick & MASK_JOY1_LEFT) ) { + if ((curFile<(nbFiles-9)) && (nbFiles)) { + curFile += 9; + menuRedraw=true; + } + else if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_KEY_USER2) ) { + emu_SwapJoysticks(0); + menuRedraw=true; + } + + if (menuRedraw && nbFiles) { + int fileIndex = 0; + tft.drawRectNoDma(MENU_FILE_XOFFSET,MENU_FILE_YOFFSET, MENU_FILE_W, MENU_FILE_H, MENU_FILE_BGCOLOR); +// if (curFile <= (MAX_MENULINES/2-1)) topFile=0; +// else topFile=curFile-(MAX_MENULINES/2); + if (curFile <= (MAX_MENULINES-1)) topFile=0; + else topFile=curFile-(MAX_MENULINES/2); + + //Serial.print("curfile: "); + //Serial.println(curFile); + //Serial.print("topFile: "); + //Serial.println(topFile); + + int i=0; + while (i=nbFiles) { + // no more files + break; + } + char * filename = &files[fileIndex][0]; + if (fileIndex >= topFile) { + if ((i+topFile) < nbFiles ) { + if ((i+topFile)==curFile) { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0x00), RGBVAL16(0xff,0x00,0x00), true); + strcpy(selection,filename); + } + else { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0xff), MENU_FILE_BGCOLOR, true); + } + } + i++; + } + fileIndex++; + } + + + tft.drawTextNoDma(48,MENU_JOYS_YOFFSET+8, (emu_SwapJoysticks(1)?(char*)"SWAP=1":(char*)"SWAP=0"), RGBVAL16(0x00,0xff,0xff), RGBVAL16(0x00,0x00,0xff), false); + menuRedraw=false; + } + + return (action); +} + +bool menuActive(void) +{ + return (menuOn); +} + +void toggleMenu(bool on) { + if (on) { + menuOn = true; + backgroundMenu(); + } else { + menuOn = false; + } +} + +char * menuSelection(void) +{ + return (selection); +} + + + + + + + + + +int emu_FileOpen(char * filename) +{ + int retval = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileOpen..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + retval = 1; + } + else { + emu_printf("FileOpen failed"); + } + return (retval); +} + +int emu_FileRead(char * buf, int size) +{ + unsigned char buffer[256]; + int remaining = size; + int byteread = 0; + unsigned int retval=0; + if (size < 256) { + if( !(f_read (&file, buffer, size, &retval)) ) + if (retval>0) { + memcpy(buf,buffer,retval); + byteread += retval; + } + } + else { + while (remaining>0) { + if( !(f_read (&file, buffer, 256, &retval)) ) + //f_read (&file, buffer, 256, &retval); + if (retval>0) { + //emu_printi(retval); + memcpy(buf,buffer,retval); + buf += retval; + byteread += retval; + remaining -= retval; + } + else { + break; + } + } + } + return byteread; +} + +unsigned char emu_FileGetc(void) { + unsigned char c; + unsigned int retval=0; + if( !(f_read (&file, &c, 1, &retval)) ) + if (retval != 1) { + emu_printf("emu_FileGetc failed"); + } + return c; +} + + +void emu_FileClose(void) +{ + f_close(&file); +} + +int emu_FileSize(char * filename) +{ + int filesize=0; + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileSize..."); + emu_printf(filepath); + FILINFO entry; + f_stat(filepath, &entry); + filesize = entry.fsize; + return(filesize); +} + +int emu_FileSeek(int seek) +{ + f_lseek(&file, seek); + return (seek); +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + unsigned int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } + + return(filesize); +} + +#ifdef SDIO + + +int emu_FileTell(void) +{ +#ifdef USE_SDFS + return (f_tell(&file)); +#else + return (50); +#endif +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + filesize = file.size(); + emu_printf(filesize); + + if (size >= filesize) + { + if (emu_FileRead(buf, filesize) != filesize) + { + emu_printf("File read failed"); + } + } + file.close(); + } +#endif + + return(filesize); +} + +int emu_LoadFileSeek(char * filename, char * buf, int size, int seek) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFileSeek..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + f_lseek(&file, seek); + emu_printf(size); + if (size >= filesize) + { + int retval=0; + if( (!f_read (&file, buf, size, &retval)) ) + if (retval != size) + { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + file.seek(seek); + emu_printf(size); + if (file.read(buf, size) != size) { + emu_printf("File read failed"); + } + file.close(); + } +#endif + + return(filesize); +} +#endif + + + +void emu_init(void) +{ + sd_init_driver(); + FRESULT fr = f_mount(&fatfs, "0:", 1); + //emu_FileSystemInit(); + + strcpy(romspath,ROMSDIR); + nbFiles = readNbFiles(romspath); + + emu_printf("SD initialized, files found: "); + emu_printi(nbFiles); + + emu_InitJoysticks(); +#ifdef SWAP_JOYSTICK + joySwapped = true; +#else + joySwapped = false; +#endif + + toggleMenu(true); +} + + +void emu_start(void) +{ + + usbnavpad = 0; + + keys = (unsigned short *)key_map1; + keyMap = 0; +} diff --git a/MCUME_pico/picoo2em/emuapi.h b/MCUME_pico/picoo2em/emuapi.h new file mode 100644 index 0000000..30fa584 --- /dev/null +++ b/MCUME_pico/picoo2em/emuapi.h @@ -0,0 +1,161 @@ +#ifndef EMUAPI_H +#define EMUAPI_H + +#include "platform_config.h" + +//#define TIMER_REND 1 +#define EXTRA_HEAP 0x10 + +// Title: < > +#define TITLE " Oddysey Emulator" +#define ROMSDIR "o2em" + + +#define emu_Init(ROM) {odd_Init();odd_Start(ROM);} +#define emu_Step() {odd_Step();} +#define emu_Input(x) {} + +#define VID_FRAME_SKIP 0x0 +#define PALETTE_SIZE 256 +#define TFT_VBUFFER_YCROP 20 + +#define ACTION_NONE 0 +#define ACTION_MAXKBDVAL 45 +#define ACTION_EXITKBD 128 +#define ACTION_RUNTFT 129 +#define ACTION_RUNVGA 130 + +#ifdef KEYMAP_PRESENT + +#define TAREA_W_DEF 32 +#define TAREA_H_DEF 32 +#define TAREA_END 255 +#define TAREA_NEW_ROW 254 +#define TAREA_NEW_COL 253 +#define TAREA_XY 252 +#define TAREA_WH 251 + +#define KEYBOARD_X 20 +#define KEYBOARD_Y 15 +#define KEYBOARD_KEY_H 30 +#define KEYBOARD_KEY_W 28 +#define KEYBOARD_HIT_COLOR RGBVAL16(0xff,0x00,0x00) + +const unsigned short keysw[] = { + TAREA_XY,KEYBOARD_X,KEYBOARD_Y, + TAREA_WH,KEYBOARD_KEY_W,KEYBOARD_KEY_H, + TAREA_NEW_ROW,28,28,28,28,29,29,28,28,28,28, + TAREA_NEW_ROW,28,28,28,28,29,29,28,28,28,28, + TAREA_XY,KEYBOARD_X,KEYBOARD_Y+KEYBOARD_KEY_H+KEYBOARD_KEY_H+14, + TAREA_NEW_ROW,28,28,28,28,29,29,28,28,28,28, + + TAREA_NEW_ROW,12, 28,28,29,29,29,29,28,28,28, + TAREA_NEW_ROW,28, 28,28,29,29,29,29,28,28,28, + TAREA_NEW_ROW,100,90, + TAREA_END}; + +const unsigned short key_map1[] = { + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 35,36,40,39,42,34,23,42,43,44, + 27,33,15,28,30,35,31,19,25,26, + + ACTION_NONE, 11,29,14,16,17,18,20,21,22, + ACTION_NONE, 36,34,13,32,12,24,23,ACTION_NONE,ACTION_NONE, + ACTION_NONE, 41}; + +/* +"A B C D E F G H I J" + 11,12,13,14,15,16,17,18,19,20, + +"K L M N O P Q R S T" + 21,22,23,24,25,26,27,28,29,30, + +"U V W X Y Z + 31,32,33,34,35,36,37,36,39,40, +*/ + +#ifdef HAS_I2CKBD +const unsigned short i2ckeys[] = { + 0X0080,0X0008,0X0180,0X0108,0X0280,0X0208,0X0380,0X0308,0X0480,0X0408, + 0X0040,0X0004,0X0140,0X0104,0X0240,0X0204,0X0340,0X0304,0X0440,0X0404, + 0X0020,0X0002,0X0120,0X0102,0X0220,0X0202,0X0320,0X0302,0X0420,0X0402, + 0, 0X0010,0X0001,0X0110,0X0101,0X0210,0X0201,0X0310,0X0301,0X0410,0X0401, + 0, 0X0010,0X0001,0X0110,0X0101,0X0210,0X0201,0X0310, 0, + 0, 0X0010}; +#endif + +#endif + + +#define MASK_JOY2_RIGHT 0x0001 +#define MASK_JOY2_LEFT 0x0002 +#define MASK_JOY2_UP 0x0004 +#define MASK_JOY2_DOWN 0x0008 +#define MASK_JOY2_BTN 0x0010 +#define MASK_KEY_USER1 0x0020 +#define MASK_KEY_USER2 0x0040 +#define MASK_KEY_USER3 0x0080 +#define MASK_JOY1_RIGHT 0x0100 +#define MASK_JOY1_LEFT 0x0200 +#define MASK_JOY1_UP 0x0400 +#define MASK_JOY1_DOWN 0x0800 +#define MASK_JOY1_BTN 0x1000 +#define MASK_KEY_USER4 0x2000 + + + +extern void emu_init(void); +extern void emu_start(void); +extern void emu_resetSD(void); + +extern void emu_printf(char * text); +extern void emu_printi(int val); +extern void * emu_Malloc(int size); +extern void emu_Free(void * pt); + +extern int emu_FileOpen(char * filename); +extern int emu_FileRead(char * buf, int size); +extern unsigned char emu_FileGetc(void); +extern int emu_FileSeek(int seek); +extern void emu_FileClose(void); +extern int emu_FileSize(char * filename); +extern int emu_LoadFile(char * filename, char * buf, int size); +extern int emu_LoadFileSeek(char * filename, char * buf, int size, int seek); +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); + +extern void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index); +extern void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride); +extern void emu_DrawLine(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line); +extern void emu_DrawVsync(void); +extern int emu_FrameSkip(void); +extern void * emu_LineBuffer(int line); + +extern void emu_InitJoysticks(void); +extern int emu_SwapJoysticks(int statusOnly); +extern unsigned short emu_DebounceLocalKeys(void); +extern int emu_ReadKeys(void); +extern int emu_GetPad(void); +extern int emu_ReadAnalogJoyX(int min, int max); +extern int emu_ReadAnalogJoyY(int min, int max); +extern int emu_ReadI2CKeyboard(void); +extern void emu_KeyboardOnUp(int keymodifer, int key); +extern void emu_KeyboardOnDown(int keymodifer, int key); + +extern void emu_sndPlaySound(int chan, int volume, int freq); +extern void emu_sndPlayBuzz(int size, int val); +extern void emu_sndInit(); +extern void emu_resetus(void); +extern int emu_us(void); + +extern int emu_setKeymap(int index); + +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); +extern void emu_printh(int val); + +#endif diff --git a/MCUME_pico/picoo2em/font8x8.h b/MCUME_pico/picoo2em/font8x8.h new file mode 100644 index 0000000..4f773da --- /dev/null +++ b/MCUME_pico/picoo2em/font8x8.h @@ -0,0 +1,135 @@ + +// Font: c64_lower.64c + +const unsigned char font8x8[128][8] PROGMEM = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) + { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) + { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) + { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) + { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//) + { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) + { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) + { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) + { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F +}; + diff --git a/MCUME_pico/picoo2em/iopins.h b/MCUME_pico/picoo2em/iopins.h new file mode 100644 index 0000000..a636576 --- /dev/null +++ b/MCUME_pico/picoo2em/iopins.h @@ -0,0 +1,42 @@ +#ifndef IOPINS_H +#define IOPINS_H + +#include "platform_config.h" + + +// VGA (see in code!!!) +/* +2-9 RRRGGGBB +10-11 VSYNC and HSYNC +*/ + +// SD (see SPI0 in code!!!) +/* +#define SD_SCLK 18 +#define SD_MOSI 19 +#define SD_MISO 16 +#define SD_CS 17 +*/ + +// I2C keyboard (not used) +/* +#define I2C_SCL_IO 15? +#define I2C_SDA_IO 14? +*/ + +// Analog joystick (primary) for JOY2 and 3 extra buttons +#define PIN_JOY2_A1X 26 +#define PIN_JOY2_A2Y 27 +#define PIN_JOY2_BTN 22 +#define PIN_KEY_USER1 20 +#define PIN_KEY_USER2 21 + +// Second joystick +//#define PIN_JOY1_BTN 2 +//#define PIN_JOY1_1 14 // UP +//#define PIN_JOY1_2 7 // DOWN +//#define PIN_JOY1_3 6 // RIGHT +//#define PIN_JOY1_4 5 // LEFT + + +#endif diff --git a/MCUME_pico/picoo2em/keyboard_osd.h b/MCUME_pico/picoo2em/keyboard_osd.h new file mode 100644 index 0000000..4c31e6f --- /dev/null +++ b/MCUME_pico/picoo2em/keyboard_osd.h @@ -0,0 +1,19 @@ + +#ifndef keyboard_osd_h_ +#define keyboard_osd_h_ + +extern bool virtualkeyboardIsActive(void); +extern void drawVirtualkeyboard(void); +extern void toggleVirtualkeyboard(bool keepOn); +extern void handleVirtualkeyboard(void); + +extern bool callibrationActive(void); +extern int handleCallibration(uint16_t bClick); + +extern bool menuActive(void); +extern char * menuSelection(void); +extern void toggleMenu(bool on); +extern int handleMenu(uint16_t bClick); + + +#endif diff --git a/MCUME_pico/picoo2em/picoo2em.cpp b/MCUME_pico/picoo2em/picoo2em.cpp new file mode 100644 index 0000000..dc1b678 --- /dev/null +++ b/MCUME_pico/picoo2em/picoo2em.cpp @@ -0,0 +1,129 @@ +#include "pico.h" +#include "pico/stdlib.h" + +extern "C" { + #include "iopins.h" + #include "emuapi.h" +} +#include "keyboard_osd.h" +#include "vga_t_dma.h" +extern "C" { +#include "Oddemu.h" +} +#include + + +TFT_T_DMA tft; +static int skip=0; + +int main(void) { + stdio_init_all(); + tft.begin(VGA_MODE_320x240); + emu_init(); + while (true) { + if (menuActive()) { + uint16_t bClick = emu_DebounceLocalKeys(); + int action = handleMenu(bClick); + char * filename = menuSelection(); + if (action == ACTION_RUNTFT) { + toggleMenu(false); + emu_start(); + emu_Init(filename); + tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) ); + tft.startDMA(); + } + tft.waitSync(); + } + else { + emu_Step(); + uint16_t bClick = emu_DebounceLocalKeys(); + emu_Input(bClick); + } + //int c = getchar_timeout_us(0); + //switch (c) { + // case ' ': + // printf("test: %d\n", 1); + // break; + //} + } +} + +static unsigned char palette8[PALETTE_SIZE]; + +void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index) +{ + if (index (c) 1997,1998 + * + * Developed by Andre de la Rocha + * + * http://o2em.sourceforge.net + * + * + * + * 8048 Mnemonics + */ + + +#include "cpu.h" +#include "table.h" + + +struct lookup_tag lookup[] = { + + /* 00 */ {"NOP",1,0}, + /* 01 */ {"ILL",1,0}, + /* 02 */ {"OUTL BUS,A",1,0}, + /* 03 */ {"ADD A,",2,1}, + + /* 04 */ {"JMP",2,2}, + /* 05 */ {"EN I",1,0}, + /* 06 */ {"ILL",1,0}, + /* 07 */ {"DEC A",1,0}, + + /* 08 */ {"INS A,BUS",1,0}, + /* 09 */ {"IN A,P1",1,0}, + /* 0A */ {"IN A,P2",1,0}, + /* 0B */ {"ILL",1,0}, + + /* 0C */ {"MOVD A,P4",1,0}, + /* 0D */ {"MOVD A,P5",1,0}, + /* 0E */ {"MOVD A,P6",1,0}, + /* 0F */ {"MOVD A,P7",1,0}, + + /* 10 */ {"INC @R0",1,0}, + /* 11 */ {"INC @R1",1,0}, + /* 12 */ {"JB0",2,3}, + /* 13 */ {"ADDC A,",2,1}, + + /* 14 */ {"CALL",2,2}, + /* 15 */ {"DIS I",1,0}, + /* 16 */ {"JTF",2,3}, + /* 17 */ {"INC A",1,0}, + + /* 18 */ {"INC R0",1,0}, + /* 19 */ {"INC R1",1,0}, + /* 1A */ {"INC R2",1,0}, + /* 1B */ {"INC R3",1,0}, + + /* 1C */ {"INC R4",1,0}, + /* 1D */ {"INC R5",1,0}, + /* 1E */ {"INC R6",1,0}, + /* 1F */ {"INC R7",1,0}, + + /* 20 */ {"XCH A,@R0",1,0}, + /* 21 */ {"XCH A,@R1",1,0}, + /* 22 */ {"ILL",1,0}, + /* 23 */ {"MOV A,",2,1}, + + /* 24 */ {"JMP",2,2}, + /* 25 */ {"EN TCNTI",1,0}, + /* 26 */ {"JNT0",2,3}, + /* 27 */ {"CLR A",1,0}, + + /* 28 */ {"XCH A,R0",1,0}, + /* 29 */ {"XCH A,R1",1,0}, + /* 2A */ {"XCH A,R2",1,0}, + /* 2B */ {"XCH A,R3",1,0}, + + /* 2C */ {"XCH A,R4",1,0}, + /* 2D */ {"XCH A,R5",1,0}, + /* 2E */ {"XCH A,R6",1,0}, + /* 2F */ {"XCH A,R7",1,0}, + + /* 30 */ {"XCHD A,@R0",1,0}, + /* 31 */ {"XCHD A,@R1",1,0}, + /* 32 */ {"JB1",2,3}, + /* 33 */ {"ILL",1,0}, + + /* 34 */ {"CALL",2,2}, + /* 35 */ {"DIS TCNTI",1,0}, + /* 36 */ {"JT0",2,3}, + /* 37 */ {"CPL A",1,0}, + + /* 38 */ {"ILL",1,0}, + /* 39 */ {"OUTL P1,A",1,0}, + /* 3A */ {"OUTL P2,A",1,0}, + /* 3B */ {"ILL",1,0}, + + /* 3C */ {"MOVD P4,A",1,0}, + /* 3D */ {"MOVD P5,A",1,0}, + /* 3E */ {"MOVD P6,A",1,0}, + /* 3F */ {"MOVD P7,A",1,0}, + + /* 40 */ {"ORL A,@R0",1,0}, + /* 41 */ {"ORL A,@R1",1,0}, + /* 42 */ {"MOV A,T",1,0}, + /* 43 */ {"ORL A,",2,1}, + + /* 44 */ {"JMP",2,2}, + /* 45 */ {"STRT CNT",1,0}, + /* 46 */ {"JNT1",2,3}, + /* 47 */ {"SWAP",1,0}, + + /* 48 */ {"ORL A,R0",1,0}, + /* 49 */ {"ORL A,R1",1,0}, + /* 4A */ {"ORL A,R2",1,0}, + /* 4B */ {"ORL A,R3",1,0}, + + /* 4C */ {"ORL A,R4",1,0}, + /* 4D */ {"ORL A,R5",1,0}, + /* 4E */ {"ORL A,R6",1,0}, + /* 4F */ {"ORL A,R7",1,0}, + + /* 50 */ {"ANL A,@R0",1,0}, + /* 51 */ {"ANL A,@R1",1,0}, + /* 52 */ {"JB2",2,3}, + /* 53 */ {"ANL A,",2,1}, + + /* 54 */ {"CALL",2,2}, + /* 55 */ {"STRT T",1,0}, + /* 56 */ {"JT1",2,3}, + /* 57 */ {"ILL",1,0}, + + /* 58 */ {"ANL A,R0",1,0}, + /* 59 */ {"ANL A,R1",1,0}, + /* 5A */ {"ANL A,R2",1,0}, + /* 5B */ {"ANL A,R3",1,0}, + + /* 5C */ {"ANL A,R4",1,0}, + /* 5D */ {"ANL A,R5",1,0}, + /* 5E */ {"ANL A,R6",1,0}, + /* 5F */ {"ANL A,R7",1,0}, + + /* 60 */ {"ADD A,@R0",1,0}, + /* 61 */ {"ADD A,@R1",1,0}, + /* 62 */ {"MOV T,A",1,0}, + /* 63 */ {"ILL",1,0}, + + /* 64 */ {"JMP",2,2}, + /* 65 */ {"STOP TCNT",1,0}, + /* 66 */ {"ILL",1,0}, + /* 67 */ {"RRC A",1,0}, + + /* 68 */ {"ADD A,R0",1,0}, + /* 69 */ {"ADD A,R1",1,0}, + /* 6A */ {"ADD A,R2",1,0}, + /* 6B */ {"ADD A,R3",1,0}, + + /* 6C */ {"ADD A,R4",1,0}, + /* 6D */ {"ADD A,R5",1,0}, + /* 6E */ {"ADD A,R6",1,0}, + /* 6F */ {"ADD A,R7",1,0}, + + /* 70 */ {"ADDC A,@R0",1,0}, + /* 71 */ {"ADDC A,@R1",1,0}, + /* 72 */ {"JB3",2,3}, + /* 73 */ {"ILL",1,0}, + + /* 74 */ {"CALL",2,2}, + /* 75 */ {"ENT0 CLK",1,0}, + /* 76 */ {"JF1",2,3}, + /* 77 */ {"RR A",1,0}, + + /* 78 */ {"ADDC A,R0",1,0}, + /* 79 */ {"ADDC A,R1",1,0}, + /* 7A */ {"ADDC A,R2",1,0}, + /* 7B */ {"ADDC A,R3",1,0}, + + /* 7C */ {"ADDC A,R4",1,0}, + /* 7D */ {"ADDC A,R5",1,0}, + /* 7E */ {"ADDC A,R6",1,0}, + /* 7F */ {"ADDC A,R7",1,0}, + + /* 80 */ {"MOVX A,@R0",1,0}, + /* 81 */ {"MOVX A,@R1",1,0}, + /* 82 */ {"ILL",1,0}, + /* 83 */ {"RET",1,0}, + + /* 84 */ {"JMP",2,2}, + /* 85 */ {"CLR F0",1,0}, + /* 86 */ {"JNI",2,3}, + /* 87 */ {"ILL",1,0}, + + /* 88 */ {"ORL BUS,",2,1}, + /* 89 */ {"ORL P1,",2,1}, + /* 8A */ {"ORL P2,",2,1}, + /* 8B */ {"ILL",1,0}, + + /* 8C */ {"ORLD P4,A",1,0}, + /* 8D */ {"ORLD P5,A",1,0}, + /* 8E */ {"ORLD P6,A",1,0}, + /* 8F */ {"ORLD P7,A",1,0}, + + /* 90 */ {"MOVX @R0,A",1,0}, + /* 91 */ {"MOVX @R1,A",1,0}, + /* 92 */ {"JB4",2,3}, + /* 93 */ {"RETR",1,0}, + + /* 94 */ {"CALL",2,2}, + /* 95 */ {"CPL F0",1,0}, + /* 96 */ {"JNZ",2,3}, + /* 97 */ {"CLR C",1,0}, + + /* 98 */ {"ANL BUS,",2,1}, + /* 99 */ {"ANL P1,",2,1}, + /* 9A */ {"ANL P2,",2,1}, + /* 9B */ {"ILL",1,0}, + + /* 9C */ {"ANLD P4,A",1,0}, + /* 9D */ {"ANLD P5,A",1,0}, + /* 9E */ {"ANLD P6,A",1,0}, + /* 9F */ {"ANLD P7,A",1,0}, + + /* A0 */ {"MOV @R0,A",1,0}, + /* A1 */ {"MOV @R1,A",1,0}, + /* A2 */ {"ILL",1,0}, + /* A3 */ {"MOVP A,@A",1,0}, + + /* A4 */ {"JMP",2,2}, + /* A5 */ {"CLR F1",1,0}, + /* A6 */ {"ILL",1,0}, + /* A7 */ {"CPL C",1,0}, + + /* A8 */ {"MOV R0,A",1,0}, + /* A9 */ {"MOV R1,A",1,0}, + /* AA */ {"MOV R2,A",1,0}, + /* AB */ {"MOV R3,A",1,0}, + /* AC */ {"MOV R4,A",1,0}, + /* AD */ {"MOV R5,A",1,0}, + /* AE */ {"MOV R6,A",1,0}, + /* AF */ {"MOV R7,A",1,0}, + + /* B0 */ {"MOV @R0,",2,1}, + /* B1 */ {"MOV @R1,",2,1}, + /* B2 */ {"JB5",2,3}, + /* B3 */ {"JMPP @A",1,0}, + + /* B4 */ {"CALL",2,2}, + /* B5 */ {"CPL F1",1,0}, + /* B6 */ {"JF0",2,3}, + /* B7 */ {"ILL",1,0}, + + /* B8 */ {"MOV R0,",2,1}, + /* B9 */ {"MOV R1,",2,1}, + /* BA */ {"MOV R2,",2,1}, + /* BB */ {"MOV R3,",2,1}, + + /* BC */ {"MOV R4,",2,1}, + /* BD */ {"MOV R5,",2,1}, + /* BE */ {"MOV R6,",2,1}, + /* BF */ {"MOV R7,",2,1}, + + /* C0 */ {"ILL",1,0}, + /* C1 */ {"ILL",1,0}, + /* C2 */ {"ILL",1,0}, + /* C3 */ {"ILL",1,0}, + + /* C4 */ {"JMP",2,2}, + /* C5 */ {"SEL RB0",1,0}, + /* C6 */ {"JZ",2,3}, + /* C7 */ {"MOV A,PSW",1,0}, + + /* C8 */ {"DEC R0",1,0}, + /* C9 */ {"DEC R1",1,0}, + /* CA */ {"DEC R2",1,0}, + /* CB */ {"DEC R3",1,0}, + + /* CC */ {"DEC R4",1,0}, + /* CD */ {"DEC R5",1,0}, + /* CE */ {"DEC R6",1,0}, + /* CF */ {"DEC R7",1,0}, + + /* D0 */ {"XRL A,@R0",1,0}, + /* D1 */ {"XRL A,@R1",1,0}, + /* D2 */ {"JB6",2,3}, + /* D3 */ {"XRL A,",2,1}, + + /* D4 */ {"CALL",2,2}, + /* D5 */ {"SEL RB1",1,0}, + /* D6 */ {"ILL",1,0}, + /* D7 */ {"MOV PSW,A",1,0}, + + /* D8 */ {"XRL A,R0",1,0}, + /* D9 */ {"XRL A,R1",1,0}, + /* DA */ {"XRL A,R2",1,0}, + /* DB */ {"XRL A,R3",1,0}, + /* DC */ {"XRL A,R4",1,0}, + /* DD */ {"XRL A,R5",1,0}, + /* DE */ {"XRL A,R6",1,0}, + /* DF */ {"XRL A,R7",1,0}, + + /* E0 */ {"ILL",1,0}, + /* E1 */ {"ILL",1,0}, + /* E2 */ {"ILL",1,0}, + /* E3 */ {"MOVP3 A,@A",1,0}, + + /* E4 */ {"JMP",2,2}, + /* E5 */ {"SEL MB0",1,0}, + /* E6 */ {"JNC",2,3}, + /* E7 */ {"RL A",1,0}, + + /* E8 */ {"DJNZ R0,",2,3}, + /* E9 */ {"DJNZ R1,",2,3}, + /* EA */ {"DJNZ R2,",2,3}, + /* EB */ {"DJNZ R3,",2,3}, + /* EC */ {"DJNZ R4,",2,3}, + /* ED */ {"DJNZ R5,",2,3}, + /* EE */ {"DJNZ R6,",2,3}, + /* EF */ {"DJNZ R7,",2,3}, + + /* F0 */ {"MOV A,@R0",1,0}, + /* F1 */ {"MOV A,@R1",1,0}, + /* F2 */ {"JB7",2,3}, + /* F3 */ {"ILL",1,0}, + + /* F4 */ {"CALL",2,2}, + /* F5 */ {"SEL MB1",1,0}, + /* F6 */ {"JC",2,3}, + /* F7 */ {"RLC A",1,0}, + + /* F8 */ {"MOV A,R0",1,0}, + /* F9 */ {"MOV A,R1",1,0}, + /* FA */ {"MOV A,R2",1,0}, + /* FB */ {"MOV A,R3",1,0}, + /* FC */ {"MOV A,R4",1,0}, + /* FD */ {"MOV A,R5",1,0}, + /* FE */ {"MOV A,R6",1,0}, + /* FF */ {"MOV A,R7",1,0} + +}; + + diff --git a/MCUME_pico/picoo2em/table.h b/MCUME_pico/picoo2em/table.h new file mode 100644 index 0000000..2c80c59 --- /dev/null +++ b/MCUME_pico/picoo2em/table.h @@ -0,0 +1,10 @@ +#ifndef __TABLE_H +#define __TABLE_H + +extern struct lookup_tag { + signed char *mnemonic; //JMH + unsigned char bytes; + unsigned char type; +} lookup[]; + +#endif diff --git a/MCUME_pico/picoo2em/types.h b/MCUME_pico/picoo2em/types.h new file mode 100644 index 0000000..885e605 --- /dev/null +++ b/MCUME_pico/picoo2em/types.h @@ -0,0 +1,9 @@ +#ifndef TYPES_H +#define TYPES_H + +typedef unsigned char Byte; +typedef unsigned short ADDRESS; +#define INLINE + +#endif /* TYPES_H */ + diff --git a/MCUME_pico/picoo2em/vdc.c b/MCUME_pico/picoo2em/vdc.c new file mode 100644 index 0000000..043e61e --- /dev/null +++ b/MCUME_pico/picoo2em/vdc.c @@ -0,0 +1,468 @@ + +/* + * O2EM Freeware Odyssey2 / Videopac+ Emulator + * + * Created by Daniel Boris (c) 1997,1998 + * + * Developed by Andre de la Rocha + * + * http://o2em.sourceforge.net + * + * + * + * O2 Video Display Controller emulation + */ + + +#include +#include +#include +#include "types.h" +#include "vmachine.h" +#include "config.h" +#include "cset.h" +#include "cpu.h" +#include "vpp.h" +#include "vdc.h" + +#include "emuapi.h" + + +typedef struct +{ + unsigned char r; + unsigned char g; + unsigned char b; +} PALETTE_ENTRY; + + +#define COL_SP0 0x01 +#define COL_SP1 0x02 +#define COL_SP2 0x04 +#define COL_SP3 0x08 +#define COL_VGRID 0x10 +#define COL_HGRID 0x20 +#define COL_VPP 0x40 +#define COL_CHAR 0x80 + +#define X_START 8 +#define Y_START 24 + +static const long colortable[16]={ + 0x000000, + 0x0e3dd4, + 0x00981b, + 0x00bbd9, + 0xc70008, + 0xcc16b3, + 0x9d8710, + 0xe1dee1, + 0x5f6e6b, + 0x6aa1ff, + 0x3df07a, + 0x31ffff, + 0xff4255, + 0xff98ff, + 0xd9ad5d, + 0xffffff +}; + + + + +/* The pointer to the graphics buffer And palette */ + +static PALETTE_ENTRY colors[256]; +static Byte * vscreen=0; //[BMPW*BMPH]; + +/* Collision buffer */ +static Byte * colbuf=0; //[BMPW*BMPH]; + +Byte coltab[256]; + +long clip_low; +long clip_high; + + +static void create_cmap(void); +static void draw_char(Byte ypos,Byte xpos,Byte chr,Byte col); +static void draw_grid(void); +INLINE extern void mputvid(unsigned int ad, unsigned int len, Byte d, Byte c); + + +unsigned char * getGBuf(void) +{ + return(vscreen); +} + +void draw_region(void){ + int i; + + //emu_printi(last_line); + + if (regionoff == 0xffff) + i = master_clk/(LINECNT-1)-5; + else + i = master_clk/22+regionoff; + //i = snapline(i, VDCwrite[0xA0], 0); + + if (i<0) i=0; + +#ifdef HALFHEIGHT + i = i>>1; +#else +#endif + + clip_low = last_line * (long)BMPW; + clip_high = i * (long)BMPW; + if (clip_high > BMPW*BMPH) clip_high = BMPW*BMPH; + if (clip_low < 0) clip_low=0; + if (clip_low < clip_high) draw_display(); + last_line=i; +} + + +#define fastmputvid1(ad,d,c) if ((ad > (unsigned long)clip_low) && (ad < (unsigned long)clip_high)) { vscreen[ad]=d; colbuf[ad] |= c; coltab[c] |= colbuf[ad];} +#define fastmputvid2(ad,d,c) if ((ad > (unsigned long)clip_low) && (ad < (unsigned long)clip_high)) { vscreen[ad]=d; colbuf[ad] |= c; coltab[c] |= colbuf[ad];vscreen[ad+1]=d; colbuf[ad+1] |= c; coltab[c] |= colbuf[ad+1];} +//#define fastmputvid1(ad,d,c) mputvid(ad,1,d,c); +//#define fastmputvid2(ad,d,c) mputvid(ad,2,d,c); + + +INLINE void mputvid(unsigned int ad, unsigned int len, Byte d, Byte c){ + if ((ad > (unsigned long)clip_low) && (ad < (unsigned long)clip_high)) { + unsigned int i; +// JMH + Byte d1; + d1 = d; + if ( ((len & 3)==0) && (sizeof(unsigned long) == 4) && ((ad & 3) == 0) ) + { + unsigned long dddd = (((unsigned long)d1) & 0xff) | ((((unsigned long)d1) & 0xff) << 8) | ((((unsigned long)d1) & 0xff) << 16) | ((((unsigned long)d1) & 0xff) << 24); + unsigned long cccc = (((unsigned long)c) & 0xff) | ((((unsigned long)c) & 0xff) << 8) | ((((unsigned long)c) & 0xff) << 16) | ((((unsigned long)c) & 0xff) << 24); + for (i=0; i>2; i++) { + *((unsigned long*)(vscreen+ad)) = dddd; + cccc |= *((unsigned long*)(colbuf+ad)); + *((unsigned long*)(colbuf+ad)) = cccc; + coltab[c] |= ((cccc | (cccc >> 8) | (cccc >> 16) | (cccc >> 24)) & 0xff); + ad += 4; + } + } else + { + for (i=0; i> 16; //18; + colors[i+32].g = colors[i].g = (colortable[i] & 0x00ff00) >> 8; //10; + colors[i+32].b = colors[i].b = (colortable[i] & 0x0000ff) >> 0; //2; + } + + for (i = 16; i < 32; i++) { + /* Half-bright colors for the 50% scanlines */ + colors[i+32].r = colors[i].r = colors[i-16].r/2; + colors[i+32].g = colors[i].g = colors[i-16].g/2; + colors[i+32].b = colors[i].b = colors[i-16].b/2; + } + + for (i = 64; i < 256; i++) colors[i].r = colors[i].g = colors[i].b = 0; + + for (i=0;i<256;i++) + { + emu_SetPaletteEntry(colors[i].r, colors[i].g, colors[i].b, i); + } + +} + +static void draw_char(Byte ypos,Byte xpos,Byte chr,Byte col){ + int j,c; + Byte cl,d1; + int y,b,n; + unsigned int pnt; + +#ifdef HALFHEIGHT + y = ypos>>1; +#else + y=(ypos & 0xFE); +#endif + pnt = y * BMPW + (xpos-8)+BORDERW; + + ypos = ypos >> 1; + n = 8 - (ypos % 8) - (chr % 8); + if (n < 3) n = n + 7; + +#ifdef HALFHEIGHT + if ((pnt+BMPW*n >= (unsigned long)clip_low) && (pnt <= (unsigned long)clip_high)) { +#else + if ((pnt+BMPW*2*n >= (unsigned long)clip_low) && (pnt <= (unsigned long)clip_high)) { +#endif + + c=(int)chr + ypos; + if (col & 0x01) c+=256; + if (c > 511) c=c-512; + + cl = ((col & 0x0E) >> 1); + cl = ((cl&2) | ((cl&1)<<2) | ((cl&4)>>2)) + 8; + +#ifdef HALFHEIGHT + if ((y>0) && (y<112) && (xpos<157)) { +#else + if ((y>0) && (y<232) && (xpos<157)) { +#endif + for (j=0; j> 3) | (color & 0x80 ? 0 : 8), COL_HGRID); + color = ColorVector[j*24+25]; + fastmputvid2(pn1+BMPW, (color & 0x07) | ((color & 0x40) >> 3) | (color & 0x80 ? 0 : 8), COL_HGRID); +#ifdef HALFHEIGHT +#else + color = ColorVector[j*24+26]; + fastmputvid2(pn1+BMPW*2, (color & 0x07) | ((color & 0x40) >> 3) | (color & 0x80 ? 0 : 8), COL_HGRID); +#endif + } + } + } + + // horizontal + mask=0x01; + for(j=0; j<9; j++) { +#ifdef HALFHEIGHT + pnt = (((j*12)+12) * BMPW); +#else + pnt = (((j*24)+24) * BMPW); +#endif + for (i=0; i<9; i++) { + pn1 = pnt + (i * 16) + BORDERW; +#ifdef HALFHEIGHT + if ((pn1+BMPW*2 >= (unsigned long)clip_low) && (pn1 <= (unsigned long)clip_high)) { +#else + if ((pn1+BMPW*3 >= (unsigned long)clip_low) && (pn1 <= (unsigned long)clip_high)) { +#endif + d=VDCwrite[0xC0 + i]; + if (j == 8) { + d=VDCwrite[0xD0+i]; + mask=1; + } + if (d & mask) { + color = ColorVector[j*24+24]; + mputvid(pn1, 18, (color & 0x07) | ((color & 0x40) >> 3) | (color & 0x80 ? 0 : 8), COL_HGRID); + color = ColorVector[j*24+25]; + mputvid(pn1+BMPW, 18, (color & 0x07) | ((color & 0x40) >> 3) | (color & 0x80 ? 0 : 8), COL_HGRID); +#ifdef HALFHEIGHT +#else + color = ColorVector[j*24+26]; + mputvid(pn1+BMPW*2, 18, (color & 0x07) | ((color & 0x40) >> 3) | (color & 0x80 ? 0 : 8), COL_HGRID); +#endif + } + } + } + mask = mask << 1; + } + + // vertical + mask=0x01; + w=2; + if (VDCwrite[0xA0] & 0x80) w=16; + for(j=0; j<10; j++) { + pnt=(j*16); + mask=0x01; + d=VDCwrite[0xE0+j]; + for (x=0; x<8; x++) { +#ifdef HALFHEIGHT + pn1 = pnt + (((x*12)+12) * BMPW) + BORDERW; +#else + pn1 = pnt + (((x*24)+24) * BMPW) + BORDERW; +#endif + if (d & mask) { +#ifdef HALFHEIGHT + for(i=0; i<12; i++) { +#else + for(i=0; i<24; i++) { +#endif + if ((pn1 >= (unsigned long)clip_low) && (pn1 <= (unsigned long)clip_high)) { + color = ColorVector[x*24+24+i]; + mputvid(pn1, w, (color & 0x07) | ((color & 0x40) >> 3) | (color & 0x80 ? 0 : 8), COL_VGRID); + } + pn1+=BMPW; + } + } + mask = mask << 1; + } + } + +} + + +void finish_display(void){ + vpp_finish_bmp(vscreen, 9, 5, BMPW-9, BMPH-5, BMPW, BMPH); +} + + +void clear_collision(void){ + load_colplus(colbuf); + coltab[0x01]=coltab[0x02]=0; + coltab[0x04]=coltab[0x08]=0; + coltab[0x10]=coltab[0x20]=0; + coltab[0x40]=coltab[0x80]=0; +} + + +void draw_display(void){ + int i,j,x,sm,t; + Byte y,xt,yt,b,d1,cl,c; + unsigned int pnt,pnt2; + +#ifdef HALFHEIGHT + for (i=clip_low/BMPW; i> 3) | (ColorVector[i<<1] & 0x80 ? 0 : 8), BMPW); + } +#else + for (i=clip_low/BMPW; i> 3) | (ColorVector[i] & 0x80 ? 0 : 8), BMPW); + } +#endif + + if (VDCwrite[0xA0] & 0x08) draw_grid(); + + if (useforen && (!(VDCwrite[0xA0] & 0x20))) return; + + for(i=0x10; i<0x40; i+=4) draw_char(VDCwrite[i],VDCwrite[i+1],VDCwrite[i+2],VDCwrite[i+3]); + + pnt=0x40; + for(i=0; i<4; i++) { + x=y=248; + for (j=0; j<4; j++){ + xt = VDCwrite[pnt+j*4+1]; + yt = VDCwrite[pnt+j*4]; + if ((xt<240) && (yt<240)){ + x=xt; + y=yt; + break; + } + } + for(j=0; j<4; j++) { + draw_char(y,x,VDCwrite[pnt+2],VDCwrite[pnt+3]); + x+=16; + pnt+=4; + } + } + + c=8; + for (i=12; i>=0; i -=4) { + pnt2 = 0x80 + (i * 2); +#ifdef HALFHEIGHT + y = VDCwrite[i]>>1; +#else + y = VDCwrite[i]; +#endif + x = VDCwrite[i+1]-8; + t = VDCwrite[i+2]; + cl = ((t & 0x38) >> 3); + cl = ((cl&2) | ((cl&1)<<2) | ((cl&4)>>2)) + 8; +//#ifdef HALFHEIGHT +// if ((x<164) && (y>0) && (y<112)) { +//#else + if ((x<164) && (y>0) && (y<232)) { +//#endif + pnt = y * BMPW + x + BORDERW + sproff; + if ((pnt+BMPW*16 >= (unsigned long)clip_low) && (pnt <= (unsigned long)clip_high)) { + for (j=0; j<8; j++) { + sm = (((j%2==0) && (((t>>1) & 1) != (t & 1))) || ((j%2==1) && (t & 1))) ? 1 : 0; + d1 = VDCwrite[pnt2++]; + for (b=0; b<8; b++) { + if (d1 & 0x01) { +#ifdef HALFHEIGHT + if ((x+b+sm<160) && (y+j<129)) { +#else + if ((x+b+sm<160) && (y+j<249)) { +#endif + fastmputvid1(sm+pnt,cl,c); +#ifdef HALFHEIGHT +#else + fastmputvid1(sm+pnt+BMPW,cl,c); +#endif + } + } + pnt += 1; + d1 = d1 >> 1; + } +#ifdef HALFHEIGHT + pnt += BMPW-8; +#else + pnt += BMPW*2-8; +#endif + } + } + } + c = c >> 1; + } +} + + + + +void close_display(void) +{ +} + +void init_display(void) +{ + if (vscreen==0) vscreen = (Byte *)emu_Malloc(BMPW*BMPH); + if (colbuf == 0) colbuf = (Byte *)emu_Malloc(BMPW*BMPH); + + create_cmap(); + memset(colbuf,0,BMPW*BMPH); +} + diff --git a/MCUME_pico/picoo2em/vdc.h b/MCUME_pico/picoo2em/vdc.h new file mode 100644 index 0000000..9aae77a --- /dev/null +++ b/MCUME_pico/picoo2em/vdc.h @@ -0,0 +1,30 @@ +#ifndef __VDC_H +#define __VDC_H + +#define HALFHEIGHT 1 + +#define BORDERW 8 +#define BMPW (160+BORDERW) // 320 +#ifdef HALFHEIGHT +#define BMPH 120 +#else +#define BMPH 240 +#endif + + +extern Byte coltab[]; +extern long clip_low; +extern long clip_high; + +extern unsigned char * getGBuf(void); + +void init_display(void); +void draw_display(void); +void draw_region(void); +void finish_display(); +void close_display(void); +void clear_collision(void); + +#endif + + diff --git a/MCUME_pico/picoo2em/vmachine.c b/MCUME_pico/picoo2em/vmachine.c new file mode 100644 index 0000000..cc1242c --- /dev/null +++ b/MCUME_pico/picoo2em/vmachine.c @@ -0,0 +1,608 @@ + +/* + * O2EM Freeware Odyssey2 / Videopac+ Emulator + * + * Created by Daniel Boris (c) 1997,1998 + * + * Developed by Andre de la Rocha + * + * http://o2em.sourceforge.net + * + * + * + * Main O2 machine emulation + */ + +#include +#include +#include +#include "audio.h" +#include "types.h" +#include "cpu.h" +#include "config.h" +#include "vdc.h" +//#include "vpp.h" +#include "vmachine.h" + +#include "emuapi.h" + +static Byte x_latch,y_latch; +static Byte line_count; +static int fps=FPS_NTSC; + +//static Byte snapedlines[MAXLINES+2*MAXSNAP][256][2]; //500+2*50 *256*2 600*512 + +int evblclk=EVBLCLK_NTSC; + +struct resource app_data; +int frame=0; +Byte dbstick1,dbstick2; + +int int_clk; /* counter for length of /INT pulses */ +int master_clk; /* Master clock */ +int h_clk; /* horizontal clock */ +unsigned long clk_counter; +int last_line; +int key2vcnt=0; +int mstate; +int ccolflag=0; + +int pendirq=0; +int enahirq=1; +int useforen=0; +long regionoff=0xffff; +int mxsnap=2; +int sproff=0; +int tweakedaudio=0; + +Byte rom1[5120]; +Byte rom2[5120]; +Byte rom3[5120]; +Byte rom4[5120]; + +Byte intRAM[64]; +Byte extRAM[256]; +Byte extROM[1024]; +Byte VDCwrite[256]; +Byte ColorVector[MAXLINES]; +Byte AudioVector[MAXLINES]; +Byte *rom, *orom; + +int key2[128]; + +#define KEY_0 0 +#define KEY_1 1 +#define KEY_2 2 +#define KEY_3 3 +#define KEY_4 4 +#define KEY_5 5 +#define KEY_6 6 +#define KEY_7 7 +#define KEY_8 8 +#define KEY_9 9 +#define KEY_A 10 +#define KEY_B 11 +#define KEY_C 12 +#define KEY_D 13 +#define KEY_E 14 +#define KEY_F 15 +#define KEY_G 16 +#define KEY_H 17 +#define KEY_I 18 +#define KEY_J 19 +#define KEY_K 20 +#define KEY_L 21 +#define KEY_M 22 +#define KEY_N 23 +#define KEY_O 24 +#define KEY_P 25 +#define KEY_Q 26 +#define KEY_R 27 +#define KEY_S 28 +#define KEY_T 29 +#define KEY_U 30 +#define KEY_V 31 +#define KEY_W 32 +#define KEY_X 33 +#define KEY_Y 34 +#define KEY_Z 35 +#define KEY_PLUS 35 +#define KEY_MINUS 36 +#define KEY_SLASH 38 +#define KEY_ASTERISK 39 + +#define KEY_SPACE 40 +#define KEY_EQUALS 41 +#define KEY_DEL 42 +#define KEY_ENTER 43 +#define KEY_STOP 44 +#define KEY_SLASH_PAD 45 +#define KEY_PLUS_PAD 46 + +static unsigned int key_map[6][8]= { + {KEY_0,KEY_1,KEY_2,KEY_3,KEY_4,KEY_5,KEY_6,KEY_7}, + {KEY_8,KEY_9,0,0,KEY_SPACE,KEY_SLASH,KEY_L,KEY_P}, + {KEY_PLUS_PAD,KEY_W,KEY_E,KEY_R,KEY_T,KEY_U,KEY_I,KEY_O}, + {KEY_Q,KEY_S,KEY_D,KEY_F,KEY_G,KEY_H,KEY_J,KEY_K}, + {KEY_A,KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_M,KEY_STOP}, + {KEY_MINUS,KEY_ASTERISK,KEY_SLASH_PAD,KEY_EQUALS,KEY_Y,KEY_N,KEY_DEL,KEY_ENTER} +}; + + +static void do_kluges(void); +static void setvideomode(int t); + +void run(void){ + cpu_exec(); +} + + +void handle_vbl(void){ + update_audio(); +// update_voice(); +// } + if (!ccolflag) { + clear_collision(); + ccolflag=1; + } + draw_region(); + ext_IRQ(); + mstate = 1; +} + + +void handle_evbl(void){ + static long last=0; + static int rest_cnt=0; + int i; + + i = (15*app_data.speed/100); + rest_cnt = (rest_cnt+1)%(i<5?5:i); + last_line=0; + master_clk -= evblclk; + frame++; + ccolflag=0; + if (!app_data.debug) { + finish_display(); + } + + for (i=0; i 10) { + key2vcnt=0; + for (i=0; i<128; i++) key2[i] = 0; + dbstick1 = dbstick2 = 0; + } + mstate=0; +} + + +void init_system(void){ + int i,j,k; + + last_line=0; + dbstick1=0x00; + dbstick2=0x00; + mstate=0; + master_clk=0; + h_clk=0; + line_count=0; + itimer=0; + clk_counter=0; + for(i=0; i<256; i++) { + VDCwrite[i]=0; + extRAM[i]=0; + } + for(i=0; i<64; i++) { + intRAM[i]=0; + } + for (i=0; i 16) || (master_clk > VBLCLK)) + return 1; + else + return 0; +} + + +void write_p1(Byte d){ + if ((d & 0x80) != (p1 & 0x80)) { + int i,l; + //l = snapline((int)((float)master_clk/22.0+0.5), VDCwrite[0xA3], 1); + for (i=l; i VBLCLK) d = d | 0x08; + if (h_clk < (LINECNT-7)) d = d | 0x01; + if (sound_IRQ) d = d | 0x04; + sound_IRQ=0; + return d; + case 0xA2: + si = VDCwrite[0xA2]; + m=0x01; + d=0; + for(i=0; i<8; i++) { + if (si & m) { + if (coltab[1] & m) d = d | (coltab[1] & (m ^ 0xFF)); + if (coltab[2] & m) d = d | (coltab[2] & (m ^ 0xFF)); + if (coltab[4] & m) d = d | (coltab[4] & (m ^ 0xFF)); + if (coltab[8] & m) d = d | (coltab[8] & (m ^ 0xFF)); + if (coltab[0x10] & m) d = d | (coltab[0x10] & (m ^ 0xFF)); + if (coltab[0x20] & m) d = d | (coltab[0x20] & (m ^ 0xFF)); + if (coltab[0x80] & m) d = d | (coltab[0x80] & (m ^ 0xFF)); + } + m = m << 1; + } + return d; + case 0xA5: + if (!(VDCwrite[0xA0] & 0x02)) { + return x_latch; + } + else { + x_latch = h_clk * 12; + return x_latch; + } + case 0xA4: + if (!(VDCwrite[0xA0] & 0x02)) { + return y_latch; + } + else { + y_latch = master_clk/22; + if (y_latch > 241) y_latch=0xFF; + return y_latch; + } + default: + return VDCwrite[adr]; + } + } else if (!(p1 & 0x10)) { + /* Handle ext RAM Read */ + return extRAM[adr & 0xFF]; + //} else if (!(p1 & 0x20)) { + // /* Read a Videopac+ register */ + // return vpp_read(adr); + } else if (app_data.exrom && (p1 & 0x02)) { + /* Handle read from exrom */ + return extROM[(p2 << 8) | (adr & 0xFF)]; + } + + return 0; +} + + +Byte in_bus(void){ + Byte si=0,d=0,mode=0,jn=0; + int key; + + + if ((p1 & 0x08) && (p1 & 0x10)) { + /* Handle joystick read */ + if (!(p1 & 0x04)) { + si = (p2 & 7); + } + d=0xFF; + /* Get current input */ + key = emu_ReadKeys(); + + app_data.stick[0]=0; + app_data.stick[1]=1; + /* + if ( emu_GetPad() & 0x80 ) + { + app_data.stick[0]=1; + app_data.stick[1]=0; + } + else + { + app_data.stick[0]=0; + app_data.stick[1]=1; + } + + + if (si == 1) { + mode = app_data.stick[0]; + jn = 0; + } else { + mode = app_data.stick[1]; + jn = 1; + } + */ + mode=1; + if (key & 0x8000) jn=1; + else jn=0; + + switch(mode) { + case 1: + if (key & MASK_JOY2_RIGHT) d &= 0xF7; + if (key & MASK_JOY2_LEFT) d &= 0xFD; + if (key & MASK_JOY2_UP) d &= 0xFE; + if (key & MASK_JOY2_DOWN) d &= 0xFB; + if (key & MASK_JOY2_BTN) d &= 0xEF; + break; + + case 2: + /* Get current input */ +// key = emu_GetPad(); +// if (key & JKEY_PLEFT) d &= 0xF7; +// if (key & JKEY_PRIGHT) d &= 0xFD; +// if (key & JKEY_PUP) d &= 0xFE; +// if (key & JKEY_PDOWN) d &= 0xFB; +// if (key & JKEY_PSPACE) d &= 0xEF; + break; + } + if (si == 1) { + if (dbstick1) d = dbstick1; + } else { + if (dbstick2) d = dbstick2; + } + } + return d; +} + + +void ext_write(Byte dat, ADDRESS adr){ + int i; + + if (!(p1 & 0x08)) { + /* Handle VDC Write */ + if (adr == 0xA0){ + if ((VDCwrite[0xA0] & 0x02) && !(dat & 0x02)) { + y_latch = master_clk/22; + x_latch = h_clk * 12; + if (y_latch > 241) y_latch=0xFF; + } + if ((master_clk <= VBLCLK) && (VDCwrite[0xA0] != dat)) { + if (!ccolflag) { + clear_collision(); + ccolflag=1; + } + draw_region(); + } + } else if (adr == 0xA2) { + clear_collision(); + ccolflag=1; + } else if (adr == 0xA3){ + int l; + //l = snapline((int)((float)master_clk/22.0+0.5), dat, 1); + for (i=l; i= 0xE8) && (adr <= 0xEF)) +// set_voice_bank(adr-0xE7); +// else if (((adr >= 0x80) && (adr <= 0xDF)) || ((adr >= 0xF0) && (adr <= 0xFF))) +// trigger_voice(adr); + } + } + //} else if (!(p1 & 0x20)) { + // /* Write to a Videopac+ register */ + // vpp_write(dat,adr); + } +} + + +static void do_kluges(void){ + if (app_data.crc == 0xA7344D1F) pendirq=1; /* Atlantis */ + if (app_data.crc == 0xFB83171E) pendirq=1; /* Blockout*/ + if (app_data.crc == 0x881CEAE4) pendirq=1; /* Wall Street */ + + if (app_data.crc == 0x9E42E766) useforen=1; /* Turtles */ + if (app_data.crc == 0x1C750349) useforen=1; /* Turtles (European version) */ + if (app_data.crc == 0x202F2749) useforen=1; /* Q*bert */ + + if (app_data.crc == 0xFB83171E) enahirq=0; /* Blockout*/ + + if (app_data.crc == 0xFB83171E) regionoff=1; /* Blockout*/ + if (app_data.crc == 0x202F2749) regionoff=1; /* Q*bert */ + if (app_data.crc == 0x5216771A) regionoff=1; /* Popeye */ + if (app_data.crc == 0x0C2E4811) regionoff=12; /* Out of this World! / Helicopter Rescue! */ + if (app_data.crc == 0x67069924) regionoff=11; /* Smithereens! */ + if (app_data.crc == 0x44D1A8A5) regionoff=11; /* Smithereens! (European version) */ + if (app_data.crc == 0xB936BD78) regionoff=12; /* Type & Tell */ + if (app_data.crc == 0xDC30AD3D) regionoff=10; /* Dynasty! */ + if (app_data.crc == 0x7810BAD5) regionoff=10; /* Dynasty! (European) */ + if (app_data.crc == 0xA7344D1F) regionoff=0; /* Atlantis */ + if (app_data.crc == 0xD0BC4EE6) regionoff=12; /* Frogger */ + if (app_data.crc == 0x825976A9) regionoff=0; /* Mousing Cat 8kb */ + if (app_data.crc == 0xF390BFEC) regionoff=0; /* Mousing Cat 4kb */ + if (app_data.crc == 0x3BFEF56B) regionoff=1; /* Four in 1 Row! */ + if (app_data.crc == 0x9BFC3E01) regionoff=10; /* Demon Attack */ + if (app_data.crc == 0x6CEBAB74) regionoff=12; /* P.T. Barnum's Acrobats! (European version) */ + if (app_data.crc == 0xE7B26A56) regionoff=12; /* P.T. Barnum's Acrobats! (European version - Extra keys) */ + + if (app_data.crc == 0xFB83171E) mxsnap=3; /* Blockout*/ + if (app_data.crc == 0xA57E1724) mxsnap=12; /* Catch the Ball / Noughts and Crosses */ + if (app_data.crc == 0xFD179F6D) mxsnap=3; /* Clay Pigeon! */ + if (app_data.crc == 0x9BFC3E01) mxsnap=0; /* Demon Attack */ + if (app_data.crc == 0x9C9DDDF9) mxsnap=3; /* Verkehr */ + if (app_data.crc == 0x95936B07) mxsnap=3; /* Super Cobra */ + if (app_data.crc == 0x881CEAE4) mxsnap=3; /* Wall Street */ + if (app_data.crc == 0x9E42E766) mxsnap=0; /* Turtles */ + if (app_data.crc == 0x1C750349) mxsnap=0; /* Turtles (European version) */ + if (app_data.crc == 0xD0BC4EE6) mxsnap=3; /* Frogger */ + if (app_data.crc == 0x3BFEF56B) mxsnap=6; /* Four in 1 Row! */ + + if (app_data.crc == 0xA7344D1F) setvideomode(1); /* Atlantis */ + if (app_data.crc == 0x39E31BF0) setvideomode(1); /* Jake */ + if (app_data.crc == 0x3351FEDA) setvideomode(1); /* Power Lords */ + if (app_data.crc == 0x40AE062D) setvideomode(1); /* Power Lords (alternate) */ + if (app_data.crc == 0xD158EEBA) setvideomode(1); /* Labirinth */ + if (app_data.crc == 0x26B0FF5B) setvideomode(1); /* Nightmare */ + if (app_data.crc == 0xDF36683F) setvideomode(1); /* Shark Hunter */ + if (app_data.crc == 0xAF307559) setvideomode(1); /* Super Bee 8Kb */ + if (app_data.crc == 0x9585D511) setvideomode(1); /* Super Bee 4Kb */ + if (app_data.crc == 0x58FA6766) setvideomode(1); /* War of the Nerves */ + if (app_data.crc == 0x58FA6766) setvideomode(1); /* War of the Nerves */ + if (app_data.crc == 0x39989464) setvideomode(1); /* Hockey! / Soccer! */ + if (app_data.crc == 0xB47F3E0B) setvideomode(1); /* Kill the Attacking Aliens Demo */ + if (app_data.crc == 0x3BFEF56B) setvideomode(1); /* Four in 1 Row! */ + if (app_data.crc == 0x68560DC7) setvideomode(1); /* Jopac Moto Crash */ + if (app_data.crc == 0x202F2749) setvideomode(0); /* Q*bert */ + if (app_data.crc == 0xFB83171E) setvideomode(0); /* Blockout*/ + if (app_data.crc == 0x9BFC3E01) setvideomode(0); /* Demon Attack */ + if (app_data.crc == 0x239DF97D) setvideomode(0); /* Pachinko! */ + if ((app_data.crc == 0xF390BFEC) || (app_data.crc == 0x825976A9)){ /* Mousing Cat */ + setvideomode(1); + evblclk=7642; + } + if (app_data.crc == 0xD0BC4EE6) { /* Frogger */ + setvideomode(1); + evblclk=7642; + } + if ((app_data.crc == 0x2DCB77F0) || (app_data.crc == 0xF6882734)) { /* Depth Charge / Marksman */ + setvideomode(1); + evblclk=9000; + } + if (app_data.crc == 0x881CEAE4) { /* Wall Street */ + setvideomode(1); + evblclk=6100; + } + + if (app_data.crc == 0xD0BC4EE6) tweakedaudio=1; /* Frogger */ + if (app_data.crc == 0x5216771A) tweakedaudio=1; /* Popeye */ + if (app_data.crc == 0xAFB23F89) tweakedaudio=1; /* Musician */ + + if (app_data.crc == 0xD3B09FEC) sproff=1; /* Volleyball! */ +} + +/* +int snapline(int pos, Byte reg, int t){ + int i; + for (i=0; i (c) 1997,1998 + * + * Developed by Andre de la Rocha + * + * http://o2em.sourceforge.net + * + * + * + * Videopac+ G7400 emulation + */ + + +#include +#include +#include +#include "types.h" +#include "vmachine.h" +#include "vdc.h" +#include "vpp_cset.h" +#include "vpp.h" + +#include "emuapi.h" + +typedef struct +{ + int w; + int h; + unsigned char * line; + // unsigned char line[320][250]; +} BITMAP; + +static void clear(BITMAP * bmp) +{ + int i,j; + bmp->line = (unsigned char *)emu_Malloc(BMPW*(BMPH+10)); + + + for(i=0;ih;i++) + for(j=0;jw;j++) + //bmp->line[i][j] = 0; + *bmp->line++ = 0; +} + + +static void vpp_draw_char(int x, int y, Byte ch, Byte c0, Byte c1, Byte ext, Byte dw, Byte dh, Byte ul); +static void vpp_update_screen(void); + + +static Byte LumReg = 0xff, TraReg = 0xff; +static BITMAP svppbmp; +static BITMAP * vppbmp = &svppbmp; +//static Byte *colplus = NULL; +//static Byte colplus[BMPW*BMPH]; +static int vppon = 1; +static int vpp_cx = 0; +static int vpp_cy = 0; +static Byte vpp_data = 0; +static int inc_curs=1; +static int slice=0; +static int vpp_y0=0; +static Byte vpp_r=0; +static Byte dchars[2][960]; +static Byte vpp_mem[40][32][4]; +static int frame_cnt=0; +static int blink_st=0; +static int slicemode=0; +static int need_update=0; + + + + +Byte read_PB(Byte p){ + p &= 0x3; + switch (p) { + case 0: + return LumReg >> 4; + break; + case 1: + return LumReg & 0xf; + break; + case 2: + return TraReg >> 4; + break; + case 3: + return TraReg & 0xf; + break; + } + return 0; +} + + +void write_PB(Byte p, Byte val){ + p &= 0x3; + val &= 0xf; + + switch (p) { + case 0: + LumReg = (val<<4) | (LumReg & 0xf); + break; + case 1: + LumReg = (LumReg & 0xf0) | val; + break; + case 2: + TraReg = (val<<4) | (TraReg & 0xf); + break; + case 3: + TraReg = (TraReg & 0xf0) | val; + break; + } + need_update = 1; +} + + +Byte vpp_read(ADDRESS adr){ + Byte t; + switch (adr){ + case 4: + return vpp_mem[vpp_cx][vpp_cy][1]; + case 5: + if (slicemode) { + Byte ext, chr; + chr = vpp_mem[vpp_cx][vpp_cy][0]; + ext = (vpp_mem[vpp_cx][vpp_cy][1] & 0x80) ? 1 : 0; + if (chr < 0xA0) + t = 0; + else { + t = dchars[ext][(chr-0xA0)*10+slice]; + t = ((t&0x80)>>7) | ((t&0x40)>>5) | ((t&0x20)>>3) | ((t&0x10)>>1) | ((t&0x08)<<1) | ((t&0x04)<<3) | ((t&0x02)<<5) | ((t&0x01)<<7); + } + slice = (slice+1) % 10; + } else { + t = vpp_mem[vpp_cx][vpp_cy][0]; + if (inc_curs) { + vpp_cx++; + if (vpp_cx >= 40) { + vpp_cx = 0; + vpp_cy++; + if (vpp_cy >= 24) vpp_cy = 0; + } + } + } + return t; + case 6: + return 0; + default: + return 0; + } +} + + +void vpp_write(Byte dat, ADDRESS adr){ + switch (adr) { + case 0: + if (!slicemode) vpp_mem[vpp_cx][vpp_cy][1] = dat; + break; + case 1: + if (slicemode) { + Byte ext, chr; + chr = vpp_mem[vpp_cx][vpp_cy][0]; + ext = (vpp_mem[vpp_cx][vpp_cy][1] & 0x80) ? 1 : 0; + if (chr >= 0xA0) dchars[ext][(chr-0xA0)*10+slice] = ((dat&0x80)>>7) | ((dat&0x40)>>5) | ((dat&0x20)>>3) | ((dat&0x10)>>1) | ((dat&0x08)<<1) | ((dat&0x04)<<3) | ((dat&0x02)<<5) | ((dat&0x01)<<7); + slice = (slice+1) % 10; + } else { + vpp_mem[vpp_cx][vpp_cy][0] = dat; + if ((dat>0x7f) && (dat<0xa0) && (!(vpp_mem[vpp_cx][vpp_cy][1] & 0x80))) { + vpp_mem[vpp_cx][vpp_cy][2] = dat; + vpp_mem[vpp_cx][vpp_cy][3] = vpp_mem[vpp_cx][vpp_cy][1]; + } else { + vpp_mem[vpp_cx][vpp_cy][2] = vpp_mem[vpp_cx][vpp_cy][3] = 0; + } + if (inc_curs) { + vpp_cx++; + if (vpp_cx >= 40) { + vpp_cx = 0; + vpp_cy++; + if (vpp_cy >= 24) vpp_cy = 0; + } + } + } + break; + case 2: + vpp_data = dat; + break; + case 3: + switch (dat & 0xe0) { + case 0x00: /* plus_cmd_brow */ + vpp_cy = vpp_data & 0x1f; + vpp_cx = 0; + break; + case 0x20: /* plus_cmd_loady */ + vpp_cy = vpp_data & 0x1f; + break; + case 0x40: /* plus_cmd_loadx */ + vpp_cx = vpp_data % 40; + break; + case 0x60: /* plus_cmd_incc */ + vpp_cx++; + if (vpp_cx >= 40) { + vpp_cx = 0; + vpp_cy++; + if (vpp_cy >= 24) vpp_cy = 0; + } + break; + case 0x80: /* plus_cmd_loadm */ + slicemode = 0; + slice = (vpp_data & 0x1f) % 10; + switch (vpp_data & 0xe0) { + case 0x00: /* plus_loadm_wr */ + inc_curs = 1; + break; + case 0x20: /* plus_loadm_rd */ + inc_curs = 1; + break; + case 0x40: /* plus_loadm_wrni */ + inc_curs = 0; + break; + case 0x60: /* plus_loadm_rdni */ + inc_curs = 0; + break; + case 0x80: /* plus_loadm_wrsl */ + slicemode = 1; + break; + case 0xA0: /* plus_loadm_rdsl */ + slicemode = 1; + break; + default: + break; + } + break; + case 0xA0: /* plus_cmd_loadr */ + vpp_r = vpp_data; + break; + case 0xC0: /* plus_cmd_loady0 */ + vpp_y0 = (vpp_data & 0x1f) % 24; + break; + default: + break; + } + break; + default: + break; + } + + need_update = 1; +} + + +void vpp_finish_bmp(Byte *vmem, int offx, int offy, int w, int h, int totw, int toth){ + int i, x, y, t, c, nc, clrx, clry; + int tcol[16], m[8] = {0x01, 0x10, 0x04, 0x40, 0x02, 0x20, 0x08, 0x80}; + Byte *pnt, *pnt2, *pnt3; + + if (vppon) { + //memset(colplus,0,BMPW*BMPH); + vppon=0; + } + + if (TraReg == 0xff) return; + + vppon=1; + + frame_cnt--; + if (frame_cnt<=0) { + frame_cnt = 100; + blink_st = 1-blink_st; + need_update = 1; + } + + if (need_update) vpp_update_screen(); + + for (i=0; i<8; i++) tcol[i] = tcol[i+8] = !(TraReg & m[i]); + + if (w > totw-offx) w = totw-offx; + if (h > toth-offy) h = toth-offy; + + if (w > vppbmp->w) w = vppbmp->w; + if (h > vppbmp->h) h = vppbmp->h; + + clrx = clry = 0; + for (i=0; (!clrx) && (iline[y]; + pnt2 = (Byte *)&vppbmp->line[y*320]; + + x=0; + while (x < w) { + pnt3 = pnt; + c = *pnt++; + t = x++; + + if ((((x+offx) & 3) == 0) && (sizeof(unsigned long)==4)) { + unsigned long cccc, dddd, *p = (unsigned long*) pnt; + int t2=x, w2=w-4; + cccc = (((unsigned long)c) & 0xff) | ((((unsigned long)c) & 0xff) << 8) | ((((unsigned long)c) & 0xff) << 16) | ((((unsigned long)c) & 0xff) << 24); + dddd = *p++; + while ((x39) || (y>24) || (ext>1)) return; + + d = (dh==2) ? 5 : 0; + + for (yy=0; yy<10; yy++) { + if (ul && (d==9)) + k = 255; + else if (ch >= 0xA0) + k = dchars[ext][(ch-0xA0)*10 + d]; + else if (ch >= 0x80) + k = 255; + else + k = vpp_cset[ext][ch * 10 + d]; + + m = (dw==2) ? 0x08 : 0x80; + + for (xx=0; xx<8; xx++) { + //vppbmp->line[y*10+yy][x*8+xx] = (k & m) ? c1 : c0; + vppbmp->line[(y*10+yy)*320+ x*8+xx] = (k & m) ? c1 : c0; + if ((xx%2) || (dw==0)) m >>= 1; + } + if ((yy%2) || (dh==0)) d++; + } +} + + +static void vpp_update_screen(void){ + int i,x,y,l,chr,attr,ext,c0,c1,dw,dh,hpar,vpar,lvd,lhd,ser_chr,ser_atr,ul,conc,box; + int tlum[8], m[8] = {0x01, 0x10, 0x04, 0x40, 0x02, 0x20, 0x08, 0x80}; + + clear(vppbmp); + + for (i=0; i<8; i++) tlum[i] = (LumReg & m[i]) ? 0 : 8; + + vpar = lvd = 0; + for (y=0; y<25; y++) { + + vpar = (lvd==0) ? 0 : 1-vpar; + + l = (y==0) ? 31 : (y-1+vpp_y0)%24; + c0 = ul = conc = box = 0; + + hpar = lhd = 0; + for (x=0; x<40; x++) { + hpar = (lhd==0) ? 0 : 1-hpar; + + chr = vpp_mem[x][l][0]; + attr = vpp_mem[x][l][1]; + c1 = attr & 0x7; + c1 = ((c1&2) | ((c1&1)<<2) | ((c1&4)>>2)); + ext = (attr & 0x80) ? 1 : 0; + + ser_chr = vpp_mem[x][l][2]; + ser_atr = vpp_mem[x][l][3]; + if (ser_chr) { + c0 = (ser_atr>>4) & 0x7; + c0 = ((c0&2) | ((c0&1)<<2) | ((c0&4)>>2)); + ul = ser_chr & 4; + conc = ser_chr & 1; + box = ser_chr & 2; + } + + if (ext) { + c0 = (attr>>4) & 0x7; + c0 = ((c0&2) | ((c0&1)<<2) | ((c0&4)>>2)); + dw = dh = 0; + } else { + dw = (attr & 0x20) ? (hpar ? 2 : 1) : 0; + dh = (attr & 0x10) ? (vpar ? 2 : 1) : 0; + if (dw) lhd=1; + if (dh) lvd=1; + } + + if ((vpp_r & 0x80) && (!(attr & 8)) && (!blink_st)) c1=c0; + + if (((y == 0) && (vpp_r & 8)) || ((y != 0) && (vpp_r & 1))) { + if ((!conc) || (!(vpp_r & 4))) { + if (box || (!(vpp_r & 2))) { + if ((!ext) && (attr & 0x40)) + vpp_draw_char(x, y, chr, c1|tlum[c1], c0|tlum[c0], ext, dw, dh, ul); + else + vpp_draw_char(x, y, chr, c0|tlum[c0], c1|tlum[c1], ext, dw, dh, ul); + } else { + vpp_draw_char(x, y, 255, (app_data.openb) ? 16 : 0, 0, 0, 0, 0, 0); + } + } + } + } + + } + + if (vpp_r & 0x20) { + for (y = vppbmp->h-1; y >= 10; y--) +// for (x = 0; x < vppbmp->w; x++) vppbmp->line[y][x] = vppbmp->line[(y-10)/2+10][x]; + for (x = 0; x < vppbmp->w; x++) vppbmp->line[y*320+x] = vppbmp->line[((y-10)/2+10)*320 + x]; + } + + need_update=0; +} + + +void load_colplus(Byte *col){ + if (vppon) { + //memcpy(col,colplus,BMPW*BMPH); + } + else + memset(col,0,BMPW*BMPH); +} + +void init_vpp(void){ + int i,j,k; + + vppbmp->w = 320; + vppbmp->h = 250; + +// if ((!vppbmp) || (!colplus)) { +// fprintf(stderr,"Could not allocate memory for Videopac+ screen buffer.\n"); +// exit(EXIT_FAILURE); +// } + + clear(vppbmp); + //memset(colplus,0,BMPW*BMPH); + + LumReg = TraReg = 0xff; + vpp_cx = 0; + vpp_cy = 0; + vpp_y0 = 0; + vpp_r = 0; + inc_curs = 1; + vpp_data = 0; + frame_cnt=0; + blink_st=0; + slice = 0; + slicemode=0; + need_update = 1; + vppon = 1; + + for (i=0; i<2; i++) + for (j=0; j<960; j++) dchars[i][j] = 0; + + for (i=0; i<40; i++) + for (j=0; j<32; j++) + for (k=0; k<4; k++) vpp_mem[i][j][k] = 0; +} + diff --git a/MCUME_pico/picoo2em/vpp.h b/MCUME_pico/picoo2em/vpp.h new file mode 100644 index 0000000..e3f8df6 --- /dev/null +++ b/MCUME_pico/picoo2em/vpp.h @@ -0,0 +1,12 @@ +#ifndef __VPP_H +#define __VPP_H + +Byte read_PB(Byte p); +void write_PB(Byte p, Byte val); +Byte vpp_read(ADDRESS adr); +void vpp_write(Byte dat, ADDRESS adr); +void vpp_finish_bmp(Byte *vmem, int offx, int offy, int w, int h, int totw, int toth); +void init_vpp(void); +void load_colplus(Byte *col); + +#endif diff --git a/MCUME_pico/picoo2em/vpp_cset.c b/MCUME_pico/picoo2em/vpp_cset.c new file mode 100644 index 0000000..0ae7de8 --- /dev/null +++ b/MCUME_pico/picoo2em/vpp_cset.c @@ -0,0 +1,284 @@ + +/* + * O2EM Freeware Odyssey2 / Videopac+ Emulator + * + * Created by Daniel Boris (c) 1997,1998 + * + * Developed by Andre de la Rocha + * + * http://o2em.sourceforge.net + * + * + * + * Videopac+ character table + */ + + +#include "types.h" +#include "vpp_cset.h" + + +const Byte vpp_cset[2][1280] = { + { + /* Alphanumeric */ + 0x00,0x38,0x44,0x40,0x20,0x10,0x00,0x10,0x00,0x00, + 0x00,0x10,0x28,0x00,0x38,0x44,0x7c,0x44,0x00,0x00, + 0x00,0x08,0x10,0x3c,0x20,0x30,0x20,0x3c,0x00,0x00, + 0x00,0x08,0x14,0x10,0x38,0x10,0x24,0x3c,0x00,0x00, + 0x00,0x10,0x38,0x50,0x38,0x14,0x54,0x38,0x10,0x00, + 0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x10,0x20, + 0x00,0x28,0x28,0x7c,0x28,0x7c,0x28,0x28,0x00,0x00, + 0x00,0x20,0x18,0x00,0x38,0x44,0x7c,0x44,0x00,0x00, + 0x00,0x20,0x18,0x00,0x44,0x44,0x44,0x38,0x00,0x00, + 0x00,0x10,0x08,0x3c,0x20,0x30,0x20,0x3c,0x00,0x00, + 0x00,0x3c,0x50,0x50,0x58,0x50,0x50,0x3c,0x00,0x00, + 0x00,0x08,0x14,0x3c,0x20,0x30,0x20,0x3c,0x00,0x00, + 0x00,0x00,0x10,0x20,0x7f,0x20,0x10,0x00,0x00,0x00, + 0x00,0x10,0x38,0x54,0x10,0x10,0x10,0x10,0x10,0x10, + 0x00,0x00,0x08,0x04,0xfe,0x04,0x08,0x00,0x00,0x00, + 0x10,0x10,0x10,0x10,0x10,0x10,0x54,0x38,0x10,0x00, + 0x00,0x18,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x10,0x10,0x7c,0x10,0x10,0x00,0x7c,0x00,0x00, + 0x00,0x08,0x10,0x38,0x44,0x7c,0x40,0x38,0x00,0x00, + 0x00,0x28,0x00,0x38,0x44,0x7c,0x40,0x38,0x00,0x00, + 0x00,0x28,0x00,0x30,0x10,0x10,0x10,0x38,0x00,0x00, + 0x00,0x00,0x00,0x38,0x40,0x40,0x40,0x38,0x10,0x20, + 0x00,0x10,0x28,0x00,0x44,0x44,0x4c,0x34,0x00,0x00, + 0x00,0x20,0x10,0x34,0x4c,0x44,0x4c,0x34,0x00,0x00, + 0x00,0x00,0x10,0x00,0x7c,0x00,0x10,0x00,0x00,0x00, + 0x00,0x20,0x10,0x38,0x44,0x7c,0x40,0x38,0x00,0x00, + 0x00,0x00,0x00,0x3c,0x52,0x5e,0x50,0x3e,0x00,0x00, + 0x00,0x10,0x28,0x38,0x44,0x7c,0x40,0x38,0x00,0x00, + 0x00,0x40,0xc0,0x40,0x44,0x4c,0x14,0x3e,0x04,0x00, + 0x00,0x40,0xc0,0x40,0x4c,0x52,0x04,0x08,0x1e,0x00, + 0x00,0xe0,0x20,0x40,0x24,0xcc,0x14,0x3e,0x04,0x00, + 0x00,0x10,0x28,0x00,0x38,0x44,0x44,0x38,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x10,0x10,0x10,0x10,0x10,0x00,0x10,0x00,0x00, + 0x00,0x28,0x28,0x28,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x28,0x00,0x3c,0x20,0x30,0x20,0x3c,0x00,0x00, + 0x00,0x10,0x28,0x34,0x4c,0x44,0x4c,0x34,0x00,0x00, + 0x00,0x60,0x64,0x08,0x10,0x20,0x4c,0x0c,0x00,0x00, + 0x00,0x20,0x50,0x50,0x20,0x54,0x48,0x34,0x00,0x00, + 0x00,0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x08,0x10,0x20,0x20,0x20,0x10,0x08,0x00,0x00, + 0x00,0x20,0x10,0x08,0x08,0x08,0x10,0x20,0x00,0x00, + 0x00,0x10,0x54,0x38,0x10,0x38,0x54,0x10,0x00,0x00, + 0x00,0x00,0x10,0x10,0x7c,0x10,0x10,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x40,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, + 0x01,0x02,0x02,0x04,0x08,0x10,0x20,0x20,0x40,0x80, + 0x00,0x10,0x28,0x44,0x44,0x44,0x28,0x10,0x00,0x00, + 0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x10,0x00,0x00, + 0x00,0x38,0x44,0x04,0x18,0x20,0x40,0x7c,0x00,0x00, + 0x00,0x7c,0x04,0x08,0x18,0x04,0x44,0x38,0x00,0x00, + 0x00,0x08,0x18,0x28,0x48,0x7c,0x08,0x08,0x00,0x00, + 0x00,0x7c,0x40,0x78,0x04,0x04,0x44,0x38,0x00,0x00, + 0x00,0x18,0x20,0x40,0x78,0x44,0x44,0x38,0x00,0x00, + 0x00,0x7c,0x04,0x08,0x10,0x20,0x20,0x20,0x00,0x00, + 0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x38,0x00,0x00, + 0x00,0x38,0x44,0x44,0x3c,0x04,0x04,0x38,0x00,0x00, + 0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00, + 0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x20,0x40,0x00, + 0x00,0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00,0x00, + 0x00,0x00,0x00,0x7c,0x00,0x7c,0x00,0x00,0x00,0x00, + 0x00,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x00,0x00, + 0x00,0x38,0x44,0x04,0x08,0x10,0x00,0x10,0x00,0x00, + 0x00,0x38,0x44,0x5c,0x54,0x5c,0x40,0x38,0x00,0x00, + 0x00,0x38,0x44,0x44,0x44,0x7c,0x44,0x44,0x00,0x00, + 0x00,0x78,0x44,0x44,0x78,0x44,0x44,0x78,0x00,0x00, + 0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00,0x00, + 0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00,0x00, + 0x00,0x7c,0x40,0x40,0x70,0x40,0x40,0x7c,0x00,0x00, + 0x00,0x7c,0x40,0x40,0x70,0x40,0x40,0x40,0x00,0x00, + 0x00,0x38,0x44,0x40,0x40,0x4c,0x44,0x3c,0x00,0x00, + 0x00,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x00,0x00, + 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, + 0x00,0x1c,0x08,0x08,0x08,0x08,0x48,0x30,0x00,0x00, + 0x00,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00, + 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x7c,0x00,0x00, + 0x00,0x44,0x6c,0x54,0x44,0x44,0x44,0x44,0x00,0x00, + 0x00,0x44,0x44,0x64,0x54,0x4c,0x44,0x44,0x00,0x00, + 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, + 0x00,0x78,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00, + 0x00,0x38,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00, + 0x00,0x78,0x44,0x44,0x78,0x50,0x48,0x44,0x00,0x00, + 0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00,0x00, + 0x00,0x7c,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00, + 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, + 0x00,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00, + 0x00,0x44,0x44,0x44,0x54,0x54,0x54,0x28,0x00,0x00, + 0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00, + 0x00,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x00,0x00, + 0x00,0x7c,0x04,0x08,0x10,0x20,0x40,0x7c,0x00,0x00, + 0x00,0x1c,0x10,0x10,0x10,0x10,0x10,0x1c,0x00,0x00, + 0x80,0x40,0x40,0x20,0x10,0x08,0x04,0x04,0x02,0x01, + 0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x38,0x00,0x00, + 0x00,0x10,0x28,0x00,0x30,0x10,0x10,0x38,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, + 0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x34,0x4c,0x44,0x4c,0x34,0x00,0x00, + 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x78,0x00,0x00, + 0x00,0x00,0x00,0x38,0x40,0x40,0x40,0x38,0x00,0x00, + 0x00,0x04,0x04,0x3c,0x44,0x44,0x44,0x3c,0x00,0x00, + 0x00,0x00,0x00,0x38,0x44,0x7c,0x40,0x38,0x00,0x00, + 0x00,0x18,0x24,0x20,0x70,0x20,0x20,0x20,0x00,0x00, + 0x00,0x00,0x00,0x3c,0x44,0x44,0x3c,0x04,0x24,0x18, + 0x00,0x40,0x40,0x58,0x64,0x44,0x44,0x44,0x00,0x00, + 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x38,0x00,0x00, + 0x00,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x48,0x30, + 0x00,0x20,0x20,0x24,0x28,0x30,0x28,0x24,0x00,0x00, + 0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, + 0x00,0x00,0x00,0x68,0x54,0x54,0x54,0x54,0x00,0x00, + 0x00,0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x00,0x00, + 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x00, + 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40, + 0x00,0x00,0x00,0x3c,0x44,0x44,0x44,0x3c,0x04,0x04, + 0x00,0x00,0x00,0x58,0x64,0x40,0x40,0x40,0x00,0x00, + 0x00,0x00,0x00,0x38,0x40,0x38,0x04,0x78,0x00,0x00, + 0x00,0x20,0x20,0x38,0x20,0x20,0x20,0x18,0x00,0x00, + 0x00,0x00,0x00,0x44,0x44,0x44,0x4c,0x34,0x00,0x00, + 0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x10,0x00,0x00, + 0x00,0x00,0x00,0x44,0x44,0x54,0x54,0x28,0x00,0x00, + 0x00,0x00,0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00, + 0x00,0x00,0x00,0x44,0x44,0x4c,0x34,0x04,0x44,0x38, + 0x00,0x00,0x00,0x7c,0x08,0x10,0x20,0x7c,0x00,0x00, + 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, + { + /* Separated semi-graphic */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00, + 0x70,0x70,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00, + 0x07,0x07,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00, + 0x77,0x77,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00, + 0x70,0x70,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00, + 0x07,0x07,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00, + 0x77,0x77,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x77,0x77,0x77,0x00,0x00,0x00,0x00, + 0x70,0x70,0x00,0x77,0x77,0x77,0x00,0x00,0x00,0x00, + 0x07,0x07,0x00,0x77,0x77,0x77,0x00,0x00,0x00,0x00, + 0x77,0x77,0x00,0x77,0x77,0x77,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x00, + 0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x00, + 0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x00, + 0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x00, + 0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x70,0x70,0x00, + 0x70,0x70,0x00,0x70,0x70,0x70,0x00,0x70,0x70,0x00, + 0x07,0x07,0x00,0x70,0x70,0x70,0x00,0x70,0x70,0x00, + 0x77,0x77,0x00,0x70,0x70,0x70,0x00,0x70,0x70,0x00, + 0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x70,0x70,0x00, + 0x70,0x70,0x00,0x07,0x07,0x07,0x00,0x70,0x70,0x00, + 0x07,0x07,0x00,0x07,0x07,0x07,0x00,0x70,0x70,0x00, + 0x77,0x77,0x00,0x07,0x07,0x07,0x00,0x70,0x70,0x00, + 0x00,0x00,0x00,0x77,0x77,0x77,0x00,0x70,0x70,0x00, + 0x70,0x70,0x00,0x77,0x77,0x77,0x00,0x70,0x70,0x00, + 0x07,0x07,0x00,0x77,0x77,0x77,0x00,0x70,0x70,0x00, + 0x77,0x77,0x00,0x77,0x77,0x77,0x00,0x70,0x70,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00, + 0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00, + 0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00, + 0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00, + 0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x07,0x07,0x00, + 0x70,0x70,0x00,0x70,0x70,0x70,0x00,0x07,0x07,0x00, + 0x07,0x07,0x00,0x70,0x70,0x70,0x00,0x07,0x07,0x00, + 0x77,0x77,0x00,0x70,0x70,0x70,0x00,0x07,0x07,0x00, + 0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x07,0x07,0x00, + 0x70,0x70,0x00,0x07,0x07,0x07,0x00,0x07,0x07,0x00, + 0x07,0x07,0x00,0x07,0x07,0x07,0x00,0x07,0x07,0x00, + 0x77,0x77,0x00,0x07,0x07,0x07,0x00,0x07,0x07,0x00, + 0x00,0x00,0x00,0x77,0x77,0x77,0x00,0x07,0x07,0x00, + 0x70,0x70,0x00,0x77,0x77,0x77,0x00,0x07,0x07,0x00, + 0x07,0x07,0x00,0x77,0x77,0x77,0x00,0x07,0x07,0x00, + 0x77,0x77,0x00,0x77,0x77,0x77,0x00,0x07,0x07,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x00, + 0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x00, + 0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x00, + 0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x00, + 0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x77,0x77,0x00, + 0x70,0x70,0x00,0x70,0x70,0x70,0x00,0x77,0x77,0x00, + 0x07,0x07,0x00,0x70,0x70,0x70,0x00,0x77,0x77,0x00, + 0x77,0x77,0x00,0x70,0x70,0x70,0x00,0x77,0x77,0x00, + 0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x77,0x77,0x00, + 0x70,0x70,0x00,0x07,0x07,0x07,0x00,0x77,0x77,0x00, + 0x07,0x07,0x00,0x07,0x07,0x07,0x00,0x77,0x77,0x00, + 0x77,0x77,0x00,0x07,0x07,0x07,0x00,0x77,0x77,0x00, + 0x00,0x00,0x00,0x77,0x77,0x77,0x00,0x77,0x77,0x00, + 0x70,0x70,0x00,0x77,0x77,0x77,0x00,0x77,0x77,0x00, + 0x07,0x07,0x00,0x77,0x77,0x77,0x00,0x77,0x77,0x00, + 0x77,0x77,0x00,0x77,0x77,0x77,0x00,0x77,0x77,0x00, + /* Mosaic semi-graphic */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf0,0xf0,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0x00,0x00,0x00, + 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x00,0x00,0x00, + 0x0f,0x0f,0x0f,0xf0,0xf0,0xf0,0xf0,0x00,0x00,0x00, + 0xff,0xff,0xff,0xf0,0xf0,0xf0,0xf0,0x00,0x00,0x00, + 0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00, + 0xf0,0xf0,0xf0,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00, + 0xff,0xff,0xff,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00, + 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00, + 0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0x00,0x00,0x00, + 0x0f,0x0f,0x0f,0xff,0xff,0xff,0xff,0x00,0x00,0x00, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xf0,0xf0, + 0xf0,0xf0,0xf0,0x00,0x00,0x00,0x00,0xf0,0xf0,0xf0, + 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0xf0,0xf0,0xf0, + 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xf0,0xf0,0xf0, + 0x00,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, + 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, + 0x0f,0x0f,0x0f,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, + 0xff,0xff,0xff,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, + 0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0xf0,0xf0,0xf0, + 0xf0,0xf0,0xf0,0x0f,0x0f,0x0f,0x0f,0xf0,0xf0,0xf0, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xf0,0xf0,0xf0, + 0xff,0xff,0xff,0x0f,0x0f,0x0f,0x0f,0xf0,0xf0,0xf0, + 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf0,0xf0,0xf0, + 0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0xf0,0xf0,0xf0, + 0x0f,0x0f,0x0f,0xff,0xff,0xff,0xff,0xf0,0xf0,0xf0, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xf0,0xf0, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f, + 0xf0,0xf0,0xf0,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f, + 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f, + 0x00,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0x0f,0x0f,0x0f, + 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0xf0,0xf0,0xf0,0xf0,0x0f,0x0f,0x0f, + 0xff,0xff,0xff,0xf0,0xf0,0xf0,0xf0,0x0f,0x0f,0x0f, + 0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0xf0,0xf0,0xf0,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0xff,0xff,0xff,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x0f,0x0f,0x0f, + 0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0xff,0xff,0xff,0xff,0x0f,0x0f,0x0f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x0f,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff, + 0xf0,0xf0,0xf0,0x00,0x00,0x00,0x00,0xff,0xff,0xff, + 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0xff,0xff,0xff, + 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff, + 0x00,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xff,0xff,0xff, + 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0xff,0xff, + 0x0f,0x0f,0x0f,0xf0,0xf0,0xf0,0xf0,0xff,0xff,0xff, + 0xff,0xff,0xff,0xf0,0xf0,0xf0,0xf0,0xff,0xff,0xff, + 0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0xff,0xff,0xff, + 0xf0,0xf0,0xf0,0x0f,0x0f,0x0f,0x0f,0xff,0xff,0xff, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xff,0xff,0xff, + 0xff,0xff,0xff,0x0f,0x0f,0x0f,0x0f,0xff,0xff,0xff, + 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x0f,0x0f,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff} +}; + diff --git a/MCUME_pico/picoo2em/vpp_cset.h b/MCUME_pico/picoo2em/vpp_cset.h new file mode 100644 index 0000000..4505177 --- /dev/null +++ b/MCUME_pico/picoo2em/vpp_cset.h @@ -0,0 +1,6 @@ +#ifndef __VPP_CSET_H +#define __VPP_CSET_H + +extern const Byte vpp_cset[2][1280]; + +#endif diff --git a/MCUME_pico/picospeccy/.DS_Store b/MCUME_pico/picospeccy/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/MCUME_pico/picospeccy/.DS_Store differ diff --git a/MCUME_pico/picospeccy/AY8910.c b/MCUME_pico/picospeccy/AY8910.c new file mode 100644 index 0000000..9c3984b --- /dev/null +++ b/MCUME_pico/picospeccy/AY8910.c @@ -0,0 +1,315 @@ +/** EMULib Emulation Library *********************************/ +/** **/ +/** AY8910.c **/ +/** **/ +/** This file contains emulation for the AY8910 sound chip **/ +/** produced by General Instruments, Yamaha, etc. See **/ +/** AY8910.h for declarations. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1996-2014 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +#include "AY8910.h" +#include "emuapi.h" +#include + +static const unsigned char Envelopes[16][32] = +{ + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 }, + { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } +}; + +static const int Volumes[16] = +{ 0,1,2,4,6,8,11,16,23,32,45,64,90,128,180,255 }; +//{ 0,16,33,50,67,84,101,118,135,152,169,186,203,220,237,254 }; + +/** Reset8910() **********************************************/ +/** Reset the sound chip and use sound channels from the **/ +/** one given in First. **/ +/*************************************************************/ +void Reset8910(register AY8910 *D,int ClockHz,int First) +{ + static byte RegInit[16] = + { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFD, + 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00 + }; + int J; + + /* Reset state */ + memcpy(D->R,RegInit,sizeof(D->R)); + D->EPhase = 0; + D->Clock = ClockHz>>4; + D->First = First; + D->Sync = AY8910_ASYNC; + D->Changed = 0x00; + D->EPeriod = 0; + D->ECount = 0; + D->Latch = 0x00; + + /* Set sound types */ + //SetSound(0+First,SND_MELODIC); + //SetSound(1+First,SND_MELODIC); + //SetSound(2+First,SND_MELODIC); + //SetSound(3+First,SND_NOISE); + //SetSound(4+First,SND_NOISE); + //SetSound(5+First,SND_NOISE); + + /* Silence all channels */ + for(J=0;JFreq[J]=D->Volume[J]=0; +#if HAS_SND + emu_sndPlaySound(J+First, 0, 0); +#endif + //Sound(J+First,0,0); + } +} + +/** WrCtrl8910() *********************************************/ +/** Write a value V to the PSG Control Port. **/ +/*************************************************************/ +void WrCtrl8910(AY8910 *D,byte V) +{ + D->Latch=V&0x0F; +} + +/** WrData8910() *********************************************/ +/** Write a value V to the PSG Data Port. **/ +/*************************************************************/ +void WrData8910(AY8910 *D,byte V) +{ + Write8910(D,D->Latch,V); +} + +/** RdData8910() *********************************************/ +/** Read a value from the PSG Data Port. **/ +/*************************************************************/ +byte RdData8910(AY8910 *D) +{ + return(D->R[D->Latch]); +} + +/** Write8910() **********************************************/ +/** Call this function to output a value V into the sound **/ +/** chip. **/ +/*************************************************************/ +void Write8910(register AY8910 *D,register byte R,register byte V) +{ + register int J,I; + + switch(R) + { + case 1: + case 3: + case 5: + V&=0x0F; + /* Fall through */ + case 0: + case 2: + case 4: + /* Write value */ + D->R[R]=V; + /* Exit if the channel is silenced */ + if(D->R[7]&(1<<(R>>1))) return; + /* Go to the first register in the pair */ + R&=0xFE; + /* Compute frequency */ + J=((int)(D->R[R+1]&0x0F)<<8)+D->R[R]; + /* Compute channel number */ + R>>=1; + /* Assign frequency */ + D->Freq[R]=D->Clock/(J? J:0x1000); + /* Compute changed channels mask */ + D->Changed|=1<R[6]=V&=0x1F; + /* Exit if noise channels are silenced */ + if(!(~D->R[7]&0x38)) return; + /* Compute and assign noise frequency */ + /* Shouldn't do <<2, but need to keep frequency down */ + J=D->Clock/((V&0x1F? (V&0x1F):0x20)<<2); + if(!(D->R[7]&0x08)) D->Freq[3]=J; + if(!(D->R[7]&0x10)) D->Freq[4]=J; + if(!(D->R[7]&0x20)) D->Freq[5]=J; + /* Compute changed channels mask */ + D->Changed|=0x38&~D->R[7]; + break; + + case 7: + /* Find changed channels */ + R=(V^D->R[7])&0x3F; + D->Changed|=R; + /* Write value */ + D->R[7]=V; + /* Update frequencies */ + for(J=0;R&&(J>=1,V>>=1) + if(R&1) + { + if(V&1) D->Freq[J]=0; + else if(J<3) + { + I=((int)(D->R[J*2+1]&0x0F)<<8)+D->R[J*2]; + D->Freq[J]=D->Clock/(I? I:0x1000); + } + else + { + /* Shouldn't do <<2, but need to keep frequency down */ + I=D->R[6]&0x1F; + D->Freq[J]=D->Clock/((I? I:0x20)<<2); + } + } + break; + + case 8: + case 9: + case 10: + /* Write value */ + D->R[R]=V&=0x1F; + /* Compute channel number */ + R-=8; + /* Compute and assign new volume */ + J=Volumes[V&0x10? Envelopes[D->R[13]&0x0F][D->EPhase]:(V&0x0F)]; + D->Volume[R]=J; + D->Volume[R+3]=(J+1)>>1; + /* Compute changed channels mask */ + D->Changed|=(0x09<R[7]; + break; + + case 11: + case 12: + /* Write value */ + D->R[R]=V; + /* Compute envelope period (why not <<4?) */ + J=((int)D->R[12]<<8)+D->R[11]; + D->EPeriod=1000*(J? J:0x10000)/D->Clock; + /* No channels changed */ + return; + + case 13: + /* Write value */ + D->R[R]=V&=0x0F; + /* Reset envelope */ + D->ECount = 0; + D->EPhase = 0; + for(J=0;JR[J+8]&0x10) + { + I = Volumes[Envelopes[V][0]]; + D->Volume[J] = I; + D->Volume[J+3] = (I+1)>>1; + D->Changed |= (0x09<R[7]; + } + break; + + case 14: + case 15: + /* Write value */ + D->R[R]=V; + /* No channels changed */ + return; + + default: + /* Wrong register, do nothing */ + return; + } + + /* For asynchronous mode, make Sound() calls right away */ + if(!D->Sync&&D->Changed) Sync8910(D,AY8910_FLUSH); +} + +/** Loop8910() ***********************************************/ +/** Call this function periodically to update volume **/ +/** envelopes. Use mS to pass the time since the last call **/ +/** of Loop8910() in milliseconds. **/ +/*************************************************************/ +void Loop8910(register AY8910 *D,int mS) +{ + register int J,I; + + /* Exit if no envelope running */ + if(!D->EPeriod) return; + + /* Count milliseconds */ + D->ECount += mS; + if(D->ECountEPeriod) return; + + /* Count steps */ + J = D->ECount/D->EPeriod; + D->ECount -= J*D->EPeriod; + + /* Count phases */ + D->EPhase += J; + if(D->EPhase>31) + D->EPhase = (D->R[13]&0x09)==0x08? (D->EPhase&0x1F):31; + + /* Set envelope volumes for relevant channels */ + for(I=0;I<3;++I) + if(D->R[I+8]&0x10) + { + J = Volumes[Envelopes[D->R[13]&0x0F][D->EPhase]]; + D->Volume[I] = J; + D->Volume[I+3] = (J+1)>>1; + D->Changed |= (0x09<R[7]; + } + + /* For asynchronous mode, make Sound() calls right away */ + if(!D->Sync&&D->Changed) Sync8910(D,AY8910_FLUSH); +} + +/** Sync8910() ***********************************************/ +/** Flush all accumulated changes by issuing Sound() calls **/ +/** and set the synchronization on/off. The second argument **/ +/** should be AY8910_SYNC/AY8910_ASYNC to set/reset sync, **/ +/** or AY8910_FLUSH to leave sync mode as it is. To emulate **/ +/** noise channels with MIDI drums, OR second argument with **/ +/** AY8910_DRUMS. **/ +/*************************************************************/ +void Sync8910(register AY8910 *D,register byte Sync) +{ + register int J,I; + + /* Hit MIDI drums for noise channels, if requested */ + if(Sync&AY8910_DRUMS) + { + Sync&=~AY8910_DRUMS; + J = (D->Freq[3]? D->Volume[3]:0) + + (D->Freq[4]? D->Volume[4]:0) + + (D->Freq[5]? D->Volume[5]:0); + if(J) { + //Drum(DRM_MIDI|28,(J+2)/3); + } + } + + if(Sync!=AY8910_FLUSH) D->Sync=Sync; + + for(J=0,I=D->Changed;I&&(J>=1) + if(I&1) { +#if HAS_SND + emu_sndPlaySound(J+D->First, D->Volume[J], D->Freq[J]); +#endif + //Sound(J+D->First,D->Freq[J],D->Volume[J]); + } + + D->Changed=0x00; +} diff --git a/MCUME_pico/picospeccy/AY8910.h b/MCUME_pico/picospeccy/AY8910.h new file mode 100755 index 0000000..b833cc6 --- /dev/null +++ b/MCUME_pico/picospeccy/AY8910.h @@ -0,0 +1,97 @@ +/** EMULib Emulation Library *********************************/ +/** **/ +/** AY8910.h **/ +/** **/ +/** This file contains emulation for the AY8910 sound chip **/ +/** produced by General Instruments, Yamaha, etc. See **/ +/** AY8910.c for the actual code. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1996-2014 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ +#ifndef AY8910_H +#define AY8910_H +#ifdef __cplusplus +extern "C" { +#endif + +#define AY8910_CHANNELS 6 /* 3 melodic + 3 noise chanls */ + +#define AY8910_ASYNC 0 /* Asynchronous emulation */ +#define AY8910_SYNC 1 /* Synchronous emulation */ +#define AY8910_FLUSH 2 /* Flush buffers only */ +#define AY8910_DRUMS 0x80 /* Hit drums for noise chnls */ + +#ifndef BYTE_TYPE_DEFINED +#define BYTE_TYPE_DEFINED +typedef unsigned char byte; +#endif + +/** AY8910 ***************************************************/ +/** This data structure stores AY8910 state. **/ +/*************************************************************/ +typedef struct +{ + byte R[16]; /* PSG registers contents */ + int Freq[AY8910_CHANNELS]; /* Frequencies (0 for off) */ + int Volume[AY8910_CHANNELS]; /* Volumes (0..255) */ + int Clock; /* Base clock used by PSG */ + int First; /* First used Sound() channel */ + byte Changed; /* Bitmap of changed channels */ + byte Sync; /* AY8910_SYNC/AY8910_ASYNC */ + byte Latch; /* Latch for the register num */ + int EPeriod; /* Envelope step in msecs */ + int ECount; /* Envelope step counter */ + int EPhase; /* Envelope phase */ +} AY8910; + +/** Reset8910() **********************************************/ +/** Reset the sound chip and use sound channels from the **/ +/** one given in First. **/ +/*************************************************************/ +void Reset8910(register AY8910 *D,int ClockHz,int First); + +/** Write8910() **********************************************/ +/** Call this function to output a value V into the sound **/ +/** chip. **/ +/*************************************************************/ +void Write8910(register AY8910 *D,register byte R,register byte V); + +/** WrCtrl8910() *********************************************/ +/** Write a value V to the PSG Control Port. **/ +/*************************************************************/ +void WrCtrl8910(AY8910 *D,byte V); + +/** WrData8910() *********************************************/ +/** Write a value V to the PSG Data Port. **/ +/*************************************************************/ +void WrData8910(AY8910 *D,byte V); + +/** RdData8910() *********************************************/ +/** Read a value from the PSG Data Port. **/ +/*************************************************************/ +byte RdData8910(AY8910 *D); + +/** Sync8910() ***********************************************/ +/** Flush all accumulated changes by issuing Sound() calls **/ +/** and set the synchronization on/off. The second argument **/ +/** should be AY8910_SYNC/AY8910_ASYNC to set/reset sync, **/ +/** or AY8910_FLUSH to leave sync mode as it is. To emulate **/ +/** noise channels with MIDI drums, OR second argument with **/ +/** AY8910_DRUMS. **/ +/*************************************************************/ +void Sync8910(register AY8910 *D,register byte Sync); + +/** Loop8910() ***********************************************/ +/** Call this function periodically to update volume **/ +/** envelopes. Use mS to pass the time since the last call **/ +/** of Loop8910() in milliseconds. **/ +/*************************************************************/ +void Loop8910(register AY8910 *D,int mS); + +#ifdef __cplusplus +} +#endif +#endif /* AY8910_H */ diff --git a/MCUME_pico/picospeccy/AudioPlaySystem.cpp b/MCUME_pico/picospeccy/AudioPlaySystem.cpp new file mode 100644 index 0000000..36b764d --- /dev/null +++ b/MCUME_pico/picospeccy/AudioPlaySystem.cpp @@ -0,0 +1,179 @@ +#include "emuapi.h" + +#ifdef HAS_SND + +#include "AudioPlaySystem.h" + +#define SAMPLERATE AUDIO_SAMPLE_RATE_EXACT +#define CLOCKFREQ 985248 + +#ifndef CUSTOM_SND +static const short square[]={ +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +32767,32767,32767,32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767, +}; + +const short noise[] { +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, +-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767, +-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,-32767,-32767, +32767,-32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,-32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767, +32767,-32767,32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767, +}; + +#define NOISEBSIZE 0x100 + +typedef struct +{ + unsigned int spos; + unsigned int sinc; + unsigned int vol; +} Channel; + +static Channel chan[6] = { + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0} }; + +#endif + +volatile bool playing = false; + + +static void snd_Reset(void) +{ +#ifndef CUSTOM_SND + chan[0].vol = 0; + chan[1].vol = 0; + chan[2].vol = 0; + chan[3].vol = 0; + chan[4].vol = 0; + chan[5].vol = 0; + chan[0].sinc = 0; + chan[1].sinc = 0; + chan[2].sinc = 0; + chan[3].sinc = 0; + chan[4].sinc = 0; + chan[5].sinc = 0; +#endif +} + + +#ifdef CUSTOM_SND +extern "C" { +void SND_Process(void *sndbuffer, int sndn); +} +#endif + +#include +void AudioPlaySystem::snd_Mixer(short * stream, int len ) +{ + if (playing) + { +#ifdef CUSTOM_SND + //printf("s\n"); + SND_Process((void*)stream, len); +#else + int i; + long s; + len = len >> 1; + short v0=chan[0].vol; + short v1=chan[1].vol; + short v2=chan[2].vol; + short v3=chan[3].vol; + short v4=chan[4].vol; + short v5=chan[5].vol; + for (i=0;i>8)&0x3f])>>11); + s+=((v1*square[(chan[1].spos>>8)&0x3f])>>11); + s+=((v2*square[(chan[2].spos>>8)&0x3f])>>11); + s+=((v3*noise[(chan[3].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v4*noise[(chan[4].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v5*noise[(chan[5].spos>>8)&(NOISEBSIZE-1)])>>11); + *stream++ = (short)(s); + *stream++ = (short)(s); + chan[0].spos += chan[0].sinc; + chan[1].spos += chan[1].sinc; + chan[2].spos += chan[2].sinc; + chan[3].spos += chan[3].sinc; + chan[4].spos += chan[4].sinc; + chan[5].spos += chan[5].sinc; + } +#endif + } +} + +void AudioPlaySystem::begin(void) +{ + this->reset(); +} + +void AudioPlaySystem::start(void) +{ + playing = true; +} + +void AudioPlaySystem::setSampleParameters(float clockfreq, float samplerate) { +} + +void AudioPlaySystem::reset(void) +{ + snd_Reset(); +} + +void AudioPlaySystem::stop(void) +{ + playing = false; +} + +bool AudioPlaySystem::isPlaying(void) +{ + return playing; +} + + + +void AudioPlaySystem::sound(int C, int F, int V) { +#ifndef CUSTOM_SND + if (C < 6) { + chan[C].vol = V; + chan[C].sinc = F>>1; + } +#endif +} + +void AudioPlaySystem::step(void) { +} + +void AudioPlaySystem::buzz(int size, int val) { +} +#endif diff --git a/MCUME_pico/picospeccy/AudioPlaySystem.h b/MCUME_pico/picospeccy/AudioPlaySystem.h new file mode 100644 index 0000000..5d2efc0 --- /dev/null +++ b/MCUME_pico/picospeccy/AudioPlaySystem.h @@ -0,0 +1,26 @@ +#ifndef audioplaysystem_h_ +#define audioplaysystem_h_ + +#ifdef HAS_SND + +#include "platform_config.h" + +class AudioPlaySystem +{ +public: + AudioPlaySystem(void) { }; + void begin(void); + void setSampleParameters(float clockfreq, float samplerate); + void reset(void); + void start(void); + void stop(void); + bool isPlaying(void); + void sound(int C, int F, int V); + void buzz(int size, int val); + void step(void); + static void snd_Mixer(short * stream, int len ); +}; + +#endif + +#endif diff --git a/MCUME_pico/picospeccy/Codes.h b/MCUME_pico/picospeccy/Codes.h new file mode 100755 index 0000000..2dcee81 --- /dev/null +++ b/MCUME_pico/picospeccy/Codes.h @@ -0,0 +1,385 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** Codes.h **/ +/** **/ +/** This file contains implementation for the main table of **/ +/** Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +case JR_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W++; else { R->ICount-=5;M_JR; } break; +case JR_NC: if(R->AF.B.l&C_FLAG) R->PC.W++; else { R->ICount-=5;M_JR; } break; +case JR_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=5;M_JR; } else R->PC.W++; break; +case JR_C: if(R->AF.B.l&C_FLAG) { R->ICount-=5;M_JR; } else R->PC.W++; break; + +case JP_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_Z: if(R->AF.B.l&Z_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_C: if(R->AF.B.l&C_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_PE: if(R->AF.B.l&P_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_M: if(R->AF.B.l&S_FLAG) { M_JP; } else R->PC.W+=2; break; + +case RET_NZ: if(!(R->AF.B.l&Z_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_NC: if(!(R->AF.B.l&C_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_PO: if(!(R->AF.B.l&P_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_P: if(!(R->AF.B.l&S_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=6;M_RET; } break; +case RET_C: if(R->AF.B.l&C_FLAG) { R->ICount-=6;M_RET; } break; +case RET_PE: if(R->AF.B.l&P_FLAG) { R->ICount-=6;M_RET; } break; +case RET_M: if(R->AF.B.l&S_FLAG) { R->ICount-=6;M_RET; } break; + +case CALL_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_C: if(R->AF.B.l&C_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_PE: if(R->AF.B.l&P_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_M: if(R->AF.B.l&S_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; + +case ADD_B: M_ADD(R->BC.B.h);break; +case ADD_C: M_ADD(R->BC.B.l);break; +case ADD_D: M_ADD(R->DE.B.h);break; +case ADD_E: M_ADD(R->DE.B.l);break; +case ADD_H: M_ADD(R->HL.B.h);break; +case ADD_L: M_ADD(R->HL.B.l);break; +case ADD_A: M_ADD(R->AF.B.h);break; +case ADD_xHL: I=RdZ80(R->HL.W);M_ADD(I);break; +case ADD_BYTE: I=OpZ80(R->PC.W++);M_ADD(I);break; + +case SUB_B: M_SUB(R->BC.B.h);break; +case SUB_C: M_SUB(R->BC.B.l);break; +case SUB_D: M_SUB(R->DE.B.h);break; +case SUB_E: M_SUB(R->DE.B.l);break; +case SUB_H: M_SUB(R->HL.B.h);break; +case SUB_L: M_SUB(R->HL.B.l);break; +case SUB_A: R->AF.B.h=0;R->AF.B.l=N_FLAG|Z_FLAG;break; +case SUB_xHL: I=RdZ80(R->HL.W);M_SUB(I);break; +case SUB_BYTE: I=OpZ80(R->PC.W++);M_SUB(I);break; + +case AND_B: M_AND(R->BC.B.h);break; +case AND_C: M_AND(R->BC.B.l);break; +case AND_D: M_AND(R->DE.B.h);break; +case AND_E: M_AND(R->DE.B.l);break; +case AND_H: M_AND(R->HL.B.h);break; +case AND_L: M_AND(R->HL.B.l);break; +case AND_A: M_AND(R->AF.B.h);break; +case AND_xHL: I=RdZ80(R->HL.W);M_AND(I);break; +case AND_BYTE: I=OpZ80(R->PC.W++);M_AND(I);break; + +case OR_B: M_OR(R->BC.B.h);break; +case OR_C: M_OR(R->BC.B.l);break; +case OR_D: M_OR(R->DE.B.h);break; +case OR_E: M_OR(R->DE.B.l);break; +case OR_H: M_OR(R->HL.B.h);break; +case OR_L: M_OR(R->HL.B.l);break; +case OR_A: M_OR(R->AF.B.h);break; +case OR_xHL: I=RdZ80(R->HL.W);M_OR(I);break; +case OR_BYTE: I=OpZ80(R->PC.W++);M_OR(I);break; + +case ADC_B: M_ADC(R->BC.B.h);break; +case ADC_C: M_ADC(R->BC.B.l);break; +case ADC_D: M_ADC(R->DE.B.h);break; +case ADC_E: M_ADC(R->DE.B.l);break; +case ADC_H: M_ADC(R->HL.B.h);break; +case ADC_L: M_ADC(R->HL.B.l);break; +case ADC_A: M_ADC(R->AF.B.h);break; +case ADC_xHL: I=RdZ80(R->HL.W);M_ADC(I);break; +case ADC_BYTE: I=OpZ80(R->PC.W++);M_ADC(I);break; + +case SBC_B: M_SBC(R->BC.B.h);break; +case SBC_C: M_SBC(R->BC.B.l);break; +case SBC_D: M_SBC(R->DE.B.h);break; +case SBC_E: M_SBC(R->DE.B.l);break; +case SBC_H: M_SBC(R->HL.B.h);break; +case SBC_L: M_SBC(R->HL.B.l);break; +case SBC_A: M_SBC(R->AF.B.h);break; +case SBC_xHL: I=RdZ80(R->HL.W);M_SBC(I);break; +case SBC_BYTE: I=OpZ80(R->PC.W++);M_SBC(I);break; + +case XOR_B: M_XOR(R->BC.B.h);break; +case XOR_C: M_XOR(R->BC.B.l);break; +case XOR_D: M_XOR(R->DE.B.h);break; +case XOR_E: M_XOR(R->DE.B.l);break; +case XOR_H: M_XOR(R->HL.B.h);break; +case XOR_L: M_XOR(R->HL.B.l);break; +case XOR_A: R->AF.B.h=0;R->AF.B.l=P_FLAG|Z_FLAG;break; +case XOR_xHL: I=RdZ80(R->HL.W);M_XOR(I);break; +case XOR_BYTE: I=OpZ80(R->PC.W++);M_XOR(I);break; + +case CP_B: M_CP(R->BC.B.h);break; +case CP_C: M_CP(R->BC.B.l);break; +case CP_D: M_CP(R->DE.B.h);break; +case CP_E: M_CP(R->DE.B.l);break; +case CP_H: M_CP(R->HL.B.h);break; +case CP_L: M_CP(R->HL.B.l);break; +case CP_A: R->AF.B.l=N_FLAG|Z_FLAG;break; +case CP_xHL: I=RdZ80(R->HL.W);M_CP(I);break; +case CP_BYTE: I=OpZ80(R->PC.W++);M_CP(I);break; + +case LD_BC_WORD: M_LDWORD(BC);break; +case LD_DE_WORD: M_LDWORD(DE);break; +case LD_HL_WORD: M_LDWORD(HL);break; +case LD_SP_WORD: M_LDWORD(SP);break; + +case LD_PC_HL: R->PC.W=R->HL.W;JumpZ80(R->PC.W);break; +case LD_SP_HL: R->SP.W=R->HL.W;break; +case LD_A_xBC: R->AF.B.h=RdZ80(R->BC.W);break; +case LD_A_xDE: R->AF.B.h=RdZ80(R->DE.W);break; + +case ADD_HL_BC: M_ADDW(HL,BC);break; +case ADD_HL_DE: M_ADDW(HL,DE);break; +case ADD_HL_HL: M_ADDW(HL,HL);break; +case ADD_HL_SP: M_ADDW(HL,SP);break; + +case DEC_BC: R->BC.W--;break; +case DEC_DE: R->DE.W--;break; +case DEC_HL: R->HL.W--;break; +case DEC_SP: R->SP.W--;break; + +case INC_BC: R->BC.W++;break; +case INC_DE: R->DE.W++;break; +case INC_HL: R->HL.W++;break; +case INC_SP: R->SP.W++;break; + +case DEC_B: M_DEC(R->BC.B.h);break; +case DEC_C: M_DEC(R->BC.B.l);break; +case DEC_D: M_DEC(R->DE.B.h);break; +case DEC_E: M_DEC(R->DE.B.l);break; +case DEC_H: M_DEC(R->HL.B.h);break; +case DEC_L: M_DEC(R->HL.B.l);break; +case DEC_A: M_DEC(R->AF.B.h);break; +case DEC_xHL: I=RdZ80(R->HL.W);M_DEC(I);WrZ80(R->HL.W,I);break; + +case INC_B: M_INC(R->BC.B.h);break; +case INC_C: M_INC(R->BC.B.l);break; +case INC_D: M_INC(R->DE.B.h);break; +case INC_E: M_INC(R->DE.B.l);break; +case INC_H: M_INC(R->HL.B.h);break; +case INC_L: M_INC(R->HL.B.l);break; +case INC_A: M_INC(R->AF.B.h);break; +case INC_xHL: I=RdZ80(R->HL.W);M_INC(I);WrZ80(R->HL.W,I);break; + +case RLCA: + I=R->AF.B.h&0x80? C_FLAG:0; + R->AF.B.h=(R->AF.B.h<<1)|I; + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RLA: + I=R->AF.B.h&0x80? C_FLAG:0; + R->AF.B.h=(R->AF.B.h<<1)|(R->AF.B.l&C_FLAG); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RRCA: + I=R->AF.B.h&0x01; + R->AF.B.h=(R->AF.B.h>>1)|(I? 0x80:0); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RRA: + I=R->AF.B.h&0x01; + R->AF.B.h=(R->AF.B.h>>1)|(R->AF.B.l&C_FLAG? 0x80:0); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; + +case RST00: M_RST(0x0000);break; +case RST08: M_RST(0x0008);break; +case RST10: M_RST(0x0010);break; +case RST18: M_RST(0x0018);break; +case RST20: M_RST(0x0020);break; +case RST28: M_RST(0x0028);break; +case RST30: M_RST(0x0030);break; +case RST38: M_RST(0x0038);break; + +case PUSH_BC: M_PUSH(BC);break; +case PUSH_DE: M_PUSH(DE);break; +case PUSH_HL: M_PUSH(HL);break; +case PUSH_AF: M_PUSH(AF);break; + +case POP_BC: M_POP(BC);break; +case POP_DE: M_POP(DE);break; +case POP_HL: M_POP(HL);break; +case POP_AF: M_POP(AF);break; + +case DJNZ: if(--R->BC.B.h) { R->ICount-=5;M_JR; } else R->PC.W++;break; +case JP: M_JP;break; +case JR: M_JR;break; +case CALL: M_CALL;break; +case RET: M_RET;break; +case SCF: S(C_FLAG);R(N_FLAG|H_FLAG);break; +case CPL: R->AF.B.h=~R->AF.B.h;S(N_FLAG|H_FLAG);break; +case NOP: break; +case OUTA: I=OpZ80(R->PC.W++);OutZ80(I|(R->AF.W&0xFF00),R->AF.B.h);break; +case INA: I=OpZ80(R->PC.W++);R->AF.B.h=InZ80(I|(R->AF.W&0xFF00));break; + +case HALT: + R->PC.W--; + R->IFF|=IFF_HALT; + R->IBackup=0; + R->ICount=0; + break; + +case DI: + if(R->IFF&IFF_EI) R->ICount+=R->IBackup-1; + R->IFF&=~(IFF_1|IFF_2|IFF_EI); + break; + +case EI: + if(!(R->IFF&(IFF_1|IFF_EI))) + { + R->IFF|=IFF_2|IFF_EI; + R->IBackup=R->ICount; + R->ICount=1; + } + break; + +case CCF: + R->AF.B.l^=C_FLAG;R(N_FLAG|H_FLAG); + R->AF.B.l|=R->AF.B.l&C_FLAG? 0:H_FLAG; + break; + +case EXX: + J.W=R->BC.W;R->BC.W=R->BC1.W;R->BC1.W=J.W; + J.W=R->DE.W;R->DE.W=R->DE1.W;R->DE1.W=J.W; + J.W=R->HL.W;R->HL.W=R->HL1.W;R->HL1.W=J.W; + break; + +case EX_DE_HL: J.W=R->DE.W;R->DE.W=R->HL.W;R->HL.W=J.W;break; +case EX_AF_AF: J.W=R->AF.W;R->AF.W=R->AF1.W;R->AF1.W=J.W;break; + +case LD_B_B: R->BC.B.h=R->BC.B.h;break; +case LD_C_B: R->BC.B.l=R->BC.B.h;break; +case LD_D_B: R->DE.B.h=R->BC.B.h;break; +case LD_E_B: R->DE.B.l=R->BC.B.h;break; +case LD_H_B: R->HL.B.h=R->BC.B.h;break; +case LD_L_B: R->HL.B.l=R->BC.B.h;break; +case LD_A_B: R->AF.B.h=R->BC.B.h;break; +case LD_xHL_B: WrZ80(R->HL.W,R->BC.B.h);break; + +case LD_B_C: R->BC.B.h=R->BC.B.l;break; +case LD_C_C: R->BC.B.l=R->BC.B.l;break; +case LD_D_C: R->DE.B.h=R->BC.B.l;break; +case LD_E_C: R->DE.B.l=R->BC.B.l;break; +case LD_H_C: R->HL.B.h=R->BC.B.l;break; +case LD_L_C: R->HL.B.l=R->BC.B.l;break; +case LD_A_C: R->AF.B.h=R->BC.B.l;break; +case LD_xHL_C: WrZ80(R->HL.W,R->BC.B.l);break; + +case LD_B_D: R->BC.B.h=R->DE.B.h;break; +case LD_C_D: R->BC.B.l=R->DE.B.h;break; +case LD_D_D: R->DE.B.h=R->DE.B.h;break; +case LD_E_D: R->DE.B.l=R->DE.B.h;break; +case LD_H_D: R->HL.B.h=R->DE.B.h;break; +case LD_L_D: R->HL.B.l=R->DE.B.h;break; +case LD_A_D: R->AF.B.h=R->DE.B.h;break; +case LD_xHL_D: WrZ80(R->HL.W,R->DE.B.h);break; + +case LD_B_E: R->BC.B.h=R->DE.B.l;break; +case LD_C_E: R->BC.B.l=R->DE.B.l;break; +case LD_D_E: R->DE.B.h=R->DE.B.l;break; +case LD_E_E: R->DE.B.l=R->DE.B.l;break; +case LD_H_E: R->HL.B.h=R->DE.B.l;break; +case LD_L_E: R->HL.B.l=R->DE.B.l;break; +case LD_A_E: R->AF.B.h=R->DE.B.l;break; +case LD_xHL_E: WrZ80(R->HL.W,R->DE.B.l);break; + +case LD_B_H: R->BC.B.h=R->HL.B.h;break; +case LD_C_H: R->BC.B.l=R->HL.B.h;break; +case LD_D_H: R->DE.B.h=R->HL.B.h;break; +case LD_E_H: R->DE.B.l=R->HL.B.h;break; +case LD_H_H: R->HL.B.h=R->HL.B.h;break; +case LD_L_H: R->HL.B.l=R->HL.B.h;break; +case LD_A_H: R->AF.B.h=R->HL.B.h;break; +case LD_xHL_H: WrZ80(R->HL.W,R->HL.B.h);break; + +case LD_B_L: R->BC.B.h=R->HL.B.l;break; +case LD_C_L: R->BC.B.l=R->HL.B.l;break; +case LD_D_L: R->DE.B.h=R->HL.B.l;break; +case LD_E_L: R->DE.B.l=R->HL.B.l;break; +case LD_H_L: R->HL.B.h=R->HL.B.l;break; +case LD_L_L: R->HL.B.l=R->HL.B.l;break; +case LD_A_L: R->AF.B.h=R->HL.B.l;break; +case LD_xHL_L: WrZ80(R->HL.W,R->HL.B.l);break; + +case LD_B_A: R->BC.B.h=R->AF.B.h;break; +case LD_C_A: R->BC.B.l=R->AF.B.h;break; +case LD_D_A: R->DE.B.h=R->AF.B.h;break; +case LD_E_A: R->DE.B.l=R->AF.B.h;break; +case LD_H_A: R->HL.B.h=R->AF.B.h;break; +case LD_L_A: R->HL.B.l=R->AF.B.h;break; +case LD_A_A: R->AF.B.h=R->AF.B.h;break; +case LD_xHL_A: WrZ80(R->HL.W,R->AF.B.h);break; + +case LD_xBC_A: WrZ80(R->BC.W,R->AF.B.h);break; +case LD_xDE_A: WrZ80(R->DE.W,R->AF.B.h);break; + +case LD_B_xHL: R->BC.B.h=RdZ80(R->HL.W);break; +case LD_C_xHL: R->BC.B.l=RdZ80(R->HL.W);break; +case LD_D_xHL: R->DE.B.h=RdZ80(R->HL.W);break; +case LD_E_xHL: R->DE.B.l=RdZ80(R->HL.W);break; +case LD_H_xHL: R->HL.B.h=RdZ80(R->HL.W);break; +case LD_L_xHL: R->HL.B.l=RdZ80(R->HL.W);break; +case LD_A_xHL: R->AF.B.h=RdZ80(R->HL.W);break; + +case LD_B_BYTE: R->BC.B.h=OpZ80(R->PC.W++);break; +case LD_C_BYTE: R->BC.B.l=OpZ80(R->PC.W++);break; +case LD_D_BYTE: R->DE.B.h=OpZ80(R->PC.W++);break; +case LD_E_BYTE: R->DE.B.l=OpZ80(R->PC.W++);break; +case LD_H_BYTE: R->HL.B.h=OpZ80(R->PC.W++);break; +case LD_L_BYTE: R->HL.B.l=OpZ80(R->PC.W++);break; +case LD_A_BYTE: R->AF.B.h=OpZ80(R->PC.W++);break; +case LD_xHL_BYTE: WrZ80(R->HL.W,OpZ80(R->PC.W++));break; + +case LD_xWORD_HL: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W++,R->HL.B.l); + WrZ80(J.W,R->HL.B.h); + break; + +case LD_HL_xWORD: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->HL.B.l=RdZ80(J.W++); + R->HL.B.h=RdZ80(J.W); + break; + +case LD_A_xWORD: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->AF.B.h=RdZ80(J.W); + break; + +case LD_xWORD_A: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W,R->AF.B.h); + break; + +case EX_HL_xSP: + J.B.l=RdZ80(R->SP.W);WrZ80(R->SP.W++,R->HL.B.l); + J.B.h=RdZ80(R->SP.W);WrZ80(R->SP.W--,R->HL.B.h); + R->HL.W=J.W; + break; + +case DAA: + J.W=R->AF.B.h; + if(R->AF.B.l&C_FLAG) J.W|=256; + if(R->AF.B.l&H_FLAG) J.W|=512; + if(R->AF.B.l&N_FLAG) J.W|=1024; + R->AF.W=DAATable[J.W]; + break; + +default: + if(R->TrapBadOps) + printf + ( + "[Z80 %lX] Unrecognized instruction: %02X at PC=%04X\n", + (long)R->User,OpZ80(R->PC.W-1),R->PC.W-1 + ); + break; diff --git a/MCUME_pico/picospeccy/CodesCB.h b/MCUME_pico/picospeccy/CodesCB.h new file mode 100755 index 0000000..15fcb4f --- /dev/null +++ b/MCUME_pico/picospeccy/CodesCB.h @@ -0,0 +1,204 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** CodesCB.h **/ +/** **/ +/** This file contains implementation for the CB table of **/ +/** Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +case RLC_B: M_RLC(R->BC.B.h);break; case RLC_C: M_RLC(R->BC.B.l);break; +case RLC_D: M_RLC(R->DE.B.h);break; case RLC_E: M_RLC(R->DE.B.l);break; +case RLC_H: M_RLC(R->HL.B.h);break; case RLC_L: M_RLC(R->HL.B.l);break; +case RLC_xHL: I=RdZ80(R->HL.W);M_RLC(I);WrZ80(R->HL.W,I);break; +case RLC_A: M_RLC(R->AF.B.h);break; + +case RRC_B: M_RRC(R->BC.B.h);break; case RRC_C: M_RRC(R->BC.B.l);break; +case RRC_D: M_RRC(R->DE.B.h);break; case RRC_E: M_RRC(R->DE.B.l);break; +case RRC_H: M_RRC(R->HL.B.h);break; case RRC_L: M_RRC(R->HL.B.l);break; +case RRC_xHL: I=RdZ80(R->HL.W);M_RRC(I);WrZ80(R->HL.W,I);break; +case RRC_A: M_RRC(R->AF.B.h);break; + +case RL_B: M_RL(R->BC.B.h);break; case RL_C: M_RL(R->BC.B.l);break; +case RL_D: M_RL(R->DE.B.h);break; case RL_E: M_RL(R->DE.B.l);break; +case RL_H: M_RL(R->HL.B.h);break; case RL_L: M_RL(R->HL.B.l);break; +case RL_xHL: I=RdZ80(R->HL.W);M_RL(I);WrZ80(R->HL.W,I);break; +case RL_A: M_RL(R->AF.B.h);break; + +case RR_B: M_RR(R->BC.B.h);break; case RR_C: M_RR(R->BC.B.l);break; +case RR_D: M_RR(R->DE.B.h);break; case RR_E: M_RR(R->DE.B.l);break; +case RR_H: M_RR(R->HL.B.h);break; case RR_L: M_RR(R->HL.B.l);break; +case RR_xHL: I=RdZ80(R->HL.W);M_RR(I);WrZ80(R->HL.W,I);break; +case RR_A: M_RR(R->AF.B.h);break; + +case SLA_B: M_SLA(R->BC.B.h);break; case SLA_C: M_SLA(R->BC.B.l);break; +case SLA_D: M_SLA(R->DE.B.h);break; case SLA_E: M_SLA(R->DE.B.l);break; +case SLA_H: M_SLA(R->HL.B.h);break; case SLA_L: M_SLA(R->HL.B.l);break; +case SLA_xHL: I=RdZ80(R->HL.W);M_SLA(I);WrZ80(R->HL.W,I);break; +case SLA_A: M_SLA(R->AF.B.h);break; + +case SRA_B: M_SRA(R->BC.B.h);break; case SRA_C: M_SRA(R->BC.B.l);break; +case SRA_D: M_SRA(R->DE.B.h);break; case SRA_E: M_SRA(R->DE.B.l);break; +case SRA_H: M_SRA(R->HL.B.h);break; case SRA_L: M_SRA(R->HL.B.l);break; +case SRA_xHL: I=RdZ80(R->HL.W);M_SRA(I);WrZ80(R->HL.W,I);break; +case SRA_A: M_SRA(R->AF.B.h);break; + +case SLL_B: M_SLL(R->BC.B.h);break; case SLL_C: M_SLL(R->BC.B.l);break; +case SLL_D: M_SLL(R->DE.B.h);break; case SLL_E: M_SLL(R->DE.B.l);break; +case SLL_H: M_SLL(R->HL.B.h);break; case SLL_L: M_SLL(R->HL.B.l);break; +case SLL_xHL: I=RdZ80(R->HL.W);M_SLL(I);WrZ80(R->HL.W,I);break; +case SLL_A: M_SLL(R->AF.B.h);break; + +case SRL_B: M_SRL(R->BC.B.h);break; case SRL_C: M_SRL(R->BC.B.l);break; +case SRL_D: M_SRL(R->DE.B.h);break; case SRL_E: M_SRL(R->DE.B.l);break; +case SRL_H: M_SRL(R->HL.B.h);break; case SRL_L: M_SRL(R->HL.B.l);break; +case SRL_xHL: I=RdZ80(R->HL.W);M_SRL(I);WrZ80(R->HL.W,I);break; +case SRL_A: M_SRL(R->AF.B.h);break; + +case BIT0_B: M_BIT(0,R->BC.B.h);break; case BIT0_C: M_BIT(0,R->BC.B.l);break; +case BIT0_D: M_BIT(0,R->DE.B.h);break; case BIT0_E: M_BIT(0,R->DE.B.l);break; +case BIT0_H: M_BIT(0,R->HL.B.h);break; case BIT0_L: M_BIT(0,R->HL.B.l);break; +case BIT0_xHL: I=RdZ80(R->HL.W);M_BIT(0,I);break; +case BIT0_A: M_BIT(0,R->AF.B.h);break; + +case BIT1_B: M_BIT(1,R->BC.B.h);break; case BIT1_C: M_BIT(1,R->BC.B.l);break; +case BIT1_D: M_BIT(1,R->DE.B.h);break; case BIT1_E: M_BIT(1,R->DE.B.l);break; +case BIT1_H: M_BIT(1,R->HL.B.h);break; case BIT1_L: M_BIT(1,R->HL.B.l);break; +case BIT1_xHL: I=RdZ80(R->HL.W);M_BIT(1,I);break; +case BIT1_A: M_BIT(1,R->AF.B.h);break; + +case BIT2_B: M_BIT(2,R->BC.B.h);break; case BIT2_C: M_BIT(2,R->BC.B.l);break; +case BIT2_D: M_BIT(2,R->DE.B.h);break; case BIT2_E: M_BIT(2,R->DE.B.l);break; +case BIT2_H: M_BIT(2,R->HL.B.h);break; case BIT2_L: M_BIT(2,R->HL.B.l);break; +case BIT2_xHL: I=RdZ80(R->HL.W);M_BIT(2,I);break; +case BIT2_A: M_BIT(2,R->AF.B.h);break; + +case BIT3_B: M_BIT(3,R->BC.B.h);break; case BIT3_C: M_BIT(3,R->BC.B.l);break; +case BIT3_D: M_BIT(3,R->DE.B.h);break; case BIT3_E: M_BIT(3,R->DE.B.l);break; +case BIT3_H: M_BIT(3,R->HL.B.h);break; case BIT3_L: M_BIT(3,R->HL.B.l);break; +case BIT3_xHL: I=RdZ80(R->HL.W);M_BIT(3,I);break; +case BIT3_A: M_BIT(3,R->AF.B.h);break; + +case BIT4_B: M_BIT(4,R->BC.B.h);break; case BIT4_C: M_BIT(4,R->BC.B.l);break; +case BIT4_D: M_BIT(4,R->DE.B.h);break; case BIT4_E: M_BIT(4,R->DE.B.l);break; +case BIT4_H: M_BIT(4,R->HL.B.h);break; case BIT4_L: M_BIT(4,R->HL.B.l);break; +case BIT4_xHL: I=RdZ80(R->HL.W);M_BIT(4,I);break; +case BIT4_A: M_BIT(4,R->AF.B.h);break; + +case BIT5_B: M_BIT(5,R->BC.B.h);break; case BIT5_C: M_BIT(5,R->BC.B.l);break; +case BIT5_D: M_BIT(5,R->DE.B.h);break; case BIT5_E: M_BIT(5,R->DE.B.l);break; +case BIT5_H: M_BIT(5,R->HL.B.h);break; case BIT5_L: M_BIT(5,R->HL.B.l);break; +case BIT5_xHL: I=RdZ80(R->HL.W);M_BIT(5,I);break; +case BIT5_A: M_BIT(5,R->AF.B.h);break; + +case BIT6_B: M_BIT(6,R->BC.B.h);break; case BIT6_C: M_BIT(6,R->BC.B.l);break; +case BIT6_D: M_BIT(6,R->DE.B.h);break; case BIT6_E: M_BIT(6,R->DE.B.l);break; +case BIT6_H: M_BIT(6,R->HL.B.h);break; case BIT6_L: M_BIT(6,R->HL.B.l);break; +case BIT6_xHL: I=RdZ80(R->HL.W);M_BIT(6,I);break; +case BIT6_A: M_BIT(6,R->AF.B.h);break; + +case BIT7_B: M_BIT(7,R->BC.B.h);break; case BIT7_C: M_BIT(7,R->BC.B.l);break; +case BIT7_D: M_BIT(7,R->DE.B.h);break; case BIT7_E: M_BIT(7,R->DE.B.l);break; +case BIT7_H: M_BIT(7,R->HL.B.h);break; case BIT7_L: M_BIT(7,R->HL.B.l);break; +case BIT7_xHL: I=RdZ80(R->HL.W);M_BIT(7,I);break; +case BIT7_A: M_BIT(7,R->AF.B.h);break; + +case RES0_B: M_RES(0,R->BC.B.h);break; case RES0_C: M_RES(0,R->BC.B.l);break; +case RES0_D: M_RES(0,R->DE.B.h);break; case RES0_E: M_RES(0,R->DE.B.l);break; +case RES0_H: M_RES(0,R->HL.B.h);break; case RES0_L: M_RES(0,R->HL.B.l);break; +case RES0_xHL: I=RdZ80(R->HL.W);M_RES(0,I);WrZ80(R->HL.W,I);break; +case RES0_A: M_RES(0,R->AF.B.h);break; + +case RES1_B: M_RES(1,R->BC.B.h);break; case RES1_C: M_RES(1,R->BC.B.l);break; +case RES1_D: M_RES(1,R->DE.B.h);break; case RES1_E: M_RES(1,R->DE.B.l);break; +case RES1_H: M_RES(1,R->HL.B.h);break; case RES1_L: M_RES(1,R->HL.B.l);break; +case RES1_xHL: I=RdZ80(R->HL.W);M_RES(1,I);WrZ80(R->HL.W,I);break; +case RES1_A: M_RES(1,R->AF.B.h);break; + +case RES2_B: M_RES(2,R->BC.B.h);break; case RES2_C: M_RES(2,R->BC.B.l);break; +case RES2_D: M_RES(2,R->DE.B.h);break; case RES2_E: M_RES(2,R->DE.B.l);break; +case RES2_H: M_RES(2,R->HL.B.h);break; case RES2_L: M_RES(2,R->HL.B.l);break; +case RES2_xHL: I=RdZ80(R->HL.W);M_RES(2,I);WrZ80(R->HL.W,I);break; +case RES2_A: M_RES(2,R->AF.B.h);break; + +case RES3_B: M_RES(3,R->BC.B.h);break; case RES3_C: M_RES(3,R->BC.B.l);break; +case RES3_D: M_RES(3,R->DE.B.h);break; case RES3_E: M_RES(3,R->DE.B.l);break; +case RES3_H: M_RES(3,R->HL.B.h);break; case RES3_L: M_RES(3,R->HL.B.l);break; +case RES3_xHL: I=RdZ80(R->HL.W);M_RES(3,I);WrZ80(R->HL.W,I);break; +case RES3_A: M_RES(3,R->AF.B.h);break; + +case RES4_B: M_RES(4,R->BC.B.h);break; case RES4_C: M_RES(4,R->BC.B.l);break; +case RES4_D: M_RES(4,R->DE.B.h);break; case RES4_E: M_RES(4,R->DE.B.l);break; +case RES4_H: M_RES(4,R->HL.B.h);break; case RES4_L: M_RES(4,R->HL.B.l);break; +case RES4_xHL: I=RdZ80(R->HL.W);M_RES(4,I);WrZ80(R->HL.W,I);break; +case RES4_A: M_RES(4,R->AF.B.h);break; + +case RES5_B: M_RES(5,R->BC.B.h);break; case RES5_C: M_RES(5,R->BC.B.l);break; +case RES5_D: M_RES(5,R->DE.B.h);break; case RES5_E: M_RES(5,R->DE.B.l);break; +case RES5_H: M_RES(5,R->HL.B.h);break; case RES5_L: M_RES(5,R->HL.B.l);break; +case RES5_xHL: I=RdZ80(R->HL.W);M_RES(5,I);WrZ80(R->HL.W,I);break; +case RES5_A: M_RES(5,R->AF.B.h);break; + +case RES6_B: M_RES(6,R->BC.B.h);break; case RES6_C: M_RES(6,R->BC.B.l);break; +case RES6_D: M_RES(6,R->DE.B.h);break; case RES6_E: M_RES(6,R->DE.B.l);break; +case RES6_H: M_RES(6,R->HL.B.h);break; case RES6_L: M_RES(6,R->HL.B.l);break; +case RES6_xHL: I=RdZ80(R->HL.W);M_RES(6,I);WrZ80(R->HL.W,I);break; +case RES6_A: M_RES(6,R->AF.B.h);break; + +case RES7_B: M_RES(7,R->BC.B.h);break; case RES7_C: M_RES(7,R->BC.B.l);break; +case RES7_D: M_RES(7,R->DE.B.h);break; case RES7_E: M_RES(7,R->DE.B.l);break; +case RES7_H: M_RES(7,R->HL.B.h);break; case RES7_L: M_RES(7,R->HL.B.l);break; +case RES7_xHL: I=RdZ80(R->HL.W);M_RES(7,I);WrZ80(R->HL.W,I);break; +case RES7_A: M_RES(7,R->AF.B.h);break; + +case SET0_B: M_SET(0,R->BC.B.h);break; case SET0_C: M_SET(0,R->BC.B.l);break; +case SET0_D: M_SET(0,R->DE.B.h);break; case SET0_E: M_SET(0,R->DE.B.l);break; +case SET0_H: M_SET(0,R->HL.B.h);break; case SET0_L: M_SET(0,R->HL.B.l);break; +case SET0_xHL: I=RdZ80(R->HL.W);M_SET(0,I);WrZ80(R->HL.W,I);break; +case SET0_A: M_SET(0,R->AF.B.h);break; + +case SET1_B: M_SET(1,R->BC.B.h);break; case SET1_C: M_SET(1,R->BC.B.l);break; +case SET1_D: M_SET(1,R->DE.B.h);break; case SET1_E: M_SET(1,R->DE.B.l);break; +case SET1_H: M_SET(1,R->HL.B.h);break; case SET1_L: M_SET(1,R->HL.B.l);break; +case SET1_xHL: I=RdZ80(R->HL.W);M_SET(1,I);WrZ80(R->HL.W,I);break; +case SET1_A: M_SET(1,R->AF.B.h);break; + +case SET2_B: M_SET(2,R->BC.B.h);break; case SET2_C: M_SET(2,R->BC.B.l);break; +case SET2_D: M_SET(2,R->DE.B.h);break; case SET2_E: M_SET(2,R->DE.B.l);break; +case SET2_H: M_SET(2,R->HL.B.h);break; case SET2_L: M_SET(2,R->HL.B.l);break; +case SET2_xHL: I=RdZ80(R->HL.W);M_SET(2,I);WrZ80(R->HL.W,I);break; +case SET2_A: M_SET(2,R->AF.B.h);break; + +case SET3_B: M_SET(3,R->BC.B.h);break; case SET3_C: M_SET(3,R->BC.B.l);break; +case SET3_D: M_SET(3,R->DE.B.h);break; case SET3_E: M_SET(3,R->DE.B.l);break; +case SET3_H: M_SET(3,R->HL.B.h);break; case SET3_L: M_SET(3,R->HL.B.l);break; +case SET3_xHL: I=RdZ80(R->HL.W);M_SET(3,I);WrZ80(R->HL.W,I);break; +case SET3_A: M_SET(3,R->AF.B.h);break; + +case SET4_B: M_SET(4,R->BC.B.h);break; case SET4_C: M_SET(4,R->BC.B.l);break; +case SET4_D: M_SET(4,R->DE.B.h);break; case SET4_E: M_SET(4,R->DE.B.l);break; +case SET4_H: M_SET(4,R->HL.B.h);break; case SET4_L: M_SET(4,R->HL.B.l);break; +case SET4_xHL: I=RdZ80(R->HL.W);M_SET(4,I);WrZ80(R->HL.W,I);break; +case SET4_A: M_SET(4,R->AF.B.h);break; + +case SET5_B: M_SET(5,R->BC.B.h);break; case SET5_C: M_SET(5,R->BC.B.l);break; +case SET5_D: M_SET(5,R->DE.B.h);break; case SET5_E: M_SET(5,R->DE.B.l);break; +case SET5_H: M_SET(5,R->HL.B.h);break; case SET5_L: M_SET(5,R->HL.B.l);break; +case SET5_xHL: I=RdZ80(R->HL.W);M_SET(5,I);WrZ80(R->HL.W,I);break; +case SET5_A: M_SET(5,R->AF.B.h);break; + +case SET6_B: M_SET(6,R->BC.B.h);break; case SET6_C: M_SET(6,R->BC.B.l);break; +case SET6_D: M_SET(6,R->DE.B.h);break; case SET6_E: M_SET(6,R->DE.B.l);break; +case SET6_H: M_SET(6,R->HL.B.h);break; case SET6_L: M_SET(6,R->HL.B.l);break; +case SET6_xHL: I=RdZ80(R->HL.W);M_SET(6,I);WrZ80(R->HL.W,I);break; +case SET6_A: M_SET(6,R->AF.B.h);break; + +case SET7_B: M_SET(7,R->BC.B.h);break; case SET7_C: M_SET(7,R->BC.B.l);break; +case SET7_D: M_SET(7,R->DE.B.h);break; case SET7_E: M_SET(7,R->DE.B.l);break; +case SET7_H: M_SET(7,R->HL.B.h);break; case SET7_L: M_SET(7,R->HL.B.l);break; +case SET7_xHL: I=RdZ80(R->HL.W);M_SET(7,I);WrZ80(R->HL.W,I);break; +case SET7_A: M_SET(7,R->AF.B.h);break; diff --git a/MCUME_pico/picospeccy/CodesED.h b/MCUME_pico/picospeccy/CodesED.h new file mode 100755 index 0000000..e6deae5 --- /dev/null +++ b/MCUME_pico/picospeccy/CodesED.h @@ -0,0 +1,304 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** CodesED.h **/ +/** **/ +/** This file contains implementation for the ED table of **/ +/** Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +/** This is a special patch for emulating BIOS calls: ********/ +case DB_FE: PatchZ80(R);break; +/*************************************************************/ + +case ADC_HL_BC: M_ADCW(BC);break; +case ADC_HL_DE: M_ADCW(DE);break; +case ADC_HL_HL: M_ADCW(HL);break; +case ADC_HL_SP: M_ADCW(SP);break; + +case SBC_HL_BC: M_SBCW(BC);break; +case SBC_HL_DE: M_SBCW(DE);break; +case SBC_HL_HL: M_SBCW(HL);break; +case SBC_HL_SP: M_SBCW(SP);break; + +case LD_xWORDe_HL: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W++,R->HL.B.l); + WrZ80(J.W,R->HL.B.h); + break; +case LD_xWORDe_DE: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W++,R->DE.B.l); + WrZ80(J.W,R->DE.B.h); + break; +case LD_xWORDe_BC: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W++,R->BC.B.l); + WrZ80(J.W,R->BC.B.h); + break; +case LD_xWORDe_SP: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W++,R->SP.B.l); + WrZ80(J.W,R->SP.B.h); + break; + +case LD_HL_xWORDe: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->HL.B.l=RdZ80(J.W++); + R->HL.B.h=RdZ80(J.W); + break; +case LD_DE_xWORDe: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->DE.B.l=RdZ80(J.W++); + R->DE.B.h=RdZ80(J.W); + break; +case LD_BC_xWORDe: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->BC.B.l=RdZ80(J.W++); + R->BC.B.h=RdZ80(J.W); + break; +case LD_SP_xWORDe: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->SP.B.l=RdZ80(J.W++); + R->SP.B.h=RdZ80(J.W); + break; + +case RRD: + I=RdZ80(R->HL.W); + J.B.l=(I>>4)|(R->AF.B.h<<4); + WrZ80(R->HL.W,J.B.l); + R->AF.B.h=(I&0x0F)|(R->AF.B.h&0xF0); + R->AF.B.l=PZSTable[R->AF.B.h]|(R->AF.B.l&C_FLAG); + break; +case RLD: + I=RdZ80(R->HL.W); + J.B.l=(I<<4)|(R->AF.B.h&0x0F); + WrZ80(R->HL.W,J.B.l); + R->AF.B.h=(I>>4)|(R->AF.B.h&0xF0); + R->AF.B.l=PZSTable[R->AF.B.h]|(R->AF.B.l&C_FLAG); + break; + +case LD_A_I: + R->AF.B.h=R->I; + R->AF.B.l=(R->AF.B.l&C_FLAG)|(R->IFF&IFF_2? P_FLAG:0)|ZSTable[R->AF.B.h]; + break; + +case LD_A_R: + R->R++; + R->AF.B.h=(byte)(R->R-R->ICount); + R->AF.B.l=(R->AF.B.l&C_FLAG)|(R->IFF&IFF_2? P_FLAG:0)|ZSTable[R->AF.B.h]; + break; + +case LD_I_A: R->I=R->AF.B.h;break; +case LD_R_A: break; + +case IM_0: R->IFF&=~(IFF_IM1|IFF_IM2);break; +case IM_1: R->IFF=(R->IFF&~IFF_IM2)|IFF_IM1;break; +case IM_2: R->IFF=(R->IFF&~IFF_IM1)|IFF_IM2;break; + +case RETI: +case RETN: if(R->IFF&IFF_2) R->IFF|=IFF_1; else R->IFF&=~IFF_1; + M_RET;break; + +case NEG: I=R->AF.B.h;R->AF.B.h=0;M_SUB(I);break; + +case IN_B_xC: M_IN(R->BC.B.h);break; +case IN_C_xC: M_IN(R->BC.B.l);break; +case IN_D_xC: M_IN(R->DE.B.h);break; +case IN_E_xC: M_IN(R->DE.B.l);break; +case IN_H_xC: M_IN(R->HL.B.h);break; +case IN_L_xC: M_IN(R->HL.B.l);break; +case IN_A_xC: M_IN(R->AF.B.h);break; +case IN_F_xC: M_IN(J.B.l);break; + +case OUT_xC_B: OutZ80(R->BC.W,R->BC.B.h);break; +case OUT_xC_C: OutZ80(R->BC.W,R->BC.B.l);break; +case OUT_xC_D: OutZ80(R->BC.W,R->DE.B.h);break; +case OUT_xC_E: OutZ80(R->BC.W,R->DE.B.l);break; +case OUT_xC_H: OutZ80(R->BC.W,R->HL.B.h);break; +case OUT_xC_L: OutZ80(R->BC.W,R->HL.B.l);break; +case OUT_xC_A: OutZ80(R->BC.W,R->AF.B.h);break; + +case INI: + WrZ80(R->HL.W++,InZ80(R->BC.W)); + --R->BC.B.h; + R->AF.B.l=N_FLAG|(R->BC.B.h? 0:Z_FLAG); + break; + +case INIR: + do + { + WrZ80(R->HL.W++,InZ80(R->BC.W)); + --R->BC.B.h;R->ICount-=21; + } + while(R->BC.B.h&&(R->ICount>0)); + if(R->BC.B.h) { R->AF.B.l=N_FLAG;R->PC.W-=2; } + else { R->AF.B.l=Z_FLAG|N_FLAG;R->ICount+=5; } + break; + +case IND: + WrZ80(R->HL.W--,InZ80(R->BC.W)); + --R->BC.B.h; + R->AF.B.l=N_FLAG|(R->BC.B.h? 0:Z_FLAG); + break; + +case INDR: + do + { + WrZ80(R->HL.W--,InZ80(R->BC.W)); + --R->BC.B.h;R->ICount-=21; + } + while(R->BC.B.h&&(R->ICount>0)); + if(R->BC.B.h) { R->AF.B.l=N_FLAG;R->PC.W-=2; } + else { R->AF.B.l=Z_FLAG|N_FLAG;R->ICount+=5; } + break; + +case OUTI: + --R->BC.B.h; + I=RdZ80(R->HL.W++); + OutZ80(R->BC.W,I); + R->AF.B.l=N_FLAG|(R->BC.B.h? 0:Z_FLAG)|(R->HL.B.l+I>255? (C_FLAG|H_FLAG):0); + break; + +case OTIR: + do + { + --R->BC.B.h; + I=RdZ80(R->HL.W++); + OutZ80(R->BC.W,I); + R->ICount-=21; + } + while(R->BC.B.h&&(R->ICount>0)); + if(R->BC.B.h) + { + R->AF.B.l=N_FLAG|(R->HL.B.l+I>255? (C_FLAG|H_FLAG):0); + R->PC.W-=2; + } + else + { + R->AF.B.l=Z_FLAG|N_FLAG|(R->HL.B.l+I>255? (C_FLAG|H_FLAG):0); + R->ICount+=5; + } + break; + +case OUTD: + --R->BC.B.h; + I=RdZ80(R->HL.W--); + OutZ80(R->BC.W,I); + R->AF.B.l=N_FLAG|(R->BC.B.h? 0:Z_FLAG)|(R->HL.B.l+I>255? (C_FLAG|H_FLAG):0); + break; + +case OTDR: + do + { + --R->BC.B.h; + I=RdZ80(R->HL.W--); + OutZ80(R->BC.W,I); + R->ICount-=21; + } + while(R->BC.B.h&&(R->ICount>0)); + if(R->BC.B.h) + { + R->AF.B.l=N_FLAG|(R->HL.B.l+I>255? (C_FLAG|H_FLAG):0); + R->PC.W-=2; + } + else + { + R->AF.B.l=Z_FLAG|N_FLAG|(R->HL.B.l+I>255? (C_FLAG|H_FLAG):0); + R->ICount+=5; + } + break; + +case LDI: + WrZ80(R->DE.W++,RdZ80(R->HL.W++)); + --R->BC.W; + R->AF.B.l=(R->AF.B.l&~(N_FLAG|H_FLAG|P_FLAG))|(R->BC.W? P_FLAG:0); + break; + +case LDIR: + do + { + WrZ80(R->DE.W++,RdZ80(R->HL.W++)); + --R->BC.W;R->ICount-=21; + } + while(R->BC.W&&(R->ICount>0)); + R->AF.B.l&=~(N_FLAG|H_FLAG|P_FLAG); + if(R->BC.W) { R->AF.B.l|=N_FLAG;R->PC.W-=2; } + else R->ICount+=5; + break; + +case LDD: + WrZ80(R->DE.W--,RdZ80(R->HL.W--)); + --R->BC.W; + R->AF.B.l=(R->AF.B.l&~(N_FLAG|H_FLAG|P_FLAG))|(R->BC.W? P_FLAG:0); + break; + +case LDDR: + do + { + WrZ80(R->DE.W--,RdZ80(R->HL.W--)); + --R->BC.W;R->ICount-=21; + } + while(R->BC.W&&(R->ICount>0)); + R->AF.B.l&=~(N_FLAG|H_FLAG|P_FLAG); + if(R->BC.W) { R->AF.B.l|=N_FLAG;R->PC.W-=2; } + else R->ICount+=5; + break; + +case CPI: + I=RdZ80(R->HL.W++); + J.B.l=R->AF.B.h-I; + --R->BC.W; + R->AF.B.l = + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[J.B.l]| + ((R->AF.B.h^I^J.B.l)&H_FLAG)|(R->BC.W? P_FLAG:0); + break; + +case CPIR: + do + { + I=RdZ80(R->HL.W++); + J.B.l=R->AF.B.h-I; + --R->BC.W;R->ICount-=21; + } + while(R->BC.W&&J.B.l&&(R->ICount>0)); + R->AF.B.l = + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[J.B.l]| + ((R->AF.B.h^I^J.B.l)&H_FLAG)|(R->BC.W? P_FLAG:0); + if(R->BC.W&&J.B.l) R->PC.W-=2; else R->ICount+=5; + break; + +case CPD: + I=RdZ80(R->HL.W--); + J.B.l=R->AF.B.h-I; + --R->BC.W; + R->AF.B.l = + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[J.B.l]| + ((R->AF.B.h^I^J.B.l)&H_FLAG)|(R->BC.W? P_FLAG:0); + break; + +case CPDR: + do + { + I=RdZ80(R->HL.W--); + J.B.l=R->AF.B.h-I; + --R->BC.W;R->ICount-=21; + } + while(R->BC.W&&J.B.l); + R->AF.B.l = + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[J.B.l]| + ((R->AF.B.h^I^J.B.l)&H_FLAG)|(R->BC.W? P_FLAG:0); + if(R->BC.W&&J.B.l) R->PC.W-=2; else R->ICount+=5; + break; diff --git a/MCUME_pico/picospeccy/CodesXCB.h b/MCUME_pico/picospeccy/CodesXCB.h new file mode 100755 index 0000000..d0873ce --- /dev/null +++ b/MCUME_pico/picospeccy/CodesXCB.h @@ -0,0 +1,64 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** CodesXCB.h **/ +/** **/ +/** This file contains implementation for FD/DD-CB tables **/ +/** of Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +case RLC_xHL: I=RdZ80(J.W);M_RLC(I);WrZ80(J.W,I);break; +case RRC_xHL: I=RdZ80(J.W);M_RRC(I);WrZ80(J.W,I);break; +case RL_xHL: I=RdZ80(J.W);M_RL(I);WrZ80(J.W,I);break; +case RR_xHL: I=RdZ80(J.W);M_RR(I);WrZ80(J.W,I);break; +case SLA_xHL: I=RdZ80(J.W);M_SLA(I);WrZ80(J.W,I);break; +case SRA_xHL: I=RdZ80(J.W);M_SRA(I);WrZ80(J.W,I);break; +case SLL_xHL: I=RdZ80(J.W);M_SLL(I);WrZ80(J.W,I);break; +case SRL_xHL: I=RdZ80(J.W);M_SRL(I);WrZ80(J.W,I);break; + +case BIT0_B: case BIT0_C: case BIT0_D: case BIT0_E: +case BIT0_H: case BIT0_L: case BIT0_A: +case BIT0_xHL: I=RdZ80(J.W);M_BIT(0,I);break; +case BIT1_B: case BIT1_C: case BIT1_D: case BIT1_E: +case BIT1_H: case BIT1_L: case BIT1_A: +case BIT1_xHL: I=RdZ80(J.W);M_BIT(1,I);break; +case BIT2_B: case BIT2_C: case BIT2_D: case BIT2_E: +case BIT2_H: case BIT2_L: case BIT2_A: +case BIT2_xHL: I=RdZ80(J.W);M_BIT(2,I);break; +case BIT3_B: case BIT3_C: case BIT3_D: case BIT3_E: +case BIT3_H: case BIT3_L: case BIT3_A: +case BIT3_xHL: I=RdZ80(J.W);M_BIT(3,I);break; +case BIT4_B: case BIT4_C: case BIT4_D: case BIT4_E: +case BIT4_H: case BIT4_L: case BIT4_A: +case BIT4_xHL: I=RdZ80(J.W);M_BIT(4,I);break; +case BIT5_B: case BIT5_C: case BIT5_D: case BIT5_E: +case BIT5_H: case BIT5_L: case BIT5_A: +case BIT5_xHL: I=RdZ80(J.W);M_BIT(5,I);break; +case BIT6_B: case BIT6_C: case BIT6_D: case BIT6_E: +case BIT6_H: case BIT6_L: case BIT6_A: +case BIT6_xHL: I=RdZ80(J.W);M_BIT(6,I);break; +case BIT7_B: case BIT7_C: case BIT7_D: case BIT7_E: +case BIT7_H: case BIT7_L: case BIT7_A: +case BIT7_xHL: I=RdZ80(J.W);M_BIT(7,I);break; + +case RES0_xHL: I=RdZ80(J.W);M_RES(0,I);WrZ80(J.W,I);break; +case RES1_xHL: I=RdZ80(J.W);M_RES(1,I);WrZ80(J.W,I);break; +case RES2_xHL: I=RdZ80(J.W);M_RES(2,I);WrZ80(J.W,I);break; +case RES3_xHL: I=RdZ80(J.W);M_RES(3,I);WrZ80(J.W,I);break; +case RES4_xHL: I=RdZ80(J.W);M_RES(4,I);WrZ80(J.W,I);break; +case RES5_xHL: I=RdZ80(J.W);M_RES(5,I);WrZ80(J.W,I);break; +case RES6_xHL: I=RdZ80(J.W);M_RES(6,I);WrZ80(J.W,I);break; +case RES7_xHL: I=RdZ80(J.W);M_RES(7,I);WrZ80(J.W,I);break; + +case SET0_xHL: I=RdZ80(J.W);M_SET(0,I);WrZ80(J.W,I);break; +case SET1_xHL: I=RdZ80(J.W);M_SET(1,I);WrZ80(J.W,I);break; +case SET2_xHL: I=RdZ80(J.W);M_SET(2,I);WrZ80(J.W,I);break; +case SET3_xHL: I=RdZ80(J.W);M_SET(3,I);WrZ80(J.W,I);break; +case SET4_xHL: I=RdZ80(J.W);M_SET(4,I);WrZ80(J.W,I);break; +case SET5_xHL: I=RdZ80(J.W);M_SET(5,I);WrZ80(J.W,I);break; +case SET6_xHL: I=RdZ80(J.W);M_SET(6,I);WrZ80(J.W,I);break; +case SET7_xHL: I=RdZ80(J.W);M_SET(7,I);WrZ80(J.W,I);break; diff --git a/MCUME_pico/picospeccy/CodesXX.h b/MCUME_pico/picospeccy/CodesXX.h new file mode 100755 index 0000000..970b30e --- /dev/null +++ b/MCUME_pico/picospeccy/CodesXX.h @@ -0,0 +1,396 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** CodesXX.h **/ +/** **/ +/** This file contains implementation for FD/DD tables of **/ +/** Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +case JR_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W++; else { R->ICount-=5;M_JR; } break; +case JR_NC: if(R->AF.B.l&C_FLAG) R->PC.W++; else { R->ICount-=5;M_JR; } break; +case JR_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=5;M_JR; } else R->PC.W++; break; +case JR_C: if(R->AF.B.l&C_FLAG) { R->ICount-=5;M_JR; } else R->PC.W++; break; + +case JP_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_Z: if(R->AF.B.l&Z_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_C: if(R->AF.B.l&C_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_PE: if(R->AF.B.l&P_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_M: if(R->AF.B.l&S_FLAG) { M_JP; } else R->PC.W+=2; break; + +case RET_NZ: if(!(R->AF.B.l&Z_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_NC: if(!(R->AF.B.l&C_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_PO: if(!(R->AF.B.l&P_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_P: if(!(R->AF.B.l&S_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=6;M_RET; } break; +case RET_C: if(R->AF.B.l&C_FLAG) { R->ICount-=6;M_RET; } break; +case RET_PE: if(R->AF.B.l&P_FLAG) { R->ICount-=6;M_RET; } break; +case RET_M: if(R->AF.B.l&S_FLAG) { R->ICount-=6;M_RET; } break; + +case CALL_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_C: if(R->AF.B.l&C_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_PE: if(R->AF.B.l&P_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_M: if(R->AF.B.l&S_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; + +case ADD_B: M_ADD(R->BC.B.h);break; +case ADD_C: M_ADD(R->BC.B.l);break; +case ADD_D: M_ADD(R->DE.B.h);break; +case ADD_E: M_ADD(R->DE.B.l);break; +case ADD_H: M_ADD(R->XX.B.h);break; +case ADD_L: M_ADD(R->XX.B.l);break; +case ADD_A: M_ADD(R->AF.B.h);break; +case ADD_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_ADD(I);break; +case ADD_BYTE: I=OpZ80(R->PC.W++);M_ADD(I);break; + +case SUB_B: M_SUB(R->BC.B.h);break; +case SUB_C: M_SUB(R->BC.B.l);break; +case SUB_D: M_SUB(R->DE.B.h);break; +case SUB_E: M_SUB(R->DE.B.l);break; +case SUB_H: M_SUB(R->XX.B.h);break; +case SUB_L: M_SUB(R->XX.B.l);break; +case SUB_A: R->AF.B.h=0;R->AF.B.l=N_FLAG|Z_FLAG;break; +case SUB_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_SUB(I);break; +case SUB_BYTE: I=OpZ80(R->PC.W++);M_SUB(I);break; + +case AND_B: M_AND(R->BC.B.h);break; +case AND_C: M_AND(R->BC.B.l);break; +case AND_D: M_AND(R->DE.B.h);break; +case AND_E: M_AND(R->DE.B.l);break; +case AND_H: M_AND(R->XX.B.h);break; +case AND_L: M_AND(R->XX.B.l);break; +case AND_A: M_AND(R->AF.B.h);break; +case AND_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_AND(I);break; +case AND_BYTE: I=OpZ80(R->PC.W++);M_AND(I);break; + +case OR_B: M_OR(R->BC.B.h);break; +case OR_C: M_OR(R->BC.B.l);break; +case OR_D: M_OR(R->DE.B.h);break; +case OR_E: M_OR(R->DE.B.l);break; +case OR_H: M_OR(R->XX.B.h);break; +case OR_L: M_OR(R->XX.B.l);break; +case OR_A: M_OR(R->AF.B.h);break; +case OR_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_OR(I);break; +case OR_BYTE: I=OpZ80(R->PC.W++);M_OR(I);break; + +case ADC_B: M_ADC(R->BC.B.h);break; +case ADC_C: M_ADC(R->BC.B.l);break; +case ADC_D: M_ADC(R->DE.B.h);break; +case ADC_E: M_ADC(R->DE.B.l);break; +case ADC_H: M_ADC(R->XX.B.h);break; +case ADC_L: M_ADC(R->XX.B.l);break; +case ADC_A: M_ADC(R->AF.B.h);break; +case ADC_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_ADC(I);break; +case ADC_BYTE: I=OpZ80(R->PC.W++);M_ADC(I);break; + +case SBC_B: M_SBC(R->BC.B.h);break; +case SBC_C: M_SBC(R->BC.B.l);break; +case SBC_D: M_SBC(R->DE.B.h);break; +case SBC_E: M_SBC(R->DE.B.l);break; +case SBC_H: M_SBC(R->XX.B.h);break; +case SBC_L: M_SBC(R->XX.B.l);break; +case SBC_A: M_SBC(R->AF.B.h);break; +case SBC_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_SBC(I);break; +case SBC_BYTE: I=OpZ80(R->PC.W++);M_SBC(I);break; + +case XOR_B: M_XOR(R->BC.B.h);break; +case XOR_C: M_XOR(R->BC.B.l);break; +case XOR_D: M_XOR(R->DE.B.h);break; +case XOR_E: M_XOR(R->DE.B.l);break; +case XOR_H: M_XOR(R->XX.B.h);break; +case XOR_L: M_XOR(R->XX.B.l);break; +case XOR_A: R->AF.B.h=0;R->AF.B.l=P_FLAG|Z_FLAG;break; +case XOR_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_XOR(I);break; +case XOR_BYTE: I=OpZ80(R->PC.W++);M_XOR(I);break; + +case CP_B: M_CP(R->BC.B.h);break; +case CP_C: M_CP(R->BC.B.l);break; +case CP_D: M_CP(R->DE.B.h);break; +case CP_E: M_CP(R->DE.B.l);break; +case CP_H: M_CP(R->XX.B.h);break; +case CP_L: M_CP(R->XX.B.l);break; +case CP_A: R->AF.B.l=N_FLAG|Z_FLAG;break; +case CP_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_CP(I);break; +case CP_BYTE: I=OpZ80(R->PC.W++);M_CP(I);break; + +case LD_BC_WORD: M_LDWORD(BC);break; +case LD_DE_WORD: M_LDWORD(DE);break; +case LD_HL_WORD: M_LDWORD(XX);break; +case LD_SP_WORD: M_LDWORD(SP);break; + +case LD_PC_HL: R->PC.W=R->XX.W;JumpZ80(R->PC.W);break; +case LD_SP_HL: R->SP.W=R->XX.W;break; +case LD_A_xBC: R->AF.B.h=RdZ80(R->BC.W);break; +case LD_A_xDE: R->AF.B.h=RdZ80(R->DE.W);break; + +case ADD_HL_BC: M_ADDW(XX,BC);break; +case ADD_HL_DE: M_ADDW(XX,DE);break; +case ADD_HL_HL: M_ADDW(XX,XX);break; +case ADD_HL_SP: M_ADDW(XX,SP);break; + +case DEC_BC: R->BC.W--;break; +case DEC_DE: R->DE.W--;break; +case DEC_HL: R->XX.W--;break; +case DEC_SP: R->SP.W--;break; + +case INC_BC: R->BC.W++;break; +case INC_DE: R->DE.W++;break; +case INC_HL: R->XX.W++;break; +case INC_SP: R->SP.W++;break; + +case DEC_B: M_DEC(R->BC.B.h);break; +case DEC_C: M_DEC(R->BC.B.l);break; +case DEC_D: M_DEC(R->DE.B.h);break; +case DEC_E: M_DEC(R->DE.B.l);break; +case DEC_H: M_DEC(R->XX.B.h);break; +case DEC_L: M_DEC(R->XX.B.l);break; +case DEC_A: M_DEC(R->AF.B.h);break; +case DEC_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W));M_DEC(I); + WrZ80(R->XX.W+(offset)OpZ80(R->PC.W++),I); + break; + +case INC_B: M_INC(R->BC.B.h);break; +case INC_C: M_INC(R->BC.B.l);break; +case INC_D: M_INC(R->DE.B.h);break; +case INC_E: M_INC(R->DE.B.l);break; +case INC_H: M_INC(R->XX.B.h);break; +case INC_L: M_INC(R->XX.B.l);break; +case INC_A: M_INC(R->AF.B.h);break; +case INC_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W));M_INC(I); + WrZ80(R->XX.W+(offset)OpZ80(R->PC.W++),I); + break; + +case RLCA: + I=(R->AF.B.h&0x80? C_FLAG:0); + R->AF.B.h=(R->AF.B.h<<1)|I; + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RLA: + I=(R->AF.B.h&0x80? C_FLAG:0); + R->AF.B.h=(R->AF.B.h<<1)|(R->AF.B.l&C_FLAG); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RRCA: + I=R->AF.B.h&0x01; + R->AF.B.h=(R->AF.B.h>>1)|(I? 0x80:0); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RRA: + I=R->AF.B.h&0x01; + R->AF.B.h=(R->AF.B.h>>1)|(R->AF.B.l&C_FLAG? 0x80:0); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; + +case RST00: M_RST(0x0000);break; +case RST08: M_RST(0x0008);break; +case RST10: M_RST(0x0010);break; +case RST18: M_RST(0x0018);break; +case RST20: M_RST(0x0020);break; +case RST28: M_RST(0x0028);break; +case RST30: M_RST(0x0030);break; +case RST38: M_RST(0x0038);break; + +case PUSH_BC: M_PUSH(BC);break; +case PUSH_DE: M_PUSH(DE);break; +case PUSH_HL: M_PUSH(XX);break; +case PUSH_AF: M_PUSH(AF);break; + +case POP_BC: M_POP(BC);break; +case POP_DE: M_POP(DE);break; +case POP_HL: M_POP(XX);break; +case POP_AF: M_POP(AF);break; + +case DJNZ: if(--R->BC.B.h) { R->ICount-=5;M_JR; } else R->PC.W++;break; +case JP: M_JP;break; +case JR: M_JR;break; +case CALL: M_CALL;break; +case RET: M_RET;break; +case SCF: S(C_FLAG);R(N_FLAG|H_FLAG);break; +case CPL: R->AF.B.h=~R->AF.B.h;S(N_FLAG|H_FLAG);break; +case NOP: break; +case OUTA: I=OpZ80(R->PC.W++);OutZ80(I|(R->AF.W&0xFF00),R->AF.B.h);break; +case INA: I=OpZ80(R->PC.W++);R->AF.B.h=InZ80(I|(R->AF.W&0xFF00));break; + +case HALT: + R->PC.W--; + R->IFF|=IFF_HALT; + R->IBackup=0; + R->ICount=0; + break; + +case DI: + if(R->IFF&IFF_EI) R->ICount+=R->IBackup-1; + R->IFF&=~(IFF_1|IFF_2|IFF_EI); + break; + +case EI: + if(!(R->IFF&(IFF_1|IFF_EI))) + { + R->IFF|=IFF_2|IFF_EI; + R->IBackup=R->ICount; + R->ICount=1; + } + break; + +case CCF: + R->AF.B.l^=C_FLAG;R(N_FLAG|H_FLAG); + R->AF.B.l|=R->AF.B.l&C_FLAG? 0:H_FLAG; + break; + +case EXX: + J.W=R->BC.W;R->BC.W=R->BC1.W;R->BC1.W=J.W; + J.W=R->DE.W;R->DE.W=R->DE1.W;R->DE1.W=J.W; + J.W=R->HL.W;R->HL.W=R->HL1.W;R->HL1.W=J.W; + break; + +case EX_DE_HL: J.W=R->DE.W;R->DE.W=R->HL.W;R->HL.W=J.W;break; +case EX_AF_AF: J.W=R->AF.W;R->AF.W=R->AF1.W;R->AF1.W=J.W;break; + +case LD_B_B: R->BC.B.h=R->BC.B.h;break; +case LD_C_B: R->BC.B.l=R->BC.B.h;break; +case LD_D_B: R->DE.B.h=R->BC.B.h;break; +case LD_E_B: R->DE.B.l=R->BC.B.h;break; +case LD_H_B: R->XX.B.h=R->BC.B.h;break; +case LD_L_B: R->XX.B.l=R->BC.B.h;break; +case LD_A_B: R->AF.B.h=R->BC.B.h;break; +case LD_xHL_B: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->BC.B.h);break; + +case LD_B_C: R->BC.B.h=R->BC.B.l;break; +case LD_C_C: R->BC.B.l=R->BC.B.l;break; +case LD_D_C: R->DE.B.h=R->BC.B.l;break; +case LD_E_C: R->DE.B.l=R->BC.B.l;break; +case LD_H_C: R->XX.B.h=R->BC.B.l;break; +case LD_L_C: R->XX.B.l=R->BC.B.l;break; +case LD_A_C: R->AF.B.h=R->BC.B.l;break; +case LD_xHL_C: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->BC.B.l);break; + +case LD_B_D: R->BC.B.h=R->DE.B.h;break; +case LD_C_D: R->BC.B.l=R->DE.B.h;break; +case LD_D_D: R->DE.B.h=R->DE.B.h;break; +case LD_E_D: R->DE.B.l=R->DE.B.h;break; +case LD_H_D: R->XX.B.h=R->DE.B.h;break; +case LD_L_D: R->XX.B.l=R->DE.B.h;break; +case LD_A_D: R->AF.B.h=R->DE.B.h;break; +case LD_xHL_D: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->DE.B.h);break; + +case LD_B_E: R->BC.B.h=R->DE.B.l;break; +case LD_C_E: R->BC.B.l=R->DE.B.l;break; +case LD_D_E: R->DE.B.h=R->DE.B.l;break; +case LD_E_E: R->DE.B.l=R->DE.B.l;break; +case LD_H_E: R->XX.B.h=R->DE.B.l;break; +case LD_L_E: R->XX.B.l=R->DE.B.l;break; +case LD_A_E: R->AF.B.h=R->DE.B.l;break; +case LD_xHL_E: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->DE.B.l);break; + +case LD_B_H: R->BC.B.h=R->XX.B.h;break; +case LD_C_H: R->BC.B.l=R->XX.B.h;break; +case LD_D_H: R->DE.B.h=R->XX.B.h;break; +case LD_E_H: R->DE.B.l=R->XX.B.h;break; +case LD_H_H: R->XX.B.h=R->XX.B.h;break; +case LD_L_H: R->XX.B.l=R->XX.B.h;break; +case LD_A_H: R->AF.B.h=R->XX.B.h;break; +case LD_xHL_H: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->HL.B.h);break; + +case LD_B_L: R->BC.B.h=R->XX.B.l;break; +case LD_C_L: R->BC.B.l=R->XX.B.l;break; +case LD_D_L: R->DE.B.h=R->XX.B.l;break; +case LD_E_L: R->DE.B.l=R->XX.B.l;break; +case LD_H_L: R->XX.B.h=R->XX.B.l;break; +case LD_L_L: R->XX.B.l=R->XX.B.l;break; +case LD_A_L: R->AF.B.h=R->XX.B.l;break; +case LD_xHL_L: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->HL.B.l);break; + +case LD_B_A: R->BC.B.h=R->AF.B.h;break; +case LD_C_A: R->BC.B.l=R->AF.B.h;break; +case LD_D_A: R->DE.B.h=R->AF.B.h;break; +case LD_E_A: R->DE.B.l=R->AF.B.h;break; +case LD_H_A: R->XX.B.h=R->AF.B.h;break; +case LD_L_A: R->XX.B.l=R->AF.B.h;break; +case LD_A_A: R->AF.B.h=R->AF.B.h;break; +case LD_xHL_A: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->AF.B.h);break; + +case LD_xBC_A: WrZ80(R->BC.W,R->AF.B.h);break; +case LD_xDE_A: WrZ80(R->DE.W,R->AF.B.h);break; + +case LD_B_xHL: R->BC.B.h=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; +case LD_C_xHL: R->BC.B.l=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; +case LD_D_xHL: R->DE.B.h=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; +case LD_E_xHL: R->DE.B.l=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; +case LD_H_xHL: R->HL.B.h=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; +case LD_L_xHL: R->HL.B.l=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; +case LD_A_xHL: R->AF.B.h=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; + +case LD_B_BYTE: R->BC.B.h=OpZ80(R->PC.W++);break; +case LD_C_BYTE: R->BC.B.l=OpZ80(R->PC.W++);break; +case LD_D_BYTE: R->DE.B.h=OpZ80(R->PC.W++);break; +case LD_E_BYTE: R->DE.B.l=OpZ80(R->PC.W++);break; +case LD_H_BYTE: R->XX.B.h=OpZ80(R->PC.W++);break; +case LD_L_BYTE: R->XX.B.l=OpZ80(R->PC.W++);break; +case LD_A_BYTE: R->AF.B.h=OpZ80(R->PC.W++);break; +case LD_xHL_BYTE: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,OpZ80(R->PC.W++));break; + +case LD_xWORD_HL: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W++,R->XX.B.l); + WrZ80(J.W,R->XX.B.h); + break; + +case LD_HL_xWORD: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->XX.B.l=RdZ80(J.W++); + R->XX.B.h=RdZ80(J.W); + break; + +case LD_A_xWORD: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->AF.B.h=RdZ80(J.W); + break; + +case LD_xWORD_A: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W,R->AF.B.h); + break; + +case EX_HL_xSP: + J.B.l=RdZ80(R->SP.W);WrZ80(R->SP.W++,R->XX.B.l); + J.B.h=RdZ80(R->SP.W);WrZ80(R->SP.W--,R->XX.B.h); + R->XX.W=J.W; + break; + +case DAA: + J.W=R->AF.B.h; + if(R->AF.B.l&C_FLAG) J.W|=256; + if(R->AF.B.l&H_FLAG) J.W|=512; + if(R->AF.B.l&N_FLAG) J.W|=1024; + R->AF.W=DAATable[J.W]; + break; diff --git a/MCUME_pico/picospeccy/Tables.h b/MCUME_pico/picospeccy/Tables.h new file mode 100755 index 0000000..ba1ebee --- /dev/null +++ b/MCUME_pico/picospeccy/Tables.h @@ -0,0 +1,447 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** Tables.h **/ +/** **/ +/** This file contains tables of used by Z80 emulation to **/ +/** compute SIGN,ZERO, PARITY flags, and decimal correction **/ +/** There are also timing tables for Z80 opcodes. This file **/ +/** is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +static const byte Cycles[256] = +{ + 4,10, 7, 6, 4, 4, 7, 4, 4,11, 7, 6, 4, 4, 7, 4, + 8,10, 7, 6, 4, 4, 7, 4,12,11, 7, 6, 4, 4, 7, 4, + 7,10,16, 6, 4, 4, 7, 4, 7,11,16, 6, 4, 4, 7, 4, + 7,10,13, 6,11,11,10, 4, 7,11,13, 6, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 7, 7, 7, 7, 7, 7, 4, 7, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 5,10,10,10,10,11, 7,11, 5,10,10, 0,10,17, 7,11, + 5,10,10,11,10,11, 7,11, 5, 4,10,11,10, 0, 7,11, + 5,10,10,19,10,11, 7,11, 5, 4,10, 4,10, 0, 7,11, + 5,10,10, 4,10,11, 7,11, 5, 6,10, 4,10, 0, 7,11 +}; + +static const byte CyclesCB[256] = +{ + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8 +}; + +static const byte CyclesED[256] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12,12,15,20, 8,14, 8, 9,12,12,15,20, 0,14, 0, 9, + 12,12,15,20, 0, 0, 8, 9,12,12,15,20, 0, 0, 8, 9, + 12,12,15,20, 0, 0, 0,18,12,12,15,20, 0, 0, 0,18, + 12, 0,15,20, 0, 0, 0, 0,12,12,15,20, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16,16,16,16, 0, 0, 0, 0,16,16,16,16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static const byte CyclesXX[256] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 0, 0, 0, 0, 0, 0, + 0,14,20,10, 9, 9, 9, 0, 0,15,20,10, 9, 9, 9, 0, + 0, 0, 0, 0,23,23,19, 0, 0,15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 9, 9, 9, 9, 9, 9,19, 9, 9, 9, 9, 9, 9, 9,19, 9, + 19,19,19,19,19,19,19,19, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,14, 0,23, 0,15, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0 +}; + +static const byte CyclesXXCB[256] = +{ + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0 +}; + +static const byte ZSTable[256] = +{ + Z_FLAG,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG +}; + +static const byte PZSTable[256] = +{ + Z_FLAG|P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG,P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG,P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0,0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG,P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0,0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG, + P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0,0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG,P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG +}; + +static const word DAATable[2048] = +{ + 0x0044,0x0100,0x0200,0x0304,0x0400,0x0504,0x0604,0x0700, + 0x0808,0x090C,0x1010,0x1114,0x1214,0x1310,0x1414,0x1510, + 0x1000,0x1104,0x1204,0x1300,0x1404,0x1500,0x1600,0x1704, + 0x180C,0x1908,0x2030,0x2134,0x2234,0x2330,0x2434,0x2530, + 0x2020,0x2124,0x2224,0x2320,0x2424,0x2520,0x2620,0x2724, + 0x282C,0x2928,0x3034,0x3130,0x3230,0x3334,0x3430,0x3534, + 0x3024,0x3120,0x3220,0x3324,0x3420,0x3524,0x3624,0x3720, + 0x3828,0x392C,0x4010,0x4114,0x4214,0x4310,0x4414,0x4510, + 0x4000,0x4104,0x4204,0x4300,0x4404,0x4500,0x4600,0x4704, + 0x480C,0x4908,0x5014,0x5110,0x5210,0x5314,0x5410,0x5514, + 0x5004,0x5100,0x5200,0x5304,0x5400,0x5504,0x5604,0x5700, + 0x5808,0x590C,0x6034,0x6130,0x6230,0x6334,0x6430,0x6534, + 0x6024,0x6120,0x6220,0x6324,0x6420,0x6524,0x6624,0x6720, + 0x6828,0x692C,0x7030,0x7134,0x7234,0x7330,0x7434,0x7530, + 0x7020,0x7124,0x7224,0x7320,0x7424,0x7520,0x7620,0x7724, + 0x782C,0x7928,0x8090,0x8194,0x8294,0x8390,0x8494,0x8590, + 0x8080,0x8184,0x8284,0x8380,0x8484,0x8580,0x8680,0x8784, + 0x888C,0x8988,0x9094,0x9190,0x9290,0x9394,0x9490,0x9594, + 0x9084,0x9180,0x9280,0x9384,0x9480,0x9584,0x9684,0x9780, + 0x9888,0x998C,0x0055,0x0111,0x0211,0x0315,0x0411,0x0515, + 0x0045,0x0101,0x0201,0x0305,0x0401,0x0505,0x0605,0x0701, + 0x0809,0x090D,0x1011,0x1115,0x1215,0x1311,0x1415,0x1511, + 0x1001,0x1105,0x1205,0x1301,0x1405,0x1501,0x1601,0x1705, + 0x180D,0x1909,0x2031,0x2135,0x2235,0x2331,0x2435,0x2531, + 0x2021,0x2125,0x2225,0x2321,0x2425,0x2521,0x2621,0x2725, + 0x282D,0x2929,0x3035,0x3131,0x3231,0x3335,0x3431,0x3535, + 0x3025,0x3121,0x3221,0x3325,0x3421,0x3525,0x3625,0x3721, + 0x3829,0x392D,0x4011,0x4115,0x4215,0x4311,0x4415,0x4511, + 0x4001,0x4105,0x4205,0x4301,0x4405,0x4501,0x4601,0x4705, + 0x480D,0x4909,0x5015,0x5111,0x5211,0x5315,0x5411,0x5515, + 0x5005,0x5101,0x5201,0x5305,0x5401,0x5505,0x5605,0x5701, + 0x5809,0x590D,0x6035,0x6131,0x6231,0x6335,0x6431,0x6535, + 0x6025,0x6121,0x6221,0x6325,0x6421,0x6525,0x6625,0x6721, + 0x6829,0x692D,0x7031,0x7135,0x7235,0x7331,0x7435,0x7531, + 0x7021,0x7125,0x7225,0x7321,0x7425,0x7521,0x7621,0x7725, + 0x782D,0x7929,0x8091,0x8195,0x8295,0x8391,0x8495,0x8591, + 0x8081,0x8185,0x8285,0x8381,0x8485,0x8581,0x8681,0x8785, + 0x888D,0x8989,0x9095,0x9191,0x9291,0x9395,0x9491,0x9595, + 0x9085,0x9181,0x9281,0x9385,0x9481,0x9585,0x9685,0x9781, + 0x9889,0x998D,0xA0B5,0xA1B1,0xA2B1,0xA3B5,0xA4B1,0xA5B5, + 0xA0A5,0xA1A1,0xA2A1,0xA3A5,0xA4A1,0xA5A5,0xA6A5,0xA7A1, + 0xA8A9,0xA9AD,0xB0B1,0xB1B5,0xB2B5,0xB3B1,0xB4B5,0xB5B1, + 0xB0A1,0xB1A5,0xB2A5,0xB3A1,0xB4A5,0xB5A1,0xB6A1,0xB7A5, + 0xB8AD,0xB9A9,0xC095,0xC191,0xC291,0xC395,0xC491,0xC595, + 0xC085,0xC181,0xC281,0xC385,0xC481,0xC585,0xC685,0xC781, + 0xC889,0xC98D,0xD091,0xD195,0xD295,0xD391,0xD495,0xD591, + 0xD081,0xD185,0xD285,0xD381,0xD485,0xD581,0xD681,0xD785, + 0xD88D,0xD989,0xE0B1,0xE1B5,0xE2B5,0xE3B1,0xE4B5,0xE5B1, + 0xE0A1,0xE1A5,0xE2A5,0xE3A1,0xE4A5,0xE5A1,0xE6A1,0xE7A5, + 0xE8AD,0xE9A9,0xF0B5,0xF1B1,0xF2B1,0xF3B5,0xF4B1,0xF5B5, + 0xF0A5,0xF1A1,0xF2A1,0xF3A5,0xF4A1,0xF5A5,0xF6A5,0xF7A1, + 0xF8A9,0xF9AD,0x0055,0x0111,0x0211,0x0315,0x0411,0x0515, + 0x0045,0x0101,0x0201,0x0305,0x0401,0x0505,0x0605,0x0701, + 0x0809,0x090D,0x1011,0x1115,0x1215,0x1311,0x1415,0x1511, + 0x1001,0x1105,0x1205,0x1301,0x1405,0x1501,0x1601,0x1705, + 0x180D,0x1909,0x2031,0x2135,0x2235,0x2331,0x2435,0x2531, + 0x2021,0x2125,0x2225,0x2321,0x2425,0x2521,0x2621,0x2725, + 0x282D,0x2929,0x3035,0x3131,0x3231,0x3335,0x3431,0x3535, + 0x3025,0x3121,0x3221,0x3325,0x3421,0x3525,0x3625,0x3721, + 0x3829,0x392D,0x4011,0x4115,0x4215,0x4311,0x4415,0x4511, + 0x4001,0x4105,0x4205,0x4301,0x4405,0x4501,0x4601,0x4705, + 0x480D,0x4909,0x5015,0x5111,0x5211,0x5315,0x5411,0x5515, + 0x5005,0x5101,0x5201,0x5305,0x5401,0x5505,0x5605,0x5701, + 0x5809,0x590D,0x6035,0x6131,0x6231,0x6335,0x6431,0x6535, + 0x0604,0x0700,0x0808,0x090C,0x0A0C,0x0B08,0x0C0C,0x0D08, + 0x0E08,0x0F0C,0x1010,0x1114,0x1214,0x1310,0x1414,0x1510, + 0x1600,0x1704,0x180C,0x1908,0x1A08,0x1B0C,0x1C08,0x1D0C, + 0x1E0C,0x1F08,0x2030,0x2134,0x2234,0x2330,0x2434,0x2530, + 0x2620,0x2724,0x282C,0x2928,0x2A28,0x2B2C,0x2C28,0x2D2C, + 0x2E2C,0x2F28,0x3034,0x3130,0x3230,0x3334,0x3430,0x3534, + 0x3624,0x3720,0x3828,0x392C,0x3A2C,0x3B28,0x3C2C,0x3D28, + 0x3E28,0x3F2C,0x4010,0x4114,0x4214,0x4310,0x4414,0x4510, + 0x4600,0x4704,0x480C,0x4908,0x4A08,0x4B0C,0x4C08,0x4D0C, + 0x4E0C,0x4F08,0x5014,0x5110,0x5210,0x5314,0x5410,0x5514, + 0x5604,0x5700,0x5808,0x590C,0x5A0C,0x5B08,0x5C0C,0x5D08, + 0x5E08,0x5F0C,0x6034,0x6130,0x6230,0x6334,0x6430,0x6534, + 0x6624,0x6720,0x6828,0x692C,0x6A2C,0x6B28,0x6C2C,0x6D28, + 0x6E28,0x6F2C,0x7030,0x7134,0x7234,0x7330,0x7434,0x7530, + 0x7620,0x7724,0x782C,0x7928,0x7A28,0x7B2C,0x7C28,0x7D2C, + 0x7E2C,0x7F28,0x8090,0x8194,0x8294,0x8390,0x8494,0x8590, + 0x8680,0x8784,0x888C,0x8988,0x8A88,0x8B8C,0x8C88,0x8D8C, + 0x8E8C,0x8F88,0x9094,0x9190,0x9290,0x9394,0x9490,0x9594, + 0x9684,0x9780,0x9888,0x998C,0x9A8C,0x9B88,0x9C8C,0x9D88, + 0x9E88,0x9F8C,0x0055,0x0111,0x0211,0x0315,0x0411,0x0515, + 0x0605,0x0701,0x0809,0x090D,0x0A0D,0x0B09,0x0C0D,0x0D09, + 0x0E09,0x0F0D,0x1011,0x1115,0x1215,0x1311,0x1415,0x1511, + 0x1601,0x1705,0x180D,0x1909,0x1A09,0x1B0D,0x1C09,0x1D0D, + 0x1E0D,0x1F09,0x2031,0x2135,0x2235,0x2331,0x2435,0x2531, + 0x2621,0x2725,0x282D,0x2929,0x2A29,0x2B2D,0x2C29,0x2D2D, + 0x2E2D,0x2F29,0x3035,0x3131,0x3231,0x3335,0x3431,0x3535, + 0x3625,0x3721,0x3829,0x392D,0x3A2D,0x3B29,0x3C2D,0x3D29, + 0x3E29,0x3F2D,0x4011,0x4115,0x4215,0x4311,0x4415,0x4511, + 0x4601,0x4705,0x480D,0x4909,0x4A09,0x4B0D,0x4C09,0x4D0D, + 0x4E0D,0x4F09,0x5015,0x5111,0x5211,0x5315,0x5411,0x5515, + 0x5605,0x5701,0x5809,0x590D,0x5A0D,0x5B09,0x5C0D,0x5D09, + 0x5E09,0x5F0D,0x6035,0x6131,0x6231,0x6335,0x6431,0x6535, + 0x6625,0x6721,0x6829,0x692D,0x6A2D,0x6B29,0x6C2D,0x6D29, + 0x6E29,0x6F2D,0x7031,0x7135,0x7235,0x7331,0x7435,0x7531, + 0x7621,0x7725,0x782D,0x7929,0x7A29,0x7B2D,0x7C29,0x7D2D, + 0x7E2D,0x7F29,0x8091,0x8195,0x8295,0x8391,0x8495,0x8591, + 0x8681,0x8785,0x888D,0x8989,0x8A89,0x8B8D,0x8C89,0x8D8D, + 0x8E8D,0x8F89,0x9095,0x9191,0x9291,0x9395,0x9491,0x9595, + 0x9685,0x9781,0x9889,0x998D,0x9A8D,0x9B89,0x9C8D,0x9D89, + 0x9E89,0x9F8D,0xA0B5,0xA1B1,0xA2B1,0xA3B5,0xA4B1,0xA5B5, + 0xA6A5,0xA7A1,0xA8A9,0xA9AD,0xAAAD,0xABA9,0xACAD,0xADA9, + 0xAEA9,0xAFAD,0xB0B1,0xB1B5,0xB2B5,0xB3B1,0xB4B5,0xB5B1, + 0xB6A1,0xB7A5,0xB8AD,0xB9A9,0xBAA9,0xBBAD,0xBCA9,0xBDAD, + 0xBEAD,0xBFA9,0xC095,0xC191,0xC291,0xC395,0xC491,0xC595, + 0xC685,0xC781,0xC889,0xC98D,0xCA8D,0xCB89,0xCC8D,0xCD89, + 0xCE89,0xCF8D,0xD091,0xD195,0xD295,0xD391,0xD495,0xD591, + 0xD681,0xD785,0xD88D,0xD989,0xDA89,0xDB8D,0xDC89,0xDD8D, + 0xDE8D,0xDF89,0xE0B1,0xE1B5,0xE2B5,0xE3B1,0xE4B5,0xE5B1, + 0xE6A1,0xE7A5,0xE8AD,0xE9A9,0xEAA9,0xEBAD,0xECA9,0xEDAD, + 0xEEAD,0xEFA9,0xF0B5,0xF1B1,0xF2B1,0xF3B5,0xF4B1,0xF5B5, + 0xF6A5,0xF7A1,0xF8A9,0xF9AD,0xFAAD,0xFBA9,0xFCAD,0xFDA9, + 0xFEA9,0xFFAD,0x0055,0x0111,0x0211,0x0315,0x0411,0x0515, + 0x0605,0x0701,0x0809,0x090D,0x0A0D,0x0B09,0x0C0D,0x0D09, + 0x0E09,0x0F0D,0x1011,0x1115,0x1215,0x1311,0x1415,0x1511, + 0x1601,0x1705,0x180D,0x1909,0x1A09,0x1B0D,0x1C09,0x1D0D, + 0x1E0D,0x1F09,0x2031,0x2135,0x2235,0x2331,0x2435,0x2531, + 0x2621,0x2725,0x282D,0x2929,0x2A29,0x2B2D,0x2C29,0x2D2D, + 0x2E2D,0x2F29,0x3035,0x3131,0x3231,0x3335,0x3431,0x3535, + 0x3625,0x3721,0x3829,0x392D,0x3A2D,0x3B29,0x3C2D,0x3D29, + 0x3E29,0x3F2D,0x4011,0x4115,0x4215,0x4311,0x4415,0x4511, + 0x4601,0x4705,0x480D,0x4909,0x4A09,0x4B0D,0x4C09,0x4D0D, + 0x4E0D,0x4F09,0x5015,0x5111,0x5211,0x5315,0x5411,0x5515, + 0x5605,0x5701,0x5809,0x590D,0x5A0D,0x5B09,0x5C0D,0x5D09, + 0x5E09,0x5F0D,0x6035,0x6131,0x6231,0x6335,0x6431,0x6535, + 0x0046,0x0102,0x0202,0x0306,0x0402,0x0506,0x0606,0x0702, + 0x080A,0x090E,0x0402,0x0506,0x0606,0x0702,0x080A,0x090E, + 0x1002,0x1106,0x1206,0x1302,0x1406,0x1502,0x1602,0x1706, + 0x180E,0x190A,0x1406,0x1502,0x1602,0x1706,0x180E,0x190A, + 0x2022,0x2126,0x2226,0x2322,0x2426,0x2522,0x2622,0x2726, + 0x282E,0x292A,0x2426,0x2522,0x2622,0x2726,0x282E,0x292A, + 0x3026,0x3122,0x3222,0x3326,0x3422,0x3526,0x3626,0x3722, + 0x382A,0x392E,0x3422,0x3526,0x3626,0x3722,0x382A,0x392E, + 0x4002,0x4106,0x4206,0x4302,0x4406,0x4502,0x4602,0x4706, + 0x480E,0x490A,0x4406,0x4502,0x4602,0x4706,0x480E,0x490A, + 0x5006,0x5102,0x5202,0x5306,0x5402,0x5506,0x5606,0x5702, + 0x580A,0x590E,0x5402,0x5506,0x5606,0x5702,0x580A,0x590E, + 0x6026,0x6122,0x6222,0x6326,0x6422,0x6526,0x6626,0x6722, + 0x682A,0x692E,0x6422,0x6526,0x6626,0x6722,0x682A,0x692E, + 0x7022,0x7126,0x7226,0x7322,0x7426,0x7522,0x7622,0x7726, + 0x782E,0x792A,0x7426,0x7522,0x7622,0x7726,0x782E,0x792A, + 0x8082,0x8186,0x8286,0x8382,0x8486,0x8582,0x8682,0x8786, + 0x888E,0x898A,0x8486,0x8582,0x8682,0x8786,0x888E,0x898A, + 0x9086,0x9182,0x9282,0x9386,0x9482,0x9586,0x9686,0x9782, + 0x988A,0x998E,0x3423,0x3527,0x3627,0x3723,0x382B,0x392F, + 0x4003,0x4107,0x4207,0x4303,0x4407,0x4503,0x4603,0x4707, + 0x480F,0x490B,0x4407,0x4503,0x4603,0x4707,0x480F,0x490B, + 0x5007,0x5103,0x5203,0x5307,0x5403,0x5507,0x5607,0x5703, + 0x580B,0x590F,0x5403,0x5507,0x5607,0x5703,0x580B,0x590F, + 0x6027,0x6123,0x6223,0x6327,0x6423,0x6527,0x6627,0x6723, + 0x682B,0x692F,0x6423,0x6527,0x6627,0x6723,0x682B,0x692F, + 0x7023,0x7127,0x7227,0x7323,0x7427,0x7523,0x7623,0x7727, + 0x782F,0x792B,0x7427,0x7523,0x7623,0x7727,0x782F,0x792B, + 0x8083,0x8187,0x8287,0x8383,0x8487,0x8583,0x8683,0x8787, + 0x888F,0x898B,0x8487,0x8583,0x8683,0x8787,0x888F,0x898B, + 0x9087,0x9183,0x9283,0x9387,0x9483,0x9587,0x9687,0x9783, + 0x988B,0x998F,0x9483,0x9587,0x9687,0x9783,0x988B,0x998F, + 0xA0A7,0xA1A3,0xA2A3,0xA3A7,0xA4A3,0xA5A7,0xA6A7,0xA7A3, + 0xA8AB,0xA9AF,0xA4A3,0xA5A7,0xA6A7,0xA7A3,0xA8AB,0xA9AF, + 0xB0A3,0xB1A7,0xB2A7,0xB3A3,0xB4A7,0xB5A3,0xB6A3,0xB7A7, + 0xB8AF,0xB9AB,0xB4A7,0xB5A3,0xB6A3,0xB7A7,0xB8AF,0xB9AB, + 0xC087,0xC183,0xC283,0xC387,0xC483,0xC587,0xC687,0xC783, + 0xC88B,0xC98F,0xC483,0xC587,0xC687,0xC783,0xC88B,0xC98F, + 0xD083,0xD187,0xD287,0xD383,0xD487,0xD583,0xD683,0xD787, + 0xD88F,0xD98B,0xD487,0xD583,0xD683,0xD787,0xD88F,0xD98B, + 0xE0A3,0xE1A7,0xE2A7,0xE3A3,0xE4A7,0xE5A3,0xE6A3,0xE7A7, + 0xE8AF,0xE9AB,0xE4A7,0xE5A3,0xE6A3,0xE7A7,0xE8AF,0xE9AB, + 0xF0A7,0xF1A3,0xF2A3,0xF3A7,0xF4A3,0xF5A7,0xF6A7,0xF7A3, + 0xF8AB,0xF9AF,0xF4A3,0xF5A7,0xF6A7,0xF7A3,0xF8AB,0xF9AF, + 0x0047,0x0103,0x0203,0x0307,0x0403,0x0507,0x0607,0x0703, + 0x080B,0x090F,0x0403,0x0507,0x0607,0x0703,0x080B,0x090F, + 0x1003,0x1107,0x1207,0x1303,0x1407,0x1503,0x1603,0x1707, + 0x180F,0x190B,0x1407,0x1503,0x1603,0x1707,0x180F,0x190B, + 0x2023,0x2127,0x2227,0x2323,0x2427,0x2523,0x2623,0x2727, + 0x282F,0x292B,0x2427,0x2523,0x2623,0x2727,0x282F,0x292B, + 0x3027,0x3123,0x3223,0x3327,0x3423,0x3527,0x3627,0x3723, + 0x382B,0x392F,0x3423,0x3527,0x3627,0x3723,0x382B,0x392F, + 0x4003,0x4107,0x4207,0x4303,0x4407,0x4503,0x4603,0x4707, + 0x480F,0x490B,0x4407,0x4503,0x4603,0x4707,0x480F,0x490B, + 0x5007,0x5103,0x5203,0x5307,0x5403,0x5507,0x5607,0x5703, + 0x580B,0x590F,0x5403,0x5507,0x5607,0x5703,0x580B,0x590F, + 0x6027,0x6123,0x6223,0x6327,0x6423,0x6527,0x6627,0x6723, + 0x682B,0x692F,0x6423,0x6527,0x6627,0x6723,0x682B,0x692F, + 0x7023,0x7127,0x7227,0x7323,0x7427,0x7523,0x7623,0x7727, + 0x782F,0x792B,0x7427,0x7523,0x7623,0x7727,0x782F,0x792B, + 0x8083,0x8187,0x8287,0x8383,0x8487,0x8583,0x8683,0x8787, + 0x888F,0x898B,0x8487,0x8583,0x8683,0x8787,0x888F,0x898B, + 0x9087,0x9183,0x9283,0x9387,0x9483,0x9587,0x9687,0x9783, + 0x988B,0x998F,0x9483,0x9587,0x9687,0x9783,0x988B,0x998F, + 0xFABE,0xFBBA,0xFCBE,0xFDBA,0xFEBA,0xFFBE,0x0046,0x0102, + 0x0202,0x0306,0x0402,0x0506,0x0606,0x0702,0x080A,0x090E, + 0x0A1E,0x0B1A,0x0C1E,0x0D1A,0x0E1A,0x0F1E,0x1002,0x1106, + 0x1206,0x1302,0x1406,0x1502,0x1602,0x1706,0x180E,0x190A, + 0x1A1A,0x1B1E,0x1C1A,0x1D1E,0x1E1E,0x1F1A,0x2022,0x2126, + 0x2226,0x2322,0x2426,0x2522,0x2622,0x2726,0x282E,0x292A, + 0x2A3A,0x2B3E,0x2C3A,0x2D3E,0x2E3E,0x2F3A,0x3026,0x3122, + 0x3222,0x3326,0x3422,0x3526,0x3626,0x3722,0x382A,0x392E, + 0x3A3E,0x3B3A,0x3C3E,0x3D3A,0x3E3A,0x3F3E,0x4002,0x4106, + 0x4206,0x4302,0x4406,0x4502,0x4602,0x4706,0x480E,0x490A, + 0x4A1A,0x4B1E,0x4C1A,0x4D1E,0x4E1E,0x4F1A,0x5006,0x5102, + 0x5202,0x5306,0x5402,0x5506,0x5606,0x5702,0x580A,0x590E, + 0x5A1E,0x5B1A,0x5C1E,0x5D1A,0x5E1A,0x5F1E,0x6026,0x6122, + 0x6222,0x6326,0x6422,0x6526,0x6626,0x6722,0x682A,0x692E, + 0x6A3E,0x6B3A,0x6C3E,0x6D3A,0x6E3A,0x6F3E,0x7022,0x7126, + 0x7226,0x7322,0x7426,0x7522,0x7622,0x7726,0x782E,0x792A, + 0x7A3A,0x7B3E,0x7C3A,0x7D3E,0x7E3E,0x7F3A,0x8082,0x8186, + 0x8286,0x8382,0x8486,0x8582,0x8682,0x8786,0x888E,0x898A, + 0x8A9A,0x8B9E,0x8C9A,0x8D9E,0x8E9E,0x8F9A,0x9086,0x9182, + 0x9282,0x9386,0x3423,0x3527,0x3627,0x3723,0x382B,0x392F, + 0x3A3F,0x3B3B,0x3C3F,0x3D3B,0x3E3B,0x3F3F,0x4003,0x4107, + 0x4207,0x4303,0x4407,0x4503,0x4603,0x4707,0x480F,0x490B, + 0x4A1B,0x4B1F,0x4C1B,0x4D1F,0x4E1F,0x4F1B,0x5007,0x5103, + 0x5203,0x5307,0x5403,0x5507,0x5607,0x5703,0x580B,0x590F, + 0x5A1F,0x5B1B,0x5C1F,0x5D1B,0x5E1B,0x5F1F,0x6027,0x6123, + 0x6223,0x6327,0x6423,0x6527,0x6627,0x6723,0x682B,0x692F, + 0x6A3F,0x6B3B,0x6C3F,0x6D3B,0x6E3B,0x6F3F,0x7023,0x7127, + 0x7227,0x7323,0x7427,0x7523,0x7623,0x7727,0x782F,0x792B, + 0x7A3B,0x7B3F,0x7C3B,0x7D3F,0x7E3F,0x7F3B,0x8083,0x8187, + 0x8287,0x8383,0x8487,0x8583,0x8683,0x8787,0x888F,0x898B, + 0x8A9B,0x8B9F,0x8C9B,0x8D9F,0x8E9F,0x8F9B,0x9087,0x9183, + 0x9283,0x9387,0x9483,0x9587,0x9687,0x9783,0x988B,0x998F, + 0x9A9F,0x9B9B,0x9C9F,0x9D9B,0x9E9B,0x9F9F,0xA0A7,0xA1A3, + 0xA2A3,0xA3A7,0xA4A3,0xA5A7,0xA6A7,0xA7A3,0xA8AB,0xA9AF, + 0xAABF,0xABBB,0xACBF,0xADBB,0xAEBB,0xAFBF,0xB0A3,0xB1A7, + 0xB2A7,0xB3A3,0xB4A7,0xB5A3,0xB6A3,0xB7A7,0xB8AF,0xB9AB, + 0xBABB,0xBBBF,0xBCBB,0xBDBF,0xBEBF,0xBFBB,0xC087,0xC183, + 0xC283,0xC387,0xC483,0xC587,0xC687,0xC783,0xC88B,0xC98F, + 0xCA9F,0xCB9B,0xCC9F,0xCD9B,0xCE9B,0xCF9F,0xD083,0xD187, + 0xD287,0xD383,0xD487,0xD583,0xD683,0xD787,0xD88F,0xD98B, + 0xDA9B,0xDB9F,0xDC9B,0xDD9F,0xDE9F,0xDF9B,0xE0A3,0xE1A7, + 0xE2A7,0xE3A3,0xE4A7,0xE5A3,0xE6A3,0xE7A7,0xE8AF,0xE9AB, + 0xEABB,0xEBBF,0xECBB,0xEDBF,0xEEBF,0xEFBB,0xF0A7,0xF1A3, + 0xF2A3,0xF3A7,0xF4A3,0xF5A7,0xF6A7,0xF7A3,0xF8AB,0xF9AF, + 0xFABF,0xFBBB,0xFCBF,0xFDBB,0xFEBB,0xFFBF,0x0047,0x0103, + 0x0203,0x0307,0x0403,0x0507,0x0607,0x0703,0x080B,0x090F, + 0x0A1F,0x0B1B,0x0C1F,0x0D1B,0x0E1B,0x0F1F,0x1003,0x1107, + 0x1207,0x1303,0x1407,0x1503,0x1603,0x1707,0x180F,0x190B, + 0x1A1B,0x1B1F,0x1C1B,0x1D1F,0x1E1F,0x1F1B,0x2023,0x2127, + 0x2227,0x2323,0x2427,0x2523,0x2623,0x2727,0x282F,0x292B, + 0x2A3B,0x2B3F,0x2C3B,0x2D3F,0x2E3F,0x2F3B,0x3027,0x3123, + 0x3223,0x3327,0x3423,0x3527,0x3627,0x3723,0x382B,0x392F, + 0x3A3F,0x3B3B,0x3C3F,0x3D3B,0x3E3B,0x3F3F,0x4003,0x4107, + 0x4207,0x4303,0x4407,0x4503,0x4603,0x4707,0x480F,0x490B, + 0x4A1B,0x4B1F,0x4C1B,0x4D1F,0x4E1F,0x4F1B,0x5007,0x5103, + 0x5203,0x5307,0x5403,0x5507,0x5607,0x5703,0x580B,0x590F, + 0x5A1F,0x5B1B,0x5C1F,0x5D1B,0x5E1B,0x5F1F,0x6027,0x6123, + 0x6223,0x6327,0x6423,0x6527,0x6627,0x6723,0x682B,0x692F, + 0x6A3F,0x6B3B,0x6C3F,0x6D3B,0x6E3B,0x6F3F,0x7023,0x7127, + 0x7227,0x7323,0x7427,0x7523,0x7623,0x7727,0x782F,0x792B, + 0x7A3B,0x7B3F,0x7C3B,0x7D3F,0x7E3F,0x7F3B,0x8083,0x8187, + 0x8287,0x8383,0x8487,0x8583,0x8683,0x8787,0x888F,0x898B, + 0x8A9B,0x8B9F,0x8C9B,0x8D9F,0x8E9F,0x8F9B,0x9087,0x9183, + 0x9283,0x9387,0x9483,0x9587,0x9687,0x9783,0x988B,0x998F +}; diff --git a/MCUME_pico/picospeccy/Z80.c b/MCUME_pico/picospeccy/Z80.c new file mode 100644 index 0000000..821056e --- /dev/null +++ b/MCUME_pico/picospeccy/Z80.c @@ -0,0 +1,685 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** Z80.c **/ +/** **/ +/** This file contains implementation for Z80 CPU. Don't **/ +/** forget to provide RdZ80(), WrZ80(), InZ80(), OutZ80(), **/ +/** LoopZ80(), and PatchZ80() functions to accomodate the **/ +/** emulated machine's architecture. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +#include "Z80.h" +#include "Tables.h" +#include +#undef DEBUG +/** INLINE ***************************************************/ +/** C99 standard has "inline", but older compilers used **/ +/** __inline for the same purpose. **/ +/*************************************************************/ +#ifdef __C99__ +#define INLINE static inline +#else +#define INLINE static __inline +#endif + +/** System-Dependent Stuff ***********************************/ +/** This is system-dependent code put here to speed things **/ +/** up. It has to stay inlined to be fast. **/ +/*************************************************************/ +#ifdef COLEM +#define RdZ80 RDZ80 +extern byte *ROMPage[]; +INLINE byte RdZ80(word A) { return(ROMPage[A>>13][A&0x1FFF]); } +#endif + +#ifdef SPECCY +#define RdZ80 RDZ80 +#define WrZ80 WRZ80 +extern byte *Page[],*ROM; +INLINE byte RdZ80(word A) { return(Page[A>>13][A&0x1FFF]); } +INLINE void WrZ80(word A,byte V) { if(Page[A>>13]>13][A&0x1FFF]=V; } +#endif + +#ifdef MG +#define RdZ80 RDZ80 +extern byte *Page[]; +INLINE byte RdZ80(word A) { return(Page[A>>13][A&0x1FFF]); } +#endif + +#ifdef FMSX +#define FAST_RDOP +extern byte *RAM[]; +INLINE byte OpZ80(word A) { return(RAM[A>>13][A&0x1FFF]); } +#endif + +/** FAST_RDOP ************************************************/ +/** With this #define not present, RdZ80() should perform **/ +/** the functions of OpZ80(). **/ +/*************************************************************/ +#ifndef FAST_RDOP +#define OpZ80(A) RdZ80(A) +#endif + +#define S(Fl) R->AF.B.l|=Fl +#define R(Fl) R->AF.B.l&=~(Fl) +#define FLAGS(Rg,Fl) R->AF.B.l=Fl|ZSTable[Rg] + +#define M_RLC(Rg) \ + R->AF.B.l=Rg>>7;Rg=(Rg<<1)|R->AF.B.l;R->AF.B.l|=PZSTable[Rg] +#define M_RRC(Rg) \ + R->AF.B.l=Rg&0x01;Rg=(Rg>>1)|(R->AF.B.l<<7);R->AF.B.l|=PZSTable[Rg] +#define M_RL(Rg) \ + if(Rg&0x80) \ + { \ + Rg=(Rg<<1)|(R->AF.B.l&C_FLAG); \ + R->AF.B.l=PZSTable[Rg]|C_FLAG; \ + } \ + else \ + { \ + Rg=(Rg<<1)|(R->AF.B.l&C_FLAG); \ + R->AF.B.l=PZSTable[Rg]; \ + } +#define M_RR(Rg) \ + if(Rg&0x01) \ + { \ + Rg=(Rg>>1)|(R->AF.B.l<<7); \ + R->AF.B.l=PZSTable[Rg]|C_FLAG; \ + } \ + else \ + { \ + Rg=(Rg>>1)|(R->AF.B.l<<7); \ + R->AF.B.l=PZSTable[Rg]; \ + } + +#define M_SLA(Rg) \ + R->AF.B.l=Rg>>7;Rg<<=1;R->AF.B.l|=PZSTable[Rg] +#define M_SRA(Rg) \ + R->AF.B.l=Rg&C_FLAG;Rg=(Rg>>1)|(Rg&0x80);R->AF.B.l|=PZSTable[Rg] + +#define M_SLL(Rg) \ + R->AF.B.l=Rg>>7;Rg=(Rg<<1)|0x01;R->AF.B.l|=PZSTable[Rg] +#define M_SRL(Rg) \ + R->AF.B.l=Rg&0x01;Rg>>=1;R->AF.B.l|=PZSTable[Rg] + +#define M_BIT(Bit,Rg) \ + R->AF.B.l=(R->AF.B.l&C_FLAG)|H_FLAG|PZSTable[Rg&(1<Rg.B.l=OpZ80(R->SP.W++);R->Rg.B.h=OpZ80(R->SP.W++) +#define M_PUSH(Rg) \ + WrZ80(--R->SP.W,R->Rg.B.h);WrZ80(--R->SP.W,R->Rg.B.l) + +#define M_CALL \ + J.B.l=OpZ80(R->PC.W++);J.B.h=OpZ80(R->PC.W++); \ + WrZ80(--R->SP.W,R->PC.B.h);WrZ80(--R->SP.W,R->PC.B.l); \ + R->PC.W=J.W; \ + JumpZ80(J.W) + +#define M_JP J.B.l=OpZ80(R->PC.W++);J.B.h=OpZ80(R->PC.W);R->PC.W=J.W;JumpZ80(J.W) +#define M_JR R->PC.W+=(offset)OpZ80(R->PC.W)+1;JumpZ80(R->PC.W) +#define M_RET R->PC.B.l=OpZ80(R->SP.W++);R->PC.B.h=OpZ80(R->SP.W++);JumpZ80(R->PC.W) + +#define M_RST(Ad) \ + WrZ80(--R->SP.W,R->PC.B.h);WrZ80(--R->SP.W,R->PC.B.l);R->PC.W=Ad;JumpZ80(Ad) + +#define M_LDWORD(Rg) \ + R->Rg.B.l=OpZ80(R->PC.W++);R->Rg.B.h=OpZ80(R->PC.W++) + +#define M_ADD(Rg) \ + J.W=R->AF.B.h+Rg; \ + R->AF.B.l= \ + (~(R->AF.B.h^Rg)&(Rg^J.B.l)&0x80? V_FLAG:0)| \ + J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG); \ + R->AF.B.h=J.B.l + +#define M_SUB(Rg) \ + J.W=R->AF.B.h-Rg; \ + R->AF.B.l= \ + ((R->AF.B.h^Rg)&(R->AF.B.h^J.B.l)&0x80? V_FLAG:0)| \ + N_FLAG|-J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG); \ + R->AF.B.h=J.B.l + +#define M_ADC(Rg) \ + J.W=R->AF.B.h+Rg+(R->AF.B.l&C_FLAG); \ + R->AF.B.l= \ + (~(R->AF.B.h^Rg)&(Rg^J.B.l)&0x80? V_FLAG:0)| \ + J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG); \ + R->AF.B.h=J.B.l + +#define M_SBC(Rg) \ + J.W=R->AF.B.h-Rg-(R->AF.B.l&C_FLAG); \ + R->AF.B.l= \ + ((R->AF.B.h^Rg)&(R->AF.B.h^J.B.l)&0x80? V_FLAG:0)| \ + N_FLAG|-J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG); \ + R->AF.B.h=J.B.l + +#define M_CP(Rg) \ + J.W=R->AF.B.h-Rg; \ + R->AF.B.l= \ + ((R->AF.B.h^Rg)&(R->AF.B.h^J.B.l)&0x80? V_FLAG:0)| \ + N_FLAG|-J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG) + +#define M_AND(Rg) R->AF.B.h&=Rg;R->AF.B.l=H_FLAG|PZSTable[R->AF.B.h] +#define M_OR(Rg) R->AF.B.h|=Rg;R->AF.B.l=PZSTable[R->AF.B.h] +#define M_XOR(Rg) R->AF.B.h^=Rg;R->AF.B.l=PZSTable[R->AF.B.h] + +#define M_IN(Rg) \ + Rg=InZ80(R->BC.W); \ + R->AF.B.l=PZSTable[Rg]|(R->AF.B.l&C_FLAG) + +#define M_INC(Rg) \ + Rg++; \ + R->AF.B.l= \ + (R->AF.B.l&C_FLAG)|ZSTable[Rg]| \ + (Rg==0x80? V_FLAG:0)|(Rg&0x0F? 0:H_FLAG) + +#define M_DEC(Rg) \ + Rg--; \ + R->AF.B.l= \ + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[Rg]| \ + (Rg==0x7F? V_FLAG:0)|((Rg&0x0F)==0x0F? H_FLAG:0) + +#define M_ADDW(Rg1,Rg2) \ + J.W=(R->Rg1.W+R->Rg2.W)&0xFFFF; \ + R->AF.B.l= \ + (R->AF.B.l&~(H_FLAG|N_FLAG|C_FLAG))| \ + ((R->Rg1.W^R->Rg2.W^J.W)&0x1000? H_FLAG:0)| \ + (((long)R->Rg1.W+(long)R->Rg2.W)&0x10000? C_FLAG:0); \ + R->Rg1.W=J.W + +#define M_ADCW(Rg) \ + I=R->AF.B.l&C_FLAG;J.W=(R->HL.W+R->Rg.W+I)&0xFFFF; \ + R->AF.B.l= \ + (((long)R->HL.W+(long)R->Rg.W+(long)I)&0x10000? C_FLAG:0)| \ + (~(R->HL.W^R->Rg.W)&(R->Rg.W^J.W)&0x8000? V_FLAG:0)| \ + ((R->HL.W^R->Rg.W^J.W)&0x1000? H_FLAG:0)| \ + (J.W? 0:Z_FLAG)|(J.B.h&S_FLAG); \ + R->HL.W=J.W + +#define M_SBCW(Rg) \ + I=R->AF.B.l&C_FLAG;J.W=(R->HL.W-R->Rg.W-I)&0xFFFF; \ + R->AF.B.l= \ + N_FLAG| \ + (((long)R->HL.W-(long)R->Rg.W-(long)I)&0x10000? C_FLAG:0)| \ + ((R->HL.W^R->Rg.W)&(R->HL.W^J.W)&0x8000? V_FLAG:0)| \ + ((R->HL.W^R->Rg.W^J.W)&0x1000? H_FLAG:0)| \ + (J.W? 0:Z_FLAG)|(J.B.h&S_FLAG); \ + R->HL.W=J.W + +enum Codes +{ + NOP,LD_BC_WORD,LD_xBC_A,INC_BC,INC_B,DEC_B,LD_B_BYTE,RLCA, + EX_AF_AF,ADD_HL_BC,LD_A_xBC,DEC_BC,INC_C,DEC_C,LD_C_BYTE,RRCA, + DJNZ,LD_DE_WORD,LD_xDE_A,INC_DE,INC_D,DEC_D,LD_D_BYTE,RLA, + JR,ADD_HL_DE,LD_A_xDE,DEC_DE,INC_E,DEC_E,LD_E_BYTE,RRA, + JR_NZ,LD_HL_WORD,LD_xWORD_HL,INC_HL,INC_H,DEC_H,LD_H_BYTE,DAA, + JR_Z,ADD_HL_HL,LD_HL_xWORD,DEC_HL,INC_L,DEC_L,LD_L_BYTE,CPL, + JR_NC,LD_SP_WORD,LD_xWORD_A,INC_SP,INC_xHL,DEC_xHL,LD_xHL_BYTE,SCF, + JR_C,ADD_HL_SP,LD_A_xWORD,DEC_SP,INC_A,DEC_A,LD_A_BYTE,CCF, + LD_B_B,LD_B_C,LD_B_D,LD_B_E,LD_B_H,LD_B_L,LD_B_xHL,LD_B_A, + LD_C_B,LD_C_C,LD_C_D,LD_C_E,LD_C_H,LD_C_L,LD_C_xHL,LD_C_A, + LD_D_B,LD_D_C,LD_D_D,LD_D_E,LD_D_H,LD_D_L,LD_D_xHL,LD_D_A, + LD_E_B,LD_E_C,LD_E_D,LD_E_E,LD_E_H,LD_E_L,LD_E_xHL,LD_E_A, + LD_H_B,LD_H_C,LD_H_D,LD_H_E,LD_H_H,LD_H_L,LD_H_xHL,LD_H_A, + LD_L_B,LD_L_C,LD_L_D,LD_L_E,LD_L_H,LD_L_L,LD_L_xHL,LD_L_A, + LD_xHL_B,LD_xHL_C,LD_xHL_D,LD_xHL_E,LD_xHL_H,LD_xHL_L,HALT,LD_xHL_A, + LD_A_B,LD_A_C,LD_A_D,LD_A_E,LD_A_H,LD_A_L,LD_A_xHL,LD_A_A, + ADD_B,ADD_C,ADD_D,ADD_E,ADD_H,ADD_L,ADD_xHL,ADD_A, + ADC_B,ADC_C,ADC_D,ADC_E,ADC_H,ADC_L,ADC_xHL,ADC_A, + SUB_B,SUB_C,SUB_D,SUB_E,SUB_H,SUB_L,SUB_xHL,SUB_A, + SBC_B,SBC_C,SBC_D,SBC_E,SBC_H,SBC_L,SBC_xHL,SBC_A, + AND_B,AND_C,AND_D,AND_E,AND_H,AND_L,AND_xHL,AND_A, + XOR_B,XOR_C,XOR_D,XOR_E,XOR_H,XOR_L,XOR_xHL,XOR_A, + OR_B,OR_C,OR_D,OR_E,OR_H,OR_L,OR_xHL,OR_A, + CP_B,CP_C,CP_D,CP_E,CP_H,CP_L,CP_xHL,CP_A, + RET_NZ,POP_BC,JP_NZ,JP,CALL_NZ,PUSH_BC,ADD_BYTE,RST00, + RET_Z,RET,JP_Z,PFX_CB,CALL_Z,CALL,ADC_BYTE,RST08, + RET_NC,POP_DE,JP_NC,OUTA,CALL_NC,PUSH_DE,SUB_BYTE,RST10, + RET_C,EXX,JP_C,INA,CALL_C,PFX_DD,SBC_BYTE,RST18, + RET_PO,POP_HL,JP_PO,EX_HL_xSP,CALL_PO,PUSH_HL,AND_BYTE,RST20, + RET_PE,LD_PC_HL,JP_PE,EX_DE_HL,CALL_PE,PFX_ED,XOR_BYTE,RST28, + RET_P,POP_AF,JP_P,DI,CALL_P,PUSH_AF,OR_BYTE,RST30, + RET_M,LD_SP_HL,JP_M,EI,CALL_M,PFX_FD,CP_BYTE,RST38 +}; + +enum CodesCB +{ + RLC_B,RLC_C,RLC_D,RLC_E,RLC_H,RLC_L,RLC_xHL,RLC_A, + RRC_B,RRC_C,RRC_D,RRC_E,RRC_H,RRC_L,RRC_xHL,RRC_A, + RL_B,RL_C,RL_D,RL_E,RL_H,RL_L,RL_xHL,RL_A, + RR_B,RR_C,RR_D,RR_E,RR_H,RR_L,RR_xHL,RR_A, + SLA_B,SLA_C,SLA_D,SLA_E,SLA_H,SLA_L,SLA_xHL,SLA_A, + SRA_B,SRA_C,SRA_D,SRA_E,SRA_H,SRA_L,SRA_xHL,SRA_A, + SLL_B,SLL_C,SLL_D,SLL_E,SLL_H,SLL_L,SLL_xHL,SLL_A, + SRL_B,SRL_C,SRL_D,SRL_E,SRL_H,SRL_L,SRL_xHL,SRL_A, + BIT0_B,BIT0_C,BIT0_D,BIT0_E,BIT0_H,BIT0_L,BIT0_xHL,BIT0_A, + BIT1_B,BIT1_C,BIT1_D,BIT1_E,BIT1_H,BIT1_L,BIT1_xHL,BIT1_A, + BIT2_B,BIT2_C,BIT2_D,BIT2_E,BIT2_H,BIT2_L,BIT2_xHL,BIT2_A, + BIT3_B,BIT3_C,BIT3_D,BIT3_E,BIT3_H,BIT3_L,BIT3_xHL,BIT3_A, + BIT4_B,BIT4_C,BIT4_D,BIT4_E,BIT4_H,BIT4_L,BIT4_xHL,BIT4_A, + BIT5_B,BIT5_C,BIT5_D,BIT5_E,BIT5_H,BIT5_L,BIT5_xHL,BIT5_A, + BIT6_B,BIT6_C,BIT6_D,BIT6_E,BIT6_H,BIT6_L,BIT6_xHL,BIT6_A, + BIT7_B,BIT7_C,BIT7_D,BIT7_E,BIT7_H,BIT7_L,BIT7_xHL,BIT7_A, + RES0_B,RES0_C,RES0_D,RES0_E,RES0_H,RES0_L,RES0_xHL,RES0_A, + RES1_B,RES1_C,RES1_D,RES1_E,RES1_H,RES1_L,RES1_xHL,RES1_A, + RES2_B,RES2_C,RES2_D,RES2_E,RES2_H,RES2_L,RES2_xHL,RES2_A, + RES3_B,RES3_C,RES3_D,RES3_E,RES3_H,RES3_L,RES3_xHL,RES3_A, + RES4_B,RES4_C,RES4_D,RES4_E,RES4_H,RES4_L,RES4_xHL,RES4_A, + RES5_B,RES5_C,RES5_D,RES5_E,RES5_H,RES5_L,RES5_xHL,RES5_A, + RES6_B,RES6_C,RES6_D,RES6_E,RES6_H,RES6_L,RES6_xHL,RES6_A, + RES7_B,RES7_C,RES7_D,RES7_E,RES7_H,RES7_L,RES7_xHL,RES7_A, + SET0_B,SET0_C,SET0_D,SET0_E,SET0_H,SET0_L,SET0_xHL,SET0_A, + SET1_B,SET1_C,SET1_D,SET1_E,SET1_H,SET1_L,SET1_xHL,SET1_A, + SET2_B,SET2_C,SET2_D,SET2_E,SET2_H,SET2_L,SET2_xHL,SET2_A, + SET3_B,SET3_C,SET3_D,SET3_E,SET3_H,SET3_L,SET3_xHL,SET3_A, + SET4_B,SET4_C,SET4_D,SET4_E,SET4_H,SET4_L,SET4_xHL,SET4_A, + SET5_B,SET5_C,SET5_D,SET5_E,SET5_H,SET5_L,SET5_xHL,SET5_A, + SET6_B,SET6_C,SET6_D,SET6_E,SET6_H,SET6_L,SET6_xHL,SET6_A, + SET7_B,SET7_C,SET7_D,SET7_E,SET7_H,SET7_L,SET7_xHL,SET7_A +}; + +enum CodesED +{ + DB_00,DB_01,DB_02,DB_03,DB_04,DB_05,DB_06,DB_07, + DB_08,DB_09,DB_0A,DB_0B,DB_0C,DB_0D,DB_0E,DB_0F, + DB_10,DB_11,DB_12,DB_13,DB_14,DB_15,DB_16,DB_17, + DB_18,DB_19,DB_1A,DB_1B,DB_1C,DB_1D,DB_1E,DB_1F, + DB_20,DB_21,DB_22,DB_23,DB_24,DB_25,DB_26,DB_27, + DB_28,DB_29,DB_2A,DB_2B,DB_2C,DB_2D,DB_2E,DB_2F, + DB_30,DB_31,DB_32,DB_33,DB_34,DB_35,DB_36,DB_37, + DB_38,DB_39,DB_3A,DB_3B,DB_3C,DB_3D,DB_3E,DB_3F, + IN_B_xC,OUT_xC_B,SBC_HL_BC,LD_xWORDe_BC,NEG,RETN,IM_0,LD_I_A, + IN_C_xC,OUT_xC_C,ADC_HL_BC,LD_BC_xWORDe,DB_4C,RETI,DB_,LD_R_A, + IN_D_xC,OUT_xC_D,SBC_HL_DE,LD_xWORDe_DE,DB_54,DB_55,IM_1,LD_A_I, + IN_E_xC,OUT_xC_E,ADC_HL_DE,LD_DE_xWORDe,DB_5C,DB_5D,IM_2,LD_A_R, + IN_H_xC,OUT_xC_H,SBC_HL_HL,LD_xWORDe_HL,DB_64,DB_65,DB_66,RRD, + IN_L_xC,OUT_xC_L,ADC_HL_HL,LD_HL_xWORDe,DB_6C,DB_6D,DB_6E,RLD, + IN_F_xC,DB_71,SBC_HL_SP,LD_xWORDe_SP,DB_74,DB_75,DB_76,DB_77, + IN_A_xC,OUT_xC_A,ADC_HL_SP,LD_SP_xWORDe,DB_7C,DB_7D,DB_7E,DB_7F, + DB_80,DB_81,DB_82,DB_83,DB_84,DB_85,DB_86,DB_87, + DB_88,DB_89,DB_8A,DB_8B,DB_8C,DB_8D,DB_8E,DB_8F, + DB_90,DB_91,DB_92,DB_93,DB_94,DB_95,DB_96,DB_97, + DB_98,DB_99,DB_9A,DB_9B,DB_9C,DB_9D,DB_9E,DB_9F, + LDI,CPI,INI,OUTI,DB_A4,DB_A5,DB_A6,DB_A7, + LDD,CPD,IND,OUTD,DB_AC,DB_AD,DB_AE,DB_AF, + LDIR,CPIR,INIR,OTIR,DB_B4,DB_B5,DB_B6,DB_B7, + LDDR,CPDR,INDR,OTDR,DB_BC,DB_BD,DB_BE,DB_BF, + DB_C0,DB_C1,DB_C2,DB_C3,DB_C4,DB_C5,DB_C6,DB_C7, + DB_C8,DB_C9,DB_CA,DB_CB,DB_CC,DB_CD,DB_CE,DB_CF, + DB_D0,DB_D1,DB_D2,DB_D3,DB_D4,DB_D5,DB_D6,DB_D7, + DB_D8,DB_D9,DB_DA,DB_DB,DB_DC,DB_DD,DB_DE,DB_DF, + DB_E0,DB_E1,DB_E2,DB_E3,DB_E4,DB_E5,DB_E6,DB_E7, + DB_E8,DB_E9,DB_EA,DB_EB,DB_EC,DB_ED,DB_EE,DB_EF, + DB_F0,DB_F1,DB_F2,DB_F3,DB_F4,DB_F5,DB_F6,DB_F7, + DB_F8,DB_F9,DB_FA,DB_FB,DB_FC,DB_FD,DB_FE,DB_FF +}; + +static void CodesCB(register Z80 *R) +{ + register byte I; + + I=OpZ80(R->PC.W++); + R->ICount-=CyclesCB[I]; + switch(I) + { +#include "CodesCB.h" + default: + if(R->TrapBadOps) + printf + ( + "[Z80 %lX] Unrecognized instruction: CB %02X at PC=%04X\n", + (long)(R->User),OpZ80(R->PC.W-1),R->PC.W-2 + ); + } +} + +static void CodesDDCB(register Z80 *R) +{ + register pair J; + register byte I; + +#define XX IX + J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + I=OpZ80(R->PC.W++); + R->ICount-=CyclesXXCB[I]; + switch(I) + { +#include "CodesXCB.h" + default: + if(R->TrapBadOps) + printf + ( + "[Z80 %lX] Unrecognized instruction: DD CB %02X %02X at PC=%04X\n", + (long)(R->User),OpZ80(R->PC.W-2),OpZ80(R->PC.W-1),R->PC.W-4 + ); + } +#undef XX +} + +static void CodesFDCB(register Z80 *R) +{ + register pair J; + register byte I; + +#define XX IY + J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + I=OpZ80(R->PC.W++); + R->ICount-=CyclesXXCB[I]; + switch(I) + { +#include "CodesXCB.h" + default: + if(R->TrapBadOps) + printf + ( + "[Z80 %lX] Unrecognized instruction: FD CB %02X %02X at PC=%04X\n", + (long)R->User,OpZ80(R->PC.W-2),OpZ80(R->PC.W-1),R->PC.W-4 + ); + } +#undef XX +} + +static void CodesED(register Z80 *R) +{ + register byte I; + register pair J; + + I=OpZ80(R->PC.W++); + R->ICount-=CyclesED[I]; + switch(I) + { +#include "CodesED.h" + case PFX_ED: + R->PC.W--;break; + default: + if(R->TrapBadOps) + printf + ( + "[Z80 %lX] Unrecognized instruction: ED %02X at PC=%04X\n", + (long)R->User,OpZ80(R->PC.W-1),R->PC.W-2 + ); + } +} + +static void CodesDD(register Z80 *R) +{ + register byte I; + register pair J; + +#define XX IX + I=OpZ80(R->PC.W++); + R->ICount-=CyclesXX[I]; + switch(I) + { +#include "CodesXX.h" + case PFX_FD: + case PFX_DD: + R->PC.W--;break; + case PFX_CB: + CodesDDCB(R);break; + default: + if(R->TrapBadOps) + printf + ( + "[Z80 %lX] Unrecognized instruction: DD %02X at PC=%04X\n", + (long)R->User,OpZ80(R->PC.W-1),R->PC.W-2 + ); + } +#undef XX +} + +static void CodesFD(register Z80 *R) +{ + register byte I; + register pair J; + +#define XX IY + I=OpZ80(R->PC.W++); + R->ICount-=CyclesXX[I]; + switch(I) + { +#include "CodesXX.h" + case PFX_FD: + case PFX_DD: + R->PC.W--;break; + case PFX_CB: + CodesFDCB(R);break; + default: + printf + ( + "Unrecognized instruction: FD %02X at PC=%04X\n", + OpZ80(R->PC.W-1),R->PC.W-2 + ); + } +#undef XX +} + +/** ResetZ80() ***********************************************/ +/** This function can be used to reset the register struct **/ +/** before starting execution with Z80(). It sets the **/ +/** registers to their supposed initial values. **/ +/*************************************************************/ +void ResetZ80(Z80 *R, register int Cycles) +{ + R->IPeriod = Cycles; + R->PC.W = 0x0000; + R->SP.W = 0xF000; + R->AF.W = 0x0000; + R->BC.W = 0x0000; + R->DE.W = 0x0000; + R->HL.W = 0x0000; + R->AF1.W = 0x0000; + R->BC1.W = 0x0000; + R->DE1.W = 0x0000; + R->HL1.W = 0x0000; + R->IX.W = 0x0000; + R->IY.W = 0x0000; + R->I = 0x00; + R->R = 0x00; + R->IFF = 0x00; + R->ICount = R->IPeriod; + R->IRequest = INT_NONE; + R->IBackup = 0; + + JumpZ80(R->PC.W); +} + +/** ExecZ80() ************************************************/ +/** This function will execute given number of Z80 cycles. **/ +/** It will then return the number of cycles left, possibly **/ +/** negative, and current register values in R. **/ +/*************************************************************/ +#ifdef EXECZ80 +int ExecZ80(register Z80 *R,register int RunCycles) +{ + register byte I; + register pair J; + + for(R->ICount=RunCycles;;) + { + while(R->ICount>0) + { +#ifdef DEBUG + /* Turn tracing on when reached trap address */ + if(R->PC.W==R->Trap) R->Trace=1; + /* Call single-step debugger, exit if requested */ + if(R->Trace) + if(!DebugZ80(R)) return(R->ICount); +#endif + + /* Read opcode and count cycles */ + I=OpZ80(R->PC.W++); + /* Count cycles */ + R->ICount-=Cycles[I]; + + /* Interpret opcode */ + switch(I) + { +#include "Codes.h" + case PFX_CB: CodesCB(R);break; + case PFX_ED: CodesED(R);break; + case PFX_FD: CodesFD(R);break; + case PFX_DD: CodesDD(R);break; + } + } + + /* Unless we have come here after EI, exit */ + if(!(R->IFF&IFF_EI)) return(R->ICount); + else + { + /* Done with AfterEI state */ + R->IFF=(R->IFF&~IFF_EI)|IFF_1; + /* Restore the ICount */ + R->ICount+=R->IBackup-1; + /* Interrupt CPU if needed */ + if((R->IRequest!=INT_NONE)&&(R->IRequest!=INT_QUIT)) IntZ80(R,R->IRequest); + } + } +} +#endif /* EXECZ80 */ + +/** IntZ80() *************************************************/ +/** This function will generate interrupt of given vector. **/ +/*************************************************************/ +void IntZ80(Z80 *R,word Vector) +{ + /* If HALTed, take CPU off HALT instruction */ + if(R->IFF&IFF_HALT) { R->PC.W++;R->IFF&=~IFF_HALT; } + + if((R->IFF&IFF_1)||(Vector==INT_NMI)) + { + /* Save PC on stack */ + M_PUSH(PC); + + /* Automatically reset IRequest if needed */ + if(R->IAutoReset&&(Vector==R->IRequest)) R->IRequest=INT_NONE; + + /* If it is NMI... */ + if(Vector==INT_NMI) + { + /* Clear IFF1 */ + R->IFF&=~(IFF_1|IFF_EI); + /* Jump to hardwired NMI vector */ + R->PC.W=0x0066; + JumpZ80(0x0066); + /* Done */ + return; + } + + /* Further interrupts off */ + R->IFF&=~(IFF_1|IFF_2|IFF_EI); + + /* If in IM2 mode... */ + if(R->IFF&IFF_IM2) + { + /* Make up the vector address */ + Vector=(Vector&0xFF)|((word)(R->I)<<8); + /* Read the vector */ + R->PC.B.l=RdZ80(Vector++); + R->PC.B.h=RdZ80(Vector); + JumpZ80(R->PC.W); + /* Done */ + return; + } + + /* If in IM1 mode, just jump to hardwired IRQ vector */ + if(R->IFF&IFF_IM1) { R->PC.W=0x0038;JumpZ80(0x0038);return; } + + /* If in IM0 mode... */ + + /* Jump to a vector */ + switch(Vector) + { + case INT_RST00: R->PC.W=0x0000;JumpZ80(0x0000);break; + case INT_RST08: R->PC.W=0x0008;JumpZ80(0x0008);break; + case INT_RST10: R->PC.W=0x0010;JumpZ80(0x0010);break; + case INT_RST18: R->PC.W=0x0018;JumpZ80(0x0018);break; + case INT_RST20: R->PC.W=0x0020;JumpZ80(0x0020);break; + case INT_RST28: R->PC.W=0x0028;JumpZ80(0x0028);break; + case INT_RST30: R->PC.W=0x0030;JumpZ80(0x0030);break; + case INT_RST38: R->PC.W=0x0038;JumpZ80(0x0038);break; + } + } +} + +/** RunZ80() *************************************************/ +/** This function will run Z80 code until an LoopZ80() call **/ +/** returns INT_QUIT. It will return the PC at which **/ +/** emulation stopped, and current register values in R. **/ +/*************************************************************/ +#ifndef EXECZ80 +word RunZ80(Z80 *R) +{ + register byte I; + register pair J; + + for(;;) + { +#ifdef DEBUG + /* Turn tracing on when reached trap address */ + if(R->PC.W==R->Trap) R->Trace=1; + /* Call single-step debugger, exit if requested */ + if(R->Trace) + if(!DebugZ80(R)) return(R->PC.W); +#endif + + I=OpZ80(R->PC.W++); + R->ICount-=Cycles[I]; + + switch(I) + { +#include "Codes.h" + case PFX_CB: CodesCB(R);break; + case PFX_ED: CodesED(R);break; + case PFX_FD: CodesFD(R);break; + case PFX_DD: CodesDD(R);break; + } + + /* If cycle counter expired... */ + if(R->ICount<=0) + { + /* If we have come after EI, get address from IRequest */ + /* Otherwise, get it from the loop handler */ + if(R->IFF&IFF_EI) + { + R->IFF=(R->IFF&~IFF_EI)|IFF_1; /* Done with AfterEI state */ + R->ICount+=R->IBackup-1; /* Restore the ICount */ + + /* Call periodic handler or set pending IRQ */ + if(R->ICount>0) J.W=R->IRequest; + else + { + J.W=LoopZ80(R); /* Call periodic handler */ + R->ICount+=R->IPeriod; /* Reset the cycle counter */ + if(J.W==INT_NONE) J.W=R->IRequest; /* Pending IRQ */ + } + } + else + { + J.W=LoopZ80(R); /* Call periodic handler */ + R->ICount+=R->IPeriod; /* Reset the cycle counter */ + if(J.W==INT_NONE) J.W=R->IRequest; /* Pending IRQ */ + } + + if(J.W==INT_QUIT) return(R->PC.W); /* Exit if INT_QUIT */ + if(J.W!=INT_NONE) IntZ80(R,J.W); /* Int-pt if needed */ + } + } + + /* Execution stopped */ + return(R->PC.W); +} +#endif /* !EXECZ80 */ diff --git a/MCUME_pico/picospeccy/Z80.h b/MCUME_pico/picospeccy/Z80.h new file mode 100644 index 0000000..87a6b40 --- /dev/null +++ b/MCUME_pico/picospeccy/Z80.h @@ -0,0 +1,193 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** Z80.h **/ +/** **/ +/** This file contains declarations relevant to emulation **/ +/** of Z80 CPU. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ +#ifndef Z80_H +#define Z80_H + + #include + + +#define EXECZ80 // run a few cycles + +#ifdef __cplusplus +extern "C" { +#endif + + /* Compilation options: */ +/* #define DEBUG */ /* Compile debugging version */ +#define LSB_FIRST /* Compile for low-endian CPU */ +// #define MSB_FIRST /* Compile for hi-endian CPU */ + + /* LoopZ80() may return: */ +#define INT_RST00 0x00C7 /* RST 00h */ +#define INT_RST08 0x00CF /* RST 08h */ +#define INT_RST10 0x00D7 /* RST 10h */ +#define INT_RST18 0x00DF /* RST 18h */ +#define INT_RST20 0x00E7 /* RST 20h */ +#define INT_RST28 0x00EF /* RST 28h */ +#define INT_RST30 0x00F7 /* RST 30h */ +#define INT_RST38 0x00FF /* RST 38h */ +#define INT_IRQ INT_RST38 /* Default IRQ opcode is FFh */ +#define INT_NMI 0xFFFD /* Non-maskable interrupt */ +#define INT_NONE 0xFFFF /* No interrupt required */ +#define INT_QUIT 0xFFFE /* Exit the emulation */ + + /* Bits in Z80 F register: */ +#define S_FLAG 0x80 /* 1: Result negative */ +#define Z_FLAG 0x40 /* 1: Result is zero */ +#define H_FLAG 0x10 /* 1: Halfcarry/Halfborrow */ +#define P_FLAG 0x04 /* 1: Result is even */ +#define V_FLAG 0x04 /* 1: Overflow occured */ +#define N_FLAG 0x02 /* 1: Subtraction occured */ +#define C_FLAG 0x01 /* 1: Carry/Borrow occured */ + + /* Bits in IFF flip-flops: */ +#define IFF_1 0x01 /* IFF1 flip-flop */ +#define IFF_IM1 0x02 /* 1: IM1 mode */ +#define IFF_IM2 0x04 /* 1: IM2 mode */ +#define IFF_2 0x08 /* IFF2 flip-flop */ +#define IFF_EI 0x20 /* 1: EI pending */ +#define IFF_HALT 0x80 /* 1: CPU HALTed */ + +/** Simple Datatypes *****************************************/ +/** NOTICE: sizeof(byte)=1 and sizeof(word)=2 **/ +/*************************************************************/ +#ifndef BYTE_TYPE_DEFINED +#define BYTE_TYPE_DEFINED +typedef uint8_t byte; +#endif +#ifndef WORD_TYPE_DEFINED +#define WORD_TYPE_DEFINED +typedef uint16_t word; +#endif +typedef int8_t offset; + +/** Structured Datatypes *************************************/ +/** NOTICE: #define LSB_FIRST for machines where least **/ +/** signifcant byte goes first. **/ +/*************************************************************/ +typedef union +{ +#ifdef LSB_FIRST + struct { byte l,h; } B; +#else + struct { byte h,l; } B; +#endif + word W; +} pair; + +typedef struct +{ + pair AF,BC,DE,HL,IX,IY,PC,SP; /* Main registers */ + pair AF1,BC1,DE1,HL1; /* Shadow registers */ + byte IFF,I; /* Interrupt registers */ + byte R; /* Refresh register */ + + int IPeriod,ICount; /* Set IPeriod to number of CPU cycles */ + /* between calls to LoopZ80() */ + int IBackup; /* Private, don't touch */ + word IRequest; /* Set to address of pending IRQ */ + byte IAutoReset; /* Set to 1 to autom. reset IRequest */ + byte TrapBadOps; /* Set to 1 to warn of illegal opcodes */ + word Trap; /* Set Trap to address to trace from */ + byte Trace; /* Set Trace=1 to start tracing */ + void *User; /* Arbitrary user data (ID,RAM*,etc.) */ +} Z80; + +/** ResetZ80() ***********************************************/ +/** This function can be used to reset the registers before **/ +/** starting execution with RunZ80(). It sets registers to **/ +/** their initial values. **/ +/*************************************************************/ +void ResetZ80(register Z80 *R, register int Cycles); + +/** ExecZ80() ************************************************/ +/** This function will execute given number of Z80 cycles. **/ +/** It will then return the number of cycles left, possibly **/ +/** negative, and current register values in R. **/ +/*************************************************************/ +#ifdef EXECZ80 +int ExecZ80(register Z80 *R,register int RunCycles); +#endif + +/** IntZ80() *************************************************/ +/** This function will generate interrupt of given vector. **/ +/*************************************************************/ +void IntZ80(register Z80 *R,register word Vector); + +/** RunZ80() *************************************************/ +/** This function will run Z80 code until an LoopZ80() call **/ +/** returns INT_QUIT. It will return the PC at which **/ +/** emulation stopped, and current register values in R. **/ +/*************************************************************/ +#ifndef EXECZ80 +word RunZ80(register Z80 *R); +#endif + +/** RdZ80()/WrZ80() ******************************************/ +/** These functions are called when access to RAM occurs. **/ +/** They allow to control memory access. **/ +/************************************ TO BE WRITTEN BY USER **/ +void WrZ80(register word Addr,register byte Value); +byte RdZ80(register word Addr); + +/** InZ80()/OutZ80() *****************************************/ +/** Z80 emulation calls these functions to read/write from **/ +/** I/O ports. There can be 65536 I/O ports, but only first **/ +/** 256 are usually used. **/ +/************************************ TO BE WRITTEN BY USER **/ +void OutZ80(register word Port,register byte Value); +byte InZ80(register word Port); + +/** PatchZ80() ***********************************************/ +/** Z80 emulation calls this function when it encounters a **/ +/** special patch command (ED FE) provided for user needs. **/ +/** For example, it can be called to emulate BIOS calls, **/ +/** such as disk and tape access. Replace it with an empty **/ +/** macro for no patching. **/ +/************************************ TO BE WRITTEN BY USER **/ +void PatchZ80(register Z80 *R); + +/** DebugZ80() ***********************************************/ +/** This function should exist if DEBUG is #defined. When **/ +/** Trace!=0, it is called after each command executed by **/ +/** the CPU, and given the Z80 registers. Emulation exits **/ +/** if DebugZ80() returns 0. **/ +/*************************************************************/ +#ifdef DEBUG +byte DebugZ80(register Z80 *R); +#endif + +/** LoopZ80() ************************************************/ +/** Z80 emulation calls this function periodically to check **/ +/** if the system hardware requires any interrupts. This **/ +/** function must return an address of the interrupt vector **/ +/** (0x0038, 0x0066, etc.) or INT_NONE for no interrupt. **/ +/** Return INT_QUIT to exit the emulation loop. **/ +/************************************ TO BE WRITTEN BY USER **/ +word LoopZ80(register Z80 *R); + +/** JumpZ80() ************************************************/ +/** Z80 emulation calls this function when it executes a **/ +/** JP, JR, CALL, RST, or RET. You can use JumpZ80() to **/ +/** trap these opcodes and switch memory layout. **/ +/************************************ TO BE WRITTEN BY USER **/ +#ifndef JUMPZ80 +#define JumpZ80(PC) +#else +void JumpZ80(word PC); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* Z80_H */ diff --git a/MCUME_pico/picospeccy/emuapi.cpp b/MCUME_pico/picospeccy/emuapi.cpp new file mode 100644 index 0000000..75f32fd --- /dev/null +++ b/MCUME_pico/picospeccy/emuapi.cpp @@ -0,0 +1,804 @@ +#define KEYMAP_PRESENT 1 + +#define PROGMEM + +#include "pico.h" +#include "pico/stdlib.h" +#include "hardware/adc.h" +#include +#include + +extern "C" { + #include "emuapi.h" + #include "iopins.h" +} + + +#include "vga_t_dma.h" +const uint16_t deflogo[] = { + 0,0 +}; +static const uint16_t * logo = deflogo; + +#define MAX_FILES 64 +#define MAX_FILENAME_SIZE 24 +#define MAX_MENULINES 9 +#define TEXT_HEIGHT 16 +#define TEXT_WIDTH 8 +#define MENU_FILE_XOFFSET (6*TEXT_WIDTH) +#define MENU_FILE_YOFFSET (2*TEXT_HEIGHT) +#define MENU_FILE_W (MAX_FILENAME_SIZE*TEXT_WIDTH) +#define MENU_FILE_H (MAX_MENULINES*TEXT_HEIGHT) +#define MENU_FILE_BGCOLOR RGBVAL16(0x00,0x00,0x40) +#define MENU_JOYS_YOFFSET (12*TEXT_HEIGHT) +#define MENU_VBAR_XOFFSET (0*TEXT_WIDTH) +#define MENU_VBAR_YOFFSET (MENU_FILE_YOFFSET) + +#define MENU_TFT_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_TFT_YOFFSET (MENU_VBAR_YOFFSET+32) +#define MENU_VGA_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_VGA_YOFFSET (MENU_VBAR_YOFFSET+MENU_FILE_H-32-37) + +extern TFT_T_DMA tft; + +static char romspath[64]; +static int nbFiles=0; +static int curFile=0; +static int topFile=0; +static char selection[MAX_FILENAME_SIZE+1]=""; +static char files[MAX_FILES][MAX_FILENAME_SIZE]; +static bool menuRedraw=true; + +static bool i2cKeyboardPresent = false; +static unsigned short * keys; +static int keyMap; + +static int keypadval=0; +static bool joySwapped = false; +static uint16_t bLastState; +static int xRef; +static int yRef; +static uint8_t usbnavpad=0; + +static bool menuOn=true; + + + + +void emu_printf(char * text) +{ + printf("%s\n",text); +} + +void emu_printf(int val) +{ + printf("%d\n",val); +} + +void emu_printi(int val) +{ + printf("%d\n",val); +} + +void emu_printh(int val) +{ + printf("0x%.8\n",val); +} + +static int malbufpt = 0; +static char malbuf[EXTRA_HEAP]; + +void * emu_Malloc(int size) +{ + void * retval = malloc(size); + if (!retval) { + emu_printf("failled to allocate"); + emu_printf(size); + emu_printf("fallback"); + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + } + else { + emu_printf("failure to allocate"); + } + } + else { + emu_printf("could allocate dynamic "); + emu_printf(size); + } + + return retval; +} + +void * emu_MallocI(int size) +{ + void * retval = NULL; + + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + emu_printf("could allocate static "); + emu_printf(size); + } + else { + emu_printf("failure to allocate"); + } + + return retval; +} +void emu_Free(void * pt) +{ + free(pt); +} + + + + + +int emu_ReadAnalogJoyX(int min, int max) +{ +#ifdef PIN_JOY2_A1X + adc_select_input(0); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVX + val = 4095 - val; +#endif + val = val-xRef; + val = ((val*140)/100); + if ( (val > -512) && (val < 512) ) val = 0; + val = val+2048; + return (val*(max-min))/4096; +} + +int emu_ReadAnalogJoyY(int min, int max) +{ +#ifdef PIN_JOY2_A2Y + adc_select_input(1); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVY + val = 4095 - val; +#endif + val = val-yRef; + val = ((val*120)/100); + if ( (val > -512) && (val < 512) ) val = 0; + //val = (val*(max-min))/4096; + val = val+2048; + //return val+(max-min)/2; + return (val*(max-min))/4096; +} + + +static uint16_t readAnalogJoystick(void) +{ + uint16_t joysval = 0; + + int xReading = emu_ReadAnalogJoyX(0,256); + if (xReading > 128) joysval |= MASK_JOY2_LEFT; + else if (xReading < 128) joysval |= MASK_JOY2_RIGHT; + + int yReading = emu_ReadAnalogJoyY(0,256); + if (yReading < 128) joysval |= MASK_JOY2_UP; + else if (yReading > 128) joysval |= MASK_JOY2_DOWN; + +#ifdef PIN_JOY2_BTN + joysval |= (gpio_get(PIN_JOY2_BTN) ? 0 : MASK_JOY2_BTN); +#endif + return (joysval); +} + + +int emu_SwapJoysticks(int statusOnly) { + if (!statusOnly) { + if (joySwapped) { + joySwapped = false; + } + else { + joySwapped = true; + } + } + return(joySwapped?1:0); +} + +int emu_GetPad(void) +{ + return(keypadval/*|((joySwapped?1:0)<<7)*/); +} + +int emu_ReadKeys(void) +{ + uint16_t retval; + uint16_t j1 = readAnalogJoystick(); + uint16_t j2 = 0; + + // Second joystick +#if INVY +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_DOWN; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_UP; +#endif +#else +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_UP; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_DOWN; +#endif +#endif +#if INVX +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_LEFT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_RIGHT; +#endif +#else +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_RIGHT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_LEFT; +#endif +#endif +#ifdef PIN_JOY1_BTN + if ( !gpio_get(PIN_JOY1_BTN) ) j2 |= MASK_JOY2_BTN; +#endif + if (joySwapped) { + retval = ((j1 << 8) | j2); + } + else { + retval = ((j2 << 8) | j1); + } + + if (usbnavpad & MASK_JOY2_UP) retval |= MASK_JOY2_UP; + if (usbnavpad & MASK_JOY2_DOWN) retval |= MASK_JOY2_DOWN; + if (usbnavpad & MASK_JOY2_LEFT) retval |= MASK_JOY2_LEFT; + if (usbnavpad & MASK_JOY2_RIGHT) retval |= MASK_JOY2_RIGHT; + if (usbnavpad & MASK_JOY2_BTN) retval |= MASK_JOY2_BTN; +#ifdef PIN_KEY_USER1 + if ( !gpio_get(PIN_KEY_USER1) ) retval |= MASK_KEY_USER1; +#endif +#ifdef PIN_KEY_USER2 + if ( !gpio_get(PIN_KEY_USER2) ) retval |= MASK_KEY_USER2; +#endif +#ifdef PIN_KEY_USER3 + if ( !gpio_get(PIN_KEY_USER3) ) retval |= MASK_KEY_USER3; +#endif +#ifdef PIN_KEY_USER4 + if ( !gpio_get(PIN_KEY_USER4) ) retval |= MASK_KEY_USER4; +#endif + + //Serial.println(retval,HEX); + + if ( ((retval & (MASK_KEY_USER1+MASK_KEY_USER2)) == (MASK_KEY_USER1+MASK_KEY_USER2)) + || (retval & MASK_KEY_USER4 ) ) + { + } + + return (retval); +} + +unsigned short emu_DebounceLocalKeys(void) +{ + uint16_t bCurState = emu_ReadKeys(); + uint16_t bClick = bCurState & ~bLastState; + bLastState = bCurState; + + return (bClick); +} + +int emu_ReadI2CKeyboard(void) { + int retval=0; + + return(retval); +} + +void emu_InitJoysticks(void) { + + // Second Joystick +#ifdef PIN_JOY1_1 + gpio_set_pulls(PIN_JOY1_1,true,false); + gpio_set_dir(PIN_JOY1_1,GPIO_IN); +#endif +#ifdef PIN_JOY1_2 + gpio_set_pulls(PIN_JOY1_2,true,false); + gpio_set_dir(PIN_JOY1_2,GPIO_IN); +#endif +#ifdef PIN_JOY1_3 + gpio_set_pulls(PIN_JOY1_3,true,false); + gpio_set_dir(PIN_JOY1_3,GPIO_IN); +#endif +#ifdef PIN_JOY1_4 + gpio_set_pulls(PIN_JOY1_4,true,false); + gpio_set_dir(PIN_JOY1_4,GPIO_IN); +#endif +#ifdef PIN_JOY1_BTN + gpio_set_pulls(PIN_JOY1_BTN,true,false); + gpio_set_dir(PIN_JOY1_BTN,GPIO_IN); +#endif + +#ifdef PIN_KEY_USER1 + gpio_set_pulls(PIN_KEY_USER1,true,false); + gpio_set_dir(PIN_KEY_USER1,GPIO_IN); +#endif +#ifdef PIN_KEY_USER2 + gpio_set_pulls(PIN_KEY_USER2,true,false); + gpio_set_dir(PIN_KEY_USER2,GPIO_IN); +#endif +#ifdef PIN_KEY_USER3 + gpio_set_pulls(PIN_KEY_USER3,true,false); + gpio_set_dir(PIN_KEY_USER3,GPIO_IN); +#endif +#ifdef PIN_KEY_USER4 + gpio_set_pulls(PIN_KEY_USER4,true,false); + gpio_set_dir(PIN_KEY_USER4,GPIO_IN); +#endif +#ifdef PIN_JOY2_BTN + gpio_set_pulls(PIN_JOY2_BTN,true,false); + gpio_set_dir(PIN_JOY2_BTN,GPIO_IN); +#endif + +#ifdef PIN_JOY2_A1X + adc_init(); + adc_gpio_init(PIN_JOY2_A1X); + adc_gpio_init(PIN_JOY2_A2Y); + xRef=0; yRef=0; + for (int i=0; i<10; i++) { + adc_select_input(0); + xRef += adc_read(); + adc_select_input(1); + yRef += adc_read(); + sleep_ms(20); + } +#endif + +#if INVX + xRef = 4095 -xRef/10; +#else + xRef /= 10; +#endif +#if INVY + yRef = 4095 -yRef/10; +#else + yRef /= 10; +#endif +} + + + + +int emu_setKeymap(int index) { +} + + +#include "ff.h" +static FATFS fatfs; +static FIL file; +extern "C" int sd_init_driver(void); + +static int readNbFiles(char * rootdir) { + int totalFiles = 0; + + DIR dir; + FILINFO entry; + FRESULT fr = f_findfirst(&dir, &entry, rootdir, "*"); + while ( (fr == FR_OK) && (entry.fname[0]) && (totalFiles=0) { + menuRedraw=true; + curFile -= 9; + } else if (curFile!=0) { + menuRedraw=true; + curFile--; + } + } + else if (bClick & MASK_JOY2_DOWN) { + if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_JOY2_LEFT) || (bClick & MASK_JOY1_LEFT) ) { + if ((curFile<(nbFiles-9)) && (nbFiles)) { + curFile += 9; + menuRedraw=true; + } + else if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_KEY_USER2) ) { + emu_SwapJoysticks(0); + menuRedraw=true; + } + + if (menuRedraw && nbFiles) { + int fileIndex = 0; + tft.drawRectNoDma(MENU_FILE_XOFFSET,MENU_FILE_YOFFSET, MENU_FILE_W, MENU_FILE_H, MENU_FILE_BGCOLOR); +// if (curFile <= (MAX_MENULINES/2-1)) topFile=0; +// else topFile=curFile-(MAX_MENULINES/2); + if (curFile <= (MAX_MENULINES-1)) topFile=0; + else topFile=curFile-(MAX_MENULINES/2); + + //Serial.print("curfile: "); + //Serial.println(curFile); + //Serial.print("topFile: "); + //Serial.println(topFile); + + int i=0; + while (i=nbFiles) { + // no more files + break; + } + char * filename = &files[fileIndex][0]; + if (fileIndex >= topFile) { + if ((i+topFile) < nbFiles ) { + if ((i+topFile)==curFile) { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0x00), RGBVAL16(0xff,0x00,0x00), true); + strcpy(selection,filename); + } + else { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0xff), MENU_FILE_BGCOLOR, true); + } + } + i++; + } + fileIndex++; + } + + + tft.drawTextNoDma(48,MENU_JOYS_YOFFSET+8, (emu_SwapJoysticks(1)?(char*)"SWAP=1":(char*)"SWAP=0"), RGBVAL16(0x00,0xff,0xff), RGBVAL16(0x00,0x00,0xff), false); + menuRedraw=false; + } + + return (action); +} + +bool menuActive(void) +{ + return (menuOn); +} + +void toggleMenu(bool on) { + if (on) { + menuOn = true; + backgroundMenu(); + } else { + menuOn = false; + } +} + +char * menuSelection(void) +{ + return (selection); +} + + + + + + + + + +int emu_FileOpen(char * filename) +{ + int retval = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileOpen..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + retval = 1; + } + else { + emu_printf("FileOpen failed"); + } + return (retval); +} + +int emu_FileRead(char * buf, int size) +{ + unsigned char buffer[256]; + int remaining = size; + int byteread = 0; + unsigned int retval=0; + if (size < 256) { + if( !(f_read (&file, buffer, size, &retval)) ) + if (retval>0) { + memcpy(buf,buffer,retval); + byteread += retval; + } + } + else { + while (remaining>0) { + if( !(f_read (&file, buffer, 256, &retval)) ) + //f_read (&file, buffer, 256, &retval); + if (retval>0) { + //emu_printi(retval); + memcpy(buf,buffer,retval); + buf += retval; + byteread += retval; + remaining -= retval; + } + else { + break; + } + } + } + return byteread; +} + +unsigned char emu_FileGetc(void) { + unsigned char c; + unsigned int retval=0; + if( !(f_read (&file, &c, 1, &retval)) ) + if (retval != 1) { + emu_printf("emu_FileGetc failed"); + } + return c; +} + + +void emu_FileClose(void) +{ + f_close(&file); +} + +int emu_FileSize(char * filename) +{ + int filesize=0; + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileSize..."); + emu_printf(filepath); + FILINFO entry; + f_stat(filepath, &entry); + filesize = entry.fsize; + return(filesize); +} + +int emu_FileSeek(int seek) +{ + f_lseek(&file, seek); + return (seek); +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + unsigned int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } + + return(filesize); +} + +#ifdef SDIO + + +int emu_FileTell(void) +{ +#ifdef USE_SDFS + return (f_tell(&file)); +#else + return (50); +#endif +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + filesize = file.size(); + emu_printf(filesize); + + if (size >= filesize) + { + if (emu_FileRead(buf, filesize) != filesize) + { + emu_printf("File read failed"); + } + } + file.close(); + } +#endif + + return(filesize); +} + +int emu_LoadFileSeek(char * filename, char * buf, int size, int seek) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFileSeek..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + f_lseek(&file, seek); + emu_printf(size); + if (size >= filesize) + { + int retval=0; + if( (!f_read (&file, buf, size, &retval)) ) + if (retval != size) + { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + file.seek(seek); + emu_printf(size); + if (file.read(buf, size) != size) { + emu_printf("File read failed"); + } + file.close(); + } +#endif + + return(filesize); +} +#endif + + + +void emu_init(void) +{ + sd_init_driver(); + FRESULT fr = f_mount(&fatfs, "0:", 1); + //emu_FileSystemInit(); + + strcpy(romspath,ROMSDIR); + nbFiles = readNbFiles(romspath); + + emu_printf("SD initialized, files found: "); + emu_printi(nbFiles); + + emu_InitJoysticks(); +#ifdef SWAP_JOYSTICK + joySwapped = true; +#else + joySwapped = false; +#endif + + toggleMenu(true); +} + + +void emu_start(void) +{ + + usbnavpad = 0; + + keys = (unsigned short *)key_map1; + keyMap = 0; +} diff --git a/MCUME_pico/picospeccy/emuapi.h b/MCUME_pico/picospeccy/emuapi.h new file mode 100644 index 0000000..fa67ddc --- /dev/null +++ b/MCUME_pico/picospeccy/emuapi.h @@ -0,0 +1,153 @@ +#ifndef EMUAPI_H +#define EMUAPI_H + +#include "platform_config.h" + +//#define TIMER_REND 1 +#define EXTRA_HEAP 0x10 + +// Title: < > +#define TITLE " SPECTRUM Emulator" +#define ROMSDIR "spec" + +#define emu_Init(ROM) {spec_Init(); spec_Start(ROM);} +#define emu_Step(x) {spec_Step();} +#define emu_Input(x) {} + +#define PALETTE_SIZE 16 +#define VID_FRAME_SKIP 0x3 +#define TFT_VBUFFER_YCROP 0 +#define SINGLELINE_RENDERING 1 + +#define ACTION_NONE 0 +#define ACTION_MAXKBDVAL 225 +#define ACTION_EXITKBD 128 +#define ACTION_RUNTFT 129 +#define ACTION_RUNVGA 130 + +#ifdef KEYMAP_PRESENT + +#define TAREA_W_DEF 32 +#define TAREA_H_DEF 32 +#define TAREA_END 255 +#define TAREA_NEW_ROW 254 +#define TAREA_NEW_COL 253 +#define TAREA_XY 252 +#define TAREA_WH 251 + +#define KEYBOARD_X 16 +#define KEYBOARD_Y 32 +#define KEYBOARD_KEY_H 30 +#define KEYBOARD_KEY_W 28 +#define KEYBOARD_HIT_COLOR RGBVAL16(0xff,0x00,0x00) + +const unsigned short keysw[] = { + TAREA_XY,KEYBOARD_X,KEYBOARD_Y, + TAREA_WH,KEYBOARD_KEY_W,KEYBOARD_KEY_H, + TAREA_NEW_ROW,27,27,28,28,28,28,28,28,28,28, + TAREA_NEW_ROW,14,28,28,28,28,28,28,28,28,28,28, + TAREA_NEW_ROW,20,28,28,28,28,28,28,28,28,28,28, + TAREA_NEW_ROW,30,28,28,28,28,28,28,28,28,28, + TAREA_END}; +/* + {25, 6,27,29,224}, // vcxz + {10, 9, 7,22, 4}, // gfdsa + {23,21, 8,26,20}, // trewq + {34,33,32,31,30}, // 54321 + {35,36,37,38,39}, // 67890 + {28,24,12,18,19}, // yuiop + {11,13,14,15,40}, // hjkl + { 5,17,16,225,44}, // bnm +*/ + +const unsigned short key_map1[] = { + 30,31,32,33,34,35,36,37,38,39, + 0, 20,26, 8,21,23,28,25,12,18,19, + 0, 4, 9, 7,22, 4,11,13,14,15,40, + 25, 6,27,29,224,5,17,16,225,44 + }; + +#ifdef HAS_I2CKBD +const unsigned short i2ckeys[] = { + 0X0080,0X0008,0X0180,0X0108,0X0280,0X0208,0X0380,0X0308,0X0480,0X0408, + 0, 0X0040,0X0004,0X0140,0X0104,0X0240,0X0204,0X0340,0X0304,0X0440,0X0404, + 0, 0X0020,0X0002,0X0120,0X0102,0X0220,0X0202,0X0320,0X0302,0X0420,0X0402, + 0X0010,0X0001,0X0110,0X0101,0X0210,0X0201,0X0310,0X0301,0X0410,0X0401, + }; +#endif + +#endif + + +#define MASK_JOY2_RIGHT 0x0001 +#define MASK_JOY2_LEFT 0x0002 +#define MASK_JOY2_UP 0x0004 +#define MASK_JOY2_DOWN 0x0008 +#define MASK_JOY2_BTN 0x0010 +#define MASK_KEY_USER1 0x0020 +#define MASK_KEY_USER2 0x0040 +#define MASK_KEY_USER3 0x0080 +#define MASK_JOY1_RIGHT 0x0100 +#define MASK_JOY1_LEFT 0x0200 +#define MASK_JOY1_UP 0x0400 +#define MASK_JOY1_DOWN 0x0800 +#define MASK_JOY1_BTN 0x1000 +#define MASK_KEY_USER4 0x2000 + + + +extern void emu_init(void); +extern void emu_start(void); +extern void emu_resetSD(void); + +extern void emu_printf(char * text); +extern void emu_printi(int val); +extern void * emu_Malloc(int size); +extern void emu_Free(void * pt); + +extern int emu_FileOpen(char * filename); +extern int emu_FileRead(char * buf, int size); +extern unsigned char emu_FileGetc(void); +extern int emu_FileSeek(int seek); +extern void emu_FileClose(void); +extern int emu_FileSize(char * filename); +extern int emu_LoadFile(char * filename, char * buf, int size); +extern int emu_LoadFileSeek(char * filename, char * buf, int size, int seek); +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); + +extern void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index); +extern void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride); +extern void emu_DrawLine(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line); +extern void emu_DrawVsync(void); +extern int emu_FrameSkip(void); +extern void * emu_LineBuffer(int line); + +extern void emu_InitJoysticks(void); +extern int emu_SwapJoysticks(int statusOnly); +extern unsigned short emu_DebounceLocalKeys(void); +extern int emu_ReadKeys(void); +extern int emu_GetPad(void); +extern int emu_ReadAnalogJoyX(int min, int max); +extern int emu_ReadAnalogJoyY(int min, int max); +extern int emu_ReadI2CKeyboard(void); +extern void emu_KeyboardOnUp(int keymodifer, int key); +extern void emu_KeyboardOnDown(int keymodifer, int key); + +extern void emu_sndPlaySound(int chan, int volume, int freq); +extern void emu_sndPlayBuzz(int size, int val); +extern void emu_sndInit(); +extern void emu_resetus(void); +extern int emu_us(void); + +extern int emu_setKeymap(int index); + +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); +extern void emu_printh(int val); + +#endif diff --git a/MCUME_pico/picospeccy/font8x8.h b/MCUME_pico/picospeccy/font8x8.h new file mode 100644 index 0000000..4f773da --- /dev/null +++ b/MCUME_pico/picospeccy/font8x8.h @@ -0,0 +1,135 @@ + +// Font: c64_lower.64c + +const unsigned char font8x8[128][8] PROGMEM = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) + { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) + { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) + { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) + { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//) + { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) + { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) + { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) + { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F +}; + diff --git a/MCUME_pico/picospeccy/iopins.h b/MCUME_pico/picospeccy/iopins.h new file mode 100644 index 0000000..a636576 --- /dev/null +++ b/MCUME_pico/picospeccy/iopins.h @@ -0,0 +1,42 @@ +#ifndef IOPINS_H +#define IOPINS_H + +#include "platform_config.h" + + +// VGA (see in code!!!) +/* +2-9 RRRGGGBB +10-11 VSYNC and HSYNC +*/ + +// SD (see SPI0 in code!!!) +/* +#define SD_SCLK 18 +#define SD_MOSI 19 +#define SD_MISO 16 +#define SD_CS 17 +*/ + +// I2C keyboard (not used) +/* +#define I2C_SCL_IO 15? +#define I2C_SDA_IO 14? +*/ + +// Analog joystick (primary) for JOY2 and 3 extra buttons +#define PIN_JOY2_A1X 26 +#define PIN_JOY2_A2Y 27 +#define PIN_JOY2_BTN 22 +#define PIN_KEY_USER1 20 +#define PIN_KEY_USER2 21 + +// Second joystick +//#define PIN_JOY1_BTN 2 +//#define PIN_JOY1_1 14 // UP +//#define PIN_JOY1_2 7 // DOWN +//#define PIN_JOY1_3 6 // RIGHT +//#define PIN_JOY1_4 5 // LEFT + + +#endif diff --git a/MCUME_pico/picospeccy/keyboard_osd.h b/MCUME_pico/picospeccy/keyboard_osd.h new file mode 100644 index 0000000..062eb4e --- /dev/null +++ b/MCUME_pico/picospeccy/keyboard_osd.h @@ -0,0 +1,20 @@ + +#ifndef keyboard_osd_h_ +#define keyboard_osd_h_ + +extern bool virtualkeyboardIsActive(void); +extern void drawVirtualkeyboard(void); +extern void toggleVirtualkeyboard(bool keepOn); +extern void handleVirtualkeyboard(void); + +extern bool callibrationActive(void); +extern int handleCallibration(uint16_t bClick); + +extern bool menuActive(void); +extern char * menuSelection(void); +extern void toggleMenu(bool on); +extern int handleMenu(uint16_t bClick); + + +#endif + diff --git a/MCUME_pico/picospeccy/picospeccy.cpp b/MCUME_pico/picospeccy/picospeccy.cpp new file mode 100644 index 0000000..9c95100 --- /dev/null +++ b/MCUME_pico/picospeccy/picospeccy.cpp @@ -0,0 +1,129 @@ +#include "pico.h" +#include "pico/stdlib.h" + +extern "C" { + #include "iopins.h" + #include "emuapi.h" +} +#include "keyboard_osd.h" +#include "vga_t_dma.h" +extern "C" { +#include "spec.h" +} +#include + + +TFT_T_DMA tft; +static int skip=0; + +int main(void) { + stdio_init_all(); + tft.begin(VGA_MODE_320x240); + emu_init(); + while (true) { + if (menuActive()) { + uint16_t bClick = emu_DebounceLocalKeys(); + int action = handleMenu(bClick); + char * filename = menuSelection(); + if (action == ACTION_RUNTFT) { + toggleMenu(false); + emu_start(); + emu_Init(filename); + tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) ); + tft.startDMA(); + } + tft.waitSync(); + } + else { + emu_Step(); + uint16_t bClick = emu_DebounceLocalKeys(); + emu_Input(bClick); + } + //int c = getchar_timeout_us(0); + //switch (c) { + // case ' ': + // printf("test: %d\n", 1); + // break; + //} + } +} + +static unsigned char palette8[PALETTE_SIZE]; + +void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index) +{ + if (index + {10, 9, 7,22, 4}, // gfdsa + {23,21, 8,26,20}, // trewq + {34,33,32,31,30}, // 54321 + {35,36,37,38,39}, // 67890 + {28,24,12,18,19}, // yuiop + {11,13,14,15,40}, // hjkl + { 5,17,16,225,44}, // bnm +}; + +static byte Z80_RAM[0xC000]; // 48k RAM +static Z80 myCPU; +static byte * volatile VRAM=Z80_RAM; // What will be displayed. Generally ZX VRAM, can be changed for alt screens. + +//extern const byte rom_zx48_rom[]; // 16k ROM +static byte key_ram[8]={ + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; // Keyboard buffer +byte out_ram; // Output (fe port) +static byte kempston_ram; // Kempston-Joystick Buffer + +static int v_border=0; +static int h_border=32; +static int bordercolor=0; +static byte * XBuf=0; + +static int lastaudio=CYCLES_PER_FRAME; +static byte buzzer_val; + + +void displayscanline(int y, int f_flash) +{ + int x, row, col, dir_p, dir_a, pixeles, tinta, papel, atributos; + + row = y + v_border; // 4 & 32 = graphical screen offset + col = 0; // 32+256+32=320 4+192+4=200 (res=320x200) + + for (x = 0; x < h_border; x++) { + XBuf[col++] = bordercolor; + } + + dir_p = ((y & 0xC0) << 5) + ((y & 0x07) << 8) + ((y & 0x38) << 2); + dir_a = 0x1800 + (32 * (y >> 3)); + + for (x = 0; x < 32; x++) + { + pixeles= VRAM[dir_p++]; + atributos=VRAM[dir_a++]; + + if (((atributos & 0x80) == 0) || (f_flash == 0)) + { + tinta = (atributos & 0x07) + ((atributos & 0x40) >> 3); + papel = (atributos & 0x78) >> 3; + } + else + { + papel = (atributos & 0x07) + ((atributos & 0x40) >> 3); + tinta = (atributos & 0x78) >> 3; + } + XBuf[col++] = ((pixeles & 0x80) ? tinta : papel); + XBuf[col++] = ((pixeles & 0x40) ? tinta : papel); + XBuf[col++] = ((pixeles & 0x20) ? tinta : papel); + XBuf[col++] = ((pixeles & 0x10) ? tinta : papel); + XBuf[col++] = ((pixeles & 0x08) ? tinta : papel); + XBuf[col++] = ((pixeles & 0x04) ? tinta : papel); + XBuf[col++] = ((pixeles & 0x02) ? tinta : papel); + XBuf[col++] = ((pixeles & 0x01) ? tinta : papel); + } + + for (x = 0; x < h_border; x++) { + XBuf[col++] = bordercolor; + } + + emu_DrawLine(XBuf, WIDTH, HEIGHT, y); +} + +static void displayScreen(void) { + int y; + static int f_flash = 1, f_flash2 = 0; + f_flash2 = (f_flash2++) % 32; + if (f_flash2 < 16) + f_flash = 1; + else + f_flash = 0; + + for (y = 0; y < HEIGHT; y++) + displayscanline (y, f_flash); + + emu_DrawVsync(); +} + + + +static void InitKeyboard(void){ + memset(key_ram, 0xff, sizeof(key_ram)); +} + +static void UpdateKeyboard (void) +{ + int nb_keys=0; + int k = emu_GetPad(); + int hk = emu_ReadI2CKeyboard(); + if ( (k == 0) && (hk == 0) ) { + memset(key_ram, 0xff, sizeof(key_ram)); + } + else { + // scan all possibilities + for (int j=0;j<8;j++) { + for(int i=0;i<5;i++){ + if ( (k == map_qw[j][i]) || (hk == map_qw[j][i]) ) { + key_ram[j] &= ~ (1<<(4-i)); + nb_keys++; + } + } + } + } +} + + +#define MAX_Z80SIZE 49152 + + +int endsWith(const char * s, const char * suffix) +{ + int retval = 0; + int len = strlen(s); + int slen = strlen(suffix); + if (len > slen ) { + if (!strcmp(&s[len-slen], suffix)) { + retval = 1; + } + } + return (retval); +} + + +void emu_KeyboardOnDown(int keymodifer, int key) { +} + +void emu_KeyboardOnUp(int keymodifer, int key) { +} + +void spec_Start(char * filename) { + memset(Z80_RAM, 0, 0xC000); + if ( (endsWith(filename, "SNA")) || (endsWith(filename, "sna")) ) { + ZX_ReadFromFlash_SNA(&myCPU, filename); + } + else if ( (endsWith(filename, "Z80")) || (endsWith(filename, "z80")) ) { + unsigned char * game = emu_Malloc(MAX_Z80SIZE); + int size = emu_LoadFile(filename, game, MAX_Z80SIZE); + ZX_ReadFromFlash_Z80(&myCPU, game,size); + emu_Free(game); + } +#if HAS_SND + emu_sndInit(); +#endif +} + + + +static AY8910 ay; + +void spec_Init(void) { + int J; + /* Set up the palette */ + for(J=0;J<16;J++) + emu_SetPaletteEntry(Palette[J].R,Palette[J].G,Palette[J].B, J); + + InitKeyboard(); + + Reset8910(&ay,3500000,0); + + + if (XBuf == 0) XBuf = (byte *)emu_Malloc(WIDTH); + VRAM = Z80_RAM; + memset(Z80_RAM, 0, sizeof(Z80_RAM)); + + ResetZ80(&myCPU, CYCLES_PER_FRAME); +#if ALT_Z80CORE + myCPU.RAM = Z80_RAM; + Z80FlagTables(); +#endif +} + + + +void spec_Step(void) { +// 32+256+32 +//#define NBLINES (48+192+56+16) + + // Now run the emulator for all the real screen (192 lines) + /* + int scanl; + for (scanl = 0; scanl < NBLINES; scanl++) { + int ref=0; + emu_resetus(); + ExecZ80(&myCPU,hwopt.ts_line); + while (emu_us() < (20000/NBLINES)) { + } + } + */ + + ExecZ80(&myCPU,CYCLES_PER_FRAME); // 3.5MHz ticks for 6 lines @ 30 kHz = 700 cycles +#if ALT_Z80CORE +#else + IntZ80(&myCPU,INT_IRQ); // must be called every 20ms +#endif + displayScreen(); + + int k=emu_ReadKeys(); + + kempston_ram = 0x00; + if (k & MASK_JOY2_BTN) + kempston_ram |= 0x10; //Fire + if (k & MASK_JOY2_UP) + kempston_ram |= 0x8; //Up + if (k & MASK_JOY2_DOWN) + kempston_ram |= 0x4; //Down + if (k & MASK_JOY2_RIGHT) + kempston_ram |= 0x2; //Right + if (k & MASK_JOY2_LEFT) + kempston_ram |= 0x1; //Left + + + UpdateKeyboard(); + + Loop8910(&ay,20); +} + + + +#define BASERAM 0x4000 + + +void WrZ80(register word Addr,register byte Value) +{ + if (Addr >= BASERAM) + Z80_RAM[Addr-BASERAM]=Value; +} + +byte RdZ80(register word Addr) +{ + if (Addr>8) { + case 0xFE : return key_ram[0]; break; + case 0xFD : return key_ram[1]; break; + case 0xFB : return key_ram[2]; break; + case 0xF7 : return key_ram[3]; break; + case 0xEF : return key_ram[4]; break; + case 0xDF : return key_ram[5]; break; + case 0xBF : return key_ram[6]; break; + case 0x7F : return key_ram[7]; break; + } + } + + if ((port & 0xFF) == 0xFF) { + if (hwopt.port_ff == 0xFF) { + return 0xFF; + } + else { + //code = 1; + //if (code == 0xFF) code = 0x00; + return 1; + } + } + return 0xFF; +} + + +void PatchZ80(register Z80 *R) +{ + // nothing to do +} + +/* +word LoopZ80(register Z80 *R) +{ + // no interrupt triggered + return INT_NONE; +} +*/ diff --git a/MCUME_pico/picospeccy/spec.h b/MCUME_pico/picospeccy/spec.h new file mode 100644 index 0000000..d88e163 --- /dev/null +++ b/MCUME_pico/picospeccy/spec.h @@ -0,0 +1,4 @@ +extern void spec_Init(void); +extern void spec_Step(void); +extern void spec_Start(char * filename); + diff --git a/MCUME_pico/picospeccy/spectrum.rom.h b/MCUME_pico/picospeccy/spectrum.rom.h new file mode 100755 index 0000000..1a9f0aa --- /dev/null +++ b/MCUME_pico/picospeccy/spectrum.rom.h @@ -0,0 +1,1373 @@ +#ifndef SPECTRUM_ROM_H +#define SPECTRUM_ROM_H + +static const unsigned char rom_zx48_rom[] = { + 0xf3, 0xaf, 0x11, 0xff, 0xff, 0xc3, 0xcb, 0x11, 0x2a, 0x5d, 0x5c, 0x22, + 0x5f, 0x5c, 0x18, 0x43, 0xc3, 0xf2, 0x15, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x2a, 0x5d, 0x5c, 0x7e, 0xcd, 0x7d, 0x00, 0xd0, 0xcd, 0x74, 0x00, 0x18, + 0xf7, 0xff, 0xff, 0xff, 0xc3, 0x5b, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc5, 0x2a, 0x61, 0x5c, 0xe5, 0xc3, 0x9e, 0x16, 0xf5, 0xe5, 0x2a, 0x78, + 0x5c, 0x23, 0x22, 0x78, 0x5c, 0x7c, 0xb5, 0x20, 0x03, 0xfd, 0x34, 0x40, + 0xc5, 0xd5, 0xcd, 0xbf, 0x02, 0xd1, 0xc1, 0xe1, 0xf1, 0xfb, 0xc9, 0xe1, + 0x6e, 0xfd, 0x75, 0x00, 0xed, 0x7b, 0x3d, 0x5c, 0xc3, 0xc5, 0x16, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xe5, 0x2a, 0xb0, 0x5c, 0x7c, + 0xb5, 0x20, 0x01, 0xe9, 0xe1, 0xf1, 0xed, 0x45, 0x2a, 0x5d, 0x5c, 0x23, + 0x22, 0x5d, 0x5c, 0x7e, 0xc9, 0xfe, 0x21, 0xd0, 0xfe, 0x0d, 0xc8, 0xfe, + 0x10, 0xd8, 0xfe, 0x18, 0x3f, 0xd8, 0x23, 0xfe, 0x16, 0x38, 0x01, 0x23, + 0x37, 0x22, 0x5d, 0x5c, 0xc9, 0xbf, 0x52, 0x4e, 0xc4, 0x49, 0x4e, 0x4b, + 0x45, 0x59, 0xa4, 0x50, 0xc9, 0x46, 0xce, 0x50, 0x4f, 0x49, 0x4e, 0xd4, + 0x53, 0x43, 0x52, 0x45, 0x45, 0x4e, 0xa4, 0x41, 0x54, 0x54, 0xd2, 0x41, + 0xd4, 0x54, 0x41, 0xc2, 0x56, 0x41, 0x4c, 0xa4, 0x43, 0x4f, 0x44, 0xc5, + 0x56, 0x41, 0xcc, 0x4c, 0x45, 0xce, 0x53, 0x49, 0xce, 0x43, 0x4f, 0xd3, + 0x54, 0x41, 0xce, 0x41, 0x53, 0xce, 0x41, 0x43, 0xd3, 0x41, 0x54, 0xce, + 0x4c, 0xce, 0x45, 0x58, 0xd0, 0x49, 0x4e, 0xd4, 0x53, 0x51, 0xd2, 0x53, + 0x47, 0xce, 0x41, 0x42, 0xd3, 0x50, 0x45, 0x45, 0xcb, 0x49, 0xce, 0x55, + 0x53, 0xd2, 0x53, 0x54, 0x52, 0xa4, 0x43, 0x48, 0x52, 0xa4, 0x4e, 0x4f, + 0xd4, 0x42, 0x49, 0xce, 0x4f, 0xd2, 0x41, 0x4e, 0xc4, 0x3c, 0xbd, 0x3e, + 0xbd, 0x3c, 0xbe, 0x4c, 0x49, 0x4e, 0xc5, 0x54, 0x48, 0x45, 0xce, 0x54, + 0xcf, 0x53, 0x54, 0x45, 0xd0, 0x44, 0x45, 0x46, 0x20, 0x46, 0xce, 0x43, + 0x41, 0xd4, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0xd4, 0x4d, 0x4f, 0x56, 0xc5, + 0x45, 0x52, 0x41, 0x53, 0xc5, 0x4f, 0x50, 0x45, 0x4e, 0x20, 0xa3, 0x43, + 0x4c, 0x4f, 0x53, 0x45, 0x20, 0xa3, 0x4d, 0x45, 0x52, 0x47, 0xc5, 0x56, + 0x45, 0x52, 0x49, 0x46, 0xd9, 0x42, 0x45, 0x45, 0xd0, 0x43, 0x49, 0x52, + 0x43, 0x4c, 0xc5, 0x49, 0x4e, 0xcb, 0x50, 0x41, 0x50, 0x45, 0xd2, 0x46, + 0x4c, 0x41, 0x53, 0xc8, 0x42, 0x52, 0x49, 0x47, 0x48, 0xd4, 0x49, 0x4e, + 0x56, 0x45, 0x52, 0x53, 0xc5, 0x4f, 0x56, 0x45, 0xd2, 0x4f, 0x55, 0xd4, + 0x4c, 0x50, 0x52, 0x49, 0x4e, 0xd4, 0x4c, 0x4c, 0x49, 0x53, 0xd4, 0x53, + 0x54, 0x4f, 0xd0, 0x52, 0x45, 0x41, 0xc4, 0x44, 0x41, 0x54, 0xc1, 0x52, + 0x45, 0x53, 0x54, 0x4f, 0x52, 0xc5, 0x4e, 0x45, 0xd7, 0x42, 0x4f, 0x52, + 0x44, 0x45, 0xd2, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x55, 0xc5, 0x44, + 0x49, 0xcd, 0x52, 0x45, 0xcd, 0x46, 0x4f, 0xd2, 0x47, 0x4f, 0x20, 0x54, + 0xcf, 0x47, 0x4f, 0x20, 0x53, 0x55, 0xc2, 0x49, 0x4e, 0x50, 0x55, 0xd4, + 0x4c, 0x4f, 0x41, 0xc4, 0x4c, 0x49, 0x53, 0xd4, 0x4c, 0x45, 0xd4, 0x50, + 0x41, 0x55, 0x53, 0xc5, 0x4e, 0x45, 0x58, 0xd4, 0x50, 0x4f, 0x4b, 0xc5, + 0x50, 0x52, 0x49, 0x4e, 0xd4, 0x50, 0x4c, 0x4f, 0xd4, 0x52, 0x55, 0xce, + 0x53, 0x41, 0x56, 0xc5, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x49, 0x5a, + 0xc5, 0x49, 0xc6, 0x43, 0x4c, 0xd3, 0x44, 0x52, 0x41, 0xd7, 0x43, 0x4c, + 0x45, 0x41, 0xd2, 0x52, 0x45, 0x54, 0x55, 0x52, 0xce, 0x43, 0x4f, 0x50, + 0xd9, 0x42, 0x48, 0x59, 0x36, 0x35, 0x54, 0x47, 0x56, 0x4e, 0x4a, 0x55, + 0x37, 0x34, 0x52, 0x46, 0x43, 0x4d, 0x4b, 0x49, 0x38, 0x33, 0x45, 0x44, + 0x58, 0x0e, 0x4c, 0x4f, 0x39, 0x32, 0x57, 0x53, 0x5a, 0x20, 0x0d, 0x50, + 0x30, 0x31, 0x51, 0x41, 0xe3, 0xc4, 0xe0, 0xe4, 0xb4, 0xbc, 0xbd, 0xbb, + 0xaf, 0xb0, 0xb1, 0xc0, 0xa7, 0xa6, 0xbe, 0xad, 0xb2, 0xba, 0xe5, 0xa5, + 0xc2, 0xe1, 0xb3, 0xb9, 0xc1, 0xb8, 0x7e, 0xdc, 0xda, 0x5c, 0xb7, 0x7b, + 0x7d, 0xd8, 0xbf, 0xae, 0xaa, 0xab, 0xdd, 0xde, 0xdf, 0x7f, 0xb5, 0xd6, + 0x7c, 0xd5, 0x5d, 0xdb, 0xb6, 0xd9, 0x5b, 0xd7, 0x0c, 0x07, 0x06, 0x04, + 0x05, 0x08, 0x0a, 0x0b, 0x09, 0x0f, 0xe2, 0x2a, 0x3f, 0xcd, 0xc8, 0xcc, + 0xcb, 0x5e, 0xac, 0x2d, 0x2b, 0x3d, 0x2e, 0x2c, 0x3b, 0x22, 0xc7, 0x3c, + 0xc3, 0x3e, 0xc5, 0x2f, 0xc9, 0x60, 0xc6, 0x3a, 0xd0, 0xce, 0xa8, 0xca, + 0xd3, 0xd4, 0xd1, 0xd2, 0xa9, 0xcf, 0x2e, 0x2f, 0x11, 0xff, 0xff, 0x01, + 0xfe, 0xfe, 0xed, 0x78, 0x2f, 0xe6, 0x1f, 0x28, 0x0e, 0x67, 0x7d, 0x14, + 0xc0, 0xd6, 0x08, 0xcb, 0x3c, 0x30, 0xfa, 0x53, 0x5f, 0x20, 0xf4, 0x2d, + 0xcb, 0x00, 0x38, 0xe6, 0x7a, 0x3c, 0xc8, 0xfe, 0x28, 0xc8, 0xfe, 0x19, + 0xc8, 0x7b, 0x5a, 0x57, 0xfe, 0x18, 0xc9, 0xcd, 0x8e, 0x02, 0xc0, 0x21, + 0x00, 0x5c, 0xcb, 0x7e, 0x20, 0x07, 0x23, 0x35, 0x2b, 0x20, 0x02, 0x36, + 0xff, 0x7d, 0x21, 0x04, 0x5c, 0xbd, 0x20, 0xee, 0xcd, 0x1e, 0x03, 0xd0, + 0x21, 0x00, 0x5c, 0xbe, 0x28, 0x2e, 0xeb, 0x21, 0x04, 0x5c, 0xbe, 0x28, + 0x27, 0xcb, 0x7e, 0x20, 0x04, 0xeb, 0xcb, 0x7e, 0xc8, 0x5f, 0x77, 0x23, + 0x36, 0x05, 0x23, 0x3a, 0x09, 0x5c, 0x77, 0x23, 0xfd, 0x4e, 0x07, 0xfd, + 0x56, 0x01, 0xe5, 0xcd, 0x33, 0x03, 0xe1, 0x77, 0x32, 0x08, 0x5c, 0xfd, + 0xcb, 0x01, 0xee, 0xc9, 0x23, 0x36, 0x05, 0x23, 0x35, 0xc0, 0x3a, 0x0a, + 0x5c, 0x77, 0x23, 0x7e, 0x18, 0xea, 0x42, 0x16, 0x00, 0x7b, 0xfe, 0x27, + 0xd0, 0xfe, 0x18, 0x20, 0x03, 0xcb, 0x78, 0xc0, 0x21, 0x05, 0x02, 0x19, + 0x7e, 0x37, 0xc9, 0x7b, 0xfe, 0x3a, 0x38, 0x2f, 0x0d, 0xfa, 0x4f, 0x03, + 0x28, 0x03, 0xc6, 0x4f, 0xc9, 0x21, 0xeb, 0x01, 0x04, 0x28, 0x03, 0x21, + 0x05, 0x02, 0x16, 0x00, 0x19, 0x7e, 0xc9, 0x21, 0x29, 0x02, 0xcb, 0x40, + 0x28, 0xf4, 0xcb, 0x5a, 0x28, 0x0a, 0xfd, 0xcb, 0x30, 0x5e, 0xc0, 0x04, + 0xc0, 0xc6, 0x20, 0xc9, 0xc6, 0xa5, 0xc9, 0xfe, 0x30, 0xd8, 0x0d, 0xfa, + 0x9d, 0x03, 0x20, 0x19, 0x21, 0x54, 0x02, 0xcb, 0x68, 0x28, 0xd3, 0xfe, + 0x38, 0x30, 0x07, 0xd6, 0x20, 0x04, 0xc8, 0xc6, 0x08, 0xc9, 0xd6, 0x36, + 0x04, 0xc8, 0xc6, 0xfe, 0xc9, 0x21, 0x30, 0x02, 0xfe, 0x39, 0x28, 0xba, + 0xfe, 0x30, 0x28, 0xb6, 0xe6, 0x07, 0xc6, 0x80, 0x04, 0xc8, 0xee, 0x0f, + 0xc9, 0x04, 0xc8, 0xcb, 0x68, 0x21, 0x30, 0x02, 0x20, 0xa4, 0xd6, 0x10, + 0xfe, 0x22, 0x28, 0x06, 0xfe, 0x20, 0xc0, 0x3e, 0x5f, 0xc9, 0x3e, 0x40, + 0xc9, 0xf3, 0x7d, 0xcb, 0x3d, 0xcb, 0x3d, 0x2f, 0xe6, 0x03, 0x4f, 0x06, + 0x00, 0xdd, 0x21, 0xd1, 0x03, 0xdd, 0x09, 0x3a, 0x48, 0x5c, 0xe6, 0x38, + 0x0f, 0x0f, 0x0f, 0xf6, 0x08, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x0d, 0x20, + 0xfd, 0x0e, 0x3f, 0x05, 0xc2, 0xd6, 0x03, 0xee, 0x10, 0xd3, 0xfe, 0x44, + 0x4f, 0xcb, 0x67, 0x20, 0x09, 0x7a, 0xb3, 0x28, 0x09, 0x79, 0x4d, 0x1b, + 0xdd, 0xe9, 0x4d, 0x0c, 0xdd, 0xe9, 0xfb, 0xc9, 0xef, 0x31, 0x27, 0xc0, + 0x03, 0x34, 0xec, 0x6c, 0x98, 0x1f, 0xf5, 0x04, 0xa1, 0x0f, 0x38, 0x21, + 0x92, 0x5c, 0x7e, 0xa7, 0x20, 0x5e, 0x23, 0x4e, 0x23, 0x46, 0x78, 0x17, + 0x9f, 0xb9, 0x20, 0x54, 0x23, 0xbe, 0x20, 0x50, 0x78, 0xc6, 0x3c, 0xf2, + 0x25, 0x04, 0xe2, 0x6c, 0x04, 0x06, 0xfa, 0x04, 0xd6, 0x0c, 0x30, 0xfb, + 0xc6, 0x0c, 0xc5, 0x21, 0x6e, 0x04, 0xcd, 0x06, 0x34, 0xcd, 0xb4, 0x33, + 0xef, 0x04, 0x38, 0xf1, 0x86, 0x77, 0xef, 0xc0, 0x02, 0x31, 0x38, 0xcd, + 0x94, 0x1e, 0xfe, 0x0b, 0x30, 0x22, 0xef, 0xe0, 0x04, 0xe0, 0x34, 0x80, + 0x43, 0x55, 0x9f, 0x80, 0x01, 0x05, 0x34, 0x35, 0x71, 0x03, 0x38, 0xcd, + 0x99, 0x1e, 0xc5, 0xcd, 0x99, 0x1e, 0xe1, 0x50, 0x59, 0x7a, 0xb3, 0xc8, + 0x1b, 0xc3, 0xb5, 0x03, 0xcf, 0x0a, 0x89, 0x02, 0xd0, 0x12, 0x86, 0x89, + 0x0a, 0x97, 0x60, 0x75, 0x89, 0x12, 0xd5, 0x17, 0x1f, 0x89, 0x1b, 0x90, + 0x41, 0x02, 0x89, 0x24, 0xd0, 0x53, 0xca, 0x89, 0x2e, 0x9d, 0x36, 0xb1, + 0x89, 0x38, 0xff, 0x49, 0x3e, 0x89, 0x43, 0xff, 0x6a, 0x73, 0x89, 0x4f, + 0xa7, 0x00, 0x54, 0x89, 0x5c, 0x00, 0x00, 0x00, 0x89, 0x69, 0x14, 0xf6, + 0x24, 0x89, 0x76, 0xf1, 0x10, 0x05, 0xcd, 0xfb, 0x24, 0x3a, 0x3b, 0x5c, + 0x87, 0xfa, 0x8a, 0x1c, 0xe1, 0xd0, 0xe5, 0xcd, 0xf1, 0x2b, 0x62, 0x6b, + 0x0d, 0xf8, 0x09, 0xcb, 0xfe, 0xc9, 0x21, 0x3f, 0x05, 0xe5, 0x21, 0x80, + 0x1f, 0xcb, 0x7f, 0x28, 0x03, 0x21, 0x98, 0x0c, 0x08, 0x13, 0xdd, 0x2b, + 0xf3, 0x3e, 0x02, 0x47, 0x10, 0xfe, 0xd3, 0xfe, 0xee, 0x0f, 0x06, 0xa4, + 0x2d, 0x20, 0xf5, 0x05, 0x25, 0xf2, 0xd8, 0x04, 0x06, 0x2f, 0x10, 0xfe, + 0xd3, 0xfe, 0x3e, 0x0d, 0x06, 0x37, 0x10, 0xfe, 0xd3, 0xfe, 0x01, 0x0e, + 0x3b, 0x08, 0x6f, 0xc3, 0x07, 0x05, 0x7a, 0xb3, 0x28, 0x0c, 0xdd, 0x6e, + 0x00, 0x7c, 0xad, 0x67, 0x3e, 0x01, 0x37, 0xc3, 0x25, 0x05, 0x6c, 0x18, + 0xf4, 0x79, 0xcb, 0x78, 0x10, 0xfe, 0x30, 0x04, 0x06, 0x42, 0x10, 0xfe, + 0xd3, 0xfe, 0x06, 0x3e, 0x20, 0xef, 0x05, 0xaf, 0x3c, 0xcb, 0x15, 0xc2, + 0x14, 0x05, 0x1b, 0xdd, 0x23, 0x06, 0x31, 0x3e, 0x7f, 0xdb, 0xfe, 0x1f, + 0xd0, 0x7a, 0x3c, 0xc2, 0xfe, 0x04, 0x06, 0x3b, 0x10, 0xfe, 0xc9, 0xf5, + 0x3a, 0x48, 0x5c, 0xe6, 0x38, 0x0f, 0x0f, 0x0f, 0xd3, 0xfe, 0x3e, 0x7f, + 0xdb, 0xfe, 0x1f, 0xfb, 0x38, 0x02, 0xcf, 0x0c, 0xf1, 0xc9, 0x14, 0x08, + 0x15, 0xf3, 0x3e, 0x0f, 0xd3, 0xfe, 0x21, 0x3f, 0x05, 0xe5, 0xdb, 0xfe, + 0x1f, 0xe6, 0x20, 0xf6, 0x02, 0x4f, 0xbf, 0xc0, 0xcd, 0xe7, 0x05, 0x30, + 0xfa, 0x21, 0x15, 0x04, 0x10, 0xfe, 0x2b, 0x7c, 0xb5, 0x20, 0xf9, 0xcd, + 0xe3, 0x05, 0x30, 0xeb, 0x06, 0x9c, 0xcd, 0xe3, 0x05, 0x30, 0xe4, 0x3e, + 0xc6, 0xb8, 0x30, 0xe0, 0x24, 0x20, 0xf1, 0x06, 0xc9, 0xcd, 0xe7, 0x05, + 0x30, 0xd5, 0x78, 0xfe, 0xd4, 0x30, 0xf4, 0xcd, 0xe7, 0x05, 0xd0, 0x79, + 0xee, 0x03, 0x4f, 0x26, 0x00, 0x06, 0xb0, 0x18, 0x1f, 0x08, 0x20, 0x07, + 0x30, 0x0f, 0xdd, 0x75, 0x00, 0x18, 0x0f, 0xcb, 0x11, 0xad, 0xc0, 0x79, + 0x1f, 0x4f, 0x13, 0x18, 0x07, 0xdd, 0x7e, 0x00, 0xad, 0xc0, 0xdd, 0x23, + 0x1b, 0x08, 0x06, 0xb2, 0x2e, 0x01, 0xcd, 0xe3, 0x05, 0xd0, 0x3e, 0xcb, + 0xb8, 0xcb, 0x15, 0x06, 0xb0, 0xd2, 0xca, 0x05, 0x7c, 0xad, 0x67, 0x7a, + 0xb3, 0x20, 0xca, 0x7c, 0xfe, 0x01, 0xc9, 0xcd, 0xe7, 0x05, 0xd0, 0x3e, + 0x16, 0x3d, 0x20, 0xfd, 0xa7, 0x04, 0xc8, 0x3e, 0x7f, 0xdb, 0xfe, 0x1f, + 0xd0, 0xa9, 0xe6, 0x20, 0x28, 0xf3, 0x79, 0x2f, 0x4f, 0xe6, 0x07, 0xf6, + 0x08, 0xd3, 0xfe, 0x37, 0xc9, 0xf1, 0x3a, 0x74, 0x5c, 0xd6, 0xe0, 0x32, + 0x74, 0x5c, 0xcd, 0x8c, 0x1c, 0xcd, 0x30, 0x25, 0x28, 0x3c, 0x01, 0x11, + 0x00, 0x3a, 0x74, 0x5c, 0xa7, 0x28, 0x02, 0x0e, 0x22, 0xf7, 0xd5, 0xdd, + 0xe1, 0x06, 0x0b, 0x3e, 0x20, 0x12, 0x13, 0x10, 0xfc, 0xdd, 0x36, 0x01, + 0xff, 0xcd, 0xf1, 0x2b, 0x21, 0xf6, 0xff, 0x0b, 0x09, 0x03, 0x30, 0x0f, + 0x3a, 0x74, 0x5c, 0xa7, 0x20, 0x02, 0xcf, 0x0e, 0x78, 0xb1, 0x28, 0x0a, + 0x01, 0x0a, 0x00, 0xdd, 0xe5, 0xe1, 0x23, 0xeb, 0xed, 0xb0, 0xdf, 0xfe, + 0xe4, 0x20, 0x49, 0x3a, 0x74, 0x5c, 0xfe, 0x03, 0xca, 0x8a, 0x1c, 0xe7, + 0xcd, 0xb2, 0x28, 0xcb, 0xf9, 0x30, 0x0b, 0x21, 0x00, 0x00, 0x3a, 0x74, + 0x5c, 0x3d, 0x28, 0x15, 0xcf, 0x01, 0xc2, 0x8a, 0x1c, 0xcd, 0x30, 0x25, + 0x28, 0x18, 0x23, 0x7e, 0xdd, 0x77, 0x0b, 0x23, 0x7e, 0xdd, 0x77, 0x0c, + 0x23, 0xdd, 0x71, 0x0e, 0x3e, 0x01, 0xcb, 0x71, 0x28, 0x01, 0x3c, 0xdd, + 0x77, 0x00, 0xeb, 0xe7, 0xfe, 0x29, 0x20, 0xda, 0xe7, 0xcd, 0xee, 0x1b, + 0xeb, 0xc3, 0x5a, 0x07, 0xfe, 0xaa, 0x20, 0x1f, 0x3a, 0x74, 0x5c, 0xfe, + 0x03, 0xca, 0x8a, 0x1c, 0xe7, 0xcd, 0xee, 0x1b, 0xdd, 0x36, 0x0b, 0x00, + 0xdd, 0x36, 0x0c, 0x1b, 0x21, 0x00, 0x40, 0xdd, 0x75, 0x0d, 0xdd, 0x74, + 0x0e, 0x18, 0x4d, 0xfe, 0xaf, 0x20, 0x4f, 0x3a, 0x74, 0x5c, 0xfe, 0x03, + 0xca, 0x8a, 0x1c, 0xe7, 0xcd, 0x48, 0x20, 0x20, 0x0c, 0x3a, 0x74, 0x5c, + 0xa7, 0xca, 0x8a, 0x1c, 0xcd, 0xe6, 0x1c, 0x18, 0x0f, 0xcd, 0x82, 0x1c, + 0xdf, 0xfe, 0x2c, 0x28, 0x0c, 0x3a, 0x74, 0x5c, 0xa7, 0xca, 0x8a, 0x1c, + 0xcd, 0xe6, 0x1c, 0x18, 0x04, 0xe7, 0xcd, 0x82, 0x1c, 0xcd, 0xee, 0x1b, + 0xcd, 0x99, 0x1e, 0xdd, 0x71, 0x0b, 0xdd, 0x70, 0x0c, 0xcd, 0x99, 0x1e, + 0xdd, 0x71, 0x0d, 0xdd, 0x70, 0x0e, 0x60, 0x69, 0xdd, 0x36, 0x00, 0x03, + 0x18, 0x44, 0xfe, 0xca, 0x28, 0x09, 0xcd, 0xee, 0x1b, 0xdd, 0x36, 0x0e, + 0x80, 0x18, 0x17, 0x3a, 0x74, 0x5c, 0xa7, 0xc2, 0x8a, 0x1c, 0xe7, 0xcd, + 0x82, 0x1c, 0xcd, 0xee, 0x1b, 0xcd, 0x99, 0x1e, 0xdd, 0x71, 0x0d, 0xdd, + 0x70, 0x0e, 0xdd, 0x36, 0x00, 0x00, 0x2a, 0x59, 0x5c, 0xed, 0x5b, 0x53, + 0x5c, 0x37, 0xed, 0x52, 0xdd, 0x75, 0x0b, 0xdd, 0x74, 0x0c, 0x2a, 0x4b, + 0x5c, 0xed, 0x52, 0xdd, 0x75, 0x0f, 0xdd, 0x74, 0x10, 0xeb, 0x3a, 0x74, + 0x5c, 0xa7, 0xca, 0x70, 0x09, 0xe5, 0x01, 0x11, 0x00, 0xdd, 0x09, 0xdd, + 0xe5, 0x11, 0x11, 0x00, 0xaf, 0x37, 0xcd, 0x56, 0x05, 0xdd, 0xe1, 0x30, + 0xf2, 0x3e, 0xfe, 0xcd, 0x01, 0x16, 0xfd, 0x36, 0x52, 0x03, 0x0e, 0x80, + 0xdd, 0x7e, 0x00, 0xdd, 0xbe, 0xef, 0x20, 0x02, 0x0e, 0xf6, 0xfe, 0x04, + 0x30, 0xd9, 0x11, 0xc0, 0x09, 0xc5, 0xcd, 0x0a, 0x0c, 0xc1, 0xdd, 0xe5, + 0xd1, 0x21, 0xf0, 0xff, 0x19, 0x06, 0x0a, 0x7e, 0x3c, 0x20, 0x03, 0x79, + 0x80, 0x4f, 0x13, 0x1a, 0xbe, 0x23, 0x20, 0x01, 0x0c, 0xd7, 0x10, 0xf6, + 0xcb, 0x79, 0x20, 0xb3, 0x3e, 0x0d, 0xd7, 0xe1, 0xdd, 0x7e, 0x00, 0xfe, + 0x03, 0x28, 0x0c, 0x3a, 0x74, 0x5c, 0x3d, 0xca, 0x08, 0x08, 0xfe, 0x02, + 0xca, 0xb6, 0x08, 0xe5, 0xdd, 0x6e, 0xfa, 0xdd, 0x66, 0xfb, 0xdd, 0x5e, + 0x0b, 0xdd, 0x56, 0x0c, 0x7c, 0xb5, 0x28, 0x0d, 0xed, 0x52, 0x38, 0x26, + 0x28, 0x07, 0xdd, 0x7e, 0x00, 0xfe, 0x03, 0x20, 0x1d, 0xe1, 0x7c, 0xb5, + 0x20, 0x06, 0xdd, 0x6e, 0x0d, 0xdd, 0x66, 0x0e, 0xe5, 0xdd, 0xe1, 0x3a, + 0x74, 0x5c, 0xfe, 0x02, 0x37, 0x20, 0x01, 0xa7, 0x3e, 0xff, 0xcd, 0x56, + 0x05, 0xd8, 0xcf, 0x1a, 0xdd, 0x5e, 0x0b, 0xdd, 0x56, 0x0c, 0xe5, 0x7c, + 0xb5, 0x20, 0x06, 0x13, 0x13, 0x13, 0xeb, 0x18, 0x0c, 0xdd, 0x6e, 0xfa, + 0xdd, 0x66, 0xfb, 0xeb, 0x37, 0xed, 0x52, 0x38, 0x09, 0x11, 0x05, 0x00, + 0x19, 0x44, 0x4d, 0xcd, 0x05, 0x1f, 0xe1, 0xdd, 0x7e, 0x00, 0xa7, 0x28, + 0x3e, 0x7c, 0xb5, 0x28, 0x13, 0x2b, 0x46, 0x2b, 0x4e, 0x2b, 0x03, 0x03, + 0x03, 0xdd, 0x22, 0x5f, 0x5c, 0xcd, 0xe8, 0x19, 0xdd, 0x2a, 0x5f, 0x5c, + 0x2a, 0x59, 0x5c, 0x2b, 0xdd, 0x4e, 0x0b, 0xdd, 0x46, 0x0c, 0xc5, 0x03, + 0x03, 0x03, 0xdd, 0x7e, 0xfd, 0xf5, 0xcd, 0x55, 0x16, 0x23, 0xf1, 0x77, + 0xd1, 0x23, 0x73, 0x23, 0x72, 0x23, 0xe5, 0xdd, 0xe1, 0x37, 0x3e, 0xff, + 0xc3, 0x02, 0x08, 0xeb, 0x2a, 0x59, 0x5c, 0x2b, 0xdd, 0x22, 0x5f, 0x5c, + 0xdd, 0x4e, 0x0b, 0xdd, 0x46, 0x0c, 0xc5, 0xcd, 0xe5, 0x19, 0xc1, 0xe5, + 0xc5, 0xcd, 0x55, 0x16, 0xdd, 0x2a, 0x5f, 0x5c, 0x23, 0xdd, 0x4e, 0x0f, + 0xdd, 0x46, 0x10, 0x09, 0x22, 0x4b, 0x5c, 0xdd, 0x66, 0x0e, 0x7c, 0xe6, + 0xc0, 0x20, 0x0a, 0xdd, 0x6e, 0x0d, 0x22, 0x42, 0x5c, 0xfd, 0x36, 0x0a, + 0x00, 0xd1, 0xdd, 0xe1, 0x37, 0x3e, 0xff, 0xc3, 0x02, 0x08, 0xdd, 0x4e, + 0x0b, 0xdd, 0x46, 0x0c, 0xc5, 0x03, 0xf7, 0x36, 0x80, 0xeb, 0xd1, 0xe5, + 0xe5, 0xdd, 0xe1, 0x37, 0x3e, 0xff, 0xcd, 0x02, 0x08, 0xe1, 0xed, 0x5b, + 0x53, 0x5c, 0x7e, 0xe6, 0xc0, 0x20, 0x19, 0x1a, 0x13, 0xbe, 0x23, 0x20, + 0x02, 0x1a, 0xbe, 0x1b, 0x2b, 0x30, 0x08, 0xe5, 0xeb, 0xcd, 0xb8, 0x19, + 0xe1, 0x18, 0xec, 0xcd, 0x2c, 0x09, 0x18, 0xe2, 0x7e, 0x4f, 0xfe, 0x80, + 0xc8, 0xe5, 0x2a, 0x4b, 0x5c, 0x7e, 0xfe, 0x80, 0x28, 0x25, 0xb9, 0x28, + 0x08, 0xc5, 0xcd, 0xb8, 0x19, 0xc1, 0xeb, 0x18, 0xf0, 0xe6, 0xe0, 0xfe, + 0xa0, 0x20, 0x12, 0xd1, 0xd5, 0xe5, 0x23, 0x13, 0x1a, 0xbe, 0x20, 0x06, + 0x17, 0x30, 0xf7, 0xe1, 0x18, 0x03, 0xe1, 0x18, 0xe0, 0x3e, 0xff, 0xd1, + 0xeb, 0x3c, 0x37, 0xcd, 0x2c, 0x09, 0x18, 0xc4, 0x20, 0x10, 0x08, 0x22, + 0x5f, 0x5c, 0xeb, 0xcd, 0xb8, 0x19, 0xcd, 0xe8, 0x19, 0xeb, 0x2a, 0x5f, + 0x5c, 0x08, 0x08, 0xd5, 0xcd, 0xb8, 0x19, 0x22, 0x5f, 0x5c, 0x2a, 0x53, + 0x5c, 0xe3, 0xc5, 0x08, 0x38, 0x07, 0x2b, 0xcd, 0x55, 0x16, 0x23, 0x18, + 0x03, 0xcd, 0x55, 0x16, 0x23, 0xc1, 0xd1, 0xed, 0x53, 0x53, 0x5c, 0xed, + 0x5b, 0x5f, 0x5c, 0xc5, 0xd5, 0xeb, 0xed, 0xb0, 0xe1, 0xc1, 0xd5, 0xcd, + 0xe8, 0x19, 0xd1, 0xc9, 0xe5, 0x3e, 0xfd, 0xcd, 0x01, 0x16, 0xaf, 0x11, + 0xa1, 0x09, 0xcd, 0x0a, 0x0c, 0xfd, 0xcb, 0x02, 0xee, 0xcd, 0xd4, 0x15, + 0xdd, 0xe5, 0x11, 0x11, 0x00, 0xaf, 0xcd, 0xc2, 0x04, 0xdd, 0xe1, 0x06, + 0x32, 0x76, 0x10, 0xfd, 0xdd, 0x5e, 0x0b, 0xdd, 0x56, 0x0c, 0x3e, 0xff, + 0xdd, 0xe1, 0xc3, 0xc2, 0x04, 0x80, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, + 0x74, 0x61, 0x70, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6b, 0x65, 0x79, + 0xae, 0x0d, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x3a, 0xa0, 0x0d, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, + 0x3a, 0xa0, 0x0d, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, + 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0xa0, 0x0d, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x3a, 0xa0, 0xcd, 0x03, 0x0b, 0xfe, 0x20, 0xd2, 0xd9, 0x0a, + 0xfe, 0x06, 0x38, 0x69, 0xfe, 0x18, 0x30, 0x65, 0x21, 0x0b, 0x0a, 0x5f, + 0x16, 0x00, 0x19, 0x5e, 0x19, 0xe5, 0xc3, 0x03, 0x0b, 0x4e, 0x57, 0x10, + 0x29, 0x54, 0x53, 0x52, 0x37, 0x50, 0x4f, 0x5f, 0x5e, 0x5d, 0x5c, 0x5b, + 0x5a, 0x54, 0x53, 0x0c, 0x3e, 0x22, 0xb9, 0x20, 0x11, 0xfd, 0xcb, 0x01, + 0x4e, 0x20, 0x09, 0x04, 0x0e, 0x02, 0x3e, 0x18, 0xb8, 0x20, 0x03, 0x05, + 0x0e, 0x21, 0xc3, 0xd9, 0x0d, 0x3a, 0x91, 0x5c, 0xf5, 0xfd, 0x36, 0x57, + 0x01, 0x3e, 0x20, 0xcd, 0x65, 0x0b, 0xf1, 0x32, 0x91, 0x5c, 0xc9, 0xfd, + 0xcb, 0x01, 0x4e, 0xc2, 0xcd, 0x0e, 0x0e, 0x21, 0xcd, 0x55, 0x0c, 0x05, + 0xc3, 0xd9, 0x0d, 0xcd, 0x03, 0x0b, 0x79, 0x3d, 0x3d, 0xe6, 0x10, 0x18, + 0x5a, 0x3e, 0x3f, 0x18, 0x6c, 0x11, 0x87, 0x0a, 0x32, 0x0f, 0x5c, 0x18, + 0x0b, 0x11, 0x6d, 0x0a, 0x18, 0x03, 0x11, 0x87, 0x0a, 0x32, 0x0e, 0x5c, + 0x2a, 0x51, 0x5c, 0x73, 0x23, 0x72, 0xc9, 0x11, 0xf4, 0x09, 0xcd, 0x80, + 0x0a, 0x2a, 0x0e, 0x5c, 0x57, 0x7d, 0xfe, 0x16, 0xda, 0x11, 0x22, 0x20, + 0x29, 0x44, 0x4a, 0x3e, 0x1f, 0x91, 0x38, 0x0c, 0xc6, 0x02, 0x4f, 0xfd, + 0xcb, 0x01, 0x4e, 0x20, 0x16, 0x3e, 0x16, 0x90, 0xda, 0x9f, 0x1e, 0x3c, + 0x47, 0x04, 0xfd, 0xcb, 0x02, 0x46, 0xc2, 0x55, 0x0c, 0xfd, 0xbe, 0x31, + 0xda, 0x86, 0x0c, 0xc3, 0xd9, 0x0d, 0x7c, 0xcd, 0x03, 0x0b, 0x81, 0x3d, + 0xe6, 0x1f, 0xc8, 0x57, 0xfd, 0xcb, 0x01, 0xc6, 0x3e, 0x20, 0xcd, 0x3b, + 0x0c, 0x15, 0x20, 0xf8, 0xc9, 0xcd, 0x24, 0x0b, 0xfd, 0xcb, 0x01, 0x4e, + 0x20, 0x1a, 0xfd, 0xcb, 0x02, 0x46, 0x20, 0x08, 0xed, 0x43, 0x88, 0x5c, + 0x22, 0x84, 0x5c, 0xc9, 0xed, 0x43, 0x8a, 0x5c, 0xed, 0x43, 0x82, 0x5c, + 0x22, 0x86, 0x5c, 0xc9, 0xfd, 0x71, 0x45, 0x22, 0x80, 0x5c, 0xc9, 0xfd, + 0xcb, 0x01, 0x4e, 0x20, 0x14, 0xed, 0x4b, 0x88, 0x5c, 0x2a, 0x84, 0x5c, + 0xfd, 0xcb, 0x02, 0x46, 0xc8, 0xed, 0x4b, 0x8a, 0x5c, 0x2a, 0x86, 0x5c, + 0xc9, 0xfd, 0x4e, 0x45, 0x2a, 0x80, 0x5c, 0xc9, 0xfe, 0x80, 0x38, 0x3d, + 0xfe, 0x90, 0x30, 0x26, 0x47, 0xcd, 0x38, 0x0b, 0xcd, 0x03, 0x0b, 0x11, + 0x92, 0x5c, 0x18, 0x47, 0x21, 0x92, 0x5c, 0xcd, 0x3e, 0x0b, 0xcb, 0x18, + 0x9f, 0xe6, 0x0f, 0x4f, 0xcb, 0x18, 0x9f, 0xe6, 0xf0, 0xb1, 0x0e, 0x04, + 0x77, 0x23, 0x0d, 0x20, 0xfb, 0xc9, 0xd6, 0xa5, 0x30, 0x09, 0xc6, 0x15, + 0xc5, 0xed, 0x4b, 0x7b, 0x5c, 0x18, 0x0b, 0xcd, 0x10, 0x0c, 0xc3, 0x03, + 0x0b, 0xc5, 0xed, 0x4b, 0x36, 0x5c, 0xeb, 0x21, 0x3b, 0x5c, 0xcb, 0x86, + 0xfe, 0x20, 0x20, 0x02, 0xcb, 0xc6, 0x26, 0x00, 0x6f, 0x29, 0x29, 0x29, + 0x09, 0xc1, 0xeb, 0x79, 0x3d, 0x3e, 0x21, 0x20, 0x0e, 0x05, 0x4f, 0xfd, + 0xcb, 0x01, 0x4e, 0x28, 0x06, 0xd5, 0xcd, 0xcd, 0x0e, 0xd1, 0x79, 0xb9, + 0xd5, 0xcc, 0x55, 0x0c, 0xd1, 0xc5, 0xe5, 0x3a, 0x91, 0x5c, 0x06, 0xff, + 0x1f, 0x38, 0x01, 0x04, 0x1f, 0x1f, 0x9f, 0x4f, 0x3e, 0x08, 0xa7, 0xfd, + 0xcb, 0x01, 0x4e, 0x28, 0x05, 0xfd, 0xcb, 0x30, 0xce, 0x37, 0xeb, 0x08, + 0x1a, 0xa0, 0xae, 0xa9, 0x12, 0x08, 0x38, 0x13, 0x14, 0x23, 0x3d, 0x20, + 0xf2, 0xeb, 0x25, 0xfd, 0xcb, 0x01, 0x4e, 0xcc, 0xdb, 0x0b, 0xe1, 0xc1, + 0x0d, 0x23, 0xc9, 0x08, 0x3e, 0x20, 0x83, 0x5f, 0x08, 0x18, 0xe6, 0x7c, + 0x0f, 0x0f, 0x0f, 0xe6, 0x03, 0xf6, 0x58, 0x67, 0xed, 0x5b, 0x8f, 0x5c, + 0x7e, 0xab, 0xa2, 0xab, 0xfd, 0xcb, 0x57, 0x76, 0x28, 0x08, 0xe6, 0xc7, + 0xcb, 0x57, 0x20, 0x02, 0xee, 0x38, 0xfd, 0xcb, 0x57, 0x66, 0x28, 0x08, + 0xe6, 0xf8, 0xcb, 0x6f, 0x20, 0x02, 0xee, 0x07, 0x77, 0xc9, 0xe5, 0x26, + 0x00, 0xe3, 0x18, 0x04, 0x11, 0x95, 0x00, 0xf5, 0xcd, 0x41, 0x0c, 0x38, + 0x09, 0x3e, 0x20, 0xfd, 0xcb, 0x01, 0x46, 0xcc, 0x3b, 0x0c, 0x1a, 0xe6, + 0x7f, 0xcd, 0x3b, 0x0c, 0x1a, 0x13, 0x87, 0x30, 0xf5, 0xd1, 0xfe, 0x48, + 0x28, 0x03, 0xfe, 0x82, 0xd8, 0x7a, 0xfe, 0x03, 0xd8, 0x3e, 0x20, 0xd5, + 0xd9, 0xd7, 0xd9, 0xd1, 0xc9, 0xf5, 0xeb, 0x3c, 0xcb, 0x7e, 0x23, 0x28, + 0xfb, 0x3d, 0x20, 0xf8, 0xeb, 0xf1, 0xfe, 0x20, 0xd8, 0x1a, 0xd6, 0x41, + 0xc9, 0xfd, 0xcb, 0x01, 0x4e, 0xc0, 0x11, 0xd9, 0x0d, 0xd5, 0x78, 0xfd, + 0xcb, 0x02, 0x46, 0xc2, 0x02, 0x0d, 0xfd, 0xbe, 0x31, 0x38, 0x1b, 0xc0, + 0xfd, 0xcb, 0x02, 0x66, 0x28, 0x16, 0xfd, 0x5e, 0x2d, 0x1d, 0x28, 0x5a, + 0x3e, 0x00, 0xcd, 0x01, 0x16, 0xed, 0x7b, 0x3f, 0x5c, 0xfd, 0xcb, 0x02, + 0xa6, 0xc9, 0xcf, 0x04, 0xfd, 0x35, 0x52, 0x20, 0x45, 0x3e, 0x18, 0x90, + 0x32, 0x8c, 0x5c, 0x2a, 0x8f, 0x5c, 0xe5, 0x3a, 0x91, 0x5c, 0xf5, 0x3e, + 0xfd, 0xcd, 0x01, 0x16, 0xaf, 0x11, 0xf8, 0x0c, 0xcd, 0x0a, 0x0c, 0xfd, + 0xcb, 0x02, 0xee, 0x21, 0x3b, 0x5c, 0xcb, 0xde, 0xcb, 0xae, 0xd9, 0xcd, + 0xd4, 0x15, 0xd9, 0xfe, 0x20, 0x28, 0x45, 0xfe, 0xe2, 0x28, 0x41, 0xf6, + 0x20, 0xfe, 0x6e, 0x28, 0x3b, 0x3e, 0xfe, 0xcd, 0x01, 0x16, 0xf1, 0x32, + 0x91, 0x5c, 0xe1, 0x22, 0x8f, 0x5c, 0xcd, 0xfe, 0x0d, 0xfd, 0x46, 0x31, + 0x04, 0x0e, 0x21, 0xc5, 0xcd, 0x9b, 0x0e, 0x7c, 0x0f, 0x0f, 0x0f, 0xe6, + 0x03, 0xf6, 0x58, 0x67, 0x11, 0xe0, 0x5a, 0x1a, 0x4e, 0x06, 0x20, 0xeb, + 0x12, 0x71, 0x13, 0x23, 0x10, 0xfa, 0xc1, 0xc9, 0x80, 0x73, 0x63, 0x72, + 0x6f, 0x6c, 0x6c, 0xbf, 0xcf, 0x0c, 0xfe, 0x02, 0x38, 0x80, 0xfd, 0x86, + 0x31, 0xd6, 0x19, 0xd0, 0xed, 0x44, 0xc5, 0x47, 0x2a, 0x8f, 0x5c, 0xe5, + 0x2a, 0x91, 0x5c, 0xe5, 0xcd, 0x4d, 0x0d, 0x78, 0xf5, 0x21, 0x6b, 0x5c, + 0x46, 0x78, 0x3c, 0x77, 0x21, 0x89, 0x5c, 0xbe, 0x38, 0x03, 0x34, 0x06, + 0x18, 0xcd, 0x00, 0x0e, 0xf1, 0x3d, 0x20, 0xe8, 0xe1, 0xfd, 0x75, 0x57, + 0xe1, 0x22, 0x8f, 0x5c, 0xed, 0x4b, 0x88, 0x5c, 0xfd, 0xcb, 0x02, 0x86, + 0xcd, 0xd9, 0x0d, 0xfd, 0xcb, 0x02, 0xc6, 0xc1, 0xc9, 0xaf, 0x2a, 0x8d, + 0x5c, 0xfd, 0xcb, 0x02, 0x46, 0x28, 0x04, 0x67, 0xfd, 0x6e, 0x0e, 0x22, + 0x8f, 0x5c, 0x21, 0x91, 0x5c, 0x20, 0x02, 0x7e, 0x0f, 0xae, 0xe6, 0x55, + 0xae, 0x77, 0xc9, 0xcd, 0xaf, 0x0d, 0x21, 0x3c, 0x5c, 0xcb, 0xae, 0xcb, + 0xc6, 0xcd, 0x4d, 0x0d, 0xfd, 0x46, 0x31, 0xcd, 0x44, 0x0e, 0x21, 0xc0, + 0x5a, 0x3a, 0x8d, 0x5c, 0x05, 0x18, 0x07, 0x0e, 0x20, 0x2b, 0x77, 0x0d, + 0x20, 0xfb, 0x10, 0xf7, 0xfd, 0x36, 0x31, 0x02, 0x3e, 0xfd, 0xcd, 0x01, + 0x16, 0x2a, 0x51, 0x5c, 0x11, 0xf4, 0x09, 0xa7, 0x73, 0x23, 0x72, 0x23, + 0x11, 0xa8, 0x10, 0x3f, 0x38, 0xf6, 0x01, 0x21, 0x17, 0x18, 0x2a, 0x21, + 0x00, 0x00, 0x22, 0x7d, 0x5c, 0xfd, 0xcb, 0x30, 0x86, 0xcd, 0x94, 0x0d, + 0x3e, 0xfe, 0xcd, 0x01, 0x16, 0xcd, 0x4d, 0x0d, 0x06, 0x18, 0xcd, 0x44, + 0x0e, 0x2a, 0x51, 0x5c, 0x11, 0xf4, 0x09, 0x73, 0x23, 0x72, 0xfd, 0x36, + 0x52, 0x01, 0x01, 0x21, 0x18, 0x21, 0x00, 0x5b, 0xfd, 0xcb, 0x01, 0x4e, + 0x20, 0x12, 0x78, 0xfd, 0xcb, 0x02, 0x46, 0x28, 0x05, 0xfd, 0x86, 0x31, + 0xd6, 0x18, 0xc5, 0x47, 0xcd, 0x9b, 0x0e, 0xc1, 0x3e, 0x21, 0x91, 0x5f, + 0x16, 0x00, 0x19, 0xc3, 0xdc, 0x0a, 0x06, 0x17, 0xcd, 0x9b, 0x0e, 0x0e, + 0x08, 0xc5, 0xe5, 0x78, 0xe6, 0x07, 0x78, 0x20, 0x0c, 0xeb, 0x21, 0xe0, + 0xf8, 0x19, 0xeb, 0x01, 0x20, 0x00, 0x3d, 0xed, 0xb0, 0xeb, 0x21, 0xe0, + 0xff, 0x19, 0xeb, 0x47, 0xe6, 0x07, 0x0f, 0x0f, 0x0f, 0x4f, 0x78, 0x06, + 0x00, 0xed, 0xb0, 0x06, 0x07, 0x09, 0xe6, 0xf8, 0x20, 0xdb, 0xe1, 0x24, + 0xc1, 0x0d, 0x20, 0xcd, 0xcd, 0x88, 0x0e, 0x21, 0xe0, 0xff, 0x19, 0xeb, + 0xed, 0xb0, 0x06, 0x01, 0xc5, 0xcd, 0x9b, 0x0e, 0x0e, 0x08, 0xc5, 0xe5, + 0x78, 0xe6, 0x07, 0x0f, 0x0f, 0x0f, 0x4f, 0x78, 0x06, 0x00, 0x0d, 0x54, + 0x5d, 0x36, 0x00, 0x13, 0xed, 0xb0, 0x11, 0x01, 0x07, 0x19, 0x3d, 0xe6, + 0xf8, 0x47, 0x20, 0xe5, 0xe1, 0x24, 0xc1, 0x0d, 0x20, 0xdc, 0xcd, 0x88, + 0x0e, 0x62, 0x6b, 0x13, 0x3a, 0x8d, 0x5c, 0xfd, 0xcb, 0x02, 0x46, 0x28, + 0x03, 0x3a, 0x48, 0x5c, 0x77, 0x0b, 0xed, 0xb0, 0xc1, 0x0e, 0x21, 0xc9, + 0x7c, 0x0f, 0x0f, 0x0f, 0x3d, 0xf6, 0x50, 0x67, 0xeb, 0x61, 0x68, 0x29, + 0x29, 0x29, 0x29, 0x29, 0x44, 0x4d, 0xc9, 0x3e, 0x18, 0x90, 0x57, 0x0f, + 0x0f, 0x0f, 0xe6, 0xe0, 0x6f, 0x7a, 0xe6, 0x18, 0xf6, 0x40, 0x67, 0xc9, + 0xf3, 0x06, 0xb0, 0x21, 0x00, 0x40, 0xe5, 0xc5, 0xcd, 0xf4, 0x0e, 0xc1, + 0xe1, 0x24, 0x7c, 0xe6, 0x07, 0x20, 0x0a, 0x7d, 0xc6, 0x20, 0x6f, 0x3f, + 0x9f, 0xe6, 0xf8, 0x84, 0x67, 0x10, 0xe7, 0x18, 0x0d, 0xf3, 0x21, 0x00, + 0x5b, 0x06, 0x08, 0xc5, 0xcd, 0xf4, 0x0e, 0xc1, 0x10, 0xf9, 0x3e, 0x04, + 0xd3, 0xfb, 0xfb, 0x21, 0x00, 0x5b, 0xfd, 0x75, 0x46, 0xaf, 0x47, 0x77, + 0x23, 0x10, 0xfc, 0xfd, 0xcb, 0x30, 0x8e, 0x0e, 0x21, 0xc3, 0xd9, 0x0d, + 0x78, 0xfe, 0x03, 0x9f, 0xe6, 0x02, 0xd3, 0xfb, 0x57, 0xcd, 0x54, 0x1f, + 0x38, 0x0a, 0x3e, 0x04, 0xd3, 0xfb, 0xfb, 0xcd, 0xdf, 0x0e, 0xcf, 0x0c, + 0xdb, 0xfb, 0x87, 0xf8, 0x30, 0xeb, 0x0e, 0x20, 0x5e, 0x23, 0x06, 0x08, + 0xcb, 0x12, 0xcb, 0x13, 0xcb, 0x1a, 0xdb, 0xfb, 0x1f, 0x30, 0xfb, 0x7a, + 0xd3, 0xfb, 0x10, 0xf0, 0x0d, 0x20, 0xe9, 0xc9, 0x2a, 0x3d, 0x5c, 0xe5, + 0x21, 0x7f, 0x10, 0xe5, 0xed, 0x73, 0x3d, 0x5c, 0xcd, 0xd4, 0x15, 0xf5, + 0x16, 0x00, 0xfd, 0x5e, 0xff, 0x21, 0xc8, 0x00, 0xcd, 0xb5, 0x03, 0xf1, + 0x21, 0x38, 0x0f, 0xe5, 0xfe, 0x18, 0x30, 0x31, 0xfe, 0x07, 0x38, 0x2d, + 0xfe, 0x10, 0x38, 0x3a, 0x01, 0x02, 0x00, 0x57, 0xfe, 0x16, 0x38, 0x0c, + 0x03, 0xfd, 0xcb, 0x37, 0x7e, 0xca, 0x1e, 0x10, 0xcd, 0xd4, 0x15, 0x5f, + 0xcd, 0xd4, 0x15, 0xd5, 0x2a, 0x5b, 0x5c, 0xfd, 0xcb, 0x07, 0x86, 0xcd, + 0x55, 0x16, 0xc1, 0x23, 0x70, 0x23, 0x71, 0x18, 0x0a, 0xfd, 0xcb, 0x07, + 0x86, 0x2a, 0x5b, 0x5c, 0xcd, 0x52, 0x16, 0x12, 0x13, 0xed, 0x53, 0x5b, + 0x5c, 0xc9, 0x5f, 0x16, 0x00, 0x21, 0x99, 0x0f, 0x19, 0x5e, 0x19, 0xe5, + 0x2a, 0x5b, 0x5c, 0xc9, 0x09, 0x66, 0x6a, 0x50, 0xb5, 0x70, 0x7e, 0xcf, + 0xd4, 0x2a, 0x49, 0x5c, 0xfd, 0xcb, 0x37, 0x6e, 0xc2, 0x97, 0x10, 0xcd, + 0x6e, 0x19, 0xcd, 0x95, 0x16, 0x7a, 0xb3, 0xca, 0x97, 0x10, 0xe5, 0x23, + 0x4e, 0x23, 0x46, 0x21, 0x0a, 0x00, 0x09, 0x44, 0x4d, 0xcd, 0x05, 0x1f, + 0xcd, 0x97, 0x10, 0x2a, 0x51, 0x5c, 0xe3, 0xe5, 0x3e, 0xff, 0xcd, 0x01, + 0x16, 0xe1, 0x2b, 0xfd, 0x35, 0x0f, 0xcd, 0x55, 0x18, 0xfd, 0x34, 0x0f, + 0x2a, 0x59, 0x5c, 0x23, 0x23, 0x23, 0x23, 0x22, 0x5b, 0x5c, 0xe1, 0xcd, + 0x15, 0x16, 0xc9, 0xfd, 0xcb, 0x37, 0x6e, 0x20, 0x08, 0x21, 0x49, 0x5c, + 0xcd, 0x0f, 0x19, 0x18, 0x6d, 0xfd, 0x36, 0x00, 0x10, 0x18, 0x1d, 0xcd, + 0x31, 0x10, 0x18, 0x05, 0x7e, 0xfe, 0x0d, 0xc8, 0x23, 0x22, 0x5b, 0x5c, + 0xc9, 0xcd, 0x31, 0x10, 0x01, 0x01, 0x00, 0xc3, 0xe8, 0x19, 0xcd, 0xd4, + 0x15, 0xcd, 0xd4, 0x15, 0xe1, 0xe1, 0xe1, 0x22, 0x3d, 0x5c, 0xfd, 0xcb, + 0x00, 0x7e, 0xc0, 0xf9, 0xc9, 0x37, 0xcd, 0x95, 0x11, 0xed, 0x52, 0x19, + 0x23, 0xc1, 0xd8, 0xc5, 0x44, 0x4d, 0x62, 0x6b, 0x23, 0x1a, 0xe6, 0xf0, + 0xfe, 0x10, 0x20, 0x09, 0x23, 0x1a, 0xd6, 0x17, 0xce, 0x00, 0x20, 0x01, + 0x23, 0xa7, 0xed, 0x42, 0x09, 0xeb, 0x38, 0xe6, 0xc9, 0xfd, 0xcb, 0x37, + 0x6e, 0xc0, 0x2a, 0x49, 0x5c, 0xcd, 0x6e, 0x19, 0xeb, 0xcd, 0x95, 0x16, + 0x21, 0x4a, 0x5c, 0xcd, 0x1c, 0x19, 0xcd, 0x95, 0x17, 0x3e, 0x00, 0xc3, + 0x01, 0x16, 0xfd, 0xcb, 0x37, 0x7e, 0x28, 0xa8, 0xc3, 0x81, 0x0f, 0xfd, + 0xcb, 0x30, 0x66, 0x28, 0xa1, 0xfd, 0x36, 0x00, 0xff, 0x16, 0x00, 0xfd, + 0x5e, 0xfe, 0x21, 0x90, 0x1a, 0xcd, 0xb5, 0x03, 0xc3, 0x30, 0x0f, 0xe5, + 0xcd, 0x90, 0x11, 0x2b, 0xcd, 0xe5, 0x19, 0x22, 0x5b, 0x5c, 0xfd, 0x36, + 0x07, 0x00, 0xe1, 0xc9, 0xfd, 0xcb, 0x02, 0x5e, 0xc4, 0x1d, 0x11, 0xa7, + 0xfd, 0xcb, 0x01, 0x6e, 0xc8, 0x3a, 0x08, 0x5c, 0xfd, 0xcb, 0x01, 0xae, + 0xf5, 0xfd, 0xcb, 0x02, 0x6e, 0xc4, 0x6e, 0x0d, 0xf1, 0xfe, 0x20, 0x30, + 0x52, 0xfe, 0x10, 0x30, 0x2d, 0xfe, 0x06, 0x30, 0x0a, 0x47, 0xe6, 0x01, + 0x4f, 0x78, 0x1f, 0xc6, 0x12, 0x18, 0x2a, 0x20, 0x09, 0x21, 0x6a, 0x5c, + 0x3e, 0x08, 0xae, 0x77, 0x18, 0x0e, 0xfe, 0x0e, 0xd8, 0xd6, 0x0d, 0x21, + 0x41, 0x5c, 0xbe, 0x77, 0x20, 0x02, 0x36, 0x00, 0xfd, 0xcb, 0x02, 0xde, + 0xbf, 0xc9, 0x47, 0xe6, 0x07, 0x4f, 0x3e, 0x10, 0xcb, 0x58, 0x20, 0x01, + 0x3c, 0xfd, 0x71, 0xd3, 0x11, 0x0d, 0x11, 0x18, 0x06, 0x3a, 0x0d, 0x5c, + 0x11, 0xa8, 0x10, 0x2a, 0x4f, 0x5c, 0x23, 0x23, 0x73, 0x23, 0x72, 0x37, + 0xc9, 0xcd, 0x4d, 0x0d, 0xfd, 0xcb, 0x02, 0x9e, 0xfd, 0xcb, 0x02, 0xae, + 0x2a, 0x8a, 0x5c, 0xe5, 0x2a, 0x3d, 0x5c, 0xe5, 0x21, 0x67, 0x11, 0xe5, + 0xed, 0x73, 0x3d, 0x5c, 0x2a, 0x82, 0x5c, 0xe5, 0x37, 0xcd, 0x95, 0x11, + 0xeb, 0xcd, 0x7d, 0x18, 0xeb, 0xcd, 0xe1, 0x18, 0x2a, 0x8a, 0x5c, 0xe3, + 0xeb, 0xcd, 0x4d, 0x0d, 0x3a, 0x8b, 0x5c, 0x92, 0x38, 0x26, 0x20, 0x06, + 0x7b, 0xfd, 0x96, 0x50, 0x30, 0x1e, 0x3e, 0x20, 0xd5, 0xcd, 0xf4, 0x09, + 0xd1, 0x18, 0xe9, 0x16, 0x00, 0xfd, 0x5e, 0xfe, 0x21, 0x90, 0x1a, 0xcd, + 0xb5, 0x03, 0xfd, 0x36, 0x00, 0xff, 0xed, 0x5b, 0x8a, 0x5c, 0x18, 0x02, + 0xd1, 0xe1, 0xe1, 0x22, 0x3d, 0x5c, 0xc1, 0xd5, 0xcd, 0xd9, 0x0d, 0xe1, + 0x22, 0x82, 0x5c, 0xfd, 0x36, 0x26, 0x00, 0xc9, 0x2a, 0x61, 0x5c, 0x2b, + 0xa7, 0xed, 0x5b, 0x59, 0x5c, 0xfd, 0xcb, 0x37, 0x6e, 0xc8, 0xed, 0x5b, + 0x61, 0x5c, 0xd8, 0x2a, 0x63, 0x5c, 0xc9, 0x7e, 0xfe, 0x0e, 0x01, 0x06, + 0x00, 0xcc, 0xe8, 0x19, 0x7e, 0x23, 0xfe, 0x0d, 0x20, 0xf1, 0xc9, 0xf3, + 0x3e, 0xff, 0xed, 0x5b, 0xb2, 0x5c, 0xd9, 0xed, 0x4b, 0xb4, 0x5c, 0xed, + 0x5b, 0x38, 0x5c, 0x2a, 0x7b, 0x5c, 0xd9, 0x47, 0x3e, 0x07, 0xd3, 0xfe, + 0x3e, 0x3f, 0xed, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6b, + 0x36, 0x02, 0x2b, 0xbc, 0x20, 0xfa, 0xa7, 0xed, 0x52, 0x19, 0x23, 0x30, + 0x06, 0x35, 0x28, 0x03, 0x35, 0x28, 0xf3, 0x2b, 0xd9, 0xed, 0x43, 0xb4, + 0x5c, 0xed, 0x53, 0x38, 0x5c, 0x22, 0x7b, 0x5c, 0xd9, 0x04, 0x28, 0x19, + 0x22, 0xb4, 0x5c, 0x11, 0xaf, 0x3e, 0x01, 0xa8, 0x00, 0xeb, 0xed, 0xb8, + 0xeb, 0x23, 0x22, 0x7b, 0x5c, 0x2b, 0x01, 0x40, 0x00, 0xed, 0x43, 0x38, + 0x5c, 0x22, 0xb2, 0x5c, 0x21, 0x00, 0x3c, 0x22, 0x36, 0x5c, 0x2a, 0xb2, + 0x5c, 0x36, 0x3e, 0x2b, 0xf9, 0x2b, 0x2b, 0x22, 0x3d, 0x5c, 0xed, 0x56, + 0xfd, 0x21, 0x3a, 0x5c, 0xfb, 0x21, 0xb6, 0x5c, 0x22, 0x4f, 0x5c, 0x11, + 0xaf, 0x15, 0x01, 0x15, 0x00, 0xeb, 0xed, 0xb0, 0xeb, 0x2b, 0x22, 0x57, + 0x5c, 0x23, 0x22, 0x53, 0x5c, 0x22, 0x4b, 0x5c, 0x36, 0x80, 0x23, 0x22, + 0x59, 0x5c, 0x36, 0x0d, 0x23, 0x36, 0x80, 0x23, 0x22, 0x61, 0x5c, 0x22, + 0x63, 0x5c, 0x22, 0x65, 0x5c, 0x3e, 0x38, 0x32, 0x8d, 0x5c, 0x32, 0x8f, + 0x5c, 0x32, 0x48, 0x5c, 0x21, 0x23, 0x05, 0x22, 0x09, 0x5c, 0xfd, 0x35, + 0xc6, 0xfd, 0x35, 0xca, 0x21, 0xc6, 0x15, 0x11, 0x10, 0x5c, 0x01, 0x0e, + 0x00, 0xed, 0xb0, 0xfd, 0xcb, 0x01, 0xce, 0xcd, 0xdf, 0x0e, 0xfd, 0x36, + 0x31, 0x02, 0xcd, 0x6b, 0x0d, 0xaf, 0x11, 0x38, 0x15, 0xcd, 0x0a, 0x0c, + 0xfd, 0xcb, 0x02, 0xee, 0x18, 0x07, 0xfd, 0x36, 0x31, 0x02, 0xcd, 0x95, + 0x17, 0xcd, 0xb0, 0x16, 0x3e, 0x00, 0xcd, 0x01, 0x16, 0xcd, 0x2c, 0x0f, + 0xcd, 0x17, 0x1b, 0xfd, 0xcb, 0x00, 0x7e, 0x20, 0x12, 0xfd, 0xcb, 0x30, + 0x66, 0x28, 0x40, 0x2a, 0x59, 0x5c, 0xcd, 0xa7, 0x11, 0xfd, 0x36, 0x00, + 0xff, 0x18, 0xdd, 0x2a, 0x59, 0x5c, 0x22, 0x5d, 0x5c, 0xcd, 0xfb, 0x19, + 0x78, 0xb1, 0xc2, 0x5d, 0x15, 0xdf, 0xfe, 0x0d, 0x28, 0xc0, 0xfd, 0xcb, + 0x30, 0x46, 0xc4, 0xaf, 0x0d, 0xcd, 0x6e, 0x0d, 0x3e, 0x19, 0xfd, 0x96, + 0x4f, 0x32, 0x8c, 0x5c, 0xfd, 0xcb, 0x01, 0xfe, 0xfd, 0x36, 0x00, 0xff, + 0xfd, 0x36, 0x0a, 0x01, 0xcd, 0x8a, 0x1b, 0x76, 0xfd, 0xcb, 0x01, 0xae, + 0xfd, 0xcb, 0x30, 0x4e, 0xc4, 0xcd, 0x0e, 0x3a, 0x3a, 0x5c, 0x3c, 0xf5, + 0x21, 0x00, 0x00, 0xfd, 0x74, 0x37, 0xfd, 0x74, 0x26, 0x22, 0x0b, 0x5c, + 0x21, 0x01, 0x00, 0x22, 0x16, 0x5c, 0xcd, 0xb0, 0x16, 0xfd, 0xcb, 0x37, + 0xae, 0xcd, 0x6e, 0x0d, 0xfd, 0xcb, 0x02, 0xee, 0xf1, 0x47, 0xfe, 0x0a, + 0x38, 0x02, 0xc6, 0x07, 0xcd, 0xef, 0x15, 0x3e, 0x20, 0xd7, 0x78, 0x11, + 0x91, 0x13, 0xcd, 0x0a, 0x0c, 0xaf, 0x11, 0x36, 0x15, 0xcd, 0x0a, 0x0c, + 0xed, 0x4b, 0x45, 0x5c, 0xcd, 0x1b, 0x1a, 0x3e, 0x3a, 0xd7, 0xfd, 0x4e, + 0x0d, 0x06, 0x00, 0xcd, 0x1b, 0x1a, 0xcd, 0x97, 0x10, 0x3a, 0x3a, 0x5c, + 0x3c, 0x28, 0x1b, 0xfe, 0x09, 0x28, 0x04, 0xfe, 0x15, 0x20, 0x03, 0xfd, + 0x34, 0x0d, 0x01, 0x03, 0x00, 0x11, 0x70, 0x5c, 0x21, 0x44, 0x5c, 0xcb, + 0x7e, 0x28, 0x01, 0x09, 0xed, 0xb8, 0xfd, 0x36, 0x0a, 0xff, 0xfd, 0xcb, + 0x01, 0x9e, 0xc3, 0xac, 0x12, 0x80, 0x4f, 0xcb, 0x4e, 0x45, 0x58, 0x54, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x46, 0x4f, 0xd2, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x66, 0x6f, 0x75, 0x6e, 0xe4, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x20, 0x77, 0x72, 0x6f, 0x6e, 0xe7, 0x4f, 0x75, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0xf9, 0x4f, 0x75, + 0x74, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x63, 0x72, 0x65, 0x65, 0xee, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x6f, 0x20, 0x62, 0x69, + 0xe7, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x20, 0x77, 0x69, 0x74, 0x68, + 0x6f, 0x75, 0x74, 0x20, 0x47, 0x4f, 0x53, 0x55, 0xc2, 0x45, 0x6e, 0x64, + 0x20, 0x6f, 0x66, 0x20, 0x66, 0x69, 0x6c, 0xe5, 0x53, 0x54, 0x4f, 0x50, + 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0xf4, 0x49, 0x6e, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0xf4, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x6f, 0x75, + 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x61, 0x6e, 0x67, 0xe5, 0x4e, 0x6f, + 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x42, 0x41, + 0x53, 0x49, 0xc3, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x20, 0x2d, 0x20, 0x43, + 0x4f, 0x4e, 0x54, 0x20, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0xf3, 0x4f, + 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x44, 0x41, 0x54, 0xc1, 0x49, 0x6e, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, + 0x61, 0x6d, 0xe5, 0x4e, 0x6f, 0x20, 0x72, 0x6f, 0x6f, 0x6d, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x6e, 0xe5, 0x53, 0x54, 0x4f, 0x50, 0x20, + 0x69, 0x6e, 0x20, 0x49, 0x4e, 0x50, 0x55, 0xd4, 0x46, 0x4f, 0x52, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x4e, 0x45, 0x58, 0xd4, + 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x2f, 0x4f, 0x20, + 0x64, 0x65, 0x76, 0x69, 0x63, 0xe5, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0xf2, 0x42, 0x52, 0x45, 0x41, + 0x4b, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, + 0x61, 0xed, 0x52, 0x41, 0x4d, 0x54, 0x4f, 0x50, 0x20, 0x6e, 0x6f, 0x20, + 0x67, 0x6f, 0x6f, 0xe4, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x20, 0x6c, 0x6f, 0x73, 0xf4, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0xed, 0x46, 0x4e, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x44, 0x45, 0xc6, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, + 0xf2, 0x54, 0x61, 0x70, 0x65, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, + 0x67, 0x20, 0x65, 0x72, 0x72, 0x6f, 0xf2, 0x2c, 0xa0, 0x7f, 0x20, 0x31, + 0x39, 0x38, 0x32, 0x20, 0x53, 0x69, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x72, + 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x4c, 0x74, + 0xe4, 0x3e, 0x10, 0x01, 0x00, 0x00, 0xc3, 0x13, 0x13, 0xed, 0x43, 0x49, + 0x5c, 0x2a, 0x5d, 0x5c, 0xeb, 0x21, 0x55, 0x15, 0xe5, 0x2a, 0x61, 0x5c, + 0x37, 0xed, 0x52, 0xe5, 0x60, 0x69, 0xcd, 0x6e, 0x19, 0x20, 0x06, 0xcd, + 0xb8, 0x19, 0xcd, 0xe8, 0x19, 0xc1, 0x79, 0x3d, 0xb0, 0x28, 0x28, 0xc5, + 0x03, 0x03, 0x03, 0x03, 0x2b, 0xed, 0x5b, 0x53, 0x5c, 0xd5, 0xcd, 0x55, + 0x16, 0xe1, 0x22, 0x53, 0x5c, 0xc1, 0xc5, 0x13, 0x2a, 0x61, 0x5c, 0x2b, + 0x2b, 0xed, 0xb8, 0x2a, 0x49, 0x5c, 0xeb, 0xc1, 0x70, 0x2b, 0x71, 0x2b, + 0x73, 0x2b, 0x72, 0xf1, 0xc3, 0xa2, 0x12, 0xf4, 0x09, 0xa8, 0x10, 0x4b, + 0xf4, 0x09, 0xc4, 0x15, 0x53, 0x81, 0x0f, 0xc4, 0x15, 0x52, 0xf4, 0x09, + 0xc4, 0x15, 0x50, 0x80, 0xcf, 0x12, 0x01, 0x00, 0x06, 0x00, 0x0b, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x06, 0x00, 0x10, 0x00, 0xfd, 0xcb, 0x02, 0x6e, + 0x20, 0x04, 0xfd, 0xcb, 0x02, 0xde, 0xcd, 0xe6, 0x15, 0xd8, 0x28, 0xfa, + 0xcf, 0x07, 0xd9, 0xe5, 0x2a, 0x51, 0x5c, 0x23, 0x23, 0x18, 0x08, 0x1e, + 0x30, 0x83, 0xd9, 0xe5, 0x2a, 0x51, 0x5c, 0x5e, 0x23, 0x56, 0xeb, 0xcd, + 0x2c, 0x16, 0xe1, 0xd9, 0xc9, 0x87, 0xc6, 0x16, 0x6f, 0x26, 0x5c, 0x5e, + 0x23, 0x56, 0x7a, 0xb3, 0x20, 0x02, 0xcf, 0x17, 0x1b, 0x2a, 0x4f, 0x5c, + 0x19, 0x22, 0x51, 0x5c, 0xfd, 0xcb, 0x30, 0xa6, 0x23, 0x23, 0x23, 0x23, + 0x4e, 0x21, 0x2d, 0x16, 0xcd, 0xdc, 0x16, 0xd0, 0x16, 0x00, 0x5e, 0x19, + 0xe9, 0x4b, 0x06, 0x53, 0x12, 0x50, 0x1b, 0x00, 0xfd, 0xcb, 0x02, 0xc6, + 0xfd, 0xcb, 0x01, 0xae, 0xfd, 0xcb, 0x30, 0xe6, 0x18, 0x04, 0xfd, 0xcb, + 0x02, 0x86, 0xfd, 0xcb, 0x01, 0x8e, 0xc3, 0x4d, 0x0d, 0xfd, 0xcb, 0x01, + 0xce, 0xc9, 0x01, 0x01, 0x00, 0xe5, 0xcd, 0x05, 0x1f, 0xe1, 0xcd, 0x64, + 0x16, 0x2a, 0x65, 0x5c, 0xeb, 0xed, 0xb8, 0xc9, 0xf5, 0xe5, 0x21, 0x4b, + 0x5c, 0x3e, 0x0e, 0x5e, 0x23, 0x56, 0xe3, 0xa7, 0xed, 0x52, 0x19, 0xe3, + 0x30, 0x09, 0xd5, 0xeb, 0x09, 0xeb, 0x72, 0x2b, 0x73, 0x23, 0xd1, 0x23, + 0x3d, 0x20, 0xe8, 0xeb, 0xd1, 0xf1, 0xa7, 0xed, 0x52, 0x44, 0x4d, 0x03, + 0x19, 0xeb, 0xc9, 0x00, 0x00, 0xeb, 0x11, 0x8f, 0x16, 0x7e, 0xe6, 0xc0, + 0x20, 0xf7, 0x56, 0x23, 0x5e, 0xc9, 0x2a, 0x63, 0x5c, 0x2b, 0xcd, 0x55, + 0x16, 0x23, 0x23, 0xc1, 0xed, 0x43, 0x61, 0x5c, 0xc1, 0xeb, 0x23, 0xc9, + 0x2a, 0x59, 0x5c, 0x36, 0x0d, 0x22, 0x5b, 0x5c, 0x23, 0x36, 0x80, 0x23, + 0x22, 0x61, 0x5c, 0x2a, 0x61, 0x5c, 0x22, 0x63, 0x5c, 0x2a, 0x63, 0x5c, + 0x22, 0x65, 0x5c, 0xe5, 0x21, 0x92, 0x5c, 0x22, 0x68, 0x5c, 0xe1, 0xc9, + 0xed, 0x5b, 0x59, 0x5c, 0xc3, 0xe5, 0x19, 0x23, 0x7e, 0xa7, 0xc8, 0xb9, + 0x23, 0x20, 0xf8, 0x37, 0xc9, 0xcd, 0x1e, 0x17, 0xcd, 0x01, 0x17, 0x01, + 0x00, 0x00, 0x11, 0xe2, 0xa3, 0xeb, 0x19, 0x38, 0x07, 0x01, 0xd4, 0x15, + 0x09, 0x4e, 0x23, 0x46, 0xeb, 0x71, 0x23, 0x70, 0xc9, 0xe5, 0x2a, 0x4f, + 0x5c, 0x09, 0x23, 0x23, 0x23, 0x4e, 0xeb, 0x21, 0x16, 0x17, 0xcd, 0xdc, + 0x16, 0x4e, 0x06, 0x00, 0x09, 0xe9, 0x4b, 0x05, 0x53, 0x03, 0x50, 0x01, + 0xe1, 0xc9, 0xcd, 0x94, 0x1e, 0xfe, 0x10, 0x38, 0x02, 0xcf, 0x17, 0xc6, + 0x03, 0x07, 0x21, 0x10, 0x5c, 0x4f, 0x06, 0x00, 0x09, 0x4e, 0x23, 0x46, + 0x2b, 0xc9, 0xef, 0x01, 0x38, 0xcd, 0x1e, 0x17, 0x78, 0xb1, 0x28, 0x16, + 0xeb, 0x2a, 0x4f, 0x5c, 0x09, 0x23, 0x23, 0x23, 0x7e, 0xeb, 0xfe, 0x4b, + 0x28, 0x08, 0xfe, 0x53, 0x28, 0x04, 0xfe, 0x50, 0x20, 0xcf, 0xcd, 0x5d, + 0x17, 0x73, 0x23, 0x72, 0xc9, 0xe5, 0xcd, 0xf1, 0x2b, 0x78, 0xb1, 0x20, + 0x02, 0xcf, 0x0e, 0xc5, 0x1a, 0xe6, 0xdf, 0x4f, 0x21, 0x7a, 0x17, 0xcd, + 0xdc, 0x16, 0x30, 0xf1, 0x4e, 0x06, 0x00, 0x09, 0xc1, 0xe9, 0x4b, 0x06, + 0x53, 0x08, 0x50, 0x0a, 0x00, 0x1e, 0x01, 0x18, 0x06, 0x1e, 0x06, 0x18, + 0x02, 0x1e, 0x10, 0x0b, 0x78, 0xb1, 0x20, 0xd5, 0x57, 0xe1, 0xc9, 0x18, + 0x90, 0xed, 0x73, 0x3f, 0x5c, 0xfd, 0x36, 0x02, 0x10, 0xcd, 0xaf, 0x0d, + 0xfd, 0xcb, 0x02, 0xc6, 0xfd, 0x46, 0x31, 0xcd, 0x44, 0x0e, 0xfd, 0xcb, + 0x02, 0x86, 0xfd, 0xcb, 0x30, 0xc6, 0x2a, 0x49, 0x5c, 0xed, 0x5b, 0x6c, + 0x5c, 0xa7, 0xed, 0x52, 0x19, 0x38, 0x22, 0xd5, 0xcd, 0x6e, 0x19, 0x11, + 0xc0, 0x02, 0xeb, 0xed, 0x52, 0xe3, 0xcd, 0x6e, 0x19, 0xc1, 0xc5, 0xcd, + 0xb8, 0x19, 0xc1, 0x09, 0x38, 0x0e, 0xeb, 0x56, 0x23, 0x5e, 0x2b, 0xed, + 0x53, 0x6c, 0x5c, 0x18, 0xed, 0x22, 0x6c, 0x5c, 0x2a, 0x6c, 0x5c, 0xcd, + 0x6e, 0x19, 0x28, 0x01, 0xeb, 0xcd, 0x33, 0x18, 0xfd, 0xcb, 0x02, 0xa6, + 0xc9, 0x3e, 0x03, 0x18, 0x02, 0x3e, 0x02, 0xfd, 0x36, 0x02, 0x00, 0xcd, + 0x30, 0x25, 0xc4, 0x01, 0x16, 0xdf, 0xcd, 0x70, 0x20, 0x38, 0x14, 0xdf, + 0xfe, 0x3b, 0x28, 0x04, 0xfe, 0x2c, 0x20, 0x06, 0xe7, 0xcd, 0x82, 0x1c, + 0x18, 0x08, 0xcd, 0xe6, 0x1c, 0x18, 0x03, 0xcd, 0xde, 0x1c, 0xcd, 0xee, + 0x1b, 0xcd, 0x99, 0x1e, 0x78, 0xe6, 0x3f, 0x67, 0x69, 0x22, 0x49, 0x5c, + 0xcd, 0x6e, 0x19, 0x1e, 0x01, 0xcd, 0x55, 0x18, 0xd7, 0xfd, 0xcb, 0x02, + 0x66, 0x28, 0xf6, 0x3a, 0x6b, 0x5c, 0xfd, 0x96, 0x4f, 0x20, 0xee, 0xab, + 0xc8, 0xe5, 0xd5, 0x21, 0x6c, 0x5c, 0xcd, 0x0f, 0x19, 0xd1, 0xe1, 0x18, + 0xe0, 0xed, 0x4b, 0x49, 0x5c, 0xcd, 0x80, 0x19, 0x16, 0x3e, 0x28, 0x05, + 0x11, 0x00, 0x00, 0xcb, 0x13, 0xfd, 0x73, 0x2d, 0x7e, 0xfe, 0x40, 0xc1, + 0xd0, 0xc5, 0xcd, 0x28, 0x1a, 0x23, 0x23, 0x23, 0xfd, 0xcb, 0x01, 0x86, + 0x7a, 0xa7, 0x28, 0x05, 0xd7, 0xfd, 0xcb, 0x01, 0xc6, 0xd5, 0xeb, 0xfd, + 0xcb, 0x30, 0x96, 0x21, 0x3b, 0x5c, 0xcb, 0x96, 0xfd, 0xcb, 0x37, 0x6e, + 0x28, 0x02, 0xcb, 0xd6, 0x2a, 0x5f, 0x5c, 0xa7, 0xed, 0x52, 0x20, 0x05, + 0x3e, 0x3f, 0xcd, 0xc1, 0x18, 0xcd, 0xe1, 0x18, 0xeb, 0x7e, 0xcd, 0xb6, + 0x18, 0x23, 0xfe, 0x0d, 0x28, 0x06, 0xeb, 0xcd, 0x37, 0x19, 0x18, 0xe0, + 0xd1, 0xc9, 0xfe, 0x0e, 0xc0, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x7e, + 0xc9, 0xd9, 0x2a, 0x8f, 0x5c, 0xe5, 0xcb, 0xbc, 0xcb, 0xfd, 0x22, 0x8f, + 0x5c, 0x21, 0x91, 0x5c, 0x56, 0xd5, 0x36, 0x00, 0xcd, 0xf4, 0x09, 0xe1, + 0xfd, 0x74, 0x57, 0xe1, 0x22, 0x8f, 0x5c, 0xd9, 0xc9, 0x2a, 0x5b, 0x5c, + 0xa7, 0xed, 0x52, 0xc0, 0x3a, 0x41, 0x5c, 0xcb, 0x07, 0x28, 0x04, 0xc6, + 0x43, 0x18, 0x16, 0x21, 0x3b, 0x5c, 0xcb, 0x9e, 0x3e, 0x4b, 0xcb, 0x56, + 0x28, 0x0b, 0xcb, 0xde, 0x3c, 0xfd, 0xcb, 0x30, 0x5e, 0x28, 0x02, 0x3e, + 0x43, 0xd5, 0xcd, 0xc1, 0x18, 0xd1, 0xc9, 0x5e, 0x23, 0x56, 0xe5, 0xeb, + 0x23, 0xcd, 0x6e, 0x19, 0xcd, 0x95, 0x16, 0xe1, 0xfd, 0xcb, 0x37, 0x6e, + 0xc0, 0x72, 0x2b, 0x73, 0xc9, 0x7b, 0xa7, 0xf8, 0x18, 0x0d, 0xaf, 0x09, + 0x3c, 0x38, 0xfc, 0xed, 0x42, 0x3d, 0x28, 0xf1, 0xc3, 0xef, 0x15, 0xcd, + 0x1b, 0x2d, 0x30, 0x30, 0xfe, 0x21, 0x38, 0x2c, 0xfd, 0xcb, 0x01, 0x96, + 0xfe, 0xcb, 0x28, 0x24, 0xfe, 0x3a, 0x20, 0x0e, 0xfd, 0xcb, 0x37, 0x6e, + 0x20, 0x16, 0xfd, 0xcb, 0x30, 0x56, 0x28, 0x14, 0x18, 0x0e, 0xfe, 0x22, + 0x20, 0x0a, 0xf5, 0x3a, 0x6a, 0x5c, 0xee, 0x04, 0x32, 0x6a, 0x5c, 0xf1, + 0xfd, 0xcb, 0x01, 0xd6, 0xd7, 0xc9, 0xe5, 0x2a, 0x53, 0x5c, 0x54, 0x5d, + 0xc1, 0xcd, 0x80, 0x19, 0xd0, 0xc5, 0xcd, 0xb8, 0x19, 0xeb, 0x18, 0xf4, + 0x7e, 0xb8, 0xc0, 0x23, 0x7e, 0x2b, 0xb9, 0xc9, 0x23, 0x23, 0x23, 0x22, + 0x5d, 0x5c, 0x0e, 0x00, 0x15, 0xc8, 0xe7, 0xbb, 0x20, 0x04, 0xa7, 0xc9, + 0x23, 0x7e, 0xcd, 0xb6, 0x18, 0x22, 0x5d, 0x5c, 0xfe, 0x22, 0x20, 0x01, + 0x0d, 0xfe, 0x3a, 0x28, 0x04, 0xfe, 0xcb, 0x20, 0x04, 0xcb, 0x41, 0x28, + 0xdf, 0xfe, 0x0d, 0x20, 0xe3, 0x15, 0x37, 0xc9, 0xe5, 0x7e, 0xfe, 0x40, + 0x38, 0x17, 0xcb, 0x6f, 0x28, 0x14, 0x87, 0xfa, 0xc7, 0x19, 0x3f, 0x01, + 0x05, 0x00, 0x30, 0x02, 0x0e, 0x12, 0x17, 0x23, 0x7e, 0x30, 0xfb, 0x18, + 0x06, 0x23, 0x23, 0x4e, 0x23, 0x46, 0x23, 0x09, 0xd1, 0xa7, 0xed, 0x52, + 0x44, 0x4d, 0x19, 0xeb, 0xc9, 0xcd, 0xdd, 0x19, 0xc5, 0x78, 0x2f, 0x47, + 0x79, 0x2f, 0x4f, 0x03, 0xcd, 0x64, 0x16, 0xeb, 0xe1, 0x19, 0xd5, 0xed, + 0xb0, 0xe1, 0xc9, 0x2a, 0x59, 0x5c, 0x2b, 0x22, 0x5d, 0x5c, 0xe7, 0x21, + 0x92, 0x5c, 0x22, 0x65, 0x5c, 0xcd, 0x3b, 0x2d, 0xcd, 0xa2, 0x2d, 0x38, + 0x04, 0x21, 0xf0, 0xd8, 0x09, 0xda, 0x8a, 0x1c, 0xc3, 0xc5, 0x16, 0xd5, + 0xe5, 0xaf, 0xcb, 0x78, 0x20, 0x20, 0x60, 0x69, 0x1e, 0xff, 0x18, 0x08, + 0xd5, 0x56, 0x23, 0x5e, 0xe5, 0xeb, 0x1e, 0x20, 0x01, 0x18, 0xfc, 0xcd, + 0x2a, 0x19, 0x01, 0x9c, 0xff, 0xcd, 0x2a, 0x19, 0x0e, 0xf6, 0xcd, 0x2a, + 0x19, 0x7d, 0xcd, 0xef, 0x15, 0xe1, 0xd1, 0xc9, 0xb1, 0xcb, 0xbc, 0xbf, + 0xc4, 0xaf, 0xb4, 0x93, 0x91, 0x92, 0x95, 0x98, 0x98, 0x98, 0x98, 0x98, + 0x98, 0x98, 0x7f, 0x81, 0x2e, 0x6c, 0x6e, 0x70, 0x48, 0x94, 0x56, 0x3f, + 0x41, 0x2b, 0x17, 0x1f, 0x37, 0x77, 0x44, 0x0f, 0x59, 0x2b, 0x43, 0x2d, + 0x51, 0x3a, 0x6d, 0x42, 0x0d, 0x49, 0x5c, 0x44, 0x15, 0x5d, 0x01, 0x3d, + 0x02, 0x06, 0x00, 0x67, 0x1e, 0x06, 0xcb, 0x05, 0xf0, 0x1c, 0x06, 0x00, + 0xed, 0x1e, 0x00, 0xee, 0x1c, 0x00, 0x23, 0x1f, 0x04, 0x3d, 0x06, 0xcc, + 0x06, 0x05, 0x03, 0x1d, 0x04, 0x00, 0xab, 0x1d, 0x05, 0xcd, 0x1f, 0x05, + 0x89, 0x20, 0x05, 0x02, 0x2c, 0x05, 0xb2, 0x1b, 0x00, 0xb7, 0x11, 0x03, + 0xa1, 0x1e, 0x05, 0xf9, 0x17, 0x08, 0x00, 0x80, 0x1e, 0x03, 0x4f, 0x1e, + 0x00, 0x5f, 0x1e, 0x03, 0xac, 0x1e, 0x00, 0x6b, 0x0d, 0x09, 0x00, 0xdc, + 0x22, 0x06, 0x00, 0x3a, 0x1f, 0x05, 0xed, 0x1d, 0x05, 0x27, 0x1e, 0x03, + 0x42, 0x1e, 0x09, 0x05, 0x82, 0x23, 0x00, 0xac, 0x0e, 0x05, 0xc9, 0x1f, + 0x05, 0xf5, 0x17, 0x0b, 0x0b, 0x0b, 0x0b, 0x08, 0x00, 0xf8, 0x03, 0x09, + 0x05, 0x20, 0x23, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x00, 0x7a, + 0x1e, 0x06, 0x00, 0x94, 0x22, 0x05, 0x60, 0x1f, 0x06, 0x2c, 0x0a, 0x00, + 0x36, 0x17, 0x06, 0x00, 0xe5, 0x16, 0x0a, 0x00, 0x93, 0x17, 0x0a, 0x2c, + 0x0a, 0x00, 0x93, 0x17, 0x0a, 0x00, 0x93, 0x17, 0x00, 0x93, 0x17, 0xfd, + 0xcb, 0x01, 0xbe, 0xcd, 0xfb, 0x19, 0xaf, 0x32, 0x47, 0x5c, 0x3d, 0x32, + 0x3a, 0x5c, 0x18, 0x01, 0xe7, 0xcd, 0xbf, 0x16, 0xfd, 0x34, 0x0d, 0xfa, + 0x8a, 0x1c, 0xdf, 0x06, 0x00, 0xfe, 0x0d, 0x28, 0x7a, 0xfe, 0x3a, 0x28, + 0xeb, 0x21, 0x76, 0x1b, 0xe5, 0x4f, 0xe7, 0x79, 0xd6, 0xce, 0xda, 0x8a, + 0x1c, 0x4f, 0x21, 0x48, 0x1a, 0x09, 0x4e, 0x09, 0x18, 0x03, 0x2a, 0x74, + 0x5c, 0x7e, 0x23, 0x22, 0x74, 0x5c, 0x01, 0x52, 0x1b, 0xc5, 0x4f, 0xfe, + 0x20, 0x30, 0x0c, 0x21, 0x01, 0x1c, 0x06, 0x00, 0x09, 0x4e, 0x09, 0xe5, + 0xdf, 0x05, 0xc9, 0xdf, 0xb9, 0xc2, 0x8a, 0x1c, 0xe7, 0xc9, 0xcd, 0x54, + 0x1f, 0x38, 0x02, 0xcf, 0x14, 0xfd, 0xcb, 0x0a, 0x7e, 0x20, 0x71, 0x2a, + 0x42, 0x5c, 0xcb, 0x7c, 0x28, 0x14, 0x21, 0xfe, 0xff, 0x22, 0x45, 0x5c, + 0x2a, 0x61, 0x5c, 0x2b, 0xed, 0x5b, 0x59, 0x5c, 0x1b, 0x3a, 0x44, 0x5c, + 0x18, 0x33, 0xcd, 0x6e, 0x19, 0x3a, 0x44, 0x5c, 0x28, 0x19, 0xa7, 0x20, + 0x43, 0x47, 0x7e, 0xe6, 0xc0, 0x78, 0x28, 0x0f, 0xcf, 0xff, 0xc1, 0xcd, + 0x30, 0x25, 0xc8, 0x2a, 0x55, 0x5c, 0x3e, 0xc0, 0xa6, 0xc0, 0xaf, 0xfe, + 0x01, 0xce, 0x00, 0x56, 0x23, 0x5e, 0xed, 0x53, 0x45, 0x5c, 0x23, 0x5e, + 0x23, 0x56, 0xeb, 0x19, 0x23, 0x22, 0x55, 0x5c, 0xeb, 0x22, 0x5d, 0x5c, + 0x57, 0x1e, 0x00, 0xfd, 0x36, 0x0a, 0xff, 0x15, 0xfd, 0x72, 0x0d, 0xca, + 0x28, 0x1b, 0x14, 0xcd, 0x8b, 0x19, 0x28, 0x08, 0xcf, 0x16, 0xcd, 0x30, + 0x25, 0xc0, 0xc1, 0xc1, 0xdf, 0xfe, 0x0d, 0x28, 0xba, 0xfe, 0x3a, 0xca, + 0x28, 0x1b, 0xc3, 0x8a, 0x1c, 0x0f, 0x1d, 0x4b, 0x09, 0x67, 0x0b, 0x7b, + 0x8e, 0x71, 0xb4, 0x81, 0xcf, 0xcd, 0xde, 0x1c, 0xbf, 0xc1, 0xcc, 0xee, + 0x1b, 0xeb, 0x2a, 0x74, 0x5c, 0x4e, 0x23, 0x46, 0xeb, 0xc5, 0xc9, 0xcd, + 0xb2, 0x28, 0xfd, 0x36, 0x37, 0x00, 0x30, 0x08, 0xfd, 0xcb, 0x37, 0xce, + 0x20, 0x18, 0xcf, 0x01, 0xcc, 0x96, 0x29, 0xfd, 0xcb, 0x01, 0x76, 0x20, + 0x0d, 0xaf, 0xcd, 0x30, 0x25, 0xc4, 0xf1, 0x2b, 0x21, 0x71, 0x5c, 0xb6, + 0x77, 0xeb, 0xed, 0x43, 0x72, 0x5c, 0x22, 0x4d, 0x5c, 0xc9, 0xc1, 0xcd, + 0x56, 0x1c, 0xcd, 0xee, 0x1b, 0xc9, 0x3a, 0x3b, 0x5c, 0xf5, 0xcd, 0xfb, + 0x24, 0xf1, 0xfd, 0x56, 0x01, 0xaa, 0xe6, 0x40, 0x20, 0x24, 0xcb, 0x7a, + 0xc2, 0xff, 0x2a, 0xc9, 0xcd, 0xb2, 0x28, 0xf5, 0x79, 0xf6, 0x9f, 0x3c, + 0x20, 0x14, 0xf1, 0x18, 0xa9, 0xe7, 0xcd, 0x82, 0x1c, 0xfe, 0x2c, 0x20, + 0x09, 0xe7, 0xcd, 0xfb, 0x24, 0xfd, 0xcb, 0x01, 0x76, 0xc0, 0xcf, 0x0b, + 0xcd, 0xfb, 0x24, 0xfd, 0xcb, 0x01, 0x76, 0xc8, 0x18, 0xf4, 0xfd, 0xcb, + 0x01, 0x7e, 0xfd, 0xcb, 0x02, 0x86, 0xc4, 0x4d, 0x0d, 0xf1, 0x3a, 0x74, + 0x5c, 0xd6, 0x13, 0xcd, 0xfc, 0x21, 0xcd, 0xee, 0x1b, 0x2a, 0x8f, 0x5c, + 0x22, 0x8d, 0x5c, 0x21, 0x91, 0x5c, 0x7e, 0x07, 0xae, 0xe6, 0xaa, 0xae, + 0x77, 0xc9, 0xcd, 0x30, 0x25, 0x28, 0x13, 0xfd, 0xcb, 0x02, 0x86, 0xcd, + 0x4d, 0x0d, 0x21, 0x90, 0x5c, 0x7e, 0xf6, 0xf8, 0x77, 0xfd, 0xcb, 0x57, + 0xb6, 0xdf, 0xcd, 0xe2, 0x21, 0x18, 0x9f, 0xc3, 0x05, 0x06, 0xfe, 0x0d, + 0x28, 0x04, 0xfe, 0x3a, 0x20, 0x9c, 0xcd, 0x30, 0x25, 0xc8, 0xef, 0xa0, + 0x38, 0xc9, 0xcf, 0x08, 0xc1, 0xcd, 0x30, 0x25, 0x28, 0x0a, 0xef, 0x02, + 0x38, 0xeb, 0xcd, 0xe9, 0x34, 0xda, 0xb3, 0x1b, 0xc3, 0x29, 0x1b, 0xfe, + 0xcd, 0x20, 0x09, 0xe7, 0xcd, 0x82, 0x1c, 0xcd, 0xee, 0x1b, 0x18, 0x06, + 0xcd, 0xee, 0x1b, 0xef, 0xa1, 0x38, 0xef, 0xc0, 0x02, 0x01, 0xe0, 0x01, + 0x38, 0xcd, 0xff, 0x2a, 0x22, 0x68, 0x5c, 0x2b, 0x7e, 0xcb, 0xfe, 0x01, + 0x06, 0x00, 0x09, 0x07, 0x38, 0x06, 0x0e, 0x0d, 0xcd, 0x55, 0x16, 0x23, + 0xe5, 0xef, 0x02, 0x02, 0x38, 0xe1, 0xeb, 0x0e, 0x0a, 0xed, 0xb0, 0x2a, + 0x45, 0x5c, 0xeb, 0x73, 0x23, 0x72, 0xfd, 0x56, 0x0d, 0x14, 0x23, 0x72, + 0xcd, 0xda, 0x1d, 0xd0, 0xfd, 0x46, 0x38, 0x2a, 0x45, 0x5c, 0x22, 0x42, + 0x5c, 0x3a, 0x47, 0x5c, 0xed, 0x44, 0x57, 0x2a, 0x5d, 0x5c, 0x1e, 0xf3, + 0xc5, 0xed, 0x4b, 0x55, 0x5c, 0xcd, 0x86, 0x1d, 0xed, 0x43, 0x55, 0x5c, + 0xc1, 0x38, 0x11, 0xe7, 0xf6, 0x20, 0xb8, 0x28, 0x03, 0xe7, 0x18, 0xe8, + 0xe7, 0x3e, 0x01, 0x92, 0x32, 0x44, 0x5c, 0xc9, 0xcf, 0x11, 0x7e, 0xfe, + 0x3a, 0x28, 0x18, 0x23, 0x7e, 0xe6, 0xc0, 0x37, 0xc0, 0x46, 0x23, 0x4e, + 0xed, 0x43, 0x42, 0x5c, 0x23, 0x4e, 0x23, 0x46, 0xe5, 0x09, 0x44, 0x4d, + 0xe1, 0x16, 0x00, 0xc5, 0xcd, 0x8b, 0x19, 0xc1, 0xd0, 0x18, 0xe0, 0xfd, + 0xcb, 0x37, 0x4e, 0xc2, 0x2e, 0x1c, 0x2a, 0x4d, 0x5c, 0xcb, 0x7e, 0x28, + 0x1f, 0x23, 0x22, 0x68, 0x5c, 0xef, 0xe0, 0xe2, 0x0f, 0xc0, 0x02, 0x38, + 0xcd, 0xda, 0x1d, 0xd8, 0x2a, 0x68, 0x5c, 0x11, 0x0f, 0x00, 0x19, 0x5e, + 0x23, 0x56, 0x23, 0x66, 0xeb, 0xc3, 0x73, 0x1e, 0xcf, 0x00, 0xef, 0xe1, + 0xe0, 0xe2, 0x36, 0x00, 0x02, 0x01, 0x03, 0x37, 0x00, 0x04, 0x38, 0xa7, + 0xc9, 0x38, 0x37, 0xc9, 0xe7, 0xcd, 0x1f, 0x1c, 0xcd, 0x30, 0x25, 0x28, + 0x29, 0xdf, 0x22, 0x5f, 0x5c, 0x2a, 0x57, 0x5c, 0x7e, 0xfe, 0x2c, 0x28, + 0x09, 0x1e, 0xe4, 0xcd, 0x86, 0x1d, 0x30, 0x02, 0xcf, 0x0d, 0xcd, 0x77, + 0x00, 0xcd, 0x56, 0x1c, 0xdf, 0x22, 0x57, 0x5c, 0x2a, 0x5f, 0x5c, 0xfd, + 0x36, 0x26, 0x00, 0xcd, 0x78, 0x00, 0xdf, 0xfe, 0x2c, 0x28, 0xc9, 0xcd, + 0xee, 0x1b, 0xc9, 0xcd, 0x30, 0x25, 0x20, 0x0b, 0xcd, 0xfb, 0x24, 0xfe, + 0x2c, 0xc4, 0xee, 0x1b, 0xe7, 0x18, 0xf5, 0x3e, 0xe4, 0x47, 0xed, 0xb9, + 0x11, 0x00, 0x02, 0xc3, 0x8b, 0x19, 0xcd, 0x99, 0x1e, 0x60, 0x69, 0xcd, + 0x6e, 0x19, 0x2b, 0x22, 0x57, 0x5c, 0xc9, 0xcd, 0x99, 0x1e, 0x78, 0xb1, + 0x20, 0x04, 0xed, 0x4b, 0x78, 0x5c, 0xed, 0x43, 0x76, 0x5c, 0xc9, 0x2a, + 0x6e, 0x5c, 0xfd, 0x56, 0x36, 0x18, 0x0c, 0xcd, 0x99, 0x1e, 0x60, 0x69, + 0x16, 0x00, 0x7c, 0xfe, 0xf0, 0x30, 0x2c, 0x22, 0x42, 0x5c, 0xfd, 0x72, + 0x0a, 0xc9, 0xcd, 0x85, 0x1e, 0xed, 0x79, 0xc9, 0xcd, 0x85, 0x1e, 0x02, + 0xc9, 0xcd, 0xd5, 0x2d, 0x38, 0x15, 0x28, 0x02, 0xed, 0x44, 0xf5, 0xcd, + 0x99, 0x1e, 0xf1, 0xc9, 0xcd, 0xd5, 0x2d, 0x18, 0x03, 0xcd, 0xa2, 0x2d, + 0x38, 0x01, 0xc8, 0xcf, 0x0a, 0xcd, 0x67, 0x1e, 0x01, 0x00, 0x00, 0xcd, + 0x45, 0x1e, 0x18, 0x03, 0xcd, 0x99, 0x1e, 0x78, 0xb1, 0x20, 0x04, 0xed, + 0x4b, 0xb2, 0x5c, 0xc5, 0xed, 0x5b, 0x4b, 0x5c, 0x2a, 0x59, 0x5c, 0x2b, + 0xcd, 0xe5, 0x19, 0xcd, 0x6b, 0x0d, 0x2a, 0x65, 0x5c, 0x11, 0x32, 0x00, + 0x19, 0xd1, 0xed, 0x52, 0x30, 0x08, 0x2a, 0xb4, 0x5c, 0xa7, 0xed, 0x52, + 0x30, 0x02, 0xcf, 0x15, 0xeb, 0x22, 0xb2, 0x5c, 0xd1, 0xc1, 0x36, 0x3e, + 0x2b, 0xf9, 0xc5, 0xed, 0x73, 0x3d, 0x5c, 0xeb, 0xe9, 0xd1, 0xfd, 0x66, + 0x0d, 0x24, 0xe3, 0x33, 0xed, 0x4b, 0x45, 0x5c, 0xc5, 0xe5, 0xed, 0x73, + 0x3d, 0x5c, 0xd5, 0xcd, 0x67, 0x1e, 0x01, 0x14, 0x00, 0x2a, 0x65, 0x5c, + 0x09, 0x38, 0x0a, 0xeb, 0x21, 0x50, 0x00, 0x19, 0x38, 0x03, 0xed, 0x72, + 0xd8, 0x2e, 0x03, 0xc3, 0x55, 0x00, 0x01, 0x00, 0x00, 0xcd, 0x05, 0x1f, + 0x44, 0x4d, 0xc9, 0xc1, 0xe1, 0xd1, 0x7a, 0xfe, 0x3e, 0x28, 0x0b, 0x3b, + 0xe3, 0xeb, 0xed, 0x73, 0x3d, 0x5c, 0xc5, 0xc3, 0x73, 0x1e, 0xd5, 0xe5, + 0xcf, 0x06, 0xcd, 0x99, 0x1e, 0x76, 0x0b, 0x78, 0xb1, 0x28, 0x0c, 0x78, + 0xa1, 0x3c, 0x20, 0x01, 0x03, 0xfd, 0xcb, 0x01, 0x6e, 0x28, 0xee, 0xfd, + 0xcb, 0x01, 0xae, 0xc9, 0x3e, 0x7f, 0xdb, 0xfe, 0x1f, 0xd8, 0x3e, 0xfe, + 0xdb, 0xfe, 0x1f, 0xc9, 0xcd, 0x30, 0x25, 0x28, 0x05, 0x3e, 0xce, 0xc3, + 0x39, 0x1e, 0xfd, 0xcb, 0x01, 0xf6, 0xcd, 0x8d, 0x2c, 0x30, 0x16, 0xe7, + 0xfe, 0x24, 0x20, 0x05, 0xfd, 0xcb, 0x01, 0xb6, 0xe7, 0xfe, 0x28, 0x20, + 0x3c, 0xe7, 0xfe, 0x29, 0x28, 0x20, 0xcd, 0x8d, 0x2c, 0xd2, 0x8a, 0x1c, + 0xeb, 0xe7, 0xfe, 0x24, 0x20, 0x02, 0xeb, 0xe7, 0xeb, 0x01, 0x06, 0x00, + 0xcd, 0x55, 0x16, 0x23, 0x23, 0x36, 0x0e, 0xfe, 0x2c, 0x20, 0x03, 0xe7, + 0x18, 0xe0, 0xfe, 0x29, 0x20, 0x13, 0xe7, 0xfe, 0x3d, 0x20, 0x0e, 0xe7, + 0x3a, 0x3b, 0x5c, 0xf5, 0xcd, 0xfb, 0x24, 0xf1, 0xfd, 0xae, 0x01, 0xe6, + 0x40, 0xc2, 0x8a, 0x1c, 0xcd, 0xee, 0x1b, 0xcd, 0x30, 0x25, 0xe1, 0xc8, + 0xe9, 0x3e, 0x03, 0x18, 0x02, 0x3e, 0x02, 0xcd, 0x30, 0x25, 0xc4, 0x01, + 0x16, 0xcd, 0x4d, 0x0d, 0xcd, 0xdf, 0x1f, 0xcd, 0xee, 0x1b, 0xc9, 0xdf, + 0xcd, 0x45, 0x20, 0x28, 0x0d, 0xcd, 0x4e, 0x20, 0x28, 0xfb, 0xcd, 0xfc, + 0x1f, 0xcd, 0x4e, 0x20, 0x28, 0xf3, 0xfe, 0x29, 0xc8, 0xcd, 0xc3, 0x1f, + 0x3e, 0x0d, 0xd7, 0xc9, 0xdf, 0xfe, 0xac, 0x20, 0x0d, 0xcd, 0x79, 0x1c, + 0xcd, 0xc3, 0x1f, 0xcd, 0x07, 0x23, 0x3e, 0x16, 0x18, 0x10, 0xfe, 0xad, + 0x20, 0x12, 0xe7, 0xcd, 0x82, 0x1c, 0xcd, 0xc3, 0x1f, 0xcd, 0x99, 0x1e, + 0x3e, 0x17, 0xd7, 0x79, 0xd7, 0x78, 0xd7, 0xc9, 0xcd, 0xf2, 0x21, 0xd0, + 0xcd, 0x70, 0x20, 0xd0, 0xcd, 0xfb, 0x24, 0xcd, 0xc3, 0x1f, 0xfd, 0xcb, + 0x01, 0x76, 0xcc, 0xf1, 0x2b, 0xc2, 0xe3, 0x2d, 0x78, 0xb1, 0x0b, 0xc8, + 0x1a, 0x13, 0xd7, 0x18, 0xf7, 0xfe, 0x29, 0xc8, 0xfe, 0x0d, 0xc8, 0xfe, + 0x3a, 0xc9, 0xdf, 0xfe, 0x3b, 0x28, 0x14, 0xfe, 0x2c, 0x20, 0x0a, 0xcd, + 0x30, 0x25, 0x28, 0x0b, 0x3e, 0x06, 0xd7, 0x18, 0x06, 0xfe, 0x27, 0xc0, + 0xcd, 0xf5, 0x1f, 0xe7, 0xcd, 0x45, 0x20, 0x20, 0x01, 0xc1, 0xbf, 0xc9, + 0xfe, 0x23, 0x37, 0xc0, 0xe7, 0xcd, 0x82, 0x1c, 0xa7, 0xcd, 0xc3, 0x1f, + 0xcd, 0x94, 0x1e, 0xfe, 0x10, 0xd2, 0x0e, 0x16, 0xcd, 0x01, 0x16, 0xa7, + 0xc9, 0xcd, 0x30, 0x25, 0x28, 0x08, 0x3e, 0x01, 0xcd, 0x01, 0x16, 0xcd, + 0x6e, 0x0d, 0xfd, 0x36, 0x02, 0x01, 0xcd, 0xc1, 0x20, 0xcd, 0xee, 0x1b, + 0xed, 0x4b, 0x88, 0x5c, 0x3a, 0x6b, 0x5c, 0xb8, 0x38, 0x03, 0x0e, 0x21, + 0x47, 0xed, 0x43, 0x88, 0x5c, 0x3e, 0x19, 0x90, 0x32, 0x8c, 0x5c, 0xfd, + 0xcb, 0x02, 0x86, 0xcd, 0xd9, 0x0d, 0xc3, 0x6e, 0x0d, 0xcd, 0x4e, 0x20, + 0x28, 0xfb, 0xfe, 0x28, 0x20, 0x0e, 0xe7, 0xcd, 0xdf, 0x1f, 0xdf, 0xfe, + 0x29, 0xc2, 0x8a, 0x1c, 0xe7, 0xc3, 0xb2, 0x21, 0xfe, 0xca, 0x20, 0x11, + 0xe7, 0xcd, 0x1f, 0x1c, 0xfd, 0xcb, 0x37, 0xfe, 0xfd, 0xcb, 0x01, 0x76, + 0xc2, 0x8a, 0x1c, 0x18, 0x0d, 0xcd, 0x8d, 0x2c, 0xd2, 0xaf, 0x21, 0xcd, + 0x1f, 0x1c, 0xfd, 0xcb, 0x37, 0xbe, 0xcd, 0x30, 0x25, 0xca, 0xb2, 0x21, + 0xcd, 0xbf, 0x16, 0x21, 0x71, 0x5c, 0xcb, 0xb6, 0xcb, 0xee, 0x01, 0x01, + 0x00, 0xcb, 0x7e, 0x20, 0x0b, 0x3a, 0x3b, 0x5c, 0xe6, 0x40, 0x20, 0x02, + 0x0e, 0x03, 0xb6, 0x77, 0xf7, 0x36, 0x0d, 0x79, 0x0f, 0x0f, 0x30, 0x05, + 0x3e, 0x22, 0x12, 0x2b, 0x77, 0x22, 0x5b, 0x5c, 0xfd, 0xcb, 0x37, 0x7e, + 0x20, 0x2c, 0x2a, 0x5d, 0x5c, 0xe5, 0x2a, 0x3d, 0x5c, 0xe5, 0x21, 0x3a, + 0x21, 0xe5, 0xfd, 0xcb, 0x30, 0x66, 0x28, 0x04, 0xed, 0x73, 0x3d, 0x5c, + 0x2a, 0x61, 0x5c, 0xcd, 0xa7, 0x11, 0xfd, 0x36, 0x00, 0xff, 0xcd, 0x2c, + 0x0f, 0xfd, 0xcb, 0x01, 0xbe, 0xcd, 0xb9, 0x21, 0x18, 0x03, 0xcd, 0x2c, + 0x0f, 0xfd, 0x36, 0x22, 0x00, 0xcd, 0xd6, 0x21, 0x20, 0x0a, 0xcd, 0x1d, + 0x11, 0xed, 0x4b, 0x82, 0x5c, 0xcd, 0xd9, 0x0d, 0x21, 0x71, 0x5c, 0xcb, + 0xae, 0xcb, 0x7e, 0xcb, 0xbe, 0x20, 0x1c, 0xe1, 0xe1, 0x22, 0x3d, 0x5c, + 0xe1, 0x22, 0x5f, 0x5c, 0xfd, 0xcb, 0x01, 0xfe, 0xcd, 0xb9, 0x21, 0x2a, + 0x5f, 0x5c, 0xfd, 0x36, 0x26, 0x00, 0x22, 0x5d, 0x5c, 0x18, 0x17, 0x2a, + 0x63, 0x5c, 0xed, 0x5b, 0x61, 0x5c, 0x37, 0xed, 0x52, 0x44, 0x4d, 0xcd, + 0xb2, 0x2a, 0xcd, 0xff, 0x2a, 0x18, 0x03, 0xcd, 0xfc, 0x1f, 0xcd, 0x4e, + 0x20, 0xca, 0xc1, 0x20, 0xc9, 0x2a, 0x61, 0x5c, 0x22, 0x5d, 0x5c, 0xdf, + 0xfe, 0xe2, 0x28, 0x0c, 0x3a, 0x71, 0x5c, 0xcd, 0x59, 0x1c, 0xdf, 0xfe, + 0x0d, 0xc8, 0xcf, 0x0b, 0xcd, 0x30, 0x25, 0xc8, 0xcf, 0x10, 0x2a, 0x51, + 0x5c, 0x23, 0x23, 0x23, 0x23, 0x7e, 0xfe, 0x4b, 0xc9, 0xe7, 0xcd, 0xf2, + 0x21, 0xd8, 0xdf, 0xfe, 0x2c, 0x28, 0xf6, 0xfe, 0x3b, 0x28, 0xf2, 0xc3, + 0x8a, 0x1c, 0xfe, 0xd9, 0xd8, 0xfe, 0xdf, 0x3f, 0xd8, 0xf5, 0xe7, 0xf1, + 0xd6, 0xc9, 0xf5, 0xcd, 0x82, 0x1c, 0xf1, 0xa7, 0xcd, 0xc3, 0x1f, 0xf5, + 0xcd, 0x94, 0x1e, 0x57, 0xf1, 0xd7, 0x7a, 0xd7, 0xc9, 0xd6, 0x11, 0xce, + 0x00, 0x28, 0x1d, 0xd6, 0x02, 0xce, 0x00, 0x28, 0x56, 0xfe, 0x01, 0x7a, + 0x06, 0x01, 0x20, 0x04, 0x07, 0x07, 0x06, 0x04, 0x4f, 0x7a, 0xfe, 0x02, + 0x30, 0x16, 0x79, 0x21, 0x91, 0x5c, 0x18, 0x38, 0x7a, 0x06, 0x07, 0x38, + 0x05, 0x07, 0x07, 0x07, 0x06, 0x38, 0x4f, 0x7a, 0xfe, 0x0a, 0x38, 0x02, + 0xcf, 0x13, 0x21, 0x8f, 0x5c, 0xfe, 0x08, 0x38, 0x0b, 0x7e, 0x28, 0x07, + 0xb0, 0x2f, 0xe6, 0x24, 0x28, 0x01, 0x78, 0x4f, 0x79, 0xcd, 0x6c, 0x22, + 0x3e, 0x07, 0xba, 0x9f, 0xcd, 0x6c, 0x22, 0x07, 0x07, 0xe6, 0x50, 0x47, + 0x3e, 0x08, 0xba, 0x9f, 0xae, 0xa0, 0xae, 0x77, 0x23, 0x78, 0xc9, 0x9f, + 0x7a, 0x0f, 0x06, 0x80, 0x20, 0x03, 0x0f, 0x06, 0x40, 0x4f, 0x7a, 0xfe, + 0x08, 0x28, 0x04, 0xfe, 0x02, 0x30, 0xbd, 0x79, 0x21, 0x8f, 0x5c, 0xcd, + 0x6c, 0x22, 0x79, 0x0f, 0x0f, 0x0f, 0x18, 0xd8, 0xcd, 0x94, 0x1e, 0xfe, + 0x08, 0x30, 0xa9, 0xd3, 0xfe, 0x07, 0x07, 0x07, 0xcb, 0x6f, 0x20, 0x02, + 0xee, 0x07, 0x32, 0x48, 0x5c, 0xc9, 0x3e, 0xaf, 0x90, 0xda, 0xf9, 0x24, + 0x47, 0xa7, 0x1f, 0x37, 0x1f, 0xa7, 0x1f, 0xa8, 0xe6, 0xf8, 0xa8, 0x67, + 0x79, 0x07, 0x07, 0x07, 0xa8, 0xe6, 0xc7, 0xa8, 0x07, 0x07, 0x6f, 0x79, + 0xe6, 0x07, 0xc9, 0xcd, 0x07, 0x23, 0xcd, 0xaa, 0x22, 0x47, 0x04, 0x7e, + 0x07, 0x10, 0xfd, 0xe6, 0x01, 0xc3, 0x28, 0x2d, 0xcd, 0x07, 0x23, 0xcd, + 0xe5, 0x22, 0xc3, 0x4d, 0x0d, 0xed, 0x43, 0x7d, 0x5c, 0xcd, 0xaa, 0x22, + 0x47, 0x04, 0x3e, 0xfe, 0x0f, 0x10, 0xfd, 0x47, 0x7e, 0xfd, 0x4e, 0x57, + 0xcb, 0x41, 0x20, 0x01, 0xa0, 0xcb, 0x51, 0x20, 0x02, 0xa8, 0x2f, 0x77, + 0xc3, 0xdb, 0x0b, 0xcd, 0x14, 0x23, 0x47, 0xc5, 0xcd, 0x14, 0x23, 0x59, + 0xc1, 0x51, 0x4f, 0xc9, 0xcd, 0xd5, 0x2d, 0xda, 0xf9, 0x24, 0x0e, 0x01, + 0xc8, 0x0e, 0xff, 0xc9, 0xdf, 0xfe, 0x2c, 0xc2, 0x8a, 0x1c, 0xe7, 0xcd, + 0x82, 0x1c, 0xcd, 0xee, 0x1b, 0xef, 0x2a, 0x3d, 0x38, 0x7e, 0xfe, 0x81, + 0x30, 0x05, 0xef, 0x02, 0x38, 0x18, 0xa1, 0xef, 0xa3, 0x38, 0x36, 0x83, + 0xef, 0xc5, 0x02, 0x38, 0xcd, 0x7d, 0x24, 0xc5, 0xef, 0x31, 0xe1, 0x04, + 0x38, 0x7e, 0xfe, 0x80, 0x30, 0x08, 0xef, 0x02, 0x02, 0x38, 0xc1, 0xc3, + 0xdc, 0x22, 0xef, 0xc2, 0x01, 0xc0, 0x02, 0x03, 0x01, 0xe0, 0x0f, 0xc0, + 0x01, 0x31, 0xe0, 0x01, 0x31, 0xe0, 0xa0, 0xc1, 0x02, 0x38, 0xfd, 0x34, + 0x62, 0xcd, 0x94, 0x1e, 0x6f, 0xe5, 0xcd, 0x94, 0x1e, 0xe1, 0x67, 0x22, + 0x7d, 0x5c, 0xc1, 0xc3, 0x20, 0x24, 0xdf, 0xfe, 0x2c, 0x28, 0x06, 0xcd, + 0xee, 0x1b, 0xc3, 0x77, 0x24, 0xe7, 0xcd, 0x82, 0x1c, 0xcd, 0xee, 0x1b, + 0xef, 0xc5, 0xa2, 0x04, 0x1f, 0x31, 0x30, 0x30, 0x00, 0x06, 0x02, 0x38, + 0xc3, 0x77, 0x24, 0xc0, 0x02, 0xc1, 0x02, 0x31, 0x2a, 0xe1, 0x01, 0xe1, + 0x2a, 0x0f, 0xe0, 0x05, 0x2a, 0xe0, 0x01, 0x3d, 0x38, 0x7e, 0xfe, 0x81, + 0x30, 0x07, 0xef, 0x02, 0x02, 0x38, 0xc3, 0x77, 0x24, 0xcd, 0x7d, 0x24, + 0xc5, 0xef, 0x02, 0xe1, 0x01, 0x05, 0xc1, 0x02, 0x01, 0x31, 0xe1, 0x04, + 0xc2, 0x02, 0x01, 0x31, 0xe1, 0x04, 0xe2, 0xe5, 0xe0, 0x03, 0xa2, 0x04, + 0x31, 0x1f, 0xc5, 0x02, 0x20, 0xc0, 0x02, 0xc2, 0x02, 0xc1, 0xe5, 0x04, + 0xe0, 0xe2, 0x04, 0x0f, 0xe1, 0x01, 0xc1, 0x02, 0xe0, 0x04, 0xe2, 0xe5, + 0x04, 0x03, 0xc2, 0x2a, 0xe1, 0x2a, 0x0f, 0x02, 0x38, 0x1a, 0xfe, 0x81, + 0xc1, 0xda, 0x77, 0x24, 0xc5, 0xef, 0x01, 0x38, 0x3a, 0x7d, 0x5c, 0xcd, + 0x28, 0x2d, 0xef, 0xc0, 0x0f, 0x01, 0x38, 0x3a, 0x7e, 0x5c, 0xcd, 0x28, + 0x2d, 0xef, 0xc5, 0x0f, 0xe0, 0xe5, 0x38, 0xc1, 0x05, 0x28, 0x3c, 0x18, + 0x14, 0xef, 0xe1, 0x31, 0xe3, 0x04, 0xe2, 0xe4, 0x04, 0x03, 0xc1, 0x02, + 0xe4, 0x04, 0xe2, 0xe3, 0x04, 0x0f, 0xc2, 0x02, 0x38, 0xc5, 0xef, 0xc0, + 0x02, 0xe1, 0x0f, 0x31, 0x38, 0x3a, 0x7d, 0x5c, 0xcd, 0x28, 0x2d, 0xef, + 0x03, 0xe0, 0xe2, 0x0f, 0xc0, 0x01, 0xe0, 0x38, 0x3a, 0x7e, 0x5c, 0xcd, + 0x28, 0x2d, 0xef, 0x03, 0x38, 0xcd, 0xb7, 0x24, 0xc1, 0x10, 0xc6, 0xef, + 0x02, 0x02, 0x01, 0x38, 0x3a, 0x7d, 0x5c, 0xcd, 0x28, 0x2d, 0xef, 0x03, + 0x01, 0x38, 0x3a, 0x7e, 0x5c, 0xcd, 0x28, 0x2d, 0xef, 0x03, 0x38, 0xcd, + 0xb7, 0x24, 0xc3, 0x4d, 0x0d, 0xef, 0x31, 0x28, 0x34, 0x32, 0x00, 0x01, + 0x05, 0xe5, 0x01, 0x05, 0x2a, 0x38, 0xcd, 0xd5, 0x2d, 0x38, 0x06, 0xe6, + 0xfc, 0xc6, 0x04, 0x30, 0x02, 0x3e, 0xfc, 0xf5, 0xcd, 0x28, 0x2d, 0xef, + 0xe5, 0x01, 0x05, 0x31, 0x1f, 0xc4, 0x02, 0x31, 0xa2, 0x04, 0x1f, 0xc1, + 0x01, 0xc0, 0x02, 0x31, 0x04, 0x31, 0x0f, 0xa1, 0x03, 0x1b, 0xc3, 0x02, + 0x38, 0xc1, 0xc9, 0xcd, 0x07, 0x23, 0x79, 0xb8, 0x30, 0x06, 0x69, 0xd5, + 0xaf, 0x5f, 0x18, 0x07, 0xb1, 0xc8, 0x68, 0x41, 0xd5, 0x16, 0x00, 0x60, + 0x78, 0x1f, 0x85, 0x38, 0x03, 0xbc, 0x38, 0x07, 0x94, 0x4f, 0xd9, 0xc1, + 0xc5, 0x18, 0x04, 0x4f, 0xd5, 0xd9, 0xc1, 0x2a, 0x7d, 0x5c, 0x78, 0x84, + 0x47, 0x79, 0x3c, 0x85, 0x38, 0x0d, 0x28, 0x0d, 0x3d, 0x4f, 0xcd, 0xe5, + 0x22, 0xd9, 0x79, 0x10, 0xd9, 0xd1, 0xc9, 0x28, 0xf3, 0xcf, 0x0a, 0xdf, + 0x06, 0x00, 0xc5, 0x4f, 0x21, 0x96, 0x25, 0xcd, 0xdc, 0x16, 0x79, 0xd2, + 0x84, 0x26, 0x06, 0x00, 0x4e, 0x09, 0xe9, 0xcd, 0x74, 0x00, 0x03, 0xfe, + 0x0d, 0xca, 0x8a, 0x1c, 0xfe, 0x22, 0x20, 0xf3, 0xcd, 0x74, 0x00, 0xfe, + 0x22, 0xc9, 0xe7, 0xfe, 0x28, 0x20, 0x06, 0xcd, 0x79, 0x1c, 0xdf, 0xfe, + 0x29, 0xc2, 0x8a, 0x1c, 0xfd, 0xcb, 0x01, 0x7e, 0xc9, 0xcd, 0x07, 0x23, + 0x2a, 0x36, 0x5c, 0x11, 0x00, 0x01, 0x19, 0x79, 0x0f, 0x0f, 0x0f, 0xe6, + 0xe0, 0xa8, 0x5f, 0x79, 0xe6, 0x18, 0xee, 0x40, 0x57, 0x06, 0x60, 0xc5, + 0xd5, 0xe5, 0x1a, 0xae, 0x28, 0x04, 0x3c, 0x20, 0x1a, 0x3d, 0x4f, 0x06, + 0x07, 0x14, 0x23, 0x1a, 0xae, 0xa9, 0x20, 0x0f, 0x10, 0xf7, 0xc1, 0xc1, + 0xc1, 0x3e, 0x80, 0x90, 0x01, 0x01, 0x00, 0xf7, 0x12, 0x18, 0x0a, 0xe1, + 0x11, 0x08, 0x00, 0x19, 0xd1, 0xc1, 0x10, 0xd3, 0x48, 0xc3, 0xb2, 0x2a, + 0xcd, 0x07, 0x23, 0x79, 0x0f, 0x0f, 0x0f, 0x4f, 0xe6, 0xe0, 0xa8, 0x6f, + 0x79, 0xe6, 0x03, 0xee, 0x58, 0x67, 0x7e, 0xc3, 0x28, 0x2d, 0x22, 0x1c, + 0x28, 0x4f, 0x2e, 0xf2, 0x2b, 0x12, 0xa8, 0x56, 0xa5, 0x57, 0xa7, 0x84, + 0xa6, 0x8f, 0xc4, 0xe6, 0xaa, 0xbf, 0xab, 0xc7, 0xa9, 0xce, 0x00, 0xe7, + 0xc3, 0xff, 0x24, 0xdf, 0x23, 0xe5, 0x01, 0x00, 0x00, 0xcd, 0x0f, 0x25, + 0x20, 0x1b, 0xcd, 0x0f, 0x25, 0x28, 0xfb, 0xcd, 0x30, 0x25, 0x28, 0x11, + 0xf7, 0xe1, 0xd5, 0x7e, 0x23, 0x12, 0x13, 0xfe, 0x22, 0x20, 0xf8, 0x7e, + 0x23, 0xfe, 0x22, 0x28, 0xf2, 0x0b, 0xd1, 0x21, 0x3b, 0x5c, 0xcb, 0xb6, + 0xcb, 0x7e, 0xc4, 0xb2, 0x2a, 0xc3, 0x12, 0x27, 0xe7, 0xcd, 0xfb, 0x24, + 0xfe, 0x29, 0xc2, 0x8a, 0x1c, 0xe7, 0xc3, 0x12, 0x27, 0xc3, 0xbd, 0x27, + 0xcd, 0x30, 0x25, 0x28, 0x28, 0xed, 0x4b, 0x76, 0x5c, 0xcd, 0x2b, 0x2d, + 0xef, 0xa1, 0x0f, 0x34, 0x37, 0x16, 0x04, 0x34, 0x80, 0x41, 0x00, 0x00, + 0x80, 0x32, 0x02, 0xa1, 0x03, 0x31, 0x38, 0xcd, 0xa2, 0x2d, 0xed, 0x43, + 0x76, 0x5c, 0x7e, 0xa7, 0x28, 0x03, 0xd6, 0x10, 0x77, 0x18, 0x09, 0xcd, + 0x30, 0x25, 0x28, 0x04, 0xef, 0xa3, 0x38, 0x34, 0xe7, 0xc3, 0xc3, 0x26, + 0x01, 0x5a, 0x10, 0xe7, 0xfe, 0x23, 0xca, 0x0d, 0x27, 0x21, 0x3b, 0x5c, + 0xcb, 0xb6, 0xcb, 0x7e, 0x28, 0x1f, 0xcd, 0x8e, 0x02, 0x0e, 0x00, 0x20, + 0x13, 0xcd, 0x1e, 0x03, 0x30, 0x0e, 0x15, 0x5f, 0xcd, 0x33, 0x03, 0xf5, + 0x01, 0x01, 0x00, 0xf7, 0xf1, 0x12, 0x0e, 0x01, 0x06, 0x00, 0xcd, 0xb2, + 0x2a, 0xc3, 0x12, 0x27, 0xcd, 0x22, 0x25, 0xc4, 0x35, 0x25, 0xe7, 0xc3, + 0xdb, 0x25, 0xcd, 0x22, 0x25, 0xc4, 0x80, 0x25, 0xe7, 0x18, 0x48, 0xcd, + 0x22, 0x25, 0xc4, 0xcb, 0x22, 0xe7, 0x18, 0x3f, 0xcd, 0x88, 0x2c, 0x30, + 0x56, 0xfe, 0x41, 0x30, 0x3c, 0xcd, 0x30, 0x25, 0x20, 0x23, 0xcd, 0x9b, + 0x2c, 0xdf, 0x01, 0x06, 0x00, 0xcd, 0x55, 0x16, 0x23, 0x36, 0x0e, 0x23, + 0xeb, 0x2a, 0x65, 0x5c, 0x0e, 0x05, 0xa7, 0xed, 0x42, 0x22, 0x65, 0x5c, + 0xed, 0xb0, 0xeb, 0x2b, 0xcd, 0x77, 0x00, 0x18, 0x0e, 0xdf, 0x23, 0x7e, + 0xfe, 0x0e, 0x20, 0xfa, 0x23, 0xcd, 0xb4, 0x33, 0x22, 0x5d, 0x5c, 0xfd, + 0xcb, 0x01, 0xf6, 0x18, 0x14, 0xcd, 0xb2, 0x28, 0xda, 0x2e, 0x1c, 0xcc, + 0x96, 0x29, 0x3a, 0x3b, 0x5c, 0xfe, 0xc0, 0x38, 0x04, 0x23, 0xcd, 0xb4, + 0x33, 0x18, 0x33, 0x01, 0xdb, 0x09, 0xfe, 0x2d, 0x28, 0x27, 0x01, 0x18, + 0x10, 0xfe, 0xae, 0x28, 0x20, 0xd6, 0xaf, 0xda, 0x8a, 0x1c, 0x01, 0xf0, + 0x04, 0xfe, 0x14, 0x28, 0x14, 0xd2, 0x8a, 0x1c, 0x06, 0x10, 0xc6, 0xdc, + 0x4f, 0xfe, 0xdf, 0x30, 0x02, 0xcb, 0xb1, 0xfe, 0xee, 0x38, 0x02, 0xcb, + 0xb9, 0xc5, 0xe7, 0xc3, 0xff, 0x24, 0xdf, 0xfe, 0x28, 0x20, 0x0c, 0xfd, + 0xcb, 0x01, 0x76, 0x20, 0x17, 0xcd, 0x52, 0x2a, 0xe7, 0x18, 0xf0, 0x06, + 0x00, 0x4f, 0x21, 0x95, 0x27, 0xcd, 0xdc, 0x16, 0x30, 0x06, 0x4e, 0x21, + 0xed, 0x26, 0x09, 0x46, 0xd1, 0x7a, 0xb8, 0x38, 0x3a, 0xa7, 0xca, 0x18, + 0x00, 0xc5, 0x21, 0x3b, 0x5c, 0x7b, 0xfe, 0xed, 0x20, 0x06, 0xcb, 0x76, + 0x20, 0x02, 0x1e, 0x99, 0xd5, 0xcd, 0x30, 0x25, 0x28, 0x09, 0x7b, 0xe6, + 0x3f, 0x47, 0xef, 0x3b, 0x38, 0x18, 0x09, 0x7b, 0xfd, 0xae, 0x01, 0xe6, + 0x40, 0xc2, 0x8a, 0x1c, 0xd1, 0x21, 0x3b, 0x5c, 0xcb, 0xf6, 0xcb, 0x7b, + 0x20, 0x02, 0xcb, 0xb6, 0xc1, 0x18, 0xc1, 0xd5, 0x79, 0xfd, 0xcb, 0x01, + 0x76, 0x20, 0x15, 0xe6, 0x3f, 0xc6, 0x08, 0x4f, 0xfe, 0x10, 0x20, 0x04, + 0xcb, 0xf1, 0x18, 0x08, 0x38, 0xd7, 0xfe, 0x17, 0x28, 0x02, 0xcb, 0xf9, + 0xc5, 0xe7, 0xc3, 0xff, 0x24, 0x2b, 0xcf, 0x2d, 0xc3, 0x2a, 0xc4, 0x2f, + 0xc5, 0x5e, 0xc6, 0x3d, 0xce, 0x3e, 0xcc, 0x3c, 0xcd, 0xc7, 0xc9, 0xc8, + 0xca, 0xc9, 0xcb, 0xc5, 0xc7, 0xc6, 0xc8, 0x00, 0x06, 0x08, 0x08, 0x0a, + 0x02, 0x03, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0xcd, 0x30, 0x25, + 0x20, 0x35, 0xe7, 0xcd, 0x8d, 0x2c, 0xd2, 0x8a, 0x1c, 0xe7, 0xfe, 0x24, + 0xf5, 0x20, 0x01, 0xe7, 0xfe, 0x28, 0x20, 0x12, 0xe7, 0xfe, 0x29, 0x28, + 0x10, 0xcd, 0xfb, 0x24, 0xdf, 0xfe, 0x2c, 0x20, 0x03, 0xe7, 0x18, 0xf5, + 0xfe, 0x29, 0xc2, 0x8a, 0x1c, 0xe7, 0x21, 0x3b, 0x5c, 0xcb, 0xb6, 0xf1, + 0x28, 0x02, 0xcb, 0xf6, 0xc3, 0x12, 0x27, 0xe7, 0xe6, 0xdf, 0x47, 0xe7, + 0xd6, 0x24, 0x4f, 0x20, 0x01, 0xe7, 0xe7, 0xe5, 0x2a, 0x53, 0x5c, 0x2b, + 0x11, 0xce, 0x00, 0xc5, 0xcd, 0x86, 0x1d, 0xc1, 0x30, 0x02, 0xcf, 0x18, + 0xe5, 0xcd, 0xab, 0x28, 0xe6, 0xdf, 0xb8, 0x20, 0x08, 0xcd, 0xab, 0x28, + 0xd6, 0x24, 0xb9, 0x28, 0x0c, 0xe1, 0x2b, 0x11, 0x00, 0x02, 0xc5, 0xcd, + 0x8b, 0x19, 0xc1, 0x18, 0xd7, 0xa7, 0xcc, 0xab, 0x28, 0xd1, 0xd1, 0xed, + 0x53, 0x5d, 0x5c, 0xcd, 0xab, 0x28, 0xe5, 0xfe, 0x29, 0x28, 0x42, 0x23, + 0x7e, 0xfe, 0x0e, 0x16, 0x40, 0x28, 0x07, 0x2b, 0xcd, 0xab, 0x28, 0x23, + 0x16, 0x00, 0x23, 0xe5, 0xd5, 0xcd, 0xfb, 0x24, 0xf1, 0xfd, 0xae, 0x01, + 0xe6, 0x40, 0x20, 0x2b, 0xe1, 0xeb, 0x2a, 0x65, 0x5c, 0x01, 0x05, 0x00, + 0xed, 0x42, 0x22, 0x65, 0x5c, 0xed, 0xb0, 0xeb, 0x2b, 0xcd, 0xab, 0x28, + 0xfe, 0x29, 0x28, 0x0d, 0xe5, 0xdf, 0xfe, 0x2c, 0x20, 0x0d, 0xe7, 0xe1, + 0xcd, 0xab, 0x28, 0x18, 0xbe, 0xe5, 0xdf, 0xfe, 0x29, 0x28, 0x02, 0xcf, + 0x19, 0xd1, 0xeb, 0x22, 0x5d, 0x5c, 0x2a, 0x0b, 0x5c, 0xe3, 0x22, 0x0b, + 0x5c, 0xd5, 0xe7, 0xe7, 0xcd, 0xfb, 0x24, 0xe1, 0x22, 0x5d, 0x5c, 0xe1, + 0x22, 0x0b, 0x5c, 0xe7, 0xc3, 0x12, 0x27, 0x23, 0x7e, 0xfe, 0x21, 0x38, + 0xfa, 0xc9, 0xfd, 0xcb, 0x01, 0xf6, 0xdf, 0xcd, 0x8d, 0x2c, 0xd2, 0x8a, + 0x1c, 0xe5, 0xe6, 0x1f, 0x4f, 0xe7, 0xe5, 0xfe, 0x28, 0x28, 0x28, 0xcb, + 0xf1, 0xfe, 0x24, 0x28, 0x11, 0xcb, 0xe9, 0xcd, 0x88, 0x2c, 0x30, 0x0f, + 0xcd, 0x88, 0x2c, 0x30, 0x16, 0xcb, 0xb1, 0xe7, 0x18, 0xf6, 0xe7, 0xfd, + 0xcb, 0x01, 0xb6, 0x3a, 0x0c, 0x5c, 0xa7, 0x28, 0x06, 0xcd, 0x30, 0x25, + 0xc2, 0x51, 0x29, 0x41, 0xcd, 0x30, 0x25, 0x20, 0x08, 0x79, 0xe6, 0xe0, + 0xcb, 0xff, 0x4f, 0x18, 0x37, 0x2a, 0x4b, 0x5c, 0x7e, 0xe6, 0x7f, 0x28, + 0x2d, 0xb9, 0x20, 0x22, 0x17, 0x87, 0xf2, 0x3f, 0x29, 0x38, 0x30, 0xd1, + 0xd5, 0xe5, 0x23, 0x1a, 0x13, 0xfe, 0x20, 0x28, 0xfa, 0xf6, 0x20, 0xbe, + 0x28, 0xf4, 0xf6, 0x80, 0xbe, 0x20, 0x06, 0x1a, 0xcd, 0x88, 0x2c, 0x30, + 0x15, 0xe1, 0xc5, 0xcd, 0xb8, 0x19, 0xeb, 0xc1, 0x18, 0xce, 0xcb, 0xf8, + 0xd1, 0xdf, 0xfe, 0x28, 0x28, 0x09, 0xcb, 0xe8, 0x18, 0x0d, 0xd1, 0xd1, + 0xd1, 0xe5, 0xdf, 0xcd, 0x88, 0x2c, 0x30, 0x03, 0xe7, 0x18, 0xf8, 0xe1, + 0xcb, 0x10, 0xcb, 0x70, 0xc9, 0x2a, 0x0b, 0x5c, 0x7e, 0xfe, 0x29, 0xca, + 0xef, 0x28, 0x7e, 0xf6, 0x60, 0x47, 0x23, 0x7e, 0xfe, 0x0e, 0x28, 0x07, + 0x2b, 0xcd, 0xab, 0x28, 0x23, 0xcb, 0xa8, 0x78, 0xb9, 0x28, 0x12, 0x23, + 0x23, 0x23, 0x23, 0x23, 0xcd, 0xab, 0x28, 0xfe, 0x29, 0xca, 0xef, 0x28, + 0xcd, 0xab, 0x28, 0x18, 0xd9, 0xcb, 0x69, 0x20, 0x0c, 0x23, 0xed, 0x5b, + 0x65, 0x5c, 0xcd, 0xc0, 0x33, 0xeb, 0x22, 0x65, 0x5c, 0xd1, 0xd1, 0xaf, + 0x3c, 0xc9, 0xaf, 0x47, 0xcb, 0x79, 0x20, 0x4b, 0xcb, 0x7e, 0x20, 0x0e, + 0x3c, 0x23, 0x4e, 0x23, 0x46, 0x23, 0xeb, 0xcd, 0xb2, 0x2a, 0xdf, 0xc3, + 0x49, 0x2a, 0x23, 0x23, 0x23, 0x46, 0xcb, 0x71, 0x28, 0x0a, 0x05, 0x28, + 0xe8, 0xeb, 0xdf, 0xfe, 0x28, 0x20, 0x61, 0xeb, 0xeb, 0x18, 0x24, 0xe5, + 0xdf, 0xe1, 0xfe, 0x2c, 0x28, 0x20, 0xcb, 0x79, 0x28, 0x52, 0xcb, 0x71, + 0x20, 0x06, 0xfe, 0x29, 0x20, 0x3c, 0xe7, 0xc9, 0xfe, 0x29, 0x28, 0x6c, + 0xfe, 0xcc, 0x20, 0x32, 0xdf, 0x2b, 0x22, 0x5d, 0x5c, 0x18, 0x5e, 0x21, + 0x00, 0x00, 0xe5, 0xe7, 0xe1, 0x79, 0xfe, 0xc0, 0x20, 0x09, 0xdf, 0xfe, + 0x29, 0x28, 0x51, 0xfe, 0xcc, 0x28, 0xe5, 0xc5, 0xe5, 0xcd, 0xee, 0x2a, + 0xe3, 0xeb, 0xcd, 0xcc, 0x2a, 0x38, 0x19, 0x0b, 0xcd, 0xf4, 0x2a, 0x09, + 0xd1, 0xc1, 0x10, 0xb3, 0xcb, 0x79, 0x20, 0x66, 0xe5, 0xcb, 0x71, 0x20, + 0x13, 0x42, 0x4b, 0xdf, 0xfe, 0x29, 0x28, 0x02, 0xcf, 0x02, 0xe7, 0xe1, + 0x11, 0x05, 0x00, 0xcd, 0xf4, 0x2a, 0x09, 0xc9, 0xcd, 0xee, 0x2a, 0xe3, + 0xcd, 0xf4, 0x2a, 0xc1, 0x09, 0x23, 0x42, 0x4b, 0xeb, 0xcd, 0xb1, 0x2a, + 0xdf, 0xfe, 0x29, 0x28, 0x07, 0xfe, 0x2c, 0x20, 0xdb, 0xcd, 0x52, 0x2a, + 0xe7, 0xfe, 0x28, 0x28, 0xf8, 0xfd, 0xcb, 0x01, 0xb6, 0xc9, 0xcd, 0x30, + 0x25, 0xc4, 0xf1, 0x2b, 0xe7, 0xfe, 0x29, 0x28, 0x50, 0xd5, 0xaf, 0xf5, + 0xc5, 0x11, 0x01, 0x00, 0xdf, 0xe1, 0xfe, 0xcc, 0x28, 0x17, 0xf1, 0xcd, + 0xcd, 0x2a, 0xf5, 0x50, 0x59, 0xe5, 0xdf, 0xe1, 0xfe, 0xcc, 0x28, 0x09, + 0xfe, 0x29, 0xc2, 0x8a, 0x1c, 0x62, 0x6b, 0x18, 0x13, 0xe5, 0xe7, 0xe1, + 0xfe, 0x29, 0x28, 0x0c, 0xf1, 0xcd, 0xcd, 0x2a, 0xf5, 0xdf, 0x60, 0x69, + 0xfe, 0x29, 0x20, 0xe6, 0xf1, 0xe3, 0x19, 0x2b, 0xe3, 0xa7, 0xed, 0x52, + 0x01, 0x00, 0x00, 0x38, 0x07, 0x23, 0xa7, 0xfa, 0x20, 0x2a, 0x44, 0x4d, + 0xd1, 0xfd, 0xcb, 0x01, 0xb6, 0xcd, 0x30, 0x25, 0xc8, 0xaf, 0xfd, 0xcb, + 0x01, 0xb6, 0xc5, 0xcd, 0xa9, 0x33, 0xc1, 0x2a, 0x65, 0x5c, 0x77, 0x23, + 0x73, 0x23, 0x72, 0x23, 0x71, 0x23, 0x70, 0x23, 0x22, 0x65, 0x5c, 0xc9, + 0xaf, 0xd5, 0xe5, 0xf5, 0xcd, 0x82, 0x1c, 0xf1, 0xcd, 0x30, 0x25, 0x28, + 0x12, 0xf5, 0xcd, 0x99, 0x1e, 0xd1, 0x78, 0xb1, 0x37, 0x28, 0x05, 0xe1, + 0xe5, 0xa7, 0xed, 0x42, 0x7a, 0xde, 0x00, 0xe1, 0xd1, 0xc9, 0xeb, 0x23, + 0x5e, 0x23, 0x56, 0xc9, 0xcd, 0x30, 0x25, 0xc8, 0xcd, 0xa9, 0x30, 0xda, + 0x15, 0x1f, 0xc9, 0x2a, 0x4d, 0x5c, 0xfd, 0xcb, 0x37, 0x4e, 0x28, 0x5e, + 0x01, 0x05, 0x00, 0x03, 0x23, 0x7e, 0xfe, 0x20, 0x28, 0xfa, 0x30, 0x0b, + 0xfe, 0x10, 0x38, 0x11, 0xfe, 0x16, 0x30, 0x0d, 0x23, 0x18, 0xed, 0xcd, + 0x88, 0x2c, 0x38, 0xe7, 0xfe, 0x24, 0xca, 0xc0, 0x2b, 0x79, 0x2a, 0x59, + 0x5c, 0x2b, 0xcd, 0x55, 0x16, 0x23, 0x23, 0xeb, 0xd5, 0x2a, 0x4d, 0x5c, + 0x1b, 0xd6, 0x06, 0x47, 0x28, 0x11, 0x23, 0x7e, 0xfe, 0x21, 0x38, 0xfa, + 0xf6, 0x20, 0x13, 0x12, 0x10, 0xf4, 0xf6, 0x80, 0x12, 0x3e, 0xc0, 0x2a, + 0x4d, 0x5c, 0xae, 0xf6, 0x20, 0xe1, 0xcd, 0xea, 0x2b, 0xe5, 0xef, 0x02, + 0x38, 0xe1, 0x01, 0x05, 0x00, 0xa7, 0xed, 0x42, 0x18, 0x40, 0xfd, 0xcb, + 0x01, 0x76, 0x28, 0x06, 0x11, 0x06, 0x00, 0x19, 0x18, 0xe7, 0x2a, 0x4d, + 0x5c, 0xed, 0x4b, 0x72, 0x5c, 0xfd, 0xcb, 0x37, 0x46, 0x20, 0x30, 0x78, + 0xb1, 0xc8, 0xe5, 0xf7, 0xd5, 0xc5, 0x54, 0x5d, 0x23, 0x36, 0x20, 0xed, + 0xb8, 0xe5, 0xcd, 0xf1, 0x2b, 0xe1, 0xe3, 0xa7, 0xed, 0x42, 0x09, 0x30, + 0x02, 0x44, 0x4d, 0xe3, 0xeb, 0x78, 0xb1, 0x28, 0x02, 0xed, 0xb0, 0xc1, + 0xd1, 0xe1, 0xeb, 0x78, 0xb1, 0xc8, 0xd5, 0xed, 0xb0, 0xe1, 0xc9, 0x2b, + 0x2b, 0x2b, 0x7e, 0xe5, 0xc5, 0xcd, 0xc6, 0x2b, 0xc1, 0xe1, 0x03, 0x03, + 0x03, 0xc3, 0xe8, 0x19, 0x3e, 0xdf, 0x2a, 0x4d, 0x5c, 0xa6, 0xf5, 0xcd, + 0xf1, 0x2b, 0xeb, 0x09, 0xc5, 0x2b, 0x22, 0x4d, 0x5c, 0x03, 0x03, 0x03, + 0x2a, 0x59, 0x5c, 0x2b, 0xcd, 0x55, 0x16, 0x2a, 0x4d, 0x5c, 0xc1, 0xc5, + 0x03, 0xed, 0xb8, 0xeb, 0x23, 0xc1, 0x70, 0x2b, 0x71, 0xf1, 0x2b, 0x77, + 0x2a, 0x59, 0x5c, 0x2b, 0xc9, 0x2a, 0x65, 0x5c, 0x2b, 0x46, 0x2b, 0x4e, + 0x2b, 0x56, 0x2b, 0x5e, 0x2b, 0x7e, 0x22, 0x65, 0x5c, 0xc9, 0xcd, 0xb2, + 0x28, 0xc2, 0x8a, 0x1c, 0xcd, 0x30, 0x25, 0x20, 0x08, 0xcb, 0xb1, 0xcd, + 0x96, 0x29, 0xcd, 0xee, 0x1b, 0x38, 0x08, 0xc5, 0xcd, 0xb8, 0x19, 0xcd, + 0xe8, 0x19, 0xc1, 0xcb, 0xf9, 0x06, 0x00, 0xc5, 0x21, 0x01, 0x00, 0xcb, + 0x71, 0x20, 0x02, 0x2e, 0x05, 0xeb, 0xe7, 0x26, 0xff, 0xcd, 0xcc, 0x2a, + 0xda, 0x20, 0x2a, 0xe1, 0xc5, 0x24, 0xe5, 0x60, 0x69, 0xcd, 0xf4, 0x2a, + 0xeb, 0xdf, 0xfe, 0x2c, 0x28, 0xe8, 0xfe, 0x29, 0x20, 0xbb, 0xe7, 0xc1, + 0x79, 0x68, 0x26, 0x00, 0x23, 0x23, 0x29, 0x19, 0xda, 0x15, 0x1f, 0xd5, + 0xc5, 0xe5, 0x44, 0x4d, 0x2a, 0x59, 0x5c, 0x2b, 0xcd, 0x55, 0x16, 0x23, + 0x77, 0xc1, 0x0b, 0x0b, 0x0b, 0x23, 0x71, 0x23, 0x70, 0xc1, 0x78, 0x23, + 0x77, 0x62, 0x6b, 0x1b, 0x36, 0x00, 0xcb, 0x71, 0x28, 0x02, 0x36, 0x20, + 0xc1, 0xed, 0xb8, 0xc1, 0x70, 0x2b, 0x71, 0x2b, 0x3d, 0x20, 0xf8, 0xc9, + 0xcd, 0x1b, 0x2d, 0x3f, 0xd8, 0xfe, 0x41, 0x3f, 0xd0, 0xfe, 0x5b, 0xd8, + 0xfe, 0x61, 0x3f, 0xd0, 0xfe, 0x7b, 0xc9, 0xfe, 0xc4, 0x20, 0x19, 0x11, + 0x00, 0x00, 0xe7, 0xd6, 0x31, 0xce, 0x00, 0x20, 0x0a, 0xeb, 0x3f, 0xed, + 0x6a, 0xda, 0xad, 0x31, 0xeb, 0x18, 0xef, 0x42, 0x4b, 0xc3, 0x2b, 0x2d, + 0xfe, 0x2e, 0x28, 0x0f, 0xcd, 0x3b, 0x2d, 0xfe, 0x2e, 0x20, 0x28, 0xe7, + 0xcd, 0x1b, 0x2d, 0x38, 0x22, 0x18, 0x0a, 0xe7, 0xcd, 0x1b, 0x2d, 0xda, + 0x8a, 0x1c, 0xef, 0xa0, 0x38, 0xef, 0xa1, 0xc0, 0x02, 0x38, 0xdf, 0xcd, + 0x22, 0x2d, 0x38, 0x0b, 0xef, 0xe0, 0xa4, 0x05, 0xc0, 0x04, 0x0f, 0x38, + 0xe7, 0x18, 0xef, 0xfe, 0x45, 0x28, 0x03, 0xfe, 0x65, 0xc0, 0x06, 0xff, + 0xe7, 0xfe, 0x2b, 0x28, 0x05, 0xfe, 0x2d, 0x20, 0x02, 0x04, 0xe7, 0xcd, + 0x1b, 0x2d, 0x38, 0xcb, 0xc5, 0xcd, 0x3b, 0x2d, 0xcd, 0xd5, 0x2d, 0xc1, + 0xda, 0xad, 0x31, 0xa7, 0xfa, 0xad, 0x31, 0x04, 0x28, 0x02, 0xed, 0x44, + 0xc3, 0x4f, 0x2d, 0xfe, 0x30, 0xd8, 0xfe, 0x3a, 0x3f, 0xc9, 0xcd, 0x1b, + 0x2d, 0xd8, 0xd6, 0x30, 0x4f, 0x06, 0x00, 0xfd, 0x21, 0x3a, 0x5c, 0xaf, + 0x5f, 0x51, 0x48, 0x47, 0xcd, 0xb6, 0x2a, 0xef, 0x38, 0xa7, 0xc9, 0xf5, + 0xef, 0xa0, 0x38, 0xf1, 0xcd, 0x22, 0x2d, 0xd8, 0xef, 0x01, 0xa4, 0x04, + 0x0f, 0x38, 0xcd, 0x74, 0x00, 0x18, 0xf1, 0x07, 0x0f, 0x30, 0x02, 0x2f, + 0x3c, 0xf5, 0x21, 0x92, 0x5c, 0xcd, 0x0b, 0x35, 0xef, 0xa4, 0x38, 0xf1, + 0xcb, 0x3f, 0x30, 0x0d, 0xf5, 0xef, 0xc1, 0xe0, 0x00, 0x04, 0x04, 0x33, + 0x02, 0x05, 0xe1, 0x38, 0xf1, 0x28, 0x08, 0xf5, 0xef, 0x31, 0x04, 0x38, + 0xf1, 0x18, 0xe5, 0xef, 0x02, 0x38, 0xc9, 0x23, 0x4e, 0x23, 0x7e, 0xa9, + 0x91, 0x5f, 0x23, 0x7e, 0x89, 0xa9, 0x57, 0xc9, 0x0e, 0x00, 0xe5, 0x36, + 0x00, 0x23, 0x71, 0x23, 0x7b, 0xa9, 0x91, 0x77, 0x23, 0x7a, 0x89, 0xa9, + 0x77, 0x23, 0x36, 0x00, 0xe1, 0xc9, 0xef, 0x38, 0x7e, 0xa7, 0x28, 0x05, + 0xef, 0xa2, 0x0f, 0x27, 0x38, 0xef, 0x02, 0x38, 0xe5, 0xd5, 0xeb, 0x46, + 0xcd, 0x7f, 0x2d, 0xaf, 0x90, 0xcb, 0x79, 0x42, 0x4b, 0x7b, 0xd1, 0xe1, + 0xc9, 0x57, 0x17, 0x9f, 0x5f, 0x4f, 0xaf, 0x47, 0xcd, 0xb6, 0x2a, 0xef, + 0x34, 0xef, 0x1a, 0x20, 0x9a, 0x85, 0x04, 0x27, 0x38, 0xcd, 0xa2, 0x2d, + 0xd8, 0xf5, 0x05, 0x04, 0x28, 0x03, 0xf1, 0x37, 0xc9, 0xf1, 0xc9, 0xef, + 0x31, 0x36, 0x00, 0x0b, 0x31, 0x37, 0x00, 0x0d, 0x02, 0x38, 0x3e, 0x30, + 0xd7, 0xc9, 0x2a, 0x38, 0x3e, 0x2d, 0xd7, 0xef, 0xa0, 0xc3, 0xc4, 0xc5, + 0x02, 0x38, 0xd9, 0xe5, 0xd9, 0xef, 0x31, 0x27, 0xc2, 0x03, 0xe2, 0x01, + 0xc2, 0x02, 0x38, 0x7e, 0xa7, 0x20, 0x47, 0xcd, 0x7f, 0x2d, 0x06, 0x10, + 0x7a, 0xa7, 0x20, 0x06, 0xb3, 0x28, 0x09, 0x53, 0x06, 0x08, 0xd5, 0xd9, + 0xd1, 0xd9, 0x18, 0x57, 0xef, 0xe2, 0x38, 0x7e, 0xd6, 0x7e, 0xcd, 0xc1, + 0x2d, 0x57, 0x3a, 0xac, 0x5c, 0x92, 0x32, 0xac, 0x5c, 0x7a, 0xcd, 0x4f, + 0x2d, 0xef, 0x31, 0x27, 0xc1, 0x03, 0xe1, 0x38, 0xcd, 0xd5, 0x2d, 0xe5, + 0x32, 0xa1, 0x5c, 0x3d, 0x17, 0x9f, 0x3c, 0x21, 0xab, 0x5c, 0x77, 0x23, + 0x86, 0x77, 0xe1, 0xc3, 0xcf, 0x2e, 0xd6, 0x80, 0xfe, 0x1c, 0x38, 0x13, + 0xcd, 0xc1, 0x2d, 0xd6, 0x07, 0x47, 0x21, 0xac, 0x5c, 0x86, 0x77, 0x78, + 0xed, 0x44, 0xcd, 0x4f, 0x2d, 0x18, 0x92, 0xeb, 0xcd, 0xba, 0x2f, 0xd9, + 0xcb, 0xfa, 0x7d, 0xd9, 0xd6, 0x80, 0x47, 0xcb, 0x23, 0xcb, 0x12, 0xd9, + 0xcb, 0x13, 0xcb, 0x12, 0xd9, 0x21, 0xaa, 0x5c, 0x0e, 0x05, 0x7e, 0x8f, + 0x27, 0x77, 0x2b, 0x0d, 0x20, 0xf8, 0x10, 0xe7, 0xaf, 0x21, 0xa6, 0x5c, + 0x11, 0xa1, 0x5c, 0x06, 0x09, 0xed, 0x6f, 0x0e, 0xff, 0xed, 0x6f, 0x20, + 0x04, 0x0d, 0x0c, 0x20, 0x0a, 0x12, 0x13, 0xfd, 0x34, 0x71, 0xfd, 0x34, + 0x72, 0x0e, 0x00, 0xcb, 0x40, 0x28, 0x01, 0x23, 0x10, 0xe7, 0x3a, 0xab, + 0x5c, 0xd6, 0x09, 0x38, 0x0a, 0xfd, 0x35, 0x71, 0x3e, 0x04, 0xfd, 0xbe, + 0x6f, 0x18, 0x41, 0xef, 0x02, 0xe2, 0x38, 0xeb, 0xcd, 0xba, 0x2f, 0xd9, + 0x3e, 0x80, 0x95, 0x2e, 0x00, 0xcb, 0xfa, 0xd9, 0xcd, 0xdd, 0x2f, 0xfd, + 0x7e, 0x71, 0xfe, 0x08, 0x38, 0x06, 0xd9, 0xcb, 0x12, 0xd9, 0x18, 0x20, + 0x01, 0x00, 0x02, 0x7b, 0xcd, 0x8b, 0x2f, 0x5f, 0x7a, 0xcd, 0x8b, 0x2f, + 0x57, 0xc5, 0xd9, 0xc1, 0x10, 0xf1, 0x21, 0xa1, 0x5c, 0x79, 0xfd, 0x4e, + 0x71, 0x09, 0x77, 0xfd, 0x34, 0x71, 0x18, 0xd3, 0xf5, 0x21, 0xa1, 0x5c, + 0xfd, 0x4e, 0x71, 0x06, 0x00, 0x09, 0x41, 0xf1, 0x2b, 0x7e, 0xce, 0x00, + 0x77, 0xa7, 0x28, 0x05, 0xfe, 0x0a, 0x3f, 0x30, 0x08, 0x10, 0xf1, 0x36, + 0x01, 0x04, 0xfd, 0x34, 0x72, 0xfd, 0x70, 0x71, 0xef, 0x02, 0x38, 0xd9, + 0xe1, 0xd9, 0xed, 0x4b, 0xab, 0x5c, 0x21, 0xa1, 0x5c, 0x78, 0xfe, 0x09, + 0x38, 0x04, 0xfe, 0xfc, 0x38, 0x26, 0xa7, 0xcc, 0xef, 0x15, 0xaf, 0x90, + 0xfa, 0x52, 0x2f, 0x47, 0x18, 0x0c, 0x79, 0xa7, 0x28, 0x03, 0x7e, 0x23, + 0x0d, 0xcd, 0xef, 0x15, 0x10, 0xf4, 0x79, 0xa7, 0xc8, 0x04, 0x3e, 0x2e, + 0xd7, 0x3e, 0x30, 0x10, 0xfb, 0x41, 0x18, 0xe6, 0x50, 0x15, 0x06, 0x01, + 0xcd, 0x4a, 0x2f, 0x3e, 0x45, 0xd7, 0x4a, 0x79, 0xa7, 0xf2, 0x83, 0x2f, + 0xed, 0x44, 0x4f, 0x3e, 0x2d, 0x18, 0x02, 0x3e, 0x2b, 0xd7, 0x06, 0x00, + 0xc3, 0x1b, 0x1a, 0xd5, 0x6f, 0x26, 0x00, 0x5d, 0x54, 0x29, 0x29, 0x19, + 0x29, 0x59, 0x19, 0x4c, 0x7d, 0xd1, 0xc9, 0x7e, 0x36, 0x00, 0xa7, 0xc8, + 0x23, 0xcb, 0x7e, 0xcb, 0xfe, 0x2b, 0xc8, 0xc5, 0x01, 0x05, 0x00, 0x09, + 0x41, 0x4f, 0x37, 0x2b, 0x7e, 0x2f, 0xce, 0x00, 0x77, 0x10, 0xf8, 0x79, + 0xc1, 0xc9, 0xe5, 0xf5, 0x4e, 0x23, 0x46, 0x77, 0x23, 0x79, 0x4e, 0xc5, + 0x23, 0x4e, 0x23, 0x46, 0xeb, 0x57, 0x5e, 0xd5, 0x23, 0x56, 0x23, 0x5e, + 0xd5, 0xd9, 0xd1, 0xe1, 0xc1, 0xd9, 0x23, 0x56, 0x23, 0x5e, 0xf1, 0xe1, + 0xc9, 0xa7, 0xc8, 0xfe, 0x21, 0x30, 0x16, 0xc5, 0x47, 0xd9, 0xcb, 0x2d, + 0xcb, 0x1a, 0xcb, 0x1b, 0xd9, 0xcb, 0x1a, 0xcb, 0x1b, 0x10, 0xf2, 0xc1, + 0xd0, 0xcd, 0x04, 0x30, 0xc0, 0xd9, 0xaf, 0x2e, 0x00, 0x57, 0x5d, 0xd9, + 0x11, 0x00, 0x00, 0xc9, 0x1c, 0xc0, 0x14, 0xc0, 0xd9, 0x1c, 0x20, 0x01, + 0x14, 0xd9, 0xc9, 0xeb, 0xcd, 0x6e, 0x34, 0xeb, 0x1a, 0xb6, 0x20, 0x26, + 0xd5, 0x23, 0xe5, 0x23, 0x5e, 0x23, 0x56, 0x23, 0x23, 0x23, 0x7e, 0x23, + 0x4e, 0x23, 0x46, 0xe1, 0xeb, 0x09, 0xeb, 0x8e, 0x0f, 0xce, 0x00, 0x20, + 0x0b, 0x9f, 0x77, 0x23, 0x73, 0x23, 0x72, 0x2b, 0x2b, 0x2b, 0xd1, 0xc9, + 0x2b, 0xd1, 0xcd, 0x93, 0x32, 0xd9, 0xe5, 0xd9, 0xd5, 0xe5, 0xcd, 0x9b, + 0x2f, 0x47, 0xeb, 0xcd, 0x9b, 0x2f, 0x4f, 0xb8, 0x30, 0x03, 0x78, 0x41, + 0xeb, 0xf5, 0x90, 0xcd, 0xba, 0x2f, 0xcd, 0xdd, 0x2f, 0xf1, 0xe1, 0x77, + 0xe5, 0x68, 0x61, 0x19, 0xd9, 0xeb, 0xed, 0x4a, 0xeb, 0x7c, 0x8d, 0x6f, + 0x1f, 0xad, 0xd9, 0xeb, 0xe1, 0x1f, 0x30, 0x08, 0x3e, 0x01, 0xcd, 0xdd, + 0x2f, 0x34, 0x28, 0x23, 0xd9, 0x7d, 0xe6, 0x80, 0xd9, 0x23, 0x77, 0x2b, + 0x28, 0x1f, 0x7b, 0xed, 0x44, 0x3f, 0x5f, 0x7a, 0x2f, 0xce, 0x00, 0x57, + 0xd9, 0x7b, 0x2f, 0xce, 0x00, 0x5f, 0x7a, 0x2f, 0xce, 0x00, 0x30, 0x07, + 0x1f, 0xd9, 0x34, 0xca, 0xad, 0x31, 0xd9, 0x57, 0xd9, 0xaf, 0xc3, 0x55, + 0x31, 0xc5, 0x06, 0x10, 0x7c, 0x4d, 0x21, 0x00, 0x00, 0x29, 0x38, 0x0a, + 0xcb, 0x11, 0x17, 0x30, 0x03, 0x19, 0x38, 0x02, 0x10, 0xf3, 0xc1, 0xc9, + 0xcd, 0xe9, 0x34, 0xd8, 0x23, 0xae, 0xcb, 0xfe, 0x2b, 0xc9, 0x1a, 0xb6, + 0x20, 0x22, 0xd5, 0xe5, 0xd5, 0xcd, 0x7f, 0x2d, 0xeb, 0xe3, 0x41, 0xcd, + 0x7f, 0x2d, 0x78, 0xa9, 0x4f, 0xe1, 0xcd, 0xa9, 0x30, 0xeb, 0xe1, 0x38, + 0x0a, 0x7a, 0xb3, 0x20, 0x01, 0x4f, 0xcd, 0x8e, 0x2d, 0xd1, 0xc9, 0xd1, + 0xcd, 0x93, 0x32, 0xaf, 0xcd, 0xc0, 0x30, 0xd8, 0xd9, 0xe5, 0xd9, 0xd5, + 0xeb, 0xcd, 0xc0, 0x30, 0xeb, 0x38, 0x5a, 0xe5, 0xcd, 0xba, 0x2f, 0x78, + 0xa7, 0xed, 0x62, 0xd9, 0xe5, 0xed, 0x62, 0xd9, 0x06, 0x21, 0x18, 0x11, + 0x30, 0x05, 0x19, 0xd9, 0xed, 0x5a, 0xd9, 0xd9, 0xcb, 0x1c, 0xcb, 0x1d, + 0xd9, 0xcb, 0x1c, 0xcb, 0x1d, 0xd9, 0xcb, 0x18, 0xcb, 0x19, 0xd9, 0xcb, + 0x19, 0x1f, 0x10, 0xe4, 0xeb, 0xd9, 0xeb, 0xd9, 0xc1, 0xe1, 0x78, 0x81, + 0x20, 0x01, 0xa7, 0x3d, 0x3f, 0x17, 0x3f, 0x1f, 0xf2, 0x46, 0x31, 0x30, + 0x68, 0xa7, 0x3c, 0x20, 0x08, 0x38, 0x06, 0xd9, 0xcb, 0x7a, 0xd9, 0x20, + 0x5c, 0x77, 0xd9, 0x78, 0xd9, 0x30, 0x15, 0x7e, 0xa7, 0x3e, 0x80, 0x28, + 0x01, 0xaf, 0xd9, 0xa2, 0xcd, 0xfb, 0x2f, 0x07, 0x77, 0x38, 0x2e, 0x23, + 0x77, 0x2b, 0x18, 0x29, 0x06, 0x20, 0xd9, 0xcb, 0x7a, 0xd9, 0x20, 0x12, + 0x07, 0xcb, 0x13, 0xcb, 0x12, 0xd9, 0xcb, 0x13, 0xcb, 0x12, 0xd9, 0x35, + 0x28, 0xd7, 0x10, 0xea, 0x18, 0xd7, 0x17, 0x30, 0x0c, 0xcd, 0x04, 0x30, + 0x20, 0x07, 0xd9, 0x16, 0x80, 0xd9, 0x34, 0x28, 0x18, 0xe5, 0x23, 0xd9, + 0xd5, 0xd9, 0xc1, 0x78, 0x17, 0xcb, 0x16, 0x1f, 0x77, 0x23, 0x71, 0x23, + 0x72, 0x23, 0x73, 0xe1, 0xd1, 0xd9, 0xe1, 0xd9, 0xc9, 0xcf, 0x05, 0xcd, + 0x93, 0x32, 0xeb, 0xaf, 0xcd, 0xc0, 0x30, 0x38, 0xf4, 0xeb, 0xcd, 0xc0, + 0x30, 0xd8, 0xd9, 0xe5, 0xd9, 0xd5, 0xe5, 0xcd, 0xba, 0x2f, 0xd9, 0xe5, + 0x60, 0x69, 0xd9, 0x61, 0x68, 0xaf, 0x06, 0xdf, 0x18, 0x10, 0x17, 0xcb, + 0x11, 0xd9, 0xcb, 0x11, 0xcb, 0x10, 0xd9, 0x29, 0xd9, 0xed, 0x6a, 0xd9, + 0x38, 0x10, 0xed, 0x52, 0xd9, 0xed, 0x52, 0xd9, 0x30, 0x0f, 0x19, 0xd9, + 0xed, 0x5a, 0xd9, 0xa7, 0x18, 0x08, 0xa7, 0xed, 0x52, 0xd9, 0xed, 0x52, + 0xd9, 0x37, 0x04, 0xfa, 0xd2, 0x31, 0xf5, 0x28, 0xe1, 0x5f, 0x51, 0xd9, + 0x59, 0x50, 0xf1, 0xcb, 0x18, 0xf1, 0xcb, 0x18, 0xd9, 0xc1, 0xe1, 0x78, + 0x91, 0xc3, 0x3d, 0x31, 0x7e, 0xa7, 0xc8, 0xfe, 0x81, 0x30, 0x06, 0x36, + 0x00, 0x3e, 0x20, 0x18, 0x51, 0xfe, 0x91, 0x20, 0x1a, 0x23, 0x23, 0x23, + 0x3e, 0x80, 0xa6, 0x2b, 0xb6, 0x2b, 0x20, 0x03, 0x3e, 0x80, 0xae, 0x2b, + 0x20, 0x36, 0x77, 0x23, 0x36, 0xff, 0x2b, 0x3e, 0x18, 0x18, 0x33, 0x30, + 0x2c, 0xd5, 0x2f, 0xc6, 0x91, 0x23, 0x56, 0x23, 0x5e, 0x2b, 0x2b, 0x0e, + 0x00, 0xcb, 0x7a, 0x28, 0x01, 0x0d, 0xcb, 0xfa, 0x06, 0x08, 0x90, 0x80, + 0x38, 0x04, 0x5a, 0x16, 0x00, 0x90, 0x28, 0x07, 0x47, 0xcb, 0x3a, 0xcb, + 0x1b, 0x10, 0xfa, 0xcd, 0x8e, 0x2d, 0xd1, 0xc9, 0x7e, 0xd6, 0xa0, 0xf0, + 0xed, 0x44, 0xd5, 0xeb, 0x2b, 0x47, 0xcb, 0x38, 0xcb, 0x38, 0xcb, 0x38, + 0x28, 0x05, 0x36, 0x00, 0x2b, 0x10, 0xfb, 0xe6, 0x07, 0x28, 0x09, 0x47, + 0x3e, 0xff, 0xcb, 0x27, 0x10, 0xfc, 0xa6, 0x77, 0xeb, 0xd1, 0xc9, 0xcd, + 0x96, 0x32, 0xeb, 0x7e, 0xa7, 0xc0, 0xd5, 0xcd, 0x7f, 0x2d, 0xaf, 0x23, + 0x77, 0x2b, 0x77, 0x06, 0x91, 0x7a, 0xa7, 0x20, 0x08, 0xb3, 0x42, 0x28, + 0x10, 0x53, 0x58, 0x06, 0x89, 0xeb, 0x05, 0x29, 0x30, 0xfc, 0xcb, 0x09, + 0xcb, 0x1c, 0xcb, 0x1d, 0xeb, 0x2b, 0x73, 0x2b, 0x72, 0x2b, 0x70, 0xd1, + 0xc9, 0x00, 0xb0, 0x00, 0x40, 0xb0, 0x00, 0x01, 0x30, 0x00, 0xf1, 0x49, + 0x0f, 0xda, 0xa2, 0x40, 0xb0, 0x00, 0x0a, 0x8f, 0x36, 0x3c, 0x34, 0xa1, + 0x33, 0x0f, 0x30, 0xca, 0x30, 0xaf, 0x31, 0x51, 0x38, 0x1b, 0x35, 0x24, + 0x35, 0x3b, 0x35, 0x3b, 0x35, 0x3b, 0x35, 0x3b, 0x35, 0x3b, 0x35, 0x3b, + 0x35, 0x14, 0x30, 0x2d, 0x35, 0x3b, 0x35, 0x3b, 0x35, 0x3b, 0x35, 0x3b, + 0x35, 0x3b, 0x35, 0x3b, 0x35, 0x9c, 0x35, 0xde, 0x35, 0xbc, 0x34, 0x45, + 0x36, 0x6e, 0x34, 0x69, 0x36, 0xde, 0x35, 0x74, 0x36, 0xb5, 0x37, 0xaa, + 0x37, 0xda, 0x37, 0x33, 0x38, 0x43, 0x38, 0xe2, 0x37, 0x13, 0x37, 0xc4, + 0x36, 0xaf, 0x36, 0x4a, 0x38, 0x92, 0x34, 0x6a, 0x34, 0xac, 0x34, 0xa5, + 0x34, 0xb3, 0x34, 0x1f, 0x36, 0xc9, 0x35, 0x01, 0x35, 0xc0, 0x33, 0xa0, + 0x36, 0x86, 0x36, 0xc6, 0x33, 0x7a, 0x36, 0x06, 0x35, 0xf9, 0x34, 0x9b, + 0x36, 0x83, 0x37, 0x14, 0x32, 0xa2, 0x33, 0x4f, 0x2d, 0x97, 0x32, 0x49, + 0x34, 0x1b, 0x34, 0x2d, 0x34, 0x0f, 0x34, 0xcd, 0xbf, 0x35, 0x78, 0x32, + 0x67, 0x5c, 0xd9, 0xe3, 0xd9, 0xed, 0x53, 0x65, 0x5c, 0xd9, 0x7e, 0x23, + 0xe5, 0xa7, 0xf2, 0x80, 0x33, 0x57, 0xe6, 0x60, 0x0f, 0x0f, 0x0f, 0x0f, + 0xc6, 0x7c, 0x6f, 0x7a, 0xe6, 0x1f, 0x18, 0x0e, 0xfe, 0x18, 0x30, 0x08, + 0xd9, 0x01, 0xfb, 0xff, 0x54, 0x5d, 0x09, 0xd9, 0x07, 0x6f, 0x11, 0xd7, + 0x32, 0x26, 0x00, 0x19, 0x5e, 0x23, 0x56, 0x21, 0x65, 0x33, 0xe3, 0xd5, + 0xd9, 0xed, 0x4b, 0x66, 0x5c, 0xc9, 0xf1, 0x3a, 0x67, 0x5c, 0xd9, 0x18, + 0xc3, 0xd5, 0xe5, 0x01, 0x05, 0x00, 0xcd, 0x05, 0x1f, 0xe1, 0xd1, 0xc9, + 0xed, 0x5b, 0x65, 0x5c, 0xcd, 0xc0, 0x33, 0xed, 0x53, 0x65, 0x5c, 0xc9, + 0xcd, 0xa9, 0x33, 0xed, 0xb0, 0xc9, 0x62, 0x6b, 0xcd, 0xa9, 0x33, 0xd9, + 0xe5, 0xd9, 0xe3, 0xc5, 0x7e, 0xe6, 0xc0, 0x07, 0x07, 0x4f, 0x0c, 0x7e, + 0xe6, 0x3f, 0x20, 0x02, 0x23, 0x7e, 0xc6, 0x50, 0x12, 0x3e, 0x05, 0x91, + 0x23, 0x13, 0x06, 0x00, 0xed, 0xb0, 0xc1, 0xe3, 0xd9, 0xe1, 0xd9, 0x47, + 0xaf, 0x05, 0xc8, 0x12, 0x13, 0x18, 0xfa, 0xa7, 0xc8, 0xf5, 0xd5, 0x11, + 0x00, 0x00, 0xcd, 0xc8, 0x33, 0xd1, 0xf1, 0x3d, 0x18, 0xf2, 0x4f, 0x07, + 0x07, 0x81, 0x4f, 0x06, 0x00, 0x09, 0xc9, 0xd5, 0x2a, 0x68, 0x5c, 0xcd, + 0x06, 0x34, 0xcd, 0xc0, 0x33, 0xe1, 0xc9, 0x62, 0x6b, 0xd9, 0xe5, 0x21, + 0xc5, 0x32, 0xd9, 0xcd, 0xf7, 0x33, 0xcd, 0xc8, 0x33, 0xd9, 0xe1, 0xd9, + 0xc9, 0xe5, 0xeb, 0x2a, 0x68, 0x5c, 0xcd, 0x06, 0x34, 0xeb, 0xcd, 0xc0, + 0x33, 0xeb, 0xe1, 0xc9, 0x06, 0x05, 0x1a, 0x4e, 0xeb, 0x12, 0x71, 0x23, + 0x13, 0x10, 0xf7, 0xeb, 0xc9, 0x47, 0xcd, 0x5e, 0x33, 0x31, 0x0f, 0xc0, + 0x02, 0xa0, 0xc2, 0x31, 0xe0, 0x04, 0xe2, 0xc1, 0x03, 0x38, 0xcd, 0xc6, + 0x33, 0xcd, 0x62, 0x33, 0x0f, 0x01, 0xc2, 0x02, 0x35, 0xee, 0xe1, 0x03, + 0x38, 0xc9, 0x06, 0xff, 0x18, 0x06, 0xcd, 0xe9, 0x34, 0xd8, 0x06, 0x00, + 0x7e, 0xa7, 0x28, 0x0b, 0x23, 0x78, 0xe6, 0x80, 0xb6, 0x17, 0x3f, 0x1f, + 0x77, 0x2b, 0xc9, 0xd5, 0xe5, 0xcd, 0x7f, 0x2d, 0xe1, 0x78, 0xb1, 0x2f, + 0x4f, 0xcd, 0x8e, 0x2d, 0xd1, 0xc9, 0xcd, 0xe9, 0x34, 0xd8, 0xd5, 0x11, + 0x01, 0x00, 0x23, 0xcb, 0x16, 0x2b, 0x9f, 0x4f, 0xcd, 0x8e, 0x2d, 0xd1, + 0xc9, 0xcd, 0x99, 0x1e, 0xed, 0x78, 0x18, 0x04, 0xcd, 0x99, 0x1e, 0x0a, + 0xc3, 0x28, 0x2d, 0xcd, 0x99, 0x1e, 0x21, 0x2b, 0x2d, 0xe5, 0xc5, 0xc9, + 0xcd, 0xf1, 0x2b, 0x0b, 0x78, 0xb1, 0x20, 0x23, 0x1a, 0xcd, 0x8d, 0x2c, + 0x38, 0x09, 0xd6, 0x90, 0x38, 0x19, 0xfe, 0x15, 0x30, 0x15, 0x3c, 0x3d, + 0x87, 0x87, 0x87, 0xfe, 0xa8, 0x30, 0x0c, 0xed, 0x4b, 0x7b, 0x5c, 0x81, + 0x4f, 0x30, 0x01, 0x04, 0xc3, 0x2b, 0x2d, 0xcf, 0x09, 0xe5, 0xc5, 0x47, + 0x7e, 0x23, 0xb6, 0x23, 0xb6, 0x23, 0xb6, 0x78, 0xc1, 0xe1, 0xc0, 0x37, + 0xc9, 0xcd, 0xe9, 0x34, 0xd8, 0x3e, 0xff, 0x18, 0x06, 0xcd, 0xe9, 0x34, + 0x18, 0x05, 0xaf, 0x23, 0xae, 0x2b, 0x07, 0xe5, 0x3e, 0x00, 0x77, 0x23, + 0x77, 0x23, 0x17, 0x77, 0x1f, 0x23, 0x77, 0x23, 0x77, 0xe1, 0xc9, 0xeb, + 0xcd, 0xe9, 0x34, 0xeb, 0xd8, 0x37, 0x18, 0xe7, 0xeb, 0xcd, 0xe9, 0x34, + 0xeb, 0xd0, 0xa7, 0x18, 0xde, 0xeb, 0xcd, 0xe9, 0x34, 0xeb, 0xd0, 0xd5, + 0x1b, 0xaf, 0x12, 0x1b, 0x12, 0xd1, 0xc9, 0x78, 0xd6, 0x08, 0xcb, 0x57, + 0x20, 0x01, 0x3d, 0x0f, 0x30, 0x08, 0xf5, 0xe5, 0xcd, 0x3c, 0x34, 0xd1, + 0xeb, 0xf1, 0xcb, 0x57, 0x20, 0x07, 0x0f, 0xf5, 0xcd, 0x0f, 0x30, 0x18, + 0x33, 0x0f, 0xf5, 0xcd, 0xf1, 0x2b, 0xd5, 0xc5, 0xcd, 0xf1, 0x2b, 0xe1, + 0x7c, 0xb5, 0xe3, 0x78, 0x20, 0x0b, 0xb1, 0xc1, 0x28, 0x04, 0xf1, 0x3f, + 0x18, 0x16, 0xf1, 0x18, 0x13, 0xb1, 0x28, 0x0d, 0x1a, 0x96, 0x38, 0x09, + 0x20, 0xed, 0x0b, 0x13, 0x23, 0xe3, 0x2b, 0x18, 0xdf, 0xc1, 0xf1, 0xa7, + 0xf5, 0xef, 0xa0, 0x38, 0xf1, 0xf5, 0xdc, 0x01, 0x35, 0xf1, 0xf5, 0xd4, + 0xf9, 0x34, 0xf1, 0x0f, 0xd4, 0x01, 0x35, 0xc9, 0xcd, 0xf1, 0x2b, 0xd5, + 0xc5, 0xcd, 0xf1, 0x2b, 0xe1, 0xe5, 0xd5, 0xc5, 0x09, 0x44, 0x4d, 0xf7, + 0xcd, 0xb2, 0x2a, 0xc1, 0xe1, 0x78, 0xb1, 0x28, 0x02, 0xed, 0xb0, 0xc1, + 0xe1, 0x78, 0xb1, 0x28, 0x02, 0xed, 0xb0, 0x2a, 0x65, 0x5c, 0x11, 0xfb, + 0xff, 0xe5, 0x19, 0xd1, 0xc9, 0xcd, 0xd5, 0x2d, 0x38, 0x0e, 0x20, 0x0c, + 0xf5, 0x01, 0x01, 0x00, 0xf7, 0xf1, 0x12, 0xcd, 0xb2, 0x2a, 0xeb, 0xc9, + 0xcf, 0x0a, 0x2a, 0x5d, 0x5c, 0xe5, 0x78, 0xc6, 0xe3, 0x9f, 0xf5, 0xcd, + 0xf1, 0x2b, 0xd5, 0x03, 0xf7, 0xe1, 0xed, 0x53, 0x5d, 0x5c, 0xd5, 0xed, + 0xb0, 0xeb, 0x2b, 0x36, 0x0d, 0xfd, 0xcb, 0x01, 0xbe, 0xcd, 0xfb, 0x24, + 0xdf, 0xfe, 0x0d, 0x20, 0x07, 0xe1, 0xf1, 0xfd, 0xae, 0x01, 0xe6, 0x40, + 0xc2, 0x8a, 0x1c, 0x22, 0x5d, 0x5c, 0xfd, 0xcb, 0x01, 0xfe, 0xcd, 0xfb, + 0x24, 0xe1, 0x22, 0x5d, 0x5c, 0x18, 0xa0, 0x01, 0x01, 0x00, 0xf7, 0x22, + 0x5b, 0x5c, 0xe5, 0x2a, 0x51, 0x5c, 0xe5, 0x3e, 0xff, 0xcd, 0x01, 0x16, + 0xcd, 0xe3, 0x2d, 0xe1, 0xcd, 0x15, 0x16, 0xd1, 0x2a, 0x5b, 0x5c, 0xa7, + 0xed, 0x52, 0x44, 0x4d, 0xcd, 0xb2, 0x2a, 0xeb, 0xc9, 0xcd, 0x94, 0x1e, + 0xfe, 0x10, 0xd2, 0x9f, 0x1e, 0x2a, 0x51, 0x5c, 0xe5, 0xcd, 0x01, 0x16, + 0xcd, 0xe6, 0x15, 0x01, 0x00, 0x00, 0x30, 0x03, 0x0c, 0xf7, 0x12, 0xcd, + 0xb2, 0x2a, 0xe1, 0xcd, 0x15, 0x16, 0xc3, 0xbf, 0x35, 0xcd, 0xf1, 0x2b, + 0x78, 0xb1, 0x28, 0x01, 0x1a, 0xc3, 0x28, 0x2d, 0xcd, 0xf1, 0x2b, 0xc3, + 0x2b, 0x2d, 0xd9, 0xe5, 0x21, 0x67, 0x5c, 0x35, 0xe1, 0x20, 0x04, 0x23, + 0xd9, 0xc9, 0xd9, 0x5e, 0x7b, 0x17, 0x9f, 0x57, 0x19, 0xd9, 0xc9, 0x13, + 0x13, 0x1a, 0x1b, 0x1b, 0xa7, 0x20, 0xef, 0xd9, 0x23, 0xd9, 0xc9, 0xf1, + 0xd9, 0xe3, 0xd9, 0xc9, 0xef, 0xc0, 0x02, 0x31, 0xe0, 0x05, 0x27, 0xe0, + 0x01, 0xc0, 0x04, 0x03, 0xe0, 0x38, 0xc9, 0xef, 0x31, 0x36, 0x00, 0x04, + 0x3a, 0x38, 0xc9, 0x31, 0x3a, 0xc0, 0x03, 0xe0, 0x01, 0x30, 0x00, 0x03, + 0xa1, 0x03, 0x38, 0xc9, 0xef, 0x3d, 0x34, 0xf1, 0x38, 0xaa, 0x3b, 0x29, + 0x04, 0x31, 0x27, 0xc3, 0x03, 0x31, 0x0f, 0xa1, 0x03, 0x88, 0x13, 0x36, + 0x58, 0x65, 0x66, 0x9d, 0x78, 0x65, 0x40, 0xa2, 0x60, 0x32, 0xc9, 0xe7, + 0x21, 0xf7, 0xaf, 0x24, 0xeb, 0x2f, 0xb0, 0xb0, 0x14, 0xee, 0x7e, 0xbb, + 0x94, 0x58, 0xf1, 0x3a, 0x7e, 0xf8, 0xcf, 0xe3, 0x38, 0xcd, 0xd5, 0x2d, + 0x20, 0x07, 0x38, 0x03, 0x86, 0x30, 0x09, 0xcf, 0x05, 0x38, 0x07, 0x96, + 0x30, 0x04, 0xed, 0x44, 0x77, 0xc9, 0xef, 0x02, 0xa0, 0x38, 0xc9, 0xef, + 0x3d, 0x31, 0x37, 0x00, 0x04, 0x38, 0xcf, 0x09, 0xa0, 0x02, 0x38, 0x7e, + 0x36, 0x80, 0xcd, 0x28, 0x2d, 0xef, 0x34, 0x38, 0x00, 0x03, 0x01, 0x31, + 0x34, 0xf0, 0x4c, 0xcc, 0xcc, 0xcd, 0x03, 0x37, 0x00, 0x08, 0x01, 0xa1, + 0x03, 0x01, 0x38, 0x34, 0xef, 0x01, 0x34, 0xf0, 0x31, 0x72, 0x17, 0xf8, + 0x04, 0x01, 0xa2, 0x03, 0xa2, 0x03, 0x31, 0x34, 0x32, 0x20, 0x04, 0xa2, + 0x03, 0x8c, 0x11, 0xac, 0x14, 0x09, 0x56, 0xda, 0xa5, 0x59, 0x30, 0xc5, + 0x5c, 0x90, 0xaa, 0x9e, 0x70, 0x6f, 0x61, 0xa1, 0xcb, 0xda, 0x96, 0xa4, + 0x31, 0x9f, 0xb4, 0xe7, 0xa0, 0xfe, 0x5c, 0xfc, 0xea, 0x1b, 0x43, 0xca, + 0x36, 0xed, 0xa7, 0x9c, 0x7e, 0x5e, 0xf0, 0x6e, 0x23, 0x80, 0x93, 0x04, + 0x0f, 0x38, 0xc9, 0xef, 0x3d, 0x34, 0xee, 0x22, 0xf9, 0x83, 0x6e, 0x04, + 0x31, 0xa2, 0x0f, 0x27, 0x03, 0x31, 0x0f, 0x31, 0x0f, 0x31, 0x2a, 0xa1, + 0x03, 0x31, 0x37, 0xc0, 0x00, 0x04, 0x02, 0x38, 0xc9, 0xa1, 0x03, 0x01, + 0x36, 0x00, 0x02, 0x1b, 0x38, 0xc9, 0xef, 0x39, 0x2a, 0xa1, 0x03, 0xe0, + 0x00, 0x06, 0x1b, 0x33, 0x03, 0xef, 0x39, 0x31, 0x31, 0x04, 0x31, 0x0f, + 0xa1, 0x03, 0x86, 0x14, 0xe6, 0x5c, 0x1f, 0x0b, 0xa3, 0x8f, 0x38, 0xee, + 0xe9, 0x15, 0x63, 0xbb, 0x23, 0xee, 0x92, 0x0d, 0xcd, 0xed, 0xf1, 0x23, + 0x5d, 0x1b, 0xea, 0x04, 0x38, 0xc9, 0xef, 0x31, 0x1f, 0x01, 0x20, 0x05, + 0x38, 0xc9, 0xcd, 0x97, 0x32, 0x7e, 0xfe, 0x81, 0x38, 0x0e, 0xef, 0xa1, + 0x1b, 0x01, 0x05, 0x31, 0x36, 0xa3, 0x01, 0x00, 0x06, 0x1b, 0x33, 0x03, + 0xef, 0xa0, 0x01, 0x31, 0x31, 0x04, 0x31, 0x0f, 0xa1, 0x03, 0x8c, 0x10, + 0xb2, 0x13, 0x0e, 0x55, 0xe4, 0x8d, 0x58, 0x39, 0xbc, 0x5b, 0x98, 0xfd, + 0x9e, 0x00, 0x36, 0x75, 0xa0, 0xdb, 0xe8, 0xb4, 0x63, 0x42, 0xc4, 0xe6, + 0xb5, 0x09, 0x36, 0xbe, 0xe9, 0x36, 0x73, 0x1b, 0x5d, 0xec, 0xd8, 0xde, + 0x63, 0xbe, 0xf0, 0x61, 0xa1, 0xb3, 0x0c, 0x04, 0x0f, 0x38, 0xc9, 0xef, + 0x31, 0x31, 0x04, 0xa1, 0x03, 0x1b, 0x28, 0xa1, 0x0f, 0x05, 0x24, 0x31, + 0x0f, 0x38, 0xc9, 0xef, 0x22, 0xa3, 0x03, 0x1b, 0x38, 0xc9, 0xef, 0x31, + 0x30, 0x00, 0x1e, 0xa2, 0x38, 0xef, 0x01, 0x31, 0x30, 0x00, 0x07, 0x25, + 0x04, 0x38, 0xc3, 0xc4, 0x36, 0x02, 0x31, 0x30, 0x00, 0x09, 0xa0, 0x01, + 0x37, 0x00, 0x06, 0xa1, 0x01, 0x05, 0x02, 0xa1, 0x38, 0xc9, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, 0x00, 0x24, 0x24, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x7e, 0x24, 0x24, 0x7e, 0x24, 0x00, + 0x00, 0x08, 0x3e, 0x28, 0x3e, 0x0a, 0x3e, 0x08, 0x00, 0x62, 0x64, 0x08, + 0x10, 0x26, 0x46, 0x00, 0x00, 0x10, 0x28, 0x10, 0x2a, 0x44, 0x3a, 0x00, + 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x08, + 0x08, 0x08, 0x04, 0x00, 0x00, 0x20, 0x10, 0x10, 0x10, 0x10, 0x20, 0x00, + 0x00, 0x00, 0x14, 0x08, 0x3e, 0x08, 0x14, 0x00, 0x00, 0x00, 0x08, 0x08, + 0x3e, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, + 0x00, 0x3c, 0x46, 0x4a, 0x52, 0x62, 0x3c, 0x00, 0x00, 0x18, 0x28, 0x08, + 0x08, 0x08, 0x3e, 0x00, 0x00, 0x3c, 0x42, 0x02, 0x3c, 0x40, 0x7e, 0x00, + 0x00, 0x3c, 0x42, 0x0c, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x08, 0x18, 0x28, + 0x48, 0x7e, 0x08, 0x00, 0x00, 0x7e, 0x40, 0x7c, 0x02, 0x42, 0x3c, 0x00, + 0x00, 0x3c, 0x40, 0x7c, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x7e, 0x02, 0x04, + 0x08, 0x10, 0x10, 0x00, 0x00, 0x3c, 0x42, 0x3c, 0x42, 0x42, 0x3c, 0x00, + 0x00, 0x3c, 0x42, 0x42, 0x3e, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x20, + 0x00, 0x00, 0x04, 0x08, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x3e, + 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x04, 0x08, 0x10, 0x00, + 0x00, 0x3c, 0x42, 0x04, 0x08, 0x00, 0x08, 0x00, 0x00, 0x3c, 0x4a, 0x56, + 0x5e, 0x40, 0x3c, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x00, + 0x00, 0x7c, 0x42, 0x7c, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x3c, 0x42, 0x40, + 0x40, 0x42, 0x3c, 0x00, 0x00, 0x78, 0x44, 0x42, 0x42, 0x44, 0x78, 0x00, + 0x00, 0x7e, 0x40, 0x7c, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x7e, 0x40, 0x7c, + 0x40, 0x40, 0x40, 0x00, 0x00, 0x3c, 0x42, 0x40, 0x4e, 0x42, 0x3c, 0x00, + 0x00, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x00, 0x00, 0x3e, 0x08, 0x08, + 0x08, 0x08, 0x3e, 0x00, 0x00, 0x02, 0x02, 0x02, 0x42, 0x42, 0x3c, 0x00, + 0x00, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42, 0x00, 0x00, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x7e, 0x00, 0x00, 0x42, 0x66, 0x5a, 0x42, 0x42, 0x42, 0x00, + 0x00, 0x42, 0x62, 0x52, 0x4a, 0x46, 0x42, 0x00, 0x00, 0x3c, 0x42, 0x42, + 0x42, 0x42, 0x3c, 0x00, 0x00, 0x7c, 0x42, 0x42, 0x7c, 0x40, 0x40, 0x00, + 0x00, 0x3c, 0x42, 0x42, 0x52, 0x4a, 0x3c, 0x00, 0x00, 0x7c, 0x42, 0x42, + 0x7c, 0x44, 0x42, 0x00, 0x00, 0x3c, 0x40, 0x3c, 0x02, 0x42, 0x3c, 0x00, + 0x00, 0xfe, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x3c, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, + 0x00, 0x42, 0x42, 0x42, 0x42, 0x5a, 0x24, 0x00, 0x00, 0x42, 0x24, 0x18, + 0x18, 0x24, 0x42, 0x00, 0x00, 0x82, 0x44, 0x28, 0x10, 0x10, 0x10, 0x00, + 0x00, 0x7e, 0x04, 0x08, 0x10, 0x20, 0x7e, 0x00, 0x00, 0x0e, 0x08, 0x08, + 0x08, 0x08, 0x0e, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, + 0x00, 0x70, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00, 0x00, 0x10, 0x38, 0x54, + 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x00, 0x1c, 0x22, 0x78, 0x20, 0x20, 0x7e, 0x00, 0x00, 0x00, 0x38, 0x04, + 0x3c, 0x44, 0x3c, 0x00, 0x00, 0x20, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x00, + 0x00, 0x00, 0x1c, 0x20, 0x20, 0x20, 0x1c, 0x00, 0x00, 0x04, 0x04, 0x3c, + 0x44, 0x44, 0x3c, 0x00, 0x00, 0x00, 0x38, 0x44, 0x78, 0x40, 0x3c, 0x00, + 0x00, 0x0c, 0x10, 0x18, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x3c, 0x44, + 0x44, 0x3c, 0x04, 0x38, 0x00, 0x40, 0x40, 0x78, 0x44, 0x44, 0x44, 0x00, + 0x00, 0x10, 0x00, 0x30, 0x10, 0x10, 0x38, 0x00, 0x00, 0x04, 0x00, 0x04, + 0x04, 0x04, 0x24, 0x18, 0x00, 0x20, 0x28, 0x30, 0x30, 0x28, 0x24, 0x00, + 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x68, 0x54, + 0x54, 0x54, 0x54, 0x00, 0x00, 0x00, 0x78, 0x44, 0x44, 0x44, 0x44, 0x00, + 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x78, 0x44, + 0x44, 0x78, 0x40, 0x40, 0x00, 0x00, 0x3c, 0x44, 0x44, 0x3c, 0x04, 0x06, + 0x00, 0x00, 0x1c, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x38, 0x40, + 0x38, 0x04, 0x78, 0x00, 0x00, 0x10, 0x38, 0x10, 0x10, 0x10, 0x0c, 0x00, + 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x44, 0x44, + 0x28, 0x28, 0x10, 0x00, 0x00, 0x00, 0x44, 0x54, 0x54, 0x54, 0x28, 0x00, + 0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x44, 0x44, + 0x44, 0x3c, 0x04, 0x38, 0x00, 0x00, 0x7c, 0x08, 0x10, 0x20, 0x7c, 0x00, + 0x00, 0x0e, 0x08, 0x30, 0x08, 0x08, 0x0e, 0x00, 0x00, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x00, 0x00, 0x70, 0x10, 0x0c, 0x10, 0x10, 0x70, 0x00, + 0x00, 0x14, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x99, 0xa1, + 0xa1, 0x99, 0x42, 0x3c +}; + +#endif diff --git a/MCUME_pico/picospeccy/zx_filetyp_z80.c b/MCUME_pico/picospeccy/zx_filetyp_z80.c new file mode 100644 index 0000000..31918a2 --- /dev/null +++ b/MCUME_pico/picospeccy/zx_filetyp_z80.c @@ -0,0 +1,347 @@ +//-------------------------------------------------------------- +// File derived from: +// Datum : 27.01.2014 +// Version : 1.0 +// Autor : UB +// EMail : mc-4u(@)t-online.de +// Web : www.mikrocontroller-4u.de +//-------------------------------------------------------------- +#include "zx_filetyp_z80.h" +#include "emuapi.h" + +//------------------------------------------------------------- +extern uint8_t out_ram; + +//-------------------------------------------------------------- +// interne Funktionen +//-------------------------------------------------------------- +const uint8_t* p_decompFlashBlock(const uint8_t *block_adr); + + +void ZX_ReadFromFlash_SNA(Z80 *regs, const char * filename) +{ + uint8_t snafile[27]; + if (emu_FileOpen(filename)) { + if (emu_FileRead(&snafile[0], sizeof(snafile)) == sizeof(snafile)) { + // Load Z80 registers from SNA + regs->I = snafile[ 0]; + regs->HL1.B.l = snafile[ 1]; + regs->HL1.B.h = snafile[ 2]; + regs->DE1.B.l = snafile[ 3]; + regs->DE1.B.h = snafile[ 4]; + regs->BC1.B.l = snafile[ 5]; + regs->BC1.B.h = snafile[ 6]; + regs->AF1.B.l = snafile[ 7]; + regs->AF1.B.h = snafile[ 8]; + regs->HL.B.l = snafile[ 9]; + regs->HL.B.h = snafile[10]; + regs->DE.B.l = snafile[11]; + regs->DE.B.h = snafile[12]; + regs->BC.B.l = snafile[13]; + regs->BC.B.h = snafile[14]; + regs->IY.B.l = snafile[15]; + regs->IY.B.h = snafile[16]; + regs->IX.B.l = snafile[17]; + regs->IX.B.h = snafile[18]; + //#define IFF_1 0x01 /* IFF1 flip-flop */ +//#define IFF_IM1 0x02 /* 1: IM1 mode */ +//#define IFF_IM2 0x04 /* 1: IM2 mode */ +//#define IFF_2 0x08 /* IFF2 flip-flop */ +//#define IFF_EI 0x20 /* 1: EI pending */ +//#define IFF_HALT 0x80 /* 1: CPU HALTed */ + regs->R = snafile[20]; //R.W + regs->AF.B.l = snafile[21]; + regs->AF.B.h = snafile[22]; + regs->SP.B.l =snafile[23]; + regs->SP.B.h =snafile[24]; + regs->IFF = 0; + regs->IFF |= (((snafile[19]&0x04) >>2)?IFF_1:0); //regs->IFF1 = regs->IFF2 = ... + regs->IFF |= (((snafile[19]&0x04) >>2)?IFF_2:0); + regs->IFF |= (snafile[25]<< 1); // regs->IM = snafile[25]; + //regs->BorderColor = snafile[26]; + + + + // load RAM from SNA + int direc; + uint8_t b; + for (direc=0;direc!=0xbfff;direc++) + { + emu_FileRead(&b, 1); + WrZ80(direc+0x4000, b); + } + emu_FileClose(); + // SP to PC for SNA run + regs->PC.B.l = RdZ80(regs->SP.W); + regs->SP.W++; + regs->PC.B.h = RdZ80(regs->SP.W); + regs->SP.W++; + } + } +} + +//-------------------------------------------------------------- +// Unpack data from a file ( type = * .Z80 ) from flash +// And copy them to the memory of the ZX - Spectrum +// +// Data = pointer to the start of data +// Length = number of bytes +//-------------------------------------------------------------- +void ZX_ReadFromFlash_Z80(Z80 *R, const uint8_t *data, uint16_t length) +{ + const uint8_t *ptr; + const uint8_t *akt_block,*next_block; + uint8_t value1,value2; + uint8_t flag_version=0; + uint8_t flag_compressed=0; + uint16_t header_len; + uint16_t cur_addr; + + if(length==0) return; + if(length>0xC020) return; + + //---------------------------------- + // parsing header + // Byte : [0...29] + //---------------------------------- + + // Set pointer to data beginning + ptr=data; + + R->AF.B.h=*(ptr++); // A [0] + R->AF.B.l=*(ptr++); // F [1] + R->BC.B.l=*(ptr++); // C [2] + R->BC.B.h=*(ptr++); // B [3] + R->HL.B.l=*(ptr++); // L [4] + R->HL.B.h=*(ptr++); // H [5] + + // PC [6+7] + value1=*(ptr++); + value2=*(ptr++); + R->PC.W=(value2<<8)|value1; + if(R->PC.W==0x0000) { + flag_version=1; + } + else { + flag_version=0; + } + + // SP [8+9] + value1=*(ptr++); + value2=*(ptr++); + R->SP.W=(value2<<8)|value1; + + R->I=*(ptr++); // I [10] + R->R=*(ptr++); // R [11] + + // Comressed-Flag & Border [12] + value1=*(ptr++); + value2=((value1&0x0E)>>1); + OutZ80(0xFE, value2); // BorderColor + if((value1&0x20)!=0) { + flag_compressed=1; + } else { + flag_compressed=0; + } + + R->DE.B.l=*(ptr++); // E [13] + R->DE.B.h=*(ptr++); // D [14] + R->BC1.B.l=*(ptr++); // C1 [15] + R->BC1.B.h=*(ptr++); // B1 [16] + R->DE1.B.l=*(ptr++); // E1 [17] + R->DE1.B.h=*(ptr++); // D1 [18] + R->HL1.B.l=*(ptr++); // L1 [19] + R->HL1.B.h=*(ptr++); // H1 [20] + R->AF1.B.h=*(ptr++); // A1 [21] + R->AF1.B.l=*(ptr++); // F1 [22] + R->IY.B.l=*(ptr++); // Y [23] + R->IY.B.h=*(ptr++); // I [24] + R->IX.B.l=*(ptr++); // X [25] + R->IX.B.h=*(ptr++); // I [26] + + // Interrupt-Flag [27] + value1=*(ptr++); + if(value1!=0) { + // EI + R->IFF|=IFF_2|IFF_EI; + } + else { + // DI + R->IFF&=~(IFF_1|IFF_2|IFF_EI); + } + value1=*(ptr++); // nc [28] + // Interrupt-Mode [29] + value1=*(ptr++); + if((value1&0x01)!=0) { + R->IFF|=IFF_IM1; + } + else { + R->IFF&=~IFF_IM1; + } + if((value1&0x02)!=0) { + R->IFF|=IFF_IM2; + } + else { + R->IFF&=~IFF_IM2; + } + + // restliche Register + R->ICount = R->IPeriod; + R->IRequest = INT_NONE; + R->IBackup = 0; + + //---------------------------------- + // save the data in RAM + // Byte : [30...n] + //---------------------------------- + + cur_addr=0x4000; // RAM start + + + if(flag_version==0) { + //----------------------- + // old Version + //----------------------- + if(flag_compressed==1) { + //----------------------- + // compressed + //----------------------- + while(ptr<(data+length)) { + value1=*(ptr++); + if(value1!=0xED) { + WrZ80(cur_addr++, value1); + } + else { + value2=*(ptr++); + if(value2!=0xED) { + WrZ80(cur_addr++, value1); + WrZ80(cur_addr++, value2); + } + else { + value1=*(ptr++); + value2=*(ptr++); + while(value1--) { + WrZ80(cur_addr++, value2); + } + } + } + } + } + else { + //----------------------- + // raw (uncompressed) + //----------------------- + while(ptr<(data+length)) { + value1=*(ptr++); + WrZ80(cur_addr++, value1); + } + } + } + else { + //----------------------- + // new Version + //----------------------- + // Header Laenge [30+31] + value1=*(ptr++); + value2=*(ptr++); + header_len=(value2<<8)|value1; + akt_block=(uint8_t*)(ptr+header_len); + // PC [32+33] + value1=*(ptr++); + value2=*(ptr++); + R->PC.W=(value2<<8)|value1; + + //------------------------ + // 1st block parsing + //------------------------ + next_block=p_decompFlashBlock(akt_block); + //------------------------ + // all other parsing + //------------------------ + while(next_block +void AudioPlaySystem::snd_Mixer(short * stream, int len ) +{ + if (playing) + { +#ifdef CUSTOM_SND + //printf("s\n"); + SND_Process((void*)stream, len); +#else + int i; + long s; + len = len >> 1; + short v0=chan[0].vol; + short v1=chan[1].vol; + short v2=chan[2].vol; + short v3=chan[3].vol; + short v4=chan[4].vol; + short v5=chan[5].vol; + for (i=0;i>8)&0x3f])>>11); + s+=((v1*square[(chan[1].spos>>8)&0x3f])>>11); + s+=((v2*square[(chan[2].spos>>8)&0x3f])>>11); + s+=((v3*noise[(chan[3].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v4*noise[(chan[4].spos>>8)&(NOISEBSIZE-1)])>>11); + s+=((v5*noise[(chan[5].spos>>8)&(NOISEBSIZE-1)])>>11); + *stream++ = (short)(s); + *stream++ = (short)(s); + chan[0].spos += chan[0].sinc; + chan[1].spos += chan[1].sinc; + chan[2].spos += chan[2].sinc; + chan[3].spos += chan[3].sinc; + chan[4].spos += chan[4].sinc; + chan[5].spos += chan[5].sinc; + } +#endif + } +} + +void AudioPlaySystem::begin(void) +{ + this->reset(); +} + +void AudioPlaySystem::start(void) +{ + playing = true; +} + +void AudioPlaySystem::setSampleParameters(float clockfreq, float samplerate) { +} + +void AudioPlaySystem::reset(void) +{ + snd_Reset(); +} + +void AudioPlaySystem::stop(void) +{ + playing = false; +} + +bool AudioPlaySystem::isPlaying(void) +{ + return playing; +} + + + +void AudioPlaySystem::sound(int C, int F, int V) { +#ifndef CUSTOM_SND + if (C < 6) { + chan[C].vol = V; + chan[C].sinc = F>>1; + } +#endif +} + +void AudioPlaySystem::step(void) { +} + +void AudioPlaySystem::buzz(int size, int val) { +} +#endif diff --git a/MCUME_pico/picovcs/AudioPlaySystem.h b/MCUME_pico/picovcs/AudioPlaySystem.h new file mode 100644 index 0000000..5d2efc0 --- /dev/null +++ b/MCUME_pico/picovcs/AudioPlaySystem.h @@ -0,0 +1,26 @@ +#ifndef audioplaysystem_h_ +#define audioplaysystem_h_ + +#ifdef HAS_SND + +#include "platform_config.h" + +class AudioPlaySystem +{ +public: + AudioPlaySystem(void) { }; + void begin(void); + void setSampleParameters(float clockfreq, float samplerate); + void reset(void); + void start(void); + void stop(void); + bool isPlaying(void); + void sound(int C, int F, int V); + void buzz(int size, int val); + void step(void); + static void snd_Mixer(short * stream, int len ); +}; + +#endif + +#endif diff --git a/MCUME_pico/picovcs/Collision.c b/MCUME_pico/picovcs/Collision.c new file mode 100644 index 0000000..a4b1f3b --- /dev/null +++ b/MCUME_pico/picovcs/Collision.c @@ -0,0 +1,116 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for details. + + $Id: collision.c,v 1.10 1997/11/22 14:27:47 ahornby Exp $ +******************************************************************************/ +//This file was modified from its original version for use in PocketVCS +// by Stuart Russell + +/* The 2600 collision detection code */ + +#include + +#include "types.h" +#include "address.h" +#include "vmachine.h" +#include "col_mask.h" +#include "collision.h" + +#include "emuapi.h" + +/* + There are 6 different objects on the screen. Each takes one bit of the + collision vector. + Bit 0: Player 0 + Bit 1: Player 1 + Bit 2: Missile 0 + Bit 3: Missile 1 + Bit 4: Ball + Bit 5: Playfield + */ + +/* The collision vector */ +BYTE *colvect=0; + +/* The collision lookup table */ +unsigned short col_table[256]; + +/* The collision state */ +unsigned short col_state; + +/* Resets the collision registers of the tia */ +__inline void +reset_collisions (void) +{ + col_state=0; +} + +/* Does collision testing on the pixel b */ +/* b: byte to test for collisions */ +/* Used to build up the collision table */ +int +set_collisions (BYTE b) +{ + int res=0; + + if ((b & ML0_MASK) && (b & PL1_MASK)) + res |= M0P1_MASK; + if ((b & ML0_MASK) && (b & PL0_MASK)) + res |= M0P0_MASK; + if ((b & ML1_MASK) && (b & PL0_MASK)) + res |= M1P0_MASK; + if ((b & ML1_MASK) && (b & PL1_MASK)) + res |= M1P1_MASK; + + if ((b & PL0_MASK) && (b & PF_MASK)) + res |= P0PF_MASK; + if ((b & PL0_MASK) && (b & BL_MASK)) + res |= P0BL_MASK; + if ((b & PL1_MASK) && (b & PF_MASK)) + res |= P1PF_MASK ; + if ((b & PL1_MASK) && (b & BL_MASK)) + res |= P1BL_MASK; + + if ((b & ML0_MASK) && (b & PF_MASK)) + res |= M0PF_MASK; + if ((b & ML0_MASK) && (b & BL_MASK)) + res |= M0BL_MASK; + if ((b & ML1_MASK) && (b & PF_MASK)) + res |= M1PF_MASK; + if ((b & ML1_MASK) && (b & BL_MASK)) + res |= M1BL_MASK; + + if ((b & BL_MASK) && (b & PF_MASK)) + res |=BLPF_MASK; + if ((b & PL0_MASK) && (b & PL1_MASK)) + res |=P0P1_MASK ; + if ((b & ML0_MASK) && (b & ML1_MASK)) + res |=M0M1_MASK ; + + return res; +} + + +void +init_collisions(void) +{ + int i; + + /* Set up the collision lookup table */ + for (i = 0; i < 256; i++) + col_table[i] = set_collisions(i); + + /* Get the colvect 8 byte aligned */ + if (colvect == 0) colvect=(BYTE *)emu_Malloc(28*8);//calloc(28, 8); + + reset_collisions(); +} diff --git a/MCUME_pico/picovcs/Config.h b/MCUME_pico/picovcs/Config.h new file mode 100644 index 0000000..1cc916e --- /dev/null +++ b/MCUME_pico/picovcs/Config.h @@ -0,0 +1,14 @@ +/* + * "Hacked" and faster CPU emulation + * For CPU debugging, NORMAL (preferred) or HACK2 should be used. + */ + +//#define HACKED /* yes */ + +/* + * If you do NOT want to emulate undocumented commands, uncomment + * the line below, and also select "NORMAL" CPU emulation. + */ + +/*#define NO_UNDOC_CMDS*/ /* no */ + diff --git a/MCUME_pico/picovcs/Cpu.c b/MCUME_pico/picovcs/Cpu.c new file mode 100644 index 0000000..c7292cb --- /dev/null +++ b/MCUME_pico/picovcs/Cpu.c @@ -0,0 +1,4980 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for details. + + $Id: cpu.c,v 1.11.1.11 1997/11/22 14:27:47 ahornby Exp $ +******************************************************************************/ +/* + * 6507 CPU emulation + * + * Originally from X64 + * Modified by Alex Hornby for use in x2600 + * See COPYING for license terms + */ +//This file was modified from its original version for use in PocketVCS +// by Stuart Russell + +#include +#include +#include "types.h" +#include "cpu.h" +#include "macro.h" +#include "vmachine.h" +#include "memory.h" +#include "display.h" +#include "exmacro.h" +#include "exmacro.h" +#include "Atari2600EmulatorGlobals.h" + +extern int pausing; + +/* CPU internals */ +ADDRESS program_counter; +BYTE x_register, y_register, stack_pointer; +BYTE accumulator, status_register; +int zero_flag; +int sign_flag; +int overflow_flag; +int break_flag; +int decimal_flag; +int interrupt_flag; +int carry_flag; + +/* CPU Clock counts */ +/* Aggregate */ +CLOCK clk; +/* Current instruction */ +CLOCK clkcount = 0; + +/* Electron beam adjustment values for nine and twelve colour clock ins. */ +#define BEAMNINE 5 +#define BEAMTWELVE 9 +int beamadj; + +/* Used in undocumented 6507 instructions */ +/* These are unusual and have no discernable use, but here it is. */ +/* val: register to be acted upon */ +/* address: address to take high byte from */ +/* index: index to add to calculated address */ +#ifndef NO_UNDOC_CMDS +void +u_stoshr (unsigned int val, ADDRESS address, BYTE index) +{ + val &= (((address >> 8) + 1) & 0xff); + if (((address & 0xff) + index) > 0xff) + address = val; + STORE ((address + index), val); +} +#endif /* UNDOC */ + +/* Initialise the CPU */ +/* addr: reset vector address */ +/* Called from init_hardware() */ +void +init_cpu (ADDRESS addr) +{ + SET_SR (0x20); + AC=0; + XR=0; + YR=0; + SP = 0xff; + pc6507 = LOAD_ADDR (addr); + clk = 0; + clkcount = 0; +} + +/* The main emulation loop, performs the CPU emulation */ +void +mainloop (void) +{ + register BYTE b; +// init_hardware (); + +// int i=6000; + int i=15200/2; + +while (i--) +{ + + do_screen (clkcount); + b = LOADEXEC (pc6507); + beamadj = 0; + + switch (b) + { + case 0: + { + pc6507++; + /* Force break. */ + + SET_BREAK (1); /* Set break status. */ + PUSH (UPPER (pc6507)); + PUSH (LOWER (pc6507)); /* Push return address into the stack. */ + PUSH (GET_SR ()); /* Push status register into the stack. */ + SET_INTERRUPT (1); /* Disable interrupts. */ + pc6507 = LOAD_ADDR ((ADDRESS) 65534); /* Jump using BRK vector (0xfffe). */ + clkcount = 7; + } + break; + + case 1: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + pc6507 += 2; + + src |= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 6; + } + + break; + + case 2: + { + pc6507++; // KILL Instruction + /* No such opcode. */ + //(void) printf ("Illegal instruction.\n"); + //verflg = 1; + //--pc6507; + //show(); + //mon (pc6507); + } + + break; + + case 3: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + pc6507 += 2; + + /* src = asl(src); AC = ora(src); */ + + SET_CARRY (src & 0x80); /* ASL+ORA */ + src <<= 1; + src |= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE (LOAD_ZERO_ADDR (p1 + XR), (src)); + clkcount = 8; + } + + break; + + case 4: + { + pc6507 += 2; + + clkcount = 3; + } + + break; + + case 5: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + src |= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 3; + } + + break; + + case 6: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + SET_CARRY (src & 0x80); + src <<= 1; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1, (src)); + clkcount = 5; + } + + break; + + case 7: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + /* src = asl(src); AC = ora(src); */ + + SET_CARRY (src & 0x80); /* ASL+ORA */ + src <<= 1; + src |= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1, (src)); + clkcount = 5; + } + + break; + + case 8: + { + register unsigned src = GET_SR (); + pc6507++; + + PUSH (src); + /* First push item onto stack and then decrement SP. */ + clkcount = 3; + } + + break; + + case 9: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + pc6507 += 2; + + src |= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 10: + { + register unsigned src = AC; + pc6507++; + + SET_CARRY (src & 0x80); + src <<= 1; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 11: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = (AC & p1); + pc6507 += 2; + + src &= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 12: + { + pc6507 += 3; + + clkcount = 4; + } + + break; + + case 13: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + src |= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 4; + } + + break; + + case 14: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + SET_CARRY (src & 0x80); + src <<= 1; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2, (src)); + clkcount = 6; + } + + break; + + case 15: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + /* src = asl(src); AC = ora(src); */ + + SET_CARRY (src & 0x80); /* ASL+ORA */ + src <<= 1; + src |= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2, (src)); + clkcount = 6; + } + + break; + + case 16: +/* BPL, RELATIVE */ + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + register BYTE hb; + pc6507 += 2; + /* Branch if sign flag is clear. */ + if (!IF_SIGN ()) + { + hb = UPPER (pc6507); + pc6507 = REL_ADDR (pc6507, src); + if (brtest (hb)) + /* Same page */ + clkcount = 3; + else + /* Different page */ + clkcount = 4; + } + else + clkcount = 2; + } + + break; + + case 17: +/* ORA, INDIRECT_Y */ + { + register p1 = LOAD (pc6507 + 1); + register ADDRESS p2 = LOAD_ZERO_ADDR (p1); + register unsigned src = LOAD (p2 + YR); + pc6507 += 2; + + /* If low byte of address + index reg is > 0xff then extra cycle */ + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 6; + else + /* Same page */ + clkcount = 5; + src |= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + } + + break; + + case 18: + { + pc6507++; // KILL Instruction + /* No such opcode. */ + //(void) printf ("Illegal instruction.\n"); + //verflg = 1; + //--pc6507; + //show(); + //mon (pc6507); + } + + break; + + case 19: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1) + YR); + pc6507 += 2; + + /* src = asl(src); AC = ora(src); */ + + SET_CARRY (src & 0x80); /* ASL+ORA */ + src <<= 1; + src |= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE (LOAD_ZERO_ADDR (p1) + YR, (src)); + clkcount = 8; + } + + break; + + case 20: + { + pc6507 += 2; + + clkcount = 4; + } + + break; + + case 21: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + src |= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 4; + } + + break; + + case 22: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + SET_CARRY (src & 0x80); + src <<= 1; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1 + XR, (src)); + clkcount = 6; + } + + break; + + case 23: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + /* src = asl(src); AC = ora(src); */ + + SET_CARRY (src & 0x80); /* ASL+ORA */ + src <<= 1; + src |= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1 + XR, (src)); + clkcount = 6; + } + + break; + + case 24: + { + pc6507++; + + + SET_CARRY ((0)); + clkcount = 2; + } + + break; + + case 25: +/* ORA, ABSOLUTE_Y */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + pc6507 += 3; + + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + src |= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + } + + break; + + case 26: + { + pc6507++; + + clkcount = 2; + } + + break; + + case 27: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + pc6507 += 3; + + /* src = asl(src); AC = ora(src); */ + + SET_CARRY (src & 0x80); /* ASL+ORA */ + src <<= 1; + src |= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2 + YR, (src)); + clkcount = 7; + } + + break; + + case 28: + { + pc6507 += 3; + + clkcount = 4; + } + + break; + + case 29: +/* ORA, ABSOLUTE_X */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + + if (pagetest (p2, XR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + src |= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + } + + break; + + case 30: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + + SET_CARRY (src & 0x80); + src <<= 1; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2 + XR, (src)); + clkcount = 7; + } + + break; + + case 31: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + + /* src = asl(src); AC = ora(src); */ + + SET_CARRY (src & 0x80); /* ASL+ORA */ + src <<= 1; + src |= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2 + XR, (src)); + clkcount = 7; + } + + break; + + case 32: + { + register p2 = load_abs_addr (); + register unsigned src = p2; + pc6507 += 3; + /* Jump to subroutine. */ + pc6507--; + PUSH ((pc6507 >> 8) & 0xff); /* Push return address onto the stack. */ + PUSH (pc6507 & 0xff); + + pc6507 = (src); + clkcount = 6; + } + + break; + + case 33: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + pc6507 += 2; + + src &= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 6; + } + + break; + + case 34: + { + pc6507++; // KILL Instruction + /* No such opcode. */ + //(void) printf ("Illegal instruction.\n"); + //verflg = 1; + //--pc6507; + //show(); + //mon (pc6507); + } + + break; + + case 35: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + pc6507 += 2; + + /* src = rol(src); AC = and(src); */ + + src <<= 1; + if (IF_CARRY ()) /* ROL+AND */ + src |= 0x1; + SET_CARRY (src > 0xff); + src &= 0xff; + + AC &= src; + SET_SIGN (AC); + SET_ZERO (AC); + /* rotated, not disturbed */ + STORE (LOAD_ZERO_ADDR (p1 + XR), (src)); + clkcount = 8; + } + + break; + + case 36: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + SET_SIGN (src); + SET_OVERFLOW (0x40 & src); /* Copy bit 6 to OVERFLOW flag. */ + SET_ZERO (src & AC); + clkcount = 3; + } + + break; + + case 37: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + src &= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 3; + } + + break; + + case 38: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + src <<= 1; + if (IF_CARRY ()) + src |= 0x1; + SET_CARRY (src > 0xff); + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1, (src)); + clkcount = 5; + } + + break; + + case 39: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + /* src = rol(src); AC = and(src); */ + + src <<= 1; + if (IF_CARRY ()) /* ROL+AND */ + src |= 0x1; + SET_CARRY (src > 0xff); + src &= 0xff; + + AC &= src; + SET_SIGN (AC); + SET_ZERO (AC); + /* rotated, not disturbed */ + STORE_ZERO (p1, (src)); + clkcount = 5; + } + + break; + + case 40: + { + register unsigned src; + pc6507++; + + /* First increment stack pointer and then pull item from stack. */ + src = PULL (); + + SET_SR ((src)); + clkcount = 4; + } + + break; + + case 41: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + pc6507 += 2; + + src &= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 42: + { + register unsigned src = AC; + pc6507++; + + src <<= 1; + if (IF_CARRY ()) + src |= 0x1; + SET_CARRY (src > 0xff); + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 43: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = (AC & p1); + pc6507 += 2; + + src &= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 44: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + SET_SIGN (src); + SET_OVERFLOW (0x40 & src); /* Copy bit 6 to OVERFLOW flag. */ + SET_ZERO (src & AC); + clkcount = 4; + } + + break; + + case 45: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + src &= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 4; + } + + break; + + case 46: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + src <<= 1; + if (IF_CARRY ()) + src |= 0x1; + SET_CARRY (src > 0xff); + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2, (src)); + clkcount = 6; + } + + break; + + case 47: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + /* src = rol(src); AC = and(src); */ + + src <<= 1; + if (IF_CARRY ()) /* ROL+AND */ + src |= 0x1; + SET_CARRY (src > 0xff); + src &= 0xff; + + AC &= src; + SET_SIGN (AC); + SET_ZERO (AC); + /* rotated, not disturbed */ + STORE (p2, (src)); + clkcount = 6; + } + + break; + + case 48: +/* BMI, RELATIVE */ + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + register BYTE hb; + pc6507 += 2; + /* Branch if sign flag is set. */ + if (IF_SIGN ()) + { + hb = UPPER (pc6507); + pc6507 = REL_ADDR (pc6507, src); + if (brtest (hb)) + /* Same page */ + clkcount = 3; + else + /* Different page */ + clkcount = 4; + } + else + clkcount = 2; + } + + break; + + case 49: +/* AND, INDIRECT_Y */ + { + register p1 = LOAD (pc6507 + 1); + register ADDRESS p2 = LOAD_ZERO_ADDR (p1); + register unsigned src = LOAD (p2 + YR); + pc6507 += 2; + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 6; + else + /* Same page */ + clkcount = 5; + + src &= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + } + + break; + + case 50: + { + pc6507++; // KILL Instruction + /* No such opcode. */ + //(void) printf ("Illegal instruction.\n"); + //verflg = 1; + //--pc6507; + //show(); + //mon (pc6507); + } + + break; + + case 51: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1) + YR); + pc6507 += 2; + + /* src = rol(src); AC = and(src); */ + + src <<= 1; + if (IF_CARRY ()) /* ROL+AND */ + src |= 0x1; + SET_CARRY (src > 0xff); + src &= 0xff; + + AC &= src; + SET_SIGN (AC); + SET_ZERO (AC); + /* rotated, not disturbed */ + STORE (LOAD_ZERO_ADDR (p1) + YR, (src)); + clkcount = 8; + } + + break; + + case 52: + { + pc6507 += 2; + + clkcount = 4; + } + + break; + + case 53: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + src &= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 4; + } + + break; + + case 54: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + src <<= 1; + if (IF_CARRY ()) + src |= 0x1; + SET_CARRY (src > 0xff); + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1 + XR, (src)); + clkcount = 6; + } + + break; + + case 55: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + /* src = rol(src); AC = and(src); */ + + src <<= 1; + if (IF_CARRY ()) /* ROL+AND */ + src |= 0x1; + SET_CARRY (src > 0xff); + src &= 0xff; + + AC &= src; + SET_SIGN (AC); + SET_ZERO (AC); + /* rotated, not disturbed */ + STORE_ZERO (p1 + XR, (src)); + clkcount = 6; + } + + break; + + case 56: + { + pc6507++; + + + SET_CARRY ((1)); + clkcount = 2; + } + + break; + + case 57: +/* AND, ABSOLUTE_Y */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + pc6507 += 3; + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + src &= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + } + + break; + + case 58: + { + pc6507++; + + clkcount = 2; + } + + break; + + case 59: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + pc6507 += 3; + + /* src = rol(src); AC = and(src); */ + + src <<= 1; + if (IF_CARRY ()) /* ROL+AND */ + src |= 0x1; + SET_CARRY (src > 0xff); + src &= 0xff; + + AC &= src; + SET_SIGN (AC); + SET_ZERO (AC); + /* rotated, not disturbed */ + STORE (p2 + YR, (src)); + clkcount = 7; + } + + break; + + case 60: + { + pc6507 += 3; + + clkcount = 4; + } + + break; + + case 61: +/* AND, ABSOLUTE_X */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + if (pagetest (p2, XR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + src &= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + } + + break; + + case 62: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + + src <<= 1; + if (IF_CARRY ()) + src |= 0x1; + SET_CARRY (src > 0xff); + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2 + XR, (src)); + clkcount = 7; + } + + break; + + case 63: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + + /* src = rol(src); AC = and(src); */ + + src <<= 1; + if (IF_CARRY ()) /* ROL+AND */ + src |= 0x1; + SET_CARRY (src > 0xff); + src &= 0xff; + + AC &= src; + SET_SIGN (AC); + SET_ZERO (AC); + /* rotated, not disturbed */ + STORE (p2 + XR, (src)); + clkcount = 7; + } + + break; + + case 64: + { + register unsigned src; + pc6507++; + /* Return from interrupt. */ + /* Load program status and program counter from stack. */ + src = PULL (); + SET_SR (src); + src = PULL (); + src |= (PULL () << 8); /* Load return address from stack. */ + + pc6507 = (src); + clkcount = 6; + } + + break; + + case 65: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + pc6507 += 2; + + src ^= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src & 0xff); + clkcount = 6; + } + + break; + + case 66: + { + pc6507++; // KILL Instruction + /* No such opcode. */ + //(void) printf ("Illegal instruction.\n"); + //verflg = 1; + //--pc6507; + //show(); + //mon (pc6507); + } + + break; + + case 67: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + pc6507 += 2; + + /* src = lsr(src); AC = eor(src); */ + + SET_CARRY (src & 0x01); /* LSR+EOR */ + src >>= 1; + src ^= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + + STORE (LOAD_ZERO_ADDR (p1 + XR), (src)); + clkcount = 8; + } + + break; + + case 68: + { + pc6507 += 2; + + clkcount = 3; + } + + break; + + case 69: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + src ^= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src & 0xff); + clkcount = 3; + } + + break; + + case 70: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + SET_CARRY (src & 0x01); + src >>= 1; + + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1, (src)); + clkcount = 5; + } + + break; + + case 71: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + /* src = lsr(src); AC = eor(src); */ + + SET_CARRY (src & 0x01); /* LSR+EOR */ + src >>= 1; + src ^= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + + STORE_ZERO (p1, (src)); + clkcount = 5; + } + + break; + + case 72: +/* PHA, IMPLIED */ + { + register unsigned src = AC; + pc6507++; + + beamadj = BEAMNINE; + PUSH (src); + /* First push item onto stack and then decrement SP. */ + clkcount = 3; + } + + break; + + case 73: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + pc6507 += 2; + + src ^= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src & 0xff); + clkcount = 2; + } + + break; + + case 74: + { + register unsigned src = AC; + pc6507++; + + SET_CARRY (src & 0x01); + src >>= 1; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 75: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = (AC & p1); + pc6507 += 2; + + SET_CARRY (src & 0x01); + src >>= 1; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 76: + { + register p2 = load_abs_addr (); + register unsigned src = p2; + pc6507 += 3; + + + pc6507 = (src); + clkcount = 3; + } + + break; + + case 77: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + src ^= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src & 0xff); + clkcount = 4; + } + + break; + + case 78: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + SET_CARRY (src & 0x01); + src >>= 1; + + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2, (src)); + clkcount = 6; + } + + break; + + case 79: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + /* src = lsr(src); AC = eor(src); */ + + SET_CARRY (src & 0x01); /* LSR+EOR */ + src >>= 1; + src ^= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + + STORE (p2, (src)); + clkcount = 6; + } + + break; + + case 80: +/* BVC, RELATIVE */ + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + register BYTE hb; + pc6507 += 2; + /* Branch if overflow flag is clear. */ + if (!IF_OVERFLOW ()) + { + hb = UPPER (pc6507); + pc6507 = REL_ADDR (pc6507, src); + if (brtest (hb)) + /* Same page */ + clkcount = 3; + else + /* Different page */ + clkcount = 4; + } + else + clkcount = 2; + } + + break; + + case 81: +/* EOR, INDIRECT_Y */ + { + register p1 = LOAD (pc6507 + 1); + register p2 = LOAD_ZERO_ADDR (p1); + register unsigned src = LOAD (p2 + YR); + pc6507 += 2; + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 6; + else + /* Same page */ + clkcount = 5; + + src ^= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src & 0xff); + } + + break; + + case 82: + { + pc6507++; // KILL Instruction + /* No such opcode. */ + //(void) printf ("Illegal instruction.\n"); + //verflg = 1; + //--pc6507; + //show(); + //mon (pc6507); + } + + break; + + case 83: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1) + YR); + pc6507 += 2; + + /* src = lsr(src); AC = eor(src); */ + + SET_CARRY (src & 0x01); /* LSR+EOR */ + src >>= 1; + src ^= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + + STORE (LOAD_ZERO_ADDR (p1) + YR, (src)); + clkcount = 8; + } + + break; + + case 84: + { + pc6507 += 2; + + clkcount = 4; + } + + break; + + case 85: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + src ^= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src & 0xff); + clkcount = 4; + } + + break; + + case 86: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + SET_CARRY (src & 0x01); + src >>= 1; + + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1 + XR, (src)); + clkcount = 6; + } + + break; + + case 87: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + /* src = lsr(src); AC = eor(src); */ + + SET_CARRY (src & 0x01); /* LSR+EOR */ + src >>= 1; + src ^= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + + STORE_ZERO (p1 + XR, (src)); + clkcount = 6; + } + + break; + + case 88: + { + pc6507++; + + + SET_INTERRUPT ((0)); + clkcount = 2; + } + + break; + + case 89: +/* EOR, ABSOLUTE_Y */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + pc6507 += 3; + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + src ^= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src & 0xff); + } + + break; + + case 90: + { + pc6507++; + + clkcount = 2; + } + + break; + + case 91: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + pc6507 += 3; + + /* src = lsr(src); AC = eor(src); */ + + SET_CARRY (src & 0x01); /* LSR+EOR */ + src >>= 1; + src ^= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + + STORE (p2 + YR, (src)); + clkcount = 7; + } + + break; + + case 92: + { + pc6507 += 3; + + clkcount = 4; + } + + break; + + case 93: +/* EOR, ABSOLUTE_X */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + if (pagetest (p2, XR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + src ^= AC; + SET_SIGN (src); + SET_ZERO (src); + + AC = (src & 0xff); + } + + break; + + case 94: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + + SET_CARRY (src & 0x01); + src >>= 1; + + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2 + XR, (src)); + clkcount = 7; + } + + break; + + case 95: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + + /* src = lsr(src); AC = eor(src); */ + + SET_CARRY (src & 0x01); /* LSR+EOR */ + src >>= 1; + src ^= AC; + src &= 0xff; + SET_SIGN (src); + SET_ZERO (src); + + + STORE (p2 + XR, (src)); + clkcount = 7; + } + + break; + + case 96: + { + register unsigned src; + pc6507++; + /* Return from subroutine. */ + src = PULL (); + src += ((PULL ()) << 8) + 1; /* Load return address from stack and add 1. */ + + pc6507 = (src); + clkcount = 6; + } + + break; + + case 97: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + register unsigned int temp = src + AC + (IF_CARRY ()? 1 : 0); + pc6507 += 2; + + + SET_ZERO (temp & 0xff); /* This is not valid in decimal mode */ + + /* + * In decimal mode this is "correct" but not exact emulation. However, + * the probability of different result when using undefined BCD codes is + * less than 6% + * Sign and Overflow are set between BCD fixup of the two digits -MSM + */ + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (src & 0xf) + (IF_CARRY ()? 1 : 0)) > 9) + temp += 6; + + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + + if (temp > 0x99) + temp += 96; + + SET_CARRY (temp > 0x99); + } + else + { + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + SET_CARRY (temp > 0xff); + } + + AC = ((BYTE) temp); + clkcount = 6; + } + + break; + + case 98: + { + pc6507++; // KILL Instruction + /* No such opcode. */ + //(void) printf ("Illegal instruction.\n"); + //verflg = 1; + //--pc6507; + //show(); + //mon (pc6507); + } + + break; + + case 99: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + register unsigned int temp; + pc6507 += 2; + + + /* src = ror(src); AC = adc(src); + * the real operation discovered by msmakela + * ADC only does the BCD fixup */ + + temp = src >> 1; /* ROR+ADC */ + if (IF_CARRY ()) + temp |= 0x80; + + SET_SIGN (temp); + SET_ZERO (temp); /* Set flags like ROR does */ + + SET_OVERFLOW ((temp ^ src) & 0x40); /* ROR causes this ? */ + + if (IF_DECIMAL ()) + { + if ((src & 0x0f) > 4) /* half of the normal */ + temp = (temp & 0xf0) | ((temp + 6) & 0xf); + if (src > 0x4f) + temp += 96; + + SET_CARRY (src > 0x4f); + } + else + { + SET_CARRY (src & 0x80); /* 8502 behaviour */ + } + + + STORE (LOAD_ZERO_ADDR (p1 + XR), ((BYTE) temp)); + clkcount = 8; + } + + break; + + case 100: + { + pc6507 += 2; + + clkcount = 3; + } + + break; + + case 101: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + register unsigned int temp = src + AC + (IF_CARRY ()? 1 : 0); + pc6507 += 2; + + + SET_ZERO (temp & 0xff); /* This is not valid in decimal mode */ + + /* + * In decimal mode this is "correct" but not exact emulation. However, + * the probability of different result when using undefined BCD codes is + * less than 6% + * Sign and Overflow are set between BCD fixup of the two digits -MSM + */ + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (src & 0xf) + (IF_CARRY ()? 1 : 0)) > 9) + temp += 6; + + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + + if (temp > 0x99) + temp += 96; + + SET_CARRY (temp > 0x99); + } + else + { + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + SET_CARRY (temp > 0xff); + } + + AC = ((BYTE) temp); + clkcount = 3; + } + + break; + + case 102: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + if (IF_CARRY ()) + src |= 0x100; + SET_CARRY (src & 0x01); + src >>= 1; + + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1, (src)); + clkcount = 5; + } + + break; + + case 103: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + register unsigned int temp; + pc6507 += 2; + + + /* src = ror(src); AC = adc(src); + * the real operation discovered by msmakela + * ADC only does the BCD fixup */ + + temp = src >> 1; /* ROR+ADC */ + if (IF_CARRY ()) + temp |= 0x80; + + SET_SIGN (temp); + SET_ZERO (temp); /* Set flags like ROR does */ + + SET_OVERFLOW ((temp ^ src) & 0x40); /* ROR causes this ? */ + + if (IF_DECIMAL ()) + { + if ((src & 0x0f) > 4) /* half of the normal */ + temp = (temp & 0xf0) | ((temp + 6) & 0xf); + if (src > 0x4f) + temp += 96; + + SET_CARRY (src > 0x4f); + } + else + { + SET_CARRY (src & 0x80); /* 8502 behaviour */ + } + + + STORE_ZERO (p1, ((BYTE) temp)); + clkcount = 5; + } + + break; + + case 104: +/* PLA, IMPLIED */ + { + register unsigned src; + pc6507++; + + clkcount = 4; + /* First increment stack pointer and then pull item from stack. */ + src = PULL (); + SET_SIGN (src); /* Change sign and zero flag accordingly. */ + SET_ZERO (src); + + AC = (src); + } + + break; + + case 105: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + register unsigned int temp = src + AC + (IF_CARRY ()? 1 : 0); + pc6507 += 2; + + + SET_ZERO (temp & 0xff); /* This is not valid in decimal mode */ + + /* + * In decimal mode this is "correct" but not exact emulation. However, + * the probability of different result when using undefined BCD codes is + * less than 6% + * Sign and Overflow are set between BCD fixup of the two digits -MSM + */ + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (src & 0xf) + (IF_CARRY ()? 1 : 0)) > 9) + temp += 6; + + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + + if (temp > 0x99) + temp += 96; + + SET_CARRY (temp > 0x99); + } + else + { + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + SET_CARRY (temp > 0xff); + } + + AC = ((BYTE) temp); + clkcount = 2; + } + + break; + + case 106: + { + register unsigned src = AC; + pc6507++; + + if (IF_CARRY ()) + src |= 0x100; + SET_CARRY (src & 0x01); + src >>= 1; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 107: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = (AC & p1); + pc6507 += 2; + + if (IF_CARRY ()) + src |= 0x100; + SET_CARRY (src & 0x01); + src >>= 1; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 108: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD_ADDR (p2); + pc6507 += 3; + + + pc6507 = (src); + clkcount = 5; + } + + break; + + case 109: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + register unsigned int temp = src + AC + (IF_CARRY ()? 1 : 0); + pc6507 += 3; + + + SET_ZERO (temp & 0xff); /* This is not valid in decimal mode */ + + /* + * In decimal mode this is "correct" but not exact emulation. However, + * the probability of different result when using undefined BCD codes is + * less than 6% + * Sign and Overflow are set between BCD fixup of the two digits -MSM + */ + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (src & 0xf) + (IF_CARRY ()? 1 : 0)) > 9) + temp += 6; + + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + + if (temp > 0x99) + temp += 96; + + SET_CARRY (temp > 0x99); + } + else + { + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + SET_CARRY (temp > 0xff); + } + + AC = ((BYTE) temp); + clkcount = 4; + } + + break; + + case 110: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + if (IF_CARRY ()) + src |= 0x100; + SET_CARRY (src & 0x01); + src >>= 1; + + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2, (src)); + clkcount = 6; + } + + break; + + case 111: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + register unsigned int temp; + pc6507 += 3; + + + /* src = ror(src); AC = adc(src); + * the real operation discovered by msmakela + * ADC only does the BCD fixup */ + + temp = src >> 1; /* ROR+ADC */ + if (IF_CARRY ()) + temp |= 0x80; + + SET_SIGN (temp); + SET_ZERO (temp); /* Set flags like ROR does */ + + SET_OVERFLOW ((temp ^ src) & 0x40); /* ROR causes this ? */ + + if (IF_DECIMAL ()) + { + if ((src & 0x0f) > 4) /* half of the normal */ + temp = (temp & 0xf0) | ((temp + 6) & 0xf); + if (src > 0x4f) + temp += 96; + + SET_CARRY (src > 0x4f); + } + else + { + SET_CARRY (src & 0x80); /* 8502 behaviour */ + } + + + STORE (p2, ((BYTE) temp)); + clkcount = 6; + } + + break; + + case 112: +/* BVS, RELATIVE */ + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + register BYTE hb; + pc6507 += 2; + /* Branch if overflow flag is set. */ + if (IF_OVERFLOW ()) + { + hb = UPPER (pc6507); + pc6507 = REL_ADDR (pc6507, src); + if (brtest (hb)) + /* Same page */ + clkcount = 3; + else + /* Different page */ + clkcount = 4; + } + else + clkcount = 2; + } + + break; + + case 113: + { + register p1 = LOAD (pc6507 + 1); + register ADDRESS p2 = LOAD_ZERO_ADDR (p1); + register unsigned src = LOAD (p2 + YR); + register unsigned int temp = src + AC + (IF_CARRY ()? 1 : 0); + pc6507 += 2; + + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 6; + else + /* Same page */ + clkcount = 5; + + SET_ZERO (temp & 0xff); /* This is not valid in decimal mode */ + + /* + * In decimal mode this is "correct" but not exact emulation. However, + * the probability of different result when using undefined BCD codes is + * less than 6% + * Sign and Overflow are set between BCD fixup of the two digits -MSM + */ + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (src & 0xf) + (IF_CARRY ()? 1 : 0)) > 9) + temp += 6; + + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + + if (temp > 0x99) + temp += 96; + + SET_CARRY (temp > 0x99); + } + else + { + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + SET_CARRY (temp > 0xff); + } + + AC = ((BYTE) temp); + } + + break; + + case 114: + { + pc6507++; // KILL Instruction + /* No such opcode. */ + //(void) printf ("Illegal instruction.\n"); + //verflg = 1; + //--pc6507; + //show(); + //mon (pc6507); + } + + break; + + case 115: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1) + YR); + register unsigned int temp; + pc6507 += 2; + + + /* src = ror(src); AC = adc(src); + * the real operation discovered by msmakela + * ADC only does the BCD fixup */ + + temp = src >> 1; /* ROR+ADC */ + if (IF_CARRY ()) + temp |= 0x80; + + SET_SIGN (temp); + SET_ZERO (temp); /* Set flags like ROR does */ + + SET_OVERFLOW ((temp ^ src) & 0x40); /* ROR causes this ? */ + + if (IF_DECIMAL ()) + { + if ((src & 0x0f) > 4) /* half of the normal */ + temp = (temp & 0xf0) | ((temp + 6) & 0xf); + if (src > 0x4f) + temp += 96; + + SET_CARRY (src > 0x4f); + } + else + { + SET_CARRY (src & 0x80); /* 8502 behaviour */ + } + + + STORE (LOAD_ZERO_ADDR (p1) + YR, ((BYTE) temp)); + clkcount = 8; + } + + break; + + case 116: + { + pc6507 += 2; + + clkcount = 4; + } + + break; + + case 117: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + register unsigned int temp = src + AC + (IF_CARRY ()? 1 : 0); + pc6507 += 2; + + + SET_ZERO (temp & 0xff); /* This is not valid in decimal mode */ + + /* + * In decimal mode this is "correct" but not exact emulation. However, + * the probability of different result when using undefined BCD codes is + * less than 6% + * Sign and Overflow are set between BCD fixup of the two digits -MSM + */ + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (src & 0xf) + (IF_CARRY ()? 1 : 0)) > 9) + temp += 6; + + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + + if (temp > 0x99) + temp += 96; + + SET_CARRY (temp > 0x99); + } + else + { + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + SET_CARRY (temp > 0xff); + } + + AC = ((BYTE) temp); + clkcount = 4; + } + + break; + + case 118: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + if (IF_CARRY ()) + src |= 0x100; + SET_CARRY (src & 0x01); + src >>= 1; + + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1 + XR, (src)); + clkcount = 6; + } + + break; + + case 119: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + register unsigned int temp; + pc6507 += 2; + + + /* src = ror(src); AC = adc(src); + * the real operation discovered by msmakela + * ADC only does the BCD fixup */ + + temp = src >> 1; /* ROR+ADC */ + if (IF_CARRY ()) + temp |= 0x80; + + SET_SIGN (temp); + SET_ZERO (temp); /* Set flags like ROR does */ + + SET_OVERFLOW ((temp ^ src) & 0x40); /* ROR causes this ? */ + + if (IF_DECIMAL ()) + { + if ((src & 0x0f) > 4) /* half of the normal */ + temp = (temp & 0xf0) | ((temp + 6) & 0xf); + if (src > 0x4f) + temp += 96; + + SET_CARRY (src > 0x4f); + } + else + { + SET_CARRY (src & 0x80); /* 8502 behaviour */ + } + + + STORE_ZERO (p1 + XR, ((BYTE) temp)); + clkcount = 6; + } + + break; + + case 120: + { + pc6507++; + + + SET_INTERRUPT ((1)); + clkcount = 2; + } + + break; + + case 121: +/* ADC, ABSOLUTE_Y */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + register unsigned int temp = src + AC + (IF_CARRY ()? 1 : 0); + pc6507 += 3; + + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + SET_ZERO (temp & 0xff); /* This is not valid in decimal mode */ + + /* + * In decimal mode this is "correct" but not exact emulation. However, + * the probability of different result when using undefined BCD codes is + * less than 6% + * Sign and Overflow are set between BCD fixup of the two digits -MSM + */ + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (src & 0xf) + (IF_CARRY ()? 1 : 0)) > 9) + temp += 6; + + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + + if (temp > 0x99) + temp += 96; + + SET_CARRY (temp > 0x99); + } + else + { + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + SET_CARRY (temp > 0xff); + } + + AC = ((BYTE) temp); + } + + break; + + case 122: + { + pc6507++; + + clkcount = 2; + } + + break; + + case 123: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + register unsigned int temp; + pc6507 += 3; + + + /* src = ror(src); AC = adc(src); + * the real operation discovered by msmakela + * ADC only does the BCD fixup */ + + temp = src >> 1; /* ROR+ADC */ + if (IF_CARRY ()) + temp |= 0x80; + + SET_SIGN (temp); + SET_ZERO (temp); /* Set flags like ROR does */ + + SET_OVERFLOW ((temp ^ src) & 0x40); /* ROR causes this ? */ + + if (IF_DECIMAL ()) + { + if ((src & 0x0f) > 4) /* half of the normal */ + temp = (temp & 0xf0) | ((temp + 6) & 0xf); + if (src > 0x4f) + temp += 96; + + SET_CARRY (src > 0x4f); + } + else + { + SET_CARRY (src & 0x80); /* 8502 behaviour */ + } + + + STORE (p2 + YR, ((BYTE) temp)); + clkcount = 7; + } + + break; + + case 124: + { + pc6507 += 3; + + clkcount = 4; + } + + break; + + case 125: +/* ADC, ABSOLUTE_X */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + register unsigned int temp = src + AC + (IF_CARRY ()? 1 : 0); + pc6507 += 3; + + if (pagetest (p2, XR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + SET_ZERO (temp & 0xff); /* This is not valid in decimal mode */ + + /* + * In decimal mode this is "correct" but not exact emulation. However, + * the probability of different result when using undefined BCD codes is + * less than 6% + * Sign and Overflow are set between BCD fixup of the two digits -MSM + */ + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (src & 0xf) + (IF_CARRY ()? 1 : 0)) > 9) + temp += 6; + + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + + if (temp > 0x99) + temp += 96; + + SET_CARRY (temp > 0x99); + } + else + { + SET_SIGN (temp); + SET_OVERFLOW (!((AC ^ src) & 0x80) && ((AC ^ temp) & 0x80)); + SET_CARRY (temp > 0xff); + } + + AC = ((BYTE) temp); + } + + break; + + case 126: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + + if (IF_CARRY ()) + src |= 0x100; + SET_CARRY (src & 0x01); + src >>= 1; + + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2 + XR, (src)); + clkcount = 7; + } + + break; + + case 127: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + register unsigned int temp; + pc6507 += 3; + + + /* src = ror(src); AC = adc(src); + * the real operation discovered by msmakela + * ADC only does the BCD fixup */ + + temp = src >> 1; /* ROR+ADC */ + if (IF_CARRY ()) + temp |= 0x80; + + SET_SIGN (temp); + SET_ZERO (temp); /* Set flags like ROR does */ + + SET_OVERFLOW ((temp ^ src) & 0x40); /* ROR causes this ? */ + + if (IF_DECIMAL ()) + { + if ((src & 0x0f) > 4) /* half of the normal */ + temp = (temp & 0xf0) | ((temp + 6) & 0xf); + if (src > 0x4f) + temp += 96; + + SET_CARRY (src > 0x4f); + } + else + { + SET_CARRY (src & 0x80); /* 8502 behaviour */ + } + + + STORE (p2 + XR, ((BYTE) temp)); + clkcount = 7; + } + + break; + + case 128: + { + pc6507 += 2; + + clkcount = 2; + } + + break; + + case 129: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = AC; + pc6507 += 2; + + + STORE (LOAD_ZERO_ADDR (p1 + XR), (src)); + clkcount = 6; + } + + break; + + case 130: + { + pc6507 += 2; + + clkcount = 2; + } + + break; + + case 131: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = (AC & XR); + pc6507 += 2; + + + STORE (LOAD_ZERO_ADDR (p1 + XR), (src)); + clkcount = 6; + } + + break; + + case 132: +/* STY, ZERO_PAGE */ + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = YR; + + clkcount = 3; + pc6507 += 2; + + beamadj = BEAMNINE; + STORE_ZERO (p1, (src)); + } + + break; + + case 133: +/* STA, ZERO_PAGE */ + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = AC; + + clkcount = 3; + pc6507 += 2; + + beamadj = BEAMNINE; + STORE_ZERO (p1, (src)); + } + + break; + + case 134: +/* STX, ZERO_PAGE */ + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = XR; + + clkcount = 3; + pc6507 += 2; + + beamadj = BEAMNINE; + STORE_ZERO (p1, (src)); + } + + break; + + case 135: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = (AC & XR); + pc6507 += 2; + + + STORE_ZERO (p1, (src)); + clkcount = 3; + } + + break; + + case 136: + { + register unsigned src = YR; + pc6507++; + + src = (src - 1) & 0xff; + SET_SIGN (src); + SET_ZERO (src); + + YR = (src); + clkcount = 2; + } + + break; + + case 137: + { + pc6507 += 2; + + clkcount = 2; + } + + break; + + case 138: + { + register unsigned src = XR; + pc6507++; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 139: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = ((AC | 0xee) & XR & p1); + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 140: +/* STY, ABSOLUTE */ + { + register p2 = load_abs_addr (); + register unsigned src = YR; + pc6507 += 3; + + beamadj = BEAMTWELVE; + STORE (p2, (src)); + clkcount = 4; + } + + break; + + case 141: +/* STA, ABSOLUTE */ + { + register p2 = load_abs_addr (); + register unsigned src = AC; + pc6507 += 3; + + beamadj = BEAMTWELVE; + STORE (p2, (src)); + clkcount = 4; + } + + break; + + case 142: +/* STA, ABSOLUTE */ + { + register p2 = load_abs_addr (); + register unsigned src = XR; + pc6507 += 3; + + beamadj = BEAMTWELVE; + STORE (p2, (src)); + clkcount = 4; + } + + break; + + case 143: +/* STX, ABSOLUTE */ + { + register p2 = load_abs_addr (); + register unsigned src = (AC & XR); + pc6507 += 3; + + beamadj = BEAMTWELVE; + STORE (p2, (src)); + clkcount = 4; + } + + break; + + case 144: +/* BCC, RELATIVE */ + { + register p1 = LOAD (pc6507 + 1); + register hb; + register unsigned src = p1; + pc6507 += 2; + /* Branch if carry flag is clear. */ + if (!IF_CARRY ()) + { + hb = UPPER (pc6507); + pc6507 = REL_ADDR (pc6507, src); + if (brtest (hb)) + /* Same page */ + clkcount = 3; + else + /* Different page */ + clkcount = 4; + } + else + clkcount = 2; + } + + break; + + case 145: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = AC; + pc6507 += 2; + + + STORE (LOAD_ZERO_ADDR (p1) + YR, (src)); + clkcount = 6; + } + + break; + + case 146: + { + pc6507++; // KILL Instruction + /* No such opcode. */ + //(void) printf ("Illegal instruction.\n"); + //verflg = 1; + //--pc6507; + //show(); + //mon (pc6507); + } + + break; + + case 147: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = (AC & XR); + pc6507 += 2; + + + u_stoshr (src, LOAD_ZERO_ADDR (p1), YR); + clkcount = 6; + } + + break; + + case 148: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = YR; + clkcount = 4; + pc6507 += 2; + + beamadj = BEAMTWELVE; + STORE_ZERO (p1 + XR, (src)); + } + + break; + + case 149: +/* STA, ZERO_PAGE_X */ + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = AC; + clkcount = 4; + pc6507 += 2; + + beamadj = BEAMTWELVE; + STORE_ZERO (p1 + XR, (src)); + } + + break; + + case 150: +/* STX, ZERO_PAGE_Y */ + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = XR; + clkcount = 4; + pc6507 += 2; + + beamadj = BEAMTWELVE; + STORE_ZERO (p1 + YR, (src)); + } + + break; + + case 151: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = (AC & XR); + pc6507 += 2; + + + STORE_ZERO (p1 + YR, (src)); + clkcount = 4; + } + + break; + + case 152: + { + register unsigned src = YR; + pc6507++; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 153: + { + register p2 = load_abs_addr (); + register unsigned src = AC; + pc6507 += 3; + + + STORE (p2 + YR, (src)); + clkcount = 5; + } + + break; + + case 154: + { + register unsigned src = XR; + pc6507++; + + + SP = (src); + clkcount = 2; + } + + break; + + case 155: + { + register unsigned src = (AC & XR); + pc6507 += 3; + + + SP = src; /* SHS */ ; + clkcount = 5; + } + + break; + + case 156: + { + register p2 = load_abs_addr (); + register unsigned src = YR; + pc6507 += 3; + + + u_stoshr (src, p2, XR); + clkcount = 5; + } + + break; + + case 157: + { + register p2 = load_abs_addr (); + register unsigned src = AC; + pc6507 += 3; + + + STORE (p2 + XR, (src)); + clkcount = 5; + } + + break; + + case 158: + { + register p2 = load_abs_addr (); + register unsigned src = XR; + pc6507 += 3; + + + u_stoshr (src, p2, YR); + clkcount = 5; + } + + break; + + case 159: + { + register p2 = load_abs_addr (); + register unsigned src = (AC & XR); + pc6507 += 3; + + + u_stoshr (src, p2, YR); + clkcount = 5; + } + + break; + + case 160: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + YR = (src); + clkcount = 2; + } + + break; + + case 161: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 6; + } + + break; + + case 162: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + XR = (src); + clkcount = 2; + } + + break; + + case 163: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + AC = XR = (src); + clkcount = 6; + } + + break; + + case 164: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + YR = (src); + clkcount = 3; + } + + break; + + case 165: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 3; + } + + break; + + case 166: +/* LDX, ZERO_PAGE */ + { + register p1 = LOADEXEC (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + + clkcount = 3; + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + XR = (src); + } + + break; + + case 167: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + AC = XR = (src); + clkcount = 3; + } + + break; + + case 168: + { + register unsigned src = AC; + pc6507++; + + SET_SIGN (src); + SET_ZERO (src); + + YR = (src); + clkcount = 2; + } + + break; + + case 169: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 2; + } + + break; + + case 170: + { + register unsigned src = AC; + pc6507++; + + SET_SIGN (src); + SET_ZERO (src); + + XR = (src); + clkcount = 2; + } + + break; + + case 171: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = (AC & p1); + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + AC = XR = (src); + clkcount = 2; + } + + break; + + case 172: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + SET_SIGN (src); + SET_ZERO (src); + + YR = (src); + clkcount = 4; + } + + break; + + case 173: /* LDA absolute */ + { + register p2 = load_abs_addr (); + register unsigned src; + clkcount = 4; + src = LOAD (p2); + pc6507 += 3; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + } + + break; + + case 174: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + SET_SIGN (src); + SET_ZERO (src); + + XR = (src); + clkcount = 4; + } + + break; + + case 175: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + SET_SIGN (src); + SET_ZERO (src); + + AC = XR = (src); + clkcount = 4; + } + + break; + + case 176: +/* BCS, RELATIVE */ + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + register BYTE hb; + pc6507 += 2; + /* Branch if carry flag is set. */ + if (IF_CARRY ()) + { + hb = UPPER (pc6507); + pc6507 = REL_ADDR (pc6507, src); + if (brtest (hb)) + /* Same page */ + clkcount = 3; + else + /* Different page */ + clkcount = 4; + } + else + clkcount = 2; + } + + break; + + case 177: +/* LDA, INDIRECT_Y */ + { + register p1 = LOAD (pc6507 + 1); + register ADDRESS p2 = LOAD_ZERO_ADDR (p1); + register unsigned src = LOAD (p2 + YR); + pc6507 += 2; + + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 6; + else + /* Same page */ + clkcount = 5; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + } + + break; + + case 178: + { + pc6507++; // KILL Instruction + /* No such opcode. */ + //(void) printf ("Illegal instruction.\n"); + //verflg = 1; + //--pc6507; + //show(); + //mon (pc6507); + } + + break; + + case 179: +/* LAX, INDIRECT_Y */ + { + register p1 = LOAD (pc6507 + 1); + register ADDRESS p2 = LOAD_ZERO_ADDR (p1); + register unsigned src = LOAD (p2 + YR); + pc6507 += 2; + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 6; + else + /* Same page */ + clkcount = 5; + + SET_SIGN (src); + SET_ZERO (src); + + AC = XR = (src); + } + + break; + + case 180: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + YR = (src); + clkcount = 4; + } + + break; + + case 181: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + clkcount = 4; + } + + break; + + case 182: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + YR); + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + XR = (src); + clkcount = 4; + } + + break; + + case 183: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + YR); + pc6507 += 2; + + SET_SIGN (src); + SET_ZERO (src); + + AC = XR = (src); + clkcount = 4; + } + + break; + + case 184: + { + pc6507++; + + + SET_OVERFLOW ((0)); + clkcount = 2; + } + + break; + + case 185: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + pc6507 += 3; + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + } + + break; + + case 186: + { + register unsigned src = SP; + pc6507++; + + SET_SIGN (src); + SET_ZERO (src); + + XR = (src); + clkcount = 2; + } + + break; + + case 187: + { + register p2 = load_abs_addr (); + register unsigned src = (SP & LOAD (p2 + YR)); + pc6507 += 3; + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + SET_SIGN (src); + SET_ZERO (src); + + AC = XR = SP = (src); + } + + break; + + case 188: +/* LDY, ABSOLUTE_X */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + if (pagetest (p2, XR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + + SET_SIGN (src); + SET_ZERO (src); + + YR = (src); + } + + break; + + case 189: +/* LDA, ABSOLUTE_X */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + + if (pagetest (p2, XR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + SET_SIGN (src); + SET_ZERO (src); + + AC = (src); + } + + break; + + case 190: +/* LDX, ABSOLUTE_Y */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + pc6507 += 3; + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + SET_SIGN (src); + SET_ZERO (src); + + XR = (src); + } + + break; + + case 191: +/* LAX, ABSOLUTE_Y */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + pc6507 += 3; + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + SET_SIGN (src); + SET_ZERO (src); + + AC = XR = (src); + } + + break; + + case 192: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + pc6507 += 2; + + src = YR - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + clkcount = 2; + } + + break; + + case 193: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + pc6507 += 2; + + src = AC - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + clkcount = 6; + } + + break; + + case 194: + { + pc6507 += 2; + + clkcount = 2; + } + + break; + + case 195: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + pc6507 += 2; + + /* cmp(--src & 0xff)); */ + + src = (src - 1) & 0xff; /* DEC+CMP */ + SET_CARRY (AC >= src); + SET_SIGN (AC - src); + SET_ZERO (AC != src); + + STORE (LOAD_ZERO_ADDR (p1 + XR), (src)); + clkcount = 8; + } + + break; + + case 196: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + src = YR - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + clkcount = 3; + } + + break; + + case 197: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + src = AC - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + clkcount = 3; + } + + break; + + case 198: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + src = (src - 1) & 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1, (src)); + clkcount = 5; + } + + break; + + case 199: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + /* cmp(--src & 0xff)); */ + + src = (src - 1) & 0xff; /* DEC+CMP */ + SET_CARRY (AC >= src); + SET_SIGN (AC - src); + SET_ZERO (AC != src); + + STORE_ZERO (p1, (src)); + clkcount = 5; + } + + break; + + case 200: + { + register unsigned src = YR; + pc6507++; + + src = (src + 1) & 0xff; + SET_SIGN (src); + SET_ZERO (src); + + YR = (src); + clkcount = 2; + } + + break; + + case 201: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + pc6507 += 2; + + src = AC - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + clkcount = 2; + } + + break; + + case 202: + { + register unsigned src = XR; + pc6507++; + + src = (src - 1) & 0xff; + SET_SIGN (src); + SET_ZERO (src); + + XR = (src); + clkcount = 2; + } + + break; + + case 203: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + pc6507 += 2; + + src = (AC & XR) - src; /* Carry is ignored (CMP) */ + /* Overflow flag may be affected */ + SET_CARRY (src < 0x100); + + src &= 0xff; /* No decimal mode */ + SET_SIGN (src); + SET_ZERO (src); + + XR = (src); + clkcount = 2; + } + + break; + + case 204: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + src = YR - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + clkcount = 4; + } + + break; + + case 205: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + src = AC - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + clkcount = 4; + } + + break; + + case 206: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + src = (src - 1) & 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2, (src)); + clkcount = 6; + } + + break; + + case 207: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + /* cmp(--src & 0xff)); */ + + src = (src - 1) & 0xff; /* DEC+CMP */ + SET_CARRY (AC >= src); + SET_SIGN (AC - src); + SET_ZERO (AC != src); + + STORE (p2, (src)); + clkcount = 6; + } + + break; + + case 208: +/* BNE, RELATIVE */ + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + register BYTE hb; + pc6507 += 2; + /* Branch if zero flag is clear. */ + if (!IF_ZERO ()) + { + hb = UPPER (pc6507); + pc6507 = REL_ADDR (pc6507, src); + if (brtest (hb)) + /* Same page */ + clkcount = 3; + else + /* Different page */ + clkcount = 4; + } + else + clkcount = 2; + } + + break; + + case 209: +/* CMP, INDIRECT_Y */ + { + register p1 = LOAD (pc6507 + 1); + register ADDRESS p2 = LOAD_ZERO_ADDR (p1); + register unsigned src = LOAD (p2 + YR); + pc6507 += 2; + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 6; + else + /* Same page */ + clkcount = 5; + + src = AC - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + } + + break; + + case 210: + { + pc6507++; // KILL Instruction + /* No such opcode. */ + //(void) printf ("Illegal instruction.\n"); + //verflg = 1; + //--pc6507; + //show(); + ////mon (pc6507); + } + + break; + + case 211: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1) + YR); + pc6507 += 2; + + /* cmp(--src & 0xff)); */ + + src = (src - 1) & 0xff; /* DEC+CMP */ + SET_CARRY (AC >= src); + SET_SIGN (AC - src); + SET_ZERO (AC != src); + + STORE (LOAD_ZERO_ADDR (p1) + YR, (src)); + clkcount = 8; + } + + break; + + case 212: + { + pc6507 += 2; + + clkcount = 4; + } + + break; + + case 213: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + src = AC - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + clkcount = 4; + } + + break; + + case 214: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + src = (src - 1) & 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1 + XR, (src)); + clkcount = 6; + } + + break; + + case 215: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + /* cmp(--src & 0xff)); */ + + src = (src - 1) & 0xff; /* DEC+CMP */ + SET_CARRY (AC >= src); + SET_SIGN (AC - src); + SET_ZERO (AC != src); + + STORE_ZERO (p1 + XR, (src)); + clkcount = 6; + } + + break; + + case 216: + { + pc6507++; + + + SET_DECIMAL ((0)); + clkcount = 2; + } + + break; + + case 217: +/* CMP, ABSOLUTE_Y */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + pc6507 += 3; + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + src = AC - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + } + + break; + + case 218: + { + pc6507++; + + clkcount = 2; + } + + break; + + case 219: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + pc6507 += 3; + + /* cmp(--src & 0xff)); */ + + src = (src - 1) & 0xff; /* DEC+CMP */ + SET_CARRY (AC >= src); + SET_SIGN (AC - src); + SET_ZERO (AC != src); + + STORE (p2 + YR, (src)); + clkcount = 7; + } + + break; + + case 220: + { + pc6507 += 3; + + clkcount = 4; + } + + break; + + case 221: +/* CMP, ABSOLUTE_X */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + if (pagetest (p2, XR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + src = AC - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + } + + break; + + case 222: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + + src = (src - 1) & 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2 + XR, (src)); + clkcount = 7; + } + + break; + + case 223: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + + /* cmp(--src & 0xff)); */ + + src = (src - 1) & 0xff; /* DEC+CMP */ + SET_CARRY (AC >= src); + SET_SIGN (AC - src); + SET_ZERO (AC != src); + + STORE (p2 + XR, (src)); + clkcount = 7; + } + + break; + + case 224: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + pc6507 += 2; + + src = XR - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + clkcount = 2; + } + + break; + + case 225: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + register unsigned int temp = AC - src - (IF_CARRY ()? 0 : 1); + pc6507 += 2; + + /* + * SBC is not exact either. It has 6% different results too. + */ + + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = (temp & 0xff); + clkcount = 6; + } + + break; + + case 226: + { + pc6507 += 2; + + clkcount = 2; + } + + break; + + case 227: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1 + XR)); + register unsigned int temp; + pc6507 += 2; + + + /* src = ++src & 0xff; AC = sbc(src); */ + + src = ((src + 1) & 0xff); /* INC+SBC */ + + temp = AC - src - (IF_CARRY ()? 0 : 1); + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = temp; + /* src saved */ + STORE (LOAD_ZERO_ADDR (p1 + XR), (src)); + clkcount = 8; + } + + break; + + case 228: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + src = XR - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + clkcount = 3; + } + + break; + + case 229: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + register unsigned int temp = AC - src - (IF_CARRY ()? 0 : 1); + pc6507 += 2; + + /* + * SBC is not exact either. It has 6% different results too. + */ + + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = (temp & 0xff); + clkcount = 3; + } + + break; + + case 230: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + pc6507 += 2; + + src = (src + 1) & 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1, (src)); + clkcount = 5; + } + + break; + + case 231: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1); + register unsigned int temp; + pc6507 += 2; + + + /* src = ++src & 0xff; AC = sbc(src); */ + + src = ((src + 1) & 0xff); /* INC+SBC */ + + temp = AC - src - (IF_CARRY ()? 0 : 1); + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = temp; + /* src saved */ + STORE_ZERO (p1, (src)); + clkcount = 5; + } + + break; + + case 232: + { + register unsigned src = XR; + pc6507++; + + src = (src + 1) & 0xff; + SET_SIGN (src); + SET_ZERO (src); + + XR = (src); + clkcount = 2; + } + + break; + + case 233: +/* SBC, IMMEDIATE */ + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + register unsigned int temp = AC - src - (IF_CARRY ()? 0 : 1); + pc6507 += 2; + + /* + * SBC is not exact either. It has 6% different results too. + */ + + if (!IF_DECIMAL ()) + { + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + SET_CARRY (temp < 0x100); + AC = (temp & 0xff); + + } + else + { + int bcd1, bcd2; + BYTE old_A; + int C = IF_CARRY ()? 1 : 0; + + old_A = AC; + + bcd1 = fromBCD (AC); + bcd2 = fromBCD (src); + + bcd1 = bcd1 - bcd2 - !C; + + if (bcd1 < 0) + bcd1 = 100 - (-bcd1); + AC = toBCD (bcd1); + + SET_CARRY ((old_A < (src + !C)) ? 0 : 1); + SET_OVERFLOW ((old_A ^ AC) & 0x80); + } + clkcount = 2; + } + + break; + + case 234: + { + pc6507++; + + clkcount = 2; + } + + break; + + case 235: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + register unsigned int temp = AC - src - (IF_CARRY ()? 0 : 1); + pc6507 += 2; + + /* + * SBC is not exact either. It has 6% different results too. + */ + + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = (temp & 0xff); + clkcount = 2; + } + + break; + + case 236: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + src = XR - src; + SET_CARRY (src < 0x100); + SET_SIGN (src); + SET_ZERO (src &= 0xff); + clkcount = 4; + } + + break; + + case 237: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + register unsigned int temp = AC - src - (IF_CARRY ()? 0 : 1); + pc6507 += 3; + + /* + * SBC is not exact either. It has 6% different results too. + */ + + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = (temp & 0xff); + clkcount = 4; + } + + break; + + case 238: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + pc6507 += 3; + + src = (src + 1) & 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2, (src)); + clkcount = 6; + } + + break; + + case 239: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2); + register unsigned int temp; + pc6507 += 3; + + + /* src = ++src & 0xff; AC = sbc(src); */ + + src = ((src + 1) & 0xff); /* INC+SBC */ + + temp = AC - src - (IF_CARRY ()? 0 : 1); + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = temp; + /* src saved */ + STORE (p2, (src)); + clkcount = 6; + } + + break; + + case 240: +/* BEQ, RELATIVE */ + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = p1; + register BYTE hb; + pc6507 += 2; + /* Branch if zero flag is set. */ + if (IF_ZERO ()) + { + hb = UPPER (pc6507); + pc6507 = REL_ADDR (pc6507, src); + if (brtest (hb)) + /* Same page */ + clkcount = 3; + else + /* Different page */ + clkcount = 4; + } + else + clkcount = 2; + } + + break; + + case 241: + { + register p1 = LOAD (pc6507 + 1); + register ADDRESS p2 = LOAD_ZERO_ADDR (p1); + register unsigned src = LOAD (p2 + YR); + register unsigned int temp = AC - src - (IF_CARRY ()? 0 : 1); + pc6507 += 2; + + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 6; + else + /* Same page */ + clkcount = 5; + + /* + * SBC is not exact either. It has 6% different results too. + */ + + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = (temp & 0xff); + } + + break; + + case 242: + { + pc6507++; // KILL Instruction + /* No such opcode. */ + //(void) printf ("Illegal instruction.\n"); + //verflg = 1; + //--pc6507; + //show(); + //mon (pc6507); + } + + break; + + case 243: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD (LOAD_ZERO_ADDR (p1) + YR); + register unsigned int temp; + pc6507 += 2; + + + /* src = ++src & 0xff; AC = sbc(src); */ + + src = ((src + 1) & 0xff); /* INC+SBC */ + + temp = AC - src - (IF_CARRY ()? 0 : 1); + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = temp; + /* src saved */ + STORE (LOAD_ZERO_ADDR (p1) + YR, (src)); + clkcount = 8; + } + + break; + + case 244: + { + pc6507 += 2; + + clkcount = 4; + } + + break; + + case 245: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + register unsigned int temp = AC - src - (IF_CARRY ()? 0 : 1); + pc6507 += 2; + + /* + * SBC is not exact either. It has 6% different results too. + */ + + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = (temp & 0xff); + clkcount = 4; + } + + break; + + case 246: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + pc6507 += 2; + + src = (src + 1) & 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE_ZERO (p1 + XR, (src)); + clkcount = 6; + } + + break; + + case 247: + { + register p1 = LOAD (pc6507 + 1); + register unsigned src = LOAD_ZERO (p1 + XR); + register unsigned int temp; + pc6507 += 2; + + + /* src = ++src & 0xff; AC = sbc(src); */ + + src = ((src + 1) & 0xff); /* INC+SBC */ + + temp = AC - src - (IF_CARRY ()? 0 : 1); + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = temp; + /* src saved */ + STORE_ZERO (p1 + XR, (src)); + clkcount = 6; + } + + break; + + case 248: +/* SED, IMPLIED */ + { + pc6507++; + + SET_DECIMAL ((1)); + clkcount = 2; + } + + break; + + case 249: +/* SBC, ABSOLUTE_Y */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + register unsigned int temp = AC - src - (IF_CARRY ()? 0 : 1); + pc6507 += 3; + + if (pagetest (p2, YR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + /* + * SBC is not exact either. It has 6% different results too. + */ + + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = (temp & 0xff); + } + + break; + + case 250: + { + pc6507++; + + clkcount = 2; + } + + break; + + case 251: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + YR); + register unsigned int temp; + pc6507 += 3; + + + /* src = ++src & 0xff; AC = sbc(src); */ + + src = ((src + 1) & 0xff); /* INC+SBC */ + + temp = AC - src - (IF_CARRY ()? 0 : 1); + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = temp; + /* src saved */ + STORE (p2 + YR, (src)); + clkcount = 7; + } + + break; + + case 252: + { + pc6507 += 3; + + clkcount = 4; + } + + break; + + case 253: +/* SBC, ABSOLUTE_X */ + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + register unsigned int temp = AC - src - (IF_CARRY ()? 0 : 1); + pc6507 += 3; + + if (pagetest (p2, XR)) + /* Over page */ + clkcount = 5; + else + /* Same page */ + clkcount = 4; + + /* + * SBC is not exact either. It has 6% different results too. + */ + + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = (temp & 0xff); + } + + break; + + case 254: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + pc6507 += 3; + + src = (src + 1) & 0xff; + SET_SIGN (src); + SET_ZERO (src); + + STORE (p2 + XR, (src)); + clkcount = 7; + } + + break; + + case 255: + { + register p2 = load_abs_addr (); + register unsigned src = LOAD (p2 + XR); + register unsigned int temp; + pc6507 += 3; + + + /* src = ++src & 0xff; AC = sbc(src); */ + + src = ((src + 1) & 0xff); /* INC+SBC */ + + temp = AC - src - (IF_CARRY ()? 0 : 1); + + SET_SIGN (temp); + SET_ZERO (temp & 0xff); /* Sign and Zero are invalid in decimal mode */ + + SET_OVERFLOW (((AC ^ temp) & 0x80) && ((AC ^ src) & 0x80)); + + if (IF_DECIMAL ()) + { + if (((AC & 0xf) + (IF_CARRY ()? 1 : 0)) < (src & 0xf)) + temp -= 6; + if (temp > 0x99) + temp -= 0x60; + } + SET_CARRY (temp < 0x100); + + AC = temp; + /* src saved */ + STORE (p2 + XR, (src)); + clkcount = 7; + } + + break; + + + + } /* switch */ + + clk += clkcount; + + } /* while(!pausing) */ + + +bThreadRunning = 0; +pausing = 0; + +} /* mainloop */ diff --git a/MCUME_pico/picovcs/Display.c b/MCUME_pico/picovcs/Display.c new file mode 100644 index 0000000..fa5a026 --- /dev/null +++ b/MCUME_pico/picovcs/Display.c @@ -0,0 +1,108 @@ +/***************************************************************************** + + This file is part of Virtual VCS, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + Modified 1996 by Daniel Boris + Modified 2001 by Stuart Russell + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for Details. + + $Id: display.c,v 1.23 1996/03/21 15:52:38 alex Exp $ +******************************************************************************/ +//This file was modified from its original version for use in PocketVCS +// by Stuart Russell + +/* + Display handling code. +*/ + +#include +#include +#include "types.h" +#include "btypes.h" +#include "vmachine.h" +#include "address.h" +#include "colours.h" +#include "resource.h" +#include "display.h" +#include "emuapi.h" + + +int vwidth,vheight,theight; +uint8 * VBuf=0; //[(160)*192+8]; +char coltable[256]; + +/* The refresh skipping counter */ +int tv_counter=0; + +/* Set up the colormap - original is 24bit! +//------------------------------------------------------------------------------------ +// we use a 16 bit color palette (rrrrrggggggbbbbb). This should change based +// on the PDA device (E-125). +//------------------------------------------------------------------------------------*/ +static void create_cmap(void) +{ + int i; + unsigned char red,green,blue; + + /* Initialise parts of the colors array */ + for(i=0; i< 256; i++) + { + red = (unsigned char)((colortable[i] & 0xff0000) >> 16); + green = (unsigned char)((colortable[i] & 0x00ff00) >> 8); + blue = (unsigned char)(colortable[i] & 0x0000ff); + emu_SetPaletteEntry(red,green,blue,i); + } +} + + +/* Create the main application shell */ +static void create_window() +{ + int i; + + theight = tv_height; + vheight = tv_height; + vwidth = tv_width; + create_cmap(); + for(i=0; i<256; i++) coltable[i]=1; + coltable[0]=coltable[1]=coltable[2]=coltable[4]=0; + coltable[8]=coltable[16]=coltable[32]=coltable[64]=0; + coltable[128]=0; +} + + +/* The main initialiser for the X stuff */ +int tv_on() +{ + /* Get the basic colors */ + unsigned long m; + + if (VBuf == 0) VBuf = (uint8 *)emu_Malloc((160)*192+8); + + create_window(); + + // if pointer size is 4 bytes, make sure the + // buffer is aligned on an 8 byte boundary. + if(sizeof(uint8*)==4) + { + m=(unsigned long)VBuf; + m+=8; + m&=0xFFFFFFF8; + VBuf=(uint8*)m; + } + memset(VBuf,128,160*192); + return(1); +} + + + + + + + diff --git a/MCUME_pico/picovcs/Exmacro.c b/MCUME_pico/picovcs/Exmacro.c new file mode 100644 index 0000000..23566bf --- /dev/null +++ b/MCUME_pico/picovcs/Exmacro.c @@ -0,0 +1,69 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for Details. + + $Id: exmacro.c,v 1.6 1996/08/26 15:04:20 ahornby Exp $ +******************************************************************************/ +//This file was modified from its original version for use in PocketVCS +// by Stuart Russell + +/* Things that used to be macros, but are now __inline functions. + Done for ease of debugging */ + +#include "types.h" +#include "extern.h" +#include "macro.h" +#include "memory.h" +#include "exmacro.h" + +/* Loads an absolute address uising the quicker load mechanism */ +__inline ADDRESS +load_abs_addr (void) +{ + return (LOADEXEC (pc6507 + 1) | (LOADEXEC (pc6507 + 2) << 8)); +} + +/* Used in variable cycle time indexed addressing */ +/* a: address to be incremented */ +/* b: increment value */ +/* returns: TRUE if an address increment will cross a page boundary */ +__inline int +pagetest (ADDRESS a, BYTE b) +{ + return (LOWER (a) + b > 0xff); +} + +/* Used in variable cycle time branches */ +/* a: high byte of new address */ +/* returns: TRUE if a branch is to the same page */ +__inline int +brtest (BYTE a) +{ + return (UPPER (pc6507) == (a)); +} + +/* Convert from binary to BCD (Binary Coded Decimal) */ +/* a: binary value */ +/* returns: BCD value */ +__inline int +toBCD (int a) +{ + return (((a % 100) / 10) << 4) | (a % 10); +} + +/* Convert from BCD to binary */ +/* a: BCD value */ +/* returns: binary value */ +__inline int +fromBCD (int a) +{ + return ((a >> 4) & 0xf) * 10 + (a & 0xf); +} diff --git a/MCUME_pico/picovcs/Keyboard.c b/MCUME_pico/picovcs/Keyboard.c new file mode 100644 index 0000000..590c337 --- /dev/null +++ b/MCUME_pico/picovcs/Keyboard.c @@ -0,0 +1,115 @@ +/***************************************************************************** + + This file is part of Virtual VCS, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Daniel Boris. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for Details. + +******************************************************************************/ +/* + This module has been completely re-written since X2600 + This has been hacked for the E-125 by Stuart Russell +*/ + +#include +#include +#include +#include "keyboard.h" +#include "types.h" +#include "address.h" +#include "vmachine.h" +#include "extern.h" +#include "memory.h" +#include "display.h" +#include "resource.h" + +#include "emuapi.h" + +// this returns a byte from the key state buffer. +// example: KEY(0) will be expanded to: keys[SCANCODE_0] +//#define KEY(__a) keys[SCANCODE_##__a] + +extern char *KeyboardGetstate(void); +extern int pausing; +extern int nOptions_Color; +extern int nOptions_P1Diff; +extern int nOptions_P2Diff; + + +void keyjoy(void) { + int key; + BYTE v1,v2; + + v1=v2=0x0f; + // read the keyboard state. The return value (in keys) is a pointer to a + // 256 byte buffer which holds the state of all the keyboard keys. If a + // byte's upper bit is set to 1, the key is pressed. + + + key = emu_ReadKeys(); + if (key & MASK_JOY2_UP) v1 &= 0x0E; + if (key & MASK_JOY2_DOWN) v1 &= 0x0D; + if (key & MASK_JOY2_RIGHT) v1 &= 0x0B; + if (key & MASK_JOY2_LEFT) v1 &= 0x07; + + riotRead[0x280]=(v1 << 4) | v2; +} + + +void keycons(void) { +//--------------------------------------------------------- +// This function reads the state of the joysticks (buttons) +//--------------------------------------------------------- + int key = emu_ReadKeys();; + int sw = emu_GetPad() & 0xff; + + // read the keyboard state. The return value (in keys) is a pointer to a + // 256 byte buffer which holds the state of all the keyboard keys. If a + // byte's upper bit is set to 1, the key is pressed. + + riotRead[SWCHB] |= 0x03; + + if ( (key & MASK_KEY_USER3) | (sw == 2) ) // + nOptions_Color = !nOptions_Color; + + if (!nOptions_Color) + riotRead[SWCHB] &= 0xF7; /* BW */ + else + riotRead[SWCHB] |= 0x08; /* Color */ + + + if ( (key & MASK_KEY_USER1) | (sw == 4) ) + riotRead[SWCHB] &= 0xFE; /* Reset */ + if ( (key & MASK_KEY_USER2) | (sw == 3) ) + riotRead[SWCHB] &= 0xFD; /* Select */ + + if (nOptions_P1Diff) riotRead[SWCHB] &= 0xBF; /* P0 amateur */ + else riotRead[SWCHB] |= 0x40; /* P0 pro */ + + if (nOptions_P2Diff) riotRead[SWCHB] &= 0x7f; /* P1 amateur */ + else riotRead[SWCHB] |= 0x80; /* P1 pro */ +} + +void keytrig(void) { + int key; + + // read the keyboard state. The return value (in keys) is a pointer to a + // 256 byte buffer which holds the state of all the keyboard keys. If a + // byte's upper bit is set to 1, the key is pressed. + + key = emu_ReadKeys(); + + if (!(tiaWrite[VBLANK] & 0x40)) { + tiaRead[INPT5]=0x80; + if (key & 0x10) + tiaRead[INPT4]=0x00; + else + tiaRead[INPT4]=0x80; + } +} + diff --git a/MCUME_pico/picovcs/Memory.c b/MCUME_pico/picovcs/Memory.c new file mode 100644 index 0000000..ede0379 --- /dev/null +++ b/MCUME_pico/picovcs/Memory.c @@ -0,0 +1,785 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for Details. + + $Id: memory.c,v 2.23 1997/04/06 02:19:12 ahornby Exp $ +******************************************************************************/ +//This file was modified from its original version for use in PocketVCS +// by Stuart Russell + +/* + * Holds the memory access routines to both memory and memory mapped + * i/o, hence memory.c + * + * Uses GNU C extensions. + */ + +#include +#include "types.h" +#include "address.h" +#include "vmachine.h" +#include "display.h" +#include "raster.h" +#include "tiasound.h" +#include "collision.h" +#include "col_mask.h" +#include "options.h" +#include "keyboard.h" +#include "sound.h" +#include "resource.h" + + +extern CLOCK clkcount; +extern CLOCK clk; +extern int beamadj; +//extern keyboard_keypad(); +extern keytrig(); +extern keyjoy(); +extern keycons(); +extern int nOptions_Landscape; +extern int nOptions_SoundOn; + + +/* Undecoded Read, for executable code etc. */ +/* a: address to read */ +/* returns: byte at address a */ +BYTE +undecRead (ADDRESS a) +{ + if (a & 0x1000) + return theRom[a & 0xfff]; + else + return theRam[a & 0x7f]; +} + + +__inline void +bank_switch_write (ADDRESS a, BYTE b) +{ + a&=0xfff; + switch (base_opts.bank) + { + + case 1: + /* Atari 8k F8 */ + switch (a) + { + case 0xff8: + theRom = &theCart[0]; + break; + case 0xff9: + theRom = &theCart[4096]; + break; + } + break; + + case 2: + /* Atari 16k F6 */ + switch (a) + { + case 0xff6: + theRom = &theCart[0]; + break; + case 0xff7: + theRom = &theCart[4096]; + break; + case 0xff8: + theRom = &theCart[8192]; + break; + case 0xff9: + theRom = &theCart[12288]; + break; + } + break; + + case 3: + /* Parker Brothers 8k E0 */ + { + ADDRESS a1; + if (a > 0xfdf && a < 0xfe8) + { + a1=(a&0x07)<<10; + memcpy(&cartScratch[0],&theCart[a1],0x400); + } + else if (a > 0xfe7 && a < 0xff0) + { + a1=(a&0x07)<<10; + memcpy(&cartScratch[0x400],&theCart[a1],0x400); + } + else if (a > 0xfef && a < 0xff8) + { + a1=(a&0x07)<<10; + memcpy(&cartScratch[0x800],&theCart[a1],0x400); + } + } + break; + + case 4: + /* CBS Ram Plus FA */ + if (a < 0x100) + cartRam[a & 0xff]=b; + else + { + switch (a) + { + case 0xff8: + theRom = &theCart[0]; + break; + case 0xff9: + theRom = &theCart[4096]; + break; + case 0xffa: + theRom = &theCart[8192]; + break; + } + } + break; + + case 5: + /* Atari 16k + super chip ram F6SC */ + if (a < 0x80) + cartRam[a & 0x7f] = b; + else + { + switch (a) + { + case 0xff6: + theRom = &theCart[0]; + break; + case 0xff7: + theRom = &theCart[4096]; + break; + case 0xff8: + theRom = &theCart[8192]; + break; + case 0xff9: + theRom = &theCart[12288]; + break; + } + } + break; + } +} + +__inline BYTE +bank_switch_read (ADDRESS a) +{ + BYTE res; + + a&=0xfff; + switch (base_opts.bank) + { + case 1: + /* Atari 8k F8 */ + switch (a) + { + case 0xff8: + theRom = &theCart[0]; + break; + case 0xff9: + theRom = &theCart[4096]; + break; + } + res=theRom[a]; + break; + + case 2: + /* Atari 16k F6 */ + switch (a) + { + case 0xff6: + theRom = &theCart[0]; + break; + case 0xff7: + theRom = &theCart[4096]; + break; + case 0xff8: + theRom = &theCart[8192]; + break; + case 0xff9: + theRom = &theCart[12288]; + break; + } + res=theRom[a]; + break; + + case 3: + /* Parker Brothers 8k E0 */ + /* Parker Brothers 8k E0 */ + { + ADDRESS a1; + if (a > 0xfdf && a < 0xfe8) + { + a1=(a&0x07)<<10; + memcpy(&cartScratch[0],&theCart[a1],0x400); + } + else if (a > 0xfe7 && a < 0xff0) + { + a1=(a&0x07)<<10; + memcpy(&cartScratch[0x400],&theCart[a1],0x400); + } + else if (a > 0xfef && a < 0xff8) + { + a1=(a&0x07)<<10; + memcpy(&cartScratch[0x800],&theCart[a1],0x400); + } + } + res=theRom[a]; + break; + + case 4: + /* CBS Ram Plus FA */ + if (a > 0xff && a < 0x200) + res=cartRam[a & 0xff]; + else + { + switch (a) + { + case 0xff8: + theRom = &theCart[0]; + break; + case 0xff9: + theRom = &theCart[4096]; + break; + case 0xffa: + theRom = &theCart[8192]; + break; + } + res=theRom[a]; + } + break; + + case 5: + /* Atari 16k + super chip ram F6SC */ + if (a > 0x7f && a < 0x100) + res=cartRam[a & 0x7f]; + else + { + switch (a) + { + case 0xff6: + theRom = &theCart[0]; + break; + case 0xff7: + theRom = &theCart[4096]; + break; + case 0xff8: + theRom = &theCart[8192]; + break; + case 0xff9: + theRom = &theCart[12288]; + break; + } + res=theRom[a]; + } + break; + default: + res=theRom[a]; + break; + } + return res; +} + + +/* Decoded write to memory */ +/* a: address written to */ +/* b: byte value written */ +void +decWrite (ADDRESS a, BYTE b) +{ + int i; + + /* A Write to the ROM area */ + if (a & 0x1000) + { + bank_switch_write (a,b); + } + /* A Write to the RAM area in Page 0 and 1 */ + else if ((a & 0x280) == 0x80) + { + theRam[a & 0x7f] = b; + } + /* TIA */ + else if (!(a & 0x80)) + { + switch (a & 0x7f) + { + case VSYNC: + if (b & 0x02) + { + /* Start vertical sync */ + vbeam_state = VSYNCSTATE; + } + break; + case VBLANK: + do_vblank (b); + /* Ground paddle pots */ + if (b & 0x80) + { + /* Grounded ports */ + tiaRead[INPT0] = 0x00; + tiaRead[INPT1] = 0x00; + } + else + { + /* Processor now measures time for a logic 1 to appear + at each paddle port */ + tiaRead[INPT0] = 0x80; + tiaRead[INPT1] = 0x80; + paddle[0].val = clk; + paddle[1].val = clk; + } + /* Logic for dumped input ports */ + if (b & 0x40) + { + if (tiaWrite[VBLANK] & 0x40) + { + tiaRead[INPT4] = 0x80; + tiaRead[INPT5] = 0x80; + } +// else +// { +// //read_trigger (); +// } + } + tiaWrite[VBLANK] = b; + break; + case WSYNC: + /* Skip to HSYNC pulse */ + do_hsync (); + break; + case RSYNC: + /* used in chip testing */ + //dbg_message(DBG_LOTS,"ARGHH an undocumented RSYNC!\n"); + break; + case NUSIZ0: + /* + printf("P0 nusize: ebeamx=%d, ebeamy=%d, nusize=%02x\n", + ebeamx, ebeamy, (int)b); + */ + pl[0].nusize = b & 0x07; + ml[0].width = (b & 0x30) >> 4; + break; + case NUSIZ1: + /* + printf("P1 nusize: ebeamx=%d, ebeamy=%d, nusize=%02x\n", + ebeamx, ebeamy, (int)b); + */ + pl[1].nusize = b & 0x07; + ml[1].width = (b & 0x30) >> 4; + break; + case COLUP0: + do_unified_change (0, b); + break; + case COLUP1: + do_unified_change (1, b); + break; + case COLUPF: + do_unified_change (2, b); + break; + case COLUBK: + /*printf("BKcolour = %d, line=%d\n", (int)(b>>1), ebeamy); */ + do_unified_change (3, b); + break; + case CTRLPF: + tiaWrite[CTRLPF] = b & 0x37; /* Bitmask 00110111 */ + do_pfraster_change (0, 3, b & 0x01); /* Reflection */ + + /* Normal/Alternate priority */ + do_unified_change(4, (b & 0x04)); + + /* Scores/Not scores */ + do_unified_change(5, (b & 0x02)); + + break; + case REFP0: + pl[0].reflect = (b & 0x08) >> 3; + break; + case REFP1: + pl[1].reflect = (b & 0x08) >> 3; + break; + case PF0: + do_pfraster_change (0, 0, b & 0xf0); + break; + case PF1: + do_pfraster_change (0, 1, b); + break; + case PF2: + do_pfraster_change (0, 2, b); + break; + case RESP0: + /* Ghost in pacman! + if(beamadj == 0) { + printf("RESP0: ebeamx=%d, ebeamy=%d\n", + ebeamx, ebeamy); + show(); + } */ + pl[0].x = ebeamx + beamadj; + /* As per page 20 Stella Programmers Guide */ + if (pl[0].x < 0) + pl[0].x = 0; + break; + case RESP1: + /*if(beamadj == 0) { + printf("RESP1: ebeamx=%d, ebeamy=%d\n", + ebeamx, ebeamy); + show(); + } */ + pl[1].x = ebeamx + beamadj; + /* As per page 20 Stella Programmers Guide */ + if (pl[1].x < 0) + pl[1].x = 0; + break; + case RESM0: + ml[0].x = ebeamx + beamadj; + /* As per page 20 Stella Programmers Guide */ + if (ml[0].x < 0) + ml[0].x = 0; + break; + case RESM1: + ml[1].x = ebeamx + beamadj; + /* As per page 20 Stella Programmers Guide */ + if (ml[1].x < 0) + ml[1].x = 0; + break; + case RESBL: + ml[2].x = ebeamx + beamadj; + /* As per page 20 Stella Programmers Guide */ + if (ml[2].x < 0) + ml[2].x = 0; + break; + case AUDC0: + if (nOptions_SoundOn) Update_tia_sound(AUDC0,b & 0x0f); + break; + case AUDC1: + if (nOptions_SoundOn) Update_tia_sound(AUDC1,b & 0x0f); + break; + case AUDF0: + if (nOptions_SoundOn) Update_tia_sound(AUDF0,b & 0x1f); + break; + case AUDF1: + if (nOptions_SoundOn) Update_tia_sound(AUDF1,b & 0x1f); + break; + case AUDV0: + if (nOptions_SoundOn) Update_tia_sound(AUDV0 , b & 0x0f); + break; + case AUDV1: + if (nOptions_SoundOn) Update_tia_sound(AUDV1 , b & 0x0f); + break; + case GRP0: + do_plraster_change (0, 0, b); + do_plraster_change (1, 1, b); + break; + case GRP1: + do_plraster_change (1, 0, b); + do_plraster_change (0, 1, b); + ml[2].vdel = ml[2].enabled; + break; + case ENAM0: + ml[0].enabled = b & 0x02; + if (tiaWrite[RESMP0]) + ml[0].enabled = 0; + break; + case ENAM1: + ml[1].enabled = b & 0x02; + if (tiaWrite[RESMP1]) + ml[1].enabled = 0; + break; + case ENABL: + ml[2].enabled = b & 0x02; + break; + case HMP0: + pl[0].hmm = (b >> 4); + break; + case HMP1: + pl[1].hmm = (b >> 4); + break; + case HMM0: + ml[0].hmm = (b >> 4); + break; + case HMM1: + ml[1].hmm = (b >> 4); + break; + case HMBL: + ml[2].hmm = (b >> 4); + break; + case VDELP0: + pl[0].vdel_flag = b & 0x01; + break; + case VDELP1: + pl[1].vdel_flag = b & 0x01; + break; + case VDELBL: + ml[2].vdel_flag = b & 0x01; + break; + case RESMP0: + tiaWrite[RESMP0] = b & 0x02; + if (b & 0x02) + { + ml[0].x = pl[0].x + 4; + ml[0].enabled = 0; + } + break; + case RESMP1: + tiaWrite[RESMP1] = b & 0x02; + if (b & 0x02) + { + ml[1].x = pl[1].x + 4; + ml[1].enabled = 0; + } + break; + case HMOVE: + /* Player 0 */ + if (pl[0].hmm & 0x08) + pl[0].x += ((pl[0].hmm ^ 0x0f) + 1); + else + pl[0].x -= pl[0].hmm; + if (pl[0].x > 160) + pl[0].x = -68; + else if (pl[0].x < -68) + pl[0].x = 160; + + /* Player 2 */ + if (pl[1].hmm & 0x08) + pl[1].x += ((pl[1].hmm ^ 0x0f) + 1); + else + pl[1].x -= pl[1].hmm; + if (pl[1].x > 160) + pl[1].x = -68; + else if (pl[1].x < -68) + pl[1].x = 160; + + /* Missiles */ + for (i = 0; i < 3; i++) + { + if (ml[i].hmm & 0x08) + ml[i].x += ((ml[i].hmm ^ 0x0f) + 1); + else + ml[i].x -= ml[i].hmm; + if (ml[i].x > 160) + ml[i].x = -68; + else if (ml[i].x < -68) + ml[i].x = 160; + } + break; + case HMCLR: + pl[0].hmm = 0; + pl[1].hmm = 0; + for (i = 0; i < 3; i++) + ml[i].hmm = 0; + break; + case CXCLR: + col_state=0; + break; + } + } + else + { + switch (a & 0x2ff) + { + /* RIOT I/O ports */ + case SWCHA: + riotWrite[SWCHA] = b; + break; + case SWACNT: + riotWrite[SWACNT] = b; + break; + case SWCHB: + case SWBCNT: + /* Do nothing */ + break; + + /* Timer ports */ + case TIM1T: + set_timer (0, b, clkcount); + break; + case TIM8T: + set_timer (3, b, clkcount); + break; + case TIM64T: + set_timer (6, b, clkcount); + break; + case T1024T: + set_timer (10, b, clkcount); + break; + default: + //printf ("Unknown write %x\n", a); + //show (); + break; + } + } +} + + +/* Decoded read from memory */ +/* a: address to read */ +/* returns: byte value from address a */ +BYTE +decRead (ADDRESS a) +{ + BYTE res = 65; + + if (a & 0x1000) + { + a = a & 0xfff; + if (base_opts.bank != 0) + res= bank_switch_read (a); + else + res = theRom[a]; + } + else if ((a & 0x280) == 0x80) + { + res = theRam[a & 0x7f]; + } + else if (!(a & 0x80)) + { + switch (a & 0x0f) + { + /* TIA */ + case CXM0P: + res = (col_state & CXM0P_MASK) << 6; + break; + case CXM1P: + res = (col_state & CXM1P_MASK) << 4; + break; + case CXP0FB: + res = (col_state & CXP0FB_MASK) << 2; + break; + case CXP1FB: + res = (col_state & CXP1FB_MASK); + break; + case CXM0FB: + res = (col_state & CXM0FB_MASK) >> 2; + break; + case CXM1FB: + res = (col_state & CXM1FB_MASK) >> 4; + break; + case CXBLPF: + res = (col_state & CXBLPF_MASK) >> 5; + break; + case CXPPMM: + res = (col_state & CXPPMM_MASK) >> 7; + break; + case INPT0: + if (base_opts.lcon== PADDLE) + { + tiaRead[INPT0] = do_paddle (0); + } + else if (base_opts.lcon== KEYPAD) + tiaRead[INPT0] = do_keypad (0, 0); + res = tiaRead[INPT0]; + break; + case INPT1: + if (base_opts.lcon== PADDLE) + { + tiaRead[INPT1] = do_paddle (1); + } + if (base_opts.lcon== KEYPAD) + tiaRead[INPT1]=do_keypad (0, 1); + res = tiaRead[INPT1]; + break; + case INPT2: + if (base_opts.rcon == KEYPAD) + tiaRead[INPT1]=do_keypad (1, 0); + res = tiaRead[INPT2]; + break; + case INPT3: + if (base_opts.rcon == KEYPAD) + tiaRead[INPT3]=do_keypad ( 1, 1); + res = tiaRead[INPT3]; + break; + case INPT4: + switch (base_opts.lcon) + { + case KEYPAD: + tiaRead[INPT4]=do_keypad ( 0, 2); + break; + case STICK: + case PADDLE: + keytrig(); + res=tiaRead[INPT4]; + break; + } + res =tiaRead[INPT4]; + break; + case INPT5: + switch (base_opts.rcon) + { + case KEYPAD: + tiaRead[INPT5]=do_keypad (1, 2); + break; + case STICK: + case PADDLE: + keytrig(); + res=tiaRead[INPT5]; + break; + } + res = tiaRead[INPT5]; + break; + case 0x0e: + case 0x0f: + res = 0x0f; + /* RAM, mapped to page 0 and 1 */ + } + } + else + { + switch (a & 0x2ff) + { + /* Timer output */ + case INTIM: + case 0x285: + case 0x286: + case TIM1T: + case TIM8T: + case TIM64T: + case T1024T: + res = do_timer (clkcount); + /*printf("Timer is %d res is %d\n", res, timer_res); */ + break; + case SWCHA: + switch (base_opts.lcon) + { + case PADDLE: + if (base_opts.lcon == PADDLE) + { + keytrig(); + res=tiaRead[INPT4]; + } + else if (base_opts.rcon == PADDLE) + { + keytrig(); + res=tiaRead[INPT4]; + } + break; + case STICK: + keyjoy(); + res=riotRead[SWCHA]; + break; + } + res = riotRead[SWCHA]; + break; + /* Switch B is hardwired to input */ + case SWCHB: + case SWCHB + 0x100: + keycons (); + res = riotRead[SWCHB]; + break; + default: + //printf ("Unknown read 0x%x\n", a & 0x2ff); + //show (); + res = 65; + break; + } + } + return res; +} + diff --git a/MCUME_pico/picovcs/Memory.h b/MCUME_pico/picovcs/Memory.h new file mode 100644 index 0000000..303c932 --- /dev/null +++ b/MCUME_pico/picovcs/Memory.h @@ -0,0 +1,32 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for details. + + $Id: memory.h,v 1.5 1996/11/24 16:55:40 ahornby Exp $ +******************************************************************************/ + +/* + Prototypes for the memory interface. + */ + +#ifndef VCSMEMORY_H +#define VCSMEMORY_H + +__inline BYTE +undecRead (ADDRESS a); + +void +decWrite ( ADDRESS a, BYTE b); + +BYTE +decRead (ADDRESS a); + +#endif diff --git a/MCUME_pico/picovcs/Options.c b/MCUME_pico/picovcs/Options.c new file mode 100644 index 0000000..4ee7a28 --- /dev/null +++ b/MCUME_pico/picovcs/Options.c @@ -0,0 +1,50 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for details. + + $Id: options.c,v 1.7 1996/11/24 16:55:40 ahornby Exp $ +******************************************************************************/ +//This file was modified from its original version for use in PocketVCS +// by Stuart Russell + +/* Command Line Option Parser */ +#include "config.h" +#include +#include + +/* *INDENT-OFF* */ +/* Options common to all ports of x2600 */ +struct BaseOptions { +// int rr;// unused + int tvtype; + int lcon; + int rcon; + int bank; + int magstep; + char filename[80]; + int sound; + int swap; + int realjoy; + int limit; + int mousey; + int mitshm; + int dbg_level; +} base_opts={0,1,1,1,1,"",1,1,1,1,1,0,0}; + +char *argv[64]; +int argc; + +// was written as "(int argc, char **argv)" +void parse_options(void) +{ +// base_opts.lcon = 1; +} + diff --git a/MCUME_pico/picovcs/Raster.c b/MCUME_pico/picovcs/Raster.c new file mode 100644 index 0000000..5012b33 --- /dev/null +++ b/MCUME_pico/picovcs/Raster.c @@ -0,0 +1,833 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for Details. + + $Id: raster.c,v 1.30 1997/11/22 14:27:47 ahornby Exp $ +******************************************************************************/ +//This file was modified from its original version for use in PocketVCS +// by Stuart Russell + +/* Raster graphics procedures */ + +#include +#include "btypes.h" +//#include "systypes.h" +#include "types.h" +#include "address.h" +#include "vmachine.h" +#include "display.h" +#include "collision.h" +#include "options.h" + +/* Color lookup tables. Used to speed up rendering */ +/* The current colour lookup table */ +unsigned int *colour_lookup; + +/* Colour table */ +#define P0M0_COLOUR 0 +#define P1M1_COLOUR 1 +#define PFBL_COLOUR 2 +#define BK_COLOUR 3 + +unsigned int colour_table[4]; +extern BYTE *VBuf; + +extern int tv_field; +extern int nOptions_Interlace; +extern byte nOptions_SkipFrames; + +/* normal/alternate, not scores/scores*/ +int norm_val, scores_val; +int *colour_ptrs[2][3]; + +/* Normal priority */ +static int colour_normal[64]; +static int colour_normscoresl[64]; +static int colour_normscoresr[64]; + +/* Alternate priority */ +static int colour_alternate[64]; +static int colour_altscoresl[64]; +static int colour_altscoresr[64]; + +/* Playfield screen position */ +uint32 *pf_pos; +unsigned int line_ptr;//changed + +/* Draw playfield register PF0 */ +/* pf: playfield structure */ +/* dir: 1=normal, 0=mirrored */ +__inline void +draw_pf0 (PlayField *pf, int dir) +{ + int pfm; /* playfield mask */ + /* 1=forward */ + if (dir) + { + for (pfm = 0x10; pfm < 0x100; pfm <<= 1) + { + if (pf->pf0 & pfm) + *(pf_pos++) = PF_MASK32; + else + pf_pos++; + } + } + else + { + for (pfm = 0x80; pfm > 0x08; pfm >>= 1) + { + if (pf->pf0 & pfm) + *(pf_pos++) = PF_MASK32; + else + pf_pos++; + } + } +} + +/* Draw playfield register PF1 */ +/* pf: playfield structure */ +/* dir: 1=normal, 0=mirrored */ +__inline void +draw_pf1 (PlayField *pf, int dir) +{ + int pfm; /* playfield mask */ + /* 1=forward */ + if (dir) + { + /* do PF1 */ + for (pfm = 0x80; pfm > 0; pfm >>= 1) + { + if (pf->pf1 & pfm) + *(pf_pos++) = PF_MASK32; + else + pf_pos ++; + } + } + else + { + /* do PF1 */ + for (pfm = 0x01; pfm < 0x100; pfm <<= 1) + { + if (pf->pf1 & pfm) + *(pf_pos++) = PF_MASK32; + else + pf_pos ++; + } + } +} + +/* Draw playfield register PF2 */ +/* pf: playfield structure */ +/* dir: 1=normal, 0=mirrored */ +__inline void +draw_pf2 ( PlayField *pf, int dir) +{ + int pfm; /* playfield mask */ + /* 1=forward */ + if (dir) + { + /* do PF2 */ + for (pfm = 0x01; pfm < 0x100; pfm <<= 1) + { + if (pf->pf2 & pfm) + *(pf_pos++) = PF_MASK32; + else + pf_pos ++; + } + } + else + { + for (pfm = 0x80; pfm > 0; pfm >>= 1) + { + if (pf->pf2 & pfm) + *(pf_pos++) = PF_MASK32; + else + pf_pos ++; + } + } +} + +/* Update from the playfield display list */ +/* num: playfield to use. Now depreciated as only pf[0] is used */ +/* nextx: the start position of the next playfield element */ +/* pfc: the number of the next playfield change structure */ +/* pf_max: the highest playfield change structure */ +__inline void +pf_update (int num, int nextx, int *pfc, int pf_max) +{ + for (; (*pfc < pf_max) && (nextx + 3 > pf_change[num][*pfc].x); (*pfc)++) + { + use_pfraster_change (&pf[num], &pf_change[num][*pfc]); + } +} + +/* Draw the playfield */ +void +draw_playfield (void) +{ + const int num = 0; /* Stick to one playfield */ + int pfc = 0; + int pf_max = pf_change_count[num]; + + pf_pos = (uint32 *)colvect; + /* First half of playfield */ + + pf_update (num, 0, &pfc, pf_max); + draw_pf0 (&pf[0], 1); + pf_update (num, 16, &pfc, pf_max); + draw_pf1 (&pf[0], 1); + pf_update (num, 48, &pfc, pf_max); + draw_pf2 (&pf[0], 1); + + pf_update (num, 80, &pfc, pf_max); + /* Second half of playfield */ + if (pf[0].ref) + { + draw_pf2 (&pf[0], 0); + pf_update (num, 112, &pfc, pf_max); + draw_pf1 (&pf[0], 0); + pf_update (num, 144, &pfc, pf_max); + draw_pf0 (&pf[0], 0); + } + else + { + draw_pf0 (&pf[0], 1); + pf_update (num, 96, &pfc, pf_max); + draw_pf1 (&pf[0], 1); + pf_update (num, 128, &pfc, pf_max); + draw_pf2 (&pf[0], 1); + } + /* Use last changes */ + for (; pfc < pf_max; pfc++) + use_pfraster_change (&pf[num], &pf_change[num][pfc]); + + pf_change_count[num] = 0; +} + +/* Draws a normal (8 clocks) sized player */ +/* p: the player to draw */ +/* x: the position to draw it */ +__inline void +pl_normal ( Player *p, int x) +{ + /* Set pointer to start of player graphic */ + BYTE *ptr = colvect + x; + BYTE mask; + BYTE gr; + + if (p->vdel_flag) + gr = p->vdel; + else + gr = p->grp; + + if (p->reflect) + { + /* Reflected: start with D0 of GRP on left */ + for (mask = 0x01; mask > 0; mask <<= 1) + { + if (gr & mask) + { + *(ptr++) |= p->mask; + } + else + ptr++; + } + } + else + { + /* Unreflected: start with D7 of GRP on left */ + for (mask = 0x80; mask > 0; mask >>= 1) + { + if (gr & mask) + { + *(ptr++) |= p->mask; + } + else + ptr++; + } + } +} + +/* Draws a double width ( 16 clocks ) player */ +/* p: the player to draw */ +/* x: the position to draw it */ +__inline void +pl_double ( Player *p, int x) +{ + /* Set pointer to start of player graphic */ + BYTE *ptr = colvect + (x); + BYTE mask; + BYTE gr; + + if (p->vdel_flag) + gr = p->vdel; + else + gr = p->grp; + + if (p->reflect) + { + for (mask = 0x01; mask > 0; mask <<= 1) + { + if (gr & mask) + { + *(ptr++) |= p->mask; + *(ptr++) |= p->mask; + } + else + ptr += 2; + } + } + else + { + for (mask = 0x80; mask > 0; mask >>= 1) + { + if (gr & mask) + { + *(ptr++) |= p->mask; + *(ptr++) |= p->mask; + } + else + ptr += 2; + } + } +} + +/* Draws a quad sized ( 32 clocks) player */ +/* p: the player to draw */ +/* x: the position to draw it */ +__inline void +pl_quad ( Player *p, int x) +{ + /* Set pointer to start of player graphic */ + BYTE *ptr = colvect + x; + BYTE mask; + BYTE gr; + + if (p->vdel_flag) + gr = p->vdel; + else + gr = p->grp; + + if (p->reflect) + { + for (mask = 0x01; mask > 0; mask <<= 1) + { + if (gr & mask) + { + *(ptr++) |= p->mask; + *(ptr++) |= p->mask; + *(ptr++) |= p->mask; + *(ptr++) |= p->mask; + } + else + ptr += 4; + } + } + else + { + for (mask = 0x80; mask > 0; mask >>= 1) + { + if (gr & mask) + { + *(ptr++) |= p->mask; + *(ptr++) |= p->mask; + *(ptr++) |= p->mask; + *(ptr++) |= p->mask; + } + else + ptr += 4; + } + } +} + +/* Consume the player display list */ +__inline void +pl_update (int num, int nextx, int *plc, int pl_max) +{ + for (; (*plc < pl_max) && (nextx > pl_change[num][*plc].x); (*plc)++) + { + use_plraster_change (&pl[num], &pl_change[num][*plc]); + } +} + +/* Draw a player graphic */ +/* line: the vertical position of the raster */ +/* num: the number of player to draw, current 0 or 1 for P0 and P1 */ +static __inline void +pl_draw (int num) +{ + int plc = 0; + int pl_max = pl_change_count[num]; + int nextx; + + pl_update (num, pl[num].x, &plc, pl_max); + if (pl[num].x >= 0 && pl[num].x < tv_width) + { + + /*if(pl_max > plc) + use_plraster_change( &pl[num], &pl_change[num][plc++]); */ + switch (pl[num].nusize) + { + case 0: + /* One copy */ + pl_normal (&pl[num], pl[num].x); + break; + case 1: + /* Two copies close */ + pl_normal (&pl[num], pl[num].x); + nextx = pl[num].x + 8 + 8; + pl_update (num, nextx, &plc, pl_max); + pl_normal (&pl[num], nextx); + break; + case 2: + /* Two copies medium */ + pl_normal (&pl[num], pl[num].x); + nextx = pl[num].x + 8 + 24; + pl_update (num, nextx, &plc, pl_max); + pl_normal (&pl[num], nextx); + break; + case 3: + /* Three copies close */ + /* Pacman score line */ + pl_normal (&pl[num], pl[num].x); + + nextx = pl[num].x + 16; + pl_update (num, nextx, &plc, pl_max); + pl_normal (&pl[num], nextx); + + nextx = pl[num].x + 32; + pl_update (num, nextx, &plc, pl_max); + + pl_normal (&pl[num], nextx); + break; + case 4: + /* Two copies wide */ + pl_normal (&pl[num], pl[num].x); + nextx = pl[num].x + 8 + 56; + pl_update (num, nextx, &plc, pl_max); + pl_normal (&pl[num], nextx); + break; + case 5: + /* Double sized player */ + pl_double (&pl[num], pl[num].x); + break; + case 6: + /* Three copies medium */ + pl_normal (&pl[num], pl[num].x); + nextx = pl[num].x + 8 + 24; + pl_update (num, nextx, &plc, pl_max); + pl_normal (&pl[num], nextx); + nextx = pl[num].x + 8 + 56; + pl_update (num, nextx, &plc, pl_max); + pl_normal (&pl[num], nextx); + break; + case 7: + /* Quad sized player */ + pl_quad (&pl[num], pl[num].x); + break; + } + } + /* Use last changes */ + for (; plc < pl_max; plc++) + use_plraster_change (&pl[num], &pl_change[num][plc]); + pl_change_count[num] = 0; +} + + +/* Draw the ball graphic */ +/* line: the vertical position of the raster */ +static __inline void +draw_ball (void) +{ + int i; + BYTE *blptr; + BYTE e; + + if (ml[2].vdel_flag) + e = ml[2].vdel; + else + e = ml[2].enabled; + + if (e && ml[2].x >= 0) + { + blptr = colvect + (ml[2].x); + switch (tiaWrite[CTRLPF] >> 4) + { + case 3: + /* Eight clocks */ + for (i = 0; i < 8; i++) + *(blptr++) |= BL_MASK; + break; + case 2: + /* Four clocks */ + for (i = 0; i < 4; i++) + *(blptr++) |= BL_MASK; + break; + case 1: + /* Two clocks */ + for (i = 0; i < 2; i++) + *(blptr++) |= BL_MASK; + break; + case 0: + /* One clock */ + *(blptr++) |= BL_MASK; + break; + } + } +} + + +/* Draw a missile graphic */ +static __inline void +do_missile (int num, BYTE * misptr) +{ + int i; + + switch (ml[num].width) + { + case 0: + /* one clock */ + *(misptr++) |= ml[num].mask; + break; + case 1: + /* two clocks */ + for (i = 0; i < 2; i++) + *(misptr++) |= ml[num].mask; + break; + case 2: + /* four clocks */ + for (i = 0; i < 4; i++) + *(misptr++) |= ml[num].mask; + break; + case 3: + /* Eight clocks */ + for (i = 0; i < 8; i++) + *(misptr++) |= ml[num].mask; + break; + } /* switch */ +} + +/* Draw a missile taking into account the player's position. */ +/* line: the vertical position of the raster */ +/* num: 0 for M0, 1 for M1 */ +static __inline void +draw_missile (int num) +{ + BYTE *misptr; + + if (ml[num].enabled && ml[num].x >= 0) + { + switch (pl[num].nusize) + { + case 0: + misptr = colvect + (ml[num].x); + do_missile (num, misptr); + break; + case 1: + misptr = colvect + (ml[num].x); + do_missile (num, misptr); + misptr = misptr + 16; + do_missile (num, misptr); + break; + case 2: + misptr = colvect + (ml[num].x); + do_missile (num, misptr); + misptr = misptr + 32; + do_missile (num, misptr); + break; + case 3: + misptr = colvect + (ml[num].x); + do_missile (num, misptr); + misptr = misptr + 16; + do_missile (num, misptr); + misptr = misptr + 16; + do_missile (num, misptr); + break; + case 4: + misptr = colvect + (ml[num].x); + do_missile (num, misptr); + misptr = misptr + 64; + do_missile (num, misptr); + break; + case 5: + misptr = colvect + (ml[num].x); + do_missile (num, misptr); + break; + case 6: + misptr = colvect + (ml[num].x); + do_missile (num, misptr); + misptr = misptr + 32; + do_missile (num, misptr); + misptr = misptr + 32; + do_missile (num, misptr); + break; + case 7: + misptr = colvect + (ml[num].x); + do_missile (num, misptr); + break; + + } + + } /* If */ +} + + +/* Construct one tv raster line colvect */ +/* line: the vertical position of the raster */ +__inline void +tv_rasterise (int line) +{ + +// if (tv_field && nOptions_Interlace) line +=222; + line_ptr = line * vwidth; + + /* Draw the playfield first */ + draw_playfield (); + + /* Do the ball */ + draw_ball (); + + /* Do the player 1 graphics */ + draw_missile (1); + pl_draw (1); + + /* Do the player 0 graphics */ + draw_missile (0); + pl_draw (0); +} + +/* Reset the collision vector */ +__inline void +reset_vector (void) +{ + int i; + uint32 *cpos=(uint32 *)colvect; + for (i = 0; i < 40; i++) + cpos[i] = 0; +} + + +/* draw the collision vector */ +/* Quick version with no magnification */ +__inline void +draw_vector_q (void) +{ + int i; + int uct = 0; + int colind, colval; + unsigned int pad; + unsigned int tv_ptr; + tv_ptr=line_ptr; + + /* Check for scores */ + if(scores_val ==2) + { + scores_val=1; + colour_lookup=colour_ptrs[norm_val][scores_val]; + } + + /* Use starting changes */ + while (uct < unified_count && unified[uct].x < 0) + use_unified_change (&unified[uct++]); + + for (i = 0; i < 80; i++) + { + if (uct < unified_count && unified[uct].x == i) + use_unified_change (&unified[uct++]); + + if((colval=colvect[i])){ + + /* Collision detection */ + col_state|=col_table[colval]; + + colind=colour_lookup[colval]; + pad=colour_table[colind]; + } else + pad=colour_table[BK_COLOUR]; + + VBuf[tv_ptr++] = pad; + } + + /* Check for scores */ + if(scores_val ==1) + { + scores_val=2; + colour_lookup=colour_ptrs[norm_val][scores_val]; + } + for (i = 80; i < 160; i++) + { + if (uct < unified_count && unified[uct].x == i) + use_unified_change (&unified[uct++]); + + if((colval=colvect[i])){ + + /* Collision detection */ + col_state|=col_table[colval]; + + colind=colour_lookup[colval]; + pad=colour_table[colind]; + } else + pad=colour_table[BK_COLOUR]; + + VBuf[tv_ptr++] = pad; + } + + while (uct < unified_count) + use_unified_change (&unified[uct++]); + unified_count = 0; +} + +/* Used for when running in frame skipping mode */ +static __inline void +update_registers (void) +{ + int i, num; + + /* Playfield */ + for (i = 0; i < pf_change_count[0]; i++) + use_pfraster_change (&pf[0], &pf_change[0][i]); + pf_change_count[0] = 0; + + /* Player graphics */ + for (num = 0; num < 2; num++) + { + for (i = 0; i < pl_change_count[num]; i++) + use_plraster_change (&pl[num], &pl_change[num][i]); + pl_change_count[num] = 0; + } + + /* Unified */ + for (i = 0; i < unified_count; i++) + use_unified_change (&unified[i]); + unified_count = 0; +} + +/* Main raster function, will have switches for different magsteps */ +/* line: the vertical position of the raster */ +void +tv_raster (int line) +{ +// if ( ((tv_counter % nOptions_SkipFrames) != 0) || (line > theight) ) + if (line > theight) + { + update_registers (); + } + else + { + reset_vector(); + tv_rasterise (line); + draw_vector_q (); + } +} + +void +init_raster (void) +{ + int i,val; + + init_collisions(); + + /* Normal Priority */ + for (i=0; i<64; i++) + { + if (i & (PL0_MASK | ML0_MASK)) + val = P0M0_COLOUR; + else if (i & (PL1_MASK | ML1_MASK)) + val = P1M1_COLOUR; + else if (i & (BL_MASK | PF_MASK)) + val = PFBL_COLOUR; + else + val = BK_COLOUR; + colour_normal[i]=val; + } + + /* Alternate Priority */ + for (i=0; i<64; i++) + { + if (i & (BL_MASK | PF_MASK)) + val = PFBL_COLOUR; + else if (i & (PL0_MASK | ML0_MASK)) + val = P0M0_COLOUR; + else if (i & (PL1_MASK | ML1_MASK)) + val = P1M1_COLOUR; + else + val = BK_COLOUR; + colour_alternate[i]=val; + } + + /* Normal Scores Left */ + for (i=0; i<64; i++) + { + if (i & (PL0_MASK | ML0_MASK)) + val = P0M0_COLOUR; + else if (i & (PL1_MASK | ML1_MASK)) + val = P1M1_COLOUR; + else if (i & (BL_MASK | PF_MASK)) + /* Use P1 colour */ + val = P0M0_COLOUR; + else + val = BK_COLOUR; + colour_normscoresl[i]=val; + } + + /* Normal Scores Right */ + for (i=0; i<64; i++) + { + if (i & (PL0_MASK | ML0_MASK)) + val = P0M0_COLOUR; + else if (i & (PL1_MASK | ML1_MASK)) + val = P1M1_COLOUR; + else if (i & (BL_MASK | PF_MASK)) + /* Use P1 colour */ + val = P1M1_COLOUR; + else + val = BK_COLOUR; + colour_normscoresr[i]=val; + } + + /* Alternate Scores Left*/ + for (i=0; i<64; i++) + { + if (i & (BL_MASK | PF_MASK)) + val = P0M0_COLOUR; + else if (i & (PL0_MASK | ML0_MASK)) + val = P0M0_COLOUR; + else if (i & (PL1_MASK | ML1_MASK)) + val = P1M1_COLOUR; + else + val = BK_COLOUR; + colour_altscoresl[i]=val; + } + + /* Alternate Scores Right*/ + for (i=0; i<64; i++) + { + if (i & (BL_MASK | PF_MASK)) + val = P1M1_COLOUR; + else if (i & (PL0_MASK | ML0_MASK)) + val = P0M0_COLOUR; + else if (i & (PL1_MASK | ML1_MASK)) + val = P1M1_COLOUR; + else + val = BK_COLOUR; + colour_altscoresr[i]=val; + } + + colour_ptrs[0][0]=colour_normal; + colour_ptrs[1][0]=colour_alternate; + colour_ptrs[0][1]=colour_normscoresl; + colour_ptrs[1][1]=colour_altscoresl; + colour_ptrs[0][2]=colour_normscoresr; + colour_ptrs[1][2]=colour_altscoresr; + norm_val=0; scores_val=0; + + colour_lookup=colour_normal; +} diff --git a/MCUME_pico/picovcs/Table.c b/MCUME_pico/picovcs/Table.c new file mode 100644 index 0000000..67d9232 --- /dev/null +++ b/MCUME_pico/picovcs/Table.c @@ -0,0 +1,646 @@ + + + + + +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for Details. + + $Id: table.c,v 1.4 1996/08/26 15:04:20 ahornby Exp $ +******************************************************************************/ + +/* + * $Id: table.c,v 1.4 1996/08/26 15:04:20 ahornby Exp $ + * + * This was part of the x64 Commodore 64 emulator. + * See README for copyright notice + * + * This file contains lookup-table which is used to translate + * MOS6502 machine instructions. Machine code is used as index + * to array called lookup. Pointer to function is then fetched + * from array and function is called. + * Timing of the undocumented opcodes is based on information + * in an article in C=Lehti by Kai Lindfors and Topi Maurola. + * + * + * Written by + * Vesa-Matti Puro (vmp@lut.fi) + * Jarkko Sonninen (sonninen@lut.fi) + * Jouko Valta (jopi@stekt.oulu.fi) + * + */ +//This file was modified from its original version for use in PocketVCS +// by Stuart Russell + +#include "cpu.h" +#include "mnemonic.h" + + +/* + * The "mnemonic.h" file contains #defines for BRK, ORA, NOOP... which + * are character strings, i.e. #define BRK "BRK" + * #define ORA "ORA" . . . Used mainly to reduce typing... + * + * There are #defines for addressing modes i.e. IMPLIED, INDIRECT_X, + * ZERO_PAGE in "cpu.h"... These can be used to make a diassembler. + */ + +#define PROGMEM + +PROGMEM int clength[] = +{1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 0}; + +PROGMEM struct lookup_tag lookup[] = +{ + +/**** Positive ****/ + + /* 00 */ + {BRK, IMPLIED, M_NONE, M_PC, 7, 0}, /* Pseudo Absolute */ + /* 01 */ + {ORA, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect,X) */ + /* 02 */ + {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ + /* 03 */ + {SLO, INDIRECT_X, M_INDX, M_INDX, 8, 0}, + + /* 04 */ + {NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0}, + /* 05 */ + {ORA, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */ + /* 06 */ + {ASL, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */ + /* 07 */ + {SLO, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, + + /* 08 */ + {PHP, IMPLIED, M_SR, M_NONE, 3, 0}, + /* 09 */ + {ORA, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */ + /* 0a */ + {ASL, ACCUMULATOR, M_AC, M_AC, 2, 0}, /* Accumulator */ + /* 0b */ + {ANC, IMMEDIATE, M_ACIM, M_ACNC, 2, 0}, + + /* 0c */ + {NOOP, ABSOLUTE, M_NONE, M_NONE, 4, 0}, + /* 0d */ + {ORA, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */ + /* 0e */ + {ASL, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */ + /* 0f */ + {SLO, ABSOLUTE, M_ABS, M_ABS, 6, 0}, + + /* 10 */ + {BPL, RELATIVE, M_REL, M_NONE, 2, 0}, + /* 11 */ + {ORA, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */ + /* 12 */ + {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ + /* 13 */ + {SLO, INDIRECT_Y, M_INDY, M_INDY, 8, 0}, + + /* 14 */ + {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0}, + /* 15 */ + {ORA, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */ + /* 16 */ + {ASL, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */ + /* 17 */ + {SLO, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, + + /* 18 */ + {CLC, IMPLIED, M_NONE, M_FC, 2, 0}, + /* 19 */ + {ORA, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */ + /* 1a */ + {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0}, + /* 1b */ + {SLO, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0}, + + /* 1c */ + {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1}, + /* 1d */ + {ORA, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */ + /* 1e */ + {ASL, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */ + /* 1f */ + {SLO, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, + + /* 20 */ + {JSR, ABSOLUTE, M_ADDR, M_PC, 6, 0}, + /* 21 */ + {AND, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect ,X) */ + /* 22 */ + {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ + /* 23 */ + {RLA, INDIRECT_X, M_INDX, M_INDX, 8, 0}, + + /* 24 */ + {BIT, ZERO_PAGE, M_ZERO, M_NONE, 3, 0}, /* Zeropage */ + /* 25 */ + {AND, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */ + /* 26 */ + {ROL, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */ + /* 27 */ + {RLA, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, + + /* 28 */ + {PLP, IMPLIED, M_NONE, M_SR, 4, 0}, + /* 29 */ + {AND, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */ + /* 2a */ + {ROL, ACCUMULATOR, M_AC, M_AC, 2, 0}, /* Accumulator */ + /* 2b */ + {ANC, IMMEDIATE, M_ACIM, M_ACNC, 2, 0}, + + /* 2c */ + {BIT, ABSOLUTE, M_ABS, M_NONE, 4, 0}, /* Absolute */ + /* 2d */ + {AND, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */ + /* 2e */ + {ROL, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */ + /* 2f */ + {RLA, ABSOLUTE, M_ABS, M_ABS, 6, 0}, + + /* 30 */ + {BMI, RELATIVE, M_REL, M_NONE, 2, 0}, + /* 31 */ + {AND, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */ + /* 32 */ + {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ + /* 33 */ + {RLA, INDIRECT_Y, M_INDY, M_INDY, 8, 0}, + + /* 34 */ + {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0}, + /* 35 */ + {AND, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */ + /* 36 */ + {ROL, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */ + /* 37 */ + {RLA, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, + + /* 38 */ + {SEC, IMPLIED, M_NONE, M_FC, 2, 0}, + /* 39 */ + {AND, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */ + /* 3a */ + {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0}, + /* 3b */ + {RLA, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0}, + + /* 3c */ + {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1}, + /* 3d */ + {AND, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */ + /* 3e */ + {ROL, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */ + /* 3f */ + {RLA, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, + + /* 40 */ + {RTI, IMPLIED, M_NONE, M_PC, 6, 0}, + /* 41 */ + {EOR, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect,X) */ + /* 42 */ + {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ + /* 43 */ + {SRE, INDIRECT_X, M_INDX, M_INDX, 8, 0}, + + /* 44 */ + {NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0}, + /* 45 */ + {EOR, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */ + /* 46 */ + {LSR, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */ + /* 47 */ + {SRE, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, + + /* 48 */ + {PHA, IMPLIED, M_AC, M_NONE, 3, 0}, + /* 49 */ + {EOR, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */ + /* 4a */ + {LSR, ACCUMULATOR, M_AC, M_AC, 2, 0}, /* Accumulator */ + /* 4b */ + {ASR, IMMEDIATE, M_ACIM, M_AC, 2, 0}, /* (AC & IMM) >>1 */ + + /* 4c */ + {JMP, ABSOLUTE, M_ADDR, M_PC, 3, 0}, /* Absolute */ + /* 4d */ + {EOR, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */ + /* 4e */ + {LSR, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */ + /* 4f */ + {SRE, ABSOLUTE, M_ABS, M_ABS, 6, 0}, + + /* 50 */ + {BVC, RELATIVE, M_REL, M_NONE, 2, 0}, + /* 51 */ + {EOR, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */ + /* 52 */ + {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ + /* 53 */ + {SRE, INDIRECT_Y, M_INDY, M_INDY, 8, 0}, + + /* 54 */ + {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0}, + /* 55 */ + {EOR, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */ + /* 56 */ + {LSR, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */ + /* 57 */ + {SRE, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, + + /* 58 */ + {CLI, IMPLIED, M_NONE, M_FI, 2, 0}, + /* 59 */ + {EOR, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */ + /* 5a */ + {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0}, + /* 5b */ + {SRE, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0}, + + /* 5c */ + {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1}, + /* 5d */ + {EOR, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */ + /* 5e */ + {LSR, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */ + /* 5f */ + {SRE, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, + + /* 60 */ + {RTS, IMPLIED, M_NONE, M_PC, 6, 0}, + /* 61 */ + {ADC, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect,X) */ + /* 62 */ + {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ + /* 63 */ + {RRA, INDIRECT_X, M_INDX, M_INDX, 8, 0}, + + /* 64 */ + {NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0}, + /* 65 */ + {ADC, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */ + /* 66 */ + {ROR, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */ + /* 67 */ + {RRA, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, + + /* 68 */ + {PLA, IMPLIED, M_NONE, M_AC, 4, 0}, + /* 69 */ + {ADC, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */ + /* 6a */ + {ROR, ACCUMULATOR, M_AC, M_AC, 2, 0}, /* Accumulator */ + /* 6b */ + {ARR, IMMEDIATE, M_ACIM, M_AC, 2, 0}, /* ARR isn't typo */ + + /* 6c */ + {JMP, ABS_INDIRECT, M_AIND, M_PC, 5, 0}, /* Indirect */ + /* 6d */ + {ADC, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */ + /* 6e */ + {ROR, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */ + /* 6f */ + {RRA, ABSOLUTE, M_ABS, M_ABS, 6, 0}, + + /* 70 */ + {BVS, RELATIVE, M_REL, M_NONE, 2, 0}, + /* 71 */ + {ADC, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */ + /* 72 */ + {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT relative? */ + /* 73 */ + {RRA, INDIRECT_Y, M_INDY, M_INDY, 8, 0}, + + /* 74 */ + {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0}, + /* 75 */ + {ADC, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */ + /* 76 */ + {ROR, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */ + /* 77 */ + {RRA, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, + + /* 78 */ + {SEI, IMPLIED, M_NONE, M_FI, 2, 0}, + /* 79 */ + {ADC, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */ + /* 7a */ + {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0}, + /* 7b */ + {RRA, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0}, + + /* 7c */ + {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1}, + /* 7d */ + {ADC, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */ + /* 7e */ + {ROR, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */ + /* 7f */ + {RRA, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, + +/**** Negative ****/ + + /* 80 */ + {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0}, + /* 81 */ + {STA, INDIRECT_X, M_AC, M_INDX, 6, 0}, /* (Indirect,X) */ + /* 82 */ + {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0}, + /* 83 */ + {SAX, INDIRECT_X, M_ANXR, M_INDX, 6, 0}, + + /* 84 */ + {STY, ZERO_PAGE, M_YR, M_ZERO, 3, 0}, /* Zeropage */ + /* 85 */ + {STA, ZERO_PAGE, M_AC, M_ZERO, 3, 0}, /* Zeropage */ + /* 86 */ + {STX, ZERO_PAGE, M_XR, M_ZERO, 3, 0}, /* Zeropage */ + /* 87 */ + {SAX, ZERO_PAGE, M_ANXR, M_ZERO, 3, 0}, + + /* 88 */ + {DEY, IMPLIED, M_YR, M_YR, 2, 0}, + /* 89 */ + {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0}, + /* 8a */ + {TXA, IMPLIED, M_XR, M_AC, 2, 0}, +/**** very abnormal: usually AC = AC | #$EE & XR & #$oper ****/ + /* 8b */ + {ANE, IMMEDIATE, M_AXIM, M_AC, 2, 0}, + + /* 8c */ + {STY, ABSOLUTE, M_YR, M_ABS, 4, 0}, /* Absolute */ + /* 8d */ + {STA, ABSOLUTE, M_AC, M_ABS, 4, 0}, /* Absolute */ + /* 8e */ + {STX, ABSOLUTE, M_XR, M_ABS, 4, 0}, /* Absolute */ + /* 8f */ + {SAX, ABSOLUTE, M_ANXR, M_ABS, 4, 0}, + + /* 90 */ + {BCC, RELATIVE, M_REL, M_NONE, 2, 0}, + /* 91 */ + {STA, INDIRECT_Y, M_AC, M_INDY, 6, 0}, /* (Indirect),Y */ + /* 92 */ + {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT relative? */ + /* 93 */ + {SHA, INDIRECT_Y, M_ANXR, M_STH0, 6, 0}, + + /* 94 */ + {STY, ZERO_PAGE_X, M_YR, M_ZERX, 4, 0}, /* Zeropage,X */ + /* 95 */ + {STA, ZERO_PAGE_X, M_AC, M_ZERX, 4, 0}, /* Zeropage,X */ + /* 96 */ + {STX, ZERO_PAGE_Y, M_XR, M_ZERY, 4, 0}, /* Zeropage,Y */ + /* 97 */ + {SAX, ZERO_PAGE_Y, M_ANXR, M_ZERY, 4, 0}, + + /* 98 */ + {TYA, IMPLIED, M_YR, M_AC, 2, 0}, + /* 99 */ + {STA, ABSOLUTE_Y, M_AC, M_ABSY, 5, 0}, /* Absolute,Y */ + /* 9a */ + {TXS, IMPLIED, M_XR, M_SP, 2, 0}, +/*** This is very mysterious command ... */ + /* 9b */ + {SHS, ABSOLUTE_Y, M_ANXR, M_STH3, 5, 0}, + + /* 9c */ + {SHY, ABSOLUTE_X, M_YR, M_STH2, 5, 0}, + /* 9d */ + {STA, ABSOLUTE_X, M_AC, M_ABSX, 5, 0}, /* Absolute,X */ + /* 9e */ + {SHX, ABSOLUTE_Y, M_XR, M_STH1, 5, 0}, + /* 9f */ + {SHA, ABSOLUTE_Y, M_ANXR, M_STH1, 5, 0}, + + /* a0 */ + {LDY, IMMEDIATE, M_IMM, M_YR, 2, 0}, /* Immediate */ + /* a1 */ + {LDA, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (indirect,X) */ + /* a2 */ + {LDX, IMMEDIATE, M_IMM, M_XR, 2, 0}, /* Immediate */ + /* a3 */ + {LAX, INDIRECT_X, M_INDX, M_ACXR, 6, 0}, /* (indirect,X) */ + + /* a4 */ + {LDY, ZERO_PAGE, M_ZERO, M_YR, 3, 0}, /* Zeropage */ + /* a5 */ + {LDA, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */ + /* a6 */ + {LDX, ZERO_PAGE, M_ZERO, M_XR, 3, 0}, /* Zeropage */ + /* a7 */ + {LAX, ZERO_PAGE, M_ZERO, M_ACXR, 3, 0}, + + /* a8 */ + {TAY, IMPLIED, M_AC, M_YR, 2, 0}, + /* a9 */ + {LDA, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */ + /* aa */ + {TAX, IMPLIED, M_AC, M_XR, 2, 0}, + /* ab */ + {LXA, IMMEDIATE, M_ACIM, M_ACXR, 2, 0}, /* LXA isn't a typo */ + + /* ac */ + {LDY, ABSOLUTE, M_ABS, M_YR, 4, 0}, /* Absolute */ + /* ad */ + {LDA, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */ + /* ae */ + {LDX, ABSOLUTE, M_ABS, M_XR, 4, 0}, /* Absolute */ + /* af */ + {LAX, ABSOLUTE, M_ABS, M_ACXR, 4, 0}, + + /* b0 */ + {BCS, RELATIVE, M_REL, M_NONE, 2, 0}, + /* b1 */ + {LDA, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (indirect),Y */ + /* b2 */ + {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ + /* b3 */ + {LAX, INDIRECT_Y, M_INDY, M_ACXR, 5, 1}, + + /* b4 */ + {LDY, ZERO_PAGE_X, M_ZERX, M_YR, 4, 0}, /* Zeropage,X */ + /* b5 */ + {LDA, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */ + /* b6 */ + {LDX, ZERO_PAGE_Y, M_ZERY, M_XR, 4, 0}, /* Zeropage,Y */ + /* b7 */ + {LAX, ZERO_PAGE_Y, M_ZERY, M_ACXR, 4, 0}, + + /* b8 */ + {CLV, IMPLIED, M_NONE, M_FV, 2, 0}, + /* b9 */ + {LDA, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */ + /* ba */ + {TSX, IMPLIED, M_SP, M_XR, 2, 0}, + /* bb */ + {LAS, ABSOLUTE_Y, M_SABY, M_ACXS, 4, 1}, + + /* bc */ + {LDY, ABSOLUTE_X, M_ABSX, M_YR, 4, 1}, /* Absolute,X */ + /* bd */ + {LDA, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */ + /* be */ + {LDX, ABSOLUTE_Y, M_ABSY, M_XR, 4, 1}, /* Absolute,Y */ + /* bf */ + {LAX, ABSOLUTE_Y, M_ABSY, M_ACXR, 4, 1}, + + /* c0 */ + {CPY, IMMEDIATE, M_IMM, M_NONE, 2, 0}, /* Immediate */ + /* c1 */ + {CMP, INDIRECT_X, M_INDX, M_NONE, 6, 0}, /* (Indirect,X) */ + /* c2 */ + {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0}, /* occasional TILT */ + /* c3 */ + {DCP, INDIRECT_X, M_INDX, M_INDX, 8, 0}, + + /* c4 */ + {CPY, ZERO_PAGE, M_ZERO, M_NONE, 3, 0}, /* Zeropage */ + /* c5 */ + {CMP, ZERO_PAGE, M_ZERO, M_NONE, 3, 0}, /* Zeropage */ + /* c6 */ + {DEC, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */ + /* c7 */ + {DCP, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, + + /* c8 */ + {INY, IMPLIED, M_YR, M_YR, 2, 0}, + /* c9 */ + {CMP, IMMEDIATE, M_IMM, M_NONE, 2, 0}, /* Immediate */ + /* ca */ + {DEX, IMPLIED, M_XR, M_XR, 2, 0}, + /* cb */ + {SBX, IMMEDIATE, M_IMM, M_XR, 2, 0}, + + /* cc */ + {CPY, ABSOLUTE, M_ABS, M_NONE, 4, 0}, /* Absolute */ + /* cd */ + {CMP, ABSOLUTE, M_ABS, M_NONE, 4, 0}, /* Absolute */ + /* ce */ + {DEC, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */ + /* cf */ + {DCP, ABSOLUTE, M_ABS, M_ABS, 6, 0}, + + /* d0 */ + {BNE, RELATIVE, M_REL, M_NONE, 2, 0}, + /* d1 */ + {CMP, INDIRECT_Y, M_INDY, M_NONE, 5, 1}, /* (Indirect),Y */ + /* d2 */ + {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ + /* d3 */ + {DCP, INDIRECT_Y, M_INDY, M_INDY, 8, 0}, + + /* d4 */ + {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0}, + /* d5 */ + {CMP, ZERO_PAGE_X, M_ZERX, M_NONE, 4, 0}, /* Zeropage,X */ + /* d6 */ + {DEC, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */ + /* d7 */ + {DCP, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, + + /* d8 */ + {CLD, IMPLIED, M_NONE, M_FD, 2, 0}, + /* d9 */ + {CMP, ABSOLUTE_Y, M_ABSY, M_NONE, 4, 1}, /* Absolute,Y */ + /* da */ + {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0}, + /* db */ + {DCP, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0}, + + /* dc */ + {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1}, + /* dd */ + {CMP, ABSOLUTE_X, M_ABSX, M_NONE, 4, 1}, /* Absolute,X */ + /* de */ + {DEC, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */ + /* df */ + {DCP, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, + + /* e0 */ + {CPX, IMMEDIATE, M_IMM, M_NONE, 2, 0}, /* Immediate */ + /* e1 */ + {SBC, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect,X) */ + /* e2 */ + {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0}, + /* e3 */ + {ISB, INDIRECT_X, M_INDX, M_INDX, 8, 0}, + + /* e4 */ + {CPX, ZERO_PAGE, M_ZERO, M_NONE, 3, 0}, /* Zeropage */ + /* e5 */ + {SBC, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */ + /* e6 */ + {INC, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */ + /* e7 */ + {ISB, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, + + /* e8 */ + {INX, IMPLIED, M_XR, M_XR, 2, 0}, + /* e9 */ + {SBC, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */ + /* ea */ + {NOP, IMPLIED, M_NONE, M_NONE, 2, 0}, + /* eb */ + {USBC, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* same as e9 */ + + /* ec */ + {CPX, ABSOLUTE, M_ABS, M_NONE, 4, 0}, /* Absolute */ + /* ed */ + {SBC, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */ + /* ee */ + {INC, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */ + /* ef */ + {ISB, ABSOLUTE, M_ABS, M_ABS, 6, 0}, + + /* f0 */ + {BEQ, RELATIVE, M_REL, M_NONE, 2, 0}, + /* f1 */ + {SBC, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */ + /* f2 */ + {JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */ + /* f3 */ + {ISB, INDIRECT_Y, M_INDY, M_INDY, 8, 0}, + + /* f4 */ + {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0}, + /* f5 */ + {SBC, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */ + /* f6 */ + {INC, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */ + /* f7 */ + {ISB, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, + + /* f8 */ + {SED, IMPLIED, M_NONE, M_FD, 2, 0}, + /* f9 */ + {SBC, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */ + /* fa */ + {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0}, + /* fb */ + {ISB, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0}, + + /* fc */ + {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1}, + /* fd */ + {SBC, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */ + /* fe */ + {INC, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */ + /* ff */ + {ISB, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0} +}; diff --git a/MCUME_pico/picovcs/Tiasound.c b/MCUME_pico/picovcs/Tiasound.c new file mode 100644 index 0000000..1d87b6c --- /dev/null +++ b/MCUME_pico/picovcs/Tiasound.c @@ -0,0 +1,616 @@ +/*****************************************************************************/ +/* */ +/* Module: TIA Chip Sound Simulator */ +/* Purpose: To emulate the sound generation hardware of the Atari TIA chip. */ +/* Author: Ron Fries */ +/* */ +/* Revision History: */ +/* 10-Sep-96 - V1.0 - Initial Release */ +/* 14-Jan-97 - V1.1 - Cleaned up sound output by eliminating counter */ +/* reset. */ +/* */ +/*****************************************************************************/ +/* */ +/* License Information and Copyright Notice */ +/* ======================================== */ +/* */ +/* TiaSound is Copyright(c) 1996 by Ron Fries */ +/* */ +/* This library is free software; you can redistribute it and/or modify it */ +/* under the terms of version 2 of the GNU Library General Public License */ +/* as published by the Free Software Foundation. */ +/* */ +/* This library 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 Library */ +/* General Public License for more details. */ +/* To obtain a copy of the GNU Library General Public License, write to the */ +/* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +/* */ +/* Any permitted reproduction of these routines, in whole or in part, must */ +/* bear this legend. */ +/* */ +/*****************************************************************************/ +#include "Atari2600EmulatorGlobals.h" + +#include "emuapi.h" + + +/* define some data types to keep it platform independent */ +#define int8 char +#define int16 short +#define int32 int + +#define uint8 unsigned int8 +#define uint16 unsigned int16 +#define uint32 unsigned int32 + + +/* CONSTANT DEFINITIONS */ + +/* definitions for AUDCx (15, 16) */ +#define SET_TO_1 0x00 /* 0000 */ +#define POLY4 0x01 /* 0001 */ +#define DIV31_POLY4 0x02 /* 0010 */ +#define POLY5_POLY4 0x03 /* 0011 */ +#define PURE1 0x04 /* 0100 */ +#define PURE2 0x05 /* 0101 */ +#define DIV31_PURE 0x06 /* 0110 */ +#define POLY5_2 0x07 /* 0111 */ +#define POLY9 0x08 /* 1000 */ +#define POLY5 0x09 /* 1001 */ +#define DIV31_POLY5 0x0a /* 1010 */ +#define POLY5_POLY5 0x0b /* 1011 */ +#define DIV3_PURE 0x0c /* 1100 */ +#define DIV3_PURE2 0x0d /* 1101 */ +#define DIV93_PURE 0x0e /* 1110 */ +#define DIV3_POLY5 0x0f /* 1111 */ + +#define DIV3_MASK 0x0c + +#define AUDC0 0x15 +#define AUDC1 0x16 +#define AUDF0 0x17 +#define AUDF1 0x18 +#define AUDV0 0x19 +#define AUDV1 0x1a + +/* the size (in entries) of the 4 polynomial tables */ +#define POLY4_SIZE 0x000f +#define POLY5_SIZE 0x001f +#define POLY9_SIZE 0x01ff + +/* channel definitions */ +#define CHAN1 0 +#define CHAN2 1 + +//#define FALSE 0 +//#define TRUE 1 + + +/* LOCAL GLOBAL VARIABLE DEFINITIONS */ + +/* structures to hold the 6 tia sound control bytes */ +uint8 AUDC[2]; /* AUDCx (15, 16) */ +uint8 AUDF[2]; /* AUDFx (17, 18) */ +uint8 AUDV[2]; /* AUDVx (19, 1A) */ + +static uint8 Outvol[2]; /* last output volume for each channel */ + + +/* Initialze the bit patterns for the polynomials. */ + +/* The 4bit and 5bit patterns are the identical ones used in the tia chip. */ +/* Though the patterns could be packed with 8 bits per byte, using only a */ +/* single bit per byte keeps the math simple, which is important for */ +/* efficient processing. */ + +static uint8 Bit4[POLY4_SIZE] = + { 1,1,0,1,1,1,0,0,0,0,1,0,1,0,0 }; + +static uint8 Bit5[POLY5_SIZE] = + { 0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,1 }; + +/* I've treated the 'Div by 31' counter as another polynomial because of */ +/* the way it operates. It does not have a 50% duty cycle, but instead */ +/* has a 13:18 ratio (of course, 13+18 = 31). This could also be */ +/* implemented by using counters. */ + +static uint8 Div31[POLY5_SIZE] = + { 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 }; + +/* Rather than have a table with 511 entries, I use a random number */ +/* generator. */ + +static uint8 Bit9[POLY9_SIZE]; + +static uint8 P4[2]; /* Position pointer for the 4-bit POLY array */ +static uint8 P5[2]; /* Position pointer for the 5-bit POLY array */ +static uint16 P9[2]; /* Position pointer for the 9-bit POLY array */ + +static uint8 Div_n_cnt[2]; /* Divide by n counter. one for each channel */ +static uint8 Div_n_max[2]; /* Divide by n maximum, one for each channel */ + + +/* In my routines, I treat the sample output as another divide by N counter. */ +/* For better accuracy, the Samp_n_cnt has a fixed binary decimal point */ +/* which has 8 binary digits to the right of the decimal point. */ + +static uint16 Samp_n_max; /* Sample max, multiplied by 256 */ +static uint16 Samp_n_cnt; /* Sample cnt. */ + +extern unsigned char *sounddata; +/*****************************************************************************/ +/* Module: Tia_sound_init() */ +/* Purpose: to handle the power-up initialization functions */ +/* these functions should only be executed on a cold-restart */ +/* */ +/* Author: Ron Fries */ +/* Date: September 10, 1996 */ +/* */ +/* Inputs: sample_freq - the value for the '30 Khz' Tia audio clock */ +/* playback_freq - the playback frequency in samples per second */ +/* */ +/* Outputs: Adjusts local globals - no return value */ +/* */ +/*****************************************************************************/ + +void Tia_sound_init (uint16 sample_freq, uint16 playback_freq) +{ + uint8 chan; + int16 n; + + /* fill the 9bit polynomial with random bits */ + for (n=0; n 1) + { + /* decrement and loop */ + Div_n_cnt[chan]--; + } + /* otherwise if we've reached the bottom */ + else if (Div_n_cnt[chan] == 1) + { + /* reset the counter */ + Div_n_cnt[chan] = Div_n_max[chan]; + + /* the P5 counter has multiple uses, so we inc it here */ + P5[chan]++; + if (P5[chan] == POLY5_SIZE) + P5[chan] = 0; + + /* check clock modifier for clock tick */ + + /* if we're using pure tones OR + we're using DIV31 and the DIV31 bit is set OR + we're using POLY5 and the POLY5 bit is set */ + if (((AUDC[chan] & 0x02) == 0) || + (((AUDC[chan] & 0x01) == 0) && Div31[P5[chan]]) || + (((AUDC[chan] & 0x01) == 1) && Bit5[P5[chan]])) + { + if (AUDC[chan] & 0x04) /* pure modified clock selected */ + { + if (Outvol[chan]) /* if the output was set */ + Outvol[chan] = 0; /* turn it off */ + else + Outvol[chan] = AUDV[chan]; /* else turn it on */ + } + else if (AUDC[chan] & 0x08) /* check for p5/p9 */ + { + if (AUDC[chan] == POLY9) /* check for poly9 */ + { + /* inc the poly9 counter */ + P9[chan]++; + if (P9[chan] == POLY9_SIZE) + P9[chan] = 0; + + if (Bit9[P9[chan]]) /* if poly9 bit is set */ + Outvol[chan] = AUDV[chan]; + else + Outvol[chan] = 0; + } + else /* must be poly5 */ + { + if (Bit5[P5[chan]]) + Outvol[chan] = AUDV[chan]; + else + Outvol[chan] = 0; + } + } + else /* poly4 is the only remaining option */ + { + /* inc the poly4 counter */ + P4[chan]++; + if (P4[chan] == POLY4_SIZE) + P4[chan] = 0; + + if (Bit4[P4[chan]]) + Outvol[chan] = AUDV[chan]; + else + Outvol[chan] = 0; + } + } + } + } + + /* decrement the sample counter - value is 256 since the lower + byte contains the fractional part */ + Samp_n_cnt -= 256; + + /* if the count down has reached zero */ + if (Samp_n_cnt < 256) + { + /* adjust the sample counter */ + Samp_n_cnt += Samp_n_max; + + /* calculate the latest output value and place in buffer */ + *(buffer++) = Outvol[0] + Outvol[1]; + /* and indicate one less byte to process */ + n--; + } + } +} + + +/*****************************************************************************/ +/* Module: Tia_process() */ +/* Purpose: To fill the output buffer with the sound output based on the */ +/* tia chip parameters. This routine has been optimized. */ +/* */ +/* Author: Ron Fries */ +/* Date: September 10, 1996 */ +/* */ +/* Inputs: *buffer - pointer to the buffer where the audio output will */ +/* be placed */ +/* n - size of the playback buffer */ +/* */ +/* Outputs: the buffer will be filled with n bytes of audio - no return val */ +/* */ +/*****************************************************************************/ + +void Tia_process_2 ( unsigned short *buffer, uint16 n) +{ + uint8 audc0,audv0,audc1,audv1; + uint8 div_n_cnt0,div_n_cnt1; + uint8 p5_0, p5_1,outvol_0,outvol_1; + + audc0 = AUDC[0]; + audv0 = AUDV[0]; + audc1 = AUDC[1]; + audv1 = AUDV[1]; + + /* make temporary local copy */ + p5_0 = P5[0]; + p5_1 = P5[1]; + outvol_0 = Outvol[0]; + outvol_1 = Outvol[1]; + div_n_cnt0 = Div_n_cnt[0]; + div_n_cnt1 = Div_n_cnt[1]; + + /* loop until the buffer is filled */ + while (n) + { + /* Process channel 0 */ + if (div_n_cnt0 > 1) + { + div_n_cnt0--; + } + else if (div_n_cnt0 == 1) + { + div_n_cnt0 = Div_n_max[0]; + + /* the P5 counter has multiple uses, so we inc it here */ + p5_0++; + if (p5_0 == POLY5_SIZE) + p5_0 = 0; + + /* check clock modifier for clock tick */ + if (((audc0 & 0x02) == 0) || + (((audc0 & 0x01) == 0) && Div31[p5_0]) || + (((audc0 & 0x01) == 1) && Bit5[p5_0])) + { + if (audc0 & 0x04) /* pure modified clock selected */ + { + if (outvol_0) /* if the output was set */ + outvol_0 = 0; /* turn it off */ + else + outvol_0 = audv0; /* else turn it on */ + } + else if (audc0 & 0x08) /* check for p5/p9 */ + { + if (audc0 == POLY9) /* check for poly9 */ + { + /* inc the poly9 counter */ + P9[0]++; + if (P9[0] == POLY9_SIZE) + P9[0] = 0; + + if (Bit9[P9[0]]) + outvol_0 = audv0; + else + outvol_0 = 0; + } + else /* must be poly5 */ + { + if (Bit5[p5_0]) + outvol_0 = audv0; + else + outvol_0 = 0; + } + } + else /* poly4 is the only remaining option */ + { + /* inc the poly4 counter */ + P4[0]++; + if (P4[0] == POLY4_SIZE) + P4[0] = 0; + + if (Bit4[P4[0]]) + outvol_0 = audv0; + else + outvol_0 = 0; + } + } + } + + + /* Process channel 1 */ + if (div_n_cnt1 > 1) + { + div_n_cnt1--; + } + else if (div_n_cnt1 == 1) + { + div_n_cnt1 = Div_n_max[1]; + + /* the P5 counter has multiple uses, so we inc it here */ + p5_1++; + if (p5_1 == POLY5_SIZE) + p5_1 = 0; + + /* check clock modifier for clock tick */ + if (((audc1 & 0x02) == 0) || + (((audc1 & 0x01) == 0) && Div31[p5_1]) || + (((audc1 & 0x01) == 1) && Bit5[p5_1])) + { + if (audc1 & 0x04) /* pure modified clock selected */ + { + if (outvol_1) /* if the output was set */ + outvol_1 = 0; /* turn it off */ + else + outvol_1 = audv1; /* else turn it on */ + } + else if (audc1 & 0x08) /* check for p5/p9 */ + { + if (audc1 == POLY9) /* check for poly9 */ + { + /* inc the poly9 counter */ + P9[1]++; + if (P9[1] == POLY9_SIZE) + P9[1] = 0; + + if (Bit9[P9[1]]) + outvol_1 = audv1; + else + outvol_1 = 0; + } + else /* must be poly5 */ + { + if (Bit5[p5_1]) + outvol_1 = audv1; + else + outvol_1 = 0; + } + } + else /* poly4 is the only remaining option */ + { + /* inc the poly4 counter */ + P4[1]++; + if (P4[1] == POLY4_SIZE) + P4[1] = 0; + + if (Bit4[P4[1]]) + outvol_1 = audv1; + else + outvol_1 = 0; + } + } + } + + /* decrement the sample counter - value is 256 since the lower + byte contains the fractional part */ + Samp_n_cnt -= 256; + + /* if the count down has reached zero */ + if (Samp_n_cnt < 256) + { + /* adjust the sample counter */ + Samp_n_cnt += Samp_n_max; + + /* calculate the latest output value and place in buffer */ + *(buffer++) = (outvol_0 + outvol_1)*256; + + /* and indicate one less byte to process */ + n--; + } + } + + /* save for next round */ + P5[0] = p5_0; + P5[1] = p5_1; + Outvol[0] = outvol_0; + Outvol[1] = outvol_1; + Div_n_cnt[0] = div_n_cnt0; + Div_n_cnt[1] = div_n_cnt1; + +} + + + diff --git a/MCUME_pico/picovcs/Vcsemu.c b/MCUME_pico/picovcs/Vcsemu.c new file mode 100644 index 0000000..559299a --- /dev/null +++ b/MCUME_pico/picovcs/Vcsemu.c @@ -0,0 +1,72 @@ +#include "options.h" +#include "vcsemu.h" +#include "types.h" +#include "vmachine.h" + +#include "emuapi.h" + +/**************************************************************************** +* Local macros / typedefs +****************************************************************************/ + +/**************************************************************************** +* Global data +****************************************************************************/ + +/**************************************************************************** +* Imported procedures +****************************************************************************/ +extern void mainloop(void); + +/**************************************************************************** +* Local procedures +****************************************************************************/ + +/**************************************************************************** +* Exported procedures +****************************************************************************/ +void emu_KeyboardOnDown(int keymodifer, int key) { +} + +void emu_KeyboardOnUp(int keymodifer, int key) { +} + +void vcs_Init(void) +{ + init_machine(); + init_hardware(); + tv_on(); +} + + +void vcs_Start(char * filename) +{ + int size = emu_LoadFile(filename, (char *)theCart, 16384); + + + if (size > 16384) + size = 16384; + + rom_size = size; + if (size == 2048) + { + memcpy (&theCart[2048], &theCart[0], 2048); + rom_size = 4096; + } + else if (size < 2048) + { + theCart[0x0ffc] = 0x00; + theCart[0x0ffd] = 0xf0; + rom_size = 4096; + } + + init_hardware(); + init_banking(); +} + + +void vcs_Step(void) +{ + //emu_printf("s"); + mainloop(); +} diff --git a/MCUME_pico/picovcs/Vcsemu.h b/MCUME_pico/picovcs/Vcsemu.h new file mode 100644 index 0000000..5811f77 --- /dev/null +++ b/MCUME_pico/picovcs/Vcsemu.h @@ -0,0 +1,9 @@ +extern void vcs_Init(void); +extern void vcs_Start(char * filename); +extern void vcs_Stop(void); +extern void vcs_Step(void); + + + + + diff --git a/MCUME_pico/picovcs/Vmachine.c b/MCUME_pico/picovcs/Vmachine.c new file mode 100644 index 0000000..09aa293 --- /dev/null +++ b/MCUME_pico/picovcs/Vmachine.c @@ -0,0 +1,731 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for details. + + $Id: vmachine.c,v 2.22 1997/11/22 14:27:47 ahornby Exp $ +******************************************************************************/ +//This file was modified from its original version for use in PocketVCS +// by Stuart Russell + +/* + The virtual machine. Contains the RIOT timer code, and hardware + initialisation. + */ + +#include +#include "types.h" +#include "address.h" +#include "options.h" +#include "display.h" +#include "raster.h" +#include "cpu.h" +#include "collision.h" +#include "sound.h" +#include "vmachine.h" +#include "tiasound.h" + +#include "emuapi.h" + +#define snd 1 + +extern void BlitScreen(void); +extern int nOptions_SoundBufSize; +extern int nOptions_SoundOn; +int Touchpadx=0; +int Touchpady=0; +//extern int Touchpadx; +//extern int Touchpady; +extern int nOptions_Landscape; +extern int nOptions_SkipFrames; + + + +/* The Rom define might need altering for paged carts */ +/* Enough for 16k carts */ +int rom_size; + +/* Used as a simple file buffer to store the data */ +// JMH +//BYTE theCart[16384]; +//BYTE theCart[4096]; +BYTE * theCart=0; + +/* Scratch area for those banking types that require memcpy() */ +//BYTE cartScratch[4096]; +BYTE * cartScratch=0; +/* Area for those carts containing RAM */ +//BYTE cartRam[1024]; +BYTE * cartRam=0; + +/* Pointer to start of ROM data */ +BYTE *theRom; + +BYTE theRam[128]; +BYTE tiaRead[0x0e]; +BYTE tiaWrite[0x2d]; +BYTE keypad[2][4]; + +/* These don't strictly need so much space */ +BYTE riotRead[0x298]; +BYTE riotWrite[0x298]; + +/* + Hardware addresses not programmer accessible + */ + +/* Set if whole emulator is reset */ +int reset_flag = 0; + +/* The timer resolution, can be 1,8,64,1024 */ +int timer_res = 32; +int timer_count = 0; +int timer_clks = 0; +extern CLOCK clk; +extern int beamadj; + +/* Electron beam position */ +int ebeamx, ebeamy, sbeamx; + +/* The state of the electron beam */ +#define VSYNCSTATE 1 +#define VBLANKSTATE 2 +#define HSYNCSTATE 4 +#define DRAWSTATE 8 +#define OVERSTATE 16 +int vbeam_state; /* 1 2 8 or 16 */ +int hbeam_state; /* 4 8 or 16 */ + +/* The tv size, varies with PAL/NTSC */ +int tv_width, tv_height, tv_vsync, tv_vblank, tv_overscan, tv_frame, tv_hertz, + tv_hsync; + + +PlayField pf[2]; + +Paddle paddle[4]; + +Player pl[2]; + +Missile ml[3]; + + + +#define MAXLIST 80 +/* The various display lists */ +struct RasterChange pl_change[2][MAXLIST], pf_change[1][MAXLIST], unified[MAXLIST]; + +/* The display list counters */ +int pl_change_count[2], pf_change_count[1], unified_count; + + +/*************************************************************************** + Let the functions begin! +****************************************************************************/ +void +init_machine (void) +{ + if (theCart == 0) theCart = (BYTE *)emu_Malloc(16384); + if (cartScratch == 0) cartScratch = (BYTE *)emu_Malloc(4096); + if (cartRam == 0) cartRam = (BYTE *)emu_Malloc(1024); +} + +/* Device independent screen initialisations */ +void +init_screen (void) +{ + + /* Set the electron beam to the top left */ + ebeamx = -tv_hsync; + ebeamy = 0; + sbeamx = 0; + vbeam_state = VSYNCSTATE; + hbeam_state = OVERSTATE; + + tv_vsync = 3; + tv_hsync = 68; + switch (base_opts.tvtype) + { + case NTSC: + tv_width = 160; + tv_height = 192; + tv_vblank = 40; + tv_overscan = 30; + tv_frame = 262; + tv_hertz = 60; + break; + case PAL: + case SECAM: + tv_width = 160; + tv_height = 228; + tv_vblank = 48; + tv_overscan = 36; + tv_frame = 312; + tv_hertz = 50; + break; + } + +} + +/* Displays the tv screen */ +void tv_display (void) +{ + /* Only display if the frame is a valid one. */ + //if ( (tv_counter % nOptions_SkipFrames) == 0) + //{ + emu_DrawScreen(VBuf, tv_width, tv_height, tv_width); + emu_DrawVsync(); + //} + //tv_counter++; +} + +/* Initialise the RIOT (also known as PIA) */ +void +init_riot (void) +{ + int i; + + /* Reset the arrays */ + for(i=0; i< 0x298;i++) + { + riotRead[i]=0; + riotWrite[i]=0; + } + + /* Wipe the RAM */ + for (i = 0; i < 0x80; i++) + theRam[i] = 0; + + /* Set the timer to zero */ + riotRead[INTIM] = 0; + + /* Set the joysticks and switches to input */ + riotWrite[SWACNT] = 0; + riotWrite[SWBCNT] = 0; + + /* Centre the joysticks */ + riotRead[SWCHA] = 0xff; + riotRead[SWCHB] = 0x0b; + + /* Set the counter resolution */ + timer_res = 32; + timer_count = 0; + timer_clks = 0; +} + +/* Initialise the television interface adaptor (TIA) */ +void +init_tia (void) +{ + int i; + for(i=0; i< 0x2d;i++) + { + tiaWrite[i]=0; + } + for(i=0; i< 0x0e;i++) + { + tiaRead[i]=0; + } + + tiaWrite[CTRLPF] = 0x00; + for (i = 0; i < 2; i++) + { + pl[i].hmm = 0x0; + pl[i].x = 0x0; + pl[i].nusize = 0; + pl[i].grp = 0; + pl[i].vdel = 0; + pl[i].vdel_flag = 0; + pl_change_count[i] = 0; + } + + pl[0].mask = PL0_MASK; + pl[1].mask = PL1_MASK; + ml[0].mask = ML0_MASK; + ml[1].mask = ML1_MASK; + reset_collisions (); + + pf_change_count[0] = 0; + unified_count = 0; + for (i = 0; i < 3; i++) + { + ml[i].x = 0; + ml[i].hmm = 0; + ml[i].enabled = 0; + ml[i].locked = 0; + ml[i].width = 0; + ml[i].vdel = 0; + ml[i].vdel_flag = 0; + } + + tiaWrite[VBLANK] = 0; + tiaRead[INPT4] = 0x80; + tiaRead[INPT5] = 0x80; + + /* Set up the colour table */ + colour_table[P0M0_COLOUR]= 0; + colour_table[P1M1_COLOUR]= 0; + colour_table[PFBL_COLOUR] = 0; + colour_table[BK_COLOUR] = 0; +} + +void +init_memory(void) +{ + int i; + for(i=0;i<1024; i++) + cartRam[i]=0; + for(i=0; i<128;i++) + theRam[i]=0; +} + +void +init_banking (void) +{ + /* Set to the first bank */ + //dbg_message(DBG_NORMAL, "rom_size is set at %d bytes\n", rom_size); + if (rom_size == 2048) + theRom = &theCart[rom_size - 2048]; + else + theRom = &theCart[rom_size - 4096]; + //JMH + //switch(base_opts.bank) + // { + // case 3: + // /* Parker Brothers 8k E0 */ + // memcpy(&cartScratch[0xc00],&theCart[0x1c00],1024); + // memcpy(&cartScratch[0],&theCart[0],3072); + // theRom=cartScratch; + // break; + // default: + // break; + // } +} + +extern void init_cpu( ADDRESS addr); + +/* Main hardware startup */ +void +init_hardware (void) +{ +// dbg_message(DBG_NORMAL,"Setting Up hardware\n"); + init_screen (); + init_riot (); + init_tia (); + init_raster (); + init_memory(); + init_banking(); + init_cpu (0xfffc); +} + +/* Do a raster change */ +__inline void +do_raster_change (int i, int type, int val, struct RasterChange *rc) +{ + rc->x = ebeamx + beamadj; + rc->type = type; + rc->val = val; +} + +/* Do a raster change on the unified list */ +/* type: type of change */ +/* val: value of change */ +__inline void +do_unified_change (int type, int val) +{ + if (unified_count < MAXLIST) + { + unified[unified_count].x = ebeamx + beamadj; + unified[unified_count].type = type; + unified[unified_count].val = val; + unified_count++; + } +} + +/* Do a player raster change */ +/* i: player to change. 0 or 1 */ +/* type: type of change */ +/* val: value of change */ +__inline void +do_plraster_change (int i, int type, int val) +{ + int plc = pl_change_count[i]; + /*printf("Raster change i=%d, x=%d, type=%d, val=%d\n", i, x, type, val); */ + if (plc < MAXLIST) + { + do_raster_change (i, type, val, &pl_change[i][plc]); + if (type == 1) + pl_change[i][plc].x -= 3; + pl_change_count[i]++; + } +} + +/* Do a playfield raster change */ +/* i: playfield to change. Depreciated, as 0 is now only one used */ +/* type: type of change */ +/* val: value of change */ +__inline void +do_pfraster_change (int i, int type, int val) +{ + int pfc = pf_change_count[i]; + /* + if(ebeamy>=100) { + printf("Raster change i=%d, x=%d, type=%d, val=%d\n", + i, ebeamx+beamadj, type, val); + //show(); + } + */ + if (pfc < MAXLIST) + { + do_raster_change (i, type, val, &pf_change[i][pfc]); + pf_change_count[i]++; + } +} + + +/* Use a unified change */ +/* rc: unified change structure to use */ +__inline void +use_unified_change (struct RasterChange *rc) +{ + switch (rc->type) + { + case 0: + /* P0MO colour */ + colour_table[P0M0_COLOUR] = rc->val; + break; + case 1: + /* POM0 colour */ + colour_table[P1M1_COLOUR] = rc->val; + break; + case 2: + /* PFBL colour */ + colour_table[PFBL_COLOUR] = rc->val; + break; + case 3: + /* BK colour */ + colour_table[BK_COLOUR] = rc->val; + break; + case 4: + /* Priority change Normal */ + if(rc->val) + norm_val=1; + else + norm_val=0; + colour_lookup=colour_ptrs[norm_val][scores_val]; + break; + case 5: + /* Priority change Scores */ + if(rc->val) + { + if(rc->x < 80) + scores_val=1; + else + scores_val=2; + } + else + scores_val=0; + colour_lookup=colour_ptrs[norm_val][scores_val]; + break; + } +} + +/* Use a playfield change */ +/* pl: playfield to change */ +/* rc: change to make */ +__inline void +use_pfraster_change (PlayField *pl, struct RasterChange *rc) +{ + switch (rc->type) + { + case 0: + /* PF0 */ + pl->pf0 = rc->val; + break; + case 1: + /* PF1 */ + pl->pf1 = rc->val; + break; + case 2: + /* PF2 */ + pl->pf2 = rc->val; + break; + case 3: + /* Reflection */ + pl->ref = rc->val; + break; + } +} + +/* Use a player change */ +/* pl: player to change */ +/* rc: change to make */ +__inline void +use_plraster_change ( Player *pl, struct RasterChange *rc) +{ + switch (rc->type) + { + case 0: + /* GRP */ + pl->grp = rc->val; + break; + /* Vertical delay */ + case 1: + pl->vdel = pl->grp; + break; + } +} + + +int +do_paddle (int padnum) +{ + int res = 0x00; + int x=0; + if ((tiaWrite[VBLANK] & 0x80) == 0) + { + if (!nOptions_Landscape){ + x=240-Touchpadx; + x=x*66; + if (paddle[padnum].val > x) + res=0x80; + + }else{ + x=320-Touchpady; + x=x*50; + if (paddle[padnum].val > x) + res=0x80; + } + + if (x > clk) + res = 0x00; + } + return res; +} + +/* Calculate the keypad rows */ +/* i.e. when reading from INPTx we don't know the row */ +BYTE +do_keypad (int pad, int col) +{ + BYTE res= 0x80; + +// read_keypad(pad); + + /* Bottom row */ + if(pad==0) { + if( (riotWrite[SWCHA] & 0x80) && keypad[pad][col]==3) + res=0x00; + /* Third row */ + if( (riotWrite[SWCHA] & 0x40) && keypad[pad][col]==2) + res=0x00; + if( (riotWrite[SWCHA] & 0x20) && keypad[pad][col]==1) + res=0x00; + if( (riotWrite[SWCHA] & 0x10) && keypad[pad][col]==0) + res=0x00; + } + else { + /* Bottom row */ + if( (riotWrite[SWCHA] & 0x80) && keypad[pad][col]==3) + res=0x00; + /* Third row */ + if( (riotWrite[SWCHA] & 0x40) && keypad[pad][col]==2) + res=0x00; + if( (riotWrite[SWCHA] & 0x20) && keypad[pad][col]==1) + res=0x00; + if( (riotWrite[SWCHA] & 0x10) && keypad[pad][col]==0) + res=0x00; + } + return res; +} + + +/* + Called when the timer is set . + Note that res is the bit shift, not absolute value. + Assumes that any timer interval set will last longer than the instruction + setting it. + */ +/* res: timer interval resolution as a bit shift value */ +/* count: the number of intervals to set */ +/* clkadj: the number of CPU cycles into the current instruction */ +void +set_timer (int res, int count, int clkadj) +{ + timer_count = count << res; + timer_clks = clk + clkadj; + timer_res = res; +} + +/* New timer code, now only called on a read of INTIM */ +/* clkadj: the number of CPU cycles into the current instruction */ +/* returns: the current timer value */ +BYTE +do_timer (int clkadj) +{ + BYTE result; + int delta; + int value; + + delta = clk - timer_clks; + value = delta >> timer_res; + if (delta <= timer_count) + { /* Timer is still going down in res intervals */ + result = value; + } + else + { + if (value == 0) + /* Timer is in holding period */ + result = 0; + else + { + /* Timer is descending from 0xff in clock intervals */ + set_timer (0, 0xff, clkadj); + result = 0; + } + } + + /* printf("Timer result=%d\n", result); */ + return result; +} + +#ifdef snd +//extern unsigned char *sounddata; +//#define SoundBufSize 256 +//unsigned char sounddata[SoundBufSize]; +#endif + +/* Do the screen related part of a write to VBLANK */ +/* b: the byte written */ +void +do_vblank (BYTE b) +{ + + if (b & 0x02) + { + /* Start vertical blank */ + vbeam_state = VBLANKSTATE; +#ifdef snd +// Tia_process(sounddata, SoundBufSize); +// CESound_play_sample(sounddata, nOptions_SoundBufSize); +#endif + /* Also means we can update screen */ + tv_display (); + } + else + { + /* End vblank, and start first hsync drawing */ + int i; + + vbeam_state = DRAWSTATE; + hbeam_state = HSYNCSTATE; + /* Set up the screen */ + for (i = 0; i < unified_count; i++) + use_unified_change (&unified[i]); + /* Hope for a WSYNC, but just in case */ + ebeamx = -tv_hsync; + ebeamy = 0; + } +} + + +//int count = 1; + +/* do a horizontal sync */ +void +do_hsync (void) +{ + /* Only perform heavy stuff if electron beam is in correct position */ + if (vbeam_state == DRAWSTATE && (ebeamx > -tv_hsync)) + { +// if (!(count--)) +// { +// count = 2; + tv_raster (ebeamy); + +// } + /* Fix the clock value */ + clk += (ebeamx - tv_width) / 3; + ebeamy++; + } + hbeam_state = HSYNCSTATE; + ebeamx = -tv_hsync; + sbeamx = 0; +} + +/* Main screen logic */ +/* clks: CPU clock length of last instruction */ +__inline void +do_screen (int clks) +{ + switch (vbeam_state) + { + case VSYNCSTATE: + case VBLANKSTATE: + switch (hbeam_state) + { + case HSYNCSTATE: + ebeamx += clks * 3; + if (ebeamx >= 0) + { + hbeam_state = DRAWSTATE; + } + break; + case DRAWSTATE: + ebeamx += clks * 3; + if (ebeamx >= tv_width) + { + ebeamx -= (tv_hsync + tv_width); + /* Insert hsync stuff here */ + sbeamx = ebeamx; + hbeam_state = HSYNCSTATE; + } + break; + case OVERSTATE: + break; + } + break; + case DRAWSTATE: + switch (hbeam_state) + { + case HSYNCSTATE: + ebeamx += clks * 3; + if (ebeamx >= 0) + { + hbeam_state = DRAWSTATE; + } + break; + case DRAWSTATE: + ebeamx += clks * 3; + if (ebeamx >= tv_width) + { + /* Insert hsync stuff here */ + sbeamx = ebeamx; + ebeamx -= (tv_hsync + tv_width); + tv_raster (ebeamy); + ebeamy++; + hbeam_state = HSYNCSTATE; + } + if (ebeamy >= tv_height + tv_overscan) + { + vbeam_state = OVERSTATE; + ebeamy = 0; + } + break; + case OVERSTATE: + break; + } + break; + case OVERSTATE: + break; + } +} + diff --git a/MCUME_pico/picovcs/address.h b/MCUME_pico/picovcs/address.h new file mode 100644 index 0000000..1d694e4 --- /dev/null +++ b/MCUME_pico/picovcs/address.h @@ -0,0 +1,110 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for details. + + $Id: address.h,v 1.4 1996/04/01 14:51:50 alex Exp $ +******************************************************************************/ + +#ifndef ADDRESS_H +#define ADDRESS_H + +/* Contains the addresses of the 2600 hardware */ +/* $Id: address.h,v 1.4 1996/04/01 14:51:50 alex Exp $ */ + +/* TIA Write Addresses (6 bit) */ + +#define VSYNC 0x00 +#define VBLANK 0x01 +#define WSYNC 0x02 +#define RSYNC 0x03 +#define NUSIZ0 0x04 +#define NUSIZ1 0x05 +#define COLUP0 0x06 +#define COLUP1 0x07 +#define COLUPF 0x08 +#define COLUBK 0x09 +#define CTRLPF 0x0A +#define REFP0 0x0B +#define REFP1 0x0C +#define PF0 0x0D +#define PF1 0x0E +#define PF2 0x0F +#define RESP0 0x10 +#define RESP1 0x11 +#define RESM0 0x12 +#define RESM1 0x13 +#define RESBL 0x14 +#define AUDC0 0x15 +#define AUDC1 0x16 +#define AUDF0 0x17 +#define AUDF1 0x18 +#define AUDV0 0x19 +#define AUDV1 0x1A +#define GRP0 0x1B +#define GRP1 0x1C +#define ENAM0 0x1D +#define ENAM1 0x1E +#define ENABL 0x1F +#define HMP0 0x20 +#define HMP1 0x21 +#define HMM0 0x22 +#define HMM1 0x23 +#define HMBL 0x24 +#define VDELP0 0x25 +#define VDELP1 0x26 +#define VDELBL 0x27 +#define RESMP0 0x28 +#define RESMP1 0x29 +#define HMOVE 0x2A +#define HMCLR 0x2B +#define CXCLR 0x2C + +/* TIA Read Addresses */ +#define CXM0P 0x0 +#define CXM1P 0x1 +#define CXP0FB 0x2 +#define CXP1FB 0x3 +#define CXM0FB 0x4 +#define CXM1FB 0x5 +#define CXBLPF 0x6 +#define CXPPMM 0x7 +#define INPT0 0x8 +#define INPT1 0x9 +#define INPT2 0xA +#define INPT3 0xB +#define INPT4 0xC +#define INPT5 0xD + +/* RIOT Addresses */ + +#define RAM 0x80 /* till 0xff */ +#define SWCHA 0x280 +#define SWACNT 0x281 +#define SWCHB 0x282 +#define SWBCNT 0x283 +#define INTIM 0x284 + +#define TIM1T 0x294 +#define TIM8T 0x295 +#define TIM64T 0x296 +#define T1024T 0x297 + +#define ROM 0xE000 /* To FFFF,0x1000-1FFF */ + +#endif + + + + + + + + diff --git a/MCUME_pico/picovcs/btypes.h b/MCUME_pico/picovcs/btypes.h new file mode 100644 index 0000000..6431958 --- /dev/null +++ b/MCUME_pico/picovcs/btypes.h @@ -0,0 +1,47 @@ +#ifndef BASICTYPES_H +#define BASICTYPES_H + +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef unsigned long uint32; + +typedef signed char int8; +typedef signed short int16; +typedef signed long int32; + + +typedef unsigned char byte; +typedef unsigned short word; +typedef signed char offset; +typedef union +{ +#ifdef LSB_FIRST + struct { unsigned long l,h; } DW; +#else + struct { unsigned long h,l; } DW; +#endif +// unsigned long long LL; +} ullong; + +typedef union +{ +#ifdef LSB_FIRST + struct { byte l,h,a,b; } B; +#else + struct { byte b,a,h,l; } B; +#endif + unsigned long DW; +} dpair; + +typedef union +{ +#ifdef LSB_FIRST + struct { byte l,h; } B; +#else + struct { byte h,l; } B; +#endif + word W; +} pair; +//END Added from NES + +#endif diff --git a/MCUME_pico/picovcs/c26def.h b/MCUME_pico/picovcs/c26def.h new file mode 100644 index 0000000..5f479e9 --- /dev/null +++ b/MCUME_pico/picovcs/c26def.h @@ -0,0 +1,101 @@ +#ifndef C26DEF_H +#define C26DEF_H + +/* + Common 2600 (.c26) format v1.0 specification + ------------------------------------- + Alex Hornby, ahornby@zetnet.co.uk + + + Introduction + ============ + + Common 2600 file format definitions. For discussion and suggestions for + improvement, e-mail ahornby@zetnet.co.uk. I would like to see a fully + comprehensive 2600 file format develop so please copy this structure + and use it in your emulators. + + The format has been developed due to the multitude of different banking + schemes for 2600 cartridges, along with the need to select an appropriate + control device for each game. Using the .c26 format you will be able to + load games without giving loads of command line switches. + + Philosophy + ========== + To avoid the format splitting into several competing ones, please do + not alter the format without discussing it first. I'm not trying to be + bossy, just to keep the common format truly common. + + Tags + ==== + The format is tagged so as to be extensible and allow both forward and + backward compatibility. It also means that information that is not + needed or known does not have to be stored. e.g. If the cartridge image + is not a saved game then I do not need the game state tags. + + The format is a system of tags each being a tag type and the length of + data in that section. If a tag is not recognised then it should + be ignored. Each tag is a zero terminated string followed by a 32bit + signed integer describing the length. If the tag is small the the length + integer can constitute the data item. + + Case is NOT important in tag names + + Cross Platform Notes + ==================== + Note that integers are stored in the Intel/DEC Alpha style. + All strings are zero terminated . +*/ + +/* + Defined TAGS + ============ + + + Audit tags: All files should include these tags at the start of the file. + + VERSION: Gives file format version as an integer. Currently 1 + WRITER: Name of program that wrote file. + + + Cartridge Information tags: useful for collectors. + + CARTNAME: Name of cartridge. + CARTMAN: Manufacturer of cartridge. + CARTAUTHOR: Name of programmer/programming team who wrote cartridge. + CARTSERIAL: Serial number of the cartridge. + + + Cartridge operation tags: necessary for the running of the game. + + TVTYPE: integer, 0=NTSC 1=PAL. + CONTROLLERS: Left controller BYTE then Right controller BYTE. + BANKING: Bank switching scheme. + DATA: Cartridge ROM data. + + + Game state tags: used for saved games. + + CPUREGS: CPU registers. + GAMEREGS: TIA and PIA registers. + PIARAM: The 128 bytes of RAM from the PIA. + + CARTRAM: Cartridge RAM, if supported by the BANKING type + + */ +enum TAGTYPE { VERSION=-1, WRITER=1, + CARTNAME=2, CARTMAN=3, CARTAUTHOR=4, CARTSERIAL=5, + TVTYPE=-2, CONTROLLERS=-3, BANKING=-4, DATA=6, + CPUREGS=7, GAMEREGS=8, PIARAM=9, CARTRAM=10 }; + +char *tag_desc[]={ "VERSION", "WRITER", + "CARTNAME", "CARTMAN", "CARTAUTHOR", "CARTSERIAL", + "TVTYPE", "CONTROLLERS", "BANKING", "DATA", + "CPUREGS", "GAMEREGS", "PIARAM", "CARTRAM"}; + + +/* Tag structure */ + +struct c26_tag { + int type; + int len; +}; + + +#endif diff --git a/MCUME_pico/picovcs/col_mask.h b/MCUME_pico/picovcs/col_mask.h new file mode 100644 index 0000000..d8d0558 --- /dev/null +++ b/MCUME_pico/picovcs/col_mask.h @@ -0,0 +1,45 @@ +#ifndef COL_MASK_H +#define COL_MASK_H + +#define PL0_MASK 0x01 +#define PL1_MASK 0x02 +#define ML0_MASK 0x04 +#define ML1_MASK 0x08 +#define BL_MASK 0x10 +#define PF_MASK 0x20 +#define PF_MASK32 0x20202020 + +#define M0P0_MASK 0x01 +#define M0P1_MASK 0x02 + +#define M1P1_MASK 0x04 +#define M1P0_MASK 0x08 + +#define P0BL_MASK 0x10 +#define P0PF_MASK 0x20 + +#define P1BL_MASK 0x40 +#define P1PF_MASK 0x80 + +#define M0BL_MASK 0x100 +#define M0PF_MASK 0x200 + +#define M1BL_MASK 0x400 +#define M1PF_MASK 0x800 + +#define BLPF_MASK 0x1000 + +#define M0M1_MASK 0x2000 +#define P0P1_MASK 0x4000 + +#define CXM0P_MASK (M0P1_MASK | M0P0_MASK) +#define CXM1P_MASK (M1P0_MASK | M1P1_MASK) +#define CXP0FB_MASK (P0PF_MASK | P0BL_MASK) +#define CXP1FB_MASK (P1PF_MASK | P1BL_MASK) +#define CXM0FB_MASK (M0PF_MASK | M0BL_MASK) +#define CXM1FB_MASK (M1PF_MASK | M1BL_MASK) +#define CXBLPF_MASK BLPF_MASK +#define CXPPMM_MASK (P0P1_MASK | M0M1_MASK) + +#endif + diff --git a/MCUME_pico/picovcs/collision.h b/MCUME_pico/picovcs/collision.h new file mode 100644 index 0000000..b2d5466 --- /dev/null +++ b/MCUME_pico/picovcs/collision.h @@ -0,0 +1,49 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for details. + + $Id: collision.h,v 1.5 1996/08/29 16:03:24 ahornby Exp $ +******************************************************************************/ + +/* + Defines for the hardware collision detection. + */ + +//#ifndef COLLISION_H +#define COLLISION_H + +#include "col_mask.h" + +/* The collsion vector */ +extern BYTE* colvect; + +/* The collision lookup table */ +extern unsigned short col_table[256]; + +/* The collision state */ +extern unsigned short col_state; + +extern void +init_collisions(void); + +extern __inline void +reset_collisions(void); + +extern int +set_collisions(BYTE b); + +//#endif + + + + + + diff --git a/MCUME_pico/picovcs/colours.h b/MCUME_pico/picovcs/colours.h new file mode 100644 index 0000000..c935b76 --- /dev/null +++ b/MCUME_pico/picovcs/colours.h @@ -0,0 +1,102 @@ +static long colortable[256] = +{ + /* Grey */ + 0x0, 0x1c1c1c, 0x393939, 0x595959, + 0x797979, 0x929292, 0xababab, 0xbcbcbc, + 0xcdcdcd, 0xd9d9d9, 0xe6e6e6, 0xececec, + 0xf2f2f2, 0xf8f8f8, 0xffffff, 0xffffff, + + /* Gold */ + 0x391701, 0x5e2304, 0x833008, 0xa54716, + 0xc85f24, 0xe37820, 0xff911d, 0xffab1d, + 0xffc51d, 0xffce34, 0xffd84c, 0xffe651, + 0xfff456, 0xfff977, 0xffff98, 0xffff98, + + /* Orange */ + 0x451904, 0x721e11, 0x9f241e, 0xb33a20, + 0xc85122, 0xe36920, 0xff811e, 0xff8c25, + 0xff982c, 0xffae38, 0xffc545, 0xffc559, + 0xffc66d, 0xffd587, 0xffe4a1, 0xffe4a1, + + /* Red Orange */ + 0x4a1704, 0x7e1a0d, 0xb21d17, 0xc82119, + 0xdf251c, 0xec3b38, 0xfa5255, 0xfc6161, + 0xff706e, 0xff7f7e, 0xff8f8f, 0xff9d9e, + 0xffabad, 0xffb9bd, 0xffc7ce, 0xffc7ce, + + /* Pink */ + 0x50568, 0x3b136d, 0x712272, 0x8b2a8c, + 0xa532a6, 0xb938ba, 0xcd3ecf, 0xdb47dd, + 0xea51eb, 0xf45ff5, 0xfe6dff, 0xfe7afd, + 0xff87fb, 0xff95fd, 0xffa4ff, 0xffa4ff, + + /* Purple */ + 0x280479, 0x400984, 0x590f90, 0x70249d, + 0x8839aa, 0xa441c3, 0xc04adc, 0xd054ed, + 0xe05eff, 0xe96dff, 0xf27cff, 0xf88aff, + 0xff98ff, 0xfea1ff, 0xfeabff, 0xfeabff, + + /* Blue Purple */ + 0x35088a, 0x420aad, 0x500cd0, 0x6428d0, + 0x7945d0, 0x8d4bd4, 0xa251d9, 0xb058ec, + 0xbe60ff, 0xc56bff, 0xcc77ff, 0xd183ff, + 0xd790ff, 0xdb9dff, 0xdfaaff, 0xdfaaff, + + /* Blue */ + 0x51e81, 0x626a5, 0x82fca, 0x263dd4, + 0x444cde, 0x4f5aee, 0x5a68ff, 0x6575ff, + 0x7183ff, 0x8091ff, 0x90a0ff, 0x97a9ff, + 0x9fb2ff, 0xafbeff, 0xc0cbff, 0xc0cbff, + + /* Blue */ + 0xc048b, 0x2218a0, 0x382db5, 0x483ec7, + 0x584fda, 0x6159ec, 0x6b64ff, 0x7a74ff, + 0x8a84ff, 0x918eff, 0x9998ff, 0xa5a3ff, + 0xb1aeff, 0xb8b8ff, 0xc0c2ff, 0xc0c2ff, + + /* Light Blue */ + 0x1d295a, 0x1d3876, 0x1d4892, 0x1c5cac, + 0x1c71c6, 0x3286cf, 0x489bd9, 0x4ea8ec, + 0x55b6ff, 0x70c7ff, 0x8cd8ff, 0x93dbff, + 0x9bdfff, 0xafe4ff, 0xc3e9ff, 0xc3e9ff, + + /* Turquoise */ + 0x2f4302, 0x395202, 0x446103, 0x417a12, + 0x3e9421, 0x4a9f2e, 0x57ab3b, 0x5cbd55, + 0x61d070, 0x69e27a, 0x72f584, 0x7cfa8d, + 0x87ff97, 0x9affa6, 0xadffb6, 0xadffb6, + + /* Green blue */ + 0xa4108, 0xd540a, 0x10680d, 0x137d0f, + 0x169212, 0x19a514, 0x1cb917, 0x1ec919, + 0x21d91b, 0x47e42d, 0x6ef040, 0x78f74d, + 0x83ff5b, 0x9aff7a, 0xb2ff9a, 0xb2ff9a, + + /* Green */ + 0x4410b, 0x5530e, 0x66611, 0x77714, + 0x88817, 0x99b1a, 0xbaf1d, 0x48c41f, + 0x86d922, 0x8fe924, 0x99f927, 0xa8fc41, + 0xb7ff5b, 0xc9ff6e, 0xdcff81, 0xdcff81, + + /* Yellow Green */ + 0x2350f, 0x73f15, 0xc4a1c, 0x2d5f1e, + 0x4f7420, 0x598324, 0x649228, 0x82a12e, + 0xa1b034, 0xa9c13a, 0xb2d241, 0xc4d945, + 0xd6e149, 0xe4f04e, 0xf2ff53, 0xf2ff53, + + /* Orange Green */ + 0x263001, 0x243803, 0x234005, 0x51541b, + 0x806931, 0x978135, 0xaf993a, 0xc2a73e, + 0xd5b543, 0xdbc03d, 0xe1cb38, 0xe2d836, + 0xe3e534, 0xeff258, 0xfbff7d, 0xfbff7d, + + /* Light Orange */ + 0x401a02, 0x581f05, 0x702408, 0x8d3a13, + 0xab511f, 0xb56427, 0xbf7730, 0xd0853a, + 0xe19344, 0xeda04e, 0xf9ad58, 0xfcb75c, + 0xffc160, 0xffc671, 0xffcb83, 0xffcb83, +}; + + + + diff --git a/MCUME_pico/picovcs/cpu.h b/MCUME_pico/picovcs/cpu.h new file mode 100644 index 0000000..95a4b70 --- /dev/null +++ b/MCUME_pico/picovcs/cpu.h @@ -0,0 +1,182 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for details. + + $Id: cpu.h,v 1.6 1997/11/22 14:29:54 ahornby Exp $ +******************************************************************************/ +/* + * + * This file was part of x64. + * + * This file contains useful stuff when you are creating + * virtual machine like MCS6510 based microcomputer. + * + * Included are: + * o registers + * o flags in PSW + * o addressing modes + * + * Written by + * Vesa-Matti Puro (vmp@lut.fi) + * Jarkko Sonninen (sonninen@lut.fi) + * Jouko Valta (jopi@stekt.oulu.fi) + * + * + */ + +#ifndef X2600_CPU_H +#define X2600_CPU_H + +#include "types.h" + +/* 6507 Registers. */ +#define AC accumulator +#define XR x_register +#define YR y_register +#define SP stack_pointer +#define pc6507 program_counter +#define PCH ((pc6507>>8)&0xff) +#define PCL (pc6507&0xff) + +#define ZF zero_flag +#define SF sign_flag +#define OF overflow_flag +#define BF break_flag +#define DF decimal_flag +#define IF interrupt_flag +#define CF carry_flag + + +/* Masks which indicate location of status flags in PSW. */ +#define S_SIGN 0x80 +#define S_OVERFLOW 0x40 +#define S_NOTUSED 0x20 +#define S_BREAK 0x10 +#define S_DECIMAL 0x08 +#define S_INTERRUPT 0x04 +#define S_ZERO 0x02 +#define S_CARRY 0x01 + + +/* ADDRESSING MODES */ + +#define IMPLIED 0 +#define ACCUMULATOR 1 +#define IMMEDIATE 2 + +#define ZERO_PAGE 3 +#define ZERO_PAGE_X 4 +#define ZERO_PAGE_Y 5 + +#define ABSOLUTE 6 +#define ABSOLUTE_X 7 +#define ABSOLUTE_Y 8 + +#define ABS_INDIRECT 9 +#define INDIRECT_X 10 +#define INDIRECT_Y 11 + +#define RELATIVE 12 + +#define ASS_CODE 13 + + +/* + * Declaration for lookup-table which is used to translate MOS6502 + * machine instructions. Machine code is used as index to array called + * lookup. Pointer to function is then fetched from array and function + * is called. + */ + +extern struct lookup_tag { + char *mnemonic; /* Selfdocumenting? */ + short addr_mode; + unsigned char source; + unsigned char destination; + unsigned char cycles; + unsigned char pbc_fix; /* Cycle for Page Boundary Crossing */ +} lookup[]; + + +/* Addressing mode (addr_mode) is used when instruction is diassembled + * or assembled by diassembler or assembler. This is used i.e. + * in function char *sprint_opcode() in the file misc.c. + * + * MOS6502 addressing modes are #defined in the file "vmachine.h". + * + * Mnemonic is character string telling the name of the instruction. + */ + +#define M_NONE 0 +#define M_AC 1 +#define M_XR 2 +#define M_YR 3 +#define M_SP 4 +#define M_SR 5 +#define M_PC 6 +#define M_IMM 7 +#define M_ZERO 8 +#define M_ZERX 9 +#define M_ZERY 10 +#define M_ABS 11 +#define M_ABSX 12 +#define M_ABSY 13 +#define M_AIND 14 +#define M_INDX 15 +#define M_INDY 16 +#define M_REL 17 +#define M_FC 18 +#define M_FD 19 +#define M_FI 20 +#define M_FV 21 +#define M_ADDR 22 +#define M_ 23 + +#ifndef NO_UNDOC_CMDS +#define M_ACIM 24 /* Source: AC & IMMED (bus collision) */ +#define M_ANXR 25 /* Source: AC & XR (bus collision) */ +#define M_AXIM 26 /* Source: (AC | #EE) & XR & IMMED (bus collision) */ +#define M_ACNC 27 /* Dest: M_AC and Carry = Negative */ +#define M_ACXR 28 /* Dest: M_AC, M_XR */ + +#define M_SABY 29 /* Source: (ABS_Y & SP) (bus collision) */ +#define M_ACXS 30 /* Dest: M_AC, M_XR, M_SP */ +#define M_STH0 31 /* Dest: Store (src & Addr_Hi+1) to (Addr +0x100) */ +#define M_STH1 32 +#define M_STH2 33 +#define M_STH3 34 + +#else +#define M_ACIM M_NONE +#define M_ANXR M_NONE +#define M_AXIM M_NONE +#define M_ACNC M_NONE +#define M_ACXR M_NONE + +#define M_SABY M_NONE +#define M_ACXS M_NONE +#define M_STH0 M_NONE +#define M_STH1 M_NONE +#define M_STH2 M_NONE +#define M_STH3 M_NONE +#endif + + + +#endif /* X2600_CPU_H */ + + + + + + + + diff --git a/MCUME_pico/picovcs/display.h b/MCUME_pico/picovcs/display.h new file mode 100644 index 0000000..c4c15c6 --- /dev/null +++ b/MCUME_pico/picovcs/display.h @@ -0,0 +1,34 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for details. + + $Id: display.h,v 1.13 1997/11/22 14:29:54 ahornby Exp $ +******************************************************************************/ + +/* + Defines for the X11 display code. + */ + +#ifndef DISPLAY_H +#define DISPLAY_H + +int tv_on(void); +void tv_display(void); + +extern int vwidth,vheight,theight; +extern int tv_counter; +extern unsigned char * VBuf; + +#endif + + + + diff --git a/MCUME_pico/picovcs/emuapi.cpp b/MCUME_pico/picovcs/emuapi.cpp new file mode 100644 index 0000000..75f32fd --- /dev/null +++ b/MCUME_pico/picovcs/emuapi.cpp @@ -0,0 +1,804 @@ +#define KEYMAP_PRESENT 1 + +#define PROGMEM + +#include "pico.h" +#include "pico/stdlib.h" +#include "hardware/adc.h" +#include +#include + +extern "C" { + #include "emuapi.h" + #include "iopins.h" +} + + +#include "vga_t_dma.h" +const uint16_t deflogo[] = { + 0,0 +}; +static const uint16_t * logo = deflogo; + +#define MAX_FILES 64 +#define MAX_FILENAME_SIZE 24 +#define MAX_MENULINES 9 +#define TEXT_HEIGHT 16 +#define TEXT_WIDTH 8 +#define MENU_FILE_XOFFSET (6*TEXT_WIDTH) +#define MENU_FILE_YOFFSET (2*TEXT_HEIGHT) +#define MENU_FILE_W (MAX_FILENAME_SIZE*TEXT_WIDTH) +#define MENU_FILE_H (MAX_MENULINES*TEXT_HEIGHT) +#define MENU_FILE_BGCOLOR RGBVAL16(0x00,0x00,0x40) +#define MENU_JOYS_YOFFSET (12*TEXT_HEIGHT) +#define MENU_VBAR_XOFFSET (0*TEXT_WIDTH) +#define MENU_VBAR_YOFFSET (MENU_FILE_YOFFSET) + +#define MENU_TFT_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_TFT_YOFFSET (MENU_VBAR_YOFFSET+32) +#define MENU_VGA_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_VGA_YOFFSET (MENU_VBAR_YOFFSET+MENU_FILE_H-32-37) + +extern TFT_T_DMA tft; + +static char romspath[64]; +static int nbFiles=0; +static int curFile=0; +static int topFile=0; +static char selection[MAX_FILENAME_SIZE+1]=""; +static char files[MAX_FILES][MAX_FILENAME_SIZE]; +static bool menuRedraw=true; + +static bool i2cKeyboardPresent = false; +static unsigned short * keys; +static int keyMap; + +static int keypadval=0; +static bool joySwapped = false; +static uint16_t bLastState; +static int xRef; +static int yRef; +static uint8_t usbnavpad=0; + +static bool menuOn=true; + + + + +void emu_printf(char * text) +{ + printf("%s\n",text); +} + +void emu_printf(int val) +{ + printf("%d\n",val); +} + +void emu_printi(int val) +{ + printf("%d\n",val); +} + +void emu_printh(int val) +{ + printf("0x%.8\n",val); +} + +static int malbufpt = 0; +static char malbuf[EXTRA_HEAP]; + +void * emu_Malloc(int size) +{ + void * retval = malloc(size); + if (!retval) { + emu_printf("failled to allocate"); + emu_printf(size); + emu_printf("fallback"); + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + } + else { + emu_printf("failure to allocate"); + } + } + else { + emu_printf("could allocate dynamic "); + emu_printf(size); + } + + return retval; +} + +void * emu_MallocI(int size) +{ + void * retval = NULL; + + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + emu_printf("could allocate static "); + emu_printf(size); + } + else { + emu_printf("failure to allocate"); + } + + return retval; +} +void emu_Free(void * pt) +{ + free(pt); +} + + + + + +int emu_ReadAnalogJoyX(int min, int max) +{ +#ifdef PIN_JOY2_A1X + adc_select_input(0); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVX + val = 4095 - val; +#endif + val = val-xRef; + val = ((val*140)/100); + if ( (val > -512) && (val < 512) ) val = 0; + val = val+2048; + return (val*(max-min))/4096; +} + +int emu_ReadAnalogJoyY(int min, int max) +{ +#ifdef PIN_JOY2_A2Y + adc_select_input(1); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVY + val = 4095 - val; +#endif + val = val-yRef; + val = ((val*120)/100); + if ( (val > -512) && (val < 512) ) val = 0; + //val = (val*(max-min))/4096; + val = val+2048; + //return val+(max-min)/2; + return (val*(max-min))/4096; +} + + +static uint16_t readAnalogJoystick(void) +{ + uint16_t joysval = 0; + + int xReading = emu_ReadAnalogJoyX(0,256); + if (xReading > 128) joysval |= MASK_JOY2_LEFT; + else if (xReading < 128) joysval |= MASK_JOY2_RIGHT; + + int yReading = emu_ReadAnalogJoyY(0,256); + if (yReading < 128) joysval |= MASK_JOY2_UP; + else if (yReading > 128) joysval |= MASK_JOY2_DOWN; + +#ifdef PIN_JOY2_BTN + joysval |= (gpio_get(PIN_JOY2_BTN) ? 0 : MASK_JOY2_BTN); +#endif + return (joysval); +} + + +int emu_SwapJoysticks(int statusOnly) { + if (!statusOnly) { + if (joySwapped) { + joySwapped = false; + } + else { + joySwapped = true; + } + } + return(joySwapped?1:0); +} + +int emu_GetPad(void) +{ + return(keypadval/*|((joySwapped?1:0)<<7)*/); +} + +int emu_ReadKeys(void) +{ + uint16_t retval; + uint16_t j1 = readAnalogJoystick(); + uint16_t j2 = 0; + + // Second joystick +#if INVY +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_DOWN; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_UP; +#endif +#else +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_UP; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_DOWN; +#endif +#endif +#if INVX +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_LEFT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_RIGHT; +#endif +#else +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_RIGHT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_LEFT; +#endif +#endif +#ifdef PIN_JOY1_BTN + if ( !gpio_get(PIN_JOY1_BTN) ) j2 |= MASK_JOY2_BTN; +#endif + if (joySwapped) { + retval = ((j1 << 8) | j2); + } + else { + retval = ((j2 << 8) | j1); + } + + if (usbnavpad & MASK_JOY2_UP) retval |= MASK_JOY2_UP; + if (usbnavpad & MASK_JOY2_DOWN) retval |= MASK_JOY2_DOWN; + if (usbnavpad & MASK_JOY2_LEFT) retval |= MASK_JOY2_LEFT; + if (usbnavpad & MASK_JOY2_RIGHT) retval |= MASK_JOY2_RIGHT; + if (usbnavpad & MASK_JOY2_BTN) retval |= MASK_JOY2_BTN; +#ifdef PIN_KEY_USER1 + if ( !gpio_get(PIN_KEY_USER1) ) retval |= MASK_KEY_USER1; +#endif +#ifdef PIN_KEY_USER2 + if ( !gpio_get(PIN_KEY_USER2) ) retval |= MASK_KEY_USER2; +#endif +#ifdef PIN_KEY_USER3 + if ( !gpio_get(PIN_KEY_USER3) ) retval |= MASK_KEY_USER3; +#endif +#ifdef PIN_KEY_USER4 + if ( !gpio_get(PIN_KEY_USER4) ) retval |= MASK_KEY_USER4; +#endif + + //Serial.println(retval,HEX); + + if ( ((retval & (MASK_KEY_USER1+MASK_KEY_USER2)) == (MASK_KEY_USER1+MASK_KEY_USER2)) + || (retval & MASK_KEY_USER4 ) ) + { + } + + return (retval); +} + +unsigned short emu_DebounceLocalKeys(void) +{ + uint16_t bCurState = emu_ReadKeys(); + uint16_t bClick = bCurState & ~bLastState; + bLastState = bCurState; + + return (bClick); +} + +int emu_ReadI2CKeyboard(void) { + int retval=0; + + return(retval); +} + +void emu_InitJoysticks(void) { + + // Second Joystick +#ifdef PIN_JOY1_1 + gpio_set_pulls(PIN_JOY1_1,true,false); + gpio_set_dir(PIN_JOY1_1,GPIO_IN); +#endif +#ifdef PIN_JOY1_2 + gpio_set_pulls(PIN_JOY1_2,true,false); + gpio_set_dir(PIN_JOY1_2,GPIO_IN); +#endif +#ifdef PIN_JOY1_3 + gpio_set_pulls(PIN_JOY1_3,true,false); + gpio_set_dir(PIN_JOY1_3,GPIO_IN); +#endif +#ifdef PIN_JOY1_4 + gpio_set_pulls(PIN_JOY1_4,true,false); + gpio_set_dir(PIN_JOY1_4,GPIO_IN); +#endif +#ifdef PIN_JOY1_BTN + gpio_set_pulls(PIN_JOY1_BTN,true,false); + gpio_set_dir(PIN_JOY1_BTN,GPIO_IN); +#endif + +#ifdef PIN_KEY_USER1 + gpio_set_pulls(PIN_KEY_USER1,true,false); + gpio_set_dir(PIN_KEY_USER1,GPIO_IN); +#endif +#ifdef PIN_KEY_USER2 + gpio_set_pulls(PIN_KEY_USER2,true,false); + gpio_set_dir(PIN_KEY_USER2,GPIO_IN); +#endif +#ifdef PIN_KEY_USER3 + gpio_set_pulls(PIN_KEY_USER3,true,false); + gpio_set_dir(PIN_KEY_USER3,GPIO_IN); +#endif +#ifdef PIN_KEY_USER4 + gpio_set_pulls(PIN_KEY_USER4,true,false); + gpio_set_dir(PIN_KEY_USER4,GPIO_IN); +#endif +#ifdef PIN_JOY2_BTN + gpio_set_pulls(PIN_JOY2_BTN,true,false); + gpio_set_dir(PIN_JOY2_BTN,GPIO_IN); +#endif + +#ifdef PIN_JOY2_A1X + adc_init(); + adc_gpio_init(PIN_JOY2_A1X); + adc_gpio_init(PIN_JOY2_A2Y); + xRef=0; yRef=0; + for (int i=0; i<10; i++) { + adc_select_input(0); + xRef += adc_read(); + adc_select_input(1); + yRef += adc_read(); + sleep_ms(20); + } +#endif + +#if INVX + xRef = 4095 -xRef/10; +#else + xRef /= 10; +#endif +#if INVY + yRef = 4095 -yRef/10; +#else + yRef /= 10; +#endif +} + + + + +int emu_setKeymap(int index) { +} + + +#include "ff.h" +static FATFS fatfs; +static FIL file; +extern "C" int sd_init_driver(void); + +static int readNbFiles(char * rootdir) { + int totalFiles = 0; + + DIR dir; + FILINFO entry; + FRESULT fr = f_findfirst(&dir, &entry, rootdir, "*"); + while ( (fr == FR_OK) && (entry.fname[0]) && (totalFiles=0) { + menuRedraw=true; + curFile -= 9; + } else if (curFile!=0) { + menuRedraw=true; + curFile--; + } + } + else if (bClick & MASK_JOY2_DOWN) { + if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_JOY2_LEFT) || (bClick & MASK_JOY1_LEFT) ) { + if ((curFile<(nbFiles-9)) && (nbFiles)) { + curFile += 9; + menuRedraw=true; + } + else if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_KEY_USER2) ) { + emu_SwapJoysticks(0); + menuRedraw=true; + } + + if (menuRedraw && nbFiles) { + int fileIndex = 0; + tft.drawRectNoDma(MENU_FILE_XOFFSET,MENU_FILE_YOFFSET, MENU_FILE_W, MENU_FILE_H, MENU_FILE_BGCOLOR); +// if (curFile <= (MAX_MENULINES/2-1)) topFile=0; +// else topFile=curFile-(MAX_MENULINES/2); + if (curFile <= (MAX_MENULINES-1)) topFile=0; + else topFile=curFile-(MAX_MENULINES/2); + + //Serial.print("curfile: "); + //Serial.println(curFile); + //Serial.print("topFile: "); + //Serial.println(topFile); + + int i=0; + while (i=nbFiles) { + // no more files + break; + } + char * filename = &files[fileIndex][0]; + if (fileIndex >= topFile) { + if ((i+topFile) < nbFiles ) { + if ((i+topFile)==curFile) { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0x00), RGBVAL16(0xff,0x00,0x00), true); + strcpy(selection,filename); + } + else { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0xff), MENU_FILE_BGCOLOR, true); + } + } + i++; + } + fileIndex++; + } + + + tft.drawTextNoDma(48,MENU_JOYS_YOFFSET+8, (emu_SwapJoysticks(1)?(char*)"SWAP=1":(char*)"SWAP=0"), RGBVAL16(0x00,0xff,0xff), RGBVAL16(0x00,0x00,0xff), false); + menuRedraw=false; + } + + return (action); +} + +bool menuActive(void) +{ + return (menuOn); +} + +void toggleMenu(bool on) { + if (on) { + menuOn = true; + backgroundMenu(); + } else { + menuOn = false; + } +} + +char * menuSelection(void) +{ + return (selection); +} + + + + + + + + + +int emu_FileOpen(char * filename) +{ + int retval = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileOpen..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + retval = 1; + } + else { + emu_printf("FileOpen failed"); + } + return (retval); +} + +int emu_FileRead(char * buf, int size) +{ + unsigned char buffer[256]; + int remaining = size; + int byteread = 0; + unsigned int retval=0; + if (size < 256) { + if( !(f_read (&file, buffer, size, &retval)) ) + if (retval>0) { + memcpy(buf,buffer,retval); + byteread += retval; + } + } + else { + while (remaining>0) { + if( !(f_read (&file, buffer, 256, &retval)) ) + //f_read (&file, buffer, 256, &retval); + if (retval>0) { + //emu_printi(retval); + memcpy(buf,buffer,retval); + buf += retval; + byteread += retval; + remaining -= retval; + } + else { + break; + } + } + } + return byteread; +} + +unsigned char emu_FileGetc(void) { + unsigned char c; + unsigned int retval=0; + if( !(f_read (&file, &c, 1, &retval)) ) + if (retval != 1) { + emu_printf("emu_FileGetc failed"); + } + return c; +} + + +void emu_FileClose(void) +{ + f_close(&file); +} + +int emu_FileSize(char * filename) +{ + int filesize=0; + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileSize..."); + emu_printf(filepath); + FILINFO entry; + f_stat(filepath, &entry); + filesize = entry.fsize; + return(filesize); +} + +int emu_FileSeek(int seek) +{ + f_lseek(&file, seek); + return (seek); +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + unsigned int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } + + return(filesize); +} + +#ifdef SDIO + + +int emu_FileTell(void) +{ +#ifdef USE_SDFS + return (f_tell(&file)); +#else + return (50); +#endif +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + filesize = file.size(); + emu_printf(filesize); + + if (size >= filesize) + { + if (emu_FileRead(buf, filesize) != filesize) + { + emu_printf("File read failed"); + } + } + file.close(); + } +#endif + + return(filesize); +} + +int emu_LoadFileSeek(char * filename, char * buf, int size, int seek) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFileSeek..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + f_lseek(&file, seek); + emu_printf(size); + if (size >= filesize) + { + int retval=0; + if( (!f_read (&file, buf, size, &retval)) ) + if (retval != size) + { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + file.seek(seek); + emu_printf(size); + if (file.read(buf, size) != size) { + emu_printf("File read failed"); + } + file.close(); + } +#endif + + return(filesize); +} +#endif + + + +void emu_init(void) +{ + sd_init_driver(); + FRESULT fr = f_mount(&fatfs, "0:", 1); + //emu_FileSystemInit(); + + strcpy(romspath,ROMSDIR); + nbFiles = readNbFiles(romspath); + + emu_printf("SD initialized, files found: "); + emu_printi(nbFiles); + + emu_InitJoysticks(); +#ifdef SWAP_JOYSTICK + joySwapped = true; +#else + joySwapped = false; +#endif + + toggleMenu(true); +} + + +void emu_start(void) +{ + + usbnavpad = 0; + + keys = (unsigned short *)key_map1; + keyMap = 0; +} diff --git a/MCUME_pico/picovcs/emuapi.h b/MCUME_pico/picovcs/emuapi.h new file mode 100644 index 0000000..201e8b9 --- /dev/null +++ b/MCUME_pico/picovcs/emuapi.h @@ -0,0 +1,126 @@ +#ifndef EMUAPI_H +#define EMUAPI_H + +#include "platform_config.h" + +//#define TIMER_REND 1 +#define EXTRA_HEAP 0x10 + +// Title: < > +#define TITLE " Atari2600 Emulator" +#define ROMSDIR "2600" + +#define emu_Init(ROM) {vcs_Init();vcs_Start(ROM);} +#define emu_Step() {vcs_Step();} +#define emu_Input(x) {} + +#define PALETTE_SIZE 256 +#define VID_FRAME_SKIP 0x0 +#define TFT_VBUFFER_YCROP 0 +//#define SINGLELINE_RENDERING 1 + +#define ACTION_NONE 0 +#define ACTION_MAXKBDVAL 4 +#define ACTION_EXITKBD 128 +#define ACTION_RUNTFT 129 +#define ACTION_RUNVGA 130 + +#ifdef KEYMAP_PRESENT + +#define TAREA_W_DEF 32 +#define TAREA_H_DEF 32 +#define TAREA_END 255 +#define TAREA_NEW_ROW 254 +#define TAREA_NEW_COL 253 +#define TAREA_XY 252 +#define TAREA_WH 251 + +#define KEYBOARD_X 8 +#define KEYBOARD_Y 50 +#define KEYBOARD_KEY_H 38 +#define KEYBOARD_KEY_W 28 +#define KEYBOARD_HIT_COLOR RGBVAL16(0xff,0x00,0x00) + +const unsigned short keysw[] = { + TAREA_XY,KEYBOARD_X,KEYBOARD_Y, + TAREA_WH,KEYBOARD_KEY_W,KEYBOARD_KEY_H, + TAREA_NEW_ROW,40,40,140,40,40, + TAREA_END}; + +const unsigned short key_map1[] = { + 1,2,ACTION_NONE,3,4 + }; + +#endif + +#define MASK_JOY2_RIGHT 0x0001 +#define MASK_JOY2_LEFT 0x0002 +#define MASK_JOY2_UP 0x0004 +#define MASK_JOY2_DOWN 0x0008 +#define MASK_JOY2_BTN 0x0010 +#define MASK_KEY_USER1 0x0020 +#define MASK_KEY_USER2 0x0040 +#define MASK_KEY_USER3 0x0080 +#define MASK_JOY1_RIGHT 0x0100 +#define MASK_JOY1_LEFT 0x0200 +#define MASK_JOY1_UP 0x0400 +#define MASK_JOY1_DOWN 0x0800 +#define MASK_JOY1_BTN 0x1000 +#define MASK_KEY_USER4 0x2000 + + +extern void emu_init(void); +extern void emu_start(void); +extern void emu_resetSD(void); + +extern void emu_printf(char * text); +extern void emu_printi(int val); +extern void * emu_Malloc(int size); +extern void emu_Free(void * pt); + +extern int emu_FileOpen(char * filename); +extern int emu_FileRead(char * buf, int size); +extern unsigned char emu_FileGetc(void); +extern int emu_FileSeek(int seek); +extern void emu_FileClose(void); +extern int emu_FileSize(char * filename); +extern int emu_LoadFile(char * filename, char * buf, int size); +extern int emu_LoadFileSeek(char * filename, char * buf, int size, int seek); +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); + +extern void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index); +extern void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride); +extern void emu_DrawLine(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line); +extern void emu_DrawVsync(void); +extern int emu_FrameSkip(void); +extern void * emu_LineBuffer(int line); + +extern void emu_InitJoysticks(void); +extern int emu_SwapJoysticks(int statusOnly); +extern unsigned short emu_DebounceLocalKeys(void); +extern int emu_ReadKeys(void); +extern int emu_GetPad(void); +extern int emu_ReadAnalogJoyX(int min, int max); +extern int emu_ReadAnalogJoyY(int min, int max); +extern int emu_ReadI2CKeyboard(void); +extern void emu_KeyboardOnUp(int keymodifer, int key); +extern void emu_KeyboardOnDown(int keymodifer, int key); + +extern void emu_sndPlaySound(int chan, int volume, int freq); +extern void emu_sndPlayBuzz(int size, int val); +extern void emu_sndInit(); +extern void emu_resetus(void); +extern int emu_us(void); + +extern int emu_setKeymap(int index); + +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); +extern void emu_printh(int val); + +#endif diff --git a/MCUME_pico/picovcs/exmacro.h b/MCUME_pico/picovcs/exmacro.h new file mode 100644 index 0000000..d67b51a --- /dev/null +++ b/MCUME_pico/picovcs/exmacro.h @@ -0,0 +1,30 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for details. + + $Id: exmacro.h,v 1.5 1996/11/24 16:55:40 ahornby Exp $ +******************************************************************************/ + +/* + Defines __inline functions that would otherwise be macros. + */ + +//#ifndef EXMACRO_H +//#define EXMACRO_H + +extern __inline ADDRESS load_abs_addr(void); +extern __inline int pagetest( ADDRESS a, BYTE b); +extern __inline int brtest( BYTE a); +extern __inline int toBCD( int a); +extern __inline int fromBCD( int a); + +//#endif + diff --git a/MCUME_pico/picovcs/extern.h b/MCUME_pico/picovcs/extern.h new file mode 100644 index 0000000..0aa5143 --- /dev/null +++ b/MCUME_pico/picovcs/extern.h @@ -0,0 +1,62 @@ +/* + $Id: extern.h,v 1.2 1995/12/12 16:21:39 alex Exp alex $ + */ + +#ifndef VCSEXTERN_H +#define VCSEXTERN_H + + +#include "types.h" /* for BYTE, ADDRESS, etc. types and structures */ +/* #include "proto.h" */ + +extern char *progname; +extern int clength[]; + +extern BYTE accumulator; +extern BYTE x_register; +extern BYTE y_register; +extern BYTE stack_pointer; +extern BYTE status_register; +extern ADDRESS program_counter; +extern CLOCK clk; + +extern int zero_flag; +extern int sign_flag; +extern int overflow_flag; +extern int break_flag; +extern int decimal_flag; +extern int interrupt_flag; +extern int carry_flag; + +/* Debugging */ +extern int hexflg; +extern int verflg; +extern int traceflg; +extern int debugflg; +extern int runflg; + +extern int autodump; +extern int reuflg; + + +/* Memory */ + +extern int module; + +/* Keyboard & joystick */ + +#ifdef JOYSTICK +extern void joystick(void) ; +extern void joyini(void) ; +extern void joyclose(void); + +extern int joyfd ; +#endif + +#endif + + + + + + diff --git a/MCUME_pico/picovcs/font8x8.h b/MCUME_pico/picovcs/font8x8.h new file mode 100644 index 0000000..4f773da --- /dev/null +++ b/MCUME_pico/picovcs/font8x8.h @@ -0,0 +1,135 @@ + +// Font: c64_lower.64c + +const unsigned char font8x8[128][8] PROGMEM = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) + { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) + { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) + { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) + { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//) + { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) + { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) + { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) + { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F +}; + diff --git a/MCUME_pico/picovcs/iopins.h b/MCUME_pico/picovcs/iopins.h new file mode 100644 index 0000000..a636576 --- /dev/null +++ b/MCUME_pico/picovcs/iopins.h @@ -0,0 +1,42 @@ +#ifndef IOPINS_H +#define IOPINS_H + +#include "platform_config.h" + + +// VGA (see in code!!!) +/* +2-9 RRRGGGBB +10-11 VSYNC and HSYNC +*/ + +// SD (see SPI0 in code!!!) +/* +#define SD_SCLK 18 +#define SD_MOSI 19 +#define SD_MISO 16 +#define SD_CS 17 +*/ + +// I2C keyboard (not used) +/* +#define I2C_SCL_IO 15? +#define I2C_SDA_IO 14? +*/ + +// Analog joystick (primary) for JOY2 and 3 extra buttons +#define PIN_JOY2_A1X 26 +#define PIN_JOY2_A2Y 27 +#define PIN_JOY2_BTN 22 +#define PIN_KEY_USER1 20 +#define PIN_KEY_USER2 21 + +// Second joystick +//#define PIN_JOY1_BTN 2 +//#define PIN_JOY1_1 14 // UP +//#define PIN_JOY1_2 7 // DOWN +//#define PIN_JOY1_3 6 // RIGHT +//#define PIN_JOY1_4 5 // LEFT + + +#endif diff --git a/MCUME_pico/picovcs/keyboard.h b/MCUME_pico/picovcs/keyboard.h new file mode 100644 index 0000000..0da9978 --- /dev/null +++ b/MCUME_pico/picovcs/keyboard.h @@ -0,0 +1,7 @@ +#ifndef KEYBOARD_H +#define KEYBOARD_H + +void init_keyboard(void); +void keyboard(void); + +#endif diff --git a/MCUME_pico/picovcs/keyboard_osd.h b/MCUME_pico/picovcs/keyboard_osd.h new file mode 100644 index 0000000..4c31e6f --- /dev/null +++ b/MCUME_pico/picovcs/keyboard_osd.h @@ -0,0 +1,19 @@ + +#ifndef keyboard_osd_h_ +#define keyboard_osd_h_ + +extern bool virtualkeyboardIsActive(void); +extern void drawVirtualkeyboard(void); +extern void toggleVirtualkeyboard(bool keepOn); +extern void handleVirtualkeyboard(void); + +extern bool callibrationActive(void); +extern int handleCallibration(uint16_t bClick); + +extern bool menuActive(void); +extern char * menuSelection(void); +extern void toggleMenu(bool on); +extern int handleMenu(uint16_t bClick); + + +#endif diff --git a/MCUME_pico/picovcs/logo.h b/MCUME_pico/picovcs/logo.h new file mode 100644 index 0000000..41390c2 --- /dev/null +++ b/MCUME_pico/picovcs/logo.h @@ -0,0 +1,194 @@ +const uint16_t logo[] PROGMEM = { +0x0140,0x00c1,0x39e7,0x39c6,0x3a07,0x3a07,0x39e7,0x4227,0x39e6,0x39c6,0x39e7,0x39c7,0x39e6,0x31c6,0x39c6,0x39c6,0x39c6,0x39c6,0x39e7,0x3a07,0x3a07,0x39e7,0x39e6,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x39e7,0x31c6,0x31c6,0x31e6,0x31c6,0x3a07,0x31c6,0x39e6,0x31e6,0x39e7,0x39e7,0x31c6,0x39e6,0x39e6,0x3a07,0x39e7,0x31c6,0x3a07,0x4228,0x3a07,0x4228,0x4228,0x4248,0x3a07,0x4227,0x4227,0x3a27,0x3a27,0x39e7,0x3a07,0x3a08,0x39e7,0x31e6,0x31c6,0x39e7,0x39e7,0x39e7,0x31c6,0x2985,0x31a6,0x31c6,0x31a6,0x31a6,0x31c6,0x31a5,0x39c6,0x31a6,0x31a6,0x31c6,0x31a6,0x31a6,0x31a6,0x31c6,0x31c6,0x29a5,0x31c6,0x31a6,0x2985,0x3185,0x31a6,0x31c6,0x31a6,0x31a5,0x31a6,0x31c6,0x31c6,0x31c6,0x31c6,0x31c6,0x31c6,0x31a6,0x31a6,0x31e6,0x31a6,0x31a6,0x31a6,0x31c6,0x31a6,0x31a6,0x31a6,0x31a6,0x31c6,0x31c6,0x31a6,0x31c6,0x31a6,0x2985,0x2986,0x31a6,0x31a6,0x31c6,0x31c6,0x31a5,0x31a5,0x31a6,0x31a5,0x31c6,0x2985,0x2985,0x3185,0x3185,0x2985,0x2965,0x2985,0x2985,0x3185,0x3185,0x3185,0x2985,0x2985,0x2985,0x2985,0x3185,0x2985,0x31a6,0x3185,0x31a5,0x31a6,0x31a5,0x31a5,0x31a6,0x3185,0x3185,0x3185,0x3185,0x31a6,0x31a6,0x2985,0x31a6,0x31a5,0x31a5,0x31a5,0x31a6,0x31a6,0x2985,0x2985,0x3186,0x3185,0x31a6,0x31a5,0x31a6,0x31a6,0x3186,0x3186,0x2985,0x2985,0x31a6,0x31a6,0x31c6,0x31a6,0x31a6,0x31a6,0x3185,0x31a6,0x3186,0x3186,0x39c6,0x4208,0x4208,0x39c7,0x39e7,0x39e7,0x31a6,0x3185,0x31a6,0x3185,0x31a6,0x31a6,0x31a6,0x3185,0x31a6,0x31a6,0x3185,0x31a6,0x31a6,0x31a6,0x31a5,0x31a6,0x31a6,0x31a6,0x31a6,0x3186,0x3186,0x3185,0x3186,0x39c6,0x39c7,0x39c6,0x31a6,0x39c6,0x31c6,0x3186,0x31c6,0x39e7,0x39e7,0x39e7,0x31c6,0x39c7,0x39c7,0x39e7,0x31a6,0x39c6,0x39c6,0x39c6,0x39c6,0x39c7,0x39c7,0x39a6,0x31a6,0x31c6,0x39c6,0x39c6,0x31a6,0x39e7,0x3a07,0x4208,0x4207,0x4207,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x39e7,0x39e7,0x4208,0x4208,0x4207,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x4208,0x39c6,0x39e7,0x3a07,0x39e7,0x39e7,0x39e7,0x39c6,0x39c7,0x39e7,0x39e7,0x39e7,0x4208,0x3a07,0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x3a07,0x3a07,0x39e7,0x39c7,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x3a07,0x4208,0x39e7,0x39e7,0x3a07,0x3a07,0x3a07,0x4228,0x4207,0x39c7,0x4207,0x39e7,0x39c7,0x4207,0x39e7,0x3a07,0x4208,0x4208,0x4248,0x4228,0x3a07,0x4207,0x4228,0x41e7,0x4208,0x3a07,0x3a07, +0x3185,0x31c6,0x39e7,0x31c6,0x31a6,0x3185,0x31a6,0x31a6,0x2985,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31c6,0x31a6,0x31a5,0x31a6,0x2965,0x31a6,0x31a6,0x31c6,0x31c6,0x39e6,0x31c6,0x31c6,0x31c6,0x31c6,0x31c6,0x39e6,0x39e7,0x31a5,0x3185,0x31c6,0x39c6,0x31a6,0x31c6,0x31a5,0x31a5,0x31a6,0x2985,0x31c6,0x31a5,0x31a6,0x31c6,0x39c6,0x39c6,0x39c6,0x31a6,0x31c6,0x31c6,0x31c6,0x31c6,0x31a6,0x31c6,0x31a6,0x31c6,0x39e7,0x31c6,0x29a5,0x2985,0x2985,0x31a6,0x39e6,0x31c6,0x31c6,0x31c6,0x31c6,0x31c6,0x31a5,0x39c6,0x31c6,0x31c6,0x31a6,0x31a6,0x31a6,0x31a6,0x31c6,0x29a5,0x31c6,0x39e6,0x39e7,0x31a6,0x39c6,0x39c6,0x3a07,0x39e6,0x31c6,0x39c6,0x31c6,0x31a6,0x31a6,0x31c6,0x39e7,0x31c6,0x31a6,0x31c6,0x39e6,0x39e7,0x31c6,0x3a07,0x39e6,0x3a07,0x39e7,0x3a07,0x31e6,0x31c6,0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x31c6,0x31a6,0x39e6,0x31c6,0x39e7,0x39e6,0x3a07,0x3a07,0x3a07,0x39e7,0x4207,0x3a07,0x39e7,0x31c6,0x39e7,0x39e7,0x39e7,0x31c6,0x39c6,0x39e6,0x39c6,0x31a6,0x31c6,0x31a6,0x31c6,0x31a6,0x39c6,0x31a6,0x31c6,0x31c6,0x31c6,0x31c6,0x31a6,0x31a6,0x39e7,0x39e7,0x31c6,0x39e7,0x31a6,0x31c6,0x31c6,0x39c6,0x39c6,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x31e7,0x39c7,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x39e7,0x39e7,0x4207,0x3a07,0x39e7,0x39c7,0x39e7,0x31c6,0x39e7,0x3a07,0x3a07,0x39e7,0x39e7,0x3a07,0x4228,0x3a07,0x3a07,0x39e7,0x3a07,0x39e7,0x4207,0x39e7,0x39c6,0x4207,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x4207,0x3a07,0x4207,0x3a07,0x4207,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x39c6,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x39e7,0x39e7,0x4208,0x39e7,0x39e7,0x3a07,0x4228,0x3a07,0x31c6,0x39e7,0x3a07,0x39e7,0x3a07,0x3a07,0x3a07,0x39e7,0x3a07,0x4208,0x39e7,0x39e7,0x4228,0x39e7,0x39e7,0x39e7,0x39c6,0x39e7,0x31c6,0x31a6,0x39e7,0x39e7,0x39c6,0x39c7,0x31c6,0x31a6,0x39e7,0x39e7,0x31a6,0x39a6,0x39c6,0x31a6,0x39c6,0x31a6,0x39c7,0x39e7,0x39c7,0x4207,0x39e7,0x39e7,0x39c7,0x31a6,0x39c6,0x39e7,0x4228,0x39e7,0x39e7,0x39e7,0x3a07,0x39c6,0x31c6,0x39e7,0x3a07,0x39e7,0x39c7,0x4207,0x4208,0x39e7,0x31c6,0x39e7,0x39e7,0x31a6,0x39c6,0x39c7,0x39c6,0x31a6,0x3185,0x39c7,0x39c6,0x31a6,0x39c7,0x31a6,0x39c7,0x31a6,0x3186,0x3a07,0x39e7,0x39e7,0x31c6,0x39c6,0x31c6,0x39c7,0x31c6,0x31c6,0x31c6,0x31a6,0x39c7,0x39c6,0x39e7,0x39c6,0x31a6,0x31a6,0x39e7, +0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x31c6,0x3185,0x39c6,0x31c6,0x39c6,0x39e7,0x31a6,0x39c6,0x39c6,0x31a6,0x31c6,0x39e7,0x39e6,0x39c6,0x31a6,0x31c6,0x31a6,0x31c6,0x39e6,0x39e6,0x39e6,0x39e7,0x39e7,0x39c6,0x39e7,0x39e7,0x39e6,0x31c6,0x31c6,0x39c6,0x39e6,0x39c6,0x31a5,0x31a5,0x31c6,0x31c6,0x31a6,0x31c6,0x31a6,0x39c6,0x31a6,0x31a6,0x31c6,0x31a5,0x31a5,0x31a5,0x31c6,0x31a6,0x31a6,0x3185,0x31c6,0x31c6,0x39e6,0x39e7,0x31c6,0x31a6,0x3a07,0x31c6,0x3a07,0x31c6,0x3a07,0x39e7,0x39e6,0x39c6,0x39e6,0x39e6,0x31c6,0x31c6,0x39e6,0x31c6,0x39e7,0x39c6,0x31c6,0x31c6,0x39e7,0x39e6,0x39c6,0x39c6,0x31c6,0x39e7,0x39e7,0x31c6,0x3a07,0x3a07,0x31c6,0x31c6,0x2985,0x31e6,0x39e7,0x31c6,0x31a6,0x39c7,0x39c6,0x39e7,0x31a6,0x39e6,0x31a6,0x39e6,0x3a07,0x39c6,0x3a07,0x3a07,0x3a07,0x31c6,0x31c6,0x39e6,0x39e7,0x39e7,0x31a6,0x31a6,0x39e7,0x3a07,0x39e7,0x39e7,0x39e7,0x31c6,0x31a6,0x39c7,0x31a6,0x39e7,0x31c6,0x39e7,0x31c6,0x31c6,0x39e7,0x39e7,0x39e7,0x31c6,0x31c7,0x39e7,0x3a07,0x39e7,0x31e7,0x31c6,0x39e7,0x31c6,0x31c6,0x3a07,0x39e7,0x31a6,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x31c6,0x39e7,0x39e7,0x3a07,0x4228,0x4208,0x31c6,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x39e7,0x4207,0x4227,0x39e7,0x3a07,0x39e7,0x4207,0x4208,0x39e7,0x4228,0x3a07,0x4207,0x3a07,0x4227,0x4207,0x4228,0x4228,0x4207,0x4228,0x3a07,0x4208,0x4207,0x4228,0x4228,0x4228,0x4228,0x4227,0x4228,0x4228,0x4228,0x4228,0x3a07,0x39e7,0x4208,0x4207,0x4208,0x4208,0x3a07,0x4208,0x4228,0x4228,0x3a08,0x4208,0x39e7,0x39e7,0x4208,0x4228,0x39e7,0x4228,0x4228,0x4207,0x4228,0x4208,0x4248,0x4228,0x4208,0x4228,0x3a07,0x4228,0x4228,0x4248,0x4228,0x4228,0x4228,0x4208,0x4228,0x4228,0x39e7,0x4248,0x4a89,0x4207,0x4207,0x4208,0x3a07,0x4208,0x39e7,0x39e7,0x3a07,0x4228,0x4207,0x4207,0x39e7,0x3a07,0x4228,0x4228,0x4228,0x4228,0x4208,0x3a07,0x3a07,0x4228,0x4228,0x4208,0x39e7,0x3a07,0x39e7,0x4208,0x4207,0x3a07,0x4208,0x39e7,0x3a07,0x39e7,0x4228,0x4248,0x4207,0x39e7,0x39e7,0x4a49,0x4208,0x39e7,0x39e7,0x31a6,0x39e7,0x39e7,0x39e7,0x3a08,0x3a07,0x4207,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x31c6,0x39e7,0x39e7,0x31c6,0x39e7,0x31c6,0x3a07,0x4207,0x31c6,0x39e7,0x39e7,0x39c6,0x3a07,0x3a07,0x39e7,0x39c7,0x39c7,0x3a07,0x3a07,0x3a07,0x4228,0x39c7,0x39e7,0x39c6,0x39c7, +0x39e6,0x39e7,0x39c6,0x39e6,0x39e7,0x3a07,0x39e7,0x39e7,0x39c6,0x39e7,0x39e7,0x3a07,0x4227,0x39e7,0x39e6,0x31c6,0x3a07,0x39e6,0x39e7,0x39e6,0x39e7,0x31c6,0x3a07,0x39c6,0x31a6,0x31a6,0x31c6,0x39e6,0x3a07,0x39e7,0x31c6,0x39c6,0x31c6,0x31a5,0x39c6,0x31c6,0x31c6,0x31a6,0x3a07,0x3a07,0x31a6,0x31a5,0x39e6,0x39e6,0x39e6,0x31a6,0x2965,0x31c6,0x39e6,0x31a6,0x31c6,0x39e7,0x31a6,0x39c6,0x39c6,0x39e7,0x31c6,0x39e6,0x3a07,0x3a07,0x31c6,0x39e7,0x39e6,0x31c6,0x31c6,0x3a07,0x3a07,0x31a6,0x39c6,0x39e6,0x39c6,0x31c6,0x31e6,0x31c6,0x31a6,0x31c6,0x31a6,0x31c6,0x31c6,0x3a07,0x4207,0x31c6,0x3a07,0x31a6,0x39e7,0x39e6,0x39c6,0x39e7,0x3a07,0x31e7,0x39e7,0x2986,0x31c6,0x31a6,0x39e7,0x39e6,0x3a07,0x39e7,0x31c6,0x39e6,0x31c6,0x39e6,0x39e6,0x3a07,0x39e7,0x3a07,0x39e7,0x3a07,0x31c6,0x4228,0x4248,0x31a6,0x39e7,0x31c6,0x31c6,0x39e7,0x31e7,0x31c6,0x39c6,0x39e7,0x31e7,0x31e7,0x3a07,0x39e7,0x39e7,0x39e7,0x31e7,0x39e7,0x3a07,0x3a07,0x39e7,0x39e7,0x4207,0x3a07,0x39e7,0x39c7,0x39c6,0x39e7,0x39e7,0x31c6,0x31c6,0x39e7,0x4228,0x3a07,0x39e7,0x39e7,0x4248,0x3a07,0x39c6,0x39e7,0x39c7,0x31c6,0x3a07,0x4228,0x3a28,0x4228,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x3a07,0x4228,0x39e7,0x39e7,0x4228,0x3a07,0x4207,0x4227,0x4207,0x4207,0x4248,0x4248,0x39e7,0x4228,0x4228,0x4228,0x4228,0x4207,0x3a07,0x4207,0x4207,0x3a07,0x4248,0x4207,0x4228,0x4228,0x4228,0x4228,0x4228,0x4207,0x4207,0x4228,0x4248,0x4208,0x39e7,0x4228,0x4228,0x39e7,0x4228,0x4228,0x4228,0x4a49,0x4248,0x4208,0x3a07,0x4248,0x4228,0x4a48,0x4248,0x3a07,0x4228,0x3a07,0x4207,0x3a07,0x39e7,0x4248,0x4228,0x39e7,0x4228,0x4248,0x4208,0x4207,0x4208,0x4228,0x4228,0x4248,0x4228,0x4248,0x4228,0x4a48,0x4228,0x4208,0x4208,0x4228,0x4228,0x4207,0x4208,0x4228,0x4228,0x4228,0x4207,0x4208,0x4228,0x39c7,0x4207,0x4228,0x4207,0x4228,0x4228,0x4228,0x4207,0x4228,0x4228,0x39e7,0x39e7,0x4a48,0x3a07,0x3a07,0x4208,0x4228,0x4207,0x4228,0x4228,0x39e7,0x4228,0x4207,0x3a07,0x4207,0x4228,0x4208,0x3a07,0x4208,0x4228,0x4248,0x4208,0x4208,0x4a69,0x4228,0x4207,0x4228,0x4208,0x39e7,0x39e7,0x4228,0x4207,0x39e7,0x39e7,0x39e7,0x4207,0x3a07,0x39e7,0x4208,0x4228,0x39e7,0x39e7,0x3a07,0x4207,0x4228,0x4228,0x3a07,0x4208,0x39c7,0x3a07,0x4248,0x4207,0x31a6,0x4208,0x4208,0x39e7,0x39a6,0x39c6,0x3a07,0x3a08,0x4228,0x3a08,0x39c7,0x4208,0x3186,0x39c7, +0x31a5,0x31a6,0x39e6,0x3a07,0x31c6,0x39c6,0x4227,0x4228,0x4207,0x31c6,0x39c6,0x39e6,0x39c6,0x39e6,0x39e6,0x31c6,0x39e6,0x39e7,0x39e7,0x39e7,0x39e6,0x31c6,0x4227,0x31a6,0x31a6,0x39e7,0x31c6,0x3a07,0x3a07,0x4227,0x3a07,0x31c6,0x3a07,0x39e6,0x31c6,0x31a5,0x3185,0x39c6,0x39e6,0x39e7,0x4207,0x39e6,0x31c6,0x31a6,0x3185,0x31a6,0x31a6,0x39c6,0x31a6,0x31c6,0x3a07,0x39e7,0x31c6,0x31c6,0x39e6,0x39e6,0x31c6,0x31a6,0x31a5,0x2985,0x39e6,0x31c6,0x39e7,0x31c6,0x39c6,0x39e7,0x31a6,0x39e6,0x39e7,0x31a6,0x39e7,0x39e7,0x39e7,0x39c6,0x31c6,0x31a6,0x31c6,0x3a07,0x39e6,0x3a07,0x3a07,0x3a07,0x39e6,0x3a07,0x31c6,0x39e6,0x39e7,0x4248,0x3a27,0x3a27,0x3a07,0x4227,0x31a6,0x39e7,0x39e7,0x39e7,0x39c7,0x3a07,0x31c6,0x39e7,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x4227,0x39e7,0x31a5,0x39e7,0x4227,0x4228,0x39e7,0x3a07,0x3a07,0x39e7,0x4227,0x31c6,0x31c6,0x39e7,0x3a07,0x3a07,0x3a27,0x3a07,0x3a07,0x39e7,0x39e6,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x4208,0x39e7,0x31c6,0x3a07,0x39e7,0x39e6,0x4207,0x39e7,0x3a07,0x3a07,0x3a07,0x4208,0x3a07,0x3a07,0x39e7,0x3a07,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x3a07,0x39e7,0x39e7,0x4208,0x39e7,0x3a07,0x39e7,0x4208,0x4228,0x3a07,0x4207,0x3a07,0x4207,0x4207,0x4248,0x4248,0x4208,0x4228,0x4207,0x4228,0x4228,0x4248,0x3a07,0x4207,0x4228,0x4228,0x4228,0x4207,0x4a69,0x4208,0x39e7,0x4228,0x4228,0x4208,0x4228,0x4228,0x4228,0x4228,0x4228,0x4207,0x4228,0x3a07,0x4248,0x4228,0x4207,0x4248,0x3a07,0x4228,0x4228,0x4248,0x4a48,0x4228,0x4228,0x4248,0x4228,0x4208,0x4228,0x3a07,0x4228,0x4248,0x4a69,0x4a48,0x4228,0x4228,0x4248,0x4a48,0x4228,0x4228,0x4248,0x4248,0x4207,0x4248,0x4a48,0x4228,0x4a69,0x4248,0x4228,0x4a49,0x4a69,0x4228,0x4a49,0x4228,0x3a07,0x4228,0x4228,0x4207,0x4228,0x4228,0x4228,0x4208,0x4a69,0x4228,0x4a48,0x4228,0x39e7,0x4228,0x4228,0x4248,0x4a69,0x4208,0x4228,0x4228,0x4228,0x4228,0x4228,0x4a48,0x4208,0x4a48,0x4248,0x4248,0x4248,0x4a48,0x4228,0x4228,0x4207,0x3a07,0x4228,0x4228,0x4248,0x4a69,0x39e7,0x4208,0x4228,0x4228,0x3a07,0x4228,0x4228,0x4228,0x4a49,0x4228,0x3a07,0x4a69,0x4a69,0x4208,0x3a07,0x31c6,0x39e7,0x4228,0x4228,0x39c7,0x39c6,0x4228,0x4a48,0x39e7,0x3a07,0x4207,0x4228,0x3a08,0x39e7,0x39c6,0x39c7,0x39e7,0x39c7,0x4207,0x4207,0x39e7,0x39c7,0x3a08,0x4a49,0x31c6,0x39e7,0x39e7,0x39e7, +0x39e7,0x31a6,0x39c6,0x39e7,0x39e7,0x31c6,0x39e7,0x4228,0x4207,0x3a07,0x3a07,0x39e7,0x4207,0x4207,0x4248,0x39e6,0x39e7,0x4228,0x3a07,0x39e7,0x4207,0x39e6,0x39e6,0x3a07,0x39e7,0x39e6,0x39e6,0x31c6,0x39e6,0x3a07,0x39e6,0x39c6,0x39e7,0x3a07,0x31c6,0x39e7,0x31a6,0x31a6,0x3185,0x31a6,0x31c6,0x4227,0x3a07,0x31e6,0x31c6,0x31a6,0x31a6,0x31a6,0x31c6,0x3a07,0x31c6,0x39e7,0x31a5,0x31c6,0x31c6,0x3a07,0x3a07,0x39e7,0x39e7,0x31e6,0x4207,0x39c6,0x39c6,0x39e7,0x39c6,0x31c6,0x31c6,0x39e6,0x31a6,0x31a6,0x3a07,0x31a6,0x31a6,0x31c6,0x3185,0x39c6,0x39e7,0x3a07,0x4248,0x3a07,0x4227,0x31e6,0x31c6,0x4248,0x31e6,0x3a07,0x4248,0x3a07,0x3a07,0x3a27,0x4227,0x4227,0x4207,0x4207,0x31c6,0x39e7,0x39e7,0x3a07,0x39c7,0x31e6,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x4207,0x3a07,0x3a07,0x3a07,0x39e7,0x4207,0x39e7,0x39e7,0x3a07,0x4227,0x39c6,0x39e7,0x39e7,0x39e7,0x3a07,0x31e7,0x31a6,0x3a27,0x3a07,0x39e7,0x39e7,0x39c7,0x3a07,0x3a07,0x3a07,0x4228,0x3a28,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x4228,0x3a07,0x39e7,0x3a07,0x39e7,0x39e6,0x3a07,0x39e7,0x4228,0x4228,0x3a07,0x39e7,0x3a07,0x4228,0x4208,0x3a07,0x3a07,0x31e7,0x3a07,0x4207,0x4228,0x39e7,0x4207,0x4248,0x4228,0x39e7,0x3a07,0x4228,0x4207,0x4207,0x4207,0x39e7,0x4228,0x4228,0x39e7,0x4207,0x4228,0x4227,0x3a27,0x4228,0x4228,0x3a07,0x4207,0x4228,0x4228,0x3a07,0x4228,0x39e7,0x3a07,0x4207,0x39e7,0x39e7,0x4207,0x4207,0x4228,0x4227,0x4208,0x3a07,0x4208,0x3a07,0x4228,0x4228,0x3a07,0x4228,0x4248,0x4208,0x4228,0x4228,0x4248,0x4a49,0x4228,0x4248,0x4248,0x4248,0x4248,0x4248,0x4228,0x4228,0x4208,0x4228,0x4228,0x4228,0x4a48,0x4248,0x39e7,0x4228,0x4248,0x4248,0x4228,0x4228,0x4208,0x4a48,0x4228,0x4248,0x4228,0x4a69,0x4aaa,0x4248,0x4248,0x4228,0x4228,0x4228,0x4228,0x4208,0x39e7,0x4248,0x4a48,0x4208,0x4228,0x3a07,0x4228,0x4228,0x4228,0x3a07,0x4208,0x4228,0x4a69,0x4a69,0x4228,0x4a69,0x4a49,0x4228,0x4228,0x4228,0x4248,0x4228,0x4208,0x4a69,0x4248,0x4228,0x4a69,0x4228,0x4228,0x4228,0x4208,0x3a07,0x4a48,0x4228,0x3a07,0x4228,0x4228,0x4248,0x3a07,0x4208,0x4a69,0x4208,0x39c7,0x4208,0x4228,0x4248,0x4a49,0x4248,0x4208,0x3a08,0x4228,0x4228,0x4207,0x3a07,0x31a6,0x39c6,0x4228,0x3a07,0x4207,0x4a48,0x39c7,0x39e7,0x39e7,0x39e7,0x4248,0x3a07,0x3a07,0x4228,0x39e7,0x4208,0x39e7,0x4228,0x4228,0x39e7,0x39e7,0x39c7,0x39e7, +0x31a6,0x39e7,0x31a6,0x3186,0x39e7,0x39e6,0x31c6,0x4207,0x4207,0x39e7,0x4227,0x31a5,0x39e7,0x3a07,0x4207,0x31c6,0x3a07,0x39e7,0x3a07,0x3a07,0x4227,0x4227,0x39e6,0x39e7,0x4207,0x39e7,0x31c6,0x39c6,0x31c6,0x39e7,0x39e7,0x39c6,0x4227,0x39e7,0x4207,0x4227,0x3a07,0x31c6,0x39e7,0x4207,0x4207,0x3a07,0x39c6,0x3a07,0x3a07,0x31c6,0x31c6,0x39e7,0x39e7,0x3a07,0x3a07,0x3a07,0x31a6,0x39e7,0x31a6,0x39c6,0x39e6,0x31c6,0x3a07,0x3a07,0x39e7,0x3a07,0x39e7,0x39e7,0x4227,0x4227,0x39e6,0x3a27,0x3a07,0x31c6,0x39e7,0x3a07,0x3a07,0x39c6,0x31c6,0x4228,0x3a07,0x31c6,0x3a07,0x31c6,0x3a27,0x3a07,0x39e7,0x39c6,0x3a07,0x31e6,0x4248,0x3a07,0x39e7,0x3a07,0x39e7,0x39c6,0x4228,0x39e7,0x39e7,0x31c6,0x4207,0x4227,0x39c6,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x3a27,0x3a27,0x4227,0x3a07,0x3a07,0x4248,0x4227,0x3a07,0x4228,0x3a07,0x31e7,0x31c6,0x39e7,0x39e7,0x39e6,0x3a07,0x3a07,0x39e7,0x4228,0x3a07,0x39e7,0x3a07,0x39e7,0x39e7,0x3a07,0x4248,0x39e7,0x31e7,0x31c6,0x31c6,0x39e7,0x39e7,0x39e7,0x31e7,0x39e7,0x3a07,0x39e7,0x3a07,0x3a07,0x4228,0x4a68,0x4228,0x4207,0x3a07,0x3a07,0x31c6,0x39e7,0x31c7,0x3a28,0x4228,0x31e7,0x4228,0x3a07,0x4248,0x3a07,0x4207,0x4228,0x4248,0x3a27,0x4228,0x4248,0x4228,0x3a07,0x3a07,0x4228,0x4228,0x39e7,0x4207,0x4a68,0x4228,0x4207,0x4a68,0x4269,0x4228,0x3a07,0x4248,0x4228,0x3a07,0x4207,0x4228,0x39e7,0x4208,0x39e7,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x3a07,0x39e7,0x4228,0x4248,0x4228,0x3a08,0x4228,0x4228,0x3a07,0x4208,0x4228,0x4a49,0x4228,0x4228,0x3a08,0x4248,0x4248,0x4248,0x4228,0x4248,0x5289,0x4228,0x4a48,0x4207,0x4248,0x4207,0x4208,0x4248,0x4a48,0x4a69,0x4248,0x4228,0x4a69,0x4a69,0x4228,0x4228,0x4208,0x4208,0x4a69,0x4228,0x4208,0x4248,0x39c6,0x4207,0x4a49,0x3a07,0x4228,0x4a49,0x4228,0x4a49,0x4228,0x4207,0x4228,0x4228,0x4228,0x4248,0x4248,0x3a07,0x4248,0x4207,0x4a49,0x4a69,0x4207,0x4208,0x4a49,0x4248,0x4248,0x4a69,0x4228,0x4228,0x4208,0x4248,0x4248,0x4a69,0x4228,0x3a07,0x4228,0x4a89,0x4228,0x4228,0x4228,0x3a07,0x4a48,0x4228,0x4228,0x4248,0x4228,0x4228,0x4248,0x4228,0x4228,0x4a49,0x4a69,0x4228,0x31a7,0x4228,0x4208,0x4208,0x4249,0x4208,0x4228,0x4248,0x4a49,0x4208,0x39c7,0x4228,0x39e7,0x39e7,0x4248,0x39e7,0x4a69,0x4208,0x3a07,0x4a49,0x4a49,0x4a49,0x4228,0x31c7,0x4a69,0x3a08,0x39e7,0x4208,0x4228,0x31c7,0x4208,0x4208,0x31a6,0x39e7, +0x31a6,0x4248,0x4207,0x31c6,0x4208,0x3a07,0x39c6,0x39e7,0x4227,0x3a07,0x3a07,0x39e7,0x31c6,0x4228,0x3a07,0x4248,0x4227,0x3a07,0x31c6,0x4207,0x4227,0x39e6,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x31a6,0x39c6,0x3a07,0x39c6,0x31c6,0x3a07,0x31a6,0x3a07,0x3a07,0x4227,0x39e6,0x39e7,0x31c6,0x39e6,0x31a6,0x39e7,0x31c6,0x31c6,0x39c6,0x39c6,0x39e7,0x3a07,0x39e6,0x39e7,0x39e7,0x31c6,0x39c6,0x39e6,0x31c6,0x31c6,0x31c6,0x39e7,0x4207,0x39c6,0x31a6,0x31c6,0x39e7,0x3a07,0x31c6,0x39e7,0x4228,0x3a07,0x4207,0x39e6,0x39e7,0x39e6,0x29a5,0x39e7,0x3a07,0x39e6,0x3a07,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x31a6,0x39e7,0x31a5,0x31c6,0x4227,0x4228,0x3a07,0x31a6,0x4207,0x39e7,0x4207,0x39e6,0x31c6,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x39e7,0x31e6,0x39e7,0x3a27,0x3a07,0x39e7,0x39c6,0x39e7,0x39e7,0x3a28,0x39e7,0x3a07,0x31c6,0x3a07,0x3a07,0x31c6,0x39e7,0x39e7,0x39e7,0x31c6,0x39e7,0x31c6,0x31c6,0x39e7,0x31c6,0x39e7,0x31c6,0x31c7,0x39e7,0x39e7,0x31c6,0x31c6,0x3a07,0x31c6,0x39e7,0x31a6,0x3a07,0x4228,0x3a07,0x3a07,0x39e7,0x4248,0x4a48,0x3a07,0x3a07,0x4208,0x3a07,0x39e7,0x3a07,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x4228,0x39e7,0x3a07,0x4227,0x3a27,0x4a68,0x39e7,0x3a08,0x4228,0x4228,0x3a07,0x3a07,0x39e7,0x4228,0x4207,0x4208,0x4a48,0x4227,0x4227,0x4228,0x4269,0x3a07,0x3a07,0x4228,0x4228,0x3a07,0x4208,0x39e7,0x4228,0x4228,0x3a07,0x4207,0x39e7,0x3a08,0x3a07,0x39e7,0x4208,0x4228,0x4228,0x4248,0x39e7,0x3a07,0x4228,0x4207,0x4248,0x4248,0x4228,0x4228,0x4228,0x4248,0x4228,0x4a49,0x4208,0x4248,0x4a48,0x4248,0x4a49,0x4228,0x4a69,0x4228,0x4248,0x4248,0x4228,0x4228,0x4228,0x4228,0x4a69,0x4a69,0x4a49,0x4a69,0x4248,0x4248,0x4a48,0x4228,0x3a07,0x4a69,0x4a69,0x3a07,0x4a48,0x4208,0x4208,0x4228,0x4228,0x4a48,0x4248,0x4a69,0x4a69,0x4248,0x4248,0x4228,0x3a07,0x3a07,0x4228,0x4228,0x4208,0x4207,0x4a48,0x4207,0x4208,0x5289,0x4a69,0x4248,0x4228,0x4228,0x4228,0x4228,0x4a69,0x4a89,0x4207,0x4228,0x4a69,0x5289,0x4248,0x4248,0x4228,0x4a69,0x4228,0x4228,0x4248,0x4248,0x3a07,0x4208,0x4248,0x4228,0x4228,0x4a48,0x4a49,0x3a07,0x4208,0x4248,0x4248,0x4228,0x4208,0x4a49,0x4a69,0x4a49,0x4228,0x4228,0x4228,0x4228,0x4248,0x4a48,0x4208,0x31c6,0x39e7,0x3a07,0x4248,0x4248,0x39c7,0x39e7,0x3a07,0x4208,0x4228,0x31c6,0x3a07,0x4208,0x4207,0x4208,0x39e7,0x31a6,0x4208,0x4a49,0x39e7,0x31c7, +0x39e7,0x4207,0x3a07,0x39e7,0x31a6,0x39c6,0x39e7,0x39e6,0x4a48,0x39e6,0x3a07,0x39e7,0x31c6,0x39c6,0x39c6,0x4207,0x4207,0x4227,0x4207,0x39c6,0x39e7,0x4248,0x4227,0x31c6,0x4227,0x39e7,0x3a07,0x31c6,0x31a6,0x31c6,0x39e7,0x39c6,0x4227,0x39e7,0x3a07,0x3a07,0x39e6,0x31c6,0x4207,0x39e6,0x39e7,0x31c6,0x39e6,0x31a6,0x39c6,0x31a6,0x39e7,0x31a5,0x39c6,0x4247,0x4227,0x39e7,0x31c6,0x31e6,0x4248,0x2985,0x4207,0x39e7,0x39e7,0x4227,0x2985,0x3a07,0x39e7,0x3a07,0x39e7,0x39e7,0x3a07,0x4227,0x39c6,0x39e6,0x31a6,0x31a6,0x31a6,0x4228,0x3a27,0x3a07,0x39e7,0x39e7,0x4207,0x3a07,0x31e6,0x39e7,0x3a07,0x3a07,0x39e6,0x31c6,0x4228,0x4248,0x3a07,0x31e6,0x3a07,0x3a07,0x3a07,0x4228,0x4248,0x4227,0x4228,0x3a07,0x4207,0x3a08,0x3a07,0x3a07,0x39e7,0x3a28,0x3a07,0x39e7,0x3a07,0x39e6,0x4207,0x31c6,0x31c6,0x4227,0x3a07,0x31e6,0x31e6,0x3a07,0x31a6,0x3a07,0x4228,0x39e7,0x2985,0x39e7,0x39e7,0x3a07,0x4227,0x3a07,0x4228,0x39e6,0x3a07,0x4227,0x39e7,0x39e7,0x31c6,0x31e7,0x4228,0x4227,0x4228,0x31c6,0x3a07,0x4248,0x4228,0x4207,0x4227,0x39c6,0x39e7,0x39e7,0x3a07,0x4208,0x39e7,0x39e7,0x39e7,0x3185,0x39c6,0x4228,0x31a6,0x31c6,0x3a07,0x3a27,0x4227,0x4248,0x39c6,0x4228,0x4248,0x39e7,0x4248,0x4248,0x39e7,0x3a07,0x4227,0x4248,0x4228,0x4228,0x39e7,0x4a48,0x4248,0x4228,0x4228,0x4228,0x4207,0x4248,0x4248,0x4208,0x4248,0x4228,0x3a07,0x39e7,0x4227,0x4a68,0x4227,0x3a07,0x3a07,0x4228,0x4228,0x4228,0x4a68,0x4228,0x39e7,0x4248,0x4248,0x3a07,0x4228,0x4227,0x4228,0x4208,0x4228,0x4248,0x4a48,0x4228,0x4228,0x4228,0x4208,0x4228,0x4248,0x4248,0x4248,0x4a49,0x4a69,0x4a69,0x4248,0x4a89,0x4a69,0x4248,0x4249,0x4aaa,0x4269,0x4228,0x4228,0x4a69,0x4a48,0x3a07,0x4a49,0x4a69,0x4a69,0x4228,0x4a49,0x3a07,0x4a69,0x4a89,0x4a69,0x4a48,0x52aa,0x52aa,0x4a89,0x4248,0x3a28,0x4228,0x4228,0x4228,0x4208,0x4228,0x39e7,0x4208,0x4228,0x4228,0x52ca,0x4a89,0x4228,0x4a69,0x4a69,0x52aa,0x4248,0x4248,0x4228,0x4248,0x5289,0x4248,0x4a48,0x4248,0x4228,0x4249,0x4248,0x52a9,0x4a48,0x4248,0x4228,0x4248,0x4228,0x4228,0x4228,0x4228,0x4208,0x4228,0x4228,0x4248,0x39e7,0x4a69,0x4228,0x4207,0x39e7,0x4228,0x4248,0x3a07,0x4208,0x4a49,0x3a07,0x4207,0x4207,0x4228,0x4228,0x4227,0x4a48,0x4248,0x52a9,0x4207,0x31c6,0x4a48,0x31a6,0x4228,0x4a48,0x31a6,0x3a07,0x5289,0x4a68,0x4207,0x4a48,0x31a6,0x39e7,0x3a08,0x4208,0x3a08, +0x3a07,0x3a07,0x4207,0x39e6,0x2985,0x39c6,0x4a48,0x3a07,0x39e6,0x3a07,0x39c6,0x39e7,0x3a07,0x39e6,0x39e7,0x39e7,0x3a07,0x39e6,0x31c6,0x39e7,0x39e7,0x39c6,0x4207,0x4228,0x4228,0x31a6,0x39e7,0x31a6,0x31c6,0x4207,0x31a6,0x2965,0x4207,0x4227,0x31c6,0x39e7,0x3a07,0x39c6,0x39e7,0x3a07,0x4248,0x4207,0x4227,0x31e6,0x31c6,0x31a6,0x39e6,0x31a6,0x31c6,0x3a07,0x4207,0x39e7,0x31a6,0x31a6,0x52a9,0x31a4,0x4248,0x3a06,0x39e6,0x4a68,0x3185,0x31c6,0x39e6,0x39e6,0x39e6,0x3a07,0x3a07,0x39e6,0x31e6,0x3a07,0x39c6,0x39e6,0x4207,0x39e6,0x39e7,0x4227,0x31c6,0x31c6,0x39e6,0x4228,0x3a07,0x3a07,0x3a27,0x3a07,0x3a07,0x3a07,0x3a07,0x3a27,0x3a27,0x39e7,0x31e6,0x3a27,0x3a07,0x4248,0x4227,0x3a07,0x4228,0x3a07,0x31a6,0x39e7,0x31c6,0x31c6,0x39e7,0x3a27,0x3a07,0x31e6,0x3a07,0x4a48,0x39e7,0x4268,0x52c9,0x4a47,0x52a8,0x4207,0x3a27,0x39e7,0x31a6,0x4248,0x4228,0x4228,0x4a89,0x4a68,0x4247,0x4248,0x52a8,0x4a67,0x4a89,0x4a89,0x4227,0x632b,0x39e6,0x39c6,0x39e7,0x31c7,0x39e7,0x31e7,0x3a07,0x3a07,0x4228,0x4207,0x3a07,0x39e7,0x39c6,0x3a07,0x4a48,0x4228,0x4248,0x4228,0x3a07,0x4248,0x39e7,0x3185,0x4207,0x4227,0x4a89,0x39e6,0x4228,0x39c6,0x31c6,0x4227,0x5266,0x3a06,0x4a88,0x3a07,0x4a68,0x4207,0x4248,0x4268,0x4248,0x4228,0x4248,0x4227,0x4207,0x4228,0x4248,0x4227,0x3a27,0x4228,0x4228,0x39e7,0x39e7,0x4207,0x4228,0x4248,0x31c6,0x4248,0x4a89,0x4227,0x4228,0x39c6,0x4248,0x4248,0x3a07,0x4a68,0x4247,0x4227,0x4a69,0x4a48,0x4248,0x4228,0x4a69,0x4a68,0x4227,0x4a49,0x4248,0x52ca,0x4a48,0x5ac9,0x4248,0x4228,0x4228,0x4228,0x3a28,0x4248,0x4228,0x4a48,0x4248,0x4248,0x4248,0x4a49,0x528a,0x4248,0x4207,0x4a69,0x4a69,0x4a69,0x4248,0x4a69,0x4208,0x528a,0x4a89,0x4a49,0x4248,0x4228,0x4a69,0x4a48,0x4248,0x4a49,0x4a69,0x4228,0x4a89,0x4a69,0x3a07,0x4a89,0x4a89,0x4248,0x4a69,0x4a48,0x4a89,0x4a89,0x4228,0x4228,0x4208,0x4207,0x6b8d,0x6b8c,0x634b,0x5aea,0x52ca,0x5aea,0x52ca,0x5aca,0x6b4c,0x52a9,0x4a69,0x4228,0x4a69,0x4248,0x4a68,0x4a69,0x4228,0x4a48,0x4a49,0x4228,0x4228,0x4228,0x4228,0x4a49,0x4228,0x4248,0x4228,0x4228,0x4248,0x4228,0x4228,0x4a69,0x3a08,0x4228,0x4a89,0x3a28,0x4248,0x4228,0x3a07,0x39e7,0x4228,0x4a48,0x31a5,0x52a9,0x52a9,0x4a68,0x4247,0x4226,0x5ac8,0x39c6,0x3185,0x4a68,0x4227,0x39e6,0x4207,0x4227,0x39e6,0x39e6,0x4248,0x3a07,0x4a48,0x2985,0x4208,0x4228,0x39c7,0x39e7, +0x39e7,0x39c6,0x39e6,0x31c6,0x39e7,0x3a07,0x3a07,0x31a6,0x39e6,0x3a07,0x3a07,0x39c6,0x4227,0x4248,0x3a07,0x3a07,0x39c6,0x39c6,0x4a68,0x3a07,0x31c6,0x31c6,0x39c6,0x4207,0x39c6,0x39e6,0x39e7,0x39c6,0x3a07,0x39e6,0x31a6,0x39e7,0x39c6,0x39e6,0x3a07,0x31a6,0x39e7,0x3a07,0x31c6,0x31a6,0x3a07,0x39e6,0x39e7,0x4248,0x3a07,0x3186,0x31a6,0x4208,0x39e7,0x31c6,0x39c6,0x31c6,0x39c6,0x2985,0x4a68,0x31a5,0x4228,0x3a07,0x4228,0x4a68,0x2985,0x3a07,0x3a07,0x31c6,0x31a6,0x39e6,0x39e6,0x31a5,0x4227,0x39e7,0x4207,0x4a68,0x3a07,0x31c6,0x4248,0x39e7,0x3185,0x39c6,0x39e7,0x3a07,0x4228,0x31c6,0x39e6,0x3a07,0x4227,0x3a27,0x3a07,0x39e7,0x31e6,0x4248,0x3a07,0x4228,0x31c6,0x4228,0x3a07,0x31c6,0x3a27,0x4207,0x3a07,0x31c6,0x3a28,0x31c6,0x3a28,0x3a07,0x3a07,0x3a27,0x3a07,0x3a07,0x31c7,0x31c6,0x4248,0x4248,0x4248,0x4227,0x4248,0x39e7,0x39e7,0x4227,0x39e6,0x3a07,0x3a07,0x3a07,0x4248,0x31c6,0x4247,0x4207,0x39e6,0x4a69,0x31a6,0x4a88,0x4207,0x39e7,0x3a07,0x3a07,0x31e6,0x3a07,0x3a07,0x31c6,0x4207,0x3a07,0x3a07,0x39c7,0x3a07,0x4228,0x4228,0x4228,0x4207,0x3a08,0x4248,0x4207,0x4227,0x39c6,0x4248,0x39e6,0x4207,0x39e7,0x5ae9,0x4a66,0x5286,0x4a67,0x5ae9,0x39e7,0x52a8,0x4a87,0x4247,0x4248,0x4248,0x4248,0x4a68,0x4248,0x4268,0x4228,0x4228,0x3a07,0x4a69,0x4248,0x4228,0x4228,0x4228,0x4228,0x39e7,0x4228,0x4248,0x4248,0x4227,0x39e7,0x4a48,0x4228,0x4228,0x4228,0x4248,0x4a48,0x4248,0x4248,0x5289,0x4a88,0x39e7,0x4248,0x5289,0x4207,0x4a48,0x4228,0x4248,0x528a,0x4227,0x4a69,0x4a68,0x5288,0x4228,0x4207,0x4228,0x4a69,0x4228,0x4a48,0x4a49,0x4a69,0x4a49,0x4a69,0x4a69,0x4248,0x4248,0x4a49,0x4228,0x4a48,0x4a89,0x4a49,0x4a48,0x4a69,0x4228,0x4a69,0x4248,0x4248,0x4a69,0x4228,0x5289,0x5289,0x4248,0x4228,0x4228,0x4a48,0x4a69,0x5289,0x4a49,0x4228,0x4248,0x4a69,0x4228,0x4228,0x4a69,0x4a69,0x4a69,0x4249,0x4a49,0x4248,0x632b,0x738d,0x6b8c,0x52a9,0x5b0b,0x6b6d,0x5aeb,0x4a69,0x5aeb,0x52ca,0x4a89,0x4a69,0x4a69,0x4aaa,0x52aa,0x4228,0x4249,0x4248,0x4a89,0x4a69,0x4a69,0x4248,0x4228,0x4a69,0x4228,0x4228,0x4a48,0x4228,0x4228,0x4207,0x4248,0x39e7,0x4208,0x4248,0x4228,0x39e7,0x3a07,0x4208,0x3a07,0x4207,0x4228,0x4248,0x4228,0x4208,0x4207,0x5288,0x4a68,0x5288,0x5aa8,0x4a68,0x4a68,0x4a48,0x4a89,0x4207,0x4228,0x4a89,0x4207,0x39e7,0x52aa,0x4a69,0x4a69,0x4228,0x4248,0x4228,0x39e7,0x3a08, +0x39e7,0x31a6,0x39e7,0x3a07,0x39e6,0x4227,0x39e7,0x4a48,0x4227,0x3a07,0x39e6,0x4207,0x39e7,0x3a07,0x4227,0x3a07,0x4208,0x3a07,0x4227,0x4227,0x31a6,0x4248,0x4207,0x31c6,0x39e7,0x4228,0x4227,0x4228,0x4207,0x39e6,0x3185,0x3a07,0x3a07,0x39e7,0x39e7,0x4227,0x39e6,0x31c6,0x39c6,0x39c6,0x39e7,0x4207,0x3a07,0x39e6,0x31a6,0x39c6,0x4a48,0x39e6,0x39e6,0x4a47,0x39e6,0x4248,0x4228,0x39c6,0x3186,0x31a5,0x31c6,0x39c6,0x39c7,0x31e7,0x31a6,0x39e7,0x39e7,0x3a07,0x39c6,0x39c6,0x3185,0x31a5,0x31c6,0x31c6,0x3a07,0x39e7,0x39c6,0x3a07,0x3a07,0x3a07,0x39c6,0x3a07,0x39e6,0x3a07,0x3a07,0x39e7,0x39e7,0x31c6,0x39e7,0x4248,0x39e7,0x39e6,0x39e7,0x3a07,0x3a07,0x4228,0x31c6,0x4248,0x39e7,0x4228,0x39e7,0x31e7,0x3a07,0x39e7,0x3a07,0x3a07,0x3a07,0x3a28,0x3a07,0x3a07,0x39e7,0x3a08,0x3a07,0x39e7,0x29a6,0x31c6,0x39e7,0x39e6,0x3a07,0x39e7,0x31c6,0x39e7,0x3a07,0x4228,0x31c6,0x4228,0x3a07,0x31c6,0x31c6,0x4228,0x4207,0x39e7,0x3a08,0x39e6,0x31c6,0x39e7,0x39e6,0x39e7,0x3a07,0x39e7,0x3a07,0x39e7,0x39e7,0x4228,0x39e7,0x4207,0x4207,0x4248,0x3a07,0x3a07,0x3a07,0x4228,0x3a07,0x3a07,0x39e7,0x39e7,0x31a7,0x31c6,0x39c6,0x4228,0x4a68,0x4a48,0x4207,0x4a48,0x4248,0x4247,0x4248,0x4a68,0x4227,0x4228,0x4248,0x3a07,0x4228,0x4227,0x4207,0x4228,0x4228,0x3a07,0x4248,0x4a48,0x4248,0x4228,0x4228,0x4228,0x4208,0x4a49,0x4228,0x3a07,0x39e7,0x3a07,0x4228,0x4228,0x4207,0x4228,0x4207,0x4248,0x4208,0x4207,0x4227,0x4227,0x3a08,0x4248,0x4208,0x4228,0x4248,0x4208,0x4a69,0x4248,0x3a07,0x4228,0x4208,0x4228,0x4208,0x4228,0x4a89,0x4248,0x4248,0x4248,0x4a89,0x4248,0x4a69,0x4a69,0x4a48,0x4a69,0x4a89,0x4a8a,0x528a,0x4248,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a89,0x4a69,0x4a69,0x4228,0x4228,0x4248,0x4228,0x4248,0x4228,0x4248,0x4228,0x4a69,0x528a,0x528a,0x4228,0x4a89,0x4a69,0x4208,0x4a69,0x4a69,0x4208,0x4a69,0x4a89,0x4a69,0x52aa,0x3a07,0x4207,0x4228,0x630b,0x4a49,0x52aa,0x5aeb,0x4a69,0x4a69,0x52a9,0x4228,0x4a69,0x4a69,0x4a89,0x52aa,0x3a08,0x4a89,0x4a89,0x4228,0x4a69,0x4a89,0x4a69,0x4228,0x4228,0x4a69,0x4a48,0x4248,0x4a48,0x3a07,0x4228,0x3a07,0x4a49,0x4228,0x4208,0x4208,0x4228,0x3a08,0x4228,0x4228,0x4228,0x4a49,0x4248,0x4a89,0x4228,0x39e7,0x3a07,0x39e7,0x4228,0x4a48,0x4a68,0x3a06,0x4228,0x4208,0x4228,0x39c7,0x3a07,0x4208,0x4a49,0x4a49,0x4a69,0x4228,0x528a,0x528a,0x4228,0x3a08,0x4249, +0x39e7,0x3a07,0x4207,0x4227,0x39e6,0x39e6,0x3a07,0x4207,0x3a07,0x39e6,0x31a6,0x3a07,0x4207,0x39c6,0x4248,0x39e7,0x39e7,0x39e7,0x3a07,0x39e6,0x3a27,0x4a68,0x3a07,0x4228,0x3a07,0x4248,0x4227,0x3a07,0x4227,0x3a07,0x31a6,0x39e6,0x39e7,0x39e6,0x39e7,0x4207,0x39e7,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x4207,0x31a6,0x5289,0x52a9,0x4a67,0x52a8,0x52a8,0x52a8,0x39e6,0x3a06,0x4a68,0x4a47,0x4207,0x3a06,0x4206,0x4247,0x39e7,0x4248,0x4a48,0x4227,0x4248,0x4a48,0x39e7,0x4227,0x31a5,0x4a48,0x3a26,0x4247,0x31c6,0x3a07,0x4228,0x3a27,0x3a07,0x39e7,0x39e7,0x31a6,0x4207,0x3a07,0x4a89,0x4248,0x4228,0x4227,0x4227,0x4228,0x39e7,0x39c7,0x3a28,0x4228,0x3a07,0x4248,0x3a07,0x3a07,0x3a08,0x3a07,0x31c6,0x3a07,0x4228,0x39e7,0x4228,0x3a07,0x31e7,0x3a07,0x3a07,0x3a07,0x39e7,0x3a28,0x3a28,0x39e7,0x31a6,0x31e7,0x3a07,0x3a07,0x39e7,0x39e7,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x31e6,0x3a07,0x39e7,0x39e7,0x3a07,0x39e7,0x4228,0x31e6,0x31a5,0x4227,0x4227,0x39e7,0x39e7,0x39e6,0x3a27,0x4248,0x39e7,0x31c7,0x4228,0x3a07,0x3a27,0x3a07,0x4228,0x3a07,0x4228,0x3a07,0x4207,0x4228,0x4228,0x3a27,0x39e7,0x4227,0x4a68,0x4207,0x4248,0x31e7,0x3a28,0x4228,0x3a07,0x4228,0x4268,0x4228,0x4248,0x4207,0x4248,0x4a68,0x4248,0x4248,0x4a48,0x4a48,0x4248,0x4268,0x4248,0x4228,0x4228,0x4228,0x4248,0x4228,0x4228,0x4248,0x39e7,0x4207,0x4207,0x4208,0x31a6,0x39e7,0x4228,0x3a07,0x4207,0x4228,0x4228,0x3a07,0x4228,0x4208,0x4207,0x4228,0x4207,0x3a07,0x4248,0x4228,0x4248,0x4228,0x4228,0x39e7,0x4a69,0x4248,0x4248,0x3a28,0x4a69,0x4228,0x4269,0x3a07,0x4a69,0x4a69,0x4248,0x4228,0x4a89,0x4228,0x4a69,0x4a89,0x4a49,0x4a49,0x4a49,0x4248,0x4248,0x4a69,0x4a89,0x4a69,0x4a48,0x4a69,0x4a69,0x4a49,0x4a89,0x4269,0x4248,0x4248,0x4248,0x4248,0x4228,0x4228,0x3a07,0x4248,0x4228,0x52aa,0x52aa,0x630b,0x6b4c,0x52a9,0x632b,0x6b8c,0x5289,0x634c,0x7bee,0x6b8d,0x632b,0x73cd,0x632b,0x73ad,0x6b6c,0x5289,0x52aa,0x52a9,0x52a9,0x4a69,0x5289,0x4a68,0x52aa,0x4a69,0x4a89,0x630b,0x5289,0x4a68,0x4a69,0x4a69,0x4a89,0x4a48,0x4a68,0x4228,0x4207,0x4248,0x4228,0x4228,0x4208,0x4248,0x4228,0x4a49,0x4a69,0x4a69,0x4248,0x4228,0x4228,0x3a07,0x4208,0x4228,0x4248,0x3a07,0x4207,0x4208,0x3a07,0x4228,0x4a69,0x5289,0x4a47,0x4206,0x5aea,0x52a9,0x4a68,0x3a07,0x5289,0x39e7,0x4228,0x4228,0x5289,0x4a69,0x4a69,0x4a49,0x4207,0x39c7, +0x3a07,0x4227,0x3a07,0x4207,0x39e7,0x39e7,0x4207,0x4227,0x4207,0x4227,0x3a07,0x39c6,0x3a07,0x3a07,0x4207,0x4207,0x3a07,0x3a07,0x4227,0x4227,0x4207,0x4a48,0x4a68,0x4268,0x4227,0x4248,0x4227,0x39e7,0x39e6,0x39e7,0x4a48,0x4207,0x39e7,0x39e7,0x4a68,0x3a07,0x31a6,0x4207,0x4a68,0x3a07,0x39e7,0x39c6,0x4227,0x31a6,0x4228,0x4227,0x4a48,0x4207,0x4247,0x52c9,0x4a67,0x4a68,0x39e7,0x4a88,0x4a48,0x4227,0x39e6,0x4a88,0x4227,0x39e7,0x4a68,0x4a68,0x39e6,0x4a48,0x31a6,0x4a48,0x39e6,0x4227,0x4a48,0x4a68,0x2965,0x39e7,0x39e7,0x39e7,0x31c6,0x39e7,0x3a07,0x31c6,0x3a07,0x3a27,0x4228,0x31e6,0x31c6,0x3a07,0x4228,0x4228,0x4227,0x3a07,0x39e7,0x3a07,0x4248,0x4248,0x3a08,0x31e7,0x31e7,0x3a07,0x39e7,0x31e6,0x31a6,0x39e7,0x39e7,0x4228,0x3a07,0x31c7,0x3a07,0x3a07,0x4228,0x4248,0x4248,0x39c6,0x39e7,0x31c6,0x31c6,0x3a28,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x3a07,0x31c6,0x3a07,0x4248,0x39e7,0x39e7,0x4228,0x4227,0x39e6,0x4227,0x4207,0x4228,0x3a07,0x4228,0x4228,0x39e7,0x3a27,0x3a07,0x3a28,0x4228,0x3a07,0x4248,0x4248,0x3a07,0x4228,0x4248,0x4228,0x4228,0x3a07,0x4228,0x4228,0x39e7,0x4248,0x3a07,0x39e7,0x3a28,0x4228,0x4228,0x3a07,0x39e7,0x3a28,0x3a27,0x4a68,0x4248,0x4228,0x4a69,0x4a89,0x4a69,0x4248,0x4a68,0x4a89,0x4a68,0x4228,0x4228,0x4228,0x4228,0x4a69,0x4a68,0x3a07,0x4a69,0x4248,0x4207,0x4a48,0x4a69,0x39e7,0x4a48,0x3a07,0x39e7,0x4228,0x4248,0x4227,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4a69,0x4a89,0x4a69,0x4a48,0x4228,0x4a48,0x4228,0x39c6,0x4a89,0x4a48,0x4228,0x4248,0x4228,0x4228,0x4269,0x4248,0x4a69,0x4a69,0x4a69,0x4a49,0x528a,0x4248,0x4a69,0x528a,0x4248,0x5289,0x4a49,0x4228,0x4a89,0x528a,0x4a49,0x4a89,0x4a89,0x4208,0x4a89,0x52aa,0x4248,0x4a48,0x4a69,0x4208,0x4248,0x4248,0x4a68,0x4248,0x4228,0x4228,0x4a48,0x4228,0x4a69,0x632b,0x6b4c,0x630b,0x6b8c,0x73ad,0x6b6c,0x632b,0x6b6c,0x8c91,0x634c,0x5b0a,0x5b0a,0x7bee,0x6b8d,0x5aca,0x6b6c,0x5aea,0x5289,0x52a9,0x52a9,0x52a9,0x52ca,0x52a9,0x5aca,0x5aea,0x4a68,0x4228,0x4a69,0x4a89,0x4a69,0x4a69,0x4207,0x4a69,0x4228,0x4248,0x4a49,0x4208,0x4a69,0x4a69,0x4a69,0x4a89,0x4a89,0x4248,0x4228,0x4228,0x4a69,0x4248,0x4a49,0x4a69,0x3a07,0x39e7,0x4228,0x4a69,0x4228,0x4207,0x4228,0x4a68,0x4a48,0x4227,0x632a,0x5ac8,0x5288,0x39c6,0x4207,0x4248,0x39e7,0x3a07,0x4a49,0x4a69,0x4207,0x4207,0x4228,0x31c7, +0x4227,0x4a89,0x4248,0x39e6,0x39c6,0x4207,0x4a48,0x4248,0x39c6,0x4227,0x4228,0x4228,0x4207,0x4a68,0x39e7,0x39e6,0x4a68,0x4227,0x4227,0x4248,0x3a07,0x39e7,0x4a68,0x4268,0x4a68,0x4227,0x4207,0x39e6,0x4228,0x3a07,0x39c6,0x39c6,0x3a07,0x31c6,0x4248,0x4227,0x31c6,0x39e7,0x31a6,0x39e6,0x39e7,0x31a6,0x39e7,0x39e7,0x39c7,0x39c6,0x4227,0x39e7,0x31c6,0x4227,0x39e6,0x4a68,0x3a07,0x4a48,0x4227,0x4228,0x4227,0x39e6,0x3a07,0x39e7,0x3a07,0x4248,0x31a6,0x4227,0x31a6,0x39e7,0x31c6,0x4207,0x4227,0x4a68,0x3a07,0x39e7,0x31c6,0x31c6,0x39e7,0x3a07,0x39e7,0x4227,0x3a07,0x3a07,0x4248,0x4227,0x3a07,0x4207,0x3a07,0x3a07,0x4228,0x4227,0x3a07,0x3a07,0x3a27,0x3a07,0x31c6,0x39e7,0x39e7,0x39e7,0x4228,0x3a28,0x3a07,0x39e7,0x4228,0x3a07,0x4248,0x3a07,0x39e7,0x31c6,0x39e7,0x3a07,0x39c6,0x31c6,0x3a07,0x31e7,0x39e7,0x3a28,0x31c6,0x39e7,0x31c6,0x3a07,0x4228,0x4248,0x3a07,0x3a07,0x3a08,0x4248,0x3a07,0x39e7,0x4228,0x3a07,0x3a07,0x31e6,0x4248,0x4227,0x3a07,0x4227,0x4248,0x39e7,0x4228,0x4227,0x3a07,0x39e7,0x39e7,0x3a07,0x31c6,0x3a07,0x39e7,0x3a07,0x3a07,0x4228,0x3a07,0x31e6,0x39e7,0x4228,0x39e7,0x4208,0x3a07,0x4248,0x4228,0x3a07,0x4228,0x4228,0x4228,0x3a07,0x4248,0x4a48,0x4248,0x4248,0x4a48,0x52aa,0x4248,0x4a48,0x4228,0x4248,0x4248,0x4248,0x4248,0x4a48,0x4228,0x4248,0x4248,0x4248,0x4228,0x4248,0x4248,0x4228,0x4228,0x3a07,0x4a69,0x3a07,0x4228,0x39e7,0x3a07,0x4227,0x4228,0x4228,0x4228,0x4207,0x4228,0x4228,0x4228,0x4a69,0x4a49,0x4a69,0x4228,0x4248,0x4a49,0x39e7,0x4a89,0x4a69,0x4248,0x4a69,0x4a69,0x4248,0x4a69,0x4a69,0x4a69,0x4248,0x4248,0x4a69,0x4a69,0x4a69,0x4248,0x4a89,0x4a89,0x4a69,0x4a69,0x4208,0x4a49,0x4a69,0x52aa,0x4248,0x4a69,0x4a69,0x4a89,0x5aeb,0x4269,0x528a,0x52aa,0x3a07,0x52aa,0x4a69,0x5289,0x4a89,0x4228,0x4a69,0x4a69,0x4a69,0x4228,0x5acb,0x6b4c,0x4a48,0x52a9,0x6b6c,0x5aea,0x4a69,0x4a69,0x52aa,0x52ca,0x52ca,0x4a69,0x4a68,0x4a89,0x4a68,0x5aca,0x632b,0x4a69,0x5aea,0x5aeb,0x52a9,0x630b,0x52aa,0x632c,0x5aea,0x632b,0x634c,0x4a69,0x5289,0x5289,0x4248,0x4a48,0x4a89,0x4a69,0x4a49,0x4a48,0x4228,0x4228,0x4a69,0x4a69,0x4228,0x4228,0x4a89,0x4228,0x4a89,0x528a,0x4228,0x4208,0x3a08,0x4228,0x4228,0x4a69,0x4a69,0x39e7,0x4a69,0x4228,0x4a48,0x52a9,0x52ca,0x4a48,0x4a68,0x5289,0x4228,0x4228,0x4228,0x4a48,0x4a69,0x4228,0x39c6,0x3a07,0x4228,0x4228,0x39e7, +0x4227,0x4a48,0x4a68,0x4a48,0x4227,0x4a48,0x4247,0x4247,0x4228,0x4a48,0x4228,0x4248,0x4248,0x4248,0x4a68,0x4227,0x4227,0x39c6,0x3a07,0x4207,0x4207,0x4227,0x3a07,0x4227,0x4a69,0x4207,0x4228,0x39e6,0x39e6,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x4248,0x4207,0x31c6,0x39c6,0x2964,0x3a07,0x4228,0x31a6,0x39e7,0x3a07,0x39e7,0x39e7,0x4207,0x4228,0x39e7,0x3a07,0x39e7,0x39c6,0x4207,0x3a07,0x3a27,0x39e6,0x4207,0x4227,0x4248,0x3a07,0x31e6,0x31c6,0x3a07,0x31c6,0x3a07,0x39e6,0x31c6,0x39e7,0x31c6,0x31c6,0x3a07,0x39e7,0x4228,0x4207,0x3a07,0x3a07,0x31a6,0x4207,0x4227,0x3a07,0x3a27,0x39e7,0x39c6,0x39e6,0x31c6,0x4227,0x4248,0x3a07,0x3a27,0x4228,0x4a68,0x3a28,0x31c6,0x39c7,0x39e7,0x3a07,0x3a07,0x39e7,0x3a27,0x3a07,0x3a07,0x4a69,0x4228,0x39e7,0x39e7,0x3a07,0x31c6,0x31c6,0x39e7,0x39e7,0x31c6,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x31c6,0x31c6,0x4228,0x4248,0x4228,0x3a28,0x4228,0x4228,0x39e7,0x39e7,0x39e7,0x4207,0x4227,0x4227,0x4207,0x4228,0x3a07,0x4a48,0x4207,0x31a6,0x4228,0x4228,0x3a07,0x4228,0x4228,0x39e7,0x4228,0x4228,0x4228,0x39e7,0x3a28,0x3a07,0x4228,0x4268,0x3a07,0x3a28,0x3a07,0x3a07,0x4a69,0x4a49,0x4228,0x3a07,0x4228,0x4248,0x4a69,0x4228,0x4248,0x4207,0x4248,0x4a69,0x4a48,0x4a68,0x4a68,0x4248,0x4228,0x4228,0x4248,0x4228,0x4228,0x4a48,0x4a49,0x4228,0x4a68,0x4248,0x4228,0x4a69,0x4248,0x4248,0x4228,0x4228,0x3a08,0x4248,0x4a49,0x4208,0x4207,0x4228,0x4a48,0x4228,0x4248,0x4a69,0x4228,0x3a07,0x4228,0x4248,0x4248,0x4248,0x4a69,0x4a69,0x4a69,0x4a8a,0x4249,0x4a69,0x4248,0x4269,0x4a69,0x4a68,0x4a69,0x4a89,0x4248,0x4a69,0x4a69,0x4a89,0x4a69,0x4a48,0x4a89,0x4249,0x4a89,0x4a89,0x5289,0x4228,0x4248,0x4269,0x4248,0x4a89,0x528a,0x4a48,0x4a69,0x4a69,0x4248,0x4a69,0x4a69,0x4a69,0x4a69,0x4a48,0x4a69,0x4a69,0x52ca,0x52ca,0x4228,0x4a69,0x4a69,0x4228,0x4228,0x52aa,0x52ca,0x4249,0x4228,0x52aa,0x4228,0x4a69,0x5289,0x528a,0x4a69,0x4228,0x52aa,0x5289,0x4248,0x4228,0x4a48,0x4a69,0x4a69,0x4228,0x4a69,0x4a48,0x4228,0x4a69,0x4a69,0x52a9,0x4a69,0x4a69,0x4a69,0x4a48,0x4248,0x4a69,0x4228,0x4248,0x4228,0x4a69,0x4a69,0x4228,0x4a89,0x4207,0x4a69,0x4a69,0x39e7,0x4a69,0x3a07,0x4228,0x4228,0x39e7,0x4228,0x39e7,0x4a48,0x4248,0x4208,0x4a48,0x4228,0x39e7,0x4227,0x52a9,0x4248,0x4a49,0x5289,0x4228,0x4228,0x4a48,0x52aa,0x4a69,0x4207,0x39e7,0x39e7,0x4a89,0x4228,0x39e7, +0x39e7,0x31c6,0x4227,0x4227,0x4a48,0x4a48,0x4227,0x4227,0x3a07,0x4248,0x39e7,0x3a07,0x4228,0x3a07,0x4228,0x4227,0x52a9,0x5289,0x3a07,0x39e7,0x3a07,0x4227,0x4248,0x4248,0x4228,0x39e7,0x4228,0x39e7,0x3a07,0x39e7,0x4207,0x4227,0x4227,0x39c6,0x4207,0x4227,0x4248,0x4228,0x4227,0x3a07,0x3a07,0x3a07,0x4207,0x39e6,0x39e7,0x4227,0x3a07,0x3a07,0x3a07,0x39e7,0x4227,0x4248,0x3a07,0x39e7,0x31a6,0x4227,0x4227,0x4207,0x31c6,0x4227,0x4a68,0x39e6,0x4227,0x3a07,0x39e7,0x39e6,0x3a07,0x39e7,0x39c6,0x4207,0x39e6,0x3a07,0x4228,0x4248,0x4227,0x3a07,0x31c6,0x39e7,0x4227,0x4227,0x4228,0x4207,0x4207,0x4227,0x3a07,0x4248,0x4268,0x4228,0x4228,0x39e7,0x4228,0x4268,0x3a07,0x39e7,0x3a28,0x4228,0x3a28,0x3a07,0x4248,0x3a07,0x3a07,0x3a07,0x4228,0x31c6,0x39e7,0x39e7,0x4228,0x3185,0x3a27,0x4248,0x3a07,0x39e7,0x3a07,0x4228,0x4227,0x4248,0x3a07,0x3a07,0x4228,0x4228,0x39e7,0x3a07,0x3a07,0x3a07,0x3a27,0x3a07,0x3a07,0x4248,0x4248,0x4248,0x4248,0x4248,0x4228,0x4a68,0x3a07,0x4228,0x3a07,0x4228,0x4227,0x4227,0x4228,0x4248,0x4228,0x4228,0x4208,0x4228,0x3a27,0x3a07,0x4228,0x4248,0x39e7,0x39e7,0x4228,0x4a69,0x4208,0x4208,0x4208,0x3a07,0x4248,0x4a48,0x4228,0x4228,0x4248,0x4248,0x4248,0x4a48,0x4a68,0x52a9,0x4227,0x4227,0x4a48,0x4a68,0x4248,0x4228,0x4248,0x4248,0x4a89,0x4a48,0x4248,0x4a89,0x4248,0x4a69,0x4a48,0x4a69,0x4a69,0x4248,0x4a49,0x4248,0x4a68,0x4228,0x4248,0x4a69,0x4228,0x4228,0x4a69,0x4a69,0x4a89,0x4248,0x4248,0x4a48,0x4a69,0x4a69,0x4a89,0x4a69,0x4248,0x4a69,0x4a69,0x4a49,0x4a89,0x4a69,0x52aa,0x4a69,0x4a49,0x4a69,0x5aeb,0x52a9,0x4a89,0x4228,0x4207,0x4228,0x4a69,0x52aa,0x4a8a,0x4a89,0x4a49,0x52aa,0x4248,0x4248,0x4248,0x4a89,0x4a89,0x4a89,0x4a69,0x4a69,0x4a69,0x39e7,0x4248,0x4a69,0x5289,0x4a89,0x4a49,0x4248,0x4a69,0x4a89,0x4a89,0x4228,0x4a48,0x4a48,0x4a48,0x52aa,0x4a69,0x4a69,0x4a89,0x52aa,0x4a69,0x4a89,0x5289,0x4a49,0x4228,0x4208,0x4a69,0x4a69,0x4a69,0x4a89,0x4228,0x4a69,0x4a89,0x4228,0x4248,0x4208,0x4a48,0x52aa,0x4228,0x4228,0x4a89,0x4a89,0x528a,0x4a69,0x4a49,0x4a89,0x4228,0x4228,0x4a69,0x4269,0x5aeb,0x4a89,0x4228,0x4a69,0x4228,0x4a69,0x4a69,0x4248,0x4228,0x4a69,0x4a69,0x52aa,0x4228,0x4a69,0x4a69,0x4a69,0x4a49,0x4228,0x4228,0x4248,0x4228,0x4228,0x4207,0x4228,0x4a89,0x4228,0x4208,0x4228,0x39e7,0x4a49,0x5289,0x4a48,0x4227,0x39e7,0x3a07,0x3a07, +0x4207,0x39c7,0x4248,0x4248,0x4227,0x4207,0x3a07,0x4207,0x4228,0x4248,0x4248,0x4228,0x4248,0x4248,0x4207,0x4a68,0x4227,0x4a88,0x4a48,0x39e7,0x3a07,0x4207,0x3a07,0x4208,0x4a48,0x4227,0x4207,0x4248,0x39e7,0x4207,0x39e7,0x39e6,0x4a48,0x4227,0x39e7,0x4227,0x4a68,0x4227,0x3a07,0x3a07,0x4227,0x3a07,0x4227,0x3a07,0x3a07,0x4227,0x4248,0x4227,0x4227,0x4227,0x4227,0x39e7,0x4227,0x4248,0x4248,0x4a68,0x4227,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x4227,0x39e7,0x31c6,0x39e7,0x3a07,0x4228,0x4a69,0x3a07,0x4248,0x4207,0x39e7,0x3a07,0x31a6,0x39e6,0x4207,0x4228,0x3a07,0x4248,0x4a68,0x4228,0x4227,0x39e6,0x3a07,0x3a07,0x4227,0x4248,0x4228,0x39e7,0x4228,0x3a07,0x3a07,0x3a27,0x4228,0x4228,0x3a07,0x4248,0x4228,0x4248,0x3a07,0x3a07,0x3a07,0x39e7,0x39c6,0x39e7,0x31a6,0x39e7,0x31c6,0x3a07,0x4228,0x4228,0x3a07,0x4248,0x3a07,0x4248,0x4228,0x3a08,0x4228,0x4228,0x4227,0x4248,0x3a27,0x3a07,0x3a27,0x4269,0x4248,0x4228,0x4248,0x4228,0x4248,0x4248,0x4248,0x4248,0x4227,0x4248,0x4228,0x4228,0x4248,0x3a07,0x4207,0x4248,0x4a69,0x3a07,0x4228,0x4a69,0x4248,0x4228,0x4a69,0x4228,0x4207,0x4228,0x4228,0x4a68,0x3a07,0x4228,0x4248,0x4228,0x4248,0x4208,0x4248,0x4a69,0x4a89,0x4a68,0x4a69,0x4a48,0x52a8,0x4a68,0x4228,0x4248,0x4248,0x4a89,0x4a68,0x4227,0x4a88,0x4248,0x4248,0x4a69,0x4248,0x4a69,0x4248,0x4a69,0x4248,0x4248,0x4a69,0x4a69,0x4248,0x4248,0x4248,0x4228,0x4a69,0x4a89,0x4a49,0x4a69,0x4248,0x4248,0x4248,0x4248,0x4a69,0x4a48,0x4a89,0x4a69,0x4248,0x4248,0x4a89,0x4a69,0x4248,0x4248,0x4a89,0x4248,0x4a49,0x4a89,0x4228,0x4228,0x4a89,0x4248,0x4249,0x4a89,0x4a69,0x4a49,0x4228,0x4248,0x4a89,0x4a89,0x4228,0x4aaa,0x4248,0x4a89,0x52eb,0x4248,0x4a69,0x4a89,0x52aa,0x4a48,0x4a48,0x4248,0x4a69,0x4228,0x4a69,0x52ca,0x4a49,0x4a49,0x4a89,0x52aa,0x4a69,0x4228,0x4a48,0x4248,0x4a89,0x4a69,0x4a69,0x4248,0x4a48,0x4a69,0x4a69,0x4a69,0x52aa,0x52aa,0x52ca,0x4a69,0x4248,0x4a48,0x4228,0x4228,0x4a69,0x4a69,0x528a,0x4a69,0x4228,0x4a49,0x4a69,0x5289,0x4a69,0x4a89,0x52aa,0x5289,0x528a,0x4a69,0x4a89,0x4a89,0x4248,0x4248,0x4a89,0x4a69,0x4a89,0x4a49,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4228,0x4228,0x4228,0x4a69,0x4a69,0x4a89,0x52aa,0x4a69,0x4228,0x4248,0x4a49,0x4a49,0x4228,0x4228,0x4208,0x4a48,0x4208,0x4248,0x39e7,0x4208,0x4228,0x4a48,0x4a49,0x5289,0x4228,0x4228,0x39e7,0x4248,0x4a48, +0x4a48,0x4207,0x4227,0x4248,0x4a68,0x4a68,0x4a68,0x4a48,0x4248,0x4248,0x4228,0x4207,0x4228,0x4a88,0x4228,0x39c7,0x4a68,0x4a68,0x4207,0x31a6,0x4227,0x4a69,0x4227,0x39c6,0x4228,0x4228,0x39e7,0x4207,0x4207,0x4a68,0x4248,0x4228,0x4227,0x3a07,0x4207,0x3a07,0x3a07,0x3a07,0x39e7,0x3a07,0x4227,0x4227,0x3a07,0x4227,0x3a07,0x4227,0x4227,0x4a48,0x4a69,0x4248,0x4248,0x4228,0x4a68,0x4a68,0x4248,0x3a07,0x4228,0x4268,0x4a68,0x3a07,0x3a07,0x4228,0x31c6,0x3a07,0x3a07,0x4207,0x39e7,0x39e6,0x3a07,0x39e6,0x4227,0x3a07,0x3a07,0x39c6,0x39c6,0x39e7,0x4248,0x3a07,0x3a27,0x4248,0x4227,0x4207,0x4248,0x3a07,0x4228,0x4a69,0x39e7,0x4228,0x4227,0x4248,0x4248,0x4248,0x4228,0x3a27,0x4228,0x3a07,0x3a07,0x4228,0x3a07,0x39e7,0x4208,0x4228,0x4248,0x4227,0x39e7,0x3a07,0x3a07,0x4228,0x4208,0x3a07,0x4248,0x39e7,0x31e6,0x4248,0x4248,0x4248,0x4228,0x4248,0x3a07,0x39e7,0x39e7,0x3a27,0x4227,0x4207,0x3a27,0x3a07,0x4268,0x4228,0x4228,0x3a07,0x4228,0x4248,0x4228,0x4228,0x4a68,0x4228,0x39e6,0x4207,0x4248,0x4248,0x4227,0x4248,0x4207,0x4248,0x4248,0x4248,0x4a89,0x4228,0x4a69,0x4269,0x4248,0x4227,0x4a68,0x4a68,0x4248,0x4248,0x4228,0x4a48,0x4a48,0x4228,0x4a69,0x4228,0x4a68,0x4a68,0x4a68,0x4a69,0x5289,0x4a68,0x4248,0x4207,0x4228,0x5289,0x4a89,0x4a48,0x52a9,0x4a68,0x4a89,0x4a48,0x4228,0x4a48,0x4a69,0x4a48,0x4a69,0x4228,0x4a69,0x4a48,0x4a69,0x4a89,0x4a69,0x4a48,0x4a89,0x5289,0x5289,0x4a89,0x4a69,0x4a69,0x4248,0x4a69,0x4a69,0x5289,0x4248,0x4a69,0x4a89,0x4a89,0x4a89,0x528a,0x4a89,0x52aa,0x4a69,0x4a69,0x528a,0x4248,0x4a69,0x4a89,0x4228,0x4249,0x4228,0x4a89,0x4a69,0x4228,0x4a69,0x4a89,0x528a,0x4a89,0x4a69,0x4269,0x4a69,0x5b0b,0x52ca,0x4a89,0x4a89,0x528a,0x4a89,0x52aa,0x4a48,0x52aa,0x5289,0x4248,0x4a69,0x4a69,0x4a48,0x4228,0x4248,0x4248,0x4228,0x4a48,0x4248,0x4a89,0x52aa,0x5289,0x4a89,0x52aa,0x52aa,0x52aa,0x4a49,0x4a89,0x4a89,0x4268,0x4a89,0x4248,0x4a69,0x528a,0x4228,0x4a69,0x4248,0x4228,0x4a69,0x4248,0x4a69,0x4a69,0x4a69,0x4a69,0x5289,0x52ca,0x4a89,0x4a68,0x4a48,0x4a48,0x4a69,0x4a69,0x5289,0x4a69,0x4a69,0x4a89,0x4a69,0x4a69,0x52aa,0x4a89,0x4a89,0x4a48,0x4a69,0x4248,0x4248,0x4248,0x4a89,0x4227,0x4a89,0x52aa,0x4a69,0x4a69,0x5289,0x4228,0x4228,0x4228,0x4207,0x4208,0x4a48,0x4228,0x4208,0x4248,0x3a08,0x3a08,0x52aa,0x4a69,0x4a48,0x4a48,0x4a49,0x4207,0x3a07,0x4a49, +0x3a07,0x3a07,0x4a69,0x4a48,0x4227,0x4a48,0x4248,0x4a48,0x4a89,0x5289,0x4a48,0x4228,0x4a68,0x5289,0x39e6,0x4248,0x4a89,0x5289,0x4248,0x4248,0x4228,0x4a48,0x4a48,0x4248,0x4207,0x4227,0x4248,0x3a07,0x4248,0x4227,0x4207,0x4207,0x4248,0x4227,0x4a69,0x39e7,0x39e7,0x3a07,0x4248,0x4228,0x4227,0x4228,0x4228,0x4248,0x4a69,0x4207,0x4248,0x4248,0x4208,0x4248,0x4268,0x3a07,0x4a89,0x4248,0x4a68,0x4207,0x4a48,0x4248,0x4207,0x3a07,0x4247,0x3a07,0x4207,0x4248,0x4248,0x3a07,0x4227,0x39e7,0x31e6,0x4248,0x3a07,0x39e7,0x4207,0x3a07,0x4207,0x4228,0x4228,0x31c6,0x4228,0x4227,0x4a48,0x4228,0x4227,0x3a07,0x3a07,0x4228,0x3a07,0x4248,0x4228,0x3a27,0x4a68,0x4228,0x3a07,0x31c6,0x3a27,0x4228,0x3a07,0x4228,0x3a07,0x39e7,0x39e7,0x39e7,0x4248,0x39e7,0x39e7,0x3a07,0x3a07,0x31c6,0x4228,0x4228,0x3a07,0x39e6,0x3a07,0x31e6,0x39e7,0x4228,0x4228,0x4248,0x4228,0x3a07,0x4248,0x4248,0x4248,0x4248,0x39e7,0x4228,0x4228,0x4248,0x4248,0x4248,0x4a69,0x4268,0x4268,0x4248,0x4227,0x3a07,0x4207,0x4207,0x4227,0x4268,0x4268,0x4248,0x4248,0x4268,0x4227,0x4268,0x4a89,0x4a48,0x4207,0x4248,0x4228,0x4a68,0x4a68,0x4248,0x4248,0x4248,0x4248,0x4a68,0x4227,0x4248,0x4a49,0x4228,0x4248,0x4a89,0x4a48,0x4a69,0x4a68,0x4248,0x4a68,0x4228,0x4a69,0x52aa,0x4a68,0x4a68,0x52a8,0x4a89,0x4a69,0x4a48,0x4a69,0x4a68,0x4a89,0x52a9,0x4248,0x4248,0x4a69,0x4a89,0x4a89,0x4a89,0x4a69,0x4a69,0x4a69,0x5289,0x4a89,0x4a69,0x4228,0x4a48,0x4248,0x4a8a,0x4a69,0x4a49,0x4a89,0x4a89,0x4a69,0x4248,0x4a69,0x52aa,0x4aaa,0x4a89,0x4a69,0x528a,0x52aa,0x4a89,0x4a89,0x52aa,0x4a69,0x4a69,0x4248,0x4228,0x4a69,0x4248,0x4a89,0x4a89,0x4a69,0x4a69,0x52aa,0x52aa,0x4a69,0x4a69,0x4a89,0x52cb,0x4228,0x4a89,0x4a69,0x5289,0x4a89,0x52a9,0x52aa,0x5289,0x5289,0x4a69,0x52aa,0x4a89,0x4a89,0x4a89,0x4a69,0x4a69,0x4228,0x5aca,0x52aa,0x4a69,0x4a89,0x52aa,0x52ca,0x52ca,0x52aa,0x528a,0x4a69,0x4a89,0x4a48,0x4a69,0x4a89,0x4a69,0x4a69,0x4a69,0x4a69,0x4228,0x4a89,0x4228,0x4a69,0x4a48,0x4228,0x4a89,0x4a69,0x4a69,0x4248,0x4a48,0x4a89,0x4a89,0x4a69,0x4a49,0x52aa,0x4a69,0x4a69,0x5289,0x4248,0x4a48,0x4228,0x4a69,0x4a69,0x4a49,0x4a69,0x4248,0x4a89,0x4a69,0x4a89,0x52aa,0x4248,0x4a69,0x3a07,0x4228,0x4a69,0x4228,0x4248,0x4a48,0x3a07,0x4248,0x4207,0x4228,0x4a48,0x4248,0x4228,0x4249,0x4248,0x39e7,0x4208,0x4228,0x4a48,0x4207,0x3a07,0x39e7, +0x4248,0x4a68,0x4a68,0x4248,0x3a07,0x4a68,0x4a68,0x4228,0x4248,0x4a68,0x4a48,0x4248,0x4228,0x4a68,0x4207,0x4248,0x4a69,0x4207,0x4a89,0x4248,0x4a69,0x4248,0x3a07,0x4228,0x4a48,0x3a07,0x31c6,0x3a07,0x4227,0x39e6,0x39c6,0x4207,0x4207,0x3a07,0x4207,0x4207,0x39e7,0x3a07,0x4228,0x39e7,0x4207,0x4207,0x4207,0x4248,0x4a68,0x4a68,0x4248,0x4a48,0x3a07,0x4248,0x4248,0x4227,0x4248,0x4248,0x4228,0x3a07,0x4207,0x4248,0x4227,0x4248,0x4a88,0x3a27,0x3a07,0x39e7,0x4a68,0x4207,0x39e7,0x4227,0x4228,0x39e7,0x39e7,0x4248,0x39e7,0x31a6,0x39e7,0x4207,0x39e7,0x39e7,0x3a07,0x4227,0x4248,0x4228,0x4228,0x4228,0x4228,0x4227,0x4248,0x3a07,0x4248,0x4248,0x4228,0x3a07,0x4228,0x4228,0x39e7,0x4228,0x4228,0x31e7,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x4a48,0x3a07,0x39e7,0x3a27,0x3a07,0x3a27,0x4227,0x4248,0x4228,0x4228,0x4207,0x3a07,0x3a07,0x4228,0x4248,0x4228,0x4227,0x4207,0x4248,0x4228,0x4228,0x4a68,0x3a07,0x4248,0x4248,0x4268,0x4268,0x4227,0x4248,0x4a69,0x4a68,0x4248,0x4248,0x4227,0x4268,0x4268,0x4248,0x4a68,0x4a69,0x4248,0x4a69,0x4248,0x4a68,0x4248,0x4228,0x4228,0x4248,0x4248,0x4228,0x4a89,0x4a68,0x4248,0x4a48,0x4a69,0x4a48,0x4a69,0x4a68,0x4a69,0x4a68,0x5aea,0x4a68,0x4248,0x4248,0x4a89,0x4a69,0x4a69,0x52a9,0x52a9,0x4a69,0x52a9,0x4a89,0x5289,0x4a68,0x4a69,0x4a68,0x4a48,0x4228,0x4a69,0x4a68,0x4a89,0x4a48,0x4a48,0x5289,0x4248,0x4a89,0x4a69,0x4228,0x4248,0x4248,0x4248,0x4248,0x4248,0x4a69,0x4269,0x4a89,0x4a89,0x4a89,0x4248,0x52aa,0x4a69,0x4a49,0x4a69,0x4a69,0x4a69,0x528a,0x4a69,0x52ca,0x52aa,0x4a69,0x4a69,0x52aa,0x52aa,0x4a89,0x4a89,0x4a69,0x4a89,0x5289,0x52aa,0x4a48,0x4a89,0x4a89,0x4a89,0x4a8a,0x52ca,0x5aca,0x4a69,0x4a89,0x52aa,0x4a89,0x4a89,0x52aa,0x4a69,0x528a,0x52aa,0x4a89,0x4a89,0x5289,0x52aa,0x4a89,0x528a,0x4a89,0x52aa,0x52ca,0x4a89,0x4a69,0x52aa,0x52aa,0x52ca,0x4a49,0x52aa,0x4a69,0x4a69,0x4a69,0x4a89,0x52aa,0x4a69,0x4a69,0x4228,0x4a89,0x4a49,0x5289,0x4a69,0x4248,0x4a69,0x5289,0x4a89,0x4a69,0x4a69,0x4a68,0x5289,0x4a48,0x4a89,0x4a89,0x4a69,0x5289,0x4a89,0x4a89,0x4248,0x4a89,0x4a69,0x4228,0x4a69,0x4a49,0x4a89,0x4269,0x4248,0x4228,0x52aa,0x4a69,0x4a48,0x4a89,0x3a08,0x4a48,0x4a69,0x4228,0x4a69,0x4228,0x4a48,0x4a89,0x39c7,0x4228,0x4228,0x31c7,0x4228,0x4228,0x3a07,0x39e7,0x4208,0x4228,0x4207,0x3a07,0x39e7, +0x4a69,0x4248,0x3a07,0x4207,0x4208,0x4a48,0x4a48,0x4248,0x4248,0x4a48,0x4a48,0x4247,0x4227,0x4227,0x4228,0x4207,0x4a68,0x4227,0x4a68,0x4248,0x4a68,0x4a68,0x4228,0x4248,0x3a07,0x4227,0x4a89,0x4248,0x39e6,0x4228,0x39e6,0x4207,0x4228,0x4248,0x4248,0x4207,0x4207,0x39e7,0x3a07,0x4207,0x39e7,0x4a68,0x4248,0x4248,0x4227,0x4a89,0x4248,0x4a89,0x4a68,0x4a48,0x3a07,0x4248,0x4a89,0x3a07,0x4a48,0x4a48,0x4207,0x4207,0x4248,0x4a68,0x4268,0x4227,0x4228,0x4a89,0x4227,0x3a07,0x4228,0x4227,0x39e7,0x39e7,0x3a07,0x39e6,0x31a5,0x39e7,0x4207,0x39c7,0x39e7,0x4228,0x4227,0x4227,0x39e7,0x31c6,0x4228,0x4248,0x4228,0x3a07,0x4248,0x4248,0x4228,0x39e7,0x3a07,0x4228,0x3a27,0x3a07,0x3a07,0x3a07,0x4228,0x3a07,0x3a07,0x3a07,0x39e7,0x3a07,0x4228,0x4228,0x31c6,0x3a07,0x4227,0x4228,0x3a07,0x3a07,0x4228,0x4248,0x4248,0x4227,0x3a07,0x4228,0x4248,0x4228,0x4207,0x3a07,0x3a07,0x4248,0x4a69,0x4228,0x4248,0x4248,0x4228,0x4228,0x4a69,0x4248,0x4248,0x4a69,0x4248,0x4248,0x4a89,0x3a07,0x4a68,0x4a68,0x4228,0x4268,0x4a69,0x4268,0x4a89,0x4a68,0x4248,0x4a48,0x4a69,0x4a89,0x4248,0x4248,0x4a69,0x4a69,0x3a27,0x4a68,0x4248,0x4248,0x4a69,0x4a68,0x4a89,0x4228,0x4228,0x4248,0x4248,0x4a89,0x4a69,0x4248,0x4a68,0x52c9,0x52a9,0x5289,0x4a68,0x4a89,0x4a68,0x4a68,0x5ac9,0x5289,0x4a69,0x4a89,0x4a69,0x4a69,0x4a89,0x4a68,0x4a69,0x4a69,0x4a48,0x4a69,0x4a89,0x4a89,0x4a48,0x4228,0x4228,0x4249,0x4a89,0x4248,0x4a48,0x4a69,0x4a69,0x4a69,0x4a69,0x4a89,0x4a89,0x4a69,0x4a89,0x52aa,0x4a89,0x4248,0x52aa,0x5289,0x528a,0x4a69,0x4a89,0x4a89,0x4a89,0x4a48,0x5289,0x5aeb,0x4a89,0x4a89,0x5289,0x4a69,0x4a89,0x4a89,0x4a69,0x52ea,0x4248,0x5b0b,0x5b0b,0x4a69,0x528a,0x4a69,0x52ca,0x52aa,0x4a49,0x52aa,0x52aa,0x5289,0x52aa,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x52aa,0x4a89,0x5289,0x52ca,0x4a89,0x5289,0x4a89,0x4a89,0x5aeb,0x52aa,0x5b2c,0x52ca,0x4a89,0x52aa,0x5289,0x52aa,0x5aeb,0x4a89,0x528a,0x528a,0x52aa,0x4a48,0x4a69,0x4a69,0x4a49,0x4a69,0x4248,0x4249,0x5289,0x4a69,0x4a69,0x4a89,0x4a89,0x52aa,0x528a,0x4a69,0x5289,0x4a69,0x4a69,0x52aa,0x5289,0x5aca,0x52ca,0x52aa,0x4248,0x4a48,0x4a69,0x4a69,0x4a69,0x4a68,0x4228,0x4a69,0x5289,0x4a69,0x4a69,0x4a69,0x4228,0x52aa,0x4a48,0x4a69,0x4a69,0x4a69,0x4a69,0x4249,0x4228,0x31c6,0x4a69,0x3a07,0x39e7,0x4a69,0x4228,0x4a69,0x4208,0x39e7,0x4a48,0x528a,0x4228, +0x4228,0x4207,0x4248,0x4248,0x4a68,0x4207,0x4248,0x4207,0x4a68,0x4a48,0x4248,0x4228,0x4a68,0x4248,0x4227,0x4228,0x4228,0x4268,0x4a48,0x4a48,0x4228,0x5289,0x4228,0x4228,0x4a68,0x4248,0x4a89,0x4227,0x3a07,0x4248,0x4248,0x3a07,0x4a68,0x4248,0x4228,0x4227,0x3a07,0x4228,0x3a07,0x3a07,0x4228,0x4248,0x4228,0x4228,0x4a89,0x52a9,0x4228,0x4248,0x4248,0x4227,0x4a89,0x3a27,0x4248,0x4247,0x4248,0x3a07,0x4227,0x4227,0x4248,0x4a68,0x4228,0x4248,0x4a89,0x4268,0x4a68,0x4a69,0x3a07,0x4228,0x4228,0x3a07,0x3a07,0x3a07,0x39e7,0x4248,0x4248,0x39e7,0x31a6,0x39e7,0x4a48,0x4248,0x4a69,0x39e7,0x4228,0x3a28,0x4249,0x4228,0x4248,0x4248,0x4248,0x3a07,0x4a68,0x4228,0x39e7,0x4228,0x4228,0x39e7,0x39e7,0x4228,0x4248,0x39e7,0x3a07,0x4248,0x3a07,0x3a07,0x39e7,0x3a07,0x31e7,0x3a07,0x3a07,0x3a07,0x39e7,0x3a07,0x4228,0x4248,0x3a27,0x4268,0x4228,0x4a68,0x4228,0x39e7,0x39e7,0x4248,0x4248,0x4228,0x4228,0x4228,0x4228,0x4a48,0x4248,0x4248,0x4268,0x4248,0x4248,0x4248,0x4248,0x4a69,0x4a69,0x4227,0x4228,0x4268,0x4268,0x4248,0x4a68,0x4248,0x4a89,0x4a89,0x4248,0x4248,0x4a68,0x4227,0x4248,0x4248,0x4228,0x4a69,0x4248,0x4a48,0x4228,0x4248,0x4268,0x4a69,0x4a69,0x4a89,0x4248,0x4a89,0x4a89,0x4aa9,0x52a9,0x4227,0x52c9,0x52a8,0x4a48,0x4a68,0x52a9,0x5288,0x4a68,0x4a89,0x4a89,0x4a69,0x4a69,0x5289,0x4a89,0x4248,0x4a69,0x4a89,0x4248,0x4a89,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a68,0x52aa,0x4248,0x4a48,0x4a69,0x4a89,0x4a8a,0x4a89,0x4a69,0x4a69,0x4a89,0x4a69,0x4a69,0x4228,0x4a89,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x5b2c,0x52aa,0x5289,0x4a89,0x4a48,0x4a49,0x4a49,0x4aaa,0x52aa,0x4a8a,0x5aeb,0x5aeb,0x52aa,0x4a69,0x52eb,0x632c,0x4a69,0x52aa,0x4a89,0x4a49,0x528a,0x4a69,0x4a69,0x4a69,0x4a89,0x52ca,0x4a69,0x4248,0x5289,0x4a89,0x4a89,0x4a69,0x4a89,0x4a69,0x4a69,0x4a69,0x52a9,0x4a69,0x4a89,0x4a69,0x4a89,0x52aa,0x52aa,0x4a89,0x4a89,0x52aa,0x52ca,0x52aa,0x52aa,0x52aa,0x5aca,0x52aa,0x4a69,0x4a68,0x5289,0x4a89,0x4228,0x5289,0x52aa,0x528a,0x4a69,0x4a89,0x52ca,0x4a89,0x5289,0x52aa,0x52a9,0x52ca,0x4a69,0x4a68,0x4a89,0x52aa,0x52a9,0x4a89,0x4a48,0x528a,0x4a48,0x52aa,0x52aa,0x4a68,0x4a69,0x52aa,0x4a89,0x4a69,0x4a69,0x4248,0x4a89,0x4a48,0x4a89,0x52aa,0x4a69,0x4a28,0x4228,0x4a69,0x4a49,0x4248,0x4268,0x3a07,0x3a07,0x528a,0x4a69,0x4a48,0x4a48,0x4a89,0x4a69,0x39c6,0x4228,0x528a,0x4228, +0x4248,0x4248,0x4248,0x4a69,0x4a68,0x4a89,0x4a68,0x4248,0x4207,0x4a48,0x4228,0x4228,0x4248,0x3a07,0x4228,0x4207,0x4228,0x4248,0x39e6,0x4248,0x4248,0x4248,0x4228,0x4a48,0x4a68,0x4a68,0x4a48,0x4a48,0x4a68,0x4a68,0x4228,0x4248,0x4248,0x4227,0x4228,0x4a69,0x4207,0x4227,0x4228,0x4248,0x4248,0x4248,0x4248,0x4207,0x4228,0x4a48,0x4a68,0x4227,0x4a68,0x4248,0x4227,0x4a68,0x4a68,0x4a68,0x39e6,0x4268,0x4248,0x4248,0x4a48,0x52a9,0x4a68,0x3a07,0x3a07,0x4228,0x4248,0x4a89,0x3a07,0x4248,0x4228,0x4227,0x4228,0x4248,0x3a07,0x4227,0x4a68,0x3a27,0x31c6,0x3a07,0x4248,0x4228,0x4248,0x4a68,0x4269,0x4228,0x4228,0x4a69,0x4a69,0x4227,0x4248,0x3a07,0x4207,0x4248,0x4228,0x4248,0x3a28,0x4228,0x4228,0x3a07,0x39e7,0x4228,0x3a07,0x4228,0x3a07,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x3a07,0x4248,0x4248,0x4268,0x4248,0x3a07,0x4248,0x4a68,0x3a07,0x3a07,0x4a68,0x4a69,0x3a07,0x4228,0x4248,0x4248,0x4248,0x4248,0x4248,0x4227,0x4227,0x4228,0x4248,0x4a89,0x4227,0x4268,0x4268,0x4a69,0x4248,0x3a07,0x3a27,0x4268,0x4248,0x4a69,0x4a68,0x4a68,0x4248,0x4268,0x4a69,0x4248,0x4a48,0x4228,0x4a68,0x4a89,0x4a68,0x4228,0x4a68,0x4a89,0x4248,0x4a69,0x4a69,0x4a48,0x4a48,0x4a69,0x52ca,0x4aa9,0x4a89,0x52a9,0x5289,0x4228,0x4a89,0x52c9,0x52a9,0x52a9,0x4a89,0x52a9,0x4a69,0x5289,0x4a69,0x4a69,0x4a89,0x4a69,0x5289,0x5289,0x52a9,0x4a69,0x4a89,0x52a9,0x4a48,0x52aa,0x4a89,0x4a89,0x52a9,0x4a48,0x4a69,0x4aaa,0x4a89,0x52aa,0x52a9,0x5289,0x4a89,0x4248,0x4a69,0x4a69,0x4a49,0x4a69,0x52a9,0x4a89,0x52aa,0x4a69,0x528a,0x4a89,0x4aa9,0x4a89,0x528a,0x4a89,0x4a89,0x528a,0x52ca,0x528a,0x52aa,0x52aa,0x52ca,0x5b0b,0x5b0b,0x4a89,0x5289,0x52aa,0x4a89,0x528a,0x52aa,0x4a69,0x4a49,0x52aa,0x5aeb,0x4a48,0x5289,0x52a9,0x52a9,0x4a89,0x4a89,0x4a89,0x52aa,0x4a69,0x528a,0x5289,0x52aa,0x52aa,0x528a,0x4a69,0x52ca,0x52ca,0x52ca,0x5289,0x4a89,0x52aa,0x4a48,0x52ca,0x52aa,0x52ca,0x4a89,0x52aa,0x4a69,0x5aea,0x5aca,0x4a89,0x5289,0x52aa,0x52aa,0x4a89,0x4a89,0x52aa,0x4a69,0x4a68,0x5289,0x52a9,0x52aa,0x52aa,0x4a89,0x52aa,0x4a89,0x4a68,0x52aa,0x4a89,0x4a48,0x4a48,0x52aa,0x4a89,0x4a89,0x4a48,0x52aa,0x5aca,0x528a,0x4a69,0x4a69,0x4a48,0x4a69,0x5289,0x5289,0x4228,0x4208,0x5289,0x5289,0x4a69,0x4248,0x4228,0x4228,0x4208,0x39e7,0x4a89,0x528a,0x4208,0x4228,0x4228,0x4a49,0x4208,0x4248,0x4228,0x4228, +0x3a07,0x4227,0x3a07,0x4227,0x4a69,0x4a89,0x4a68,0x4a68,0x4a69,0x39e7,0x4a48,0x4248,0x4a69,0x4a48,0x4a68,0x4248,0x4a89,0x4a68,0x4227,0x4a68,0x4228,0x3a07,0x4a48,0x4227,0x4227,0x39e7,0x4227,0x4248,0x4a68,0x4a48,0x39e7,0x3a07,0x4a48,0x3a07,0x4228,0x4a69,0x4248,0x3a07,0x31c6,0x4a69,0x4a68,0x4248,0x4248,0x4248,0x4207,0x4248,0x4a68,0x4248,0x4a89,0x4248,0x4a68,0x3a07,0x4a48,0x4227,0x4268,0x4a68,0x52a9,0x4248,0x4248,0x4228,0x4a48,0x4a48,0x3a07,0x4228,0x4227,0x4227,0x4a69,0x3a07,0x4248,0x3a07,0x3a07,0x4207,0x3a27,0x4a69,0x4268,0x4227,0x4a68,0x4268,0x4228,0x4248,0x4248,0x4a69,0x4248,0x3a07,0x4248,0x4248,0x4228,0x4a48,0x3a07,0x3a07,0x4248,0x4207,0x4207,0x4248,0x4228,0x3a28,0x3a07,0x3a07,0x39e7,0x3a07,0x4248,0x4248,0x3a07,0x4248,0x3a07,0x3a07,0x4268,0x4207,0x39e7,0x3a27,0x4248,0x39e7,0x3a07,0x4228,0x4248,0x4248,0x3a28,0x3a27,0x4268,0x4227,0x4248,0x4228,0x4248,0x4248,0x4248,0x4228,0x4248,0x4248,0x4248,0x4248,0x4207,0x4248,0x4248,0x4a89,0x4a89,0x3a27,0x4248,0x4268,0x4248,0x4207,0x4248,0x4a89,0x4a89,0x4227,0x4a68,0x4a68,0x4a69,0x4a69,0x4a68,0x4a68,0x4248,0x4a68,0x4a68,0x4228,0x3a07,0x4a68,0x4a69,0x4248,0x4268,0x4248,0x4268,0x4a48,0x4a69,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x5289,0x4a89,0x4a89,0x52a9,0x4a89,0x52aa,0x4a89,0x4a69,0x5289,0x52a9,0x5aca,0x52ca,0x52aa,0x4a89,0x4a89,0x5289,0x4a69,0x4a89,0x4a69,0x52aa,0x4a89,0x4a69,0x4a89,0x52ea,0x52ca,0x52a9,0x52a9,0x4a69,0x4a89,0x52aa,0x5289,0x4a89,0x4aaa,0x4a89,0x4a89,0x52aa,0x52cb,0x52ca,0x52aa,0x4a89,0x52aa,0x52aa,0x4a69,0x52ca,0x52ca,0x4a89,0x5aca,0x52aa,0x5289,0x4a89,0x5289,0x5aeb,0x52aa,0x5aeb,0x5aca,0x52aa,0x632c,0x4a89,0x5aca,0x52aa,0x4a69,0x52aa,0x528a,0x52aa,0x52aa,0x5aca,0x52ca,0x4a69,0x52aa,0x5aca,0x52aa,0x4a68,0x4a89,0x4a69,0x4a89,0x52aa,0x5289,0x4a69,0x4aa9,0x52ca,0x4a89,0x5aeb,0x52ca,0x4a89,0x52ca,0x52aa,0x4a69,0x5b0b,0x52aa,0x5aeb,0x5aea,0x4aaa,0x4a69,0x4a89,0x4a69,0x52a9,0x52ca,0x52aa,0x52a9,0x52a9,0x52aa,0x528a,0x4a69,0x4a69,0x4248,0x52a9,0x52a9,0x4a69,0x4a89,0x4a48,0x4a69,0x4a89,0x4a69,0x52aa,0x5289,0x5289,0x4a69,0x4a49,0x4a48,0x4a69,0x4248,0x52aa,0x5aeb,0x4a69,0x4a69,0x4a69,0x4a69,0x4a48,0x4a69,0x4a69,0x4228,0x4a69,0x4a49,0x4a69,0x4228,0x4228,0x4248,0x4a69,0x4228,0x4228,0x4a49,0x4248,0x4a69,0x4a48,0x4a49,0x4208,0x4208,0x4a49,0x4a48,0x4248,0x4249, +0x4a68,0x4227,0x4248,0x4248,0x4a69,0x4a89,0x4a68,0x4a68,0x52a9,0x5289,0x4248,0x4a68,0x4a48,0x4a68,0x4a68,0x4248,0x4a89,0x4a89,0x4228,0x4a48,0x4227,0x4228,0x4228,0x4247,0x4a89,0x4207,0x39e7,0x3a07,0x4a48,0x4248,0x4248,0x4227,0x4248,0x4a48,0x4a48,0x39e6,0x4a68,0x4a89,0x4207,0x39e6,0x4227,0x3a27,0x4247,0x4227,0x4248,0x4228,0x4a89,0x4a68,0x4248,0x4a89,0x4a68,0x4248,0x4268,0x4227,0x4248,0x4a88,0x4228,0x4248,0x4248,0x4247,0x4a88,0x4a68,0x4228,0x4248,0x4268,0x4248,0x4228,0x4268,0x4268,0x4227,0x4228,0x31a6,0x3a27,0x4a69,0x4a68,0x4268,0x4a68,0x4248,0x4269,0x4248,0x4268,0x4248,0x4248,0x4248,0x3a07,0x3a27,0x3a07,0x4228,0x4a68,0x4248,0x4248,0x3a07,0x4228,0x4a48,0x4207,0x4248,0x4228,0x4228,0x3a07,0x4248,0x4268,0x4227,0x3a07,0x4a69,0x4227,0x39e7,0x3a07,0x3a07,0x4228,0x4248,0x4248,0x3a27,0x4227,0x4248,0x4248,0x4268,0x4248,0x3a27,0x4248,0x4a89,0x4a89,0x4228,0x4248,0x4268,0x4a89,0x4228,0x4228,0x4268,0x4a88,0x4a68,0x4a68,0x4248,0x4a89,0x4268,0x4a89,0x4a69,0x4a69,0x4248,0x4a68,0x4a68,0x4a69,0x4248,0x4a89,0x5289,0x4248,0x4a69,0x4248,0x4248,0x4a68,0x4a68,0x4a89,0x4248,0x4268,0x4a89,0x4248,0x5289,0x4a69,0x4248,0x4228,0x4a69,0x4a89,0x4a69,0x4a68,0x52a9,0x4a89,0x4a89,0x4a68,0x4a89,0x4a89,0x52a9,0x52ca,0x52a9,0x52aa,0x52a9,0x52c9,0x52a9,0x5289,0x4a89,0x4a89,0x5aea,0x52a9,0x52ca,0x52ca,0x52ca,0x5289,0x4a68,0x52a9,0x4a89,0x52a9,0x52ea,0x4a89,0x4a89,0x52a9,0x4a89,0x52ca,0x52aa,0x52ca,0x52ca,0x5aea,0x52aa,0x4a89,0x4a89,0x52aa,0x52aa,0x52ca,0x5b0b,0x52ca,0x52aa,0x52aa,0x4a89,0x4a69,0x4a89,0x52aa,0x52ca,0x4a69,0x52ca,0x52ca,0x52ca,0x5aca,0x52ca,0x52ca,0x52a9,0x52a9,0x5289,0x528a,0x4a89,0x4a89,0x4a89,0x5acb,0x528a,0x52aa,0x52aa,0x4a89,0x52aa,0x632c,0x4a89,0x4a89,0x5289,0x52ca,0x5289,0x52ca,0x528a,0x52aa,0x4a69,0x52ca,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x52aa,0x5aeb,0x52ca,0x52ca,0x5289,0x52aa,0x632c,0x5aca,0x4a89,0x5aeb,0x5aeb,0x52aa,0x52ca,0x52aa,0x4a49,0x52ca,0x52aa,0x4a69,0x5289,0x52aa,0x52aa,0x4a69,0x4a69,0x4a89,0x52ca,0x5aca,0x4a89,0x52aa,0x4a69,0x4a69,0x4228,0x4a69,0x4a89,0x4a69,0x5289,0x4a69,0x4a48,0x4a69,0x4228,0x4a69,0x5289,0x5289,0x4a69,0x528a,0x52aa,0x52aa,0x4a48,0x4a49,0x4a69,0x4a69,0x4a89,0x4248,0x4a69,0x4228,0x4a69,0x4a89,0x4228,0x4a49,0x4a69,0x4a49,0x4a48,0x4207,0x4228,0x4a89,0x4a48,0x4a69,0x52aa,0x4a49,0x4a69,0x4a49, +0x4a69,0x4227,0x4228,0x4a69,0x4228,0x4a48,0x4a69,0x52a9,0x4a69,0x4a48,0x4a89,0x52a9,0x52ca,0x4248,0x5289,0x4a89,0x4a68,0x4a89,0x52a9,0x4a68,0x4228,0x52a9,0x4248,0x4228,0x4a89,0x4248,0x4a48,0x4a68,0x4228,0x4227,0x4a68,0x4a68,0x4248,0x4a69,0x4a68,0x4a68,0x4a68,0x4a89,0x4a48,0x4227,0x4248,0x4248,0x4248,0x4228,0x4227,0x4227,0x4a89,0x4a68,0x3a07,0x4a68,0x4248,0x52a9,0x4aa9,0x4248,0x4aa9,0x4248,0x4268,0x4a89,0x4a68,0x52c9,0x4a89,0x4a68,0x4a89,0x4247,0x39e6,0x4a89,0x4268,0x3a07,0x4a89,0x4a69,0x4a89,0x3a27,0x4228,0x3a07,0x4268,0x4268,0x4a89,0x4a89,0x4248,0x4228,0x4a89,0x4248,0x3a27,0x4a69,0x4248,0x4248,0x4248,0x4a89,0x4a69,0x4228,0x4248,0x4248,0x4a48,0x4248,0x4228,0x3a27,0x4a69,0x4a69,0x4269,0x4228,0x4228,0x4a69,0x4248,0x4248,0x3a07,0x3a27,0x4248,0x4228,0x4248,0x4248,0x4268,0x4248,0x4248,0x52ca,0x4248,0x4228,0x4268,0x4248,0x4228,0x4a68,0x4a69,0x4248,0x4228,0x4248,0x4aa9,0x4a68,0x4248,0x4248,0x52c9,0x4aa9,0x52a9,0x4a68,0x4268,0x4a68,0x4aa9,0x52a9,0x4a48,0x4a89,0x4a89,0x4a88,0x4a89,0x4a68,0x4248,0x4a68,0x4248,0x4a68,0x4a89,0x4248,0x4a89,0x4a69,0x4227,0x4a48,0x4a69,0x4a68,0x4a69,0x4a69,0x4a89,0x4a68,0x52aa,0x52aa,0x4a69,0x4a89,0x4a89,0x52aa,0x4a69,0x4a69,0x4a68,0x4a89,0x4a89,0x52a9,0x52a9,0x52ca,0x52ca,0x4a89,0x52a9,0x52c9,0x52a9,0x4a89,0x52ca,0x52c9,0x5aca,0x5b0b,0x52aa,0x52a9,0x52a9,0x4a89,0x52a9,0x52ca,0x52ca,0x52ca,0x4a89,0x4a69,0x4aa9,0x4a89,0x52aa,0x5289,0x5289,0x528a,0x4a89,0x4aaa,0x52aa,0x4a89,0x4a89,0x52a9,0x5289,0x4aaa,0x4aaa,0x4a89,0x4aaa,0x4a68,0x52ca,0x52eb,0x4a69,0x4a49,0x4a89,0x4a89,0x4a89,0x52aa,0x52ca,0x5acb,0x52aa,0x4a89,0x4a69,0x5289,0x52aa,0x52ca,0x4a69,0x52ca,0x5aeb,0x5aea,0x5b0b,0x52aa,0x52aa,0x4a89,0x4a69,0x52aa,0x52aa,0x4a69,0x5289,0x5289,0x52aa,0x4a89,0x52ca,0x5aca,0x4a69,0x4228,0x4a89,0x4a89,0x528a,0x52aa,0x4a89,0x4a69,0x4a89,0x5289,0x52ca,0x52aa,0x5aca,0x5aeb,0x52aa,0x52ca,0x5aca,0x5aea,0x5289,0x4a89,0x52ca,0x52ca,0x528a,0x528a,0x4a89,0x4a69,0x52ca,0x4a69,0x4a89,0x5289,0x4a69,0x4a69,0x4a69,0x52a9,0x4a69,0x4a49,0x4248,0x4a69,0x52aa,0x4a69,0x528a,0x4a49,0x4a48,0x4a69,0x4248,0x4a69,0x52aa,0x4a48,0x4a69,0x5289,0x4a48,0x4a89,0x4a48,0x4a69,0x4a69,0x4a69,0x4a48,0x4a48,0x4a48,0x4a69,0x4a69,0x4a69,0x4a89,0x528a,0x4a89,0x3a28,0x4228,0x4a69,0x4a8a,0x4a69,0x4a48,0x4a69,0x4228,0x4248,0x528a,0x4a69, +0x4248,0x4228,0x4a48,0x4a48,0x4a69,0x4a48,0x5289,0x4227,0x4248,0x4a28,0x4a48,0x4a48,0x5289,0x4207,0x4228,0x4a48,0x4248,0x4227,0x4a48,0x4207,0x4a68,0x52a9,0x4227,0x4207,0x4228,0x4a48,0x4248,0x4228,0x4a69,0x5289,0x4a69,0x5289,0x4228,0x4228,0x4207,0x4228,0x4a68,0x4a88,0x4248,0x4a68,0x52ca,0x4227,0x4228,0x4207,0x4227,0x4a89,0x4248,0x4227,0x4a89,0x52aa,0x52a9,0x4a89,0x4268,0x4a89,0x52ca,0x52a9,0x4a89,0x3a07,0x4a68,0x52ca,0x4a89,0x4248,0x5289,0x52c9,0x4227,0x4a48,0x4a69,0x4a89,0x52aa,0x4a68,0x4248,0x4a69,0x4a89,0x4a68,0x52a9,0x4a88,0x4248,0x4a69,0x4268,0x3a28,0x3a27,0x4268,0x4a69,0x4248,0x4a68,0x4a89,0x4a68,0x4a69,0x4248,0x4248,0x4a69,0x4268,0x4a89,0x4248,0x4a69,0x4248,0x4227,0x4a69,0x4a69,0x4268,0x4248,0x4a69,0x4248,0x4227,0x4228,0x4228,0x4268,0x4228,0x4248,0x4268,0x4268,0x4a69,0x4228,0x4a89,0x4a69,0x4248,0x4248,0x52aa,0x4268,0x4268,0x4a89,0x4a69,0x52a9,0x4a68,0x4a68,0x52aa,0x4268,0x4a68,0x4268,0x4227,0x4a89,0x52ca,0x4a89,0x4a68,0x52c9,0x5289,0x4a68,0x52a9,0x4a68,0x4aa9,0x4a88,0x4a89,0x4a89,0x52a9,0x52aa,0x4a89,0x4a89,0x4248,0x4a69,0x5289,0x4a89,0x4a89,0x4a89,0x4a89,0x4a68,0x3a07,0x4a68,0x52aa,0x5289,0x4a89,0x4248,0x4248,0x4a89,0x4a89,0x4a69,0x4a68,0x4a89,0x4a89,0x5289,0x4a89,0x4a89,0x52ca,0x52a9,0x5289,0x52a9,0x52a9,0x52ca,0x5aea,0x52ca,0x52a9,0x52a9,0x52ca,0x52ca,0x52ca,0x5289,0x52aa,0x4a89,0x52ca,0x52aa,0x4a89,0x52aa,0x5289,0x52a9,0x4a68,0x4a69,0x52aa,0x52aa,0x4a69,0x528a,0x52aa,0x52ca,0x4a89,0x4248,0x4a89,0x52aa,0x4a89,0x4a89,0x4a69,0x4a69,0x52aa,0x5b0b,0x4aa9,0x5289,0x5acb,0x528a,0x52aa,0x4a89,0x52aa,0x5b0b,0x52ca,0x52aa,0x52aa,0x52aa,0x52ca,0x5aeb,0x5aeb,0x4a69,0x52aa,0x632b,0x630b,0x52ca,0x52ca,0x52ca,0x5aca,0x52aa,0x5289,0x5aca,0x4a89,0x52aa,0x52aa,0x4a69,0x52aa,0x52ca,0x52aa,0x52aa,0x4a48,0x5289,0x52ca,0x52ca,0x5aca,0x52aa,0x52aa,0x52ca,0x52aa,0x52ca,0x5aeb,0x5aca,0x5acb,0x52ca,0x52aa,0x5aca,0x5289,0x4a69,0x52aa,0x52ca,0x4a89,0x52aa,0x52aa,0x630b,0x52aa,0x4a89,0x4a68,0x4a69,0x5289,0x52aa,0x5aca,0x4228,0x52a9,0x4248,0x4a69,0x4a49,0x4a49,0x4a89,0x4a69,0x4a69,0x4a69,0x4a89,0x4a69,0x4a48,0x4a69,0x4a89,0x4a69,0x4a89,0x4a48,0x52aa,0x52aa,0x52aa,0x4a69,0x4a69,0x4228,0x4a89,0x4228,0x4228,0x4a89,0x4248,0x4a69,0x52aa,0x52aa,0x4a69,0x4a69,0x4208,0x4208,0x4228,0x4a69,0x52aa,0x4a69,0x4228,0x4228,0x4228,0x4207, +0x634c,0x5b2b,0x5b2b,0x5b2b,0x636c,0x5b0b,0x634c,0x6bad,0x5b0b,0x5b0b,0x52ca,0x52a9,0x634c,0x636c,0x5b2b,0x52ea,0x5aeb,0x636c,0x5b2b,0x52ea,0x5b0b,0x4aa9,0x5aea,0x52ca,0x4a89,0x4a68,0x4a89,0x4a69,0x4a89,0x52a9,0x4a89,0x52a9,0x52ca,0x4a89,0x4a89,0x4a89,0x52ca,0x4a69,0x4a89,0x4268,0x4a89,0x4a69,0x4248,0x4a69,0x4a89,0x4268,0x4a68,0x4a69,0x4a69,0x4a89,0x4228,0x4a69,0x4a69,0x4248,0x4248,0x52a9,0x4a68,0x4a89,0x4a89,0x4248,0x4a68,0x4a89,0x4a89,0x4a89,0x4a89,0x4268,0x4a89,0x4a69,0x4a68,0x4228,0x4249,0x4248,0x4228,0x4268,0x4248,0x4a69,0x3a07,0x4a69,0x4269,0x4248,0x4248,0x4268,0x4268,0x4a89,0x4a68,0x4248,0x4269,0x4a69,0x4a69,0x4268,0x4248,0x4a69,0x4a89,0x4a69,0x4269,0x4248,0x4248,0x39e7,0x4248,0x4248,0x3a28,0x4248,0x4248,0x4248,0x4248,0x4248,0x4227,0x4248,0x4228,0x4a68,0x4a69,0x4228,0x31c6,0x4248,0x4248,0x4aa9,0x4a89,0x4a89,0x4a89,0x4a89,0x4227,0x4248,0x4248,0x4248,0x4a68,0x4269,0x4a69,0x4268,0x4248,0x4248,0x4a69,0x4a69,0x4a89,0x52aa,0x4a88,0x4a88,0x5aca,0x4a68,0x4248,0x4a89,0x4a89,0x4a89,0x4a69,0x4a89,0x528a,0x4a69,0x4a89,0x4a89,0x4248,0x4248,0x4a89,0x4a89,0x4aa9,0x4a89,0x4a68,0x4248,0x4a69,0x4a89,0x4268,0x4a69,0x4a69,0x4a89,0x4a48,0x52aa,0x52aa,0x52a9,0x4a68,0x4a68,0x4a48,0x4a69,0x4a89,0x52ca,0x52ea,0x52a9,0x52aa,0x4a89,0x4a89,0x52a9,0x52a9,0x4a89,0x52aa,0x52a9,0x52aa,0x4a89,0x5289,0x5289,0x4248,0x4a69,0x4a69,0x4a69,0x4a89,0x4a69,0x4a69,0x4a69,0x4a69,0x52aa,0x52aa,0x4a89,0x4248,0x4a69,0x4a69,0x4228,0x4228,0x4a69,0x4a89,0x4a89,0x4a89,0x5289,0x52aa,0x4a69,0x52aa,0x4a89,0x4a89,0x52aa,0x52aa,0x4a89,0x5b0b,0x5aeb,0x5b0b,0x52ca,0x4248,0x4248,0x4248,0x4a89,0x4228,0x52aa,0x52a9,0x4248,0x52aa,0x4248,0x4a89,0x4a69,0x5289,0x4a89,0x4a69,0x4a69,0x52ca,0x5289,0x4a69,0x4228,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a48,0x4a69,0x4248,0x4a89,0x4a89,0x4a48,0x52aa,0x52aa,0x52aa,0x528a,0x5acb,0x52aa,0x52ca,0x4a89,0x4a69,0x4248,0x52ca,0x52aa,0x4a69,0x4a49,0x52aa,0x4a69,0x4228,0x6348,0x6328,0x4228,0x4227,0x4a69,0x4a89,0x4a49,0x39e7,0x4a89,0x4a69,0x4248,0x52aa,0x4a48,0x4a69,0x4a49,0x4a48,0x4a69,0x52aa,0x4a69,0x4a89,0x4a69,0x4a49,0x4a49,0x4a69,0x4a48,0x4228,0x52aa,0x52aa,0x4228,0x4a69,0x4a69,0x4a49,0x4248,0x4248,0x4a69,0x52cb,0x5aeb,0x52aa,0x4a89,0x528a,0x52aa,0x5b0c,0x528a,0x52aa,0x5aeb,0x52cb,0x5aeb,0x5acb,0x5aeb,0x634d,0x5aeb,0x5aca, +0x6bad,0x638c,0x73ce,0x73ee,0x73ce,0x6bad,0x73ce,0x7c0f,0x740e,0x73ee,0x6bad,0x6b8d,0x73cd,0x740f,0x7c70,0x73ee,0x636c,0x6bad,0x73cd,0x636c,0x73ee,0x6bac,0x73ed,0x636c,0x636c,0x5b2b,0x6b8c,0x5b2b,0x636c,0x6bcd,0x638d,0x5b2b,0x634c,0x636c,0x636c,0x636c,0x636c,0x5b2b,0x636c,0x634c,0x5b0b,0x636c,0x5b0b,0x6b6c,0x634c,0x5b0a,0x52ea,0x5b0b,0x6b8c,0x636c,0x5b2b,0x5b0b,0x5aeb,0x5b2b,0x5aea,0x5b0b,0x52a9,0x5b0b,0x52ea,0x5b0b,0x5b2b,0x632c,0x52ca,0x5b0b,0x5b2c,0x5b2b,0x530b,0x5b2b,0x52ca,0x4aca,0x52ca,0x4aa9,0x5b2b,0x52ea,0x4268,0x5b0b,0x52ea,0x52ca,0x52ca,0x4aaa,0x4a89,0x530b,0x52ca,0x4248,0x4a69,0x4248,0x4a8a,0x636a,0x5b2a,0x4a69,0x4ac9,0x4a89,0x52ca,0x52ca,0x4a89,0x52aa,0x52aa,0x4a89,0x3a28,0x4269,0x4a68,0x4268,0x4268,0x4aaa,0x4a89,0x4a89,0x4248,0x4a89,0x3a28,0x4228,0x3a07,0x4a89,0x4268,0x4a69,0x4268,0x3a27,0x4269,0x52aa,0x4a89,0x4a89,0x4248,0x4268,0x4248,0x4a89,0x4a89,0x4aa9,0x52ca,0x4268,0x4a68,0x4a89,0x4228,0x4aa9,0x52aa,0x52ca,0x52aa,0x4a89,0x4a89,0x4aa9,0x52aa,0x4aa9,0x4a89,0x5b0b,0x5b0b,0x5aeb,0x5aea,0x5289,0x4a89,0x52ca,0x4a89,0x52aa,0x52aa,0x4a89,0x52ca,0x4a89,0x5aeb,0x5b0b,0x52aa,0x52ea,0x5b0b,0x5b0b,0x634c,0x5aeb,0x5b0b,0x5aeb,0x634c,0x5b0b,0x5b2b,0x632b,0x52ea,0x5b0b,0x634c,0x632c,0x5aeb,0x6b6c,0x52ea,0x5b2b,0x632b,0x630b,0x5aea,0x5b2b,0x6bad,0x632b,0x5aeb,0x6b8d,0x6b8d,0x632c,0x5aeb,0x634c,0x634c,0x6bad,0x6b8d,0x636d,0x6b6d,0x5b0b,0x6b6c,0x6b8d,0x6b8d,0x6b6c,0x73ad,0x6b6d,0x634c,0x634c,0x6b6d,0x634c,0x6b8d,0x73ce,0x73ee,0x636c,0x73ef,0x73ee,0x73ce,0x7c0f,0x73ce,0x73ce,0x73ee,0x6bad,0x8c91,0x8450,0x6b8d,0x73ce,0x8c71,0x8450,0x73ce,0x73ee,0x7c0f,0x7bee,0x7c0f,0x7c2f,0x7bee,0x8c91,0x94d2,0x8c71,0x842f,0x7bef,0x7c0f,0x73ce,0x7bee,0x73ce,0x8c70,0x7bee,0x5b2b,0x8450,0x7c2f,0x73ae,0x7c0f,0x6b8d,0x7c0f,0x7bef,0x8470,0x7c2f,0x7bee,0x7bee,0x73ee,0x7c0f,0x9cf2,0x8c71,0x7bee,0x94b1,0x94b1,0x94b1,0x8430,0x7c0f,0x8c71,0x7bee,0x8c70,0x8470,0x9d34,0x7bef,0x7c0f,0x94b1,0x73ae,0x8c71,0x8c71,0x8c91,0x8cb1,0x9cf2,0x94b2,0x73ce,0x8430,0x7bef,0x73ae,0x7bef,0x94b1,0x9cf3,0x8c71,0x8430,0x8c50,0x94d2,0x7c0f,0x8c91,0x94d2,0x73ce,0x842f,0x8450,0x94b1,0x7c0f,0x8430,0x842f,0x8c71,0x8c71,0x9d13,0x8c71,0x9cf2,0x94b2,0x8c71,0x8c71,0x94d2,0x94b2,0x94b2,0x9d13,0x94d2,0x94b2,0x8430,0x9cf3,0x8c71,0x8430,0x9cf3,0x9491,0x9cf3,0x9491, +0x5b0b,0x630b,0x634c,0x6b6c,0x634c,0x5b0b,0x6b8d,0x638d,0x636c,0x636c,0x634c,0x634c,0x636c,0x634b,0x6b8c,0x73ee,0x634c,0x5b0b,0x634c,0x5b2b,0x636c,0x634b,0x5b0b,0x636c,0x636c,0x634b,0x636c,0x634c,0x634c,0x636c,0x634c,0x63ad,0x636c,0x634c,0x636c,0x634c,0x638c,0x636c,0x636c,0x636c,0x636c,0x6b8d,0x6b8d,0x6bad,0x6bad,0x634b,0x634c,0x638c,0x6bad,0x636c,0x638d,0x636c,0x636c,0x634c,0x6b8c,0x6b8c,0x5b0b,0x634c,0x634c,0x634c,0x636c,0x636c,0x636c,0x5b2b,0x636c,0x6b8d,0x634c,0x634c,0x634c,0x636c,0x636c,0x636c,0x6bad,0x636c,0x5b0b,0x52ea,0x5b4b,0x5b2b,0x634c,0x5b0b,0x634c,0x634c,0x634c,0x5b0b,0x52ea,0x5b2b,0x5b2c,0x6bcc,0x73cd,0x5b2b,0x634c,0x634c,0x632c,0x5b0b,0x5b0b,0x634c,0x5b0b,0x5b2c,0x634c,0x5b2b,0x634c,0x636c,0x5b2b,0x5b2b,0x5b2c,0x634c,0x5b0b,0x5b2c,0x5b2c,0x4aa9,0x5aeb,0x5b0b,0x5b2b,0x5b0b,0x52eb,0x52ca,0x52aa,0x5aeb,0x5b0b,0x5b0b,0x5b0b,0x634c,0x5b2b,0x634c,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x632c,0x5b0b,0x52ca,0x52aa,0x52eb,0x5aeb,0x5b0b,0x5b0b,0x52ea,0x52eb,0x52ca,0x5b0b,0x5b2b,0x5b2b,0x5b2b,0x632b,0x5b0b,0x5aea,0x5aeb,0x52ea,0x5aeb,0x5aca,0x5b0b,0x5b0b,0x5b0b,0x52ea,0x5b2b,0x5b0b,0x5b0b,0x632c,0x5aea,0x5aea,0x632b,0x52aa,0x632c,0x632c,0x5b0b,0x634c,0x632b,0x632b,0x632b,0x632c,0x634c,0x5aeb,0x632c,0x73ad,0x5b0b,0x632b,0x632c,0x634c,0x634c,0x6b6c,0x634c,0x5b2b,0x52ca,0x6b6c,0x6b6c,0x6b6c,0x6b6c,0x6b8d,0x73ad,0x6bad,0x6b8d,0x6b8d,0x634c,0x632c,0x738d,0x6b8d,0x634c,0x6b8d,0x6b8d,0x73ae,0x73ae,0x6b8d,0x6b8d,0x73ce,0x6b8d,0x6b8d,0x73ce,0x6bad,0x73ce,0x73ce,0x73ce,0x738d,0x73ce,0x73ad,0x73ad,0x73ce,0x73ce,0x73ce,0x73ae,0x73ae,0x8430,0x8c71,0x7c0f,0x73ce,0x842f,0x8430,0x8430,0x73ce,0x8430,0x94b2,0x842f,0x842f,0x8430,0x7bee,0x73ce,0x7c0f,0x73ce,0x73ee,0x8430,0x7c0f,0x7bee,0x7c0f,0x73ce,0x73ce,0x8c50,0x8430,0x7bef,0x8430,0x73ce,0x7c0f,0x8470,0x73ee,0x7c0f,0x8410,0x8c71,0x73ce,0x7bef,0x8c50,0x840f,0x840f,0x842f,0x73ce,0x7bef,0x8c71,0x8450,0x73ad,0x8471,0x7c2f,0x8430,0x73ee,0x7bef,0x8471,0x7bef,0x7c0f,0x94b2,0x94b1,0x73ce,0x7bce,0x7c0e,0x7bcd,0x73ad,0x73cd,0x842f,0x7c0f,0x8430,0x8c50,0x8450,0x8430,0x840f,0x842f,0x7c0f,0x73ce,0x7bee,0x7bce,0x7bef,0x7c0f,0x8450,0x7c0f,0x73ae,0x738d,0x7bee,0x7bef,0x6b8d,0x840f,0x7bef,0x73ae,0x7bef,0x8430,0x7c0f,0x738d,0x7bef,0x634c,0x73ae,0x73ce,0x73ae,0x738d,0x738d,0x6b6d,0x6b4c,0x6b8d, +0x5b2b,0x6b4c,0x73ad,0x6b8d,0x634c,0x5b0b,0x6bad,0x73ce,0x634c,0x634c,0x6bad,0x5b0b,0x636c,0x6b6c,0x6b6c,0x6b8d,0x6b8d,0x6b6c,0x636c,0x632c,0x636c,0x634c,0x632b,0x634c,0x6b8c,0x636c,0x6b8c,0x6b8d,0x634c,0x636c,0x638d,0x6b8d,0x634c,0x6b8d,0x6b8d,0x6b8d,0x636c,0x5b0b,0x5b0b,0x6b8d,0x73ce,0x6b8d,0x6bad,0x636c,0x6b6d,0x6b8d,0x634c,0x634c,0x6b8d,0x636c,0x5b4c,0x636c,0x5b2b,0x634c,0x6bad,0x6b8c,0x638c,0x634c,0x636c,0x5b2b,0x634c,0x638d,0x636c,0x636c,0x636c,0x6b8d,0x636c,0x5b0b,0x632c,0x632c,0x6b8d,0x636c,0x52eb,0x634c,0x5b0b,0x634c,0x5b2c,0x5b2b,0x636d,0x636c,0x6bad,0x5b4c,0x636c,0x6b8d,0x5b2b,0x52eb,0x5b0b,0x4aca,0x5b2b,0x634c,0x634c,0x5b0b,0x5aea,0x52ca,0x5b2c,0x636c,0x634c,0x5b2c,0x634c,0x5b4c,0x5b2b,0x5b4c,0x5b4c,0x5b0b,0x636c,0x632c,0x52ca,0x52ca,0x5b2c,0x52eb,0x5b2b,0x634c,0x5b2b,0x5b0b,0x5b2c,0x5b2b,0x5b0b,0x634c,0x5b0b,0x5b0b,0x52eb,0x5b0b,0x52aa,0x5b0b,0x5b0b,0x5b0b,0x52ea,0x5b0b,0x5b2b,0x52aa,0x52ca,0x4269,0x52ca,0x5b2c,0x634c,0x52ca,0x52ca,0x52ca,0x5b2b,0x636c,0x5b2b,0x5b0b,0x5aeb,0x5b0a,0x632b,0x6b6c,0x5b0b,0x5b0b,0x5b0b,0x632c,0x5b2b,0x5b0b,0x632c,0x5b0b,0x4a89,0x52ca,0x5b0b,0x5b0b,0x5b2b,0x5aeb,0x52ca,0x632b,0x634c,0x5aeb,0x5b0b,0x632b,0x52ca,0x636c,0x5b2b,0x6b6d,0x6b8d,0x632c,0x5aeb,0x632c,0x634c,0x5b2b,0x632c,0x634c,0x636c,0x632c,0x5b0b,0x634c,0x636c,0x634c,0x634c,0x6b8d,0x634c,0x634c,0x634c,0x6b6c,0x6b6d,0x73ad,0x6b6c,0x6b8d,0x632c,0x632b,0x632c,0x6b6d,0x632c,0x73ef,0x6b8d,0x6b6d,0x632c,0x6b8d,0x6b6d,0x5aeb,0x6b8d,0x632c,0x5aeb,0x634c,0x634c,0x632b,0x632b,0x6b4c,0x6b6d,0x6b6d,0x6b8d,0x634c,0x634c,0x6b8d,0x636c,0x634c,0x636d,0x6bae,0x73ce,0x6b8d,0x6bae,0x5b0b,0x6b6d,0x73ae,0x632c,0x5b0b,0x632c,0x6b4c,0x6b6d,0x73ae,0x6b8d,0x6b6d,0x636c,0x6b6d,0x73ef,0x73ae,0x73ae,0x73ae,0x7bef,0x7c0f,0x6b8d,0x73ae,0x73ae,0x632c,0x632c,0x634c,0x6b6d,0x7bef,0x73ae,0x636d,0x73ae,0x7bee,0x6b8d,0x73ae,0x73ae,0x632c,0x6b4c,0x73ad,0x73ae,0x73ae,0x6b6d,0x73ad,0x6b4c,0x6b8d,0x73ce,0x634c,0x632c,0x73ad,0x6b6d,0x6b6c,0x632c,0x6b8d,0x738c,0x73ac,0x73ad,0x738d,0x73ad,0x73ad,0x6b8d,0x73ae,0x738d,0x6b8d,0x634c,0x6b4c,0x738d,0x73ae,0x5b0b,0x634c,0x6b6d,0x6b6d,0x632c,0x634c,0x6b4c,0x632c,0x630c,0x632c,0x52ca,0x632c,0x6b6d,0x5b0b,0x5aeb,0x6b8d,0x738e,0x5b0b,0x630c,0x632c,0x6b6d,0x6b4d,0x634c,0x5b0b,0x632c,0x5aeb,0x5aeb,0x5b0b, +0x632c,0x634c,0x6b6c,0x5b2b,0x5b2c,0x634c,0x634c,0x5b0b,0x5aeb,0x5b2c,0x634c,0x632c,0x636c,0x636d,0x5b2b,0x6b6d,0x634c,0x5b0b,0x634c,0x5b2b,0x52ca,0x5b2b,0x638d,0x634c,0x5b0b,0x638d,0x636d,0x636c,0x636c,0x636c,0x52ea,0x5b0b,0x632c,0x638d,0x6b8d,0x634c,0x5b4c,0x634c,0x52eb,0x5b4c,0x5b2b,0x5b0b,0x636c,0x5b2c,0x52eb,0x5b2b,0x5b2b,0x5b2b,0x634c,0x5b2b,0x5b2b,0x5b2c,0x5b2b,0x634c,0x52ea,0x634c,0x530b,0x52ea,0x634c,0x634c,0x5b0b,0x5b2b,0x5b0b,0x530b,0x5b0b,0x52eb,0x5b2b,0x5aeb,0x52ea,0x530b,0x4aca,0x530b,0x636c,0x5b2b,0x5b2b,0x5b0b,0x52eb,0x5b0b,0x530b,0x52eb,0x5b0b,0x530b,0x5b2c,0x530b,0x52ea,0x4a8a,0x4a8a,0x52eb,0x634c,0x52ea,0x52ca,0x5b2c,0x52eb,0x52ca,0x5b2b,0x5b2b,0x5b0b,0x5b2b,0x5b2b,0x52ea,0x5aeb,0x5b2c,0x5b0b,0x4aaa,0x52ea,0x52ea,0x5b2b,0x634c,0x4a89,0x5aeb,0x52aa,0x4a89,0x52ea,0x52eb,0x5b0b,0x52eb,0x5b0b,0x5b0b,0x634c,0x632c,0x5b0b,0x52ea,0x52ca,0x4a89,0x5aea,0x5b2b,0x5b0b,0x5aeb,0x5b2b,0x52eb,0x4a69,0x52eb,0x4aaa,0x4a89,0x52ca,0x5b0b,0x5b0b,0x52aa,0x52eb,0x5b0b,0x52ca,0x634c,0x5aea,0x52ca,0x632b,0x5aea,0x5aeb,0x52ea,0x52ca,0x52ca,0x5b2b,0x5b0b,0x52ca,0x52ca,0x5aeb,0x52aa,0x5aeb,0x5b0b,0x5b2b,0x5b0b,0x5b0b,0x634c,0x5b2b,0x5b0b,0x52ca,0x52ca,0x52aa,0x52ca,0x5b0b,0x52a9,0x5b0b,0x5b0b,0x5aeb,0x4a89,0x5aeb,0x632c,0x52ca,0x52cb,0x5b0c,0x632c,0x5aeb,0x52eb,0x5b0b,0x5b0b,0x52ca,0x5b0b,0x5aeb,0x5b0b,0x632c,0x5acb,0x636c,0x6bad,0x632c,0x5aeb,0x632c,0x634c,0x634c,0x634c,0x52eb,0x5b2c,0x6b6d,0x6b6d,0x6b8d,0x6b8d,0x636c,0x632c,0x6b6d,0x632c,0x5aeb,0x5aeb,0x634c,0x634c,0x630b,0x52aa,0x634c,0x632c,0x52ca,0x5b0b,0x6b8d,0x634c,0x6b8d,0x6b8d,0x73ce,0x6b6d,0x634c,0x6b6d,0x73ae,0x634c,0x632c,0x6b6d,0x6b6d,0x5aeb,0x6b8d,0x6b6d,0x5b0c,0x73ce,0x73ce,0x636d,0x634c,0x7c0f,0x73cf,0x630c,0x6b6d,0x6b6d,0x73ce,0x6b6d,0x73ae,0x634c,0x73ce,0x6b8d,0x7bef,0x73ce,0x6b8d,0x73ae,0x6b8d,0x632c,0x73ce,0x6b6c,0x636c,0x6bae,0x6b8d,0x634d,0x6b6d,0x6b6c,0x7bce,0x7bef,0x73ce,0x632c,0x6b4c,0x840f,0x7bce,0x6b6d,0x6b6d,0x6b6d,0x634c,0x6b6d,0x6b6d,0x738d,0x7bce,0x634b,0x6b6c,0x73ae,0x6b6d,0x6b6d,0x6b8d,0x6b6d,0x632c,0x632c,0x6b6d,0x634c,0x630b,0x634c,0x73ae,0x6b8d,0x634d,0x5b0c,0x632c,0x5b0b,0x6b6d,0x5aeb,0x632c,0x632c,0x632c,0x634c,0x632c,0x5b0b,0x5b0b,0x5b0b,0x630c,0x738e,0x5b0c,0x5acb,0x632b,0x632c,0x5aeb,0x5aeb,0x632c,0x52ca,0x4a89,0x6b6d, +0x52ca,0x5289,0x5aea,0x52a9,0x5aeb,0x5aca,0x5289,0x4a68,0x4a89,0x5aeb,0x52ca,0x632c,0x5aeb,0x52ca,0x5aeb,0x5aeb,0x52ca,0x4aa9,0x4a69,0x52aa,0x52eb,0x52eb,0x52ca,0x52ca,0x4a89,0x5aeb,0x52aa,0x4a89,0x52eb,0x5b2b,0x4aa9,0x5b0c,0x5aeb,0x5b0b,0x5b2c,0x634c,0x634c,0x5b0b,0x5b0b,0x52ca,0x636d,0x73ce,0x632c,0x5b0b,0x52eb,0x5b2c,0x6bad,0x5b0b,0x52ca,0x5b0b,0x5aeb,0x52ca,0x636c,0x5b0b,0x530b,0x52ea,0x52ca,0x5aeb,0x52ca,0x5b0b,0x52ca,0x5b0b,0x52aa,0x5b0b,0x52cb,0x52aa,0x52ca,0x52eb,0x4aaa,0x52eb,0x52ca,0x5b0b,0x52eb,0x52eb,0x52ca,0x632c,0x5aeb,0x52aa,0x5b0b,0x52ca,0x4aaa,0x4aaa,0x52ca,0x4a69,0x5aeb,0x52ca,0x52ca,0x4248,0x4a89,0x4a89,0x5b0b,0x4aaa,0x4aa9,0x52ea,0x52eb,0x52ca,0x52ca,0x52ca,0x52eb,0x4a89,0x4a89,0x52aa,0x52aa,0x4a89,0x4a69,0x4aa9,0x52ca,0x5b0b,0x52ea,0x52ca,0x4a89,0x52ea,0x4a89,0x4a89,0x4a69,0x4a69,0x5aeb,0x5b0b,0x52ca,0x52aa,0x52ca,0x5b0b,0x52ca,0x4a89,0x4a89,0x4a89,0x4248,0x5aeb,0x4aaa,0x4a69,0x4a89,0x4a69,0x52aa,0x52aa,0x4248,0x4a69,0x4a89,0x4a89,0x4aa9,0x4a69,0x52aa,0x52aa,0x52cb,0x4a89,0x4a89,0x52a9,0x4a89,0x4a69,0x5289,0x52ca,0x4a89,0x4a89,0x4a69,0x4a69,0x4269,0x52ca,0x52a9,0x4a89,0x52a9,0x52ca,0x52ca,0x52aa,0x4a89,0x4a69,0x4269,0x5aeb,0x52aa,0x52aa,0x52ca,0x4a89,0x52aa,0x52ca,0x4aa9,0x4a89,0x52aa,0x5aeb,0x5b0b,0x4a89,0x4248,0x52ca,0x4a89,0x4a69,0x52ca,0x5289,0x4a69,0x52aa,0x4a69,0x4a89,0x52ca,0x5aeb,0x52aa,0x5b2b,0x4a89,0x5aca,0x5b0b,0x52ca,0x5b0b,0x634c,0x52ca,0x52aa,0x52ca,0x6b8d,0x5b0b,0x632c,0x5b2c,0x5b0b,0x632c,0x632c,0x5aeb,0x5aeb,0x5aeb,0x630b,0x632c,0x630b,0x634c,0x5aeb,0x632c,0x630c,0x634c,0x5b0b,0x632c,0x634c,0x5aeb,0x630c,0x4a89,0x6b6d,0x634c,0x634c,0x5aeb,0x52cb,0x634d,0x632c,0x5b0b,0x630c,0x630c,0x738d,0x6b6d,0x5aec,0x634c,0x634c,0x6b6d,0x6b4c,0x5aeb,0x5b0b,0x6b6d,0x634c,0x632c,0x52ca,0x5aeb,0x6b6d,0x738e,0x630b,0x6b6d,0x634c,0x632c,0x632c,0x5aca,0x632c,0x632c,0x634c,0x73ae,0x632c,0x5b0c,0x632c,0x632c,0x52ca,0x5b0b,0x6b8d,0x632c,0x632c,0x6b4c,0x632c,0x632c,0x6b6d,0x632c,0x52ca,0x630b,0x632c,0x5aeb,0x6b4c,0x632c,0x634c,0x6b6d,0x5aeb,0x5aeb,0x632c,0x5aeb,0x634d,0x6b6d,0x630c,0x5aeb,0x632c,0x632c,0x630c,0x5b0c,0x5b0b,0x52aa,0x5acb,0x5b0b,0x52aa,0x5aeb,0x632c,0x52aa,0x5aeb,0x630c,0x5b0b,0x52aa,0x52aa,0x5acb,0x5acb,0x5aeb,0x4a69,0x5289,0x52aa,0x4a69,0x52aa,0x52aa,0x4228,0x4a48,0x4a89, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x1020,0x1080,0x2103,0x2103,0x1080,0x18e2,0x2103,0x2103,0x20e2,0x20e2,0x1060,0x18c2,0x20e2,0x20e2,0x2123,0x2103,0x18a1,0x2103,0x2944,0x2923,0x2923,0x2923,0x3185,0x2123,0x3185,0x2944,0x3a07,0x4a48,0x2943,0x39c6,0x31a6,0x31a5,0x3185,0x2944,0x2944,0x2964,0x31a5,0x39c6,0x31a5,0x2964,0x39c6,0x31a5,0x2964,0x3185,0x3185,0x31a5,0x31a5,0x39e6,0x31c6,0x39e6,0x3185,0x3185,0x2964,0x39c6,0x39e6,0x31a5,0x3185,0x39e6,0x2964,0x3185,0x31a5,0x39e6,0x31a5,0x31a5,0x31c6,0x31a5,0x31a5,0x3185,0x31a5,0x2964,0x31a5,0x39e6,0x3185,0x2144,0x2944,0x2985,0x2965,0x2964,0x3185,0x39c6,0x39c6,0x2944,0x31a5,0x2964,0x31a6,0x31c6,0x2944,0x31a5,0x39e6,0x39e7,0x39c6,0x2964,0x39e6,0x39e6,0x3185,0x39c6,0x31a5,0x39c6,0x31c6,0x2985,0x39e7,0x31a6,0x3185,0x2944,0x31a5,0x39e6,0x31c6,0x2985,0x3185,0x31a5,0x39c6,0x3a07,0x39c6,0x39e6,0x2923,0x2923,0x2964,0x2943,0x31a5,0x39e6,0x2965,0x3185,0x2944,0x2985,0x39e7,0x31c6,0x31a5,0x31c6,0x39c6,0x3185,0x39e7,0x39e7,0x3185,0x3185,0x39a6,0x39c6,0x2964,0x31a5,0x39e6,0x2923,0x2102,0x31a5,0x3165,0x3185,0x39c6,0x31a6,0x3185,0x3164,0x2923,0x31a5,0x3185,0x3185,0x39e6,0x39e6,0x3a07,0x39e6,0x39c6,0x39c6,0x4227,0x39a5,0x39a6,0x39a6,0x4207,0x4227,0x39c6,0x4207,0x39e7,0x39e6,0x4207,0x39e6,0x31a5,0x39c6,0x39e6,0x4207,0x39e6,0x39c6,0x39e7,0x39e7,0x4207,0x39a6,0x39e7,0x31a5,0x4207,0x39e6,0x31a6,0x39e7,0x39c6,0x4a48,0x4206,0x39e6,0x4207,0x39c6,0x39e6,0x4a28,0x4207,0x39c6,0x4207,0x4227,0x4207,0x4207,0x4228,0x4207,0x4207,0x39e7,0x39c6,0x4207,0x4228,0x3a07,0x4207,0x39c6,0x39e7,0x39e6,0x39e7,0x4a49,0x31a6,0x39c6,0x39e7,0x4208,0x31a6,0x4228,0x39e7,0x4227,0x4207,0x39c7,0x39e7,0x3185,0x4207,0x4228,0x39e6,0x39c6,0x31a5,0x39c6,0x39a6,0x39c6,0x39e6,0x39c6,0x31a5,0x39c6,0x4207,0x41e7,0x41e7,0x4207,0x4207,0x39e7,0x39e7,0x39c6,0x39e6,0x4207,0x31a5,0x3a07,0x4207,0x4207,0x4227,0x4228,0x39c6,0x4207,0x39e6,0x39c6,0x39c6,0x4207,0x41e7,0x39c6,0x31a5,0x39c6,0x31a6,0x39c7,0x39e7,0x39c6,0x39e7,0x31a6,0x31a6,0x31a6,0x31a5,0x39c6,0x31a6,0x31a6,0x3185,0x2965,0x2965,0x31a6,0x31a5,0x3185,0x2965,0x3185,0x39c6,0x31c6,0x2965,0x2985,0x2965,0x2944,0x39a6,0x3185,0x2124,0x18e3,0x1081,0x0862,0x1082,0x10a2,0x1082,0x10a2,0x10a2,0x0840,0x0000,0x0862,0x0000,0x0000, +0x1126,0x0905,0x00a5,0x0065,0x0065,0x0025,0x0004,0x0004,0x0004,0x0004,0x0005,0x0004,0x0004,0x0004,0x0004,0x0004,0x0003,0x0001,0x0002,0x0003,0x0004,0x0004,0x0003,0x0003,0x0003,0x0003,0x0002,0x0002,0x0002,0x0001,0x0003,0x0003,0x0000,0x0001,0x0001,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0001,0x0001,0x0001,0x0001,0x0021, +0xeeec,0xeecc,0xeecb,0xeecc,0xeeac,0xeecc,0xe6ab,0xe6ab,0xe6ac,0xe6ac,0xe6cc,0xe6ac,0xe6ad,0xe6ac,0xe68c,0xe6ac,0xe6ac,0xe66a,0xe66b,0xe68c,0xe6ad,0xe68d,0xe66d,0xde4c,0xde4c,0xde4d,0xde6d,0xde4d,0xde2b,0xd60b,0xde4d,0xde4d,0xe64c,0xde2b,0xe60a,0xde2b,0xdde8,0xaca7,0x8be9,0x9406,0xc589,0xde2c,0xe64b,0xe64b,0xde2a,0xde09,0xde2a,0xde2a,0xde2a,0xd5e9,0xd5ea,0xde2a,0xde28,0xde29,0xde29,0xde49,0xde29,0xe649,0xe649,0xe648,0xe649,0xe649,0xe649,0xe669,0xde49,0xe669,0xe668,0xde27,0xd5e7,0xde07,0xde27,0xe628,0xe627,0xe627,0xe647,0xe667,0xe668,0xe668,0xe626,0xde05,0xde06,0xe626,0xe626,0xe606,0xe606,0xe626,0xe626,0xe626,0xe627,0xe627,0xe627,0xe626,0xe606,0xdde5,0xdde5,0xe5e4,0xdde4,0xddc4,0xddc4,0xdde4,0xddc4,0xe5e4,0xddc4,0xdd82,0xdd62,0xdd83,0xdd83,0xdd83,0xdda3,0xe5c4,0xe605,0xdde4,0xdda3,0xe5c3,0xe5c3,0xe5c3,0xe5c3,0xe5c3,0xe5c3,0xe5c3,0xe5a3,0xddc3,0xdda3,0xdd83,0xddc3,0xddc3,0xdd83,0xdda3,0xdda3,0xdd83,0xdd82,0xdd64,0xd543,0xd543,0xd544,0xd584,0xdda4,0xdda4,0xddc4,0xdda3,0xdda4,0xdda4,0xdda4,0xdda4,0xdda5,0xdda5,0xdd85,0xd585,0xd565,0xdd85,0xe5c5,0xdda5,0xdd85,0xdda5,0xddc5,0xe5e6,0xe606,0xe5e6,0xe5e7,0xe5e7,0xde06,0xd5a7,0xddc6,0xddc6,0xcd87,0xcd86,0xd586,0xddc7,0xe607,0xdde6,0xd5a6,0xcd66,0xcd87,0xcd66,0xcd86,0xddc6,0xddc6,0xdde7,0xe607,0xe607,0xe5e7,0xdde7,0xde07,0xde27,0xe627,0xdde6,0xdde7,0xddc7,0xdde7,0xdde7,0xdde7,0xe627,0xe627,0xe607,0xe647,0xde07,0xde08,0xe608,0xdde8,0xdde7,0xdde7,0xde07,0xde07,0xde07,0xde28,0xe628,0xde07,0xe608,0xdde7,0xddc7,0xddc7,0xdde7,0xddc8,0xdde7,0xdde7,0xde08,0xddc7,0xc528,0xde08,0xe648,0xe628,0xde08,0xde07,0xe628,0xe627,0xde08,0xe627,0xcd67,0xb508,0xcda8,0xdde8,0xe647,0xe627,0xe647,0xe667,0xe627,0xcd67,0xbd28,0xe647,0xe647,0xe647,0xe628,0xddc7,0xddc7,0xdde7,0xdde7,0xddc7,0xddc8,0xd5c8,0xd5a8,0xd5a8,0xd588,0xddc7,0xd5a7,0xc567,0xcd88,0xd5c8,0xdde8,0xdde8,0xd5c8,0xd5a7,0xddc8,0xdda7,0xddc7,0xddc8,0xddc7,0xddc8,0xdde8,0xd5a7,0xd587,0xcd67,0xcd47,0xc527,0xb4e7,0xc547,0xa4a9,0x8c28,0xa4c8,0x9c68,0x8c29,0xa4a8,0xb4e8,0xbd28,0xb509,0xbd08,0xbd27,0xc527,0xc527,0xc548,0xc527,0xcd27,0xc527,0xc547,0xbd27,0xbd07,0xa4a8,0xa488,0xcd68,0xcd67,0xcd68,0xc547,0xc547,0xc548,0xc568,0xc548,0xc528,0xd588,0xcd67,0xcd88,0xc549,0xcd88,0xd5a8,0xd5c7,0xd5a7,0xd5c8,0xd5a7,0xd5a7,0xcd68,0xbd48,0xa4c9, +0xb484,0xb484,0xb484,0xb484,0xb484,0xb4a4,0xb4a4,0xb483,0xb484,0xb4a4,0xbcc4,0xbca4,0xbca4,0xbca4,0xb4a4,0xb4a4,0xb4a4,0xbcc4,0xbcc5,0xbca4,0xb4a4,0xb484,0xb484,0xac64,0xb464,0xac64,0xb484,0xb484,0xac84,0xa444,0xac65,0xb484,0xbcc4,0xbcc4,0xbcc3,0xbce4,0xc4e3,0xbce5,0xc507,0xc503,0xc567,0xbd07,0xc4e3,0xc4e4,0xc4c3,0xc4c3,0xc4c3,0xc4c4,0xbca3,0xbca3,0xc4e4,0xc4e3,0xc4e3,0xc503,0xc503,0xc4e3,0xc4e3,0xc4e3,0xc4e3,0xc503,0xc4e3,0xcd03,0xcd03,0xcd03,0xc503,0xc4e4,0xc523,0xc543,0xc523,0xc523,0xc503,0xc4e3,0xc4c3,0xc4e3,0xcd03,0xcd03,0xcd03,0xcd03,0xc4e3,0xc503,0xc4e3,0xc4c3,0xc4e2,0xc4e2,0xc4e2,0xc4e2,0xc4e2,0xc4e2,0xc4e2,0xc4e2,0xc4e2,0xcce2,0xc4c2,0xc4c2,0xc4c2,0xc4e2,0xc4c2,0xc4c1,0xc4c2,0xc4e2,0xc4e2,0xccc1,0xccc2,0xcce2,0xc4a1,0xc4c2,0xccc2,0xc4c1,0xc4a2,0xc4a2,0xc4a1,0xccc3,0xc4c2,0xc4a1,0xc4c2,0xc4c3,0xc4c2,0xc4c2,0xc4c2,0xc4a2,0xc4a1,0xc4c2,0xccc3,0xccc2,0xc4c1,0xc4c2,0xc4c3,0xc4c3,0xc4a1,0xc4a2,0xc4c1,0xbc82,0xc4a3,0xc4c2,0xc4c1,0xc4e2,0xc4e3,0xbcc2,0xc4c2,0xcce3,0xc4c2,0xc4e2,0xc4c3,0xccc4,0xc4a3,0xc483,0xc4a3,0xc4a3,0xc4a3,0xc4a3,0xc4c4,0xc4e4,0xc4c3,0xc4e4,0xc4c4,0xc4a2,0xc4a4,0xc483,0xbc63,0xb464,0xb463,0xac64,0xac64,0xb483,0xa403,0xa424,0x9bc5,0xa404,0xbca3,0xbc84,0xbca4,0xb464,0xb464,0xbce4,0xc4e5,0xc4c3,0xc4c4,0xc4c5,0xbca3,0xbca3,0xbca3,0xbca4,0xb4a5,0xbcc5,0xc4c4,0xc484,0xc484,0xc4c5,0xbc85,0xb486,0xbca5,0xbcc4,0xc4e6,0xc4e6,0xc505,0xc4c5,0xc4a5,0xc4c5,0xbca6,0xbcc6,0xbce5,0xc525,0xc546,0xc546,0xc546,0xc525,0xc525,0xcd67,0xc547,0xc526,0xc547,0xc568,0xc547,0xc546,0xc546,0xc567,0xbd06,0xa447,0xbd26,0xc546,0xbd06,0xbce6,0xc526,0xc546,0xc526,0xc526,0xc506,0xb466,0x9407,0x9c26,0xa486,0xb4c6,0xbd06,0xc526,0xc546,0xc526,0xb466,0xac67,0xc526,0xc526,0xc526,0xbd26,0xbd06,0xc526,0xc527,0xbd07,0xbd07,0xbd07,0xbd08,0xbd27,0xbd07,0xbd27,0xc547,0xbd27,0xbd28,0xbd48,0xbd48,0xbd48,0xbd29,0xbd29,0xbd29,0xbd49,0xbd48,0xbd48,0xbd49,0xbd49,0xbd49,0xbd49,0xbd49,0xbd08,0xacc9,0xacc9,0xacc8,0x9c89,0xa4c9,0x8c2a,0x7bea,0x8c09,0x8c2a,0x840a,0x8c49,0x9c88,0xaca8,0xa489,0x9c48,0x9448,0xa488,0xa468,0x9c69,0x9c69,0x9c68,0x9c48,0x9c48,0x9428,0x8c08,0x83c9,0x83a9,0x9c49,0x9c49,0x9429,0x8c08,0x8c08,0x83e8,0x83e8,0x83e8,0x83e8,0x8c28,0x8c08,0x8c08,0x7b69,0x83a8,0x8be8,0x8c07,0x8be7,0x8c07,0x8be7,0x83c7,0x7ba8,0x7b88,0x7349, +0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0002,0x0003,0x0003,0x0003,0x0002,0x0003,0x0003,0x0003,0x0002,0x0002,0x0002,0x0003,0x0002,0x0002,0x0002,0x0002,0x0003,0x0003,0x0002,0x0002,0x0002,0x0002,0x0001,0x0001,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0003,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0004,0x0005,0x0003,0x0002,0x0004,0x0005,0x0003,0x0004,0x0005,0x0002,0x0005,0x0005,0x0004,0x0005,0x0004,0x0002,0x0004,0x0005,0x0005,0x0004,0x0002,0x0004,0x0005,0x0004,0x0004,0x0005,0x0004,0x0003,0x0002,0x0002,0x0003,0x0004,0x0005,0x0005,0x0005,0x0005,0x0003,0x0003,0x0005,0x0005,0x0005,0x0005,0x0005,0x0002,0x0004,0x0006,0x0005,0x0002,0x0003,0x0006,0x0006,0x0003,0x0005,0x0006,0x0004,0x0005,0x0004,0x0004,0x0006,0x0003,0x0003,0x0006,0x0004,0x0004,0x0006,0x0066,0x0004,0x0004,0x0006,0x0006,0x0005,0x0003,0x0005,0x0007,0x0006,0x0006,0x0005,0x0003,0x0002,0x0002,0x0003,0x0006,0x0006,0x0006,0x0005,0x0003,0x0006,0x0005,0x0005,0x0006,0x0004,0x0004,0x0006,0x0005,0x0006,0x0004,0x0005,0x0047,0x0047,0x0006,0x0004,0x0007,0x0007,0x0006,0x0005,0x0005,0x0008,0x0007,0x0004,0x0005,0x0028,0x0068,0x0005,0x0005,0x0005,0x0006,0x00a7,0x0006,0x0004,0x0004,0x0004,0x0004,0x0003,0x0004,0x0004,0x0004,0x0003,0x0004,0x0004,0x0004,0x0003,0x0004,0x0004,0x0003,0x0004,0x0003,0x0004,0x0004,0x0004,0x0004,0x0003,0x0004,0x0003,0x0004,0x0004,0x0004,0x0004,0x0003,0x0004,0x0003,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0005,0x0005,0x0004,0x0004,0x0004,0x0004,0x0004,0x0003,0x0003,0x0004,0x0003,0x0003,0x0005,0x0003,0x0003,0x0003,0x0003,0x0004,0x0004,0x1004,0x0003,0x0004,0x1844,0x1804,0x2024,0x2064,0x0004,0x3104,0x2924,0x00a7,0x0005,0x0004,0x0005,0x0004,0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,0x00a5,0x0025,0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,0x0065, +0x3143,0x3143,0x3164,0x3163,0x2963,0x2943,0x2943,0x2943,0x2943,0x2942,0x2943,0x2942,0x3184,0x3164,0x2922,0x2923,0x2943,0x3163,0x2922,0x3143,0x2943,0x2101,0x2922,0x2922,0x2102,0x2102,0x2922,0x2102,0x2102,0x2102,0x2102,0x2922,0x2902,0x2922,0x2922,0x2901,0x2922,0x2922,0x2102,0x2102,0x2122,0x2922,0x2101,0x2922,0x2922,0x2922,0x2942,0x2101,0x20e0,0x2101,0x2922,0x2101,0x2101,0x2922,0x2101,0x2101,0x2101,0x20e1,0x20e1,0x2101,0x20e1,0x2101,0x2102,0x2122,0x2101,0x2101,0x2101,0x2922,0x2122,0x2101,0x2101,0x2902,0x2101,0x2102,0x2101,0x2101,0x2101,0x2101,0x20e1,0x20e1,0x20c0,0x20e0,0x20e0,0x20e0,0x20c0,0x20e0,0x20c0,0x20c0,0x20c0,0x20c0,0x20c0,0x20e0,0x20c0,0x18c0,0x18c0,0x20e0,0x20c0,0x20c0,0x20c0,0x20e0,0x18c0,0x2922,0x2102,0x18c0,0x20c0,0x20e0,0x2101,0x20e1,0x20e1,0x2102,0x20c0,0x2102,0x2922,0x2101,0x20e1,0x20c0,0x20c0,0x2102,0x2122,0x2922,0x2902,0x20e0,0x20c0,0x2122,0x2942,0x2922,0x20e0,0x20e0,0x20e0,0x20c0,0x20e1,0x20e0,0x18c0,0x2102,0x2122,0x2922,0x20e0,0x20e0,0x20e0,0x20e0,0x2902,0x2942,0x2922,0x20c0,0x20c0,0x2101,0x2902,0x2102,0x20e1,0x20e1,0x2902,0x2922,0x2101,0x2101,0x2122,0x2922,0x28e1,0x20c0,0x20e1,0x2901,0x20e1,0x20e0,0x20e1,0x2101,0x2902,0x2922,0x2922,0x2922,0x2901,0x2902,0x2922,0x2923,0x2923,0x2922,0x2942,0x2943,0x2943,0x2902,0x2901,0x28e1,0x2901,0x20e1,0x2101,0x2943,0x2923,0x2902,0x2902,0x2943,0x2102,0x20e1,0x2923,0x2922,0x2902,0x2943,0x3163,0x2943,0x2922,0x3163,0x2943,0x3164,0x3184,0x2942,0x2963,0x3164,0x3164,0x3164,0x2943,0x3163,0x2943,0x2943,0x2943,0x2964,0x3184,0x3163,0x3184,0x3184,0x3163,0x2943,0x3163,0x2943,0x2943,0x2922,0x2942,0x2943,0x2943,0x2942,0x2943,0x2923,0x2103,0x2923,0x2943,0x2943,0x2922,0x2963,0x2963,0x2943,0x2963,0x3984,0x39c3,0x39c3,0x39a3,0x3163,0x3163,0x39c4,0x41c4,0x2983,0x39a4,0x41e4,0x39a4,0x41e5,0x41c4,0x39a4,0x41e4,0x41c4,0x3185,0x3184,0x3184,0x3184,0x3185,0x3184,0x3184,0x31a5,0x31a4,0x31a4,0x39c5,0x39a5,0x39a5,0x31a5,0x3184,0x3184,0x3184,0x39a5,0x39c5,0x3185,0x3184,0x2964,0x3184,0x2964,0x3185,0x3184,0x3185,0x41c4,0x39e4,0x39e4,0x39a4,0x2963,0x39c4,0x41e5,0x3183,0x3184,0x41c5,0x31a4,0x39a4,0x41c4,0x3184,0x39c4,0x41e5,0x39e6,0x31a5,0x31a5,0x3164,0x2964,0x2964,0x2964,0x2964,0x2944,0x2944,0x2964,0x2964,0x2965,0x2964,0x2964,0x2964,0x2964,0x2964,0x3184,0x3185,0x3185,0x2944,0x3185, +0x52ca,0x52ca,0x4aa9,0x4a89,0x4aaa,0x4aaa,0x4a89,0x52ca,0x4aaa,0x4a89,0x4a89,0x4a69,0x4269,0x4aaa,0x4289,0x4a89,0x4aaa,0x52ca,0x4aa9,0x4a89,0x4269,0x4268,0x4a89,0x4aa9,0x4a89,0x4a89,0x4a69,0x4269,0x4248,0x4a69,0x4a69,0x4269,0x4aaa,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x4269,0x4269,0x4228,0x4248,0x4a89,0x4a69,0x4228,0x4248,0x4a89,0x4a69,0x4269,0x4a89,0x4269,0x4268,0x4aa9,0x4aa9,0x4aa9,0x4289,0x4a89,0x4289,0x4269,0x4268,0x4227,0x4a68,0x4a89,0x4248,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x4a68,0x4248,0x3a27,0x4228,0x4248,0x4248,0x4248,0x3a28,0x3a28,0x4268,0x4269,0x3a28,0x4248,0x4228,0x4228,0x3a28,0x3a28,0x4269,0x3a28,0x3a28,0x3a28,0x4228,0x4269,0x3a28,0x4228,0x4269,0x4249,0x3a28,0x3a07,0x4248,0x4268,0x4268,0x4228,0x39e7,0x3a07,0x4248,0x3a07,0x3a28,0x4228,0x39e7,0x4228,0x4228,0x4248,0x4248,0x3a07,0x3a08,0x4228,0x3a28,0x3a28,0x4248,0x3a07,0x3a07,0x4268,0x4248,0x3a07,0x3a07,0x39e7,0x3a07,0x39e7,0x4228,0x4228,0x3a07,0x3a07,0x4228,0x4248,0x3a07,0x31c7,0x39e7,0x39e7,0x4208,0x4228,0x4228,0x3a07,0x39e7,0x39e7,0x4228,0x3a28,0x3a27,0x31c6,0x39e7,0x39e7,0x31c6,0x39e7,0x4228,0x3a08,0x4248,0x3a07,0x3a07,0x4228,0x3a07,0x3a08,0x4228,0x3a07,0x3a08,0x3a28,0x3a28,0x4228,0x3a07,0x4248,0x4248,0x4248,0x4a69,0x4208,0x4a49,0x4a69,0x4249,0x4228,0x4248,0x4228,0x4208,0x4228,0x4208,0x3a07,0x4228,0x3a07,0x39e7,0x4228,0x4228,0x3a28,0x4228,0x4249,0x4228,0x4228,0x4249,0x4248,0x4228,0x4248,0x4248,0x4a69,0x4248,0x4228,0x4228,0x4a69,0x4a69,0x4249,0x4228,0x4a69,0x4a8a,0x4a69,0x4248,0x4a69,0x4a69,0x4a69,0x4a69,0x4a89,0x4a69,0x528a,0x4a8a,0x4a69,0x4a89,0x52aa,0x4a8a,0x4a8a,0x4a69,0x4a8a,0x4a69,0x4a89,0x52a9,0x4a8a,0x4248,0x4248,0x52aa,0x528a,0x52a9,0x5aea,0x5289,0x5289,0x3a29,0x3249,0x3229,0x4a8a,0x52aa,0x4229,0x4249,0x52a9,0x4269,0x3a28,0x4a69,0x3a49,0x3a48,0x4aaa,0x4a69,0x4249,0x4a89,0x5aca,0x52ca,0x4a89,0x4a89,0x52aa,0x4a89,0x4a69,0x528a,0x52aa,0x52aa,0x5aea,0x52ca,0x52aa,0x52ca,0x52aa,0x52aa,0x52aa,0x52aa,0x4a89,0x4a89,0x4a69,0x528a,0x52aa,0x4a8a,0x4a8a,0x52a9,0x3a6a,0x4229,0x41e8,0x3209,0x52c9,0x52a9,0x39e8,0x4a89,0x4a89,0x3a29,0x4a49,0x4a89,0x4228,0x4248,0x4a48,0x4207,0x4a89,0x52c9,0x52aa,0x5289,0x5289,0x4a89,0x4a89,0x4a89,0x4a8a,0x4a89,0x528a,0x52ca,0x4a69,0x4a69,0x4a69,0x4a48,0x528a,0x4a89,0x52ca,0x4a69,0x528a,0x5aca,0x52aa, +0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x5b2c,0x5b2b,0x5b2c,0x5b0b,0x5b0b,0x5b2c,0x52eb,0x52eb,0x52eb,0x530b,0x5b0b,0x52eb,0x530b,0x5b2b,0x5b2b,0x5b0b,0x530b,0x5b0b,0x530b,0x5b2c,0x5b0b,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x530b,0x52eb,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x530b,0x52eb,0x52eb,0x52eb,0x530b,0x52eb,0x52ca,0x52ea,0x52ea,0x4aaa,0x52ca,0x52eb,0x52eb,0x52eb,0x52ea,0x52ea,0x52ea,0x530b,0x530b,0x530b,0x52eb,0x530b,0x530b,0x52ea,0x530b,0x530b,0x52ca,0x52ea,0x52ea,0x52eb,0x5b0b,0x52ea,0x52eb,0x52eb,0x52eb,0x52ea,0x52ca,0x52ca,0x52ca,0x52ea,0x52ca,0x4aca,0x4aca,0x52ea,0x530b,0x530b,0x530b,0x4aca,0x52ea,0x5b2b,0x52eb,0x52eb,0x5b2c,0x5b2c,0x52ea,0x52ea,0x52eb,0x52eb,0x52eb,0x530b,0x52eb,0x52eb,0x52eb,0x5b0b,0x5b2b,0x4289,0x4aa9,0x5b2b,0x530b,0x52eb,0x3a28,0x4a89,0x4269,0x4248,0x52ea,0x3a48,0x31e6,0x3a28,0x4248,0x52ca,0x530b,0x4288,0x3206,0x3a47,0x4288,0x52ea,0x5b0b,0x4268,0x3227,0x3a27,0x4aa9,0x5b0b,0x530b,0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x4a89,0x3a48,0x4268,0x52eb,0x5aeb,0x52eb,0x5b0b,0x4248,0x4247,0x4268,0x5b0b,0x5b0b,0x52ca,0x4248,0x4289,0x52ea,0x52eb,0x4248,0x39e6,0x4a89,0x4aa9,0x3a48,0x4248,0x4a89,0x5b2b,0x52eb,0x4a89,0x52aa,0x5b0b,0x4268,0x52aa,0x4aa9,0x3a28,0x4269,0x3a48,0x52ca,0x4aaa,0x4248,0x3a27,0x4a89,0x5aeb,0x4a89,0x4aaa,0x4aaa,0x52eb,0x5b2c,0x5b0b,0x5aeb,0x5b0b,0x52ca,0x4248,0x3a07,0x52ca,0x5aeb,0x4269,0x52aa,0x632c,0x52eb,0x4aaa,0x634c,0x5b0b,0x4a89,0x52eb,0x634c,0x52ea,0x4a89,0x52eb,0x4aca,0x5b4c,0x5b0b,0x52ca,0x52ca,0x52aa,0x634c,0x5aeb,0x52cb,0x634c,0x636c,0x632c,0x52ca,0x5b0b,0x632c,0x52eb,0x632c,0x634c,0x634c,0x634c,0x634c,0x6b8d,0x636d,0x636d,0x6b8d,0x634c,0x634c,0x636d,0x6b6d,0x634d,0x632c,0x634c,0x6b8d,0x6b4d,0x634d,0x6b8d,0x634c,0x5b0c,0xac8b,0xdd8a,0xc4c9,0x7bab,0x52ec,0x9c4a,0xbcc9,0x52ed,0x8beb,0xd529,0x736b,0xa44b,0xd549,0x8beb,0xcd4a,0xdd69,0x8beb,0x634d,0x6b4c,0x634d,0x6b8e,0x6b6d,0x634d,0x634d,0x6b6d,0x6b6d,0x634d,0x6b8e,0x6b8d,0x6b8d,0x6b8e,0x6b6d,0x6b4d,0x6b6d,0x634c,0x634c,0x634d,0x634d,0x634c,0x6b6d,0x632c,0x636c,0x634d,0x940b,0xe5c9,0xedc9,0xac49,0x630c,0x738c,0xc528,0x838b,0x530c,0xd529,0xc4c9,0x5b0c,0xdd89,0xbc89,0xa46a,0xedc9,0xcce9,0x632c,0x632c,0x632c,0x632c,0x632c,0x634c,0x632c,0x634c,0x6b4d,0x632c,0x634c,0x630c,0x634c,0x634c,0x634c,0x634c,0x6b4d,0x634c,0x634d,0x634d,0x6b4d,0x632c, +0x52ea,0x52eb,0x52eb,0x52ea,0x52eb,0x52ea,0x530b,0x52eb,0x52eb,0x52ea,0x52ca,0x52ca,0x52eb,0x52ca,0x52ca,0x52aa,0x52aa,0x52ca,0x52ca,0x5aeb,0x52ca,0x52ca,0x52ca,0x52ca,0x52aa,0x52ca,0x5aeb,0x5acb,0x52eb,0x52ca,0x5aeb,0x52ea,0x52ca,0x52ca,0x52aa,0x52ca,0x4a8a,0x4aaa,0x4aca,0x4aca,0x52ca,0x4aca,0x4aca,0x4aca,0x4aca,0x52ea,0x52eb,0x52ca,0x4aca,0x4aca,0x4aaa,0x4aaa,0x4aca,0x52ca,0x4aaa,0x4aa9,0x4aca,0x4aca,0x4aaa,0x4aaa,0x52ca,0x52ca,0x52ea,0x4aa9,0x4a89,0x4aa9,0x4aa9,0x4aca,0x4aaa,0x4aa9,0x52ca,0x4aaa,0x4aa9,0x52ca,0x52ca,0x4aa9,0x52ca,0x52ca,0x4aaa,0x4aa9,0x52ca,0x52ca,0x52ca,0x4aaa,0x4aaa,0x52ca,0x52ca,0x4aca,0x52ca,0x4aca,0x4aca,0x4aca,0x4aca,0x4aaa,0x52ca,0x52ea,0x52ea,0x4aca,0x4aca,0x5b0b,0x638d,0xa575,0x9513,0x530b,0x5b2b,0x6b8d,0xadb5,0x8470,0x8c91,0x9d13,0x530a,0x9d33,0xad95,0xa574,0x8cb1,0x52ea,0x52c9,0x8cb1,0xad95,0xadb5,0x9d33,0x5b2b,0x4aa9,0x7c50,0xadb5,0xa594,0x73ce,0x4ac9,0x5b2b,0x52eb,0x5b2b,0x634c,0x52ea,0x8470,0xa574,0x9513,0x5b4b,0x52ca,0x5b0b,0x52ea,0x8cd2,0xad95,0x94f2,0x5b2b,0x52ea,0x73ce,0xa554,0x94d2,0x5b2b,0x5aeb,0x94d2,0xad74,0x73ee,0x73ee,0x9d33,0x94f2,0x8490,0x530a,0x638c,0x9d13,0x740f,0x5b2b,0x94f2,0x7c0f,0x8450,0xa554,0x9d33,0xa533,0x73ce,0x8c91,0x9d33,0x9d13,0x8470,0x636c,0x94d2,0x9d13,0x9d12,0x73cd,0x5b2b,0x634c,0x5b2b,0x630c,0x52eb,0x8cb1,0xa554,0x636c,0x5b0b,0x94d2,0x7c0f,0x52aa,0x8450,0x9d13,0x636c,0x73ee,0xad74,0x8c91,0x5b0b,0x8450,0x9d13,0x9cf3,0x9d34,0x7c50,0x8450,0xa534,0x9d13,0x94d2,0x73ce,0x9cf3,0x9d13,0x6bad,0x632b,0x8451,0xad75,0x8cb1,0x8470,0xa554,0x8c90,0x844f,0x8c91,0x7c0f,0x5b2b,0x5b0b,0x5aeb,0x5b0b,0x5b2c,0x5b0b,0x5b0b,0x632c,0x5b0b,0x5aeb,0x5aeb,0x632c,0x5aeb,0x5b0b,0x5aeb,0x5aeb,0x4acb,0x940a,0xedc8,0xbca8,0xcd28,0xa448,0x3a6b,0xd549,0xfde7,0x732a,0x93ea,0xfe88,0xac48,0xdd89,0xfe27,0xa429,0xede9,0xd528,0x83ab,0x5b0c,0x630b,0x5b0c,0x634d,0x630c,0x632c,0x632c,0x634d,0x634d,0x634d,0x6b6d,0x6b6d,0x634d,0x5b0c,0x632c,0x5b0c,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x630c,0x6b6b,0xedc9,0xd548,0xcd29,0xdd67,0x5aaa,0xac8a,0xfea7,0xbc88,0x428b,0xf5e8,0xede7,0x9c08,0xfea7,0xd507,0xc529,0xfe28,0xbc89,0x5aeb,0x5aeb,0x630b,0x5acb,0x5aeb,0x632c,0x5aeb,0x5aeb,0x5aeb,0x632c,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x5b0c,0x5b0c,0x5b0c,0x5aeb,0x5b2c,0x632c,0x632c,0x5b0c, +0x52aa,0x52ca,0x52ea,0x52eb,0x52ea,0x52eb,0x530b,0x52ea,0x52eb,0x52ca,0x52ca,0x5b0b,0x5b0b,0x52ea,0x5b0b,0x52eb,0x52cb,0x52ca,0x4aca,0x42cb,0x52ca,0x4aca,0x4aca,0x42ca,0x4aea,0x52aa,0x52eb,0x52eb,0x52eb,0x4aca,0x4aeb,0x530b,0x52ca,0x52eb,0x4aea,0x42aa,0x42ca,0x52ca,0x52ca,0x4aca,0x52ea,0x4aca,0x4aaa,0x52ca,0x4aaa,0x4aca,0x52ca,0x52ca,0x52ca,0x52ca,0x4aca,0x4aaa,0x52ca,0x52ca,0x4aaa,0x52ca,0x4aca,0x52ea,0x4aaa,0x52ca,0x428a,0x326a,0x3a8a,0x3a6a,0x4aaa,0x52ca,0x42aa,0x4aaa,0x52ca,0x3a8a,0x326a,0x3a8a,0x428a,0x4aaa,0x428a,0x4aca,0x3a6a,0x326a,0x52ca,0x426a,0x3a6a,0x52ea,0x52ca,0x52ca,0x52ca,0x52eb,0x52ea,0x52ca,0x52eb,0x530b,0x52ea,0x52ea,0x52ca,0x52ca,0x52eb,0x4aca,0x4aca,0x52ca,0x52ca,0x5aeb,0x530b,0xdf3b,0xefde,0x740e,0x3a68,0xa574,0xffff,0x9d33,0xceb9,0xef9d,0x6bad,0xe79d,0xffff,0xf7de,0xf7fe,0xc678,0x42a8,0xceda,0xffff,0xf7de,0xe75c,0x52ea,0xa594,0xf7de,0xffff,0xf7ff,0xe77c,0x8470,0x52ea,0x634c,0x634b,0x52ea,0xb5f6,0xf7fe,0xffff,0xf7ff,0xdf1b,0x73ee,0x52ca,0xc638,0xffff,0xffff,0xffff,0xd6da,0x5b0b,0x9d33,0xffff,0xefbd,0x7c0e,0x73ee,0xefbd,0xffff,0xa574,0xbe17,0xffff,0xf7fe,0xf7ff,0xb5b5,0x8470,0xffff,0xb5b6,0x6b8d,0xf7ff,0xb616,0xc678,0xffff,0xf7de,0xffff,0xa574,0xdf3b,0xffff,0xffff,0xd6ba,0x8450,0xf7de,0xffff,0xffff,0xe75c,0x7c0f,0x52ca,0x6b4c,0x52aa,0xad95,0xf7de,0xffff,0xef7d,0x7bee,0xe77d,0xe73c,0x5b0b,0xe75d,0xe77c,0x73ce,0xe73c,0xfffe,0xffff,0xa554,0xbe38,0xffff,0xf7de,0xffff,0xbe37,0xc699,0xffff,0xffff,0xef9d,0x8c91,0xef9e,0xffff,0xa554,0x52ea,0xdefb,0xffff,0xd6b9,0x8cd1,0xd6da,0xc658,0xdf3b,0xe75c,0x9cf3,0x5aca,0x5b0b,0x5aeb,0x5b0c,0x5aeb,0x632c,0x632c,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x5aeb,0x630b,0x326b,0xc509,0xd508,0x7b89,0xe588,0xc4e7,0x8bea,0xe589,0xe588,0xb488,0x8bca,0xf5e8,0xedc8,0xee08,0xf5e8,0xac49,0xee49,0xe5a8,0x8bca,0x5b0c,0x632b,0x634c,0x630b,0x5b2c,0x5b2c,0x5aeb,0x634c,0x632c,0x632c,0x632c,0x632c,0x634c,0x632c,0x632c,0x632c,0x634c,0x634c,0x632c,0x630b,0x630b,0x632c,0x5b0b,0x62eb,0x52cb,0x83eb,0xf5e8,0x8369,0xcd28,0xedc8,0x93c9,0xd569,0xeda9,0xe5a8,0x730a,0xe589,0xf5e8,0xede7,0xf5e8,0xccc8,0xbcea,0xfe28,0xccc9,0x5b0b,0x5b0c,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x634c,0x632c,0x630c,0x5b0c,0x632c,0x632c,0x5b0c,0x5aeb,0x5b0c,0x5b0c,0x632c,0x5b0c,0x630b,0x632c,0x5b0c,0x632c, +0x5b0b,0x5b0b,0x52ca,0x52eb,0x52ca,0x52ea,0x52ea,0x52ca,0x52ea,0x52ca,0x52ca,0x52eb,0x52eb,0x52ea,0x52ea,0x52ca,0x530b,0x9b2b,0xdb4b,0xd32a,0x62aa,0x9b0a,0xe34a,0xdb4a,0x82ca,0xb32a,0xa2a9,0xa32b,0xab2a,0x9b0a,0xb309,0xbb2a,0xdb6a,0x930a,0xb30a,0xe34b,0xbb2a,0x5aca,0x52ca,0x4aca,0x4aca,0x52ca,0x4aca,0x4aaa,0x4aaa,0x4a89,0x4aaa,0x4aaa,0x52ca,0x52ca,0x4aca,0x4aaa,0x4aaa,0x4aaa,0x4aca,0x52ca,0x4aa9,0x4aca,0x4aaa,0x428a,0xac69,0xd548,0xc4e7,0xb4a7,0x93e9,0x2a6a,0xac49,0x9c08,0x52ea,0xbd08,0xd528,0xbca8,0xb4a8,0x7b68,0xb4a8,0x93e9,0xcd28,0xcd08,0x7349,0xb4a8,0xd567,0x9c29,0x428a,0x52ca,0x4aca,0x52eb,0x52ca,0x52ca,0x52ea,0x530b,0x52eb,0x52ea,0x52ca,0x52ca,0x52ca,0x4aca,0x52ea,0x4aca,0x52ca,0x52ca,0x4289,0x9d33,0xf7ff,0xadb5,0x3226,0xd6fa,0xe79d,0x4ac9,0xd6fa,0xe77c,0x6bad,0xe79d,0xd71a,0x73ce,0xce99,0xffff,0x94d1,0xc699,0xefde,0x9d33,0x740e,0x7c0f,0xefdd,0xe77d,0x9d33,0xad95,0xf7de,0xdf1b,0x5b2b,0x5b2b,0x52ca,0x8cb1,0xf7fe,0xdf3b,0xa554,0xbe38,0xffff,0xc699,0x94f2,0xffff,0xd6da,0x9d13,0xceb9,0xffff,0xb5f7,0x94f2,0xf7de,0xfffe,0xa573,0x9d54,0xf7ff,0xffde,0xa574,0xb617,0xffff,0xa554,0xdf3b,0xef9d,0x94f2,0xffff,0xad95,0x636c,0xf7de,0xc637,0x5b2b,0xc678,0xf7de,0xa554,0x638c,0xdf5c,0xef7d,0xa554,0x8470,0x8490,0xf7ff,0xce79,0xadb6,0xffff,0xc637,0x4247,0x634c,0x4a89,0xdf5c,0xefbe,0xa554,0xd6fa,0x844f,0xadb6,0xffff,0xd6ba,0xffff,0xa533,0x9d13,0xffff,0xbe17,0xc658,0xbe17,0x6bce,0xc679,0xffff,0xc658,0x7c0f,0xceb9,0xf7de,0xb5d7,0x9d13,0x7c2f,0xef7d,0xffff,0xce99,0x7c4f,0xf7be,0xffff,0xd6da,0x7c2f,0xb5b5,0xad95,0xe77c,0xdf3b,0x8c91,0x52ca,0x5b2c,0x5b0b,0x5aeb,0x5b0b,0x5b2c,0x632c,0x52eb,0x5b0b,0x52cb,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x5aeb,0x5aeb,0x4aaa,0x83ea,0xe5a8,0xdd47,0xfe27,0xc4c8,0xc509,0xf5e7,0xe5a8,0xdd87,0xac89,0xcd09,0xedc8,0xdd48,0xdd88,0xac89,0xee29,0xd508,0x7b8a,0x5b0c,0x6b4d,0x5b0b,0x5b0c,0x632c,0x5b0b,0x632c,0x632c,0x5b0c,0x5b0c,0x5b0c,0x5b0c,0x630c,0x5b0c,0x5b0b,0x632c,0x6b6d,0x630c,0x630c,0x632c,0x630b,0x632c,0x630c,0x5aeb,0x630c,0x5b0b,0xddc9,0xede7,0xf628,0xf608,0xa3e9,0xf629,0xeda8,0xfe48,0xb469,0xdd48,0xd549,0xf647,0xccc8,0xcd28,0xc509,0xfe48,0xbca9,0x632c,0x630c,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x630c,0x5aeb,0x634d,0x634c,0x5b0c,0x5b0c,0x632c,0x630c,0x632c,0x5b0c,0x630c,0x632c,0x5b0c,0x632c, +0x5b2c,0x52eb,0x52eb,0x52aa,0x52ca,0x52ea,0x52ca,0x52ca,0x52eb,0x52ca,0x52ca,0x52aa,0x52ca,0x530b,0x52ea,0x52ca,0x3aca,0xc34b,0xeb2a,0xeb6a,0xd32a,0xeb6b,0xcb2a,0xdb6b,0xe309,0xcbac,0xe42d,0xe36a,0xeb8a,0xdb4a,0xcb2a,0xe36a,0xe329,0x8ae9,0xeb8b,0xdb2a,0xf38a,0xa30a,0x3acb,0x52ca,0x530b,0x52ca,0x4aca,0x4aca,0x4aaa,0x4aaa,0x4aca,0x4aaa,0x52ca,0x52ca,0x4aaa,0x4aaa,0x4a89,0x4aa9,0x4aaa,0x52ca,0x4aaa,0x4a89,0x4a89,0x4289,0x9c09,0xf626,0xb489,0xcd08,0xd547,0x42aa,0xe5a6,0x9be9,0x3a8a,0xc4e8,0xfe07,0x9c08,0xd547,0xedc6,0xd547,0xa448,0xeda6,0xe5a7,0xcd07,0xedc8,0xe5a7,0x8bc9,0x4aca,0x52ca,0x4aca,0x52ea,0x52ea,0x52ca,0x52eb,0x52eb,0x52eb,0x52eb,0x52eb,0x4aca,0x4aca,0x4aaa,0x52ca,0x52ea,0x52ca,0x52ca,0x4aca,0x638d,0xe79d,0xdf1b,0x7c4f,0xf7fe,0xbe58,0x21a4,0xd6fa,0xe77c,0x636c,0xe77c,0xd6da,0x3a25,0x7c0f,0xf7fe,0xb616,0xc678,0xf7fe,0xf7fe,0xdf1b,0x9d33,0xffff,0xa574,0x3206,0x3206,0xbe17,0xf7fe,0x7c2f,0x5b2b,0x4289,0xadb5,0xf7fe,0x8cb1,0x52ea,0x530b,0x7c0f,0x6bad,0xc698,0xefbd,0x638c,0x4268,0x5b2b,0xe77c,0xdf1b,0x9d33,0xf7de,0xf7de,0xd6da,0xceb9,0xf7de,0xffde,0xa574,0xb616,0xffff,0xb5f6,0xef7d,0xef7c,0x8cd2,0xffff,0xadb5,0x638c,0xf7de,0xc658,0x0961,0xad95,0xf7fe,0x7c0e,0x4aa9,0xdf3c,0xf7be,0xefbd,0xc678,0x8450,0xffff,0xbe17,0x9d13,0xffff,0xc638,0x4aa9,0x6b6d,0x4aca,0xbe17,0xffff,0xe73b,0x94f2,0x4288,0x6bae,0xe77d,0xffff,0xe73c,0x5b0b,0x7c0f,0xef9e,0xf7de,0xbe17,0x6b8d,0x4288,0x9d13,0xffff,0xa554,0x31c6,0xceb9,0xffff,0xef9d,0xdf1a,0x8470,0xef7d,0xffff,0xe77c,0xbe37,0xf7de,0xffff,0xdefa,0x6b6c,0x7bef,0x73ee,0x7c0f,0x7c0f,0x6b8d,0x632c,0x5aeb,0x5aeb,0x5b0b,0x630b,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x5acb,0x5aeb,0x52eb,0x52cb,0x5aca,0x5aeb,0x3a6b,0x93ea,0xd548,0xb489,0x5aca,0xacaa,0x9be9,0x7b8a,0xbceb,0xa44b,0x940a,0xa44a,0x9bea,0xac8a,0x8baa,0xc509,0xcd48,0x83ab,0x530c,0x6b4c,0x5aeb,0x5b2b,0x5b0b,0x5b0b,0x630c,0x632c,0x5b0b,0x5aeb,0x5aeb,0x632c,0x5aeb,0x5aeb,0x630c,0x630b,0x5b0b,0x5b0b,0x630c,0x630c,0x5aeb,0x5b0b,0x5aeb,0x52eb,0x5b0c,0x5aeb,0x736a,0xc549,0xcd48,0x8b8a,0x8bcb,0xb469,0x630a,0xb4aa,0xa429,0x9c29,0x93ea,0xa429,0x83aa,0xa44a,0x8baa,0xcd29,0xbcaa,0x5b0b,0x5b0b,0x630c,0x634c,0x5b0c,0x5aec,0x5aeb,0x5b0c,0x632c,0x5b0b,0x5b2c,0x632c,0x5b0c,0x632c,0x632c,0x630c,0x5b0c,0x5b0c,0x5aeb,0x5b0c,0x5b0b,0x5b0b, +0x52ea,0x52ca,0x52eb,0x52ca,0x52ca,0x52ea,0x52ca,0x52ca,0x52cb,0x52eb,0x52ea,0x52ca,0x52ca,0x52ca,0x52ea,0x52aa,0x3aaa,0xb32b,0xf38b,0xeb4a,0xd30a,0xeb4a,0x3a89,0x62ca,0xf34b,0xab2b,0xf42d,0xfb6a,0xfb6a,0xfb6a,0xa2e9,0xdb4b,0xeb4a,0x92e9,0xdb6a,0xe34a,0xe34b,0x92ea,0x4b0b,0x52ea,0x52eb,0x52ca,0x4aaa,0x4aa9,0x4a89,0x4aaa,0x4aaa,0x4aa9,0x4aa9,0x4aaa,0x4aca,0x4aaa,0x4aaa,0x4aa9,0x4aaa,0x4aaa,0x4aca,0x4aa9,0x4a89,0x52a9,0x4289,0xd547,0x7b69,0x7369,0xe5a7,0xbca8,0xd567,0x528a,0x3a8a,0x8389,0xdd66,0x21e9,0x93c9,0xfe27,0x93a9,0x9429,0xede7,0xedc7,0xbc88,0xdd68,0xede7,0x9c28,0x4aaa,0x52ea,0x52ea,0x4aca,0x52ea,0x52ca,0x52ca,0x4aaa,0x4aaa,0x52ca,0x52ca,0x4aca,0x52ca,0x4aaa,0x4aca,0x52ca,0x4aaa,0x52ca,0x52eb,0x4288,0xbe58,0xefde,0xd71a,0xefdd,0x8c90,0x3205,0xd6da,0xe77c,0x638c,0xe79c,0xd6b9,0x0120,0x94d2,0xf7ff,0xadb5,0xc678,0xf7de,0xc658,0xa574,0x8cd1,0xf7ff,0xbe17,0x4288,0x4ac8,0xce99,0xf7de,0x73ee,0x5b0b,0x4289,0xa595,0xf7ff,0x9d33,0x4246,0x636c,0xa554,0x8cd1,0xbe37,0xf7fe,0x7c2f,0x4247,0x73cd,0xef9d,0xdf1b,0x9d13,0xf7be,0xce99,0xefbe,0xf7dd,0xce99,0xf7de,0xa594,0xb5f6,0xfffe,0xf7fe,0xf7de,0xa554,0x8450,0xffff,0xad95,0x530a,0xf7de,0xc658,0x3a46,0xad95,0xf7fe,0x8c90,0x52ea,0xe73c,0xf7be,0xd6da,0xb5d6,0x8470,0xefbe,0xf7de,0xf7de,0xe73c,0x8430,0x5aeb,0x634c,0x5b2b,0x6bad,0xb5d6,0xef7d,0xf7fe,0x94d2,0x3a07,0xbe38,0xffff,0xb5b5,0x4a89,0x632c,0x94f2,0xd6fb,0xffff,0xce79,0x4aa9,0x9d34,0xffff,0xad74,0x4a68,0xce79,0xffff,0xdefb,0xce78,0x844f,0xef9d,0xdefb,0xef9d,0xffde,0xdf1b,0xe77c,0xdf1b,0x5aea,0x6b6d,0x6b8d,0x632c,0x632c,0x634c,0x630b,0x52cb,0x5b0b,0x52cb,0x5b0c,0x5aeb,0x5aeb,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5acb,0x52cb,0x52cb,0x530b,0x4aaa,0x732a,0x4a8b,0x2a4a,0x4aa9,0x6b0a,0x52ab,0x5aeb,0x530b,0x4acb,0x630b,0x6b2b,0x4aeb,0x42cc,0x630b,0x52cb,0x326b,0x52cb,0x630a,0x6b2b,0x630c,0x632b,0x630c,0x5b0b,0x5b0c,0x632c,0x632c,0x632c,0x630c,0x5b0b,0x632c,0x5b0c,0x5b0c,0x632c,0x5b0b,0x5b0b,0x5aeb,0x630b,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x52ca,0x5aeb,0x632b,0x52eb,0x62ea,0x5aca,0x428a,0x62eb,0x6b0a,0x734b,0x42ab,0x734a,0x630b,0x52cb,0x632a,0x7b8a,0x6b0b,0x6b4a,0x6b2a,0x5aea,0x630c,0x5b0b,0x5aeb,0x630c,0x632c,0x5aeb,0x5b0c,0x632c,0x5b0c,0x5b0c,0x632c,0x632c,0x632c,0x5aeb,0x5aeb,0x5b2c,0x632c,0x5b0c,0x5aeb,0x632c,0x5b0c,0x5aeb, +0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x52ea,0x52ca,0x52ca,0x52eb,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x4aaa,0x52ca,0x32ca,0xbb2b,0xeb4b,0x82ca,0x6aca,0xeb8b,0xdb4a,0xe36b,0xeb4a,0x6a89,0xf36b,0xdb4a,0xdb4b,0xfbaa,0x72ca,0xe38b,0xe34a,0x930b,0xdb6b,0xfb8b,0xe329,0x5aca,0x5b0b,0x52ea,0x530b,0x52ca,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4aca,0x4aaa,0x4aaa,0x4aca,0x4aca,0x4aaa,0x4aaa,0x4aaa,0x4aa9,0x4aa9,0x4aca,0x4aa9,0x4aa9,0x52aa,0xdd87,0x93e8,0x022a,0xd548,0xfe67,0xac48,0x426a,0x42aa,0x8bc9,0xe5c7,0x5ac9,0x6309,0xddc7,0x6308,0x9c0a,0xedc7,0x9c08,0x4a89,0xe5a7,0xeda7,0x8bc9,0x4acb,0x52ca,0x4aca,0x4aaa,0x52ea,0x4aca,0x52cb,0x4aca,0x4aca,0x4aca,0x4aaa,0x4aaa,0x52ca,0x4aaa,0x4aca,0x52eb,0x52eb,0x52ca,0x52eb,0x4aa9,0x8491,0xefdd,0xffff,0xd6fa,0x5b2b,0x4ac9,0xd6fa,0xe79d,0x6bcd,0xe77c,0xef7d,0xc658,0xef9d,0xefde,0x73ee,0xc698,0xf7fe,0xc637,0xa574,0x638c,0xdf3c,0xf7ff,0xceb9,0xd6d9,0xffff,0xce99,0x52ea,0x634c,0x530b,0x7c0f,0xefbd,0xf7de,0xc658,0xd6fa,0xffff,0xbe57,0x8450,0xf7fe,0xe77c,0xbe17,0xe73b,0xffff,0xad95,0x94f2,0xf7fe,0x9d34,0xefbe,0xf79d,0xa573,0xf7fe,0xadb5,0xb5f6,0xffff,0xa554,0x6bad,0x4268,0x7c2f,0xf7fe,0xdf1b,0xc638,0xffff,0xbdf6,0x31e4,0xad95,0xfffe,0x8c90,0x4aea,0xdf3c,0xf7be,0xadb5,0x94d1,0x8470,0xf7be,0xe75c,0xf7fe,0xce99,0x52a9,0x6b6c,0x5b0b,0x52ea,0xdf1b,0xceba,0xbdf7,0xffff,0xb5b5,0x1943,0xa555,0xffff,0x9d13,0x29c5,0xa554,0xef7d,0xad95,0xf7be,0xe75c,0x52a9,0x9d33,0xffff,0xad95,0x4a68,0xceba,0xffff,0xbdf7,0x9d13,0x7c2f,0xf7de,0xbe17,0xdefb,0xffff,0xb5f6,0xe75c,0xe73c,0x634c,0x632c,0x5aeb,0x5b0b,0x5b2c,0x632c,0x52eb,0x5aeb,0x5b0c,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x5aeb,0x5aeb,0x5acb,0x5aeb,0x5aeb,0x5aeb,0x5acb,0x5aca,0x4a8b,0xac8a,0xe5c7,0xcce8,0x8bc9,0xe5a8,0xcd08,0x8be9,0xd569,0x62ea,0x8bca,0xe5a8,0xd548,0x734b,0xc50a,0xedc8,0xe5a8,0x9bea,0xc529,0xf5e8,0xcd28,0x6b4c,0x630c,0x5b0b,0x632c,0x5b2c,0x632c,0x630b,0x5b0b,0x5b0b,0x630c,0x5b0c,0x5b0c,0x5b0c,0x5b0b,0x632c,0x630b,0x630b,0x630b,0x5b0b,0x5aeb,0x5aec,0x5b0b,0x5aeb,0x5aeb,0x52eb,0xa44a,0xee28,0xede7,0xabe9,0xbcc9,0xf628,0xa468,0xa449,0xee09,0xdd88,0x93c9,0xee09,0xdda7,0xa449,0xe5c8,0xf648,0xb4a9,0x52ab,0x630b,0x5b0c,0x5b0c,0x632c,0x630c,0x634c,0x632c,0x632c,0x632c,0x5b0c,0x630c,0x5b0b,0x5b0c,0x632c,0x5b2c,0x5b0b,0x632c,0x632c,0x632c,0x5b0c,0x5aec, +0x52ca,0x52ea,0x52aa,0x52ca,0x52eb,0x52ea,0x52ea,0x52eb,0x52eb,0x530b,0x52ea,0x52ca,0x52ca,0x4aca,0x4aaa,0x52ca,0x4aeb,0x932a,0xa30a,0x42ca,0x52ca,0x8b0a,0xd34b,0xc32a,0x82ca,0x42ea,0xab0a,0x92ea,0x8b0b,0xb32a,0x5b0b,0xab2a,0xd34b,0x92ea,0xa2ea,0x9aca,0xbb2a,0x72aa,0x52ca,0x52ea,0x52ea,0x4aca,0x52ca,0x4aaa,0x4aca,0x4aca,0x52ca,0x52ca,0x4aaa,0x4aaa,0x4aca,0x4aca,0x4aa9,0x4aa9,0x4aaa,0x4aaa,0x4aaa,0x4aca,0x4aa9,0x52aa,0x5aca,0xa468,0x7349,0x42aa,0x8bca,0xc508,0x7329,0x52aa,0x52a9,0x7349,0xaca8,0x52ca,0x5b0a,0xaca8,0x630a,0x7b89,0xa428,0x324a,0x4aaa,0xb489,0xd588,0x9c29,0x42aa,0x52ca,0x4aaa,0x52ca,0x52ca,0x4aca,0x4aca,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x4aaa,0x4aaa,0x52ea,0x4aca,0x530b,0x52ca,0x4aca,0x52eb,0x532a,0xbe78,0xef9d,0x9d33,0x530a,0x52ea,0xc658,0xdf1b,0x6b8d,0xd6da,0xef9d,0xefbd,0xdf3b,0x9d12,0x4267,0xbe37,0xef9d,0xefbe,0xdf5b,0x5b4b,0x7c2f,0xd6fa,0xf7de,0xf7de,0xceb9,0x73ce,0x5b2b,0x5b4b,0x634c,0x52ca,0x9513,0xdf5c,0xf7fe,0xf7de,0xc699,0x6bad,0x52ea,0xa574,0xefbd,0xf7fe,0xefbd,0xbe37,0x52ea,0x94f2,0xefbd,0x8470,0xd6da,0xd6da,0x7c2f,0xefbe,0xad74,0xadd6,0xf7de,0x7c0e,0x52c9,0x638c,0x5b2b,0xc658,0xf7fe,0xfffe,0xdefb,0x73ee,0x4aa9,0xa574,0xefbd,0x8470,0x530a,0xdf1b,0xf7de,0xffff,0xd6da,0x7c0f,0xf7be,0xb5f6,0xc678,0xf7fe,0x9d33,0x5b0b,0x636c,0x5b0b,0xb5f7,0xffff,0xfffe,0xe71b,0x7c0e,0x4a88,0xa554,0xffff,0xa513,0x4a68,0x7c30,0xe77d,0xffff,0xf7bd,0xad74,0x4aa9,0x9d33,0xffde,0xad75,0x4a88,0xc679,0xf7ff,0xffff,0xf7bd,0x8c90,0xef9d,0xb5d6,0xb5f7,0xf7de,0x8450,0xdf3c,0xdf1b,0x634c,0x5b0b,0x5b0b,0x5b2c,0x5b2c,0x5b0c,0x5b0c,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5b0c,0x5b0c,0x632c,0x5aeb,0x5b0c,0x52eb,0x5aeb,0x5aeb,0x52aa,0x5aea,0x426a,0xcd49,0xe5a7,0xa408,0x9409,0xf5e8,0xbca8,0x8bea,0xe5a8,0x6b2a,0x8c0b,0xede8,0xb4a8,0xac8a,0xedc8,0x9c0a,0xc4eb,0xb4a9,0x8bca,0xf5e8,0x93ea,0x632c,0x632c,0x5b0b,0x5b0c,0x5b2c,0x632c,0x630c,0x632c,0x5b0c,0x630c,0x5aeb,0x632c,0x632c,0x5b0b,0x632c,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x52eb,0x5aeb,0x5aeb,0x5b0b,0x42ab,0xac89,0xd508,0xcd09,0xe5a8,0xc509,0xf608,0x93a9,0xbce9,0xf608,0xb468,0x940a,0xf5e9,0xd548,0x7b6a,0xc4ea,0xe5a8,0x6b2a,0x632c,0x5b0b,0x5b0c,0x5b2c,0x5b0c,0x630c,0x5b0c,0x632c,0x5b0c,0x5b0c,0x5aeb,0x630c,0x632c,0x5b0c,0x632c,0x5b0c,0x5b0b,0x630b,0x632c,0x5b0b,0x5aeb,0x5aeb, +0x52eb,0x530b,0x5b0b,0x52ca,0x52eb,0x52eb,0x4aca,0x52ca,0x52eb,0x52eb,0x52ca,0x4aca,0x52eb,0x52ca,0x52ca,0x52ca,0x5aeb,0x5aeb,0x4aeb,0x62ea,0x5aea,0x4b0b,0x3acb,0x3aaa,0x52ea,0x5aca,0x4aea,0x52eb,0x52cb,0x42ca,0x5aeb,0x4b0b,0x3aca,0x4aaa,0x42aa,0x4aaa,0x3aa9,0x52aa,0x52aa,0x52ca,0x52ca,0x52ca,0x4aaa,0x4aaa,0x4aca,0x52ca,0x4aaa,0x4aaa,0x52ca,0x4aaa,0x52ca,0x4aa9,0x4aa9,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x52ca,0x4aa9,0x424a,0x52ca,0x5b0a,0x52cb,0x324a,0x52ea,0x52ea,0x52eb,0x4aca,0x428a,0x5aeb,0x52ea,0x428a,0x52ca,0x4aca,0x52eb,0x5b0a,0x52c9,0x428a,0x3a8a,0x52eb,0x5b0b,0x52ca,0x52ca,0x52ca,0x4aaa,0x4aca,0x4aca,0x52ca,0x52ca,0x52eb,0x52ca,0x52ea,0x52ea,0x4aca,0x52eb,0x52ca,0x52ca,0x4aca,0x4aca,0x52ea,0x5b2b,0x636c,0x63ad,0x5b4c,0x638d,0x636c,0x638c,0x6bcd,0x636b,0x6bac,0x6bcd,0x6bcd,0x5b2b,0x530a,0x636c,0x636b,0x6bcd,0x6bac,0x63ac,0x634b,0x530a,0x5b4b,0x7c4f,0x7c4f,0x530b,0x5b2b,0x636c,0x5b4b,0x636c,0x634c,0x52ea,0x636c,0x8490,0x8470,0x5b2b,0x636c,0x6b8d,0x5b0b,0x73ce,0x8cb1,0x7c2f,0x52ea,0x634c,0x6b8d,0x7c4f,0x638c,0x73ce,0x7c0e,0x636c,0x7c2f,0x6bad,0x6bce,0x8450,0x636c,0x634c,0x636c,0x5b4b,0x52ea,0x8470,0x8cb1,0x636c,0x5b2b,0x636c,0x6bad,0x844f,0x6b8c,0x634c,0x8450,0x8cb1,0x8470,0x7c2f,0x6b6c,0x8c91,0x73ee,0x6bad,0x94d2,0x8450,0x6b8d,0x6b8d,0x6bad,0x5b2b,0x94d2,0xa554,0x73cd,0x5b2b,0x636c,0x73ce,0x94b1,0x6bad,0x6b6c,0x632c,0x7c2f,0xa574,0x8c91,0x634c,0x6b8d,0x73ce,0x94d2,0x73ee,0x6b6c,0x842f,0x94f2,0x94d2,0x8c91,0x6b8d,0x94b1,0x7c0f,0x73ee,0x8c91,0x636c,0x8c91,0x8c71,0x6b8d,0x634c,0x5b2c,0x5b2c,0x5b2c,0x5b2c,0x632c,0x5b0b,0x5b2c,0x5b2c,0x52eb,0x5aeb,0x5b0c,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x52cb,0x52eb,0x5aeb,0x83aa,0xd568,0xdd48,0x93e9,0xedc8,0xc4e9,0x8bea,0xe5a8,0x6aea,0x83cb,0xee09,0xbcc8,0xb4c9,0xe588,0x428b,0x7b8b,0x93c9,0x734b,0xddc8,0x83ab,0x4aec,0x5b0b,0x630c,0x5b0c,0x5b2c,0x5b0b,0x632c,0x634d,0x5b0b,0x632c,0x630c,0x5b0c,0x632c,0x5b0b,0x630b,0x630b,0x630c,0x5aeb,0x5aeb,0x5aeb,0x52cb,0x5b0b,0x5aeb,0x630b,0x4aab,0xac8a,0xf628,0xede8,0xa3e9,0xc529,0xee08,0x9be8,0x8bca,0xd569,0xe569,0x9c29,0xe5a9,0xdd48,0x736a,0xac8b,0xe5a8,0x52cb,0x632c,0x630c,0x5b0c,0x5aeb,0x630c,0x630c,0x5aeb,0x5b0b,0x632c,0x5b0c,0x5b0b,0x5b0c,0x632c,0x632c,0x632c,0x632c,0x5aec,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5b0c, +0x52ca,0x52ea,0x530b,0x52eb,0x530b,0x52eb,0x52ca,0x52ea,0x52eb,0x52ea,0x4aaa,0x52ca,0x52eb,0x52eb,0x52ca,0x52ca,0x52ca,0x52ca,0x5aca,0x52cb,0x52ca,0x52ca,0x52ca,0x5aea,0x5aca,0x52ea,0x5aeb,0x52ea,0x52ea,0x52ea,0x52ea,0x5b0a,0x52aa,0x52ca,0x52aa,0x52a9,0x52a9,0x4aaa,0x52ab,0x52ca,0x52ca,0x52ca,0x4aca,0x4aca,0x52ca,0x4aca,0x4a89,0x4aca,0x52eb,0x52eb,0x52ea,0x4aa9,0x4aaa,0x52ca,0x52ca,0x52ca,0x4aaa,0x4aca,0x4a89,0x4aaa,0x4aa9,0x4aca,0x4aa9,0x4aaa,0x52ca,0x52ca,0x52a9,0x52aa,0x4aca,0x52aa,0x52ea,0x52ea,0x4aaa,0x4aca,0x4aa9,0x52ca,0x52ea,0x4aca,0x52ca,0x52ca,0x530b,0x52ea,0x4aaa,0x4aca,0x4aca,0x4aaa,0x4aaa,0x52ca,0x52ca,0x52ea,0x4aaa,0x52ea,0x52eb,0x52ea,0x52ea,0x52ca,0x4aca,0x4aca,0x52eb,0x52ea,0x52ea,0x52ea,0x52eb,0x636c,0x638c,0x636c,0x638d,0x636d,0x636c,0x636c,0x636d,0x634c,0x5b4c,0x634c,0x636c,0x6bad,0x636d,0x634c,0x5b2b,0x530b,0x5b0b,0x5b4c,0x638c,0x636c,0x5b2b,0x530b,0x636c,0x636c,0x634c,0x636c,0x636c,0x636c,0x636c,0x636c,0x5b2c,0x5b2b,0x636c,0x638d,0x636c,0x6b8d,0x5b4c,0x530b,0x5b2b,0x636c,0x6b6d,0x634c,0x5b2b,0x636c,0x5b4c,0x632c,0x634c,0x5b0b,0x634c,0x632c,0x5b0b,0x634c,0x634c,0x634c,0x634c,0x634c,0x530a,0x52ea,0x5b4c,0x6b8d,0x636c,0x636c,0x634c,0x6b8d,0x636d,0x634c,0x5b2b,0x5b2b,0x634c,0x634c,0x5b4c,0x636d,0x6b8d,0x634c,0x636c,0x73ce,0x73ce,0x6b8d,0x6b8d,0x5b0b,0x52ca,0x636d,0x6b8d,0x6b8d,0x6b4c,0x5b2b,0x636c,0x6bad,0x6b8d,0x6b8d,0x5b2c,0x636c,0x73ce,0x6b8d,0x6b8d,0x634c,0x6b6d,0x6b8d,0x738d,0x632c,0x5b2c,0x636d,0x73ae,0x6b6d,0x6b8d,0x6b8d,0x634c,0x6b8d,0x634c,0x634c,0x636d,0x634c,0x5b2c,0x5b2c,0x634c,0x5b0c,0x632c,0x630b,0x630c,0x630c,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x52cb,0x5aeb,0x5b0c,0x5b0b,0x5acb,0x5acb,0x52ec,0xc529,0xe5c8,0xe588,0xa429,0xee08,0xcd08,0x93ca,0xedc8,0xdd67,0xac69,0xee08,0xcd28,0x83ca,0xddca,0xe5c8,0xf628,0xc4c9,0x634b,0xddc9,0x8baa,0x530b,0x630b,0x632d,0x634c,0x632c,0x5b2c,0x5aeb,0x5b0c,0x5b0b,0x5b0b,0x632c,0x5b0c,0x632c,0x632c,0x630b,0x630b,0x630c,0x5b0c,0x5b0c,0x630c,0x5aec,0x5aeb,0x5aeb,0x632b,0x42ab,0xac4a,0xe588,0xe5c7,0x9c09,0xc52a,0xf648,0xa448,0xbca9,0xe5c8,0xe5e8,0xac49,0xee29,0xddc8,0x838a,0xa48b,0xdd89,0x5aec,0x632b,0x632c,0x5aeb,0x5b0c,0x630c,0x630c,0x634c,0x632c,0x5b0c,0x5b0c,0x5b0b,0x632c,0x632c,0x632c,0x5b0b,0x630c,0x632c,0x632c,0x5b0c,0x5aeb,0x5b0c,0x5b0c, +0x52eb,0x52cb,0x52eb,0x52eb,0x52ca,0x52cb,0x5aeb,0x52eb,0x52eb,0x52eb,0x52aa,0x4aaa,0x52ea,0x52ea,0x52ca,0x52ca,0x52eb,0x52ea,0x52ca,0x52ea,0x52ca,0x4aaa,0x52aa,0x5aeb,0x52eb,0x530b,0x52ea,0x530b,0x530b,0x52eb,0x52eb,0x52ca,0x52ca,0x52ca,0x4aaa,0x4aaa,0x4aaa,0x4a8a,0x4aa9,0x4aca,0x52ca,0x530b,0x530b,0x4aca,0x4aca,0x4aaa,0x4aa9,0x4aaa,0x4aca,0x52eb,0x52ca,0x52ea,0x4aca,0x4aaa,0x52ca,0x4aaa,0x4aca,0x4aaa,0x4a89,0x4a89,0x4a69,0x42a9,0x4a8a,0x4a8a,0x4aca,0x4aaa,0x4aa9,0x52eb,0x4aca,0x52ea,0x530b,0x4aca,0x52ea,0x4aaa,0x4aaa,0x4aaa,0x52ca,0x52ca,0x52eb,0x4aea,0x52aa,0x4aaa,0x4aca,0x52ca,0x4aaa,0x52aa,0x52aa,0x52ca,0x4aaa,0x52ca,0x4aca,0x52ca,0x52ea,0x4aca,0x52ea,0x4aca,0x52ea,0x52ea,0x52ea,0x52eb,0x530b,0x530b,0x5b2c,0x52eb,0x52eb,0x4aca,0x4269,0x4248,0x3a07,0x3a08,0x3a28,0x4248,0x4a69,0x4a89,0x4248,0x4268,0x4a89,0x4248,0x4a89,0x4248,0x3a07,0x4248,0x4289,0x4aa9,0x4a69,0x4248,0x4269,0x4269,0x4269,0x4a89,0x4a89,0x4249,0x4249,0x4249,0x4a69,0x4a89,0x4a69,0x4248,0x4248,0x4a89,0x4aaa,0x4a89,0x52ca,0x52ca,0x4249,0x4269,0x530b,0x4a89,0x52ea,0x52ca,0x4a89,0x52ca,0x4aaa,0x4a69,0x4a89,0x4aaa,0x4aa9,0x52aa,0x52aa,0x4248,0x4a69,0x4a8a,0x4a89,0x4aaa,0x4269,0x4aaa,0x52eb,0x4aaa,0x4a89,0x52ca,0x52aa,0x4aca,0x52cb,0x52aa,0x52ea,0x52ca,0x52aa,0x52ca,0x52ca,0x52ca,0x4aca,0x4aaa,0x52ca,0x52eb,0x52ca,0x4aaa,0x4a8a,0x4a8a,0x4a8a,0x52aa,0x52ca,0x52ca,0x52ca,0x52aa,0x52eb,0x52eb,0x52eb,0x52cb,0x52ca,0x52eb,0x52eb,0x52aa,0x5aeb,0x5aeb,0x52eb,0x52cb,0x52eb,0x5aeb,0x52eb,0x52ca,0x52aa,0x52aa,0x530b,0x634c,0x5b2c,0x634c,0x632c,0x632c,0x634c,0x632c,0x5b0c,0x5b0b,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x52cb,0x52cb,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x5aec,0x738b,0xb4c9,0x83aa,0x632b,0xa46a,0xac4a,0x734a,0x9c2a,0xb4aa,0x8bcb,0x9c4b,0xacaa,0x736c,0x6b4b,0xacaa,0xa44a,0x5b0c,0x6b6c,0x93ea,0x6b4b,0x632c,0x632b,0x5b0b,0x632c,0x632c,0x632c,0x5b0c,0x630c,0x5b0c,0x5b0c,0x5b2c,0x5b2c,0x632c,0x632c,0x5b0b,0x5b0b,0x5b0b,0x5b0c,0x632c,0x5b0b,0x5b0b,0x5aec,0x5aeb,0x5b0b,0x5b0c,0x7bab,0x7b8a,0x8bcb,0x8c09,0x836b,0xb4aa,0x93eb,0x6b6b,0xb4aa,0x93ea,0x6b2c,0xa44b,0xb4ca,0x7b8b,0x7b8b,0x8bcb,0x632c,0x632c,0x630c,0x5aeb,0x5aeb,0x5b0c,0x5b0b,0x632c,0x5b2c,0x5b0c,0x630c,0x630c,0x632c,0x632c,0x5b0c,0x5b0b,0x632c,0x630c,0x5b0c,0x632c,0x632c,0x5aeb,0x5b0c, +0x52eb,0x52eb,0x52eb,0x52eb,0x52eb,0x52cb,0x52eb,0x52eb,0x52eb,0x52eb,0x52aa,0x52ca,0x4aca,0x4aca,0x52ca,0x52ca,0x52ca,0x52ea,0x52eb,0x52eb,0x530b,0x52ca,0x52ca,0x52ca,0x52ea,0x4aaa,0x52ca,0x52ca,0x52ca,0x5b2b,0x52eb,0x52eb,0x52eb,0x530b,0x52ea,0x52aa,0x52aa,0x4aaa,0x52ca,0x4aca,0x52ca,0x4aca,0x4aca,0x52ea,0x52ca,0x52eb,0x52ea,0x4aaa,0x4aca,0x4aca,0x52ca,0x4aca,0x52ca,0x4aaa,0x4aaa,0x4aaa,0x4aa9,0x4a89,0x4289,0x4269,0x4aa9,0x4aa9,0x4a89,0x4a89,0x4aaa,0x52eb,0x4aea,0x530a,0x4aca,0x4aaa,0x52ca,0x4a89,0x52ea,0x5b0b,0x52eb,0x4aca,0x52ca,0x5b0b,0x530b,0x4aca,0x4aca,0x52ea,0x52ca,0x52aa,0x4aaa,0x4aaa,0x4aaa,0x52ca,0x4aaa,0x4aca,0x52ea,0x4aca,0x52ca,0x52ea,0x52ea,0x52eb,0x52eb,0x52eb,0x52eb,0x5b2b,0x5b2b,0x4aca,0x4248,0x39e7,0x2124,0x18e3,0x0881,0x10a2,0x10a2,0x0041,0x0041,0x0882,0x1082,0x18e3,0x0881,0x0861,0x1081,0x10a2,0x18c3,0x10c2,0x10a2,0x18e3,0x18c3,0x18e3,0x18c2,0x1082,0x10a2,0x18e3,0x2124,0x18e3,0x18e3,0x18c3,0x18c3,0x10a2,0x10c2,0x18e3,0x18e3,0x10c3,0x18e3,0x18e3,0x1903,0x18c3,0x2124,0x2144,0x1903,0x1904,0x2145,0x18e3,0x2104,0x2125,0x2145,0x2124,0x2145,0x2124,0x2124,0x2144,0x2144,0x2145,0x2945,0x2104,0x2124,0x2124,0x1904,0x2104,0x18e3,0x2124,0x2145,0x2124,0x2124,0x2965,0x2945,0x2145,0x2145,0x2144,0x2145,0x2124,0x2945,0x2945,0x2145,0x2124,0x2145,0x2125,0x2145,0x2145,0x2965,0x2966,0x2965,0x2945,0x2965,0x2965,0x2945,0x2125,0x2125,0x2965,0x2965,0x2966,0x3186,0x31a7,0x2966,0x31a6,0x29a6,0x2986,0x2986,0x2986,0x2986,0x2986,0x2986,0x3186,0x2965,0x29a6,0x2124,0x2145,0x31e7,0x4269,0x4a8a,0x5b2c,0x6b6d,0x634c,0x634c,0x632c,0x5b2c,0x630c,0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x5b0c,0x5b0b,0x5aeb,0x52cb,0x52eb,0x52cb,0x5acb,0x52ea,0x52eb,0x5b0b,0x5aeb,0x428b,0x5aec,0x5aeb,0x52cc,0x4aab,0x632c,0x5b2d,0x4aec,0x52eb,0x4a8b,0x4aab,0x6b6d,0x634d,0x530d,0x4acc,0x632c,0x632c,0x52cb,0x632c,0x632c,0x630c,0x630c,0x632c,0x5b0c,0x5b0c,0x632c,0x632c,0x632c,0x630c,0x630c,0x632c,0x5b0c,0x5b0c,0x630b,0x630c,0x5b0c,0x630c,0x5b0c,0x632c,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x52cb,0x52cb,0x52cb,0x5aeb,0x42ac,0x52ec,0x52eb,0x42ac,0x52eb,0x5aeb,0x52ec,0x4acc,0x5b0b,0x630c,0x5b0c,0x632b,0x630c,0x632c,0x630c,0x630c,0x632c,0x5b0c,0x5b0b,0x5b2c,0x5b0c,0x632c,0x632c,0x632c,0x5b0b,0x5b0b,0x5b0b,0x630c,0x5aeb,0x5b0c,0x632c,0x632c,0x5b0c,0x630c, +0x52eb,0x52cb,0x52cb,0x52cb,0x52ca,0x52eb,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x52aa,0x52ca,0x52aa,0x52ca,0x4aca,0x52ca,0x52ca,0x52eb,0x52eb,0x52eb,0x4a89,0x4aa9,0x4a89,0x52ca,0x52a9,0x4a89,0x4a89,0x4228,0x52a9,0x5b0b,0x52eb,0x52eb,0x52eb,0x4a89,0x52ca,0x52ea,0x52eb,0x4aca,0x4aca,0x4aaa,0x4aca,0x52eb,0x52ca,0x4aaa,0x4aaa,0x52ca,0x52ca,0x4aca,0x4aaa,0x4aaa,0x4aaa,0x4aa9,0x4aaa,0x4a89,0x4289,0x4289,0x4289,0x4a89,0x4aaa,0x4aa9,0x4aaa,0x52ca,0x52ea,0x636c,0x5b0b,0x4248,0x31e7,0x31e7,0x2986,0x31e7,0x4a89,0x52ca,0x5b2b,0x5b0b,0x5b0b,0x52eb,0x4aaa,0x4aca,0x52ca,0x4aaa,0x52ca,0x4aca,0x4aca,0x52ca,0x4aaa,0x52ca,0x4aaa,0x4aaa,0x4aca,0x52ea,0x4aca,0x52ea,0x52ea,0x52eb,0x530b,0x530b,0x5b6c,0x4aaa,0x39e7,0x2965,0x10e3,0x1903,0x2985,0x31c7,0x31a6,0x2985,0x31a6,0x31a6,0x2985,0x31a6,0x2124,0x2944,0x2144,0x2144,0x2124,0x2124,0x2124,0x2103,0x18e3,0x2103,0x18e3,0x1904,0x2104,0x2124,0x18e3,0x18e3,0x18e3,0x18e3,0x2103,0x2104,0x2104,0x2104,0x2104,0x2124,0x2103,0x2104,0x2144,0x2144,0x2144,0x2124,0x2124,0x2124,0x2124,0x2945,0x2144,0x2965,0x2965,0x2944,0x2965,0x2144,0x2985,0x2965,0x2945,0x2945,0x2145,0x2144,0x2965,0x2965,0x2985,0x31a6,0x3185,0x31c6,0x29a6,0x31a6,0x31c6,0x31c7,0x39c7,0x39c7,0x31c7,0x31c7,0x39e7,0x39e7,0x39e7,0x39e7,0x31c6,0x31a6,0x4248,0x39e7,0x39e7,0x4207,0x4a48,0x39e7,0x39c6,0x31c6,0x39e7,0x3a08,0x3a08,0x3a07,0x3a07,0x4a69,0x5acb,0x4228,0x4228,0x4228,0x4228,0x4a89,0x4a69,0x4a68,0x4a69,0x4aaa,0x52aa,0x52a9,0x52aa,0x52aa,0x52aa,0x4a89,0x52aa,0x52ca,0x39e7,0x1904,0x2124,0x39e7,0x52aa,0x5b0c,0x6bae,0x634c,0x632c,0x634c,0x632c,0x630c,0x5b0c,0x5b0c,0x5b0c,0x5aeb,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x5acb,0x5aeb,0x5aeb,0x5acb,0x5aeb,0x5b0b,0x5aca,0x52ca,0x52aa,0x630b,0x6b4c,0x630b,0x4a69,0x4207,0x39e7,0x31c6,0x5289,0x52aa,0x4248,0x5aeb,0x634c,0x632c,0x5b0b,0x5b0c,0x5b2c,0x5b0c,0x5aeb,0x5b2c,0x634c,0x5b0c,0x632c,0x5b0b,0x5b0b,0x5b0c,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x5b0c,0x5aeb,0x632c,0x5b0c,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5acb,0x5acb,0x5aca,0x5b0b,0x5aeb,0x5aca,0x4a69,0x31a6,0x31a6,0x39c6,0x3a07,0x3a07,0x4a89,0x52ca,0x5aeb,0x6b4d,0x632c,0x5b0c,0x632c,0x5b0b,0x630c,0x5aeb,0x5b0b,0x632c,0x632c,0x5b0c,0x5aeb,0x632c,0x5b0b,0x5b0b,0x632c,0x630b,0x630c,0x5b0b,0x5b0b,0x5aeb,0x634c,0x5b0b,0x5b0c,0x5b0c, +0x52ca,0x52eb,0x52eb,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x52eb,0x52aa,0x52ca,0x52aa,0x52aa,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x4aaa,0x52eb,0x5b0b,0x4aa9,0x52aa,0x4a69,0x4228,0x4aaa,0x3a08,0x4a69,0x4249,0x39e7,0x31a6,0x39e6,0x4a89,0x5b0b,0x530a,0x52ea,0x52aa,0x52ca,0x4aca,0x52ea,0x52ca,0x52ca,0x52ca,0x52ca,0x52ea,0x4aaa,0x52ca,0x52aa,0x52aa,0x4aaa,0x4aaa,0x4aaa,0x52ca,0x4aaa,0x4a89,0x4a89,0x4aa9,0x4aaa,0x4aa9,0x4aa9,0x4aaa,0x4aaa,0x4aa9,0x4aca,0x52eb,0x52ea,0x5b0b,0x52ea,0x4269,0x31c7,0x31a6,0x31a6,0x2986,0x2985,0x4268,0x530a,0x5b4c,0x5b0b,0x530b,0x4aca,0x52ea,0x52ca,0x52ca,0x52ca,0x4aca,0x4aca,0x4aca,0x4aca,0x4aca,0x4aca,0x4aaa,0x52ca,0x52ea,0x52ca,0x52ea,0x52ea,0x530b,0x532b,0x5b4c,0x638d,0x3a08,0x2124,0x2965,0x4a69,0x4a69,0x31c6,0x31a6,0x2965,0x2124,0x2965,0x2965,0x2945,0x2965,0x1903,0x1903,0x2104,0x1903,0x18e3,0x18c3,0x18e3,0x18c2,0x10c2,0x10c2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x18c2,0x18c3,0x18c3,0x18e3,0x18e3,0x18c3,0x18c3,0x18c3,0x18e3,0x18c3,0x18e3,0x2104,0x2104,0x2103,0x1903,0x1904,0x1903,0x18e3,0x2104,0x2104,0x2124,0x2124,0x2945,0x3186,0x2124,0x2965,0x2965,0x2965,0x2145,0x2145,0x2944,0x2965,0x2965,0x3186,0x31c6,0x2985,0x31e7,0x29a6,0x29a6,0x31e7,0x31c6,0x31a6,0x31a6,0x31a6,0x31a6,0x31c6,0x31a6,0x31c6,0x31c6,0x2985,0x2965,0x4248,0x39e7,0x39e7,0x4208,0x4a69,0x3a07,0x31c6,0x31a6,0x39e7,0x3a07,0x3a07,0x3a07,0x4228,0x4208,0x4a69,0x4228,0x4228,0x4248,0x4228,0x4a89,0x4a69,0x4a69,0x4aaa,0x4aaa,0x4aaa,0x52aa,0x52ca,0x4a89,0x52ca,0x52ca,0x52eb,0x5b0b,0x52ca,0x52aa,0x4228,0x2144,0x4a49,0x3a08,0x52ca,0x638d,0x636c,0x634c,0x634c,0x632c,0x632c,0x632c,0x5b0c,0x5b0b,0x632c,0x5b0b,0x5aeb,0x52eb,0x5aeb,0x5aeb,0x5b0c,0x5b0b,0x5aeb,0x52cb,0x52aa,0x52cb,0x5aeb,0x5b0b,0x4a49,0x31a6,0x31a6,0x2986,0x39c7,0x2985,0x39c7,0x31a6,0x31c6,0x2985,0x4248,0x632c,0x634c,0x5b0c,0x5b2c,0x5b2c,0x5b2c,0x5b2c,0x5b2c,0x5b0c,0x5b2c,0x5b0c,0x632c,0x5b0c,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x5b0c,0x5b0c,0x5b0b,0x5b0c,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x52cb,0x52cb,0x5acb,0x5aeb,0x4228,0x2965,0x2965,0x2945,0x2104,0x2104,0x2986,0x4228,0x4a8a,0x4249,0x3a08,0x52aa,0x634c,0x5b0c,0x632c,0x5b0c,0x5b0b,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x632c,0x5b0b,0x6b4c,0x632c,0x630c,0x5aeb,0x632c,0x5b0b,0x5aeb,0x632c,0x630c,0x5b0b,0x630c, +0x52ea,0x52ca,0x52ca,0x52ea,0x52eb,0x52ca,0x52aa,0x52ca,0x52ca,0x52aa,0x4aaa,0x4aca,0x52aa,0x52aa,0x4aca,0x52ca,0x4aaa,0x4aca,0x52ca,0x52ca,0x52ca,0x52ca,0x4a69,0x4228,0x2986,0x29a6,0x31c7,0x31c7,0x3a28,0x4269,0x3a07,0x0861,0x4228,0x632b,0x5b4b,0x5b0b,0x52ca,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x52ca,0x4aaa,0x52ca,0x52ca,0x52ca,0x52ea,0x4aca,0x52c9,0x52ca,0x52ca,0x52ca,0x52aa,0x52ca,0x4aaa,0x4aa9,0x4a89,0x4aaa,0x4aaa,0x4a89,0x4aa9,0x4aaa,0x4aca,0x530b,0x4289,0x4a89,0x4268,0x3a07,0x2965,0x2144,0x2124,0x2124,0x2144,0x2124,0x39e7,0x4aa9,0x5b2b,0x634c,0x530b,0x5b0b,0x52ea,0x52ea,0x52ca,0x52ca,0x52ca,0x4aca,0x52ea,0x4aca,0x4aaa,0x4aaa,0x4aaa,0x52eb,0x52eb,0x52eb,0x52eb,0x52eb,0x5b2c,0x5b2c,0x5b2c,0x4249,0x2124,0x31e7,0x52ca,0x31a6,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0x4228,0x5289,0x31a6,0x52ca,0x3a28,0x5b0b,0x6b8d,0x636c,0x634c,0x636c,0x632c,0x632c,0x632c,0x632c,0x632c,0x5b2b,0x5b0b,0x5aeb,0x5aeb,0x5acb,0x5aeb,0x5aeb,0x52cb,0x52cb,0x52ca,0x5b0b,0x632c,0x39e7,0x2104,0x2945,0x2124,0x2965,0x31c6,0x4248,0x39e7,0x39e7,0x39c7,0x4228,0x39e7,0x39e7,0x5aeb,0x632c,0x634c,0x5b0c,0x5b2c,0x5b0c,0x5b0c,0x5b0c,0x5b2c,0x5b2c,0x632c,0x630c,0x632c,0x632c,0x630b,0x632c,0x634c,0x5b0b,0x630c,0x632c,0x632c,0x5aeb,0x5aeb,0x5aeb,0x52cb,0x5acb,0x5aeb,0x52cb,0x52ca,0x5b0b,0x39e7,0x2965,0x2965,0x2103,0x2124,0x3185,0x39c7,0x4228,0x3a08,0x39e8,0x4229,0x3a08,0x39e7,0x4a8a,0x632c,0x634c,0x630c,0x5acb,0x630c,0x5aeb,0x5aeb,0x5acb,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x6b4c,0x630b,0x5b0b,0x5aeb,0x632c,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5b0c,0x630c, +0x52ca,0x52ca,0x52ea,0x52ca,0x52ca,0x52ca,0x52aa,0x52aa,0x5acb,0x52eb,0x5aca,0x6aaa,0x4aaa,0x52ca,0x62ca,0x52aa,0x5aca,0x62ca,0x5aeb,0x52aa,0x5b0a,0x52a9,0x39e7,0x2965,0x2124,0x2145,0x2945,0x2965,0x2965,0x3a07,0x6b8d,0x530b,0x10a2,0x4248,0x5b0a,0x5b0a,0x52ca,0x52ca,0x4aa9,0x52ca,0x5aea,0x428a,0x5ac9,0x5b0b,0x5b2c,0x52ca,0x52ea,0x630a,0x428a,0x52ea,0x52a9,0x52a9,0x5aca,0x42aa,0x5ac9,0x4a89,0x428a,0x52ca,0x5aca,0x52a9,0x4aaa,0x5b0b,0x52ea,0x52ca,0x3a27,0x4a89,0x2945,0x18c2,0x2944,0x2965,0x31a6,0x31c6,0x31a6,0x2985,0x18e3,0x39e7,0x4a69,0x4268,0x530b,0x530b,0x52ea,0x4aca,0x4aaa,0x4aca,0x4aca,0x4aca,0x52ca,0x52ca,0x4aaa,0x4a89,0x4aa9,0x52ca,0x52eb,0x52ca,0x52eb,0x52eb,0x5b4c,0x5b4c,0x4228,0x2144,0x4a89,0x632c,0x18e3,0x0000,0x0020,0x0861,0x0841,0x0841,0x0841,0x0861,0x0861,0x0841,0x0040,0x0020,0x0841,0x0841,0x0020,0x0020,0x0020,0x0841,0x0020,0x0020,0x0821,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0021,0x0841,0x0841,0x0841,0x0020,0x0841,0x0020,0x0821,0x0020,0x0020,0x0020,0x0841,0x0840,0x0020,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0861,0x0841,0x0841,0x0841,0x0861,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0861,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0861,0x0841,0x0841,0x0841,0x0841,0x0861,0x0841,0x0841,0x0841,0x0841,0x0861,0x0861,0x0861,0x0861,0x1082,0x0881,0x1082,0x10a2,0x10a2,0x18e3,0x2124,0x18e3,0x10a2,0x0861,0x0000,0x0000,0x2945,0x4248,0x4a89,0x528a,0x4228,0x6b8d,0x6bad,0x634c,0x634d,0x632c,0x632c,0x634c,0x632c,0x630c,0x5aeb,0x5b0c,0x5b0c,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x52cb,0x52cb,0x5aeb,0x632c,0x3a07,0x2944,0x2104,0x2104,0x4208,0x4248,0x4208,0x4228,0x31c7,0x31a6,0x39c7,0x4228,0x4228,0x39e7,0x4a69,0x5b2c,0x5b2b,0x5b0b,0x5aec,0x630c,0x632c,0x632c,0x634c,0x5b0b,0x632c,0x632c,0x634d,0x632c,0x5b2c,0x5b0b,0x632c,0x630b,0x5b0c,0x5aeb,0x630c,0x630c,0x5b0b,0x5aeb,0x5acb,0x5acb,0x5acb,0x52ca,0x630b,0x4a49,0x2103,0x2965,0x18e3,0x2104,0x31a6,0x39c7,0x39e7,0x4208,0x4249,0x4229,0x31a7,0x31c7,0x31a7,0x31a6,0x52cb,0x634d,0x5b0b,0x5b0b,0x5b0b,0x5b0c,0x5aeb,0x52ca,0x630c,0x632c,0x630b,0x632c,0x632c,0x5aeb,0x5b0b,0x632c,0x632c,0x632c,0x5b0b,0x632c,0x5b0c,0x5b0c,0x5b0b, +0x530b,0x530b,0x52eb,0x52ea,0x52cb,0x4aaa,0x52ca,0x52ca,0x4aeb,0x82ea,0xe36b,0xf36b,0xcb2a,0x62aa,0xdb6b,0xa2c9,0x9aeb,0xcb2a,0x52ea,0x5aea,0x4a89,0x31c6,0x2144,0x2985,0x2944,0x2144,0x2124,0x2124,0x31c6,0x2145,0x1924,0x52ca,0x39e7,0x18e3,0x4a89,0x4248,0x52eb,0x4aca,0x4aaa,0x5aeb,0x42aa,0xac88,0xe5c7,0xe5a8,0x93ea,0x7329,0xdd68,0xe5c7,0xbcc8,0x52a9,0xbcc7,0x7b69,0x3a6a,0xac68,0xe5a7,0xdd87,0x8b88,0x8bc9,0xe5c7,0xddc7,0x8be9,0x52cb,0x5aea,0x31c7,0x4a89,0x2144,0x2104,0x31a6,0x39e7,0x2965,0x31a6,0x31e6,0x4207,0x2985,0x31a6,0x29a6,0x3a28,0x3a28,0x52ca,0x530b,0x4aca,0x4aaa,0x4aaa,0x4aaa,0x4aa9,0x4aaa,0x52ca,0x4aca,0x4aca,0x4aca,0x4aaa,0x52eb,0x52ca,0x52ca,0x52eb,0x52eb,0x5b2c,0x52eb,0x2945,0x31a6,0x634c,0x3185,0x0000,0x1082,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0020,0x0000,0x0000,0x0020,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0841,0x0841,0x0841,0x0020,0x0000,0x0861,0x2124,0x10a2,0x0020,0x0841,0x0040,0x1082,0x0000,0x31a6,0x3a08,0x2986,0x39e7,0x5b2c,0x73ce,0x6b6d,0x634c,0x634d,0x634c,0x5b2c,0x634c,0x632c,0x632c,0x634c,0x632c,0x5b2c,0x632c,0x5acb,0x5acb,0x52cb,0x52cb,0x5b0c,0x528a,0x2944,0x2965,0x18c3,0x39e7,0x31a6,0x2124,0x2124,0x2124,0x2965,0x3185,0x2965,0x31a6,0x31c6,0x39e7,0x4a69,0x52aa,0x634c,0x5b4c,0x632c,0x5b2c,0x5b0c,0x632c,0x5b0c,0x630c,0x630b,0x5b0c,0x5b0c,0x5b0c,0x5aeb,0x5b0b,0x632c,0x630b,0x5b0b,0x5b0b,0x630c,0x5b0b,0x52cb,0x5aeb,0x5aeb,0x52ca,0x5acb,0x5aeb,0x52aa,0x3186,0x2965,0x18c2,0x18c3,0x18e3,0x18c3,0x1904,0x2945,0x2965,0x31a6,0x39e7,0x3a08,0x31c7,0x31a7,0x31a6,0x3a08,0x5b2c,0x632c,0x630c,0x630c,0x632c,0x5b0b,0x632c,0x634b,0x5b0b,0x5b0b,0x5aeb,0x5b2c,0x5b0b,0x630b,0x5b2b,0x632c,0x630c,0x5b0b,0x630b,0x5b0b,0x5b0b,0x5aeb, +0x52ea,0x52eb,0x52eb,0x52ca,0x4aca,0x4aaa,0x4aca,0x52ca,0x42cb,0xdb4b,0xdb2a,0x92ea,0xf36b,0xbaea,0xeb6b,0xf38a,0xcb2a,0xdb4a,0x5aeb,0x5b0a,0x3a07,0x2986,0x2965,0x31a6,0x2965,0x2985,0x2965,0x2965,0x31a6,0x2986,0x2145,0x10c3,0x2965,0x10c2,0x31a7,0x39e7,0x4a89,0x52eb,0x4aaa,0x3aaa,0x7baa,0xe5c7,0xa428,0xc508,0xaca8,0xc507,0xd548,0x9c09,0xedc7,0xac28,0xdd67,0x8368,0x6b49,0xe587,0x9c07,0xc4e8,0xdd47,0xb488,0xd547,0xcd27,0xd568,0x42ab,0x52a9,0x29a6,0x31a6,0x2104,0x31c7,0x31c7,0x3a07,0x2986,0x2986,0x39e6,0x3a27,0x2165,0x2124,0x31a6,0x3a08,0x3a08,0x31a6,0x4aca,0x4aea,0x4aca,0x4aaa,0x4aa9,0x4a89,0x4aaa,0x52ca,0x4aca,0x4aaa,0x4aca,0x4aca,0x4aaa,0x4aca,0x530b,0x52eb,0x530b,0x5b2c,0x3a08,0x0841,0x4a89,0x4a89,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0841,0x0000,0x4208,0x2986,0x39e7,0x52ca,0x6bae,0x6b8d,0x636d,0x6b8d,0x632c,0x632c,0x636d,0x634c,0x634c,0x634c,0x5b0c,0x5b2c,0x5b0c,0x52cb,0x5aeb,0x52ca,0x5b0b,0x5acb,0x39c7,0x31a6,0x18e3,0x2124,0x2124,0x18c3,0x2124,0x2945,0x2965,0x2965,0x2965,0x2965,0x2144,0x2965,0x31a6,0x39e7,0x3a07,0x634c,0x632c,0x634c,0x734c,0x736b,0x738b,0x7bab,0x736c,0x5b0b,0x630c,0x632c,0x632c,0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x5b2c,0x632c,0x632c,0x630c,0x5aeb,0x632c,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x4a49,0x3186,0x2104,0x18c3,0x1082,0x1082,0x18e3,0x2124,0x2965,0x2965,0x31a6,0x39c6,0x3185,0x31a6,0x31a6,0x31a6,0x2986,0x52aa,0x632c,0x5b0c,0x632c,0x5b0b,0x630b,0x630b,0x630b,0x632c,0x5acb,0x52ca,0x5b0b,0x5b0b,0x630c,0x5b0b,0x632c,0x630b,0x630b,0x630c,0x632c,0x5b0b,0x5b0b, +0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x4aca,0x4aaa,0x52cb,0x52eb,0xe36b,0xb2e9,0x026a,0xdb4a,0xd30a,0xdb4a,0xeb6b,0xfb8b,0xdb29,0x5aeb,0x5aeb,0x2965,0x20e3,0x2965,0x39c6,0x31a6,0x3186,0x2945,0x2124,0x2944,0x2124,0x2124,0x2945,0x2144,0x18e3,0x2104,0x31a6,0x4a89,0x4aca,0x52c9,0x2a4a,0x9c09,0xdd67,0x1209,0x5ac9,0x7b69,0xd568,0xac48,0x000a,0xdd67,0xc4a7,0xd548,0x7308,0x8369,0xe567,0x19a9,0x7349,0xeda7,0xac67,0xeda7,0xe587,0x9c29,0x4aca,0x4a68,0x2124,0x1903,0x2945,0x39e7,0x3a08,0x3a07,0x3a07,0x2104,0x31a6,0x39c6,0x2144,0x2145,0x2124,0x31a6,0x39e7,0x2124,0x4269,0x52eb,0x4aaa,0x4a89,0x4aaa,0x4a89,0x4aa9,0x52ca,0x52ca,0x4aaa,0x4aca,0x4aca,0x4aca,0x52ca,0x530b,0x530b,0x5b2c,0x5b2c,0x4269,0x2104,0x52aa,0x2144,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0041,0x0020,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0040,0x0040,0x0040,0x0020,0x0020,0x0020,0x0020,0x0020,0x0841,0x0020,0x0040,0x0020,0x0020,0x0040,0x0841,0x0041,0x0040,0x0040,0x0041,0x0040,0x0040,0x0040,0x0040,0x0840,0x0841,0x0841,0x0040,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0840,0x0841,0x0841,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2124,0x31c6,0x3a07,0x3a28,0x6b8e,0x6b8d,0x636d,0x6b8d,0x634c,0x634c,0x634c,0x636d,0x636d,0x634c,0x634c,0x5b2c,0x5b0b,0x5aeb,0x52cb,0x5b0b,0x634c,0x4a69,0x2985,0x2985,0x10a2,0x10a2,0x10a2,0x18e3,0x2104,0x2104,0x2104,0x2124,0x2945,0x2965,0x2945,0x2104,0x2945,0x39e7,0x3186,0x530b,0x6b4d,0x5b4c,0xd5a9,0xf628,0xee09,0xfe28,0xb4a9,0x52ec,0x632c,0x634c,0x634c,0x632c,0x630c,0x5b0b,0x5b0b,0x632c,0x5b2c,0x632c,0x5b0b,0x630c,0x632c,0x5b0b,0x5acb,0x52cb,0x52ca,0x3a07,0x3a07,0x18c3,0x10a2,0x1081,0x10a2,0x18c2,0x18e3,0x2124,0x2965,0x2965,0x2965,0x31a6,0x2124,0x2965,0x31a6,0x2986,0x4229,0x632c,0x52cc,0x940b,0xe5a8,0xe588,0xed89,0xdd48,0x7b6b,0x52eb,0x5aeb,0x5b0b,0x632c,0x630b,0x630b,0x632c,0x630b,0x632c,0x632c,0x5aeb,0x5b0b,0x630b, +0x52eb,0x52ca,0x4aca,0x52eb,0x52eb,0x52ca,0x4aaa,0x52aa,0x42ca,0xab0b,0xf36b,0xeb4a,0xf34a,0x92a9,0xeb4b,0xa30a,0xe38b,0xe34a,0x52ca,0x4a89,0x2124,0x18c3,0x3185,0x4227,0x31a6,0x2104,0x10a2,0x0861,0x0861,0x0881,0x10a2,0x18a3,0x1924,0x2104,0x18e3,0x2124,0x4228,0x4aaa,0x4aa9,0x4a89,0x5ae9,0xdd47,0xe567,0xedc7,0xb488,0xa428,0xede7,0xe567,0xeda7,0x8369,0xdd47,0xe567,0x8388,0xd547,0xe587,0xeda7,0xc4e8,0x9c07,0xe5a7,0xeda7,0x8bc8,0x4aca,0x52c9,0x1903,0x18c3,0x31c7,0x4228,0x31a6,0x2945,0x18c3,0x0020,0x0841,0x1082,0x10c2,0x2104,0x2145,0x2965,0x29a6,0x2124,0x3207,0x4aca,0x4aaa,0x4a89,0x4aaa,0x4a89,0x4a89,0x4a89,0x52ca,0x4aaa,0x4aaa,0x52ca,0x4aca,0x4aca,0x52eb,0x52eb,0x530b,0x5b4c,0x4228,0x1903,0x4248,0x18c2,0x0000,0x0021,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2104,0x39e7,0x3a07,0x39e7,0x634d,0x6b8d,0x6b8d,0x636d,0x634c,0x636d,0x634c,0x632c,0x634c,0x632c,0x634c,0x5b2c,0x5b0b,0x5aeb,0x52ca,0x5aeb,0x52ca,0x4249,0x2945,0x2124,0x10a2,0x10a2,0x10a2,0x1082,0x1081,0x0861,0x1081,0x18c2,0x2104,0x2944,0x2124,0x18e3,0x2104,0x39c7,0x3186,0x52cb,0x738e,0x636d,0x8beb,0x9c0a,0x940a,0xa44b,0x83ab,0x5b0c,0x632c,0x634c,0x632c,0x632c,0x5b0b,0x630c,0x632c,0x632c,0x5b0c,0x5b0b,0x634c,0x632c,0x5b0c,0x5aeb,0x5aeb,0x5b0b,0x52ca,0x39e7,0x2985,0x18c3,0x10a2,0x0861,0x1081,0x1082,0x0841,0x0861,0x10a2,0x2104,0x2965,0x2965,0x18e3,0x2124,0x31a6,0x2986,0x39c7,0x5aeb,0x52eb,0x7bab,0xa46a,0xa44a,0xac4a,0x9c29,0x6b2b,0x630c,0x5aeb,0x5b0b,0x632c,0x630c,0x5b0b,0x630c,0x5aeb,0x5b0c,0x5b0c,0x5aeb,0x5b0b,0x5b0b, +0x52eb,0x52ca,0x52ca,0x52ea,0x4aca,0x4aaa,0x4a8a,0x52aa,0x5acb,0x52aa,0x9b0a,0xbb0a,0x82aa,0x4aaa,0x9b0a,0x62a9,0x7aca,0xa30b,0x5aea,0x4228,0x2964,0x10a2,0x31a6,0x4a48,0x10a2,0x0020,0x0020,0x0020,0x0841,0x1082,0x18c3,0x18e3,0x1082,0x10a2,0x18e3,0x2144,0x31e7,0x4a89,0x4a89,0x5289,0x4289,0x6b09,0xb488,0xa428,0x52a9,0x428a,0x9c29,0xbca8,0x7b48,0x4aaa,0x93e9,0xb468,0x7348,0x6309,0xb488,0xa408,0x4a8a,0x6b49,0x7b89,0x8be9,0x8be9,0x52cb,0x4267,0x18c3,0x1081,0x4228,0x4228,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0861,0x18e3,0x2144,0x29a6,0x2124,0x31c7,0x52ea,0x4aa9,0x4a89,0x4268,0x4a89,0x4aaa,0x4a89,0x4aaa,0x52aa,0x4aaa,0x52eb,0x52ca,0x52ea,0x52eb,0x52ea,0x5b6c,0x5b2c,0x3a07,0x18c3,0x31e7,0x10a2,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2145,0x4248,0x39e7,0x31c6,0x31e7,0x29a6,0x2165,0x2985,0x2986,0x31c6,0x31c6,0x31a6,0x31a6,0x29a6,0x2985,0x29a6,0x29a6,0x31a6,0x2985,0x2965,0x31a6,0x31c6,0x31c6,0x31c6,0x31c6,0x31a6,0x31c6,0x31c6,0x31c6,0x31a6,0x31c6,0x31e7,0x31e7,0x31c7,0x31c7,0x31c6,0x31e7,0x39c7,0x39c7,0x39e7,0x31c7,0x39e7,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x39e7,0x31e7,0x39e7,0x3a07,0x3a07,0x3a07,0x4228,0x4228,0x4228,0x4208,0x4208,0x4228,0x4228,0x4228,0x4228,0x4228,0x3a08,0x3a28,0x4249,0x4a49,0x4249,0x4a49,0x4a49,0x4a49,0x4248,0x4268,0x4a69,0x4a69,0x4a89,0x52aa,0x4a89,0x4228,0x4228,0x4a48,0x4a49,0x4248,0x4248,0x4228,0x4228,0x4248,0x4a69,0x4a69,0x4a89,0x4248,0x4228,0x4228,0x3a07,0x2986,0x2124,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x2124,0x4248,0x4228,0x39e7,0x636d,0x6b8d,0x6b6d,0x638d,0x636d,0x632c,0x6b6d,0x634c,0x634c,0x634c,0x632c,0x5b0b,0x5aeb,0x5aeb,0x52cb,0x52cb,0x52aa,0x4228,0x18e3,0x2124,0x18c3,0x1082,0x0841,0x0841,0x0841,0x0841,0x0040,0x0861,0x18c2,0x2124,0x2124,0x10a2,0x18c3,0x31c7,0x2965,0x4a69,0x6b6d,0x6b6d,0x3a8c,0x226c,0x3aac,0x2a8c,0x52eb,0x632b,0x632c,0x632c,0x632c,0x632c,0x5b0b,0x632c,0x632c,0x5b0c,0x5b0c,0x632c,0x634d,0x634c,0x5b0b,0x5aeb,0x632c,0x5b0b,0x52cb,0x2104,0x1082,0x18e3,0x1082,0x0841,0x0861,0x1081,0x1082,0x0861,0x0020,0x0840,0x20e3,0x2965,0x2104,0x2965,0x3186,0x2945,0x31a6,0x52ca,0x5aeb,0x52cb,0x2a6b,0x222c,0x1a6b,0x2a6b,0x5aeb,0x630c,0x5b0b,0x5aeb,0x5b0b,0x630c,0x5aec,0x5b0c,0x630c,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x630c, +0x52ea,0x52ca,0x52eb,0x52ca,0x4aaa,0x52ca,0x4aaa,0x52aa,0x52ea,0x52ca,0x3aaa,0x22aa,0x42aa,0x52aa,0x3aaa,0x4a8a,0x4aca,0x42ca,0x5b0b,0x4248,0x2124,0x2124,0x2965,0x2944,0x0020,0x0861,0x0841,0x0861,0x10a2,0x18c3,0x18c3,0x18e3,0x18e3,0x18e3,0x1903,0x2124,0x31a6,0x4289,0x4289,0x4269,0x528a,0x4289,0x222a,0x3229,0x4a89,0x4aaa,0x3a6a,0x220a,0x4289,0x52a9,0x326a,0x220a,0x428a,0x4aaa,0x222a,0x324a,0x52ca,0x4269,0x4269,0x42aa,0x42aa,0x52ea,0x31c7,0x2104,0x18e2,0x31a6,0x2945,0x0000,0x0841,0x0020,0x0020,0x0020,0x0841,0x0861,0x0841,0x0020,0x1904,0x31c6,0x1903,0x31e7,0x4aaa,0x4aa9,0x4a89,0x4289,0x4a89,0x4aaa,0x52ca,0x4aaa,0x4a89,0x4aaa,0x52eb,0x52eb,0x52eb,0x52ea,0x52eb,0x638d,0x638c,0x3a28,0x10c3,0x31c6,0x0881,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x4aaa,0x73ef,0x5b4c,0x5b6c,0x530b,0x4a89,0x3a48,0x4269,0x4aa9,0x530b,0x530b,0x530b,0x5b2b,0x5b2b,0x530b,0x4aca,0x4269,0x4269,0x3a48,0x4aaa,0x5b2b,0x5b2b,0x532b,0x5b4c,0x5b4c,0x5b2b,0x5b2b,0x5b4c,0x5b4c,0x5b2b,0x5b2b,0x5b4c,0x5b4c,0x5b4c,0x5b2c,0x5b4c,0x634c,0x634c,0x5b4c,0x634c,0x5b4c,0x5b2c,0x5b4c,0x634c,0x634c,0x5b4c,0x5b4c,0x5b4c,0x5b2c,0x632c,0x634c,0x636c,0x636d,0x638d,0x638d,0x636d,0x636d,0x636d,0x636c,0x636c,0x636d,0x636d,0x636d,0x634c,0x634c,0x6bae,0x6bae,0x6b8e,0x6b8d,0x6b8d,0x6b8d,0x6b8d,0x6bad,0x6bad,0x6bae,0x73ce,0x73ef,0x73ee,0x6bad,0x6b8d,0x6b8d,0x6b8d,0x636c,0x6b6d,0x73ae,0x73ae,0x6b8d,0x6bae,0x6b6d,0x6bad,0x6bad,0x73ef,0x7c2f,0x7c2f,0x7c2f,0x52eb,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0020,0x0000,0x2104,0x3a07,0x3a08,0x4228,0x636d,0x73ad,0x6b8d,0x638d,0x6bad,0x636d,0x6b6d,0x6b8d,0x634c,0x634c,0x632c,0x5b0c,0x5b0b,0x52eb,0x5aeb,0x52cb,0x4aaa,0x4228,0x10a2,0x18e3,0x18c3,0x0821,0x0841,0x0861,0x1082,0x10a2,0x18c2,0x0000,0x0000,0x0000,0x0000,0x2104,0x2124,0x39e7,0x2145,0x4249,0x634d,0x636c,0xbcca,0xcd49,0xc529,0xcd4a,0x940a,0x530c,0x634c,0x634c,0x634c,0x632c,0x5b0c,0x634c,0x630c,0x5b0c,0x632c,0x632c,0x632c,0x632c,0x630c,0x632c,0x630c,0x5aeb,0x4aaa,0x18e3,0x10a2,0x18c3,0x1082,0x0020,0x0841,0x0020,0x0840,0x0020,0x0000,0x0020,0x0000,0x0000,0x0000,0x10c2,0x39e7,0x2145,0x2966,0x5acb,0x5aeb,0x7b8b,0xb4a9,0xac69,0xac89,0xac69,0x6b2b,0x5aeb,0x5b0b,0x5b0b,0x630b,0x5b0b,0x5b0b,0x5b0b,0x632c,0x630b,0x630b,0x632c,0x630b,0x630c, +0x52eb,0x52ca,0x52ca,0x52ca,0x52ca,0x52ea,0x52ca,0x4aaa,0x4aaa,0x4aaa,0x528a,0x52aa,0x4aa9,0x4a89,0x52aa,0x4a8a,0x52aa,0x52aa,0x4aea,0x52ea,0x2104,0x2124,0x2104,0x0840,0x0861,0x0881,0x10a2,0x10a2,0x1903,0x2104,0x18e3,0x1903,0x2103,0x18e3,0x18c3,0x18e3,0x39e7,0x4269,0x4248,0x4a69,0x4269,0x4a89,0x52a9,0x4aa9,0x4a89,0x4a8a,0x52ca,0x52c9,0x4aa9,0x4a8a,0x4aa9,0x52a9,0x4aaa,0x4ac9,0x4aa9,0x4a89,0x4a89,0x4a69,0x4aa9,0x52ca,0x4aca,0x4aca,0x4248,0x2104,0x2145,0x10c2,0x0040,0x0841,0x0841,0x0841,0x0841,0x0861,0x0861,0x1082,0x10a2,0x0861,0x2965,0x31a6,0x2124,0x3a08,0x4aaa,0x4aa9,0x4a89,0x4a89,0x4a89,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4aca,0x52ca,0x530b,0x530b,0x532b,0x5b2c,0x5b2b,0x3a28,0x18c3,0x31c6,0x10a2,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x4269,0x5b4c,0x5b2b,0x530b,0x4269,0x4249,0x3a28,0x3207,0x3207,0x3a28,0x4268,0x4269,0x4a89,0x4aa9,0x52ea,0x4269,0x3a08,0x3a08,0x3a28,0x52eb,0x530b,0x52eb,0x52ea,0x52ea,0x52ea,0x52ea,0x52ca,0x52ca,0x52ea,0x52eb,0x52eb,0x52eb,0x52ea,0x52eb,0x52eb,0x52eb,0x52ca,0x52eb,0x52eb,0x52eb,0x530b,0x52eb,0x52eb,0x52eb,0x52ea,0x52eb,0x530b,0x52eb,0x52eb,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x52ea,0x52ea,0x52eb,0x52ea,0x52ea,0x52ea,0x52eb,0x52eb,0x52eb,0x5b0b,0x52eb,0x52eb,0x52eb,0x52ea,0x52eb,0x52eb,0x52eb,0x52eb,0x52eb,0x52eb,0x52eb,0x52eb,0x52cb,0x4aaa,0x4aca,0x52ca,0x52ca,0x52ca,0x5aeb,0x5b0c,0x5b0b,0x52cb,0x4aaa,0x4aaa,0x4aaa,0x52aa,0x632c,0x6b8d,0x63ad,0x742f,0x5b0b,0x0000,0x0020,0x0000,0x0000,0x0000,0x0020,0x0020,0x0020,0x0841,0x0000,0x31c7,0x5b0c,0x31a6,0x3a08,0x6b6d,0x6b6d,0x6b8e,0x634d,0x634d,0x6b8d,0x6b6d,0x634c,0x634c,0x5b4c,0x634c,0x632c,0x5b0b,0x5b0b,0x5b2c,0x5aeb,0x52aa,0x4208,0x1082,0x18c3,0x10a2,0x0020,0x0000,0x0000,0x0000,0x0800,0x0000,0x2123,0x6b6d,0x840f,0x5aeb,0x0000,0x18c3,0x4249,0x2945,0x4a68,0x5b2c,0x634c,0xbcca,0xcd69,0xcd69,0xcd88,0x9c2a,0x5aec,0x634c,0x634c,0x6b4d,0x632c,0x632c,0x6b6d,0x634d,0x632c,0x632c,0x630c,0x632c,0x5b0c,0x5b0c,0x634c,0x5aeb,0x5b0c,0x52aa,0x18c3,0x18c3,0x2104,0x0861,0x0000,0x0000,0x18c3,0x2124,0x2945,0x2965,0x10e3,0x31e7,0x7bce,0x9491,0x6b6d,0x0000,0x2104,0x3186,0x5aeb,0x52eb,0x8beb,0xd549,0xd569,0xd568,0xcd09,0x734b,0x5b2c,0x5b0b,0x5b0b,0x630b,0x630b,0x5b0b,0x630b,0x5b0b,0x5aeb,0x630b,0x630b,0x630b,0x630b, +0x4aca,0x4aaa,0x52ca,0x52eb,0x52ca,0x52ca,0x4aa9,0x4aaa,0x4aca,0x4aa9,0x4aaa,0x4a8a,0x4aa9,0x4a89,0x4aaa,0x4aaa,0x52ca,0x52ca,0x52eb,0x4a89,0x2144,0x2144,0x2103,0x1082,0x1082,0x10a2,0x18c2,0x18e3,0x2124,0x2124,0x2104,0x2103,0x1903,0x18e3,0x18e3,0x2124,0x31a6,0x4248,0x4249,0x3a68,0x4a89,0x4a69,0x4269,0x4a89,0x4aa9,0x52aa,0x52ca,0x52ca,0x52ca,0x52aa,0x4aaa,0x4aaa,0x4aa9,0x4aaa,0x4a89,0x4a89,0x4aa9,0x4aa9,0x4269,0x4aaa,0x52ca,0x4aca,0x3a07,0x2124,0x2945,0x1081,0x0861,0x0861,0x0861,0x1082,0x1082,0x10a2,0x10a2,0x10a2,0x10a2,0x0861,0x2124,0x2986,0x18e3,0x31c7,0x4aaa,0x4aaa,0x4a69,0x4a89,0x4a89,0x4aaa,0x4aaa,0x4aca,0x4aca,0x4aea,0x4aca,0x530b,0x4aca,0x530b,0x5b2c,0x5b6d,0x5b4c,0x31e6,0x18e3,0x31c6,0x10a2,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x4268,0x5b4c,0x530b,0x4248,0x39e7,0x39e7,0x39e7,0x31e7,0x31e7,0x3a08,0x3a08,0x3a08,0x4249,0x3a08,0x3a28,0x3a28,0x3a28,0x3a28,0x3a48,0x4a8a,0x4aaa,0x4aaa,0x4a89,0x4269,0x4a89,0x4a89,0x4a69,0x4248,0x4269,0x4aaa,0x4aaa,0x4aca,0x4aaa,0x4aaa,0x52ca,0x52ca,0x52ca,0x52ca,0x52eb,0x52eb,0x52eb,0x52eb,0x52ea,0x52eb,0x52eb,0x52ca,0x52ca,0x52ca,0x52eb,0x52eb,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x52eb,0x52eb,0x52ca,0x52ca,0x52eb,0x52eb,0x52eb,0x5aeb,0x52eb,0x52eb,0x52eb,0x52eb,0x5aeb,0x5aeb,0x52eb,0x52eb,0x52eb,0x52eb,0x52eb,0x52eb,0x52cb,0x52eb,0x52cb,0x4aaa,0x52cb,0x52cb,0x530c,0x5aec,0x52eb,0x52eb,0x52eb,0x52eb,0x52aa,0x4a8a,0x4a8a,0x4aaa,0x4aaa,0x52ca,0x52ea,0x636d,0x5aeb,0x0820,0x0000,0x0000,0x0000,0x0000,0x0020,0x0841,0x0020,0x0841,0x0000,0x2145,0x4a89,0x31c7,0x39e7,0x6b6d,0x6bad,0x6b8d,0x6b6d,0x6b6d,0x6b6d,0x632c,0x634c,0x634c,0x636d,0x634c,0x5b0c,0x634c,0x5b2c,0x5b2c,0x52cb,0x5b0b,0x4228,0x1061,0x1903,0x10a2,0x0020,0x18e3,0x4207,0x52ca,0x52eb,0x7c50,0xd6fa,0xf7de,0xffff,0xf7be,0xb5d7,0x2145,0x31c7,0x2966,0x4a69,0x632c,0x634c,0x42cd,0x226c,0x3aad,0x224c,0x52ec,0x634c,0x632c,0x6b6d,0x634c,0x632c,0x6b6d,0x632c,0x632c,0x632c,0x632c,0x634c,0x632c,0x632c,0x630c,0x632c,0x630c,0x5b0c,0x52cb,0x2104,0x10a2,0x18e3,0x18c2,0x2944,0x5289,0x5b0b,0x632c,0x634c,0x638d,0x94f3,0xd6fb,0xf7df,0xffff,0xf7df,0xbdf8,0x2126,0x2965,0x5b0b,0x630b,0x52cb,0x3a6b,0x4aac,0x42cc,0x42cb,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x632c,0x632c,0x630c,0x630c,0x630c,0x5b0b,0x632c, +0x52ca,0x52ca,0x52ea,0x52ea,0x4aca,0x4aaa,0x52ca,0x52ca,0x52ca,0x4aaa,0x4aa9,0x4aaa,0x4a89,0x4289,0x4aa9,0x4aaa,0x4aaa,0x4aca,0x4aca,0x31c7,0x2124,0x2965,0x2104,0x0840,0x1082,0x10a2,0x18c3,0x18e3,0x2124,0x2124,0x2124,0x18e3,0x18e3,0x10a2,0x18c3,0x2124,0x4227,0x4a89,0x4249,0x4249,0x4a69,0x4269,0x4a89,0x4a89,0x4aca,0x4aca,0x52ca,0x52ca,0x4aaa,0x4aaa,0x4aaa,0x4aa9,0x4aa9,0x4a89,0x4aa9,0x4aa9,0x4aaa,0x4aa9,0x4289,0x4aa9,0x4aaa,0x52ca,0x3a07,0x1904,0x2124,0x1081,0x0841,0x0861,0x1081,0x10a2,0x18c2,0x18c3,0x18c3,0x10c2,0x10a2,0x1061,0x1904,0x2986,0x2104,0x2985,0x4289,0x4269,0x4269,0x52ca,0x4aaa,0x4aaa,0x4aa9,0x4aaa,0x52ca,0x4aca,0x52eb,0x530b,0x530b,0x530b,0x5b2b,0x638d,0x636d,0x39e7,0x18e3,0x31c6,0x10a2,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x3a48,0x532b,0x4aaa,0x3a48,0x31c7,0x31c7,0x31e7,0x31e7,0x3a08,0x31e7,0x3a08,0x31e7,0x3a28,0x3a28,0x3a08,0x3a08,0x3a08,0x31e7,0x3a28,0x3a28,0x3a08,0x4248,0x4248,0x3a28,0x3a28,0x4249,0x4a89,0x4249,0x4228,0x4269,0x4269,0x4269,0x4269,0x4289,0x4289,0x4aaa,0x4aaa,0x4a89,0x4a89,0x4a89,0x4aaa,0x52ca,0x52aa,0x52aa,0x52ca,0x52ea,0x52ca,0x52ca,0x4aca,0x52ca,0x52eb,0x52ea,0x52ea,0x52ca,0x52ca,0x52eb,0x52eb,0x52ea,0x52eb,0x52eb,0x52eb,0x52eb,0x52ca,0x52ca,0x52ca,0x52eb,0x52cb,0x52cb,0x52eb,0x52eb,0x52eb,0x52eb,0x52ca,0x52ca,0x52cb,0x4aaa,0x4aca,0x52ca,0x52aa,0x52ca,0x52eb,0x52eb,0x5aeb,0x52eb,0x52ca,0x52ca,0x52ca,0x4aaa,0x4a8a,0x4aaa,0x52ca,0x52eb,0x5b0b,0x5aeb,0x634c,0x52eb,0x0861,0x0000,0x0000,0x0000,0x0000,0x0020,0x0840,0x0020,0x0041,0x0000,0x2124,0x4a69,0x39e7,0x31c6,0x634d,0x6bce,0x6b8d,0x6b6d,0x6b8d,0x634c,0x634c,0x6b6d,0x634c,0x634c,0x632c,0x634c,0x634c,0x634c,0x5b2c,0x5aeb,0x5b0b,0x4249,0x10a2,0x2124,0x18e3,0x18c2,0x4248,0x6b8d,0x742f,0x9513,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xbe18,0x08c4,0x2986,0x4269,0x632d,0x6b6c,0x8c0b,0x9c2b,0x9c2b,0x942b,0x7bab,0x634c,0x6b4c,0x636c,0x632c,0x632c,0x634c,0x634c,0x632c,0x632c,0x632c,0x632c,0x634c,0x634d,0x634c,0x632c,0x5b0b,0x5b0c,0x52cb,0x2945,0x1903,0x2124,0x2103,0x52a9,0x73ed,0x73ad,0x6b8d,0x740f,0x9d74,0xef9e,0xffff,0xffff,0xffff,0xffff,0xffff,0xc619,0x10c4,0x630c,0x5aeb,0x632b,0x7b8b,0x7b8b,0x7b8b,0x7b6b,0x632b,0x632c,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x5b0b,0x630c,0x5b0b,0x5b0b,0x5b2c,0x5b2c,0x5b0b,0x5b0b, +0x52eb,0x5b0b,0x4aca,0x52ca,0x4aca,0x52ca,0x4aaa,0x4aaa,0x4aca,0x4aca,0x4aaa,0x4a89,0x4289,0x4a89,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x52eb,0x31c6,0x2124,0x2145,0x1903,0x0840,0x1082,0x10a2,0x18c3,0x2103,0x1903,0x2124,0x2124,0x18c3,0x18c3,0x18c2,0x18e3,0x2124,0x31c6,0x4a69,0x4a69,0x4a69,0x4268,0x4268,0x4aaa,0x4aaa,0x52ca,0x52ca,0x52ca,0x4aca,0x4aaa,0x4aaa,0x52ca,0x4aca,0x4aa9,0x4aaa,0x4aca,0x4aa9,0x4a89,0x4aaa,0x4aca,0x4aaa,0x4aa9,0x52ea,0x3a07,0x1904,0x2165,0x0881,0x0861,0x18e3,0x1903,0x1903,0x1903,0x18e3,0x18e3,0x18c2,0x10a2,0x10a2,0x2104,0x2965,0x1904,0x31a6,0x4a69,0x4a69,0x4a89,0x4aaa,0x4aca,0x4aca,0x52ca,0x4a89,0x4aaa,0x52ca,0x52ea,0x52eb,0x5b2b,0x530b,0x530b,0x5b2c,0x5b4c,0x31c6,0x10c2,0x31c6,0x10a2,0x0020,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x3a48,0x4aea,0x3a28,0x3207,0x31e7,0x3207,0x31c7,0x31e7,0x31e7,0x29c6,0x31e7,0x31c7,0x3a28,0x3a28,0x31e7,0x39e7,0x31e7,0x31e7,0x3a28,0x4249,0x4269,0x4228,0x3a28,0x3a28,0x3a28,0x3a28,0x3a48,0x3a48,0x4248,0x4249,0x4248,0x3a28,0x4269,0x4268,0x4269,0x4248,0x52ca,0x4aa9,0x4269,0x4248,0x4269,0x4aaa,0x4aaa,0x4aaa,0x52eb,0x52ea,0x4aca,0x52ca,0x4aaa,0x4aaa,0x52aa,0x52ca,0x4aaa,0x4aaa,0x52aa,0x52aa,0x4aca,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4a8a,0x4aaa,0x4aaa,0x4aca,0x52cb,0x52ca,0x4aca,0x52aa,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4a8a,0x4aaa,0x4aaa,0x4aaa,0x4aca,0x4aca,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4a8a,0x52aa,0x4a8a,0x4a8a,0x52aa,0x52aa,0x5b2c,0x52eb,0x0821,0x0000,0x0000,0x0000,0x0000,0x0020,0x0840,0x0020,0x0841,0x0000,0x31a6,0x5b2c,0x31c6,0x31c6,0x634d,0x6bae,0x6b8d,0x636d,0x636c,0x6b6d,0x634c,0x6b6d,0x636d,0x636d,0x636d,0x634c,0x632c,0x632c,0x5b0b,0x5b0b,0x5b2c,0x4a6a,0x1061,0x2124,0x2124,0x10a2,0x73ee,0x8470,0x740e,0xbe58,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7df,0x7c10,0x0000,0x52aa,0x6b4c,0x632d,0xc56a,0xe5e8,0xdda9,0xe5e8,0xa469,0x52ec,0x634c,0x632c,0x6b6d,0x634c,0x6b6c,0x6b4c,0x634c,0x634c,0x632c,0x634c,0x632c,0x632c,0x6b6d,0x634c,0x632c,0x632c,0x5aec,0x2124,0x2124,0x2965,0x1902,0x73cd,0x94b0,0x7c0f,0x8450,0x8490,0xceb9,0xffff,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0x8452,0x4a48,0x530c,0x940a,0xe5c8,0xe5a8,0xe588,0xdd48,0x736b,0x632c,0x5aeb,0x5aeb,0x630b,0x630b,0x630c,0x630b,0x632c,0x6b6d,0x632c,0x5b0c,0x5b0b,0x5b0b, +0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x530b,0x4aca,0x4aaa,0x4aca,0x4aca,0x4aaa,0x4aaa,0x4aaa,0x4a89,0x4a89,0x4aaa,0x4aaa,0x4aca,0x52ca,0x3a07,0x2124,0x2145,0x18e3,0x18e3,0x2104,0x2124,0x2104,0x2124,0x2103,0x2124,0x2103,0x18c2,0x10a2,0x10a2,0x1904,0x2124,0x31a6,0x4a89,0x4a89,0x4269,0x4a89,0x4a89,0x4aa9,0x4aaa,0x4aaa,0x52ca,0x52ca,0x52ca,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4aa9,0x4aaa,0x52ca,0x4a89,0x4aa9,0x4aaa,0x4aaa,0x52ca,0x4aca,0x4aca,0x31c6,0x2124,0x2945,0x10a2,0x18c3,0x0000,0x0000,0x0000,0x1882,0x2944,0x2124,0x18e3,0x10a2,0x10a2,0x18e3,0x2965,0x18e4,0x31e7,0x4aaa,0x4a89,0x4aaa,0x4289,0x52ca,0x4aca,0x4aca,0x4aaa,0x52ea,0x52ca,0x52ca,0x52ea,0x52ea,0x530b,0x5b2b,0x5b2b,0x5b2b,0x4248,0x10c2,0x31a6,0x1081,0x0820,0x0861,0x0000,0x0000,0x0020,0x0000,0x0000,0x0020,0x0000,0x4269,0x4aeb,0x3a28,0x3a28,0x3a28,0x3a28,0x3207,0x31e7,0x31c7,0x31c7,0x31c7,0x31c7,0x31e7,0x31e7,0x31e7,0x31e7,0x39e7,0x39e7,0x3a07,0x3a28,0x3a08,0x31c7,0x39c7,0x3a08,0x3a08,0x3a08,0x3a08,0x4249,0x4269,0x4248,0x4248,0x3a28,0x4248,0x4228,0x4248,0x4289,0x4aa9,0x4269,0x4248,0x4269,0x4268,0x4289,0x4289,0x4289,0x4aaa,0x4a89,0x4289,0x4269,0x4a69,0x4a69,0x4a89,0x4a69,0x4a89,0x4a89,0x4a69,0x4269,0x4aaa,0x4a8a,0x4a89,0x4a89,0x4a8a,0x4a89,0x4a69,0x4a8a,0x4a8a,0x4269,0x4a89,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4a8a,0x4a8a,0x4269,0x4269,0x4269,0x4269,0x4249,0x4249,0x4269,0x4269,0x4269,0x4a89,0x4a8a,0x4aaa,0x4a89,0x4a89,0x4aaa,0x4a8a,0x4aaa,0x4a89,0x4a8a,0x4aca,0x4aaa,0x5b2c,0x52cb,0x0840,0x0000,0x0000,0x0000,0x0000,0x0020,0x0840,0x0020,0x0841,0x0000,0x2986,0x52eb,0x3a07,0x3a07,0x636d,0x6b8e,0x6b8d,0x6b6d,0x6b8d,0x636c,0x632c,0x634c,0x636d,0x634d,0x632c,0x5b2b,0x632c,0x634c,0x634d,0x5b0c,0x5b4c,0x4a8a,0x0820,0x2965,0x2104,0x2144,0x73ef,0x7c2f,0x5b4c,0xadf6,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xffff,0xa534,0x0000,0x52aa,0x634c,0x634c,0x5b0b,0x5b0c,0x52ec,0x5aeb,0x630c,0x632c,0x6b4c,0x634c,0x632c,0x632c,0x630b,0x630b,0x632c,0x634c,0x5b0c,0x5b0b,0x632c,0x632c,0x634c,0x5b0b,0x630b,0x6b6d,0x5acb,0x2965,0x2944,0x2124,0x2964,0x7bed,0x7c0f,0x73ce,0x7bef,0x6b8c,0xce99,0xffff,0xffdf,0xffff,0xffff,0xffff,0xffdf,0xffff,0xa535,0x3207,0x632c,0x632b,0x736a,0x736a,0x738a,0x734a,0x634c,0x630c,0x5b0b,0x5b0b,0x632c,0x5b0b,0x5b0b,0x632c,0x632c,0x632c,0x632c,0x630c,0x630c,0x630c, +0x52eb,0x52ca,0x52ca,0x52ca,0x52ea,0x52eb,0x52ca,0x4aaa,0x52ca,0x52ca,0x4aaa,0x52ca,0x4aca,0x4aaa,0x4aaa,0x4aca,0x4aaa,0x4aaa,0x4aca,0x31c6,0x2145,0x2985,0x10a1,0x0000,0x0000,0x0000,0x0000,0x2124,0x2103,0x1903,0x2103,0x18e3,0x10a2,0x1081,0x2124,0x2144,0x31c7,0x4aaa,0x4aca,0x4a89,0x4a89,0x4aaa,0x4aaa,0x4aca,0x4aca,0x4aaa,0x52ea,0x530b,0x4aca,0x4aaa,0x4aaa,0x4aca,0x52ca,0x4aca,0x4aca,0x4aca,0x4aaa,0x4aa9,0x4aca,0x52ea,0x52eb,0x4aa9,0x1923,0x2104,0x2986,0x0000,0x0000,0x5b0b,0x7c2f,0x638d,0x1944,0x0000,0x0000,0x18c3,0x10a2,0x1081,0x2104,0x2965,0x2124,0x3a07,0x4aaa,0x4aca,0x4aaa,0x4aca,0x52ca,0x4aaa,0x4aa9,0x4aaa,0x4aca,0x52cb,0x52eb,0x52ca,0x52ca,0x52eb,0x530b,0x530b,0x530b,0x31c6,0x10c2,0x2986,0x10a2,0x0020,0x0881,0x0081,0x08a1,0x08c1,0x08a1,0x0061,0x08c2,0x0000,0x4289,0x4aeb,0x3a48,0x3a28,0x3a07,0x3a28,0x3a07,0x31e7,0x31e7,0x31e7,0x31e7,0x39e7,0x31e7,0x31e7,0x31e7,0x31a6,0x29a6,0x31e7,0x31e7,0x31a6,0x2965,0x2965,0x2985,0x2986,0x2986,0x31a6,0x39e7,0x3a07,0x4269,0x4269,0x3a08,0x3a28,0x4249,0x4269,0x3a08,0x4269,0x4aa9,0x4268,0x3a28,0x4249,0x4269,0x4249,0x4248,0x4249,0x4269,0x4269,0x4269,0x4a69,0x4269,0x4a89,0x4aaa,0x4a8a,0x4a8a,0x4a8a,0x4a8a,0x4a89,0x4a89,0x4a89,0x4a89,0x4a8a,0x4a89,0x4a89,0x4289,0x4aaa,0x4a8a,0x4a8a,0x52cb,0x52eb,0x52ca,0x4a8a,0x4269,0x4269,0x4248,0x3a28,0x3a08,0x3a07,0x3a07,0x39e7,0x39e7,0x3a07,0x3a07,0x3a08,0x4228,0x4a69,0x4aaa,0x4289,0x4a89,0x4a69,0x4aaa,0x4a89,0x4a8a,0x4a89,0x4a8a,0x4acb,0x52eb,0x52ca,0x08a1,0x08a1,0x0020,0x0020,0x0040,0x0040,0x0840,0x0020,0x0841,0x0000,0x2124,0x4248,0x39e7,0x3a07,0x6b8d,0x73ae,0x6b8d,0x6b6d,0x6b6d,0x636c,0x634c,0x634c,0x634c,0x632c,0x632c,0x632b,0x634c,0x6b8d,0x6b8d,0x6b8d,0x6b8d,0x52aa,0x0020,0x2124,0x18c3,0x2965,0x638d,0x73ce,0x638c,0xa595,0xf7ff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x52aa,0x636d,0x6b4c,0x9c2b,0xacaa,0xa46a,0xa48a,0x83cb,0x634c,0x630b,0x632c,0x6b4d,0x632c,0x632c,0x632c,0x632b,0x632c,0x632c,0x632c,0x632c,0x630b,0x5b0c,0x632c,0x632c,0x632c,0x5aeb,0x3186,0x2965,0x2124,0x2103,0x6b8c,0x73ad,0x6b8d,0x6b8d,0x52e9,0xbe37,0xffff,0xffff,0xffff,0xffff,0xffff,0xffde,0xffdf,0x8c72,0x4aa9,0x634c,0x6b2a,0x7b4a,0x7b6a,0x836a,0x7b6a,0x632b,0x5b0b,0x5aeb,0x5b0c,0x632c,0x632c,0x5aeb,0x632c,0x5b0b,0x5b0b,0x632c,0x632c,0x630c,0x632c, +0x52eb,0x52ca,0x52ca,0x4aca,0x4aca,0x4aca,0x52eb,0x4aca,0x4aaa,0x52ca,0x4aaa,0x52ea,0x4aca,0x4aaa,0x4aa9,0x4aaa,0x4aaa,0x4aca,0x52ca,0x31c6,0x2965,0x0880,0x2125,0x8c92,0xa554,0x94d2,0x636c,0x29a6,0x4228,0x4207,0x18e3,0x18c2,0x18e3,0x10a2,0x1904,0x2124,0x31a6,0x4aaa,0x4aca,0x4aaa,0x4a89,0x4aa9,0x52ca,0x52ea,0x52ca,0x4aaa,0x52ca,0x4aca,0x4aca,0x52ca,0x52ca,0x52ea,0x52ca,0x4aca,0x52ca,0x4aca,0x52ca,0x52ca,0x4aaa,0x4aca,0x52ea,0x52ca,0x29a5,0x2124,0x2986,0x0000,0xadb6,0xef9d,0xefbd,0xe79d,0xd6fb,0xa554,0x4a88,0x10a2,0x1082,0x10a2,0x2145,0x2965,0x1904,0x3a08,0x52ea,0x52ca,0x4aca,0x4aca,0x52ea,0x4aaa,0x4aaa,0x52eb,0x530b,0x52ca,0x52ca,0x52eb,0x52ca,0x52eb,0x52eb,0x530b,0x5b2b,0x31a6,0x18a2,0x2985,0x0881,0x0841,0x10e2,0x08c1,0x0902,0x0922,0x08e1,0x0081,0x08a1,0x0000,0x4aca,0x530b,0x4aaa,0x4aca,0x4268,0x4aa9,0x4269,0x4248,0x3a28,0x3a07,0x31e7,0x3a08,0x31e7,0x29a6,0x29a6,0x2985,0x2986,0x31a6,0x31c6,0x31c7,0x31a6,0x3186,0x2124,0x18e3,0x1903,0x2165,0x31a6,0x31c7,0x4269,0x4289,0x3a28,0x3a28,0x4248,0x4269,0x4249,0x4248,0x4a89,0x4aa9,0x4aca,0x4aca,0x52cb,0x4aaa,0x4a8a,0x52ca,0x52ca,0x4aca,0x4aca,0x4aa9,0x4aaa,0x4aca,0x4aca,0x52ca,0x52ca,0x52ca,0x52eb,0x52eb,0x52ca,0x52eb,0x52cb,0x52cb,0x52ab,0x4aaa,0x52aa,0x52ca,0x4aaa,0x52eb,0x5b2c,0x5b2c,0x52eb,0x4aaa,0x4aaa,0x4a89,0x4248,0x3a08,0x31c7,0x39e7,0x31e7,0x31c7,0x31c7,0x31c6,0x31c7,0x39e7,0x3a08,0x4a69,0x52aa,0x4aca,0x4aaa,0x4aaa,0x52cb,0x52ca,0x52cb,0x5b0c,0x52eb,0x5b2c,0x634d,0x5b0b,0x08c2,0x08e2,0x0020,0x0020,0x0040,0x0041,0x0861,0x0861,0x0861,0x0000,0x1904,0x4228,0x3186,0x31a6,0x6b6d,0x738d,0x6b6d,0x634d,0x634c,0x636c,0x636c,0x634c,0x632c,0x634d,0x6b4d,0x634c,0x636c,0x6bae,0x73ce,0x738d,0x6bae,0x52ca,0x0861,0x2124,0x2124,0x10a2,0x636c,0x7c50,0x7c90,0x84b1,0xe75c,0xffff,0xffff,0xffdf,0xffdf,0xffff,0xe75c,0x4229,0x2944,0x4a89,0x6b6d,0x636c,0xd589,0xf649,0xee49,0xf648,0xb469,0x4aeb,0x6b4c,0x632c,0x5b0b,0x632c,0x632c,0x5b0c,0x5b0b,0x630c,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x634d,0x630c,0x2965,0x2144,0x2965,0x18c2,0x4aa9,0x6b8c,0x6b8c,0x73ad,0x632b,0x94d2,0xefde,0xffff,0xffdf,0xffdf,0xffdf,0xffff,0xdefc,0x31c8,0x5aeb,0x4aab,0x9c4a,0xedc7,0xeda8,0xf5e8,0xe588,0x7b6b,0x5b0c,0x5b0b,0x5b0b,0x5b0b,0x630b,0x630b,0x5b0c,0x632c,0x630b,0x632b,0x632c,0x632c,0x632c, +0x52ca,0x52ea,0x52ca,0x52ca,0x52ca,0x52ea,0x52ca,0x52ca,0x52ea,0x4aca,0x4aca,0x530b,0x52eb,0x4aaa,0x4aa9,0x4aaa,0x4aaa,0x4aca,0x4aaa,0x3a07,0x10c3,0x31c8,0xc659,0xffff,0xf7fe,0xf7fe,0xe77c,0xadb5,0x638c,0x6b8d,0x52ea,0x10a1,0x1082,0x18e3,0x1903,0x2104,0x2986,0x52ca,0x4aca,0x52ca,0x4aaa,0x4aaa,0x4aca,0x52ea,0x52ca,0x52ca,0x52eb,0x52ea,0x52ca,0x52ea,0x52eb,0x52ca,0x4aaa,0x52ca,0x52eb,0x52ca,0x4aca,0x4aca,0x52ca,0x4aca,0x530b,0x4aaa,0x31a6,0x2145,0x0000,0x9d34,0xf7ff,0xf7de,0xf7de,0xf7de,0xffff,0xf7dd,0xad94,0x52ea,0x0000,0x18c2,0x2965,0x2965,0x1904,0x3a08,0x52ea,0x52ca,0x52ca,0x52ca,0x52ea,0x52eb,0x52ca,0x52ea,0x530b,0x530b,0x4aca,0x4aaa,0x52ea,0x530b,0x530b,0x530b,0x532b,0x39e7,0x18c2,0x2985,0x1082,0x0020,0x10c2,0x08c1,0x0901,0x0922,0x08e1,0x0081,0x0000,0x10a2,0x31e7,0x2965,0x31a6,0x39e7,0x29a6,0x29a6,0x31c6,0x2985,0x2144,0x1904,0x2986,0x2985,0x2124,0x2124,0x2144,0x2124,0x2145,0x2965,0x2965,0x2985,0x2986,0x2986,0x2144,0x2103,0x2124,0x2124,0x2965,0x2965,0x31c6,0x31e7,0x31c6,0x31c6,0x31c6,0x39e7,0x3a28,0x4228,0x4228,0x4aa9,0x4aa9,0x52ca,0x52ca,0x4aaa,0x4aa9,0x4aaa,0x4aaa,0x4a89,0x4a69,0x4248,0x4269,0x4a69,0x4269,0x4a69,0x4a89,0x4a8a,0x4a89,0x4269,0x4a89,0x4a89,0x4269,0x4289,0x428a,0x4aaa,0x4269,0x4248,0x4269,0x4249,0x4a69,0x4a89,0x52aa,0x4a8a,0x4a8a,0x4aaa,0x4a89,0x3a08,0x39e7,0x39e7,0x39c7,0x31a6,0x31a6,0x3186,0x31a6,0x39e7,0x39e7,0x3a07,0x52ca,0x52eb,0x4aaa,0x52ca,0x52ca,0x52eb,0x52eb,0x5b2c,0x5b4c,0x5b0c,0x52aa,0x5b0b,0x1903,0x00c1,0x0040,0x0020,0x0040,0x0040,0x0841,0x10a2,0x1081,0x0020,0x1904,0x4228,0x31a6,0x31a6,0x634c,0x6b8d,0x6b8e,0x6b8d,0x6b4c,0x636c,0x636d,0x634c,0x636d,0x634c,0x634c,0x634c,0x634c,0x6b6d,0x6bae,0x634c,0x73ce,0x5b0b,0x0000,0x2124,0x2965,0x2944,0x4248,0x5b2c,0x63ad,0x636c,0x8cb2,0xe75c,0xffff,0xffff,0xffff,0xf79e,0x8430,0x1904,0x31a6,0x4a89,0x6b8d,0x6b4c,0x5b0b,0x62eb,0x62cb,0x630c,0x630b,0x632c,0x632c,0x634c,0x632c,0x632c,0x632c,0x5b0c,0x5b2c,0x632c,0x634c,0x630c,0x5b0b,0x632c,0x634d,0x632c,0x632c,0x634d,0x5aeb,0x2104,0x2945,0x31a6,0x39e7,0x4a68,0x634b,0x6b8c,0x6b6c,0x73ae,0x6b6c,0xadb5,0xf7de,0xffff,0xffff,0xffff,0xef5d,0x6b4d,0x10e1,0x5b0b,0x630b,0x5aca,0x62ea,0x6309,0x632a,0x632a,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x5b0c,0x5aeb,0x5b0b,0x5b0b,0x5b2c,0x632c,0x632c,0x632c,0x630c,0x630b, +0x52ea,0x52ea,0x52ea,0x52ca,0x52ca,0x52eb,0x4aca,0x52ca,0x52ca,0x4aaa,0x4aaa,0x52ea,0x52ea,0x4aaa,0x4aaa,0x4aaa,0x4aca,0x4aca,0x52eb,0x3a07,0x0000,0xbe3a,0xf7ff,0xf7df,0xffde,0xf7de,0xfffe,0xefbd,0x94f2,0x73ee,0x7c4f,0x31e6,0x0000,0x18e3,0x2104,0x2124,0x39e7,0x52eb,0x52ca,0x52eb,0x52ea,0x52ea,0x52ca,0x52ea,0x52ea,0x52ca,0x52ca,0x52eb,0x52eb,0x52ea,0x4aca,0x52eb,0x52eb,0x52ca,0x52ca,0x52ea,0x52ea,0x52ca,0x52ea,0x52ca,0x4aca,0x4aa9,0x29a6,0x1081,0x3208,0xd71c,0xefdd,0xf7dd,0xf7de,0xf7dd,0xf7dd,0xf7fe,0xceb9,0x7c0f,0x2164,0x0820,0x2965,0x2965,0x2124,0x4248,0x52eb,0x52eb,0x52eb,0x52ea,0x52ea,0x52eb,0x52eb,0x52eb,0x52ea,0x52eb,0x52ea,0x4aca,0x52ea,0x530b,0x52eb,0x530b,0x5b2b,0x31c6,0x18e3,0x2965,0x10a2,0x0861,0x10c2,0x08a1,0x08e1,0x0922,0x08e1,0x0081,0x0000,0x18e3,0x31c6,0x0820,0x18e3,0x2104,0x2124,0x2124,0x2124,0x1903,0x18c3,0x0882,0x1904,0x2144,0x2124,0x18e3,0x1903,0x18e3,0x18e3,0x1903,0x2124,0x2124,0x2965,0x31a6,0x2124,0x2124,0x2965,0x18c2,0x1903,0x2144,0x2165,0x2145,0x2144,0x2144,0x2144,0x2965,0x2144,0x2164,0x2144,0x2144,0x2124,0x2124,0x2124,0x2124,0x2144,0x1924,0x1903,0x2124,0x2965,0x2945,0x1903,0x18e3,0x1904,0x2124,0x2124,0x2145,0x2145,0x2145,0x2145,0x2144,0x2144,0x2965,0x2965,0x2965,0x2965,0x2986,0x29a6,0x31a6,0x2986,0x2986,0x2965,0x2144,0x10c2,0x4228,0x4a8a,0x39e7,0x39e7,0x31a5,0x2965,0x2145,0x2144,0x2124,0x2124,0x2144,0x2965,0x2965,0x31a6,0x4228,0x4a89,0x52ca,0x4a89,0x4a89,0x4a89,0x4aa9,0x5b0b,0x31a6,0x0000,0x4268,0x2144,0x00e1,0x0040,0x0020,0x0060,0x0060,0x0840,0x1081,0x1081,0x0020,0x2124,0x4248,0x31a6,0x31a6,0x6b8d,0x6b8d,0x636d,0x6b8d,0x73ad,0x6bad,0x634c,0x634c,0x636d,0x636d,0x636c,0x6b6d,0x634c,0x632c,0x6b6d,0x634c,0x73ae,0x5aeb,0x0000,0x2124,0x2144,0x2965,0x4248,0x5aeb,0x634c,0x6b6c,0x634c,0x8450,0xbe17,0xce79,0xb5d6,0x5acb,0x0000,0x4228,0x2945,0x4269,0x6b8d,0x6b6d,0xc56a,0xe5e9,0xddc9,0xe609,0xa46a,0x5b0c,0x630b,0x632c,0x5b0b,0x5b0c,0x632c,0x632c,0x632c,0x634c,0x632c,0x632c,0x5b0b,0x6b4d,0x632c,0x632c,0x632c,0x632c,0x5acb,0x1903,0x31a6,0x4208,0x3185,0x4248,0x5b0a,0x634c,0x5aca,0x52aa,0x5aeb,0x5aca,0x8c91,0xc617,0xce59,0xad75,0x4a69,0x0000,0x39c7,0x5aeb,0x52ec,0x83ea,0xcd28,0xc4e8,0xc4e8,0xc4e9,0x734b,0x5b0b,0x630b,0x5b0b,0x630c,0x5aeb,0x5aeb,0x5b0b,0x632b,0x632b,0x5b0c,0x630c,0x630c,0x630c, +0x52ea,0x52ea,0x52ca,0x4aaa,0x52ca,0x52ca,0x52ca,0x52ca,0x4aaa,0x4aaa,0x4aaa,0x52ea,0x52ea,0x4aaa,0x4aaa,0x4aca,0x4aaa,0x4aca,0x52cb,0x2943,0x4aad,0xe79e,0xf7ff,0xf7de,0xffff,0xffff,0xf7de,0xf7ff,0xbe77,0x6bcd,0x8cb1,0x52c9,0x0000,0x18c3,0x18e3,0x18e3,0x3a28,0x5b4c,0x530b,0x52ea,0x52eb,0x52eb,0x52ea,0x52eb,0x52ea,0x52ca,0x52ca,0x52eb,0x52eb,0x52ea,0x52ca,0x52eb,0x52ca,0x52ca,0x52ca,0x52ca,0x52eb,0x52eb,0x4aca,0x4aca,0x52ca,0x52ca,0x3a28,0x0000,0x532d,0xdf7d,0xf7bd,0xf7dd,0xffde,0xffde,0xf7bc,0xf7de,0xd6da,0x8470,0x4a89,0x0000,0x2145,0x2165,0x2104,0x4269,0x5b4c,0x5b2b,0x5b2b,0x5b2b,0x530b,0x52eb,0x52eb,0x52eb,0x52ea,0x52ea,0x4aca,0x4aaa,0x52ea,0x52ea,0x52ca,0x5b0b,0x5b4c,0x4a69,0x18e3,0x2145,0x1082,0x0840,0x10c2,0x1102,0x1142,0x0121,0x0901,0x08a1,0x0000,0x1903,0x3a07,0x0861,0x1082,0x0861,0x10c2,0x18e3,0x10a2,0x1082,0x0861,0x1082,0x0041,0x31c6,0x3a07,0x2965,0x2965,0x2144,0x2965,0x2985,0x2985,0x4a49,0x2965,0x29a6,0x2985,0x2945,0x31a6,0x39e7,0x39e7,0x4248,0x4269,0x4248,0x4248,0x4248,0x4248,0x4269,0x4228,0x3a28,0x3a28,0x4228,0x3a08,0x39e7,0x3a08,0x3a07,0x3a08,0x3a28,0x4a89,0x3a28,0x4228,0x4248,0x3a08,0x3a08,0x39e7,0x3a07,0x39e7,0x39e7,0x39e7,0x39e7,0x3a08,0x4228,0x3a07,0x3a07,0x3a28,0x4248,0x3a48,0x4269,0x4a89,0x4aa9,0x4248,0x4269,0x4a69,0x39e7,0x1903,0x4a89,0x4a89,0x39e7,0x3a07,0x2103,0x31a6,0x52ea,0x52ca,0x39e7,0x4248,0x4248,0x4249,0x4a69,0x52aa,0x0861,0x10a2,0x18c2,0x18e3,0x1903,0x18e3,0x18e3,0x18e3,0x0020,0x10a2,0x3a48,0x2184,0x0942,0x0020,0x0040,0x0060,0x0081,0x0020,0x0861,0x1082,0x0000,0x2965,0x528a,0x31a6,0x39e7,0x636d,0x6b8d,0x6b6d,0x6b8d,0x6bad,0x6b8d,0x632c,0x6b6d,0x634c,0x634c,0x6b6d,0x634c,0x634c,0x636c,0x634c,0x634c,0x6bae,0x52cb,0x10a2,0x2965,0x2945,0x1082,0x2124,0x3185,0x39c6,0x2985,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x2985,0x3a08,0x2986,0x4a69,0x6b6d,0x6b6d,0x9c4a,0xb4ea,0xb4ca,0xb4e9,0x8beb,0x530b,0x5b0b,0x630c,0x632c,0x634c,0x634c,0x632c,0x634d,0x632c,0x5b0b,0x5b0c,0x632c,0x632c,0x632c,0x632c,0x630b,0x5aeb,0x5aeb,0x2945,0x2165,0x3a07,0x3185,0x2123,0x2103,0x18e3,0x2104,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0x2965,0x2985,0x5aea,0x4aab,0x8bea,0xd548,0xd529,0xd548,0xd509,0x734a,0x5aeb,0x5aeb,0x5b0c,0x5b0c,0x630c,0x5b0c,0x632c,0x630b,0x632c,0x5b0c,0x5aeb,0x5aeb,0x5b0b, +0x52ca,0x52ca,0x52ca,0x52ca,0x52eb,0x52ea,0x52ca,0x52ca,0x4aaa,0x4aca,0x52ca,0x52eb,0x52eb,0x52ca,0x4aca,0x52ca,0x52ca,0x4aca,0x530b,0x18c0,0x6391,0xef9e,0xefdf,0xf7de,0xf7de,0xf7de,0xf7de,0xf7ff,0xced9,0x7c2e,0x8cb1,0x634b,0x0000,0x18e3,0x2103,0x2104,0x31c7,0x5b4c,0x530b,0x5b2b,0x530b,0x52ea,0x52ca,0x52ea,0x5b2b,0x52eb,0x52ca,0x5b0b,0x530b,0x52ca,0x52ca,0x52eb,0x530b,0x52ea,0x52ea,0x52eb,0x52ca,0x52eb,0x52ea,0x52ca,0x52ea,0x4aca,0x3a27,0x0000,0x3a8a,0xdf5d,0xfffe,0xffde,0xfffe,0xf7dd,0xf7bc,0xfffe,0xd6da,0x8490,0x52aa,0x0000,0x2165,0x2145,0x2144,0x4aaa,0x5b2c,0x5b4c,0x530b,0x5b2b,0x530b,0x52eb,0x530b,0x52eb,0x52eb,0x52ca,0x4aaa,0x4aca,0x4aca,0x52ea,0x52eb,0x530b,0x5b4c,0x3a48,0x18e3,0x2985,0x0881,0x0020,0x10e2,0x0922,0x1183,0x0962,0x0901,0x08a1,0x0000,0x1903,0x3a07,0x0000,0x0020,0x0841,0x0020,0x0040,0x0841,0x0020,0x0020,0x0000,0x10a2,0x18c3,0x10a2,0x10a2,0x1082,0x0841,0x0840,0x0841,0x0841,0x0020,0x2965,0x2144,0x2985,0x2985,0x2124,0x2965,0x31a5,0x31a6,0x31a6,0x31a6,0x31a6,0x2985,0x31a6,0x31a6,0x2965,0x2945,0x2965,0x2965,0x2985,0x2965,0x2985,0x2965,0x2985,0x2985,0x31c6,0x31a6,0x2985,0x2986,0x2986,0x2986,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2985,0x2985,0x2985,0x2985,0x2985,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31c6,0x39e7,0x39e7,0x2965,0x10a2,0x4a89,0x4a69,0x4228,0x4248,0x2103,0x2124,0x31a6,0x31c6,0x2965,0x2965,0x2965,0x2985,0x31a6,0x31c6,0x10a2,0x0841,0x1082,0x1082,0x1082,0x1082,0x1082,0x10a2,0x0040,0x1082,0x3a08,0x2184,0x0982,0x0060,0x0040,0x0060,0x0081,0x0841,0x0841,0x0841,0x0000,0x1904,0x4228,0x31c6,0x31e7,0x636d,0x6bae,0x636d,0x634c,0x6b8d,0x6b6d,0x634c,0x638d,0x636c,0x634c,0x632c,0x5b0b,0x636c,0x636d,0x634c,0x6b8d,0x73ce,0x5aeb,0x1081,0x31a6,0x2965,0x18c3,0x1082,0x0841,0x0020,0x0020,0x0000,0x10a2,0x18e3,0x18e3,0x2104,0x1082,0x31a6,0x4a8a,0x31a6,0x52a9,0x738d,0x634c,0x9c4a,0xac6a,0xac6a,0xb4aa,0x8bab,0x5b2c,0x630b,0x5aeb,0x634c,0x634c,0x632c,0x5b0c,0x5b2c,0x5b0c,0x5b0b,0x632c,0x5aeb,0x632c,0x634c,0x630b,0x5aea,0x5b0b,0x5aeb,0x2965,0x3a07,0x4228,0x2965,0x18e3,0x2124,0x2104,0x18e3,0x18e3,0x18c3,0x10a2,0x18c3,0x2104,0x2104,0x2965,0x31a6,0x2104,0x2965,0x5b0b,0x5aeb,0x6b0a,0x8ba9,0x8b8a,0x8ba9,0x8389,0x630b,0x5aeb,0x5acb,0x5b0c,0x5b0c,0x5b0c,0x630c,0x632c,0x632c,0x630c,0x52cb,0x52ca,0x5aeb,0x5aeb, +0x52ea,0x52eb,0x52ca,0x52eb,0x52eb,0x52cb,0x52eb,0x52eb,0x4aca,0x4aca,0x4aca,0x52eb,0x52ea,0x4aca,0x4aca,0x4aca,0x52aa,0x52ca,0x52eb,0x39e5,0x4a8d,0xe77e,0xf7ff,0xffde,0xf7de,0xf7de,0xf7be,0xf7ff,0xc657,0x73ed,0x8cb0,0x52ea,0x0000,0x18e3,0x2124,0x2104,0x4269,0x636c,0x5b2b,0x530b,0x52eb,0x52eb,0x4aca,0x4aca,0x52eb,0x4aca,0x52ea,0x52eb,0x52ca,0x52ea,0x52ea,0x52ea,0x52ea,0x52ea,0x530b,0x530b,0x52eb,0x52ca,0x52ea,0x52ca,0x4aca,0x4aaa,0x31a6,0x2124,0x0000,0xbe58,0xffff,0xffde,0xf7dd,0xf7dd,0xfffe,0xfffe,0xbe37,0x8490,0x3a07,0x0000,0x2965,0x2144,0x2144,0x4aaa,0x5b0b,0x5b2b,0x5b2b,0x52ea,0x5b0b,0x530b,0x530b,0x52ca,0x5b0b,0x52ea,0x4aca,0x4aaa,0x52ca,0x52ea,0x530b,0x532b,0x5b4c,0x4a89,0x18e3,0x31c6,0x0882,0x0000,0x10e2,0x1183,0x09a2,0x0962,0x0922,0x08c1,0x0000,0x1904,0x4228,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2144,0x1903,0x0861,0x1082,0x1061,0x1082,0x1082,0x10a2,0x0840,0x0861,0x10c3,0x2124,0x2985,0x2985,0x31c6,0x2145,0x2965,0x2965,0x2124,0x2145,0x2145,0x2144,0x2124,0x2144,0x2965,0x2145,0x2145,0x2145,0x2145,0x2965,0x2965,0x2965,0x2985,0x2965,0x2145,0x2965,0x2986,0x2986,0x2965,0x31a6,0x2986,0x31c6,0x31c6,0x31c7,0x31c6,0x31a6,0x31a6,0x2986,0x3186,0x3186,0x31a6,0x31c6,0x31a6,0x3a07,0x3a07,0x31c7,0x31a6,0x31a6,0x31a6,0x31a6,0x31c6,0x4a89,0x4aaa,0x4aa9,0x4268,0x2965,0x2965,0x2965,0x2986,0x2986,0x2986,0x31a6,0x31a6,0x31a6,0x4248,0x2965,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39c7,0x2184,0x09c3,0x0060,0x0040,0x0060,0x0881,0x0841,0x0841,0x0841,0x0000,0x1904,0x3a08,0x31c6,0x31e7,0x6b8e,0x73ef,0x6b6d,0x6b6d,0x634c,0x6b4d,0x6b6d,0x6b6d,0x634c,0x634c,0x636c,0x6b6d,0x6b4c,0x636c,0x636d,0x6b6d,0x73ce,0x5aeb,0x10a2,0x31c7,0x2986,0x10a2,0x18c3,0x18c3,0x10a2,0x1082,0x1082,0x0861,0x0841,0x0020,0x0841,0x0000,0x39c7,0x5acb,0x31a6,0x528a,0x6b8d,0x632c,0xc529,0xdd88,0xdd69,0xdda8,0xa44a,0x532c,0x632c,0x632c,0x630b,0x632c,0x630c,0x630b,0x5b0b,0x5b0b,0x632c,0x632c,0x5b0b,0x5aeb,0x6b4d,0x632c,0x5b0b,0x632c,0x5aeb,0x2124,0x3a28,0x3a08,0x2103,0x2124,0x2124,0x2124,0x2103,0x18c3,0x10a2,0x0861,0x0020,0x0841,0x0020,0x2945,0x39c7,0x2966,0x31a6,0x5aea,0x52cb,0x9c2a,0xe5a8,0xe588,0xe5c8,0xdd68,0x7349,0x5b0c,0x5aeb,0x5aeb,0x5b0b,0x630c,0x630c,0x5b0b,0x632c,0x52cb,0x52aa,0x52ca,0x5aeb,0x5aeb, +0x52eb,0x52ca,0x52ca,0x52eb,0x52eb,0x52eb,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x52ea,0x52ca,0x4aaa,0x4aca,0x52ca,0x4aaa,0x4aca,0x52eb,0x3a07,0x0000,0xb5f9,0xffff,0xffff,0xffff,0xffdf,0xffff,0xdf5b,0x7c0d,0x6309,0x636c,0x2964,0x0000,0x18e3,0x2104,0x2124,0x31e7,0x636d,0x5b4c,0x5b0b,0x530b,0x52eb,0x52ea,0x4aca,0x52ea,0x4aca,0x52ea,0x52aa,0x52ca,0x52eb,0x52ea,0x52ca,0x52eb,0x52ca,0x4aca,0x4aca,0x4aca,0x52ca,0x4aca,0x52ea,0x4aca,0x4aa9,0x31c6,0x1904,0x0800,0x3a89,0xcefa,0xf7ff,0xffff,0xf7fe,0xe75c,0xb5f6,0x7c4f,0x5b2b,0x0000,0x1081,0x2124,0x2124,0x2124,0x4a89,0x5b4c,0x530b,0x5b2b,0x52ca,0x5b0b,0x52eb,0x530b,0x52ea,0x52ca,0x52eb,0x4aaa,0x4a89,0x4aaa,0x52ca,0x530b,0x532b,0x5b4c,0x4228,0x18e3,0x4248,0x1082,0x0000,0x10e2,0x1183,0x09c3,0x0982,0x0942,0x08e1,0x0060,0x0882,0x4aaa,0x5b2c,0x636c,0x5b4c,0x4289,0x4248,0x4228,0x4269,0x52ca,0x4248,0x3a07,0x3a07,0x2965,0x2145,0x2965,0x2144,0x2104,0x2144,0x31c7,0x2124,0x2965,0x2986,0x31c7,0x31c7,0x31c6,0x3a07,0x4248,0x4a69,0x4289,0x4249,0x4249,0x4289,0x4248,0x4248,0x4249,0x4248,0x4269,0x4269,0x4248,0x4269,0x4249,0x4269,0x4a69,0x4a8a,0x4a8a,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x52ca,0x4aaa,0x52ca,0x52eb,0x52eb,0x52eb,0x52ca,0x52cb,0x52eb,0x52eb,0x52ca,0x52eb,0x52eb,0x530b,0x5b2b,0x530b,0x5b0c,0x5b0c,0x5b2c,0x5b2b,0x5b4c,0x530b,0x4289,0x52cb,0x52cb,0x4269,0x2986,0x2985,0x2965,0x2144,0x2124,0x2145,0x2966,0x2986,0x2986,0x4248,0x4a89,0x4aaa,0x634c,0x52aa,0x4a89,0x4aaa,0x4a89,0x52eb,0x5b2c,0x636d,0x5aeb,0x1122,0x11e3,0x0040,0x0040,0x0060,0x0881,0x0861,0x0841,0x0841,0x0000,0x2124,0x4228,0x39c7,0x39e7,0x6bae,0x73ef,0x73ce,0x6bae,0x636d,0x6b6d,0x6b6d,0x632c,0x6b6d,0x6b8d,0x638d,0x6b8d,0x634c,0x634c,0x636c,0x6b6d,0x7c0f,0x632c,0x18a2,0x31c7,0x2986,0x1082,0x10a2,0x10a2,0x10a2,0x1082,0x1082,0x0861,0x0020,0x0000,0x0841,0x0020,0x31a7,0x52aa,0x31a6,0x4aaa,0x73cd,0x630c,0xa44a,0xcd08,0xc4e9,0xc509,0x8bea,0x5b0d,0x632c,0x630b,0x632c,0x632c,0x6b8d,0x632c,0x632c,0x632c,0x634c,0x632c,0x632c,0x632c,0x632c,0x632c,0x5aeb,0x632c,0x630c,0x2124,0x4228,0x4249,0x2944,0x2945,0x2104,0x2104,0x2103,0x18c3,0x18c3,0x0861,0x0000,0x0020,0x0020,0x2124,0x31a6,0x2125,0x3186,0x5aeb,0x5b2c,0x7b8b,0xac68,0xb468,0xb469,0xa428,0x6b2a,0x632c,0x5aeb,0x5aeb,0x5aeb,0x630c,0x632c,0x632c,0x630b,0x52aa,0x5aeb,0x5aeb,0x5acb,0x5aeb, +0x52ea,0x52eb,0x52ea,0x52eb,0x52eb,0x52ea,0x52eb,0x52ca,0x52ca,0x52ca,0x52ca,0x52ea,0x52ca,0x52ca,0x52ca,0x4aaa,0x52ca,0x52ca,0x52ca,0x4248,0x18c1,0x1905,0xbe39,0xf7df,0xf7fe,0xefde,0xced9,0x7c4f,0x3a27,0x4a89,0x31a6,0x0000,0x18c3,0x18c3,0x18e3,0x2124,0x3a07,0x5b6c,0x5b2b,0x52ea,0x4aca,0x52ea,0x52ca,0x4aca,0x52ca,0x52ea,0x52ca,0x52ca,0x52ca,0x52ca,0x52ea,0x52ca,0x52ca,0x4aca,0x4aaa,0x4aaa,0x4aaa,0x52ca,0x4aca,0x4aaa,0x4aca,0x4aaa,0x31a6,0x10a2,0x2145,0x0000,0x2945,0x8cd2,0x9d54,0x94f2,0x73ee,0x636c,0x52ea,0x0040,0x0000,0x0881,0x2104,0x1904,0x2104,0x4269,0x530b,0x530a,0x52ea,0x52ea,0x5b0b,0x52eb,0x5b0b,0x52eb,0x4aca,0x4aca,0x4aca,0x4aaa,0x4aaa,0x4aa9,0x4aaa,0x530b,0x532b,0x39e7,0x1903,0x52ca,0x10a2,0x0000,0x10e2,0x1183,0x11c3,0x0982,0x0962,0x0901,0x0080,0x0841,0x4268,0x530b,0x5b2b,0x5b4c,0x4289,0x4269,0x4289,0x4aaa,0x4aca,0x4aaa,0x4289,0x4248,0x3a28,0x3a07,0x31e7,0x31a6,0x29a6,0x31a6,0x31c7,0x31c6,0x31a6,0x3a08,0x4269,0x31c6,0x3a07,0x4248,0x3a48,0x3a28,0x4248,0x4269,0x3a28,0x3a48,0x3a28,0x3a28,0x3a48,0x4249,0x4269,0x4248,0x4248,0x3a28,0x4248,0x4269,0x3a48,0x4248,0x4269,0x4269,0x3a28,0x31e7,0x3a07,0x3a07,0x4228,0x4248,0x3a28,0x4248,0x4269,0x4289,0x4269,0x4289,0x4a89,0x4a89,0x4a89,0x4aaa,0x4aca,0x4aca,0x4aca,0x52cb,0x52eb,0x52ea,0x530b,0x532c,0x4aeb,0x4aaa,0x4aaa,0x52eb,0x4aaa,0x4269,0x4248,0x4248,0x3a08,0x3a07,0x3a28,0x4228,0x4249,0x4269,0x52ca,0x52eb,0x5b2c,0x740f,0x6b8d,0x52eb,0x5b0b,0x5b0c,0x5b4c,0x5b2c,0x6bae,0x632c,0x0101,0x1a04,0x0040,0x0040,0x0060,0x0881,0x0861,0x0841,0x0841,0x0000,0x2965,0x52ca,0x31c6,0x4248,0x6bae,0x73ce,0x6b8d,0x6b8d,0x6b8d,0x6bad,0x636c,0x632c,0x6b6d,0x6b6d,0x6b8d,0x5b2c,0x630c,0x634c,0x634c,0x6b8d,0x73ef,0x5aeb,0x18c3,0x31c7,0x31a6,0x0841,0x0882,0x1081,0x1081,0x10a2,0x1082,0x0861,0x0020,0x0000,0x0841,0x0000,0x39e7,0x4aaa,0x2945,0x4a69,0x738d,0x530c,0xd5aa,0xfea8,0xfe88,0xfe88,0xa449,0x52ec,0x6b4c,0x632c,0x632c,0x632c,0x634c,0x634c,0x634c,0x632c,0x5b0c,0x632c,0x632c,0x632c,0x632b,0x5b0b,0x5aeb,0x634c,0x632c,0x2124,0x39e7,0x39e8,0x2124,0x18e3,0x2103,0x18e3,0x18c3,0x18c2,0x18c2,0x0841,0x0020,0x0021,0x0020,0x2945,0x31a6,0x2104,0x29a5,0x630c,0x52cc,0x8c09,0xfe69,0xfe48,0xfe48,0xeda7,0x6b0b,0x52eb,0x5aeb,0x630c,0x630c,0x5b0c,0x632c,0x632c,0x5b0b,0x5aeb,0x5aca,0x5aca,0x5acb,0x5acb, +0x52eb,0x5b0b,0x52ea,0x52ca,0x52ca,0x52ca,0x4aca,0x52ca,0x4aca,0x3aca,0x4aca,0x52ea,0x4aca,0x3aaa,0x42ca,0x42aa,0x3aaa,0x42aa,0x52ca,0x3a07,0x2125,0x0840,0x0000,0x6b6d,0x8c91,0x73ee,0x31c5,0x0000,0x3186,0x2124,0x0840,0x10a2,0x1082,0x10a2,0x18e3,0x2124,0x3a07,0x5b2c,0x52eb,0x52eb,0x52ca,0x4aca,0x4aaa,0x52ea,0x52ca,0x52ca,0x52ca,0x52ca,0x52aa,0x4aaa,0x428a,0x4aca,0x4ac9,0x52ea,0x4aaa,0x4289,0x4aaa,0x4aaa,0x4aaa,0x4aaa,0x4aca,0x4a89,0x2985,0x18c3,0x18e3,0x18e3,0x0000,0x0000,0x0000,0x0000,0x0000,0x2965,0x0021,0x0000,0x0841,0x0020,0x18e3,0x2104,0x1904,0x4269,0x530b,0x530b,0x532b,0x52ea,0x52ea,0x52eb,0x5b0b,0x530b,0x4aca,0x4aca,0x52ea,0x4aca,0x4aaa,0x52ca,0x52ca,0x5b2c,0x530b,0x2985,0x2144,0x5b4c,0x10a2,0x0820,0x10c2,0x1142,0x11c3,0x0982,0x0982,0x0922,0x0060,0x0000,0x5b4c,0x530b,0x4269,0x4289,0x4a89,0x4289,0x4269,0x4248,0x4289,0x4a89,0x4a89,0x4249,0x3a28,0x31c6,0x29a6,0x39e7,0x39e7,0x31e7,0x31c7,0x3a08,0x4269,0x4aca,0x5b4c,0x5b2b,0x52ea,0x530b,0x530b,0x5b2b,0x5b2b,0x5b4b,0x5b0b,0x530b,0x532b,0x5b2c,0x5b2b,0x5b4c,0x5b2b,0x530b,0x530b,0x530b,0x52eb,0x52eb,0x52eb,0x5b0b,0x530b,0x530b,0x530b,0x52eb,0x5b0b,0x5b0b,0x5b4c,0x5b4c,0x5b4c,0x5b0b,0x52eb,0x52eb,0x530b,0x52eb,0x5b0b,0x5b0b,0x5b2b,0x530b,0x5b2b,0x636d,0x634d,0x634c,0x6bce,0x6bce,0x6bad,0x638d,0x52eb,0x6bae,0x740f,0x636c,0x5b2b,0x5b2b,0x4aaa,0x4aaa,0x4289,0x4aaa,0x4aca,0x4aaa,0x4acb,0x52eb,0x5b2c,0x52eb,0x4aca,0x52eb,0x4a89,0x4a89,0x4269,0x4249,0x4aaa,0x4a8a,0x634c,0x52eb,0x0122,0x19e4,0x0020,0x0040,0x0060,0x0881,0x0881,0x0040,0x0861,0x0000,0x2965,0x52aa,0x39c7,0x4228,0x6bae,0x73ce,0x6bad,0x6bae,0x738d,0x6b6d,0x634c,0x634d,0x6b6d,0x634c,0x636d,0x5b2c,0x5b2c,0x5b0b,0x6b8d,0x6bae,0x73ae,0x634c,0x2103,0x31e7,0x31c7,0x0820,0x0861,0x1081,0x0861,0x1082,0x1082,0x0861,0x0020,0x0020,0x0861,0x0841,0x31c7,0x4aab,0x4208,0x4a68,0x6b8d,0x530d,0xacaa,0xfe89,0xfe89,0xee28,0x7b4b,0x5b0c,0x632c,0x634c,0x632c,0x632c,0x636d,0x634c,0x634c,0x6b6d,0x634c,0x630c,0x5aeb,0x5b2c,0x632c,0x5b0b,0x5aeb,0x5b0b,0x630c,0x3185,0x31a7,0x39e7,0x2104,0x18e3,0x18e3,0x10a2,0x10a2,0x18c2,0x18c2,0x0841,0x0020,0x0841,0x0000,0x2965,0x39c7,0x2125,0x2965,0x5aeb,0x632c,0x6b2b,0xede9,0xfe28,0xfe28,0xd508,0x528b,0x632b,0x632c,0x5b0c,0x632c,0x630c,0x5b0c,0x632c,0x630c,0x52ca,0x5aca,0x5aeb,0x5acb,0x5aeb, +0x52ea,0x52eb,0x52ea,0x52eb,0x52ca,0x52eb,0x5b0b,0x4aeb,0x62ea,0x82ca,0x5aca,0x4aea,0x6aca,0x8aea,0x7aeb,0x6aaa,0x82ca,0x7aea,0x52ca,0x39e6,0x10e3,0x2104,0x2924,0x0000,0x0000,0x0000,0x0000,0x10a2,0x0000,0x0020,0x1081,0x1082,0x0020,0x1082,0x10a2,0x1903,0x39e7,0x52eb,0x52eb,0x5b0b,0x52ca,0x52ca,0x52ca,0x4aaa,0x52ca,0x4aca,0x52ca,0x4a8a,0x4aca,0x630a,0x7389,0x52c9,0x52ca,0x4aaa,0x52c9,0x5ae9,0x52a9,0x52e9,0x52ea,0x5aea,0x630a,0x4aea,0x31c5,0x18c3,0x1903,0x18c3,0x1082,0x18e3,0x18e3,0x18c3,0x0861,0x0000,0x0840,0x0861,0x0000,0x0020,0x18e3,0x1904,0x1904,0x4a89,0x530b,0x532b,0x530b,0x5b2b,0x5b2b,0x5b2b,0x530b,0x530b,0x52ea,0x52ca,0x52ea,0x530b,0x530b,0x4aca,0x52eb,0x5b4c,0x636c,0x39e6,0x18c3,0x4aaa,0x10c2,0x0841,0x10a2,0x10e2,0x1163,0x0982,0x1163,0x08e2,0x0902,0x18e3,0x6b8d,0x4248,0x31a6,0x31e7,0x31e7,0x31e7,0x31c7,0x31c7,0x39e7,0x3a07,0x31e7,0x3186,0x2965,0x2945,0x2985,0x31a6,0x31c6,0x39e7,0x29a6,0x31c6,0x39e7,0x3a07,0x4a89,0x4aaa,0x4a89,0x4248,0x4268,0x4a89,0x4aa9,0x4269,0x4aa9,0x4aca,0x4aaa,0x4a89,0x4a89,0x4aaa,0x52ea,0x4aaa,0x4a89,0x4aaa,0x4aca,0x4aaa,0x52ca,0x52ca,0x52eb,0x52ca,0x530b,0x5b2c,0x5b0b,0x52eb,0x530b,0x52ea,0x52eb,0x52ea,0x52eb,0x52eb,0x5b0b,0x530b,0x5b2c,0x5b0b,0x5b2c,0x530b,0x530b,0x530b,0x5b4c,0x5b4c,0x5b4c,0x6b8d,0x6bae,0x638d,0x5b2b,0x73ee,0x7c2f,0x63ad,0x530b,0x5b2c,0x5b2b,0x5b2c,0x5b0b,0x52eb,0x530b,0x5b2c,0x5b4c,0x636c,0x6b8d,0x6b8d,0x6bae,0x73ce,0x6bae,0x6bce,0x73ce,0x73ef,0x8450,0x8451,0x9d33,0x6b8d,0x0100,0x19e4,0x0000,0x0060,0x00a1,0x08a1,0x0861,0x0041,0x0020,0x0000,0x18e3,0x4228,0x31c7,0x39e7,0x6b8d,0x6bae,0x73ce,0x6bae,0x6b8d,0x738d,0x6b6d,0x6b6d,0x6b6d,0x6b6d,0x634c,0x632c,0x5b2c,0x634c,0x636c,0x6b6d,0x73ae,0x632c,0x0861,0x3a08,0x31c7,0x0000,0x0841,0x0841,0x0841,0x0861,0x0861,0x0861,0x0020,0x0000,0x18c2,0x18c3,0x3a28,0x4aaa,0x39e7,0x52ca,0x73ad,0x634d,0x83eb,0xf669,0xfec9,0xdd88,0x630c,0x632c,0x632c,0x634c,0x632c,0x632c,0x636d,0x6b6d,0x6b4d,0x6b6d,0x634d,0x5b0b,0x5b0b,0x5b0b,0x632c,0x632c,0x5b0c,0x632c,0x630c,0x3185,0x31c7,0x39c7,0x18e3,0x10a2,0x18c2,0x1081,0x10a2,0x1082,0x1082,0x0841,0x0000,0x18c3,0x10a2,0x2165,0x39e8,0x2945,0x2965,0x5aeb,0x6b4c,0x4acb,0xcd49,0xfe88,0xfe28,0xb449,0x4acb,0x630b,0x5b0c,0x632c,0x632c,0x632c,0x5b0b,0x5aeb,0x5b0c,0x5acb,0x52ca,0x5aca,0x52ca,0x5aca, +0x52eb,0x52ea,0x52eb,0x52ca,0x52ca,0x5aeb,0x4aeb,0x9b4b,0xeb6b,0xeb6b,0xe34a,0x82ca,0xdb6b,0xeb6a,0xab0a,0xd34b,0xeb6a,0xb2e9,0x5aea,0x4227,0x18e3,0x1904,0x1904,0x31c6,0x2944,0x10c2,0x1082,0x10a2,0x1082,0x1081,0x0840,0x0020,0x1081,0x18c3,0x10a2,0x2124,0x4248,0x5b0b,0x530b,0x52ca,0x52eb,0x52eb,0x4aaa,0x4aca,0x52ca,0x52eb,0x52ca,0x52ca,0x428a,0xbce8,0xede7,0xd528,0x5ae9,0x5ae9,0x3249,0xcd08,0xa448,0xc528,0xb488,0xb4c8,0xac88,0x322a,0x2984,0x10c3,0x18e3,0x1903,0x2103,0x1081,0x0020,0x0841,0x1081,0x1082,0x0861,0x0000,0x0840,0x18e3,0x1904,0x2104,0x2945,0x4aaa,0x530b,0x530b,0x52eb,0x530b,0x52ea,0x4aca,0x52ea,0x530b,0x530b,0x52ea,0x530b,0x5b2b,0x532b,0x530b,0x52ea,0x5b2b,0x5b4c,0x31c6,0x10a2,0x31e6,0x1082,0x1061,0x10c2,0x08a1,0x08a1,0x00a1,0x0080,0x0020,0x10c2,0x0881,0x0881,0x10a2,0x18e3,0x18e3,0x18c3,0x18e3,0x1904,0x1903,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x2104,0x2103,0x18e3,0x1903,0x1904,0x1903,0x18c3,0x18c2,0x18e3,0x10a2,0x1082,0x10c2,0x10c3,0x10a2,0x10a2,0x1082,0x1082,0x1082,0x1082,0x10a2,0x10c2,0x10c3,0x18e3,0x18e3,0x1903,0x18c3,0x2985,0x31a6,0x10c2,0x18e3,0x18e3,0x1904,0x1904,0x2124,0x2124,0x18e3,0x1904,0x18e3,0x18e3,0x1904,0x2124,0x2144,0x2144,0x2144,0x2124,0x2144,0x2124,0x2144,0x2144,0x2144,0x2145,0x2165,0x2144,0x2124,0x2145,0x2124,0x2144,0x2965,0x2124,0x2124,0x31a6,0x2965,0x2985,0x39e7,0x39e7,0x31a6,0x31a6,0x31c6,0x39e7,0x3a07,0x4208,0x4228,0x4248,0x4248,0x4248,0x4269,0x4a89,0x4a89,0x52aa,0x52aa,0x52aa,0x5b2b,0x39e7,0x0983,0x1163,0x0000,0x0040,0x0881,0x0881,0x0861,0x0041,0x0040,0x0000,0x1904,0x4248,0x31a6,0x31a6,0x6bae,0x73ef,0x6bae,0x6b8d,0x6b8d,0x6b6d,0x73ae,0x6b8d,0x634c,0x6b8d,0x5b0b,0x5b0b,0x634c,0x634c,0x634c,0x634c,0x6bae,0x5b0b,0x18c2,0x3a08,0x3186,0x0841,0x0020,0x0020,0x0020,0x0861,0x0861,0x0020,0x0020,0x18e3,0x2945,0x2104,0x31e7,0x4269,0x31a6,0x4aaa,0x6b8d,0x6b6c,0x632c,0xe5e9,0xfea8,0xb48a,0x5b2c,0x6b4c,0x634d,0x632c,0x632d,0x6b4d,0x634d,0x634c,0x632c,0x6b6d,0x632c,0x632c,0x630c,0x5b0c,0x5b0b,0x5b0c,0x5aeb,0x630c,0x632c,0x3186,0x31c7,0x3a08,0x18c3,0x0861,0x0861,0x0861,0x0841,0x1082,0x0841,0x0000,0x1082,0x2965,0x18e3,0x2985,0x4229,0x2986,0x3186,0x5aeb,0x6b6d,0x5b0c,0x9c2a,0xfe48,0xf608,0x836a,0x52eb,0x630c,0x5b0b,0x5aeb,0x5b0b,0x630c,0x5b0b,0x5b0c,0x5aeb,0x5aeb,0x52cb,0x52aa,0x52aa,0x52ca, +0x52ea,0x52eb,0x52eb,0x52ea,0x52ea,0x52ea,0x42ab,0xdbac,0xcb2a,0x52aa,0xe36a,0xd30a,0xdb6b,0xeb6a,0xa2c9,0xdb6b,0xf38b,0xab0a,0x5aca,0x3a06,0x2104,0x2144,0x2124,0x31c6,0x2985,0x18e3,0x1081,0x1081,0x10a2,0x10a2,0x1081,0x18e3,0x2944,0x1903,0x10a2,0x31a6,0x4228,0x530b,0x5b4c,0x52ea,0x52eb,0x52ea,0x4aca,0x52eb,0x4aca,0x52ea,0x52ca,0x52ca,0x3a6a,0xcd28,0xee07,0xdd87,0x8388,0xede7,0xb467,0xac88,0xe587,0xf5e7,0xedc7,0xe587,0x93c9,0x3a8a,0x39e6,0x2124,0x2104,0x2144,0x2965,0x2144,0x18e3,0x1082,0x10a2,0x10a2,0x1082,0x18c3,0x2124,0x31a5,0x2144,0x2986,0x31c7,0x4aaa,0x52ea,0x52eb,0x530b,0x52ea,0x52ea,0x52eb,0x530b,0x52eb,0x52eb,0x52ea,0x5b2c,0x5b2b,0x52ea,0x52ea,0x5b0b,0x5b4c,0x5b2b,0x3a07,0x10a2,0x31c6,0x10a2,0x0821,0x10a2,0x0881,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0841,0x0841,0x0861,0x0861,0x0861,0x0841,0x0841,0x0861,0x0861,0x0841,0x0041,0x0041,0x0041,0x0020,0x0000,0x0000,0x0000,0x0000,0x0020,0x0840,0x0840,0x0841,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x1082,0x1082,0x1082,0x1082,0x0861,0x0861,0x0882,0x0882,0x0861,0x0861,0x0882,0x0881,0x0882,0x1082,0x10a2,0x0881,0x0861,0x1061,0x0861,0x0861,0x0881,0x1081,0x1082,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0841,0x0841,0x0841,0x0841,0x0841,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0821,0x0000,0x0000,0x0000,0x0020,0x0861,0x0861,0x0840,0x1082,0x0840,0x2104,0x4248,0x2986,0x4249,0x6bae,0x73ce,0x6b8d,0x6b8d,0x6b6d,0x6b8d,0x636d,0x634c,0x636c,0x636c,0x632c,0x632c,0x5b2c,0x632c,0x632c,0x636d,0x73ce,0x632c,0x2124,0x3a28,0x3a08,0x2103,0x1082,0x0041,0x0841,0x0861,0x0841,0x1082,0x2944,0x3185,0x2965,0x2965,0x4a8a,0x4249,0x31a7,0x4aaa,0x6b8d,0x73ad,0x5b2e,0xb50a,0xf648,0x838b,0x636d,0x6b4d,0x6b6d,0x636c,0x632c,0x634c,0x634d,0x634d,0x634c,0x634d,0x634c,0x632c,0x5b0c,0x5b0b,0x634c,0x630c,0x630b,0x632c,0x632c,0x3186,0x31c7,0x3a29,0x2124,0x1061,0x0841,0x0821,0x0861,0x0861,0x0861,0x2124,0x31a5,0x3186,0x18e3,0x31c7,0x4249,0x2986,0x31c6,0x630b,0x6b8d,0x632c,0x632b,0xf649,0xe5a8,0x5acb,0x632c,0x5b0b,0x5b0c,0x5b0b,0x630c,0x5b0b,0x5b0b,0x632c,0x5aeb,0x5aeb,0x5acb,0x52cb,0x52cb,0x5aeb, +0x530b,0x52eb,0x52ca,0x4aca,0x52eb,0x52ea,0x4aeb,0xdb8c,0xd34a,0x62cb,0xe34a,0xd30a,0xdb6b,0xe36a,0x9aca,0xdb6b,0xe36a,0xa30a,0x5aca,0x4207,0x2124,0x2124,0x2124,0x2985,0x31c6,0x2965,0x3186,0x3186,0x31a6,0x3185,0x2965,0x2985,0x3a07,0x10c2,0x31c7,0x4a69,0x4228,0x5b0b,0x52ea,0x530b,0x530b,0x4aca,0x4aca,0x4aca,0x4aa9,0x4aca,0x52ca,0x52ca,0x3a8a,0xcd48,0xe5a7,0xe5a8,0xa428,0xede7,0xbcc8,0x7349,0xfe47,0xe587,0xf5c7,0xedc7,0x52ca,0x532a,0x39e7,0x2986,0x2104,0x2965,0x29a6,0x2965,0x2965,0x2144,0x2965,0x2965,0x2965,0x31a6,0x31a6,0x3a07,0x1924,0x31c7,0x39e7,0x4aca,0x4aca,0x52eb,0x52eb,0x52ea,0x52eb,0x52ea,0x4aca,0x52ca,0x52eb,0x52eb,0x530b,0x5b2b,0x532b,0x530b,0x530b,0x530b,0x5b4c,0x4a89,0x10c2,0x31e6,0x2124,0x0000,0x0861,0x10a2,0x0040,0x0020,0x0020,0x0820,0x0020,0x0020,0x0020,0x0020,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0020,0x0000,0x0020,0x0020,0x0020,0x0020,0x0000,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0020,0x0020,0x0020,0x0020,0x0000,0x0020,0x0020,0x0000,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0841,0x0840,0x0840,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0841,0x0041,0x0841,0x0841,0x0841,0x0841,0x0861,0x0861,0x0841,0x0841,0x0861,0x0861,0x0841,0x0841,0x0841,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x1082,0x10a2,0x18e3,0x10a2,0x0841,0x0000,0x0000,0x0000,0x0020,0x10a2,0x0881,0x0840,0x1082,0x0000,0x39e7,0x5aeb,0x2986,0x4aaa,0x73ce,0x6bad,0x6b6d,0x636d,0x6b8d,0x6b8d,0x634c,0x6b6d,0x634c,0x636d,0x636d,0x634d,0x634c,0x5b2b,0x634c,0x6b6d,0x73ae,0x6b8e,0x31a6,0x3a28,0x4249,0x2945,0x18e3,0x18c3,0x18c3,0x18e3,0x2945,0x39c7,0x4207,0x39e6,0x2944,0x3a28,0x52ec,0x426a,0x31c7,0x630b,0x6b8d,0x738d,0x6b6d,0x73ac,0x83cb,0x6b4c,0x6b8d,0x6b6d,0x632c,0x636d,0x6b6d,0x6b6d,0x636d,0x6b6d,0x6b4d,0x632c,0x6b6d,0x634d,0x5b0b,0x630b,0x632c,0x632c,0x630b,0x632c,0x6b6d,0x3a07,0x29a6,0x4a8a,0x31a7,0x1082,0x18e3,0x18e3,0x18c2,0x18a3,0x2965,0x31a6,0x39e6,0x39c6,0x2945,0x4229,0x31e8,0x2946,0x3a27,0x632c,0x6b6d,0x632c,0x5b0c,0x942a,0x93eb,0x634d,0x6b4c,0x632c,0x632c,0x632c,0x5b0b,0x5b0b,0x5b0c,0x632c,0x5aeb,0x52cb,0x52cb,0x5b0b,0x52cb,0x5aeb, +0x52eb,0x52ea,0x52ea,0x52ea,0x52ca,0x52ca,0x4aeb,0x8aea,0xf38b,0xf38b,0xeb4a,0x82a9,0xdb6b,0x9ac9,0x02cb,0xdb6b,0xaaca,0x02aa,0x630b,0x4a69,0x2165,0x31a6,0x18e3,0x31a6,0x31a6,0x2965,0x3a07,0x3a07,0x4248,0x3a07,0x2985,0x3a27,0x39e7,0x0861,0x31a6,0x3a07,0x4aa9,0x5b2b,0x530b,0x52ea,0x4aea,0x4aca,0x4aca,0x4aca,0x4aa9,0x4aa9,0x4aaa,0x52ca,0x3a8a,0xc528,0xee07,0xd5a7,0x7349,0x530a,0x52c9,0x52e9,0xe5c8,0xa447,0xc528,0xd567,0x3269,0x5b0b,0x4a89,0x31c6,0x31a5,0x1903,0x39e7,0x31c6,0x2985,0x31e7,0x3a07,0x31c6,0x31c6,0x31c6,0x4248,0x31c6,0x1924,0x4228,0x39e7,0x52ca,0x4aa9,0x5b0b,0x5b2b,0x52ea,0x52ea,0x4aea,0x530b,0x52eb,0x4aca,0x52eb,0x52eb,0x530b,0x5b4c,0x5b2b,0x5b4c,0x5b2c,0x5b4c,0x5b0b,0x2985,0x39e7,0x4228,0x0000,0x18e3,0x18e3,0x0861,0x0000,0x0000,0x0000,0x0020,0x0040,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0861,0x10a2,0x10a2,0x0861,0x0020,0x0020,0x0000,0x0020,0x10a2,0x18c2,0x0861,0x0861,0x10a2,0x0000,0x52aa,0x4a69,0x3a08,0x4aaa,0x73ce,0x6bae,0x6b8d,0x6b8d,0x6b8d,0x6b8d,0x6b8d,0x6b8d,0x634c,0x636d,0x634c,0x636d,0x634c,0x636d,0x6b6d,0x634c,0x6bae,0x73cf,0x4228,0x3a28,0x4249,0x3186,0x2104,0x2104,0x18e3,0x2945,0x4228,0x3a08,0x4207,0x4207,0x2985,0x426a,0x428a,0x4a8a,0x4a89,0x6b4d,0x6b6d,0x6b8d,0x73ad,0x6b8d,0x6b6d,0x634c,0x6b6c,0x6b6d,0x6b4d,0x634d,0x6b8e,0x6b6d,0x634c,0x6b6d,0x6b8e,0x6b6d,0x634c,0x634d,0x632c,0x632c,0x634d,0x632c,0x632c,0x634d,0x6b8d,0x5b0b,0x31c6,0x4a8a,0x426a,0x1082,0x18a2,0x2104,0x1062,0x3a07,0x31c8,0x2986,0x31a6,0x2944,0x3a08,0x3a28,0x31e7,0x3a08,0x52ca,0x6b6d,0x6b6d,0x6b4c,0x6b4c,0x4acc,0x5b0c,0x634c,0x634c,0x632c,0x632c,0x634d,0x5b0c,0x5b0b,0x5b0b,0x630c,0x5b0c,0x52cb,0x52eb,0x5aeb,0x5aeb,0x5aeb, +0x52ea,0x52eb,0x52ea,0x52ca,0x52ea,0x52ca,0x5aca,0x4aca,0x6acb,0x8aea,0x62aa,0x4aca,0x7aeb,0x6aea,0x5aeb,0x730b,0x72eb,0x5acb,0x5aeb,0x52ca,0x2965,0x3a28,0x31c6,0x1082,0x3186,0x39c7,0x39e6,0x39e7,0x3a07,0x31c6,0x31c6,0x4227,0x1903,0x18c3,0x3185,0x39e7,0x52ea,0x52eb,0x52eb,0x52ca,0x52ea,0x4aca,0x52ca,0x52ca,0x4aca,0x4aaa,0x4aca,0x4aaa,0x4aca,0x6b4a,0x83c9,0x6b0a,0x52ca,0x4ac9,0x52aa,0x5b0a,0x7349,0x5ae9,0x6b2a,0x6b49,0x52ea,0x52ea,0x52ca,0x31a5,0x4aaa,0x29a7,0x31a6,0x4248,0x31c6,0x3a07,0x31e7,0x4248,0x3a27,0x3a07,0x4248,0x2124,0x31c6,0x52ca,0x4aa9,0x530b,0x4aaa,0x530b,0x530b,0x52eb,0x52eb,0x4aea,0x52eb,0x52ea,0x52ca,0x52eb,0x52eb,0x52eb,0x52ea,0x530b,0x5b4c,0x636d,0x5b4c,0x52eb,0x31e7,0x2144,0x5b2c,0x29a6,0x0000,0x2124,0x18e3,0x1081,0x0861,0x0000,0x0840,0x1081,0x0860,0x0841,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0861,0x10a2,0x1082,0x0000,0x0000,0x0000,0x0000,0x0841,0x10c2,0x10c2,0x1081,0x18e3,0x0000,0x2985,0x5aeb,0x31a6,0x4269,0x634d,0x73ce,0x6bae,0x6bae,0x6b6d,0x6b8d,0x6b6d,0x6b6d,0x6b8d,0x6b8d,0x636d,0x634c,0x636d,0x6b6d,0x6b6d,0x634c,0x5b4c,0x6bce,0x73ce,0x632c,0x31c7,0x3a08,0x4249,0x31a6,0x2104,0x10a2,0x31a6,0x4a69,0x3a08,0x31a6,0x31a6,0x3a07,0x52aa,0x5b2c,0x5b0b,0x6b4c,0x6b8e,0x6b8e,0x6b8d,0x6b8d,0x6b6d,0x6b6c,0x634c,0x636c,0x634d,0x6b6d,0x6b6d,0x6b4d,0x6b6d,0x634c,0x634d,0x6b6d,0x634d,0x634c,0x6b8d,0x6b8d,0x634c,0x636c,0x632c,0x632c,0x6b6d,0x6b6d,0x6b8d,0x4248,0x4a69,0x5b0c,0x52cb,0x10a2,0x0841,0x0000,0x5aca,0x94d2,0x4229,0x1905,0x4208,0x4a8a,0x4249,0x4229,0x4228,0x632c,0x6b6d,0x634c,0x632c,0x632b,0x634c,0x630c,0x6b4d,0x632c,0x630c,0x632c,0x630c,0x632c,0x632c,0x630c,0x5b0c,0x630c,0x5aec,0x5b0b,0x5aeb,0x5aeb,0x5aca, +0x5b0b,0x5b0b,0x52ea,0x4aca,0x52ca,0x52ea,0x530b,0x5aeb,0x52ea,0x42eb,0x52eb,0x52ca,0x52cb,0x5b0b,0x5aeb,0x52cb,0x52eb,0x5aeb,0x5b0b,0x5b0b,0x4a89,0x4228,0x530a,0x29a5,0x0841,0x31a6,0x3a07,0x39e7,0x39e7,0x31a6,0x2965,0x18e3,0x10a2,0x2144,0x39e7,0x4aca,0x52ea,0x52ea,0x52eb,0x52ca,0x52eb,0x52ca,0x52ca,0x4aaa,0x52aa,0x4aaa,0x4aaa,0x4aca,0x52aa,0x4aca,0x3a8a,0x4aab,0x52ca,0x4aa9,0x52ca,0x52ca,0x4aaa,0x4aca,0x52aa,0x4aaa,0x52ea,0x52ea,0x52ca,0x4228,0x3a07,0x52ca,0x29a5,0x1903,0x31e7,0x4248,0x4228,0x52ea,0x52ca,0x3a07,0x2124,0x2125,0x31c6,0x52c9,0x530a,0x5b2b,0x52ea,0x4aca,0x52ca,0x52ca,0x530b,0x52ea,0x530b,0x4aca,0x52ca,0x52ca,0x52ea,0x52ca,0x52ea,0x530b,0x530b,0x5b4c,0x5b4c,0x5b4c,0x4248,0x1923,0x4289,0x6bce,0x2144,0x0000,0x10a2,0x2124,0x2965,0x1081,0x10a2,0x18c2,0x18c2,0x1082,0x0861,0x0861,0x0861,0x0841,0x0840,0x0861,0x0861,0x0841,0x0841,0x0840,0x0840,0x0840,0x0020,0x0020,0x0041,0x0020,0x0841,0x0840,0x0841,0x0841,0x0840,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0840,0x0861,0x1082,0x0861,0x0861,0x1081,0x0861,0x1081,0x1082,0x1082,0x0861,0x0861,0x0861,0x1082,0x0861,0x0861,0x0861,0x1082,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x1082,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0881,0x0861,0x0861,0x0861,0x0861,0x0861,0x0861,0x0881,0x0861,0x0882,0x1082,0x1082,0x1082,0x10a2,0x18e3,0x2144,0x2124,0x18e3,0x18c2,0x18e3,0x1903,0x18e3,0x10a2,0x0000,0x18c3,0x6b8d,0x4248,0x4a8a,0x52ca,0x6bae,0x6b8d,0x6b8d,0x6b8d,0x6b8d,0x6b8d,0x6b8d,0x636d,0x6b8d,0x6bae,0x6b8d,0x636d,0x6bae,0x6b6d,0x6b6d,0x73ad,0x636c,0x6b8d,0x6bae,0x6b8d,0x52ca,0x2144,0x4249,0x4a8a,0x4249,0x2124,0x2985,0x5b0b,0x4a69,0x39e7,0x3a28,0x4269,0x73cf,0x632c,0x52ca,0x73ae,0x6b6d,0x6bae,0x6b6d,0x634c,0x634d,0x632c,0x632c,0x636d,0x634c,0x634d,0x634c,0x6b8d,0x6b6d,0x634c,0x636d,0x636d,0x634c,0x634c,0x636d,0x6b6d,0x6b4c,0x6b6d,0x73ae,0x6b6d,0x6b6d,0x73ce,0x6b8e,0x5aeb,0x4248,0x6b6d,0x6bae,0x5b0c,0x3a08,0x1083,0x2123,0xbe14,0x7c0f,0x4a6a,0x52ca,0x52cb,0x52ab,0x4249,0x528a,0x6b4d,0x634d,0x632c,0x634c,0x630b,0x632c,0x630c,0x632c,0x6b6d,0x630b,0x634c,0x634d,0x634d,0x634d,0x630c,0x5b0c,0x5aeb,0x5aec,0x5aeb,0x5aca,0x5aca,0x5aca, +0x52eb,0x530b,0x52ea,0x52eb,0x52ea,0x52eb,0x52ca,0x52ca,0x52eb,0x52cb,0x4aa9,0x4aaa,0x52ca,0x52cb,0x4aca,0x52ca,0x52ca,0x52ea,0x52ea,0x530b,0x530b,0x4aa9,0x52c9,0x73cd,0x3a27,0x2145,0x2103,0x2965,0x2144,0x2103,0x18e3,0x18e3,0x2124,0x31e7,0x4289,0x52eb,0x52ca,0x52eb,0x52ea,0x530b,0x52eb,0x52ca,0x52ea,0x4aaa,0x4aca,0x4aca,0x4aa9,0x4aaa,0x4aca,0x4aa9,0x4aa9,0x4aca,0x4aa9,0x4a8a,0x4aa9,0x4aca,0x52ca,0x4aaa,0x4ac9,0x4aaa,0x4aaa,0x52ea,0x530b,0x52eb,0x4a89,0x5b2b,0x5aea,0x31c7,0x2965,0x2965,0x31c6,0x39e7,0x29a6,0x2124,0x2985,0x2985,0x4269,0x4aaa,0x52eb,0x5b2b,0x530b,0x530b,0x52eb,0x52eb,0x530b,0x530b,0x52eb,0x530b,0x52eb,0x52ca,0x52ea,0x52eb,0x52ea,0x52ea,0x5b0b,0x5b2b,0x5b4c,0x5b4c,0x5b2b,0x3a07,0x2104,0x4aa9,0x6bad,0x4a68,0x0881,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0020,0x0020,0x0020,0x1082,0x0841,0x0020,0x0821,0x0020,0x0000,0x0000,0x0000,0x0020,0x0020,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0x6b4c,0x4248,0x52aa,0x5aeb,0x634d,0x73ae,0x6bae,0x6bae,0x6b8d,0x6b8d,0x6b6d,0x6b8d,0x6b6d,0x6b6d,0x6b8d,0x6b8d,0x636d,0x6b8d,0x6b8d,0x6bae,0x73ae,0x6bad,0x636c,0x6b8d,0x73ae,0x634d,0x52aa,0x31c6,0x4269,0x52cb,0x52aa,0x4a89,0x52ca,0x4a89,0x4249,0x52cb,0x73cf,0x73ae,0x4a69,0x634c,0x73ae,0x6b6d,0x6b8d,0x73ce,0x634c,0x634c,0x6b4c,0x634d,0x634c,0x632c,0x636d,0x634c,0x6b6d,0x6b8d,0x634c,0x6b8d,0x636d,0x6b6d,0x6b8d,0x6b8d,0x6b6d,0x6b6d,0x6b8d,0x6b6d,0x6b8d,0x6b8d,0x6b6d,0x6b8e,0x6b8e,0x634c,0x632b,0x73cf,0x73ef,0x6b8e,0x6b4d,0x5aec,0x5b0b,0x632d,0x632d,0x632c,0x52cb,0x4249,0x4a69,0x6b8d,0x738e,0x634d,0x632c,0x6b4d,0x634c,0x632b,0x632c,0x632c,0x6b4c,0x6b4c,0x632c,0x634c,0x634d,0x634c,0x634d,0x630c,0x5b0b,0x632c,0x5aeb,0x5aeb,0x5aca,0x52ca, +0x52ca,0x52eb,0x52eb,0x52eb,0x5aeb,0x52eb,0x52eb,0x52ca,0x530b,0x52ea,0x4aaa,0x4aca,0x52ca,0x52ca,0x4ac9,0x4aaa,0x52ea,0x52ea,0x52ca,0x52eb,0x52eb,0x5b2b,0x52ca,0x4248,0x4228,0x4269,0x4a69,0x39e7,0x2985,0x2965,0x2965,0x2965,0x3a28,0x4aca,0x52ea,0x530b,0x52eb,0x530b,0x530b,0x5b2b,0x52eb,0x4aca,0x52ea,0x52ca,0x4aca,0x4aca,0x52ea,0x52ea,0x52ca,0x4aa9,0x4aaa,0x52ca,0x4aca,0x4aca,0x4aaa,0x4aca,0x52ca,0x52ca,0x4aaa,0x4aaa,0x4aca,0x52ea,0x530b,0x52eb,0x5b0b,0x4aa9,0x4248,0x4269,0x2986,0x2965,0x2145,0x1904,0x18e3,0x2124,0x52ea,0x4ac9,0x52eb,0x5b0b,0x52ea,0x52eb,0x5b0b,0x5b2b,0x52eb,0x530b,0x530b,0x52ea,0x52ea,0x52ea,0x52ea,0x4aca,0x52eb,0x52ea,0x52ca,0x52ea,0x530b,0x530b,0x5b2c,0x5b2b,0x638d,0x52eb,0x3a07,0x18c2,0x3185,0x52aa,0x4a89,0x3a07,0x39e7,0x31a6,0x31c6,0x3a07,0x3a07,0x3a07,0x2985,0x31a6,0x31c6,0x31a6,0x31a6,0x31c6,0x31a6,0x39e7,0x31c6,0x2986,0x2986,0x2965,0x2145,0x2144,0x2124,0x2145,0x2945,0x2965,0x2966,0x31a6,0x2965,0x2145,0x2124,0x2965,0x4248,0x2144,0x2145,0x2945,0x2124,0x2945,0x2145,0x2985,0x2986,0x2965,0x2985,0x2966,0x2965,0x2986,0x31a6,0x2986,0x3186,0x39c7,0x39e7,0x31c6,0x31c6,0x31a6,0x31a6,0x31c6,0x31c6,0x31c6,0x39e7,0x3a07,0x31c7,0x31e7,0x39e7,0x39e7,0x39e7,0x39c7,0x39e7,0x31c7,0x39e7,0x39e7,0x39e7,0x39c7,0x39e7,0x39c7,0x39e7,0x4228,0x4248,0x4228,0x4a69,0x4249,0x4a69,0x4228,0x4248,0x4228,0x4208,0x4a69,0x4a8a,0x3a07,0x4249,0x4249,0x4a49,0x4a49,0x4248,0x4a69,0x4a89,0x4a89,0x4a89,0x4a89,0x52aa,0x52aa,0x52aa,0x52aa,0x52ca,0x4a8a,0x4a89,0x5289,0x52aa,0x52ca,0x6b4c,0x6b4c,0x3a07,0x4a69,0x5b0b,0x5b0b,0x73ef,0x6bae,0x6b8d,0x636d,0x6bae,0x6b8d,0x6b8d,0x6b8d,0x6b6d,0x636d,0x6bad,0x6b8d,0x6b8d,0x6b8d,0x6b8d,0x6b8d,0x6b8e,0x6b8d,0x6b6d,0x6b8d,0x6b8d,0x6b8e,0x6b8d,0x5b0b,0x4a68,0x4a89,0x5b0c,0x634c,0x6b6d,0x6b8d,0x8450,0x8430,0x632c,0x52aa,0x5b2c,0x73cf,0x6bae,0x6bae,0x73ae,0x6b8d,0x6bae,0x6b6d,0x6b8d,0x6b8d,0x634c,0x6b8d,0x6b6d,0x6b6d,0x6b8d,0x6b8e,0x636d,0x6b6d,0x6b6d,0x73ae,0x6b6d,0x6b8d,0x6b6d,0x6b6d,0x634c,0x636c,0x6b6d,0x6b8d,0x6b6d,0x6b6d,0x636d,0x6b8e,0x73ce,0x5aeb,0x73ae,0x840f,0x7bef,0x73ce,0x73af,0x73ce,0x6b8e,0x52ab,0x4249,0x52cb,0x6b8d,0x6b8d,0x6b6d,0x636d,0x634c,0x634d,0x632c,0x632c,0x630c,0x630c,0x6b6d,0x634c,0x634d,0x6b4d,0x632c,0x632c,0x632c,0x632c,0x5b0b,0x634c,0x5aec,0x5aeb,0x5aeb,0x5acb, +0x636c,0x5b0b,0x530b,0x530b,0x52eb,0x52eb,0x5b0b,0x52eb,0x52ca,0x52eb,0x52eb,0x52ca,0x52eb,0x530b,0x52ea,0x52ea,0x52ea,0x530b,0x5b2b,0x530b,0x5b0b,0x5b0b,0x636c,0x5b2b,0x4a89,0x4228,0x4228,0x39e7,0x4248,0x3a28,0x39e7,0x4a89,0x530b,0x5b2b,0x52ca,0x52eb,0x530b,0x530b,0x530b,0x5b0b,0x530b,0x530b,0x530b,0x530b,0x530b,0x52eb,0x52eb,0x52ea,0x52ea,0x4aca,0x4aca,0x4aaa,0x4aca,0x4aaa,0x52ca,0x52ca,0x4aca,0x52ca,0x52ca,0x52eb,0x4aaa,0x52eb,0x530b,0x52ea,0x52eb,0x5b2c,0x530b,0x52ca,0x4248,0x2965,0x39e7,0x2985,0x31c6,0x3a28,0x4aca,0x5b2c,0x5b4c,0x5b0b,0x5b2b,0x530b,0x530b,0x52ea,0x5b2b,0x530b,0x530b,0x530b,0x52eb,0x530b,0x52eb,0x52eb,0x5b2c,0x530b,0x530b,0x5b2b,0x5b0b,0x5b2b,0x532b,0x530b,0x5b4c,0x638d,0x5b2b,0x3a28,0x0881,0x0020,0x1903,0x2986,0x39e7,0x31a6,0x31a6,0x31e6,0x31c6,0x31e7,0x2144,0x2985,0x29a6,0x2985,0x2985,0x3186,0x2965,0x31a6,0x2965,0x2165,0x2965,0x2945,0x2124,0x2144,0x2124,0x2124,0x2124,0x2144,0x2144,0x2945,0x2124,0x2104,0x2124,0x2124,0x31c6,0x2124,0x2144,0x2104,0x18c3,0x18e3,0x18c3,0x18e3,0x1904,0x18e3,0x18e3,0x18e3,0x18c3,0x18e3,0x2104,0x2104,0x18e3,0x2124,0x2124,0x1903,0x2124,0x2104,0x1904,0x2104,0x1903,0x1903,0x2124,0x2124,0x2144,0x2104,0x2103,0x2144,0x2945,0x2945,0x2965,0x2965,0x2965,0x2965,0x31a6,0x3186,0x3186,0x31a6,0x31c6,0x39e7,0x3a07,0x3a07,0x4228,0x4228,0x4228,0x39e7,0x4228,0x4228,0x3a07,0x4248,0x4a69,0x3a07,0x4249,0x4249,0x4a49,0x4a48,0x4248,0x4268,0x4a89,0x4a8a,0x4aaa,0x52aa,0x52ca,0x52ca,0x5aeb,0x5aea,0x5aeb,0x52ca,0x52ca,0x5aeb,0x630b,0x5aeb,0x4228,0x31c6,0x4a89,0x52aa,0x632c,0x7c2f,0x73ee,0x6bae,0x6b8d,0x6b8e,0x6bae,0x73ae,0x6b8d,0x6bae,0x6b8d,0x636d,0x6bae,0x6bad,0x6bad,0x6b8e,0x6bae,0x6bad,0x73ae,0x6b8d,0x6b6d,0x6bae,0x6b8d,0x6bad,0x6bae,0x6bae,0x6b6d,0x5b0b,0x5aeb,0x5b0b,0x6b6c,0x738d,0x634c,0x4aaa,0x52eb,0x6bae,0x73ef,0x6bae,0x6b8d,0x6bae,0x73ae,0x6b8d,0x6bae,0x6b8d,0x636d,0x634d,0x6b6d,0x738d,0x6b8d,0x6b6d,0x6b6d,0x6bae,0x634c,0x738e,0x73ae,0x6b8d,0x6b8d,0x6bad,0x6b6d,0x6b8e,0x6b8d,0x6b8d,0x6b8d,0x6b8d,0x6b6c,0x6b6d,0x6b8d,0x6b8d,0x6b8d,0x634c,0x5b2c,0x73ce,0x73ad,0x73ae,0x73ae,0x5b2c,0x4249,0x4aaa,0x632c,0x73ae,0x73ae,0x636c,0x6b6c,0x6b6d,0x6b8d,0x6b6d,0x6b4d,0x634c,0x632c,0x636c,0x634c,0x634d,0x634d,0x632c,0x632c,0x632d,0x632c,0x632c,0x5b0c,0x632c,0x630c,0x52cb,0x5b0c,0x5aeb, +0x5b2b,0x52eb,0x52eb,0x5b2b,0x530b,0x52eb,0x5b0b,0x5b0b,0x5b0b,0x5b2b,0x52eb,0x52eb,0x530b,0x5b0b,0x5b2b,0x5b2b,0x5b2b,0x5b2c,0x5b4c,0x5b4c,0x5b0b,0x5b2b,0x636c,0x5b4c,0x5b4c,0x5b4c,0x5b2b,0x5b0b,0x5b2b,0x5b4b,0x5b6c,0x5b4c,0x530b,0x530b,0x52ea,0x530b,0x530b,0x5b4c,0x530b,0x5b0b,0x5b2b,0x5b2b,0x5b2b,0x530b,0x5b0b,0x52eb,0x530b,0x52eb,0x52ea,0x52eb,0x52ca,0x52ca,0x52ea,0x52ea,0x52eb,0x52ea,0x52ea,0x52ca,0x530b,0x52eb,0x530b,0x52ea,0x52ca,0x52eb,0x530b,0x530b,0x5b4c,0x5b4c,0x5b4c,0x5b4c,0x52eb,0x52eb,0x5b4c,0x5b2b,0x5b4c,0x5b4c,0x5b2b,0x5b0b,0x5b2c,0x532b,0x5b2c,0x5b0b,0x530b,0x530b,0x530b,0x530b,0x530b,0x530b,0x5b2b,0x532b,0x530b,0x52eb,0x530b,0x52eb,0x52eb,0x5b4c,0x530b,0x530b,0x5b4c,0x5b6c,0x5b4c,0x5b4c,0x4aaa,0x4248,0x2104,0x0841,0x1061,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0841,0x10a2,0x0000,0x0000,0x0000,0x0020,0x0000,0x1081,0x2144,0x2144,0x2124,0x2104,0x18e3,0x2104,0x2124,0x2124,0x2124,0x18e3,0x0000,0x0020,0x1904,0x2124,0x2944,0x2103,0x18c3,0x2124,0x2124,0x2144,0x2965,0x2124,0x1903,0x2124,0x0861,0x2965,0x2965,0x2104,0x2145,0x2104,0x2124,0x2124,0x2103,0x0861,0x0000,0x10a2,0x2104,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x08a2,0x2165,0x4228,0x4aaa,0x52eb,0x6bae,0x7bef,0x73ef,0x73ee,0x73ce,0x73ce,0x73ef,0x73ce,0x6b6d,0x6bae,0x73ce,0x73ae,0x73ce,0x73ce,0x73ad,0x73ce,0x73ce,0x6b8d,0x6bae,0x73ce,0x73ae,0x634c,0x636d,0x73ae,0x73ce,0x6b8e,0x6bae,0x6b8d,0x6b6d,0x6b6d,0x632c,0x5b0b,0x5aeb,0x632c,0x6b8e,0x73cf,0x73ce,0x73ce,0x6bad,0x6bad,0x6bae,0x6b8e,0x73ae,0x6b8d,0x6b6d,0x634d,0x634d,0x6b6d,0x6b8d,0x6b6d,0x6b8d,0x6b8e,0x6b8e,0x6b8d,0x6b8d,0x6bae,0x6b8e,0x73ae,0x6b8d,0x73ae,0x6b8d,0x73ae,0x6b8d,0x6b8e,0x6b8e,0x6b8d,0x738d,0x6b8d,0x6b8d,0x6b8d,0x738e,0x6b8e,0x6b6d,0x634d,0x632c,0x634c,0x5b0b,0x634d,0x6b8e,0x73ae,0x6b6d,0x634c,0x6b8d,0x6b6d,0x6b6d,0x6b6d,0x634c,0x634d,0x6b6d,0x634d,0x632c,0x6b6d,0x632c,0x634d,0x634d,0x6b6d,0x632c,0x632c,0x634c,0x634d,0x634d,0x632c,0x5b0c,0x5aeb,0x5b0c, +0x5b2c,0x530b,0x5b0b,0x5b4c,0x5b2b,0x634c,0x5b0b,0x5b0b,0x530b,0x530b,0x5b0b,0x5b0b,0x5b0b,0x530b,0x5b0b,0x5b2b,0x5b4c,0x5b4c,0x5b2b,0x5b4c,0x5b2b,0x5b0b,0x5b2b,0x530b,0x5b2c,0x5b4c,0x5b4c,0x5b2c,0x5b4c,0x636c,0x5b4c,0x5b2c,0x530b,0x52eb,0x5b2c,0x5b2b,0x5b2b,0x5b2c,0x5b4c,0x5b2b,0x530b,0x532b,0x530b,0x5b2c,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x5b2b,0x5b2c,0x5b2b,0x5b2c,0x52eb,0x530b,0x530b,0x530b,0x5b2b,0x52ea,0x52ca,0x52ea,0x530b,0x530b,0x530b,0x5b0b,0x52eb,0x530b,0x530b,0x5b2c,0x532b,0x636c,0x5b4c,0x5b4c,0x5b2b,0x5b2b,0x5b2c,0x5b2b,0x532b,0x5b2b,0x530b,0x532b,0x530b,0x52eb,0x530b,0x5b2b,0x532b,0x530b,0x530b,0x530b,0x530b,0x530b,0x530b,0x530b,0x530b,0x52ea,0x52ea,0x530b,0x530b,0x52ea,0x530b,0x530b,0x530b,0x5b6d,0x636d,0x636c,0x5b6c,0x5b4c,0x5b2c,0x52eb,0x4aeb,0x5b2c,0x532c,0x530b,0x530b,0x530b,0x530b,0x530b,0x530b,0x5b2c,0x530b,0x5b0b,0x52eb,0x5b2c,0x530b,0x530b,0x5b2c,0x5b2c,0x5b2c,0x532b,0x5b2c,0x5b4c,0x636c,0x530b,0x5b2c,0x638d,0x52eb,0x52eb,0x5b4c,0x636c,0x634c,0x636d,0x6bae,0x6bce,0x6bae,0x6bae,0x636d,0x63ad,0x638d,0x638d,0x6bae,0x636c,0x530b,0x5b2c,0x6bad,0x6b8d,0x6bae,0x636c,0x636d,0x638d,0x638d,0x63ad,0x6bce,0x6bce,0x63ae,0x6bce,0x636d,0x638d,0x6bce,0x5b6d,0x6bae,0x6bad,0x6b8d,0x6bae,0x6b8d,0x634c,0x5b4c,0x634d,0x6bae,0x5b2c,0x636d,0x634d,0x636d,0x634d,0x5b4d,0x634d,0x634d,0x634d,0x634c,0x636d,0x636d,0x634d,0x5b4c,0x5b4c,0x634c,0x636d,0x5b4c,0x5b0c,0x5b2c,0x5b2c,0x5b2c,0x5b2c,0x530b,0x5b2c,0x5b0c,0x5b2c,0x5b2c,0x634c,0x634c,0x5b0b,0x5b0b,0x5b2c,0x5b2c,0x634d,0x634d,0x6bae,0x740f,0x73ef,0x73cf,0x73ce,0x6b8d,0x738d,0x73ce,0x6bae,0x6b8d,0x6b8d,0x6bae,0x73ce,0x73ae,0x73ce,0x73ce,0x73ce,0x73ce,0x6bae,0x6b8d,0x73ce,0x6b8e,0x73ae,0x6b6d,0x6b6d,0x636c,0x6bae,0x6b8d,0x73ce,0x6bae,0x6b8d,0x6b6d,0x6b6d,0x6b8d,0x73ce,0x73ce,0x6b8e,0x6b8d,0x738e,0x6bae,0x6b8d,0x6b8e,0x73ae,0x738e,0x73ce,0x6b6d,0x6b6d,0x634c,0x6b6d,0x6b8e,0x6bad,0x6b8d,0x6b6d,0x6b8e,0x73ae,0x6b8d,0x6bae,0x6b8d,0x73ae,0x6b6d,0x6b8d,0x73ae,0x6b8e,0x6bae,0x6b8d,0x73ae,0x73ae,0x6b6d,0x738e,0x6b8d,0x73ae,0x6b8e,0x738e,0x73ae,0x738e,0x738e,0x73ae,0x73ae,0x73ae,0x73ae,0x73ae,0x6b6d,0x6b8d,0x6b8d,0x6b6d,0x6b8e,0x6b6d,0x6b4d,0x6b8d,0x6b6d,0x634d,0x6b6d,0x634d,0x634d,0x634d,0x6b6d,0x634d,0x6b6d,0x6b6d,0x6b6d,0x6b6d,0x634d,0x634d,0x6b6d,0x634d,0x632c,0x5b0c, +0x5b2b,0x5b0b,0x5b2c,0x5b2b,0x5b2c,0x5b2c,0x5b0b,0x5b0b,0x5b2c,0x5b2b,0x530b,0x52eb,0x530b,0x530b,0x530b,0x5b4c,0x5b4c,0x5b2b,0x5b2b,0x5b2c,0x5b4c,0x5b4c,0x5b2b,0x530b,0x52ea,0x5b0b,0x530b,0x5b2c,0x5b2c,0x5b4c,0x5b4c,0x530b,0x532b,0x5b4c,0x5b2c,0x530b,0x5b2b,0x5b2c,0x5b4c,0x5b2b,0x530b,0x532c,0x530b,0x530b,0x530b,0x5b4c,0x530b,0x532b,0x5b2b,0x5b2b,0x530b,0x5b0b,0x530b,0x530b,0x530b,0x530b,0x530b,0x5b2b,0x52eb,0x530b,0x530b,0x52ea,0x530b,0x52ea,0x4aca,0x5b0b,0x530b,0x5b2b,0x5b2b,0x5b2b,0x530b,0x5b2c,0x530b,0x5b2b,0x5b4c,0x530b,0x530b,0x532b,0x52eb,0x52ea,0x530b,0x52eb,0x52eb,0x530b,0x530b,0x530b,0x530b,0x5b2b,0x530b,0x530b,0x5b2b,0x5b0b,0x530b,0x52ea,0x530b,0x530b,0x52eb,0x530b,0x530b,0x530b,0x52eb,0x532b,0x5b2b,0x5b6c,0x5b6c,0x638d,0x63ad,0x638d,0x63ce,0x6bce,0x63ad,0x63ad,0x63ad,0x63ad,0x63ad,0x6bee,0x6bce,0x6bce,0x6bee,0x6bcd,0x6bae,0x63ae,0x6bce,0x63ad,0x6bce,0x6bae,0x6bce,0x6bce,0x63ce,0x6bee,0x6bee,0x63ae,0x6bce,0x6bce,0x6bce,0x63ad,0x63ad,0x6bce,0x638d,0x6bad,0x6bad,0x63ad,0x6bce,0x63ad,0x636d,0x638d,0x638d,0x63ae,0x638d,0x638d,0x638d,0x6bad,0x6bce,0x6bae,0x638d,0x6bad,0x6bad,0x63ad,0x6bce,0x63ae,0x63ae,0x6bce,0x6bae,0x6bae,0x6bce,0x638d,0x6bae,0x6bce,0x6bef,0x740f,0x6bce,0x6bce,0x73ee,0x73ee,0x73ef,0x73ef,0x6bce,0x73ef,0x7410,0x6bce,0x73cf,0x7410,0x740f,0x73ef,0x7c10,0x7c30,0x740f,0x73ef,0x7c50,0x7c30,0x7410,0x740f,0x7c10,0x7c30,0x740f,0x73ef,0x7c30,0x7c30,0x7410,0x740f,0x73ef,0x7c0f,0x7c0f,0x7c30,0x7c30,0x7c0f,0x73cf,0x7c0f,0x7c0f,0x73ce,0x73ce,0x7bef,0x73ef,0x73ef,0x73ce,0x73ef,0x73ce,0x6b8d,0x73ae,0x73ae,0x636d,0x636d,0x6bae,0x6b8e,0x636d,0x636d,0x6b8d,0x6b8d,0x6b8d,0x6b6d,0x6bae,0x6b8d,0x6bae,0x6bad,0x6bae,0x6b6d,0x636d,0x6b8d,0x634c,0x6b6d,0x6b8d,0x6bad,0x6bae,0x73ae,0x634d,0x634d,0x6bae,0x6b8e,0x6b6d,0x636d,0x6bae,0x6b4d,0x6b8e,0x636d,0x634d,0x634c,0x6b6d,0x6b8d,0x6b8d,0x6b8d,0x6b6d,0x632c,0x6b6d,0x6b6d,0x6b6d,0x636d,0x6b8e,0x638d,0x6b8d,0x6b6d,0x6b8d,0x634c,0x6b8d,0x6b8d,0x6b6d,0x6b8e,0x6b6d,0x6b6d,0x6b6d,0x73ae,0x6b8d,0x6b6d,0x634d,0x636d,0x634c,0x6b8d,0x6b8d,0x6b8e,0x6b8d,0x634c,0x634d,0x6b6d,0x6b6d,0x634d,0x632c,0x6b4d,0x6b6d,0x632c,0x6b6d,0x632c,0x632c,0x630c,0x634d,0x5b0c,0x632c,0x634c,0x634d,0x634d,0x6b8d,0x6b6d,0x634d,0x632c,0x634d,0x634d,0x632c,0x5b2c,0x5b0b,0x630c,0x5b0b,0x632c, +0x4a89,0x4aa9,0x4aca,0x4aa9,0x52aa,0x4aaa,0x52ca,0x52ca,0x52ea,0x52ea,0x4a89,0x4a89,0x4aca,0x4aaa,0x52ca,0x52ca,0x4a89,0x4aa9,0x4aa9,0x4a89,0x4aaa,0x4aca,0x4aca,0x4a89,0x52ca,0x4aaa,0x52aa,0x5b0b,0x5b0b,0x52ca,0x52ca,0x4aaa,0x4aa9,0x4aca,0x4aca,0x4aca,0x4aa9,0x4aaa,0x4aaa,0x52ca,0x4aaa,0x4a89,0x4248,0x4289,0x4289,0x4289,0x4289,0x4268,0x4269,0x4269,0x4a89,0x4248,0x4269,0x4249,0x4269,0x4268,0x4269,0x4248,0x4248,0x4248,0x4269,0x4a89,0x4a89,0x4a89,0x4289,0x4289,0x4aca,0x52ca,0x4a89,0x4a89,0x4aaa,0x4aa9,0x4aa9,0x4a89,0x4a89,0x4a89,0x4a89,0x4aa9,0x4aa9,0x4aa9,0x4aaa,0x4aa9,0x4aa9,0x4aa9,0x4269,0x4269,0x4a89,0x4aaa,0x4aa9,0x4aa9,0x4aa9,0x4a89,0x4269,0x4289,0x4269,0x4268,0x4269,0x4269,0x4268,0x4a69,0x4a89,0x4a89,0x4269,0x4a89,0x4a89,0x4aca,0x52ea,0x4aaa,0x52ca,0x52ea,0x52ca,0x52ca,0x52eb,0x52eb,0x4aca,0x52ea,0x4aea,0x4aca,0x530b,0x52eb,0x52eb,0x52ea,0x52ca,0x4aaa,0x4aaa,0x5b0b,0x52ea,0x4aca,0x52ea,0x5b0b,0x52ea,0x52ea,0x52ea,0x52eb,0x4aca,0x52ea,0x530b,0x5b0b,0x4aca,0x52ea,0x52ea,0x52eb,0x52eb,0x52ea,0x52ea,0x52ca,0x52eb,0x52eb,0x52ca,0x52eb,0x530b,0x5b0b,0x5b0b,0x5b0b,0x5b2b,0x5b2c,0x5b2c,0x5b2c,0x52eb,0x52eb,0x5b2b,0x5b0b,0x52ea,0x52ea,0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x5b4c,0x5b2b,0x5b4c,0x5b4c,0x5b2b,0x5b2b,0x5b4c,0x636c,0x5b2b,0x5b4c,0x5b4c,0x5b2c,0x5b2c,0x634c,0x634c,0x636d,0x636c,0x636c,0x634c,0x636d,0x634d,0x636d,0x636d,0x634c,0x6bad,0x638d,0x6b8e,0x6bae,0x6bad,0x6bae,0x6bce,0x6bae,0x638d,0x6bae,0x6b8e,0x636d,0x6bad,0x73ce,0x6b8e,0x6b8e,0x73ae,0x6bae,0x6b8d,0x636d,0x6b8e,0x6b8d,0x636d,0x636d,0x6b8d,0x6b4d,0x634c,0x636d,0x636d,0x634c,0x634c,0x636d,0x634c,0x6b6d,0x738e,0x634c,0x6b6d,0x636d,0x6b6d,0x6b6d,0x636d,0x6b6d,0x6b8e,0x636d,0x634d,0x6b8d,0x6b8d,0x6b6d,0x6b6c,0x6b6d,0x6b8d,0x6b8e,0x73ae,0x6bad,0x6b6d,0x6b8d,0x6bad,0x634d,0x6b6d,0x6b6d,0x6b8e,0x636d,0x6b6d,0x634c,0x6b6d,0x634c,0x6b6d,0x6b8d,0x6b6d,0x6b6d,0x632c,0x6b6d,0x634c,0x634c,0x6b8d,0x634c,0x634d,0x634d,0x6b6c,0x634c,0x6b8d,0x6b6d,0x634c,0x634d,0x634d,0x632c,0x632c,0x6b6d,0x6b4c,0x632c,0x634c,0x634d,0x634c,0x634c,0x634c,0x634c,0x634c,0x634c,0x634c,0x634d,0x632d,0x634c,0x6b6d,0x634c,0x634c,0x6b6d,0x632c,0x634c,0x6b4c,0x6b6d,0x634c,0x634d,0x632c,0x632c,0x632c,0x632c,0x634d,0x634c,0x634c,0x5b0c,0x630c,0x634c,0x630c,0x630c,0x632c,0x632c,0x634d,0x632c, +0x2923,0x2123,0x2923,0x2963,0x2943,0x2943,0x31a5,0x3184,0x2964,0x2944,0x2923,0x2923,0x2123,0x2923,0x2123,0x2102,0x2102,0x2103,0x2102,0x2102,0x2944,0x2943,0x3164,0x2943,0x3185,0x3164,0x39c6,0x4206,0x39e6,0x3184,0x31a5,0x31a5,0x31a5,0x3164,0x2943,0x2964,0x2102,0x2102,0x2923,0x39c5,0x31a4,0x3184,0x2923,0x2102,0x2101,0x20e1,0x20e2,0x2102,0x2102,0x2102,0x2943,0x2923,0x20e1,0x20e2,0x2943,0x39c6,0x2102,0x20e2,0x20e2,0x2102,0x20e1,0x3164,0x3184,0x3184,0x2964,0x2943,0x39c5,0x39e6,0x2964,0x2923,0x3184,0x2923,0x2943,0x2944,0x2943,0x2122,0x2923,0x3164,0x3164,0x2943,0x2923,0x2923,0x2923,0x2923,0x2923,0x2923,0x2923,0x3164,0x3164,0x2923,0x2923,0x2122,0x2103,0x2103,0x2103,0x2102,0x2102,0x2102,0x2923,0x2944,0x2943,0x2923,0x2923,0x2943,0x2923,0x2923,0x2102,0x2943,0x31a5,0x2943,0x2943,0x2964,0x2964,0x2943,0x2943,0x2963,0x2963,0x2964,0x2922,0x2923,0x2943,0x31a5,0x2943,0x2943,0x2943,0x2964,0x2943,0x2943,0x2943,0x2923,0x2943,0x2923,0x2923,0x2102,0x2923,0x2943,0x2943,0x3164,0x3164,0x2963,0x2963,0x3164,0x2923,0x3164,0x3164,0x2964,0x2964,0x2963,0x3184,0x31a5,0x2964,0x2943,0x2964,0x2943,0x2943,0x2943,0x2944,0x2944,0x2123,0x2923,0x2923,0x2943,0x2923,0x2923,0x2943,0x3184,0x2964,0x2964,0x2943,0x2102,0x3164,0x2964,0x2944,0x2964,0x2943,0x2923,0x2943,0x2943,0x2944,0x2944,0x2964,0x3185,0x2124,0x2965,0x2964,0x3185,0x2964,0x3185,0x2943,0x2943,0x2943,0x3184,0x3185,0x3164,0x31a5,0x39c6,0x39c6,0x31a5,0x39e6,0x39c6,0x31a5,0x31a5,0x31a5,0x31a5,0x31a5,0x39e6,0x31e6,0x29a5,0x39c6,0x39e6,0x39c6,0x31c6,0x39e6,0x39e6,0x39a5,0x39a5,0x39e6,0x39e7,0x39c6,0x39c6,0x39c6,0x39c6,0x39e6,0x3a06,0x39c6,0x39c6,0x39e7,0x39e6,0x41e6,0x4207,0x39e7,0x39e7,0x4227,0x39e7,0x39c6,0x39e6,0x4207,0x39e7,0x4207,0x39e6,0x39e6,0x39c6,0x39e6,0x39e6,0x4227,0x39e7,0x39c6,0x4207,0x39e7,0x39e6,0x39e6,0x3a06,0x39e6,0x4207,0x39e6,0x39a6,0x39c6,0x39c6,0x39c6,0x39e6,0x39e6,0x39c6,0x39c6,0x39e6,0x39c6,0x39c6,0x39a6,0x39a6,0x39a6,0x39c5,0x4207,0x39c6,0x39c6,0x39c6,0x39e6,0x39e6,0x39c6,0x39a6,0x39e6,0x3a07,0x39a5,0x39c6,0x39e6,0x39c6,0x39a5,0x39c6,0x39c6,0x39c6,0x39c6,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x4207,0x39e7,0x4207,0x3a07,0x39c6,0x31c6,0x39c6,0x4228,0x39c6,0x39c6,0x41e7,0x4207,0x3186,0x39c7,0x4207,0x31c6,0x3185,0x39e7,0x4227,0x4207,0x31a6,0x31a6,0x39e7,0x39c6,0x39e7,0x39c6, +0x0001,0x0001,0x0004,0x0003,0x0001,0x0002,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0001,0x0002,0x0001,0x0001,0x0001,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0003,0x0002,0x0002,0x0003,0x0002,0x0002,0x0002,0x0003,0x0004,0x0003,0x0003,0x0002,0x0002,0x0002,0x0002,0x0002,0x0003,0x0003,0x0002,0x0003,0x0003,0x0003,0x0003,0x0002,0x0003,0x0002,0x0001,0x0002,0x0002,0x0002,0x0001,0x0001,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0003,0x0002,0x0002,0x0002,0x0003,0x0002,0x0002,0x0002,0x0002,0x0003,0x0003,0x0003,0x0003,0x0002,0x0002,0x0002,0x0003,0x0003,0x0003,0x0003,0x0002,0x0003,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0003,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0001,0x0001,0x0001,0x0002,0x0001,0x0002,0x0002,0x0002,0x0001,0x0002,0x0002,0x0002,0x0001,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0001,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0001,0x0002,0x0001,0x0002,0x0002,0x0002,0x0001,0x0001,0x0002,0x0002,0x0002,0x0002,0x0002,0x0001,0x0002,0x0001,0x0001,0x0002,0x0002,0x0002,0x0001,0x0002,0x0001,0x0001,0x0001,0x0001,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0001,0x0001,0x0000,0x0000,0x0002,0x0001,0x0001,0x0000,0x0001,0x0001,0x0002,0x0002,0x0003,0x0003,0x0001,0x0001,0x0002,0x0002,0x0003,0x0003,0x0002,0x0002,0x0003,0x0001,0x0003,0x0002,0x0002,0x0002,0x0002,0x0003,0x0021,0x0003,0x0003,0x0002,0x0001,0x0001,0x0001,0x0001,0x0001,0x0002,0x0003,0x0001,0x0002,0x0002,0x0002,0x0003,0x0002,0x0002,0x0003,0x0003,0x0002,0x0003,0x0003,0x0003,0x0003,0x0002,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0004,0x0004,0x0003,0x0004,0x0004,0x0003,0x0003,0x0003,0x0002,0x0002,0x0002,0x0003,0x0003,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0003,0x0003,0x0043,0x0063,0x0063,0x0043,0x0083,0x0062,0x0062,0x10c3,0x0083,0x08a3,0x08a3,0x10c2,0x10e3,0x18e3,0x18e3,0x18e3,0x10e3,0x18e2,0x18e3,0x1903,0x18e2,0x18e2,0x18e2,0x18c1,0x18e2, +0xac85,0xac84,0xa4a4,0x9c84,0x9c84,0x9c64,0x9c23,0x9c24,0x9c44,0x9404,0x9404,0x9c04,0x9404,0x93e4,0x93e3,0x93c3,0x8bc3,0x8bc3,0x8bc4,0x8bc4,0x8bc4,0x8bc4,0x8bc4,0x8bc4,0x8bc4,0x8be4,0x8bc4,0x8bc4,0x93e4,0x93e4,0x9404,0x9424,0x9424,0x9424,0x9424,0x9424,0x9424,0x9444,0x9c64,0x9c64,0xa484,0xa484,0xa484,0x9c64,0xa4a5,0xa484,0x9c43,0x9c43,0xa463,0xac83,0xac83,0xac83,0xac83,0xaca2,0xb4c3,0xb4c3,0xb4c3,0xb4c3,0xb4a3,0xb4a3,0xb482,0xb4a3,0xb4c3,0xb4a2,0xb4a2,0xb4c2,0xb4c2,0xb4a2,0xb4a2,0xb4c2,0xb4c2,0xb4a2,0xb4a2,0xb4c2,0xb4a2,0xb482,0xb462,0xac62,0xb462,0xb462,0xb462,0xb442,0xb442,0xb442,0xb442,0xac42,0xac22,0xac22,0xac22,0xac42,0xac42,0xac42,0xac43,0xac43,0xac23,0xac23,0xac22,0xac22,0xa402,0xa402,0xa3e2,0xa402,0xa402,0xa422,0xa402,0xa403,0xa423,0xa423,0xa423,0xa423,0xa423,0xa443,0xa443,0xa443,0xa443,0xa443,0xac63,0xac63,0xac83,0xac63,0xac64,0xac43,0xac43,0xac23,0xac64,0xac84,0xa443,0xac83,0xac83,0xaca3,0xb4a3,0xb463,0xb464,0xb483,0xb4a3,0xb483,0xb4a3,0xbcc3,0xbce4,0xb4c4,0xb4c3,0xb4c3,0xb4c3,0xb4c3,0xb4c3,0xb4a3,0xb483,0xb4c3,0xb4a3,0xaca4,0x9c63,0x8c03,0x9423,0x9c64,0x9c63,0x9c43,0xa463,0xac84,0xac63,0xa464,0xb483,0xaca4,0x9c24,0x8be4,0x8c05,0x8c25,0x9445,0x9c44,0xa464,0xa484,0xaca4,0xacc5,0xb4c5,0xacc5,0xb485,0xb445,0xac25,0xa425,0xa425,0x9be6,0x9be6,0x9be5,0x93c4,0x93a5,0x8b85,0x7b45,0x9be6,0x9c06,0xa406,0xa406,0x9c06,0xa426,0x9bc6,0x9ba5,0x8b25,0x9365,0x9be5,0xa466,0xa467,0xa487,0x9c67,0x9c66,0x9426,0x8ba4,0x8bc5,0x9426,0x83a6,0x5a45,0x5245,0x7304,0x8c06,0x8be5,0x8bc4,0x7b44,0x8384,0x8be4,0x8be5,0x8be6,0x8c07,0x8be6,0x8b64,0x8344,0x8ba4,0x8ba3,0x7b65,0x5ae5,0x7325,0x7b44,0x7b64,0x83a4,0x5aa4,0x62c4,0x62a4,0x4204,0x62a4,0x8383,0x8383,0x8383,0x7b63,0x7b62,0x8361,0x8360,0x8ba2,0x8b80,0x8360,0x8342,0x72c2,0x72a2,0x8320,0x72c1,0x7b22,0x8b61,0x8b61,0x8b80,0x8b80,0x8360,0x8340,0x8320,0x8320,0x8320,0x7b00,0x8300,0x8300,0x8300,0x82e0,0x82e0,0x8300,0x8300,0x7ac0,0x7ac0,0x8300,0x8300,0x7ac0,0x7aa0,0x7260,0x7aa0,0x7260,0x6a80,0x6a60,0x6a80,0x6a60,0x72a0,0x7280,0x7280,0x7280,0x7240,0x7240,0x6200,0x51c0,0x4980,0x49e0,0x51e0,0x5200,0x51e0,0x49a0,0x4140,0x3900,0x30c0,0x3940,0x4120,0x3920,0x2880,0x2000,0x2840,0x28a0,0x28e0,0x1840,0x1000,0x0800,0x0000,0x0801,0x1001,0x0001,0x0001,0x0001,0x0001,0x0002,0x0002,0x0002,0x0003, +0xe669,0xde47,0xde68,0xde47,0xde47,0xde47,0xde26,0xde47,0xde47,0xde27,0xde27,0xde06,0xddc6,0xddc6,0xdde7,0xddc7,0xddc6,0xddc6,0xd5a6,0xd587,0xcd67,0xcd66,0xd587,0xd5a7,0xcd67,0xc547,0xcd67,0xd586,0xd586,0xd5a6,0xd5a6,0xd5c6,0xcda6,0xd5c6,0xcda6,0xcda6,0xd5c5,0xd5c4,0xdde5,0xd606,0xd606,0xd606,0xde05,0xd605,0xd605,0xd605,0xd5e4,0xd604,0xde04,0xde04,0xdde4,0xdde4,0xe625,0xde04,0xe624,0xde04,0xdde4,0xdde4,0xe623,0xe5e3,0xe5e3,0xe603,0xe623,0xee23,0xe623,0xe623,0xe603,0xdde2,0xe603,0xdde3,0xdde3,0xe602,0xee22,0xee82,0xe662,0xe622,0xee02,0xee03,0xdda2,0xdda3,0xe5c2,0xee02,0xede2,0xede2,0xee02,0xe5c2,0xe5e2,0xede2,0xee03,0xee03,0xee23,0xee44,0xf643,0xee23,0xee24,0xee43,0xee23,0xee23,0xee43,0xee23,0xee23,0xee23,0xee43,0xee23,0xee44,0xee44,0xe624,0xee24,0xf684,0xf684,0xee84,0xee85,0xee44,0xee65,0xee64,0xf664,0xf685,0xee64,0xee64,0xee65,0xee65,0xe625,0xee24,0xee45,0xd5e6,0xd5e6,0xe665,0xee65,0xee84,0xee65,0xee65,0xee25,0xee45,0xee45,0xe645,0xe645,0xe624,0xe645,0xe665,0xe645,0xde24,0xe625,0xe665,0xe664,0xe664,0xe624,0xee65,0xee85,0xee85,0xee65,0xe645,0xe625,0xde25,0xe625,0xe645,0xee65,0xee65,0xee65,0xee64,0xee65,0xee85,0xe665,0xe646,0xee66,0xee86,0xf6a7,0xf6a6,0xee86,0xee67,0xee87,0xee87,0xe687,0xe687,0xee87,0xee26,0xe5e7,0xddc7,0xddc7,0xdda7,0xd567,0xd588,0xd588,0xcd47,0xcd47,0xcd68,0xcd48,0xd588,0xd589,0xd569,0xcd49,0xc509,0xbd09,0xc509,0xcd29,0xd569,0xe608,0xee49,0xf6ea,0xf70a,0xf70b,0xf72b,0xf72b,0xeeeb,0xeeaa,0xf70b,0xf72b,0xf6ca,0xe66a,0xe64a,0xeeab,0xff2c,0xf70c,0xf6eb,0xeeab,0xf6ec,0xf70c,0xf72c,0xff4d,0xf74d,0xf70c,0xf6cb,0xe64b,0xf6cc,0xeeab,0xde6b,0xce2c,0xd64c,0xf6ed,0xeeac,0xe64a,0xd60b,0xd62c,0xe64b,0xd60c,0xde4c,0xf6ec,0xf70c,0xf70c,0xf70c,0xf70d,0xff2e,0xff0e,0xff2e,0xf70e,0xf70e,0xf6ee,0xe66d,0xd62d,0xeecd,0xeecd,0xe66c,0xeecd,0xeeee,0xff2e,0xff2f,0xff0e,0xff0e,0xff0e,0xfeee,0xff0f,0xf710,0xff30,0xff10,0xff10,0xff11,0xff31,0xff32,0xff32,0xff11,0xf711,0xff30,0xf70f,0xff30,0xff10,0xff31,0xff32,0xff32,0xff32,0xf711,0xf710,0xff10,0xf68c,0xfeed,0xff10,0xff10,0xff0f,0xff0f,0xf6ef,0xeecf,0xe6ef,0xe66d,0xe6ad,0xeeee,0xeeae,0xe68e,0xe68e,0xe6ae,0xde8e,0xdeae,0xe6ae,0xde6c,0xde6d,0xde8e,0xdeae,0xde8f,0xd66f,0xce4e,0xce4e,0xce4d,0xce2d,0xce2c,0xce4c,0xce2c,0xce2c,0xce2b,0xce2b,0xce2a,0xce29,0xce29,0xce09, +0x2926,0x0003,0x0004,0x0004,0x0004,0x0004,0x0004,0x0844,0x0004,0x18c4,0x18e4,0x0003,0x0004,0x2106,0x3a08,0x31c8,0x31c7,0x31e8,0x31c7,0x31c8,0x1148,0x1147,0x2167,0x2146,0x1127,0x0067,0x0106,0x1945,0x10e6,0x00e5,0x0065,0x0005,0x0005,0x0005,0x0005,0x0005,0x0004,0x0004,0x0005,0x0005,0x0004,0x0004,0x0003,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0804,0x0003,0x0003,0x0003,0x0004,0x0004,0x0003,0x0003,0x0003,0x0003,0x0803,0x1803,0x0002,0x0002,0x0003,0x0002,0x0003,0x0002,0x0003,0x0803,0x1002,0x1802,0x0802,0x0802,0x2002,0x2002,0x0002,0x0003,0x0002,0x1802,0x1802,0x0802,0x2002,0x1002,0x0802,0x1802,0x2803,0x1002,0x1802,0x2802,0x2821,0x2821,0x2802,0x2882,0x2822,0x2002,0x2882,0x2822,0x3081,0x2862,0x2862,0x2002,0x2822,0x2882,0x1802,0x2002,0x3901,0x38e1,0x30a1,0x3082,0x2862,0x2801,0x2801,0x3061,0x3001,0x2001,0x2001,0x2802,0x2001,0x1801,0x1802,0x2061,0x0002,0x0002,0x1801,0x3063,0x3042,0x1802,0x2002,0x1802,0x2002,0x1802,0x0802,0x1002,0x0802,0x0002,0x0002,0x0802,0x0002,0x0002,0x0002,0x0002,0x0802,0x0803,0x2802,0x3002,0x3003,0x3003,0x3024,0x2804,0x1002,0x0001,0x1001,0x2001,0x2001,0x1801,0x2001,0x2801,0x2001,0x1001,0x1801,0x2801,0x3001,0x4144,0x4164,0x4124,0x38c4,0x3003,0x3084,0x2004,0x2003,0x2863,0x2843,0x2083,0x28e3,0x2903,0x3123,0x3923,0x41a3,0x41c3,0x41a3,0x41a3,0x49e3,0x5204,0x4183,0x41a3,0x3983,0x41a3,0x3143,0x2124,0x1944,0x00e4,0x39e4,0x4a24,0x3984,0x4143,0x49a3,0x49a4,0x49e5,0x4a05,0x51e5,0x5a86,0x5a85,0x5a45,0x62a5,0x6b26,0x6b06,0x62c7,0x6287,0x62a7,0x62a7,0x6b08,0x6b08,0x62e8,0x6ae8,0x7308,0x7308,0x6ae8,0x6b09,0x6b2a,0x6b4a,0x5aea,0x630a,0x6b4b,0x6b6b,0x738b,0x734a,0x62ea,0x6b6b,0x738b,0x7b8b,0x7bcb,0x83cb,0x7b8b,0x7bab,0x7bab,0x7bab,0x83ec,0x840c,0x83ec,0x83ed,0x83ed,0x7bed,0x840c,0x7c0d,0x7c0e,0x842e,0x8c6f,0x7c0e,0x840e,0x840e,0x8c4f,0x8c6f,0x948f,0x948f,0x94af,0x9caf,0x9cd0,0x9cf0,0x9cf0,0x9cf0,0x9cf1,0x9d11,0xa511,0xa532,0xa532,0xa511,0xa511,0xa532,0xa4f1,0xa531,0xad52,0xad93,0xb593,0xb5b3,0xbdb3,0xb593,0xb593,0xb592,0xad32,0xb593,0xb5d3,0xb5d3,0xbdf4,0xbdf3,0xbdd3,0xbdd3,0xbdf4,0xbdb3,0xb592,0xbdf3,0xbdd3,0xbdd3,0xbdd3,0xbdd3,0xbdd3,0xbdd3,0xb5b3,0xb592,0xb592,0xb592,0xb5b2,0xad51,0x7bab,0x7baa,0x7bca,0x73a9,0x73a9,0x73a9,0x7ba9,0x73a9,0x73a8,0x7bc9,0x7bc8,0x7bc8,0x7bc7,0x9cab,0xa4cc, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0040,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0001,0x0001,0x0000,0x0000,0x0000,0x0002,0x0002,0x0003,0x0004,0x0107,0x0086,0x0045,0x0106,0x1106,0x1106,0x08c6,0x10c6,0x1927,0x10e6,0x1907,0x00a6,0x0086,0x0846,0x1086,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0002,0x0003,0x0003,0x0004,0x0005, +0x3a28,0x3a28,0x4248,0x4248,0x3a08,0x39e7,0x3a28,0x3a07,0x3a07,0x4248,0x4228,0x31c6,0x4228,0x4228,0x4248,0x4248,0x3a07,0x39e7,0x39e7,0x4249,0x4228,0x31a6,0x3a07,0x3a07,0x31c7,0x39e7,0x3a07,0x3a27,0x31c6,0x31c6,0x39c7,0x3a07,0x31a6,0x3a07,0x3a07,0x31e6,0x31c6,0x31c7,0x3a07,0x31c6,0x39e7,0x39c7,0x39e7,0x39c7,0x31a6,0x31a6,0x31c6,0x31a6,0x31c6,0x31c6,0x31a6,0x31a6,0x31a6,0x31c7,0x2986,0x3186,0x31c6,0x31a6,0x2985,0x2985,0x39e7,0x31c6,0x31a6,0x31a5,0x2144,0x2124,0x3186,0x31a6,0x2965,0x2965,0x31a5,0x31c7,0x31a6,0x31a6,0x31c6,0x31a6,0x31a6,0x2985,0x3186,0x2966,0x3186,0x2965,0x3a07,0x3a07,0x2985,0x3186,0x31a6,0x2965,0x2985,0x2965,0x31e7,0x31c6,0x2144,0x31a6,0x31e6,0x31c6,0x2964,0x2985,0x2985,0x31a6,0x2965,0x2964,0x2985,0x2985,0x31a6,0x2965,0x2985,0x31a5,0x2985,0x31c6,0x31c6,0x39e6,0x31c6,0x2964,0x2965,0x31c6,0x31a6,0x2985,0x2965,0x3a07,0x2985,0x2965,0x3a27,0x31a6,0x29a6,0x31c6,0x31c6,0x2964,0x2965,0x31e7,0x31e7,0x39e7,0x2144,0x2985,0x2965,0x2986,0x31a6,0x31a6,0x31c7,0x2965,0x31a6,0x18e3,0x2985,0x2965,0x2965,0x39e7,0x31c7,0x2985,0x3186,0x4a69,0x3a08,0x31e7,0x2986,0x31a6,0x39e7,0x2944,0x2124,0x31a6,0x39e7,0x31a6,0x31a6,0x2966,0x39e7,0x31c7,0x3a07,0x4207,0x39e7,0x39e6,0x4228,0x31c6,0x31a5,0x3a07,0x39e7,0x31c6,0x3a07,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x4228,0x4248,0x39e7,0x4228,0x3a07,0x4228,0x4a48,0x4228,0x4228,0x39e7,0x39e7,0x4248,0x31e7,0x4a69,0x4a8a,0x4248,0x4a89,0x3a07,0x4227,0x5289,0x4a69,0x4a69,0x52aa,0x52aa,0x4248,0x52aa,0x4a69,0x4228,0x4a69,0x52aa,0x5289,0x4a89,0x4a69,0x52aa,0x52aa,0x52aa,0x4a69,0x5aea,0x52aa,0x52aa,0x52ca,0x5aeb,0x52aa,0x52aa,0x5aeb,0x5aeb,0x4a68,0x52a9,0x4a69,0x4248,0x52ca,0x52ca,0x52a9,0x4a89,0x52ca,0x5aeb,0x52aa,0x5b0b,0x632b,0x5b0b,0x5aea,0x5aca,0x52a9,0x52aa,0x52a9,0x52a9,0x52ca,0x52aa,0x52aa,0x632c,0x632c,0x5aca,0x52ca,0x52ca,0x5289,0x6b4d,0x5b0b,0x52ca,0x5aeb,0x52ca,0x5aea,0x5aca,0x5aca,0x5aca,0x52aa,0x5aeb,0x5aca,0x52aa,0x5acb,0x5289,0x5aea,0x5289,0x52a9,0x4a48,0x52aa,0x5aca,0x4a48,0x4a48,0x4a48,0x4207,0x4207,0x4207,0x39c6,0x39c7,0x4a49,0x4228,0x3185,0x39e7,0x31c6,0x2985,0x2924,0x20e2,0x2123,0x31a6,0x2924,0x2903,0x2103,0x2944,0x1881,0x1881,0x1880,0x0000,0x0000,0x0000,0x18e2,0x0860,0x0000,0x0840,0x1081,0x0020,0x0860,0x0860,0x0820,0x0820,0x10a1,0x0840,0x0840,0x1080,0x0820,0x0000, +0x638d,0x6bae,0x73ef,0x6bce,0x638d,0x636d,0x638d,0x6bce,0x6bce,0x6bce,0x6b8d,0x5b0b,0x6b8d,0x638d,0x636c,0x63ad,0x636c,0x636d,0x636c,0x636c,0x638d,0x636d,0x638d,0x6bce,0x636d,0x73ce,0x638d,0x636c,0x636c,0x634c,0x5b2b,0x634c,0x5b4c,0x638d,0x636c,0x638d,0x5b4c,0x634c,0x636c,0x634c,0x636d,0x5b2c,0x5b2b,0x5b2b,0x52eb,0x52ea,0x5b6c,0x5b2b,0x52ea,0x5b2c,0x5b2c,0x5b2b,0x530b,0x5b2c,0x52eb,0x52eb,0x52eb,0x5b0b,0x52ca,0x52eb,0x5b2c,0x5b2c,0x5b2c,0x5b0b,0x52ea,0x530b,0x52ea,0x52ea,0x52ea,0x5b0c,0x5b2b,0x5b2c,0x52eb,0x52ca,0x52eb,0x52ea,0x52ea,0x52eb,0x52ca,0x52ea,0x52eb,0x52ca,0x5b4c,0x5b2b,0x5b0b,0x5b2b,0x52ca,0x52eb,0x52ea,0x5b2b,0x530b,0x52ea,0x52eb,0x52eb,0x530b,0x530b,0x52ca,0x52ca,0x4aaa,0x52eb,0x4aaa,0x5b0b,0x4aaa,0x4aa9,0x5b0b,0x5b4c,0x52ea,0x52ea,0x5b2c,0x634c,0x4aca,0x530b,0x5b4c,0x5b4c,0x530b,0x52eb,0x5b2b,0x5b0b,0x52ca,0x5b2c,0x52ea,0x52ea,0x5b2b,0x5b2b,0x636d,0x5b2b,0x52ca,0x530b,0x5b2c,0x52ea,0x636d,0x5b2c,0x5b2c,0x634c,0x4aa9,0x52ea,0x5b2b,0x5aeb,0x5aeb,0x530b,0x5b0b,0x52ea,0x634c,0x634c,0x52eb,0x5b2c,0x52eb,0x52ca,0x52eb,0x6b8d,0x6bad,0x6bcd,0x638d,0x636d,0x5b0b,0x5aeb,0x52ea,0x632c,0x632c,0x634c,0x5b2b,0x52eb,0x634c,0x636c,0x636c,0x634c,0x6b8d,0x636d,0x6b8d,0x636c,0x634c,0x73ce,0x6bad,0x634c,0x636c,0x634c,0x6b6d,0x6bae,0x638d,0x636d,0x6bad,0x73ce,0x738d,0x6b6d,0x6b6d,0x6bae,0x73ee,0x73ef,0x638d,0x73ce,0x73ae,0x73ce,0x73ee,0x73ef,0x8430,0x73ce,0x7bef,0x7c30,0x73ce,0x73ce,0x73ce,0x7c0f,0x7c2f,0x73ee,0x73ce,0x7c30,0x73ee,0x6bad,0x73ce,0x7c2f,0x7c0f,0x73ce,0x73ae,0x7bef,0x7c2f,0x73ce,0x73ce,0x7bef,0x7bef,0x8430,0x842f,0x8430,0x7c0f,0x7c0f,0x8450,0x7c0f,0x7bef,0x7bef,0x7c0f,0x7c0f,0x7c0f,0x8430,0x7c0f,0x7c0f,0x7c0f,0x7c2f,0x7c2f,0x8450,0x8471,0x8430,0x94b1,0x842f,0x7c0f,0x7c0f,0x7c0f,0x8450,0x8450,0x7bef,0x8450,0x8450,0x8c91,0x8c71,0x8430,0x7bee,0x840f,0x8c70,0x8430,0x8c50,0x8c71,0x8450,0x8c91,0x8c70,0x8450,0x8450,0x8c71,0x8c91,0x8c91,0x94b1,0x8c71,0x8c50,0x8c91,0x94b2,0x9491,0x8450,0x9491,0x9cf3,0x9cd2,0x8c70,0x8c70,0x94d2,0x94d2,0x8c70,0x8c91,0x8470,0x9491,0x8c51,0x8c50,0x8c50,0x8c71,0x842f,0x7bef,0x7bce,0x73ae,0x8450,0x8450,0x7bef,0x73ce,0x8450,0x8430,0x6bae,0x7c0f,0x7bef,0x73ae,0x6b8d,0x7c0f,0x73ae,0x7bef,0x738d,0x7bef,0x7bef,0x6b8d,0x73ae,0x7c10,0x73cf,0x6b6d,0x73ce,0x73ce,0x7bef,0x6b4d,0x6b4c, +0x636c,0x634c,0x740f,0x638d,0x636d,0x6bae,0x638d,0x73ce,0x6bae,0x73ce,0x6bad,0x5b2c,0x638d,0x638d,0x636c,0x638d,0x6bad,0x6b8d,0x638d,0x6bad,0x638d,0x6bad,0x5b4c,0x6b8d,0x638d,0x636c,0x638d,0x636c,0x6bad,0x638c,0x6b8d,0x636c,0x638d,0x636c,0x634c,0x6bad,0x636c,0x634c,0x638d,0x5b4c,0x5b4c,0x638d,0x5b4c,0x5b4c,0x638d,0x636c,0x636c,0x5b0b,0x52ea,0x5b4c,0x636d,0x5b4c,0x530b,0x634c,0x5b4c,0x530b,0x5b4c,0x634c,0x5b4c,0x5b2b,0x5b2b,0x5b2c,0x636c,0x5b0b,0x5b4c,0x530a,0x530b,0x5b2b,0x5b2b,0x52eb,0x530b,0x5b2b,0x530b,0x52eb,0x5b2c,0x5b4c,0x52ca,0x52ca,0x52ea,0x52ea,0x530a,0x52ea,0x52ca,0x4aca,0x5b2b,0x5b4c,0x5b2b,0x530b,0x530b,0x5b4c,0x5b2b,0x636c,0x5b2c,0x5b4c,0x52ca,0x52ca,0x530b,0x530b,0x52ca,0x530b,0x5b0b,0x5b0b,0x52ea,0x530b,0x52ea,0x5b2c,0x5b2c,0x52eb,0x636c,0x5b2b,0x52ca,0x5b0b,0x5b0b,0x5b0b,0x52ea,0x52ca,0x634c,0x634c,0x5b2b,0x4aaa,0x52ea,0x52ea,0x5b0b,0x5b4c,0x5b0b,0x5b0b,0x5aeb,0x636c,0x6bad,0x5b2b,0x5b2c,0x52aa,0x5b2b,0x636c,0x5b0b,0x52ea,0x52ea,0x4aa9,0x5aeb,0x636c,0x530b,0x5b4c,0x636c,0x6bce,0x5b4c,0x5b2b,0x5b4c,0x634c,0x5b0b,0x634c,0x6bad,0x634c,0x6bad,0x636d,0x5b2c,0x636c,0x638d,0x5b4c,0x634c,0x6b6c,0x6b8d,0x6bad,0x6b8d,0x636c,0x638d,0x636c,0x73ae,0x73ce,0x6b8d,0x6b8d,0x6b8d,0x73ad,0x6bad,0x6b8d,0x6bad,0x73ae,0x73ad,0x6b8d,0x6bad,0x73ce,0x73ef,0x73ee,0x73ce,0x6b8d,0x73ce,0x6b8d,0x6b8d,0x6bad,0x73ee,0x7c2f,0x73ce,0x7c2f,0x7c0f,0x73ce,0x7bee,0x7bef,0x7bee,0x73ce,0x6bad,0x7c0f,0x73ce,0x73ce,0x73ee,0x7bef,0x7bee,0x73ce,0x73ee,0x7bef,0x7c0f,0x8450,0x8430,0x73ce,0x7bee,0x73ae,0x73ce,0x7bef,0x7c0f,0x73ce,0x73ce,0x7c0f,0x842f,0x8430,0x8450,0x7c0f,0x8450,0x7c0f,0x7bef,0x840f,0x7bee,0x7c0f,0x7bce,0x8430,0x8450,0x7c0f,0x842f,0x7c2f,0x842f,0x7c0f,0x840f,0x7c0f,0x8470,0x842f,0x8450,0x8450,0x8450,0x8450,0x8c70,0x8c71,0x8450,0x7bef,0x840f,0x842f,0x7c0f,0x7c0f,0x7c0f,0x8c71,0x8430,0x8c50,0x8430,0x8450,0x8c50,0x8450,0x7bef,0x8450,0x8450,0x7c0f,0x7bef,0x8c50,0x7c0f,0x8c50,0x840f,0x9491,0x94b1,0x8c70,0x8c71,0x8c50,0x7c0f,0x8c71,0x8430,0x8c71,0x8450,0x840f,0x8450,0x842f,0x840f,0x8c91,0x8c71,0x8450,0x842f,0x842f,0x8450,0x840f,0x840f,0x842f,0x7c0f,0x7c0f,0x7c0f,0x8430,0x842f,0x8450,0x7c0f,0x7bee,0x7c0f,0x8430,0x7c0f,0x7c0f,0x8430,0x73ce,0x7c0f,0x7bef,0x7bef,0x7bef,0x7c0f,0x8430,0x7bef,0x73ce,0x73ae,0x7bef,0x738d,0x73ae, +0x6b8d,0x6bce,0x6bad,0x6bce,0x6bae,0x5b2c,0x73ee,0x6bce,0x6bce,0x73ee,0x6bcd,0x636c,0x638d,0x638d,0x638d,0x638d,0x6b8d,0x636c,0x6b8d,0x6b8d,0x638d,0x6bce,0x636c,0x6bad,0x634c,0x636c,0x638d,0x6bad,0x6bcd,0x6b8d,0x6bad,0x6b8d,0x6bad,0x6bad,0x6b8d,0x6b8d,0x6b8d,0x636c,0x636d,0x6bad,0x6bce,0x6bce,0x634c,0x6bad,0x6b8d,0x636c,0x6b8d,0x636d,0x636d,0x638d,0x636d,0x636d,0x634c,0x634c,0x5b4c,0x5b4c,0x636c,0x636c,0x5b2b,0x5b2b,0x530b,0x6b8d,0x5b2c,0x5b2c,0x5b2c,0x530b,0x5b2b,0x636c,0x530b,0x5b2b,0x5b2b,0x634c,0x5b0b,0x5b2b,0x636c,0x5b4c,0x5b2b,0x5b2b,0x5b4c,0x52eb,0x52eb,0x52eb,0x634c,0x636c,0x5b2b,0x5b2b,0x5b2b,0x5b0b,0x530b,0x530b,0x5b6c,0x5b2c,0x5b4c,0x5b2c,0x5b0b,0x52eb,0x5b2c,0x530b,0x5b0b,0x634c,0x638d,0x5b4c,0x636c,0x5b2b,0x5b4c,0x5b0b,0x638d,0x5b2c,0x636c,0x636c,0x634c,0x6bad,0x5b2b,0x5b2c,0x52ca,0x530b,0x636c,0x6b8d,0x5b2c,0x636c,0x5b0b,0x636c,0x636d,0x5b4c,0x636c,0x5b2c,0x636c,0x638d,0x532b,0x636c,0x5b4c,0x5b4c,0x636c,0x638d,0x636c,0x5b2b,0x638d,0x636c,0x638d,0x5b2b,0x5b4c,0x634c,0x6bad,0x636c,0x636d,0x6b8d,0x6b8d,0x636c,0x636c,0x636c,0x636c,0x636d,0x6b8d,0x634c,0x634c,0x636d,0x636d,0x740f,0x73ce,0x6b6d,0x6b8d,0x6b8d,0x6b8d,0x6bad,0x6bce,0x73ee,0x6b8d,0x6bad,0x6b8d,0x6b8d,0x73ce,0x73ce,0x6b8d,0x6b8d,0x6bcd,0x7bef,0x73ce,0x73ad,0x7bef,0x6bad,0x740f,0x73ce,0x6bae,0x6bad,0x73ee,0x73ce,0x73ee,0x6bad,0x740f,0x73ee,0x73ce,0x73ae,0x7bef,0x73ce,0x73ce,0x7c50,0x7c0f,0x73ae,0x73ee,0x7c30,0x6bad,0x73ee,0x73ee,0x73ee,0x7c0f,0x73ce,0x7bee,0x8450,0x7c0f,0x8450,0x8470,0x7c0f,0x7c2f,0x7c0f,0x7c0f,0x7bef,0x7c0f,0x7c0f,0x7c0f,0x73ee,0x7c2f,0x8450,0x8430,0x7c2f,0x8450,0x7c0f,0x73ee,0x7bef,0x7bef,0x7c0f,0x842f,0x842f,0x840f,0x8c91,0x8c91,0x8450,0x7c2f,0x7c0f,0x7c0f,0x7c0f,0x94b1,0x8430,0x8430,0x8430,0x842f,0x8450,0x8c70,0x8450,0x8c91,0x8430,0x8450,0x7c0f,0x7c0f,0x7c0f,0x8430,0x8c70,0x8450,0x8c70,0x7c0f,0x8450,0x8c71,0x8c50,0x8c70,0x8c70,0x7c2f,0x8430,0x840f,0x8430,0x8c71,0x8c71,0x840f,0x8c50,0x8c50,0x8430,0x8430,0x8c91,0x8450,0x8430,0x8c71,0x8430,0x840f,0x840f,0x7c0f,0x7c0f,0x7c0f,0x7c0f,0x8430,0x8430,0x7bef,0x8430,0x8c70,0x842f,0x8430,0x7c0f,0x7bee,0x73ce,0x73ce,0x7bef,0x8450,0x8450,0x842f,0x7bce,0x7c0f,0x840f,0x7bef,0x73ce,0x73ce,0x7bce,0x7bef,0x7c0f,0x7bce,0x73ae,0x73ce,0x6bad,0x7bce,0x7bef,0x840f,0x73ae,0x7bef,0x73ce, +0x6bae,0x73ee,0x638d,0x6bad,0x6bce,0x6bad,0x740f,0x6bce,0x73ee,0x6bad,0x6bad,0x73ee,0x73ee,0x638d,0x636d,0x6bce,0x6bae,0x6bad,0x73ce,0x6bad,0x6bae,0x73ee,0x6bce,0x6bad,0x6bae,0x6bce,0x6bad,0x6bad,0x6bcd,0x6bad,0x634c,0x638d,0x638d,0x6bad,0x6bad,0x636c,0x636c,0x63ad,0x63ad,0x6bce,0x6bae,0x636c,0x6bae,0x636d,0x636c,0x636c,0x636d,0x636d,0x6bad,0x5b4c,0x5b2b,0x636c,0x636d,0x5b2c,0x638d,0x636d,0x634c,0x636d,0x634c,0x5b2c,0x5aeb,0x634c,0x5b4c,0x5b0b,0x5b0b,0x5b4c,0x5b4c,0x5b0b,0x530b,0x5b4c,0x636c,0x636c,0x5b4c,0x634c,0x5b2b,0x634c,0x5b4c,0x636c,0x636c,0x5b4c,0x5b2c,0x634c,0x636c,0x636c,0x5b2c,0x636c,0x5b0b,0x5b2c,0x638d,0x636c,0x636c,0x5b2c,0x636d,0x5b6c,0x5b6c,0x636c,0x638d,0x638d,0x5b4c,0x638c,0x636c,0x636c,0x636c,0x5b2b,0x638d,0x5b4c,0x636c,0x638d,0x530b,0x634c,0x5b2b,0x638d,0x5b4c,0x638d,0x6b8d,0x636c,0x5b4b,0x6bad,0x530b,0x5b2c,0x6bce,0x6b8d,0x634c,0x638d,0x636c,0x5b2b,0x636c,0x5b4c,0x5b2b,0x6bad,0x636c,0x6bad,0x73ee,0x6bad,0x638d,0x6bad,0x6bad,0x6bad,0x6bce,0x5b4c,0x6b8d,0x636c,0x636d,0x6bad,0x6b8d,0x6bce,0x6b8d,0x636d,0x73ae,0x73ce,0x6bce,0x638d,0x6bad,0x6bce,0x6bad,0x73ce,0x6bce,0x73ce,0x73ee,0x73ce,0x6bad,0x6bce,0x6bad,0x7c0f,0x6bce,0x6bce,0x6bad,0x6b8d,0x7c0f,0x6bce,0x7c0e,0x7c2f,0x6b8d,0x6bce,0x740e,0x7c0f,0x73ee,0x73ee,0x73ef,0x63ad,0x740f,0x73ce,0x73ee,0x73ee,0x6b8d,0x73ce,0x740f,0x740f,0x7c0f,0x73ce,0x7c0f,0x7c0f,0x7c0f,0x7c50,0x6bce,0x740f,0x8450,0x73ee,0x7bef,0x7c0f,0x73ee,0x8450,0x8450,0x7c2f,0x73ce,0x7c0f,0x73ee,0x7c0f,0x7c0f,0x8450,0x7c2f,0x73ee,0x8470,0x7c0f,0x7c50,0x7c2f,0x7bef,0x7c0f,0x7c2f,0x73ee,0x73ee,0x7bef,0x8450,0x8430,0x7bef,0x73ce,0x842f,0x7c0f,0x842f,0x8430,0x8470,0x7c0f,0x842f,0x8c71,0x7c0f,0x8430,0x842f,0x8c70,0x94d2,0x7bee,0x7c0f,0x842f,0x7c2f,0x7c0f,0x8c91,0x8450,0x842f,0x8450,0x8c70,0x842f,0x8c50,0x8450,0x8450,0x8470,0x8430,0x7bef,0x7c0f,0x7bee,0x8430,0x8430,0x842f,0x7bef,0x7bef,0x842f,0x7c2f,0x7bee,0x8c70,0x8430,0x8450,0x7bef,0x8450,0x8c50,0x8c70,0x7c0f,0x7bce,0x8450,0x8450,0x8c91,0x8c70,0x8c70,0x8450,0x8430,0x8c50,0x842f,0x8c70,0x8cb1,0x8c70,0x8c71,0x8430,0x8430,0x8430,0x8c70,0x842f,0x8450,0x7bee,0x7c0f,0x8c71,0x840f,0x8c71,0x8450,0x7c0f,0x8c50,0x8450,0x8410,0x7bef,0x8c91,0x842f,0x73ce,0x8430,0x8450,0x7bef,0x7bef,0x8430,0x73ee,0x7bef,0x8430,0x8c71,0x8430,0x7bef,0x7c0f, +0x6bae,0x73ce,0x6b8d,0x73ce,0x73ce,0x6b6d,0x6bad,0x636d,0x634c,0x636d,0x636d,0x638d,0x6bad,0x6bae,0x638d,0x636d,0x636d,0x634c,0x6b8d,0x636d,0x5aeb,0x5b2c,0x636c,0x5b4b,0x636c,0x6bce,0x638d,0x634c,0x6b8d,0x638c,0x6bad,0x6bae,0x6bad,0x636d,0x5b4c,0x634c,0x5b0b,0x636c,0x6b8d,0x5b4c,0x5b2b,0x636c,0x5b4c,0x5b4c,0x5b4c,0x634c,0x5b2c,0x5b2c,0x634c,0x634c,0x6b8d,0x636d,0x634c,0x5b0b,0x5b0b,0x5b2c,0x634c,0x5b2c,0x636c,0x5b0b,0x5b0b,0x634c,0x636d,0x5b0b,0x5b2b,0x5b4c,0x638d,0x5b2c,0x636c,0x636d,0x530b,0x5b2c,0x634c,0x5b2c,0x5b0b,0x52eb,0x5b4c,0x636c,0x636c,0x5b4c,0x5b0b,0x636d,0x52ea,0x5b2c,0x636d,0x636c,0x5b2b,0x52ea,0x5b4c,0x6b8d,0x6bad,0x5b2c,0x5b2b,0x5b0b,0x5b4c,0x5b4c,0x634c,0x634c,0x5b0b,0x632c,0x5b2c,0x636c,0x5b2c,0x636c,0x5b4c,0x636c,0x634c,0x636c,0x6bad,0x636c,0x638d,0x636c,0x636d,0x636d,0x6b8d,0x6bad,0x638d,0x73ee,0x636c,0x636c,0x6bad,0x634c,0x634c,0x636c,0x6bce,0x6bad,0x634c,0x636c,0x6bad,0x6b8d,0x636c,0x6bad,0x6b8d,0x636c,0x5b4c,0x6b8d,0x636c,0x636c,0x636c,0x636c,0x638d,0x636c,0x5b4c,0x638d,0x634c,0x5b4c,0x5b4c,0x634c,0x6bad,0x636c,0x638d,0x638d,0x638d,0x638d,0x634c,0x5b4c,0x6bad,0x6bad,0x636c,0x636c,0x73ce,0x638d,0x6bad,0x73ad,0x6bce,0x6bad,0x636c,0x6bad,0x73ce,0x634c,0x636c,0x73ae,0x636d,0x73ce,0x638d,0x6bad,0x73ee,0x6bad,0x5b4c,0x6bad,0x73ce,0x6b8d,0x6b8d,0x6b8d,0x73ce,0x6bad,0x6bae,0x6bad,0x6b6d,0x73ae,0x73ee,0x6bad,0x73ce,0x73ce,0x6b8d,0x6b8d,0x6bad,0x6b8d,0x6bae,0x73ae,0x73ce,0x73ce,0x6b8d,0x6b8d,0x6b8d,0x73ae,0x6bad,0x6b8d,0x6b6d,0x6b6d,0x6b8d,0x6b8d,0x73ce,0x73ce,0x6b6d,0x73ae,0x73ae,0x73ae,0x6bad,0x6b8d,0x73ce,0x6bad,0x6b6d,0x6b8d,0x6b6d,0x634c,0x6b6d,0x6b8d,0x6b8d,0x6b8d,0x6b8d,0x634c,0x738d,0x6b8d,0x6bad,0x6b6d,0x634c,0x6b8d,0x6b8d,0x6b4c,0x6b8d,0x73ce,0x6bad,0x636c,0x73ae,0x6b8d,0x7bce,0x6b8d,0x6b8d,0x738d,0x6b8d,0x6b8d,0x73ae,0x73ad,0x6b6d,0x6b8d,0x6b6d,0x738e,0x73ae,0x6b8d,0x6b8d,0x73ce,0x6b6d,0x6b6d,0x6b8d,0x6b8d,0x73ce,0x6b6d,0x73ce,0x73ce,0x7bee,0x73ce,0x6b8d,0x73ae,0x7bce,0x73ae,0x73ce,0x738d,0x73ae,0x73ce,0x7bce,0x7bef,0x73ce,0x738d,0x73ce,0x8450,0x73ae,0x738d,0x73ae,0x73ce,0x7bee,0x7bce,0x7bce,0x840f,0x7bce,0x8450,0x8430,0x73ae,0x7bef,0x7bef,0x6b8d,0x73ae,0x7bef,0x8430,0x7bef,0x73ce,0x7bef,0x738e,0x73ae,0x73ce,0x73ae,0x73ce,0x7c10,0x7bef,0x8450,0x7bef,0x73ae,0x7c0f,0x73ee,0x73ce, +0x3a07,0x3a07,0x31c7,0x39e7,0x3a07,0x3186,0x31c7,0x3186,0x3186,0x31c7,0x39e7,0x2965,0x2985,0x3a08,0x31a6,0x2986,0x2986,0x2965,0x3186,0x31a6,0x2965,0x2965,0x2985,0x2985,0x2985,0x31a6,0x31a6,0x3186,0x2985,0x2965,0x2985,0x2985,0x31a6,0x31a6,0x31c6,0x2986,0x2985,0x3185,0x31c6,0x31c6,0x2965,0x29a6,0x29a6,0x2985,0x2985,0x2985,0x2165,0x2145,0x2985,0x2986,0x31c7,0x31a6,0x2985,0x2985,0x2985,0x2965,0x2144,0x2985,0x31c6,0x2944,0x3185,0x2965,0x2124,0x2945,0x2985,0x2965,0x31a6,0x2985,0x2986,0x31c6,0x2965,0x2124,0x2965,0x2124,0x2985,0x2144,0x2965,0x2985,0x2985,0x2985,0x2145,0x31a6,0x2965,0x2965,0x2144,0x2965,0x2965,0x2124,0x2144,0x2985,0x2985,0x2965,0x2965,0x2124,0x2965,0x2144,0x2945,0x2965,0x2965,0x2145,0x2124,0x31a6,0x3186,0x2144,0x2144,0x2965,0x2965,0x2985,0x2965,0x2965,0x2985,0x2144,0x2945,0x2985,0x2965,0x2965,0x31a6,0x2985,0x2124,0x2965,0x2144,0x2965,0x18e3,0x2144,0x2965,0x2944,0x2103,0x2965,0x2965,0x2124,0x1904,0x2965,0x2144,0x2124,0x2124,0x18e3,0x2144,0x2985,0x2144,0x2124,0x2965,0x2144,0x2144,0x2965,0x2965,0x2103,0x2144,0x2965,0x2144,0x2144,0x1903,0x2124,0x2965,0x2124,0x18e3,0x2144,0x2985,0x2123,0x2965,0x2985,0x2124,0x2945,0x2945,0x2945,0x2144,0x31a5,0x2144,0x2985,0x2124,0x2124,0x2144,0x2124,0x2945,0x2965,0x2144,0x2965,0x2944,0x2965,0x2144,0x2144,0x2965,0x2945,0x2965,0x3186,0x39e7,0x2965,0x2944,0x2124,0x2124,0x2985,0x31a5,0x2965,0x2124,0x2124,0x2965,0x2964,0x2944,0x2945,0x2985,0x31a6,0x2965,0x2144,0x2144,0x2965,0x2965,0x2945,0x2124,0x2944,0x2965,0x2124,0x2965,0x2945,0x2965,0x2965,0x2965,0x2965,0x3185,0x2965,0x2124,0x2944,0x31c6,0x3186,0x31a6,0x2945,0x2944,0x2965,0x2945,0x2965,0x2945,0x31a6,0x2985,0x2944,0x2965,0x3185,0x2985,0x2985,0x2944,0x2944,0x2965,0x3185,0x31c6,0x39c6,0x31a6,0x31a6,0x31c6,0x31a6,0x39c6,0x3185,0x39e7,0x39c6,0x31a6,0x31a6,0x39c6,0x39c6,0x39c7,0x31c6,0x39e7,0x4228,0x39c6,0x31a6,0x3a07,0x4a48,0x4228,0x4207,0x4208,0x4228,0x39c6,0x4208,0x4207,0x4207,0x4228,0x4248,0x4228,0x39e7,0x4208,0x4a69,0x4a69,0x4a49,0x4a69,0x39e7,0x4228,0x4a89,0x4a49,0x4228,0x4a69,0x4a69,0x39e7,0x4228,0x5289,0x5289,0x4a69,0x4a69,0x52aa,0x52aa,0x4207,0x5acb,0x528a,0x4a69,0x52aa,0x52aa,0x4a69,0x5289,0x4208,0x4a89,0x52ca,0x4248,0x52aa,0x5aeb,0x5aca,0x5aeb,0x528a,0x52ca,0x5aeb,0x52ca,0x52aa,0x52ca,0x5aeb,0x52ca,0x4a69,0x52ca, +0x0841,0x0841,0x1061,0x0820,0x0021,0x1082,0x0841,0x1082,0x1082,0x0861,0x0041,0x10a2,0x10a2,0x0000,0x0841,0x1061,0x1082,0x10a2,0x0882,0x0861,0x10a2,0x10a2,0x0881,0x1082,0x1082,0x0861,0x1082,0x10a2,0x10a2,0x10a3,0x10a2,0x1082,0x1082,0x1082,0x0861,0x0861,0x1081,0x1082,0x1061,0x0000,0x1082,0x1061,0x1061,0x10a2,0x1082,0x10a2,0x1082,0x10c2,0x10a2,0x0861,0x0820,0x10a2,0x10a2,0x0881,0x0882,0x1082,0x10a2,0x1081,0x0881,0x10a2,0x10c2,0x10c2,0x10a2,0x18c2,0x1081,0x10a2,0x1081,0x1082,0x1082,0x1082,0x10a2,0x10a2,0x1082,0x10a2,0x10a2,0x10a2,0x1081,0x10a2,0x10a2,0x10a2,0x1082,0x0861,0x1082,0x1082,0x10a2,0x1082,0x1082,0x18a2,0x1082,0x1061,0x0861,0x1081,0x10c2,0x10c2,0x1081,0x1082,0x1082,0x1081,0x10a2,0x10a2,0x10c3,0x10a2,0x1081,0x10a2,0x18a2,0x10a2,0x10a2,0x1061,0x10a2,0x10a2,0x10a2,0x18c2,0x2104,0x1081,0x10a2,0x10c2,0x0861,0x10a2,0x10a2,0x10a2,0x10c3,0x10a2,0x18e3,0x18c3,0x1061,0x10a2,0x18e3,0x10c2,0x10a2,0x2104,0x18e3,0x10a2,0x1082,0x18e3,0x18a2,0x18c2,0x1082,0x1061,0x10a2,0x18c2,0x10a2,0x1081,0x18e3,0x18e3,0x18a2,0x18c3,0x1062,0x10a2,0x18c2,0x18e3,0x18c3,0x18c3,0x10a2,0x18c3,0x18e3,0x18c3,0x10a2,0x18e3,0x10c2,0x18c2,0x18e3,0x10a2,0x18c3,0x10c2,0x18c2,0x10a2,0x18c2,0x18c3,0x18c2,0x18c2,0x18c3,0x18c3,0x10c3,0x1903,0x18c2,0x10c2,0x18c2,0x10c2,0x18e3,0x18c3,0x10a2,0x18c3,0x18c2,0x10a2,0x10a2,0x18c3,0x10c2,0x18e3,0x18e3,0x10a2,0x1081,0x18c2,0x18e3,0x18e3,0x18c3,0x18c2,0x18c3,0x18e3,0x18c2,0x18c2,0x10a2,0x18e3,0x18e3,0x18c3,0x1903,0x18c3,0x2104,0x18e3,0x18e3,0x18e3,0x18c2,0x18c2,0x18c2,0x18c3,0x10a2,0x10a2,0x10a2,0x10a2,0x18c3,0x18e3,0x0861,0x10a2,0x1082,0x18c2,0x18c3,0x18e3,0x18c3,0x18c3,0x18e3,0x18c2,0x18c2,0x18c3,0x18a2,0x10a2,0x18c3,0x18e3,0x18c2,0x18c3,0x18c2,0x18c3,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10c2,0x10a2,0x18c3,0x18c3,0x10c2,0x18c2,0x18a2,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x0861,0x10a2,0x18c3,0x10a2,0x0861,0x0861,0x10a2,0x10a2,0x10a2,0x18c3,0x1081,0x10c2,0x10a2,0x10a2,0x0861,0x0861,0x10a2,0x10a2,0x1082,0x0861,0x1082,0x0820,0x10a2,0x0881,0x0020,0x0861,0x1082,0x0861,0x0020,0x0861,0x1081,0x0020,0x0000,0x0020,0x0020,0x0000,0x0820,0x1082,0x0000,0x0020,0x0861,0x0000,0x0840,0x0861,0x0841,0x1082,0x0000,0x0020,0x18c2,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0861,0x0841,0x0000, +0x39e7,0x31c7,0x31c7,0x39e7,0x39c6,0x31c6,0x39e7,0x31c6,0x4228,0x3a07,0x31c6,0x39e7,0x39e7,0x39e7,0x39e7,0x31a6,0x39e7,0x39e7,0x39e7,0x31c6,0x31c7,0x31c7,0x31c6,0x39c7,0x31c7,0x31a6,0x39e7,0x39e7,0x31c7,0x39e7,0x39e7,0x3a07,0x39e7,0x31a6,0x31c6,0x3a07,0x39e7,0x39e7,0x3a07,0x3a07,0x3a07,0x31e7,0x39e7,0x39e7,0x3a07,0x3a07,0x31c6,0x39e7,0x39e7,0x31c6,0x39e7,0x39e7,0x31e7,0x3a07,0x31e7,0x31c7,0x39c7,0x31c6,0x31c6,0x31c6,0x3a07,0x39e7,0x3a07,0x3a07,0x31e7,0x31c6,0x39e7,0x3a07,0x31c6,0x39e7,0x31e7,0x31c6,0x31c6,0x39e7,0x39e7,0x31c6,0x39e7,0x31c6,0x39e7,0x39e7,0x31a6,0x31c7,0x39e7,0x3a07,0x3a28,0x3a08,0x31c7,0x31c7,0x3a08,0x31c7,0x39e7,0x39e7,0x3a07,0x39e7,0x31e6,0x39e7,0x31e7,0x3a07,0x4228,0x3a07,0x3a07,0x4228,0x39e7,0x39e7,0x4248,0x4228,0x3a07,0x39e7,0x3a28,0x4228,0x4228,0x3a07,0x4228,0x3a27,0x4228,0x4228,0x3a08,0x3a28,0x4208,0x4248,0x3a07,0x3a28,0x4228,0x4248,0x4228,0x3a27,0x4228,0x4248,0x39e7,0x4a69,0x4289,0x3a28,0x4228,0x4248,0x4248,0x4248,0x3a28,0x4228,0x3a07,0x3a28,0x3a28,0x4248,0x4248,0x4a69,0x3a28,0x4228,0x4248,0x4248,0x4228,0x3a07,0x3a07,0x4228,0x3a07,0x3a07,0x4228,0x3a07,0x3a28,0x4248,0x4a69,0x3a07,0x3a07,0x4228,0x4248,0x3a07,0x3a08,0x39e7,0x3a07,0x4248,0x3a07,0x3a07,0x4248,0x4248,0x4208,0x4248,0x3a28,0x3a07,0x3a07,0x4228,0x4248,0x4228,0x4228,0x4228,0x3a07,0x4228,0x4208,0x3a08,0x4228,0x4228,0x4228,0x3a07,0x3a07,0x3a07,0x4248,0x3a08,0x3a07,0x3a08,0x3a28,0x3a07,0x4269,0x3a08,0x4248,0x4248,0x39e7,0x4228,0x4249,0x4228,0x3a08,0x3a08,0x3a27,0x3a07,0x4208,0x4208,0x4228,0x4228,0x4228,0x4208,0x3a08,0x4208,0x4228,0x4208,0x4228,0x4208,0x4248,0x4208,0x3a07,0x3a07,0x3a07,0x4228,0x4228,0x4208,0x4228,0x4228,0x3a07,0x3a07,0x3a08,0x39e7,0x39e7,0x3a07,0x39e7,0x4208,0x3a07,0x3a08,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x39e7,0x4208,0x39e7,0x4207,0x3a07,0x4207,0x4208,0x39e7,0x3a07,0x3a07,0x3a07,0x39c7,0x39e7,0x4208,0x4208,0x3a07,0x39e7,0x39e7,0x39e7,0x4208,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x39c7,0x39e7,0x3a08,0x3a07,0x3a07,0x39e7,0x39e7,0x39c7,0x39c7,0x39e7,0x39c7,0x39c7,0x39e7,0x4208,0x39c7,0x39c7,0x39c7,0x31a6,0x39e7,0x31c6,0x31c6,0x31a6,0x31a6,0x3186,0x2965,0x3186,0x2986,0x2965,0x3186,0x3186,0x3186,0x2965,0x2965,0x2965,0x2965,0x2945,0x3186,0x3186,0x31a6,0x2965,0x2945,0x2945,0x2945, +0x3a07,0x31c7,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x39e7,0x3a08,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x3a28,0x39e7,0x31e7,0x39e7,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x39e7,0x4228,0x39e7,0x3a07,0x3a07,0x3a07,0x3a08,0x4248,0x3a07,0x3a28,0x4228,0x3a07,0x4228,0x3a07,0x4228,0x4207,0x3a07,0x4228,0x3a28,0x3a07,0x4228,0x4228,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x4208,0x3a08,0x4228,0x4248,0x3a07,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x4228,0x39e7,0x3a07,0x3a07,0x3a28,0x3a08,0x39e7,0x3a08,0x3a08,0x3a07,0x4228,0x3a28,0x3a07,0x3a07,0x3a08,0x4228,0x3a08,0x4228,0x3a07,0x4248,0x3a28,0x4228,0x4228,0x3a07,0x3a07,0x4248,0x4228,0x4228,0x3a28,0x4228,0x4248,0x3a28,0x3a28,0x4248,0x4248,0x4248,0x4269,0x4248,0x4228,0x4248,0x4a89,0x4a89,0x4a89,0x4aa9,0x4a69,0x4268,0x4a69,0x4aa9,0x4269,0x4248,0x4a89,0x4a89,0x4a69,0x4a69,0x4a69,0x4248,0x3a28,0x4269,0x4248,0x4269,0x4a89,0x4a69,0x4268,0x4269,0x4268,0x4a69,0x4269,0x4269,0x4aaa,0x4248,0x4a69,0x4268,0x4a69,0x4269,0x4269,0x4248,0x4248,0x4a69,0x4a69,0x4a69,0x4a89,0x4a69,0x4248,0x4248,0x4a89,0x4a69,0x4248,0x4a69,0x4268,0x4248,0x4a89,0x4a8a,0x4a89,0x4a89,0x4aa9,0x4268,0x4a69,0x4a89,0x4aaa,0x4a89,0x4a89,0x4a89,0x4a89,0x4a69,0x4a69,0x4a89,0x4a89,0x4a89,0x4a89,0x4a69,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x4248,0x4a89,0x52aa,0x4269,0x4a89,0x4a89,0x4a69,0x4269,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x4a69,0x4a89,0x528a,0x4a69,0x4a69,0x4269,0x4a69,0x4a69,0x4a69,0x4a69,0x4a68,0x4a69,0x4a69,0x4a69,0x4269,0x4248,0x4249,0x4248,0x4a89,0x4a89,0x4a69,0x4a69,0x4a89,0x4a69,0x4a69,0x4a69,0x4a89,0x4a89,0x4a68,0x4a69,0x4a69,0x4249,0x4a69,0x4a69,0x4228,0x4249,0x4249,0x4a69,0x4a49,0x4248,0x4a69,0x4248,0x4248,0x4228,0x4248,0x4249,0x4228,0x4228,0x4249,0x4248,0x4248,0x4248,0x4228,0x5289,0x4248,0x4248,0x4a48,0x4248,0x4a49,0x4228,0x4228,0x4228,0x4228,0x4208,0x4248,0x4228,0x4228,0x4249,0x4248,0x4249,0x4249,0x4228,0x4249,0x4228,0x4228,0x4249,0x4228,0x4a69,0x4a69,0x4a69,0x4a69,0x3a08,0x4228,0x4248,0x4249,0x4a69,0x4249,0x4249,0x4a69,0x4248,0x4a69,0x4228,0x4248,0x4248,0x4a69,0x4248,0x4a69,0x4a49,0x4248,0x4228,0x4228,0x4228,0x4228,0x4208,0x4228,0x4a69,0x4228,0x4a8a,0x4248,0x4249,0x4a8a,0x4a48,0x4228,0x4248,0x4a69,0x4249,0x4a49,0x4a49,0x4249, +0x31a6,0x31a6,0x39c7,0x31a6,0x31c6,0x31a6,0x39e7,0x39c6,0x39c7,0x31c6,0x39e7,0x39c7,0x31a6,0x39c7,0x31c6,0x39e7,0x39c7,0x31a6,0x39e7,0x31c6,0x31c6,0x31c6,0x31c6,0x39e7,0x3a07,0x39e7,0x31c6,0x39c6,0x39e7,0x39e7,0x39e7,0x39c7,0x39e7,0x39c6,0x31a6,0x31c6,0x39e7,0x39e7,0x39c7,0x39c6,0x39c6,0x39e7,0x39e7,0x39e7,0x39c6,0x31a6,0x39c7,0x39c7,0x39c6,0x31c7,0x31c7,0x31c7,0x31c6,0x31a6,0x31c6,0x31c6,0x31a6,0x39e7,0x39e7,0x39c7,0x39e6,0x39e7,0x3a07,0x3a07,0x31c7,0x39c6,0x39c7,0x39e7,0x39c7,0x39e7,0x31c6,0x39e7,0x39e7,0x39c7,0x3a07,0x39e7,0x31c7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x4228,0x3a07,0x39c6,0x39e7,0x4208,0x39c7,0x39e7,0x39e7,0x31c6,0x39e7,0x3a07,0x39e7,0x3a07,0x39e7,0x31e7,0x3a07,0x4228,0x3a07,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x4228,0x3a07,0x31e7,0x3a07,0x3a07,0x3a07,0x3a27,0x3a27,0x4268,0x4268,0x4248,0x4248,0x4228,0x3a07,0x3a28,0x3a27,0x3a27,0x4228,0x3a27,0x3a07,0x4248,0x4248,0x3a07,0x4248,0x3a07,0x3a07,0x31c6,0x3a07,0x3a07,0x3a07,0x4248,0x4228,0x4207,0x4207,0x4248,0x3a07,0x4208,0x4207,0x4228,0x4227,0x3a07,0x3a28,0x4228,0x4228,0x4228,0x4228,0x3a07,0x3a07,0x4208,0x4228,0x3a27,0x4228,0x4208,0x4228,0x4228,0x3a27,0x4248,0x3a07,0x3a07,0x4a69,0x4228,0x4227,0x3a27,0x3a07,0x4248,0x3a07,0x4248,0x4228,0x4228,0x4248,0x4228,0x3a28,0x3a28,0x3a28,0x3a28,0x3a07,0x4228,0x4228,0x4228,0x3a07,0x3a27,0x4228,0x3a07,0x4228,0x4228,0x4228,0x3a07,0x4228,0x4208,0x39e7,0x4228,0x4207,0x4208,0x4228,0x4228,0x4227,0x3a07,0x4207,0x4a69,0x4228,0x39e7,0x4207,0x39e7,0x3a07,0x4228,0x3a07,0x31c6,0x31c6,0x3a07,0x3a07,0x4208,0x3a07,0x39e7,0x4207,0x3a07,0x3a07,0x3a07,0x39e7,0x4208,0x4208,0x39e7,0x39e7,0x3a07,0x4207,0x39e7,0x4208,0x4208,0x4207,0x39e7,0x4208,0x3a07,0x39e7,0x4228,0x3a07,0x3a07,0x4208,0x4208,0x39e7,0x4208,0x4228,0x4227,0x39e7,0x4227,0x39e7,0x3a07,0x39e7,0x3a07,0x4208,0x4207,0x39e7,0x4228,0x4228,0x39e7,0x39e7,0x4207,0x4208,0x4207,0x4228,0x39e7,0x3a07,0x4228,0x3a07,0x4228,0x4228,0x4208,0x4208,0x4207,0x4228,0x3a07,0x3a07,0x4208,0x4228,0x3a07,0x4228,0x4228,0x4207,0x39e7,0x4228,0x4228,0x4248,0x4a49,0x4208,0x4207,0x4208,0x4208,0x4228,0x4228,0x39e7,0x4228,0x4248,0x4248,0x4207,0x4228,0x5aeb,0x4a69,0x4228,0x4228,0x4228,0x4a69,0x4a69,0x4a69,0x4228,0x4249,0x4228,0x4228,0x4228,0x4a48,0x4a49,0x4248,0x4228,0x4228,0x4a69,0x4a69,0x4a49, +0x31a6,0x31a6,0x31a6,0x2985,0x31a6,0x31a6,0x2985,0x2985,0x2985,0x31a6,0x3185,0x3186,0x31a6,0x3185,0x2965,0x31a6,0x31a6,0x2986,0x2985,0x2965,0x2965,0x2965,0x2985,0x2965,0x31a6,0x2985,0x2965,0x3185,0x2985,0x2965,0x31c6,0x39c6,0x31a6,0x39e7,0x3186,0x31a6,0x31c6,0x31a6,0x3186,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x2965,0x31c6,0x31c6,0x39e7,0x39e7,0x31a6,0x3185,0x2965,0x31a6,0x31c6,0x31a6,0x31a6,0x2965,0x2985,0x2985,0x3185,0x2985,0x2985,0x3186,0x2144,0x2985,0x2985,0x3186,0x2985,0x31a6,0x31a6,0x2986,0x2965,0x3186,0x2965,0x2965,0x2985,0x31c6,0x2985,0x2985,0x31a6,0x2985,0x2985,0x31c6,0x2985,0x3186,0x31a6,0x31a6,0x2985,0x2986,0x2985,0x2985,0x31c6,0x31c6,0x31a6,0x31a6,0x2985,0x3186,0x3186,0x3186,0x2985,0x31a6,0x29a6,0x31c6,0x29a6,0x2985,0x31a6,0x31a6,0x2965,0x31a6,0x31c6,0x31a6,0x31c6,0x31c6,0x31a5,0x31a6,0x31c6,0x31c6,0x29a5,0x31c6,0x31c6,0x2986,0x31c6,0x31a6,0x31a6,0x31c6,0x39e7,0x31c6,0x31c6,0x31a6,0x39c6,0x31c6,0x31c6,0x31a6,0x39e7,0x31a6,0x31a6,0x31a6,0x39e7,0x31c6,0x31a6,0x31c6,0x31c6,0x39e7,0x31c6,0x31c6,0x31c6,0x31c6,0x39e7,0x39e7,0x31c6,0x31c6,0x2985,0x31a6,0x31a6,0x31c6,0x31c6,0x31a6,0x39e7,0x31c6,0x31a6,0x39e7,0x31a6,0x31c6,0x31c6,0x31a6,0x31a6,0x31a6,0x31c6,0x29a5,0x31c6,0x31c7,0x31a6,0x31c6,0x39c7,0x39e7,0x3185,0x3185,0x4208,0x39e7,0x39e7,0x3a07,0x39e7,0x31c6,0x39e7,0x39e7,0x39e7,0x39e7,0x31e7,0x3a07,0x39e7,0x31a6,0x31c6,0x39e7,0x39c6,0x39e7,0x3a07,0x31a6,0x4207,0x39e7,0x31a6,0x39e7,0x31c7,0x31c6,0x39e7,0x31c6,0x31a6,0x39c7,0x39c7,0x31a6,0x2965,0x31c6,0x39c6,0x31a6,0x39e7,0x39e7,0x31a6,0x31c6,0x2986,0x31a6,0x39e7,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31c6,0x31a6,0x3185,0x2985,0x31c6,0x31a6,0x31a6,0x39c6,0x31a6,0x2965,0x31a6,0x31a6,0x2965,0x2965,0x2985,0x3185,0x31a6,0x2985,0x3185,0x2965,0x2945,0x2965,0x2145,0x3186,0x3186,0x31a6,0x2985,0x2985,0x2965,0x2965,0x2945,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x31c6,0x31a6,0x3186,0x2965,0x2944,0x2965,0x2965,0x2945,0x2965,0x2965,0x2985,0x3186,0x2965,0x31a6,0x2965,0x2945,0x2965,0x2985,0x2965,0x2965,0x2965,0x2985,0x2965,0x2965,0x39c7,0x3186,0x3186,0x3186,0x31a6,0x3186,0x2965,0x2945,0x31a7,0x2985,0x2965,0x2124,0x2965,0x3a07,0x31a6,0x2965,0x31a6,0x31c6,0x3186,0x2945,0x2945,0x3165,0x2945,0x3186,0x2986,0x3186,0x2965,0x2986,0x3186,0x2965,0x3186,0x31a6,0x31a6,0x3186, +0x52cb,0x52aa,0x52ca,0x5aca,0x4a8a,0x4a89,0x52ca,0x52ea,0x52aa,0x52aa,0x528a,0x5acb,0x52aa,0x5289,0x4a89,0x52aa,0x4a69,0x4a89,0x52ca,0x4a89,0x5289,0x4a89,0x4a69,0x4a89,0x52aa,0x4228,0x4a89,0x4a89,0x4aaa,0x52ea,0x4aa9,0x52aa,0x52a9,0x52ea,0x4aa9,0x52ea,0x5aeb,0x52ca,0x5b0b,0x5b0b,0x52ca,0x52ea,0x5b0b,0x5b0b,0x52ca,0x52ea,0x5aeb,0x634c,0x634c,0x52ca,0x5b0b,0x632c,0x632c,0x5aeb,0x52ea,0x52ca,0x52aa,0x52aa,0x52aa,0x52aa,0x4a89,0x4a89,0x4a89,0x4a89,0x52aa,0x4aa9,0x4aa9,0x52ca,0x52ca,0x52ca,0x5b0b,0x52ca,0x52ca,0x52eb,0x4aaa,0x52aa,0x52ca,0x52ca,0x52eb,0x52aa,0x5aea,0x5aeb,0x52ca,0x52aa,0x52aa,0x52ca,0x52ca,0x52ca,0x5b0b,0x52aa,0x52ca,0x52ca,0x52ca,0x52ca,0x52eb,0x52ca,0x52aa,0x52eb,0x52eb,0x5b0b,0x52ca,0x5aeb,0x632c,0x5b0b,0x52ca,0x52eb,0x5b2c,0x5b0b,0x52ea,0x5b2b,0x52ca,0x5b0b,0x5b0b,0x52ea,0x5b2b,0x5b4c,0x530b,0x5b0b,0x5b0b,0x634c,0x5b2c,0x634c,0x5b0b,0x5aeb,0x52eb,0x5b2c,0x5b0b,0x52ea,0x5aeb,0x5aeb,0x5b0b,0x5aeb,0x5b0b,0x5aeb,0x52ea,0x5aeb,0x52eb,0x52eb,0x52eb,0x52eb,0x5b0b,0x5b2c,0x5b2b,0x632c,0x5b0b,0x634c,0x5b0b,0x5b0b,0x530b,0x52ea,0x5b2b,0x5b0b,0x52ca,0x5b0b,0x5b0b,0x52eb,0x5b0b,0x5b2b,0x634c,0x5b0b,0x52ca,0x5aeb,0x5b2b,0x5b4c,0x530b,0x5b0b,0x632c,0x632c,0x5b0b,0x634c,0x6bad,0x52eb,0x5aeb,0x5b0b,0x5aeb,0x52ca,0x52eb,0x5b2c,0x5b0b,0x634c,0x632c,0x6b6d,0x632c,0x5b0b,0x632c,0x6b6d,0x5b0b,0x5b0b,0x5b2b,0x52ea,0x5aea,0x632b,0x634c,0x5b2b,0x634c,0x634c,0x632b,0x634c,0x638d,0x5b0b,0x5aeb,0x5b2c,0x5b2c,0x5b0b,0x634c,0x5b2c,0x6b6d,0x634c,0x5b0b,0x52eb,0x5b0b,0x5aeb,0x5b0b,0x632c,0x634c,0x5aeb,0x5aeb,0x5aeb,0x52aa,0x52ca,0x5aeb,0x5aeb,0x52aa,0x5b0b,0x52cb,0x5b0b,0x5aeb,0x52aa,0x5aeb,0x5b0b,0x5aeb,0x52ca,0x5b0b,0x5aeb,0x52ca,0x52aa,0x5aeb,0x5acb,0x52ca,0x5aeb,0x52ca,0x5aeb,0x52ca,0x5aeb,0x528a,0x5aeb,0x5aeb,0x4a8a,0x52aa,0x52ca,0x52aa,0x528a,0x52aa,0x5289,0x4a89,0x4a89,0x52aa,0x52aa,0x4a89,0x52aa,0x52aa,0x52aa,0x52aa,0x5aca,0x52ca,0x52aa,0x4a89,0x52aa,0x52aa,0x4a89,0x5289,0x5aeb,0x4a69,0x4a89,0x52aa,0x52aa,0x52aa,0x528a,0x4a69,0x528a,0x5289,0x528a,0x4a69,0x528a,0x4a89,0x4a89,0x4a69,0x4a69,0x4a8a,0x4a69,0x52ca,0x4a69,0x4a49,0x4a49,0x4248,0x4208,0x4248,0x4a49,0x4a49,0x4207,0x4228,0x4a49,0x4208,0x4248,0x4a49,0x4228,0x4228,0x4208,0x4228,0x4208,0x3a07,0x4228,0x4248,0x3a08,0x31c7,0x4228,0x4228,0x4a49,0x39e7,0x4208, +0x52ca,0x52ca,0x5acb,0x632c,0x52eb,0x52aa,0x52ca,0x5aeb,0x52ca,0x52ea,0x5b0b,0x5aeb,0x52ca,0x52ca,0x4aaa,0x52aa,0x52aa,0x52aa,0x4a89,0x52aa,0x4a89,0x4a89,0x52aa,0x4a89,0x4a89,0x52aa,0x52aa,0x52ca,0x52ea,0x52ca,0x4a89,0x4aa9,0x52aa,0x52ca,0x52ea,0x530b,0x5b2b,0x634c,0x6b8c,0x636c,0x5b0b,0x636c,0x5b2b,0x5aeb,0x632c,0x52ea,0x5b2b,0x52ca,0x52ea,0x5b0b,0x5b0b,0x634c,0x634b,0x5b0b,0x52ca,0x5b0b,0x5b0b,0x4aaa,0x4aa9,0x52aa,0x52ca,0x52ca,0x4a89,0x52ea,0x52ea,0x52ca,0x4a89,0x52ea,0x5b0b,0x52ca,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x52eb,0x5b2b,0x5b0b,0x52ea,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5b4b,0x5b2c,0x5b0b,0x52eb,0x52ca,0x52ea,0x52ea,0x530b,0x52eb,0x52ca,0x52aa,0x530b,0x5b2c,0x5b0b,0x52ea,0x5b2b,0x5b4c,0x5b0b,0x5b0b,0x634c,0x634c,0x5b2b,0x5b0b,0x530b,0x530b,0x5b0b,0x52ca,0x5b0b,0x5b0b,0x634c,0x5b4c,0x5b2b,0x638d,0x634c,0x5b2b,0x636c,0x5b0b,0x636c,0x634c,0x636c,0x5b4b,0x5b2b,0x636c,0x5b4b,0x634c,0x5b2b,0x52ea,0x5b0b,0x5b2b,0x530b,0x5b0b,0x52ea,0x5b0b,0x5aea,0x52ea,0x52ea,0x5b2b,0x636d,0x5b2b,0x5b2c,0x52ea,0x5b4c,0x5b2b,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x5b4c,0x5b0b,0x5b2b,0x52ea,0x5b0b,0x530b,0x5b0b,0x634c,0x5b2b,0x5b4c,0x530b,0x5b2b,0x636c,0x632c,0x636c,0x5b2b,0x5b2c,0x5b0b,0x6b8d,0x73ce,0x5b4c,0x5b2b,0x5b2b,0x5b2c,0x5b2c,0x5b4c,0x5b4c,0x5b4c,0x636c,0x636c,0x634c,0x5b2b,0x6bad,0x6b8d,0x73ce,0x6b8d,0x5b2b,0x632c,0x5b2b,0x634c,0x634c,0x634c,0x636c,0x634c,0x636c,0x5b2b,0x634c,0x6b8d,0x632b,0x636c,0x6b8d,0x634c,0x632c,0x634c,0x632c,0x634c,0x634c,0x634c,0x636c,0x634c,0x6b6d,0x634c,0x632c,0x632c,0x5b0b,0x5b0b,0x632c,0x52cb,0x5aeb,0x5b2c,0x52eb,0x5b0b,0x632c,0x5aeb,0x632c,0x5b4c,0x634c,0x52eb,0x52ca,0x5aeb,0x52eb,0x5b0b,0x5b0b,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x5aeb,0x52ea,0x632c,0x5aeb,0x630b,0x5b0b,0x5aeb,0x5aeb,0x52aa,0x5aeb,0x5b0b,0x5aeb,0x52ca,0x5b0b,0x630b,0x52eb,0x52ca,0x5b0b,0x5b0b,0x5acb,0x5aeb,0x5aeb,0x5aca,0x52ca,0x6b6c,0x632c,0x5acb,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x52ca,0x5aeb,0x5aeb,0x5aeb,0x632c,0x52ca,0x5b0b,0x52ca,0x5aeb,0x5aeb,0x5aeb,0x52aa,0x52ca,0x52eb,0x52eb,0x5aeb,0x5aeb,0x5b0b,0x5aeb,0x52ca,0x52aa,0x528a,0x52ca,0x5aca,0x5aeb,0x5aeb,0x5aeb,0x52aa,0x528a,0x5b0b,0x52ca,0x5aeb,0x5aeb,0x52cb,0x52aa,0x5aeb,0x52ca,0x52aa,0x52aa,0x52aa,0x5aca,0x5aeb,0x5aeb,0x5aeb,0x52cb,0x52aa,0x52aa,0x5aeb,0x52cb,0x5b0b,0x52aa,0x5aeb, +0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x52ca,0x5b0b,0x52ea,0x52aa,0x5aeb,0x52ea,0x52ca,0x5aea,0x52ca,0x52aa,0x52aa,0x52aa,0x4aaa,0x4a69,0x4a69,0x52a9,0x52aa,0x4268,0x4a69,0x4a69,0x4a69,0x52aa,0x4a89,0x4aa9,0x4a89,0x4a69,0x52ca,0x4269,0x4a89,0x52aa,0x52aa,0x52ca,0x5b0b,0x5b0b,0x634c,0x5b0b,0x5aeb,0x634c,0x5b2b,0x5b2b,0x5b0b,0x5b2b,0x636c,0x5b0b,0x52ea,0x634b,0x5b2b,0x632b,0x634b,0x5b2b,0x5b0b,0x5b0b,0x5aea,0x52ca,0x52aa,0x5aea,0x52ea,0x52ca,0x52ca,0x52ea,0x52ca,0x52aa,0x5b0b,0x5aeb,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x5b0b,0x5b0b,0x5aea,0x5b2b,0x5b0b,0x5b0b,0x52eb,0x52ca,0x52ea,0x5b2b,0x5b2b,0x52ea,0x52eb,0x5aeb,0x52ca,0x5b0b,0x5b0b,0x5b0b,0x5b2b,0x634c,0x5b0b,0x530b,0x5b0b,0x634c,0x5b2b,0x530b,0x52ea,0x530b,0x5b0b,0x5b0b,0x52ca,0x52eb,0x634c,0x5b2b,0x5b0b,0x632c,0x5b0b,0x636c,0x5b4c,0x634c,0x632c,0x634c,0x5b2b,0x636c,0x5b0b,0x5b0b,0x5b4c,0x5b2b,0x634c,0x5b2b,0x5b4c,0x636c,0x5b2b,0x5b2b,0x5b2b,0x530b,0x5b2b,0x634c,0x5b2b,0x5b0b,0x52ea,0x5b2b,0x5b0b,0x52ea,0x530b,0x5b2b,0x5b2b,0x52ca,0x5b2b,0x5b4c,0x5b2c,0x52ea,0x5b2b,0x5b2b,0x530b,0x5b2b,0x636c,0x5b0b,0x5b0b,0x52eb,0x5b0b,0x5b0b,0x5b2b,0x634c,0x5b2b,0x634c,0x5b0b,0x6b8d,0x6b6c,0x5b0b,0x634c,0x5b4c,0x5b4c,0x5b0b,0x634c,0x634c,0x636c,0x634c,0x634c,0x5b4c,0x636c,0x634c,0x632c,0x634c,0x636c,0x634c,0x636c,0x6b6d,0x632b,0x634c,0x634c,0x634c,0x634c,0x636c,0x634c,0x636c,0x634c,0x634c,0x634c,0x634c,0x632c,0x634c,0x636d,0x634c,0x5b2c,0x634c,0x638d,0x634c,0x632c,0x634c,0x634c,0x6b4c,0x6b6c,0x6b6d,0x634c,0x634c,0x6b6c,0x634c,0x632b,0x632c,0x5b2c,0x5b0b,0x5aeb,0x52ca,0x5aeb,0x5b0b,0x5b0b,0x632c,0x632c,0x5b0b,0x5b0b,0x5b0b,0x52eb,0x5aeb,0x5b0b,0x5aeb,0x5aeb,0x632c,0x632b,0x5b0b,0x632b,0x5b0b,0x5aeb,0x5b0b,0x5aeb,0x632c,0x632c,0x632c,0x5b0b,0x52ca,0x5aeb,0x5b0b,0x5aca,0x52aa,0x5aeb,0x52eb,0x5b0b,0x52ca,0x5aeb,0x5b0b,0x5aca,0x5aeb,0x632b,0x5aeb,0x5aeb,0x5aeb,0x5aca,0x5b0b,0x634c,0x5aeb,0x5aeb,0x630b,0x5aeb,0x52ca,0x5aeb,0x5aea,0x5b0b,0x5b2b,0x52ca,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x5aeb,0x5b0b,0x5aeb,0x5b0b,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5aca,0x632c,0x5aeb,0x5aca,0x632c,0x5b0b,0x5aeb,0x52aa,0x52ca,0x52ca,0x52aa,0x5aeb,0x5b0b,0x52aa,0x52aa,0x5aca,0x5aeb,0x5aeb,0x52ca,0x632c,0x52aa,0x5aeb,0x52aa,0x528a,0x630b,0x630b,0x52aa,0x5aca,0x632c,0x52aa,0x52aa,0x5aeb, +0x5aeb,0x52aa,0x528a,0x5aca,0x52cb,0x52ca,0x5b0b,0x5b0b,0x52ca,0x52aa,0x52ca,0x5aea,0x52ca,0x52aa,0x52aa,0x52ca,0x4aaa,0x4a69,0x4aaa,0x5aca,0x4a69,0x4248,0x4a69,0x4a69,0x4228,0x4228,0x4269,0x4a68,0x4a48,0x52aa,0x4a69,0x4248,0x4a69,0x52aa,0x5b0b,0x5aca,0x52ca,0x634c,0x632c,0x634c,0x632b,0x4a89,0x5aeb,0x52ea,0x52ca,0x5b0b,0x5aeb,0x5b0b,0x634c,0x636c,0x5b2b,0x634c,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x5aea,0x5aea,0x5b0b,0x5b0b,0x4aaa,0x52ca,0x52ca,0x5aea,0x52ea,0x52ca,0x52ea,0x5aea,0x52ca,0x5aeb,0x52ea,0x52ea,0x52eb,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x52ea,0x5b0b,0x5b0b,0x632c,0x6b6c,0x5b2b,0x5aea,0x52eb,0x52eb,0x5b0b,0x634b,0x634b,0x634c,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x5b4c,0x5b0b,0x5b2b,0x5b2b,0x5b2b,0x5b0b,0x5b2b,0x52eb,0x52eb,0x5b2c,0x634c,0x5b2b,0x632b,0x634c,0x5b0b,0x636c,0x5b4c,0x5b2b,0x5b0b,0x5b4c,0x636c,0x634c,0x638d,0x634c,0x634c,0x636c,0x5b2b,0x636c,0x636c,0x5b2b,0x5b0b,0x634c,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x5b4c,0x5b2b,0x636c,0x5b2c,0x5aeb,0x634c,0x636c,0x634c,0x5b2b,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x5b2b,0x5b2b,0x5b0b,0x636c,0x634c,0x634c,0x634c,0x530b,0x5b0b,0x5b2c,0x5b2b,0x5b2b,0x5b2b,0x636c,0x5b2b,0x5b2b,0x634c,0x634c,0x5b2b,0x634c,0x636c,0x5b0b,0x5b2c,0x5b2b,0x636c,0x636c,0x5b2b,0x5b0b,0x5b2b,0x5b0b,0x632c,0x5b2c,0x5b2c,0x634c,0x636c,0x6b6d,0x5b0b,0x632c,0x5b2c,0x632c,0x5b2c,0x632c,0x634c,0x632c,0x632c,0x5b2b,0x5b2b,0x5aeb,0x632b,0x5b0b,0x5b0b,0x5b2c,0x6b8d,0x632b,0x634c,0x632c,0x632c,0x632c,0x634c,0x634c,0x634c,0x636c,0x634c,0x634c,0x6b4c,0x5b0b,0x5b2b,0x634c,0x5b0b,0x5b2c,0x632c,0x5aeb,0x634c,0x632c,0x634c,0x632c,0x5b0b,0x632c,0x634c,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x5b2c,0x630b,0x630b,0x5b0b,0x5aeb,0x5b0b,0x5aeb,0x5b0b,0x632c,0x630b,0x630b,0x634c,0x630b,0x5aeb,0x5aca,0x52aa,0x5aeb,0x5aeb,0x5b2c,0x52ca,0x5aeb,0x52aa,0x52aa,0x5acb,0x52aa,0x52ca,0x52ca,0x52ca,0x528a,0x5aeb,0x5aca,0x5b0b,0x5aeb,0x5aca,0x52aa,0x5aeb,0x5aeb,0x5aca,0x52ca,0x52ca,0x5b0b,0x52aa,0x52aa,0x5aeb,0x52ca,0x52ca,0x52ca,0x52aa,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x52aa,0x5aeb,0x5aeb,0x5aeb,0x52aa,0x52ca,0x5b0b,0x5aeb,0x52ca,0x5b0b,0x5acb,0x5aca,0x52aa,0x5aeb,0x52ca,0x52ca,0x52aa,0x5aeb,0x636d,0x5aeb,0x52aa,0x5aeb,0x5aeb,0x5b0b,0x6b4d,0x52aa,0x5aca,0x5aca,0x5acb,0x630c,0x5b0b,0x5aeb,0x5aeb,0x5acb,0x52cb,0x52aa,0x528a, +0x634c,0x634c,0x5b2c,0x5b0b,0x634c,0x634c,0x632c,0x634c,0x5b2b,0x5b2c,0x6b8d,0x632c,0x5b0b,0x5b0b,0x5aeb,0x5aea,0x5b0b,0x634c,0x5b0b,0x4aca,0x632c,0x5aea,0x5aeb,0x5b0b,0x5b2b,0x4aa9,0x4a89,0x4aaa,0x52ca,0x52ca,0x530b,0x52ea,0x5aeb,0x5b0b,0x52aa,0x4a89,0x52ca,0x52ca,0x530b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x634c,0x5b0b,0x52ca,0x5aeb,0x5b0b,0x5b2c,0x5b0b,0x632b,0x5b0b,0x530b,0x52ea,0x530b,0x5b0b,0x5b0b,0x636c,0x636c,0x52ca,0x5b0b,0x5b0b,0x52ca,0x52aa,0x5b0b,0x636c,0x5b0b,0x5b2c,0x52ea,0x52eb,0x52ea,0x530b,0x5b2b,0x5b0b,0x5b0b,0x634c,0x5b0b,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x5aeb,0x5b0b,0x5b2b,0x634c,0x52ea,0x5b4c,0x634c,0x4aca,0x5b4b,0x530a,0x52ea,0x5b0b,0x634c,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x5b2c,0x52ca,0x5aeb,0x5b0b,0x5aeb,0x5b0b,0x5b2c,0x5b0b,0x52ea,0x5b0b,0x5b2b,0x5b2b,0x52ca,0x5b4b,0x52eb,0x5b2c,0x5b0b,0x52eb,0x5b4c,0x5b2b,0x530b,0x52ea,0x5b0b,0x530b,0x52ea,0x5b2b,0x5b2b,0x4aca,0x52ca,0x5b2b,0x5b0b,0x632c,0x632b,0x52ca,0x5b0b,0x52ca,0x52ea,0x5b2c,0x52eb,0x52ea,0x52ea,0x530b,0x638d,0x5b2c,0x5b0b,0x5b2b,0x5b2b,0x52ea,0x5b2b,0x5b0b,0x5b0b,0x634c,0x5b0b,0x530b,0x530b,0x5b2b,0x5b2b,0x5b4c,0x5b0b,0x5b2b,0x5b4c,0x5b2c,0x52eb,0x634c,0x5b0b,0x5b0b,0x636c,0x5b2b,0x5b2b,0x634c,0x5b2c,0x5b2b,0x5b2b,0x5b0b,0x530b,0x5b0b,0x632c,0x5b4c,0x530b,0x52ea,0x634c,0x632c,0x52ea,0x52ea,0x5b2c,0x632c,0x5b2b,0x5b0b,0x5b2c,0x5b2b,0x634c,0x6b6c,0x636c,0x5b0b,0x634c,0x6b6c,0x636c,0x530b,0x5b2c,0x634c,0x638c,0x632c,0x6bad,0x636c,0x6b8d,0x636c,0x634c,0x636c,0x634c,0x636c,0x5b4c,0x5b2b,0x6b8d,0x636d,0x6b8d,0x6b8d,0x636d,0x6b8d,0x634c,0x636d,0x638d,0x6b8d,0x638d,0x6b8d,0x7bee,0x73ce,0x73ee,0x73ee,0x6b8d,0x73ae,0x634d,0x636d,0x634c,0x634c,0x632c,0x636c,0x6b8d,0x5b2b,0x5b2b,0x634c,0x6b8d,0x6b6d,0x73ae,0x6b6d,0x632c,0x634c,0x6b8d,0x73ae,0x634c,0x634c,0x636d,0x634c,0x632c,0x634c,0x6b6d,0x6b6d,0x6b6d,0x636d,0x634c,0x73ce,0x6b6d,0x634c,0x634c,0x632b,0x5b0b,0x630b,0x738d,0x6b4c,0x6b6d,0x52aa,0x632b,0x630b,0x634c,0x6b6d,0x630b,0x5aeb,0x632c,0x52eb,0x5aeb,0x5aeb,0x630b,0x5b0b,0x5aeb,0x5aeb,0x632c,0x632c,0x632b,0x632c,0x5aeb,0x632c,0x632c,0x52ca,0x5aeb,0x5aeb,0x630c,0x632c,0x632c,0x52aa,0x52aa,0x5aeb,0x52ca,0x5b0b,0x52aa,0x632c,0x6b6d,0x5b0c,0x5aeb,0x5aeb,0x52aa,0x528a,0x52cb,0x5aeb,0x52cb,0x4a89,0x52aa,0x6b4d,0x634d,0x5aeb,0x5b0c,0x52cb,0x4a6a,0x52ab, +0x6bce,0x740e,0x740e,0x740f,0x73ef,0x73ee,0x73ce,0x73ee,0x6bce,0x73ee,0x73ee,0x73ce,0x73ee,0x73ef,0x73ce,0x6b8d,0x73ce,0x73ee,0x6bce,0x6bad,0x6bad,0x6b8d,0x6b8d,0x6bae,0x6b8d,0x638d,0x636d,0x636d,0x636d,0x5b2b,0x636c,0x6bce,0x5b4c,0x5b4c,0x634c,0x636c,0x6b8d,0x73ce,0x638d,0x636c,0x638d,0x636d,0x5b2b,0x6bad,0x636c,0x530b,0x634c,0x5b2c,0x5b2c,0x5b2c,0x52ea,0x5b2b,0x5b0b,0x5b2c,0x5b4c,0x5b2b,0x5b2b,0x52ea,0x5b0b,0x52eb,0x530b,0x52ea,0x52ea,0x52ea,0x5b0b,0x52ca,0x5b0b,0x530b,0x4aaa,0x52ea,0x5b0b,0x5b2b,0x52ea,0x5b0b,0x52ca,0x4aaa,0x4aaa,0x52ca,0x52ca,0x52ca,0x4289,0x52eb,0x4a69,0x52aa,0x4aa9,0x4a89,0x52ca,0x52ca,0x52ea,0x5b2b,0x4aa9,0x52ea,0x52ca,0x5b2b,0x530b,0x4a69,0x4a89,0x52aa,0x4a89,0x4aaa,0x52ca,0x52ca,0x4269,0x4a89,0x4a69,0x4248,0x4248,0x4a89,0x52ca,0x4a69,0x52ca,0x52ca,0x4ac9,0x4ac9,0x52ca,0x52ca,0x4269,0x4a89,0x4289,0x4a69,0x4a69,0x4a89,0x52ca,0x5aeb,0x52ca,0x4aca,0x4a89,0x4269,0x4a69,0x4228,0x5b0b,0x52ea,0x4aa9,0x4aaa,0x52ca,0x52eb,0x4269,0x4269,0x4268,0x4248,0x52ca,0x52aa,0x4a89,0x52eb,0x4aaa,0x4aaa,0x4a89,0x52ca,0x52ca,0x52ca,0x5b0b,0x4aa9,0x52eb,0x4aa9,0x4a89,0x5aeb,0x4aaa,0x52ea,0x4a89,0x4a8a,0x52ca,0x5b0c,0x5aeb,0x52ca,0x634c,0x5b0b,0x5b0b,0x5b0b,0x52eb,0x4a89,0x4a69,0x52eb,0x5b0b,0x52ca,0x634c,0x634c,0x5b0b,0x52eb,0x52ca,0x5aeb,0x4289,0x5b2c,0x5aeb,0x5b0b,0x5aeb,0x5b2b,0x52eb,0x634c,0x5b0b,0x632c,0x5aeb,0x5aeb,0x52ca,0x5b2c,0x6b6d,0x5aeb,0x5b0b,0x5b2b,0x6b6d,0x5aeb,0x5b2b,0x636c,0x6b6d,0x6b6d,0x73ae,0x6b8d,0x636d,0x5b2c,0x634c,0x73ef,0x6b6d,0x6b6d,0x634c,0x6b8d,0x6b8d,0x6bad,0x73ce,0x6b8d,0x7c2f,0x6b8d,0x73ce,0x73ef,0x6bad,0x8450,0x73ef,0x73ce,0x73ef,0x73ce,0x7c0f,0x7bef,0x6bae,0x6b6d,0x6b6d,0x7bef,0x7c0f,0x7c0f,0x73ee,0x73ce,0x73ef,0x73ef,0x7bef,0x73ce,0x636c,0x7c0f,0x94b1,0x8c50,0x842f,0x7bef,0x8c91,0x7c0f,0x7bee,0x8450,0x7c0f,0x8450,0x8cb1,0x94d2,0x94b1,0x9cd2,0x94b2,0x8c71,0x8c51,0x8c71,0x8c71,0x9cd2,0x94b2,0x94b1,0x8c71,0x94b2,0x8c50,0x8450,0x8c71,0x8c91,0x8c71,0x8450,0x8430,0x8450,0x7c0f,0x8430,0x8c71,0x8c71,0x7c10,0x8c91,0x94b2,0x94d2,0x9cf3,0x8c91,0x9cd3,0x8430,0x840f,0x94b2,0x9d14,0x8c91,0x8450,0x8cb1,0xa534,0x8450,0x8c71,0x9cd2,0x94b2,0x9492,0x8c71,0xa534,0x94b2,0x94b2,0x8451,0x8410,0x8c91,0x9d13,0x8451,0x8430,0x94d2,0x8c51,0x8430,0x8c91,0x7bef,0x94b2,0x94d2,0x8c71,0x8450,0x8430, +0x31e7,0x31c6,0x31c6,0x31c7,0x31c6,0x31c6,0x31c6,0x31c6,0x3a07,0x3a07,0x31c7,0x39e7,0x3a07,0x39e7,0x39e7,0x39e7,0x31c6,0x31a6,0x31a6,0x39e7,0x2985,0x31c6,0x31c6,0x31a6,0x2144,0x31c6,0x31a6,0x31c7,0x31c6,0x2965,0x2986,0x31c6,0x2965,0x2986,0x2985,0x31c6,0x31a6,0x39c6,0x2985,0x2986,0x2986,0x2985,0x2985,0x2965,0x31a6,0x2965,0x2965,0x2144,0x2124,0x3186,0x2985,0x2965,0x2965,0x2965,0x2965,0x3186,0x2944,0x2104,0x2986,0x2985,0x2124,0x2124,0x2124,0x2965,0x2144,0x2103,0x2144,0x2104,0x2104,0x18e3,0x2145,0x2144,0x2104,0x2124,0x2124,0x2124,0x1903,0x18e3,0x2104,0x2144,0x2124,0x2144,0x18c3,0x1903,0x1903,0x2104,0x18e3,0x10c2,0x2124,0x2104,0x1903,0x2144,0x2104,0x2144,0x2124,0x2104,0x2965,0x2124,0x2945,0x2965,0x2165,0x2144,0x2165,0x2104,0x2104,0x2124,0x2104,0x2945,0x2945,0x18e3,0x2945,0x2124,0x2985,0x2124,0x18e3,0x2985,0x18e3,0x1903,0x2145,0x1903,0x1903,0x2144,0x2944,0x2144,0x2104,0x2104,0x2144,0x2144,0x1903,0x18c3,0x2145,0x2944,0x2124,0x2124,0x2124,0x18e3,0x2124,0x1903,0x2103,0x2104,0x1903,0x2124,0x2965,0x2965,0x2965,0x2144,0x18c2,0x2965,0x2945,0x2104,0x2124,0x2965,0x2965,0x2124,0x18e3,0x2144,0x2124,0x2124,0x2124,0x2124,0x2124,0x2945,0x2965,0x2144,0x2965,0x2144,0x2985,0x2124,0x2124,0x2124,0x2124,0x2144,0x2965,0x2124,0x2965,0x2145,0x2124,0x2965,0x2945,0x3185,0x2124,0x2985,0x2945,0x2965,0x31a6,0x3186,0x2124,0x2945,0x2965,0x2965,0x2124,0x39c7,0x2144,0x3186,0x2965,0x2945,0x2124,0x2945,0x2144,0x2945,0x2124,0x2124,0x2144,0x2965,0x2965,0x2985,0x2124,0x2945,0x2124,0x39e7,0x2124,0x2124,0x2104,0x1904,0x2945,0x2124,0x31c6,0x2945,0x3186,0x3186,0x2985,0x2965,0x2985,0x31a6,0x2945,0x2104,0x2965,0x2124,0x31a6,0x31a6,0x31a6,0x2124,0x31c7,0x39e7,0x2965,0x39e7,0x31a6,0x2985,0x31a6,0x31a6,0x31c6,0x31c6,0x2985,0x31a6,0x31a6,0x3185,0x39c6,0x39c6,0x39e7,0x31a6,0x31c6,0x39e7,0x31a6,0x31e7,0x4248,0x4a48,0x4a49,0x39e7,0x4207,0x4a49,0x4a49,0x52aa,0x52aa,0x52aa,0x52aa,0x632b,0x52ca,0x6b6d,0x632c,0x4a69,0x4228,0x4a89,0x52cb,0x52ca,0x52aa,0x5aeb,0x528a,0x52cb,0x52ca,0x5b0c,0x52ca,0x5b0b,0x5b0b,0x630c,0x6b4d,0x5acb,0x73ae,0x528a,0x5aeb,0x632c,0x632c,0x6b6d,0x5aeb,0x634c,0x7bef,0x7bef,0x73ae,0x7bef,0x840f,0x7bcf,0x7bce,0x840f,0x7bcf,0x5aca,0x738e,0x6b6d,0x6b8d,0x73ce,0x6b4c,0x73ae,0x8430,0x73ae,0x7bce,0x73ae,0x738e,0x9491,0x8430,0x7bef,0x8c50,0x7bee, +0x0840,0x0861,0x1082,0x0861,0x1082,0x0861,0x0841,0x0821,0x0020,0x0841,0x0861,0x0841,0x0000,0x1082,0x0841,0x0861,0x0840,0x0862,0x0861,0x0821,0x0841,0x0841,0x0820,0x0841,0x10a2,0x0821,0x1062,0x0861,0x0840,0x1082,0x10a2,0x0841,0x0861,0x0861,0x1082,0x0841,0x0841,0x0820,0x0000,0x0841,0x0861,0x1082,0x1082,0x1062,0x0820,0x0861,0x1061,0x1082,0x0861,0x0841,0x0861,0x1081,0x0861,0x1061,0x0861,0x0840,0x1082,0x1061,0x0840,0x0861,0x0861,0x1061,0x0861,0x0861,0x1081,0x10a2,0x0861,0x10a2,0x18c2,0x10a2,0x1081,0x10a2,0x10a2,0x0861,0x1082,0x1082,0x10c2,0x1082,0x1082,0x0861,0x0840,0x0841,0x10a2,0x10a2,0x10a2,0x1081,0x1082,0x10a2,0x0861,0x0861,0x1082,0x1061,0x18c2,0x10a2,0x1082,0x1082,0x1082,0x1082,0x0861,0x0040,0x0861,0x1082,0x0841,0x0861,0x1082,0x1082,0x1082,0x0881,0x0861,0x10a2,0x0840,0x0840,0x0841,0x0841,0x1082,0x0841,0x1081,0x0861,0x0861,0x1082,0x1081,0x0840,0x0841,0x0861,0x0881,0x10a2,0x1082,0x0861,0x0861,0x1082,0x0861,0x0881,0x0881,0x0861,0x1082,0x1062,0x0841,0x10a2,0x1082,0x0861,0x0861,0x0861,0x0841,0x1062,0x0861,0x1082,0x18c3,0x10a2,0x0861,0x0861,0x1062,0x0841,0x0841,0x1082,0x0861,0x0841,0x0861,0x1081,0x1082,0x0862,0x0861,0x0861,0x1081,0x0861,0x0840,0x0861,0x0841,0x1082,0x1082,0x1082,0x1082,0x10a2,0x10a2,0x1081,0x1081,0x1082,0x1081,0x10a2,0x1082,0x0841,0x10a2,0x0841,0x10a2,0x10a2,0x0000,0x0841,0x10a2,0x0861,0x0881,0x1081,0x1082,0x0821,0x10a2,0x0862,0x0861,0x10a2,0x10a2,0x1082,0x10a2,0x1082,0x1082,0x10a2,0x10a2,0x10a2,0x10a2,0x0840,0x18c2,0x1082,0x1082,0x0841,0x10a2,0x10a2,0x18c3,0x18c3,0x10a2,0x10a2,0x0861,0x10a2,0x0882,0x1082,0x1082,0x10a2,0x10a2,0x10a2,0x10a2,0x18e3,0x10a2,0x18c3,0x10a2,0x1082,0x1081,0x18c3,0x10a2,0x1082,0x18c3,0x1082,0x10a2,0x1082,0x1082,0x10a2,0x0861,0x0861,0x1082,0x1082,0x0861,0x10a2,0x0841,0x0882,0x0021,0x0862,0x0862,0x0821,0x10a2,0x0841,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x39c7,0x39e7,0x39e7,0x4208,0x4208,0x3a07,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x3a07,0x3a07,0x4228,0x3a07,0x4228,0x4228,0x3a07,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x4228,0x4228,0x4228,0x3a07,0x3a07,0x4228,0x39e7,0x39e7,0x4228,0x3a07,0x39e7,0x39e7,0x4228,0x3a07,0x3a07,0x4228,0x4228,0x4228,0x3a07,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x3a08,0x3a07,0x3a07,0x39e7,0x3a07,0x39e7,0x3a07,0x3a07,0x4228,0x3a07,0x3a07,0x3a07,0x4228,0x3a07,0x39e7,0x3a07,0x3a07,0x4228,0x4228,0x3a07,0x31c6,0x3a07,0x4228,0x3a28,0x3a07,0x3a07,0x4228,0x39e7,0x4228,0x4248,0x4228,0x4a69,0x4249,0x4248,0x3a07,0x4228,0x3a07,0x3a07,0x4228,0x3a07,0x3a07,0x4228,0x4a69,0x4228,0x4228,0x39e7,0x4228,0x4228,0x3a07,0x4228,0x3a07,0x3a08,0x4248,0x3a07,0x4228,0x39e7,0x3a07,0x3a28,0x3a07,0x4228,0x3a07,0x3a07,0x39e7,0x4208,0x4207,0x3a07,0x3a07,0x3a27,0x39e7,0x4228,0x4248,0x39e7,0x4228,0x3a08,0x4248,0x3a08,0x39e7,0x3a07,0x4248,0x3a07,0x4228,0x3a28,0x3a07,0x3a07,0x4228,0x39e7,0x3a28,0x3a07,0x31e7,0x4248,0x4268,0x3a07,0x4228,0x3a28,0x3a07,0x4228,0x4a48,0x3a07,0x4248,0x4248,0x4248,0x4248,0x39e7,0x4248,0x4228,0x4208,0x3a08,0x3a07,0x3a28,0x4248,0x3a28,0x3a07,0x3a08,0x4228,0x4228,0x3a07,0x4228,0x3a07,0x4228,0x4249,0x4228,0x4248,0x3a07,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4248,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4a69,0x4248,0x4228,0x4228,0x4228,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4228,0x4228,0x4248,0x4a69,0x4228,0x4228,0x4248,0x4248,0x4228,0x4248,0x4228,0x4228,0x4269,0x4a49,0x4a48,0x4a48,0x4248,0x4228,0x4228,0x4208,0x4208,0x4228,0x3a07,0x4248,0x4a48,0x4248,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4248,0x4248,0x4a68,0x4a49,0x4248,0x4228,0x4248,0x4228,0x4228,0x4228,0x4228,0x4248,0x4a49,0x4228,0x4228,0x4248,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4a49,0x4228,0x4228,0x4228,0x4a69,0x4a69,0x4a69,0x4a48,0x4208,0x4228,0x4248,0x4248,0x5289,0x4a49,0x4228,0x4208,0x4228,0x4228,0x4228,0x3a07,0x4207,0x4208,0x4208,0x4208,0x4208,0x3a08,0x3a07,0x39e7,0x4208,0x4228,0x4208,0x3a07,0x4208,0x4228,0x4207,0x3a07,0x3a07,0x39e7,0x3a07,0x4208,0x4228,0x4208,0x4208,0x4208,0x39e7,0x4208,0x3a07,0x39e7,0x4208,0x39e7,0x39e7,0x39c7,0x39e7,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x39c7,0x39c7,0x31a6,0x31a6,0x31a6,0x39c7,0x3186,0x3186,0x3186, +0x3a07,0x3a07,0x39e7,0x39e7,0x3a07,0x3a07,0x3a28,0x3a28,0x3a28,0x4228,0x3a07,0x4228,0x4228,0x4248,0x3a07,0x3a28,0x4228,0x4228,0x4228,0x4228,0x3a27,0x4228,0x4a69,0x4228,0x3a07,0x3a07,0x3a28,0x4228,0x4248,0x4248,0x4228,0x4228,0x4228,0x4a69,0x4268,0x4268,0x4a69,0x4269,0x4269,0x4a69,0x4228,0x4248,0x4248,0x4248,0x4aaa,0x4a69,0x4248,0x4228,0x4228,0x4248,0x4269,0x3a28,0x4248,0x4248,0x4228,0x4228,0x4269,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x3a28,0x4268,0x4248,0x4248,0x4a89,0x3a28,0x3a28,0x4248,0x4a89,0x4a69,0x4a69,0x4a89,0x4268,0x4aa9,0x52ca,0x4aa9,0x4a89,0x4a89,0x4248,0x4a69,0x4a89,0x4248,0x4248,0x4269,0x4a89,0x52ca,0x4a89,0x4228,0x4a89,0x4a89,0x4268,0x4248,0x4268,0x4a89,0x4aa9,0x52aa,0x4268,0x4a89,0x4269,0x4268,0x4a89,0x4289,0x4268,0x4aca,0x4a89,0x4269,0x4269,0x4a69,0x4a69,0x4a69,0x4248,0x4269,0x4a89,0x4269,0x4a89,0x4268,0x4aa9,0x4a89,0x4aaa,0x4a89,0x4aa9,0x4aa9,0x4a69,0x4aaa,0x4269,0x4248,0x4a89,0x4a89,0x4a89,0x4a89,0x4248,0x4aaa,0x52ca,0x4268,0x4269,0x4a89,0x52ca,0x4a69,0x4aaa,0x4a89,0x4269,0x52ca,0x4a69,0x4248,0x4aa9,0x4ac9,0x4aa9,0x4a89,0x52ca,0x52ca,0x4a89,0x4a89,0x4a89,0x4aaa,0x4a89,0x530b,0x4a89,0x4268,0x4269,0x4a89,0x52aa,0x4a89,0x4a89,0x4a89,0x4269,0x4a89,0x4aa9,0x4a89,0x4a69,0x4a89,0x4a89,0x4269,0x4a69,0x4269,0x4aa9,0x4a89,0x4248,0x4a89,0x4a69,0x4269,0x4a8a,0x4a89,0x4248,0x5aeb,0x4aaa,0x4269,0x4a69,0x4a69,0x4269,0x4a69,0x4a89,0x4269,0x4269,0x4a69,0x4a89,0x4a89,0x4269,0x4a89,0x4a89,0x4a89,0x4269,0x4a89,0x4a89,0x4a69,0x4a89,0x4269,0x4a89,0x4a89,0x4aaa,0x4a69,0x4a89,0x4a89,0x4269,0x4a69,0x4a89,0x4249,0x4248,0x4a89,0x4a69,0x4a69,0x4a69,0x4a69,0x4a89,0x52eb,0x4a69,0x4a89,0x4248,0x4a69,0x4a89,0x4a89,0x4a69,0x4a89,0x4a69,0x4a69,0x4248,0x4248,0x4248,0x4a69,0x4a69,0x4a89,0x4a8a,0x4248,0x4a69,0x4248,0x4248,0x4a49,0x4a69,0x4a49,0x4249,0x4a69,0x4a69,0x4a69,0x4a69,0x4a89,0x4a89,0x4a69,0x4a69,0x4a89,0x4a69,0x4a89,0x52aa,0x4a89,0x4a69,0x4a89,0x4228,0x4249,0x4a69,0x4228,0x4228,0x4228,0x4248,0x4a69,0x4a49,0x4228,0x4228,0x4248,0x4208,0x4228,0x4228,0x4a48,0x4a69,0x4a69,0x4a49,0x4a69,0x4a48,0x4228,0x4228,0x4a49,0x4249,0x4a49,0x4a49,0x4248,0x4228,0x4228,0x4a49,0x4228,0x4228,0x4249,0x4228,0x4a49,0x4228,0x4a49,0x4a69,0x4a69,0x4a69,0x4a89,0x4249,0x4a49,0x4228,0x4228,0x4a69,0x4a69,0x4a49,0x4a48,0x4a69,0x4a49, +0x3a07,0x4208,0x4207,0x4228,0x4a69,0x4228,0x3a07,0x4a69,0x4208,0x39e7,0x4228,0x4208,0x4208,0x4a69,0x4248,0x52a9,0x3a07,0x4208,0x4228,0x3a07,0x39e7,0x4a69,0x4248,0x4228,0x4228,0x4228,0x3a08,0x4228,0x4a68,0x4207,0x39e7,0x4208,0x39e7,0x4a89,0x4228,0x4228,0x4a89,0x4a69,0x4228,0x4228,0x4228,0x4248,0x4227,0x4248,0x4a89,0x3a07,0x52aa,0x4a69,0x39e7,0x4228,0x4228,0x4228,0x4248,0x4228,0x4248,0x4248,0x4a49,0x4228,0x3a07,0x4a69,0x4228,0x3a08,0x4228,0x4248,0x52aa,0x4227,0x4228,0x4a49,0x4a69,0x4248,0x3a07,0x39e7,0x39e7,0x4228,0x4a68,0x52aa,0x4a89,0x4a69,0x4a69,0x4248,0x4248,0x4228,0x3a07,0x4a89,0x4a89,0x4227,0x4248,0x3a07,0x4248,0x4a89,0x4268,0x4a68,0x4a69,0x4a89,0x4207,0x4a69,0x4aa9,0x4248,0x4268,0x4a89,0x4aaa,0x4249,0x4269,0x4a69,0x4a69,0x4248,0x4a89,0x4a69,0x4a68,0x4a89,0x4268,0x4248,0x4a69,0x3a07,0x4a69,0x4248,0x4248,0x4228,0x4a89,0x4268,0x52a9,0x4a69,0x4aa9,0x52ca,0x4a69,0x4a89,0x4268,0x4228,0x4269,0x4aaa,0x4a89,0x4a89,0x4a89,0x4a69,0x4248,0x4a89,0x4a68,0x4a69,0x4a89,0x4a69,0x4a89,0x4a89,0x4a69,0x4a89,0x4aaa,0x52ca,0x4aa9,0x4248,0x52aa,0x4aa9,0x4a89,0x4a69,0x4a69,0x4a69,0x4a89,0x4a69,0x4a69,0x4248,0x4a89,0x52aa,0x4a89,0x4268,0x4a89,0x4a69,0x4a69,0x4a89,0x4a89,0x4248,0x4249,0x4269,0x4228,0x4248,0x4269,0x4248,0x4a69,0x4248,0x4248,0x4248,0x4248,0x4228,0x4248,0x3a28,0x4228,0x4228,0x4228,0x4248,0x4a69,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4a69,0x4248,0x4228,0x4228,0x4248,0x4248,0x4248,0x4228,0x3a08,0x4a69,0x4268,0x4228,0x4228,0x4228,0x4269,0x4228,0x4228,0x4208,0x4a69,0x4aaa,0x4228,0x4228,0x4248,0x4248,0x3a07,0x3a07,0x4228,0x4228,0x4248,0x4248,0x4248,0x4228,0x4228,0x4248,0x4248,0x4228,0x4228,0x4228,0x4a49,0x4a69,0x4228,0x4228,0x4248,0x4228,0x4228,0x4228,0x4228,0x4208,0x4228,0x3a07,0x4228,0x4228,0x4208,0x4228,0x4207,0x4228,0x4228,0x4248,0x4228,0x4228,0x4208,0x39e7,0x4a69,0x52aa,0x4228,0x4248,0x528a,0x3a07,0x4a48,0x52a9,0x4208,0x4a89,0x52aa,0x4248,0x4248,0x3a08,0x3a07,0x4228,0x4248,0x4207,0x4228,0x4228,0x4228,0x4208,0x4208,0x3a08,0x4208,0x39e7,0x4208,0x4248,0x4248,0x4a69,0x4a48,0x3a07,0x4a48,0x4a49,0x4a48,0x4248,0x4228,0x4228,0x4a69,0x4248,0x4a69,0x4249,0x4228,0x4228,0x4228,0x4208,0x4208,0x4228,0x4228,0x4248,0x4228,0x4a69,0x4a69,0x4a89,0x4248,0x4a49,0x4a49,0x4a49,0x4a69,0x4a69,0x4a89,0x4228,0x4a89,0x5289,0x4a69, +0x3a07,0x3a07,0x3a07,0x39e7,0x3a07,0x31c7,0x39e7,0x39e7,0x31c6,0x39e7,0x3a07,0x3a07,0x39e7,0x31a6,0x39e7,0x4207,0x4228,0x3a07,0x4228,0x3a07,0x4207,0x39e6,0x3a07,0x4248,0x39e7,0x39e7,0x3a27,0x39e7,0x39e7,0x4228,0x3a07,0x4228,0x3a07,0x2985,0x31c6,0x3a07,0x4228,0x4248,0x3a07,0x4228,0x4a69,0x3a07,0x4a69,0x4a89,0x4248,0x3a27,0x3a07,0x4228,0x4228,0x4248,0x4248,0x3a07,0x3a07,0x4228,0x4248,0x4207,0x31c6,0x3a07,0x4228,0x3a27,0x3a07,0x4228,0x4227,0x4228,0x3a07,0x4228,0x4a48,0x3a07,0x4248,0x4a68,0x39e7,0x39e7,0x4228,0x4248,0x3a27,0x3a07,0x39e6,0x39e7,0x4228,0x39e7,0x4248,0x4248,0x4248,0x3a27,0x4a69,0x4268,0x4248,0x4a68,0x31e6,0x4227,0x4a69,0x4248,0x4248,0x3a07,0x4a69,0x3a27,0x4248,0x3a07,0x3a07,0x4228,0x4228,0x4268,0x3a07,0x39e7,0x4228,0x3a07,0x39e7,0x3a07,0x3a07,0x3a07,0x4248,0x3a27,0x3a07,0x4228,0x3a28,0x3a27,0x3a07,0x3a07,0x3a07,0x4248,0x3a07,0x3a07,0x39e7,0x4248,0x39e7,0x39e7,0x4248,0x4228,0x4228,0x4268,0x3a07,0x3a28,0x3a27,0x4248,0x4228,0x3a07,0x4248,0x3a07,0x3a07,0x4227,0x4248,0x4248,0x3a27,0x4228,0x39e7,0x4228,0x4228,0x3a07,0x4227,0x4248,0x3a07,0x3a07,0x3a28,0x4248,0x4248,0x4228,0x3a07,0x39e7,0x4248,0x3a27,0x3a27,0x3a07,0x3a27,0x4227,0x4247,0x4248,0x3a07,0x31c6,0x4228,0x31e6,0x3a07,0x3a07,0x39e7,0x4228,0x4227,0x3a07,0x4248,0x3a28,0x4228,0x4228,0x39e7,0x4228,0x39e7,0x4228,0x3a07,0x4208,0x3a07,0x3a28,0x3a07,0x4228,0x4227,0x39e7,0x4228,0x3a07,0x3a07,0x4227,0x4228,0x3a07,0x3a07,0x3a07,0x3a28,0x4228,0x3a28,0x39e7,0x4208,0x3a07,0x4228,0x39e7,0x3a07,0x4228,0x4248,0x4248,0x31a6,0x4207,0x39e7,0x39e7,0x4228,0x39e7,0x39e7,0x3a07,0x4228,0x31c6,0x39e7,0x4228,0x39e7,0x39e7,0x31e7,0x31a6,0x31c6,0x3a07,0x3a07,0x39e7,0x39e7,0x3a07,0x3a08,0x39e7,0x31a6,0x39e7,0x39e7,0x39e7,0x31a6,0x31c6,0x39e7,0x3a07,0x3a07,0x39e7,0x31c7,0x31c7,0x39e7,0x31c7,0x4208,0x39e7,0x39c7,0x31a6,0x39c7,0x3a07,0x39e7,0x39e7,0x39c6,0x31a6,0x39e7,0x31a6,0x39e7,0x4228,0x3a07,0x39c6,0x31a6,0x31a6,0x31a6,0x2986,0x31c6,0x39e7,0x31a6,0x2985,0x2985,0x31a6,0x2965,0x3186,0x3186,0x39c6,0x31a6,0x2965,0x31a6,0x3185,0x2985,0x31c6,0x3186,0x3185,0x31a6,0x31a6,0x31a6,0x3185,0x2965,0x2965,0x2965,0x31a6,0x2965,0x31a6,0x31a6,0x3186,0x2985,0x31a6,0x31c6,0x2985,0x3186,0x2965,0x3186,0x39c7,0x31a6,0x2986,0x31a6,0x31a6,0x39c6,0x31c6,0x2985,0x2985,0x31a6,0x31a6,0x39e7,0x39e7, +0x5aeb,0x52ca,0x52ca,0x5aeb,0x5aeb,0x52ca,0x52aa,0x5b0b,0x52ca,0x5b0b,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x52ca,0x632c,0x5aeb,0x5b0b,0x634c,0x634c,0x634c,0x6b6c,0x632b,0x5b0b,0x5aeb,0x5b2b,0x5b0b,0x634c,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x5b0b,0x5b0b,0x634c,0x5b2b,0x634c,0x634c,0x634c,0x632c,0x634c,0x636c,0x6b8d,0x632b,0x5b2b,0x5b0b,0x5b0b,0x632c,0x632c,0x634c,0x5b2b,0x5aeb,0x5b2b,0x5b0b,0x5b2b,0x5b2c,0x636c,0x634c,0x634c,0x5b2b,0x5b2b,0x636c,0x5b0b,0x5b0b,0x5b2b,0x634c,0x5b0b,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x634c,0x5b2b,0x530b,0x5b2b,0x5b0b,0x5aeb,0x634c,0x5b0b,0x5b0b,0x636c,0x634c,0x634c,0x632c,0x636c,0x5b2b,0x634c,0x638d,0x5b2b,0x5b0b,0x634c,0x636c,0x5b0b,0x632b,0x5b2b,0x634c,0x636c,0x52ea,0x634c,0x634c,0x634b,0x5b2b,0x5b2c,0x5b0b,0x5b2c,0x5b2b,0x632b,0x632c,0x634c,0x634c,0x5b2b,0x5b2b,0x5b0b,0x634c,0x636c,0x5b4c,0x5b0b,0x5b0b,0x73ce,0x636c,0x530b,0x636c,0x5b0b,0x5b0b,0x5b2b,0x636c,0x634c,0x634c,0x636c,0x5b2b,0x634c,0x6b8d,0x636c,0x6b8d,0x6b8d,0x634c,0x5b2b,0x634c,0x634c,0x636c,0x638d,0x5b2b,0x5b2c,0x5b0b,0x634c,0x5b2c,0x5b2c,0x634c,0x6b6d,0x5b2b,0x636c,0x632c,0x634c,0x634c,0x5b2c,0x5b0b,0x5b2b,0x636c,0x636c,0x5aea,0x5b2b,0x634c,0x634c,0x6b8c,0x5b4c,0x634c,0x634c,0x634c,0x5b0b,0x634c,0x634c,0x632c,0x634c,0x5b0b,0x5b2b,0x634c,0x634c,0x636c,0x634c,0x6b8d,0x6b8d,0x5b2c,0x634c,0x634c,0x634c,0x636d,0x5b0b,0x632c,0x5b0b,0x5b0b,0x634c,0x5b2c,0x5b2c,0x634c,0x634c,0x634c,0x5b0b,0x634c,0x636c,0x634c,0x636d,0x634c,0x632c,0x634c,0x634c,0x634c,0x5b0c,0x5b0b,0x5b0b,0x6b8d,0x6b8d,0x5b0b,0x632c,0x632c,0x634c,0x5b2c,0x632c,0x634c,0x632c,0x5b0b,0x5aeb,0x52ca,0x5b0b,0x5b0b,0x5b0c,0x5b2c,0x5aeb,0x5b2c,0x5b0b,0x5b0b,0x5b0c,0x5aeb,0x5b2b,0x636d,0x5b0b,0x5aeb,0x632c,0x634c,0x634c,0x632c,0x632c,0x632c,0x634c,0x632c,0x632c,0x5aeb,0x632c,0x5b0b,0x632c,0x5b2c,0x5aeb,0x5aeb,0x5aeb,0x632b,0x5b0b,0x5b0b,0x5b0b,0x632c,0x630b,0x632c,0x52ca,0x5aeb,0x632c,0x634c,0x630b,0x5b0b,0x5aeb,0x5aeb,0x5b0b,0x5aeb,0x5acb,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x52ca,0x5aca,0x5aeb,0x52ca,0x4a89,0x52aa,0x528a,0x528a,0x5aeb,0x52aa,0x52aa,0x528a,0x52aa,0x52cb,0x5aeb,0x52aa,0x52aa,0x52aa,0x5acb,0x52aa,0x4a69,0x52aa,0x52a9,0x5b0a,0x5aeb,0x4a8a,0x4a8a,0x4a69,0x52cb,0x52aa,0x4228,0x528a,0x52aa,0x4a69,0x528a,0x528a,0x4a69,0x4a8a,0x528a,0x4a69,0x528a,0x52aa,0x4a49, +0x52ca,0x5b0b,0x5aeb,0x52ca,0x52ca,0x52ea,0x5aeb,0x52ca,0x5b0b,0x5aeb,0x52ca,0x52ca,0x52ca,0x5aeb,0x5b0b,0x5b0b,0x5b2b,0x52ea,0x632b,0x632c,0x5aeb,0x5b2b,0x6b6c,0x632b,0x5aeb,0x5b2c,0x5b0b,0x5b2b,0x5aea,0x52ca,0x52ca,0x52ca,0x52ca,0x5b0b,0x5aeb,0x5b2b,0x52ea,0x52ea,0x5b0b,0x5aeb,0x52a9,0x52ea,0x52ca,0x5b0b,0x5aeb,0x52eb,0x52eb,0x5b2b,0x5b0b,0x52ca,0x52eb,0x5b0b,0x5aeb,0x5b0b,0x52ea,0x52eb,0x5b2c,0x5b0b,0x5b0a,0x5aeb,0x52ca,0x52ea,0x52ea,0x5b0b,0x5b0b,0x5b2b,0x5b2b,0x530b,0x5b0b,0x52eb,0x5aeb,0x5b0b,0x5aeb,0x52ea,0x5aeb,0x5b0b,0x5b0b,0x52eb,0x5b0b,0x5b0b,0x52ea,0x52eb,0x5b0b,0x5b0b,0x5b2b,0x530b,0x5aeb,0x5b0b,0x52ea,0x5b2b,0x5b0b,0x52ca,0x52ea,0x5b2b,0x5b0b,0x5b0b,0x5b4c,0x5b2b,0x5b4c,0x5b0b,0x52ea,0x5b0b,0x5b2b,0x52ea,0x52ca,0x5b0b,0x52ca,0x5b0b,0x5b4b,0x5b2b,0x5b0b,0x530b,0x4aa9,0x52ca,0x632c,0x5b0b,0x5b0b,0x634c,0x5b0b,0x530a,0x5b4b,0x52eb,0x530b,0x52ea,0x5b0b,0x5b2c,0x634c,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x5b0b,0x634c,0x634c,0x636c,0x5b0b,0x5b0b,0x5b2b,0x636c,0x5b2b,0x5b2b,0x5b4c,0x5b2c,0x5b2c,0x5b0b,0x632c,0x5b4c,0x634c,0x634c,0x5b0b,0x634c,0x5b2c,0x5b2b,0x5b2b,0x5b2c,0x5b0b,0x5b2b,0x5b0b,0x5b2b,0x5b2b,0x5b2b,0x52eb,0x634c,0x5b2b,0x52eb,0x5b2b,0x634c,0x634c,0x5aeb,0x5b0b,0x5b0b,0x634c,0x5b4c,0x5b2b,0x5b2b,0x636c,0x5b2b,0x632b,0x634c,0x5b2b,0x5b2b,0x634c,0x5b2c,0x634c,0x5b2c,0x5aeb,0x632c,0x5b2c,0x5b2b,0x5b2b,0x5b2c,0x52eb,0x632c,0x636d,0x634c,0x5b0b,0x632c,0x5b2b,0x632c,0x5b0b,0x634c,0x632c,0x5b2c,0x632c,0x5b0b,0x634c,0x634c,0x5b2c,0x5aeb,0x5b0b,0x634c,0x634c,0x5b0b,0x5aeb,0x632c,0x5b0b,0x5b0b,0x5b0b,0x5b2b,0x5b2c,0x52eb,0x5b0b,0x632c,0x5b2c,0x5aeb,0x5b2c,0x5b0b,0x634c,0x634c,0x5aeb,0x632c,0x634c,0x5b2b,0x52ea,0x5b0b,0x5aeb,0x632c,0x6b4c,0x632c,0x634c,0x632c,0x634c,0x632c,0x632c,0x52ca,0x5b0b,0x634c,0x632c,0x632c,0x632b,0x5b0b,0x632c,0x632c,0x634c,0x5b0b,0x5b2c,0x632c,0x632c,0x632c,0x632b,0x632c,0x632b,0x5b2b,0x632c,0x632c,0x6b6d,0x632b,0x5b0b,0x634c,0x634c,0x5aeb,0x5b0b,0x5aeb,0x632c,0x52ea,0x632b,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x5b0c,0x634c,0x6b4c,0x630b,0x52ca,0x5b0c,0x5aeb,0x5aeb,0x52ca,0x52ca,0x5b0b,0x632c,0x52ca,0x5aeb,0x632c,0x630b,0x5b0b,0x5b0b,0x5b2b,0x632c,0x52aa,0x5aeb,0x632c,0x634c,0x632c,0x52ca,0x5b0b,0x632c,0x632c,0x630b,0x52ca,0x634d,0x6bae,0x5aeb,0x5b2c,0x6b6d,0x6b6d,0x5aeb, +0x5aeb,0x5aeb,0x5b0b,0x632c,0x5b0b,0x5aea,0x636c,0x634c,0x5b0b,0x630b,0x632c,0x52ea,0x5b0b,0x5b0b,0x6b6c,0x636c,0x5b0b,0x5aeb,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x632b,0x634c,0x5b0b,0x5b2b,0x52ea,0x52ca,0x5aeb,0x5b2b,0x5b0b,0x52ca,0x52ca,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x52ea,0x5b2b,0x5aeb,0x52ca,0x5b0b,0x5b2b,0x5b0b,0x5aeb,0x5b0b,0x52ca,0x52ca,0x52ca,0x5b2b,0x5b2b,0x52ea,0x632b,0x5b2b,0x52ea,0x5b2c,0x5b0b,0x52ea,0x5b0b,0x5b2b,0x52ea,0x52ea,0x5b0b,0x5aea,0x5b0b,0x52eb,0x530b,0x530b,0x5b2b,0x5b0b,0x5b2b,0x52aa,0x52ca,0x52ca,0x52ca,0x5b0b,0x530b,0x5b0b,0x5b0b,0x636c,0x5b2b,0x5b2b,0x5aeb,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x52ca,0x52aa,0x52ca,0x5b0b,0x5b2b,0x634c,0x634c,0x5b0b,0x5b2b,0x52ea,0x5b0b,0x6b8c,0x4a89,0x634c,0x5b4c,0x52ca,0x52ea,0x5aea,0x5aeb,0x5b4c,0x5b4b,0x5b4b,0x52ea,0x52ea,0x5b0b,0x5b0b,0x636c,0x5b0b,0x5b2c,0x5b0b,0x5b0b,0x5b2b,0x52ea,0x52ca,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x634c,0x5b0b,0x632c,0x634c,0x5b4c,0x52ea,0x5b0b,0x52ea,0x5b2b,0x634c,0x52ea,0x632c,0x5b0b,0x5b4c,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x52eb,0x52ca,0x5b0b,0x5b2b,0x5b2b,0x5b2b,0x530a,0x5b0b,0x5b0b,0x5b2b,0x530b,0x530b,0x530b,0x5b2b,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x5b2c,0x5b2c,0x636c,0x5b0b,0x5b0b,0x5aeb,0x5aeb,0x632c,0x52ca,0x5b0b,0x634c,0x5b2b,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x5b2b,0x52eb,0x52ca,0x632c,0x5b0b,0x530b,0x5b2c,0x5b2c,0x5b2c,0x634c,0x5b0b,0x634c,0x5b2b,0x632c,0x634c,0x5b2b,0x5b2c,0x5b0b,0x5b0b,0x634c,0x632c,0x634c,0x5b2c,0x6b6d,0x5b2c,0x5aeb,0x5b0b,0x5b0b,0x634c,0x634c,0x5b0b,0x5b0b,0x632c,0x632c,0x634c,0x632c,0x5b0b,0x5b0c,0x636d,0x632c,0x632c,0x634c,0x5b0b,0x5aeb,0x634c,0x5b0b,0x5aeb,0x632c,0x632c,0x5b2c,0x5b0b,0x5b0b,0x632c,0x5b0b,0x5b0b,0x634c,0x636d,0x634c,0x6b6d,0x632c,0x634c,0x5b0b,0x5aeb,0x5b0b,0x634c,0x6b6d,0x632c,0x6b4c,0x632c,0x634c,0x632b,0x6b4c,0x634c,0x6b6d,0x632c,0x6b8d,0x6b8d,0x634c,0x632c,0x6b4c,0x6b6c,0x6b4c,0x632b,0x630b,0x5b0b,0x5b0b,0x6b6c,0x634c,0x630b,0x630b,0x52ca,0x5aeb,0x5aeb,0x52ca,0x52ca,0x52ca,0x5aca,0x5aeb,0x5b0c,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x52ca,0x5aeb,0x632c,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x52eb,0x5aeb,0x52aa,0x5b0b,0x634c,0x52aa,0x5b0c,0x632c,0x52ca,0x632c,0x632c,0x52ca,0x634c,0x5b0b,0x5acb,0x630b,0x5b0b,0x632c,0x5aeb,0x52ca,0x5b0b,0x5aeb,0x6b6d,0x634c,0x52ca,0x5aeb, +0x5aeb,0x6b6c,0x632c,0x5aeb,0x52aa,0x52ca,0x52ca,0x5aeb,0x5b0b,0x630b,0x5b0b,0x5aeb,0x52ea,0x634c,0x634b,0x632b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x632b,0x634b,0x5aeb,0x5aeb,0x52ca,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x52ca,0x52ca,0x52aa,0x52eb,0x52aa,0x52ca,0x52ca,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x52ea,0x5b2c,0x5aeb,0x5b0b,0x5b0b,0x52ea,0x5b2b,0x5b0b,0x52ea,0x5b0b,0x5b2b,0x632c,0x632b,0x634b,0x5b0b,0x5b0b,0x5b2b,0x632b,0x52ca,0x5b0b,0x5b0b,0x52ca,0x52ca,0x5b0b,0x5b0b,0x52ea,0x52ea,0x5b0b,0x52aa,0x52ca,0x5b0b,0x52ea,0x52ca,0x5b0b,0x52ea,0x5b4c,0x634c,0x5aea,0x5b2b,0x5b2b,0x634c,0x5b2b,0x634c,0x5b4b,0x634c,0x636c,0x5b2b,0x5b2b,0x5b2b,0x5b0b,0x634c,0x5b0b,0x5aeb,0x634c,0x5b2b,0x5b2b,0x636c,0x636c,0x634c,0x5b4b,0x5b2b,0x632b,0x5b0b,0x5b2b,0x5b2b,0x5b0b,0x5b2b,0x5b0b,0x52ca,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x52eb,0x634c,0x5b4c,0x52ea,0x5b0b,0x634c,0x5b2b,0x5b2b,0x5b0b,0x632c,0x5b2c,0x5aeb,0x636c,0x636c,0x636c,0x636c,0x5b2c,0x5b0b,0x5b0b,0x52eb,0x5b2c,0x634c,0x634c,0x634c,0x634c,0x5b0b,0x5b2c,0x5b2c,0x5b2c,0x530b,0x52ea,0x5b2b,0x634c,0x634c,0x634c,0x5b0b,0x5b2b,0x5b0b,0x5b2c,0x634c,0x5b2b,0x634c,0x5b2c,0x52eb,0x632c,0x632c,0x634c,0x634c,0x636c,0x5b2b,0x634c,0x5b2c,0x634c,0x5b2c,0x5b2c,0x634c,0x5b0b,0x634c,0x632c,0x5b0b,0x634c,0x5b2c,0x5b2c,0x5b2c,0x5b2b,0x5aeb,0x5b2c,0x52eb,0x5b2c,0x634c,0x5b2b,0x5b0b,0x6b8d,0x5b2b,0x5b0b,0x632c,0x5aeb,0x5aeb,0x634c,0x5b0b,0x636c,0x5b0b,0x5b2b,0x638d,0x634c,0x5b0b,0x5b0b,0x634c,0x6b6d,0x634c,0x636c,0x634c,0x5b2c,0x5b0b,0x5b2c,0x634c,0x632c,0x5b2c,0x5b0b,0x5b2c,0x632c,0x5b0b,0x5aeb,0x5aeb,0x632c,0x632c,0x5b0b,0x5aeb,0x634c,0x632c,0x5aeb,0x5b0b,0x632c,0x632c,0x5b0b,0x52eb,0x5b0b,0x5b0c,0x5aeb,0x630c,0x634c,0x632c,0x634c,0x630c,0x5aeb,0x632c,0x5b2b,0x5b2b,0x632c,0x5b0c,0x5aeb,0x634c,0x5b2c,0x5b0b,0x632c,0x630b,0x630c,0x5b0b,0x632c,0x5aeb,0x5b0b,0x632c,0x5aeb,0x634c,0x634c,0x632c,0x630b,0x5b0b,0x634c,0x632c,0x5aeb,0x5aeb,0x630b,0x630b,0x632c,0x630b,0x630b,0x5aeb,0x5acb,0x5acb,0x52ca,0x52ca,0x5aeb,0x52aa,0x52aa,0x52ca,0x5b0b,0x52ca,0x52aa,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x5aeb,0x630b,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x52eb,0x52eb,0x5b2b,0x52cb,0x5b0b,0x5acb,0x5aeb,0x5aeb,0x632c,0x5acb,0x5aeb,0x634c,0x5aeb,0x52ca,0x632c,0x634c,0x5aeb,0x632c,0x632c,0x632c,0x632c,0x632c, +0x7c2f,0x73ee,0x740f,0x740e,0x73ce,0x73ef,0x6bce,0x6bad,0x73ee,0x73ce,0x636c,0x636d,0x6bce,0x6b8d,0x6bae,0x634c,0x6b8d,0x740e,0x6b8d,0x73ce,0x6b8d,0x638d,0x5b4b,0x73ee,0x6b8d,0x636c,0x6b8d,0x636c,0x6b8d,0x634c,0x636c,0x5b2c,0x636c,0x5b4c,0x636c,0x634c,0x636c,0x636c,0x6b8d,0x638d,0x6b8d,0x636c,0x634c,0x5b0b,0x5b0b,0x6b8d,0x634c,0x5b2b,0x636c,0x636c,0x634c,0x634c,0x5b2c,0x5b2b,0x5b2b,0x636c,0x6b8d,0x634c,0x5b4c,0x634c,0x5b2b,0x632c,0x634c,0x636c,0x5b0b,0x5b0b,0x5b2b,0x636c,0x636c,0x5b0b,0x52ca,0x636c,0x52eb,0x5b0b,0x52ea,0x52ea,0x52ea,0x52ea,0x5b4c,0x634c,0x5b0b,0x5b2b,0x5b4c,0x5b2b,0x638d,0x5b2b,0x530b,0x52ea,0x634c,0x5b0b,0x636c,0x5b0b,0x52aa,0x52eb,0x52eb,0x5b0b,0x634c,0x52ca,0x52eb,0x636c,0x634c,0x5b0b,0x52ca,0x5b2b,0x5b0b,0x530a,0x52ca,0x5b0b,0x5aeb,0x52ca,0x6b8d,0x5b0b,0x52ca,0x5b2b,0x5b2b,0x52ea,0x52ea,0x52ea,0x52ea,0x52ca,0x530b,0x530b,0x52ca,0x52ea,0x5b2b,0x5b2b,0x52ca,0x4aa9,0x5b0b,0x5b2b,0x52ca,0x636c,0x5b2b,0x4aaa,0x5b0b,0x634c,0x52eb,0x52ca,0x5b2c,0x5b2b,0x634c,0x636c,0x530b,0x4269,0x52eb,0x5b2c,0x52eb,0x632c,0x52ca,0x5aeb,0x5b2b,0x5b2b,0x5b0b,0x52ca,0x52ca,0x52ca,0x52ca,0x5b2b,0x5b2b,0x5b0b,0x5b2c,0x52ca,0x5b2b,0x5aeb,0x5aea,0x5aeb,0x5b2b,0x5b2b,0x5b4c,0x52ca,0x5b0b,0x636d,0x5b2c,0x638d,0x634c,0x5aeb,0x636c,0x634c,0x5b2b,0x634c,0x5b2c,0x634c,0x632c,0x636d,0x52eb,0x5b2c,0x5b0b,0x5b4c,0x5b2b,0x632c,0x632c,0x6b8d,0x634c,0x636c,0x6bce,0x5b4c,0x5b0b,0x634c,0x634c,0x5b4c,0x6b8d,0x634c,0x634c,0x6b8d,0x636c,0x634c,0x634c,0x5b2c,0x5b0b,0x6b6d,0x5b2c,0x5b2c,0x636d,0x5b0b,0x634c,0x636c,0x5b0b,0x632c,0x6b6d,0x634c,0x638d,0x6b8d,0x6b8d,0x636c,0x6b8d,0x636c,0x6b8d,0x6bad,0x73ee,0x6b8d,0x6b6d,0x6b8d,0x6b8d,0x6b8d,0x634d,0x6b6d,0x73ae,0x73ee,0x6b8d,0x6bad,0x634c,0x634c,0x740f,0x73ee,0x73ae,0x6b8d,0x6b8e,0x6b8d,0x6b6d,0x7c0f,0x8450,0x6b8d,0x6b6c,0x73ae,0x6bae,0x636d,0x6b6d,0x6b8d,0x6b6d,0x6b8d,0x634c,0x6b6d,0x73ce,0x6bad,0x73ce,0x6b8d,0x6b8d,0x6b8d,0x632c,0x6b6d,0x6b6d,0x632c,0x6b8d,0x6b6d,0x634c,0x6b6d,0x6b6d,0x73ce,0x6b6d,0x5b0b,0x6b8d,0x6b6d,0x6b6d,0x73ae,0x6b8d,0x6b8d,0x6b6d,0x738e,0x634d,0x6bae,0x73ce,0x6b6d,0x634c,0x634c,0x632c,0x632c,0x6b8d,0x634c,0x6b8d,0x634c,0x5b0b,0x634c,0x634c,0x634c,0x634d,0x634d,0x630c,0x5b0b,0x632c,0x6b6d,0x5b2c,0x5aeb,0x5b0b,0x634d,0x632d,0x5b0c,0x5aeb,0x6b4d,0x632c,0x630b, +0x8470,0x8490,0x8491,0x7c2f,0x7c50,0x8491,0x7c2f,0x7c2f,0x8470,0x7c0f,0x6b8d,0x6b8d,0x73ee,0x73ce,0x7c0f,0x73ce,0x6b8d,0x740f,0x7c2f,0x6bad,0x634c,0x5b4c,0x5b0b,0x634c,0x5b2b,0x6b8d,0x636c,0x638d,0x6bce,0x636c,0x5b0b,0x5b0b,0x6b8d,0x634c,0x5b4c,0x73ee,0x6bae,0x5b2b,0x5b0b,0x5b2b,0x5b2b,0x5b2c,0x52ca,0x634c,0x634c,0x5aeb,0x5b0b,0x5b0b,0x636c,0x636c,0x4268,0x52ca,0x52eb,0x5b2b,0x52ea,0x52ea,0x52ca,0x5b0b,0x52ca,0x4a69,0x4a89,0x52ca,0x4aa9,0x4aa9,0x4a69,0x4a69,0x4a89,0x52ea,0x52ea,0x4248,0x4228,0x4a89,0x4268,0x3a07,0x3a07,0x4248,0x3a28,0x3a28,0x3a28,0x3a28,0x4a69,0x4268,0x4a89,0x3a28,0x3a27,0x4248,0x39e7,0x29a5,0x3a07,0x4269,0x3a07,0x3a07,0x31a6,0x4248,0x4a89,0x4248,0x3a07,0x31c6,0x3a07,0x4a69,0x39e7,0x4207,0x31c6,0x31c7,0x3a07,0x3a07,0x3a07,0x4249,0x4a69,0x4228,0x4248,0x4a89,0x31c6,0x4248,0x4248,0x3a28,0x4248,0x39e7,0x4228,0x31e7,0x3a07,0x3a07,0x31c6,0x4268,0x4a89,0x2985,0x31a6,0x3a07,0x3a27,0x4268,0x3a07,0x4248,0x3a07,0x4228,0x3a07,0x39e7,0x4a69,0x39e7,0x3a07,0x39e7,0x3a27,0x3a07,0x4248,0x4248,0x31a6,0x3a07,0x3a07,0x3a08,0x4a69,0x3a07,0x4248,0x3a07,0x4228,0x31c6,0x3a07,0x31c6,0x3a07,0x3a28,0x4248,0x52ca,0x4aaa,0x3a28,0x4aaa,0x4228,0x3a07,0x4228,0x4a69,0x3a28,0x4269,0x4a69,0x31c6,0x4a69,0x5aeb,0x4aaa,0x4a89,0x4a89,0x52ea,0x4268,0x3a07,0x3a28,0x4248,0x4a89,0x5b2b,0x634c,0x4aaa,0x4269,0x52eb,0x52eb,0x4269,0x52ca,0x4a89,0x4a69,0x5b0b,0x5b0b,0x52ca,0x52ca,0x5aeb,0x4a69,0x52ca,0x4a89,0x52aa,0x52ca,0x52ca,0x52ca,0x52eb,0x632c,0x5b2b,0x632c,0x5aeb,0x5aeb,0x73ae,0x5aeb,0x5b2c,0x632c,0x6bad,0x73ce,0x634c,0x5aeb,0x634c,0x6b8d,0x5b2c,0x636d,0x6b8d,0x5b2c,0x636d,0x6bad,0x73ae,0x73ce,0x73ce,0x7c0f,0x6b6d,0x6bae,0x6bae,0x6bae,0x6b8d,0x6b8d,0x6b6d,0x7c0f,0x73ce,0x73ce,0x73ce,0x73ce,0x7c0f,0x8c91,0x8430,0x8430,0x7c0f,0x7bef,0x8430,0x8430,0x7c0f,0x73ae,0x840f,0x7bee,0x7c0f,0x8450,0x7c0f,0x8470,0x8cb1,0x842f,0x8430,0x8430,0x8c91,0x8c91,0x8c71,0x840f,0x8450,0x8c70,0x94d2,0x8450,0x8450,0x8c91,0x8c91,0x8430,0x8c71,0xa554,0x8c91,0x9d13,0x94f2,0x8c71,0x94d2,0x94b2,0x94b2,0x94d2,0x94d2,0x8c91,0x94d2,0x8c91,0x94d2,0x9d13,0x9d13,0x8470,0x8430,0x8c91,0x94f3,0x8cb2,0xa514,0x9491,0xad74,0x9cf2,0x8c91,0x9cd3,0x9d13,0x8c71,0x8c91,0x8c91,0x8c71,0x8450,0x8430,0x7c0f,0x8450,0x94b2,0x94b2,0x8c92,0x8c92,0x8430,0x8430,0x9cf3,0x8450,0x8c91, +0x2124,0x2144,0x2944,0x2144,0x2124,0x18c3,0x18c3,0x2103,0x2965,0x2124,0x18e3,0x2124,0x2124,0x2103,0x18e3,0x2144,0x2103,0x2124,0x2124,0x18c2,0x18e3,0x10a2,0x1082,0x0000,0x18e3,0x18c3,0x1081,0x18e3,0x2124,0x0841,0x0841,0x10a2,0x1082,0x18e3,0x18c3,0x2124,0x2144,0x10a2,0x18e3,0x2104,0x18c2,0x0861,0x0000,0x2103,0x10a2,0x0841,0x10a2,0x0861,0x18c2,0x0881,0x0000,0x0000,0x0841,0x2104,0x10a2,0x0000,0x0000,0x0000,0x0841,0x0861,0x0841,0x0000,0x0820,0x0820,0x0000,0x0841,0x0020,0x0000,0x1082,0x0000,0x1082,0x0041,0x1061,0x0820,0x1062,0x0821,0x0000,0x0820,0x0000,0x0000,0x0841,0x0841,0x0000,0x0000,0x0821,0x0861,0x0861,0x1062,0x0821,0x1082,0x0841,0x0000,0x0841,0x0020,0x0840,0x1082,0x0820,0x0841,0x0000,0x0000,0x1061,0x0000,0x0841,0x10a2,0x1082,0x10a2,0x1082,0x0861,0x1082,0x1061,0x0820,0x0000,0x1061,0x18c3,0x0000,0x18a2,0x18c3,0x0840,0x10a2,0x1061,0x0840,0x1082,0x18a2,0x18c3,0x1061,0x10a2,0x10a2,0x18c3,0x10c2,0x10a2,0x18c3,0x0861,0x1081,0x18e3,0x10a2,0x0020,0x10a2,0x10a2,0x10a2,0x18c2,0x18c2,0x0820,0x18e3,0x2124,0x10c2,0x10c2,0x10a2,0x0840,0x10a2,0x18e3,0x18c3,0x10a2,0x18e3,0x18c3,0x10a2,0x1082,0x18e3,0x1061,0x1082,0x18c3,0x0820,0x18c2,0x0820,0x10a2,0x10a2,0x10a2,0x0861,0x0820,0x10a2,0x1082,0x0861,0x1081,0x18e3,0x10a2,0x10a2,0x18c3,0x18c3,0x10a2,0x1082,0x0861,0x0861,0x0020,0x10c2,0x18c2,0x18c3,0x10a2,0x2104,0x2124,0x18e3,0x18e3,0x1082,0x0000,0x18c2,0x1082,0x0000,0x2104,0x2965,0x1061,0x10a2,0x18c3,0x18e3,0x18c3,0x18e3,0x10c2,0x2104,0x3186,0x2944,0x18e3,0x2104,0x0881,0x3185,0x18c3,0x10a2,0x2124,0x3185,0x2965,0x2965,0x2124,0x2124,0x2945,0x18e3,0x18c2,0x18c3,0x2103,0x2103,0x2124,0x2124,0x2944,0x2104,0x2124,0x18c2,0x2104,0x2104,0x2144,0x2945,0x2124,0x2945,0x2103,0x39c7,0x2945,0x2965,0x31a6,0x2945,0x2124,0x2124,0x39e7,0x3186,0x2985,0x4a48,0x2124,0x18e2,0x3185,0x3a07,0x2965,0x2985,0x4208,0x4208,0x29a6,0x4228,0x4a49,0x39c7,0x4a69,0x4228,0x4a69,0x39e7,0x4a69,0x4a48,0x5289,0x4a69,0x4248,0x4a69,0x5aeb,0x4228,0x4228,0x52aa,0x5aeb,0x632c,0x4a89,0x528a,0x630c,0x52aa,0x52aa,0x52ca,0x5b0b,0x5aca,0x5b0b,0x6b6d,0x5aeb,0x632c,0x634c,0x630b,0x5aca,0x52aa,0x630b,0x634c,0x5aeb,0x6b8d,0x7bce,0x840f,0x738d,0x5aeb,0x73ae,0x738e,0x6b4d,0x738d,0x6b4d,0x6b8d,0x632c,0x632c,0x528a,0x634d,0x738e,0x632c,0x738e,0x6b6d,0x5b0c,0x632c,0x52ca,0x5b0b,0x7bcf, +0x18e3,0x10c3,0x10a3,0x18c3,0x18c3,0x18e3,0x2104,0x18e3,0x10a2,0x18c3,0x18c3,0x18c2,0x18c3,0x18c3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x2104,0x2124,0x18e3,0x2104,0x2144,0x18e3,0x18e3,0x2124,0x2124,0x2104,0x18e3,0x2104,0x1904,0x10c3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x2103,0x2104,0x18e3,0x1903,0x2144,0x2124,0x18e3,0x18e3,0x2104,0x2124,0x2104,0x18e3,0x2124,0x1904,0x2124,0x2124,0x2104,0x2104,0x2124,0x2104,0x2124,0x2104,0x18e4,0x2104,0x1903,0x18e3,0x2144,0x18e3,0x2124,0x2144,0x1903,0x18e3,0x2104,0x2104,0x18e3,0x2104,0x2144,0x2124,0x18e3,0x18e3,0x18e3,0x18e4,0x2104,0x2144,0x2124,0x2104,0x18c3,0x1903,0x2104,0x18e3,0x2104,0x1904,0x2124,0x2104,0x18e3,0x1903,0x2124,0x2104,0x18e3,0x2124,0x2104,0x1904,0x1904,0x1904,0x2103,0x2104,0x2103,0x2124,0x2104,0x2104,0x2124,0x2124,0x18e3,0x2945,0x2124,0x2124,0x2124,0x1904,0x2124,0x2104,0x18c3,0x18e3,0x18c3,0x18e3,0x18e3,0x18c3,0x18c3,0x18e3,0x18c3,0x18c3,0x1904,0x10c3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18c3,0x10a2,0x10c3,0x1904,0x10a2,0x0861,0x10a2,0x18c3,0x18e3,0x18e3,0x2104,0x10a2,0x1082,0x18e3,0x10c3,0x1082,0x10a2,0x18e3,0x18c3,0x18e3,0x18e3,0x10c2,0x10c2,0x18e3,0x18e3,0x18e3,0x18e3,0x18c2,0x10c2,0x18e3,0x18c2,0x18c3,0x18e3,0x18c3,0x18e3,0x18e3,0x18e3,0x10c2,0x10c3,0x10a2,0x18c3,0x18e3,0x18c3,0x18e3,0x18c3,0x18a2,0x18e3,0x18e3,0x10a2,0x10a2,0x18e3,0x1082,0x18e3,0x1904,0x10c3,0x18e3,0x2104,0x18c3,0x18a3,0x2104,0x18e3,0x10c3,0x18c3,0x10a2,0x18e3,0x18c3,0x18c2,0x10a2,0x1082,0x10a2,0x10a2,0x18c3,0x10a2,0x1904,0x18e3,0x10a2,0x10a2,0x18c3,0x1082,0x18c3,0x18e3,0x10a2,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18c2,0x18c3,0x18e3,0x18e3,0x18e3,0x20e4,0x1903,0x18e3,0x18e3,0x18e3,0x18e3,0x18e4,0x18c3,0x18e3,0x10c2,0x1082,0x1082,0x10a2,0x18c2,0x0860,0x18c2,0x18c3,0x0021,0x18c3,0x18c3,0x1082,0x0861,0x18c3,0x1082,0x0841,0x0000,0x1061,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x3a08,0x3a08,0x39e7,0x4228,0x4228,0x3a07,0x39e7,0x3a08,0x4228,0x39e7,0x39e7,0x4228,0x4228,0x3a07,0x39e7,0x4228,0x4228,0x3a08,0x3a28,0x4208,0x39e7,0x3a28,0x4228,0x3a07,0x3a07,0x4228,0x4248,0x3a07,0x3a28,0x3a08,0x4228,0x4228,0x4208,0x4228,0x4228,0x4228,0x3a28,0x3a07,0x3a07,0x3a07,0x3a28,0x4248,0x4248,0x3a28,0x4228,0x4228,0x4248,0x4228,0x4248,0x4228,0x4248,0x4228,0x3a08,0x4228,0x3a28,0x3a28,0x4269,0x4248,0x4228,0x4248,0x4228,0x4a69,0x3a07,0x4228,0x4a69,0x4248,0x4248,0x4248,0x4228,0x4248,0x4249,0x4248,0x4248,0x3a28,0x4228,0x4228,0x4248,0x4a89,0x4248,0x4248,0x4248,0x3a07,0x4228,0x3a28,0x4248,0x4228,0x4248,0x4228,0x4269,0x4a89,0x4269,0x4a89,0x4a89,0x4248,0x4248,0x4269,0x4269,0x4248,0x4228,0x4248,0x4269,0x4a89,0x4a89,0x4aaa,0x4a89,0x4a89,0x4228,0x4248,0x4a89,0x4a89,0x4269,0x4aa9,0x4269,0x4228,0x4a89,0x4a89,0x4248,0x4a69,0x4a69,0x4a69,0x4269,0x4289,0x4a89,0x4a89,0x4a89,0x4248,0x4248,0x4268,0x4228,0x4249,0x4a89,0x4228,0x4248,0x4269,0x4a69,0x4269,0x4248,0x4a69,0x4a89,0x4a8a,0x4249,0x4228,0x4228,0x3a28,0x4228,0x3a28,0x4248,0x4248,0x4249,0x4269,0x4248,0x4269,0x4228,0x4228,0x4249,0x4269,0x4a89,0x3a07,0x4228,0x4269,0x4248,0x4228,0x4269,0x4248,0x4228,0x4249,0x4248,0x4248,0x4249,0x4228,0x4248,0x4248,0x4a49,0x4249,0x4249,0x4249,0x3a28,0x4249,0x4a69,0x4a69,0x4248,0x4248,0x4228,0x4228,0x4a49,0x4a69,0x4249,0x4249,0x4228,0x4a89,0x4a69,0x4248,0x4248,0x4248,0x4a69,0x4249,0x4a69,0x4a49,0x4228,0x4a89,0x4a89,0x4a69,0x4a69,0x4249,0x4a69,0x4248,0x4a69,0x4a49,0x4248,0x4268,0x4a89,0x4a89,0x4a49,0x4249,0x4249,0x4249,0x4a69,0x4a69,0x4a69,0x4a48,0x4249,0x4a69,0x4a69,0x4a49,0x4a49,0x4248,0x4a49,0x4248,0x4a69,0x4248,0x4a49,0x4a49,0x4248,0x4228,0x4249,0x4a69,0x4a69,0x4a69,0x4a89,0x4248,0x4249,0x4248,0x4248,0x4248,0x4a69,0x4248,0x4a69,0x4a69,0x4a49,0x4228,0x4249,0x4249,0x4248,0x4248,0x4248,0x4248,0x4a49,0x4a48,0x4228,0x4228,0x4228,0x4a48,0x4248,0x4228,0x4a49,0x4228,0x4a48,0x4248,0x4228,0x4228,0x4228,0x4248,0x4228,0x4228,0x4228,0x4248,0x4248,0x4228,0x4248,0x4249,0x4229,0x4228,0x4208,0x4248,0x4228,0x4228,0x4208,0x39e7,0x39e7,0x4228,0x4228,0x3a07,0x39e7,0x4249,0x3a08,0x4228,0x39e7,0x4208,0x4228,0x4228,0x4207,0x4228,0x4208,0x4228,0x4208,0x4208,0x39e7,0x4207,0x3a07,0x39e7,0x31c6,0x39e7,0x39c7,0x31a6,0x39c7,0x39c7,0x39e7,0x39e7,0x31c7,0x39e7, +0x4228,0x3a07,0x4248,0x4228,0x4208,0x4208,0x39e7,0x4228,0x4228,0x3a07,0x4228,0x4249,0x3a08,0x3a07,0x3a08,0x39e7,0x4228,0x4228,0x4228,0x4228,0x4228,0x3a28,0x3a28,0x3a08,0x4a89,0x4248,0x3a07,0x3a08,0x4228,0x3a28,0x3a28,0x4228,0x4248,0x4228,0x4269,0x3a07,0x3a08,0x4228,0x4248,0x4248,0x3a07,0x4248,0x4248,0x4228,0x4207,0x3a08,0x4228,0x4228,0x4269,0x4248,0x3a08,0x4228,0x4248,0x3a07,0x3a07,0x4248,0x4248,0x4248,0x4248,0x4248,0x3a08,0x3a08,0x4228,0x4228,0x4228,0x4228,0x4248,0x4269,0x4228,0x4228,0x4248,0x4248,0x4248,0x4248,0x4228,0x4248,0x4228,0x4269,0x4269,0x4a89,0x4269,0x4269,0x4248,0x4a69,0x4248,0x4248,0x4248,0x4a89,0x4a69,0x4248,0x4269,0x4a69,0x4228,0x4a69,0x4269,0x4249,0x4269,0x4248,0x4a89,0x4a69,0x4249,0x4a69,0x4a89,0x4269,0x4269,0x4248,0x4248,0x4a89,0x4a89,0x4248,0x4a69,0x4248,0x4269,0x4aaa,0x4a89,0x4268,0x4a89,0x4269,0x4a69,0x4248,0x4a89,0x4a89,0x4248,0x4a69,0x4a89,0x4248,0x4a89,0x4a89,0x4a89,0x4269,0x4269,0x4a69,0x4a89,0x4a89,0x4a89,0x4248,0x4a89,0x4a69,0x4aaa,0x4a89,0x4a89,0x4269,0x4a8a,0x4269,0x4269,0x4248,0x4a69,0x4a89,0x4248,0x4248,0x4a69,0x4269,0x4a89,0x4a89,0x4a89,0x4a69,0x4248,0x4269,0x4aaa,0x4a89,0x4249,0x4a69,0x4a89,0x4269,0x4a69,0x4a69,0x4269,0x4a69,0x4a89,0x52ca,0x4a89,0x4a69,0x4269,0x4269,0x4a69,0x52aa,0x4a89,0x4a69,0x4a89,0x4a89,0x4a89,0x4a69,0x4269,0x4289,0x4a89,0x52aa,0x4a8a,0x4269,0x4a69,0x52aa,0x4a89,0x4a89,0x4a89,0x4a69,0x4a69,0x4a69,0x4aaa,0x4a89,0x4aa9,0x52ca,0x4a89,0x4a69,0x4a89,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x4a89,0x52aa,0x52aa,0x4a89,0x52ca,0x4a89,0x4aaa,0x52ca,0x52aa,0x4a89,0x52eb,0x52aa,0x4a69,0x4a8a,0x52aa,0x4a69,0x4a89,0x4a89,0x4a89,0x4a69,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x4a69,0x4a69,0x4a89,0x4a69,0x4a89,0x4a89,0x4a89,0x4a89,0x52aa,0x4a89,0x4a89,0x4a69,0x4a69,0x4a89,0x4248,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a69,0x4a89,0x4a89,0x4a89,0x4a69,0x4a69,0x4a69,0x4a69,0x528a,0x4a89,0x4a69,0x4a69,0x4a89,0x4a49,0x4248,0x4a69,0x4a89,0x4a69,0x528a,0x4a69,0x4a69,0x4a69,0x4248,0x4a69,0x4a69,0x4a49,0x4249,0x4a69,0x4a8a,0x4a69,0x4a8a,0x4a89,0x4a8a,0x4a69,0x4a69,0x4248,0x4228,0x4249,0x4a69,0x4a69,0x4a49,0x4a69,0x4a89,0x52aa,0x4a89,0x4269,0x4a89,0x4a69,0x4a8a,0x4a69,0x4a69,0x52aa,0x4a69,0x4a69,0x528a,0x52aa,0x528a,0x4a69,0x4a8a,0x528a,0x528a,0x5289,0x4a89,0x4a69,0x4a69, +0x39e7,0x3a28,0x4248,0x4228,0x3a07,0x4228,0x3a07,0x39e7,0x3a07,0x4228,0x39e7,0x39e7,0x4208,0x3a08,0x4248,0x3a07,0x4208,0x4228,0x3a07,0x4228,0x4228,0x3a07,0x4228,0x3a07,0x4208,0x4228,0x4227,0x4228,0x4a49,0x4248,0x3a07,0x4a48,0x39e7,0x4207,0x4228,0x4228,0x4228,0x4208,0x4207,0x4228,0x4248,0x4228,0x4228,0x4228,0x3a07,0x3a28,0x3a28,0x4228,0x4228,0x4248,0x4228,0x39e7,0x4228,0x4228,0x3a07,0x4228,0x4a69,0x4228,0x39e7,0x4228,0x4208,0x3a07,0x4228,0x4207,0x4208,0x4228,0x4248,0x4a69,0x4a69,0x3a07,0x4248,0x4228,0x3a07,0x4228,0x4228,0x3a07,0x4228,0x4248,0x4228,0x4269,0x4a89,0x4269,0x4a48,0x4a69,0x4a69,0x4248,0x4248,0x4248,0x4228,0x4248,0x3a07,0x3a27,0x3a28,0x4269,0x4a69,0x4a69,0x4269,0x4248,0x4228,0x4269,0x4228,0x4269,0x4a69,0x4228,0x4a89,0x4207,0x4248,0x4a69,0x4248,0x4248,0x4269,0x4289,0x4268,0x4a89,0x4248,0x4248,0x4a69,0x4a48,0x4a89,0x4a69,0x4248,0x4a69,0x4a89,0x4a69,0x4a69,0x4a69,0x4aaa,0x4a89,0x4248,0x4a69,0x4a69,0x3a07,0x4248,0x4a89,0x4248,0x4228,0x4a69,0x4a69,0x4a69,0x4a69,0x52aa,0x4a68,0x4248,0x4269,0x4248,0x3a07,0x4248,0x4248,0x4248,0x3a28,0x4248,0x52ca,0x4a89,0x4248,0x4a89,0x4a69,0x4a69,0x4a89,0x4aaa,0x4a69,0x4a89,0x4aaa,0x4a89,0x4289,0x4269,0x4a89,0x4a69,0x4a89,0x4a89,0x4a89,0x52a9,0x4a69,0x4a69,0x4a89,0x4269,0x52aa,0x4a8a,0x4248,0x52aa,0x4a89,0x4a89,0x52aa,0x4a89,0x4a89,0x528a,0x52aa,0x4268,0x52ca,0x52aa,0x4228,0x4a89,0x4a89,0x4a69,0x4a89,0x4a89,0x4a89,0x4a89,0x4a69,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x4268,0x4a89,0x4a89,0x4a89,0x4a89,0x4a69,0x4a89,0x52ca,0x4a69,0x4a89,0x52aa,0x4a89,0x4a89,0x52ca,0x52aa,0x4a89,0x4a89,0x4a69,0x4a89,0x4a89,0x4a89,0x4aaa,0x4269,0x4a69,0x4aaa,0x52aa,0x4a69,0x52aa,0x4a89,0x4a69,0x52aa,0x4a89,0x4a89,0x4a89,0x4a69,0x4a69,0x4a89,0x4a69,0x52ca,0x4a8a,0x4248,0x52aa,0x4a49,0x4a48,0x4a89,0x52aa,0x4a69,0x4a89,0x4a69,0x4a69,0x4a69,0x4a49,0x4a69,0x4a69,0x4a49,0x4a49,0x4a89,0x4a8a,0x4a89,0x52aa,0x4a89,0x52aa,0x4a89,0x4248,0x4a49,0x52aa,0x528a,0x4a69,0x5289,0x4a89,0x528a,0x4a69,0x52aa,0x4a89,0x4a49,0x4248,0x4248,0x4a89,0x4a49,0x4a89,0x4a69,0x4a49,0x4a69,0x4a89,0x4a69,0x52aa,0x52aa,0x4a89,0x4a89,0x52aa,0x528a,0x52aa,0x528a,0x528a,0x4a89,0x52ca,0x52ca,0x52aa,0x52aa,0x52aa,0x4a8a,0x4a8a,0x52aa,0x4a69,0x528a,0x4a89,0x4a69,0x52aa,0x528a,0x528a,0x4a89,0x528a,0x52aa,0x52aa,0x528a,0x4a49,0x4a89, +0x39e7,0x39e7,0x31c6,0x39e7,0x3a07,0x39e7,0x39e7,0x39e7,0x39c6,0x39c6,0x39e7,0x4207,0x39c6,0x39e7,0x39e7,0x39e7,0x4207,0x39c7,0x39c7,0x39c7,0x31c6,0x4228,0x4228,0x3a07,0x31a6,0x3185,0x3a07,0x39e6,0x39e6,0x31c6,0x39e7,0x3a07,0x39e7,0x3a07,0x39e7,0x39e7,0x31c6,0x31c6,0x31a6,0x31a6,0x39c7,0x31c6,0x31c6,0x31c6,0x39e7,0x39c7,0x31c6,0x31c6,0x31c6,0x39e7,0x39e6,0x39e7,0x31a6,0x39e7,0x39c6,0x31a6,0x39c7,0x31a6,0x39e7,0x31c7,0x39e7,0x3a07,0x31c6,0x39e7,0x3a07,0x3a07,0x3a07,0x31c6,0x31c6,0x39e7,0x31c6,0x39e7,0x31a6,0x31c6,0x31c6,0x3a07,0x31c6,0x3185,0x39e7,0x39e7,0x3186,0x39e7,0x31c6,0x31a6,0x39e7,0x2965,0x31c7,0x31e7,0x31a6,0x31c7,0x39e7,0x31c6,0x39e6,0x39e7,0x31c6,0x31c6,0x31a6,0x39e7,0x39e7,0x4227,0x4268,0x31c6,0x31c6,0x31e6,0x4228,0x39c6,0x31a6,0x39e7,0x3a08,0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x31a6,0x31a6,0x31c6,0x31e7,0x31e7,0x39e7,0x39e7,0x31e7,0x31a6,0x31c6,0x31a5,0x39e7,0x31c6,0x31c6,0x39e7,0x39c6,0x31c6,0x39e7,0x31a6,0x31a6,0x31c6,0x2985,0x31c6,0x31c6,0x39e7,0x31e7,0x31c6,0x31c6,0x31c6,0x2985,0x39e7,0x3a07,0x31e7,0x31c6,0x31c6,0x31c7,0x39e7,0x31a5,0x31a6,0x31a6,0x2985,0x3a07,0x3a07,0x31a6,0x31c6,0x39c7,0x31a6,0x31c6,0x31c6,0x3a07,0x31a6,0x2986,0x31c6,0x39e7,0x2986,0x31c6,0x31c6,0x2965,0x2145,0x31c6,0x31e7,0x31e7,0x31c6,0x31a6,0x39e7,0x31c6,0x31c6,0x39e7,0x31a6,0x31c6,0x31e7,0x31c6,0x31e7,0x39e7,0x31c6,0x31c6,0x31a6,0x31e7,0x2985,0x39e7,0x2986,0x31a6,0x39e7,0x31c6,0x31a6,0x3a07,0x31c6,0x31e7,0x31a6,0x31a6,0x31c6,0x31c6,0x3a07,0x31c6,0x39c7,0x39e7,0x31c6,0x31a6,0x3a07,0x39c6,0x31a6,0x39e7,0x3a07,0x39c6,0x39e7,0x39e7,0x39c6,0x39e7,0x3a07,0x39c7,0x39e7,0x3a07,0x3a07,0x39c7,0x3a07,0x31c6,0x31a6,0x39e7,0x3a07,0x31c6,0x31c6,0x39e7,0x31a6,0x31a6,0x39c7,0x31e7,0x39e7,0x4208,0x39e7,0x39e7,0x31c6,0x39e7,0x3a07,0x39e7,0x31c6,0x39c7,0x39c7,0x31c6,0x39c7,0x39e7,0x31c6,0x31a6,0x31c6,0x31c6,0x31c6,0x39c7,0x39e7,0x4228,0x39e7,0x39c7,0x39e7,0x39c7,0x39c6,0x39e7,0x39e7,0x39e7,0x39c7,0x39e7,0x31a6,0x39e7,0x4208,0x31a6,0x31c6,0x31a6,0x31a6,0x3a07,0x31a6,0x31a6,0x39a6,0x31a6,0x39c7,0x31a6,0x31a6,0x39e7,0x39c7,0x39c7,0x39c7,0x3a07,0x3a07,0x4208,0x39e7,0x31a6,0x31a6,0x39e7,0x31a6,0x39e7,0x39c7,0x39c7,0x39e7,0x39c7,0x39e7,0x31a7,0x31a6,0x4208,0x39e7,0x4228,0x3a07,0x39e7,0x4228,0x39c7,0x39c7,0x4207,0x39c7,0x39e7,0x39e7, +0x5b0b,0x5aeb,0x5b2b,0x5b0b,0x5b0b,0x634c,0x6b6d,0x5b0b,0x632c,0x634c,0x634c,0x632b,0x636c,0x6b6c,0x5b0b,0x632b,0x632c,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x630b,0x632c,0x5b2b,0x632c,0x52ea,0x632b,0x5aea,0x632b,0x5b0b,0x5b0b,0x530b,0x5b2c,0x5b0b,0x5aeb,0x632c,0x5b0b,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5b2b,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x52ca,0x5aeb,0x5b0b,0x5b2c,0x52eb,0x5b2b,0x5b2b,0x52eb,0x5b0b,0x634c,0x634c,0x5aea,0x5b0b,0x5b0b,0x632b,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x632c,0x5b0b,0x4aaa,0x52ca,0x5b0b,0x5b2b,0x52ca,0x52ca,0x5b0b,0x5b0b,0x5b2c,0x5b0b,0x5aeb,0x632c,0x5b0b,0x52ca,0x632c,0x5b0b,0x5b0b,0x5b0b,0x52ea,0x5b2b,0x5b2b,0x634c,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x638c,0x73cd,0x5b0b,0x5b2c,0x52eb,0x52eb,0x5b0b,0x5b0b,0x5b2b,0x5b2b,0x52ca,0x5b2b,0x5b2b,0x634c,0x5b0b,0x5b2c,0x52ca,0x52ea,0x52ca,0x5b0b,0x5b2b,0x530b,0x5b0b,0x52eb,0x4aaa,0x5b0b,0x52ca,0x52ca,0x5aeb,0x5aeb,0x5b0b,0x634c,0x5b0b,0x5aeb,0x5b2c,0x52ca,0x52eb,0x632c,0x5b2b,0x5b0b,0x5b0b,0x52ea,0x5b0b,0x5b0b,0x5b0b,0x52ca,0x634c,0x5b2c,0x5b2c,0x5b0b,0x5aeb,0x52ca,0x630b,0x5aeb,0x5b0b,0x52eb,0x632c,0x634c,0x5b0b,0x5aeb,0x5aeb,0x52eb,0x634c,0x5b2c,0x5b0b,0x5b2c,0x5b0b,0x632c,0x5b0b,0x5b2c,0x5b2c,0x5b0b,0x634c,0x5b0b,0x632c,0x634c,0x5b2c,0x5b2c,0x5b2b,0x634c,0x634c,0x632c,0x632c,0x634c,0x5b0b,0x5b0b,0x632c,0x634c,0x5b2b,0x5b2b,0x5b2c,0x5b2b,0x632c,0x636d,0x5b2c,0x5b2b,0x5b2b,0x5b0b,0x5b2c,0x634c,0x634c,0x636d,0x5b0b,0x5b0b,0x5b0b,0x632c,0x5b2b,0x634c,0x6b6d,0x5b0b,0x5aeb,0x6b6d,0x5b0b,0x634c,0x6b6d,0x632c,0x634c,0x632c,0x5b0c,0x5aeb,0x5b0b,0x5b0b,0x5aeb,0x634c,0x632c,0x5b0b,0x6b4c,0x6b8d,0x73ae,0x6b8d,0x632c,0x5b0b,0x632c,0x632c,0x634c,0x632c,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x5aeb,0x632c,0x630c,0x5aeb,0x630b,0x632c,0x5aeb,0x5aeb,0x5b0b,0x5aeb,0x5b0b,0x632c,0x634c,0x5b0b,0x5b0b,0x630b,0x5b0b,0x5aeb,0x5b0b,0x630b,0x632c,0x5aea,0x5aeb,0x5aeb,0x52ca,0x5aca,0x5aeb,0x52aa,0x5aeb,0x634c,0x52ca,0x5aca,0x52ca,0x5aeb,0x52ca,0x5aea,0x52ca,0x5b0b,0x5b0b,0x5aca,0x5aeb,0x52ca,0x5aeb,0x5b0b,0x52ca,0x52cb,0x4a89,0x5289,0x52aa,0x52aa,0x5289,0x528a,0x52aa,0x4a69,0x4a89,0x5289,0x4a89,0x4228,0x4a69,0x4a89,0x52ca,0x52aa,0x4a8a,0x52aa,0x4a89,0x4a69,0x52aa,0x4248,0x4a69,0x39e7,0x4a49,0x4248,0x39e7,0x3a07,0x4228,0x4228,0x3a07,0x4208,0x39c7, +0x634c,0x5b2b,0x632c,0x5b2c,0x52eb,0x634c,0x636c,0x634b,0x5b2b,0x5b0b,0x6b8d,0x636c,0x6bad,0x5b2b,0x634c,0x634c,0x5b2b,0x5b2b,0x52eb,0x5b0b,0x634c,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x52ea,0x5b0b,0x5b2b,0x634c,0x632c,0x530b,0x5b2b,0x630c,0x5b0b,0x5aea,0x5b0b,0x5b4c,0x5b2b,0x5b0b,0x52ca,0x5b2b,0x5aeb,0x5aeb,0x5b0b,0x5b2b,0x5b0b,0x5b2b,0x5b2c,0x5b2c,0x52eb,0x5b0b,0x632c,0x5b0b,0x5b2b,0x5b2b,0x5b0b,0x5b2b,0x634c,0x636c,0x634c,0x5b2b,0x5b0b,0x636c,0x5b0b,0x5aeb,0x5b0b,0x5aeb,0x5aeb,0x5b2b,0x5aeb,0x52ea,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x5b2b,0x634c,0x5b0b,0x5aeb,0x52ca,0x5b0b,0x636c,0x52ea,0x52ca,0x5b0b,0x5b2b,0x5b0b,0x634c,0x5b0b,0x5b0b,0x5b4b,0x5b2b,0x634c,0x634c,0x52ea,0x5b2b,0x634c,0x5b0b,0x52ea,0x52eb,0x5b0b,0x5b0b,0x5b2b,0x5b2b,0x52ea,0x5b0b,0x5aea,0x5b2b,0x52ea,0x634c,0x636c,0x636c,0x5b2b,0x5b0b,0x52ea,0x636c,0x5b2b,0x5b2b,0x634c,0x52ca,0x52ca,0x5b2b,0x5b2c,0x5b0b,0x530b,0x5b2b,0x5b0b,0x5b2b,0x52ea,0x5b2c,0x5b2c,0x52ea,0x634c,0x5b2b,0x5b0b,0x5b0b,0x52ca,0x5b0b,0x634c,0x52eb,0x5b0b,0x5b0b,0x5b0b,0x52eb,0x5b2b,0x5b4c,0x5b2c,0x5b2c,0x5b0b,0x530b,0x634c,0x5b2b,0x5b2b,0x5b0b,0x632c,0x5b2c,0x5b2c,0x632c,0x5b0b,0x5b0b,0x5b0b,0x5b4c,0x636d,0x632c,0x634c,0x5b0b,0x5b4c,0x530b,0x634c,0x632c,0x634c,0x5b0b,0x632c,0x5b0b,0x5b0b,0x5b0b,0x5b2b,0x5b2b,0x5b4c,0x5b2c,0x634c,0x632c,0x5b0b,0x634c,0x5b2b,0x5b4c,0x634c,0x634c,0x634c,0x634c,0x5b0b,0x636d,0x5b2c,0x5b2c,0x634c,0x5b4c,0x5b0b,0x634c,0x632c,0x634c,0x6b6c,0x6b6d,0x636c,0x632c,0x634c,0x5b2b,0x634c,0x5b0b,0x634c,0x632c,0x632c,0x634c,0x5b0b,0x632c,0x636d,0x5b2c,0x5b2c,0x634c,0x634c,0x5b0b,0x634c,0x632c,0x634c,0x634c,0x634c,0x634c,0x6b6d,0x6b4c,0x630b,0x5b0b,0x632c,0x5b0b,0x5b0b,0x632c,0x632c,0x632c,0x52eb,0x5b0b,0x5b0b,0x634c,0x632c,0x5aeb,0x5b0b,0x632c,0x632c,0x632b,0x5b0b,0x632c,0x632c,0x632c,0x634c,0x6b4c,0x634c,0x632c,0x632c,0x634c,0x632c,0x632c,0x632c,0x632c,0x5b0b,0x5b0b,0x632c,0x5aeb,0x5aeb,0x5b0b,0x632c,0x5b0b,0x632c,0x634c,0x634c,0x634c,0x634c,0x5b0b,0x632c,0x634c,0x5b0c,0x5b0b,0x634c,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x5aeb,0x632c,0x632c,0x5aca,0x632c,0x630b,0x632c,0x5b0b,0x5aeb,0x5b0b,0x632c,0x5aeb,0x5b0b,0x5aeb,0x5b0b,0x632c,0x5b0b,0x5b0b,0x5b0b,0x634c,0x632c,0x630c,0x630b,0x5aeb,0x632c,0x630c,0x5aca,0x5aeb,0x632c,0x632c,0x5aeb,0x5aeb,0x5aeb, +0x6b6c,0x5b0b,0x5b0b,0x632c,0x634c,0x632c,0x634c,0x632b,0x6b6c,0x636c,0x632b,0x632b,0x6b6c,0x5aeb,0x632b,0x632c,0x632c,0x5b2b,0x634c,0x5aeb,0x634c,0x632c,0x5aeb,0x5b0b,0x5aeb,0x5b2b,0x632b,0x632c,0x634c,0x634c,0x5b0b,0x5b2c,0x5b0b,0x52ca,0x5b0b,0x632c,0x5b0b,0x5b2b,0x52eb,0x52eb,0x5b0b,0x52eb,0x5b2b,0x5b2c,0x5b2c,0x5b0b,0x530b,0x5b0b,0x5aeb,0x5b2c,0x5b0b,0x5b2b,0x5b2b,0x632c,0x632c,0x5b0b,0x530b,0x5b2b,0x5b0b,0x52ea,0x5b0b,0x5b0b,0x5b0b,0x52ea,0x52ea,0x5b0b,0x5b0b,0x5aeb,0x52ea,0x52eb,0x5b0b,0x632c,0x5aeb,0x5aeb,0x52ea,0x5b2b,0x634c,0x52aa,0x530b,0x5b2c,0x5b2c,0x634c,0x5aeb,0x5b0b,0x634c,0x52ea,0x5b0b,0x5aeb,0x5b2b,0x5b4c,0x5b4c,0x632b,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x632b,0x5b0b,0x5b4c,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x530b,0x5b2c,0x634c,0x530b,0x5b2b,0x52ea,0x636c,0x634c,0x52ea,0x5b2b,0x636c,0x5b2b,0x530b,0x634c,0x634c,0x632c,0x5b0b,0x52eb,0x5b2b,0x5b2b,0x52ca,0x636c,0x5b2b,0x5b0b,0x5b0b,0x530b,0x530b,0x52ea,0x632c,0x632c,0x5aea,0x632c,0x5b2c,0x52eb,0x52eb,0x52eb,0x634c,0x5b2c,0x5b2c,0x5b0b,0x5b2c,0x5b0b,0x5b2b,0x5b2c,0x5b2b,0x530b,0x5b0b,0x634c,0x5b4c,0x5b2b,0x5b0b,0x5b4c,0x5b2b,0x5aeb,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0c,0x5b0b,0x5b2c,0x5b2c,0x5b0b,0x5b0b,0x5b0b,0x634c,0x634c,0x5b0b,0x52ca,0x5b2c,0x634c,0x5b0b,0x52ca,0x634c,0x634c,0x5b2b,0x52eb,0x632c,0x632c,0x5b0b,0x5b0b,0x5b0b,0x632c,0x5b0b,0x5b0b,0x634c,0x5b2c,0x632c,0x5b2b,0x5b2b,0x634c,0x632b,0x632c,0x634c,0x636c,0x634c,0x6b6d,0x6b8d,0x634c,0x632c,0x634c,0x5b0b,0x5b2c,0x634c,0x5aeb,0x5b0b,0x5aeb,0x5b0b,0x634c,0x634c,0x5b0b,0x5b2c,0x632c,0x5b0b,0x5b2c,0x5b2c,0x632c,0x634c,0x632c,0x5b0b,0x634c,0x632c,0x632c,0x634c,0x5b0b,0x632c,0x632c,0x5b2c,0x5aeb,0x5aeb,0x632c,0x5b0c,0x632c,0x632c,0x5b0b,0x5b0b,0x5b0b,0x5b0c,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x5b0c,0x5b0b,0x632c,0x630c,0x630b,0x630c,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x632c,0x5b0b,0x5b0b,0x632c,0x632c,0x5b0c,0x5aeb,0x6b4c,0x630b,0x5aca,0x632b,0x632c,0x5aeb,0x632c,0x5aeb,0x630c,0x5b2c,0x5b0b,0x5b0b,0x52ea,0x5aeb,0x52ca,0x52ca,0x632c,0x5b0b,0x5aeb,0x634c,0x5aeb,0x5aeb,0x630b,0x5aeb,0x632c,0x5b2c,0x632c,0x632c,0x5aeb,0x52ca,0x632c,0x5b0b,0x5aeb,0x5b0b,0x6b6d,0x634c,0x634d,0x632c,0x5b0b,0x632c,0x6b8d,0x5b0b,0x632c,0x5aeb,0x52cb,0x634c,0x5aeb,0x52aa, +0x5b0b,0x52a9,0x52ca,0x5aeb,0x634c,0x5aea,0x5b0b,0x52ca,0x5b2b,0x634c,0x634c,0x5b0b,0x634c,0x5b0b,0x52ca,0x5b0b,0x630b,0x5aca,0x632c,0x5b2b,0x632b,0x5b0b,0x5aea,0x5aeb,0x5b2b,0x5b2b,0x52ea,0x5b0b,0x5aeb,0x52ea,0x5b0b,0x5b2c,0x5aeb,0x52ca,0x5b0b,0x5b0b,0x5b2b,0x634c,0x5b0b,0x5b0b,0x5b2c,0x5b0b,0x5b0b,0x52ca,0x5b0b,0x5b2b,0x52eb,0x52eb,0x5b0b,0x5b0b,0x5aeb,0x5b4c,0x530b,0x52ea,0x5b2b,0x632c,0x5aeb,0x5b0b,0x5b0b,0x52ea,0x632c,0x5b0b,0x5aeb,0x5b2b,0x5b2b,0x530b,0x52eb,0x632b,0x634c,0x5aeb,0x52ca,0x5b2b,0x52ea,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x4aaa,0x52ca,0x52eb,0x5aeb,0x52ca,0x634c,0x636d,0x5b0b,0x5b2b,0x632c,0x5b0b,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x5b0b,0x52eb,0x5b0b,0x52ea,0x5b0b,0x52ea,0x5b2c,0x634c,0x5b0b,0x636c,0x5b2b,0x52ea,0x5b2b,0x5b4c,0x5b2b,0x5b4c,0x5b0b,0x5b2b,0x636c,0x636c,0x634c,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x5b2b,0x5b2b,0x632c,0x634c,0x5b4c,0x530b,0x5b0b,0x52eb,0x634c,0x634c,0x5b0b,0x5b2c,0x5b0b,0x52ea,0x5b4c,0x530b,0x5b0b,0x634c,0x632c,0x5b2c,0x634c,0x52eb,0x634c,0x5b4c,0x52eb,0x5b2c,0x5b2b,0x5b2c,0x5b0b,0x634c,0x5b0b,0x52ca,0x634c,0x5b4c,0x5b2b,0x634c,0x5b2b,0x5b4c,0x5b2b,0x5b2b,0x5b2c,0x5b2c,0x52ea,0x5b2c,0x52eb,0x5b4c,0x6b8d,0x636d,0x530b,0x5b0b,0x5b2c,0x634c,0x5b2c,0x5b2c,0x5b2b,0x5b4c,0x530b,0x636c,0x5b4c,0x634c,0x632c,0x6b4c,0x632b,0x636c,0x634c,0x636d,0x634c,0x5b2c,0x636d,0x634c,0x5b2c,0x634c,0x636c,0x632c,0x5b2c,0x636d,0x634c,0x632c,0x636d,0x634c,0x5b2b,0x632c,0x636c,0x634c,0x632c,0x634c,0x6b8d,0x634c,0x636c,0x636c,0x634c,0x632c,0x632c,0x632c,0x634c,0x5b0b,0x5b0b,0x632c,0x632c,0x5b2c,0x5aeb,0x5b0b,0x634c,0x5b0b,0x5b2c,0x5b0b,0x5b0b,0x5b2c,0x5b0b,0x5b0b,0x632b,0x632c,0x5b0b,0x5b0b,0x634c,0x5aeb,0x52eb,0x5aeb,0x5b0b,0x5b0b,0x5aeb,0x5b2c,0x5b0c,0x5aeb,0x634c,0x5b0b,0x52ca,0x52ca,0x630c,0x5b0b,0x5aeb,0x52ea,0x52ca,0x5b0b,0x632c,0x52aa,0x52ca,0x52ca,0x52ea,0x5b0b,0x5aeb,0x634c,0x5b0b,0x5aeb,0x632c,0x630b,0x5aca,0x5aeb,0x5aeb,0x5aeb,0x632c,0x5b2c,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5aeb,0x5aeb,0x630b,0x632c,0x5b0b,0x5aca,0x5b0b,0x632c,0x632c,0x5b0b,0x5b2c,0x5aeb,0x52ca,0x52ca,0x632c,0x630c,0x630b,0x632c,0x5acb,0x5b0b,0x630c,0x52aa,0x5b0b,0x634c,0x634c,0x5b2c,0x5b0b,0x5aeb,0x5aeb,0x5b0b,0x5aeb,0x632c,0x73ae,0x6b6d,0x632c,0x634c,0x634c,0x52ca,0x6bae,0x6b8d,0x6b8e,0x5b0c,0x5aeb,0x52eb,0x5b2c,0x632c, +0x636c,0x636c,0x6bad,0x634c,0x634c,0x636c,0x638d,0x6b8d,0x6bcd,0x73ce,0x634c,0x6b8d,0x634c,0x636c,0x6b8d,0x636d,0x634c,0x634c,0x634c,0x5b2b,0x634c,0x636c,0x5b2b,0x5b0b,0x638d,0x636c,0x634c,0x632c,0x5b2b,0x5b0b,0x634c,0x5b2c,0x52ca,0x530b,0x5b2b,0x634c,0x6b6d,0x636c,0x5b2b,0x5b2b,0x632c,0x632c,0x5b2b,0x52ea,0x5b0b,0x5b2b,0x530b,0x5b2b,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x5b2b,0x5b2b,0x530b,0x5b0b,0x634c,0x634c,0x5b2b,0x5b0b,0x5b2b,0x5b0b,0x5b0b,0x52ea,0x5b2b,0x52eb,0x530b,0x634c,0x5b2c,0x52eb,0x52ea,0x52ca,0x5b2c,0x5b2c,0x5b0b,0x5b2c,0x5b2b,0x5b4c,0x5b0b,0x634c,0x52ea,0x52eb,0x5b2c,0x636d,0x634c,0x52eb,0x634c,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x52eb,0x4a89,0x5b0b,0x52eb,0x634c,0x52eb,0x52ca,0x5b2c,0x5b0b,0x5b4c,0x5b0b,0x52ca,0x52ea,0x5b0b,0x52ca,0x5b2b,0x5b2b,0x632c,0x5b2b,0x5b2b,0x52eb,0x5b0b,0x52ca,0x530b,0x52ea,0x5b4c,0x5b2b,0x5b2b,0x5b4c,0x530b,0x52ca,0x52ca,0x52ca,0x52ca,0x5b2c,0x634c,0x5b2c,0x4aaa,0x5b0b,0x5b0b,0x5b2b,0x5b2b,0x52ea,0x52eb,0x636c,0x636c,0x4a89,0x5b4c,0x636d,0x4a89,0x5b4c,0x5b2c,0x52ea,0x5b0b,0x634c,0x634c,0x52ca,0x634c,0x636d,0x52ca,0x52ca,0x52eb,0x5aeb,0x5b4c,0x636c,0x5b0b,0x530b,0x5b2b,0x636c,0x5b0b,0x5b2b,0x5b2c,0x5b4c,0x52eb,0x5b2c,0x634c,0x530b,0x5b2c,0x5b2c,0x636d,0x638d,0x636c,0x636c,0x6b8d,0x634c,0x638d,0x634c,0x638d,0x5b4c,0x5b4c,0x636c,0x5b0b,0x634c,0x6b8d,0x634c,0x636d,0x636d,0x5b4c,0x638d,0x636c,0x6b8d,0x5b2c,0x634c,0x638d,0x6b8d,0x634c,0x634c,0x636c,0x6b8d,0x636c,0x5b4c,0x636d,0x5b4c,0x634c,0x6b8d,0x634c,0x5b2b,0x638d,0x636c,0x636c,0x6b6d,0x636c,0x6b8d,0x6bad,0x6b8d,0x634c,0x636d,0x634c,0x634c,0x636c,0x632c,0x636d,0x636d,0x636c,0x638d,0x634c,0x6b8d,0x636c,0x636d,0x6b8d,0x634c,0x5b4c,0x636d,0x636c,0x636d,0x636c,0x634c,0x634c,0x634c,0x6b6d,0x6b8d,0x634c,0x6b8d,0x6b6c,0x6bad,0x6b6d,0x73ae,0x6b8d,0x6bad,0x636c,0x634c,0x634c,0x634c,0x634c,0x636c,0x636d,0x6b6d,0x5b0b,0x6b6d,0x73ce,0x632c,0x632c,0x634c,0x632c,0x634c,0x634c,0x738d,0x634c,0x632c,0x634c,0x5b0b,0x634c,0x632c,0x5b0b,0x5b2b,0x5b0b,0x5aeb,0x6b6d,0x5b0b,0x52ca,0x5aeb,0x6b6d,0x52cb,0x630b,0x5aeb,0x5b0b,0x5aeb,0x632c,0x528a,0x5b0b,0x5b0b,0x5b2c,0x634c,0x636c,0x5b0b,0x5b0c,0x634c,0x632c,0x5aeb,0x52aa,0x632c,0x634c,0x5aeb,0x5b0b,0x5aeb,0x5b0b,0x5aeb,0x52aa,0x5aeb,0x634d,0x632c,0x5aeb,0x52ca, +0x73ee,0x6bce,0x6bad,0x73ce,0x6bae,0x6bae,0x73ef,0x6bce,0x6bad,0x73ce,0x73ee,0x6bce,0x6bad,0x73ce,0x6bad,0x6bad,0x636d,0x73ee,0x73ae,0x6b6d,0x636c,0x636d,0x634c,0x634c,0x634c,0x636c,0x636c,0x636c,0x634c,0x6b8d,0x6bad,0x530b,0x5b2b,0x636d,0x634c,0x634c,0x52ea,0x634c,0x5b2b,0x5b2b,0x5b0b,0x5b2b,0x634c,0x5aeb,0x52aa,0x5b0b,0x4a89,0x52ca,0x52ca,0x52ca,0x4aa9,0x5b0b,0x5b0b,0x52eb,0x52aa,0x52ca,0x52aa,0x52ca,0x4a89,0x4269,0x4269,0x52ea,0x52aa,0x52aa,0x4a69,0x52ca,0x52ea,0x52ca,0x4248,0x4aaa,0x4aaa,0x4248,0x4a89,0x4a89,0x4a89,0x4a69,0x52ca,0x4a89,0x52aa,0x4a89,0x4a89,0x4a89,0x4269,0x4a89,0x4a89,0x4a69,0x4a89,0x4269,0x4248,0x3a07,0x3a07,0x4248,0x4248,0x4228,0x3a07,0x4249,0x3a07,0x31c6,0x31e7,0x31a6,0x31c7,0x4248,0x4248,0x3a28,0x3a07,0x3a28,0x4a89,0x39e7,0x3a28,0x4228,0x52aa,0x4a69,0x4248,0x39e7,0x4248,0x3a07,0x4248,0x4a69,0x4a89,0x4228,0x4a69,0x4248,0x3a27,0x52ca,0x4268,0x39e7,0x39e7,0x3a07,0x4228,0x4248,0x3a07,0x4248,0x4248,0x4a89,0x4a69,0x4269,0x3a07,0x4248,0x4a89,0x4a69,0x4228,0x4a89,0x4248,0x39e7,0x3a28,0x4269,0x3a07,0x4249,0x4268,0x4268,0x52aa,0x52aa,0x4a89,0x4228,0x4268,0x4a89,0x4248,0x4248,0x4228,0x4248,0x4228,0x4269,0x52ca,0x4269,0x4248,0x4a69,0x4248,0x4a69,0x4228,0x4228,0x4aaa,0x4248,0x4269,0x4269,0x4aaa,0x4a89,0x4269,0x4268,0x52ca,0x4a89,0x4aaa,0x4a69,0x52eb,0x52eb,0x5b0b,0x4a89,0x52aa,0x52eb,0x73ce,0x52ca,0x528a,0x52eb,0x636d,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x52ea,0x5b2b,0x634c,0x5b0c,0x5b0c,0x6bad,0x5aea,0x634c,0x5b2b,0x5b0b,0x6bad,0x636c,0x634c,0x5b2c,0x634c,0x5b2b,0x6b8d,0x636c,0x5b0b,0x6b8d,0x73ce,0x634c,0x6bae,0x6b8d,0x5b0b,0x6b6d,0x634c,0x73ef,0x73ee,0x73ee,0x6b8d,0x73ce,0x636d,0x740f,0x7c0f,0x73ae,0x8430,0x8c91,0x8cd2,0x73ce,0x8471,0x8450,0x7c0f,0x7c30,0x740f,0x73ef,0x7c0f,0x7c0f,0x7c30,0x7c0f,0x8450,0x94b2,0x8470,0x7c2f,0x8c91,0x94b2,0x8c71,0x8c91,0x7c2f,0x8c71,0x8c71,0x8450,0x8c70,0x9cf2,0x8450,0x8cb1,0x94f3,0x9cf3,0x94d2,0x9d13,0x94d2,0x94b1,0x9cd2,0x8c91,0x8c91,0x8c70,0x8450,0x8c91,0x94f2,0x9cd2,0x94b2,0x94d2,0x94b2,0x8c71,0x94d2,0xa575,0x9d34,0x94b2,0x94b2,0xa534,0x9d13,0xa554,0xad74,0x8cb1,0x94d2,0x94d2,0x94d2,0x9d13,0x94b2,0x9d13,0x9d13,0x94d2,0x8c91,0x8c91,0x94d2,0x94b2,0x8471,0x8cb2,0x8c71,0x8c71,0x94b2,0x8c71,0x8430,0x8450,0x8c71,0x8451,0x7c30,0x7c2f,0x8430,0x8c91,0x7c0f,0x8430, +0x31c6,0x2985,0x2985,0x39e7,0x31a6,0x39e7,0x4228,0x3a08,0x3186,0x2965,0x31a6,0x31c6,0x39e7,0x3a07,0x31a6,0x2986,0x3186,0x39e7,0x39c7,0x2965,0x2965,0x2985,0x2965,0x31c6,0x2965,0x2945,0x2985,0x2965,0x31a6,0x2965,0x2144,0x2124,0x2965,0x2986,0x2945,0x2985,0x1903,0x2124,0x2965,0x18c3,0x2965,0x2104,0x1903,0x2144,0x2124,0x2945,0x10a2,0x18e3,0x2103,0x2104,0x2124,0x2124,0x2944,0x2103,0x10a2,0x2124,0x2104,0x2103,0x18e3,0x18c3,0x18c3,0x2145,0x10c3,0x18c3,0x2103,0x18e3,0x2124,0x18e3,0x2104,0x18e3,0x2124,0x2124,0x2103,0x18e3,0x18e3,0x18c3,0x2124,0x18e3,0x2124,0x2124,0x2104,0x1082,0x1082,0x18c3,0x1081,0x18e3,0x1082,0x1082,0x1082,0x10a2,0x18e3,0x18e3,0x18c3,0x18c3,0x10a2,0x18c3,0x18e3,0x18e3,0x18c3,0x10a2,0x10a2,0x1903,0x18e3,0x18c3,0x1082,0x18e3,0x18e3,0x10a2,0x10a2,0x2104,0x2124,0x2103,0x2104,0x2103,0x2104,0x18c3,0x2124,0x2944,0x1903,0x2124,0x2124,0x2124,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x2124,0x2104,0x18c3,0x18c3,0x18c3,0x0820,0x2144,0x2124,0x18e3,0x18e3,0x2104,0x18e3,0x2965,0x18e3,0x2104,0x18e3,0x18c3,0x2124,0x2124,0x2945,0x2103,0x1903,0x2104,0x18e3,0x2124,0x2124,0x2124,0x1903,0x2965,0x2124,0x1903,0x2144,0x2104,0x2945,0x31c6,0x2965,0x31a6,0x1903,0x2124,0x2965,0x31a6,0x2945,0x2985,0x2965,0x18c2,0x2986,0x2986,0x2124,0x1903,0x18e3,0x31a6,0x2145,0x18e3,0x1903,0x1904,0x2965,0x31a6,0x2944,0x2124,0x18e3,0x4a69,0x3186,0x20e4,0x2124,0x31a6,0x39e7,0x3186,0x18e3,0x39c7,0x31a6,0x3186,0x18e3,0x31c6,0x31a6,0x31a6,0x4a69,0x39e7,0x2124,0x2965,0x39e7,0x39e7,0x39e7,0x39c7,0x3186,0x31a6,0x3a07,0x2986,0x31a6,0x39c7,0x39c7,0x39c6,0x31a6,0x39c6,0x2965,0x3186,0x39e7,0x2145,0x4a89,0x4228,0x4a69,0x3a07,0x4208,0x4a69,0x31c6,0x52cb,0x4a48,0x4228,0x4a69,0x5acb,0x4249,0x52aa,0x52aa,0x52aa,0x4a69,0x4248,0x4228,0x52aa,0x4a69,0x4a8a,0x52ca,0x5aeb,0x52aa,0x4a89,0x39c7,0x630b,0x5289,0x4a48,0x5289,0x52aa,0x5acb,0x630c,0x5acb,0x634c,0x634c,0x5aeb,0x5aea,0x73ae,0x6b6d,0x6b4c,0x73ae,0x7bcf,0x6b8d,0x73ae,0x738d,0x5b0b,0x632c,0x634c,0x73ce,0x73ae,0x7c0f,0x7bce,0x8410,0x8430,0x7bef,0x7c0f,0x94b2,0x8430,0x8c71,0x8430,0x9491,0x8c71,0x9cf3,0x8c71,0x840f,0x7bef,0x7c0f,0x7bef,0x94b1,0x8c71,0x8450,0x7bef,0x7bcf,0x840f,0x8450,0x8450,0x8c71,0x8430,0x8c91,0x7bef,0x7c0f,0x8430,0x738d,0x73ce,0x73ae,0x7bef,0x8c91,0x7bef,0x7bef,0x7bce,0x7bce,0x8c71,0x8c71, +0x1062,0x1082,0x18a3,0x1062,0x0840,0x0820,0x0000,0x0021,0x10c3,0x10c3,0x0861,0x10a2,0x0821,0x0820,0x18c2,0x10a2,0x1082,0x0040,0x0861,0x10a2,0x18c2,0x10a2,0x10a2,0x0861,0x10a2,0x10a2,0x1082,0x10a2,0x0861,0x1082,0x18c3,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x18e3,0x18c3,0x1082,0x18c3,0x10c3,0x10c3,0x10a2,0x10a2,0x10a2,0x10a2,0x18c2,0x10a2,0x10c3,0x10a2,0x1082,0x18c3,0x10a2,0x10a2,0x10a2,0x18c3,0x18c3,0x10a2,0x10a2,0x10a2,0x10a2,0x10a2,0x18c3,0x18e3,0x10a2,0x10a2,0x1082,0x18c3,0x10c2,0x10a2,0x1081,0x0881,0x10c2,0x10a2,0x10a2,0x18c3,0x1081,0x1081,0x1081,0x10a2,0x10c2,0x10a2,0x18c3,0x10a2,0x10c2,0x10a2,0x10c2,0x1082,0x18c3,0x10c3,0x10a2,0x10c2,0x10a2,0x10a2,0x1082,0x10c3,0x10a2,0x10a2,0x10a2,0x10a2,0x1082,0x1082,0x1082,0x10a2,0x10c3,0x1082,0x1082,0x10a2,0x18c3,0x1082,0x1082,0x1082,0x1082,0x1082,0x0861,0x18c3,0x0861,0x0841,0x10a2,0x0881,0x1061,0x1082,0x0861,0x0882,0x10a2,0x10a2,0x1082,0x1082,0x1081,0x1082,0x10a2,0x10a2,0x10c2,0x18e3,0x10a2,0x1082,0x1082,0x10c2,0x1082,0x10a2,0x0841,0x10a2,0x0861,0x1081,0x10a2,0x0861,0x0861,0x1081,0x10a2,0x1082,0x0861,0x10a2,0x10a2,0x1082,0x0861,0x0841,0x0820,0x1081,0x1081,0x0841,0x1082,0x0020,0x0000,0x0840,0x0841,0x1082,0x10a2,0x0862,0x0000,0x0041,0x0840,0x0020,0x10a2,0x0000,0x0000,0x0841,0x1082,0x1082,0x0000,0x0020,0x0861,0x1082,0x1082,0x0000,0x0000,0x0020,0x0020,0x0861,0x0000,0x0841,0x0841,0x1082,0x0020,0x0000,0x0020,0x10a2,0x0000,0x0020,0x0841,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0021,0x0000,0x0020,0x0840,0x0840,0x0841,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0020,0x0000,0x0000,0x0861,0x0020,0x0000,0x18c2,0x0000, +0x3a07,0x3a07,0x3a07,0x3a07,0x4228,0x3a07,0x39e7,0x39e7,0x39e7,0x3a08,0x3a08,0x3a07,0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x3a07,0x3a28,0x31c6,0x39e7,0x3a07,0x3a07,0x3a08,0x3a07,0x3a07,0x39e7,0x3a07,0x4228,0x4248,0x3a07,0x3a07,0x3a28,0x4228,0x4228,0x3a07,0x4228,0x4228,0x3a07,0x4228,0x39e7,0x3a07,0x3a07,0x4228,0x3a28,0x39e7,0x3a07,0x3a07,0x3a28,0x4228,0x39e7,0x4228,0x4248,0x3a28,0x4228,0x4228,0x3a07,0x4207,0x4248,0x4228,0x4228,0x3a27,0x3a07,0x4228,0x4228,0x3a07,0x3a28,0x3a07,0x3a07,0x3a07,0x4228,0x3a07,0x4248,0x4228,0x3a07,0x4228,0x3a28,0x3a07,0x4228,0x4228,0x39e7,0x39e7,0x4248,0x3a07,0x4228,0x3a28,0x4268,0x4228,0x3a07,0x39e7,0x3a08,0x3a07,0x39e7,0x39e7,0x3a08,0x3a28,0x3a08,0x4228,0x39c6,0x3a07,0x31e7,0x39e7,0x3a07,0x3a28,0x3a07,0x4228,0x3a07,0x4228,0x3a08,0x3a08,0x3a07,0x3a07,0x4207,0x4228,0x3a07,0x3a07,0x3a07,0x3a07,0x4248,0x4228,0x3a28,0x3a28,0x4248,0x4268,0x4248,0x4248,0x4269,0x4228,0x4228,0x4248,0x4248,0x3a28,0x4228,0x4228,0x4248,0x4228,0x3a28,0x3a28,0x4228,0x4a69,0x4228,0x4249,0x3a28,0x4228,0x4a89,0x3a28,0x3a28,0x3a28,0x4228,0x4228,0x3a07,0x3a28,0x4208,0x3a08,0x4249,0x4228,0x4228,0x4228,0x4269,0x3a07,0x4228,0x4248,0x4228,0x4228,0x4248,0x4249,0x4208,0x4248,0x4248,0x4248,0x4269,0x4228,0x4228,0x4228,0x4228,0x3a28,0x4248,0x4228,0x4248,0x4228,0x4228,0x3a07,0x4248,0x4228,0x4269,0x4228,0x4248,0x4248,0x4248,0x4249,0x4248,0x4228,0x4248,0x4248,0x4208,0x4228,0x4228,0x4249,0x4248,0x4248,0x4228,0x3a08,0x4228,0x4248,0x4228,0x4208,0x4228,0x4248,0x4228,0x4228,0x4228,0x4228,0x4248,0x4228,0x4228,0x4228,0x4208,0x4228,0x4228,0x3a07,0x3a08,0x3a08,0x4208,0x3a08,0x4228,0x3a08,0x3a08,0x3a08,0x4228,0x4228,0x4208,0x3a08,0x4208,0x3a07,0x3a08,0x4228,0x3a08,0x4208,0x4228,0x4248,0x3a08,0x4228,0x4a69,0x4248,0x4208,0x3a08,0x4228,0x3a07,0x4208,0x39e7,0x3a08,0x4228,0x4228,0x4228,0x3a08,0x4228,0x4208,0x39e7,0x3a07,0x39e7,0x3a08,0x3a07,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x3a08,0x39e7,0x39e7,0x3a08,0x39e7,0x3a07,0x39e7,0x3a07,0x4208,0x4208,0x4228,0x4228,0x4208,0x4208,0x39c7,0x39c7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39c7,0x39c6,0x39e7,0x39c7,0x39c7,0x31a6,0x31a6,0x39c7,0x3186,0x31a6,0x31a7,0x3186,0x31a6,0x31a6,0x31a6,0x3186,0x2965,0x2965,0x2965,0x2945,0x2124,0x2945,0x2945,0x2965,0x2965,0x2124,0x2124,0x2945, +0x3a28,0x4228,0x39e7,0x31e7,0x4228,0x3a07,0x3a08,0x39e7,0x3a07,0x3a07,0x3a07,0x39e7,0x3a07,0x4208,0x3a07,0x3a07,0x4208,0x4228,0x4208,0x3a28,0x3a07,0x4228,0x4228,0x3a07,0x4208,0x4208,0x3a07,0x3a08,0x4228,0x4248,0x3a07,0x4248,0x3a07,0x3a07,0x3a07,0x3a07,0x4228,0x3a28,0x3a07,0x3a28,0x4228,0x4248,0x4248,0x4228,0x3a07,0x4248,0x3a28,0x4228,0x4248,0x3a07,0x3a28,0x3a28,0x4228,0x4228,0x4228,0x3a28,0x3a27,0x4248,0x4248,0x4248,0x3a07,0x3a28,0x4228,0x3a28,0x4228,0x4248,0x4248,0x4228,0x4248,0x4248,0x4228,0x4248,0x3a07,0x4228,0x4248,0x4228,0x4248,0x4227,0x39e7,0x3a28,0x4248,0x4228,0x4248,0x4228,0x4248,0x4a69,0x4228,0x4248,0x3a07,0x3a28,0x4228,0x4248,0x4248,0x4228,0x4249,0x4248,0x3a28,0x3a07,0x4228,0x4248,0x4248,0x3a07,0x3a28,0x4248,0x4248,0x4228,0x4228,0x4228,0x3a28,0x4a89,0x4228,0x4268,0x4248,0x4228,0x4248,0x4248,0x4269,0x4a89,0x4248,0x4248,0x4228,0x4248,0x4aaa,0x4a69,0x4248,0x4a89,0x4248,0x4a89,0x4a89,0x4a89,0x4269,0x4269,0x4a89,0x4248,0x4a69,0x4269,0x4248,0x4a89,0x4a89,0x4268,0x4a89,0x4268,0x4268,0x4a89,0x4228,0x4248,0x4a69,0x4a49,0x4a69,0x4248,0x4a89,0x4248,0x4a69,0x4269,0x4a69,0x4a69,0x4269,0x4248,0x4aaa,0x4a89,0x4248,0x52aa,0x52aa,0x4a89,0x4a89,0x4248,0x4a69,0x4a89,0x4a69,0x4a89,0x4a69,0x4aaa,0x52ca,0x4aaa,0x4aaa,0x4a69,0x4a89,0x52aa,0x4aaa,0x4a89,0x4a69,0x4a89,0x4a89,0x4a69,0x4a89,0x4aaa,0x52aa,0x4a89,0x52ca,0x4a89,0x4a89,0x4a89,0x4a89,0x4aaa,0x4a89,0x4a69,0x4a89,0x4a89,0x52aa,0x4a89,0x4a89,0x4a8a,0x4a69,0x4aa9,0x4a89,0x4a69,0x4a89,0x5aeb,0x4a89,0x52aa,0x4a89,0x4aaa,0x4248,0x4a89,0x52a9,0x52aa,0x5b0b,0x52aa,0x4a69,0x4aaa,0x4a89,0x4a89,0x4a89,0x4aaa,0x52ca,0x4a89,0x4a8a,0x4aaa,0x4a69,0x4a89,0x4a89,0x4a69,0x4a69,0x4a69,0x4a89,0x4aaa,0x4a69,0x4249,0x4249,0x4a89,0x4a89,0x52aa,0x52aa,0x4a8a,0x4a69,0x4a69,0x4a89,0x4a89,0x4a69,0x4a89,0x4aaa,0x4a69,0x4249,0x4a69,0x4249,0x4249,0x4248,0x4a69,0x4269,0x4248,0x4a49,0x4a48,0x4a89,0x4a69,0x4a69,0x4a48,0x4228,0x4a69,0x4a89,0x4a69,0x4a49,0x4a69,0x4a69,0x4a8a,0x4a49,0x4a49,0x4a49,0x4228,0x528a,0x4a69,0x4a69,0x4a69,0x4a69,0x4a49,0x4228,0x4a69,0x4a69,0x4a49,0x4a69,0x4a69,0x4a69,0x4a69,0x4248,0x4248,0x4a69,0x4249,0x4a69,0x4a69,0x4a89,0x5aca,0x4a89,0x4a89,0x4a8a,0x4a69,0x4a89,0x4a69,0x4a89,0x4a69,0x4249,0x4a69,0x4248,0x4228,0x5289,0x4a69,0x4a69,0x4249,0x4a69,0x4249,0x4a8a,0x4a89, +0x4a49,0x4228,0x4228,0x4a69,0x4228,0x3a07,0x4248,0x4228,0x4248,0x4208,0x4248,0x4248,0x3a07,0x4248,0x4a49,0x4208,0x4207,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4248,0x52aa,0x4228,0x4228,0x4a48,0x4a48,0x4248,0x4248,0x4248,0x4207,0x4a48,0x3a07,0x4248,0x4228,0x4208,0x4a89,0x4a69,0x4228,0x4228,0x4228,0x4249,0x4a69,0x4a69,0x4269,0x4248,0x4228,0x4248,0x4248,0x4248,0x4269,0x4248,0x4228,0x4269,0x4a69,0x4a69,0x4248,0x4249,0x4248,0x4a69,0x4a89,0x4269,0x4228,0x4a69,0x4269,0x4269,0x4a69,0x4228,0x4a89,0x4269,0x4268,0x4a89,0x4a89,0x4a89,0x4aaa,0x4a8a,0x4228,0x4228,0x4228,0x4a69,0x4a89,0x4208,0x4248,0x4269,0x4248,0x4a89,0x4269,0x4a89,0x4268,0x4a89,0x4269,0x4269,0x4269,0x4a89,0x4a69,0x4a69,0x4a69,0x4a89,0x4a69,0x4228,0x4248,0x4a69,0x4a89,0x4248,0x4248,0x4a69,0x4a69,0x4a69,0x4a69,0x4268,0x4a69,0x4248,0x4a89,0x4a89,0x4a89,0x4269,0x4a69,0x4269,0x4aa9,0x4aaa,0x4268,0x4aaa,0x4a89,0x52ca,0x4a69,0x4248,0x4a89,0x4a69,0x4a89,0x4a89,0x4aa9,0x4269,0x4269,0x4aa9,0x4aaa,0x52ca,0x4aa9,0x4a89,0x4aca,0x4aaa,0x4248,0x4a69,0x4269,0x4a89,0x4a89,0x4a89,0x4a89,0x52ca,0x4269,0x4a89,0x4a89,0x4a69,0x52aa,0x4248,0x4a89,0x4a89,0x4a89,0x4aaa,0x4aaa,0x4aaa,0x4a89,0x4aaa,0x52aa,0x4a89,0x4a89,0x4a89,0x4aa9,0x4a89,0x4a69,0x4a89,0x4aaa,0x4a89,0x52ca,0x4a89,0x52aa,0x52ea,0x4269,0x4a89,0x4aa9,0x52aa,0x52aa,0x4aaa,0x4aaa,0x52eb,0x52ca,0x52ea,0x52ea,0x52ca,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52aa,0x52ca,0x52eb,0x5b2c,0x52ca,0x52ca,0x52ca,0x52aa,0x4a89,0x52aa,0x4a8a,0x52ca,0x52ca,0x52ca,0x4aa9,0x4a89,0x52ca,0x52ca,0x52aa,0x52eb,0x5b0b,0x52ca,0x528a,0x5aeb,0x5b0b,0x52ea,0x5aeb,0x52aa,0x4a89,0x4a8a,0x4a89,0x4a89,0x52aa,0x5b0b,0x5aeb,0x5aca,0x4aaa,0x52aa,0x52eb,0x52ca,0x4a69,0x528a,0x4a69,0x52aa,0x52ca,0x4a69,0x4a69,0x4a89,0x4a89,0x4a89,0x52aa,0x52eb,0x528a,0x52aa,0x52aa,0x52ca,0x4a89,0x4a89,0x4a69,0x4a69,0x4a69,0x4a69,0x4a89,0x52aa,0x4a69,0x4a69,0x4a89,0x4a69,0x4a69,0x4a69,0x4a69,0x4a89,0x4a69,0x4a69,0x4a69,0x4a69,0x4a49,0x4248,0x4a69,0x4a48,0x4a48,0x4a49,0x4a49,0x4228,0x4228,0x4228,0x4249,0x4a69,0x4228,0x4248,0x4249,0x4a69,0x4a69,0x4a69,0x4249,0x4a49,0x4a69,0x4a89,0x4248,0x4a69,0x4a69,0x4a49,0x4a69,0x4a69,0x4249,0x4228,0x4a49,0x4a49,0x4a69,0x4a48,0x52aa,0x4a69,0x4a8a,0x4a89,0x4a69,0x4a89,0x4a69,0x4248,0x4a69,0x528a,0x4a69,0x4a69,0x4a69,0x4a69, +0x3185,0x31c6,0x31a6,0x39c6,0x39c6,0x31a6,0x2965,0x2986,0x31a6,0x2985,0x31a6,0x39e7,0x31c6,0x31a6,0x31a6,0x31a6,0x3185,0x31a6,0x31a6,0x2965,0x2965,0x2965,0x3185,0x2965,0x3186,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x2985,0x39c6,0x3186,0x31c6,0x31a6,0x3186,0x3185,0x31a6,0x2965,0x3186,0x3186,0x31a6,0x39e7,0x31a6,0x31a6,0x39e7,0x31a6,0x39c6,0x39c7,0x2985,0x31c6,0x31c6,0x39c6,0x31c6,0x39c6,0x39c7,0x39c6,0x31a6,0x39c6,0x31c6,0x39e7,0x31c6,0x31a6,0x31a6,0x39c6,0x31c6,0x31a6,0x39c7,0x31a6,0x3a07,0x31c6,0x31a6,0x31c6,0x31c6,0x31c6,0x31c6,0x39e7,0x31a6,0x3185,0x3186,0x39e7,0x39c7,0x3186,0x2965,0x31c6,0x31c6,0x31a6,0x2985,0x39e7,0x39c6,0x39c6,0x3186,0x2985,0x31a6,0x31c6,0x39c7,0x31c6,0x31c6,0x39e7,0x3185,0x3186,0x31a6,0x31a6,0x31c6,0x31c6,0x31a6,0x31c6,0x31c6,0x31c6,0x31a6,0x2985,0x31e7,0x31c6,0x31c6,0x31c6,0x31a6,0x31a6,0x31a6,0x31a5,0x31c6,0x31c6,0x31a6,0x31c6,0x39e7,0x39e7,0x31c6,0x31a6,0x31a6,0x31a6,0x3a07,0x31a6,0x31a6,0x39e7,0x39e7,0x3a07,0x3a07,0x31a5,0x31a6,0x39c7,0x39c7,0x31a6,0x31a6,0x31a6,0x31c7,0x31c6,0x31c6,0x31c6,0x31a6,0x3a07,0x2985,0x31c6,0x31c7,0x31a6,0x3a07,0x39e7,0x31c6,0x31c6,0x31a6,0x31c6,0x39e7,0x31a6,0x31a6,0x3186,0x31c6,0x31c7,0x31e6,0x31c6,0x31c6,0x31a6,0x39c6,0x31a6,0x2965,0x31c6,0x39e7,0x39e7,0x39e7,0x3a07,0x31c6,0x39e7,0x31a6,0x31c6,0x31c6,0x31a6,0x39e7,0x31c6,0x31c6,0x39e7,0x31c6,0x31a6,0x4208,0x39e7,0x31c6,0x31c6,0x39e7,0x31c6,0x31c6,0x31c6,0x39e7,0x4248,0x31e7,0x39e7,0x4228,0x39e7,0x31a6,0x39c7,0x31c6,0x31a6,0x31c6,0x31a6,0x31c6,0x31a6,0x31c6,0x39e7,0x39e7,0x31a6,0x31a6,0x31c6,0x39e7,0x39c7,0x4248,0x4a69,0x31c6,0x31a6,0x31a6,0x31c7,0x31a6,0x31a6,0x39e6,0x3a27,0x3a07,0x39c7,0x31c6,0x31c6,0x39e7,0x39e7,0x31a6,0x39c7,0x31a6,0x39e7,0x31a6,0x31c6,0x3186,0x31a6,0x31c6,0x31c6,0x3a07,0x3a07,0x39e7,0x3a07,0x39e7,0x3a07,0x31c6,0x39e7,0x31c6,0x31c6,0x39c7,0x31c6,0x39e7,0x39e7,0x39e7,0x39e7,0x39c6,0x31c6,0x31a6,0x31a6,0x39e7,0x31a6,0x31a6,0x31a6,0x39c7,0x39e7,0x31c6,0x3a07,0x4228,0x39c6,0x31a6,0x31a6,0x3a07,0x3a07,0x39c7,0x31c6,0x39e7,0x39e7,0x39c6,0x31a6,0x31c6,0x31c6,0x31c6,0x31c6,0x39c7,0x31a6,0x39c7,0x39e7,0x4208,0x4228,0x39e7,0x39e7,0x39c6,0x39c7,0x39e7,0x39e7,0x39e7,0x39c7,0x39e7,0x39e7,0x4228,0x4208,0x4208,0x39e7,0x39e7,0x39e7,0x31c6,0x4228,0x4208,0x4a49,0x528a,0x3a08,0x4a49,0x4a69, +0x52ca,0x52ca,0x52ea,0x52ca,0x5b0b,0x5aea,0x52ca,0x5aea,0x5b0b,0x52ca,0x52aa,0x52ca,0x52ca,0x52ca,0x52ca,0x52aa,0x5aca,0x5b0b,0x5aeb,0x52ca,0x52ca,0x52ca,0x4a69,0x4aa9,0x5aea,0x52aa,0x4a89,0x52ca,0x5aeb,0x52ea,0x52ea,0x5b0b,0x5aeb,0x52aa,0x4aaa,0x52ca,0x5aeb,0x52ea,0x52ea,0x52eb,0x5b0b,0x52eb,0x52aa,0x52ea,0x52ea,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x52aa,0x5aea,0x52ca,0x52ca,0x5289,0x5aca,0x52aa,0x52ca,0x52ea,0x52ca,0x52ca,0x4aa9,0x52ca,0x5b0b,0x52ca,0x52ca,0x52aa,0x4a89,0x4a69,0x52ca,0x4a89,0x5aeb,0x4aa9,0x4aa9,0x52ca,0x4a89,0x52ca,0x52ca,0x52aa,0x52ca,0x52ea,0x4aa9,0x52ca,0x528a,0x4a89,0x52ea,0x52ca,0x52ea,0x5b0b,0x52a9,0x52aa,0x52ca,0x52ca,0x4a89,0x4aa9,0x4a69,0x4a89,0x52aa,0x4a89,0x4a89,0x4a89,0x5aeb,0x52aa,0x52ca,0x52ea,0x52ea,0x52ca,0x52ea,0x52ea,0x52ca,0x52ca,0x5b0b,0x52ea,0x4a89,0x52ca,0x5b2b,0x52aa,0x52aa,0x52ea,0x52ca,0x5b0b,0x5aeb,0x52ca,0x52ca,0x4a89,0x52ca,0x52ca,0x5b0b,0x5b0b,0x52ca,0x5b0b,0x52ca,0x52ea,0x52ea,0x52eb,0x52ea,0x52ca,0x52ca,0x52ca,0x4aa9,0x5b0b,0x52eb,0x52ea,0x5aeb,0x52ea,0x52eb,0x52eb,0x5b0b,0x52ca,0x4a89,0x4aaa,0x52eb,0x52aa,0x52ca,0x52ca,0x52ca,0x52ca,0x52ea,0x5b0b,0x5b0b,0x5b0b,0x52aa,0x4aaa,0x530b,0x52ca,0x52ca,0x52ca,0x4aa9,0x52a9,0x52ca,0x52ca,0x52ea,0x5aeb,0x52ca,0x4aa9,0x52ca,0x52eb,0x4aaa,0x52ca,0x4a89,0x52ca,0x52ca,0x4a89,0x52eb,0x5aeb,0x5aeb,0x52ea,0x52ca,0x5b0b,0x5aeb,0x5b0b,0x632c,0x52ca,0x5b2b,0x5b2c,0x52eb,0x52eb,0x52ca,0x52aa,0x52eb,0x52ea,0x5b0b,0x52ca,0x4aaa,0x52ca,0x5aca,0x5b0b,0x5b0b,0x52aa,0x5aeb,0x5b0b,0x52aa,0x52ca,0x4aaa,0x5b2c,0x632c,0x52cb,0x5b0b,0x52ca,0x5b0b,0x4aaa,0x4a89,0x5b0b,0x52ea,0x5aea,0x52eb,0x52ca,0x5aeb,0x5b2c,0x4a89,0x52ca,0x5acb,0x5aeb,0x5aeb,0x4a89,0x52aa,0x5aeb,0x52eb,0x52ca,0x52ca,0x52ca,0x52ca,0x4a8a,0x52aa,0x52ca,0x52ca,0x52aa,0x4a69,0x4a89,0x52eb,0x52aa,0x52aa,0x4a8a,0x4a89,0x52aa,0x4aaa,0x52ca,0x52aa,0x4aaa,0x52aa,0x4248,0x52aa,0x4a69,0x5acb,0x4a69,0x4a69,0x4a69,0x5289,0x4a49,0x4a89,0x4a69,0x4a89,0x4a69,0x528a,0x5aeb,0x528a,0x4248,0x4a69,0x4a89,0x4a89,0x4a48,0x4a49,0x4a89,0x4a49,0x4a69,0x4a69,0x4a69,0x4269,0x4a89,0x4248,0x4248,0x5289,0x4248,0x4228,0x4228,0x4a69,0x4228,0x4a48,0x4248,0x39e7,0x4228,0x4a89,0x5289,0x4a48,0x4228,0x4228,0x4207,0x4207,0x4228,0x4228,0x3a08,0x4208,0x4228,0x4248,0x4228,0x31c7,0x39e7,0x4248,0x4208,0x4228, +0x5b0b,0x5b2b,0x632b,0x5b0b,0x52eb,0x52ca,0x636c,0x634c,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x5aeb,0x52eb,0x52ea,0x5b2b,0x634c,0x5b2c,0x52eb,0x5b0b,0x5aeb,0x5b0b,0x5b4c,0x5b2b,0x5b0b,0x5b2b,0x5b2b,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x634c,0x5aeb,0x636c,0x5b2c,0x5b0b,0x5b2b,0x5b2b,0x5b4c,0x634c,0x634c,0x5b2b,0x5b4c,0x634c,0x5b0b,0x5b4b,0x530b,0x5b0b,0x5b2c,0x5b2b,0x636c,0x5b2c,0x52eb,0x5b0b,0x634c,0x5b0b,0x5b2c,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x52ea,0x5b0b,0x52eb,0x5b2b,0x52ca,0x5b2b,0x5b2c,0x52ea,0x530a,0x52ea,0x5b4c,0x5b2b,0x634c,0x5b0b,0x5b0b,0x6b8d,0x530b,0x5b2b,0x5b2b,0x5b2b,0x5b0b,0x5b4c,0x5b2b,0x5b0b,0x634c,0x5b2b,0x52eb,0x4aca,0x52eb,0x5b4c,0x5b0b,0x5b0b,0x634c,0x634c,0x52ca,0x632c,0x5b2b,0x52ea,0x5b4c,0x634c,0x636c,0x638d,0x5b2b,0x5b4c,0x636d,0x5b4c,0x634c,0x636c,0x634c,0x632c,0x5b2b,0x5b2b,0x636c,0x6b8d,0x5b2b,0x5b2b,0x5b6c,0x638d,0x5b4c,0x52ea,0x5b4c,0x5b4c,0x5b2b,0x636c,0x5b4c,0x638d,0x5b4c,0x5b4c,0x636c,0x5b4c,0x5b2c,0x636d,0x5b2b,0x5b4c,0x634c,0x634c,0x6bad,0x638d,0x638d,0x636c,0x5b4c,0x5b6c,0x5b2c,0x634c,0x5b2c,0x5b2b,0x638d,0x636c,0x638d,0x5b2b,0x5b4c,0x634c,0x634c,0x5b2b,0x636c,0x636c,0x634c,0x634c,0x5b2b,0x5b2b,0x634c,0x5b4c,0x634c,0x5b4c,0x634c,0x634c,0x634c,0x636c,0x5b4c,0x634c,0x634c,0x636c,0x634c,0x5b2b,0x5b4c,0x5b6c,0x636c,0x638d,0x634c,0x632c,0x638d,0x636d,0x634c,0x5b4c,0x636c,0x636d,0x6b8d,0x6b6d,0x6b8d,0x634c,0x636d,0x5b2c,0x636c,0x636d,0x5b4c,0x5b2b,0x6b8d,0x636d,0x634c,0x638d,0x5b4c,0x634c,0x634c,0x6b6d,0x636c,0x5b2c,0x636d,0x636c,0x634c,0x636c,0x5b2c,0x634c,0x634c,0x632c,0x634c,0x632c,0x636c,0x634c,0x5b2b,0x6b8d,0x6b8d,0x634c,0x636c,0x636d,0x634c,0x636d,0x634c,0x632c,0x632c,0x632c,0x634c,0x5b2c,0x634c,0x636d,0x634c,0x632c,0x632c,0x6b6d,0x6b8d,0x634c,0x6b6d,0x634c,0x634c,0x5b0b,0x632c,0x634c,0x634c,0x634c,0x632c,0x632c,0x632c,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x634c,0x632c,0x5b0b,0x634c,0x5b0b,0x5b0b,0x632b,0x5b2b,0x632c,0x632c,0x632c,0x632c,0x632b,0x5aeb,0x5b2b,0x632c,0x6b4c,0x632c,0x632c,0x632c,0x634c,0x5b0b,0x632c,0x5b0b,0x5b0b,0x632b,0x5b0b,0x632c,0x5b0b,0x5b0b,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x5b0b,0x630b,0x634c,0x634c,0x634c,0x632c,0x5b0b,0x5aeb,0x634c,0x6b6d,0x5aeb,0x634c,0x6b4c,0x5b0b,0x632c,0x634c,0x5b0b,0x632c,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x634c,0x632c,0x632c,0x5b0b, +0x5b0b,0x632c,0x5aeb,0x52aa,0x5b2b,0x632c,0x5aeb,0x52ca,0x5b0b,0x5b0b,0x5b0b,0x632c,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x52ca,0x5b0b,0x5b2b,0x5b0b,0x632c,0x634c,0x634c,0x52ea,0x52ca,0x5b2c,0x5b2b,0x5aea,0x5b2b,0x5b2b,0x634c,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x5b2b,0x5b2b,0x52eb,0x5aeb,0x5b2c,0x52eb,0x52ea,0x5b0b,0x52ca,0x5aeb,0x5b0b,0x5b0b,0x52ca,0x5b0b,0x634c,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x5b0b,0x52eb,0x5b0b,0x52ca,0x634c,0x634c,0x5b2c,0x5b2b,0x634c,0x530b,0x5b0b,0x5b0b,0x52ca,0x52ea,0x5b0b,0x5b2b,0x636c,0x5b2b,0x5b2b,0x5b0b,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x634c,0x634c,0x5b0b,0x5b2c,0x5b0b,0x5b0b,0x52ea,0x634c,0x5b2b,0x5b4b,0x634c,0x52aa,0x52eb,0x5b2b,0x5b4c,0x634c,0x634c,0x634c,0x636c,0x634c,0x5b0b,0x632c,0x5b0b,0x634c,0x634c,0x636c,0x634c,0x5b2b,0x636c,0x636c,0x5b2b,0x5b0b,0x5b2b,0x5b4c,0x5b0b,0x5b2c,0x634c,0x634c,0x6b8d,0x634c,0x634c,0x5b2b,0x5b0b,0x634c,0x5b2c,0x636c,0x530b,0x634c,0x5b2c,0x530b,0x5b2b,0x52ea,0x5b0b,0x634c,0x5b2b,0x634c,0x52eb,0x52eb,0x5b4c,0x5b4c,0x52ca,0x4aaa,0x52eb,0x5b2c,0x636c,0x5b0b,0x530b,0x530b,0x5b4c,0x634c,0x5b2c,0x5b0b,0x5b0b,0x5b4c,0x4aca,0x52eb,0x634c,0x636c,0x636c,0x5b2b,0x5b2b,0x636c,0x5b4c,0x5b2b,0x636c,0x5b2b,0x52eb,0x634c,0x5b0b,0x632c,0x634c,0x6bad,0x5b4c,0x634c,0x5b2c,0x632c,0x5b2b,0x5b4c,0x636d,0x634c,0x5b2c,0x636d,0x5b2b,0x5b2b,0x634c,0x52ea,0x5b2b,0x632c,0x632c,0x5b2c,0x636c,0x5b0b,0x5b4c,0x636c,0x634c,0x5b2b,0x5b2b,0x636d,0x5b2c,0x5b0b,0x636c,0x634c,0x5b2c,0x634c,0x634c,0x632c,0x5aeb,0x5b0b,0x52eb,0x632c,0x632c,0x632c,0x5b2c,0x5b0b,0x5b2c,0x5b2b,0x634c,0x632c,0x5b0b,0x5b0b,0x634c,0x5b2c,0x636d,0x6b6d,0x5b0b,0x5b2c,0x5b0b,0x5b2b,0x634c,0x634c,0x632c,0x632c,0x632c,0x632c,0x634c,0x5b0b,0x634c,0x5aeb,0x5b0b,0x5b2b,0x634c,0x5b0b,0x634c,0x632c,0x634c,0x632c,0x5b0b,0x632b,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x632c,0x630b,0x5aeb,0x632c,0x5b0b,0x52ca,0x5b0b,0x5b0b,0x5b0b,0x5aca,0x52ca,0x5acb,0x52ca,0x5b0b,0x5b0b,0x5b0b,0x632c,0x5aeb,0x5aeb,0x5b0b,0x632c,0x5b2c,0x5b0b,0x634c,0x6b4c,0x630b,0x5b0b,0x5aeb,0x5b2b,0x632c,0x5b0b,0x5aeb,0x5b2b,0x5aeb,0x632c,0x5aeb,0x5b0b,0x5b2c,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5aeb,0x632c,0x5b2c,0x632c,0x5aeb,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x5b0b,0x630b,0x5aeb,0x5aeb,0x52aa,0x5b0b,0x5b0b,0x5aeb,0x632c,0x5aeb, +0x632c,0x634c,0x5b0b,0x630c,0x5b2b,0x5b0b,0x5b0b,0x634c,0x5b2b,0x5b0b,0x5b0b,0x52ea,0x5aeb,0x5b0b,0x634c,0x632b,0x52ca,0x5aeb,0x5b0b,0x634c,0x52ca,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x5b2c,0x632c,0x5b2b,0x632c,0x5b0b,0x5b2b,0x5aeb,0x5b2b,0x530b,0x5b0b,0x634c,0x5aeb,0x5b0b,0x5b0b,0x52eb,0x5b0b,0x5b0b,0x5aeb,0x52ca,0x5aeb,0x5b0b,0x52ea,0x52ea,0x4a8a,0x5aeb,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x52eb,0x52ea,0x52eb,0x52eb,0x52eb,0x5b0b,0x5b4c,0x530b,0x4aa9,0x5b0b,0x632c,0x52ea,0x5b2b,0x5b0b,0x52eb,0x5b2c,0x632c,0x530b,0x52eb,0x5b0b,0x5aeb,0x5b2c,0x5b2b,0x632c,0x530b,0x52ea,0x5b4c,0x638c,0x634c,0x636c,0x5b4c,0x5b4c,0x5b2c,0x4aaa,0x5b2b,0x5b0b,0x530b,0x5b2b,0x5b4c,0x5b2c,0x52eb,0x5b0b,0x5b2c,0x5b0b,0x5b0b,0x636c,0x5b2b,0x636c,0x636c,0x5b2b,0x52ea,0x634c,0x636c,0x5b2b,0x52ea,0x52ea,0x5b2b,0x530b,0x530b,0x5b4c,0x634c,0x5b2b,0x5b2c,0x5b2c,0x5b0b,0x5b2c,0x5b0b,0x5b2c,0x5b2c,0x634c,0x636c,0x5b2b,0x6b8d,0x638c,0x5b4c,0x5b2b,0x52ea,0x5b4c,0x5b2b,0x5b0b,0x5b2b,0x634c,0x52eb,0x5b2c,0x5b2c,0x634c,0x634c,0x5b2b,0x5b2b,0x636c,0x530b,0x5b4c,0x530b,0x5b0b,0x5b4c,0x5b2b,0x530b,0x5b2b,0x5b4c,0x634c,0x530b,0x5b2c,0x5b2c,0x636c,0x5b4c,0x634c,0x5b2b,0x5b2b,0x638d,0x636c,0x5b2c,0x638d,0x634c,0x5b2c,0x634c,0x5b4c,0x636d,0x5b2c,0x5b2c,0x638d,0x5b0b,0x5b0b,0x636d,0x5b2c,0x634c,0x5b0b,0x5b4c,0x634c,0x634c,0x5b4c,0x5b2b,0x5b2b,0x634c,0x5b4c,0x5b4c,0x6b8d,0x636d,0x5b0b,0x634c,0x5b4c,0x636d,0x5b2b,0x5b2c,0x5b0b,0x5b2c,0x636d,0x636d,0x634c,0x5b2b,0x5b2c,0x5b0b,0x636d,0x636d,0x634c,0x5b0b,0x5b0b,0x636d,0x636c,0x5b0b,0x632c,0x5b2c,0x5b2c,0x636c,0x5b2b,0x634c,0x5b0b,0x632c,0x632c,0x632c,0x5b2c,0x5b0b,0x5b2c,0x636d,0x632c,0x634c,0x632c,0x5b0b,0x5b0b,0x5aeb,0x632c,0x632c,0x5b0b,0x5b2c,0x632c,0x632c,0x5b0b,0x5b2c,0x5b0b,0x5b0c,0x5b0b,0x632c,0x5b0c,0x5b2c,0x632c,0x5b0b,0x634c,0x632c,0x630c,0x630b,0x5b0c,0x5b2c,0x632c,0x5b0b,0x5aeb,0x5b0b,0x630b,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x632c,0x5aeb,0x5b0b,0x52eb,0x5b0b,0x632c,0x632c,0x632c,0x634c,0x5b0b,0x6b6d,0x634c,0x630b,0x634c,0x632b,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x632c,0x5b0b,0x632c,0x632c,0x5b0b,0x5aeb,0x5b0c,0x5b0b,0x5b0b,0x5b0b,0x52ca,0x5aeb,0x5aeb,0x5b0b,0x5b2c,0x5aeb,0x632c,0x5b0b,0x5acb,0x630b,0x5b0b,0x632c,0x632c,0x634c,0x630c,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x5aeb, +0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x632c,0x5b2b,0x5b2b,0x6bad,0x6bad,0x6bad,0x634c,0x5b2c,0x632c,0x5b2c,0x5b2c,0x73cd,0x6bad,0x5b0b,0x5b0b,0x634c,0x636c,0x636c,0x5b2b,0x636c,0x5b2b,0x634c,0x634c,0x636c,0x634c,0x634c,0x632c,0x634c,0x632c,0x5b0b,0x634c,0x634c,0x5b2b,0x5b0b,0x5b0b,0x634c,0x634c,0x5b2b,0x634c,0x5b2c,0x5b2c,0x632c,0x5aeb,0x632c,0x5b2c,0x636c,0x636c,0x530b,0x5b2c,0x634c,0x5b0b,0x6b8d,0x636c,0x5b0b,0x5b2b,0x634c,0x636c,0x5b0b,0x5b0b,0x636c,0x638c,0x6bad,0x634c,0x5b2b,0x634c,0x636c,0x636c,0x5b0b,0x530b,0x634c,0x632c,0x5b2b,0x5b2c,0x634c,0x5aeb,0x6b6d,0x52ca,0x5b2b,0x634c,0x634c,0x52eb,0x636c,0x5b2c,0x6b8d,0x5b0b,0x634c,0x5b0b,0x632c,0x634c,0x634c,0x5b2b,0x5b0b,0x4aca,0x5b2b,0x636d,0x5b0b,0x5aeb,0x5b0b,0x530a,0x634c,0x634c,0x634c,0x5b2b,0x5b2b,0x636c,0x5b4c,0x636c,0x6bad,0x634c,0x5b2b,0x634c,0x5b0b,0x5b2b,0x5b4c,0x52ea,0x5b2c,0x5b0b,0x5b4c,0x636c,0x5b2c,0x5b2b,0x5b2b,0x636d,0x638d,0x5b4c,0x636c,0x6bad,0x636c,0x638d,0x5b6c,0x634c,0x6b8d,0x634c,0x5b2b,0x636c,0x5b2c,0x5b0b,0x5b2b,0x5b2b,0x636d,0x5b0b,0x5b4c,0x638d,0x5b4c,0x638d,0x636c,0x52ea,0x530b,0x5b0b,0x638d,0x634c,0x636c,0x5b4c,0x638d,0x636d,0x5b4c,0x5b4c,0x5b4c,0x5b0b,0x5b2b,0x530b,0x5b4c,0x5b2b,0x5b0b,0x634c,0x5b0b,0x5b0b,0x5b2c,0x634c,0x5b4c,0x636d,0x634c,0x530b,0x636d,0x530b,0x5b2c,0x5b4c,0x5b4c,0x636c,0x636d,0x5b2c,0x5b0b,0x638d,0x5b4c,0x638c,0x638d,0x636c,0x638d,0x634c,0x634c,0x6bad,0x636d,0x6b6d,0x6b8d,0x634c,0x634c,0x636d,0x5b2c,0x634c,0x5b0c,0x636d,0x6b8d,0x6b8d,0x636d,0x6b8d,0x634c,0x73ae,0x636d,0x634c,0x636c,0x6b8d,0x6b8d,0x636d,0x636d,0x634c,0x634c,0x634c,0x6b6c,0x634c,0x5b2c,0x632c,0x636d,0x634c,0x5b0c,0x5b0b,0x6b8d,0x634c,0x5b2b,0x634c,0x5b2c,0x5b4c,0x5b2b,0x636c,0x5b0b,0x5b0c,0x52eb,0x5b4c,0x5b0b,0x5b2c,0x634c,0x636d,0x634c,0x52eb,0x5aeb,0x5aeb,0x5b2c,0x632c,0x632c,0x5b0b,0x634c,0x634c,0x5b0b,0x5b0b,0x630c,0x630b,0x632c,0x632c,0x5b0b,0x632c,0x632c,0x5b0b,0x5b2b,0x5aeb,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x630c,0x5aeb,0x5b0b,0x5b2c,0x6b6c,0x5aeb,0x5aeb,0x5b0c,0x5b0b,0x5b0b,0x52ca,0x52ca,0x52aa,0x52ca,0x5aeb,0x5aeb,0x5aeb,0x634c,0x5aeb,0x5b0b,0x52ca,0x5aca,0x5b0b,0x52ca,0x5b0b,0x5b0b,0x52eb,0x5b0b,0x632c,0x5aca,0x5aca,0x5aeb,0x5aca,0x52ca,0x52ca,0x5b0b,0x52ca,0x632c,0x632c,0x5acb,0x52ca,0x5aca,0x5b0b,0x632c,0x5b0b,0x5aeb, +0x73ee,0x7bef,0x7c0f,0x6b8d,0x73ef,0x7c0f,0x740e,0x73ce,0x6b8d,0x6b8d,0x740f,0x6bae,0x73ce,0x7c2f,0x73ce,0x6bcd,0x638d,0x6bad,0x740f,0x73ee,0x6bad,0x73ce,0x6bcd,0x73ee,0x73ee,0x6bad,0x6bad,0x73ee,0x6bcd,0x636c,0x636c,0x636c,0x634c,0x636d,0x634c,0x634c,0x636c,0x634c,0x634c,0x638d,0x634c,0x5b2b,0x638d,0x6bce,0x5b0b,0x5b4c,0x636c,0x634c,0x636c,0x634c,0x636c,0x5b2b,0x636c,0x52ea,0x634c,0x6bad,0x52ca,0x5b0b,0x5b0b,0x5b2b,0x5b4b,0x5b2b,0x52ea,0x5b2c,0x5b2b,0x52ca,0x5b0b,0x5b2c,0x5b0b,0x5b2b,0x4a89,0x4269,0x5b0b,0x4a89,0x5aeb,0x4aa9,0x52ca,0x52ca,0x634c,0x5b0b,0x39e7,0x52ca,0x5b0b,0x5b0b,0x3a28,0x52ea,0x4248,0x4248,0x4269,0x3a28,0x4249,0x4228,0x4248,0x4aaa,0x4269,0x4228,0x52ca,0x4aaa,0x4228,0x4248,0x4269,0x4aa9,0x4268,0x52ca,0x4a89,0x4a89,0x52ca,0x4a69,0x4a89,0x4269,0x4a69,0x5aeb,0x4aa9,0x4268,0x4248,0x4248,0x4269,0x4248,0x4248,0x52aa,0x4269,0x4269,0x4a89,0x3a07,0x4248,0x4269,0x4248,0x4a69,0x4228,0x4228,0x4269,0x4248,0x3a07,0x4249,0x4248,0x4a89,0x4a89,0x4289,0x4a89,0x4a89,0x4269,0x4248,0x3a07,0x4a69,0x52ca,0x4289,0x4a89,0x4aa9,0x4a89,0x4248,0x3a28,0x4228,0x4a89,0x52ca,0x4aa9,0x4248,0x4228,0x4a89,0x4269,0x4228,0x4248,0x4a89,0x4a69,0x4268,0x4a89,0x4a89,0x4248,0x52ca,0x4269,0x4a69,0x4a89,0x4a89,0x4a69,0x52eb,0x52ca,0x4aaa,0x4aaa,0x52eb,0x4aaa,0x4a89,0x52ca,0x52ca,0x5b0b,0x52eb,0x52ca,0x52aa,0x634c,0x52ca,0x636c,0x52ea,0x5b2b,0x4aaa,0x5b2c,0x52eb,0x532b,0x5b4c,0x5acb,0x5b0b,0x5b0b,0x52eb,0x5aeb,0x5b2c,0x5b2c,0x5b2c,0x634c,0x6b8d,0x636d,0x52eb,0x636d,0x5b2c,0x632c,0x73ce,0x5b0b,0x634c,0x5b2b,0x636d,0x638d,0x636c,0x73ee,0x636d,0x636d,0x6b8d,0x6bad,0x6bae,0x7c0f,0x6bae,0x6b6d,0x6b8d,0x73ce,0x73ce,0x6bae,0x6b8d,0x6bae,0x6bae,0x73ce,0x7c0f,0x6b8d,0x7c0f,0x73ce,0x6bae,0x7c0f,0x73ae,0x73ce,0x7bef,0x73ef,0x73ce,0x7bef,0x73ef,0x7c30,0x8450,0x6bad,0x7c10,0x73ae,0x94b2,0x73ce,0x6bae,0x73ce,0x73ae,0x7bce,0x73ce,0x73ce,0x73ee,0x7c0f,0x73ae,0x7bef,0x73ce,0x73ee,0x7c0f,0x7c2f,0x7c0f,0x73ae,0x7bef,0x840f,0x73ce,0x73ae,0x8430,0x8c50,0x7c0f,0x7c0f,0x7c0f,0x8c71,0x73ae,0x6b8d,0x73ae,0x8430,0x8430,0x7c0f,0x8c91,0x73ee,0x73ce,0x6b6d,0x73ef,0x73ce,0x73ae,0x73ce,0x73ae,0x7bef,0x8430,0x73ae,0x6b8d,0x6b8d,0x6b6d,0x6b8d,0x73ae,0x73ce,0x73ce,0x8430,0x8430,0x7c0f,0x73ce,0x6b8d,0x73ae,0x73ae,0x636d,0x73ae,0x73ae,0x73ad,0x73ad,0x6b8d,0x632c, +0x52ca,0x52eb,0x52eb,0x5b0b,0x52eb,0x5b2b,0x52ca,0x5aea,0x52aa,0x4a89,0x5b0b,0x4269,0x52ca,0x52ca,0x52ca,0x4a89,0x4248,0x4a89,0x52eb,0x52ca,0x4aa9,0x4aaa,0x4268,0x4aaa,0x4a89,0x4248,0x4aa9,0x4a89,0x52ca,0x39e7,0x3a07,0x4248,0x4228,0x4a69,0x4269,0x3a07,0x4269,0x4248,0x4269,0x4248,0x4248,0x4228,0x4269,0x4a69,0x3a07,0x4228,0x3a07,0x39e7,0x3a07,0x4228,0x3a07,0x3a07,0x3a07,0x31a6,0x4a69,0x31a6,0x2985,0x3a08,0x3a08,0x31c6,0x31c6,0x4248,0x4228,0x3a08,0x4249,0x39e7,0x29a6,0x4228,0x2985,0x3a07,0x2985,0x2944,0x39e7,0x39e7,0x2985,0x31c6,0x31c6,0x2985,0x4228,0x31c6,0x2965,0x39e7,0x3186,0x2144,0x2965,0x31c7,0x2945,0x2945,0x31a6,0x2124,0x2965,0x2965,0x2124,0x2124,0x2145,0x2986,0x3a07,0x31e7,0x2965,0x31a6,0x2144,0x2965,0x31a6,0x31a6,0x2985,0x2965,0x31a6,0x31a6,0x2965,0x2965,0x31a6,0x2965,0x2986,0x2986,0x2965,0x1904,0x2985,0x31a6,0x2945,0x2965,0x2985,0x2965,0x2144,0x2144,0x2144,0x2965,0x2104,0x2124,0x2124,0x2144,0x2945,0x2965,0x18e3,0x1903,0x1903,0x2124,0x2985,0x2124,0x2945,0x2985,0x2124,0x18e3,0x2124,0x2965,0x31a6,0x2985,0x2144,0x2965,0x2145,0x2144,0x2944,0x1903,0x2985,0x2985,0x2144,0x2965,0x2124,0x31c7,0x2985,0x2144,0x2985,0x2986,0x39e7,0x31a6,0x2965,0x31a6,0x2985,0x31a6,0x2965,0x31a6,0x3a07,0x2965,0x31a6,0x31a6,0x1903,0x2965,0x31e7,0x2985,0x31e7,0x31c6,0x31e7,0x31e7,0x3a07,0x31e7,0x39e7,0x31c6,0x4228,0x39e7,0x31c6,0x31c6,0x4a69,0x39e7,0x31c6,0x4269,0x3a08,0x39e7,0x3a07,0x4228,0x4269,0x3a28,0x4a8a,0x4228,0x3a08,0x4a69,0x3a07,0x4a69,0x3a07,0x4a89,0x4248,0x4a89,0x3a07,0x52ca,0x4a8a,0x52eb,0x4a89,0x52ea,0x52aa,0x4aaa,0x52eb,0x4aaa,0x4269,0x52eb,0x52eb,0x5aeb,0x632c,0x5aeb,0x634c,0x52eb,0x5aeb,0x4a89,0x5aeb,0x52aa,0x52eb,0x73ae,0x52aa,0x5aeb,0x6b6d,0x73ae,0x6b8d,0x6b8d,0x6b8d,0x634c,0x5b0b,0x5b0b,0x632c,0x5b0b,0x634c,0x636d,0x7bef,0x6b6d,0x6b8d,0x6b6d,0x632c,0x73ce,0x5b0b,0x636d,0x6b6d,0x6b8d,0x634c,0x6b4d,0x6b8d,0x6b6d,0x6b4c,0x6b6d,0x73ce,0x6bae,0x6b8e,0x6b4c,0x7bef,0x7bef,0x73cf,0x73ae,0x8430,0x8430,0x7bef,0x8c50,0x94b1,0x8c50,0x7bef,0x8450,0x8430,0x7c0f,0x7bef,0x7bef,0x8c71,0x8430,0x8410,0x8450,0x8450,0x7c0f,0x7bef,0x7bef,0x7c0f,0x8430,0x8450,0x7c10,0x8450,0x94b2,0x7c0f,0x8450,0x8c71,0x9cd3,0x8430,0x7c0f,0x7c0f,0x8c91,0x8450,0x8c71,0x94d2,0x840f,0x8430,0x7c0f,0x8471,0x8430,0x94d2,0x8c91,0x8450,0x8410,0x7c0f,0x7c0f, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0841,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0820,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0820,0x0000,0x0000,0x0840,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0820,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0821,0x0000,0x0000,0x0000,0x0000,0x0000,0x0861,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0841,0x0841,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0841,0x0000,0x0000,0x0000,0x0000,0x10a2,0x0821,0x0000,0x0000,0x0000,0x0020,0x0000,0x1082,0x0861,0x0820,0x1082,0x1061,0x1081,0x1061,0x0861,0x0861,0x10a2,0x0000,0x0000,0x0020,0x1082,0x1081,0x18e3,0x18e3,0x18e3,0x0861,0x1082,0x18c3,0x18c3,0x0000,0x0000,0x2124,0x18c3,0x2124,0x18c3,0x18e3,0x2104,0x2103,0x31a6,0x2965,0x2965,0x20e3,0x2965,0x3186,0x2945,0x3186,0x2965,0x18e3,0x2945,0x2965,0x4208,0x4208,0x2966,0x2945,0x2945,0x39c7,0x31a7,0x2965,0x2985,0x31a6,0x39c7,0x39e7,0x4a49,0x39c7,0x4208,0x4228,0x4228,0x39e7,0x39e7,0x39e7, +0x3186,0x31c6,0x31a6,0x31c6,0x31a6,0x29a5,0x31c6,0x3a07,0x31a6,0x31a6,0x31a6,0x2985,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x2985,0x31a6,0x31a6,0x31a6,0x2986,0x31c6,0x31a6,0x31a5,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x39e7,0x31a6,0x31a6,0x31a6,0x31c6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31c6,0x31c6,0x31a6,0x31a6,0x31a6,0x2985,0x31a6,0x31a6,0x31a6,0x31a6,0x29a6,0x29a6,0x31a6,0x31a6,0x31a6,0x31c6,0x31a6,0x31a6,0x31a6,0x31a6,0x3186,0x3186,0x39e7,0x31c6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x2985,0x2986,0x3186,0x31a6,0x31c6,0x31a6,0x31a6,0x31c6,0x31a6,0x31a6,0x31c6,0x31a6,0x31c6,0x31a6,0x31c6,0x31a6,0x2985,0x31a6,0x31a6,0x31a6,0x31a6,0x2986,0x31c6,0x31a6,0x31a6,0x31a6,0x31c6,0x2986,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x2986,0x2985,0x2985,0x2985,0x2986,0x2986,0x31a6,0x31c6,0x31a6,0x31c6,0x31a6,0x2985,0x31a6,0x31a6,0x31a6,0x31a6,0x2985,0x3186,0x3185,0x2985,0x31a6,0x2985,0x31a6,0x29a6,0x2985,0x2985,0x31a6,0x31a6,0x2985,0x31a6,0x31a6,0x2985,0x29a6,0x29a6,0x2985,0x2965,0x2985,0x2985,0x31a6,0x31a6,0x2986,0x2985,0x29a6,0x31a6,0x31c6,0x31a6,0x2986,0x2985,0x31c6,0x31a6,0x2965,0x31a6,0x31a6,0x2986,0x2985,0x31a6,0x31a6,0x3186,0x2986,0x29a6,0x31a6,0x31a6,0x31a6,0x2985,0x2985,0x2985,0x2985,0x2985,0x2985,0x2985,0x2985,0x2986,0x2985,0x2985,0x2965,0x2965,0x3186,0x2985,0x3185,0x3186,0x31a6,0x31a6,0x31a6,0x2965,0x3186,0x31a6,0x2986,0x2985,0x2965,0x2985,0x3a07,0x31a6,0x2965,0x31a6,0x2965,0x2986,0x31c7,0x3186,0x2965,0x2965,0x2985,0x2986,0x2965,0x3186,0x31a6,0x2986,0x2986,0x2986,0x2985,0x3185,0x2965,0x2985,0x2985,0x31c6,0x29a6,0x2965,0x31a6,0x2965,0x2985,0x2985,0x2985,0x2965,0x2985,0x2965,0x2985,0x2965,0x2965,0x2965,0x2965,0x2945,0x3186,0x3186,0x2965,0x2144,0x2965,0x2945,0x2945,0x2965,0x2965,0x2965,0x2965,0x2945,0x3186,0x2965,0x2965,0x2965,0x2945,0x2145,0x2965,0x2965,0x2945,0x2945,0x2945,0x2145,0x2945,0x2145,0x2945,0x2965,0x2965,0x2945,0x2124,0x2945,0x2945,0x2945,0x2144,0x2965,0x2124,0x2124,0x2145,0x2965,0x2945,0x2124,0x2144,0x2103,0x2103,0x2144,0x2124,0x2103,0x18c3,0x18e3,0x10a2,0x2104,0x2104,0x18c3,0x18e3,0x18c2,0x18a2,0x18e3,0x18e3,0x10a2,0x0020,0x0040,0x10a1,0x10a2,0x10a2,0x0840,0x0020,0x0840,0x0841,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x39e7,0x3a07,0x3a08,0x3a07,0x3a28,0x3a28,0x3a07,0x4208,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x3a07,0x39e7,0x3a28,0x3a07,0x4208,0x3a07,0x3a08,0x3a07,0x39e7,0x3a08,0x4228,0x3a07,0x3a07,0x3a07,0x39e7,0x4228,0x3a07,0x3a07,0x3a07,0x3a07,0x4208,0x4228,0x3a07,0x3a28,0x4228,0x3a07,0x3a07,0x4228,0x4228,0x4228,0x3a07,0x3a08,0x3a07,0x3a28,0x4228,0x3a07,0x4228,0x4208,0x3a07,0x3a07,0x3a07,0x4228,0x4228,0x4207,0x4228,0x4228,0x3a28,0x3a07,0x4228,0x4228,0x3a07,0x3a08,0x3a07,0x4228,0x3a07,0x3a27,0x4228,0x3a07,0x4207,0x4228,0x3a07,0x4228,0x4228,0x3a08,0x4228,0x3a07,0x3a27,0x4248,0x4228,0x4248,0x4228,0x39e7,0x3a07,0x3a28,0x3a28,0x4248,0x4248,0x4248,0x4248,0x4228,0x4248,0x4268,0x4228,0x4228,0x4228,0x3a27,0x4228,0x4248,0x4228,0x4228,0x4228,0x4248,0x4248,0x4248,0x3a27,0x4269,0x4248,0x3a08,0x4248,0x4228,0x4a69,0x4248,0x4228,0x4228,0x4248,0x4248,0x4248,0x4248,0x4248,0x4228,0x4228,0x4248,0x4248,0x4228,0x4228,0x4248,0x4248,0x4228,0x4248,0x4a89,0x4228,0x4248,0x4269,0x4248,0x3a28,0x4248,0x4248,0x3a08,0x4248,0x4269,0x4248,0x4268,0x4248,0x4248,0x4248,0x4269,0x4248,0x4248,0x4228,0x4a69,0x4248,0x4228,0x4248,0x4269,0x4248,0x4268,0x4268,0x4248,0x4228,0x4a69,0x4a69,0x4248,0x4a69,0x4a48,0x4248,0x4248,0x4268,0x4248,0x4a69,0x4269,0x4248,0x4248,0x4248,0x4248,0x4228,0x4248,0x4228,0x4228,0x4248,0x4248,0x4a69,0x4a69,0x4248,0x4268,0x4269,0x4249,0x4a69,0x4269,0x4249,0x4228,0x4a69,0x4a69,0x4268,0x4248,0x4269,0x4269,0x4249,0x4a89,0x4269,0x4248,0x4269,0x4248,0x4248,0x4a49,0x4a69,0x4269,0x4269,0x4249,0x4249,0x4a69,0x4a69,0x4248,0x4248,0x4248,0x4a89,0x4a69,0x4248,0x4a48,0x4248,0x4a69,0x4248,0x4269,0x4269,0x4a48,0x4a69,0x4a89,0x4a69,0x4a69,0x4a49,0x4248,0x4248,0x4228,0x4a49,0x4248,0x4248,0x4228,0x4228,0x4228,0x4249,0x4a69,0x4248,0x4249,0x4a69,0x4228,0x4248,0x4269,0x4248,0x4228,0x4248,0x4a69,0x4248,0x4228,0x4248,0x4269,0x4228,0x4228,0x4249,0x4249,0x4248,0x4228,0x4a49,0x4a69,0x4269,0x4248,0x4228,0x4248,0x4248,0x4a49,0x4228,0x4228,0x4248,0x4228,0x4a49,0x4248,0x4a49,0x4248,0x4248,0x4a69,0x4a49,0x4a49,0x4248,0x4a69,0x4a69,0x4a49,0x4248,0x4228,0x4248,0x4228,0x4228,0x4228,0x4228,0x4208,0x4228,0x4207,0x4228,0x4208,0x4208,0x4228,0x39e7,0x4208,0x4228,0x4228,0x3a07,0x4228,0x3a07,0x39e7,0x4228,0x4228,0x39e7,0x4207,0x39e7, +0x3a08,0x3a07,0x39e7,0x39e7,0x3a07,0x4228,0x4207,0x39e7,0x4228,0x3a07,0x39e7,0x3a07,0x3a07,0x3a07,0x3a07,0x3a08,0x3a08,0x39e7,0x39e7,0x3a08,0x4228,0x3a07,0x39e7,0x3a08,0x3a08,0x4228,0x39e7,0x3a07,0x3a28,0x3a28,0x4248,0x3a07,0x4228,0x3a28,0x4208,0x3a07,0x4208,0x3a07,0x3a07,0x4228,0x4248,0x3a07,0x3a08,0x4228,0x3a07,0x4228,0x4208,0x4208,0x4208,0x3a27,0x4228,0x4228,0x3a07,0x4208,0x4248,0x3a07,0x3a08,0x4228,0x3a07,0x3a07,0x3a27,0x4228,0x4208,0x4228,0x4248,0x3a07,0x3a07,0x4228,0x4228,0x4228,0x4228,0x4228,0x4248,0x4248,0x4248,0x4248,0x4248,0x4228,0x4228,0x4248,0x4248,0x4228,0x4228,0x3a27,0x4228,0x4228,0x3a28,0x3a07,0x4228,0x4228,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4228,0x3a08,0x3a28,0x4a69,0x4a89,0x4269,0x4228,0x4269,0x4248,0x3a07,0x4248,0x4a69,0x4248,0x4228,0x4a69,0x4268,0x4a69,0x4248,0x4268,0x4248,0x4248,0x4248,0x4248,0x4248,0x4228,0x4228,0x4269,0x4a69,0x4a89,0x52ca,0x4aa9,0x4248,0x4a89,0x3a07,0x3a07,0x4269,0x4a69,0x4228,0x4a69,0x4228,0x3a07,0x4228,0x4269,0x4248,0x4228,0x4248,0x4248,0x4248,0x4a69,0x4a69,0x4249,0x4248,0x4228,0x4228,0x4248,0x4a69,0x4248,0x4248,0x3a28,0x4269,0x4269,0x4248,0x4228,0x4248,0x4269,0x4248,0x4248,0x4248,0x4268,0x4269,0x4269,0x4248,0x4289,0x4aa9,0x4248,0x3a07,0x4248,0x4269,0x4268,0x4248,0x4268,0x4a69,0x4248,0x4269,0x4248,0x4a69,0x4228,0x4228,0x4248,0x4a69,0x4248,0x4a69,0x4a89,0x4248,0x4269,0x4248,0x4248,0x4269,0x4248,0x4248,0x4248,0x4248,0x4248,0x4269,0x3a08,0x4228,0x4248,0x4248,0x4248,0x4248,0x4a69,0x4248,0x4248,0x4a69,0x4a69,0x4248,0x4a48,0x4a69,0x4248,0x4248,0x4248,0x4269,0x4a69,0x4248,0x4248,0x4248,0x4248,0x4a69,0x4248,0x4a69,0x4a69,0x4a69,0x4a69,0x4a89,0x4269,0x4aaa,0x4a89,0x4a49,0x4a69,0x4a69,0x4a69,0x4248,0x4269,0x4248,0x4248,0x4228,0x4248,0x4248,0x4a49,0x4248,0x4a69,0x4248,0x4228,0x4228,0x4248,0x4a69,0x4248,0x4248,0x4248,0x4228,0x4228,0x4228,0x4228,0x4248,0x4248,0x4228,0x4228,0x4a69,0x4249,0x4249,0x4a69,0x4248,0x4228,0x4228,0x4248,0x3a08,0x4228,0x3a28,0x4208,0x3a07,0x4248,0x4228,0x4228,0x3a07,0x3a28,0x4228,0x4248,0x4208,0x4249,0x4249,0x4248,0x4a69,0x4228,0x4249,0x4a89,0x4a89,0x4228,0x3a08,0x4228,0x4249,0x4228,0x4249,0x4248,0x4228,0x3a07,0x4228,0x4228,0x4228,0x3a28,0x4208,0x4228,0x4208,0x4a69,0x4a69,0x4228,0x4228,0x4a69,0x4228,0x4a69,0x4228,0x4228,0x3a07,0x4228,0x4228, +0x39e7,0x39e7,0x31c6,0x4208,0x3a08,0x39e7,0x39e7,0x31c6,0x31a6,0x39e7,0x39c7,0x31c6,0x3a07,0x39c7,0x39c7,0x39e7,0x4208,0x39c6,0x31c6,0x39e7,0x39e7,0x31c6,0x39e7,0x39e7,0x31c6,0x39e7,0x39c6,0x39c7,0x39e7,0x39e7,0x39e7,0x31c6,0x39e7,0x4228,0x4207,0x4208,0x39c7,0x31c7,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x4207,0x3a07,0x39e7,0x39c7,0x39e7,0x31c7,0x39e7,0x4208,0x39e7,0x4208,0x39e7,0x31c6,0x31c7,0x4208,0x4208,0x3a08,0x3a07,0x39e7,0x39c7,0x4228,0x4228,0x4208,0x3a07,0x4248,0x4228,0x3a07,0x3a07,0x4207,0x39e7,0x4228,0x39e8,0x39e7,0x4228,0x3a07,0x4a69,0x4228,0x3a07,0x4248,0x3a28,0x3a07,0x4248,0x3a07,0x3a07,0x4228,0x4248,0x3a07,0x4228,0x4228,0x4248,0x4248,0x39e7,0x3a07,0x4228,0x3a07,0x3a07,0x4228,0x4208,0x4228,0x3a07,0x4248,0x3a28,0x3a07,0x4248,0x4248,0x4228,0x4228,0x4228,0x4228,0x4228,0x4207,0x4228,0x4228,0x4228,0x3a28,0x4248,0x4248,0x3a28,0x4249,0x4249,0x4248,0x4a69,0x4aa9,0x4248,0x4248,0x4269,0x39e7,0x39e7,0x4248,0x3a07,0x4228,0x4208,0x4248,0x4228,0x3a28,0x4248,0x4248,0x4248,0x4228,0x4269,0x4249,0x4248,0x4a89,0x4268,0x4a89,0x4a69,0x4248,0x4248,0x4a69,0x4a69,0x4228,0x4248,0x4269,0x4248,0x4248,0x4228,0x4249,0x4a69,0x4228,0x4228,0x4248,0x4248,0x4228,0x4a69,0x4248,0x4248,0x4a69,0x4a69,0x4228,0x4228,0x4248,0x4269,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4228,0x4269,0x4248,0x4269,0x4a69,0x4248,0x4248,0x4269,0x4a89,0x4a69,0x4228,0x4a89,0x4249,0x4248,0x4269,0x52aa,0x4a69,0x4248,0x4249,0x4228,0x3a08,0x4a69,0x4269,0x4a69,0x4a69,0x4228,0x4228,0x4228,0x4a69,0x4a69,0x4a49,0x4248,0x4228,0x4a69,0x4248,0x4248,0x4228,0x4a49,0x4248,0x4a69,0x4a69,0x4269,0x4a89,0x4a69,0x4a69,0x4228,0x4248,0x4a69,0x4a89,0x4a89,0x4a89,0x4a49,0x4248,0x4228,0x4249,0x4248,0x4228,0x4248,0x4228,0x4a89,0x4269,0x4a69,0x4a49,0x4a89,0x4a69,0x4248,0x4a89,0x4a49,0x4208,0x4a69,0x4a69,0x4a89,0x4248,0x4a69,0x4248,0x4228,0x4248,0x4228,0x4228,0x4228,0x4228,0x4248,0x4248,0x4a69,0x4248,0x4248,0x4248,0x4228,0x4208,0x3a08,0x4228,0x4248,0x4228,0x39e7,0x4248,0x4228,0x4208,0x4248,0x4249,0x4228,0x4228,0x4208,0x4248,0x4a69,0x4228,0x4228,0x4248,0x4248,0x4a89,0x4a49,0x4a69,0x4249,0x4a49,0x4248,0x4228,0x4a69,0x4a8a,0x4228,0x4228,0x4248,0x4a69,0x4228,0x4228,0x4248,0x4228,0x4a69,0x4228,0x4248,0x4228,0x4a69,0x52aa,0x4228,0x4a69,0x4a69,0x4248,0x4228,0x4248,0x4228,0x4228, +0x31c6,0x31a6,0x31a6,0x31a6,0x31a6,0x39c6,0x31c6,0x39c6,0x31c6,0x31a6,0x3a07,0x39e6,0x39e7,0x39e7,0x39c6,0x31c6,0x31a6,0x31c6,0x39e7,0x39e7,0x39e6,0x4227,0x3185,0x3a07,0x39e7,0x31c6,0x39e7,0x39c6,0x31a6,0x31c6,0x3185,0x3a07,0x39e7,0x31a6,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x39c7,0x31a6,0x31c6,0x39e7,0x31a6,0x31a6,0x31c6,0x31c6,0x3a07,0x31c6,0x31c6,0x39e6,0x31a6,0x39e7,0x3a07,0x39e7,0x39e6,0x39e7,0x39c7,0x39e7,0x39c6,0x31c6,0x31c6,0x39e7,0x3185,0x31a5,0x31c6,0x31a5,0x31c6,0x2985,0x31a6,0x31c6,0x31a6,0x3186,0x3186,0x31a6,0x31a6,0x2985,0x31a6,0x31a5,0x31a6,0x31a6,0x31c6,0x31c6,0x31a6,0x2985,0x3186,0x2985,0x2944,0x3186,0x29a5,0x2985,0x31a6,0x31c6,0x3186,0x31a6,0x31c6,0x31a6,0x2985,0x31a6,0x31a6,0x2985,0x31a6,0x31a6,0x31a6,0x2964,0x31a6,0x3186,0x31a6,0x2985,0x2986,0x2986,0x2985,0x39e7,0x31c6,0x2985,0x31a6,0x29a6,0x29a6,0x2985,0x2985,0x2965,0x2985,0x31a6,0x2985,0x2985,0x3186,0x3186,0x31c6,0x2985,0x31c6,0x31a6,0x2965,0x2965,0x2945,0x2985,0x2124,0x2965,0x2985,0x2985,0x31a6,0x2985,0x29a5,0x31a6,0x2164,0x2945,0x2985,0x2985,0x31a6,0x2985,0x31a6,0x31c6,0x3186,0x31c6,0x2985,0x2985,0x2965,0x2965,0x2965,0x31c6,0x2145,0x31a6,0x2985,0x2965,0x31a6,0x2144,0x31e7,0x2985,0x2124,0x31a6,0x2985,0x2965,0x2124,0x2144,0x2985,0x2965,0x2985,0x31a6,0x2124,0x2985,0x2985,0x2965,0x2965,0x31a6,0x2985,0x2945,0x2985,0x2965,0x2965,0x3186,0x3186,0x2985,0x2124,0x2985,0x2985,0x2985,0x2945,0x2124,0x2985,0x2985,0x2985,0x2986,0x31a6,0x2965,0x2985,0x2985,0x31a6,0x2965,0x2965,0x2965,0x2965,0x2945,0x31c6,0x2965,0x3186,0x2985,0x31a6,0x39c6,0x2965,0x31c6,0x31c6,0x31a6,0x31c6,0x31a6,0x31a6,0x2985,0x39c7,0x2985,0x31c6,0x31a6,0x31a6,0x31a6,0x2965,0x2965,0x2985,0x31a6,0x31c6,0x2986,0x31a6,0x31c6,0x31a6,0x2985,0x39c7,0x39c7,0x2985,0x31c6,0x31a6,0x2965,0x31c6,0x2985,0x31a6,0x31a6,0x31a6,0x2965,0x3186,0x31a6,0x3186,0x3186,0x3165,0x3185,0x2965,0x2985,0x31a6,0x31a6,0x3186,0x31a6,0x2965,0x3186,0x3185,0x2965,0x31a6,0x3186,0x3186,0x39e7,0x3186,0x2986,0x31a6,0x31c6,0x31a6,0x3186,0x31a6,0x31a6,0x3186,0x31c6,0x39c7,0x39c7,0x3185,0x2985,0x31a6,0x3186,0x31a6,0x31a6,0x2985,0x2985,0x3186,0x2966,0x2986,0x2986,0x31c6,0x31a6,0x31a6,0x3186,0x39e7,0x39c6,0x31c6,0x3186,0x39e7,0x39c6,0x31a6,0x3a07,0x39e7,0x39e7,0x39c7,0x4208,0x4228,0x31a6,0x31a6,0x39e7, +0x5aea,0x632b,0x5aeb,0x52ea,0x52ea,0x634b,0x636c,0x5aeb,0x5b0b,0x5b0b,0x5b2b,0x5b2b,0x52aa,0x52ca,0x5b0b,0x5b2b,0x5b0b,0x52ea,0x5b0b,0x632c,0x634b,0x632b,0x6b6c,0x634b,0x5b0b,0x632c,0x634c,0x5aea,0x52ea,0x5b0b,0x5b0b,0x634c,0x5b2b,0x632b,0x634c,0x5b2b,0x634b,0x5b0b,0x5b0b,0x636c,0x5b0b,0x5aea,0x5aeb,0x5b0b,0x5b2b,0x5b2b,0x52ea,0x5b0b,0x5b4c,0x5b0b,0x5b0b,0x5b2b,0x5b2b,0x6b8d,0x5b0b,0x5b2b,0x632b,0x5b2b,0x52ea,0x52ca,0x52ca,0x632c,0x5b2b,0x52ea,0x5aeb,0x632b,0x52ca,0x52ea,0x52ca,0x52ca,0x5b0b,0x52ca,0x5b0b,0x5b2b,0x52ca,0x636c,0x52ea,0x52eb,0x5b0b,0x52ca,0x5b0b,0x52ca,0x52ea,0x4aa9,0x4a89,0x4a89,0x52ca,0x5aeb,0x52ea,0x52ca,0x5aeb,0x5b2c,0x4aca,0x52ea,0x5b0b,0x5b0b,0x52eb,0x52eb,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x5b2b,0x530b,0x5b2b,0x5b0b,0x5b2b,0x5b0b,0x52eb,0x5b2b,0x5b2c,0x5b2c,0x5b0b,0x52eb,0x52ea,0x5b0b,0x5b2b,0x5b2b,0x52ea,0x52eb,0x5b2b,0x5b2b,0x52ea,0x52ca,0x52ea,0x52ea,0x530b,0x5b2b,0x5b2b,0x5b0b,0x636d,0x634c,0x5b0b,0x5aeb,0x5b0b,0x52ca,0x52ea,0x5b0b,0x52ea,0x5aea,0x52ca,0x5b0b,0x5b0b,0x52ea,0x5b0b,0x5b2b,0x52ca,0x52ca,0x52ca,0x4aaa,0x52ca,0x52ca,0x530b,0x5b0b,0x5b0b,0x5b2b,0x52eb,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x52ea,0x5b0b,0x52eb,0x5b0b,0x530b,0x5aeb,0x636d,0x5b2b,0x52eb,0x5b2c,0x530b,0x5b0b,0x52ca,0x5b0b,0x52eb,0x5b0b,0x52eb,0x636d,0x52eb,0x5b2b,0x5b4c,0x5b0b,0x52aa,0x6b8d,0x636d,0x5b2b,0x634c,0x5b2c,0x5b2b,0x6b6d,0x5b2c,0x52ea,0x52ca,0x5aeb,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x6b6d,0x5b0b,0x5b0b,0x5b2b,0x636c,0x634c,0x5b2b,0x5b2c,0x5b0b,0x634c,0x6b8d,0x5b2c,0x634c,0x636c,0x5b0b,0x6b4d,0x634c,0x5b2c,0x632c,0x5aeb,0x636d,0x634c,0x5b2b,0x5b2c,0x632c,0x5b0b,0x632c,0x634c,0x52eb,0x5aeb,0x636d,0x5b0b,0x5b2b,0x5b2c,0x5b0b,0x52eb,0x5b0b,0x5aeb,0x632c,0x5b0b,0x634c,0x5aeb,0x5b0b,0x632c,0x632c,0x5b2b,0x5b0b,0x52eb,0x52ca,0x5aeb,0x5b0b,0x5b0b,0x5b2c,0x52ca,0x52ca,0x52ca,0x52ca,0x52ca,0x52aa,0x4aaa,0x52ca,0x4aaa,0x52ca,0x52aa,0x52aa,0x52eb,0x52ca,0x52ea,0x52ca,0x52aa,0x4a8a,0x52aa,0x52ca,0x4a8a,0x52aa,0x4a8a,0x4aa9,0x52ca,0x4a89,0x52aa,0x52aa,0x52aa,0x5289,0x5289,0x4a89,0x52a9,0x5aeb,0x52ca,0x52aa,0x52aa,0x52ca,0x52ca,0x52aa,0x4a89,0x52aa,0x52aa,0x4a89,0x4a89,0x52eb,0x4a69,0x4a69,0x4a69,0x5289,0x4a69,0x52aa,0x4a89,0x4a69,0x4228,0x4248,0x4a69,0x4248,0x4a69,0x4a69,0x4a48,0x4248,0x4228,0x4228,0x4a48,0x4228, +0x5b0b,0x632c,0x5b2b,0x5b2b,0x6b8c,0x73cd,0x6b8c,0x6bad,0x634c,0x6b6c,0x636c,0x6b8c,0x636c,0x632b,0x636c,0x636c,0x5b2b,0x5b2b,0x634c,0x6b8c,0x636c,0x5b0b,0x6bad,0x6bad,0x6b8c,0x634c,0x5b2b,0x5b0b,0x530b,0x5b4b,0x636c,0x636c,0x638c,0x6b8c,0x6b8d,0x634c,0x638c,0x636c,0x636c,0x636c,0x5b2b,0x634c,0x634c,0x634c,0x638c,0x636c,0x5b0b,0x5b2c,0x636c,0x634c,0x52ca,0x5b0b,0x5b2b,0x5b2b,0x5b0b,0x5b2b,0x52ea,0x530b,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x634c,0x5b4c,0x530b,0x5b0b,0x5b2c,0x5b2b,0x5b4c,0x530b,0x5b2b,0x5b4b,0x5b2b,0x5b0b,0x6bad,0x5b2b,0x52ca,0x5b2c,0x52ea,0x52ea,0x5b0b,0x5b2b,0x5b2b,0x5b0b,0x5aeb,0x5b0b,0x5b2b,0x52ea,0x52ea,0x5b4c,0x634c,0x530b,0x634c,0x5b0b,0x5b2b,0x5b0b,0x52eb,0x634c,0x5b2c,0x5b4c,0x636c,0x5b4c,0x52ea,0x5b2b,0x530b,0x5b0b,0x634c,0x52eb,0x5b4c,0x5b4c,0x530b,0x5b2b,0x6b8d,0x634c,0x52ea,0x530a,0x530b,0x5b2b,0x634c,0x634c,0x634c,0x5b2b,0x5b2b,0x5b2b,0x5b4c,0x634c,0x5b2b,0x5b2b,0x5b0b,0x5b2b,0x6b8d,0x5b0b,0x632c,0x5b2b,0x638d,0x636c,0x4aaa,0x634c,0x6b8d,0x52eb,0x634c,0x5b2c,0x530b,0x636c,0x634c,0x5b0b,0x5b2c,0x530b,0x530b,0x5b2c,0x5b0b,0x5b2b,0x5b0b,0x5b0b,0x634c,0x634c,0x5b4c,0x5b2b,0x5b4c,0x5b2b,0x5b4c,0x5b2b,0x5b4c,0x634c,0x636c,0x5b4c,0x5b4c,0x5b2c,0x636d,0x634c,0x530b,0x63ad,0x6bad,0x5b4c,0x5b4c,0x636c,0x638d,0x636c,0x634c,0x634c,0x5b4c,0x636c,0x5b2b,0x632c,0x6bad,0x6b8d,0x634c,0x636c,0x636c,0x5b2b,0x5b2b,0x5b0b,0x5aeb,0x6b6d,0x636d,0x634c,0x634c,0x636c,0x634c,0x530b,0x5b2b,0x634c,0x5b0b,0x634c,0x636c,0x636c,0x5b0b,0x636d,0x6bad,0x5b2c,0x638d,0x636d,0x6bad,0x634c,0x73ad,0x634c,0x632c,0x634c,0x5aeb,0x634c,0x5b4c,0x636c,0x634c,0x5aeb,0x632c,0x6bae,0x6bad,0x634c,0x5b0b,0x6b6d,0x634c,0x634c,0x632c,0x636d,0x6b6d,0x634c,0x5b2c,0x634c,0x634c,0x634c,0x636c,0x634c,0x6b4d,0x632c,0x636d,0x636c,0x6b6d,0x634c,0x632c,0x6b6d,0x632c,0x5b2c,0x5b0b,0x632c,0x5b2b,0x5b0b,0x634c,0x5b2c,0x634c,0x5b0b,0x5b0b,0x632c,0x5b0b,0x5b0b,0x5b0b,0x632c,0x634c,0x634c,0x632c,0x5aeb,0x5aeb,0x5b0b,0x5aeb,0x632c,0x5b0b,0x5aeb,0x632c,0x5b2c,0x632c,0x632c,0x632c,0x5b0b,0x634c,0x6b6d,0x5aeb,0x632c,0x634c,0x634c,0x634c,0x634c,0x636c,0x634c,0x634c,0x634c,0x632c,0x6b6d,0x634c,0x632c,0x634c,0x632c,0x634c,0x634c,0x634d,0x632c,0x632c,0x634c,0x634c,0x632c,0x632c,0x634c,0x632c,0x632c,0x632c,0x632c,0x634c,0x6b6c,0x6b4c,0x6b6c,0x634c, +0x5b2c,0x634c,0x5b2b,0x5b2b,0x636c,0x632c,0x5b2b,0x6b8d,0x636c,0x636c,0x632b,0x636c,0x638c,0x634c,0x634c,0x636c,0x5b0b,0x634c,0x6bad,0x634c,0x634c,0x634c,0x634c,0x636c,0x636c,0x6b6c,0x5b0b,0x52eb,0x5b0b,0x52ea,0x52eb,0x6b8c,0x632b,0x5b4b,0x5b0b,0x636c,0x634c,0x636c,0x5aea,0x5b2b,0x636c,0x634c,0x634c,0x5b0b,0x634c,0x5b2b,0x52ca,0x5b0b,0x632b,0x52eb,0x52cb,0x5b0b,0x5b0b,0x52ea,0x5b0b,0x52ea,0x5b2b,0x636c,0x5b0b,0x5b0b,0x5b2b,0x52ea,0x52ea,0x5b2b,0x634c,0x52ea,0x5b4c,0x5b4c,0x634c,0x636c,0x5b2b,0x5b2b,0x5b2b,0x5b0b,0x5b2b,0x52ea,0x5b0b,0x5b2c,0x52ea,0x52ca,0x5b2b,0x5b2b,0x5b0b,0x634c,0x634c,0x5b2b,0x52eb,0x5b2b,0x5b0b,0x530b,0x530b,0x52ea,0x5b2b,0x5b2b,0x5b0b,0x530b,0x52ea,0x52ea,0x5aeb,0x52ea,0x52eb,0x5b2c,0x5b2c,0x4aca,0x5b0b,0x530b,0x5b2b,0x5b2b,0x5b2b,0x52ea,0x5b4c,0x5b4c,0x5b4c,0x636d,0x5b2c,0x5b0b,0x5b2b,0x5b2b,0x5b4c,0x5b2b,0x5b0b,0x5b2b,0x530b,0x5b2b,0x52ea,0x5b4c,0x5b2b,0x634c,0x634c,0x5b2b,0x52ea,0x5b0b,0x4aaa,0x5b4c,0x5b0b,0x5b2b,0x52ea,0x5b2b,0x5b2c,0x5b2b,0x636c,0x636c,0x5b2b,0x4aaa,0x5b0b,0x52ca,0x52ca,0x530b,0x4aaa,0x52eb,0x5b4c,0x5b2b,0x634c,0x52ca,0x52ea,0x636d,0x632c,0x5b2c,0x5b2b,0x634c,0x634c,0x5b2b,0x5b2c,0x634c,0x634c,0x636c,0x636c,0x5b2b,0x5b0b,0x52eb,0x6b8d,0x5b2b,0x6bad,0x636d,0x634c,0x5b4c,0x634c,0x5b0b,0x5b4c,0x5b0b,0x634c,0x634c,0x5b0b,0x636d,0x5b2b,0x6b6c,0x636d,0x5b0b,0x5b2b,0x5aeb,0x634c,0x634c,0x5b0b,0x5aeb,0x5b2c,0x636d,0x52eb,0x5b0b,0x636d,0x634c,0x5b2b,0x5b2c,0x634c,0x634c,0x5b0c,0x5b0b,0x5b0b,0x5b2c,0x5b2b,0x6b8d,0x634c,0x636d,0x5aeb,0x634c,0x634c,0x632c,0x5b2c,0x5b0b,0x632c,0x5b2b,0x5b2c,0x5b2b,0x634c,0x634c,0x632c,0x6b8d,0x73ae,0x5b0b,0x634c,0x636d,0x6b6d,0x5b0b,0x5b2c,0x636d,0x5b0c,0x632c,0x5b2c,0x5b0b,0x632c,0x5b0b,0x634c,0x630b,0x632c,0x6b6d,0x634c,0x632c,0x5b2b,0x5b2c,0x632c,0x5b0b,0x5b2c,0x5b0b,0x5b2c,0x632c,0x632c,0x630b,0x632c,0x632c,0x6b4c,0x6b6d,0x632c,0x5b0b,0x5aeb,0x5b0b,0x634c,0x5aeb,0x5b0b,0x634c,0x5b0b,0x630c,0x630c,0x52ea,0x632c,0x5b0b,0x632c,0x634c,0x5aca,0x5aeb,0x5b2c,0x5b2c,0x6b4c,0x630b,0x5b0b,0x634c,0x632c,0x5b0b,0x632c,0x5b2c,0x632c,0x634c,0x634c,0x632c,0x6b4c,0x632c,0x634c,0x634c,0x6b6c,0x632c,0x5aeb,0x5b0b,0x632c,0x634c,0x632b,0x632c,0x632c,0x630b,0x634c,0x634c,0x630c,0x5b0b,0x630c,0x5b0b,0x630b,0x630b,0x632b,0x6b6c,0x6b6d,0x5aeb,0x632c,0x632c, +0x52eb,0x5b0b,0x632b,0x5b2c,0x5b0b,0x5b2b,0x5b2b,0x52eb,0x5b0b,0x5b2b,0x5b2b,0x5b2b,0x634c,0x5b0b,0x5b2b,0x632c,0x5b2b,0x5b4c,0x5b4c,0x52ca,0x5b2c,0x636c,0x5b4c,0x634c,0x5b2b,0x5aeb,0x5aeb,0x5aea,0x634c,0x5b2b,0x5b2b,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5b0b,0x634c,0x5b2b,0x52ea,0x636c,0x5aca,0x5b0b,0x530b,0x52ca,0x5b0b,0x5b2b,0x5b0b,0x630b,0x5aeb,0x52aa,0x52ea,0x636c,0x5b4c,0x5b2b,0x52ea,0x530b,0x634c,0x634c,0x5b2b,0x5b2b,0x5b2b,0x52ea,0x5b2b,0x5b4c,0x5b4c,0x52ea,0x5b0b,0x5b2c,0x634c,0x5b2c,0x5b2c,0x636c,0x636c,0x5b2c,0x634c,0x636c,0x52eb,0x636d,0x638d,0x52eb,0x634c,0x52ea,0x52ca,0x5b2c,0x52ca,0x5b4c,0x5b4c,0x530b,0x5b0b,0x5b2c,0x5b4c,0x530b,0x634c,0x5b4c,0x5b2c,0x632c,0x5b2b,0x636c,0x636c,0x634c,0x5b2c,0x634c,0x5b4c,0x5b2b,0x634c,0x5b4c,0x52ea,0x5b0b,0x530b,0x634c,0x634c,0x5b2b,0x638d,0x636d,0x636d,0x5b4c,0x5b2c,0x634c,0x5b0b,0x530b,0x638d,0x5b2c,0x5b2b,0x5b4c,0x5b2b,0x5b4c,0x5b4c,0x530b,0x636c,0x636c,0x5b0b,0x5b2c,0x5b0b,0x52eb,0x5b2b,0x5b4c,0x5b2b,0x636c,0x638d,0x52ea,0x5b2b,0x5b2b,0x5b4c,0x5b2c,0x5b4c,0x52ea,0x530b,0x5b2c,0x5b0b,0x5b0b,0x634c,0x636d,0x636d,0x5b2b,0x5b2c,0x5b2c,0x636c,0x636c,0x5b4b,0x634c,0x636c,0x5b2c,0x5b2c,0x5b4c,0x636c,0x634c,0x636c,0x5b4c,0x5b4c,0x5b4c,0x634c,0x634c,0x634c,0x6b8d,0x6bce,0x6b8d,0x634c,0x634c,0x638d,0x5b0b,0x52eb,0x5b2b,0x638d,0x636d,0x5b2c,0x6b8d,0x634c,0x636d,0x636c,0x5b0b,0x636c,0x632c,0x634d,0x6b8d,0x636d,0x5b2b,0x636d,0x6b8d,0x634c,0x632c,0x5b4c,0x6bae,0x5b2c,0x5b0b,0x5b0b,0x636d,0x5b2c,0x634c,0x7bef,0x6b8d,0x6b8d,0x636d,0x5b2c,0x6b8d,0x636d,0x6b6d,0x636d,0x5b2c,0x5b2c,0x636d,0x5b2c,0x5b2c,0x636c,0x636c,0x632b,0x6b8d,0x632c,0x634c,0x632c,0x5b2c,0x634c,0x632b,0x634c,0x634c,0x632c,0x5aeb,0x632c,0x632c,0x5aeb,0x5b0b,0x634c,0x634c,0x5b0b,0x636c,0x634c,0x5b0b,0x5aeb,0x5b0b,0x630c,0x632c,0x5b0b,0x5b0b,0x530b,0x5b2c,0x5b2c,0x52eb,0x632b,0x5aea,0x5b0b,0x5b2b,0x5b0b,0x52eb,0x52eb,0x5b2c,0x5b2c,0x5b0b,0x5b0b,0x632c,0x632b,0x630b,0x632c,0x5aeb,0x632c,0x5b2c,0x5b0b,0x632c,0x632c,0x6b6d,0x52eb,0x5aeb,0x632c,0x632c,0x632c,0x5b0c,0x5b0c,0x632c,0x632c,0x5b2c,0x632c,0x5b2c,0x632c,0x632c,0x5b0b,0x630c,0x632c,0x632c,0x632c,0x632c,0x632c,0x5b0b,0x5b0b,0x632c,0x630b,0x632c,0x632c,0x630c,0x634c,0x6b4c,0x632c,0x5b0b,0x5b0b,0x630b,0x5aeb,0x5aeb,0x632c,0x634c,0x5aeb,0x5b0b,0x630b,0x630b, +0x636d,0x634c,0x5b2b,0x632c,0x638d,0x6b8d,0x638c,0x636c,0x634c,0x638c,0x5b2b,0x636c,0x6b6d,0x634c,0x634c,0x634c,0x638d,0x634c,0x636c,0x638d,0x5b2b,0x6bad,0x6bad,0x634c,0x5b2b,0x634c,0x636c,0x6bad,0x636c,0x52ea,0x5b4c,0x5b2b,0x634c,0x636d,0x636d,0x5b0b,0x5b2b,0x5b0b,0x634c,0x5b0b,0x634c,0x634c,0x52ea,0x5b2b,0x52ea,0x52ea,0x5b0b,0x632c,0x634c,0x5b2b,0x5b0b,0x634c,0x5b0b,0x5b2b,0x5b4c,0x636c,0x52ca,0x52eb,0x5b0b,0x5b2b,0x5b0b,0x5b2b,0x52ca,0x52ea,0x5b2c,0x52ca,0x52eb,0x5b0b,0x52eb,0x5b0b,0x52eb,0x5b0b,0x530b,0x52ea,0x5b2b,0x52ea,0x52ca,0x5b0b,0x5b4c,0x52ca,0x52ea,0x4a89,0x52eb,0x52eb,0x4aaa,0x4aa9,0x4aaa,0x52ca,0x5b0b,0x3a28,0x4269,0x52eb,0x5b2b,0x52eb,0x52aa,0x52ca,0x52ea,0x5b2b,0x5b4c,0x5b0b,0x5b0b,0x52eb,0x52ca,0x634c,0x5b2c,0x52ca,0x5b2c,0x52eb,0x5b0b,0x52eb,0x4aaa,0x5b0b,0x4aca,0x52eb,0x52ca,0x530b,0x5b2c,0x5b0b,0x52eb,0x52eb,0x52ca,0x4aaa,0x5b0b,0x4aaa,0x530b,0x4aca,0x530b,0x530b,0x5b2b,0x5b0b,0x52eb,0x52eb,0x52ca,0x52ca,0x5b2c,0x5b0b,0x52eb,0x52ca,0x5b2b,0x52ca,0x4aaa,0x4aaa,0x52ca,0x4a89,0x52ca,0x4aca,0x52ea,0x5b0b,0x5aeb,0x52ca,0x5b0b,0x530b,0x52ca,0x52eb,0x52ca,0x5b2c,0x5b0b,0x530b,0x5b4c,0x5b4c,0x634c,0x5b0b,0x530b,0x5b2b,0x52ca,0x634c,0x52eb,0x634c,0x634c,0x634c,0x5b2c,0x5aeb,0x5b0b,0x634c,0x5b2b,0x5b2c,0x634c,0x632c,0x636d,0x52eb,0x5b2c,0x634c,0x632c,0x5b0b,0x5b0b,0x52eb,0x632c,0x634c,0x636c,0x5b2c,0x634c,0x5b0b,0x632c,0x636d,0x5b0b,0x52eb,0x634c,0x634c,0x5b0b,0x5b2c,0x636d,0x636d,0x5aeb,0x5b2c,0x5b4c,0x636d,0x634c,0x6bae,0x6b6d,0x6b8d,0x6bad,0x5b2c,0x636d,0x73ce,0x6bae,0x7bef,0x636d,0x634c,0x5b2c,0x5b2c,0x634c,0x634c,0x6b8d,0x634c,0x632c,0x634c,0x6b6d,0x6b8d,0x634c,0x634c,0x5b0b,0x5b0b,0x6bad,0x6b8d,0x634c,0x73ae,0x634c,0x5b0b,0x636d,0x632c,0x632c,0x632c,0x634c,0x634c,0x6b8d,0x6b8d,0x6b8d,0x636c,0x634c,0x636c,0x634c,0x634c,0x5b2c,0x634c,0x6b8d,0x5b4c,0x634c,0x73ad,0x636c,0x5b2b,0x636d,0x5b0b,0x632c,0x634c,0x5b0b,0x634d,0x634c,0x5b0b,0x634c,0x634c,0x632c,0x5b0b,0x5b0b,0x634c,0x632c,0x5b2c,0x5b0b,0x632c,0x5b2c,0x5b0b,0x634c,0x5b0b,0x5aeb,0x5aeb,0x52eb,0x5b0c,0x634c,0x632c,0x5b0b,0x632c,0x634c,0x634c,0x632c,0x634c,0x632c,0x632c,0x632c,0x632c,0x5b0b,0x5aeb,0x5b0b,0x5aeb,0x632c,0x632c,0x634c,0x6b6d,0x5b0b,0x5b0b,0x632c,0x630c,0x5aeb,0x5acb,0x632c,0x5aeb,0x630c,0x634c,0x5b0b,0x5aeb,0x5aca,0x5aeb, +0x8491,0x8491,0x740f,0x7c30,0x740f,0x8491,0x740f,0x73ee,0x7c0f,0x6bad,0x6bad,0x6bce,0x6bad,0x6bce,0x636c,0x5b2b,0x6bce,0x6bad,0x636c,0x73ce,0x636c,0x638d,0x6bce,0x636c,0x5b2b,0x6b8d,0x638d,0x6b8d,0x5b2c,0x6b8d,0x636c,0x5b2c,0x5aeb,0x52eb,0x52eb,0x636c,0x634c,0x530b,0x52ca,0x632c,0x52ea,0x52ea,0x5b4c,0x530a,0x52ca,0x52eb,0x530b,0x4aca,0x52eb,0x4aaa,0x52ca,0x52ca,0x4aaa,0x4aaa,0x4248,0x5b0b,0x4aca,0x4268,0x4aaa,0x4aca,0x52ca,0x4a89,0x4aaa,0x4a89,0x4a69,0x4a89,0x4a89,0x4aaa,0x4248,0x4228,0x4248,0x4a89,0x4a69,0x4a89,0x4268,0x52aa,0x4aa9,0x4269,0x3a07,0x4269,0x4aa9,0x3a27,0x31c6,0x4a89,0x4248,0x3a28,0x4a89,0x4a89,0x4228,0x4228,0x39e7,0x3a28,0x3a27,0x4248,0x4228,0x4269,0x4a89,0x4268,0x4248,0x4248,0x4269,0x4269,0x3a07,0x4248,0x4269,0x3a08,0x3a07,0x3a07,0x4a89,0x4248,0x4268,0x4248,0x3a07,0x3a07,0x3a08,0x4248,0x3a28,0x39e7,0x4248,0x4a69,0x3a08,0x4228,0x31a6,0x3a07,0x4248,0x3a07,0x4249,0x3a28,0x4248,0x39e7,0x31a6,0x3a07,0x31e7,0x4248,0x3a07,0x39e7,0x39e7,0x31c6,0x2986,0x31c7,0x31a6,0x39c7,0x2986,0x31c7,0x3a07,0x4248,0x4207,0x39e7,0x3a07,0x3a07,0x4269,0x3a08,0x3a07,0x3a08,0x3a28,0x4248,0x3a08,0x3a08,0x3a07,0x3a08,0x39e7,0x3a08,0x4228,0x3a07,0x4228,0x4228,0x3a07,0x4a69,0x31c6,0x3a07,0x4a69,0x3a07,0x31a6,0x4a89,0x4269,0x4269,0x4a69,0x31c7,0x31e7,0x4a69,0x4248,0x4228,0x39e7,0x4248,0x4a69,0x52ca,0x52ca,0x4aaa,0x4aa9,0x4a89,0x4a89,0x52aa,0x4a89,0x4a69,0x5aeb,0x52ca,0x4aaa,0x4a69,0x52aa,0x5b0b,0x5b0b,0x52ca,0x52aa,0x4aaa,0x5b0b,0x52ca,0x634c,0x634c,0x5b0b,0x5b2b,0x5aeb,0x52ca,0x5b0c,0x5b2c,0x632c,0x634d,0x636d,0x5b0b,0x634c,0x636d,0x73ce,0x634c,0x7c0f,0x632c,0x6bae,0x6b6d,0x5b0b,0x6bad,0x636d,0x6b6d,0x73ce,0x73ae,0x73ce,0x7bef,0x73ce,0x8430,0x73ae,0x73ef,0x7c30,0x7c0f,0x73ce,0x6b8d,0x6bae,0x73ce,0x73ce,0x7c30,0x7c0f,0x8c91,0x7c0f,0x73ce,0x7c0f,0x7c0f,0x73ef,0x73ae,0x7c0f,0x7c0f,0x73ce,0x8c91,0x8430,0x7bef,0x8430,0x73ce,0x7c0f,0x8450,0x73ce,0x738d,0x7bee,0x73ce,0x7c0f,0x7c2f,0x8451,0x8471,0x8c91,0x8430,0x6bae,0x73ef,0x73ce,0x8430,0x7c0f,0x73ce,0x7c0f,0x7bef,0x73ae,0x8450,0x8450,0x8450,0x7c0f,0x6b6d,0x73ce,0x73ae,0x73ce,0x73ee,0x7bee,0x7c0f,0x8450,0x7bef,0x7bef,0x73ce,0x7bef,0x73ae,0x7bef,0x73ce,0x7bce,0x8430,0x7c30,0x7bef,0x8430,0x73ae,0x7bcf,0x8430,0x7bef,0x7bef,0x73ae,0x6b6d,0x73ce,0x73ae,0x6b8d,0x840f,0x7bce,0x7bee, +0x52eb,0x634c,0x4aaa,0x52ca,0x4aaa,0x52eb,0x4269,0x4aaa,0x52ca,0x4269,0x4a89,0x4269,0x4249,0x4228,0x31c7,0x39e7,0x3a08,0x4228,0x31c6,0x3a08,0x3a08,0x3a28,0x29a6,0x4249,0x31e7,0x39e7,0x39e7,0x2965,0x31a6,0x31c7,0x3a07,0x31c6,0x31c6,0x2985,0x2985,0x39e7,0x31c7,0x2144,0x2965,0x39e7,0x2124,0x31c7,0x31a6,0x2965,0x39c7,0x31a6,0x2965,0x2986,0x2965,0x18c3,0x2965,0x31c6,0x31c6,0x2965,0x2945,0x31a6,0x2965,0x2124,0x2965,0x31a6,0x39c7,0x2144,0x2986,0x2945,0x2124,0x31c6,0x2124,0x2986,0x2145,0x2945,0x2945,0x2965,0x2985,0x2124,0x2144,0x2985,0x2965,0x2124,0x2104,0x2145,0x31a6,0x2145,0x18e3,0x2124,0x2965,0x2965,0x2145,0x2104,0x2124,0x2144,0x2985,0x2965,0x2104,0x2985,0x18e3,0x31a6,0x2985,0x2965,0x2144,0x2144,0x2965,0x2965,0x2945,0x2945,0x2124,0x2144,0x2945,0x2124,0x2945,0x2965,0x2965,0x2965,0x2945,0x2104,0x2965,0x2144,0x2124,0x2124,0x2965,0x31c6,0x2144,0x2145,0x18e3,0x2986,0x2965,0x2965,0x2144,0x2124,0x2965,0x2145,0x2145,0x2144,0x2965,0x2945,0x1903,0x2985,0x2965,0x2965,0x2144,0x2124,0x2965,0x2124,0x2124,0x2104,0x2124,0x2985,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2965,0x2985,0x2985,0x2965,0x31a6,0x2145,0x2124,0x2965,0x2965,0x2965,0x2945,0x2145,0x2986,0x2986,0x2144,0x2945,0x2945,0x2985,0x2986,0x2965,0x31c6,0x31c6,0x31c6,0x31c6,0x2965,0x2124,0x2965,0x2986,0x2965,0x3186,0x39e7,0x31c6,0x3a28,0x39e7,0x31a6,0x31a6,0x31c7,0x39c7,0x3a08,0x39e7,0x2986,0x39e7,0x3a07,0x31c7,0x2986,0x31c7,0x31e7,0x4228,0x4249,0x3a07,0x39e7,0x39e7,0x39e7,0x4a89,0x4a8a,0x4249,0x4249,0x39e7,0x3a08,0x4249,0x39e7,0x4a8a,0x4228,0x4a8a,0x52cb,0x4269,0x4269,0x4a89,0x4a89,0x52eb,0x4a8a,0x52ca,0x52aa,0x52aa,0x4aaa,0x4a8a,0x4a69,0x5b0b,0x5b2b,0x5aeb,0x52aa,0x632c,0x5b0c,0x4a8a,0x73ae,0x634d,0x6bae,0x634c,0x632c,0x632c,0x52eb,0x4a89,0x5b0b,0x5aeb,0x634d,0x6b6d,0x5b0b,0x632c,0x5b0c,0x6b6d,0x5b0c,0x632c,0x52eb,0x5b2c,0x632c,0x7bef,0x738e,0x738d,0x73ae,0x6b8d,0x6b8d,0x738e,0x6b4d,0x6b6d,0x73ad,0x6b8d,0x6b8d,0x8410,0x8451,0x7bef,0x7bcf,0x634d,0x738e,0x7bce,0x8430,0x7bcf,0x7bef,0x73ce,0x7c30,0x73cf,0x8430,0x7c0f,0x8c91,0x840f,0x73ce,0x73ae,0x738d,0x7bef,0x73ce,0x8430,0x73ae,0x7bef,0x8450,0x7c0f,0x8470,0x8430,0x7c0f,0x8c51,0x7bef,0x7bce,0x840f,0x8430,0x7bef,0x8430,0x8450,0x8c71,0x8c50,0x840f,0x842f,0x7bef,0x8430,0x73ce,0x840f,0x8c50,0x8c71,0x8450,0x8c91, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x10a2,0x0000,0x0000,0x0861,0x0820,0x0820,0x1061,0x1082,0x0000,0x1041,0x0820,0x0000,0x1082,0x0861,0x0840,0x0820,0x0840,0x0840,0x0861,0x0861,0x0000,0x0000,0x1082,0x1081,0x0000,0x10a2,0x0020,0x0861,0x0861,0x0000,0x0020,0x0861,0x0840,0x0840,0x10a2,0x1081,0x0020,0x0820,0x0861,0x0861,0x0861,0x1081,0x18a2,0x1082,0x0861,0x0841,0x18a2,0x1061,0x1082,0x10a2,0x0840,0x1081,0x0820,0x10c2,0x10a2,0x10a2,0x0820,0x0820,0x1082,0x1081,0x0020,0x0841,0x1081,0x1082,0x0861,0x0840,0x0861,0x10a2,0x0861,0x0840,0x0841,0x1061,0x1082,0x1082,0x1081,0x0000,0x0841,0x1081,0x0841,0x10a2,0x0821,0x0841,0x0861,0x0861,0x0861,0x0841,0x0861,0x0840,0x0861,0x0861,0x1081,0x0861,0x0861,0x0841,0x0821,0x0020,0x0021,0x0041,0x0841,0x0020,0x0820,0x1061,0x0841,0x0020,0x0000,0x0861,0x0861,0x10a2,0x0840,0x0020,0x0000,0x0841,0x0861,0x0020,0x0841,0x0861,0x0861,0x1081,0x0841,0x0841,0x0840,0x0841,0x0021,0x0841,0x0861,0x0841,0x0861,0x0861,0x1062,0x0861,0x0020,0x0840,0x0000,0x0020,0x0861,0x0000,0x0020,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0861,0x0840,0x0020,0x0020,0x0020,0x0841,0x0841,0x0000,0x0840,0x0861,0x1081,0x0841,0x0841,0x0820,0x0000,0x0820,0x0820,0x0820,0x0841,0x1082,0x0841,0x0840,0x0861,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0841,0x0841,0x0841,0x0861,0x18a2,0x0840,0x0000,0x1082,0x10a3,0x1082,0x10a2,0x2124,0x18e3,0x10a3,0x10a3,0x0000,0x10a3,0x0862,0x2124,0x1904,0x18e3,0x18c4,0x18e4,0x18c3,0x2124,0x3185,0x2124,0x10c2,0x2985,0x2124,0x2965,0x2945,0x2103,0x2965,0x2945,0x2965,0x39e7,0x39e7,0x39a6,0x31a6,0x4207, +0x39e7,0x3a07,0x4228,0x3a08,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x3a08,0x39e7,0x3a07,0x39e7,0x3a07,0x3a07,0x4228,0x3a07,0x3a07,0x39e7,0x39e7,0x3a07,0x3a28,0x3a07,0x3a07,0x39e7,0x39e7,0x39c7,0x39e7,0x39e7,0x39e7,0x3a08,0x3a07,0x4248,0x39e7,0x39e7,0x39e7,0x4248,0x3a07,0x3a07,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x31c6,0x3a07,0x3a28,0x3a07,0x31e7,0x3a07,0x39e7,0x3a07,0x39e7,0x31c7,0x4228,0x3a07,0x39e7,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x4248,0x4248,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x3a28,0x3a07,0x39e7,0x39e7,0x3a07,0x3a07,0x31e7,0x39e7,0x3a07,0x39e7,0x3a07,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x4228,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x31c6,0x39e7,0x39e7,0x31c6,0x39e7,0x31c7,0x3a08,0x3a07,0x39e7,0x31e7,0x39e7,0x39e7,0x3a07,0x39e7,0x3a07,0x39e7,0x3a07,0x31e7,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x3a07,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x31c6,0x31e7,0x3a07,0x3a07,0x31c7,0x31c6,0x31c7,0x31c7,0x31e7,0x31e7,0x39e7,0x31c6,0x39e7,0x39e7,0x39e7,0x31c7,0x31e7,0x31c6,0x31c6,0x39e7,0x31c6,0x31c6,0x31c6,0x31e7,0x31c6,0x31c7,0x39e7,0x39e7,0x31c6,0x39e7,0x4228,0x31c6,0x31a6,0x4228,0x3a07,0x39e7,0x3a07,0x39e7,0x39c7,0x39c7,0x31c6,0x31c6,0x3a07,0x39e7,0x3a07,0x3a07,0x3a07,0x3a07,0x39e7,0x3a07,0x39e7,0x31c6,0x39e7,0x31e7,0x39e7,0x39e7,0x39e7,0x31c6,0x3a07,0x39e7,0x39c7,0x39c7,0x39e7,0x31c6,0x3a07,0x39e7,0x31c6,0x39e7,0x39e7,0x39e7,0x39c7,0x39e7,0x31c6,0x31a6,0x31c6,0x39e7,0x31e7,0x39e7,0x39c7,0x39e7,0x31c7,0x31c6,0x39e7,0x31c6,0x39c7,0x39c7,0x39e7,0x39e7,0x3a07,0x31c6,0x31c6,0x31c6,0x31c6,0x31c7,0x31c7,0x31c7,0x31c6,0x39c7,0x31c6,0x31c6,0x39c7,0x39e7,0x31c6,0x31c6,0x31a6,0x31c6,0x31c6,0x31c6,0x31a6,0x31a6,0x31c6,0x31c7,0x31c6,0x31a6,0x31a6,0x31c6,0x31c6,0x31c6,0x31a6,0x2986,0x31a6,0x31c6,0x31c7,0x31a6,0x31a6,0x3186,0x31a6,0x31a6,0x31c6,0x31a6,0x3186,0x3186,0x31a6,0x3186,0x2965,0x3186,0x2965,0x2986,0x2965,0x31a6,0x31c6,0x2985,0x2985,0x31a6,0x3186,0x3186,0x2965,0x3186,0x3186,0x3185,0x2965,0x3185,0x31a6,0x2144,0x2965,0x2945,0x2965,0x2965,0x2965,0x2965,0x2944,0x2944,0x2124,0x2144,0x2944,0x2944,0x2124,0x2104,0x2124,0x2124,0x2104,0x18e3,0x18e3,0x2124,0x2125,0x2104,0x1903,0x18e3,0x10c3,0x1082,0x1082,0x1082,0x1082, +0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x4248,0x4a89,0x39e7,0x3a07,0x3a07,0x4228,0x39e7,0x3a07,0x3a08,0x39e7,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x39e7,0x3a07,0x3a28,0x3a07,0x3a07,0x3a28,0x3a07,0x3a08,0x3a07,0x4248,0x4248,0x3a07,0x3a28,0x3a28,0x3a07,0x4228,0x3a28,0x4228,0x3a28,0x3a07,0x4228,0x3a28,0x39e7,0x4228,0x3a28,0x3a07,0x39e7,0x3a07,0x4228,0x3a07,0x3a07,0x3a07,0x3a28,0x4248,0x3a28,0x3a28,0x4228,0x4228,0x3a07,0x3a07,0x39e7,0x3a28,0x3a07,0x4248,0x3a07,0x4228,0x3a28,0x3a07,0x4228,0x3a07,0x3a07,0x4248,0x3a28,0x4228,0x3a07,0x39e7,0x3a07,0x4228,0x3a28,0x4228,0x3a07,0x39e7,0x4228,0x3a28,0x4228,0x3a28,0x4228,0x4228,0x3a28,0x3a07,0x4228,0x4228,0x3a28,0x4228,0x4248,0x4228,0x3a07,0x4248,0x4248,0x4228,0x4228,0x4248,0x4248,0x4228,0x4248,0x3a07,0x4248,0x4228,0x4248,0x4248,0x4228,0x4248,0x4248,0x4248,0x3a07,0x3a07,0x3a07,0x3a28,0x4248,0x3a07,0x4269,0x4248,0x3a28,0x4248,0x4228,0x3a28,0x4248,0x4248,0x4228,0x4248,0x4248,0x4248,0x4248,0x3a28,0x4228,0x4228,0x4228,0x4248,0x4248,0x4228,0x4269,0x4a89,0x4248,0x4a69,0x4248,0x4228,0x4228,0x4228,0x4228,0x3a07,0x4228,0x4228,0x4248,0x4269,0x4248,0x4228,0x4248,0x4269,0x4248,0x4248,0x4228,0x4248,0x4228,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4228,0x4248,0x4248,0x4248,0x4248,0x4248,0x4a69,0x4248,0x4248,0x4a69,0x4248,0x4228,0x4a49,0x4268,0x4248,0x4248,0x4228,0x4248,0x4248,0x4248,0x4228,0x4228,0x4228,0x4228,0x4268,0x4248,0x4248,0x4248,0x4228,0x4228,0x4228,0x4249,0x4248,0x4228,0x4a48,0x4228,0x4228,0x4228,0x4248,0x4a69,0x4228,0x4208,0x4248,0x4248,0x3a28,0x3a28,0x4248,0x4248,0x4228,0x4248,0x4228,0x4248,0x4248,0x4a89,0x4a69,0x4249,0x4249,0x4249,0x4249,0x4248,0x4228,0x4228,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4228,0x4228,0x4228,0x4228,0x4248,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4248,0x4228,0x4228,0x4228,0x4228,0x4248,0x4228,0x3a07,0x3a07,0x4228,0x4207,0x4208,0x4248,0x4228,0x4208,0x4207,0x4208,0x4228,0x4248,0x4228,0x4228,0x4228,0x4208,0x3a07,0x4248,0x4208,0x4208,0x3a07,0x4208,0x4228,0x3a08,0x4208,0x4228,0x4228,0x4208,0x4207,0x4228,0x3a08,0x4228,0x4228,0x3a07,0x39e7, +0x39e7,0x3a07,0x39e7,0x39e7,0x3a07,0x3a07,0x3a07,0x4228,0x3a08,0x39e7,0x39e7,0x4208,0x4228,0x4228,0x3a07,0x3a07,0x39e7,0x3a07,0x3a08,0x3a07,0x39e7,0x39e7,0x39e7,0x3a28,0x4208,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x3a07,0x3a08,0x3a07,0x3a28,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x4228,0x4269,0x4248,0x4228,0x4228,0x3a28,0x4228,0x4228,0x4248,0x4248,0x4228,0x3a07,0x4228,0x4228,0x3a28,0x4248,0x4228,0x4248,0x4248,0x4228,0x4249,0x3a08,0x3a07,0x4228,0x4228,0x4228,0x4248,0x4269,0x4228,0x4228,0x3a08,0x4248,0x4228,0x4228,0x4248,0x4248,0x4228,0x4248,0x4248,0x4248,0x4a49,0x4248,0x4228,0x4268,0x4248,0x4248,0x3a28,0x3a28,0x4248,0x4248,0x4248,0x4248,0x4228,0x4228,0x4228,0x3a28,0x3a28,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x3a28,0x4248,0x4248,0x52ca,0x5b0b,0x4248,0x4248,0x4248,0x3a28,0x4248,0x4248,0x4228,0x4248,0x4248,0x4a69,0x4269,0x4269,0x4248,0x4a89,0x4228,0x4248,0x4228,0x4228,0x4269,0x4248,0x4248,0x4269,0x4248,0x4248,0x4248,0x4248,0x4269,0x4a89,0x4248,0x4268,0x4a89,0x4248,0x4248,0x4248,0x4269,0x4269,0x4248,0x4248,0x4228,0x4248,0x4248,0x4248,0x4a89,0x4248,0x4248,0x4248,0x4248,0x4a89,0x4a89,0x4248,0x4248,0x4248,0x3a28,0x4249,0x4248,0x4248,0x4a69,0x4269,0x4248,0x4a89,0x4aa9,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4a69,0x4248,0x4a89,0x4248,0x4248,0x4248,0x4a69,0x4269,0x4269,0x4248,0x4248,0x4269,0x4248,0x4a69,0x4248,0x4249,0x4249,0x4249,0x4a69,0x4a69,0x4269,0x4248,0x4248,0x4248,0x4248,0x4268,0x4248,0x4248,0x4248,0x4228,0x4248,0x4a69,0x4a69,0x4a69,0x4a69,0x4248,0x4228,0x4248,0x4a69,0x4248,0x4248,0x4248,0x4248,0x4269,0x4228,0x4228,0x4a69,0x4249,0x4248,0x4228,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4269,0x4228,0x4248,0x4a48,0x4a48,0x4228,0x4228,0x4248,0x4228,0x4228,0x4228,0x4a49,0x4228,0x4228,0x4228,0x4248,0x4248,0x4a69,0x4a69,0x4a49,0x4a49,0x4a69,0x4a89,0x4a49,0x4a49,0x4248,0x4a48,0x4228,0x4248,0x4a89,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4248,0x4a49,0x39e7,0x4228,0x4228,0x4228,0x4228,0x3a08,0x3a08,0x4228,0x4228,0x4228,0x4a69,0x4248,0x4228,0x4208,0x4208,0x4228,0x4208,0x4208,0x4208,0x3a08,0x3a07,0x3a08,0x4208,0x4248,0x4228,0x4249,0x4208,0x4228,0x4228,0x3a07,0x4248,0x4207,0x4228,0x4a49,0x3a08,0x4228,0x4228,0x4248,0x4228,0x4228,0x4249,0x4228,0x4228,0x4228,0x4228,0x4208, +0x39c6,0x31a6,0x31a6,0x39c7,0x31c6,0x31c6,0x31c6,0x31a6,0x2986,0x31c6,0x31c6,0x31a6,0x31a6,0x3186,0x31a6,0x39c7,0x3186,0x2986,0x3186,0x31a6,0x31c6,0x31a6,0x31c6,0x31c6,0x31a6,0x2985,0x3186,0x31a6,0x31a6,0x31a6,0x31c6,0x31c6,0x31c6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31a6,0x31c6,0x31a6,0x31c6,0x39c6,0x31c6,0x31e7,0x39e7,0x31c6,0x31c6,0x39e7,0x39e7,0x39e7,0x39e7,0x39c7,0x39c6,0x39e7,0x39e7,0x39e7,0x39e7,0x31c7,0x39e7,0x31c6,0x31a6,0x39e7,0x31c6,0x31c7,0x3a08,0x3a28,0x39e7,0x39e7,0x31c6,0x31c6,0x31c7,0x39e7,0x39e7,0x31c7,0x3a07,0x31c6,0x31c6,0x3a07,0x39e7,0x39c6,0x39e7,0x39c6,0x39e7,0x39e7,0x4208,0x39e7,0x39e7,0x4228,0x39e7,0x31e7,0x31c6,0x39e7,0x31e7,0x31c6,0x31c6,0x31c7,0x39c6,0x31c6,0x39e7,0x39e7,0x39e7,0x31a6,0x31c6,0x39e7,0x4248,0x4a89,0x39e7,0x39e7,0x39e7,0x39e7,0x39e7,0x31c6,0x3a07,0x39e7,0x39e7,0x3a07,0x39e7,0x31c7,0x39e7,0x3a08,0x39e7,0x31e7,0x39e7,0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x31c6,0x39e7,0x3a07,0x39e7,0x39e7,0x3a08,0x39e7,0x31c6,0x31e7,0x3a07,0x3a07,0x39e7,0x39c6,0x31a6,0x39e7,0x3a07,0x39e7,0x39c6,0x39e7,0x3a07,0x3a07,0x39e7,0x39e7,0x39c7,0x31a6,0x31c7,0x39e7,0x31e7,0x3a07,0x3a07,0x3a07,0x39e7,0x39e7,0x4228,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x39e7,0x39e7,0x3a07,0x4208,0x3a07,0x3a07,0x4228,0x3a07,0x3a07,0x39e7,0x4208,0x4208,0x3a07,0x4228,0x3a07,0x39e7,0x3a07,0x39e7,0x4228,0x4248,0x3a08,0x4228,0x4a69,0x39e7,0x39c7,0x3a07,0x3a07,0x31c7,0x3a07,0x4228,0x4248,0x39e7,0x39e7,0x3a07,0x3a07,0x4208,0x4228,0x3a07,0x39c7,0x4228,0x4228,0x4208,0x4208,0x4228,0x4208,0x4228,0x4207,0x3a07,0x3a07,0x4228,0x4228,0x39e7,0x3a07,0x4228,0x3a28,0x3a07,0x3a07,0x4228,0x39e7,0x39e7,0x39e7,0x39e7,0x4228,0x4228,0x4228,0x4228,0x39e7,0x39e7,0x3a07,0x4208,0x39e7,0x3a07,0x3a07,0x4208,0x4208,0x4207,0x4228,0x4a49,0x4228,0x4248,0x4228,0x4207,0x3a07,0x39e7,0x4228,0x4208,0x4208,0x3a07,0x39e7,0x39c7,0x39e7,0x39e7,0x3a07,0x4228,0x4228,0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x39e7,0x39c7,0x39e7,0x4228,0x4248,0x4248,0x39e7,0x4207,0x4228,0x39c7,0x39c7,0x3a07,0x39e7,0x39e7,0x39e7,0x4207,0x39e7,0x4228,0x4228,0x4208,0x3a07,0x39e7,0x39e7,0x3a07,0x39e7,0x4208,0x39e7,0x39e7,0x4207,0x4228,0x4207,0x39e7,0x4208,0x39e7,0x39c7,0x39e7,0x39e7,0x39e7,0x39e7, +0x31c6,0x3185,0x39e6,0x39c6,0x39e7,0x3a07,0x3a07,0x4228,0x3a07,0x3a07,0x39c6,0x31a6,0x31c6,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x31c6,0x39e7,0x4207,0x4228,0x4228,0x3a07,0x4227,0x4228,0x4228,0x4248,0x4227,0x4228,0x3a07,0x39e7,0x4228,0x4207,0x3a07,0x4228,0x3a07,0x3a07,0x4228,0x4248,0x4248,0x3a07,0x3a07,0x3a07,0x39e7,0x4227,0x3a07,0x3a07,0x3a07,0x31c6,0x4248,0x4228,0x3a07,0x3a07,0x4228,0x3a07,0x39e7,0x3a07,0x3a07,0x3a07,0x3a07,0x31c6,0x4248,0x4248,0x39e7,0x4248,0x39e7,0x3a07,0x3a27,0x3a07,0x3a27,0x3a07,0x3a27,0x31c6,0x31e6,0x3a07,0x4227,0x39e7,0x31c6,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x4228,0x3a27,0x31e7,0x39e7,0x3a07,0x3a07,0x3a07,0x4228,0x4228,0x3a07,0x39e7,0x39e7,0x31a6,0x3a27,0x39e7,0x31c6,0x3a07,0x31e7,0x3a27,0x3a07,0x3a07,0x39e7,0x31a6,0x31c6,0x39e6,0x3a07,0x3a07,0x31c6,0x3a07,0x31c6,0x39e7,0x39e7,0x31a6,0x31a6,0x31c6,0x39e6,0x3a27,0x31c6,0x31a6,0x39e7,0x3a07,0x3a07,0x3a07,0x31a6,0x31e7,0x3a28,0x31e7,0x2986,0x39e7,0x4228,0x39e7,0x31e7,0x2985,0x39e7,0x39e7,0x39e6,0x31c6,0x29a5,0x31c6,0x31a6,0x2985,0x31a6,0x2985,0x2985,0x31a6,0x31c6,0x31c7,0x31c7,0x2144,0x3a07,0x4228,0x31a6,0x39e7,0x39e7,0x31c6,0x31a6,0x31a6,0x3a07,0x4248,0x3a07,0x3a28,0x31c6,0x31a6,0x3a08,0x31c6,0x39e7,0x29a5,0x3a07,0x31c6,0x31a6,0x39c6,0x31c6,0x31c6,0x31c6,0x31c6,0x3186,0x3186,0x2985,0x31c6,0x2985,0x39e7,0x39e7,0x31a6,0x31a6,0x39e7,0x39c7,0x39e7,0x31a6,0x39c7,0x39e7,0x39e7,0x39e7,0x39e7,0x39c6,0x31c6,0x3a07,0x31c6,0x31a6,0x31c6,0x3a07,0x31e6,0x31a6,0x39e6,0x29a5,0x31a6,0x31a6,0x31a6,0x39c7,0x31c6,0x31c6,0x31c6,0x31a6,0x31a6,0x31c6,0x31a6,0x31e7,0x31c6,0x31a5,0x31c6,0x39e6,0x31c6,0x39c7,0x31a6,0x31c6,0x39e7,0x31a6,0x31c6,0x31a6,0x31a6,0x31a6,0x3186,0x31a6,0x2986,0x2986,0x31a6,0x31a6,0x2985,0x2985,0x2986,0x31c6,0x31c6,0x31a6,0x31a6,0x3186,0x2945,0x31a6,0x31a6,0x31a6,0x3186,0x31a6,0x2985,0x2985,0x2985,0x31a6,0x31a6,0x3186,0x31c6,0x31a6,0x3185,0x31a6,0x31a6,0x2965,0x31a5,0x31c6,0x2985,0x2965,0x31a6,0x31a6,0x3186,0x3186,0x3186,0x31c6,0x31a6,0x2944,0x2965,0x31a6,0x2985,0x3186,0x2985,0x2985,0x2965,0x31a6,0x31a6,0x3186,0x3186,0x3186,0x3186,0x3185,0x3186,0x31a6,0x31a6,0x3185,0x3185,0x3186,0x2945,0x39c7,0x39e7,0x31a6,0x31a6,0x3186,0x2985,0x31a6,0x3186,0x2985,0x31a6,0x31a6,0x31a6,0x2965,0x31a6,0x31a6,0x2965,0x3185,0x3185,0x31a6,0x2965,0x31a6, +0x636c,0x5b0b,0x52ea,0x5b0b,0x5b2b,0x634c,0x632c,0x5b2b,0x634c,0x5b2b,0x632b,0x5b0b,0x634b,0x634b,0x5b2b,0x634c,0x5b2b,0x634c,0x632b,0x5b0b,0x634c,0x634c,0x5b0b,0x634c,0x634c,0x5b0b,0x634c,0x634c,0x636c,0x5b2b,0x634c,0x5b2b,0x632b,0x5b0b,0x5b2b,0x5b4b,0x530b,0x5b2b,0x5b2b,0x636c,0x634c,0x5b0b,0x5b2c,0x632c,0x634c,0x634c,0x5b0b,0x5b0b,0x5b2c,0x52eb,0x52ea,0x5b2b,0x530b,0x52ea,0x5b0b,0x530a,0x52ea,0x5b0b,0x5b2b,0x52ea,0x52ea,0x5b0b,0x636c,0x634c,0x5b2b,0x5b2c,0x5b0b,0x52eb,0x5b0b,0x5b0b,0x5b0b,0x52eb,0x5b2c,0x5b2b,0x5b2b,0x634c,0x5b2b,0x5b0b,0x634c,0x6b6c,0x5b2b,0x636c,0x634c,0x634c,0x634c,0x5b2b,0x634c,0x5b2c,0x5b0b,0x5b2b,0x5b0b,0x634c,0x636c,0x5b2b,0x634c,0x5b4c,0x634c,0x5b4b,0x5b2b,0x5b2c,0x632c,0x5b2b,0x636c,0x634c,0x5b2b,0x636c,0x5b2b,0x634c,0x5b2b,0x634c,0x5b2b,0x52ca,0x5b2b,0x634c,0x5b0b,0x52eb,0x5b0b,0x5b0b,0x5b2b,0x52ea,0x5b2c,0x5b0b,0x52ea,0x530b,0x5b2b,0x634c,0x636c,0x530a,0x5b2c,0x5b0b,0x5b0b,0x530b,0x634c,0x634c,0x632c,0x636c,0x52ea,0x5b4c,0x5b2b,0x5b2b,0x52ea,0x5b2b,0x5b2b,0x5b0b,0x52ca,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x634c,0x634c,0x52eb,0x52ca,0x5b2c,0x5b2c,0x5b2c,0x634c,0x5b2b,0x634c,0x5b2c,0x636c,0x636c,0x638c,0x6b8d,0x634c,0x636d,0x5b0b,0x634c,0x5b2c,0x634c,0x5b2b,0x634c,0x634c,0x5b4c,0x634c,0x636d,0x5b4c,0x6b8d,0x5b2b,0x5b2b,0x632c,0x636c,0x634c,0x5b2b,0x636d,0x634c,0x636c,0x5b2b,0x634c,0x636c,0x634c,0x6bad,0x636d,0x634c,0x6b8d,0x6b8d,0x6b6c,0x636c,0x7c0f,0x73ad,0x634c,0x634c,0x6b6d,0x636c,0x636c,0x5b2b,0x636c,0x5b2b,0x636c,0x634c,0x73ad,0x6b8d,0x634c,0x5b2b,0x5b0b,0x632b,0x634c,0x5b2b,0x5b2b,0x636c,0x636c,0x632c,0x634c,0x6b6d,0x634c,0x632c,0x632c,0x634c,0x632c,0x632c,0x634c,0x5b4c,0x632c,0x634c,0x6b6d,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x632c,0x632b,0x6b8d,0x634c,0x634c,0x632c,0x632c,0x5b0b,0x632c,0x632c,0x5aeb,0x5aeb,0x630b,0x5aca,0x5aeb,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5b0c,0x5aeb,0x630b,0x5aeb,0x5b0b,0x632c,0x5b2b,0x52aa,0x5aeb,0x5aeb,0x5aeb,0x632c,0x52ca,0x5aea,0x5b0b,0x5aeb,0x52aa,0x5acb,0x5aeb,0x52ca,0x5aeb,0x52ca,0x5aeb,0x5aca,0x5aeb,0x52ca,0x5aeb,0x5aeb,0x5aeb,0x5aea,0x52ca,0x5aea,0x5aea,0x52ca,0x5aca,0x630b,0x5aca,0x528a,0x5aeb,0x52ca,0x52aa,0x5aea,0x5289,0x4a69,0x52aa,0x5289,0x52a9,0x5aea,0x4a69,0x5289,0x6b6c,0x52aa,0x4a69,0x5289,0x4a48,0x4a69,0x4a48,0x52a9,0x4a69, +0x634b,0x634b,0x634c,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x634c,0x52ea,0x5b0b,0x634c,0x634c,0x5b0b,0x5b2b,0x632c,0x632b,0x634b,0x632b,0x634c,0x636c,0x5b2b,0x634c,0x634c,0x634b,0x5b0b,0x5b2b,0x530a,0x5b2b,0x636c,0x636c,0x634c,0x632b,0x5b2b,0x634c,0x5b0b,0x5b0b,0x5b2b,0x5aea,0x5b0b,0x5b2b,0x5b0b,0x632c,0x5b2b,0x5b0b,0x634c,0x5b2b,0x5b2b,0x5b2b,0x52ca,0x52ca,0x52eb,0x5b0b,0x52ca,0x52ca,0x5b0b,0x52ca,0x4aa9,0x52ea,0x52ca,0x52ca,0x52ea,0x5b0b,0x5b0b,0x52ea,0x52eb,0x52ca,0x52ea,0x52ea,0x530b,0x52eb,0x530b,0x5b2c,0x5b4c,0x5b2b,0x5b4c,0x5b2b,0x5b2b,0x636c,0x636c,0x5b2b,0x5b2b,0x5b2b,0x52ca,0x4268,0x5b2b,0x634c,0x634c,0x5b0b,0x5b2b,0x52ea,0x5b0b,0x52ea,0x5b2b,0x634c,0x530a,0x634c,0x5b2b,0x5b2c,0x636c,0x5b2c,0x530b,0x5b2b,0x634c,0x530b,0x530b,0x530b,0x5b0b,0x636c,0x5b4c,0x5b2b,0x52eb,0x52ea,0x5b2b,0x52ea,0x530b,0x530b,0x530a,0x52ea,0x4aca,0x52ea,0x530b,0x530b,0x530b,0x5b2b,0x5b0b,0x5b4c,0x5b2b,0x5b2b,0x5b2b,0x5b4c,0x634c,0x5b2b,0x530b,0x5b4c,0x636d,0x634c,0x636c,0x634c,0x5b0b,0x6b8d,0x530b,0x52eb,0x52ca,0x5b0b,0x5b0b,0x52eb,0x5b0b,0x5b2b,0x5b2c,0x5b0b,0x5b2c,0x5b2b,0x52ea,0x4aaa,0x5b2b,0x5b0b,0x636d,0x634c,0x5b2c,0x634c,0x636d,0x5b2c,0x632c,0x636d,0x634c,0x5b4c,0x636c,0x5b2c,0x5b0b,0x5b2c,0x52ea,0x634c,0x634c,0x5b2b,0x6b6d,0x636c,0x634c,0x634c,0x73ce,0x634c,0x6b6d,0x5b2c,0x5b2c,0x6b8d,0x5b2b,0x636c,0x634c,0x636c,0x6bad,0x6bad,0x632c,0x5b2c,0x636c,0x636c,0x6bad,0x6b6c,0x7bef,0x73ce,0x6b8d,0x636d,0x5b2c,0x6b8d,0x73ce,0x6bae,0x634c,0x5b0b,0x636d,0x634c,0x73ad,0x73ce,0x634c,0x634c,0x6b6d,0x634c,0x6b6d,0x636d,0x634c,0x634c,0x5b0b,0x636c,0x6b6d,0x5b2c,0x5b0b,0x636d,0x6bad,0x634c,0x632c,0x5b0b,0x6b8d,0x6b8d,0x634c,0x634c,0x5b2b,0x634c,0x5b0b,0x634c,0x634c,0x5b2b,0x632c,0x6b6d,0x6b8d,0x636d,0x634c,0x632c,0x5b2b,0x6b6d,0x6b6d,0x6bad,0x6b6d,0x634c,0x6b6d,0x6b6d,0x632c,0x6b6d,0x634c,0x636c,0x634c,0x5b0b,0x634c,0x6b8d,0x632c,0x6b6d,0x632c,0x630b,0x634c,0x632c,0x634c,0x632c,0x632c,0x5b2b,0x5b0b,0x632c,0x630b,0x634c,0x5b2b,0x5b2b,0x630b,0x5aeb,0x632c,0x5b0c,0x634c,0x634c,0x6b6d,0x634c,0x634c,0x630b,0x632c,0x5b2c,0x5b4c,0x634c,0x5b0b,0x630b,0x630b,0x630b,0x6b4c,0x6b4c,0x630c,0x632c,0x632c,0x632c,0x632c,0x632b,0x634c,0x632c,0x5b0b,0x632c,0x632c,0x6b4c,0x632b,0x634c,0x6b8c,0x634c,0x5b2b,0x634c,0x5b2b,0x632b,0x632c,0x6b8d,0x634c, +0x634c,0x634b,0x5b2b,0x634c,0x636c,0x5b0b,0x634c,0x634c,0x5b2b,0x5b2b,0x5b0b,0x5b2c,0x632c,0x634c,0x5b2b,0x5b2b,0x632b,0x5b0b,0x634c,0x5b0b,0x634c,0x5b4c,0x632b,0x634c,0x634c,0x6b8d,0x5b4c,0x5b0b,0x5b0b,0x5aeb,0x530b,0x5b0b,0x5aeb,0x52ca,0x632c,0x632c,0x5b0b,0x52ea,0x5b0b,0x632b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x5b4c,0x5b2b,0x5b2c,0x52ea,0x4268,0x5b0b,0x52eb,0x52ea,0x52eb,0x52aa,0x52ca,0x4aa9,0x5b0b,0x5b0b,0x5aea,0x52ca,0x5b0b,0x530b,0x5b0b,0x634c,0x4aa9,0x4a89,0x52ca,0x5b2b,0x4aca,0x5b2c,0x5b0b,0x5b0b,0x52ea,0x52ea,0x634c,0x5b0b,0x5b0b,0x5b0b,0x52ea,0x4a89,0x52eb,0x530b,0x5b0b,0x52eb,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x52eb,0x5b0b,0x5b0b,0x5b0b,0x52eb,0x634c,0x5b0b,0x52eb,0x636c,0x530b,0x530b,0x5b2b,0x530b,0x5b2b,0x5b2b,0x530b,0x52ea,0x4289,0x52eb,0x52ea,0x5b0b,0x52ca,0x52ca,0x52ca,0x52ea,0x5b2b,0x530b,0x530b,0x5b0b,0x530b,0x5b2b,0x5b0b,0x4aca,0x530b,0x52eb,0x5b0b,0x4aca,0x52ca,0x52eb,0x5b2b,0x634c,0x52eb,0x632b,0x5b0b,0x530b,0x5b0b,0x5b2b,0x5b0b,0x634c,0x5aeb,0x52eb,0x636c,0x5b0b,0x52ca,0x5b0b,0x52ea,0x52ca,0x5b0b,0x5b2b,0x5b2b,0x634c,0x52ea,0x5b0b,0x5b4c,0x5b0b,0x5b0b,0x5b0b,0x5b2b,0x5b4c,0x5b2c,0x5aeb,0x530b,0x636d,0x5b0b,0x5b2c,0x634c,0x52ea,0x636c,0x5b0b,0x4aaa,0x530b,0x6b6d,0x5b2b,0x5b4c,0x52eb,0x634c,0x632c,0x634c,0x6b8d,0x6b8d,0x636d,0x636d,0x632c,0x5b0b,0x5b2c,0x636c,0x5b0b,0x632c,0x73ae,0x6b8d,0x636d,0x634c,0x636c,0x5b2c,0x634c,0x636c,0x634c,0x5b0b,0x636d,0x632c,0x5b2c,0x6b8d,0x5b4c,0x634c,0x6b8d,0x6b6d,0x5b2c,0x5aeb,0x5b0b,0x5b2c,0x6b8d,0x6b8d,0x6b8d,0x5b2c,0x6b6d,0x738e,0x634c,0x634c,0x6b6d,0x636d,0x634c,0x634c,0x634c,0x6bad,0x73ae,0x5b0b,0x634c,0x6b6c,0x632c,0x634c,0x636c,0x634c,0x6b4d,0x632c,0x634c,0x632c,0x5b0b,0x6b4c,0x6b8d,0x6b6c,0x6b6c,0x5b0b,0x52cb,0x5b2c,0x634c,0x632c,0x634c,0x738d,0x632c,0x634c,0x634c,0x634c,0x632c,0x6b4c,0x6b4c,0x73ce,0x6b6d,0x636d,0x634c,0x632c,0x634c,0x632c,0x6b4c,0x634c,0x632c,0x6b4c,0x6b6d,0x630b,0x5b0b,0x634c,0x632c,0x632c,0x636c,0x634c,0x5aeb,0x632c,0x632c,0x5b0b,0x6b6d,0x634c,0x632c,0x634c,0x5b0c,0x630b,0x632c,0x634c,0x636d,0x632c,0x632c,0x632c,0x5b0b,0x632c,0x632b,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x632c,0x5aeb,0x632c,0x5b0b,0x634c,0x5b0b,0x632c,0x634c,0x632c,0x5b0b,0x630b,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x52ca,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5aeb, +0x5b2b,0x5b2b,0x636c,0x634c,0x636c,0x52ea,0x5b0b,0x636c,0x5b0b,0x5b2b,0x5b2b,0x5b2b,0x632c,0x5b0b,0x5b2b,0x5b2b,0x5b0b,0x634c,0x5b2b,0x5b4c,0x6b8d,0x634c,0x5b2b,0x5b2b,0x634c,0x634c,0x5b2b,0x5b2b,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x52ea,0x634c,0x5b0b,0x5b0b,0x5b2b,0x5b2b,0x5b2b,0x634c,0x530b,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x5b0b,0x52eb,0x530b,0x530b,0x5b0b,0x5b0b,0x5b0b,0x52ea,0x5b4c,0x5b2c,0x4aaa,0x52eb,0x52eb,0x52ca,0x52aa,0x4a89,0x530b,0x52ca,0x52ea,0x5b0b,0x5b0b,0x5b2b,0x636c,0x5b2b,0x5b2b,0x636c,0x5b2b,0x636c,0x530b,0x530b,0x530b,0x52ea,0x5b0b,0x52ca,0x52eb,0x52ea,0x5b4c,0x52ea,0x5b0b,0x52eb,0x52ca,0x5b2b,0x5b2b,0x5b2b,0x5b0b,0x5b4c,0x636c,0x5b2b,0x52ca,0x52eb,0x52eb,0x52ca,0x5b2b,0x634c,0x5b4c,0x52ea,0x5b2b,0x634c,0x5b2b,0x5b2b,0x52ca,0x5b0b,0x5b4c,0x634c,0x5b0b,0x4aaa,0x52eb,0x52eb,0x5b0b,0x52ca,0x4aca,0x5b2b,0x5b2c,0x636c,0x5b2c,0x52ea,0x5b0b,0x52eb,0x5b2c,0x5b0b,0x530b,0x636c,0x52ca,0x634c,0x5b4c,0x52ea,0x5b2c,0x5b4c,0x5b4c,0x52ca,0x5b0b,0x636c,0x636c,0x4aca,0x636d,0x5b4c,0x634c,0x5b4c,0x5b4c,0x530b,0x5b2c,0x636c,0x634c,0x5b4c,0x5b4c,0x5b2c,0x52ea,0x636c,0x636d,0x634c,0x5b2b,0x636c,0x634c,0x638d,0x5b2c,0x636c,0x636d,0x5b2c,0x6bae,0x530b,0x5b2c,0x636c,0x530b,0x5b2c,0x5b0b,0x636d,0x6b8d,0x634c,0x636c,0x634c,0x6bad,0x6b8d,0x6bae,0x6bae,0x5b2b,0x638d,0x5b2c,0x5b2c,0x6b8d,0x636d,0x6b6d,0x5b0b,0x634c,0x5b2c,0x52eb,0x634c,0x5b2c,0x5b0b,0x636d,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x634c,0x5b2c,0x634c,0x5b2c,0x5b0b,0x634c,0x634c,0x6b8d,0x6b8d,0x632c,0x632c,0x6b8d,0x5b2b,0x5b0b,0x5b0b,0x634c,0x5b0b,0x5b0b,0x634c,0x632c,0x5b0b,0x634c,0x5b2c,0x6bae,0x7bce,0x6b6d,0x634c,0x634c,0x5b0b,0x5b2b,0x5b0b,0x6bae,0x6b8d,0x5b0b,0x634c,0x634c,0x632c,0x634c,0x636c,0x636d,0x6b6d,0x5b0b,0x6b8d,0x636c,0x5b0b,0x632c,0x634c,0x634c,0x634c,0x636c,0x634c,0x6bae,0x636d,0x632c,0x6b6d,0x632c,0x5aeb,0x6b4d,0x632c,0x632c,0x632c,0x632c,0x5aeb,0x5b2c,0x6b6d,0x634c,0x636d,0x634c,0x5b0b,0x5b2c,0x634c,0x636d,0x632c,0x6b6d,0x5b0b,0x632c,0x5b0b,0x6b8d,0x634c,0x634c,0x5aeb,0x632c,0x634c,0x634c,0x5aeb,0x6b6d,0x634c,0x632c,0x5aeb,0x5b0b,0x5b0b,0x632c,0x632c,0x6b4c,0x6b6d,0x634c,0x634c,0x630b,0x6b6c,0x6b8d,0x6b6d,0x634c,0x6b6c,0x632c,0x634c,0x73ae,0x632c,0x632c,0x6b4c,0x738d,0x630b,0x632c,0x632c,0x634c,0x5b0b,0x5b0b,0x632c,0x632c,0x5aeb,0x5aeb,0x5b0b, +0x6b8d,0x6bce,0x6b8d,0x6b8d,0x6b8d,0x636c,0x634c,0x5b0b,0x5b2b,0x5b2b,0x6bcd,0x5b4c,0x636d,0x634c,0x636c,0x6b8d,0x6b8d,0x636c,0x634c,0x73ee,0x5b2b,0x636c,0x634c,0x5b2c,0x638d,0x636c,0x634c,0x634c,0x5b2b,0x5b2c,0x5b2b,0x5b2b,0x52eb,0x530b,0x5b2c,0x5b4c,0x5b2b,0x5b2b,0x5b2b,0x6b8d,0x636c,0x634c,0x5b0b,0x5b4b,0x530b,0x5b0b,0x52eb,0x52ea,0x5b0b,0x52ca,0x4a89,0x52ca,0x4a89,0x4aaa,0x4aaa,0x4aaa,0x52aa,0x52eb,0x4a69,0x52aa,0x52eb,0x52eb,0x4aa9,0x52ca,0x4aca,0x5b2c,0x52eb,0x52ca,0x4aca,0x530b,0x5b2c,0x52ea,0x636d,0x52ea,0x52eb,0x52ca,0x52ca,0x52ca,0x4aaa,0x4a89,0x52eb,0x52ca,0x530a,0x52ca,0x4aaa,0x52eb,0x5b2b,0x4aa9,0x5aeb,0x52ca,0x4248,0x52eb,0x4a89,0x52ea,0x52ca,0x4248,0x4aaa,0x52aa,0x52eb,0x4aaa,0x52ea,0x530b,0x4aaa,0x4a89,0x4268,0x52ca,0x5aeb,0x52ca,0x52ca,0x52eb,0x4a89,0x52ca,0x4a89,0x4a69,0x4a89,0x52ca,0x4269,0x5b0b,0x5b2c,0x3a48,0x4aaa,0x52ea,0x4aaa,0x4aaa,0x52ca,0x4aa9,0x4aaa,0x4a89,0x52ca,0x52eb,0x52eb,0x5b0b,0x5b2c,0x52ca,0x4269,0x52ca,0x5b2c,0x5b2c,0x5aeb,0x52eb,0x52ca,0x5b0b,0x52eb,0x3a28,0x4aaa,0x5b0c,0x4a8a,0x52aa,0x52ca,0x4aca,0x4aaa,0x5b0b,0x52eb,0x5b0c,0x5b2c,0x5b2b,0x5b2b,0x52ca,0x5b2b,0x52eb,0x52ca,0x4a89,0x5b0b,0x5b2c,0x5b2b,0x636d,0x5b0b,0x5b0b,0x530b,0x5aeb,0x52ca,0x5b2c,0x634c,0x5b2b,0x530b,0x5b0b,0x52eb,0x634c,0x52ca,0x5b0b,0x52eb,0x52ca,0x5b0b,0x6b6d,0x5b0b,0x634c,0x5b2b,0x530b,0x5b2c,0x634c,0x5aeb,0x52ca,0x5b0b,0x5aeb,0x5aeb,0x5aeb,0x5b0b,0x634c,0x52ca,0x634c,0x632c,0x5aeb,0x5b2c,0x5b0b,0x634c,0x6b6d,0x632c,0x634c,0x5aeb,0x636d,0x634c,0x634c,0x630b,0x632c,0x52eb,0x634c,0x634c,0x632c,0x632c,0x632c,0x5b0b,0x636d,0x52eb,0x632c,0x634c,0x632c,0x634c,0x634c,0x5b0b,0x6b6d,0x6b8d,0x6b6d,0x632c,0x634c,0x632c,0x634c,0x6b8d,0x52eb,0x634c,0x632c,0x634c,0x6b8d,0x636c,0x636c,0x6bae,0x6bad,0x6b8d,0x738e,0x6b6d,0x634c,0x636c,0x6b8d,0x632c,0x6b6d,0x6b8d,0x738e,0x73ae,0x634c,0x6b6d,0x634c,0x6b4c,0x6b6d,0x6b8d,0x636d,0x6b8d,0x73ae,0x5b0b,0x5b0b,0x634c,0x634c,0x5aeb,0x5b0b,0x52ea,0x636c,0x634c,0x634c,0x73ce,0x636c,0x5b0c,0x6b4c,0x634c,0x634c,0x636d,0x6b6d,0x632c,0x632c,0x632c,0x52ca,0x632c,0x632c,0x632c,0x632c,0x630b,0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x6b6d,0x6b8d,0x6b8d,0x5b2c,0x632c,0x632c,0x634c,0x6b6d,0x6b8d,0x5aeb,0x6b4c,0x6b6d,0x632c,0x5b0b,0x73ae,0x7bce,0x6b4c,0x632c,0x5b0b,0x5b0b,0x5aeb,0x632c,0x632c, +0x6bad,0x73ce,0x638d,0x7c2f,0x740f,0x6bae,0x636d,0x634c,0x6b8d,0x636c,0x638d,0x636c,0x636d,0x636d,0x634c,0x5b0b,0x6bce,0x5b0b,0x638d,0x636d,0x5b2c,0x638d,0x634c,0x634c,0x73ce,0x636c,0x5b4c,0x5b0b,0x5b0b,0x530b,0x5b2b,0x530b,0x52ea,0x52ca,0x4aaa,0x5b4c,0x52ca,0x52ca,0x52eb,0x52eb,0x4aaa,0x52ea,0x530b,0x530b,0x52ea,0x5aeb,0x52aa,0x4aaa,0x5b0b,0x52eb,0x4aaa,0x4aaa,0x4a89,0x4a89,0x4a69,0x4a69,0x4228,0x4a69,0x4269,0x4269,0x4249,0x52ea,0x52ca,0x4248,0x52aa,0x3a08,0x4228,0x4249,0x52aa,0x4a69,0x3a08,0x3a28,0x4228,0x31e7,0x4248,0x4248,0x4228,0x4248,0x4248,0x3a07,0x39e7,0x3a07,0x4a89,0x4228,0x2986,0x39e7,0x3a08,0x31c7,0x31c6,0x4248,0x4248,0x39e7,0x4228,0x4a89,0x3a07,0x39e7,0x39e7,0x39e7,0x31c7,0x31c6,0x31c6,0x31e7,0x3a07,0x39c7,0x4228,0x3a07,0x31c6,0x2965,0x2986,0x39c7,0x2945,0x31a6,0x2145,0x31c6,0x31a6,0x31c6,0x31a6,0x2986,0x31a6,0x31a6,0x2945,0x2965,0x2986,0x31a6,0x2965,0x31c6,0x31c6,0x3186,0x31a6,0x31c7,0x4208,0x31a6,0x31a6,0x3186,0x31e7,0x3a08,0x31a6,0x2965,0x31e7,0x31a6,0x2986,0x31c7,0x39e7,0x31c6,0x3a07,0x31a6,0x39e7,0x3a07,0x31c6,0x31c6,0x39c7,0x39e7,0x31a6,0x31a6,0x31c6,0x3a07,0x3a07,0x3a07,0x39e7,0x3a08,0x31c7,0x4248,0x4228,0x39e7,0x4a69,0x31c6,0x4208,0x39e7,0x4248,0x4248,0x39e7,0x39e7,0x4269,0x39e7,0x31a6,0x4228,0x39c7,0x4228,0x4248,0x4248,0x39e7,0x4228,0x4aa9,0x4a69,0x4249,0x3a28,0x4a8a,0x4a69,0x4269,0x4a69,0x4228,0x4a69,0x52ca,0x4a89,0x4a89,0x4248,0x4a89,0x5b0b,0x52aa,0x52aa,0x52ca,0x52aa,0x52aa,0x52aa,0x52ca,0x5aeb,0x52cb,0x4aaa,0x52aa,0x52aa,0x52ca,0x5aeb,0x52ca,0x52ca,0x5aeb,0x634c,0x632c,0x634c,0x632c,0x632c,0x5b0b,0x73ae,0x5aeb,0x5aeb,0x52ca,0x5b0b,0x634c,0x6b6d,0x634c,0x634c,0x6b8d,0x636d,0x5b0b,0x632c,0x6b6d,0x6b8d,0x73ce,0x6bae,0x6bae,0x5b2c,0x73cf,0x73ef,0x6bad,0x73ce,0x7c10,0x7c0f,0x8430,0x73ae,0x7c0f,0x73ae,0x7c0f,0x7c30,0x8430,0x7c2f,0x7bef,0x7c0f,0x7c0f,0x8471,0x8450,0x7bef,0x7bef,0x8430,0x7c0f,0x73ee,0x7c0f,0x8430,0x7c0f,0x8c91,0x94b2,0x8450,0x8430,0x7c2f,0x8450,0x8c91,0x8c71,0x73ae,0x94d2,0x94d2,0x8430,0x840f,0x73ae,0x73ce,0x8c71,0x8c91,0x8450,0x7bef,0x840f,0x8c71,0x8450,0x7c0f,0x8450,0x8c70,0x7c0f,0x7c2f,0x8c91,0x8c71,0x73ce,0x8450,0x8c71,0x94d2,0x8450,0x8c91,0x73ee,0x8c71,0x7bef,0x73ae,0x8c91,0x8c71,0x7c0f,0x7bef,0x6bad,0x7c0f,0x8c91,0x842f,0x73ce,0x6bae,0x6b4c,0x6b8d,0x73ce,0x73ad, +0x4a69,0x4aaa,0x4269,0x4a69,0x3a28,0x4228,0x3a08,0x4a8a,0x4249,0x31a6,0x3a08,0x4269,0x3a28,0x39e7,0x4228,0x31c7,0x39e7,0x31c7,0x3a08,0x31a6,0x31c7,0x3a08,0x31c6,0x31a6,0x39c7,0x31c7,0x31a6,0x39e7,0x39e7,0x31a6,0x3186,0x39e7,0x31a6,0x2985,0x31a6,0x31c7,0x2986,0x31a6,0x2145,0x2965,0x2986,0x31a6,0x2124,0x2965,0x3a07,0x31a6,0x31c7,0x3186,0x2145,0x2965,0x2145,0x2985,0x2965,0x2965,0x2124,0x2965,0x2104,0x2965,0x2945,0x2965,0x2965,0x2104,0x2965,0x2986,0x2965,0x2104,0x2144,0x2124,0x2965,0x2965,0x2104,0x2104,0x18e3,0x2965,0x2144,0x2965,0x2145,0x2965,0x2945,0x2124,0x2124,0x18e3,0x2145,0x2124,0x10a2,0x2124,0x2965,0x2124,0x2104,0x2965,0x2144,0x1903,0x2145,0x2124,0x2124,0x2104,0x18e3,0x2124,0x1904,0x1903,0x2104,0x2965,0x2124,0x1904,0x2104,0x18e3,0x18e3,0x18e3,0x2124,0x2104,0x18e3,0x10a2,0x18c3,0x2124,0x2124,0x2104,0x2945,0x18c2,0x18c3,0x18c3,0x18e3,0x18e3,0x10a2,0x18c3,0x2104,0x2104,0x2104,0x2104,0x18e3,0x18c3,0x18c3,0x2104,0x2965,0x18e3,0x10a3,0x2124,0x2124,0x18c3,0x18e3,0x18e3,0x18e3,0x1903,0x2104,0x2104,0x2144,0x2124,0x2124,0x2124,0x1903,0x1903,0x2104,0x18e3,0x1904,0x2124,0x10c3,0x2104,0x2124,0x2144,0x2965,0x2985,0x2986,0x3186,0x2124,0x2124,0x2124,0x2124,0x2965,0x2144,0x2145,0x2104,0x2104,0x2124,0x2945,0x2986,0x2145,0x31a6,0x3186,0x2145,0x2986,0x31a6,0x2985,0x2986,0x39e7,0x31a6,0x2965,0x2985,0x2965,0x31c6,0x2144,0x2965,0x2945,0x2986,0x31c7,0x2945,0x2986,0x3a07,0x39e7,0x2985,0x31c6,0x31a6,0x31a6,0x39c7,0x31a6,0x2965,0x4208,0x31a6,0x31a6,0x39e7,0x4a89,0x31c6,0x39c7,0x31a7,0x39e7,0x39e7,0x4249,0x3a07,0x4a49,0x39e7,0x39e7,0x4208,0x4228,0x4a49,0x4228,0x4a69,0x4a49,0x4228,0x4a49,0x4228,0x39e7,0x39e7,0x4a69,0x4249,0x4a89,0x4248,0x52ca,0x52ca,0x52ca,0x5aeb,0x528a,0x4a69,0x52cb,0x52aa,0x4a49,0x4a69,0x4a49,0x5acb,0x632c,0x634c,0x5b0b,0x5b0b,0x52eb,0x5b0c,0x5b0b,0x5aeb,0x5b0b,0x6b4d,0x5b0b,0x630c,0x6b6d,0x6b6d,0x634c,0x636d,0x6b6d,0x632c,0x5b2c,0x5aeb,0x5b2c,0x738e,0x7bcf,0x73ae,0x73ae,0x6bae,0x7c10,0x73ae,0x632c,0x6b4d,0x6b6d,0x73ae,0x6b4d,0x73ae,0x73ae,0x7bef,0x73ae,0x6b6e,0x8451,0x8430,0x73ce,0x8451,0x8430,0x7bef,0x7bef,0x7c10,0x8451,0x8c92,0x73cf,0x7c0f,0x73ce,0x73ae,0x8470,0x9cd3,0x8450,0x8450,0x8430,0x7bcf,0x8430,0x8c50,0x94d2,0x8451,0x9491,0x8c71,0x8c91,0x9d13,0x9cf3,0x94b2,0x94b1,0x8c71,0x7bef,0x7bef,0x7bef,0x8c91, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1041,0x0820,0x0000,0x0000,0x0020,0x0000,0x1081,0x0000,0x0861,0x0840,0x1081,0x0020,0x0000,0x1082,0x18c3,0x0861,0x0861,0x0861,0x0820,0x0820,0x1081,0x0861,0x0841,0x0861,0x1081,0x10a2,0x0020,0x0020,0x0861,0x18c3,0x1082,0x0861,0x0820,0x1082,0x0861,0x0000,0x0840,0x0000,0x0840,0x10a2,0x0861,0x0881,0x0861,0x1081,0x1081,0x1082,0x0861,0x0861,0x1081,0x0840,0x0861,0x1081,0x0861,0x0020,0x0000,0x0841,0x0861,0x0841,0x0861,0x0020,0x0861,0x10a2,0x0861,0x1061,0x0840,0x0840,0x0020,0x0820,0x0820,0x0841,0x1061,0x0841,0x1082,0x1081,0x0841,0x1082,0x0861,0x0000,0x0861,0x0841,0x0020,0x0841,0x1081,0x0000,0x0820,0x1081,0x0841,0x1082,0x0861,0x1081,0x0861,0x0861,0x0840,0x0840,0x0861,0x0841,0x0841,0x1061,0x0841,0x0820,0x0861,0x1061,0x0841,0x10a2,0x0861,0x0020,0x0861,0x0020,0x0841,0x1082,0x10a2,0x0861,0x10a2,0x1081,0x0861,0x0881,0x0020,0x1081,0x0841,0x1061,0x1061,0x10a2,0x1082,0x0840,0x1082,0x1082,0x0861,0x0861,0x1082,0x10a2,0x0861,0x0861,0x0881,0x0861,0x1061,0x0861,0x1082,0x1082,0x0840,0x0861,0x0861,0x0861,0x1082,0x0861,0x0840,0x10a2,0x1081,0x0861,0x0861,0x0840,0x0840,0x0000,0x0840,0x1061,0x0841,0x0861,0x10a2,0x1081,0x0861,0x1082,0x10a2,0x1082,0x1081,0x10a2,0x0840,0x0861,0x0840,0x0840,0x0841,0x0841,0x0020,0x0841,0x0841,0x0000,0x0000,0x0000,0x0820,0x0841,0x0020,0x1082,0x0820,0x0861,0x0820,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0820,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x1082,0x0841,0x0020,0x0000,0x0020,0x0881,0x18e3,0x18c2,0x18c3,0x0000,0x2103,0x2965,0x1061,0x0000,0x2104,0x2124,0x18e4,0x0821,0x18c3,0x2104,0x18e3,0x20e3,0x2104,0x18c3,0x2124,0x2125,0x1082,0x10a2,0x2104,0x18c3,0x2125,0x31a6,0x18e4,0x2965,0x4228,0x39c7,0x31a6,0x4208,0x4208,0x4208,0x4228,0x4208,0x39e8,0x39c7,0x4208,0x4249, +0x4248,0x4a89,0x4a69,0x4a89,0x52ca,0x4268,0x4289,0x4248,0x3a28,0x4248,0x3a07,0x4248,0x4248,0x3a07,0x4248,0x4228,0x3a07,0x4248,0x4248,0x4248,0x4228,0x4248,0x4248,0x4a89,0x4269,0x4228,0x3a07,0x3a28,0x3a07,0x4228,0x4248,0x3a07,0x3a28,0x4228,0x4248,0x4248,0x4228,0x4248,0x4248,0x3a07,0x3a07,0x3a07,0x4228,0x4a69,0x4228,0x3a07,0x3a28,0x3a07,0x4248,0x4228,0x4228,0x3a28,0x4248,0x3a07,0x3a28,0x3a28,0x3a28,0x4228,0x3a08,0x3a07,0x3a28,0x39e7,0x3a07,0x3a07,0x4248,0x39e7,0x39e7,0x4228,0x3a07,0x3a07,0x4228,0x3a28,0x3a07,0x3a28,0x3a28,0x3a08,0x39e7,0x3a08,0x3a07,0x3a07,0x3a28,0x3a07,0x3a07,0x3a07,0x3a07,0x4228,0x3a28,0x3a07,0x3a28,0x39e7,0x3a07,0x4228,0x4a69,0x4228,0x31c7,0x3a07,0x3a07,0x3a07,0x39e7,0x3a07,0x3a07,0x4248,0x4248,0x3a07,0x3a28,0x4228,0x39e7,0x39e7,0x4228,0x39e7,0x3a07,0x3a07,0x3a28,0x3a07,0x3a28,0x3a07,0x4228,0x4248,0x31c6,0x39e7,0x3a07,0x3a07,0x3a07,0x3a08,0x3a28,0x31e7,0x3a07,0x3a07,0x3a07,0x3a08,0x3a08,0x3a07,0x3a07,0x3a08,0x39e7,0x39e7,0x3a07,0x3a07,0x3a07,0x4248,0x3a07,0x3a07,0x3a08,0x4248,0x3a07,0x39e7,0x3a07,0x4248,0x4228,0x39e7,0x3a07,0x39e7,0x39e7,0x3a07,0x3a28,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x3a07,0x3a28,0x39e7,0x3a07,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4a89,0x31c6,0x3a07,0x3a28,0x3a07,0x3a07,0x39e7,0x3a07,0x4228,0x3a07,0x3a07,0x3a07,0x4228,0x39e7,0x4248,0x4208,0x39e7,0x3a07,0x4228,0x3a07,0x39e7,0x3a07,0x3a07,0x39e7,0x3a07,0x39e7,0x39e7,0x39e7,0x4228,0x4228,0x31c6,0x3a07,0x39e7,0x39e7,0x3a07,0x39e7,0x39e7,0x3a08,0x4228,0x3a07,0x3a07,0x4248,0x4228,0x39e7,0x3a07,0x39e7,0x39c6,0x39e7,0x39e7,0x31c7,0x39c6,0x3a07,0x39e7,0x3a07,0x4228,0x39e7,0x39e7,0x39e7,0x39e7,0x39c6,0x39e7,0x31e7,0x39e7,0x3a07,0x3a07,0x31c7,0x39e7,0x39e7,0x39e7,0x31c6,0x31c6,0x39e7,0x31c6,0x39e7,0x31c6,0x31c6,0x31c6,0x31c7,0x39e7,0x31c6,0x39e7,0x39e7,0x39c6,0x4228,0x39e7,0x31a6,0x39e7,0x4207,0x31a6,0x31a6,0x39e7,0x31c6,0x31a6,0x31c6,0x31c6,0x39e7,0x4228,0x31c6,0x31a6,0x31a6,0x31a6,0x39e7,0x31a6,0x31a6,0x31a6,0x3186,0x3186,0x3185,0x3186,0x3186,0x3185,0x39e7,0x31a6,0x2965,0x3186,0x39e7,0x3186,0x31a6,0x39c7,0x31a6,0x39c7,0x39c7,0x39c7,0x39e7,0x31a6,0x31a6,0x39e7,0x39c7,0x39c6,0x31c6,0x31a6,0x31a6,0x39c6,0x31a6,0x3185,0x2965,0x2124,0x2104,0x2124,0x2944,0x1903,0x1903,0x18e2,0x1903,0x2124,0x1903,0x18e3,0x1081, +0x4269,0x4249,0x4248,0x4269,0x4248,0x4248,0x4248,0x4228,0x4248,0x4228,0x3a28,0x4248,0x4269,0x3a28,0x4248,0x4248,0x4248,0x4a89,0x4269,0x4228,0x3a28,0x4248,0x3a28,0x3a28,0x4228,0x4248,0x3a28,0x3a07,0x4248,0x4228,0x4248,0x3a28,0x3a07,0x4228,0x3a28,0x3a08,0x3a08,0x4228,0x3a28,0x3a08,0x4228,0x4228,0x4248,0x4269,0x4228,0x4228,0x3a28,0x4248,0x4228,0x4228,0x4248,0x3a28,0x4228,0x3a28,0x3a07,0x4228,0x4248,0x4228,0x4228,0x4228,0x3a07,0x3a07,0x4248,0x4248,0x4228,0x4228,0x3a28,0x4248,0x4248,0x4248,0x4248,0x4228,0x3a08,0x4248,0x4228,0x3a07,0x4269,0x4248,0x4228,0x4248,0x3a07,0x39e7,0x4248,0x4248,0x4248,0x4269,0x4228,0x3a28,0x4248,0x4248,0x4228,0x4228,0x4248,0x4228,0x39e7,0x4249,0x4248,0x4228,0x4248,0x4228,0x4a69,0x4248,0x4228,0x3a28,0x4269,0x4269,0x4248,0x4269,0x4a69,0x4228,0x4248,0x4228,0x4248,0x4248,0x4248,0x4248,0x4248,0x4a89,0x4248,0x3a28,0x4268,0x4248,0x4248,0x4a89,0x4248,0x4269,0x4269,0x4269,0x4a69,0x4248,0x4228,0x4228,0x4a89,0x4248,0x4248,0x4248,0x4248,0x4248,0x4228,0x4a89,0x4228,0x4248,0x4a69,0x4248,0x3a28,0x4248,0x4228,0x4a89,0x4a69,0x4228,0x4a69,0x4a69,0x4269,0x4a89,0x4269,0x4269,0x4a69,0x4269,0x4a89,0x4a69,0x4228,0x4248,0x4a69,0x4a89,0x4a69,0x5289,0x4a69,0x4a69,0x4aaa,0x4a69,0x4248,0x4a89,0x4a89,0x4269,0x4a89,0x4a69,0x4a89,0x4a89,0x4a89,0x52ca,0x52aa,0x52aa,0x4a89,0x4aaa,0x52aa,0x52aa,0x52aa,0x4a89,0x4a69,0x4a89,0x4a89,0x52ca,0x52aa,0x4aaa,0x4a89,0x4aa9,0x52ca,0x52aa,0x4a89,0x4aaa,0x4a69,0x52ca,0x5aeb,0x52ca,0x52aa,0x4a89,0x5aeb,0x52ca,0x4a89,0x52aa,0x4a69,0x4a69,0x4a89,0x4a89,0x52eb,0x52ca,0x4a69,0x4a89,0x52aa,0x52aa,0x52aa,0x4a89,0x52ca,0x5aca,0x52a9,0x5aeb,0x52ca,0x4a89,0x52aa,0x4aaa,0x4a89,0x5289,0x52aa,0x52ca,0x52a9,0x52ca,0x4a89,0x4a69,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x4248,0x4a69,0x4a69,0x4a69,0x4a89,0x52aa,0x4a89,0x4a89,0x4a89,0x52aa,0x52aa,0x5aeb,0x4a89,0x4a89,0x52ca,0x4a8a,0x4a89,0x4a89,0x5aeb,0x5289,0x4a69,0x4a69,0x4a69,0x4a69,0x52ca,0x52ca,0x4a69,0x52aa,0x528a,0x4a49,0x4a8a,0x4a49,0x4a69,0x4a69,0x4a69,0x4249,0x4a89,0x52aa,0x52aa,0x4248,0x4a69,0x4248,0x4a89,0x4a89,0x4a89,0x4a8a,0x528a,0x4a69,0x4228,0x528a,0x52aa,0x4a69,0x4a8a,0x4a8a,0x52aa,0x4a69,0x52aa,0x4a89,0x4a89,0x4a69,0x4a69,0x528a,0x4a69,0x4a89,0x5acb,0x5aeb,0x4a89,0x4a49,0x52aa,0x52aa,0x52aa,0x4a69,0x528a,0x4a89,0x4228,0x4a49, +0x3a08,0x4248,0x3a28,0x3a07,0x3a28,0x3a07,0x3a08,0x3a07,0x4228,0x3a08,0x4249,0x4248,0x4228,0x3a28,0x3a07,0x3a28,0x4228,0x4228,0x39e7,0x4228,0x3a08,0x3a08,0x3a27,0x4248,0x3a07,0x3a08,0x4228,0x39e7,0x3a28,0x4228,0x4248,0x4269,0x4228,0x3a07,0x4228,0x39e7,0x3a08,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x3a28,0x3a07,0x4248,0x4248,0x4248,0x4a69,0x4a89,0x4228,0x4248,0x4269,0x4269,0x4269,0x4248,0x4248,0x3a28,0x4248,0x4248,0x4228,0x4228,0x4228,0x4228,0x4249,0x4228,0x4228,0x4248,0x4a89,0x4a89,0x4a69,0x4248,0x4a69,0x4a69,0x4228,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4248,0x4269,0x4268,0x4248,0x4248,0x4248,0x4228,0x4248,0x4248,0x4269,0x4248,0x3a28,0x4248,0x4248,0x4248,0x4269,0x4248,0x3a28,0x4a69,0x4269,0x4268,0x4268,0x4a89,0x4a69,0x4248,0x4a69,0x4a69,0x4a69,0x3a28,0x4269,0x4248,0x4269,0x4269,0x4248,0x3a08,0x4269,0x4269,0x4248,0x3a28,0x4a69,0x4aa9,0x4269,0x4a89,0x4a69,0x4228,0x4249,0x4269,0x4a69,0x4248,0x4248,0x4268,0x4268,0x4248,0x4248,0x4228,0x4248,0x4269,0x4248,0x4248,0x4269,0x4248,0x4249,0x4248,0x4228,0x4269,0x4248,0x4269,0x4248,0x4a69,0x4269,0x4aaa,0x52aa,0x4a89,0x4a69,0x4a89,0x4aa9,0x4a69,0x4248,0x4248,0x4a69,0x4269,0x4a89,0x4269,0x4a69,0x4a49,0x4a69,0x4a89,0x4a89,0x4248,0x4248,0x4a89,0x4aa9,0x4a69,0x4a89,0x4a89,0x4a89,0x4a89,0x4a89,0x52aa,0x4a8a,0x4a89,0x4a89,0x52aa,0x52aa,0x52ca,0x52ca,0x52ca,0x4a89,0x4a89,0x4a89,0x52aa,0x52aa,0x4aa9,0x4a69,0x4a89,0x4aaa,0x52aa,0x52ca,0x52eb,0x52ca,0x52aa,0x52ca,0x52ca,0x4a89,0x4a89,0x52ca,0x52aa,0x52aa,0x4a69,0x52aa,0x5289,0x52aa,0x4a89,0x4a89,0x4a69,0x4a69,0x52aa,0x52aa,0x4a89,0x4a69,0x52aa,0x52aa,0x52aa,0x52aa,0x5289,0x4a69,0x52aa,0x52aa,0x4a69,0x4a89,0x52aa,0x52aa,0x528a,0x52aa,0x52aa,0x4248,0x4a89,0x4a89,0x4a69,0x4a69,0x4a89,0x4a69,0x52aa,0x4a69,0x4a48,0x4a48,0x4a48,0x4248,0x4a69,0x4a69,0x528a,0x528a,0x4a69,0x4aaa,0x4a89,0x4a69,0x4a69,0x4a69,0x4a89,0x4a89,0x4a69,0x52aa,0x5289,0x52aa,0x52aa,0x5289,0x4a89,0x52ca,0x52aa,0x4a69,0x4a89,0x52ca,0x52aa,0x4a8a,0x4249,0x4a8a,0x4a89,0x4a69,0x4249,0x4a69,0x4a89,0x52aa,0x4a69,0x4a69,0x4269,0x52aa,0x4249,0x4a89,0x52aa,0x4a89,0x528a,0x52aa,0x52aa,0x4a69,0x4a89,0x52ca,0x4a89,0x52aa,0x5b0b,0x52cb,0x5aeb,0x5aeb,0x52aa,0x52ca,0x4aaa,0x52aa,0x52cb,0x52ca,0x5aeb,0x52ca,0x528a,0x5aca,0x52ca,0x52aa,0x4a69,0x6b4d,0x632c,0x52ca,0x5aeb, +0x39e7,0x3a08,0x4208,0x3a07,0x39e7,0x3a07,0x3a07,0x39e7,0x4208,0x39e7,0x39e7,0x39e7,0x3a07,0x3a07,0x3a07,0x39e7,0x39c7,0x31c6,0x3a07,0x39e7,0x39e7,0x39e7,0x39e7,0x31c7,0x31a6,0x39e7,0x4208,0x39e7,0x31a6,0x39e7,0x3a07,0x39e7,0x3a07,0x39e7,0x3a07,0x3a08,0x39e7,0x3a07,0x3a07,0x4228,0x39e7,0x3a07,0x3a07,0x3a08,0x3a07,0x3a08,0x3a08,0x4228,0x4228,0x4228,0x4248,0x4a89,0x4228,0x3a08,0x4228,0x3a07,0x3a07,0x4248,0x4248,0x3a07,0x39e7,0x3a07,0x39e7,0x4248,0x4248,0x3a07,0x4228,0x4228,0x4248,0x4a69,0x4248,0x4269,0x4248,0x4228,0x4228,0x4248,0x39e7,0x3a07,0x4228,0x3a28,0x4228,0x4228,0x39e7,0x4228,0x3a08,0x39e7,0x4228,0x4207,0x4228,0x3a07,0x4228,0x4248,0x4a69,0x4228,0x3a07,0x3a08,0x4248,0x4228,0x4248,0x4a8a,0x4228,0x4228,0x4249,0x4228,0x4228,0x3a28,0x4248,0x4228,0x4a69,0x4248,0x4a69,0x4248,0x4228,0x4248,0x3a28,0x3a08,0x4248,0x3a28,0x4248,0x3a28,0x4228,0x4a89,0x4249,0x4228,0x4248,0x39e7,0x4228,0x4248,0x3a28,0x3a07,0x39e7,0x4208,0x4228,0x3a08,0x4228,0x39e7,0x39e7,0x4248,0x3a28,0x4228,0x4249,0x4228,0x4249,0x4248,0x3a08,0x4228,0x4228,0x4248,0x4a69,0x4248,0x4248,0x4a69,0x4a69,0x4248,0x4248,0x4248,0x5289,0x4a89,0x4248,0x4228,0x4228,0x4248,0x4248,0x4248,0x4a89,0x4a48,0x4248,0x4aaa,0x52aa,0x52ca,0x4a69,0x4a89,0x4aaa,0x4a69,0x4a8a,0x4a69,0x52aa,0x52ca,0x52aa,0x4a89,0x4a69,0x4248,0x4a89,0x52ca,0x5aeb,0x52aa,0x52aa,0x52aa,0x4a69,0x4269,0x4a89,0x5aeb,0x4a89,0x4aaa,0x4a69,0x4a89,0x4a69,0x52aa,0x4a89,0x4a89,0x4a69,0x528a,0x4a89,0x52aa,0x52cb,0x4a69,0x4a8a,0x4a69,0x52aa,0x4a89,0x4aaa,0x52eb,0x52ca,0x5aeb,0x52aa,0x52ca,0x5acb,0x5289,0x4a89,0x4248,0x4a49,0x52aa,0x4a69,0x52aa,0x52aa,0x528a,0x528a,0x4a69,0x4a49,0x4a69,0x4a69,0x4a8a,0x4a48,0x52ca,0x630c,0x4a89,0x52aa,0x4a89,0x528a,0x4a89,0x52ca,0x52aa,0x4a89,0x5289,0x528a,0x4a69,0x4248,0x4a69,0x4269,0x4269,0x4a69,0x4a89,0x4a89,0x52aa,0x4a89,0x52aa,0x4a69,0x4a69,0x4a69,0x4a69,0x4a89,0x4aaa,0x4a89,0x4aaa,0x5289,0x4a69,0x52aa,0x4a89,0x52aa,0x4a69,0x4249,0x4a8a,0x4a69,0x4a69,0x528a,0x4a89,0x4a69,0x4248,0x4a69,0x4228,0x4248,0x4a69,0x4248,0x4248,0x4aaa,0x4249,0x4228,0x52aa,0x4a69,0x4a49,0x4228,0x4a69,0x4a8a,0x4a69,0x4228,0x4a69,0x528a,0x4a49,0x52aa,0x630c,0x5b0b,0x4a8a,0x5aeb,0x4a89,0x5aeb,0x52aa,0x52aa,0x52aa,0x52aa,0x528a,0x4a69,0x52cb,0x52cb,0x52ca,0x632c,0x6b6d,0x5acb,0x5aeb,0x634d,0x5b0b, +0x3186,0x3185,0x31a6,0x31a6,0x2985,0x31c6,0x31c6,0x2985,0x3185,0x31a6,0x31a5,0x3185,0x3185,0x3186,0x31a6,0x31a6,0x3185,0x31a6,0x3185,0x3186,0x31a6,0x2985,0x2985,0x31a6,0x31c6,0x2985,0x31a6,0x31a6,0x31a6,0x31c6,0x31a6,0x31a6,0x31a6,0x2985,0x31a6,0x2985,0x31c6,0x31c6,0x31a5,0x39e7,0x31a6,0x31a6,0x31c6,0x3185,0x31c6,0x31a6,0x31a6,0x31a6,0x3185,0x31a6,0x2985,0x2986,0x31a6,0x3185,0x31a6,0x2965,0x3185,0x31c6,0x2965,0x2985,0x2965,0x2965,0x31a6,0x31a6,0x2965,0x2965,0x31c6,0x2985,0x2965,0x31c6,0x31c6,0x2985,0x2985,0x2965,0x2965,0x2965,0x31c6,0x2965,0x2965,0x2985,0x2965,0x2965,0x2944,0x31a6,0x31a6,0x31a6,0x2985,0x2965,0x2124,0x31a6,0x2144,0x2144,0x2985,0x2985,0x2965,0x2144,0x2985,0x2144,0x2985,0x2985,0x2985,0x2965,0x2145,0x2965,0x2985,0x31a6,0x2965,0x2965,0x2965,0x2965,0x2144,0x18e3,0x2104,0x2124,0x18e3,0x2124,0x2124,0x2944,0x2124,0x2144,0x2945,0x2144,0x2124,0x2985,0x2985,0x2144,0x2964,0x2965,0x2144,0x2144,0x2985,0x2965,0x3185,0x2965,0x2965,0x2965,0x2985,0x2144,0x2145,0x2145,0x2144,0x2124,0x2145,0x2144,0x2144,0x2965,0x2124,0x2945,0x2985,0x2965,0x2985,0x2945,0x2144,0x2144,0x2145,0x2965,0x2124,0x2144,0x2965,0x2144,0x2965,0x2124,0x1903,0x2965,0x2144,0x2985,0x31a6,0x2144,0x2985,0x2985,0x2965,0x2965,0x2985,0x2985,0x2985,0x31a6,0x2985,0x31a6,0x2985,0x2965,0x2944,0x2965,0x2985,0x31c6,0x2945,0x2945,0x2945,0x2945,0x3186,0x2985,0x2944,0x2985,0x2965,0x2145,0x2965,0x2144,0x2124,0x2965,0x2124,0x2124,0x2124,0x2965,0x2965,0x2944,0x2945,0x2965,0x2965,0x2104,0x2124,0x2144,0x2144,0x2965,0x2144,0x31a6,0x2965,0x31a6,0x31a6,0x2944,0x2965,0x2985,0x2985,0x2945,0x2965,0x2965,0x3185,0x31a6,0x3186,0x2945,0x2124,0x2965,0x2144,0x2124,0x2965,0x31a6,0x39e7,0x2965,0x31a6,0x2965,0x2945,0x3185,0x31a6,0x2945,0x2945,0x3186,0x2965,0x2124,0x2965,0x2965,0x2145,0x3186,0x3186,0x2965,0x31a6,0x31a6,0x3186,0x2965,0x2965,0x3186,0x2965,0x2965,0x2945,0x3186,0x2985,0x2985,0x2985,0x2965,0x2985,0x31a6,0x39c7,0x3186,0x3186,0x31a6,0x3186,0x31a6,0x39c7,0x31c6,0x3186,0x2965,0x2945,0x2985,0x2965,0x2985,0x3186,0x3186,0x31a6,0x31a6,0x3186,0x2985,0x31a6,0x2965,0x3186,0x31a6,0x2985,0x2985,0x31a6,0x2985,0x31a6,0x39c7,0x39c7,0x39c7,0x39e7,0x39c7,0x3a07,0x39e7,0x4228,0x4228,0x4228,0x4228,0x39e7,0x39c7,0x31c7,0x3a07,0x4a69,0x39c7,0x528a,0x5aeb,0x4228,0x4228,0x3a08,0x4228, +0x4a89,0x4aa9,0x4aa9,0x52a9,0x52ea,0x52ca,0x52ca,0x52ca,0x4aa9,0x52ea,0x52ca,0x52a9,0x52aa,0x5aea,0x52ca,0x4aa9,0x52ca,0x52aa,0x52ea,0x52ca,0x52ca,0x52ca,0x4aa9,0x52ea,0x5aeb,0x52ca,0x52aa,0x52ea,0x52ca,0x5b0b,0x52ea,0x52ea,0x52ea,0x52ea,0x52ca,0x5aeb,0x52ea,0x52ea,0x52ea,0x52ca,0x5aeb,0x52ca,0x5b0b,0x52ea,0x52ca,0x52ea,0x52ea,0x52aa,0x52aa,0x52ea,0x4aa9,0x52ca,0x52ea,0x5b4c,0x52ea,0x52ca,0x52ea,0x4aa9,0x52ea,0x52ea,0x4aa9,0x52ea,0x52ca,0x4a69,0x4aa9,0x52ca,0x5b0b,0x52ca,0x52ca,0x52eb,0x5b2b,0x5b0b,0x52eb,0x52ca,0x52ca,0x5aeb,0x52ea,0x4aa9,0x52ca,0x52ca,0x52ca,0x52ea,0x52ca,0x5b0b,0x5b0b,0x5b0b,0x52eb,0x52ca,0x52ca,0x5b0b,0x52ca,0x4a89,0x52ea,0x52eb,0x5b0b,0x5b0b,0x52ea,0x52ca,0x5aeb,0x52eb,0x52ca,0x52ca,0x4aa9,0x52ea,0x52eb,0x4aaa,0x52aa,0x5aeb,0x5b0b,0x52aa,0x5b0b,0x52ca,0x4248,0x4a89,0x4a89,0x4aa9,0x52aa,0x4aa9,0x52ca,0x5b0b,0x52ca,0x52ea,0x52ca,0x4a89,0x52a9,0x52ca,0x5b0b,0x5b0b,0x5b0b,0x530b,0x5b0b,0x52ca,0x5b0b,0x52ca,0x5aeb,0x5b2c,0x52ca,0x52ea,0x52ca,0x52ea,0x5b0b,0x4aaa,0x5aeb,0x5b0b,0x5b0b,0x4a89,0x4aa9,0x5b0b,0x634c,0x5b2b,0x634c,0x5b2b,0x634c,0x52ca,0x52ca,0x4aaa,0x4aa9,0x5b2c,0x5b0b,0x52eb,0x5b0b,0x5b0b,0x52ca,0x5b0b,0x632c,0x52ca,0x5b0b,0x52ea,0x5b0b,0x632c,0x52ca,0x52ca,0x5b0b,0x52aa,0x5aea,0x5aeb,0x5aeb,0x5b0b,0x5aeb,0x5aea,0x5b0b,0x5b0b,0x5aeb,0x632c,0x5aeb,0x5b0b,0x5aeb,0x5b0b,0x5b2b,0x5aeb,0x5aeb,0x5aeb,0x5aca,0x5aea,0x52ca,0x52ca,0x52ca,0x52ca,0x52ea,0x52ca,0x52ca,0x52aa,0x52aa,0x52ca,0x4a89,0x52a9,0x4aa9,0x52ca,0x5aeb,0x52a9,0x5aeb,0x52ca,0x4a89,0x5aeb,0x52ca,0x52ca,0x52ca,0x52ea,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x5aeb,0x52ea,0x52ea,0x52a9,0x52ca,0x5aca,0x52ca,0x52ca,0x4a69,0x52aa,0x5aeb,0x4a89,0x4a69,0x52aa,0x4a69,0x4a89,0x52ca,0x52aa,0x52aa,0x4a69,0x5aeb,0x4a89,0x4248,0x4a69,0x52aa,0x4a69,0x4aa9,0x3a07,0x4268,0x4268,0x4228,0x4269,0x4a69,0x4a69,0x4a69,0x4a69,0x4228,0x4a69,0x5289,0x4a69,0x52aa,0x4a49,0x4a89,0x4a69,0x4268,0x4aa9,0x4a68,0x4a69,0x4a89,0x4a68,0x52a9,0x4a69,0x4248,0x4248,0x4a89,0x4a49,0x4a48,0x4a69,0x4a69,0x4248,0x4228,0x4248,0x4a69,0x4228,0x4228,0x4a69,0x4228,0x4228,0x4248,0x4a69,0x4248,0x4a49,0x4a49,0x4228,0x4207,0x39e7,0x4207,0x39e7,0x4227,0x4248,0x4207,0x4227,0x39e7,0x39e7,0x4207,0x4207,0x39e7,0x4207,0x4207,0x39c6,0x31c6,0x39c7,0x2985,0x2965,0x31a6,0x31a6,0x2985,0x2985, +0x5b0b,0x5b0b,0x5b0b,0x5b0b,0x634c,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x5b2b,0x634c,0x5b0b,0x5b0b,0x634c,0x5b2b,0x5b0b,0x52ea,0x632c,0x634c,0x5b0b,0x634c,0x5b2b,0x52ea,0x632c,0x5b2b,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x5b2b,0x634c,0x5b2b,0x5b0b,0x5b4c,0x530b,0x5b2b,0x636c,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x5b2c,0x5b0b,0x530b,0x52ea,0x5b4b,0x636c,0x52ea,0x530a,0x52eb,0x5b4c,0x530b,0x5b4c,0x5b2b,0x52ea,0x5b2b,0x634c,0x5b2b,0x5b2b,0x5b2b,0x5b0b,0x5b2b,0x52ea,0x52ea,0x636c,0x5b2b,0x5b2b,0x5b2b,0x52ea,0x52ea,0x5b4c,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x530a,0x634c,0x5b0b,0x5b2b,0x5b2c,0x530b,0x5b2b,0x530b,0x5b0b,0x5b4c,0x5b4c,0x530b,0x5b0b,0x636c,0x636c,0x530b,0x5b2b,0x530b,0x52ea,0x52ea,0x634c,0x5b4c,0x5b4c,0x634c,0x5b0b,0x5b0b,0x5b0b,0x530b,0x5b0b,0x634c,0x5b0b,0x530b,0x5b0b,0x5b0b,0x5b2c,0x5b0b,0x5b2b,0x5b2b,0x5b2b,0x634c,0x52ca,0x5b0b,0x52eb,0x52eb,0x5b4c,0x5b0b,0x52ea,0x5b0b,0x5b0b,0x5b2b,0x634c,0x5b2c,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5b0b,0x634c,0x5b2c,0x5b0b,0x5b2b,0x5b2b,0x636c,0x530b,0x5b0b,0x634c,0x636c,0x634c,0x634c,0x52ea,0x636c,0x634c,0x638d,0x73ee,0x634c,0x52eb,0x636c,0x636c,0x5b2c,0x632c,0x6b8d,0x5b4c,0x636d,0x638d,0x6bae,0x6bad,0x634c,0x636c,0x636c,0x5b0b,0x632c,0x6b8d,0x634c,0x6b8d,0x6b8d,0x636c,0x634c,0x6b6d,0x5b0b,0x636c,0x6b6d,0x632c,0x634c,0x636d,0x6b6d,0x634c,0x634c,0x634c,0x632c,0x634c,0x6b6d,0x6b8d,0x6b6c,0x634c,0x5b2b,0x6b8d,0x6b8d,0x634c,0x6b6c,0x6b8d,0x6b6c,0x6b6c,0x6b6d,0x632c,0x634c,0x634c,0x5b2c,0x5b2c,0x5b2c,0x632c,0x634c,0x634c,0x6b6d,0x6b6d,0x634c,0x636c,0x636c,0x634c,0x634c,0x6b6d,0x6b8d,0x6b6d,0x634c,0x6b6d,0x636c,0x634c,0x6b6c,0x630b,0x632c,0x6b4c,0x634c,0x634c,0x634c,0x5b0b,0x5b0b,0x5b0b,0x632c,0x634c,0x632c,0x632c,0x634c,0x6b8d,0x632c,0x5b2b,0x634c,0x634c,0x632c,0x6b6d,0x6b6d,0x632c,0x632c,0x5b0b,0x5b0b,0x5b0b,0x630c,0x632c,0x634c,0x632c,0x634c,0x634c,0x634c,0x634c,0x634c,0x5b0b,0x632c,0x630b,0x5b0b,0x5b0b,0x634c,0x634c,0x6b6c,0x634c,0x632c,0x634c,0x6b6c,0x6b6d,0x634c,0x6b4d,0x632c,0x634c,0x6b4c,0x6b4c,0x6b8d,0x632b,0x5aeb,0x5aeb,0x6b6c,0x634c,0x634c,0x6b6d,0x6b4c,0x634c,0x632c,0x632c,0x5b0b,0x634c,0x634c,0x632c,0x634c,0x5aeb,0x5b0b,0x632c,0x632c,0x632c,0x634c,0x632b,0x6b6c,0x5b0b,0x5b0b,0x632b,0x630b,0x5b0b,0x634c,0x632b,0x630b,0x632b,0x632c,0x632c,0x630b,0x5b0b,0x5b0b,0x5b0b,0x5aeb, +0x5b0b,0x5b0b,0x5b0b,0x634c,0x634c,0x52ea,0x52ca,0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x5b0b,0x52ea,0x5b2b,0x634c,0x632b,0x5b2b,0x634c,0x636c,0x634b,0x5b0b,0x5b4c,0x5b2b,0x5b0b,0x5b2b,0x52ca,0x5aeb,0x5b2b,0x5b0b,0x634c,0x6b8d,0x634c,0x5b0b,0x634c,0x5b2c,0x5b2b,0x634c,0x5b2c,0x5b0b,0x634c,0x636c,0x632b,0x5b0b,0x5b2b,0x634c,0x5b2b,0x5b4c,0x638d,0x634c,0x5b0b,0x5b0b,0x5b0b,0x52ca,0x634c,0x5b2b,0x5b2b,0x5b2b,0x5b2b,0x5b4c,0x5aeb,0x52ea,0x52aa,0x5b0b,0x5aea,0x52aa,0x5b0b,0x5b0b,0x5b2b,0x632c,0x5b0b,0x4aaa,0x52ca,0x5b0b,0x632b,0x5b0b,0x5b2b,0x5b2b,0x52ca,0x5b0b,0x634c,0x5b0b,0x5b0b,0x5b2b,0x52ea,0x52ea,0x52ca,0x52ca,0x5b2b,0x52ea,0x5b0b,0x5b2b,0x5b2b,0x4aa9,0x52eb,0x5b0b,0x52eb,0x530b,0x5b2b,0x5b2c,0x5b2c,0x634c,0x5b0b,0x5b0b,0x5b0b,0x530b,0x5b2b,0x52eb,0x52eb,0x52ca,0x5b0b,0x5b4c,0x5b0b,0x530b,0x530b,0x5b0b,0x5b0b,0x5b0b,0x5b2c,0x5b0b,0x5b2b,0x530b,0x632c,0x5b0b,0x5aeb,0x634c,0x5b0b,0x5b0b,0x52ca,0x5b0b,0x5b4c,0x52ca,0x5b0b,0x52ca,0x52ca,0x632c,0x5b0b,0x5b0b,0x5b2c,0x5b0b,0x5b0b,0x5b2c,0x634c,0x634c,0x6b6d,0x5b0b,0x6b8d,0x636c,0x5b2c,0x5b0b,0x634c,0x636c,0x634c,0x5b0b,0x6b8d,0x634c,0x632c,0x634c,0x634c,0x636c,0x5b2b,0x6b6d,0x6b6c,0x6b6d,0x6b6c,0x5b0b,0x634c,0x634c,0x6b8d,0x632c,0x634c,0x6b8d,0x636c,0x6b6d,0x636d,0x632c,0x632c,0x6b8d,0x636c,0x632c,0x636c,0x634c,0x632c,0x5b0b,0x6b6c,0x632c,0x632c,0x636c,0x6b6d,0x636c,0x634c,0x6b6c,0x6b6d,0x6b8d,0x6b8d,0x6b6c,0x6b8d,0x73ce,0x6b8d,0x632c,0x630b,0x630b,0x6b6c,0x6b6d,0x632c,0x6bae,0x5aeb,0x634c,0x6b6d,0x632b,0x632c,0x6b6d,0x6b8d,0x7bef,0x634c,0x636c,0x6bad,0x6b8d,0x636c,0x634c,0x630b,0x6b6d,0x634c,0x632c,0x6b8d,0x6b8d,0x5b0b,0x632c,0x6b6d,0x6b6d,0x632c,0x5b0b,0x5b0b,0x5b0b,0x630b,0x6b8d,0x630b,0x630b,0x6b8d,0x6b8d,0x634c,0x632c,0x632c,0x5b0b,0x634c,0x6b6d,0x6b8d,0x5b0b,0x630b,0x630c,0x632c,0x632b,0x632c,0x632c,0x5b0b,0x52ca,0x5aeb,0x630b,0x632c,0x634c,0x5b0b,0x632c,0x632c,0x630b,0x5aea,0x634c,0x6b6c,0x632c,0x632b,0x632c,0x632c,0x5aeb,0x632b,0x5b0b,0x634c,0x632c,0x6b4c,0x632c,0x632b,0x5aeb,0x634c,0x630b,0x5aca,0x5aeb,0x632c,0x6b4c,0x634c,0x6b6d,0x5aca,0x5aeb,0x5b0b,0x5aeb,0x630b,0x5b0b,0x632c,0x632c,0x5b0b,0x634c,0x632c,0x632c,0x5b0b,0x632c,0x630b,0x630b,0x632c,0x632c,0x630b,0x630b,0x632b,0x6b6c,0x6b6c,0x632c,0x5aeb,0x632b,0x6b8d,0x632c,0x632c,0x634c,0x632c,0x630b,0x632c, +0x52ca,0x5b0b,0x5b2b,0x5b0b,0x634c,0x5b2b,0x5b0b,0x5b0b,0x634c,0x5b0b,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x5aeb,0x5b2b,0x632b,0x530b,0x634c,0x636c,0x5b2b,0x5b2b,0x634c,0x5b0b,0x52ca,0x52ca,0x530b,0x5b0b,0x634c,0x5b2b,0x530b,0x634c,0x5b2b,0x5b4c,0x636c,0x636c,0x634c,0x636d,0x634c,0x5b4c,0x634c,0x5b4c,0x5b2b,0x634c,0x634c,0x5b2b,0x5b0b,0x5b0b,0x5b0b,0x52ea,0x5b2b,0x5b0b,0x52ca,0x52ea,0x52ea,0x5aeb,0x5b2b,0x636d,0x5b0b,0x5b0b,0x5b2b,0x52ca,0x52ca,0x4aaa,0x52ca,0x52eb,0x5b0b,0x530b,0x5b2b,0x5b0b,0x5b2b,0x5b4c,0x5b2b,0x5b0b,0x6bad,0x6bce,0x4aa9,0x52ea,0x4aa9,0x636c,0x5b2b,0x52ea,0x5b2c,0x5b0b,0x5b0b,0x5b0c,0x634c,0x5b2b,0x52ea,0x5b2b,0x634c,0x5b2c,0x5b0b,0x5b2c,0x5b2c,0x5b0b,0x530b,0x5b2b,0x5b4c,0x5b0b,0x5b2b,0x530b,0x5b2b,0x5b2b,0x5b0b,0x634c,0x52ca,0x52aa,0x5b0b,0x5b2b,0x5b4c,0x530a,0x52ea,0x5b4c,0x634c,0x5b2b,0x5b2b,0x634c,0x5b0b,0x632b,0x5b0b,0x634c,0x634c,0x634c,0x634c,0x634c,0x52eb,0x5b0b,0x5b2c,0x530b,0x634c,0x636c,0x5b0b,0x634c,0x5b0b,0x5b0b,0x5b2b,0x636c,0x634c,0x5b0b,0x5b0b,0x634c,0x5b2b,0x634c,0x634c,0x634c,0x6b8d,0x5b2c,0x5b4c,0x634c,0x634c,0x6b8d,0x636c,0x5b2b,0x636c,0x634c,0x6b8d,0x6b8d,0x6b8d,0x6b8d,0x73ad,0x632b,0x634c,0x6b8d,0x73ce,0x6b8d,0x6bad,0x6b8d,0x632c,0x632c,0x6b8d,0x634c,0x6b8d,0x6b8d,0x634c,0x6b6d,0x6b6d,0x6b8d,0x6b8d,0x636c,0x636c,0x6b8d,0x6b8d,0x6b8d,0x73ae,0x73ee,0x73ce,0x6b6d,0x6b8d,0x6b6d,0x634c,0x6b8d,0x6b8d,0x73ad,0x6b8d,0x73ce,0x73ad,0x6b8d,0x632c,0x632c,0x6b4c,0x6b8d,0x6b8d,0x6b6d,0x6b6d,0x6bad,0x634c,0x634c,0x6b8d,0x634c,0x73ae,0x6b8d,0x6b8d,0x6b6d,0x73ad,0x7bef,0x73ad,0x634c,0x6b6c,0x6b6d,0x6b6c,0x6b8d,0x6b8d,0x6bad,0x73ce,0x6b8d,0x6b8d,0x6b6d,0x6b8d,0x632b,0x632c,0x634c,0x6b6d,0x634c,0x634c,0x634c,0x73ae,0x6b8d,0x5b0b,0x6b6d,0x5b0b,0x632c,0x6b6d,0x632c,0x632c,0x5b0b,0x634c,0x634c,0x632c,0x632c,0x632c,0x632c,0x630b,0x630b,0x634c,0x6b4c,0x632c,0x632c,0x6b4c,0x632c,0x630c,0x630c,0x630b,0x634c,0x632c,0x632c,0x6b4c,0x6b4c,0x632c,0x632c,0x5b0b,0x634c,0x632c,0x632c,0x630b,0x5b0b,0x6b6c,0x5b0b,0x5b0b,0x6b6d,0x6b6d,0x630b,0x6b6d,0x632c,0x632c,0x630b,0x5b0b,0x5b0b,0x5aca,0x630b,0x5b0b,0x632c,0x6b4c,0x5aeb,0x632c,0x6b8d,0x630c,0x634c,0x6b4c,0x632c,0x632c,0x632b,0x6b4c,0x6b6c,0x630b,0x630c,0x632b,0x632c,0x632b,0x6b6c,0x634c,0x632c,0x634c,0x630b,0x6b6d,0x634c,0x634c,0x632c,0x632b,0x632b, +0x52eb,0x5b2c,0x52eb,0x52aa,0x5b2c,0x634c,0x634c,0x634c,0x5b2b,0x52aa,0x5b0b,0x5b0b,0x636c,0x634c,0x6bad,0x6b8d,0x5b0b,0x634c,0x5aea,0x5aeb,0x632c,0x5b0b,0x5b0b,0x52ea,0x4aa9,0x52ea,0x636c,0x634c,0x5b0b,0x5b2b,0x636c,0x6b8d,0x73ee,0x636c,0x638d,0x5b4c,0x5b4c,0x5b2b,0x530b,0x636c,0x634c,0x5b4c,0x636c,0x636c,0x634c,0x634c,0x52ea,0x4aaa,0x52ca,0x5b2b,0x636c,0x5b0b,0x5b2b,0x530b,0x5b4c,0x5b4c,0x634c,0x52aa,0x52ca,0x5b0b,0x52ea,0x5b2b,0x52ea,0x4aca,0x4aca,0x5b2b,0x636c,0x5b0b,0x530b,0x52ea,0x4aaa,0x530b,0x530b,0x5b2c,0x5b2b,0x5b2b,0x636d,0x5b4c,0x5b0b,0x5b2c,0x634c,0x5b2c,0x52eb,0x52ca,0x634c,0x636d,0x634c,0x5aeb,0x5aeb,0x5b2c,0x52ca,0x52ca,0x5b0b,0x5b0b,0x632c,0x52eb,0x5b0b,0x5b0b,0x5b2c,0x52ca,0x636c,0x4aca,0x52ea,0x5b2c,0x5aeb,0x4a89,0x5aeb,0x5aeb,0x5b0b,0x5b0b,0x5b2b,0x5b0b,0x632c,0x5b2c,0x5b0b,0x5b2c,0x634c,0x5b4c,0x5b2b,0x5b4c,0x636c,0x5b2c,0x5b2c,0x634c,0x52eb,0x52eb,0x52aa,0x634c,0x632c,0x530b,0x5b4c,0x634c,0x5b2c,0x5b2c,0x5b0c,0x634c,0x5b0c,0x5b2c,0x634c,0x6b8d,0x5b0b,0x634c,0x636d,0x6b8d,0x634c,0x52eb,0x52eb,0x4aaa,0x5b4c,0x636d,0x5aeb,0x5b2c,0x5b0b,0x636d,0x5b2c,0x5b4c,0x5b2c,0x634c,0x6b6d,0x636d,0x6b8d,0x73ee,0x5b2c,0x636c,0x636c,0x52eb,0x5b2c,0x6b8d,0x73ae,0x52ca,0x5b0b,0x632c,0x6b6d,0x6bad,0x73ce,0x638d,0x6bae,0x73ce,0x6b8d,0x6b8d,0x636d,0x6b8d,0x6b8d,0x6b8d,0x6b6d,0x73ce,0x634c,0x6b8d,0x6bae,0x634c,0x634c,0x636d,0x6b6d,0x73ae,0x73ae,0x6bad,0x6b8d,0x634c,0x6b6d,0x73ae,0x6b6d,0x6b6d,0x636d,0x6b8d,0x6b6d,0x73ce,0x6b8d,0x636d,0x636d,0x636c,0x636c,0x5b2c,0x6b6d,0x634c,0x634c,0x6b8d,0x6b8d,0x634c,0x634c,0x634c,0x6b6c,0x6b8d,0x6b6d,0x73ce,0x73ad,0x73ae,0x73ae,0x6b6d,0x6b6d,0x632b,0x634c,0x5b0b,0x634c,0x6b6d,0x634c,0x636d,0x634c,0x634c,0x6b6d,0x634c,0x632c,0x632c,0x5b0b,0x5b0b,0x634d,0x634c,0x6b8d,0x5b0b,0x5b2b,0x634c,0x5b0b,0x5b0b,0x6b4c,0x5b0b,0x632c,0x738e,0x6b6d,0x6b6d,0x6b6d,0x632c,0x632c,0x634c,0x6b8d,0x738d,0x634c,0x632c,0x632c,0x634c,0x5b2b,0x6b6c,0x630b,0x6b8d,0x6b6d,0x632c,0x6b6d,0x632b,0x6b4c,0x630b,0x5b0b,0x5b0b,0x632c,0x5b0b,0x5b0b,0x5aeb,0x630b,0x5aeb,0x5b0b,0x630b,0x5b0b,0x5b0b,0x632c,0x630b,0x632b,0x5b0b,0x5b0c,0x5b0b,0x5acb,0x5aeb,0x5aeb,0x5b0b,0x632c,0x6b4c,0x6b4c,0x5b0b,0x5b0b,0x5aeb,0x634c,0x632c,0x630b,0x634c,0x630b,0x6b4c,0x634c,0x632c,0x738d,0x630b,0x632c,0x632c,0x6b6d,0x632b, +0x6b8d,0x6b8d,0x5b4c,0x638d,0x5b2c,0x6bce,0x6bce,0x6bad,0x6b8d,0x638d,0x638d,0x530b,0x73ce,0x6bce,0x740f,0x73ce,0x52eb,0x5b2b,0x6bad,0x6b8d,0x636c,0x73ee,0x634c,0x636d,0x638d,0x638d,0x636d,0x5b2c,0x6bad,0x638d,0x5b4c,0x638d,0x636c,0x638d,0x636c,0x5b0b,0x5b4c,0x5b2c,0x5b0b,0x5b0b,0x638d,0x636c,0x530b,0x5b2b,0x634c,0x4aaa,0x52eb,0x52ea,0x4269,0x4aca,0x530b,0x4aaa,0x4a89,0x52eb,0x52eb,0x4248,0x52eb,0x4aaa,0x4a89,0x4a89,0x52ea,0x4aaa,0x4248,0x4269,0x4a8a,0x4aaa,0x4a89,0x4a89,0x4269,0x4aa9,0x4a89,0x4a69,0x4248,0x39e7,0x4228,0x52ea,0x52eb,0x4248,0x4a89,0x3a07,0x4228,0x4228,0x31c6,0x4228,0x4248,0x4248,0x4228,0x3a28,0x3a07,0x39e7,0x4248,0x4a69,0x3a28,0x4228,0x3a07,0x4228,0x4248,0x4248,0x39e7,0x31c7,0x4269,0x3a28,0x31a6,0x3a08,0x39e7,0x31a6,0x3a08,0x3a07,0x39e7,0x39e7,0x39e7,0x4a69,0x4228,0x39e7,0x52aa,0x4228,0x4a69,0x4228,0x31c7,0x4269,0x4269,0x3a07,0x4208,0x4248,0x39e7,0x31e7,0x3a08,0x4248,0x4228,0x3a08,0x3a08,0x4228,0x4248,0x3a07,0x3a28,0x4248,0x4a69,0x3a08,0x4249,0x4249,0x3a08,0x4a69,0x4249,0x4aaa,0x3a07,0x3a07,0x4228,0x39e7,0x31c7,0x4228,0x4228,0x4249,0x4228,0x4a69,0x4248,0x4228,0x4249,0x4208,0x4248,0x3a07,0x4228,0x4a89,0x4a69,0x52aa,0x4228,0x4228,0x4228,0x4a69,0x4aaa,0x4228,0x4228,0x4a8a,0x52cb,0x4a49,0x4a89,0x4a89,0x52aa,0x52aa,0x52aa,0x4a89,0x528a,0x4a69,0x52aa,0x5b0b,0x4a69,0x5acb,0x52aa,0x632c,0x52cb,0x4a69,0x4a8a,0x528a,0x528a,0x52aa,0x52aa,0x6b6d,0x52aa,0x52eb,0x5acb,0x52aa,0x634c,0x5b0b,0x4a8a,0x5b0c,0x632c,0x52eb,0x52cb,0x5b0b,0x5aeb,0x634c,0x5aeb,0x52cb,0x634c,0x52ca,0x5b0b,0x632c,0x52eb,0x636d,0x632c,0x632c,0x634c,0x738d,0x634c,0x6b6d,0x6b6d,0x636c,0x73ce,0x73ae,0x73ae,0x6b8d,0x6b8d,0x632c,0x634c,0x6bae,0x5b2c,0x634c,0x73ef,0x73ae,0x73ae,0x6b8d,0x7bef,0x634c,0x8450,0x73ef,0x73ae,0x8430,0x6b8d,0x632c,0x73ce,0x634c,0x6b6d,0x8430,0x73ae,0x73ce,0x7bef,0x6b8d,0x7bef,0x7bef,0x7bef,0x73ce,0x6b6d,0x73ae,0x8c70,0x7bef,0x8c71,0x8470,0x7c2f,0x6b8d,0x7c0f,0x73ce,0x8410,0x7bee,0x7c0f,0x8450,0x6b8d,0x7c2f,0x7c0f,0x7c0f,0x7c0f,0x7bee,0x7bee,0x73ce,0x840d,0x94ae,0x842f,0x8450,0x7c0f,0x73ce,0x738d,0x73ce,0x634c,0x7bce,0x840f,0x840f,0x634c,0x634c,0x6b8d,0x738d,0x73ae,0x73ae,0x73ad,0x6b6d,0x6b6d,0x6b8d,0x73ad,0x6b6c,0x6b6d,0x6b8d,0x634c,0x6b4c,0x632c,0x634c,0x6b6d,0x73ce,0x7bce,0x73ae,0x73ae,0x6b6d,0x6b4c,0x6b4d, +0x7c50,0x634c,0x6bae,0x6bce,0x5b0b,0x4acb,0x636d,0x5b0c,0x634c,0x5b4c,0x5b4c,0x52eb,0x634c,0x6b8e,0x5b0b,0x4a89,0x4248,0x5b0b,0x6bce,0x5b2c,0x5b0c,0x5b0b,0x52ca,0x5b4c,0x5b0b,0x52eb,0x52ca,0x4269,0x5b0b,0x52ca,0x4248,0x4a89,0x4a89,0x4aaa,0x4aaa,0x4269,0x4aaa,0x4a8a,0x4249,0x4a8a,0x4a8a,0x3a08,0x39e7,0x52ca,0x52aa,0x4a8a,0x4a89,0x4208,0x31a6,0x31e7,0x4269,0x4248,0x29a6,0x4269,0x4249,0x31c6,0x4228,0x3a28,0x3a27,0x3a28,0x4228,0x4228,0x39e7,0x4249,0x3a07,0x31e7,0x31c6,0x4269,0x29a6,0x39e7,0x3a08,0x31a6,0x31a6,0x31a6,0x4208,0x31a6,0x2965,0x2986,0x31a6,0x31c6,0x39e7,0x31c7,0x31a6,0x2986,0x2965,0x2124,0x2986,0x2144,0x2986,0x2965,0x39c7,0x31a6,0x2986,0x2965,0x2124,0x31c7,0x2986,0x2965,0x2986,0x2165,0x31c7,0x2986,0x2124,0x29a6,0x2965,0x31a6,0x31a6,0x2124,0x2965,0x2965,0x2145,0x31a6,0x2985,0x31c6,0x31a6,0x2965,0x31a6,0x2965,0x2945,0x2965,0x3186,0x31c7,0x39e7,0x3186,0x31c7,0x2986,0x3186,0x2965,0x2965,0x3186,0x2966,0x2965,0x2965,0x39e7,0x31a6,0x2965,0x2124,0x31a6,0x3186,0x31a6,0x31a6,0x2124,0x2145,0x2965,0x2145,0x2124,0x2965,0x2965,0x2945,0x2124,0x39c7,0x39c7,0x39e7,0x2986,0x31a6,0x3186,0x3186,0x2985,0x31c7,0x2945,0x2124,0x2985,0x31a6,0x39e8,0x2965,0x31c7,0x31a6,0x39e7,0x31a6,0x39c7,0x39e7,0x3a07,0x3a08,0x39e7,0x2965,0x3186,0x31c6,0x31a6,0x3a07,0x31c7,0x39e7,0x31c6,0x4248,0x4228,0x31a6,0x3a08,0x3a08,0x31c6,0x4248,0x3a08,0x31c7,0x39e7,0x4208,0x39c7,0x4248,0x52aa,0x4a89,0x4a69,0x4248,0x52aa,0x5aeb,0x4a89,0x4228,0x31a7,0x52cb,0x4a8a,0x4228,0x4a69,0x4a49,0x5aeb,0x52aa,0x4a89,0x52aa,0x5289,0x5aeb,0x52aa,0x52ca,0x52ea,0x632c,0x52ca,0x3a28,0x5b0b,0x52cb,0x632c,0x5aeb,0x632c,0x634c,0x632c,0x5b2c,0x5b0b,0x73ae,0x632c,0x5aeb,0x73ce,0x6b8d,0x73ce,0x6b8e,0x6b6d,0x6b6d,0x8450,0x73ae,0x636d,0x6b8d,0x73ae,0x6b6d,0x634d,0x6b6d,0x73cf,0x8c71,0x7bef,0x6b8d,0x7c0f,0x7c0f,0x6b6d,0x8430,0x7bce,0x7c0f,0x7bef,0x7bef,0x8430,0x7bef,0x7c0f,0x840f,0x7bef,0x7bef,0x7c10,0x8450,0x8c71,0x7bef,0x73ce,0x840f,0x8410,0x8430,0x8430,0x8430,0x8450,0x8c71,0x8c71,0x840f,0x8430,0x8430,0x7bef,0xa510,0xa4ee,0x8c71,0x9cd3,0x8450,0x8410,0x8450,0x8430,0x7c0f,0x8c50,0x8430,0x8450,0x840f,0x840f,0x8450,0x8430,0x8c71,0x8c71,0x8c50,0x8430,0x7c0f,0x7bef,0x8430,0x73ae,0x73ce,0x7bef,0x7bef,0x73ce,0x73ad,0x73ce,0x8c70,0x94b1,0x8c70,0x9cd2,0x94d2,0x8430,0x7bef,0x7bef, +0x2965,0x18e3,0x18e4,0x18c3,0x10a2,0x10a2,0x18e3,0x18e3,0x18e3,0x10a3,0x18c3,0x2104,0x18a3,0x0000,0x18a2,0x18a2,0x18c3,0x18e3,0x0000,0x1061,0x20e3,0x0000,0x1062,0x0820,0x0000,0x1082,0x0861,0x1082,0x0000,0x0800,0x18a2,0x18a3,0x1082,0x1082,0x0800,0x1061,0x0820,0x0841,0x0841,0x0841,0x0000,0x10a2,0x18c2,0x0820,0x0000,0x0841,0x0000,0x0000,0x1061,0x1061,0x1041,0x0841,0x1082,0x0841,0x0841,0x1061,0x0000,0x0000,0x1081,0x0841,0x0000,0x0820,0x1082,0x0841,0x1062,0x0841,0x1082,0x0000,0x0841,0x0841,0x0020,0x0882,0x0861,0x1082,0x0020,0x0840,0x1082,0x0861,0x0861,0x0841,0x0841,0x0841,0x0861,0x0861,0x1082,0x10a2,0x0861,0x1082,0x0841,0x0861,0x0020,0x0821,0x1061,0x0861,0x1082,0x10a2,0x1082,0x0861,0x0861,0x1061,0x0821,0x0841,0x1082,0x1061,0x1082,0x10a2,0x0861,0x1082,0x0861,0x0861,0x1082,0x0841,0x1081,0x0841,0x0020,0x0861,0x0861,0x0861,0x1082,0x0882,0x0861,0x0861,0x0861,0x0861,0x0861,0x1082,0x10a2,0x1082,0x1082,0x0881,0x1081,0x1082,0x1082,0x1082,0x1082,0x0861,0x1082,0x10a2,0x10a2,0x10a2,0x0881,0x1082,0x10a2,0x1082,0x0882,0x1082,0x1082,0x1082,0x1082,0x1082,0x0841,0x0020,0x0841,0x0861,0x0861,0x1082,0x1082,0x1082,0x0861,0x1062,0x10a2,0x10a2,0x0861,0x0861,0x1082,0x0861,0x10a2,0x18c3,0x1082,0x18c3,0x1082,0x0861,0x0020,0x10a2,0x10a2,0x10a2,0x18c3,0x1082,0x1082,0x10a2,0x1082,0x10a2,0x0861,0x1082,0x10a2,0x1082,0x1082,0x1082,0x0861,0x1081,0x10a2,0x10a2,0x1082,0x10a2,0x10a2,0x0020,0x10a2,0x1082,0x0862,0x18c3,0x1082,0x10a3,0x10a2,0x18c3,0x1903,0x18c3,0x18c3,0x18c3,0x10a2,0x1082,0x18c3,0x10a2,0x10a2,0x18c3,0x18e3,0x10a3,0x18e3,0x2104,0x10c2,0x18e3,0x10a2,0x10a2,0x10a2,0x2124,0x18e3,0x18c3,0x18c3,0x18e4,0x2104,0x2104,0x2145,0x2104,0x18e3,0x2124,0x2145,0x2104,0x10a3,0x10a3,0x2104,0x2945,0x2945,0x2945,0x10a3,0x2965,0x2965,0x1904,0x2124,0x31a6,0x39c7,0x2965,0x2965,0x2945,0x3186,0x2945,0x3186,0x3186,0x39c7,0x31a6,0x39c7,0x39e7,0x39e7,0x39c7,0x39c7,0x39c7,0x39e7,0x39c7,0x39e7,0x4a49,0x3a08,0x31a7,0x4208,0x4208,0x3186,0x39e7,0x4a49,0x4228,0x4a6a,0x5acb,0x528a,0x4228,0x526a,0x4a69,0x4a29,0x2947,0x4a69,0x4a8a,0x39e7,0x52aa,0x632c,0x528a,0x5acb,0x6b6d,0x52aa,0x630c,0x632c,0x5aeb,0x5b0b,0x630c,0x632c,0x632c,0x632c,0x6b6d,0x632c,0x5aeb,0x52cb,0x5aeb,0x632c,0x632c,0x6b4d,0x5aeb,0x632c,0x738e,0x6b6d,0x73ae,0x7bef,0x73af,0x73ae,0x8410,0x6b8e,0x5b0c}; diff --git a/MCUME_pico/picovcs/macro.h b/MCUME_pico/picovcs/macro.h new file mode 100644 index 0000000..e298409 --- /dev/null +++ b/MCUME_pico/picovcs/macro.h @@ -0,0 +1,99 @@ +/***************************************************************************** + + This file is part of x2600, the Atari 2600 Emulator + =================================================== + + Copyright 1996 Alex Hornby. For contributions see the file CREDITS. + + This software is distributed under the terms of the GNU General Public + License. This is free software with ABSOLUTELY NO WARRANTY. + + See the file COPYING for details. + + $Id: macro.h,v 1.7 1996/11/24 16:55:40 ahornby Exp $ +******************************************************************************/ + +/* + * + * Originally from x64 by + * Vesa-Matti Puro (vmp@lut.fi) + * Jarkko Sonninen (sonninen@lut.fi) + * + * NOTE: Can add zero page optimizations + */ + +#ifndef X2600_MACRO_H +#define X2600_MACRO_H + + +#include "types.h" +#include "cpu.h" + +#define LOAD(a) decRead(a) +#define LOADEXEC(a) undecRead(a) +//#define DLOAD(a) dbgRead(a) +#define LOAD_ZERO(a) decRead((ADDRESS)a) +#define LOAD_ADDR(a) ((LOADEXEC(a+1)<<8)+LOADEXEC(a)) //WAS LOAD +#define LOAD_ZERO_ADDR(a) LOAD_ADDR(a) + +#define STORE(a,b) decWrite((a),(b)) +#define STORE_ZERO(a,b) decWrite((a),(b)) + +#define PUSH(b) decWrite(SP+0x100,(b));SP-- +#define PULL() decRead((++SP)+0x100) + +#define UPPER(ad) (((ad)>>8)&0xff) +#define LOWER(ad) ((ad)&0xff) +#define LOHI(lo,hi) ((lo)|((hi)<<8)) + +#define REL_ADDR(pc,src) (pc+((SIGNED_CHAR)src)) + +#define SET_SIGN(a) (SF=(a)&S_SIGN) +#define SET_ZERO(a) (ZF=!(a)) +#define SET_CARRY(a) (CF=(a)) + +#define SET_INTERRUPT(a) (IF=(a)) +#define SET_DECIMAL(a) (DF=(a)) +#define SET_OVERFLOW(a) (OF=(a)) +#define SET_BREAK(a) (BF=(a)) + +#define SET_SR(a) (SF=(a) & S_SIGN,\ + ZF=(a) & S_ZERO,\ + CF=(a) & S_CARRY,\ + IF=(a) & S_INTERRUPT,\ + DF=(a) & S_DECIMAL,\ + OF=(a) & S_OVERFLOW,\ + BF=(a) & S_BREAK) + +#define GET_SR() ((SF ? S_SIGN : 0) |\ + (ZF ? S_ZERO : 0) |\ + (CF ? S_CARRY : 0) |\ + (IF ? S_INTERRUPT : 0) |\ + (DF ? S_DECIMAL : 0) |\ + (OF ? S_OVERFLOW : 0) |\ + (BF ? S_BREAK : 0) | S_NOTUSED) + +#define IF_SIGN() SF +#define IF_ZERO() ZF +#define IF_CARRY() CF +#define IF_INTERRUPT() IF +#define IF_DECIMAL() DF +#define IF_OVERFLOW() OF +#define IF_BREAK() BF + + +#define sprint_status() sprint_binary(GET_SR()) + + +#endif /* X2600_MACRO_H */ + + + + + + + + + + + diff --git a/MCUME_pico/picovcs/mnemonic.h b/MCUME_pico/picovcs/mnemonic.h new file mode 100644 index 0000000..59b417d --- /dev/null +++ b/MCUME_pico/picovcs/mnemonic.h @@ -0,0 +1,149 @@ +/* + * $Id: mnemonic.h,v 1.1 1995/11/26 21:52:43 alex Exp alex $ + * + * This file is part of Commodore 64 emulator. + * See README for copyright notice + * + * This file contains #defines for MOS6010 instruction mnemonics. + * + * Written by + * Vesa-Matti Puro (vmp@lut.fi) + * Jouko Valta (jopi@stekt.oulu.fi) + * + * $Log: mnemonic.h,v $ + * Revision 1.1 1995/11/26 21:52:43 alex + * Initial revision + * + * Revision 1.6 1994/12/12 16:59:44 jopi + * *** empty log message *** + * + * Revision 1.5 1994/06/16 17:19:26 jopi + * Code reorganized and cleaned up + * + * Revision 1.4 1993/11/10 01:55:34 jopi + * reu, asm and disk directory fixed + * REL_ADDR macro and 1541 made more portable + * + * Revision 1.3 93/06/21 13:38:45 jopi + * X64 version 0.2 PL 0 + * + * Revision 1.2 1993/06/13 08:21:50 sonninen + * *** empty log message *** + * + * + */ + +#ifndef X64_MNEMONIC_H +#define X64_MNEMONIC_H + + +/* INSTRUCTION MNEMONICS. */ + +#define ADC "ADC" +#define AND "AND" +#define ASL "ASL" +#define BCC "BCC" +#define BCS "BCS" +#define BEQ "BEQ" +#define BIT "BIT" +#define BMI "BMI" +#define BNE "BNE" +#define BPL "BPL" +#define BRK "BRK" +#define BVC "BVC" +#define BVS "BVS" +#define CLC "CLC" +#define CLD "CLD" +#define CLI "CLI" +#define CLV "CLV" +#define CMP "CMP" +#define CPX "CPX" +#define CPY "CPY" +#define DEC "DEC" +#define DEX "DEX" +#define DEY "DEY" +#define EOR "EOR" +#define INC "INC" +#define INX "INX" +#define INY "INY" +#define JMP "JMP" +#define JSR "JSR" +#define LDA "LDA" +#define LDX "LDX" +#define LDY "LDY" +#define LSR "LSR" +#define NOOP "NOOP" +#define NOP "NOP" +#define ORA "ORA" +#define PHA "PHA" +#define PHP "PHP" +#define PLA "PLA" +#define PLP "PLP" +#define ROL "ROL" +#define ROR "ROR" +#define RTI "RTI" +#define RTS "RTS" +#define SBC "SBC" +#define SEC "SEC" +#define SED "SED" +#define SEI "SEI" +#define STA "STA" +#define STX "STX" +#define STY "STY" +#define TAX "TAX" +#define TAY "TAY" +#define TSX "TSX" +#define TXA "TXA" +#define TXS "TXS" +#define TYA "TYA" + +#ifndef NO_UNDOC_CMDS +#define ANC "ANC" +#define ANE "ANE" +#define ARR "ARR" +#define ASR "ASR" +#define DCP "DCP" +#define ISB "ISB" +#define JAM "JAM" +#define LAS "LAS" +#define LAX "LAX" +#define LXA "LXA" + /* NOOP undefined NOP */ +#define RLA "RLA" +#define RRA "RRA" +#define SAX "SAX" +#define USBC "USBC" /* undefined SBC */ +#define SBX "SBX" +#define SHA "SHA" +#define SHS "SHS" +#define SHX "SHX" +#define SHY "SHY" +#define SLO "SLO" +#define SRE "SRE" + +#else +#define ANC NOOP +#define ANE NOOP +#define ARR NOOP +#define ASR NOOP +#define DCP NOOP +#define ISB NOOP +#define JAM NOOP +#define LAS NOOP +#define LAX NOOP +#define LXA NOOP + /* NOOP undefined NOP */ +#define RLA NOOP +#define RRA NOOP +#define SAX NOOP +#define USBC NOOP +#define SBX NOOP +#define SHA NOOP +#define SHS NOOP +#define SHX NOOP +#define SHY NOOP +#define SLO NOOP +#define SRE NOOP +#endif + +#endif /* X64_MNEMONIC_H */ diff --git a/MCUME_pico/picovcs/options.h b/MCUME_pico/picovcs/options.h new file mode 100644 index 0000000..2614f66 --- /dev/null +++ b/MCUME_pico/picovcs/options.h @@ -0,0 +1,26 @@ +//#ifndef OPTIONS_H +#define OPTIONS_H + +enum {NTSC=0, PAL=1, SECAM=2}; + +/* Options common to all ports of x2600 */ +extern struct BaseOptions { + int tvtype; + int lcon; + int rcon; + int bank; + int magstep; + char filename[80]; + int sound; + int swap; + int realjoy; + int limit; + int mousey; + int mitshm; + int dbg_level; +} base_opts; + +int +parse_options(int argc, char **argv); + +//#endif diff --git a/MCUME_pico/picovcs/picovcs.cpp b/MCUME_pico/picovcs/picovcs.cpp new file mode 100644 index 0000000..17f5674 --- /dev/null +++ b/MCUME_pico/picovcs/picovcs.cpp @@ -0,0 +1,129 @@ +#include "pico.h" +#include "pico/stdlib.h" + +extern "C" { + #include "iopins.h" + #include "emuapi.h" +} +#include "keyboard_osd.h" +#include "vga_t_dma.h" +extern "C" { +#include "Vcsemu.h" +} +#include + + +TFT_T_DMA tft; +static int skip=0; + +int main(void) { + stdio_init_all(); + tft.begin(VGA_MODE_320x240); + emu_init(); + while (true) { + if (menuActive()) { + uint16_t bClick = emu_DebounceLocalKeys(); + int action = handleMenu(bClick); + char * filename = menuSelection(); + if (action == ACTION_RUNTFT) { + toggleMenu(false); + emu_start(); + emu_Init(filename); + tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) ); + tft.startDMA(); + } + tft.waitSync(); + } + else { + emu_Step(); + uint16_t bClick = emu_DebounceLocalKeys(); + emu_Input(bClick); + } + //int c = getchar_timeout_us(0); + //switch (c) { + // case ' ': + // printf("test: %d\n", 1); + // break; + //} + } +} + +static unsigned char palette8[PALETTE_SIZE]; + +void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index) +{ + if (index +#include + +extern "C" { + #include "emuapi.h" + #include "iopins.h" +} + + +#include "vga_t_dma.h" +const uint16_t deflogo[] = { + 0,0 +}; +static const uint16_t * logo = deflogo; +static const unsigned short * keysw = keyswzx80; + +#define MAX_FILES 64 +#define MAX_FILENAME_SIZE 24 +#define MAX_MENULINES 9 +#define TEXT_HEIGHT 16 +#define TEXT_WIDTH 8 +#define MENU_FILE_XOFFSET (6*TEXT_WIDTH) +#define MENU_FILE_YOFFSET (2*TEXT_HEIGHT) +#define MENU_FILE_W (MAX_FILENAME_SIZE*TEXT_WIDTH) +#define MENU_FILE_H (MAX_MENULINES*TEXT_HEIGHT) +#define MENU_FILE_BGCOLOR RGBVAL16(0x00,0x00,0x40) +#define MENU_JOYS_YOFFSET (12*TEXT_HEIGHT) +#define MENU_VBAR_XOFFSET (0*TEXT_WIDTH) +#define MENU_VBAR_YOFFSET (MENU_FILE_YOFFSET) + +#define MENU_TFT_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_TFT_YOFFSET (MENU_VBAR_YOFFSET+32) +#define MENU_VGA_XOFFSET (MENU_FILE_XOFFSET+MENU_FILE_W+8) +#define MENU_VGA_YOFFSET (MENU_VBAR_YOFFSET+MENU_FILE_H-32-37) + +extern TFT_T_DMA tft; + +static char romspath[64]; +static int nbFiles=0; +static int curFile=0; +static int topFile=0; +static char selection[MAX_FILENAME_SIZE+1]=""; +static char files[MAX_FILES][MAX_FILENAME_SIZE]; +static bool menuRedraw=true; + +static bool i2cKeyboardPresent = false; +static unsigned short * keys; +static int keyMap; + +static int keypadval=0; +static bool joySwapped = false; +static uint16_t bLastState; +static int xRef; +static int yRef; +static uint8_t usbnavpad=0; + +static bool menuOn=true; + + + + +void emu_printf(char * text) +{ + printf("%s\n",text); +} + +void emu_printf(int val) +{ + printf("%d\n",val); +} + +void emu_printi(int val) +{ + printf("%d\n",val); +} + +void emu_printh(int val) +{ + printf("0x%.8\n",val); +} + +static int malbufpt = 0; +static char malbuf[EXTRA_HEAP]; + +void * emu_Malloc(int size) +{ + void * retval = malloc(size); + if (!retval) { + emu_printf("failled to allocate"); + emu_printf(size); + emu_printf("fallback"); + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + } + else { + emu_printf("failure to allocate"); + } + } + else { + emu_printf("could allocate dynamic "); + emu_printf(size); + } + + return retval; +} + +void * emu_MallocI(int size) +{ + void * retval = NULL; + + if ( (malbufpt+size) < sizeof(malbuf) ) { + retval = (void *)&malbuf[malbufpt]; + malbufpt += size; + emu_printf("could allocate static "); + emu_printf(size); + } + else { + emu_printf("failure to allocate"); + } + + return retval; +} +void emu_Free(void * pt) +{ + free(pt); +} + + + + + +int emu_ReadAnalogJoyX(int min, int max) +{ +#ifdef PIN_JOY2_A1X + adc_select_input(0); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVX + val = 4095 - val; +#endif + val = val-xRef; + val = ((val*140)/100); + if ( (val > -512) && (val < 512) ) val = 0; + val = val+2048; + return (val*(max-min))/4096; +} + +int emu_ReadAnalogJoyY(int min, int max) +{ +#ifdef PIN_JOY2_A2Y + adc_select_input(1); + int val = adc_read(); +#else + int val = 0; +#endif +#if INVY + val = 4095 - val; +#endif + val = val-yRef; + val = ((val*120)/100); + if ( (val > -512) && (val < 512) ) val = 0; + //val = (val*(max-min))/4096; + val = val+2048; + //return val+(max-min)/2; + return (val*(max-min))/4096; +} + + +static uint16_t readAnalogJoystick(void) +{ + uint16_t joysval = 0; + + int xReading = emu_ReadAnalogJoyX(0,256); + if (xReading > 128) joysval |= MASK_JOY2_LEFT; + else if (xReading < 128) joysval |= MASK_JOY2_RIGHT; + + int yReading = emu_ReadAnalogJoyY(0,256); + if (yReading < 128) joysval |= MASK_JOY2_UP; + else if (yReading > 128) joysval |= MASK_JOY2_DOWN; + +#ifdef PIN_JOY2_BTN + joysval |= (gpio_get(PIN_JOY2_BTN) ? 0 : MASK_JOY2_BTN); +#endif + return (joysval); +} + + +int emu_SwapJoysticks(int statusOnly) { + if (!statusOnly) { + if (joySwapped) { + joySwapped = false; + } + else { + joySwapped = true; + } + } + return(joySwapped?1:0); +} + +int emu_GetPad(void) +{ + return(keypadval/*|((joySwapped?1:0)<<7)*/); +} + +int emu_ReadKeys(void) +{ + uint16_t retval; + uint16_t j1 = readAnalogJoystick(); + uint16_t j2 = 0; + + // Second joystick +#if INVY +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_DOWN; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_UP; +#endif +#else +#ifdef PIN_JOY1_1 + if ( !gpio_get(PIN_JOY1_1) ) j2 |= MASK_JOY2_UP; +#endif +#ifdef PIN_JOY1_2 + if ( !gpio_get(PIN_JOY1_2) ) j2 |= MASK_JOY2_DOWN; +#endif +#endif +#if INVX +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_LEFT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_RIGHT; +#endif +#else +#ifdef PIN_JOY1_3 + if ( !gpio_get(PIN_JOY1_3) ) j2 |= MASK_JOY2_RIGHT; +#endif +#ifdef PIN_JOY1_4 + if ( !gpio_get(PIN_JOY1_4) ) j2 |= MASK_JOY2_LEFT; +#endif +#endif +#ifdef PIN_JOY1_BTN + if ( !gpio_get(PIN_JOY1_BTN) ) j2 |= MASK_JOY2_BTN; +#endif + if (joySwapped) { + retval = ((j1 << 8) | j2); + } + else { + retval = ((j2 << 8) | j1); + } + + if (usbnavpad & MASK_JOY2_UP) retval |= MASK_JOY2_UP; + if (usbnavpad & MASK_JOY2_DOWN) retval |= MASK_JOY2_DOWN; + if (usbnavpad & MASK_JOY2_LEFT) retval |= MASK_JOY2_LEFT; + if (usbnavpad & MASK_JOY2_RIGHT) retval |= MASK_JOY2_RIGHT; + if (usbnavpad & MASK_JOY2_BTN) retval |= MASK_JOY2_BTN; +#ifdef PIN_KEY_USER1 + if ( !gpio_get(PIN_KEY_USER1) ) retval |= MASK_KEY_USER1; +#endif +#ifdef PIN_KEY_USER2 + if ( !gpio_get(PIN_KEY_USER2) ) retval |= MASK_KEY_USER2; +#endif +#ifdef PIN_KEY_USER3 + if ( !gpio_get(PIN_KEY_USER3) ) retval |= MASK_KEY_USER3; +#endif +#ifdef PIN_KEY_USER4 + if ( !gpio_get(PIN_KEY_USER4) ) retval |= MASK_KEY_USER4; +#endif + + //Serial.println(retval,HEX); + + if ( ((retval & (MASK_KEY_USER1+MASK_KEY_USER2)) == (MASK_KEY_USER1+MASK_KEY_USER2)) + || (retval & MASK_KEY_USER4 ) ) + { + } + + return (retval); +} + +unsigned short emu_DebounceLocalKeys(void) +{ + uint16_t bCurState = emu_ReadKeys(); + uint16_t bClick = bCurState & ~bLastState; + bLastState = bCurState; + + return (bClick); +} + +int emu_ReadI2CKeyboard(void) { + int retval=0; + + return(retval); +} + +void emu_InitJoysticks(void) { + + // Second Joystick +#ifdef PIN_JOY1_1 + gpio_set_pulls(PIN_JOY1_1,true,false); + gpio_set_dir(PIN_JOY1_1,GPIO_IN); +#endif +#ifdef PIN_JOY1_2 + gpio_set_pulls(PIN_JOY1_2,true,false); + gpio_set_dir(PIN_JOY1_2,GPIO_IN); +#endif +#ifdef PIN_JOY1_3 + gpio_set_pulls(PIN_JOY1_3,true,false); + gpio_set_dir(PIN_JOY1_3,GPIO_IN); +#endif +#ifdef PIN_JOY1_4 + gpio_set_pulls(PIN_JOY1_4,true,false); + gpio_set_dir(PIN_JOY1_4,GPIO_IN); +#endif +#ifdef PIN_JOY1_BTN + gpio_set_pulls(PIN_JOY1_BTN,true,false); + gpio_set_dir(PIN_JOY1_BTN,GPIO_IN); +#endif + +#ifdef PIN_KEY_USER1 + gpio_set_pulls(PIN_KEY_USER1,true,false); + gpio_set_dir(PIN_KEY_USER1,GPIO_IN); +#endif +#ifdef PIN_KEY_USER2 + gpio_set_pulls(PIN_KEY_USER2,true,false); + gpio_set_dir(PIN_KEY_USER2,GPIO_IN); +#endif +#ifdef PIN_KEY_USER3 + gpio_set_pulls(PIN_KEY_USER3,true,false); + gpio_set_dir(PIN_KEY_USER3,GPIO_IN); +#endif +#ifdef PIN_KEY_USER4 + gpio_set_pulls(PIN_KEY_USER4,true,false); + gpio_set_dir(PIN_KEY_USER4,GPIO_IN); +#endif +#ifdef PIN_JOY2_BTN + gpio_set_pulls(PIN_JOY2_BTN,true,false); + gpio_set_dir(PIN_JOY2_BTN,GPIO_IN); +#endif + +#ifdef PIN_JOY2_A1X + adc_init(); + adc_gpio_init(PIN_JOY2_A1X); + adc_gpio_init(PIN_JOY2_A2Y); + xRef=0; yRef=0; + for (int i=0; i<10; i++) { + adc_select_input(0); + xRef += adc_read(); + adc_select_input(1); + yRef += adc_read(); + sleep_ms(20); + } +#endif + +#if INVX + xRef = 4095 -xRef/10; +#else + xRef /= 10; +#endif +#if INVY + yRef = 4095 -yRef/10; +#else + yRef /= 10; +#endif +} + + + + +int emu_setKeymap(int index) { + if (index) { + keysw = keyswzx81; + } + else { + keysw = keyswzx80; + } +} + + + +#include "ff.h" +static FATFS fatfs; +static FIL file; +extern "C" int sd_init_driver(void); + +static int readNbFiles(char * rootdir) { + int totalFiles = 0; + +#ifndef FAKESDIO + DIR dir; + FILINFO entry; + FRESULT fr = f_findfirst(&dir, &entry, rootdir, "*"); + while ( (fr == FR_OK) && (entry.fname[0]) && (totalFiles=0) { + menuRedraw=true; + curFile -= 9; + } else if (curFile!=0) { + menuRedraw=true; + curFile--; + } + } + else if (bClick & MASK_JOY2_DOWN) { + if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_JOY2_LEFT) || (bClick & MASK_JOY1_LEFT) ) { + if ((curFile<(nbFiles-9)) && (nbFiles)) { + curFile += 9; + menuRedraw=true; + } + else if ((curFile<(nbFiles-1)) && (nbFiles)) { + curFile++; + menuRedraw=true; + } + } + else if ( (bClick & MASK_KEY_USER2) ) { + emu_SwapJoysticks(0); + menuRedraw=true; + } + + if (menuRedraw && nbFiles) { + int fileIndex = 0; + tft.drawRectNoDma(MENU_FILE_XOFFSET,MENU_FILE_YOFFSET, MENU_FILE_W, MENU_FILE_H, MENU_FILE_BGCOLOR); +// if (curFile <= (MAX_MENULINES/2-1)) topFile=0; +// else topFile=curFile-(MAX_MENULINES/2); + if (curFile <= (MAX_MENULINES-1)) topFile=0; + else topFile=curFile-(MAX_MENULINES/2); + + //Serial.print("curfile: "); + //Serial.println(curFile); + //Serial.print("topFile: "); + //Serial.println(topFile); + + int i=0; + while (i=nbFiles) { + // no more files + break; + } + char * filename = &files[fileIndex][0]; + if (fileIndex >= topFile) { + if ((i+topFile) < nbFiles ) { + if ((i+topFile)==curFile) { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0x00), RGBVAL16(0xff,0x00,0x00), true); + strcpy(selection,filename); + } + else { + tft.drawTextNoDma(MENU_FILE_XOFFSET,i*TEXT_HEIGHT+MENU_FILE_YOFFSET, filename, RGBVAL16(0xff,0xff,0xff), MENU_FILE_BGCOLOR, true); + } + } + i++; + } + fileIndex++; + } + + + tft.drawTextNoDma(48,MENU_JOYS_YOFFSET+8, (emu_SwapJoysticks(1)?(char*)"SWAP=1":(char*)"SWAP=0"), RGBVAL16(0x00,0xff,0xff), RGBVAL16(0x00,0x00,0xff), false); + menuRedraw=false; + } + + return (action); +} + +bool menuActive(void) +{ + return (menuOn); +} + +void toggleMenu(bool on) { + if (on) { + menuOn = true; + backgroundMenu(); + } else { + menuOn = false; + } +} + +char * menuSelection(void) +{ + return (selection); +} + + + + + + + + + +int emu_FileOpen(char * filename) +{ + int retval = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileOpen..."); + emu_printf(filepath); + if( !(f_open(&file, filepath, FA_READ)) ) { + retval = 1; + } + else { + emu_printf("FileOpen failed"); + } + return (retval); +} + +int emu_FileRead(char * buf, int size) +{ + unsigned char buffer[256]; + int remaining = size; + int byteread = 0; + unsigned int retval=0; + if (size < 256) { + if( !(f_read (&file, buffer, size, &retval)) ) + if (retval>0) { + memcpy(buf,buffer,retval); + byteread += retval; + } + } + else { + while (remaining>0) { + if( !(f_read (&file, buffer, 256, &retval)) ) + //f_read (&file, buffer, 256, &retval); + if (retval>0) { + //emu_printi(retval); + memcpy(buf,buffer,retval); + buf += retval; + byteread += retval; + remaining -= retval; + } + else { + break; + } + } + } + return byteread; +} + +unsigned char emu_FileGetc(void) { + unsigned char c; + unsigned int retval=0; + if( !(f_read (&file, &c, 1, &retval)) ) + if (retval != 1) { + emu_printf("emu_FileGetc failed"); + } + return c; +} + + +void emu_FileClose(void) +{ + f_close(&file); +} + +int emu_FileSize(char * filename) +{ + int filesize=0; + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("FileSize..."); + emu_printf(filepath); + FILINFO entry; + f_stat(filepath, &entry); + filesize = entry.fsize; + return(filesize); +} + + +#ifdef SDIO + +int emu_FileSeek(int seek) +{ +#ifdef USE_SDFS + f_lseek(&file, seek); +#else + file.seek(seek); +#endif + return (seek); +} + +int emu_FileTell(void) +{ +#ifdef USE_SDFS + return (f_tell(&file)); +#else + return (50); +#endif +} + + +int emu_LoadFile(char * filename, char * buf, int size) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFile..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + filesize = f_size(&file); + emu_printf(filesize); + if (size >= filesize) + { + int retval=0; + if( (f_read (&file, buf, filesize, &retval)) ) { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + filesize = file.size(); + emu_printf(filesize); + + if (size >= filesize) + { + if (emu_FileRead(buf, filesize) != filesize) + { + emu_printf("File read failed"); + } + } + file.close(); + } +#endif + + return(filesize); +} + +int emu_LoadFileSeek(char * filename, char * buf, int size, int seek) +{ + int filesize = 0; + + char filepath[80]; + strcpy(filepath, romspath); + strcat(filepath, "/"); + strcat(filepath, filename); + emu_printf("LoadFileSeek..."); + emu_printf(filepath); +#ifdef USE_SDFS + if( !(f_open(&file, filepath, FA_READ)) ) { + f_lseek(&file, seek); + emu_printf(size); + if (size >= filesize) + { + int retval=0; + if( (!f_read (&file, buf, size, &retval)) ) + if (retval != size) + { + emu_printf("File read failed"); + } + } + f_close(&file); + } +#else + if ((file = SD.open(filepath, O_READ))) + { + file.seek(seek); + emu_printf(size); + if (file.read(buf, size) != size) { + emu_printf("File read failed"); + } + file.close(); + } +#endif + + return(filesize); +} +#endif + + + +void emu_init(void) +{ +#ifndef FAKESDIO + sd_init_driver(); + FRESULT fr = f_mount(&fatfs, "0:", 1); +#endif + + strcpy(romspath,ROMSDIR); + nbFiles = readNbFiles(romspath); + + emu_printf("SD initialized, files found: "); + emu_printi(nbFiles); + + emu_InitJoysticks(); +#ifdef SWAP_JOYSTICK + joySwapped = true; +#else + joySwapped = false; +#endif + + toggleMenu(true); +} + + +void emu_start(void) +{ + + usbnavpad = 0; + + keys = (unsigned short *)key_map1; + keyMap = 0; +} diff --git a/MCUME_pico/testio/emuapi.h b/MCUME_pico/testio/emuapi.h new file mode 100644 index 0000000..bffe643 --- /dev/null +++ b/MCUME_pico/testio/emuapi.h @@ -0,0 +1,152 @@ +#ifndef EMUAPI_H +#define EMUAPI_H + +#include "platform_config.h" + +//#define TIMER_REND 1 +#define EXTRA_HEAP 0x10 + +// Title: < > +#define TITLE " ZX81/ZX80 Emulator" +#define ROMSDIR "z81" + +#define emu_Init(ROM) {z81_Start(ROM); z81_Init(); } +#define emu_Step(x) {z81_Step();} +#define emu_Input(x) {} + +#define PALETTE_SIZE 2 +#define VID_FRAME_SKIP 0x3 +#define TFT_VBUFFER_YCROP 0 +#define SINGLELINE_RENDERING 1 + +#define ACTION_NONE 0 +#define ACTION_MAXKBDVAL 225 +#define ACTION_EXITKBD 128 +#define ACTION_RUNTFT 129 +#define ACTION_RUNVGA 130 + +#ifdef KEYMAP_PRESENT + +#define TAREA_W_DEF 32 +#define TAREA_H_DEF 32 +#define TAREA_END 255 +#define TAREA_NEW_ROW 254 +#define TAREA_NEW_COL 253 +#define TAREA_XY 252 +#define TAREA_WH 251 + +#define KEYBOARD_X 10 +#define KEYBOARD_Y 8 +#define KEYBOARD_KEY_H 40 +#define KEYBOARD_KEY_W 30 +#define KEYBOARD_HIT_COLOR RGBVAL16(0xff,0x00,0x00) + +const unsigned short keyswzx80[] = { + TAREA_XY,KEYBOARD_X,KEYBOARD_Y+16, + TAREA_WH,KEYBOARD_KEY_W,KEYBOARD_KEY_H-6, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_END}; + +const unsigned short keyswzx81[] = { + TAREA_XY,KEYBOARD_X,KEYBOARD_Y, + TAREA_WH,KEYBOARD_KEY_W,KEYBOARD_KEY_H, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_NEW_ROW,30,30,30,30,30,30,30,30,30,30, + TAREA_END}; + +const unsigned short key_map1[] = { + 30,31,32,33,34,35,36,37,38,39, + 20,26, 8,21,23,28,25,12,18,19, + 4, 9, 7,22, 4,11,13,14,15,40, + 25, 6,27,29,224,5,17,16,225,44 + }; + +#ifdef HAS_I2CKBD +const unsigned short i2ckeys[] = { + 0X0080,0X0008,0X0180,0X0108,0X0280,0X0208,0X0380,0X0308,0X0480,0X0408, + 0X0040,0X0004,0X0140,0X0104,0X0240,0X0204,0X0340,0X0304,0X0440,0X0404, + 0X0020,0X0002,0X0120,0X0102,0X0220,0X0202,0X0320,0X0302,0X0420,0X0402, + 0X0010,0X0001,0X0110,0X0101,0X0210,0X0201,0X0310,0X0301,0X0410,0X0401, + }; +#endif + +#endif + +#define MASK_JOY2_RIGHT 0x0001 +#define MASK_JOY2_LEFT 0x0002 +#define MASK_JOY2_UP 0x0004 +#define MASK_JOY2_DOWN 0x0008 +#define MASK_JOY2_BTN 0x0010 +#define MASK_KEY_USER1 0x0020 +#define MASK_KEY_USER2 0x0040 +#define MASK_KEY_USER3 0x0080 +#define MASK_JOY1_RIGHT 0x0100 +#define MASK_JOY1_LEFT 0x0200 +#define MASK_JOY1_UP 0x0400 +#define MASK_JOY1_DOWN 0x0800 +#define MASK_JOY1_BTN 0x1000 +#define MASK_KEY_USER4 0x2000 + + +extern void emu_init(void); +extern void emu_start(void); +extern void emu_resetSD(void); + +extern void emu_printf(char * text); +extern void emu_printi(int val); +extern void * emu_Malloc(int size); +extern void emu_Free(void * pt); + +extern int emu_FileSystemInit(void); +extern int emu_FileOpen(char * filename); +extern int emu_FileRead(char * buf, int size); +extern unsigned char emu_FileGetc(void); +extern int emu_FileSeek(int seek); +extern void emu_FileClose(void); +extern int emu_FileSize(char * filename); +extern int emu_LoadFile(char * filename, char * buf, int size); +extern int emu_LoadFileSeek(char * filename, char * buf, int size, int seek); +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); + +extern void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index); +extern void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride); +extern void emu_DrawLine(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line); +extern void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line); +extern void emu_DrawVsync(void); +extern int emu_FrameSkip(void); +extern void * emu_LineBuffer(int line); + +extern void emu_InitJoysticks(void); +extern int emu_SwapJoysticks(int statusOnly); +extern unsigned short emu_DebounceLocalKeys(void); +extern int emu_ReadKeys(void); +extern int emu_GetPad(void); +extern int emu_ReadAnalogJoyX(int min, int max); +extern int emu_ReadAnalogJoyY(int min, int max); +extern int emu_ReadI2CKeyboard(void); +extern void emu_KeyboardOnUp(int keymodifer, int key); +extern void emu_KeyboardOnDown(int keymodifer, int key); + +extern void emu_sndPlaySound(int chan, int volume, int freq); +extern void emu_sndPlayBuzz(int size, int val); +extern void emu_sndInit(); +extern void emu_resetus(void); +extern int emu_us(void); + +extern int emu_setKeymap(int index); + +extern void emu_FileTempInit(void); +extern void emu_FileTempRead(int addr, unsigned char * val, int n); +extern void emu_FileTempWrite(int addr, unsigned char val); +extern void emu_printh(int val); + + +#endif diff --git a/MCUME_pico/testio/font8x8.h b/MCUME_pico/testio/font8x8.h new file mode 100644 index 0000000..4f773da --- /dev/null +++ b/MCUME_pico/testio/font8x8.h @@ -0,0 +1,135 @@ + +// Font: c64_lower.64c + +const unsigned char font8x8[128][8] PROGMEM = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) + { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) + { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) + { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) + { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//) + { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) + { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) + { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) + { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F +}; + diff --git a/MCUME_pico/testio/iopins.h b/MCUME_pico/testio/iopins.h new file mode 100644 index 0000000..a636576 --- /dev/null +++ b/MCUME_pico/testio/iopins.h @@ -0,0 +1,42 @@ +#ifndef IOPINS_H +#define IOPINS_H + +#include "platform_config.h" + + +// VGA (see in code!!!) +/* +2-9 RRRGGGBB +10-11 VSYNC and HSYNC +*/ + +// SD (see SPI0 in code!!!) +/* +#define SD_SCLK 18 +#define SD_MOSI 19 +#define SD_MISO 16 +#define SD_CS 17 +*/ + +// I2C keyboard (not used) +/* +#define I2C_SCL_IO 15? +#define I2C_SDA_IO 14? +*/ + +// Analog joystick (primary) for JOY2 and 3 extra buttons +#define PIN_JOY2_A1X 26 +#define PIN_JOY2_A2Y 27 +#define PIN_JOY2_BTN 22 +#define PIN_KEY_USER1 20 +#define PIN_KEY_USER2 21 + +// Second joystick +//#define PIN_JOY1_BTN 2 +//#define PIN_JOY1_1 14 // UP +//#define PIN_JOY1_2 7 // DOWN +//#define PIN_JOY1_3 6 // RIGHT +//#define PIN_JOY1_4 5 // LEFT + + +#endif diff --git a/MCUME_pico/testio/keyboard_osd.h b/MCUME_pico/testio/keyboard_osd.h new file mode 100644 index 0000000..081bcdd --- /dev/null +++ b/MCUME_pico/testio/keyboard_osd.h @@ -0,0 +1,21 @@ + +#ifndef keyboard_osd_h_ +#define keyboard_osd_h_ + +extern bool virtualkeyboardIsActive(void); +extern void drawVirtualkeyboard(void); +extern void toggleVirtualkeyboard(bool keepOn); +extern void handleVirtualkeyboard(void); + +extern bool callibrationActive(void); +extern int handleCallibration(uint16_t bClick); + +extern bool menuActive(void); +extern char * menuSelection(void); +extern void toggleMenu(bool on); +extern int handleMenu(uint16_t bClick); + + +#endif + + diff --git a/MCUME_pico/testio/platform_config.h b/MCUME_pico/testio/platform_config.h new file mode 100644 index 0000000..d9351ab --- /dev/null +++ b/MCUME_pico/testio/platform_config.h @@ -0,0 +1,25 @@ +#ifndef _PLATFORM_CONFIG_H_ +#define _PLATFORM_CONFIG_H_ + + +#define HAS_SND 1 +//#define INVX 1 +//#define INVY 1 +//#define HAS_USBKEY 1 +//#define HAS_I2CKBD 1 + +//#define ILI9341 1 +//#define ST7789 1 +//#define SWAP_JOYSTICK 1 +//#define LOHRES 1 +//#define ROTATE_SCREEN 1 +//#define EXTERNAL_SD 1 + +//#define HAS_PSRAM 1 + +//#define USE_SDFAT 1 +//#define SD_FAT_TYPE 1 +//#define USE_SDFS 1 +//#define SDFSDEV "1:" + +#endif diff --git a/MCUME_pico/testio/rock.h b/MCUME_pico/testio/rock.h new file mode 100755 index 0000000..b5d1393 --- /dev/null +++ b/MCUME_pico/testio/rock.h @@ -0,0 +1,62303 @@ +// Clip taken from audio sample 'Angus Lejeune Theme' by maxcruger at +// freesound: (https://freesound.org/people/maxcruger/sounds/556352/) licensed +// under CC BY 3.0: https://creativecommons.org/licenses/by/3.0/ +// 22 kHz sample rate with 8-bit samples. + +#define AUDIO_SAMPLES 62294 + +uint8_t audio_buffer[] = { +127, +127, +127, +128, +128, +127, +128, +127, +127, +127, +128, +127, +128, +127, +128, +127, +128, +128, +128, +127, +127, +127, +128, +127, +127, +127, +128, +128, +127, +127, +127, +128, +127, +127, +127, +127, +127, +128, +127, +128, +128, +127, +128, +127, +127, +127, +128, +127, +127, +127, +127, +127, +128, +128, +127, +128, +127, +128, +127, +127, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +128, +127, +127, +128, +127, +128, +128, +127, +127, +127, +127, +127, +128, +127, +127, +128, +128, +127, +127, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +128, +128, +128, +127, +128, +127, +128, +127, +128, +128, +128, +128, +128, +127, +128, +127, +127, +127, +128, +128, +128, +127, +128, +127, +127, +127, +128, +127, +127, +127, +127, +128, +127, +127, +127, +127, +128, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +126, +127, +126, +127, +126, +127, +127, +127, +127, +126, +127, +127, +126, +127, +126, +127, +126, +127, +127, +126, +127, +127, +126, +127, +126, +127, +127, +127, +126, +127, +126, +127, +126, +127, +127, +127, +126, +127, +127, +127, +127, +127, +126, +126, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +127, +127, +126, +127, +127, +128, +128, +126, +127, +126, +128, +127, +127, +128, +128, +127, +128, +127, +127, +127, +127, +127, +127, +127, +128, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +127, +127, +127, +128, +127, +128, +127, +128, +127, +128, +128, +128, +128, +128, +127, +128, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +128, +128, +128, +127, +128, +128, +128, +128, +128, +127, +128, +127, +127, +127, +128, +128, +128, +128, +128, +127, +128, +128, +127, +128, +127, +128, +128, +128, +127, +127, +127, +127, +127, +127, +126, +127, +126, +127, +128, +127, +127, +126, +127, +127, +126, +127, +127, +126, +127, +127, +128, +127, +128, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +126, +127, +127, +127, +127, +127, +128, +127, +127, +126, +127, +127, +127, +127, +127, +126, +127, +127, +127, +127, +127, +128, +127, +128, +127, +128, +127, +127, +127, +127, +128, +127, +127, +127, +127, +128, +127, +127, +128, +127, +128, +127, +127, +128, +128, +127, +128, +127, +128, +128, +127, +128, +128, +127, +127, +128, +127, +127, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +128, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +128, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +127, +127, +127, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +127, +128, +128, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +127, +127, +127, +127, +128, +127, +128, +128, +127, +128, +127, +127, +127, +127, +127, +127, +126, +127, +127, +126, +127, +126, +127, +127, +126, +127, +127, +126, +127, +127, +126, +127, +126, +127, +127, +126, +127, +127, +127, +126, +127, +126, +127, +127, +127, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +126, +127, +127, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +127, +127, +127, +127, +127, +126, +127, +126, +127, +128, +126, +127, +126, +127, +127, +127, +128, +127, +127, +128, +127, +128, +127, +128, +127, +127, +128, +128, +128, +128, +127, +128, +128, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +127, +128, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +127, +128, +127, +127, +127, +128, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +127, +128, +127, +128, +127, +128, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +128, +128, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +127, +128, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +126, +127, +127, +127, +127, +127, +126, +127, +126, +127, +127, +127, +127, +127, +127, +126, +127, +127, +127, +126, +127, +126, +127, +127, +127, +127, +126, +127, +127, +127, +127, +127, +128, +127, +127, +127, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +128, +128, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +128, +127, +128, +126, +127, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +127, +128, +127, +128, +127, +128, +127, +128, +128, +128, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +128, +127, +127, +127, +128, +127, +128, +128, +127, +128, +126, +127, +127, +127, +127, +126, +128, +127, +128, +127, +128, +127, +127, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +126, +127, +126, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +127, +127, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +126, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +128, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +127, +128, +127, +128, +128, +127, +128, +127, +128, +128, +127, +128, +128, +128, +128, +127, +126, +127, +127, +127, +127, +126, +127, +126, +127, +127, +127, +127, +127, +127, +127, +126, +127, +126, +127, +127, +127, +128, +127, +127, +127, +128, +127, +127, +126, +127, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +127, +126, +127, +127, +126, +127, +127, +128, +127, +126, +127, +127, +127, +127, +127, +126, +127, +127, +127, +127, +126, +128, +126, +126, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +127, +127, +127, +128, +127, +128, +127, +127, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +128, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +127, +127, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +128, +128, +127, +128, +127, +128, +127, +128, +128, +128, +128, +127, +128, +127, +128, +127, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +128, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +128, +128, +128, +128, +128, +127, +127, +127, +128, +127, +128, +127, +128, +127, +127, +128, +127, +127, +127, +127, +127, +127, +128, +127, +128, +127, +128, +127, +127, +127, +128, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +128, +128, +127, +128, +127, +128, +128, +127, +128, +127, +127, +128, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +127, +128, +127, +127, +127, +126, +127, +127, +126, +127, +126, +127, +126, +127, +127, +127, +127, +127, +126, +127, +126, +127, +126, +126, +127, +126, +127, +126, +126, +127, +126, +127, +127, +127, +126, +127, +126, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +127, +127, +126, +127, +126, +127, +127, +127, +127, +127, +127, +127, +126, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +127, +127, +128, +127, +128, +127, +127, +128, +127, +127, +127, +128, +128, +127, +128, +127, +127, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +128, +127, +127, +127, +128, +127, +127, +127, +128, +127, +128, +128, +128, +128, +127, +127, +128, +127, +127, +127, +127, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +127, +128, +127, +127, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +126, +127, +127, +127, +127, +127, +126, +128, +128, +127, +128, +127, +127, +127, +127, +126, +127, +127, +127, +127, +127, +126, +127, +127, +127, +127, +126, +127, +127, +127, +127, +126, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +126, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +127, +127, +127, +128, +127, +127, +127, +128, +127, +128, +127, +128, +128, +128, +128, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +128, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +128, +127, +128, +127, +127, +128, +127, +128, +127, +128, +127, +127, +128, +127, +127, +127, +128, +127, +127, +128, +127, +127, +127, +128, +128, +128, +127, +128, +127, +127, +127, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +127, +127, +127, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +126, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +127, +127, +127, +127, +127, +127, +126, +127, +127, +126, +127, +126, +127, +126, +126, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +126, +127, +127, +126, +127, +127, +127, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +127, +126, +127, +126, +126, +127, +126, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +128, +127, +128, +127, +127, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +127, +127, +127, +127, +127, +127, +128, +127, +127, +128, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +128, +127, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +128, +128, +127, +127, +128, +128, +128, +127, +128, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +128, +127, +127, +128, +127, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +127, +127, +127, +127, +126, +127, +126, +127, +127, +127, +128, +127, +128, +127, +127, +127, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +128, +127, +128, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +128, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +128, +128, +128, +127, +128, +127, +128, +127, +127, +128, +128, +127, +128, +127, +128, +127, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +127, +128, +127, +128, +127, +127, +127, +128, +127, +127, +127, +127, +127, +127, +128, +127, +128, +128, +128, +128, +127, +127, +126, +127, +126, +127, +127, +127, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +127, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +127, +127, +126, +127, +127, +126, +127, +127, +127, +127, +127, +126, +127, +126, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +128, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +127, +128, +128, +128, +127, +128, +128, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +128, +128, +127, +128, +127, +127, +127, +127, +127, +127, +127, +128, +127, +127, +127, +127, +127, +127, +128, +127, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +127, +127, +127, +127, +128, +127, +127, +127, +127, +128, +127, +127, +128, +127, +128, +127, +128, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +126, +127, +127, +127, +127, +127, +127, +127, +127, +127, +128, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +126, +127, +127, +126, +127, +127, +127, +127, +127, +127, +126, +127, +127, +127, +127, +127, +126, +127, +127, +127, +126, +127, +126, +127, +127, +127, +127, +126, +127, +127, +127, +127, +127, +127, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +127, +128, +128, +127, +128, +128, +128, +128, +127, +128, +128, +127, +128, +127, +128, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +126, +127, +126, +126, +127, +127, +126, +127, +126, +127, +127, +127, +127, +128, +128, +127, +128, +128, +128, +128, +127, +128, +127, +128, +127, +128, +128, +128, +127, +127, +127, +128, +127, +128, +127, +128, +126, +127, +127, +127, +127, +128, +127, +127, +127, +128, +128, +128, +127, +128, +127, +127, +127, +128, +127, +127, +126, +128, +128, +127, +128, +127, +128, +127, +127, +128, +127, +128, +127, +128, +127, +128, +128, +128, +128, +128, +129, +129, +128, +128, +128, +128, +127, +128, +127, +128, +128, +128, +128, +127, +128, +128, +127, +127, +127, +128, +128, +129, +129, +127, +127, +126, +126, +126, +126, +126, +125, +126, +124, +125, +125, +126, +126, +126, +125, +124, +124, +123, +123, +124, +124, +126, +126, +126, +125, +126, +124, +125, +124, +125, +124, +123, +122, +123, +124, +125, +126, +127, +127, +126, +125, +124, +124, +124, +126, +127, +128, +128, +126, +123, +121, +125, +131, +134, +135, +134, +135, +135, +133, +133, +133, +134, +133, +132, +132, +135, +137, +137, +137, +135, +132, +130, +130, +131, +133, +135, +136, +137, +135, +132, +129, +127, +128, +131, +135, +135, +130, +125, +122, +121, +122, +125, +118, +136, +134, +124, +124, +127, +127, +127, +131, +127, +140, +130, +121, +123, +126, +122, +120, +121, +124, +129, +125, +124, +129, +135, +136, +135, +131, +129, +129, +136, +143, +148, +148, +144, +139, +137, +139, +148, +154, +141, +127, +128, +136, +134, +135, +131, +122, +117, +108, +118, +134, +123, +114, +116, +124, +120, +121, +132, +128, +129, +134, +141, +127, +114, +121, +128, +117, +113, +131, +141, +130, +107, +111, +123, +124, +106, +102, +111, +124, +130, +120, +108, +99, +112, +124, +139, +133, +105, +95, +110, +132, +139, +153, +153, +122, +100, +97, +134, +165, +167, +162, +149, +136, +124, +122, +121, +121, +129, +131, +120, +105, +96, +104, +114, +110, +108, +120, +134, +139, +146, +154, +160, +162, +163, +163, +160, +154, +146, +141, +139, +141, +146, +149, +152, +153, +153, +152, +152, +147, +151, +156, +161, +164, +164, +162, +155, +155, +159, +163, +166, +169, +170, +168, +168, +164, +161, +161, +160, +161, +163, +163, +165, +164, +156, +147, +141, +142, +144, +144, +153, +156, +153, +155, +154, +150, +147, +150, +147, +147, +148, +149, +151, +151, +148, +137, +129, +125, +124, +128, +131, +131, +130, +129, +124, +124, +130, +130, +132, +134, +135, +136, +134, +130, +123, +119, +117, +116, +119, +122, +124, +124, +119, +110, +105, +100, +101, +103, +106, +104, +98, +93, +92, +99, +103, +104, +99, +97, +101, +104, +104, +107, +104, +100, +100, +104, +108, +109, +106, +105, +104, +106, +105, +103, +104, +100, +100, +101, +103, +103, +101, +102, +100, +99, +106, +108, +113, +111, +105, +99, +94, +100, +102, +105, +106, +106, +108, +108, +108, +107, +105, +105, +100, +103, +106, +105, +105, +103, +104, +100, +103, +109, +113, +116, +119, +115, +115, +109, +100, +94, +95, +103, +109, +119, +115, +110, +108, +111, +112, +113, +118, +122, +128, +129, +128, +119, +114, +110, +114, +118, +119, +114, +113, +117, +118, +120, +119, +117, +121, +124, +128, +127, +131, +139, +140, +141, +142, +147, +148, +150, +151, +149, +146, +137, +133, +133, +142, +148, +147, +142, +136, +134, +131, +134, +133, +136, +135, +140, +143, +146, +140, +134, +127, +125, +125, +128, +133, +133, +137, +139, +144, +144, +144, +143, +144, +147, +150, +149, +144, +138, +139, +143, +151, +159, +159, +163, +162, +160, +159, +156, +158, +161, +162, +164, +164, +165, +164, +165, +164, +164, +164, +161, +162, +164, +161, +156, +151, +152, +154, +160, +164, +164, +160, +158, +157, +156, +158, +163, +164, +163, +162, +159, +156, +151, +148, +144, +143, +144, +143, +141, +138, +138, +138, +138, +137, +136, +142, +146, +146, +140, +133, +129, +131, +134, +134, +133, +131, +128, +126, +124, +117, +113, +109, +113, +115, +113, +109, +106, +109, +111, +114, +114, +113, +113, +117, +121, +120, +117, +118, +123, +127, +131, +130, +127, +124, +122, +116, +109, +103, +102, +106, +108, +112, +114, +113, +107, +101, +97, +97, +98, +95, +94, +98, +98, +98, +99, +104, +112, +114, +116, +113, +112, +112, +108, +107, +107, +107, +111, +110, +107, +102, +97, +94, +93, +94, +97, +100, +102, +102, +103, +107, +113, +118, +119, +117, +109, +103, +101, +103, +109, +108, +103, +97, +99, +103, +105, +103, +104, +106, +106, +110, +111, +111, +114, +115, +120, +119, +119, +120, +129, +137, +142, +142, +135, +133, +129, +126, +121, +119, +118, +117, +116, +113, +112, +110, +108, +110, +115, +120, +126, +133, +142, +141, +139, +136, +131, +132, +133, +130, +132, +128, +126, +125, +121, +121, +117, +116, +114, +114, +115, +121, +126, +125, +123, +117, +111, +112, +117, +125, +133, +133, +132, +131, +130, +131, +132, +132, +133, +138, +139, +140, +137, +135, +135, +132, +132, +130, +129, +133, +136, +137, +135, +126, +124, +125, +127, +129, +131, +138, +143, +146, +145, +142, +136, +130, +128, +130, +136, +145, +152, +157, +156, +149, +140, +132, +130, +131, +126, +125, +126, +126, +125, +120, +114, +110, +111, +117, +121, +121, +119, +114, +108, +109, +109, +112, +117, +120, +122, +122, +121, +115, +112, +109, +109, +111, +112, +115, +112, +106, +102, +98, +96, +91, +90, +91, +93, +92, +90, +89, +94, +103, +108, +112, +113, +116, +122, +118, +109, +101, +100, +106, +110, +117, +117, +114, +113, +111, +107, +103, +101, +98, +98, +99, +99, +100, +107, +109, +110, +104, +97, +94, +90, +88, +88, +96, +105, +116, +120, +118, +113, +109, +110, +104, +98, +96, +99, +105, +108, +108, +102, +96, +99, +103, +106, +99, +91, +86, +92, +109, +114, +114, +109, +106, +109, +115, +121, +126, +126, +124, +120, +116, +113, +114, +119, +129, +142, +147, +144, +140, +139, +143, +144, +141, +141, +145, +148, +151, +149, +147, +143, +145, +148, +148, +149, +152, +157, +159, +161, +157, +154, +153, +151, +154, +155, +153, +152, +150, +150, +151, +147, +146, +150, +156, +160, +159, +155, +153, +154, +153, +157, +157, +157, +157, +159, +164, +163, +156, +145, +136, +137, +143, +155, +163, +167, +167, +163, +164, +167, +168, +165, +159, +158, +158, +163, +174, +175, +169, +155, +144, +142, +150, +165, +172, +164, +152, +140, +135, +140, +146, +152, +155, +159, +164, +165, +166, +170, +173, +169, +164, +163, +167, +175, +181, +179, +175, +172, +167, +165, +163, +162, +159, +159, +160, +158, +153, +148, +144, +151, +154, +156, +151, +146, +143, +141, +143, +141, +140, +141, +146, +154, +157, +159, +154, +147, +143, +141, +141, +139, +137, +137, +136, +140, +138, +134, +125, +116, +114, +116, +117, +121, +123, +123, +121, +120, +125, +128, +127, +123, +120, +124, +129, +129, +119, +110, +107, +116, +128, +130, +123, +114, +110, +117, +122, +120, +113, +118, +131, +144, +143, +129, +117, +115, +126, +133, +129, +119, +114, +113, +115, +112, +105, +105, +119, +136, +143, +135, +118, +105, +105, +115, +123, +127, +128, +128, +130, +131, +119, +110, +105, +110, +117, +122, +120, +114, +107, +100, +96, +99, +109, +116, +121, +124, +121, +110, +97, +94, +102, +116, +123, +122, +115, +109, +111, +117, +120, +120, +114, +110, +110, +113, +123, +129, +132, +134, +135, +132, +131, +134, +141, +138, +132, +129, +125, +127, +132, +138, +141, +145, +146, +142, +137, +135, +134, +140, +147, +149, +144, +140, +138, +137, +138, +133, +130, +134, +144, +150, +152, +149, +145, +142, +135, +129, +128, +133, +136, +137, +133, +130, +128, +133, +140, +144, +143, +135, +126, +131, +142, +150, +148, +141, +136, +135, +137, +142, +149, +153, +156, +156, +154, +151, +144, +141, +141, +139, +134, +132, +132, +135, +137, +137, +139, +141, +144, +149, +153, +158, +156, +152, +146, +144, +145, +147, +143, +136, +129, +126, +129, +134, +138, +142, +143, +137, +129, +123, +121, +124, +126, +126, +126, +127, +131, +135, +139, +136, +130, +123, +123, +124, +126, +125, +122, +121, +115, +111, +109, +112, +110, +105, +99, +98, +99, +104, +108, +111, +108, +105, +110, +114, +114, +112, +113, +111, +109, +106, +105, +105, +110, +113, +112, +112, +112, +115, +116, +114, +108, +100, +95, +95, +97, +99, +98, +96, +98, +99, +99, +98, +96, +98, +101, +102, +97, +87, +83, +89, +100, +104, +101, +98, +96, +99, +98, +96, +91, +88, +87, +89, +92, +93, +92, +92, +97, +103, +107, +107, +110, +114, +120, +122, +115, +103, +95, +96, +105, +110, +111, +109, +110, +110, +111, +111, +109, +106, +106, +108, +111, +108, +98, +87, +84, +87, +89, +89, +94, +105, +118, +122, +113, +102, +98, +99, +105, +108, +106, +101, +99, +98, +101, +102, +108, +122, +142, +154, +150, +134, +121, +121, +125, +131, +133, +131, +134, +137, +137, +133, +129, +125, +123, +126, +132, +139, +140, +137, +134, +131, +126, +120, +121, +127, +132, +138, +134, +126, +118, +123, +135, +143, +139, +135, +134, +130, +123, +118, +115, +117, +121, +130, +138, +143, +141, +136, +128, +123, +119, +117, +119, +121, +122, +122, +119, +123, +126, +128, +129, +131, +131, +129, +124, +123, +124, +125, +127, +130, +133, +133, +130, +128, +130, +128, +125, +126, +128, +130, +133, +139, +144, +145, +142, +138, +131, +123, +118, +122, +130, +131, +127, +123, +128, +133, +135, +133, +135, +140, +139, +136, +130, +127, +126, +128, +125, +120, +114, +115, +120, +123, +127, +129, +131, +134, +139, +140, +138, +133, +134, +134, +134, +131, +129, +126, +131, +137, +140, +135, +126, +123, +122, +122, +119, +119, +120, +124, +130, +131, +123, +114, +112, +117, +122, +122, +121, +119, +117, +116, +114, +114, +116, +126, +135, +141, +138, +128, +114, +103, +102, +109, +118, +126, +130, +131, +131, +133, +135, +127, +111, +103, +106, +112, +118, +125, +132, +128, +117, +110, +116, +127, +131, +128, +123, +118, +115, +111, +109, +109, +111, +114, +115, +118, +121, +121, +115, +103, +89, +79, +80, +90, +103, +110, +112, +113, +115, +118, +112, +99, +89, +91, +100, +109, +113, +104, +95, +90, +94, +99, +102, +101, +102, +107, +114, +117, +114, +108, +108, +110, +109, +112, +114, +117, +120, +120, +120, +119, +114, +105, +101, +104, +112, +117, +121, +123, +123, +121, +119, +118, +115, +113, +113, +117, +124, +133, +138, +138, +139, +134, +128, +132, +141, +143, +140, +133, +128, +130, +138, +139, +137, +137, +149, +157, +158, +153, +146, +140, +140, +151, +156, +148, +135, +132, +144, +153, +154, +150, +145, +144, +144, +148, +152, +152, +151, +151, +152, +154, +152, +152, +153, +152, +142, +137, +143, +151, +151, +144, +147, +151, +150, +154, +169, +185, +190, +185, +175, +162, +152, +148, +154, +164, +178, +187, +179, +160, +145, +140, +141, +145, +152, +165, +172, +174, +167, +160, +156, +153, +155, +158, +159, +154, +150, +143, +137, +131, +127, +130, +145, +156, +159, +152, +147, +144, +133, +128, +131, +134, +132, +130, +131, +129, +124, +122, +122, +122, +124, +130, +134, +131, +125, +124, +132, +137, +141, +144, +143, +138, +129, +121, +116, +120, +126, +136, +140, +139, +132, +128, +124, +120, +119, +124, +132, +134, +128, +120, +118, +119, +120, +126, +137, +142, +144, +143, +136, +121, +105, +99, +108, +118, +127, +132, +127, +112, +99, +96, +102, +107, +114, +122, +130, +132, +127, +125, +124, +123, +125, +127, +130, +131, +134, +136, +137, +130, +124, +122, +127, +138, +144, +144, +138, +131, +123, +125, +134, +138, +135, +130, +128, +129, +127, +123, +123, +128, +139, +144, +138, +121, +109, +112, +122, +127, +126, +125, +127, +137, +141, +138, +131, +126, +128, +136, +144, +143, +139, +142, +149, +154, +149, +141, +141, +148, +154, +158, +156, +151, +147, +151, +162, +171, +167, +160, +154, +148, +145, +145, +145, +140, +138, +139, +135, +127, +121, +123, +129, +139, +150, +160, +160, +156, +151, +147, +146, +142, +139, +141, +143, +140, +136, +134, +132, +132, +134, +138, +138, +139, +137, +134, +133, +129, +126, +131, +141, +149, +149, +143, +138, +135, +134, +134, +133, +129, +135, +145, +148, +137, +123, +117, +121, +130, +136, +134, +128, +121, +122, +129, +132, +129, +134, +148, +154, +147, +137, +131, +131, +132, +138, +143, +141, +136, +134, +136, +141, +142, +139, +141, +152, +158, +153, +148, +141, +130, +120, +120, +126, +130, +131, +135, +136, +131, +123, +113, +107, +108, +118, +128, +133, +129, +122, +118, +112, +111, +120, +122, +116, +115, +119, +116, +104, +99, +104, +114, +124, +133, +131, +124, +118, +117, +113, +107, +112, +120, +128, +135, +140, +137, +127, +120, +120, +118, +118, +119, +120, +116, +113, +113, +116, +114, +115, +119, +120, +117, +117, +115, +108, +106, +109, +105, +98, +98, +107, +115, +115, +114, +110, +106, +107, +108, +99, +89, +93, +104, +111, +115, +123, +128, +125, +119, +113, +109, +103, +99, +96, +94, +91, +94, +98, +94, +88, +88, +90, +93, +96, +101, +101, +95, +92, +91, +91, +97, +107, +104, +94, +89, +93, +97, +95, +90, +91, +95, +102, +111, +114, +113, +112, +113, +109, +111, +119, +123, +118, +111, +112, +115, +116, +116, +118, +118, +117, +120, +127, +125, +115, +105, +106, +115, +124, +132, +133, +126, +119, +114, +112, +113, +117, +117, +118, +124, +130, +129, +129, +136, +144, +147, +145, +137, +130, +125, +129, +132, +132, +136, +149, +163, +162, +154, +148, +147, +146, +139, +135, +133, +132, +137, +144, +145, +133, +123, +122, +128, +134, +137, +142, +145, +144, +139, +134, +135, +135, +135, +136, +141, +146, +149, +148, +148, +151, +148, +145, +143, +146, +148, +151, +157, +160, +158, +161, +166, +167, +162, +158, +156, +154, +146, +140, +141, +150, +160, +171, +171, +160, +145, +141, +143, +139, +133, +134, +138, +146, +151, +148, +136, +126, +123, +121, +117, +116, +120, +125, +124, +120, +114, +106, +104, +107, +112, +114, +117, +121, +126, +135, +139, +131, +117, +114, +124, +136, +141, +140, +136, +128, +117, +111, +110, +106, +103, +106, +115, +120, +124, +128, +128, +123, +118, +113, +111, +115, +123, +121, +110, +102, +101, +103, +103, +105, +109, +110, +112, +111, +103, +92, +88, +87, +89, +97, +108, +111, +106, +100, +96, +90, +87, +88, +95, +101, +101, +103, +105, +101, +91, +88, +90, +92, +96, +101, +105, +104, +99, +96, +95, +103, +111, +111, +109, +111, +114, +111, +107, +105, +110, +112, +112, +108, +102, +100, +102, +104, +110, +120, +129, +129, +122, +118, +116, +115, +114, +119, +122, +121, +115, +114, +116, +114, +108, +107, +114, +121, +127, +131, +138, +142, +142, +142, +140, +141, +140, +138, +137, +138, +139, +140, +136, +134, +135, +138, +139, +136, +132, +132, +141, +147, +148, +148, +149, +147, +144, +143, +147, +149, +152, +154, +155, +150, +144, +147, +157, +156, +144, +128, +124, +129, +134, +137, +140, +139, +137, +136, +138, +137, +137, +136, +135, +132, +128, +129, +134, +146, +154, +153, +144, +134, +131, +137, +147, +149, +142, +137, +146, +160, +165, +158, +145, +142, +148, +155, +159, +157, +150, +145, +145, +145, +136, +125, +127, +139, +151, +155, +153, +148, +142, +139, +138, +136, +139, +147, +156, +162, +160, +149, +138, +133, +139, +151, +159, +158, +151, +148, +148, +148, +141, +135, +140, +151, +155, +152, +143, +135, +135, +140, +145, +146, +143, +139, +142, +151, +147, +134, +123, +124, +128, +135, +142, +145, +145, +140, +137, +134, +130, +126, +129, +133, +137, +137, +132, +125, +127, +138, +150, +156, +154, +150, +145, +143, +139, +134, +134, +141, +150, +154, +157, +159, +155, +146, +139, +137, +135, +134, +134, +139, +140, +128, +113, +106, +109, +112, +117, +124, +128, +127, +124, +122, +121, +116, +111, +111, +112, +114, +114, +110, +108, +110, +110, +105, +103, +103, +107, +112, +114, +113, +114, +120, +126, +125, +120, +116, +109, +99, +93, +98, +107, +113, +114, +118, +121, +113, +102, +97, +98, +103, +110, +123, +132, +127, +115, +103, +97, +95, +94, +98, +106, +116, +123, +122, +117, +117, +115, +113, +113, +117, +117, +118, +120, +120, +122, +129, +135, +138, +136, +134, +132, +130, +133, +138, +139, +133, +123, +121, +125, +127, +118, +110, +109, +120, +135, +147, +154, +153, +148, +146, +145, +142, +135, +129, +129, +134, +138, +136, +132, +131, +134, +138, +139, +139, +141, +146, +154, +152, +148, +148, +153, +156, +155, +154, +151, +147, +146, +146, +144, +138, +134, +135, +145, +150, +143, +134, +131, +136, +142, +146, +151, +152, +148, +148, +154, +161, +156, +148, +147, +154, +162, +161, +156, +152, +148, +145, +146, +151, +153, +155, +157, +157, +152, +152, +158, +159, +152, +145, +144, +147, +148, +149, +145, +134, +124, +123, +132, +141, +133, +111, +100, +106, +115, +115, +113, +121, +132, +138, +136, +127, +110, +95, +96, +108, +118, +118, +118, +119, +122, +122, +118, +117, +120, +126, +132, +130, +120, +113, +119, +128, +130, +124, +120, +121, +128, +129, +122, +109, +101, +101, +109, +121, +124, +113, +100, +98, +102, +103, +100, +98, +100, +100, +101, +102, +100, +95, +89, +85, +83, +84, +83, +86, +90, +92, +90, +89, +88, +88, +90, +94, +94, +94, +98, +104, +105, +104, +101, +99, +97, +96, +97, +99, +98, +97, +96, +100, +100, +96, +91, +90, +91, +91, +90, +99, +109, +116, +120, +119, +113, +104, +102, +106, +109, +109, +104, +97, +95, +96, +99, +102, +107, +109, +110, +114, +120, +123, +126, +133, +138, +137, +134, +134, +133, +131, +129, +129, +129, +127, +129, +135, +137, +130, +121, +118, +123, +128, +130, +131, +130, +127, +127, +129, +125, +119, +115, +117, +123, +134, +141, +141, +138, +139, +139, +141, +141, +137, +131, +128, +129, +127, +126, +131, +138, +140, +138, +136, +132, +130, +128, +130, +132, +133, +134, +137, +140, +132, +121, +116, +117, +117, +119, +121, +127, +132, +139, +142, +140, +132, +124, +120, +119, +121, +123, +126, +126, +127, +126, +129, +134, +139, +139, +141, +143, +143, +141, +141, +144, +142, +137, +135, +134, +132, +133, +139, +145, +143, +132, +127, +128, +130, +129, +130, +136, +139, +135, +135, +134, +132, +128, +125, +123, +121, +119, +120, +125, +123, +115, +105, +102, +109, +118, +126, +134, +137, +129, +119, +114, +113, +111, +115, +128, +138, +140, +137, +130, +120, +110, +111, +118, +126, +126, +126, +126, +119, +106, +96, +98, +105, +115, +126, +137, +139, +131, +120, +113, +116, +121, +126, +132, +137, +138, +136, +130, +128, +126, +125, +125, +127, +128, +127, +128, +128, +125, +127, +134, +142, +140, +131, +120, +115, +111, +111, +110, +109, +106, +105, +111, +115, +106, +91, +84, +88, +95, +100, +102, +102, +101, +101, +100, +98, +95, +95, +99, +104, +107, +107, +107, +104, +99, +99, +106, +116, +123, +123, +123, +120, +113, +106, +110, +120, +127, +122, +115, +113, +116, +121, +125, +129, +127, +123, +123, +129, +124, +114, +107, +109, +118, +123, +127, +127, +124, +120, +117, +115, +114, +115, +119, +123, +126, +125, +123, +124, +128, +127, +124, +121, +122, +126, +135, +145, +152, +149, +147, +149, +154, +153, +149, +144, +143, +139, +136, +136, +140, +142, +146, +153, +151, +139, +130, +130, +137, +141, +144, +148, +151, +153, +153, +153, +151, +150, +151, +151, +149, +144, +141, +140, +143, +146, +151, +156, +158, +157, +158, +157, +153, +143, +137, +142, +153, +161, +162, +161, +159, +161, +163, +165, +166, +162, +160, +162, +160, +146, +133, +130, +140, +150, +156, +162, +164, +163, +163, +163, +163, +160, +157, +161, +166, +170, +167, +159, +149, +141, +139, +145, +155, +159, +155, +146, +140, +134, +131, +135, +148, +157, +159, +153, +147, +141, +138, +139, +142, +140, +135, +137, +145, +144, +132, +119, +115, +116, +123, +133, +142, +142, +135, +127, +125, +127, +130, +135, +138, +137, +129, +120, +115, +115, +119, +123, +131, +136, +139, +144, +147, +146, +137, +132, +135, +144, +150, +147, +138, +127, +118, +114, +116, +119, +119, +123, +131, +131, +118, +103, +99, +102, +109, +113, +113, +109, +105, +103, +101, +97, +95, +100, +106, +114, +118, +114, +103, +94, +91, +92, +96, +100, +103, +106, +108, +110, +107, +102, +103, +112, +122, +124, +121, +118, +116, +117, +118, +121, +120, +119, +122, +120, +110, +99, +96, +98, +101, +108, +115, +120, +125, +130, +133, +130, +125, +121, +121, +124, +128, +129, +127, +127, +129, +132, +134, +135, +133, +133, +133, +134, +135, +131, +130, +137, +143, +141, +135, +129, +126, +122, +125, +131, +135, +136, +141, +146, +139, +125, +119, +122, +131, +134, +132, +126, +119, +119, +122, +127, +129, +129, +128, +128, +128, +127, +124, +119, +120, +123, +128, +131, +131, +132, +132, +131, +131, +127, +126, +130, +140, +144, +141, +135, +132, +132, +127, +122, +115, +112, +117, +129, +133, +126, +116, +110, +110, +112, +117, +124, +131, +133, +133, +129, +124, +121, +116, +114, +114, +117, +118, +119, +120, +123, +124, +123, +122, +127, +136, +147, +154, +153, +146, +143, +149, +150, +140, +123, +115, +119, +128, +136, +141, +139, +134, +132, +133, +128, +117, +109, +109, +113, +118, +123, +129, +129, +124, +118, +115, +112, +113, +119, +126, +128, +126, +123, +119, +114, +112, +111, +112, +115, +116, +112, +112, +110, +112, +118, +128, +130, +130, +131, +135, +136, +135, +130, +126, +124, +126, +127, +129, +131, +126, +117, +112, +113, +118, +119, +121, +125, +129, +131, +131, +130, +124, +121, +123, +127, +130, +126, +119, +114, +112, +114, +117, +121, +121, +120, +119, +119, +115, +112, +113, +111, +106, +99, +95, +97, +99, +99, +99, +99, +99, +100, +101, +103, +108, +107, +99, +92, +94, +97, +96, +94, +96, +100, +101, +105, +107, +105, +100, +100, +106, +113, +119, +122, +124, +123, +124, +125, +126, +126, +125, +126, +127, +129, +132, +134, +139, +140, +134, +124, +116, +118, +121, +124, +123, +121, +118, +118, +118, +122, +125, +120, +113, +111, +118, +124, +127, +126, +129, +131, +132, +132, +131, +132, +130, +125, +116, +109, +108, +112, +117, +121, +125, +130, +137, +141, +142, +139, +139, +142, +145, +145, +146, +146, +139, +131, +133, +143, +151, +151, +153, +151, +146, +140, +137, +135, +138, +141, +138, +132, +131, +134, +136, +136, +138, +136, +131, +134, +142, +143, +136, +132, +135, +144, +152, +153, +149, +141, +137, +136, +135, +131, +131, +136, +146, +154, +158, +158, +158, +155, +149, +137, +130, +135, +150, +165, +172, +171, +161, +149, +142, +144, +144, +142, +143, +152, +157, +154, +144, +138, +136, +136, +137, +140, +141, +139, +137, +135, +132, +128, +123, +120, +122, +124, +124, +121, +123, +131, +135, +126, +113, +105, +104, +108, +118, +129, +136, +136, +137, +139, +140, +139, +140, +144, +145, +140, +135, +130, +127, +125, +126, +124, +124, +124, +124, +126, +122, +115, +109, +109, +116, +122, +121, +117, +117, +117, +116, +115, +112, +112, +111, +114, +117, +120, +118, +114, +114, +115, +114, +108, +104, +103, +101, +100, +99, +101, +100, +99, +99, +101, +103, +104, +104, +105, +107, +105, +104, +104, +107, +110, +108, +104, +102, +103, +107, +116, +125, +126, +115, +105, +99, +101, +104, +111, +118, +121, +115, +107, +101, +98, +101, +106, +111, +120, +129, +135, +138, +139, +135, +130, +129, +133, +139, +141, +143, +146, +145, +142, +138, +135, +138, +145, +149, +149, +148, +147, +144, +141, +141, +144, +148, +150, +150, +148, +143, +137, +136, +137, +132, +127, +129, +133, +135, +131, +129, +128, +126, +127, +129, +129, +128, +130, +136, +140, +143, +142, +142, +144, +145, +143, +141, +141, +138, +136, +137, +140, +142, +141, +138, +138, +141, +142, +136, +130, +127, +126, +126, +128, +130, +133, +137, +143, +141, +136, +130, +131, +140, +146, +142, +129, +122, +124, +129, +133, +135, +134, +130, +131, +131, +125, +116, +110, +116, +126, +136, +140, +140, +135, +132, +132, +133, +133, +133, +137, +141, +144, +141, +138, +136, +135, +136, +139, +142, +142, +144, +146, +144, +140, +137, +136, +138, +139, +135, +132, +129, +128, +127, +129, +126, +120, +114, +114, +116, +121, +128, +135, +136, +132, +130, +127, +123, +119, +119, +123, +130, +136, +133, +126, +126, +132, +133, +127, +125, +130, +136, +139, +140, +139, +134, +127, +125, +131, +135, +136, +135, +134, +134, +133, +133, +133, +135, +139, +139, +141, +141, +138, +134, +137, +144, +143, +137, +131, +127, +126, +128, +133, +133, +129, +125, +127, +124, +116, +106, +102, +102, +104, +103, +104, +110, +116, +113, +104, +100, +100, +100, +105, +111, +115, +115, +112, +109, +112, +114, +115, +114, +115, +112, +107, +101, +98, +99, +102, +107, +110, +114, +114, +118, +125, +128, +120, +110, +106, +111, +115, +119, +122, +123, +122, +120, +119, +117, +115, +116, +119, +122, +123, +121, +122, +126, +132, +129, +124, +121, +121, +123, +125, +127, +125, +123, +123, +123, +125, +129, +133, +136, +136, +132, +125, +117, +111, +116, +126, +134, +134, +129, +125, +126, +136, +142, +138, +126, +120, +121, +126, +130, +132, +133, +133, +131, +130, +128, +124, +123, +124, +127, +130, +136, +141, +148, +155, +154, +145, +136, +132, +136, +141, +148, +148, +143, +137, +135, +141, +154, +165, +169, +167, +163, +154, +145, +135, +133, +135, +137, +138, +138, +139, +138, +139, +141, +141, +133, +126, +125, +130, +133, +136, +141, +142, +142, +140, +137, +135, +136, +139, +147, +155, +157, +152, +149, +149, +151, +152, +154, +158, +158, +154, +150, +148, +144, +140, +137, +134, +134, +138, +143, +146, +140, +129, +121, +118, +119, +120, +120, +122, +123, +119, +115, +109, +106, +113, +121, +123, +120, +116, +115, +115, +117, +118, +119, +117, +118, +119, +118, +114, +110, +108, +108, +109, +113, +121, +128, +129, +128, +123, +117, +113, +118, +127, +130, +125, +119, +117, +118, +124, +127, +127, +122, +117, +115, +112, +109, +105, +105, +106, +107, +101, +95, +87, +84, +86, +93, +93, +91, +90, +92, +91, +86, +84, +85, +89, +93, +96, +96, +93, +89, +87, +91, +96, +102, +107, +106, +102, +102, +106, +109, +109, +111, +111, +107, +102, +102, +104, +105, +111, +120, +124, +127, +131, +135, +133, +131, +130, +130, +130, +130, +132, +132, +130, +127, +130, +132, +122, +111, +107, +113, +120, +126, +133, +138, +140, +139, +135, +130, +125, +124, +124, +126, +128, +129, +131, +131, +130, +130, +130, +127, +123, +122, +125, +131, +133, +133, +130, +127, +128, +133, +139, +145, +147, +146, +142, +139, +137, +137, +136, +137, +138, +139, +138, +135, +133, +132, +126, +117, +109, +104, +104, +107, +117, +127, +128, +122, +118, +121, +124, +123, +120, +119, +120, +130, +144, +152, +148, +137, +130, +126, +126, +127, +132, +138, +141, +140, +132, +122, +117, +123, +136, +146, +148, +144, +140, +135, +134, +131, +126, +125, +129, +138, +143, +144, +144, +147, +144, +138, +127, +118, +116, +122, +133, +145, +152, +152, +147, +141, +136, +133, +133, +133, +132, +133, +138, +144, +145, +141, +132, +124, +119, +118, +123, +132, +138, +140, +140, +137, +131, +134, +144, +151, +149, +146, +143, +139, +131, +127, +126, +128, +128, +131, +139, +147, +150, +148, +141, +127, +116, +112, +112, +115, +119, +127, +134, +136, +136, +134, +130, +129, +131, +135, +137, +140, +147, +156, +160, +153, +141, +133, +134, +139, +141, +141, +140, +138, +137, +135, +132, +131, +131, +130, +127, +124, +121, +116, +111, +108, +108, +109, +109, +111, +114, +115, +113, +111, +112, +107, +99, +95, +94, +98, +101, +105, +111, +108, +102, +95, +93, +93, +94, +98, +101, +103, +109, +120, +127, +125, +120, +118, +117, +114, +114, +118, +120, +122, +123, +125, +122, +122, +128, +135, +138, +136, +134, +128, +124, +123, +124, +125, +125, +126, +127, +127, +123, +120, +119, +120, +114, +109, +107, +111, +116, +117, +116, +114, +111, +112, +113, +113, +110, +112, +120, +129, +138, +141, +137, +134, +133, +132, +129, +125, +125, +130, +135, +137, +137, +135, +131, +128, +129, +136, +142, +143, +143, +142, +140, +139, +143, +149, +155, +157, +154, +148, +142, +137, +137, +142, +141, +134, +133, +140, +147, +150, +150, +148, +143, +134, +130, +129, +126, +124, +124, +130, +135, +140, +145, +148, +147, +143, +139, +139, +140, +141, +146, +151, +155, +156, +155, +151, +147, +150, +155, +161, +167, +171, +168, +160, +150, +148, +149, +156, +165, +174, +176, +172, +163, +157, +149, +136, +127, +126, +130, +133, +138, +140, +139, +132, +123, +116, +107, +101, +101, +109, +118, +126, +128, +126, +121, +119, +121, +123, +124, +128, +135, +143, +147, +145, +141, +136, +133, +137, +144, +148, +145, +137, +126, +118, +113, +115, +119, +123, +125, +127, +133, +138, +141, +141, +134, +120, +107, +103, +106, +111, +115, +117, +118, +115, +111, +107, +103, +99, +98, +97, +98, +101, +104, +103, +98, +94, +93, +93, +92, +93, +96, +96, +94, +90, +89, +88, +90, +96, +106, +113, +115, +113, +107, +100, +94, +93, +96, +99, +103, +107, +111, +111, +107, +102, +102, +98, +95, +95, +100, +102, +104, +111, +120, +121, +120, +117, +116, +117, +118, +119, +121, +126, +131, +132, +132, +133, +133, +129, +124, +123, +126, +135, +142, +145, +143, +138, +133, +134, +142, +147, +148, +144, +141, +135, +131, +131, +130, +128, +125, +126, +130, +132, +133, +133, +135, +131, +123, +117, +119, +124, +128, +131, +133, +133, +134, +136, +138, +136, +133, +130, +133, +137, +141, +140, +136, +135, +134, +134, +132, +132, +132, +135, +138, +139, +137, +135, +132, +130, +132, +136, +137, +137, +138, +142, +145, +146, +144, +143, +141, +144, +146, +147, +145, +145, +144, +137, +122, +111, +108, +112, +115, +118, +121, +122, +122, +122, +121, +120, +118, +116, +116, +120, +124, +130, +133, +133, +132, +133, +136, +136, +135, +138, +145, +155, +160, +161, +155, +147, +146, +150, +154, +151, +148, +141, +134, +127, +123, +122, +126, +135, +141, +138, +128, +122, +125, +132, +129, +121, +118, +121, +124, +130, +135, +135, +129, +121, +116, +113, +114, +120, +127, +132, +132, +131, +132, +134, +132, +126, +117, +109, +107, +110, +117, +126, +129, +132, +133, +133, +137, +142, +147, +147, +145, +143, +140, +137, +136, +134, +132, +131, +135, +142, +147, +146, +141, +139, +132, +123, +115, +114, +116, +118, +117, +113, +107, +99, +93, +93, +96, +98, +99, +101, +103, +108, +107, +100, +91, +87, +88, +93, +98, +100, +100, +102, +101, +97, +93, +89, +91, +99, +112, +120, +120, +117, +111, +107, +110, +114, +116, +116, +115, +117, +117, +116, +114, +114, +116, +115, +108, +106, +106, +110, +113, +116, +119, +117, +115, +116, +116, +116, +114, +114, +115, +120, +122, +121, +120, +122, +126, +126, +124, +122, +118, +115, +116, +117, +119, +120, +121, +124, +131, +137, +143, +146, +146, +142, +139, +137, +135, +130, +127, +128, +131, +132, +131, +133, +140, +140, +132, +126, +123, +124, +127, +132, +137, +138, +139, +142, +145, +143, +137, +134, +134, +138, +144, +148, +148, +142, +140, +144, +153, +159, +161, +161, +161, +157, +154, +148, +145, +146, +154, +157, +155, +149, +145, +142, +142, +142, +143, +141, +141, +143, +144, +144, +140, +140, +144, +146, +140, +132, +128, +131, +135, +141, +146, +148, +148, +149, +151, +150, +148, +146, +147, +154, +163, +170, +171, +165, +158, +153, +151, +149, +147, +148, +148, +149, +150, +147, +140, +133, +131, +135, +133, +129, +127, +130, +134, +137, +138, +135, +126, +122, +127, +136, +141, +141, +140, +136, +127, +116, +113, +112, +112, +113, +117, +120, +120, +118, +117, +116, +113, +113, +119, +127, +134, +135, +131, +128, +129, +128, +128, +126, +127, +127, +130, +132, +132, +128, +122, +116, +118, +121, +125, +124, +121, +116, +110, +104, +102, +100, +99, +98, +100, +101, +101, +99, +99, +98, +93, +85, +78, +74, +75, +79, +86, +91, +91, +88, +89, +90, +90, +87, +87, +90, +96, +103, +104, +101, +95, +94, +97, +104, +109, +112, +115, +118, +124, +127, +127, +125, +125, +132, +140, +144, +141, +139, +136, +131, +129, +129, +130, +133, +137, +141, +143, +140, +136, +133, +131, +123, +116, +113, +113, +117, +120, +123, +125, +122, +120, +116, +115, +114, +117, +123, +128, +132, +135, +136, +134, +131, +130, +130, +132, +136, +139, +142, +141, +140, +140, +140, +143, +152, +156, +156, +152, +149, +143, +136, +134, +136, +137, +140, +141, +141, +141, +138, +133, +132, +130, +124, +114, +107, +106, +112, +121, +127, +130, +128, +130, +134, +136, +137, +134, +133, +134, +138, +140, +140, +140, +137, +132, +126, +123, +122, +122, +120, +118, +118, +122, +130, +140, +146, +145, +142, +140, +133, +125, +120, +120, +126, +131, +136, +137, +137, +140, +143, +141, +137, +135, +136, +136, +133, +129, +125, +124, +126, +129, +130, +131, +131, +133, +132, +127, +120, +118, +121, +127, +132, +135, +134, +133, +133, +134, +135, +133, +131, +131, +137, +143, +142, +138, +133, +133, +132, +131, +129, +127, +124, +123, +123, +124, +126, +127, +124, +121, +117, +118, +121, +123, +125, +127, +129, +127, +123, +121, +121, +121, +123, +125, +128, +129, +129, +129, +127, +126, +125, +128, +130, +135, +140, +144, +146, +147, +145, +141, +136, +132, +130, +128, +128, +129, +128, +126, +121, +116, +112, +110, +110, +112, +112, +108, +101, +95, +93, +92, +92, +95, +96, +97, +97, +94, +90, +85, +81, +80, +82, +88, +93, +97, +100, +104, +109, +114, +114, +113, +110, +108, +109, +109, +111, +112, +113, +114, +116, +118, +122, +123, +126, +131, +133, +135, +132, +131, +129, +127, +126, +125, +127, +127, +126, +127, +127, +125, +122, +122, +121, +118, +113, +112, +111, +112, +115, +117, +117, +113, +108, +105, +107, +111, +121, +129, +133, +131, +126, +119, +115, +116, +117, +119, +122, +124, +128, +135, +140, +140, +141, +139, +141, +146, +149, +151, +152, +153, +151, +148, +147, +146, +146, +147, +145, +145, +148, +152, +156, +155, +154, +151, +151, +152, +149, +149, +147, +143, +135, +132, +133, +134, +128, +122, +122, +125, +130, +135, +137, +136, +135, +132, +134, +136, +138, +140, +144, +147, +149, +150, +148, +149, +152, +156, +157, +157, +158, +162, +165, +167, +163, +158, +152, +147, +148, +156, +164, +171, +170, +166, +159, +153, +152, +148, +146, +146, +146, +143, +141, +135, +128, +122, +119, +116, +124, +133, +141, +142, +144, +139, +130, +122, +119, +119, +125, +129, +133, +135, +133, +132, +130, +126, +122, +123, +126, +133, +136, +139, +139, +137, +134, +132, +132, +132, +131, +134, +138, +140, +142, +143, +140, +136, +133, +130, +131, +130, +127, +118, +106, +99, +100, +102, +104, +106, +109, +116, +121, +119, +115, +108, +103, +101, +101, +102, +104, +106, +108, +107, +108, +107, +101, +98, +99, +101, +103, +104, +107, +107, +106, +105, +100, +101, +103, +108, +110, +110, +107, +99, +97, +99, +105, +108, +109, +109, +111, +114, +116, +114, +110, +105, +103, +106, +110, +111, +112, +114, +117, +118, +119, +115, +111, +112, +113, +118, +121, +124, +122, +124, +126, +125, +124, +127, +134, +141, +145, +145, +141, +138, +140, +144, +145, +141, +136, +133, +133, +133, +132, +132, +128, +126, +124, +124, +124, +127, +132, +140, +141, +138, +133, +133, +135, +135, +132, +127, +123, +120, +124, +126, +122, +119, +117, +121, +123, +125, +122, +120, +118, +121, +122, +122, +121, +124, +130, +138, +140, +139, +137, +138, +139, +136, +133, +131, +134, +136, +134, +130, +129, +130, +134, +139, +139, +132, +123, +120, +119, +121, +119, +121, +121, +121, +128, +131, +129, +120, +111, +109, +109, +113, +119, +128, +132, +131, +129, +125, +126, +128, +130, +132, +132, +133, +132, +133, +134, +136, +138, +140, +140, +137, +136, +139, +140, +144, +149, +152, +153, +148, +144, +145, +151, +154, +150, +148, +146, +144, +139, +136, +133, +132, +133, +137, +139, +139, +132, +124, +117, +114, +116, +116, +113, +111, +112, +108, +102, +99, +100, +103, +107, +116, +129, +136, +135, +130, +122, +117, +116, +119, +124, +129, +134, +133, +127, +128, +136, +142, +134, +122, +116, +117, +119, +127, +137, +143, +144, +141, +139, +131, +126, +129, +134, +132, +130, +132, +132, +127, +118, +110, +107, +106, +107, +107, +105, +102, +97, +93, +88, +85, +87, +91, +91, +96, +97, +93, +89, +87, +87, +90, +94, +98, +100, +99, +99, +100, +104, +110, +116, +120, +120, +120, +112, +108, +113, +129, +135, +128, +120, +122, +128, +131, +135, +136, +130, +124, +123, +128, +128, +126, +125, +134, +142, +141, +129, +117, +109, +106, +113, +121, +129, +132, +134, +139, +145, +146, +137, +125, +118, +125, +133, +135, +132, +131, +126, +121, +114, +112, +113, +119, +125, +126, +120, +117, +119, +125, +122, +122, +128, +134, +142, +149, +156, +155, +152, +150, +150, +152, +154, +158, +159, +160, +160, +159, +154, +144, +141, +145, +147, +143, +145, +152, +158, +156, +150, +144, +144, +146, +148, +146, +148, +155, +165, +166, +159, +147, +135, +134, +138, +147, +150, +146, +148, +151, +146, +133, +123, +124, +129, +136, +141, +146, +144, +141, +140, +140, +139, +139, +143, +150, +158, +162, +158, +151, +147, +148, +154, +159, +162, +162, +163, +160, +155, +153, +154, +157, +156, +150, +144, +145, +147, +149, +145, +144, +142, +139, +132, +127, +128, +137, +145, +145, +135, +122, +114, +112, +120, +128, +132, +131, +130, +130, +130, +121, +110, +104, +104, +108, +113, +120, +122, +121, +116, +109, +106, +102, +101, +102, +110, +117, +116, +104, +92, +92, +101, +106, +105, +101, +99, +101, +107, +114, +116, +118, +122, +126, +124, +119, +120, +125, +126, +122, +117, +111, +104, +100, +103, +106, +106, +103, +100, +95, +94, +96, +100, +99, +93, +88, +85, +85, +90, +97, +97, +89, +86, +86, +91, +96, +98, +101, +101, +99, +103, +107, +112, +113, +113, +115, +115, +114, +108, +105, +107, +113, +118, +120, +122, +124, +130, +138, +142, +144, +145, +143, +143, +141, +138, +138, +139, +141, +141, +142, +145, +146, +144, +141, +140, +135, +133, +136, +144, +155, +159, +154, +140, +129, +125, +126, +126, +129, +133, +134, +128, +120, +116, +116, +118, +123, +129, +132, +136, +138, +137, +127, +113, +106, +108, +120, +132, +140, +138, +130, +123, +118, +115, +115, +115, +118, +125, +135, +140, +138, +137, +136, +137, +137, +134, +136, +140, +143, +143, +138, +134, +130, +130, +133, +136, +137, +140, +143, +144, +141, +133, +126, +121, +124, +135, +143, +141, +136, +131, +121, +109, +99, +98, +103, +110, +118, +123, +124, +121, +120, +117, +116, +116, +121, +126, +132, +138, +142, +142, +137, +131, +127, +126, +128, +136, +145, +150, +149, +145, +139, +137, +139, +142, +136, +130, +133, +143, +146, +145, +139, +129, +119, +116, +120, +126, +128, +130, +132, +133, +132, +128, +125, +124, +126, +130, +131, +129, +134, +134, +123, +109, +104, +107, +114, +122, +128, +130, +127, +124, +122, +118, +116, +117, +120, +124, +127, +132, +138, +141, +144, +144, +143, +142, +137, +136, +138, +142, +144, +144, +143, +140, +136, +129, +128, +133, +138, +137, +133, +130, +123, +114, +109, +110, +112, +115, +117, +118, +115, +110, +105, +102, +104, +110, +111, +111, +109, +113, +115, +109, +95, +86, +85, +90, +97, +106, +112, +111, +107, +107, +106, +107, +106, +109, +115, +123, +128, +128, +128, +126, +123, +120, +118, +118, +124, +131, +136, +137, +138, +142, +143, +142, +135, +133, +140, +148, +143, +130, +123, +122, +125, +130, +132, +131, +128, +129, +130, +129, +125, +119, +117, +116, +118, +119, +113, +106, +106, +108, +105, +97, +95, +101, +113, +124, +131, +133, +129, +126, +126, +127, +126, +127, +125, +122, +120, +117, +118, +121, +130, +138, +140, +135, +127, +122, +123, +125, +129, +130, +135, +145, +148, +142, +136, +140, +147, +148, +147, +150, +159, +161, +157, +147, +137, +132, +139, +151, +159, +159, +154, +146, +137, +132, +130, +130, +131, +140, +155, +160, +154, +144, +139, +140, +138, +138, +143, +151, +153, +152, +146, +140, +134, +132, +135, +143, +152, +156, +156, +153, +147, +139, +132, +130, +132, +136, +148, +161, +170, +169, +159, +147, +133, +131, +143, +162, +170, +167, +160, +153, +146, +138, +136, +138, +143, +150, +155, +154, +148, +140, +135, +136, +138, +136, +130, +127, +131, +137, +136, +124, +110, +103, +107, +113, +120, +122, +122, +119, +119, +116, +107, +99, +101, +112, +123, +129, +125, +115, +109, +107, +110, +110, +111, +111, +113, +115, +114, +110, +106, +104, +105, +104, +102, +107, +114, +115, +106, +98, +97, +102, +107, +110, +108, +100, +96, +98, +101, +101, +100, +97, +97, +104, +114, +113, +102, +90, +85, +87, +86, +85, +89, +96, +101, +102, +102, +101, +101, +108, +116, +116, +111, +107, +107, +113, +117, +117, +119, +125, +133, +140, +138, +131, +125, +122, +122, +127, +133, +143, +148, +150, +144, +133, +123, +127, +136, +142, +141, +142, +141, +138, +136, +136, +130, +125, +122, +124, +128, +135, +138, +140, +133, +121, +108, +105, +111, +122, +134, +139, +125, +109, +103, +108, +118, +130, +136, +135, +130, +126, +122, +115, +109, +108, +112, +120, +128, +130, +131, +132, +135, +136, +134, +133, +134, +135, +137, +140, +141, +138, +135, +139, +142, +138, +132, +132, +132, +134, +138, +143, +142, +139, +138, +138, +136, +133, +132, +130, +130, +131, +132, +130, +125, +121, +121, +125, +131, +138, +140, +133, +122, +115, +116, +122, +126, +128, +128, +126, +126, +126, +125, +127, +127, +128, +124, +124, +126, +130, +132, +133, +133, +133, +134, +134, +133, +137, +143, +149, +151, +150, +149, +143, +142, +147, +154, +154, +148, +143, +141, +142, +139, +138, +140, +145, +151, +154, +154, +152, +148, +143, +136, +132, +131, +132, +134, +138, +144, +144, +132, +121, +118, +122, +128, +130, +132, +133, +133, +131, +129, +125, +120, +119, +121, +124, +126, +126, +125, +123, +119, +117, +115, +117, +119, +118, +116, +111, +108, +113, +122, +127, +122, +109, +109, +123, +137, +140, +131, +119, +112, +114, +122, +126, +122, +117, +116, +120, +121, +119, +116, +113, +114, +115, +115, +116, +119, +121, +122, +119, +110, +97, +92, +97, +103, +106, +106, +108, +109, +113, +119, +121, +118, +111, +108, +109, +112, +118, +123, +126, +125, +119, +114, +112, +114, +120, +125, +130, +131, +129, +122, +116, +110, +108, +112, +121, +130, +132, +127, +123, +118, +112, +108, +110, +118, +125, +132, +133, +129, +125, +121, +115, +113, +111, +111, +112, +114, +114, +114, +115, +109, +100, +94, +97, +104, +109, +111, +114, +111, +105, +97, +97, +102, +107, +109, +111, +113, +116, +117, +118, +118, +118, +125, +136, +142, +140, +131, +125, +123, +127, +129, +130, +130, +134, +144, +153, +154, +150, +147, +146, +148, +150, +153, +154, +156, +158, +160, +159, +159, +158, +157, +156, +158, +159, +158, +156, +159, +164, +168, +166, +150, +135, +130, +134, +141, +142, +141, +147, +161, +171, +171, +157, +141, +140, +152, +161, +160, +154, +149, +149, +154, +159, +157, +153, +161, +178, +184, +175, +165, +162, +167, +171, +169, +165, +166, +169, +171, +168, +163, +156, +151, +151, +155, +155, +152, +149, +154, +163, +169, +167, +161, +156, +152, +149, +146, +143, +137, +130, +130, +134, +132, +119, +107, +103, +110, +117, +123, +123, +120, +113, +111, +107, +101, +94, +92, +96, +99, +101, +99, +97, +92, +91, +89, +88, +88, +90, +90, +92, +97, +92, +82, +74, +80, +98, +114, +119, +115, +110, +103, +99, +97, +97, +98, +100, +106, +109, +107, +100, +93, +87, +87, +90, +95, +97, +96, +96, +95, +93, +90, +91, +99, +105, +103, +95, +89, +86, +86, +91, +100, +104, +105, +108, +116, +125, +123, +113, +104, +105, +113, +115, +113, +111, +115, +122, +127, +125, +117, +114, +115, +118, +122, +129, +142, +151, +150, +142, +132, +126, +125, +128, +133, +134, +136, +139, +141, +142, +143, +139, +130, +125, +132, +140, +143, +138, +128, +117, +116, +124, +132, +136, +139, +141, +135, +125, +113, +105, +105, +115, +128, +138, +138, +133, +128, +126, +124, +122, +124, +131, +137, +143, +142, +138, +132, +131, +133, +137, +140, +142, +145, +143, +140, +138, +141, +145, +148, +148, +146, +140, +136, +136, +138, +139, +142, +146, +149, +150, +154, +156, +155, +151, +148, +151, +153, +150, +147, +142, +138, +135, +132, +130, +129, +131, +135, +134, +126, +122, +122, +124, +126, +128, +132, +137, +139, +138, +137, +133, +127, +123, +123, +127, +132, +134, +135, +136, +138, +140, +140, +140, +139, +139, +139, +137, +138, +141, +145, +142, +134, +127, +128, +135, +140, +140, +135, +134, +140, +147, +145, +136, +133, +139, +150, +152, +143, +133, +128, +135, +141, +137, +127, +121, +125, +131, +135, +133, +122, +111, +105, +107, +108, +107, +107, +111, +113, +111, +103, +94, +93, +99, +107, +114, +113, +107, +101, +99, +100, +102, +105, +107, +112, +117, +120, +120, +114, +107, +106, +107, +110, +110, +110, +108, +107, +105, +104, +103, +104, +105, +109, +112, +114, +115, +115, +115, +115, +115, +116, +117, +119, +120, +121, +119, +115, +111, +113, +119, +125, +122, +112, +103, +103, +108, +114, +115, +114, +115, +113, +108, +100, +93, +92, +98, +108, +119, +123, +123, +119, +116, +114, +113, +113, +114, +117, +121, +124, +125, +124, +126, +132, +135, +138, +140, +141, +139, +132, +128, +127, +127, +128, +131, +133, +134, +134, +133, +131, +128, +126, +125, +125, +126, +126, +128, +129, +127, +121, +116, +115, +119, +121, +118, +114, +113, +116, +119, +122, +126, +127, +128, +129, +129, +128, +127, +129, +129, +129, +133, +138, +143, +147, +151, +151, +151, +149, +149, +150, +154, +155, +157, +159, +165, +167, +163, +160, +159, +161, +167, +171, +174, +171, +168, +166, +164, +159, +155, +149, +145, +144, +148, +150, +148, +146, +144, +147, +155, +159, +152, +142, +141, +144, +145, +146, +145, +142, +139, +141, +144, +147, +147, +146, +147, +148, +148, +146, +147, +154, +162, +167, +166, +156, +146, +141, +143, +145, +148, +149, +152, +155, +156, +152, +152, +157, +163, +163, +158, +155, +155, +154, +154, +153, +149, +144, +143, +143, +145, +143, +136, +126, +117, +112, +111, +118, +123, +123, +121, +115, +110, +104, +98, +94, +86, +81, +79, +84, +90, +96, +98, +101, +102, +96, +82, +71, +69, +77, +87, +95, +98, +98, +98, +97, +99, +99, +99, +100, +102, +106, +106, +104, +104, +105, +108, +107, +108, +113, +117, +116, +109, +102, +96, +95, +98, +105, +109, +112, +114, +114, +110, +106, +101, +99, +101, +109, +116, +117, +116, +114, +112, +113, +115, +115, +114, +109, +103, +99, +103, +109, +111, +111, +113, +114, +119, +125, +128, +128, +124, +122, +121, +124, +125, +123, +120, +119, +121, +123, +126, +128, +129, +133, +138, +143, +142, +138, +134, +137, +141, +141, +135, +129, +127, +126, +127, +128, +131, +135, +135, +132, +127, +122, +123, +129, +137, +141, +141, +137, +135, +134, +131, +128, +125, +124, +127, +132, +132, +125, +116, +115, +120, +129, +133, +134, +132, +129, +128, +127, +125, +123, +122, +125, +131, +135, +139, +140, +140, +136, +132, +128, +128, +129, +133, +141, +147, +150, +149, +149, +154, +157, +160, +157, +149, +143, +141, +140, +140, +138, +136, +135, +134, +135, +138, +139, +139, +136, +133, +131, +129, +129, +131, +133, +135, +134, +134, +133, +132, +132, +129, +124, +119, +120, +124, +129, +133, +135, +134, +133, +133, +131, +125, +121, +124, +129, +136, +139, +140, +140, +140, +141, +142, +142, +138, +131, +129, +136, +145, +147, +142, +140, +143, +149, +149, +144, +140, +142, +146, +148, +147, +142, +137, +137, +138, +137, +134, +128, +123, +120, +119, +118, +117, +116, +117, +115, +112, +107, +100, +97, +101, +104, +103, +99, +99, +99, +101, +101, +102, +103, +105, +106, +107, +107, +107, +108, +105, +101, +97, +96, +97, +102, +108, +111, +111, +108, +108, +110, +114, +115, +115, +117, +122, +128, +130, +130, +126, +125, +123, +123, +124, +129, +136, +139, +139, +134, +127, +122, +117, +116, +117, +119, +118, +116, +111, +109, +106, +102, +98, +97, +96, +100, +108, +114, +117, +115, +112, +108, +107, +107, +108, +108, +109, +109, +111, +112, +114, +115, +116, +117, +120, +123, +125, +124, +125, +128, +133, +134, +136, +133, +127, +122, +125, +134, +141, +140, +135, +127, +124, +127, +135, +141, +146, +144, +138, +132, +126, +122, +120, +123, +125, +127, +128, +129, +130, +132, +130, +129, +127, +127, +129, +130, +130, +128, +127, +124, +122, +121, +125, +129, +132, +133, +135, +136, +137, +138, +139, +141, +143, +144, +147, +154, +160, +159, +153, +149, +147, +149, +153, +160, +162, +160, +156, +157, +160, +161, +159, +155, +157, +160, +162, +160, +156, +156, +162, +165, +159, +150, +147, +152, +161, +166, +167, +159, +152, +146, +147, +146, +146, +145, +147, +149, +151, +150, +150, +148, +145, +139, +135, +135, +136, +139, +141, +142, +142, +143, +144, +146, +150, +148, +146, +148, +153, +154, +153, +150, +145, +144, +150, +157, +160, +158, +156, +151, +143, +133, +128, +128, +134, +141, +144, +142, +135, +127, +120, +117, +115, +113, +109, +104, +101, +103, +109, +117, +119, +116, +107, +99, +99, +101, +105, +104, +98, +91, +87, +85, +88, +89, +90, +91, +91, +89, +89, +88, +87, +84, +85, +89, +93, +95, +97, +97, +96, +94, +95, +98, +98, +96, +92, +91, +94, +100, +106, +108, +105, +106, +112, +117, +116, +110, +105, +105, +111, +118, +122, +125, +125, +125, +122, +120, +116, +114, +114, +117, +119, +119, +117, +118, +123, +129, +130, +129, +124, +121, +120, +121, +119, +112, +105, +104, +106, +110, +113, +114, +114, +114, +114, +115, +114, +114, +115, +116, +119, +121, +122, +124, +125, +127, +127, +129, +130, +134, +137, +139, +137, +136, +133, +132, +134, +141, +146, +148, +145, +142, +140, +139, +139, +140, +141, +139, +135, +133, +132, +135, +139, +144, +147, +145, +140, +136, +134, +131, +129, +128, +128, +129, +131, +131, +132, +131, +129, +128, +130, +131, +133, +130, +122, +114, +117, +130, +142, +145, +141, +133, +129, +132, +138, +141, +142, +144, +144, +141, +135, +134, +139, +147, +147, +142, +134, +130, +128, +129, +129, +128, +128, +130, +136, +140, +139, +132, +129, +132, +139, +144, +144, +139, +133, +131, +132, +134, +136, +139, +139, +141, +142, +142, +139, +137, +138, +138, +136, +134, +134, +137, +138, +138, +134, +129, +125, +121, +117, +115, +120, +127, +133, +133, +131, +132, +134, +136, +136, +137, +138, +138, +138, +137, +133, +131, +131, +132, +134, +135, +136, +133, +131, +128, +121, +116, +113, +113, +115, +118, +120, +120, +119, +116, +114, +113, +110, +110, +111, +114, +116, +116, +115, +112, +111, +111, +112, +112, +110, +105, +99, +95, +95, +96, +98, +102, +106, +105, +105, +103, +104, +104, +105, +107, +110, +113, +115, +118, +123, +124, +124, +124, +126, +131, +134, +135, +132, +126, +122, +120, +120, +119, +119, +118, +120, +120, +118, +114, +112, +111, +110, +107, +108, +115, +120, +121, +119, +116, +113, +111, +112, +112, +111, +109, +110, +112, +112, +114, +117, +118, +121, +122, +124, +124, +122, +119, +123, +130, +134, +130, +124, +120, +118, +120, +121, +124, +128, +132, +137, +140, +136, +125, +119, +122, +127, +129, +127, +125, +126, +129, +130, +129, +127, +126, +127, +130, +131, +132, +132, +131, +134, +136, +137, +136, +136, +136, +136, +136, +136, +137, +138, +139, +141, +144, +144, +143, +142, +143, +144, +144, +144, +145, +144, +147, +153, +158, +157, +155, +155, +154, +148, +144, +141, +142, +144, +148, +152, +152, +151, +147, +148, +153, +158, +152, +141, +135, +140, +149, +157, +161, +162, +161, +160, +162, +162, +156, +147, +145, +146, +149, +149, +148, +153, +159, +163, +162, +157, +150, +146, +145, +147, +150, +151, +152, +152, +153, +151, +147, +145, +145, +144, +144, +142, +141, +140, +140, +139, +140, +139, +143, +150, +158, +160, +154, +148, +142, +140, +138, +138, +137, +133, +127, +124, +124, +122, +120, +118, +115, +112, +111, +110, +111, +108, +106, +105, +109, +109, +105, +99, +96, +96, +96, +96, +99, +102, +102, +101, +100, +100, +98, +97, +99, +104, +109, +107, +101, +95, +93, +92, +92, +94, +96, +98, +100, +102, +102, +98, +94, +91, +96, +99, +98, +93, +93, +97, +102, +101, +95, +91, +92, +94, +96, +96, +98, +103, +108, +112, +112, +109, +108, +108, +110, +111, +110, +107, +108, +114, +122, +125, +121, +118, +117, +121, +126, +126, +121, +118, +122, +127, +129, +124, +119, +115, +115, +118, +121, +123, +123, +124, +124, +125, +125, +126, +126, +126, +125, +123, +121, +121, +121, +122, +122, +122, +123, +125, +128, +129, +126, +121, +119, +127, +136, +144, +148, +146, +142, +140, +142, +143, +142, +140, +140, +140, +142, +141, +141, +139, +140, +140, +139, +138, +137, +136, +135, +134, +133, +132, +134, +136, +136, +135, +135, +136, +138, +142, +140, +135, +128, +124, +125, +129, +133, +134, +132, +133, +136, +139, +140, +142, +147, +150, +153, +154, +152, +145, +137, +132, +133, +138, +144, +150, +153, +150, +143, +136, +129, +127, +129, +131, +130, +128, +129, +128, +127, +127, +133, +138, +137, +135, +130, +129, +129, +134, +137, +135, +138, +153, +167, +167, +151, +139, +135, +134, +132, +133, +134, +126, +119, +120, +123, +118, +111, +109, +117, +126, +131, +132, +126, +123, +130, +142, +153, +154, +151, +143, +138, +137, +136, +128, +116, +116, +124, +133, +135, +134, +132, +129, +123, +116, +112, +118, +130, +125, +105, +93, +100, +116, +124, +127, +126, +120, +117, +121, +126, +124, +118, +112, +108, +109, +108, +106, +101, +102, +107, +109, +103, +98, +91, +91, +101, +114, +118, +115, +111, +111, +112, +114, +110, +103, +100, +105, +112, +119, +124, +126, +126, +126, +124, +126, +134, +146, +148, +132, +115, +110, +118, +122, +126, +129, +130, +128, +124, +122, +117, +113, +112, +114, +114, +112, +114, +112, +105, +98, +102, +112, +121, +126, +120, +113, +112, +117, +119, +121, +122, +122, +125, +128, +127, +119, +114, +115, +119, +121, +125, +125, +124, +124, +122, +121, +129, +132, +127, +122, +120, +113, +106, +106, +114, +117, +118, +123, +130, +131, +132, +135, +141, +140, +131, +119, +113, +114, +118, +123, +130, +133, +131, +128, +129, +132, +135, +137, +137, +138, +137, +136, +137, +137, +135, +130, +130, +134, +137, +139, +141, +143, +140, +138, +140, +147, +155, +161, +161, +161, +155, +147, +145, +151, +158, +159, +158, +155, +147, +142, +142, +145, +150, +153, +151, +146, +145, +149, +153, +151, +149, +146, +145, +146, +149, +152, +152, +154, +155, +155, +151, +149, +152, +159, +158, +151, +145, +145, +146, +146, +148, +147, +146, +144, +142, +141, +143, +147, +148, +147, +145, +144, +146, +153, +160, +161, +158, +152, +147, +147, +156, +163, +168, +167, +158, +146, +138, +136, +133, +130, +133, +137, +133, +126, +118, +107, +101, +107, +119, +125, +125, +123, +123, +117, +107, +99, +96, +97, +100, +105, +111, +112, +110, +109, +110, +110, +111, +114, +113, +107, +95, +81, +79, +88, +104, +114, +117, +115, +111, +105, +102, +100, +102, +104, +104, +103, +101, +103, +102, +103, +104, +105, +103, +101, +97, +94, +98, +101, +99, +93, +92, +95, +101, +104, +101, +96, +93, +92, +94, +98, +102, +106, +107, +108, +110, +109, +112, +116, +118, +117, +114, +110, +112, +120, +129, +131, +131, +133, +134, +135, +131, +128, +126, +126, +120, +114, +110, +113, +115, +117, +121, +124, +126, +123, +118, +118, +120, +122, +123, +124, +126, +127, +127, +127, +121, +115, +117, +121, +122, +122, +127, +135, +139, +139, +136, +133, +131, +133, +133, +134, +130, +123, +123, +131, +139, +140, +140, +142, +144, +143, +143, +142, +141, +143, +142, +136, +128, +126, +127, +130, +132, +133, +134, +133, +133, +132, +130, +129, +132, +134, +136, +136, +139, +141, +140, +137, +134, +132, +133, +134, +139, +147, +152, +155, +151, +145, +143, +145, +142, +136, +134, +134, +140, +148, +153, +150, +144, +140, +134, +129, +126, +127, +129, +138, +142, +132, +115, +106, +107, +113, +122, +135, +148, +155, +156, +149, +140, +137, +142, +148, +148, +141, +133, +128, +125, +118, +114, +113, +117, +125, +137, +145, +145, +137, +130, +128, +133, +136, +133, +129, +129, +132, +140, +148, +150, +147, +143, +143, +141, +138, +135, +131, +129, +131, +131, +124, +121, +121, +121, +120, +119, +121, +119, +115, +112, +109, +113, +120, +128, +135, +139, +139, +135, +130, +119, +104, +94, +93, +100, +108, +115, +120, +119, +114, +110, +110, +108, +104, +100, +101, +102, +102, +107, +112, +115, +112, +115, +123, +129, +125, +117, +111, +107, +112, +119, +119, +115, +112, +113, +114, +117, +122, +125, +121, +115, +107, +107, +115, +124, +128, +129, +128, +126, +125, +124, +115, +106, +102, +105, +111, +116, +118, +116, +112, +113, +117, +120, +117, +112, +110, +108, +107, +107, +116, +126, +130, +129, +128, +125, +120, +117, +118, +118, +121, +125, +125, +116, +108, +107, +113, +122, +126, +124, +120, +113, +111, +113, +119, +122, +124, +130, +137, +142, +140, +133, +123, +117, +117, +119, +119, +123, +126, +128, +122, +118, +121, +126, +132, +136, +138, +138, +133, +132, +137, +144, +146, +146, +149, +151, +149, +146, +143, +142, +141, +148, +151, +146, +139, +137, +140, +142, +144, +148, +154, +156, +154, +156, +158, +155, +147, +145, +147, +153, +160, +164, +157, +147, +145, +152, +157, +160, +162, +160, +153, +147, +145, +145, +145, +147, +151, +153, +153, +156, +157, +156, +154, +153, +157, +157, +154, +150, +151, +151, +153, +154, +147, +135, +129, +131, +135, +139, +142, +148, +150, +150, +146, +142, +144, +150, +155, +155, +151, +146, +142, +139, +136, +137, +144, +151, +154, +153, +150, +143, +137, +131, +130, +127, +123, +117, +114, +112, +108, +109, +120, +130, +134, +131, +128, +122, +115, +111, +110, +112, +115, +120, +118, +108, +97, +91, +89, +88, +94, +99, +100, +96, +88, +83, +82, +86, +89, +93, +98, +105, +111, +111, +105, +94, +89, +92, +98, +105, +109, +110, +107, +103, +102, +100, +97, +93, +91, +90, +88, +89, +95, +101, +105, +111, +121, +126, +125, +119, +115, +111, +109, +107, +105, +97, +93, +95, +100, +102, +107, +111, +116, +116, +111, +107, +108, +115, +120, +122, +123, +124, +127, +136, +138, +125, +108, +102, +107, +117, +125, +130, +130, +129, +128, +127, +126, +123, +123, +123, +124, +124, +127, +132, +133, +133, +134, +137, +137, +138, +141, +143, +141, +139, +136, +130, +122, +120, +119, +118, +120, +125, +132, +136, +136, +132, +127, +129, +135, +141, +144, +145, +144, +146, +145, +138, +131, +130, +136, +142, +145, +146, +143, +141, +139, +140, +140, +135, +130, +127, +125, +126, +134, +145, +150, +150, +150, +147, +138, +128, +127, +136, +144, +152, +159, +157, +151, +144, +141, +139, +139, +139, +140, +138, +131, +122, +119, +129, +142, +148, +147, +142, +133, +130, +127, +121, +116, +117, +127, +139, +151, +156, +152, +140, +129, +124, +122, +123, +125, +129, +132, +134, +136, +136, +133, +131, +132, +135, +135, +134, +132, +131, +129, +127, +132, +140, +146, +144, +137, +129, +124, +121, +123, +130, +132, +133, +138, +145, +147, +142, +137, +133, +131, +132, +127, +115, +105, +108, +119, +127, +131, +130, +127, +125, +125, +121, +114, +106, +102, +107, +116, +123, +130, +136, +137, +133, +129, +120, +111, +104, +106, +111, +115, +117, +119, +122, +123, +115, +104, +99, +102, +107, +106, +102, +96, +96, +104, +116, +120, +118, +113, +108, +107, +111, +110, +102, +95, +100, +109, +116, +120, +123, +122, +120, +116, +114, +114, +117, +119, +121, +119, +117, +122, +129, +132, +129, +126, +123, +118, +114, +115, +115, +115, +115, +119, +124, +125, +116, +107, +105, +111, +114, +114, +117, +123, +125, +125, +122, +120, +117, +116, +115, +115, +117, +121, +121, +115, +110, +111, +114, +117, +120, +123, +123, +122, +121, +121, +120, +118, +118, +116, +117, +127, +139, +145, +143, +141, +137, +132, +130, +127, +124, +123, +125, +131, +138, +137, +126, +115, +113, +117, +123, +127, +130, +133, +132, +131, +132, +138, +143, +145, +144, +143, +145, +145, +140, +133, +130, +133, +139, +144, +148, +153, +152, +149, +147, +144, +140, +139, +146, +150, +149, +151, +156, +161, +160, +158, +158, +161, +163, +166, +166, +160, +152, +148, +150, +155, +154, +146, +141, +140, +146, +152, +154, +155, +150, +147, +153, +166, +170, +161, +151, +144, +144, +147, +148, +141, +134, +132, +134, +137, +139, +141, +141, +142, +146, +148, +149, +145, +141, +141, +148, +155, +157, +152, +149, +146, +143, +140, +142, +147, +155, +161, +164, +159, +153, +147, +139, +128, +121, +119, +120, +121, +123, +122, +113, +103, +102, +114, +129, +135, +136, +131, +126, +122, +115, +103, +97, +98, +103, +106, +109, +112, +111, +106, +99, +91, +82, +79, +82, +90, +95, +102, +110, +116, +116, +113, +108, +103, +100, +101, +104, +107, +111, +111, +106, +105, +102, +96, +90, +89, +92, +94, +101, +107, +109, +102, +96, +98, +105, +114, +117, +118, +117, +117, +113, +103, +94, +92, +95, +101, +110, +116, +116, +108, +103, +100, +100, +100, +101, +107, +111, +115, +121, +127, +126, +128, +132, +137, +133, +125, +120, +118, +119, +120, +121, +122, +130, +134, +129, +117, +106, +105, +110, +116, +121, +122, +121, +124, +133, +137, +135, +129, +127, +131, +131, +125, +119, +119, +120, +119, +119, +122, +124, +126, +127, +126, +126, +127, +129, +133, +133, +133, +139, +147, +150, +151, +149, +148, +145, +143, +146, +149, +151, +150, +148, +148, +150, +145, +133, +123, +122, +126, +128, +131, +131, +130, +130, +137, +142, +143, +139, +136, +132, +133, +135, +130, +126, +132, +147, +156, +155, +148, +138, +130, +126, +129, +131, +134, +136, +140, +141, +145, +154, +161, +161, +156, +149, +142, +134, +132, +136, +139, +139, +143, +148, +153, +154, +147, +128, +108, +102, +106, +115, +124, +133, +133, +125, +121, +128, +134, +134, +131, +129, +131, +139, +142, +137, +128, +127, +130, +135, +139, +142, +139, +130, +123, +121, +123, +126, +129, +132, +135, +141, +148, +148, +143, +138, +134, +128, +125, +125, +125, +126, +129, +136, +135, +131, +125, +118, +110, +109, +112, +114, +114, +118, +121, +119, +118, +119, +121, +118, +115, +114, +116, +120, +115, +108, +102, +105, +111, +115, +119, +121, +118, +116, +113, +108, +102, +96, +92, +99, +113, +124, +125, +119, +114, +109, +107, +108, +111, +116, +119, +123, +123, +122, +119, +119, +118, +112, +107, +107, +112, +116, +119, +121, +122, +115, +113, +119, +127, +129, +127, +123, +122, +121, +117, +110, +105, +108, +113, +118, +123, +122, +120, +119, +121, +124, +124, +120, +114, +105, +102, +108, +116, +119, +119, +119, +120, +120, +122, +125, +126, +124, +124, +124, +125, +125, +122, +113, +105, +103, +107, +112, +115, +122, +126, +123, +118, +119, +123, +128, +130, +127, +124, +122, +122, +121, +121, +122, +127, +131, +135, +138, +138, +135, +132, +132, +133, +134, +136, +136, +136, +139, +145, +145, +143, +140, +141, +143, +143, +144, +145, +144, +144, +146, +147, +146, +144, +147, +146, +139, +132, +132, +134, +137, +141, +145, +144, +145, +151, +156, +159, +159, +159, +158, +149, +140, +136, +138, +144, +152, +159, +161, +159, +153, +150, +147, +147, +147, +148, +151, +153, +161, +171, +174, +163, +149, +141, +141, +144, +151, +155, +153, +148, +144, +142, +142, +145, +147, +143, +136, +134, +140, +144, +148, +148, +146, +144, +148, +153, +153, +145, +134, +127, +125, +132, +139, +142, +140, +140, +140, +142, +142, +138, +131, +125, +123, +119, +111, +108, +109, +113, +118, +128, +139, +141, +137, +132, +125, +119, +116, +115, +118, +119, +121, +123, +122, +116, +105, +93, +82, +80, +87, +96, +103, +110, +112, +108, +103, +105, +107, +106, +105, +105, +103, +101, +101, +98, +91, +90, +97, +106, +112, +112, +108, +103, +104, +107, +109, +107, +104, +103, +101, +104, +113, +119, +119, +116, +114, +115, +116, +117, +117, +117, +118, +116, +112, +106, +106, +106, +101, +94, +94, +98, +103, +111, +118, +118, +117, +122, +131, +137, +134, +123, +114, +110, +114, +118, +119, +121, +123, +126, +124, +120, +113, +110, +111, +117, +121, +122, +121, +120, +118, +120, +125, +129, +128, +126, +127, +130, +129, +129, +130, +130, +133, +136, +134, +129, +127, +127, +122, +115, +115, +121, +128, +135, +139, +139, +137, +141, +145, +143, +138, +136, +138, +143, +145, +142, +135, +131, +134, +138, +140, +138, +135, +131, +132, +134, +131, +125, +122, +125, +133, +146, +155, +153, +145, +138, +136, +135, +139, +144, +144, +141, +142, +145, +145, +143, +142, +139, +133, +128, +133, +140, +146, +150, +154, +150, +140, +138, +141, +143, +141, +140, +142, +141, +138, +136, +133, +132, +133, +136, +141, +139, +131, +121, +119, +122, +120, +116, +116, +118, +120, +123, +131, +139, +144, +145, +144, +142, +138, +137, +138, +140, +140, +140, +135, +131, +130, +132, +128, +116, +107, +109, +120, +130, +139, +139, +134, +130, +132, +129, +124, +118, +116, +116, +122, +124, +119, +112, +110, +118, +127, +131, +130, +125, +120, +119, +120, +121, +118, +114, +108, +107, +114, +123, +127, +124, +122, +121, +119, +117, +116, +117, +119, +120, +120, +118, +114, +110, +104, +100, +94, +94, +96, +101, +105, +105, +109, +116, +123, +122, +118, +115, +112, +112, +111, +108, +103, +101, +105, +111, +118, +122, +122, +118, +116, +116, +118, +119, +121, +123, +122, +121, +125, +130, +129, +126, +122, +123, +123, +123, +125, +126, +127, +128, +127, +126, +124, +125, +124, +116, +106, +101, +101, +105, +110, +111, +115, +123, +135, +139, +137, +131, +120, +112, +114, +119, +119, +116, +115, +119, +120, +121, +119, +115, +111, +115, +120, +120, +117, +117, +115, +115, +123, +134, +140, +135, +130, +128, +129, +129, +131, +134, +136, +138, +141, +142, +139, +138, +138, +134, +127, +122, +124, +127, +131, +136, +137, +141, +149, +154, +152, +148, +145, +142, +144, +147, +145, +139, +137, +140, +145, +146, +147, +147, +142, +138, +138, +138, +139, +140, +144, +150, +149, +150, +157, +161, +161, +160, +157, +159, +156, +161, +160, +165, +166, +160, +160, +158, +161, +156, +146, +142, +145, +148, +151, +151, +155, +157, +160, +155, +146, +149, +156, +155, +170, +165, +138, +119, +112, +113, +110, +113, +114, +117, +115, +121, +118, +122, +123, +130, +131, +131, +136, +142, +154, +146, +175, +141, +136, +174, +166, +141, +166, +187, +152, +184, +190, +192, +166, +153, +162, +177, +192, +177, +176, +163, +145, +144, +146, +149, +141, +104, +99, +101, +101, +127, +108, +103, +104, +63, +56, +57, +75, +78, +66, +48, +60, +83, +74, +51, +45, +52, +49, +61, +57, +70, +78, +43, +42, +70, +54, +66, +62, +60, +87, +86, +97, +87, +70, +70, +93, +122, +101, +97, +83, +78, +99, +100, +109, +109, +111, +90, +93, +110, +108, +113, +111, +110, +123, +140, +129, +125, +122, +113, +101, +107, +118, +133, +150, +147, +135, +148, +161, +155, +155, +139, +130, +134, +138, +143, +144, +139, +138, +156, +170, +167, +161, +159, +149, +147, +151, +154, +149, +150, +143, +131, +144, +159, +156, +151, +147, +157, +160, +152, +147, +146, +151, +150, +141, +137, +130, +117, +126, +126, +127, +132, +119, +112, +119, +132, +124, +119, +131, +129, +117, +119, +132, +133, +123, +122, +127, +132, +129, +119, +120, +116, +117, +119, +113, +114, +121, +117, +121, +120, +112, +113, +118, +128, +131, +133, +127, +127, +121, +115, +115, +108, +111, +113, +121, +129, +123, +109, +106, +114, +130, +140, +140, +130, +114, +117, +115, +109, +102, +114, +123, +117, +116, +123, +141, +150, +144, +142, +140, +126, +129, +132, +130, +136, +142, +138, +125, +125, +123, +125, +129, +129, +133, +135, +137, +140, +139, +146, +151, +150, +156, +164, +163, +160, +158, +152, +150, +159, +154, +142, +140, +149, +168, +181, +180, +174, +161, +147, +138, +135, +142, +143, +140, +152, +160, +168, +160, +140, +131, +128, +141, +156, +154, +159, +158, +140, +134, +131, +122, +122, +126, +132, +134, +133, +132, +128, +123, +136, +136, +131, +131, +129, +146, +146, +135, +125, +118, +118, +120, +121, +104, +110, +117, +129, +123, +109, +112, +93, +109, +121, +126, +122, +113, +113, +92, +73, +68, +70, +75, +89, +88, +89, +98, +99, +86, +77, +65, +58, +65, +83, +107, +98, +84, +87, +84, +74, +69, +91, +98, +92, +102, +103, +91, +84, +77, +74, +85, +97, +105, +105, +97, +81, +66, +59, +67, +72, +89, +97, +91, +101, +111, +114, +115, +114, +101, +107, +114, +120, +118, +128, +122, +115, +127, +126, +124, +127, +128, +118, +131, +138, +121, +112, +107, +109, +120, +133, +139, +122, +121, +123, +125, +130, +130, +131, +129, +138, +149, +151, +158, +158, +149, +152, +155, +156, +145, +153, +152, +166, +164, +160, +170, +166, +170, +163, +171, +170, +170, +167, +183, +184, +171, +177, +174, +180, +172, +166, +180, +178, +175, +179, +175, +164, +163, +161, +157, +173, +170, +173, +178, +176, +166, +164, +160, +151, +150, +150, +165, +163, +163, +167, +173, +169, +163, +162, +159, +157, +154, +158, +160, +162, +154, +155, +146, +153, +166, +158, +158, +150, +145, +143, +144, +141, +137, +143, +151, +158, +149, +135, +135, +133, +117, +118, +117, +115, +121, +123, +129, +126, +108, +101, +103, +101, +109, +112, +111, +98, +94, +114, +123, +110, +105, +97, +92, +93, +102, +104, +97, +95, +106, +112, +101, +105, +108, +102, +105, +116, +126, +126, +125, +114, +105, +104, +95, +100, +101, +97, +87, +84, +89, +89, +89, +80, +83, +86, +93, +80, +88, +101, +103, +107, +92, +91, +82, +91, +98, +101, +102, +97, +103, +98, +108, +113, +111, +113, +104, +105, +104, +101, +103, +95, +94, +102, +96, +100, +116, +117, +121, +120, +126, +134, +131, +139, +141, +134, +130, +132, +128, +139, +134, +127, +126, +129, +142, +141, +140, +139, +139, +139, +140, +133, +140, +139, +136, +133, +130, +140, +138, +138, +135, +137, +146, +144, +143, +136, +130, +140, +149, +162, +161, +158, +148, +137, +130, +132, +131, +128, +135, +136, +146, +143, +135, +122, +115, +116, +119, +125, +140, +146, +129, +118, +110, +114, +119, +131, +130, +138, +144, +143, +141, +131, +130, +134, +139, +139, +145, +142, +135, +141, +140, +127, +123, +121, +130, +126, +131, +130, +119, +129, +128, +123, +127, +123, +121, +122, +117, +110, +108, +120, +119, +119, +122, +124, +122, +121, +123, +116, +118, +127, +132, +128, +121, +114, +123, +129, +128, +130, +136, +136, +123, +124, +126, +126, +135, +141, +155, +152, +140, +139, +141, +138, +131, +132, +132, +130, +127, +134, +128, +126, +123, +114, +121, +129, +132, +125, +134, +140, +138, +133, +134, +131, +122, +127, +137, +139, +141, +140, +142, +137, +139, +141, +137, +140, +134, +132, +132, +143, +138, +131, +131, +127, +131, +133, +135, +141, +139, +141, +147, +147, +139, +135, +133, +128, +126, +123, +133, +132, +125, +117, +121, +117, +122, +125, +118, +116, +120, +120, +115, +125, +129, +132, +120, +123, +130, +129, +136, +133, +128, +124, +119, +123, +118, +121, +123, +117, +111, +110, +116, +112, +105, +95, +102, +104, +104, +109, +112, +111, +115, +113, +95, +91, +99, +105, +95, +100, +101, +110, +112, +110, +105, +95, +93, +90, +104, +108, +106, +111, +107, +104, +101, +105, +108, +100, +105, +106, +109, +114, +105, +114, +116, +110, +112, +117, +125, +128, +124, +122, +116, +113, +105, +104, +112, +117, +123, +130, +133, +133, +130, +125, +125, +119, +118, +115, +124, +118, +112, +118, +111, +106, +105, +99, +105, +114, +120, +121, +129, +131, +125, +125, +128, +140, +147, +151, +142, +143, +141, +141, +141, +137, +136, +136, +142, +154, +150, +155, +159, +159, +160, +159, +160, +150, +155, +161, +168, +169, +168, +171, +167, +163, +161, +165, +159, +163, +165, +163, +158, +157, +164, +157, +152, +149, +149, +151, +152, +156, +167, +158, +147, +142, +137, +148, +150, +154, +154, +154, +162, +154, +152, +160, +152, +156, +160, +157, +153, +154, +160, +149, +150, +156, +152, +147, +151, +156, +160, +156, +148, +146, +140, +138, +132, +135, +147, +154, +156, +152, +148, +139, +128, +125, +127, +128, +118, +116, +115, +115, +104, +104, +108, +109, +108, +104, +109, +105, +108, +103, +115, +107, +89, +87, +95, +97, +97, +106, +106, +112, +112, +103, +104, +115, +116, +118, +124, +130, +122, +117, +118, +117, +120, +127, +121, +113, +111, +106, +108, +110, +114, +105, +102, +106, +98, +106, +114, +121, +120, +116, +115, +116, +115, +111, +115, +118, +115, +112, +106, +96, +98, +104, +101, +93, +88, +101, +102, +93, +101, +102, +93, +88, +87, +88, +102, +115, +122, +133, +127, +117, +111, +107, +109, +112, +121, +121, +122, +130, +129, +123, +104, +104, +109, +120, +117, +124, +135, +135, +129, +113, +120, +117, +113, +113, +127, +139, +134, +127, +122, +127, +133, +126, +137, +147, +137, +127, +133, +137, +123, +129, +137, +129, +126, +139, +133, +128, +122, +121, +124, +122, +119, +109, +113, +125, +125, +122, +121, +127, +123, +124, +123, +129, +128, +124, +123, +132, +140, +140, +146, +148, +141, +131, +134, +129, +128, +128, +133, +136, +139, +144, +142, +149, +143, +141, +150, +159, +150, +144, +150, +147, +142, +141, +144, +137, +136, +134, +135, +140, +138, +135, +133, +127, +126, +132, +140, +131, +119, +131, +133, +120, +112, +111, +103, +116, +128, +133, +141, +141, +142, +139, +139, +133, +138, +134, +133, +139, +139, +141, +134, +141, +143, +137, +128, +125, +130, +133, +133, +132, +136, +124, +117, +125, +127, +123, +123, +130, +125, +134, +134, +122, +113, +113, +113, +110, +123, +121, +120, +128, +130, +117, +114, +111, +106, +106, +109, +116, +109, +114, +117, +106, +100, +100, +101, +100, +111, +118, +115, +109, +106, +116, +118, +122, +115, +120, +129, +131, +128, +122, +124, +118, +134, +132, +135, +136, +135, +139, +135, +133, +129, +132, +128, +130, +125, +136, +141, +148, +150, +143, +136, +133, +127, +121, +128, +129, +130, +123, +131, +128, +128, +120, +122, +125, +116, +122, +128, +130, +129, +121, +114, +111, +103, +101, +105, +106, +110, +115, +113, +116, +116, +113, +118, +125, +126, +128, +125, +120, +116, +112, +111, +115, +119, +124, +121, +118, +123, +119, +122, +125, +122, +120, +120, +120, +125, +130, +120, +129, +139, +131, +124, +127, +136, +131, +130, +140, +139, +142, +147, +138, +138, +135, +134, +137, +133, +133, +128, +128, +133, +122, +110, +105, +107, +116, +114, +124, +127, +123, +127, +121, +116, +113, +122, +119, +117, +131, +129, +121, +122, +124, +128, +125, +124, +130, +128, +135, +138, +129, +136, +136, +133, +137, +135, +131, +127, +142, +153, +158, +162, +160, +159, +152, +148, +151, +147, +149, +164, +173, +168, +156, +161, +162, +157, +154, +162, +159, +163, +163, +154, +151, +146, +139, +138, +151, +159, +158, +158, +164, +154, +157, +154, +142, +148, +152, +164, +175, +180, +161, +153, +150, +149, +145, +140, +151, +151, +152, +142, +140, +141, +134, +139, +137, +140, +148, +147, +149, +149, +146, +138, +136, +135, +134, +124, +122, +130, +129, +125, +128, +129, +118, +113, +116, +116, +115, +124, +121, +112, +117, +112, +97, +95, +98, +95, +99, +109, +107, +111, +113, +104, +105, +111, +102, +106, +107, +104, +104, +111, +114, +115, +106, +95, +92, +95, +93, +85, +98, +105, +100, +102, +101, +95, +95, +95, +104, +118, +121, +116, +116, +106, +105, +99, +106, +112, +104, +111, +110, +117, +110, +100, +97, +98, +97, +96, +93, +94, +97, +101, +100, +95, +88, +81, +81, +94, +113, +106, +111, +113, +107, +106, +115, +114, +106, +108, +113, +119, +113, +113, +112, +112, +107, +111, +120, +125, +122, +117, +125, +131, +126, +126, +132, +133, +131, +133, +141, +146, +149, +151, +143, +145, +143, +138, +138, +134, +147, +138, +140, +145, +144, +146, +142, +137, +132, +130, +132, +140, +146, +138, +129, +119, +116, +114, +117, +129, +131, +135, +134, +136, +135, +131, +129, +130, +128, +123, +123, +129, +124, +129, +132, +125, +128, +123, +124, +128, +135, +131, +130, +132, +129, +127, +126, +134, +132, +140, +146, +149, +147, +139, +147, +145, +139, +142, +141, +138, +144, +157, +150, +139, +136, +133, +128, +121, +129, +132, +131, +128, +126, +132, +123, +109, +112, +109, +105, +113, +122, +128, +119, +115, +119, +120, +122, +120, +118, +117, +127, +128, +131, +133, +127, +125, +132, +139, +128, +133, +133, +136, +128, +120, +130, +131, +131, +126, +129, +130, +130, +132, +134, +143, +136, +136, +143, +136, +137, +138, +135, +136, +136, +139, +138, +126, +127, +137, +135, +129, +129, +128, +122, +125, +109, +102, +100, +110, +119, +116, +121, +123, +123, +123, +123, +122, +132, +136, +130, +132, +140, +140, +131, +134, +133, +138, +143, +139, +134, +142, +155, +146, +142, +143, +141, +140, +141, +132, +135, +142, +136, +137, +148, +147, +140, +134, +131, +137, +137, +129, +126, +131, +126, +128, +131, +137, +129, +121, +122, +120, +112, +116, +127, +121, +109, +107, +110, +110, +117, +121, +126, +123, +119, +123, +120, +116, +112, +116, +130, +126, +130, +131, +127, +126, +112, +109, +111, +111, +115, +119, +125, +126, +117, +116, +120, +125, +115, +113, +119, +118, +125, +122, +125, +123, +123, +118, +116, +115, +115, +120, +121, +128, +129, +126, +127, +121, +114, +110, +117, +117, +105, +98, +96, +109, +106, +110, +106, +105, +107, +106, +112, +115, +121, +116, +117, +111, +118, +132, +137, +131, +121, +118, +111, +114, +119, +117, +107, +107, +117, +122, +117, +119, +119, +117, +116, +115, +119, +119, +113, +113, +131, +147, +144, +132, +132, +129, +132, +131, +132, +138, +137, +131, +140, +140, +135, +133, +126, +127, +124, +127, +117, +111, +117, +127, +124, +124, +127, +135, +138, +138, +136, +133, +135, +140, +144, +141, +138, +151, +161, +152, +150, +138, +137, +140, +135, +128, +125, +136, +136, +137, +140, +138, +138, +141, +132, +133, +134, +131, +128, +138, +157, +162, +149, +141, +149, +143, +141, +140, +143, +150, +151, +147, +153, +152, +144, +138, +133, +141, +142, +137, +130, +128, +128, +128, +127, +130, +136, +138, +145, +151, +152, +139, +129, +130, +123, +132, +151, +162, +160, +148, +150, +151, +136, +127, +126, +119, +125, +131, +142, +151, +153, +143, +141, +136, +124, +132, +122, +120, +135, +147, +144, +144, +137, +128, +131, +124, +130, +128, +122, +127, +126, +128, +124, +126, +118, +119, +122, +117, +124, +118, +109, +105, +98, +91, +98, +104, +109, +113, +117, +111, +104, +111, +112, +109, +105, +105, +126, +137, +130, +120, +116, +121, +122, +117, +111, +106, +104, +105, +111, +118, +116, +110, +109, +119, +124, +125, +119, +111, +113, +125, +128, +126, +126, +131, +128, +125, +129, +134, +137, +132, +133, +125, +126, +122, +123, +120, +108, +115, +125, +117, +108, +97, +102, +104, +101, +109, +111, +113, +117, +123, +112, +110, +112, +107, +110, +131, +140, +126, +125, +118, +109, +117, +128, +119, +111, +113, +120, +125, +122, +125, +117, +116, +116, +126, +120, +118, +120, +121, +133, +144, +144, +139, +130, +127, +130, +130, +129, +130, +138, +146, +150, +140, +141, +134, +130, +133, +122, +125, +136, +126, +111, +116, +122, +127, +119, +121, +131, +135, +132, +134, +139, +128, +119, +122, +134, +147, +146, +143, +141, +140, +139, +128, +132, +127, +120, +123, +131, +139, +132, +135, +134, +133, +130, +129, +128, +125, +131, +128, +138, +143, +146, +148, +137, +132, +134, +138, +139, +134, +138, +144, +143, +143, +136, +136, +128, +132, +132, +138, +137, +123, +111, +113, +121, +114, +115, +123, +127, +122, +124, +125, +125, +123, +123, +122, +129, +140, +140, +131, +129, +125, +124, +127, +119, +114, +106, +110, +118, +123, +120, +118, +120, +120, +117, +115, +120, +114, +100, +111, +126, +130, +136, +131, +130, +128, +117, +116, +119, +121, +124, +126, +130, +133, +125, +117, +107, +112, +117, +117, +112, +105, +97, +100, +108, +110, +104, +115, +115, +116, +124, +121, +120, +114, +110, +108, +126, +135, +136, +128, +124, +122, +121, +125, +116, +111, +111, +121, +119, +123, +119, +122, +124, +130, +132, +122, +126, +119, +122, +134, +143, +151, +147, +141, +143, +137, +133, +137, +140, +143, +135, +144, +152, +146, +137, +132, +131, +129, +133, +143, +136, +123, +121, +130, +132, +133, +132, +135, +138, +131, +138, +141, +141, +136, +135, +138, +147, +155, +149, +146, +142, +141, +137, +138, +134, +125, +121, +128, +135, +135, +134, +137, +137, +139, +134, +135, +135, +129, +135, +144, +155, +152, +151, +147, +143, +140, +139, +142, +140, +141, +145, +142, +137, +137, +135, +124, +118, +115, +127, +127, +114, +112, +111, +110, +108, +115, +112, +114, +122, +123, +124, +122, +114, +116, +118, +115, +129, +138, +129, +119, +114, +119, +113, +105, +114, +103, +103, +112, +116, +118, +113, +115, +111, +112, +115, +118, +115, +111, +110, +123, +133, +135, +131, +125, +127, +123, +114, +120, +123, +119, +126, +125, +133, +129, +120, +116, +110, +114, +115, +117, +108, +102, +100, +109, +114, +116, +122, +119, +119, +126, +126, +124, +126, +123, +124, +128, +134, +146, +141, +135, +136, +132, +126, +122, +115, +116, +117, +126, +133, +128, +130, +129, +124, +128, +133, +130, +129, +124, +130, +139, +148, +148, +144, +145, +146, +140, +139, +139, +137, +146, +143, +146, +149, +146, +140, +135, +134, +135, +139, +134, +122, +117, +123, +127, +127, +130, +135, +137, +138, +143, +143, +135, +134, +132, +137, +143, +151, +156, +152, +149, +147, +138, +136, +126, +122, +123, +126, +136, +136, +132, +129, +127, +128, +136, +133, +134, +126, +122, +131, +139, +149, +146, +140, +144, +141, +133, +134, +130, +140, +136, +134, +139, +139, +127, +126, +125, +116, +124, +129, +127, +119, +113, +108, +110, +109, +105, +119, +126, +122, +125, +122, +118, +115, +117, +115, +127, +139, +132, +128, +123, +115, +118, +113, +102, +101, +102, +108, +112, +120, +112, +112, +106, +103, +110, +116, +117, +112, +113, +110, +121, +128, +131, +127, +124, +126, +122, +122, +121, +121, +124, +127, +129, +130, +122, +114, +115, +110, +112, +115, +112, +117, +116, +109, +100, +102, +104, +111, +116, +120, +117, +117, +120, +118, +121, +112, +114, +128, +135, +137, +136, +129, +117, +113, +113, +110, +107, +114, +121, +124, +127, +125, +122, +121, +117, +122, +129, +123, +124, +127, +129, +137, +142, +140, +137, +137, +140, +139, +136, +129, +136, +131, +132, +139, +134, +134, +128, +128, +125, +118, +122, +124, +124, +122, +111, +108, +115, +115, +124, +131, +128, +129, +132, +132, +124, +125, +130, +136, +145, +150, +149, +141, +131, +125, +126, +119, +121, +126, +128, +130, +134, +138, +133, +132, +132, +133, +135, +134, +133, +135, +140, +143, +140, +144, +151, +151, +147, +147, +148, +142, +134, +136, +140, +141, +138, +143, +138, +129, +132, +132, +128, +123, +124, +135, +132, +125, +125, +126, +123, +123, +128, +134, +135, +132, +133, +130, +130, +134, +137, +138, +143, +139, +135, +133, +131, +127, +119, +123, +124, +123, +128, +131, +134, +129, +127, +130, +129, +129, +126, +132, +128, +131, +132, +130, +133, +136, +142, +144, +144, +146, +141, +132, +136, +140, +140, +132, +135, +139, +137, +131, +136, +129, +121, +127, +130, +127, +119, +122, +119, +125, +127, +122, +123, +126, +123, +124, +128, +127, +133, +133, +129, +129, +129, +127, +122, +117, +117, +117, +124, +122, +119, +116, +115, +119, +119, +122, +123, +121, +122, +120, +119, +122, +125, +122, +121, +121, +136, +139, +134, +133, +133, +137, +134, +124, +124, +129, +131, +128, +127, +128, +123, +124, +124, +122, +122, +120, +121, +118, +112, +115, +121, +121, +121, +119, +121, +116, +119, +123, +125, +112, +109, +115, +115, +117, +115, +123, +121, +118, +115, +111, +111, +107, +114, +116, +113, +120, +116, +117, +118, +117, +117, +121, +123, +122, +122, +118, +127, +127, +127, +129, +129, +131, +132, +130, +128, +133, +134, +134, +134, +134, +136, +129, +128, +130, +124, +126, +129, +132, +131, +126, +125, +124, +118, +119, +123, +121, +119, +121, +121, +117, +118, +119, +118, +115, +115, +117, +118, +113, +112, +119, +118, +115, +111, +115, +118, +113, +114, +112, +118, +118, +119, +118, +111, +120, +121, +123, +123, +120, +118, +118, +126, +127, +127, +131, +126, +127, +124, +125, +131, +139, +138, +135, +137, +130, +132, +132, +136, +139, +135, +128, +126, +132, +131, +130, +126, +128, +129, +129, +128, +126, +126, +131, +128, +124, +121, +124, +131, +126, +127, +129, +125, +126, +131, +132, +131, +133, +132, +133, +134, +134, +132, +132, +132, +129, +131, +134, +133, +134, +134, +136, +131, +134, +134, +129, +134, +136, +138, +138, +141, +143, +143, +142, +145, +144, +143, +149, +151, +152, +154, +153, +152, +148, +149, +151, +144, +141, +140, +137, +139, +135, +137, +137, +133, +138, +136, +138, +135, +135, +132, +133, +137, +136, +131, +134, +135, +130, +135, +134, +134, +135, +135, +132, +130, +126, +127, +130, +132, +132, +136, +131, +123, +127, +120, +122, +125, +122, +126, +125, +123, +126, +131, +129, +128, +129, +131, +130, +127, +129, +128, +133, +134, +130, +130, +132, +133, +137, +132, +132, +134, +133, +128, +125, +123, +117, +122, +120, +116, +114, +117, +120, +122, +119, +114, +108, +108, +115, +115, +115, +116, +117, +112, +112, +115, +117, +116, +114, +110, +114, +120, +117, +113, +111, +110, +110, +112, +113, +110, +112, +111, +111, +114, +114, +113, +114, +121, +121, +120, +121, +121, +120, +122, +123, +121, +122, +127, +128, +127, +125, +125, +128, +128, +126, +126, +128, +132, +128, +127, +131, +127, +125, +123, +121, +120, +123, +121, +117, +117, +120, +123, +124, +122, +120, +118, +121, +121, +119, +121, +121, +120, +122, +123, +124, +122, +117, +117, +123, +118, +119, +121, +121, +120, +125, +126, +124, +123, +125, +128, +125, +126, +128, +129, +129, +129, +128, +130, +129, +128, +133, +135, +141, +141, +140, +136, +135, +137, +135, +140, +147, +144, +141, +138, +144, +143, +142, +144, +140, +133, +134, +135, +135, +136, +134, +132, +132, +131, +134, +136, +131, +135, +139, +135, +134, +130, +124, +130, +135, +132, +132, +137, +139, +137, +126, +131, +134, +130, +133, +133, +133, +134, +134, +132, +134, +131, +133, +131, +126, +129, +130, +129, +129, +130, +129, +131, +131, +132, +134, +132, +133, +133, +136, +136, +134, +137, +138, +139, +141, +141, +140, +140, +142, +139, +134, +137, +134, +133, +134, +133, +130, +126, +125, +126, +128, +126, +126, +121, +123, +118, +117, +123, +121, +118, +118, +120, +119, +120, +121, +122, +123, +126, +120, +115, +116, +117, +124, +121, +117, +118, +118, +113, +114, +121, +120, +119, +120, +120, +122, +125, +122, +122, +123, +124, +128, +127, +128, +128, +126, +126, +132, +136, +134, +132, +136, +136, +134, +135, +135, +133, +131, +130, +131, +133, +126, +128, +123, +123, +130, +128, +127, +122, +117, +120, +118, +118, +123, +120, +118, +119, +118, +118, +116, +117, +121, +125, +122, +122, +124, +123, +125, +123, +116, +117, +123, +119, +122, +123, +121, +117, +114, +117, +115, +119, +121, +119, +122, +123, +120, +116, +118, +125, +125, +120, +123, +126, +128, +132, +129, +129, +132, +130, +128, +130, +139, +139, +132, +133, +134, +134, +131, +129, +124, +121, +122, +125, +125, +126, +129, +122, +118, +118, +120, +120, +121, +124, +124, +119, +124, +124, +121, +120, +117, +120, +120, +117, +118, +122, +122, +120, +122, +121, +123, +117, +118, +121, +121, +121, +118, +123, +122, +120, +124, +125, +126, +127, +128, +131, +133, +136, +136, +133, +136, +136, +140, +145, +139, +142, +141, +142, +147, +145, +146, +149, +148, +143, +141, +140, +137, +135, +136, +137, +133, +131, +130, +130, +132, +128, +128, +131, +128, +131, +131, +126, +130, +132, +131, +127, +128, +132, +130, +131, +129, +130, +131, +130, +126, +131, +129, +124, +126, +128, +124, +123, +130, +127, +130, +131, +132, +133, +131, +130, +130, +137, +136, +137, +141, +142, +139, +141, +140, +139, +142, +140, +140, +139, +144, +144, +139, +141, +145, +145, +144, +138, +135, +134, +132, +128, +133, +133, +133, +131, +129, +130, +126, +128, +129, +126, +129, +126, +123, +125, +127, +121, +124, +123, +124, +126, +123, +124, +120, +120, +122, +122, +121, +122, +121, +124, +126, +121, +118, +122, +123, +124, +123, +121, +122, +126, +127, +126, +128, +126, +126, +126, +129, +129, +131, +133, +132, +132, +127, +132, +135, +136, +134, +134, +131, +130, +130, +127, +124, +123, +125, +120, +121, +119, +122, +121, +116, +118, +121, +118, +114, +117, +115, +116, +115, +115, +113, +110, +109, +111, +112, +111, +109, +113, +113, +113, +114, +115, +110, +109, +112, +115, +114, +111, +111, +110, +112, +116, +113, +114, +113, +111, +117, +120, +118, +120, +123, +122, +122, +120, +124, +124, +126, +127, +130, +129, +129, +129, +130, +134, +135, +137, +138, +137, +133, +131, +129, +131, +129, +131, +129, +130, +131, +130, +128, +125, +125, +127, +127, +126, +123, +124, +124, +123, +123, +125, +125, +128, +128, +125, +128, +126, +123, +124, +125, +126, +126, +125, +124, +126, +125, +127, +126, +127, +130, +128, +127, +127, +127, +130, +130, +137, +137, +136, +139, +142, +143, +137, +140, +142, +143, +141, +143, +141, +143, +148, +147, +146, +145, +144, +141, +139, +141, +140, +136, +137, +134, +135, +136, +132, +131, +132, +136, +133, +124, +127, +133, +131, +128, +129, +126, +130, +132, +126, +127, +130, +131, +131, +130, +128, +127, +129, +128, +129, +129, +129, +127, +127, +127, +126, +125, +125, +126, +123, +123, +126, +127, +128, +128, +128, +129, +128, +132, +131, +129, +130, +132, +136, +136, +137, +136, +136, +137, +139, +141, +140, +138, +136, +133, +132, +131, +131, +130, +132, +129, +128, +128, +122, +122, +123, +124, +125, +123, +123, +126, +120, +119, +123, +123, +124, +123, +120, +121, +121, +117, +117, +119, +121, +117, +116, +118, +118, +115, +115, +115, +117, +116, +113, +115, +116, +118, +116, +116, +115, +117, +119, +120, +125, +121, +121, +123, +125, +129, +130, +126, +126, +129, +131, +130, +132, +132, +132, +131, +133, +132, +130, +127, +125, +125, +124, +127, +127, +127, +124, +124, +118, +121, +122, +123, +124, +121, +124, +123, +121, +124, +125, +125, +124, +123, +125, +127, +127, +126, +122, +122, +121, +119, +122, +120, +120, +122, +124, +119, +114, +115, +119, +121, +122, +121, +121, +122, +124, +126, +124, +126, +129, +132, +134, +134, +134, +134, +135, +135, +136, +134, +132, +136, +135, +136, +139, +142, +142, +138, +137, +135, +134, +133, +134, +134, +135, +132, +133, +131, +131, +130, +128, +129, +128, +129, +129, +128, +124, +126, +122, +123, +127, +127, +125, +122, +123, +123, +122, +120, +119, +119, +123, +124, +124, +124, +125, +122, +122, +125, +125, +123, +122, +125, +126, +125, +129, +131, +128, +126, +129, +133, +133, +132, +133, +133, +138, +136, +136, +140, +140, +139, +141, +140, +138, +138, +134, +131, +130, +128, +132, +130, +127, +128, +128, +129, +124, +124, +124, +124, +125, +124, +124, +122, +123, +127, +129, +124, +122, +123, +123, +121, +125, +125, +125, +127, +123, +122, +126, +126, +125, +122, +126, +125, +123, +125, +123, +126, +125, +125, +127, +130, +129, +126, +129, +132, +132, +129, +131, +133, +133, +135, +136, +141, +139, +139, +138, +134, +140, +144, +147, +146, +141, +138, +137, +136, +134, +135, +134, +134, +132, +131, +134, +132, +129, +127, +125, +126, +124, +125, +122, +122, +126, +127, +126, +125, +125, +124, +125, +124, +125, +123, +127, +123, +121, +124, +123, +119, +118, +121, +119, +118, +120, +121, +120, +121, +122, +123, +126, +127, +128, +126, +127, +130, +130, +132, +134, +135, +136, +136, +136, +136, +138, +135, +137, +139, +141, +138, +135, +134, +130, +128, +129, +128, +130, +127, +126, +127, +126, +125, +124, +125, +122, +120, +121, +120, +120, +120, +117, +116, +116, +117, +120, +120, +120, +122, +118, +116, +116, +117, +117, +120, +120, +118, +121, +120, +118, +116, +116, +117, +118, +119, +121, +120, +121, +122, +121, +121, +121, +124, +124, +126, +129, +130, +131, +127, +130, +130, +131, +132, +133, +136, +137, +137, +135, +134, +131, +129, +127, +125, +127, +129, +131, +130, +131, +128, +124, +124, +124, +123, +126, +127, +125, +123, +123, +126, +128, +126, +125, +123, +124, +126, +126, +124, +126, +128, +123, +121, +122, +123, +124, +122, +124, +126, +127, +125, +123, +125, +125, +126, +124, +127, +127, +130, +131, +129, +129, +131, +129, +128, +132, +136, +134, +135, +135, +133, +134, +132, +134, +138, +144, +144, +140, +136, +136, +135, +131, +132, +131, +133, +129, +129, +131, +129, +126, +123, +120, +119, +122, +125, +125, +124, +127, +126, +128, +126, +127, +126, +124, +127, +128, +127, +129, +129, +127, +128, +124, +121, +118, +118, +119, +121, +125, +125, +123, +123, +123, +125, +127, +130, +127, +130, +127, +127, +130, +128, +128, +131, +133, +134, +134, +132, +134, +133, +131, +131, +129, +129, +129, +132, +133, +128, +129, +130, +133, +131, +129, +128, +129, +130, +128, +129, +130, +127, +126, +124, +124, +125, +125, +127, +126, +126, +128, +127, +127, +124, +123, +126, +128, +126, +123, +126, +128, +127, +125, +123, +125, +125, +126, +125, +127, +127, +128, +126, +125, +125, +125, +126, +122, +123, +125, +128, +130, +131, +134, +134, +133, +130, +131, +132, +134, +132, +132, +131, +129, +127, +128, +127, +123, +124, +126, +129, +127, +125, +123, +122, +124, +125, +127, +128, +129, +129, +128, +130, +128, +127, +127, +127, +129, +131, +129, +127, +128, +127, +129, +126, +126, +124, +122, +121, +121, +122, +122, +120, +122, +124, +124, +123, +122, +124, +126, +127, +126, +126, +127, +128, +124, +120, +119, +119, +118, +123, +126, +127, +125, +124, +126, +126, +129, +128, +126, +125, +128, +129, +133, +137, +139, +137, +136, +134, +132, +127, +124, +126, +132, +134, +134, +134, +131, +127, +126, +126, +124, +124, +122, +125, +124, +120, +121, +125, +124, +122, +121, +120, +122, +123, +121, +121, +121, +120, +122, +128, +130, +130, +127, +124, +123, +125, +125, +124, +122, +123, +127, +130, +129, +130, +129, +128, +130, +129, +126, +123, +128, +130, +132, +132, +133, +132, +131, +131, +130, +131, +131, +131, +130, +131, +133, +133, +133, +131, +131, +130, +130, +130, +128, +128, +126, +125, +123, +126, +127, +126, +126, +128, +127, +126, +128, +128, +129, +128, +127, +127, +127, +129, +128, +130, +132, +133, +131, +131, +130, +127, +126, +125, +125, +125, +128, +129, +126, +124, +124, +126, +126, +127, +127, +126, +126, +131, +132, +131, +133, +136, +130, +125, +125, +126, +129, +128, +127, +128, +130, +128, +129, +131, +131, +129, +130, +133, +132, +129, +128, +129, +129, +131, +130, +127, +126, +127, +128, +126, +125, +124, +126, +127, +127, +128, +130, +127, +126, +123, +125, +126, +126, +127, +131, +129, +128, +128, +128, +127, +130, +131, +131, +131, +129, +131, +132, +128, +122, +121, +125, +124, +127, +129, +127, +125, +126, +127, +127, +125, +126, +127, +126, +127, +129, +128, +129, +128, +129, +128, +126, +126, +125, +128, +126, +125, +129, +128, +125, +124, +123, +121, +120, +120, +122, +122, +122, +121, +120, +120, +124, +124, +124, +126, +128, +128, +127, +123, +123, +123, +124, +127, +127, +127, +128, +130, +129, +128, +124, +122, +126, +128, +130, +129, +128, +129, +130, +127, +127, +127, +126, +126, +126, +127, +126, +125, +127, +126, +124, +123, +124, +125, +123, +124, +125, +127, +127, +126, +127, +128, +128, +128, +127, +128, +129, +129, +130, +129, +128, +125, +125, +125, +126, +127, +125, +126, +125, +125, +126, +127, +125, +124, +128, +129, +127, +129, +129, +129, +129, +129, +127, +129, +127, +129, +130, +131, +130, +130, +131, +129, +127, +125, +125, +126, +128, +128, +127, +126, +124, +125, +126, +125, +123, +124, +124, +128, +128, +127, +126, +126, +127, +125, +125, +127, +130, +129, +128, +128, +129, +129, +127, +127, +128, +127, +127, +131, +132, +130, +129, +128, +130, +130, +129, +132, +131, +131, +129, +129, +127, +124, +123, +121, +124, +125, +129, +130, +132, +135, +132, +133, +131, +133, +135, +133, +131, +129, +131, +132, +127, +124, +123, +122, +125, +123, +123, +124, +123, +125, +125, +125, +124, +126, +127, +129, +131, +131, +131, +132, +132, +131, +130, +129, +127, +130, +132, +130, +131, +132, +132, +131, +129, +126, +128, +130, +130, +130, +130, +128, +125, +125, +126, +126, +125, +127, +127, +126, +127, +126, +126, +125, +124, +128, +131, +131, +131, +131, +129, +127, +127, +125, +123, +123, +122, +119, +120, +122, +123, +123, +125, +124, +125, +126, +126, +126, +128, +129, +129, +127, +125, +125, +124, +122, +125, +125, +124, +124, +127, +125, +126, +130, +133, +133, +135, +136, +134, +132, +129, +128, +125, +121, +120, +118, +119, +119, +120, +123, +124, +126, +128, +125, +124, +124, +128, +129, +132, +133, +131, +128, +125, +118, +113, +116, +120, +123, +125, +135, +143, +143, +137, +130, +126, +123, +118, +120, +122, +128, +133, +126, +117, +111, +114, +117, +123, +127, +130, +130, +130, +131, +127, +123, +123, +125, +128, +132, +134, +132, +127, +121, +130, +140, +138, +128, +124, +127, +129, +128, +132, +134, +131, +130, +128, +126, +128, +133, +135, +133, +134, +134, +131, +128, +127, +125, +126, +129, +131, +133, +132, +129, +126, +124, +121, +120, +125, +128, +123, +114, +111, +111, +114, +115, +116, +121, +123, +125, +125, +125, +123, +123, +123, +126, +126, +130, +140, +143, +136, +130, +132, +134, +130, +125, +127, +130, +133, +134, +137, +135, +134, +132, +133, +131, +126, +124, +132, +140, +142, +139, +136, +134, +130, +127, +129, +131, +130, +133, +133, +132, +131, +129, +123, +121, +125, +126, +118, +111, +111, +116, +120, +121, +123, +125, +125, +125, +124, +124, +123, +125, +128, +130, +130, +133, +134, +131, +132, +131, +132, +131, +133, +132, +130, +128, +129, +129, +128, +128, +129, +133, +134, +134, +129, +123, +125, +134, +142, +143, +140, +136, +133, +130, +128, +128, +126, +126, +126, +129, +130, +131, +124, +119, +122, +125, +120, +111, +104, +107, +114, +118, +123, +121, +121, +120, +119, +118, +117, +119, +120, +124, +127, +128, +128, +127, +128, +126, +126, +125, +126, +127, +130, +128, +125, +121, +124, +127, +128, +127, +129, +130, +129, +129, +130, +123, +119, +126, +137, +140, +138, +134, +132, +130, +126, +127, +127, +127, +128, +130, +129, +129, +127, +127, +129, +125, +116, +109, +108, +114, +118, +121, +123, +123, +121, +122, +122, +121, +118, +118, +121, +126, +129, +130, +131, +129, +127, +128, +131, +135, +135, +133, +132, +131, +130, +130, +126, +126, +130, +133, +134, +135, +134, +130, +125, +124, +130, +138, +143, +141, +138, +135, +133, +132, +132, +130, +132, +132, +132, +132, +129, +126, +122, +123, +128, +127, +117, +112, +112, +115, +116, +118, +122, +122, +122, +121, +121, +122, +122, +124, +125, +127, +132, +132, +128, +127, +127, +133, +132, +127, +131, +136, +138, +128, +125, +125, +122, +125, +129, +132, +131, +129, +131, +132, +127, +129, +134, +139, +141, +138, +136, +133, +129, +127, +129, +129, +131, +130, +130, +128, +125, +121, +119, +122, +126, +118, +113, +110, +114, +119, +120, +122, +122, +123, +121, +123, +121, +119, +119, +120, +126, +129, +132, +130, +129, +134, +135, +128, +127, +135, +140, +135, +129, +128, +130, +130, +127, +130, +131, +131, +130, +133, +131, +125, +125, +130, +138, +143, +141, +135, +127, +125, +125, +126, +126, +130, +126, +131, +132, +131, +128, +122, +123, +124, +127, +120, +112, +108, +112, +117, +120, +124, +123, +120, +122, +121, +121, +123, +123, +124, +128, +131, +134, +134, +135, +133, +129, +132, +132, +129, +134, +137, +136, +133, +132, +129, +131, +132, +131, +130, +128, +131, +126, +124, +127, +135, +140, +139, +135, +134, +131, +130, +130, +131, +129, +129, +129, +129, +128, +125, +123, +120, +122, +127, +123, +114, +109, +111, +114, +118, +120, +125, +125, +124, +124, +124, +121, +117, +120, +124, +128, +130, +133, +129, +129, +130, +130, +129, +127, +129, +132, +131, +127, +127, +128, +125, +125, +128, +131, +132, +133, +133, +126, +127, +135, +141, +139, +132, +131, +130, +129, +131, +129, +131, +129, +128, +128, +128, +127, +120, +120, +121, +127, +130, +122, +111, +108, +111, +116, +116, +122, +125, +122, +123, +123, +125, +122, +121, +122, +122, +128, +131, +130, +130, +130, +131, +126, +127, +136, +140, +137, +126, +124, +125, +126, +126, +129, +132, +131, +133, +135, +129, +126, +130, +139, +142, +134, +130, +131, +134, +133, +130, +131, +130, +129, +131, +132, +130, +125, +124, +124, +125, +130, +126, +116, +106, +106, +111, +116, +120, +121, +122, +121, +124, +123, +121, +120, +122, +124, +130, +134, +134, +134, +131, +128, +125, +126, +135, +142, +135, +128, +125, +127, +126, +125, +130, +130, +133, +133, +134, +130, +123, +125, +137, +139, +131, +128, +137, +141, +138, +135, +132, +133, +127, +127, +132, +131, +127, +125, +123, +123, +124, +127, +121, +111, +106, +106, +112, +115, +121, +125, +126, +123, +122, +122, +120, +117, +119, +122, +126, +131, +133, +130, +127, +126, +127, +132, +136, +133, +128, +125, +127, +127, +127, +131, +131, +132, +133, +133, +131, +128, +128, +129, +130, +127, +130, +138, +143, +140, +138, +133, +129, +126, +126, +127, +129, +129, +129, +129, +127, +127, +126, +126, +119, +111, +108, +111, +115, +118, +121, +124, +123, +122, +121, +121, +121, +121, +122, +127, +130, +131, +130, +130, +126, +127, +133, +143, +140, +128, +125, +126, +128, +127, +128, +130, +131, +132, +133, +134, +133, +128, +126, +127, +127, +132, +136, +140, +140, +138, +138, +134, +132, +128, +128, +131, +129, +127, +128, +128, +126, +123, +126, +123, +117, +110, +108, +113, +117, +120, +122, +124, +123, +121, +121, +122, +122, +124, +124, +127, +130, +132, +129, +126, +125, +134, +143, +138, +131, +125, +126, +126, +125, +128, +127, +128, +128, +132, +132, +130, +129, +127, +129, +129, +128, +128, +134, +139, +139, +136, +133, +128, +127, +128, +129, +128, +128, +129, +128, +127, +124, +125, +127, +120, +114, +111, +113, +116, +119, +121, +123, +123, +124, +124, +123, +120, +121, +122, +125, +130, +130, +129, +123, +125, +131, +133, +130, +127, +123, +125, +130, +132, +133, +130, +128, +128, +130, +129, +127, +127, +126, +129, +131, +130, +130, +130, +138, +141, +140, +139, +133, +130, +130, +130, +130, +130, +134, +133, +132, +129, +128, +127, +126, +119, +112, +111, +116, +119, +122, +122, +125, +125, +121, +118, +118, +117, +118, +122, +124, +128, +129, +129, +128, +130, +133, +130, +127, +126, +126, +127, +130, +130, +129, +128, +128, +129, +130, +129, +129, +131, +129, +133, +133, +129, +128, +133, +140, +143, +140, +138, +134, +130, +129, +129, +131, +129, +129, +130, +132, +129, +126, +127, +125, +118, +109, +106, +111, +117, +121, +122, +125, +124, +124, +122, +121, +119, +120, +124, +125, +127, +128, +128, +129, +133, +133, +129, +126, +127, +133, +137, +133, +127, +124, +124, +125, +130, +132, +132, +129, +131, +131, +132, +129, +126, +127, +134, +143, +144, +138, +135, +131, +130, +126, +128, +127, +125, +128, +127, +129, +126, +124, +128, +126, +118, +111, +110, +112, +118, +122, +123, +122, +122, +122, +122, +119, +120, +120, +122, +128, +130, +130, +129, +129, +128, +124, +124, +128, +135, +139, +136, +127, +122, +122, +124, +125, +129, +131, +131, +132, +130, +131, +128, +123, +121, +127, +136, +141, +138, +136, +132, +130, +129, +132, +131, +130, +130, +130, +131, +128, +125, +122, +125, +123, +116, +111, +112, +112, +116, +120, +124, +125, +123, +122, +121, +121, +119, +121, +124, +127, +132, +132, +131, +130, +125, +123, +124, +135, +144, +140, +131, +122, +123, +123, +123, +125, +129, +130, +134, +133, +132, +129, +125, +122, +127, +136, +144, +143, +139, +135, +131, +127, +124, +127, +127, +129, +132, +133, +130, +126, +122, +125, +125, +123, +114, +110, +113, +116, +120, +124, +127, +126, +123, +123, +123, +121, +120, +122, +125, +130, +135, +135, +134, +130, +123, +121, +131, +141, +140, +129, +121, +119, +124, +125, +126, +129, +130, +130, +132, +133, +128, +123, +118, +121, +129, +138, +143, +141, +134, +131, +130, +125, +125, +126, +127, +130, +133, +132, +130, +125, +123, +126, +128, +121, +114, +113, +114, +119, +124, +126, +126, +125, +125, +124, +124, +123, +121, +123, +125, +130, +132, +132, +129, +124, +124, +132, +141, +140, +127, +120, +120, +123, +125, +125, +129, +129, +131, +132, +132, +128, +125, +123, +123, +129, +137, +142, +141, +137, +135, +133, +130, +129, +129, +130, +130, +132, +133, +132, +129, +125, +126, +128, +125, +117, +110, +111, +115, +120, +120, +124, +124, +125, +124, +125, +123, +122, +121, +124, +128, +131, +132, +129, +124, +124, +129, +139, +141, +130, +121, +120, +122, +123, +127, +130, +132, +130, +132, +133, +130, +125, +123, +125, +128, +136, +141, +142, +138, +133, +131, +127, +126, +127, +129, +131, +133, +132, +130, +126, +123, +122, +124, +128, +125, +116, +110, +112, +116, +121, +123, +125, +125, +124, +124, +124, +123, +121, +121, +125, +133, +134, +130, +127, +123, +127, +136, +139, +133, +124, +124, +126, +126, +126, +129, +130, +131, +132, +133, +132, +129, +125, +125, +127, +131, +137, +141, +137, +135, +132, +130, +127, +126, +127, +129, +130, +132, +130, +128, +128, +123, +124, +128, +129, +119, +112, +111, +114, +117, +119, +123, +126, +127, +127, +126, +125, +121, +119, +122, +126, +131, +131, +129, +126, +128, +132, +132, +130, +124, +124, +126, +130, +130, +130, +130, +128, +127, +127, +128, +127, +126, +126, +127, +128, +132, +135, +138, +136, +136, +134, +132, +130, +129, +131, +131, +132, +132, +129, +128, +126, +123, +125, +127, +125, +114, +109, +111, +115, +119, +126, +130, +128, +126, +126, +124, +121, +120, +121, +124, +130, +133, +132, +130, +128, +130, +131, +129, +127, +126, +126, +127, +130, +131, +131, +129, +127, +129, +131, +130, +129, +129, +128, +128, +129, +132, +134, +135, +134, +134, +133, +131, +128, +127, +129, +127, +129, +129, +128, +125, +124, +125, +129, +127, +118, +109, +109, +113, +117, +121, +126, +127, +126, +124, +123, +123, +121, +122, +123, +128, +132, +131, +129, +125, +127, +133, +134, +131, +125, +123, +126, +127, +129, +128, +127, +127, +128, +130, +130, +128, +126, +125, +128, +130, +129, +131, +135, +137, +136, +135, +134, +129, +128, +128, +130, +129, +129, +130, +130, +128, +127, +128, +129, +123, +113, +109, +112, +117, +121, +126, +127, +127, +125, +123, +122, +119, +119, +121, +126, +129, +131, +131, +130, +130, +129, +129, +128, +126, +125, +128, +130, +130, +129, +129, +128, +129, +128, +129, +128, +128, +127, +129, +129, +128, +130, +135, +140, +140, +138, +136, +134, +131, +129, +131, +131, +131, +132, +130, +130, +127, +123, +126, +124, +117, +108, +110, +115, +119, +123, +127, +127, +123, +122, +120, +120, +121, +121, +125, +128, +131, +132, +128, +126, +127, +127, +127, +127, +127, +128, +131, +132, +130, +130, +128, +126, +127, +130, +131, +131, +129, +129, +129, +129, +128, +133, +138, +139, +137, +134, +133, +130, +127, +126, +127, +128, +129, +129, +129, +127, +125, +126, +127, +123, +113, +109, +111, +115, +120, +126, +129, +129, +125, +124, +122, +121, +120, +123, +128, +129, +129, +129, +127, +126, +128, +127, +127, +127, +127, +129, +128, +129, +130, +130, +130, +131, +131, +131, +129, +130, +128, +125, +124, +123, +127, +134, +139, +138, +136, +134, +130, +127, +125, +128, +128, +128, +128, +129, +130, +128, +127, +128, +129, +121, +113, +108, +111, +117, +124, +129, +128, +125, +123, +122, +119, +118, +119, +122, +126, +130, +133, +132, +128, +128, +127, +125, +126, +128, +132, +134, +133, +128, +127, +126, +126, +127, +130, +132, +131, +131, +130, +129, +127, +129, +134, +140, +140, +138, +136, +133, +132, +131, +130, +130, +130, +131, +132, +130, +128, +126, +126, +127, +123, +115, +110, +111, +117, +121, +124, +126, +125, +124, +124, +125, +122, +122, +123, +125, +130, +131, +132, +130, +127, +125, +126, +126, +128, +130, +133, +133, +132, +130, +130, +129, +127, +128, +130, +130, +130, +129, +130, +128, +126, +128, +135, +140, +139, +135, +136, +132, +129, +126, +126, +126, +128, +129, +130, +130, +127, +124, +126, +125, +117, +112, +111, +116, +119, +123, +127, +126, +123, +121, +122, +121, +120, +121, +124, +127, +130, +130, +127, +126, +126, +126, +126, +127, +128, +128, +129, +131, +132, +130, +129, +129, +128, +130, +130, +130, +130, +130, +130, +125, +126, +131, +137, +138, +136, +135, +133, +129, +129, +128, +129, +128, +130, +133, +132, +130, +127, +127, +126, +120, +112, +109, +113, +118, +123, +125, +127, +125, +122, +121, +121, +120, +120, +121, +124, +126, +129, +131, +130, +128, +126, +125, +125, +126, +128, +130, +132, +132, +130, +128, +125, +126, +126, +127, +129, +130, +130, +129, +127, +126, +130, +138, +142, +140, +136, +134, +131, +129, +126, +127, +127, +129, +132, +130, +127, +126, +128, +124, +116, +110, +110, +115, +120, +124, +126, +126, +123, +123, +124, +122, +121, +121, +124, +128, +130, +130, +130, +132, +136, +137, +128, +119, +116, +120, +125, +130, +135, +135, +132, +126, +125, +125, +124, +124, +127, +130, +133, +132, +126, +122, +125, +133, +138, +138, +137, +135, +132, +129, +128, +127, +125, +127, +130, +136, +133, +122, +110, +109, +115, +119, +125, +128, +130, +129, +127, +125, +120, +120, +126, +135, +140, +140, +136, +130, +125, +124, +123, +125, +129, +131, +125, +119, +117, +118, +120, +123, +127, +129, +127, +124, +122, +121, +121, +122, +124, +126, +130, +130, +128, +130, +138, +141, +140, +137, +135, +132, +131, +133, +132, +129, +132, +136, +134, +123, +116, +115, +116, +119, +124, +129, +128, +129, +129, +127, +125, +128, +132, +136, +138, +138, +134, +130, +129, +128, +128, +128, +130, +132, +129, +119, +113, +112, +114, +117, +121, +126, +126, +125, +125, +122, +119, +121, +127, +132, +136, +138, +137, +137, +135, +133, +131, +130, +131, +132, +127, +122, +119, +121, +121, +123, +125, +127, +127, +127, +125, +123, +123, +125, +128, +133, +134, +135, +134, +130, +129, +128, +128, +125, +121, +121, +122, +123, +125, +129, +131, +133, +132, +127, +119, +114, +115, +118, +124, +130, +135, +136, +135, +132, +127, +125, +124, +124, +124, +123, +126, +127, +128, +129, +130, +129, +128, +124, +118, +116, +114, +117, +122, +128, +135, +136, +137, +135, +133, +128, +124, +121, +122, +126, +131, +132, +133, +132, +132, +131, +131, +126, +121, +119, +119, +121, +123, +128, +133, +133, +133, +129, +128, +125, +121, +118, +121, +129, +136, +141, +140, +137, +132, +129, +126, +121, +116, +118, +120, +123, +125, +128, +130, +129, +128, +126, +122, +120, +119, +122, +124, +128, +133, +137, +139, +138, +136, +131, +125, +122, +121, +122, +127, +132, +136, +136, +135, +132, +129, +126, +123, +120, +119, +121, +124, +128, +133, +135, +136, +133, +128, +123, +119, +115, +116, +121, +127, +133, +136, +135, +132, +129, +127, +123, +119, +118, +120, +124, +129, +133, +133, +135, +135, +133, +129, +124, +120, +120, +121, +125, +131, +137, +137, +134, +133, +130, +126, +121, +119, +119, +122, +126, +131, +136, +137, +134, +133, +130, +127, +122, +120, +120, +122, +124, +129, +133, +136, +135, +133, +128, +122, +115, +114, +117, +123, +129, +134, +136, +137, +134, +130, +126, +121, +119, +119, +121, +123, +125, +127, +131, +134, +134, +133, +130, +128, +125, +124, +124, +124, +127, +127, +128, +128, +129, +126, +120, +117, +117, +119, +122, +125, +127, +128, +130, +133, +134, +131, +128, +126, +125, +125, +125, +127, +130, +132, +135, +137, +132, +124, +117, +116, +118, +122, +126, +128, +131, +132, +134, +132, +130, +127, +125, +123, +124, +124, +125, +125, +128, +131, +133, +133, +132, +131, +129, +125, +123, +122, +125, +130, +134, +136, +135, +132, +125, +118, +114, +114, +119, +124, +129, +128, +129, +135, +140, +139, +135, +130, +128, +128, +128, +131, +129, +129, +134, +133, +125, +116, +112, +112, +116, +121, +126, +127, +125, +125, +124, +123, +121, +122, +126, +131, +134, +134, +134, +138, +141, +136, +125, +120, +121, +125, +128, +131, +132, +131, +129, +130, +125, +119, +120, +127, +133, +134, +135, +133, +129, +126, +128, +131, +128, +125, +125, +131, +135, +135, +130, +126, +123, +122, +123, +124, +124, +120, +122, +125, +121, +111, +104, +104, +109, +116, +121, +126, +127, +126, +126, +125, +125, +126, +124, +126, +131, +139, +144, +144, +133, +120, +112, +114, +119, +126, +130, +135, +137, +135, +132, +127, +121, +118, +126, +139, +145, +145, +140, +136, +131, +127, +126, +126, +128, +131, +135, +137, +136, +134, +130, +128, +127, +127, +126, +125, +124, +123, +120, +124, +127, +122, +113, +108, +111, +114, +119, +125, +127, +127, +128, +130, +129, +122, +118, +123, +132, +141, +146, +140, +127, +115, +115, +121, +127, +132, +137, +139, +140, +137, +133, +125, +118, +117, +127, +141, +149, +148, +141, +135, +130, +127, +127, +128, +131, +134, +138, +139, +137, +130, +125, +125, +127, +129, +128, +125, +121, +120, +119, +120, +119, +120, +121, +120, +113, +107, +108, +111, +116, +121, +125, +127, +128, +123, +120, +121, +131, +139, +135, +128, +121, +120, +119, +121, +126, +130, +131, +134, +135, +134, +127, +123, +121, +123, +128, +131, +133, +134, +133, +132, +129, +129, +134, +139, +143, +143, +141, +137, +131, +127, +126, +129, +133, +130, +123, +120, +124, +127, +127, +124, +124, +122, +121, +122, +124, +123, +122, +120, +121, +125, +129, +121, +110, +106, +110, +116, +122, +126, +129, +129, +126, +123, +125, +131, +136, +130, +122, +118, +120, +124, +126, +127, +129, +130, +131, +132, +134, +131, +126, +126, +128, +132, +134, +133, +132, +132, +132, +130, +131, +136, +141, +141, +140, +138, +133, +127, +126, +128, +132, +129, +123, +118, +122, +127, +129, +128, +128, +127, +125, +123, +123, +123, +122, +123, +124, +126, +128, +128, +119, +111, +109, +113, +119, +122, +126, +130, +129, +126, +126, +131, +137, +135, +127, +121, +122, +123, +123, +125, +126, +128, +129, +131, +132, +130, +128, +128, +129, +132, +133, +135, +134, +133, +131, +129, +127, +129, +132, +138, +140, +139, +132, +126, +123, +125, +129, +129, +126, +121, +122, +130, +137, +137, +133, +129, +128, +126, +126, +124, +122, +121, +123, +126, +126, +127, +124, +118, +110, +110, +113, +118, +121, +126, +129, +128, +128, +131, +136, +138, +135, +127, +121, +121, +122, +120, +119, +121, +127, +130, +132, +132, +127, +125, +124, +125, +127, +127, +128, +131, +133, +135, +131, +128, +127, +133, +139, +141, +138, +134, +132, +130, +131, +132, +129, +123, +122, +124, +130, +135, +137, +135, +130, +126, +123, +121, +120, +122, +124, +127, +128, +127, +126, +125, +118, +111, +108, +112, +118, +123, +127, +129, +127, +125, +128, +134, +132, +124, +121, +128, +131, +125, +118, +118, +120, +123, +128, +130, +129, +126, +125, +127, +129, +128, +129, +130, +130, +131, +132, +129, +129, +133, +139, +143, +140, +137, +135, +133, +134, +132, +129, +126, +123, +123, +128, +133, +137, +135, +131, +128, +125, +123, +119, +119, +120, +123, +125, +126, +127, +125, +125, +123, +119, +113, +112, +115, +120, +125, +127, +128, +130, +134, +133, +129, +125, +129, +129, +124, +113, +108, +109, +115, +122, +128, +130, +129, +126, +127, +127, +127, +125, +127, +131, +134, +136, +136, +133, +131, +129, +132, +136, +138, +137, +135, +134, +132, +131, +130, +131, +129, +126, +127, +131, +135, +134, +131, +128, +127, +126, +125, +124, +124, +123, +124, +126, +126, +125, +123, +123, +120, +113, +110, +111, +116, +121, +126, +131, +131, +126, +121, +121, +125, +133, +136, +129, +119, +115, +117, +120, +124, +127, +130, +131, +133, +135, +134, +129, +128, +129, +133, +136, +138, +136, +134, +133, +135, +139, +140, +137, +136, +137, +140, +136, +127, +121, +123, +127, +130, +133, +136, +137, +136, +135, +134, +128, +124, +121, +123, +126, +128, +128, +125, +124, +122, +125, +125, +120, +110, +106, +107, +113, +118, +123, +126, +128, +126, +124, +122, +126, +132, +131, +125, +119, +119, +122, +126, +127, +129, +129, +131, +132, +132, +128, +124, +123, +124, +129, +130, +131, +130, +129, +131, +130, +129, +129, +131, +136, +139, +142, +141, +136, +130, +126, +128, +128, +129, +130, +133, +137, +134, +129, +124, +120, +120, +119, +120, +120, +121, +120, +118, +117, +121, +123, +119, +111, +108, +111, +117, +121, +126, +129, +129, +127, +130, +134, +139, +139, +130, +119, +115, +116, +119, +121, +126, +129, +131, +132, +133, +132, +128, +126, +128, +131, +134, +134, +133, +134, +135, +135, +135, +137, +138, +139, +138, +139, +136, +133, +131, +129, +127, +125, +124, +125, +130, +135, +137, +135, +131, +126, +123, +122, +122, +121, +122, +123, +125, +125, +122, +121, +122, +120, +112, +110, +113, +120, +123, +127, +130, +128, +126, +128, +134, +136, +132, +123, +113, +112, +115, +121, +125, +128, +130, +131, +131, +128, +126, +124, +125, +127, +131, +132, +133, +132, +132, +133, +133, +131, +129, +132, +137, +140, +138, +134, +131, +128, +126, +123, +120, +120, +123, +131, +135, +135, +132, +129, +126, +124, +123, +123, +123, +124, +125, +128, +128, +125, +124, +123, +118, +110, +108, +112, +115, +119, +122, +126, +125, +123, +125, +131, +135, +130, +123, +118, +118, +119, +122, +125, +129, +131, +133, +134, +134, +130, +126, +126, +128, +131, +134, +134, +132, +132, +132, +130, +129, +130, +135, +138, +139, +137, +135, +132, +130, +127, +126, +124, +127, +131, +135, +134, +130, +129, +129, +129, +128, +126, +124, +122, +123, +124, +124, +120, +119, +122, +126, +122, +114, +111, +112, +117, +123, +128, +129, +126, +128, +133, +138, +136, +131, +124, +119, +117, +119, +120, +122, +125, +130, +133, +135, +134, +130, +128, +127, +129, +130, +133, +133, +133, +131, +130, +129, +128, +128, +131, +135, +137, +136, +136, +135, +129, +123, +118, +120, +130, +141, +141, +134, +129, +129, +132, +131, +128, +125, +124, +124, +127, +126, +124, +121, +120, +123, +127, +124, +116, +108, +109, +115, +122, +127, +128, +128, +130, +134, +135, +132, +125, +120, +119, +118, +120, +121, +121, +123, +126, +128, +128, +127, +123, +122, +123, +125, +127, +128, +129, +131, +134, +135, +133, +131, +130, +132, +136, +139, +139, +140, +137, +129, +121, +120, +127, +134, +133, +126, +121, +123, +131, +134, +133, +129, +127, +126, +126, +126, +123, +120, +119, +123, +128, +131, +126, +117, +111, +112, +116, +119, +121, +123, +126, +131, +135, +133, +128, +122, +121, +122, +120, +119, +116, +117, +120, +126, +130, +132, +130, +129, +129, +128, +129, +129, +129, +130, +130, +134, +136, +134, +131, +130, +134, +138, +141, +140, +138, +132, +125, +123, +128, +136, +136, +131, +124, +123, +129, +137, +136, +131, +127, +128, +129, +128, +126, +123, +121, +123, +126, +129, +132, +126, +118, +112, +114, +117, +119, +122, +126, +129, +131, +132, +129, +125, +124, +126, +124, +118, +115, +115, +118, +123, +128, +132, +132, +131, +131, +131, +130, +131, +130, +131, +132, +133, +134, +133, +129, +127, +128, +133, +137, +138, +137, +133, +127, +124, +126, +133, +135, +132, +126, +122, +125, +133, +139, +138, +134, +131, +130, +127, +125, +122, +121, +122, +126, +128, +128, +127, +122, +114, +108, +108, +111, +114, +118, +125, +129, +131, +131, +130, +128, +128, +128, +122, +116, +113, +114, +120, +126, +130, +131, +130, +127, +127, +125, +124, +123, +124, +126, +131, +134, +136, +134, +131, +128, +130, +135, +139, +140, +136, +130, +127, +129, +134, +137, +134, +126, +121, +119, +125, +134, +137, +136, +133, +132, +132, +128, +122, +119, +119, +123, +127, +129, +126, +123, +121, +114, +108, +109, +112, +117, +121, +126, +129, +128, +125, +125, +127, +129, +131, +126, +120, +116, +118, +121, +123, +125, +129, +130, +131, +131, +130, +128, +127, +128, +131, +134, +133, +133, +131, +129, +129, +134, +139, +143, +141, +135, +131, +130, +133, +136, +133, +129, +124, +121, +123, +130, +137, +139, +135, +133, +129, +126, +121, +117, +115, +117, +122, +124, +125, +125, +128, +125, +116, +110, +110, +113, +119, +126, +132, +132, +130, +130, +131, +131, +131, +126, +119, +112, +112, +116, +120, +124, +128, +132, +134, +134, +132, +128, +125, +125, +128, +132, +134, +135, +134, +133, +131, +131, +134, +137, +136, +132, +130, +130, +133, +135, +136, +130, +124, +120, +121, +126, +132, +139, +139, +135, +132, +129, +125, +121, +120, +121, +125, +127, +129, +127, +124, +125, +123, +116, +110, +111, +116, +120, +127, +129, +129, +127, +127, +130, +132, +133, +128, +120, +113, +114, +117, +121, +124, +129, +130, +131, +130, +128, +126, +124, +126, +129, +131, +132, +134, +134, +133, +132, +133, +137, +138, +135, +133, +132, +134, +135, +136, +132, +125, +121, +121, +123, +124, +130, +135, +137, +135, +133, +129, +125, +121, +119, +121, +124, +126, +127, +126, +126, +127, +124, +115, +109, +109, +114, +120, +123, +126, +125, +127, +129, +132, +130, +129, +124, +118, +114, +114, +117, +121, +125, +130, +133, +134, +134, +133, +129, +126, +127, +129, +131, +132, +134, +134, +133, +130, +131, +132, +133, +132, +133, +135, +136, +138, +135, +128, +122, +121, +124, +125, +127, +131, +136, +138, +137, +132, +127, +123, +120, +121, +123, +125, +126, +125, +125, +124, +126, +125, +118, +111, +112, +116, +121, +124, +126, +125, +126, +129, +132, +131, +129, +124, +118, +115, +116, +119, +121, +125, +130, +134, +136, +134, +132, +128, +126, +129, +131, +132, +132, +133, +133, +133, +134, +133, +131, +129, +128, +129, +132, +133, +135, +133, +126, +120, +120, +123, +124, +124, +130, +138, +142, +140, +135, +129, +125, +122, +122, +123, +124, +127, +128, +126, +125, +125, +123, +117, +110, +110, +115, +120, +124, +124, +126, +129, +134, +135, +133, +131, +125, +119, +115, +116, +120, +122, +125, +129, +134, +134, +133, +130, +127, +126, +128, +129, +130, +129, +130, +131, +132, +132, +132, +129, +128, +129, +132, +137, +138, +137, +133, +128, +122, +122, +123, +125, +126, +133, +139, +143, +140, +135, +130, +126, +124, +124, +124, +126, +128, +129, +129, +126, +126, +124, +118, +111, +109, +113, +118, +122, +123, +125, +126, +129, +130, +131, +129, +125, +117, +114, +115, +119, +122, +125, +130, +133, +134, +131, +129, +126, +126, +126, +126, +127, +127, +129, +129, +131, +132, +130, +126, +128, +132, +134, +137, +136, +135, +132, +128, +124, +122, +123, +124, +126, +130, +137, +141, +139, +133, +128, +123, +120, +119, +121, +122, +124, +126, +128, +125, +125, +123, +118, +110, +109, +113, +118, +122, +124, +127, +130, +133, +133, +133, +128, +123, +116, +114, +115, +117, +121, +124, +129, +133, +134, +132, +130, +128, +128, +130, +130, +130, +129, +131, +132, +134, +134, +132, +129, +130, +132, +135, +135, +134, +133, +132, +129, +126, +124, +126, +127, +127, +132, +140, +143, +141, +136, +133, +128, +124, +123, +125, +126, +128, +129, +129, +127, +125, +125, +121, +114, +110, +112, +117, +122, +124, +126, +128, +132, +134, +133, +127, +118, +113, +112, +116, +120, +124, +127, +130, +132, +131, +129, +126, +126, +126, +129, +131, +132, +131, +131, +132, +132, +133, +131, +129, +130, +134, +137, +135, +133, +134, +132, +129, +125, +124, +125, +126, +128, +132, +136, +139, +137, +135, +132, +128, +124, +123, +124, +125, +126, +127, +127, +124, +124, +125, +122, +113, +108, +109, +114, +118, +119, +122, +127, +131, +134, +132, +127, +120, +113, +112, +115, +120, +124, +128, +131, +133, +133, +131, +129, +127, +128, +128, +129, +129, +130, +130, +131, +132, +132, +131, +128, +128, +133, +137, +137, +136, +135, +135, +129, +124, +123, +126, +127, +129, +134, +140, +142, +139, +134, +128, +124, +121, +122, +124, +125, +126, +126, +126, +123, +122, +124, +120, +115, +110, +112, +117, +121, +123, +126, +130, +134, +134, +132, +127, +122, +116, +114, +115, +118, +122, +125, +130, +133, +132, +132, +130, +129, +128, +128, +129, +131, +133, +134, +135, +134, +134, +132, +130, +131, +133, +133, +133, +135, +136, +135, +128, +122, +121, +123, +126, +128, +131, +137, +140, +139, +134, +129, +123, +121, +121, +123, +127, +129, +130, +127, +124, +122, +123, +121, +116, +111, +113, +118, +121, +122, +124, +130, +133, +133, +130, +126, +124, +121, +117, +115, +116, +120, +124, +128, +131, +132, +130, +129, +129, +128, +128, +128, +129, +129, +131, +133, +132, +132, +130, +128, +129, +131, +133, +133, +135, +135, +131, +125, +121, +123, +125, +127, +128, +131, +136, +140, +140, +136, +130, +125, +124, +124, +126, +127, +129, +129, +129, +126, +123, +123, +123, +118, +112, +111, +115, +118, +121, +125, +129, +130, +129, +126, +126, +125, +120, +117, +116, +118, +122, +125, +129, +131, +132, +132, +131, +130, +128, +127, +127, +128, +129, +131, +131, +132, +132, +131, +129, +129, +129, +131, +132, +133, +134, +131, +125, +121, +122, +125, +129, +131, +132, +135, +138, +139, +135, +129, +125, +124, +124, +125, +126, +125, +125, +125, +124, +124, +124, +124, +118, +112, +111, +114, +118, +121, +128, +132, +134, +132, +131, +129, +126, +123, +117, +115, +117, +122, +125, +129, +132, +133, +132, +131, +129, +128, +126, +126, +128, +130, +129, +129, +129, +130, +129, +127, +127, +128, +132, +134, +137, +136, +131, +123, +120, +122, +126, +130, +131, +134, +137, +140, +139, +135, +129, +126, +125, +126, +127, +127, +127, +126, +126, +126, +125, +127, +127, +123, +115, +113, +115, +118, +120, +125, +129, +133, +133, +133, +131, +127, +120, +113, +110, +114, +119, +124, +127, +131, +132, +129, +127, +124, +124, +123, +125, +128, +129, +130, +130, +131, +131, +130, +128, +128, +130, +134, +136, +136, +135, +129, +122, +120, +122, +126, +130, +133, +134, +134, +137, +139, +136, +131, +128, +127, +128, +129, +130, +129, +127, +127, +126, +125, +126, +127, +122, +116, +112, +115, +117, +120, +121, +126, +129, +131, +130, +130, +126, +119, +110, +109, +112, +118, +123, +128, +132, +133, +132, +130, +127, +125, +125, +126, +129, +131, +131, +132, +132, +132, +130, +128, +127, +130, +134, +137, +138, +134, +127, +122, +121, +124, +128, +131, +134, +134, +136, +139, +140, +137, +132, +129, +128, +128, +128, +127, +127, +126, +126, +126, +125, +125, +126, +121, +115, +111, +112, +115, +118, +121, +124, +126, +129, +131, +130, +126, +119, +114, +112, +116, +120, +125, +128, +131, +133, +134, +133, +129, +128, +126, +128, +129, +131, +131, +131, +132, +132, +131, +128, +127, +129, +133, +136, +136, +132, +128, +123, +122, +124, +128, +130, +133, +134, +135, +137, +139, +136, +132, +129, +128, +128, +127, +126, +126, +126, +125, +125, +125, +127, +124, +116, +110, +110, +114, +117, +121, +125, +131, +134, +134, +133, +129, +124, +119, +116, +116, +118, +121, +123, +126, +129, +131, +131, +129, +129, +127, +128, +128, +128, +127, +128, +129, +129, +131, +130, +130, +129, +129, +133, +136, +136, +134, +130, +126, +124, +126, +129, +132, +133, +133, +135, +139, +139, +137, +131, +128, +127, +127, +126, +126, +125, +125, +126, +126, +127, +126, +125, +124, +119, +114, +111, +114, +115, +118, +125, +133, +136, +134, +129, +124, +118, +112, +113, +115, +120, +125, +128, +130, +130, +129, +128, +127, +127, +128, +129, +131, +131, +131, +132, +132, +133, +130, +127, +129, +137, +142, +140, +137, +133, +130, +128, +133, +134, +128, +121, +123, +130, +132, +129, +121, +117, +120, +129, +136, +136, +132, +128, +126, +125, +125, +122, +120, +121, +127, +130, +125, +117, +115, +118, +124, +130, +133, +131, +127, +126, +123, +121, +118, +118, +117, +117, +117, +118, +120, +121, +125, +128, +132, +132, +132, +129, +128, +127, +128, +129, +131, +132, +131, +131, +130, +128, +127, +129, +134, +139, +138, +132, +124, +119, +119, +123, +128, +132, +132, +135, +138, +141, +137, +131, +127, +126, +127, +129, +131, +130, +129, +127, +126, +125, +125, +126, +124, +117, +113, +113, +115, +116, +121, +129, +133, +131, +127, +126, +124, +120, +118, +121, +126, +130, +131, +127, +123, +121, +122, +125, +128, +131, +131, +131, +129, +129, +127, +127, +128, +130, +132, +131, +129, +128, +131, +135, +134, +128, +123, +120, +122, +125, +129, +131, +132, +131, +130, +134, +138, +136, +131, +127, +126, +125, +125, +125, +126, +127, +127, +127, +127, +125, +126, +127, +123, +117, +114, +116, +118, +121, +126, +133, +135, +132, +125, +119, +116, +120, +125, +126, +125, +124, +124, +124, +125, +125, +126, +127, +129, +130, +130, +129, +126, +124, +125, +127, +130, +131, +131, +130, +131, +134, +135, +136, +134, +130, +123, +122, +125, +128, +130, +132, +133, +133, +134, +139, +139, +135, +131, +128, +128, +127, +128, +127, +126, +126, +127, +129, +128, +127, +128, +126, +121, +114, +112, +116, +123, +132, +137, +135, +131, +126, +124, +121, +119, +117, +117, +119, +125, +128, +126, +124, +123, +124, +126, +128, +128, +128, +127, +127, +127, +128, +128, +128, +129, +129, +129, +131, +134, +136, +135, +132, +130, +125, +123, +123, +127, +130, +133, +133, +132, +134, +136, +138, +135, +133, +131, +131, +130, +129, +128, +127, +125, +125, +126, +125, +125, +126, +124, +120, +116, +113, +114, +118, +126, +133, +135, +131, +125, +122, +118, +117, +117, +119, +121, +124, +126, +127, +127, +125, +126, +126, +128, +129, +128, +128, +127, +127, +127, +127, +126, +127, +128, +128, +128, +131, +134, +136, +136, +131, +124, +121, +122, +126, +129, +134, +136, +137, +137, +141, +141, +137, +132, +129, +129, +129, +130, +130, +129, +127, +127, +126, +125, +124, +126, +125, +119, +114, +111, +115, +119, +122, +124, +126, +127, +126, +127, +125, +122, +118, +120, +122, +125, +125, +123, +123, +125, +126, +127, +127, +127, +126, +126, +127, +127, +127, +127, +128, +129, +129, +128, +130, +133, +135, +134, +134, +132, +128, +124, +124, +127, +130, +133, +136, +136, +136, +138, +139, +138, +134, +131, +129, +128, +128, +128, +127, +126, +127, +128, +126, +124, +124, +123, +118, +115, +114, +116, +118, +123, +129, +131, +130, +128, +124, +123, +122, +122, +122, +122, +122, +122, +122, +124, +127, +129, +130, +129, +130, +127, +127, +126, +126, +126, +128, +130, +132, +132, +130, +129, +131, +133, +136, +136, +133, +127, +123, +123, +126, +129, +133, +135, +136, +134, +136, +138, +137, +134, +131, +130, +128, +127, +124, +124, +124, +126, +127, +127, +126, +126, +125, +121, +115, +113, +114, +117, +122, +126, +128, +127, +125, +123, +119, +116, +118, +121, +123, +122, +121, +120, +121, +124, +125, +126, +128, +129, +130, +130, +129, +128, +127, +127, +129, +131, +130, +131, +131, +138, +129, +136, +147, +131, +123, +121, +125, +125, +134, +131, +143, +144, +127, +124, +130, +135, +134, +136, +136, +137, +131, +125, +125, +130, +133, +133, +130, +129, +126, +126, +126, +124, +120, +118, +117, +119, +126, +135, +145, +140, +121, +114, +119, +124, +128, +132, +130, +126, +118, +118, +136, +140, +127, +126, +128, +132, +128, +129, +130, +124, +122, +132, +130, +122, +124, +137, +132, +118, +130, +140, +141, +117, +110, +120, +129, +120, +112, +122, +139, +147, +141, +129, +112, +114, +125, +136, +141, +121, +97, +99, +126, +133, +139, +151, +129, +96, +80, +96, +130, +144, +146, +141, +135, +131, +129, +132, +131, +130, +137, +133, +121, +109, +111, +120, +114, +105, +107, +120, +139, +152, +159, +164, +163, +163, +160, +157, +153, +154, +158, +157, +158, +160, +159, +160, +164, +171, +169, +165, +156, +155, +158, +164, +169, +169, +174, +178, +179, +174, +177, +174, +177, +177, +177, +175, +172, +171, +167, +170, +172, +172, +171, +170, +171, +169, +169, +161, +153, +151, +156, +168, +178, +178, +173, +167, +161, +155, +150, +151, +153, +151, +157, +159, +157, +157, +149, +136, +132, +139, +138, +139, +142, +143, +142, +138, +139, +133, +130, +127, +130, +136, +138, +134, +128, +126, +124, +126, +129, +126, +124, +127, +129, +130, +124, +125, +122, +122, +117, +113, +111, +109, +105, +104, +108, +111, +111, +106, +104, +100, +100, +103, +112, +116, +111, +106, +100, +101, +98, +97, +97, +98, +97, +99, +97, +93, +89, +87, +85, +83, +81, +85, +86, +84, +83, +82, +85, +81, +79, +80, +77, +76, +78, +87, +85, +77, +75, +73, +77, +80, +84, +88, +85, +85, +83, +83, +84, +83, +85, +87, +90, +92, +91, +93, +92, +97, +95, +92, +99, +108, +113, +109, +104, +100, +95, +97, +102, +95, +91, +91, +95, +99, +100, +103, +99, +102, +100, +101, +102, +96, +92, +98, +110, +115, +116, +113, +109, +105, +104, +104, +106, +106, +111, +115, +117, +113, +103, +99, +103, +113, +126, +128, +125, +119, +114, +112, +108, +112, +117, +123, +128, +133, +136, +135, +130, +119, +119, +123, +133, +136, +140, +141, +142, +142, +141, +140, +137, +137, +137, +146, +155, +160, +159, +159, +151, +146, +140, +140, +148, +154, +164, +170, +168, +158, +146, +138, +139, +146, +152, +158, +163, +166, +164, +159, +154, +151, +147, +154, +156, +154, +159, +166, +172, +170, +164, +161, +159, +157, +156, +157, +159, +158, +158, +158, +157, +155, +151, +151, +152, +158, +159, +157, +157, +155, +153, +153, +155, +154, +155, +156, +158, +159, +159, +156, +154, +154, +150, +145, +143, +146, +146, +147, +149, +150, +149, +148, +146, +146, +147, +147, +148, +149, +151, +151, +153, +151, +147, +151, +157, +164, +166, +157, +145, +137, +134, +138, +142, +146, +150, +151, +151, +146, +142, +136, +132, +131, +136, +136, +137, +141, +146, +147, +144, +142, +138, +134, +132, +135, +134, +133, +134, +139, +133, +117, +114, +122, +130, +132, +127, +124, +119, +118, +118, +119, +121, +118, +120, +122, +125, +124, +120, +119, +116, +113, +111, +110, +112, +114, +113, +119, +118, +114, +112, +108, +107, +105, +108, +111, +115, +118, +118, +118, +118, +119, +117, +115, +116, +117, +119, +121, +118, +119, +117, +115, +115, +118, +119, +117, +116, +116, +115, +112, +112, +111, +110, +112, +111, +110, +110, +115, +119, +118, +116, +112, +112, +107, +106, +106, +107, +109, +108, +108, +108, +107, +105, +104, +103, +102, +102, +103, +100, +100, +97, +97, +97, +98, +102, +98, +100, +101, +101, +99, +91, +87, +90, +93, +99, +103, +108, +106, +104, +103, +101, +100, +99, +102, +104, +109, +111, +111, +109, +110, +108, +105, +105, +108, +119, +125, +116, +101, +94, +94, +98, +104, +110, +115, +114, +114, +113, +110, +107, +106, +104, +107, +113, +122, +125, +120, +116, +110, +110, +107, +109, +110, +112, +112, +112, +113, +111, +109, +107, +104, +107, +108, +108, +105, +103, +105, +108, +107, +109, +110, +108, +110, +112, +112, +111, +114, +116, +110, +103, +103, +106, +107, +111, +115, +119, +118, +112, +110, +109, +110, +110, +114, +117, +121, +123, +121, +122, +121, +120, +121, +121, +126, +129, +131, +132, +129, +127, +123, +125, +130, +137, +136, +129, +121, +115, +116, +117, +122, +127, +129, +129, +126, +125, +125, +128, +133, +134, +134, +131, +130, +124, +121, +124, +125, +125, +128, +128, +129, +130, +125, +124, +121, +122, +123, +125, +125, +125, +125, +124, +124, +124, +126, +126, +128, +129, +131, +130, +126, +121, +121, +124, +131, +135, +140, +138, +136, +134, +131, +132, +131, +132, +134, +138, +142, +142, +138, +138, +144, +152, +155, +153, +150, +146, +144, +144, +150, +149, +144, +141, +141, +143, +144, +144, +146, +146, +147, +149, +149, +150, +148, +146, +145, +147, +155, +163, +160, +155, +154, +149, +146, +145, +145, +152, +155, +153, +148, +141, +141, +150, +154, +157, +155, +154, +152, +149, +145, +144, +145, +146, +152, +154, +153, +152, +153, +155, +147, +140, +138, +140, +144, +146, +151, +153, +151, +149, +145, +148, +152, +157, +154, +146, +144, +147, +148, +152, +151, +155, +161, +167, +168, +163, +154, +145, +141, +145, +150, +154, +153, +151, +152, +152, +151, +150, +146, +145, +146, +150, +153, +153, +150, +151, +150, +150, +150, +158, +161, +158, +153, +149, +143, +140, +140, +142, +143, +144, +144, +140, +140, +136, +135, +133, +136, +139, +136, +137, +140, +141, +141, +141, +141, +141, +142, +140, +139, +138, +137, +140, +144, +138, +130, +125, +126, +127, +130, +132, +134, +134, +133, +130, +128, +127, +126, +129, +132, +137, +137, +138, +144, +147, +142, +133, +130, +131, +134, +136, +139, +139, +138, +136, +134, +131, +129, +126, +129, +130, +131, +129, +129, +127, +125, +127, +132, +141, +142, +139, +137, +134, +129, +128, +129, +129, +131, +132, +134, +134, +132, +128, +125, +123, +123, +126, +127, +126, +125, +123, +124, +122, +123, +120, +120, +121, +120, +121, +122, +125, +119, +115, +112, +116, +117, +119, +122, +125, +124, +124, +123, +120, +118, +117, +117, +118, +122, +123, +125, +123, +122, +122, +121, +122, +121, +124, +125, +126, +127, +128, +124, +123, +121, +123, +124, +125, +126, +125, +124, +125, +124, +122, +125, +124, +123, +127, +131, +135, +132, +127, +125, +120, +117, +117, +117, +119, +119, +120, +120, +120, +119, +118, +117, +116, +116, +117, +115, +116, +117, +118, +117, +116, +116, +114, +111, +114, +116, +115, +108, +101, +103, +106, +110, +113, +117, +117, +116, +116, +115, +115, +113, +115, +118, +121, +122, +123, +128, +136, +137, +134, +134, +130, +123, +116, +112, +116, +119, +123, +127, +130, +128, +125, +120, +119, +117, +118, +118, +121, +125, +123, +125, +127, +134, +135, +132, +129, +126, +125, +123, +123, +124, +121, +120, +123, +122, +122, +122, +116, +106, +95, +94, +107, +120, +127, +126, +123, +120, +115, +112, +113, +116, +117, +115, +116, +118, +120, +120, +120, +123, +127, +127, +126, +122, +122, +126, +133, +136, +131, +120, +111, +109, +112, +116, +118, +122, +125, +127, +126, +127, +131, +133, +133, +132, +132, +132, +129, +123, +123, +123, +120, +114, +112, +111, +111, +114, +125, +131, +126, +114, +110, +114, +118, +118, +117, +118, +118, +114, +109, +106, +104, +104, +108, +113, +121, +126, +126, +124, +126, +126, +125, +121, +118, +119, +121, +124, +122, +115, +110, +110, +114, +119, +123, +125, +125, +123, +119, +120, +120, +120, +120, +119, +120, +120, +120, +119, +119, +117, +120, +125, +132, +135, +131, +130, +128, +125, +122, +121, +120, +118, +117, +114, +116, +118, +116, +108, +101, +101, +106, +111, +113, +117, +118, +118, +119, +117, +119, +121, +125, +125, +125, +124, +125, +122, +117, +112, +110, +113, +116, +119, +124, +124, +124, +123, +119, +115, +112, +119, +126, +130, +128, +125, +124, +121, +120, +122, +125, +122, +116, +116, +118, +121, +121, +122, +123, +124, +122, +120, +117, +119, +121, +121, +121, +121, +117, +115, +115, +116, +120, +120, +122, +122, +122, +121, +121, +121, +121, +121, +121, +121, +123, +125, +125, +119, +111, +107, +110, +115, +118, +124, +127, +127, +125, +125, +125, +123, +124, +126, +130, +133, +133, +132, +132, +131, +132, +135, +137, +140, +135, +128, +121, +120, +122, +125, +125, +129, +134, +139, +140, +136, +131, +128, +127, +127, +130, +132, +133, +131, +133, +132, +130, +127, +124, +124, +127, +123, +115, +113, +111, +113, +118, +128, +135, +134, +127, +120, +117, +118, +120, +123, +129, +134, +140, +138, +136, +132, +126, +125, +128, +131, +126, +124, +123, +124, +127, +128, +130, +128, +127, +128, +129, +128, +125, +123, +123, +126, +134, +141, +140, +135, +127, +119, +117, +117, +121, +125, +129, +134, +134, +131, +130, +133, +135, +135, +135, +133, +130, +125, +124, +125, +127, +128, +128, +128, +128, +127, +125, +126, +127, +124, +119, +115, +119, +121, +120, +123, +123, +121, +120, +120, +124, +126, +126, +120, +118, +118, +120, +123, +125, +127, +129, +130, +129, +126, +123, +124, +129, +135, +134, +128, +118, +109, +110, +114, +118, +121, +123, +125, +125, +123, +120, +118, +117, +119, +123, +125, +129, +134, +136, +133, +128, +123, +120, +117, +118, +120, +121, +122, +121, +120, +119, +116, +115, +116, +115, +116, +116, +115, +116, +116, +118, +120, +118, +120, +119, +118, +120, +121, +117, +111, +109, +110, +113, +114, +117, +120, +121, +121, +120, +118, +117, +116, +119, +120, +124, +126, +126, +124, +126, +133, +135, +136, +133, +130, +131, +131, +129, +123, +119, +121, +125, +131, +134, +135, +134, +132, +130, +131, +135, +140, +140, +140, +140, +139, +135, +134, +133, +133, +135, +138, +139, +140, +139, +137, +133, +127, +123, +124, +126, +133, +139, +142, +141, +136, +132, +128, +129, +128, +130, +133, +140, +146, +144, +138, +133, +132, +133, +136, +140, +143, +144, +142, +143, +140, +138, +136, +135, +138, +142, +143, +143, +141, +141, +142, +141, +142, +146, +148, +148, +151, +157, +163, +162, +159, +156, +152, +149, +146, +146, +147, +149, +153, +151, +144, +135, +132, +132, +135, +140, +145, +147, +146, +146, +149, +150, +147, +145, +142, +142, +143, +143, +142, +142, +137, +133, +133, +135, +136, +139, +142, +144, +146, +146, +144, +145, +147, +151, +153, +154, +153, +151, +147, +145, +146, +147, +144, +138, +136, +137, +141, +144, +145, +146, +146, +146, +147, +144, +140, +141, +148, +156, +160, +157, +153, +149, +144, +143, +144, +146, +146, +149, +150, +150, +149, +144, +141, +140, +138, +132, +127, +128, +130, +133, +136, +139, +139, +137, +138, +138, +139, +138, +139, +141, +146, +150, +150, +145, +142, +139, +138, +142, +144, +145, +145, +144, +144, +141, +138, +138, +145, +148, +149, +147, +144, +140, +136, +135, +136, +138, +143, +146, +146, +140, +133, +129, +129, +130, +133, +135, +139, +143, +143, +139, +135, +128, +124, +122, +122, +124, +127, +127, +123, +120, +118, +117, +120, +130, +137, +140, +137, +131, +125, +119, +118, +121, +122, +117, +114, +116, +119, +120, +121, +122, +124, +125, +126, +128, +128, +130, +127, +125, +129, +136, +139, +136, +130, +125, +120, +119, +119, +117, +113, +111, +113, +116, +119, +119, +118, +119, +124, +129, +131, +126, +123, +120, +119, +119, +120, +120, +121, +121, +122, +123, +123, +120, +112, +105, +105, +110, +112, +113, +116, +116, +114, +114, +112, +111, +110, +113, +117, +121, +122, +124, +126, +130, +130, +130, +128, +124, +122, +121, +122, +126, +124, +118, +113, +111, +114, +117, +117, +119, +119, +119, +119, +118, +117, +114, +112, +116, +122, +128, +131, +130, +127, +124, +122, +115, +108, +106, +107, +112, +117, +119, +118, +117, +120, +121, +120, +118, +115, +112, +112, +113, +115, +115, +116, +116, +120, +122, +121, +121, +117, +112, +106, +104, +107, +110, +114, +115, +118, +118, +115, +112, +110, +111, +113, +113, +115, +116, +118, +119, +120, +120, +126, +132, +135, +133, +129, +124, +119, +116, +114, +118, +119, +116, +109, +106, +106, +108, +110, +113, +116, +118, +119, +120, +118, +118, +116, +117, +121, +129, +134, +134, +129, +124, +122, +119, +116, +112, +111, +114, +118, +118, +122, +124, +127, +127, +127, +124, +122, +117, +116, +118, +119, +122, +124, +127, +128, +126, +127, +126, +123, +116, +112, +113, +117, +120, +122, +123, +123, +121, +120, +119, +120, +119, +117, +114, +116, +118, +119, +119, +125, +133, +139, +139, +136, +130, +125, +123, +122, +122, +125, +128, +125, +121, +116, +116, +117, +118, +120, +123, +125, +125, +124, +124, +122, +122, +122, +126, +133, +138, +138, +134, +130, +127, +122, +117, +117, +118, +121, +122, +125, +129, +131, +130, +127, +126, +124, +122, +120, +120, +122, +124, +127, +128, +128, +127, +126, +126, +128, +125, +119, +113, +114, +115, +118, +120, +121, +120, +120, +120, +120, +119, +117, +115, +117, +121, +125, +124, +124, +126, +133, +139, +139, +136, +131, +127, +124, +124, +126, +127, +128, +124, +120, +118, +118, +119, +121, +123, +126, +127, +126, +124, +124, +122, +120, +121, +126, +135, +138, +138, +134, +132, +128, +121, +113, +112, +114, +118, +123, +126, +131, +131, +129, +127, +125, +122, +120, +119, +121, +124, +126, +128, +128, +129, +130, +129, +128, +128, +126, +120, +115, +116, +118, +121, +123, +125, +125, +124, +122, +122, +119, +119, +118, +121, +123, +128, +130, +128, +130, +135, +143, +145, +143, +139, +135, +132, +129, +128, +131, +132, +132, +127, +125, +122, +121, +123, +125, +128, +131, +132, +133, +133, +133, +131, +130, +133, +139, +146, +148, +146, +142, +138, +131, +126, +122, +124, +127, +130, +136, +139, +141, +138, +136, +134, +133, +132, +132, +133, +134, +136, +137, +138, +138, +139, +139, +138, +139, +139, +134, +128, +125, +127, +130, +133, +135, +136, +135, +135, +133, +131, +129, +127, +127, +129, +133, +136, +135, +137, +144, +151, +154, +151, +146, +141, +139, +138, +138, +140, +143, +143, +140, +134, +132, +131, +130, +133, +136, +139, +140, +141, +140, +139, +137, +135, +138, +144, +150, +152, +150, +146, +140, +133, +127, +126, +129, +134, +137, +142, +143, +143, +139, +136, +134, +136, +136, +136, +138, +137, +137, +136, +137, +138, +137, +136, +136, +138, +136, +132, +127, +126, +127, +130, +132, +134, +134, +133, +134, +134, +131, +128, +127, +130, +134, +137, +137, +136, +139, +145, +152, +153, +151, +146, +143, +140, +139, +137, +136, +138, +139, +137, +129, +125, +124, +126, +129, +135, +138, +138, +137, +135, +134, +134, +133, +135, +140, +145, +148, +147, +144, +138, +131, +123, +120, +122, +126, +132, +138, +141, +136, +129, +126, +127, +130, +131, +134, +135, +134, +134, +133, +132, +132, +133, +135, +136, +137, +138, +133, +126, +121, +121, +124, +126, +130, +131, +131, +131, +129, +125, +123, +122, +123, +126, +131, +134, +134, +132, +132, +136, +142, +144, +144, +140, +136, +132, +129, +128, +129, +129, +129, +127, +125, +121, +117, +115, +118, +122, +126, +127, +127, +127, +126, +126, +126, +127, +131, +134, +137, +135, +132, +125, +118, +114, +117, +120, +124, +125, +127, +128, +125, +123, +122, +124, +126, +128, +129, +131, +129, +127, +128, +128, +128, +130, +131, +131, +130, +130, +127, +123, +118, +115, +118, +119, +119, +121, +121, +122, +121, +119, +117, +115, +114, +115, +116, +119, +120, +120, +123, +128, +131, +131, +130, +128, +125, +123, +121, +121, +120, +121, +121, +122, +121, +118, +115, +115, +115, +117, +119, +122, +123, +124, +124, +125, +126, +127, +127, +128, +127, +126, +123, +120, +117, +116, +118, +122, +123, +125, +124, +123, +124, +122, +120, +118, +117, +118, +121, +125, +127, +127, +128, +126, +124, +121, +120, +117, +117, +118, +122, +124, +126, +124, +123, +121, +121, +119, +118, +116, +116, +118, +119, +120, +118, +116, +116, +116, +117, +119, +121, +123, +124, +125, +124, +123, +119, +118, +117, +117, +118, +118, +119, +118, +120, +120, +120, +118, +118, +117, +117, +119, +121, +122, +122, +123, +123, +122, +120, +120, +119, +118, +115, +113, +113, +116, +118, +119, +119, +120, +119, +120, +120, +120, +119, +118, +117, +118, +119, +120, +121, +124, +127, +125, +123, +117, +113, +111, +114, +117, +120, +121, +123, +122, +121, +119, +119, +117, +117, +118, +121, +123, +123, +123, +124, +125, +126, +126, +126, +126, +125, +125, +125, +125, +123, +122, +121, +121, +121, +119, +116, +117, +117, +116, +115, +115, +114, +115, +116, +117, +118, +121, +123, +125, +125, +126, +125, +127, +128, +128, +129, +128, +127, +125, +123, +121, +119, +120, +120, +122, +123, +123, +122, +121, +120, +120, +119, +118, +120, +122, +125, +125, +125, +123, +122, +121, +119, +120, +121, +123, +124, +126, +128, +127, +127, +125, +123, +121, +121, +122, +123, +126, +128, +130, +129, +128, +126, +126, +125, +127, +129, +130, +129, +127, +126, +125, +124, +124, +122, +123, +125, +126, +127, +123, +121, +120, +120, +121, +121, +123, +124, +126, +128, +129, +129, +127, +125, +122, +121, +121, +122, +122, +123, +123, +120, +116, +113, +112, +112, +115, +117, +120, +123, +126, +127, +126, +125, +124, +124, +125, +129, +131, +131, +127, +125, +121, +121, +120, +121, +124, +125, +125, +124, +123, +120, +119, +119, +120, +123, +126, +129, +129, +128, +127, +126, +126, +126, +128, +129, +131, +133, +133, +132, +129, +128, +127, +126, +124, +124, +125, +126, +126, +126, +123, +122, +120, +118, +118, +118, +119, +122, +123, +125, +124, +124, +123, +121, +120, +121, +122, +124, +127, +127, +126, +125, +124, +125, +126, +127, +128, +129, +130, +131, +131, +129, +131, +131, +132, +133, +133, +133, +130, +130, +129, +128, +127, +125, +125, +126, +127, +128, +128, +128, +127, +126, +128, +128, +130, +132, +136, +139, +140, +140, +137, +135, +133, +134, +134, +135, +138, +137, +137, +136, +134, +132, +129, +129, +129, +129, +130, +130, +132, +130, +128, +126, +126, +127, +128, +130, +132, +133, +134, +136, +136, +135, +136, +136, +137, +137, +136, +136, +135, +136, +135, +134, +134, +134, +132, +132, +132, +133, +132, +132, +131, +130, +129, +130, +130, +131, +131, +134, +135, +136, +133, +131, +128, +126, +126, +129, +134, +137, +137, +136, +136, +132, +127, +125, +125, +127, +130, +133, +134, +133, +129, +123, +119, +117, +118, +120, +125, +128, +130, +131, +131, +130, +129, +130, +132, +134, +136, +137, +137, +136, +135, +133, +130, +130, +131, +132, +134, +134, +135, +134, +132, +131, +129, +129, +130, +131, +133, +133, +134, +134, +135, +134, +135, +135, +135, +136, +137, +139, +141, +140, +140, +138, +137, +138, +137, +136, +136, +134, +134, +133, +133, +130, +128, +128, +126, +128, +127, +126, +125, +124, +125, +126, +127, +128, +128, +130, +130, +132, +133, +134, +134, +134, +135, +134, +136, +136, +135, +136, +136, +135, +134, +135, +134, +134, +134, +135, +134, +134, +133, +131, +130, +129, +129, +127, +128, +129, +130, +130, +129, +130, +129, +129, +128, +130, +133, +136, +137, +139, +139, +138, +135, +134, +133, +133, +132, +133, +133, +133, +135, +134, +131, +129, +128, +129, +129, +128, +129, +129, +129, +127, +126, +126, +126, +125, +124, +126, +127, +127, +129, +131, +134, +132, +130, +128, +128, +128, +130, +132, +134, +134, +133, +131, +128, +125, +125, +127, +129, +132, +131, +129, +126, +122, +121, +123, +127, +128, +131, +133, +133, +130, +126, +123, +122, +122, +123, +127, +130, +131, +129, +127, +124, +119, +118, +119, +122, +124, +125, +125, +122, +120, +115, +112, +110, +112, +114, +118, +120, +123, +124, +124, +123, +121, +120, +121, +123, +127, +129, +131, +132, +129, +127, +122, +119, +118, +120, +122, +125, +125, +125, +124, +123, +121, +119, +117, +118, +119, +122, +122, +122, +122, +123, +124, +125, +126, +128, +128, +129, +129, +129, +128, +129, +128, +127, +126, +126, +126, +126, +125, +124, +122, +121, +121, +120, +119, +118, +118, +119, +119, +119, +118, +115, +113, +112, +114, +117, +120, +120, +121, +122, +122, +122, +121, +121, +121, +124, +126, +128, +129, +129, +128, +126, +126, +127, +127, +128, +127, +126, +124, +123, +122, +123, +122, +120, +120, +118, +118, +118, +118, +120, +122, +122, +124, +125, +125, +125, +123, +125, +126, +127, +127, +128, +127, +128, +129, +128, +128, +126, +126, +126, +124, +123, +122, +122, +121, +122, +123, +123, +124, +125, +124, +124, +122, +122, +121, +121, +121, +123, +124, +125, +126, +126, +126, +126, +125, +126, +127, +127, +127, +128, +127, +127, +126, +127, +127, +126, +124, +125, +125, +125, +122, +119, +118, +120, +122, +126, +127, +127, +126, +123, +122, +120, +119, +119, +120, +123, +126, +126, +126, +124, +123, +121, +123, +126, +128, +128, +126, +123, +121, +118, +117, +117, +114, +113, +113, +115, +116, +118, +118, +118, +118, +120, +120, +123, +125, +126, +128, +129, +130, +129, +128, +128, +126, +124, +122, +122, +121, +123, +123, +123, +121, +121, +120, +121, +121, +121, +120, +121, +120, +121, +121, +123, +124, +127, +128, +130, +132, +133, +132, +129, +127, +129, +129, +130, +131, +132, +131, +130, +128, +126, +126, +125, +125, +123, +121, +122, +123, +123, +122, +122, +120, +120, +120, +120, +122, +121, +122, +123, +125, +125, +126, +125, +125, +124, +125, +125, +125, +124, +125, +127, +129, +131, +130, +131, +130, +129, +129, +127, +126, +125, +127, +128, +129, +129, +127, +123, +120, +120, +120, +121, +123, +124, +126, +127, +128, +127, +126, +127, +127, +130, +131, +133, +133, +131, +131, +132, +133, +133, +132, +131, +128, +126, +126, +126, +124, +125, +125, +127, +129, +128, +127, +123, +123, +124, +125, +123, +121, +122, +123, +126, +128, +130, +129, +129, +130, +130, +131, +130, +129, +128, +128, +130, +132, +134, +134, +132, +130, +128, +128, +127, +127, +127, +129, +130, +131, +131, +131, +130, +128, +127, +127, +128, +130, +129, +128, +128, +128, +127, +125, +126, +128, +130, +131, +133, +134, +133, +130, +129, +127, +125, +123, +122, +122, +120, +118, +118, +119, +120, +121, +123, +124, +125, +125, +128, +130, +132, +132, +133, +134, +134, +134, +135, +135, +132, +129, +127, +128, +130, +131, +132, +132, +132, +132, +131, +131, +130, +130, +129, +128, +129, +129, +130, +131, +134, +136, +138, +138, +138, +138, +138, +139, +139, +139, +138, +140, +140, +141, +139, +137, +135, +134, +134, +133, +132, +130, +131, +130, +128, +126, +125, +126, +126, +127, +127, +127, +126, +127, +129, +130, +132, +133, +134, +133, +134, +134, +134, +133, +133, +134, +137, +137, +136, +137, +137, +138, +136, +135, +135, +134, +134, +133, +134, +134, +135, +135, +133, +130, +127, +128, +128, +129, +130, +132, +133, +134, +133, +135, +134, +134, +132, +132, +135, +136, +135, +134, +134, +134, +134, +131, +131, +132, +134, +134, +131, +129, +128, +128, +130, +130, +131, +132, +132, +134, +134, +133, +128, +126, +126, +129, +129, +130, +132, +133, +134, +134, +134, +132, +131, +130, +132, +132, +133, +134, +136, +136, +135, +133, +131, +130, +130, +131, +132, +133, +133, +131, +129, +128, +127, +127, +127, +129, +130, +130, +129, +128, +125, +121, +118, +120, +125, +129, +133, +133, +132, +129, +126, +125, +124, +125, +125, +124, +124, +124, +122, +121, +119, +120, +121, +123, +125, +127, +127, +127, +127, +129, +130, +133, +133, +133, +132, +132, +131, +130, +130, +129, +128, +125, +125, +125, +126, +125, +125, +126, +126, +125, +124, +123, +122, +123, +122, +123, +126, +127, +127, +127, +127, +127, +127, +128, +130, +132, +132, +133, +130, +129, +127, +128, +128, +129, +129, +129, +128, +127, +127, +127, +125, +125, +122, +123, +121, +122, +122, +123, +122, +123, +122, +124, +125, +126, +125, +125, +125, +125, +127, +125, +123, +122, +122, +124, +125, +128, +128, +128, +128, +128, +129, +129, +129, +129, +128, +129, +130, +129, +127, +125, +125, +123, +120, +120, +122, +123, +124, +125, +126, +126, +125, +126, +125, +125, +124, +126, +128, +130, +132, +130, +129, +128, +128, +126, +126, +127, +125, +125, +125, +125, +123, +123, +123, +124, +124, +126, +128, +129, +127, +124, +121, +120, +122, +123, +124, +125, +125, +126, +125, +122, +120, +119, +120, +121, +124, +125, +125, +121, +119, +116, +116, +116, +118, +120, +123, +124, +125, +122, +122, +122, +123, +122, +123, +125, +127, +125, +124, +123, +122, +121, +121, +118, +115, +114, +114, +116, +117, +120, +120, +117, +118, +123, +125, +118, +112, +116, +127, +131, +131, +128, +126, +122, +120, +121, +122, +121, +120, +122, +127, +129, +122, +112, +107, +108, +113, +117, +120, +119, +119, +120, +122, +121, +121, +120, +122, +125, +128, +127, +127, +125, +126, +128, +131, +131, +131, +129, +128, +126, +125, +125, +125, +122, +122, +122, +125, +125, +125, +124, +125, +126, +127, +126, +127, +128, +129, +129, +130, +131, +130, +129, +128, +129, +127, +122, +117, +117, +119, +125, +129, +128, +122, +117, +115, +120, +127, +131, +131, +129, +126, +125, +122, +120, +119, +120, +124, +129, +134, +136, +130, +119, +114, +115, +118, +120, +122, +126, +128, +129, +129, +127, +122, +121, +122, +126, +129, +131, +132, +134, +137, +139, +138, +136, +133, +131, +128, +127, +124, +124, +125, +128, +129, +127, +124, +119, +118, +118, +122, +124, +124, +125, +127, +131, +130, +129, +128, +129, +130, +132, +135, +137, +134, +131, +129, +132, +133, +132, +130, +127, +126, +124, +122, +121, +121, +124, +127, +130, +131, +130, +128, +122, +118, +119, +125, +132, +135, +135, +131, +128, +128, +129, +130, +129, +131, +133, +136, +137, +137, +132, +131, +131, +131, +129, +128, +126, +126, +126, +129, +130, +131, +129, +129, +128, +127, +125, +124, +123, +122, +122, +124, +125, +125, +127, +127, +128, +128, +127, +129, +132, +134, +134, +134, +133, +132, +129, +129, +128, +125, +124, +124, +124, +125, +126, +128, +127, +126, +124, +124, +124, +124, +124, +125, +126, +128, +131, +133, +134, +132, +131, +131, +133, +134, +135, +133, +132, +132, +134, +133, +131, +130, +128, +126, +125, +125, +126, +126, +124, +124, +124, +126, +126, +126, +124, +125, +126, +128, +127, +127, +127, +129, +131, +132, +132, +133, +133, +133, +133, +135, +135, +134, +133, +132, +131, +130, +128, +128, +127, +128, +129, +130, +128, +128, +127, +126, +123, +123, +123, +125, +127, +129, +130, +131, +132, +134, +134, +132, +130, +128, +128, +130, +131, +133, +134, +135, +134, +135, +133, +128, +125, +124, +124, +127, +127, +129, +129, +130, +128, +126, +124, +123, +123, +123, +123, +124, +124, +126, +130, +131, +131, +128, +128, +129, +131, +131, +132, +132, +133, +134, +134, +135, +134, +131, +130, +128, +128, +128, +127, +128, +128, +128, +127, +125, +126, +128, +127, +125, +124, +124, +127, +130, +130, +131, +128, +128, +127, +126, +125, +126, +126, +128, +131, +132, +132, +130, +127, +125, +123, +123, +124, +126, +127, +128, +129, +127, +127, +126, +124, +122, +121, +123, +125, +126, +125, +126, +126, +125, +125, +127, +127, +126, +127, +129, +132, +133, +133, +133, +130, +129, +128, +128, +127, +128, +128, +129, +130, +130, +129, +127, +127, +127, +125, +124, +124, +123, +122, +124, +124, +126, +125, +126, +126, +124, +123, +123, +125, +127, +128, +128, +128, +129, +130, +131, +127, +126, +125, +126, +128, +131, +131, +132, +132, +131, +129, +127, +126, +125, +122, +122, +123, +125, +127, +127, +128, +128, +127, +127, +128, +127, +128, +128, +130, +130, +131, +129, +127, +125, +125, +125, +127, +129, +129, +128, +127, +128, +129, +126, +124, +123, +124, +123, +124, +128, +129, +129, +130, +129, +128, +125, +124, +123, +125, +125, +126, +126, +128, +127, +128, +128, +128, +127, +126, +123, +124, +126, +129, +132, +132, +131, +130, +130, +129, +127, +125, +125, +124, +124, +126, +128, +130, +129, +128, +128, +125, +124, +123, +124, +125, +126, +128, +129, +128, +128, +127, +127, +126, +125, +125, +126, +128, +129, +129, +130, +130, +128, +126, +126, +126, +128, +127, +128, +129, +130, +129, +126, +125, +123, +122, +123, +126, +126, +124, +123, +124, +127, +128, +126, +125, +123, +123, +124, +126, +126, +128, +129, +129, +131, +130, +130, +128, +126, +125, +125, +126, +127, +128, +130, +130, +129, +127, +128, +129, +128, +128, +129, +129, +127, +126, +125, +125, +124, +124, +124, +125, +125, +126, +125, +126, +127, +128, +129, +127, +127, +126, +128, +129, +129, +130, +132, +131, +129, +127, +127, +125, +125, +126, +128, +128, +128, +128, +127, +127, +126, +125, +124, +125, +125, +128, +128, +130, +130, +129, +128, +128, +129, +129, +128, +128, +128, +128, +127, +127, +127, +129, +130, +130, +127, +125, +125, +127, +127, +127, +127, +127, +126, +127, +127, +126, +124, +124, +126, +127, +128, +128, +128, +127, +128, +129, +129, +127, +127, +129, +129, +129, +129, +131, +133, +134, +134, +132, +130, +128, +127, +126, +124, +124, +125, +126, +125, +125, +124, +121, +119, +119, +123, +125, +126, +128, +130, +131, +132, +132, +131, +129, +128, +125, +125, +125, +127, +128, +129, +129, +131, +129, +128, +125, +125, +125, +125, +125, +125, +126, +125, +124, +122, +122, +123, +123, +124, +125, +127, +129, +131, +131, +131, +130, +128, +128, +128, +130, +129, +130, +129, +129, +129, +127, +126, +124, +123, +123, +124, +124, +125, +125, +126, +127, +127, +127, +125, +124, +123, +124, +126, +127, +127, +126, +125, +125, +125, +126, +127, +128, +126, +125, +125, +126, +127, +128, +129, +130, +129, +129, +128, +129, +129, +130, +130, +129, +128, +129, +130, +130, +130, +128, +128, +127, +127, +127, +126, +125, +125, +125, +125, +122, +120, +120, +121, +123, +125, +127, +129, +128, +129, +130, +129, +127, +128, +130, +132, +131, +131, +131, +131, +131, +127, +125, +123, +123, +124, +125, +127, +126, +124, +125, +125, +124, +121, +119, +118, +119, +121, +123, +124, +124, +126, +129, +130, +130, +128, +128, +128, +133, +136, +138, +136, +133, +133, +132, +130, +128, +126, +126, +127, +128, +128, +128, +127, +125, +125, +124, +123, +122, +123, +124, +126, +127, +128, +131, +131, +130, +128, +129, +128, +128, +128, +129, +130, +130, +132, +132, +130, +129, +126, +126, +125, +125, +126, +126, +126, +125, +123, +123, +124, +123, +123, +121, +120, +118, +119, +120, +122, +124, +126, +128, +129, +130, +130, +129, +130, +130, +131, +131, +132, +133, +133, +134, +134, +133, +130, +131, +131, +132, +130, +129, +128, +127, +126, +125, +123, +123, +122, +122, +123, +123, +123, +123, +125, +126, +127, +125, +124, +124, +127, +130, +133, +134, +133, +131, +128, +124, +120, +117, +118, +122, +126, +128, +128, +127, +124, +122, +120, +119, +120, +123, +127, +129, +129, +128, +127, +125, +125, +127, +131, +134, +137, +138, +139, +136, +133, +132, +130, +129, +127, +126, +127, +127, +126, +126, +125, +125, +124, +124, +122, +120, +119, +121, +124, +127, +127, +129, +132, +134, +134, +133, +133, +133, +133, +134, +134, +133, +130, +130, +130, +131, +130, +130, +128, +127, +123, +121, +126, +124, +117, +111, +111, +116, +119, +120, +123, +122, +119, +117, +118, +118, +120, +121, +124, +127, +130, +130, +128, +127, +127, +128, +129, +131, +132, +131, +129, +135, +144, +141, +130, +122, +122, +124, +125, +130, +133, +133, +130, +129, +128, +126, +125, +123, +123, +130, +141, +146, +142, +136, +132, +127, +124, +123, +125, +128, +131, +133, +131, +129, +124, +121, +120, +121, +123, +125, +124, +124, +123, +122, +122, +123, +123, +123, +123, +122, +124, +126, +121, +115, +111, +114, +120, +123, +126, +128, +129, +128, +128, +125, +122, +120, +122, +126, +129, +131, +131, +130, +130, +132, +133, +129, +130, +136, +142, +146, +146, +137, +125, +117, +119, +124, +129, +133, +138, +139, +137, +134, +130, +124, +123, +125, +129, +131, +136, +141, +142, +139, +135, +129, +126, +124, +125, +128, +129, +132, +133, +132, +130, +127, +126, +124, +123, +123, +123, +122, +122, +122, +122, +121, +120, +121, +122, +123, +124, +127, +128, +121, +114, +113, +116, +119, +123, +127, +129, +128, +126, +126, +124, +121, +122, +124, +125, +126, +130, +134, +134, +130, +127, +126, +125, +131, +138, +144, +145, +137, +125, +116, +114, +119, +124, +130, +135, +137, +136, +132, +126, +120, +119, +121, +126, +127, +130, +136, +141, +139, +135, +130, +126, +120, +118, +120, +122, +124, +125, +127, +129, +124, +117, +116, +120, +123, +123, +122, +123, +122, +121, +121, +122, +121, +121, +122, +123, +129, +132, +127, +119, +113, +114, +117, +120, +123, +128, +129, +128, +127, +125, +123, +121, +123, +127, +130, +133, +133, +131, +129, +130, +129, +128, +129, +136, +145, +151, +144, +129, +118, +115, +118, +122, +127, +134, +136, +136, +135, +132, +126, +121, +119, +124, +127, +129, +130, +136, +140, +140, +136, +132, +129, +126, +124, +124, +125, +125, +130, +133, +127, +118, +119, +124, +126, +124, +125, +125, +124, +122, +123, +121, +120, +121, +122, +128, +131, +132, +133, +125, +118, +115, +117, +120, +123, +131, +131, +132, +129, +126, +122, +118, +119, +122, +124, +128, +128, +127, +128, +128, +126, +125, +130, +137, +146, +148, +142, +130, +117, +115, +119, +124, +129, +133, +137, +133, +134, +131, +124, +122, +122, +127, +132, +133, +128, +127, +132, +138, +137, +134, +131, +127, +128, +128, +128, +130, +131, +133, +131, +121, +117, +125, +129, +128, +127, +132, +130, +123, +123, +123, +122, +120, +124, +126, +130, +129, +130, +128, +121, +114, +113, +117, +123, +125, +128, +131, +125, +124, +124, +123, +122, +121, +125, +125, +126, +128, +125, +125, +126, +129, +130, +137, +141, +143, +141, +134, +123, +121, +123, +127, +131, +135, +136, +135, +134, +132, +126, +124, +124, +122, +128, +133, +130, +126, +128, +132, +136, +139, +135, +132, +129, +129, +126, +127, +130, +132, +133, +124, +118, +121, +128, +125, +121, +123, +123, +119, +119, +121, +122, +118, +119, +120, +123, +123, +121, +125, +126, +122, +116, +118, +118, +123, +124, +128, +128, +126, +123, +122, +122, +122, +123, +122, +126, +129, +128, +128, +127, +125, +126, +128, +134, +142, +141, +134, +126, +122, +124, +127, +131, +133, +134, +135, +135, +132, +130, +126, +126, +126, +132, +134, +133, +133, +128, +127, +132, +137, +140, +136, +135, +131, +126, +122, +121, +125, +128, +124, +120, +122, +129, +127, +123, +122, +120, +121, +121, +125, +124, +122, +124, +123, +126, +128, +124, +123, +125, +125, +120, +113, +115, +116, +124, +127, +129, +131, +129, +126, +124, +123, +121, +121, +124, +126, +129, +132, +133, +131, +130, +132, +135, +137, +136, +130, +128, +128, +127, +132, +133, +134, +132, +130, +132, +128, +127, +126, +126, +127, +131, +132, +131, +131, +128, +127, +126, +130, +135, +138, +136, +135, +134, +130, +128, +126, +130, +128, +125, +124, +127, +128, +126, +123, +122, +122, +121, +124, +123, +123, +122, +122, +124, +125, +125, +123, +123, +127, +127, +122, +114, +112, +115, +118, +124, +126, +129, +130, +126, +126, +123, +119, +118, +119, +124, +126, +131, +131, +132, +131, +134, +138, +138, +131, +128, +126, +127, +127, +131, +133, +132, +133, +134, +133, +130, +128, +124, +124, +127, +128, +131, +131, +132, +131, +128, +127, +131, +135, +137, +135, +133, +130, +126, +123, +124, +126, +125, +126, +128, +130, +128, +124, +120, +119, +120, +122, +124, +125, +125, +124, +122, +121, +122, +122, +122, +122, +126, +128, +121, +115, +113, +117, +122, +125, +127, +129, +128, +128, +125, +123, +122, +121, +125, +129, +131, +132, +130, +127, +127, +130, +136, +137, +132, +129, +128, +128, +128, +128, +131, +133, +136, +135, +132, +131, +129, +129, +129, +130, +132, +132, +129, +130, +129, +127, +127, +133, +140, +139, +137, +132, +126, +122, +120, +122, +124, +126, +128, +128, +128, +124, +122, +121, +121, +122, +122, +125, +124, +125, +124, +122, +122, +122, +123, +123, +126, +131, +127, +120, +112, +113, +114, +120, +125, +128, +131, +129, +127, +125, +123, +122, +121, +122, +124, +131, +133, +130, +126, +132, +141, +144, +142, +136, +133, +129, +127, +128, +129, +128, +131, +134, +132, +121, +114, +111, +114, +120, +125, +130, +131, +126, +127, +126, +124, +123, +118, +127, +138, +146, +142, +134, +128, +124, +123, +124, +130, +131, +131, +133, +134, +130, +127, +122, +123, +129, +130, +125, +118, +114, +115, +119, +122, +128, +130, +130, +130, +130, +130, +128, +125, +125, +130, +132, +137, +135, +133, +130, +128, +130, +126, +127, +127, +128, +124, +124, +131, +136, +139, +137, +136, +134, +128, +125, +124, +126, +129, +130, +131, +137, +136, +127, +117, +111, +116, +123, +126, +131, +133, +131, +125, +122, +120, +118, +114, +122, +135, +142, +141, +134, +128, +121, +120, +120, +124, +124, +126, +129, +128, +127, +122, +118, +117, +122, +126, +121, +112, +110, +110, +116, +120, +125, +125, +124, +124, +125, +125, +123, +123, +123, +127, +130, +131, +130, +126, +127, +127, +127, +127, +128, +128, +129, +129, +126, +124, +131, +139, +141, +141, +138, +135, +131, +128, +130, +132, +134, +136, +138, +139, +140, +134, +124, +117, +119, +125, +129, +132, +132, +132, +127, +125, +124, +121, +114, +118, +130, +140, +139, +135, +130, +122, +122, +121, +124, +125, +126, +129, +131, +132, +130, +125, +121, +123, +127, +124, +116, +115, +116, +121, +124, +127, +129, +128, +130, +129, +127, +124, +124, +125, +128, +131, +133, +132, +129, +128, +128, +127, +129, +129, +129, +132, +131, +128, +126, +128, +137, +141, +141, +140, +138, +133, +130, +128, +130, +131, +132, +134, +137, +138, +133, +121, +110, +110, +115, +120, +124, +127, +127, +123, +121, +121, +115, +109, +112, +123, +136, +138, +134, +126, +121, +120, +120, +124, +124, +127, +130, +129, +131, +128, +125, +122, +122, +126, +125, +119, +114, +113, +117, +122, +126, +128, +127, +128, +127, +126, +126, +126, +126, +128, +132, +134, +133, +129, +127, +125, +128, +130, +131, +132, +129, +129, +127, +125, +128, +135, +141, +140, +138, +136, +131, +127, +125, +126, +128, +131, +134, +133, +133, +133, +127, +115, +109, +113, +118, +122, +124, +125, +124, +122, +122, +121, +115, +116, +125, +136, +140, +138, +135, +126, +123, +123, +126, +127, +128, +130, +131, +132, +130, +127, +124, +123, +128, +127, +123, +117, +115, +117, +122, +125, +125, +126, +126, +128, +129, +129, +127, +128, +129, +133, +134, +134, +130, +128, +127, +128, +130, +131, +131, +130, +131, +127, +123, +123, +129, +136, +138, +136, +134, +129, +124, +123, +124, +126, +127, +130, +132, +135, +136, +133, +120, +112, +112, +118, +122, +124, +127, +127, +125, +123, +121, +115, +113, +121, +133, +140, +138, +130, +125, +122, +121, +124, +128, +129, +130, +132, +131, +129, +125, +125, +126, +127, +131, +128, +124, +119, +118, +121, +124, +126, +127, +128, +129, +129, +128, +127, +126, +127, +130, +132, +131, +132, +129, +126, +125, +124, +126, +129, +131, +131, +130, +125, +123, +128, +136, +139, +138, +137, +133, +130, +128, +128, +127, +129, +131, +131, +131, +133, +132, +122, +114, +114, +120, +121, +125, +127, +127, +126, +123, +124, +120, +116, +121, +133, +140, +140, +135, +130, +126, +125, +126, +128, +127, +129, +130, +131, +132, +128, +125, +124, +123, +126, +127, +126, +121, +115, +115, +120, +124, +127, +128, +130, +129, +128, +126, +126, +127, +127, +128, +129, +130, +129, +127, +125, +125, +125, +125, +125, +125, +127, +127, +124, +129, +135, +137, +137, +134, +133, +129, +126, +127, +127, +128, +131, +132, +133, +137, +137, +128, +117, +113, +116, +120, +124, +128, +131, +128, +125, +125, +122, +116, +117, +125, +134, +140, +139, +136, +130, +127, +126, +127, +128, +129, +129, +129, +129, +129, +128, +125, +123, +124, +125, +126, +124, +117, +112, +113, +116, +121, +125, +128, +129, +128, +127, +127, +126, +126, +128, +130, +132, +131, +128, +125, +124, +125, +128, +130, +131, +131, +127, +125, +127, +133, +137, +138, +136, +135, +132, +130, +128, +128, +127, +129, +132, +134, +137, +140, +133, +120, +115, +117, +121, +124, +127, +130, +129, +129, +128, +125, +119, +116, +120, +129, +136, +137, +133, +129, +125, +122, +123, +122, +121, +123, +125, +129, +130, +128, +125, +125, +123, +124, +127, +129, +126, +120, +117, +118, +122, +124, +128, +129, +129, +128, +128, +127, +125, +127, +127, +129, +131, +130, +127, +125, +124, +126, +128, +129, +130, +128, +126, +128, +136, +140, +139, +137, +135, +132, +129, +127, +127, +127, +129, +132, +130, +133, +135, +128, +116, +109, +113, +117, +121, +124, +128, +126, +123, +122, +120, +117, +112, +115, +126, +137, +141, +138, +132, +127, +123, +122, +124, +125, +126, +128, +130, +131, +129, +125, +123, +123, +125, +127, +129, +125, +117, +114, +118, +123, +126, +130, +132, +131, +129, +129, +128, +126, +126, +129, +132, +134, +130, +127, +125, +126, +127, +127, +128, +127, +125, +123, +129, +136, +140, +137, +136, +134, +132, +128, +125, +127, +126, +128, +130, +132, +133, +137, +131, +118, +111, +112, +118, +120, +124, +128, +128, +125, +124, +123, +121, +115, +117, +125, +136, +139, +135, +131, +128, +125, +125, +127, +127, +128, +129, +132, +132, +131, +128, +125, +126, +126, +129, +130, +128, +122, +117, +117, +121, +123, +126, +130, +131, +129, +127, +126, +125, +126, +128, +129, +132, +131, +129, +126, +126, +127, +125, +126, +127, +126, +124, +125, +133, +137, +137, +133, +131, +127, +126, +124, +126, +125, +127, +129, +130, +132, +137, +135, +124, +115, +114, +118, +120, +125, +128, +129, +128, +127, +124, +122, +119, +116, +122, +134, +141, +141, +137, +131, +125, +121, +122, +124, +125, +129, +133, +135, +134, +130, +127, +124, +123, +125, +127, +130, +126, +121, +118, +121, +122, +126, +128, +130, +129, +127, +126, +126, +126, +126, +127, +129, +129, +129, +126, +123, +122, +122, +123, +127, +128, +126, +126, +133, +139, +140, +137, +133, +132, +129, +126, +126, +126, +127, +129, +130, +133, +136, +136, +125, +115, +111, +115, +120, +123, +128, +130, +129, +127, +125, +121, +119, +116, +120, +129, +142, +145, +139, +133, +127, +123, +123, +127, +128, +128, +129, +130, +131, +130, +126, +124, +122, +126, +130, +128, +122, +114, +114, +118, +124, +127, +130, +130, +127, +126, +126, +125, +124, +126, +128, +131, +133, +132, +126, +125, +124, +124, +124, +125, +125, +125, +122, +124, +131, +137, +138, +136, +134, +132, +130, +126, +125, +126, +128, +133, +135, +136, +138, +136, +127, +117, +115, +118, +121, +125, +128, +129, +128, +126, +123, +122, +119, +117, +121, +132, +140, +140, +134, +130, +127, +124, +122, +124, +125, +127, +129, +133, +132, +128, +125, +121, +122, +125, +127, +124, +119, +116, +119, +122, +124, +124, +126, +127, +126, +126, +125, +126, +126, +126, +128, +129, +131, +130, +128, +127, +128, +128, +127, +128, +129, +128, +126, +128, +133, +138, +139, +140, +138, +135, +129, +126, +125, +126, +129, +134, +137, +135, +133, +132, +128, +122, +117, +117, +119, +123, +126, +128, +126, +124, +121, +121, +122, +120, +119, +125, +133, +136, +134, +130, +126, +123, +121, +122, +126, +127, +129, +131, +132, +131, +127, +125, +122, +121, +123, +126, +126, +123, +121, +121, +121, +122, +123, +124, +124, +125, +128, +128, +129, +128, +127, +126, +126, +127, +127, +128, +127, +128, +127, +127, +128, +128, +127, +130, +134, +137, +137, +136, +136, +132, +130, +127, +127, +125, +127, +128, +131, +130, +129, +130, +129, +123, +115, +111, +112, +116, +119, +124, +126, +124, +124, +122, +122, +121, +119, +119, +127, +136, +140, +138, +132, +128, +125, +123, +125, +125, +128, +130, +132, +133, +130, +128, +125, +124, +126, +129, +133, +133, +129, +123, +121, +121, +123, +124, +128, +131, +132, +134, +133, +130, +126, +123, +124, +125, +128, +129, +131, +129, +128, +127, +125, +124, +124, +123, +126, +132, +136, +139, +136, +134, +130, +125, +123, +124, +127, +129, +132, +134, +134, +132, +131, +128, +122, +115, +115, +116, +120, +122, +125, +126, +124, +122, +121, +121, +121, +122, +123, +127, +132, +136, +136, +134, +131, +130, +129, +128, +130, +130, +131, +132, +132, +130, +129, +128, +129, +131, +130, +130, +129, +126, +121, +117, +117, +120, +122, +124, +127, +129, +128, +127, +124, +123, +122, +123, +123, +125, +127, +128, +126, +124, +123, +123, +127, +130, +132, +133, +133, +131, +130, +128, +128, +126, +126, +126, +128, +129, +129, +127, +127, +127, +129, +129, +125, +119, +117, +121, +125, +128, +130, +129, +128, +125, +123, +122, +121, +122, +124, +128, +129, +129, +130, +132, +133, +133, +132, +133, +131, +130, +129, +130, +130, +131, +132, +132, +133, +132, +131, +129, +127, +128, +127, +124, +120, +119, +120, +120, +121, +122, +123, +123, +124, +125, +125, +124, +123, +124, +125, +125, +125, +127, +130, +133, +135, +134, +131, +129, +127, +127, +128, +129, +129, +129, +131, +133, +133, +132, +129, +124, +124, +127, +126, +123, +120, +119, +122, +124, +126, +128, +129, +129, +127, +126, +125, +124, +122, +125, +127, +130, +129, +127, +125, +123, +124, +127, +132, +136, +136, +134, +133, +131, +131, +129, +127, +128, +128, +131, +131, +129, +127, +125, +126, +130, +128, +123, +119, +119, +121, +123, +126, +127, +127, +125, +124, +124, +122, +121, +120, +120, +124, +128, +133, +136, +137, +135, +134, +131, +128, +127, +126, +127, +128, +131, +133, +132, +132, +130, +127, +126, +126, +128, +128, +123, +121, +120, +122, +123, +125, +126, +126, +125, +123, +124, +123, +119, +119, +120, +124, +126, +126, +127, +126, +128, +130, +130, +130, +130, +131, +132, +132, +132, +131, +129, +129, +127, +128, +127, +129, +128, +128, +130, +132, +130, +125, +119, +117, +118, +122, +125, +127, +129, +129, +127, +126, +124, +122, +121, +122, +124, +128, +130, +130, +131, +133, +135, +134, +131, +131, +130, +131, +131, +131, +133, +131, +131, +131, +130, +130, +128, +126, +127, +128, +128, +122, +118, +117, +119, +120, +122, +123, +124, +124, +121, +120, +118, +118, +120, +123, +127, +128, +127, +126, +129, +132, +133, +132, +132, +132, +131, +131, +130, +130, +130, +130, +131, +133, +133, +131, +129, +126, +127, +129, +127, +122, +118, +118, +120, +124, +126, +129, +129, +127, +127, +124, +124, +121, +121, +123, +126, +130, +130, +129, +127, +127, +124, +125, +127, +130, +132, +132, +134, +133, +133, +130, +126, +125, +125, +127, +128, +129, +128, +129, +130, +129, +124, +120, +118, +120, +121, +123, +124, +123, +123, +123, +123, +123, +122, +122, +124, +126, +127, +128, +129, +132, +134, +136, +137, +136, +133, +130, +128, +127, +128, +129, +130, +132, +132, +132, +130, +128, +128, +129, +129, +128, +123, +120, +118, +120, +121, +124, +126, +127, +126, +125, +124, +123, +122, +122, +122, +124, +126, +126, +125, +127, +129, +131, +130, +130, +130, +130, +131, +130, +130, +129, +127, +127, +129, +130, +129, +129, +128, +129, +130, +128, +124, +120, +121, +122, +123, +125, +125, +125, +126, +125, +126, +125, +123, +124, +125, +128, +130, +129, +129, +130, +132, +135, +136, +136, +134, +133, +132, +132, +132, +131, +130, +131, +131, +132, +130, +129, +128, +128, +128, +127, +121, +117, +116, +118, +121, +122, +124, +125, +124, +124, +122, +122, +122, +121, +121, +122, +124, +125, +123, +125, +128, +132, +133, +134, +133, +132, +130, +128, +129, +129, +129, +130, +130, +132, +132, +131, +128, +128, +128, +128, +123, +119, +117, +119, +121, +124, +126, +128, +126, +125, +123, +122, +120, +121, +124, +128, +130, +131, +130, +129, +127, +126, +125, +126, +129, +134, +136, +136, +136, +134, +132, +128, +126, +126, +126, +129, +130, +131, +131, +131, +123, +118, +116, +117, +121, +124, +128, +130, +128, +127, +126, +122, +118, +124, +134, +140, +138, +134, +130, +125, +122, +123, +124, +125, +129, +134, +130, +122, +115, +115, +116, +122, +134, +141, +139, +131, +126, +125, +128, +134, +135, +132, +128, +126, +126, +125, +126, +126, +126, +127, +129, +129, +126, +123, +120, +122, +123, +126, +127, +125, +123, +122, +124, +124, +122, +121, +129, +140, +146, +142, +137, +131, +127, +127, +133, +135, +127, +116, +120, +134, +142, +140, +136, +132, +127, +125, +125, +122, +118, +118, +126, +128, +122, +113, +107, +108, +113, +119, +126, +126, +126, +126, +126, +123, +123, +130, +136, +141, +140, +138, +133, +127, +125, +125, +126, +127, +130, +134, +133, +126, +119, +116, +117, +119, +123, +125, +125, +124, +122, +121, +119, +119, +121, +122, +126, +132, +138, +138, +139, +142, +138, +128, +119, +117, +119, +129, +142, +149, +147, +139, +133, +127, +121, +119, +121, +123, +127, +131, +136, +134, +121, +110, +108, +114, +121, +127, +131, +133, +130, +128, +126, +124, +122, +123, +127, +132, +136, +135, +131, +127, +123, +122, +123, +126, +128, +129, +129, +128, +125, +124, +123, +126, +128, +130, +130, +130, +130, +128, +126, +130, +137, +141, +138, +135, +134, +135, +131, +121, +115, +117, +122, +125, +130, +137, +141, +137, +133, +130, +127, +121, +118, +119, +122, +123, +124, +123, +124, +120, +113, +106, +109, +115, +121, +123, +124, +128, +132, +135, +135, +132, +125, +120, +118, +122, +123, +121, +119, +122, +125, +127, +127, +123, +121, +121, +123, +124, +123, +122, +122, +123, +125, +125, +123, +125, +126, +125, +125, +134, +142, +144, +143, +140, +137, +136, +134, +130, +119, +115, +124, +139, +144, +142, +136, +130, +126, +123, +124, +124, +123, +124, +129, +136, +132, +118, +108, +109, +116, +123, +127, +130, +130, +130, +128, +126, +123, +124, +130, +138, +143, +143, +138, +133, +127, +125, +125, +127, +129, +133, +135, +130, +124, +119, +119, +120, +124, +129, +131, +131, +126, +123, +121, +121, +122, +124, +125, +124, +129, +136, +144, +146, +135, +123, +117, +116, +120, +132, +143, +147, +145, +142, +138, +130, +122, +118, +119, +122, +128, +130, +130, +129, +127, +118, +109, +108, +112, +119, +124, +130, +131, +129, +125, +122, +121, +121, +123, +129, +133, +134, +132, +127, +124, +122, +122, +121, +123, +125, +128, +127, +126, +125, +125, +125, +126, +128, +128, +128, +128, +129, +129, +127, +127, +131, +137, +139, +139, +141, +136, +123, +113, +112, +119, +124, +129, +133, +137, +138, +137, +133, +127, +121, +119, +118, +120, +123, +123, +122, +122, +124, +127, +126, +119, +113, +112, +116, +120, +127, +135, +138, +135, +130, +127, +126, +127, +123, +117, +115, +118, +121, +123, +124, +126, +125, +125, +127, +128, +126, +125, +123, +125, +127, +127, +124, +123, +124, +128, +130, +128, +126, +132, +141, +146, +145, +140, +139, +137, +131, +122, +121, +127, +136, +142, +143, +142, +136, +130, +126, +124, +124, +124, +125, +128, +131, +133, +127, +115, +107, +108, +113, +117, +123, +127, +130, +129, +129, +126, +123, +128, +138, +146, +148, +143, +138, +130, +126, +125, +128, +129, +132, +135, +135, +129, +120, +117, +118, +120, +124, +129, +131, +129, +127, +123, +121, +121, +123, +122, +122, +127, +139, +148, +143, +129, +120, +119, +123, +125, +130, +139, +145, +145, +143, +138, +130, +120, +116, +118, +123, +126, +127, +127, +125, +127, +128, +122, +111, +107, +112, +119, +123, +127, +128, +127, +125, +124, +123, +121, +120, +122, +125, +127, +126, +125, +122, +122, +123, +125, +128, +128, +129, +127, +127, +125, +123, +121, +121, +124, +128, +130, +130, +129, +126, +123, +125, +133, +136, +138, +140, +136, +126, +115, +115, +119, +124, +129, +134, +135, +136, +139, +137, +131, +125, +122, +121, +122, +123, +124, +122, +121, +121, +124, +125, +121, +113, +110, +114, +121, +124, +126, +130, +135, +135, +134, +130, +128, +125, +120, +116, +116, +117, +120, +123, +125, +129, +129, +128, +127, +125, +124, +123, +123, +123, +125, +126, +127, +126, +128, +129, +129, +126, +128, +137, +144, +144, +140, +139, +136, +134, +133, +131, +126, +124, +130, +138, +140, +137, +133, +128, +126, +126, +127, +125, +124, +126, +130, +134, +131, +120, +110, +109, +112, +118, +123, +127, +129, +129, +129, +127, +124, +127, +135, +142, +143, +141, +136, +129, +125, +124, +127, +129, +130, +133, +137, +136, +127, +117, +114, +114, +120, +125, +130, +131, +129, +125, +123, +121, +119, +118, +119, +127, +137, +139, +133, +126, +126, +130, +134, +135, +134, +138, +144, +146, +143, +137, +131, +125, +122, +123, +124, +124, +124, +125, +125, +128, +129, +124, +113, +109, +113, +119, +124, +128, +131, +132, +128, +125, +123, +122, +121, +123, +124, +128, +130, +130, +129, +126, +123, +122, +124, +129, +131, +128, +123, +122, +121, +121, +122, +125, +128, +129, +132, +129, +125, +122, +128, +132, +135, +137, +138, +130, +119, +115, +118, +122, +125, +131, +135, +133, +134, +136, +134, +128, +125, +124, +125, +125, +126, +126, +124, +121, +121, +120, +122, +122, +119, +114, +115, +117, +118, +121, +129, +134, +135, +132, +129, +125, +118, +114, +114, +118, +121, +125, +127, +129, +128, +127, +126, +126, +124, +123, +123, +124, +124, +123, +124, +125, +127, +127, +128, +125, +124, +129, +138, +144, +143, +140, +137, +135, +134, +135, +134, +127, +120, +126, +137, +145, +143, +137, +132, +128, +126, +125, +127, +127, +126, +129, +134, +131, +119, +109, +108, +114, +121, +125, +130, +131, +132, +131, +129, +126, +129, +135, +141, +144, +142, +137, +130, +125, +124, +126, +128, +131, +136, +138, +133, +124, +117, +116, +119, +124, +129, +133, +133, +130, +125, +121, +118, +119, +120, +123, +127, +132, +132, +131, +129, +129, +130, +132, +132, +129, +133, +139, +145, +142, +138, +133, +129, +125, +124, +126, +125, +125, +126, +127, +129, +130, +126, +115, +109, +111, +118, +122, +126, +128, +128, +125, +122, +119, +119, +118, +122, +127, +131, +130, +129, +125, +122, +123, +132, +136, +131, +122, +119, +119, +120, +120, +122, +124, +127, +130, +132, +130, +124, +118, +121, +129, +135, +140, +139, +135, +125, +117, +117, +120, +124, +129, +135, +136, +136, +138, +137, +133, +128, +128, +128, +126, +125, +124, +123, +121, +121, +121, +120, +121, +123, +122, +119, +113, +112, +117, +126, +135, +138, +133, +127, +121, +121, +123, +124, +119, +115, +117, +123, +127, +128, +128, +127, +124, +126, +127, +126, +123, +122, +122, +125, +127, +129, +127, +127, +126, +125, +124, +128, +136, +140, +141, +139, +138, +136, +133, +130, +124, +117, +120, +133, +144, +146, +143, +136, +131, +126, +126, +127, +127, +128, +130, +132, +135, +131, +119, +109, +108, +115, +120, +125, +128, +130, +129, +128, +127, +122, +124, +132, +140, +143, +141, +135, +127, +120, +122, +126, +130, +132, +137, +137, +132, +123, +117, +116, +118, +123, +129, +132, +130, +127, +124, +122, +119, +120, +121, +122, +127, +130, +131, +130, +130, +128, +130, +131, +131, +130, +134, +142, +142, +139, +135, +132, +128, +124, +124, +124, +125, +124, +126, +126, +127, +130, +126, +116, +110, +110, +116, +120, +125, +129, +129, +126, +121, +119, +118, +119, +123, +126, +128, +129, +127, +126, +131, +135, +132, +123, +119, +120, +123, +124, +125, +125, +124, +125, +127, +129, +128, +126, +123, +123, +128, +133, +134, +132, +135, +137, +131, +120, +115, +119, +125, +132, +136, +137, +136, +136, +137, +134, +131, +128, +127, +125, +126, +126, +125, +122, +121, +121, +121, +124, +125, +119, +113, +112, +120, +128, +128, +127, +127, +129, +131, +132, +131, +123, +114, +111, +115, +122, +131, +135, +132, +128, +125, +124, +123, +121, +122, +125, +128, +130, +131, +128, +126, +125, +127, +129, +128, +125, +129, +137, +145, +144, +141, +139, +136, +131, +124, +120, +119, +126, +136, +146, +148, +144, +136, +128, +123, +122, +125, +126, +129, +132, +134, +135, +129, +118, +107, +107, +113, +121, +125, +128, +130, +128, +126, +123, +125, +131, +138, +141, +140, +138, +131, +124, +120, +122, +127, +131, +133, +137, +138, +131, +122, +116, +116, +119, +124, +129, +131, +131, +128, +127, +123, +121, +121, +121, +124, +128, +131, +131, +129, +129, +129, +132, +132, +130, +130, +134, +140, +141, +139, +135, +131, +126, +122, +122, +123, +123, +124, +126, +127, +128, +129, +121, +111, +105, +109, +114, +121, +125, +129, +127, +124, +121, +119, +117, +117, +120, +125, +128, +129, +129, +129, +129, +127, +124, +123, +127, +130, +130, +127, +124, +122, +122, +123, +126, +128, +129, +129, +130, +128, +127, +129, +131, +135, +139, +137, +125, +116, +118, +125, +130, +136, +137, +136, +136, +139, +140, +134, +129, +129, +129, +128, +126, +124, +121, +119, +121, +124, +124, +122, +121, +121, +119, +117, +113, +111, +116, +127, +137, +140, +137, +129, +115, +106, +107, +116, +126, +132, +134, +133, +127, +122, +119, +119, +120, +124, +130, +134, +134, +132, +127, +123, +123, +124, +127, +131, +131, +131, +135, +142, +143, +138, +135, +137, +136, +130, +125, +124, +123, +129, +141, +149, +148, +141, +135, +129, +124, +123, +126, +130, +132, +134, +134, +132, +125, +112, +106, +108, +116, +121, +126, +128, +127, +125, +124, +124, +124, +128, +133, +139, +140, +138, +131, +125, +121, +122, +126, +131, +132, +132, +135, +134, +125, +116, +113, +114, +120, +125, +130, +129, +126, +123, +122, +121, +119, +120, +121, +126, +130, +131, +130, +128, +129, +131, +133, +132, +133, +139, +144, +144, +140, +135, +131, +126, +123, +125, +126, +127, +127, +127, +127, +125, +126, +123, +116, +109, +110, +116, +121, +125, +127, +126, +123, +121, +120, +119, +118, +122, +126, +128, +128, +129, +128, +125, +122, +124, +129, +136, +134, +125, +119, +117, +118, +120, +123, +127, +129, +131, +132, +131, +125, +120, +122, +128, +137, +139, +133, +121, +116, +119, +125, +129, +134, +134, +134, +137, +143, +142, +135, +129, +128, +129, +129, +129, +127, +124, +123, +122, +124, +121, +121, +122, +123, +119, +112, +112, +118, +127, +134, +137, +135, +126, +116, +110, +111, +118, +128, +134, +135, +130, +125, +121, +119, +119, +120, +124, +128, +131, +131, +129, +124, +120, +121, +124, +127, +130, +130, +128, +125, +129, +137, +140, +138, +138, +139, +135, +127, +123, +121, +120, +129, +144, +152, +151, +144, +136, +128, +123, +124, +127, +129, +131, +132, +132, +132, +128, +118, +110, +110, +117, +122, +124, +126, +128, +128, +128, +126, +124, +125, +131, +139, +142, +140, +135, +130, +125, +125, +128, +130, +132, +134, +135, +130, +123, +118, +119, +120, +125, +127, +130, +128, +126, +125, +123, +122, +121, +123, +124, +127, +129, +130, +128, +128, +130, +134, +140, +142, +141, +139, +135, +131, +128, +127, +127, +127, +127, +127, +125, +124, +121, +120, +120, +122, +124, +123, +122, +122, +122, +116, +111, +114, +119, +125, +129, +127, +119, +112, +114, +119, +123, +124, +127, +128, +129, +128, +126, +121, +120, +122, +127, +131, +131, +128, +125, +123, +125, +127, +133, +138, +142, +141, +138, +135, +132, +127, +126, +128, +132, +134, +135, +135, +132, +131, +129, +129, +129, +128, +131, +130, +129, +128, +126, +122, +122, +123, +126, +124, +122, +122, +121, +121, +122, +123, +123, +123, +123, +122, +123, +125, +124, +118, +115, +114, +118, +119, +121, +123, +125, +126, +127, +129, +128, +127, +125, +126, +127, +131, +133, +132, +133, +133, +134, +132, +131, +131, +137, +141, +144, +141, +139, +134, +130, +128, +129, +130, +129, +130, +133, +134, +133, +130, +127, +126, +129, +130, +130, +129, +128, +127, +126, +126, +128, +129, +122, +114, +110, +114, +119, +122, +124, +125, +126, +124, +124, +121, +119, +119, +121, +124, +126, +128, +127, +126, +125, +124, +126, +133, +138, +139, +138, +136, +134, +129, +125, +123, +126, +134, +139, +139, +134, +129, +124, +121, +122, +122, +124, +126, +127, +129, +128, +121, +112, +108, +111, +116, +119, +119, +124, +131, +136, +137, +132, +126, +121, +120, +122, +126, +127, +128, +129, +126, +119, +115, +115, +118, +120, +125, +129, +129, +127, +126, +123, +120, +119, +119, +120, +123, +126, +129, +130, +130, +128, +127, +127, +131, +132, +132, +134, +139, +145, +145, +143, +138, +132, +127, +126, +128, +128, +129, +129, +129, +128, +129, +128, +123, +115, +113, +116, +121, +124, +127, +130, +131, +130, +130, +133, +134, +134, +128, +124, +123, +126, +128, +129, +131, +132, +132, +132, +130, +126, +127, +132, +136, +137, +133, +131, +128, +125, +125, +126, +128, +130, +130, +131, +130, +128, +120, +115, +115, +118, +123, +125, +128, +128, +128, +127, +126, +122, +121, +121, +124, +126, +128, +127, +127, +126, +125, +125, +128, +131, +134, +133, +133, +132, +129, +126, +124, +126, +127, +129, +130, +131, +129, +128, +127, +126, +124, +122, +120, +121, +122, +124, +123, +123, +122, +122, +123, +124, +123, +124, +124, +125, +126, +127, +127, +126, +124, +128, +134, +138, +138, +135, +134, +131, +128, +127, +126, +128, +131, +135, +137, +137, +135, +132, +131, +129, +125, +120, +120, +122, +123, +125, +126, +127, +126, +126, +126, +125, +123, +123, +124, +125, +127, +129, +129, +129, +128, +129, +134, +136, +136, +134, +131, +127, +124, +123, +124, +124, +127, +129, +131, +132, +130, +127, +124, +125, +127, +127, +122, +120, +120, +122, +123, +123, +124, +124, +123, +122, +122, +120, +120, +121, +123, +126, +127, +129, +128, +128, +128, +131, +135, +136, +136, +134, +133, +131, +130, +128, +127, +128, +129, +130, +131, +129, +127, +125, +125, +122, +119, +116, +118, +120, +122, +123, +122, +123, +122, +123, +123, +122, +122, +122, +122, +125, +127, +127, +127, +130, +135, +138, +137, +135, +132, +130, +128, +127, +128, +128, +130, +132, +134, +131, +127, +125, +123, +123, +121, +120, +120, +122, +123, +124, +125, +126, +126, +126, +125, +124, +124, +123, +125, +126, +127, +127, +125, +126, +126, +126, +126, +131, +137, +140, +138, +135, +133, +130, +128, +127, +130, +131, +132, +132, +132, +129, +127, +124, +125, +126, +126, +125, +124, +124, +125, +126, +125, +125, +126, +127, +128, +127, +125, +123, +123, +124, +126, +127, +128, +128, +129, +132, +135, +137, +136, +135, +133, +130, +128, +128, +129, +130, +131, +132, +134, +133, +130, +128, +127, +127, +125, +120, +117, +117, +117, +119, +120, +123, +124, +124, +122, +121, +121, +120, +121, +123, +126, +127, +128, +128, +132, +136, +137, +137, +135, +132, +129, +129, +128, +127, +125, +126, +127, +129, +129, +129, +127, +125, +125, +125, +123, +120, +118, +120, +122, +122, +122, +122, +123, +123, +124, +125, +124, +123, +122, +123, +125, +126, +126, +125, +124, +127, +133, +136, +136, +133, +129, +128, +125, +125, +125, +127, +129, +131, +133, +132, +130, +129, +127, +125, +123, +123, +123, +124, +124, +126, +129, +130, +127, +126, +124, +124, +124, +125, +126, +127, +129, +131, +133, +135, +134, +134, +133, +133, +133, +132, +131, +130, +130, +129, +129, +128, +128, +127, +126, +127, +127, +127, +125, +124, +125, +128, +128, +125, +120, +119, +118, +120, +121, +124, +125, +126, +126, +126, +125, +123, +121, +120, +123, +124, +126, +126, +130, +133, +135, +135, +136, +134, +131, +128, +128, +129, +130, +132, +134, +135, +136, +134, +133, +129, +125, +123, +123, +123, +123, +122, +122, +121, +121, +120, +121, +121, +121, +122, +122, +123, +122, +122, +124, +124, +127, +130, +135, +137, +137, +135, +133, +130, +128, +127, +128, +130, +130, +131, +131, +131, +131, +130, +129, +127, +125, +119, +118, +118, +120, +122, +124, +125, +124, +125, +125, +126, +125, +125, +124, +124, +125, +125, +127, +127, +127, +128, +131, +134, +136, +136, +135, +134, +130, +127, +126, +125, +127, +129, +132, +133, +132, +130, +126, +124, +122, +125, +126, +122, +118, +114, +115, +116, +119, +122, +125, +125, +125, +125, +124, +122, +123, +123, +126, +129, +129, +128, +130, +135, +139, +138, +135, +131, +129, +127, +128, +128, +128, +128, +130, +131, +131, +130, +127, +124, +122, +122, +123, +122, +122, +122, +124, +126, +127, +126, +126, +126, +127, +126, +126, +125, +124, +124, +124, +126, +129, +132, +134, +135, +134, +132, +131, +128, +126, +125, +128, +129, +131, +131, +133, +133, +132, +131, +128, +128, +129, +130, +125, +121, +118, +119, +121, +125, +127, +129, +128, +126, +126, +126, +125, +125, +125, +126, +128, +128, +129, +129, +126, +123, +126, +137, +143, +142, +138, +135, +130, +127, +128, +128, +130, +136, +140, +134, +124, +117, +118, +120, +124, +128, +131, +131, +130, +128, +125, +122, +120, +120, +123, +126, +127, +127, +123, +122, +122, +123, +123, +125, +127, +128, +127, +127, +126, +128, +128, +126, +130, +137, +142, +141, +136, +134, +133, +131, +132, +133, +133, +131, +131, +132, +132, +129, +127, +124, +123, +121, +121, +124, +121, +113, +108, +108, +112, +115, +118, +121, +121, +121, +120, +120, +119, +118, +117, +123, +134, +140, +139, +133, +131, +129, +126, +128, +130, +124, +118, +118, +123, +127, +127, +127, +127, +126, +126, +126, +123, +116, +117, +127, +136, +139, +136, +133, +130, +127, +129, +130, +131, +131, +132, +134, +136, +134, +129, +128, +130, +126, +119, +115, +116, +119, +120, +122, +125, +127, +127, +126, +124, +123, +122, +121, +123, +127, +129, +130, +130, +131, +131, +129, +129, +129, +131, +133, +133, +133, +133, +133, +131, +131, +130, +130, +131, +133, +132, +129, +132, +138, +142, +141, +137, +135, +133, +132, +133, +133, +133, +132, +132, +132, +131, +127, +128, +129, +122, +111, +108, +110, +115, +117, +121, +123, +123, +122, +123, +120, +118, +118, +119, +121, +124, +125, +125, +125, +123, +128, +127, +123, +132, +137, +143, +163, +149, +116, +97, +91, +92, +93, +97, +94, +93, +92, +96, +98, +100, +97, +111, +125, +135, +139, +140, +139, +130, +161, +135, +136, +168, +159, +134, +167, +184, +149, +173, +165, +158, +134, +128, +147, +172, +193, +187, +194, +183, +147, +123, +118, +132, +140, +120, +128, +128, +120, +141, +121, +123, +124, +86, +88, +94, +115, +113, +97, +79, +86, +111, +103, +86, +81, +88, +91, +100, +88, +88, +94, +68, +84, +118, +99, +110, +96, +85, +107, +107, +116, +110, +98, +101, +122, +142, +118, +114, +106, +97, +105, +110, +123, +118, +123, +110, +126, +140, +141, +135, +126, +117, +129, +157, +155, +161, +152, +140, +127, +134, +140, +152, +167, +166, +160, +174, +185, +173, +154, +127, +119, +125, +135, +139, +148, +147, +144, +153, +157, +156, +159, +161, +164, +168, +170, +166, +152, +152, +153, +143, +143, +148, +144, +144, +143, +154, +165, +154, +144, +136, +140, +140, +134, +134, +135, +128, +138, +128, +116, +118, +113, +113, +117, +126, +117, +115, +124, +122, +110, +110, +115, +107, +101, +104, +109, +115, +107, +103, +110, +108, +111, +111, +102, +105, +108, +107, +111, +114, +107, +108, +116, +121, +122, +119, +116, +117, +110, +112, +110, +108, +110, +107, +111, +112, +105, +104, +105, +101, +92, +92, +101, +101, +95, +106, +108, +96, +91, +101, +104, +96, +98, +100, +113, +118, +116, +117, +118, +111, +115, +118, +122, +137, +146, +148, +146, +145, +132, +122, +123, +130, +131, +137, +139, +145, +148, +148, +145, +133, +141, +145, +150, +157, +171, +172, +162, +164, +157, +155, +155, +156, +159, +161, +155, +155, +158, +154, +142, +132, +142, +148, +146, +151, +152, +155, +154, +139, +139, +135, +139, +147, +142, +148, +150, +144, +150, +150, +144, +147, +148, +148, +143, +142, +143, +140, +141, +146, +147, +141, +135, +134, +147, +150, +140, +133, +132, +134, +144, +147, +134, +140, +140, +150, +141, +129, +136, +115, +128, +122, +118, +117, +114, +120, +103, +98, +95, +88, +82, +90, +85, +91, +100, +103, +98, +98, +91, +79, +80, +86, +106, +95, +87, +95, +100, +94, +85, +98, +95, +87, +94, +100, +103, +114, +105, +93, +92, +93, +95, +96, +105, +103, +99, +98, +104, +98, +102, +104, +99, +103, +113, +123, +131, +130, +120, +123, +124, +123, +116, +130, +120, +117, +127, +126, +127, +134, +129, +109, +120, +130, +125, +124, +127, +131, +132, +138, +140, +127, +135, +135, +134, +135, +141, +141, +130, +133, +138, +140, +148, +151, +146, +151, +152, +151, +140, +149, +144, +156, +151, +144, +161, +155, +152, +146, +154, +152, +146, +137, +152, +157, +155, +168, +166, +167, +156, +149, +158, +157, +154, +160, +158, +148, +152, +154, +150, +151, +129, +125, +132, +137, +129, +131, +133, +133, +132, +128, +138, +128, +126, +127, +139, +138, +138, +136, +131, +128, +125, +129, +130, +131, +130, +141, +131, +132, +137, +123, +122, +119, +120, +121, +126, +124, +117, +112, +116, +121, +113, +109, +123, +135, +123, +119, +119, +117, +112, +107, +112, +115, +104, +107, +114, +112, +115, +115, +106, +83, +81, +97, +106, +105, +115, +112, +102, +96, +105, +109, +97, +97, +108, +116, +106, +111, +113, +107, +110, +109, +111, +111, +118, +117, +113, +120, +115, +114, +112, +109, +111, +112, +115, +119, +118, +109, +110, +112, +119, +110, +113, +121, +126, +140, +135, +136, +123, +127, +124, +123, +123, +118, +123, +123, +131, +135, +134, +125, +110, +110, +111, +114, +131, +135, +138, +141, +132, +132, +136, +128, +128, +131, +142, +148, +143, +152, +158, +150, +149, +149, +147, +158, +153, +154, +151, +147, +152, +147, +149, +148, +151, +149, +151, +144, +152, +154, +154, +154, +148, +152, +154, +156, +158, +160, +160, +156, +154, +151, +149, +151, +144, +146, +144, +147, +146, +144, +134, +126, +120, +122, +135, +131, +141, +132, +134, +131, +130, +131, +129, +120, +120, +128, +128, +136, +129, +126, +125, +129, +119, +123, +128, +128, +131, +122, +121, +125, +121, +108, +101, +98, +104, +116, +125, +118, +117, +114, +113, +106, +110, +108, +98, +118, +124, +123, +125, +114, +110, +110, +107, +105, +104, +111, +112, +114, +118, +110, +95, +90, +94, +87, +100, +109, +110, +105, +101, +101, +104, +105, +103, +104, +107, +114, +107, +114, +117, +115, +117, +116, +123, +120, +115, +118, +130, +129, +122, +125, +124, +125, +127, +133, +127, +130, +127, +122, +129, +133, +134, +125, +135, +142, +143, +143, +145, +141, +137, +139, +148, +148, +149, +147, +151, +146, +148, +151, +143, +136, +120, +120, +128, +140, +138, +145, +150, +144, +142, +138, +138, +138, +136, +143, +148, +153, +147, +149, +147, +145, +143, +137, +143, +143, +142, +136, +141, +135, +140, +141, +133, +134, +136, +136, +130, +137, +139, +135, +130, +133, +132, +129, +141, +147, +141, +139, +136, +134, +123, +125, +131, +129, +126, +127, +132, +130, +128, +115, +113, +105, +105, +112, +117, +118, +123, +125, +113, +113, +116, +118, +106, +112, +111, +120, +121, +119, +117, +115, +119, +110, +118, +109, +109, +115, +115, +114, +110, +112, +114, +106, +113, +114, +117, +119, +109, +115, +120, +115, +115, +120, +128, +128, +124, +119, +116, +119, +115, +117, +119, +120, +121, +122, +118, +117, +116, +110, +116, +117, +113, +103, +110, +109, +106, +116, +118, +121, +120, +112, +116, +121, +118, +113, +122, +129, +130, +131, +131, +133, +136, +135, +128, +131, +135, +136, +138, +137, +137, +133, +135, +142, +136, +141, +144, +143, +140, +142, +145, +141, +145, +147, +157, +158, +156, +154, +149, +144, +140, +144, +141, +146, +148, +144, +140, +138, +150, +148, +141, +133, +129, +132, +130, +129, +138, +138, +138, +138, +131, +135, +130, +130, +125, +127, +137, +130, +133, +139, +134, +134, +133, +130, +129, +133, +138, +125, +124, +130, +125, +124, +128, +132, +134, +133, +128, +129, +124, +120, +115, +117, +134, +141, +141, +140, +135, +129, +122, +121, +123, +125, +120, +122, +125, +124, +113, +116, +119, +115, +101, +94, +100, +100, +109, +106, +118, +120, +111, +109, +111, +106, +100, +109, +110, +120, +122, +113, +116, +125, +120, +115, +116, +118, +113, +114, +120, +118, +116, +116, +109, +110, +114, +111, +115, +118, +120, +111, +110, +113, +113, +120, +121, +126, +130, +133, +132, +132, +130, +124, +125, +128, +130, +130, +126, +118, +122, +127, +121, +113, +111, +122, +115, +105, +114, +117, +118, +127, +132, +126, +126, +129, +131, +140, +138, +134, +135, +135, +136, +137, +142, +140, +142, +144, +139, +132, +119, +126, +132, +139, +132, +134, +142, +144, +140, +129, +141, +142, +138, +135, +145, +154, +151, +151, +149, +155, +155, +143, +147, +156, +149, +140, +150, +150, +135, +141, +149, +131, +120, +126, +124, +129, +131, +133, +135, +137, +139, +129, +131, +137, +134, +127, +129, +137, +136, +135, +131, +135, +133, +126, +126, +136, +134, +125, +128, +129, +122, +115, +124, +126, +128, +127, +128, +127, +125, +124, +119, +122, +117, +125, +142, +146, +132, +124, +130, +127, +122, +123, +127, +120, +123, +121, +118, +118, +117, +121, +118, +106, +100, +101, +110, +105, +99, +112, +114, +107, +109, +111, +99, +104, +109, +109, +113, +115, +117, +112, +110, +105, +115, +117, +118, +122, +118, +119, +112, +117, +118, +112, +106, +106, +116, +118, +121, +121, +126, +116, +111, +118, +127, +133, +134, +134, +126, +134, +135, +124, +122, +127, +126, +124, +133, +128, +122, +130, +135, +120, +117, +113, +113, +116, +123, +133, +125, +126, +131, +130, +131, +129, +123, +121, +131, +142, +145, +138, +134, +144, +154, +159, +148, +144, +147, +144, +141, +132, +131, +124, +138, +135, +141, +141, +138, +139, +136, +136, +131, +138, +141, +147, +142, +148, +143, +145, +145, +139, +139, +140, +138, +135, +142, +141, +138, +133, +139, +129, +121, +116, +123, +130, +124, +131, +137, +132, +126, +125, +130, +133, +126, +128, +134, +135, +135, +134, +129, +130, +128, +125, +127, +133, +135, +136, +132, +127, +121, +122, +123, +127, +130, +131, +126, +120, +123, +116, +121, +126, +127, +122, +123, +127, +135, +133, +117, +123, +129, +119, +113, +121, +127, +119, +118, +127, +122, +120, +122, +116, +114, +103, +98, +101, +101, +109, +110, +118, +122, +113, +107, +107, +109, +112, +106, +117, +119, +120, +124, +119, +112, +110, +122, +119, +117, +126, +119, +115, +117, +119, +125, +122, +122, +126, +120, +126, +125, +114, +118, +119, +115, +127, +135, +139, +130, +131, +128, +126, +127, +126, +129, +126, +127, +130, +128, +126, +134, +138, +136, +124, +125, +122, +116, +118, +127, +129, +135, +133, +126, +132, +132, +126, +119, +127, +133, +132, +138, +148, +139, +144, +142, +132, +137, +135, +137, +144, +151, +141, +141, +140, +138, +133, +131, +142, +142, +145, +140, +140, +141, +135, +146, +152, +158, +157, +146, +140, +139, +140, +140, +144, +146, +146, +137, +133, +137, +132, +126, +128, +131, +126, +123, +126, +122, +119, +129, +128, +120, +119, +113, +107, +114, +123, +117, +120, +125, +121, +126, +132, +124, +126, +127, +120, +125, +127, +122, +119, +122, +123, +127, +124, +120, +120, +124, +121, +114, +123, +127, +118, +118, +119, +121, +131, +136, +135, +133, +121, +115, +120, +115, +121, +116, +125, +131, +124, +124, +115, +128, +122, +110, +106, +109, +109, +109, +108, +112, +116, +115, +117, +118, +118, +113, +109, +113, +128, +118, +123, +120, +115, +121, +137, +138, +127, +126, +126, +123, +110, +110, +116, +121, +118, +124, +132, +133, +126, +115, +120, +125, +122, +121, +132, +141, +145, +144, +141, +135, +132, +134, +130, +137, +137, +134, +132, +126, +137, +126, +128, +130, +122, +118, +118, +120, +121, +122, +128, +135, +137, +131, +128, +129, +130, +126, +126, +136, +137, +140, +140, +143, +139, +138, +137, +140, +138, +131, +130, +134, +132, +139, +140, +133, +140, +139, +140, +137, +140, +133, +136, +136, +133, +135, +143, +154, +144, +142, +137, +139, +137, +133, +140, +140, +134, +138, +136, +131, +131, +137, +127, +115, +111, +114, +112, +110, +122, +127, +129, +125, +121, +124, +120, +117, +125, +120, +115, +121, +129, +131, +119, +120, +128, +132, +133, +132, +127, +119, +120, +119, +127, +128, +116, +107, +111, +117, +106, +112, +112, +121, +117, +111, +118, +121, +127, +125, +129, +125, +120, +117, +117, +125, +120, +122, +128, +120, +121, +120, +122, +118, +112, +107, +108, +101, +108, +118, +119, +113, +115, +114, +110, +113, +106, +110, +115, +127, +132, +122, +124, +124, +126, +127, +126, +124, +134, +137, +126, +123, +129, +129, +122, +126, +126, +131, +132, +123, +118, +127, +140, +128, +122, +132, +142, +146, +144, +131, +135, +140, +132, +132, +142, +142, +140, +138, +138, +144, +142, +132, +134, +133, +120, +118, +125, +135, +130, +128, +134, +132, +122, +124, +135, +134, +128, +131, +134, +134, +142, +140, +140, +136, +133, +138, +136, +137, +136, +137, +142, +130, +133, +136, +132, +134, +130, +136, +136, +132, +130, +129, +129, +127, +122, +134, +144, +150, +134, +129, +133, +127, +126, +120, +127, +131, +135, +133, +130, +125, +118, +122, +121, +123, +115, +108, +114, +116, +117, +117, +124, +123, +122, +120, +117, +125, +117, +118, +116, +122, +128, +127, +125, +122, +126, +120, +124, +121, +124, +128, +127, +124, +118, +119, +117, +122, +126, +127, +122, +122, +126, +124, +114, +120, +129, +138, +138, +132, +132, +128, +120, +114, +121, +129, +125, +120, +124, +121, +123, +118, +113, +122, +124, +113, +113, +108, +110, +116, +117, +118, +118, +122, +119, +117, +122, +126, +118, +115, +119, +129, +134, +133, +128, +122, +123, +128, +132, +128, +120, +128, +134, +129, +132, +122, +124, +128, +130, +126, +126, +135, +132, +129, +130, +133, +143, +149, +138, +136, +139, +139, +132, +132, +140, +141, +134, +134, +144, +136, +130, +127, +128, +128, +121, +115, +124, +128, +130, +131, +129, +133, +133, +131, +123, +122, +124, +128, +129, +136, +139, +134, +133, +138, +141, +135, +128, +133, +129, +131, +136, +139, +138, +129, +134, +138, +131, +130, +133, +129, +132, +131, +130, +131, +137, +138, +147, +144, +132, +140, +129, +126, +135, +136, +129, +134, +135, +130, +135, +126, +128, +127, +118, +116, +111, +114, +113, +118, +115, +123, +125, +119, +127, +123, +120, +127, +127, +122, +128, +129, +128, +126, +129, +122, +114, +123, +126, +128, +123, +116, +125, +128, +122, +116, +117, +125, +126, +121, +121, +125, +123, +120, +122, +125, +126, +131, +137, +140, +134, +128, +124, +123, +127, +132, +126, +121, +123, +128, +123, +121, +122, +121, +114, +104, +104, +103, +109, +113, +123, +126, +112, +117, +125, +122, +124, +122, +130, +131, +125, +129, +125, +123, +128, +134, +119, +112, +114, +112, +113, +126, +127, +120, +130, +127, +120, +123, +132, +123, +122, +125, +132, +129, +127, +137, +142, +148, +145, +145, +134, +129, +133, +133, +138, +139, +137, +136, +131, +128, +131, +130, +122, +115, +116, +126, +129, +124, +131, +132, +134, +136, +124, +124, +133, +128, +123, +131, +139, +142, +133, +131, +138, +141, +136, +136, +138, +128, +124, +131, +137, +138, +130, +129, +130, +134, +137, +126, +130, +132, +131, +135, +136, +142, +141, +149, +147, +144, +138, +134, +130, +131, +143, +135, +136, +133, +136, +139, +127, +119, +126, +130, +124, +111, +109, +116, +113, +117, +115, +120, +112, +114, +113, +117, +118, +112, +112, +120, +129, +123, +122, +123, +124, +119, +125, +124, +127, +125, +127, +122, +119, +120, +119, +116, +121, +123, +125, +124, +115, +118, +113, +114, +121, +132, +133, +133, +133, +130, +123, +118, +126, +127, +120, +125, +128, +124, +127, +121, +126, +128, +114, +107, +104, +107, +113, +114, +118, +124, +123, +118, +113, +118, +119, +117, +119, +121, +121, +125, +131, +129, +121, +130, +128, +126, +132, +130, +134, +134, +131, +123, +128, +128, +131, +128, +130, +129, +132, +133, +129, +132, +138, +144, +138, +140, +135, +135, +136, +138, +138, +129, +135, +135, +137, +139, +133, +132, +126, +125, +132, +120, +110, +112, +120, +125, +118, +126, +133, +128, +125, +126, +127, +124, +123, +134, +138, +137, +138, +142, +137, +136, +134, +136, +136, +125, +129, +133, +137, +135, +136, +130, +130, +133, +134, +137, +137, +136, +132, +134, +137, +133, +128, +135, +147, +149, +149, +149, +145, +141, +127, +129, +133, +131, +136, +135, +136, +127, +127, +126, +122, +120, +123, +128, +122, +118, +116, +112, +110, +118, +125, +123, +124, +119, +127, +125, +119, +126, +127, +126, +122, +129, +124, +126, +132, +128, +127, +124, +120, +124, +124, +116, +121, +124, +121, +120, +122, +129, +123, +120, +131, +120, +123, +133, +136, +133, +128, +131, +123, +119, +121, +126, +125, +125, +125, +127, +126, +123, +119, +113, +121, +121, +110, +109, +107, +103, +109, +109, +120, +120, +117, +116, +117, +118, +114, +115, +116, +119, +121, +127, +127, +124, +126, +122, +125, +128, +127, +125, +131, +129, +131, +127, +122, +131, +129, +130, +135, +133, +130, +125, +123, +132, +136, +142, +141, +133, +134, +133, +127, +131, +135, +132, +135, +135, +137, +131, +127, +123, +123, +129, +132, +129, +127, +126, +125, +133, +128, +122, +121, +118, +121, +123, +127, +129, +133, +133, +131, +132, +134, +131, +126, +126, +131, +134, +133, +136, +134, +129, +131, +131, +135, +134, +131, +133, +132, +138, +141, +136, +136, +129, +132, +142, +148, +152, +146, +141, +137, +132, +132, +140, +137, +138, +133, +135, +140, +135, +134, +126, +125, +134, +124, +111, +109, +110, +126, +123, +122, +124, +126, +118, +124, +125, +117, +123, +125, +126, +128, +136, +136, +136, +130, +123, +133, +130, +115, +114, +112, +112, +117, +125, +125, +128, +130, +123, +122, +122, +118, +123, +118, +115, +127, +136, +138, +135, +136, +126, +127, +122, +120, +125, +128, +129, +125, +127, +116, +116, +113, +117, +119, +116, +112, +103, +102, +106, +109, +115, +118, +119, +122, +119, +119, +124, +117, +119, +123, +123, +129, +131, +129, +127, +128, +128, +129, +127, +125, +121, +123, +128, +127, +132, +125, +124, +129, +126, +130, +133, +131, +122, +126, +139, +145, +140, +140, +138, +136, +134, +133, +136, +136, +133, +137, +140, +133, +130, +128, +126, +128, +128, +126, +126, +121, +116, +115, +116, +116, +124, +122, +126, +131, +126, +129, +126, +125, +123, +118, +126, +135, +144, +150, +141, +134, +136, +128, +130, +129, +124, +130, +131, +128, +118, +123, +123, +124, +128, +131, +134, +130, +122, +122, +133, +136, +143, +144, +139, +135, +132, +132, +131, +133, +133, +135, +138, +139, +134, +130, +130, +132, +127, +120, +118, +115, +115, +119, +128, +125, +120, +121, +125, +125, +122, +128, +127, +122, +133, +137, +136, +130, +131, +138, +134, +129, +132, +131, +126, +126, +128, +131, +130, +127, +128, +125, +123, +126, +126, +122, +122, +123, +131, +139, +141, +136, +128, +128, +127, +124, +129, +129, +132, +129, +131, +133, +129, +124, +118, +122, +123, +125, +117, +107, +106, +106, +112, +115, +118, +122, +118, +115, +119, +123, +120, +112, +115, +123, +125, +123, +128, +120, +117, +124, +128, +126, +119, +123, +122, +130, +130, +126, +122, +125, +123, +127, +128, +126, +131, +128, +122, +127, +137, +139, +134, +129, +131, +131, +135, +133, +129, +126, +124, +128, +129, +128, +125, +121, +123, +120, +120, +128, +128, +118, +108, +104, +118, +121, +117, +121, +123, +130, +128, +121, +121, +125, +127, +127, +131, +135, +133, +135, +132, +133, +137, +139, +137, +127, +120, +125, +134, +136, +137, +136, +138, +136, +139, +142, +136, +122, +125, +141, +148, +149, +144, +147, +142, +137, +136, +132, +133, +130, +139, +140, +135, +137, +129, +125, +127, +129, +129, +124, +117, +114, +115, +114, +125, +127, +127, +129, +128, +129, +129, +124, +120, +125, +128, +135, +135, +134, +135, +128, +128, +131, +125, +126, +127, +129, +131, +126, +127, +127, +124, +126, +131, +130, +128, +127, +125, +124, +135, +145, +142, +138, +133, +132, +129, +124, +125, +131, +131, +129, +126, +128, +129, +120, +116, +113, +119, +119, +120, +119, +110, +112, +108, +108, +109, +108, +109, +111, +122, +120, +122, +123, +119, +118, +117, +120, +124, +128, +127, +124, +125, +121, +125, +127, +129, +131, +128, +122, +121, +126, +126, +129, +127, +130, +129, +125, +123, +126, +135, +143, +139, +134, +128, +129, +134, +130, +130, +131, +128, +131, +137, +133, +127, +125, +122, +122, +127, +126, +121, +114, +112, +111, +117, +122, +121, +124, +125, +128, +123, +125, +124, +119, +125, +129, +130, +130, +130, +131, +129, +131, +137, +135, +126, +124, +124, +124, +127, +128, +130, +130, +133, +137, +133, +131, +129, +122, +127, +135, +147, +150, +143, +144, +140, +140, +135, +136, +130, +131, +136, +138, +134, +135, +132, +124, +126, +127, +126, +122, +114, +112, +115, +115, +122, +132, +137, +138, +140, +132, +125, +125, +117, +123, +130, +134, +139, +133, +121, +119, +123, +120, +120, +122, +128, +124, +123, +124, +123, +125, +124, +120, +121, +127, +130, +131, +120, +120, +132, +143, +145, +142, +138, +131, +134, +131, +127, +126, +128, +133, +136, +134, +130, +119, +117, +120, +121, +123, +124, +119, +107, +106, +112, +118, +121, +123, +121, +124, +129, +126, +119, +115, +116, +121, +129, +132, +131, +130, +125, +122, +124, +129, +135, +135, +133, +121, +116, +117, +118, +119, +124, +128, +129, +132, +133, +129, +125, +128, +134, +140, +140, +136, +134, +133, +135, +131, +129, +132, +130, +131, +130, +129, +125, +123, +120, +121, +123, +121, +116, +109, +109, +109, +111, +114, +117, +114, +119, +121, +121, +121, +122, +123, +126, +127, +132, +136, +129, +126, +127, +129, +129, +134, +131, +130, +128, +132, +132, +128, +129, +132, +132, +132, +134, +130, +126, +124, +131, +139, +142, +143, +142, +139, +133, +131, +134, +130, +133, +137, +136, +133, +127, +132, +132, +129, +124, +117, +111, +118, +121, +124, +128, +128, +126, +124, +124, +125, +126, +123, +129, +133, +130, +131, +128, +124, +128, +133, +127, +128, +132, +135, +136, +126, +131, +132, +127, +129, +125, +126, +126, +130, +130, +131, +129, +138, +140, +137, +138, +136, +132, +128, +126, +130, +135, +134, +129, +128, +126, +123, +122, +123, +125, +125, +127, +122, +113, +108, +110, +112, +115, +120, +121, +121, +124, +121, +121, +120, +119, +119, +120, +122, +127, +127, +125, +127, +124, +127, +120, +119, +127, +127, +125, +124, +123, +121, +125, +127, +130, +132, +136, +127, +123, +127, +128, +128, +124, +130, +143, +145, +138, +137, +140, +134, +129, +129, +128, +127, +132, +130, +130, +129, +124, +124, +120, +121, +123, +124, +119, +117, +116, +114, +114, +119, +122, +124, +125, +127, +127, +126, +125, +127, +130, +127, +132, +130, +130, +135, +131, +132, +129, +129, +131, +127, +126, +129, +125, +125, +127, +128, +128, +130, +133, +134, +130, +128, +135, +145, +144, +145, +138, +129, +126, +130, +129, +136, +139, +139, +136, +132, +132, +125, +124, +123, +125, +131, +127, +115, +108, +110, +117, +119, +116, +121, +124, +126, +129, +125, +123, +123, +122, +121, +125, +136, +135, +130, +130, +132, +136, +134, +134, +127, +125, +127, +130, +129, +131, +133, +129, +126, +127, +130, +128, +123, +126, +133, +135, +140, +139, +138, +137, +131, +132, +130, +126, +126, +129, +127, +124, +124, +121, +123, +118, +120, +122, +120, +118, +117, +125, +118, +106, +104, +105, +111, +114, +116, +120, +121, +121, +120, +117, +118, +114, +118, +125, +122, +126, +123, +124, +125, +120, +122, +125, +126, +122, +124, +125, +125, +124, +127, +130, +125, +123, +123, +132, +141, +139, +138, +139, +134, +133, +129, +125, +131, +132, +133, +132, +135, +135, +130, +125, +123, +129, +129, +120, +107, +111, +115, +120, +127, +130, +125, +122, +128, +124, +124, +123, +123, +127, +131, +133, +132, +131, +127, +128, +137, +140, +134, +129, +120, +119, +125, +125, +126, +129, +138, +140, +134, +135, +135, +133, +126, +124, +133, +144, +146, +140, +142, +140, +135, +131, +129, +132, +131, +136, +139, +136, +134, +127, +121, +123, +126, +126, +127, +119, +114, +115, +117, +122, +120, +120, +123, +124, +126, +128, +128, +129, +132, +127, +128, +132, +132, +130, +128, +128, +130, +133, +134, +131, +133, +128, +126, +123, +126, +126, +128, +132, +133, +132, +125, +124, +121, +125, +134, +142, +141, +140, +138, +134, +129, +128, +131, +127, +129, +129, +136, +132, +124, +121, +120, +116, +116, +124, +125, +118, +109, +106, +108, +108, +112, +119, +124, +124, +122, +127, +125, +118, +115, +120, +130, +138, +144, +143, +136, +130, +124, +120, +124, +127, +120, +118, +117, +115, +120, +121, +118, +123, +127, +126, +124, +117, +115, +119, +130, +138, +142, +139, +137, +132, +128, +130, +129, +128, +130, +131, +132, +133, +128, +124, +121, +125, +127, +123, +117, +111, +110, +111, +115, +120, +125, +125, +122, +126, +128, +125, +123, +124, +129, +136, +139, +138, +139, +134, +131, +130, +129, +129, +129, +130, +131, +134, +132, +132, +127, +126, +130, +131, +130, +126, +127, +137, +141, +145, +138, +131, +132, +134, +135, +133, +136, +138, +137, +136, +135, +129, +128, +131, +130, +129, +129, +131, +123, +114, +113, +115, +115, +120, +124, +129, +129, +122, +120, +121, +125, +123, +118, +123, +130, +130, +128, +126, +121, +126, +127, +122, +125, +131, +133, +134, +131, +126, +125, +125, +125, +126, +130, +132, +129, +123, +125, +132, +135, +136, +134, +132, +129, +129, +127, +128, +127, +127, +126, +125, +127, +125, +121, +121, +121, +123, +126, +128, +120, +110, +103, +104, +111, +116, +122, +124, +123, +121, +122, +122, +120, +122, +121, +125, +130, +126, +127, +128, +130, +129, +127, +126, +129, +125, +126, +130, +129, +131, +130, +129, +132, +135, +129, +123, +125, +133, +138, +137, +139, +138, +133, +131, +130, +134, +133, +131, +135, +135, +134, +128, +126, +122, +120, +119, +125, +131, +120, +109, +105, +109, +116, +120, +119, +123, +126, +128, +127, +127, +123, +121, +120, +125, +131, +135, +134, +133, +133, +131, +132, +131, +131, +130, +130, +129, +132, +132, +130, +129, +126, +130, +129, +130, +132, +129, +130, +139, +145, +146, +143, +142, +139, +135, +135, +133, +131, +132, +133, +133, +136, +135, +127, +120, +122, +126, +127, +124, +119, +119, +119, +121, +115, +105, +102, +108, +114, +121, +123, +125, +123, +122, +122, +123, +122, +119, +125, +127, +130, +130, +132, +129, +126, +127, +127, +128, +128, +128, +128, +129, +127, +128, +128, +129, +124, +126, +134, +141, +141, +137, +132, +130, +131, +128, +130, +136, +137, +136, +132, +132, +130, +128, +125, +124, +123, +126, +129, +127, +121, +114, +108, +110, +117, +117, +120, +121, +124, +122, +122, +124, +126, +120, +117, +123, +127, +125, +127, +132, +133, +130, +122, +118, +120, +121, +122, +129, +130, +128, +130, +128, +128, +127, +127, +125, +123, +127, +137, +142, +139, +134, +134, +132, +129, +129, +130, +131, +133, +133, +134, +133, +126, +123, +124, +126, +127, +129, +124, +120, +123, +119, +120, +123, +124, +123, +122, +127, +126, +122, +119, +115, +118, +117, +118, +120, +125, +124, +123, +125, +127, +124, +120, +120, +124, +126, +128, +127, +128, +127, +129, +130, +128, +132, +130, +127, +132, +140, +145, +145, +140, +137, +136, +130, +129, +129, +130, +135, +135, +136, +134, +131, +130, +128, +127, +125, +126, +130, +131, +122, +118, +119, +119, +121, +122, +126, +127, +133, +129, +126, +123, +123, +124, +131, +137, +135, +130, +130, +133, +135, +141, +138, +129, +119, +117, +123, +124, +123, +125, +126, +130, +133, +134, +128, +120, +125, +134, +142, +139, +136, +135, +134, +132, +133, +133, +128, +127, +130, +130, +132, +128, +125, +122, +121, +120, +124, +125, +115, +107, +105, +106, +109, +111, +112, +115, +119, +121, +125, +123, +124, +124, +123, +126, +129, +131, +129, +129, +130, +131, +134, +129, +123, +123, +125, +126, +126, +125, +125, +124, +125, +128, +127, +125, +123, +130, +134, +137, +135, +134, +135, +129, +130, +131, +133, +132, +131, +133, +132, +130, +127, +125, +123, +123, +125, +122, +117, +116, +115, +115, +116, +116, +116, +123, +124, +126, +128, +129, +125, +124, +124, +128, +131, +132, +134, +134, +135, +136, +135, +136, +142, +141, +129, +123, +125, +128, +130, +129, +132, +137, +135, +130, +130, +136, +141, +137, +133, +133, +133, +132, +131, +130, +131, +133, +132, +128, +129, +130, +125, +125, +125, +125, +128, +128, +126, +117, +114, +112, +111, +111, +117, +123, +122, +125, +127, +127, +121, +118, +121, +122, +126, +128, +129, +129, +126, +127, +129, +134, +133, +124, +121, +122, +127, +129, +130, +132, +131, +129, +130, +131, +127, +127, +122, +124, +133, +142, +145, +140, +137, +132, +129, +128, +127, +128, +130, +133, +133, +133, +125, +119, +121, +119, +120, +122, +124, +127, +121, +113, +109, +108, +109, +114, +120, +127, +128, +130, +129, +121, +119, +121, +126, +130, +133, +134, +134, +130, +126, +126, +127, +125, +126, +127, +127, +130, +129, +129, +125, +124, +125, +127, +127, +122, +124, +133, +142, +141, +134, +133, +132, +130, +130, +130, +132, +132, +133, +134, +134, +130, +126, +122, +121, +122, +125, +125, +121, +122, +120, +115, +108, +105, +107, +112, +118, +123, +125, +126, +124, +120, +121, +122, +123, +124, +130, +133, +132, +131, +131, +133, +130, +127, +128, +129, +133, +133, +132, +132, +131, +130, +129, +132, +131, +128, +132, +138, +142, +144, +139, +134, +133, +131, +134, +131, +130, +131, +133, +135, +133, +129, +126, +121, +123, +124, +124, +123, +122, +123, +125, +121, +110, +106, +108, +116, +119, +125, +127, +125, +121, +122, +124, +123, +121, +123, +126, +127, +132, +131, +126, +125, +123, +123, +125, +129, +131, +130, +129, +127, +129, +130, +128, +125, +129, +134, +142, +144, +140, +136, +133, +131, +130, +132, +130, +131, +132, +133, +136, +137, +132, +126, +122, +122, +127, +127, +118, +112, +114, +117, +120, +125, +124, +122, +120, +120, +123, +124, +123, +123, +121, +125, +128, +131, +131, +133, +136, +133, +125, +117, +112, +113, +122, +128, +135, +136, +131, +130, +129, +127, +124, +125, +122, +124, +132, +143, +145, +139, +137, +132, +128, +126, +128, +131, +131, +130, +132, +132, +130, +129, +126, +122, +123, +126, +126, +123, +115, +110, +112, +115, +117, +120, +122, +125, +126, +126, +128, +126, +126, +125, +127, +130, +131, +134, +133, +131, +131, +131, +131, +127, +127, +126, +126, +127, +127, +125, +126, +130, +130, +125, +126, +128, +123, +123, +132, +142, +144, +141, +137, +134, +132, +129, +131, +134, +136, +135, +136, +136, +131, +123, +120, +119, +126, +131, +125, +113, +108, +110, +114, +118, +119, +124, +125, +125, +124, +122, +119, +115, +120, +133, +144, +148, +141, +135, +131, +126, +123, +129, +130, +125, +120, +121, +121, +121, +118, +122, +125, +127, +125, +126, +124, +117, +118, +128, +136, +139, +142, +140, +135, +130, +128, +128, +125, +127, +131, +135, +138, +134, +128, +121, +118, +122, +126, +124, +115, +109, +112, +114, +115, +120, +122, +123, +123, +128, +129, +128, +126, +128, +131, +135, +137, +135, +132, +133, +132, +131, +130, +129, +130, +132, +134, +134, +131, +126, +124, +125, +128, +130, +125, +127, +136, +142, +141, +137, +132, +131, +129, +127, +131, +133, +133, +133, +132, +132, +130, +128, +125, +124, +122, +124, +126, +128, +121, +112, +108, +110, +112, +113, +118, +123, +122, +122, +119, +120, +118, +119, +121, +123, +125, +125, +126, +126, +127, +126, +125, +125, +125, +126, +128, +131, +129, +130, +133, +133, +129, +129, +131, +131, +126, +126, +130, +138, +139, +137, +136, +133, +129, +126, +129, +130, +131, +129, +130, +127, +125, +122, +120, +119, +120, +127, +130, +121, +110, +106, +109, +115, +118, +121, +124, +124, +125, +124, +121, +120, +121, +123, +127, +131, +133, +131, +128, +128, +127, +127, +127, +131, +132, +132, +133, +131, +130, +128, +128, +131, +135, +133, +125, +126, +133, +142, +142, +139, +140, +136, +135, +132, +134, +133, +131, +134, +136, +136, +138, +131, +124, +121, +120, +123, +124, +125, +119, +110, +110, +110, +112, +116, +122, +125, +126, +124, +123, +122, +120, +119, +123, +127, +132, +134, +133, +130, +128, +125, +125, +128, +129, +129, +133, +134, +130, +128, +125, +125, +127, +129, +128, +129, +125, +125, +135, +144, +146, +142, +138, +137, +133, +131, +130, +129, +129, +132, +135, +138, +136, +129, +125, +122, +121, +121, +123, +123, +121, +123, +123, +118, +112, +107, +106, +108, +114, +117, +124, +128, +127, +126, +126, +126, +122, +122, +125, +129, +132, +132, +132, +130, +126, +127, +129, +130, +129, +133, +130, +129, +127, +129, +127, +125, +127, +136, +142, +142, +138, +135, +132, +129, +128, +130, +131, +134, +136, +135, +133, +132, +129, +125, +126, +127, +126, +126, +127, +122, +113, +112, +113, +116, +118, +120, +122, +121, +120, +121, +121, +124, +122, +122, +124, +126, +127, +125, +123, +123, +126, +127, +130, +129, +127, +125, +126, +127, +128, +128, +132, +134, +134, +130, +126, +126, +133, +138, +141, +140, +138, +133, +129, +128, +131, +129, +132, +136, +136, +135, +129, +124, +120, +120, +123, +124, +125, +124, +123, +121, +122, +120, +121, +121, +119, +121, +121, +122, +123, +125, +123, +118, +114, +116, +117, +120, +122, +124, +125, +126, +124, +125, +123, +123, +123, +124, +124, +127, +127, +127, +126, +127, +130, +128, +126, +127, +136, +145, +146, +143, +137, +134, +130, +129, +130, +132, +134, +135, +136, +137, +134, +129, +126, +127, +129, +130, +131, +132, +127, +118, +116, +116, +118, +121, +123, +126, +128, +132, +129, +126, +123, +123, +126, +129, +131, +131, +132, +130, +130, +131, +129, +127, +125, +124, +126, +128, +130, +130, +130, +132, +132, +129, +127, +128, +136, +141, +142, +140, +138, +135, +132, +131, +131, +131, +130, +134, +137, +136, +130, +126, +124, +123, +122, +121, +119, +123, +124, +118, +109, +104, +106, +109, +112, +116, +121, +125, +125, +124, +122, +121, +120, +123, +124, +128, +129, +127, +126, +125, +127, +128, +125, +123, +124, +126, +126, +127, +126, +124, +125, +126, +122, +121, +127, +136, +137, +134, +133, +131, +128, +126, +129, +130, +129, +129, +131, +132, +129, +128, +126, +123, +121, +123, +122, +122, +123, +122, +121, +123, +126, +124, +116, +111, +112, +115, +118, +122, +128, +129, +127, +126, +126, +126, +125, +126, +128, +129, +129, +128, +128, +129, +130, +130, +131, +130, +132, +135, +135, +132, +133, +138, +143, +143, +142, +139, +136, +132, +132, +132, +131, +133, +133, +135, +137, +137, +134, +131, +130, +128, +128, +129, +128, +127, +127, +126, +126, +122, +120, +121, +123, +128, +125, +122, +112, +113, +117, +122, +126, +125, +126, +126, +126, +124, +124, +121, +121, +123, +127, +131, +132, +129, +129, +130, +131, +134, +130, +129, +130, +130, +131, +130, +132, +131, +133, +136, +134, +131, +132, +133, +134, +136, +135, +133, +132, +128, +128, +125, +126, +126, +127, +127, +125, +125, +125, +121, +120, +120, +120, +123, +124, +124, +122, +120, +125, +125, +120, +112, +110, +111, +116, +121, +125, +127, +124, +122, +122, +121, +117, +117, +119, +123, +124, +127, +127, +122, +123, +124, +124, +124, +127, +126, +127, +131, +132, +132, +131, +132, +132, +133, +135, +133, +132, +131, +131, +134, +138, +138, +138, +135, +134, +130, +129, +130, +125, +125, +128, +126, +125, +123, +121, +120, +123, +124, +119, +122, +126, +127, +117, +110, +110, +113, +118, +121, +125, +126, +126, +124, +124, +123, +122, +124, +129, +131, +134, +132, +131, +130, +129, +129, +130, +133, +132, +133, +132, +133, +133, +133, +132, +130, +129, +133, +138, +141, +140, +135, +134, +134, +134, +131, +130, +132, +132, +130, +132, +131, +131, +130, +128, +128, +128, +127, +125, +124, +125, +126, +125, +123, +123, +127, +121, +112, +110, +113, +115, +117, +121, +124, +119, +121, +120, +121, +120, +119, +123, +126, +129, +130, +126, +124, +124, +126, +130, +132, +132, +131, +133, +131, +130, +132, +131, +132, +134, +136, +134, +131, +132, +131, +129, +129, +133, +137, +142, +139, +138, +135, +134, +129, +128, +129, +127, +128, +129, +131, +129, +127, +126, +125, +126, +124, +120, +123, +125, +123, +114, +109, +111, +115, +120, +120, +122, +125, +122, +122, +122, +121, +121, +123, +128, +129, +129, +131, +127, +127, +127, +130, +128, +129, +128, +127, +128, +127, +127, +126, +128, +126, +130, +129, +129, +129, +128, +127, +127, +132, +136, +139, +139, +137, +136, +136, +134, +135, +133, +132, +131, +130, +130, +130, +125, +124, +125, +124, +122, +120, +125, +125, +120, +109, +108, +108, +110, +117, +119, +123, +122, +121, +123, +120, +121, +121, +123, +127, +127, +128, +127, +127, +127, +128, +130, +130, +131, +130, +131, +132, +131, +130, +130, +131, +131, +133, +131, +129, +131, +135, +138, +138, +139, +137, +135, +130, +130, +130, +130, +130, +130, +132, +132, +130, +127, +125, +123, +122, +122, +123, +123, +122, +121, +125, +125, +117, +109, +108, +112, +117, +121, +122, +124, +123, +124, +127, +125, +124, +125, +127, +127, +127, +127, +126, +123, +124, +127, +129, +129, +129, +130, +128, +129, +130, +129, +128, +130, +131, +130, +130, +130, +134, +135, +138, +139, +136, +135, +132, +133, +132, +134, +135, +134, +134, +133, +131, +128, +125, +125, +126, +126, +127, +127, +127, +122, +120, +124, +119, +113, +108, +109, +114, +119, +122, +123, +123, +123, +122, +122, +120, +120, +122, +125, +126, +127, +128, +129, +127, +129, +130, +130, +131, +129, +129, +130, +132, +132, +131, +134, +137, +137, +134, +134, +132, +134, +133, +132, +130, +127, +129, +132, +134, +133, +132, +129, +128, +130, +127, +127, +125, +124, +124, +124, +125, +124, +124, +120, +124, +128, +124, +117, +112, +113, +117, +119, +124, +125, +124, +124, +123, +125, +124, +121, +124, +124, +126, +126, +126, +126, +126, +126, +126, +128, +129, +129, +129, +128, +131, +130, +128, +128, +130, +130, +132, +133, +134, +139, +143, +145, +143, +139, +135, +133, +132, +131, +132, +132, +134, +132, +132, +131, +128, +127, +125, +124, +125, +123, +126, +124, +124, +122, +120, +123, +124, +120, +112, +108, +111, +114, +119, +120, +123, +123, +122, +124, +123, +123, +124, +123, +124, +127, +127, +125, +124, +124, +127, +128, +130, +129, +130, +129, +130, +129, +130, +131, +130, +132, +131, +131, +130, +133, +135, +135, +136, +132, +128, +126, +128, +131, +133, +133, +135, +134, +130, +124, +123, +124, +126, +127, +128, +131, +131, +129, +125, +125, +122, +124, +127, +123, +113, +111, +115, +117, +118, +121, +121, +121, +121, +122, +122, +123, +121, +121, +123, +128, +127, +126, +126, +126, +130, +132, +132, +131, +129, +131, +132, +135, +136, +138, +139, +138, +135, +132, +130, +128, +128, +130, +135, +137, +138, +135, +131, +129, +130, +130, +128, +130, +135, +130, +122, +113, +117, +128, +134, +134, +133, +128, +125, +122, +119, +118, +119, +123, +128, +126, +118, +115, +113, +112, +116, +120, +125, +127, +129, +130, +128, +124, +123, +123, +128, +131, +131, +132, +128, +128, +130, +131, +129, +132, +132, +132, +133, +132, +130, +130, +130, +134, +134, +131, +129, +125, +124, +128, +134, +137, +139, +138, +134, +131, +129, +131, +134, +133, +137, +137, +127, +114, +114, +125, +132, +133, +133, +132, +128, +123, +121, +117, +115, +114, +120, +127, +122, +114, +108, +107, +110, +115, +118, +121, +121, +123, +125, +125, +124, +121, +121, +121, +124, +125, +124, +125, +126, +127, +128, +130, +131, +129, +129, +129, +131, +131, +133, +132, +134, +135, +131, +129, +128, +126, +128, +129, +132, +132, +129, +127, +126, +130, +131, +136, +139, +134, +121, +110, +116, +127, +134, +136, +135, +135, +130, +127, +122, +120, +116, +117, +125, +134, +130, +119, +111, +110, +111, +116, +120, +123, +125, +127, +127, +127, +121, +120, +119, +122, +127, +131, +132, +132, +131, +131, +133, +133, +131, +132, +132, +134, +137, +139, +140, +139, +136, +132, +128, +128, +127, +128, +129, +131, +135, +134, +132, +128, +125, +124, +124, +128, +132, +131, +123, +112, +112, +124, +132, +134, +134, +132, +128, +125, +121, +119, +118, +117, +123, +131, +128, +119, +109, +109, +112, +117, +122, +124, +126, +127, +131, +130, +129, +125, +124, +128, +132, +136, +132, +131, +132, +133, +135, +136, +136, +135, +133, +133, +135, +136, +133, +134, +135, +135, +133, +131, +130, +128, +129, +135, +141, +140, +129, +121, +123, +130, +136, +141, +143, +140, +128, +115, +120, +131, +136, +136, +136, +135, +133, +129, +124, +119, +117, +118, +122, +127, +130, +123, +111, +104, +105, +111, +114, +117, +121, +124, +123, +122, +122, +119, +118, +122, +125, +128, +128, +126, +123, +123, +127, +129, +129, +130, +131, +132, +133, +129, +129, +129, +129, +128, +131, +129, +127, +125, +123, +126, +128, +130, +125, +120, +123, +128, +133, +137, +137, +128, +124, +124, +124, +120, +122, +129, +134, +133, +132, +128, +122, +118, +119, +120, +120, +122, +125, +126, +118, +108, +106, +108, +113, +117, +122, +125, +127, +127, +125, +122, +121, +122, +124, +128, +130, +131, +130, +129, +128, +130, +130, +131, +132, +133, +135, +137, +137, +135, +135, +138, +137, +134, +132, +134, +137, +138, +136, +131, +129, +127, +127, +129, +130, +132, +132, +131, +130, +128, +127, +128, +123, +115, +109, +116, +129, +138, +137, +132, +128, +122, +120, +118, +118, +118, +124, +129, +126, +118, +112, +111, +114, +118, +125, +129, +130, +131, +132, +130, +127, +127, +126, +129, +132, +135, +135, +135, +134, +134, +135, +135, +136, +138, +139, +138, +137, +138, +139, +141, +140, +137, +132, +128, +125, +123, +122, +122, +124, +126, +128, +131, +133, +135, +134, +136, +137, +135, +133, +132, +133, +130, +118, +111, +116, +128, +137, +137, +131, +125, +120, +115, +115, +115, +116, +120, +126, +127, +119, +110, +106, +107, +112, +119, +126, +128, +129, +129, +126, +124, +121, +122, +127, +132, +137, +136, +133, +130, +129, +130, +131, +131, +130, +129, +131, +131, +129, +127, +129, +130, +128, +128, +127, +128, +124, +122, +122, +123, +123, +125, +127, +126, +125, +127, +130, +133, +131, +128, +126, +127, +126, +120, +111, +106, +112, +125, +135, +137, +131, +124, +118, +116, +115, +116, +117, +122, +129, +129, +120, +112, +110, +112, +117, +125, +130, +129, +126, +126, +127, +126, +126, +128, +131, +135, +139, +138, +133, +129, +129, +132, +136, +138, +139, +136, +132, +129, +128, +129, +130, +131, +132, +132, +132, +130, +126, +124, +124, +123, +124, +125, +125, +122, +123, +127, +127, +126, +125, +127, +131, +134, +128, +118, +113, +112, +115, +122, +133, +140, +138, +132, +128, +123, +120, +120, +121, +125, +134, +137, +130, +121, +117, +118, +122, +126, +131, +133, +131, +131, +131, +131, +132, +133, +133, +136, +138, +137, +135, +132, +131, +131, +133, +135, +135, +134, +132, +128, +124, +123, +126, +130, +133, +135, +136, +135, +130, +126, +125, +128, +130, +129, +128, +130, +132, +131, +129, +128, +130, +132, +131, +133, +132, +125, +113, +104, +109, +121, +133, +136, +134, +130, +123, +118, +114, +113, +114, +117, +125, +133, +132, +120, +111, +111, +114, +121, +127, +131, +131, +130, +130, +128, +125, +123, +125, +129, +131, +130, +128, +125, +123, +125, +127, +129, +128, +126, +127, +128, +126, +126, +127, +128, +131, +135, +134, +130, +125, +123, +125, +126, +122, +121, +123, +128, +130, +129, +125, +123, +125, +131, +136, +139, +134, +124, +115, +111, +115, +124, +134, +142, +143, +139, +134, +127, +119, +116, +119, +122, +125, +134, +135, +125, +112, +110, +114, +116, +120, +127, +130, +130, +129, +128, +126, +123, +124, +127, +132, +135, +133, +130, +126, +127, +131, +134, +136, +135, +134, +132, +130, +129, +127, +128, +133, +135, +133, +129, +123, +119, +118, +120, +121, +119, +121, +127, +131, +129, +123, +119, +122, +131, +140, +141, +138, +131, +125, +123, +126, +124, +117, +115, +126, +141, +146, +138, +129, +121, +118, +120, +123, +122, +123, +127, +127, +121, +116, +114, +114, +117, +123, +129, +131, +129, +127, +129, +130, +130, +128, +128, +130, +133, +134, +131, +132, +132, +132, +133, +134, +135, +133, +131, +133, +135, +136, +134, +133, +131, +129, +126, +127, +127, +127, +128, +128, +127, +124, +123, +126, +127, +127, +124, +125, +129, +134, +136, +134, +130, +124, +121, +124, +126, +125, +116, +108, +114, +128, +136, +134, +128, +126, +125, +125, +124, +121, +119, +123, +128, +126, +120, +116, +116, +116, +121, +127, +131, +129, +128, +130, +131, +131, +128, +128, +129, +132, +133, +134, +132, +133, +133, +130, +123, +121, +121, +125, +127, +130, +133, +132, +130, +129, +129, +130, +131, +131, +129, +129, +127, +121, +118, +122, +127, +130, +129, +129, +130, +129, +131, +135, +136, +135, +132, +130, +130, +131, +130, +124, +112, +107, +116, +131, +137, +135, +131, +127, +123, +120, +121, +120, +119, +121, +130, +131, +123, +111, +108, +114, +122, +127, +132, +132, +132, +132, +131, +129, +125, +123, +127, +130, +130, +128, +128, +127, +129, +128, +126, +119, +115, +116, +120, +123, +126, +129, +129, +130, +132, +132, +129, +127, +127, +126, +126, +126, +128, +130, +130, +126, +125, +125, +127, +126, +128, +130, +130, +131, +131, +130, +131, +131, +129, +122, +113, +108, +111, +121, +131, +139, +140, +136, +130, +125, +122, +121, +120, +122, +131, +137, +134, +124, +117, +116, +119, +124, +129, +130, +130, +129, +131, +129, +126, +123, +123, +125, +129, +133, +134, +134, +131, +128, +124, +121, +120, +123, +126, +129, +130, +132, +133, +132, +132, +132, +133, +133, +133, +132, +130, +129, +127, +127, +130, +130, +130, +130, +128, +129, +131, +133, +131, +130, +133, +134, +132, +132, +132, +125, +116, +109, +111, +121, +130, +136, +137, +131, +125, +121, +120, +121, +124, +124, +127, +134, +134, +124, +114, +110, +113, +119, +126, +130, +131, +127, +127, +127, +126, +126, +125, +126, +128, +129, +127, +127, +128, +129, +131, +128, +127, +125, +126, +127, +130, +131, +131, +129, +131, +135, +136, +137, +135, +133, +132, +132, +133, +132, +133, +132, +126, +121, +121, +125, +127, +130, +127, +125, +128, +131, +128, +128, +126, +121, +114, +110, +110, +116, +126, +133, +138, +138, +134, +129, +122, +119, +120, +122, +124, +131, +136, +131, +119, +111, +110, +113, +118, +123, +127, +129, +128, +129, +127, +125, +122, +122, +125, +127, +129, +133, +136, +137, +134, +130, +128, +124, +124, +125, +127, +130, +131, +133, +134, +134, +134, +132, +131, +127, +124, +123, +124, +130, +132, +130, +123, +119, +120, +122, +126, +128, +128, +127, +131, +135, +137, +135, +132, +127, +121, +120, +123, +118, +114, +119, +131, +138, +136, +133, +129, +125, +123, +124, +125, +123, +124, +129, +130, +123, +119, +117, +118, +121, +125, +130, +129, +128, +128, +129, +129, +127, +124, +124, +126, +131, +131, +129, +127, +128, +128, +127, +127, +127, +126, +127, +128, +130, +128, +128, +131, +134, +135, +133, +130, +127, +125, +125, +127, +131, +130, +129, +126, +128, +130, +133, +132, +128, +123, +118, +114, +117, +124, +133, +136, +135, +133, +128, +118, +112, +112, +113, +113, +124, +139, +146, +141, +133, +126, +122, +120, +121, +124, +127, +135, +137, +128, +118, +113, +113, +115, +122, +131, +134, +132, +130, +128, +126, +124, +125, +127, +131, +135, +135, +135, +135, +134, +133, +130, +130, +131, +129, +127, +127, +129, +129, +129, +128, +126, +124, +127, +130, +132, +131, +132, +132, +133, +133, +132, +128, +125, +124, +129, +132, +133, +130, +125, +122, +120, +120, +122, +129, +135, +135, +130, +128, +126, +120, +112, +108, +108, +117, +130, +142, +144, +137, +131, +126, +122, +120, +123, +124, +129, +138, +141, +132, +119, +114, +114, +119, +124, +128, +128, +127, +126, +125, +123, +120, +120, +123, +128, +132, +132, +130, +129, +129, +130, +129, +128, +125, +126, +130, +135, +134, +131, +130, +129, +129, +129, +129, +128, +128, +129, +133, +134, +129, +122, +117, +117, +120, +125, +129, +130, +127, +124, +120, +115, +112, +114, +122, +130, +133, +134, +131, +129, +124, +116, +110, +109, +111, +121, +136, +147, +147, +139, +131, +126, +121, +120, +122, +125, +130, +135, +135, +125, +113, +110, +112, +116, +122, +126, +128, +127, +128, +127, +125, +123, +122, +126, +130, +132, +132, +133, +133, +130, +127, +124, +125, +127, +131, +132, +133, +130, +130, +130, +131, +130, +127, +124, +124, +127, +130, +132, +132, +130, +128, +126, +127, +124, +125, +128, +133, +131, +126, +122, +120, +120, +124, +129, +136, +139, +138, +137, +134, +126, +116, +111, +112, +117, +127, +141, +146, +143, +136, +131, +126, +121, +119, +120, +124, +131, +139, +138, +125, +114, +108, +112, +116, +123, +128, +130, +130, +127, +126, +122, +120, +121, +124, +129, +132, +134, +135, +134, +130, +127, +128, +130, +131, +131, +131, +131, +130, +130, +131, +130, +129, +128, +131, +131, +131, +130, +129, +129, +131, +133, +132, +132, +132, +135, +136, +132, +124, +119, +120, +122, +124, +125, +129, +132, +133, +133, +132, +126, +115, +106, +107, +110, +116, +125, +138, +143, +141, +134, +129, +121, +117, +118, +124, +127, +132, +137, +134, +124, +116, +115, +116, +118, +123, +127, +129, +127, +127, +125, +122, +121, +123, +126, +131, +132, +132, +130, +128, +128, +130, +133, +135, +133, +129, +128, +128, +131, +132, +132, +129, +127, +129, +129, +128, +128, +128, +130, +129, +126, +123, +122, +122, +126, +128, +129, +127, +122, +119, +118, +117, +118, +119, +125, +133, +137, +136, +133, +124, +112, +110, +119, +125, +121, +117, +124, +134, +139, +138, +133, +128, +125, +125, +129, +130, +130, +130, +133, +131, +125, +121, +120, +119, +123, +129, +131, +130, +129, +127, +128, +127, +128, +128, +130, +133, +134, +131, +128, +126, +127, +126, +127, +127, +128, +129, +130, +130, +127, +126, +126, +127, +128, +130, +132, +132, +132, +130, +130, +130, +129, +128, +128, +128, +127, +124, +124, +127, +128, +126, +121, +120, +120, +121, +123, +122, +125, +128, +133, +134, +133, +129, +126, +125, +126, +125, +123, +121, +120, +124, +135, +143, +143, +136, +130, +129, +126, +123, +119, +119, +124, +129, +127, +120, +116, +116, +118, +120, +127, +128, +127, +127, +127, +128, +125, +123, +122, +124, +128, +130, +132, +132, +131, +128, +124, +121, +123, +125, +128, +130, +130, +131, +129, +127, +126, +127, +129, +132, +135, +137, +137, +137, +135, +133, +131, +129, +127, +127, +130, +131, +129, +126, +123, +121, +122, +121, +120, +118, +116, +120, +125, +130, +130, +130, +128, +125, +122, +122, +123, +122, +120, +119, +120, +129, +138, +140, +137, +132, +128, +125, +122, +122, +121, +123, +130, +134, +129, +120, +116, +117, +119, +121, +125, +125, +125, +125, +126, +126, +126, +126, +128, +129, +130, +130, +130, +129, +128, +128, +130, +132, +134, +133, +132, +131, +131, +130, +126, +125, +126, +129, +132, +133, +133, +132, +131, +131, +130, +128, +127, +125, +125, +128, +129, +127, +123, +124, +127, +128, +123, +120, +118, +120, +123, +127, +131, +133, +134, +132, +129, +127, +130, +129, +124, +121, +120, +120, +121, +130, +138, +139, +134, +131, +129, +126, +123, +124, +124, +127, +132, +131, +122, +113, +113, +116, +121, +125, +127, +125, +124, +123, +124, +123, +120, +121, +123, +128, +130, +130, +129, +129, +129, +128, +127, +127, +130, +131, +132, +130, +129, +128, +127, +128, +128, +130, +133, +134, +135, +133, +133, +130, +129, +129, +130, +129, +126, +122, +125, +129, +132, +131, +127, +123, +119, +119, +119, +120, +124, +130, +135, +136, +135, +130, +129, +129, +129, +123, +117, +114, +115, +117, +125, +136, +142, +138, +135, +131, +128, +123, +119, +120, +121, +128, +135, +135, +125, +117, +116, +118, +120, +124, +126, +127, +128, +129, +129, +126, +123, +122, +125, +130, +133, +133, +130, +128, +127, +129, +131, +131, +131, +130, +131, +133, +132, +130, +127, +128, +130, +133, +134, +134, +131, +131, +130, +130, +128, +126, +126, +126, +126, +126, +126, +125, +125, +125, +123, +119, +116, +115, +116, +121, +128, +130, +131, +130, +130, +131, +131, +130, +124, +118, +116, +121, +122, +122, +128, +136, +140, +138, +135, +129, +124, +121, +124, +127, +128, +133, +137, +132, +121, +116, +115, +117, +120, +126, +129, +129, +127, +127, +126, +124, +125, +127, +128, +129, +129, +129, +128, +128, +128, +128, +128, +129, +131, +131, +130, +129, +129, +128, +129, +128, +128, +127, +130, +133, +135, +132, +129, +127, +128, +129, +129, +128, +128, +128, +127, +126, +122, +121, +122, +124, +124, +121, +119, +119, +120, +124, +126, +128, +126, +126, +128, +131, +134, +134, +134, +134, +131, +123, +116, +115, +119, +121, +126, +136, +143, +143, +137, +131, +127, +123, +122, +125, +127, +129, +133, +131, +123, +113, +112, +114, +120, +126, +131, +133, +131, +129, +127, +125, +124, +125, +127, +130, +133, +132, +130, +128, +128, +128, +129, +129, +129, +128, +129, +130, +131, +129, +129, +128, +130, +131, +133, +133, +134, +132, +131, +131, +131, +131, +130, +129, +128, +127, +125, +121, +118, +119, +121, +123, +122, +120, +117, +115, +117, +118, +119, +121, +122, +125, +125, +127, +128, +129, +131, +131, +132, +129, +124, +118, +116, +117, +119, +122, +130, +138, +142, +140, +135, +129, +124, +122, +123, +127, +130, +133, +135, +133, +123, +113, +111, +114, +119, +126, +131, +133, +132, +131, +128, +127, +125, +124, +123, +126, +127, +127, +126, +125, +125, +127, +128, +128, +128, +128, +130, +131, +133, +132, +131, +132, +134, +137, +137, +134, +132, +131, +133, +133, +133, +130, +128, +127, +129, +129, +127, +124, +127, +130, +130, +125, +119, +118, +119, +122, +124, +126, +125, +124, +125, +125, +127, +128, +130, +132, +134, +134, +130, +119, +112, +112, +116, +117, +120, +130, +140, +144, +140, +135, +128, +123, +121, +123, +127, +128, +131, +134, +131, +121, +113, +112, +114, +119, +125, +130, +131, +129, +128, +127, +125, +124, +124, +126, +128, +129, +129, +126, +125, +125, +128, +131, +131, +128, +128, +131, +133, +132, +132, +132, +133, +135, +134, +134, +131, +131, +131, +132, +132, +132, +130, +127, +125, +124, +124, +124, +122, +122, +122, +123, +120, +117, +116, +116, +120, +123, +125, +124, +123, +123, +126, +129, +130, +130, +130, +133, +134, +130, +122, +116, +117, +119, +121, +127, +135, +143, +143, +140, +136, +131, +125, +123, +125, +128, +130, +133, +134, +129, +118, +111, +111, +115, +121, +127, +131, +131, +130, +131, +129, +127, +125, +125, +128, +130, +128, +126, +125, +124, +126, +127, +129, +127, +126, +126, +126, +126, +125, +127, +129, +132, +134, +133, +132, +131, +130, +130, +131, +132, +130, +128, +126, +126, +126, +126, +129, +131, +131, +129, +123, +119, +118, +118, +122, +125, +130, +131, +129, +127, +124, +123, +125, +130, +133, +136, +135, +132, +126, +124, +123, +121, +120, +121, +123, +123, +125, +133, +139, +139, +133, +130, +127, +124, +123, +122, +123, +126, +129, +128, +120, +114, +114, +117, +120, +126, +130, +131, +130, +132, +132, +131, +128, +125, +127, +128, +130, +130, +127, +125, +127, +128, +128, +125, +126, +129, +133, +136, +139, +137, +135, +133, +133, +132, +131, +129, +128, +126, +128, +128, +127, +128, +128, +128, +127, +126, +126, +125, +124, +125, +125, +123, +120, +120, +120, +121, +122, +122, +123, +122, +124, +126, +127, +125, +126, +129, +132, +134, +134, +131, +130, +126, +125, +126, +127, +125, +123, +121, +121, +120, +126, +134, +139, +139, +136, +133, +128, +124, +122, +123, +124, +127, +134, +134, +127, +119, +116, +118, +120, +125, +130, +132, +130, +126, +122, +119, +117, +118, +121, +124, +126, +126, +124, +124, +123, +125, +127, +128, +131, +133, +136, +136, +136, +134, +134, +134, +133, +133, +130, +128, +125, +125, +127, +129, +130, +128, +127, +126, +126, +125, +126, +127, +128, +129, +129, +126, +125, +122, +122, +122, +125, +124, +121, +121, +120, +121, +123, +124, +124, +125, +126, +127, +128, +128, +129, +128, +129, +129, +131, +132, +129, +125, +120, +120, +126, +134, +141, +142, +140, +136, +133, +129, +126, +124, +124, +126, +128, +131, +131, +128, +119, +112, +111, +113, +117, +120, +124, +127, +127, +125, +122, +120, +120, +123, +125, +127, +127, +127, +126, +126, +128, +130, +131, +133, +133, +134, +136, +137, +137, +134, +131, +129, +129, +128, +126, +125, +126, +128, +129, +130, +129, +127, +126, +129, +132, +132, +131, +129, +127, +127, +126, +126, +125, +125, +123, +122, +121, +121, +121, +121, +121, +123, +123, +125, +126, +125, +126, +126, +129, +131, +134, +134, +133, +129, +125, +121, +121, +124, +129, +137, +142, +144, +140, +136, +131, +128, +125, +125, +126, +129, +128, +126, +125, +125, +121, +116, +112, +112, +116, +120, +124, +126, +125, +124, +122, +122, +122, +122, +122, +123, +126, +129, +129, +129, +127, +127, +128, +130, +132, +131, +132, +132, +132, +133, +133, +131, +130, +128, +128, +128, +130, +132, +132, +130, +129, +130, +132, +132, +131, +130, +130, +128, +127, +126, +126, +128, +128, +125, +121, +118, +117, +117, +116, +118, +120, +123, +124, +127, +128, +126, +124, +124, +129, +133, +135, +135, +133, +129, +126, +121, +119, +121, +130, +138, +141, +141, +139, +134, +128, +123, +123, +125, +125, +128, +129, +130, +128, +126, +122, +118, +117, +117, +121, +124, +128, +128, +127, +125, +125, +126, +126, +124, +125, +125, +126, +126, +126, +126, +124, +124, +125, +127, +129, +128, +129, +130, +135, +136, +137, +136, +133, +132, +131, +133, +134, +132, +128, +127, +129, +133, +134, +134, +131, +129, +128, +129, +130, +127, +123, +121, +123, +125, +125, +121, +117, +116, +116, +120, +123, +126, +126, +127, +127, +127, +127, +130, +131, +132, +133, +134, +135, +130, +123, +119, +120, +124, +127, +131, +134, +137, +137, +134, +129, +125, +123, +122, +124, +127, +128, +127, +127, +127, +123, +118, +115, +117, +120, +124, +127, +128, +126, +123, +123, +123, +123, +123, +123, +122, +124, +125, +125, +123, +123, +125, +127, +129, +129, +131, +131, +133, +135, +136, +135, +134, +132, +129, +131, +133, +133, +131, +128, +127, +128, +131, +132, +133, +132, +129, +128, +127, +126, +125, +125, +124, +124, +124, +122, +121, +119, +119, +120, +122, +124, +126, +125, +124, +122, +124, +126, +128, +128, +126, +123, +123, +125, +129, +131, +132, +130, +128, +127, +126, +128, +127, +126, +124, +128, +137, +142, +142, +137, +133, +129, +126, +125, +125, +126, +127, +129, +131, +133, +131, +122, +114, +111, +113, +117, +118, +118, +118, +118, +119, +119, +120, +120, +121, +122, +125, +126, +127, +127, +128, +127, +130, +131, +131, +132, +132, +132, +132, +133, +134, +135, +134, +133, +129, +126, +127, +129, +132, +132, +133, +132, +130, +129, +128, +129, +129, +130, +130, +132, +134, +132, +130, +125, +122, +119, +120, +122, +125, +125, +124, +122, +121, +122, +123, +124, +124, +125, +125, +125, +124, +122, +123, +126, +132, +135, +136, +134, +130, +127, +126, +127, +130, +131, +133, +135, +139, +141, +138, +135, +132, +128, +126, +124, +125, +125, +126, +126, +126, +125, +125, +125, +126, +126, +123, +119, +117, +118, +119, +120, +120, +122, +123, +123, +124, +123, +123, +122, +124, +126, +127, +129, +130, +130, +130, +129, +129, +130, +131, +130, +130, +130, +132, +134, +134, +135, +134, +132, +130, +129, +130, +130, +131, +132, +132, +132, +129, +126, +124, +125, +126, +125, +126, +124, +120, +117, +117, +120, +122, +121, +121, +120, +122, +125, +129, +130, +127, +125, +124, +125, +124, +126, +128, +131, +132, +133, +131, +130, +127, +125, +123, +120, +120, +123, +129, +135, +138, +138, +134, +128, +125, +122, +121, +123, +127, +130, +132, +132, +129, +125, +123, +123, +123, +123, +121, +119, +119, +118, +119, +118, +118, +117, +118, +121, +123, +124, +125, +124, +124, +124, +126, +129, +130, +131, +132, +133, +135, +135, +136, +136, +136, +135, +137, +137, +138, +136, +134, +131, +130, +129, +130, +129, +129, +127, +126, +125, +125, +128, +129, +127, +128, +126, +124, +122, +124, +124, +123, +123, +125, +126, +124, +125, +126, +128, +131, +130, +127, +125, +125, +127, +127, +128, +130, +131, +130, +130, +129, +130, +127, +124, +122, +122, +126, +130, +135, +137, +138, +136, +133, +129, +126, +125, +125, +127, +130, +130, +130, +128, +126, +126, +123, +123, +123, +122, +118, +116, +116, +116, +117, +116, +118, +120, +121, +123, +125, +125, +125, +124, +125, +126, +127, +129, +130, +131, +131, +134, +135, +136, +133, +131, +133, +134, +136, +136, +135, +133, +132, +132, +131, +131, +132, +132, +131, +131, +130, +129, +128, +128, +128, +128, +128, +127, +124, +124, +123, +124, +122, +121, +121, +121, +122, +125, +126, +128, +127, +125, +122, +120, +124, +126, +128, +129, +132, +134, +133, +133, +131, +127, +121, +122, +123, +126, +129, +134, +138, +140, +138, +134, +127, +123, +122, +125, +126, +129, +130, +130, +129, +128, +126, +124, +124, +126, +127, +126, +123, +122, +120, +119, +119, +120, +121, +123, +123, +124, +124, +124, +122, +121, +122, +122, +124, +126, +128, +129, +129, +127, +127, +128, +128, +129, +131, +135, +136, +135, +131, +128, +125, +126, +127, +129, +129, +129, +128, +126, +127, +126, +125, +122, +122, +123, +123, +125, +125, +124, +121, +119, +119, +119, +120, +123, +126, +128, +129, +129, +129, +127, +126, +126, +127, +129, +131, +132, +132, +133, +132, +130, +127, +123, +121, +119, +121, +125, +129, +132, +136, +137, +134, +130, +127, +126, +126, +126, +128, +129, +129, +129, +129, +127, +126, +126, +127, +128, +128, +125, +120, +117, +116, +117, +116, +117, +120, +123, +125, +125, +123, +123, +120, +121, +123, +128, +130, +132, +132, +133, +133, +133, +131, +130, +131, +134, +136, +138, +135, +132, +131, +131, +131, +133, +133, +132, +130, +130, +130, +130, +128, +127, +128, +127, +128, +128, +128, +127, +125, +124, +122, +122, +122, +122, +124, +128, +130, +129, +126, +125, +126, +125, +126, +126, +127, +128, +128, +129, +131, +132, +132, +130, +129, +128, +128, +125, +122, +120, +122, +124, +125, +126, +127, +130, +133, +135, +135, +133, +130, +128, +126, +126, +125, +127, +128, +128, +127, +127, +126, +124, +123, +124, +122, +119, +117, +116, +118, +120, +121, +122, +124, +124, +125, +125, +124, +124, +125, +125, +127, +128, +129, +130, +131, +130, +130, +128, +128, +129, +131, +130, +130, +128, +128, +130, +132, +134, +134, +135, +135, +133, +130, +129, +128, +128, +130, +132, +133, +132, +130, +129, +128, +128, +127, +125, +120, +119, +118, +118, +121, +124, +126, +126, +125, +124, +124, +124, +124, +124, +128, +129, +129, +129, +130, +133, +134, +133, +133, +132, +130, +128, +125, +122, +119, +119, +120, +122, +126, +128, +131, +132, +134, +135, +135, +134, +132, +130, +129, +130, +130, +131, +131, +131, +130, +128, +126, +124, +123, +121, +118, +114, +114, +115, +117, +117, +117, +118, +118, +119, +120, +121, +121, +123, +125, +128, +129, +130, +133, +135, +134, +131, +130, +129, +131, +131, +132, +133, +134, +134, +132, +131, +131, +131, +128, +127, +126, +126, +125, +126, +127, +128, +129, +131, +132, +130, +130, +129, +129, +130, +129, +125, +123, +123, +125, +127, +125, +125, +126, +128, +128, +128, +129, +128, +124, +122, +121, +123, +123, +125, +125, +126, +126, +127, +126, +126, +125, +126, +124, +123, +124, +125, +126, +125, +128, +131, +132, +134, +136, +136, +134, +130, +130, +130, +130, +130, +132, +132, +132, +129, +128, +127, +126, +125, +126, +125, +120, +115, +112, +114, +116, +120, +123, +126, +126, +125, +125, +124, +123, +123, +124, +128, +130, +130, +130, +129, +129, +128, +127, +128, +129, +131, +133, +132, +132, +131, +132, +131, +133, +134, +134, +131, +128, +125, +124, +125, +128, +132, +133, +132, +133, +133, +134, +133, +133, +133, +132, +128, +126, +124, +124, +125, +128, +130, +130, +130, +129, +128, +127, +127, +126, +126, +125, +125, +125, +123, +121, +119, +120, +122, +122, +121, +120, +117, +117, +117, +119, +120, +121, +123, +124, +126, +127, +127, +126, +125, +127, +128, +129, +128, +128, +126, +127, +128, +130, +130, +127, +122, +120, +119, +121, +119, +115, +113, +114, +117, +121, +124, +125, +126, +128, +131, +132, +133, +132, +133, +135, +138, +142, +142, +140, +137, +135, +135, +135, +134, +134, +134, +135, +134, +134, +135, +134, +131, +128, +128, +128, +127, +126, +128, +131, +133, +134, +133, +134, +133, +133, +134, +135, +133, +133, +132, +129, +124, +122, +122, +124, +125, +124, +123, +125, +130, +135, +136, +134, +131, +129, +129, +127, +126, +126, +126, +126, +126, +127, +126, +124, +118, +116, +116, +117, +117, +118, +119, +118, +119, +120, +125, +127, +127, +124, +122, +122, +122, +121, +122, +121, +119, +120, +121, +122, +120, +116, +112, +110, +107, +105, +100, +96, +95, +98, +101, +104, +108, +112, +114, +117, +118, +118, +119, +121, +125, +128, +133, +136, +137, +136, +133, +133, +135, +137, +136, +135, +135, +135, +135, +136, +136, +137, +135, +134, +134, +138, +141, +141, +140, +139, +139, +140, +142, +143, +143, +141, +141, +141, +140, +137, +135, +133, +133, +130, +127, +120, +118, +117, +120, +125, +128, +129, +128, +129, +129, +130, +128, +127, +124, +127, +134, +143, +148, +143, +134, +128, +130, +130, +128, +126, +127, +130, +135, +138, +139, +139, +140, +145, +144, +142, +142, +142, +137, +134, +135, +136, +132, +128, +125, +125, +125, +122, +120, +117, +117, +116, +110, +105, +103, +109, +118, +129, +132, +127, +118, +113, +115, +117, +118, +122, +129, +138, +143, +145, +139, +128, +117, +114, +119, +124, +123, +120, +119, +119, +120, +121, +121, +121, +120, +123, +128, +127, +124, +119, +120, +122, +125, +130, +133, +137, +139, +137, +133, +127, +122, +119, +121, +124, +126, +127, +127, +126, +124, +123, +121, +121, +121, +123, +124, +127, +129, +129, +127, +124, +125, +129, +130, +129, +127, +125, +124, +124, +123, +124, +123, +123, +122, +120, +122, +125, +128, +131, +132, +133, +133, +132, +132, +133, +134, +134, +131, +130, +132, +136, +137, +136, +133, +127, +121, +117, +115, +112, +109, +108, +111, +113, +116, +119, +120, +119, +119, +119, +123, +127, +132, +136, +136, +133, +128, +126, +125, +126, +127, +127, +128, +126, +126, +126, +127, +127, +127, +130, +135, +139, +141, +137, +128, +117, +113, +116, +121, +125, +129, +136, +142, +145, +142, +139, +134, +129, +125, +122, +122, +122, +127, +131, +133, +133, +132, +133, +132, +130, +129, +125, +125, +126, +127, +126, +126, +126, +126, +125, +125, +120, +115, +111, +110, +116, +125, +132, +136, +137, +136, +136, +134, +132, +131, +132, +134, +135, +137, +137, +135, +133, +130, +126, +122, +122, +131, +140, +141, +131, +119, +111, +112, +118, +125, +129, +132, +133, +129, +121, +114, +112, +115, +122, +133, +140, +141, +140, +137, +134, +131, +127, +126, +129, +133, +136, +131, +123, +114, +113, +117, +123, +126, +129, +134, +140, +141, +138, +135, +136, +137, +136, +135, +135, +135, +135, +136, +138, +142, +147, +149, +149, +148, +144, +140, +136, +136, +138, +138, +139, +136, +135, +130, +129, +118, +125, +131, +114, +112, +119, +128, +128, +133, +123, +128, +126, +115, +117, +120, +118, +115, +116, +114, +114, +109, +104, +109, +119, +120, +119, +111, +107, +108, +110, +118, +125, +130, +127, +124, +127, +124, +137, +150, +150, +136, +129, +135, +135, +134, +137, +139, +138, +130, +127, +142, +144, +132, +132, +140, +139, +132, +131, +128, +123, +125, +136, +136, +127, +132, +141, +137, +116, +116, +131, +130, +113, +114, +132, +138, +125, +111, +117, +129, +135, +133, +121, +111, +117, +127, +142, +142, +115, +93, +96, +124, +134, +141, +155, +130, +96, +72, +87, +131, +149, +155, +150, +142, +130, +124, +119, +114, +112, +115, +110, +101, +98, +107, +113, +103, +93, +92, +106, +122, +134, +142, +145, +147, +142, +139, +137, +139, +142, +147, +148, +144, +144, +144, +145, +147, +149, +149, +153, +153, +154, +152, +147, +142, +136, +143, +152, +158, +166, +170, +165, +166, +166, +162, +160, +167, +171, +179, +185, +182, +177, +172, +172, +166, +166, +166, +165, +168, +168, +159, +148, +141, +139, +142, +148, +146, +145, +142, +139, +142, +145, +151, +152, +154, +156, +155, +157, +159, +156, +150, +145, +140, +144, +148, +155, +157, +158, +152, +145, +139, +134, +130, +123, +123, +126, +135, +143, +143, +141, +138, +138, +138, +140, +140, +142, +144, +147, +146, +143, +137, +131, +125, +126, +121, +114, +112, +109, +106, +99, +98, +94, +95, +101, +101, +105, +111, +117, +124, +125, +128, +125, +122, +121, +117, +115, +112, +112, +118, +123, +128, +123, +118, +115, +112, +113, +112, +113, +114, +119, +118, +110, +105, +105, +102, +106, +108, +110, +112, +114, +119, +121, +127, +120, +113, +107, +107, +109, +107, +104, +101, +98, +95, +89, +83, +82, +84, +92, +101, +101, +91, +84, +86, +91, +96, +92, +86, +85, +86, +91, +96, +100, +103, +100, +100, +97, +92, +88, +89, +94, +94, +96, +93, +99, +104, +109, +105, +101, +97, +96, +97, +99, +102, +102, +106, +105, +99, +96, +98, +98, +102, +99, +100, +100, +101, +102, +97, +98, +98, +101, +103, +106, +108, +111, +115, +117, +116, +109, +102, +100, +101, +105, +112, +110, +112, +111, +114, +127, +129, +127, +120, +114, +117, +121, +127, +135, +140, +143, +143, +141, +137, +134, +134, +139, +152, +161, +158, +141, +127, +127, +142, +156, +161, +161, +153, +148, +147, +146, +143, +142, +145, +153, +160, +163, +158, +151, +150, +155, +159, +161, +162, +164, +162, +158, +155, +154, +158, +163, +165, +164, +161, +159, +157, +158, +162, +164, +160, +160, +166, +174, +179, +176, +172, +166, +161, +160, +157, +152, +144, +141, +144, +151, +159, +164, +163, +158, +152, +148, +147, +152, +159, +163, +163, +163, +158, +147, +141, +136, +136, +136, +135, +136, +134, +134, +135, +135, +133, +128, +126, +125, +127, +133, +134, +131, +124, +121, +122, +121, +121, +128, +136, +140, +133, +130, +133, +128, +121, +113, +112, +120, +127, +132, +128, +121, +116, +112, +111, +114, +120, +127, +133, +134, +128, +122, +115, +112, +117, +121, +124, +123, +118, +111, +110, +109, +109, +114, +118, +113, +107, +109, +113, +115, +113, +103, +100, +99, +104, +109, +111, +112, +113, +115, +113, +113, +114, +116, +120, +123, +126, +129, +127, +123, +119, +121, +123, +129, +132, +134, +135, +132, +125, +118, +115, +122, +132, +142, +146, +140, +138, +133, +132, +134, +135, +138, +139, +139, +133, +128, +124, +122, +128, +135, +140, +139, +137, +134, +125, +117, +117, +123, +133, +145, +148, +146, +137, +126, +118, +118, +125, +133, +138, +136, +133, +126, +116, +107, +104, +111, +121, +127, +132, +132, +131, +127, +121, +115, +111, +114, +115, +118, +122, +122, +117, +111, +113, +119, +125, +125, +122, +120, +117, +113, +108, +103, +105, +112, +115, +112, +107, +95, +87, +79, +75, +77, +83, +93, +102, +105, +99, +94, +88, +89, +93, +96, +100, +106, +112, +115, +117, +114, +113, +113, +113, +107, +100, +101, +108, +113, +112, +108, +102, +98, +97, +95, +88, +85, +85, +85, +83, +83, +86, +97, +105, +106, +104, +101, +101, +102, +100, +97, +94, +96, +98, +100, +101, +96, +96, +98, +99, +96, +91, +90, +96, +102, +112, +110, +106, +102, +101, +111, +118, +124, +123, +123, +122, +121, +117, +112, +109, +109, +116, +123, +128, +132, +128, +119, +114, +109, +105, +104, +112, +117, +122, +124, +129, +128, +123, +127, +131, +138, +144, +142, +134, +125, +126, +136, +145, +144, +136, +130, +127, +128, +127, +120, +115, +115, +128, +144, +150, +144, +128, +118, +121, +128, +131, +134, +134, +138, +144, +151, +147, +133, +124, +131, +149, +156, +151, +139, +135, +140, +142, +142, +139, +140, +150, +156, +156, +149, +140, +135, +138, +141, +141, +140, +138, +142, +146, +142, +133, +117, +111, +115, +121, +127, +128, +125, +121, +113, +113, +115, +120, +128, +132, +132, +133, +136, +135, +131, +125, +120, +124, +132, +143, +154, +156, +151, +145, +141, +141, +143, +145, +146, +144, +144, +148, +153, +152, +146, +137, +132, +138, +147, +153, +156, +159, +156, +148, +144, +144, +150, +155, +161, +157, +144, +132, +131, +138, +148, +155, +162, +159, +157, +154, +157, +157, +146, +141, +138, +143, +147, +152, +156, +154, +156, +160, +165, +162, +156, +152, +159, +169, +175, +174, +173, +177, +180, +180, +181, +185, +186, +184, +181, +184, +189, +192, +195, +194, +188, +181, +178, +177, +176, +175, +182, +185, +184, +181, +183, +187, +189, +187, +181, +179, +178, +179, +181, +180, +169, +153, +141, +141, +147, +155, +159, +160, +152, +146, +148, +153, +158, +152, +145, +141, +143, +151, +154, +150, +147, +144, +142, +142, +140, +142, +146, +149, +149, +145, +140, +134, +132, +129, +129, +127, +123, +121, +115, +116, +114, +108, +104, +107, +118, +126, +128, +123, +117, +115, +119, +119, +112, +110, +113, +122, +134, +143, +140, +131, +120, +115, +112, +116, +122, +128, +125, +117, +110, +101, +95, +87, +81, +79, +86, +100, +109, +107, +102, +96, +97, +100, +100, +99, +97, +100, +110, +120, +124, +123, +118, +115, +113, +110, +107, +109, +114, +125, +131, +128, +121, +114, +113, +110, +108, +105, +102, +105, +111, +117, +111, +105, +99, +100, +107, +118, +125, +123, +109, +97, +91, +95, +102, +109, +115, +119, +120, +120, +116, +106, +99, +96, +98, +106, +117, +127, +131, +129, +125, +116, +109, +113, +123, +129, +130, +127, +123, +117, +108, +104, +106, +112, +119, +125, +131, +124, +113, +106, +100, +100, +107, +118, +129, +135, +136, +131, +120, +113, +107, +108, +110, +114, +118, +125, +132, +134, +124, +110, +101, +101, +113, +117, +117, +113, +109, +99, +88, +83, +90, +100, +113, +119, +120, +118, +115, +114, +109, +100, +94, +102, +113, +119, +117, +112, +106, +103, +104, +105, +108, +109, +111, +111, +115, +121, +127, +123, +114, +108, +107, +111, +117, +121, +119, +115, +112, +110, +107, +108, +114, +122, +124, +119, +116, +114, +116, +116, +114, +113, +115, +118, +115, +113, +113, +112, +114, +118, +124, +132, +136, +133, +126, +121, +120, +121, +127, +133, +133, +124, +113, +110, +118, +130, +140, +142, +143, +140, +137, +129, +120, +113, +115, +127, +140, +143, +135, +121, +112, +112, +119, +120, +122, +128, +138, +142, +137, +126, +119, +120, +127, +133, +139, +152, +166, +171, +166, +156, +148, +147, +150, +155, +160, +166, +172, +175, +167, +149, +135, +128, +131, +139, +150, +159, +158, +153, +147, +141, +132, +127, +132, +146, +157, +158, +152, +146, +141, +138, +137, +139, +138, +138, +141, +145, +149, +150, +145, +139, +134, +129, +132, +140, +142, +137, +126, +121, +122, +130, +135, +133, +126, +121, +126, +134, +137, +135, +127, +122, +120, +121, +121, +118, +115, +114, +111, +110, +107, +107, +107, +105, +106, +109, +113, +116, +117, +113, +108, +103, +104, +103, +102, +105, +116, +124, +126, +121, +116, +111, +104, +98, +96, +101, +109, +116, +114, +103, +90, +84, +85, +90, +91, +92, +94, +97, +103, +109, +113, +109, +102, +98, +103, +112, +121, +126, +127, +125, +116, +105, +102, +109, +119, +127, +129, +129, +121, +111, +102, +98, +102, +105, +110, +112, +117, +120, +121, +116, +108, +102, +102, +107, +115, +118, +121, +121, +118, +114, +112, +117, +124, +130, +131, +129, +128, +125, +123, +121, +125, +130, +134, +135, +136, +133, +132, +130, +130, +127, +122, +115, +114, +123, +136, +144, +146, +139, +127, +119, +123, +134, +136, +128, +120, +117, +121, +126, +130, +124, +117, +114, +114, +114, +114, +117, +123, +125, +121, +109, +103, +107, +114, +115, +113, +111, +111, +110, +106, +106, +108, +114, +116, +121, +124, +126, +125, +123, +120, +117, +115, +115, +112, +111, +112, +116, +116, +112, +101, +95, +95, +99, +100, +104, +114, +123, +129, +125, +117, +110, +105, +105, +106, +109, +110, +119, +129, +133, +124, +108, +93, +91, +98, +109, +120, +127, +125, +118, +112, +109, +108, +110, +115, +123, +127, +127, +128, +125, +119, +114, +119, +133, +145, +153, +152, +144, +132, +121, +117, +119, +126, +134, +142, +145, +144, +137, +127, +121, +122, +124, +126, +129, +136, +145, +146, +140, +127, +119, +119, +126, +133, +138, +141, +140, +140, +134, +126, +120, +124, +133, +141, +144, +144, +141, +138, +141, +149, +159, +162, +160, +158, +159, +156, +156, +156, +161, +164, +164, +159, +153, +148, +145, +148, +153, +153, +156, +159, +159, +156, +151, +150, +147, +143, +135, +133, +142, +150, +151, +149, +143, +137, +132, +133, +138, +142, +143, +146, +149, +149, +146, +142, +138, +136, +135, +136, +140, +138, +134, +133, +137, +142, +140, +136, +136, +139, +145, +150, +149, +144, +132, +125, +122, +122, +127, +135, +143, +146, +143, +133, +128, +129, +133, +139, +146, +152, +151, +146, +136, +124, +113, +111, +119, +134, +144, +148, +148, +143, +133, +123, +115, +117, +127, +138, +145, +143, +131, +115, +107, +106, +110, +113, +115, +123, +132, +135, +128, +120, +118, +125, +131, +131, +128, +125, +131, +138, +142, +137, +130, +129, +135, +142, +148, +148, +145, +137, +127, +121, +122, +126, +132, +133, +131, +132, +133, +135, +133, +125, +119, +119, +125, +125, +122, +122, +126, +129, +127, +124, +122, +129, +139, +145, +145, +143, +145, +148, +149, +149, +147, +144, +144, +145, +144, +141, +142, +147, +150, +144, +136, +131, +130, +131, +134, +140, +143, +142, +144, +144, +140, +134, +129, +132, +140, +153, +158, +152, +140, +137, +142, +146, +149, +153, +156, +153, +149, +146, +145, +140, +134, +130, +132, +141, +148, +140, +125, +113, +112, +120, +127, +133, +135, +138, +139, +143, +139, +130, +123, +126, +132, +132, +132, +133, +132, +129, +123, +117, +113, +114, +116, +121, +126, +131, +128, +122, +116, +113, +108, +107, +111, +118, +125, +127, +130, +132, +130, +127, +127, +135, +140, +139, +131, +122, +115, +115, +121, +128, +131, +125, +116, +112, +114, +115, +113, +114, +117, +123, +130, +134, +134, +129, +121, +115, +112, +118, +125, +134, +138, +138, +137, +136, +138, +135, +127, +123, +125, +131, +136, +135, +131, +128, +125, +121, +126, +134, +143, +144, +137, +128, +123, +126, +132, +137, +138, +138, +137, +137, +139, +138, +137, +136, +140, +148, +156, +162, +163, +159, +154, +151, +152, +157, +160, +164, +170, +174, +172, +162, +149, +142, +143, +150, +157, +165, +169, +170, +169, +159, +147, +138, +140, +145, +154, +164, +166, +155, +141, +132, +132, +140, +146, +147, +148, +148, +150, +145, +136, +128, +127, +132, +140, +146, +145, +142, +136, +131, +127, +125, +126, +133, +139, +136, +132, +131, +133, +130, +128, +124, +121, +118, +115, +113, +112, +117, +123, +120, +111, +103, +102, +111, +120, +123, +117, +110, +108, +110, +111, +105, +98, +98, +106, +115, +121, +119, +114, +114, +118, +121, +115, +103, +94, +93, +100, +108, +113, +110, +98, +86, +79, +78, +82, +89, +94, +95, +94, +98, +103, +104, +101, +97, +93, +96, +104, +112, +114, +109, +106, +104, +104, +105, +108, +113, +120, +122, +118, +107, +98, +95, +93, +96, +103, +112, +117, +111, +104, +103, +100, +95, +95, +99, +106, +111, +110, +105, +99, +96, +99, +102, +107, +110, +116, +120, +124, +122, +115, +105, +102, +108, +119, +126, +128, +124, +120, +121, +123, +121, +115, +109, +111, +114, +114, +116, +125, +134, +136, +128, +117, +109, +112, +120, +126, +126, +119, +113, +113, +122, +129, +128, +123, +121, +123, +121, +119, +116, +119, +120, +116, +108, +108, +114, +119, +119, +110, +100, +94, +98, +108, +116, +119, +123, +128, +131, +131, +126, +122, +118, +118, +119, +122, +121, +116, +110, +105, +107, +108, +108, +107, +106, +102, +98, +94, +97, +101, +102, +101, +102, +103, +105, +107, +109, +113, +112, +113, +117, +127, +128, +122, +111, +104, +104, +111, +120, +127, +129, +123, +114, +107, +103, +102, +103, +107, +111, +120, +128, +127, +119, +109, +105, +112, +120, +127, +131, +133, +132, +131, +130, +128, +126, +126, +133, +138, +138, +136, +130, +126, +127, +131, +134, +131, +126, +122, +126, +133, +135, +128, +122, +123, +130, +140, +142, +140, +136, +132, +130, +131, +130, +132, +138, +149, +158, +159, +152, +144, +141, +146, +154, +163, +165, +165, +162, +157, +156, +162, +165, +162, +158, +153, +151, +153, +158, +163, +164, +165, +165, +164, +161, +156, +154, +154, +160, +165, +165, +160, +154, +152, +153, +155, +155, +154, +153, +151, +147, +145, +144, +141, +139, +136, +135, +141, +147, +152, +151, +149, +149, +150, +150, +147, +143, +144, +151, +160, +160, +158, +156, +154, +151, +144, +138, +133, +132, +138, +148, +150, +140, +125, +119, +121, +128, +134, +139, +140, +135, +132, +127, +121, +119, +126, +134, +140, +142, +142, +141, +142, +139, +128, +114, +113, +121, +132, +137, +138, +133, +122, +108, +98, +93, +96, +108, +118, +123, +118, +111, +108, +105, +109, +117, +128, +135, +135, +130, +130, +129, +129, +128, +129, +132, +137, +141, +144, +143, +133, +123, +116, +113, +114, +119, +126, +134, +133, +126, +119, +115, +115, +117, +121, +123, +125, +127, +127, +121, +109, +103, +103, +112, +123, +132, +136, +135, +131, +123, +115, +109, +108, +116, +126, +135, +137, +132, +123, +118, +122, +129, +132, +130, +125, +123, +122, +126, +132, +139, +140, +136, +131, +130, +136, +139, +139, +135, +134, +133, +132, +133, +137, +143, +146, +142, +133, +126, +125, +129, +133, +135, +132, +131, +134, +140, +137, +128, +118, +114, +118, +121, +124, +127, +131, +135, +137, +137, +136, +136, +138, +137, +132, +122, +117, +119, +128, +133, +131, +126, +119, +111, +107, +107, +109, +111, +117, +123, +127, +124, +118, +111, +109, +111, +116, +122, +123, +122, +120, +119, +117, +117, +120, +128, +135, +138, +131, +123, +115, +112, +114, +114, +111, +108, +112, +121, +128, +126, +117, +110, +107, +111, +113, +116, +122, +130, +133, +132, +131, +128, +128, +129, +132, +134, +134, +135, +135, +135, +133, +130, +129, +136, +141, +140, +133, +129, +123, +118, +119, +127, +135, +137, +140, +141, +139, +138, +137, +134, +132, +131, +131, +132, +136, +139, +144, +148, +150, +149, +149, +148, +148, +150, +155, +161, +164, +166, +164, +162, +157, +157, +163, +169, +168, +159, +149, +148, +154, +161, +165, +167, +164, +160, +157, +153, +150, +154, +159, +163, +160, +157, +154, +154, +154, +149, +145, +144, +144, +145, +147, +151, +148, +141, +135, +133, +138, +146, +151, +153, +151, +148, +139, +131, +132, +139, +148, +154, +157, +156, +149, +138, +125, +119, +123, +133, +143, +146, +142, +132, +122, +112, +104, +101, +108, +119, +128, +133, +131, +125, +118, +112, +108, +106, +112, +122, +131, +131, +124, +114, +107, +106, +108, +110, +110, +114, +117, +117, +112, +103, +92, +88, +90, +97, +102, +102, +96, +91, +87, +87, +87, +90, +95, +105, +115, +118, +114, +105, +100, +104, +112, +117, +119, +116, +115, +113, +111, +105, +99, +96, +95, +101, +109, +113, +111, +104, +98, +96, +97, +99, +101, +103, +102, +99, +96, +95, +96, +100, +105, +104, +100, +93, +92, +97, +106, +111, +107, +99, +94, +95, +99, +100, +105, +111, +117, +118, +118, +115, +113, +112, +115, +119, +121, +122, +125, +127, +125, +124, +122, +120, +119, +119, +120, +121, +122, +121, +121, +121, +120, +120, +119, +120, +122, +125, +122, +114, +109, +109, +112, +111, +106, +102, +106, +113, +124, +130, +129, +121, +109, +102, +101, +108, +116, +123, +126, +129, +128, +122, +116, +111, +112, +116, +123, +127, +127, +125, +121, +115, +107, +102, +105, +113, +122, +120, +111, +102, +100, +107, +114, +118, +115, +114, +115, +117, +115, +110, +107, +105, +105, +109, +117, +125, +126, +122, +115, +109, +105, +107, +111, +115, +117, +116, +112, +107, +102, +101, +101, +104, +109, +114, +117, +118, +118, +115, +110, +110, +111, +116, +123, +129, +132, +131, +129, +127, +127, +127, +128, +128, +130, +132, +134, +131, +128, +129, +130, +130, +132, +134, +132, +127, +124, +125, +126, +124, +127, +134, +135, +131, +130, +134, +135, +132, +130, +128, +129, +132, +136, +136, +137, +137, +139, +141, +146, +153, +158, +159, +155, +151, +149, +151, +151, +151, +153, +160, +164, +166, +164, +160, +160, +158, +154, +147, +145, +148, +153, +156, +155, +152, +149, +150, +152, +152, +150, +148, +148, +148, +149, +146, +139, +134, +137, +146, +151, +147, +142, +142, +146, +148, +148, +142, +138, +139, +141, +147, +151, +153, +154, +151, +140, +127, +121, +128, +139, +148, +149, +147, +142, +138, +133, +130, +125, +121, +121, +126, +132, +136, +138, +137, +136, +129, +123, +122, +128, +135, +136, +134, +129, +126, +122, +124, +130, +135, +130, +123, +117, +116, +120, +122, +123, +122, +119, +117, +114, +109, +103, +103, +107, +112, +112, +112, +113, +117, +120, +118, +116, +113, +112, +112, +115, +118, +125, +130, +136, +136, +134, +127, +120, +114, +109, +107, +111, +122, +130, +132, +129, +125, +119, +111, +106, +108, +114, +117, +120, +122, +123, +121, +116, +112, +109, +105, +105, +108, +110, +115, +120, +123, +119, +113, +109, +112, +121, +131, +136, +134, +128, +125, +125, +124, +124, +129, +137, +141, +140, +136, +130, +126, +120, +118, +118, +122, +129, +134, +135, +132, +128, +126, +126, +127, +128, +131, +135, +135, +129, +121, +117, +114, +115, +121, +128, +134, +135, +134, +131, +129, +124, +119, +117, +118, +122, +125, +130, +134, +137, +138, +134, +129, +127, +130, +132, +129, +126, +126, +130, +133, +135, +133, +130, +125, +120, +112, +103, +102, +107, +116, +124, +130, +133, +126, +111, +100, +99, +106, +115, +120, +122, +120, +119, +119, +121, +120, +120, +122, +123, +124, +120, +114, +112, +114, +116, +113, +109, +109, +113, +116, +116, +113, +111, +110, +113, +118, +126, +133, +137, +136, +131, +126, +125, +129, +133, +139, +144, +143, +136, +128, +124, +124, +127, +128, +129, +134, +140, +146, +145, +134, +121, +114, +113, +116, +125, +137, +145, +147, +146, +144, +138, +133, +133, +138, +145, +147, +145, +141, +140, +140, +140, +142, +144, +147, +149, +155, +161, +163, +162, +158, +156, +156, +157, +161, +165, +168, +168, +166, +160, +159, +163, +169, +176, +179, +176, +168, +162, +160, +159, +158, +158, +159, +159, +159, +159, +159, +155, +154, +152, +150, +147, +147, +150, +154, +154, +148, +142, +142, +147, +152, +155, +151, +144, +137, +135, +144, +156, +164, +164, +164, +157, +146, +132, +125, +127, +137, +150, +156, +155, +150, +143, +134, +129, +125, +122, +120, +127, +135, +141, +141, +139, +134, +124, +119, +118, +121, +129, +135, +139, +135, +127, +121, +122, +121, +117, +115, +115, +120, +121, +119, +113, +108, +108, +103, +98, +95, +96, +98, +98, +101, +99, +99, +102, +108, +113, +114, +111, +105, +98, +96, +102, +110, +115, +118, +124, +126, +125, +121, +117, +111, +105, +99, +101, +107, +115, +119, +121, +118, +110, +99, +92, +94, +102, +109, +113, +112, +109, +109, +108, +105, +100, +100, +100, +99, +100, +103, +106, +108, +104, +100, +98, +97, +102, +111, +119, +121, +119, +112, +107, +105, +108, +112, +115, +118, +120, +121, +121, +120, +122, +121, +121, +119, +116, +111, +111, +113, +114, +117, +118, +119, +118, +118, +118, +120, +120, +119, +117, +118, +118, +117, +112, +109, +108, +112, +118, +128, +133, +128, +114, +104, +100, +103, +108, +117, +126, +131, +131, +128, +124, +117, +115, +113, +114, +116, +122, +128, +131, +128, +124, +116, +110, +106, +105, +107, +114, +120, +121, +117, +115, +114, +110, +102, +97, +96, +102, +110, +117, +118, +114, +110, +107, +109, +112, +118, +121, +122, +119, +115, +111, +111, +112, +112, +114, +116, +114, +111, +110, +108, +108, +107, +107, +112, +118, +121, +119, +115, +113, +117, +122, +123, +123, +123, +127, +132, +136, +134, +129, +118, +111, +113, +121, +131, +138, +142, +141, +138, +130, +122, +115, +111, +114, +121, +129, +133, +136, +134, +132, +131, +129, +128, +127, +131, +134, +132, +131, +131, +133, +132, +133, +136, +138, +142, +143, +147, +151, +154, +152, +148, +147, +149, +150, +148, +147, +149, +153, +157, +162, +165, +163, +156, +153, +154, +155, +153, +153, +157, +159, +159, +155, +152, +149, +149, +151, +153, +151, +151, +151, +152, +148, +141, +138, +143, +149, +155, +158, +156, +149, +138, +132, +128, +132, +139, +149, +157, +166, +166, +157, +145, +138, +132, +127, +126, +134, +146, +156, +157, +153, +145, +137, +131, +129, +129, +135, +142, +143, +141, +137, +133, +126, +123, +121, +123, +124, +130, +135, +136, +131, +125, +122, +124, +127, +127, +127, +126, +125, +126, +126, +123, +118, +113, +112, +114, +116, +115, +109, +105, +104, +111, +118, +122, +120, +116, +113, +113, +112, +109, +103, +100, +102, +109, +119, +128, +131, +129, +126, +121, +114, +108, +105, +110, +118, +124, +126, +125, +118, +107, +100, +96, +98, +107, +115, +121, +121, +117, +113, +111, +111, +109, +108, +109, +108, +106, +107, +109, +112, +116, +116, +114, +113, +113, +116, +121, +126, +126, +123, +121, +120, +121, +123, +126, +127, +127, +128, +129, +129, +128, +125, +123, +122, +128, +136, +137, +133, +125, +118, +113, +114, +119, +125, +130, +131, +130, +130, +130, +130, +126, +119, +116, +118, +125, +131, +135, +131, +129, +125, +119, +116, +117, +123, +126, +129, +129, +131, +132, +134, +134, +134, +134, +133, +130, +127, +128, +129, +131, +132, +130, +125, +120, +118, +120, +119, +120, +123, +126, +125, +126, +127, +127, +124, +119, +113, +108, +111, +118, +124, +127, +125, +122, +120, +122, +119, +114, +116, +122, +125, +124, +119, +117, +117, +119, +122, +120, +118, +114, +111, +111, +117, +122, +121, +117, +116, +114, +116, +118, +122, +123, +120, +121, +129, +138, +143, +143, +138, +132, +126, +121, +119, +123, +128, +133, +142, +146, +143, +135, +129, +124, +123, +123, +127, +135, +141, +146, +147, +145, +140, +137, +135, +135, +134, +135, +138, +145, +150, +147, +139, +133, +134, +139, +144, +148, +151, +154, +156, +154, +151, +149, +150, +154, +154, +152, +153, +156, +160, +162, +158, +154, +156, +165, +171, +174, +173, +171, +165, +158, +155, +153, +154, +156, +161, +163, +162, +159, +157, +156, +154, +152, +152, +152, +154, +156, +159, +162, +159, +151, +142, +138, +140, +149, +156, +159, +158, +159, +161, +162, +156, +146, +136, +129, +131, +139, +149, +156, +155, +152, +149, +145, +138, +134, +129, +130, +136, +141, +139, +133, +133, +133, +131, +127, +125, +124, +128, +135, +137, +136, +132, +130, +129, +130, +129, +128, +126, +124, +122, +117, +114, +112, +112, +112, +114, +115, +118, +115, +111, +108, +105, +105, +109, +115, +116, +119, +121, +120, +114, +107, +103, +104, +106, +113, +123, +129, +129, +123, +115, +108, +104, +103, +111, +118, +121, +117, +114, +111, +109, +102, +95, +94, +99, +106, +113, +114, +110, +107, +102, +100, +98, +95, +97, +101, +105, +103, +99, +101, +107, +110, +108, +106, +103, +104, +109, +115, +119, +116, +112, +111, +112, +114, +115, +116, +117, +118, +118, +116, +115, +113, +117, +124, +130, +128, +118, +110, +108, +113, +116, +115, +114, +116, +119, +120, +121, +118, +115, +118, +122, +121, +113, +108, +110, +116, +120, +119, +117, +115, +116, +113, +110, +107, +107, +109, +114, +120, +124, +127, +126, +123, +121, +117, +114, +111, +112, +117, +124, +128, +128, +124, +116, +112, +109, +107, +109, +117, +121, +122, +119, +117, +116, +112, +108, +102, +98, +100, +109, +116, +120, +116, +112, +110, +109, +109, +106, +106, +111, +114, +115, +111, +109, +109, +112, +113, +113, +113, +117, +118, +113, +106, +105, +107, +108, +109, +108, +108, +109, +113, +114, +112, +107, +104, +112, +124, +135, +138, +133, +126, +120, +117, +117, +120, +125, +134, +142, +146, +141, +130, +121, +119, +119, +125, +131, +138, +140, +138, +135, +133, +128, +124, +120, +120, +122, +131, +140, +143, +140, +134, +128, +126, +128, +133, +137, +141, +143, +146, +146, +146, +148, +150, +153, +152, +151, +151, +155, +156, +156, +155, +154, +156, +157, +162, +166, +169, +167, +163, +158, +154, +151, +148, +150, +154, +157, +160, +160, +160, +157, +154, +154, +153, +153, +154, +153, +155, +157, +156, +150, +145, +143, +143, +145, +148, +153, +153, +153, +158, +162, +159, +147, +136, +130, +133, +141, +150, +155, +158, +158, +155, +151, +142, +136, +133, +134, +139, +146, +152, +155, +154, +144, +130, +118, +114, +118, +123, +129, +135, +136, +134, +131, +129, +127, +127, +124, +120, +116, +116, +120, +123, +124, +119, +117, +120, +123, +125, +127, +125, +118, +111, +111, +115, +121, +122, +121, +119, +120, +116, +110, +104, +98, +95, +101, +109, +116, +118, +119, +121, +121, +117, +113, +111, +114, +118, +121, +122, +121, +116, +110, +104, +104, +108, +114, +120, +120, +117, +112, +110, +109, +103, +98, +98, +102, +106, +106, +107, +108, +109, +108, +104, +102, +101, +105, +109, +113, +119, +123, +125, +125, +123, +121, +119, +120, +120, +122, +122, +122, +121, +122, +122, +124, +124, +125, +125, +125, +127, +124, +116, +107, +105, +110, +120, +129, +131, +130, +127, +127, +126, +124, +118, +117, +120, +129, +134, +135, +131, +128, +126, +122, +118, +115, +114, +116, +121, +129, +133, +132, +128, +126, +125, +122, +118, +117, +120, +128, +134, +136, +134, +130, +124, +119, +118, +118, +122, +130, +136, +136, +130, +125, +122, +120, +119, +118, +117, +114, +113, +113, +113, +113, +115, +117, +120, +118, +110, +103, +103, +112, +120, +124, +124, +123, +123, +122, +121, +121, +119, +121, +123, +121, +114, +108, +107, +109, +111, +113, +115, +118, +120, +120, +118, +113, +110, +112, +121, +132, +135, +132, +129, +128, +126, +124, +124, +128, +135, +136, +136, +137, +138, +138, +133, +129, +130, +134, +139, +140, +139, +135, +131, +127, +122, +120, +121, +126, +132, +140, +145, +149, +145, +132, +119, +115, +121, +130, +137, +144, +149, +151, +152, +152, +152, +149, +145, +146, +152, +158, +160, +158, +155, +152, +151, +155, +162, +167, +168, +165, +163, +158, +153, +147, +147, +149, +153, +159, +162, +161, +157, +154, +153, +153, +151, +150, +153, +153, +152, +151, +154, +153, +149, +143, +140, +145, +152, +153, +152, +149, +149, +148, +144, +140, +136, +135, +139, +146, +150, +151, +151, +154, +156, +153, +149, +144, +143, +146, +152, +154, +154, +154, +150, +143, +136, +131, +126, +119, +116, +121, +128, +133, +134, +133, +130, +129, +125, +118, +111, +110, +115, +122, +126, +128, +127, +124, +123, +122, +123, +125, +123, +118, +112, +111, +114, +119, +123, +124, +122, +121, +119, +114, +108, +103, +100, +99, +103, +114, +125, +128, +125, +119, +114, +112, +110, +110, +112, +114, +119, +124, +124, +116, +104, +102, +108, +115, +119, +116, +112, +110, +109, +105, +100, +95, +94, +95, +101, +108, +114, +113, +108, +100, +91, +88, +92, +101, +106, +109, +112, +118, +122, +121, +118, +116, +117, +119, +120, +121, +121, +120, +118, +117, +117, +119, +119, +120, +124, +125, +122, +112, +104, +100, +104, +113, +118, +123, +127, +129, +129, +128, +126, +123, +122, +122, +124, +125, +126, +128, +127, +128, +128, +126, +119, +115, +111, +109, +112, +119, +127, +129, +125, +121, +120, +122, +122, +117, +113, +117, +125, +134, +135, +126, +118, +116, +118, +120, +124, +127, +128, +127, +125, +124, +120, +116, +113, +113, +111, +110, +111, +116, +119, +120, +120, +118, +115, +111, +106, +105, +110, +118, +123, +125, +124, +125, +124, +124, +124, +124, +123, +124, +125, +119, +110, +107, +112, +121, +125, +124, +119, +113, +112, +110, +107, +104, +108, +117, +128, +135, +135, +127, +120, +116, +118, +119, +120, +122, +129, +137, +139, +134, +126, +121, +121, +127, +134, +136, +135, +134, +133, +132, +127, +123, +120, +123, +128, +136, +141, +144, +146, +145, +139, +128, +122, +123, +129, +136, +142, +144, +142, +140, +143, +152, +156, +159, +159, +159, +159, +158, +155, +154, +153, +154, +154, +157, +165, +168, +166, +160, +156, +150, +146, +145, +148, +150, +156, +163, +169, +167, +158, +147, +142, +144, +148, +152, +153, +151, +151, +153, +153, +149, +144, +141, +141, +144, +149, +150, +149, +147, +146, +144, +141, +138, +138, +140, +148, +153, +154, +153, +156, +159, +158, +153, +147, +144, +144, +151, +157, +157, +154, +150, +147, +142, +136, +131, +127, +124, +124, +129, +133, +136, +135, +133, +130, +124, +117, +115, +115, +115, +118, +122, +126, +126, +126, +126, +123, +123, +124, +123, +123, +120, +116, +110, +109, +110, +113, +113, +113, +113, +112, +105, +100, +98, +97, +98, +101, +108, +113, +118, +120, +121, +118, +115, +111, +112, +116, +121, +127, +125, +120, +115, +112, +112, +113, +114, +112, +110, +107, +109, +112, +110, +104, +100, +100, +101, +101, +102, +105, +112, +115, +112, +102, +94, +93, +99, +103, +107, +113, +120, +124, +126, +123, +120, +116, +114, +114, +115, +116, +117, +115, +114, +114, +115, +115, +120, +126, +127, +122, +117, +114, +113, +113, +114, +119, +126, +132, +136, +131, +122, +116, +117, +118, +114, +112, +114, +121, +125, +129, +125, +117, +111, +109, +111, +110, +114, +121, +131, +138, +137, +129, +120, +118, +121, +124, +126, +126, +124, +126, +130, +130, +125, +120, +116, +114, +116, +121, +127, +128, +126, +123, +123, +122, +118, +113, +111, +113, +115, +117, +118, +119, +117, +115, +117, +116, +114, +109, +107, +108, +112, +119, +123, +126, +126, +124, +124, +123, +121, +120, +121, +122, +120, +117, +114, +115, +119, +121, +121, +119, +117, +115, +115, +114, +115, +117, +121, +126, +131, +128, +124, +120, +119, +120, +122, +123, +124, +123, +123, +127, +135, +142, +145, +145, +145, +144, +144, +141, +138, +137, +136, +133, +130, +128, +128, +127, +129, +134, +140, +141, +143, +144, +136, +126, +122, +126, +131, +132, +129, +129, +130, +133, +134, +137, +141, +145, +150, +154, +149, +141, +140, +149, +158, +160, +157, +156, +161, +164, +165, +162, +157, +149, +146, +152, +159, +163, +163, +161, +156, +149, +144, +139, +135, +133, +138, +143, +146, +147, +146, +146, +149, +148, +145, +140, +140, +146, +149, +151, +151, +149, +143, +140, +138, +138, +141, +147, +152, +151, +150, +152, +156, +154, +150, +144, +141, +141, +147, +152, +155, +154, +151, +144, +138, +135, +136, +138, +137, +136, +137, +140, +143, +142, +139, +136, +132, +127, +121, +117, +116, +120, +126, +132, +137, +139, +139, +138, +135, +131, +127, +127, +127, +125, +119, +113, +111, +112, +113, +113, +113, +114, +112, +108, +104, +102, +101, +103, +109, +113, +118, +120, +120, +119, +114, +107, +102, +106, +114, +122, +126, +125, +120, +118, +121, +125, +126, +123, +118, +113, +109, +109, +106, +103, +100, +103, +104, +106, +111, +118, +120, +115, +105, +96, +92, +96, +105, +110, +111, +111, +117, +122, +123, +120, +116, +114, +115, +116, +118, +118, +118, +118, +119, +120, +120, +119, +116, +114, +114, +113, +110, +105, +102, +102, +113, +124, +133, +134, +131, +122, +115, +111, +111, +113, +117, +122, +124, +122, +122, +123, +124, +123, +122, +119, +115, +113, +118, +122, +123, +121, +121, +123, +129, +131, +128, +118, +111, +111, +113, +114, +117, +124, +130, +134, +135, +130, +124, +122, +124, +127, +126, +122, +115, +112, +112, +114, +113, +111, +109, +111, +113, +113, +114, +113, +111, +106, +102, +101, +103, +110, +117, +123, +124, +121, +117, +118, +122, +125, +122, +119, +117, +116, +118, +122, +125, +127, +124, +118, +112, +108, +105, +101, +96, +92, +94, +104, +117, +127, +131, +128, +120, +109, +102, +98, +101, +110, +122, +127, +127, +125, +126, +128, +129, +133, +136, +139, +139, +138, +135, +132, +129, +126, +125, +127, +130, +135, +134, +128, +123, +124, +128, +133, +138, +142, +143, +142, +140, +139, +140, +141, +143, +146, +146, +148, +153, +162, +169, +169, +162, +157, +160, +164, +168, +171, +171, +170, +167, +166, +165, +164, +160, +153, +152, +155, +161, +164, +164, +163, +157, +153, +152, +154, +155, +154, +153, +151, +149, +150, +151, +154, +157, +160, +160, +155, +150, +147, +148, +153, +159, +160, +156, +150, +148, +148, +149, +146, +144, +146, +151, +156, +158, +157, +155, +154, +153, +151, +150, +147, +145, +141, +134, +130, +128, +125, +127, +126, +127, +129, +138, +142, +141, +141, +137, +132, +124, +119, +119, +121, +123, +126, +129, +132, +131, +129, +130, +134, +133, +130, +127, +121, +118, +116, +116, +117, +117, +118, +118, +117, +116, +113, +111, +107, +107, +109, +112, +113, +115, +115, +114, +113, +111, +109, +106, +101, +100, +104, +106, +104, +101, +100, +100, +105, +116, +124, +126, +121, +115, +107, +104, +108, +116, +119, +112, +106, +103, +104, +107, +110, +117, +120, +123, +123, +118, +110, +102, +102, +103, +106, +108, +114, +119, +124, +124, +122, +116, +111, +105, +102, +105, +113, +120, +124, +127, +126, +123, +119, +113, +109, +109, +113, +113, +109, +107, +109, +114, +116, +114, +108, +107, +109, +112, +113, +108, +106, +106, +107, +107, +109, +112, +115, +117, +115, +114, +116, +116, +112, +110, +110, +109, +109, +111, +111, +111, +112, +115, +119, +122, +125, +122, +116, +111, +108, +108, +113, +122, +129, +130, +129, +130, +132, +132, +126, +119, +112, +109, +112, +114, +120, +127, +133, +136, +138, +135, +129, +123, +118, +118, +119, +127, +132, +133, +132, +132, +132, +131, +128, +127, +128, +126, +121, +116, +111, +109, +112, +121, +129, +128, +122, +117, +111, +107, +105, +105, +106, +110, +116, +123, +128, +129, +126, +122, +122, +127, +125, +117, +112, +113, +121, +129, +137, +140, +140, +137, +135, +134, +131, +129, +130, +131, +129, +128, +134, +138, +139, +136, +135, +136, +143, +147, +149, +148, +148, +148, +148, +145, +141, +140, +142, +147, +149, +149, +147, +145, +146, +150, +156, +159, +162, +164, +166, +164, +158, +153, +150, +150, +148, +148, +147, +145, +145, +146, +149, +151, +154, +154, +151, +145, +142, +140, +140, +140, +139, +137, +136, +139, +144, +148, +150, +151, +148, +144, +143, +144, +147, +154, +159, +160, +156, +147, +139, +138, +142, +147, +147, +144, +137, +134, +133, +135, +141, +148, +155, +158, +155, +150, +145, +142, +141, +142, +142, +138, +137, +141, +146, +150, +149, +148, +147, +143, +138, +135, +137, +140, +142, +140, +135, +129, +125, +122, +120, +116, +113, +115, +123, +130, +135, +132, +130, +128, +123, +116, +113, +111, +108, +106, +110, +117, +123, +123, +119, +120, +123, +127, +123, +111, +101, +100, +110, +117, +115, +109, +108, +113, +119, +117, +114, +115, +121, +128, +128, +125, +123, +121, +120, +119, +117, +117, +114, +111, +108, +108, +106, +108, +115, +119, +118, +116, +114, +114, +114, +115, +113, +108, +101, +99, +101, +108, +115, +118, +119, +119, +119, +115, +113, +113, +122, +129, +132, +129, +122, +118, +116, +117, +118, +120, +123, +122, +117, +112, +109, +111, +111, +113, +115, +114, +110, +103, +97, +93, +95, +101, +105, +102, +96, +91, +92, +95, +100, +101, +103, +109, +117, +122, +123, +122, +119, +115, +111, +115, +121, +126, +128, +126, +123, +124, +127, +133, +136, +133, +124, +117, +114, +116, +119, +119, +114, +106, +105, +112, +121, +123, +120, +115, +111, +112, +118, +126, +132, +129, +118, +109, +110, +119, +122, +117, +113, +115, +121, +127, +127, +125, +119, +118, +123, +128, +131, +131, +130, +127, +124, +121, +120, +122, +125, +124, +121, +117, +115, +111, +109, +117, +127, +135, +130, +120, +111, +108, +108, +112, +119, +125, +130, +134, +134, +133, +129, +129, +131, +137, +136, +129, +126, +135, +147, +153, +153, +146, +135, +129, +128, +130, +132, +132, +133, +133, +137, +143, +147, +146, +146, +144, +144, +145, +144, +142, +143, +144, +145, +147, +153, +161, +167, +167, +161, +154, +148, +144, +140, +139, +142, +146, +144, +139, +138, +142, +146, +147, +146, +146, +151, +157, +159, +160, +156, +151, +145, +140, +136, +137, +142, +146, +147, +139, +131, +125, +128, +132, +137, +143, +146, +147, +144, +139, +137, +140, +143, +148, +149, +149, +148, +147, +144, +141, +139, +139, +143, +148, +148, +147, +143, +142, +138, +135, +132, +130, +129, +131, +135, +131, +121, +113, +114, +121, +129, +138, +141, +139, +135, +134, +134, +132, +123, +116, +115, +123, +132, +138, +136, +132, +129, +130, +134, +136, +139, +137, +133, +127, +126, +131, +134, +135, +134, +128, +119, +111, +117, +130, +137, +135, +129, +125, +126, +125, +123, +119, +116, +116, +118, +119, +119, +123, +129, +133, +132, +127, +122, +121, +120, +121, +122, +123, +124, +124, +126, +131, +134, +131, +124, +120, +119, +120, +116, +114, +118, +126, +128, +127, +122, +121, +122, +123, +121, +118, +116, +115, +117, +117, +115, +116, +119, +127, +132, +131, +126, +120, +114, +114, +117, +121, +122, +122, +120, +119, +118, +115, +111, +108, +108, +109, +111, +109, +104, +98, +96, +98, +102, +104, +104, +105, +103, +100, +93, +88, +86, +90, +94, +101, +108, +113, +113, +108, +100, +93, +90, +91, +94, +95, +94, +97, +107, +117, +120, +120, +116, +112, +109, +106, +106, +107, +103, +98, +96, +102, +109, +114, +115, +115, +114, +108, +102, +98, +94, +98, +108, +116, +116, +118, +122, +120, +110, +98, +94, +102, +117, +127, +131, +128, +124, +123, +122, +123, +121, +122, +122, +124, +124, +123, +119, +117, +120, +121, +119, +116, +119, +125, +128, +127, +126, +123, +125, +128, +131, +130, +128, +130, +131, +131, +131, +134, +139, +145, +150, +154, +151, +144, +138, +135, +139, +145, +154, +161, +165, +163, +155, +144, +136, +135, +140, +145, +147, +152, +160, +164, +158, +151, +149, +153, +158, +162, +163, +163, +156, +151, +147, +148, +150, +154, +156, +161, +166, +168, +163, +157, +155, +159, +162, +161, +158, +158, +160, +163, +165, +162, +158, +154, +152, +152, +152, +150, +146, +139, +136, +135, +135, +136, +137, +139, +136, +132, +132, +132, +132, +128, +125, +126, +133, +143, +147, +146, +141, +136, +133, +136, +136, +133, +128, +129, +136, +144, +146, +144, +142, +138, +136, +133, +131, +124, +118, +114, +113, +112, +114, +124, +131, +130, +125, +120, +121, +120, +118, +115, +119, +127, +135, +140, +140, +137, +134, +134, +134, +134, +132, +133, +132, +134, +137, +140, +143, +144, +145, +141, +132, +127, +126, +130, +130, +128, +126, +125, +120, +119, +129, +136, +139, +137, +134, +133, +131, +132, +130, +125, +122, +123, +126, +123, +115, +108, +111, +121, +128, +126, +118, +110, +107, +108, +110, +112, +109, +109, +116, +124, +121, +108, +98, +102, +113, +119, +113, +106, +105, +112, +121, +125, +121, +113, +110, +113, +111, +105, +96, +94, +100, +106, +107, +104, +104, +109, +116, +118, +116, +113, +116, +120, +124, +120, +112, +104, +102, +103, +106, +106, +105, +105, +108, +110, +108, +101, +95, +91, +94, +100, +103, +102, +101, +104, +105, +100, +93, +88, +90, +94, +99, +99, +97, +96, +93, +92, +90, +93, +100, +108, +113, +114, +113, +109, +105, +102, +105, +113, +120, +125, +126, +127, +125, +124, +119, +117, +118, +118, +117, +117, +122, +129, +132, +130, +123, +120, +121, +126, +130, +131, +128, +126, +124, +122, +116, +111, +114, +126, +138, +144, +145, +144, +142, +140, +138, +137, +138, +140, +141, +138, +136, +137, +144, +150, +148, +139, +130, +130, +137, +146, +151, +151, +146, +141, +141, +147, +155, +160, +153, +145, +139, +139, +140, +149, +164, +175, +174, +169, +162, +160, +164, +166, +164, +161, +161, +165, +169, +172, +171, +169, +166, +165, +165, +165, +165, +164, +163, +165, +169, +170, +167, +163, +158, +156, +154, +152, +151, +155, +161, +166, +170, +165, +157, +154, +156, +158, +157, +154, +156, +160, +159, +154, +147, +143, +142, +144, +145, +142, +134, +131, +132, +131, +126, +120, +122, +129, +134, +136, +134, +128, +121, +115, +109, +105, +100, +102, +112, +122, +126, +125, +118, +111, +102, +98, +95, +102, +117, +131, +129, +116, +102, +101, +110, +121, +124, +121, +119, +118, +117, +109, +104, +103, +105, +106, +104, +101, +98, +99, +101, +101, +100, +97, +97, +101, +105, +107, +107, +107, +108, +107, +104, +102, +103, +106, +111, +114, +112, +108, +110, +113, +117, +121, +122, +119, +117, +114, +111, +109, +107, +108, +114, +123, +126, +121, +109, +103, +103, +105, +106, +113, +125, +132, +135, +133, +130, +123, +115, +112, +114, +118, +122, +125, +124, +124, +123, +120, +116, +114, +117, +122, +126, +126, +122, +120, +126, +131, +127, +117, +113, +117, +124, +127, +125, +122, +120, +124, +132, +135, +133, +127, +126, +124, +118, +111, +107, +114, +124, +131, +129, +122, +120, +119, +118, +116, +119, +122, +128, +131, +132, +128, +122, +118, +119, +117, +113, +109, +109, +110, +112, +113, +111, +109, +108, +111, +113, +112, +111, +109, +107, +105, +103, +100, +100, +101, +106, +110, +113, +113, +113, +111, +107, +105, +105, +107, +109, +110, +116, +122, +127, +127, +126, +124, +123, +122, +121, +127, +134, +137, +131, +122, +122, +128, +134, +132, +127, +123, +124, +126, +128, +129, +128, +129, +129, +131, +134, +136, +137, +135, +134, +131, +128, +123, +120, +121, +122, +124, +129, +141, +152, +159, +156, +149, +142, +141, +143, +143, +139, +139, +143, +152, +158, +159, +149, +139, +136, +143, +152, +154, +149, +148, +151, +154, +156, +155, +151, +151, +151, +149, +144, +144, +150, +155, +156, +155, +158, +165, +174, +179, +177, +168, +163, +164, +167, +167, +165, +164, +163, +163, +162, +161, +159, +157, +156, +161, +164, +165, +161, +156, +149, +146, +144, +144, +149, +155, +157, +158, +155, +154, +153, +152, +154, +158, +164, +165, +160, +151, +146, +145, +145, +143, +139, +139, +144, +149, +150, +142, +131, +121, +118, +124, +134, +140, +139, +136, +132, +127, +120, +116, +114, +113, +111, +114, +118, +115, +110, +104, +102, +103, +106, +111, +112, +110, +107, +104, +99, +90, +87, +93, +107, +118, +121, +119, +113, +105, +98, +97, +102, +110, +118, +123, +118, +110, +100, +94, +95, +96, +99, +100, +100, +100, +102, +103, +102, +98, +96, +100, +108, +112, +113, +110, +107, +105, +102, +99, +96, +102, +111, +120, +123, +123, +119, +117, +117, +117, +114, +111, +111, +117, +124, +127, +126, +123, +119, +115, +112, +115, +115, +112, +113, +118, +124, +125, +122, +116, +114, +115, +116, +114, +111, +107, +107, +114, +121, +124, +126, +126, +128, +129, +129, +126, +124, +125, +124, +124, +122, +120, +118, +119, +120, +119, +121, +126, +131, +133, +128, +126, +127, +126, +122, +118, +117, +119, +124, +126, +125, +120, +118, +121, +125, +124, +120, +117, +117, +121, +124, +125, +127, +130, +133, +133, +127, +117, +109, +108, +111, +116, +118, +120, +122, +123, +122, +117, +115, +113, +112, +108, +105, +103, +104, +107, +108, +105, +102, +103, +110, +118, +122, +119, +111, +106, +104, +106, +109, +116, +121, +127, +129, +130, +128, +124, +120, +119, +122, +129, +134, +137, +138, +134, +125, +116, +111, +115, +122, +126, +125, +126, +127, +126, +126, +127, +130, +132, +136, +137, +137, +136, +132, +128, +122, +116, +113, +113, +117, +125, +137, +146, +149, +145, +139, +137, +137, +141, +147, +148, +144, +141, +140, +144, +150, +156, +158, +158, +156, +154, +152, +152, +151, +150, +150, +149, +151, +152, +152, +148, +143, +137, +135, +136, +142, +147, +151, +153, +154, +156, +164, +169, +174, +177, +180, +177, +171, +164, +160, +161, +162, +161, +160, +159, +161, +163, +163, +163, +166, +168, +165, +157, +148, +143, +145, +150, +155, +157, +155, +157, +163, +169, +165, +159, +156, +154, +151, +147, +149, +156, +162, +162, +154, +148, +146, +148, +147, +140, +130, +124, +125, +132, +140, +142, +142, +141, +139, +135, +130, +124, +120, +113, +106, +106, +115, +124, +125, +117, +110, +109, +111, +112, +106, +100, +98, +106, +114, +114, +104, +96, +98, +103, +103, +97, +94, +99, +110, +117, +118, +111, +103, +101, +108, +111, +109, +103, +99, +99, +100, +100, +98, +97, +100, +103, +102, +99, +98, +102, +106, +108, +105, +101, +99, +100, +101, +103, +103, +102, +97, +96, +99, +107, +115, +119, +120, +117, +114, +109, +106, +107, +106, +109, +116, +124, +125, +118, +111, +105, +99, +96, +100, +111, +122, +128, +129, +124, +115, +106, +105, +109, +114, +116, +115, +115, +115, +112, +114, +118, +124, +127, +129, +129, +129, +129, +133, +132, +125, +114, +110, +114, +121, +125, +126, +127, +127, +124, +122, +124, +128, +130, +128, +124, +119, +118, +119, +122, +122, +122, +125, +134, +138, +133, +120, +112, +111, +115, +123, +128, +130, +132, +136, +138, +135, +126, +116, +110, +109, +111, +111, +113, +115, +119, +122, +125, +126, +125, +121, +116, +112, +109, +107, +106, +109, +112, +115, +116, +118, +119, +116, +110, +104, +101, +102, +105, +108, +111, +111, +111, +117, +123, +125, +125, +123, +118, +114, +113, +119, +129, +137, +138, +134, +126, +124, +124, +123, +125, +128, +130, +129, +127, +128, +131, +134, +133, +128, +128, +131, +137, +139, +136, +133, +131, +130, +125, +118, +114, +117, +129, +142, +151, +150, +146, +143, +144, +144, +139, +134, +133, +138, +148, +156, +157, +156, +153, +148, +144, +142, +142, +146, +149, +152, +154, +153, +153, +154, +153, +153, +151, +147, +142, +146, +152, +156, +152, +150, +156, +164, +170, +169, +169, +171, +171, +167, +161, +158, +156, +157, +159, +158, +157, +157, +159, +162, +164, +163, +160, +157, +156, +156, +155, +157, +156, +158, +159, +162, +163, +161, +161, +160, +161, +160, +160, +160, +158, +154, +150, +152, +156, +157, +155, +154, +155, +153, +145, +135, +128, +130, +135, +138, +141, +145, +148, +146, +142, +135, +128, +123, +122, +122, +122, +120, +118, +119, +121, +118, +109, +101, +100, +106, +112, +117, +116, +110, +102, +95, +93, +98, +107, +113, +112, +106, +104, +108, +111, +108, +100, +94, +99, +110, +118, +118, +111, +106, +101, +98, +97, +96, +96, +98, +102, +103, +97, +89, +89, +96, +105, +108, +108, +109, +107, +104, +99, +96, +98, +99, +97, +101, +109, +121, +126, +122, +114, +102, +93, +94, +100, +108, +111, +111, +111, +113, +117, +116, +111, +105, +101, +102, +109, +116, +121, +120, +121, +120, +118, +114, +115, +114, +111, +106, +105, +104, +105, +108, +116, +123, +128, +127, +125, +121, +121, +125, +128, +127, +124, +121, +117, +114, +115, +116, +116, +123, +131, +134, +131, +122, +116, +115, +116, +118, +121, +124, +128, +131, +131, +126, +123, +124, +126, +125, +123, +123, +123, +123, +126, +132, +134, +131, +128, +129, +135, +138, +133, +123, +114, +110, +111, +115, +119, +122, +124, +122, +121, +118, +115, +110, +107, +107, +108, +110, +110, +113, +116, +118, +114, +109, +109, +113, +121, +122, +116, +108, +105, +108, +111, +113, +116, +123, +126, +124, +117, +109, +108, +113, +122, +131, +132, +130, +130, +135, +137, +131, +119, +111, +114, +128, +139, +144, +141, +134, +126, +119, +116, +117, +126, +135, +141, +141, +138, +133, +131, +126, +118, +111, +109, +116, +131, +143, +150, +147, +142, +139, +142, +144, +145, +144, +142, +140, +140, +138, +142, +150, +157, +159, +158, +155, +151, +147, +145, +142, +142, +144, +151, +157, +159, +156, +152, +146, +143, +142, +142, +143, +147, +155, +163, +169, +172, +171, +168, +171, +176, +177, +171, +162, +153, +146, +146, +154, +164, +170, +170, +166, +162, +156, +152, +149, +150, +152, +155, +159, +161, +161, +160, +159, +156, +156, +156, +158, +160, +160, +159, +158, +155, +153, +153, +159, +169, +171, +164, +152, +143, +137, +131, +125, +123, +130, +140, +147, +151, +151, +149, +145, +140, +136, +131, +128, +127, +129, +131, +132, +130, +127, +121, +116, +112, +110, +109, +111, +111, +110, +105, +101, +100, +104, +111, +115, +113, +104, +93, +87, +90, +98, +105, +108, +111, +117, +124, +123, +115, +105, +100, +99, +99, +99, +98, +97, +97, +97, +99, +98, +97, +94, +90, +91, +96, +103, +106, +106, +104, +103, +103, +104, +105, +106, +106, +105, +106, +113, +118, +115, +111, +106, +104, +106, +109, +111, +108, +104, +101, +106, +109, +109, +104, +97, +90, +91, +99, +110, +120, +123, +122, +118, +116, +114, +114, +112, +110, +107, +106, +104, +107, +111, +116, +120, +120, +119, +116, +115, +118, +119, +120, +119, +120, +118, +114, +111, +110, +114, +123, +129, +127, +121, +115, +114, +116, +124, +134, +139, +137, +130, +125, +121, +121, +120, +121, +120, +120, +119, +121, +120, +119, +121, +126, +130, +129, +129, +132, +133, +135, +133, +125, +117, +113, +113, +115, +118, +121, +123, +125, +128, +133, +132, +122, +111, +105, +103, +107, +112, +116, +117, +117, +117, +118, +117, +115, +118, +116, +113, +109, +110, +112, +115, +117, +118, +116, +114, +113, +114, +115, +120, +126, +129, +129, +125, +126, +131, +137, +138, +128, +118, +117, +122, +127, +127, +129, +132, +136, +139, +140, +136, +128, +121, +120, +125, +132, +138, +140, +140, +141, +141, +132, +120, +112, +115, +128, +140, +149, +149, +148, +146, +144, +139, +137, +136, +138, +139, +141, +146, +151, +153, +148, +142, +139, +142, +150, +157, +161, +158, +154, +150, +150, +151, +154, +160, +163, +160, +151, +143, +139, +140, +148, +157, +165, +167, +168, +167, +165, +161, +158, +153, +150, +151, +159, +166, +172, +172, +169, +166, +162, +159, +157, +158, +159, +162, +163, +164, +161, +159, +159, +161, +161, +161, +160, +161, +162, +160, +158, +156, +156, +157, +157, +155, +154, +156, +157, +157, +156, +152, +148, +143, +139, +134, +132, +137, +142, +144, +145, +148, +147, +145, +141, +136, +131, +128, +128, +129, +129, +125, +123, +120, +121, +120, +115, +110, +106, +105, +103, +101, +99, +103, +109, +113, +111, +106, +100, +100, +100, +100, +98, +97, +106, +117, +121, +115, +108, +102, +100, +102, +107, +109, +105, +99, +95, +98, +104, +109, +108, +98, +89, +84, +86, +92, +101, +107, +108, +107, +105, +104, +102, +102, +101, +101, +100, +105, +113, +119, +116, +108, +101, +97, +101, +106, +107, +102, +98, +97, +101, +103, +100, +94, +91, +95, +101, +108, +115, +120, +122, +120, +117, +115, +116, +120, +122, +121, +114, +106, +99, +100, +109, +117, +122, +122, +120, +117, +117, +115, +114, +113, +113, +116, +117, +120, +122, +123, +117, +110, +108, +114, +122, +125, +121, +117, +118, +126, +133, +131, +126, +120, +119, +121, +124, +125, +123, +122, +121, +123, +123, +122, +121, +123, +127, +128, +129, +132, +134, +134, +133, +131, +128, +124, +118, +115, +115, +118, +122, +124, +128, +129, +127, +121, +115, +111, +111, +114, +117, +117, +116, +115, +115, +116, +119, +119, +118, +115, +111, +107, +108, +110, +114, +117, +117, +118, +117, +115, +114, +115, +118, +119, +119, +121, +127, +131, +133, +131, +131, +134, +137, +136, +129, +124, +126, +133, +141, +143, +143, +140, +133, +124, +115, +115, +120, +128, +138, +141, +142, +140, +134, +123, +113, +111, +118, +127, +134, +137, +140, +145, +147, +144, +135, +132, +139, +146, +149, +145, +139, +136, +139, +142, +141, +143, +146, +151, +155, +154, +149, +143, +142, +144, +146, +151, +156, +161, +164, +160, +153, +142, +137, +139, +148, +158, +163, +163, +161, +160, +160, +160, +154, +147, +150, +157, +164, +164, +160, +157, +156, +157, +157, +156, +154, +154, +156, +161, +166, +167, +162, +158, +155, +156, +158, +159, +161, +160, +158, +157, +154, +153, +152, +153, +154, +153, +149, +151, +159, +166, +163, +154, +146, +142, +140, +139, +136, +136, +139, +147, +154, +156, +151, +145, +140, +138, +137, +134, +133, +132, +129, +120, +111, +111, +116, +123, +127, +127, +121, +114, +108, +104, +104, +104, +106, +114, +122, +126, +122, +113, +102, +97, +94, +96, +101, +107, +112, +114, +114, +110, +106, +103, +102, +104, +108, +112, +112, +113, +110, +105, +99, +93, +91, +93, +99, +108, +115, +117, +114, +109, +105, +104, +105, +107, +108, +108, +107, +107, +107, +107, +104, +102, +106, +114, +118, +115, +109, +103, +100, +100, +102, +105, +101, +99, +100, +103, +105, +108, +113, +116, +118, +117, +114, +112, +112, +118, +118, +112, +102, +96, +100, +108, +116, +118, +116, +112, +111, +111, +111, +110, +111, +113, +118, +121, +124, +123, +119, +113, +109, +112, +115, +117, +115, +113, +110, +113, +121, +129, +137, +138, +130, +123, +116, +116, +117, +120, +120, +120, +121, +122, +123, +121, +119, +118, +119, +124, +126, +127, +129, +132, +135, +134, +127, +116, +106, +104, +111, +121, +129, +131, +130, +126, +127, +129, +129, +125, +121, +116, +115, +115, +114, +111, +110, +114, +121, +123, +121, +113, +106, +103, +106, +109, +112, +119, +126, +129, +123, +115, +111, +110, +114, +117, +123, +129, +133, +134, +131, +132, +132, +128, +121, +117, +118, +125, +134, +139, +139, +137, +134, +131, +121, +113, +112, +119, +126, +130, +130, +134, +139, +144, +142, +131, +122, +119, +123, +127, +129, +131, +135, +140, +145, +144, +143, +142, +145, +144, +140, +134, +132, +134, +137, +138, +139, +141, +147, +152, +154, +151, +147, +143, +145, +148, +152, +155, +156, +158, +160, +162, +158, +150, +144, +146, +150, +154, +155, +155, +153, +154, +157, +160, +156, +150, +147, +151, +156, +159, +160, +159, +158, +156, +155, +155, +155, +156, +159, +166, +171, +169, +161, +156, +154, +155, +156, +159, +162, +164, +164, +163, +161, +159, +157, +155, +154, +153, +153, +156, +158, +159, +156, +153, +151, +148, +145, +141, +141, +144, +149, +150, +147, +145, +148, +150, +151, +148, +145, +140, +135, +129, +122, +117, +120, +126, +130, +131, +127, +119, +107, +100, +98, +101, +104, +110, +115, +120, +122, +118, +111, +102, +98, +99, +102, +105, +110, +114, +115, +113, +111, +107, +107, +110, +113, +111, +108, +106, +106, +105, +107, +108, +103, +95, +90, +89, +93, +100, +106, +109, +108, +106, +105, +105, +105, +104, +102, +100, +100, +101, +105, +108, +107, +103, +99, +101, +110, +115, +113, +105, +99, +97, +97, +96, +93, +93, +98, +102, +105, +110, +113, +115, +116, +115, +114, +112, +113, +116, +119, +119, +116, +111, +109, +110, +111, +109, +107, +107, +106, +106, +107, +109, +112, +114, +115, +118, +118, +118, +115, +113, +113, +112, +109, +108, +107, +108, +114, +123, +132, +136, +135, +128, +120, +116, +116, +120, +123, +125, +126, +126, +128, +128, +125, +123, +122, +122, +121, +124, +133, +143, +148, +146, +140, +134, +128, +121, +113, +110, +114, +122, +128, +129, +128, +128, +132, +132, +128, +120, +115, +112, +115, +115, +115, +112, +113, +114, +118, +120, +116, +112, +110, +112, +113, +116, +118, +118, +118, +123, +127, +128, +124, +119, +116, +116, +117, +121, +128, +132, +136, +139, +137, +129, +123, +121, +126, +133, +140, +141, +141, +139, +135, +127, +115, +109, +113, +122, +128, +132, +134, +135, +139, +139, +131, +117, +109, +114, +122, +128, +133, +136, +138, +139, +140, +138, +137, +137, +143, +145, +142, +134, +130, +131, +133, +135, +140, +145, +149, +149, +148, +144, +140, +139, +141, +144, +148, +152, +155, +155, +154, +153, +153, +155, +151, +146, +143, +145, +148, +151, +151, +152, +153, +155, +156, +152, +150, +150, +153, +155, +155, +153, +149, +149, +151, +154, +155, +158, +164, +171, +172, +165, +157, +153, +154, +159, +162, +165, +166, +167, +168, +167, +163, +158, +154, +153, +152, +153, +152, +152, +155, +158, +161, +161, +156, +151, +148, +146, +143, +144, +144, +148, +151, +155, +154, +153, +150, +147, +143, +140, +137, +134, +132, +129, +128, +126, +124, +122, +123, +125, +123, +114, +105, +97, +97, +102, +111, +116, +121, +121, +117, +109, +104, +101, +99, +100, +105, +112, +117, +117, +116, +115, +108, +102, +102, +109, +117, +119, +115, +110, +107, +101, +94, +86, +85, +87, +96, +105, +113, +113, +109, +105, +102, +100, +101, +102, +104, +105, +105, +104, +101, +101, +104, +109, +114, +116, +113, +106, +99, +97, +95, +97, +99, +101, +101, +103, +101, +101, +101, +104, +109, +113, +113, +112, +111, +112, +113, +113, +116, +119, +120, +114, +108, +104, +103, +103, +104, +106, +107, +109, +110, +111, +112, +112, +114, +116, +117, +118, +115, +110, +105, +103, +106, +109, +114, +117, +118, +120, +124, +131, +133, +128, +124, +121, +123, +126, +130, +130, +130, +130, +129, +129, +128, +126, +124, +124, +124, +127, +132, +140, +146, +146, +138, +128, +117, +110, +109, +115, +122, +127, +127, +126, +128, +131, +133, +133, +127, +121, +116, +116, +117, +116, +114, +111, +109, +110, +114, +117, +113, +109, +106, +106, +107, +110, +110, +113, +120, +127, +129, +124, +118, +113, +110, +113, +119, +128, +132, +135, +136, +135, +130, +122, +116, +117, +127, +139, +144, +144, +138, +127, +120, +115, +113, +115, +119, +125, +131, +137, +139, +139, +136, +130, +120, +112, +111, +117, +124, +128, +132, +133, +134, +135, +137, +136, +138, +139, +139, +136, +131, +128, +128, +133, +140, +147, +152, +153, +149, +145, +141, +140, +141, +143, +146, +148, +151, +154, +154, +155, +154, +152, +154, +153, +149, +143, +142, +144, +149, +152, +155, +156, +156, +157, +156, +154, +152, +153, +156, +159, +160, +156, +153, +153, +154, +158, +160, +161, +160, +161, +162, +161, +159, +155, +156, +158, +161, +165, +167, +169, +169, +167, +162, +160, +157, +157, +155, +157, +158, +161, +161, +159, +155, +152, +152, +156, +158, +156, +153, +151, +151, +149, +150, +154, +156, +157, +157, +153, +149, +145, +141, +134, +127, +125, +127, +133, +136, +136, +129, +122, +115, +110, +104, +99, +101, +107, +116, +121, +122, +117, +108, +100, +98, +100, +102, +106, +111, +115, +117, +115, +112, +106, +105, +109, +117, +120, +118, +112, +107, +106, +106, +103, +94, +86, +84, +88, +97, +105, +108, +107, +103, +101, +98, +97, +99, +100, +102, +104, +104, +103, +102, +104, +108, +109, +107, +103, +100, +101, +102, +101, +99, +97, +100, +102, +103, +99, +96, +95, +93, +96, +100, +106, +110, +112, +113, +114, +113, +113, +115, +117, +120, +117, +112, +106, +104, +103, +104, +106, +107, +108, +109, +108, +111, +112, +112, +110, +112, +114, +115, +112, +108, +107, +108, +113, +116, +117, +117, +123, +131, +136, +134, +128, +123, +123, +126, +130, +132, +133, +131, +129, +128, +126, +124, +122, +123, +124, +124, +123, +126, +135, +140, +140, +131, +126, +126, +130, +127, +121, +116, +116, +123, +131, +137, +138, +136, +132, +128, +121, +116, +113, +114, +116, +118, +116, +115, +114, +114, +115, +117, +116, +110, +107, +107, +110, +113, +117, +122, +122, +121, +118, +118, +118, +117, +117, +120, +128, +132, +133, +131, +131, +127, +122, +120, +121, +125, +132, +137, +137, +130, +121, +116, +113, +115, +118, +121, +124, +129, +134, +138, +138, +129, +117, +108, +107, +112, +120, +129, +136, +142, +143, +141, +138, +138, +140, +139, +137, +133, +132, +132, +134, +135, +140, +145, +150, +152, +151, +147, +143, +141, +141, +142, +143, +146, +149, +151, +153, +153, +153, +153, +153, +148, +143, +140, +142, +145, +150, +153, +155, +155, +156, +155, +152, +151, +151, +151, +153, +152, +149, +147, +147, +151, +155, +159, +160, +160, +159, +158, +157, +158, +158, +159, +161, +162, +166, +167, +167, +169, +169, +168, +166, +163, +161, +160, +159, +160, +160, +161, +160, +158, +156, +157, +160, +160, +158, +150, +144, +139, +138, +141, +149, +157, +161, +159, +153, +147, +142, +139, +138, +137, +138, +137, +137, +134, +131, +127, +124, +121, +115, +112, +110, +106, +100, +97, +102, +108, +115, +119, +116, +110, +103, +102, +102, +102, +102, +105, +110, +116, +120, +119, +115, +111, +113, +115, +117, +115, +113, +111, +112, +112, +107, +95, +84, +84, +93, +104, +111, +111, +107, +101, +98, +95, +94, +96, +98, +102, +107, +107, +105, +103, +101, +100, +98, +100, +103, +105, +107, +106, +104, +100, +98, +101, +108, +109, +106, +101, +98, +96, +98, +104, +111, +113, +115, +115, +117, +117, +118, +117, +118, +114, +106, +101, +103, +109, +114, +116, +115, +113, +112, +113, +113, +113, +113, +114, +116, +118, +120, +118, +112, +109, +109, +109, +112, +116, +117, +116, +118, +126, +131, +130, +126, +124, +124, +126, +127, +132, +138, +141, +137, +131, +126, +123, +123, +125, +127, +127, +126, +129, +134, +138, +136, +133, +128, +122, +116, +110, +111, +117, +124, +128, +132, +135, +138, +138, +136, +129, +121, +115, +117, +120, +123, +122, +119, +118, +117, +117, +115, +116, +117, +116, +116, +114, +113, +117, +121, +123, +120, +113, +108, +106, +109, +110, +108, +111, +116, +123, +126, +127, +125, +123, +121, +121, +121, +125, +129, +129, +123, +118, +115, +114, +117, +122, +128, +131, +132, +132, +133, +127, +116, +104, +101, +105, +118, +133, +142, +142, +138, +132, +129, +127, +131, +135, +136, +134, +133, +132, +133, +132, +134, +140, +146, +151, +151, +149, +144, +141, +138, +139, +140, +145, +147, +150, +151, +150, +149, +147, +148, +149, +148, +146, +147, +154, +157, +155, +152, +151, +151, +153, +154, +152, +149, +150, +154, +154, +148, +144, +146, +150, +156, +159, +160, +161, +162, +163, +164, +164, +163, +163, +164, +165, +166, +165, +166, +167, +170, +171, +171, +170, +168, +166, +164, +162, +163, +162, +161, +162, +161, +161, +159, +156, +155, +153, +152, +150, +149, +147, +149, +153, +158, +163, +163, +159, +153, +148, +144, +142, +141, +139, +139, +138, +136, +133, +129, +125, +123, +118, +110, +106, +104, +106, +108, +112, +111, +110, +109, +108, +102, +98, +96, +98, +102, +104, +104, +104, +107, +112, +115, +114, +109, +108, +111, +113, +114, +110, +107, +105, +106, +108, +101, +92, +88, +93, +99, +104, +105, +104, +100, +97, +95, +94, +94, +95, +97, +100, +101, +101, +100, +101, +101, +101, +101, +101, +102, +103, +104, +105, +104, +102, +99, +103, +107, +107, +101, +96, +95, +96, +97, +103, +110, +115, +118, +118, +117, +116, +117, +117, +115, +111, +109, +110, +112, +114, +115, +113, +112, +112, +114, +114, +115, +115, +116, +117, +116, +117, +117, +121, +123, +119, +114, +110, +110, +111, +112, +118, +126, +133, +132, +127, +123, +122, +123, +124, +129, +133, +133, +131, +128, +125, +124, +124, +127, +129, +131, +132, +130, +132, +134, +135, +134, +133, +130, +125, +119, +117, +117, +118, +118, +120, +126, +135, +141, +143, +141, +133, +125, +118, +118, +120, +122, +124, +124, +122, +119, +118, +117, +117, +117, +117, +117, +117, +117, +121, +122, +116, +107, +103, +104, +108, +113, +114, +111, +111, +115, +120, +123, +125, +124, +122, +118, +114, +116, +126, +132, +132, +127, +123, +120, +118, +120, +126, +131, +131, +127, +122, +121, +117, +111, +108, +111, +119, +129, +137, +141, +138, +133, +129, +129, +132, +131, +129, +129, +131, +135, +137, +138, +137, +138, +141, +145, +145, +143, +141, +142, +140, +139, +137, +139, +143, +147, +148, +148, +148, +146, +144, +145, +147, +145, +145, +149, +156, +157, +153, +147, +144, +146, +148, +151, +150, +150, +151, +153, +151, +148, +146, +148, +152, +156, +157, +159, +159, +161, +161, +163, +162, +162, +163, +164, +167, +167, +168, +170, +171, +174, +173, +172, +170, +168, +166, +165, +165, +165, +165, +163, +162, +160, +159, +158, +161, +163, +162, +155, +150, +146, +149, +153, +153, +154, +155, +158, +158, +156, +151, +146, +142, +142, +143, +142, +141, +139, +135, +133, +130, +126, +117, +111, +107, +106, +108, +115, +118, +117, +114, +111, +109, +106, +101, +99, +99, +101, +103, +103, +107, +113, +117, +118, +115, +111, +106, +105, +110, +113, +115, +112, +111, +108, +106, +103, +104, +104, +103, +99, +92, +86, +80, +81, +87, +96, +101, +101, +101, +100, +99, +97, +96, +96, +97, +100, +102, +106, +105, +104, +103, +103, +104, +103, +102, +100, +100, +105, +108, +109, +106, +103, +99, +100, +103, +108, +110, +111, +110, +109, +109, +111, +109, +105, +104, +111, +121, +127, +126, +116, +107, +102, +103, +106, +110, +113, +115, +116, +116, +116, +114, +114, +117, +118, +115, +111, +108, +109, +113, +117, +119, +121, +122, +124, +127, +129, +129, +130, +130, +132, +131, +132, +132, +134, +135, +137, +136, +135, +132, +130, +128, +127, +130, +134, +139, +139, +135, +127, +121, +117, +118, +120, +122, +120, +121, +127, +137, +144, +143, +137, +127, +121, +121, +123, +126, +128, +127, +126, +125, +122, +120, +118, +116, +116, +115, +114, +112, +114, +119, +117, +111, +103, +102, +105, +111, +116, +115, +111, +110, +114, +121, +125, +126, +120, +115, +111, +113, +120, +124, +127, +125, +122, +124, +123, +129, +134, +132, +128, +116, +112, +108, +109, +108, +97, +110, +122, +132, +159, +158, +130, +112, +104, +101, +94, +92, +87, +87, +94, +102, +108, +114, +114, +118, +129, +134, +145, +150, +154, +144, +175, +154, +131, +169, +177, +156, +181, +215, +166, +185, +194, +192, +171, +153, +168, +193, +226, +221, +216, +197, +167, +150, +151, +163, +170, +148, +147, +148, +139, +161, +151, +143, +155, +120, +113, +120, +136, +138, +127, +113, +115, +140, +139, +118, +111, +125, +132, +143, +128, +123, +133, +107, +103, +139, +123, +130, +127, +111, +143, +145, +149, +140, +125, +122, +139, +170, +152, +140, +135, +131, +147, +151, +165, +158, +160, +149, +152, +174, +174, +171, +156, +141, +151, +175, +175, +175, +165, +154, +141, +135, +135, +139, +149, +144, +134, +143, +159, +161, +160, +143, +123, +115, +107, +103, +111, +114, +115, +129, +142, +144, +149, +152, +145, +147, +146, +141, +129, +131, +141, +132, +134, +137, +132, +127, +125, +136, +148, +137, +118, +112, +110, +110, +108, +117, +119, +105, +106, +102, +95, +100, +98, +89, +94, +101, +90, +86, +100, +100, +89, +88, +94, +92, +82, +81, +83, +91, +91, +85, +87, +79, +68, +65, +66, +76, +95, +101, +103, +101, +90, +92, +91, +90, +83, +80, +82, +89, +96, +94, +96, +88, +86, +85, +88, +91, +88, +83, +87, +94, +97, +97, +101, +105, +98, +100, +98, +88, +76, +84, +96, +89, +93, +106, +115, +120, +117, +116, +119, +110, +117, +118, +118, +129, +137, +141, +137, +136, +135, +137, +139, +140, +140, +140, +134, +139, +145, +148, +151, +145, +152, +158, +158, +149, +153, +156, +148, +158, +162, +158, +159, +154, +157, +156, +152, +151, +155, +154, +156, +153, +149, +146, +134, +133, +136, +141, +144, +134, +132, +127, +134, +145, +139, +130, +126, +113, +118, +129, +130, +130, +133, +134, +131, +130, +127, +129, +128, +142, +147, +140, +135, +130, +141, +147, +140, +134, +129, +129, +131, +133, +117, +110, +109, +116, +126, +120, +127, +112, +117, +116, +112, +114, +109, +111, +96, +85, +86, +96, +100, +111, +109, +105, +113, +112, +107, +111, +116, +109, +104, +107, +120, +104, +83, +93, +104, +108, +103, +115, +114, +102, +109, +112, +108, +109, +110, +110, +121, +127, +127, +125, +125, +121, +114, +104, +111, +111, +119, +124, +113, +118, +122, +130, +140, +147, +138, +145, +152, +155, +150, +156, +153, +142, +156, +160, +162, +172, +176, +168, +176, +187, +179, +173, +170, +168, +170, +175, +181, +170, +177, +183, +179, +175, +174, +172, +166, +171, +181, +180, +182, +182, +169, +171, +171, +176, +168, +176, +181, +193, +192, +168, +173, +172, +175, +172, +183, +180, +170, +159, +164, +166, +144, +147, +144, +147, +146, +139, +158, +160, +149, +153, +148, +133, +128, +133, +129, +142, +136, +132, +134, +134, +125, +125, +129, +128, +127, +115, +127, +124, +125, +127, +133, +131, +124, +128, +120, +120, +118, +123, +117, +116, +113, +122, +119, +111, +114, +94, +88, +87, +88, +90, +90, +91, +86, +86, +96, +103, +93, +82, +82, +93, +83, +79, +84, +85, +85, +79, +83, +88, +82, +81, +91, +86, +81, +82, +85, +79, +78, +84, +87, +80, +86, +90, +80, +74, +75, +84, +78, +77, +86, +93, +83, +88, +96, +93, +93, +95, +95, +92, +99, +102, +98, +108, +104, +103, +105, +98, +91, +86, +89, +94, +99, +95, +96, +101, +111, +104, +103, +110, +109, +119, +121, +124, +118, +124, +128, +126, +128, +122, +128, +127, +138, +144, +143, +143, +136, +138, +138, +133, +140, +143, +142, +146, +143, +145, +154, +151, +143, +136, +134, +137, +133, +144, +151, +143, +138, +142, +138, +147, +148, +146, +143, +138, +147, +147, +149, +148, +149, +150, +152, +145, +152, +155, +152, +155, +146, +150, +148, +145, +144, +145, +151, +146, +144, +147, +143, +147, +138, +140, +146, +152, +155, +146, +145, +145, +145, +136, +139, +130, +136, +130, +126, +128, +128, +135, +138, +134, +124, +121, +112, +114, +106, +104, +105, +106, +101, +102, +109, +109, +109, +104, +102, +111, +120, +119, +121, +121, +119, +123, +120, +107, +107, +115, +125, +120, +121, +122, +106, +111, +114, +108, +115, +116, +119, +126, +121, +111, +96, +104, +107, +104, +108, +110, +113, +112, +114, +102, +102, +110, +117, +119, +115, +112, +115, +123, +125, +124, +122, +124, +116, +121, +134, +133, +134, +132, +137, +143, +136, +138, +148, +152, +149, +151, +151, +152, +153, +157, +155, +155, +157, +152, +153, +158, +167, +164, +170, +172, +164, +161, +160, +160, +156, +160, +170, +174, +176, +171, +166, +152, +149, +154, +154, +162, +159, +158, +163, +171, +169, +159, +159, +151, +148, +151, +152, +157, +156, +160, +166, +168, +162, +162, +166, +162, +159, +154, +160, +159, +154, +145, +150, +146, +146, +150, +139, +135, +132, +131, +121, +125, +127, +125, +113, +116, +120, +112, +116, +122, +118, +118, +115, +114, +108, +111, +123, +127, +127, +121, +121, +115, +109, +101, +104, +109, +109, +114, +118, +110, +109, +113, +105, +106, +115, +124, +113, +112, +108, +103, +98, +92, +95, +95, +107, +102, +104, +98, +88, +93, +96, +96, +96, +98, +104, +95, +93, +89, +83, +85, +76, +80, +88, +87, +88, +87, +88, +89, +86, +82, +81, +89, +93, +96, +103, +100, +101, +108, +112, +113, +114, +111, +117, +114, +116, +114, +125, +121, +108, +115, +113, +116, +119, +113, +112, +119, +124, +129, +136, +140, +129, +127, +132, +138, +142, +138, +127, +126, +130, +137, +146, +147, +146, +142, +140, +144, +134, +128, +135, +136, +142, +147, +156, +153, +157, +156, +152, +149, +144, +146, +143, +142, +144, +150, +148, +153, +156, +154, +153, +148, +153, +148, +145, +145, +146, +146, +143, +139, +145, +144, +140, +144, +134, +135, +134, +132, +131, +132, +140, +130, +127, +136, +131, +130, +132, +125, +118, +119, +126, +115, +112, +119, +119, +123, +130, +129, +125, +115, +108, +111, +109, +110, +107, +110, +123, +125, +123, +118, +114, +109, +106, +107, +108, +111, +102, +105, +111, +115, +107, +104, +114, +118, +114, +107, +107, +103, +112, +108, +118, +126, +119, +118, +118, +114, +103, +107, +101, +107, +111, +104, +107, +119, +120, +113, +110, +113, +109, +110, +119, +118, +115, +117, +112, +109, +116, +114, +121, +123, +127, +122, +113, +114, +110, +120, +123, +124, +123, +122, +127, +128, +131, +127, +123, +122, +119, +128, +131, +125, +130, +141, +145, +139, +127, +131, +137, +129, +138, +142, +141, +147, +149, +146, +146, +143, +135, +138, +137, +139, +143, +142, +144, +143, +148, +149, +145, +151, +149, +150, +137, +140, +148, +149, +138, +136, +150, +154, +155, +143, +148, +148, +142, +141, +149, +154, +144, +138, +142, +157, +171, +162, +161, +168, +156, +143, +148, +154, +142, +144, +155, +144, +134, +142, +135, +131, +134, +133, +137, +138, +142, +137, +136, +141, +142, +134, +131, +135, +138, +138, +135, +137, +136, +130, +128, +134, +138, +134, +141, +144, +139, +128, +128, +122, +116, +115, +119, +125, +128, +132, +122, +126, +122, +121, +130, +131, +121, +116, +126, +128, +127, +126, +126, +118, +118, +120, +114, +114, +110, +109, +111, +108, +102, +104, +109, +106, +94, +101, +105, +99, +99, +105, +96, +99, +107, +104, +109, +108, +112, +112, +121, +119, +126, +127, +120, +124, +121, +124, +118, +122, +126, +121, +109, +99, +100, +100, +107, +114, +127, +124, +116, +123, +126, +119, +112, +113, +108, +113, +117, +110, +108, +110, +111, +107, +119, +123, +123, +133, +138, +129, +127, +130, +125, +125, +126, +135, +128, +128, +135, +134, +133, +133, +129, +121, +125, +134, +133, +131, +127, +136, +139, +146, +142, +142, +150, +148, +147, +142, +145, +137, +145, +139, +136, +136, +133, +138, +134, +138, +135, +141, +135, +137, +130, +136, +134, +135, +139, +133, +133, +131, +131, +124, +129, +132, +133, +123, +127, +126, +125, +124, +127, +137, +133, +135, +140, +138, +133, +132, +133, +136, +128, +124, +126, +126, +127, +131, +128, +130, +129, +123, +121, +123, +122, +124, +121, +117, +122, +126, +131, +132, +130, +130, +124, +112, +110, +102, +102, +108, +111, +114, +112, +111, +112, +113, +101, +102, +113, +104, +98, +101, +111, +108, +103, +111, +110, +111, +118, +109, +107, +106, +104, +108, +107, +112, +111, +115, +121, +115, +112, +114, +116, +119, +113, +115, +114, +106, +110, +109, +108, +105, +118, +117, +110, +120, +115, +107, +108, +114, +123, +124, +125, +132, +128, +131, +132, +120, +120, +119, +115, +125, +126, +125, +117, +119, +122, +124, +133, +138, +143, +140, +133, +135, +130, +128, +140, +145, +141, +130, +136, +142, +136, +131, +136, +138, +138, +140, +132, +139, +142, +138, +128, +133, +135, +131, +129, +141, +137, +140, +142, +133, +140, +141, +143, +149, +154, +146, +143, +143, +143, +141, +137, +147, +151, +151, +143, +137, +143, +137, +143, +144, +147, +154, +147, +143, +143, +143, +139, +139, +141, +141, +134, +127, +136, +139, +135, +137, +142, +136, +131, +133, +130, +128, +139, +138, +126, +129, +132, +128, +131, +140, +134, +130, +134, +128, +129, +136, +129, +131, +139, +132, +133, +136, +129, +125, +126, +128, +131, +128, +123, +125, +126, +126, +115, +122, +132, +126, +126, +128, +123, +121, +122, +122, +125, +121, +117, +125, +121, +123, +118, +119, +125, +115, +118, +115, +124, +125, +121, +122, +126, +123, +119, +116, +117, +122, +121, +122, +122, +125, +124, +119, +119, +132, +120, +121, +122, +117, +116, +124, +128, +116, +115, +116, +121, +118, +120, +122, +124, +119, +119, +126, +130, +128, +119, +124, +130, +128, +127, +132, +132, +131, +132, +133, +129, +127, +134, +131, +133, +135, +128, +126, +117, +130, +124, +121, +129, +129, +132, +133, +130, +128, +123, +122, +127, +131, +128, +127, +130, +133, +132, +126, +132, +129, +130, +131, +134, +134, +129, +128, +130, +128, +122, +119, +125, +126, +130, +138, +129, +133, +132, +133, +131, +135, +132, +130, +136, +134, +131, +127, +133, +129, +128, +128, +129, +131, +127, +132, +133, +125, +126, +126, +123, +124, +131, +127, +118, +117, +117, +118, +110, +118, +122, +123, +123, +120, +127, +126, +119, +125, +120, +110, +110, +117, +123, +117, +113, +117, +118, +120, +119, +117, +108, +111, +114, +118, +121, +114, +111, +113, +122, +108, +111, +110, +114, +112, +104, +115, +115, +117, +112, +115, +116, +113, +115, +117, +125, +119, +116, +126, +119, +117, +117, +115, +118, +122, +126, +129, +118, +115, +123, +124, +120, +120, +122, +117, +125, +122, +124, +122, +126, +133, +123, +123, +122, +120, +121, +121, +120, +129, +139, +132, +130, +137, +137, +128, +128, +126, +127, +133, +126, +120, +124, +140, +134, +130, +135, +136, +135, +135, +128, +129, +139, +134, +132, +142, +147, +142, +140, +138, +144, +145, +136, +131, +137, +134, +137, +141, +147, +142, +134, +137, +138, +129, +126, +140, +140, +138, +137, +141, +139, +144, +146, +147, +147, +142, +146, +144, +143, +144, +142, +148, +137, +134, +140, +136, +138, +132, +137, +141, +138, +139, +136, +134, +132, +125, +127, +132, +140, +131, +126, +135, +133, +132, +126, +127, +132, +135, +133, +132, +130, +126, +129, +125, +130, +130, +125, +127, +123, +122, +119, +124, +127, +127, +128, +123, +131, +124, +122, +118, +116, +122, +118, +120, +117, +120, +117, +120, +120, +121, +122, +120, +117, +111, +113, +110, +116, +123, +125, +120, +120, +125, +124, +118, +119, +122, +125, +125, +121, +121, +124, +122, +116, +120, +128, +127, +118, +120, +119, +122, +121, +118, +125, +125, +117, +124, +124, +120, +122, +119, +117, +115, +122, +122, +119, +124, +132, +126, +120, +119, +123, +125, +124, +124, +120, +121, +127, +134, +131, +120, +119, +128, +121, +125, +119, +120, +127, +128, +124, +120, +129, +128, +125, +127, +127, +127, +133, +126, +125, +129, +132, +128, +125, +131, +132, +125, +120, +131, +130, +124, +124, +124, +134, +139, +132, +135, +136, +134, +132, +129, +135, +136, +135, +132, +131, +132, +134, +134, +134, +139, +135, +131, +135, +138, +134, +128, +132, +129, +128, +134, +136, +136, +128, +130, +136, +131, +129, +134, +129, +130, +129, +129, +133, +135, +129, +134, +138, +124, +129, +124, +118, +127, +131, +125, +127, +131, +128, +133, +125, +124, +123, +117, +124, +127, +130, +127, +126, +123, +123, +129, +122, +131, +129, +125, +131, +133, +125, +126, +127, +126, +126, +128, +125, +115, +123, +128, +128, +126, +117, +125, +131, +128, +122, +121, +128, +130, +123, +120, +123, +124, +120, +121, +125, +122, +118, +119, +124, +124, +119, +118, +118, +120, +124, +121, +117, +117, +122, +122, +119, +121, +123, +126, +121, +121, +116, +118, +121, +128, +130, +119, +120, +130, +124, +123, +120, +124, +128, +119, +125, +125, +123, +125, +130, +121, +115, +123, +121, +119, +125, +130, +118, +124, +127, +120, +124, +135, +131, +124, +125, +126, +126, +123, +127, +124, +128, +127, +133, +128, +122, +128, +127, +129, +130, +129, +127, +125, +123, +129, +131, +128, +128, +132, +138, +140, +129, +130, +129, +130, +136, +127, +124, +135, +131, +120, +126, +131, +137, +131, +127, +133, +135, +129, +125, +130, +122, +120, +128, +139, +144, +137, +130, +132, +131, +133, +125, +129, +137, +138, +145, +145, +144, +129, +127, +128, +129, +129, +131, +138, +141, +153, +141, +130, +123, +124, +131, +128, +128, +137, +143, +142, +135, +128, +129, +121, +121, +122, +133, +136, +139, +139, +134, +131, +118, +113, +118, +132, +134, +137, +140, +139, +126, +118, +114, +114, +120, +132, +137, +135, +136, +129, +120, +115, +113, +115, +126, +129, +136, +136, +131, +125, +118, +110, +112, +123, +131, +131, +126, +128, +123, +105, +103, +110, +111, +125, +126, +128, +129, +116, +110, +109, +109, +114, +116, +119, +125, +126, +122, +113, +112, +111, +105, +107, +113, +119, +124, +131, +127, +110, +109, +106, +105, +120, +127, +134, +135, +126, +109, +106, +108, +115, +123, +130, +136, +133, +133, +120, +113, +113, +123, +124, +132, +130, +128, +126, +123, +124, +117, +126, +130, +133, +136, +132, +132, +130, +125, +132, +129, +126, +128, +132, +138, +131, +133, +141, +133, +127, +122, +126, +130, +134, +145, +148, +140, +132, +131, +125, +127, +134, +139, +147, +137, +133, +131, +126, +124, +130, +136, +140, +148, +144, +140, +131, +125, +121, +126, +135, +139, +140, +137, +135, +128, +123, +126, +133, +143, +141, +142, +142, +132, +131, +126, +124, +122, +132, +141, +141, +137, +134, +132, +125, +122, +127, +128, +128, +137, +145, +138, +133, +119, +115, +118, +115, +129, +137, +140, +136, +135, +123, +113, +115, +116, +122, +132, +134, +140, +139, +120, +112, +112, +110, +113, +121, +134, +136, +130, +139, +123, +108, +107, +110, +118, +123, +134, +136, +131, +126, +120, +114, +107, +108, +117, +127, +132, +133, +124, +122, +118, +110, +115, +123, +124, +133, +129, +127, +121, +113, +115, +116, +124, +128, +135, +135, +128, +118, +114, +110, +113, +127, +132, +137, +140, +136, +127, +125, +119, +115, +118, +118, +136, +141, +136, +134, +125, +117, +118, +121, +131, +134, +137, +137, +127, +124, +124, +117, +120, +131, +133, +138, +137, +138, +130, +122, +117, +115, +126, +137, +141, +140, +140, +134, +134, +127, +124, +131, +135, +137, +138, +139, +136, +133, +131, +126, +127, +132, +137, +135, +132, +132, +131, +127, +129, +130, +128, +130, +132, +135, +134, +128, +128, +125, +129, +135, +130, +132, +130, +128, +132, +130, +136, +135, +131, +129, +128, +130, +137, +135, +136, +131, +127, +133, +133, +137, +134, +131, +137, +137, +130, +133, +128, +137, +133, +126, +130, +134, +130, +130, +132, +123, +126, +129, +127, +126, +128, +124, +125, +122, +117, +125, +128, +120, +123, +121, +118, +118, +123, +122, +123, +128, +122, +122, +122, +120, +123, +125, +118, +120, +123, +122, +121, +125, +118, +120, +120, +114, +118, +121, +126, +122, +126, +119, +121, +121, +121, +122, +120, +125, +123, +122, +123, +122, +122, +122, +119, +123, +122, +120, +125, +122, +121, +125, +121, +123, +127, +126, +124, +126, +126, +127, +127, +124, +120, +120, +125, +124, +132, +129, +124, +129, +125, +126, +128, +128, +123, +125, +130, +131, +126, +127, +127, +126, +126, +127, +126, +128, +126, +128, +132, +127, +125, +128, +129, +132, +134, +129, +127, +127, +132, +135, +134, +129, +134, +130, +127, +134, +130, +132, +132, +133, +132, +127, +132, +132, +131, +135, +131, +129, +136, +134, +134, +135, +126, +128, +131, +135, +129, +132, +133, +130, +130, +131, +133, +131, +128, +127, +134, +131, +132, +135, +131, +128, +127, +131, +129, +131, +133, +133, +134, +132, +130, +126, +130, +131, +126, +126, +131, +133, +129, +128, +132, +130, +122, +124, +129, +131, +127, +131, +131, +122, +125, +127, +127, +121, +121, +132, +131, +124, +125, +126, +121, +120, +122, +128, +130, +127, +128, +125, +122, +122, +121, +119, +124, +125, +125, +126, +128, +127, +119, +120, +124, +119, +123, +125, +130, +127, +124, +126, +122, +123, +119, +125, +126, +127, +130, +126, +125, +121, +120, +121, +121, +127, +129, +125, +129, +131, +130, +120, +119, +124, +126, +124, +131, +131, +123, +127, +129, +127, +119, +124, +125, +131, +133, +126, +124, +126, +125, +125, +129, +125, +130, +131, +128, +126, +128, +125, +125, +123, +129, +130, +137, +135, +130, +126, +123, +126, +126, +130, +132, +131, +132, +129, +125, +126, +130, +128, +126, +124, +132, +137, +128, +126, +124, +129, +129, +123, +124, +132, +134, +131, +127, +128, +125, +127, +132, +131, +133, +133, +132, +128, +121, +121, +127, +130, +132, +134, +135, +131, +130, +133, +135, +125, +121, +130, +132, +134, +131, +137, +134, +130, +130, +127, +129, +126, +131, +132, +128, +131, +129, +127, +128, +126, +126, +131, +133, +131, +130, +124, +129, +131, +128, +132, +131, +134, +136, +133, +127, +128, +129, +130, +130, +130, +135, +130, +130, +133, +129, +126, +129, +131, +134, +128, +128, +130, +127, +126, +131, +129, +125, +125, +128, +125, +125, +130, +128, +124, +123, +123, +125, +120, +119, +126, +129, +126, +122, +123, +126, +121, +122, +120, +125, +126, +126, +126, +116, +123, +126, +127, +127, +123, +122, +119, +125, +125, +123, +127, +123, +123, +123, +122, +124, +125, +125, +121, +123, +118, +122, +123, +126, +129, +127, +120, +115, +122, +123, +126, +123, +124, +124, +124, +123, +120, +122, +127, +126, +124, +121, +123, +130, +126, +125, +126, +124, +123, +128, +128, +125, +128, +127, +127, +126, +126, +126, +126, +127, +125, +128, +131, +129, +128, +128, +129, +125, +127, +131, +126, +129, +130, +128, +128, +129, +132, +131, +129, +129, +129, +125, +130, +130, +130, +130, +131, +130, +128, +129, +132, +129, +127, +131, +127, +130, +128, +129, +131, +128, +133, +133, +136, +133, +132, +129, +129, +134, +136, +132, +135, +138, +131, +132, +130, +131, +132, +132, +131, +134, +132, +130, +131, +132, +132, +134, +132, +127, +134, +128, +128, +132, +128, +129, +128, +125, +127, +134, +132, +130, +129, +130, +127, +123, +124, +126, +132, +134, +129, +126, +128, +126, +128, +123, +122, +126, +128, +128, +127, +128, +122, +128, +128, +123, +122, +125, +129, +131, +129, +127, +121, +121, +126, +127, +124, +125, +127, +123, +121, +123, +124, +124, +125, +123, +124, +129, +127, +122, +119, +120, +122, +124, +125, +124, +128, +127, +127, +126, +125, +124, +125, +132, +131, +129, +128, +129, +126, +126, +125, +123, +122, +127, +131, +131, +127, +124, +126, +127, +124, +125, +128, +132, +129, +126, +130, +128, +125, +125, +125, +126, +129, +130, +126, +125, +127, +129, +128, +128, +127, +126, +128, +130, +127, +128, +127, +126, +127, +127, +128, +129, +127, +127, +133, +128, +124, +126, +128, +127, +131, +132, +132, +131, +132, +134, +129, +128, +131, +132, +131, +134, +131, +132, +129, +127, +128, +129, +132, +135, +134, +131, +128, +131, +127, +129, +134, +132, +128, +126, +133, +134, +132, +136, +134, +128, +129, +130, +130, +133, +132, +131, +131, +130, +132, +133, +129, +130, +136, +131, +132, +130, +123, +127, +131, +127, +126, +131, +134, +136, +125, +126, +131, +126, +130, +127, +127, +127, +129, +128, +130, +127, +127, +127, +121, +125, +128, +128, +126, +124, +124, +125, +125, +122, +123, +123, +123, +125, +126, +128, +125, +125, +126, +123, +123, +123, +123, +123, +125, +126, +122, +126, +125, +124, +126, +126, +126, +121, +121, +120, +122, +120, +124, +122, +126, +123, +119, +125, +124, +121, +121, +123, +122, +124, +125, +127, +128, +132, +126, +120, +122, +124, +130, +129, +125, +128, +129, +124, +124, +129, +129, +125, +126, +127, +127, +131, +128, +127, +127, +125, +129, +128, +129, +129, +128, +126, +129, +132, +129, +126, +129, +131, +129, +129, +130, +127, +127, +126, +126, +131, +127, +130, +128, +126, +132, +131, +131, +127, +125, +128, +129, +128, +131, +129, +127, +129, +128, +127, +127, +128, +132, +134, +129, +127, +129, +128, +131, +132, +126, +126, +132, +129, +129, +132, +128, +126, +123, +129, +129, +130, +132, +130, +131, +129, +126, +123, +125, +132, +135, +128, +128, +128, +128, +130, +127, +126, +132, +131, +127, +125, +131, +132, +125, +126, +129, +133, +132, +133, +129, +125, +124, +126, +127, +128, +132, +130, +125, +125, +127, +127, +127, +128, +126, +122, +126, +131, +129, +128, +125, +126, +125, +121, +123, +127, +128, +125, +127, +127, +128, +122, +120, +124, +123, +127, +124, +131, +129, +124, +127, +127, +126, +126, +124, +125, +127, +130, +130, +124, +124, +123, +125, +130, +125, +125, +126, +125, +129, +124, +123, +127, +128, +125, +126, +127, +125, +124, +124, +127, +122, +121, +122, +123, +127, +125, +125, +127, +125, +126, +128, +123, +127, +130, +129, +124, +123, +125, +124, +125, +125, +128, +131, +130, +126, +128, +129, +124, +128, +130, +128, +126, +132, +131, +130, +130, +128, +130, +128, +128, +128, +131, +131, +128, +131, +131, +128, +129, +130, +129, +133, +130, +128, +127, +130, +133, +125, +126, +130, +133, +134, +131, +130, +129, +128, +124, +126, +129, +128, +129, +127, +130, +128, +130, +131, +128, +130, +129, +127, +129, +132, +126, +126, +127, +128, +130, +128, +131, +130, +128, +130, +129, +128, +127, +127, +128, +132, +130, +126, +128, +130, +129, +129, +128, +127, +130, +131, +128, +130, +128, +127, +125, +128, +128, +128, +130, +129, +128, +122, +124, +127, +126, +126, +126, +126, +126, +127, +127, +125, +124, +128, +125, +125, +124, +127, +130, +123, +125, +129, +126, +123, +125, +126, +127, +127, +126, +125, +123, +122, +124, +125, +126, +122, +125, +127, +125, +126, +127, +126, +123, +126, +129, +129, +125, +125, +124, +125, +129, +127, +128, +128, +122, +127, +130, +125, +126, +128, +127, +127, +126, +127, +126, +126, +126, +126, +126, +126, +126, +126, +128, +128, +128, +129, +128, +125, +125, +124, +126, +127, +129, +128, +128, +129, +129, +128, +126, +126, +128, +131, +131, +129, +127, +129, +126, +127, +128, +129, +130, +132, +129, +133, +130, +127, +128, +128, +129, +128, +126, +127, +129, +129, +130, +129, +128, +130, +129, +127, +127, +126, +128, +126, +129, +128, +126, +129, +132, +133, +128, +128, +130, +130, +129, +128, +127, +126, +134, +133, +132, +129, +130, +128, +127, +130, +131, +127, +130, +131, +131, +134, +129, +127, +127, +133, +132, +124, +125, +131, +131, +128, +128, +125, +128, +131, +126, +127, +130, +130, +131, +129, +127, +126, +127, +127, +127, +129, +129, +127, +124, +126, +125, +125, +125, +126, +126, +123, +126, +126, +126, +126, +125, +125, +124, +127, +126, +124, +126, +126, +127, +126, +127, +127, +125, +124, +122, +125, +126, +124, +124, +121, +123, +124, +124, +124, +126, +123, +122, +124, +121, +122, +124, +125, +126, +125, +124, +126, +124, +121, +127, +125, +127, +126, +125, +125, +126, +124, +123, +127, +128, +125, +121, +126, +127, +124, +124, +123, +127, +126, +124, +126, +127, +127, +125, +126, +127, +128, +128, +128, +131, +127, +124, +126, +127, +130, +131, +127, +126, +129, +129, +128, +129, +128, +128, +126, +128, +130, +130, +130, +128, +130, +128, +131, +131, +132, +130, +130, +126, +128, +131, +130, +130, +126, +129, +130, +130, +132, +133, +132, +130, +129, +130, +131, +133, +132, +131, +131, +130, +128, +130, +128, +127, +129, +133, +131, +126, +127, +128, +130, +128, +127, +126, +126, +127, +130, +126, +126, +127, +127, +130, +128, +128, +129, +128, +128, +130, +131, +127, +130, +127, +127, +128, +130, +130, +128, +129, +127, +129, +128, +128, +127, +128, +126, +127, +128, +127, +126, +126, +128, +128, +128, +129, +128, +126, +128, +127, +126, +129, +130, +128, +124, +125, +125, +126, +126, +125, +124, +127, +127, +126, +125, +126, +125, +124, +128, +127, +126, +124, +125, +124, +124, +127, +130, +127, +123, +126, +128, +126, +125, +125, +124, +128, +127, +127, +126, +126, +124, +125, +127, +125, +128, +125, +125, +125, +125, +127, +128, +124, +125, +126, +127, +124, +125, +125, +125, +125, +123, +125, +127, +127, +127, +130, +125, +124, +126, +128, +125, +128, +128, +127, +129, +127, +125, +129, +129, +128, +126, +130, +129, +125, +128, +126, +131, +131, +128, +128, +130, +129, +126, +127, +130, +130, +127, +129, +130, +128, +129, +128, +130, +128, +130, +131, +127, +129, +129, +130, +130, +129, +128, +128, +128, +126, +128, +128, +128, +128, +126, +131, +131, +129, +129, +127, +129, +129, +129, +126, +126, +128, +130, +129, +128, +130, +127, +128, +126, +128, +125, +130, +129, +127, +129, +128, +127, +127, +130, +129, +127, +128, +128, +126, +127, +128, +128, +128, +128, +129, +128, +127, +128, +126, +126, +126, +125, +126, +125, +126, +127, +129, +126, +124, +125, +128, +126, +126, +128, +127, +125, +126, +125, +127, +125, +126, +128, +128, +128, +128, +129, +127, +125, +125, +125, +125, +127, +126, +125, +126, +125, +127, +126, +126, +128, +125, +125, +125, +127, +127, +129, +128, +127, +129, +128, +124, +125, +126, +127, +127, +128, +128, +126, +125, +126, +126, +125, +126, +128, +127, +126, +127, +125, +127, +123, +123, +125, +126, +127, +125, +127, +126, +125, +126, +127, +129, +129, +127, +125, +126, +128, +129, +128, +130, +128, +125, +127, +128, +127, +128, +129, +129, +127, +127, +127, +129, +127, +127, +126, +126, +127, +130, +128, +129, +130, +126, +125, +127, +128, +130, +127, +127, +128, +130, +128, +127, +129, +130, +130, +126, +128, +127, +127, +129, +126, +127, +129, +129, +125, +127, +130, +127, +127, +128, +126, +128, +128, +126, +126, +127, +129, +127, +126, +128, +129, +126, +127, +128, +129, +126, +125, +129, +128, +129, +127, +126, +126, +125, +127, +127, +127, +126, +125, +128, +127, +126, +126, +126, +127, +127, +125, +127, +129, +127, +128, +129, +125, +124, +125, +126, +127, +128, +128, +127, +127, +127, +128, +128, +130, +126, +128, +126, +124, +129, +126, +125, +127, +126, +127, +127, +127, +129, +128, +126, +125, +124, +125, +126, +128, +130, +126, +123, +126, +128, +128, +126, +126, +128, +127, +127, +128, +129, +127, +127, +126, +126, +127, +128, +128, +126, +126, +128, +127, +128, +125, +126, +128, +128, +128, +123, +125, +127, +128, +128, +124, +125, +124, +126, +126, +128, +127, +127, +127, +126, +126, +128, +128, +125, +124, +126, +128, +130, +127, +127, +128, +128, +125, +126, +127, +128, +127, +128, +129, +128, +126, +127, +129, +127, +127, +128, +130, +129, +127, +127, +126, +128, +129, +128, +129, +128, +128, +126, +128, +129, +127, +126, +127, +127, +129, +129, +126, +128, +127, +129, +128, +128, +126, +125, +127, +127, +127, +127, +127, +127, +128, +127, +127, +126, +126, +127, +129, +128, +128, +127, +127, +127, +127, +128, +128, +126, +127, +129, +127, +125, +125, +126, +126, +128, +129, +126, +125, +126, +125, +126, +127, +129, +127, +127, +125, +126, +126, +126, +126, +129, +128, +126, +128, +128, +126, +126, +128, +127, +129, +127, +127, +128, +125, +126, +128, +129, +127, +127, +126, +129, +130, +128, +128, +129, +128, +126, +128, +129, +127, +126, +125, +126, +127, +127, +128, +126, +126, +128, +128, +127, +126, +127, +127, +129, +129, +127, +124, +127, +128, +129, +128, +125, +126, +126, +128, +127, +129, +128, +127, +126, +126, +128, +125, +126, +125, +126, +126, +128, +128, +128, +126, +126, +128, +127, +129, +128, +127, +128, +128, +127, +128, +129, +128, +128, +127, +126, +126, +124, +126, +127, +127, +126, +128, +127, +127, +127, +128, +127, +128, +128, +127, +127, +128, +128, +127, +127, +130, +129, +129, +129, +127, +127, +129, +130, +127, +127, +130, +129, +125, +125, +127, +129, +129, +127, +127, +129, +127, +125, +127, +129, +128, +127, +128, +129, +126, +126, +126, +128, +129, +129, +126, +126, +127, +127, +127, +126, +126, +127, +127, +127, +127, +127, +127, +126, +126, +126, +128, +126, +127, +128, +127, +126, +126, +127, +126, +127, +127, +127, +128, +126, +128, +129, +129, +126, +124, +127, +127, +128, +128, +126, +125, +126, +127, +126, +125, +126, +128, +126, +127, +127, +125, +125, +125, +127, +127, +127, +127, +126, +128, +126, +125, +126, +126, +124, +127, +127, +126, +125, +125, +126, +126, +126, +127, +127, +126, +127, +125, +125, +127, +128, +127, +127, +126, +126, +126, +127, +128, +127, +128, +127, +128, +128, +128, +125, +124, +127, +129, +129, +129, +126, +128, +129, +126, +126, +128, +128, +128, +127, +128, +126, +128, +127, +126, +125, +127, +129, +129, +127, +126, +127, +127, +127, +126, +127, +128, +128, +127, +126, +126, +125, +125, +126, +127, +128, +126, +127, +127, +128, +129, +127, +126, +127, +126, +128, +130, +128, +126, +130, +130, +127, +127, +128, +127, +128, +127, +128, +128, +128, +128, +129, +130, +129, +127, +129, +129, +131, +129, +128, +128, +128, +127, +127, +127, +126, +127, +128, +127, +126, +126, +127, +128, +129, +127, +126, +127, +129, +127, +126, +126, +128, +128, +126, +128, +129, +129, +126, +127, +127, +128, +127, +128, +130, +127, +126, +127, +127, +128, +126, +127, +127, +128, +126, +127, +128, +127, +127, +125, +128, +128, +129, +126, +126, +128, +126, +127, +127, +126, +128, +127, +125, +126, +127, +128, +126, +124, +126, +125, +127, +125, +125, +125, +126, +127, +127, +126, +126, +127, +127, +128, +128, +127, +126, +127, +126, +127, +127, +126, +125, +127, +128, +126, +128, +129, +128, +126, +126, +126, +127, +129, +127, +127, +126, +125, +127, +128, +129, +127, +125, +127, +128, +127, +126, +125, +125, +127, +126, +128, +129, +127, +126, +127, +127, +126, +126, +127, +127, +127, +128, +126, +128, +129, +128, +128, +128, +126, +127, +130, +129, +127, +129, +129, +130, +127, +127, +127, +128, +128, +129, +129, +127, +127, +129, +128, +129, +130, +129, +126, +128, +128, +128, +128, +127, +128, +127, +127, +127, +127, +127, +128, +127, +127, +127, +128, +128, +128, +126, +127, +129, +128, +126, +128, +128, +127, +127, +128, +127, +128, +128, +128, +128, +127, +128, +128, +128, +127, +127, +129, +128, +125, +127, +128, +128, +127, +127, +127, +127, +127, +128, +127, +127, +127, +127, +128, +127, +126, +126, +128, +127, +127, +128, +126, +126, +126, +126, +127, +126, +126, +125, +125, +127, +126, +126, +127, +127, +127, +126, +126, +126, +126, +128, +128, +128, +127, +126, +126, +127, +127, +128, +128, +126, +128, +127, +126, +127, +127, +126, +127, +127, +129, +127, +127, +128, +127, +127, +127, +127, +127, +128, +127, +130, +128, +129, +129, +128, +127, +128, +128, +127, +127, +127, +127, +126, +127, +128, +129, +127, +126, +127, +126, +127, +126, +127, +128, +127, +129, +127, +126, +126, +128, +127, +128, +126, +126, +127, +127, +127, +128, +127, +127, +128, +126, +126, +127, +126, +125, +126, +126, +128, +126, +127, +126, +127, +125, +126, +127, +129, +128, +128, +128, +128, +129, +127, +127, +125, +128, +128, +126, +128, +127, +126, +126, +126, +125, +126, +125, +127, +127, +126, +127, +126, +126, +128, +127, +125, +125, +127, +128, +129, +127, +127, +127, +127, +128, +128, +129, +128, +129, +127, +127, +126, +129, +128, +127, +127, +127, +127, +127, +127, +126, +127, +128, +128, +127, +128, +129, +128, +126, +125, +128, +129, +128, +127, +126, +126, +127, +127, +126, +126, +127, +127, +126, +126, +126, +125, +124, +126, +128, +128, +125, +125, +127, +126, +127, +128, +127, +125, +127, +128, +127, +128, +126, +127, +128, +127, +127, +126, +127, +127, +127, +127, +126, +128, +129, +128, +126, +126, +126, +126, +127, +128, +127, +127, +126, +127, +128, +128, +129, +128, +127, +127, +128, +128, +127, +128, +129, +127, +127, +126, +129, +127, +126, +127, +127, +127, +128, +128, +126, +128, +128, +128, +128, +129, +127, +127, +126, +128, +127, +128, +129, +129, +129, +127, +129, +130, +128, +129, +128, +128, +129, +128, +128, +127, +126, +126, +127, +127, +128, +128, +128, +127, +126, +127, +128, +128, +126, +127, +128, +127, +129, +128, +125, +126, +126, +127, +127, +128, +128, +127, +128, +127, +126, +125, +127, +127, +127, +128, +127, +128, +126, +126, +126, +126, +128, +127, +127, +127, +126, +125, +126, +126, +127, +128, +127, +127, +127, +127, +125, +125, +128, +127, +127, +127, +126, +126, +126, +127, +126, +126, +127, +126, +127, +127, +127, +128, +128, +128, +127, +127, +127, +126, +126, +127, +126, +128, +127, +127, +127, +126, +127, +127, +128, +126, +127, +127, +128, +126, +126, +127, +126, +127, +128, +128, +128, +128, +127, +127, +128, +127, +128, +128, +128, +127, +126, +126, +128, +128, +127, +127, +126, +128, +128, +128, +126, +127, +127, +129, +129, +129, +129, +129, +128, +128, +127, +127, +127, +127, +130, +129, +129, +127, +128, +128, +128, +129, +129, +129, +128, +128, +127, +128, +128, +129, +128, +127, +127, +129, +128, +129, +127, +127, +127, +128, +128, +127, +128, +130, +128, +128, +127, +127, +126, +128, +127, +127, +127, +126, +127, +127, +127, +126, +126, +126, +127, +127, +127, +126, +127, +126, +126, +126, +127, +126, +127, +126, +129, +128, +126, +127, +127, +126, +127, +126, +126, +126, +125, +125, +127, +126, +126, +127, +126, +126, +126, +128, +126, +126, +126, +127, +126, +127, +128, +128, +127, +127, +129, +128, +127, +126, +128, +128, +127, +127, +128, +130, +128, +127, +127, +126, +126, +126, +128, +129, +127, +127, +127, +128, +129, +128, +127, +128, +127, +128, +127, +126, +128, +128, +126, +126, +127, +126, +128, +128, +127, +127, +127, +126, +126, +127, +126, +127, +126, +126, +127, +127, +126, +126, +126, +127, +126, +127, +126, +126, +126, +128, +127, +126, +127, +127, +127, +127, +127, +127, +126, +126, +126, +127, +126, +126, +126, +127, +128, +126, +125, +126, +126, +125, +126, +127, +128, +127, +127, +128, +128, +128, +128, +128, +129, +127, +127, +127, +128, +127, +128, +128, +127, +127, +127, +127, +128, +127, +128, +128, +128, +128, +128, +127, +127, +128, +127, +129, +129, +128, +129, +129, +129, +129, +129, +130, +129, +127, +128, +128, +129, +129, +129, +128, +127, +126, +127, +127, +127, +126, +128, +127, +128, +126, +126, +126, +127, +128, +127, +128, +127, +128, +127, +127, +126, +126, +125, +126, +127, +128, +128, +127, +126, +128, +126, +126, +126, +126, +127, +126, +127, +128, +127, +126, +126, +127, +127, +127, +128, +127, +128, +127, +126, +127, +127, +127, +127, +127, +127, +128, +127, +127, +126, +126, +127, +126, +127, +126, +126, +126, +127, +126, +126, +125, +126, +126, +128, +128, +128, +127, +125, +126, +128, +128, +127, +127, +127, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +128, +127, +127, +128, +128, +128, +127, +127, +129, +129, +127, +128, +128, +127, +128, +128, +129, +127, +129, +128, +129, +129, +129, +130, +129, +129, +127, +127, +128, +128, +128, +128, +127, +128, +129, +128, +128, +127, +128, +128, +129, +128, +128, +127, +127, +127, +128, +127, +127, +127, +128, +127, +127, +127, +128, +127, +128, +127, +128, +127, +127, +128, +127, +127, +126, +126, +127, +129, +128, +127, +128, +127, +128, +128, +126, +128, +128, +127, +127, +127, +125, +126, +128, +128, +126, +126, +126, +127, +125, +125, +125, +126, +126, +126, +126, +127, +125, +127, +127, +127, +128, +128, +128, +128, +127, +127, +127, +127, +127, +126, +126, +127, +126, +127, +127, +127, +127, +127, +127, +126, +127, +128, +127, +127, +127, +127, +127, +127, +128, +128, +128, +127, +128, +128, +129, +128, +128, +128, +128, +128, +127, +128, +128, +127, +127, +128, +129, +128, +127, +127, +127, +128, +128, +127, +129, +128, +128, +127, +127, +128, +129, +129, +127, +127, +127, +128, +128, +127, +127, +127, +128, +128, +127, +128, +128, +128, +127, +126, +126, +127, +127, +127, +127, +128, +128, +127, +128, +127, +128, +127, +127, +127, +128, +128, +128, +128, +128, +128, +128, +128, +126, +127, +127, +128, +127, +127, +127, +128, +128, +127, +127, +127, +128, +127, +127, +127, +128, +129, +128, +128, +127, +128, +128, +127, +127, +127, +128, +127, +127, +127, +127, +128, +127, +128, +127, +126, +126, +127, +126, +127, +126, +126, +126, +126, +127, +126, +126, +126, +127, +127, +126, +128, +127, +127, +126, +127, +128, +127, +127, +126, +127, +127, +127, +128, +126, +126, +126, +126, +127, +126, +126, +127, +126, +127, +126, +127, +127, +127, +126, +125, +126, +127, +127, +126, +126, +125, +126, +126, +127, +127, +125, +125, +126, +126, +127, +126, +126, +126, +127, +126, +125, +126, +126, +126, +126, +127, +127, +125, +127, +127, +127, +127, +127, +126, +127, +126, +127, +127, +126, +127, +126, +127, +126, +126, +127, +126, +127, +127, +128, +128, +128, +126, +126, +127, +128, +127, +128, +127, +128, +127, +128, +127, +129, +129, +128, +129, +129, +128, +128, +127, +128, +128, +129, +127, +128, +128, +128, +128, +127, +127, +127, +128, +128, +128, +128, +127, +128, +128, +127, +127, +128, +127, +129, +128, +129, +129, +129, +128, +128, +128, +129, +129, +129, +128, +128, +129, +128, +128, +128, +128, +128, +128, +127, +127, +128, +129, +128, +127, +128, +128, +127, +127, +128, +127, +127, +127, +128, +127, +127, +126, +126, +127, +127, +126, +127, +126, +126, +126, +127, +126, +126, +126, +126, +127, +126, +126, +125, +126, +127, +126, +127, +127, +126, +126, +126, +126, +125, +126, +127, +126, +126, +126, +125, +125, +127, +126, +126, +126, +126, +127, +126, +127, +127, +126, +126, +127, +126, +127, +127, +126, +127, +127, +126, +128, +127, +128, +128, +127, +127, +127, +128, +127, +127, +127, +128, +127, +127, +128, +127, +127, +126, +128, +128, +128, +128, +128, +128, +127, +128, +127, +128, +128, +127, +127, +128, +128, +128, +128, +128, +128, +128, +128, +127, +128, +128, +129, +128, +129, +128, +128, +128, +128, +128, +129, +128, +129, +128, +129, +129, +127, +128, +128, +128, +129, +129, +129, +128, +128, +128, +128, +127, +128, +128, +128, +127, +128, +128, +127, +128, +128, +128, +128, +128, +126, +128, +128, +127, +128, +127, +128, +127, +129, +127, +127, +127, +129, +129, +127, +127, +128, +128, +127, +127, +127, +127, +128, +128, +127, +128, +127, +127, +126, +128, +126, +127, +127, +128, +127, +126, +126, +126, +126, +127, +127, +127, +127, +126, +128, +127, +127, +127, +127, +128, +127, +127, +127, +127, +127, +127, +127, +127, +126, +127, +127, +127, +126, +127, +128, +127, +127, +125, +126, +126, +127, +126, +127, +126, +127, +126, +127, +126, +127, +127, +127, +127, +128, +128, +127, +128, +128, +127, +127, +127, +127, +127, +127, +127, +128, +127, +128, +127, +128, +127, +127, +127, +128, +128, +128, +127, +127, +128, +127, +128, +128, +128 +}; diff --git a/MCUME_pico/testio/testio.cpp b/MCUME_pico/testio/testio.cpp new file mode 100644 index 0000000..09411d5 --- /dev/null +++ b/MCUME_pico/testio/testio.cpp @@ -0,0 +1,104 @@ +#include "pico.h" +#include "pico/stdlib.h" + +extern "C" { + #include "iopins.h" + #include "emuapi.h" +} +#include "keyboard_osd.h" +#include "vga_t_dma.h" + +#include + +TFT_T_DMA tft; +static uint8_t sector_data[1024]; + + +int main(void) { +// set_sys_clock_48mhz(); + stdio_init_all(); + + printf("start\n"); + tft.begin(VGA_MODE_320x240); + emu_init(); + emu_sndInit(); + while (true) { + //printf("Hello, world!\n"); + if (menuActive()) { + uint16_t bClick = emu_DebounceLocalKeys(); + int action = handleMenu(bClick); + char * filename = menuSelection(); + if (action == ACTION_RUNTFT) { + toggleMenu(false); + //emu_start(); + //emu_Init(filename); + tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) ); + tft.startDMA(); + } + tft.waitSync(); + } + else { + //emu_Step(); + uint16_t bClick = emu_DebounceLocalKeys(); + emu_Input(bClick); + } + int c = getchar_timeout_us(0); + switch (c) { + case ' ': + printf("Inverted: %d\n", 1); + break; + } + } +} + + +#include "hardware/irq.h" +#include "hardware/pwm.h" +#include "rock.h" + +#define AUDIO_PIN 28 + + +static int cur_sample = 0; + +void pwm_irh() { + pwm_clear_irq(pwm_gpio_to_slice_num(AUDIO_PIN)); + pwm_set_gpio_level(AUDIO_PIN, audio_buffer[cur_sample >> 2]); + + uint8_t sample = audio_buffer[cur_sample >> 2]; + + if (cur_sample < (AUDIO_SAMPLES * 4) - 1) { + ++cur_sample; + } else { + cur_sample = 0; + } +} + +void emu_sndInit() { + gpio_set_function(AUDIO_PIN, GPIO_FUNC_PWM); + + int audio_pin_slice = pwm_gpio_to_slice_num(AUDIO_PIN); + + // Setup PWM interrupt to fire when PWM cycle is complete + pwm_clear_irq(audio_pin_slice); + pwm_set_irq_enabled(audio_pin_slice, true); + irq_set_exclusive_handler(PWM_IRQ_WRAP, pwm_irh); + irq_set_enabled(PWM_IRQ_WRAP, true); + + // Setup PWM for audio output + pwm_config config = pwm_get_default_config(); + pwm_config_set_clkdiv(&config, 5.5f); + pwm_config_set_wrap(&config, 254); + pwm_init(audio_pin_slice, &config, true); + + pwm_set_gpio_level(AUDIO_PIN, 0); +} + +void emu_sndPlaySound(int chan, int volume, int freq) +{ +} + + + + + diff --git a/MCUME_pico/vga_t4/.DS_Store b/MCUME_pico/vga_t4/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/MCUME_pico/vga_t4/.DS_Store differ diff --git a/MCUME_pico/vga_t4/VGA_font8x8.h b/MCUME_pico/vga_t4/VGA_font8x8.h new file mode 100644 index 0000000..bab272e --- /dev/null +++ b/MCUME_pico/vga_t4/VGA_font8x8.h @@ -0,0 +1,136 @@ + +// Font: c64_lower.64c + +const unsigned char font8x8[128][8] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) + { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) + { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) + { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) + { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//) + { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) + { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) + { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) + { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F +}; + + diff --git a/MCUME_pico/vga_t4/VGA_t4.cpp b/MCUME_pico/vga_t4/VGA_t4.cpp new file mode 100755 index 0000000..bd36b86 --- /dev/null +++ b/MCUME_pico/vga_t4/VGA_t4.cpp @@ -0,0 +1,1694 @@ +/* + This file is part of VGA_t4 library. + + VGA_t4 library 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 3 of the License, or + (at your option) any later version. + + Copyright (C) 2020 J-M Harvengt + + Inspired from the original Teensy3 uVGA library of Eric PREVOTEAU. + QTIMER/FlexIO code based on Teensy4 examples of KurtE, Manitou and easone + from the Teensy4 forum (https://forum.pjrc.com) +*/ + +#include "VGA_t4.h" +#include "VGA_font8x8.h" +#include "pico/stdlib.h" +#include "pico/multicore.h" +//#include "pico/scanvideo.h" +//#include "pico/scanvideo/composable_scanline.h" +#include "scanvideo.h" +#include "composable_scanline.h" +#include "pico/sync.h" +#include + +#define R16(rgb) ((rgb>>8)&0xf8) +#define G16(rgb) ((rgb>>3)&0xfc) +#define B16(rgb) ((rgb<<3)&0xf8) + + +// 8 bits 320x240 frame buffer => 64K +static vga_pixel * visible_framebuffer = NULL; +static vga_pixel * framebuffer = NULL; +static vga_pixel * fb0 = NULL; +static vga_pixel * fb1 = NULL; + +static int fb_width; +static int fb_height; +static int fb_stride; +static int left_border; +static int top_border; +static int currentLine; + +static semaphore_t video_initted; +static void core1_func(); + +PolyDef PolySet; // will contain a polygon data + +#define vga_mode vga_mode_320x240_60 + +#define RGBVAL16(r,g,b) ( (((b>>3)&0x1f)<<11) | (((g>>2)&0x3f)<<5) | (((r>>3)&0x1f)<<0) ) +#define PICO_SCANVIDEO_PIXEL_FROM_RGBVAL8(rgb) (((rgb&0x3)<<(PICO_SCANVIDEO_PIXEL_BSHIFT))|(((rgb&0x1C)>>2)<<(PICO_SCANVIDEO_PIXEL_GSHIFT))|(((rgb&0xE0)>>5)<<(PICO_SCANVIDEO_PIXEL_RSHIFT))) + + + +static void draw_fb_line(scanvideo_scanline_buffer_t *buffer) { + currentLine = scanvideo_scanline_number(buffer->scanline_id); + uint16_t *p = (uint16_t *) buffer->data; + + //if ( (currentLine > top_border) && (currentLine < (fb_height+top_border)) ) + { + currentLine -= top_border; + //if (left_border) { + // *p++ = COMPOSABLE_COLOR_RUN; + // *p++ = 0; + // *p++ = left_border/2 - 3; + //} + uint8_t *linebuffer = &visible_framebuffer[fb_stride*currentLine]; + *p++ = COMPOSABLE_RAW_RUN; + *p++ = *linebuffer++; // first pixel (8bit to 16bits conv) + *p++ = fb_width - 3; // len - 3 + for (uint bar = 0; bar < (fb_width-1); bar++) { + *p++ = *linebuffer++; // other pixels (8bit to 16bits conv) + } + } + + // black pixel to end line + *p++ = COMPOSABLE_RAW_1P; + *p++ = 0; + // end of line with alignment padding + *p++ = COMPOSABLE_EOL_SKIP_ALIGN; + *p++ = 0; + + buffer->data_used = ((uint32_t *) p) - buffer->data; + assert(buffer->data_used < buffer->data_max); + + buffer->status = SCANLINE_OK; +} + + +static void core1_func() { + // initialize video and interrupts on core 1 + scanvideo_setup(&vga_mode); + scanvideo_timing_enable(true); + sem_release(&video_initted); + + while (true) { + scanvideo_scanline_buffer_t *scanline_buffer = scanvideo_begin_scanline_generation(true); + draw_fb_line(scanline_buffer); + scanvideo_end_scanline_generation(scanline_buffer); + } +} + +VGA_T4::VGA_T4() +{ +} + +void VGA_T4::tweak_video(int shiftdelta, int numdelta, int denomdelta) +{ +} + +// display VGA image +vga_error_t VGA_T4::begin(vga_mode_t mode) +{ + switch(mode) { + case VGA_MODE_320x240: + fb_width = 320; //200; + fb_height = 240; //200; //240 ; + left_border = (320-fb_width)/2; + top_border = (240-fb_height)/2; + fb_stride = fb_width; + break; + case VGA_MODE_320x480: + break; + case VGA_MODE_640x240: + break; + case VGA_MODE_640x480: + break; + case VGA_MODE_512x240: + break; + case VGA_MODE_512x480: + break; + case VGA_MODE_352x240: + break; + case VGA_MODE_352x480: + break; + } + + + /* initialize gfx buffer */ + if (fb0 == NULL) { + fb0 = (vga_pixel *)malloc(fb_stride*fb_height*sizeof(vga_pixel)); + } + memset((void*)fb0,0, fb_stride*fb_height*sizeof(vga_pixel)); + visible_framebuffer = fb0; + framebuffer = fb0; + + // create a semaphore to be posted when video init is complete + sem_init(&video_initted, 0, 1); + + // launch all the video on core 1, so it isn't affected by USB handling on core 0 + multicore_launch_core1(core1_func); + + // wait for initialization of video to be complete + sem_acquire_blocking(&video_initted); + + // init buffer with random + uint8_t * buf = &framebuffer[0]; + for( int i=0; i<(fb_width*fb_height); i++) + *buf++ = VGA_RGB(rand() % 255,rand() % 255,rand() % 255); + + return(VGA_OK); +} + +void VGA_T4::end() +{ +} + +void VGA_T4::debug() +{ +} + +// retrieve size of the frame buffer +void VGA_T4::get_frame_buffer_size(int *width, int *height) +{ + *width = fb_width; + *height = fb_height; +} + +void VGA_T4::waitSync() +{ + scanvideo_wait_for_vblank(); +} + +void VGA_T4::waitLine(int line) +{ +// while (currentLine != line) {}; +} + +void VGA_T4::clear(vga_pixel color) { + int i,j; + for (j=0; j=0) && (x<=fb_width) && (y>=0) && (y<=fb_height)) + framebuffer[y*fb_stride+x] = color; +} + +vga_pixel VGA_T4::getPixel(int x, int y){ + return(framebuffer[y*fb_stride+x]); +} + +vga_pixel * VGA_T4::getLineBuffer(int j) { + return (&framebuffer[j*fb_stride]); +} + +void VGA_T4::drawRect(int16_t x, int16_t y, int16_t w, int16_t h, vga_pixel color) { + int i,j,l=y; + for (j=0; j> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + l++; + } + dst=&framebuffer[l*fb_stride+x]; + bits = *charpt++; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + l++; + } + x +=8; + } +} + +void VGA_T4::drawSprite(int16_t x, int16_t y, const int16_t *bitmap) { + drawSprite(x,y,bitmap, 0,0,0,0); +} + +void VGA_T4::drawSprite(int16_t x, int16_t y, const int16_t *bitmap, uint16_t arx, uint16_t ary, uint16_t arw, uint16_t arh) +{ + int bmp_offx = 0; + int bmp_offy = 0; + int16_t *bmp_ptr; + + int w =*bitmap++; + int h = *bitmap++; + + + if ( (arw == 0) || (arh == 0) ) { + // no crop window + arx = x; + ary = y; + arw = w; + arh = h; + } + else { + if ( (x>(arx+arw)) || ((x+w)(ary+arh)) || ((y+h) arx) && (x<(arx+arw)) ) { + arw = arw - (x-arx); + arx = arx + (x-arx); + } else { + bmp_offx = arx; + } + if ( ((x+w) > arx) && ((x+w)<(arx+arw)) ) { + arw -= (arx+arw-x-w); + } + if ( (y > ary) && (y<(ary+arh)) ) { + arh = arh - (y-ary); + ary = ary + (y-ary); + } else { + bmp_offy = ary; + } + if ( ((y+h) > ary) && ((y+h)<(ary+arh)) ) { + arh -= (ary+arh-y-h); + } + } + + + int l=ary; + bitmap = bitmap + bmp_offy*w + bmp_offx; + for (int row=0;row 2) ) y += (fb_height-height)/2; + vga_pixel * dst=&framebuffer[y*fb_stride]; + if (width > fb_width) { +#ifdef TFT_LINEARINT + int delta = (width/(width-fb_width))-1; + int pos = delta; + for (int i=0; i> 8]]; + pos +=step; + } +#endif + } + else if ((width*2) == fb_width) { + for (int i=0; i 2) ) y += (fb_height-height)/2; + uint8_t * dst=&framebuffer[y*fb_stride]; + if (width > fb_width) { + int step = ((width << 8)/fb_width); + int pos = 0; + for (int i=0; i> 8]; + pos +=step; + } + } + else if ((width*2) == fb_width) { + for (int i=0; i 2) ) y += (fb_height-height)/2; + uint8_t * dst=&framebuffer[y*fb_stride]; + if (width > fb_width) { + int step = ((width << 8)/fb_width); + int pos = 0; + for (int i=0; i> 8]; + *dst++ = VGA_RGB(R16(pix),G16(pix),B16(pix)); + pos +=step; + } + } + else if ((width*2) == fb_width) { + for (int i=0; i 2) ) { + ysrc += (fb_height-height)/2; + ydst += (fb_height-height)/2; + } + uint8_t * src=&framebuffer[ysrc*fb_stride]; + uint8_t * dst=&framebuffer[ydst*fb_stride]; + memcpy(dst,src,width); +} + + +//-------------------------------------------------------------- +// Draw a line between 2 points +// x1,y1 : 1st point +// x2,y2 : 2nd point +// Color : 16bits color +//-------------------------------------------------------------- +void VGA_T4::drawline(int16_t x1, int16_t y1, int16_t x2, int16_t y2, vga_pixel color){ + uint8_t yLonger = 0; + int incrementVal, endVal; + int shortLen = y2-y1; + int longLen = x2-x1; + int decInc; + int j = 0, i = 0; + + if(ABS(shortLen) > ABS(longLen)) { + int swap = shortLen; + shortLen = longLen; + longLen = swap; + yLonger = 1; + } + + endVal = longLen; + + if(longLen < 0) { + incrementVal = -1; + longLen = -longLen; + endVal--; + } else { + incrementVal = 1; + endVal++; + } + + if(longLen == 0) + decInc = 0; + else + decInc = (shortLen << 16) / longLen; + + if(yLonger) { + for(i = 0;i != endVal;i += incrementVal) { + drawPixel(x1 + (j >> 16),y1 + i,color); + j += decInc; + } + } else { + for(i = 0;i != endVal;i += incrementVal) { + drawPixel(x1 + i,y1 + (j >> 16),color); + j += decInc; + } + } +} + +//-------------------------------------------------------------- +// Draw a horizontal line +// x1,y1 : starting point +// lenght : lenght in pixels +// color : 16bits color +//-------------------------------------------------------------- +void VGA_T4::draw_h_line(int16_t x, int16_t y, int16_t lenght, vga_pixel color){ + drawline(x , y , x + lenght , y , color); +} + +//-------------------------------------------------------------- +// Draw a vertical line +// x1,y1 : starting point +// lenght : lenght in pixels +// color : 16bits color +//-------------------------------------------------------------- +void VGA_T4::draw_v_line(int16_t x, int16_t y, int16_t lenght, vga_pixel color){ + drawline(x , y , x , y + lenght , color); +} + +//-------------------------------------------------------------- +// Draw a circle. +// x, y - center of circle. +// r - radius. +// color - color of the circle. +//-------------------------------------------------------------- +void VGA_T4::drawcircle(int16_t x, int16_t y, int16_t radius, vga_pixel color){ + int16_t a, b, P; + + a = 0; + b = radius; + P = 1 - radius; + + do { + drawPixel(a+x, b+y, color); + drawPixel(b+x, a+y, color); + drawPixel(x-a, b+y, color); + drawPixel(x-b, a+y, color); + drawPixel(b+x, y-a, color); + drawPixel(a+x, y-b, color); + drawPixel(x-a, y-b, color); + drawPixel(x-b, y-a, color); + + if(P < 0) + P+= 3 + 2*a++; + else + P+= 5 + 2*(a++ - b--); + } while(a <= b); +} + +//-------------------------------------------------------------- +// Displays a full circle. +// x : specifies the X position +// y : specifies the Y position +// radius : specifies the Circle Radius +// fillcolor : specifies the Circle Fill Color +// bordercolor: specifies the Circle Border Color +//-------------------------------------------------------------- +void VGA_T4::drawfilledcircle(int16_t x, int16_t y, int16_t radius, vga_pixel fillcolor, vga_pixel bordercolor){ + int32_t D; /* Decision Variable */ + uint32_t CurX;/* Current X Value */ + uint32_t CurY;/* Current Y Value */ + + D = 3 - (radius << 1); + + CurX = 0; + CurY = radius; + + while (CurX <= CurY) + { + if(CurY > 0) + { + draw_v_line(x - CurX, y - CurY, 2*CurY, fillcolor); + draw_v_line(x + CurX, y - CurY, 2*CurY, fillcolor); + } + + if(CurX > 0) + { + draw_v_line(x - CurY, y - CurX, 2*CurX, fillcolor); + draw_v_line(x + CurY, y - CurX, 2*CurX, fillcolor); + } + if (D < 0) + { + D += (CurX << 2) + 6; + } + else + { + D += ((CurX - CurY) << 2) + 10; + CurY--; + } + CurX++; + } + + drawcircle(x, y, radius,bordercolor); +} + +//-------------------------------------------------------------- +// Displays an Ellipse. +// cx: specifies the X position +// cy: specifies the Y position +// radius1: minor radius of ellipse. +// radius2: major radius of ellipse. +// color: specifies the Color to use for draw the Border from the Ellipse. +//-------------------------------------------------------------- +void VGA_T4::drawellipse(int16_t cx, int16_t cy, int16_t radius1, int16_t radius2, vga_pixel color){ + int x = -radius1, y = 0, err = 2-2*radius1, e2; + float K = 0, rad1 = 0, rad2 = 0; + + rad1 = radius1; + rad2 = radius2; + + if (radius1 > radius2) + { + do { + K = (float)(rad1/rad2); + drawPixel(cx-x,cy+(uint16_t)(y/K),color); + drawPixel(cx+x,cy+(uint16_t)(y/K),color); + drawPixel(cx+x,cy-(uint16_t)(y/K),color); + drawPixel(cx-x,cy-(uint16_t)(y/K),color); + + e2 = err; + if (e2 <= y) { + err += ++y*2+1; + if (-x == y && e2 <= x) e2 = 0; + } + if (e2 > x) err += ++x*2+1; + } + while (x <= 0); + } + else + { + y = -radius2; + x = 0; + do { + K = (float)(rad2/rad1); + drawPixel(cx-(uint16_t)(x/K),cy+y,color); + drawPixel(cx+(uint16_t)(x/K),cy+y,color); + drawPixel(cx+(uint16_t)(x/K),cy-y,color); + drawPixel(cx-(uint16_t)(x/K),cy-y,color); + + e2 = err; + if (e2 <= x) { + err += ++x*2+1; + if (-y == x && e2 <= y) e2 = 0; + } + if (e2 > y) err += ++y*2+1; + } + while (y <= 0); + } +} + +// Draw a filled ellipse. +// cx: specifies the X position +// cy: specifies the Y position +// radius1: minor radius of ellipse. +// radius2: major radius of ellipse. +// fillcolor : specifies the Color to use for Fill the Ellipse. +// bordercolor: specifies the Color to use for draw the Border from the Ellipse. +void VGA_T4::drawfilledellipse(int16_t cx, int16_t cy, int16_t radius1, int16_t radius2, vga_pixel fillcolor, vga_pixel bordercolor){ + int x = -radius1, y = 0, err = 2-2*radius1, e2; + float K = 0, rad1 = 0, rad2 = 0; + + rad1 = radius1; + rad2 = radius2; + + if (radius1 > radius2) + { + do + { + K = (float)(rad1/rad2); + draw_v_line((cx+x), (cy-(uint16_t)(y/K)), (2*(uint16_t)(y/K) + 1) , fillcolor); + draw_v_line((cx-x), (cy-(uint16_t)(y/K)), (2*(uint16_t)(y/K) + 1) , fillcolor); + + e2 = err; + if (e2 <= y) + { + err += ++y*2+1; + if (-x == y && e2 <= x) e2 = 0; + } + if (e2 > x) err += ++x*2+1; + + } + while (x <= 0); + } + else + { + y = -radius2; + x = 0; + do + { + K = (float)(rad2/rad1); + draw_h_line((cx-(uint16_t)(x/K)), (cy+y), (2*(uint16_t)(x/K) + 1) , fillcolor); + draw_h_line((cx-(uint16_t)(x/K)), (cy-y), (2*(uint16_t)(x/K) + 1) , fillcolor); + + e2 = err; + if (e2 <= x) + { + err += ++x*2+1; + if (-y == x && e2 <= y) e2 = 0; + } + if (e2 > y) err += ++y*2+1; + } + while (y <= 0); + } + drawellipse(cx,cy,radius1,radius2,bordercolor); +} + +//-------------------------------------------------------------- +// Draw a Triangle. +// ax,ay, bx,by, cx,cy - the triangle points. +// color - color of the triangle. +//-------------------------------------------------------------- +void VGA_T4::drawtriangle(int16_t ax, int16_t ay, int16_t bx, int16_t by, int16_t cx, int16_t cy, vga_pixel color){ + drawline(ax , ay , bx , by , color); + drawline(bx , by , cx , cy , color); + drawline(cx , cy , ax , ay , color); +} + +//-------------------------------------------------------------- +// Draw a Filled Triangle. +// ax,ay, bx,by, cx,cy - the triangle points. +// fillcolor - specifies the Color to use for Fill the triangle. +// bordercolor - specifies the Color to use for draw the Border from the triangle. +//-------------------------------------------------------------- +void VGA_T4::drawfilledtriangle(int16_t ax, int16_t ay, int16_t bx, int16_t by, int16_t cx, int16_t cy, vga_pixel fillcolor, vga_pixel bordercolor){ + float ma, mb, mc ; //'gradient of the lines + float start, finish ; //'draw a line from start to finish! + float tempspace ; //'temporary storage for swapping values... + double x1,x2,x3 ; + double y1,y2,y3 ; + int16_t n ; + + //' need to sort out ay, by and cy into order.. highest to lowest + //' + if(ay < by) + { + //'swap x's + tempspace = ax; + ax = bx; + bx = tempspace; + + //'swap y's + tempspace = ay; + ay = by; + by = tempspace; + } + + if(ay < cy) + { + //'swap x's + tempspace = ax; + ax = cx; + cx = tempspace; + + //'swap y's + tempspace = ay; + ay = cy; + cy = tempspace; + } + + if(by < cy) + { + //'swap x's + tempspace = bx; + bx = cx; + cx = tempspace; + + //'swap y's + tempspace = by; + by = cy; + cy = tempspace; + } + + //' Finally - copy the values in order... + + x1 = ax; x2 = bx; x3 = cx; + y1 = ay; y2 = by; y3 = cy; + + //'bodge if y coordinates are the same + if(y1 == y2) y2 = y2 + 0.01; + if(y2 == y3) y3 = y3 + 0.01; + if(y1 == y3) y3 = y3 + 0.01; + + ma = (x1 - x2) / (y1 - y2); + mb = (x3 - x2) / (y2 - y3); + mc = (x3 - x1) / (y1 - y3); + + //'from y1 to y2 + for(n = 0;n >= (y2 - y1);n--) + { + start = n * mc; + finish = n * ma; + drawline((int16_t)(x1 - start), (int16_t)(n + y1), (int16_t)(x1 + finish), (int16_t)(n + y1), fillcolor); + } + + + //'and from y2 to y3 + + for(n = 0;n >= (y3 - y2);n--) + { + start = n * mc; + finish = n * mb; + drawline((int16_t)(x1 - start - ((y2 - y1) * mc)), (int16_t)(n + y2), (int16_t)(x2 - finish), (int16_t)(n + y2), fillcolor); + } + + // draw the border color triangle + drawtriangle(ax,ay,bx,by,cx,cy,bordercolor); +} + + +//-------------------------------------------------------------- +// Displays a Rectangle at a given Angle. +// centerx : specifies the center of the Rectangle. +// centery +// w,h : specifies the size of the Rectangle. +// angle : specifies the angle for drawing the rectangle +// color : specifies the Color to use for Fill the Rectangle. +//-------------------------------------------------------------- +void VGA_T4::drawquad(int16_t centerx, int16_t centery, int16_t w, int16_t h, int16_t angle, vga_pixel color){ + int16_t px[4],py[4]; + float l; + float raddeg = 3.14159 / 180; + float w2 = w / 2.0; + float h2 = h / 2.0; + float vec = (w2*w2)+(h2*h2); + float w2l; + float pangle[4]; + + l = sqrtf(vec); + w2l = w2 / l; + pangle[0] = acosf(w2l) / raddeg; + pangle[1] = 180.0 - (acosf(w2l) / raddeg); + pangle[2] = 180.0 + (acosf(w2l) / raddeg); + pangle[3] = 360.0 - (acosf(w2l) / raddeg); + px[0] = (int16_t)(calcco[((int16_t)(pangle[0]) + angle) % 360] * l + centerx); + py[0] = (int16_t)(calcsi[((int16_t)(pangle[0]) + angle) % 360] * l + centery); + px[1] = (int16_t)(calcco[((int16_t)(pangle[1]) + angle) % 360] * l + centerx); + py[1] = (int16_t)(calcsi[((int16_t)(pangle[1]) + angle) % 360] * l + centery); + px[2] = (int16_t)(calcco[((int16_t)(pangle[2]) + angle) % 360] * l + centerx); + py[2] = (int16_t)(calcsi[((int16_t)(pangle[2]) + angle) % 360] * l + centery); + px[3] = (int16_t)(calcco[((int16_t)(pangle[3]) + angle) % 360] * l + centerx); + py[3] = (int16_t)(calcsi[((int16_t)(pangle[3]) + angle) % 360] * l + centery); + // here we draw the quad + drawline(px[0],py[0],px[1],py[1],color); + drawline(px[1],py[1],px[2],py[2],color); + drawline(px[2],py[2],px[3],py[3],color); + drawline(px[3],py[3],px[0],py[0],color); +} + +//-------------------------------------------------------------- +// Displays a filled Rectangle at a given Angle. +// centerx : specifies the center of the Rectangle. +// centery +// w,h : specifies the size of the Rectangle. +// angle : specifies the angle for drawing the rectangle +// fillcolor : specifies the Color to use for Fill the Rectangle. +// bordercolor : specifies the Color to use for draw the Border from the Rectangle. +//-------------------------------------------------------------- +void VGA_T4::drawfilledquad(int16_t centerx, int16_t centery, int16_t w, int16_t h, int16_t angle, vga_pixel fillcolor, vga_pixel bordercolor){ + int16_t px[4],py[4]; + float l; + float raddeg = 3.14159 / 180; + float w2 = w / 2.0; + float h2 = h / 2.0; + float vec = (w2*w2)+(h2*h2); + float w2l; + float pangle[4]; + + l = sqrtf(vec); + w2l = w2 / l; + pangle[0] = acosf(w2l) / raddeg; + pangle[1] = 180.0 - (acosf(w2l) / raddeg); + pangle[2] = 180.0 + (acosf(w2l) / raddeg); + pangle[3] = 360.0 - (acosf(w2l) / raddeg); + px[0] = (int16_t)(calcco[((int16_t)(pangle[0]) + angle) % 360] * l + centerx); + py[0] = (int16_t)(calcsi[((int16_t)(pangle[0]) + angle) % 360] * l + centery); + px[1] = (int16_t)(calcco[((int16_t)(pangle[1]) + angle) % 360] * l + centerx); + py[1] = (int16_t)(calcsi[((int16_t)(pangle[1]) + angle) % 360] * l + centery); + px[2] = (int16_t)(calcco[((int16_t)(pangle[2]) + angle) % 360] * l + centerx); + py[2] = (int16_t)(calcsi[((int16_t)(pangle[2]) + angle) % 360] * l + centery); + px[3] = (int16_t)(calcco[((int16_t)(pangle[3]) + angle) % 360] * l + centerx); + py[3] = (int16_t)(calcsi[((int16_t)(pangle[3]) + angle) % 360] * l + centery); + // We draw 2 filled triangle for made the quad + // To be uniform we have to use only the Fillcolor + drawfilledtriangle(px[0],py[0],px[1],py[1],px[2],py[2],fillcolor,fillcolor); + drawfilledtriangle(px[2],py[2],px[3],py[3],px[0],py[0],fillcolor,fillcolor); + // here we draw the BorderColor from the quad + drawline(px[0],py[0],px[1],py[1],bordercolor); + drawline(px[1],py[1],px[2],py[2],bordercolor); + drawline(px[2],py[2],px[3],py[3],bordercolor); + drawline(px[3],py[3],px[0],py[0],bordercolor); +} + +//-------------------------------------------------------------- +// Displays a Polygon. +// centerx : are specified with PolySet.Center.x and y. +// centery +// cx : Translate the polygon in x direction +// cy : Translate the polygon in y direction +// bordercolor : specifies the Color to use for draw the Border from the polygon. +// polygon points : are specified with PolySet.Pts[n].x and y +// After the last polygon point , set PolySet.Pts[n + 1].x to 10000 +// Max number of point for the polygon is set by MaxPolyPoint previously defined. +//-------------------------------------------------------------- +void VGA_T4::drawpolygon(int16_t cx, int16_t cy, vga_pixel bordercolor){ + uint8_t n = 1; + while((PolySet.Pts[n].x < 10000) && (n < MaxPolyPoint)){ + drawline(PolySet.Pts[n].x + cx, + PolySet.Pts[n].y + cy, + PolySet.Pts[n - 1].x + cx , + PolySet.Pts[n - 1].y + cy, + bordercolor); + n++; + } + // close the polygon + drawline(PolySet.Pts[0].x + cx, + PolySet.Pts[0].y + cy, + PolySet.Pts[n - 1].x + cx, + PolySet.Pts[n - 1].y + cy, + bordercolor); +} + +//-------------------------------------------------------------- +// Displays a filled Polygon. +// centerx : are specified with PolySet.Center.x and y. +// centery +// cx : Translate the polygon in x direction +// cy : Translate the polygon in y direction +// fillcolor : specifies the Color to use for filling the polygon. +// bordercolor : specifies the Color to use for draw the Border from the polygon. +// polygon points : are specified with PolySet.Pts[n].x and y +// After the last polygon point , set PolySet.Pts[n + 1].x to 10000 +// Max number of point for the polygon is set by MaxPolyPoint previously defined. +//-------------------------------------------------------------- +void VGA_T4::drawfullpolygon(int16_t cx, int16_t cy, vga_pixel fillcolor, vga_pixel bordercolor){ + int n,i,j,k,dy,dx; + int y,temp; + int a[MaxPolyPoint][2],xi[MaxPolyPoint]; + float slope[MaxPolyPoint]; + + n = 0; + + while((PolySet.Pts[n].x < 10000) && (n < MaxPolyPoint)){ + a[n][0] = PolySet.Pts[n].x; + a[n][1] = PolySet.Pts[n].y; + n++; + } + + a[n][0]=PolySet.Pts[0].x; + a[n][1]=PolySet.Pts[0].y; + + for(i=0;iy))|| + ((a[i][1]>y)&&(a[i+1][1]<=y))) + { + xi[k]=(int)(a[i][0]+slope[i]*(y-a[i][1])); + k++; + } + } + + for(j=0;jxi[i+1]) + { + temp=xi[i]; + xi[i]=xi[i+1]; + xi[i+1]=temp; + } + } + + for(i=0;i= (fb_width-hscr_mask)) return; + if ((y + SPRITES_H) <= 0) return; + if (y >= fb_height) return; + + vga_pixel * src=&spritesbuffer[index*SPRITES_W*SPRITES_H]; + int i,j; + vga_pixel pix; + for (j=0; j (fb_width-hscr_mask)) || ((y+j) < 0) || ((y+j) >= fb_height) ) dst++; + else *dst++ = pix; + } + } +} + + +static void drawTile(unsigned char tile, int x, int y) { + vga_pixel * src=&tilesbuffer[tile*TILES_W*TILES_H]; + int i,j; + for (j=0; j (fb_width-hscr_mask)) *dst++=0; + else + *dst++ = pix; + } + } +} + +static void drawTransTile(unsigned char tile, int x, int y) { + vga_pixel * src=&tilesbuffer[tile*TILES_W*TILES_H]; + vga_pixel pix; + int i,j; + for (j=0; j (fb_width-hscr_mask)) src++; + else + if ((pix=*src++)) *dst++ = pix; + else *dst++; + } + } +} + + + +static void tileText(unsigned char index, int16_t x, int16_t y, const char * text, vga_pixel fgcolor, vga_pixel bgcolor, vga_pixel *dstbuffer, int dstwidth, int dstheight) { + vga_pixel c; + vga_pixel * dst; + + while ((c = *text++)) { + const unsigned char * charpt=&font8x8[c][0]; + int l=y; + for (int i=0;i<8;i++) + { + unsigned char bits; + dst=&dstbuffer[(index*dstheight+l)*dstwidth+x]; + bits = *charpt++; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else *dst++=bgcolor; + l++; + } + x +=8; + } +} + +static void tileTextOverlay(int16_t x, int16_t y, const char * text, vga_pixel fgcolor) { + vga_pixel c; + vga_pixel * dst; + + while ((c = *text++)) { + const unsigned char * charpt=&font8x8[c][0]; + int l=y; + for (int i=0;i<8;i++) + { + unsigned char bits; + dst=&framebuffer[+l*fb_stride+x]; + bits = *charpt++; + if (bits&0x01) *dst++=fgcolor; + else dst++; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else dst++; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else dst++; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else dst++; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else dst++; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else dst++; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else dst++; + bits = bits >> 1; + if (bits&0x01) *dst++=fgcolor; + else dst++; + l++; + } + x +=8; + } +} +static const char * hex = "0123456789ABCDEF"; + +void VGA_T4::begin_gfxengine(int nblayers, int nbtiles, int nbsprites) +{ + // Try double buffering + if (fb1 == NULL) { + fb1 = (vga_pixel *)malloc(fb_stride*fb_height*sizeof(vga_pixel)); + memset((void*)fb1,0, fb_stride*fb_height*sizeof(vga_pixel)); + } + if (fb1 != NULL) { + memset((void*)fb1,0, fb_stride*fb_height*sizeof(vga_pixel)); + framebuffer = fb1; + } + + nb_layers = nblayers; + nb_tiles = nbtiles; + nb_sprites = nbsprites; + + if (spritesbuffer == NULL) spritesbuffer = (vga_pixel*)malloc(SPRITES_W*SPRITES_H*sizeof(vga_pixel)*nb_sprites); + if (tilesbuffer == NULL) tilesbuffer = (vga_pixel*)malloc(TILES_W*TILES_H*sizeof(vga_pixel)*nb_tiles); + if (tilesram == NULL) tilesram = (unsigned char*)malloc(TILES_COLS*TILES_ROWS*nb_layers); + if (spritesdata == NULL) spritesdata = (Sprite_t *)malloc(SPRITES_MAX*sizeof(Sprite_t)); + + memset((void*)spritesbuffer,0, SPRITES_W*SPRITES_H*sizeof(vga_pixel)*nb_sprites); + memset((void*)tilesbuffer,0, TILES_W*TILES_H*sizeof(vga_pixel)*nb_tiles); + memset((void*)tilesram,0,TILES_COLS*TILES_ROWS*nb_layers); + + /* Random test tiles */ + char numhex[3]; + for (int i=0; i>4) & 0xf]; + numhex[1] = hex[i & 0xf]; + numhex[2] = 0; + if (TILES_W == 16 )tileText(i, 0, 0, numhex, VGA_RGB(0xff,0xff,0xff), VGA_RGB(0x40,0x40,0x40), tilesbuffer,TILES_W,TILES_H); + } + } + /* Random test sprites */ + for (int i=0; i>4) & 0xf]; + numhex[1] = hex[i & 0xf]; + numhex[2] = 0; + tileText(i, 0, 0, numhex, VGA_RGB(0xff,0xff,0x00), VGA_RGB(0x00,0x00,0x00),spritesbuffer,SPRITES_W,SPRITES_H); + } + } +} + + +void VGA_T4::run_gfxengine() +{ + waitSync(); + + if (fb1 != NULL) { + if (visible_framebuffer == fb0) { + visible_framebuffer = fb1; + framebuffer = fb0; + } + else { + visible_framebuffer = fb0; + framebuffer = fb1; + } + } + + unsigned char * tilept; + + // Layer 0 + for (int j=0; j=hscr_beg[0]) && (j<=hscr_end[0]) ) { + int modcol = (hscr[0] >> TILES_HBITS) % TILES_COLS; + for (int i=0; i 1) { + int lcount = 1; + while (lcount < nb_layers) { + for (int j=0; j=hscr_beg[lcount]) && (j<=hscr_end[lcount]) ) { + int modcol = (hscr[lcount] >> TILES_HBITS) % TILES_COLS; + for (int i=0; i> 8); + cnt = cnt & (sampleBufferSize*2-1); + + if (cnt == 0) { + fillfirsthalf = false; + SOFTWARE_isr(); + } + else if (cnt == sampleBufferSize) { + fillfirsthalf = true; + SOFTWARE_isr(); + } +} + +void VGA_T4::begin_audio(int samplesize, void (*callback)(short * stream, int len)) +{ + fillsamples = callback; + i2s_tx_buffer = (uint32_t*)malloc(samplesize*sizeof(uint32_t)); + + if (i2s_tx_buffer == NULL) { + printf("sound buffer could not be allocated!!!!!\n"); + return; + } + memset((void*)i2s_tx_buffer,0, samplesize*sizeof(uint32_t)); + printf("sound buffer allocated\n"); + + i2s_tx_buffer16 = (short*)i2s_tx_buffer; + + sampleBufferSize = samplesize; + + gpio_set_function(AUDIO_PIN, GPIO_FUNC_PWM); + int audio_pin_slice = pwm_gpio_to_slice_num(AUDIO_PIN); + // Setup PWM interrupt to fire when PWM cycle is complete + pwm_clear_irq(audio_pin_slice); + pwm_set_irq_enabled(audio_pin_slice, true); + irq_set_exclusive_handler(PWM_IRQ_WRAP, AUDIO_isr); + irq_set_enabled(PWM_IRQ_WRAP, true); + + // Setup PWM for audio output + pwm_config config = pwm_get_default_config(); + pwm_config_set_clkdiv(&config, 5.5f); + pwm_config_set_wrap(&config, 254); + pwm_init(audio_pin_slice, &config, true); + + pwm_set_gpio_level(AUDIO_PIN, 0); + printf("sound initialized\n"); +} + +void VGA_T4::end_audio() +{ + if (i2s_tx_buffer != NULL) { + free(i2s_tx_buffer); + } +} + + + + + diff --git a/MCUME_pico/vga_t4/VGA_t4.h b/MCUME_pico/vga_t4/VGA_t4.h new file mode 100755 index 0000000..b5af672 --- /dev/null +++ b/MCUME_pico/vga_t4/VGA_t4.h @@ -0,0 +1,267 @@ +/* + This file is part of VGA_t4 library. + + VGA_t4 library 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 3 of the License, or + (at your option) any later version. + + Copyright (C) 2020 J-M Harvengt + + Inspired from the original Teensy3 uVGA library of Eric PREVOTEAU. + QTIMER/FlexIO code based on Teensy4 examples of KurtE, Manitou and easone + from the Teensy4 forum (https://forum.pjrc.com) +*/ + +#ifndef _VGA_T4_H +#define _VGA_T4_H + + +#include +#include +#include "pico.h" + + +// Enable debug info (requires serial initialization) +//#define DEBUG + +typedef uint8_t vga_pixel; +#define VGA_RGB(r,g,b) ( (((r>>5)&0x07)<<5) | (((g>>5)&0x07)<<2) | (((b>>6)&0x3)<<0) ) + + +typedef enum vga_mode_t +{ + VGA_MODE_320x240 = 0, + VGA_MODE_320x480 = 1, + VGA_MODE_352x240 = 2, + VGA_MODE_352x480 = 3, + VGA_MODE_512x240 = 4, + VGA_MODE_512x480 = 5, + VGA_MODE_640x240 = 6, + VGA_MODE_640x480 = 7 +} vga_mode_t; + + +typedef enum vga_error_t +{ + VGA_OK = 0, + VGA_ERROR = -1 +} vga_error_t; + +#define MaxPolyPoint 100 + +#define AUDIO_SAMPLE_BUFFER_SIZE 256 + +// 2D point structure +typedef struct { + int16_t x; // X Coordinate on screen + int16_t y; // Y Coordinate on screen +}Point2D; + +// Polygon structure +typedef struct { + Point2D Center; // Polygon Center (point where the polygon can rotate arround) + Point2D Pts[MaxPolyPoint]; // Points for the polygon +}PolyDef; + + +#define DEFAULT_VSYNC_PIN 8 + +#ifndef ABS +#define ABS(X) ((X) > 0 ? (X) : -(X)) +#endif + +extern PolyDef PolySet; // polygon data to declare in c file + + +// Precomputed sinus and cosinus table from 0 to 359 degrees +// The tables are in Degrees not in Radian ! +const float calcsi[360]={ + 0.000001 , // 0 + 0.01745239 , 0.03489947 , 0.05233591 , 0.06975641 , 0.08715567 , 0.1045284 , 0.1218692 , 0.139173 , 0.1564343 , 0.173648 , // 1 à 10 + 0.1908088 , 0.2079115 , 0.2249509 , 0.2419217 , 0.2588188 , 0.2756371 , 0.2923715 , 0.3090167 , 0.3255679 , 0.3420198 , // 11 à 20 + 0.3583677 , 0.3746063 , 0.3907308 , 0.4067363 , 0.4226179 , 0.4383708 , 0.4539901 , 0.4694712 , 0.4848093 , 0.4999996 , // 21 à 30 + 0.5150377 , 0.5299189 , 0.5446386 , 0.5591925 , 0.573576 , 0.5877848 , 0.6018146 , 0.615661 , 0.62932 , 0.6427872 , // 31 à 40 + 0.6560586 , 0.6691301 , 0.6819978 , 0.6946579 , 0.7071063 , 0.7193394 , 0.7313532 , 0.7431444 , 0.7547091 , 0.7660439 , // 41 à 50 + 0.7771455 , 0.7880103 , 0.798635 , 0.8090165 , 0.8191515 , 0.8290371 , 0.8386701 , 0.8480476 , 0.8571668 , 0.8660249 , // 51 à 60 + 0.8746193 , 0.8829472 , 0.8910061 , 0.8987936 , 0.9063074 , 0.913545 , 0.9205045 , 0.9271835 , 0.9335801 , 0.9396922 , // 61 à 70 + 0.9455183 , 0.9510562 , 0.9563044 , 0.9612614 , 0.9659255 , 0.9702954 , 0.9743698 , 0.9781474 , 0.981627 , 0.9848075 , // 71 à 80 + 0.9876881 , 0.9902679 , 0.992546 , 0.9945218 , 0.9961946 , 0.9975639 , 0.9986295 , 0.9993908 , 0.9998476 , 0.99999 , // 81 à 90 + 0.9998477 , 0.9993909 , 0.9986296 , 0.9975642 , 0.9961948 , 0.994522 , 0.9925463 , 0.9902682 , 0.9876886 , 0.984808 , // 91 à 100 + 0.9816275 , 0.9781479 , 0.9743704 , 0.9702961 , 0.9659262 , 0.9612621 , 0.9563052 , 0.9510571 , 0.9455191 , 0.9396932 , // 101 à 110 + 0.933581 , 0.9271844 , 0.9205055 , 0.9135461 , 0.9063086 , 0.8987948 , 0.8910073 , 0.8829485 , 0.8746206 , 0.8660263 , // 111 à 120 + 0.8571682 , 0.8480491 , 0.8386716 , 0.8290385 , 0.8191531 , 0.8090182 , 0.7986366 , 0.7880119 , 0.7771472 , 0.7660457 , // 121 à 130 + 0.7547108 , 0.7431462 , 0.7313551 , 0.7193412 , 0.7071083 , 0.6946598 , 0.6819999 , 0.6691321 , 0.6560606 , 0.6427892 , // 131 à 140 + 0.629322 , 0.6156631 , 0.6018168 , 0.5877869 , 0.5735782 , 0.5591948 , 0.5446408 , 0.5299212 , 0.5150401 , 0.5000019 , // 141 à 150 + 0.4848116 , 0.4694737 , 0.4539925 , 0.4383733 , 0.4226205 , 0.4067387 , 0.3907333 , 0.3746087 , 0.3583702 , 0.3420225 , // 151 à 160 + 0.3255703 , 0.3090193 , 0.2923741 , 0.2756396 , 0.2588214 , 0.2419244 , 0.2249534 , 0.2079142 , 0.1908116 , 0.1736506 , // 161 à 170 + 0.156437 , 0.1391758 , 0.1218719 , 0.1045311 , 0.08715825 , 0.06975908 , 0.05233867 , 0.03490207 , 0.01745508 , 0.0277 , // 171 à 180 + -0.01744977 , -0.03489676 , -0.05233313 , -0.06975379 , -0.08715296 , -0.1045256 , -0.1218666 , -0.1391703 , -0.1564316 , -0.1736454 ,// 181 à 190 + -0.1908061 , -0.207909 , -0.2249483 , -0.241919 , -0.2588163 , -0.2756345 , -0.2923688 , -0.3090142 , -0.3255653 , -0.3420173 , // 191 à 200 + -0.3583652 , -0.3746038 , -0.3907282 , -0.4067339 , -0.4226155 , -0.4383683 , -0.4539878 , -0.4694688 , -0.4848068 , -0.4999973 , // 201 à 210 + -0.5150353 , -0.5299166 , -0.5446364 , -0.5591902 , -0.5735739 , -0.5877826 , -0.6018124 , -0.615659 , -0.6293178 , -0.642785 , // 211 à 220 + -0.6560566 , -0.6691281 , -0.6819958 , -0.694656 , -0.7071043 , -0.7193374 , -0.7313514 , -0.7431425 , -0.7547074 , -0.7660421 , // 221 à 230 + -0.7771439 , -0.7880087 , -0.7986334 , -0.8090149 , -0.8191499 , -0.8290355 , -0.8386687 , -0.8480463 , -0.8571655 , -0.8660236 , // 231 à 240 + -0.8746178 , -0.882946 , -0.8910049 , -0.8987925 , -0.9063062 , -0.9135439 , -0.9205033 , -0.9271825 , -0.9335791 , -0.9396913 , // 241 à 250 + -0.9455173 , -0.9510553 , -0.9563036 , -0.9612607 , -0.9659248 , -0.9702948 , -0.9743692 , -0.9781467 , -0.9816265 , -0.9848071 , // 251 à 260 + -0.9876878 , -0.9902675 , -0.9925456 , -0.9945215 , -0.9961944 , -0.9975638 , -0.9986293 , -0.9993907 , -0.9998476 , -0.99999 , // 261 à 270 + -0.9998478 , -0.9993909 , -0.9986298 , -0.9975643 , -0.9961951 , -0.9945223 , -0.9925466 , -0.9902686 , -0.987689 , -0.9848085 , // 271 à 280 + -0.981628 , -0.9781484 , -0.974371 , -0.9702968 , -0.965927 , -0.9612629 , -0.9563061 , -0.9510578 , -0.9455199 , -0.9396941 , // 281 à 290 + -0.933582 , -0.9271856 , -0.9205065 , -0.9135472 , -0.9063097 , -0.898796 , -0.8910086 , -0.8829498 , -0.8746218 , -0.8660276 , // 291 à 300 + -0.8571696 , -0.8480505 , -0.8386731 , -0.8290402 , -0.8191546 , -0.8090196 , -0.7986383 , -0.7880136 , -0.777149 , -0.7660476 , // 301 à 310 + -0.7547125 , -0.7431479 , -0.7313569 , -0.7193431 , -0.7071103 , -0.6946616 , -0.6820017 , -0.6691341 , -0.6560627 , -0.6427914 , // 311 à 320 + -0.6293243 , -0.6156651 , -0.6018188 , -0.5877892 , -0.5735805 , -0.5591971 , -0.5446434 , -0.5299233 , -0.5150422 , -0.5000043 , // 321 à 330 + -0.484814 , -0.4694761 , -0.4539948 , -0.4383755 , -0.4226228 , -0.4067413 , -0.3907359 , -0.3746115 , -0.3583725 , -0.3420248 , // 331 à 340 + -0.325573 , -0.3090219 , -0.2923768 , -0.2756425 , -0.2588239 , -0.2419269 , -0.2249561 , -0.2079169 , -0.1908143 , -0.1736531 , // 341 à 350 + -0.1564395 , -0.1391783 , -0.1218746 , -0.1045339 , -0.08716125 , -0.06976161 , -0.0523412 , -0.03490484 , -0.01745785 }; // 351 à 359 + +const float calcco[360]={ + 0.99999 , // 0 + 0.9998477 , 0.9993908 , 0.9986295 , 0.9975641 , 0.9961947 , 0.9945219 , 0.9925462 , 0.9902681 , 0.9876884 , 0.9848078 , // 1 à 10 + 0.9816272 , 0.9781477 , 0.9743701 , 0.9702958 , 0.9659259 , 0.9612617 , 0.9563049 , 0.9510566 , 0.9455186 , 0.9396928 , // 11 à 20 + 0.9335806 , 0.927184 , 0.920505 , 0.9135456 , 0.906308 , 0.8987943 , 0.8910067 , 0.8829478 , 0.8746199 , 0.8660256 , // 21 à 30 + 0.8571675 , 0.8480483 , 0.8386709 , 0.8290379 , 0.8191524 , 0.8090173 , 0.7986359 , 0.7880111 , 0.7771463 , 0.7660448 , // 31 à 40 + 0.75471 , 0.7431452 , 0.7313541 , 0.7193403 , 0.7071072 , 0.6946589 , 0.6819989 , 0.6691311 , 0.6560596 , 0.6427882 , // 41 à 50 + 0.629321 , 0.6156621 , 0.6018156 , 0.5877859 , 0.5735771 , 0.5591936 , 0.5446398 , 0.52992 , 0.5150389 , 0.5000008 , // 51 à 60 + 0.4848104 , 0.4694724 , 0.4539914 , 0.438372 , 0.4226191 , 0.4067376 , 0.3907321 , 0.3746075 , 0.3583689 , 0.3420211 , // 61 à 70 + 0.3255692 , 0.309018 , 0.2923728 , 0.2756384 , 0.2588201 , 0.241923 , 0.2249522 , 0.2079128 , 0.1908101 , 0.1736494 , // 71 à 80 + 0.1564357 , 0.1391743 , 0.1218706 , 0.1045297 , 0.08715699 , 0.06975782 , 0.05233728 , 0.0349008 , 0.01745369 , 0.0138 , // 81 à 90 + -0.01745104 , -0.03489815 , -0.05233451 , -0.06975505 , -0.08715434 , -0.1045271 , -0.1218679 , -0.1391717 , -0.156433 , -0.1736467 ,// 91 à 100 + -0.1908075 , -0.2079102 , -0.2249495 , -0.2419204 , -0.2588175 , -0.2756359 , -0.2923701 , -0.3090155 , -0.3255666 , -0.3420185 , // 101 à 110 + -0.3583664 , -0.3746051 , -0.3907295 , -0.4067351 , -0.4226166 , -0.4383696 , -0.4539889 , -0.4694699 , -0.4848081 , -0.4999984 , // 111 à 120 + -0.5150366 , -0.5299177 , -0.5446375 , -0.5591914 , -0.5735749 , -0.5877837 , -0.6018136 , -0.6156599 , -0.6293188 , -0.6427862 , // 121 à 130 + -0.6560575 , -0.669129 , -0.6819969 , -0.6946569 , -0.7071053 , -0.7193384 , -0.7313522 , -0.7431435 , -0.7547083 , -0.7660431 , // 131 à 140 + -0.7771447 , -0.7880094 , -0.7986342 , -0.8090158 , -0.8191508 , -0.8290363 , -0.8386694 , -0.8480469 , -0.8571661 , -0.8660243 , // 141 à 150 + -0.8746186 , -0.8829465 , -0.8910055 , -0.898793 , -0.9063068 , -0.9135445 , -0.9205039 , -0.927183 , -0.9335796 , -0.9396918 , // 151 à 160 + -0.9455178 , -0.9510558 , -0.956304 , -0.9612611 , -0.9659252 , -0.9702951 , -0.9743695 , -0.978147 , -0.9816267 , -0.9848073 , // 161 à 170 + -0.9876879 , -0.9902677 , -0.9925459 , -0.9945216 , -0.9961945 , -0.9975639 , -0.9986294 , -0.9993907 , -0.9998476 , -0.99999 , // 171 à 180 + -0.9998477 , -0.9993909 , -0.9986297 , -0.9975642 , -0.9961949 , -0.9945222 , -0.9925465 , -0.9902685 , -0.9876888 , -0.9848083 , // 181 à 190 + -0.9816277 , -0.9781482 , -0.9743707 , -0.9702965 , -0.9659266 , -0.9612625 , -0.9563056 , -0.9510574 , -0.9455196 , -0.9396937 , // 191 à 200 + -0.9335815 , -0.927185 , -0.9205061 , -0.9135467 , -0.9063091 , -0.8987955 , -0.8910079 , -0.8829491 , -0.8746213 , -0.866027 , // 201 à 210 + -0.857169 , -0.8480497 , -0.8386723 , -0.8290394 , -0.8191538 , -0.8090189 , -0.7986375 , -0.7880127 , -0.7771481 , -0.7660466 , // 211 à 220 + -0.7547117 , -0.743147 , -0.731356 , -0.7193421 , -0.7071092 , -0.6946609 , -0.6820008 , -0.6691331 , -0.6560616 , -0.6427905 , // 221 à 230 + -0.6293229 , -0.6156641 , -0.6018178 , -0.5877882 , -0.5735794 , -0.5591961 , -0.5446419 , -0.5299222 , -0.5150412 , -0.5000032 , // 231 à 240 + -0.4848129 , -0.4694746 , -0.4539936 , -0.4383744 , -0.4226216 , -0.4067401 , -0.3907347 , -0.3746099 , -0.3583714 , -0.3420237 , // 241 à 250 + -0.3255718 , -0.3090207 , -0.2923756 , -0.2756409 , -0.2588227 , -0.2419256 , -0.2249549 , -0.2079156 , -0.1908126 , -0.1736519 , // 251 à 260 + -0.1564383 , -0.139177 , -0.1218734 , -0.1045326 , -0.08715951 , -0.06976035 , -0.05233994 , -0.03490358 , -0.01745659 , -0.0427 , // 261 à 270 + 0.01744851 , 0.0348955 , 0.05233186 , 0.06975229 , 0.08715146 , 0.1045246 , 0.1218654 , 0.139169 , 0.1564303 , 0.1736439 , // 271 à 280 + 0.1908047 , 0.2079078 , 0.224947 , 0.2419178 , 0.2588149 , 0.2756331 , 0.2923674 , 0.309013 , 0.3255641 , 0.3420161 , // 281 à 290 + 0.3583638 , 0.3746024 , 0.3907273 , 0.4067327 , 0.4226143 , 0.4383671 , 0.4539864 , 0.4694674 , 0.4848059 , 0.4999962 , // 291 à 300 + 0.5150342 , 0.5299154 , 0.5446351 , 0.559189 , 0.5735728 , 0.5877816 , 0.6018113 , 0.6156578 , 0.6293167 , 0.6427839 , // 301 à 310 + 0.6560556 , 0.6691272 , 0.6819949 , 0.6946549 , 0.7071033 , 0.7193366 , 0.7313506 , 0.7431416 , 0.7547064 , 0.7660413 , // 311 à 320 + 0.7771428 , 0.7880079 , 0.7986327 , 0.8090141 , 0.8191492 , 0.8290347 , 0.8386678 , 0.8480456 , 0.8571648 , 0.8660229 , // 321 à 330 + 0.8746172 , 0.8829452 , 0.8910043 , 0.8987919 , 0.9063057 , 0.9135434 , 0.9205029 , 0.9271819 , 0.9335786 , 0.9396909 , // 331 à 340 + 0.9455169 , 0.9510549 , 0.9563032 , 0.9612602 , 0.9659245 , 0.9702945 , 0.9743689 , 0.9781465 , 0.9816261 , 0.9848069 , // 341 à 350 + 0.9876875 , 0.9902673 , 0.9925455 , 0.9945213 , 0.9961942 , 0.9975637 , 0.9986292 , 0.9993906 , 0.9998476 }; // 351 à 359 + + +class VGA_T4 +{ +public: + + VGA_T4(); + + // display VGA image + vga_error_t begin(vga_mode_t mode); + void begin_audio(int samplesize, void (*callback)(short * stream, int len)); + void end(); + void end_audio(); + void debug(); + void tweak_video(int shiftdelta, int numdelta, int denomdelta); + + // retrieve real size of the frame buffer + void get_frame_buffer_size(int *width, int *height); + + // wait next Vsync + void waitSync(); + void waitLine(int line); + + // ========================================================= + // graphic primitives + // ========================================================= + + void clear(vga_pixel col) ; + void drawPixel(int x, int y, vga_pixel color); + vga_pixel getPixel(int x, int y); + vga_pixel * getLineBuffer(int j); + void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, vga_pixel color); + void drawText(int16_t x, int16_t y, const char * text, vga_pixel fgcolor, vga_pixel bgcolor, bool doublesize); + void drawSprite(int16_t x, int16_t y, const int16_t *bitmap); + void drawSprite(int16_t x, int16_t y, const int16_t *bitmap, uint16_t croparx, uint16_t cropary, uint16_t croparw, uint16_t croparh); + void writeScreen(const vga_pixel *pcolors); + void writeLine(int width, int height, int y, vga_pixel *buf); + void writeLine(int width, int height, int stride, uint8_t *buffer, vga_pixel *palette); + void writeLine16(int width, int height, int y, uint16_t *buf); + void writeScreen(int width, int height, int stride, uint8_t *buffer, vga_pixel *palette); + void copyLine(int width, int height, int ysrc, int ydst); + + // ************************************** GFX API extension from darthvader ****************************************************** + void drawline(int16_t x1, int16_t y1, int16_t x2, int16_t y2, vga_pixel color); + void draw_h_line(int16_t x1, int16_t y1, int16_t lenght, vga_pixel color); + void draw_v_line(int16_t x1, int16_t y1, int16_t lenght, vga_pixel color); + void drawcircle(int16_t x, int16_t y, int16_t radius, vga_pixel color); + void drawfilledcircle(int16_t x, int16_t y, int16_t radius, vga_pixel fillcolor, vga_pixel bordercolor); + void drawellipse(int16_t cx, int16_t cy, int16_t radius1, int16_t radius2, vga_pixel color); + void drawfilledellipse(int16_t cx, int16_t cy, int16_t radius1, int16_t radius2, vga_pixel fillcolor, vga_pixel bordercolor); + void drawtriangle(int16_t ax, int16_t ay, int16_t bx, int16_t by, int16_t cx, int16_t cy, vga_pixel color); + void drawfilledtriangle(int16_t ax, int16_t ay, int16_t bx, int16_t by, int16_t cx, int16_t cy, vga_pixel fillcolor, vga_pixel bordercolor); + void drawquad(int16_t centerx, int16_t centery, int16_t w, int16_t h, int16_t angle, vga_pixel color); + void drawfilledquad(int16_t centerx, int16_t centery, int16_t w, int16_t h, int16_t angle, vga_pixel fillcolor, vga_pixel bordercolor); + void drawpolygon(int16_t cx, int16_t cy, vga_pixel bordercolor); + void drawfullpolygon(int16_t cx, int16_t cy, vga_pixel fillcolor, vga_pixel bordercolor); + void drawrotatepolygon(int16_t cx, int16_t cy, int16_t Angle, vga_pixel fillcolor, vga_pixel bordercolor, uint8_t filled); + // ******************************************************************************************************************************* + + + // ========================================================= + // Game engine + // ========================================================= + + #define TILES_MAX_LAYERS 2 + + // 16x16 pixels tiles or 8x8 if USE_8PIXTILES is set + //#define USE_8PIXTILES 1 + #ifdef USE_8PIXTILES + #define TILES_COLS 40 + #define TILES_ROWS 30 + #define TILES_W 8 + #define TILES_H 8 + #define TILES_HBITS 3 + #define TILES_HMASK 0x7 + #else + #define TILES_COLS 20 + #define TILES_ROWS 15 + #define TILES_W 16 + #define TILES_H 16 + #define TILES_HBITS 4 + #define TILES_HMASK 0xf + #endif + + // 32 sprites 16x32 or max 64 16x16 (not larger!!!) + #define SPRITES_MAX 32 + #define SPRITES_W 16 + #define SPRITES_H 32 + + void begin_gfxengine(int nblayers, int nbtiles, int nbsprites); + void run_gfxengine(); + void tile_data(unsigned char index, vga_pixel * data, int len); + void sprite_data(unsigned char index, vga_pixel * data, int len); + void sprite(int id , int x, int y, unsigned char index); + void sprite_hide(int id); + void tile_draw(int layer, int x, int y, unsigned char index); + void tile_draw_row(int layer, int x, int y, unsigned char * data, int len); + void tile_draw_col(int layer, int x, int y, unsigned char * data, int len); + void set_hscroll(int layer, int rowbeg, int rowend, int mask); + void set_vscroll(int layer, int colbeg, int colend, int mask); + void hscroll(int layer, int value); + void vscroll(int layer, int value); + + +private: + static uint8_t _vsync_pin; +}; + + +#endif + + diff --git a/MCUME_pico/vga_t4/composable_scanline.h b/MCUME_pico/vga_t4/composable_scanline.h new file mode 100644 index 0000000..97ccb8b --- /dev/null +++ b/MCUME_pico/vga_t4/composable_scanline.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef SCANVIDEO_COMPOSABLE_SCANLINE_H_ +#define SCANVIDEO_COMPOSABLE_SCANLINE_H_ + +#include "pico/types.h" +#include "scanvideo.pio.h" + +// PICO_CONFIG: PICO_SCANVIDEO_USE_RAW1P_2CYCLE, Enable/disable SVideo use raw 1P 2 cycle, type=bool, default=0, group=video+- +#ifndef PICO_SCANVIDEO_USE_RAW1P_2CYCLE +#define PICO_SCANVIDEO_USE_RAW1P_2CYCLE 0 +#endif + +#if !PICO_SCANVIDEO_USE_RAW1P_2CYCLE +#define video_24mhz_composable_prefix video_24mhz_composable_default +#else +#define video_24mhz_composable_prefix video_24mhz_composable_raw1p_2cycle +#endif + +// seems needed on some platforms +#define __EXTRA_CONCAT(x, y) __CONCAT(x,y) +#define video_24mhz_composable_program_extern(x) __EXTRA_CONCAT( __EXTRA_CONCAT(video_24mhz_composable_prefix, _offset_), x) +#define __DVP_JMP(x) ((unsigned)video_24mhz_composable_program_extern(x)) +#define COMPOSABLE_COLOR_RUN __DVP_JMP(color_run) +#define COMPOSABLE_EOL_ALIGN __DVP_JMP(end_of_scanline_ALIGN) +#define COMPOSABLE_EOL_SKIP_ALIGN __DVP_JMP(end_of_scanline_skip_ALIGN) +#define COMPOSABLE_RAW_RUN __DVP_JMP(raw_run) +#define COMPOSABLE_RAW_1P __DVP_JMP(raw_1p) +#define COMPOSABLE_RAW_2P __DVP_JMP(raw_2p) +#if !PICO_SCANVIDEO_USE_RAW1P_2CYCLE +#define COMPOSABLE_RAW_1P_SKIP_ALIGN __DVP_JMP(raw_1p_skip_ALIGN) +#else +#define COMPOSABLE_RAW_1P_2CYCLE __DVP_JMP(raw_1p_2cycle) +#endif + +#endif diff --git a/MCUME_pico/vga_t4/pico_buffer.h b/MCUME_pico/vga_t4/pico_buffer.h new file mode 100644 index 0000000..4bcd14a --- /dev/null +++ b/MCUME_pico/vga_t4/pico_buffer.h @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _PICO_UTIL_BUFFER_H +#define _PICO_UTIL_BUFFER_H + +#include "pico/types.h" + +/** \file buffer.h + * \defgroup util_buffer buffer + * \brief Buffer management + * \ingroup pico_util + */ + +#ifdef PICO_BUFFER_USB_ALLOC_HACK +#include "hardware/address_mapped.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef DEBUG_MALLOC +#include +#endif + +#include + +/** \struct mem_buffer + * \ingroup util_buffer + * \brief Wrapper structure around a memory buffer + * + * Wrapper could be around static or allocated memory + * + * \todo This module needs to be checked - think there are issues with the free function + */ +typedef struct mem_buffer { + size_t size; + uint8_t *bytes; + uint8_t flags; +} mem_buffer_t; + +#ifdef PICO_BUFFER_USB_ALLOC_HACK +#if !defined(USB_DPRAM_MAX) || (USB_DPRAM_MAX > 0) +#include "hardware/structs/usb.h" +#else +#define USB_DPRAM_SIZE 4096 +#endif +#endif + +inline static bool pico_buffer_alloc_in_place(mem_buffer_t *buffer, size_t size) { +#ifdef PICO_BUFFER_USB_ALLOC_HACK + extern uint8_t *usb_ram_alloc_ptr; + if ((usb_ram_alloc_ptr + size) <= (uint8_t *)USBCTRL_DPRAM_BASE + USB_DPRAM_SIZE) { + buffer->bytes = usb_ram_alloc_ptr; + buffer->size = size; +#ifdef DEBUG_MALLOC + printf("balloc %d %p->%p\n", size, buffer->bytes, ((uint8_t *)buffer->bytes) + size); +#endif + usb_ram_alloc_ptr += size; + return true; + } +#endif // inline for now + buffer->bytes = (uint8_t *) calloc(1, size); + if (buffer->bytes) { + buffer->size = size; + return true; + } + buffer->size = 0; + return false; +} + +inline static mem_buffer_t *pico_buffer_wrap(uint8_t *bytes, size_t size) { + mem_buffer_t *buffer = (mem_buffer_t *) malloc(sizeof(mem_buffer_t)); + if (buffer) { + buffer->bytes = bytes; + buffer->size = size; + } + return buffer; +} + +inline static mem_buffer_t *pico_buffer_alloc(size_t size) { + mem_buffer_t *b = (mem_buffer_t *) malloc(sizeof(mem_buffer_t)); + if (b) { + if (!pico_buffer_alloc_in_place(b, size)) { + free(b); + b = NULL; + } + } + return b; +} + +#ifdef __cplusplus +} +#endif +#endif diff --git a/MCUME_pico/vga_t4/scanvideo.c b/MCUME_pico/vga_t4/scanvideo.c new file mode 100644 index 0000000..8b79bb8 --- /dev/null +++ b/MCUME_pico/vga_t4/scanvideo.c @@ -0,0 +1,1825 @@ +/* + * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#pragma GCC push_options + +#if !PICO_SCANVIDEO_DEBUG_IMPL +#undef PARAM_ASSERTIONS_DISABLE_ALL +#define PARAM_ASSERTIONS_DISABLE_ALL 1 +#pragma GCC optimize("O3") +#endif + +#include +#include +#include "pico/platform.h" +#include "pico/sem.h" +#include "pico_buffer.h" +#include "hardware/clocks.h" +#include "hardware/dma.h" +#include "hardware/gpio.h" +#include "hardware/pio.h" +#include "hardware/irq.h" +#include "timing.pio.h" +#include "scanvideo.h" +#include "composable_scanline.h" +#include "hardware/structs/bus_ctrl.h" +#include "pico/binary_info.h" + +#if PICO_SCANVIDEO_PLANE_COUNT > 3 +#error only up to 3 planes supported +#endif + +// PICO_CONFIG: PICO_SCANVIDEO_ENABLE_VIDEO_RECOVERY, Enable/disable video recovery,type=bool, default=1, group=video +#ifndef PICO_SCANVIDEO_ENABLE_VIDEO_RECOVERY +#define PICO_SCANVIDEO_ENABLE_VIDEO_RECOVERY 1 +#endif + +// PICO_CONFIG: PICO_SCANVIDEO_ADJUST_BUS_PRIORITY, Enable/disable adjust bus priority, type=bool, default=0, group=video +#ifndef PICO_SCANVIDEO_ADJUST_BUS_PRIORITY +#define PICO_SCANVIDEO_ADJUST_BUS_PRIORITY 0 +#endif + +// PICO_CONFIG: PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS, Enable/disable scanline assertions, type=bool, default=0, group=video +#ifndef PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS +#define PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS 0 +#endif + +// PICO_CONFIG: PICO_SCANVIDEO_DEBUG_IMPL, Enable/disable debug implementation, type=bool, default=0, group=video +#ifndef PICO_SCANVIDEO_DEBUG_IMPL +#define PICO_SCANVIDEO_DEBUG_IMPL 0 +#endif + +// PICO_CONFIG: PICO_SCANVIDEO_NO_DMA_TRACKING, Enable/disable DMA tracking, type=bool, default=0, group=video +#ifndef PICO_SCANVIDEO_NO_DMA_TRACKING +#define PICO_SCANVIDEO_NO_DMA_TRACKING 0 +#endif + +#define PICO_SCANVIDEO_SCANLINE_SM 0u +#define PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL 0u + +// PICO_CONFIG: PICO_SCANVIDEO_PLANE1_FRAGMENT_DMA, Enable/disable plane 1 DMA fragments, type=bool, default=0, group=video +#ifndef PICO_SCANVIDEO_PLANE1_FRAGMENT_DMA +#define PICO_SCANVIDEO_PLANE1_FRAGMENT_DMA 0 +#endif + +#if PICO_SCANVIDEO_PLANE1_FRAGMENT_DMA +#define PICO_SCANVIDEO_SCANLINE_DMA_CB_CHANNEL 3u +#endif + +#define PICO_SCANVIDEO_TIMING_SM 3u +#if PICO_SCANVIDEO_PLANE_COUNT > 1 +#define PICO_SCANVIDEO_SCANLINE_SM2 1u +#define PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL2 1u + +// PICO_CONFIG: PICO_SCANVIDEO_PLANE2_FRAGMENT_DMA, Enable/disable plane 2 DMA fragments, type=bool, default=0, group=video +#ifndef PICO_SCANVIDEO_PLANE2_FRAGMENT_DMA +#define PICO_SCANVIDEO_PLANE2_FRAGMENT_DMA 0 +#endif + +#if PICO_SCANVIDEO_PLANE2_FRAGMENT_DMA +#define PICO_SCANVIDEO_SCANLINE_DMA_CB_CHANNEL2 4u +#endif + +#if PICO_SCANVIDEO_PLANE_COUNT > 2 +#define PICO_SCANVIDEO_SCANLINE_SM3 2u +#define PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL3 2u +#define PICO_SCANVIDEO_SCANLINE_DMA_CHANNELS_MASK ((1u << PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL) | ( 1u << PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL2) | ( 1u << PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL3)) +#else +#define PICO_SCANVIDEO_SCANLINE_DMA_CHANNELS_MASK ((1u << PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL) | ( 1u << PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL2)) +#endif +#else +#define PICO_SCANVIDEO_SCANLINE_DMA_CHANNELS_MASK (1u << PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL) +#endif + +// todo add ability to shift scanline back a bit (we already have the timing, but it should be a post mode set adjustment) +// we can use this to allow some initial work in the scanline b4 the first pixel (e.g. a dummy black pixel) + +// todo bad state recovery +// - stress test with pause/unpause +// - bad state should cause SCANLINE_ASSERTION_ERROR +// - possible orphaned in_use - perhaps clean up when error state is detected +// - if PIO is not in the right place, pause/clear FIFO join-unjoin/jmp/resume +// - dma may need to be cancelled +// todo dma chaining support + + +// == DEBUGGING ========= + +// note that this is very very important if you see things going wrong with the display, +// however beware, because it will also cause visual artifiacts if we are pushing the edge of the envelope +// since it itself uses cycles that are in short supply! This is why it is off by default +// +// todo note, it should eventually be difficult to get the display into a bad state (even +// with things like runaway scanline program; incomplete DMA etc.. which currently break it). + +CU_REGISTER_DEBUG_PINS(video_timing, video_dma_buffer, video_irq, video_dma_completion, video_generation, + video_recovery, video_in_use, video_link) + +// ---- select at most one --- +//CU_SELECT_DEBUG_PINS(video_recovery) +//CU_SELECT_DEBUG_PINS(video_generation) +//CU_SELECT_DEBUG_PINS(video_in_use) +//CU_SELECT_DEBUG_PINS(scanvideo_timing) +//CU_SELECT_DEBUG_PINS(video_irq) +//CU_SELECT_DEBUG_PINS(video_dma_buffer) +//CU_SELECT_DEBUG_PINS(video_dma_completion) +//CU_SELECT_DEBUG_PINS(video_link) + +// ====================== + +#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS +// we want some sort of assertion even in release builds +#ifndef NDEBUG +#define scanline_assert(x) assert(x) +#else +#define scanline_assert(x) hard_assert(x) +#endif +#else +#define scanline_assert(x) (void)0 +#endif + +#define video_pio pio0 + +#if PICO_SCANVIDEO_ADJUST_BUS_PRIORITY +#define VIDEO_ADJUST_BUS_PRIORITY_VAL (BUSCTRL_BUS_PRIORITY_PROC0_BITS | BUSCTRL_BUS_PRIORITY_PROC1_BITS) +#endif + +#ifdef VIDEO_MOST_TIME_CRITICAL_CODE_SECTION +#define __video_most_time_critical_func(x) __attribute__((section(__XSTRING(VIDEO_MOST_TIME_CRITICAL_CODE_SECTION) "." x))) x +#else +#define __video_most_time_critical_func(x) __not_in_flash_func(x) +#endif + +#ifdef VIDEO_TIME_CRITICAL_CODE_SECTION +#define __video_time_critical_func(x) __attribute__((section(__XSTRING(VIDEO_TIME_CRITICAL_CODE_SECTION) "." x))) x +#else +#define __video_time_critical_func(x) __not_in_flash_func(x) +#endif +// --- video_24mhz_composable --- + +#define video_24mhz_composable_program __CONCAT(video_24mhz_composable_prefix, _program) +#define video_24mhz_composable_wrap_target __CONCAT(video_24mhz_composable_prefix, _wrap_target) +#define video_24mhz_composable_wrap __CONCAT(video_24mhz_composable_prefix, _wrap) + +bool video_24mhz_composable_adapt_for_mode(const scanvideo_pio_program_t *program, const scanvideo_mode_t *mode, + scanvideo_scanline_buffer_t *missing_scanline_buffer, + uint16_t *modifiable_instructions); + +pio_sm_config video_24mhz_composable_configure_pio(pio_hw_t *pio, uint sm, uint offset); + +const scanvideo_pio_program_t video_24mhz_composable = { + .program = &video_24mhz_composable_program, + .entry_point = video_24mhz_composable_program_extern(entry_point), + .adapt_for_mode = video_24mhz_composable_adapt_for_mode, + .configure_pio = video_24mhz_composable_configure_pio +}; + +#define PIO_WAIT_IRQ4 pio_encode_wait_irq(1, false, 4) +static uint8_t video_htiming_load_offset; +static uint8_t video_program_load_offset; + +// --- video timing stuff + +// 4 possible instructions; index into program below +enum { + SET_IRQ_0 = 0u, + SET_IRQ_1 = 1u, + SET_IRQ_SCANLINE = 2u, + CLEAR_IRQ_SCANLINE = 3u, +}; + +static struct { + int32_t v_active; + int32_t v_total; + int32_t v_pulse_start; + int32_t v_pulse_end; + // todo replace with plain polarity + uint32_t vsync_bits_pulse; + uint32_t vsync_bits_no_pulse; + + uint32_t a, a_vblank, b1, b2, c, c_vblank; + uint32_t vsync_bits; + uint16_t dma_state_index; + int32_t timing_scanline; +} timing_state; + +#define DMA_STATE_COUNT 4 +static uint32_t dma_states[DMA_STATE_COUNT]; + +// todo get rid of this altogether +#undef PICO_SCANVIDEO_ENABLE_VIDEO_CLOCK_DOWN +#define PICO_SCANVIDEO_ENABLE_VIDEO_CLOCK_DOWN 1 + +#if PICO_SCANVIDEO_ENABLE_VIDEO_CLOCK_DOWN +static uint16_t video_clock_down_times_2; +#endif + +semaphore_t vblank_begin; + +// --- scanline stuff +// private representation of scanline buffer (adds link for one list this scanline buffer is currently in) +typedef struct full_scanline_buffer { + scanvideo_scanline_buffer_t core; + struct full_scanline_buffer *next; +} full_scanline_buffer_t; + +// each scanline_buffer should be in exactly one of the shared_state lists below +// (unless we don't have USE_SCANLINE_DEBUG in which case we don't keep the generating list, +// in which case the scanline is entirely trusted to the client when generating) +full_scanline_buffer_t scanline_buffers[PICO_SCANVIDEO_SCANLINE_BUFFER_COUNT]; + +// This state is sensitive as it it accessed by either core, and multiple IRQ handlers which may be re-entrant +// Nothing in here should be touched except when protected by the appropriate spin lock. +// +// The separations by spin lock (other than the need for spin locks to protect state consistency) is to allow +// safe concurrent operation by both cores, client, IRQ and nested IRQ (pre-emption) where desirable due +// to timing concerns. +static struct { + struct { + spin_lock_t *lock; + // note in_use is a list as we are lazy in removing buffers from it + full_scanline_buffer_t *in_use_ascending_scanline_id_list; + // pointer to the tail element of the list for making appending by ascending scanline id quick + full_scanline_buffer_t *in_use_ascending_scanline_id_list_tail; + } in_use; + + struct { + spin_lock_t *lock; + full_scanline_buffer_t *current_scanline_buffer; + uint32_t last_scanline_id; + uint32_t next_scanline_id; + // 0 based index of y repeat... goes 0, 0, 0 in non scaled mode, 0, 1, 0, 1 in doubled etc. + uint16_t y_repeat_index; + uint16_t y_repeat_target; + bool in_vblank; + // This generated list is in this struct because it is accessed together in fsb latching + // and the only other place it is used in scanvideo_end_scanline_generation which needs no other + // locks (i.e. we are saving an extra lock in the latch case by not placing in a separate struct) + full_scanline_buffer_t *generated_ascending_scanline_id_list; + full_scanline_buffer_t *generated_ascending_scanline_id_list_tail; +#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS + full_scanline_buffer_t *generating_list; +#endif + } scanline; + + struct { + spin_lock_t *lock; + full_scanline_buffer_t *free_list; + } free_list; + + // This is access by DMA IRQ and by SM IRQs + struct { + spin_lock_t *lock; +#if !PICO_SCANVIDEO_NO_DMA_TRACKING + // bit mask of completed DMA scanline channels + uint32_t dma_completion_state; +#endif + // number of buffers to release (may be multiple due to interrupt pre-emption) + // todo combine these two fields + uint8_t buffers_to_release; + bool scanline_in_progress; + } dma; + + // these are not updated, so not locked +#if PICO_SCANVIDEO_ENABLE_VIDEO_RECOVERY + int scanline_program_wait_index; +#endif +} shared_state; + +// PICO_CONFIG: PICO_SCANVIDEO_MISSING_SCANLINE_COLOR, Define colour used for missing scanlines, default=PICO_SVIDEO_PIXEL_FROM_RGB8(0,0,255), group=video +#ifndef PICO_SCANVIDEO_MISSING_SCANLINE_COLOR +#define PICO_SCANVIDEO_MISSING_SCANLINE_COLOR PICO_SCANVIDEO_PIXEL_FROM_RGB8(0,0,255) +#endif +static uint32_t _missing_scanline_data[] = + { + COMPOSABLE_COLOR_RUN | (PICO_SCANVIDEO_MISSING_SCANLINE_COLOR << 16u), + /*width-3*/ 0u | (COMPOSABLE_RAW_1P << 16u), + 0u | (COMPOSABLE_EOL_ALIGN << 16u) + }; + +#if PICO_SCANVIDEO_PLANE1_VARIABLE_FRAGMENT_DMA || PICO_SCANVIDEO_PLANE2_VARIABLE_FRAGMENT_DMA +static uint32_t variable_fragment_missing_scanline_data_chain[] = { + count_of(_missing_scanline_data), + 0, // missing_scanline_data, + 0, + 0, +}; +#endif + +#if PICO_SCANVIDEO_PLANE1_FIXED_FRAGMENT_DMA || PICO_SCANVIDEO_PLANE2_FIXED_FRAGMENT_DMA +static uint32_t fixed_fragment_missing_scanline_data_chain[] = { + 0, // missing_scanline_data, + 0, +}; +#endif + +#if PICO_SCANVIDEO_PLANE_COUNT > 1 +uint32_t missing_scanline_data_overlay[] = { + // blank line + 0u | (COMPOSABLE_EOL_ALIGN << 16u) +}; +#endif + +static full_scanline_buffer_t _missing_scanline_buffer; + +static inline bool is_scanline_after(uint32_t scanline_id1, uint32_t scanline_id2) { + return ((int32_t) (scanline_id1 - scanline_id2)) > 0; +} + +static void prepare_for_active_scanline_irqs_enabled(); + +static void scanline_dma_complete_irqs_enabled(); + +static void setup_sm(int sm, uint offset); + +// -- MISC stuff +static scanvideo_mode_t video_mode; +static bool video_timing_enabled = false; +static bool display_enabled = true; + +static scanvideo_scanline_repeat_count_fn _scanline_repeat_count_fn; + +inline static void list_prepend(full_scanline_buffer_t **phead, full_scanline_buffer_t *fsb) { + scanline_assert(fsb); + scanline_assert(fsb->next == NULL); + scanline_assert(fsb != *phead); + fsb->next = *phead; + *phead = fsb; +} + +inline static void list_prepend_all(full_scanline_buffer_t **phead, full_scanline_buffer_t *to_prepend) { + full_scanline_buffer_t *fsb = to_prepend; + + // todo should this be assumed? + if (fsb) { + while (fsb->next) { + fsb = fsb->next; + } + + fsb->next = *phead; + *phead = to_prepend; + } +} + +inline static full_scanline_buffer_t *list_remove_head(full_scanline_buffer_t **phead) { + full_scanline_buffer_t *fsb = *phead; + + if (fsb) { + *phead = fsb->next; + fsb->next = NULL; + } + + return fsb; +} + +inline static full_scanline_buffer_t *list_remove_head_ascending(full_scanline_buffer_t **phead, + full_scanline_buffer_t **ptail) { + full_scanline_buffer_t *fsb = *phead; + + if (fsb) { + *phead = fsb->next; + + if (!fsb->next) { + scanline_assert(*ptail == fsb); + *ptail = NULL; + } else { + fsb->next = NULL; + } + } + + return fsb; +} + +inline static void list_remove(full_scanline_buffer_t **phead, full_scanline_buffer_t *fsb) { + scanline_assert(*phead); + full_scanline_buffer_t *prev = *phead; + + if (prev == fsb) { + *phead = fsb->next; + } else { + while (prev->next && prev->next != fsb) { + prev = prev->next; + } + + scanline_assert(prev->next == fsb); + prev->next = fsb->next; + } + + // todo do we need this without assertions? + fsb->next = NULL; +} + +static inline uint32_t scanline_id_after(uint32_t scanline_id) { + uint32_t tmp = scanline_id & 0xffffu; + + if (tmp < video_mode.height - 1) { + return scanline_id + 1; + } else { + return scanline_id + 0x10000u - tmp; + } +} + +// todo add a tail for these already sorted lists as we generally insert on the end +inline static void list_insert_ascending(full_scanline_buffer_t **phead, full_scanline_buffer_t **ptail, + full_scanline_buffer_t *fsb) { + scanline_assert(fsb->next == NULL); + scanline_assert(fsb != *phead); + scanline_assert(fsb != *ptail); + + if (!*phead || !is_scanline_after(fsb->core.scanline_id, (*phead)->core.scanline_id)) { + if (!*phead) { + scanline_assert(!*ptail); + *ptail = fsb; + } + + // insert at the beginning + list_prepend(phead, fsb); + } else { + if (is_scanline_after(fsb->core.scanline_id, (*ptail)->core.scanline_id)) { + // insert at end + (*ptail)->next = fsb; + *ptail = fsb; + } else { + // not after + full_scanline_buffer_t *prev = *phead; + + while (prev->next && is_scanline_after(fsb->core.scanline_id, prev->next->core.scanline_id)) { + prev = prev->next; + } + + scanline_assert(prev != *ptail); // we should have already inserted at the end in this case + fsb->next = prev->next; + prev->next = fsb; + } + } +} + +inline static void free_local_free_list_irqs_enabled(full_scanline_buffer_t *local_free_list) { + if (local_free_list) { + uint32_t save = spin_lock_blocking(shared_state.free_list.lock); + DEBUG_PINS_SET(video_timing, 4); + list_prepend_all(&shared_state.free_list.free_list, local_free_list); + DEBUG_PINS_CLR(video_timing, 4); + spin_unlock(shared_state.free_list.lock, save); + // note also this is useful for triggering scanvideo_wait_for_scanline_complete check + __sev(); + } +} + +// Caller must own scanline_state_spin_lock +inline static full_scanline_buffer_t *scanline_locked_try_latch_fsb_if_null_irqs_disabled( + full_scanline_buffer_t **local_free_list) { + // note this just checks that someone owns it not necessarily this core. + scanline_assert(is_spin_locked(shared_state.scanline.lock)); + full_scanline_buffer_t *fsb = shared_state.scanline.current_scanline_buffer; + + if (!fsb) { + // peek the head + while (NULL != (fsb = shared_state.scanline.generated_ascending_scanline_id_list)) { + if (!is_scanline_after(shared_state.scanline.next_scanline_id, fsb->core.scanline_id)) { + if (shared_state.scanline.next_scanline_id == fsb->core.scanline_id) { + full_scanline_buffer_t __unused *dbg = list_remove_head_ascending( + &shared_state.scanline.generated_ascending_scanline_id_list, + &shared_state.scanline.generated_ascending_scanline_id_list_tail); + scanline_assert(dbg == fsb); + spin_lock_unsafe_blocking(shared_state.in_use.lock); + DEBUG_PINS_SET(video_timing, 2); + DEBUG_PINS_XOR(video_in_use, 1); + list_insert_ascending(&shared_state.in_use.in_use_ascending_scanline_id_list, + &shared_state.in_use.in_use_ascending_scanline_id_list_tail, fsb); + DEBUG_PINS_CLR(video_timing, 2); + spin_unlock_unsafe(shared_state.in_use.lock); + shared_state.scanline.current_scanline_buffer = fsb; + } else { + fsb = NULL; + } + + break; + } else { + // scanline is in the past + full_scanline_buffer_t __unused *dbg = list_remove_head_ascending( + &shared_state.scanline.generated_ascending_scanline_id_list, + &shared_state.scanline.generated_ascending_scanline_id_list_tail); + scanline_assert(dbg == fsb); + list_prepend(local_free_list, fsb); +#if PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS + full_scanline_buffer_t *fsb2; + while(NULL != (fsb2 = (full_scanline_buffer_t *)fsb->core.link)) { + fsb->core.link = NULL; + DEBUG_PINS_SET(video_link, 2); + list_prepend(local_free_list, fsb2); + DEBUG_PINS_CLR(video_link, 2); + fsb = fsb2; + } +#endif + } + } + } + + return fsb; +} + +static inline void release_scanline_irqs_enabled(int buffers_to_free_count, + full_scanline_buffer_t **local_free_list) { + if (buffers_to_free_count) { + uint32_t save = spin_lock_blocking(shared_state.in_use.lock); + while (buffers_to_free_count--) { + DEBUG_PINS_SET(video_dma_buffer, 2); + // We always discard the head which is the oldest + DEBUG_PINS_XOR(video_in_use, 2); + full_scanline_buffer_t *fsb = list_remove_head_ascending( + &shared_state.in_use.in_use_ascending_scanline_id_list, + &shared_state.in_use.in_use_ascending_scanline_id_list_tail); + list_prepend(local_free_list, fsb); +#if PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS + full_scanline_buffer_t *fsb2; + while(NULL != (fsb2 = (full_scanline_buffer_t *)fsb->core.link)) { + fsb->core.link = NULL; + DEBUG_PINS_SET(video_link, 2); + list_prepend(local_free_list, fsb2); + DEBUG_PINS_CLR(video_link, 2); + fsb = fsb2; + } +#endif + DEBUG_PINS_CLR(video_dma_buffer, 2); + } + spin_unlock(shared_state.in_use.lock, save); + } +} + +static inline bool update_dma_transfer_state_irqs_enabled(bool cancel_if_not_complete, + int *scanline_buffers_to_release) { + uint32_t save = spin_lock_blocking(shared_state.dma.lock); + if (!shared_state.dma.scanline_in_progress) { +#if !PICO_SCANVIDEO_NO_DMA_TRACKING + assert(!shared_state.dma.dma_completion_state); +#endif + assert(!shared_state.dma.buffers_to_release); + spin_unlock(shared_state.dma.lock, save); + return true; + } +#if !PICO_SCANVIDEO_NO_DMA_TRACKING + uint32_t old_completed = shared_state.dma.dma_completion_state; + uint32_t new_completed; + while (0 != (new_completed = dma_hw->ints0 & PICO_SCANVIDEO_SCANLINE_DMA_CHANNELS_MASK)) { + scanline_assert(!(old_completed & new_completed)); + // clear interrupt flags + dma_hw->ints0 = new_completed; + DEBUG_PINS_SET(video_dma_completion, new_completed); + DEBUG_PINS_CLR(video_dma_completion, new_completed); + new_completed |= old_completed; + if (new_completed == PICO_SCANVIDEO_SCANLINE_DMA_CHANNELS_MASK) { + // tell caller to free these buffers... note it is safe to release any outstanding ones + // as only one DMA transfer can be logically in process and we have just finished that + // if the number is > 1 this is due to IRQ / preemption (todo this comment is out of date) + *scanline_buffers_to_release = shared_state.dma.buffers_to_release; + // we have taken ownership of releasing all the current ones + shared_state.dma.buffers_to_release = 0; + if (*scanline_buffers_to_release) { + // now that ISR clearing is protected by lock and also done by the active_scanline start + // we cannot have nesting + scanline_assert(*scanline_buffers_to_release == 1); + DEBUG_PINS_SET(video_dma_completion, 1); + DEBUG_PINS_CLR(video_dma_completion, 1); + } + shared_state.dma.dma_completion_state = shared_state.dma.scanline_in_progress = 0; + spin_unlock(shared_state.dma.lock, save); + return true; + } else { + DEBUG_PINS_SET(video_dma_completion, 2); + DEBUG_PINS_CLR(video_dma_completion, 2); + shared_state.dma.dma_completion_state = old_completed = new_completed; + } + } + // can't cancel yet, note if dma_buffers_to_release = 0 then completion DID happen (todo is this ever the case) + if (cancel_if_not_complete) { +#if PICO_SCANVIDEO_ENABLE_VIDEO_RECOVERY + if (shared_state.dma.buffers_to_release) { + shared_state.dma.dma_completion_state = shared_state.dma.scanline_in_progress = 0; + *scanline_buffers_to_release = shared_state.dma.buffers_to_release; + shared_state.dma.buffers_to_release = 0; + DEBUG_PINS_XOR(video_in_use, 4); + } + dma_channel_abort(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL); +#if PICO_SCANVIDEO_PLANE_COUNT > 1 + dma_channel_abort(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL2); +#if PICO_SCANVIDEO_PLANE_COUNT > 2 + dma_channel_abort(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL3); +#endif +#endif +#else + panic("need VIDEO_RECOVERY"); +#endif + } + spin_unlock(shared_state.dma.lock, save); + return cancel_if_not_complete; +#else + if (shared_state.dma.buffers_to_release) { + shared_state.dma.scanline_in_progress = 0; + *scanline_buffers_to_release = shared_state.dma.buffers_to_release; + shared_state.dma.buffers_to_release = 0; + dma_abort(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL); +#if PICO_SCANVIDEO_PLANE_COUNT > 1 + dma_abort(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL2); +#if PICO_SCANVIDEO_PLANE_COUNT > 2 + dma_channel_abort(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL3); +#endif +#endif + } + spin_unlock(shared_state.dma.lock, save); + return false; +#endif +} + +#if !PICO_SCANVIDEO_NO_DMA_TRACKING + +static inline void scanline_dma_complete_irqs_enabled() { + // The DMA interrupt may be pre-empted by SM IRQ interrupt at any point, so it is possible even in non multi plane + // that this IRQ handler is not the one that is responsible for dealing with the end of the transfer. + // In the multi plane case, there are to different DMAs to worry about which may or may not both be complete + // by the time we get here with one having completed. + DEBUG_PINS_SET(video_dma_completion, 4); + int buffers_to_free_count = 0; + bool is_completion_trigger = update_dma_transfer_state_irqs_enabled(false, &buffers_to_free_count); + full_scanline_buffer_t *local_free_list = NULL; + if (is_completion_trigger) { + uint32_t save = spin_lock_blocking(shared_state.scanline.lock); + DEBUG_PINS_SET(video_timing, 1); + // We make an early attempt to latch a scanline buffer to save time later in the PIO SM IRQ handler + // Of course there may not be a buffer ready yet, or we may have been pre-empty by the PIO SM IRQ handler + // already, in which case fsb will be non null + scanline_locked_try_latch_fsb_if_null_irqs_disabled(&local_free_list); // do an early attempt to latch + DEBUG_PINS_CLR(video_timing, 1); + spin_unlock(shared_state.scanline.lock, save); + } + + // because IRQs are enabled, we may obviously be pre-empted before or between either of these + release_scanline_irqs_enabled(buffers_to_free_count, &local_free_list); + free_local_free_list_irqs_enabled(local_free_list); + DEBUG_PINS_CLR(video_dma_completion, 4); +} + +#endif + +static void set_next_scanline_id(uint32_t scanline_id) { + shared_state.scanline.next_scanline_id = scanline_id; + shared_state.scanline.y_repeat_target = _scanline_repeat_count_fn(scanline_id) * video_mode.yscale; +} + +void __video_most_time_critical_func(prepare_for_active_scanline_irqs_enabled)() { + // note we are now only called in active display lines.. + DEBUG_PINS_SET(video_timing, 1); + full_scanline_buffer_t *local_free_list = NULL; + int buffers_to_free_count = 0; + uint32_t save = spin_lock_blocking(shared_state.scanline.lock); + // VERY IMPORTANT: THIS CODE CAN ONLY TAKE ABOUT 4.5 us BEFORE LAUNCHING DMA... + // ... otherwise our scanline will be shifted over (because we will have started display) + // + // to alleviate this somewhat, we let the dma_complete alsu do a check for current_scanline_buffer == null, and look for a completed scanlines + // In ideal case the dma complete IRQ handler will have been able to set current_scanline_buffer for us (or indeed this is a y scaled mode + // and we are repeating a line)... in either case we will come in well under time budget + full_scanline_buffer_t *fsb = scanline_locked_try_latch_fsb_if_null_irqs_disabled(&local_free_list); + + spin_unlock(shared_state.scanline.lock, save); + DEBUG_PINS_CLR(video_timing, 1); + if (fsb) { + if (fsb->core.scanline_id != shared_state.scanline.next_scanline_id) { + // removed to allow for other video modes; not worth abstracting that far... + // also; we basically never see this color anyway! +// ((uint16_t *) (missing_scanline_data))[1] = 0x03e0; + // note: this should be in the future + fsb = &_missing_scanline_buffer; + } + } else { + // removed to allow for other video modes; not worth abstracting that far... +// ((uint16_t *)(missing_scanline_data))[1] = 0x001f; + // this is usually set by latch + fsb = &_missing_scanline_buffer; + } + + update_dma_transfer_state_irqs_enabled(true, &buffers_to_free_count); + +// DEBUG_PINS_SET(video_irq, 2); + // bit of overkill (to reset src_addr) for y scale repeat lines, but then again those should already have data. but this is now + // required in case current_scanline_buffer was set by the dma complete handler, in which case current_scanline_buffer was null when we got to the test above + + // don't need to reset anything put the CB pointer to start a reload? as we have already configured the rest + // note DMA should already be aborted by here. +#if PICO_SCANVIDEO_ENABLE_VIDEO_RECOVERY + if (!pio_sm_is_tx_fifo_empty(video_pio, PICO_SCANVIDEO_SCANLINE_SM)) { + pio_sm_clear_fifos(video_pio, PICO_SCANVIDEO_SCANLINE_SM); + } + if (video_pio->sm[PICO_SCANVIDEO_SCANLINE_SM].instr != PIO_WAIT_IRQ4) { + // hmm the problem here is we don't know if we should wait or not, because that is purely based on timing.. + // - if irq not posted, and we wait: GOOD + // - if irq not posted and we don't wait: BAD. early line + // - if irq already posted, and we wait: BAD. blank line + // - id irq already posted, and we don't wait: GOOD + pio_sm_exec(video_pio, PICO_SCANVIDEO_SCANLINE_SM, pio_encode_wait_irq(1, false, 4)); + if (pio_sm_is_exec_stalled(video_pio, PICO_SCANVIDEO_SCANLINE_SM)) { + pio_sm_exec(video_pio, PICO_SCANVIDEO_SCANLINE_SM, pio_encode_jmp(shared_state.scanline_program_wait_index)); + } else { + pio_sm_exec(video_pio, PICO_SCANVIDEO_SCANLINE_SM, + pio_encode_jmp(shared_state.scanline_program_wait_index + 1)); + } + } +#if PICO_SCANVIDEO_PLANE_COUNT > 1 + if (!pio_sm_is_tx_fifo_empty(video_pio, PICO_SCANVIDEO_SCANLINE_SM2)) { + pio_sm_clear_fifos(video_pio, PICO_SCANVIDEO_SCANLINE_SM2); + } + if (video_pio->sm[PICO_SCANVIDEO_SCANLINE_SM2].instr != PIO_WAIT_IRQ4) { + // hmm the problem here is we don't know if we should wait or not, because that is purely based on timing.. + // - if irq not posted, and we wait: GOOD + // - if irq not posted and we don't wait: BAD. early line + // - if irq already posted, and we wait: BAD. blank line + // - id irq already posted, and we don't wait: GOOD + pio_sm_exec(video_pio, PICO_SCANVIDEO_SCANLINE_SM2, pio_encode_wait_irq(1, false, 4)); + if (pio_sm_is_exec_stalled(video_pio, PICO_SCANVIDEO_SCANLINE_SM2)) { + pio_sm_exec(video_pio, PICO_SCANVIDEO_SCANLINE_SM2, pio_encode_jmp(shared_state.scanline_program_wait_index)); + } else { + pio_sm_exec(video_pio, PICO_SCANVIDEO_SCANLINE_SM2, + pio_encode_jmp(shared_state.scanline_program_wait_index + 1)); + } + } + #endif +#endif +#if PICO_SCANVIDEO_PLANE1_FRAGMENT_DMA +#if PICO_SCANVIDEO_PLANE1_FIXED_FRAGMENT_DMA + dma_channel_hw_addr(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL)->al3_transfer_count = fsb->core.fragment_words; +#endif + //dma_channel_transfer_from_buffer_now(PICO_SCANVIDEO_SCANLINE_DMA_CB_CHANNEL, (uintptr_t)fsb->core.data, (uint32_t) fsb->core.data_used); + dma_channel_hw_addr(PICO_SCANVIDEO_SCANLINE_DMA_CB_CHANNEL)->al3_read_addr_trig = (uintptr_t)fsb->core.data; +#else + dma_channel_transfer_from_buffer_now(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL, fsb->core.data, + (uint32_t) fsb->core.data_used); +#endif +#if PICO_SCANVIDEO_PLANE_COUNT > 1 +#if PICO_SCANVIDEO_PLANE2_FRAGMENT_DMA + dma_channel_hw_addr(PICO_SCANVIDEO_SCANLINE_DMA_CB_CHANNEL2)->al3_read_addr_trig = (uintptr_t)fsb->core.data2; +#else + dma_channel_transfer_from_buffer_now(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL2, fsb->core.data2, (uint32_t) fsb->core.data2_used); +#endif +#if PICO_SCANVIDEO_PLANE_COUNT > 2 + dma_channel_transfer_from_buffer_now(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL3, fsb->core.data3, (uint32_t) fsb->core.data3_used); +// scanline_assert(video_pio->sm[PICO_SCANVIDEO_SCANLINE_SM3].addr == video_24mhz_composable_offset_end_of_scanline_ALIGN); +#endif +// scanline_assert(video_pio->sm[PICO_SCANVIDEO_SCANLINE_SM2].addr == video_24mhz_composable_offset_end_of_scanline_ALIGN); +#endif +// scanline_assert(video_pio->sm[PICO_SCANVIDEO_SCANLINE_SM].addr == video_24mhz_composable_offset_end_of_scanline_ALIGN); +// DEBUG_PINS_CLR(video_irq, 2); + + save = spin_lock_blocking(shared_state.scanline.lock); + DEBUG_PINS_SET(video_timing, 1); + shared_state.scanline.in_vblank = false; + bool was_correct_scanline = (fsb != &_missing_scanline_buffer); + bool free_scanline = false; + shared_state.scanline.y_repeat_index += video_mode.yscale_denominator; + if (shared_state.scanline.y_repeat_index >= shared_state.scanline.y_repeat_target) { + // pick up a new scanline next time around if we had the right one + if (was_correct_scanline) { + free_scanline = true; + } + + shared_state.scanline.y_repeat_index -= shared_state.scanline.y_repeat_target; + set_next_scanline_id(scanline_id_after(shared_state.scanline.next_scanline_id)); + shared_state.scanline.current_scanline_buffer = NULL; + } else if (!was_correct_scanline) { + // not at the the end of yscale, but the wrong (or missing) scanline anyway, so clear that + shared_state.scanline.current_scanline_buffer = NULL; +#if PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS + } else if (fsb->core.link_after && !--fsb->core.link_after) { + assert(fsb->core.link); + spin_lock_unsafe_blocking(shared_state.in_use.lock); + DEBUG_PINS_SET(video_link, 1); + full_scanline_buffer_t *fsb2 = (full_scanline_buffer_t *)fsb->core.link; + fsb->core.link = NULL; // the linkee scanline is now tracked on its own, so shouldn't be freed with the linker + // we need to insert after the current item in the list, which is after fsb + fsb2->core.scanline_id = fsb->core.scanline_id; + fsb2->next = fsb->next; + fsb->next = fsb2; + if (fsb == shared_state.in_use.in_use_ascending_scanline_id_list_tail) { + shared_state.in_use.in_use_ascending_scanline_id_list_tail = fsb2; + } + DEBUG_PINS_CLR(video_link, 1); + spin_unlock_unsafe(shared_state.in_use.lock); + shared_state.scanline.current_scanline_buffer = fsb2; + free_scanline = true; +#endif + } + // safe to nest dma lock we never nest the other way + spin_lock_unsafe_blocking(shared_state.dma.lock); + shared_state.dma.scanline_in_progress = 1; + if (free_scanline) { + scanline_assert(!shared_state.dma.buffers_to_release); + shared_state.dma.buffers_to_release++; + } + spin_unlock_unsafe(shared_state.dma.lock); + DEBUG_PINS_CLR(video_timing, 1); + spin_unlock(shared_state.scanline.lock, save); + + // because IRQs are enabled, we may obviously be pre-empted before or between either of these + release_scanline_irqs_enabled(buffers_to_free_count, &local_free_list); + free_local_free_list_irqs_enabled(local_free_list); +} + +static void __video_time_critical_func(prepare_for_vblank_scanline_irqs_enabled)() { + bool signal = false; + + // To simplify logic below, clean up any active scanlines now + + // note we only really need to do this on the first time in vsync, however as a defensive (potential recovery) + // move we do it every time as it is cheap if nothing to do. + int buffers_to_free_count = 0; + update_dma_transfer_state_irqs_enabled(true, &buffers_to_free_count); + + uint32_t save = spin_lock_blocking(shared_state.scanline.lock); + DEBUG_PINS_SET(video_timing, 1); + full_scanline_buffer_t *local_free_list = NULL; + + if (!shared_state.scanline.in_vblank) { + shared_state.scanline.in_vblank = true; + shared_state.scanline.y_repeat_index = 0; + + // generally this should already have wrapped, but may not have just after a sync + if (scanvideo_scanline_number(shared_state.scanline.next_scanline_id) != 0) { + // set up for scanline 0 of the next frame when we come out of vblank + shared_state.scanline.next_scanline_id = + (scanvideo_frame_number(shared_state.scanline.next_scanline_id) + 1u) << 16u; + shared_state.scanline.y_repeat_target = _scanline_repeat_count_fn(shared_state.scanline.next_scanline_id); + } + + + signal = true; + } + + if (!shared_state.scanline.current_scanline_buffer || is_scanline_after(shared_state.scanline.next_scanline_id, + shared_state.scanline.current_scanline_buffer->core.scanline_id)) { + // if we had a scanline buffer still (which was in the past, unset it and make sure it will be freed + // before we attempt to relatch which only does something when csb == NULL) + if (shared_state.scanline.current_scanline_buffer) { + buffers_to_free_count++; // make sure it gets removed from in_use list + shared_state.scanline.current_scanline_buffer = NULL; + } + // this will probably succeed, because we are buffering ahead of the actual beam position + scanline_locked_try_latch_fsb_if_null_irqs_disabled(&local_free_list); + } + + DEBUG_PINS_CLR(video_timing, 1); + spin_unlock(shared_state.scanline.lock, save); + + // because IRQs are enabled, we may obviously be pre-empted before or between either of these + release_scanline_irqs_enabled(buffers_to_free_count, &local_free_list); + + free_local_free_list_irqs_enabled(local_free_list); + + if (signal) { + sem_release(&vblank_begin); + } +} + +#define setup_dma_states_vblank() if (true) { dma_states[0] = timing_state.a_vblank; dma_states[1] = timing_state.b1; dma_states[2] = timing_state.b2; dma_states[3] = timing_state.c_vblank; } else __builtin_unreachable() +#define setup_dma_states_no_vblank() if (true) { dma_states[0] = timing_state.a; dma_states[1] = timing_state.b1; dma_states[2] = timing_state.b2; dma_states[3] = timing_state.c; } else __builtin_unreachable() + +static inline void top_up_timing_pio_fifo() { + // todo better irq reset ... we are seeing irq get set again, handled in this loop, then we re-enter here when we don't need to + // keep filling until SM3 TX is full + while (!(video_pio->fstat & (1u << (PICO_SCANVIDEO_TIMING_SM + PIO_FSTAT_TXFULL_LSB)))) { + DEBUG_PINS_XOR(video_irq, 1); + DEBUG_PINS_XOR(video_irq, 1); + pio_sm_put(video_pio, PICO_SCANVIDEO_TIMING_SM, dma_states[timing_state.dma_state_index] | timing_state.vsync_bits); + // todo simplify this now we have a1, a2, b, c + // todo display enable (only goes positive on start of screen) + + // todo right now we are fixed... make this generic for timing and improve + if (++timing_state.dma_state_index >= DMA_STATE_COUNT) { + timing_state.dma_state_index = 0; + timing_state.timing_scanline++; + + // todo check code and put these in a current state struct + if (timing_state.timing_scanline >= timing_state.v_active) { + if (timing_state.timing_scanline >= timing_state.v_total) { + timing_state.timing_scanline = 0; + // active display - gives irq 0 and irq 4 + setup_dma_states_no_vblank(); + } else if (timing_state.timing_scanline <= timing_state.v_pulse_end) { + if (timing_state.timing_scanline == timing_state.v_active) { + setup_dma_states_vblank(); + } else if (timing_state.timing_scanline == timing_state.v_pulse_start) { + timing_state.vsync_bits = timing_state.vsync_bits_pulse; + } else if (timing_state.timing_scanline == timing_state.v_pulse_end) { + timing_state.vsync_bits = timing_state.vsync_bits_no_pulse; + } + } + } + } + } +} + +void __isr __video_most_time_critical_func(isr_pio0_0)() { +#if PICO_SCANVIDEO_ADJUST_BUS_PRIORITY + bus_ctrl_hw->priority = VIDEO_ADJUST_BUS_PRIORITY_VAL; +#endif + + // handler for explicit PIO_IRQ0 from PICO_SCANVIDEO_TIMING_SM at a good time to start a DMA for a scanline + // this called once per scanline during non vblank + if (video_pio->irq & 1u) { + video_pio->irq = 1; + DEBUG_PINS_SET(video_irq, 1); + if (display_enabled) { + prepare_for_active_scanline_irqs_enabled(); + } + DEBUG_PINS_CLR(video_irq, 1); + } +#if PICO_SCANVIDEO_ADJUST_BUS_PRIORITY + bus_ctrl_hw->priority = 0; +#endif + // handler for explicit PIO_IRQ1 from PICO_SCANVIDEO_TIMING_SM at a good time to prepare for a scanline + // this is only called once per scanline during vblank + if (video_pio->irq & 2u) { +// video_pio->irq = 2; + video_pio->irq = 3; // we clear irq1 for good measure, in case we had gotten out of sync + DEBUG_PINS_SET(video_irq, 2); + prepare_for_vblank_scanline_irqs_enabled(); + DEBUG_PINS_CLR(video_irq, 2); + } +} + +// irq for PIO FIFO +void __isr __video_most_time_critical_func(isr_pio0_1)() { + DEBUG_PINS_SET(video_irq, 4); + top_up_timing_pio_fifo(); + DEBUG_PINS_CLR(video_irq, 4); +} + +#if !PICO_SCANVIDEO_NO_DMA_TRACKING + +// DMA complete +void __isr __video_time_critical_func(isr_dma_0)() { +#if PICO_SCANVIDEO_ADJUST_BUS_PRIORITY + bus_ctrl_hw->priority = VIDEO_ADJUST_BUS_PRIORITY_VAL; +#endif + DEBUG_PINS_SET(video_irq, 4); + scanline_dma_complete_irqs_enabled(); + DEBUG_PINS_CLR(video_irq, 4); +#if PICO_SCANVIDEO_ADJUST_BUS_PRIORITY + bus_ctrl_hw->priority = 0; +#endif +} + +#endif + +static inline bool is_scanline_sm(int sm) { +#if PICO_SCANVIDEO_PLANE_COUNT > 1 +#if PICO_SCANVIDEO_PLANE_COUNT > 2 + return sm == PICO_SCANVIDEO_SCANLINE_SM || sm == PICO_SCANVIDEO_SCANLINE_SM2 || sm == PICO_SCANVIDEO_SCANLINE_SM3; +#else + return sm == PICO_SCANVIDEO_SCANLINE_SM || sm == PICO_SCANVIDEO_SCANLINE_SM2; +#endif +#else + return sm == PICO_SCANVIDEO_SCANLINE_SM; +#endif +} + +void setup_sm(int sm, uint offset) { +#ifndef NDEBUG + printf("Setting up SM %d\n", sm); +#endif + + pio_sm_config config = is_scanline_sm(sm) ? video_mode.pio_program->configure_pio(video_pio, sm, offset) : + video_htiming_program_get_default_config(offset); + +#if PICO_SCANVIDEO_ENABLE_VIDEO_CLOCK_DOWN + sm_config_set_clkdiv_int_frac(&config, video_clock_down_times_2 / 2, (video_clock_down_times_2 & 1u) << 7u); +#endif + + if (!is_scanline_sm(sm)) { + // enable auto-pull + sm_config_set_out_shift(&config, true, true, 32); + const uint BASE = PICO_SCANVIDEO_SYNC_PIN_BASE; // hsync and vsync are +0 and +1, clock is +2 + uint pin_count; +#if PICO_SCANVIDEO_ENABLE_DEN_PIN + pin_count = 3; + // 3 OUT pins and maybe 1 sideset pin following them +#else + // 2 OUT pins and 1 sideset pin following them + pin_count = 2; +#endif + sm_config_set_out_pins(&config, BASE, pin_count); +#if PICO_SCANVIDEO_ENABLE_DEN_PIN + // side set pin as well + sm_config_set_sideset_pins(&config, BASE + pin_count); + pin_count++; +#endif + pio_sm_set_consecutive_pindirs(video_pio, sm, BASE, pin_count, true); + } + + pio_sm_init(video_pio, sm, offset, &config); // now paused +} + +scanvideo_mode_t scanvideo_get_mode() { + return video_mode; +} + +extern uint32_t scanvideo_get_next_scanline_id() { + return *(volatile uint32_t *) &shared_state.scanline.next_scanline_id; +} + +extern bool scanvideo_in_hblank() { + // this is a close estimate + // return !*(volatile bool *) &shared_state.dma.scanline_in_progress; + + // better we can see if the PIO is waiting on IRQ 4 (which it is almost all of the time it isn't drawing pixels) + // + // note that currently we require even custom PIO scanline programs to use WAIT IRQ 4 to sync with start of scanline + return video_pio->sm[PICO_SCANVIDEO_SCANLINE_SM].instr == PIO_WAIT_IRQ4; +} + +extern bool scanvideo_in_vblank() { + return *(volatile bool *) &shared_state.scanline.in_vblank; +} + + +static uint default_scanvideo_scanline_repeat_count_fn(uint32_t scanline_id) { + return 1; +} + +extern scanvideo_scanline_buffer_t *__video_time_critical_func(scanvideo_begin_scanline_generation)( + bool block) { + full_scanline_buffer_t *fsb; + + DEBUG_PINS_SET(video_link, 1); + DEBUG_PINS_SET(video_generation, 1); + do { + uint32_t save = spin_lock_blocking(shared_state.free_list.lock); +// DEBUG_PINS_SET(video_timing, 4); + fsb = list_remove_head(&shared_state.free_list.free_list); +// DEBUG_PINS_CLR(video_timing, 4); + spin_unlock(shared_state.free_list.lock, save); + + if (fsb) { + save = spin_lock_blocking(shared_state.scanline.lock); + DEBUG_PINS_SET(video_timing, 1); +#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS + list_prepend(&shared_state.scanline.generating_list, fsb); +#endif + // todo improve this algorithm... how far ahead should we be + // todo i.e. should we skip ahead a bit further if we are perpetually behind - doesn't really help because we'd + // todo be skipping some scanlines anyway; doesn't really matter which ones at that point + uint32_t scanline_id = shared_state.scanline.next_scanline_id; + + if (!is_scanline_after(scanline_id, shared_state.scanline.last_scanline_id)) { + // we are buffering ahead of the display + scanline_id = scanline_id_after(shared_state.scanline.last_scanline_id); + } + + fsb->core.scanline_id = shared_state.scanline.last_scanline_id = scanline_id; + DEBUG_PINS_CLR(video_timing, 1); + spin_unlock(shared_state.scanline.lock, save); + break; + } + + if (block) { + __wfe(); + } + } while (block); + + DEBUG_PINS_CLR(video_link, 1); + DEBUG_PINS_CLR(video_generation, 1); +#if PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS + fsb->core.link_after = 0; +#endif + return (scanvideo_scanline_buffer_t *) fsb; +} + +// todo remove this in favor of using scanvideo_begin_scanline_generation_link +scanvideo_scanline_buffer_t *__video_time_critical_func(scanvideo_begin_scanline_generation2)(scanvideo_scanline_buffer_t **second, bool block) +{ + full_scanline_buffer_t *fsb; + + DEBUG_PINS_SET(video_generation, 1); + do + { + uint32_t save = spin_lock_blocking(shared_state.free_list.lock); + DEBUG_PINS_SET(video_timing, 4); + fsb = shared_state.free_list.free_list; + full_scanline_buffer_t *fsb2; + if (fsb) { + fsb2 = fsb->next; + if (fsb2) { + // unlink both + shared_state.free_list.free_list = fsb->next->next; + fsb->next = NULL; + fsb2->next = NULL; + } else { + fsb = NULL; + } + } else { + fsb = NULL; + } + DEBUG_PINS_CLR(video_timing, 4); + spin_unlock(shared_state.free_list.lock, save); + if (fsb) + { + save = spin_lock_blocking(shared_state.scanline.lock); + DEBUG_PINS_SET(video_timing, 1); +#ifdef ENABLE_SCANLINE_ASSERTIONS + list_prepend(&shared_state.scanline.generating_list, fsb); + list_prepend(&shared_state.scanline.generating_list, fsb2); +#endif + // todo improve this algorithm... how far ahead should we be + // todo i.e. should we skip ahead a bit further if we are perpetually behind - doesn't really help because we'd + // todo be skipping some scanlines anyway; doesn't really matter which ones at that point + uint32_t scanline_id = shared_state.scanline.next_scanline_id; + + if (!is_scanline_after(scanline_id, shared_state.scanline.last_scanline_id)) + { + // we are buffering ahead of the display + scanline_id = scanline_id_after(shared_state.scanline.last_scanline_id); + } + + fsb->core.scanline_id = scanline_id; + scanline_id = scanline_id_after(scanline_id); + fsb2->core.scanline_id = shared_state.scanline.last_scanline_id = scanline_id; + DEBUG_PINS_CLR(video_timing, 1); + *second = &fsb2->core; + spin_unlock(shared_state.scanline.lock, save); + break; + } + + if (block) + { + DEBUG_PINS_SET(video_generation, 4); + __wfe(); + DEBUG_PINS_CLR(video_generation, 4); + } + } + while (block); + + DEBUG_PINS_CLR(video_generation, 1); + return (scanvideo_scanline_buffer_t *) fsb; +} + +#if PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS +extern scanvideo_scanline_buffer_t *__video_time_critical_func(scanvideo_begin_scanline_generation_linked)(uint n, + bool block) { + full_scanline_buffer_t *fsb; + + DEBUG_PINS_SET(video_link, 1); + DEBUG_PINS_SET(video_generation, 1); + do { + uint32_t save = spin_lock_blocking(shared_state.free_list.lock); +// DEBUG_PINS_SET(video_timing, 4); + fsb = shared_state.free_list.free_list; + if (fsb) { + full_scanline_buffer_t *fsb_tail = fsb; + for(uint i=1; inext; + } + if (fsb_tail) { + shared_state.free_list.free_list = fsb_tail->next; + fsb_tail->next = NULL; + } else { + fsb = NULL; + } + } +// DEBUG_PINS_CLR(video_timing, 4); + spin_unlock(shared_state.free_list.lock, save); + + if (fsb) { + full_scanline_buffer_t *fsb_tail = fsb; + while (fsb_tail) { + full_scanline_buffer_t *fsb_next = fsb_tail->next; + fsb_tail->core.link = fsb_next ? &fsb_next->core : NULL; + fsb_tail->next = NULL; + fsb_tail = fsb_next; + } + save = spin_lock_blocking(shared_state.scanline.lock); + DEBUG_PINS_SET(video_timing, 1); +#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS + list_prepend(&shared_state.scanline.generating_list, fsb); +#endif + // todo improve this algorithm... how far ahead should we be + // todo i.e. should we skip ahead a bit further if we are perpetually behind - doesn't really help because we'd + // todo be skipping some scanlines anyway; doesn't really matter which ones at that point + uint32_t scanline_id = shared_state.scanline.next_scanline_id; + + if (!is_scanline_after(scanline_id, shared_state.scanline.last_scanline_id)) { + // we are buffering ahead of the display + scanline_id = scanline_id_after(shared_state.scanline.last_scanline_id); + } + + shared_state.scanline.last_scanline_id = scanline_id; + scanvideo_scanline_buffer_t *fsb_core = &fsb->core; + while (fsb_core) { + fsb_core->scanline_id = scanline_id; + fsb_core = fsb_core->link; + } + DEBUG_PINS_CLR(video_timing, 1); + spin_unlock(shared_state.scanline.lock, save); + break; + } + + if (block) { + __wfe(); + } + } while (block); + + DEBUG_PINS_CLR(video_link, 1); + DEBUG_PINS_CLR(video_generation, 1); + fsb->core.link_after = 0; + return (scanvideo_scanline_buffer_t *) fsb; +} +#endif + +extern void __video_time_critical_func(scanvideo_end_scanline_generation)( + scanvideo_scanline_buffer_t *scanline_buffer) { + DEBUG_PINS_SET(video_generation, 2); + full_scanline_buffer_t *fsb = (full_scanline_buffer_t *) scanline_buffer; + uint32_t save = spin_lock_blocking(shared_state.scanline.lock); +#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS + list_remove(&shared_state.scanline.generating_list, fsb); +#endif + list_insert_ascending(&shared_state.scanline.generated_ascending_scanline_id_list, + &shared_state.scanline.generated_ascending_scanline_id_list_tail, fsb); + spin_unlock(shared_state.scanline.lock, save); + DEBUG_PINS_CLR(video_generation, 2); +} + +//#pragma GCC pop_options + +void scanvideo_set_scanline_repeat_fn(scanvideo_scanline_repeat_count_fn fn) { + _scanline_repeat_count_fn = fn ? fn : default_scanvideo_scanline_repeat_count_fn; +} + +bool scanvideo_setup(const scanvideo_mode_t *mode) { + return scanvideo_setup_with_timing(mode, mode->default_timing); +} + +static pio_program_t copy_program(const pio_program_t *program, uint16_t *instructions, + uint32_t max_instructions) { + assert(max_instructions >= program->length); + pio_program_t copy = *program; + __builtin_memcpy(instructions, program->instructions, MIN(program->length, max_instructions) * sizeof(uint16_t)); + copy.instructions = instructions; + return copy; +} + +bool scanvideo_setup_with_timing(const scanvideo_mode_t *mode, const scanvideo_timing_t *timing) { + __builtin_memset(&shared_state, 0, sizeof(shared_state)); + // init non zero members + // todo pass scanline buffers and size, or allow client to allocate + shared_state.scanline.lock = spin_lock_init(PICO_SPINLOCK_ID_VIDEO_SCANLINE_LOCK); + shared_state.dma.lock = spin_lock_init(PICO_SPINLOCK_ID_VIDEO_DMA_LOCK); + shared_state.free_list.lock = spin_lock_init(PICO_SPINLOCK_ID_VIDEO_FREE_LIST_LOCK); + shared_state.in_use.lock = spin_lock_init(PICO_SPINLOCK_ID_VIDEO_IN_USE_LOCK); + shared_state.scanline.last_scanline_id = 0xffffffff; + + video_mode = *mode; + video_mode.default_timing = timing; + + static_assert(BPP == 16, ""); // can't do 8 bit now because of pixel count + // this is no longer necessary + //assert(!(mode->width & 1)); + if (!video_mode.yscale_denominator) video_mode.yscale_denominator = 1; + // todo is this still necessary? + //invalid_params_if(SCANVIDEO_DPI, (timing->v_active % mode->yscale)); + ((uint16_t *) (_missing_scanline_data))[2] = mode->width / 2 - 3; +#if PICO_SCANVIDEO_PLANE1_VARIABLE_FRAGMENT_DMA || PICO_SCANVIDEO_PLANE2_VARIABLE_FRAGMENT_DMA + variable_fragment_missing_scanline_data_chain[1] = native_safe_hw_ptr(_missing_scanline_data); +#endif +#if PICO_SCANVIDEO_PLANE1_FIXED_FRAGMENT_DMA || PICO_SCANVIDEO_PLANE2_FIXED_FRAGMENT_DMA + fixed_fragment_missing_scanline_data_chain[0] = native_safe_hw_ptr(_missing_scanline_data); +#endif + + sem_init(&vblank_begin, 0, 1); + + for (int i = 0; i < PICO_SCANVIDEO_SCANLINE_BUFFER_COUNT; i++) { + mem_buffer_t b; + pico_buffer_alloc_in_place(&b, PICO_SCANVIDEO_MAX_SCANLINE_BUFFER_WORDS * sizeof(uint32_t)); + scanline_buffers[i].core.data = (uint32_t *)b.bytes;// calloc(PICO_SCANVIDEO_MAX_SCANLINE_BUFFER_WORDS, sizeof(uint32_t)); + scanline_buffers[i].core.data_max = PICO_SCANVIDEO_MAX_SCANLINE_BUFFER_WORDS; +#if PICO_SCANVIDEO_PLANE_COUNT > 1 + scanline_buffers[i].core.data2 = (uint32_t *) calloc(PICO_SCANVIDEO_MAX_SCANLINE_BUFFER2_WORDS, sizeof(uint32_t)); + scanline_buffers[i].core.data2_max = PICO_SCANVIDEO_MAX_SCANLINE_BUFFER2_WORDS; +#if PICO_SCANVIDEO_PLANE_COUNT > 2 + scanline_buffers[i].core.data3 = (uint32_t *) calloc(PICO_SCANVIDEO_MAX_SCANLINE_BUFFER3_WORDS, sizeof(uint32_t)); + scanline_buffers[i].core.data3_max = PICO_SCANVIDEO_MAX_SCANLINE_BUFFER3_WORDS; +#endif +#endif + scanline_buffers[i].next = i != PICO_SCANVIDEO_SCANLINE_BUFFER_COUNT - 1 ? &scanline_buffers[i + 1] : NULL; + } + + shared_state.free_list.free_list = &scanline_buffers[0]; + // shared state init complete - probably overkill + __mem_fence_release(); + + uint pin_mask = 3u << PICO_SCANVIDEO_SYNC_PIN_BASE; + bi_decl_if_func_used(bi_2pins_with_names(PICO_SCANVIDEO_SYNC_PIN_BASE, "HSync", + PICO_SCANVIDEO_SYNC_PIN_BASE + 1, "VSync")); + +#if PICO_SCANVIDEO_ENABLE_DEN_PIN + bi_decl_if_func_used(bi_1pin_with_name(PICO_SCANVIDEO_SYNC_PIN_BASE + 2, "Display Enable")); + pin_mask |= 4u << PICO_SCANVIDEO_SYNC_PIN_BASE; +#endif +#if PICO_SCANVIDEO_ENABLE_CLOCK_PIN + bi_decl_if_func_used(bi_1pin_with_name(PICO_SCANVIDEO_SYNC_PIN_BASE + 3, "Pixel Clock")); + pin_mask |= 8u << PICO_SCANVIDEO_SYNC_PIN_BASE; +#endif + static_assert(PICO_SCANVIDEO_PIXEL_RSHIFT + PICO_SCANVIDEO_PIXEL_RCOUNT <= PICO_SCANVIDEO_COLOR_PIN_COUNT, "red bits do not fit in color pins"); + static_assert(PICO_SCANVIDEO_PIXEL_GSHIFT + PICO_SCANVIDEO_PIXEL_GCOUNT <= PICO_SCANVIDEO_COLOR_PIN_COUNT, "green bits do not fit in color pins"); + static_assert(PICO_SCANVIDEO_PIXEL_BSHIFT + PICO_SCANVIDEO_PIXEL_BCOUNT <= PICO_SCANVIDEO_COLOR_PIN_COUNT, "blue bits do not fit in color pins"); +#define RMASK ((1u << PICO_SCANVIDEO_PIXEL_RCOUNT) - 1u) +#define GMASK ((1u << PICO_SCANVIDEO_PIXEL_GCOUNT) - 1u) +#define BMASK ((1u << PICO_SCANVIDEO_PIXEL_BCOUNT) - 1u) + pin_mask |= RMASK << (PICO_SCANVIDEO_COLOR_PIN_BASE + PICO_SCANVIDEO_PIXEL_RSHIFT); + pin_mask |= GMASK << (PICO_SCANVIDEO_COLOR_PIN_BASE + PICO_SCANVIDEO_PIXEL_GSHIFT); + pin_mask |= BMASK << (PICO_SCANVIDEO_COLOR_PIN_BASE + PICO_SCANVIDEO_PIXEL_BSHIFT); + bi_decl_if_func_used(bi_pin_mask_with_name(RMASK << (PICO_SCANVIDEO_COLOR_PIN_BASE + PICO_SCANVIDEO_PIXEL_RSHIFT), RMASK == 1 ? "Red" : ("Red 0-" __XSTRING(PICO_SCANVIDEO_PIXEL_GCOUNT)))); + bi_decl_if_func_used(bi_pin_mask_with_name(GMASK << (PICO_SCANVIDEO_COLOR_PIN_BASE + PICO_SCANVIDEO_PIXEL_GSHIFT), GMASK == 1 ? "Green" : ("Green 0-" __XSTRING(PICO_SCANVIDEO_PIXEL_GCOUNT)))); + bi_decl_if_func_used(bi_pin_mask_with_name(BMASK << (PICO_SCANVIDEO_COLOR_PIN_BASE + PICO_SCANVIDEO_PIXEL_BSHIFT), BMASK == 1 ? "Blue" : ("Blue 0-" __XSTRING(PICO_SCANVIDEO_PIXEL_BCOUNT)))); + + for(uint8_t i = 0; pin_mask; i++, pin_mask>>=1u) { + if (pin_mask & 1) gpio_set_function(i, GPIO_FUNC_PIO0); + } + +#if !PICO_SCANVIDEO_ENABLE_VIDEO_CLOCK_DOWN + valid_params_if(SCANVIDEO_DPI, timing->clock_freq == video_clock_freq); +#else + uint sys_clk = clock_get_hz(clk_sys); + video_clock_down_times_2 = sys_clk / timing->clock_freq; +#if PICO_SCANVIDEO_ENABLE_CLOCK_PIN + if (video_clock_down_times_2 * timing->clock_freq != sys_clk) { + panic("System clock (%d) must be an integer multiple of 2 times the requested pixel clock (%d).", sys_clk, timing->clock_freq); + } +#else + if (video_clock_down_times_2 * timing->clock_freq != sys_clk) { + panic("System clock (%d) must be an integer multiple of the requested pixel clock (%d).", sys_clk, timing->clock_freq); + } +#endif +#endif + + valid_params_if(SCANVIDEO_DPI, mode->width * mode->xscale <= timing->h_active); + valid_params_if(SCANVIDEO_DPI, mode->height * mode->yscale <= timing->v_active * video_mode.yscale_denominator); + + uint16_t instructions[32]; + pio_program_t modified_program = copy_program(mode->pio_program->program, instructions, + count_of(instructions)); + + if (!mode->pio_program->adapt_for_mode(mode->pio_program, mode, &_missing_scanline_buffer.core, instructions)) { + valid_params_if(SCANVIDEO_DPI, false); + } + valid_params_if(SCANVIDEO_DPI, _missing_scanline_buffer.core.data && _missing_scanline_buffer.core.data_used); + video_program_load_offset = pio_add_program(video_pio, &modified_program); + +#if PICO_SCANVIDEO_ENABLE_VIDEO_RECOVERY + int program_wait_index = -1; +#endif +#if PICO_SCANVIDEO_ENABLE_VIDEO_RECOVERY || PARAM_ASSERTIONS_ENABLED(SCANVIDEO_DBI) + for (int i = 0; i < mode->pio_program->program->length; i++) { + if (instructions[i] == PIO_WAIT_IRQ4) { +#if PICO_SCANVIDEO_ENABLE_VIDEO_RECOVERY + valid_params_if(SCANVIDEO_DPI, program_wait_index == -1); + program_wait_index = i; +#endif + } + } +#if PICO_SCANVIDEO_ENABLE_VIDEO_RECOVERY + valid_params_if(SCANVIDEO_DPI, program_wait_index != -1); + shared_state.scanline_program_wait_index = program_wait_index; +#endif +#endif + +#if PICO_SCANVIDEO_PLANE_COUNT > 1 + valid_params_if(SCANVIDEO_DPI,_missing_scanline_buffer.core.data2 && _missing_scanline_buffer.core.data2_used); +#if PICO_SCANVIDEO_PLANE_COUNT > 2 + valid_params_if(SCANVIDEO_DPI,_missing_scanline_buffer.core.data3 && _missing_scanline_buffer.core.data3_used); +#endif +#endif + _missing_scanline_buffer.core.status = SCANLINE_OK; + + setup_sm(PICO_SCANVIDEO_SCANLINE_SM, video_program_load_offset); +#if PICO_SCANVIDEO_PLANE_COUNT > 1 + setup_sm(PICO_SCANVIDEO_SCANLINE_SM2, video_program_load_offset); +#if PICO_SCANVIDEO_PLANE_COUNT > 2 + setup_sm(PICO_SCANVIDEO_SCANLINE_SM3, video_program_load_offset); +#endif +#endif + + uint32_t side_set_xor = 0; + modified_program = copy_program(&video_htiming_program, instructions, count_of(instructions)); + + if (timing->clock_polarity) { + side_set_xor = 0x1000; // flip the top side set bit + + for (uint i = 0; i < video_htiming_program.length; i++) { + instructions[i] ^= side_set_xor; + } + } + + video_htiming_load_offset = pio_add_program(video_pio, &modified_program); + + setup_sm(PICO_SCANVIDEO_TIMING_SM, video_htiming_load_offset); + + // make this highest priority +#if PICO_DEFAULT_IRQ_PRIORITY < 0x40 +#warning pico_scanvideo_dpi may not always function correctly without PIO_IRQ_0 at a higher priority than other interrupts. + irq_set_priority(PIO0_IRQ_1, 0x40); // lower priority by 1 + irq_set_priority(DMA_IRQ_0, 0x80); // lower priority by 2 +#else + irq_set_priority(PIO0_IRQ_0, 0); // highest priority + irq_set_priority(PIO0_IRQ_1, 0x40); // lower priority by 1 +#endif + + dma_claim_mask(PICO_SCANVIDEO_SCANLINE_DMA_CHANNELS_MASK); + dma_set_irq0_channel_mask_enabled(PICO_SCANVIDEO_SCANLINE_DMA_CHANNELS_MASK, true); + // also done in scanvideo_timing_enable +// video_pio->inte1 = 1u << (PICO_SCANVIDEO_TIMING_SM + PIO_IRQ1_INTE_SM0_TXNFULL_LSB); + + // todo reset DMA channels + + dma_channel_config channel_config = dma_channel_get_default_config(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL); + channel_config_set_dreq(&channel_config, DREQ_PIO0_TX0 + + PICO_SCANVIDEO_SCANLINE_SM); // Select scanline dma dreq to be PICO_SCANVIDEO_SCANLINE_SM TX FIFO not full +#if PICO_SCANVIDEO_PLANE1_FRAGMENT_DMA + channel_config_set_chain_to(&channel_config, PICO_SCANVIDEO_SCANLINE_DMA_CB_CHANNEL); + channel_config_set_irq_quiet(&channel_config, true); +#endif + dma_channel_configure(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL, + &channel_config, + &video_pio->txf[PICO_SCANVIDEO_SCANLINE_SM], + NULL, // set later + 0, // set later + false); +#if PICO_SCANVIDEO_PLANE1_FRAGMENT_DMA + dma_channel_config chain_config = dma_channel_get_default_config(PICO_SCANVIDEO_SCANLINE_DMA_CB_CHANNEL); + channel_config_set_write_increment(&chain_config, true); + // configure write ring + channel_config_set_ring(&chain_config, true, +#if PICO_SCANVIDEO_PLANE1_VARIABLE_FRAGMENT_DMA + 3 // wrap the write at 8 bytes (so each transfer writes the same 2 word ctrl registers) +#else + 2 // wrap the write at 4 bytes (so each transfer writes the same ctrl register) +#endif + ); + dma_channel_configure(PICO_SCANVIDEO_SCANLINE_DMA_CB_CHANNEL, + &chain_config, +#if PICO_SCANVIDEO_PLANE1_VARIABLE_FRAGMENT_DMA + &dma_channel_hw_addr(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL)->al3_transfer_count, // ch DMA config (target "ring" buffer size 8) - this is (transfer_count, read_addr trigger) +#else + &dma_channel_hw_addr(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL)->al3_read_addr_trig, // ch DMA config (target "ring" buffer size 4) - this is (read_addr trigger) +#endif + NULL, // set later +#if PICO_SCANVIDEO_PLANE1_VARIABLE_FRAGMENT_DMA + 2, // send 2 words to ctrl block of data chain per transfer +#else + 1, +#endif + false); +#endif +#if PICO_SCANVIDEO_PLANE_COUNT > 1 + channel_config = dma_channel_get_default_config(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL2); + channel_config_set_dreq(&channel_config, DREQ_PIO0_TX0 + PICO_SCANVIDEO_SCANLINE_SM2); // Select scanline dma dreq to be PICO_SCANVIDEO_SCANLINE_SM TX FIFO not full +#if PICO_SCANVIDEO_PLANE2_FRAGMENT_DMA + channel_config_set_chain_to(&channel_config, PICO_SCANVIDEO_SCANLINE_DMA_CB_CHANNEL2); + channel_config_set_irq_quiet(&channel_config, true); +#endif + dma_channel_configure(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL2, + &channel_config, + (void *)&video_pio->txf[PICO_SCANVIDEO_SCANLINE_SM2], + NULL, // set later + 0, // set later + false); +#if PICO_SCANVIDEO_PLANE2_FRAGMENT_DMA + dma_channel_config chain_config2 = dma_channel_get_default_config(PICO_SCANVIDEO_SCANLINE_DMA_CB_CHANNEL2); + channel_config_set_write_increment(&chain_config2, true); + // configure write ring + channel_config_set_ring(&chain_config2, true, +#if PICO_SCANVIDEO_PLANE2_VARIABLE_FRAGMENT_DMA + 3 // wrap the write at 8 bytes (so each transfer writes the same 2 word ctrl registers) +#else + 2 // wrap the write at 4 bytes (so each transfer writes the same ctrl register) +#endif + ); + dma_channel_configure(PICO_SCANVIDEO_SCANLINE_DMA_CB_CHANNEL2, + &chain_config2, +#if PICO_SCANVIDEO_PLANE2_VARIABLE_FRAGMENT_DMA + &dma_channel_hw_addr(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL2)->al3_transfer_count, // ch DMA config (target "ring" buffer size 8) - this is (transfer_count, read_addr trigger) +#else + &dma_channel_hw_addr(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL2)->al3_read_addr_trig, // ch DMA config (target "ring" buffer size 4) - this is (read_addr trigger) +#endif + NULL, // set later +#if PICO_SCANVIDEO_PLANE2_VARIABLE_FRAGMENT_DMA + 2, // send 2 words to ctrl block of data chain per transfer +#else + 1, +#endif + false); +#endif +#if PICO_SCANVIDEO_PLANE_COUNT > 2 +#if PICO_SCANVIDEO_PLANE3_FRAGMENT_DMA + static_assert(false); +#endif + channel_config = dma_channel_get_default_config(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL3); + channel_config_set_dreq(&channel_config, DREQ_PIO0_TX0 + PICO_SCANVIDEO_SCANLINE_SM3); // Select scanline dma dreq to be PICO_SCANVIDEO_SCANLINE_SM TX FIFO not full + dma_channel_configure(PICO_SCANVIDEO_SCANLINE_DMA_CHANNEL3, + &channel_config, + (void *)&video_pio->txf[PICO_SCANVIDEO_SCANLINE_SM3], + NULL, // set later + 0, // set later + false); +#endif +#endif + + // clear scanline irq + pio_sm_exec(video_pio, PICO_SCANVIDEO_TIMING_SM, video_htiming_states_program.instructions[CLEAR_IRQ_SCANLINE]); + + // todo there are probably some restrictions :-) + //assert(timing->v_front_porch == 1); + //assert(timing->v_pulse == 2); + //assert(timing->v_total == 500); + + timing_state.v_total = timing->v_total; + timing_state.v_active = timing->v_active; + timing_state.v_pulse_start = timing->v_active + timing->v_front_porch; + timing_state.v_pulse_end = timing_state.v_pulse_start + timing->v_pulse; + const uint32_t vsync_bit = 0x40000000; + timing_state.vsync_bits_pulse = timing->v_sync_polarity ? 0 : vsync_bit; + timing_state.vsync_bits_no_pulse = timing->v_sync_polarity ? vsync_bit : 0; + + // these are read bitwise backwards (lsb to msb) by PIO pogram + + // we can probably do smaller +#define HTIMING_MIN 8 + +#define TIMING_CYCLE 3u +#define timing_encode(state, length, pins) ((video_htiming_states_program.instructions[state] ^ side_set_xor)| (((uint32_t)(length) - TIMING_CYCLE) << 16u) | ((uint32_t)(pins) << 29u)) +#define A_CMD SET_IRQ_0 +#define A_CMD_VBLANK SET_IRQ_1 +#define B1_CMD CLEAR_IRQ_SCANLINE +#define B2_CMD CLEAR_IRQ_SCANLINE +#define C_CMD SET_IRQ_SCANLINE +#define C_CMD_VBLANK CLEAR_IRQ_SCANLINE + + int h_sync_bit = timing->h_sync_polarity ? 0 : 1; + timing_state.a = timing_encode(A_CMD, 4, h_sync_bit); + static_assert(HTIMING_MIN >= 4, ""); + timing_state.a_vblank = timing_encode(A_CMD_VBLANK, 4, h_sync_bit); + int h_back_porch = timing->h_total - timing->h_front_porch - timing->h_pulse - timing->h_active; + + valid_params_if(SCANVIDEO_DPI, timing->h_pulse - 4 >= HTIMING_MIN); + timing_state.b1 = timing_encode(B1_CMD, timing->h_pulse - 4, h_sync_bit); + + // todo decide on what these should be - we should really be asserting the timings + // + // todo note that the placement of the active scanline IRQ from the timing program is super important. + // if it gets moved too much (or indeed at all) it may be that there are problems with DMA/SM IRQ + // overlap, which may require the addition of a separate timing state for the prepare for scanline + // (separate from the needs of setting the hsync pulse) + valid_params_if(SCANVIDEO_DPI, timing->h_active >= HTIMING_MIN); + //assert(timing->h_front_porch >= HTIMING_MIN); + valid_params_if(SCANVIDEO_DPI, h_back_porch >= HTIMING_MIN); + valid_params_if(SCANVIDEO_DPI, (timing->h_total - h_back_porch - timing->h_pulse) >= HTIMING_MIN); + timing_state.b2 = timing_encode(B2_CMD, h_back_porch, !h_sync_bit); + timing_state.c = timing_encode(C_CMD, timing->h_total - h_back_porch - timing->h_pulse, 4 | !h_sync_bit); + timing_state.c_vblank = timing_encode(C_CMD_VBLANK, timing->h_total - h_back_porch - timing->h_pulse, !h_sync_bit); + + // this is two scanlines in vblank + setup_dma_states_vblank(); + timing_state.vsync_bits = timing_state.vsync_bits_no_pulse; + scanvideo_set_scanline_repeat_fn(NULL); + return true; +} + +bool video_24mhz_composable_adapt_for_mode(const scanvideo_pio_program_t *program, const scanvideo_mode_t *mode, + scanvideo_scanline_buffer_t *missing_scanline_buffer, + uint16_t *modifiable_instructions) { + int delay0 = 2 * mode->xscale - 2; + int delay1 = delay0 + 1; + valid_params_if(SCANVIDEO_DPI, delay0 <= 31); + valid_params_if(SCANVIDEO_DPI, delay1 <= 31); + + // todo macro-ify this + modifiable_instructions[video_24mhz_composable_program_extern(delay_a_1)] |= (unsigned) delay1 << 8u; + modifiable_instructions[video_24mhz_composable_program_extern(delay_b_1)] |= (unsigned) delay1 << 8u; + modifiable_instructions[video_24mhz_composable_program_extern(delay_c_0)] |= (unsigned) delay0 << 8u; + modifiable_instructions[video_24mhz_composable_program_extern(delay_d_0)] |= (unsigned) delay0 << 8u; + modifiable_instructions[video_24mhz_composable_program_extern(delay_e_0)] |= (unsigned) delay0 << 8u; + modifiable_instructions[video_24mhz_composable_program_extern(delay_f_1)] |= (unsigned) delay1 << 8u; +#if !PICO_SCANVIDEO_USE_RAW1P_2CYCLE + modifiable_instructions[video_24mhz_composable_program_extern(delay_g_0)] |= (unsigned) delay0 << 8u; +#else + int delay_half = mode->xscale - 2; + modifiable_instructions[video_24mhz_composable_program_extern(delay_g_0)] |= (unsigned)delay_half << 8u; +#endif + modifiable_instructions[video_24mhz_composable_program_extern(delay_h_0)] |= (unsigned) delay0 << 8u; + +#if !PICO_SCANVIDEO_PLANE1_FRAGMENT_DMA + missing_scanline_buffer->data = _missing_scanline_data; + missing_scanline_buffer->data_used = missing_scanline_buffer->data_max = sizeof(_missing_scanline_data) / 4; +#else +#if PICO_SCANVIDEO_PLANE1_VARIABLE_FRAGMENT_DMA + missing_scanline_buffer->data = variable_fragment_missing_scanline_data_chain; + missing_scanline_buffer->data_used = missing_scanline_buffer->data_max = sizeof(variable_fragment_missing_scanline_data_chain) / 4; +#else + missing_scanline_buffer->data = fixed_fragment_missing_scanline_data_chain; + missing_scanline_buffer->data_used = missing_scanline_buffer->data_max = sizeof(fixed_fragment_missing_scanline_data_chain) / 4; +#endif +#endif +#if PICO_SCANVIDEO_PLANE_COUNT > 1 +#if !PICO_SCANVIDEO_PLANE2_FRAGMENT_DMA + missing_scanline_buffer->data2 = missing_scanline_data_overlay; + missing_scanline_buffer->data2_used = missing_scanline_buffer->data2_max = sizeof(missing_scanline_data_overlay) / 4; +#else +#if PICO_SCANVIDEO_PLANE2_VARIABLE_FRAGMENT_DMA + missing_scanline_buffer->data2 = variable_fragment_missing_scanline_data_chain; + missing_scanline_buffer->data2_used = missing_scanline_buffer->data2_max = sizeof(variable_fragment_missing_scanline_data_chain) / 4; +#else + missing_scanline_buffer->data2 = fixed_fragment_missing_scanline_data_chain; + missing_scanline_buffer->data2_used = missing_scanline_buffer->data2_max = sizeof(fixed_fragment_missing_scanline_data_chain) / 4; +#endif +#endif +#if PICO_SCANVIDEO_PLANE_COUNT > 2 + missing_scanline_buffer->data3 = missing_scanline_data_overlay; + missing_scanline_buffer->data3_used = missing_scanline_buffer->data3_max = sizeof(missing_scanline_data_overlay) / 4; +#endif +#endif + return true; +} + +bool video_default_adapt_for_mode(const scanvideo_pio_program_t *program, const scanvideo_mode_t *mode, + uint16_t *modifiable_instructions) { + return true; +} + +void scanvideo_default_configure_pio(pio_hw_t *pio, uint sm, uint offset, pio_sm_config *config, bool overlay) { + pio_sm_set_consecutive_pindirs(pio, sm, PICO_SCANVIDEO_COLOR_PIN_BASE, PICO_SCANVIDEO_COLOR_PIN_COUNT, true); + sm_config_set_out_pins(config, PICO_SCANVIDEO_COLOR_PIN_BASE, PICO_SCANVIDEO_COLOR_PIN_COUNT); + sm_config_set_out_shift(config, true, true, 32); // autopull + sm_config_set_fifo_join(config, PIO_FIFO_JOIN_TX); + if (overlay) { + sm_config_set_out_special(config, 1, 1, PICO_SCANVIDEO_ALPHA_PIN); + } else { + sm_config_set_out_special(config, 1, 0, 0); + } +} + +pio_sm_config video_24mhz_composable_configure_pio(pio_hw_t *pio, uint sm, uint offset) { + pio_sm_config config = video_24mhz_composable_default_program_get_default_config(offset); + scanvideo_default_configure_pio(pio, sm, offset, &config, sm != PICO_SCANVIDEO_SCANLINE_SM); + return config; +} + +void scanvideo_timing_enable(bool enable) { + // todo we need to protect our state here... this can't be frame synced obviously (at least turning on) + // todo but we should make sure we clear out state when we turn it off, and probably reset scanline counter when we turn it on + if (enable != video_timing_enabled) { + // todo should we disable these too? if not move to scanvideo_setup + video_pio->inte0 = PIO_IRQ0_INTE_SM0_BITS | PIO_IRQ0_INTE_SM1_BITS; + video_pio->inte1 = (1u << (PICO_SCANVIDEO_TIMING_SM + PIO_IRQ1_INTE_SM0_TXNFULL_LSB)); + irq_set_mask_enabled((1u << PIO0_IRQ_0) + | (1u << PIO0_IRQ_1) + #if !PICO_SCANVIDEO_NO_DMA_TRACKING + | (1u << DMA_IRQ_0) +#endif + , enable); + uint32_t sm_mask = (1u << PICO_SCANVIDEO_SCANLINE_SM) | 1u << PICO_SCANVIDEO_TIMING_SM; +#if PICO_SCANVIDEO_PLANE_COUNT > 1 + sm_mask |= 1u << PICO_SCANVIDEO_SCANLINE_SM2; +#if PICO_SCANVIDEO_PLANE_COUNT > 2 + sm_mask |= 1u << PICO_SCANVIDEO_SCANLINE_SM3; +#endif +#endif + pio_claim_sm_mask(video_pio, sm_mask); + pio_set_sm_mask_enabled(video_pio, sm_mask, false); +#if PICO_SCANVIDEO_ENABLE_VIDEO_CLOCK_DOWN + pio_clkdiv_restart_sm_mask(video_pio, sm_mask); +#endif + + if (enable) { + uint jmp = video_program_load_offset + pio_encode_jmp(video_mode.pio_program->entry_point); + pio_sm_exec(video_pio, PICO_SCANVIDEO_SCANLINE_SM, jmp); +#if PICO_SCANVIDEO_PLANE_COUNT > 1 + pio_sm_exec(video_pio, PICO_SCANVIDEO_SCANLINE_SM2, jmp); +#if PICO_SCANVIDEO_PLANE_COUNT > 2 + pio_sm_exec(video_pio, PICO_SCANVIDEO_SCANLINE_SM3, jmp); +#endif +#endif + // todo we should offset the addresses for the SM + pio_sm_exec(video_pio, PICO_SCANVIDEO_TIMING_SM, + pio_encode_jmp(video_htiming_load_offset + video_htiming_offset_entry_point)); + pio_set_sm_mask_enabled(video_pio, sm_mask, true); + } + video_timing_enabled = enable; + } +} + +uint32_t scanvideo_wait_for_scanline_complete(uint32_t scanline_id) { + // next_scanline_id is potentially the scanline_id in progress, so we need next_scanline_id to + // be more than the scanline_id after the passed one + scanline_id = scanline_id_after(scanline_id); + uint32_t frame = scanvideo_frame_number(scanline_id); + uint32_t next_scanline_id; + // scanline_id > scanvideo_get_next_scanline_id() but with wrapping support + while (0 < (scanline_id - (next_scanline_id = scanvideo_get_next_scanline_id()))) { + // we may end up waiting for the next scanline while in vblank; the one we are waiting for is clearly done + if (scanvideo_in_vblank() && (scanvideo_frame_number(next_scanline_id) - frame) >= 1) + break; + assert(video_timing_enabled); // todo should we just return + __wfe(); + } + return next_scanline_id; +} + +void scanvideo_wait_for_vblank() { + sem_acquire_blocking(&vblank_begin); +} + +#ifndef NDEBUG +// todo this is for composable only atm +void validate_scanline(const uint32_t *dma_data, uint dma_data_size, + uint max_pixels, uint expected_width) { + const uint16_t *it = (uint16_t *)dma_data; + assert(!(3u&(uintptr_t)dma_data)); + const uint16_t *const dma_data_end = (uint16_t *)(dma_data + dma_data_size); + uint16_t *pixel_buffer = 0; + const uint16_t *const pixels_end = (uint16_t *)(pixel_buffer + max_pixels); + uint16_t *pixels = pixel_buffer; + bool ok = false; + bool done = false; + bool had_black = false; + do { + uint16_t cmd = *it++; + switch (cmd) { + case video_24mhz_composable_program_extern(end_of_scanline_skip_ALIGN): + it++; + // fall thru + case video_24mhz_composable_program_extern(end_of_scanline_ALIGN): + done = ok = true; + break; + case video_24mhz_composable_program_extern(color_run): + { + it++; + uint16_t len = *it++; + for(int i=0; i | +public delay_c_0: + out pins, bpp [extra0] + out x, bpp +pixel_loop: +public delay_d_0: + out pins, bpp [extra0] + jmp x-- pixel_loop +.wrap_target +public raw_1p: ; | jmp raw_1p | color | +public delay_e_0: + out pins, bpp [extra0] + out pc, bpp + +public raw_2p: ; | jmp raw_2p | color | color | +public delay_f_1: + out pins, bpp [extra1] +.wrap + +public raw_1p_skip_ALIGN: ; | jmp raw_1p_skip_ALIGN | color | ignored || + out pins, 32 ; requires correct out mask +public nop_extra0: +public delay_g_0: + out pc, bpp [extra0] ; note moved extra0 from above line, so we can use this instruction for + +; Variant that replaces raw_1p_skip_work_ALIGN with raw1p_2cycle +.program video_24mhz_composable_raw1p_2cycle +.origin 0 ; must load at zero (offsets are hardcoded in instruction stream) +.define extra0 0 ; set later by code based on xscale +.define extra1 0 ; set later by code (1 more than extra0) + +; note bpp must be a factor of 32 +.define bpp 16 +;.define bpp 8 + +public end_of_scanline_skip_ALIGN: ; || jmp end_of_scanline_skip_ALIGN | ignored || + ; was 16 but we just discard the reset of the OSR + ; so as to also support 8 bit grayscale + out null, 32; + +public end_of_scanline_ALIGN: ; | jmp end_of_scanline_ALIGN || + +public entry_point: + wait irq, 4 ; todo perhaps change this to out exec, 16... so that we can do multiple things (including setting black pixel) +public nop_raw: + out pc, bpp + +public color_run: ; | jmp color_run | color | count-3 | +public delay_h_0: + out pins, bpp + out x, bpp +color_loop: +public delay_a_1: + jmp x-- color_loop [extra1] +public nop_extra1: +public delay_b_1: + out pc, bpp [extra1] + +public raw_run: ; | jmp raw_run | color | n | | +public delay_c_0: + out pins, bpp [extra0] + out x, bpp +pixel_loop: +public delay_d_0: + out pins, bpp [extra0] + jmp x-- pixel_loop +.wrap_target +public raw_1p: ; | jmp raw_1p | color | +public delay_e_0: + out pins, bpp [extra0] + out pc, bpp + +public raw_2p: ; | jmp raw_2p | color | color | +public delay_f_1: + out pins, bpp [extra1] +.wrap +public raw_1p_2cycle: +public delay_g_0: + out pins, bpp + out pc, bpp diff --git a/MCUME_pico/vga_t4/scanvideo.pio.h b/MCUME_pico/vga_t4/scanvideo.pio.h new file mode 100644 index 0000000..bad389a --- /dev/null +++ b/MCUME_pico/vga_t4/scanvideo.pio.h @@ -0,0 +1,131 @@ +// -------------------------------------------------- // +// This file is autogenerated by pioasm; do not edit! // +// -------------------------------------------------- // + +#if !PICO_NO_HARDWARE +#include "hardware/pio.h" +#endif + +// ------------------------------ // +// video_24mhz_composable_default // +// ------------------------------ // + +#define video_24mhz_composable_default_wrap_target 11 +#define video_24mhz_composable_default_wrap 13 + +#define video_24mhz_composable_default_offset_end_of_scanline_skip_ALIGN 0u +#define video_24mhz_composable_default_offset_end_of_scanline_ALIGN 1u +#define video_24mhz_composable_default_offset_entry_point 1u +#define video_24mhz_composable_default_offset_nop_raw 2u +#define video_24mhz_composable_default_offset_delay_h_0 3u +#define video_24mhz_composable_default_offset_color_run 3u +#define video_24mhz_composable_default_offset_delay_a_1 5u +#define video_24mhz_composable_default_offset_nop_extra1 6u +#define video_24mhz_composable_default_offset_delay_b_1 6u +#define video_24mhz_composable_default_offset_raw_run 7u +#define video_24mhz_composable_default_offset_delay_c_0 7u +#define video_24mhz_composable_default_offset_delay_d_0 9u +#define video_24mhz_composable_default_offset_raw_1p 11u +#define video_24mhz_composable_default_offset_delay_e_0 11u +#define video_24mhz_composable_default_offset_raw_2p 13u +#define video_24mhz_composable_default_offset_delay_f_1 13u +#define video_24mhz_composable_default_offset_raw_1p_skip_ALIGN 14u +#define video_24mhz_composable_default_offset_nop_extra0 15u +#define video_24mhz_composable_default_offset_delay_g_0 15u + +static const uint16_t video_24mhz_composable_default_program_instructions[] = { + 0x6060, // 0: out null, 32 + 0x20c4, // 1: wait 1 irq, 4 + 0x60b0, // 2: out pc, 16 + 0x6010, // 3: out pins, 16 + 0x6030, // 4: out x, 16 + 0x0045, // 5: jmp x--, 5 + 0x60b0, // 6: out pc, 16 + 0x6010, // 7: out pins, 16 + 0x6030, // 8: out x, 16 + 0x6010, // 9: out pins, 16 + 0x0049, // 10: jmp x--, 9 + // .wrap_target + 0x6010, // 11: out pins, 16 + 0x60b0, // 12: out pc, 16 + 0x6010, // 13: out pins, 16 + // .wrap + 0x6000, // 14: out pins, 32 + 0x60b0, // 15: out pc, 16 +}; + +#if !PICO_NO_HARDWARE +static const struct pio_program video_24mhz_composable_default_program = { + .instructions = video_24mhz_composable_default_program_instructions, + .length = 16, + .origin = 0, +}; + +static inline pio_sm_config video_24mhz_composable_default_program_get_default_config(uint offset) { + pio_sm_config c = pio_get_default_sm_config(); + sm_config_set_wrap(&c, offset + video_24mhz_composable_default_wrap_target, offset + video_24mhz_composable_default_wrap); + return c; +} +#endif + +// ----------------------------------- // +// video_24mhz_composable_raw1p_2cycle // +// ----------------------------------- // + +#define video_24mhz_composable_raw1p_2cycle_wrap_target 11 +#define video_24mhz_composable_raw1p_2cycle_wrap 13 + +#define video_24mhz_composable_raw1p_2cycle_offset_end_of_scanline_skip_ALIGN 0u +#define video_24mhz_composable_raw1p_2cycle_offset_end_of_scanline_ALIGN 1u +#define video_24mhz_composable_raw1p_2cycle_offset_entry_point 1u +#define video_24mhz_composable_raw1p_2cycle_offset_nop_raw 2u +#define video_24mhz_composable_raw1p_2cycle_offset_color_run 3u +#define video_24mhz_composable_raw1p_2cycle_offset_delay_h_0 3u +#define video_24mhz_composable_raw1p_2cycle_offset_delay_a_1 5u +#define video_24mhz_composable_raw1p_2cycle_offset_nop_extra1 6u +#define video_24mhz_composable_raw1p_2cycle_offset_delay_b_1 6u +#define video_24mhz_composable_raw1p_2cycle_offset_raw_run 7u +#define video_24mhz_composable_raw1p_2cycle_offset_delay_c_0 7u +#define video_24mhz_composable_raw1p_2cycle_offset_delay_d_0 9u +#define video_24mhz_composable_raw1p_2cycle_offset_raw_1p 11u +#define video_24mhz_composable_raw1p_2cycle_offset_delay_e_0 11u +#define video_24mhz_composable_raw1p_2cycle_offset_raw_2p 13u +#define video_24mhz_composable_raw1p_2cycle_offset_delay_f_1 13u +#define video_24mhz_composable_raw1p_2cycle_offset_raw_1p_2cycle 14u +#define video_24mhz_composable_raw1p_2cycle_offset_delay_g_0 14u + +static const uint16_t video_24mhz_composable_raw1p_2cycle_program_instructions[] = { + 0x6060, // 0: out null, 32 + 0x20c4, // 1: wait 1 irq, 4 + 0x60b0, // 2: out pc, 16 + 0x6010, // 3: out pins, 16 + 0x6030, // 4: out x, 16 + 0x0045, // 5: jmp x--, 5 + 0x60b0, // 6: out pc, 16 + 0x6010, // 7: out pins, 16 + 0x6030, // 8: out x, 16 + 0x6010, // 9: out pins, 16 + 0x0049, // 10: jmp x--, 9 + // .wrap_target + 0x6010, // 11: out pins, 16 + 0x60b0, // 12: out pc, 16 + 0x6010, // 13: out pins, 16 + // .wrap + 0x6010, // 14: out pins, 16 + 0x60b0, // 15: out pc, 16 +}; + +#if !PICO_NO_HARDWARE +static const struct pio_program video_24mhz_composable_raw1p_2cycle_program = { + .instructions = video_24mhz_composable_raw1p_2cycle_program_instructions, + .length = 16, + .origin = 0, +}; + +static inline pio_sm_config video_24mhz_composable_raw1p_2cycle_program_get_default_config(uint offset) { + pio_sm_config c = pio_get_default_sm_config(); + sm_config_set_wrap(&c, offset + video_24mhz_composable_raw1p_2cycle_wrap_target, offset + video_24mhz_composable_raw1p_2cycle_wrap); + return c; +} +#endif + diff --git a/MCUME_pico/vga_t4/scanvideo_base.h b/MCUME_pico/vga_t4/scanvideo_base.h new file mode 100644 index 0000000..7f9ab06 --- /dev/null +++ b/MCUME_pico/vga_t4/scanvideo_base.h @@ -0,0 +1,356 @@ +/* + * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef SCANVIDEO_scanvideo_H_ +#define SCANVIDEO_scanvideo_H_ + +#include "pico/types.h" + +#if !PICO_NO_HARDWARE + +#include "hardware/pio.h" + +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** \file scanvideo_base.h + * \defgroup pico_scanvideo pico_scanvideo + * + * Common Scan-out Video API + */ +// == CONFIG ============ +#ifndef PICO_SCANVIDEO_PLANE_COUNT +#define PICO_SCANVIDEO_PLANE_COUNT 1 +#endif + +#ifndef PICO_SCANVIDEO_SCANLINE_BUFFER_COUNT +#define PICO_SCANVIDEO_SCANLINE_BUFFER_COUNT 8 +#endif + +#ifndef PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS +#define PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS 0 +#endif + +#ifndef PICO_SCANVIDEO_PLANE1_VARIABLE_FRAGMENT_DMA +#define PICO_SCANVIDEO_PLANE1_VARIABLE_FRAGMENT_DMA 0 +#endif + +#ifndef PICO_SCANVIDEO_PLANE1_FIXED_FRAGMENT_DMA +#define PICO_SCANVIDEO_PLANE1_FIXED_FRAGMENT_DMA 0 +#endif + +#if PICO_SCANVIDEO_PLANE1_VARIABLE_FRAGMENT_DMA || PICO_SCANVIDEO_PLANE1_FIXED_FRAGMENT_DMA +#define PICO_SCANVIDEO_PLANE1_FRAGMENT_DMA 1 +#endif + +#ifndef PICO_SCANVIDEO_PLANE2_VARIABLE_FRAGMENT_DMA +#define PICO_SCANVIDEO_PLANE2_VARIABLE_FRAGMENT_DMA 0 +#endif + +#ifndef PICO_SCANVIDEO_PLANE2_FIXED_FRAGMENT_DMA +#define PICO_SCANVIDEO_PLANE2_FIXED_FRAGMENT_DMA 0 +#endif + +#if PICO_SCANVIDEO_PLANE2_VARIABLE_FRAGMENT_DMA || PICO_SCANVIDEO_PLANE2_FIXED_FRAGMENT_DMA +#define PICO_SCANVIDEO_PLANE2_FRAGMENT_DMA 1 +#endif + +#ifndef PICO_SCANVIDEO_PLANE3_VARIABLE_FRAGMENT_DMA +#define PICO_SCANVIDEO_PLANE3_VARIABLE_FRAGMENT_DMA 0 +#endif + +#ifndef PICO_SCANVIDEO_PLANE3_FIXED_FRAGMENT_DMA +#define PICO_SCANVIDEO_PLANE3_FIXED_FRAGMENT_DMA 0 +#endif + +#if PICO_SCANVIDEO_PLANE3_VARIABLE_FRAGMENT_DMA || PICO_SCANVIDEO_PLANE3_FIXED_FRAGMENT_DMA +#define PICO_SCANVIDEO_PLANE3_FRAGMENT_DMA 1 +#endif + +#ifndef PICO_SCANVIDEO_ENABLE_CLOCK_PIN +#define PICO_SCANVIDEO_ENABLE_CLOCK_PIN 0 +#endif + +#ifndef PICO_SCANVIDEO_ENABLE_DEN_PIN +#define PICO_SCANVIDEO_ENABLE_DEN_PIN 0 +#endif + +#ifndef PICO_SCANVIDEO_COLOR_PIN_BASE +#define PICO_SCANVIDEO_COLOR_PIN_BASE 2 +#endif + +#ifndef PICO_SCANVIDEO_COLOR_PIN_COUNT +#define PICO_SCANVIDEO_COLOR_PIN_COUNT 8 +#endif + +#ifndef PICO_SCANVIDEO_SYNC_PIN_BASE +#define PICO_SCANVIDEO_SYNC_PIN_BASE (PICO_SCANVIDEO_COLOR_PIN_BASE + PICO_SCANVIDEO_COLOR_PIN_COUNT) +#endif + +#ifndef PICO_SCANVIDEO_ENABLE_VIDEO_CLOCK_DOWN +#define PICO_SCANVIDEO_ENABLE_VIDEO_CLOCK_DOWN 0 +#endif + +// todo make multi plane play nicely with mode swapping; +// today we have hard coded blank/empty lines + +//#define PICO_SCANVIDEO_PLANE1_VARIABLE_FRAGMENT_DMA 1 +//#define PICO_SCANVIDEO_PLANE2_VARIABLE_FRAGMENT_DMA 1 + +#ifndef PICO_SCANVIDEO_MAX_SCANLINE_BUFFER_WORDS +#define PICO_SCANVIDEO_MAX_SCANLINE_BUFFER_WORDS 180 +#endif +#ifndef PICO_SCANVIDEO_MAX_SCANLINE_BUFFER2_WORDS +#define PICO_SCANVIDEO_MAX_SCANLINE_BUFFER2_WORDS PICO_SCANVIDEO_MAX_SCANLINE_BUFFER_WORDS +#endif +#ifndef PICO_SCANVIDEO_MAX_SCANLINE_BUFFER3_WORDS +#define PICO_SCANVIDEO_MAX_SCANLINE_BUFFER3_WORDS PICO_SCANVIDEO_MAX_SCANLINE_BUFFER_WORDS +#endif + +//extern struct semaphore vmode_updated; + + +// ====================== + +#define BPP 16 + +// most likely 24000000 +extern const uint32_t video_clock_freq; + +// todo pragma pack? +typedef struct scanvideo_timing { + uint32_t clock_freq; + + uint16_t h_active; + uint16_t v_active; + + uint16_t h_front_porch; + uint16_t h_pulse; + uint16_t h_total; + uint8_t h_sync_polarity; + + uint16_t v_front_porch; + uint16_t v_pulse; + uint16_t v_total; + uint8_t v_sync_polarity; + + uint8_t enable_clock; + uint8_t clock_polarity; + + uint8_t enable_den; +} scanvideo_timing_t; + +typedef struct scanvideo_pio_program scanvideo_pio_program_t; + +// todo we need to handle blank data correctly (perhaps DMA should just not start for that scanline, +// though obviously this is slightly more complicated with multiple playfields, or perhaps worse with +// just one +typedef struct scanvideo_mode { + const scanvideo_timing_t *default_timing; + const scanvideo_pio_program_t *pio_program; + + uint16_t width; + uint16_t height; + uint8_t xscale; // 1 == normal, 2 == double wide etc. up to what pio timing allows (not sure I have an assert based on delays) + uint16_t yscale; // same for y scale (except any yscale is possible) + // if > 1 then yscale is divided by this to provide the effective yscale; + // note that yscale must be > yscale_denominator; i.e. only stretching is supported + uint16_t yscale_denominator; +} scanvideo_mode_t; + +extern bool scanvideo_setup(const scanvideo_mode_t *mode); +extern bool scanvideo_setup_with_timing(const scanvideo_mode_t *mode, const scanvideo_timing_t *timing); +extern void scanvideo_timing_enable(bool enable); +// these take effect after the next vsync +extern void scanvideo_display_enable(bool enable); +// doesn't exist yet! +// extern void video_set_display_mode(const struct scanvideo_mode *mode); + +// --- scanline management --- + +typedef struct scanvideo_scanline_buffer { + uint32_t scanline_id; + uint32_t *data; + uint16_t data_used; + uint16_t data_max; +#if PICO_SCANVIDEO_PLANE1_FIXED_FRAGMENT_DMA + uint16_t fragment_words; +#endif +#if PICO_SCANVIDEO_PLANE_COUNT > 1 + uint32_t *data2; + uint16_t data2_used; + uint16_t data2_max; +#if PICO_SCANVIDEO_PLANE_COUNT > 2 + uint32_t *data3; + uint16_t data3_used; + uint16_t data3_max; +#endif +#endif + void *user_data; +#if PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS + struct scanvideo_scanline_buffer *link; + uint8_t link_after; +#endif + uint8_t status; +} scanvideo_scanline_buffer_t; + +enum { + SCANLINE_OK = 1, + SCANLINE_ERROR, + SCANLINE_SKIPPED +}; + +// note frame numbers wrap +static inline uint16_t scanvideo_frame_number(uint32_t scanline_id) { + return (uint16_t) (scanline_id >> 16u); +} + +static inline uint16_t scanvideo_scanline_number(uint32_t scanline_id) { + return (uint16_t) scanline_id; +} + +/** + * @return the current vga mode (if there is one) + */ +extern scanvideo_mode_t scanvideo_get_mode(); + +/** + * @return the next scanline_id to be displayed (may be from the next frame) + */ +extern uint32_t scanvideo_get_next_scanline_id(); + +/** + * @return true if in the vblank interval + */ +extern bool scanvideo_in_vblank(); +/** + * @return true if in the hblank interval (or more accurately scanline data is not currently being sent to the PIO, which roughly corresponds, but is not exact). Note also that in + * yscale-d modes, there are height * yscale hblank intervals per frame. + */ +extern bool scanvideo_in_hblank(); + +extern void scanvideo_wait_for_vblank(); + +extern uint32_t scanvideo_wait_for_scanline_complete(uint32_t scanline_id); +/** + * Acquire a scanline that needs generating. The scanline_id field indicates which scanline is required. + * + * This method may be called concurrently + * + * @param block true to block if the vga system is not ready to generate a new scanline + * @return the scanline_buffer or NULL if block is false, and the vga system is not ready + */ +scanvideo_scanline_buffer_t *scanvideo_begin_scanline_generation(bool block); +scanvideo_scanline_buffer_t *scanvideo_begin_scanline_generation2(scanvideo_scanline_buffer_t **second, bool block); +#if PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS +scanvideo_scanline_buffer_t *scanvideo_begin_scanline_generation_linked(uint n, bool block); +#endif + +/** + * Return a scanline that has been generated / or at least the client is done with. + * + * The status field indicates whether the scanline was actually generated OK + * + * This method may be called concurrently (for different buffers) + * + * @param scanline_buffer \todo + */ +void scanvideo_end_scanline_generation(scanvideo_scanline_buffer_t *scanline_buffer); + +typedef uint (*scanvideo_scanline_repeat_count_fn)(uint32_t scanline_id); +void scanvideo_set_scanline_repeat_fn(scanvideo_scanline_repeat_count_fn fn); + +extern const scanvideo_timing_t vga_timing_640x480_60_default; +extern const scanvideo_timing_t vga_timing_wide_480_50; +extern const scanvideo_timing_t vga_timing_648x480_60_alt1; + +extern const scanvideo_mode_t vga_mode_160x120_60; // 3d monster maze anyone :-) +extern const scanvideo_mode_t vga_mode_213x160_60; +extern const scanvideo_mode_t vga_mode_320x240_60; +extern const scanvideo_mode_t vga_mode_640x480_60; +extern const scanvideo_mode_t vga_mode_800x600_54; +extern const scanvideo_mode_t vga_mode_800x600_60; +extern const scanvideo_mode_t vga_mode_1024x768_63; +extern const scanvideo_mode_t vga_mode_1280x1024_40; +extern const scanvideo_mode_t vga_mode_720p_60; +extern const scanvideo_mode_t vga_mode_1080p_60; + +extern const scanvideo_mode_t vga_mode_tft_800x480_50; +extern const scanvideo_mode_t vga_mode_tft_400x240_50; + +#ifndef NDEBUG +// todo this is only for vga composable 24... should exist behind mode impl +extern void validate_scanline(const uint32_t *dma_data, uint dma_data_size, uint max_pixels, uint expected_width); +#endif + +// mode implementation + +struct scanvideo_pio_program { +#if !PICO_NO_HARDWARE + const pio_program_t *program; + const uint8_t entry_point; + // modifiable_instructions is of size program->length + bool (*adapt_for_mode)(const scanvideo_pio_program_t *program, const scanvideo_mode_t *mode, + scanvideo_scanline_buffer_t *missing_scanline_buffer, uint16_t *modifiable_instructions); + pio_sm_config (*configure_pio)(pio_hw_t *pio, uint sm, uint offset); +#else + const char *id; +#endif +}; + +extern const scanvideo_pio_program_t video_24mhz_composable; + +#if !PICO_NO_HARDWARE +extern void scanvideo_default_configure_pio(pio_hw_t *pio, uint sm, uint offset, pio_sm_config *config, bool overlay); +#endif + +#ifndef PICO_SPINLOCK_ID_VIDEO_SCANLINE_LOCK +#define PICO_SPINLOCK_ID_VIDEO_SCANLINE_LOCK 2 +#endif + +#ifndef PICO_SPINLOCK_ID_VIDEO_FREE_LIST_LOCK +#define PICO_SPINLOCK_ID_VIDEO_FREE_LIST_LOCK 3 +#endif + +#ifndef PICO_SPINLOCK_ID_VIDEO_DMA_LOCK +#define PICO_SPINLOCK_ID_VIDEO_DMA_LOCK 4 +#endif + +#ifndef PICO_SPINLOCK_ID_VIDEO_IN_USE_LOCK +#define PICO_SPINLOCK_ID_VIDEO_IN_USE_LOCK 5 +#endif + +// note this is not necessarily an absolute gpio pin mask, it is still shifted by PICO_SCANVIDEO_COLOR_PIN_BASE +#define PICO_SCANVIDEO_ALPHA_MASK (1u << PICO_SCANVIDEO_ALPHA_PIN) + +#ifndef PICO_SCANVIDEO_PIXEL_FROM_RGB8 +#define PICO_SCANVIDEO_PIXEL_FROM_RGB8(r, g, b) ((((b)>>3u)<>3u)<>3u)<>PICO_SCANVIDEO_PIXEL_RSHIFT)&0x1f) +#endif + +#ifndef PICO_SCANVIDEO_G5_FROM_PIXEL +#define PICO_SCANVIDEO_G5_FROM_PIXEL(p) (((p)>>PICO_SCANVIDEO_PIXEL_GSHIFT)&0x1f) +#endif + +#ifndef PICO_SCANVIDEO_B5_FROM_PIXEL +#define PICO_SCANVIDEO_B5_FROM_PIXEL(p) (((p)>>PICO_SCANVIDEO_PIXEL_BSHIFT)&0x1f) +#endif + +#ifdef __cplusplus +} +#endif + +#endif //_VIDEO_H diff --git a/MCUME_pico/vga_t4/timing.pio b/MCUME_pico/vga_t4/timing.pio new file mode 100644 index 0000000..aea152c --- /dev/null +++ b/MCUME_pico/vga_t4/timing.pio @@ -0,0 +1,34 @@ +; +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd. +; +; SPDX-License-Identifier: BSD-3-Clause +; + +.program video_htiming +.side_set 1 ; used for clock +public entry_point: + ; todo we can do this with one off setup via pio_exec + pull block side 0 +.wrap_target +new_state: + out exec, 16 side 1 ; this does any per state inline work (or it can be a JMP to entry_point to sleep.. + ; note the EXECed instruction should have a side set 0 + out x, 13 side 1 + out pins, 3 side 0 ; we want an OUT EXEC above which sets an IRQ to start scanline output + ; to cause this out and the pixel out in the same cycle (this would be positive clk edge latch) +loop: + nop side 1 + jmp x-- loop side 0 +.wrap + +; these are the values used in the out exec in video_htiming +.program video_htiming_states +.side_set 1 + ; state 0 = set irq 0 + irq 0 side 0 + ; state 1 = set irq 1 + irq 1 side 0 + ; state 2 = set irq 4 + irq 4 side 0 + ; state 3 = clear irq 4 + irq clear 4 side 0 diff --git a/MCUME_pico/vga_t4/timing.pio.h b/MCUME_pico/vga_t4/timing.pio.h new file mode 100644 index 0000000..864f8a6 --- /dev/null +++ b/MCUME_pico/vga_t4/timing.pio.h @@ -0,0 +1,74 @@ +// -------------------------------------------------- // +// This file is autogenerated by pioasm; do not edit! // +// -------------------------------------------------- // + +#if !PICO_NO_HARDWARE +#include "hardware/pio.h" +#endif + +// ------------- // +// video_htiming // +// ------------- // + +#define video_htiming_wrap_target 1 +#define video_htiming_wrap 5 + +#define video_htiming_offset_entry_point 0u + +static const uint16_t video_htiming_program_instructions[] = { + 0x80a0, // 0: pull block side 0 + // .wrap_target + 0x70f0, // 1: out exec, 16 side 1 + 0x702d, // 2: out x, 13 side 1 + 0x6003, // 3: out pins, 3 side 0 + 0xb042, // 4: nop side 1 + 0x0044, // 5: jmp x--, 4 side 0 + // .wrap +}; + +#if !PICO_NO_HARDWARE +static const struct pio_program video_htiming_program = { + .instructions = video_htiming_program_instructions, + .length = 6, + .origin = -1, +}; + +static inline pio_sm_config video_htiming_program_get_default_config(uint offset) { + pio_sm_config c = pio_get_default_sm_config(); + sm_config_set_wrap(&c, offset + video_htiming_wrap_target, offset + video_htiming_wrap); + sm_config_set_sideset(&c, 1, false, false); + return c; +} +#endif + +// -------------------- // +// video_htiming_states // +// -------------------- // + +#define video_htiming_states_wrap_target 0 +#define video_htiming_states_wrap 3 + +static const uint16_t video_htiming_states_program_instructions[] = { + // .wrap_target + 0xc000, // 0: irq nowait 0 side 0 + 0xc001, // 1: irq nowait 1 side 0 + 0xc004, // 2: irq nowait 4 side 0 + 0xc044, // 3: irq clear 4 side 0 + // .wrap +}; + +#if !PICO_NO_HARDWARE +static const struct pio_program video_htiming_states_program = { + .instructions = video_htiming_states_program_instructions, + .length = 4, + .origin = -1, +}; + +static inline pio_sm_config video_htiming_states_program_get_default_config(uint offset) { + pio_sm_config c = pio_get_default_sm_config(); + sm_config_set_wrap(&c, offset + video_htiming_states_wrap_target, offset + video_htiming_states_wrap); + sm_config_set_sideset(&c, 1, false, false); + return c; +} +#endif + diff --git a/MCUME_pico/vga_t4/vga_modes.c b/MCUME_pico/vga_t4/vga_modes.c new file mode 100644 index 0000000..eec457a --- /dev/null +++ b/MCUME_pico/vga_t4/vga_modes.c @@ -0,0 +1,553 @@ +/* + * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "scanvideo.h" + +// todo support for inverted-y (probably belongs in the scanline generators, as would inverted x) + +extern const scanvideo_pio_program_t video_24mhz_composable; + +#ifdef PICO_SCANVIDEO_48MHZ +const scanvideo_timing_t vga_timing_640x480_60_default = + { + .clock_freq = 24000000, + + .h_active = 640, + .v_active = 480, + + .h_front_porch = 16, + .h_pulse = 64, + .h_total = 800, + .h_sync_polarity = 1, + + .v_front_porch = 1, + .v_pulse = 2, + .v_total = 500, + .v_sync_polarity = 1, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + +const scanvideo_timing_t vga_timing_800x600_54_default = + { + .clock_freq = 24000000, // wrong, but ok for now + + .h_active = 800, + .v_active = 600, + + .h_front_porch = 3 * 8, + .h_pulse = 10 * 8, + .h_total = 126 * 8, + .h_sync_polarity = 0, + + .v_front_porch = 1, + .v_pulse = 3, + .v_total = 619, + .v_sync_polarity = 0, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + +const scanvideo_timing_t vga_timing_800x600_60_default = + { + .clock_freq = 38400000, + + .h_active = 800, + .v_active = 600, + + .h_front_porch = 4 * 8, + .h_pulse = 10 * 8, + .h_total = 128 * 8, + .h_sync_polarity = 0, + + .v_front_porch = 1, + .v_pulse = 3, + .v_total = 625, + .v_sync_polarity = 0, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + +const scanvideo_timing_t vga_timing_1024x768_63_default = + { + .clock_freq = 24000000, // wrong, but ok for now + + .h_active = 1024, + .v_active = 768, + + .h_front_porch = 7 * 8, + .h_pulse = 13 * 8, + .h_total = 168 * 8, + .h_sync_polarity = 0, + + .v_front_porch = 1, + .v_pulse = 3, + .v_total = 797, + .v_sync_polarity = 0, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + +const scanvideo_timing_t vga_timing_1280x1024_40_default = + { + .clock_freq = 24000000, // wrong, but ok for now + + .h_active = 1280, + .v_active = 1024, + + .h_front_porch = 7 * 8, + .h_pulse = 16 * 8, + .h_total = 206 * 8, + .h_sync_polarity = 0, + + .v_front_porch = 1, + .v_pulse = 3, + .v_total = 1048, + .v_sync_polarity = 0, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + +const scanvideo_timing_t vga_timing_648x480_60_alt1 = + { + + .clock_freq = 24000000, + + .h_active = 640, + .v_active = 480, + + .h_front_porch = 16, + .h_pulse = 48, + .h_total = 768, + .h_sync_polarity = 1, + + .v_front_porch = 10, + .v_pulse = 2, + .v_total = 523, + .v_sync_polarity = 1, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + +const scanvideo_timing_t vga_timing_648x480_50ish = + { + + .clock_freq = 24000000, + + .h_active = 640, + .v_active = 480, + + .h_front_porch = 56, + .h_pulse = 72, + .h_total = 896, + .h_sync_polarity = 1, + + .v_front_porch = 30, + .v_pulse = 2, + .v_total = 536, + .v_sync_polarity = 1, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + +const scanvideo_timing_t vga_timing_648x480_50ish2 = + { + + .clock_freq = 24000000, + + .h_active = 640, + .v_active = 480, + + .h_front_porch = 32, + .h_pulse = 64, + .h_total = 832, + .h_sync_polarity = 1, + + .v_front_porch = 27, + .v_pulse = 2, + .v_total = 577, + .v_sync_polarity = 1, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + +const scanvideo_timing_t vga_timing_648x480_50ish3 = + { + + .clock_freq = 24000000, + + .h_active = 640, + .v_active = 480, + + .h_front_porch = 72, + .h_pulse = 96, + .h_total = 928, + .h_sync_polarity = 1, + + .v_front_porch = 8, + .v_pulse = 2, + .v_total = 518, + .v_sync_polarity = 1, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + +#define actual_vga_timing_50 vga_timing_648x480_50ish3 + +/* this is 50 hz */ +const scanvideo_timing_t vga_timing_wide_480_50 = + { + .clock_freq = 24000000, + + .h_active = 800, + .v_active = 480, + + .h_front_porch = 32, + .h_pulse = 48, + .h_total = 960, + .h_sync_polarity = 0, + + .v_front_porch = 1, + .v_pulse = 2, + .v_total = 500, + .v_sync_polarity = 0, + + .enable_clock = 1, + .clock_polarity = 0, + + .enable_den = 1 + }; + +const scanvideo_mode_t vga_mode_tft_800x480_50 = + { + .default_timing = &vga_timing_wide_480_50, + .pio_program = &video_24mhz_composable, + .width = 800, + .height = 480, + .xscale = 1, + .yscale = 1, + }; + +const scanvideo_mode_t vga_mode_tft_400x240_50 = + { + .default_timing = &vga_timing_wide_480_50, + .pio_program = &video_24mhz_composable, + .width = 400, + .height = 240, + .xscale = 2, + .yscale = 2, + }; + +const scanvideo_timing_t vga_timing_512x576_50_attempt1 = + { + .clock_freq = 24000000, + + .h_active = 512, + .v_active = 576, + + .h_front_porch = 64, + .h_pulse = 64, + .h_total = 768, + .h_sync_polarity = 1, + + .v_front_porch = 30, + .v_pulse = 2, + .v_total = 612, + .v_sync_polarity = 1, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + +const scanvideo_timing_t vga_timing_512x576_60_attempt1 = + { + .clock_freq = 24000000, + + .h_active = 512, + .v_active = 576, + + .h_front_porch = 64, + .h_pulse = 64, + .h_total = 768, + .h_sync_polarity = 1, + + .v_front_porch = 30, + .v_pulse = 2, + .v_total = 612, + .v_sync_polarity = 1, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + +const scanvideo_mode_t vga_mode_256x192_50 = + { + .default_timing = &vga_timing_512x576_50_attempt1, + .pio_program = &video_24mhz_composable, + .width = 256, + .height = 192, + .xscale = 2, + .yscale = 3, + }; + +const scanvideo_timing_t vga_timing_800x600_38 = + { + .clock_freq = 24000000, + + .h_active = 800, + .v_active = 600, + + .h_front_porch = 24, + .h_pulse = 80, + .h_total = 1008, + .h_sync_polarity = 1, + + .v_front_porch = 3, + .v_pulse = 4, + .v_total = 621, + .v_sync_polarity = 1, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + +const scanvideo_mode_t vga_mode_800x600_38 = + { + .default_timing = &vga_timing_800x600_38, + .pio_program = &video_24mhz_composable, + .width = 800, + .height = 600, + .xscale = 1, + .yscale = 1, + }; + +const scanvideo_mode_t vga_mode_800x600_54 = + { + .default_timing = &vga_timing_800x600_54_default, + .pio_program = &video_24mhz_composable, + .width = 800, + .height = 600, + .xscale = 1, + .yscale = 1, + }; + +const scanvideo_mode_t vga_mode_800x600_60 = + { + .default_timing = &vga_timing_800x600_60_default, + .pio_program = &video_24mhz_composable, + .width = 800, + .height = 600, + .xscale = 1, + .yscale = 1, + }; + + +const scanvideo_mode_t vga_mode_1024x768_63 = + { + .default_timing = &vga_timing_1024x768_63_default, + .pio_program = &video_24mhz_composable, + .width = 1024, + .height = 768, + .xscale = 1, + .yscale = 1, + }; + +const scanvideo_mode_t vga_mode_1280x1024_40 = + { + .default_timing = &vga_timing_1280x1024_40_default, + .pio_program = &video_24mhz_composable, + .width = 1280, + .height = 1024, + .xscale = 1, + .yscale = 1, + }; + + +const scanvideo_mode_t vga_mode_640x480_50 = + { + .default_timing = &actual_vga_timing_50, + .pio_program = &video_24mhz_composable, + .width = 640, + .height = 480, + .xscale = 1, + .yscale = 1, + }; + +const scanvideo_mode_t vga_mode_320x240_50 = + { + .default_timing = &actual_vga_timing_50, + .pio_program = &video_24mhz_composable, + .width = 320, + .height = 240, + .xscale = 2, + .yscale = 2, + }; +#else +const scanvideo_timing_t vga_timing_640x480_60_default = + { + .clock_freq = 25000000, + + .h_active = 640, + .v_active = 480, + + .h_front_porch = 16, + .h_pulse = 64, + .h_total = 800, + .h_sync_polarity = 1, + + .v_front_porch = 1, + .v_pulse = 2, + .v_total = 523, + .v_sync_polarity = 1, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; +#endif + +const scanvideo_mode_t vga_mode_160x120_60 = + { + .default_timing = &vga_timing_640x480_60_default, + .pio_program = &video_24mhz_composable, + .width = 160, + .height = 120, + .xscale = 4, + .yscale = 4, + }; + +const scanvideo_mode_t vga_mode_213x160_60 = + { + .default_timing = &vga_timing_640x480_60_default, + .pio_program = &video_24mhz_composable, + .width = 213, + .height = 160, + .xscale = 3, + .yscale = 3, + }; + +const scanvideo_mode_t vga_mode_320x240_60 = + { + .default_timing = &vga_timing_640x480_60_default, + .pio_program = &video_24mhz_composable, + .width = 320, + .height = 240, + .xscale = 2, + .yscale = 2, + }; + +const scanvideo_mode_t vga_mode_640x480_60 = + { + .default_timing = &vga_timing_640x480_60_default, + .pio_program = &video_24mhz_composable, + .width = 640, + .height = 480, + .xscale = 1, + .yscale = 1, + }; + +const scanvideo_timing_t vga_timing_1280x720_60_default = + { + .clock_freq = 74250000, + + .h_active = 1280, + .v_active = 720, + + .h_front_porch = 110, + .h_pulse = 40, + .h_total = 1650, + .h_sync_polarity = 1, + + .v_front_porch = 5, + .v_pulse = 5, + .v_total = 750, + .v_sync_polarity = 1, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + + +const scanvideo_mode_t vga_mode_720p_60 = + { + .default_timing = &vga_timing_1280x720_60_default, + .pio_program = &video_24mhz_composable, + .width = 1280, + .height = 720, + .xscale = 1, + .yscale = 1, + }; + +const scanvideo_timing_t vga_timing_1920x1080_60_default = + { + .clock_freq = 148500000, + + .h_active = 1920, + .v_active = 1080, + + .h_front_porch = 88, + .h_pulse = 44, + .h_total = 2200, + .h_sync_polarity = 1, + + .v_front_porch = 4, + .v_pulse = 5, + .v_total = 1125, + .v_sync_polarity = 1, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 + }; + + +const scanvideo_mode_t vga_mode_1080p_60 = + { + .default_timing = &vga_timing_1920x1080_60_default, + .pio_program = &video_24mhz_composable, + .width = 1920, + .height = 1080, + .xscale = 1, + .yscale = 1, + }; + diff --git a/MCUME_pico/vga_t4/vga_t_dma.h b/MCUME_pico/vga_t4/vga_t_dma.h new file mode 100644 index 0000000..efb79c0 --- /dev/null +++ b/MCUME_pico/vga_t4/vga_t_dma.h @@ -0,0 +1,57 @@ +/* + Wrapping class to extend VGA_T4 to TFT_T_DMA +*/ + +#ifndef _VGA_T_DMAH_ +#define _VGA_T_DMAH_ + +#ifdef __cplusplus +#include "VGA_t4.h" +#endif + + +#define RGBVAL16(r,g,b) VGA_RGB(r,g,b) +#define RGBVAL8(r,g,b) VGA_RGB(r,g,b) + + + +#ifdef HIRES +#define TFT_WIDTH 640 +#define TFT_REALWIDTH 640 +#else +#define TFT_WIDTH 320 +#define TFT_REALWIDTH 320 +#endif + +#define TFT_HEIGHT 240 +#define TFT_REALHEIGHT 240 + + + +#ifdef __cplusplus + +class TFT_T_DMA: public VGA_T4 +{ + public: + // Fake touch screen functions + bool isTouching(void) { return false; } + void readRaw(uint16_t * oX, uint16_t * oY, uint16_t * oZ) { } + void readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) { }; + void callibrateTouch(uint16_t xMin,uint16_t yMin,uint16_t xMax,uint16_t yMax) { } + + // fake DMA functions + void startDMA(void) { }; + void stopDMA(void) { }; + + // fake no DMA functions + void writeScreenNoDma(const vga_pixel *pcolors) { writeScreen(pcolors); } + void fillScreenNoDma(vga_pixel color) { clear(color); } + void drawTextNoDma(int16_t x, int16_t y, const char * text, vga_pixel fgcolor, vga_pixel bgcolor, bool doublesize) { drawText(x,y,text,fgcolor,bgcolor,doublesize); } + void drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, vga_pixel color) { drawRect(x, y, w, h, color); } + void drawSpriteNoDma(int16_t x, int16_t y, const int16_t *bitmap) { drawSprite(x, y, bitmap); } + void drawSpriteNoDma(int16_t x, int16_t y, const int16_t *bitmap, uint16_t croparx, uint16_t cropary, uint16_t croparw, uint16_t croparh) { drawSprite(x, y, bitmap, croparx, cropary, croparw, croparh); } +}; + + +#endif +#endif